public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/3450: internal compiler error on my incorrect syntax
@ 2001-06-27 21:26 athurston
  0 siblings, 0 replies; 4+ messages in thread
From: athurston @ 2001-06-27 21:26 UTC (permalink / raw)
  To: gcc-gnats

>Number:         3450
>Category:       c++
>Synopsis:       internal compiler error on my incorrect syntax
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          ice-on-illegal-code
>Submitter-Id:   net
>Arrival-Date:   Wed Jun 27 21:26:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Adrian Thurston
>Release:        gcc version 2.95.2 19991024 (release)
>Organization:
>Environment:
Reading specs from /usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/specs
>Description:
ICE on my bad syntax

Command line that triggers bug:
c++ --save-temps -g -Wall -I.. -I../include -o testFsmGraph.tst testFsmGraph.cpp ../aapl.a

Compiler output:
In file included from testFsmGraph.cpp:8:
../include/FsmBaseVkImp.h:130: Internal compiler error.
../include/FsmBaseVkImp.h:130: Please submit a full bug report.
../include/FsmBaseVkImp.h:130: See <URL: http://www.gnu.org/software/gcc/faq.html#bugreport > for instructions.
>How-To-Repeat:
compile preprocessor output
>Fix:
A few lines above the ice line number add the missing open brace that I forgot and no ice occurs.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="testFsmGraph.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="testFsmGraph.ii"

