public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c/5384: Internal compiler error in insn_default_length
@ 2002-01-14 14:36 cheng
  0 siblings, 0 replies; 2+ messages in thread
From: cheng @ 2002-01-14 14:36 UTC (permalink / raw)
  To: gcc-gnats


>Number:         5384
>Category:       c
>Synopsis:       Internal compiler error in insn_default_length
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Jan 14 14:36:01 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     cheng@pcigeomatics.com
>Release:        gcc 3.0.3
>Organization:
>Environment:
Red hat linux 7.2
>Description:
gcc -O2 -ffloat-store -save-temps  -Wall -DPCIDYNAMIC  -I.   -I../../.. -I../../../lib -I/pci_build/vcur -I/pci_build/vcur/lib -I/usr/include/g++ -I/usr/X11R6/include -c findvisarea.cpp -o findvisarea.o 
findvisarea.cpp: In function `CViewpoint UORToRowCol(long int, long int)':
findvisarea.cpp:184: warning: control reaches end of non-void function
findvisarea.cpp: In function `TBool InviewProcessOnePt(FILE*, int, const 
   viewpointList&, CTempFile&)':
findvisarea.cpp:588: Unrecognizable insn:
(insn 4942 1032 4458 (parallel[ 
            (set (reg:HI 1 dx [942])
                (const_int 0 [0x0]))
            (clobber (reg:CC 17 flags))
        ] ) -1 (nil)
    (expr_list:REG_UNUSED (reg:CC 17 flags)
        (nil)))
findvisarea.cpp:588: Internal compiler error in insn_default_length, at 
   insn-attrtab.c:223
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
make: *** [findvisarea.o] Error 1
>How-To-Repeat:

>Fix:

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

IyA0NCAiZmluZHZpc2FyZWEuY3BwIgojIDEgImludGVydmlldy5oIiAxCiMgMjkgImludGVydmll
dy5oIgojIDEgIi4uLy4uLy4uL2xpYi9nZGIuaCIgMQojIDMzOCAiLi4vLi4vLi4vbGliL2dkYi5o
IgojIDEgIi4uLy4uLy4uL2xpYi9jY2xjb252LmgiIDEKIyA3NSAiLi4vLi4vLi4vbGliL2NjbGNv
bnYuaCIKIyAxICIuLi8uLi8uLi9saWIvY2NsYmFzZS5oIiAxCiMgMzkgIi4uLy4uLy4uL2xpYi9j
Y2xiYXNlLmgiCmV4dGVybiAiQyIgewoKIyAxICIuLi8uLi8uLi9saWIvcGNpc3lzLmgiIDEKIyA0
MiAiLi4vLi4vLi4vbGliL2NjbGJhc2UuaCIgMgojIDEgIi4uLy4uLy4uL2xpYi9jY2xjb25mLmgi
IDEKIyA0MyAiLi4vLi4vLi4vbGliL2NjbGJhc2UuaCIgMgojIDEgIi4uLy4uLy4uL2xpYi9jY2xw
b3J0LmgiIDEKIyA2NSAiLi4vLi4vLi4vbGliL2NjbHBvcnQuaCIKIyAxICIuLi8uLi8uLi9saWIv
cGNpc3lzLmgiIDEKIyA2NiAiLi4vLi4vLi4vbGliL2NjbHBvcnQuaCIgMgojIDEyOSAiLi4vLi4v
Li4vbGliL2NjbHBvcnQuaCIKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI4MyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDEgMwojIDI4NCAiL3Vzci9pbmNsdWRl
L2ZlYXR1cmVzLmgiIDIgMwojIDMxMiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMwojIDMxMyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz
LmgiIDIgMwojIDM4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
MC4zL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDEg
MwojIDE5OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9p
bmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyA0NCAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlv
LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyNiAiL3Vzci9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMK
IyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj
IDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNo
YXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVu
c2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4
dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4
dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNs
dWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVm
IHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQx
Nl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25l
ZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRl
bnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNp
b25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYg
X19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVm
IF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xv
bmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19u
bGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2Zm
X3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBf
X3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYg
X191X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9
IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRy
X3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNl
Y29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50
IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9f
Y2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKCgoKdHlwZWRlZiBpbnQgX19r
ZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRl
ZiBsb25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsK
dHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxr
Y250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9s
b25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5
cGVkZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7
CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBp
bnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5z
aWduZWQgaW50IF9fc29ja2xlbl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFk
dHlwZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9iaXRz
L3NjaGVkLmgiIDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlv
cml0eTsKICB9OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAzCgoK
c3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBpbnQgX19z
cGlubG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0
aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAgaW50
IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFy
YW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBz
aXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNr
YWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYg
c3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRf
ZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsK
ICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZl
ZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19t
X2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0
ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211
dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoKCnR5cGVkZWYgc3Ry
dWN0IF9wdGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19yd19s
b2NrOwogIGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZXI7CiAg
X3B0aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193
cml0ZV93YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNoYXJlZDsKfSBwdGhy
ZWFkX3J3bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7CiAgaW50
IF9fcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVkZWYgdm9sYXRpbGUg
aW50IHB0aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgc3RydWN0IF9wdGhy
ZWFkX2Zhc3Rsb2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9yZXF1aXJlZDsKICBpbnQgX19iYV9w
cmVzZW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsKfSBwdGhyZWFkX2JhcnJpZXJf
dDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX2JhcnJpZXJh
dHRyX3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMTQ0ICIv
dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyA0NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDU0ICIvdXNy
L2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8u
aCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwojIDY0ICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVm
IHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgNzQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2xpYmlvLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9fR19jb25maWcuaCIgMSAzCiMgOSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMTAgIi91c3IvaW5jbHVkZS9fR19j
b25maWcuaCIgMiAzCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzEyICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIg
MwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2No
YXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK
IyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93
Y2hhci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDY3ICIvdXNyL2lu
Y2x1ZGUvd2NoYXIuaCIgMwp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24K
ICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0g
X19tYnN0YXRlX3Q7CiMgMjUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVm
IHN0cnVjdAp7CiAgX19vZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zw
b3NfdDsKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBf
X3N0YXRlOwp9IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9nY29udi5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUv
Z2NvbnYuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2No
YXIuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNy
L2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgMjkgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoj
IDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVk
ZS9zdGRkZWYuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoKCgplbnVt
CnsKICBfX0dDT05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIsCiAg
X19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExfT1VU
UFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQs
CgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJST1IK
fTsKCgoKZW51bQp7CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdOT1JF
X0VSUk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19nY29u
dl9zdGVwX2RhdGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2djb252
X3RyYW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19nY29u
dl9zdGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAq
LCBpbnQsIGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0IF9f
Z2NvbnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9f
Z2NvbnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVj
dCBfX2djb252X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBfX2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50
ICgqX19nY29udl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBj
aGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
dW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2dj
b252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVk
ZWYgaW50ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7
CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3Qg
X19nY29udl90cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7CiAg
X19nY29udl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2NvbnZf
dHJhbnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVjdCBf
X2djb252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAg
c3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25zdCBj
aGFyICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1lOwog
IGNoYXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2Zj
dCBfX2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9fbWlu
X25lZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVlZGVk
X3RvOwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAq
X19kYXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIg
Kl9fb3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2ZsYWdz
OwoKCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91c2U7
CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0
cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9f
Z2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9f
c3RlcHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhIFtd
Owp9ICpfX2djb252X3Q7CiMgNDUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5cGVk
ZWYgdW5pb24KewogIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBz
dHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19k
YXRhOwogIH0gX19jb21iaW5lZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZf
dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50
MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5
cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo
X19TSV9fKSkpOwojIDMzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNTMgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYg
X19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNTQgIi91c3IvaW5jbHVkZS9saWJp
by5oIiAyIDMKIyAxNjAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fanVtcF90
OyBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTcwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVm
IHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19t
YXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7CiMg
MTkzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7
CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwK
ICBfX2NvZGVjdnRfbm9jb252Cn07CiMgMjYxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1
Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBj
aGFyKiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3Jp
dGVfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAg
Y2hhciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2
ZV9iYXNlOwogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7Cgog
IHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47
CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoK
CgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zm
c2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDMwNSAi
L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgoKCgogIHZvaWQg
Kl9fcGFkMTsKICB2b2lkICpfX3BhZDI7CgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsx
NSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3Qg
X0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGlu
XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0
cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsKIyAzNDQgIi91c3IvaW5jbHVkZS9s
aWJpby5oIiAzCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUs
IGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3Qg
X19pb193cml0ZV9mbiAodm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBp
bnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9f
dyk7CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9pZCAqX19jb29raWUpOwoKCgoKdHlw
ZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dy
aXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29r
aWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1
bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9faW9fcmVhZF9mbiAqcmVhZDsKICBfX2lv
X3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtfZm4gKnNlZWs7CiAgX19pb19jbG9zZV9mbiAq
Y2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKdHlwZWRlZiBfSU9fY29va2llX2lv
X2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsKCnN0cnVjdCBfSU9fY29va2llX2Zp
bGU7CgoKZXh0ZXJuIHZvaWQgX0lPX2Nvb2tpZV9pbml0IChzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxl
ICpfX2NmaWxlLCBpbnQgX19yZWFkX3dyaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKl9fY29va2llLCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9fZm5zKTsKCgoKCmV4
dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgp
OwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9f
b3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dW5k
ZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lP
X0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICos
IHdpbnRfdCkgdGhyb3cgKCk7CiMgNDI2ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4g
aW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3B1
dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVv
ZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19G
SUxFICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJ
TEUgKl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19G
SUxFICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICop
IHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93
ICgpOwojIDQ1NiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZzY2Fu
ZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3Qg
Y2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0
KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBf
X3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwg
dm9pZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAo
X0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0
X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4
dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKIyA1
MTQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn0KIyA3NSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKdHlwZWRl
ZiBfX2dudWNfdmFfbGlzdCBfX25vdF92YV9saXN0X187CiMgODkgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYg
X0dfZnBvc190IGZwb3NfdDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0X3Q7CiMgMTM4
ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUv
c3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxMzkg
Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9z
dGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRlcm4gRklMRSAqc3Rkb3V0Owpl
eHRlcm4gRklMRSAqc3RkZXJyOwojIDE1MyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCByZW1vdmUgKF9f
Y29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHJlbmFtZSAoX19j
b25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhyb3cgKCk7CgoKCgpleHRl
cm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCk7CiMgMTY5ICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4g
RklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqdG1wbmFtIChj
aGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3Mp
IHRocm93ICgpOwojIDE4OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3Qg
Y2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZmbHVzaCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBmY2xvc2VhbGwgKHZvaWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBG
SUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoK
ZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1l
LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMs
CiAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAo
KTsKIyAyMzMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMv
aW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICpmb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKZXh0ZXJuIEZJTEUgKmZyZW9wZW42NCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAg
ICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpm
ZG9wZW4gKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBGSUxFICpmb3BlbmNvb2tpZSAodm9pZCAqX19yZXN0cmljdCBfX21hZ2ljX2Nvb2tpZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2Rl
cywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9f
aW9fZnVuY3MpIHRocm93ICgpOwoKCmV4dGVybiBGSUxFICpmbWVtb3BlbiAodm9pZCAqX19zLCBz
aXplX3QgX19sZW4sIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgpleHRlcm4g
RklMRSAqb3Blbl9tZW1zdHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fYnVmbG9jLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX3NpemVsb2MpIHRocm93
ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwg
Y2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAo
RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAg
ICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRl
cm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVz
dHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJv
dyAoKTsKCmV4dGVybiBpbnQgcHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3Qg
X19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h
dCwgLi4uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHZmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0
IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAg
ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7CgpleHRlcm4gaW50IHZwcmludGYg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcp
CiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAg
ICBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc25wcmludGYg
KGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0ZXJu
IGludCB2c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9f
Z251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1h
dF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwoKCgoKCmV4dGVybiBpbnQgdmFzcHJpbnRmIChjaGFy
ICoqX19yZXN0cmljdCBfX3B0ciwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZiwKICAgICAg
ICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IF9f
YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwpleHRlcm4gaW50IGFz
cHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKZXh0ZXJuIGludCB2ZHBy
aW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwKICAgICAgICAg
ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgZHByaW50
ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoK
CgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cg
KCk7CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv
cm1hdCwgLi4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxFICpfX3Jlc3Ry
aWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAg
ICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0ZXJuIGludCB2c2NhbmYgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMSwgMCkp
KTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2du
dWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf
XyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBn
ZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0Y2hh
cl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2Vk
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19j
LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhy
b3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2Ms
IEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChp
bnQgX19jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBf
X24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBj
aGFyICpmZ2V0c191bmxvY2tlZCAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyA0MzcgIi91
c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRp
by5oIiAzCmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19s
aW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0
IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgZ2V0ZGVs
aW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxF
ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZwdXRz
X3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5n
ZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qg
ZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp
OwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwg
c2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9f
cmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAo
dm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg
KCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJp
Y3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9fd2hlbmNl
KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNTAw
ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUv
c3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19v
ZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IGZzZXRwb3MgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19wb3Mp
IHRocm93ICgpOwojIDUzNCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla282NCAoRklMRSAqX19z
dHJlYW0sIF9fb2ZmNjRfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKZXh0ZXJuIF9f
b2ZmNjRfdCBmdGVsbG82NCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZn
ZXRwb3M2NCAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVzdHJpY3Qg
X19wb3MpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVh
bSwgX19jb25zdCBmcG9zNjRfdCAqX19wb3MpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjbGVh
cmVyciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGludCBzeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNf
ZXJybGlzdFtdOwoKCmV4dGVybiBpbnQgX3N5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpf
X2NvbnN0IF9zeXNfZXJybGlzdFtdOwoKCgoKCmV4dGVybiBpbnQgZmlsZW5vIChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAq
X19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cGNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJt
aWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNoYXIg
Kl9fcykgdGhyb3cgKCk7CgoKCgpzdHJ1Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50IG9ic3RhY2tf
cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBvYnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jl
c3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251
Y192YV9saXN0IF9fYXJncykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9ja2ZpbGUg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwojIDY0MSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9zdGRpby5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMwppbmxpbmUg
aW50CnZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgX19nbnVjX3ZhX2xp
c3QgX19hcmcpIHRocm93ICgpCnsKICByZXR1cm4gdmZwcmludGYgKHN0ZG91dCwgX19mbXQsIF9f
YXJnKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hhciAodm9pZCkgdGhyb3cgKCkKewogIHJldHVybiBf
SU9fZ2V0YyAoc3RkaW4pOwp9CgoKCgppbmxpbmUgaW50CmdldGNfdW5sb2NrZWQgKEZJTEUgKl9f
ZnApIHRocm93ICgpCnsKICByZXR1cm4gKChfX2ZwKS0+X0lPX3JlYWRfcHRyID49IChfX2ZwKS0+
X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoX19mcCkgOiAqKHVuc2lnbmVkIGNoYXIgKikgKF9fZnAp
LT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgppbmxpbmUgaW50CmdldGNoYXJfdW5sb2NrZWQgKHZvaWQp
IHRocm93ICgpCnsKICByZXR1cm4gKChzdGRpbiktPl9JT19yZWFkX3B0ciA+PSAoc3RkaW4pLT5f
SU9fcmVhZF9lbmQgPyBfX3VmbG93IChzdGRpbikgOiAqKHVuc2lnbmVkIGNoYXIgKikgKHN0ZGlu
KS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKCgppbmxpbmUgaW50CnB1dGNoYXIgKGludCBfX2MpIHRo
cm93ICgpCnsKICByZXR1cm4gX0lPX3B1dGMgKF9fYywgc3Rkb3V0KTsKfQoKCgoKaW5saW5lIGlu
dApmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICBy
ZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0
ZV9lbmQpID8gX19vdmVyZmxvdyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAo
dW5zaWduZWQgY2hhcikgKCooX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9
CgoKCgoKaW5saW5lIGludApwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3Ry
ZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNo
YXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIr
KyA9IChfX2MpKSk7Cn0KCgppbmxpbmUgaW50CnB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIHRo
cm93ICgpCnsKICByZXR1cm4gKCgoc3Rkb3V0KS0+X0lPX3dyaXRlX3B0ciA+PSAoc3Rkb3V0KS0+
X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChzdGRvdXQsICh1bnNpZ25lZCBjaGFyKSAoX19j
KSkgOiAodW5zaWduZWQgY2hhcikgKCooc3Rkb3V0KS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykp
KTsKfQoKCgoKCmlubGluZSBfX3NzaXplX3QKZ2V0bGluZSAoY2hhciAqKl9fbGluZXB0ciwgc2l6
ZV90ICpfX24sIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fZ2V0ZGVsaW0g
KF9fbGluZXB0ciwgX19uLCAnXG4nLCBfX3N0cmVhbSk7Cn0KCgoKCgppbmxpbmUgaW50CmZlb2Zf
dW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFt
KS0+X2ZsYWdzICYgMHgxMCkgIT0gMCk7Cn0KCgppbmxpbmUgaW50CmZlcnJvcl91bmxvY2tlZCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3Mg
JiAweDIwKSAhPSAwKTsKfQojIDY0MiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCn0KIyAxMzAgIi4uLy4uLy4uL2xp
Yi9jY2xwb3J0LmgiIDIKIyAxNjIgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiCiMgMSAiL3Vzci9p
bmNsdWRlL21hdGguaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoK
ZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzCiMg
MjUgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVh
dHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDIgMwojIDM0
ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9uYW4u
aCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvbWF0aGRlZi5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAz
CnR5cGVkZWYgbG9uZyBkb3VibGUgZmxvYXRfdDsKCnR5cGVkZWYgbG9uZyBkb3VibGUgZG91Ymxl
X3Q7CiMgNDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDYzICIvdXNyL2luY2x1ZGUvbWF0
aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNy
L2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIGFjb3MgKGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYWNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7
CgpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fYXNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0YW4gKGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbiAoZG91YmxlIF9feCkgdGhyb3cg
KCk7CgpleHRlcm4gZG91YmxlIGF0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KSB0aHJvdyAo
KTsKCgpleHRlcm4gZG91YmxlIGNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19jb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW4gKGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2luIChkb3VibGUgX194KSB0aHJvdyAo
KTsKCmV4dGVybiBkb3VibGUgdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX3RhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIHNpbmNvcyAoZG91
YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJu
IHZvaWQgX19zaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29z
eCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgY29zaCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19jb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBk
b3VibGUgc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaW5oIChk
b3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgdGFuaCAoZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX190YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19h
Y29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGFzaW5oIChkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2FzaW5oIChkb3VibGUgX194KSB0aHJvdyAo
KTsKCmV4dGVybiBkb3VibGUgYXRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fYXRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZXhw
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cCAoZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZXhwMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fZXhwMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJs
ZSBwb3cxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19wb3cxMCAoZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZnJleHAgKGRvdWJsZSBfX3gsIGlu
dCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mcmV4cCAoZG91YmxlIF9f
eCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxkZXhwIChkb3Vi
bGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZGV4cCAo
ZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9n
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZyAoZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBkb3VibGUgX19sb2cxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJs
ZSBtb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19tb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoKCmV4dGVy
biBkb3VibGUgZXhwbTEgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhw
bTEgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMXAgKGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCmV4dGVybiBkb3VibGUgbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19sb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgZXhwMiAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAyIChkb3VibGUgX194KSB0
aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzIgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gZG91YmxlIF9fbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3Vi
bGUgcG93IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X3BvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBz
cXJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NxcnQgKGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGh5cG90IChkb3VibGUgX194LCBkb3VibGUg
X195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2h5cG90IChkb3VibGUgX194LCBkb3VibGUg
X195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgY2JydCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19jYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGRvdWJsZSBjZWlsIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Nl
aWwgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZmFicyAoZG91YmxlIF9f
eCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9f
ZmFicyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CmV4dGVybiBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1vZCAoZG91
YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbW9kIChkb3Vi
bGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZiAoZG91
YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl
cm4gaW50IF9fZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZiAoZG91YmxlIF9fdmFsdWUpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZSAoZG91
YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl
cm4gZG91YmxlIGRyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVy
biBkb3VibGUgc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBj
b3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBk
b3VibGUgbmFuIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmFuIChfX2NvbnN0IGNoYXIgKl9fdGFnYikg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBfX2lz
bmFuIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCgpleHRlcm4gaW50IGlzbmFuIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgajAgKGRvdWJsZSkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19qMCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBqMSAo
ZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2oxIChkb3VibGUpIHRocm93ICgpOwpl
eHRlcm4gZG91YmxlIGpuIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19q
biAoaW50LCBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIHkwIChkb3VibGUpIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9feTAgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUg
eTEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195MSAoZG91YmxlKSB0aHJvdyAo
KTsKZXh0ZXJuIGRvdWJsZSB5biAoaW50LCBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9feW4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIGVyZiAoZG91
YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZiAoZG91YmxlKSB0aHJvdyAoKTsKZXh0
ZXJuIGRvdWJsZSBlcmZjIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmYyAo
ZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBsZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19sZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3Vi
bGUgdGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGdhbW1hIChkb3Vi
bGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX2dhbW1hIChkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91
YmxlIGxnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19sZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gZG91YmxlIHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIg
KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25leHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGRvdWJsZSBuZXh0
dG93YXJkIChkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25leHR0b3dhcmQgKGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CgpleHRlcm4gZG91YmxlIHJlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19yZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo
cm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHNjYWxiIChkb3VibGUgX194LCBkb3VibGUgX19uKSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxiIChkb3VibGUgX194LCBkb3VibGUgX19uKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibiAoZG91YmxlIF9feCwgaW50IF9fbikgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
aW50IF9faWxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2Fs
YmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
c2NhbGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRv
dWJsZSBuZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbmVh
cmJ5aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSByb3VuZCAoZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yb3VuZCAoZG91YmxlIF9feCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBkb3VibGUgdHJ1bmMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX3RydW5jIChkb3VibGUgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZG91Ymxl
IHJlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7IGV4
dGVybiBkb3VibGUgX19yZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGludCAqX19xdW8p
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVy
biBsb25nIGxvbmcgaW50IGxscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGxvbmcgaW50IF9fbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcg
aW50IGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyb3Vu
ZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmQgKGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmQgKGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGZkaW0gKGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZmRpbSAoZG91YmxlIF9feCwgZG91Ymxl
IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWF4IChkb3VibGUgX194LCBkb3VibGUg
X195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYXggKGRvdWJsZSBfX3gsIGRvdWJsZSBf
X3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1pbiAoZG91YmxlIF9feCwgZG91YmxlIF9f
eSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWluIChkb3VibGUgX194LCBkb3VibGUgX195
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnkgKGRvdWJsZSBfX3ZhbHVlKSB0
aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9f
c2lnbmJpdCAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCgpleHRlcm4gZG91YmxlIGZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwg
ZG91YmxlIF9feikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWEgKGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3ksIGRvdWJsZSBfX3opIHRocm93ICgpOwojIDY0ICIvdXNyL2luY2x1ZGUvbWF0aC5o
IiAyIDMKIyA4MiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMK
ZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19h
Y29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7Cgpl
eHRlcm4gZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0
YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195
LCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuMmYgKGZsb2F0IF9feSwg
ZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgY29zZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBm
bG9hdCBzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaW5mIChmbG9h
dCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX3RhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lk
IHNpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQgKl9fY29zeCkgdGhyb3cg
KCk7IGV4dGVybiB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9h
dCAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGNvc2hmIChmbG9hdCBfX3gp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4
dGVybiBmbG9hdCBzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2lu
aGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuaGYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3RhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpl
eHRlcm4gZmxvYXQgYWNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19h
Y29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXNpbmhmIChmbG9hdCBf
X3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
CgpleHRlcm4gZmxvYXQgYXRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19hdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGV4cGYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cGYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7CgoKCmV4dGVybiBmbG9hdCBleHAxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX2V4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBwb3cxMGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3BvdzEwZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25l
bnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4
cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbGRleHBmIChmbG9hdCBfX3gsIGludCBf
X2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGRleHBmIChmbG9hdCBfX3gsIGlu
dCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRl
cm4gZmxvYXQgbG9nMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cx
MGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IG1vZGZmIChmbG9hdCBfX3gs
IGZsb2F0ICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19tb2RmZiAoZmxvYXQgX194
LCBmbG9hdCAqX19pcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGV4cG0xZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFmIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKCmV4dGVybiBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX2xvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nYmYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2JmIChmbG9hdCBfX3gpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGV4cDJmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19leHAyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nMmYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZzJmIChmbG9hdCBfX3gpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19wb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19zcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGh5cG90ZiAo
ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19oeXBvdGYgKGZs
b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBjYnJ0ZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY2JydGYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjZWlsZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZhYnNm
IChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJu
IGZsb2F0IF9fZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCmV4dGVybiBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2Zsb29yZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZm1v
ZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1vZGYg
KGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmYg
KGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl
eHRlcm4gaW50IF9fZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZmYgKGZsb2F0IF9fdmFsdWUpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWYg
KGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl
eHRlcm4gZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGZsb2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
c2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGNvcHlz
aWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGZsb2F0IG5h
bmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBmbG9hdCBfX25hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW5mIChm
bG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4
dGVybiBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19qMGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGoxZiAoZmxvYXQpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0
IGpuZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2puZiAoaW50LCBmbG9h
dCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9feTBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MWYgKGZsb2F0KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5
bmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195bmYgKGludCwgZmxvYXQp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBlcmZmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2VyZmYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGVyZmNmIChmbG9h
dCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2VyZmNmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVy
biBmbG9hdCBsZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWYg
KGZsb2F0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRnYW1tYWYgKGZsb2F0KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fdGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZs
b2F0IGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19nYW1tYWYgKGZsb2F0
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxnYW1tYWZfciAoZmxvYXQsIGludCAqX19z
aWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWZfciAoZmxvYXQsIGludCAq
X19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCByaW50ZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHRhZnRlcmYgKGZs
b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgpleHRlcm4gZmxvYXQgbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHR0
b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgcmVtYWluZGVyZiAoZmxvYXQgX194LCBm
bG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBfX3gs
IGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzY2FsYmYgKGZsb2F0IF9feCwg
ZmxvYXQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJmIChmbG9hdCBfX3gsIGZs
b2F0IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJuZiAoZmxvYXQgX194LCBp
bnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJuZiAoZmxvYXQgX194LCBpbnQg
X19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxv
YXQgc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X25lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCByb3VuZGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JvdW5kZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRydW5jZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX3RydW5jZiAoZmxvYXQgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZmxvYXQg
cmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19yZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhy
b3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGludCBfX2xyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQg
bHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBmZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRo
cm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgp
OwoKCmV4dGVybiBmbG9hdCBmbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19mbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IF9fZnBjbGFzc2lmeWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0ZiAoZmxvYXQg
X192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4
dGVybiBmbG9hdCBmbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikg
dGhyb3cgKCk7CiMgODMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDk5ICIvdXNyL2luY2x1
ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0
ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBkb3VibGUgYWNv
c2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3Ns
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5sIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2lubCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJs
ZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0
YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVy
biBsb25nIGRvdWJsZSBjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19jb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg
ZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUg
dGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFu
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zbCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0
aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
bG9uZyBkb3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg
ZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19zaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJs
ZSB0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
dGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBh
Y29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fj
b3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2lu
aGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5o
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDEwbCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMTBsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvdzEwbCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChsb25nIGRv
dWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2ZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4
dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91YmxlIF9feCwg
aW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKGxvbmcgZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X21vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoK
CgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4
dGVybiBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gbG9uZyBkb3VibGUgZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX2V4cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBs
b25nIGRvdWJsZSBsb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBs
b25nIGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi
bGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2h5cG90
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIGNicnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19jYnJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19jZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9u
ZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91
YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJs
ZSBmbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19mbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5p
dGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlbCAobG9u
ZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CmV4dGVybiBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf
X3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19kcmVtbCAobG9uZyBkb3VibGUgX194
LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2lnbmlm
aWNhbmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19z
aWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBk
b3VibGUgY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3B5
c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbmFubCAoX19jb25z
dCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fbmFubCAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25hbmwgKGxvbmcg
ZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
ZXh0ZXJuIGludCBpc25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgajBsIChsb25nIGRvdWJs
ZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2owbCAobG9uZyBkb3VibGUpIHRocm93
ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2oxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBk
b3VibGUgam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkw
bCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MGwgKGxvbmcg
ZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkxbCAobG9uZyBkb3VibGUpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsK
ZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIGVyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUg
ZXJmY2wgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmY2wg
KGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWwgKGxvbmcg
ZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbCAobG9uZyBkb3Vi
bGUpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdGdhbW1hbCAobG9uZyBkb3VibGUp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2dhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3Np
Z25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbF9yIChsb25nIGRv
dWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19y
aW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbmV4
dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dGFmdGVybCAo
bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0dG93YXJkbCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dHRvd2FyZGwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
CmV4dGVybiBsb25nIGRvdWJsZSByZW1haW5kZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbWFpbmRlcmwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91
YmxlIHNjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYm5sIChsb25nIGRvdWJs
ZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYm5sIChs
b25nIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2dibCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2dibCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYmxubCAobG9uZyBk
b3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19z
Y2FsYmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRl
cm4gbG9uZyBkb3VibGUgbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CgpleHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdHJ1bmNsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
CmV4dGVybiBsb25nIGRvdWJsZSByZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbXF1b2wg
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwpleHRl
cm4gbG9uZyBsb25nIGludCBsbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBsb25nIGludCBfX2xscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
CmV4dGVybiBsb25nIGludCBscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBpbnQgX19scm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwpleHRlcm4g
bG9uZyBsb25nIGludCBsbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGZkaW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f
eSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZkaW1sIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtYXhsIChs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX2ZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtaW5sIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5
bCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0
aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJs
ZSBfX3opIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWFsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSB0aHJvdyAoKTsKIyAxMDAgIi91
c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDExMyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpleHRl
cm4gaW50IHNpZ25nYW07CiMgMTU0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmVudW0KICB7CiAg
ICBGUF9OQU4sCgogICAgRlBfSU5GSU5JVEUsCgogICAgRlBfWkVSTywKCiAgICBGUF9TVUJOT1JN
QUwsCgogICAgRlBfTk9STUFMCgogIH07CiMgMjQwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCnR5
cGVkZWYgZW51bQp7CiAgX0lFRUVfID0gLTEsCiAgX1NWSURfLAogIF9YT1BFTl8sCiAgX1BPU0lY
XywKICBfSVNPQ18KfSBfTElCX1ZFUlNJT05fVFlQRTsKCgoKCmV4dGVybiBfTElCX1ZFUlNJT05f
VFlQRSBfTElCX1ZFUlNJT047CiMgMjYzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCnN0cnVjdCBf
X2V4Y2VwdGlvbgoKCgogIHsKICAgIGludCB0eXBlOwogICAgY2hhciAqbmFtZTsKICAgIGRvdWJs
ZSBhcmcxOwogICAgZG91YmxlIGFyZzI7CiAgICBkb3VibGUgcmV0dmFsOwogIH07CgoKZXh0ZXJu
IGludCBtYXRoZXJyIChzdHJ1Y3QgX19leGNlcHRpb24gKl9fZXhjKSB0aHJvdyAoKTsKIyAzNTAg
Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5l
LmgiIDEgMwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5l
IGludApfX3NpZ25iaXRmIChmbG9hdCBfX3gpIHRocm93ICgpCnsKICBfX2V4dGVuc2lvbl9fIHVu
aW9uIHsgZmxvYXQgX19mOyBpbnQgX19pOyB9IF9fdSA9IHsgX19mOiBfX3ggfTsKICByZXR1cm4g
X191Ll9faSA8IDA7Cn0KX19pbmxpbmUgaW50Cl9fc2lnbmJpdCAoZG91YmxlIF9feCkgdGhyb3cg
KCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24geyBkb3VibGUgX19kOyBpbnQgX19pWzJdOyB9IF9f
dSA9IHsgX19kOiBfX3ggfTsKICByZXR1cm4gX191Ll9faVsxXSA8IDA7Cn0KX19pbmxpbmUgaW50
Cl9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkKewogIF9fZXh0ZW5zaW9uX18g
dW5pb24geyBsb25nIGRvdWJsZSBfX2w7IGludCBfX2lbM107IH0gX191ID0geyBfX2w6IF9feCB9
OwogIHJldHVybiAoX191Ll9faVsyXSAmIDB4ODAwMCkgIT0gMDsKfQojIDI5MSAiL3Vzci9pbmNs
dWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBfX3NnbiAoZG91YmxlKSB0
aHJvdyAoKTsgX19pbmxpbmUgZG91YmxlIF9fc2duIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJl
dHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjApOyB9IF9faW5s
aW5lIGZsb2F0IF9fc2duZiAoZmxvYXQpIHRocm93ICgpOyBfX2lubGluZSBmbG9hdCBfX3NnbmYg
KGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAw
LjAgPyAxLjAgOiAtMS4wKTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91
YmxlKSB0aHJvdyAoKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ25sIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4wID8gMS4w
IDogLTEuMCk7IH0KIyA0MjYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lu
bGluZSBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVn
aXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6
ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJu
IF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkg
dGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxl
X18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJz
dCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFuMmwgKGxv
bmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3Zh
bHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9
Cl9faW5saW5lIGxvbmcgZG91YmxlIF9fYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBf
X3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAo
X195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfQoKCl9faW5saW5lIGRvdWJsZSBmbW9k
IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3RzdwklJWF4
XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1
IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBm
bW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAiZm5zdHN3CSUl
YXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwg
InUiIChfX3kpIDogImF4IiwgImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcg
ZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkg
eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglm
cHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9f
dmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFs
dWU7IH0KIyA0NDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBk
b3VibGUgc3FydCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1
bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAo
X194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194
KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18g
KCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7
IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkg
eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNx
cnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9Cl9f
aW5saW5lIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyBy
ZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQi
IDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgoKX19p
bmxpbmUgZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYnVpbHRp
bl9mYWJzIChfX3gpOyB9Cl9faW5saW5lIGZsb2F0IGZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgp
IHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZiAoX194KTsgfQpfX2lubGluZSBsb25nIGRvdWJsZSBm
YWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2wg
KF9feCk7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2wgKF9feCk7IH0KIyA0NjcgIi91c3IvaW5j
bHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgYXRhbiAoZG91YmxlIF9f
eCkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVf
XyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSki
KTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpIHRo
cm93ICgpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZs
ZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0
dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9s
YXRpbGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAi
c3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgpfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbjFs
IChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyBfX2V4dGVuc2lvbl9fIHVuaW9uIHsgbG9uZyBkb3Vi
bGUgX194bGQ7IHVuc2lnbmVkIGludCBfX3hpWzNdOyB9IF9fbiA9IHsgX194bGQ6IF9feCB9OyBf
X24uX194aVsyXSA9IChfX24uX194aVsyXSAmIDB4ODAwMCkgfCAweDNmZmY7IF9fbi5fX3hpWzFd
ID0gMHg4MDAwMDAwMDsgX19uLl9feGlbMF0gPSAwOyByZXR1cm4gX19uLl9feGxkOyB9CiMgNDkz
ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIGZsb29y
IChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9f
dm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hv
cnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19j
dykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxl
ICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRp
bnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxk
Y3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQg
Zmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1
ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25l
ZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0i
IChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9fYXNtIF9fdm9s
YXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgi
ZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUg
KCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBs
b25nIGRvdWJsZSBmbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBs
b25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBf
X3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgi
Zm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4
MDQwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9f
YXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsg
X19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3Zh
bHVlOyB9CiMgNTA0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUg
ZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg
X192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1
bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIg
OiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNt
IF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0
aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9s
YXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lu
bGluZSBmbG9hdCBjZWlsZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRp
bGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cg
JTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBf
X2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192
b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBf
X3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0g
X19pbmxpbmUgbG9uZyBkb3VibGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyBy
ZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGlu
dCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3Zv
bGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhm
M2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3
dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAi
IChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJl
dHVybiBfX3ZhbHVlOyB9CiMgNTIyICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMK
X19pbmxpbmUgZG91YmxlCmxkZXhwIChkb3VibGUgX194LCBpbnQgX195KSB0aHJvdyAoKQp7CiAg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxl
IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7
IHJldHVybiBfX3ZhbHVlOwp9CiMgNTQwICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgi
IDMKX19pbmxpbmUgZG91YmxlIGxvZzFwIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVy
IGxvbmcgZG91YmxlIF9fdmFsdWU7IGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAqIDEu
NDE0MjEzNTYyMzczMDk1MDQ4ODBMKSBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsgZWxzZSBf
X2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjJcblx0IiAiZnhjaFxuXHQiICJmeWwyeHAxIiA6ICI9
dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9IF9f
aW5saW5lIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fdmFsdWU7IGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAqIDEuNDE0MjEz
NTYyMzczMDk1MDQ4ODBMKSBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsgZWxzZSBfX2FzbSBf
X3ZvbGF0aWxlX18gKCJmbGRsbjJcblx0IiAiZnhjaFxuXHQiICJmeWwyeHAxIiA6ICI9dCIgKF9f
dmFsdWUpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5l
IGxvbmcgZG91YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVy
IGxvbmcgZG91YmxlIF9fdmFsdWU7IGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAqIDEu
NDE0MjEzNTYyMzczMDk1MDQ4ODBMKSBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsgZWxzZSBf
X2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjJcblx0IiAiZnhjaFxuXHQiICJmeWwyeHAxIiA6ICI9
dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CiMg
NTU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIGFz
aW5oIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9f
ZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICog
X195ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0gX19pbmxpbmUgZmxv
YXQgYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195
ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChf
X3kgKiBfX3kgKyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfSBfX2lubGlu
ZSBsb25nIGRvdWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICog
X195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9fc2duMWwg
KF9feCkpOyB9CgoKCgpfX2lubGluZSBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgp
IHsgcmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3gg
KyAxLjApKTsgfSBfX2lubGluZSBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyBy
ZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEu
MCkpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAo
X194ICsgMS4wKSk7IH0KCgpfX2lubGluZSBkb3VibGUgYXRhbmggKGRvdWJsZSBfX3gpIHRocm93
ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIC0w
LjUgKiBsb2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCk7
IH0gX19pbmxpbmUgZmxvYXQgYXRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIg
bG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0o
X195ICsgX195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCk7IH0gX19pbmxpbmUgbG9u
ZyBkb3VibGUgYXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195
ICsgX195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCk7IH0KCgoKCl9faW5saW5lIGRv
dWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgeyByZXR1cm4gX19z
cXJ0bCAoX194ICogX194ICsgX195ICogX195KTsgfSBfX2lubGluZSBmbG9hdCBoeXBvdGYgKGZs
b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3gg
KyBfX3kgKiBfX3kpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGh5cG90bCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9f
eCArIF9feSAqIF9feSk7IH0KCl9faW5saW5lIGRvdWJsZSBsb2diIChkb3VibGUgX194KSB0aHJv
dyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9fanVuazsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10IiAoX19qdW5r
KSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGlu
ZSBmbG9hdCBsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fanVuazsgX19hc20gX192b2xhdGlsZV9f
ICgiZnh0cmFjdFxuXHQiIDogIj10IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9f
eCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lz
dGVyIGxvbmcgZG91YmxlIF9fanVuazsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQi
IDogIj10IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192
YWx1ZTsgfQojIDU4NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5l
IGZsb2F0CmxkZXhwZiAoZmxvYXQgX194LCBpbnQgX195KSB0aHJvdyAoKQp7CiAgcmVnaXN0ZXIg
bG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIg
KF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7IHJldHVybiBf
X3ZhbHVlOwp9CgpfX2lubGluZSBsb25nIGRvdWJsZQpsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwg
aW50IF9feSkgdGhyb3cgKCkKewogIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNt
IF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUi
ICgobG9uZyBkb3VibGUpIF9feSkpOyByZXR1cm4gX192YWx1ZTsKfQojIDYwOCAiL3Vzci9pbmNs
dWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGxvbmcgaW50CmxyaW50ZiAoZmxvYXQg
X194KSB0aHJvdyAoKQp7CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxl
X18gKCJmaXN0cGwgJTAiIDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsg
cmV0dXJuIF9fbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBpbnQKbHJpbnQgKGRvdWJsZSBfX3gp
IHRocm93ICgpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAo
ImZpc3RwbCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1
cm4gX19scmludHJlczsKfQpfX2lubGluZSBsb25nIGludApscmludGwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCkKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9f
ICgiZmlzdHBsICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJl
dHVybiBfX2xyaW50cmVzOwp9CiMgNjMxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgi
IDMKX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpCnsK
ICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3Rw
bGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBf
X2xscmludHJlczsKfQpfX2lubGluZSBsb25nIGxvbmcgaW50CmxscmludCAoZG91YmxlIF9feCkg
dGhyb3cgKCkKewogIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGls
ZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChfX2xscmludHJlcykgOiAidCIgKF9feCkgOiAic3Qi
KTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9Cl9faW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50bCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgbG9uZyBsb25nIGludCBfX2xscmludHJlczsg
X19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGxsICUwIiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6
ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19sbHJpbnRyZXM7Cn0KCgoKCgoKCl9faW5saW5l
IGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVy
IGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRp
bGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIi
IDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAo
X195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBkcmVtZiAoZmxv
YXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJl
Z2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5c
dCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwg
Ij0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVy
biBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVn
aXN0ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0
IiAiZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAi
PSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJu
IF9fdmFsdWU7IH0KIyA2NjYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lu
bGluZSBpbnQKX19maW5pdGUgKGRvdWJsZSBfX3gpIHRocm93ICgpCnsKICByZXR1cm4gKF9fZXh0
ZW5zaW9uX18KICAgICAgICAgICgoKCgodW5pb24geyBkb3VibGUgX19kOyBpbnQgX19pWzJdOyB9
KSB7X19kOiBfX3h9KS5fX2lbMV0KICAgICAgICAgICAgIHwgMHg4MDBmZmZmZnUpICsgMSkgPj4g
MzEpKTsKfQojIDM1MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNDExICIvdXNyL2luY2x1
ZGUvbWF0aC5oIiAzCn0KIyAxNjMgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiIDIKCgojIDEgIi91
c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9jdHlwZS5o
IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNs
dWRlL2N0eXBlLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMgNDAgIi91c3IvaW5jbHVkZS9jdHlwZS5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL2Vu
ZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2lu
Y2x1ZGUvZW5kaWFuLmgiIDIgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4u
aCIgMiAzCiMgNDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCgoKCgoKZW51bQp7CiAgX0lT
dXBwZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8ICgwKSkgPj4gOCkp
LAogIF9JU2xvd2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6ICgoMSA8PCAoMSkp
ID4+IDgpKSwKICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkgPDwgOCkgOiAoKDEg
PDwgKDIpKSA+PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8PCAoMykpIDw8IDgp
IDogKCgxIDw8ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4ID8gKCgxIDw8ICg0
KSkgPDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAoKDUpIDwgOCA/ICgo
MSA8PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3ByaW50ID0gKCg2KSA8
IDggPyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwKICBfSVNncmFwaCA9
ICgoNykgPCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+PiA4KSksCiAgX0lT
YmxhbmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8ICg4KSkgPj4gOCkp
LAogIF9JU2NudHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6ICgoMSA8PCAoOSkp
ID4+IDgpKSwKICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTApKSA8PCA4KSA6ICgo
MSA8PCAoMTApKSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAoKDEgPDwgKDExKSkg
PDwgOCkgOiAoKDEgPDwgKDExKSkgPj4gOCkpCn07CiMgNzUgIi91c3IvaW5jbHVkZS9jdHlwZS5o
IiAzCmV4dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwpleHRlcm4g
X19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG9sb3dlcjsKZXh0ZXJuIF9fY29uc3QgX19pbnQz
Ml90ICpfX2N0eXBlX3RvdXBwZXI7CiMgOTEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVy
biBpbnQgaXNhbG51bSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRo
cm93ICgpOwpleHRlcm4gaW50IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNk
aWdpdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpl
eHRlcm4gaW50IGlzZ3JhcGggKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50
IGlzc3BhY2UgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzYmxh
bmsgKGludCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBpbnQgaXNhc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAo
aW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgX3RvbG93ZXIgKGludCkgdGhyb3cgKCk7CiMgMTY3ICIvdXNyL2luY2x1ZGUv
Y3R5cGUuaCIgMwpleHRlcm4gX19pbmxpbmUgaW50CnRvbG93ZXIgKGludCBfX2MpIHRocm93ICgp
CnsKICByZXR1cm4gX19jID49IC0xMjggJiYgX19jIDwgMjU2ID8gX19jdHlwZV90b2xvd2VyW19f
Y10gOiBfX2M7Cn0KCmV4dGVybiBfX2lubGluZSBpbnQKdG91cHBlciAoaW50IF9fYykgdGhyb3cg
KCkKewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBfX2N0eXBlX3RvdXBwZXJb
X19jXSA6IF9fYzsKfQojIDIxMCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMwp0eXBl
ZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewoKICBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9j
YWxlc1sxM107CgoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKICBjb25z
dCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91cHBlcjsKfSAq
X19sb2NhbGVfdDsKIyAyMTEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKIyAyMjMgIi91c3Iv
aW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgX19pc2FsbnVtX2wgKGludCwgX19sb2NhbGVf
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2FscGhhX2wgKGludCwgX19sb2NhbGVfdCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgX19pc2NudHJsX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgX19pc2RpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX19pc2xvd2VyX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
X19pc2dyYXBoX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3By
aW50X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3B1bmN0X2wg
KGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3NwYWNlX2wgKGludCwg
X19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3VwcGVyX2wgKGludCwgX19sb2Nh
bGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3hkaWdpdF9sIChpbnQsIF9fbG9jYWxlX3Qp
IHRocm93ICgpOwoKZXh0ZXJuIGludCBfX2lzYmxhbmtfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgX190b3VwcGVyX2wgKGludCBfX2MsIF9fbG9jYWxlX3Qg
X19sKSB0aHJvdyAoKTsKIyAyNzYgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCn0KIyAxNjYgIi4u
Ly4uLy4uL2xpYi9jY2xwb3J0LmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzCiMg
MjkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi
IDEgMwojIDMwICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMiAzCgoKZXh0ZXJuICJDIiB7CgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRz
L2Vycm5vLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMSAzCgoKCiMgMSAi
L3Vzci9pbmNsdWRlL2FzbS9lcnJuby5oIiAxIDMKIyA1ICIvdXNyL2luY2x1ZGUvbGludXgvZXJy
bm8uaCIgMiAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDIgMwojIDM2ICIvdXNy
L2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCmV4dGVybiBpbnQgZXJybm87CgoKZXh0ZXJuIGludCAq
X19lcnJub19sb2NhdGlvbiAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwojIDM3ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMiAzCiMgNTUgIi91c3IvaW5jbHVkZS9l
cnJuby5oIiAzCmV4dGVybiBjaGFyICpwcm9ncmFtX2ludm9jYXRpb25fbmFtZSwgKnByb2dyYW1f
aW52b2NhdGlvbl9zaG9ydF9uYW1lOwoKCgp9CiMgNjkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAz
CnR5cGVkZWYgaW50IGVycm9yX3Q7CiMgMTY3ICIuLi8uLi8uLi9saWIvY2NscG9ydC5oIiAyCgoK
IyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMiAzCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy93YWl0ZmxhZ3MuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2Jp
dHMvd2FpdHN0YXR1cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyA2NCAi
L3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAyIDMKCnVuaW9uIHdhaXQKICB7CiAgICBp
bnQgd19zdGF0dXM7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193
X3Rlcm1zaWc6NzsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAg
dW5zaWduZWQgaW50IF9fd19yZXRjb2RlOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoK
CgoKICAgICAgfSBfX3dhaXRfdGVybWluYXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAg
IHVuc2lnbmVkIGludCBfX3dfc3RvcHZhbDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3Rv
cHNpZzo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3Rv
cHBlZDsKICB9OwojIDQ0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDk0ICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGlu
dCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90
OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRl
ZiBzdHJ1Y3QKICB7CiAgICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGxvbmcgaW50IHJl
bTsKICB9IGxsZGl2X3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNp
emVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRv
dWJsZSBhdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChf
X2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hh
ciAqX19ucHRyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpl
eHRlcm4gZG91YmxlIHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGZsb2F0IHN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgp
OwoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25n
IGludCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp
bnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0
aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3Ry
dG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh
c2UpCiAgICAgdGhyb3cgKCk7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp
bnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Up
IHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBz
dHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg
X19iYXNlKQogICAgIHRocm93ICgpOwojIDIxMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjEyICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDIgMwoKCgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfbCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0
b3VsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xv
YykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9s
bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAo
KTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3Vs
bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9j
YWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2wgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cg
KCk7CgpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRv
bGRfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQgX19zdHJ0b2Zf
aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3Vw
KQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKZXh0ZXJuIGxv
bmcgaW50IF9fc3RydG9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGlu
dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91
bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jh
c2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRl
cm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChfX2NvbnN0IGNo
YXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3Vw
KQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQpzdHJ0b2QgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
KSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9kX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRy
LCAwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKc3RydG9sIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICBpbnQg
X19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9sX2ludGVybmFsIChfX25wdHIsIF9f
ZW5kcHRyLCBfX2Jhc2UsIDApOwp9CmV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGludApz
dHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0
cnRvdWxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgpleHRlcm4g
X19pbmxpbmUgZmxvYXQKc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvZl9p
bnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91
YmxlCnN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9sZF9pbnRlcm5hbCAo
X19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUg
bG9uZyBsb25nIGludApzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsK
ICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDAp
Owp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQK
c3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19z
dHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCgpfX2V4
dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvbGwgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAo
X19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lu
bGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKiBfX3Jl
c3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICBpbnQg
X19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwg
X19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCmF0b2YgKF9f
Y29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIHN0cnRvZCAoX19ucHRyLCAo
Y2hhciAqKikgX19udWxsKTsKfQpleHRlcm4gX19pbmxpbmUgaW50CmF0b2kgKF9fY29uc3QgY2hh
ciAqX19ucHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIChpbnQpIHN0cnRvbCAoX19ucHRyLCAoY2hh
ciAqKikgX19udWxsLCAxMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CmF0b2wgKF9fY29u
c3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIHN0cnRvbCAoX19ucHRyLCAoY2hh
ciAqKikgX19udWxsLCAxMCk7Cn0KCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25n
IGxvbmcgaW50CmF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewogIHJldHVy
biBzdHJ0b2xsIChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQojIDM4NCAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpsNjRhIChsb25nIGludCBfX24pIHRocm93
ICgpOwoKCmV4dGVybiBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgpl
eHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMzEgIi91
c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0
eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYg
X191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVh
ZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYgX19sb2Zm
X3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYgX19pbm82
NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lk
X3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlu
a190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29m
Zl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRlZiBf
X3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYgX19zc2l6
ZV90IHNzaXplX3Q7CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2Nh
ZGRyX3QgY2FkZHJfdDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTMyICIvdXNyL2lu
Y2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyA1NiAi
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEg
MwojIDU3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fY2xvY2tfdCBjbG9j
a190OwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA2OCAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMgNzkgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMK
IyA4MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9j
a2lkX3Q7CiMgOTEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy90eXBlcy5oIiAxIDMKIyA5MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBf
X3RpbWVyX3QgdGltZXJfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoK
CnR5cGVkZWYgX191c2Vjb25kc190IHVzZWNvbmRzX3Q7CgoKCnR5cGVkZWYgX19zdXNlY29uZHNf
dCBzdXNlY29uZHNfdDsKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBl
ZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7
CiMgMTkwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50
IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVu
c2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7
CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g
KF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18g
KChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDIxMiAiL3Vzci9pbmNsdWRlL3N5cy90eXBl
cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMTMgIi91c3IvaW5jbHVk
ZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMK
IyAyNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0
dXJlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxl
Y3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91
c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2ln
c2V0LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGlu
dCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9u
ZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwog
IH0gX19zaWdzZXRfdDsKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5
cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgi
IDEgMwojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAg
ICBfX3RpbWVfdCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgNDUgIi91c3Iv
aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgi
IDEgMwojIDYzICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy90eXBlcy5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAyIDMKCgoK
c3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190
IHR2X3VzZWM7CiAgfTsKIyA0NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCiMgNTUg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKdHlwZWRlZiBsb25nIGludCBfX2ZkX21hc2s7
CgoKCgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKCgoKICAgIF9fZmRfbWFzayBmZHNfYml0c1sxMDI0
IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsKCgoKCgogIH0gZmRfc2V0OwoKCgoKCgp0eXBl
ZGVmIF9fZmRfbWFzayBmZF9tYXNrOwojIDk1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAz
CmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0
ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0
cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9f
ZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3Qg
X190aW1lb3V0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHBzZWxlY3QgKGludCBfX25mZHMs
IGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0
ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jl
c3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1l
c3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX19z
aWdzZXRfdCAqX19yZXN0cmljdCBfX3NpZ21hc2spIHRocm93ICgpOwoKCn0KIyAyMTYgIi91c3Iv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jv
cy5oIiAxIDMKIyAyMTkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCgp0eXBlZGVm
IF9fYmxrc2l6ZV90IGJsa3NpemVfdDsKCgoKCgoKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90
OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxj
bnRfdCBmc2ZpbGNudF90OwojIDI1NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVk
ZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtj
bnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxjbnQ2NF90IGZzZmlsY250NjRfdDsKCgp9CiMgMzkxICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2
b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVk
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19z
ZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19z
dGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0
ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQzMl90
ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwogICAgaW50IHJh
bmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3NlcDsKICAgIGludDMyX3Qg
KmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAq
X19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqX19yZXN0cmlj
dCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50
IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50
IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Rh
dGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVi
dWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0
IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZvaWQpIHRocm93ICgpOwoK
ZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIHRocm93ICgpOwoKCgoKCgoKZXh0
ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4
ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcg
aW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5z
aWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBt
cmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVk
IHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4IChs
b25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpz
ZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIHRocm93ICgpOwpleHRlcm4g
dm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgdGhyb3cgKCk7CgoK
CgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3hbM107
CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19vbGRfeFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGlu
dCBfX2M7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19pbml0OwogICAgdW5zaWduZWQgbG9uZyBs
b25nIGludCBfX2E7CiAgfTsKCgpleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhf
ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAq
X19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNp
Z25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBk
cmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbHJhbmQ0
OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAg
ICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRl
cm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAog
ICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3Ry
aWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3Qg
X19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQg
aW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRh
ICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9f
cmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25n
IGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAgIHRocm93
ICgpOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlsz
XSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFt
WzddLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIp
IHRocm93ICgpOwojIDUyNyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkICpt
YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19f
KSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiB2
b2lkICpyZWFsbG9jICh2b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoK
IyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvYWxsb2Nh
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVk
ZS9hbGxvY2EuaCIgMiAzCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYWxs
b2NhLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90
IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDU0NyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAy
IDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IHBvc2l4X21lbWFsaWduICh2
b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4gdm9pZCBhYm9y
dCAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRl
cm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqX19hcmcp
LCB2b2lkICpfX2FyZykKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBleGl0IChpbnQg
X19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4
dGVybiB2b2lkIF9FeGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19u
YW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBj
aGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0
cmluZykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19u
YW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxhY2UpCiAgICAgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gaW50IGNsZWFyZW52ICh2b2lkKSB0aHJvdyAoKTsKIyA2MjMgIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0
aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhy
b3cgKCk7CiMgNjQwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBta3N0ZW1w
NjQgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY1MCAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAzCmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBjaGFyICpjYW5vbmljYWxpemVfZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIg
Kl9fbmFtZSkgdGhyb3cgKCk7CiMgNjcyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJu
IGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgdGhyb3cgKCk7CgoK
CgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0
IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBhcl9mbl90IGNvbXBhcmlzb25fZm5fdDsKCgoKCgpl
eHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpf
X2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6
ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpf
X2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAg
X19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChs
b25nIGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0
ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRp
dl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBfX251bWVy
LCBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxsZGl2X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQg
X19udW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIGlu
dCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyA3
MjggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9f
dmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAg
ICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFy
ICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19k
ZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNo
YXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUg
X192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj
dCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIg
KnFmY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAg
ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRo
cm93ICgpOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJs
ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAg
ICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1
ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQg
ZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19k
ZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9f
cmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgp
OwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs
CiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0
cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwg
c2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBf
X3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0
IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hh
ciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGludCBtYmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCB3Y3RvbWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNp
emVfdCBfX24pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0
cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50
IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CiMgODA4ICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBnZXRzdWJvcHQgKGNoYXIgKipfX3Jlc3Ry
aWN0IF9fb3B0aW9ucCwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29uc3QgKl9fcmVz
dHJpY3QgX190b2tlbnMsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X3ZhbHVlcCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0a2V5IChfX2NvbnN0IGNoYXIg
Kl9fa2V5KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcG9zaXhfb3BlbnB0IChpbnQgX19v
ZmxhZykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdyYW50cHQgKGludCBfX2ZkKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCB1bmxvY2twdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGNoYXIgKnB0c25hbWUgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBw
dHNuYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IGdldHB0ICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBn
ZXRsb2FkYXZnIChkb3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSB0aHJvdyAoKTsKCgoK
Cgp9CiMgMTcwICIuLi8uLi8uLi9saWIvY2NscG9ydC5oIiAyCgoKCgoKCgojIDEgIi91c3IvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMTc4ICIuLi8uLi8uLi9saWIvY2NscG9ydC5oIiAyCgoK
CgojIDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS91bmlz
dGQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNs
dWRlL3VuaXN0ZC5oIiAyIDMKCmV4dGVybiAiQyIgewojIDE3NSAiL3Vzci9pbmNsdWRlL3VuaXN0
ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXhfb3B0LmgiIDEgMwojIDE3NiAiL3Vz
ci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbnZpcm9u
bWVudHMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50cy5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9i
aXRzL2Vudmlyb25tZW50cy5oIiAyIDMKIyAxODAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAz
CiMgMTkwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90
eXBlcy5oIiAxIDMKIyAxOTEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCiMgMTk5ICIvdXNy
L2luY2x1ZGUvdW5pc3RkLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDIwMCAiL3Vzci9pbmNsdWRl
L3VuaXN0ZC5oIiAyIDMKIyAyNDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwp0eXBlZGVmIF9f
aW50cHRyX3QgaW50cHRyX3Q7CgoKCgoKCnR5cGVkZWYgX19zb2NrbGVuX3Qgc29ja2xlbl90Owoj
IDI2MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgYWNjZXNzIChfX2NvbnN0
IGNoYXIgKl9fbmFtZSwgaW50IF9fdHlwZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGV1aWRh
Y2Nlc3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSB0aHJvdyAoKTsKIyAyOTAg
Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmZfdCBsc2VlayAoaW50IF9fZmQs
IF9fb2ZmX3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CiMgMzAyICIvdXNyL2lu
Y2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fb2ZmNjRfdCBsc2VlazY0IChpbnQgX19mZCwgX19v
ZmY2NF90IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNs
b3NlIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzc2l6ZV90IHJlYWQgKGludCBfX2Zk
LCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gc3NpemVf
dCB3cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24pIHRocm93
ICgpOwoKCgpleHRlcm4gc3NpemVfdCBwcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXpl
X3QgX19uYnl0ZXMsIF9fb2ZmX3QgX19vZmZzZXQpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBzc2l6
ZV90IHB3cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sCiAg
ICAgICAgICAgICAgICAgICAgICAgX19vZmZfdCBfX29mZnNldCkgdGhyb3cgKCk7CiMgMzQwICIv
dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHNzaXplX3QgcHJlYWQ2NCAoaW50IF9fZmQs
IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f
b2ZmNjRfdCBfX29mZnNldCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNzaXplX3QgcHdyaXRlNjQgKGlu
dCBfX2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgX19vZmY2NF90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQg
cGlwZSAoaW50IF9fcGlwZWRlc1syXSkgdGhyb3cgKCk7CiMgMzYyICIvdXNyL2luY2x1ZGUvdW5p
c3RkLmgiIDMKZXh0ZXJuIHVuc2lnbmVkIGludCBhbGFybSAodW5zaWduZWQgaW50IF9fc2Vjb25k
cykgdGhyb3cgKCk7CiMgMzcxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHVuc2ln
bmVkIGludCBzbGVlcCAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBfX3VzZWNvbmRzX3QgdWFsYXJtIChfX3VzZWNvbmRzX3QgX192YWx1ZSwgX191c2Vjb25k
c190IF9faW50ZXJ2YWwpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdXNsZWVwIChfX3Vz
ZWNvbmRzX3QgX191c2Vjb25kcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwYXVzZSAodm9p
ZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2hvd24gKF9fY29uc3QgY2hhciAqX19maWxlLCBf
X3VpZF90IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91cCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBmY2hvd24gKGludCBfX2ZkLCBfX3VpZF90IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91cCkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGxjaG93biAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9f
dWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBjaGRpciAoX19jb25zdCBjaGFyICpfX3BhdGgpIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IGZjaGRpciAoaW50IF9fZmQpIHRocm93ICgpOwojIDQyMyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o
IiAzCmV4dGVybiBjaGFyICpnZXRjd2QgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19zaXplKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gY2hhciAqZ2V0X2N1cnJlbnRfZGlyX25hbWUgKHZvaWQpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqZ2V0d2QgKGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgZHVwIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkdXAyIChp
bnQgX19mZCwgaW50IF9fZmQyKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqKl9fZW52aXJvbjsK
CmV4dGVybiBjaGFyICoqZW52aXJvbjsKCgoKCgpleHRlcm4gaW50IGV4ZWN2ZSAoX19jb25zdCBj
aGFyICpfX3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2W10sCiAgICAgICAgICAgICAgICAgICBj
aGFyICpfX2NvbnN0IF9fZW52cFtdKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmV4ZWN2ZSAo
aW50IF9fZmQsIGNoYXIgKl9fY29uc3QgX19hcmd2W10sIGNoYXIgKl9fY29uc3QgX19lbnZwW10p
CiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGV4ZWN2IChfX2NvbnN0IGNoYXIgKl9fcGF0
aCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZXhlY2xl
IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBleGVjbCAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hh
ciAqX19hcmcsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZXhlY3ZwIChfX2NvbnN0IGNo
YXIgKl9fZmlsZSwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IGV4ZWNscCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fY29uc3QgY2hhciAqX19hcmcsIC4u
LikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IG5pY2UgKGludCBfX2luYykgdGhyb3cgKCk7CgoK
CgpleHRlcm4gdm9pZCBfZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3Jl
dHVybl9fKSk7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oIiAxIDMKIyAy
NSAiL3Vzci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMwplbnVtCiAgewogICAgX1BDX0xJTktf
TUFYLAoKICAgIF9QQ19NQVhfQ0FOT04sCgogICAgX1BDX01BWF9JTlBVVCwKCiAgICBfUENfTkFN
RV9NQVgsCgogICAgX1BDX1BBVEhfTUFYLAoKICAgIF9QQ19QSVBFX0JVRiwKCiAgICBfUENfQ0hP
V05fUkVTVFJJQ1RFRCwKCiAgICBfUENfTk9fVFJVTkMsCgogICAgX1BDX1ZESVNBQkxFLAoKICAg
IF9QQ19TWU5DX0lPLAoKICAgIF9QQ19BU1lOQ19JTywKCiAgICBfUENfUFJJT19JTywKCiAgICBf
UENfU09DS19NQVhCVUYsCgogICAgX1BDX0ZJTEVTSVpFQklUUywKCiAgICBfUENfUkVDX0lOQ1Jf
WEZFUl9TSVpFLAoKICAgIF9QQ19SRUNfTUFYX1hGRVJfU0laRSwKCiAgICBfUENfUkVDX01JTl9Y
RkVSX1NJWkUsCgogICAgX1BDX1JFQ19YRkVSX0FMSUdOLAoKICAgIF9QQ19BTExPQ19TSVpFX01J
TiwKCiAgICBfUENfU1lNTElOS19NQVgKCiAgfTsKCgplbnVtCiAgewogICAgX1NDX0FSR19NQVgs
CgogICAgX1NDX0NISUxEX01BWCwKCiAgICBfU0NfQ0xLX1RDSywKCiAgICBfU0NfTkdST1VQU19N
QVgsCgogICAgX1NDX09QRU5fTUFYLAoKICAgIF9TQ19TVFJFQU1fTUFYLAoKICAgIF9TQ19UWk5B
TUVfTUFYLAoKICAgIF9TQ19KT0JfQ09OVFJPTCwKCiAgICBfU0NfU0FWRURfSURTLAoKICAgIF9T
Q19SRUFMVElNRV9TSUdOQUxTLAoKICAgIF9TQ19QUklPUklUWV9TQ0hFRFVMSU5HLAoKICAgIF9T
Q19USU1FUlMsCgogICAgX1NDX0FTWU5DSFJPTk9VU19JTywKCiAgICBfU0NfUFJJT1JJVElaRURf
SU8sCgogICAgX1NDX1NZTkNIUk9OSVpFRF9JTywKCiAgICBfU0NfRlNZTkMsCgogICAgX1NDX01B
UFBFRF9GSUxFUywKCiAgICBfU0NfTUVNTE9DSywKCiAgICBfU0NfTUVNTE9DS19SQU5HRSwKCiAg
ICBfU0NfTUVNT1JZX1BST1RFQ1RJT04sCgogICAgX1NDX01FU1NBR0VfUEFTU0lORywKCiAgICBf
U0NfU0VNQVBIT1JFUywKCiAgICBfU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTLAoKICAgIF9TQ19B
SU9fTElTVElPX01BWCwKCiAgICBfU0NfQUlPX01BWCwKCiAgICBfU0NfQUlPX1BSSU9fREVMVEFf
TUFYLAoKICAgIF9TQ19ERUxBWVRJTUVSX01BWCwKCiAgICBfU0NfTVFfT1BFTl9NQVgsCgogICAg
X1NDX01RX1BSSU9fTUFYLAoKICAgIF9TQ19WRVJTSU9OLAoKICAgIF9TQ19QQUdFU0laRSwKCgog
ICAgX1NDX1JUU0lHX01BWCwKCiAgICBfU0NfU0VNX05TRU1TX01BWCwKCiAgICBfU0NfU0VNX1ZB
TFVFX01BWCwKCiAgICBfU0NfU0lHUVVFVUVfTUFYLAoKICAgIF9TQ19USU1FUl9NQVgsCgoKCgog
ICAgX1NDX0JDX0JBU0VfTUFYLAoKICAgIF9TQ19CQ19ESU1fTUFYLAoKICAgIF9TQ19CQ19TQ0FM
RV9NQVgsCgogICAgX1NDX0JDX1NUUklOR19NQVgsCgogICAgX1NDX0NPTExfV0VJR0hUU19NQVgs
CgogICAgX1NDX0VRVUlWX0NMQVNTX01BWCwKCiAgICBfU0NfRVhQUl9ORVNUX01BWCwKCiAgICBf
U0NfTElORV9NQVgsCgogICAgX1NDX1JFX0RVUF9NQVgsCgogICAgX1NDX0NIQVJDTEFTU19OQU1F
X01BWCwKCgogICAgX1NDXzJfVkVSU0lPTiwKCiAgICBfU0NfMl9DX0JJTkQsCgogICAgX1NDXzJf
Q19ERVYsCgogICAgX1NDXzJfRk9SVF9ERVYsCgogICAgX1NDXzJfRk9SVF9SVU4sCgogICAgX1ND
XzJfU1dfREVWLAoKICAgIF9TQ18yX0xPQ0FMRURFRiwKCgogICAgX1NDX1BJSSwKCiAgICBfU0Nf
UElJX1hUSSwKCiAgICBfU0NfUElJX1NPQ0tFVCwKCiAgICBfU0NfUElJX0lOVEVSTkVULAoKICAg
IF9TQ19QSUlfT1NJLAoKICAgIF9TQ19QT0xMLAoKICAgIF9TQ19TRUxFQ1QsCgogICAgX1NDX1VJ
T19NQVhJT1YsCgogICAgX1NDX0lPVl9NQVggPSBfU0NfVUlPX01BWElPViwKCiAgICBfU0NfUElJ
X0lOVEVSTkVUX1NUUkVBTSwKCiAgICBfU0NfUElJX0lOVEVSTkVUX0RHUkFNLAoKICAgIF9TQ19Q
SUlfT1NJX0NPVFMsCgogICAgX1NDX1BJSV9PU0lfQ0xUUywKCiAgICBfU0NfUElJX09TSV9NLAoK
ICAgIF9TQ19UX0lPVl9NQVgsCgoKCiAgICBfU0NfVEhSRUFEUywKCiAgICBfU0NfVEhSRUFEX1NB
RkVfRlVOQ1RJT05TLAoKICAgIF9TQ19HRVRHUl9SX1NJWkVfTUFYLAoKICAgIF9TQ19HRVRQV19S
X1NJWkVfTUFYLAoKICAgIF9TQ19MT0dJTl9OQU1FX01BWCwKCiAgICBfU0NfVFRZX05BTUVfTUFY
LAoKICAgIF9TQ19USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TLAoKICAgIF9TQ19USFJFQURf
S0VZU19NQVgsCgogICAgX1NDX1RIUkVBRF9TVEFDS19NSU4sCgogICAgX1NDX1RIUkVBRF9USFJF
QURTX01BWCwKCiAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSLAoKICAgIF9TQ19USFJFQURf
QVRUUl9TVEFDS1NJWkUsCgogICAgX1NDX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HLAoKICAg
IF9TQ19USFJFQURfUFJJT19JTkhFUklULAoKICAgIF9TQ19USFJFQURfUFJJT19QUk9URUNULAoK
ICAgIF9TQ19USFJFQURfUFJPQ0VTU19TSEFSRUQsCgoKICAgIF9TQ19OUFJPQ0VTU09SU19DT05G
LAoKICAgIF9TQ19OUFJPQ0VTU09SU19PTkxOLAoKICAgIF9TQ19QSFlTX1BBR0VTLAoKICAgIF9T
Q19BVlBIWVNfUEFHRVMsCgogICAgX1NDX0FURVhJVF9NQVgsCgogICAgX1NDX1BBU1NfTUFYLAoK
CiAgICBfU0NfWE9QRU5fVkVSU0lPTiwKCiAgICBfU0NfWE9QRU5fWENVX1ZFUlNJT04sCgogICAg
X1NDX1hPUEVOX1VOSVgsCgogICAgX1NDX1hPUEVOX0NSWVBULAoKICAgIF9TQ19YT1BFTl9FTkhf
STE4TiwKCiAgICBfU0NfWE9QRU5fU0hNLAoKCiAgICBfU0NfMl9DSEFSX1RFUk0sCgogICAgX1ND
XzJfQ19WRVJTSU9OLAoKICAgIF9TQ18yX1VQRSwKCgogICAgX1NDX1hPUEVOX1hQRzIsCgogICAg
X1NDX1hPUEVOX1hQRzMsCgogICAgX1NDX1hPUEVOX1hQRzQsCgoKICAgIF9TQ19DSEFSX0JJVCwK
CiAgICBfU0NfQ0hBUl9NQVgsCgogICAgX1NDX0NIQVJfTUlOLAoKICAgIF9TQ19JTlRfTUFYLAoK
ICAgIF9TQ19JTlRfTUlOLAoKICAgIF9TQ19MT05HX0JJVCwKCiAgICBfU0NfV09SRF9CSVQsCgog
ICAgX1NDX01CX0xFTl9NQVgsCgogICAgX1NDX05aRVJPLAoKICAgIF9TQ19TU0laRV9NQVgsCgog
ICAgX1NDX1NDSEFSX01BWCwKCiAgICBfU0NfU0NIQVJfTUlOLAoKICAgIF9TQ19TSFJUX01BWCwK
CiAgICBfU0NfU0hSVF9NSU4sCgogICAgX1NDX1VDSEFSX01BWCwKCiAgICBfU0NfVUlOVF9NQVgs
CgogICAgX1NDX1VMT05HX01BWCwKCiAgICBfU0NfVVNIUlRfTUFYLAoKCiAgICBfU0NfTkxfQVJH
TUFYLAoKICAgIF9TQ19OTF9MQU5HTUFYLAoKICAgIF9TQ19OTF9NU0dNQVgsCgogICAgX1NDX05M
X05NQVgsCgogICAgX1NDX05MX1NFVE1BWCwKCiAgICBfU0NfTkxfVEVYVE1BWCwKCgogICAgX1ND
X1hCUzVfSUxQMzJfT0ZGMzIsCgogICAgX1NDX1hCUzVfSUxQMzJfT0ZGQklHLAoKICAgIF9TQ19Y
QlM1X0xQNjRfT0ZGNjQsCgogICAgX1NDX1hCUzVfTFBCSUdfT0ZGQklHLAoKCiAgICBfU0NfWE9Q
RU5fTEVHQUNZLAoKICAgIF9TQ19YT1BFTl9SRUFMVElNRSwKCiAgICBfU0NfWE9QRU5fUkVBTFRJ
TUVfVEhSRUFEUywKCgogICAgX1NDX0FEVklTT1JZX0lORk8sCgogICAgX1NDX0JBUlJJRVJTLAoK
ICAgIF9TQ19CQVNFLAoKICAgIF9TQ19DX0xBTkdfU1VQUE9SVCwKCiAgICBfU0NfQ19MQU5HX1NV
UFBPUlRfUiwKCiAgICBfU0NfQ0xPQ0tfU0VMRUNUSU9OLAoKICAgIF9TQ19DUFVUSU1FLAoKICAg
IF9TQ19USFJFQURfQ1BVVElNRSwKCiAgICBfU0NfREVWSUNFX0lPLAoKICAgIF9TQ19ERVZJQ0Vf
U1BFQ0lGSUMsCgogICAgX1NDX0RFVklDRV9TUEVDSUZJQ19SLAoKICAgIF9TQ19GRF9NR01ULAoK
ICAgIF9TQ19GSUZPLAoKICAgIF9TQ19QSVBFLAoKICAgIF9TQ19GSUxFX0FUVFJJQlVURVMsCgog
ICAgX1NDX0ZJTEVfTE9DS0lORywKCiAgICBfU0NfRklMRV9TWVNURU0sCgogICAgX1NDX01PTk9U
T05JQ19DTE9DSywKCiAgICBfU0NfTVVMVElfUFJPQ0VTUywKCiAgICBfU0NfU0lOR0xFX1BST0NF
U1MsCgogICAgX1NDX05FVFdPUktJTkcsCgogICAgX1NDX1JFQURFUl9XUklURVJfTE9DS1MsCgog
ICAgX1NDX1NQSU5fTE9DS1MsCgogICAgX1NDX1JFR0VYUCwKCiAgICBfU0NfUkVHRVhfVkVSU0lP
TiwKCiAgICBfU0NfU0hFTEwsCgogICAgX1NDX1NJR05BTFMsCgogICAgX1NDX1NQQVdOLAoKICAg
IF9TQ19TUE9SQURJQ19TRVJWRVIsCgogICAgX1NDX1RIUkVBRF9TUE9SQURJQ19TRVJWRVIsCgog
ICAgX1NDX1NZU1RFTV9EQVRBQkFTRSwKCiAgICBfU0NfU1lTVEVNX0RBVEFCQVNFX1IsCgogICAg
X1NDX1RJTUVPVVRTLAoKICAgIF9TQ19UWVBFRF9NRU1PUllfT0JKRUNUUywKCiAgICBfU0NfVVNF
Ul9HUk9VUFMsCgogICAgX1NDX1VTRVJfR1JPVVBTX1IsCgogICAgX1NDXzJfUEJTLAoKICAgIF9T
Q18yX1BCU19BQ0NPVU5USU5HLAoKICAgIF9TQ18yX1BCU19MT0NBVEUsCgogICAgX1NDXzJfUEJT
X01FU1NBR0UsCgogICAgX1NDXzJfUEJTX1RSQUNLLAoKICAgIF9TQ19TWU1MT09QX01BWCwKCiAg
ICBfU0NfU1RSRUFNUywKCiAgICBfU0NfMl9QQlNfQ0hFQ0tQT0lOVCwKCgogICAgX1NDX1Y2X0lM
UDMyX09GRjMyLAoKICAgIF9TQ19WNl9JTFAzMl9PRkZCSUcsCgogICAgX1NDX1Y2X0xQNjRfT0ZG
NjQsCgogICAgX1NDX1Y2X0xQQklHX09GRkJJRywKCgogICAgX1NDX0hPU1RfTkFNRV9NQVgsCgog
ICAgX1NDX1RSQUNFLAoKICAgIF9TQ19UUkFDRV9FVkVOVF9GSUxURVIsCgogICAgX1NDX1RSQUNF
X0lOSEVSSVQsCgogICAgX1NDX1RSQUNFX0xPRwoKICB9OwoKCgoKCmVudW0KICB7CiAgICBfQ1Nf
UEFUSCwKCgoKCiAgICBfQ1NfTEZTX0NGTEFHUyA9IDEwMDAsCgogICAgX0NTX0xGU19MREZMQUdT
LAoKICAgIF9DU19MRlNfTElCUywKCiAgICBfQ1NfTEZTX0xJTlRGTEFHUywKCiAgICBfQ1NfTEZT
NjRfQ0ZMQUdTLAoKICAgIF9DU19MRlM2NF9MREZMQUdTLAoKICAgIF9DU19MRlM2NF9MSUJTLAoK
ICAgIF9DU19MRlM2NF9MSU5URkxBR1MsCgoKCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfQ0ZM
QUdTID0gMTEwMCwKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MREZMQUdTLAoKICAgIF9DU19Y
QlM1X0lMUDMyX09GRjMyX0xJQlMsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElOVEZMQUdT
LAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJf
T0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJQlMsCgogICAgX0NT
X1hCUzVfSUxQMzJfT0ZGQklHX0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0NG
TEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xERkxBR1MsCgogICAgX0NTX1hCUzVfTFA2
NF9PRkY2NF9MSUJTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElOVEZMQUdTLAoKICAgIF9D
U19YQlM1X0xQQklHX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xE
RkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xJQlMsCgogICAgX0NTX1hCUzVfTFBC
SUdfT0ZGQklHX0xJTlRGTEFHUywKCgoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9DRkxB
R1MsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xERkxBR1MsCgogICAgX0NTX1BPU0lY
X1Y2X0lMUDMyX09GRjMyX0xJQlMsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xJTlRG
TEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfUE9T
SVhfVjZfSUxQMzJfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJ
R19MSUJTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfTElOVEZMQUdTLAoKICAgIF9D
U19QT1NJWF9WNl9MUDY0X09GRjY0X0NGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfTFA2NF9PRkY2
NF9MREZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0X09GRjY0X0xJQlMsCgogICAgX0NTX1BP
U0lYX1Y2X0xQNjRfT0ZGNjRfTElOVEZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUEJJR19PRkZC
SUdfQ0ZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfTERGTEFHUywKCiAgICBf
Q1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xJQlMsCgogICAgX0NTX1BPU0lYX1Y2X0xQQklHX09G
RkJJR19MSU5URkxBR1MsCgoKCiAgICBfQ1NfVjZfV0lEVEhfUkVTVFJJQ1RFRF9FTlZTCgogIH07
CiMgNTAxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCmV4dGVybiBsb25nIGludCBwYXRo
Y29uZiAoX19jb25zdCBjaGFyICpfX3BhdGgsIGludCBfX25hbWUpIHRocm93ICgpOwoKCmV4dGVy
biBsb25nIGludCBmcGF0aGNvbmYgKGludCBfX2ZkLCBpbnQgX19uYW1lKSB0aHJvdyAoKTsKCgpl
eHRlcm4gbG9uZyBpbnQgc3lzY29uZiAoaW50IF9fbmFtZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gc2l6ZV90IGNvbmZzdHIgKGludCBfX25hbWUsIGNo
YXIgKl9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0
cGlkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gX19waWRfdCBnZXRwcGlkICh2b2lkKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBfX3BpZF90IGdldHBncnAgKHZvaWQpIHRocm93ICgpOwojIDUzNiAi
L3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IF9fZ2V0cGdpZCAoX19waWRf
dCBfX3BpZCkgdGhyb3cgKCk7CgpleHRlcm4gX19waWRfdCBnZXRwZ2lkIChfX3BpZF90IF9fcGlk
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBzZXRwZ2lkIChfX3BpZF90IF9fcGlkLCBfX3Bp
ZF90IF9fcGdpZCkgdGhyb3cgKCk7CiMgNTYyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0
ZXJuIGludCBzZXRwZ3JwICh2b2lkKSB0aHJvdyAoKTsKIyA1ODAgIi91c3IvaW5jbHVkZS91bmlz
dGQuaCIgMwpleHRlcm4gX19waWRfdCBzZXRzaWQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4g
X19waWRfdCBnZXRzaWQgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoKCgpleHRlcm4gX191aWRf
dCBnZXR1aWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBfX3VpZF90IGdldGV1aWQgKHZvaWQp
IHRocm93ICgpOwoKCmV4dGVybiBfX2dpZF90IGdldGdpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIF9fZ2lkX3QgZ2V0ZWdpZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGdldGdy
b3VwcyAoaW50IF9fc2l6ZSwgX19naWRfdCBfX2xpc3RbXSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgZ3JvdXBfbWVtYmVyIChfX2dpZF90IF9fZ2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGlu
dCBzZXR1aWQgKF9fdWlkX3QgX191aWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRyZXVp
ZCAoX191aWRfdCBfX3J1aWQsIF9fdWlkX3QgX19ldWlkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp
bnQgc2V0ZXVpZCAoX191aWRfdCBfX3VpZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgc2V0
Z2lkIChfX2dpZF90IF9fZ2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0cmVnaWQgKF9f
Z2lkX3QgX19yZ2lkLCBfX2dpZF90IF9fZWdpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNl
dGVnaWQgKF9fZ2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gX19waWRfdCBmb3Jr
ICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fcGlkX3QgdmZvcmsgKHZvaWQpIHRocm93
ICgpOwoKCgoKCmV4dGVybiBjaGFyICp0dHluYW1lIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgdHR5bmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxl
bikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXNhdHR5IChpbnQgX19mZCkgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGludCB0dHlzbG90ICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbGlu
ayAoX19jb25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgc3ltbGluayAoX19jb25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAq
X190bykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHJlYWRsaW5rIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19wYXRoLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubGluayAoX19jb25z
dCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcm1kaXIgKF9fY29uc3QgY2hh
ciAqX19wYXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9fcGlkX3QgdGNnZXRwZ3JwIChpbnQgX19m
ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0Y3NldHBncnAgKGludCBfX2ZkLCBfX3BpZF90IF9f
cGdycF9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXRsb2dpbiAodm9pZCkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gaW50IGdldGxvZ2luX3IgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbmFt
ZV9sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRsb2dpbiAoX19jb25zdCBjaGFyICpf
X25hbWUpIHRocm93ICgpOwojIDcyNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2dldG9wdC5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4
dGVybiAiQyIgewojIDQ3ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGNoYXIgKm9w
dGFyZzsKIyA2MSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBpbnQgb3B0aW5kOwoK
CgoKZXh0ZXJuIGludCBvcHRlcnI7CgoKCmV4dGVybiBpbnQgb3B0b3B0OwojIDE0NSAiL3Vzci9p
bmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBpbnQgZ2V0b3B0IChpbnQgX19fYXJnYywgY2hhciAq
Y29uc3QgKl9fX2FyZ3YsIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzKTsKIyAxNzUgIi91c3IvaW5j
bHVkZS9nZXRvcHQuaCIgMwp9CiMgNzI3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgoK
CgoKZXh0ZXJuIGludCBnZXRob3N0bmFtZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldGhvc3RuYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFt
ZSwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXRob3N0aWQgKGxvbmcg
aW50IF9faWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFtZSAoY2hhciAq
X19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IHNldGRvbWFpbm5hbWUg
KF9fY29uc3QgY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCmV4dGVy
biBpbnQgdmhhbmd1cCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCByZXZva2UgKF9fY29u
c3QgY2hhciAqX19maWxlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHJvZmlsICh1bnNp
Z25lZCBzaG9ydCBpbnQgKl9fc2FtcGxlX2J1ZmZlciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBpbnQgYWNjdCAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoK
CgpleHRlcm4gY2hhciAqZ2V0dXNlcnNoZWxsICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQg
ZW5kdXNlcnNoZWxsICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgc2V0dXNlcnNoZWxsICh2
b2lkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGRhZW1vbiAoaW50IF9fbm9jaGRpciwgaW50
IF9fbm9jbG9zZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2hyb290IChfX2NvbnN0IGNo
YXIgKl9fcGF0aCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXRwYXNzIChfX2NvbnN0IGNo
YXIgKl9fcHJvbXB0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZzeW5jIChpbnQgX19mZCkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBnZXRob3N0aWQgKHZvaWQpIHRocm93ICgp
OwoKCmV4dGVybiB2b2lkIHN5bmMgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBnZXRw
YWdlc2l6ZSAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK
ZXh0ZXJuIGludCB0cnVuY2F0ZSAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmX3QgX19sZW5n
dGgpIHRocm93ICgpOwojIDgzNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQg
dHJ1bmNhdGU2NCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmNjRfdCBfX2xlbmd0aCkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IGZ0cnVuY2F0ZSAoaW50IF9fZmQsIF9fb2ZmX3QgX19sZW5n
dGgpIHRocm93ICgpOwojIDg1MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQg
ZnRydW5jYXRlNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19sZW5ndGgpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSAodm9pZCkgdGhyb3cgKCk7CiMgODY2ICIvdXNyL2lu
Y2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBicmsgKHZvaWQgKl9fYWRkcikgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIHZvaWQgKnNicmsgKGludHB0cl90IF9fZGVsdGEpIHRocm93ICgpOwojIDg4
NyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBsb25nIGludCBzeXNjYWxsIChsb25n
IGludCBfX3N5c25vLCAuLi4pIHRocm93ICgpOwojIDkwNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o
IiAzCmV4dGVybiBpbnQgbG9ja2YgKGludCBfX2ZkLCBpbnQgX19jbWQsIF9fb2ZmX3QgX19sZW4p
IHRocm93ICgpOwojIDkxNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgbG9j
a2Y2NCAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmY2NF90IF9fbGVuKSB0aHJvdyAoKTsKIyA5
MzggIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGZkYXRhc3luYyAoaW50IF9f
ZmlsZGVzKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpjcnlwdCAoX19jb25zdCBjaGFy
ICpfX2tleSwgX19jb25zdCBjaGFyICpfX3NhbHQpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBl
bmNyeXB0IChjaGFyICpfX2Jsb2NrLCBpbnQgX19lZGZsYWcpIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gdm9pZCBzd2FiIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19mcm9tLCB2b2lkICpfX3Jl
c3RyaWN0IF9fdG8sCiAgICAgICAgICAgICAgICAgIHNzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoK
CgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwojIDk4MyAiL3Vz
ci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpf
X3ByZXBhcmUpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFy
ZW50KSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAo
dm9pZCkpIHRocm93ICgpOwoKCn0KIyAxODMgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiIDIKIyAx
OTggIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiCiMgMSAiL3Vzci9pbmNsdWRlL3NldGptcC5oIiAx
IDMKIyAyNiAiL3Vzci9pbmNsdWRlL3NldGptcC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1
cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvc2V0am1wLmgiIDIgMwoKZXh0ZXJuICJDIiB7
CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NldGptcC5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRl
L2JpdHMvc2V0am1wLmgiIDMKdHlwZWRlZiBpbnQgX19qbXBfYnVmWzZdOwojIDMxICIvdXNyL2lu
Y2x1ZGUvc2V0am1wLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMK
IyAzMiAiL3Vzci9pbmNsdWRlL3NldGptcC5oIiAyIDMKCgp0eXBlZGVmIHN0cnVjdCBfX2ptcF9i
dWZfdGFnCiAgewoKCgoKICAgIF9fam1wX2J1ZiBfX2ptcGJ1ZjsKICAgIGludCBfX21hc2tfd2Fz
X3NhdmVkOwogICAgX19zaWdzZXRfdCBfX3NhdmVkX21hc2s7CiAgfSBqbXBfYnVmWzFdOwoKCgoK
ZXh0ZXJuIGludCBzZXRqbXAgKGptcF9idWYgX19lbnYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IF9zZXRqbXAgKGptcF9idWYgX19lbnYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX3NpZ3Nl
dGptcCAoam1wX2J1ZiBfX2VudiwgaW50IF9fc2F2ZW1hc2spIHRocm93ICgpOwojIDczICIvdXNy
L2luY2x1ZGUvc2V0am1wLmgiIDMKZXh0ZXJuIHZvaWQgbG9uZ2ptcCAoam1wX2J1ZiBfX2Vudiwg
aW50IF9fdmFsKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsK
CgoKCmV4dGVybiB2b2lkIF9sb25nam1wIChqbXBfYnVmIF9fZW52LCBpbnQgX192YWwpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgoKdHlwZWRlZiBq
bXBfYnVmIHNpZ2ptcF9idWY7CiMgOTggIi91c3IvaW5jbHVkZS9zZXRqbXAuaCIgMwpleHRlcm4g
dm9pZCBzaWdsb25nam1wIChzaWdqbXBfYnVmIF9fZW52LCBpbnQgX192YWwpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCn0KIyAxOTkgIi4uLy4uLy4uL2xp
Yi9jY2xwb3J0LmgiIDIKIyAyNTEgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiCiMgMSAiL3Vzci9p
bmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgi
IDIgMwoKZXh0ZXJuICJDIiB7CgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVk
ZS9zdHJpbmcuaCIgMiAzCgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3Qg
X19kZXN0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19z
cmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpf
X2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0
IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBz
aXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAq
X19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAo
X19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNo
ciAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHZvaWQgKnJhd21lbWNociAo
X19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9f
Yywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCgpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0
cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl
cm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNo
YXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCiAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0
cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29u
c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19j
b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVz
dHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUv
eGxvY2FsZS5oIiAxIDMKIyAxMDkgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKZXh0ZXJu
IGludCBfX3N0cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIs
IF9fbG9jYWxlX3QgX19sKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKZXh0ZXJuIHNpemVfdCBfX3N0cnhmcm1fbCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIg
Kl9fc3JjLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90
IF9fbCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9f
cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKZXh0ZXJuIGNo
YXIgKnN0cm5kdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNTUgIi91c3IvaW5jbHVkZS9z
dHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f
YykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ry
cmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFyICpf
X3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0
ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3Jl
amVjdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4g
c2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAq
c3RycGJyayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3Ry
IChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJj
YXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFy
ICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19kZWxpbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNoYXIg
Kl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0
cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hhciAq
X19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gdm9pZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVf
dCBfX2hheXN0YWNrbGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fbmVl
ZGxlLCBzaXplX3QgX19uZWVkbGVsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKCmV4dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19k
ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19z
cmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gdm9pZCAqbWVtcGNweSAodm9pZCAqX19y
ZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVz
dHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJs
ZW4gKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6
ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
CgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpOwoKCgpleHRl
cm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9f
YnVmbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9f
c3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6
ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgYmNtcCAo
X19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4
IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBf
X2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IGZm
cyAoaW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0
ZXJuIGludCBmZnNsIChsb25nIGludCBfX2wpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25nIGludCBf
X2xsKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVy
biBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBz
dHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVf
dCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0
ZXJuIGludCBfX3N0cmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg
Kl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBfX3N0cm5jYXNlY21w
X2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3Ryc2VwIChj
aGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3RydmVy
c2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAo
aW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVz
dHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cg
KCk7CmV4dGVybiBjaGFyICpzdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpf
X3N0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpl
eHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJmcnkgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsK
CgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGNoYXIgKmJhc2VuYW1lIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRo
cm93ICgpOwojIDM2NCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCn0KIyAyNTIgIi4uLy4uLy4u
L2xpYi9jY2xwb3J0LmgiIDIKIyAzMzUgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiCiAgdHlwZWRl
ZiBjaGFyIEZTdHJpbmc7CiMgMzQ1ICIuLi8uLi8uLi9saWIvY2NscG9ydC5oIgpjaGFyICogR2V0
Rk9SVFJBTlN0cmluZyggRlN0cmluZyAqLCBpbnQsIGNvbnN0IGNoYXIgKiApOwpjaGFyICogR2V0
Rk9SVFJBTlN0cmluZ0V4KCBGU3RyaW5nICosIGludCwgY29uc3QgY2hhciAqLCBpbnQgKTsKY2hh
ciAqIEdldEZPUlRSQU5QYXRoU3RyaW5nKCBGU3RyaW5nICosIGludCwgY29uc3QgY2hhciAqICk7
CiMgMzk1ICIuLi8uLi8uLi9saWIvY2NscG9ydC5oIgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgMTEwICIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3Rk
YXJnLmgiIDMKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwojIDM5NiAiLi4vLi4vLi4v
bGliL2NjbHBvcnQuaCIgMgojIDQzOSAiLi4vLi4vLi4vbGliL2NjbHBvcnQuaCIKaW50IFBDSUdl
dE9TVmVyc2lvbihjaGFyICoqIHBwc3pPU05hbWUsY2hhciAqKiBwcHN6T1NWZXJzaW9uKTsKdm9p
ZCBQQ0lfcXNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG4sIHNpemVfdCBzaXplLAogICAgICAgICAg
IGludCAoKmNvbXBhcikoY29uc3Qgdm9pZCosY29uc3Qgdm9pZCopKTsKCmRvdWJsZSBQQ0lfbW9k
Zihkb3VibGUgdmFsdWUsIGRvdWJsZSAqIGlwdHIpOwojIDQ3NCAiLi4vLi4vLi4vbGliL2NjbHBv
cnQuaCIKICAgICAgdHlwZWRlZiBpbnQgKCpRU0NNUCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lk
ICopOwojIDQ0ICIuLi8uLi8uLi9saWIvY2NsYmFzZS5oIiAyCiMgMSAiLi4vLi4vLi4vbGliL2Nj
bHR5cGVzLmgiIDEKIyA0MyAiLi4vLi4vLi4vbGliL2NjbHR5cGVzLmgiCnR5cGVkZWYgdW5zaWdu
ZWQgY2hhciBUQnl0ZTsKdHlwZWRlZiBpbnQgVEJvb2w7CiMgMTA5ICIuLi8uLi8uLi9saWIvY2Ns
dHlwZXMuaCIKdHlwZWRlZiBsb25nIGxvbmcgaW50NjQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBs
b25nIHVpbnQ2NDsKCgp0eXBlZGVmIGludCBpbnQzMjsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWlu
dDMyOwoKCnR5cGVkZWYgc2hvcnQgaW50MTY7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdWludDE2
OwoKCgoKCgp0eXBlZGVmIHZvaWQgKCpQQ0lDb3VudGVyKShkb3VibGUpOwoKdHlwZWRlZiBzdHJ1
Y3QgewogIGRvdWJsZSB4OwogIGRvdWJsZSB5Owp9IFZlY3Rvcl90OwojIDIxOSAiLi4vLi4vLi4v
bGliL2NjbHR5cGVzLmgiCnR5cGVkZWYgdm9pZCAoKlRyYW5zZm9ybUZ1bmMpKHZvaWQgKiwgZG91
YmxlLCBkb3VibGUsIGRvdWJsZSAqLCBkb3VibGUgKik7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBk
b3VibGUgeDsKICAgIGRvdWJsZSB5OwogICAgZG91YmxlIHo7Cn0gR0RCVmVydGV4OwojIDQ1ICIu
Li8uLi8uLi9saWIvY2NsYmFzZS5oIiAyCiMgMSAiLi4vLi4vLi4vbGliL2NjbHRhc2suaCIgMQoj
IDIwMiAiLi4vLi4vLi4vbGliL2NjbHRhc2suaCIKdHlwZWRlZiB2b2lkICgqSU1QRXhpdFByb2Mp
KHZvaWQpOwoKdHlwZWRlZiBzdHJ1Y3QgewogIGNoYXIgcHJvZ3JhbV9uYW1lWzE2XTsKICBjaGFy
IFRhc2tEZXNjWzQ4XTsKICBpbnQgTW9uaXRvcjsKICBpbnQgdHR5dHlwZTsKICBjaGFyIFN5c0xh
YmVsWzE5XTsKICBjaGFyIE1pc3NpbmdbNDVdOwogIGludCBmYXRhbF9lcnJvcjsKICBpbnQgcHJt
X3JlcXVpcmVkOwogIGludCBwcm1fcHJlc2VudDsKCgogIGxvbmcgSkJsRGlyOwogIGxvbmcgSkJs
RGF0OwogIGxvbmcgUHJtT3BuOwogIEZJTEUgKlBybUZQOwogIHVpbnQzMiAqSkRhdDsKICB1bnNp
Z25lZCBjaGFyIENEYXRbMTUzNl07CgogIGNoYXIgUENJSG9tZVs2NF07CiAgaW50IGltcF9mbGFn
czsKCiAgaW50IG1haW5fYXJnYzsKICBjaGFyICoqbWFpbl9hcmd2OwoKICBpbnQgbkV4aXRQcm9j
OwogIElNUEV4aXRQcm9jICpwYXBmbkV4aXRQcm9jOwp9IElNUEluZm9fdDsKCgpleHRlcm4gSU1Q
SW5mb190IElNUEluZm87CmV4dGVybiBpbnQgSU1QSW5pdGlhbGl6ZWQ7CgoKCgoKCmV4dGVybiBp
bnQgaW1wX2Vycm5vOwpleHRlcm4gaW50IGltcF9lcnJ0eXBlOwpleHRlcm4gaW50IGltcF9zeXNf
ZXJybm87CmV4dGVybiBjaGFyICppbXBfZXJyc3RyaW5nOwojIDI1OSAiLi4vLi4vLi4vbGliL2Nj
bHRhc2suaCIKZXh0ZXJuIEZJTEUgKlJlcG9ydDsKZXh0ZXJuIGludCBEZWJ1Z01vZGU7CgoKCgoK
dm9pZCBEZWJ1Zyhjb25zdCBjaGFyICosIC4uLiApOwp2b2lkIERlYnVnT3ZlcihpbnQsIGNvbnN0
IGNoYXIgKiwgLi4uICk7Cgp2b2lkIERlYnVnT04oIHZvaWQgKTsKdm9pZCBEZWJ1Z09GRiggdm9p
ZCApOwp2b2lkIERlYnVnUkVTVE9SRSggdm9pZCApOwp2b2lkIEluc3RhbGxEZWJ1Z0hhbmRsZXIo
IHZvaWQgKCopKGNvbnN0IGNoYXIgKikgKTsKaW50IEdldERlYnVnTW9kZSggdm9pZCApOwoKCgoK
CnZvaWQgSU1QU3RhdHVzKCBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBpbnQgKiwgdm9pZCAqKiwgaW50LCBj
aGFyICoqICk7CnZvaWQgSU1QSW5pdCggY2hhciAqLCBpbnQsIGludCwgY2hhciAqKiApOwoKCgoK
aW50IElNUFNlZVBhcm0oIGNoYXIgKiwgaW50LCBpbnQsIGludCApOwp2b2lkIElNUFJlYWxFbmNv
ZGUoIGRvdWJsZSwgaW50LCBjaGFyICogKTsKY2hhciAqIElNUFRpbWUoIGNoYXIgKiwgaW50ICk7
CmludCBJTVBUZXJtaW5hbCggY2hhciAqICk7CmludCBJTVBBdXRvbWF0aWNUZXJtKCB2b2lkICk7
CnZvaWQgSU1QQXRFeGl0KCBJTVBFeGl0UHJvYyApOwpUQm9vbCBJTVBSZWdpc3RlcmVkRm9yRXhp
dChJTVBFeGl0UHJvYyk7CnZvaWQgSU1QSW5zdGFsbEV4aXRGdW5jKCB2b2lkICgqKShpbnQpICk7
CmludCBJTVBGYXRhbCggaW50ICk7CmludCBJTVBSdW5UYXNrKCBjaGFyICosIGNoYXIgKiwgaW50
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKikoIGludCwgaW50ICksIGludCAq
ICk7CmludCBJTVBLaWxsVGFzayggaW50ICk7CmludCBJTVBLaWxsVGFza0J5TmFtZSggY29uc3Qg
Y2hhciAqICk7CmludCBJTVBHZXRQSUQoIHZvaWQgKTsKVEJvb2wgSU1QR2V0UElEQnlOYW1lKCBj
b25zdCBjaGFyICosIGludCAqICk7CgpUQm9vbCBJTVBTZXRDV0QoIGNvbnN0IGNoYXIgKiApOwpU
Qm9vbCBJTVBTZXRDV0RGcm9tRmlsZSggY29uc3QgY2hhciogcHN6RmlsZSApOwoKY29uc3QgY2hh
ciAqSU1QR2V0Q1dEKCB2b2lkICk7CmNvbnN0IGNoYXIgKklNUEdldFVzZXJIb21lKCB2b2lkICk7
CmludCBJTVBNa0RpcmVjdG9yeSggY29uc3QgY2hhciAqICk7CgpUQm9vbCBJTVBJbnZva2VGdW5j
dGlvbiggdm9pZCAqLCBjb25zdCBjaGFyICosIHZvaWQgKiosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQsIHZvaWQgKiApOwp2b2lkICpJTVBHZXRTeW1ib2wo
IGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsKCmNoYXIgKiogSU1Q
R2V0QXJncyggaW50ICogKTsKSU1QSW5mb190ICogSU1QR2V0SW5mbyggdm9pZCApOwppbnQgSU1Q
U2NyUGFnZSggRklMRSAqLCBpbnQgKTsKCmludCBJTVBIbHBTZWFyY2goIGNoYXIgKiwgY2hhciAq
ICk7CmludCBJTVBFeGVTZWFyY2goIGNoYXIgKiwgY2hhciAqICk7CmludCBJTVBFYXNTZWFyY2go
IGNoYXIgKiwgY2hhciAqICk7CnZvaWQgSU1QR2V0U3lzTmFtZSggY2hhciAqKiwgY2hhciAqKiAp
OwpjaGFyICogSU1QR2V0TXlFeGVQYXRoKCB2b2lkICk7CmludCBJTVBHZXRNZW1vcnkoIFRCb29s
ICogKTsKY2hhciAqIElNUEZpbmRGaWxlKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwp2
b2lkIElNUE92ZXJyaWRlRmluZEZpbGVGdW5jKGNoYXIgKigqKShjb25zdCBjaGFyKiwgY29uc3Qg
Y2hhciopKTsKY2hhciAqIElNUEZpbmRDb25maWcoIGNvbnN0IGNoYXIgKnBzekZpbGVuYW1lLCBU
Qm9vbCBiUmVhZE1vZGUgKTsKCnZvaWQgSW5zdGFsbFVTbGVlcEhvb2soIHZvaWQgKCopKGludCkg
KTsKdm9pZCBVU2xlZXAoIGludCApOwpkb3VibGUgR2V0TWljcm9TZWNvbmRzKCk7CnNob3J0IEFQ
YXJzZShjaGFyICopOwoKdm9pZCBJTVBDb3VudGVyKCBkb3VibGUgKTsKdm9pZCBJTVBTZXRDdW11
bGF0aXZlUGFybXMoIGRvdWJsZSwgZG91YmxlLCB2b2lkICgqKSggZG91YmxlICkgKTsKdm9pZCBJ
TVBDdW11bGF0aXZlQ291bnRlciggZG91YmxlICk7Cgp0eXBlZGVmIFRCb29sICgqSU1QUHJvZ3Jl
c3NGdW5jKSggZG91YmxlLCBjb25zdCBjaGFyICosIHZvaWQgKiApOwoKVEJvb2wgSU1QVGVybVBy
b2dyZXNzQ291bnRlciggZG91YmxlLCBjb25zdCBjaGFyICosIHZvaWQgKik7ClRCb29sIElNUER1
bW15UHJvZ3Jlc3MoIGRvdWJsZSwgY29uc3QgY2hhciAqLCB2b2lkICogKTsKUENJQ291bnRlciBJ
TVBQcm9ncmVzc0NvdW50ZXJHYXRlKCBJTVBQcm9ncmVzc0Z1bmMsIGNvbnN0IGNoYXIgKix2b2lk
ICogKTsKCnZvaWQgKklNUENyZWF0ZUN1bXVsYXRpdmVQcm9ncmVzcyggZG91YmxlLCBkb3VibGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBQcm9ncmVz
c0Z1bmMsIHZvaWQgKiApOwpUQm9vbCBJTVBDdW11bGF0aXZlUHJvZ3Jlc3MoIGRvdWJsZSwgY29u
c3QgY2hhciAqLCB2b2lkICogKTsKCgpUQm9vbCBOQ0NFc3RhYmxpc2hMaW5rUFJNKCB2b2lkICk7
CnZvaWQgTkNDRXN0YWJsaXNoTGluayggRklMRSAqICk7ClRCb29sIE5DQ1Byb2dyZXNzKCBkb3Vi
bGUsIGNvbnN0IGNoYXIgKiwgdm9pZCAqICk7Cgp2b2lkIE5DU1NldHVwTW9uaXRvciggdm9pZCAp
OwpUQm9vbCBOQ1NQb2xsKCBkb3VibGUgKiwgY2hhciAqKiApOwp2b2lkIE5DU0luc3RhbGxQb2xs
ZXIoIElNUFByb2dyZXNzRnVuYywgdm9pZCAqICk7ClRCb29sIE5DU0dldFRhc2tJbmZvKCBpbnQg
KiwgY2hhciAqICk7CgpUQm9vbCBJc1dpbjMycyggdm9pZCApOwoKaW50IERlc3Ryb3lDb25zb2xl
KCB2b2lkICk7CnZvaWQgU2hvd0NvbnNvbGUoIFRCb29sICk7CmludCBDcmVhdGVDb25zb2xlKCB2
b2lkICk7CgoKCgoKCgp2b2lkIElNUFJldHVybih2b2lkKSBfX2F0dHJpYnV0ZV9fKChfX3ZvbGF0
aWxlKSk7CnZvaWQgSU1QRXhpdCggaW50ICkgX19hdHRyaWJ1dGVfXygoX192b2xhdGlsZSkpOwoj
IDM3OCAiLi4vLi4vLi4vbGliL2NjbHRhc2suaCIKaW50IEROUENoZWNrKGNvbnN0IGNoYXIqKTsK
aW50IEROUFBlZWsoY29uc3QgY2hhciopOwpjaGFyICpETlBFcnJvck1zZyh2b2lkKTsKIyA0NDYg
Ii4uLy4uLy4uL2xpYi9jY2x0YXNrLmgiCmludCBJTVBfUHJvdGVjdCggdm9pZCApOwp2b2lkICog
SU1QUHJvdGVjdEJ1ZmZlciggdm9pZCApOwp2b2lkIElNUFVucHJvdGVjdCggdm9pZCApOwp2b2lk
IElNUFZpb2xhdGlvbiggaW50LCBpbnQsIGNvbnN0IGNoYXIgKiApOwppbnQgSU1QR2V0UHJvdGVj
dFJpbmdDb3VudCggdm9pZCApOwoKCgoKCmludCBfSU1QQXNzZXJ0KCBjaGFyICosIGNoYXIgKiwg
aW50ICk7CnZvaWQgSU1QQ2hlY2tFeHByKGNoYXIgKiwgY2hhciAqLCBpbnQpOwojIDQ2NiAiLi4v
Li4vLi4vbGliL2NjbHRhc2suaCIKdm9pZCBJTVBFcnJDaGFyKCBpbnQsIGludCwgY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICogKTsKdm9pZCBJTVBFcnJSZWFsKCBpbnQsIGludCwgY29uc3QgY2hh
ciAqLCBkb3VibGUsIGludCApOwp2b2lkIElNUEVyckludCggaW50LCBpbnQsIGNvbnN0IGNoYXIg
KiwgaW50LCBpbnQgKTsKdm9pZCBJTVBFcnJMb25nKCBpbnQsIGludCwgY29uc3QgY2hhciAqLCBs
b25nLCBpbnQgKTsKdm9pZCBJTVBFcnJNc2coIGludCwgaW50ICk7CnZvaWQgSU1QUmVwb3J0RXJy
b3IoIGludCwgaW50LCBjb25zdCBjaGFyICosIFRCb29sICk7CmludCBJTVBFcnJubyggdm9pZCAp
Owp2b2lkIElNUFNldEVycm5vKCBpbnQgKTsKY29uc3QgY2hhciAqIElNUEVyclN0cmluZyggdm9p
ZCApOwp2b2lkIEluc3RhbGxJTVBXYXJuaW5nSGFuZGxlciggdm9pZCAoKikoY29uc3QgY2hhciAq
KSApOwp2b2lkIFBvcElNUFdhcm5pbmdIYW5kbGVyKHZvaWQpOwoKdm9pZCBJTVBFcnJvciggaW50
LCBpbnQsIGNvbnN0IGNoYXIgKiwgLi4uICk7Cgp2b2lkIElNUFB1dENoYXIoIGNoYXIgKiwgY2hh
ciAqICk7CnZvaWQgSU1QUHV0UmVhbCggY2hhciAqLCBmbG9hdCAqLCBpbnQgKTsKaW50IElNUEdl
dERlZmF1bHQoIGNoYXIgKiwgY2hhciAqLCBjaGFyICosZmxvYXQgKiwgZmxvYXQgKiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKiApOwppbnQgSU1QT3BlbiggaW50ICk7CmNv
bnN0IGNoYXIgKklNUEdldFBSTUZpbGVuYW1lKCB2b2lkICk7ClRCb29sIElNUEFjcXVpcmVQUk1G
aWxlKGNvbnN0IGNoYXIqIFBSTUZpbGVuYW1lLCBUQm9vbCBiT3ZlcndyaXRlKTsKaW50IElNUENy
ZWF0ZSggdm9pZCApOwppbnQgSU1QR2V0TnVtZXJpYyggY2hhciAqLCBjaGFyICosIHZvaWQgKiwg
aW50ICk7CmludCBJTVBHZXRDaGFyKCBjaGFyICosIGNoYXIgKiwgaW50ICk7CmludCBJTVBEZWZQ
YXJtKCBjaGFyICosIGNoYXIgKiwgaW50LCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICogKTsKVEJvb2wgSU1QVW5kZWZpbmVQYXJtKCBjb25z
dCBjaGFyICogKTsKCmNvbnN0IGNoYXIgKklNUEdldE1ham9yUmV2KCB2b2lkICk7CnZvaWQgSU1Q
UGF0aEV4cGFuZCggY2hhciAqICk7CnZvaWQgSU1QU2V0UENJSG9tZSggY29uc3QgY2hhciAqICk7
CmNvbnN0IGNoYXIgKiBJTVBNdW5nZSggY29uc3QgY2hhciAqLCAuLi4gKTsKaW50IENEUGF0aEV4
cGFuZCggY2hhciAqLCBpbnQgKTsKVEJvb2wgSW5pdENEUGF0aEV4cGFuZChjb25zdCBjaGFyICop
Owp2b2lkIGltcG1zZ2MoIGludCwgY2hhciAqLCBjaGFyICogKTsKaW50IGltcGtleWMoIGNoYXIg
KiwgY2hhciAqICk7CnZvaWQgaW1wZXhyYyggaW50LCBpbnQsIGludCApOwppbnQgaW1wc3JoYygg
Y2hhciAqLCBsb25nICosIGxvbmcgKiApOwoKCnZvaWQgSU1QUGFnZVRpdGxlKCBGSUxFICosIGNo
YXIgKiwgY2hhciAqICk7CnZvaWQgSU1QUGFnZSggRklMRSAqLCBpbnQgKTsKCnZvaWQgSU1QQXN5
bmNEaXNhYmxlKCB2b2lkICk7CmludCBJTVBBc3luY0dldENoYXIoIGludCApOwppbnQ2NCBJTVBH
ZXRGcmVlU3BhY2UoIGNvbnN0IGNoYXIgKiApOwoKVEJvb2wgSU1QTG9ja0ZpbGUoIEZJTEUgKiwg
VEJvb2wgKTsKVEJvb2wgSU1QVW5sb2NrRmlsZSggRklMRSAqICk7CmNvbnN0IGNoYXIgKiBJTVBH
ZXRFbnYoIGNvbnN0IGNoYXIgKiApOwp2b2lkIElNUFNldEVudiggY29uc3QgY2hhciAqcHN6TmFt
ZSwgY29uc3QgY2hhciAqcHN6VmFsdWUgKTsKVEJvb2wgSU1QUmVhZEVudkZpbGUoY29uc3QgY2hh
ciAqcHN6RmlsZSk7CmNvbnN0IGNoYXIgKiBJTVBHZXRQQ0lIb21lRGlyKGNvbnN0IGNoYXIqIHBz
elZhcmlhYmxlKTsKCmNoYXIgKklNUFJlZGlyZWN0U3Rkb3V0KCB2b2lkICk7CnZvaWQgSU1QUmVz
dG9yZVN0ZG91dCggdm9pZCApOwpjaGFyICpJTVBSZWRpcmVjdFN0ZG91dE9ubHkoIHZvaWQgKTsK
dm9pZCBJTVBSZXN0b3JlU3Rkb3V0T25seSggdm9pZCApOwpjaGFyICpJTVBSZWRpcmVjdFN0ZGVy
ciggdm9pZCApOwp2b2lkIElNUFJlc3RvcmVTdGRlcnIoIHZvaWQgKTsKClRCb29sIElNUEFkZEdy
b3VwSWNvbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKVEJvb2wgSU1QQ3JlYXRl
R3JvdXAgKGNvbnN0IGNoYXIgKik7ClRCb29sIElNUFNldFJlZ2lzdHJ5UENJKGNvbnN0IGNoYXIg
KiwgY29uc3QgY2hhciAqKTsKVEJvb2wgSU1QU2V0UmVnaXN0cnkoY29uc3QgY2hhciAqLCBjb25z
dCBjaGFyICopOwpjb25zdCBjaGFyICogSU1QR2V0UmVnaXN0cnlQQ0koY29uc3QgY2hhciAqKTsK
Y29uc3QgY2hhciAqIElNUEdldFJlZ2lzdHJ5UENJVmVyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh
ciAqKTsKY29uc3QgY2hhciAqIElNUEdldFJlZ2lzdHJ5KGNvbnN0IGNoYXIgKik7CmNoYXIgKipJ
TVBHZXRSZWdpc3RyeUNoaWxkcmVuKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwp2b2lk
IElNUFNldFJlZ2lzdHJ5UENJSGFuZGxlcnMoY29uc3QgY2hhciAqKCpwZm5HZXRSZWcpKGNvbnN0
IGNoYXIgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEJvb2wg
KCpwZm5TZXRSZWdpc3RyeSkoY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKikpOwpU
Qm9vbCBJTVBHZXREYXRhYmFzZVBhcm1zKGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqLCBjaGFyICoqLCBjaGFyKiosIGNoYXIgKiosIGNoYXIgKios
IGNoYXIgKiopOwojIDcxOSAiLi4vLi4vLi4vbGliL2NjbHRhc2suaCIKaW50IGZwVmFsaWRhdGUo
IEZJTEUgKiApOwppbnQgZnAydHlwZSggRklMRSAqICk7CmludCBmcDJpbmRleCggRklMRSAqICk7
CnZvaWQgZnBTRVRpbmRleCggRklMRSAqLCBpbnQgKTsKaW50IGZwMmZkKCBGSUxFICogKTsKdm9p
ZCBmcFNFVGZkKCBGSUxFICosIGludCApOwpGSUxFICogZnBBbGxvYyggY29uc3QgY2hhciAqLCBp
bnQsIEZJTEUgKiApOwp2b2lkIGZwUmVhbGxvYyhGSUxFICpmcCwgY29uc3QgY2hhciAqIGZpbGVu
YW1lLCBpbnQgZGt0eXBlKTsKdm9pZCBmcERlYWxsb2MoIEZJTEUgKiApOwpjaGFyICogZnAyZmls
ZW5hbWUoIEZJTEUgKiApOwp2b2lkIGZwU0VUZmxhZyggRklMRSAqLCBpbnQgKTsKdm9pZCBmcENM
RUFSZmxhZyggRklMRSAqLCBpbnQgKTsKaW50IGZwVGVzdEZsYWcoIEZJTEUgKiwgaW50ICk7Cmlu
dCBmcFJlZmVyZW5jZSggRklMRSAqICk7CmludCBmcERlcmVmZXJlbmNlKCBGSUxFICogKTsKaW50
IGZwR2V0UmVmQ291bnQoIEZJTEUgKiApOwppbnQgZnBEdW1wRmlsZXMoIHZvaWQgKTsKRklMRSAq
KiBmcEZpbGVMaXN0KCB2b2lkICk7ClRCb29sIERLRmlsZXNMb3coIHZvaWQgKTsKCmludCBQcm9t
b3RlKCBGSUxFICosIHZvaWQgKiApOwoKCgoKaW50IERLQ2hlY2soIGNvbnN0IGNoYXIgKiApOwp2
b2lkIERLR2V0KCBGSUxFICosIGxvbmcsIGxvbmcsIHZvaWQgKiApOwp2b2lkIERLUHV0KCBGSUxF
ICosIGxvbmcsIGxvbmcsIHZvaWQgKiApOwpGSUxFICogREtPcGVuKCBjb25zdCBjaGFyICosIGlu
dCwgY29uc3QgY2hhciAqICk7CnZvaWQgREtDbG9zZSggRklMRSAqICk7CmNoYXIgKiBES05hbWUo
IEZJTEUgKiApOwp2b2lkIERLRXJyb3IoIEZJTEUgKiApOwppbnQgREtSZWFkKCBGSUxFICosIHZv
aWQgKiwgaW50NjQsIGxvbmcgKTsKY2hhciAqIERLUmVhZExpbmUoIEZJTEUgKiApOwppbnQgREtX
cml0ZSggRklMRSAqLCB2b2lkICosIGludDY0LCBsb25nICk7CnVuc2lnbmVkIGNoYXIgKiBES01N
YXBJbmZvKCBGSUxFICosIGludCAqICk7CmludCBES0FsbG9jKCBGSUxFICogKTsKbG9uZyBES1Np
emUoIGNvbnN0IGNoYXIgKiApOwp2b2lkIERLU3luYyggRklMRSAqICk7CnZvaWQgREtEZWxldGUo
IGNvbnN0IGNoYXIgKiApOwp2b2lkIERLUmVuYW1lKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg
KiApOwp2b2lkIERLVHJ1bmNhdGUoIGNvbnN0IGNoYXIgKiwgaW50ICk7CgppbnQgREtGUmVhZCgg
dm9pZCAqLCBsb25nLCBsb25nLCBGSUxFICogKTsKaW50IERLRldyaXRlKCB2b2lkICosIGxvbmcs
IGxvbmcsIEZJTEUgKiApOwppbnQgREtGU2VlayggRklMRSAqLCBpbnQ2NCwgaW50ICk7CmludCBE
S0ZTZWVrNjQoIEZJTEUgKiwgaW50NjQsIGludCApOwppbnQ2NCBES0ZUZWxsKCBGSUxFICogKTsK
CgoKCmludCBES1ByaW50ZiggY29uc3QgY2hhciAqLCAuLi4gKTsKaW50IERLRlByaW50ZiggRklM
RSAqLCBjb25zdCBjaGFyICosIC4uLiApOwp2b2lkIEluc3RhbGxQcmludGZIYW5kbGVyKCB2b2lk
ICgqSGFuZGxlckZ1bmN0aW9uKShjb25zdCBjaGFyICopKTsKCgoKCmludCBES0NvcHkoY29uc3Qg
Y2hhciAqLCBjb25zdCBjaGFyICopOwppbnQgREtDaG1vZChjb25zdCBjaGFyICosIGludCk7CiMg
Nzk1ICIuLi8uLi8uLi9saWIvY2NsdGFzay5oIgpGSUxFICpGSGFuZGxlMmZwKCBpbnQgKTsKaW50
IGZwMkZIYW5kbGUoIEZJTEUgKiApOwppbnQgQXNzaWduRkhhbmRsZUZvcmZwKCBGSUxFICosIGlu
dCApOwp2b2lkIFJlbW92ZUZIYW5kbGUoIGludCApOwojIDg1NSAiLi4vLi4vLi4vbGliL2NjbHRh
c2suaCIKdm9pZCBTZXRITWFsbG9jRGVidWcoaW50IG5MZXZlbCk7CnZvaWQgKiBfSE1hbGxvYyhz
aXplX3QgblNpemUsIGNoYXIgKnBzekZpbGUsIGludCBuTGluZSk7CnZvaWQgKiBfSENhbGxvYyhz
aXplX3QgbkVsZW0sIHNpemVfdCBuU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqcHN6RmlsZSwgaW50IG5MaW5lKTsKY2hhciAqIF9IU3RyaW5nKGNvbnN0IGNoYXIgKnBzelN0
cmluZywgY2hhciAqcHN6RmlsZSwgaW50IG5MaW5lKTsKdm9pZCBfSEZyZWUoIHZvaWQgKnBCbG9j
aywgY2hhciAqcHN6RmlsZSwgaW50IG5MaW5lKTsKdm9pZCAqIF9IUmVhbGxvYyh2b2lkICpwQmxv
Y2ssIHNpemVfdCBuU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzekZp
bGUsIGludCBuTGluZSk7CnZvaWQgX0hNZW1vcnlUZXN0KGNoYXIgKnBzekZpbGUsIGludCBuTGlu
ZSk7CnZvaWQgX0hSZXBvcnQoY2hhciAqcHN6RmlsZSwgaW50IG5MaW5lKTsKdm9pZCBITUhhbmRs
ZXIoaW50KTsKdm9pZCBITURlYnVnTGV2ZWwoaW50IG5MZXZlbCk7CnZvaWQgX0hNYXJrKGNoYXIg
KnBzekZpbGUsIGludCBuTGluZSk7CmludCBfSENoZWNrTWFyayhjaGFyICpwc3pGaWxlLCBpbnQg
bkxpbmUpOwpUQm9vbCBfSFRlc3RCbG9jayh2b2lkICpwQmxvY2ssIGNoYXIgKnBzekZpbGUsIGlu
dCBuTGluZSk7CmNoYXIgKiBIU1ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CnZvaWQg
X0hSZXBvcnRCeUZpbGVzKGNoYXIgKnBzekZpbGUsIGludCBuTGluZSk7CnZvaWQgSFByaW50Qmxv
Y2sodm9pZCAqcEJsb2NrKTsKdm9pZCBfSE1lbUluZm8odm9pZCAqLCBjaGFyICosIGludCk7CmNo
YXIgKiBIU3RyaW5nRXhwYW5kKGNvbnN0IGNoYXIgKnBzeklucHV0KTsKVEJvb2wgQ0NMSFN0cmlu
Z0V4cGFuZFRlc3QoIHZvaWQgKTsKIyA5MjMgIi4uLy4uLy4uL2xpYi9jY2x0YXNrLmgiCiMgMSAi
L3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRl
L3N5cy9zdGF0LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAy
OSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1l
LmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMiAzCiMgOTYgIi91c3IvaW5j
bHVkZS9zeXMvc3RhdC5oIiAzCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9z
dGF0LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9zdGF0LmgiIDMKc3RydWN0IHN0YXQK
ICB7CiAgICBfX2Rldl90IHN0X2RldjsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3BhZDE7Cgog
ICAgX19pbm9fdCBzdF9pbm87CgoKCiAgICBfX21vZGVfdCBzdF9tb2RlOwogICAgX19ubGlua190
IHN0X25saW5rOwogICAgX191aWRfdCBzdF91aWQ7CiAgICBfX2dpZF90IHN0X2dpZDsKICAgIF9f
ZGV2X3Qgc3RfcmRldjsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3BhZDI7CgogICAgX19vZmZf
dCBzdF9zaXplOwoKCgogICAgX19ibGtzaXplX3Qgc3RfYmxrc2l6ZTsKCgogICAgX19ibGtjbnRf
dCBzdF9ibG9ja3M7CgoKCiAgICBfX3RpbWVfdCBzdF9hdGltZTsKICAgIHVuc2lnbmVkIGxvbmcg
aW50IF9fdW51c2VkMTsKICAgIF9fdGltZV90IHN0X210aW1lOwogICAgdW5zaWduZWQgbG9uZyBp
bnQgX191bnVzZWQyOwogICAgX190aW1lX3Qgc3RfY3RpbWU7CiAgICB1bnNpZ25lZCBsb25nIGlu
dCBfX3VudXNlZDM7CgogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQ0OwogICAgdW5zaWdu
ZWQgbG9uZyBpbnQgX191bnVzZWQ1OwoKCgogIH07CgoKc3RydWN0IHN0YXQ2NAogIHsKICAgIF9f
ZGV2X3Qgc3RfZGV2OwogICAgdW5zaWduZWQgaW50IF9fcGFkMTsKCiAgICBfX2lub190IF9fc3Rf
aW5vOwogICAgX19tb2RlX3Qgc3RfbW9kZTsKICAgIF9fbmxpbmtfdCBzdF9ubGluazsKICAgIF9f
dWlkX3Qgc3RfdWlkOwogICAgX19naWRfdCBzdF9naWQ7CiAgICBfX2Rldl90IHN0X3JkZXY7CiAg
ICB1bnNpZ25lZCBpbnQgX19wYWQyOwogICAgX19vZmY2NF90IHN0X3NpemU7CiAgICBfX2Jsa3Np
emVfdCBzdF9ibGtzaXplOwoKICAgIF9fYmxrY250NjRfdCBzdF9ibG9ja3M7CiAgICBfX3RpbWVf
dCBzdF9hdGltZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMTsKICAgIF9fdGltZV90
IHN0X210aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQyOwogICAgX190aW1lX3Qg
c3RfY3RpbWU7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDM7CiAgICBfX2lubzY0X3Qg
c3RfaW5vOwogIH07CiMgOTkgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAyIDMKIyAyMDAgIi91
c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzCmV4dGVybiBpbnQgc3RhdCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZmlsZSwKICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAqX19yZXN0cmlj
dCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnN0YXQgKGludCBfX2ZkLCBzdHJ1Y3Qg
c3RhdCAqX19idWYpIHRocm93ICgpOwojIDIxOSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMK
ZXh0ZXJuIGludCBzdGF0NjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGUsCiAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdDY0ICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBmc3RhdDY0IChpbnQgX19mZCwgc3RydWN0IHN0YXQ2NCAqX19idWYpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gaW50IGxzdGF0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
aWxlLAogICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAqX19yZXN0cmljdCBfX2J1ZikgdGhy
b3cgKCk7CiMgMjQxICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpleHRlcm4gaW50IGxzdGF0
NjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAg
c3RydWN0IHN0YXQ2NCAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBp
bnQgY2htb2QgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX21vZGVfdCBfX21vZGUpIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IGZjaG1vZCAoaW50IF9fZmQsIF9fbW9kZV90IF9fbW9kZSkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIF9fbW9kZV90IHVtYXNrIChfX21vZGVfdCBfX21hc2spIHRocm93ICgp
OwoKCgoKZXh0ZXJuIF9fbW9kZV90IGdldHVtYXNrICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBta2RpciAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGludCBta25vZCAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90
IF9fbW9kZSwgX19kZXZfdCBfX2RldikKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbWtm
aWZvIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlKSB0aHJvdyAoKTsKIyAz
MDYgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzCmV4dGVybiBpbnQgX19meHN0YXQgKGludCBf
X3ZlciwgaW50IF9fZmlsZGVzLCBzdHJ1Y3Qgc3RhdCAqX19zdGF0X2J1ZikgdGhyb3cgKCk7CmV4
dGVybiBpbnQgX194c3RhdCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9fc3RhdF9idWYpIHRocm93ICgpOwpleHRl
cm4gaW50IF9fbHhzdGF0IChpbnQgX192ZXIsIF9fY29uc3QgY2hhciAqX19maWxlbmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9fc3RhdF9idWYpIHRocm93ICgpOwojIDMz
MCAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKZXh0ZXJuIGludCBfX2Z4c3RhdDY0IChpbnQg
X192ZXIsIGludCBfX2ZpbGRlcywgc3RydWN0IHN0YXQ2NCAqX19zdGF0X2J1ZikKICAgICB0aHJv
dyAoKTsKZXh0ZXJuIGludCBfX3hzdGF0NjQgKGludCBfX3ZlciwgX19jb25zdCBjaGFyICpfX2Zp
bGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQ2NCAqX19zdGF0X2J1Zikg
dGhyb3cgKCk7CmV4dGVybiBpbnQgX19seHN0YXQ2NCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIg
Kl9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQ2NCAqX19zdGF0
X2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9feG1rbm9kIChpbnQgX192ZXIsIF9fY29uc3Qg
Y2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21vZGUsCiAgICAgICAgICAgICAgICAgICAgIF9fZGV2
X3QgKl9fZGV2KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX2lubGluZV9fIGludCBzdGF0IChfX2Nv
bnN0IGNoYXIgKl9fcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0
ICpfX3N0YXRidWYpIHRocm93ICgpCnsKICByZXR1cm4gX194c3RhdCAoMywgX19wYXRoLCBfX3N0
YXRidWYpOwp9CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IGxzdGF0IChfX2NvbnN0IGNoYXIgKl9f
cGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAqX19zdGF0YnVm
KSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fbHhzdGF0ICgzLCBfX3BhdGgsIF9fc3RhdGJ1Zik7Cn0K
CgpleHRlcm4gX19pbmxpbmVfXyBpbnQgZnN0YXQgKGludCBfX2ZkLCBzdHJ1Y3Qgc3RhdCAqX19z
dGF0YnVmKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fZnhzdGF0ICgzLCBfX2ZkLCBfX3N0YXRidWYp
Owp9CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IG1rbm9kIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwg
X19tb2RlX3QgX19tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGV2X3QgX19k
ZXYpIHRocm93ICgpCnsKICByZXR1cm4gX194bWtub2QgKDEsIF9fcGF0aCwgX19tb2RlLCAmX19k
ZXYpOwp9CgoKCgoKZXh0ZXJuIF9faW5saW5lX18gaW50IHN0YXQ2NCAoX19jb25zdCBjaGFyICpf
X3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9fc3Rh
dGJ1ZikgdGhyb3cgKCkKewogIHJldHVybiBfX3hzdGF0NjQgKDMsIF9fcGF0aCwgX19zdGF0YnVm
KTsKfQoKCmV4dGVybiBfX2lubGluZV9fIGludCBsc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9fcGF0
aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9fc3RhdGJ1
ZikgdGhyb3cgKCkKewogIHJldHVybiBfX2x4c3RhdDY0ICgzLCBfX3BhdGgsIF9fc3RhdGJ1Zik7
Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgZnN0YXQ2NCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0
NjQgKl9fc3RhdGJ1ZikgdGhyb3cgKCkKewogIHJldHVybiBfX2Z4c3RhdDY0ICgzLCBfX2ZkLCBf
X3N0YXRidWYpOwp9CgoKCgp9CiMgOTI0ICIuLi8uLi8uLi9saWIvY2NsdGFzay5oIiAyCgoKCgoK
Cgp0eXBlZGVmIHN0cnVjdCBzdGF0IERLU3RhdF90OwojIDk1NCAiLi4vLi4vLi4vbGliL2NjbHRh
c2suaCIKaW50IERLU3RhdCggY29uc3QgY2hhciAqLCBES1N0YXRfdCAqICk7CgoKCgpjaGFyICoq
IElNUERpcmVjdG9yeSggY29uc3QgY2hhciAqICk7CmludCBJTVBSZWdleCggY29uc3QgY2hhciAq
LCBjb25zdCBjaGFyICosIFRCb29sICk7ClRCb29sIElNUEZpbGVuYW1lQ29tcGFyZSggY29uc3Qg
Y2hhciAqLCBjb25zdCBjaGFyICogKTsKY29uc3QgY2hhciAqIElNUFRlbXBOYW1lKHZvaWQpOwpj
b25zdCBjaGFyICogSU1QUmVsVGVtcE5hbWUoIGNvbnN0IGNoYXIgKnBzekxvY2F0aW9uICk7CmNv
bnN0IGNoYXIgKiBJTVBSZWxUZW1wTmFtZUV4dCggY29uc3QgY2hhciAqcHN6TG9jYXRpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzekV4
dCk7CgpUQm9vbCBJTVBJc0RpcmVjdG9yeSggY29uc3QgY2hhciogcHN6RGlyZWN0b3J5ICk7ClRC
b29sIElNUElzRGlyZWN0b3J5V3JpdGFibGUoIGNvbnN0IGNoYXIqIHBzekRpcmVjdG9yeSApOwpj
b25zdCBjaGFyICogSU1QR2V0VGVtcERpciggdm9pZCApOwoKCgoKaW50IElNUFNpZ25hbCggaW50
LCB2b2lkICgqKSh2b2lkKSApOwp2b2lkIElNUFNpZ25hbElnbm9yZSggdm9pZCApOwojIDk5NyAi
Li4vLi4vLi4vbGliL2NjbHRhc2suaCIKVEJvb2wgTkVUSW5pdCggdm9pZCApOwp2b2lkIE5FVENs
b3NlKCBGSUxFICogKTsKaW50IE5FVFNlbmQoIEZJTEUgKiwgdm9pZCAqLCBpbnQgKTsKaW50IE5F
VEFjY2VwdCggRklMRSAqLCB2b2lkICosIGludCApOwpGSUxFICpORVRPcGVuKCBjb25zdCBjaGFy
ICosIGludDMyLCBpbnQzMiApOwpGSUxFICpORVRBZHZlcnRpc2UoIGNvbnN0IGNoYXIgKiwgaW50
MzIgKiwgaW50MzIgKiApOwpGSUxFICpORVRTZWxlY3QoIEZJTEUgKiwgaW50ICk7CmxvbmcgTkVU
RmxhZ3MoIEZJTEUgKiApOwp2b2lkIE5FVFNldEZsYWdzKCBGSUxFICosIGxvbmcgKTsKdm9pZCBO
RVRGbHVzaCggRklMRSAqICk7CmNvbnN0IGNoYXIgKk5FVEhvc3RuYW1lKCB2b2lkICk7ClRCb29s
IE5FVFBlbmRpbmdSZWFkIChGSUxFKiBmcCwgaW50IG1zZWNzKTsKIyAxMDE5ICIuLi8uLi8uLi9s
aWIvY2NsdGFzay5oIgp0eXBlZGVmIGVudW0geGRyX3R5cGUgewogIFhEUlZvaWQgPSAwLAogIFhE
UkludDMyID0gMSwKICBYRFJGbG9hdCA9IDIsCiAgWERSRG91YmxlID0gMywKICBYRFJTdHJpbmcg
PSA0LAogIFhEUkJ5dGUgPSA1LAogIFhEUkludDMyQ291bnRlZCA9IDYsCiAgWERSRmxvYXRDb3Vu
dGVkID0gNywKICBYRFJEb3VibGVDb3VudGVkID0gOCwKICBYRFJCeXRlQ291bnRlZCA9IDkKfSBY
RFJUeXBlOwoKaW50IFhEUlNlbmQoIEZJTEUgKiwgWERSVHlwZSwgaW50LCB2b2lkICogKTsKaW50
IFhEUkFjY2VwdCggRklMRSAqLCBYRFJUeXBlLCBpbnQsIHZvaWQgKiApOwojIDEwNDMgIi4uLy4u
Ly4uL2xpYi9jY2x0YXNrLmgiCmludCBSUENBY2NlcHQoIEZJTEUgKiwgaW50ICogKTsKaW50IFJQ
Q1NlbmQoIEZJTEUgKiwgaW50LCBpbnQgKTsKCgoKCgoKCnR5cGVkZWYgVEJvb2wgKCpJTVBEZGVD
QikoIHZvaWQgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgaW50ICogKTsKdm9pZCAq
SU1QRGRlQ29ubmVjdCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsKdm9pZCBJTVBEZGVE
aXNjb25uZWN0KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwpUQm9vbCBJTVBEZGVFeGVj
dXRlKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7ClRCb29sIElN
UERkZVJlcXVlc3QoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBpbnQgKiApOwp2
b2lkIElNUERkZVJlZ2lzdGVyU2VydmljZSggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIElN
UERkZUNCICk7CgoKClRCb29sIElNUFN0YXJ0KGludCwgY2hhciAqLCBjaGFyICosIGNoYXIqKTsK
VEJvb2wgSU1QUHJpbnQoaW50LCBjaGFyICosIGNoYXIgKik7CiMgNDYgIi4uLy4uLy4uL2xpYi9j
Y2xiYXNlLmgiIDIKCn0KIyA3NiAiLi4vLi4vLi4vbGliL2NjbGNvbnYuaCIgMgoKZXh0ZXJuICJD
IiB7CiMgOTEgIi4uLy4uLy4uL2xpYi9jY2xjb252LmgiCmNoYXIgKiBTdHJpcFdoaXRlU3BhY2Uo
IGNoYXIgKiApOwppbnQgTmV4dE11bHQoIGludCwgaW50ICk7CnZvaWQgU3RyVG9BcmcoIGNoYXIg
KiwgY2hhciAqLCBjaGFyICoqLCBpbnQgKik7CmNoYXIgKiBNa05hbWUoIGNvbnN0IGNoYXIgKiwg
Li4uICk7CgpjaGFyICogTWtTdHJpbmcoIGNoYXIgKiApOwp2b2lkIFByaW50RmxvYXQoIGNoYXIg
KiwgY2hhciAqLCBkb3VibGUgKTsKdm9pZCBQcmludERvdWJsZSggY2hhciAqLCBjaGFyICosIGRv
dWJsZSApOwpjb25zdCBjaGFyICogRm9ybWF0RG91YmxlKCBkb3VibGUsIGNoYXIgKiApOwoKdm9p
ZCBQcmludEludCggY2hhciAqLCBjaGFyICosIGxvbmcgKTsKdm9pZCBUZXh0RmllbGRGaWxsKCBj
aGFyICosIGNvbnN0IGNoYXIgKiwgaW50ICk7CgoKCgp2b2lkIFVDYXNlU3RyaW5nKCBjaGFyICog
KTsKdm9pZCBMQ2FzZVN0cmluZyggY2hhciAqICk7CmRvdWJsZSBTY2FuRG91YmxlKCBjaGFyICos
IGludCApOwpsb25nIFNjYW5JbnQoIGNoYXIgKiwgaW50ICk7CnZvaWQgRmlsZU5hbWUoIGNoYXIg
KiwgY2hhciAqICk7CnZvaWQgQml0Q291bnQodW5zaWduZWQgY2hhciAqLCBpbnQsIGludCAqKTsK
CmRvdWJsZSBJTVBSYW5kb20odm9pZCk7CmludCBJTVBJbml0UmFuZG9tKGludCk7CmludCBJTVBS
YW5kSW50KHZvaWQpOwpkb3VibGUgSU1QUmFuZE5vcm0oZG91YmxlKTsKCmNoYXIgKiogR2V0Tmlj
ZUdyYXBoTGFiZWxzKCBkb3VibGUsIGRvdWJsZSwgaW50LCBpbnQgKik7CgoKCgp2b2lkIE1hdHJp
eEludiggZG91YmxlICosIGludCwgZG91YmxlICogKTsKdm9pZCBUcmlhbmd1bGFyRGVjb21wb3Nl
KGludCwgZG91YmxlICopOwp2b2lkIFByaW50TWF0cml4KGNoYXIgKm5hbWUsIGludCBuLCBpbnQg
bSwgZG91YmxlICptYXQpOwpkb3VibGUgUG93SW50IChkb3VibGUsIGludCk7CgoKCgoKdm9pZCBN
TTNfTXVsdChkb3VibGUgKm1hdDEsIGRvdWJsZSAqbWF0MiwgZG91YmxlICptYXQzKTsKdm9pZCBN
VjNfTXVsdChkb3VibGUgKm1hdCwgZG91YmxlICp2ZWMxLCBkb3VibGUgKnZlYzIpOwp2b2lkIE10
VjNfTXVsdChkb3VibGUgKm1hdCwgZG91YmxlICp2ZWMxLCBkb3VibGUgKnZlYzIpOwpkb3VibGUg
VmVjTGVuZ3RoKGRvdWJsZSAqdmVjKTsKdm9pZCBWZWNOb3JtYWxpemUoZG91YmxlICp2ZWMpOwp2
b2lkIFZlY0RpZmYoZG91YmxlICp2ZWMxLCBkb3VibGUgKnZlYzIsIGRvdWJsZSAqdmVjMyk7CnZv
aWQgVmVjU2NhbGUoZG91YmxlIHNjYWxlLCBkb3VibGUgKnZlYzEsIGRvdWJsZSAqdmVjMik7CmRv
dWJsZSBWZWNEaXN0YW5jZShkb3VibGUgKnZlYzEsIGRvdWJsZSAqdmVjMik7CmRvdWJsZSBEb3RQ
cm9kdWN0KGRvdWJsZSAqdmVjMSwgZG91YmxlICp2ZWMyKTsKdm9pZCBDcm9zc1Byb2R1Y3QoZG91
YmxlICp2ZWMxLCBkb3VibGUgKnZlYzIsIGRvdWJsZSAqdmVjMyk7CmRvdWJsZSBwb2x5dmFsKGRv
dWJsZSAqY29lZiwgaW50IG5PcmRlciwgZG91YmxlIHgpOwoKCgoKCmNoYXIgKiogUmVhZEF1eEZp
bGUoIGNvbnN0IGNoYXIgKiApOwpjaGFyICogRmV0Y2hBdXhFbnRyeSggY2hhciAqKiwgY29uc3Qg
Y2hhciAqICk7CmNvbnN0IGNoYXIgKiBGZXRjaE5leHRBdXhFbnRyeSggY2hhciAqKiwgY29uc3Qg
Y2hhciAqLCBjb25zdCBjaGFyICogKTsKY2hhciAqKiBTZXRBdXhFbnRyeSggY2hhciAqKiwgY29u
c3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsKY2hhciAqKiBBZGRBdXhFbnRyeSggY2hhciAqKiwg
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsKY2hhciAqKiBEZWxldGVBdXhFbnRyaWVzKCBj
aGFyICoqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRCb29sKTsKdm9pZCBXcml0ZUF1eEZpbGUoIGNvbnN0IGNoYXIg
KiwgY2hhciAqKiApOwppbnQgRmV0Y2hBdXhGaWVsZE5hbWVMZW5ndGgoIGNvbnN0IGNoYXIgKiAp
OwpUQm9vbCBQYXJzZUF1eEVudHJ5KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKiwgY29uc3Qg
Y2hhciAqKik7CmNoYXIgKiBCdWlsZEF1eEVudHJ5KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg
KiApOwoKY2hhciAqKiBEZWxldGVTdHJpbmdMaXN0RW50cnkoIGNoYXIgKiosIGludCApOwpUQm9v
bCBTdHJpbmdMaXN0c0VxdWFsKCBjaGFyICoqLCBjaGFyICoqICk7CmNoYXIgKiogRHVwbGljYXRl
U3RyaW5nTGlzdCggY2hhciAqKiApOwppbnQgQ291bnRTdHJpbmdMaXN0KCBjaGFyICoqICk7CnZv
aWQgRGVzdHJveVN0cmluZ0xpc3QoIGNoYXIgKiogKTsKY2hhciAqKiBBZGRTdHJpbmdMaXN0KCBj
aGFyICoqLCBjaGFyICoqICk7CmNoYXIgKiogQWRkU3RyaW5nVG9MaXN0KCBjaGFyICoqLCBjb25z
dCBjaGFyICogKTsKaW50IEZpbmRFbnRyeUluU3RyaW5nTGlzdCggY2hhciAqKiwgY29uc3QgY2hh
ciAqICk7CmludCBGaW5kUmVnZXhJblN0cmluZ0xpc3QoIGNoYXIgKiosIGNvbnN0IGNoYXIgKiAp
OwppbnQgUmVwbGFjZVN0cmluZ0luTGlzdCggY2hhciAqKiwgY29uc3QgY2hhciAqLCBpbnQgKTsK
Y2hhciAqKiBUZXh0RmlsZVRvU3RyaW5nTGlzdCggY29uc3QgY2hhciAqICk7ClRCb29sIFN0cmlu
Z0xpc3RUb0ZpbGUoIGNoYXIgKiosIGNvbnN0IGNoYXIgKiApOwpjaGFyICpTdHJpbmdMaXN0VG9C
dWZmZXIoIGNoYXIgKiogcGFwc3pTdHJpbmdMaXN0ICk7CmNoYXIgKipCdWZmZXJUb1N0cmluZ0xp
c3QoIGNvbnN0IGNoYXIqIHBzekJ1ZmZlciApOwpjaGFyICoqIFRva2VuaXplKCBjb25zdCBjaGFy
ICogKTsKY2hhciAqKiBUb2tlbml6ZURlbGltKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiAp
OwpjaGFyICoqIFRva2VuaXplRGVsaW0yKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwpj
aGFyICogR2V0TGFzdFRva2VuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKY2hhciAqKiBJ
bnNlcnRTdHJpbmdJbkxpc3QoY2hhciAqKiwgY29uc3QgY2hhciAqLCBpbnQgLCBUQm9vbCk7CiMg
MTkxICIuLi8uLi8uLi9saWIvY2NsY29udi5oIgp2b2lkIFN3YXBXb3JkKCBpbnQsIHZvaWQgKiAp
OwojIDIwNiAiLi4vLi4vLi4vbGliL2NjbGNvbnYuaCIKdm9pZCBDQ0xMb2dFcnJvciggY29uc3Qg
Y2hhciAqLCBjb25zdCBjaGFyICosIC4uLiApOwp2b2lkIENDTExvZ1N1Y2Nlc3MoIGNvbnN0IGNo
YXIgKiApOwp2b2lkIENDTFN0YXJ0VGVzdCggY29uc3QgY2hhciAqICk7ClRCb29sIENDTEVuZFRl
c3QoIHZvaWQgKTsKIyAyMTggIi4uLy4uLy4uL2xpYi9jY2xjb252LmgiCnR5cGVkZWYgc3RydWN0
IHsKICAgIGNoYXIgKmJhc2VuYW1lOwogICAgY2hhciAqZXh0ZW5zaW9uOwogICAgY2hhciAqZHJp
dmU7CiAgICBpbnQgcmVsYXRpdmU7CiAgICBpbnQgcGF0aF9lbGVtZW50czsKICAgIGNoYXIgKnBh
dGhbMjRdOwp9IEdsb2JfdDsKIyAyNTAgIi4uLy4uLy4uL2xpYi9jY2xjb252LmgiCnZvaWQgSU1Q
RGVzdHJveUdsb2IoIEdsb2JfdCAqICk7Ckdsb2JfdCAqIElNUEZpbGUyR2xvYiggY29uc3QgY2hh
ciAqLCBpbnQgKTsKY2hhciAqIElNUEdsb2IyRmlsZSggY29uc3QgR2xvYl90ICosIGludCApOwpj
aGFyICogSU1QR2xvYmJlciggY29uc3QgY2hhciAqLCBpbnQsIGludCApOwpjaGFyICogSU1QR2V0
UGF0aCggY29uc3QgR2xvYl90ICosIGludCApOwpjaGFyICogSU1QR2V0RmlsZW5hbWUoIGNvbnN0
IEdsb2JfdCAqLCBpbnQgKTsKY29uc3QgY2hhciAqIElNUEdldEZpbGVuYW1lUmVmKCBjb25zdCBH
bG9iX3QgKiwgaW50ICk7CmNvbnN0IGNoYXIgKiBJTVBFeHRyYWN0RmlsZW5hbWVSZWYoIGNvbnN0
IGNoYXIgKiwgaW50ICk7CgoKdm9pZCBJTVBTZXRGaWxlbmFtZSggR2xvYl90ICosIGNvbnN0IGNo
YXIgKiApOwpjaGFyICogSU1QU2V0RXh0ZW5zaW9uKCBjb25zdCBjaGFyKiBwc3pGaWxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBzekV4dCAp
OwpjaGFyICogSU1QQWJicmV2aWF0ZVBhdGgoIEdsb2JfdCAqLCBpbnQsIGludCApOwpjb25zdCBj
aGFyICogSU1QU2VhcmNoRmlsZSggY29uc3QgY2hhciAqICk7CgpjaGFyICogSU1QTWFrZVJlbGF0
aXZlUGF0aCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsKY2hhciAqIElNUE1lcmdlUmVs
YXRpdmVQYXRoKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwpUQm9vbCBDQ0xSZWxhdGl2
ZVRlc3QoIHZvaWQgKTsKCgoKCnR5cGVkZWYgc3RydWN0IGxpbmtfdCB7CiAgc3RydWN0IGxpbmtf
dCAqbmV4dDsKICB2b2lkICpvYmplY3Q7Cn0gTGlua190OwoKTGlua190ICogSW5zZXJ0TGluaygg
TGlua190ICosIExpbmtfdCAqICk7CkxpbmtfdCAqIEFkZExpbmsoIExpbmtfdCAqLCBMaW5rX3Qg
KiApOwpMaW5rX3QgKiBDcmVhdGVMaW5rKCB2b2lkICogKTsKTGlua190ICogRmluZExpbmsoIExp
bmtfdCAqLCB2b2lkICogKTsKTGlua190ICogRGVsZXRlTGluayggTGlua190ICosIExpbmtfdCAq
ICk7CkxpbmtfdCAqIFJlbW92ZUxpbmsoIExpbmtfdCAqLCBMaW5rX3QgKiApOwpMaW5rX3QgKiBM
aW5rTiggTGlua190ICosIGludCApOwp2b2lkIERlc3Ryb3lMaXN0KCBMaW5rX3QgKiApOwpMaW5r
X3QgKiBEdXBsaWNhdGVMaXN0KCBMaW5rX3QgKik7CiMgMzEyICIuLi8uLi8uLi9saWIvY2NsY29u
di5oIgp0eXBlZGVmIHN0cnVjdCBDQ0hFbnRyeV90CnsKICAgIHZvaWQgKmhLZXk7CiAgICB2b2lk
ICpwRGF0YTsKfSBDQ0hFbnRyeTsKCnN0cnVjdCBDQ0hDYWNoZV90OwoKdHlwZWRlZiBsb25nICgq
Q0NISGFzaEZ1bmMpKHZvaWQgKik7CnR5cGVkZWYgaW50ICgqQ0NIQ29tcEZ1bmMpKHZvaWQgKiwg
dm9pZCAqKTsKdHlwZWRlZiB2b2lkICgqQ0NIRmx1c2hGdW5jKShzdHJ1Y3QgQ0NIQ2FjaGVfdCAq
LCBDQ0hFbnRyeSAqLCB2b2lkICopOwoKdHlwZWRlZiBzdHJ1Y3QgQ0NIQ2FjaGVfdAp7CiAgICBp
bnQzMiBuT3B0aW9uczsKICAgIGludCBuU2l6ZTsKICAgIGludCBuRW50cmllczsKICAgIHVuc2ln
bmVkIGludCBuU2xvdHM7CiAgICBpbnQgKnBhbkVudHJpZXNJblNsb3Q7CiAgICBDQ0hFbnRyeSAq
KnBhcGFzRW50cmllczsKICAgIENDSEhhc2hGdW5jIHBmbkhhc2g7CiAgICBDQ0hDb21wRnVuYyBw
Zm5Db21wOwogICAgQ0NIRmx1c2hGdW5jIHBmbkZsdXNoOwogICAgdm9pZCAqcEZsdXNoQ0JEYXRh
Owp9IENDSENhY2hlLCAqQ0NISGFuZGxlOwoKQ0NIRW50cnkgKiBDQ0hGaW5kRW50cnkoQ0NISGFu
ZGxlIHBzQ2FjaGUsIHZvaWQgKmhLZXkpOwp2b2lkICogQ0NIRGVsZXRlKENDSEhhbmRsZSBwc0Nh
Y2hlLCB2b2lkICpoS2V5KTsKQ0NISGFuZGxlIENDSENyZWF0ZUNhY2hlKHNpemVfdCBuU2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyIG5PcHRpb25zLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NIRmx1c2hGdW5jIHBmY0ZsdXNoRnVuYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBGbHVzaENCRGF0YSk7CnZvaWQgKiBDQ0hVcGRh
dGUoQ0NISGFuZGxlIHBzQ2FjaGUsIHZvaWQgKmhLZXksIHZvaWQgKnBEYXRhKTsKQ0NIRW50cnkg
KiBDQ0hGaW5kRW50cnkoQ0NISGFuZGxlIHBzQ2FjaGUsIHZvaWQgKmhLZXkpOwp2b2lkICogQ0NI
RGVsZXRlKENDSEhhbmRsZSBwc0NhY2hlLCB2b2lkICpoS2V5KTsKdm9pZCBDQ0hGbHVzaENhY2hl
KENDSEhhbmRsZSBwc0NhY2hlKTsKdm9pZCAqKiBDQ0hHZXRBbGwoQ0NISGFuZGxlIHBzQ2FjaGUp
OwppbnQgQ0NIR2V0TnVtRW50cmllcyhDQ0hIYW5kbGUgcHNDYWNoZSk7CnZvaWQgKiBDQ0hGaW5k
KENDSEhhbmRsZSBwc0NhY2hlLCB2b2lkICpoS2V5KTsKdm9pZCBDQ0hEZWxldGVDYWNoZShDQ0hI
YW5kbGUgcHNDYWNoZSk7CkNDSEVudHJ5ICoqIENDSEdldEFsbEVudHJpZXMoQ0NISGFuZGxlIHBz
Q2FjaGUpOwoKCgoKY2hhciAqIE5MU1RhZ0xvb2t1cCAoY29uc3QgY2hhciogcHN6VGFnICk7CmNo
YXIgKiBOTFNMb29rdXAgKGNvbnN0IGNoYXIqIHBzelN0cmluZyApOwpjaGFyICoqIE5MU0xvb2t1
cFN0cmluZ0xpc3QgKGNoYXIgKiogcGFzelN0cmluZ0xpc3QgKTsKVEJvb2wgTkxTVG9Eb3VibGVC
eXRlIChjb25zdCBjaGFyICosIGNoYXIgKiwgaW50KTsKY2hhciAqIE5MU0RvdWJsZVRvQ29tcG91
bmQoY29uc3QgY2hhciAqcHN6RG91YmxlQnl0ZSwgaW50IG5DaGFyQ291bnQpOwoKVEJvb2wgTkxT
SGFzRG91YmxlIChjb25zdCBjaGFyICopOwpUQm9vbCBOTFNEb3VibGVDaGFySXNOVUxMIChjb25z
dCBjaGFyICopOwp2b2lkIE5MU1NldExvY2FsZSAoY29uc3QgY2hhciAqICk7CnZvaWQgTkxTQ2xl
YXJEYXRhYmFzZSAodm9pZCk7CgoKdm9pZCBOTFNTZXRUZXN0TW9kZShUQm9vbCk7CnZvaWQgTkxT
U2V0TG9nTW9kZShUQm9vbCk7CnZvaWQgTkxTSW5pdCgpOwpUQm9vbCBOTFNJc0xlYWRCeXRlKHVu
c2lnbmVkIGNoYXIpOwpjaGFyICogTkxTTmV4dENoYXIoY2hhciAqKTsKY2hhciAqIE5MU1ByZXZD
aGFyKGNoYXIgKiwgY2hhciAqKTsKaW50IE5MU1N0cmluZ0xlbmd0aChjaGFyICopOwppbnQgTkxT
TWF4Q2hhcldpZHRoKCk7CgoKCgp2b2lkIFBNSW5pdGlhbGl6ZSggVEJvb2wgKTsKdm9pZCBQTVN0
YXJ0VGltaW5nKCBjb25zdCBjaGFyICogKTsKdm9pZCBQTUVuZFRpbWluZyggY29uc3QgY2hhciAq
ICk7CnZvaWQgUE1TdGFydFByb2Nlc3Modm9pZCk7CnZvaWQgUE1FbmRQcm9jZXNzKHZvaWQpOwpj
aGFyICoqUE1HZXRBY3Rpb25zKHZvaWQpOwpkb3VibGUgUE1HZXRBdmVyYWdlQWN0aW9uVGltZSgg
Y29uc3QgY2hhciAqICk7CnZvaWQgUE1EZWJ1Z1JlcG9ydCh2b2lkKTsKaW50IFBNR2V0RXJyb3Jz
KGNvbnN0IGNoYXIgKik7CgoKCgp0eXBlZGVmIGNoYXIgKihJTVBQcm9tcHRFbmNyeXB0S2V5KSgg
dW5zaWduZWQgY2hhciAqcGFieUZpbmdlcnByaW50RW5jcnlwdGVkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHN6RmluZ2VycHJpbnRDbGVhciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzelF1ZXN0aW9u
ICk7Cgp2b2lkIElNUFhvcldpdGhTdHJpbmcoIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgY2hhciAq
LCB1bnNpZ25lZCBjaGFyICosIGludCApOwp2b2lkIElNUEVuY3J5cHRCdWZmZXIoIGNvbnN0IGNo
YXIgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIGludCApOwp2b2lkIElNUERl
Y3J5cHRCdWZmZXIoIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFy
ICosIGludCApOwpjaGFyICpJTVBHZW5lcmF0ZUVuY3J5cHRpb25LZXkoIGludCApOwoKdm9pZCBJ
TVBSZW1lbWJlckVuY3J5cHRLZXkoIGNvbnN0IGNoYXIgKiApOwpjaGFyICoqSU1QUmVjYWxsRW5j
cnlwdEtleXMoIHZvaWQgKTsKY2hhciAqSU1QR2V0TWF0Y2hpbmdLZXkoIHVuc2lnbmVkIGNoYXIg
KnBhYnlGaW5nZXJwcmludEVuY3J5cHRlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpwc3pGaW5nZXJwcmludENsZWFyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzelF1ZXN0aW9uICk7CnZvaWQgSU1QU2V0RW5j
cnlwdEtleVByb21wdGVyKCBJTVBQcm9tcHRFbmNyeXB0S2V5IHBmblByb21wdGVyICk7CmNoYXIg
KklNUFByb21wdFRlcm1FbmNyeXB0S2V5KCB1bnNpZ25lZCBjaGFyICosIGNvbnN0IGNoYXIgKiwg
Y29uc3QgY2hhciAqICk7CgoKCgoKdm9pZCBQcmludEhpc0RhdGEoRklMRSAqZnAsIGNvbnN0IGlu
dCAqYW5IaXNEYXRhLCBpbnQgbkhpc0RhdGFTaXplLAogICAgICAgICAgICAgICAgICBkb3VibGUg
ZGZGaXJzdEJpblZhbHVlLCBkb3VibGUgZGZCaW5TaXplKTsKCnZvaWQgUHJpbnRIaXNBU0NJSShG
SUxFICpmcCwgY29uc3QgaW50ICphbkhpc0RhdGEsIGludCBuSGlzRGF0YVNpemUsCiAgICAgICAg
ICAgICAgICAgICBkb3VibGUgZGZGaXJzdEJpblZhbHVlLCBkb3VibGUgZGZCaW5TaXplLCBpbnQg
bkhpc0NvdW50LAogICAgICAgICAgICAgICAgICAgZG91YmxlIGRmSGlzTWluLCBkb3VibGUgZGZI
aXNNYXgsIGRvdWJsZSBkZkhpc01lYW4sCiAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZIaXNT
dGREZXYsIGRvdWJsZSBkZkhpc01lZGlhbiwgZG91YmxlIGRmQ291bnRNaW4sCiAgICAgICAgICAg
ICAgICAgICBkb3VibGUgZGZDb3VudE1heCwgZG91YmxlIGRmR3JleUxldmVsTWluLAogICAgICAg
ICAgICAgICAgICAgZG91YmxlIGRmR3JleUxldmVsTWF4LCBjb25zdCBjaGFyICpwc3pUaXRsZSwK
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzekxhYmVsWCwgY29uc3QgY2hhciAqcHN6
TGFiZWxZLAogICAgICAgICAgICAgICAgICAgVEJvb2wgYlByaW50U3RhdHMpOwoKdm9pZCBQcmlu
dEhpc1BTKEZJTEUgKmZwLCBjb25zdCBpbnQgKmFuSGlzRGF0YSwgaW50IG5IaXNEYXRhU2l6ZSwK
ICAgICAgICAgICAgICAgIGRvdWJsZSBkZkZpcnN0QmluVmFsdWUsIGRvdWJsZSBkZkJpblNpemUs
IGludCBuSGlzQ291bnQsCiAgICAgICAgICAgICAgICBkb3VibGUgZGZIaXNNaW4sIGRvdWJsZSBk
Zkhpc01heCwgZG91YmxlIGRmSGlzTWVhbiwKICAgICAgICAgICAgICAgIGRvdWJsZSBkZkhpc1N0
ZERldiwgZG91YmxlIGRmSGlzTWVkaWFuLCBkb3VibGUgZGZDb3VudE1pbiwKICAgICAgICAgICAg
ICAgIGRvdWJsZSBkZkNvdW50TWF4LCBkb3VibGUgZGZHcmV5TGV2ZWxNaW4sIGRvdWJsZSBkZkdy
ZXlMZXZlbE1heCwKICAgICAgICAgICAgICAgIGRvdWJsZSBkZlBhZ2VXaWR0aCwgZG91YmxlIGRm
UGFnZUhlaWdodCwgZG91YmxlIGRmV2luZG93V2lkdGgsCiAgICAgICAgICAgICAgICBkb3VibGUg
ZGZXaW5kb3dIZWlnaHQsIGludCBiTGFuZFNjYXBlLCBjb25zdCBjaGFyICpwc3pUaXRsZSwKICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzekxhYmVsWCwgY29uc3QgY2hhciAqcHN6TGFiZWxZ
LAogICAgICAgICAgICAgICAgVEJvb2wgYlByaW50U3RhdHMsIGludCBuTnVtQ29waWVzKTsKCn0K
IyAzMzkgIi4uLy4uLy4uL2xpYi9nZGIuaCIgMgojIDEgIi4uLy4uLy4uL2xpYi9jY2xwcm9qLmgi
IDEKIyAyMSAiLi4vLi4vLi4vbGliL2NjbHByb2ouaCIKZXh0ZXJuICJDIiB7CgoKCgoKCnR5cGVk
ZWYgc3RydWN0IHsKICBjaGFyIFVuaXRzWzIwXTsKICBkb3VibGUgRGVhcnRoWzJdOwogIGRvdWJs
ZSBSZWZMb25nOwogIGRvdWJsZSBSZWZMYXQ7CiAgZG91YmxlIFN0ZFBhcmFsbGVsMTsKICBkb3Vi
bGUgU3RkUGFyYWxsZWwyOwogIGRvdWJsZSBGYWxzZUVhc3Rpbmc7CiAgZG91YmxlIEZhbHNlTm9y
dGhpbmc7CiAgZG91YmxlIFNjYWxlOwogIGRvdWJsZSBIZWlnaHQ7CiAgZG91YmxlIExvbmcxOwog
IGRvdWJsZSBMYXQxOwogIGRvdWJsZSBMb25nMjsKICBkb3VibGUgTGF0MjsKICBkb3VibGUgQXpp
bXV0aDsKICBpbnQgTGFuZHNhdE51bTsKCiAgaW50IExhbmRzYXRQYXRoOwoKICBkb3VibGUgWE9m
ZjsKICBkb3VibGUgWU9mZjsKICBkb3VibGUgWFNpemU7CiAgZG91YmxlIFlTaXplOwoKICBpbnQg
UHJvamVjdGlvbkNvZGU7CiAgaW50IFByb2plY3Rpb25ab25lOwogIGRvdWJsZSBVU0dTUGFybXNb
MTVdOwogIGludCBVbml0c0NvZGU7CiAgaW50IFNwaGVyb2lkOwogIGludCBJRmllbGRzOwoKICBk
b3VibGUgWFJvdDsKICBkb3VibGUgWVJvdDsKCn0gUHJvakluZm9fdDsKIyA3MyAiLi4vLi4vLi4v
bGliL2NjbHByb2ouaCIKdHlwZWRlZiBzdHJ1Y3QgewogIGNoYXIgc3pEYXR1bUNvZGVbNV07CiAg
Y2hhciAqIHBzekRhdHVtTmFtZTsKICBjaGFyICogcHN6RGF0dW1XaGVyZTsKCgoKCiAgY2hhciBz
ekVsbGlwc0NvZGVbNV07CiAgY2hhciAqIHBzekVsbGlwc05hbWU7CiAgZG91YmxlIGRBOwogIGRv
dWJsZSBkQjsKCiAgY2hhciAqIHBzelNoaWZ0RmlsZTE7CiAgY2hhciAqIHBzelNoaWZ0RmlsZTI7
CgoKICBkb3VibGUgZFhPZmZzZXQ7CiAgZG91YmxlIGRZT2Zmc2V0OwogIGRvdWJsZSBkWk9mZnNl
dDsKCgogIGRvdWJsZSBkWFJvdGF0ZTsKICBkb3VibGUgZFlSb3RhdGU7CiAgZG91YmxlIGRaUm90
YXRlOwoKICBkb3VibGUgZFNjYWxlOwoKICBkb3VibGUgZFhTaWdtYTsKICBkb3VibGUgZFlTaWdt
YTsKICBkb3VibGUgZFpTaWdtYTsKCiAgaW50IG5Eb3BwbGVyOwoKCiAgZG91YmxlIGRGbGF0dGVu
aW5nOwojIDExOCAiLi4vLi4vLi4vbGliL2NjbHByb2ouaCIKICBjaGFyICoqcGFzekdyaWRGaWxl
OwoKICB2b2lkICogcHNHRjsKCgoKfSBEYXR1bUluZm9fdDsKCgoKCnR5cGVkZWYgc3RydWN0CnsK
ICBjaGFyIHN6VXNlck5hbWVbMTJdOwogIGNoYXIgc3pQcm9qRGVzY1s4MF07CiAgY2hhciBzelBy
b2pDb3VudHJ5WzgwXTsKICBUQm9vbCBiQ29tbW9uOwoKICBpbnQgblJlYWxUeXBlOwoKICBQcm9q
SW5mb190IHNSZWFsUHJvajsKfSBVc2VyUHJvakluZm9fdDsKIyAxOTYgIi4uLy4uLy4uL2xpYi9j
Y2xwcm9qLmgiClRCb29sIENDTFByb2pUZXN0KCB2b2lkICk7ClRCb29sIENDTFVzZXJQcm9qVGVz
dCggdm9pZCApOwoKaW50IEdDVFBTaW1wbGVUcmFuc2Zvcm0gKCBjaGFyICosIGRvdWJsZSwgZG91
YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGRvdWJsZSAq
LCBkb3VibGUgKiApOwoKaW50IFBDSTJHQ1RQICggUHJvakluZm9fdCAqICk7CnZvaWQgR0NUUDJQ
Q0kgKCBQcm9qSW5mb190ICogKTsKCmludCBHZW9zeXMyUHJvakluZm8gKCBQcm9qSW5mb190ICos
IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUsIGRvdWJsZSwg
ZG91YmxlLCBkb3VibGUgKTsKaW50IEdlb3N5czJQcm9qSW5mbzIgKCBQcm9qSW5mb190ICosIGNo
YXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUsIGRvdWJsZSwgZG91
YmxlLCBkb3VibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlLCBkb3Vi
bGUgKTsKCmludCBHQ1RQVHJhbnNmb3JtICggUHJvakluZm9fdCAqLCBkb3VibGUsIGRvdWJsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvakluZm9fdCAqLCBkb3VibGUgKiwgZG91
YmxlICogKTsKCnZvaWQgSW5pdFByb2pJbmZvICggUHJvakluZm9fdCAqLCBpbnQgKTsKY2hhciAq
IFByb2pJbmZvMlBhcm1zICggUHJvakluZm9fdCAqICk7CmludCBQcm9qUGFybXMySW5mbyAoIGNo
YXIgKiwgUHJvakluZm9fdCAqICk7CmludCBQcm9qSW5mbzJQUk1GaWxlICggUHJvakluZm9fdCAq
ICk7CmludCBQcm9qUFJNRmlsZTJJbmZvICggY2hhciAqLCBQcm9qSW5mb190ICogKTsKaW50IEdl
b3N5c0NvbXBhdGlibGUoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7CmludCBQcm9qQ29t
cGF0aWJsZSggY29uc3QgUHJvakluZm9fdCAqLCBjb25zdCBQcm9qSW5mb190ICogKTsKaW50IERl
Y29kZUdlb3N5cyggY29uc3QgY2hhciAqLCBjaGFyICogKTsKaW50IEdldEVsbGlwc29pZCggY29u
c3QgY2hhciAqICk7CmludCBnZXRfZWxsKCBjaGFyICosIGRvdWJsZSAqLCBkb3VibGUgKiApOwpj
aGFyIGdldF9wcm9qKCBpbnQsIGNoYXIgKiwgY2hhciAqLCBQcm9qSW5mb190ICosIGNoYXIgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJs
ZSApOwpUQm9vbCBHZXRFYXJ0aE1vZGVsKCBjb25zdCBjaGFyICosIGNoYXIgKiApOwpUQm9vbCBH
ZXRFbGxpcHNvaWREYXRhKCBjb25zdCBjaGFyICosIGludCAqLCBkb3VibGUgKiwgZG91YmxlICog
KTsKVEJvb2wgR2V0RWxsaXBzb2lkSW5mbyggY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCAqLCBkb3VibGUgKiwgZG91YmxlICosIGNoYXIgKiogKTsKY2hh
ciAqIEdldEVsbGlwc29pZENvZGUoIGRvdWJsZSwgZG91YmxlICk7ClRCb29sIEdldERhdHVtSW5m
byAoIGNvbnN0IGNoYXIgKiwgRGF0dW1JbmZvX3QgKiApOwpUQm9vbCBHZXREYXR1bUluZm8yICgg
Y29uc3QgY2hhciAqLCBEYXR1bUluZm9fdCAqKiApOwpUQm9vbCBMb25nTGF0UHJvakluZm8oIGNv
bnN0IGNoYXIgKiwgUHJvakluZm9fdCAqLCBQcm9qSW5mb190ICogKTsKaW50IEdlb3N5c0Rlc2Ny
aXB0aW9uKCBpbnQsIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBjaGFyICoqLCBjaGFyICoqICk7ClRC
b29sIElzUHJvamVjdGFibGUoIGNvbnN0IGNoYXIgKiwgY29uc3QgUHJvakluZm9fdCAqICk7ClRC
b29sIFJlcXVpcmVzUHJvakluZm8oIGludCApOwpUQm9vbCBJc0NvbmZvcm1hbCggY29uc3QgY2hh
ciAqICk7CmludCBQcm9qRGVmYXVsdHMoIFByb2pJbmZvX3QgKiwgaW50ICosIGludCAqLCBjaGFy
ICosIFByb2pJbmZvX3QgKiApOwpjaGFyICoqIFByb2pSZXBvcnQoIFByb2pJbmZvX3QgKiApOwpU
Qm9vbCBQcm9qTm9ybWFsaXplKCBQcm9qSW5mb190ICogKTsKVXNlclByb2pJbmZvX3QgKkZpbmRV
c2VyUHJvamVjdGlvbiggY29uc3QgY2hhciAqICk7ClRCb29sIEdldFVzZXJQcm9qZWN0aW9uTmFt
ZSggUHJvakluZm9fdCAqLCBjaGFyICogKTsKdm9pZCBEZWZpbmVVc2VyUHJvamVjdGlvbiggVXNl
clByb2pJbmZvX3QgKiApOwpVc2VyUHJvakluZm9fdCAqKkdldFVzZXJQcm9qZWN0aW9ucyh2b2lk
KTsKCnZvaWQgVVRNWm9uZSAoZG91YmxlLCBkb3VibGUsIGludCAqLCBjaGFyICopOwoKdm9pZCBE
ZWNUb0RNUyAoZG91YmxlLCBpbnQsIGNoYXIgKik7CmludCBETVNUb0RlYyAoY29uc3QgY2hhciAq
LCBkb3VibGUgKik7CnZvaWQgRGVjaW1hbFRvRGVncmVlcyggZG91YmxlLCBjaGFyICosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqLCBpbnQgKiwgaW50ICosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqLCBpbnQsIGNoYXIgKiApOwoKVEJv
b2wgUmVhZEFyY0luZm9Qcm9qZWN0aW9uRmlsZSggY2hhciAqKiwgUHJvakluZm9fdCAqICk7CmNo
YXIgKiogV3JpdGVBcmNJbmZvUHJvamVjdGlvbkZpbGUoIFByb2pJbmZvX3QgKiApOwppbnQgVVNH
U19BcmNJbmZvX1NQQ1Nab25lKCBUQm9vbCwgaW50ICk7CgoKCgoKVEJvb2wgSW52ZXJzZUFmZmlu
ZSggZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwKICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91
YmxlICosIGRvdWJsZSAqKTsKdm9pZCBBcHBseUFmZmluZSggZG91YmxlLCBkb3VibGUsIGRvdWJs
ZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCwgZG91YmxlICosIGRvdWJsZSAqLCBpbnQgKTsKZG91YmxlIEFmZmluZVhTaXplKCBkb3Vi
bGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlICk7CmRvdWJsZSBBZmZp
bmVZU2l6ZSggZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSAp
Owpkb3VibGUgQWZmaW5lUm90YXRpb24oIGRvdWJsZSxkb3VibGUsZG91YmxlLGRvdWJsZSxkb3Vi
bGUsZG91YmxlICk7CgoKCgoKaW50IERhdHVtU2hpZnQgKCBjaGFyICosIGRvdWJsZSwgZG91Ymxl
LCBkb3VibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGRvdWJsZSAq
LCBkb3VibGUgKiwgZG91YmxlICogKTsKCmludCBHb29kZVRyYW5zZm9ybSggUHJvakluZm9fdCAq
LCBpbnQsIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UHJvakluZm9fdCAqLCBkb3VibGUgKiwgZG91YmxlICogKTsKCmludCBDYXNzaW5pVHJhbnNmb3Jt
KCBQcm9qSW5mb190ICosIGludCwgZG91YmxlLCBkb3VibGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFByb2pJbmZvX3QgKiwgZG91YmxlICosIGRvdWJsZSAqICk7CgppbnQg
UlNPVHJhbnNmb3JtKCBQcm9qSW5mb190ICosIGludCwgZG91YmxlLCBkb3VibGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUHJvakluZm9fdCAqLCBkb3VibGUgKiwgZG91YmxlICog
KTsKCmludCBLcm92YWtUcmFuc2Zvcm0oIFByb2pJbmZvX3QgKiwgaW50LCBkb3VibGUsIGRvdWJs
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9qSW5mb190ICosIGRvdWJs
ZSAqLCBkb3VibGUgKiApOwoKaW50IFNHRE9UcmFuc2Zvcm0oIFByb2pJbmZvX3QgKiwgaW50LCBk
b3VibGUsIGRvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvakluZm9f
dCAqLCBkb3VibGUgKiwgZG91YmxlICogKTsKCmludCBMQlNHVHJhbnNmb3JtKCBQcm9qSW5mb190
ICosIGludCwgZG91YmxlLCBkb3VibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFByb2pJbmZvX3QgKiwgZG91YmxlICosIGRvdWJsZSAqICk7CgppbnQgSVNJTlRyYW5zZm9ybSgg
UHJvakluZm9fdCAqLCBpbnQsIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQcm9qSW5mb190ICosIGRvdWJsZSAqLCBkb3VibGUgKiApOwoKVEJvb2wgR2Vv
Y29kZWRUb01HUlMoIFByb2pJbmZvX3QgKiwgZG91YmxlLCBkb3VibGUsIGludCwgY2hhciAqICk7
ClRCb29sIE1HUlNUb0dlb2NvZGVkKCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQcm9qSW5mb190ICosIGRvdWJsZSAqLCBkb3VibGUgKiApOwp2b2lkIEVQ
U0d0b1Byb2pJbmZvKCBjaGFyICosIFByb2pJbmZvX3QgKik7CiMgMzEwICIuLi8uLi8uLi9saWIv
Y2NscHJvai5oIgp2b2lkIHByal9zaW5jb3MgKCBkb3VibGUsIGRvdWJsZSAqLCBkb3VibGUgKiAp
Owpkb3VibGUgYXNpbnogKCBkb3VibGUgKTsKZG91YmxlIG1zZm56ICggZG91YmxlLCBkb3VibGUs
IGRvdWJsZSApOwpkb3VibGUgcXNmbnogKCBkb3VibGUsIGRvdWJsZSwgZG91YmxlICk7CmRvdWJs
ZSBwaGkxeiAoIGRvdWJsZSwgZG91YmxlLCBsb25nICogKTsKZG91YmxlIHBoaTJ6ICggZG91Ymxl
LCBkb3VibGUsIGxvbmcgKiApOwpkb3VibGUgcGhpM3ogKCBkb3VibGUsIGRvdWJsZSwgZG91Ymxl
LCBkb3VibGUsIGRvdWJsZSwgbG9uZyAqICk7CmRvdWJsZSBwaGk0eiAoIGRvdWJsZSwgZG91Ymxl
LCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJs
ZSwgZG91YmxlLCBkb3VibGUgKiwgZG91YmxlICogKTsKZG91YmxlIHBha2N6ICggZG91YmxlICk7
CmRvdWJsZSBwYWtyMmRtICggZG91YmxlICk7CmRvdWJsZSB0c2ZueiAoIGRvdWJsZSwgZG91Ymxl
LCBkb3VibGUgKTsKaW50IHByal9zaWduICggZG91YmxlICk7CmRvdWJsZSBhZGp1c3RfbG9uICgg
ZG91YmxlICk7CmRvdWJsZSBlMGZuICggZG91YmxlICk7CmRvdWJsZSBlMWZuICggZG91YmxlICk7
CmRvdWJsZSBlMmZuICggZG91YmxlICk7CmRvdWJsZSBlM2ZuICggZG91YmxlICk7CmRvdWJsZSBl
NGZuICggZG91YmxlICk7CmRvdWJsZSBtbGZuICggZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91
YmxlLCBkb3VibGUgKTsKaW50IGNhbGNfdXRtX3pvbmUgKCBkb3VibGUgKTsKIyAzNTYgIi4uLy4u
Ly4uL2xpYi9jY2xwcm9qLmgiClRCb29sIENDTFRyYW5zZm9ybVRlc3QoIHZvaWQgKTsKIyAzNjYg
Ii4uLy4uLy4uL2xpYi9jY2xwcm9qLmgiCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCBwYng7CiAg
ICBpbnQgcGJ5OwogICAgZG91YmxlIHJieFsyMV07CiAgICBkb3VibGUgcmJ5WzIxXTsKICAgIGRv
dWJsZSByYWJ4WzNdOwogICAgZG91YmxlIHJhYnlbM107Cn0gR0VPSW5mb190OwoKCgoKdm9pZCBH
Q1BMaXN0IChpbnQsIGludCAqLCBpbnQgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwK
ICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwgaW50LCBkb3VibGUgKiwg
ZG91YmxlICosIGRvdWJsZSAqICk7CnZvaWQgR0NQUm9vdE1lYW5TcSAoIEdFT0luZm9fdCAqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAq
LCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBkb3VibGUgKiwg
ZG91YmxlICopOwp2b2lkIEdDUFRyYW5zZm9ybSAoIEdFT0luZm9fdCAqLCBkb3VibGUsIGRvdWJs
ZSwgZG91YmxlICosIGRvdWJsZSAqKTsKdm9pZCBHQ1BSZWdyZXNzaW9uICggR0VPSW5mb190ICos
IGRvdWJsZSAqLCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl
ICosIGRvdWJsZSAqLCBpbnQsIGludCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgKiwgZG91YmxlICopOwp2b2lkIEdDUFJlZ3Jlc3Npb24yICggR0VPSW5mb190ICosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgZG91YmxlICosIGRvdWJsZSAqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGRvdWJsZSAqLCBkb3VibGUgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQgKiwgaW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICopOwp2b2lkIEdDUFJlZ3Jlc3Np
b24yV2l0aFdvcnN0UG9pbnQgKCBHRU9JbmZvX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqLCBkb3VibGUgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQsIGludCAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSAqLCBkb3VibGUgKiwgaW50ICosIGRvdWJsZSAqLCBkb3VibGUgKik7CgoKCgoKCnR5cGVk
ZWYgc3RydWN0IHsKICAgIGludCBSYWRpYWxUZXJtQ291bnQ7CiAgICBkb3VibGUgQ1BJWFs0KjI1
Nl07CiAgICBkb3VibGUgQ1BJWVs0KjI1Nl07CiAgICBkb3VibGUgQ29lZmZYWzQqMjU2ICszXTsK
ICAgIGRvdWJsZSBDb2VmZllbNCoyNTYgKzNdOwogICAgZG91YmxlIEFmZmluZVhbM107CiAgICBk
b3VibGUgQWZmaW5lWVszXTsKICAgIGludCBSYW5rT2ZBOwogICAgZG91YmxlIENvbmROdW1PZkE7
Cn0gVFBTSW5mb190OwoKdm9pZCBUUFNDYWxjdWxhdGUgKFRQU0luZm9fdCAqdHBzLCBpbnQgbmNw
LCBkb3VibGUgKnJpeCwgZG91YmxlICpyaXksCiAgICAgICAgICAgICAgICAgICBkb3VibGUgKnJv
dSwgZG91YmxlICpyb3YpOwoKdm9pZCBUUFNUcmFuc2Zvcm0gKFRQU0luZm9fdCAqdHBzLCBkb3Vi
bGUgcml4LCBkb3VibGUgcml5LAogICAgICAgICAgICAgICAgICAgZG91YmxlICpyb3UsIGRvdWJs
ZSAqcm92KTsKCnZvaWQgVFBTUk1TRXJyb3IgKFRQU0luZm9fdCAqdHBzLCBpbnQgbmNoa3AsCiAg
ICAgICAgICAgICAgICAgIGRvdWJsZSAqY2hrcGl4LCBkb3VibGUgKmNoa3BpeSwKICAgICAgICAg
ICAgICAgICAgZG91YmxlICpjaGtwb3UsIGRvdWJsZSAqY2hrcG92LAogICAgICAgICAgICAgICAg
ICBkb3VibGUgKmF2eCwgZG91YmxlICphdnksIGRvdWJsZSAqcm1zeCwgZG91YmxlICpybXN5KTsK
CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBkb3VibGUgZGZYT2ZmLCBkZllPZmYsIGRmWFNpemUs
IGRmWVNpemU7CiAgICBUQm9vbCBiUmVwcm9qZWN0OwogICAgUHJvakluZm9fdCBzVmVjUHJvajsK
ICAgIFByb2pJbmZvX3Qgc0ltZ1Byb2o7Cn0gVlRyYW5JbmZvOwoKVEJvb2wgVlRyYW5TZXR1cCgg
UHJvakluZm9fdCAqIHBzSW1nUHJvaiwgUHJvakluZm9fdCAqIHBzVmVjUHJvaiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZUcmFuSW5mbyAqIHBzVlRyYW4gKTsKCnZvaWQgVlRyYW5Ub1Bp
eGVsKCB2b2lkICosIGRvdWJsZSwgZG91YmxlLCBkb3VibGUgKiwgZG91YmxlICogKTsKdm9pZCBW
VHJhbkZyb21QaXhlbCggdm9pZCAqLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlICosIGRvdWJsZSAq
ICk7CgoKCgp2b2lkIGRkY29tcGMoaW50LCBkb3VibGUgKiwgaW50ICosIGludCAqKTsKdm9pZCBk
c29sdmMoaW50LCBkb3VibGUgKiwgaW50ICosIGRvdWJsZSAqKTsKdm9pZCBkcXJsc2MoZG91Ymxl
ICosIGludCwgaW50LCBkb3VibGUsIGludCAqLCBkb3VibGUgKiwgZG91YmxlICosCiAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgKiwgaW50ICosIGRvdWJsZSAqLCBkb3VibGUgKiwgaW50LCBp
bnQgKik7CiMgNDYxICIuLi8uLi8uLi9saWIvY2NscHJvai5oIgp0eXBlZGVmIHN0cnVjdCB7CiAg
aW50IG5UeXBlOwogIFRCb29sIGJWYWxpZDsKCiAgdW5pb24gewogICAgR0VPSW5mb190ICpwc0dF
TzsKICAgIFRQU0luZm9fdCAqcHNUUFM7CgogICAgdm9pZCAqcHNSVENTOwogICAgdm9pZCAqcHNT
UklUOwoKICB9IHU7Cn0gVFJOSW5mb190OwoKClRSTkluZm9fdCAqIFRSTkFsbG9jYXRlKCBpbnQg
KTsKdm9pZCBUUk5EZWFsbG9jYXRlKCBUUk5JbmZvX3QgKiApOwp2b2lkIFRSTkNhbGN1bGF0ZSgg
VFJOSW5mb190ICosIGludCwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIHZvaWQgKiApOwp2b2lkIFRSTkNhbGN1bGF0
ZTNEKCBUUk5JbmZvX3QgKiwgaW50LCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICos
IHZvaWQgKiApOwpUQm9vbCBUUk5UcmFuc2Zvcm0oIFRSTkluZm9fdCAqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb3VibGUsIGRvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG91YmxlICosIGRvdWJsZSAqKTsKVEJvb2wgVFJOVHJhbnNmb3JtM0QoIFRSTkluZm9f
dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSwgZG91YmxlLCBkb3Vi
bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqLCBk
b3VibGUgKik7CnZvaWQgVFJOUk1TRXJyb3IoIFRSTkluZm9fdCAqLCBpbnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICos
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqICk7Cgp2b2lk
IFRSTlJNU0Vycm9yM0QoIFRSTkluZm9fdCAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICos
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICogKTsKCmRv
dWJsZSBQQUsyUENJKCBkb3VibGUgZGVnLCBpbnQgZnVuY3Rpb24gKTsKCn0KIyAzNDAgIi4uLy4u
Ly4uL2xpYi9nZGIuaCIgMgoKCmV4dGVybiAiQyIgewojIDM3OCAiLi4vLi4vLi4vbGliL2dkYi5o
Igp0eXBlZGVmIGludDMyIEdEQlNoYXBlSWQ7CiMgMzg3ICIuLi8uLi8uLi9saWIvZ2RiLmgiCnR5
cGVkZWYgZW51bSBHREJMYXllclR5cGVfZQp7CiAgICBHREJMVW5rbm93bj0wLAogICAgR0RCTFRv
cG9BcmMsCiAgICBHREJMVG9wb0FyZWEsCiAgICBHREJMVG9wb05vZGUsCiAgICBHREJMV2hvbGVQ
b2x5Z29uLAogICAgR0RCTFBvaW50LAogICAgR0RCTExpbmUsCiAgICBHREJMVGFibGUKfSBHREJM
YXllclR5cGU7CgoKCgoKc3RydWN0IEdEQkxheWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewoKICBj
aGFyIFVuaXRzWzIwXTsKCgogIGludCBOU3RydWN0dXJlOwogIGludCBOVmVydGV4OwogIGRvdWJs
ZSBYU3RhcnQ7CiAgZG91YmxlIFlTdGFydDsKICBkb3VibGUgWEVuZDsKICBkb3VibGUgWUVuZDsK
ICBkb3VibGUgc2NhbGU7CgoKICBGSUxFICpmcDsKICBpbnQgc2VnOwogIGludCBsYXN0X3N0cnVj
dCwKICAgICAgICAgICAgbmV4dF9zdHJ1Y3QsCgogICAgICAgICAgICBidWZmZXJbMTI4XTsKICBs
b25nIGxhc3RfYmxvY2s7CgogICAgc3RydWN0IEdEQkxheWVyX3QgKmhMYXllcjsKfSBWSW5mb190
OwoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQgYWNjZXNzOwogIEZJTEUgKmZwOwogIGludCBz
ZWdudW07CiAgRklMRSAqdGV4dF9mcDsKCgogIGNoYXIgKmNiX2J1ZmZlcjsKICBpbnQgY2hhcl9v
ZmZzZXQ7CiAgaW50IHNlZ19vZmZzZXQ7Cn0gVEluZm9fdDsKIyA0NTkgIi4uLy4uLy4uL2xpYi9n
ZGIuaCIKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IFNsYW50UmFuZ2VGc3RQaXhlbDsKICAgIGlu
dCBTbGFudFJhbmdlTGFzdFBpeGVsOwogICAgZmxvYXQgRnN0UGl4ZWxMYXQ7CiAgICBmbG9hdCBN
aWRQaXhlbExhdDsKICAgIGZsb2F0IExzdFBpeGVsTGF0OwogICAgZmxvYXQgRnN0UGl4ZWxMb25n
OwogICAgZmxvYXQgTWlkUGl4ZWxMb25nOwogICAgZmxvYXQgTHN0UGl4ZWxMb25nOwp9IEFuY2ls
bGFyeURhdGFfdDsKCnR5cGVkZWYgc3RydWN0CnsKICAgIGNoYXIgSWRlbnRpZmllclsxN107CiAg
ICBjaGFyIEZhY2lsaXR5WzE3XTsKICAgIGNoYXIgRWxsaXBzb2lkWzE3XTsKICAgIGRvdWJsZSBF
cXVhdG9yaWFsUmFkaXVzOwogICAgZG91YmxlIFBvbGFyUmFkaXVzOwogICAgZG91YmxlIEluY2lk
ZW5jZUFuZ2xlOwogICAgZG91YmxlIFBpeGVsU3BhY2luZzsKICAgIGRvdWJsZSBMaW5lU3BhY2lu
ZzsKICAgIGRvdWJsZSBDbG9ja0FuZ2xlOwoKICAgIGludCBOdW1iZXJCbG9ja0RhdGE7CiAgICBp
bnQzMiBOdW1iZXJEYXRhOwoKICAgIEFuY2lsbGFyeURhdGFfdCAqTGluZTsKfSBSYWRhclNlZ190
OwojIDQ5NSAiLi4vLi4vLi4vbGliL2dkYi5oIgp0eXBlZGVmIHN0cnVjdAp7CiAgICBkb3VibGUg
Q2hhbmdlSW5BdHRpdHVkZTsKICAgIGRvdWJsZSBDaGFuZ2VFYXJ0aFNhdGVsbGl0ZURpc3Q7Cgp9
IEF0dGl0dWRlTGluZV90OwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgZG91YmxlIFJvbGw7CiAgICBk
b3VibGUgUGl0Y2g7CiAgICBkb3VibGUgWWF3OwogICAgaW50MzIgTnVtYmVyT2ZMaW5lOwoKICAg
IGludCBOdW1iZXJCbG9ja0RhdGE7CiAgICBBdHRpdHVkZUxpbmVfdCAqTGluZTsKCn0gQXR0aXR1
ZGVTZWdfdDsKCgoKCgoKCnR5cGVkZWYgc3RydWN0CnsKCiAgICBpbnQgblNjYW5MaW5lTnVtOwog
ICAgaW50IG5TdGFydFNjYW5UaW1lR01UTXNlYzsKICAgIHVuc2lnbmVkIGNoYXIgYWJ5U2Nhbkxp
bmVRdWFsaXR5WzEwXTsKICAgIHVuc2lnbmVkIGNoYXIgYWFieUJhZEJhbmRJbmRpY2F0b3JzWzVd
WzJdOwogICAgdW5zaWduZWQgY2hhciBhYnlTYXRlbGxpdGVUaW1lQ29kZVs4XTsKCgogICAgaW50
IGFuVGFyZ2V0VGVtcERhdGFbM107CiAgICBpbnQgYW5UYXJnZXRTY2FuRGF0YVszXTsKICAgIGlu
dCBhblNwYWNlU2NhbkRhdGFbNV07Cgp9IEF2aHJyTGluZV90OwoKdHlwZWRlZiBzdHJ1Y3QKewoK
ICAgIGNoYXIgc3pJbWFnZUZvcm1hdFs1MF07CiAgICBpbnQgbkltYWdlWFNpemU7CiAgICBpbnQg
bkltYWdlWVNpemU7CiAgICBUQm9vbCBiSXNBc2NlbmRpbmc7CiAgICBUQm9vbCBiSXNJbWFnZVJv
dGF0ZWQ7CgoKICAgIGNoYXIgc3pPcmJpdE51bWJlclsxN107CiAgICBjaGFyIHN6QXNjZW5kRGVz
Y2VuZE5vZGVGbGFnWzE3XTsKICAgIGNoYXIgc3pFcG9jaFllYXJBbmREYXlbMTddOwogICAgY2hh
ciBzekVwb2NoVGltZVdpdGhpbkRheVsxN107CiAgICBjaGFyIHN6VGltZURpZmZTdGF0aW9uU2F0
ZWxsaXRlTXNlY1sxN107CiAgICBjaGFyIHN6QWN0dWFsU2Vuc29yU2NhblJhdGVbMTddOwogICAg
Y2hhciBzeklkZW50T2ZPcmJpdEluZm9Tb3VyY2VbMTddOwogICAgY2hhciBzekludGVybmF0aW9u
YWxEZXNpZ25hdG9yWzE3XTsKICAgIGNoYXIgc3pPcmJpdE51bUF0RXBvY2hbMTddOwogICAgY2hh
ciBzekp1bGlhbkRheUFzY2VuZE5vZGVbMTddOwogICAgY2hhciBzekVwb2NoWWVhclsxN107CiAg
ICBjaGFyIHN6RXBvY2hNb250aFsxN107CiAgICBjaGFyIHN6RXBvY2hEYXlbMTddOwogICAgY2hh
ciBzekVwb2NoSG91clsxN107CiAgICBjaGFyIHN6RXBvY2hNaW51dGVbMTddOwogICAgY2hhciBz
ekVwb2NoU2Vjb25kWzE3XTsKICAgIGNoYXIgc3pQb2ludE9mQXJpZXNEZWdyZWVzWzE3XTsKICAg
IGNoYXIgc3pBbm9tYWxpc3RpY1BlcmlvZFsxN107CiAgICBjaGFyIHN6Tm9kYWxQZXJpb2RbMTdd
OwogICAgY2hhciBzekVjY2VudHJpY2l0eVsxN107CiAgICBjaGFyIHN6QXJndW1lbnRPZlBlcmln
ZWVbMTddOwogICAgY2hhciBzelJBQU5bMTddOwogICAgY2hhciBzekluY2xpbmF0aW9uWzE3XTsK
ICAgIGNoYXIgc3pNZWFuQW5vbWFseVsxN107CiAgICBjaGFyIHN6U2VtaU1ham9yQXhpc1sxN107
CgoKCgogICAgaW50IG5SZWNvcmRTaXplOwogICAgaW50IG5CbG9ja1NpemU7CiAgICBpbnQgbk51
bVJlY29yZHNQZXJCbG9jazsKICAgIGludCBuTnVtQmxvY2tzOwogICAgaW50IG5OdW1TY2FubGlu
ZVJlY29yZHM7CgoKICAgIEF2aHJyTGluZV90ICpMaW5lOwoKfSBBdmhyclNlZ190OwoKCgoKCnR5
cGVkZWYgdW5pb24KewogICBBdHRpdHVkZVNlZ190ICpBdHRpdHVkZVNlZzsKICAgUmFkYXJTZWdf
dCAqUmFkYXJTZWc7CiAgIEF2aHJyU2VnX3QgKkF2aHJyU2VnOwoKfSBPcmJpdERhdGFfdDsKCnR5
cGVkZWYgZW51bSB7IE9yYk5vbmUsIE9yYkF0dGl0dWRlLCBPcmJMYXRMb25nLCBPcmJBdmhyciB9
IE9yYml0VHlwZTsKdHlwZWRlZiBzdHJ1Y3QKewogICAgY2hhciBTYXRlbGxpdGVEZXNjWzMzXTsK
ICAgIGNoYXIgU2NlbmVJRFszM107CgogICAgY2hhciBTYXRlbGxpdGVTZW5zb3JbMTddOwogICAg
Y2hhciBTZW5zb3JOb1szXTsKICAgIGNoYXIgRGF0ZUltYWdlVGFrZW5bMjNdOwogICAgVEJvb2wg
U3VwU2VnRXhpc3Q7CiAgICBkb3VibGUgRmllbGRPZlZpZXc7CiAgICBkb3VibGUgVmlld0FuZ2xl
OwogICAgZG91YmxlIE51bUNvbENlbnRyZTsKICAgIGRvdWJsZSBSYWRpYWxTcGVlZDsKICAgIGRv
dWJsZSBFY2NlbnRyaWNpdHk7CiAgICBkb3VibGUgSGVpZ2h0OwogICAgZG91YmxlIEluY2xpbmF0
aW9uOwogICAgZG91YmxlIFRpbWVJbnRlcnZhbDsKICAgIGRvdWJsZSBOdW1MaW5lQ2VudHJlOwog
ICAgZG91YmxlIExvbmdDZW50cmU7CiAgICBkb3VibGUgQW5ndWxhclNwZDsKICAgIGRvdWJsZSBB
c2NOb2RlTG9uZzsKICAgIGRvdWJsZSBBcmdQZXJpZ2VlOwogICAgZG91YmxlIExhdENlbnRyZTsK
ICAgIGRvdWJsZSBFYXJ0aFNhdGVsbGl0ZURpc3Q7CiAgICBkb3VibGUgTm9taW5hbFBpdGNoOwog
ICAgZG91YmxlIFRpbWVBdENlbnRyZTsKICAgIGRvdWJsZSBTYXRlbGxpdGVBcmc7CgogICAgZG91
YmxlIFhDZW50cmU7CiAgICBkb3VibGUgWUNlbnRyZTsKICAgIGRvdWJsZSBVdG1ZQ2VudHJlOwog
ICAgZG91YmxlIFV0bVhDZW50cmU7CiAgICBkb3VibGUgUGl4ZWxSZXM7CiAgICBkb3VibGUgTGlu
ZVJlczsKICAgIFRCb29sIENvcm5lckF2YWlsOwogICAgY2hhciBNYXBVbml0WzE3XTsKICAgIGRv
dWJsZSBYVUw7CiAgICBkb3VibGUgWVVMOwogICAgZG91YmxlIFhVUjsKICAgIGRvdWJsZSBZVVI7
CiAgICBkb3VibGUgWExSOwogICAgZG91YmxlIFlMUjsKICAgIGRvdWJsZSBYTEw7CiAgICBkb3Vi
bGUgWUxMOwogICAgZG91YmxlIFV0bVlVTDsKICAgIGRvdWJsZSBVdG1YVUw7CiAgICBkb3VibGUg
VXRtWVVSOwogICAgZG91YmxlIFV0bVhVUjsKICAgIGRvdWJsZSBVdG1ZTFI7CiAgICBkb3VibGUg
VXRtWExSOwogICAgZG91YmxlIFV0bVlMTDsKICAgIGRvdWJsZSBVdG1YTEw7CgogICAgZG91Ymxl
IExhdENlbnRyZURlZzsKICAgIGRvdWJsZSBMb25nQ2VudHJlRGVnOwogICAgZG91YmxlIExhdFVM
OwogICAgZG91YmxlIExvbmdVTDsKICAgIGRvdWJsZSBMYXRVUjsKICAgIGRvdWJsZSBMb25nVVI7
CiAgICBkb3VibGUgTGF0TFI7CiAgICBkb3VibGUgTG9uZ0xSOwogICAgZG91YmxlIExhdExMOwog
ICAgZG91YmxlIExvbmdMTDsKCiAgICBkb3VibGUgU1BDb2VmZjFCWzM5XTsKICAgIGludCBTUENv
ZWZmU2dbNF07CgogICAgaW50IEltYWdlUmVjb3JkTGVuZ3RoOwogICAgaW50IE51bWJlckltYWdl
TGluZTsKICAgIGludCBOdW1iZXJCeXRlUGVyUGl4ZWw7CiAgICBpbnQgTnVtYmVyU2FtcGxlUGVy
TGluZTsKICAgIGludCBOdW1iZXJQcmVmaXhCeXRlczsKICAgIGludCBOdW1iZXJTdWZmaXhCeXRl
czsKICAgIGludCBTUE5Db2VmZjsKCiAgICBPcmJpdFR5cGUgVHlwZTsKICAgIE9yYml0RGF0YV90
ICpPcmJpdExpbmU7Cgp9IEVwaGVtZXJpc1NlZ190OwojIDY5MSAiLi4vLi4vLi4vbGliL2dkYi5o
Igp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgZG91YmxlIE4weDI7CiAgICAgICAgZG91YmxlIGFh
OwogICAgICAgIGRvdWJsZSBTbUFMUEhBOwogICAgICAgIGRvdWJsZSBiYjsKICAgICAgICBkb3Vi
bGUgQzA7CiAgICAgICAgZG91YmxlIGNjOwogICAgICAgIGRvdWJsZSBDT1NfS0hJOwogICAgICAg
IGRvdWJsZSBERUxUQV9HQU1NQTsKICAgICAgICBkb3VibGUgR0FNTUE7CiAgICAgICAgZG91Ymxl
IEtfMTsKICAgICAgICBkb3VibGUgTDA7CiAgICAgICAgZG91YmxlIFA7CiAgICAgICAgZG91Ymxl
IFE7CiAgICAgICAgZG91YmxlIFRBVTsKICAgICAgICBkb3VibGUgVEhFVEE7CiAgICAgICAgZG91
YmxlIFRIRVRBX1NFQzsKICAgICAgICBkb3VibGUgWDA7CiAgICAgICAgZG91YmxlIFkwOwogICAg
ICAgIGRvdWJsZSBkZWxoOwogICAgICAgIGRvdWJsZSBDT0VGX1kyOwogICAgICAgIGludCBuR0NQ
Q291bnQ7CiAgICAgICAgaW50IG5FcGhlbWVyaXNTZWdObzsKICAgICAgICBpbnQgbkF0dGl0dWRl
RmxhZzsKICAgICAgICBjaGFyIEdDUFVuaXRbMTddOwogICAgICAgIGNoYXIgR0NQTWVhbkh0Rmxh
ZzsKICAgICAgICBkb3VibGUgZGZHQ1BNZWFuSHQ7CiAgICAgICAgZG91YmxlIGRmR0NQTWluSHQ7
CiAgICAgICAgZG91YmxlIGRmR0NQTWF4SHQ7CiAgICAgICAgaW50IG5HQ1BJZHNbMjU2XTsKICAg
ICAgICBpbnQgblBpeGVsWzI1Nl0sbkxpbmVbMjU2XTsKICAgICAgICBkb3VibGUgZGZFbGV2WzI1
Nl07CiAgICAgICAgZG91YmxlICpRZGVsdGFyOwogICAgICAgIGRvdWJsZSAqSGRlbHRhdDsKICAg
ICAgICBjaGFyIFNlbnNvclsxNl07CiAgICAgICAgaW50IG5TZW5zb3I7CiAgICAgICAgRXBoZW1l
cmlzU2VnX3QgKk9yYml0UHRyOwogICAgICAgIFByb2pJbmZvX3QgKnNHZW9UcmFuc2Zvcm07CiAg
ICAgICAgVEJvb2wgUmF3VG9HZW87Cn0gU1JJVEluZm9fdDsKCgoKCnR5cGVkZWYgc3RydWN0IHsK
ICAgIFRCb29sIGJOSVRGUlBDOwogICAgaW50IG5Db2VmZjsKICAgIGludCBuUGl4ZWxzLCBuTGlu
ZXM7CiAgICBkb3VibGUgKnBhZGZQaXhlbE51bTsKICAgIGRvdWJsZSAqcGFkZlBpeGVsRGVuOwog
ICAgZG91YmxlICpwYWRmTGluZU51bTsKICAgIGRvdWJsZSAqcGFkZkxpbmVEZW47CiAgICBkb3Vi
bGUgZGZYT2ZmLCBkZlhTY2FsZTsKICAgIGRvdWJsZSBkZllPZmYsIGRmWVNjYWxlOwogICAgZG91
YmxlIGRmWk9mZiwgZGZaU2NhbGU7CiAgICBkb3VibGUgZGZQT2ZmLCBkZlBTY2FsZTsKICAgIGRv
dWJsZSBkZkxPZmYsIGRmTFNjYWxlOwogICAgZG91YmxlIGRmWEFkanVzdFszXTsKICAgIGRvdWJs
ZSBkZllBZGp1c3RbM107CiAgICBjaGFyICptYXB1bml0OwogICAgUHJvakluZm9fdCAqc1Byb2pl
Y3Rpb247Cn0gUkZJbmZvX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgblBpeGVsczsK
ICAgIGludCBuTGluZXM7CiAgICBkb3VibGUgZGZmb2NhbDsKICAgIGRvdWJsZSBhZGZYWVpbM107
CiAgICBkb3VibGUgYWRmT1BLWzNdOwogICAgZG91YmxlIGFkZngzZFszXTsKICAgIGRvdWJsZSBh
ZGZ5M2RbM107CiAgICBkb3VibGUgYWRmejNkWzNdOwogICAgZG91YmxlIGFkZnBpeDJtbVs0XTsK
ICAgIGRvdWJsZSBhZGZsaW4ybW1bNF07CiAgICBkb3VibGUgYWRmbW0ycGl4WzRdOwogICAgZG91
YmxlIGFkZm1tMmxpbls0XTsKICAgIGRvdWJsZSBhZGZQcm9mZlsyXTsKICAgIGRvdWJsZSBhZGZS
YWRpc3RbOF07CiAgICBkb3VibGUgYWRmRGVjZW50WzRdOwogICAgZG91YmxlIGRmUmFkaXVzOwog
ICAgZG91YmxlIGRmcmZmOwogICAgZG91YmxlIGRmR0NQTWluSHQ7CiAgICBkb3VibGUgZGZHQ1BN
YXhIdDsKICAgIFRCb29sIGJQcmluT2ZmOwogICAgVEJvb2wgYkRpc3RvcnQ7CiAgICBUQm9vbCBi
RGVjZW50ZXI7CiAgICBUQm9vbCBiUmFkaXVzOwogICAgY2hhciAqdXRtdW5pdDsKICAgIGNoYXIg
Km1hcHVuaXQ7CiAgICBQcm9qSW5mb190ICpzUHJvamVjdGlvbjsKfSBBUEluZm9fdDsKCgoKCnR5
cGVkZWYgc3RydWN0IHsKICAgIEZJTEUgKmZwX2luOwogICAgRklMRSAqZnBfb3V0OwoKICAgIGNo
YXIgKnBzekZpbGVPcHRpb25zOwoKICAgIGNoYXIgc3pGaWxlVHlwZVsxNl07CgogICAgaW50ICpw
YW5JVzsKCiAgICBpbnQgKmFwYW5JQ1s0XTsKICAgIGludCBwYW5Db3VudElDWzRdOwoKICAgIGlu
dCAqcGFuR0VPOwogICAgaW50IG5Db3VudEdFTzsKCiAgICBpbnQgKnBhbkxVVDsKICAgIGludCBu
Q291bnRMVVQ7CgogICAgaW50ICpwYW5CSVQ7CiAgICBpbnQgbkNvdW50QklUOwoKICAgIGludCAq
cGFuVkVDOwogICAgaW50IG5Db3VudFZFQzsKCiAgICBpbnQgKnBhbk9SQjsKICAgIGludCBuQ291
bnRPUkI7CgogICAgaW50ICpwYW5TSUc7CiAgICBpbnQgbkNvdW50U0lHOwoKICAgIGludCAqcGFu
VEVYOwogICAgaW50IG5Db3VudFRFWDsKCiAgICBpbnQgKnBhblBDVDsKICAgIGludCBuQ291bnRQ
Q1Q7CgogICAgaW50ICpwYW5CSU47CiAgICBpbnQgbkNvdW50QklOOwoKICAgIGludCAqcGFuR0NQ
OwogICAgaW50IG5Db3VudEdDUDsKICAgIGludCBuT3V0cHV0Rm9ybWF0VHlwZTsKICAgIFRCb29s
IGJDbGlwVmVjdG9yczsKICAgIFRCb29sIGJDbGlwR0NQczsKCn0gRmlsZVRyYW5zZmVyX3Q7CgoK
CgoKdm9pZCBDbGVhckZpbGVUcmFuc2ZlclN0cnVjdChGaWxlVHJhbnNmZXJfdCAqcHNGVCk7Cgp2
b2lkIEFsbG9jYXRlQ2hhbm5lbExpc3QoaW50ICpwYW5Db3VudElDLGludCAqYXBhbklDWzRdLAog
ICAgICAgICAgICAgICAgICAgICAgaW50ICpuTnVtQ2hhbixpbnQgKipwYW5EQklDLGludCAqKnBh
bkRCT0MpOwoKdm9pZCBEZWFsbG9jYXRlQ2hhbm5lbExpc3QoaW50ICoqcGFuREJJQyxpbnQgKipw
YW5EQk9DKTsKCgp2b2lkIFRyYW5zZmVySW1hZ2VyeShGSUxFICpmcF9pbixGSUxFICpmcF9vdXQs
aW50IG5PdXRwdXRGb3JtYXRUeXBlLAogICAgICAgICAgICAgICAgICAgICBpbnQgbkNvdW50SUMs
aW50ICpwYW5JQyxpbnQgKnBhbklXLGludCAqcGFuREJPQywKICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqcHN6RGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgIFBDSUNvdW50ZXIgcGZu
Q291bnRlciApOwoKdm9pZCBUcmFuc2ZlckJpdE1hcHMoRklMRSogZnBfaW4sRklMRSogZnBfb3V0
LAogICAgICAgICAgICAgICAgICAgICBpbnQgbk91dHB1dEZvcm1hdFR5cGUsaW50IG5Db3VudEJJ
VCwKICAgICAgICAgICAgICAgICAgICAgaW50ICpwYW5CSVQsaW50ICpwYW5JVywKICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqcHN6RGVzY3JpcHRpb24sUENJQ291bnRlciBwZm5Db3VudGVyKTsK
CnZvaWQgVHJhbnNmZXJWZWN0b3JzKEZJTEUgKmZwX2luLEZJTEUgKmZwX291dCxpbnQgbk91dHB1
dEZvcm1hdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgIGludCBuQ291bnRWRUMsaW50ICpwYW5W
RUMsaW50ICpwYW5JVyxUQm9vbCBiQ2xpcCwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHN6
RGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgIFBDSUNvdW50ZXIgcGZuQ291bnRlcik7
Cgp2b2lkIFRyYW5zZmVyR0NQcyhGSUxFICpmcF9pbixGSUxFICpmcF9vdXQsaW50IG5PdXRwdXRG
b3JtYXRUeXBlLAogICAgICAgICAgICAgICAgICBpbnQgbkNvdW50R0NQLGludCAqcGFuR0NQLGlu
dCAqcGFuSVcsCiAgICAgICAgICAgICAgICAgIGNoYXIgKnBzekRlc2NyaXB0aW9uKTsKCnZvaWQg
VHJhbnNmZXJURVhzKEZJTEUgKmZwX2luLEZJTEUgKmZwX291dCxpbnQgbk91dHB1dEZvcm1hdFR5
cGUsCiAgICAgICAgICAgICAgICAgIGludCBuQ291bnRURVgsaW50ICpwYW5URVgsaW50ICpwYW5J
VywKICAgICAgICAgICAgICAgICAgY2hhciAqcHN6RGVzY3JpcHRpb24pOwoKdm9pZCBUcmFuc2Zl
ckJJTnMoRklMRSAqZnBfaW4sRklMRSAqZnBfb3V0LGludCBuT3V0cHV0Rm9ybWF0VHlwZSwKICAg
ICAgICAgICAgICAgICAgaW50IG5Db3VudEJJTixpbnQgKnBhbkJJTixpbnQgKnBhbklXLAogICAg
ICAgICAgICAgICAgICBjaGFyICpwc3pEZXNjcmlwdGlvbik7Cgp2b2lkIFRyYW5zZmVyUENUcyhG
SUxFICpmcF9pbixGSUxFICpmcF9vdXQsaW50IG5PdXRwdXRGb3JtYXRUeXBlLAogICAgICAgICAg
ICAgICAgICBpbnQgbkNvdW50UENULGludCAqcGFuUENULAogICAgICAgICAgICAgICAgICBjaGFy
ICpwc3pEZXNjcmlwdGlvbik7Cgp2b2lkIFRyYW5zZmVyTFVUcyhGSUxFICpmcF9pbixGSUxFICpm
cF9vdXQsaW50IG5PdXRwdXRGb3JtYXRUeXBlLAogICAgICAgICAgICAgICAgICBpbnQgbkNvdW50
TFVULGludCAqcGFuTFVULAogICAgICAgICAgICAgICAgICBjaGFyICpwc3pEZXNjcmlwdGlvbik7
Cgp2b2lkIFRyYW5zZmVyU0lHcyhGSUxFICpmcF9pbixGSUxFICpmcF9vdXQsaW50IG5PdXRwdXRG
b3JtYXRUeXBlLAogICAgICAgICAgICAgICAgICBpbnQgbkNvdW50U0lHLGludCAqcGFuU0lHLGlu
dCAqcGFuSVcsCiAgICAgICAgICAgICAgICAgIGNoYXIgKnBzekRlc2NyaXB0aW9uKTsKCnZvaWQg
VHJhbnNmZXJPUkJzKEZJTEUgKmZwX2luLEZJTEUgKmZwX291dCxpbnQgbk91dHB1dEZvcm1hdFR5
cGUsCiAgICAgICAgICAgICAgICAgIGludCBuQ291bnRPUkIsaW50ICpwYW5PUkIsaW50ICpwYW5J
VywKICAgICAgICAgICAgICAgICAgY2hhciAqcHN6RGVzY3JpcHRpb24pOwoKdm9pZCBVcGRhdGVD
aGFubmVsSGlzdG9yeShGSUxFICpmcF9pbixGSUxFICpmcF9vdXQsaW50IG5Db3VudElDLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCAqcGFuSUMsaW50ICpwYW5EQk9DLGNoYXIgKnBzekRl
c2NyaXB0aW9uKTsKCnZvaWQgVXBkYXRlU2VnbWVudEhpc3RvcnkoRklMRSAqZnBfaW4sRklMRSAq
ZnBfb3V0LGludCBuQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpwYW5JblNl
ZyxpbnQgKnBhbk91dFNlZyxjaGFyICpwc3pEZXNjcmlwdGlvbik7CgoKCgoKdHlwZWRlZiBzdHJ1
Y3QKewogIGludCBUeXBlOwogIGNoYXIgKk5hbWU7CiAgdW5zaWduZWQgY2hhciAqRGF0YUNhY2hl
OwogIGludCBDYWNoZVNpemU7CiAgY2hhciAqKkRpckVudHJ5OwogIGludCBEaXJFbnRyaWVzOwog
IEZJTEUgKmZwOwogIGludCBmcFByaXZhdGU7Cn0gR0RCVGVzdEluZm9fdDsKCnR5cGVkZWYgR0RC
VGVzdEluZm9fdCBHREJUZXN0SW5mbzsKCnR5cGVkZWYgc3RydWN0CnsKICAgIGRvdWJsZSB4Owog
ICAgZG91YmxlIHk7Cn0gR0RCVmVydGV4MkQ7CgoKZXh0ZXJuIEdEQlZlcnRleCBnc0dEQlZlcnRl
eE1pbjsKZXh0ZXJuIEdEQlZlcnRleCBnc0dEQlZlcnRleE1heDsKZXh0ZXJuIEdEQlZlcnRleCBn
c0dEQlZlcnRleFplcm87CgoKdHlwZWRlZiB1aW50MzIgR0RCRmxhZ3M7CnR5cGVkZWYgdWludDMy
IEdEQkhpbnRzOwoKCgoKCgp0eXBlZGVmIHVuaW9uCnsKICBmbG9hdCBmRmxvYXQ7CiAgZG91Ymxl
IGREb3VibGU7CiAgY2hhciAqcHN6U3RyaW5nOwogIGludDMyIG5JbnRlZ2VyOwogIGludDMyICpw
YW5JbnRzOwp9IEdEQkZpZWxkLCAqR0RCUmVjb3JkOwoKdHlwZWRlZiBpbnQgR0RCRmllbGRUeXBl
OwojIDk1OCAiLi4vLi4vLi4vbGliL2dkYi5oIgp0eXBlZGVmIHN0cnVjdAp7CiAgICBjaGFyICpw
c3pOYW1lOwogICAgY2hhciAqcHN6RGVzYzsKICAgIEdEQkZpZWxkVHlwZSBlVHlwZTsKICAgIEdE
QkZpZWxkIHVEZWZhdWx0OwogICAgY2hhciAqcHN6Rm9ybWF0Owp9IEdEQkRlZm47CgoKCgoKdHlw
ZWRlZiBpbnQgR0RCQW5nbGVVbml0OwojIDk4MyAiLi4vLi4vLi4vbGliL2dkYi5oIgpzdHJ1Y3Qg
R0RCR3JvdXBJbmRleF90OwpzdHJ1Y3QgR0RCSW5mb19zOwpzdHJ1Y3QgR0RCUVQ7CnN0cnVjdCBH
REJUb3BvSW5mb190OwoKc3RydWN0IEdEQkxheWVyX3QKewogICAgc3RydWN0IEdEQkluZm9fcyAq
cHNNZXRob2RzOwogICAgdm9pZCAqcE5hdGl2ZUluZm87CiAgICBGSUxFICpmcDsKICAgIGludCBu
U2VnbWVudDsKICAgIGNoYXIgKnBzek5hbWU7CiAgICBjaGFyICpwc3pEZXNjOwoKCgogICAgR0RC
RmxhZ3MgZkZsYWdzOwoKCgogICAgaW50IG5GaWVsZHM7CiAgICBHREJEZWZuICpwYXNEZWZuOwoK
CgogICAgQ0NISGFuZGxlIGhNb2RDYWNoZTsKICAgIENDSEhhbmRsZSBoUmVhZENhY2hlOwogICAg
Q0NISGFuZGxlIGhEZWxldGVkQ2FjaGU7CiAgICBpbnQgbk1vZENhY2hlT3B0aW9uczsKICAgIGlu
dCBuUmVhZENhY2hlT3B0aW9uczsKICAgIGludCBuUmVhZENhY2hlU2l6ZTsKICAgIGludCBuTW9k
Q2FjaGVTaXplOwoKCgogICAgVEJvb2wgYk5vQ2FjaGU7CiAgICBUQm9vbCBiMkQ7CgoKCiAgICBU
Qm9vbCBiRXh0ZW50c0RpcnR5OwogICAgR0RCVmVydGV4IHNNaW47CiAgICBHREJWZXJ0ZXggc01h
eDsKCgoKICAgIGludCBpUmVwQ29kZUZpZWxkOwogICAgaW50IGlHcm91cElkRmllbGQ7CiAgICBp
bnQgaUNoaWxkTGlzdEZpZWxkOwogICAgaW50IGlUZXh0RmllbGQ7CiAgICBpbnQgaUFuZ2xlRmll
bGQ7CiAgICBpbnQgaUhlaWdodEZpZWxkOwoKCgoKICAgIEdEQkFuZ2xlVW5pdCBlQW5nbGVVbml0
OwoKCgoKICAgIHN0cnVjdCBHREJHcm91cEluZGV4X3QgKmhHcm91cEluZGV4OwoKCgogICAgc3Ry
dWN0IEdEQlFUICpwc1F1YWRUcmVlOwoKCgoKICAgIGludCBuU2hhcGVDb3VudDsKICAgIGludCBi
U2hhcGVDb3VudFZhbGlkOwoKICAgIGludCBuUG9pbnRzQ291bnQ7CiAgICBpbnQgbkxpbmVzQ291
bnQ7CiAgICBpbnQgbkFyZWFzQ291bnQ7CiAgICBUQm9vbCBiU2hhcGVzQ291bnRUeXBlVmFsaWQ7
CgoKCgogICAgc3RydWN0IEdEQlRvcG9JbmZvX3QgKnBzVG9wbzsKCiAgICBpbnQgaVhDb29yZEZp
ZWxkOwogICAgaW50IGlZQ29vcmRGaWVsZDsKCgoKCiAgICBHREJTaGFwZUlkICpwYWhTZWxlY3Rl
ZElkczsKICAgIGludCBuU2VsZWN0ZWRDb3VudDsKICAgIGludCBuTG9ja2VkU2VsZWN0aW9uQ291
bnQ7CgogICAgVEJvb2wgYlN5bmNpbmc7CgogICAgc3RydWN0IEdEQlZlY1VuZG9MZXZlbF90ICpw
c1ZVTDsKICAgIHZvaWQgKnBKT0xUVmVjdG9yTGF5ZXI7CgoKCgogICAgaW50IGlSaW5nU3RhcnRG
aWVsZDsKfTsKCnR5cGVkZWYgc3RydWN0IEdEQkxheWVyX3QgKiBHREJMYXllcjsKCnR5cGVkZWYg
c3RydWN0IHsKICAgIHZvaWQgKm5vdGhpbmc7Cn0gR0RCUnN0OwoKdHlwZWRlZiBzdHJ1Y3Qgewog
ICAgZG91YmxlIGRmQm91bmRhcnk7CiAgICBkb3VibGUgZGZWYWx1ZTsKfSBHREJCcmVha1BvaW50
TFVUX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBkb3VibGUgZGZCb3VuZGFyeTsKICAgIHVuc2ln
bmVkIGNoYXIgblJlZDsKICAgIHVuc2lnbmVkIGNoYXIgbkdyZWVuOwogICAgdW5zaWduZWQgY2hh
ciBuQmx1ZTsKfSBHREJCcmVha1BvaW50UENUX3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBHREJW
ZXJ0ZXggKnBhc1ZlcnRpY2VzOwogICAgaW50IG5Db3VudDsKICAgIEdEQkZpZWxkICpwYXNGaWVs
ZHM7Cn0gR0RCU2hhcGU7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBHREJWZXJ0ZXggKnBhc1ZlcnRp
Y2VzOwogICAgaW50IG5Db3VudDsKICAgIEdEQkZpZWxkICogcGFzRmllbGRzOwogICAgR0RCRGVm
biAqcGFzRGVmbjsKICAgIGludCBuRmllbGRzOwp9IEdEQkZhdFNoYXBlOwoKCgoKCnR5cGVkZWYg
c3RydWN0IEdEQkNhcHNfdAp7CgoKCiAgICBUQm9vbCBiSGFzVmVydGljZXM7CiAgICBUQm9vbCBi
VmVydGljZXNPbmx5OwoKCgogICAgVEJvb2wgYkhhc0F0dHJpYnV0ZXM7CiAgICBUQm9vbCBiQXR0
cmlidXRlc09ubHk7CgoKCgoKCiAgICBUQm9vbCBiQWRkRmllbGQ7CgoKCgoKCiAgICBUQm9vbCBi
QWRkUmFuZEZpZWxkOwoKCgoKICAgIFRCb29sIGJDYW5DcmVhdGU7CgoKCgogICAgVEJvb2wgYkNh
bk1vZGlmeTsKCgoKCgoKICAgIFRCb29sIGJSYW5kb21VcGRhdGU7CgoKCgoKCiAgICBUQm9vbCBi
Q3JlYXRlTGF5ZXJzOwoKCgoKCiAgICBpbnQgbk1heExheWVyczsKCgoKCiAgICBUQm9vbCBiRGVs
ZXRlTGF5ZXJzOwoKCgoKCgogICAgVEJvb2wgYkNhbkNyZWF0ZUxheWVyc0F0QW55VGltZTsKCgoK
CiAgICBUQm9vbCBiSGFzRmxvYXRzOwogICAgVEJvb2wgYkhhc0ludHM7CiAgICBUQm9vbCBiSGFz
RG91YmxlczsKICAgIFRCb29sIGJIYXNDaGFyOwogICAgVEJvb2wgYkhhc0ludExpc3Q7CgoKCgoK
ICAgIFRCb29sIGJOZWVkc0V4dGVudHM7CgoKCgoKICAgIFRCb29sIGJOZWVkc051bWJlckVudGl0
aWVzUGVyTGF5ZXI7CgoKCgoKICAgIFRCb29sIGJOYXRpdmVMYXllclJldHVybnNDb3B5OwoKCgoK
CgogICAgR0RCRGVmbiAqKnBhcGFzRGVmbjsKCgoKCiAgICBUQm9vbCBiQ2FuUmVhZFJlcFRhYmxl
OwogICAgVEJvb2wgYkNhbldyaXRlUmVwVGFibGU7CiAgICBUQm9vbCBiQ2FuV3JpdGVSZXBUYWJs
ZUxvc3NsZXNzbHk7CiMgMTI0NCAiLi4vLi4vLi4vbGliL2dkYi5oIgogICAgVEJvb2wgYkhpZGVG
cm9tVXNlcjsKICAgIFRCb29sIGJIaWRlRnJvbVVzZXJJbkZpbGVTZWxlY3RvcjsKCgoKCgogICAg
VEJvb2wgYlNwYXRpYWxRdWVyeTsKICAgIFRCb29sIGJBdHRyaWJ1dGVRdWVyeTsKCgoKCiAgICBU
Qm9vbCBiVXNlcnNQYXNzd29yZDsKCgoKCiAgICBUQm9vbCBiQ2Fubm90Q3JlYXRlUnN0OwoKfSBH
REJDYXBhYmlsaXRpZXM7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogIEZJTEUgKmZwU3JjOwogIGlu
dCBuREJJQzsKCiAgaW50IG5UYXJnZXRDaGFuOwoKICBUQm9vbCBiQ2xlYW47CiAgVEJvb2wgYlVz
ZUZvckhpc3RvZ3JhbTsKCiAgZG91YmxlIGRmUmVzRmFjdG9yOwp9IEdEQk92ZXJ2aWV3SW5mb190
OwoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIEZJTEUgKmZwU3JjOwogICAgaW50IG5MYXllclR5
cGU7CiAgICBpbnQgblNyY0xheWVyOwogICAgaW50ICpwYW5EQklXOwoKICAgIGludCBuRHN0TGF5
ZXI7CgogICAgaW50IG5PcHRpb25zOwoKICAgIFRCb29sIGJDbGlwR2VvOwogICAgZG91YmxlIGRm
Q2xpcFhPZmY7CiAgICBkb3VibGUgZGZDbGlwWU9mZjsKICAgIGRvdWJsZSBkZkNsaXBYU2l6ZTsK
ICAgIGRvdWJsZSBkZkNsaXBZU2l6ZTsKCiAgICB1bmlvbgogICAgewogICAgICAgIHN0cnVjdAog
ICAgICAgIHsKICAgICAgICAgICAgVEJvb2wgKCpwZm5Qcm9jV2l0aElkKShzdHJ1Y3QgR0RCTGF5
ZXJfdCosIEdEQlNoYXBlSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgR0RCU2hhcGUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdEQkxheWVyLCBHREJTaGFwZSAqLCBUQm9vbCwgVEJvb2wgKik7CiAgICAgICAgICAgIHZv
aWQgKCpwZm5NYXBwaW5nRnVuYykoR0RCTGF5ZXIsIEdEQkxheWVyLCBpbnQgKik7CiAgICAgICAg
ICAgIHZvaWQgKCpwZm5Db3B5TGF5ZXJTdHJ1Y3QpKEdEQkxheWVyLCBHREJMYXllcik7CiAgICAg
ICAgfSBzVk9wdDsKCiAgICAgICAgc3RydWN0CiAgICAgICAgewogICAgICAgICAgICB2b2lkICgq
cGZuUHJvY2Vzc1RpbGUpKCBpbnQsIGludCwgaW50LCBpbnQsIHZvaWQgKiApOwogICAgICAgIH0g
c0lPcHQ7CiAgICB9IHU7Cn0gR0RCVHJhbnNmZXJMYXllckluZm87Cgp0eXBlZGVmIHN0cnVjdCB7
CiAgICBGSUxFICpmcERzdDsKICAgIGludCBuRHN0Q3JlYXRlVHlwZTsKICAgIGNoYXIgKnBzekRz
dENyZWF0ZU9wdGlvbnM7CiAgICBjaGFyICpwc3pEc3RDcmVhdGVGaWxlbmFtZTsKCiAgICBjaGFy
ICpwc3pQcm9jZXNzSW5nOwogICAgY2hhciAqcHN6UHJvY2Vzc0VkOwoKICAgIGludCBuT3B0aW9u
czsKCiAgICBpbnQgKnBhbkRCT1c7CgogICAgSU1QUHJvZ3Jlc3NGdW5jIHBmblByb2dyZXNzOwog
ICAgdm9pZCAqcFByb2dyZXNzQXJnOwoKICAgIGludCBuTGF5ZXJzOwogICAgR0RCVHJhbnNmZXJM
YXllckluZm8gKipwYXBzTGF5ZXJzOwoKfSBHREJUcmFuc2ZlckluZm87CgpHREJUcmFuc2Zlcklu
Zm8gKiBHREJDcmVhdGVUcmFuc2Zlciggdm9pZCApOwp2b2lkIEdEQkRlc3Ryb3lUcmFuc2Zlcigg
R0RCVHJhbnNmZXJJbmZvICogKTsKR0RCVHJhbnNmZXJMYXllckluZm8gKgogICAgICAgIEdEQkFk
ZFRyYW5zZmVyTGF5ZXIoIEdEQlRyYW5zZmVySW5mbyAqLCBGSUxFICosIGludCwgaW50LCBpbnQg
KiwgaW50ICk7CgpUQm9vbCBHREJUcmFuc2ZlckxheWVycyggR0RCVHJhbnNmZXJJbmZvICogKTsK
IyAxMzYzICIuLi8uLi8uLi9saWIvZ2RiLmgiCnR5cGVkZWYgZW51bSB7CiAgR0RCU0FsbCwKICBH
REJTTmVhcmVzdCwKICBHREJTTmVhcmVzdFdpdGhEaXN0YW5jZSwKICBHREJTUG9seWdvbnNJbnNp
ZGUsCiAgR0RCU1JhZGl1cywKICBHREJTUmVjdCwKICBHREJTSW5zaWRlUG9seSwKICBHREJTQ3V0
UG9seSwKICBHREJTT3V0c2lkZVBvbHksCiAgR0RCU0F0dHJpYnV0ZSwKICBHREJTSW5jbHVzaXZl
LAogIEdEQlNOZWFyZXN0Tm90SW5MaXN0LAogIEdEQlNOZWFyZXN0M0QsCiAgR0RCU05lYXJlc3RO
b3RJbkxpc3QzRCwKICBHREJTUmVwcm9qZWN0UmVjdCwKICBHREJTUmVwcm9qZWN0TmVhcmVzdCwK
ICBHREJTUmFkaXVzTmVhcmVzdCwKICBHREJTUmFkaXVzTm90SW5MaXN0LAogIEdEQlNQcm9wZXJs
eUluc2lkZVBvbHkKCgp9IEdEQlNlYXJjaFR5cGU7CgoKCgp0eXBlZGVmIHN0cnVjdCBHREJJbmZv
X3MKewogICAgdm9pZCAoKlNpemVJbmZvKSAoIEZJTEUgKiwgaW50ICosIGludCAqLCBpbnQgKiAp
OwogICAgaW50ICgqQ2hhblhTaXplKSAoIEZJTEUgKiApOwogICAgaW50ICgqQ2hhbllTaXplKSAo
IEZJTEUgKiApOwogICAgaW50ICgqQ2hhbk51bSkgKCBGSUxFICogKTsKICAgIGludCAoKkNoYW5U
eXBlKSAoIEZJTEUgKiwgaW50ICk7CiAgICB2b2lkICgqQnl0ZUNoYW5JTykgKCBGSUxFICosIGlu
dCwgaW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQgKiApOwogICAgdm9pZCAo
KkludENoYW5JTykgKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgKiwgaW50LCBpbnQsIGludCwgaW50
ICogKTsKICAgIHZvaWQgKCpSZWFsQ2hhbklPKSAoIEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAqLCBp
bnQsIGludCwgaW50LCBpbnQgKiApOwogICAgRklMRSAqKCpDcmVhdGUpICggY2hhciAqLCBpbnQs
IGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBj
aGFyICogKTsKICAgIGludCAoKkdlb3JlZklPKSAoIEZJTEUgKiwgaW50LCBjaGFyICosIGRvdWJs
ZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICosIGRv
dWJsZSAqLCBkb3VibGUgKiApOwogICAgaW50ICgqR2VvcmVmSU8yKSAoIEZJTEUgKiwgaW50LCBj
aGFyICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICopOwogICAgaW50ICgqSGludCkgKCBGSUxF
ICogKTsKICAgIGludCAoKkNoYW5EZXNjSU8pICggRklMRSAqLCBpbnQsIGludCwgY2hhciAqICk7
CiAgICB2b2lkICgqQ2xvc2UpICggRklMRSAqICk7CiAgICBGSUxFICooKk9wZW4pICggY2hhciAq
LCBjaGFyICogKTsKICAgIEZJTEUgKigqUmVvcGVuKSAoIEZJTEUgKiApOwogICAgbG9uZyAoKkZp
bGVBdHRyaWJ1dGUpICggdm9pZCApOwogICAgbG9uZyBEZWZhdWx0QXR0cmlidXRlOwogICAgdm9p
ZCAoKkZpbGVEZXNjKSAoIEZJTEUgKiApOwogICAgdm9pZCAoKlNlZ0Rlc2NJTykgKCBGSUxFICos
IGludCwgaW50LCBpbnQsIGNoYXIgKiApOwogICAgdm9pZCAoKlZlY3RvckluZm8pICggRklMRSAq
LCBpbnQsIGludCwgVkluZm9fdCAqICk7CiAgICBpbnQgKCpWZWN0b3JJTykgKCBWSW5mb190ICos
IGludCwgaW50LCBpbnQsIGludCAqLCBpbnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludDMyICosIGludDMyICosIGRvdWJsZSAqKiwgZG91YmxlICosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKTsKICAgIGludCAoKlNlZ05l
eHQpICggRklMRSAqLCBpbnQsIGludCApOwogICAgaW50ICgqR2V0Q2hhbkluZm8pICggRklMRSAq
LCBpbnQsIGNoYXIgKiwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9uZyAqLCBsb25nICosIGxvbmcgKiwgaW50ICogKTsKICAgIHZvaWQgKCpQY3RJTykgKCBG
SUxFICosIGludCwgaW50LCB1bnNpZ25lZCBjaGFyICogKTsKICAgIHZvaWQgKCpCcmVha1BvaW50
UGN0SU8pICggRklMRSAqLCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICBpbnQgKiwgaW50
ICosIEdEQkJyZWFrUG9pbnRQQ1RfdCAqKik7CiAgICB2b2lkICgqTHV0SU8pICggRklMRSAqLCBp
bnQsIGludCwgdW5zaWduZWQgY2hhciAqICk7CiAgICB2b2lkICgqQnJlYWtQb2ludEx1dElPKSAo
IEZJTEUgKiwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgaW50ICosIGludCAqLCBHREJC
cmVha1BvaW50TFVUX3QgKiogKTsKICAgIHZvaWQgKCpCaXRtYXBJTykgKCBGSUxFICosIGludCwg
aW50LCBpbnQsIGludCwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyICosIGludCwgaW50ICk7CiAgICBpbnQgKCpUZXN0T3BlbikgKCBHREJU
ZXN0SW5mb190ICogKTsKICAgIHZvaWQgKCpUZXh0QWNjZXNzKSAoIEZJTEUgKiwgVEluZm9fdCAq
LCBjaGFyICosIGludCApOwogICAgaW50ICgqVGV4dFJlYWQpICggVEluZm9fdCAqLCBjaGFyICos
IGludCApOwogICAgdm9pZCAoKlRleHRXcml0ZSkgKCBUSW5mb190ICosIGNoYXIgKiApOwogICAg
dm9pZCAoKlN5bmMpICggRklMRSAqICk7CiAgICB2b2lkICgqRmlsZURlc2NJTykgKCBGSUxFICos
IGludCwgaW50LCBjaGFyICogKTsKICAgIGludCAoKlByb2plY3Rpb25JTykgKCBGSUxFICosIGlu
dCwgUHJvakluZm9fdCAqICk7CiAgICBjaGFyIFNob3J0TmFtZVs1XTsKICAgIGNoYXIgRXh0ZW5z
aW9uWzRdOwogICAgY2hhciAqTG9uZ05hbWU7CiAgICBpbnQgcGFkZGluZ1s4XTsKICAgIGludCAo
Kk1lbUNoYW5JbmZvKSAoIEZJTEUgKiwgaW50LCB1bnNpZ25lZCBjaGFyICoqLCBsb25nICosIGxv
bmcgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqICk7CiAgICB2b2lk
ICgqR2NwSU8pICggRklMRSAqLCBpbnQsIGludCwgaW50ICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGludCAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKiwg
ZG91YmxlICogKTsKCgogICAgR0RCTGF5ZXIgKCpHZXRMYXllcikgKEZJTEUgKiwgaW50KTsKICAg
IEdEQkxheWVyICgqQ3JlYXRlTGF5ZXIpIChGSUxFICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh
ciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICopOwogICAg
dm9pZCAoKkRlbGV0ZUxheWVyKSAoRklMRSAqLCBpbnQpOwoKICAgIGludCAoKkdldFByb2plY3Rp
b25JbmZvKSAoR0RCTGF5ZXIgLCBQcm9qSW5mb190ICopOwogICAgdm9pZCAoKlNldFByb2plY3Rp
b25JbmZvKSAoR0RCTGF5ZXIgLCBQcm9qSW5mb190ICopOwoKICAgIEdEQlNoYXBlSWQgKCpHZXRO
ZXh0U2hhcGVJZCkoR0RCTGF5ZXIgLCBHREJTaGFwZUlkKTsKICAgIHZvaWQgKCpEZWxldGVTaGFw
ZSkgKEdEQkxheWVyICwgR0RCU2hhcGVJZCk7CiAgICBHREJTaGFwZUlkICgqQ3JlYXRlU2hhcGUp
IChHREJMYXllciAsIEdEQlNoYXBlSWQpOwoKICAgIEdEQlZlcnRleCAqKCpHZXRWZXJ0aWNlcykg
KEdEQkxheWVyICxHREJTaGFwZUlkLCBpbnQgKik7CiAgICB2b2lkICgqU2V0VmVydGljZXMpIChH
REJMYXllciAsR0RCU2hhcGVJZCwgaW50LEdEQlZlcnRleCAqKTsKCiAgICBHREJGaWVsZCAqICgq
R2V0UmVjb3JkKSAoR0RCTGF5ZXIsIEdEQlNoYXBlSWQpOwogICAgdm9pZCAoKlNldFJlY29yZCkg
KEdEQkxheWVyLCBHREJTaGFwZUlkLCBHREJGaWVsZCAqKTsKCiAgICBHREJTaGFwZSAqKCpHZXRT
aGFwZSkgKEdEQkxheWVyICwgR0RCU2hhcGVJZCk7CiAgICB2b2lkICgqU2V0U2hhcGUpIChHREJM
YXllciAsIEdEQlNoYXBlSWQsIEdEQlNoYXBlICopOwoKICAgIFRCb29sICgqQWRkRmllbGQpIChH
REJMYXllciwgY2hhciAqLCBHREJGaWVsZFR5cGUsIEdEQkZpZWxkICopOwogICAgVEJvb2wgKCpE
ZWxldGVGaWVsZCkgKEdEQkxheWVyICwgY2hhciAqKTsKCiAgICB2b2lkICooKkdldFJzdCkgKEdE
QkxheWVyKTsKICAgIHZvaWQgKCpTZXRSc3QpIChHREJMYXllciwgdm9pZCAqKTsKICAgIFRCb29s
ICgqQ2xlYXJMYXllcikgKEdEQkxheWVyKTsKICAgIFRCb29sICgqU2V0VXBkYXRlTW9kZSkgKEdE
QkxheWVyLCBUQm9vbCk7CgogICAgR0RCQ2FwYWJpbGl0aWVzIHNDYXBhYmlsaXRpZXM7CgogICAg
Y2hhciAqKigqTWV0YURhdGFJTykgKEZJTEUgKiwgaW50LCBpbnQsIGludCwgY2hhciAqKik7Cgog
ICAgVEJvb2wgKCpDb3B5VG9wb0xheWVycykoRklMRSAqLCBHREJMYXllciwgR0RCTGF5ZXIqLCBj
b25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJMYXllciwg
R0RCTGF5ZXIqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHREJMYXllciwgR0RCTGF5ZXIqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQQ0lDb3VudGVyKTsKCiAgICB2b2lkICgqV3JpdGVIaXN0b3J5KSAoRklM
RSAqLCBpbnQsIGludCwgY29uc3QgY2hhciAqKTsKICAgIGNvbnN0IGNoYXIgKigqUmVhZEhpc3Rv
cnkpIChGSUxFICosIGludCwgaW50LCBpbnQpOwoKICAgIHZvaWQgKCpDb21wcmVzcykgKEZJTEUg
Kik7CiAgICB2b2lkICgqQ2hhbkFkZCkgKEZJTEUgKiwgaW50LCBpbnQsIFBDSUNvdW50ZXIpOwog
ICAgdm9pZCAoKkNoYW5EZWxldGUpIChGSUxFICosIGludCwgaW50ICosIFBDSUNvdW50ZXIpOwog
ICAgdm9pZCAoKkJ1aWxkT3ZlcnZpZXdzKShGSUxFICosIGludCwgaW50ICosIGludCwgVEJvb2ws
IGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUFByb2dy
ZXNzRnVuYywgdm9pZCAqICk7CiAgICBUQm9vbCAoKkdldFRpbGVJbmZvKSAoRklMRSAqLCBpbnQs
IGludCAqLCBpbnQgKik7CgogICAgR0RCT3ZlcnZpZXdJbmZvX3QgKigqR2V0T3ZlcnZpZXdzKShG
SUxFICosIGludCAqICk7CgogICAgdm9pZCAoKkRlbGV0ZSkgKCBjaGFyICogKTsKICAgIHZvaWQg
KCpTYXRFcGhlbWVyaXNJTykgKEZJTEUgKiwgaW50LCBpbnQsIEVwaGVtZXJpc1NlZ190ICopOwog
ICAgdm9pZCAoKkJpbmFyeUlPKSAoRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIHVuc2lnbmVk
IGNoYXIgKik7CiAgICBpbnQgKCpHZXRCaW5hcnlMZW5ndGgpIChGSUxFICosIGludCk7CiAgICBp
bnQgKCpTZWdDcmVhdGUpIChGSUxFICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQg
KTsKICAgIHZvaWQgKCpBcnJheUlPKSAoRklMRSAqLCBpbnQsIGludCwgaW50ICosIGludCAqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqKixjaGFyKik7CgogICAg
R0RCU2hhcGVJZCAqKCpTcGF0aWFsUXVlcnkpIChHREJMYXllciwgaW50ICosIEdEQlNoYXBlSWQg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgR0RCU2VhcmNoVHlw
ZSwgdmFfbGlzdCk7CiAgICBjaGFyICoqKCpMYXllckxpc3QpIChGSUxFICosIFRCb29sKTsKICAg
IEdEQlNoYXBlSWQgKigqQXR0cmlidXRlUXVlcnkpIChHREJMYXllciwgaW50ICosIEdEQlNoYXBl
SWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgY29uc3QgY2hh
ciAqKTsKICAgIGNoYXIgKiooKkxpc3ROYW1lcykgKGNvbnN0IGNoYXIgKiwgaW50KTsKICAgIGNo
YXIgKiooKkxpc3RGaWVsZE5hbWVzKSAoY29uc3QgY2hhciAqKTsKCiAgICBUQm9vbCAoKkF1dG9T
ZXRDaGFuUElEKSggRklMRSogZnAsIGludCwgdWludDMyICogKTsKICAgIFRCb29sICgqR2V0Q2hh
blBJRCkoIEZJTEUqIGZwLCBpbnQsIHVpbnQzMiAqICk7CiAgICBpbnQgKCpGaW5kQ2hhbkZyb21Q
SUQpKCBGSUxFKiBmcCwgdWludDMyICk7CgogICAgY2hhciAqKiggKkdldFZhbGlkRmllbGRWYWx1
ZXMpICggR0RCTGF5ZXIsaW50ICk7Cgp9IEdEQkluZm9fdDsKCgoKCnN0cnVjdCBHREJHcm91cF90
CnsKICAgIGludCBpR3JvdXBJZDsKICAgIGludCBuRW50aXRpZXM7CiAgICBHREJTaGFwZUlkICpw
YWhFbnRpdGllczsKfTsKCnR5cGVkZWYgc3RydWN0IEdEQkdyb3VwX3QgKkdEQkdyb3VwOwoKc3Ry
dWN0IEdEQkdyb3VwSW5kZXhfdAp7CiAgICBHREJMYXllciBoTGF5ZXI7CiAgICBpbnQgbkdyb3Vw
czsKICAgIGludCBuQWxsb2NhdGVkR3JvdXBzOwogICAgR0RCR3JvdXAgcGFzR3JvdXBzOwogICAg
aW50IG5OZXh0VW51c2VkR3JvdXBJZDsKfTsKCnR5cGVkZWYgc3RydWN0IEdEQkdyb3VwSW5kZXhf
dCAqR0RCR3JvdXBJbmRleDsKCgoKCnR5cGVkZWYgc3RydWN0IEdRTgp7CiAgICBzdHJ1Y3QgR1FO
ICpwc1BhcmVudDsKICAgIHN0cnVjdCBHUU4gKmFwc05vZGVzWzRdOwogICAgR0RCVmVydGV4IHNN
aW47CiAgICBHREJWZXJ0ZXggc01heDsKICAgIGludCBuU2hhcGVzOwogICAgaW50IG5DYXBhY2l0
eTsKICAgIEdEQlNoYXBlSWQgKnBhaFNoYXBlSWRzOwogICAgaW50IGlJbmRleDsKfSBHREJRdWFk
Tm9kZTsKCnR5cGVkZWYgc3RydWN0IEdEQlFUCnsKICAgIEdEQlF1YWROb2RlICpyb290OwogICAg
R0RCTGF5ZXIgaExheWVyOwogICAgQ0NISGFuZGxlIGhFbnRpdHlMb29rVXA7CiAgICBpbnQgbkRl
cHRoOwogICAgVEJvb2wgYkl0ZW1PdXRzaWRlUm9vdDsKfSBHREJRdWFkVHJlZTsKCnR5cGVkZWYg
c3RydWN0IEdEQlFUSQp7CiAgICBHREJRdWFkTm9kZSAqcHNDdXJyZW50Tm9kZTsKICAgIGludCBu
Q3VycmVudEluZGV4OwogICAgR0RCVmVydGV4IHNNaW47CiAgICBHREJWZXJ0ZXggc01heDsKICAg
IFRCb29sIGJFeHRlbnRzQ2hhbmdlZDsKfSBHREJRVEl0ZXJhdG9yOwoKCgoKCgp0eXBlZGVmIHN0
cnVjdCBHREJTZWFyY2hfdAp7CiAgICBUQm9vbCAoKlNlYXJjaEZ1bmMpKHN0cnVjdCBHREJTZWFy
Y2hfdCAqLCBHREJTaGFwZSAqLCBpbnQzMiAqKTsKICAgIEdEQkxheWVyIHBzTGF5ZXI7CiAgICBH
REJMYXllclR5cGUgZUxheWVyVHlwZTsKICAgIEdEQkxheWVyIHBzQXJlYUxheWVyOwogICAgY2hh
ciAqcHN6U2VhcmNoRXhwcjsKICAgIEdEQlZlcnRleCBzUG9pbnQ7CiAgICBHREJWZXJ0ZXggc01p
bjsKICAgIEdEQlZlcnRleCBzTWF4OwogICAgR0RCU2hhcGVJZCBoQ2xvc2VzdFNoYXBlSWQ7CiAg
ICBkb3VibGUgZERpc3RhbmNlOwogICAgZG91YmxlICpwZERpc3RhbmNlOwogICAgaW50IGlDbG9z
ZXN0U2VnbWVudDsKICAgIEdEQlNoYXBlSWQgaExhc3RTaGFwZUlkOwogICAgaW50IG5MYXN0SW5k
ZXg7CiAgICBUQm9vbCBiSXNGaW5kRmlyc3Q7CgoKCgogICAgVEJvb2wgYklzQXROb2RlOwogICAg
R0RCVmVydGV4IHNOb2RlOwogICAgZG91YmxlIGRBbmdsZTsKCgoKICAgIHN0cnVjdCBHREJRVEkg
c1F1YWRJdGVyYXRvcjsKICAgIEdEQlNoYXBlSWQgKnBhaEV4Y2x1c2lvbklkTGlzdDsKICAgIGlu
dCBuRXhjbHVzaW9uSWRDb3VudDsKCgoKICAgIGludCBuQ291bnQ7CiAgICBHREJWZXJ0ZXggKnBh
c1ZlcnRpY2VzOwoKCgogICAgaW50IG5OZWFyZXN0SW5kZXg7CiAgICBpbnQgbk5lYXJlc3RTaXpl
OwogICAgR0RCU2hhcGVJZCAqcGFoTmVhcmVzdDsKICAgIGRvdWJsZSAqcGFkRGlzdGFuY2VzOwog
ICAgVEJvb2wgYlVzZUluc2lkZTsKfSBHREJTZWFyY2g7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgR0RC
Q3BGdW5jc190CnsKICAgIFRCb29sICgqUHJvY2Vzc2luZ19GdW5jKSAoR0RCTGF5ZXIsIGNvbnN0
IEdEQlNoYXBlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RC
TGF5ZXIgLCBHREJTaGFwZSAqKTsKICAgIHZvaWQgKCpNYXBwaW5nX0Z1bmMpIChHREJMYXllciwg
R0RCTGF5ZXIsIGludCAqKTsKICAgIHZvaWQgKCpDb3VudGVyX0Z1bmMpIChkb3VibGUpOwogICAg
dm9pZCAoKkNvcHlMYXllclN0cnVjdF9GdW5jKSAoR0RCTGF5ZXIsIEdEQkxheWVyKTsKICAgIFRC
b29sICgqUHJvY1dpdGhJZF9GdW5jKSAoR0RCTGF5ZXIsIEdEQlNoYXBlSWQsIGNvbnN0IEdEQlNo
YXBlKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJMYXllciwg
R0RCU2hhcGUgKiwgVEJvb2wsIFRCb29sICopOwoKICAgIElNUFByb2dyZXNzRnVuYyBwZm5Qcm9n
cmVzczsKICAgIHZvaWQgKnBQcm9ncmVzc0FyZzsKfSBHREJDcEZ1bmNzOwojIDE2NzEgIi4uLy4u
Ly4uL2xpYi9nZGIuaCIKR0RCSW5mb190ICogR0RCUmVnaXN0ZXIgKCBpbnQgKTsKR0RCSW5mb190
ICogR0RCR2V0Rm9ybWF0SW5mbyAoIGludCApOwp2b2lkIEdEQkJ5dGVDaGFuSU8gKCBGSUxFICos
IGludCwgaW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQsIGludCwgaW50ICogKTsKdm9pZCBHREJC
eXRlQ2hhbklPTG93ICggRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIGludCwgaW50LCBp
bnQsIGludCAqICk7CnZvaWQgR0RCSW50Q2hhbklPICggRklMRSAqLCBpbnQsIGludCwgaW50LCBp
bnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMiAqLCBp
bnQsIGludCwgaW50LCBpbnQgKiApOwp2b2lkIEdEQkludENoYW5JT0xvdyAoIEZJTEUgKiwgaW50
LCBpbnQsIGludCwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50MzIgKiwgaW50LCBpbnQsIGludCwgaW50ICogKTsKdm9pZCBHREJSZWFsQ2hhbklPICgg
RklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCAqLCBpbnQsIGludCwgaW50LCBpbnQgKiApOwp2b2lkIEdEQlJl
YWxDaGFuSU9Mb3cgKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICosIGludCwgaW50LCBpbnQsIGludCAq
ICk7CnZvaWQgR0RCQml0Q2hhbklPICggRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIGlu
dCwgaW50LCBpbnQsIGludCAqICk7Cgp2b2lkIEdEQkJpdG1hcElPTG93KEZJTEUgKiwgaW50LCBp
bnQsIGludCwgaW50LCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQsIGludCk7CgppbnQg
R0RCQ2hhblR5cGUgKCBGSUxFICosIGludCApOwpjb25zdCBjaGFyICogR0RCQ2hhblR5cGVEZXNj
cmlwdGlvblJlZiAoIGludCApOwppbnQgR0RCQ2hhblhTaXplICggRklMRSAqICk7CmludCBHREJD
aGFuWVNpemUgKCBGSUxFICogKTsKaW50IEdEQkNoYW5OdW0gKCBGSUxFICogKTsKdm9pZCBHREJT
aXplSW5mbyAoIEZJTEUgKiwgaW50ICosIGludCAqLCBpbnQgKiApOwppbnQgR0RCSGludCAoIEZJ
TEUgKiApOwpUQm9vbCBHREJUZXN0RGVzY3JpcHRpb24oIGNvbnN0IGNoYXIgKiApOwppbnQgR0RC
Q2hhbkRlc2NJTyAoIEZJTEUgKiwgaW50LCBpbnQsIGNoYXIgKiApOwpGSUxFICogR0RCQ3JlYXRl
ICggaW50LCBjb25zdCBjaGFyICosIGludCwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKik7Cgp2b2lkIEdEQkNoYW5GbHVzaChGSUxFICos
IGludCk7CkZJTEUgKiBHREJPcGVuICggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsKRklM
RSAqIEdEQlJlb3BlbiAoIEZJTEUgKiApOwp2b2lkIEdEQkNsb3NlICggRklMRSAqICk7CnZvaWQg
R0RCQ2xvc2VKT0xURmlsZSAoIEZJTEUgKiApOwp2b2lkIEdEQkRlbGV0ZSAoIGludCwgY29uc3Qg
Y2hhciAqICk7ClRCb29sIEdEQkRlbGV0ZUZpZWxkICggR0RCTGF5ZXIsIGNoYXIgKiApOwpsb25n
IEdEQkZpbGVBdHRyaWJ1dGUgKCBGSUxFICogKTsKY2hhciAqKiBHREJNZXRhRGF0YUlPICggRklM
RSAqLCBpbnQsIGludCwgaW50LCBjaGFyICoqICk7CmxvbmcgR0RCQXR0cmlidXRlICggaW50ICk7
CnZvaWQgR0RCRmlsZURlc2MgKCBGSUxFICogKTsKdm9pZCBHREJTZWdEZXNjSU8gKCBGSUxFICos
IGludCwgaW50LCBpbnQsIGNoYXIgKiApOwoKdm9pZCBHREJWZWN0b3JJbmZvICggRklMRSAqLCBp
bnQsIGludCwgVkluZm9fdCAqICk7CmludCBHREJWZWN0b3JJTyAoIFZJbmZvX3QgKiwgaW50LCBp
bnQsIGludCwgaW50ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
ICosIGludDMyICosIGludDMyICosIGRvdWJsZSAqKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgKiwgaW50ICk7CgppbnQgR0RCQ29tcGF0VmVjdG9ySU8oVklu
Zm9fdCAqLCBpbnQgLCBpbnQgLCBpbnQgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCAqLCBpbnQgKiwgaW50MzIgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQzMiAqLCBkb3VibGUgKiosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG91YmxlICosIGludCApOwoKdm9pZCBHREJOZXdWZWN0b3JJ
bmZvKCBGSUxFICosIGludCwgaW50LCBWSW5mb190ICogKTsKaW50IEdEQk5ld1ZlY3RvcklPKCBW
SW5mb190ICosIGludCwgaW50LCBpbnQsIGludCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgKiwgaW50MzIgKiwgaW50MzIgKiwgZG91YmxlICoqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgaW50ICk7Cgp2b2lkIEdE
QkJpdG1hcElPKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQgKTsK
aW50IEdEQkdlb3JlZklPKCBGSUxFICosIGludCwgY2hhciAqLCBkb3VibGUgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiAp
OwppbnQgR0RCR2VvcmVmSU8yKCBGSUxFICosIGludCwgY2hhciAqLCBkb3VibGUgKiwgZG91Ymxl
ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUg
KiwgZG91YmxlICosIGRvdWJsZSAqICk7CmludCBHREJQcm9qZWN0aW9uSU8oIEZJTEUgKiwgaW50
LCBQcm9qSW5mb190ICogKTsKdm9pZCBHREJQY3RJTyggRklMRSAqLCBpbnQsIGludCwgdW5zaWdu
ZWQgY2hhciAqICk7CnZvaWQgR0RCTHV0SU8oIEZJTEUgKiwgaW50LCBpbnQsIHVuc2lnbmVkIGNo
YXIgKiApOwp2b2lkIEdEQkJyZWFrUG9pbnRQY3RJTyggRklMRSAqLCBpbnQsIGludCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICosIGludCAqLCBHREJCcmVh
a1BvaW50UENUX3QgKiogKTsKdm9pZCBHREJCcmVha1BvaW50THV0SU8oIEZJTEUgKiwgaW50LCBp
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqLCBpbnQg
KiwgR0RCQnJlYWtQb2ludExVVF90ICoqICk7Cgp2b2lkIEdEQkdjcElPKCBGSUxFICosIGludCwg
aW50ICwgaW50LCBpbnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
LCBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBpbnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiApOwoKdm9pZCBHREJT
YXRFcGhlbWVyaXNJTyggRklMRSAqLCBpbnQsIGludCwgRXBoZW1lcmlzU2VnX3QgKik7CnZvaWQg
R0RCU2F0RXBoZW1lcmlzRnJlZSggRXBoZW1lcmlzU2VnX3QgKiApOwpFcGhlbWVyaXNTZWdfdCAq
R0RCU2F0RXBoZW1lcmlzRHVwbGljYXRlKCBFcGhlbWVyaXNTZWdfdCAqICk7CkVwaGVtZXJpc1Nl
Z190ICpHREJCaW5hcnlUb0VwaGVtZXJpcyggaW50LCB1bnNpZ25lZCBjaGFyICogKTsKdW5zaWdu
ZWQgY2hhciAqR0RCRXBoZW1lcmlzVG9CaW5hcnkoIEVwaGVtZXJpc1NlZ190ICosIGludCAqICk7
CgpTUklUSW5mb190ICpHREJTYXRNb2RlbElPKCBGSUxFICosIGludCwgaW50LCBTUklUSW5mb190
ICogKTsKdm9pZCBHREJGcmVlU1JJVEluZm8oIFNSSVRJbmZvX3QgKiApOwpTUklUSW5mb190ICpH
REJCaW5hcnlUb1NSSVRJbmZvKCBpbnQsIHVuc2lnbmVkIGNoYXIgKiApOwp1bnNpZ25lZCBjaGFy
ICpHREJTUklUSW5mb1RvQmluYXJ5KCBTUklUSW5mb190ICosIGludCAqICk7CgpSRkluZm9fdCAq
UkZBbGxvY2F0ZSAoUkZJbmZvX3QgKiwgaW50KTsKdm9pZCBSRkRlYWxsb2NhdGUgKFJGSW5mb190
ICopOwpSRkluZm9fdCAqR0RCUkZNb2RlbElPKCBGSUxFICosIGludCwgaW50LCBSRkluZm9fdCAq
ICk7CnZvaWQgR0RCRnJlZVJGSW5mbyggUkZJbmZvX3QgKiApOwpSRkluZm9fdCAqR0RCQmluYXJ5
VG9SRkluZm8oIGludCwgdW5zaWduZWQgY2hhciAqICk7CnVuc2lnbmVkIGNoYXIgKkdEQlJGSW5m
b1RvQmluYXJ5KCBSRkluZm9fdCAqLCBpbnQgKiApOwoKQVBJbmZvX3QgKkFQQWxsb2NhdGUgKEFQ
SW5mb190ICopOwp2b2lkIEFQRGVhbGxvY2F0ZSAoQVBJbmZvX3QgKik7CkFQSW5mb190ICpHREJB
UE1vZGVsSU8oIEZJTEUgKiwgaW50LCBpbnQsIEFQSW5mb190ICogKTsKdm9pZCBHREJGcmVlQVBJ
bmZvKCBBUEluZm9fdCAqICk7CkFQSW5mb190ICpHREJCaW5hcnlUb0FQSW5mbyggaW50LCB1bnNp
Z25lZCBjaGFyICogKTsKdW5zaWduZWQgY2hhciAqR0RCQVBJbmZvVG9CaW5hcnkoIEFQSW5mb190
ICosIGludCAqICk7Cgp2b2lkIEdEQkFycmF5SU8oIEZJTEUgKiwgaW50LCBpbnQsIGludCAqLCBp
bnQgKiwgZG91YmxlICoqLCBjaGFyKik7CgppbnQgR0RCU2VnQ3JlYXRlKCBGSUxFICosIGNvbnN0
IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwoKaW50IEdEQlNlZ05leHQoIEZJTEUgKiwgaW50
LCBpbnQgKTsKdm9pZCBHREJTZWdDaGVjayggRklMRSAqLCBpbnQgKiwgaW50LCBpbnQsIGNoYXIg
KiApOwpUQm9vbCBHREJTZWdFeGlzdCggRklMRSAqLCBpbnQsIGludCk7CmludCBHREJTZWdDb3Vu
dCggRklMRSAqLCBpbnQgKTsKaW50IEdEQkxheWVyTmFtZVRvU2VnKCBGSUxFICosIGNvbnN0IGNo
YXIgKiApOwpjb25zdCBjaGFyICogR0RCTGF5ZXJUeXBlVG9TaG9ydE5hbWUoIGludCApOwpjb25z
dCBjaGFyICogR0RCTGF5ZXJUeXBlVG9Mb25nTmFtZSggaW50ICk7CmludCBHREJTaG9ydE5hbWVU
b0xheWVyVHlwZSggY29uc3QgY2hhciAqICk7CmludCBHREJHZXRDaGFuSW5mbyggRklMRSAqLCBp
bnQsIGNoYXIgKiwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
b25nICosIGxvbmcgKiwgbG9uZyAqLCBpbnQgKiApOwoKaW50IEdEQk1lbUNoYW5JbmZvKCBGSUxF
ICosIGludCwgdW5zaWduZWQgY2hhciAqKiwgbG9uZyAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb25nICosIGludCAqICk7ClRCb29sIEdEQkdldFRpbGVJbmZvKCBGSUxFICosIGlu
dCwgaW50ICosIGludCAqICk7CgppbnQgR0RCVGVzdE9wZW4gKCBjb25zdCBjaGFyICogKTsKaW50
IEdEQlRleHRBY2Nlc3MgKCBGSUxFICosIFRJbmZvX3QgKiwgY2hhciAqLCBpbnQsIGNoYXIgKiAp
OwppbnQgR0RCVGV4dFJlYWQgKCBUSW5mb190ICosIGNoYXIgKiwgaW50ICk7CnZvaWQgR0RCVGV4
dFdyaXRlICggVEluZm9fdCAqLCBjaGFyICogKTsKdm9pZCBHREJTeW5jICggRklMRSAqICk7CnZv
aWQgR0RCQ29tcHJlc3MgKCBGSUxFICogKTsKdm9pZCBHREJDaGFuQWRkICggRklMRSAqLCBpbnQs
IGludCwgUENJQ291bnRlciApOwp2b2lkIEdEQkNoYW5EZWxldGUgKCBGSUxFICosIGludCwgaW50
ICosIFBDSUNvdW50ZXIgKTsKdm9pZCBHREJVbml0VGVzdGluZyAodm9pZCk7CgpUQm9vbCBHREJC
dWlsZE92ZXJ2aWV3cyggRklMRSAqLCBpbnQsIGludCAqLCBpbnQsIFRCb29sLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgSU1QUHJvZ3Jlc3NGdW5jLCB2
b2lkICogKTsKR0RCT3ZlcnZpZXdJbmZvX3QgKgogICAgICAgICAgICAgICBHREJHZXRPdmVydmll
d3MgKCBGSUxFICosIGludCAqKTsKdm9pZCBHREJDaGFuQ29weSAoIEZJTEUgKiwgaW50ICosIGlu
dCwgRklMRSAqLCBpbnQgKiwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkICgqKSggaW50LCBpbnQsIGludCwgdm9pZCAqKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKCopKCBkb3VibGUgKSApOwpUQm9vbCBHREJNdWx0aUNoYW5D
b3B5KCBGSUxFICosIGludCAqLCBpbnQgKiwgRklMRSAqLCBpbnQgKiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCAqLCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKCopKCBpbnQsIGludCwgaW50LGludCx2b2lkICopLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QUHJvZ3Jlc3NGdW5jLCB2b2lkICogKTsKdm9p
ZCBHREJCaXRtYXBDb3B5ICggRklMRSAqLCBpbnQgKiwgaW50LCBGSUxFICosIGludCAqLCBpbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqKShpbnQsaW50LGludCxp
bnQsdm9pZCopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJQ291bnRlciAp
OwoKaW50IEdEQlZlY3RvckNvcHkoRklMRSAqZnBfaW4sIGludCBuU2VnSW4sIEZJTEUgKmZwX291
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuU2VnT3V0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVEJvb2wgKCpUcmFuc2Zvcm1fRnVuYykoR0RCTGF5ZXIgLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0RCU2hh
cGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdEQkxheWVyICwgR0RCU2hhcGUgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICgqTWFwcGluZ19GdW5jKShHREJMYXllcixHREJMYXllcixpbnQgKiksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkICgqQ291bnRlcl9GdW5jKShkb3VibGUpKTsKCmludCBHREJWZWN0
b3JDcChGSUxFICpmcF9pbiwgaW50IG5TZWdJbiwgRklMRSAqZnBfb3V0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBuU2VnT3V0LCBHREJDcEZ1bmNzICpwc0Z1bmNzKTsKCkdEQkxheWVy
CiAgICAgICAgR0RCVmVjdG9yVHJhbnNmZXIoR0RCTGF5ZXIgaFNyY0xheWVyLCBHREJTaGFwZUlk
ICpwYWhTaGFwZUlkcywKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbkNvdW50LCBHREJM
YXllciBoRHN0TGF5ZXIsIGludCBuT3B0aW9ucyk7CgoKR0RCU2hhcGVJZCAqR0RCR2V0TGF5ZXJT
ZWxlY3Rpb25SZWYoR0RCTGF5ZXIpOwp2b2lkIEdEQlNldExheWVyU2VsZWN0aW9uKEdEQkxheWVy
LCBHREJTaGFwZUlkICosIGludCk7CnZvaWQgR0RCQWRkVG9MYXllclNlbGVjdGlvbihHREJMYXll
ciwgR0RCU2hhcGVJZCk7CnZvaWQgR0RCQWRkVG9NdWx0aXBsZUxheWVyU2VsZWN0aW9uKEdEQkxh
eWVyLCBHREJTaGFwZUlkKiwgaW50KTsKdm9pZCBHREJSZW1vdmVMYXllclNlbGVjdGlvbihHREJM
YXllciwgR0RCU2hhcGVJZCAqLCBpbnQpOwppbnQgR0RCR2V0TGF5ZXJTZWxlY3Rpb25Db3VudChH
REJMYXllcik7ClRCb29sIEdEQklzU2hhcGVTZWxlY3RlZChHREJMYXllciwgR0RCU2hhcGVJZCk7
ClRCb29sIEdEQlNldExvY2tMYXllclNlbGVjdGlvblN0YXR1cyggR0RCTGF5ZXIsIFRCb29sICk7
ClRCb29sIEdEQkdldExvY2tMYXllclNlbGVjdGlvblN0YXR1cyggR0RCTGF5ZXIgKTsKCnZvaWQg
R0RCUmVzZXRSZWFkQ2FjaGVTaXplKHZvaWQpOwp2b2lkIEdEQlNldFJlYWRDYWNoZVNpemUoaW50
IG5TaXplKTsKaW50IEdEQkdldFJlYWRDYWNoZVNpemUodm9pZCk7CnZvaWQgR0RCQ3JlYXRlTGF5
ZXJDYWNoZXMoR0RCTGF5ZXIgcHNMYXllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbk1vZE9wdGlvbnMgLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuTW9kU2l6ZSAsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5SZWFkT3B0aW9ucyAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5SZWFkU2l6ZSApOwoK
VEJvb2wgR0RCTGF5ZXJDYW5Ib2xkVGlsbENvbW1pdChHREJMYXllcik7CnZvaWQgR0RCRGlzY2Fy
ZExheWVyQ2hhbmdlcyhHREJMYXllcik7CnZvaWQgR0RCU3luY0xheWVyKEdEQkxheWVyKTsKCnZv
aWQgR0RCUmVtYXBSZWNvcmQoR0RCTGF5ZXIsIEdEQkxheWVyLCBpbnQgKiwgR0RCU2hhcGUgKik7
CmludCAqIEdEQkdldExheWVyU3RydWN0dXJlTWFwcGluZyhHREJMYXllciBoU3JjLCBHREJMYXll
ciBoRGVzdCk7CmludCAqIEdEQkdldERlZm5TdHJ1Y3R1cmVNYXBwaW5nKEdEQkRlZm4gKixpbnQs
R0RCRGVmbiAqLGludCk7CgoKaW50IEhhc2hHREJJbWFnZSggRklMRSAqLCBpbnQsIGludCwgaW50
LCBpbnQsIGludCApOwp2b2lkIEdEQkF2Z1JlYWQoIEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50
LCBmbG9hdCAqLCBpbnQsIGludCwgaW50KTsKdm9pZCBHREJNb2RlUmVhZCggRklMRSAqLCBpbnQs
IGludCwgaW50LCBpbnQsIGZsb2F0ICosIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgKTsKCnZvaWQgR0RCUmVzYW1wbGVCeXRlSW1hZ2UgKEZJTEUgKmZwLCBkb3VibGUg
ZGZHZW9YT2ZmLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZHZW9ZT2ZmLCBk
b3VibGUgZGZHZW9YU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRmR2Vv
WVNpemUsIHVuc2lnbmVkIGNoYXIgKnBhYnlJbWFnZUJ1ZmZlciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IG5CdWZYU2l6ZSwgaW50IG5CdWZZU2l6ZSwgaW50IG5CdWZDaGFuLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmFuQ2hhbk1hcCwgaW50IG5SZXNhbXBsZVR5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRCb29sIGJCYWNrVXNlZCwgZG91YmxlIGRmQmFj
a1ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lDb3VudGVyIHBmbkNvdW50ZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkZkZpcnN0Q291bnQsIGRvdWJsZSBk
Zkxhc3RDb3VudCk7Cgp2b2lkIEdEQlJlc2FtcGxlSW50SW1hZ2UgKEZJTEUgKmZwLCBkb3VibGUg
ZGZHZW9YT2ZmLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZHZW9ZT2ZmLCBk
b3VibGUgZGZHZW9YU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRmR2Vv
WVNpemUsIGludDMyICpwYW4zMkltYWdlQnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgbkJ1ZlhTaXplLCBpbnQgbkJ1ZllTaXplLCBpbnQgbkJ1ZkNoYW4sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCAqYW5DaGFuTWFwLCBpbnQgblJlc2FtcGxlVHlwZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEJvb2wgYkJhY2tVc2VkLCBkb3VibGUgZGZCYWNrVmFsdWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSUNvdW50ZXIgcGZuQ291bnRlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRmRmlyc3RDb3VudCwgZG91YmxlIGRmTGFzdENv
dW50KTsKCnZvaWQgR0RCUmVzYW1wbGVSZWFsSW1hZ2UgKEZJTEUgKmZwLCBkb3VibGUgZGZHZW9Y
T2ZmLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZHZW9ZT2ZmLCBkb3VibGUg
ZGZHZW9YU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRmR2VvWVNpemUs
IGZsb2F0ICpwYWZJbWFnZUJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5C
dWZYU2l6ZSwgaW50IG5CdWZZU2l6ZSwgaW50IG5CdWZDaGFuLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgKmFuQ2hhbk1hcCwgaW50IG5SZXNhbXBsZVR5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRCb29sIGJCYWNrVXNlZCwgZG91YmxlIGRmQmFja1ZhbHVlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBQQ0lDb3VudGVyIHBmbkNvdW50ZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSBkZkZpcnN0Q291bnQsIGRvdWJsZSBkZkxhc3RDb3VudCk7Cgpj
b25zdCBjaGFyICogR0RCRmV0Y2hNZXRhRGF0YUVudHJ5KEZJTEUgKiwgaW50LCBpbnQsY29uc3Qg
Y2hhciAqKTsKdm9pZCBHREJTZXRNZXRhRGF0YUVudHJ5KEZJTEUgKiwgaW50LCBpbnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25z
dCBjaGFyICopOwp2b2lkIEdEQkRlbGV0ZU1ldGFEYXRhRW50cmllcyhGSUxFICosIGludCwgaW50
LGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKiwgVEJvb2wpOwoKdm9pZCBHREJXcml0ZUhpc3RvcnkoRklMRSAq
LCBpbnQsIGludCwgY29uc3QgY2hhciAqKTsKY29uc3QgY2hhciAqIEdEQlJlYWRIaXN0b3J5KEZJ
TEUgKiwgaW50LCBpbnQsIGludCApOwoKdm9pZCBHREJCaW5hcnlJTyggRklMRSAqLCBpbnQsIGlu
dCwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKiApOwppbnQgR0RCR2V0QmluYXJ5TGVuZ3RoKCBG
SUxFICosIGludCApOwoKdm9pZCBHREJKT0xUSGFyZFN5bmMoIEZJTEUgKiwgVEJvb2wgYkRlc3Ry
b3lJbWFnZUxheWVycyApOwoKdm9pZCBHREJKT0xURmlsbENoYW5uZWxzQWRkZWRMaXN0KCBGSUxF
KiBmcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBw
YW5DaGFuTWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbk5ld0NoYW5uZWxDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IG5PbGRDaGFubmVsQ291bnQgKTsKIyAxOTIxICIuLi8uLi8uLi9saWIvZ2Ri
LmgiClRCb29sIEdEQkFzc2lnbkFsbFBJRHMoIEZJTEUqIGZwICk7CgpUQm9vbCBHREJBdXRvU2V0
Q2hhblBJRCggRklMRSogZnAsIGludCBuQ2hhbk51bWJlciwgdWludDMyICpwdVBJRCApOwpUQm9v
bCBHREJHZXRDaGFuUElEKCBGSUxFKiBmcCwgaW50IG5DaGFuTnVtYmVyLCB1aW50MzIgKnB1UElE
ICk7CmludCBHREJGaW5kQ2hhbkZyb21QSUQoIEZJTEUqIGZwLCB1aW50MzIgblBJRCApOwoKVEJv
b2wgU2V0Q2hhbkNSQyhGSUxFICpmcCwgaW50IG5DaGFuTnVtYmVyLCB1aW50MzIgKnB1UElEICk7
ClRCb29sIEdldENoYW5DUkMoIEZJTEUqIGZwLCBpbnQgbkNoYW5OdW1iZXIsIHVpbnQzMiAqcHVQ
SUQgKTsKaW50IEZpbmRDaGFuRnJvbUNSQyggRklMRSogZnAsIHVpbnQzMiBuUElEICk7CgpUQm9v
bCBHZW5lcmF0ZUNSQyhGSUxFICpmcCwgaW50IG5DaGFubmVsLCB1aW50MzIgKm5DUkMpOwoKCnZv
aWQgR0RCSk9MVFJlbWFwQW5kQ29tbWl0Q2hhbm5lbERlbGV0aW9ucyggRklMRSogZnAsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogcGFu
Q2hhbk1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IG5OZXdDaGFubmVsQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuT2xkQ2hhbm5lbENvdW50ICk7Cgp2b2lkIEdE
QkpPTFRSZW1hcEFuZENvbW1pdENoYW5uZWxBZGRpdGlvbnMoRklMRSogZnAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHBhbkNoYW5NYXAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbk5ld0NoYW5uZWxDb3VudCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuT2xkQ2hhbm5l
bENvdW50KTsKCgoKCgpUQm9vbCBHREJUZXN0Q2FwYWJpbGl0eSggR0RCTGF5ZXIgLCBHREJGbGFn
cyApOwojIDE5NTcgIi4uLy4uLy4uL2xpYi9nZGIuaCIKaW50IEdEQkdldFByb2plY3Rpb25JbmZv
KCBHREJMYXllciAsIFByb2pJbmZvX3QgKiApOwp2b2lkIEdEQlNldFByb2plY3Rpb25JbmZvKCBH
REJMYXllciAsIFByb2pJbmZvX3QgKiApOwoKR0RCTGF5ZXIgR0RCR2V0TGF5ZXIoIEZJTEUgKiwg
aW50ICk7CkdEQkxheWVyVHlwZSBHREJHZXRMYXllclR5cGUoIEdEQkxheWVyIGhMYXllciwgVEJv
b2wgYkRvU2NhbklmVW5rbm93biApOwpHREJMYXllciBHREJDcmVhdGVMYXllciggRklMRSAqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogcHN6
TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqIHBzekRlc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKiBwc3pPcHRpb25zICk7CgppbnQgR0RCTGF5ZXIyU2VnbWVudCggR0RCTGF5ZXIg
aExheWVyICk7CmludCBHREJMYXllcjJUeXBlKCBHREJMYXllciApOwpGSUxFICogR0RCTGF5ZXIy
ZnAoIEdEQkxheWVyICk7Cgp2b2lkIEdEQkRlbGV0ZUxheWVyKCBGSUxFICpmcCwgaW50IG5TZWdt
ZW50ICk7CgpHREJTaGFwZUlkIEdEQkdldEZpcnN0KEdEQkxheWVyICk7CkdEQlNoYXBlSWQgR0RC
R2V0TmV4dChHREJMYXllciAsIEdEQlNoYXBlSWQpOwoKCgoKR0RCU2hhcGVJZCAqIEdEQlF1ZXJ5
KCBHREJMYXllciBoTGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgKnBuT3V0U2hhcGVDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdEQlNoYXBlSWQgKnBhaFNoYXBlSWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IG5JblNoYXBlQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpwc3pFeHByZXNzaW9uICk7CgpHREJTaGFwZUlkICogR0RCUXVlcnlM
YXllciggR0RCTGF5ZXIgLCBpbnQgKnBuQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdEQlNoYXBlSWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IG5Db3VudCwgR0RCU2VhcmNoVHlwZSwgLi4uICk7Cgp2b2lkIEdE
QkZpbmRFeHRlbnRzKEdEQlZlcnRleCAqcGFzVmVydGljZXMsIGludCBuQ291bnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHREJWZXJ0ZXggKnBzTWluLCBHREJWZXJ0ZXggKnBzTWF4
KTsKVEJvb2wgR0RCRmluZFNoYXBlRXh0ZW50cyhHREJMYXllciwgR0RCU2hhcGVJZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlZlcnRleCAqLCBHREJW
ZXJ0ZXggKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRC
b29sIGJEaXNwbGF5RXJyb3IpOwp2b2lkIEdEQkZpbmRFeHRlbnRzMihHREJWZXJ0ZXggKnBhc1Zl
cnRpY2VzLCBpbnQgbkNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlZl
cnRleCAqcHNNaW4sIEdEQlZlcnRleCAqcHNNYXgpOwp2b2lkIEdEQk1ha2VNaW5NYXgoR0RCVmVy
dGV4ICpwc01pbiwgR0RCVmVydGV4ICpwc01heCk7CmludCBHREJGaW5kTmVhcmVzdFZlcnRleChH
REJMYXllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
REJTaGFwZUlkLCBHREJWZXJ0ZXggKik7CgpHREJTZWFyY2ggKiBHREJTZXRTZWFyY2hDcml0ZXJp
YShHREJMYXllciAsIEdEQlNlYXJjaFR5cGUsIC4uLik7CkdEQlNoYXBlSWQgR0RCRmluZEZpcnN0
KEdEQlNlYXJjaCAqLCBHREJTaGFwZUlkICosIGludCk7CkdEQlNoYXBlSWQgR0RCRmluZE5leHQo
R0RCU2VhcmNoICosR0RCU2hhcGVJZCAqLCBpbnQpOwp2b2lkIEdEQlJlbGVhc2VDcml0ZXJpYShH
REJTZWFyY2ggKik7CgpHREJTaGFwZUlkIEdEQkNyZWF0ZVNoYXBlKCBHREJMYXllciAsIEdEQlNo
YXBlSWQpOwp2b2lkIEdEQkRlbGV0ZVNoYXBlKCBHREJMYXllciAsIEdEQlNoYXBlSWQgKTsKR0RC
U2hhcGVJZCBHREJVbkRlbGV0ZVNoYXBlKCBHREJMYXllciAsIEdEQlNoYXBlSWQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCU2hhcGUgKnBzU2hhcGUgKTsK
CkdEQlZlcnRleCAqIEdEQkdldFZlcnRpY2VzKEdEQkxheWVyICwgR0RCU2hhcGVJZCwgaW50ICpw
bkNvdW50ICk7CkdEQlZlcnRleCAqIEdEQkdldFZlcnRpY2VzUmVmKEdEQkxheWVyLCBHREJTaGFw
ZUlkLCBpbnQgKnBuQ291bnQpOwp2b2lkIEdEQlNldFZlcnRpY2VzKEdEQkxheWVyICwgR0RCU2hh
cGVJZCwgaW50IG5Db3VudCwgR0RCVmVydGV4ICopOwpHREJWZXJ0ZXggKiBHREJWZXJ0ZXhDb3B5
KEdEQlZlcnRleCAqLCBpbnQgbkNvdW50KTsKCmludCBHREJHZXROdW1GaWVsZHMoR0RCTGF5ZXIp
OwppbnQgR0RCR2V0RmllbGRJbmRleChHREJMYXllciwgY29uc3QgY2hhciAqKTsKaW50IEdEQkdl
dEZpZWxkSW5kZXhSZWdleChHREJMYXllciwgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBUQm9vbCk7CmNvbnN0IGNoYXIgKiBHREJH
ZXRGaWVsZE5hbWUoR0RCTGF5ZXIsIGludCk7Cgpjb25zdCBjaGFyICogR0RCR2V0RmllbGREZXNj
KEdEQkxheWVyIGhMYXllciwgaW50IGlGaWVsZCk7CnZvaWQgR0RCU2V0RGVmYXVsdChHREJMYXll
ciBoTGF5ZXIsIGludCBpRmllbGQsIEdEQkZpZWxkICpwdVZhbHVlKTsKdm9pZCBHREJTZXRGaWVs
ZERlc2MoR0RCTGF5ZXIgaExheWVyLCBpbnQgaUZpZWxkLCBjaGFyICpwc3pEZXNjKTsKdm9pZCBH
REJTZXRGaWVsZE5hbWUoR0RCTGF5ZXIgaExheWVyLCBpbnQgaUZpZWxkLCBjaGFyICpwc3pOYW1l
KTsKdm9pZCBHREJTZXRGaWVsZEZvcm1hdChHREJMYXllciBoTGF5ZXIsIGludCBpRmllbGQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwc3pGb3JtYXQpOwoK
CmNvbnN0IGNoYXIgKiBHREJHZXRGaWVsZEZvcm1hdChHREJMYXllciwgaW50KTsKaW50IEdEQkdl
dEZpZWxkV2lkdGgoR0RCTGF5ZXIsIGludCwgaW50ICosIFRCb29sICopOwpjb25zdCBjaGFyICog
R0RCR2VuRmllbGRGb3JtYXQoR0RCRmllbGRUeXBlLCBpbnQsIGludCwgVEJvb2wgKTsKdm9pZCBH
REJJbml0aWFsaXplRmllbGRGb3JtYXRzKEdEQkxheWVyIHBzTGF5ZXIpOwoKR0RCRmllbGRUeXBl
IEdEQkdldEZpZWxkVHlwZSAoR0RCTGF5ZXIsIGludCk7ClRCb29sIEdEQklzU3lzRmllbGQgKGNo
YXIgKiwgR0RCTGF5ZXIsIGludCk7CkdEQkZpZWxkICogR0RCR2V0RmllbGREZWZhdWx0IChHREJM
YXllciwgaW50KTsKdm9pZCBHREJTZXRGaWVsZFZhbHVlIChHREJMYXllciwgR0RCU2hhcGVJZCwg
aW50LCBHREJGaWVsZCopOwpkb3VibGUgR0RCU2V0VmFsdWUgKEdEQkxheWVyLCBHREJTaGFwZUlk
LCBpbnQsIGRvdWJsZSApOwpHREJGaWVsZCAqIEdEQkdldEZpZWxkVmFsdWUgKEdEQkxheWVyLCBH
REJTaGFwZUlkLCBpbnQpOwpHREJGaWVsZCAqIEdEQkdldEZpZWxkVmFsdWVRdWlja2x5KEdEQkxh
eWVyICwgR0RCU2hhcGUgKiwgaW50KTsKZG91YmxlIEdEQkdldFZhbHVlIChHREJMYXllciwgR0RC
U2hhcGVJZCwgaW50KTsKY2hhciAqIEdEQkdldFZhbHVlU3RyaW5nIChHREJMYXllciwgR0RCU2hh
cGVJZCwgaW50KTsKdm9pZCBHREJTZXRWYWx1ZVN0cmluZyAoR0RCTGF5ZXIsIEdEQlNoYXBlSWQs
IGludCwgY2hhciAqKTsKdm9pZCBHREJTZXRGaWVsZFZhbHVlU3RyaW5nKEdEQkZpZWxkICpwdUZp
ZWxkLCBHREJGaWVsZFR5cGUgZVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICpwc3pWYWx1ZSk7CkdEQkZpZWxkICogR0RCR2V0UmVjb3Jk
IChHREJMYXllciwgR0RCU2hhcGVJZCk7CnZvaWQgR0RCU2V0UmVjb3JkIChHREJMYXllciwgR0RC
U2hhcGVJZCwgR0RCRmllbGQgKik7CkdEQkZpZWxkICogR0RCR2V0UmVjb3JkUmVmIChHREJMYXll
ciwgR0RCU2hhcGVJZCk7CmludCBHREJBZGRGaWVsZCAoR0RCTGF5ZXIsIGNoYXIgKnBzek5hbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCRmllbGRUeXBlIGVU
eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQkZpZWxkICpw
c0RlZmF1bHQpOwoKCkdEQkZpZWxkICogR0RCUmVjb3JkQ29weSAoR0RCTGF5ZXIsIEdEQkZpZWxk
ICopOwpHREJGaWVsZCAqIEdEQlJlY29yZEFsbG9jIChHREJMYXllcik7CnZvaWQgR0RCUmVjb3Jk
RnJlZSAoR0RCTGF5ZXIsIEdEQkZpZWxkICopOwoKCnZvaWQgR0RCRmllbGRGcmVlIChHREJGaWVs
ZFR5cGUsIEdEQkZpZWxkICopOwpHREJGaWVsZCBHREJGaWVsZENvcHkgKEdEQkZpZWxkVHlwZSwg
R0RCRmllbGQgKik7ClRCb29sIEdEQkZpZWxkVmFsdWVJZGVudGljYWwoR0RCRmllbGRUeXBlIGVU
eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RC
RmllbGQqIHBzRmllbGQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0RCRmllbGQqIHBzRmllbGQyKTsKCnZvaWQgR0RCRmx1c2hDYWNoZSAoR0RCTGF5
ZXIgcHNMYXllcik7CgpHREJTaGFwZSAqIEdEQlNoYXBlQWxsb2MoR0RCTGF5ZXIpOwp2b2lkIEdE
QlNoYXBlRnJlZShHREJMYXllciwgR0RCU2hhcGUgKik7CkdEQlNoYXBlICogR0RCR2V0U2hhcGUo
R0RCTGF5ZXIsIEdEQlNoYXBlSWQpOwoKR0RCU2hhcGUgKiBHREJHZXRTaGFwZVJlZihHREJMYXll
ciwgR0RCU2hhcGVJZCk7CnZvaWQgR0RCU2V0U2hhcGUoR0RCTGF5ZXIsIEdEQlNoYXBlSWQsIEdE
QlNoYXBlKik7CkdEQlNoYXBlICogR0RCU2hhcGVDb3B5KEdEQkxheWVyLCBHREJTaGFwZSAqKTsK
R0RCVmVydGV4ICogR0RCRmluZENsb3Nlc3RQb2ludCggR0RCTGF5ZXIsIEdEQlNoYXBlSWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJWZXJ0ZXgsIGludCAqLCBk
b3VibGUgKiwgaW50ICogKTsKR0RCVmVydGV4ICpHREJGaW5kQ2xvc2VzdEZyb21BcnJheShHREJW
ZXJ0ZXggKnBzUG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIEdEQlZlcnRleCAqcGFzVmVy
dGljZXMsIGludCBuQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbkxlZnRJbmRl
eCwgZG91YmxlICpkZk1pbkRpc3QsIGludCAqblZlcnRleEluZGV4KTsKCnZvaWQgX0dEQlNldENv
b3JkRnJvbUF0dHJpYiggR0RCTGF5ZXIsIEdEQlNoYXBlICogKTsKdm9pZCBfR0RCU2V0QXR0cmli
RnJvbUNvb3JkKCBHREJMYXllciwgR0RCU2hhcGUgKiApOwoKdm9pZCBHREJNb2RDYWNoZUZsdXNo
RnVuYyhDQ0hIYW5kbGUgcHNDYWNoZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDQ0hFbnRyeSAqcHNFbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwRGF0YSk7Cgp2b2lkIEdEQlJlYWRDYWNoZUZs
dXNoRnVuYyhDQ0hIYW5kbGUgcHNDYWNoZSwgQ0NIRW50cnkgKnBzRW50cnksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBEYXRhKTsKCmludCBHREJHZXROdW1T
aGFwZXMoR0RCTGF5ZXIpOwp2b2lkIF9HREJTZXROdW1TaGFwZXMoR0RCTGF5ZXIsIGludCk7CnZv
aWQgR0RCU2V0TnVtT2ZTaGFwZXNCeVR5cGUoR0RCTGF5ZXIgaExheWVyLCBpbnQgblBvaW50cywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbkxp
bmVzLCBpbnQgbkFyZWFzKTsKdm9pZCBHREJHZXROdW1PZlNoYXBlc0J5VHlwZShHREJMYXllciBo
TGF5ZXIsIGludCogcG5Qb2ludHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50KiBwbkxpbmVzLCBpbnQqIHBuQXJlYXMpOwpHREJMYXllclR5cGUg
R0RCR2V0U2hhcGVUeXBlKEdEQkxheWVyIGhMYXllciwgR0RCU2hhcGVJZCBoRW50aXR5KTsKdm9p
ZCBHREJVcGRhdGVTaGFwZUJ5VHlwZShHREJMYXllciBoTGF5ZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCU2hhcGVJZCBoRW50aXR5LCBpbnQgbk9w
ZXJhdGlvbik7CgpHREJGYXRTaGFwZSAqIEdEQkdldEZhdFNoYXBlKEdEQkxheWVyLCBHREJTaGFw
ZUlkKTsKdm9pZCBHREJTZXRGYXRTaGFwZShHREJMYXllciwgR0RCU2hhcGVJZCwgR0RCRmF0U2hh
cGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICopOwp2
b2lkIEdEQkZhdFNoYXBlRnJlZShHREJGYXRTaGFwZSAqcHNGYXRTaGFwZSk7CkdEQkZhdFNoYXBl
ICogR0RCRmF0U2hhcGVBbGxvYyhHREJMYXllcik7CgoKdm9pZCAqIEdEQkdldFJlcFRhYmxlKEdE
QkxheWVyKTsKdm9pZCBHREJTZXRSZXBUYWJsZShHREJMYXllciwgdm9pZCAqKTsKCkdEQkxheWVy
IEdEQkNvcHlMYXllclN0cnVjdHVyZShHREJMYXllciBTcmMsIEdEQkxheWVyIERlc3QpOwpUQm9v
bCBHREJMYXllckhhc05vR2VvZ3JhcGh5KEdEQkxheWVyIGhMYXllcik7CgpUQm9vbCBHREJHZXRF
eHRlbnRzKEdEQkxheWVyIHBzTGF5ZXIsIEdEQlZlcnRleCAqcHNNaW4gLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlZlcnRleCAqcHNNYXgpOwoKdm9pZCBfR0RC
U2V0RXh0ZW50cyhHREJMYXllciBwc0xheWVyLCBHREJWZXJ0ZXggKnBzTWluLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHREJWZXJ0ZXggKnBzTWF4KTsKVEJvb2wgR0RCQ2FsY0V4dGVu
dHMoR0RCTGF5ZXIgcHNMYXllciwgR0RCVmVydGV4ICpwc01pbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0RCVmVydGV4ICpwc01heCk7ClRCb29sIEdEQkdldE92
ZXJhbGxFeHRlbnRzKCBGSUxFICosIFByb2pJbmZvX3QgKiApOwoKdm9pZCBHREJTZXRDdXJyZW50
QXJlYUV4dGVudHMoR0RCVmVydGV4ICpwc01pbiwgR0RCVmVydGV4ICpwc01heCk7CnZvaWQgR0RC
R2V0Q3VycmVudEFyZWFFeHRlbnRzKEdEQlZlcnRleCAqcHNNaW4sIEdEQlZlcnRleCAqcHNNYXgp
Owp2b2lkIEdEQlNldEN1cnJlbnRBcmVhSGFzRml4ZWRFeHRlbnRzKFRCb29sIGJGaXhlZCk7ClRC
b29sIEdEQkN1cnJlbnRBcmVhSGFzRml4ZWRFeHRlbnRzKHZvaWQpOwoKVEJvb2wgR0RCR2V0VmVj
QWRqdXN0ZWRYWVNpemUoIEZJTEUgKiwgaW50ICosIGludCAqICk7Cgp2b2lkIEdEQkFkZEF0dElu
Zm8oIEdEQkxheWVyLCBjb25zdCBjaGFyICosIEdEQkZpZWxkVHlwZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdEQkZpZWxkICopOwpHREJEZWZuICogR0RCRGVmaW5lTmV3RmllbGQo
R0RCTGF5ZXIgcHNMYXllciwgY29uc3QgY2hhciAqcHN6RmllbGROYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpwc3pGaWVsZERlc2MsIEdEQkZpZWxkVHlwZSBlRmll
bGRUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBHREJGaWVsZCAqcHVGaWVsZCwgY29u
c3QgY2hhciAqcHN6Rm9ybWF0LCAuLi4pOwoKR0RCRGVmbiAqIEdEQkdldEZpZWxkRGVmbihHREJM
YXllciwgaW50KTsKR0RCRGVmbiAqIEdEQkFkZEZpZWxkRGVmbihHREJMYXllciApOwp2b2lkIEdE
QkRlZm5GcmVlKCBHREJEZWZuICogcHNEZWZuICk7Cgp2b2lkIEdEQkZyZWVBdHRJbmZvKEdEQkxh
eWVyKTsKdm9pZCBHREJGcmVlTGF5ZXJTdHJ1Y3QoR0RCTGF5ZXIpOwoKRklMRSAqIEdEQkNyZWF0
ZU1lbUNvcHkoR0RCTGF5ZXIgcHNMYXllcik7CkZJTEUgKiBHREJDcmVhdGVDb21wTWVtQ29weShH
REJMYXllciwgY29uc3QgY2hhciAqKTsKCmludCAqIEdEQkNvdW50ZWRJbnRMaXN0Q29weShpbnQg
Kik7CmludCBHREJHZXRTZWdtZW50TnVtKEdEQkxheWVyKTsKCkdEQkxheWVyICogR0RCQXBwZW5k
TGF5ZXJBcnJheShHREJMYXllciAsIEdEQkxheWVyICogLCBpbnQgKikgOwpHREJMYXllciBHREJJ
bmNyZWFzZUxheWVyQXJyYXkoRklMRSAqLCBHREJMYXllciAqKiwgaW50ICopOwpHREJMYXllciBH
REJMYXllckFsbG9jKEZJTEUgKmZwKTsKdm9pZCBHREJMYXllckZyZWUoIEdEQkxheWVyICk7CgpH
REJTaGFwZSAqIEdldEdEQlNoYXBlKFZJbmZvX3QgKiwgR0RCU2hhcGVJZCk7CnZvaWQgU2V0R0RC
U2hhcGUoVkluZm9fdCAqLCBHREJTaGFwZSopOwpUQm9vbCBHREJTZXRVcGRhdGVNb2RlKEdEQkxh
eWVyLFRCb29sKTsKCgoKCkdEQlNoYXBlICogR0RCR2V0UmluZ1JlZiggR0RCTGF5ZXIsIEdEQlNo
YXBlICosIGludCwgaW50MzIgKiApOwpHREJTaGFwZSAqIEdEQkdldFJpbmcoIEdEQkxheWVyLCBH
REJTaGFwZSAqLCBpbnQsIGludDMyICogKTsKaW50IEdEQkFkZFJpbmdUb1NoYXBlKCBHREJMYXll
ciwgR0RCU2hhcGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdEQlZlcnRleCAqLCBpbnQgKTsKVEJvb2wgR0RCR2V0UmluZ0luZm8oIEdEQkxheWVyLCBHREJT
aGFwZSAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
KiwgaW50ICosIGludDMyICogKTsKdm9pZCBHREJEZWxldGVSaW5nKCBHREJMYXllciwgR0RCU2hh
cGUgKiwgaW50ICk7CmludCBHREJHZXRSaW5nQ291bnQoIEdEQkxheWVyLCBHREJTaGFwZSAqLCBp
bnQzMiAqICk7CnZvaWQgR0RCU2V0UmluZ1ZlcnRpY2VzKEdEQkxheWVyIGhMYXllciwgR0RCU2hh
cGUqIHBzU2hhcGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaVJpbmcsIEdEQlZlcnRleCAqcGFzVmVydGljZXMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgbkNvdW50KTsKdm9pZCBDQ0xSaW5nVGVzdCggdm9pZCAp
OwpHREJWZXJ0ZXggKkdEQkNvbWJpbmVWZXJ0aWNlcyhHREJMYXllciBwc0xheWVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlNoYXBlSWQqIHBhblNoYXBlSWRzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuTnVtU2hhcGVzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCogcG5Db3VudCk7CgoKCgp2b2lkIElEQkNsZWFyU2hhcGVzKEdE
QkxheWVyICk7ClRCb29sIElEQkNvbnZlcnRUb05ldyhHREJMYXllciApOwpUQm9vbCBJREJDbGVh
ckxheWVyKEdEQkxheWVyKTsKClRCb29sIEdEQkNsZWFyTGF5ZXIoR0RCTGF5ZXIpOwoKdm9pZCBJ
REJCdWZmQWxsb2MoKTsKdm9pZCBJREJCdWZmUmVhbGxvYyhsb25nKTsKCgoKCgoKdm9pZCBNUllD
bGVhckVkaXRMaXN0KEdEQkxheWVyKTsKR0RCU2hhcGVJZCAqIE1SWUdldEVkaXRMaXN0KEdEQkxh
eWVyLCBpbnQgKik7CnZvaWQgTVJZSW5pdEVkaXRMaXN0KEdEQkxheWVyKTsKdm9pZCBNUllEZXN0
cm95RWRpdExpc3QoR0RCTGF5ZXIpOwpHREJTaGFwZSAqIE1SWUdldFNoYXBlKEdEQkxheWVyLCBH
REJTaGFwZUlkKTsKCgoKCgpHREJRdWFkVHJlZSAqIEdEQlF1YWRUcmVlQWxsb2MoR0RCTGF5ZXIg
aExheWVyLCBHREJWZXJ0ZXggKnBzTWluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
REJWZXJ0ZXggKnBzTWF4LCBpbnQgbkRlcHRoKTsKdm9pZCBHREJRdWFkVHJlZUZyZWUoR0RCUXVh
ZFRyZWUgKnBzUVQpOwpUQm9vbCBHREJRdWFkVHJlZVVwZGF0ZShHREJRdWFkVHJlZSAqcHNRVCwg
R0RCU2hhcGVJZCBoU2hhcGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJWZXJ0
ZXggKnBzTWluLCBHREJWZXJ0ZXggKnBzTWF4KTsKCnZvaWQgR0RCUXVhZFRyZWVEZWxldGUoR0RC
UXVhZFRyZWUgKnBzUVQsIEdEQlNoYXBlSWQgaFNoYXBlKTsKCkdEQlF1YWROb2RlICogR0RCVXBR
dWFkVHJlZShHREJRdWFkTm9kZSAqcHNDdXJyZW50LCBHREJRdWFkTm9kZSAqcHNTdGFydCk7CkdE
QlNoYXBlSWQgR0RCSW5jbHVzaXZlU2VhcmNoKEdEQlFUSXRlcmF0b3IgKnBzSXRlcik7CnZvaWQg
R0RCRW5xdWFkTGF5ZXIoR0RCTGF5ZXIpOwp2b2lkIEdEQkRlcXVhZExheWVyKEdEQkxheWVyKTsK
R0RCUXVhZE5vZGUgKiogR0RCR2V0SW5jbHVzaXZlTm9kZUxpc3QoR0RCUXVhZFRyZWUgKiwgR0RC
VmVydGV4ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCVmVydGV4
ICopOwoKCgoKVEJvb2wgR0RCU2V0UmVwQ29kZUZpZWxkKEdEQkxheWVyLCBjaGFyICopOwppbnQg
R0RCR2V0UmVwQ29kZShHREJMYXllciwgR0RCU2hhcGVJZCk7CnZvaWQgR0RCU2V0UmVwQ29kZShH
REJMYXllciwgR0RCU2hhcGVJZCwgaW50KTsKClRCb29sIEdEQlNldEdyb3VwSWRGaWVsZChHREJM
YXllciwgY2hhciAqKTsKaW50IEdEQkdldEdyb3VwSWQoR0RCTGF5ZXIsIEdEQlNoYXBlSWQpOwp2
b2lkIEdEQlNldEdyb3VwSWQoR0RCTGF5ZXIsIEdEQlNoYXBlSWQsIGludCk7CgpUQm9vbCBHREJT
ZXRDaGlsZExpc3RGaWVsZChHREJMYXllciwgY2hhciAqKTsKaW50ICogR0RCR2V0Q2hpbGRMaXN0
KEdEQkxheWVyLCBHREJTaGFwZUlkKTsKdm9pZCBHREJTZXRDaGlsZExpc3QoR0RCTGF5ZXIsIEdE
QlNoYXBlSWQsIGludCAqKTsKClRCb29sIEdEQlNldFRleHRGaWVsZChHREJMYXllciwgY2hhciAq
KTsKY2hhciAqIEdEQkdldFRleHQoR0RCTGF5ZXIsIEdEQlNoYXBlSWQpOwpjaGFyICogR0RCR2V0
VGV4dFF1aWNrbHkoR0RCTGF5ZXIgLCBHREJTaGFwZSAqKTsKdm9pZCBHREJTZXRUZXh0KEdEQkxh
eWVyLCBHREJTaGFwZUlkLCBjaGFyICopOwoKVEJvb2wgR0RCU2V0QW5nbGVGaWVsZChHREJMYXll
ciwgY2hhciAqKTsKVEJvb2wgR0RCR2V0QW5nbGUoR0RCTGF5ZXIsIEdEQlNoYXBlSWQsIGRvdWJs
ZSAqKTsKVEJvb2wgR0RCR2V0QW5nbGVRdWlja2x5KEdEQkxheWVyLCBHREJTaGFwZSAqLCBkb3Vi
bGUgKik7CnZvaWQgR0RCU2V0QW5nbGUoR0RCTGF5ZXIsIEdEQlNoYXBlSWQsIGRvdWJsZSk7CnZv
aWQgR0RCU2V0QW5nbGVVbml0KEdEQkxheWVyLCBHREJBbmdsZVVuaXQpOwp2b2lkIEdEQlNldEFu
Z2xlVW5pdFN0cihHREJMYXllciwgY2hhciopOwpHREJBbmdsZVVuaXQgR0RCR2V0QW5nbGVVbml0
KEdEQkxheWVyKTsKY2hhciAqR0RCR2V0QW5nbGVVbml0U3RyKEdEQkxheWVyKTsKdm9pZCBHREJD
b252ZXJ0QW5nbGUoR0RCQW5nbGVVbml0LCBHREJBbmdsZVVuaXQsIGRvdWJsZSopOwpjaGFyICoq
R0RCR2V0QW5nbGVVbml0c0xpc3QoKTsKClRCb29sIEdEQlNldEhlaWdodEZpZWxkKEdEQkxheWVy
LCBjaGFyICopOwpkb3VibGUgR0RCR2V0SGVpZ2h0KEdEQkxheWVyLCBHREJTaGFwZUlkKTsKVEJv
b2wgR0RCR2V0SGVpZ2h0UXVpY2tseShHREJMYXllciwgR0RCU2hhcGUgKiwgZG91YmxlICopOwp2
b2lkIEdEQlNldEhlaWdodChHREJMYXllciwgR0RCU2hhcGVJZCwgZG91YmxlKTsKCnZvaWQgR0RC
SW5pdFNwZWNpYWxGaWVsZHMoR0RCTGF5ZXIpOwp2b2lkIEdEQlJlSW5pdFNwZWNpYWxGaWVsZHMo
R0RCTGF5ZXIpOwp2b2lkIEdEQlNldFN5c3RlbUZpZWxkKCBHREJMYXllciwgY29uc3QgY2hhciAq
LCBpbnQgKTsKaW50IEdEQkdldFN5c3RlbUZpZWxkKCBHREJMYXllciwgY29uc3QgY2hhciAqICk7
CgoKCgoKdm9pZCBHREJCdWlsZEdyb3VwSW5kZXgoR0RCTGF5ZXIgaExheWVyKTsKdm9pZCBHREJE
ZXN0cm95R3JvdXBJbmRleChHREJMYXllciBoTGF5ZXIpOwpUQm9vbCBHREJBZGRUb0dyb3VwKEdE
QkxheWVyIGhMYXllciwgR0RCU2hhcGVJZCBoU2hhcGVJZCk7CkdEQkdyb3VwIEdEQkdldEdyb3Vw
KEdEQkxheWVyIGhMYXllciwgaW50IGlHcm91cElkKTsKVEJvb2wgR0RCRGVsZXRlRnJvbUdyb3Vw
KEdEQkxheWVyIGhMYXllciwgR0RCU2hhcGVJZCBoU2hhcGVJZCk7ClRCb29sIEdEQlVuR3JvdXAo
R0RCTGF5ZXIgaExheWVyLCBpbnQgaUdyb3VwSWQpOwppbnQgR0RCRmluZEZyZWVHcm91cElkKEdE
QkxheWVyIGhMYXllciwgaW50IGlBZHZpc29yeUdyb3VwSWQpOwpUQm9vbCBHREJQYWNrR3JvdXBz
KEdEQkxheWVyIGhMYXllcik7CmludCBHREJHcm91cEVudGl0aWVzKCBHREJMYXllciBoTGF5ZXIs
IEdEQlNoYXBlSWQgKnBhaEVudGl0aWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IG5FbnRpdGllcyApOwoKCgoKR0RCU2hhcGVJZCAqIEdEQkdldENoaWxkTGlzdENvcHko
R0RCTGF5ZXIgaExheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdEQlNoYXBlSWQgaEVudGl0eSk7CnZvaWQgR0RCQXR0YWNoRW50aXRpZXMoR0RCTGF5ZXIg
aExheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlNo
YXBlSWQgKnBhaEVudGl0aWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBuRW50aXRpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0RCU2hhcGVJZCBoUGFyZW50U2hhcGVJZCk7CkdEQlNoYXBlSWQgR0RCRmluZENo
aWxkTGlzdFBhcmVudChHREJMYXllciBoTGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHREJTaGFwZUlkIGhTaGFwZUlkKTsKR0RCU2hhcGVJZCAq
IEdEQkdldEF0dGFjaGVkRW50aXRpZXMoR0RCTGF5ZXIgaExheWVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlNoYXBlSWQgaFNoYXBlSWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpwbkVu
dGl0aWVzKTsKR0RCU2hhcGVJZCAqIEdEQkRldGFjaEVudGl0aWVzKEdEQkxheWVyIGhMYXllciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCU2hhcGVJZCBo
RW50aXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
KnBuRW50aXRpZXMpOwoKCgoKdm9pZCAqIExvYWRHREJEeW5Gb3JtYXQoY29uc3QgY2hhciAqcHN6
Rm9ybWF0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KnBzekJhc2VOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqcHN6UmVnaXN0ZXJGdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IG5WZXJzaW9uICwgY29uc3QgY2hhciAqIHBzekZpbGVOYW1lKTsKCnZvaWQgQUxMUmVnaXN0ZXIo
IHZvaWQgKTsKdm9pZCBWZWN0b3JSZWdpc3Rlciggdm9pZCApOwp2b2lkIEltYWdlUmVnaXN0ZXIo
IHZvaWQgKTsKdm9pZCBDaGVhcFJlZ2lzdGVyKCB2b2lkICk7Cgp2b2lkIEdEQlJlZ2lzdGVyV2l0
aEpPTFRSZWdpc3RyeSh2b2lkKTsKCkdEQlRlc3RJbmZvX3QgKiBHREJUZXN0SW5mb01hcnNoYWwo
IGNvbnN0IGNoYXIgKiwgRklMRSAqICk7CnZvaWQgR0RCVGVzdEluZm9EZXN0cm95KCBHREJUZXN0
SW5mb190ICogKTsKCmludCBHREJGaWxlbmFtZTJGb3JtYXQoIGNoYXIgKnBzekZpbGVOYW1lICk7
CgoKCgp0eXBlZGVmIHN0cnVjdCBzZWd0eXBlIHsKICBpbnQgbkNvZGU7CiAgY2hhciAqcHN6U2hv
cnROYW1lOwogIGNoYXIgKnBzekxvbmdOYW1lOwp9IFNFR1R5cGU7CgoKZXh0ZXJuIFNFR1R5cGUg
Z2FzVHlwZVRhYmxlW107CgpleHRlcm4gR0RCSW5mb190ICpHREJJbmZvWzIwMF07CiMgMjM1MyAi
Li4vLi4vLi4vbGliL2dkYi5oIgp0eXBlZGVmIGVudW0KewogICAgUGFyc2VyVHlwZUZpbGUsCiAg
ICBQYXJzZXJUeXBlU3RyaW5nCn0gUGFyc2VyVHlwZTsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBQ
YXJzZXJUeXBlIFR5cGU7CiAgICB2b2lkICpTb3VyY2U7CgogICAgY2hhciAqKlN0cmluZzsKICAg
IGludCAqSUQ7CiAgICBpbnQgU2l6ZTsKCiAgICBpbnQgSW5kZXg7CgoKfSBQQVJTRVI7CiMgMjM4
NSAiLi4vLi4vLi4vbGliL2dkYi5oIgpQQVJTRVIgKlBhcnNlckluaXQgKFBhcnNlclR5cGUpOwp2
b2lkIFBhcnNlclRlcm0gKFBBUlNFUiAqKTsKdm9pZCBQYXJzZXJSZXNldCAoUEFSU0VSICosIHZv
aWQgKik7CnZvaWQgUGFyc2VyVG9rZW5SZWdpc3RlciAoUEFSU0VSICosIGNoYXIgKiosIGludCAq
LCBpbnQpOwppbnQgUGFyc2VyVG9rZW5HZXQgKFBBUlNFUiAqLCBjaGFyICopOwojIDI0MTUgIi4u
Ly4uLy4uL2xpYi9nZGIuaCIKdHlwZWRlZiBlbnVtCnsKICAgIEV4cHJUeXBlUHJpbWFyeSwKICAg
IEV4cHJUeXBlQm9vbGVhbkFORCwKICAgIEV4cHJUeXBlQm9vbGVhbk9SLAogICAgRXhwclR5cGVC
b29sZWFuTk9UCn0gRXhwclR5cGU7CgoKCgoKdHlwZWRlZiBlbnVtCnsKICAgIFByaW1hcnlPcEVx
dWFsLAogICAgUHJpbWFyeU9wTGVzcywKICAgIFByaW1hcnlPcEdyZWF0ZXIsCiAgICBQcmltYXJ5
T3BMZXNzRXF1YWwsCiAgICBQcmltYXJ5T3BHcmVhdGVyRXF1YWwsCiAgICBQcmltYXJ5T3BOb3RF
cXVhbAp9IFByaW1hcnlPcDsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IEV4cHIKewogICAgRXhwclR5
cGUgVHlwZTsKICAgIHVuaW9uCiAgICB7CiAgICAgICAgc3RydWN0CiAgICAgICAgewogICAgICAg
ICAgICBjaGFyICpOYW1lOwogICAgICAgICAgICBpbnQgTnVtOwogICAgICAgICAgICBQcmltYXJ5
T3AgT3A7CiAgICAgICAgICAgIGludCBJc0NoYXJWYWx1ZTsKICAgICAgICAgICAgdW5pb24KICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgY2hhciAqQ1ZhbHVlOwogICAgICAgICAgICAgICAg
c3RydWN0CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY2hhciAqTmFtZTsK
ICAgICAgICAgICAgICAgICAgICBpbnQgTnVtOwogICAgICAgICAgICAgICAgfSBGVmFsdWU7CiAg
ICAgICAgICAgIH0gVmFsdWU7CiAgICAgICAgfSBQcmltYXJ5OwoKICAgICAgICBzdHJ1Y3QKICAg
ICAgICB7CiAgICAgICAgICAgIHN0cnVjdCBFeHByICpMZWZ0OwogICAgICAgICAgICBzdHJ1Y3Qg
RXhwciAqUmlnaHQ7CiAgICAgICAgfSBCb29sZWFuOwogICAgfSBEYXRhOwp9IEVYUFI7CiMgMjQ4
MCAiLi4vLi4vLi4vbGliL2dkYi5oIgpFWFBSICpFeHBySW5pdFByaW1hcnkgKGNoYXIgKiwgUHJp
bWFyeU9wLCBjaGFyICosIGludCk7CkVYUFIgKkV4cHJJbml0Qm9vbGVhbiAoRXhwclR5cGUsIEVY
UFIgKiwgRVhQUiAqKTsKdm9pZCBFeHByVGVybSAoRVhQUiAqKTsKdm9pZCBFeHByU2V0TnVtIChF
WFBSICosIGludCk7CnZvaWQgRXhwclNldEZWYWx1ZSAoRVhQUiAqLCBjaGFyICosIGludCk7Cmlu
dCBFeHBySXNGVmFsdWUgKEVYUFIgKik7CmludCBFeHBySXNTdHJpbmdDb25zdGFudCAoRVhQUiAq
KTsKaW50IEV4cHJHZXRGTnVtIChFWFBSICopOwp2b2lkIEV4cHJHZXRQcmltYXJ5IChFWFBSICos
IGNoYXIgKiosIGludCAqLCBQcmltYXJ5T3AgKiwgY2hhciAqKik7CmludCBFeHByRXZhbHVhdGUg
KEVYUFIgKiwgaW50ICgqKShFWFBSICosIHZvaWQgKiksIHZvaWQgKik7CmludCBFeHByVHJhdmVy
c2UgKEVYUFIgKiwgaW50ICgqKShFWFBSICosIHZvaWQgKiksIHZvaWQgKik7CgoKCgp0eXBlZGVm
IHN0cnVjdCB7CiAgY2hhciAqTmFtZTsKICBjaGFyICpEZXNjcmlwdGlvbjsKCiAgaW50IE5TYW1w
bGVzOwogIGludCBOQ2hhbm5lbHM7CgogIGludCAqQ2hhbm5lbDsKICBkb3VibGUgKk1lYW47CiAg
ZG91YmxlICpTdGREZXZpYXRpb247CiAgZG91YmxlICpMb3dlclBQQm91bmQ7CiAgZG91YmxlICpV
cHBlclBQQm91bmQ7CgogIGRvdWJsZSBEZXRlcm1pbmFudDsKICBkb3VibGUgVGhyZXNob2xkOwog
IGRvdWJsZSBCaWFzOwoKICBkb3VibGUgKklDb3ZhcmlhbmNlOwoKICBkb3VibGUgKkNvdmFyaWFu
Y2U7CgogIGludCBFbmNvZGluZzsKfSBTaWduYXR1cmVfdDsKCgoKCgp2b2lkIENoZWNrQ2hhbigg
RklMRSAqLCBjaGFyICosIGludCAqLCBpbnQgKTsKdm9pZCBDaGVja1dpbiggRklMRSAqLCBjaGFy
ICosIGludCAqICk7CiMgMjYxOCAiLi4vLi4vLi4vbGliL2dkYi5oIgp0eXBlZGVmIGludCAoKlRp
bGVSV0Z1bmMpKCBGSUxFICosIHZvaWQgKiwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKiApOwp0
eXBlZGVmIHZvaWQgKCpDaGFuUldGdW5jKSggRklMRSAqLCB2b2lkICosIGludCwgaW50LCB1bnNp
Z25lZCBjaGFyICopOwoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBuTGFzdEFjY2VzczsKICBpbnQg
blhTaXplOwogIGludCBuWVNpemU7CgogIGludCBuVGlsZXM7CiAgaW50ICpwYW5UaWxlQWNjZXNz
OwogIGludCAqcGFuVGlsZUlEOwogIHVuc2lnbmVkIGNoYXIgKipwYXBhYnlUaWxlOwoKICBUaWxl
UldGdW5jIHBmbldyaXRlVGlsZTsKICBUaWxlUldGdW5jIHBmblJlYWRUaWxlOwogIHZvaWQgKnBG
dW5jVG9rZW47Cn0gUmF3Q2hhblRpbGVJbmZvX3Q7Cgp0eXBlZGVmIEdEQk92ZXJ2aWV3SW5mb190
IFJhd092ZXJ2aWV3SW5mb190OwoKdHlwZWRlZiBzdHJ1Y3QgcmluZm8KewogIHN0cnVjdCByaW5m
byAqbmV4dDsKICBGSUxFICpmcFJhdzsKICBpbnQgWFNpemU7CiAgaW50IFlTaXplOwogIGludCBD
aGFubmVsczsKICBpbnQgSW50ZXJsZWF2aW5nOwoKCiAgbG9uZyAqQ2hPZmY7CiAgbG9uZyAqUGl4
ZWxPZmZzZXQ7CiAgbG9uZyAqTGluZU9mZnNldDsKICBpbnQgKkRhdGFUeXBlOwogIGludCAqRGF0
YVNpemU7CiAgY2hhciAqQnl0ZVN3YXBwZWQ7CgoKICBDaGFuUldGdW5jICpXcml0ZUZ1bmM7CiAg
Q2hhblJXRnVuYyAqUmVhZEZ1bmM7CiAgdm9pZCAqKkZ1bmNUb2tlbjsKCgogIGludCBOQml0bWFw
czsKICBsb25nICpCaXRPZmZzZXQ7CiAgbG9uZyAqQml0TGluZU9mZnNldDsKICBpbnQgKkJpdFNl
Z21lbnQ7CiAgaW50ICpCaXRDb21wOwoKCiAgdW5zaWduZWQgY2hhciAqKlJhd0JpdEJ1ZjsKICBs
b25nICpSYXdCaXRCdWZTaXplOwoKICBjaGFyICoqQXV4aWxhcnlJbmZvOwogIFRCb29sIGJBdXhp
bGFyeU1vZGlmaWVkOwoKICB1bnNpZ25lZCBjaGFyICoqTU1hcFB0cjsKCiAgaW50IFJhd09wZW5l
ZDsKCgogIFJhd0NoYW5UaWxlSW5mb190ICoqcGFwc1RpbGVJbmZvOwoKCiAgaW50IG5PdmVydmll
d3M7CiAgaW50IG5NYXhPdmVydmlld3M7CiAgUmF3T3ZlcnZpZXdJbmZvX3QgKnBhc092ZXJ2aWV3
czsKICBUQm9vbCBiUmF3TWFuYWdlZE92ZXJ2aWV3czsKCn0gUmF3SW5mb190OwoKRklMRSAqIFJh
d0NyZWF0ZSggY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQsIGNoYXIgKiApOwpGSUxFICogUmF3
T3BlbiggY2hhciAqLCBjaGFyICosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBsb25nICk7CkZJ
TEUgKiBSYXdSZW9wZW4oIEZJTEUgKiApOwp2b2lkIFJhd0RlZmluZSggRklMRSAqLCBpbnQsIGlu
dCwgaW50LCBpbnQsIGludCwgbG9uZyApOwppbnQgUmF3UHJvbW90ZSggRklMRSAqICk7CmludCBS
YXdDaGFuVHlwZSggRklMRSAqLCBpbnQgKTsKdm9pZCBSYXdTaXplSW5mbyggRklMRSAqLCBpbnQg
KiwgaW50ICosIGludCAqICk7CmludCBSYXdHZW9yZWZJTyggRklMRSAqLCBpbnQsIGNoYXIgKiwg
ZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl
ICosIGRvdWJsZSAqICk7CmludCBSYXdQcm9qZWN0aW9uSU8oIEZJTEUgKiwgaW50LCBQcm9qSW5m
b190ICogKTsKdm9pZCBSYXdTZXRQcm9qZWN0aW9uSW5mbyggR0RCTGF5ZXIsIFByb2pJbmZvX3Qg
KiApOwppbnQgUmF3R2V0UHJvamVjdGlvbkluZm8oIEdEQkxheWVyLCBQcm9qSW5mb190ICogKTsK
dm9pZCBSYXdCeXRlQ2hhbklPKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIGludCwgaW50LCBp
bnQsIGludCAqICk7CnZvaWQgUmF3SW50Q2hhbklPKCBGSUxFICosIGludCwgaW50LCBpbnQsIGlu
dCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyICosIGludCwgaW50
LCBpbnQsIGludCAqICk7CnZvaWQgUmF3UmVhbENoYW5JTyggRklMRSAqLCBpbnQsIGludCwgaW50
LCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKiwgaW50
LCBpbnQsIGludCwgaW50ICogKTsKdm9pZCBSYXdDaGFuSU9fMSggRklMRSAqLCBpbnQsIGludCwg
aW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQgKTsKaW50IFJhd0NoYW5JT19OKCBGSUxFICos
IGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyICosIGludCwgaW50LCBpbnQgKiwgaW50ICk7CnZvaWQgUmF3Q2hh
bklPX01hcHBlZCggRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50LCB1bnNpZ25lZCBjaGFyICosIGludCwgaW50LCBp
bnQsIGludCApOwpUQm9vbCBSYXdDaGFuSU9fT3ZlcnZpZXcoIEZJTEUgKiwgaW50LCBpbnQsIGlu
dCwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQgKTsKdm9pZCBSYXdSZWdpc3RlcigpOwp2b2lk
IEZDTkNoYW5JT18xKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIGludCwgaW50LCBpbnQs
IGludCApOwp2b2lkIEZDTkNoYW5JT19UaWxlZCggRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQs
IGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgKiwgaW50LCBpbnQsIGludCwgaW50ICk7ClRCb29sIEZDTkNoYW5JT19OKCBGSUxFICosIGlu
dCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBpbnQgKiwgaW50ICk7CnZvaWQgRkNOU2V0Q2hh
bkluZm8oIEZJTEUgKiwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENoYW5SV0Z1bmMsIENoYW5SV0Z1bmMsIHZvaWQgKiApOwp2b2lkIEZDTlNldFRpbGVJ
bmZvKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVGlsZVJXRnVuYywgVGlsZVJXRnVuYywgdm9pZCAqICk7CnZvaWQgUmF3
U2V0Q2hhbkluZm8oIEZJTEUgKiwgaW50LCBsb25nLCBsb25nLCBsb25nLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQgKTsKdm9pZCBSYXdTZXRDaGFuQnl0ZVN3YXAo
IEZJTEUgKiwgaW50LCBpbnQgKTsKaW50IFJhd0dldENoYW5JbmZvKCBGSUxFICosIGludCwgY2hh
ciAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICosIGxvbmcg
KiwgbG9uZyAqLCBpbnQgKiApOwpUQm9vbCBSYXdHZXRUaWxlSW5mbyggRklMRSAqLCBpbnQsIGlu
dCAqLCBpbnQgKiApOwoKdm9pZCBSYXdCaXRtYXBJTyggRklMRSAqLCBpbnQsIGludCwgaW50LCBp
bnQsIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hh
ciAqLCBpbnQsIGludCApOwp2b2lkIFJhd1NldEJpdG1hcEluZm8oIEZJTEUgKiwgaW50LCBsb25n
LCBsb25nLCBpbnQgKTsKCnZvaWQgUmF3TWVtQml0bWFwSU8oIEZJTEUgKiwgaW50LCBpbnQsIGlu
dCwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgKiwgaW50LCBpbnQgKTsKdm9pZCBSYXdTZXRNZW1CaXRtYXBJbmZvKCBGSUxFICos
IHVuc2lnbmVkIGNoYXIgKiwgbG9uZywgaW50LCBsb25nLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb25nLCBpbnQgKTsKCmludCBSYXdIaW50KCBGSUxFICogKTsKdm9p
ZCBSYXdDbG9zZSggRklMRSAqICk7CnZvaWQgUmF3Q2xvc2VPdmVydmlld3MoIEZJTEUgKiApOwp2
b2lkIFJhd1N5bmMoIEZJTEUgKiApOwpUQm9vbCBSYXdXcml0ZUF1eEZpbGUoIEZJTEUgKiApOwp2
b2lkIFJhd1N3YXBCdWZmZXIoIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQsIGludCApOwp2b2lk
IFJhd1NlZ0Rlc2NJTyggRklMRSAqLCBpbnQsIGludCwgaW50LCBjaGFyICogKTsKaW50IFJhd0No
YW5EZXNjSU8oIEZJTEUgKiwgaW50LCBpbnQsIGNoYXIgKiApOwp2b2lkIFJhd1NldEF1eERlZklu
Zm8oIEZJTEUgKiApOwpjaGFyICoqIFJhd01ldGFEYXRhSU8oIEZJTEUgKiwgaW50LCBpbnQsIGlu
dCwgY2hhciAqKiApOwpjaGFyICoqIFJhd01ldGFEYXRhSU9XaXRoUENUKCBGSUxFICosIGludCwg
aW50LCBpbnQsIGNoYXIgKiogKTsKCnVuc2lnbmVkIGNoYXIgKlJhd0dldFRpbGUoIEZJTEUgKiBm
cCwgaW50LCBpbnQsIGludCApOwp1bnNpZ25lZCBjaGFyICpSYXdVcGRhdGVUaWxlKCBGSUxFICog
ZnAsIGludCwgaW50LCBpbnQgKTsKdm9pZCBSYXdTeW5jVGlsZXMoIEZJTEUgKiBmcCwgaW50ICk7
CnZvaWQgUmF3V3JpdGVTeW5jVGlsZXMoIEZJTEUgKiBmcCwgaW50ICk7Cgp2b2lkIFJhd1NldENo
YW5PdmVydmlldyggRklMRSAqLCBpbnQsIEZJTEUgKiwgaW50LCBUQm9vbCwgVEJvb2wgKTsKdm9p
ZCBSYXdCdWlsZE92ZXJ2aWV3cyggRklMRSAqLCBpbnQsIGludCAqLCBpbnQsIFRCb29sLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJTVBQcm9ncmVzc0Z1bmMsIHZvaWQgKiApOwpHREJPdmVy
dmlld0luZm9fdCAqCiAgICAgICAgICAgICAgICBSYXdHZXRPdmVydmlld3MoIEZJTEUgKiwgaW50
ICogKTsKCgoKCgojIDEgIi4uLy4uLy4uL2xpYi9scmVmLmgiIDEKIyAyMCAiLi4vLi4vLi4vbGli
L2xyZWYuaCIKZXh0ZXJuICJDIiB7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBGSUxFICpmcDsKICAg
IGNoYXIgKnBzekZpbGVuYW1lOwogICAgaW50IG5SZWZUeXBlOwogICAgaW50IG5MYXllclR5cGU7
CiAgICBpbnQgbkxheWVySW5kZXg7CiAgICBUQm9vbCBiUmVmZXJlbmNlZDsKfSBHREJMUmVmOwoK
dHlwZWRlZiBzdHJ1Y3QKewogICAgaW50IG5SZWZzOwogICAgR0RCTFJlZiAqKnBhcHNTcmNMUmVm
czsKICAgIEdEQkxSZWYgKipwYXBzRHN0TFJlZnM7Cn0gR0RCTFJlZk1hcDsKIyA1MCAiLi4vLi4v
Li4vbGliL2xyZWYuaCIKR0RCTFJlZiAqR0RCUGFyc2VSRUYoRklMRSAqZnAsIGNvbnN0IGNoYXIg
KiBwc3pSZWZTdHJpbmcgKTsKY2hhciAqR0RCQnVpbGRSRUYoaW50IG5SZWZUeXBlLCBjb25zdCBj
aGFyICpwc3pCYXNlRmlsZSwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHN6TGF5
ZXJGaWxlLCBpbnQgbkxheWVyVHlwZSxpbnQgbkxheWVySW5kZXgpOwpHREJMUmVmICpHREJCdWls
ZExSZWYoaW50IG5SZWZUeXBlLCBGSUxFICpmcExheWVyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKnBzekZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBuTGF5ZXJUeXBlLCBpbnQgbkxheWVySW5kZXggKTsKdm9pZCBHREJEZXN0
cm95TFJlZihHREJMUmVmICpwc0xSZWYpOwpHREJMUmVmICpHREJEdXBsaWNhdGVMUmVmKCBHREJM
UmVmICpwc0xSZWYgKTsKdm9pZCBHREJBY2Nlc3NMUmVmKCBHREJMUmVmICpwc0xSZWYgKTsKdm9p
ZCBHREJEZWFjY2Vzc0xSZWYoIEdEQkxSZWYgKnBzTFJlZiApOwpUQm9vbCBHREJMUmVmQ29tcGFy
ZSggY29uc3QgR0RCTFJlZiAqcHNMUmVmMSwgY29uc3QgR0RCTFJlZiAqcHNMUmVmMiApOwoKR0RC
TFJlZk1hcCAqR0RCQWRkVG9MUmVmTWFwKEdEQkxSZWZNYXAgKnBzTFJlZk1hcCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdEQkxSZWYgKnBzU3JjTFJlZiwgR0RCTFJlZiAqcHNEc3RMUmVm
KTsKR0RCTFJlZk1hcCAqR0RCQWRkTGF5ZXJUb0xSZWZNYXAoR0RCTFJlZk1hcCAqcHNMUmVmTWFw
LCBpbnQgblJlZlR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuTGF5
ZXJUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwc3pT
cmNGaWxlLCBpbnQgblNyY0xheWVySW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKnBzekRzdEZpbGUsIGludCBuRHN0TGF5ZXJJbmRleCApOwp2b2lkIEdE
QkRlc3Ryb3lMUmVmTWFwKEdEQkxSZWZNYXAgKnBzTFJlZk1hcCk7CmNoYXIgKkdEQkFwcGx5TFJl
Zk1hcFRvUkVGKEZJTEUgKmZwLCBjb25zdCBjaGFyICpwc3pSRUYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdEQkxSZWZNYXAgKnBzTFJlZk1hcCk7CnZvaWQgR0RCQXBwbHlMUmVmTWFw
VG9MYXllcihGSUxFICpmcCwgaW50IG5MVHlwZSwgaW50IG5MSW5kZXgsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHREJMUmVmTWFwICogcHNMUmVmTWFwKTsKdm9pZCBHREJBcHBseUxS
ZWZNYXBUb0ZpbGUoRklMRSAqZnAsIEdEQkxSZWZNYXAgKnBzTFJlZk1hcCk7CgpjaGFyICpHREJN
b3ZlUkVGKEZJTEUgKmZwT2xkQmFzZSwgY29uc3QgY2hhciAqcHN6UkVGLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBGSUxFICpmcE5ld0Jhc2UpOwpUQm9vbCBHREJNZXRhRGF0YU1vdmVSRUYo
Y2hhciAqKnBhcHN6TWV0YURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RklMRSAqZnBPbGRCYXNlLCBGSUxFICpmcE5ld0Jhc2UpOwp2b2lkIEdEQlNldFZlY3RvckxheWVy
UkVGKEdEQkxheWVyIHBzQmFzZUxheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpwc3pSRUZOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHREJMYXllciBwc1JlZkxheWVyICk7CkdEQkxheWVyIEdEQkdldExheWVyRnJvbVJF
RiggRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBzelJFRiApOwpUQm9vbCBHREJMYXllckFuZFJFRkNv
bXBhcmUoR0RCTGF5ZXIgcHNMYXllciwgRklMRSAqZnAsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHN6UkVGKTsKCn0KIyAyNzcxICIuLi8uLi8uLi9s
aWIvZ2RiLmgiIDIKCkdEQkxSZWYgKiBHREJEZWZhdWx0UENUKCBGSUxFICosIGludCApOwpHREJM
UmVmICogR0RCRGVmYXVsdExVVCggRklMRSAqLCBpbnQgKTsKCgoKCgp2b2lkIENNTFJlZ2lzdGVy
ICh2b2lkKTsKRklMRSAqQ01MQ3JlYXRlIChjaGFyICosIGludCwgaW50LCBpbnQsIGludCwgY2hh
ciAqKTsKdm9pZCBDTUxTZXRDaGFuSW5mbyAoRklMRSAqLCBpbnQsIGludCwgdW5zaWduZWQgY2hh
ciAqLCBsb25nLCBsb25nLCBUQm9vbCk7CgoKCgp2b2lkIE1vdjhVKCBpbnQsIGludCwgaW50LCBp
bnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqKTsKdm9p
ZCBNb3YxNlMoIGludCwgaW50LCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQsIGludCwg
aW50LCB1bnNpZ25lZCBjaGFyICopOwp2b2lkIE1vdjE2VSggaW50LCBpbnQsIGludCwgaW50LCB1
bnNpZ25lZCBjaGFyICosIGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKik7CnZvaWQgTW92
MzJSKCBpbnQsIGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQsIGludCwg
dW5zaWduZWQgY2hhciAqKTsKCmNvbnN0IGNoYXIgKkdEQkNoYW5EYXRhVHlwZTJTdHJpbmcoIGlu
dCBuRGF0YVR5cGUgKTsKClNpZ25hdHVyZV90ICpTaWdDcmVhdGUoIHZvaWQgKTsKdm9pZCBTaWdG
cmVlKCBTaWduYXR1cmVfdCAqICk7CgoKCgoKdm9pZCBDaGVja0NoUmFuZ2UoIGNoYXIgKiwgaW50
ICosIGludCwgaW50LCBpbnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICos
IGludCwgaW50ICk7CnZvaWQgQ2hlY2tEdkNoYW4oIGNoYXIgKiwgaW50ICosIGludCwgaW50ICk7
CnZvaWQgQ2hlY2tEdldpbiggY2hhciAqLCBpbnQgKiwgaW50LCBpbnQgKTsKaW50IENsaXBWZWN0
b3IoIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlICk7CnZvaWQgQml0
V2lzZVNhbXBsZSggdW5zaWduZWQgY2hhciAqLCBsb25nLCBsb25nLCB1bnNpZ25lZCBjaGFyICos
IGxvbmcsIGxvbmcgKTsKClRCb29sIENsaXAzRFZlY3RvciggZG91YmxlICosIGRvdWJsZSAqLCBk
b3VibGUgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl
ICosIGRvdWJsZSAqLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSApOwoKCgoKZXh0ZXJuIGludCBDaGFuMlNpemVUYWJsZVtdOwoK
CgoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQgTkVudHJpZXM7CiAgZG91YmxlICpSYW5nZVN0YXJ0
OwogIGRvdWJsZSAqUmFuZ2VFbmQ7CiAgY2hhciAqKkRlc2NyaXB0aW9uOwoKICBpbnQgTkZpZWxk
czsKICB2b2lkICoqRmllbGRBcnJheTsKICBpbnQgKkZpZWxkVHlwZTsKCiAgZG91YmxlICpEb3Vi
bGVCdWZmZXI7CiAgY2hhciAqU3RyaW5nQnVmZmVyOwp9IEF0dHJpYnV0ZV90OwoKCgoKQXR0cmli
dXRlX3QgKiBJbmdlc3RBdHRyaWJ1dGVzKCBUSW5mb190ICogKTsKaW50IEZpbmRBdHRyaWJ1dGVF
bnRyeSggQXR0cmlidXRlX3QgKiwgZG91YmxlICk7CnZvaWQgRGVzdHJveUF0dHJpYnV0ZXMoIEF0
dHJpYnV0ZV90ICogKTsKCgoKCnZvaWQgSU1QVXBkYXRlRmxvYXRIYXNoKCBkb3VibGUgKiwgZG91
YmxlICk7CmludCBJTVBTdHJpbmdIYXNoKCBjb25zdCBjaGFyICogKTsKZG91YmxlIEdEQlNoYXBl
SGFzaCggR0RCTGF5ZXIsIEdEQlNoYXBlICosIGludCApOwpkb3VibGUgR0RCTGF5ZXJIYXNoKCBH
REJMYXllciwgaW50ICk7ClRCb29sIEdEQlJlcG9ydFdyb25nSGFzaCggY29uc3QgY2hhciAqLCBH
REJMYXllciwgR0RCU2hhcGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50LCBkb3VibGUgKTsKIyAyODY0ICIuLi8uLi8uLi9saWIvZ2RiLmgiCnZvaWQgVERCUmVnaXN0
ZXIoIHZvaWQgKTsKdm9pZCBHREFSZWdpc3Rlciggdm9pZCApOwp2b2lkIFF1YWR0cmVlUmVnaXN0
ZXIoIHZvaWQgKTsKCgoKCgpjaGFyICogX0dEQkNoYW5nZUZpbGVFeHQoIGNvbnN0IGNoYXIgKnBz
ek5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpwc3pOZXdFeHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQm9v
bCBiTWF0Y2hDYXNlICk7Cgp2b2lkIF9HREJVcGRhdGUyREJvdW5kcyhHREJWZXJ0ZXggKnBzQm91
bmRzTWluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJWZXJ0ZXgg
KnBzQm91bmRzTWF4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJT
aGFwZSAqcHNTaGFwZSk7CgpjaGFyICoqIF9HREJUb2tlbml6ZShjaGFyICpwc3pTdHIxLCBjaGFy
ICpwc3pEZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgbk1heFRvaywgY2hhciAqKnBw
c3pOZXh0KTsKCkdEQlZlcnRleCAqIF9HREJFbGxpcHNlKGRvdWJsZSBkZlhDZW50ZXIsIGRvdWJs
ZSBkZllDZW50ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRmWFJhZGl1cywgZG91
YmxlIGRmWVJhZGl1cywKICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZTdGFydEFuZ2xl
LCBkb3VibGUgZGZFbmRBbmdsZSwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgbk1heFNlZ21l
bnRzLCBpbnQgKnBuVmVydGljZXMpOwoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50IG5QaXhl
bHM7CiAgICBpbnQgbkxpbmVzOwogICAgaW50IG5CeXRlczsKICAgIGludCBuQnVmTGluZXM7CiAg
ICBpbnQgbkxpbmVGaXJzdDsKICAgIGludCBuTGluZUxhc3Q7CiAgICB2b2lkICoqcHBJbWFnZTsK
ICAgIHZvaWQgKnBNZW1CbG9jazsKICAgIGludCBuQWNjZXNzTW9kZTsKICAgIFRCb29sIGJJbk1l
bW9yeTsKICAgIEZJTEUgKmZwQnVmOwogICAgY2hhciAqcHN6RmlsZU5hbWU7Cn0KRkJJbmZvVHlw
ZTsKCgoKCgp2b2lkICoqIEZCQWxsb2NJbWFnZShpbnQgblBpeGVscywgaW50IG5MaW5lcywgaW50
IG5CeXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuQnVmTGluZXMsIEZC
SW5mb1R5cGUgKnBzRkJJbmZvKTsKCnZvaWQgRkJGcmVlSW1hZ2UoRkJJbmZvVHlwZSAqcHNGQklu
Zm8pOwoKdm9pZCBGQkFjY2Vzc0xpbmUoaW50IGlMaW5lLCBpbnQgbkxuc0Fib3ZlLCBpbnQgbkxu
c0JlbG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5BY2Nlc3NNb2RlLCBGQklu
Zm9UeXBlICpwc0ZCSW5mbyk7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBBSUlGaWxlSW5mb190CnsK
ICAgIEZJTEUgKmZwOwogICAgY2hhciAqcHN6QnVmOwogICAgaW50IGlQdHI7Cn1BSUlGaWxlSW5m
bzsKCnZvaWQgQUlJUmV3aW5kKEFJSUZpbGVJbmZvICpwc0ZpbGVJbmZvKTsKY2hhciAqQUlJUmVh
ZENvbXByZXNzZWRMaW5lKEFJSUZpbGVJbmZvICpwc0ZpbGVJbmZvKTsKCnZvaWQgX01JRlByb2Nl
c3NDT09SRFNZUyhGSUxFICpmcE1JRiwgUHJvakluZm9fdCAqc1Byb2osCiAgICBkb3VibGUgZGZN
SUYyR0RCVW5pdHMsIGNoYXIgKipwcHN6TGluZSApOwoKdm9pZCBfTUlGV3JpdGVDT09SRFNZUyhG
SUxFICpmcE1JRiwgUHJvakluZm9fdCAqc1Byb2osCiAgICBUQm9vbCBiV3JpdGVFT0wgKTsKCgoK
CgoKR0RCTGF5ZXIgR0RCT2xkR2V0TGF5ZXIoRklMRSAqZnAsIGludCBuU2VnbWVudCk7CkdEQlNo
YXBlSWQgR0RCT2xkR2V0TmV4dFNoYXBlSWQoR0RCTGF5ZXIgcHNMYXllciwgR0RCU2hhcGVJZCBo
U2hhcGVJZCk7CkdEQlNoYXBlSWQgR0RCT2xkQ3JlYXRlU2hhcGUoR0RCTGF5ZXIgcHNMYXllciwg
R0RCU2hhcGVJZCBoSGludElkKTsKR0RCU2hhcGUgKkdEQk9sZEdldFNoYXBlKEdEQkxheWVyIHBz
TGF5ZXIsIEdEQlNoYXBlSWQgaFNoYXBlSWQpOwp2b2lkIEdEQk9sZFNldFNoYXBlKEdEQkxheWVy
IHBzTGF5ZXIsIEdEQlNoYXBlSWQgaFNoYXBlSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
R0RCU2hhcGUgKnBzU2hhcGUpOwppbnQgR0RCT2xkR2V0UHJvamVjdGlvbkluZm8oR0RCTGF5ZXIg
cHNMYXllciwgUHJvakluZm9fdCAqcHNQcm9qKTsKdm9pZCBDcmVhdGVEeW5hbWljQ2FjaGVzKEdE
QkxheWVyIHBzTGF5ZXIpOwp2b2lkIF9HREJEZXJlZ2lzdGVyTGF5ZXJGb3JDbG9zZShGSUxFICpm
cCwgR0RCTGF5ZXIgaExheWVyKTsKdm9pZCBfR0RCRmx1c2hMYXllckNhY2hlKEZJTEUgKmZwKTsK
dm9pZCBfR0RCQ2xlYXJMYXllckNvbXBhdExpc3QoRklMRSAqZnApOwp2b2lkIF9HREJSZWxlYXNl
Q2FjaGUoRklMRSAqZnApOwp2b2lkIEdEQlJlZ2lzdGVyTGF5ZXJGb3JDbG9zZShGSUxFICpmcCwg
R0RCTGF5ZXIgaExheWVyKTsKCgoKCgoKbG9uZyBJbWFnZVN0YXRzKCBGSUxFICosIGludCwgaW50
ICosIGludCwgaW50ICosIGZsb2F0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0
ICosIGZsb2F0ICosIGZsb2F0ICogKTsKaW50IEltYWdlSGlzdG9ncmFtKCBGSUxFICogZnAsIGlu
dCwgaW50ICosIGludCwgaW50ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
KiwgaW50LCBkb3VibGUgKiwgZG91YmxlICosIFRCb29sLCBUQm9vbCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIElNUFByb2dyZXNzRnVuYywgdm9pZCAqICk7CmludCBJbWFnZVNhbXBs
ZWRIaXN0b2dyYW0oIEZJTEUgKiBmcCwgaW50LCBpbnQgKiwgaW50LCBpbnQgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCAqLCBpbnQsIGRvdWJsZSAqLCBkb3VibGUgKiwgVEJv
b2wsIFRCb29sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QUHJvZ3Jlc3NGdW5j
LCB2b2lkICogKTsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQgaUpvaW5OdW1iZXI7CiAg
ICBpbnQgaVByaW1hcnlLZXlGaWVsZDsKICAgIGNoYXIgKnBzelNlY29uZEZpbGVOYW1lOwogICAg
VEJvb2wgYkluUHJpbWFyeUZpbGU7CiAgICBpbnQgblNlY29uZFNlZ21lbnROdW07CiAgICBHREJM
YXllciBwc1NlY29uZGFyeVRhYmxlOwogICAgaW50IGlGb3JlaWduS2V5RmllbGQ7CiAgICBpbnQg
bkFjdGl2ZTsKfSBHREJKb2luSW5mbzsKCkdEQkpvaW5JbmZvICpHREJSZWFkSm9pbnMoR0RCTGF5
ZXIgcHNMYXllcik7CnZvaWQgR0RCUmVtb3ZlSm9pbihHREJMYXllciBwc0xheWVyLGludCBpSm9p
bk51bSk7CnZvaWQgR0RCQWRkSm9pbihHREJMYXllciBwc0xheWVyLGludCBpUHJpbWFyeUtleSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCTGF5ZXIgcHNTZWNvbmRhcnlUYWJs
ZSwgaW50IGlGb3JlaWduS2V5KTsKdm9pZCBHREJBY3RpdmF0ZUpvaW4oR0RCTGF5ZXIgcHNMYXll
cixpbnQgaUpvaW5OdW0pOwp2b2lkIEdEQkRlYWN0aXZhdGVKb2luKEdEQkxheWVyIHBzTGF5ZXIs
IGludCBpSm9pbk51bSk7CnZvaWQgR0RCSm9pblJla2V5KEdEQkxheWVyIHBzTGF5ZXIsaW50IGlK
b2luTnVtLGludCBpTmV3UHJpbWFyeUtleSk7CnZvaWQgR0RCRGVzdHJveUpvaW5JbmZvKEdEQkpv
aW5JbmZvICpwYXNKb2lucyk7CmludCBHREJHZXROdW1iZXJKb2lucyggRklMRSAqZnAsIGludCBu
VHlwZSwgaW50IG5JbmRleCApOwpGSUxFICpHREJBY2Nlc3NMYXllcldpdGhKb2lucyhHREJMYXll
ciBwc1ByaW1hcnlMYXllcik7ClRCb29sIEdEQkNsb3NlSm9pbmVkTGF5ZXJzKEZJTEUgKmZwLCBj
aGFyICoqKnBwYXBzekNsb3NlZEZpbGVzKTsKdm9pZCBHREJDbG9zZUpvaW5GaWxlcyhjaGFyICoq
cGFwc3pDbG9zYWJsZUZpbGVzKTsKVEJvb2wgR0RCSXNKb2luZWRGaWVsZChHREJMYXllciBwc0pv
aW5lZExheWVyLCBpbnQgaUZpZWxkKTsKCgoKCgppbnQgR0RCR2V0TnVtQ21iKCBGSUxFICpmZHBC
YXNlRmlsZSwgaW50IG5CU2VnbWVudCk7ClRCb29sIEdEQkFkZENvbWJpbmVkTGF5ZXIgKEZJTEUg
KmZkcEJhc2VGaWxlLCBpbnQgbkJTZWdtZW50LAogICAgICAgICAgICAgICAgICAgIGNoYXIgKnBz
ekNGaWxlbmFtZSwgaW50IGlDU2VnbWVudCwgY2hhciAqcHN6T3B0aW9uKTsKdm9pZCBHREJSZW1v
dmVDb21iaW5lZExheWVyKEZJTEUgKmZkcEJhc2VGaWxlLCBpbnQgbkJTZWdtZW50LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzekNGaWxlbmFtZSxpbnQgaUNT
ZWdtZW50KTsKCgoKCnZvaWQgR0RCUmFzdGVyQWRkSm9pbiggRklMRSAqZnAsIGludCBpQ2hhbk51
bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCTGF5ZXIgcHNT
ZWNvbmRhcnlUYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlGb3JlaWduS2V5ICk7CnZvaWQgR0RCUmFzdGVyUmVtb3ZlSm9pbiggRklMRSAqZnAsIGlu
dCBpQ2hhbk51bSwgaW50IGlKb2luTnVtICk7CkdEQkpvaW5JbmZvICogR0RCUmFzdGVyUmVhZEpv
aW5zKCBGSUxFICpmcCwgaW50IGlDaGFuTnVtICk7CnZvaWQgR0RCUmFzdGVyQWN0aXZhdGVKb2lu
KCBGSUxFICpmcCwgaW50IGlDaGFuTnVtLCBpbnQgaUpvaW5OdW0gKTsKdm9pZCBHREJSYXN0ZXJE
ZWFjdGl2YXRlSm9pbiggRklMRSAqZnAsIGludCBpQ2hhbk51bSwgaW50IGlKb2luTnVtICk7CkdE
QkxheWVyIEdEQlJhc3RlckdldEpvaW5MYXllciggRklMRSAqZnAsIGludCBpQ2hhbk51bSwgaW50
ICpwbktleUZpZWxkICk7CkdEQkxheWVyIEdEQlJhc3RlckNyZWF0ZUpvaW4oIEZJTEUgKmZwLCBp
bnQgaUNoYW5OdW0sIGNoYXIgKnBzektleUZpZWxkTmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHN6TmFtZSwgY2hhciAqcHN6RGVzYyApOwoK
R0RCRmllbGQgKiBHREJSYXN0ZXJHZXRSZWNvcmRSZWYoIEZJTEUgKmZwLCBpbnQgaUNoYW5OdW0s
IGRvdWJsZSBkZlBpeGVsVmFsdWUgKTsKR0RCRmllbGQgKiBHREJSYXN0ZXJHZXRSZWNvcmQoIEZJ
TEUgKmZwLCBpbnQgaUNoYW5OdW0sIGRvdWJsZSBkZlBpeGVsVmFsdWUgKTsKdm9pZCBHREJSYXN0
ZXJTZXRSZWNvcmQoIEZJTEUgKmZwLCBpbnQgaUNoYW5OdW0sIEdEQkZpZWxkICogcGFzRmllbGRz
ICk7CgpHREJTaGFwZSAqIEdEQlJhc3RlckdldFNoYXBlUmVmKCBGSUxFICpmcCwgaW50IGlDaGFu
TnVtLCBkb3VibGUgZGZQaXhlbFZhbHVlICk7CkdEQlNoYXBlICogR0RCUmFzdGVyR2V0U2hhcGUo
IEZJTEUgKmZwLCBpbnQgaUNoYW5OdW0sIGRvdWJsZSBkZlBpeGVsVmFsdWUgKTsKdm9pZCBHREJS
YXN0ZXJTZXRTaGFwZSggRklMRSAqZnAsIGludCBpQ2hhbk51bSwgR0RCU2hhcGUgKiBwc1NoYXBl
ICk7CgpUQm9vbCBHREJJc1BvaW50SW5zaWRlVmVydGljZXMoR0RCVmVydGV4ICpwc1ZlcnRleCwg
aW50IG5Db3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJW
ZXJ0ZXggKnBhc1ZlcnRpY2VzLCBpbnQgKm5SaW5nU3RhcnQpOwpUQm9vbCBHREJJc1BvaW50SW5z
aWRlT3JPblZlcnRpY2VzKEdEQlZlcnRleCAqcHNWZXJ0ZXgsIGludCBuQ291bnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlZlcnRleCAqcGFzVmVydGlj
ZXMsIGludCAqblJpbmdTdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVEJvb2wgYkFsbG93T24pOwoKZG91YmxlIEdEQkdldERpc3RhbmNlKGNvbnN0IEdE
QlZlcnRleCAqcHNGaXJzdFBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEdEQlZlcnRleCAqcHNTZWNvbmRQb2ludCk7Cgpkb3VibGUgR0RCQ29tcHV0ZVNoYXBlQXJl
YShHREJMYXllciBoTGF5ZXIsIEdEQlNoYXBlSWQgaFNoYXBlSWQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEJvb2wgYkRpc3BsYXlFcnJvciwgVEJvb2wgKmJUb3BvRXJy
b3IpOwpkb3VibGUgR0RCQ29tcHV0ZVNoYXBlUGVyaW1ldGVyKEdEQkxheWVyIGhMYXllciwgR0RC
U2hhcGVJZCBoU2hhcGVJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRCb29sIGJEaXNwbGF5RXJyb3IsIFRCb29sICpiVG9wb0Vycm9yKTsKVEJvb2wgR0RCSXNT
aGFwZUNsb3NlZChHREJMYXllciBoTGF5ZXIsIEdEQlNoYXBlICpwc1NoYXBlKTsKCmNoYXIgKiog
R0RCQ29weUF0dHJpYnV0ZXMoIEdEQkxheWVyIGhOZXdMYXllciwgaW50IG5OdW1iZXJMYXllcnMs
IEdEQkxheWVyICpwYWhMYXllciwgVEJvb2wgYlJldHVybkxpc3QgKTsKCmNoYXIgKiogR0RCTGlz
dE5hbWVzKGNvbnN0IGNoYXIgKnBzekZpbGVOYW1lLCBpbnQgbkxheWVyTGlzdEZsYWcpOwpjaGFy
ICoqIEdEQkxpc3RGaWVsZE5hbWVzKGNvbnN0IGNoYXIgKnBzekZpbGVOYW1lKTsKY2hhciAqIEdE
Qkxpc3RGaWxlTWFzayggaW50IG5TZWdtZW50LCBpbnQgbk1vZGUsIFRCb29sIGJBZGRBbGxGaWxl
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwc3pBZGRp
dGlvbmFsVHlwZXMgKTsKY2hhciAqKiBHREJHZXRWYWxpZEZpZWxkVmFsdWVzKEdEQkxheWVyIGhM
YXllciwgaW50IGlGaWVsZEluZGV4KTsKfQojIDMwICJpbnRlcnZpZXcuaCIgMgoKCgojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvdmVjdG9yIiAxIDMKIyAzMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My92ZWN0b3IiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX3ZlY3Rvci5oIiAxIDMKIyA2MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF92ZWN0b3IuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3Rl
eGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4
Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5l
cy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0
LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24o
dm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190
aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsK
CgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xl
bmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFu
Z2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
ICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZv
aWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA2MiAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyA2NCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAz
NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2Nv
bmZpZy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL29zX2RlZmluZXMuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
ZmVhdHVyZXMuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1s
aW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDIgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDIgMwoKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvbGltaXRzLmgiIDEg
MwojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMv
YysrY29uZmlnLmgiIDIgMwojIDY1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X3BhaXIuaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcGFp
ci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K
c3RydWN0IHBhaXIgewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlwZWRlZiBfVDIgc2Vj
b25kX3R5cGU7CgogIF9UMSBmaXJzdDsKICBfVDIgc2Vjb25kOwoKCgoKICBwYWlyKCkgOiBmaXJz
dCgpLCBzZWNvbmQoKSB7fQoKCgoKICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9f
YikgOiBmaXJzdChfX2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwg
Y2xhc3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3Au
Zmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj
bGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9f
eCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPT0gX195
LmZpcnN0ICYmIF9feC5zZWNvbmQgPT0gX195LnNlY29uZDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf
VDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+
JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0IDwg
X195LmZpcnN0IHx8CiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNl
Y29uZCA8IF9feS5zZWNvbmQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBh
aXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKCnRlbXBsYXRl
IDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHBhaXI8
X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gX195
IDwgX194Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBv
cGVyYXRvcjw9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+
JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwg
Y2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBf
X3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9
CiMgMTM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3BhaXIuaCIgMwp0ZW1w
bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2Vf
cGFpcihfVDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwg
X195KTsKfQoKfQojIDY3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJh
aXRzLmgiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFp
dHMuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251
L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDUwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvdHlwZV90cmFpdHMuaCIgMiAzCiMgODYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy90eXBlX3RyYWl0cy5oIiAzCnRlbXBsYXRlIDxib29sIF9UcnV0aD4gc3RydWN0IF9Cb29sIHt9
Owp0eXBlZGVmIF9Cb29sPHRydWU+IF9fdHJ1ZV90eXBlOwp0eXBlZGVmIF9Cb29sPGZhbHNlPiBf
X2ZhbHNlX3R5cGU7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsK
IyAxMTAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzCiAg
IHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5
cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX19m
YWxzZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry
YWl0czxib29sPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w
eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+
IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0
czxzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5
cGVfdHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBp
c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZz4gewog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVu
c2lnbmVkIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
cGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X190eXBlX3RyYWl0czxsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRv
dWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf
dHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzPF9UcCo+IHsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl
Owp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50ZWdlciB7CiAgdHlw
ZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2lu
dGVnZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu
dGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2lnbmVkIGNoYXI+IHsK
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9J
c19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2Vy
PHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8aW50PiB7CiAg
dHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNf
aW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2ln
bmVkIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg
X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9u
ZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yIHsKICAgdHlwZWRlZiBfX2Zh
bHNlX3R5cGUgX05vcm1hbDsKfTsKCgpuYW1lc3BhY2Ugc3RkIHsKICAgdGVtcGxhdGU8dHlwZW5h
bWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPiBjbGFzcyBfX25vcm1hbF9pdGVyYXRv
cjsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K
c3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3I8IHN0ZDo6X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yLCBfQ29udGFpbmVyPiA+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfTm9ybWFsOwp9Owoj
IDcwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMSAzCiMg
MzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAzCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM4ICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMwojIDEgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgMTQ3ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
MC4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDM5ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMiAzCgpuYW1lc3BhY2Ug
c3RkCnsKICB1c2luZyA6OnB0cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQojIDM4ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMiAzCiMgNDAgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL3N0cmluZy5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9jc3RyaW5nLmgiIDIgMwojIDY2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2NzdHJpbmcuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1lbWNweTsKICB1c2luZyA6
Om1lbW1vdmU7CiAgdXNpbmcgOjpzdHJjcHk7CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6
c3RyY2F0OwogIHVzaW5nIDo6c3RybmNhdDsKICB1c2luZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0
cmNtcDsKICB1c2luZyA6OnN0cmNvbGw7CiAgdXNpbmcgOjpzdHJuY21wOwogIHVzaW5nIDo6c3Ry
eGZybTsKICB1c2luZyA6OnN0cmNzcG47CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0
b2s7CiAgdXNpbmcgOjptZW1zZXQ7CiAgdXNpbmcgOjpzdHJlcnJvcjsKICB1c2luZyA6OnN0cmxl
bjsKCiAgdXNpbmcgOjptZW1jaHI7CgogIGlubGluZSB2b2lkKgogIG1lbWNocih2b2lkKiBfX3As
IGludCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qg
dm9pZCo+KF9fcCksIF9fYywgX19uKTsgfQoKICB1c2luZyA6OnN0cmNocjsKCiAgaW5saW5lIGNo
YXIqCiAgc3RyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0
cmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0
cnBicms7CgogIGlubGluZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hhciog
X19zMikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIq
PihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjpzdHJyY2hyOwoKICBpbmxpbmUgY2hhcioKICBz
dHJyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIo
Y29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7
CgogIGlubGluZSBjaGFyKgogIHN0cnN0cihjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQog
IHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSks
IF9fczIpOyB9Cn0KIyA3MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NsaW1p
dHMuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xpbWl0
cy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAu
My9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N5c2xpbWl0cy5oIiAx
IDMKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
MC4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEyNSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2xpbWl0cy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIg
MwojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
cG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNs
dWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgi
IDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3ICIvdXNy
L2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vzci9pbmNsdWRlL2xpbWl0
cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEgMwojIDE0
OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy94
b3Blbl9saW0uaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUv
Yml0cy94b3Blbl9saW0uaCIgMiAzCiMgMTM2ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0u
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDEzNyAiL3Vzci9p
bmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDE1MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5o
IiAyIDMKIyAxMjYgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
LjMvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vzci9s
b2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL2xpbWl0cy5o
IiAyIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbGltaXRzLmgi
IDIgMwojIDczICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAx
IDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDMK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysr
Y29uZmlnLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nz
dGRsaWIuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3Rk
ZGVmLmgiIDEgMwojIDM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRs
aWIuaCIgMiAzCiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxp
Yi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDIgMwojIDczICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2lu
ZyA6OmRpdl90OwogIHVzaW5nIDo6bGRpdl90OwoKICB1c2luZyA6OmFib3J0OwogIHVzaW5nIDo6
YWJzOwogIHVzaW5nIDo6YXRleGl0OwogIHVzaW5nIDo6YXRvZjsKICB1c2luZyA6OmF0b2k7CiAg
dXNpbmcgOjphdG9sOwogIHVzaW5nIDo6YnNlYXJjaDsKICB1c2luZyA6OmNhbGxvYzsKICB1c2lu
ZyA6OmRpdjsKICB1c2luZyA6OmV4aXQ7CiAgdXNpbmcgOjpmcmVlOwogIHVzaW5nIDo6Z2V0ZW52
OwogIHVzaW5nIDo6bGFiczsKICB1c2luZyA6OmxkaXY7CiAgdXNpbmcgOjptYWxsb2M7CiAgdXNp
bmcgOjptYmxlbjsKICB1c2luZyA6Om1ic3Rvd2NzOwogIHVzaW5nIDo6bWJ0b3djOwogIHVzaW5n
IDo6cXNvcnQ7CiAgdXNpbmcgOjpyYW5kOwogIHVzaW5nIDo6cmVhbGxvYzsKICB1c2luZyA6OnNy
YW5kOwogIHVzaW5nIDo6c3RydG9kOwogIHVzaW5nIDo6c3RydG9sOwogIHVzaW5nIDo6c3RydG91
bDsKICB1c2luZyA6OnN5c3RlbTsKICB1c2luZyA6Ondjc3RvbWJzOwogIHVzaW5nIDo6d2N0b21i
OwoKICBpbmxpbmUgbG9uZwogIGFicyhsb25nIF9faSkgeyByZXR1cm4gbGFicyhfX2kpOyB9Cgog
IGlubGluZSBsZGl2X3QKICBkaXYobG9uZyBfX2ksIGxvbmcgX19qKSB7IHJldHVybiBsZGl2KF9f
aSwgX19qKTsgfQp9CiMgMTI1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nz
dGRsaWIuaCIgMwpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6OmxsZGl2X3Q7CiAgdXNp
bmcgOjpfRXhpdDsKCiAgaW5saW5lIGxvbmcgbG9uZwogIGFicyhsb25nIGxvbmcgX194KSB7IHJl
dHVybiBfX3ggPj0gMCA/IF9feCA6IC1fX3g7IH0KCiAgaW5saW5lIGxvbmcgbG9uZwogIGxsYWJz
KGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxp
bmUgbGxkaXZfdAogIGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZf
dCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4g
X19xOyB9CgogIGlubGluZSBsbGRpdl90CiAgbGxkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25n
IF9fZCkKICB7IGxsZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9f
biAlIF9fZDsgcmV0dXJuIF9fcTsgfQoKICB1c2luZyA6OmF0b2xsOwogIHVzaW5nIDo6c3RydG9m
OwogIHVzaW5nIDo6c3RydG9sbDsKICB1c2luZyA6OnN0cnRvdWxsOwogIHVzaW5nIDo6c3RydG9s
ZDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGRpdl90OwogIHVzaW5n
IF9fZ251X2N4eDo6X0V4aXQ7CiAgdXNpbmcgX19nbnVfY3h4OjphYnM7CiAgdXNpbmcgX19nbnVf
Y3h4OjpsbGFiczsKICB1c2luZyBfX2dudV9jeHg6OmRpdjsKICB1c2luZyBfX2dudV9jeHg6Omxs
ZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6YXRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2Y7
CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG91bGw7
CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2xkOwp9CiMgNzQgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDc1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvbmV3IiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9uZXciIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDEgMwojIDQxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL25ldyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9leGNl
cHRpb24iIDEgMwojIDM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMwpl
eHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgY2xhc3MgZXhjZXB0aW9uCiAg
ewogIHB1YmxpYzoKICAgIGV4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5leGNl
cHRpb24oKSB0aHJvdygpOwoKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0
aHJvdygpOwogIH07CgoKCiAgY2xhc3MgYmFkX2V4Y2VwdGlvbiA6IHB1YmxpYyBleGNlcHRpb24K
ICB7CiAgcHVibGljOgogICAgYmFkX2V4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFs
IH5iYWRfZXhjZXB0aW9uKCkgdGhyb3coKTsKICB9OwoKCiAgdHlwZWRlZiB2b2lkICgqdGVybWlu
YXRlX2hhbmRsZXIpICgpOwoKICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgp
OwoKCiAgdGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikg
dGhyb3coKTsKCgogIHZvaWQgdGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f
XykpOwoKCiAgdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFu
ZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25v
cmV0dXJuX18pKTsKIyA5NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDMK
ICBib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7Cn0KCn0KIyA0MiAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9uZXciIDIgMwoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQK
ewoKCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAg
ICBiYWRfYWxsb2MoKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2FsbG9jKCkgdGhyb3co
KTsKICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190IHsgfTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190
IG5vdGhyb3c7CgoKICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsKCiAgbmV3X2hhbmRs
ZXIgc2V0X25ld19oYW5kbGVyKG5ld19oYW5kbGVyKTsKfQojIDc2ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL25ldyIgMwp2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChz
dGQ6OmJhZF9hbGxvYyk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJvdyAo
c3RkOjpiYWRfYWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICopIHRocm93KCk7CnZv
aWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXco
c3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0
b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9p
ZCBvcGVyYXRvciBkZWxldGUodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7
CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRo
cm93KCk7CgoKaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCAqcGxh
Y2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1td
KHN0ZDo6c2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQoKfQoj
IDc2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyAz
OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMwoKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmln
LmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5o
IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDEg
MwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDMKCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2Nv
bmZpZy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3
ZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0
cnVjdCBjaGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj47
CgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPHdjaGFyX3Q+OwoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAg
ICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj
X3N0cmluZzsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwoKICB0eXBlZGVm
IGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwoKfQojIDQxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvZnBvcy5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGlu
dXgtZ251L2JpdHMvYysraW8uaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9jc3RkaW8iIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2NzdGRp
byIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDEg
MwojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAzCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2Nv
bmZpZy5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3Rk
aW8uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVm
LmgiIDEgMwojIDM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5o
IiAyIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIg
MwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5j
bHVkZS9zdGRpby5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9jc3RkaW8uaCIgMiAzCiMgODYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
Y3N0ZGlvLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpGSUxFOwogIHVzaW5nIDo6ZnBv
c190OwoKICB1c2luZyA6OmNsZWFyZXJyOwogIHVzaW5nIDo6ZmNsb3NlOwogIHVzaW5nIDo6ZmVv
ZjsKICB1c2luZyA6OmZlcnJvcjsKICB1c2luZyA6OmZmbHVzaDsKICB1c2luZyA6OmZnZXRjOwog
IHVzaW5nIDo6ZmdldHBvczsKICB1c2luZyA6OmZnZXRzOwogIHVzaW5nIDo6Zm9wZW47CiAgdXNp
bmcgOjpmcHJpbnRmOwogIHVzaW5nIDo6ZnB1dGM7CiAgdXNpbmcgOjpmcHV0czsKICB1c2luZyA6
OmZyZWFkOwogIHVzaW5nIDo6ZnJlb3BlbjsKICB1c2luZyA6OmZzY2FuZjsKICB1c2luZyA6OmZz
ZWVrOwogIHVzaW5nIDo6ZnNldHBvczsKICB1c2luZyA6OmZ0ZWxsOwogIHVzaW5nIDo6ZndyaXRl
OwogIHVzaW5nIDo6Z2V0YzsKICB1c2luZyA6OmdldGNoYXI7CiAgdXNpbmcgOjpnZXRzOwogIHVz
aW5nIDo6cGVycm9yOwogIHVzaW5nIDo6cHJpbnRmOwogIHVzaW5nIDo6cHV0YzsKICB1c2luZyA6
OnB1dGNoYXI7CiAgdXNpbmcgOjpwdXRzOwogIHVzaW5nIDo6cmVtb3ZlOwogIHVzaW5nIDo6cmVu
YW1lOwogIHVzaW5nIDo6cmV3aW5kOwogIHVzaW5nIDo6c2NhbmY7CiAgdXNpbmcgOjpzZXRidWY7
CiAgdXNpbmcgOjpzZXR2YnVmOwogIHVzaW5nIDo6c3ByaW50ZjsKICB1c2luZyA6OnNzY2FuZjsK
ICB1c2luZyA6OnRtcGZpbGU7CiAgdXNpbmcgOjp0bXBuYW07CiAgdXNpbmcgOjp1bmdldGM7CiAg
dXNpbmcgOjp2ZnByaW50ZjsKICB1c2luZyA6OnZwcmludGY7CiAgdXNpbmcgOjp2c3ByaW50ZjsK
fQojIDE0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMwpu
YW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6OnNucHJpbnRmOwogIHVzaW5nIDo6dmZzY2Fu
ZjsKICB1c2luZyA6OnZzY2FuZjsKICB1c2luZyA6OnZzbnByaW50ZjsKICB1c2luZyA6OnZzc2Nh
bmY7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6c25wcmludGY7CiAgdXNp
bmcgX19nbnVfY3h4Ojp2ZnNjYW5mOwogIHVzaW5nIF9fZ251X2N4eDo6dnNjYW5mOwogIHVzaW5n
IF9fZ251X2N4eDo6dnNucHJpbnRmOwogIHVzaW5nIF9fZ251X2N4eDo6dnNzY2FuZjsKfQojIDMy
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2NzdGRpbyIgMiAzCiMgMzYgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMSAz
CiMgMTAyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMv
Z3Roci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2d0aHItc2luZ2xlLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1zaW5nbGUuaCIgMwp0eXBlZGVmIGludCBfX2d0
aHJlYWRfbXV0ZXhfdDsKIyAyMTEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1s
aW51eC1nbnUvYml0cy9ndGhyLXNpbmdsZS5oIiAzCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVh
ZF9hY3RpdmVfcCAodm9pZCkKewogIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0
aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3QgKiApCnsKICByZXR1cm4gMDsKfQoK
c3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9tdXRl
eF90ICogKQp7CiAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRl
eF91bmxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICogKQp7CiAgcmV0dXJuIDA7Cn0KIyAxMDMgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgiIDIg
MwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMv
YysraW8uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdHlwZWRlZiBsb25nIHN0cmVhbW9mZjsK
ICB0eXBlZGVmIHB0cmRpZmZfdCBzdHJlYW1zaXplOwoKICB0eXBlZGVmIHB0cmRpZmZfdCB3c3Ry
ZWFtc2l6ZTsKCiAgdHlwZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBvczsKCiAgdHlwZWRlZiBfX2d0
aHJlYWRfbXV0ZXhfdCBfX2NfbG9jazsKCgoKICB0eXBlZGVmIEZJTEUgX19jX2ZpbGVfdHlwZTsK
CgogIHN0cnVjdCBfX2lvc19mbGFncwogIHsKICAgIHR5cGVkZWYgc2hvcnQgX19pbnRfdHlwZTsK
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19ib29sYWxwaGEgPSAweDAwMDE7CiAgICBz
dGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19kZWMgPSAweDAwMDI7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19maXhlZCA9IDB4MDAwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX2hleCA9IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ludGVybmFs
ID0gMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfbGVmdCA9IDB4MDAyMDsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX29jdCA9IDB4MDA0MDsKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX3JpZ2h0ID0gMHgwMDgwOwogICAgc3RhdGljIGNvbnN0IF9faW50
X3R5cGUgX1Nfc2NpZW50aWZpYyA9IDB4MDEwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX3Nob3diYXNlID0gMHgwMjAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hv
d3BvaW50ID0gMHgwNDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvcyA9
IDB4MDgwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NraXB3cyA9IDB4MTAwMDsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VuaXRidWYgPSAweDIwMDA7CiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU191cHBlcmNhc2UgPSAweDQwMDA7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19hZGp1c3RmaWVsZCA9IDB4MDAyMCB8IDB4MDA4MCB8IDB4MDAxMDsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jhc2VmaWVsZCA9IDB4MDAwMiB8IDB4MDA0
MCB8IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Zsb2F0ZmllbGQgPSAw
eDAxMDAgfCAweDAwMDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JhZGJpdCA9
IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19lb2ZiaXQgPSAweDAyOwogICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmFpbGJpdCA9IDB4MDQ7CgoKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX2FwcCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19hdGUgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmluID0gMHgw
NDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2luID0gMHgwODsKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX291dCA9IDB4MTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU190cnVuYyA9IDB4MjA7CiAgfTsKfQojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvZnBvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2N3Y2hhci5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
d2NoYXIuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1n
bnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY3djaGFyLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9jd2NoYXIuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9jdGltZS5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
dGltZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVm
LmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgi
IDIgMwojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAx
IDMKIyA0MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCiMgMTE4ICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAzCnN0cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsKICBpbnQgdG1fbWluOwogIGludCB0bV9o
b3VyOwogIGludCB0bV9tZGF5OwogIGludCB0bV9tb247CiAgaW50IHRtX3llYXI7CiAgaW50IHRt
X3dkYXk7CiAgaW50IHRtX3lkYXk7CiAgaW50IHRtX2lzZHN0OwoKCiAgbG9uZyBpbnQgdG1fZ210
b2ZmOwogIF9fY29uc3QgY2hhciAqdG1fem9uZTsKCgoKCn07CgoKCgpzdHJ1Y3QgaXRpbWVyc3Bl
YwogIHsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAgIHN0cnVjdCB0aW1lc3Bl
YyBpdF92YWx1ZTsKICB9OwoKCnN0cnVjdCBzaWdldmVudDsKIyAxNjMgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDMKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB0
aW1lX3QgdGltZSAodGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGRp
ZmZ0aW1lICh0aW1lX3QgX190aW1lMSwgdGltZV90IF9fdGltZTApCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiB0aW1lX3QgbWt0aW1lIChzdHJ1Y3Qg
dG0gKl9fdHApIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKl9f
cmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGNoYXIgKnN0cnB0aW1lIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgc3RydWN0IHRtICpf
X3RwKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAoX19jb25z
dCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRp
bWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzdHJ1Y3Qg
dG0gKmdtdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgp
OwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVz
dHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAq
X19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lIChfX2Nv
bnN0IHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lIChfX2Nv
bnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICphc2N0aW1l
X3IgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpj
dGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh
ciAqX190em5hbWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IF9f
dGltZXpvbmU7CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRlcm4gdm9pZCB0enNl
dCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25nIGlu
dCB0aW1lem9uZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193aGVu
KSB0aHJvdyAoKTsKIyAyNzEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRpbWVfdCB0
aW1lZ20gKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9j
YWwgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBf
X3llYXIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4g
aW50IG5hbm9zbGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUs
CiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBz
dHJ1Y3QgdGltZXNwZWMgKl9fcmVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dldHRp
bWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29u
c3Qgc3RydWN0IHRpbWVzcGVjICpfX3RwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNs
b2NrX25hbm9zbGVlcCAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIGludCBfX2ZsYWdzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCBfX3BpZCwgY2xvY2tpZF90
ICpfX2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9j
a2lkX3QgX19jbG9ja19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVu
dCAqX19yZXN0cmljdCBfX2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9f
cmVzdHJpY3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSAo
dGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfc2V0dGltZSAo
dGltZXJfdCBfX3RpbWVyaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1ZSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwg
c3RydWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0
aW1lcl9nZXRvdmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7CiMgMzQyICIvdXNy
L2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CgoKCgoKZXh0ZXJuIHN0
cnVjdCB0bSAqZ2V0ZGF0ZSAoX19jb25zdCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CiMgMzU3
ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9yIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0g
Kl9fcmVzdHJpY3QgX19yZXNidWZwKSB0aHJvdyAoKTsKCgoKfQojIDQxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDIgMwojIDUzICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpj
bG9ja190OwogIHVzaW5nIDo6dGltZV90OwogIHVzaW5nIDo6dG07CgogIHVzaW5nIDo6Y2xvY2s7
CiAgdXNpbmcgOjpkaWZmdGltZTsKICB1c2luZyA6Om1rdGltZTsKICB1c2luZyA6OnRpbWU7CiAg
dXNpbmcgOjphc2N0aW1lOwogIHVzaW5nIDo6Y3RpbWU7CiAgdXNpbmcgOjpnbXRpbWU7CiAgdXNp
bmcgOjpsb2NhbHRpbWU7CiAgdXNpbmcgOjpzdHJmdGltZTsKfQojIDQwICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMKIyA0MyAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5o
IiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVh
dHVyZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyAzNyAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS93Y2hh
ci5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wLjMvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAy
IDMKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIg
MwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDIgMwojIDg1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp0eXBlZGVmIF9fbWJz
dGF0ZV90IG1ic3RhdGVfdDsKIyAxMDUgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnN0cnVjdCB0
bTsKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY3B5ICh3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY3B5ICh3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpl
eHRlcm4gd2NoYXJfdCAqd2NzY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJv
dyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjc2NtcCAoX19j
b25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHdjc25jbXAgKF9fY29uc3Qg
d2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IHdjc2Nhc2Vj
bXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHdjc25jYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29u
c3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMTQ0ICIvdXNyL2lu
Y2x1ZGUvd2NoYXIuaCIgMiAzCgpleHRlcm4gaW50IF9fd2NzY2FzZWNtcF9sIChfX2NvbnN0IHdj
aGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9fd2NzbmNhc2Vj
bXBfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgd2NzY29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2Nv
bnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRl
cm4gaW50IF9fd2NzY29sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJf
dCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg
KCk7CgoKCmV4dGVybiBzaXplX3QgX193Y3N4ZnJtX2wgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qg
d2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19s
b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19jb25z
dCB3Y2hhcl90ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoK
CmV4dGVybiB3Y2hhcl90ICp3Y3NjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3Qg
X193YykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3
Y2hhcl90ICp3Y3NyY2hyIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJf
dCAqd2NzY2hybnVsIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX3djKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Nj
c3BuIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qg
d2Nzc3BuIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFy
X3QgKndjc3BicmsgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19h
Y2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4g
d2NoYXJfdCAqd2Nzc3RyIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2No
YXJfdCAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3N3Y3MgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywg
X19jb25zdCB3Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2NoYXJfdCAqX19yZXN0cmlj
dCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf
X3B0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAq
X19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHNpemVf
dCB3Y3NubGVuIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndt
ZW1jaHIgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHdtZW1j
bXAgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5
ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4
dGVybiB3Y2hhcl90ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpf
X3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0
ICh3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiB3Y2hhcl90ICp3bWVtcGNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXpl
X3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2Mp
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBtYnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCk7CgoK
CmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19u
LAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19wKSB0aHJvdyAoKTsKCgpleHRl
cm4gc2l6ZV90IHdjcnRvbWIgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCB3Y2hhcl90IF9fd2MsCiAg
ICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgp
OwoKCmV4dGVybiBzaXplX3QgX19tYnJsZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ms
IHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmlj
dCBfX3BzKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBtYnJsZW4gKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3Qg
Kl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCmV4dGVybiBfX2lubGluZSBzaXplX3QgbWJy
bGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgp
CnsgcmV0dXJuIChfX3BzICE9IF9fbnVsbAogICAgICAgICAgPyBtYnJ0b3djIChfX251bGwsIF9f
cywgX19uLCBfX3BzKSA6IF9fbWJybGVuIChfX3MsIF9fbiwgX19udWxsKSk7IH0KCgoKCmV4dGVy
biBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9f
bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMp
IHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAoY2hhciAqX19yZXN0cmljdCBf
X2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJp
Y3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVf
dCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IG1ic25ydG93
Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbm1jLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMp
IHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25ydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0
cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ud2MsIHNpemVf
dCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3Qg
X19wcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgd2N3aWR0aCAod2NoYXJfdCBfX2MpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IHdjc3dpZHRoIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSB3Y3N0b2QgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoq
X19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCB3Y3N0b2YgKF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIHdj
aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91Ymxl
IHdjc3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQg
d2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg
X19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25n
IGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxv
bmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf
X2Jhc2UpIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQg
d2NzdG9sbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh
c2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcg
bG9uZyBpbnQgd2NzdG91bGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf
X2Jhc2UpIHRocm93ICgpOwojIDQwNiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyA0MDcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMK
CgoKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9j
YWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91
bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3Qg
X19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3dj
c3RvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xv
YykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50
IF9fd2NzdG91bGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJs
ZSBfX3djc3RvZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2Fs
ZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2wgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICB3
Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJv
dyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfbCAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2lu
dGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f
Z3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3djc3RvZl9pbnRlcm5hbCAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAg
dGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfaW50ZXJuYWwgKF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv
bmcgaW50IF9fd2NzdG9sX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jh
c2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9f
d2NzdG91bF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0
cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4
dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9pbnRl
cm5hbCAoX19jb25zdCB3Y2hhcl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKioKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2VuZHB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
YmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSB3Y3N0
b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKeyBy
ZXR1cm4gX193Y3N0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOyB9CmV4dGVybiBf
X2lubGluZSBsb25nIGludCB3Y3N0b2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0
aHJvdyAoKQp7IHJldHVybiBfX3djc3RvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19i
YXNlLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkK
eyByZXR1cm4gX193Y3N0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDAp
OyB9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG9mX2ludGVybmFsIChf
X25wdHIsIF9fZW5kcHRyLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgd2NzdG9s
ZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAo
KQp7IHJldHVybiBfX3djc3RvbGRfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOyB9CgoK
X19leHRlbnNpb25fXwpleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKeyByZXR1cm4gX193
Y3N0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9Cl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19j
b25zdCB3Y2hhcl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAo
KQp7IHJldHVybiBfX3djc3RvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us
IDApOyB9CgoKCgoKCgpleHRlcm4gd2NoYXJfdCAqd2NwY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9f
Y29uc3Qgd2NoYXJfdCAqX19zcmMpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NwbmNw
eSAod2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjLCBzaXplX3QgX19uKQog
ICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmd2lkZSAoX19GSUxFICpfX2ZwLCBpbnQg
X19tb2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmd3ByaW50ZiAoX19GSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHdwcmludGYg
KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgp
IDsKCmV4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg
X19uLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19m
b3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJuIGludCB2ZndwcmludGYgKF9fRklM
RSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz
dCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3cHJpbnRmIChfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192
YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZzd3ByaW50ZiAod2No
YXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg
ICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKCmV4dGVybiBpbnQgZndz
Y2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsK
CmV4dGVybiBpbnQgd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHN3c2NhbmYgKF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCgoKZXh0ZXJuIGludCB2
ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBf
X2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3c2NhbmYg
KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAg
ICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZzd3Nj
YW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgoKCmV4dGVybiB3aW50
X3QgZmdldHdjIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBnZXR3
YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhciAo
dm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3QgZnB1dHdjICh3Y2hhcl90IF9fd2MsIF9f
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IHB1dHdjICh3Y2hhcl90IF9f
d2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgcHV0d2NoYXIg
KHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gd2NoYXJfdCAqZmdldHdzICh3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgIF9f
RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmcHV0d3Mg
KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAogICAgICAgICAgICAgICAgICAgX19G
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCB1bmdl
dHdjICh3aW50X3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu
IHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy
biB3aW50X3QgZ2V0d2NoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB3aW50
X3QgZmdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4g
d2ludF90IGZwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBf
X0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhcl91bmxvY2tl
ZCAod2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3c191bmxv
Y2tlZCAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgZnB1dHdzX3VubG9ja2VkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBzaXplX3Qgd2NzZnRpbWUgKHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwojIDY4MCAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKfQojIDQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMKIyA1OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jd2NoYXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1ic3RhdGVfdDsK
fQojIDEyMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMwpu
YW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OndpbnRfdDsKCiAgdXNpbmcgOjpidG93YzsKICB1c2lu
ZyA6OmZnZXR3YzsKICB1c2luZyA6OmZnZXR3czsKICB1c2luZyA6OmZwdXR3YzsKICB1c2luZyA6
OmZwdXR3czsKICB1c2luZyA6OmZ3aWRlOwogIHVzaW5nIDo6ZndwcmludGY7CiAgdXNpbmcgOjpm
d3NjYW5mOwogIHVzaW5nIDo6Z2V0d2M7CiAgdXNpbmcgOjpnZXR3Y2hhcjsKICB1c2luZyA6Om1i
cmxlbjsKICB1c2luZyA6Om1icnRvd2M7CiAgdXNpbmcgOjptYnNpbml0OwogIHVzaW5nIDo6bWJz
cnRvd2NzOwogIHVzaW5nIDo6cHV0d2M7CiAgdXNpbmcgOjpwdXR3Y2hhcjsKICB1c2luZyA6OnN3
cHJpbnRmOwogIHVzaW5nIDo6c3dzY2FuZjsKICB1c2luZyA6OnVuZ2V0d2M7CiAgdXNpbmcgOjp2
ZndwcmludGY7CiAgdXNpbmcgOjp2ZndzY2FuZjsKICB1c2luZyA6OnZzd3ByaW50ZjsKICB1c2lu
ZyA6OnZzd3NjYW5mOwogIHVzaW5nIDo6dndwcmludGY7CiAgdXNpbmcgOjp2d3NjYW5mOwogIHVz
aW5nIDo6d2NydG9tYjsKICB1c2luZyA6Ondjc2NhdDsKICB1c2luZyA6Ondjc2NtcDsKICB1c2lu
ZyA6Ondjc2NvbGw7CiAgdXNpbmcgOjp3Y3NjcHk7CiAgdXNpbmcgOjp3Y3Njc3BuOwogIHVzaW5n
IDo6d2NzZnRpbWU7CiAgdXNpbmcgOjp3Y3NsZW47CiAgdXNpbmcgOjp3Y3NuY2F0OwogIHVzaW5n
IDo6d2NzbmNtcDsKICB1c2luZyA6Ondjc25jcHk7CiAgdXNpbmcgOjp3Y3NydG9tYnM7CiAgdXNp
bmcgOjp3Y3NzcG47CiAgdXNpbmcgOjp3Y3N0b2Q7CiAgdXNpbmcgOjp3Y3N0b2Y7CiAgdXNpbmcg
Ojp3Y3N0b2s7CiAgdXNpbmcgOjp3Y3N0b2w7CiAgdXNpbmcgOjp3Y3N0b3VsOwogIHVzaW5nIDo6
d2NzeGZybTsKICB1c2luZyA6OndjdG9iOwogIHVzaW5nIDo6d21lbWNtcDsKICB1c2luZyA6Ondt
ZW1jcHk7CiAgdXNpbmcgOjp3bWVtbW92ZTsKICB1c2luZyA6OndtZW1zZXQ7CiAgdXNpbmcgOjp3
cHJpbnRmOwogIHVzaW5nIDo6d3NjYW5mOwoKICB1c2luZyA6Ondjc2NocjsKCiAgaW5saW5lIHdj
aGFyX3QqCiAgd2NzY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2Nz
Y2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3
Y3NwYnJrOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NwYnJrKHdjaGFyX3QqIF9fczEsIHdjaGFy
X3QqIF9fczIpCiAgeyByZXR1cm4gd2NzcGJyayhjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihf
X3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3Y3NyY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3
Y3NyY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2NzcmNocihjb25z
dF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5nIDo6d2Nzc3RyOwoK
ICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NzdHIod2NoYXJfdCogX19zMSwgd2NoYXJfdCogX19zMikK
ICB7IHJldHVybiB3Y3NzdHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIp
OyB9CgogIHVzaW5nIDo6d21lbWNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd21lbWNocih3Y2hh
cl90KiBfX3AsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogIHsgcmV0dXJuIHdtZW1jaHIoY29u
c3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jLCBfX24pOyB9Cn0KCgoKCgoKCm5hbWVz
cGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6d2NzdG9sZDsKICB1c2luZyA6Ondjc3RvbGw7CiAg
dXNpbmcgOjp3Y3N0b3VsbDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4Ojp3
Y3N0b2xkOwogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sbDsKICB1c2luZyBfX2dudV9jeHg6Ondj
c3RvdWxsOwp9CiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mcG9zLmgiIDIg
MwoKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNs
YXNzIGZwb3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX1N0YXRlVCBfX3N0YXRl
X3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgc3RyZWFtb2ZmIF9NX29mZjsKICAgICAgX19zdGF0
ZV90eXBlIF9NX3N0OwoKICAgIHB1YmxpYzoKICAgICAgX19zdGF0ZV90eXBlCiAgICAgIHN0YXRl
KCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAgICAgIHZvaWQKICAgICAgc3RhdGUoX19zdGF0
ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9CgoKCiAgICAgIGZwb3MoKTogX01fb2ZmKHN0
cmVhbW9mZigpKSwgX01fc3QoX19zdGF0ZV90eXBlKCkpIHsgfQoKICAgICAgZnBvcyhzdHJlYW1v
ZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpCiAgICAgIDogX01f
b2ZmKF9fb2ZmKSwgX01fc3QoX19zdCkgeyB9CgogICAgICBvcGVyYXRvciBzdHJlYW1vZmYoKSBj
b25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yKz0oc3Ry
ZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBm
cG9zJgogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgLT0gX19vZmY7
IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvcisoc3RyZWFtb2ZmIF9f
b2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCArPSBfX29m
ZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9y
LShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAg
ICAgX190IC09IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGJvb2wK
ICAgICAgb3BlcmF0b3I9PShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4g
X01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvciE9KGNv
bnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19wb3MuX01f
b2ZmOyB9CgogICAgICBzdHJlYW1vZmYKICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBfTV9vZmY7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2ZmIF9fb2Zm
KSB7IF9NX29mZiA9IF9fb2ZmOyB9CiAgICB9OwoKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4g
c3RyZWFtcG9zOwoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiB3c3RyZWFtcG9zOwoKfQojIDQy
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0
ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190
aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsK
CiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xv
Z2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRl
cmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWls
dXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA0MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9pb3Nmd2QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNs
YXNzIGJhc2ljX2lvczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz
PF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFz
cyBiYXNpY19vc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+LAogICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJU
PiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlw
ZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmlu
Z3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0g
Y2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0
b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAog
ICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNz
IGJhc2ljX3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19maWxlYnVm
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry
YWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAg
IGNsYXNzIGJhc2ljX29mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZzdHJl
YW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf
dHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJU
PiA+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOwoKCgogIGNsYXNzIGlvc19iYXNlOwoK
CiAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVm
PGNoYXI+IHN0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVhbTsK
ICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lv
c3RyZWFtPGNoYXI+IGlvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0
cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0cmVh
bTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsKICB0
eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBi
YXNpY19maWxlYnVmPGNoYXI+IGZpbGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFy
PiBpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwogIHR5
cGVkZWYgYmFzaWNfZnN0cmVhbTxjaGFyPiBmc3RyZWFtOwoKCiAgdHlwZWRlZiBiYXNpY19pb3M8
d2NoYXJfdD4gd2lvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiB3c3RyZWFt
YnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiB3aXN0cmVhbTsKICB0eXBlZGVm
IGJhc2ljX29zdHJlYW08d2NoYXJfdD4gd29zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVh
bTx3Y2hhcl90PiB3aW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8d2NoYXJfdD4g
d3N0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08d2NoYXJfdD4gd2lzdHJp
bmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdvc3RyaW5n
c3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdzdHJpbmdzdHJl
YW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+IHdmaWxlYnVmOwogIHR5cGVkZWYg
YmFzaWNfaWZzdHJlYW08d2NoYXJfdD4gd2lmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJl
YW08d2NoYXJfdD4gd29mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTx3Y2hhcl90PiB3
ZnN0cmVhbTsKCn0KIyA3OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJh
dG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNjkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyA3MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQK
ewoKc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IG91dHB1dF9pdGVyYXRvcl90
YWcge307CnN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9pdGVyYXRv
cl90YWcge307CnN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBmb3J3
YXJkX2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIDog
cHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9OwoKCgoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7CiAgdHlwZWRl
ZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFs
dWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBf
VHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnN0cnVjdCBvdXRwdXRf
aXRlcmF0b3IgewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29y
eTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90
eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBmb3J3YXJkX2l0
ZXJhdG9yIHsKICB0eXBlZGVmIGZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5
OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5j
ZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rp
c3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVm
IF9UcCYgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNl
PiBzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvciB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNz
X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl
OwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9p
bnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9DYXRl
Z29yeSwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICBj
bGFzcyBfUG9pbnRlciA9IF9UcCosIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmPgpzdHJ1Y3QgaXRl
cmF0b3IgewogIHR5cGVkZWYgX0NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYg
X1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgX1BvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNlOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2Nh
dGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5
cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgcG9pbnRlcjsK
ICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogIHR5cGVk
ZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRl
ZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gewogIHR5
cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlw
ZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7
CiAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVy
ZW5jZTsKfTsKIyAxNzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0
b3JfYmFzZV90eXBlcy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cl9faXRlcmF0b3JfY2F0
ZWdvcnkoY29uc3QgX0l0ZXImKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CiAgcmV0dXJuIF9DYXRlZ29yeSgp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCl9fZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYp
CnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6
ZGlmZmVyZW5jZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqCl9fdmFsdWVfdHlwZShj
b25zdCBfSXRlciYpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyPjo6dmFsdWVfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+Cmlu
bGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQpp
dGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX2l0ZXJhdG9yX2Nh
dGVnb3J5KF9faSk7IH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCmRpc3RhbmNlX3R5cGUoY29u
c3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19kaXN0YW5jZV90eXBlKF9faSk7IH0KCnRlbXBsYXRl
IDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZh
bHVlX3R5cGUqCnZhbHVlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX192YWx1ZV90
eXBlKF9faSk7IH0KCn0KIyA3OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h
bGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0
ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzCiMgNjkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNiAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMiAzCiMgNzAgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAy
IDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwg
Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfRGlz
dGFuY2UmIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB3aGlsZSAo
X19maXJzdCAhPSBfX2xhc3QpIHsgKytfX2ZpcnN0OyArK19fbjsgfQp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9f
ZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICBfRGlzdGFuY2UmIF9fbiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgX19uICs9IF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBkaXN0
YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QsIF9EaXN0YW5jZSYgX19uKQp7CgogIF9fZGlzdGFuY2UoX19maXJzdCwg
X19sYXN0LCBfX24sIGl0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCl9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZl
cmVuY2VfdHlwZSBfX24gPSAwOwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgKytf
X2ZpcnN0OyArK19fbjsKICB9CiAgcmV0dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg
ICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6
ZGlmZmVyZW5jZV90eXBlCmRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCkKewoKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w
dXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICBfQ2F0ZWdvcnk7CiAgcmV0dXJuIF9f
ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfQ2F0ZWdvcnkoKSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfSW5w
dXRJdGVyJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICB3aGlsZSAoX19uLS0pICsrX19pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u
YWxJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0JpZGly
ZWN0aW9uYWxJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICAgICAgICAg
ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgaWYgKF9fbiA+IDApCiAgICB3aGlsZSAoX19uLS0pICsrX19pOwogIGVsc2UKICAgIHdo
aWxlIChfX24rKykgLS1fX2k7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICAgICAgICAgICAgcmFuZG9t
X2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgX19p
ICs9IF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFu
Y2U+CmlubGluZSB2b2lkIGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9f
bikKewoKICBfX2FkdmFuY2UoX19pLCBfX24sIGl0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwp9Cgp9
CiMgODAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAxIDMK
IyA2MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCm5h
bWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGJhY2tfaW5z
ZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsKcHVibGlj
OgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9p
dGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7
CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsK
ICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBleHBsaWNpdCBiYWNrX2luc2VydF9pdGVyYXRv
cihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAgYmFja19pbnNlcnRfaXRl
cmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6
OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsKICAgIGNvbnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUp
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxf
Q29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgYmFja19pbnNlcnRf
aXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmlubGluZSBiYWNrX2luc2VydF9pdGVyYXRv
cjxfQ29udGFpbmVyPiBiYWNrX2luc2VydGVyKF9Db250YWluZXImIF9feCkgewogIHJldHVybiBi
YWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0NvbnRhaW5lcj4KY2xhc3MgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9D
b250YWluZXIqIGNvbnRhaW5lcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWlu
ZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7
CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlw
ZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBl
eHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5l
cigmX194KSB7fQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRv
cj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAg
Y29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBm
cm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0
aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkg
eyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9w
ZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Db250
YWluZXI+CmlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gZnJvbnRfaW5z
ZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxf
Q29udGFpbmVyPihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgaW5z
ZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsKICB0eXBl
bmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFp
bmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRv
cl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlm
ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZl
cmVuY2U7CgogIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250
YWluZXI6Oml0ZXJhdG9yIF9faSkKICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9faSkge30K
ICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1l
IF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsKICAgIGl0ZXIgPSBjb250YWluZXIt
Pmluc2VydChpdGVyLCBfX3ZhbHVlKTsKICAgICsraXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhp
czsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJu
ICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkg
eyByZXR1cm4gKnRoaXM7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyLCBjbGFzcyBf
SXRlcmF0b3I+CmlubGluZQppbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gaW5zZXJ0ZXIoX0Nv
bnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQ29udGFp
bmVyOjppdGVyYXRvciBfX2l0ZXI7CiAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PihfX3gsIF9faXRlcihfX2kpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl
cmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCYsCiAgICAgICAgICBjbGFz
cyBfRGlzdGFuY2UgPSBwdHJkaWZmX3Q+CmNsYXNzIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVy
YXRvciB7CiAgdHlwZWRlZiByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpZGlyZWN0
aW9uYWxJdGVyYXRvciwgX1RwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4gX1NlbGY7CnByb3RlY3RlZDoKICBfQmlkaXJlY3Rp
b25hbEl0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRl
cmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAg
dHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVy
OwogIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7CgogIHJldmVyc2VfYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
KF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX194KQogICAgOiBjdXJyZW50KF9feCkge30KICBfQmlk
aXJlY3Rpb25hbEl0ZXJhdG9yIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CiAgX1Jl
ZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9f
dG1wID0gY3VycmVudDsKICAgIHJldHVybiAqLS1fX3RtcDsKICB9CiAgcG9pbnRlciBvcGVyYXRv
ci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KICBfU2VsZiYgb3BlcmF0b3Ir
KygpIHsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0
b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLWN1cnJlbnQ7CiAgICBy
ZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgKytjdXJyZW50Owog
ICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYg
X190bXAgPSAqdGhpczsKICAgICsrY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0JpSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBfRGlz
dGFuY2U+CmlubGluZSBib29sIG9wZXJhdG9yPT0oCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0
aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3gsCiAgICBj
b25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBf
RGlzdGFuY2U+JiBfX3kpCnsKICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0JpSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBfRGlz
dGFuY2U+CmlubGluZSBib29sIG9wZXJhdG9yIT0oCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0
aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3gsCiAgICBj
b25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBf
RGlzdGFuY2U+JiBfX3kpCnsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQojIDIyMiAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFz
cyBfSXRlcmF0b3I+CmNsYXNzIHJldmVyc2VfaXRlcmF0b3IKewpwcm90ZWN0ZWQ6CiAgX0l0ZXJh
dG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAgICAgaXRlcmF0b3JfY2F0ZWdvcnk7
CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlw
ZQogICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsK
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyCiAg
ICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
YXRvcj46OnJlZmVyZW5jZQogICAgICAgICAgcmVmZXJlbmNlOwoKICB0eXBlZGVmIF9JdGVyYXRv
ciBpdGVyYXRvcl90eXBlOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+IF9T
ZWxmOwoKcHVibGljOgogIHJldmVyc2VfaXRlcmF0b3IoKSB7fQogIGV4cGxpY2l0IHJldmVyc2Vf
aXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3VycmVudChfX3gpIHt9CgogIHJldmVyc2Vf
aXRlcmF0b3IoY29uc3QgX1NlbGYmIF9feCkgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7fQogIHRl
bXBsYXRlIDxjbGFzcyBfSXRlcj4KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRl
cmF0b3I8X0l0ZXI+JiBfX3gpCiAgICA6IGN1cnJlbnQoX194LmJhc2UoKSkge30KCiAgaXRlcmF0
b3JfdHlwZSBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQogIHJlZmVyZW5jZSBvcGVy
YXRvciooKSBjb25zdCB7CiAgICBfSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0dXJu
ICotLV9fdG1wOwogIH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9w
ZXJhdG9yKigpKTsgfQoKICBfU2VsZiYgb3BlcmF0b3IrKygpIHsKICAgIC0tY3VycmVudDsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9f
dG1wID0gKnRoaXM7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxm
JiBvcGVyYXRvci0tKCkgewogICAgKytjdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBf
U2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICsrY3Vy
cmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CgogIF9TZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNl
X3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4gX1NlbGYoY3VycmVudCAtIF9fbik7CiAgfQog
IF9TZWxmJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgLT0g
X19uOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90
eXBlIF9fbikgY29uc3QgewogICAgcmV0dXJuIF9TZWxmKGN1cnJlbnQgKyBfX24pOwogIH0KICBf
U2VsZiYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50ICs9IF9f
bjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5j
ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX194LmJhc2UoKSA9PSBf
X3kuYmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVy
YXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJl
dHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRv
cj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv
cj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRv
cjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gIShfX3gg
PCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKb3BlcmF0b3ItKGNvbnN0
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgY29uc3QgcmV2ZXJz
ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSAtIF9feC5i
YXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSByZXZlcnNlX2l0ZXJh
dG9yPF9JdGVyYXRvcj4Kb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0
b3I8X0l0ZXJhdG9yPiYgX194KSB7CiAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
PihfX3guYmFzZSgpIC0gX19uKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsCiAgICAgICAgICBj
bGFzcyBfQ2hhclQgPSBjaGFyLCBjbGFzcyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwK
ICAgICAgICAgIGNsYXNzIF9EaXN0ID0gcHRyZGlmZl90PgpjbGFzcyBpc3RyZWFtX2l0ZXJhdG9y
IHsKcHVibGljOgogIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICB0eXBlZGVmIF9UcmFpdHMg
dHJhaXRzX3R5cGU7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0
cmVhbV90eXBlOwoKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29y
eTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3QgZGlmZmVyZW5jZV90
eXBlOwogIHR5cGVkZWYgY29uc3QgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiBy
ZWZlcmVuY2U7CgogIGlzdHJlYW1faXRlcmF0b3IoKSA6IF9NX3N0cmVhbSgwKSwgX01fb2soZmFs
c2UpIHt9CiAgaXN0cmVhbV9pdGVyYXRvcihpc3RyZWFtX3R5cGUmIF9fcykgOiBfTV9zdHJlYW0o
Jl9fcykgeyBfTV9yZWFkKCk7IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuIF9NX3ZhbHVlOyB9CiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihv
cGVyYXRvciooKSk7IH0KCiAgaXN0cmVhbV9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKICAgIF9N
X3JlYWQoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXN0cmVhbV9pdGVyYXRvciBvcGVyYXRv
cisrKGludCkgewogICAgaXN0cmVhbV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fcmVh
ZCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgYm9vbCBfTV9lcXVhbChjb25zdCBpc3RyZWFt
X2l0ZXJhdG9yJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX01fb2sgPT0gX194Ll9NX29rKSAm
JiAoIV9NX29rIHx8IF9NX3N0cmVhbSA9PSBfX3guX01fc3RyZWFtKTsgfQoKcHJpdmF0ZToKICBp
c3RyZWFtX3R5cGUqIF9NX3N0cmVhbTsKICBfVHAgX01fdmFsdWU7CiAgYm9vbCBfTV9vazsKCiAg
dm9pZCBfTV9yZWFkKCkgewogICAgX01fb2sgPSAoX01fc3RyZWFtICYmICpfTV9zdHJlYW0pID8g
dHJ1ZSA6IGZhbHNlOwogICAgaWYgKF9NX29rKSB7CiAgICAgICpfTV9zdHJlYW0gPj4gX01fdmFs
dWU7CiAgICAgIF9NX29rID0gKl9NX3N0cmVhbSA/IHRydWUgOiBmYWxzZTsKICAgIH0KICB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNz
IF9EaXN0PgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1Rw
LCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX194LAogICAgICAgICAgIGNvbnN0IGlzdHJlYW1f
aXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX195KSB7CiAgcmV0dXJuIF9f
eC5fTV9lcXVhbChfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ2hhclQsIGNs
YXNzIF9UcmFpdHMsIGNsYXNzIF9EaXN0PgppbmxpbmUgYm9vbApvcGVyYXRvciE9KGNvbnN0IGlz
dHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX194LAogICAgICAg
ICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYg
X195KSB7CiAgcmV0dXJuICFfX3guX01fZXF1YWwoX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf
VHAsCiAgICAgICAgICBjbGFzcyBfQ2hhclQgPSBjaGFyLCBjbGFzcyBfVHJhaXRzID0gY2hhcl90
cmFpdHM8X0NoYXJUPiA+CmNsYXNzIG9zdHJlYW1faXRlcmF0b3IgewpwdWJsaWM6CiAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwogIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICB0eXBl
ZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7CgogIHR5cGVk
ZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQg
dmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9p
ZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIG9zdHJlYW1faXRlcmF0b3Io
b3N0cmVhbV90eXBlJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoMCkge30KICBv
c3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zLCBjb25zdCBfQ2hhclQqIF9fYykKICAg
IDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoX19jKSB7fQogIG9zdHJlYW1faXRlcmF0b3I8
X1RwPiYgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX192YWx1ZSkgewogICAgKl9NX3N0cmVhbSA8PCBf
X3ZhbHVlOwogICAgaWYgKF9NX3N0cmluZykgKl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IqKCkgeyBy
ZXR1cm4gKnRoaXM7IH0KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJl
dHVybiAqdGhpczsgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKyhpbnQpIHsg
cmV0dXJuICp0aGlzOyB9CnByaXZhdGU6CiAgb3N0cmVhbV90eXBlKiBfTV9zdHJlYW07CiAgY29u
c3QgX0NoYXJUKiBfTV9zdHJpbmc7Cn07CiMgNDQ2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBl
bmFtZSBfQ29udGFpbmVyPgpjbGFzcyBfX25vcm1hbF9pdGVyYXRvcgogIDogcHVibGljIGl0ZXJh
dG9yPGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAg
ICAgICAgICAgICAgICBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAg
ICAgICAgICAgICAgICAgICBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90
eXBlLAogICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2lu
dGVyLAogICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZl
cmVuY2U+CnsKCnByb3RlY3RlZDoKICBfSXRlcmF0b3IgX01fY3VycmVudDsKCnB1YmxpYzoKICB0
eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gbm9ybWFsX2l0
ZXJhdG9yX3R5cGU7CiAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPiBfX3RyYWl0
c190eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6aXRlcmF0b3JfY2F0ZWdv
cnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjp2
YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpk
aWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX190cmFp
dHNfdHlwZTo6cG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlw
ZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKCiAgX19ub3JtYWxfaXRlcmF0b3IoKSA6IF9NX2N1cnJl
bnQoX0l0ZXJhdG9yKCkpIHsgfQoKICBleHBsaWNpdCBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBf
SXRlcmF0b3ImIF9faSkgOiBfTV9jdXJyZW50KF9faSkgeyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSXRlcj4KICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX19ub3JtYWxfaXRlcmF0
b3I8X0l0ZXIsIF9Db250YWluZXI+JiBfX2kpCiAgICA6IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkg
eyB9CgoKICByZWZlcmVuY2UKICBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqX01fY3VycmVu
dDsgfQoKICBwb2ludGVyCiAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7
IH0KCiAgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmCiAgb3BlcmF0b3IrKygpIHsgKytfTV9jdXJyZW50
OyByZXR1cm4gKnRoaXM7IH0KCiAgbm9ybWFsX2l0ZXJhdG9yX3R5cGUKICBvcGVyYXRvcisrKGlu
dCkgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCsrKTsgfQoKCiAgbm9ybWFs
X2l0ZXJhdG9yX3R5cGUmCiAgb3BlcmF0b3ItLSgpIHsgLS1fTV9jdXJyZW50OyByZXR1cm4gKnRo
aXM7IH0KCiAgbm9ybWFsX2l0ZXJhdG9yX3R5cGUKICBvcGVyYXRvci0tKGludCkgeyByZXR1cm4g
X19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudC0tKTsgfQoKCiAgcmVmZXJlbmNlCiAgb3BlcmF0
b3JbXShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICB7IHJldHVybiBfTV9jdXJy
ZW50W19fbl07IH0KCiAgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmCiAgb3BlcmF0b3IrPShjb25zdCBk
aWZmZXJlbmNlX3R5cGUmIF9fbikKICB7IF9NX2N1cnJlbnQgKz0gX19uOyByZXR1cm4gKnRoaXM7
IH0KCiAgbm9ybWFsX2l0ZXJhdG9yX3R5cGUKICBvcGVyYXRvcisoY29uc3QgZGlmZmVyZW5jZV90
eXBlJiBfX24pIGNvbnN0CiAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCAr
IF9fbik7IH0KCiAgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmCiAgb3BlcmF0b3ItPShjb25zdCBkaWZm
ZXJlbmNlX3R5cGUmIF9fbikKICB7IF9NX2N1cnJlbnQgLT0gX19uOyByZXR1cm4gKnRoaXM7IH0K
CiAgbm9ybWFsX2l0ZXJhdG9yX3R5cGUKICBvcGVyYXRvci0oY29uc3QgZGlmZmVyZW5jZV90eXBl
JiBfX24pIGNvbnN0CiAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCAtIF9f
bik7IH0KCiAgZGlmZmVyZW5jZV90eXBlCiAgb3BlcmF0b3ItKGNvbnN0IG5vcm1hbF9pdGVyYXRv
cl90eXBlJiBfX2kpIGNvbnN0CiAgeyByZXR1cm4gX01fY3VycmVudCAtIF9faS5fTV9jdXJyZW50
OyB9CgogIGNvbnN0IF9JdGVyYXRvciYKICBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVu
dDsgfQp9OwoKCgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0
b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IF9f
bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAg
ICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMp
CnsgcmV0dXJuIF9fbGhzLmJhc2UoKSA9PSBfX3Jocy5iYXNlKCk7IH0KCnRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+
CmlubGluZSBib29sCm9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
TCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y
PF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gIShfX2xocyA9PSBfX3Jo
cyk7IH0KCgoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9y
UiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8KGNvbnN0IF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgIGNv
bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyBy
ZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBf
SXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgppbmxp
bmUgYm9vbApvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0Nv
bnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiBfX3JocyA8IF9fbGhzOyB9Cgp0ZW1w
bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBf
Q29udGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y
PF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICBjb25zdCBfX25vcm1h
bF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuICEoX19y
aHMgPCBfX2xocyk7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9J
dGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPj0oY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAg
ICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBf
X3JocykKeyByZXR1cm4gIShfX2xocyA8IF9fcmhzKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0
ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgppbmxpbmUgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yLCBfQ29udGFpbmVyPgpvcGVyYXRvcisodHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgIGNv
bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9faSkKeyByZXR1
cm4gX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPihfX2kuYmFzZSgpICsg
X19uKTsgfQoKfQojIDgxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2No
ZWNrLmgiIDEgMwojIDgyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIF9faXRlcl9z
d2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYiwgX1RwKikKewogIF9UcCBf
X3RtcCA9ICpfX2E7CiAgKl9fYSA9ICpfX2I7CiAgKl9fYiA9IF9fdG1wOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KaW5saW5lIHZvaWQgaXRl
cl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYikKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgX19p
dGVyX3N3YXAoX19hLCBfX2IsIF9fdmFsdWVfdHlwZShfX2EpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KaW5saW5lIHZvaWQgc3dhcChfVHAmIF9fYSwgX1RwJiBfX2IpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgX1RwIF9f
dG1wID0gX19hOwogIF9fYSA9IF9fYjsKICBfX2IgPSBfX3RtcDsKfQoKCgoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBf
VHAmIF9fYikgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgogIGlmIChfX2IgPCBfX2EpIHJldHVybiBfX2I7IHJldHVybiBf
X2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBf
VHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBpZiAoX19hIDwgX19iKSByZXR1
cm4gX19iOyByZXR1cm4gX19hOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFy
ZT4KaW5saW5lIGNvbnN0IF9UcCYgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwg
X0NvbXBhcmUgX19jb21wKSB7CgogIGlmIChfX2NvbXAoX19iLCBfX2EpKSByZXR1cm4gX19iOyBy
ZXR1cm4gX19hOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5l
IGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUg
X19jb21wKSB7CgogIGlmIChfX2NvbXAoX19hLCBfX2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19h
Owp9CiMgMTY2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDMKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBf
RGlzdGFuY2U+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcsIF9E
aXN0YW5jZSopCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19f
Zmlyc3QpCiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNz
IF9EaXN0YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyCl9fY29weShfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIF9EaXN0YW5jZSopCnsKICBmb3IgKF9E
aXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewogICAgKl9f
cmVzdWx0ID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgICArK19fcmVzdWx0OwogIH0KICBy
ZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBfVHAqCl9fY29w
eV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19y
ZXN1bHQpCnsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIChfX2xh
c3QgLSBfX2ZpcnN0KSk7CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9
CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUg
X091dHB1dEl0ZXIgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LCBfX2ZhbHNlX3R5cGUpCnsKICByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLAogICAgICAg
ICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X2F1
eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKewogIHJl
dHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgIF9f
aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCksCiAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5
cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKiBfX2NvcHlf
YXV4MihfVHAqIF9fZmlyc3QsIF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIF9U
cCogX19jb3B5X2F1eDIoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1Rw
KiBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCnsKICByZXR1
cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5l
IF9PdXRwdXRJdGVyIF9fY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs
IF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAgcmV0dXJuIF9fY29w
eV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Ucml2aWFsKCkpOwp9Cgp0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRw
dXRJdGVyIF9fY29weV9uaTIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3Ry
dWVfdHlwZSkKewogIHJldHVybiBfT3V0cHV0SXRlcihfX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFz
dCwgX19yZXN1bHQuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFs
dWVfdHlwZShfX2ZpcnN0KSkpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl
bmFtZSBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9uaTIoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKewogIHJldHVybiBfX2NvcHlf
YXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0K
CnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxp
bmUgX091dHB1dEl0ZXIgX19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsIF9fdHJ1ZV90eXBlKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9y
PF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5X25pMihfX2Zp
cnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwp9Cgp0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KaW5saW5lIF9P
dXRwdXRJdGVyIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf
X2ZhbHNlX3R5cGUpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091
dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3Qs
IF9fbGFzdCwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBjb3B5KF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX25vcm1hbF9pdGVyYXRvcjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgcmV0
dXJuIF9fY29weV9uaTEoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0K
CgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rp
b25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9u
YWxJdGVyMiBfX2NvcHlfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
MSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgd2hpbGUgKF9fZmlyc3Qg
IT0gX19sYXN0KQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyIF9fY29w
eV9iYWNrd2FyZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2Fj
Y2Vzc19pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZSopCnsKICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0
OyBfX24gPiAwOyAtLV9fbikKICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogIHJldHVybiBf
X3Jlc3VsdDsKfQoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNs
YXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQm9vbFR5cGU+CnN0cnVj
dCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2gKewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAgICAg
X0NhdDsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0
ZXIxPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2U7CgogIHN0YXRpYyBfQmlk
aXJlY3Rpb25hbEl0ZXIyIGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVz
dWx0KSB7CiAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1
bHQsIF9DYXQoKSwgKF9EaXN0YW5jZSopIDApOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+
CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xh
c3QsIF9UcCogX19yZXN1bHQpIHsKICAgIGNvbnN0IHB0cmRpZmZfdCBfTnVtID0gX19sYXN0IC0g
X19maXJzdDsKICAgIG1lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBzaXplb2YoX1Rw
KSAqIF9OdW0pOwogICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9U
cCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3Qs
IGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X2Jh
Y2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAgICA6OmNvcHkoX19m
aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9CSTEsIGNs
YXNzIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9hdXgoX0JJMSBfX2ZpcnN0LCBf
QkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkgewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3Ry
YWl0czx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAgICAgICAg
ICAgICAgICAgICAgICAgIDo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAg
ICAgX1RyaXZpYWw7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkxLCBfQkky
LCBfVHJpdmlhbD4KICAgICAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgppbmxpbmUgX0JJ
MiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9C
STEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkgewogIHJldHVybiBfQkkyKF9fY29weV9i
YWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCkpKTsKfQoKdGVtcGxh
dGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNr
d2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19y
ZXN1bHQsIF9fZmFsc2VfdHlwZSl7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJz
dCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFt
ZSBfQkkyPgppbmxpbmUgX0JJMiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9y
KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpIHsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7
CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3Qu
YmFzZSgpLCBfX2xhc3QuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFt
ZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgppbmxpbmUgX0JJMiBfX2NvcHlfYmFja3dhcmRfaW5wdXRf
bm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxz
ZV90eXBlKSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+Ojpf
Tm9ybWFsIF9fTm9ybWFsOwogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9p
dGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX05vcm1hbCgpKTsKfQoKdGVtcGxhdGUgPHR5cGVu
YW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIGNvcHlfYmFja3dhcmQoX0JJMSBf
X2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgoKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMT46
Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxf
aXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX05vcm1hbCgpKTsKfQoKCgoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KcGFpcjxfSW5w
dXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBf
X2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRf
aXRlcmF0b3JfdGFnKSB7CiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1fX2NvdW50KSB7CiAgICAq
X19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7CiAgfQog
IHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPihfX2ZpcnN0LCBfX3Jlc3VsdCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0
ZXI+CmlubGluZSBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfUkFJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAg
ICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0ZXIgX19sYXN0ID0gX19m
aXJzdCArIF9fY291bnQ7CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+KF9fbGFz
dCwgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9J
bnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXpl
IF9fY291bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9uKF9fZmly
c3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXpl
LCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+
CmNvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRwdXRJdGVyIF9f
cmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291
bnQsIF9fcmVzdWx0KTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9UcD4Kdm9pZCBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LCBjb25zdCBfVHAmIF9fdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgpfT3V0
cHV0SXRlciBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAm
IF9fdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsr
X19maXJzdCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICByZXR1cm4gX19maXJzdDsKfQoKCgpp
bmxpbmUgdm9pZCBmaWxsKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHVuc2lnbmVkIGNoYXIqIF9f
bGFzdCwKICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCnsKICB1bnNp
Z25lZCBjaGFyIF9fdG1wID0gX19jOwogIG1lbXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0g
X19maXJzdCk7Cn0KCmlubGluZSB2b2lkIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25l
ZCBjaGFyKiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykK
ewogIHNpZ25lZCBjaGFyIF9fdG1wID0gX19jOwogIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgppbmxpbmUgdm9p
ZCBmaWxsKGNoYXIqIF9fZmlyc3QsIGNoYXIqIF9fbGFzdCwgY29uc3QgY2hhciYgX19jKQp7CiAg
Y2hhciBfX3RtcCA9IF9fYzsKICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9TaXpl
PgppbmxpbmUgdW5zaWduZWQgY2hhciogZmlsbF9uKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIF9T
aXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFy
JiBfX2MpCnsKICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgcmV0dXJuIF9f
Zmlyc3QgKyBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIHNpZ25lZCBjaGFy
KiBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzaWduZWQgY2hhciYgX19jKQp7CiAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsg
X19uLCBfX2MpOwogIHJldHVybiBfX2ZpcnN0ICsgX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Np
emU+CmlubGluZSBjaGFyKiBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBj
aGFyJiBfX2MpCnsKICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgcmV0dXJu
IF9fZmlyc3QgKyBfX247Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNz
IF9JbnB1dEl0ZXIyPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lu
cHV0SXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19maXJz
dDIpIHsKICAgICsrX19maXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICByZXR1cm4gcGFpcjxf
SW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVk
aWNhdGU+CnBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0
MSwgKl9fZmlyc3QyKSkgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJl
dHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KaW5saW5l
IGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQp7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytf
X2ZpcnN0MikKICAgIGlmICghKCpfX2ZpcnN0MSA9PSAqX19maXJzdDIpKQogICAgICByZXR1cm4g
ZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xh
c3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBib29sIGVxdWFs
KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsg
KytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19maXJzdDEs
ICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKCgoKCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wgbGV4aWNv
Z3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
bnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZv
ciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAg
OyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3Qy
KQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAg
IHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5w
dXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lu
cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf
X2xhc3QyCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICBpZiAoX19jb21w
KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoX19jb21w
KCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4g
X19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9CgppbmxpbmUgYm9v
bApsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsKICBjb25z
dCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHNpemVfdCBfX2xl
bjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9f
Zmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9fcmVzdWx0
ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7Cn0KCmlubGluZSBib29sIGxl
eGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBf
X2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKewoKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2Fs
X2NvbXBhcmUoKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3Qy
KTsKCgoKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy
Mj4KaW50IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewogIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19m
aXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiAtMTsKICAgIGlmICgqX19maXJzdDIgPCAq
X19maXJzdDEpCiAgICAgIHJldHVybiAxOwogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7
CiAgfQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKSB7CiAgICByZXR1cm4gIShfX2ZpcnN0MSA9
PSBfX2xhc3QxKTsKICB9CiAgZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9CgppbmxpbmUgaW50
Cl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2Zp
cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj
aGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIF9fbGFzdDIpCnsKICBjb25zdCBwdHJkaWZmX3QgX19sZW4xID0gX19sYXN0MSAt
IF9fZmlyc3QxOwogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7
CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9f
bGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdAogICAgICAg
ICAgICAgICAgICAgICAgIDogKF9fbGVuMSA9PSBfX2xlbjIgPyAwIDogKF9fbGVuMSA8IF9fbGVu
MiA/IC0xIDogMSkpOwp9CgppbmxpbmUgaW50Cl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dh
eShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xh
c3QyKQp7CgogIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBf
X2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNo
YXIqKSBfX2xhc3QyKTsKCgoKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz
cyBfSW5wdXRJdGVyMj4KaW50IGxleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxf
Y29tcGFyZV8zd2F5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCn0K
IyA2MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA1NyAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCiMgMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoK
ICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3df
YmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZv
aWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19l
cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29u
c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBj
aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19z
KTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv
aWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f
dGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3Zl
cmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShj
b25zdCBjaGFyKiBfX3MpOwp9CiMgNTggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
c3RkZGVmLmgiIDEgMwojIDU5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs
bG9jLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxp
Yi5oIiAxIDMKIyA2MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5o
IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIg
MSAzCiMgNjEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jYXNzZXJ0LmgiIDEgMwoj
IDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2Fz
c2VydC5oIiAyIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCmV4dGVybiAiQyIgewoK
CmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9f
Y29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9m
YWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAo
Y29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQojIDM4ICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMiAzCiMgNjIgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgoKCgoKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMSAzCiMgNjIgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiMgMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMSAzCiMg
NjMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAyIDMKIyA4
MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNw
YWNlIHN0ZAp7CiMgOTUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFk
cy5oIiAzCnN0cnVjdCBfUmVmY291bnRfQmFzZQp7CgoKCgogIHR5cGVkZWYgc2l6ZV90IF9SQ190
OwoKCgogICB2b2xhdGlsZSBfUkNfdCBfTV9yZWZfY291bnQ7CgoKCgogIF9fZ3RocmVhZF9tdXRl
eF90IF9NX3JlZl9jb3VudF9sb2NrOwogIF9SZWZjb3VudF9CYXNlKF9SQ190IF9fbikgOiBfTV9y
ZWZfY291bnQoX19uKQogICAgewoKICAgICAgX19ndGhyZWFkX211dGV4X3QgX190bXAgPSAwOwog
ICAgICBfTV9yZWZfY291bnRfbG9jayA9IF9fdG1wOwoKCgoKCiAgICB9CiMgMTQxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHZvaWQgX01faW5jcigp
IHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICArK19N
X3JlZl9jb3VudDsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2Nr
KTsKICB9CiAgX1JDX3QgX01fZGVjcigpIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9y
ZWZfY291bnRfbG9jayk7CiAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2NvdW50
OwogICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgcmV0
dXJuIF9fdG1wOwogIH0KIyAxOTIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
dGhyZWFkcy5oIiAzCn07CiMgMzEzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X3RocmVhZHMuaCIgMwp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kc3RydWN0IF9TVExfbXV0ZXhfc3Bp
biB7CiAgZW51bSB7IF9fbG93X21heCA9IDMwLCBfX2hpZ2hfbWF4ID0gMTAwMCB9OwoKCiAgc3Rh
dGljIHVuc2lnbmVkIF9fbWF4OwogIHN0YXRpYyB1bnNpZ25lZCBfX2xhc3Q7Cn07Cgp0ZW1wbGF0
ZSA8aW50IF9faW5zdD4KdW5zaWduZWQgX1NUTF9tdXRleF9zcGluPF9faW5zdD46Ol9fbWF4ID0g
X1NUTF9tdXRleF9zcGluPF9faW5zdD46Ol9fbG93X21heDsKCnRlbXBsYXRlIDxpbnQgX19pbnN0
Pgp1bnNpZ25lZCBfU1RMX211dGV4X3NwaW48X19pbnN0Pjo6X19sYXN0ID0gMDsKIyAzNDAgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnN0cnVjdCBfU1RM
X211dGV4X2xvY2sKewoKCgoKCgoKICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9sb2NrOwogIHZvaWQg
X01faW5pdGlhbGl6ZSgpIHsKIyAzNzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfdGhyZWFkcy5oIiAzCiAgfQogIHZvaWQgX01fYWNxdWlyZV9sb2NrKCkgewoKCgogICAgX19n
dGhyZWFkX211dGV4X2xvY2soJl9NX2xvY2spOwogIH0KICB2b2lkIF9NX3JlbGVhc2VfbG9jaygp
IHsKCgoKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX2xvY2spOwogIH0KIyA0ODIgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCn07CiMgNTIxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpzdHJ1Y3QgX1NU
TF9hdXRvX2xvY2sKewogIF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsKCiAgX1NUTF9hdXRvX2xv
Y2soX1NUTF9tdXRleF9sb2NrJiBfX2xvY2spIDogX01fbG9jayhfX2xvY2spCiAgICB7IF9NX2xv
Y2suX01fYWNxdWlyZV9sb2NrKCk7IH0KICB+X1NUTF9hdXRvX2xvY2soKSB7IF9NX2xvY2suX01f
cmVsZWFzZV9sb2NrKCk7IH0KCnByaXZhdGU6CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NUTF9h
dXRvX2xvY2smKTsKICBfU1RMX2F1dG9fbG9jayhjb25zdCBfU1RMX2F1dG9fbG9jayYpOwp9OwoK
fQojIDY4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwoj
IDk3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKbmFtZXNw
YWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxpbnQgX19pbnN0PgpjbGFzcyBfX21hbGxvY19hbGxvY190
ZW1wbGF0ZSB7Cgpwcml2YXRlOgoKICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3Qp
OwogIHN0YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKICBzdGF0aWMg
dm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKCnB1YmxpYzoKCiAgc3RhdGlj
IHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgewogICAgdm9pZCogX19yZXN1bHQgPSBtYWxs
b2MoX19uKTsKICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9tYWxsb2Mo
X19uKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUo
dm9pZCogX19wLCBzaXplX3QgKQogIHsKICAgIGZyZWUoX19wKTsKICB9CgogIHN0YXRpYyB2b2lk
KiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICwgc2l6ZV90IF9fbmV3X3N6KQogIHsKICAg
IHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIGlmICgwID09IF9f
cmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAgcmV0
dXJuIF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRsZXIo
dm9pZCAoKl9fZikoKSkpKCkKICB7CiAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxs
b2Nfb29tX2hhbmRsZXI7CiAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsKICAg
IHJldHVybihfX29sZCk7CiAgfQoKfTsKCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQgKCog
X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRs
ZXIpKCkgPSAwOwoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQqCl9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBf
X215X21hbGxvY19oYW5kbGVyKSgpOwogICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7Oykg
ewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxl
cjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IHN0ZDo6X190aHJvd19i
YWRfYWxsb2MoKTsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICBf
X3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVz
dWx0KTsKICAgIH0KfQoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQqIF9fbWFsbG9jX2FsbG9j
X3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9yZWFsbG9jKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikK
ewogICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgdm9pZCogX19yZXN1bHQ7
CgogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19h
bGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7
IHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxl
cikoKTsKICAgICAgICBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX24pOwogICAgICAgIGlmIChf
X3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdHlwZWRlZiBfX21hbGxvY19hbGxv
Y190ZW1wbGF0ZTwwPiBtYWxsb2NfYWxsb2M7Cgp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4KY2xhc3Mgc2ltcGxlX2FsbG9jIHsKCnB1YmxpYzoKICAgIHN0YXRpYyBfVHAqIGFsbG9j
YXRlKHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIDAgPT0gX19uID8gMCA6IChfVHAqKSBfQWxs
b2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyBfVHAqIGFsbG9j
YXRlKHZvaWQpCiAgICAgIHsgcmV0dXJuIChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpemVvZiAo
X1RwKSk7IH0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24p
CiAgICAgIHsgaWYgKDAgIT0gX19uKSBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXpl
b2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wKQogICAgICB7
IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0KfTsKCgoKCgoKdGVtcGxh
dGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgZGVidWdfYWxsb2MgewoKcHJpdmF0ZToKCiAgZW51bSB7
X1NfZXh0cmEgPSA4fTsKCgoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90
IF9fbikKICB7CiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRlKF9f
biArIChpbnQpIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJl
dHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxv
Y2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgewogICAgY2hhciogX19yZWFsX3AgPSAoY2hh
ciopX19wIC0gKGludCkgX1NfZXh0cmE7CiAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKCgqKHNpemVf
dCopX19yZWFsX3AgPT0gX19uKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3Jl
YWxfcCA9PSBfX24iLCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5o
IiwgMjE5LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgIF9BbGxvYzo6ZGVhbGxvY2F0
ZShfX3JlYWxfcCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogIH0KCiAgc3RhdGljIHZvaWQqIHJl
YWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7
CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgIChz
dGF0aWNfY2FzdDx2b2lkPiAoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeikgPyAwIDog
KF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3oiLCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiwgMjI2LCBfX1BSRVRUWV9GVU5D
VElPTl9fKSwgMCkpKTsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKQogICAgICBfQWxsb2M6
OnJlYWxsb2NhdGUoX19yZWFsX3AsIF9fb2xkX3N6ICsgKGludCkgX1NfZXh0cmEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3ogKyAoaW50KSBfU19leHRyYSk7CiAg
ICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsKICAgIHJldHVybiBfX3Jlc3VsdCArIChp
bnQpIF9TX2V4dHJhOwogIH0KCn07CiMgMjcwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CmNsYXNz
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZSB7Cgpwcml2YXRlOgoKCiAgZW51bSB7X0FMSUdOID0g
OH07CiAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgZW51bSB7X05GUkVFTElTVFMgPSAxNn07
CiAgc3RhdGljIHNpemVfdAogIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQogICAgeyByZXR1
cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KSBfQUxJR04tMSkgJiB+KChzaXplX3QpIF9BTElHTiAt
IDEpKTsgfQoKICB1bmlvbiBfT2JqIHsKICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3Rf
bGluazsKICAgICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOwogIH07CgogIHN0YXRpYyBfT2Jq
KiB2b2xhdGlsZSBfU19mcmVlX2xpc3RbXTsKCiAgc3RhdGljIHNpemVfdCBfU19mcmVlbGlzdF9p
bmRleChzaXplX3QgX19ieXRlcykgewogICAgICAgIHJldHVybiAoKChfX2J5dGVzKSArIChzaXpl
X3QpX0FMSUdOLTEpLyhzaXplX3QpX0FMSUdOIC0gMSk7CiAgfQoKCiAgc3RhdGljIHZvaWQqIF9T
X3JlZmlsbChzaXplX3QgX19uKTsKCgogIHN0YXRpYyBjaGFyKiBfU19jaHVua19hbGxvYyhzaXpl
X3QgX19zaXplLCBpbnQmIF9fbm9ianMpOwoKCiAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7
CiAgc3RhdGljIGNoYXIqIF9TX2VuZF9mcmVlOwogIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXpl
OwoKCiAgICBzdGF0aWMgX1NUTF9tdXRleF9sb2NrIF9TX25vZGVfYWxsb2NhdG9yX2xvY2s7CgoK
CgoKICAgIGNsYXNzIF9Mb2NrOwogICAgZnJpZW5kIGNsYXNzIF9Mb2NrOwogICAgY2xhc3MgX0xv
Y2sgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgX0xvY2soKSB7IHsgaWYgKHRocmVhZHMp
IF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH07IH0KICAgICAgICAg
ICAgfl9Mb2NrKCkgeyB7IGlmICh0aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2NrLl9NX3Jl
bGVhc2VfbG9jaygpOyB9OyB9CiAgICB9OwoKcHVibGljOgoKCiAgc3RhdGljIHZvaWQqIGFsbG9j
YXRlKHNpemVfdCBfX24pCiAgewogICAgdm9pZCogX19yZXQgPSAwOwoKICAgIGlmIChfX24gPiAo
c2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgIF9fcmV0ID0gbWFsbG9jX2FsbG9jOjphbGxvY2F0
ZShfX24pOwogICAgfQogICAgZWxzZSB7CiAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVf
bGlzdAogICAgICAgICAgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoK
CgoKCiAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKCiAgICAgIF9PYmoqIF9fcmVzdWx0ID0g
Kl9fbXlfZnJlZV9saXN0OwogICAgICBpZiAoX19yZXN1bHQgPT0gMCkKICAgICAgICBfX3JldCA9
IF9TX3JlZmlsbChfU19yb3VuZF91cChfX24pKTsKICAgICAgZWxzZSB7CiAgICAgICAgKl9fbXlf
ZnJlZV9saXN0ID0gX19yZXN1bHQgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgX19yZXQg
PSBfX3Jlc3VsdDsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBfX3JldDsKICB9OwoKCiAgc3Rh
dGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgewogICAgaWYgKF9f
biA+IChzaXplX3QpIF9NQVhfQllURVMpCiAgICAgIG1hbGxvY19hbGxvYzo6ZGVhbGxvY2F0ZShf
X3AsIF9fbik7CiAgICBlbHNlIHsKICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0
CiAgICAgICAgICA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAg
IF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CgoKCgogICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7
CgogICAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAg
ICpfX215X2ZyZWVfbGlzdCA9IF9fcTsKCiAgICB9CiAgfQoKICBzdGF0aWMgdm9pZCogcmVhbGxv
Y2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsKCn0gOwoK
dHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD4gYWxsb2M7CnR5cGVkZWYg
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2FsbG9jOwoK
dGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLAog
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro
cmVhZHMsIF9faW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxib29sIF9fdGhy
ZWFkcywgaW50IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikKewog
IHJldHVybiBmYWxzZTsKfQoKCgoKCgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19p
bnN0PgpjaGFyKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+Ojpf
U19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpCnsKICAgIGNoYXIq
IF9fcmVzdWx0OwogICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwog
ICAgc2l6ZV90IF9fYnl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVlIC0gX1Nfc3RhcnRfZnJlZTsKCiAg
ICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsKICAgICAgICBfX3Jlc3VsdCA9
IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwog
ICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9IGVsc2UgaWYgKF9fYnl0ZXNfbGVmdCA+PSBf
X3NpemUpIHsKICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7CiAg
ICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgICAgX19yZXN1bHQg
PSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsK
ICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBlbHNlIHsKICAgICAgICBzaXplX3QgX19i
eXRlc190b19nZXQgPQogICAgICAgICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19yb3VuZF91cChf
U19oZWFwX3NpemUgPj4gNCk7CgogICAgICAgIGlmIChfX2J5dGVzX2xlZnQgPiAwKSB7CiAgICAg
ICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9CiAgICAgICAgICAgICAgICAg
ICAgICAgIF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7Cgog
ICAgICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0X2ZyZWUpIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0g
Kl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSAoX09iaiopX1Nf
c3RhcnRfZnJlZTsKICAgICAgICB9CiAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKiltYWxs
b2MoX19ieXRlc190b19nZXQpOwogICAgICAgIGlmICgwID09IF9TX3N0YXJ0X2ZyZWUpIHsKICAg
ICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJl
ZV9saXN0OwogICAgICAgICAgICBfT2JqKiBfX3A7CgoKCiAgICAgICAgICAgIGZvciAoX19pID0g
X19zaXplOwogICAgICAgICAgICAgICAgIF9faSA8PSAoc2l6ZV90KSBfTUFYX0JZVEVTOwogICAg
ICAgICAgICAgICAgIF9faSArPSAoc2l6ZV90KSBfQUxJR04pIHsKICAgICAgICAgICAgICAgIF9f
bXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19pKTsKICAg
ICAgICAgICAgICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAgIGlmICgw
ICE9IF9fcCkgewogICAgICAgICAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcCAtPiBf
TV9mcmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNo
YXIqKV9fcDsKICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUg
KyBfX2k7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwg
X19ub2JqcykpOwoKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAg
X1NfZW5kX2ZyZWUgPSAwOwogICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKW1hbGxv
Y19hbGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwoKCgogICAgICAgIH0KICAgICAgICBf
U19oZWFwX3NpemUgKz0gX19ieXRlc190b19nZXQ7CiAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19z
dGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9j
KF9fc2l6ZSwgX19ub2JqcykpOwogICAgfQp9CgoKCgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRz
LCBpbnQgX19pbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf
X2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKewogICAgaW50IF9fbm9ianMgPSAyMDsKICAg
IGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAgX09iaiog
dm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgX09iaiogX19yZXN1bHQ7CiAgICBfT2JqKiBf
X2N1cnJlbnRfb2JqOwogICAgX09iaiogX19uZXh0X29iajsKICAgIGludCBfX2k7CgogICAgaWYg
KDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmspOwogICAgX19teV9mcmVlX2xpc3QgPSBfU19m
cmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCiAgICAgIF9fcmVzdWx0ID0gKF9P
YmoqKV9fY2h1bms7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiop
KF9fY2h1bmsgKyBfX24pOwogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKyspIHsKICAgICAgICBf
X2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsKICAgICAgICBfX25leHRfb2JqID0gKF9PYmoqKSgo
Y2hhciopX19uZXh0X29iaiArIF9fbik7CiAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkg
ewogICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX19jdXJyZW50X29i
aiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IF9fbmV4dF9vYmo7CiAgICAgICAgfQogICAgICB9CiAg
ICByZXR1cm4oX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4K
dm9pZCoKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+OjpyZWFsbG9jYXRl
KHZvaWQqIF9fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBfX29sZF9zeiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25ld19zeikKewogICAgdm9pZCogX19yZXN1bHQ7
CiAgICBzaXplX3QgX19jb3B5X3N6OwoKICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhf
QllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJu
KHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAgfQogICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xk
X3N6KSA9PSBfU19yb3VuZF91cChfX25ld19zeikpIHJldHVybihfX3ApOwogICAgX19yZXN1bHQg
PSBhbGxvY2F0ZShfX25ld19zeik7CiAgICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6
PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAgbWVtY3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9z
eik7CiAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgcmV0dXJuKF9fcmVzdWx0KTsK
fQoKCiAgICB0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBfU1RMX211
dGV4X2xvY2sKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46
Ol9TX25vZGVfYWxsb2NhdG9yX2xvY2sKICAgICAgICA9IHsgMCB9OwoKCgp0ZW1wbGF0ZSA8Ym9v
bCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf
X3RocmVhZHMsIF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190
aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl
YWRzLCBfX2luc3Q+OjpfU19lbmRfZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMs
IGludCBfX2luc3Q+CnNpemVfdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf
X2luc3Q+OjpfU19oZWFwX3NpemUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQg
X19pbnN0Pgp0eXBlbmFtZSBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu
c3Q+OjpfT2JqKiB2b2xhdGlsZQpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf
X2luc3Q+IDo6X1NfZnJlZV9saXN0WwogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0Pjo6X05GUkVFTElTVFMKXSA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCB9OwojIDU1NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFsbG9jYXRv
ciB7CiAgdHlwZWRlZiBhbGxvYyBfQWxsb2M7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXpl
X3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1Rw
KiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYg
X1RwJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0
eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJl
YmluZCB7CiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9OwoKICBhbGxvY2F0
b3IoKSB0aHJvdygpIHt9CiAgYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvciYpIHRocm93KCkge30K
ICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYp
IHRocm93KCkge30KICB+YWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3Mo
cmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRk
cmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKCiAgX1Rw
KiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBf
X24gIT0gMCA/IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9m
KF9UcCkpKQogICAgICAgICAgICAgICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUo
cG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3As
IF9fbiAqIHNpemVvZihfVHApKTsgfQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJv
dygpCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25z
dHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFs
KTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVt
cGxhdGU8PgpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gewpwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3Qg
c2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IHZvaWQqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5
cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJl
YmluZCB7CiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBh
bGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4g
ZmFsc2U7Cn0KIyA2MzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2Mu
aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfX2FsbG9jYXRv
ciB7CiAgX0FsbG9jIF9fdW5kZXJseWluZ19hbGxvYzsKCiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90
eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCog
cG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9U
cCYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlw
ZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJp
bmQgewogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07Cgog
IF9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9y
JiBfX2EpIHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdf
YWxsb2MpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAgX19hbGxvY2F0b3IoY29uc3QgX19h
bGxvY2F0b3I8X1RwMSwgX0FsbG9jPiYgX19hKSB0aHJvdygpCiAgICA6IF9fdW5kZXJseWluZ19h
bGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQogIH5fX2FsbG9jYXRvcigpIHRocm93KCkg
e30KCiAgcG9pbnRlciBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7
IH0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyBy
ZXR1cm4gJl9feDsgfQoKCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lk
KiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMAogICAgICAgID8gc3RhdGljX2Nhc3Q8X1RwKj4o
X191bmRlcmx5aW5nX2FsbG9jLmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSkKICAgICAgICA6
IDA7CiAgfQoKCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQog
ICAgeyBfX3VuZGVybHlpbmdfYWxsb2MuZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHAp
KTsgfQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiBz
aXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3As
IGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJv
eShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BbGxv
Yz4KY2xhc3MgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPiB7CiAgdHlwZWRlZiBzaXplX3Qgc2l6
ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZv
aWQqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVk
ZWYgdm9pZCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmlu
ZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9f
YTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9f
dW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKCgoKCnRlbXBs
YXRlIDxpbnQgaW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxv
Y190ZW1wbGF0ZTxpbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2Nf
YWxsb2NfdGVtcGxhdGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxpbnQg
X19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBs
YXRlPF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9j
X3RlbXBsYXRlPF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4m
LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7CiAg
cmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0KIyA3NjEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0cwp7CiAgc3RhdGlj
IGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBf
QWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgYWxsb2NhdG9yX3R5cGU7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjb25zdCBib29sIF9BbGxv
Y190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfVHAxPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGFsbG9jYXRv
cjxfVHAxPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwog
IHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgYWxsb2M+IF9BbGxvY190eXBlOwogIHR5cGVkZWYg
YWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVt
cGxhdGU8X19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0
cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8
X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxv
Y19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJh
aXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CnsK
ICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2lt
cGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0
PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19k
ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBhbGxv
Y2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVj
dCBfQWxsb2NfdHJhaXRzPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMgY29u
c3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9U
cCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0
b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3Ry
YWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9j
X2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0
YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8
X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07
CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5z
dD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19hbGxv
Y2F0b3I8X1RwMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9T
X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsK
ICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
LF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX1RwMSwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAs
IF9fYWxsb2NhdG9yPF9UcDEsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CnsKICBzdGF0aWMgY29u
c3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9U
cCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0
b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07Cgp9CiMgNjQg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDYzICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9uZXciIDEgMwojIDY0ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDc2ICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCnRlbXBsYXRl
IDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHZvaWQgX0NvbnN0cnVjdChfVDEqIF9fcCwg
Y29uc3QgX1QyJiBfX3ZhbHVlKSB7Cm5ldyAoKHZvaWQqKSBfX3ApIF9UMShfX3ZhbHVlKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZvaWQgX0NvbnN0cnVjdChfVDEqIF9fcCkgewog
IG5ldyAoKHZvaWQqKSBfX3ApIF9UMSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUg
dm9pZCBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikgewogIF9fcG9pbnRlci0+fl9UcCgpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZApfX2Rlc3Ryb3lfYXV4KF9Gb3J3
YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlw
ZSkKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGRlc3Ryb3ko
JipfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2
b2lkIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190
cnVlX3R5cGUpIHt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1Rw
PgppbmxpbmUgdm9pZApfX2Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fbGFzdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0
czxfVHA+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICBfVHJpdmlhbF9kZXN0cnVj
dG9yOwogIF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfVHJpdmlhbF9kZXN0cnVjdG9y
KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgX0Rl
c3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkg
ewogIF9fZGVzdHJveShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0K
CmlubGluZSB2b2lkIF9EZXN0cm95KGNoYXIqLCBjaGFyKikge30KaW5saW5lIHZvaWQgX0Rlc3Ry
b3koaW50KiwgaW50Kikge30KaW5saW5lIHZvaWQgX0Rlc3Ryb3kobG9uZyosIGxvbmcqKSB7fQpp
bmxpbmUgdm9pZCBfRGVzdHJveShmbG9hdCosIGZsb2F0Kikge30KaW5saW5lIHZvaWQgX0Rlc3Ry
b3koZG91YmxlKiwgZG91YmxlKikge30KaW5saW5lIHZvaWQgX0Rlc3Ryb3kod2NoYXJfdCosIHdj
aGFyX3QqKSB7fQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgdm9p
ZCBjb25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkgewogIF9Db25zdHJ1Y3Qo
X19wLCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZvaWQgY29uc3Ry
dWN0KF9UMSogX19wKSB7CiAgX0NvbnN0cnVjdChfX3ApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgppbmxpbmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX0Rlc3Ryb3koX19wb2lu
dGVyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIGRl
c3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkg
ewogIF9EZXN0cm95KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCn0KIyA2NSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDYzICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAxIDMKIyA2NCAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDIgMwoKbmFtZXNwYWNlIHN0
ZAp7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4K
aW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7
CiAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlcgpfX3VuaW5p
dGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9f
cmVzdWx0OwogIHRyeSB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qs
ICsrX19jdXIpCiAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJu
IF9fY3VyOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsgdGhy
b3c7IH07Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHkoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVf
dHJhaXRzPF9UcD46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXpl
ZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0Zvcndh
cmRJdGVyCiAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewog
IHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19yZXN1bHQpKTsKfQoK
aW5saW5lIGNoYXIqIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25z
dCBjaGFyKiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogX19y
ZXN1bHQpIHsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsK
ICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB3Y2hhcl90
Kgp1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJf
dCogX19sYXN0LAogICAgICAgICAgICAgICAgICAgd2NoYXJfdCogX19yZXN1bHQpCnsKICBtZW1t
b3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJz
dCkpOwogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KcGFp
cjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0
SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90
YWcpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICB0cnkgewogICAgZm9yICgg
OyBfX2NvdW50ID4gMCA7IC0tX19jb3VudCwgKytfX2ZpcnN0LCArK19fY3VyKQogICAgICBfQ29u
c3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9G
b3J3YXJkSXRlcj4oX19maXJzdCwgX19jdXIpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3ko
X19yZXN1bHQsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X1Jh
bmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICByYW5kb21f
YWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCA9IF9fZmly
c3QgKyBfX2NvdW50OwogIHJldHVybiBwYWlyPF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9yd2FyZEl0
ZXI+KAogICAgICAgICAgICAgICAgIF9fbGFzdCwKICAgICAgICAgICAgICAgICB1bmluaXRpYWxp
emVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8
X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0
ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwg
X19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVy
YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBf
Rm9yd2FyZEl0ZXI+CnVuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1Np
emUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7
CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShf
X2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgpp
bmxpbmUgdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9feCwgX190cnVlX3R5cGUpCnsKICBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkCl9fdW5pbml0aWFsaXpl
ZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsKICBf
Rm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSB7CiAgICBmb3IgKCA7IF9fY3VyICE9
IF9fbGFzdDsgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogIH0KICBj
YXRjaCguLi4pIHsgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOyB0aHJvdzsgfTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgdm9p
ZCBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gs
IF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0Rf
dHlwZSBfSXNfUE9EOwogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3Qs
IF9feCwgX0lzX1BPRCgpKTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9UcD4KaW5saW5lIHZvaWQgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgX191bmluaXRp
YWxpemVkX2ZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7
Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9U
cD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwg
X194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNz
IF9UcD4KX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9U
cCYgX194LCBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0Owog
IHRyeSB7CiAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQogICAgICBfQ29uc3Ry
dWN0KCYqX19jdXIsIF9feCk7CiAgICByZXR1cm4gX19jdXI7CiAgfQogIGNhdGNoKC4uLikgeyBf
RGVzdHJveShfX2ZpcnN0LCBfX2N1cik7IHRocm93OyB9Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgX0Zv
cndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9T
aXplIF9fbiwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5
cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlh
bGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9G
b3J3YXJkSXRlcgp1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1Np
emUgX19uLCBjb25zdCBfVHAmIF9feCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9u
KF9fZmlyc3QsIF9fbiwgX194LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CiMgMjYwICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfRm9yd2FyZEl0
ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICBfRm9yd2FyZEl0ZXIg
X19taWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsK
ICB0cnkgewogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0Miwg
X19taWQpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhy
b3c7IH07Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX0lucHV0SXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9j
b3B5KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCnsKICB1bmluaXRpYWxpemVk
X2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwogIHRyeSB7CiAgICByZXR1cm4gdW5pbml0aWFs
aXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rl
c3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7IH07Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191
bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9f
bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBf
Rm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9feCkKewogIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJz
dDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKICB0cnkgewogICAgdW5pbml0aWFsaXplZF9maWxsKF9f
bWlkMiwgX19sYXN0MiwgX194KTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fZmlyc3Qy
LCBfX21pZDIpOyB0aHJvdzsgfTsKfQoKfQojIDY2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyA2MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF92ZWN0b3IuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
aXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA2NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvZXhjZXB0
aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9m
dW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRf
ZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAg
dm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBl
aWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
b3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVf
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29u
c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMg
NjUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDIgMwojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDY2
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKCm5hbWVz
cGFjZSBzdGQKewojIDc3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rv
ci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX0lzU3Rh
dGljPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAg
ICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3Qg
eyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0
IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0
YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KCnByb3RlY3Rl
ZDoKICBhbGxvY2F0b3JfdHlwZSBfTV9kYXRhX2FsbG9jYXRvcjsKICBfVHAqIF9NX3N0YXJ0Owog
IF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7CgogIF9UcCogX01fYWxs
b2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRl
KF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICB7
IGlmIChfX3ApIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX24pOyB9Cn07CgoK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9WZWN0b3JfYWxs
b2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5h
bWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAg
ICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0
IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0
IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5k
X29mX3N0b3JhZ2UoMCkKICB7fQoKcHJvdGVjdGVkOgogIF9UcCogX01fc3RhcnQ7CiAgX1RwKiBf
TV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBf
QWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlIF9BbGxvY190eXBlOwog
IF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjph
bGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19u
KQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7fQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX1ZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMg
X1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlw
ZWRlZiBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAg
ICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFs
bG9jYXRvcl90eXBlOwoKICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkg
OiBfQmFzZShfX2EpIHt9CiAgX1ZlY3Rvcl9iYXNlKHNpemVfdCBfX24sIGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9f
bik7CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01f
c3RhcnQgKyBfX247CiAgfQoKICB+X1ZlY3Rvcl9iYXNlKCkgeyBfTV9kZWFsbG9jYXRlKF9NX3N0
YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KY2xhc3MgdmVjdG9yIDogcHJv
dGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4KewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKcHJpdmF0ZToKICB0eXBlZGVmIF9W
ZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CiAgdHlwZWRlZiB2ZWN0b3I8X1RwLCBfQWxs
b2M+IHZlY3Rvcl90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25z
dF9wb2ludGVyOwogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwgdmVjdG9yX3R5
cGU+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwg
dmVjdG9yX3R5cGU+IGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJl
bmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVk
ZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7
CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBl
OwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6
Z2V0X2FsbG9jYXRvcigpOyB9CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVy
YXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8
aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcgX0Jhc2U6Ol9N
X2FsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpf
TV9zdGFydDsKICB1c2luZyBfQmFzZTo6X01fZmluaXNoOwogIHVzaW5nIF9CYXNlOjpfTV9lbmRf
b2Zfc3RvcmFnZTsKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19w
b3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpOwogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBf
X3Bvc2l0aW9uKTsKCnB1YmxpYzoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9y
IChfTV9zdGFydCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CiAgICB7IHJldHVy
biBjb25zdF9pdGVyYXRvciAoX01fc3RhcnQpOyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4g
aXRlcmF0b3IgKF9NX2ZpbmlzaCk7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBjb25zdF9pdGVyYXRvciAoX01fZmluaXNoKTsgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJi
ZWdpbigpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IoZW5kKCkpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgIHsgcmV0dXJu
IHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJl
bmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsg
fQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkg
LSBiZWdpbigpKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBz
aXplX3R5cGUoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25z
dAogICAgeyByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdl
KSAtIGJlZ2luKCkpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0CiAgICB7IHJldHVybiBiZWdpbigp
ID09IGVuZCgpOyB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIHsgcmV0
dXJuICooYmVnaW4oKSArIF9fbik7IH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXpl
X3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CgogIHZvaWQgX01f
cmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgaWYgKF9fbiA+PSB0aGlzLT5z
aXplKCkpCiAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJ2ZWN0b3IiKTsKICB9CgogIHJlZmVy
ZW5jZSBhdChzaXplX3R5cGUgX19uKQogICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4g
KCp0aGlzKVtfX25dOyB9CiAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0
CiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KCiAgZXhw
bGljaXQgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp
KQogICAgOiBfQmFzZShfX2EpIHt9CgogIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAm
IF9fdmFsdWUsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3Jf
dHlwZSgpKQogICAgOiBfQmFzZShfX24sIF9fYSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFs
aXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7IH0KCiAgZXhwbGljaXQgdmVjdG9y
KHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsg
X01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9
CgogIHZlY3Rvcihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCiAgICA6IF9CYXNlKF9f
eC5zaXplKCksIF9feC5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlh
bGl6ZWRfY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7IH0KCgogIHRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYg
X19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EpIHsKICAgIHR5cGVkZWYgdHlwZW5h
bWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAg
X01faW5pdGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW50ZWdl
ciBfX24sIF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBlKSB7CiAgICBfTV9zdGFydCA9IF9N
X2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwog
ICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1
ZSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbml0
aWFsaXplX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgIF9NX3JhbmdlX2lu
aXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsK
ICB9CgogIH52ZWN0b3IoKSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7IH0KCiAgdmVj
dG9yPF9UcCwgX0FsbG9jPiYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9f
eCk7CiAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgIGlmIChjYXBhY2l0eSgpIDwg
X19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBw
b2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwgX01fZmlu
aXNoKTsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxv
Y2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0
YXJ0ID0gX190bXA7CiAgICAgIF9NX2ZpbmlzaCA9IF9fdG1wICsgX19vbGRfc2l6ZTsKICAgICAg
X01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIH0KICB9CgoKCgoKCiAgdm9p
ZCBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgeyBfTV9maWxsX2Fzc2ln
bihfX24sIF9fdmFsKTsgfQogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29u
c3QgX1RwJiBfX3ZhbCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lk
IGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsK
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdy
YWwgX0ludGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0lu
dGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNz
aWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQog
ICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IF9N
X2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3Qp
KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25f
YXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19m
aXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGZvcndh
cmRfaXRlcmF0b3JfdGFnKTsKCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7
IH0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQog
IHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgY29uc3RfcmVmZXJl
bmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KCiAgdm9pZCBwdXNoX2Jh
Y2soY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3Jh
Z2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytfTV9maW5pc2g7
CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgfQogIHZv
aWQgcHVzaF9iYWNrKCkgewogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkg
ewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoKTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAg
ICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCkpOwogIH0KICB2b2lkIHN3YXAodmVjdG9y
PF9UcCwgX0FsbG9jPiYgX194KSB7CiAgICBzdGQ6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFy
dCk7CiAgICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAgIHN0ZDo6c3dh
cChfTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9CgogIGl0ZXJh
dG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkgewogICAgc2l6
ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBf
TV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIGNvbnN0cnVj
dChfTV9maW5pc2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAg
ICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pLCBfX3gpOwogICAgcmV0dXJuIGJl
Z2luKCkgKyBfX247CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uKSB7
CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmlu
aXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAgICAg
Y29uc3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQog
ICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pKTsKICAgIHJldHVybiBiZWdp
bigpICsgX19uOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQg
aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRl
cmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9z
LCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBf
SW50ZWdlcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVn
ZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVf
dHlwZSkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9fbiwgKF9UcCkg
X192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2lu
c2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbnNlcnQoX19wb3Ms
IF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoKICB2
b2lkIGluc2VydCAoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194
KQogICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOyB9CgogIHZvaWQgX01fZmls
bF9pbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7
CgogIHZvaWQgcG9wX2JhY2soKSB7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01fZmlu
aXNoKTsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgaWYg
KF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBlbmQo
KSwgX19wb3NpdGlvbik7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01fZmluaXNoKTsK
ICAgIHJldHVybiBfX3Bvc2l0aW9uOwogIH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2Zp
cnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9faShjb3B5KF9fbGFzdCwgZW5k
KCksIF9fZmlyc3QpKTsKICAgIGRlc3Ryb3koX19pLCBlbmQoKSk7CiAgICBfTV9maW5pc2ggPSBf
TV9maW5pc2ggLSAoX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19maXJzdDsKICB9Cgog
IHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCkgewogICAg
aWYgKF9fbmV3X3NpemUgPCBzaXplKCkpCiAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX25ld19zaXpl
LCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUo
KSwgX194KTsKICB9CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUpIHsgcmVzaXpl
KF9fbmV3X3NpemUsIF9UcCgpKTsgfQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVu
ZCgpKTsgfQoKcHJvdGVjdGVkOgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4K
ICBwb2ludGVyIF9NX2FsbG9jYXRlX2FuZF9jb3B5KHNpemVfdHlwZSBfX24sIF9Gb3J3YXJkSXRl
cmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICB7CiAgICBwb2ludGVyIF9fcmVzdWx0ID0g
X01fYWxsb2NhdGUoX19uKTsKICAgIHRyeSB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQogICAg
Y2F0Y2goLi4uKSB7IF9NX2RlYWxsb2NhdGUoX19yZXN1bHQsIF9fbik7IHRocm93OyB9OwogIH0K
CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlh
bGl6ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CiAgICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7
CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5n
ZV9pbml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQog
IHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf
X24pOwogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29mX3N0b3Jh
Z2UgPSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShf
X2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0
b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJk
X2l0ZXJhdG9yX3RhZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25z
dCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gX194LnNpemUoKSA9PSBfX3ku
c2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdp
bigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApv
cGVyYXRvcjwoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1Rw
LCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJl
Z2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJl
Z2luKCksIF9feS5lbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
aW5saW5lIHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIHZlY3RvcjxfVHAsIF9B
bGxvYz4mIF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxs
b2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9f
eCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi
b29sCm9wZXJhdG9yPihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3Rv
cjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PShjb25zdCB2ZWN0
b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewog
IHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gs
IGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdmVjdG9yPF9UcCxfQWxsb2M+
Jgp2ZWN0b3I8X1RwLF9BbGxvYz46Om9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+
JiBfX3gpCnsKICBpZiAoJl9feCAhPSB0aGlzKSB7CiAgICBjb25zdCBzaXplX3R5cGUgX194bGVu
ID0gX194LnNpemUoKTsKICAgIGlmIChfX3hsZW4gPiBjYXBhY2l0eSgpKSB7CiAgICAgIHBvaW50
ZXIgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX3hsZW4sIF9feC5iZWdpbigpLCBfX3gu
ZW5kKCkpOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFs
bG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01f
c3RhcnQgPSBfX3RtcDsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9feGxl
bjsKICAgIH0KICAgIGVsc2UgaWYgKHNpemUoKSA+PSBfX3hsZW4pIHsKICAgICAgaXRlcmF0b3Ig
X19pKGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSkpOwogICAgICBkZXN0cm95
KF9faSwgZW5kKCkpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9f
eC5iZWdpbigpICsgc2l6ZSgpLCBfTV9zdGFydCk7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShf
X3guYmVnaW4oKSArIHNpemUoKSwgX194LmVuZCgpLCBfTV9maW5pc2gpOwogICAgfQogICAgX01f
ZmluaXNoID0gX01fc3RhcnQgKyBfX3hsZW47CiAgfQogIHJldHVybiAqdGhpczsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9N
X2ZpbGxfYXNzaWduKHNpemVfdCBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKQp7CiAgaWYg
KF9fbiA+IGNhcGFjaXR5KCkpIHsKICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19uLCBf
X3ZhbCwgZ2V0X2FsbG9jYXRvcigpKTsKICAgIF9fdG1wLnN3YXAoKnRoaXMpOwogIH0KICBlbHNl
IGlmIChfX24gPiBzaXplKCkpIHsKICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAg
IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gc2l6ZSgp
LCBfX3ZhbCk7CiAgfQogIGVsc2UKICAgIGVyYXNlKGZpbGxfbihiZWdpbigpLCBfX24sIF9fdmFs
KSwgZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9h
dXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIGl0ZXJhdG9y
IF9fY3VyKGJlZ2luKCkpOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0g
ZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkKICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgZWxzZQogICAgaW5z
ZXJ0KGVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CnZvaWQKdmVjdG9yPF9UcCwg
X0FsbG9jPjo6X01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh
dG9yX3RhZykgewogIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19s
YXN0LCBfX2xlbik7CgogIGlmIChfX2xlbiA+IGNhcGFjaXR5KCkpIHsKICAgIHBvaW50ZXIgX190
bXAoX01fYWxsb2NhdGVfYW5kX2NvcHkoX19sZW4sIF9fZmlyc3QsIF9fbGFzdCkpOwogICAgZGVz
dHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9N
X2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX3RtcDsKICAgIF9N
X2VuZF9vZl9zdG9yYWdlID0gX01fZmluaXNoID0gX01fc3RhcnQgKyBfX2xlbjsKICB9CiAgZWxz
ZSBpZiAoc2l6ZSgpID49IF9fbGVuKSB7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2goY29weShf
X2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KSk7CiAgICBkZXN0cm95KF9fbmV3X2ZpbmlzaCwgZW5k
KCkpOwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICB9CiAgZWxzZSB7CiAg
ICBfRm9yd2FyZEl0ZXIgX19taWQgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZCwgc2l6ZSgp
KTsKICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9NX3N0YXJ0KTsKICAgIF9NX2ZpbmlzaCA9IHVu
aW5pdGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwogIH0KfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9N
X2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCnsKICBpZiAo
X01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3QoX01fZmluaXNo
LCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAgX1RwIF9feF9jb3B5ID0g
X194OwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2ggLSAy
KSwgaXRlcmF0b3IoX01fZmluaXNoLSAxKSk7CiAgICAqX19wb3NpdGlvbiA9IF9feF9jb3B5Owog
IH0KICBlbHNlIHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAg
Y29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUg
OiAxOwogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgIGl0
ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICB0cnkgewogICAgICBfX25ld19m
aW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLCBfX3Bvc2l0aW9u
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3RhcnQpOwog
ICAgICBjb25zdHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194KTsKICAgICAgKytfX25ld19m
aW5pc2g7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9u
LCBpdGVyYXRvcihfTV9maW5pc2gpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19uZXdfZmluaXNoKTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShfX25l
d19zdGFydCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxf
X2xlbikpOyB0aHJvdzsgfTsKCiAgICBkZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAgIF9NX2Rl
YWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01f
c3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2gu
YmFzZSgpOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xl
bjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZAp2ZWN0b3I8
X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24pCnsKICBpZiAo
X01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3QoX01fZmluaXNo
LCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAgY29weV9iYWNrd2FyZChf
X3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2ggLSAyKSwKICAgICAgICAgICAgICAgICAgaXRl
cmF0b3IoX01fZmluaXNoIC0gMSkpOwogICAgKl9fcG9zaXRpb24gPSBfVHAoKTsKICB9CiAgZWxz
ZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNp
emVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAg
IHBvaW50ZXIgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICBwb2ludGVyIF9f
bmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogICAgdHJ5IHsKICAgICAgX19uZXdfZmluaXNoID0g
dW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgY29u
c3RydWN0KF9fbmV3X2ZpbmlzaCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19m
aW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7
CiAgICB9CiAgICBjYXRjaCguLi4pIHsgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNo
KSwgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxfX2xlbikpOyB0aHJvdzsgfTsKCiAgICBkZXN0
cm95KGJlZ2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9v
Zl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgIF9N
X2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3Rh
cnQgKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9p
ZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u
LCBzaXplX3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9fbiAhPSAwKSB7CiAgICBpZiAoc2l6ZV90eXBlKF9N
X2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsKICAgICAgX1RwIF9feF9jb3B5
ID0gX194OwogICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVuZCgpIC0gX19w
b3NpdGlvbjsKICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7CiAgICAgIGlm
IChfX2VsZW1zX2FmdGVyID4gX19uKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2Zp
bmlzaCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBf
X247CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2ggLSBfX24s
IF9fb2xkX2ZpbmlzaCk7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgX19u
LCBfX3hfY29weSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9m
aWxsX24oX01fZmluaXNoLCBfX24gLSBfX2VsZW1zX2FmdGVyLCBfX3hfY29weSk7CiAgICAgICAg
X01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0aWFsaXplZF9j
b3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5p
c2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fb2xkX2Zpbmlz
aCwgX194X2NvcHkpOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9f
b2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3Rh
cnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3
X3N0YXJ0KTsKICAgICAgdHJ5IHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVk
X2NvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2Zp
bmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fbmV3X2ZpbmlzaCwgX19uLCBfX3gpOwogICAg
ICAgIF9fbmV3X2ZpbmlzaAogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlv
biwgZW5kKCksIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKSB7IChkZXN0
cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQu
YmFzZSgpLF9fbGVuKSk7IHRocm93OyB9OwoKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmlu
aXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBf
TV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgICBfTV9m
aW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9f
bmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CnZvaWQKdmVj
dG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykK
ewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAgX19wb3MgPSBp
bnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICsrX19wb3M7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2
b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3Bvc2l0
aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRv
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3
YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgc2l6ZV90
eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICBpZiAo
c2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsKICAgICAg
Y29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAg
IGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRl
ciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9N
X2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNv
cHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gp
OwogICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAg
ICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAg
ICBhZHZhbmNlKF9fbWlkLCBfX2VsZW1zX2FmdGVyKTsKICAgICAgICB1bmluaXRpYWxpemVkX2Nv
cHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0g
X19lbGVtc19hZnRlcjsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19v
bGRfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVy
OwogICAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9fcG9zaXRpb24pOwogICAgICB9CiAgICB9
CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAg
ICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwg
X19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAg
ICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgdHJ5IHsKICAgICAg
ICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc2l0aW9uLCBfX25l
d19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAg
ID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksIF9f
bmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKSB7IChkZXN0cm95KF9fbmV3X3N0
YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQuYmFzZSgpLF9fbGVu
KSk7IHRocm93OyB9OwoKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAg
X01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAg
ICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgICBfTV9maW5pc2ggPSBfX25l
d19maW5pc2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJh
c2UoKSArIF9fbGVuOwogICAgfQogIH0KfQoKfQojIDY3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2J2ZWN0b3IuaCIgMSAzCiMgNjMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfYnZlY3Rvci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKc3RhdGljIGNvbnN0IGludCBf
X1dPUkRfQklUID0gaW50KDgqc2l6ZW9mKHVuc2lnbmVkIGludCkpOwoKc3RydWN0IF9CaXRfcmVm
ZXJlbmNlIHsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX21hc2s7CiAg
X0JpdF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6
IF9NX3AoX194KSwgX01fbWFzayhfX3kpIHt9CgpwdWJsaWM6CiAgX0JpdF9yZWZlcmVuY2UoKSA6
IF9NX3AoMCksIF9NX21hc2soMCkge30KICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISghKCpfTV9wICYgX01fbWFzaykpOyB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShib29s
IF9feCkKICB7CiAgICBpZiAoX194KSAqX01fcCB8PSBfTV9tYXNrOwogICAgZWxzZSAqX01fcCAm
PSB+X01fbWFzazsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJh
dG9yPShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KQogICAgeyByZXR1cm4gKnRoaXMgPSBib29s
KF9feCk7IH0KICBib29sIG9wZXJhdG9yPT0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkgY29u
c3QKICAgIHsgcmV0dXJuIGJvb2woKnRoaXMpID09IGJvb2woX194KTsgfQogIGJvb2wgb3BlcmF0
b3I8KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiAhYm9vbCgq
dGhpcykgJiYgYm9vbChfX3gpOwogIH0KICB2b2lkIGZsaXAoKSB7ICpfTV9wIF49IF9NX21hc2s7
IH0KfTsKCmlubGluZSB2b2lkIHN3YXAoX0JpdF9yZWZlcmVuY2UgX194LCBfQml0X3JlZmVyZW5j
ZSBfX3kpCnsKICBib29sIF9fdG1wID0gX194OwogIF9feCA9IF9feTsKICBfX3kgPSBfX3RtcDsK
fQoKc3RydWN0IF9CaXRfaXRlcmF0b3JfYmFzZSA6IHB1YmxpYyByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yPGJvb2wsIHB0cmRpZmZfdD4KewogIHVuc2lnbmVkIGludCogX01fcDsKICB1bnNpZ25lZCBp
bnQgX01fb2Zmc2V0OwoKICBfQml0X2l0ZXJhdG9yX2Jhc2UodW5zaWduZWQgaW50KiBfX3gsIHVu
c2lnbmVkIGludCBfX3kpCiAgICA6IF9NX3AoX194KSwgX01fb2Zmc2V0KF9feSkge30KCiAgdm9p
ZCBfTV9idW1wX3VwKCkgewogICAgaWYgKF9NX29mZnNldCsrID09IF9fV09SRF9CSVQgLSAxKSB7
CiAgICAgIF9NX29mZnNldCA9IDA7CiAgICAgICsrX01fcDsKICAgIH0KICB9CiAgdm9pZCBfTV9i
dW1wX2Rvd24oKSB7CiAgICBpZiAoX01fb2Zmc2V0LS0gPT0gMCkgewogICAgICBfTV9vZmZzZXQg
PSBfX1dPUkRfQklUIC0gMTsKICAgICAgLS1fTV9wOwogICAgfQogIH0KCiAgdm9pZCBfTV9pbmNy
KHB0cmRpZmZfdCBfX2kpIHsKICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kgKyBfTV9vZmZz
ZXQ7CiAgICBfTV9wICs9IF9fbiAvIF9fV09SRF9CSVQ7CiAgICBfX24gPSBfX24gJSBfX1dPUkRf
QklUOwogICAgaWYgKF9fbiA8IDApIHsKICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkg
X19uICsgX19XT1JEX0JJVDsKICAgICAgLS1fTV9wOwogICAgfSBlbHNlCiAgICAgIF9NX29mZnNl
dCA9ICh1bnNpZ25lZCBpbnQpIF9fbjsKICB9CgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfQml0
X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPT0gX19pLl9NX3Ag
JiYgX01fb2Zmc2V0ID09IF9faS5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0
IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA8IF9faS5f
TV9wIHx8IChfTV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA8IF9faS5fTV9vZmZzZXQpOwog
IH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0
IHsKICAgIHJldHVybiAhKCp0aGlzID09IF9faSk7CiAgfQogIGJvb2wgb3BlcmF0b3I+KGNvbnN0
IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX19pIDwgKnRoaXM7
CiAgfQogIGJvb2wgb3BlcmF0b3I8PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29u
c3QgewogICAgcmV0dXJuICEoX19pIDwgKnRoaXMpOwogIH0KICBib29sIG9wZXJhdG9yPj0oY29u
c3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzIDwg
X19pKTsKICB9Cn07CgppbmxpbmUgcHRyZGlmZl90Cm9wZXJhdG9yLShjb25zdCBfQml0X2l0ZXJh
dG9yX2Jhc2UmIF9feCwgY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3kpIHsKICByZXR1cm4g
X19XT1JEX0JJVCAqIChfX3guX01fcCAtIF9feS5fTV9wKSArIF9feC5fTV9vZmZzZXQgLSBfX3ku
X01fb2Zmc2V0Owp9CgoKc3RydWN0IF9CaXRfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRv
cl9iYXNlCnsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9C
aXRfcmVmZXJlbmNlKiBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRvcjsK
CiAgX0JpdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0JpdF9p
dGVyYXRvcih1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX0JpdF9p
dGVyYXRvcl9iYXNlKF9feCwgX195KSB7fQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3Qg
eyByZXR1cm4gcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7IH0KICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAg
aXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAg
ICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRv
ci0tKCkgewogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJh
dG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01f
YnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvcis9
KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIF9NX2luY3IoX19pKTsKICAgIHJldHVybiAqdGhp
czsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAg
KnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3Ir
KGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7
CiAgICByZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0oZGlmZmVy
ZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJl
dHVybiBfX3RtcCAtPSBfX2k7CiAgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNl
X3R5cGUgX19pKSB7IHJldHVybiAqKCp0aGlzICsgX19pKTsgfQp9OwoKaW5saW5lIF9CaXRfaXRl
cmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkg
eyByZXR1cm4gX194ICsgX19uOyB9CgoKc3RydWN0IF9CaXRfY29uc3RfaXRlcmF0b3IgOiBwdWJs
aWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIGJvb2wgcmVmZXJlbmNlOwogIHR5cGVk
ZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBib29sKiBwb2ludGVyOwog
IHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgX0JpdF9jb25z
dF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0JpdF9jb25zdF9p
dGVyYXRvcih1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX0JpdF9p
dGVyYXRvcl9iYXNlKF9feCwgX195KSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoY29uc3QgX0Jp
dF9pdGVyYXRvciYgX194KQogICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX3AsIF9feC5f
TV9vZmZzZXQpIHt9CgogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICBy
ZXR1cm4gX0JpdF9yZWZlcmVuY2UoX01fcCwgMVUgPDwgX01fb2Zmc2V0KTsKICB9CiAgY29uc3Rf
aXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gKnRo
aXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBjb25zdF9pdGVy
YXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwog
IH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKICAgIF9NX2J1bXBfZG93bigpOwog
ICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0tKGludCkgewog
ICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfZG93bigpOwogICAg
cmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNl
X3R5cGUgX19pKSB7CiAgICBfTV9pbmNyKF9faSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNv
bnN0X2l0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlz
ICs9IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9y
KyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9
ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9IF9faTsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3Bl
cmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9f
dG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0gX19pOwogIH0KICBjb25zdF9yZWZlcmVu
Y2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICByZXR1cm4gKigqdGhpcyAr
IF9faSk7CiAgfQp9OwoKaW5saW5lIF9CaXRfY29uc3RfaXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRp
ZmZfdCBfX24sIGNvbnN0IF9CaXRfY29uc3RfaXRlcmF0b3ImIF9feCkgeyByZXR1cm4gX194ICsg
X19uOyB9CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yLCBib29sIF9faXNfc3RhdGlj
PgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUg
X0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAg
IGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7
IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvcjsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0
IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0
YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVkOgog
IHVuc2lnbmVkIGludCogX01fYml0X2FsbG9jKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfTV9k
YXRhX2FsbG9jYXRvci5hbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQp
OyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAg
IF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX01fc3RhcnQuX01fcCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3Ap
OwogIH0KCiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0b3I+
OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgX01fZGF0YV9hbGxvY2F0b3I7CiAgX0JpdF9pdGVy
YXRvciBfTV9zdGFydDsKICBfQml0X2l0ZXJhdG9yIF9NX2ZpbmlzaDsKICB1bnNpZ25lZCBpbnQq
IF9NX2VuZF9vZl9zdG9yYWdlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yPgpjbGFz
cyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVk
ZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5
cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0
b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9CdmVjdG9yX2FsbG9j
X2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgOiBfTV9zdGFydCgpLCBfTV9maW5pc2go
KSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVuYW1l
IF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUKICAg
ICAgICAgIF9BbGxvY190eXBlOwoKICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3Qg
X19uKQogICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKChfX24gKyBfX1dPUkRfQklU
IC0gMSkvX19XT1JEX0JJVCk7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAoX01f
c3RhcnQuX01fcCkKICAgICAgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX01fc3RhcnQuX01fcCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFy
dC5fTV9wKTsKICB9CgogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBf
TV9maW5pc2g7CiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCnRlbXBsYXRl
IDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9CdmVjdG9yX2Jhc2UKICA6IHB1YmxpYyBfQnZlY3Rvcl9h
bGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190
cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfQnZlY3Rv
cl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9j
X3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsK
cHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRv
cl90eXBlOwoKICBfQnZlY3Rvcl9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jh
c2UoX19hKSB7fQogIH5fQnZlY3Rvcl9iYXNlKCkgeyBfQmFzZTo6X01fZGVhbGxvY2F0ZSgpOyB9
Cn07Cgp9CgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5o
IiAxIDMKIyAzNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYnZlY3Rvci5o
IiAyIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0FsbG9jPgogIGNsYXNz
IHZlY3Rvcjxib29sLCBfQWxsb2M+IDogcHVibGljIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPgogIHsK
ICBwdWJsaWM6CiAgICB0eXBlZGVmIGJvb2wgdmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgc2l6ZV90
IHNpemVfdHlwZTsKICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5
cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgdHlwZWRlZiBib29sIGNvbnN0X3Jl
ZmVyZW5jZTsKICAgIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UqIHBvaW50ZXI7CiAgICB0eXBlZGVm
IGNvbnN0IGJvb2wqIGNvbnN0X3BvaW50ZXI7CgogICAgdHlwZWRlZiBfQml0X2l0ZXJhdG9yIGl0
ZXJhdG9yOwogICAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoK
ICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvcjsKICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJz
ZV9pdGVyYXRvcjsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6
YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxs
b2NhdG9yKCkgY29uc3QgewogICAgICByZXR1cm4gX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpnZXRf
YWxsb2NhdG9yKCk7CiAgICB9CgogIHByb3RlY3RlZDoKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8
X0FsbG9jPjo6X01fYml0X2FsbG9jOwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+Ojpf
TV9kZWFsbG9jYXRlOwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9zdGFydDsK
ICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fZmluaXNoOwogICAgdXNpbmcgX0J2
ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgcHJvdGVjdGVkOgogICAg
dm9pZCBfTV9pbml0aWFsaXplKHNpemVfdHlwZSBfX24pIHsKICAgICAgdW5zaWduZWQgaW50KiBf
X3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAo
X19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0
b3IoX19xLCAwKTsKICAgICAgX01fZmluaXNoID0gX01fc3RhcnQgKyBkaWZmZXJlbmNlX3R5cGUo
X19uKTsKICAgIH0KICAgIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBi
b29sIF9feCkgewogICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2Up
IHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX01fZmluaXNo
ICsgMSk7CiAgICAgICAgKl9fcG9zaXRpb24gPSBfX3g7CiAgICAgICAgKytfTV9maW5pc2g7CiAg
ICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpID8gMiAq
IHNpemUoKSA6IF9fV09SRF9CSVQ7CiAgICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRf
YWxsb2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3Np
dGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgKl9faSsrID0gX194OwogICAgICAgIF9N
X2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgX01fZGVhbGxv
Y2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JE
X0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDAp
OwogICAgICB9CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAg
dm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRv
cl90YWcpIHsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcigpOwogICAgICBfTV9maW5pc2ggPSBp
dGVyYXRvcigpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IDA7CiAgICAgIGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwog
ICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgdm9pZCBfTV9p
bml0aWFsaXplX3JhbmdlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90
YWcpIHsKICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9f
bGFzdCwgX19uKTsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBjb3B5KF9fZmlyc3Qs
IF9fbGFzdCwgX01fc3RhcnQpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICAg
IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAgICAgIF9fcG9zID0g
aW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICAgICAgKytfX3BvczsKICAgICAgfQogICAgfQoK
ICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRf
cmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBpZiAoX19maXJzdCAh
PSBfX2xhc3QpIHsKICAgICAgICBzaXplX3R5cGUgX19uID0gMDsKICAgICAgICBkaXN0YW5jZShf
X2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0g
X19uKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVuZCgpLCBfTV9maW5p
c2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFz
dCwgX19wb3NpdGlvbik7CiAgICAgICAgICBfTV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9f
bik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0g
c2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsKICAgICAgICAgIHVuc2lnbmVkIGludCogX19xID0g
X01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4o
KSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgICBfX2kgPSBjb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlv
biwgZW5kKCksIF9faSk7CiAgICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgICBfTV9l
bmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklU
OwogICAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICAgIH0KICAgICAg
fQogICAgfQoKICBwdWJsaWM6CiAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX3N0YXJ0
OyB9CiAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9
CiAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7IH0KICAgIGNvbnN0X2l0ZXJh
dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQoKICAgIHJldmVyc2VfaXRlcmF0
b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICAgIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgewogICAgICByZXR1cm4gY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcihlbmQoKSk7CiAgICB9CiAgICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7
IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgICBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yIHJlbmQoKSBjb25zdCB7CiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
KGJlZ2luKCkpOwogICAgfQoKICAgIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gc2l6
ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICAgIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KICAgIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0
IHsKICAgICAgcmV0dXJuIHNpemVfdHlwZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFn
ZSwgMCkgLSBiZWdpbigpKTsKICAgIH0KICAgIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBi
ZWdpbigpID09IGVuZCgpOyB9CgogICAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9f
bikKICAgICAgeyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOyB9CiAg
ICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25zdAogICAgICB7
IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0KCiAgICB2b2lkIF9N
X3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAgICAgaWYgKF9fbiA+PSB0aGlz
LT5zaXplKCkpCiAgICAgICAgX190aHJvd19yYW5nZV9lcnJvcigidmVjdG9yPGJvb2w+Iik7CiAg
ICB9CgogICAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAgICAgIHsgX01fcmFuZ2VfY2hl
Y2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGF0KHNp
emVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgq
dGhpcylbX19uXTsgfQoKICAgIGV4cGxpY2l0IHZlY3Rvcihjb25zdCBhbGxvY2F0b3JfdHlwZSYg
X19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19h
KSB7fQoKICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBib29sIF9fdmFsdWUsCiAgICAgICAgICAg
ICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDog
X0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24p
OwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8g
fjAgOiAwKTsKICAgIH0KCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgICAg
OiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsKICAgICAgX01f
aW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9y
YWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3IoY29uc3QgdmVjdG9yJiBfX3gpIDogX0J2ZWN0b3Jf
YmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2NhdG9yKCkpIHsKICAgICAgX01faW5pdGlhbGl6ZShf
X3guc2l6ZSgpKTsKICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7
CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2luaXRp
YWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKSB7
CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9l
bmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9pbml0aWFsaXplX3JhbmdlKF9f
Zmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogICAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgIGNvbnN0IGFsbG9j
YXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8
X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lu
cHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbml0aWFsaXplX2Rp
c3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICAgIH52ZWN0b3Io
KSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9yPShjb25zdCB2ZWN0b3ImIF9feCkgewogICAgICBp
ZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAgICAgIGlmIChfX3guc2l6ZSgpID4gY2Fw
YWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9pbml0aWFsaXpl
KF9feC5zaXplKCkpOwogICAgICB9CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwg
YmVnaW4oKSk7CiAgICAgIF9NX2ZpbmlzaCA9IGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX194
LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoKCgoKICAgIHZvaWQgX01fZmls
bF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9fbiA+IHNpemUoKSkg
ewogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4w
IDogMCk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX24gLSBzaXplKCksIF9feCk7CiAgICAgIH0K
ICAgICAgZWxzZSB7CiAgICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbiwgZW5kKCkpOwogICAgICAg
IGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAg
ICAgIH0KICAgIH0KCiAgICB2b2lkIGFzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkgeyBfTV9m
aWxsX2Fzc2lnbihfX24sIF9feCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVy
YXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2Zp
cnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
dGVnZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2Vy
IF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90KSBfX24s
IChib29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICAgIHZv
aWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0
ZXJhdG9yX3RhZykgewogICAgICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7CiAgICAgIGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJz
dCkKICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KQogICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQo
ZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3
YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19sZW4gPSAwOwogICAgICBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICAgICAgaWYgKF9fbGVuIDwgc2l6ZSgpKQog
ICAgICAgIGVyYXNlKGNvcHkoX19maXJzdCwgX19sYXN0LCBiZWdpbigpKSwgZW5kKCkpOwogICAg
ICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAg
ICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIGJl
Z2luKCkpOwogICAgICAgIGluc2VydChlbmQoKSwgX19taWQsIF9fbGFzdCk7CiAgICAgIH0KICAg
IH0KCiAgICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fbikgewogICAgICBpZiAoY2FwYWNpdHko
KSA8IF9fbikgewogICAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbik7
CiAgICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRlcmF0b3IoX19xLCAw
KSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3Io
X19xLCAwKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfX1dPUkRf
QklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgfQogICAgfQoKICAgIHJlZmVyZW5jZSBmcm9udCgp
IHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7
IHJldHVybiAqYmVnaW4oKTsgfQogICAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKGVuZCgp
IC0gMSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQo
KSAtIDEpOyB9CiAgICB2b2lkIHB1c2hfYmFjayhib29sIF9feCkgewogICAgICBpZiAoX01fZmlu
aXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UpCiAgICAgICAgKl9NX2ZpbmlzaCsrID0gX194
OwogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194KTsKICAgIH0KICAg
IHZvaWQgc3dhcCh2ZWN0b3I8Ym9vbCwgX0FsbG9jPiYgX194KSB7CiAgICAgIHN0ZDo6c3dhcChf
TV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwgX194Ll9N
X2ZpbmlzaCk7CiAgICAgIHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9v
Zl9zdG9yYWdlKTsKICAgIH0KICAgIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u
LCBib29sIF9feCA9IGJvb2woKSkgewogICAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19wb3Np
dGlvbiAtIGJlZ2luKCk7CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3Rv
cmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKQogICAgICAgICpfTV9maW5pc2grKyA9IF9feDsK
ICAgICAgZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwgX194KTsKICAgICAg
cmV0dXJuIGJlZ2luKCkgKyBfX247CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVn
ZXI+CiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIg
X19uLCBfSW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlw
ZSkgewogICAgICBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOwogICAgfQoKICAgIHRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNo
KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19mYWxzZV90eXBlKSB7CiAgICAgIF9NX2luc2VydF9yYW5nZShfX3BvcywgX19maXJz
dCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCiAgICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bv
c2l0aW9uLAogICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0KSB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0
SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbnNlcnRfZGlzcGF0Y2go
X19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogICAgdm9p
ZCBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29s
IF9feCkgewogICAgICBpZiAoX19uID09IDApIHJldHVybjsKICAgICAgaWYgKGNhcGFjaXR5KCkg
LSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQo
KSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAgIGZpbGwoX19wb3Np
dGlvbiwgX19wb3NpdGlvbiArIGRpZmZlcmVuY2VfdHlwZShfX24pLCBfX3gpOwogICAgICAgIF9N
X2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAgfQogICAgICBlbHNlIHsKICAg
ICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICAg
IHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICBpdGVyYXRv
ciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAg
ICAgIGZpbGxfbihfX2ksIF9fbiwgX194KTsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9z
aXRpb24sIGVuZCgpLCBfX2kgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgX01fZGVh
bGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX19X
T1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3Es
IDApOwogICAgICB9CiAgICB9CgogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwg
c2l6ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgICAgX01fZmlsbF9pbnNlcnQoX19wb3NpdGlv
biwgX19uLCBfX3gpOwogICAgfQoKICAgIHZvaWQgcG9wX2JhY2soKSB7IC0tX01fZmluaXNoOyB9
CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICAgIGlmIChfX3Bv
c2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwg
X19wb3NpdGlvbik7CiAgICAgICAgLS1fTV9maW5pc2g7CiAgICAgIHJldHVybiBfX3Bvc2l0aW9u
OwogICAgfQogICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19s
YXN0KSB7CiAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCk7CiAg
ICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQogICAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3
X3NpemUsIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgp
KQogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uZXdfc2l6ZSksIGVu
ZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUo
KSwgX194KTsKICAgIH0KICAgIHZvaWQgZmxpcCgpIHsKICAgICAgZm9yICh1bnNpZ25lZCBpbnQq
IF9fcCA9IF9NX3N0YXJ0Ll9NX3A7IF9fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZTsgKytfX3ApCiAg
ICAgICAgKl9fcCA9IH4qX19wOwogICAgfQoKICAgIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2lu
KCksIGVuZCgpKTsgfQogIH07CgoKdHlwZWRlZiB2ZWN0b3I8Ym9vbCwgYWxsb2M+IGJpdF92ZWN0
b3I7Cgp9CiMgNjggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgi
IDIgMwojIDMyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3ZlY3RvciIgMiAzCiMgMzQgImlu
dGVydmlldy5oIiAyCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9hbGdvcml0aG0iIDEg
MwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2FsZ29yaXRobSIgMwojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDEgMwojIDYwICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAzCgojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgNjIgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDYzICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAyIDMKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgNjQg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAxIDMKIyA2MyAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90ZW1wYnVmLmgiIDMKbmFtZXNwYWNl
IHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpwYWlyPF9UcCosIHB0cmRpZmZfdD4KX19nZXRf
dGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopCnsKICBpZiAoX19sZW4gPiBw
dHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkKICAgIF9fbGVuID0gMjE0NzQ4MzY0
NyAvIHNpemVvZihfVHApOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfVHAqIF9fdG1wID0g
KF9UcCopIG1hbGxvYygoc2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgaWYgKF9fdG1w
ICE9IDApCiAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190bXAsIF9fbGVuKTsK
ICAgIF9fbGVuIC89IDI7CiAgfQoKICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChfVHAq
KTAsIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgcGFpcjxfVHAqLCBwdHJkaWZm
X3Q+IGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbikgewogIHJldHVybiBfX2dl
dF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7Cn0KCgoKCgoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4KaW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1ZmZl
cihwdHJkaWZmX3QgX19sZW4sIF9UcCopIHsKICByZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1ZmZl
cihfX2xlbiwgKF9UcCopIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgp2b2lkIHJldHVybl90
ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKSB7CiAgZnJlZShfX3ApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgpjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlciB7
CnByaXZhdGU6CiAgcHRyZGlmZl90IF9NX29yaWdpbmFsX2xlbjsKICBwdHJkaWZmX3QgX01fbGVu
OwogIF9UcCogX01fYnVmZmVyOwoKICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZlcigpIHsKICAgIF9N
X29yaWdpbmFsX2xlbiA9IF9NX2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7CgogICAgaWYgKF9NX2xl
biA+IChwdHJkaWZmX3QpKDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICAgIF9NX2xlbiA9
IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX01fbGVuID4gMCkgewogICAg
ICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAqIHNpemVvZihfVHApKTsKICAgICAg
aWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAgICAgX01fbGVuIC89IDI7CiAgICB9CiAg
fQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7
fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2YWwsIF9fZmFsc2VfdHlw
ZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7CiAg
fQoKcHVibGljOgogIHB0cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fbGVuOyB9CiAg
cHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fb3JpZ2luYWxfbGVu
OyB9CiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQogIF9UcCogZW5kKCkgeyBy
ZXR1cm4gX01fYnVmZmVyICsgX01fbGVuOyB9CgogIF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJk
SXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsKCiAgICB0eXBlZGVm
IHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcgogICAgICAgICAgICBfVHJpdmlhbDsKCiAgICB0cnkgewogICAgICBfTV9sZW4gPSAwOwog
ICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2xlbik7CiAgICAgIF9NX2FsbG9jYXRl
X2J1ZmZlcigpOwogICAgICBpZiAoX01fbGVuID4gMCkKICAgICAgICBfTV9pbml0aWFsaXplX2J1
ZmZlcigqX19maXJzdCwgX1RyaXZpYWwoKSk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsgZnJlZShf
TV9idWZmZXIpOyBfTV9idWZmZXIgPSAwOyBfTV9sZW4gPSAwOyB0aHJvdzsgfTsKICB9CgogIH5f
VGVtcG9yYXJ5X2J1ZmZlcigpIHsKICAgIGRlc3Ryb3koX01fYnVmZmVyLCBfTV9idWZmZXIgKyBf
TV9sZW4pOwogICAgZnJlZShfTV9idWZmZXIpOwogIH0KCnByaXZhdGU6CgogIF9UZW1wb3Jhcnlf
YnVmZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KICB2b2lkIG9wZXJhdG9yPShjb25z
dCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXJhdG9yLAogICAgICAgICAgY2xhc3MgX1RwCiAgICAgICAgICAgICAgICAgICAgPSB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAg
PgpzdHJ1Y3QgdGVtcG9yYXJ5X2J1ZmZlciA6IHB1YmxpYyBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9y
d2FyZEl0ZXJhdG9yLCBfVHA+CnsKICB0ZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3Ig
X19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgICA6IF9UZW1wb3JhcnlfYnVmZmVy
PF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4oX19maXJzdCwgX19sYXN0KSB7fQogIH50ZW1wb3Jhcnlf
YnVmZmVyKCkge30KfTsKCn0KIyA2NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9hbGdvcml0aG0uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGdvLmgiIDEgMwojIDYzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs
Z28uaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaGVhcC5oIiAx
IDMKIyA2MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9oZWFwLmgiIDMKbmFt
ZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNs
YXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgp2b2lkCl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICBfRGlzdGFuY2UgX19ob2xlSW5kZXgsIF9EaXN0
YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSkKewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChf
X2hvbGVJbmRleCAtIDEpIC8gMjsKICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYm
ICooX19maXJzdCArIF9fcGFyZW50KSA8IF9fdmFsdWUpIHsKICAgICooX19maXJzdCArIF9faG9s
ZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgIF9faG9sZUluZGV4ID0gX19wYXJl
bnQ7CiAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICB9CiAgKihfX2ZpcnN0
ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fcHVz
aF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9EaXN0YW5jZSosIF9UcCopCnsKICBfX3B1
c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0
YW5jZSgwKSwKICAgICAgICAgICAgICBfVHAoKihfX2xhc3QgLSAxKSkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdm9pZApwdXNoX2hlYXAoX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX3B1
c2hfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNl
X3R5cGUoX19maXJzdCksIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwLAogICAg
ICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQKX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgX0Rpc3RhbmNl
IF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2Ug
X19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgd2hpbGUgKF9faG9sZUluZGV4ID4g
X190b3BJbmRleCAmJiBfX2NvbXAoKihfX2ZpcnN0ICsgX19wYXJlbnQpLCBfX3ZhbHVlKSkgewog
ICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAg
X19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkg
LyAyOwogIH0KICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAg
IGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3B1c2hfaGVhcF9hdXgo
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXAsCiAgICAgICAgICAgICAgICBfRGlz
dGFuY2UqLCBfVHAqKQp7CiAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKChfX2xhc3Qg
LSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2UoMCksCiAgICAgICAgICAgICAgX1RwKCooX19sYXN0
IC0gMSkpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
LCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQKcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19w
dXNoX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wLAogICAgICAgICAgICAgICAgICBf
X2Rpc3RhbmNlX3R5cGUoX19maXJzdCksIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3Mg
X1RwPgp2b2lkCl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9E
aXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBf
X3ZhbHVlKQp7CiAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICBfRGlzdGFu
Y2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAgd2hpbGUgKF9fc2Vjb25k
Q2hpbGQgPCBfX2xlbikgewogICAgaWYgKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpIDwgKihf
X2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpCiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAg
ICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwog
ICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgX19zZWNvbmRDaGlsZCA9IDIgKiAo
X19zZWNvbmRDaGlsZCArIDEpOwogIH0KICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewog
ICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQg
LSAxKSk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogIH0KICBfX3B1c2hf
aGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3Rh
bmNlPgppbmxpbmUgdm9pZApfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9EaXN0YW5jZSopCnsKICAqX19yZXN1bHQg
PSAqX19maXJzdDsKICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3Rh
bmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3BvcF9oZWFwX2F1eChf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgICAgX1RwKikKewogIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0g
MSwgX19sYXN0IC0gMSwKICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19kaXN0YW5j
ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRv
cj4KaW5saW5lIHZvaWQgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX3BvcF9oZWFw
X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAg
IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQKX19hZGp1c3RfaGVhcChfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAg
IF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0
YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgX0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQg
PSAyICogX19ob2xlSW5kZXggKyAyOwogIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsK
ICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksICooX19maXJzdCArIChf
X3NlY29uZENoaWxkIC0gMSkpKSkKICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgKihfX2ZpcnN0
ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7CiAgICBfX2hvbGVJ
bmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENo
aWxkICsgMSk7CiAgfQogIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAqKF9fZmly
c3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAg
IF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgfQogIF9fcHVzaF9oZWFwKF9fZmly
c3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl
LAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZApfX3BvcF9oZWFwKF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAog
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9D
b21wYXJlIF9fY29tcCwKICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3Q7CiAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShf
X2xhc3QgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgIF9fdmFsdWUsIF9fY29tcCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0Nv
bXBhcmU+CmlubGluZSB2b2lkCl9fcG9wX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LAogICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfVHAq
LCBfQ29tcGFyZSBfX2NvbXApCnsKICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9f
bGFzdCAtIDEsIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19jb21wLAogICAgICAgICAgICAgX19kaXN0
YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkCnBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LAogICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBf
Q29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBf
X3BvcF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19j
b21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1Rw
LCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQKX19tYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsCiAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9UcCos
IF9EaXN0YW5jZSopCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICBfRGlz
dGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChf
X2xlbiAtIDIpLzI7CgogIHdoaWxlICh0cnVlKSB7CiAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3Qs
IF9fcGFyZW50LCBfX2xlbiwgX1RwKCooX19maXJzdCArIF9fcGFyZW50KSkpOwogICAgaWYgKF9f
cGFyZW50ID09IDApIHJldHVybjsKICAgIF9fcGFyZW50LS07CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdm9pZAptYWtlX2hlYXAoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX21ha2Vf
aGVhcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3Qp
LCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9UcCwgY2xhc3Mg
X0Rpc3RhbmNlPgp2b2lkCl9fbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICBfQ29tcGFyZSBfX2Nv
bXAsIF9UcCosIF9EaXN0YW5jZSopCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVy
bjsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9EaXN0YW5jZSBfX3Bh
cmVudCA9IChfX2xlbiAtIDIpLzI7CgogIHdoaWxlICh0cnVlKSB7CiAgICBfX2FkanVzdF9oZWFw
KF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1RwKCooX19maXJzdCArIF9fcGFyZW50KSksCiAg
ICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwog
ICAgX19wYXJlbnQtLTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZAptYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBf
Q29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBf
X21ha2VfaGVhcChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCwKICAgICAgICAgICAgICBfX3ZhbHVl
X3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CnZvaWQgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fbGFz
dCAtIF9fZmlyc3QgPiAxKQogICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0pOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZApz
b3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICBw
b3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKfQoKfQojIDY0ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMiAzCgoKCm5hbWVzcGFjZSBzdGQKewoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBfX21lZGlhbihjb25zdCBf
VHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBpZiAo
X19hIDwgX19iKQogICAgaWYgKF9fYiA8IF9fYykKICAgICAgcmV0dXJuIF9fYjsKICAgIGVsc2Ug
aWYgKF9fYSA8IF9fYykKICAgICAgcmV0dXJuIF9fYzsKICAgIGVsc2UKICAgICAgcmV0dXJuIF9f
YTsKICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fYiA8
IF9fYykKICAgIHJldHVybiBfX2M7CiAgZWxzZQogICAgcmV0dXJuIF9fYjsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmCl9fbWVkaWFuKGNv
bnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MsIF9Db21wYXJlIF9f
Y29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBpZiAoX19jb21wKF9fYSwgX19iKSkK
ICAgIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgICByZXR1cm4gX19iOwogICAgZWxzZSBpZiAo
X19jb21wKF9fYSwgX19jKSkKICAgICAgcmV0dXJuIF9fYzsKICAgIGVsc2UKICAgICAgcmV0dXJu
IF9fYTsKICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgcmV0dXJuIF9fYTsKICBlbHNl
IGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgcmV0dXJuIF9fYzsKICBlbHNlCiAgICByZXR1cm4g
X19iOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9GdW5jdGlvbj4KX0Z1
bmN0aW9uIGZvcl9lYWNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9G
dW5jdGlvbiBfX2YpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0KQogICAgX19mKCpfX2ZpcnN0KTsKICByZXR1cm4gX19mOwp9CgoKCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfSW5wdXRJdGVyIGZpbmQoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3Rh
ZykKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhKCpfX2ZpcnN0ID09IF9fdmFsKSkK
ICAgICsrX19maXJzdDsKICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfSW5wdXRJdGVyIGZpbmRfaWYoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVy
YXRvcl90YWcpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgIV9fcHJlZCgqX19maXJz
dCkpCiAgICArK19fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNzSXRlciBmaW5kKF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgPSAoX19s
YXN0IC0gX19maXJzdCkgPj4gMjsKCiAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3Ry
aXBfY291bnQpIHsKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAg
ICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsK
ICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0
OwogICAgKytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmly
c3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogIGNh
c2UgMzoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19f
Zmlyc3Q7CiAgY2FzZSAyOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJz
dDsKICAgICsrX19maXJzdDsKICBjYXNlIDE6CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJl
dHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMDoKICBkZWZhdWx0OgogICAgcmV0
dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh
c3MgX1ByZWRpY2F0ZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgZmluZF9pZihfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9t
X2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICA9IChfX2xhc3Qg
LSBfX2ZpcnN0KSA+PiAyOwoKICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9j
b3VudCkgewogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytf
X2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsr
X19maXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAr
K19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAg
KytfX2ZpcnN0OwogIH0KCiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICBjYXNlIDM6CiAg
ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAg
Y2FzZSAyOgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytf
X2ZpcnN0OwogIGNhc2UgMToKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJz
dDsKICAgICsrX19maXJzdDsKICBjYXNlIDA6CiAgZGVmYXVsdDoKICAgIHJldHVybiBfX2xhc3Q7
CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0lu
cHV0SXRlciBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCiAgcmV0dXJuIGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJl
ZGljYXRlPgppbmxpbmUgX0lucHV0SXRlciBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3By
ZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBf
X3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBpZiAo
X19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19sYXN0OwogIF9Gb3J3YXJkSXRlciBfX25l
eHQgPSBfX2ZpcnN0OwogIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgaWYgKCpfX2Zp
cnN0ID09ICpfX25leHQpCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgX19maXJzdCA9IF9fbmV4
dDsKICB9CiAgcmV0dXJuIF9fbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIGFkamFjZW50X2ZpbmQoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBfX2xhc3Q7CiAgX0Zvcndh
cmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAg
ICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAgIHJldHVybiBfX2Zp
cnN0OwogICAgX19maXJzdCA9IF9fbmV4dDsKICB9CiAgcmV0dXJuIF9fbGFzdDsKfQoKCgoKCgoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemU+CnZvaWQg
Y291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBf
X3ZhbHVlLAogICAgICAgICAgIF9TaXplJiBfX24pCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCpfX2ZpcnN0ID09
IF9fdmFsdWUpCiAgICAgICsrX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1NpemU+CnZvaWQgY291bnRfaWYoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAg
X1NpemUmIF9fbikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICsrX19uOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgp0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQpjb3VudChfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNl
X3R5cGUgX19uID0gMDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg
ICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgKytfX247CiAgcmV0dXJuIF9fbjsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CnR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCmNvdW50X2lmKF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZl
cmVuY2VfdHlwZSBfX24gPSAwOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCkKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICArK19fbjsKICByZXR1cm4gX19uOwp9
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4K
X0ZvcndhcmRJdGVyMSBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBf
Rm9yd2FyZEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCgoKICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQog
ICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgX0ZvcndhcmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAg
KytfX3RtcDsKICBpZiAoX190bXAgPT0gX19sYXN0MikKICAgIHJldHVybiBmaW5kKF9fZmlyc3Qx
LCBfX2xhc3QxLCAqX19maXJzdDIpOwoKCgogIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoKICBf
X3AxID0gX19maXJzdDI7ICsrX19wMTsKCiAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2Zp
cnN0MTsKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgIF9fZmlyc3QxID0gZmlu
ZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xh
c3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICBfX3AgPSBfX3AxOwogICAgX19jdXJyZW50
ID0gX19maXJzdDE7CiAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgcmV0dXJu
IF9fbGFzdDE7CgogICAgd2hpbGUgKCpfX2N1cnJlbnQgPT0gKl9fcCkgewogICAgICBpZiAoKytf
X3AgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIGlmICgrK19fY3Vy
cmVudCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgfQoKICAgICsrX19m
aXJzdDE7CiAgfQogIHJldHVybiBfX2ZpcnN0MTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkPgpfRm9yd2FyZEl0
ZXIxIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRl
cjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWQgX19wcmVkaWNhdGUp
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKICBpZiAoX19maXJzdDEg
PT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIF9fZmlyc3QxOwoK
CiAgX0ZvcndhcmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgKytfX3RtcDsKICBpZiAoX190bXAg
PT0gX19sYXN0MikgewogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGlj
YXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAgIHJldHVybiBf
X2ZpcnN0MTsKICB9CgoKCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogIF9fcDEgPSBfX2Zp
cnN0MjsgKytfX3AxOwoKICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICB3
aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEpIHsKICAgICAgaWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAg
ICBicmVhazsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBf
X2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19m
aXJzdDE7CiAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgcmV0dXJuIF9fbGFzdDE7
CgogICAgX19wID0gX19wMTsKICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOwogICAgaWYgKCsrX19j
dXJyZW50ID09IF9fbGFzdDEpIHJldHVybiBfX2xhc3QxOwoKICAgIHdoaWxlIChfX3ByZWRpY2F0
ZSgqX19jdXJyZW50LCAqX19wKSkgewogICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAg
ICByZXR1cm4gX19maXJzdDE7CiAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAg
ICAgIHJldHVybiBfX2xhc3QxOwogICAgfQoKICAgICsrX19maXJzdDE7CiAgfQogIHJldHVybiBf
X2ZpcnN0MTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfSW50ZWdl
ciwgY2xhc3MgX1RwPgpfRm9yd2FyZEl0ZXIgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfSW50ZWdlciBfX2Nv
dW50LCBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGlm
IChfX2NvdW50IDw9IDApCiAgICByZXR1cm4gX19maXJzdDsKICBlbHNlIHsKICAgIF9fZmlyc3Qg
PSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0KSB7CiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICBfRm9yd2FyZEl0
ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0
ICYmIF9fbiAhPSAwICYmICpfX2kgPT0gX192YWwpIHsKICAgICAgICArK19faTsKICAgICAgICAt
LV9fbjsKICAgICAgfQogICAgICBpZiAoX19uID09IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7
CiAgICAgIGVsc2UKICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ksIF9fbGFzdCwgX192YWwpOwog
ICAgfQogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9JbnRlZ2VyLCBjbGFzcyBfVHAsIGNsYXNzIF9CaW5hcnlQcmVkPgpfRm9yd2Fy
ZEl0ZXIgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFs
LAogICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWQgX19iaW5hcnlfcHJlZCkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fY291bnQgPD0gMCkKICAgIHJldHVybiBfX2Zp
cnN0OwogIGVsc2UgewogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgIGlmIChf
X2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCBfX3ZhbCkpCiAgICAgICAgYnJlYWs7CiAgICAgICsrX19m
aXJzdDsKICAgIH0KICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBfSW50ZWdl
ciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAg
ICAgICsrX19pOwogICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiBfX2Jp
bmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkgewogICAgICAgICsrX19pOwogICAgICAgIC0tX19uOwog
ICAgICB9CiAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAg
ZWxzZSB7CiAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QpIHsKICAgICAgICAgIGlmIChfX2Jp
bmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICArK19f
aTsKICAgICAgICB9CiAgICAgICAgX19maXJzdCA9IF9faTsKICAgICAgfQogICAgfQogICAgcmV0
dXJuIF9fbGFzdDsKICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNz
IF9Gb3J3YXJkSXRlcjI+Cl9Gb3J3YXJkSXRlcjIgc3dhcF9yYW5nZXMoX0ZvcndhcmRJdGVyMSBf
X2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlcjIgX19maXJzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGZvciAoIDsgX19maXJzdDEgIT0gX19s
YXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGl0ZXJfc3dhcChfX2ZpcnN0MSwgX19m
aXJzdDIpOwogIHJldHVybiBfX2ZpcnN0MjsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9VbmFyeU9wZXJhdGlvbj4KX091dHB1dEl0ZXIg
dHJhbnNmb3JtKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3BlcmF0aW9uIF9fdW5h
cnlfb3ApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKCgoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0gX191bmFyeV9vcCgqX19maXJzdCk7
CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNz
IF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlP
cGVyYXRpb24+Cl9PdXRwdXRJdGVyIHRyYW5zZm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu
cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlP
cGVyYXRpb24gX19iaW5hcnlfb3ApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgoKICBmb3Ig
KCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIsICsrX19yZXN1
bHQpCiAgICAqX19yZXN1bHQgPSBfX2JpbmFyeV9vcCgqX19maXJzdDEsICpfX2ZpcnN0Mik7CiAg
cmV0dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9UcD4Kdm9pZCByZXBsYWNlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25l
d192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9fZmlyc3QgPT0gX19v
bGRfdmFsdWUpCiAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcD4Kdm9pZCByZXBsYWNl
X2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCkKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAqX19maXJzdCA9IF9f
bmV3X3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0
ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgcmVwbGFjZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFs
dWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAqX19y
ZXN1bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7
CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X091dHB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgcmVw
bGFjZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVl
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m
aXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fcHJlZCgqX19maXJzdCkgPyBfX25l
d192YWx1ZSA6ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfR2VuZXJhdG9yPgp2b2lkIGdlbmVyYXRlKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfR2VuZXJhdG9yIF9fZ2VuKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
KQogICAgKl9fZmlyc3QgPSBfX2dlbigpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfR2VuZXJhdG9yPgpfT3V0cHV0SXRlciBnZW5lcmF0ZV9uKF9P
dXRwdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgX0dlbmVyYXRvciBfX2dlbikKewoKCgoKCgog
IGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX19nZW4o
KTsKICByZXR1cm4gX19maXJzdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgcmVtb3ZlX2NvcHkoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlm
ICghKCpfX2ZpcnN0ID09IF9fdmFsdWUpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog
ICAgICArK19fcmVzdWx0OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfT3V0
cHV0SXRlciByZW1vdmVfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1By
ZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCFfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICArK19fcmVzdWx0OwogICAgfQogIHJldHVybiBfX3Jl
c3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgpfRm9yd2Fy
ZEl0ZXIgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3Qs
IF9fdmFsdWUpOwogIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0
ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVf
Y29weSgrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIHJlbW92ZV9pZihf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CiAgX19maXJzdCA9IGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOwogIF9Gb3J3YXJk
SXRlciBfX2kgPSBfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weV9pZigrK19faSwgX19sYXN0
LCBfX2ZpcnN0LCBfX3ByZWQpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9UcCopCnsKCiAgX1RwIF9fdmFsdWUgPSAqX19maXJz
dDsKICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQog
ICAgaWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsKICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0
OwogICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0dXJuICsrX19yZXN1bHQ7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5l
IF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9pdGVyYXRvcl90
YWcpCnsKCiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg
X192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyIF9fcmVzdWx0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewoKICAqX19yZXN1bHQg
PSAqX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICghKCpfX3Jl
c3VsdCA9PSAqX19maXJzdCkpCiAgICAgICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgcmV0dXJu
ICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0
SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0
SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xh
c3QpIHJldHVybiBfX3Jlc3VsdDsKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnko
X19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJ
dGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlLAogICAgICAgICAgY2xhc3MgX1RwPgpfT3V0cHV0
SXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLCBfVHAqKQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfVHAgX192YWx1ZSA9ICpfX2ZpcnN0Owog
ICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBp
ZiAoIV9fYmluYXJ5X3ByZWQoX192YWx1ZSwgKl9fZmlyc3QpKSB7CiAgICAgIF9fdmFsdWUgPSAq
X19maXJzdDsKICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgfQogIHJldHVybiArK19f
cmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIs
IGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBfT3V0cHV0SXRlciBfX3VuaXF1ZV9jb3B5
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9pdGVyYXRvcl90YWcpCnsKCiAgcmV0dXJuIF9f
dW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19iaW5hcnlfcHJlZCwKICAg
ICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGlj
YXRlPgpfRm9yd2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19y
ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5h
cnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcp
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgoKCiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBf
X2xhc3QpCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fcmVzdWx0LCAqX19maXJzdCkpICorK19f
cmVzdWx0ID0gKl9fZmlyc3Q7CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4K
aW5saW5lIF9PdXRwdXRJdGVyIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg
X19iaW5hcnlfcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg
cmV0dXJuIF9fcmVzdWx0OwogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwg
X19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRv
cl9jYXRlZ29yeShfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpf
Rm9yd2FyZEl0ZXIgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX2ZpcnN0ID0gYWRqYWNlbnRf
ZmluZChfX2ZpcnN0LCBfX2xhc3QpOwogIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xh
c3QsIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQmlu
YXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg
X19iaW5hcnlfcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIF9fZmlyc3Qg
PSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCwgX19iaW5hcnlfcHJlZCk7CiAgcmV0dXJu
IHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCwgX19iaW5hcnlfcHJlZCk7Cn0K
CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4Kdm9pZCBfX3JldmVyc2UoX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgd2hpbGUgKHRydWUpCiAg
ICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19maXJzdCA9PSAtLV9fbGFzdCkKICAgICAgcmV0
dXJuOwogICAgZWxzZQogICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCBfX2xhc3QpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19yZXZlcnNlKF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAoX19maXJzdCA8IF9fbGFzdCkK
ICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIC0tX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9C
aWRpcmVjdGlvbmFsSXRlcj4KaW5saW5lIHZvaWQgcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNs
YXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciByZXZlcnNlX2NvcHkoX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdCAh
PSBfX2xhc3QpIHsKICAgIC0tX19sYXN0OwogICAgKl9fcmVzdWx0ID0gKl9fbGFzdDsKICAgICsr
X19yZXN1bHQ7CiAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0V1
Y2xpZGVhblJpbmdFbGVtZW50PgpfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19nY2QoX0V1Y2xpZGVh
blJpbmdFbGVtZW50IF9fbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9FdWNsaWRlYW5S
aW5nRWxlbWVudCBfX24pCnsKICB3aGlsZSAoX19uICE9IDApIHsKICAgIF9FdWNsaWRlYW5SaW5n
RWxlbWVudCBfX3QgPSBfX20gJSBfX247CiAgICBfX20gPSBfX247CiAgICBfX24gPSBfX3Q7CiAg
fQogIHJldHVybiBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9E
aXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
ZSosCiAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChf
X2ZpcnN0ID09IF9fbWlkZGxlKQogICAgcmV0dXJuIF9fbGFzdDsKICBpZiAoX19sYXN0ID09IF9f
bWlkZGxlKQogICAgcmV0dXJuIF9fZmlyc3Q7CgogIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiA9IF9f
bWlkZGxlOwogIGRvIHsKICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgaWYg
KF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgIF9fbWlkZGxlID0gX19maXJzdDI7CiAgfSB3aGls
ZSAoX19maXJzdDIgIT0gX19sYXN0KTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV3X21pZGRsZSA9IF9f
Zmlyc3Q7CgogIF9fZmlyc3QyID0gX19taWRkbGU7CgogIHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xh
c3QpIHsKICAgIHN3YXAgKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAgIGlmIChfX2ZpcnN0
ID09IF9fbWlkZGxlKQogICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAgZWxzZSBpZiAoX19m
aXJzdDIgPT0gX19sYXN0KQogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogIH0KCiAgcmV0dXJu
IF9fbmV3X21pZGRsZTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNs
YXNzIF9EaXN0YW5jZT4KX0JpZGlyZWN0aW9uYWxJdGVyIF9fcm90YXRlKF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQog
ICAgcmV0dXJuIF9fbGFzdDsKICBpZiAoX19sYXN0ID09IF9fbWlkZGxlKQogICAgcmV0dXJuIF9f
Zmlyc3Q7CgogIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcl90YWcoKSk7CiAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxf
aXRlcmF0b3JfdGFnKCkpOwoKICB3aGlsZSAoX19maXJzdCAhPSBfX21pZGRsZSAmJiBfX21pZGRs
ZSAhPSBfX2xhc3QpCiAgICBzd2FwICgqX19maXJzdCsrLCAqLS1fX2xhc3QpOwoKICBpZiAoX19m
aXJzdCA9PSBfX21pZGRsZSkgewogICAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgcmV0dXJuIF9fbGFzdDsKICB9CiAgZWxzZSB7
CiAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnKCkpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNzSXRl
ciBfX3JvdGF0ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRGlzdGFuY2UgKiwgX1RwICopCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog
IF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9EaXN0YW5jZSBfX2sgPSBfX21p
ZGRsZSAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fbCA9IF9fbiAtIF9fazsKICBfUmFuZG9tQWNj
ZXNzSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19taWRkbGUpOwoKICBpZiAo
X19rID09IDApCiAgICByZXR1cm4gX19sYXN0OwoKICBlbHNlIGlmIChfX2sgPT0gX19sKSB7CiAg
ICBzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRsZSwgX19taWRkbGUpOwogICAgcmV0dXJuIF9f
cmVzdWx0OwogIH0KCiAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwgX19rKTsKCiAgZm9yIChf
RGlzdGFuY2UgX19pID0gMDsgX19pIDwgX19kOyBfX2krKykgewogICAgX1RwIF9fdG1wID0gKl9f
Zmlyc3Q7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0OwoKICAgIGlmIChfX2sg
PCBfX2wpIHsKICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19sL19fZDsgX19q
KyspIHsKICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9fbCkgewogICAgICAgICAgKl9fcCA9
ICooX19wIC0gX19sKTsKICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgfQoKICAgICAgICAq
X19wID0gKihfX3AgKyBfX2spOwogICAgICAgIF9fcCArPSBfX2s7CiAgICAgIH0KICAgIH0KCiAg
ICBlbHNlIHsKICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19rL19fZCAtIDE7
IF9faiArKykgewogICAgICAgIGlmIChfX3AgPCBfX2xhc3QgLSBfX2spIHsKICAgICAgICAgICpf
X3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICBfX3AgKz0gX19rOwogICAgICAgIH0KCiAgICAg
ICAgKl9fcCA9ICogKF9fcCAtIF9fbCk7CiAgICAgICAgX19wIC09IF9fbDsKICAgICAgfQogICAg
fQoKICAgICpfX3AgPSBfX3RtcDsKICAgICsrX19maXJzdDsKICB9CgogIHJldHVybiBfX3Jlc3Vs
dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlciBy
b3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCiAgcmV0dXJuIF9fcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAg
ICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciByb3RhdGVfY29weShfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgogIHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBjb3B5KF9f
bWlkZGxlLCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRGlzdGFu
Y2U+CmlubGluZSBfRGlzdGFuY2UgX19yYW5kb21fbnVtYmVyKF9EaXN0YW5jZSBfX24pIHsKCiAg
cmV0dXJuIGxyYW5kNDgoKSAlIF9fbjsKCgoKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXI+CmlubGluZSB2b2lkIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19s
YXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsg
X19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5k
b21fbnVtYmVyKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyLCBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgp2b2lkIHJhbmRvbV9z
aHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg
cmV0dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAh
PSBfX2xhc3Q7ICsrX19pKQogICAgaXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZCgoX19p
IC0gX19maXJzdCkgKyAxKSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX091dHB1dEl0ZXIgcmFuZG9tX3NhbXBs
ZV9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19vdXQsIGNvbnN0IF9EaXN0YW5jZSBfX24p
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICBfRGlzdGFuY2UgX19yZW1haW5pbmcgPSAwOwogIGRp
c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19yZW1haW5pbmcpOwogIF9EaXN0YW5jZSBfX20gPSBt
aW4oX19uLCBfX3JlbWFpbmluZyk7CgogIHdoaWxlIChfX20gPiAwKSB7CiAgICBpZiAoX19yYW5k
b21fbnVtYmVyKF9fcmVtYWluaW5nKSA8IF9fbSkgewogICAgICAqX19vdXQgPSAqX19maXJzdDsK
ICAgICAgKytfX291dDsKICAgICAgLS1fX207CiAgICB9CgogICAgLS1fX3JlbWFpbmluZzsKICAg
ICsrX19maXJzdDsKICB9CiAgcmV0dXJuIF9fb3V0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xh
c3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KX091dHB1dEl0ZXIgcmFuZG9tX3NhbXBsZV9uKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19vdXQsIGNvbnN0IF9EaXN0YW5jZSBfX24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICBfRGlzdGFuY2UgX19yZW1haW5pbmcgPSAwOwogIGRpc3Rh
bmNlKF9fZmlyc3QsIF9fbGFzdCwgX19yZW1haW5pbmcpOwogIF9EaXN0YW5jZSBfX20gPSBtaW4o
X19uLCBfX3JlbWFpbmluZyk7CgogIHdoaWxlIChfX20gPiAwKSB7CiAgICBpZiAoX19yYW5kKF9f
cmVtYWluaW5nKSA8IF9fbSkgewogICAgICAqX19vdXQgPSAqX19maXJzdDsKICAgICAgKytfX291
dDsKICAgICAgLS1fX207CiAgICB9CgogICAgLS1fX3JlbWFpbmluZzsKICAgICsrX19maXJzdDsK
ICB9CiAgcmV0dXJuIF9fb3V0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19y
YW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX24pCnsKICBf
RGlzdGFuY2UgX19tID0gMDsKICBfRGlzdGFuY2UgX190ID0gX19uOwogIGZvciAoIDsgX19maXJz
dCAhPSBfX2xhc3QgJiYgX19tIDwgX19uOyArK19fbSwgKytfX2ZpcnN0KQogICAgX19vdXRbX19t
XSA9ICpfX2ZpcnN0OwoKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsrX190Owog
ICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFuZG9tX251bWJlcihfX3QpOwogICAgaWYgKF9fTSA8IF9f
bikKICAgICAgX19vdXRbX19NXSA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0
dXJuIF9fb3V0ICsgX19tOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXIsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBj
bGFzcyBfRGlzdGFuY2U+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcmFuZG9tX3NhbXBsZShfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlzdGFuY2UgX19uKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfRGlzdGFuY2Ug
X19tID0gMDsKICBfRGlzdGFuY2UgX190ID0gX19uOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3QgJiYgX19tIDwgX19uOyArK19fbSwgKytfX2ZpcnN0KQogICAgX19vdXRbX19tXSA9ICpfX2Zp
cnN0OwoKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsrX190OwogICAgX0Rpc3Rh
bmNlIF9fTSA9IF9fcmFuZChfX3QpOwogICAgaWYgKF9fTSA8IF9fbikKICAgICAgX19vdXRbX19N
XSA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9fb3V0ICsgX19tOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+Cmlu
bGluZSBfUmFuZG9tQWNjZXNzSXRlcgpyYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRf
Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2xhc3QpCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX3JhbmRvbV9zYW1wbGUoX19maXJzdCwg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZmlyc3QsIF9fb3V0X2xhc3Qg
LSBfX291dF9maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXIsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgpp
bmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9sYXN0LAogICAgICAgICAgICAgIF9SYW5k
b21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX291dF9maXJzdCwgX19yYW5kLAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgX19wYXJ0aXRp
b24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogIHdoaWxlIChfX3ByZWQoKl9fZmly
c3QpKQogICAgaWYgKCsrX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICBfRm9y
d2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKCiAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkK
ICAgIGlmIChfX3ByZWQoKl9fbmV4dCkpIHsKICAgICAgc3dhcCgqX19maXJzdCwgKl9fbmV4dCk7
CiAgICAgICsrX19maXJzdDsKICAgIH0KCiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9CaWRpcmVjdGlvbmFs
SXRlciBfX3BhcnRpdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUgKHRydWUp
IHsKICAgIHdoaWxlICh0cnVlKQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAg
cmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAg
KytfX2ZpcnN0OwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAgICAtLV9fbGFzdDsKICAgIHdo
aWxlICh0cnVlKQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9f
Zmlyc3Q7CiAgICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFzdCkpCiAgICAgICAgLS1fX2xhc3Q7
CiAgICAgIGVsc2UKICAgICAgICBicmVhazsKICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3Qp
OwogICAgKytfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlciBwYXJ0aXRpb24oX0ZvcndhcmRJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19wYXJ0aXRpb24oX19maXJzdCwg
X19sYXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX0Rpc3RhbmNl
PgpfRm9yd2FyZEl0ZXIgX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRp
Y2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbikKewogIGlmIChfX2xlbiA9PSAxKQogICAgcmV0
dXJuIF9fcHJlZCgqX19maXJzdCkgPyBfX2xhc3QgOiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBf
X21pZGRsZSA9IF9fZmlyc3Q7CiAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICByZXR1
cm4gcm90YXRlKF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbWlkZGxlLCBf
X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAv
IDIpLAogICAgICAgICAgICAgICAgX19taWRkbGUsCiAgICAgICAgICAgICAgICBfX2lucGxhY2Vf
c3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMikpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX1ByZWRpY2F0
ZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fc3RhYmxlX3BhcnRp
dGlvbl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19s
ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19i
dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl
IF9fYnVmZmVyX3NpemUpCnsKICBpZiAoX19sZW4gPD0gX19idWZmZXJfc2l6ZSkgewogICAgX0Zv
cndhcmRJdGVyIF9fcmVzdWx0MSA9IF9fZmlyc3Q7CiAgICBfUG9pbnRlciBfX3Jlc3VsdDIgPSBf
X2J1ZmZlcjsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgOyArK19fZmlyc3QpCiAgICAg
IGlmIChfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgKl9fcmVzdWx0MSA9ICpfX2ZpcnN0Owog
ICAgICAgICsrX19yZXN1bHQxOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgICpfX3Jlc3Vs
dDIgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0MjsKICAgICAgfQogICAgY29weShfX2J1
ZmZlciwgX19yZXN1bHQyLCBfX3Jlc3VsdDEpOwogICAgcmV0dXJuIF9fcmVzdWx0MTsKICB9CiAg
ZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShf
X21pZGRsZSwgX19sZW4gLyAyKTsKICAgIHJldHVybiByb3RhdGUoX19zdGFibGVfcGFydGl0aW9u
X2FkYXB0aXZlKAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QsIF9fbWlkZGxlLCBf
X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyLCBfX2J1ZmZlciwgX19i
dWZmZXJfc2l6ZSksCiAgICAgICAgICAgICAgICAgICAgX19taWRkbGUsCiAgICAgICAgICAgICAg
ICAgICAgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbWlkZGxlLCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2xlbiAtIF9fbGVuIC8gMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpKTsKICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcCwgY2xh
c3MgX0Rpc3RhbmNlPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fc3RhYmxlX3BhcnRpdGlvbl9hdXgo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9UcCosIF9EaXN0YW5jZSopCnsKICBfVGVtcG9y
YXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXIsIF9UcD4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICBp
ZiAoX19idWYuc2l6ZSgpID4gMCkKICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRp
dmUoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX19idWYuc2l6ZSgpKTsK
ICBlbHNlCiAgICByZXR1cm4gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19s
YXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlciBzdGFibGVfcGFydGl0
aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19maXJzdDsKICBlbHNlCiAgICBy
ZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgpfUmFuZG9t
QWNjZXNzSXRlciBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBf
X3Bpdm90KQp7CiAgd2hpbGUgKHRydWUpIHsKICAgIHdoaWxlICgqX19maXJzdCA8IF9fcGl2b3Qp
CiAgICAgICsrX19maXJzdDsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKF9fcGl2b3QgPCAqX19s
YXN0KQogICAgICAtLV9fbGFzdDsKICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICBy
ZXR1cm4gX19maXJzdDsKICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgKytfX2Zp
cnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAs
IGNsYXNzIF9Db21wYXJlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24o
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApCnsKICB3aGls
ZSAodHJ1ZSkgewogICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkpCiAgICAgICsr
X19maXJzdDsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKF9fY29tcChfX3Bpdm90LCAqX19sYXN0
KSkKICAgICAgLS1fX2xhc3Q7CiAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgcmV0
dXJuIF9fZmlyc3Q7CiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICsrX19maXJz
dDsKICB9Cn0KCmNvbnN0IGludCBfX3N0bF90aHJlc2hvbGQgPSAxNjsKCgoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX191bmd1YXJkZWRfbGluZWFy
X2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkKewogIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAtLV9fbmV4dDsKICB3aGlsZSAoX192YWwgPCAq
X19uZXh0KSB7CiAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAgIF9fbGFzdCA9IF9fbmV4dDsKICAg
IC0tX19uZXh0OwogIH0KICAqX19sYXN0ID0gX192YWw7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX3VuZ3VhcmRl
ZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogIC0tX19uZXh0OwogIHdoaWxlIChfX2NvbXAoX192
YWwsICpfX25leHQpKSB7CiAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAgIF9fbGFzdCA9IF9fbmV4
dDsKICAgIC0tX19uZXh0OwogIH0KICAqX19sYXN0ID0gX192YWw7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNl
cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikKewogIF9UcCBfX3ZhbCA9ICpfX2xhc3Q7
CiAgaWYgKF9fdmFsIDwgKl9fZmlyc3QpIHsKICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19s
YXN0LCBfX2xhc3QgKyAxKTsKICAgICpfX2ZpcnN0ID0gX192YWw7CiAgfQogIGVsc2UKICAgIF9f
dW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19sYXN0LCBfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZv
aWQgX19saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJl
IF9fY29tcCkKewogIF9UcCBfX3ZhbCA9ICpfX2xhc3Q7CiAgaWYgKF9fY29tcChfX3ZhbCwgKl9f
Zmlyc3QpKSB7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0ICsgMSk7
CiAgICAqX19maXJzdCA9IF9fdmFsOwogIH0KICBlbHNlCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJf
aW5zZXJ0KF9fbGFzdCwgX192YWwsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcj4Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg
cmV0dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAh
PSBfX2xhc3Q7ICsrX19pKQogICAgX19saW5lYXJfaW5zZXJ0KF9fZmlyc3QsIF9faSwgX192YWx1
ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9D
b21wYXJlIF9fY29tcCkKewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogIGZvciAo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19p
KQogICAgX19saW5lYXJfaW5zZXJ0KF9fZmlyc3QsIF9faSwgX192YWx1ZV90eXBlKF9fZmlyc3Qp
LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9U
cD4Kdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LCBfVHAqKQp7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2Zp
cnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQo
X19pLCBfVHAoKl9faSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+Cmlu
bGluZSB2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0KSB7CiAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFz
dCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fdW5ndWFyZGVkX2luc2Vy
dGlvbl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCosIF9Db21wYXJlIF9fY29tcCkKewogIGZvciAo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAg
ICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1RwKCpfX2kpLCBfX2NvbXApOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUg
dm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJl
IF9fY29tcCkKewogIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfX2ZpcnN0LCBfX2xh
c3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9f
ZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewogIGlmIChfX2xh
c3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QsIF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQpOwogICAgX191bmd1YXJkZWRfaW5zZXJ0
aW9uX3NvcnQoX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19sYXN0KTsKICB9CiAgZWxzZQog
ICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fZmluYWxfaW5zZXJ0aW9u
X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9f
bGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQo
X19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19jb21wKTsKICAgIF9fdW5ndWFy
ZGVkX2luc2VydGlvbl9zb3J0KF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQsIF9fbGFzdCwgX19j
b21wKTsKICB9CiAgZWxzZQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9f
Y29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIF9TaXplIF9fbGcoX1NpemUg
X19uKQp7CiAgX1NpemUgX19rOwogIGZvciAoX19rID0gMDsgX19uICE9IDE7IF9fbiA+Pj0gMSkg
KytfX2s7CiAgcmV0dXJuIF9fazsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
LCBjbGFzcyBfVHAsIGNsYXNzIF9TaXplPgp2b2lkIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwgX1RwKiwKICAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQp
CnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVzaG9sZCkgewogICAgaWYg
KF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICBwYXJ0aWFsX3NvcnQoX19maXJzdCwgX19sYXN0
LCBfX2xhc3QpOwogICAgICByZXR1cm47CiAgICB9CiAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2Zp
cnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0
ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBf
X2xhc3QsIChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0KTsKICAgIF9fbGFzdCA9IF9fY3V0OwogIH0K
fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9T
aXplLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsIF9UcCosCiAgICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0LCBfQ29t
cGFyZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVzaG9s
ZCkgewogICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICBwYXJ0aWFsX3NvcnQoX19m
aXJzdCwgX19sYXN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC0t
X19kZXB0aF9saW1pdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgX191bmd1
YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwgX19jb21wKSksCiAg
ICAgICBfX2NvbXApOwogICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCAoX1RwKikg
MCwgX19kZXB0aF9saW1pdCwgX19jb21wKTsKICAgIF9fbGFzdCA9IF9fY3V0OwogIH0KfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBzb3J0KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCAhPSBfX2xhc3Qp
IHsKICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgIF9fbGcoX19s
YXN0IC0gX19maXJzdCkgKiAyKTsKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg
X19sYXN0KTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg
X0NvbXBhcmU+CmlubGluZSB2b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmly
c3QgIT0gX19sYXN0KSB7CiAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAg
ICAgICBfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMiwKICAgICAgICAgICAgICAgICAgICAgX19j
b21wKTsKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXAp
OwogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19pbnBs
YWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewogIGlmIChfX2xhc3QgLSBf
X2ZpcnN0IDwgMTUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAg
IHJldHVybjsKICB9CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9f
bGFzdCAtIF9fZmlyc3QpIC8gMjsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19t
aWRkbGUpOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0KTsKICBfX21l
cmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xhc3QgLSBfX21pZGRsZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAx
NSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICBy
ZXR1cm47CiAgfQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xh
c3QgLSBfX2ZpcnN0KSAvIDI7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2NvbXApOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0LCBf
X2NvbXApOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyMSwgY2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fbWVy
Z2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUpCnsKICBf
RGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgd2hpbGUgKF9fbGFzdCAt
IF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBf
X2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0
ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgIF9fcmVz
dWx0KTsKICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICB9CgogIF9fc3RlcF9zaXplID0gbWlu
KF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwogIG1lcmdlKF9fZmly
c3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3Qs
CiAgICAgICAgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIx
LCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNs
YXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlz
dGFuY2UgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KQp7CiAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogIHdoaWxlIChf
X2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19m
aXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0
ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAg
ICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9fZmlyc3QgKz0g
X190d29fc3RlcDsKICB9CiAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9f
Zmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CgogIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBf
c2l6ZSwKICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICBfX3Jl
c3VsdCwKICAgICAgICBfX2NvbXApOwp9Cgpjb25zdCBpbnQgX19zdGxfY2h1bmtfc2l6ZSA9IDc7
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4Kdm9p
ZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9EaXN0YW5j
ZSBfX2NodW5rX3NpemUpCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3Np
emUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6
ZSk7CiAgICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICB9CiAgX19pbnNlcnRpb25fc29ydChf
X2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
YXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19jaHVua19pbnNlcnRpb25fc29y
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hpbGUgKF9fbGFzdCAt
IF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs
IF9fZmlyc3QgKyBfX2NodW5rX3NpemUsIF9fY29tcCk7CiAgICBfX2ZpcnN0ICs9IF9fY2h1bmtf
c2l6ZTsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNz
IF9EaXN0YW5jZT4Kdm9pZCBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZl
ciwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAg
X1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogIF9EaXN0YW5jZSBf
X3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3NpemU7CiAgX19jaHVua19pbnNlcnRpb25fc29ydChf
X2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19s
ZW4pIHsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9f
c3RlcF9zaXplKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICBfX21lcmdlX3NvcnRfbG9vcChf
X2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUpOwogICAgX19zdGVw
X3NpemUgKj0gMjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh
c3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2
b2lkIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Q
b2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Uq
LCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0
OwogIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICBfRGlzdGFu
Y2UgX19zdGVwX3NpemUgPSBfX3N0bF9jaHVua19zaXplOwogIF9fY2h1bmtfaW5zZXJ0aW9uX3Nv
cnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKCiAgd2hpbGUgKF9fc3Rl
cF9zaXplIDwgX19sZW4pIHsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwg
X19idWZmZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgX19zdGVwX3NpemUgKj0gMjsKICAg
IF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0
ZXBfc2l6ZSwgX19jb21wKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgfQp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2U+
CnZvaWQgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9p
bnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1
ZmZlcl9zaXplKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAv
IDI7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgaWYg
KF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2Zp
cnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19zdGFibGVfc29y
dF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAg
fQogIGVsc2UgewogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCk7CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIo
X19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIChfRGlzdGFuY2UqKTApOwogIH0KICBfX21lcmdl
X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAt
IF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxl
KSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFz
cyBfQ29tcGFyZT4Kdm9pZCBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlIF9fYnVmZmVyX3NpemUsIF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0YW5jZSBfX2xl
biA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlk
ZGxlID0gX19maXJzdCArIF9fbGVuOwogIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAg
IF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1
ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19zdGFi
bGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAgZWxzZSB7CiAgICBf
X21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCAoX0Rp
c3RhbmNlKikwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9f
bWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgKF9EaXN0
YW5jZSopMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgfQogIF9f
bWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlk
ZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19t
aWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgIF9fY29t
cCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFz
cyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fc3RhYmxlX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5k
b21BY2Nlc3NJdGVyLCBfVHA+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChidWYuYmVnaW4o
KSA9PSAwKQogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgZWxz
ZQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNpemUoKSkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3Rh
bmNlLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX19zdGFibGVfc29ydF9hdXgoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9t
QWNjZXNzSXRlciwgX1RwPiBidWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoYnVmLmJlZ2luKCkg
PT0gMCkKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7
CiAgZWxzZQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5i
ZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNpemUoKSks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fc3Rh
YmxlX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfX3ZhbHVl
X3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmly
c3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFy
ZT4KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBf
X2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIF9f
c3RhYmxlX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfX3Zh
bHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9f
Zmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX19wYXJ0aWFsX3NvcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQp7CiAgbWFrZV9oZWFw
KF9fZmlyc3QsIF9fbWlkZGxlKTsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlk
ZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgaWYgKCpfX2kgPCAqX19maXJzdCkKICAgICAg
X19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVHAoKl9faSksCiAgICAgICAgICAg
ICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKICBzb3J0X2hlYXAoX19maXJzdCwgX19t
aWRkbGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lk
IHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCiAgX19wYXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9f
bGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fcGFydGlhbF9zb3J0
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAog
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBh
cmUgX19jb21wKQp7CiAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogIGZv
ciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kp
CiAgICBpZiAoX19jb21wKCpfX2ksICpfX2ZpcnN0KSkKICAgICAgX19wb3BfaGVhcChfX2ZpcnN0
LCBfX21pZGRsZSwgX19pLCBfVHAoKl9faSksIF9fY29tcCwKICAgICAgICAgICAgICAgICBfX2Rp
c3RhbmNlX3R5cGUoX19maXJzdCkpOwogIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19j
b21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFy
ZT4KaW5saW5lIHZvaWQgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19j
b21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX3Bh
cnRpYWxfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJz
dCksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xhc3MgX1RwPgpfUmFuZG9t
QWNjZXNzSXRlciBfX3BhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3Vs
dF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZSosIF9UcCopCnsKICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRf
bGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRf
cmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYg
X19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICpfX3Jlc3VsdF9yZWFs
X2xhc3QgPSAqX19maXJzdDsKICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgKytfX2ZpcnN0
OwogIH0KICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAg
d2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1bHRf
Zmlyc3QpCiAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZSgwKSwK
ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1
bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9UcCgqX19maXJzdCkpOwogICAgKytfX2Zp
cnN0OwogIH0KICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7
CiAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcGFy
dGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX3BhcnRpYWxfc29ydF9jb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fcmVzdWx0X2ZpcnN0KSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21w
YXJlLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJ
dGVyIF9fcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqLCBfVHAqKQp7CiAgaWYgKF9fcmVz
dWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0OwogIF9SYW5k
b21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0OwogIHdoaWxl
KF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0
KSB7CiAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7CiAgICArK19fcmVzdWx0X3Jl
YWxfbGFzdDsKICAgICsrX19maXJzdDsKICB9CiAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBf
X3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7
CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQogICAgICBfX2FkanVz
dF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2UoMCksCiAgICAgICAgICAgICAgICAgICAg
X0Rpc3RhbmNlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgICAgICAg
ICAgICAgICAgICBfVHAoKl9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg
ICArK19fZmlyc3Q7CiAgfQogIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVh
bF9sYXN0LCBfX2NvbXApOwogIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBh
cmU+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19yZXN1bHRfbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICByZXR1cm4gX19w
YXJ0aWFsX3NvcnRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3Vs
dF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19yZXN1bHRfZmlyc3QpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX19udGhfZWxlbWVu
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikKewogIHdoaWxl
IChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQog
ICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkp
OwogICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICBfX2ZpcnN0ID0gX19jdXQ7CiAgICBlbHNl
CiAgICAgIF9fbGFzdCA9IF9fY3V0OwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f
bGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQg
bnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19udGgsCiAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX250aF9lbGVt
ZW50KF9fZmlyc3QsIF9fbnRoLCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFy
ZT4Kdm9pZCBfX250aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+
IDMpIHsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgX191bmd1YXJkZWRfcGFy
dGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcChf
X21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbXApKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29tcCk7CiAgICBpZiAoX19jdXQgPD0gX19udGgpCiAgICAgIF9fZmlyc3QgPSBfX2N1dDsK
ICAgIGVsc2UKICAgICAgX19sYXN0ID0gX19jdXQ7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19m
aXJzdCwgX19sYXN0LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIF9fbnRoX2VsZW1lbnQoX19m
aXJzdCwgX19udGgsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2NvbXApOwp9CgoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5j
ZT4KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192
YWwsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmly
c3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9f
bWlkZGxlOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwog
ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg
IGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAg
ICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBl
bHNlCiAgICAgIF9fbGVuID0gX19oYWxmOwogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyIGxv
d2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0
LCBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w
YXJlLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSopCnsK
ICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4p
OwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICB3aGlsZSAo
X19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2Zp
cnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChfX2NvbXAoKl9fbWlk
ZGxlLCBfX3ZhbCkpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7
CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxzZQogICAgICBf
X2xlbiA9IF9faGFsZjsKICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBfRm9yd2FyZEl0
ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBh
cmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJl
dHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCwKICAgICAg
ICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJ
dGVyIF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9EaXN0YW5j
ZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg
X19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICB3
aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUg
PSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChfX3ZhbCA8
ICpfX21pZGRsZSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19maXJz
dCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hh
bGYgLSAxOwogICAgfQogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyIHVwcGVyX2JvdW5kKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCiAgcmV0dXJuIF9fdXBwZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwKICAg
ICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf
RGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX3VwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
VHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19s
ZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBf
X2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAg
ICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5j
ZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAg
ICAgIF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsK
ICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0K
ICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJfYm91bmQo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVybiBfX3VwcGVyX2Jv
dW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCwKICAgICAgICAgICAgICAgICAgICAg
ICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3
YXJkSXRlcj4KX19lcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAg
X0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsK
ICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3Jp
Z2h0OwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAg
X19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlm
ICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsr
X19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBlbHNl
IGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsK
ICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKICAg
ICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgr
K19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCk7CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRl
ciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgfQogIH0KICByZXR1cm4gcGFp
cjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X0ZvcndhcmRJ
dGVyLCBfRm9yd2FyZEl0ZXI+CmVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCiAg
ICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg
X0Rpc3RhbmNlPgpwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgpfX2VxdWFsX3Jhbmdl
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9f
dmFsLAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0
YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rp
c3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsK
CiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlk
ZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19j
b21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAg
KytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVs
c2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAg
ICBlbHNlIHsKICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9f
dmFsLCBfX2NvbXApOwogICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgX19yaWdo
dCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsLCBfX2NvbXApOwogICAg
ICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0
KTsKICAgIH0KICB9CiAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9f
Zmlyc3QsIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRl
cj4KZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
IGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX19lcXVhbF9yYW5nZShf
X2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAgICAgX19k
aXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1RwPgpib29sIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgogIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3Vu
ZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhKF9f
dmFsIDwgKl9faSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwg
Y2xhc3MgX0NvbXBhcmU+CmJvb2wgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWws
CiAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9f
Zmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCk7CiAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYg
IV9fY29tcChfX3ZhbCwgKl9faSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBj
bGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIG1lcmdlKF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg
ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f
bGFzdDIpIHsKICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgICsrX19yZXN1
bHQ7CiAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBf
X2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNz
IF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJl
PgpfT3V0cHV0SXRlciBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy
IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFy
ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICBpZiAo
X19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDI7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAg
cmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9f
cmVzdWx0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3Mg
X0Rpc3RhbmNlPgp2b2lkIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rp
c3RhbmNlIF9fbGVuMikKewogIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgIHJl
dHVybjsKICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgIGlmICgqX19taWRkbGUgPCAq
X19maXJzdCkKICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIHJldHVybjsK
ICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgX0Rpc3RhbmNlIF9fbGVuMTEg
PSAwOwogIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAg
ICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEp
OwogICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmly
c3RfY3V0KTsKICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwog
IH0KICBlbHNlIHsKICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgYWR2YW5jZShfX3NlY29u
ZF9jdXQsIF9fbGVuMjIpOwogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBf
X21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1
dCwgX19sZW4xMSk7CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUKICAgID0g
cm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICBfX21lcmdlX3dp
dGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyKTsKICBfX21lcmdlX3dpdGhvdXRfYnVm
ZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEs
CiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFy
ZT4Kdm9pZCBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBf
X2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBp
ZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICByZXR1cm47CiAgaWYgKF9fbGVuMSAr
IF9fbGVuMiA9PSAyKSB7CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAg
ICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgcmV0dXJuOwogIH0KICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogIF9CaWRpcmVjdGlvbmFsSXRlciBf
X3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgX0Rpc3Rh
bmNlIF9fbGVuMjIgPSAwOwogIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgIF9fbGVuMTEgPSBf
X2xlbjEgLyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICBfX3NlY29u
ZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29t
cCk7CiAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICB9CiAg
ZWxzZSB7CiAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0
LCBfX2xlbjIyKTsKICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRk
bGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0
X2N1dCwgX19sZW4xMSk7CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUKICAg
ID0gcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICBfX21lcmdl
X3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVu
MTEsIF9fbGVuMjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIF9fbWVyZ2Vf
d2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4x
IC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9f
Y29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlk
aXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgpfQmlkaXJlY3Rpb25h
bEl0ZXIxIF9fcm90YXRlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E
aXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKewogIF9C
aWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXJfZW5kOwogIGlmIChfX2xlbjEgPiBfX2xlbjIgJiYg
X19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRk
bGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRs
ZSwgX19sYXN0KTsKICAgIHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmly
c3QpOwogIH0KICBlbHNlIGlmIChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX19idWZm
ZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgY29weShfX21p
ZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fYnVmZmVy
LCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgfQogIGVsc2UKICAgIHJldHVybiByb3RhdGUoX19m
aXJzdCwgX19taWRkbGUsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25h
bEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpZGly
ZWN0aW9uYWxJdGVyMz4KX0JpZGlyZWN0aW9uYWxJdGVyMyBfX21lcmdlX2JhY2t3YXJkKF9CaWRp
cmVjdGlvbmFsSXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jl
c3VsdCkKewogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgcmV0dXJuIGNvcHlfYmFja3dh
cmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0
MikKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7
CiAgLS1fX2xhc3QxOwogIC0tX19sYXN0MjsKICB3aGlsZSAodHJ1ZSkgewogICAgaWYgKCpfX2xh
c3QyIDwgKl9fbGFzdDEpIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgaWYg
KF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJz
dDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICB9CiAgICBlbHNl
IHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAgaWYgKF9fZmlyc3QyID09IF9f
bGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwg
X19yZXN1bHQpOwogICAgICAtLV9fbGFzdDI7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAg
IGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjMsIGNsYXNzIF9Db21wYXJlPgpfQmlkaXJlY3Rpb25h
bEl0ZXIzIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9fZmlyc3QxID09IF9fbGFz
dDEpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQp
OwogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19m
aXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1fX2xhc3QyOwogIHdo
aWxlICh0cnVlKSB7CiAgICBpZiAoX19jb21wKCpfX2xhc3QyLCAqX19sYXN0MSkpIHsKICAgICAg
Ki0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAg
ICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQp
OwogICAgICAtLV9fbGFzdDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKi0tX19yZXN1bHQgPSAq
X19sYXN0MjsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNv
cHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFz
dDI7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFz
cyBfRGlzdGFuY2UsIGNsYXNzIF9Qb2ludGVyPgp2b2lkIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGly
ZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNl
IF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFu
Y2UgX19idWZmZXJfc2l6ZSkKewogIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBf
X2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBf
X21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICB9CiAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVm
ZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9f
bGFzdCwgX19idWZmZXIpOwogICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwg
X19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICB9CiAgZWxzZSB7CiAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAg
X0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICBf
X2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7
CiAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2Zp
cnN0X2N1dCk7CiAgICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIp
OwogICAgfQogICAgZWxzZSB7CiAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICBhZHZh
bmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91
bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICAgICBkaXN0YW5jZShfX2Zp
cnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICB9CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19uZXdfbWlkZGxlID0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlk
ZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fbWVyZ2VfYWRhcHRp
dmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAg
ICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJn
ZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBf
X2xlbjExLAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwg
X19idWZmZXJfc2l6ZSk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVy
LCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Qb2ludGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBh
cmU+CnZvaWQgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAg
ICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAogICAgICAg
ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9fbGVuMSA8PSBfX2xlbjIg
JiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9
IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgIG1lcmdlKF9fYnVmZmVyLCBf
X2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QsIF9fY29tcCk7CiAgfQogIGVs
c2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9l
bmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgIF9fbWVyZ2VfYmFja3dh
cmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAgZWxzZSB7CiAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vj
b25kX2N1dCA9IF9fbWlkZGxlOwogICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgX0Rpc3Rh
bmNlIF9fbGVuMjIgPSAwOwogICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICBfX2xlbjEx
ID0gX19sZW4xIC8gMjsKICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAg
IF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1
dCwgX19jb21wKTsKICAgICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4y
Mik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgIGFk
dmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9i
b3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgICAgZGlz
dGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgfQogICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3Rf
Y3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAg
ICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX21l
cmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEs
CiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBf
X2NvbXApOwogICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwg
X19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBf
X2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICB9Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpp
bmxpbmUgdm9pZCBfX2lucGxhY2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21p
ZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuMSA9IDA7CiAgZGlz
dGFuY2UoX19maXJzdCwgX19taWRkbGUsIF9fbGVuMSk7CiAgX0Rpc3RhbmNlIF9fbGVuMiA9IDA7
CiAgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCwgX19sZW4yKTsKCiAgX1RlbXBvcmFyeV9idWZm
ZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVHA+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYg
KF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwg
X19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIpOwogIGVsc2UKICAgIF9fbWVyZ2VfYWRh
cHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAg
ICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1Zi5zaXplKCkpKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1RwLAogICAgICAgICAg
Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX19pbnBsYWNlX21l
cmdlX2F1eChfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNl
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBf
RGlzdGFuY2UgX19sZW4xID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sZW4x
KTsKICBfRGlzdGFuY2UgX19sZW4yID0gMDsKICBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0LCBf
X2xlbjIpOwoKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9UcD4gX19i
dWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgX19tZXJn
ZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVu
MiwgX19jb21wKTsKICBlbHNlCiAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdp
bigpLCBfRGlzdGFuY2UoX19idWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgX19jb21w
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4KaW5saW5lIHZvaWQgaW5w
bGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlk
ZGxlID09IF9fbGFzdCkKICAgIHJldHVybjsKICBfX2lucGxhY2VfbWVyZ2VfYXV4KF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19m
aXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlk
aXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBpbnBsYWNlX21lcmdl
KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUg
fHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgcmV0dXJuOwogIF9faW5wbGFjZV9tZXJnZV9hdXgo
X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVf
dHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAg
ICAgICAgX19jb21wKTsKfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNz
IF9JbnB1dEl0ZXIyPgpib29sIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ
dGVyMiBfX2xhc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUg
KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgqX19m
aXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGVsc2UgaWYoKl9fZmly
c3QxIDwgKl9fZmlyc3QyKQogICAgICArK19fZmlyc3QxOwogICAgZWxzZQogICAgICArK19fZmly
c3QxLCArK19fZmlyc3QyOwoKICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+
CmJvb2wgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs
IF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICB3
aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYg
KF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGVs
c2UgaWYoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAg
IGVsc2UKICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgcmV0dXJuIF9fZmlyc3QyID09
IF9fbGFzdDI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRl
cjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfdW5pb24oX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh
c3QyKSB7CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIGVsc2UgaWYgKCpfX2ZpcnN0
MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19m
aXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAg
ICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9
CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEs
IF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0
SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRw
dXRJdGVyIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy
MiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9D
b21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgog
IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAg
IGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIGVsc2UgaWYgKF9fY29tcCgqX19m
aXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAr
K19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsK
ICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgICsrX19yZXN1bHQ7
CiAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xh
c3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9J
bnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgc2V0X2ludGVyc2VjdGlv
bihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgqX19maXJzdDEgPCAqX19m
aXJzdDIpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJz
dDEpCiAgICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgICArK19fcmVzdWx0
OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx
LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBf
Q29tcGFyZT4KX091dHB1dEl0ZXIgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9f
bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAq
X19maXJzdDIpKQogICAgICArK19fZmlyc3QxOwogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0
MiwgKl9fZmlyc3QxKSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAgICAqX19yZXN1
bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICAg
ICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1
dEl0ZXIgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f
bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf
SW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hp
bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgq
X19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAg
ICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoKl9fZmly
c3QyIDwgKl9fZmlyc3QxKQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICsrX19m
aXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9f
bGFzdDEsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf
SW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4K
X091dHB1dEl0ZXIgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAg
ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jl
c3VsdDsKICAgIH0KICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAg
ICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2Zp
cnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBf
T3V0cHV0SXRlcj4KX091dHB1dEl0ZXIKc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0
ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MikKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9f
cmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0Owog
ICAgfQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0K
ICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJl
dHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jl
c3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIy
LCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRl
cgpzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9fZmlyc3Qx
ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAoKl9fZmly
c3QxLCAqX19maXJzdDIpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytf
X2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgaWYgKF9fY29tcCgqX19m
aXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAr
K19fZmlyc3QyOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSB7CiAgICAgICsrX19m
aXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9f
bGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCgoKCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBtYXhfZWxlbWVudChfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog
IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICgq
X19yZXN1bHQgPCAqX19maXJzdCkKICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHJldHVybiBf
X3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0NvbXBhcmU+
Cl9Gb3J3YXJkSXRlciBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2Zp
cnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJz
dCAhPSBfX2xhc3QpCiAgICBpZiAoX19jb21wKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSBfX3Jlc3Vs
dCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyPgpfRm9yd2FyZEl0ZXIgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G
b3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9
PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmly
c3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoKl9fZmlyc3QgPCAqX19y
ZXN1bHQpCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpfRm9yd2FyZEl0ZXIg
bWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2Fy
ZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQog
ICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0KSkKICAgICAgX19yZXN1bHQgPSBfX2Zp
cnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlcj4KYm9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwog
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0g
X19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9y
KDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAg
aWYgKCpfX2kgPCAqX19paSkgewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0
OwogICAgICB3aGlsZSAoISgqX19pIDwgKi0tX19qKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3
YXAoX19pLCBfX2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0
cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJz
dCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNs
YXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgbmV4dF9wZXJtdXRh
dGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBy
ZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7
CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0Owog
IC0tX19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwog
ICAgLS1fX2k7CiAgICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkgewogICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAoIV9fY29tcCgqX19pLCAqLS1fX2op
KQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJldmVyc2UoX19p
aSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19pID09IF9fZmly
c3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7
CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgpib29sIHBy
ZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1
cm4gZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRp
cmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBpZiAoKl9faWkgPCAqX19p
KSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICgh
KCotLV9faiA8ICpfX2kpKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAg
ICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBp
ZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAg
ICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u
YWxJdGVyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9f
bGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7
OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlm
IChfX2NvbXAoKl9faWksICpfX2kpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBf
X2xhc3Q7CiAgICAgIHdoaWxlICghX19jb21wKCotLV9faiwgKl9faSkpCiAgICAgICAge30KICAg
ICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAg
ICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZl
cnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCgoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0lucHV0SXRl
ciBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJ
dGVyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgZm9yICggOyBf
X2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxKQogICAgZm9yIChfRm9yd2FyZEl0ZXIgX19p
dGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgaWYgKCpf
X2ZpcnN0MSA9PSAqX19pdGVyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICByZXR1cm4gX19s
YXN0MTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0lucHV0SXRlciBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0
ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19f
Zmlyc3QxKQogICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAh
PSBfX2xhc3QyOyArK19faXRlcikKICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2l0ZXIp
KQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICByZXR1cm4gX19sYXN0MTsKfQojIDM0MTkgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIxIF9fZmlu
ZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVy
MiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcs
IGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICBy
ZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xh
c3QxOwogICAgd2hpbGUgKDEpIHsKICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAg
ICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAg
ICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0Owog
ICAgICBlbHNlIHsKICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICBfX2Zp
cnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAgICB9CiAg
fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwK
ICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlcjEgX19maW5kX2Vu
ZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZywgZm9y
d2FyZF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGlj
YXRlIF9fY29tcCkKewogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIF9fbGFz
dDE7CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgIHdo
aWxlICgxKSB7CiAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgPSBzZWFy
Y2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAgICBp
ZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg
ICBlbHNlIHsKICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICBfX2ZpcnN0
MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAgICB9CiAgfQp9
CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlcjI+Cl9CaWRpcmVjdGlvbmFsSXRlcjEKX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0
ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAog
ICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBf
UmV2SXRlcjE7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+
IF9SZXZJdGVyMjsKCiAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsKICBfUmV2SXRlcjIg
X19ybGFzdDIoX19maXJzdDIpOwogIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0
ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
ZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIpOwoKICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3Qx
KQogICAgcmV0dXJuIF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
cmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5j
ZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KfQoKdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIs
CiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfQmlkaXJlY3Rpb25hbEl0ZXIxCl9f
ZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRp
cmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgX0JpbmFyeVByZWRp
Y2F0ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVy
MT4gX1Jldkl0ZXIxOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0
ZXIyPiBfUmV2SXRlcjI7CgogIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0
ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9S
ZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb21wKTsKCiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgIHJldHVybiBf
X2xhc3QxOwogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJl
c3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9f
bGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+CmlubGluZSBfRm9yd2FyZEl0ZXIxCmZp
bmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAg
ICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICByZXR1cm4gX19maW5kX2VuZChf
X2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAgICAgICAgICAgICAgX19pdGVy
YXRvcl9jYXRlZ29yeShfX2ZpcnN0MikpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
MSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+
CmlubGluZSBfRm9yd2FyZEl0ZXIxCmZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9G
b3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zv
cndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9fZmluZF9lbmQo
X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg
IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgIF9faXRl
cmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAogICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0K
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4K
Ym9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX0Rpc3RhbmNlIF9fbikK
ewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAgZm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7
IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkgewogICAgaWYgKF9fZmlyc3RbX19wYXJlbnRdIDwg
X19maXJzdFtfX2NoaWxkXSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKChfX2NoaWxkICYg
MSkgPT0gMCkKICAgICAgKytfX3BhcmVudDsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfU3RyaWN0
V2Vha09yZGVyaW5nPgpib29sIF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
U3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCwKICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbikK
ewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAgZm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7
IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkgewogICAgaWYgKF9fY29tcChfX2ZpcnN0W19fcGFy
ZW50XSwgX19maXJzdFtfX2NoaWxkXSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICgoX19j
aGlsZCAmIDEpID09IDApCiAgICAgICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSBib29sIGlzX2hlYXAoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9faXNfaGVhcChfX2ZpcnN0
LCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KaW5saW5lIGJvb2wgaXNfaGVhcChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9faXNfaGVhcChfX2ZpcnN0LCBfX2NvbXAsIF9f
bGFzdCAtIF9fZmlyc3QpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KYm9v
bCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4g
dHJ1ZTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgZm9yICgrK19fbmV4dDsg
X19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpIHsKICAgIGlmICgq
X19uZXh0IDwgKl9fZmlyc3QpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0cnVl
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVy
aW5nPgpib29sIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIHRydWU7
CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIGZvciAoKytfX25leHQ7IF9fbmV4
dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KSB7CiAgICBpZiAoX19jb21w
KCpfX25leHQsICpfX2ZpcnN0KSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgcmV0dXJuIHRy
dWU7Cn0KCn0KIyA2NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0
aG0uaCIgMiAzCiMgMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYWxnb3JpdGhtIiAyIDMK
IyAzNSAiaW50ZXJ2aWV3LmgiIDIKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiMgMSAiL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL2Zsb2F0LmgiIDEg
MwojIDM4ICJpbnRlcnZpZXcuaCIgMgoKZW51bSBMaW5lRGlyZWN0aW9uIHsKICAgIGVWZXJ0aWNh
bExpbmVzID0gMSwKICAgIGVIb3Jpem9udGFsTGluZXMgPSAyLAogICAgZUdyaWQgPSAzCn07Cgp0
eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgY2hhciAqdmlld3BvaW50OwogICAgICAgIGRvdWJsZSBk
ZlZpZXdQb2ludFg7CiAgICAgICAgZG91YmxlIGRmVmlld1BvaW50WTsKICAgICAgICBkb3VibGUg
ZGZWaWV3UG9pbnRaOwogICAgICAgIGRvdWJsZSBkZkZpZWxkVmlldzsKICAgICAgICBkb3VibGUg
ZGZWZXJ0RXhhZ2VyYXRpb247CiAgICAgICAgaW50IG5OdW1iZXJMaW5lczsKICAgICAgICBpbnQg
bk5vRGF0YVZhbHVlOwogICAgICAgIExpbmVEaXJlY3Rpb24gZUxpbmVEaXJlY3Rpb247CiAgICAg
ICAgaW50IG5Cb3JkZXI7CiAgICAgICAgaW50IG5DZW50ZXJlZDsKICAgICAgICBkb3VibGUgZGZU
YXJnZXRYOwogICAgICAgIGRvdWJsZSBkZlRhcmdldFk7CiAgICAgICAgZG91YmxlIGRmVGFyZ2V0
WjsKICAgICAgICBjaGFyICp2aWV3VHlwZTsKfSBzX1BlcnNwZWN0aXZlUGFybXM7Cgp0eXBlZGVm
IHN0cnVjdCB7CiAgRklMRSAqZnBERU1JbnB1dEZpbGU7CiAgaW50IGlERU1JbnB1dExheWVySW5k
ZXg7CiAgRklMRSAqZnBERU1PdXRwdXRGaWxlOwogIGludCBpREVNT3V0cHV0TGF5ZXJJbmRleDsK
ICBpbnQgKCpwcm9ncmVzcykgKCBpbnQgaVNlY3Rpb24sIGludCBpUHJvZ3Jlc3MgKTsKICBkb3Vi
bGUgUl9WUFRfWl9JTkM7Cn0gc19GaW5kVmlzQXJlYVBhcmFtczsKIyAxMDYgImludGVydmlldy5o
IgpUQm9vbCBHREJJbnZpZXdGaW5kVmlzaWJsZUFyZWFzKCBzX0ZpbmRWaXNBcmVhUGFyYW1zICZm
aW5kVmlzQXJlYVBhcmFtcywgdmVjdG9yIDwgR0RCTGF5ZXIgPiAmZ2RiVmlld3BvaW50SW5wdXRM
YXllciApOwpUQm9vbCBQZXJzcGVjdGl2ZVZpZXcoIEZJTEUgKmZwREVNSW4sIGludCBuREVNSW5D
aGFuLCBGSUxFICpmcFZlY0luLCBpbnQgblZlY0luQ2hhbiwgRklMRSAqZnBWaWV3T3V0LCBpbnQg
blZpZXdPdXRDaGFuLCBGSUxFICpmcERyYXBlT3V0LCBpbnQgbkRyYXBlQ2hhbiwgc19QZXJzcGVj
dGl2ZVBhcm1zICpzUFZQYXJhbXMsIElNUFByb2dyZXNzRnVuYyBwZm5Qcm9ncmVzcywgdm9pZCAq
cFByb2dyZXNzQXJnICk7CiMgNDUgImZpbmR2aXNhcmVhLmNwcCIgMgoKIyAxICJWaWV3cG9pbnQu
aCIgMQojIDMwICJWaWV3cG9pbnQuaCIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2xp
c3QiIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2xpc3QiIDMKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMSAzCiMgNjAgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGlzdC5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgNjIgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfbGlzdC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDYzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2xpc3QuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfbGlzdC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgNjUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfbGlzdC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX2xpc3QuaCIgMSAzCiMgNjMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
bGlzdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hl
Y2suaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfbGlzdC5o
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKc3RydWN0IF9MaXN0X25vZGVfYmFzZSB7CiAgX0xpc3Rf
bm9kZV9iYXNlKiBfTV9uZXh0OwogIF9MaXN0X25vZGVfYmFzZSogX01fcHJldjsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfTGlzdF9ub2RlIDogcHVibGljIF9MaXN0X25vZGVfYmFz
ZSB7CiAgX1RwIF9NX2RhdGE7Cn07CgpzdHJ1Y3QgX0xpc3RfaXRlcmF0b3JfYmFzZSB7CiAgdHlw
ZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlw
ZTsKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5
OwoKICBfTGlzdF9ub2RlX2Jhc2UqIF9NX25vZGU7CgogIF9MaXN0X2l0ZXJhdG9yX2Jhc2UoX0xp
c3Rfbm9kZV9iYXNlKiBfX3gpIDogX01fbm9kZShfX3gpIHt9CiAgX0xpc3RfaXRlcmF0b3JfYmFz
ZSgpIHt9CgogIHZvaWQgX01faW5jcigpIHsgX01fbm9kZSA9IF9NX25vZGUtPl9NX25leHQ7IH0K
ICB2b2lkIF9NX2RlY3IoKSB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9wcmV2OyB9CgogIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBfTGlzdF9pdGVyYXRvcl9iYXNlJiBfX3gpIGNvbnN0IHsKICAgIHJl
dHVybiBfTV9ub2RlID09IF9feC5fTV9ub2RlOwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
X0xpc3RfaXRlcmF0b3JfYmFzZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fbm9kZSAhPSBf
X3guX01fbm9kZTsKICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNz
IF9QdHI+CnN0cnVjdCBfTGlzdF9pdGVyYXRvciA6IHB1YmxpYyBfTGlzdF9pdGVyYXRvcl9iYXNl
IHsKICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+IGl0ZXJhdG9yOwogIHR5
cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLGNvbnN0IF9UcCYsY29uc3QgX1RwKj4gY29uc3RfaXRl
cmF0b3I7CiAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1JlZixfUHRyPiBfU2VsZjsKCiAg
dHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9QdHIgcG9pbnRlcjsKICB0eXBlZGVm
IF9SZWYgcmVmZXJlbmNlOwogIHR5cGVkZWYgX0xpc3Rfbm9kZTxfVHA+IF9Ob2RlOwoKICBfTGlz
dF9pdGVyYXRvcihfTm9kZSogX194KSA6IF9MaXN0X2l0ZXJhdG9yX2Jhc2UoX194KSB7fQogIF9M
aXN0X2l0ZXJhdG9yKCkge30KICBfTGlzdF9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX194KSA6
IF9MaXN0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX25vZGUpIHt9CgogIHJlZmVyZW5jZSBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiAoKF9Ob2RlKikgX01fbm9kZSktPl9NX2RhdGE7IH0KICBwb2lu
dGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBfU2Vs
ZiYgb3BlcmF0b3IrKygpIHsKICAgIHRoaXMtPl9NX2luY3IoKTsKICAgIHJldHVybiAqdGhpczsK
ICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAg
ICB0aGlzLT5fTV9pbmNyKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBvcGVyYXRv
ci0tKCkgewogICAgdGhpcy0+X01fZGVjcigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2Vs
ZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIHRoaXMtPl9N
X2RlY3IoKTsKICAgIHJldHVybiBfX3RtcDsKICB9Cn07CiMgMTQ3ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2xpc3QuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX0xpc3RfYWxsb2NfYmFzZSB7CnB1Ymxp
YzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxs
b2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdl
dF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTm9kZV9hbGxvY2F0b3I7IH0KCiAgX0xpc3Rf
YWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9Ob2RlX2FsbG9jYXRvcihf
X2EpIHt9Cgpwcm90ZWN0ZWQ6CiAgX0xpc3Rfbm9kZTxfVHA+KiBfTV9nZXRfbm9kZSgpCiAgIHsg
cmV0dXJuIF9Ob2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0X25vZGUo
X0xpc3Rfbm9kZTxfVHA+KiBfX3ApCiAgICB7IF9Ob2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9f
cCwgMSk7IH0KCnByb3RlY3RlZDoKICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9MaXN0X25vZGU8
X1RwPiwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICAgX05vZGVfYWxsb2Nh
dG9yOwogIF9MaXN0X25vZGU8X1RwPiogX01fbm9kZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jYXRvcj4KY2xhc3MgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0
b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAs
IF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAg
YWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90
eXBlKCk7IH0KCiAgX0xpc3RfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpIHt9Cgpw
cm90ZWN0ZWQ6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9MaXN0X25vZGU8X1Rw
PiwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxsb2NfdHlwZTsKICBfTGlz
dF9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRl
KDEpOyB9CiAgdm9pZCBfTV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9fcCkgeyBfQWxsb2Nf
dHlwZTo6ZGVhbGxvY2F0ZShfX3AsIDEpOyB9Cgpwcm90ZWN0ZWQ6CiAgX0xpc3Rfbm9kZTxfVHA+
KiBfTV9ub2RlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBf
TGlzdF9iYXNlCiAgOiBwdWJsaWMgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0
YW5jZWxlc3M+CnsKcHVibGljOgogIHR5cGVkZWYgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxv
YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46
Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jh
c2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfTGlzdF9iYXNlKGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9ub2RlID0gX01fZ2V0X25v
ZGUoKTsKICAgIF9NX25vZGUtPl9NX25leHQgPSBfTV9ub2RlOwogICAgX01fbm9kZS0+X01fcHJl
diA9IF9NX25vZGU7CiAgfQogIH5fTGlzdF9iYXNlKCkgewogICAgY2xlYXIoKTsKICAgIF9NX3B1
dF9ub2RlKF9NX25vZGUpOwogIH0KCiAgdm9pZCBjbGVhcigpOwp9OwoKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZApfTGlzdF9iYXNlPF9UcCxfQWxsb2M+OjpjbGVhcigp
CnsKICBfTGlzdF9ub2RlPF9UcD4qIF9fY3VyID0gKF9MaXN0X25vZGU8X1RwPiopIF9NX25vZGUt
Pl9NX25leHQ7CiAgd2hpbGUgKF9fY3VyICE9IF9NX25vZGUpIHsKICAgIF9MaXN0X25vZGU8X1Rw
PiogX190bXAgPSBfX2N1cjsKICAgIF9fY3VyID0gKF9MaXN0X25vZGU8X1RwPiopIF9fY3VyLT5f
TV9uZXh0OwogICAgX0Rlc3Ryb3koJl9fdG1wLT5fTV9kYXRhKTsKICAgIF9NX3B1dF9ub2RlKF9f
dG1wKTsKICB9CiAgX01fbm9kZS0+X01fbmV4dCA9IF9NX25vZGU7CiAgX01fbm9kZS0+X01fcHJl
diA9IF9NX25vZGU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9j
YXRvcjxfVHA+ID4KY2xhc3MgbGlzdCA6IHByb3RlY3RlZCBfTGlzdF9iYXNlPF9UcCwgX0FsbG9j
Pgp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgogIHR5cGVkZWYgX0xpc3RfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CnByb3RlY3RlZDoK
ICB0eXBlZGVmIHZvaWQqIF9Wb2lkX3BvaW50ZXI7CgpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgdmFs
dWVfdHlwZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2
YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNl
OwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYg
X0xpc3Rfbm9kZTxfVHA+IF9Ob2RlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6
OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxv
Y2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgpwdWJsaWM6
CiAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1RwJixfVHAqPiBpdGVyYXRvcjsKICB0eXBl
ZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0IF9UcCo+IGNvbnN0X2l0ZXJh
dG9yOwoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZl
cnNlX2l0ZXJhdG9yOwoKcHJvdGVjdGVkOgogIHVzaW5nIF9CYXNlOjpfTV9ub2RlOwogIHVzaW5n
IF9CYXNlOjpfTV9wdXRfbm9kZTsKICB1c2luZyBfQmFzZTo6X01fZ2V0X25vZGU7Cgpwcm90ZWN0
ZWQ6CiAgX05vZGUqIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IF9UcCYgX194KQogIHsKICAgIF9Ob2Rl
KiBfX3AgPSBfTV9nZXRfbm9kZSgpOwogICAgdHJ5IHsKICAgICAgX0NvbnN0cnVjdCgmX19wLT5f
TV9kYXRhLCBfX3gpOwogICAgfQogICAgY2F0Y2goLi4uKSB7IF9NX3B1dF9ub2RlKF9fcCk7IHRo
cm93OyB9OwogICAgcmV0dXJuIF9fcDsKICB9CgogIF9Ob2RlKiBfTV9jcmVhdGVfbm9kZSgpCiAg
ewogICAgX05vZGUqIF9fcCA9IF9NX2dldF9ub2RlKCk7CiAgICB0cnkgewogICAgICBfQ29uc3Ry
dWN0KCZfX3AtPl9NX2RhdGEpOwogICAgfQogICAgY2F0Y2goLi4uKSB7IF9NX3B1dF9ub2RlKF9f
cCk7IHRocm93OyB9OwogICAgcmV0dXJuIF9fcDsKICB9CgpwdWJsaWM6CiAgZXhwbGljaXQgbGlz
dChjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShf
X2EpIHt9CgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gKF9Ob2RlKikoX01fbm9kZS0+X01f
bmV4dCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIChfTm9kZSop
KF9NX25vZGUtPl9NX25leHQpOyB9CgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX25vZGU7
IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlOyB9CgogIHJl
dmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5k
KCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdAogICAgeyByZXR1
cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciBy
ZW5kKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcihiZWdpbigpKTsgfQoKICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fbm9k
ZS0+X01fbmV4dCA9PSBfTV9ub2RlOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7CiAgICBz
aXplX3R5cGUgX19yZXN1bHQgPSAwOwogICAgZGlzdGFuY2UoYmVnaW4oKSwgZW5kKCksIF9fcmVz
dWx0KTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29u
c3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQoKICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVy
biAqYmVnaW4oKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpi
ZWdpbigpOyB9CiAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKC0tZW5kKCkpOyB9CiAgY29u
c3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKC0tZW5kKCkpOyB9CgogIHZvaWQg
c3dhcChsaXN0PF9UcCwgX0FsbG9jPiYgX194KSB7IHN0ZDo6c3dhcChfTV9ub2RlLCBfX3guX01f
bm9kZSk7IH0KCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9U
cCYgX194KSB7CiAgICBfTm9kZSogX190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gpOwogICAgX190
bXAtPl9NX25leHQgPSBfX3Bvc2l0aW9uLl9NX25vZGU7CiAgICBfX3RtcC0+X01fcHJldiA9IF9f
cG9zaXRpb24uX01fbm9kZS0+X01fcHJldjsKICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJl
di0+X01fbmV4dCA9IF9fdG1wOwogICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2ID0gX190
bXA7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bv
c2l0aW9uKSB7IHJldHVybiBpbnNlcnQoX19wb3NpdGlvbiwgX1RwKCkpOyB9CgoKICB0ZW1wbGF0
ZTxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bv
cywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
X190cnVlX3R5cGUpIHsKICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCAoc2l6ZV90eXBlKSBfX24s
IChfVHApIF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p
ZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSk7CgogIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1l
IF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9N
X2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAg
fQoKICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1Rw
JiBfX3gpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7IH0KICB2b2lkIF9N
X2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9f
eCk7CgogIHZvaWQgcHVzaF9mcm9udChjb25zdCBfVHAmIF9feCkgeyBpbnNlcnQoYmVnaW4oKSwg
X194KTsgfQogIHZvaWQgcHVzaF9mcm9udCgpIHtpbnNlcnQoYmVnaW4oKSk7fQogIHZvaWQgcHVz
aF9iYWNrKGNvbnN0IF9UcCYgX194KSB7IGluc2VydChlbmQoKSwgX194KTsgfQogIHZvaWQgcHVz
aF9iYWNrKCkge2luc2VydChlbmQoKSk7fQoKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bv
c2l0aW9uKSB7CiAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fbmV4dF9ub2RlID0gX19wb3NpdGlvbi5f
TV9ub2RlLT5fTV9uZXh0OwogICAgX0xpc3Rfbm9kZV9iYXNlKiBfX3ByZXZfbm9kZSA9IF9fcG9z
aXRpb24uX01fbm9kZS0+X01fcHJldjsKICAgIF9Ob2RlKiBfX24gPSAoX05vZGUqKSBfX3Bvc2l0
aW9uLl9NX25vZGU7CiAgICBfX3ByZXZfbm9kZS0+X01fbmV4dCA9IF9fbmV4dF9ub2RlOwogICAg
X19uZXh0X25vZGUtPl9NX3ByZXYgPSBfX3ByZXZfbm9kZTsKICAgIF9EZXN0cm95KCZfX24tPl9N
X2RhdGEpOwogICAgX01fcHV0X25vZGUoX19uKTsKICAgIHJldHVybiBpdGVyYXRvcigoX05vZGUq
KSBfX25leHRfbm9kZSk7CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0
ZXJhdG9yIF9fbGFzdCk7CiAgdm9pZCBjbGVhcigpIHsgX0Jhc2U6OmNsZWFyKCk7IH0KCiAgdm9p
ZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IF9UcCYgX194KTsKICB2b2lkIHJl
c2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkgeyB0aGlzLT5yZXNpemUoX19uZXdfc2l6ZSwgX1Rw
KCkpOyB9CgogIHZvaWQgcG9wX2Zyb250KCkgeyBlcmFzZShiZWdpbigpKTsgfQogIHZvaWQgcG9w
X2JhY2soKSB7CiAgICBpdGVyYXRvciBfX3RtcCA9IGVuZCgpOwogICAgZXJhc2UoLS1fX3RtcCk7
CiAgfQogIGxpc3Qoc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgY29u
c3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9f
YSkKICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9fbiwgX192YWx1ZSk7IH0KICBleHBsaWNpdCBsaXN0
KHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IGluc2Vy
dChiZWdpbigpLCBfX24sIF9UcCgpKTsgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4KICBsaXN0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCwKICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQog
ICAgOiBfQmFzZShfX2EpCiAgICB7IGluc2VydChiZWdpbigpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9
CgogIGxpc3QoY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCkgOiBfQmFzZShfX3guZ2V0X2Fs
bG9jYXRvcigpKQogICAgeyBpbnNlcnQoYmVnaW4oKSwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7
IH0KCiAgfmxpc3QoKSB7IH0KCiAgbGlzdDxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShjb25zdCBs
aXN0PF9UcCwgX0FsbG9jPiYgX194KTsKCnB1YmxpYzoKCgoKCgogIHZvaWQgYXNzaWduKHNpemVf
dHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7
IH0KCiAgdm9pZCBfTV9maWxsX2Fzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFs
KTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgYXNzaWduKF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0
eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7
CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAg
fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2go
X0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxf
YXNzaWduKChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19mYWxzZV90eXBlKTsKCnByb3RlY3RlZDoKICB2b2lkIHRyYW5zZmVyKGl0ZXJhdG9yIF9f
cG9zaXRpb24sIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgaWYgKF9f
cG9zaXRpb24gIT0gX19sYXN0KSB7CgogICAgICBfX2xhc3QuX01fbm9kZS0+X01fcHJldi0+X01f
bmV4dCA9IF9fcG9zaXRpb24uX01fbm9kZTsKICAgICAgX19maXJzdC5fTV9ub2RlLT5fTV9wcmV2
LT5fTV9uZXh0ID0gX19sYXN0Ll9NX25vZGU7CiAgICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01f
cHJldi0+X01fbmV4dCA9IF9fZmlyc3QuX01fbm9kZTsKCgogICAgICBfTGlzdF9ub2RlX2Jhc2Uq
IF9fdG1wID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICBfX3Bvc2l0aW9uLl9N
X25vZGUtPl9NX3ByZXYgPSBfX2xhc3QuX01fbm9kZS0+X01fcHJldjsKICAgICAgX19sYXN0Ll9N
X25vZGUtPl9NX3ByZXYgPSBfX2ZpcnN0Ll9NX25vZGUtPl9NX3ByZXY7CiAgICAgIF9fZmlyc3Qu
X01fbm9kZS0+X01fcHJldiA9IF9fdG1wOwogICAgfQogIH0KCnB1YmxpYzoKICB2b2lkIHNwbGlj
ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gpIHsKICAgIGlmICghX194LmVtcHR5KCkp
CiAgICAgIHRoaXMtPnRyYW5zZmVyKF9fcG9zaXRpb24sIF9feC5iZWdpbigpLCBfX3guZW5kKCkp
OwogIH0KICB2b2lkIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRlcmF0b3Ig
X19pKSB7CiAgICBpdGVyYXRvciBfX2ogPSBfX2k7CiAgICArK19fajsKICAgIGlmIChfX3Bvc2l0
aW9uID09IF9faSB8fCBfX3Bvc2l0aW9uID09IF9faikgcmV0dXJuOwogICAgdGhpcy0+dHJhbnNm
ZXIoX19wb3NpdGlvbiwgX19pLCBfX2opOwogIH0KICB2b2lkIHNwbGljZShpdGVyYXRvciBfX3Bv
c2l0aW9uLCBsaXN0JiwgaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBp
ZiAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgIHRoaXMtPnRyYW5zZmVyKF9fcG9zaXRpb24sIF9f
Zmlyc3QsIF9fbGFzdCk7CiAgfQogIHZvaWQgcmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1ZSk7CiAg
dm9pZCB1bmlxdWUoKTsKICB2b2lkIG1lcmdlKGxpc3QmIF9feCk7CiAgdm9pZCByZXZlcnNlKCk7
CiAgdm9pZCBzb3J0KCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPiB2b2lkIHJlbW92
ZV9pZihfUHJlZGljYXRlKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4gdm9p
ZCB1bmlxdWUoX0JpbmFyeVByZWRpY2F0ZSk7CiAgdGVtcGxhdGUgPGNsYXNzIF9TdHJpY3RXZWFr
T3JkZXJpbmc+IHZvaWQgbWVyZ2UobGlzdCYsIF9TdHJpY3RXZWFrT3JkZXJpbmcpOwogIHRlbXBs
YXRlIDxjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPiB2b2lkIHNvcnQoX1N0cmljdFdlYWtPcmRl
cmluZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s
Cm9wZXJhdG9yPT0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxf
QWxsb2M+JiBfX3kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGxpc3Q8X1RwLF9BbGxvYz46OmNvbnN0
X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIGNvbnN0X2l0ZXJhdG9yIF9fZW5kMSA9IF9feC5l
bmQoKTsKICBjb25zdF9pdGVyYXRvciBfX2VuZDIgPSBfX3kuZW5kKCk7CgogIGNvbnN0X2l0ZXJh
dG9yIF9faTEgPSBfX3guYmVnaW4oKTsKICBjb25zdF9pdGVyYXRvciBfX2kyID0gX195LmJlZ2lu
KCk7CiAgd2hpbGUgKF9faTEgIT0gX19lbmQxICYmIF9faTIgIT0gX19lbmQyICYmICpfX2kxID09
ICpfX2kyKSB7CiAgICArK19faTE7CiAgICArK19faTI7CiAgfQogIHJldHVybiBfX2kxID09IF9f
ZW5kMSAmJiBfX2kyID09IF9fZW5kMjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs
bG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LAog
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQp7CiAgcmV0
dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25z
dCBsaXN0PF9UcCxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0
PF9UcCxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgbGlzdDxf
VHAsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3Q8X1RwLF9B
bGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBsaXN0PF9UcCxf
QWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdDxfVHAsX0FsbG9j
PiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZApzd2FwKGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gsIGxp
c3Q8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lkCmxp
c3Q8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3NpdGlvbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fZmFsc2VfdHlwZSkKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkK
ICAgIGluc2VydChfX3Bvc2l0aW9uLCAqX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4Kdm9pZApsaXN0PF9UcCwgX0FsbG9jPjo6X01fZmlsbF9pbnNlcnQoaXRl
cmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQp7CiAgZm9yICggOyBfX24gPiAwOyAtLV9fbikKICAg
IGluc2VydChfX3Bvc2l0aW9uLCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CnR5cGVuYW1lIGxpc3Q8X1RwLF9BbGxvYz46Oml0ZXJhdG9yIGxpc3Q8X1RwLCBfQWxs
b2M+OjplcmFzZShpdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IgX19sYXN0KQp7CiAgd2hp
bGUgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgZXJhc2UoX19maXJzdCsrKTsKICByZXR1cm4gX19s
YXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAs
IF9BbGxvYz46OnJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpCnsK
ICBpdGVyYXRvciBfX2kgPSBiZWdpbigpOwogIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgZm9yICgg
OyBfX2kgIT0gZW5kKCkgJiYgX19sZW4gPCBfX25ld19zaXplOyArK19faSwgKytfX2xlbikKICAg
IDsKICBpZiAoX19sZW4gPT0gX19uZXdfc2l6ZSkKICAgIGVyYXNlKF9faSwgZW5kKCkpOwogIGVs
c2UKICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIF9fbGVuLCBfX3gpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cmxpc3Q8X1RwLCBfQWxsb2M+JiBsaXN0PF9UcCwg
X0FsbG9jPjo6b3BlcmF0b3I9KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gpCnsKICBpZiAo
dGhpcyAhPSAmX194KSB7CiAgICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgICBpdGVy
YXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICBjb25zdF9pdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5i
ZWdpbigpOwogICAgY29uc3RfaXRlcmF0b3IgX19sYXN0MiA9IF9feC5lbmQoKTsKICAgIHdoaWxl
IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICpfX2Zp
cnN0MSsrID0gKl9fZmlyc3QyKys7CiAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAg
ZXJhc2UoX19maXJzdDEsIF9fbGFzdDEpOwogICAgZWxzZQogICAgICBpbnNlcnQoX19sYXN0MSwg
X19maXJzdDIsIF9fbGFzdDIpOwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6X01fZmlsbF9hc3Np
Z24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgewogIGl0ZXJhdG9yIF9faSA9IGJl
Z2luKCk7CiAgZm9yICggOyBfX2kgIT0gZW5kKCkgJiYgX19uID4gMDsgKytfX2ksIC0tX19uKQog
ICAgKl9faSA9IF9fdmFsOwogIGlmIChfX24gPiAwKQogICAgaW5zZXJ0KGVuZCgpLCBfX24sIF9f
dmFsKTsKICBlbHNlCiAgICBlcmFzZShfX2ksIGVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZApsaXN0PF9U
cCwgX0FsbG9jPjo6X01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdDIsIF9JbnB1
dEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Zh
bHNlX3R5cGUpCnsKICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgaXRlcmF0b3IgX19s
YXN0MSA9IGVuZCgpOwogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAh
PSBfX2xhc3QyOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgKl9fZmlyc3QxID0gKl9fZmly
c3QyOwogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgZXJhc2UoX19maXJzdDEsIF9fbGFz
dDEpOwogIGVsc2UKICAgIGluc2VydChfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6
cmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1ZSkKewogIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigp
OwogIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkg
ewogICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICAgICsrX19uZXh0OwogICAgaWYgKCpf
X2ZpcnN0ID09IF9fdmFsdWUpIGVyYXNlKF9fZmlyc3QpOwogICAgX19maXJzdCA9IF9fbmV4dDsK
ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwg
X0FsbG9jPjo6dW5pcXVlKCkKewogIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogIGl0ZXJh
dG9yIF9fbGFzdCA9IGVuZCgpOwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogIGl0
ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkgewog
ICAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCiAgICAgIGVyYXNlKF9fbmV4dCk7CiAgICBlbHNl
CiAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICBfX25leHQgPSBfX2ZpcnN0OwogIH0KfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+Ojpt
ZXJnZShsaXN0PF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdp
bigpOwogIGl0ZXJhdG9yIF9fbGFzdDEgPSBlbmQoKTsKICBpdGVyYXRvciBfX2ZpcnN0MiA9IF9f
eC5iZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgqX19maXJzdDIg
PCAqX19maXJzdDEpIHsKICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7CiAgICAgIHRy
YW5zZmVyKF9fZmlyc3QxLCBfX2ZpcnN0MiwgKytfX25leHQpOwogICAgICBfX2ZpcnN0MiA9IF9f
bmV4dDsKICAgIH0KICAgIGVsc2UKICAgICAgKytfX2ZpcnN0MTsKICBpZiAoX19maXJzdDIgIT0g
X19sYXN0MikgdHJhbnNmZXIoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9CgppbmxpbmUg
dm9pZCBfX0xpc3RfYmFzZV9yZXZlcnNlKF9MaXN0X25vZGVfYmFzZSogX19wKQp7CiAgX0xpc3Rf
bm9kZV9iYXNlKiBfX3RtcCA9IF9fcDsKICBkbyB7CiAgICBzdGQ6OnN3YXAoX190bXAtPl9NX25l
eHQsIF9fdG1wLT5fTV9wcmV2KTsKICAgIF9fdG1wID0gX190bXAtPl9NX3ByZXY7CiAgfSB3aGls
ZSAoX190bXAgIT0gX19wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpp
bmxpbmUgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6cmV2ZXJzZSgpCnsKICBfX0xpc3RfYmFzZV9y
ZXZlcnNlKHRoaXMtPl9NX25vZGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OnNvcnQoKQp7CgogIGlmIChfTV9ub2RlLT5fTV9u
ZXh0ICE9IF9NX25vZGUgJiYgX01fbm9kZS0+X01fbmV4dC0+X01fbmV4dCAhPSBfTV9ub2RlKSB7
CiAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NhcnJ5OwogICAgbGlzdDxfVHAsIF9BbGxvYz4gX19j
b3VudGVyWzY0XTsKICAgIGludCBfX2ZpbGwgPSAwOwogICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAg
ICAgIF9fY2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJlZ2luKCkpOwogICAg
ICBpbnQgX19pID0gMDsKICAgICAgd2hpbGUoX19pIDwgX19maWxsICYmICFfX2NvdW50ZXJbX19p
XS5lbXB0eSgpKSB7CiAgICAgICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jYXJyeSk7CiAgICAg
ICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2krK10pOwogICAgICB9CiAgICAgIF9fY2Fycnku
c3dhcChfX2NvdW50ZXJbX19pXSk7CiAgICAgIGlmIChfX2kgPT0gX19maWxsKSArK19fZmlsbDsK
ICAgIH0KCiAgICBmb3IgKGludCBfX2kgPSAxOyBfX2kgPCBfX2ZpbGw7ICsrX19pKQogICAgICBf
X2NvdW50ZXJbX19pXS5tZXJnZShfX2NvdW50ZXJbX19pLTFdKTsKICAgIHN3YXAoX19jb3VudGVy
W19fZmlsbC0xXSk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRl
bXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjpyZW1vdmVf
aWYoX1ByZWRpY2F0ZSBfX3ByZWQpCnsKICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICBp
dGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAg
IGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICArK19fbmV4dDsKICAgIGlmIChfX3ByZWQo
Kl9fZmlyc3QpKSBlcmFzZShfX2ZpcnN0KTsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfQmluYXJ5
UHJlZGljYXRlPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+Ojp1bmlxdWUoX0JpbmFyeVByZWRpY2F0
ZSBfX2JpbmFyeV9wcmVkKQp7CiAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgaXRlcmF0
b3IgX19sYXN0ID0gZW5kKCk7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgaXRl
cmF0b3IgX19uZXh0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KSB7CiAg
ICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAgIGVyYXNlKF9fbmV4
dCk7CiAgICBlbHNlCiAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICBfX25leHQgPSBfX2ZpcnN0
OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xh
c3MgX1N0cmljdFdlYWtPcmRlcmluZz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6bWVyZ2UobGlz
dDxfVHAsIF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1N0cmlj
dFdlYWtPcmRlcmluZyBfX2NvbXApCnsKICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAg
aXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogIGl0ZXJhdG9yIF9fZmlyc3QyID0gX194LmJlZ2lu
KCk7CiAgaXRlcmF0b3IgX19sYXN0MiA9IF9feC5lbmQoKTsKICB3aGlsZSAoX19maXJzdDEgIT0g
X19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDIs
ICpfX2ZpcnN0MSkpIHsKICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7CiAgICAgIHRy
YW5zZmVyKF9fZmlyc3QxLCBfX2ZpcnN0MiwgKytfX25leHQpOwogICAgICBfX2ZpcnN0MiA9IF9f
bmV4dDsKICAgIH0KICAgIGVsc2UKICAgICAgKytfX2ZpcnN0MTsKICBpZiAoX19maXJzdDIgIT0g
X19sYXN0MikgdHJhbnNmZXIoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0V2Vha09y
ZGVyaW5nPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+Ojpzb3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcg
X19jb21wKQp7CgogIGlmIChfTV9ub2RlLT5fTV9uZXh0ICE9IF9NX25vZGUgJiYgX01fbm9kZS0+
X01fbmV4dC0+X01fbmV4dCAhPSBfTV9ub2RlKSB7CiAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2Nh
cnJ5OwogICAgbGlzdDxfVHAsIF9BbGxvYz4gX19jb3VudGVyWzY0XTsKICAgIGludCBfX2ZpbGwg
PSAwOwogICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAgICAgIF9fY2Fycnkuc3BsaWNlKF9fY2Fycnku
YmVnaW4oKSwgKnRoaXMsIGJlZ2luKCkpOwogICAgICBpbnQgX19pID0gMDsKICAgICAgd2hpbGUo
X19pIDwgX19maWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAgICAgX19jb3Vu
dGVyW19faV0ubWVyZ2UoX19jYXJyeSwgX19jb21wKTsKICAgICAgICBfX2NhcnJ5LnN3YXAoX19j
b3VudGVyW19faSsrXSk7CiAgICAgIH0KICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2ld
KTsKICAgICAgaWYgKF9faSA9PSBfX2ZpbGwpICsrX19maWxsOwogICAgfQoKICAgIGZvciAoaW50
IF9faSA9IDE7IF9faSA8IF9fZmlsbDsgKytfX2kpCiAgICAgIF9fY291bnRlcltfX2ldLm1lcmdl
KF9fY291bnRlcltfX2ktMV0sIF9fY29tcCk7CiAgICBzd2FwKF9fY291bnRlcltfX2ZpbGwtMV0p
OwogIH0KfQoKfQojIDY2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3Qu
aCIgMiAzCiMgMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbGlzdCIgMiAzCiMgMzEgIlZp
ZXdwb2ludC5oIiAyCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBDVmlld3BvaW50CnsKIHB1
YmxpYzoKICAgIENWaWV3cG9pbnQoKTsKICAgIENWaWV3cG9pbnQoIGxvbmcgeCwgbG9uZyB5ICk7
CgogICAgdmlydHVhbCB+Q1ZpZXdwb2ludCgpOwoKICAgIGZyaWVuZCBib29sIG9wZXJhdG9yID09
ICggY29uc3QgQ1ZpZXdwb2ludCAmIGxocywgY29uc3QgQ1ZpZXdwb2ludCAmIHJocyApCiAgICB7
CiAgICAgICAgcmV0dXJuICgoIGxocy5tX3ggPT0gcmhzLm1feCApICYmICggbGhzLm1feSA9PSBy
aHMubV95ICkpOwogICAgfQoKICAgIGlubGluZSBsb25nIGdldF94KCkgY29uc3QKICB7CiAgICAg
ICAgcmV0dXJuIChtX3gpOwogICAgfQogICAgaW5saW5lIGxvbmcgZ2V0X3koKSBjb25zdAogIHsK
ICAgICAgICByZXR1cm4gKG1feSk7CiAgICB9CiAgICBpbmxpbmUgbG9uZyBJSV9WUFQoKSBjb25z
dAogIHsKICAgICAgICByZXR1cm4gKG1fdnB0KTsKICAgIH0KCiAgICBpbmxpbmUgdm9pZCBTZXRW
aWV3cG9pbnRJbmRleCggbG9uZyBpbmRleCApCiAgewogICAgICAgIG1fdnB0ID0gaW5kZXg7CiAg
ICB9CgogcHJpdmF0ZToKICAgIGxvbmcgbV94OwogICAgbG9uZyBtX3k7CiAgICBsb25nIG1fdnB0
OwoKfTsKdHlwZWRlZiBsaXN0PENWaWV3cG9pbnQ+IHZpZXdwb2ludExpc3Q7CiMgNDcgImZpbmR2
aXNhcmVhLmNwcCIgMgojIDEgIkhvcml6b25JdGVtTGlzdC5oIiAxCiMgMzUgIkhvcml6b25JdGVt
TGlzdC5oIgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvdmVjdG9yIiAxIDMKIyAzNiAi
SG9yaXpvbkl0ZW1MaXN0LmgiIDIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2xpc3Qi
IDEgMwojIDM3ICJIb3Jpem9uSXRlbUxpc3QuaCIgMgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYWxnb3JpdGhtIiAxIDMKIyAzOCAiSG9yaXpvbkl0ZW1MaXN0LmgiIDIKdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKCmNsYXNzIEhvcml6b25JdGVtTGlzdAp7CiBwdWJsaWM6CiAgICBIb3Jpem9u
SXRlbUxpc3QoIGxvbmcgbnVtVmlld3BvaW50cyApOwogICAgdmlydHVhbCB+SG9yaXpvbkl0ZW1M
aXN0KCk7CgogICAgdm9pZCBTdGFydEhvcml6b24oIGJvb2wgTF9ET19MSVNUWyAyIF0sIGZsb2F0
IFJfVTEsIGZsb2F0IFJfVjEsIGZsb2F0IFJfVTIsIGZsb2F0IFJfVjIsIGZsb2F0IFJfVTMsIGZs
b2F0IFJfVjMsIGZsb2F0IFJfVTQsIGZsb2F0IFJfVjQsIGZsb2F0IFJfVTUsIGZsb2F0IFJfVjUg
KTsKICAgIGludCBVcGRhdGVIb3Jpem9uKCBsb25nICZJSV9ORVcsIGZsb2F0ICpSX05FV19VLCBm
bG9hdCAqUl9ORVdfViwgbG9uZyAmSUlfREVMX1BUUjEsIGxvbmcgJklJX0RFTF9QVFIyLCBsb25n
IElJX0xJU1QgKTsKICAgIGludCBQcm9jZXNzRmFjZXQoIGZsb2F0ICpSX1VbIDIgXSwgZmxvYXQg
KlJfVlsgMiBdLCBsb25nICpJSV9WSVNfQlVGRlsgMiBdLCBsb25nIElfWCwgbG9uZyAqSV9MLCBs
b25nIElJX0ZBQ0VUX1RZUEUsIGxvbmcgSUlfUVVBRCwgY29uc3QgQ1ZpZXdwb2ludCAmIHZpZXdQ
b2ludCApOwoKICAgIGludCBEZWxldGVBZnRlciggbG9uZyBJSV9QVFIsIGxvbmcgSUlfTElTVCAp
OwogICAgaW50IEluc2VydEFmdGVyKCBsb25nIElJX1BUUiwgZmxvYXQgUl9ORVdfVSwgZmxvYXQg
Ul9ORVdfViwgbG9uZyBJSV9MU1QgKTsKCiAgICB2b2lkIFJlc2l6ZSggbG9uZyBuZXdTaXplICk7
CgoKCgoKIHByaXZhdGU6CiAgICB2ZWN0b3I8dmVjdG9yPGZsb2F0PiA+IFJfSE9SX1U7CiAgICB2
ZWN0b3I8dmVjdG9yPGZsb2F0PiA+IFJfSE9SX1Y7CgogICAgdmVjdG9yPHZlY3Rvcjxsb25nPiA+
IElJX0hPUl9ORVhUOwogICAgdmVjdG9yPHZlY3Rvcjxsb25nPiA+IElJX0hPUl9QUkVWOwoKCgoK
ICAgIGxvbmcgSUlfSE9SX1NUQVJUOwogICAgbG9uZyBJSV9IT1JfRU5EOwogICAgbG9uZyBJSV9I
T1JfRlJFRVsgMiBdOwoKICAgIGxvbmcgSUlfSE9SX1BUUjFbIDIgXTsKICAgIGxvbmcgSUlfSE9S
X1BUUjJbIDIgXTsKCiAgICBsb25nIElJQ19NQVhMSU5LUzsKICAgIGxvbmcgSV9WUFRfQ09VTlQ7
Cgp9OwojIDQ4ICJmaW5kdmlzYXJlYS5jcHAiIDIKIyAxICJ0ZW1wZmlsZS5oIiAxCiMgMzAgInRl
bXBmaWxlLmgiCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDMxICJ0ZW1wZmlsZS5oIiAyCgpjbGFzcyBDVGVt
cEZpbGUKewogcHVibGljOgogICAgQ1RlbXBGaWxlKCk7CiAgICB2aXJ0dWFsIH5DVGVtcEZpbGUo
KTsKCiAgICBib29sIENyZWF0ZSggbG9uZywgbG9uZywgYm9vbCBiUkxFID0gZmFsc2UgKTsKICAg
IGJvb2wgV3JpdGVMaW5lKCBsb25nLCB2b2lkICogKTsKICAgIGJvb2wgUmVhZExpbmUoIGxvbmcs
IHZvaWQgKiApOwogICAgYm9vbCBDbG9zZSgpOwoKCgoKCiBwcm90ZWN0ZWQ6CiAgICBGSUxFICpt
X3BGaWxlOwogICAgbG9uZyBtX2xQaXhlbHM7CiAgICBsb25nIG1fbExpbmVzOwogICAgY2hhciAq
bV9wc3pOYW1lOwp9OwojIDQ5ICJmaW5kdmlzYXJlYS5jcHAiIDIKIyAxICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvZmxvYXQuaCIgMSAzCiMg
NTAgImZpbmR2aXNhcmVhLmNwcCIgMgoKCgpzdGF0aWMgbG9uZyBJSV9WRUNQTFlfTk9QWExTPTA7
CnN0YXRpYyBsb25nIElJX1ZFQ1BMWV9OT0xJTlM9MDsKCgoKc3RhdGljIFRCb29sIEludmlld1By
b2Nlc3NPbmVQdChGSUxFICpmcERFTUlucHV0RmlsZSxpbnQgaURFTUlucHV0TGF5ZXJJbmRleCxj
b25zdCB2aWV3cG9pbnRMaXN0JiB2cExpc3QsQ1RlbXBGaWxlJiB0ZW1wRmlsZSk7CnN0YXRpYyB2
b2lkIFdyaXRlVG9Mb2coY29uc3QgY2hhciAqZm9ybWF0LC4uLik7CnN0YXRpYyB2b2lkIEFkZFZp
ZXdwb2ludCh2aWV3cG9pbnRMaXN0JiB2cExpc3QsbG9uZyB4LGxvbmcgeSxsb25nJiBpbmRleCk7
CnN0YXRpYyB2b2lkIFByb2plY3RDb29yZHMobG9uZyBJX1gwLGxvbmcgSV9ZMCxmbG9hdCBSX1ow
LGxvbmcgSV9YLGxvbmcgSV9ZLGZsb2F0IFJfWixmbG9hdCYgUl9VLGZsb2F0JiBSX1YpOwoKCgoK
CgpzdGF0aWMgZG91YmxlIFJfVlBUX1pfSU5DPTA7CnN0YXRpYyBkb3VibGUgUl9WUFRfWj0wOwoK
CnN0YXRpYyBmbG9hdCBSQ19ST09UXzI9KGZsb2F0KTEuNDE0MjEzNTYyMzczMDk1OwoKc3RhdGlj
IENUZW1wRmlsZSB0Zm91dDsKCgoKCgoKClRCb29sIEdEQkludmlld0ZpbmRWaXNpYmxlQXJlYXMo
c19GaW5kVmlzQXJlYVBhcmFtcyYgZmluZFZpc0FyZWFQYXJhbXMsdmVjdG9yPEdEQkxheWVyPiYg
Z2RiVmlld3BvaW50SW5wdXRMYXllcikKewojIDE2NCAiZmluZHZpc2FyZWEuY3BwIgpyZXR1cm4o
MSk7Cn0KCgoKc3RhdGljIENWaWV3cG9pbnQgVU9SVG9Sb3dDb2wobG9uZyB4LGxvbmcgeSkKewoj
IDE4NCAiZmluZHZpc2FyZWEuY3BwIgp9CgpzdGF0aWMgdm9pZCBBZGRWaWV3cG9pbnQodmlld3Bv
aW50TGlzdCYgdnBMaXN0LGxvbmcgeCxsb25nIHksbG9uZyYgaW5kZXgpCnsKICBDVmlld3BvaW50
IHZwPVVPUlRvUm93Q29sKHgseSk7CgogIGlmIChmaW5kKHZwTGlzdC5iZWdpbigpLHZwTGlzdC5l
bmQoKSx2cCkgPT0gdnBMaXN0LmVuZCgpKSB7CiAgICB2cC5TZXRWaWV3cG9pbnRJbmRleChpbmRl
eCk7CiAgICBpbmRleCsrOwogICAgdnBMaXN0LnB1c2hfYmFjayh2cCk7CiAgICB9Cn0KCgpzdGF0
aWMgdm9pZCBXcml0ZVRvTG9nKGNvbnN0IGNoYXIgKmZvcm1hdCwuLi4pCnsKICB2YV9saXN0IGFy
Z2xpc3Q7CiAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgoYXJnbGlzdCksZm9ybWF0KTsKCiAgY2hh
ciBzQnVmZlsxMDI0XTsKICA6OnNwcmludGYoc0J1ZmYsZm9ybWF0LGFyZ2xpc3QpOwp9CiMgMjIz
ICJmaW5kdmlzYXJlYS5jcHAiCnN0YXRpYyB2b2lkIFByb2plY3RDb29yZHMobG9uZyBJX1gwLGxv
bmcgSV9ZMCxmbG9hdCBSX1owLGxvbmcgSV9YLGxvbmcgSV9ZLGZsb2F0IFJfWixmbG9hdCYgUl9V
LGZsb2F0JiBSX1YpCnsKCgoKCiAgbG9uZyBJX1hYPTo6bGFicyhJX1ggLSBJX1gwKTsKICBsb25n
IElfWVk9OjpsYWJzKElfWSAtIElfWTApOwoKICBpZiAoKElfWFggPT0gMCkgJiYgKElfWVkgPT0g
MCkpIHJldHVybjsKCiAgZmxvYXQgUl9ZUFJJTUU9KElfWFgrSV9ZWSk7CiAgUl9VPShJX1hYLUlf
WVkpL1JfWVBSSU1FOwoKICBpZiAoUl9aID09IChmbG9hdCktMy40RTM4KSB7CiAgICBSX1YgPSAo
ZmxvYXQpLTMuNEUzODsKICAgIH0KICBlbHNlIHsKICAgIFJfVj0oUl9aLVJfWjApKlJDX1JPT1Rf
Mi9SX1lQUklNRTsKICAgIH0KCn0KCnN0YXRpYyBUQm9vbCBJbnZpZXdQcm9jZXNzT25lUHQoRklM
RSAqZnBERU1JbnB1dEZpbGUsaW50IGlERU1JbnB1dExheWVySW5kZXgsY29uc3Qgdmlld3BvaW50
TGlzdCYgdnBMaXN0LENUZW1wRmlsZSYgdGVtcEZpbGUpCnsKIyAyNjEgImZpbmR2aXNhcmVhLmNw
cCIKICBsb25nIElfU1RFUFsyXT17MSwtMX07CgoKICBsb25nIElfTEFTVF9QSVhbMl09e0lJX1ZF
Q1BMWV9OT1BYTFMtMSwwfTsKICBsb25nIElfTkVYVF9MQVNUX1BJWFsyXT17SUlfVkVDUExZX05P
UFhMUy0yLDF9OwoKCgoKCgogIGxvbmcgSV9MWzJdPXswLDF9OwoKICBmbG9hdCAqKFJfRUxFVlsy
XSk7CiAgUl9FTEVWWzBdID0gbmV3IGZsb2F0W0lJX1ZFQ1BMWV9OT1BYTFNdOwogIFJfRUxFVlsx
XSA9IG5ldyBmbG9hdFtJSV9WRUNQTFlfTk9QWExTXTsKCgoKCiAgZmxvYXQgKihSX1VbMl0pOwog
IFJfVVswXSA9IG5ldyBmbG9hdFtJSV9WRUNQTFlfTk9QWExTXTsKICBSX1VbMV0gPSBuZXcgZmxv
YXRbSUlfVkVDUExZX05PUFhMU107CgogIGZsb2F0ICooUl9WWzJdKTsKICBSX1ZbMF0gPSBuZXcg
ZmxvYXRbSUlfVkVDUExZX05PUFhMU107CiAgUl9WWzFdID0gbmV3IGZsb2F0W0lJX1ZFQ1BMWV9O
T1BYTFNdOwoKICBsb25nICooSUlfVklTX0JVRlsyXSk7CiAgSUlfVklTX0JVRlswXSA9IG5ldyBs
b25nW0lJX1ZFQ1BMWV9OT1BYTFNdOwogIElJX1ZJU19CVUZbMV0gPSBuZXcgbG9uZ1tJSV9WRUNQ
TFlfTk9QWExTXTsKCgoKCiAgbG9uZyBJX0xBU1RfTElORT0oSUlfVkVDUExZX05PTElOUy0xKTsK
CgoKICBsb25nIElfWTBOPTA7CgogIGNvbnN0IENWaWV3cG9pbnQmIHZpZXdQb2ludD0qKHZwTGlz
dC5iZWdpbigpKTsKCiAgbG9uZyBJX1gwTlsyXTsKICBJX1gwTlswXT12aWV3UG9pbnQuZ2V0X3go
KSsxOwogIElfWDBOWzFdPXZpZXdQb2ludC5nZXRfeCgpLTE7CgogIEhvcml6b25JdGVtTGlzdCBo
b3Jpem9uSXRlbUxpc3QodnBMaXN0LnNpemUoKSk7CgoKCgoKICBmb3IgKGxvbmcgSUlfSEFMRj0x
O0lJX0hBTEY+PS0xO0lJX0hBTEYtPTIpIHsKICAgIGlmIChJSV9IQUxGID09IDEpIHsKICAgICAg
SV9MQVNUX0xJTkU9KElJX1ZFQ1BMWV9OT0xJTlMtMSk7CiAgICAgIH0KICAgIGVsc2UgewogICAg
ICBJX0xBU1RfTElORT0wOwogICAgICB9CiAgICBpZiAodmlld1BvaW50LmdldF95KCkgPT0gSV9M
QVNUX0xJTkUpIGNvbnRpbnVlOwoKICAgIElfWTBOID0gdmlld1BvaW50LmdldF95KCkgKyBJSV9I
QUxGOwoKCgoKICAgIGludCBsb25lPWlERU1JbnB1dExheWVySW5kZXg7CiAgICBpbnQgaXJldmxp
bmU9SUlfVkVDUExZX05PTElOUy12aWV3UG9pbnQuZ2V0X3koKS0xOwogICAgOjpHREJSZWFsQ2hh
bklPKGZwREVNSW5wdXRGaWxlLDAsMCxpcmV2bGluZSxJSV9WRUNQTFlfTk9QWExTLDEsUl9FTEVW
W0lfTFswXV0sSUlfVkVDUExZX05PUFhMUywxLDEsJmxvbmUpOwojIDMzOSAiZmluZHZpc2FyZWEu
Y3BwIgogICAgaWYgKFJfRUxFVltJX0xbMF1dW3ZpZXdQb2ludC5nZXRfeCgpXSA9PSAoZmxvYXQp
LTMuNEUzOCkgewoKICAgICAgUl9WUFRfWiA9IFJfVlBUX1pfSU5DOwogICAgICB9CiAgICBlbHNl
IHsKCgoKCiAgICAgIFJfVlBUX1ogPSBSX0VMRVZbSV9MWzBdXVt2aWV3UG9pbnQuZ2V0X3goKV0r
Ul9WUFRfWl9JTkM7CiAgICAgIH0KCgogICAgaXJldmxpbmU9SUlfVkVDUExZX05PTElOUy1JX1kw
Ti0xOwogICAgOjpHREJSZWFsQ2hhbklPKGZwREVNSW5wdXRGaWxlLDAsMCxpcmV2bGluZSxJSV9W
RUNQTFlfTk9QWExTLDEsUl9FTEVWW0lfTFsxXV0sSUlfVkVDUExZX05PUFhMUywxLDEsJmxvbmUp
OwojIDM2MiAiZmluZHZpc2FyZWEuY3BwIgogICAgYm9vbCBMX0RPX1FVQURbMl07CiAgICBMX0RP
X1FVQURbMF09KHZpZXdQb2ludC5nZXRfeCgpICE9IChJSV9WRUNQTFlfTk9QWExTLTEpKTsKICAg
IExfRE9fUVVBRFsxXT0odmlld1BvaW50LmdldF94KCkgIT0gMCk7CgoKCgogICAgUHJvamVjdENv
b3Jkcyh2aWV3UG9pbnQuZ2V0X3goKSx2aWV3UG9pbnQuZ2V0X3koKSxSX1ZQVF9aLHZpZXdQb2lu
dC5nZXRfeCgpLElfWTBOLAogICAgICBSX0VMRVZbSV9MWzFdXVt2aWV3UG9pbnQuZ2V0X3goKV0s
CiAgICAgIFJfVVtJX0xbMV1dW3ZpZXdQb2ludC5nZXRfeCgpXSwKICAgICAgUl9WW0lfTFsxXV1b
dmlld1BvaW50LmdldF94KCldKTsKCiAgICBsb25nIElJX1FVQUQ7CiAgICBmb3IgKElJX1FVQUQ9
MDtJSV9RVUFEPD0xO0lJX1FVQUQrKykgewogICAgICBpZiAoTF9ET19RVUFEW0lJX1FVQURdKSB7
CgogICAgICAgIGZvciAobG9uZyBJX1g9SV9YME5bSUlfUVVBRF07SV9YIT1JX0xBU1RfUElYW0lJ
X1FVQURdO0lfWCs9SV9TVEVQW0lJX1FVQURdKSB7CgogICAgICAgICAgUHJvamVjdENvb3Jkcyh2
aWV3UG9pbnQuZ2V0X3goKSx2aWV3UG9pbnQuZ2V0X3koKSxSX1ZQVF9aLElfWCx2aWV3UG9pbnQu
Z2V0X3koKSwKICAgICAgICAgICAgUl9FTEVWW0lfTFswXV1bSV9YXSwKICAgICAgICAgICAgUl9V
W0lfTFswXV1bSV9YXSwKICAgICAgICAgICAgUl9WW0lfTFswXV1bSV9YXSk7CgogICAgICAgICAg
UHJvamVjdENvb3Jkcyh2aWV3UG9pbnQuZ2V0X3goKSx2aWV3UG9pbnQuZ2V0X3koKSxSX1ZQVF9a
LElfWCxJX1kwTiwKICAgICAgICAgICAgUl9FTEVWW0lfTFsxXV1bSV9YXSwKICAgICAgICAgICAg
Ul9VW0lfTFsxXV1bSV9YXSwKICAgICAgICAgICAgUl9WW0lfTFsxXV1bSV9YXSk7CiAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICB9CgoKCgoKICAgIGhvcml6b25JdGVtTGlzdC5TdGFydEhvcml6
b24oTF9ET19RVUFELAogICAgICAgICAgICBSX1VbSV9MWzFdXVt2aWV3UG9pbnQuZ2V0X3goKV0s
CiAgICAgICAgICAgIFJfVltJX0xbMV1dW3ZpZXdQb2ludC5nZXRfeCgpXSwKICAgICAgICAgICAg
Ul9VW0lfTFsxXV1bSV9YME5bMF1dLFJfVltJX0xbMV1dW0lfWDBOWzBdXSwKICAgICAgICAgICAg
Ul9VW0lfTFswXV1bSV9YME5bMF1dLFJfVltJX0xbMF1dW0lfWDBOWzBdXSwKICAgICAgICAgICAg
Ul9VW0lfTFsxXV1bSV9YME5bMV1dLFJfVltJX0xbMV1dW0lfWDBOWzFdXSwKICAgICAgICAgICAg
Ul9VW0lfTFswXV1bSV9YME5bMV1dLFJfVltJX0xbMF1dW0lfWDBOWzFdXSk7CiMgNDEyICJmaW5k
dmlzYXJlYS5jcHAiCiAgICBJSV9WSVNfQlVGW0lfTFswXV1bdmlld1BvaW50LmdldF94KCldPTM7
CiAgICBJSV9WSVNfQlVGW0lfTFsxXV1bdmlld1BvaW50LmdldF94KCldPTE7CgogICAgZm9yIChJ
SV9RVUFEPTA7SUlfUVVBRDw9MTtJSV9RVUFEKyspIHsKICAgICAgaWYgKExfRE9fUVVBRFtJSV9R
VUFEXSkgewogICAgICAgIElJX1ZJU19CVUZbSV9MWzBdXVtJX1gwTltJSV9RVUFEXV09MTsKICAg
ICAgICBJSV9WSVNfQlVGW0lfTFsxXV1bSV9YME5bSUlfUVVBRF1dPTE7CiAgICAgICAgfQogICAg
ICBlbHNlIHsKICAgICAgICBJSV9WSVNfQlVGW0lfTFswXV1bSV9YME5bSUlfUVVBRF1dPTA7CiAg
ICAgICAgSUlfVklTX0JVRltJX0xbMV1dW0lfWDBOW0lJX1FVQURdXT0wOwogICAgICAgIH0KICAg
ICAgfQoKCgoKCiAgICBsb25nIElJX0ZBQ0VUX1RZUEUgPSAxOwogICAgZm9yIChJSV9RVUFEPTA7
SUlfUVVBRDw9MTtJSV9RVUFEKyspIHsKICAgICAgaWYgKExfRE9fUVVBRFtJSV9RVUFEXSkgewog
ICAgICAgIGZvciAobG9uZyBJX1g9SV9YME5bSUlfUVVBRF07SV9YIT0oSV9ORVhUX0xBU1RfUElY
W0lJX1FVQURdKTtJX1grPUlfU1RFUFtJSV9RVUFEXSkgewogICAgICAgICAgbG9uZyBJX1hOID0g
SV9YICsgSV9TVEVQW0lJX1FVQURdOwoKICAgICAgICAgIGlmIChSX1ZbSV9MWzBdXVtJX1hOXSA9
PSAoZmxvYXQpLTMuNEUzOCkgewogICAgICAgICAgICBJSV9WSVNfQlVGW0lfTFswXV1bSV9YTl09
MDsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIElJX1ZJU19CVUZb
SV9MWzBdXVtJX1hOXT0yOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKFJfVltJX0xbMV1d
W0lfWE5dID09IChmbG9hdCktMy40RTM4KSB7CiAgICAgICAgICAgIElJX1ZJU19CVUZbSV9MWzFd
XVtJX1hOXT0wOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgSUlf
VklTX0JVRltJX0xbMV1dW0lfWE5dPTI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBob3Jpem9u
SXRlbUxpc3QuUHJvY2Vzc0ZhY2V0KFJfVSxSX1YsSUlfVklTX0JVRixJX1gsSV9MLElJX0ZBQ0VU
X1RZUEUsSUlfUVVBRCx2aWV3UG9pbnQpOwoKCgoKCgoKICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIGVsc2UgewogICAgICAgIGZvciAobG9uZyBJX1g9SV9YME5bSUlfUVVBRF0rSV9TVEVQW0lJ
X1FVQURdO0lfWCE9SV9ORVhUX0xBU1RfUElYW0lJX1FVQURdO0lfWCs9SV9TVEVQW0lJX1FVQURd
KSB7CiAgICAgICAgICBJSV9WSVNfQlVGW0lfTFswXV1bSV9YXT0wOwogICAgICAgICAgSUlfVklT
X0JVRltJX0xbMV1dW0lfWF09MDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KIyA0NzUg
ImZpbmR2aXNhcmVhLmNwcCIKICAgIHRlbXBGaWxlLldyaXRlTGluZSh2aWV3UG9pbnQuZ2V0X3ko
KSsxLElJX1ZJU19CVUZbSV9MWzBdXSk7CiAgICB0ZW1wRmlsZS5Xcml0ZUxpbmUoSV9ZME4rMSxJ
SV9WSVNfQlVGW0lfTFsxXV0pOwoKCgoKCiAgICBmb3IgKGxvbmcgSV9ZPUlfWTBOO0lfWSE9SV9M
QVNUX0xJTkU7SV9ZKz1JSV9IQUxGKSB7CiAgICAgIGxvbmcgSV9ZTiA9IElfWSArIElJX0hBTEY7
CgoKCgogICAgICBsb25nIElfVEVNUCA9IElfTFswXTsKICAgICAgSV9MWzBdID0gSV9MWzFdOwog
ICAgICBJX0xbMV0gPSBJX1RFTVA7CgogICAgICBpcmV2bGluZT1JSV9WRUNQTFlfTk9MSU5TLUlf
WU4tMTsKICAgICAgOjpHREJSZWFsQ2hhbklPKGZwREVNSW5wdXRGaWxlLDAsMCxpcmV2bGluZSxJ
SV9WRUNQTFlfTk9QWExTLDEsUl9FTEVWW0lfTFsxXV0sSUlfVkVDUExZX05PUFhMUywxLDEsJmxv
bmUpOwojIDUwMyAiZmluZHZpc2FyZWEuY3BwIgogICAgICBsb25nIElJX0ZBQ0VUX1RZUEUgPSAy
OwoKICAgICAgUHJvamVjdENvb3Jkcyh2aWV3UG9pbnQuZ2V0X3goKSx2aWV3UG9pbnQuZ2V0X3ko
KSxSX1ZQVF9aLHZpZXdQb2ludC5nZXRfeCgpLElfWU4sCiAgICAgICAgICAgIFJfRUxFVltJX0xb
MV1dW3ZpZXdQb2ludC5nZXRfeCgpXSwKICAgICAgICAgICAgUl9VW0lfTFsxXV1bdmlld1BvaW50
LmdldF94KCldLAogICAgICAgICAgICBSX1ZbSV9MWzFdXVt2aWV3UG9pbnQuZ2V0X3goKV0pOwoK
ICAgICAgaWYgKFJfVltJX0xbMV1dW3ZpZXdQb2ludC5nZXRfeCgpXSA9PSAoZmxvYXQpLTMuNEUz
OCkgewogICAgICAgIElJX1ZJU19CVUZbSV9MWzFdXVt2aWV3UG9pbnQuZ2V0X3goKV0gPSAwOwog
ICAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgSUlfVklTX0JVRltJX0xbMV1dW3ZpZXdQb2lu
dC5nZXRfeCgpXSA9IDI7CiAgICAgICAgfQoKICAgICAgbG9uZyBJSV9RVUFEOwogICAgICBmb3Ig
KElJX1FVQUQ9MDtJSV9RVUFEPDI7SUlfUVVBRCsrKSB7CiAgICAgICAgaWYgKExfRE9fUVVBRFtJ
SV9RVUFEXSkgewoKICAgICAgICAgIFByb2plY3RDb29yZHModmlld1BvaW50LmdldF94KCksdmll
d1BvaW50LmdldF95KCksUl9WUFRfWixJX1gwTltJSV9RVUFEXSxJX1lOLAogICAgICAgICAgICAg
IFJfRUxFVltJX0xbMV1dW0lfWDBOW0lJX1FVQURdXSwKICAgICAgICAgICAgICBSX1VbSV9MWzFd
XVtJX1gwTltJSV9RVUFEXV0sCiAgICAgICAgICAgICAgUl9WW0lfTFsxXV1bSV9YME5bSUlfUVVB
RF1dKTsKCiAgICAgICAgICBpZiAoUl9WW0lfTFsxXV1bSV9YME5bSUlfUVVBRF1dID09IChmbG9h
dCktMy40RTM4KSB7CiAgICAgICAgICAgIElJX1ZJU19CVUZbSV9MWzFdXVtJX1gwTltJSV9RVUFE
XV0gPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgSUlfVklT
X0JVRltJX0xbMV1dW0lfWDBOW0lJX1FVQURdXSA9IDI7CiAgICAgICAgICAgIH0KCiAgICAgICAg
ICBob3Jpem9uSXRlbUxpc3QuUHJvY2Vzc0ZhY2V0KFJfVSxSX1YsSUlfVklTX0JVRix2aWV3UG9p
bnQuZ2V0X3goKSxJX0wsSUlfRkFDRVRfVFlQRSxJSV9RVUFELHZpZXdQb2ludCk7CiAgICAgICAg
ICB9CiAgICAgICAgfQoKCgoKCiAgICAgIElJX0ZBQ0VUX1RZUEUgPSAzOwoKICAgICAgZm9yIChJ
SV9RVUFEPTA7SUlfUVVBRDwyO0lJX1FVQUQrKykgewogICAgICAgIGlmIChMX0RPX1FVQURbSUlf
UVVBRF0pIHsKCiAgICAgICAgICBmb3IgKGxvbmcgSV9YPUlfWDBOW0lJX1FVQURdO0lfWCE9SV9O
RVhUX0xBU1RfUElYW0lJX1FVQURdO0lfWCs9SV9TVEVQW0lJX1FVQURdKSB7CiAgICAgICAgICAg
IGxvbmcgSV9YTiA9IElfWCArIElfU1RFUFtJSV9RVUFEXTsKCiAgICAgICAgICAgIFByb2plY3RD
b29yZHModmlld1BvaW50LmdldF94KCksdmlld1BvaW50LmdldF95KCksUl9WUFRfWixJX1hOLElf
WU4sCiAgICAgICAgICAgICAgICBSX0VMRVZbSV9MWzFdXVtJX1hOXSwKICAgICAgICAgICAgICAg
IFJfVVtJX0xbMV1dW0lfWE5dLAogICAgICAgICAgICAgICAgUl9WW0lfTFsxXV1bSV9YTl0pOwoK
ICAgICAgICAgICAgaWYgKFJfVltJX0xbMV1dW0lfWE5dID09IChmbG9hdCktMy40RTM4KSB7CiAg
ICAgICAgICAgICAgSUlfVklTX0JVRltJX0xbMV1dW0lfWE5dID0gMDsKICAgICAgICAgICAgICB9
CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIElJX1ZJU19CVUZbSV9MWzFdXVtJX1hO
XSA9IDI7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgaG9yaXpvbkl0ZW1MaXN0LlByb2Nl
c3NGYWNldChSX1UsUl9WLElJX1ZJU19CVUYsSV9YLElfTCxJSV9GQUNFVF9UWVBFLElJX1FVQUQs
dmlld1BvaW50KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KCgoKCiAgICAg
IHRlbXBGaWxlLldyaXRlTGluZShJX1lOKzEsJklJX1ZJU19CVUZbSV9MWzFdXVswXSk7CgogICAg
ICB9CiAgICB9CgogIGRlbGV0ZSBbXSBSX1ZbMF07CiAgZGVsZXRlIFtdIFJfVlsxXTsKCiAgZGVs
ZXRlIFtdIFJfVVswXTsKICBkZWxldGUgW10gUl9VWzFdOwoKICBkZWxldGUgW10gUl9FTEVWWzBd
OwogIGRlbGV0ZSBbXSBSX0VMRVZbMV07CgogIGRlbGV0ZSBbXSBJSV9WSVNfQlVGWzBdOwogIGRl
bGV0ZSBbXSBJSV9WSVNfQlVGWzFdOwoKCnJldHVybigxKTsKfQo=


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

* Re: c/5384: Internal compiler error in insn_default_length
@ 2002-01-14 18:57 rodrigc
  0 siblings, 0 replies; 2+ messages in thread
From: rodrigc @ 2002-01-14 18:57 UTC (permalink / raw)
  To: cheng, gcc-bugs, gcc-prs, nobody

Synopsis: Internal compiler error in insn_default_length

State-Changed-From-To: open->analyzed
State-Changed-By: rodrigc
State-Changed-When: Mon Jan 14 18:57:19 2002
State-Changed-Why:
    Reproduced with gcc 3.0.3.
    Could not reproduce with gcc version 3.1 20020112 (experimental)

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


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

end of thread, other threads:[~2002-01-15  2:57 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-01-14 14:36 c/5384: Internal compiler error in insn_default_length cheng
2002-01-14 18:57 rodrigc

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).