IyAxICJ0ZXN0RnNtR3JhcGguY3BwIgogCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEg
MwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu
aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgogCgoKCiAKCgoKCgoKCiAKIyAxNDIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAz
CgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDIw
OCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKIAoKCiAKCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgogCgoKIyAx
ICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKIAoKCgoKCgogCgoKCgoKIAoKCgoKCgoKCiAKCgoKIyA2NSAiL3Vzci9pbmNsdWRlL3N5cy9j
ZGVmcy5oIiAzCgoKIAoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKCgogCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCiAKCgoK
CgoKCiAKCgoKCiAKCgoKCgoKIyAyODMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKCgoK
IAoKCgoKCgoKCiAKCgoKCiAKCiAKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMu
aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAzMTEgIi91c3IvaW5j
bHVkZS9mZWF0dXJlcy5oIiAyIDMKCgoKCiMgMjcgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMK
CgpleHRlcm4gIkMiIHsgCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdu
dS8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9n
Y2MtbGliL2k1ODYtcGMtbGludXgtZ251LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAK
CgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMi45
NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMi45NS4y
L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgogCgojIDI3MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8yLjk1LjIv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCiMgMjgzICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu
dXgtZ251LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGli
L2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAzMyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoK
CgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8yLjk1LjIvaW5jbHVk
ZS9zdGRhcmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKdHlwZWRlZiB2b2lkICpfX2dudWNfdmFf
bGlzdDsKCgoKIAoKIyAxMjIgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMi45
NS4yL2luY2x1ZGUvc3RkYXJnLmgiIDMKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDIwOSAiL3Vzci9s
aWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8yLjk1LjIvaW5jbHVkZS9zdGRhcmcuaCIgMwoK
CgoKIyAzOCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvdHlwZXMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiMgMSAiL3Vzci9s
aWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAz
CgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzIuOTUu
Mi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2dj
Yy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoK
CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1s
aWIvaTU4Ni1wYy1saW51eC1nbnUvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoK
IyAxODggIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMi45NS4yL2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgojIDI3MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBj
LWxpbnV4LWdudS8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiMgMjgzICIvdXNyL2xpYi9n
Y2MtbGliL2k1ODYtcGMtbGludXgtZ251LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoK
IAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMi45NS4yL2luY2x1
ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyOSAiL3Vzci9pbmNs
dWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7
CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBf
X3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5
cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5
cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw
ZXMuaCIgMwoKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50
MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlw
ZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpf
X3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsJCSAKdHlwZWRlZiBfX3VfaW50
IF9fdWlkX3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX2dpZF90OwkJIAp0eXBlZGVmIF9fdV9sb25n
IF9faW5vX3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsJCSAKdHlwZWRlZiBfX3VfaW50
IF9fbmxpbmtfdDsgCQkgCnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsJCSAKdHlwZWRlZiBfX3F1
YWRfdCBfX2xvZmZfdDsJCSAKdHlwZWRlZiBpbnQgX19waWRfdDsJCQkgCnR5cGVkZWYgaW50IF9f
c3NpemVfdDsJCQkgCnR5cGVkZWYgX191X2xvbmcgX19ybGltX3Q7CQkgCnR5cGVkZWYgX191X3F1
YWRfdCBfX3JsaW02NF90OwkJIAp0eXBlZGVmIF9fdV9pbnQgX19pZF90OwkJCSAKCnR5cGVkZWYg
c3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CQkJCSAKCiAKdHlwZWRl
ZiBpbnQgX19kYWRkcl90OwkJCSAKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9u
ZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29uZHNfdDsKdHlwZWRl
ZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtfdDsJCSAK
DAp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCiAKdHlwZWRlZiBpbnQgX19jbG9ja2lkX3Q7
CgogCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgogCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQg
X19mZF9tYXNrOwoKIAoKCiAKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICAgCgoKCgoKICAg
IF9fZmRfbWFzayBfX2Zkc19iaXRzWzEwMjQgIC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpIF07
CgoKICB9IF9fZmRfc2V0OwoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7CgogCnR5cGVkZWYgdW5zaWdu
ZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCiAKdHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVf
dDsKCiAKCiAKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9f
YmxrY250NjRfdDsKCiAKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191
X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCiAKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7
CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsKCiAKdHlwZWRlZiBfX3VfcXVhZF90
IF9faW5vNjRfdDsKCiAKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgogCnR5cGVkZWYgbG9u
ZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdF91c2NhbGFy
X3Q7CgogCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgogCnR5cGVkZWYgdW5zaWduZWQgaW50IF9f
c29ja2xlbl90OwoKCiAKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEg
MwogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvc2NoZWQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNjIgIi91c3IvaW5jbHVkZS9i
aXRzL3NjaGVkLmgiIDMKCgoKCgogCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IHNj
aGVkX3ByaW9yaXR5OwogIH07CgoKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz
LmgiIDIgMwoKCiAKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1
czsgICAgCiAgaW50IF9fc3BpbmxvY2s7ICAgICAgIAoKfTsKCgogCnR5cGVkZWYgc3RydWN0IF9w
dGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgogCnR5cGVkZWYgc3RydWN0
CnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19z
Y2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Nj
b3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQg
Kl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgog
CnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7ICAK
ICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsgICAgICAgICAKfSBwdGhyZWFkX2NvbmRfdDsK
CgogCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7
CgogCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKIAogCgp0eXBlZGVmIHN0
cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsgICAgICAgICAgICAgICAgCiAgaW50IF9fbV9jb3Vu
dDsgICAgICAgICAgICAgICAgICAgCiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOyAgICAgICAg
CiAgaW50IF9fbV9raW5kOyAgICAgICAgICAgICAgICAgICAgCiAgc3RydWN0IF9wdGhyZWFkX2Zh
c3Rsb2NrIF9fbV9sb2NrOyAgCn0gcHRocmVhZF9tdXRleF90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QK
ewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCiAKdHlwZWRlZiBp
bnQgcHRocmVhZF9vbmNlX3Q7CgoKIyAxMTcgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBl
cy5oIiAzCgoKIyAxMzYgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCgoKCiAK
dHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CgoKIyAxNjUgIi91c3IvaW5jbHVk
ZS9iaXRzL3R5cGVzLmgiIDIgMwoKCgoKIyA0MCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoK
CgoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKCgoKCgoKCgogCnR5cGVkZWYg
c3RydWN0IF9JT19GSUxFIF9fRklMRTsKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL19H
X2NvbmZpZy5oIiAxIDMKIAoKCgoKCiAKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYt
cGMtbGludXgtZ251LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkg
Ii91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMi45NS4yL2luY2x1ZGUvc3RkZGVm
LmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxp
bnV4LWdudS8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4
LWdudS8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIv
Z2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoK
CiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgaW50ICB3
aW50X3Q7CgoKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdu
dS8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoj
IDE0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKCgoKCgoKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvd2NoYXIuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKIyA0MyAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1s
aW51eC1nbnUvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vz
ci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIg
MwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgt
Z251LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251
LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAxOTAgIi91c3IvbGliL2djYy1s
aWIvaTU4Ni1wYy1saW51eC1nbnUvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCgoK
IAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMi45NS4yL2luY2x1
ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxp
Yi9pNTg2LXBjLWxpbnV4LWdudS8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgojIDQ1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgoKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IyA0NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKCiAKCgoKCgoKCgoKCgoKCiAKdHlwZWRl
ZiBzdHJ1Y3QKewogIGludCBfX2NvdW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwog
ICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3ZhbHVlOwkJIAp9IF9fbWJzdGF0ZV90OwoKCgoKIAoK
IyA2ODEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgoKCiMgMjQgIi91c3IvaW5jbHVkZS9fR19j
b25maWcuaCIgMiAzCgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0
YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3Qg
X19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKCgoKCgoKCgojIDEg
Ii91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoj
IDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
CgoKCgojIDQzICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxp
Yi9pNTg2LXBjLWxpbnV4LWdudS8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAK
CgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzIuOTUuMi9pbmNsdWRl
L3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTU4
Ni1wYy1saW51eC1nbnUvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1w
Yy1saW51eC1nbnUvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgojIDE5MCAiL3Vz
ci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIg
MwoKCgogCgoKCgogCgojIDI3MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8y
Ljk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNy
L2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNDUgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAy
IDMKCgoKCiAKCgoKCgoKCgoKCgojIDczICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKCgoKIAoK
IyA2ODEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgoKCiMgMjggIi91c3IvaW5jbHVkZS9nY29u
di5oIiAyIDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMi45NS4y
L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9p
NTg2LXBjLWxpbnV4LWdudS8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoK
CiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzIuOTUuMi9pbmNs
dWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAK
CiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzIuOTUuMi9pbmNsdWRl
L3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu
dXgtZ251LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKIyAyNzEgIi91
c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgi
IDMKCgojIDI4MyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8yLjk1LjIvaW5j
bHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMt
bGludXgtZ251LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiMgMzAgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgogCgoKIAplbnVtCnsKICBf
X0dDT05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIsCiAgX19HQ09O
Vl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExfT1VUUFVULAog
IF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQsCgogIF9f
R0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJST1IKfTsKCgog
CmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9SRV9FUlJP
UlMgPSAweDAwMDIKfTsKCgogCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0
ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJh
bnNfZGF0YTsKCgogCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19nY29udl9z
dGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAoJCQkgICAgX19jb25zdCB1bnNpZ25l
ZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKCQkJICAgIHVuc2lnbmVkIGNoYXIg
KiosIHNpemVfdCAqLCBpbnQsIGludCk7CgogCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2Zj
dCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2Zj
dCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoKIAp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJh
bnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAoJCQkJICBzdHJ1Y3QgX19nY29udl9zdGVw
X2RhdGEgKiwgdm9pZCAqLAoJCQkJICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKCQkJCSAgX19j
b25zdCB1bnNpZ25lZCBjaGFyICoqLAoJCQkJICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5z
aWduZWQgY2hhciAqKiwKCQkJCSAgc2l6ZV90ICopOwoKIAp0eXBlZGVmIGludCAoKl9fZ2NvbnZf
dHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAoJCQkJ
CSAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCgkJCQkJICB1bnNpZ25lZCBjaGFyICosIHVuc2ln
bmVkIGNoYXIgKik7CgogCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19xdWVyeV9mY3QpIChf
X2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoqKiwKCQkJCQlzaXplX3QgKik7CgogCnR5cGVk
ZWYgaW50ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7
CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3Qg
X19nY29udl90cmFuc19kYXRhCnsKICAgCiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7
CiAgX19nY29udl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2Nv
bnZfdHJhbnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVj
dCBfX2djb252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgogCnN0cnVjdCBfX2djb252X3N0ZXAK
ewogIHN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29u
c3QgY2hhciAqX19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBfX2NvbnN0IGNoYXIgKl9f
ZnJvbV9uYW1lOwogIF9fY29uc3QgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2Zj
dDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5k
X2ZjdDsKCiAgIAoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9m
cm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCiAgIAog
IGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7CQkgCn07CgogCgpzdHJ1Y3QgX19nY29u
dl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmOyAgICAgCiAgdW5zaWduZWQg
Y2hhciAqX19vdXRidWZlbmQ7ICAKCgogICAKICBpbnQgX19mbGFnczsKCiAgIAoKICBpbnQgX19p
bnZvY2F0aW9uX2NvdW50ZXI7CgogICAKCiAgaW50IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3Rh
dGVfdCAqX19zdGF0ZXA7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsJIAoKCiAgIAogIHN0cnVjdCBf
X2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKIAp0eXBlZGVmIHN0cnVjdCBfX2djb252
X2luZm8KewogIHNpemVfdCBfX25zdGVwczsKICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBz
OwogIF9fZXh0ZW5zaW9uX18gc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YVswXTsKfSAq
X19nY29udl90OwoKCiMgNDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVm
IHVuaW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAgc3Ry
dWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0
YTsKICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2X3Qg
X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMy
X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQg
aW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBl
ZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f
U0lfXykpKTsKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCiMg
MzAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKCiAKCgoKCgoKCgoKCgoKCgoKCgogCgojIDEg
Ii91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMi45NS4yL2luY2x1ZGUvc3RkYXJn
LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgojIDEyMiAiL3Vzci9saWIvZ2NjLWxpYi9p
NTg2LXBjLWxpbnV4LWdudS8yLjk1LjIvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCgoKCgoKCgoKCgoK
CgoKCgoKCiMgMjA5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzIuOTUuMi9p
bmNsdWRlL3N0ZGFyZy5oIiAzCgoKCgojIDUxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCgoK
CgoKCgojIDcwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwoKCiAKCgoKCgoKCgoKCgoKCgoKCgoj
IDEwMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgX0lPX2p1bXBfdDsgIHN0cnVj
dCBfSU9fRklMRTsKCiAKCgoKCgoKCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgogCgpzdHJ1
Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9f
RklMRSAqX3NidWY7CiAgIAoKICAgCiAgaW50IF9wb3M7CiMgMTkwICIvdXNyL2luY2x1ZGUvbGli
aW8uaCIgMwoKfTsKCiAKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAg
X19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYK
fTsKCiMgMjYxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwoKCnN0cnVjdCBfSU9fRklMRSB7CiAg
aW50IF9mbGFnczsJCSAKCgogICAKICAgCiAgY2hhciogX0lPX3JlYWRfcHRyOwkgCiAgY2hhciog
X0lPX3JlYWRfZW5kOwkgCiAgY2hhciogX0lPX3JlYWRfYmFzZTsJIAogIGNoYXIqIF9JT193cml0
ZV9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX3B0cjsJIAogIGNoYXIqIF9JT193cml0ZV9lbmQ7
CSAKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CSAKICBjaGFyKiBfSU9fYnVmX2VuZDsJIAogICAKICBj
aGFyICpfSU9fc2F2ZV9iYXNlOyAgCiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOyAgIAogIGNoYXIg
Kl9JT19zYXZlX2VuZDsgIAoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVj
dCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19v
ZmZfdCAgIF9vbGRfb2Zmc2V0OyAgCgoKICAgCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47
CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgogICAK
CiAgX0lPX2xvY2tfdCAqX2xvY2s7CgoKCgoKCgoKICBfX29mZjY0X3QgICBfb2Zmc2V0OwoKCgoK
CiAgdm9pZCAqX19wYWQxOwogIHZvaWQgKl9fcGFkMjsKCiAgaW50IF9tb2RlOwogICAKICBjaGFy
IF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoK
CgoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9J
T18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRf
OwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwoKCgoKCgoKCgoK
CiAKCiAKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNo
YXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwoKIAoKCgoKCnR5cGVkZWYgX19zc2l6ZV90IF9f
aW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAoJCQkJIHNp
emVfdCBfX24pOwoKIAoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29r
aWUsIF9fb2ZmNjRfdCAgICpfX3BvcywgaW50IF9fdyk7CgogCnR5cGVkZWYgaW50IF9faW9fY2xv
c2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgojIDM5MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK
CgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICopIHRo
cm93ICgpIDsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKSA7CmV4dGVy
biBpbnQgX19vdmVyZmxvdyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKSA7CmV4dGVybiB3aW50
X3QgICBfX3d1bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpIDsKZXh0ZXJuIHdpbnRfdCAg
IF9fd3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKSA7CmV4dGVybiB3aW50X3QgICBfX3dvdmVy
ZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90ICApIHRocm93ICgpIDsKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpIDsKZXh0
ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpIDsKZXh0
ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpIDsKZXh0ZXJuIGludCBf
SU9fZmVycm9yIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBfSU9fcGVl
a2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCkgOwoKIAoKCgpleHRlcm4gdm9pZCBf
SU9fZmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKSA7CmV4dGVybiB2b2lkIF9JT19mdW5s
b2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCkgOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2Zp
bGUgKF9JT19GSUxFICopIHRocm93ICgpIDsKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgX0lP
X3Zmc2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3Qs
CgkJCV9fZ251Y192YV9saXN0ICwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKSA7CmV4dGVybiBp
bnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0
cmljdCwKCQkJIF9fZ251Y192YV9saXN0ICkgdGhyb3cgKCkgOwpleHRlcm4gX19zc2l6ZV90ICAg
X0lPX3BhZG4gKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90ICApIHRocm93ICgpIDsKZXh0ZXJu
IHNpemVfdCAgIF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QgICkgdGhyb3cg
KCkgOwoKZXh0ZXJuIF9fb2ZmNjRfdCAgIF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0
X3QgICwgaW50LCBpbnQpIHRocm93ICgpIDsKZXh0ZXJuIF9fb2ZmNjRfdCAgIF9JT19zZWVrcG9z
IChfSU9fRklMRSAqLCBfX29mZjY0X3QgICwgaW50KSB0aHJvdyAoKSA7CgpleHRlcm4gdm9pZCBf
SU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCkgOwoKIyA1MTEgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAzCgoKCn0KCgoKIyA2OSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIg
MwoKCiAKCnR5cGVkZWYgX0dfZnBvc190IGZwb3NfdDsKCgoKCgoKCiAKCgoKCgogCgoKCgoKIAoK
CgoKCgogCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRp
b19saW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMg
MTIyICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCiAKZXh0ZXJuIEZJTEUgKnN0ZGluOwkJ
IApleHRlcm4gRklMRSAqc3Rkb3V0OwkJIApleHRlcm4gRklMRSAqc3RkZXJyOwkJIAogCgoKCgog
CmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpIDsK
IApleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpf
X25ldykgdGhyb3cgKCkgOwoKCiAKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSB0aHJvdyAo
KSA7CgoKCgoKCgoKCgogCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgdGhyb3cgKCkg
OwoKCiAKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSB0aHJvdyAoKSA7CgoKCgog
CgoKCgoKCmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0
IGNoYXIgKl9fcGZ4KQogICAgIHRocm93ICgpICAgOwoKCgogCmV4dGVybiBpbnQgZmNsb3NlIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwogCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKSA7CgoKCgoKCgoKCiAKZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKCQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbW9kZXMpIHRocm93ICgpIDsKIApleHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCgkJICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbW9kZXMsCgkJICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCkg
OwojIDIxMyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKCgoKCgoKCiAKZXh0ZXJuIEZJTEUg
KmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCkgOwoKCiMg
MjQyICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgogCgpleHRlcm4gdm9pZCBzZXRidWYgKEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgp
IDsKIAoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hh
ciAqX19yZXN0cmljdCBfX2J1ZiwKCQkgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRocm93
ICgpIDsKCgogCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCgkJICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93
ICgpIDsKCiAKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
IDsKCgoKIApleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCgkJ
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKSA7CiAK
ZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4u
KSB0aHJvdyAoKSA7CiAKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywK
CQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpIDsK
CiAKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKCQkgICAgIF9fZ251Y192YV9saXN0ICBfX2FyZykgdGhy
b3cgKCkgOwogCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
Zm9ybWF0LCBfX2dudWNfdmFfbGlzdCAgX19hcmcpCiAgICAgdGhyb3cgKCkgOwogCmV4dGVybiBp
bnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsCgkJICAgICBfX2dudWNfdmFfbGlzdCAgX19hcmcpIHRocm93ICgpIDsKCgog
CmV4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhs
ZW4sCgkJICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0
aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7
CgpleHRlcm4gaW50IF9fdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f
bWF4bGVuLAoJCQlfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9s
aXN0ICBfX2FyZykKICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f
cHJpbnRmX18sIDMsIDApKSk7CmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0
IF9fcywgc2l6ZV90IF9fbWF4bGVuLAoJCSAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgIF9fYXJnKQogICAgIHRocm93ICgpICBfX2F0dHJpYnV0
ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgojIDMxNyAiL3Vzci9pbmNs
dWRlL3N0ZGlvLmgiIDMKCgoKIApleHRlcm4gaW50IGZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSwKCQkgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhy
b3cgKCkgOwogCmV4dGVybiBpbnQgc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv
cm1hdCwgLi4uKSB0aHJvdyAoKSA7CiAKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsCgkJICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu
Li4pIHRocm93ICgpIDsKCiMgMzQzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgogCmV4dGVy
biBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgZ2V0YyAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0
aHJvdyAoKSA7CgogCgoKCgogCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpIDsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAo
KSA7CgoKCiAKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpIDsKCgoKIApleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCkgOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KSA7CgogCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCkgOwoKIAoKCgoKIApl
eHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCkgOwoKCgogCmV4dGVybiBpbnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJl
YW0pIHRocm93ICgpIDsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJv
dyAoKSA7CgoKCgogCmV4dGVybiBpbnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsK
CiAKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoK
CgogCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCkgOwoKCgoKCgoKIAoKZXh0ZXJu
IGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCkgOwoKCiMgNDMzICIvdXNyL2luY2x1ZGUv
c3RkaW8uaCIgMwoKCgogCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCkgOwoKCgoKCgoK
IApleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSA7CgoKIApleHRl
cm4gaW50IHVuZ2V0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKCgogCmV4
dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUs
CgkJICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKSA7
CiAKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwg
c2l6ZV90IF9fc2l6ZSwKCQkgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykg
dGhyb3cgKCkgOwoKCiAKZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0
cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKCQkJICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCkgOwpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tl
ZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAoJCQkgICAg
ICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCgog
CmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9f
d2hlbmNlKSB0aHJvdyAoKSA7CiAKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCkgOwogCmV4dGVybiB2b2lkIHJld2luZCAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpIDsKCiAKCgoKCiAKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoKCgoKCgoKCgoKCgoK
CgoKIApleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3Nf
dCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKSA7CiAKZXh0ZXJuIGludCBmc2V0cG9z
IChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKSA7CiMgNTMy
ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgoKCgoKCgoKIApleHRlcm4gdm9pZCBjbGVhcmVy
ciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKIApleHRlcm4gaW50IGZlb2YgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKSA7CiAKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKSA7CgoKIApleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpIDsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCkgOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpIDsKCgoKIApleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJv
dyAoKSA7CgogCgoKZXh0ZXJuIGludCBzeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19j
b25zdCBzeXNfZXJybGlzdFtdOwoKCgoKCgoKCiAKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKSA7CgoKCiAKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKCgoKIApleHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3Qg
Y2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpIDsKCiAKZXh0
ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKCgogCmV4dGVybiBj
aGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpIDsKCgoKCgoKCgoKIyA2MTQgIi91c3Iv
aW5jbHVkZS9zdGRpby5oIiAzCgoKCgogCgogCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpIDsKCiAKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCkgOwoKIApleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpIDsKCgoKCgoKCgoKCiAKCgoKCgp9IAoKCgoKIyA1ICJ0ZXN0RnNtR3Jh
cGguY3BwIiAyCgoKIyAxICIuLi9pbmNsdWRlL0ZzbUJhc2VWay5oIiAxCiAKCgoKCgojIDEgIi4u
L2luY2x1ZGUvVmVjdG9yU2V0LmgiIDEKIAoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9tYWxsb2Mu
aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAi
L3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8yLjk1LjIvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCgoKCgoKCiAKCgoKCgoKCiAKCiAKCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3Iv
bGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMK
CgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CgoKCgoKCgoKCiAKCgoKCiAKCiAKCgojIDE4OCAi
L3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8yLjk1LjIvaW5jbHVkZS9zdGRkZWYu
aCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4
LWdudS8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAz
MTcgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMi45NS4yL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiMgNDQgIi91c3IvaW5jbHVkZS9t
YWxsb2MuaCIgMiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKIyA5MyAiL3Vz
ci9pbmNsdWRlL21hbGxvYy5oIiAzCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCmV4
dGVybiBpbnQgX19tYWxsb2NfaW5pdGlhbGl6ZWQ7CgogCgoKCgogCmV4dGVybiB2b2lkICogIG1h
bGxvYyAgKHNpemVfdCBfX3NpemUpICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiB2b2lkICogIGNh
bGxvYyAgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKSAgdGhyb3cgKCkgIAogICAgICAg
IDsKCiAKCmV4dGVybiB2b2lkICogIHJlYWxsb2MgICh2b2lkICogIF9fcHRyLAoJCQkJCSAgIHNp
emVfdCBfX3NpemUpICB0aHJvdyAoKSAgCiAgICAgICAgOwoKIApleHRlcm4gdm9pZCBmcmVlICAo
dm9pZCAqICBfX3B0cikgIHRocm93ICgpICA7CgogCmV4dGVybiB2b2lkIGNmcmVlICAodm9pZCAq
ICBfX3B0cikgIHRocm93ICgpICA7CgogCmV4dGVybiB2b2lkICogIG1lbWFsaWduICAoc2l6ZV90
IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXplKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQg
KiAgdmFsbG9jICAoc2l6ZV90IF9fc2l6ZSkgIHRocm93ICgpICAgIDsKCiAKCmV4dGVybiB2b2lk
ICogICBwdmFsbG9jICAoc2l6ZV90IF9fc2l6ZSkgIHRocm93ICgpICAKICAgICAgICA7CgogCgpl
eHRlcm4gdm9pZCAqICAoKl9fbW9yZWNvcmUpICAocHRyZGlmZl90IF9fc2l6ZSkgIDsKCiAKZXh0
ZXJuIHZvaWQgKiAgX19kZWZhdWx0X21vcmVjb3JlICAocHRyZGlmZl90IF9fc2l6ZSkgIHRocm93
ICgpICAKICAgICAgICA7CgogCnN0cnVjdCBtYWxsaW5mbyB7CiAgaW50IGFyZW5hOyAgICAgCiAg
aW50IG9yZGJsa3M7ICAgCiAgaW50IHNtYmxrczsgICAgCiAgaW50IGhibGtzOyAgICAgCiAgaW50
IGhibGtoZDsgICAgCiAgaW50IHVzbWJsa3M7ICAgCiAgaW50IGZzbWJsa3M7ICAgCiAgaW50IHVv
cmRibGtzOyAgCiAgaW50IGZvcmRibGtzOyAgCiAgaW50IGtlZXBjb3N0OyAgCn07CgogCmV4dGVy
biBzdHJ1Y3QgbWFsbGluZm8gbWFsbGluZm8gICh2b2lkKSAgdGhyb3cgKCkgIDsKCiAKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKIApleHRlcm4gaW50IG1hbGxvcHQgIChpbnQgX19wYXJhbSwgaW50IF9f
dmFsKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBpbnQgbWFsbG9jX3RyaW0gIChzaXplX3QgX19w
YWQpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIHNpemVfdCBtYWxsb2NfdXNhYmxlX3NpemUgICh2
b2lkICogIF9fcHRyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgbWFsbG9jX3N0YXRzICAo
dm9pZCkgIHRocm93ICgpICA7CgogCmV4dGVybiB2b2lkICogIG1hbGxvY19nZXRfc3RhdGUgICh2
b2lkKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBpbnQgbWFsbG9jX3NldF9zdGF0ZSAgKHZvaWQg
KiAgX19wdHIpICB0aHJvdyAoKSAgOwoKCiAKCgpleHRlcm4gdm9pZCAoKl9fbWFsbG9jX2luaXRp
YWxpemVfaG9vaykgICh2b2lkKSAgOwogCmV4dGVybiB2b2lkICgqX19mcmVlX2hvb2spICAodm9p
ZCAqICBfX3B0ciwKCQkJCQlfX2NvbnN0IHZvaWQgKiApICA7CmV4dGVybiB2b2lkICogICgqX19t
YWxsb2NfaG9vaykgIChzaXplX3QgX19zaXplLAoJCQkJCQkgICAgX19jb25zdCB2b2lkICogKSAg
OwpleHRlcm4gdm9pZCAqICAoKl9fcmVhbGxvY19ob29rKSAgKHZvaWQgKiAgX19wdHIsCgkJCQkJ
CSAgICAgc2l6ZV90IF9fc2l6ZSwKCQkJCQkJICAgICBfX2NvbnN0IHZvaWQgKiApICA7CmV4dGVy
biB2b2lkICogICgqX19tZW1hbGlnbl9ob29rKSAgKHNpemVfdCBfX2FsaWdubWVudCwKCQkJCQkJ
ICAgICAgc2l6ZV90IF9fc2l6ZSwKCQkJCQkJICAgICAgX19jb25zdCB2b2lkICogKSAgOwpleHRl
cm4gdm9pZCAoKl9fYWZ0ZXJfbW9yZWNvcmVfaG9vaykgICh2b2lkKSAgOwoKIApleHRlcm4gdm9p
ZCBfX21hbGxvY19jaGVja19pbml0ICAodm9pZCkgIHRocm93ICgpICA7CgoKCn07ICAKCgoKIyA4
ICIuLi9pbmNsdWRlL1ZlY3RvclNldC5oIiAyCgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKZXh0ZXJuICJDIiB7IAoKIAoKCiMgMSAi
L3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8yLjk1LjIvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251
LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3Iv
bGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMK
CgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKCiMgMTI2ICIvdXNyL2xp
Yi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
IAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzIu
OTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKCiMgMjY5ICIvdXNyL2xpYi9n
Y2MtbGliL2k1ODYtcGMtbGludXgtZ251LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoK
CgoKCgoKCgoKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdu
dS8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
IyAzMyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKIApleHRlcm4gdm9pZCAqbWVtY3B5
ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKCQkgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmlj
dCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCkgOwogCgpleHRlcm4gdm9pZCAqbWVtbW92ZSAo
dm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93
ICgpIDsKCiAKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0
LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCgkJICAgICAgaW50IF9fYywgc2l6ZV90
IF9fbikKICAgICB0aHJvdyAoKSA7CgoKCiAKZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19z
LCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgbWVtY21wIChf
X2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0
aHJvdyAoKSAgIDsKCiAKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGlu
dCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpICAgOwoKIyA3MyAiL3Vzci9pbmNsdWRl
L3N0cmluZy5oIiAzCgoKCiAKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBf
X2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKSA7CiAK
ZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAoJCSAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCkgOwoKIApl
eHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpIDsKIApleHRlcm4gY2hhciAqc3RybmNh
dCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ny
YywKCQkgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgc3RyY21wIChf
X2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSAgIDsK
IApleHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf
X3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpICAgOwoKIApleHRlcm4gaW50IHN0cmNvbGwg
KF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpICAg
OwogCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCgkJICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCkg
OwoKIyAxMTYgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgogCmV4dGVybiBjaGFyICpzdHJk
dXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSAgIDsKCgogCgoKCgoKCgojIDE1MiAiL3Vz
ci9pbmNsdWRlL3N0cmluZy5oIiAzCgoKIApleHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNo
YXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgICA7CiAKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9f
Y29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSAgIDsKCgoKCgoKCiAKCmV4dGVybiBz
aXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3Qp
CiAgICAgdGhyb3cgKCkgICA7CiAKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIg
Kl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSAgIDsKIApleHRlcm4g
Y2hhciAqc3RycGJyayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQp
CiAgICAgdGhyb3cgKCkgICA7CiAKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpf
X2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpICAgOwoKCgoK
CgoKIApleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCkgOwoKIAoKZXh0ZXJuIGNoYXIg
Kl9fc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAoJCQkgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZGVsaW0sCgkJCSBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAo
KSA7CgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKCQkgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19z
YXZlX3B0cikgdGhyb3cgKCkgOwoKCiMgMjE0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoK
IApleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpICAgOwoK
CgoKCgoKCgogCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9fZXJybnVtKSB0aHJvdyAoKSA7
CgogCgpleHRlcm4gY2hhciAqX19zdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVm
LCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpIDsKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGlu
dCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCkgOwoKCiAK
CmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCkgOwoK
CiAKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwg
c2l6ZV90IF9fbikgdGhyb3cgKCkgOwoKIApleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBz
aXplX3QgX19uKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpf
X3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgICA7Cgog
CmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgp
ICAgOwoKIApleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykg
dGhyb3cgKCkgICA7CgogCgpleHRlcm4gaW50IF9fZmZzIChpbnQgX19pKSB0aHJvdyAoKSAgX19h
dHRyaWJ1dGVfXyAoKGNvbnN0KSk7CmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSB0aHJvdyAoKSAg
X19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CgogCgoKCgoKCgoKCiAKZXh0ZXJuIGludCBzdHJjYXNl
Y21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAo
KSAgIDsKCiAKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2Nv
bnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgICA7CgoKIyAyOTEgIi91
c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgogCgpleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoq
X19yZXN0cmljdCBfX3N0cmluZ3AsCgkJICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19k
ZWxpbSkgdGhyb3cgKCkgOwoKCiMgMzM0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKCiMg
MzYyICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKfSAKCgojIDkgIi4uL2luY2x1ZGUvVmVj
dG9yU2V0LmgiIDIKCiMgMSAiLi4vaW5jbHVkZS9Db21wYXJlLmgiIDEKIAoKCgoKCiMgMSAiLi4v
aW5jbHVkZS9UYWJsZS5oIiAxCiAKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2lvc3RyZWFt
IiAxIDMKIAogCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9pb3N0cmVhbS5oIiAxIDMKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKIyAxICIvdXNyL2luY2x1
ZGUvZysrL3N0cmVhbWJ1Zi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFn
bWEgaW50ZXJmYWNlCgoKICAgCgoKCmV4dGVybiAiQyIgewoKfQogCgojIDEgIi91c3IvbGliL2dj
Yy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMi45NS4yL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgp2b2lkIHZhX2VuZCAoX19n
bnVjX3ZhX2xpc3QpOwkJIAoKCiAKCgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIAogCgoKCgoKCgoKCgoKCgojIDE3NSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxp
bnV4LWdudS8yLjk1LjIvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCiAKCgoKCiAKCiAKCiAKCnR5cGVk
ZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA0MCAi
L3Vzci9pbmNsdWRlL2crKy9zdHJlYW1idWYuaCIgMiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOyAgCmNsYXNzIG9zdHJlYW07IGNsYXNzIHN0
cmVhbWJ1ZjsKCiAKCgoKCnR5cGVkZWYgX19vZmY2NF90ICAgc3RyZWFtb2ZmOwp0eXBlZGVmIF9f
b2ZmNjRfdCAgIHN0cmVhbXBvczsKCgoKCnR5cGVkZWYgX19zc2l6ZV90ICAgc3RyZWFtc2l6ZTsK
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX2ZtdGZsYWdzOwp0eXBlZGVmIHVuc2lnbmVkIGNoYXIg
X19pb3N0YXRlOwoKc3RydWN0IF9pb3NfZmllbGRzCnsgIAogICAgc3RyZWFtYnVmICpfc3RyYnVm
OwogICAgb3N0cmVhbSogX3RpZTsKICAgIGludCBfd2lkdGg7CiAgICBfX2ZtdGZsYWdzIF9mbGFn
czsKICAgIHdjaGFyX3QgICBfZmlsbDsKICAgIF9faW9zdGF0ZSBfc3RhdGU7CiAgICBfX2lvc3Rh
dGUgX2V4Y2VwdGlvbnM7CiAgICBpbnQgX3ByZWNpc2lvbjsKCiAgICB2b2lkICpfYXJyYXlzOyAg
Cn07CgoKCgoKCgoKCgoKCgoKCiMgMTI0ICIvdXNyL2luY2x1ZGUvZysrL3N0cmVhbWJ1Zi5oIiAz
CgoKY2xhc3MgaW9zIDogcHVibGljIF9pb3NfZmllbGRzIHsKICBpb3MmIG9wZXJhdG9yPShpb3Mm
KTsgICAKICBpb3MgKGNvbnN0IGlvcyYpOyAgCiAgcHVibGljOgogICAgdHlwZWRlZiBfX2ZtdGZs
YWdzIGZtdGZsYWdzOwogICAgdHlwZWRlZiBpbnQgaW9zdGF0ZTsKICAgIHR5cGVkZWYgaW50IG9w
ZW5tb2RlOwogICAgdHlwZWRlZiBfX3NzaXplX3QgICBzdHJlYW1zaXplOwogICAgZW51bSBpb19z
dGF0ZSB7Cglnb29kYml0ID0gMCAsCgllb2ZiaXQgPSAxICwKCWZhaWxiaXQgPSAyICwKCWJhZGJp
dCA9IDQgIH07CiAgICBlbnVtIG9wZW5fbW9kZSB7CglpbiA9IDEgLAoJb3V0ID0gMiAsCglhdGUg
PSA0ICwKCWFwcCA9IDggLAoJdHJ1bmMgPSAxNiAsCglub2NyZWF0ZSA9IDMyICwKCW5vcmVwbGFj
ZSA9IDY0ICwKCWJpbiA9IDEyOCAsICAKCWJpbmFyeSA9IDEyOCAgfTsKICAgIGVudW0gc2Vla19k
aXIgeyBiZWcsIGN1ciwgZW5kfTsKICAgIHR5cGVkZWYgZW51bSBzZWVrX2RpciBzZWVrZGlyOwog
ICAgIAogICAgZW51bSB7IHNraXB3cz0gMDEgLAoJICAgbGVmdD0gMDIgLCByaWdodD0gMDQgLCBp
bnRlcm5hbD0gMDEwICwKCSAgIGRlYz0gMDIwICwgb2N0PSAwNDAgLCBoZXg9IDAxMDAgLAoJICAg
c2hvd2Jhc2U9IDAyMDAgLCBzaG93cG9pbnQ9IDA0MDAgLAoJICAgdXBwZXJjYXNlPSAwMTAwMCAs
IHNob3dwb3M9IDAyMDAwICwKCSAgIHNjaWVudGlmaWM9IDA0MDAwICwgZml4ZWQ9IDAxMDAwMCAs
CgkgICB1bml0YnVmPSAwMjAwMDAgLCBzdGRpbz0gMDQwMDAwIAoKCgoJICAgfTsKICAgIGVudW0g
eyAgCgliYXNlZmllbGQ9ZGVjK29jdCtoZXgsCglmbG9hdGZpZWxkID0gc2NpZW50aWZpYytmaXhl
ZCwKCWFkanVzdGZpZWxkID0gbGVmdCtyaWdodCtpbnRlcm5hbAogICAgfTsKCiMgMTc3ICIvdXNy
L2luY2x1ZGUvZysrL3N0cmVhbWJ1Zi5oIiAzCgoKICAgIG9zdHJlYW0qIHRpZSgpIGNvbnN0IHsg
cmV0dXJuIF90aWU7IH0KICAgIG9zdHJlYW0qIHRpZShvc3RyZWFtKiB2YWwpIHsgb3N0cmVhbSog
c2F2ZT1fdGllOyBfdGllPXZhbDsgcmV0dXJuIHNhdmU7IH0KCiAgICAgCiAgICB3Y2hhcl90ICAg
ZmlsbCgpIGNvbnN0IHsgcmV0dXJuIF9maWxsOyB9CiAgICB3Y2hhcl90ICAgZmlsbCh3Y2hhcl90
ICAgbmV3ZikKCXt3Y2hhcl90ICAgb2xkZiA9IF9maWxsOyBfZmlsbCA9IG5ld2Y7IHJldHVybiBv
bGRmO30KICAgIGZtdGZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gX2ZsYWdzOyB9CiAgICBm
bXRmbGFncyBmbGFncyhmbXRmbGFncyBuZXdfdmFsKSB7CglmbXRmbGFncyBvbGRfdmFsID0gX2Zs
YWdzOyBfZmxhZ3MgPSBuZXdfdmFsOyByZXR1cm4gb2xkX3ZhbDsgfQogICAgaW50IHByZWNpc2lv
bigpIGNvbnN0IHsgcmV0dXJuIF9wcmVjaXNpb247IH0KICAgIGludCBwcmVjaXNpb24oaW50IG5l
d3ApIHsKCXVuc2lnbmVkIHNob3J0IG9sZHAgPSBfcHJlY2lzaW9uOyBfcHJlY2lzaW9uID0gKHVu
c2lnbmVkIHNob3J0KW5ld3A7CglyZXR1cm4gb2xkcDsgfQogICAgZm10ZmxhZ3Mgc2V0ZihmbXRm
bGFncyB2YWwpIHsKCWZtdGZsYWdzIG9sZGJpdHMgPSBfZmxhZ3M7CglfZmxhZ3MgfD0gdmFsOyBy
ZXR1cm4gb2xkYml0czsgfQogICAgZm10ZmxhZ3Mgc2V0ZihmbXRmbGFncyB2YWwsIGZtdGZsYWdz
IG1hc2spIHsKCWZtdGZsYWdzIG9sZGJpdHMgPSBfZmxhZ3M7CglfZmxhZ3MgPSAoX2ZsYWdzICYg
fm1hc2spIHwgKHZhbCAmIG1hc2spOyByZXR1cm4gb2xkYml0czsgfQogICAgZm10ZmxhZ3MgdW5z
ZXRmKGZtdGZsYWdzIG1hc2spIHsKCWZtdGZsYWdzIG9sZGJpdHMgPSBfZmxhZ3M7CglfZmxhZ3Mg
Jj0gfm1hc2s7IHJldHVybiBvbGRiaXRzOyB9CiAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVy
biBfd2lkdGg7IH0KICAgIGludCB3aWR0aChpbnQgdmFsKSB7IGludCBzYXZlID0gX3dpZHRoOyBf
d2lkdGggPSB2YWw7IHJldHVybiBzYXZlOyB9CgoKCgogICAgdm9pZCBfdGhyb3dfZmFpbHVyZSgp
IGNvbnN0IHsgfQoKICAgIHZvaWQgY2xlYXIoaW9zdGF0ZSBzdGF0ZSA9IDApIHsKCV9zdGF0ZSA9
IF9zdHJidWYgPyBzdGF0ZSA6IHN0YXRlfGJhZGJpdDsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9u
cykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgdm9pZCBzZXQoaW9zdGF0ZSBmbGFnKSB7IF9zdGF0
ZSB8PSBmbGFnOwoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9
CiAgICB2b2lkIHNldHN0YXRlKGlvc3RhdGUgZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsgIAoJaWYg
KF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICBpbnQgZ29vZCgp
IGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSA9PSAwOyB9CiAgICBpbnQgZW9mKCkgY29uc3QgeyByZXR1
cm4gX3N0YXRlICYgaW9zOjplb2ZiaXQ7IH0KICAgIGludCBmYWlsKCkgY29uc3QgeyByZXR1cm4g
X3N0YXRlICYgKGlvczo6YmFkYml0fGlvczo6ZmFpbGJpdCk7IH0KICAgIGludCBiYWQoKSBjb25z
dCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmJhZGJpdDsgfQogICAgaW9zdGF0ZSByZHN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gX3N0YXRlOyB9CiAgICBvcGVyYXRvciB2b2lkKigpIGNvbnN0IHsgcmV0
dXJuIGZhaWwoKSA/ICh2b2lkKikwIDogKHZvaWQqKSgtMSk7IH0KICAgIGludCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiBmYWlsKCk7IH0KICAgIGlvc3RhdGUgZXhjZXB0aW9ucygpIGNvbnN0
IHsgcmV0dXJuIF9leGNlcHRpb25zOyB9CiAgICB2b2lkIGV4Y2VwdGlvbnMoaW9zdGF0ZSBlbmFi
bGUpIHsKCV9leGNlcHRpb25zID0gZW5hYmxlOwoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBf
dGhyb3dfZmFpbHVyZSgpOyB9CgogICAgc3RyZWFtYnVmKiByZGJ1ZigpIGNvbnN0IHsgcmV0dXJu
IF9zdHJidWY7IH0KICAgIHN0cmVhbWJ1ZiogcmRidWYoc3RyZWFtYnVmICpfcykgewogICAgICBz
dHJlYW1idWYgKl9vbGQgPSBfc3RyYnVmOyBfc3RyYnVmID0gX3M7IGNsZWFyICgpOyByZXR1cm4g
X29sZDsgfQoKICAgIHN0YXRpYyBpbnQgc3luY193aXRoX3N0ZGlvKGludCBvbik7CiAgICBzdGF0
aWMgdm9pZCBzeW5jX3dpdGhfc3RkaW8oKSB7IHN5bmNfd2l0aF9zdGRpbygxKTsgfQogICAgc3Rh
dGljIGZtdGZsYWdzIGJpdGFsbG9jKCk7CiAgICBzdGF0aWMgaW50IHhhbGxvYygpOwogICAgdm9p
ZComIHB3b3JkKGludCk7CiAgICB2b2lkKiBwd29yZChpbnQpIGNvbnN0OwogICAgbG9uZyYgaXdv
cmQoaW50KTsKICAgIGxvbmcgaXdvcmQoaW50KSBjb25zdDsKCgoKCgoKCgoKICAgICAKICAgIGNs
YXNzIEluaXQgewogICAgcHVibGljOgogICAgICBJbml0ICgpIHsgfQogICAgfTsKCiAgcHJvdGVj
dGVkOgogICAgaW5saW5lIGlvcyhzdHJlYW1idWYqIHNiID0gMCwgb3N0cmVhbSogdGllX3RvID0g
MCk7CiAgICBpbmxpbmUgdmlydHVhbCB+aW9zKCk7CiAgICBpbmxpbmUgdm9pZCBpbml0KHN0cmVh
bWJ1Ziogc2IsIG9zdHJlYW0qIHRpZSA9IDApOwp9OwoKCgoKdHlwZWRlZiBpb3M6OnNlZWtfZGly
IF9zZWVrX2RpcjsKCgogCiAKIAogCiAKCiAKIApjbGFzcyBzdHJlYW1tYXJrZXIgOiBwcml2YXRl
IF9JT19tYXJrZXIgewogICAgZnJpZW5kIGNsYXNzIHN0cmVhbWJ1ZjsKICAgIHZvaWQgc2V0X29m
ZnNldChpbnQgb2Zmc2V0KSB7IF9wb3MgPSBvZmZzZXQ7IH0KICBwdWJsaWM6CiAgICBzdHJlYW1t
YXJrZXIoc3RyZWFtYnVmICpzYik7CiAgICB+c3RyZWFtbWFya2VyKCk7CiAgICBpbnQgc2F2aW5n
KCkgeyByZXR1cm4gIDE7IH0KICAgIGludCBkZWx0YShzdHJlYW1tYXJrZXImKTsKICAgIGludCBk
ZWx0YSgpOwp9OwoKc3RydWN0IHN0cmVhbWJ1ZiA6IHB1YmxpYyBfSU9fRklMRSB7ICAKICAgIGZy
aWVuZCBjbGFzcyBpb3M7CiAgICBmcmllbmQgY2xhc3MgaXN0cmVhbTsKICAgIGZyaWVuZCBjbGFz
cyBvc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIHN0cmVhbW1hcmtlcjsKICAgIGNvbnN0IHZvaWQg
KiZfdnRhYmxlKCkgeyByZXR1cm4gKihjb25zdCB2b2lkKiopKChfSU9fRklMRSopdGhpcyArIDEp
OyB9CiAgcHJvdGVjdGVkOgogICAgc3RhdGljIHN0cmVhbWJ1ZiogX2xpc3RfYWxsOyAgCiAgICBf
SU9fRklMRSomIHhjaGFpbigpIHsgcmV0dXJuIF9jaGFpbjsgfQogICAgdm9pZCBfdW5fbGluaygp
OwogICAgdm9pZCBfbGlua19pbigpOwogICAgY2hhciogZ3B0cigpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfcHRyOyB9CiAg
ICBjaGFyKiBwcHRyKCkgY29uc3QgeyByZXR1cm4gX0lPX3dyaXRlX3B0cjsgfQogICAgY2hhciog
ZWdwdHIoKSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVf
ZW5kIDogX0lPX3JlYWRfZW5kOyB9CiAgICBjaGFyKiBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9J
T193cml0ZV9lbmQ7IH0KICAgIGNoYXIqIHBiYXNlKCkgY29uc3QgeyByZXR1cm4gX0lPX3dyaXRl
X2Jhc2U7IH0KICAgIGNoYXIqIGViYWNrKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAm
IDB4MTAwICA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9iYXNlO30KICAgIGNoYXIqIGJhc2Uo
KSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2Jhc2U7IH0KICAgIGNoYXIqIGVidWYoKSBjb25zdCB7
IHJldHVybiBfSU9fYnVmX2VuZDsgfQogICAgaW50IGJsZW4oKSBjb25zdCB7IHJldHVybiBfSU9f
YnVmX2VuZCAtIF9JT19idWZfYmFzZTsgfQogICAgdm9pZCB4cHV0X2NoYXIoY2hhciBjKSB7ICpf
SU9fd3JpdGVfcHRyKysgPSBjOyB9CiAgICBpbnQgeGZsYWdzKCkgeyByZXR1cm4gX2ZsYWdzIDsg
fQogICAgaW50IHhmbGFncyhpbnQgZikge2ludCBmbCA9IF9mbGFncyA7IF9mbGFncyAgPSBmOyBy
ZXR1cm4gZmw7fQogICAgdm9pZCB4c2V0ZmxhZ3MoaW50IGYpIHsgX2ZsYWdzICB8PSBmOyB9CiAg
ICB2b2lkIHhzZXRmbGFncyhpbnQgZiwgaW50IG1hc2spCiAgICAgIHsgX2ZsYWdzICA9IChfZmxh
Z3MgICYgfm1hc2spIHwgKGYgJiBtYXNrKTsgfQogICAgdm9pZCBnYnVtcChpbnQgbikKICAgICAg
eyBfZmxhZ3MgICYgMHgxMDAgID8gKF9JT19zYXZlX2Jhc2UrPW4pOihfSU9fcmVhZF9wdHIrPW4p
O30KICAgIHZvaWQgcGJ1bXAoaW50IG4pIHsgX0lPX3dyaXRlX3B0ciArPSBuOyB9CiAgICB2b2lk
IHNldGIoY2hhciogYiwgY2hhciogZWIsIGludCBhPTApOwogICAgdm9pZCBzZXRwKGNoYXIqIHAs
IGNoYXIqIGVwKQogICAgICB7IF9JT193cml0ZV9iYXNlPV9JT193cml0ZV9wdHI9cDsgX0lPX3dy
aXRlX2VuZD1lcDsgfQogICAgdm9pZCBzZXRnKGNoYXIqIGViLCBjaGFyKiBnLCBjaGFyICplZykg
ewogICAgICBpZiAoX2ZsYWdzICAmIDB4MTAwICkgX0lPX2ZyZWVfYmFja3VwX2FyZWEodGhpcyk7
IAogICAgICBfSU9fcmVhZF9iYXNlID0gZWI7IF9JT19yZWFkX3B0ciA9IGc7IF9JT19yZWFkX2Vu
ZCA9IGVnOyB9CiAgICBjaGFyICpzaG9ydGJ1ZigpIHsgcmV0dXJuIF9zaG9ydGJ1ZjsgfQoKICAg
IGludCBpbl9iYWNrdXAoKSB7IHJldHVybiBfZmxhZ3MgJiAweDEwMCA7IH0KICAgICAKICAgIGNo
YXIgKkdiYXNlKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3Jl
YWRfYmFzZTsgfQogICAgIAogICAgY2hhciAqZUdwdHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/
IF9JT19zYXZlX2VuZCA6IF9JT19yZWFkX2VuZDsgfQogICAgIAogICAgY2hhciAqQmJhc2UoKSB7
IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2Jhc2UgOiBfSU9fc2F2ZV9iYXNlOyB9CiAg
ICBjaGFyICpCcHRyKCkgeyByZXR1cm4gX0lPX2JhY2t1cF9iYXNlOyB9CiAgICAgCiAgICBjaGFy
ICplQnB0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3JlYWRfZW5kIDogX0lPX3NhdmVf
ZW5kOyB9CiAgICBjaGFyICpOYmFzZSgpIHsgcmV0dXJuIF9JT19zYXZlX2Jhc2U7IH0KICAgIGNo
YXIgKmVOcHRyKCkgeyByZXR1cm4gX0lPX3NhdmVfZW5kOyB9CiAgICBpbnQgaGF2ZV9iYWNrdXAo
KSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlICE9IF9fbnVsbCA7IH0KICAgIGludCBoYXZlX21hcmtl
cnMoKSB7IHJldHVybiBfbWFya2VycyAhPSBfX251bGwgOyB9CiAgICB2b2lkIGZyZWVfYmFja3Vw
X2FyZWEoKTsKICAgIHZvaWQgdW5zYXZlX21hcmtlcnMoKTsgIAogICAgaW50IHB1dF9tb2RlKCkg
eyByZXR1cm4gX2ZsYWdzICYgMHg4MDAgOyB9CiAgICBpbnQgc3dpdGNoX3RvX2dldF9tb2RlKCk7
CiAgICAKICAgIHN0cmVhbWJ1ZihpbnQgZmxhZ3M9MCk7CiAgcHVibGljOgogICAgc3RhdGljIGlu
dCBmbHVzaF9hbGwoKTsKICAgIHN0YXRpYyB2b2lkIGZsdXNoX2FsbF9saW5lYnVmZmVyZWQoKTsg
IAogICAgdmlydHVhbCB+c3RyZWFtYnVmKCk7CiAgICB2aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQg
YyA9ICgtMSkgKTsgIAogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93KCk7ICAKICAgIHZpcnR1YWwg
aW50IHVmbG93KCk7ICAKICAgIHZpcnR1YWwgaW50IHBiYWNrZmFpbChpbnQgYyk7CiAKICAgIHZp
cnR1YWwgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAg
IHZpcnR1YWwgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZp
cnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGludCBtb2RlPWlv
czo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla3BvcyhzdHJlYW1wb3Mg
cG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwoKICAgIHN0cmVhbXBvcyBwdWJzZWVr
b2ZmKHN0cmVhbW9mZiBvLCBfc2Vla19kaXIgZCwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCkK
ICAgICAgeyByZXR1cm4gX0lPX3NlZWtvZmYgKHRoaXMsIG8sIGQsIG1vZGUpOyB9CiAgICBzdHJl
YW1wb3MgcHVic2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpv
dXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrcG9zICh0aGlzLCBwb3MsIG1vZGUpOyB9CiAgICBz
dHJlYW1wb3Mgc3NlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGludCBtb2RlPWlvczo6aW58
aW9zOjpvdXQpOwogICAgc3RyZWFtcG9zIHNzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGludCBtb2Rl
ID0gaW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIq
IHAsIGludCBsZW4pOwogICAgdmlydHVhbCBpbnQgc3luYygpOwogICAgdmlydHVhbCBpbnQgZG9h
bGxvY2F0ZSgpOwoKICAgIGludCBzZWVrbWFyayhzdHJlYW1tYXJrZXImIG1hcmssIGludCBkZWx0
YSA9IDApOwogICAgaW50IHNwdXRiYWNrYyhjaGFyIGMpOwogICAgaW50IHN1bmdldGMoKTsKICAg
IGludCB1bmJ1ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMiAgPyAxIDogMDsgfQogICAgaW50
IGxpbmVidWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MjAwICA/IDEgOiAwOyB9CiAgICB2
b2lkIHVuYnVmZmVyZWQoaW50IGkpCgl7IGlmIChpKSBfZmxhZ3MgfD0gMiA7IGVsc2UgX2ZsYWdz
ICY9IH4yIDsgfQogICAgdm9pZCBsaW5lYnVmZmVyZWQoaW50IGkpCgl7IGlmIChpKSBfZmxhZ3Mg
fD0gMHgyMDAgOyBlbHNlIF9mbGFncyAmPSB+MHgyMDAgOyB9CiAgICBpbnQgYWxsb2NhdGUoKSB7
ICAKCWlmIChiYXNlKCkgfHwgdW5idWZmZXJlZCgpKSByZXR1cm4gMDsKCWVsc2UgcmV0dXJuIGRv
YWxsb2NhdGUoKTsgfQogICAgIAogICAgdm9pZCBhbGxvY2J1ZigpIHsgaWYgKGJhc2UoKSA9PSBf
X251bGwgKSBkb2FsbG9jYnVmKCk7IH0KICAgIHZvaWQgZG9hbGxvY2J1ZigpOwogICAgaW50IGlu
X2F2YWlsKCkgeyByZXR1cm4gX0lPX3JlYWRfZW5kIC0gX0lPX3JlYWRfcHRyOyB9CiAgICBpbnQg
b3V0X3dhaXRpbmcoKSB7IHJldHVybiBfSU9fd3JpdGVfcHRyIC0gX0lPX3dyaXRlX2Jhc2U7IH0K
ICAgIHN0cmVhbXNpemUgc3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKSB7IHJldHVy
biB4c3B1dG4ocywgbik7IH0KICAgIHN0cmVhbXNpemUgcGFkbihjaGFyIHBhZCwgc3RyZWFtc2l6
ZSBuKSB7IHJldHVybiBfSU9fcGFkbih0aGlzLCBwYWQsIG4pOyB9CiAgICBzdHJlYW1zaXplIHNn
ZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3NnZXRuKHRoaXMsIHMsIG4p
OyB9CiAgICBpbnQgaWdub3JlKGludCk7CiAgICBpbnQgZ2V0X2NvbHVtbigpOwogICAgaW50IHNl
dF9jb2x1bW4oaW50KTsKICAgIGxvbmcgc2dldGxpbmUoY2hhciogYnVmLCBzaXplX3QgICBuLCBj
aGFyIGRlbGltLCBpbnQgcHV0YmFja19kZWxpbSk7CiAgICBpbnQgc3B1dGMoaW50IGMpIHsgcmV0
dXJuIF9JT19wdXRjKGMsIHRoaXMpOyB9CiAgICBpbnQgc2J1bXBjKCkgeyByZXR1cm4gX0lPX2dl
dGModGhpcyk7IH0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJuICgoICB0aGlzICApLT5fSU9fcmVh
ZF9wdHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRfZW5kICYmIF9fdW5kZXJmbG93ICggIHRoaXMg
ICkgPT0gKC0xKSAgPyAoLTEpICA6ICoodW5zaWduZWQgY2hhciAqKSAoICB0aGlzICApLT5fSU9f
cmVhZF9wdHIpICA7IH0KICAgIGludCBzbmV4dGMoKSB7CglpZiAoX0lPX3JlYWRfcHRyID49IF9J
T19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyh0aGlzKSA9PSAoLTEpICkKCSAgcmV0dXJuICgtMSkg
OwoJZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyssIHNnZXRjKCk7IH0KICAgIHZvaWQgc3Rvc3Nj
KCkgeyBpZiAoX0lPX3JlYWRfcHRyIDwgX0lPX3JlYWRfZW5kKSBfSU9fcmVhZF9wdHIrKzsgfQog
ICAgaW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9fZ251Y192YV9saXN0ICBhcCwgaW9zKiBz
dHJlYW0gPSBfX251bGwgKTsKICAgIGludCBzY2FuKGNoYXIgY29uc3QgKmZtdDAgLi4uKTsKICAg
IGludCB2Zm9ybShjaGFyIGNvbnN0ICpmbXQwLCBfX2dudWNfdmFfbGlzdCAgYXApOwogICAgaW50
IGZvcm0oY2hhciBjb25zdCAqZm10MCAuLi4pOwoKCgoKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBz
eXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUgc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXNp
emUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1zaXplKTsKICAgIHZpcnR1YWwgc3RyZWFt
cG9zIHN5c19zZWVrKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHZpcnR1YWwgaW50IHN5c19j
bG9zZSgpOwogICAgdmlydHVhbCBpbnQgc3lzX3N0YXQodm9pZCopOyAgCgogICAgdmlydHVhbCBp
bnQgc2hvd21hbnljKCk7CiAgICB2aXJ0dWFsIHZvaWQgaW1idWUodm9pZCAqKTsKCn07CgogCiAK
CmNsYXNzIGZpbGVidWYgOiBwdWJsaWMgc3RyZWFtYnVmIHsKICBwcm90ZWN0ZWQ6CiAgICB2b2lk
IGluaXQoKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgaW50IG9wZW5wcm90OyAgCiAgICBm
aWxlYnVmKCk7CiAgICBmaWxlYnVmKGludCBmZCk7CiAgICBmaWxlYnVmKGludCBmZCwgY2hhciog
cCwgaW50IGxlbik7CgoKCiAgICB+ZmlsZWJ1ZigpOwogICAgZmlsZWJ1ZiogYXR0YWNoKGludCBm
ZCk7CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpt
b2RlKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGlvczo6b3Blbm1v
ZGUgbW9kZSwgaW50IHByb3QgPSAwNjY0KTsKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOwog
ICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpICk7CiAgICBpbnQgaXNfb3Blbigp
IGNvbnN0IHsgcmV0dXJuIF9maWxlbm8gPj0gMDsgfQogICAgaW50IGZkKCkgY29uc3QgeyByZXR1
cm4gaXNfb3BlbigpID8gX2ZpbGVubyA6ICgtMSkgOyB9CiAgICBmaWxlYnVmKiBjbG9zZSgpOwog
ICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla29m
ZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICB2
aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGludCBsZW4pOwogICAgc3RyZWFtc2l6
ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHN0cmVhbXNpemUgeHNn
ZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIGludCBzeW5jKCk7CiAgcHJv
dGVjdGVkOiAgCiAKICAgIGludCBpc19yZWFkaW5nKCkgeyByZXR1cm4gZWJhY2soKSAhPSBlZ3B0
cigpOyB9CiAgICBjaGFyKiBjdXJfcHRyKCkgeyByZXR1cm4gaXNfcmVhZGluZygpID8gIGdwdHIo
KSA6IHBwdHIoKTsgfQogICAgIAogICAgY2hhciogZmlsZV9wdHIoKSB7IHJldHVybiBlR3B0cigp
OyB9CiAgICAgCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBzdHJl
YW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc3lzX3NlZWsoc3RyZWFtb2ZmLCBf
c2Vla19kaXIpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c193cml0ZShjb25zdCBjaGFyKiwg
c3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2b2lkKik7ICAKICAgIHZpcnR1
YWwgaW50IHN5c19jbG9zZSgpOwoKCgoKfTsKCmlubGluZSB2b2lkIGlvczo6aW5pdChzdHJlYW1i
dWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsKCQlfc3RhdGUgPSBzYiA/IGlvczo6Z29vZGJpdCA6
IGlvczo6YmFkYml0OyBfZXhjZXB0aW9ucz0wOwoJCV9zdHJidWY9c2I7IF90aWUgPSB0aWVfdG87
IF93aWR0aD0wOyBfZmlsbD0nICc7CgoJCV9mbGFncz1pb3M6OnNraXB3c3xpb3M6OmRlYzsKCgoK
CQlfcHJlY2lzaW9uPTY7IF9hcnJheXMgPSAwOyB9CgppbmxpbmUgaW9zOjppb3Moc3RyZWFtYnVm
KiBzYiwgb3N0cmVhbSogdGllX3RvKSB7IGluaXQoc2IsIHRpZV90byk7IH0KCmlubGluZSBpb3M6
On5pb3MoKSB7CgoKCiAgICAgCiAgICAgCiAgICBvcGVyYXRvciBkZWxldGVbXSAoX2FycmF5cyk7
Cn0KfSAgCgojIDMxICIvdXNyL2luY2x1ZGUvZysrL2lvc3RyZWFtLmgiIDIgMwoKCmV4dGVybiAi
QysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07CnR5cGVkZWYgaW9zJiAoKl9fbWFu
aXApKGlvcyYpOwp0eXBlZGVmIGlzdHJlYW0mICgqX19pbWFuaXApKGlzdHJlYW0mKTsKdHlwZWRl
ZiBvc3RyZWFtJiAoKl9fb21hbmlwKShvc3RyZWFtJik7CgpleHRlcm4gaXN0cmVhbSYgd3MoaXN0
cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mIG91dHMpOwpleHRlcm4g
b3N0cmVhbSYgZW5kbChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0mIGVuZHMob3N0cmVh
bSYgb3V0cyk7CgpjbGFzcyBvc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zCnsKICAgICAKICAg
IHZvaWQgZG9fb3NmeCgpOwogIHB1YmxpYzoKICAgIG9zdHJlYW0oKSB7IH0KICAgIG9zdHJlYW0o
c3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllZD0gX19udWxsICk7CiAgICBpbnQgb3BmeCgpIHsK
CWlmICghZ29vZCgpKSByZXR1cm4gMDsKCWVsc2UgeyBpZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsg
IDsgcmV0dXJuIDE7fSB9CiAgICB2b2lkIG9zZngoKSB7ICA7CgkJICBpZiAoZmxhZ3MoKSAmIChp
b3M6OnVuaXRidWZ8aW9zOjpzdGRpbykpCgkJICAgICAgZG9fb3NmeCgpOyB9CiAgICBvc3RyZWFt
JiBmbHVzaCgpOwogICAgb3N0cmVhbSYgcHV0KGNoYXIgYykgeyBfc3RyYnVmLT5zcHV0YyhjKTsg
cmV0dXJuICp0aGlzOyB9CgoKCgoKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IGNoYXIgKnMsIHN0
cmVhbXNpemUgbik7CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCB1bnNpZ25lZCBjaGFyICpzLCBz
dHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAg
ICBvc3RyZWFtJiB3cml0ZShjb25zdCBzaWduZWQgY2hhciAqcywgc3RyZWFtc2l6ZSBuKQogICAg
ICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgd3JpdGUo
Y29uc3Qgdm9pZCAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3Qg
Y2hhciopcywgbik7fQogICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFtcG9zKTsKICAgIG9zdHJlYW0m
IHNlZWtwKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxscCgpOwogICAg
b3N0cmVhbSYgZm9ybShjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIG9zdHJlYW0mIHZmb3Jt
KGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgIGFyZ3MpOwoKICAgIG9zdHJlYW0m
IG9wZXJhdG9yPDwoY2hhciBjKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgY2hh
ciBjKSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9y
PDwoc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3Ry
ZWFtJiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIgKnMpOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChj
b25zdCB1bnNpZ25lZCBjaGFyICpzKQoJeyByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciop
czsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBzaWduZWQgY2hhciAqcykKCXsgcmV0
dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwo
Y29uc3Qgdm9pZCAqcCk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGludCBuKTsKICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChs
b25nIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIG4pOwoKICAgIF9f
ZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIGxvbmcgbik7CiAgICBfX2V4dGVu
c2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIG4pOwoKICAgIG9z
dHJlYW0mIG9wZXJhdG9yPDwoc2hvcnQgbikge3JldHVybiBvcGVyYXRvcjw8KChpbnQpbik7fQog
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9y
PDwoKHVuc2lnbmVkIGludCluKTt9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChib29sIGIpIHsg
cmV0dXJuIG9wZXJhdG9yPDwoKGludCliKTsgfQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZG91
YmxlIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChmbG9hdCBuKSB7IHJldHVybiBvcGVyYXRv
cjw8KChkb3VibGUpbik7IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIG4p
OwoKCgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChfX29tYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1
bmMpKCp0aGlzKTsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChfX21hbmlwIGZ1bmMpIHsoKmZ1
bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc3RyZWFt
YnVmKik7CgoKCn07CgpjbGFzcyBpc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zCnsKICAgICAK
cHJvdGVjdGVkOgogICAgc2l6ZV90ICAgX2djb3VudDsKCiAgICBpbnQgX3NraXBfd3MoKTsKICBw
dWJsaWM6CiAgICBpc3RyZWFtKCk6IF9nY291bnQgKDApIHsgfQogICAgaXN0cmVhbShzdHJlYW1i
dWYqIHNiLCBvc3RyZWFtKnRpZWQ9IF9fbnVsbCApOwogICAgaXN0cmVhbSYgZ2V0KGNoYXIqIHB0
ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVk
IGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNo
YXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldChjaGFyJiBjKTsKICAgIGlz
dHJlYW0mIGdldCh1bnNpZ25lZCBjaGFyJiBjKSB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAg
ICBpc3RyZWFtJiBnZXRsaW5lKGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicp
OwogICAgaXN0cmVhbSYgZ2V0bGluZSh1bnNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIg
ZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsg
fQogICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBjaGFyJiBjKSAgeyByZXR1cm4gZ2V0KChjaGFyJilj
KTsgfQogICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVs
aW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBp
c3RyZWFtJiBnZXRsaW5lKHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAn
XG4nKQoJeyByZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0
cmVhbSYgcmVhZChjaGFyICpwdHIsIHN0cmVhbXNpemUgbik7CiAgICBpc3RyZWFtJiByZWFkKHVu
c2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFy
KilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiByZWFkKHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNp
emUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYg
cmVhZCh2b2lkICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciop
cHRyLCBuKTsgfQogICAgaXN0cmVhbSYgZ2V0KHN0cmVhbWJ1ZiYgc2IsIGNoYXIgZGVsaW0gPSAn
XG4nKTsKICAgIGlzdHJlYW0mIGdldHMoY2hhciAqKnMsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAg
IGludCBpcGZ4KGludCBuZWVkID0gMCkgewoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJp
dCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgKG5lZWQgPT0gMCB8
fCByZGJ1ZigpLT5pbl9hdmFpbCgpIDwgbmVlZCkpIF90aWUtPmZsdXNoKCk7CgkgIGlmICghbmVl
ZCAmJiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSkgcmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2Ug
cmV0dXJuIDE7Cgl9CiAgICB9CiAgICBpbnQgaXBmeDAoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNl
dChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllKSBf
dGllLT5mbHVzaCgpOwoJICBpZiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSByZXR1cm4gX3NraXBf
d3MoKTsKCSAgZWxzZSByZXR1cm4gMTsKCX0KICAgIH0KICAgIGludCBpcGZ4MSgpIHsgIAoJaWYg
KCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsK
CSAgaWYgKF90aWUgJiYgcmRidWYoKS0+aW5fYXZhaWwoKSA9PSAwKSBfdGllLT5mbHVzaCgpOwoJ
ICByZXR1cm4gMTsKCX0KICAgIH0KICAgIHZvaWQgaXNmeCgpIHsgIDsgfQogICAgaW50IGdldCgp
IHsgaWYgKCFpcGZ4MSgpKSByZXR1cm4gKC0xKSA7CgkJZWxzZSB7IGludCBjaCA9IF9zdHJidWYt
PnNidW1wYygpOwoJCSAgICAgICBpZiAoY2ggPT0gKC0xKSApIHNldChpb3M6OmVvZmJpdCk7CgkJ
ICAgICAgIGlzZngoKTsKCQkgICAgICAgcmV0dXJuIGNoOwoJCSAgICAgfSB9CiAgICBpbnQgcGVl
aygpOwogICAgc2l6ZV90ICAgZ2NvdW50KCkgeyByZXR1cm4gX2djb3VudDsgfQogICAgaXN0cmVh
bSYgaWdub3JlKGludCBuPTEsIGludCBkZWxpbSA9ICgtMSkgKTsKICAgIGludCBzeW5jICgpOwog
ICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtcG9zKTsKICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbW9m
ZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxsZygpOwogICAgaXN0cmVhbSYgcHV0YmFj
ayhjaGFyIGNoKSB7CglpZiAoZ29vZCgpICYmIF9zdHJidWYtPnNwdXRiYWNrYyhjaCkgPT0gKC0x
KSApIGNsZWFyKGlvczo6YmFkYml0KTsKCXJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiB1bmdl
dCgpIHsKCWlmIChnb29kKCkgJiYgX3N0cmJ1Zi0+c3VuZ2V0YygpID09ICgtMSkgKSBjbGVhcihp
b3M6OmJhZGJpdCk7CglyZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgc2Nhbihjb25zdCBjaGFy
ICpmb3JtYXQgLi4uKTsKICAgIGlzdHJlYW0mIHZzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19n
bnVjX3ZhX2xpc3QgIGFyZ3MpOwoKCgoKCgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyKik7
CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNoYXIqIHApIHsgcmV0dXJuIG9wZXJh
dG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyKnAp
IHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+
KGNoYXImIGMpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBjaGFyJiBjKSB7cmV0
dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVk
IGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQogICAgaXN0cmVhbSYgb3Bl
cmF0b3I+PihpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyYpOwoKICAgIF9fZXh0
ZW5zaW9uX18gaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nIGxvbmcmKTsKICAgIF9fZXh0ZW5zaW9u
X18gaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmKTsKCiAgICBpc3RyZWFt
JiBvcGVyYXRvcj4+KHNob3J0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGlu
dCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJik7CiAgICBpc3RyZWFt
JiBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0Jik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihi
b29sJik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihmbG9hdCYpOwogICAgaXN0cmVhbSYgb3Bl
cmF0b3I+Pihkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmKTsK
ICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oIF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyBy
ZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihfX2ltYW5pcCBmdW5jKSB7IHJl
dHVybiAoKmZ1bmMpKCp0aGlzKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzdHJlYW1idWYq
KTsKfTsKCmNsYXNzIGlvc3RyZWFtIDogcHVibGljIGlzdHJlYW0sIHB1YmxpYyBvc3RyZWFtCnsK
ICBwdWJsaWM6CiAgICBpb3N0cmVhbSgpIHsgfQogICAgaW9zdHJlYW0oc3RyZWFtYnVmKiBzYiwg
b3N0cmVhbSp0aWVkPSBfX251bGwgKTsKfTsKCmNsYXNzIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24g
OiBwdWJsaWMgaXN0cmVhbSB7CnB1YmxpYzoKICBfSU9faXN0cmVhbV93aXRoYXNzaWduJiBvcGVy
YXRvcj0oaXN0cmVhbSYpOwogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShfSU9f
aXN0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19j
YXN0PGlzdHJlYW0mPiAocmhzKSk7IH0KfTsKCmNsYXNzIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24g
OiBwdWJsaWMgb3N0cmVhbSB7CnB1YmxpYzoKICBfSU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVy
YXRvcj0ob3N0cmVhbSYpOwogIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShfSU9f
b3N0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19j
YXN0PG9zdHJlYW0mPiAocmhzKSk7IH0KfTsKCmV4dGVybiBfSU9faXN0cmVhbV93aXRoYXNzaWdu
IGNpbjsKIApleHRlcm4gX0lPX29zdHJlYW1fd2l0aGFzc2lnbiBjb3V0LCBjZXJyOwoKZXh0ZXJu
IF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gY2xvZwoKCgo7CgpleHRlcm4gaXN0cmVhbSYgbG9jayhp
c3RyZWFtJiBpbnMpOwpleHRlcm4gaXN0cmVhbSYgdW5sb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVy
biBvc3RyZWFtJiBsb2NrKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgdW5sb2NrKG9z
dHJlYW0mIG91dHMpOwoKc3RydWN0IElvc3RyZWFtX2luaXQgeyB9IDsgICAKCmlubGluZSBpb3Mm
IGRlYyhpb3MmIGkpCnsgaS5zZXRmKGlvczo6ZGVjLCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9j
dCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIGhleChpb3MmIGkpCnsgaS5zZXRmKGlvczo6aGV4
LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIG9j
dChpb3MmIGkpCnsgaS5zZXRmKGlvczo6b2N0LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7
IHJldHVybiBpOyB9Cn0gIAoKCiMgNiAiL3Vzci9pbmNsdWRlL2crKy9pb3N0cmVhbSIgMiAzCgoK
IyA4ICIuLi9pbmNsdWRlL1RhYmxlLmgiIDIKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBj
LWxpbnV4LWdudS8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQyICIvdXNyL2xpYi9n
Y2MtbGliL2k1ODYtcGMtbGludXgtZ251LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgojIDkg
Ii4uL2luY2x1ZGUvVGFibGUuaCIgMgoKIyAxICIuLi9pbmNsdWRlL3N1cHBvcnQuaCIgMQogCgoK
CgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgICBieXRlOwp0eXBlZGVmIHNob3J0IHVu
c2lnbmVkIGludCAgd29yZDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgIHVpbnQ7CgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKY2xhc3MgRGF0YQp7
CnB1YmxpYzoKCXZpcnR1YWwgfkRhdGEoKTsKCgl2aXJ0dWFsIHZvaWQgUmVjZWl2ZSh2b2lkKiwg
dWludCk7Cgl2aXJ0dWFsIHZvaWQgRmVlZFRvKERhdGEgKik7Cgl2aXJ0dWFsIHZvaWQgU3RvcFJl
Y2VpdmluZygpOwoJdmlydHVhbCB2b2lkIEJyZWFrKCk7Cn07Cgp0eXBlZGVmIERhdGEgTnVsbDsK
Cgpib29sIElzV2hpdGVTcGFjZShjaGFyIGMpOwpjaGFyICpTdHJpbmdOZXdlZFVwKGNoYXIgKnNy
Yyk7Cgp2b2lkICpBbGxvY01lbShzaXplX3Qgc2l6ZSk7CnZvaWQgRnJlZU1lbSh2b2lkICpkYXRh
KTsKdm9pZCAqUmVhbGxvY01lbSh2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSk7CgoKIAoKCgoKCmNs
YXNzIEZlZWRlckJhc2UgCnsKcHVibGljOgoJRmVlZGVyQmFzZSh1aW50IGJ1ZnNpemUgPSA0MDAg
KTsKCX5GZWVkZXJCYXNlKCk7CgkKCXZvaWQgU2V0RGVzdGluYXRpb24oRGF0YSAqZGF0YWMpCgkJ
e0Rlc3RpbmF0aW9uID0gZGF0YWM7fQoKcHJvdGVjdGVkOgkJCgl2b2lkIFNlbmRDaGFyKGNoYXIg
Yyk7Cgl2b2lkIER1bXBCdWZmZXJlZERhdGEoKTsKCiAgYnl0ZSAqRHN0OwogIHVpbnQgQnVmTGVu
OwogIHZvaWQgKkJ1ZmZlcjsKICBEYXRhICpEZXN0aW5hdGlvbjsKfTsKCgoKIAoKCmNsYXNzIEJ5
dGVEdW1wZXIgOiBwdWJsaWMgRmVlZGVyQmFzZSwgcHVibGljIERhdGEKewpwdWJsaWM6CglCeXRl
RHVtcGVyKERhdGEgKmRhdGFjID0gMCkKCQl7RGVzdGluYXRpb24gPSBkYXRhYzt9CgoJdm9pZCBS
ZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQgbGVuKTsKCXZvaWQgU3RvcFJlY2VpdmluZygpOwp9OwoK
CiMgMTAgIi4uL2luY2x1ZGUvVGFibGUuaCIgMgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2
LXBjLWxpbnV4LWdudS8yLjk1LjIvaW5jbHVkZS9uZXciIDEgMwogCiAKCgoKCiNwcmFnbWEgaW50
ZXJmYWNlICJuZXciCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8yLjk1
LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQyICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMt
bGludXgtZ251LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgojIDggIi91c3IvbGliL2djYy1s
aWIvaTU4Ni1wYy1saW51eC1nbnUvMi45NS4yL2luY2x1ZGUvbmV3IiAyIDMKCiMgMSAiL3Vzci9s
aWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8yLjk1LjIvaW5jbHVkZS9leGNlcHRpb24iIDEg
MwogCiAKCgoKCiNwcmFnbWEgaW50ZXJmYWNlICJleGNlcHRpb24iCgpleHRlcm4gIkMrKyIgewoK
bmFtZXNwYWNlIHN0ZCB7CgpjbGFzcyBleGNlcHRpb24gewpwdWJsaWM6CiAgZXhjZXB0aW9uICgp
IHsgfQogIHZpcnR1YWwgfmV4Y2VwdGlvbiAoKSB7IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdo
YXQgKCkgY29uc3Q7Cn07CgpjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbiB7
CnB1YmxpYzoKICBiYWRfZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgfmJhZF9leGNlcHRpb24g
KCkgeyB9Cn07Cgp0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVfaGFuZGxlcikgKCk7CnR5cGVkZWYg
dm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7Cgp0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVy
bWluYXRlICh0ZXJtaW5hdGVfaGFuZGxlcik7CnZvaWQgdGVybWluYXRlICgpIF9fYXR0cmlidXRl
X18gKChfX25vcmV0dXJuX18pKTsKdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkICh1
bmV4cGVjdGVkX2hhbmRsZXIpOwp2b2lkIHVuZXhwZWN0ZWQgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
bm9yZXR1cm5fXykpOwpib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbiAoKTsKCn0gIAoKfSAgCgoKIyA5
ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzIuOTUuMi9pbmNsdWRlL25ldyIg
MiAzCgoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQgewoKICBjbGFzcyBiYWRfYWxsb2Mg
OiBwdWJsaWMgZXhjZXB0aW9uIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdo
YXQoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICJiYWRfYWxsb2MiOyB9CiAgfTsKCiAgc3RydWN0
IG5vdGhyb3dfdCB7fTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CiAgdHlwZWRl
ZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyIChu
ZXdfaGFuZGxlcik7Cgp9ICAKCiAKdm9pZCAqb3BlcmF0b3IgbmV3IChzaXplX3QpIHRocm93IChz
dGQ6OmJhZF9hbGxvYyk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QpIHRocm93IChzdGQ6
OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICopIHRocm93KCk7CnZvaWQg
b3BlcmF0b3IgZGVsZXRlW10gKHZvaWQgKikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3IChz
aXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3
W10gKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9y
IGRlbGV0ZSAodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3Bl
cmF0b3IgZGVsZXRlW10gKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoK
IAppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkg
eyByZXR1cm4gcGxhY2U7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHNpemVfdCwgdm9p
ZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KfSAgCgoKIyAxMiAiLi4vaW5jbHVk
ZS9UYWJsZS5oIiAyCgogCgp0ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBCYXNlVGFibGUKewpwdWJs
aWM6CgkgCglCYXNlVGFibGUoKSAKCQk6IFRhYmxlKDApLCBUYWJsZUxlbmd0aCgwKSwgQWxsb2Nh
dGVkTGVuZ3RoKDApIHsgfQoKCVQgKlRhYmxlOwoJaW50IFRhYmxlTGVuZ3RoOwoJaW50IEFsbG9j
YXRlZExlbmd0aDsKfTsKCnRlbXBsYXRlPGNsYXNzIFQ+IGNsYXNzIEV4cG5UYWJsZSA6IHB1Ymxp
YyBCYXNlVGFibGU8VD4KewpwdWJsaWM6IAoJdm9pZCBVcFJlc2l6ZVRvRml0KGludCBsZW4pOwoJ
dm9pZCBEb3duUmVzaXplVG9GaXQoKTsKfTsKCnRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgRXhwblRh
YmxlPFQ+OjpVcFJlc2l6ZVRvRml0KGludCBsZW4pCnsKCSAKCWlmICggbGVuID4gQWxsb2NhdGVk
TGVuZ3RoICkKCXsKCQkgCgkJQWxsb2NhdGVkTGVuZ3RoID0gbGVuICogMjsKCQlpZiAoVGFibGUp
IHsKCQkJIAoJCQlUICpuZXdUYWJsZSA9IChUKikgbWFsbG9jKHNpemVvZihUKSpBbGxvY2F0ZWRM
ZW5ndGgpOwoJCQltZW1jcHkobmV3VGFibGUsIFRhYmxlLCBzaXplb2YoVCkqVGFibGVMZW5ndGgp
OwoKCQkJIAoJCQlmcmVlKFRhYmxlKTsKCQkJVGFibGUgPSBuZXdUYWJsZTsKCQl9CgkJZWxzZSB7
CgkJCSAKCQkJVGFibGUgPSAoVCopIG1hbGxvYyhzaXplb2YoVCkqQWxsb2NhdGVkTGVuZ3RoKTsK
CQl9Cgl9Cn0KCnRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgRXhwblRhYmxlPFQ+OjpEb3duUmVzaXpl
VG9GaXQoKQp7CgkgCgoJaWYgKCBUYWJsZUxlbmd0aCA8IEFsbG9jYXRlZExlbmd0aCAvIDQgKSB7
CgkJaWYgKCBUYWJsZUxlbmd0aCA9PSAwICkgewoJCQkgCgkJCUFsbG9jYXRlZExlbmd0aCA9IDA7
CgkJCWZyZWUoVGFibGUpOwoJCQlUYWJsZSA9IDA7CgkJfQoJCWVsc2UgewoJCQkgCgkJCUFsbG9j
YXRlZExlbmd0aCA9IFRhYmxlTGVuZ3RoICogMjsKCgkJCSAKCQkJVCAqbmV3VGFibGUgPSAoVCop
IG1hbGxvYyhzaXplb2YoVCkqQWxsb2NhdGVkTGVuZ3RoKTsKCQkJbWVtY3B5KG5ld1RhYmxlLCBU
YWJsZSwgc2l6ZW9mKFQpKlRhYmxlTGVuZ3RoKTsKCgkJCSAKCQkJZnJlZShUYWJsZSk7CgkJCVRh
YmxlID0gbmV3VGFibGU7CgkJfQoJfQp9Cgp0ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBMaW5lYXJU
YWJsZSA6IHB1YmxpYyBCYXNlVGFibGU8VD4KewpwdWJsaWM6IAoJdm9pZCBVcFJlc2l6ZVRvRml0
KGludCBsZW4pOwoJdm9pZCBEb3duUmVzaXplVG9GaXQoKTsKfTsKCnRlbXBsYXRlPGNsYXNzIFQ+
IHZvaWQgTGluZWFyVGFibGU8VD46OlVwUmVzaXplVG9GaXQoaW50IGxlbikKewoJaWYgKFRhYmxl
KSB7CgkJIAoJCUFsbG9jYXRlZExlbmd0aCA9IGxlbjsKCgkJIAoJCVQgKm5ld1RhYmxlID0gKFQq
KSBtYWxsb2Moc2l6ZW9mKFQpKkFsbG9jYXRlZExlbmd0aCk7CgkJbWVtY3B5KG5ld1RhYmxlLCBU
YWJsZSwgc2l6ZW9mKFQpKlRhYmxlTGVuZ3RoKTsKCgkJIAoJCWZyZWUoVGFibGUpOwoJCVRhYmxl
ID0gbmV3VGFibGU7Cgl9CgllbHNlIHsKCQkgCgkJQWxsb2NhdGVkTGVuZ3RoID0gbGVuOwoKCQkg
CgkJVGFibGUgPSAoVCopIG1hbGxvYyhzaXplb2YoVCkqQWxsb2NhdGVkTGVuZ3RoKTsKCX0KfQoK
dGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCBMaW5lYXJUYWJsZTxUPjo6RG93blJlc2l6ZVRvRml0KCkK
ewoJaWYgKCBUYWJsZUxlbmd0aCA9PSAwICkgewoJCSAKCQlBbGxvY2F0ZWRMZW5ndGggPSAwOwoJ
CSAKCQlmcmVlKFRhYmxlKTsKCQlUYWJsZSA9IDA7Cgl9CgllbHNlIHsKCQkgCgkJQWxsb2NhdGVk
TGVuZ3RoID0gVGFibGVMZW5ndGg7CgoJCSAKCQlUICpuZXdUYWJsZSA9IChUKikgbWFsbG9jKHNp
emVvZihUKSpBbGxvY2F0ZWRMZW5ndGgpOwoJCW1lbWNweShuZXdUYWJsZSwgVGFibGUsIHNpemVv
ZihUKSpUYWJsZUxlbmd0aCk7CgkJCgkJIAoJCWZyZWUoVGFibGUpOwoJCVRhYmxlID0gbmV3VGFi
bGU7Cgl9Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIGludCBGaXhlZFNpemU+IGNsYXNzIENvbnN0VGFi
bGUgOiBwdWJsaWMgQmFzZVRhYmxlPFQ+CnsKcHVibGljOiAKCXZvaWQgVXBSZXNpemVUb0ZpdChp
bnQgbGVuKTsKCXZvaWQgRG93blJlc2l6ZVRvRml0KCkge307Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBU
LCBpbnQgRml4ZWRTaXplPiB2b2lkIENvbnN0VGFibGU8VCwgRml4ZWRTaXplPjo6VXBSZXNpemVU
b0ZpdChpbnQgbGVuKSAKewoJaWYgKCEoICBsZW4gPD0gRml4ZWRTaXplICApKSB7IGNlcnIgPDwg
IkFzc2VydGlvbiBmYWlsZWQ6IGxpbmUgIiA8PCAxNDUgPDwgIiBmaWxlICIgPDwgIi4uL2luY2x1
ZGUvVGFibGUuaCIgPDwgIlxuIjsgYWJvcnQoKTsgfSA7CglpZiAoIFRhYmxlID09IDAgKSB7CgkJ
VGFibGUgPSAoVCopIG1hbGxvYyggc2l6ZW9mKFQpICogRml4ZWRTaXplICk7CgkJQWxsb2NhdGVk
TGVuZ3RoID0gRml4ZWRTaXplOwoJfQp9CgoKCiMgNyAiLi4vaW5jbHVkZS9Db21wYXJlLmgiIDIK
CgogCgoKc3RydWN0IFN0cmluZ0NvbXBhcmUKewoJc3RhdGljIGlubGluZSBpbnQgQ29tcGFyZShj
b25zdCBjaGFyICprMSwgY29uc3QgY2hhciAqazIpCgkJeyByZXR1cm4gc3RyY21wKGsxLCBrMik7
IH0KfTsKCiAKCgp0ZW1wbGF0ZTxjbGFzcyBUPiBzdHJ1Y3QgT3JkaW5hbENvbXBhcmUKewoJc3Rh
dGljIGlubGluZSBpbnQgQ29tcGFyZShjb25zdCBUIGsxLCBjb25zdCBUIGsyKQoJewoJCWlmIChr
MSA8IGsyKQoJCQlyZXR1cm4gLTE7CgkJZWxzZSBpZiAoazEgPiBrMikKCQkJcmV0dXJuIDE7CgkJ
ZWxzZQoJCQlyZXR1cm4gMDsKCX0KfTsKCiAKCgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBDb21w
YXJlQ2xhc3M+IHN0cnVjdCBUYWJsZUNvbXBhcmUKewoJc3RhdGljIGlubGluZSBpbnQgQ29tcGFy
ZShjb25zdCBCYXNlVGFibGU8VD4gJnQxLCBjb25zdCBCYXNlVGFibGU8VD4gJnQyKQoJewoJCWlm
ICggdDEuVGFibGVMZW5ndGggPCB0Mi5UYWJsZUxlbmd0aCApCgkJCXJldHVybiAtMTsKCQllbHNl
IGlmICggdDEuVGFibGVMZW5ndGggPiB0Mi5UYWJsZUxlbmd0aCApCgkJCXJldHVybiAxOwoJCWVs
c2UKCQl7CgkJCVQgKmkxID0gdDEuVGFibGUsICppMiA9IHQyLlRhYmxlOwoJCQlpbnQgbGVuID0g
dDEuVGFibGVMZW5ndGgsIGNtcFJlc3VsdDsKCQkJZm9yICggaW50IHBvcyA9IDA7IHBvcyA8IGxl
bjsKCQkJCQlwb3MgKz0gMSwgaTEgKz0gMSwgaTIgKz0gMSApCgkJCXsKCQkJCWNtcFJlc3VsdCA9
IENvbXBhcmVDbGFzczo6Q29tcGFyZSgqaTEsICppMik7CgkJCQlpZiAoIGNtcFJlc3VsdCAhPSAw
ICkKCQkJCQlyZXR1cm4gY21wUmVzdWx0OwoJCQl9CgkJCXJldHVybiAwOwoJCX0KCX0KfTsKCgoj
IDEwICIuLi9pbmNsdWRlL1ZlY3RvclNldC5oIiAyCgojIDEgIi4uL2luY2x1ZGUvVmVjdG9yLmgi
IDEKIAoKCgoKCgoKCgoKIAoKCnRlbXBsYXRlIDwKCQkJY2xhc3MgVCwKCQkJY2xhc3MgVGFibGVU
ID0gRXhwblRhYmxlPFQ+CgkJPiBjbGFzcyBWZWN0b3IgOiBwdWJsaWMgVGFibGVUCnsKcHVibGlj
OgoJIAoJVmVjdG9yKCkge30KCgkgCglWZWN0b3IoY29uc3QgVmVjdG9yICZ2KTsKCgkgCglWZWN0
b3IoIGludCBzaXplICkgeyBTZXRBcyggMCwgc2l6ZSApOyB9CgoJIAoJflZlY3RvcigpIHsgRW1w
dHkoKTsgfQoKCSAKCXZvaWQgRW1wdHkoKTsKCgkgCiAJaW50IE1ha2VSYXdTcGFjZUZvcihpbnQg
cG9zLCBpbnQgbGVuKTsKCXZvaWQgSW5zZXJ0KGludCBwb3MsIGNvbnN0IFQgJnZhbCkgICB7IElu
c2VydChwb3MsICZ2YWwsIDEpOyB9CgkgCgl2b2lkIEluc2VydChpbnQgcG9zLCBjb25zdCBUICp2
YWwsIGludCBsZW4pOwoJdm9pZCBJbnNlcnQoaW50IHBvcywgY29uc3QgVmVjdG9yICZ2KSAgIHsg
SW5zZXJ0KHBvcywgdi5UYWJsZSwgdi5UYWJsZUxlbmd0aCk7IH0KCgkgCgl2b2lkIERlbGV0ZShp
bnQgcG9zKSAgICAgICAgICAgICAgeyBEZWxldGUocG9zLCAxKTsgfQoJdm9pZCBEZWxldGUoaW50
IHBvcywgaW50IGxlbik7CgoJIAoJdm9pZCBPdmVyd3JpdGUoaW50IHBvcywgY29uc3QgVCAmdmFs
KSAgIHsgT3ZlcndyaXRlKHBvcywgJnZhbCwgMSk7IH0KCSAKCXZvaWQgT3ZlcndyaXRlKGludCBw
b3MsIGNvbnN0IFQgKnZhbCwgaW50IGxlbik7Cgl2b2lkIE92ZXJ3cml0ZShpbnQgcG9zLCBjb25z
dCBWZWN0b3IgJnYpCgkJCXsgT3ZlcndyaXRlKCBwb3MsIHYuVGFibGUsIHYuVGFibGVMZW5ndGgg
KTsgfQoKCSAKCXZvaWQgU2V0QXMoY29uc3QgVCAmdmFsKSAgICAgICAgICAgICAgICB7IFNldEFz
KCZ2YWwsIDEpOyB9CgkgCgl2b2lkIFNldEFzKGNvbnN0IFQgKnZhbCwgaW50IGxlbik7Cgl2b2lk
IFNldEFzKGNvbnN0IFZlY3RvciAmdikgICAgICAgICAgICAgeyBTZXRBcyh2LlRhYmxlLCB2LlRh
YmxlTGVuZ3RoKTsgfQoKCSAKCXZvaWQgQXBwZW5kKGNvbnN0IFQgJnZhbCkgICAgICAgICAgICAg
ICB7IE92ZXJ3cml0ZShUYWJsZUxlbmd0aCwgJnZhbCwgMSk7IH0KCSAKCXZvaWQgQXBwZW5kKGNv
bnN0IFQgKnZhbCwgaW50IGxlbikgICAgICB7IE92ZXJ3cml0ZShUYWJsZUxlbmd0aCwgdmFsLCBs
ZW4pOyB9Cgl2b2lkIEFwcGVuZChjb25zdCBWZWN0b3IgJnYpICAgICAgICAgIAoJCQl7IE92ZXJ3
cml0ZShUYWJsZUxlbmd0aCwgdi5UYWJsZSwgdi5UYWJsZUxlbmd0aCk7IH0KCn07CgogCgoKCgoK
CnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRhYmxlVD4gVmVjdG9yPFQsIFRhYmxlVD46OgoJCQlW
ZWN0b3IoY29uc3QgVmVjdG9yICZ2KQp7CglUYWJsZUxlbmd0aCA9IHYuVGFibGVMZW5ndGg7CglB
bGxvY2F0ZWRMZW5ndGggPSB2LkFsbG9jYXRlZExlbmd0aDsKCWlmICggQWxsb2NhdGVkTGVuZ3Ro
ID4gMCApCgl7CgkJVGFibGUgPSAoVCopbWFsbG9jKCBzaXplb2YoVCkgKiBBbGxvY2F0ZWRMZW5n
dGggKTsKCQlUICpkc3QgPSBUYWJsZSwgKnNyYyA9IHYuVGFibGU7CgkJZm9yIChpbnQgcG9zID0g
MDsgcG9zIDwgVGFibGVMZW5ndGg7CgkJCQlwb3MgKz0gMSwgZHN0ICs9IDEsIHNyYyArPSAxICkK
CQkJbmV3KGRzdCkgVCgqc3JjKTsKCX0KCWVsc2UKCQlUYWJsZSA9IDA7Cn0KCiAKCgoKCgp0ZW1w
bGF0ZTxjbGFzcyBULCBjbGFzcyBUYWJsZVQ+IHZvaWQgVmVjdG9yPFQsIFRhYmxlVD46OgoJCQlF
bXB0eSgpCnsKCWlmIChUYWJsZSkgewoJCSAKCQlUICpwb3MgPSBUYWJsZTsKCQlmb3IgKCBpbnQg
aSA9IDA7IGkgPCBUYWJsZUxlbmd0aDsgcG9zKyssIGkrKyApCgkJCXBvcy0+flQoKTsKCgkJIAoJ
CWZyZWUoVGFibGUpOwoJCVRhYmxlID0gMDsKCQlUYWJsZUxlbmd0aCA9IEFsbG9jYXRlZExlbmd0
aCA9IDA7Cgl9Cn0KCiAKCgoKCgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUYWJsZVQ+IHZvaWQg
VmVjdG9yPFQsIFRhYmxlVD46OgoJCQlTZXRBcyhjb25zdCBUICpkYXRhLCBpbnQgbGVuKQp7Cgkg
CglUICpwb3MgPSBUYWJsZTsKCWZvciAoIGludCBpID0gMDsgaSA8IFRhYmxlTGVuZ3RoOyBwb3Mr
KywgaSsrICkKCQlwb3MtPn5UKCk7CgoJIAoJaWYgKCBsZW4gPCBUYWJsZUxlbmd0aCApIHsKCQlU
YWJsZUxlbmd0aCA9IGxlbjsJCgkJRG93blJlc2l6ZVRvRml0KCk7Cgl9CgkgCgllbHNlIGlmICgg
bGVuID4gVGFibGVMZW5ndGggKSB7CgkJVXBSZXNpemVUb0ZpdChsZW4pOwoJCVRhYmxlTGVuZ3Ro
ID0gbGVuOwoJfQoJCgkgCglUICpkc3QgPSBUYWJsZTsKCWNvbnN0IFQgKnNyYyA9IGRhdGE7Cglp
ZiAoIHNyYyA9PSAwICkgewoJCSAKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBsZW47IGkrKywgZHN0
KysgKQoJCQluZXcoZHN0KSBUKCk7Cgl9CgllbHNlIHsKCQkgCgkJZm9yICggaW50IGkgPSAwOyBp
IDwgbGVuOyBpKyssIGRzdCsrLCBzcmMrKyApCgkJCW5ldyhkc3QpIFQoKnNyYyk7Cgl9Cn0KCiAK
CgoKCgoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVGFibGVUPiB2b2lkIFZlY3RvcjxULCBUYWJs
ZVQ+OjoKCQlPdmVyd3JpdGUoaW50IHBvcywgY29uc3QgVCAqZGF0YSwgaW50IGxlbikKewoJaW50
IGVuZFBvczsKCVQgKml0ZW07CgoJIAoKCglpZiAocG9zIDwgMCkKCQlwb3MgPSBUYWJsZUxlbmd0
aCArIHBvczsKCgkgCgoJZW5kUG9zID0gcG9zICsgbGVuOwoKCSAKCWlmICggZW5kUG9zID4gVGFi
bGVMZW5ndGggKQoJCVVwUmVzaXplVG9GaXQoZW5kUG9zKTsKCgkgCglpdGVtID0gVGFibGUgKyBw
b3M7Cglmb3IgKCBpbnQgaSA9IHBvczsgaSA8IFRhYmxlTGVuZ3RoICYmIGkgPCBlbmRQb3M7IGkg
Kz0gMSwgaXRlbSArPSAxICkKCQlpdGVtLT5+VCgpOwoJCQoJIAoJaXRlbSA9IFRhYmxlICsgVGFi
bGVMZW5ndGg7Cglmb3IgKCBpbnQgaSA9IFRhYmxlTGVuZ3RoOyBpIDwgcG9zOyBpICs9IDEsIGl0
ZW0gKz0gMSApCgkJbmV3KGl0ZW0pIFQoKTsKCgkgCglUYWJsZUxlbmd0aCA9IGVuZFBvczsKCQoJ
IAoJVCAqZHN0ID0gVGFibGUgKyBwb3M7Cgljb25zdCBUICpzcmMgPSBkYXRhOwoJaWYgKCBzcmMg
PT0gMCApIHsKCQkgCgkJZm9yICggaW50IGkgPSAwOyBpIDwgbGVuOyBpKyssIGRzdCsrICkKCQkJ
bmV3KGRzdCkgVCgpOwoJfQoJZWxzZSB7CgkJIAoJCWZvciAoIGludCBpID0gMDsgaSA8IGxlbjsg
aSsrLCBkc3QrKywgc3JjKysgKQoJCQluZXcoZHN0KSBUKCpzcmMpOwoJfQp9CgoKIAoKCgoKCnRl
bXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRhYmxlVD4gdm9pZCBWZWN0b3I8VCwgVGFibGVUPjo6CgkJ
RGVsZXRlKGludCBwb3MsIGludCBsZW4pCnsKCWludCBuZXdMZW4sIGxlblRvU2xpZGVPdmVyLCBl
bmRQb3M7CglUICpkc3QsICppdGVtOwoKCSAKCgoJaWYgKHBvcyA8IDApCgkJcG9zID0gVGFibGVM
ZW5ndGggKyBwb3M7CgoJIAoJZW5kUG9zID0gcG9zICsgbGVuOwoKCSAKCW5ld0xlbiA9IFRhYmxl
TGVuZ3RoIC0gbGVuOwoKCSAKCWRzdCA9IFRhYmxlICsgcG9zOwoKCSAKCWl0ZW0gPSBkc3Q7Cglm
b3IgKCBpbnQgaSA9IDA7IGkgPCBsZW47IGkgKz0gMSwgaXRlbSArPSAxICkKCQlpdGVtLT5+VCgp
OwoJCgkgCglsZW5Ub1NsaWRlT3ZlciA9IFRhYmxlTGVuZ3RoIC0gZW5kUG9zOwkKCWlmICggbGVu
ID4gMCAmJiBsZW5Ub1NsaWRlT3ZlciA+IDAgKQoJCW1lbW1vdmUoZHN0LCBkc3QgKyBsZW4sIHNp
emVvZihUKSpsZW5Ub1NsaWRlT3Zlcik7CgoJIAoJVGFibGVMZW5ndGggPSBuZXdMZW47CgoJIAoJ
RG93blJlc2l6ZVRvRml0KCApOwp9CgoKIAoKCgoKCgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBU
YWJsZVQ+IHZvaWQgVmVjdG9yPFQsIFRhYmxlVD46OgoJCUluc2VydChpbnQgcG9zLCBjb25zdCBU
ICpkYXRhLCBpbnQgbGVuKQp7CgkgCgoKCWlmIChwb3MgPCAwKQoJCXBvcyA9IFRhYmxlTGVuZ3Ro
ICsgcG9zOwoJCglpbnQgbmV3TGVuID0gTWFrZVJhd1NwYWNlRm9yKHBvcywgbGVuKTsKCgkgCglU
ICpkc3QgPSBUYWJsZSArIHBvczsKCWNvbnN0IFQgKnNyYyA9IGRhdGE7CglpZiAoIHNyYyA9PSAw
ICkgewoJCSAKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBsZW47IGkrKywgZHN0KysgKQoJCQluZXco
ZHN0KSBUKCk7Cgl9CgllbHNlIHsKCQkgCgkJZm9yICggaW50IGkgPSAwOyBpIDwgbGVuOyBpKyss
IGRzdCsrLCBzcmMrKyApCgkJCW5ldyhkc3QpIFQoKnNyYyk7Cgl9CgoJIAoJVGFibGVMZW5ndGgg
PSBuZXdMZW47Cn0KCiAKCgoKCgoKCgoKCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRhYmxlVD4g
aW50IFZlY3RvcjxULCBUYWJsZVQ+OjoKCQlNYWtlUmF3U3BhY2VGb3IoaW50IHBvcywgaW50IGxl
bikKewoJIAoJaW50IG5ld0xlbjsKCWlmIChwb3MgPj0gVGFibGVMZW5ndGgpCgkJbmV3TGVuID0g
cG9zICsgbGVuOwoJZWxzZQoJCW5ld0xlbiA9IFRhYmxlTGVuZ3RoICsgbGVuOwoJVXBSZXNpemVU
b0ZpdCggbmV3TGVuICk7CgoJIAoJVCAqaXRlbSA9IFRhYmxlICsgVGFibGVMZW5ndGg7Cglmb3Ig
KCBpbnQgaSA9IFRhYmxlTGVuZ3RoOyBpIDwgcG9zOyBpICs9IDEsIGl0ZW0gKz0gMSApCgkJbmV3
KGl0ZW0pIFQoKTsKCgkgCglpZiAoIGxlbiA+IDAgJiYgcG9zIDwgVGFibGVMZW5ndGggKSB7CgkJ
bWVtbW92ZShUYWJsZSArIHBvcyArIGxlbiwgVGFibGUgKyBwb3MsCgkJCXNpemVvZihUKSooVGFi
bGVMZW5ndGgtcG9zKSk7Cgl9CgoJcmV0dXJuIG5ld0xlbjsKfQoJCgoKCiMgMTEgIi4uL2luY2x1
ZGUvVmVjdG9yU2V0LmgiIDIKCgoKdGVtcGxhdGUKCQk8CgkJCWNsYXNzIEtleVQsCgkJCWNsYXNz
IENvbXBhcmUsCgkJCWNsYXNzIFRhYmxlVCA9IEV4cG5UYWJsZTxLZXlUPgoJCT4KCQljbGFzcyBW
ZWN0b3JTZXQKCQkJCTogcHVibGljIFZlY3RvcjxLZXlULCBUYWJsZVQ+CnsKcHVibGljOgoJdHlw
ZWRlZiBWZWN0b3I8S2V5VCwgVGFibGVUPiBCYXNlVHlwZTsKCglpbnQgSW5zZXJ0KGNvbnN0IEtl
eVQgJnZhbCkgeyByZXR1cm4gU2V0KHZhbCk7IH0KCUtleVQgKkZpbmQoY29uc3QgS2V5VCAmdmFs
KSB7IHJldHVybiBkb0ZpbmQodmFsKTsgfQoKCWludCBTZXQoY29uc3QgVmVjdG9yU2V0PEtleVQs
IENvbXBhcmUsIFRhYmxlVD4gJm90aGVyU2V0KTsKCWludCBTZXQoY29uc3QgS2V5VCAmdmFsKTsK
CWludCBVblNldChjb25zdCBLZXlUICZ2YWwpOwoJaW50IElzU2V0KGNvbnN0IEtleVQgJnZhbCk7
CgoJdm9pZCBVblNldEFsbCgpCgkJeyBCYXNlVHlwZTo6RW1wdHkoKTsgfQoKCUtleVQgKkxhc3RG
b3VuZDsKcHJpdmF0ZToKCUtleVQgKmRvRmluZChjb25zdCBLZXlUICZ2YWwpOwp9OwoKdGVtcGxh
dGU8IGNsYXNzIEtleVQsCgkJCWNsYXNzIENvbXBhcmUsCgkJCWNsYXNzIFRhYmxlVCA+CktleVQg
KlZlY3RvclNldDxLZXlULCBDb21wYXJlLCBUYWJsZVQ+Ojpkb0ZpbmQoY29uc3QgS2V5VCAmdmFs
KQp7CglLZXlUICpsb3dlciwgKm1pZCwgKnVwcGVyOwoJaW50IGtleVJlbGF0aW9uOwoKCWlmICgh
IFRhYmxlKQoJCXJldHVybiAwOwoKCWxvd2VyID0gVGFibGU7Cgl1cHBlciA9IFRhYmxlICsgVGFi
bGVMZW5ndGggLSAxOwoJd2hpbGUgKDEpIHsKCQlpZiAoIHVwcGVyIDwgbG93ZXIgKQoJCQlyZXR1
cm4gMDsKCgkJbWlkID0gbG93ZXIgKyAoICh1cHBlci1sb3dlcikgLyAyKTsKCQkKCQlrZXlSZWxh
dGlvbiA9IENvbXBhcmU6OkNvbXBhcmUoIHZhbCwgKm1pZCApOwoJCWlmICgga2V5UmVsYXRpb24g
PCAwICkKCQkJdXBwZXIgPSBtaWQgLSAxOwoJCWVsc2UgaWYgKCBrZXlSZWxhdGlvbiA+IDAgKQoJ
CQlsb3dlciA9IG1pZCArIDE7CgkJZWxzZSAgIHsKCQkJTGFzdEZvdW5kID0gbWlkOwoJCQlyZXR1
cm4gbWlkOwoJCX0KCX0KfQoKCnRlbXBsYXRlPCBjbGFzcyBLZXlULAoJCQljbGFzcyBDb21wYXJl
LAoJCQljbGFzcyBUYWJsZVQgPgppbnQgVmVjdG9yU2V0PEtleVQsIENvbXBhcmUsIFRhYmxlVD46
OklzU2V0KGNvbnN0IEtleVQgJnZhbCkKewoJS2V5VCAqcG9zID0gZG9GaW5kKHZhbCk7CgoJaWYg
KHBvcyAhPSAwKQoJCXJldHVybiAxIDsKCWVsc2UKCQlyZXR1cm4gMCA7Cn0KCnRlbXBsYXRlPCBj
bGFzcyBLZXlULAoJCQljbGFzcyBDb21wYXJlLAoJCQljbGFzcyBUYWJsZVQgPgppbnQgVmVjdG9y
U2V0PEtleVQsIENvbXBhcmUsIFRhYmxlVD46OlVuU2V0KGNvbnN0IEtleVQgJnZhbCkKewoJS2V5
VCAqcG9zID0gZG9GaW5kKHZhbCk7CglpZiAocG9zICE9IDApIHsKCQlCYXNlVHlwZTo6RGVsZXRl
KHBvcyAtIFRhYmxlKTsKCQlyZXR1cm4gMSA7Cgl9CgllbHNlCgkJcmV0dXJuIDAgOwp9Cgp0ZW1w
bGF0ZTwgY2xhc3MgS2V5VCwKCQkJY2xhc3MgQ29tcGFyZSwKCQkJY2xhc3MgVGFibGVUID4KaW50
IFZlY3RvclNldDxLZXlULCBDb21wYXJlLCBUYWJsZVQ+OjpTZXQoY29uc3QgS2V5VCAmdmFsKQp7
CglLZXlUICpsb3dlciwgKm1pZCwgKnVwcGVyOwoJaW50IGtleVJlbGF0aW9uLCBpbnNlcnRQb3M7
CgoJaWYgKCEgVGFibGUpIHsKCQkgCgkJbG93ZXIgPSBUYWJsZTsKCQlnb3RvIEluc2VydDsKCX0K
Cglsb3dlciA9IFRhYmxlOwoJdXBwZXIgPSBUYWJsZSArIFRhYmxlTGVuZ3RoIC0gMTsKCXdoaWxl
ICgxKQoJewoJCWlmICggdXBwZXIgPCBsb3dlciApIHsKCQkJIAoJCQlnb3RvIEluc2VydDsKCQl9
CgoJCW1pZCA9IGxvd2VyICsgKCAodXBwZXItbG93ZXIpIC8gMik7CgkJCgkJa2V5UmVsYXRpb24g
PSBDb21wYXJlOjpDb21wYXJlKCB2YWwsICptaWQgKTsKCQlpZiAoIGtleVJlbGF0aW9uIDwgMCAp
CgkJCXVwcGVyID0gbWlkIC0gMTsKCQllbHNlIGlmICgga2V5UmVsYXRpb24gPiAwICkKCQkJbG93
ZXIgPSBtaWQgKyAxOwoJCWVsc2UgICB7CgkJCUxhc3RGb3VuZCA9IG1pZDsKCQkJcmV0dXJuIDAg
OwoJCX0KCX0KCkluc2VydDoKICAgICAKICAgIGluc2VydFBvcyA9IGxvd2VyIC0gVGFibGU7Cgog
ICAgIAogICAgQmFzZVR5cGU6Okluc2VydChpbnNlcnRQb3MsIHZhbCk7CgoJIAoJTGFzdEZvdW5k
ID0gVGFibGUgKyBpbnNlcnRQb3M7CiAgICAKICAgIHJldHVybiAxIDsgCn0KCnRlbXBsYXRlPCBj
bGFzcyBLZXlULAoJCQljbGFzcyBDb21wYXJlLAoJCQljbGFzcyBUYWJsZVQgPgppbnQgVmVjdG9y
U2V0PEtleVQsIENvbXBhcmUsIFRhYmxlVD46OgoJCVNldChjb25zdCBWZWN0b3JTZXQ8S2V5VCwg
Q29tcGFyZSwgVGFibGVUPiAmb3RoZXJTZXQpCnsKCUtleVQgKm90aGVySXRlbSA9IG90aGVyU2V0
LlRhYmxlOwoJaW50IG90aGVyTGVuID0gb3RoZXJTZXQuVGFibGVMZW5ndGg7CgoKCWZvciAoaW50
IGkgPSAwOyBpIDwgb3RoZXJMZW47IGkrKywgb3RoZXJJdGVtKyspCgkJU2V0KCpvdGhlckl0ZW0p
OwoKCXJldHVybiAxIDsKfQoKCiMgNyAiLi4vaW5jbHVkZS9Gc21CYXNlVmsuaCIgMgoKCiMgMSAi
Li4vaW5jbHVkZS9BVkxUcmVlLmgiIDEKIAoKCgoKCgoKCgogCgoKdGVtcGxhdGU8Y2xhc3MgS2V5
VCwgY2xhc3MgVmFsdWVUPiBzdHJ1Y3QgQVZMTm9kZQp7CglBVkxOb2RlKEFWTE5vZGUgKnBhcmVu
dCwgS2V5VCAma2V5LCBWYWx1ZVQgJnZhbCkgOgoJCUxlZnQoMCksIFJpZ2h0KDApLCBQYXJlbnQo
MCksIEhlaWdodCgxKSwKCQlLZXkoa2V5KSwgVmFsdWUodmFsKSB7IH0KCglBVkxOb2RlICpMZWZ0
LCAqUmlnaHQsICpQYXJlbnQ7CglpbnQgSGVpZ2h0OwoJS2V5VCBLZXk7CglWYWx1ZVQgVmFsdWU7
Cn07CgogCgoKdGVtcGxhdGU8Y2xhc3MgS2V5VCwgY2xhc3MgVmFsdWVULCBjbGFzcyBDb21wYXJl
PiBjbGFzcyBBVkxUcmVlCnsKcHVibGljOgoJdHlwZWRlZiBBVkxOb2RlPEtleVQsIFZhbHVlVD4g
Tm9kZVR5cGU7CglBVkxUcmVlKCkKCQl7IEhlYWQgPSBMYXN0Rm91bmQgPSAwOyBOb2RlQ291bnQg
PSAwOyB9CgoJfkFWTFRyZWUoKQoJCXsgRW1wdHkoKTsgfQoKCXZvaWQgUHJpbnQoKQoJCXtkb1By
aW50VHJlZShIZWFkLCAwKTt9CgoJaW50IEluc2VydChLZXlUICZrZXksIFZhbHVlVCAmdmFsKTsK
CWludCBGaW5kKEtleVQgJmtleSwgVmFsdWVUICZyZXN1bHQpOwoJaW50IEZpbmQoS2V5VCAma2V5
KTsKCglpbnQgU2V0TGFzdEZvdW5kKFZhbHVlVCAmdmFsKTsKCWludCBHZXRMYXN0Rm91bmQoVmFs
dWVUICZyZXN1bHQpOwoKCWludCBSZW1vdmUoS2V5VCAma2V5KTsKCWludCBSZW1vdmVMYXN0Rm91
bmQoKTsKCgl2b2lkIEVtcHR5KCk7CgoJIAoJIAoJIAoJIAoJdm9pZCBGcmVlQ2hpbGRyZW5PZihO
b2RlVHlwZSAqbik7CgoJTm9kZVR5cGUgKlJlYmFsYW5jZShOb2RlVHlwZSAqc3RhcnQpOwoJdm9p
ZCBSZWNhbGN1bGF0ZUhlaWdodHMoTm9kZVR5cGUgKnN0YXJ0KTsKCU5vZGVUeXBlICpkb0ZpbmQo
S2V5VCAma2V5KTsKCU5vZGVUeXBlICpGaW5kRmlyc3RVbmJhbGFuY2VkR1AoTm9kZVR5cGUgKnN0
YXJ0KTsKCU5vZGVUeXBlICpGaW5kRmlyc3RVbmJhbGFuY2VkTm9kZShOb2RlVHlwZSAqc3RhcnQp
OwoJdm9pZCBkb1JlbW92ZShOb2RlVHlwZSAqbm9kZSk7Cgl2b2lkIFJlcGxhY2VOb2RlKE5vZGVU
eXBlICpub2RlLCBOb2RlVHlwZSAqcmVwbGFjZW1lbnQpOwoJdm9pZCBSZW1vdmVOb2RlKE5vZGVU
eXBlICpub2RlLCBOb2RlVHlwZSAqZmlsbGVyKTsKCglpbnQgTm9kZUNvdW50OwoJTm9kZVR5cGUg
KkhlYWQ7CglOb2RlVHlwZSAqTGFzdEZvdW5kOwp9OwoKdGVtcGxhdGU8Y2xhc3MgS2V5VCwKCQkJ
Y2xhc3MgVmFsdWVULCBjbGFzcyBDb21wYXJlPgppbnQgQVZMVHJlZTxLZXlULCBWYWx1ZVQsIENv
bXBhcmU+OjpGaW5kKEtleVQgJmtleSkKewoJcmV0dXJuIGRvRmluZChrZXkpICE9IDA7Cn0KCnRl
bXBsYXRlPGNsYXNzIEtleVQsCgkJCWNsYXNzIFZhbHVlVCwgY2xhc3MgQ29tcGFyZT4KaW50IEFW
TFRyZWU8S2V5VCwgVmFsdWVULCBDb21wYXJlPjo6RmluZChLZXlUICZrZXksIFZhbHVlVCAmcmVz
dWx0KQp7CglOb2RlVHlwZSAqZmluZCA9IGRvRmluZChrZXkpOwoJaWYgKGZpbmQgIT0gMCkKCXsK
CQlyZXN1bHQgPSBmaW5kLT5WYWx1ZTsKCQlyZXR1cm4gMTsKCX0KCWVsc2UKCQlyZXR1cm4gMDsK
fQoKdGVtcGxhdGU8Y2xhc3MgS2V5VCwKCQkJY2xhc3MgVmFsdWVULCBjbGFzcyBDb21wYXJlPgpp
bnQgQVZMVHJlZTxLZXlULCBWYWx1ZVQsIENvbXBhcmU+OjpSZW1vdmUoS2V5VCAma2V5KQp7CglO
b2RlVHlwZSAqbm9kZSA9IGRvRmluZChrZXkpOwoJaWYgKG5vZGUpCgl7CgkJZG9SZW1vdmUobm9k
ZSk7CgkJTGFzdEZvdW5kID0gMDsKCQlyZXR1cm4gMSA7Cgl9CgllbHNlCgkJcmV0dXJuIDAgOwp9
Cgp0ZW1wbGF0ZTxjbGFzcyBLZXlULAoJCQljbGFzcyBWYWx1ZVQsIGNsYXNzIENvbXBhcmU+CnZv
aWQgQVZMVHJlZTxLZXlULCBWYWx1ZVQsIENvbXBhcmU+OjpFbXB0eSgpCnsKCWlmIChIZWFkKQoJ
ewoJCUZyZWVDaGlsZHJlbk9mKEhlYWQpOwoJCWRlbGV0ZSBIZWFkOwoJCUhlYWQgPSBMYXN0Rm91
bmQgPSAwOwoJCU5vZGVDb3VudCA9IDA7Cgl9Cn0KCnRlbXBsYXRlPGNsYXNzIEtleVQsCgkJCWNs
YXNzIFZhbHVlVCwgY2xhc3MgQ29tcGFyZT4KaW50IEFWTFRyZWU8S2V5VCwgVmFsdWVULCBDb21w
YXJlPjo6UmVtb3ZlTGFzdEZvdW5kKCkKewoJaWYgKExhc3RGb3VuZCkKCXsKCQlkb1JlbW92ZShM
YXN0Rm91bmQpOwoJCUxhc3RGb3VuZCA9IDA7CgkJcmV0dXJuIDEgOwoJfQoJZWxzZQoJCXJldHVy
biAwIDsKfQoKdGVtcGxhdGU8Y2xhc3MgS2V5VCwKCQkJY2xhc3MgVmFsdWVULCBjbGFzcyBDb21w
YXJlPgp2b2lkIEFWTFRyZWU8S2V5VCwgVmFsdWVULCBDb21wYXJlPjo6CgkJUmVjYWxjdWxhdGVI
ZWlnaHRzKE5vZGVUeXBlICpub2RlKQogCnsKCWludCBsaGVpZ2h0LCByaGVpZ2h0LCBuZXdfaGVp
Z2h0OwoJd2hpbGUgKCBub2RlICE9IDAgKQoJewoJCWxoZWlnaHQgPSBub2RlLT5MZWZ0ID8gbm9k
ZS0+TGVmdC0+SGVpZ2h0IDogMDsKCQlyaGVpZ2h0ID0gbm9kZS0+UmlnaHQgPyBub2RlLT5SaWdo
dC0+SGVpZ2h0IDogMDsKCgkJbmV3X2hlaWdodCA9IChsaGVpZ2h0ID4gcmhlaWdodCA/IGxoZWln
aHQgOiByaGVpZ2h0KSArIDE7CgoJCSAKCgoJCWlmIChuZXdfaGVpZ2h0ID09IG5vZGUtPkhlaWdo
dCkKCQkJcmV0dXJuOwoJCWVsc2UKCQkJbm9kZS0+SGVpZ2h0ID0gbmV3X2hlaWdodDsKCgkJbm9k
ZSA9IG5vZGUtPlBhcmVudDsKCX0KfQoKdGVtcGxhdGU8Y2xhc3MgS2V5VCwKCQkJY2xhc3MgVmFs
dWVULCBjbGFzcyBDb21wYXJlPgpBVkxOb2RlPEtleVQsIFZhbHVlVD4gKkFWTFRyZWU8S2V5VCwg
VmFsdWVULCBDb21wYXJlPjo6UmViYWxhbmNlKE5vZGVUeXBlICpuKQogCnsKCWludCBsaGVpZ2h0
LCByaGVpZ2h0OwoJTm9kZVR5cGUgKmEsICpiLCAqYzsKCU5vZGVUeXBlICp0MSwgKnQyLCAqdDMs
ICp0NDsKCglOb2RlVHlwZSAqcCA9IG4tPlBhcmVudDsgICAgICAgCglOb2RlVHlwZSAqZ3AgPSBw
LT5QYXJlbnQ7ICAgICAgCglOb2RlVHlwZSAqZ2dwID0gZ3AtPlBhcmVudDsgICAgCgoJaWYgKGdw
LT5SaWdodCA9PSBwKQoJewoJCSAKCgoKCQlpZiAocC0+UmlnaHQgPT0gbikKCQl7CgkJCSAKCgoK
CgoJCQlhID0gZ3A7CgkJCWIgPSBwOwoJCQljID0gbjsKCQkJdDEgPSBncC0+TGVmdDsKCQkJdDIg
PSBwLT5MZWZ0OwoJCQl0MyA9IG4tPkxlZnQ7CgkJCXQ0ID0gbi0+UmlnaHQ7CgkJfQoJCWVsc2UK
CQl7CgkJCSAKCgoKCgoJCQlhID0gZ3A7CgkJCWIgPSBuOwoJCQljID0gcDsKCQkJdDEgPSBncC0+
TGVmdDsKCQkJdDIgPSBuLT5MZWZ0OwoJCQl0MyA9IG4tPlJpZ2h0OwoJCQl0NCA9IHAtPlJpZ2h0
OwoJCX0KCX0KCWVsc2UKCXsKCQkgCgoKCgkJaWYgKHAtPlJpZ2h0ID09IG4pCgkJewoJCQkgCgoK
CgoKCQkJYSA9IHA7CgkJCWIgPSBuOwoJCQljID0gZ3A7CgkJCXQxID0gcC0+TGVmdDsKCQkJdDIg
PSBuLT5MZWZ0OwoJCQl0MyA9IG4tPlJpZ2h0OwoJCQl0NCA9IGdwLT5SaWdodDsKCQl9CgkJZWxz
ZQoJCXsKCQkJIAoKCgoKCgkJCWEgPSBuOwoJCQliID0gcDsKCQkJYyA9IGdwOwoJCQl0MSA9IG4t
PkxlZnQ7CgkJCXQyID0gbi0+UmlnaHQ7CgkJCXQzID0gcC0+UmlnaHQ7CgkJCXQ0ID0gZ3AtPlJp
Z2h0OwoJCX0KCX0KCgkgCgoKCSAKCWlmICggZ2dwID09IDAgKQoJCUhlYWQgPSBiOwoJZWxzZSBp
ZiAoIGdncC0+TGVmdCA9PSBncCApCgkJZ2dwLT5MZWZ0ID0gYjsKCWVsc2UKCQlnZ3AtPlJpZ2h0
ID0gYjsKCWItPlBhcmVudCA9IGdncDsKCgkgCgliLT5MZWZ0ID0gYTsKCWEtPlBhcmVudCA9IGI7
CgoJIAoJYi0+UmlnaHQgPSBjOwoJYy0+UGFyZW50ID0gYjsKCgkgCglhLT5MZWZ0ID0gdDE7Cglp
ZiAoIHQxICE9IDAgKSB0MS0+UGFyZW50ID0gYTsKCgkgCglhLT5SaWdodCA9IHQyOwoJaWYgKCB0
MiAhPSAwICkgdDItPlBhcmVudCA9IGE7CgoJIAoJYy0+TGVmdCA9IHQzOwoJaWYgKCB0MyAhPSAw
ICkgdDMtPlBhcmVudCA9IGM7CgoJIAoJYy0+UmlnaHQgPSB0NDsKCWlmICggdDQgIT0gMCApIHQ0
LT5QYXJlbnQgPSBjOwoKCSAKCgoKCgoKCgoKCSAKCWxoZWlnaHQgPSBhLT5MZWZ0ID8gYS0+TGVm
dC0+SGVpZ2h0IDogMDsKCXJoZWlnaHQgPSBhLT5SaWdodCA/IGEtPlJpZ2h0LT5IZWlnaHQgOiAw
OwoJYS0+SGVpZ2h0ID0gKGxoZWlnaHQgPiByaGVpZ2h0ID8gbGhlaWdodCA6IHJoZWlnaHQpICsg
MTsKCgkgCglsaGVpZ2h0ID0gYy0+TGVmdCA/IGMtPkxlZnQtPkhlaWdodCA6IDA7CglyaGVpZ2h0
ID0gYy0+UmlnaHQgPyBjLT5SaWdodC0+SGVpZ2h0IDogMDsKCWMtPkhlaWdodCA9IChsaGVpZ2h0
ID4gcmhlaWdodCA/IGxoZWlnaHQgOiByaGVpZ2h0KSArIDE7CgoJIAoJbGhlaWdodCA9IGEtPkhl
aWdodDsKCXJoZWlnaHQgPSBjLT5IZWlnaHQ7CgliLT5IZWlnaHQgPSAobGhlaWdodCA+IHJoZWln
aHQgPyBsaGVpZ2h0IDogcmhlaWdodCkgKyAxOwoKCSAKCVJlY2FsY3VsYXRlSGVpZ2h0cyhnZ3Ap
OwoJcmV0dXJuIGdncDsKfQoKdGVtcGxhdGU8Y2xhc3MgS2V5VCwKCQkJY2xhc3MgVmFsdWVULCBj
bGFzcyBDb21wYXJlPgpBVkxOb2RlPEtleVQsIFZhbHVlVD4gKkFWTFRyZWU8S2V5VCwgVmFsdWVU
LCBDb21wYXJlPjo6CgkJRmluZEZpcnN0VW5iYWxhbmNlZEdQKE5vZGVUeXBlICpub2RlKQp7Cglp
bnQgbGhlaWdodCwgcmhlaWdodCwgYmFsYW5jZVByb3A7CglOb2RlVHlwZSAqZ3A7CgoJaWYgKCBu
b2RlID09IDAgfHwgbm9kZS0+UGFyZW50ID09IDAgfHwKCQkJbm9kZS0+UGFyZW50LT5QYXJlbnQg
PT0gMCApCgkJcmV0dXJuIDA7CgkKCSAKCWdwID0gbm9kZS0+UGFyZW50LT5QYXJlbnQ7Cgl3aGls
ZSAoIGdwICE9IDAgKQoJewoJCWxoZWlnaHQgPSBncC0+TGVmdCA/IGdwLT5MZWZ0LT5IZWlnaHQg
OiAwOwoJCXJoZWlnaHQgPSBncC0+UmlnaHQgPyBncC0+UmlnaHQtPkhlaWdodCA6IDA7CgkJYmFs
YW5jZVByb3AgPSBsaGVpZ2h0IC0gcmhlaWdodDsKCgkJaWYgKCBiYWxhbmNlUHJvcCA8IC0xIHx8
IGJhbGFuY2VQcm9wID4gMSApCgkJCXJldHVybiBub2RlOwoKCQlub2RlID0gbm9kZS0+UGFyZW50
OwoJCWdwID0gZ3AtPlBhcmVudDsKCX0KCXJldHVybiAwOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBLZXlU
LAoJCQljbGFzcyBWYWx1ZVQsIGNsYXNzIENvbXBhcmU+CkFWTE5vZGU8S2V5VCwgVmFsdWVUPiAq
QVZMVHJlZTxLZXlULCBWYWx1ZVQsIENvbXBhcmU+OjoKCQlGaW5kRmlyc3RVbmJhbGFuY2VkTm9k
ZShOb2RlVHlwZSAqbm9kZSkKewoJaWYgKCBub2RlID09IDAgKQoJCXJldHVybiAwOwoJCgl3aGls
ZSAoIG5vZGUgIT0gMCApCgl7CgkJaW50IGxoZWlnaHQgPSBub2RlLT5MZWZ0ID8gbm9kZS0+TGVm
dC0+SGVpZ2h0IDogMDsKCQlpbnQgcmhlaWdodCA9IG5vZGUtPlJpZ2h0ID8gbm9kZS0+UmlnaHQt
PkhlaWdodCA6IDA7CgkJaW50IGJhbGFuY2VQcm9wID0gbGhlaWdodCAtIHJoZWlnaHQ7CgoJCWlm
ICggYmFsYW5jZVByb3AgPCAtMSB8fCBiYWxhbmNlUHJvcCA+IDEgKQoJCQlyZXR1cm4gbm9kZTsK
CgkJbm9kZSA9IG5vZGUtPlBhcmVudDsKCX0KCXJldHVybiAwOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBL
ZXlULAoJCQljbGFzcyBWYWx1ZVQsIGNsYXNzIENvbXBhcmU+CkFWTE5vZGU8S2V5VCwgVmFsdWVU
PiAqQVZMVHJlZTxLZXlULCBWYWx1ZVQsIENvbXBhcmU+Ojpkb0ZpbmQoS2V5VCAma2V5KQp7Cgkg
CgoKCgoJTm9kZVR5cGUgKmN1ck5vZGUgPSBIZWFkOwoJaW50IGtleVJlbGF0aW9uOwoKCXdoaWxl
IChjdXJOb2RlKQoJewoJCWtleVJlbGF0aW9uID0gQ29tcGFyZTo6Q29tcGFyZShrZXksIGN1ck5v
ZGUtPktleSk7CgoJCSAKCQlpZiAoIGtleVJlbGF0aW9uIDwgMCApCgkJCWN1ck5vZGUgPSBjdXJO
b2RlLT5MZWZ0OwoJCSAKCQllbHNlIGlmICgga2V5UmVsYXRpb24gPiAwICkKCQkJY3VyTm9kZSA9
IGN1ck5vZGUtPlJpZ2h0OwoJCSAKCQllbHNlCgkJewoJCQlMYXN0Rm91bmQgPSBjdXJOb2RlOwoJ
CQlyZXR1cm4gY3VyTm9kZTsKCQl9Cgl9CglMYXN0Rm91bmQgPSAwOwoJcmV0dXJuIDA7Cn0KCnRl
bXBsYXRlPGNsYXNzIEtleVQsCgkJCWNsYXNzIFZhbHVlVCwgY2xhc3MgQ29tcGFyZT4KaW50IEFW
TFRyZWU8S2V5VCwgVmFsdWVULCBDb21wYXJlPjo6R2V0TGFzdEZvdW5kKFZhbHVlVCAmcmVzdWx0
KQp7CglpZiAoIExhc3RGb3VuZCAhPSAwICkKCXsKCQlyZXN1bHQgPSBMYXN0Rm91bmQtPlZhbHVl
OwoJCXJldHVybiAxIDsKCX0KCWVsc2UKCQlyZXR1cm4gMCA7Cn0KCnRlbXBsYXRlPGNsYXNzIEtl
eVQsCgkJCWNsYXNzIFZhbHVlVCwgY2xhc3MgQ29tcGFyZT4KaW50IEFWTFRyZWU8S2V5VCwgVmFs
dWVULCBDb21wYXJlPjo6U2V0TGFzdEZvdW5kKFZhbHVlVCAmdmFsKQp7CglpZiAoIExhc3RGb3Vu
ZCAhPSAwICkKCXsKCQlMYXN0Rm91bmQtPlZhbHVlID0gdmFsOwoJCXJldHVybiAxIDsKCX0KCWVs
c2UKCQlyZXR1cm4gMCA7Cn0KCnRlbXBsYXRlPGNsYXNzIEtleVQsCgkJCWNsYXNzIFZhbHVlVCwg
Y2xhc3MgQ29tcGFyZT4Kdm9pZCBBVkxUcmVlPEtleVQsIFZhbHVlVCwgQ29tcGFyZT46OgoJCVJl
bW92ZU5vZGUoTm9kZVR5cGUgKm5vZGUsIE5vZGVUeXBlICpmaWxsZXIpCiAKCgp7CglOb2RlVHlw
ZSAqcGFyZW50ID0gbm9kZS0+UGFyZW50OwoKCWlmIChwYXJlbnQpCgl7CgkJaWYgKHBhcmVudC0+
TGVmdCA9PSBub2RlKQoJCQlwYXJlbnQtPkxlZnQgPSBmaWxsZXI7CgkJZWxzZQoJCQlwYXJlbnQt
PlJpZ2h0ID0gZmlsbGVyOwoJfQoJZWxzZQoJCUhlYWQgPSBmaWxsZXI7CgkKCWlmIChmaWxsZXIp
CgkJZmlsbGVyLT5QYXJlbnQgPSBwYXJlbnQ7CgoJcmV0dXJuOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBL
ZXlULAoJCQljbGFzcyBWYWx1ZVQsIGNsYXNzIENvbXBhcmU+CnZvaWQgQVZMVHJlZTxLZXlULCBW
YWx1ZVQsIENvbXBhcmU+OjoKCQlSZXBsYWNlTm9kZShOb2RlVHlwZSAqbm9kZSwgTm9kZVR5cGUg
KnJlcGxhY2VtZW50KQp7CglOb2RlVHlwZSAqcGFyZW50ID0gbm9kZS0+UGFyZW50LAoJCSpsZWZ0
ID0gbm9kZS0+TGVmdCwKCQkqcmlnaHQgPSBub2RlLT5SaWdodDsKCglyZXBsYWNlbWVudC0+TGVm
dCA9IGxlZnQ7CglpZiAobGVmdCkKCQlsZWZ0LT5QYXJlbnQgPSByZXBsYWNlbWVudDsKCXJlcGxh
Y2VtZW50LT5SaWdodCA9IHJpZ2h0OwoJaWYgKHJpZ2h0KQoJCXJpZ2h0LT5QYXJlbnQgPSByZXBs
YWNlbWVudDsKCglyZXBsYWNlbWVudC0+UGFyZW50ID0gcGFyZW50OwoJaWYgKHBhcmVudCkKCXsK
CQlpZiAocGFyZW50LT5MZWZ0ID09IG5vZGUpCgkJCXBhcmVudC0+TGVmdCA9IHJlcGxhY2VtZW50
OwoJCWVsc2UKCQkJcGFyZW50LT5SaWdodCA9IHJlcGxhY2VtZW50OwoJfQoJZWxzZQoJCUhlYWQg
PSByZXBsYWNlbWVudDsKCglyZXBsYWNlbWVudC0+SGVpZ2h0ID0gbm9kZS0+SGVpZ2h0Owp9Cgp0
ZW1wbGF0ZTxjbGFzcyBLZXlULAoJCQljbGFzcyBWYWx1ZVQsIGNsYXNzIENvbXBhcmU+CnZvaWQg
QVZMVHJlZTxLZXlULCBWYWx1ZVQsIENvbXBhcmU+Ojpkb1JlbW92ZShOb2RlVHlwZSAqbm9kZSkK
ewoJTm9kZVR5cGUgKnJlcGxhY2VtZW50LCAqZml4ZnJvbTsKCWludCBsaGVpZ2h0LCByaGVpZ2h0
OwoJTm9kZUNvdW50LS07CgoJIAoJaWYgKG5vZGUtPlJpZ2h0KQoJewoJCSAKCQlyZXBsYWNlbWVu
dCA9IG5vZGUtPlJpZ2h0OwoJCXdoaWxlIChyZXBsYWNlbWVudC0+TGVmdCkKCQkJcmVwbGFjZW1l
bnQgPSByZXBsYWNlbWVudC0+TGVmdDsKCgkJIAoKCgoJCWlmIChyZXBsYWNlbWVudC0+UGFyZW50
ID09IG5vZGUpCgkJCWZpeGZyb20gPSByZXBsYWNlbWVudDsKCQllbHNlCgkJCWZpeGZyb20gPSBy
ZXBsYWNlbWVudC0+UGFyZW50OwoKCQlSZW1vdmVOb2RlKHJlcGxhY2VtZW50LCByZXBsYWNlbWVu
dC0+UmlnaHQpOwoJCVJlcGxhY2VOb2RlKG5vZGUsIHJlcGxhY2VtZW50KTsKCX0KCWVsc2UgaWYg
KG5vZGUtPkxlZnQpCgl7CgkJIAoJCXJlcGxhY2VtZW50ID0gbm9kZS0+TGVmdDsKCQl3aGlsZSAo
cmVwbGFjZW1lbnQtPlJpZ2h0KQoJCQlyZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50LT5SaWdodDsK
CgkJIAoKCgoJCWlmIChyZXBsYWNlbWVudC0+UGFyZW50ID09IG5vZGUpCgkJCWZpeGZyb20gPSBy
ZXBsYWNlbWVudDsKCQllbHNlCgkJCWZpeGZyb20gPSByZXBsYWNlbWVudC0+UGFyZW50OwoKCQlS
ZW1vdmVOb2RlKHJlcGxhY2VtZW50LCByZXBsYWNlbWVudC0+TGVmdCk7CgkJUmVwbGFjZU5vZGUo
bm9kZSwgcmVwbGFjZW1lbnQpOwoJfQoJZWxzZQoJewoJCSAKCQlmaXhmcm9tID0gbm9kZS0+UGFy
ZW50OwoKCQkgCgkJUmVtb3ZlTm9kZShub2RlLCAwKTsKCX0KCglmcmVlKG5vZGUpOwoKCSAKCglp
ZiAoISBmaXhmcm9tKQoJCXJldHVybjsKCgkgCglSZWNhbGN1bGF0ZUhlaWdodHMoZml4ZnJvbSk7
CgoJIAoJTm9kZVR5cGUgKnViID0gRmluZEZpcnN0VW5iYWxhbmNlZE5vZGUoZml4ZnJvbSk7Cgl3
aGlsZSAoIHViICkKCXsKCQkgCgoKCgoKCQlsaGVpZ2h0ID0gdWItPkxlZnQgPyB1Yi0+TGVmdC0+
SGVpZ2h0IDogMDsKCQlyaGVpZ2h0ID0gdWItPlJpZ2h0ID8gdWItPlJpZ2h0LT5IZWlnaHQgOiAw
OwoJCWlmIChyaGVpZ2h0ID4gbGhlaWdodCkKCQl7CgkJCXViID0gdWItPlJpZ2h0OwoJCQlsaGVp
Z2h0ID0gdWItPkxlZnQgPyB1Yi0+TGVmdC0+SGVpZ2h0IDogMDsKCQkJcmhlaWdodCA9IHViLT5S
aWdodCA/IHViLT5SaWdodC0+SGVpZ2h0IDogMDsKCQkJaWYgKHJoZWlnaHQgPiBsaGVpZ2h0KQoJ
CQkJdWIgPSB1Yi0+UmlnaHQ7CgkJCWVsc2UgaWYgKHJoZWlnaHQgPCBsaGVpZ2h0KQoJCQkJdWIg
PSB1Yi0+TGVmdDsKCQkJZWxzZQoJCQkJdWIgPSB1Yi0+UmlnaHQ7CgkJfQoJCWVsc2UKCQl7CgkJ
CXViID0gdWItPkxlZnQ7CgkJCWxoZWlnaHQgPSB1Yi0+TGVmdCA/IHViLT5MZWZ0LT5IZWlnaHQg
OiAwOwoJCQlyaGVpZ2h0ID0gdWItPlJpZ2h0ID8gdWItPlJpZ2h0LT5IZWlnaHQgOiAwOwoJCQlp
ZiAocmhlaWdodCA+IGxoZWlnaHQpCgkJCQl1YiA9IHViLT5SaWdodDsKCQkJZWxzZSBpZiAocmhl
aWdodCA8IGxoZWlnaHQpCgkJCQl1YiA9IHViLT5MZWZ0OwoJCQllbHNlCgkJCQl1YiA9IHViLT5M
ZWZ0OwoJCX0KCgoJCSAKCgoJCWZpeGZyb20gPSBSZWJhbGFuY2UodWIpOwoKCQkgCgkJdWIgPSBG
aW5kRmlyc3RVbmJhbGFuY2VkTm9kZShmaXhmcm9tKTsKCX0KCXJldHVybjsKfQoKIyA2MzQgIi4u
L2luY2x1ZGUvQVZMVHJlZS5oIgoKCnRlbXBsYXRlPGNsYXNzIEtleVQsCgkJCWNsYXNzIFZhbHVl
VCwgY2xhc3MgQ29tcGFyZT4KaW50IEFWTFRyZWU8S2V5VCwgVmFsdWVULCBDb21wYXJlPjo6SW5z
ZXJ0KEtleVQgJmtleSwgVmFsdWVUICZ2YWwpCnsKCWludCBrZXlSZWxhdGlvbjsKCU5vZGVUeXBl
ICpjdXJOb2RlID0gSGVhZCwgKnBhcmVudE5vZGUgPSAwOwoJZW51bSB7IGxlZnQsIHJpZ2h0IH0g
ZGlyZWN0aW9uID0gbGVmdDsKCgl3aGlsZSAoMSApCgl7CgkJaWYgKCBjdXJOb2RlID09IDAgKQoJ
CXsKCQkJIAoKCgkJCWN1ck5vZGUgPSBuZXcgTm9kZVR5cGUocGFyZW50Tm9kZSwga2V5LCB2YWwp
OwoJCQlOb2RlQ291bnQrKzsKCgkJCSAKCQkJaWYgKHBhcmVudE5vZGUpCgkJCXsKCQkJCWlmIChk
aXJlY3Rpb24gPT0gbGVmdCkKCQkJCQlwYXJlbnROb2RlLT5MZWZ0ID0gY3VyTm9kZTsKCQkJCWVs
c2UKCQkJCQlwYXJlbnROb2RlLT5SaWdodCA9IGN1ck5vZGU7CgkJCX0KCQkJZWxzZQoJCQkJSGVh
ZCA9IGN1ck5vZGU7CgoJCQkgCgkJCVJlY2FsY3VsYXRlSGVpZ2h0cyhwYXJlbnROb2RlKTsKCgkJ
CSAKCQkJTm9kZVR5cGUgKnViID0gRmluZEZpcnN0VW5iYWxhbmNlZEdQKGN1ck5vZGUpOwoKCQkJ
IAoJCQlpZiAoIHViICE9IDAgKQoJCQl7CgkJCQkgCgoJCQkJUmViYWxhbmNlKHViKTsKCQkJfQoK
CQkJTGFzdEZvdW5kID0gY3VyTm9kZTsKCQkJcmV0dXJuIDEgOwoJCX0KCgkJa2V5UmVsYXRpb24g
PSBDb21wYXJlOjpDb21wYXJlKGtleSwgY3VyTm9kZS0+S2V5KTsKCgkJIAoJCWlmICgga2V5UmVs
YXRpb24gPCAwICkKCQl7CgkJCWRpcmVjdGlvbiA9IGxlZnQ7CgkJCXBhcmVudE5vZGUgPSBjdXJO
b2RlOwoJCQljdXJOb2RlID0gY3VyTm9kZS0+TGVmdDsKCQl9CgkJIAoJCWVsc2UgaWYgKCBrZXlS
ZWxhdGlvbiA+IDAgKQoJCXsKCQkJZGlyZWN0aW9uID0gcmlnaHQ7CgkJCXBhcmVudE5vZGUgPSBj
dXJOb2RlOwoJCQljdXJOb2RlID0gY3VyTm9kZS0+UmlnaHQ7CgkJfQoJCSAKCQllbHNlCgkJewoJ
CQlMYXN0Rm91bmQgPSBjdXJOb2RlOwoJCQlyZXR1cm4gMCA7CgkJfQoJfQp9Cgp0ZW1wbGF0ZTxj
bGFzcyBLZXlULAoJCQljbGFzcyBWYWx1ZVQsIGNsYXNzIENvbXBhcmU+CnZvaWQgQVZMVHJlZTxL
ZXlULCBWYWx1ZVQsIENvbXBhcmU+OjpGcmVlQ2hpbGRyZW5PZihOb2RlVHlwZSAqbikKewoJIAoK
CgoJaWYgKG4tPkxlZnQpCgl7CgkJRnJlZUNoaWxkcmVuT2Yobi0+TGVmdCk7CgkJZGVsZXRlIG4t
PkxlZnQ7CgkJbi0+TGVmdCA9IDA7Cgl9CgoJaWYgKG4tPlJpZ2h0KQoJewoJCUZyZWVDaGlsZHJl
bk9mKG4tPlJpZ2h0KTsKCQlkZWxldGUgbi0+UmlnaHQ7CgkJbi0+TGVmdCA9IDA7Cgl9Cn0KCiMg
NzY0ICIuLi9pbmNsdWRlL0FWTFRyZWUuaCIKCgojIDkgIi4uL2luY2x1ZGUvRnNtQmFzZVZrLmgi
IDIKCiMgMSAiLi4vaW5jbHVkZS9Eb3VibGVMaXN0LmgiIDEKIAoKCgoKCgp0ZW1wbGF0ZTxjbGFz
cyBFbGVtZW50PiBzdHJ1Y3QgRG91YmxlTGlzdEVsIHsgRWxlbWVudCAqUHJldiwgKk5leHQ7IH07
CgoKIAoKCnRlbXBsYXRlIDwgY2xhc3MgRWxlbWVudCwgY2xhc3MgRExFbGVtZW50ID0gRG91Ymxl
TGlzdEVsPEVsZW1lbnQ+ID4KCQljbGFzcyBEb3VibGVMaXN0CnsKcHVibGljOgoJRG91YmxlTGlz
dChEb3VibGVMaXN0ICZvdGhlcik7CglEb3VibGVMaXN0KCkgOiBIZWFkKDApLCBUYWlsKDApLCBM
aXN0TGVuZ3RoKDApIHt9Cgl+RG91YmxlTGlzdCgpIHtFbXB0eSgpO30KCgl2b2lkIEFkZEZyb250
KEVsZW1lbnQgKm5ld19lbCkKCQl7QWRkQmVmb3JlKEhlYWQsIG5ld19lbCk7fQoJdm9pZCBBZGRF
bmQoRWxlbWVudCAqbmV3X2VsKQoJCXtBZGRBZnRlcihUYWlsLCBuZXdfZWwpO30KCgl2b2lkIEFk
ZEVuZCggRG91YmxlTGlzdCAmZGwgKTsKCXZvaWQgQWRkRnJvbnQoIERvdWJsZUxpc3QgJmRsICk7
CgoJRWxlbWVudCAqRGV0YWNoRnJvbnQoKQoJCXtyZXR1cm4gRGV0YWNoTGlzdEVsKEhlYWQpO30K
CUVsZW1lbnQgKkRldGFjaEVuZCgpCgkJe3JldHVybiBEZXRhY2hMaXN0RWwoVGFpbCk7fQoKCXZv
aWQgRW1wdHkoKTsKCQoJdm9pZCBBZGRBZnRlcihFbGVtZW50ICpwcmV2X2VsLCBFbGVtZW50ICpu
ZXdfZWwpOwoJdm9pZCBBZGRCZWZvcmUoRWxlbWVudCAqbmV4dF9lbCwgRWxlbWVudCAqbmV3X2Vs
KTsKCSAKCUVsZW1lbnQgKkRldGFjaExpc3RFbChFbGVtZW50ICplbCk7CgoJRWxlbWVudCAqSGVh
ZCwgKlRhaWw7CglpbnQgTGlzdExlbmd0aDsKfTsKCnRlbXBsYXRlPGNsYXNzIEVsZW1lbnQsIGNs
YXNzIERMRWxlbWVudD4KCQlEb3VibGVMaXN0PEVsZW1lbnQsIERMRWxlbWVudD46OkRvdWJsZUxp
c3QoRG91YmxlTGlzdCAmb3RoZXIpIDoKCQlIZWFkKDApLCBUYWlsKDApLCBMaXN0TGVuZ3RoKDAp
CnsKCUVsZW1lbnQgKmVsID0gb3RoZXIuSGVhZDsKCXdoaWxlKCBlbCAhPSAwICkgewoJCUFkZEVu
ZCggbmV3IEVsZW1lbnQoKmVsKSApOwoJCWVsID0gZWwtPk5leHQ7Cgl9Cn0KCnRlbXBsYXRlPGNs
YXNzIEVsZW1lbnQsIGNsYXNzIERMRWxlbWVudD4KCQl2b2lkIERvdWJsZUxpc3Q8RWxlbWVudCwg
RExFbGVtZW50Pjo6QWRkRW5kKCBEb3VibGVMaXN0ICZkbCApCnsKCWlmICggZGwuTGlzdExlbmd0
aCA9PSAwICkKCQlyZXR1cm47CgoJaWYgKCBMaXN0TGVuZ3RoID09IDAgKSB7CgkJSGVhZCA9IGRs
LkhlYWQ7CgkJVGFpbCA9IGRsLlRhaWw7CgkJTGlzdExlbmd0aCA9IGRsLkxpc3RMZW5ndGg7Cgl9
CgllbHNlIHsKCQlUYWlsLT5ETEVsZW1lbnQ6Ok5leHQgPSBkbC5IZWFkOwoJCWRsLkhlYWQtPkRM
RWxlbWVudDo6UHJldiA9IFRhaWw7CgkJVGFpbCA9IGRsLlRhaWw7CgkJTGlzdExlbmd0aCArPSBk
bC5MaXN0TGVuZ3RoOwoJfQoJZGwuSGVhZCA9IGRsLlRhaWwgPSAwOwoJZGwuTGlzdExlbmd0aCA9
IDA7Cn0KCnRlbXBsYXRlPGNsYXNzIEVsZW1lbnQsIGNsYXNzIERMRWxlbWVudD4KCQl2b2lkIERv
dWJsZUxpc3Q8RWxlbWVudCwgRExFbGVtZW50Pjo6QWRkRnJvbnQoIERvdWJsZUxpc3QgJmRsICkK
ewoJaWYgKCBkbC5MaXN0TGVuZ3RoID09IDAgKQoJCXJldHVybjsKCglpZiAoIExpc3RMZW5ndGgg
PT0gMCApIHsKCQlIZWFkID0gZGwuSGVhZDsKCQlUYWlsID0gZGwuVGFpbDsKCQlMaXN0TGVuZ3Ro
ID0gZGwuTGlzdExlbmd0aDsKCX0KCWVsc2UgewoJCUhlYWQtPkRMRWxlbWVudDo6UHJldiA9IGRs
LlRhaWw7CgkJZGwuVGFpbC0+RExFbGVtZW50OjpOZXh0ID0gSGVhZDsKCQlIZWFkID0gZGwuSGVh
ZDsKCQlMaXN0TGVuZ3RoICs9IGRsLkxpc3RMZW5ndGg7Cgl9CgoJZGwuSGVhZCA9IGRsLlRhaWwg
PSAwOwoJZGwuTGlzdExlbmd0aCA9IDA7Cn0KCnRlbXBsYXRlPGNsYXNzIEVsZW1lbnQsIGNsYXNz
IERMRWxlbWVudD4KCQl2b2lkIERvdWJsZUxpc3Q8RWxlbWVudCwgRExFbGVtZW50Pjo6CgkJQWRk
QWZ0ZXIoRWxlbWVudCAqcHJldl9lbCwgRWxlbWVudCAqbmV3X2VsKQp7CgluZXdfZWwtPkRMRWxl
bWVudDo6UHJldiA9IHByZXZfZWw7IAoJaWYgKHByZXZfZWwgPT0gMCkgCgl7CgkJbmV3X2VsLT5E
TEVsZW1lbnQ6Ok5leHQgPSBIZWFkOwoJCUhlYWQgPSBuZXdfZWw7Cgl9IAoJZWxzZSAKCXsKCQlu
ZXdfZWwtPkRMRWxlbWVudDo6TmV4dCA9IHByZXZfZWwtPkRMRWxlbWVudDo6TmV4dDsKCQlwcmV2
X2VsLT5ETEVsZW1lbnQ6Ok5leHQgPSBuZXdfZWw7Cgl9IAoKCWlmIChuZXdfZWwtPkRMRWxlbWVu
dDo6TmV4dCA9PSAwKSAKCQlUYWlsID0gbmV3X2VsOwoJZWxzZSAKCQluZXdfZWwtPkRMRWxlbWVu
dDo6TmV4dC0+RExFbGVtZW50OjpQcmV2ID0gbmV3X2VsOwoKCUxpc3RMZW5ndGgrKzsKfQoKdGVt
cGxhdGU8Y2xhc3MgRWxlbWVudCwgY2xhc3MgRExFbGVtZW50PgoJCXZvaWQgRG91YmxlTGlzdDxF
bGVtZW50LCBETEVsZW1lbnQ+OjoKCQlBZGRCZWZvcmUoRWxlbWVudCAqbmV4dF9lbCwgRWxlbWVu
dCAqbmV3X2VsKQp7CgluZXdfZWwtPkRMRWxlbWVudDo6TmV4dCA9IG5leHRfZWw7IAoJaWYgKG5l
eHRfZWwgPT0gMCkgCgl7CgkJbmV3X2VsLT5ETEVsZW1lbnQ6OlByZXYgPSBUYWlsOwoJCVRhaWwg
PSBuZXdfZWw7Cgl9IAoJZWxzZSAKCXsKCQluZXdfZWwtPkRMRWxlbWVudDo6UHJldiA9IG5leHRf
ZWwtPkRMRWxlbWVudDo6UHJldjsKCQluZXh0X2VsLT5ETEVsZW1lbnQ6OlByZXYgPSBuZXdfZWw7
Cgl9IAoKCWlmIChuZXdfZWwtPkRMRWxlbWVudDo6UHJldiA9PSAwKSAKCQlIZWFkID0gbmV3X2Vs
OwoJZWxzZSAKCQluZXdfZWwtPkRMRWxlbWVudDo6UHJldi0+RExFbGVtZW50OjpOZXh0ID0gbmV3
X2VsOwoKCUxpc3RMZW5ndGgrKzsKfQoKdGVtcGxhdGU8Y2xhc3MgRWxlbWVudCwgY2xhc3MgRExF
bGVtZW50PgoJCUVsZW1lbnQgKkRvdWJsZUxpc3Q8RWxlbWVudCwgRExFbGVtZW50Pjo6RGV0YWNo
TGlzdEVsKEVsZW1lbnQgKmVsKQp7CglpZiAoZWwtPkRMRWxlbWVudDo6UHJldiA9PSAwKSAKCQlI
ZWFkID0gZWwtPkRMRWxlbWVudDo6TmV4dDsgCgllbHNlIHsKCQllbC0+RExFbGVtZW50OjpQcmV2
LT5ETEVsZW1lbnQ6Ok5leHQgPQoJCQkJZWwtPkRMRWxlbWVudDo6TmV4dDsgCgl9CgoJaWYgKGVs
LT5ETEVsZW1lbnQ6Ok5leHQgPT0gMCkgCgkJVGFpbCA9IGVsLT5ETEVsZW1lbnQ6OlByZXY7IAoJ
ZWxzZSB7CgkJZWwtPkRMRWxlbWVudDo6TmV4dC0+RExFbGVtZW50OjpQcmV2ID0KCQkJCWVsLT5E
TEVsZW1lbnQ6OlByZXY7IAoJfQoKCUxpc3RMZW5ndGgtLTsKCglyZXR1cm4gZWw7Cn0KCnRlbXBs
YXRlPGNsYXNzIEVsZW1lbnQsIGNsYXNzIERMRWxlbWVudD4KCQl2b2lkIERvdWJsZUxpc3Q8RWxl
bWVudCwgRExFbGVtZW50Pjo6RW1wdHkoKQp7CglFbGVtZW50ICpuZXh0VG9HbyA9IDAsICpjdXIg
PSBIZWFkOwoJCgl3aGlsZSAoY3VyICE9IDApCgl7CgkJbmV4dFRvR28gPSBjdXItPkRMRWxlbWVu
dDo6TmV4dDsKCQlkZWxldGUgY3VyOwoJCWN1ciA9IG5leHRUb0dvOwoJfQoJSGVhZCA9IFRhaWwg
PSAwOyBMaXN0TGVuZ3RoID0gMDsKfQoKCgojIDEwICIuLi9pbmNsdWRlL0ZzbUJhc2VWay5oIiAy
CgojIDEgIi4uL2luY2x1ZGUvRnNtQ29tbW9uLmgiIDEKIAoKCgoKCgoKIAoKCgoKCgoKCgoKCnRl
bXBsYXRlIDxjbGFzcyBTdGF0ZT4gc3RydWN0IE1hcmtJbmRleFRtcGwKewoJc3RydWN0IFN0YXRl
UGFpciA6IHB1YmxpYyBEb3VibGVMaXN0RWw8U3RhdGVQYWlyPgoJewoJCWJvb2wgaXNNYXJrZWQ7
CgkJU3RhdGUgKnAsICpxOwoJfTsKCglpbnQgbnVtU3RhdGVzOwoJU3RhdGVQYWlyICphcnJheTsK
CglNYXJrSW5kZXhUbXBsKGludCBzdGF0ZXMpOwoJfk1hcmtJbmRleFRtcGwoKTsKCXZvaWQgTWFy
a1BhaXIoaW50IHN0YXRlMSwgaW50IHN0YXRlMik7Cglib29sIElzUGFpck1hcmtlZChpbnQgc3Rh
dGUxLCBpbnQgc3RhdGUyKTsKCglEb3VibGVMaXN0PFN0YXRlUGFpcj4gbWFya2VkTGlzdCwgdW5t
YXJrZWRMaXN0Owp9OwoKdGVtcGxhdGUgPCBjbGFzcyBTdGF0ZSwKCQkJY2xhc3MgVHJhbnNpdGlv
biwKCQkJY2xhc3MgVHJhbnNpdGlvbkZ1bmMsCgkJCWNsYXNzIFRyYW5zaXRpb25GdW5jQ29tcGFy
ZSA+IHN0cnVjdCBGc21UcmFuc2l0aW9uCnsKCUZzbVRyYW5zaXRpb24oICkgOiBmcm9tU3RhdGUo
MCksIHRvU3RhdGUoMCksIHByaW9yaXR5KDApIHt9CgoJVHJhbnNpdGlvbiAqTmV4dCwgKlByZXY7
CglTdGF0ZSAqZnJvbVN0YXRlOwoJU3RhdGUgKnRvU3RhdGU7CgoJdHlwZWRlZiBWZWN0b3I8VHJh
bnNpdGlvbkZ1bmM+IFRyYW5zaXRpb25GdW5jTGlzdDsKCXR5cGVkZWYgVGFibGVDb21wYXJlPFRy
YW5zaXRpb25GdW5jLCBUcmFuc2l0aW9uRnVuY0NvbXBhcmU+IFRyYW5zRnVuY0xpc3RDb21wYXJl
OwoKCVRyYW5zaXRpb25GdW5jTGlzdCB0cmFuc0Z1bmNMaXN0OwoJaW50IHByaW9yaXR5OwoKCXN0
YXRpYyBpbnQgQ29tcGFyZSggY29uc3QgRnNtVHJhbnNpdGlvbiAmdHJhbnMxLCBjb25zdCBGc21U
cmFuc2l0aW9uICZ0cmFuczIgKQoJewoJCWlmICggdHJhbnMxLnByaW9yaXR5IDwgdHJhbnMyLnBy
aW9yaXR5ICkKCQkJcmV0dXJuIC0xOwoJCWVsc2UgaWYgKCB0cmFuczEucHJpb3JpdHkgPiB0cmFu
czIucHJpb3JpdHkgKQoJCQlyZXR1cm4gMTsKCQllbHNlCgkJewoJCQlpbnQgY21wUmVzdWx0ID0g
VHJhbnNGdW5jTGlzdENvbXBhcmU6OgoJCQkJCUNvbXBhcmUodHJhbnMxLnRyYW5zRnVuY0xpc3Qs
IHRyYW5zMi50cmFuc0Z1bmNMaXN0KTsKCQkJaWYgKCBjbXBSZXN1bHQgIT0gMCApCgkJCQlyZXR1
cm4gY21wUmVzdWx0OwoJCX0KCQlyZXR1cm4gMDsKCX0KCgkgCgl2b2lkIE1lcmdlVHJhbnNpdGlv
biggRnNtVHJhbnNpdGlvbiAqb3RoZXJUcmFucyApIHsgfQoJdm9pZCBJbnNlcnRUcmFuc2l0aW9u
KCBGc21UcmFuc2l0aW9uICpvdGhlclRyYW5zICkgeyB9Cn07CgoKIAoKCnRlbXBsYXRlIDwgY2xh
c3MgU3RhdGUgPiBNYXJrSW5kZXhUbXBsPFN0YXRlPjo6CgkJTWFya0luZGV4VG1wbCggaW50IHN0
YXRlcyApIDogbnVtU3RhdGVzKHN0YXRlcykKewoJaW50IHRvdGFsID0gc3RhdGVzICogc3RhdGVz
OwoJYXJyYXkgPSAoU3RhdGVQYWlyKikgbWFsbG9jKCBzaXplb2YoU3RhdGVQYWlyKSAqIHRvdGFs
ICk7CgltZW1zZXQoIGFycmF5LCAwLCBzaXplb2YoU3RhdGVQYWlyKSAqIHRvdGFsICk7Cn0KCiAK
Cgp0ZW1wbGF0ZSA8IGNsYXNzIFN0YXRlID5NYXJrSW5kZXhUbXBsPFN0YXRlPjo6fk1hcmtJbmRl
eFRtcGwoKQp7CgltYXJrZWRMaXN0Lkxpc3RMZW5ndGggPSAwOwoJbWFya2VkTGlzdC5IZWFkID0g
MDsKCW1hcmtlZExpc3QuVGFpbCA9IDA7CgoJdW5tYXJrZWRMaXN0Lkxpc3RMZW5ndGggPSAwOwoJ
dW5tYXJrZWRMaXN0LkhlYWQgPSAwOwoJdW5tYXJrZWRMaXN0LlRhaWwgPSAwOwoKCWZyZWUoIGFy
cmF5ICk7Cn0KCiAKCgp0ZW1wbGF0ZSA8IGNsYXNzIFN0YXRlID4gdm9pZCBNYXJrSW5kZXhUbXBs
PFN0YXRlPjo6CgkJTWFya1BhaXIoaW50IHN0YXRlMSwgaW50IHN0YXRlMikKewoJaW50IHBvczsK
CWlmICggc3RhdGUxID49IHN0YXRlMiApCgkJcG9zID0gKCBzdGF0ZTEgKiBudW1TdGF0ZXMgKSAr
IHN0YXRlMjsKCWVsc2UKCQlwb3MgPSAoIHN0YXRlMiAqIG51bVN0YXRlcyApICsgc3RhdGUxOwoK
CWlmICghKCAgISBhcnJheVtwb3NdLmlzTWFya2VkICApKSB7IGNlcnIgPDwgIkFzc2VydGlvbiBm
YWlsZWQ6IGxpbmUgIiA8PCAxMTggPDwgIiBmaWxlICIgPDwgIi4uL2luY2x1ZGUvRnNtQ29tbW9u
LmgiIDw8ICJcbiI7IGFib3J0KCk7IH0gOwoJYXJyYXlbcG9zXS5pc01hcmtlZCA9IDEgOwoJbWFy
a2VkTGlzdC5BZGRFbmQoIHVubWFya2VkTGlzdC5EZXRhY2hMaXN0RWwoICZhcnJheVtwb3NdICkg
KTsKfQoKIAoKCnRlbXBsYXRlIDwgY2xhc3MgU3RhdGUgPiBib29sIE1hcmtJbmRleFRtcGw8U3Rh
dGU+OjoKCQlJc1BhaXJNYXJrZWQoaW50IHN0YXRlMSwgaW50IHN0YXRlMikKewoJaW50IHBvczsK
CWlmICggc3RhdGUxID49IHN0YXRlMiApCgkJcG9zID0gKCBzdGF0ZTEgKiBudW1TdGF0ZXMgKSAr
IHN0YXRlMjsKCWVsc2UKCQlwb3MgPSAoIHN0YXRlMiAqIG51bVN0YXRlcyApICsgc3RhdGUxOwoK
CXJldHVybiBhcnJheVtwb3NdLmlzTWFya2VkOwp9CgoKIyAxMSAiLi4vaW5jbHVkZS9Gc21CYXNl
VmsuaCIgMgoKIyAxICIuLi9pbmNsdWRlL0JTVGFibGUuaCIgMQogCgoKCgoKCgoKCgoKCnRlbXBs
YXRlPGNsYXNzIEtleVQsIGNsYXNzIFZhbHVlVD4gc3RydWN0IEJTRWxlbWVudAp7CglCU0VsZW1l
bnQoKSB7fQoJQlNFbGVtZW50KGNvbnN0IEtleVQgJmtleSkgOiBLZXkoa2V5KSwgVmFsdWUoKSB7
fQoJQlNFbGVtZW50KGNvbnN0IEtleVQgJmtleSwgY29uc3QgVmFsdWVUICZ2YWwpIDogS2V5KGtl
eSksIFZhbHVlKHZhbCkge30KCUtleVQgS2V5OwoJVmFsdWVUIFZhbHVlOwp9OwoKdGVtcGxhdGUK
CQk8CgkJCWNsYXNzIEtleVQsCgkJCWNsYXNzIFZhbHVlVCwKCQkJY2xhc3MgQ29tcGFyZSwKCQkJ
Y2xhc3MgVGFibGVUID0gRXhwblRhYmxlPCBCU0VsZW1lbnQ8S2V5VCxWYWx1ZVQ+ID4KCQk+CgkJ
Y2xhc3MgQlNUYWJsZSA6IHB1YmxpYyBWZWN0b3I8IEJTRWxlbWVudDxLZXlULFZhbHVlVD4sIFRh
YmxlVCA+CnsKcHVibGljOgoJdHlwZWRlZiBCU0VsZW1lbnQ8S2V5VCwgVmFsdWVUPiBFbGVtZW50
VHlwZTsKCXR5cGVkZWYgVmVjdG9yPEVsZW1lbnRUeXBlLCBUYWJsZVQ+IEJhc2VUeXBlOwoKCUJT
VGFibGUoKSA6IExhc3RGb3VuZCgwKSB7IH0KCUJTVGFibGUoIGNvbnN0IEJTVGFibGUgJnQgKTsK
CglFbGVtZW50VHlwZSAqSW5zZXJ0KGNvbnN0IEtleVQgJmtleSk7CglFbGVtZW50VHlwZSAqSW5z
ZXJ0KGNvbnN0IEtleVQgJmtleSwgY29uc3QgVmFsdWVUICZ2YWwpOwoJRWxlbWVudFR5cGUgKklu
c2VydChjb25zdCBFbGVtZW50VHlwZSAmZWwpIHsgcmV0dXJuIEluc2VydChlbC5LZXksIGVsLlZh
bHVlKTsgfQoKCUVsZW1lbnRUeXBlICpJbnNlcnRNdWx0aShjb25zdCBLZXlUICZrZXksIGNvbnN0
IFZhbHVlVCAmdmFsKTsKCUVsZW1lbnRUeXBlICpJbnNlcnRNdWx0aShjb25zdCBFbGVtZW50VHlw
ZSAmZWwpIHsgcmV0dXJuIEluc2VydE11bHRpKGVsLktleSwgZWwuVmFsdWUpOyB9CgoJRWxlbWVu
dFR5cGUgKkZpbmQoY29uc3QgS2V5VCAma2V5KTsKCWJvb2wgRmluZE11bHRpKCBjb25zdCBLZXlU
ICZrZXksIEVsZW1lbnRUeXBlICombG93ZXIsIEVsZW1lbnRUeXBlIComdXBwZXIgKTsKCglpbnQg
UmVtb3ZlKGNvbnN0IEtleVQgJmtleSk7CglpbnQgUmVtb3ZlTXVsdGkoY29uc3QgS2V5VCAma2V5
KTsKCWludCBSZW1vdmVMYXN0Rm91bmQoKTsKCglFbGVtZW50VHlwZSAqTGFzdEZvdW5kOwp9OwoK
dGVtcGxhdGU8IGNsYXNzIEtleVQsIGNsYXNzIFZhbHVlVCwKCQkJY2xhc3MgQ29tcGFyZSwKCQkJ
Y2xhc3MgVGFibGVUPgpCU1RhYmxlPEtleVQsIFZhbHVlVCwgQ29tcGFyZSwgVGFibGVUPjo6QlNU
YWJsZShjb25zdCBCU1RhYmxlICZ0KSA6IEJhc2VUeXBlKCB0ICkKewoJaWYgKCB0Lkxhc3RGb3Vu
ZCA9PSAwICkKCQlMYXN0Rm91bmQgPSAwOwoJZWxzZQoJCUxhc3RGb3VuZCA9IFRhYmxlICsgKCB0
Lkxhc3RGb3VuZCAtIHQuVGFibGUgKTsKfQoKIyA5MCAiLi4vaW5jbHVkZS9CU1RhYmxlLmgiCgoK
dGVtcGxhdGU8IGNsYXNzIEtleVQsIGNsYXNzIFZhbHVlVCwKCQkJY2xhc3MgQ29tcGFyZSwKCQkJ
Y2xhc3MgVGFibGVUPgppbnQgQlNUYWJsZTxLZXlULCBWYWx1ZVQsIENvbXBhcmUsIFRhYmxlVD46
OlJlbW92ZU11bHRpKGNvbnN0IEtleVQgJmtleSkKewoJRWxlbWVudFR5cGUgKmxvdywgKmhpZ2g7
CglpZiAoIEZpbmRNdWx0aShrZXksIGxvdywgaGlnaCkgKQoJewoJCWludCBudW0gPSBoaWdoIC0g
bG93ICsgMTsKCQlCYXNlVHlwZTo6RGVsZXRlKGxvdyAtIFRhYmxlLCBoaWdoIC0gbG93ICsgMSk7
CgkJTGFzdEZvdW5kID0gMDsKCQlyZXR1cm4gbnVtOwoJfQoJZWxzZQoJCXJldHVybiAwOwp9CgoK
dGVtcGxhdGU8IGNsYXNzIEtleVQsIGNsYXNzIFZhbHVlVCwKCQkJY2xhc3MgQ29tcGFyZSwKCQkJ
Y2xhc3MgVGFibGVUPgppbnQgQlNUYWJsZTxLZXlULCBWYWx1ZVQsIENvbXBhcmUsIFRhYmxlVD46
OlJlbW92ZShjb25zdCBLZXlUICZrZXkpCnsKCUVsZW1lbnRUeXBlICplbCA9IEZpbmQoa2V5KTsK
CWlmIChlbCkKCXsKCQlCYXNlVHlwZTo6RGVsZXRlKGVsIC0gVGFibGUpOwoJCUxhc3RGb3VuZCA9
IDA7CgkJcmV0dXJuIDEgOwoJfQoJZWxzZQoJCXJldHVybiAwIDsKfQoKdGVtcGxhdGU8Y2xhc3Mg
S2V5VCwgY2xhc3MgVmFsdWVULAoJCQljbGFzcyBDb21wYXJlLAoJCQljbGFzcyBUYWJsZVQ+CmJv
b2wgQlNUYWJsZTxLZXlULCBWYWx1ZVQsIENvbXBhcmUsIFRhYmxlVD46OkZpbmRNdWx0aShjb25z
dCBLZXlUICZrZXksCglFbGVtZW50VHlwZSAqJmxvdywgRWxlbWVudFR5cGUgKiZoaWdoICkKewoJ
RWxlbWVudFR5cGUgKmxvd2VyLCAqbWlkLCAqdXBwZXI7CglpbnQga2V5UmVsYXRpb247CgoJaWYg
KCEgVGFibGUpCgl7CgkJTGFzdEZvdW5kID0gMDsKCQlyZXR1cm4gMCA7Cgl9CgoJbG93ZXIgPSBU
YWJsZTsKCXVwcGVyID0gVGFibGUgKyBUYWJsZUxlbmd0aCAtIDE7Cgl3aGlsZSAoMSkKCXsKCQlp
ZiAoIHVwcGVyIDwgbG93ZXIgKQoJCXsKCQkJIAoJCQlMYXN0Rm91bmQgPSAwOwoJCQlyZXR1cm4g
MCA7CgkJfQoKCQltaWQgPSBsb3dlciArICggKHVwcGVyLWxvd2VyKSAvIDIpOwoJCWtleVJlbGF0
aW9uID0gQ29tcGFyZTo6Q29tcGFyZShrZXksIG1pZC0+S2V5KTsKCgkJaWYgKCBrZXlSZWxhdGlv
biA8IDAgKQoJCQl1cHBlciA9IG1pZCAtIDE7CgkJZWxzZSBpZiAoIGtleVJlbGF0aW9uID4gMCAp
CgkJCWxvd2VyID0gbWlkICsgMTsKCQllbHNlICAKCQl7CgkJCUVsZW1lbnRUeXBlICpsb3dFbmQg
PSBUYWJsZSAtIDE7CgkJCUVsZW1lbnRUeXBlICpoaWdoRW5kID0gVGFibGUgKyBUYWJsZUxlbmd0
aDsKCgkJCWxvd2VyID0gbWlkIC0gMTsKCQkJd2hpbGUgKCBsb3dlciAhPSBsb3dFbmQgJiYgQ29t
cGFyZTo6Q29tcGFyZShrZXksIGxvd2VyLT5LZXkpID09IDAgKQoJCQkJbG93ZXItLTsKCgkJCXVw
cGVyID0gbWlkICsgMTsKCQkJd2hpbGUgKCB1cHBlciAhPSBoaWdoRW5kICYmIENvbXBhcmU6OkNv
bXBhcmUoa2V5LCB1cHBlci0+S2V5KSA9PSAwICkKCQkJCXVwcGVyKys7CgkJCQoJCQlsb3cgPSBs
b3dlciArIDE7CgkJCWhpZ2ggPSB1cHBlciAtIDE7CgkJCXJldHVybiAxIDsKCQl9Cgl9Cn0KCnRl
bXBsYXRlPGNsYXNzIEtleVQsIGNsYXNzIFZhbHVlVCwKCQkJY2xhc3MgQ29tcGFyZSwKCQkJY2xh
c3MgVGFibGVUPgpCU0VsZW1lbnQ8S2V5VCwgVmFsdWVUPiAqQlNUYWJsZTxLZXlULCBWYWx1ZVQs
IENvbXBhcmUsIFRhYmxlVD46OkZpbmQoY29uc3QgS2V5VCAma2V5KQp7CglFbGVtZW50VHlwZSAq
bG93ZXIsICptaWQsICp1cHBlcjsKCWludCBrZXlSZWxhdGlvbjsKCglpZiAoISBUYWJsZSkKCXsK
CQlMYXN0Rm91bmQgPSAwOwoJCXJldHVybiAwOwoJfQoKCWxvd2VyID0gVGFibGU7Cgl1cHBlciA9
IFRhYmxlICsgVGFibGVMZW5ndGggLSAxOwoJd2hpbGUgKDEpCgl7CgkJaWYgKCB1cHBlciA8IGxv
d2VyICkKCQl7CgkJCSAKCQkJTGFzdEZvdW5kID0gMDsKCQkJcmV0dXJuIDA7CgkJfQoKCQltaWQg
PSBsb3dlciArICggKHVwcGVyLWxvd2VyKSAvIDIpOwoJCWtleVJlbGF0aW9uID0gQ29tcGFyZTo6
Q29tcGFyZShrZXksIG1pZC0+S2V5KTsKCgkJaWYgKCBrZXlSZWxhdGlvbiA8IDAgKQoJCQl1cHBl
ciA9IG1pZCAtIDE7CgkJZWxzZSBpZiAoIGtleVJlbGF0aW9uID4gMCApCgkJCWxvd2VyID0gbWlk
ICsgMTsKCQllbHNlICAKCQl7CgkJCUxhc3RGb3VuZCA9IG1pZDsKCQkJcmV0dXJuIG1pZDsKCQl9
Cgl9Cn0KCiMgMjQ3ICIuLi9pbmNsdWRlL0JTVGFibGUuaCIKCgp0ZW1wbGF0ZTwgY2xhc3MgS2V5
VCwgY2xhc3MgVmFsdWVULAoJCQljbGFzcyBDb21wYXJlLAoJCQljbGFzcyBUYWJsZVQ+CmludCBC
U1RhYmxlPEtleVQsIFZhbHVlVCwgQ29tcGFyZSwgVGFibGVUPjo6UmVtb3ZlTGFzdEZvdW5kKCkK
ewoJaWYgKExhc3RGb3VuZCkKCXsKCQlCYXNlVHlwZTo6RGVsZXRlKExhc3RGb3VuZCAtIFRhYmxl
KTsKCQlMYXN0Rm91bmQgPSAwOwoJCXJldHVybiAxIDsKCX0KCWVsc2UKCQlyZXR1cm4gMCA7Cn0K
CnRlbXBsYXRlPCBjbGFzcyBLZXlULCBjbGFzcyBWYWx1ZVQsCgkJCWNsYXNzIENvbXBhcmUsCgkJ
CWNsYXNzIFRhYmxlVD4KQlNUYWJsZTxLZXlULCBWYWx1ZVQsIENvbXBhcmUsIFRhYmxlVD46OgoJ
CUVsZW1lbnRUeXBlICpCU1RhYmxlPEtleVQsIFZhbHVlVCwgQ29tcGFyZSwgVGFibGVUPjo6CgkJ
SW5zZXJ0TXVsdGkoY29uc3QgS2V5VCAma2V5LCBjb25zdCBWYWx1ZVQgJnZhbCkKewoJRWxlbWVu
dFR5cGUgKmxvd2VyLCAqbWlkLCAqdXBwZXI7CglpbnQga2V5UmVsYXRpb24sIGluc2VydFBvczsK
CgoJaWYgKFRhYmxlTGVuZ3RoID09IDApCgl7CgkJIAoKCQlsb3dlciA9IFRhYmxlOwoJCWdvdG8g
SW5zZXJ0OwoJfQoKCWxvd2VyID0gVGFibGU7Cgl1cHBlciA9IFRhYmxlICsgVGFibGVMZW5ndGgg
LSAxOwoJd2hpbGUgKDEpCgl7CgkJaWYgKCB1cHBlciA8IGxvd2VyICkKCQl7CgkJCSAKCgkJCWdv
dG8gSW5zZXJ0OwoJCX0KCgkJbWlkID0gbG93ZXIgKyAoICh1cHBlci1sb3dlcikgLyAyKTsKCQlr
ZXlSZWxhdGlvbiA9IENvbXBhcmU6OkNvbXBhcmUoa2V5LCBtaWQtPktleSk7CgoJCWlmICgga2V5
UmVsYXRpb24gPCAwICkKCQkJdXBwZXIgPSBtaWQgLSAxOwoJCWVsc2UgaWYgKCBrZXlSZWxhdGlv
biA+IDAgKQoJCQlsb3dlciA9IG1pZCArIDE7CgkJZWxzZSAgCgkJewoJCQlsb3dlciA9IG1pZDsK
CQkJZ290byBJbnNlcnQ7CgkJfQoJfQoKSW5zZXJ0OgoJIAoJaW5zZXJ0UG9zID0gbG93ZXIgLSBU
YWJsZTsKCgkgCglUYWJsZUxlbmd0aCA9IE1ha2VSYXdTcGFjZUZvcihpbnNlcnRQb3MsIDEpOwoJ
bmV3KFRhYmxlICsgaW5zZXJ0UG9zKSBFbGVtZW50VHlwZShrZXksIHZhbCk7CgoJIAoJTGFzdEZv
dW5kID0gVGFibGUgKyBpbnNlcnRQb3M7CglyZXR1cm4gTGFzdEZvdW5kOwp9CgoKdGVtcGxhdGU8
IGNsYXNzIEtleVQsIGNsYXNzIFZhbHVlVCwKCQkJY2xhc3MgQ29tcGFyZSwKCQkJY2xhc3MgVGFi
bGVUPgpCU1RhYmxlPEtleVQsIFZhbHVlVCwgQ29tcGFyZSwgVGFibGVUPjo6CgkJRWxlbWVudFR5
cGUgKkJTVGFibGU8S2V5VCwgVmFsdWVULCBDb21wYXJlLCBUYWJsZVQ+OjoKCQlJbnNlcnQoY29u
c3QgS2V5VCAma2V5LCBjb25zdCBWYWx1ZVQgJnZhbCkKewoJRWxlbWVudFR5cGUgKmxvd2VyLCAq
bWlkLCAqdXBwZXI7CglpbnQga2V5UmVsYXRpb24sIGluc2VydFBvczsKCgoJaWYgKFRhYmxlTGVu
Z3RoID09IDApCgl7CgkJIAoKCQlsb3dlciA9IFRhYmxlOwoJCWdvdG8gSW5zZXJ0OwoJfQoKCWxv
d2VyID0gVGFibGU7Cgl1cHBlciA9IFRhYmxlICsgVGFibGVMZW5ndGggLSAxOwoJd2hpbGUgKDEp
Cgl7CgkJaWYgKCB1cHBlciA8IGxvd2VyICkKCQl7CgkJCSAKCgkJCWdvdG8gSW5zZXJ0OwoJCX0K
CgkJbWlkID0gbG93ZXIgKyAoICh1cHBlci1sb3dlcikgLyAyKTsKCQlrZXlSZWxhdGlvbiA9IENv
bXBhcmU6OkNvbXBhcmUoa2V5LCBtaWQtPktleSk7CgoJCWlmICgga2V5UmVsYXRpb24gPCAwICkK
CQkJdXBwZXIgPSBtaWQgLSAxOwoJCWVsc2UgaWYgKCBrZXlSZWxhdGlvbiA+IDAgKQoJCQlsb3dl
ciA9IG1pZCArIDE7CgkJZWxzZSAgCgkJewoJCQlMYXN0Rm91bmQgPSBtaWQ7CgkJCXJldHVybiAw
OwoJCX0KCX0KCkluc2VydDoKCSAKCWluc2VydFBvcyA9IGxvd2VyIC0gVGFibGU7CgoJIAoJVGFi
bGVMZW5ndGggPSBNYWtlUmF3U3BhY2VGb3IoaW5zZXJ0UG9zLCAxKTsKCW5ldyhUYWJsZSArIGlu
c2VydFBvcykgRWxlbWVudFR5cGUoa2V5LCB2YWwpOwoKCSAKCUxhc3RGb3VuZCA9IFRhYmxlICsg
aW5zZXJ0UG9zOwoJcmV0dXJuIExhc3RGb3VuZDsKfQoKCnRlbXBsYXRlPCBjbGFzcyBLZXlULCBj
bGFzcyBWYWx1ZVQsCgkJCWNsYXNzIENvbXBhcmUsCgkJCWNsYXNzIFRhYmxlVD4KQlNUYWJsZTxL
ZXlULCBWYWx1ZVQsIENvbXBhcmUsIFRhYmxlVD46OgoJCUVsZW1lbnRUeXBlICpCU1RhYmxlPEtl
eVQsIFZhbHVlVCwgQ29tcGFyZSwgVGFibGVUPjo6CgkJSW5zZXJ0KGNvbnN0IEtleVQgJmtleSkK
ewoJRWxlbWVudFR5cGUgKmxvd2VyLCAqbWlkLCAqdXBwZXI7CglpbnQga2V5UmVsYXRpb24sIGlu
c2VydFBvczsKCgoJaWYgKFRhYmxlTGVuZ3RoID09IDApCgl7CgkJIAoKCQlsb3dlciA9IFRhYmxl
OwoJCWdvdG8gSW5zZXJ0OwoJfQoKCWxvd2VyID0gVGFibGU7Cgl1cHBlciA9IFRhYmxlICsgVGFi
bGVMZW5ndGggLSAxOwoJd2hpbGUgKDEpCgl7CgkJaWYgKCB1cHBlciA8IGxvd2VyICkKCQl7CgkJ
CSAKCgkJCWdvdG8gSW5zZXJ0OwoJCX0KCgkJbWlkID0gbG93ZXIgKyAoICh1cHBlci1sb3dlcikg
LyAyKTsKCQlrZXlSZWxhdGlvbiA9IENvbXBhcmU6OkNvbXBhcmUoa2V5LCBtaWQtPktleSk7CgoJ
CWlmICgga2V5UmVsYXRpb24gPCAwICkKCQkJdXBwZXIgPSBtaWQgLSAxOwoJCWVsc2UgaWYgKCBr
ZXlSZWxhdGlvbiA+IDAgKQoJCQlsb3dlciA9IG1pZCArIDE7CgkJZWxzZSAgCgkJewoJCQlMYXN0
Rm91bmQgPSBtaWQ7CgkJCXJldHVybiAwOwoJCX0KCX0KCkluc2VydDoKCSAKCWluc2VydFBvcyA9
IGxvd2VyIC0gVGFibGU7CgoJIAoJVGFibGVMZW5ndGggPSBNYWtlUmF3U3BhY2VGb3IoaW5zZXJ0
UG9zLCAxKTsKCW5ldyhUYWJsZSArIGluc2VydFBvcykgRWxlbWVudFR5cGUoa2V5KTsKCgkgCglM
YXN0Rm91bmQgPSBUYWJsZSArIGluc2VydFBvczsKCXJldHVybiBMYXN0Rm91bmQ7Cn0KCgojIDEy
ICIuLi9pbmNsdWRlL0ZzbUJhc2VWay5oIiAyCgoKdGVtcGxhdGUgPCBjbGFzcyBTdGF0ZSwgCgkJ
CWNsYXNzIFRyYW5zaXRpb25GdW5jLAoJCQljbGFzcyBUcmFuc2l0aW9uID4gc3RydWN0IEZzbVN0
YXRlVmsKCQk6IHB1YmxpYyBEb3VibGVMaXN0RWw8U3RhdGU+CnsKCUZzbVN0YXRlVmsoKTsKCUZz
bVN0YXRlVmsoRnNtU3RhdGVWayAmb3RoZXIpOwoKCXR5cGVkZWYgQlNUYWJsZTwgaW50LCBUcmFu
c2l0aW9uKiwgT3JkaW5hbENvbXBhcmU8aW50PiA+IFRyYW5zTGlzdFR5cGU7CgoJVHJhbnNMaXN0
VHlwZSBPdXRMaXN0OwoJVHJhbnNMaXN0VHlwZSBJbkxpc3Q7CgoJaW50IE51bTsKCgkgCglTdGF0
ZSAqc3RhdGVNYXA7CgoJIAoJaW50IGluVHJhbnNDb3VudCwgb3V0VHJhbnNDb3VudDsKCgkgCgli
b29sIElzRmluU3RhdGU7CgoJIAoJYm9vbCBJc01hcmtlZDsKCgkgCglpbnQgU3RhdGVCaXRzOwoK
CSAKCVRyYW5zaXRpb24gb3V0VHJhbnNpdGlvbjsKCgkgCgoKCXR5cGVkZWYgVmVjdG9yU2V0PCBT
dGF0ZSosIE9yZGluYWxDb21wYXJlPFN0YXRlKj4gPiBTdGF0ZVNldDsKCgkgCglTdGF0ZVNldCAq
c3RhdGVTZXQ7CgoJIAoJdm9pZCBGdXNlU3RhdGUoIFN0YXRlICpvdGhlclN0YXRlICkgeyB9Cgl2
b2lkIE1lcmdlU3RhdGUoIFN0YXRlICpvdGhlclN0YXRlICkgeyB9Cn07CgogCgoKdGVtcGxhdGUg
PCBjbGFzcyBTdGF0ZSwgY2xhc3MgVHJhbnNpdGlvbkZ1bmMsIGNsYXNzIFRyYW5zaXRpb24gPgoJ
CXN0cnVjdCBGc21CYXNlVmsgOiBwdWJsaWMgRG91YmxlTGlzdDwgU3RhdGUgPgp7CnB1YmxpYzoK
CSAKCXR5cGVkZWYgRG91YmxlTGlzdDwgU3RhdGUgPiBCYXNlTGlzdFR5cGU7Cgl0eXBlZGVmIEJT
VGFibGU8IGludCwgVHJhbnNpdGlvbiosIE9yZGluYWxDb21wYXJlPGludD4gPiBUcmFuc0xpc3RU
eXBlOwoJdHlwZWRlZiBCU0VsZW1lbnQ8IGludCwgVHJhbnNpdGlvbiogPiBUcmFuc0VsOwoKCSAK
CglzdHJ1Y3QgUFN0YXRlU2V0Q29tcGFyZSA6IHB1YmxpYyBUYWJsZUNvbXBhcmU8IFN0YXRlKiwg
T3JkaW5hbENvbXBhcmU8U3RhdGUqPiA+Cgl7CgkJdHlwZWRlZiBUYWJsZUNvbXBhcmU8IFN0YXRl
KiwgT3JkaW5hbENvbXBhcmU8U3RhdGUqPiA+IEJhc2VUeXBlOwoJCXN0YXRpYyBpbnQgQ29tcGFy
ZSh0eXBlbmFtZSBTdGF0ZTo6U3RhdGVTZXQgKnNldDEsCgkJCQkJdHlwZW5hbWUgU3RhdGU6OlN0
YXRlU2V0ICpzZXQyKSB7CgkJCXJldHVybiBCYXNlVHlwZTo6Q29tcGFyZSgqc2V0MSwgKnNldDIp
OwoJCX0KCX07CgoJIAoKCXR5cGVkZWYgQVZMVHJlZTx0eXBlbmFtZSBTdGF0ZTo6U3RhdGVTZXQq
LCBTdGF0ZSosCgkJCVBTdGF0ZVNldENvbXBhcmU+IFN0YXRlRGljdDsKCgkgCgl0eXBlZGVmIERv
dWJsZUxpc3Q8IFN0YXRlID4gU3RhdGVGaWxsSW5MaXN0OwoKCXR5cGVkZWYgTWFya0luZGV4VG1w
bDwgU3RhdGUgPiBNYXJrSW5kZXg7CgoJIAoJU3RhdGUgKlN0YXJ0U3RhdGU7Cgl0eXBlbmFtZSBT
dGF0ZTo6U3RhdGVTZXQgRmluU3RhdGVTZXQ7CgoJRnNtQmFzZVZrKCkge30KCUZzbUJhc2VWayhG
c21CYXNlVmsgJmdyYXBoKTsKCgl2b2lkIEF0dGFjaFN0YXRlcyhTdGF0ZSAqZnJvbSwgU3RhdGUg
KnRvLCBpbnQgb25DaGFyKTsKCXZvaWQgQXR0YWNoU3RhdGVzKFN0YXRlICpmcm9tLCBTdGF0ZSAq
dG8sIFRyYW5zaXRpb24gKnRyYW5zLCBpbnQgb25DaGFyKTsKCXZvaWQgRGV0YWNoU3RhdGVzKFN0
YXRlICpmcm9tLCBTdGF0ZSAqdG8sIFRyYW5zaXRpb24gKnRyYW5zLCBpbnQgb25DaGFyKTsKCgkg
CglTdGF0ZSAqRGV0YWNoU3RhdGUoIFN0YXRlICpzdGF0ZSApOwoKCXZvaWQgRHVtcFRyYW5zaXRp
b24oIEZJTEUgKmZpbGUsIGludCBvbkNoYXIsIFRyYW5zaXRpb24gKnRyYW5zICk7Cgl2b2lkIER1
bXBUcmFuc2l0aW9ucyggRklMRSAqZmlsZSwgdHlwZW5hbWUgU3RhdGU6Ok91dExpc3RUeXBlICps
aXN0ICk7CgoJIAoJdm9pZCBTZXRGaW5TdGF0ZShTdGF0ZSAqc3RhdGUpOwoJdm9pZCBVbnNldEZp
blN0YXRlKFN0YXRlICpzdGF0ZSk7CgoJIAoJdm9pZCBBbGxUcmFuc1ByaW9yKCBpbnQgZGVsdGEg
KTsKCgkgCgl2b2lkIEZpbkZTTVByaW9yKCBpbnQgZGVsdGEgKTsKCgkgCgl2b2lkIExlYXZlRlNN
UHJpb3IoIGludCBkZWx0YSApOwoKCSAKCXZvaWQgQWxsVHJhbnNGdW5jKCBUcmFuc2l0aW9uRnVu
YyAqZnVuY3MsIGludCBudW1GdW5jcyApOwoKCSAKCXZvaWQgRmluRlNNRnVuYyggVHJhbnNpdGlv
bkZ1bmMgKmZ1bmNzLCBpbnQgbnVtRnVuY3MgKTsKCgkgCgl2b2lkIExlYXZlRlNNRnVuYyggVHJh
bnNpdGlvbkZ1bmMgKmZ1bmNzLCBpbnQgbnVtRnVuY3MgKTsKCgkgCgl2b2lkIFN0cmlwQWxsRnVu
Y3Rpb25zKCk7CgoJIAoJdm9pZCBGU01BdHRhY2hTdGF0ZXMoIFN0YXRlRGljdCAmc3RhdGVEaWN0
LCBTdGF0ZUZpbGxJbkxpc3QgJnN0ZmlsLAoJCQlTdGF0ZSAqZnJvbSwgU3RhdGUgKnRvLCBpbnQg
b25DaGFyLAoJCQlUcmFuc2l0aW9uICpzcmNUcmFucywKCQkJYm9vbCBsZWF2aW5nRlNNICk7CgoJ
IAoJdm9pZCBPdXRUcmFuc0NvcHkoU3RhdGVEaWN0ICZzdGF0ZURpY3QsIFN0YXRlRmlsbEluTGlz
dCAmc3RmaWwsCgkJCVN0YXRlICpkZXN0LCB0eXBlbmFtZSBTdGF0ZTo6VHJhbnNMaXN0VHlwZSAq
c3JjTGlzdCwgYm9vbCBsZWF2aW5nRlNNKTsKCXZvaWQgT3V0VHJhbnNDb3B5KFN0YXRlRGljdCAm
c3RhdGVEaWN0LCBTdGF0ZUZpbGxJbkxpc3QgJnN0ZmlsLAoJCQlTdGF0ZSAqZGVzdCwgU3RhdGUg
KnNyYywgYm9vbCBsZWF2aW5nRlNNKTsKCgkgCgl2b2lkIEluVHJhbnNNb3ZlKFN0YXRlICpkZXN0
LCBTdGF0ZSAqc3JjKTsKCgkgCgl2b2lkIE1hcmtQYWlyc09uSW4oIE1hcmtJbmRleCAmbWFya0lu
ZGV4LCBTdGF0ZSAqciwgU3RhdGUgKnMgKTsKCgkgCglib29sIFNob3VsZE1hcmtQYWlyVHJhbnNE
YXRhKE1hcmtJbmRleCAmbWFya0luZGV4LCBTdGF0ZSAqciwgU3RhdGUgKnMpOwoKCSAKCXZvaWQg
TWFya1JlYWNoYWJsZUZyb21IZXJlUmV2ZXJzZSggU3RhdGUgKnN0YXRlICk7CgoJIAoJdm9pZCBN
YXJrUmVhY2hhYmxlRnJvbUhlcmUoIFN0YXRlICpzdGF0ZSApOwp9OwoKCiMgNyAidGVzdEZzbUdy
YXBoLmNwcCIgMgoKIyAxICIuLi9pbmNsdWRlL0ZzbUJhc2VWa0ltcC5oIiAxCiAKCgoKCgoKCgoK
CiAKCgp0ZW1wbGF0ZTwgY2xhc3MgU3RhdGUsIGNsYXNzIFRyYW5zaXRpb25GdW5jLCBjbGFzcyBU
cmFuc2l0aW9uID4KCQlGc21TdGF0ZVZrPFN0YXRlLCBUcmFuc2l0aW9uRnVuYywgVHJhbnNpdGlv
bj46OkZzbVN0YXRlVmsoKSA6CgkJT3V0TGlzdCgpLCBJbkxpc3QoKSwKCQlvdXRUcmFuc2l0aW9u
KCkKewoJIAoJTnVtID0gMDsKCXN0YXRlTWFwID0gMDsKCWluVHJhbnNDb3VudCA9IDA7CglvdXRU
cmFuc0NvdW50ID0gMDsKCgkgCglJc0ZpblN0YXRlID0gMCA7CglJc01hcmtlZCA9IDAgOwoJU3Rh
dGVCaXRzID0gMDsKCXN0YXRlU2V0ID0gMDsKfQoKIAoKCnRlbXBsYXRlPCBjbGFzcyBTdGF0ZSwg
Y2xhc3MgVHJhbnNpdGlvbkZ1bmMsIGNsYXNzIFRyYW5zaXRpb24gPgoJCUZzbVN0YXRlVms8U3Rh
dGUsIFRyYW5zaXRpb25GdW5jLCBUcmFuc2l0aW9uPjo6CgkJRnNtU3RhdGVWayhGc21TdGF0ZVZr
ICZvdGhlcikgOgoJCU91dExpc3Qob3RoZXIuT3V0TGlzdCksIEluTGlzdChvdGhlci5Jbkxpc3Qp
LAoJCW91dFRyYW5zaXRpb24ob3RoZXIub3V0VHJhbnNpdGlvbikKCQkKewoJIAoKCSAKCU51bSA9
IG90aGVyLk51bTsKCXN0YXRlTWFwID0gMDsKCWluVHJhbnNDb3VudCA9IG90aGVyLmluVHJhbnND
b3VudDsKCW91dFRyYW5zQ291bnQgPSBvdGhlci5vdXRUcmFuc0NvdW50OwoKCSAKCUlzRmluU3Rh
dGUgPSBvdGhlci5Jc0ZpblN0YXRlOwoJSXNNYXJrZWQgPSBvdGhlci5Jc01hcmtlZDsKCVN0YXRl
Qml0cyA9IG90aGVyLlN0YXRlQml0czsKCXN0YXRlU2V0ID0gb3RoZXIuc3RhdGVTZXQ7CgoJIAoJ
VHJhbnNFbCAqdGVsID0gSW5MaXN0LlRhYmxlOwoJaW50IG50ZWwgPSBJbkxpc3QuVGFibGVMZW5n
dGg7Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBudGVsOyBpKyssIHRlbCsrICkKCQl0ZWwtPlZhbHVl
ID0gMDsKfQoKIAoKCnRlbXBsYXRlIDwgY2xhc3MgU3RhdGUsIGNsYXNzIFRyYW5zaXRpb25GdW5j
LCBjbGFzcyBUcmFuc2l0aW9uID4KCQlGc21CYXNlVms8U3RhdGUsIFRyYW5zaXRpb25GdW5jLCBU
cmFuc2l0aW9uPjo6CgkJRnNtQmFzZVZrKEZzbUJhc2VWayAmZ3JhcGgpIDoKCQlTdGFydFN0YXRl
KDApLCBGaW5TdGF0ZVNldCgpCnsKCSAKCVN0YXRlICpvcmlnU3RhdGUgPSBncmFwaC5IZWFkOwoJ
d2hpbGUgKCBvcmlnU3RhdGUgIT0gMCApIHsKCQkgCgkJU3RhdGUgKm5ld1N0YXRlID0gbmV3IFN0
YXRlKCpvcmlnU3RhdGUpOwoKCQkgCgkJQmFzZUxpc3RUeXBlOjpBZGRFbmQoIG5ld1N0YXRlICk7
CgoJCSAKCQlvcmlnU3RhdGUtPnN0YXRlTWFwID0gbmV3U3RhdGU7CgoJCSAKCQlvcmlnU3RhdGUg
PSBvcmlnU3RhdGUtPk5leHQ7Cgl9CgkKCSAKCVN0YXRlICpzdGF0ZSA9IEhlYWQ7Cgl3aGlsZSAo
IHN0YXRlICE9IDAgKSB7CgkJIAoKCQlUcmFuc0VsICp0ZWwgPSBzdGF0ZS0+T3V0TGlzdC5UYWJs
ZTsKCQlpbnQgbnRlbCA9IHN0YXRlLT5PdXRMaXN0LlRhYmxlTGVuZ3RoOwoJCWZvciAoaW50IGkg
PSAwOyBpIDwgbnRlbDsgaSsrLCB0ZWwrKyApIHsKCQkJIAoJCQlUcmFuc2l0aW9uICp0cmFucyA9
IHRlbC0+VmFsdWU7CgkJCVN0YXRlICp0byA9IHRyYW5zLT50b1N0YXRlLT5zdGF0ZU1hcDsKCgkJ
CSAKCQkJdHJhbnMgPSBuZXcgVHJhbnNpdGlvbigqdHJhbnMpOwoKCQkJIAoJCQl0cmFucy0+ZnJv
bVN0YXRlID0gMDsKCQkJdHJhbnMtPnRvU3RhdGUgPSAwOwoJCQlBdHRhY2hTdGF0ZXMoIHN0YXRl
LCB0bywgdHJhbnMsIHRlbC0+S2V5ICk7CgkJfQoJCXN0YXRlID0gc3RhdGUtPk5leHQ7Cgl9CgoJ
IAoJU3RhcnRTdGF0ZSA9IGdyYXBoLlN0YXJ0U3RhdGUtPnN0YXRlTWFwOwoJCgkgCglTdGF0ZSAq
KnN0ID0gZ3JhcGguRmluU3RhdGVTZXQuVGFibGU7CglpbnQgbnN0ID0gZ3JhcGguRmluU3RhdGVT
ZXQuVGFibGVMZW5ndGg7Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBuc3Q7IGkrKywgc3QrKyApCgkJ
RmluU3RhdGVTZXQuU2V0KCgqc3QpLT5zdGF0ZU1hcCk7Cn0KCnRlbXBsYXRlIDwgY2xhc3MgU3Rh
dGUsIGNsYXNzIFRyYW5zaXRpb25GdW5jLCBjbGFzcyBUcmFuc2l0aW9uID4KCQl2b2lkIEZzbUJh
c2VWazxTdGF0ZSwgVHJhbnNpdGlvbkZ1bmMsIFRyYW5zaXRpb24+OjoKCQlBdHRhY2hTdGF0ZXMo
IFN0YXRlICpmcm9tLCBTdGF0ZSAqdG8sIGludCBvbkNoYXIgKQp7CgkgCglpZiAoIGZyb20tPk91
dExpc3QuSW5zZXJ0KCBvbkNoYXIsIDAgKSApCgkJVHJhbnNFbCAqdGVsID0gZnJvbS0+T3V0TGlz
dC5MYXN0Rm91bmQ7CgkJdGVsLT5WYWx1ZSA9IG5ldyBUcmFuc2l0aW9uKCk7Cgl9CglUcmFuc2l0
aW9uICp0cmFucyA9IGZyb20tPk91dExpc3QuTGFzdEZvdW5kLT5WYWx1ZTsKCglBdHRhY2hTdGF0
ZXMoIGZyb20sIHRvLCB0cmFucywgb25DaGFyICk7Cn07CgoKdGVtcGxhdGUgPCBjbGFzcyBTdGF0
ZSwgY2xhc3MgVHJhbnNpdGlvbkZ1bmMsIGNsYXNzIFRyYW5zaXRpb24gPgoJCXZvaWQgRnNtQmFz
ZVZrPFN0YXRlLCBUcmFuc2l0aW9uRnVuYywgVHJhbnNpdGlvbj46OgoJCUF0dGFjaFN0YXRlcygg
U3RhdGUgKmZyb20sIFN0YXRlICp0bywgVHJhbnNpdGlvbiAqdHJhbnMsIGludCBvbkNoYXIgKQp7
CgkgCglpZiAoISggIHRyYW5zLT50b1N0YXRlID09IF9fbnVsbCAgICkpIHsgY2VyciA8PCAiQXNz
ZXJ0aW9uIGZhaWxlZDogbGluZSAiIDw8IDE0MSA8PCAiIGZpbGUgIiA8PCAiLi4vaW5jbHVkZS9G
c21CYXNlVmtJbXAuaCIgPDwgIlxuIjsgYWJvcnQoKTsgfSA7CglpZiAoISggIHRyYW5zLT5mcm9t
U3RhdGUgPT0gX19udWxsICAgKSkgeyBjZXJyIDw8ICJBc3NlcnRpb24gZmFpbGVkOiBsaW5lICIg
PDwgMTQyIDw8ICIgZmlsZSAiIDw8ICIuLi9pbmNsdWRlL0ZzbUJhc2VWa0ltcC5oIiA8PCAiXG4i
OyBhYm9ydCgpOyB9IDsKCgkgCgl0by0+SW5MaXN0Lkluc2VydCggb25DaGFyLCAwICk7CgoJIAoJ
VHJhbnNpdGlvbiAqJmluVHJhbnNQdHIgPSB0by0+SW5MaXN0Lkxhc3RGb3VuZC0+VmFsdWU7CgoJ
IAoJdHJhbnMtPmZyb21TdGF0ZSA9IGZyb207Cgl0cmFucy0+dG9TdGF0ZSA9IHRvOwoKCXRyYW5z
LT5OZXh0ID0gaW5UcmFuc1B0cjsKCXRyYW5zLT5QcmV2ID0gMDsKCgkgCglpZiAoIGluVHJhbnNQ
dHIgKQoJCWluVHJhbnNQdHItPlByZXYgPSB0cmFuczsKCgkgCglpblRyYW5zUHRyID0gdHJhbnM7
CgoJIAoJZnJvbS0+b3V0VHJhbnNDb3VudCArPSAxOwoJdG8tPmluVHJhbnNDb3VudCArPSAxOwp9
OwoKdGVtcGxhdGUgPCBjbGFzcyBTdGF0ZSwgY2xhc3MgVHJhbnNpdGlvbkZ1bmMsIGNsYXNzIFRy
YW5zaXRpb24gPgoJCXZvaWQgRnNtQmFzZVZrPFN0YXRlLCBUcmFuc2l0aW9uRnVuYywgVHJhbnNp
dGlvbj46OgoJCURldGFjaFN0YXRlcyhTdGF0ZSAqZnJvbSwgU3RhdGUgKnRvLCBUcmFuc2l0aW9u
ICp0cmFucywgaW50IG9uQ2hhcikKewoJIAoJaWYgKCEoICB0cmFucy0+dG9TdGF0ZSA9PSB0byAg
KSkgeyBjZXJyIDw8ICJBc3NlcnRpb24gZmFpbGVkOiBsaW5lICIgPDwgMTc0IDw8ICIgZmlsZSAi
IDw8ICIuLi9pbmNsdWRlL0ZzbUJhc2VWa0ltcC5oIiA8PCAiXG4iOyBhYm9ydCgpOyB9IDsKCgkg
CglUcmFuc0VsICp0ZWwgPSB0by0+SW5MaXN0LkZpbmQoIG9uQ2hhciApOwoJaWYgKCEoICB0ZWwg
IT0gX19udWxsICAgKSkgeyBjZXJyIDw8ICJBc3NlcnRpb24gZmFpbGVkOiBsaW5lICIgPDwgMTc4
IDw8ICIgZmlsZSAiIDw8ICIuLi9pbmNsdWRlL0ZzbUJhc2VWa0ltcC5oIiA8PCAiXG4iOyBhYm9y
dCgpOyB9IDsKCVRyYW5zaXRpb24gKiZpblRyYW5zUHRyID0gdGVsLT5WYWx1ZTsKCgkgCglpZiAo
dHJhbnMtPlByZXYgPT0gMCkgCgkJaW5UcmFuc1B0ciA9IHRyYW5zLT5OZXh0OyAKCWVsc2UKCQl0
cmFucy0+UHJldi0+TmV4dCA9IHRyYW5zLT5OZXh0OyAKCglpZiAodHJhbnMtPk5leHQgIT0gMCkg
CgkJdHJhbnMtPk5leHQtPlByZXYgPSB0cmFucy0+UHJldjsgCgkKCXRyYW5zLT5mcm9tU3RhdGUg
PSAwOwoJdHJhbnMtPnRvU3RhdGUgPSAwOwoKCSAKCWZyb20tPm91dFRyYW5zQ291bnQgLT0gMTsK
CXRvLT5pblRyYW5zQ291bnQgLT0gMTsKfQoKdGVtcGxhdGUgPCBjbGFzcyBTdGF0ZSwgY2xhc3Mg
VHJhbnNpdGlvbkZ1bmMsIGNsYXNzIFRyYW5zaXRpb24gPgoJCVN0YXRlICpGc21CYXNlVms8U3Rh
dGUsIFRyYW5zaXRpb25GdW5jLCBUcmFuc2l0aW9uPjo6CgkJRGV0YWNoU3RhdGUoIFN0YXRlICpz
dGF0ZSApCnsKCSAKCVRyYW5zRWwgKnRlbCA9IHN0YXRlLT5Jbkxpc3QuVGFibGU7CglpbnQgbnRl
bCA9IHN0YXRlLT5Jbkxpc3QuVGFibGVMZW5ndGg7Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBudGVs
OyBpKyssIHRlbCsrICkgewoJCXdoaWxlICggdGVsLT5WYWx1ZSApIHsKCQkJIAoJCQlUcmFuc2l0
aW9uICp0cmFucyA9IHRlbC0+VmFsdWU7CgkJCVN0YXRlICpmcm9tU3RhdGUgPSB0cmFucy0+ZnJv
bVN0YXRlOwoJCQkgCgkJCURldGFjaFN0YXRlcyggZnJvbVN0YXRlLCBzdGF0ZSwgdHJhbnMsIGlu
VGVsLT5LZXkgKTsKCQkJIAoJCQlmcm9tU3RhdGUtPk91dExpc3QuUmVtb3ZlKCBpblRlbC0+S2V5
ICk7CgkJfQoJfQoKCSAKCVRyYW5zRWwgKnRlbCA9IHN0YXRlLT5PdXRMaXN0LlRhYmxlOwoJaW50
IG50ZWwgPSBzdGF0ZS0+T3V0TGlzdC5UYWJsZUxlbmd0aDsKCWZvciAoIGludCBpID0gMDsgaSA8
IG50ZWw7IGkrKywgdGVsKysgKSB7CgkJRGV0YWNoU3RhdGVzKCBzdGF0ZSwgdGVsLT5WYWx1ZS50
b1N0YXRlLCB0ZWwtPlZhbHVlLCBvdXRUZWwtPktleSApOwoJCWRlbGV0ZSB0ZWwtPlZhbHVlOwoJ
fQoKCSAKCXN0YXRlLT5PdXRMaXN0LkVtcHR5KCk7CgoJIAoJaWYgKCBzdGF0ZS0+SXNGaW5TdGF0
ZSApCgkJVW5zZXRGaW5TdGF0ZShzdGF0ZSk7CgoJRGV0YWNoTGlzdEVsKCBzdGF0ZSApOwoJcmV0
dXJuIHN0YXRlOwp9Cgp0ZW1wbGF0ZSA8IGNsYXNzIFN0YXRlLCBjbGFzcyBUcmFuc2l0aW9uRnVu
YywgY2xhc3MgVHJhbnNpdGlvbiA+CgkJdm9pZCBGc21CYXNlVms8U3RhdGUsIFRyYW5zaXRpb25G
dW5jLCBUcmFuc2l0aW9uPjo6CgkJRHVtcFRyYW5zaXRpb24oIEZJTEUgKmZpbGUsIGludCBvbkNo
YXIsIFRyYW5zaXRpb24gKnRyYW5zICkKewoJZnByaW50ZihmaWxlLCAiICUuMmkgJS4yeCBbJWld
KCIsIHRyYW5zLT50b1N0YXRlLT5OdW0sCgkJCW9uQ2hhciwgdHJhbnMtPnByaW9yaXR5ICk7CgoJ
VHJhbnNpdGlvbkZ1bmMgKnRmdW5jID0gdHJhbnMtPnRyYW5zRnVuY0xpc3QuVGFibGU7CglpbnQg
dGZ1bmNsZW4gPSB0cmFucy0+dHJhbnNGdW5jTGlzdC5UYWJsZUxlbmd0aDsKCWZvciAoIGludCBp
ID0gMDsgaSA8IHRmdW5jbGVuOyBpKyssIHRmdW5jKysgKQoJCWZwcmludGYoZmlsZSwgIiV4LCIs
ICp0ZnVuYyk7CgkJCglmcHJpbnRmKGZpbGUsICIpIHwiICk7Cn0KCnRlbXBsYXRlIDwgY2xhc3Mg
U3RhdGUsIGNsYXNzIFRyYW5zaXRpb25GdW5jLCBjbGFzcyBUcmFuc2l0aW9uID4KCQl2b2lkIEZz
bUJhc2VWazxTdGF0ZSwgVHJhbnNpdGlvbkZ1bmMsIFRyYW5zaXRpb24+OjoKCQlEdW1wVHJhbnNp
dGlvbnMoIEZJTEUgKmZpbGUsIHR5cGVuYW1lIFN0YXRlOjpUcmFuc0xpc3RUeXBlICpsaXN0ICAp
CnsKCVRyYW5zRWwgKnRlbCA9IGxpc3QtPlRhYmxlOwoJaW50IG50ZWwgPSBsaXN0LT5UYWJsZUxl
bmd0aDsKCWZvciAoIGludCBpID0gMDsgaSA8IG50ZWw7IGkrKywgdGVsKysgKQoJCUR1bXBUcmFu
c2l0aW9uKCBmaWxlLCB0ZWwtPktleSwgdGVsLT5WYWx1ZSApOwoKCWZwcmludGYoZmlsZSwgIlxu
Iik7Cn0KCnRlbXBsYXRlIDwgY2xhc3MgU3RhdGUsIGNsYXNzIFRyYW5zaXRpb25GdW5jLCBjbGFz
cyBUcmFuc2l0aW9uID4KCQl2b2lkIEZzbUJhc2VWazxTdGF0ZSwgVHJhbnNpdGlvbkZ1bmMsIFRy
YW5zaXRpb24+OjoKCQlTZXRGaW5TdGF0ZShTdGF0ZSAqc3RhdGUpCnsKCSAKCWlmIChzdGF0ZS0+
SXNGaW5TdGF0ZSkKCQlyZXR1cm47CgkKCXN0YXRlLT5Jc0ZpblN0YXRlID0gMSA7CglGaW5TdGF0
ZVNldC5TZXQoIHN0YXRlICk7Cn0KCgp0ZW1wbGF0ZSA8IGNsYXNzIFN0YXRlLCBjbGFzcyBUcmFu
c2l0aW9uRnVuYywgY2xhc3MgVHJhbnNpdGlvbiA+CgkJdm9pZCBGc21CYXNlVms8U3RhdGUsIFRy
YW5zaXRpb25GdW5jLCBUcmFuc2l0aW9uPjo6CgkJVW5zZXRGaW5TdGF0ZShTdGF0ZSAqc3RhdGUp
CnsKCSAKCWlmICghIHN0YXRlLT5Jc0ZpblN0YXRlKQoJCXJldHVybjsKCglzdGF0ZS0+SXNGaW5T
dGF0ZSA9IDAgOwoJRmluU3RhdGVTZXQuVW5TZXQoIHN0YXRlICk7Cn0KCgp0ZW1wbGF0ZSA8IGNs
YXNzIFN0YXRlLCBjbGFzcyBUcmFuc2l0aW9uRnVuYywgY2xhc3MgVHJhbnNpdGlvbiA+CgkJdm9p
ZCBGc21CYXNlVms8U3RhdGUsIFRyYW5zaXRpb25GdW5jLCBUcmFuc2l0aW9uPjo6CgkJQWxsVHJh
bnNQcmlvciggaW50IGRlbHRhICkKewoJU3RhdGUgKnN0YXRlID0gSGVhZDsKCXdoaWxlICggc3Rh
dGUgIT0gX19udWxsICApIHsKCQlUcmFuc0VsICp0ZWwgPSBzdGF0ZS0+T3V0TGlzdC5UYWJsZTsK
CQlpbnQgbnRlbCA9IHN0YXRlLT5PdXRMaXN0LlRhYmxlTGVuZ3RoOwoJCWZvciAoaW50IGkgPSAw
OyBpIDwgbnRlbDsgaSsrLCB0ZWwrKykKCQkJdGVsLT5WYWx1ZS0+cHJpb3JpdHkgKz0gZGVsdGE7
CgoJCXN0YXRlID0gc3RhdGUtPk5leHQ7Cgl9Cn0KCnRlbXBsYXRlIDwgY2xhc3MgU3RhdGUsIGNs
YXNzIFRyYW5zaXRpb25GdW5jLCBjbGFzcyBUcmFuc2l0aW9uID4KCQl2b2lkIEZzbUJhc2VWazxT
dGF0ZSwgVHJhbnNpdGlvbkZ1bmMsIFRyYW5zaXRpb24+OjoKCQlGaW5GU01QcmlvciggaW50IGRl
bHRhICkKewoJU3RhdGUgKipzdCA9IEZpblN0YXRlU2V0LlRhYmxlOwoJaW50IG5zdCA9IEZpblN0
YXRlU2V0LlRhYmxlTGVuZ3RoOwoKCWZvciAoaW50IGkgPSAwOyBpIDwgbnN0OyBpKyssIHN0Kysp
IHsKCQlTdGF0ZSAqdGFyZyA9ICpzdDsKCQlUcmFuc0VsICp0ZWwgPSB0YXJnLT5Jbkxpc3QuVGFi
bGU7CgkJaW50IG50ZWwgPSB0YXJnLT5Jbkxpc3QuVGFibGVMZW5ndGg7CgkJZm9yIChpbnQgaiA9
IDA7IGogPCBudGVsOyBqKyssIHRlbCsrKSB7CgkJCVRyYW5zaXRpb24gKnRyYW5zID0gdGVsLT5W
YWx1ZTsKCQkJd2hpbGUgKCB0cmFucyAhPSAwICkgewoJCQkJdHJhbnMtPnByaW9yaXR5ICs9IGRl
bHRhOwoJCQkJdHJhbnMgPSB0cmFucy0+TmV4dDsKCQkJfQoJCX0KCX0KfQoKdGVtcGxhdGUgPCBj
bGFzcyBTdGF0ZSwgY2xhc3MgVHJhbnNpdGlvbkZ1bmMsIGNsYXNzIFRyYW5zaXRpb24gPgoJCXZv
aWQgRnNtQmFzZVZrPFN0YXRlLCBUcmFuc2l0aW9uRnVuYywgVHJhbnNpdGlvbj46OgoJCUxlYXZl
RlNNUHJpb3IoIGludCBkZWx0YSApCnsKCVN0YXRlICoqc3QgPSBGaW5TdGF0ZVNldC5UYWJsZTsK
CWludCBuc3QgPSBGaW5TdGF0ZVNldC5UYWJsZUxlbmd0aDsKCglmb3IgKGludCBpID0gMDsgaSA8
IG5zdDsgaSsrLCBzdCsrKQoJCSgqc3QpLT5vdXRUcmFuc2l0aW9uLnByaW9yaXR5ICs9IGRlbHRh
Owp9Cgp0ZW1wbGF0ZSA8IGNsYXNzIFN0YXRlLCBjbGFzcyBUcmFuc2l0aW9uRnVuYywgY2xhc3Mg
VHJhbnNpdGlvbiA+CgkJdm9pZCBGc21CYXNlVms8U3RhdGUsIFRyYW5zaXRpb25GdW5jLCBUcmFu
c2l0aW9uPjo6CgkJQWxsVHJhbnNGdW5jKCBUcmFuc2l0aW9uRnVuYyAqZnVuY3MsIGludCBudW1G
dW5jcyApCnsKCVN0YXRlICpzdGF0ZSA9IEhlYWQ7Cgl3aGlsZSAoIHN0YXRlICE9IF9fbnVsbCAg
KSB7CgkJVHJhbnNFbCAqdGVsID0gc3RhdGUtPk91dExpc3QuVGFibGU7CgkJaW50IG50ZWwgPSBz
dGF0ZS0+T3V0TGlzdC5UYWJsZUxlbmd0aDsKCQlmb3IgKGludCBpID0gMDsgaSA8IG50ZWw7IGkr
KywgdGVsKyspCgkJCXRlbC0+VmFsdWUtPnRyYW5zRnVuY0xpc3QuQXBwZW5kKGZ1bmNzLCBudW1G
dW5jcyk7CgoJCXN0YXRlID0gc3RhdGUtPk5leHQ7Cgl9Cn0KCnRlbXBsYXRlIDwgY2xhc3MgU3Rh
dGUsIGNsYXNzIFRyYW5zaXRpb25GdW5jLCBjbGFzcyBUcmFuc2l0aW9uID4KCQl2b2lkIEZzbUJh
c2VWazxTdGF0ZSwgVHJhbnNpdGlvbkZ1bmMsIFRyYW5zaXRpb24+OjoKCQlGaW5GU01GdW5jKCBU
cmFuc2l0aW9uRnVuYyAqZnVuY3MsIGludCBudW1GdW5jcyApCnsKCVN0YXRlICoqc3QgPSBGaW5T
dGF0ZVNldC5UYWJsZTsKCWludCBuc3QgPSBGaW5TdGF0ZVNldC5UYWJsZUxlbmd0aDsKCglmb3Ig
KGludCBpID0gMDsgaSA8IG5zdDsgaSsrLCBzdCsrKSB7CgkJU3RhdGUgKnRhcmcgPSAqc3Q7CgkJ
VHJhbnNFbCAqdGVsID0gdGFyZy0+SW5MaXN0LlRhYmxlOwoJCWludCBudGVsID0gdGFyZy0+SW5M
aXN0LlRhYmxlTGVuZ3RoOwoJCWZvciAoaW50IGogPSAwOyBqIDwgbnRlbDsgaisrLCB0ZWwrKykg
ewoJCQlUcmFuc2l0aW9uICp0cmFucyA9IHRlbC0+VmFsdWU7CgkJCXdoaWxlICggdHJhbnMgIT0g
MCApIHsKCQkJCXRyYW5zLT50cmFuc0Z1bmNMaXN0LkFwcGVuZChmdW5jcywgbnVtRnVuY3MpOwoJ
CQkJdHJhbnMgPSB0cmFucy0+TmV4dDsKCQkJfQoJCX0KCX0KfQoKdGVtcGxhdGUgPCBjbGFzcyBT
dGF0ZSwgY2xhc3MgVHJhbnNpdGlvbkZ1bmMsIGNsYXNzIFRyYW5zaXRpb24gPgoJCXZvaWQgRnNt
QmFzZVZrPFN0YXRlLCBUcmFuc2l0aW9uRnVuYywgVHJhbnNpdGlvbj46OgoJCUxlYXZlRlNNRnVu
YyggVHJhbnNpdGlvbkZ1bmMgKmZ1bmNzLCBpbnQgbnVtRnVuY3MgKQp7CglTdGF0ZSAqKnN0ID0g
RmluU3RhdGVTZXQuVGFibGU7CglpbnQgbnN0ID0gRmluU3RhdGVTZXQuVGFibGVMZW5ndGg7Cglm
b3IgKGludCBpID0gMDsgaSA8IG5zdDsgaSsrLCBzdCsrKQoJCSgqc3QpLT5vdXRUcmFuc2l0aW9u
LnRyYW5zRnVuY0xpc3QuQXBwZW5kKGZ1bmNzLCBudW1GdW5jcyk7Cn0KCgp0ZW1wbGF0ZSA8IGNs
YXNzIFN0YXRlLCBjbGFzcyBUcmFuc2l0aW9uRnVuYywgY2xhc3MgVHJhbnNpdGlvbiA+CgkJdm9p
ZCBGc21CYXNlVms8U3RhdGUsIFRyYW5zaXRpb25GdW5jLCBUcmFuc2l0aW9uPjo6U3RyaXBBbGxG
dW5jdGlvbnMoKQp7CglTdGF0ZSAqc3RhdGUgPSBIZWFkOwoJd2hpbGUgKCBzdGF0ZSApIHsKCQlz
dGF0ZS0+b3V0VHJhbnNpdGlvbi50cmFuc0Z1bmNMaXN0LkVtcHR5KCk7CgoJCVRyYW5zRWwgKnRl
bCA9IHN0YXRlLT5PdXRMaXN0LlRhYmxlOwoJCWludCBudGVsID0gc3RhdGUtPk91dExpc3QuVGFi
bGVMZW5ndGg7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCBudGVsOyBpKyssIHRlbCsrKQoJCQl0ZWwt
PlZhbHVlLT50cmFuc0Z1bmNMaXN0LkVtcHR5KCk7CgoJCXN0YXRlID0gc3RhdGUtPk5leHQ7Cgl9
Cn0KCiAKCgoKCgp0ZW1wbGF0ZSA8IGNsYXNzIFN0YXRlLCBjbGFzcyBUcmFuc2l0aW9uRnVuYywg
Y2xhc3MgVHJhbnNpdGlvbiA+CgkJdm9pZCBGc21CYXNlVms8U3RhdGUsIFRyYW5zaXRpb25GdW5j
LCBUcmFuc2l0aW9uPjo6CgkJRlNNQXR0YWNoU3RhdGVzKCBTdGF0ZURpY3QgJnN0YXRlRGljdCwg
U3RhdGVGaWxsSW5MaXN0ICZzdGZpbCwKCQkJU3RhdGUgKmZyb20sIFN0YXRlICp0bywgCgkJCWlu
dCBvbkNoYXIsIFRyYW5zaXRpb24gKnNyY1RyYW5zLCBib29sIGxlYXZpbmdGU00gKQp7CglpbnQg
bmV3VHJhbnNQcmlvciA9IHNyY1RyYW5zLT5wcmlvcml0eTsKCWlmICggbGVhdmluZ0ZTTSApCgkJ
bmV3VHJhbnNQcmlvciArPSBmcm9tLT5vdXRUcmFuc2l0aW9uLnByaW9yaXR5OwoKCSAKCWlmICgg
ZnJvbS0+T3V0TGlzdC5JbnNlcnQoIG9uQ2hhciwgMCApICkKCQlUcmFuc0VsICp0ZWwgPSBmcm9t
LT5PdXRMaXN0Lkxhc3RGb3VuZDsKCQl0ZWwtPlZhbHVlID0gbmV3IFRyYW5zaXRpb24oKTsKCX0K
CVRyYW5zaXRpb24gKnRyYW5zID0gZnJvbS0+T3V0TGlzdC5MYXN0Rm91bmQtPlZhbHVlOwoKCSAK
CWlmICggdHJhbnMtPnRvU3RhdGUgICkgewoJCSAKCQlTdGF0ZSAqZXhpc3RpbmdTdGF0ZSA9IHRy
YW5zLT50b1N0YXRlOwoJCQoJCWlmICggdHJhbnMtPnByaW9yaXR5ID4gbmV3VHJhbnNQcmlvciAp
IHsKCQkJIAoKCgkJCXJldHVybjsKCQl9CgkJZWxzZSBpZiAoIHRyYW5zLT5wcmlvcml0eSA8IG5l
d1RyYW5zUHJpb3IgKSB7CgkJCSAKCQkJRGV0YWNoU3RhdGVzKCBmcm9tLCB0cmFucy0+dG9TdGF0
ZSwgdHJhbnMsIG9uQ2hhciApOwoKCQkJIAoJCQlBdHRhY2hTdGF0ZXMoIGZyb20sIHRvLCB0cmFu
cywgb25DaGFyICk7CgkJCgkJCSAKCQkJdG8tPlN0YXRlQml0cyB8PSAweDQwIDsKCgkJCSAKCQkJ
dHJhbnMtPnByaW9yaXR5ID0gc3JjVHJhbnMtPnByaW9yaXR5OwoJCQl0cmFucy0+dHJhbnNGdW5j
TGlzdC5TZXRBcyggc3JjVHJhbnMtPnRyYW5zRnVuY0xpc3QgKTsKCgkJCSAKCQkJdHJhbnMtPk1l
cmdlVHJhbnNpdGlvbihzcmNUcmFucyk7CgkJfQoJCWVsc2UgewoJCQkgCgoKCQkJaWYgKCBleGlz
dGluZ1N0YXRlID09IHRvICkgewoJCQkJIAoJCQkJdHJhbnMtPnRyYW5zRnVuY0xpc3QuQXBwZW5k
KCBzcmNUcmFucy0+dHJhbnNGdW5jTGlzdCApOwoJCQl9CgkJCWVsc2UgewoJCQkJIAoJCQkJdHlw
ZW5hbWUgU3RhdGU6OlN0YXRlU2V0ICpzdGF0ZVNldCA9IG5ldyB0eXBlbmFtZSBTdGF0ZTo6U3Rh
dGVTZXQ7CgkJCQlpZiAoIGV4aXN0aW5nU3RhdGUtPnN0YXRlU2V0ID09IF9fbnVsbCAgKQoJCQkJ
CXN0YXRlU2V0LT5TZXQoIGV4aXN0aW5nU3RhdGUgKTsKCQkJCWVsc2UKCQkJCQlzdGF0ZVNldC0+
U2V0KCAqZXhpc3RpbmdTdGF0ZS0+c3RhdGVTZXQgKTsKCQkJCXN0YXRlU2V0LT5TZXQoIHRvICk7
CgoJCQkJIAoJCQkJU3RhdGUgKnRhcmc7CgkJCQlpZiAoIHN0YXRlRGljdC5GaW5kKCBzdGF0ZVNl
dCApICkgewoJCQkJCXRhcmcgPSBzdGF0ZURpY3QuTGFzdEZvdW5kLT5WYWx1ZTsJCgkJCQkJZGVs
ZXRlIHN0YXRlU2V0OwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJIAoKCgoJCQkJCXRhcmcgPSBuZXcg
U3RhdGUoKTsKCQkJCQlzdGZpbC5BZGRFbmQoIHRhcmcgKTsKCQkJCQl0YXJnLT5zdGF0ZVNldCA9
IHN0YXRlU2V0OwoJCQkJCXN0YXRlRGljdC5JbnNlcnQoIHN0YXRlU2V0LCB0YXJnICk7CgkJCQl9
CgoJCQkJIAoJCQkJRGV0YWNoU3RhdGVzKCBmcm9tLCBleGlzdGluZ1N0YXRlLCB0cmFucywgb25D
aGFyICk7CgoJCQkJIAoJCQkJQXR0YWNoU3RhdGVzKCBmcm9tLCB0YXJnLCB0cmFucywgb25DaGFy
ICk7CgoJCQkJIAoJCQkJdGFyZy0+U3RhdGVCaXRzIHw9IDB4NDAgOwoJCQl9CgkJfQoJfQoJZWxz
ZSB7CgkJIAoJCUF0dGFjaFN0YXRlcyggZnJvbSwgdG8sIHRyYW5zLCBvbkNoYXIgKTsKCQkKCQkg
CgkJdG8tPlN0YXRlQml0cyB8PSAweDQwIDsKCgkJIAoJCXRyYW5zLT5wcmlvcml0eSA9IHNyY1Ry
YW5zLT5wcmlvcml0eTsKCQl0cmFucy0+dHJhbnNGdW5jTGlzdC5TZXRBcyggc3JjVHJhbnMtPnRy
YW5zRnVuY0xpc3QgKTsKCgkJIAoJCXRyYW5zLT5NZXJnZVRyYW5zaXRpb24oc3JjVHJhbnMpOwoJ
fQoKCSAKCglpZiAoIGxlYXZpbmdGU00gKSB7CgkJIAoJCXRyYW5zLT50cmFuc0Z1bmNMaXN0Lklu
c2VydCggMCwgZnJvbS0+b3V0VHJhbnNpdGlvbi50cmFuc0Z1bmNMaXN0ICk7CgkJdHJhbnMtPnBy
aW9yaXR5ICs9IGZyb20tPm91dFRyYW5zaXRpb24ucHJpb3JpdHk7CgoJCSAKCQl0cmFucy0+SW5z
ZXJ0VHJhbnNpdGlvbiggJmZyb20tPm91dFRyYW5zaXRpb24gKTsKCX0KfQoKCnRlbXBsYXRlIDwg
Y2xhc3MgU3RhdGUsIGNsYXNzIFRyYW5zaXRpb25GdW5jLCBjbGFzcyBUcmFuc2l0aW9uID4KCQl2
b2lkIEZzbUJhc2VWazxTdGF0ZSwgVHJhbnNpdGlvbkZ1bmMsIFRyYW5zaXRpb24+OjoKCQlPdXRU
cmFuc0NvcHkoIFN0YXRlRGljdCAmc3RhdGVEaWN0LCBTdGF0ZUZpbGxJbkxpc3QgJnN0ZmlsLCAK
CQkJCVN0YXRlICpkZXN0LCBTdGF0ZSAqc3JjLCBib29sIGxlYXZpbmdGU00gKQp7CgkgCgoJaWYg
KCBzcmMgPT0gZGVzdCApIHsKCQl0eXBlbmFtZSBTdGF0ZTo6VHJhbnNMaXN0VHlwZSBsaXN0Q29w
eShzcmMtPk91dExpc3QpOwoJCU91dFRyYW5zQ29weShzdGF0ZURpY3QsIHN0ZmlsLCBkZXN0LCBs
aXN0Q29weSwgbGVhdmluZ0ZTTSApOwoJfQoJZWxzZQoJCU91dFRyYW5zQ29weShzdGF0ZURpY3Qs
IHN0ZmlsLCBkZXN0LCBzcmMtPk91dExpc3QsIGxlYXZpbmdGU00gKTsKfQoKdGVtcGxhdGUgPCBj
bGFzcyBTdGF0ZSwgY2xhc3MgVHJhbnNpdGlvbkZ1bmMsIGNsYXNzIFRyYW5zaXRpb24gPgoJCXZv
aWQgRnNtQmFzZVZrPFN0YXRlLCBUcmFuc2l0aW9uRnVuYywgVHJhbnNpdGlvbj46OgoJCU91dFRy
YW5zQ29weSggU3RhdGVEaWN0ICZzdGF0ZURpY3QsIFN0YXRlRmlsbEluTGlzdCAmc3RmaWwsIAoJ
CQkJU3RhdGUgKmRlc3QsIHR5cGVuYW1lIFN0YXRlOjpUcmFuc0xpc3RUeXBlICZzcmNMaXN0LCBi
b29sIGxlYXZpbmdGU00gKQp7CgkgCglUcmFuc0VsICp0ZWwgPSBzcmNMaXN0LlRhYmxlOwoJaW50
IG50ZWwgPSBzcmNMaXN0LlRhYmxlTGVuZ3RoOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBudGVsOyBp
KyssIHRlbCsrKSB7CgkJVHJhbnNpdGlvbiAqdHJhbnMgPSB0ZWwtPlZhbHVlOwoJCUZTTUF0dGFj
aFN0YXRlcyggc3RhdGVEaWN0LCBzdGZpbCwgZGVzdCwgdHJhbnMtPnRvU3RhdGUsIHRlbC0+S2V5
LAoJCQkJdHJhbnMsIGxlYXZpbmdGU00gKTsKCX0KfQoKCnRlbXBsYXRlIDwgY2xhc3MgU3RhdGUs
IGNsYXNzIFRyYW5zaXRpb25GdW5jLCBjbGFzcyBUcmFuc2l0aW9uID4KCQl2b2lkIEZzbUJhc2VW
azxTdGF0ZSwgVHJhbnNpdGlvbkZ1bmMsIFRyYW5zaXRpb24+OjoKCQlJblRyYW5zTW92ZShTdGF0
ZSAqZGVzdCwgU3RhdGUgKnNyYykKewoJIAoJaWYgKCEoICBkZXN0ICE9IHNyYyAgKSkgeyBjZXJy
IDw8ICJBc3NlcnRpb24gZmFpbGVkOiBsaW5lICIgPDwgNTU5IDw8ICIgZmlsZSAiIDw8ICIuLi9p
bmNsdWRlL0ZzbUJhc2VWa0ltcC5oIiA8PCAiXG4iOyBhYm9ydCgpOyB9IDsKCglUcmFuc0VsICp0
ZWwgPSBzcmMtPkluTGlzdC5UYWJsZTsKCWludCBudGVsID0gc3JjLT5Jbkxpc3QuVGFibGVMZW5n
dGg7Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBudGVsOyBpKyssIHRlbCsrICkgewoJCXdoaWxlICgg
dGVsLT5WYWx1ZSAhPSBfX251bGwgICkgewoJCQlUcmFuc2l0aW9uICp0cmFucyA9IHRlbC0+VmFs
dWU7CgkJCVN0YXRlICpmcm9tU3RhdGUgPSB0cmFucy0+ZnJvbVN0YXRlOwoJCQlEZXRhY2hTdGF0
ZXMoIGZyb21TdGF0ZSwgc3JjLCB0cmFucywgdGVsLT5LZXkgKTsKCQkJQXR0YWNoU3RhdGVzKCBm
cm9tU3RhdGUsIGRlc3QsIHRyYW5zLCB0ZWwtPktleSApOwoJCX0KCX0KfQoKdGVtcGxhdGUgPCBj
bGFzcyBTdGF0ZSwgY2xhc3MgVHJhbnNpdGlvbkZ1bmMsIGNsYXNzIFRyYW5zaXRpb24gPgoJCXZv
aWQgRnNtQmFzZVZrPFN0YXRlLCBUcmFuc2l0aW9uRnVuYywgVHJhbnNpdGlvbj46OgoJCU1hcmtQ
YWlyc09uSW4oIE1hcmtJbmRleCAmbWFya0luZGV4LCBTdGF0ZSAqciwgU3RhdGUgKnMgKQp7Cgkg
CglUcmFuc0VsICpyVHJhbnNFbCA9IHItPkluTGlzdC5UYWJsZTsKCVRyYW5zRWwgKnJFbmRUcmFu
c0VsID0gclRyYW5zRWwgKyByLT5Jbkxpc3QuVGFibGVMZW5ndGg7CglUcmFuc0VsICpzVHJhbnNF
bCA9IHMtPkluTGlzdC5UYWJsZTsKCVRyYW5zRWwgKnNFbmRUcmFuc0VsID0gc1RyYW5zRWwgKyBz
LT5Jbkxpc3QuVGFibGVMZW5ndGg7CgoJIAoJaW50IHJJdGVtLCBzSXRlbTsKCgl3aGlsZSAoIDEg
ICkgewoJCSAKCQlpZiAoIHJUcmFuc0VsID09IHJFbmRUcmFuc0VsIHx8IHNUcmFuc0VsID09IHNF
bmRUcmFuc0VsICkgewoJCQkgCgkJCWJyZWFrOwoJCX0KCQllbHNlIHsKCQkJIAoKCQkJckl0ZW0g
PSByVHJhbnNFbC0+S2V5OwoJCQlzSXRlbSA9IHNUcmFuc0VsLT5LZXk7CgkJCWlmICggckl0ZW0g
PCBzSXRlbSApIHsKCQkJCSAKCQkJCXJUcmFuc0VsKys7CgkJCX0KCQkJZWxzZSBpZiAoIHNJdGVt
IDwgckl0ZW0gKSB7CgkJCQkgCgkJCQlzVHJhbnNFbCsrOwoJCQl9CgkJCWVsc2UgewoJCQkJIAoK
CQkJCWlmICggclRyYW5zRWwtPlZhbHVlID09IF9fbnVsbCAgfHwgc1RyYW5zRWwtPlZhbHVlID09
IF9fbnVsbCAgKQoJCQkJCWNvbnRpbnVlOwoKCQkJCSAKCQkJCVRyYW5zaXRpb24gKnJUcmFucyA9
IHJUcmFuc0VsLT5WYWx1ZTsKCQkJCXdoaWxlICggclRyYW5zICE9IF9fbnVsbCAgKSB7CgkJCQkJ
U3RhdGUgKnAgPSByVHJhbnMtPmZyb21TdGF0ZTsKCgkJCQkJIAoJCQkJCVRyYW5zaXRpb24gKnNU
cmFucyA9IHNUcmFuc0VsLT5WYWx1ZTsKCQkJCQl3aGlsZSAoIHNUcmFucyAhPSBfX251bGwgICkg
ewoJCQkJCQlTdGF0ZSAqcSA9IHNUcmFucy0+ZnJvbVN0YXRlOwoKCQkJCQkJIAoJCQkJCQlpZiAo
IHAgIT0gcSAmJiAhIG1hcmtJbmRleC5Jc1BhaXJNYXJrZWQocC0+TnVtLCBxLT5OdW0pICkKCQkJ
CQkJCW1hcmtJbmRleC5NYXJrUGFpcihwLT5OdW0sIHEtPk51bSk7CgkJCQkKCQkJCQkJc1RyYW5z
ID0gc1RyYW5zLT5OZXh0OwoJCQkJCX0KCQkJCQlyVHJhbnMgPSByVHJhbnMtPk5leHQ7CgkJCQl9
CgkJCQlyVHJhbnNFbCsrOwoJCQkJc1RyYW5zRWwrKzsgCgkJCX0KCQl9Cgl9Cn0KCnRlbXBsYXRl
IDwgY2xhc3MgU3RhdGUsIGNsYXNzIFRyYW5zaXRpb25GdW5jLCBjbGFzcyBUcmFuc2l0aW9uID4K
CQlib29sIEZzbUJhc2VWazxTdGF0ZSwgVHJhbnNpdGlvbkZ1bmMsIFRyYW5zaXRpb24+OjoKCQlT
aG91bGRNYXJrUGFpclRyYW5zRGF0YShNYXJrSW5kZXggJm1hcmtJbmRleCwgU3RhdGUgKnIsIFN0
YXRlICpzKQp7Cglib29sIHNob3VsZE1hcmtQYWlyID0gMCA7CgoJIAoJVHJhbnNFbCAqclRyYW5z
RWwgPSByLT5PdXRMaXN0LlRhYmxlOwoJVHJhbnNFbCAqckVuZFRyYW5zRWwgPSByVHJhbnNFbCAr
IHItPk91dExpc3QuVGFibGVMZW5ndGg7CglUcmFuc0VsICpzVHJhbnNFbCA9IHMtPk91dExpc3Qu
VGFibGU7CglUcmFuc0VsICpzRW5kVHJhbnNFbCA9IHNUcmFuc0VsICsgcy0+T3V0TGlzdC5UYWJs
ZUxlbmd0aDsKCgkgCglpbnQgckl0ZW0sIHNJdGVtOwoKCXdoaWxlICggMSAgKSB7CgkJIAoJCWlm
ICggclRyYW5zRWwgPT0gckVuZFRyYW5zRWwgKSB7CgkJCSAKCgkJCWlmICAoIHNUcmFuc0VsICE9
IHNFbmRUcmFuc0VsICkKCQkJCXNob3VsZE1hcmtQYWlyID0gMSA7CgkJCWJyZWFrOwoJCX0KCQkg
CgkJZWxzZSBpZiAoIHNUcmFuc0VsID09IHNFbmRUcmFuc0VsICkgewoJCQkgCgoJCQlzaG91bGRN
YXJrUGFpciA9IDEgOwoJCQlicmVhazsKCQl9CgkJZWxzZSB7CgkJCSAKCgkJCXJJdGVtID0gclRy
YW5zRWwtPktleTsKCQkJc0l0ZW0gPSBzVHJhbnNFbC0+S2V5OwoJCQlpZiAoIHJJdGVtIDwgc0l0
ZW0gKSB7CgkJCQkgCgkJCQlzaG91bGRNYXJrUGFpciA9IDEgOwoJCQkJYnJlYWs7CgkJCX0KCQkJ
ZWxzZSBpZiAoIHNJdGVtIDwgckl0ZW0gKSB7CgkJCQkgCgkJCQlzaG91bGRNYXJrUGFpciA9IDEg
OwoJCQkJYnJlYWs7CgkJCX0KCQkJZWxzZSB7CgkJCQlpZiAoIG1hcmtJbmRleC5Jc1BhaXJNYXJr
ZWQoIHJUcmFuc0VsLT5WYWx1ZS0+dG9TdGF0ZS0+TnVtLAoJCQkJCQkJc1RyYW5zRWwtPlZhbHVl
LT50b1N0YXRlLT5OdW0gKSApCgkJCQkJc2hvdWxkTWFya1BhaXIgPSAxIDsKCQkJCWVsc2UgaWYg
KCBUcmFuc2l0aW9uOjpDb21wYXJlKCooclRyYW5zRWwtPlZhbHVlKSwgKihzVHJhbnNFbC0+VmFs
dWUpKSAhPSAwICkKCQkJCQlzaG91bGRNYXJrUGFpciA9IDEgOwoKCQkJCXJUcmFuc0VsKys7CgkJ
CQlzVHJhbnNFbCsrOyAKCQkJfQoJCX0KCX0KCXJldHVybiBzaG91bGRNYXJrUGFpcjsKfQoKdGVt
cGxhdGUgPCBjbGFzcyBTdGF0ZSwgY2xhc3MgVHJhbnNpdGlvbkZ1bmMsIGNsYXNzIFRyYW5zaXRp
b24gPgoJCXZvaWQgRnNtQmFzZVZrPFN0YXRlLCBUcmFuc2l0aW9uRnVuYywgVHJhbnNpdGlvbj46
OgoJCU1hcmtSZWFjaGFibGVGcm9tSGVyZVJldmVyc2UoIFN0YXRlICpzdGF0ZSApCnsKCSAKCWlm
IChzdGF0ZS0+SXNNYXJrZWQpIHJldHVybjsKCQoJIAoJc3RhdGUtPklzTWFya2VkID0gMSA7CgoJ
IAoJVHJhbnNFbCAqdGVsID0gc3RhdGUtPkluTGlzdC5UYWJsZTsKCWludCBudGVsID0gc3RhdGUt
PkluTGlzdC5UYWJsZUxlbmd0aDsKCWZvciAoaW50IGkgPSAwOyBpIDwgbnRlbDsgaSsrLCB0ZWwr
KykgewoJCVRyYW5zaXRpb24gKnRyYW5zID0gdGVsLT5WYWx1ZTsKCQl3aGlsZSAoIHRyYW5zICkg
ewoJCQlNYXJrUmVhY2hhYmxlRnJvbUhlcmVSZXZlcnNlKCB0cmFucy0+ZnJvbVN0YXRlICk7CgkJ
CXRyYW5zID0gdHJhbnMtPk5leHQ7CgkJfQoJfQp9Cgp0ZW1wbGF0ZSA8IGNsYXNzIFN0YXRlLCBj
bGFzcyBUcmFuc2l0aW9uRnVuYywgY2xhc3MgVHJhbnNpdGlvbiA+CgkJdm9pZCBGc21CYXNlVms8
U3RhdGUsIFRyYW5zaXRpb25GdW5jLCBUcmFuc2l0aW9uPjo6CgkJTWFya1JlYWNoYWJsZUZyb21I
ZXJlKCBTdGF0ZSAqc3RhdGUgKQp7CgkgCglpZiAoc3RhdGUtPklzTWFya2VkKSByZXR1cm47CgkK
CSAKCXN0YXRlLT5Jc01hcmtlZCA9IDEgOwoKCSAKCVRyYW5zRWwgKnRlbCA9IHN0YXRlLT5PdXRM
aXN0LlRhYmxlOwoJaW50IG50ZWwgPSBzdGF0ZS0+T3V0TGlzdC5UYWJsZUxlbmd0aDsKCWZvciAo
aW50IGkgPSAwOyBpIDwgbnRlbDsgaSsrLCB0ZWwrKykKCQlNYXJrUmVhY2hhYmxlRnJvbUhlcmUo
IHRlbC0+VmFsdWUtPnRvU3RhdGUgKTsKfQoKCgojIDggInRlc3RGc21HcmFwaC5jcHAiIDIKCiMg
MSAiLi4vaW5jbHVkZS9Gc21HcmFwaC5oIiAxCiAKCgoKCgoKCgojIDEgIi4uL2luY2x1ZGUvY2hh
cnNldC5oIiAxCgoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CnR5cGVkZWYgdW5zaWduZWQg
Y2hhciBieXRlOwoKY2xhc3MgQnl0ZVNldAp7CnB1YmxpYzoKCWVudW0gQ2hhclNldCB7CgkJYXNj
aWksCgkJZXh0ZW5kLAoJCWFsbnVtLAoJCWFscGhhLAoJCWNudHJsLAoJCWRpZ2l0LAoJCWdyYXBo
LAoJCWxvd2VyLAoJCXByaW50LAoJCXB1bmN0LAoJCXNwYWNlLAoJCXVwcGVyLAoJCXhkaWdpdCwK
CX07CgoJQnl0ZVNldCgpCgkJeyBFbXB0eSgpOyB9CgoJQnl0ZVNldChieXRlICpzZXQsIGludCBs
ZW4pCgkJeyBFbXB0eSgpOyBTZXRCeXRlcyhzZXQsIGxlbik7IH0KCglCeXRlU2V0KENoYXJTZXQg
Y3MpCgkJeyBFbXB0eSgpOyBTZXRDaGFyU2V0KGNzKTsgfQoKCXZvaWQgRW1wdHkoKTsKCgl2b2lk
IFNldEJ5dGUodWludCBjKQoJCXsgZGF0YVtjID4+IDVdIHw9IDB4ODAwMDAwMDAgPj4gKGMgJiAw
eDFmKTsgfQoJdm9pZCBTZXRCeXRlcyhieXRlICpzZXQsIGludCBsZW4pOwoJdm9pZCBTZXRDaGFy
U2V0KENoYXJTZXQgY3MpOwoKCXZvaWQgVW5zZXRCeXRlKHVpbnQgYykKCQl7IGRhdGFbYyA+PiA1
XSAmPSB+ICgweDgwMDAwMDAwID4+IChjICYgMHgxZikpOyB9Cgl2b2lkIFVuc2V0Qnl0ZXMoYnl0
ZSAqc2V0LCBpbnQgbGVuKTsKCXZvaWQgVW5zZXRDaGFyU2V0KENoYXJTZXQgY3MpOwoKCXZvaWQg
VG9nZ2xlQnl0ZSh1aW50IGMpCgkJeyBkYXRhW2MgPj4gNV0gXj0gMHg4MDAwMDAwMCA+PiAoYyAm
IDB4MWYpOyB9Cgl2b2lkIFRvZ2dsZUJ5dGVzKGJ5dGUgKnNldCwgaW50IGxlbik7Cgl2b2lkIFRv
Z2dsZUNoYXJTZXQoQ2hhclNldCBjcyk7CgoJdm9pZCBvcGVyYXRvciA9IChCeXRlU2V0ICZzZXQp
Cgl7CgkJZGF0YVswXSA9IHNldC5kYXRhWzBdOyBkYXRhWzFdID0gc2V0LmRhdGFbMV07CgkJZGF0
YVsyXSA9IHNldC5kYXRhWzJdOyBkYXRhWzNdID0gc2V0LmRhdGFbM107CgkJZGF0YVs0XSA9IHNl
dC5kYXRhWzRdOyBkYXRhWzVdID0gc2V0LmRhdGFbNV07CgkJZGF0YVs2XSA9IHNldC5kYXRhWzZd
OyBkYXRhWzddID0gc2V0LmRhdGFbN107Cgl9CgoJaW50IElzU2V0KHVpbnQgYykKCQl7IHJldHVy
biBkYXRhW2MgPj4gNV0gJiAoIDB4ODAwMDAwMDAgPj4gKGMgJiAweDFmKSApOyB9CgoJdm9pZCBQ
cmludFRob3NlU2V0KCk7CgkKCXVpbnQgZGF0YVs4XTsKfTsKCgoKIyAxMCAiLi4vaW5jbHVkZS9G
c21HcmFwaC5oIiAyCgoKCgoKCiAKCgp0ZW1wbGF0ZSA8IGNsYXNzIFN0YXRlLAoJCQljbGFzcyBU
cmFuc2l0aW9uRnVuYywKCQkJY2xhc3MgVHJhbnNpdGlvbiwKCQkJY2xhc3MgQmFzZUZzbUdyYXBo
ID4KCQlzdHJ1Y3QgRnNtR3JhcGggOiBwdWJsaWMgQmFzZUZzbUdyYXBoCnsKcHVibGljOgoJRnNt
R3JhcGgoKSB7fQoJRnNtR3JhcGgoRnNtR3JhcGggJmdyYXBoKSA6IEJhc2VGc21HcmFwaChncmFw
aCkge30KCgkgCgl0eXBlZGVmIERvdWJsZUxpc3Q8IFN0YXRlID4gQmFzZUxpc3RUeXBlOwoKCSAK
CVN0YXRlICpOZXdTdGF0ZShib29sIGlzRmluU3RhdGUgPSAwICk7CgoJIAoJc3RhdGljIEZzbUdy
YXBoICpBbmRGU00oIGNoYXIgKnNldCApOwoJc3RhdGljIEZzbUdyYXBoICpPckZTTSggY2hhciAq
c2V0ICk7CglzdGF0aWMgRnNtR3JhcGggKk9yRlNNKCBCeXRlU2V0IHNldCApOwoJc3RhdGljIEZz
bUdyYXBoICpEb3RGU00oICk7CglzdGF0aWMgRnNtR3JhcGggKk51bGxGU00oICk7CgoJIAoJc3Rh
dGljIEZzbUdyYXBoICpTdGFyKEZzbUdyYXBoICpmc20pOwoJc3RhdGljIEZzbUdyYXBoICpOb3Qo
RnNtR3JhcGggKmZzbSk7CglzdGF0aWMgRnNtR3JhcGggKkFuZChGc21HcmFwaCAqZnNtMSwgRnNt
R3JhcGggKmZzbTIpOwoJc3RhdGljIEZzbUdyYXBoICpEb09yKEZzbUdyYXBoICpnMSwgRnNtR3Jh
cGggKmcyKTsKCXN0YXRpYyBGc21HcmFwaCAqT3IoRnNtR3JhcGggKmZzbTEsIEZzbUdyYXBoICpm
c20yKTsKCXN0YXRpYyBGc21HcmFwaCAqSW50ZXJzZWN0KEZzbUdyYXBoICpmc20xLCBGc21HcmFw
aCAqZnNtMik7CglzdGF0aWMgRnNtR3JhcGggKlN1YnRyYWN0KEZzbUdyYXBoICpmc20xLCBGc21H
cmFwaCAqZnNtMik7CgoJIAoJdm9pZCBTZXRTdGF0ZU51bWJlcnMoKTsKCgkgCgl2b2lkIFVuc2V0
QWxsRmluU3RhdGVzKCk7CgoJIAoJdm9pZCBTZXRGaW5CaXRzKCBpbnQgYWxsU3RhdGVCaXRzLCBp
bnQgZmluU3RhdGVCaXRzICk7CgoJIAoJdm9pZCBNZXJnZVN0YXRlcyggdHlwZW5hbWUgQmFzZUZz
bUdyYXBoOjpTdGF0ZURpY3QgJnN0YXRlRGljdCwKCQkJdHlwZW5hbWUgQmFzZUZzbUdyYXBoOjpT
dGF0ZUZpbGxJbkxpc3QgJnN0ZmlsLAoJCQlTdGF0ZSAqbmV3U3RhdGUsIHR5cGVuYW1lIFN0YXRl
OjpTdGF0ZVNldCAmc3RhdGVTZXQsCgkJCWJvb2wgbGVhdmluZ0ZTTSApOwoKCSAKCgl2b2lkIEZp
bGxJblN0YXRlcyggdHlwZW5hbWUgQmFzZUZzbUdyYXBoOjpTdGF0ZURpY3QgJnN0YXRlRGljdCwK
CQkJdHlwZW5hbWUgQmFzZUZzbUdyYXBoOjpTdGF0ZUZpbGxJbkxpc3QgJnN0ZmlsICk7CgoJIAoK
CSAKCgoJdm9pZCBDb25kZW5zZSgpOwoKCSAKCXZvaWQgRXhoYXVzdEFsbCggdHlwZW5hbWUgQmFz
ZUZzbUdyYXBoOjpNYXJrSW5kZXggJm1hcmtJbmRleCApOwoKCSAKCgl2b2lkIFJlbW92ZURlYWRF
bmRTdGF0ZXMoKTsKCgkgCgoJdm9pZCBSZW1vdmVPYmxpdmlvdXNTdGF0ZXMoKTsKCQoJIAoJdm9p
ZCBNZXJnZVBJbnRvUShTdGF0ZSAqcCwgU3RhdGUgKnEpOwoKCSAKCgl2b2lkIE1lcmdlVW5tYXJr
ZWRQYWlycyggdHlwZW5hbWUgQmFzZUZzbUdyYXBoOjpNYXJrSW5kZXggJm1hcmtJbmRleCApOwoK
CSAKCXZvaWQgRHVtcCggRklMRSAqZmlsZSApOwp9OwoKCiMgOSAidGVzdEZzbUdyYXBoLmNwcCIg
MgoKIyAxICIuLi9pbmNsdWRlL0ZzbUdyYXBoSW1wLmgiIDEKIAoKCgoKCgoKCgoKCnRlbXBsYXRl
IDwgY2xhc3MgU3RhdGUsIGNsYXNzIFRyYW5zaXRpb25GdW5jLCBjbGFzcyBUcmFuc2l0aW9uLCBj
bGFzcyBCYXNlRnNtR3JhcGggPgoJCVN0YXRlICpGc21HcmFwaDxTdGF0ZSwgVHJhbnNpdGlvbkZ1
bmMsIFRyYW5zaXRpb24sIEJhc2VGc21HcmFwaD46OgoJCU5ld1N0YXRlKGJvb2wgaXNGaW5TdGF0
ZSkKewoJIAoJQmFzZUxpc3RUeXBlOjpBZGRFbmQobmV3IFN0YXRlKCkpOwoKCSAKCWlmIChpc0Zp
blN0YXRlKQoJCVNldEZpblN0YXRlKFRhaWwpOwoKCSAKCXJldHVybiBUYWlsOwp9Cgp0ZW1wbGF0
ZSA8IGNsYXNzIFN0YXRlLCBjbGFzcyBUcmFuc2l0aW9uRnVuYywgY2xhc3MgVHJhbnNpdGlvbiwg
Y2xhc3MgQmFzZUZzbUdyYXBoID4KCQlGc21HcmFwaDxTdGF0ZSwgVHJhbnNpdGlvbkZ1bmMsIFRy
YW5zaXRpb24sIEJhc2VGc21HcmFwaD4qCgkJRnNtR3JhcGg8U3RhdGUsIFRyYW5zaXRpb25GdW5j
LCBUcmFuc2l0aW9uLCBCYXNlRnNtR3JhcGg+OjoKCQlBbmRGU00oIGNoYXIgKnNldCApCnsKCSAK
CUZzbUdyYXBoICpyZXRWYWwgPSBuZXcgRnNtR3JhcGg7CgoJIAoJU3RhdGUgKmxhc3QgPSByZXRW
YWwtPk5ld1N0YXRlKCk7CglTdGF0ZSAqbmV3U3RhdGU7CgoJIAoJcmV0VmFsLT5TdGFydFN0YXRl
ID0gbGFzdDsKCXdoaWxlICgqc2V0KSB7CgkJbmV3U3RhdGUgPSByZXRWYWwtPk5ld1N0YXRlKCk7
CgkJcmV0VmFsLT5BdHRhY2hTdGF0ZXMobGFzdCwgbmV3U3RhdGUsICpzZXQpOwoJCWxhc3QgPSBu
ZXdTdGF0ZTsKCQlzZXQrKzsKCX0KCgkgCglyZXRWYWwtPlNldEZpblN0YXRlKGxhc3QpOwoKCXJl
dHVybiByZXRWYWw7Cn0KCgp0ZW1wbGF0ZSA8IGNsYXNzIFN0YXRlLCBjbGFzcyBUcmFuc2l0aW9u
RnVuYywgY2xhc3MgVHJhbnNpdGlvbiwgY2xhc3MgQmFzZUZzbUdyYXBoID4KCQlGc21HcmFwaDxT
dGF0ZSwgVHJhbnNpdGlvbkZ1bmMsIFRyYW5zaXRpb24sIEJhc2VGc21HcmFwaD4qCgkJRnNtR3Jh
cGg8U3RhdGUsIFRyYW5zaXRpb25GdW5jLCBUcmFuc2l0aW9uLCBCYXNlRnNtR3JhcGg+OjoKCQlP
ckZTTSggY2hhciAqc2V0ICkKewoJIAoKCUJ5dGVTZXQgYnM7CgoJIAoJRnNtR3JhcGggKnJldFZh
bCA9IG5ldyBGc21HcmFwaDsKCgkgCglTdGF0ZSAqc3RhcnQgPSByZXRWYWwtPk5ld1N0YXRlKCk7
CglTdGF0ZSAqZW5kID0gcmV0VmFsLT5OZXdTdGF0ZSgxICk7CgoJcmV0VmFsLT5TdGFydFN0YXRl
ID0gc3RhcnQ7Cgl3aGlsZSAoKnNldCkgewoJCWlmICggISBicy5Jc1NldCggKnNldCApICkgewoJ
CQlyZXRWYWwtPkF0dGFjaFN0YXRlcyhzdGFydCwgZW5kLCAqc2V0KTsKCQkJYnMuU2V0Qnl0ZSgg
KnNldCApOwoJCX0KCQlzZXQrKzsKCX0KCglyZXR1cm4gcmV0VmFsOwp9Cgp0ZW1wbGF0ZSA8IGNs
YXNzIFN0YXRlLCBjbGFzcyBUcmFuc2l0aW9uRnVuYywgY2xhc3MgVHJhbnNpdGlvbiwgY2xhc3Mg
QmFzZUZzbUdyYXBoID4KCQlGc21HcmFwaDxTdGF0ZSwgVHJhbnNpdGlvbkZ1bmMsIFRyYW5zaXRp
b24sIEJhc2VGc21HcmFwaD4qCgkJRnNtR3JhcGg8U3RhdGUsIFRyYW5zaXRpb25GdW5jLCBUcmFu
c2l0aW9uLCBCYXNlRnNtR3JhcGg+OjoKCQlPckZTTSggQnl0ZVNldCBicyApCnsKCSAKCUZzbUdy
YXBoICpyZXRWYWwgPSBuZXcgRnNtR3JhcGg7CgoJIAoJU3RhdGUgKnN0YXJ0ID0gcmV0VmFsLT5O
ZXdTdGF0ZSgpOwoJU3RhdGUgKmVuZCA9IHJldFZhbC0+TmV3U3RhdGUoMSApOwoKCSAKCXJldFZh
bC0+U3RhcnRTdGF0ZSA9IHN0YXJ0OwoJZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewoJ
CWlmICggYnMuSXNTZXQoaSkgKSB7CgkJCSAKCQkJcmV0VmFsLT5BdHRhY2hTdGF0ZXMoIHN0YXJ0
LCBlbmQsIGkgKTsKCQl9Cgl9CgoJcmV0dXJuIHJldFZhbDsKfQoKdGVtcGxhdGUgPCBjbGFzcyBT
dGF0ZSwgY2xhc3MgVHJhbnNpdGlvbkZ1bmMsIGNsYXNzIFRyYW5zaXRpb24sIGNsYXNzIEJhc2VG
c21HcmFwaCA+CgkJRnNtR3JhcGg8U3RhdGUsIFRyYW5zaXRpb25GdW5jLCBUcmFuc2l0aW9uLCBC
YXNlRnNtR3JhcGg+KgoJCUZzbUdyYXBoPFN0YXRlLCBUcmFuc2l0aW9uRnVuYywgVHJhbnNpdGlv
biwgQmFzZUZzbUdyYXBoPjo6CgkJRG90RlNNKCApCnsKCUJ5dGVTZXQgYnMoQnl0ZVNldDo6YXNj
aWkpOwoJcmV0dXJuIE9yRlNNKGJzKTsKfQoKdGVtcGxhdGUgPCBjbGFzcyBTdGF0ZSwgY2xhc3Mg
VHJhbnNpdGlvbkZ1bmMsIGNsYXNzIFRyYW5zaXRpb24sIGNsYXNzIEJhc2VGc21HcmFwaCA+CgkJ
RnNtR3JhcGg8U3RhdGUsIFRyYW5zaXRpb25GdW5jLCBUcmFuc2l0aW9uLCBCYXNlRnNtR3JhcGg+
KgoJCUZzbUdyYXBoPFN0YXRlLCBUcmFuc2l0aW9uRnVuYywgVHJhbnNpdGlvbiwgQmFzZUZzbUdy
YXBoPjo6CgkJTnVsbEZTTSgpCnsKCSAKCUZzbUdyYXBoICpyZXRWYWwgPSBuZXcgRnNtR3JhcGg7
CgoJIAoKCXJldFZhbC0+U3RhcnRTdGF0ZSA9IHJldFZhbC0+TmV3U3RhdGUoMSApOwoKCSAKCXJl
dHVybiByZXRWYWw7Cn0KCnRlbXBsYXRlIDwgY2xhc3MgU3RhdGUsIGNsYXNzIFRyYW5zaXRpb25G
dW5jLCBjbGFzcyBUcmFuc2l0aW9uLCBjbGFzcyBCYXNlRnNtR3JhcGggPgoJCUZzbUdyYXBoPFN0
YXRlLCBUcmFuc2l0aW9uRnVuYywgVHJhbnNpdGlvbiwgQmFzZUZzbUdyYXBoPioKCQlGc21HcmFw
aDxTdGF0ZSwgVHJhbnNpdGlvbkZ1bmMsIFRyYW5zaXRpb24sIEJhc2VGc21HcmFwaD46OgoJCVN0
YXIoRnNtR3JhcGggKmcxKQp7CglnMS0+U2V0RmluQml0cygweDA4ICwgMCk7CgoJIAoJdHlwZW5h
bWUgU3RhdGU6OlN0YXRlU2V0IHN0YXJ0U3RhdGVTZXQ7CglzdGFydFN0YXRlU2V0LlNldCggZzEt
PlN0YXJ0U3RhdGUgKTsKCgkgCgl0eXBlbmFtZSBCYXNlRnNtR3JhcGg6OlN0YXRlRmlsbEluTGlz
dCBzdGZpbDsKCXR5cGVuYW1lIEJhc2VGc21HcmFwaDo6U3RhdGVEaWN0IHN0YXRlRGljdDsKCgkg
Cgl0eXBlbmFtZSBTdGF0ZTo6U3RhdGVTZXQgZmluU3RhdGVTZXQoZzEtPkZpblN0YXRlU2V0KTsK
CVN0YXRlICoqc3QgPSBmaW5TdGF0ZVNldC5UYWJsZTsKCWludCBuc3QgPSBmaW5TdGF0ZVNldC5U
YWJsZUxlbmd0aDsKCWZvciAoaW50IGkgPSAwOyBpIDwgbnN0OyBpKyssIHN0KyspCgkJZzEtPk1l
cmdlU3RhdGVzKCBzdGF0ZURpY3QsIHN0ZmlsLCAqc3QsIHN0YXJ0U3RhdGVTZXQsIDEgICk7CgoJ
ZzEtPlNldEZpblN0YXRlKGcxLT5TdGFydFN0YXRlKTsKCglnMS0+RmlsbEluU3RhdGVzKCBzdGF0
ZURpY3QsIHN0ZmlsICk7CgoJZzEtPlJlbW92ZU9ibGl2aW91c1N0YXRlcygpOwoJZzEtPkNvbmRl
bnNlKCk7CgoJcmV0dXJuIGcxOwp9Cgp0ZW1wbGF0ZSA8IGNsYXNzIFN0YXRlLCBjbGFzcyBUcmFu
c2l0aW9uRnVuYywgY2xhc3MgVHJhbnNpdGlvbiwgY2xhc3MgQmFzZUZzbUdyYXBoID4KCQlGc21H
cmFwaDxTdGF0ZSwgVHJhbnNpdGlvbkZ1bmMsIFRyYW5zaXRpb24sIEJhc2VGc21HcmFwaD4qCgkJ
RnNtR3JhcGg8U3RhdGUsIFRyYW5zaXRpb25GdW5jLCBUcmFuc2l0aW9uLCBCYXNlRnNtR3JhcGg+
OjoKCQlOb3QoRnNtR3JhcGggKmcxKQp7CglGc21HcmFwaCAqZyA9IERvdEZTTSgpOwkKCWcgPSBT
dGFyKGcpOwoJcmV0dXJuIFN1YnRyYWN0KGcsIGcxKTsKfQoKdGVtcGxhdGUgPCBjbGFzcyBTdGF0
ZSwgY2xhc3MgVHJhbnNpdGlvbkZ1bmMsIGNsYXNzIFRyYW5zaXRpb24sIGNsYXNzIEJhc2VGc21H
cmFwaCA+CgkJRnNtR3JhcGg8U3RhdGUsIFRyYW5zaXRpb25GdW5jLCBUcmFuc2l0aW9uLCBCYXNl
RnNtR3JhcGg+KgoJCUZzbUdyYXBoPFN0YXRlLCBUcmFuc2l0aW9uRnVuYywgVHJhbnNpdGlvbiwg
QmFzZUZzbUdyYXBoPjo6CgkJQW5kKEZzbUdyYXBoICpnMSwgRnNtR3JhcGggKmcyKQp7CgkgCgoJ
ZzEtPlNldEZpbkJpdHMoMHgwOCAsIDApOwoJZzItPlNldEZpbkJpdHMoMHgxMCAsIDApOwoKCSAK
CXR5cGVuYW1lIFN0YXRlOjpTdGF0ZVNldCBzdGFydFN0YXRlU2V0OwoJc3RhcnRTdGF0ZVNldC5T
ZXQoIGcyLT5TdGFydFN0YXRlICk7CgoJIAoJdHlwZW5hbWUgQmFzZUZzbUdyYXBoOjpTdGF0ZUZp
bGxJbkxpc3Qgc3RmaWw7Cgl0eXBlbmFtZSBCYXNlRnNtR3JhcGg6OlN0YXRlRGljdCBzdGF0ZURp
Y3Q7CgoJIAoKCXR5cGVuYW1lIFN0YXRlOjpTdGF0ZVNldCBmaW5TdGF0ZVNldChnMS0+RmluU3Rh
dGVTZXQpOwoKCSAKCWcxLT5VbnNldEFsbEZpblN0YXRlcygpOwoKCSAKCWcxLT5BZGRFbmQoICpn
MiApOwoJZzEtPkZpblN0YXRlU2V0LlNldCggZzItPkZpblN0YXRlU2V0ICk7CgkKCSAKCglkZWxl
dGUgZzI7CgoJIAoJU3RhdGUgKipzdCA9IGZpblN0YXRlU2V0LlRhYmxlOwoJaW50IG5zdCA9IGZp
blN0YXRlU2V0LlRhYmxlTGVuZ3RoOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBuc3Q7IGkrKywgc3Qr
KykKCQlnMS0+TWVyZ2VTdGF0ZXMoIHN0YXRlRGljdCwgc3RmaWwsICpzdCwgc3RhcnRTdGF0ZVNl
dCwgMSAgKTsKCgkgCglnMS0+RmlsbEluU3RhdGVzKCBzdGF0ZURpY3QsIHN0ZmlsICk7CgoJZzEt
PlJlbW92ZU9ibGl2aW91c1N0YXRlcygpOwoJZzEtPkNvbmRlbnNlKCk7CgoJcmV0dXJuIGcxOwp9
CgoKdGVtcGxhdGUgPCBjbGFzcyBTdGF0ZSwgY2xhc3MgVHJhbnNpdGlvbkZ1bmMsIGNsYXNzIFRy
YW5zaXRpb24sIGNsYXNzIEJhc2VGc21HcmFwaCA+CgkJRnNtR3JhcGg8U3RhdGUsIFRyYW5zaXRp
b25GdW5jLCBUcmFuc2l0aW9uLCBCYXNlRnNtR3JhcGg+KgoJCUZzbUdyYXBoPFN0YXRlLCBUcmFu
c2l0aW9uRnVuYywgVHJhbnNpdGlvbiwgQmFzZUZzbUdyYXBoPjo6CgkJRG9PcihGc21HcmFwaCAq
ZzEsIEZzbUdyYXBoICpnMikKewoJIAoJdHlwZW5hbWUgU3RhdGU6OlN0YXRlU2V0IHN0YXJ0U3Rh
dGVTZXQ7CglzdGFydFN0YXRlU2V0LlNldCggZzEtPlN0YXJ0U3RhdGUgKTsKCXN0YXJ0U3RhdGVT
ZXQuU2V0KCBnMi0+U3RhcnRTdGF0ZSApOwoKCSAKCXR5cGVuYW1lIEJhc2VGc21HcmFwaDo6U3Rh
dGVGaWxsSW5MaXN0IHN0ZmlsOwoJdHlwZW5hbWUgQmFzZUZzbUdyYXBoOjpTdGF0ZURpY3Qgc3Rh
dGVEaWN0OwoKCSAKCglnMS0+QWRkRW5kKCAqZzIgKTsKCgkgCglnMS0+RmluU3RhdGVTZXQuU2V0
KGcyLT5GaW5TdGF0ZVNldCk7CglnMi0+RmluU3RhdGVTZXQuRW1wdHkoKTsKCgkgCgoJZGVsZXRl
IGcyOwoKCSAKCVN0YXRlICpuZXdTdGFydFN0YXRlID0gZzEtPk5ld1N0YXRlKCk7CglnMS0+U3Rh
cnRTdGF0ZSA9IG5ld1N0YXJ0U3RhdGU7CgoJIAoJZzEtPk1lcmdlU3RhdGVzKCBzdGF0ZURpY3Qs
IHN0ZmlsLCBuZXdTdGFydFN0YXRlLCBzdGFydFN0YXRlU2V0LCAwICApOwoKCSAKCWcxLT5GaWxs
SW5TdGF0ZXMoIHN0YXRlRGljdCwgc3RmaWwgKTsKCglyZXR1cm4gZzE7Cn0KCnRlbXBsYXRlIDwg
Y2xhc3MgU3RhdGUsIGNsYXNzIFRyYW5zaXRpb25GdW5jLCBjbGFzcyBUcmFuc2l0aW9uLCBjbGFz
cyBCYXNlRnNtR3JhcGggPgoJCUZzbUdyYXBoPFN0YXRlLCBUcmFuc2l0aW9uRnVuYywgVHJhbnNp
dGlvbiwgQmFzZUZzbUdyYXBoPioKCQlGc21HcmFwaDxTdGF0ZSwgVHJhbnNpdGlvbkZ1bmMsIFRy
YW5zaXRpb24sIEJhc2VGc21HcmFwaD46OgoJCU9yKEZzbUdyYXBoICpnMSwgRnNtR3JhcGggKmcy
KQp7CglnMS0+U2V0RmluQml0cygweDA4ICwgMCk7CglnMi0+U2V0RmluQml0cygweDEwICwgMCk7
CgoJRnNtR3JhcGggKnJldFZhbCA9IERvT3IoZzEsIGcyKTsKCglnMS0+UmVtb3ZlT2JsaXZpb3Vz
U3RhdGVzKCk7CglnMS0+Q29uZGVuc2UoKTsKCglyZXR1cm4gcmV0VmFsOwp9Cgp0ZW1wbGF0ZSA8
IGNsYXNzIFN0YXRlLCBjbGFzcyBUcmFuc2l0aW9uRnVuYywgY2xhc3MgVHJhbnNpdGlvbiwgY2xh
c3MgQmFzZUZzbUdyYXBoID4KCQlGc21HcmFwaDxTdGF0ZSwgVHJhbnNpdGlvbkZ1bmMsIFRyYW5z
aXRpb24sIEJhc2VGc21HcmFwaD4qCgkJRnNtR3JhcGg8U3RhdGUsIFRyYW5zaXRpb25GdW5jLCBU
cmFuc2l0aW9uLCBCYXNlRnNtR3JhcGg+OjoKCQlJbnRlcnNlY3QoRnNtR3JhcGggKmcxLCBGc21H
cmFwaCAqZzIpCnsKCWcxLT5TZXRGaW5CaXRzKDB4MDggLCAweDAyICk7CglnMi0+U2V0RmluQml0
cygweDEwICwgMHgwNCApOwoJZzEtPlVuc2V0QWxsRmluU3RhdGVzKCk7CglnMi0+VW5zZXRBbGxG
aW5TdGF0ZXMoKTsKCglGc21HcmFwaCAqcmV0VmFsID0gRG9PcihnMSwgZzIpOwoKCWcxLT5SZW1v
dmVPYmxpdmlvdXNTdGF0ZXMoKTsKCWcxLT5SZW1vdmVEZWFkRW5kU3RhdGVzKCk7CglnMS0+Q29u
ZGVuc2UoKTsKCglyZXR1cm4gcmV0VmFsOwp9Cgp0ZW1wbGF0ZSA8IGNsYXNzIFN0YXRlLCBjbGFz
cyBUcmFuc2l0aW9uRnVuYywgY2xhc3MgVHJhbnNpdGlvbiwgY2xhc3MgQmFzZUZzbUdyYXBoID4K
CQlGc21HcmFwaDxTdGF0ZSwgVHJhbnNpdGlvbkZ1bmMsIFRyYW5zaXRpb24sIEJhc2VGc21HcmFw
aD4qCgkJRnNtR3JhcGg8U3RhdGUsIFRyYW5zaXRpb25GdW5jLCBUcmFuc2l0aW9uLCBCYXNlRnNt
R3JhcGg+OjoKCQlTdWJ0cmFjdChGc21HcmFwaCAqZzEsIEZzbUdyYXBoICpnMikKewoJZzEtPlNl
dEZpbkJpdHMoMHgwOCAsIDApOwoJZzItPlNldEZpbkJpdHMoMHgxMCAsIDB4MDEgKTsKCWcyLT5V
bnNldEFsbEZpblN0YXRlcygpOwoJZzItPlN0cmlwQWxsRnVuY3Rpb25zKCk7CgoJRnNtR3JhcGgg
KnJldFZhbCA9IERvT3IoZzEsIGcyKTsKCglnMS0+UmVtb3ZlT2JsaXZpb3VzU3RhdGVzKCk7Cgln
MS0+UmVtb3ZlRGVhZEVuZFN0YXRlcygpOwoJZzEtPkNvbmRlbnNlKCk7CgoJcmV0dXJuIHJldFZh
bDsKfQoKdGVtcGxhdGUgPCBjbGFzcyBTdGF0ZSwgY2xhc3MgVHJhbnNpdGlvbkZ1bmMsIGNsYXNz
IFRyYW5zaXRpb24sIGNsYXNzIEJhc2VGc21HcmFwaCA+CgkJdm9pZCBGc21HcmFwaDxTdGF0ZSwg
VHJhbnNpdGlvbkZ1bmMsIFRyYW5zaXRpb24sIEJhc2VGc21HcmFwaD46OgoJCVNldFN0YXRlTnVt
YmVycygpCnsKCWludCBjdXJOdW0gPSAwOwoJU3RhdGUgKnN0YXRlID0gSGVhZDsKCXdoaWxlIChz
dGF0ZSAhPSAwKSB7CgkJc3RhdGUtPk51bSA9IGN1ck51bTsKCQljdXJOdW0rKzsKCQlzdGF0ZSA9
IHN0YXRlLT5OZXh0OwoJfQp9CgoKdGVtcGxhdGUgPCBjbGFzcyBTdGF0ZSwgY2xhc3MgVHJhbnNp
dGlvbkZ1bmMsIGNsYXNzIFRyYW5zaXRpb24sIGNsYXNzIEJhc2VGc21HcmFwaCA+CgkJdm9pZCBG
c21HcmFwaDxTdGF0ZSwgVHJhbnNpdGlvbkZ1bmMsIFRyYW5zaXRpb24sIEJhc2VGc21HcmFwaD46
OgoJCVVuc2V0QWxsRmluU3RhdGVzKCkKewoJU3RhdGUgKipzdCA9IEZpblN0YXRlU2V0LlRhYmxl
OwoJaW50IG5zdCA9IEZpblN0YXRlU2V0LlRhYmxlTGVuZ3RoOwoJZm9yICggaW50IGkgPSAwOyBp
IDwgbnN0OyBpKyssIHN0KysgKQoJCSgqc3QpLT5Jc0ZpblN0YXRlID0gMCA7CglGaW5TdGF0ZVNl
dC5FbXB0eSgpOwp9Cgp0ZW1wbGF0ZSA8IGNsYXNzIFN0YXRlLCBjbGFzcyBUcmFuc2l0aW9uRnVu
YywgY2xhc3MgVHJhbnNpdGlvbiwgY2xhc3MgQmFzZUZzbUdyYXBoID4KCQl2b2lkIEZzbUdyYXBo
PFN0YXRlLCBUcmFuc2l0aW9uRnVuYywgVHJhbnNpdGlvbiwgQmFzZUZzbUdyYXBoPjo6CgkJU2V0
RmluQml0cyggaW50IGFsbFN0YXRlQml0cywgaW50IGZpblN0YXRlQml0cyApCnsKCVN0YXRlICpz
dGF0ZSA9IEhlYWQ7Cgl3aGlsZSAoIHN0YXRlICE9IDAgKSB7CgkJaWYgKCBzdGF0ZS0+SXNGaW5T
dGF0ZSApCgkJCXN0YXRlLT5TdGF0ZUJpdHMgPSBhbGxTdGF0ZUJpdHMgfCBmaW5TdGF0ZUJpdHM7
CgkJZWxzZQoJCQlzdGF0ZS0+U3RhdGVCaXRzID0gYWxsU3RhdGVCaXRzOwoKCQlzdGF0ZSA9IHN0
YXRlLT5OZXh0OwoJfQp9Cgp0ZW1wbGF0ZSA8IGNsYXNzIFN0YXRlLCBjbGFzcyBUcmFuc2l0aW9u
RnVuYywgY2xhc3MgVHJhbnNpdGlvbiwgY2xhc3MgQmFzZUZzbUdyYXBoID4KCQl2b2lkIEZzbUdy
YXBoPFN0YXRlLCBUcmFuc2l0aW9uRnVuYywgVHJhbnNpdGlvbiwgQmFzZUZzbUdyYXBoPjo6CgkJ
TWVyZ2VTdGF0ZXMoIHR5cGVuYW1lIEJhc2VGc21HcmFwaDo6U3RhdGVEaWN0ICZzdGF0ZURpY3Qs
IAoJCQkJdHlwZW5hbWUgQmFzZUZzbUdyYXBoOjpTdGF0ZUZpbGxJbkxpc3QgJnN0ZmlsLAoJCQkJ
U3RhdGUgKm5ld1N0YXRlLCB0eXBlbmFtZSBTdGF0ZTo6U3RhdGVTZXQgJnN0YXRlU2V0LAoJCQkJ
Ym9vbCBsZWF2aW5nRlNNICkKewoJaW50IGJpdHMgPSBuZXdTdGF0ZS0+U3RhdGVCaXRzIHwgMHgy
MCA7Cglib29sIGZpblN0YXRlID0gbmV3U3RhdGUtPklzRmluU3RhdGU7CgoJU3RhdGUgKipzdHAg
PSBzdGF0ZVNldC5UYWJsZTsKCWludCBuc3QgPSBzdGF0ZVNldC5UYWJsZUxlbmd0aDsKCWZvciAo
IGludCBpID0gMDsgaSA8IG5zdDsgaSsrLCBzdHArKyApIHsKCQlTdGF0ZSAqc3JjID0gKnN0cDsK
CgkJIAoJCU91dFRyYW5zQ29weShzdGF0ZURpY3QsIHN0ZmlsLCBuZXdTdGF0ZSwgc3JjLCBsZWF2
aW5nRlNNKTsKCgkJIAoJCWJpdHMgfD0gc3JjLT5TdGF0ZUJpdHM7CgkJaWYgKCBzcmMtPklzRmlu
U3RhdGUgKQoJCQlmaW5TdGF0ZSA9IDEgOwoKCQkgCgkJbmV3U3RhdGUtPm91dFRyYW5zaXRpb24u
dHJhbnNGdW5jTGlzdC5BcHBlbmQoCgkJCXNyYy0+b3V0VHJhbnNpdGlvbi50cmFuc0Z1bmNMaXN0
ICk7CgkJbmV3U3RhdGUtPm91dFRyYW5zaXRpb24ucHJpb3JpdHkgKz0gc3JjLT5vdXRUcmFuc2l0
aW9uLnByaW9yaXR5OwoKCQkgCgkJbmV3U3RhdGUtPk1lcmdlU3RhdGUoIHNyYyApOwoJfQoKCWlm
ICggYml0cyYgMHgwMSAgKSB7CgkJIAoJCWZpblN0YXRlID0gMCA7Cgl9CgoJaWYgKCAoYml0cyYg
MHgwNiApID09IDB4MDYgICkgewoJCSAKCQlmaW5TdGF0ZSA9IDEgOwoJfQoKCW5ld1N0YXRlLT5T
dGF0ZUJpdHMgPSBiaXRzOwoJaWYgKCBmaW5TdGF0ZSApCgkJU2V0RmluU3RhdGUoIG5ld1N0YXRl
ICk7Cn0KCnRlbXBsYXRlIDwgY2xhc3MgU3RhdGUsIGNsYXNzIFRyYW5zaXRpb25GdW5jLCBjbGFz
cyBUcmFuc2l0aW9uLCBjbGFzcyBCYXNlRnNtR3JhcGggPgoJCXZvaWQgRnNtR3JhcGg8U3RhdGUs
IFRyYW5zaXRpb25GdW5jLCBUcmFuc2l0aW9uLCBCYXNlRnNtR3JhcGg+OjoKCQlGaWxsSW5TdGF0
ZXMoIHR5cGVuYW1lIEJhc2VGc21HcmFwaDo6U3RhdGVEaWN0ICZzdGF0ZURpY3QsCgkJCXR5cGVu
YW1lIEJhc2VGc21HcmFwaDo6U3RhdGVGaWxsSW5MaXN0ICZzdGZpbCApCnsKCVN0YXRlICpzdGF0
ZSA9IHN0ZmlsLkhlYWQ7Cgl3aGlsZSAoIHN0YXRlICE9IDAgKSB7CgkJTWVyZ2VTdGF0ZXMoIHN0
YXRlRGljdCwgc3RmaWwsIHN0YXRlLCAqc3RhdGUtPnN0YXRlU2V0LCAwICApOwoJCXN0YXRlID0g
c3RhdGUtPk5leHQ7Cgl9CgoJd2hpbGUgKCBzdGZpbC5MaXN0TGVuZ3RoID4gMCApIHsKCQkgCgkJ
U3RhdGUgKnN0YXRlID0gc3RmaWwuSGVhZDsKCQlkZWxldGUgc3RhdGUtPnN0YXRlU2V0OwoJCXN0
YXRlLT5zdGF0ZVNldCA9IDA7CgoJCSAKCQlzdGZpbC5EZXRhY2hMaXN0RWwoIHN0YXRlICk7CgkJ
QmFzZUxpc3RUeXBlOjpBZGRFbmQoIHN0YXRlICk7Cgl9Cn0KCnRlbXBsYXRlIDwgY2xhc3MgU3Rh
dGUsIGNsYXNzIFRyYW5zaXRpb25GdW5jLCBjbGFzcyBUcmFuc2l0aW9uLCBjbGFzcyBCYXNlRnNt
R3JhcGggPgoJCXZvaWQgRnNtR3JhcGg8U3RhdGUsIFRyYW5zaXRpb25GdW5jLCBUcmFuc2l0aW9u
LCBCYXNlRnNtR3JhcGg+OjoKCQlDb25kZW5zZSgpCnsKCSAKCVNldFN0YXRlTnVtYmVycygpOwoK
CSAKCXR5cGVuYW1lIEJhc2VGc21HcmFwaDo6TWFya0luZGV4IG1hcmtJbmRleChMaXN0TGVuZ3Ro
KTsKCgkgCgoKCVN0YXRlICpwID0gSGVhZDsKCWZvciAoIGludCBpID0gMDsgaSA8IExpc3RMZW5n
dGg7IGkrKywgcCA9IHAtPk5leHQgKSB7CgkJU3RhdGUgKnEgPSBIZWFkOwoJCWZvciAoIGludCBq
ID0gMDsgaiA8IGk7IGorKywgcSA9IHEtPk5leHQgKSB7CgkJCXR5cGVuYW1lIEJhc2VGc21HcmFw
aDo6TWFya0luZGV4OjpTdGF0ZVBhaXIgKnBhaXIgPSAKCQkJCQkmbWFya0luZGV4LmFycmF5W2kq
TGlzdExlbmd0aCtqXTsKCQkJcGFpci0+cCA9IHA7CgkJCXBhaXItPnEgPSBxOwoKCQkJaW50IGNv
bWJpbmVkQml0cyA9IHAtPlN0YXRlQml0cyB8IHEtPlN0YXRlQml0czsKCQkKCQkJIAoJCQlpZiAo
IGNvbWJpbmVkQml0cyAmIDB4MjAgIHx8CgkJCQkJKGNvbWJpbmVkQml0cyYgMHgxOCApID09IDB4
MTggICkgewoJCQkJIAoJCQkJIAoJCQkJaWYgKCBwLT5Jc0ZpblN0YXRlIF4gcS0+SXNGaW5TdGF0
ZSApCgkJCQkJcGFpci0+aXNNYXJrZWQgPSAxIDsKCQkJCSAKCQkJCWVsc2UgaWYgKCBUcmFuc2l0
aW9uOjpDb21wYXJlKCBwLT5vdXRUcmFuc2l0aW9uLAoJCQkJCQkJcS0+b3V0VHJhbnNpdGlvbikg
IT0gMCkKCQkJCQlwYWlyLT5pc01hcmtlZCA9IDEgOwoJCQkJIAoJCQkJZWxzZSBpZiAoIFNob3Vs
ZE1hcmtQYWlyVHJhbnNEYXRhKG1hcmtJbmRleCwgcCwgcSkgKQoJCQkJCXBhaXItPmlzTWFya2Vk
ID0gMSA7CgkJCQkKCQkJCSAKCQkJCWlmICggcGFpci0+aXNNYXJrZWQgKQoJCQkJCW1hcmtJbmRl
eC5tYXJrZWRMaXN0LkFkZEVuZCggcGFpciApOwoJCQkJZWxzZQoJCQkJCW1hcmtJbmRleC51bm1h
cmtlZExpc3QuQWRkRW5kKCBwYWlyICk7CgkJCX0KCQkJZWxzZSBpZiAoIHAtPlN0YXRlQml0cyAm
IDB4NDAgIHx8CgkJCQkJCXEtPlN0YXRlQml0cyAmIDB4NDAgICkgewoJCQkJIAoKCgkJCQlwYWly
LT5pc01hcmtlZCA9IDEgOwoJCQkJbWFya0luZGV4Lm1hcmtlZExpc3QuQWRkRW5kKCBwYWlyICk7
CgkJCX0KCQkJZWxzZSB7CgkJCQkgCgoKCgkJCQlwYWlyLT5pc01hcmtlZCA9IDEgOwoJCQl9CgkJ
fQoJfQoKCSAKCglFeGhhdXN0QWxsKCBtYXJrSW5kZXggKTsKCgkgCglNZXJnZVVubWFya2VkUGFp
cnMoIG1hcmtJbmRleCApOwp9Cgp0ZW1wbGF0ZSA8IGNsYXNzIFN0YXRlLCBjbGFzcyBUcmFuc2l0
aW9uRnVuYywgY2xhc3MgVHJhbnNpdGlvbiwgY2xhc3MgQmFzZUZzbUdyYXBoID4KCQl2b2lkIEZz
bUdyYXBoPFN0YXRlLCBUcmFuc2l0aW9uRnVuYywgVHJhbnNpdGlvbiwgQmFzZUZzbUdyYXBoPjo6
CgkJRXhoYXVzdEFsbCggdHlwZW5hbWUgQmFzZUZzbUdyYXBoOjpNYXJrSW5kZXggJm1hcmtJbmRl
eCApCnsKCXR5cGVuYW1lIEJhc2VGc21HcmFwaDo6TWFya0luZGV4OjpTdGF0ZVBhaXIgKnBhaXIg
PSBtYXJrSW5kZXgubWFya2VkTGlzdC5IZWFkOwoKCXdoaWxlICggcGFpciAhPSBfX251bGwgICkg
ewoJCU1hcmtQYWlyc09uSW4oIG1hcmtJbmRleCwgcGFpci0+cCwgcGFpci0+cSApOwoJCXBhaXIg
PSBwYWlyLT5OZXh0OwoJfQp9Cgp0ZW1wbGF0ZSA8IGNsYXNzIFN0YXRlLCBjbGFzcyBUcmFuc2l0
aW9uRnVuYywgY2xhc3MgVHJhbnNpdGlvbiwgY2xhc3MgQmFzZUZzbUdyYXBoID4KCQl2b2lkIEZz
bUdyYXBoPFN0YXRlLCBUcmFuc2l0aW9uRnVuYywgVHJhbnNpdGlvbiwgQmFzZUZzbUdyYXBoPjo6
CgkJUmVtb3ZlRGVhZEVuZFN0YXRlcygpCnsKCVN0YXRlICpzdGF0ZSwgKm5leHQ7CgoJIAoKCVN0
YXJ0U3RhdGUtPklzTWFya2VkID0gMSA7CgoJIAoJU3RhdGUgKipzdCA9IEZpblN0YXRlU2V0LlRh
YmxlOwoJaW50IG5zdCA9IEZpblN0YXRlU2V0LlRhYmxlTGVuZ3RoOwoJZm9yICggaW50IGkgPSAw
OyBpIDwgbnN0OyBpKyssIHN0KysgKQoJCU1hcmtSZWFjaGFibGVGcm9tSGVyZVJldmVyc2UoICpz
dCApOwoKCSAKCglzdGF0ZSA9IEhlYWQ7Cgl3aGlsZSAoc3RhdGUpIHsKCQluZXh0ID0gc3RhdGUt
Pk5leHQ7CgoJCWlmIChzdGF0ZS0+SXNNYXJrZWQpCgkJCXN0YXRlLT5Jc01hcmtlZCA9IDAgOwoJ
CWVsc2UKCQkJZGVsZXRlIERldGFjaFN0YXRlKHN0YXRlKTsKCQkKCQlzdGF0ZSA9IG5leHQ7Cgl9
Cn0KCnRlbXBsYXRlIDwgY2xhc3MgU3RhdGUsIGNsYXNzIFRyYW5zaXRpb25GdW5jLCBjbGFzcyBU
cmFuc2l0aW9uLCBjbGFzcyBCYXNlRnNtR3JhcGggPgoJCXZvaWQgRnNtR3JhcGg8U3RhdGUsIFRy
YW5zaXRpb25GdW5jLCBUcmFuc2l0aW9uLCBCYXNlRnNtR3JhcGg+OjoKCQlSZW1vdmVPYmxpdmlv
dXNTdGF0ZXMoKQp7CglTdGF0ZSAqc3RhdGUsICpuZXh0OwoKCSAKCglNYXJrUmVhY2hhYmxlRnJv
bUhlcmUoU3RhcnRTdGF0ZSk7CgoJIAoKCXN0YXRlID0gSGVhZDsKCXdoaWxlIChzdGF0ZSkgewoJ
CW5leHQgPSBzdGF0ZS0+TmV4dDsKCgkJaWYgKHN0YXRlLT5Jc01hcmtlZCkKCQkJc3RhdGUtPklz
TWFya2VkID0gMCA7CgkJZWxzZQoJCQlkZWxldGUgRGV0YWNoU3RhdGUoc3RhdGUpOwoJCQoKCQlz
dGF0ZSA9IG5leHQ7Cgl9Cn0KCnRlbXBsYXRlIDwgY2xhc3MgU3RhdGUsIGNsYXNzIFRyYW5zaXRp
b25GdW5jLCBjbGFzcyBUcmFuc2l0aW9uLCBjbGFzcyBCYXNlRnNtR3JhcGggPgoJCXZvaWQgRnNt
R3JhcGg8U3RhdGUsIFRyYW5zaXRpb25GdW5jLCBUcmFuc2l0aW9uLCBCYXNlRnNtR3JhcGg+OjoK
CQlNZXJnZVBJbnRvUShTdGF0ZSAqcCwgU3RhdGUgKnEpCnsKCSAKCgoKCgkgCgoKCgoKCgoKCgoJ
IAoJSW5UcmFuc01vdmUocSwgcCk7CgoJaWYgKHAgPT0gU3RhcnRTdGF0ZSkKCQlTdGFydFN0YXRl
ID0gcTsKCgkgCglxLT5GdXNlU3RhdGUocCk7CgoJZGVsZXRlIERldGFjaFN0YXRlKHApOwp9Cgp0
ZW1wbGF0ZSA8IGNsYXNzIFN0YXRlLCBjbGFzcyBUcmFuc2l0aW9uRnVuYywgY2xhc3MgVHJhbnNp
dGlvbiwgY2xhc3MgQmFzZUZzbUdyYXBoID4KCQl2b2lkIEZzbUdyYXBoPFN0YXRlLCBUcmFuc2l0
aW9uRnVuYywgVHJhbnNpdGlvbiwgQmFzZUZzbUdyYXBoPjo6CgkJTWVyZ2VVbm1hcmtlZFBhaXJz
KCB0eXBlbmFtZSBCYXNlRnNtR3JhcGg6Ok1hcmtJbmRleCAmbWFya0luZGV4ICkKewoJU3RhdGUg
KnAgPSBIZWFkLCAqbmV4dFAsICpxOwoKCSAKCgoJd2hpbGUgKCBwICE9IDAgKSB7CgkJbmV4dFAg
PSBwLT5OZXh0OwoKCQlxID0gSGVhZDsKCQl3aGlsZSAoIHEgIT0gcCApIHsKCQkJIAoJCQlpZiAo
ICEgbWFya0luZGV4LklzUGFpck1hcmtlZChwLT5OdW0sIHEtPk51bSkgKSB7CgoJCQkJTWVyZ2VQ
SW50b1EocCwgcSk7CgkJCQlicmVhazsKCQkJfQoJCQlxID0gcS0+TmV4dDsKCQl9CgkJcCA9IG5l
eHRQOwoJfQp9Cgp0ZW1wbGF0ZSA8IGNsYXNzIFN0YXRlLCBjbGFzcyBUcmFuc2l0aW9uRnVuYywg
Y2xhc3MgVHJhbnNpdGlvbiwgY2xhc3MgQmFzZUZzbUdyYXBoID4KCQl2b2lkIEZzbUdyYXBoPFN0
YXRlLCBUcmFuc2l0aW9uRnVuYywgVHJhbnNpdGlvbiwgQmFzZUZzbUdyYXBoPjo6CgkJRHVtcCgg
RklMRSAqZmlsZSApCnsKCSAKCVNldFN0YXRlTnVtYmVycygpOwoKCSAKCWZwcmludGYoZmlsZSwg
IlN0YXJ0U3RhdGU6ICUuMmkgICIsIFN0YXJ0U3RhdGUtPk51bSk7CglmcHJpbnRmKGZpbGUsICJG
aW5hbCBTdGF0ZXM6Iik7CgoJIAoJU3RhdGUgKipzdCA9IEZpblN0YXRlU2V0LlRhYmxlOwoJaW50
IG5zdCA9IEZpblN0YXRlU2V0LlRhYmxlTGVuZ3RoOwoJZm9yICggaW50IGkgPSAwOyBpIDwgbnN0
OyBpKyssIHN0KysgKQoJCWZwcmludGYoIGZpbGUsICIgJS4yaSB8IiwgKCpzdCktPk51bSApOwoJ
ZnByaW50ZiggZmlsZSwgIlxuIiApOwoKCSAKCVN0YXRlICpzdGF0ZSA9IEhlYWQ7Cgl3aGlsZSAo
c3RhdGUpIHsKCQlmcHJpbnRmKCBmaWxlLCAiJS4yaSBbJWldICgiLCBzdGF0ZS0+TnVtLCBzdGF0
ZS0+b3V0VHJhbnNpdGlvbi5wcmlvcml0eSApOwoKCQlUcmFuc2l0aW9uRnVuYyAqdGZ1bmMgPSBz
dGF0ZS0+b3V0VHJhbnNpdGlvbi50cmFuc0Z1bmNMaXN0LlRhYmxlOwoJCWludCB0ZnVuY2xlbiA9
IHN0YXRlLT5vdXRUcmFuc2l0aW9uLnRyYW5zRnVuY0xpc3QuVGFibGVMZW5ndGg7CgkJZm9yICgg
aW50IGkgPSAwOyBpIDwgdGZ1bmNsZW47IGkrKywgdGZ1bmMrKyApCgkJCWZwcmludGYoZmlsZSwg
IiV4LCIsICp0ZnVuYyk7CgoJCWZwcmludGYoIGZpbGUsICIpXG4tPiIgKTsKCgkJRHVtcFRyYW5z
aXRpb25zKGZpbGUsICZzdGF0ZS0+T3V0TGlzdCk7CgkJc3RhdGUgPSBzdGF0ZS0+TmV4dDsKCX0K
fQoKCiMgMTAgInRlc3RGc21HcmFwaC5jcHAiIDIKCgoKCnN0cnVjdCBNeVN0YXRlOwoKc3RydWN0
IE15VHJhbnNpdGlvbiA6IAoJcHVibGljIEZzbVRyYW5zaXRpb248IE15U3RhdGUsIE15VHJhbnNp
dGlvbiwgaW50LCBPcmRpbmFsQ29tcGFyZTxpbnQ+ID4gCnsKCWludCBUaGlzSXNUcmFuc2l0aW9u
RGF0YTsKfTsKCgpzdHJ1Y3QgTXlTdGF0ZSA6IHB1YmxpYyBGc21TdGF0ZVZrPE15U3RhdGUsIGlu
dCwgTXlUcmFuc2l0aW9uPgp7CglpbnQgVGhpc0lzU3RhdGVEYXRhOwp9OwoKdHlwZWRlZiBGc21C
YXNlVms8TXlTdGF0ZSwgaW50LCBNeVRyYW5zaXRpb24+IEZzbUJhc2U7Cgp0ZW1wbGF0ZSBjbGFz
cyBGc21CYXNlVms8TXlTdGF0ZSwgaW50LCBNeVRyYW5zaXRpb24+Owp0ZW1wbGF0ZSBjbGFzcyBG
c21HcmFwaDxNeVN0YXRlLCBpbnQsIE15VHJhbnNpdGlvbiwgRnNtQmFzZT47Cgp0ZW1wbGF0ZTxj
bGFzcyBTdGF0ZT4gc3RydWN0IE1hcmtJbmRleDsKCmludCB0ZXN0R3JhcGgxKCkKewoJTXlTdGF0
ZSBzdDsKCU15VHJhbnNpdGlvbiB0cjsKCXJldHVybiAwOwp9CgoKaW50IG1haW4oKQp7CglyZXR1
cm4gdGVzdEdyYXBoMSgpOwp9Cg==


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

* Re: c++/3450: internal compiler error on my incorrect syntax
@ 2001-12-11 22:36 rodrigc
  0 siblings, 0 replies; 4+ messages in thread
From: rodrigc @ 2001-12-11 22:36 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

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

From: rodrigc@gcc.gnu.org
To: athurston@bigfoot.com, gcc-bugs@gcc.gnu.org, gcc-gnats@gcc.gnu.org,
  gcc-prs@gcc.gnu.org, nobody@gcc.gnu.org
Cc:  
Subject: Re: c++/3450: internal compiler error on my incorrect syntax
Date: 12 Dec 2001 06:29:38 -0000

 Synopsis: internal compiler error on my incorrect syntax
 
 State-Changed-From-To: analyzed->closed
 State-Changed-By: rodrigc
 State-Changed-When: Tue Dec 11 22:29:37 2001
 State-Changed-Why:
     ICE fixed in GCC 3.1 (experimental).
     Compilation error results:
     
     ../include/FsmBaseVkImp.h:130: ISO C++ forbids declaration of `trans'
     with no
        type
     ../include/FsmBaseVkImp.h:130: `from' was not declared in this scope
     ../include/FsmBaseVkImp.h:130: confused by earlier errors, bailing out
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&pr=3450&database=gcc


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

* Re: c++/3450: internal compiler error on my incorrect syntax
@ 2001-12-11 22:29 rodrigc
  0 siblings, 0 replies; 4+ messages in thread
From: rodrigc @ 2001-12-11 22:29 UTC (permalink / raw)
  To: athurston, gcc-bugs, gcc-gnats, gcc-prs, nobody

Synopsis: internal compiler error on my incorrect syntax

State-Changed-From-To: analyzed->closed
State-Changed-By: rodrigc
State-Changed-When: Tue Dec 11 22:29:37 2001
State-Changed-Why:
    ICE fixed in GCC 3.1 (experimental).
    Compilation error results:
    
    ../include/FsmBaseVkImp.h:130: ISO C++ forbids declaration of `trans'
    with no
       type
    ../include/FsmBaseVkImp.h:130: `from' was not declared in this scope
    ../include/FsmBaseVkImp.h:130: confused by earlier errors, bailing out

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


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

* Re: c++/3450: internal compiler error on my incorrect syntax
@ 2001-07-09  6:51 lerdsuwa
  0 siblings, 0 replies; 4+ messages in thread
From: lerdsuwa @ 2001-07-09  6:51 UTC (permalink / raw)
  To: athurston, gcc-bugs, gcc-prs, nobody

Synopsis: internal compiler error on my incorrect syntax

State-Changed-From-To: open->analyzed
State-Changed-By: lerdsuwa
State-Changed-When: Mon Jul  9 06:51:42 2001
State-Changed-Why:
    Confirm as a bug.  It still exists in gcc 3.0.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=3450&database=gcc


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

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

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-06-27 21:26 c++/3450: internal compiler error on my incorrect syntax athurston
2001-07-09  6:51 lerdsuwa
2001-12-11 22:29 rodrigc
2001-12-11 22:36 rodrigc

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