c++/1087: internal compiler error

tachyonmsg@home.com tachyonmsg@home.com
Mon Dec 18 09:26:00 GMT 2000


>Number:         1087
>Category:       c++
>Synopsis:       internal compiler error
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Dec 18 09:26:01 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     tachyonmsg@home.com
>Release:        unknown-1.0
>Organization:
>Environment:
i386-linux;  gcc version 2.95.2 20000220 (Debian GNU/Linux)
>Description:
internal compiler error
>How-To-Repeat:
 g++ -v -save-temps -o main main.cxx
>Fix:

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

IyAxICJtYWluLmN4eCINCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtIiAxIDMNCiANCiANCg0KDQoNCiMgMSAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL2lvc3RyZWFtLmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQojcHJhZ21hIGludGVyZmFjZQ0KDQoNCg0KIyAxICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFt
YnVmLmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCiNwcmFnbWEgaW50ZXJmYWNlDQoNCg0KICAgDQoNCg0KDQpleHRlcm4gIkMiIHsN
CiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9fR19j
b25maWcuaCIgMSAzDQogDQoNCg0KDQoNCg0KIA0KDQojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5
cGVzLmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoN
Cg0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQogDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoN
CiANCiMgMTM4ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMw0KDQoNCiANCg0KDQoNCg0KDQoN
Cg0KDQoNCiANCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQojIDE5NiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KIA0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KIA0KDQojIDEg
Ii91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQogDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0K
DQoNCiANCg0KDQoNCg0KIyA3MSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAzDQoNCg0KIA0K
DQoNCg0KDQoNCg0KDQogDQoNCg0KDQojIDEwMyAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAz
DQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KIA0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoN
Cg0KDQogDQoNCg0KDQoNCg0KDQoNCiMgMjUwICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAz
DQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQogDQoNCiANCg0KDQoNCg0KDQoN
Cg0KDQojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KIyAyNzggIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMNCg0KDQoNCg0KIyAyNiAi
L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzDQoNCg0KDQojIDEgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzDQoNCg0KDQoNCg0KDQog
DQoNCg0KIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0
ZGRlZi5oIiAzDQoNCg0KDQogDQoNCg0KIA0KDQoNCg0KDQoNCiANCg0KDQojIDYxICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMNCg0KDQogDQoN
Cg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0K
DQoNCiANCg0KIA0KDQojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9p
bmNsdWRlL3N0ZGRlZi5oIiAzDQoNCg0KIA0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCnR5cGVkZWYgdW5zaWdu
ZWQgaW50IHNpemVfdDsNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KIA0KDQoNCg0KDQogDQoNCiMgMjcxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45
NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMNCg0KDQojIDI4MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzDQoNCg0KIA0KDQogDQoNCiMgMzE3ICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMNCg0K
DQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyAyOSAi
L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzDQoNCg0KIA0KdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIF9fdV9jaGFyOw0KdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7DQp0eXBlZGVm
IHVuc2lnbmVkIGludCBfX3VfaW50Ow0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOw0K
DQpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90
Ow0KX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7DQojIDQ4ICIv
dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzDQoNCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4
X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Ow0KdHlwZWRlZiBzaWduZWQgc2hv
cnQgaW50IF9faW50MTZfdDsNCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7
DQp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191
aW50MzJfdDsNCg0KX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9f
aW50NjRfdDsNCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9f
dWludDY0X3Q7DQoNCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsNCg0KdHlwZWRlZiBfX3Vf
cXVhZF90IF9fZGV2X3Q7CQkgDQp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsJCSANCnR5cGVkZWYg
X191X2ludCBfX2dpZF90OwkJIA0KdHlwZWRlZiBfX3VfbG9uZyBfX2lub190OwkJIA0KdHlwZWRl
ZiBfX3VfaW50IF9fbW9kZV90OwkJIA0KdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsgCQkgDQp0
eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CQkgDQp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90OwkJ
IA0KdHlwZWRlZiBpbnQgX19waWRfdDsJCQkgDQp0eXBlZGVmIGludCBfX3NzaXplX3Q7CQkJIA0K
dHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsJCSANCnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02
NF90OwkJIA0KdHlwZWRlZiBfX3VfaW50IF9faWRfdDsJCQkgDQoNCnR5cGVkZWYgc3RydWN0DQog
IHsNCiAgICBpbnQgX192YWxbMl07DQogIH0gX19mc2lkX3Q7CQkJCSANCg0KIA0KdHlwZWRlZiBp
bnQgX19kYWRkcl90OwkJCSANCnR5cGVkZWYgY2hhciAqX19jYWRkcl90Ow0KdHlwZWRlZiBsb25n
IGludCBfX3RpbWVfdDsNCnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwkJIA0KDA0KdHlwZWRl
ZiBsb25nIGludCBfX2Nsb2NrX3Q7DQoNCiANCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX19m
ZF9tYXNrOw0KDQogDQoNCg0KIA0KDQoNCg0KDQogDQp0eXBlZGVmIHN0cnVjdA0KICB7DQogICAg
IA0KDQoNCg0KDQoNCiAgICBfX2ZkX21hc2sgX19mZHNfYml0c1sxMDI0ICAvICg4ICogc2l6ZW9m
IChfX2ZkX21hc2spKSBdOw0KDQoNCiAgfSBfX2ZkX3NldDsNCg0KDQp0eXBlZGVmIGludCBfX2tl
eV90Ow0KDQogDQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsNCg0KDQog
DQoNCiANCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsNCnR5cGVkZWYgX19xdWFkX3QgX19i
bGtjbnQ2NF90Ow0KDQogDQp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsNCnR5cGVkZWYg
X191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsNCg0KIA0KdHlwZWRlZiBfX3VfbG9uZyBfX2ZzZmls
Y250X3Q7DQp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7DQoNCiANCnR5cGVkZWYg
X191X2xvbmcgX19pbm82NF90Ow0KDQogDQp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsNCg0K
IA0KdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
aW50IF9fdF91c2NhbGFyX3Q7DQoNCiANCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7DQoNCg0KIA0K
DQoNCg0KDQoNCiMgOSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMNCg0KDQoNCg0KDQoj
IDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIg
MSAzDQoNCg0KDQoNCg0KDQogDQoNCg0KIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4
LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzDQoNCg0KDQogDQoNCg0KIA0KDQoNCg0KDQoNCiAN
Cg0KDQojIDYxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMNCg0KDQogDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KIA0KDQoNCg0KDQoNCiANCg0KIA0KDQojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzDQoNCg0KIA0KDQogDQoNCg0KIyAx
ODggIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIg
Mw0KDQoNCg0KDQoNCiANCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgaW50ICB3aW50X3Q7DQoNCg0KDQoN
CiANCg0KIA0KDQojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNs
dWRlL3N0ZGRlZi5oIiAzDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCiMgMTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQp0eXBlZGVmIGludCBfR19pbnQxNl90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOw0KdHlwZWRlZiBpbnQgX0dfaW50
MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsNCnR5cGVkZWYgdW5zaWdu
ZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOw0K
dHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f
IChfX1NJX18pKSk7DQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCiANCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiMgMzAgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAyIDMNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0K
DQojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRhcmcu
aCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCnR5cGVkZWYgdm9pZCAqX19n
bnVjX3ZhX2xpc3Q7DQoNCg0KDQogDQoNCiMgMTIyICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMi45NS4yL2luY2x1ZGUvc3RkYXJnLmgiIDMNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQojIDIwOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9p
bmNsdWRlL3N0ZGFyZy5oIiAzDQoNCg0KDQoNCiMgNDggIi91c3IvaW5jbHVkZS9saWJpby5oIiAy
IDMNCg0KDQoNCg0KDQoNCg0KIyA2NyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMNCg0KDQogDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyA5OCAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCnN0cnVjdCBfSU9fanVtcF90OyAgc3RydWN0IF9JT19GSUxFOw0KDQogDQoNCg0KDQoN
Cg0KDQoNCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190Ow0KDQoNCg0KIA0KDQpzdHJ1Y3QgX0lPX21h
cmtlciB7DQogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsNCiAgc3RydWN0IF9JT19GSUxFICpf
c2J1ZjsNCiAgIA0KDQogICANCiAgaW50IF9wb3M7DQojIDE4NiAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMNCg0KfTsNCg0Kc3RydWN0IF9JT19GSUxFIHsNCiAgaW50IF9mbGFnczsJCSANCg0KDQog
ICANCiAgIA0KICBjaGFyKiBfSU9fcmVhZF9wdHI7CSANCiAgY2hhciogX0lPX3JlYWRfZW5kOwkg
DQogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CSANCiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CSANCiAg
Y2hhciogX0lPX3dyaXRlX3B0cjsJIA0KICBjaGFyKiBfSU9fd3JpdGVfZW5kOwkgDQogIGNoYXIq
IF9JT19idWZfYmFzZTsJIA0KICBjaGFyKiBfSU9fYnVmX2VuZDsJIA0KICAgDQogIGNoYXIgKl9J
T19zYXZlX2Jhc2U7ICANCiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOyAgIA0KICBjaGFyICpfSU9f
c2F2ZV9lbmQ7ICANCg0KICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7DQoNCiAgc3RydWN0
IF9JT19GSUxFICpfY2hhaW47DQoNCiAgaW50IF9maWxlbm87DQogIGludCBfYmxrc2l6ZTsNCiAg
X19vZmZfdCAgIF9vbGRfb2Zmc2V0OyAgDQoNCg0KICAgDQogIHVuc2lnbmVkIHNob3J0IF9jdXJf
Y29sdW1uOw0KICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsNCiAgY2hhciBfc2hvcnRidWZb
MV07DQoNCiAgIA0KDQogIF9JT19sb2NrX3QgKl9sb2NrOw0KDQoNCg0KDQoNCg0KDQoNCiAgX19v
ZmY2NF90ICAgX29mZnNldDsNCiAgIA0KICBpbnQgX3VudXNlZDJbMTZdOw0KDQp9Ow0KDQoNCg0K
DQoNCnN0cnVjdCBfSU9fRklMRV9wbHVzOw0KZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9J
T18yXzFfc3RkaW5fOw0KZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0
XzsNCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87DQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KIA0KDQogDQoNCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAg
KHZvaWQgKiAgX19jb29raWUsIGNoYXIgKl9fYnVmLA0KCQkJCSAgICAgICBzaXplX3QgX19uYnl0
ZXMpICA7DQoNCiANCg0KDQoNCg0KDQp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICAo
dm9pZCAqICBfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwNCgkJCQkgICAgICBzaXplX3Qg
X19uKSAgOw0KDQogDQoNCg0KDQoNCg0KdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICAodm9pZCAq
ICBfX2Nvb2tpZSwgX19vZmZfdCAgIF9fcG9zLCBpbnQgX193KSAgOw0KDQogDQp0eXBlZGVmIGlu
dCBfX2lvX2Nsb3NlX2ZuICAodm9pZCAqICBfX2Nvb2tpZSkgIDsNCg0KDQojIDMxMSAiL3Vzci9p
bmNsdWRlL2xpYmlvLmgiIDMNCg0KDQoNCg0KZXh0ZXJuICJDIiB7DQoNCg0KZXh0ZXJuIGludCBf
X3VuZGVyZmxvdyAgKF9JT19GSUxFICopICB0aHJvdyAoKSAgOw0KZXh0ZXJuIGludCBfX3VmbG93
ICAoX0lPX0ZJTEUgKikgIHRocm93ICgpICA7DQpleHRlcm4gaW50IF9fb3ZlcmZsb3cgIChfSU9f
RklMRSAqLCBpbnQpICB0aHJvdyAoKSAgOw0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQpleHRlcm4gaW50IF9JT19nZXRjICAoX0lPX0ZJTEUgKl9fZnApICB0aHJvdyAoKSAgOw0KZXh0
ZXJuIGludCBfSU9fcHV0YyAgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSAgdGhyb3cgKCkgIDsN
CmV4dGVybiBpbnQgX0lPX2Zlb2YgIChfSU9fRklMRSAqX19mcCkgIHRocm93ICgpICA7DQpleHRl
cm4gaW50IF9JT19mZXJyb3IgIChfSU9fRklMRSAqX19mcCkgIHRocm93ICgpICA7DQoNCmV4dGVy
biBpbnQgX0lPX3BlZWtjX2xvY2tlZCAgKF9JT19GSUxFICpfX2ZwKSAgdGhyb3cgKCkgIDsNCg0K
IA0KDQoNCg0KZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAgKF9JT19GSUxFICopICB0aHJvdyAo
KSAgOw0KZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIHRocm93ICgp
ICA7DQpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgIChfSU9fRklMRSAqKSAgdGhyb3cgKCkg
IDsNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgIChfSU9f
RklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LA0KCQkJICAgICBfX2du
dWNfdmFfbGlzdCAsIGludCAqX19yZXN0cmljdCkgIHRocm93ICgpICA7DQpleHRlcm4gaW50IF9J
T192ZnByaW50ZiAgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0
LA0KCQkJICAgICAgX19nbnVjX3ZhX2xpc3QgKSAgdGhyb3cgKCkgIDsNCmV4dGVybiBfX3NzaXpl
X3QgICBfSU9fcGFkbiAgKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90ICApICB0aHJvdyAoKSAg
Ow0KZXh0ZXJuIHNpemVfdCAgIF9JT19zZ2V0biAgKF9JT19GSUxFICosIHZvaWQgKiwgc2l6ZV90
ICApICB0aHJvdyAoKSAgOw0KDQpleHRlcm4gX19vZmY2NF90ICAgX0lPX3NlZWtvZmYgIChfSU9f
RklMRSAqLCBfX29mZjY0X3QgICwgaW50LCBpbnQpICB0aHJvdyAoKSAgOw0KZXh0ZXJuIF9fb2Zm
NjRfdCAgIF9JT19zZWVrcG9zICAoX0lPX0ZJTEUgKiwgX19vZmY2NF90ICAsIGludCkgIHRocm93
ICgpICA7DQoNCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhICAoX0lPX0ZJTEUgKikg
IHRocm93ICgpICA7DQoNCg0KfQ0KDQoNCg0KIyAzNiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp
bnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAyIDMNCg0K
fQ0KIA0KDQojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9z
dGRhcmcuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0K
DQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCnZvaWQgdmFfZW5kIChf
X2dudWNfdmFfbGlzdCk7CQkgDQoNCg0KIA0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCiAN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyAxNzUgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8yLjk1LjIvaW5jbHVkZS9zdGRhcmcuaCIgMw0KDQoNCiANCg0KDQoNCg0KIA0KDQogDQoN
CiANCg0KdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0Ow0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyA0MCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAyIDMN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KZXh0ZXJu
ICJDKysiIHsNCmNsYXNzIGlzdHJlYW07ICANCmNsYXNzIG9zdHJlYW07IGNsYXNzIHN0cmVhbWJ1
ZjsNCg0KIA0KDQoNCg0KDQp0eXBlZGVmIF9fb2ZmNjRfdCAgIHN0cmVhbW9mZjsNCnR5cGVkZWYg
X19vZmY2NF90ICAgc3RyZWFtcG9zOw0KDQoNCg0KDQp0eXBlZGVmIF9fc3NpemVfdCAgIHN0cmVh
bXNpemU7DQoNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX2ZtdGZsYWdzOw0KdHlwZWRlZiB1bnNp
Z25lZCBjaGFyIF9faW9zdGF0ZTsNCg0Kc3RydWN0IF9pb3NfZmllbGRzDQp7ICANCiAgICBzdHJl
YW1idWYgKl9zdHJidWY7DQogICAgb3N0cmVhbSogX3RpZTsNCiAgICBpbnQgX3dpZHRoOw0KICAg
IF9fZm10ZmxhZ3MgX2ZsYWdzOw0KICAgIHdjaGFyX3QgICBfZmlsbDsNCiAgICBfX2lvc3RhdGUg
X3N0YXRlOw0KICAgIF9faW9zdGF0ZSBfZXhjZXB0aW9uczsNCiAgICBpbnQgX3ByZWNpc2lvbjsN
Cg0KICAgIHZvaWQgKl9hcnJheXM7ICANCn07DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQojIDEyNCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAzDQoNCg0KY2xhc3MgaW9zIDogcHVibGljIF9pb3Nf
ZmllbGRzIHsNCiAgaW9zJiBvcGVyYXRvcj0oaW9zJik7ICAgDQogIGlvcyAoY29uc3QgaW9zJik7
ICANCiAgcHVibGljOg0KICAgIHR5cGVkZWYgX19mbXRmbGFncyBmbXRmbGFnczsNCiAgICB0eXBl
ZGVmIGludCBpb3N0YXRlOw0KICAgIHR5cGVkZWYgaW50IG9wZW5tb2RlOw0KICAgIHR5cGVkZWYg
X19zc2l6ZV90ICAgc3RyZWFtc2l6ZTsNCiAgICBlbnVtIGlvX3N0YXRlIHsNCglnb29kYml0ID0g
MCAsDQoJZW9mYml0ID0gMSAsDQoJZmFpbGJpdCA9IDIgLA0KCWJhZGJpdCA9IDQgIH07DQogICAg
ZW51bSBvcGVuX21vZGUgew0KCWluID0gMSAsDQoJb3V0ID0gMiAsDQoJYXRlID0gNCAsDQoJYXBw
ID0gOCAsDQoJdHJ1bmMgPSAxNiAsDQoJbm9jcmVhdGUgPSAzMiAsDQoJbm9yZXBsYWNlID0gNjQg
LA0KCWJpbiA9IDEyOCAsICANCgliaW5hcnkgPSAxMjggIH07DQogICAgZW51bSBzZWVrX2RpciB7
IGJlZywgY3VyLCBlbmR9Ow0KICAgIHR5cGVkZWYgZW51bSBzZWVrX2RpciBzZWVrZGlyOw0KICAg
ICANCiAgICBlbnVtIHsgc2tpcHdzPSAwMSAsDQoJICAgbGVmdD0gMDIgLCByaWdodD0gMDQgLCBp
bnRlcm5hbD0gMDEwICwNCgkgICBkZWM9IDAyMCAsIG9jdD0gMDQwICwgaGV4PSAwMTAwICwNCgkg
ICBzaG93YmFzZT0gMDIwMCAsIHNob3dwb2ludD0gMDQwMCAsDQoJICAgdXBwZXJjYXNlPSAwMTAw
MCAsIHNob3dwb3M9IDAyMDAwICwNCgkgICBzY2llbnRpZmljPSAwNDAwMCAsIGZpeGVkPSAwMTAw
MDAgLA0KCSAgIHVuaXRidWY9IDAyMDAwMCAsIHN0ZGlvPSAwNDAwMDAgDQoNCg0KDQoJICAgfTsN
CiAgICBlbnVtIHsgIA0KCWJhc2VmaWVsZD1kZWMrb2N0K2hleCwNCglmbG9hdGZpZWxkID0gc2Np
ZW50aWZpYytmaXhlZCwNCglhZGp1c3RmaWVsZCA9IGxlZnQrcmlnaHQraW50ZXJuYWwNCiAgICB9
Ow0KDQojIDE3NyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAzDQoNCg0KICAgIG9zdHJlYW0qIHRpZSgpIGNv
bnN0IHsgcmV0dXJuIF90aWU7IH0NCiAgICBvc3RyZWFtKiB0aWUob3N0cmVhbSogdmFsKSB7IG9z
dHJlYW0qIHNhdmU9X3RpZTsgX3RpZT12YWw7IHJldHVybiBzYXZlOyB9DQoNCiAgICAgDQogICAg
d2NoYXJfdCAgIGZpbGwoKSBjb25zdCB7IHJldHVybiBfZmlsbDsgfQ0KICAgIHdjaGFyX3QgICBm
aWxsKHdjaGFyX3QgICBuZXdmKQ0KCXt3Y2hhcl90ICAgb2xkZiA9IF9maWxsOyBfZmlsbCA9IG5l
d2Y7IHJldHVybiBvbGRmO30NCiAgICBmbXRmbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9m
bGFnczsgfQ0KICAgIGZtdGZsYWdzIGZsYWdzKGZtdGZsYWdzIG5ld192YWwpIHsNCglmbXRmbGFn
cyBvbGRfdmFsID0gX2ZsYWdzOyBfZmxhZ3MgPSBuZXdfdmFsOyByZXR1cm4gb2xkX3ZhbDsgfQ0K
ICAgIGludCBwcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBfcHJlY2lzaW9uOyB9DQogICAgaW50
IHByZWNpc2lvbihpbnQgbmV3cCkgew0KCXVuc2lnbmVkIHNob3J0IG9sZHAgPSBfcHJlY2lzaW9u
OyBfcHJlY2lzaW9uID0gKHVuc2lnbmVkIHNob3J0KW5ld3A7DQoJcmV0dXJuIG9sZHA7IH0NCiAg
ICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCkgew0KCWZtdGZsYWdzIG9sZGJpdHMgPSBfZmxh
Z3M7DQoJX2ZsYWdzIHw9IHZhbDsgcmV0dXJuIG9sZGJpdHM7IH0NCiAgICBmbXRmbGFncyBzZXRm
KGZtdGZsYWdzIHZhbCwgZm10ZmxhZ3MgbWFzaykgew0KCWZtdGZsYWdzIG9sZGJpdHMgPSBfZmxh
Z3M7DQoJX2ZsYWdzID0gKF9mbGFncyAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsgcmV0dXJuIG9s
ZGJpdHM7IH0NCiAgICBmbXRmbGFncyB1bnNldGYoZm10ZmxhZ3MgbWFzaykgew0KCWZtdGZsYWdz
IG9sZGJpdHMgPSBfZmxhZ3M7DQoJX2ZsYWdzICY9IH5tYXNrOyByZXR1cm4gb2xkYml0czsgfQ0K
ICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF93aWR0aDsgfQ0KICAgIGludCB3aWR0aChp
bnQgdmFsKSB7IGludCBzYXZlID0gX3dpZHRoOyBfd2lkdGggPSB2YWw7IHJldHVybiBzYXZlOyB9
DQoNCg0KDQoNCiAgICB2b2lkIF90aHJvd19mYWlsdXJlKCkgY29uc3QgeyB9DQoNCiAgICB2b2lk
IGNsZWFyKGlvc3RhdGUgc3RhdGUgPSAwKSB7DQoJX3N0YXRlID0gX3N0cmJ1ZiA/IHN0YXRlIDog
c3RhdGV8YmFkYml0Ow0KCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUo
KTsgfQ0KICAgIHZvaWQgc2V0KGlvc3RhdGUgZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsNCglpZiAo
X3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0NCiAgICB2b2lkIHNldHN0
YXRlKGlvc3RhdGUgZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsgIA0KCWlmIChfc3RhdGUgJiBfZXhj
ZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQ0KICAgIGludCBnb29kKCkgY29uc3QgeyByZXR1
cm4gX3N0YXRlID09IDA7IH0NCiAgICBpbnQgZW9mKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYg
aW9zOjplb2ZiaXQ7IH0NCiAgICBpbnQgZmFpbCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIChp
b3M6OmJhZGJpdHxpb3M6OmZhaWxiaXQpOyB9DQogICAgaW50IGJhZCgpIGNvbnN0IHsgcmV0dXJu
IF9zdGF0ZSAmIGlvczo6YmFkYml0OyB9DQogICAgaW9zdGF0ZSByZHN0YXRlKCkgY29uc3QgeyBy
ZXR1cm4gX3N0YXRlOyB9DQogICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdCB7IHJldHVybiBmYWls
KCkgPyAodm9pZCopMCA6ICh2b2lkKikoLTEpOyB9DQogICAgaW50IG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuIGZhaWwoKTsgfQ0KICAgIGlvc3RhdGUgZXhjZXB0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIF9leGNlcHRpb25zOyB9DQogICAgdm9pZCBleGNlcHRpb25zKGlvc3RhdGUgZW5hYmxlKSB7
DQoJX2V4Y2VwdGlvbnMgPSBlbmFibGU7DQoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhy
b3dfZmFpbHVyZSgpOyB9DQoNCiAgICBzdHJlYW1idWYqIHJkYnVmKCkgY29uc3QgeyByZXR1cm4g
X3N0cmJ1ZjsgfQ0KICAgIHN0cmVhbWJ1ZiogcmRidWYoc3RyZWFtYnVmICpfcykgew0KICAgICAg
c3RyZWFtYnVmICpfb2xkID0gX3N0cmJ1ZjsgX3N0cmJ1ZiA9IF9zOyBjbGVhciAoKTsgcmV0dXJu
IF9vbGQ7IH0NCg0KICAgIHN0YXRpYyBpbnQgc3luY193aXRoX3N0ZGlvKGludCBvbik7DQogICAg
c3RhdGljIHZvaWQgc3luY193aXRoX3N0ZGlvKCkgeyBzeW5jX3dpdGhfc3RkaW8oMSk7IH0NCiAg
ICBzdGF0aWMgZm10ZmxhZ3MgYml0YWxsb2MoKTsNCiAgICBzdGF0aWMgaW50IHhhbGxvYygpOw0K
ICAgIHZvaWQqJiBwd29yZChpbnQpOw0KICAgIHZvaWQqIHB3b3JkKGludCkgY29uc3Q7DQogICAg
bG9uZyYgaXdvcmQoaW50KTsNCiAgICBsb25nIGl3b3JkKGludCkgY29uc3Q7DQoNCg0KDQoNCg0K
DQoNCg0KDQogICAgIA0KICAgIGNsYXNzIEluaXQgew0KICAgIHB1YmxpYzoNCiAgICAgIEluaXQg
KCkgeyB9DQogICAgfTsNCg0KICBwcm90ZWN0ZWQ6DQogICAgaW5saW5lIGlvcyhzdHJlYW1idWYq
IHNiID0gMCwgb3N0cmVhbSogdGllX3RvID0gMCk7DQogICAgaW5saW5lIHZpcnR1YWwgfmlvcygp
Ow0KICAgIGlubGluZSB2b2lkIGluaXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllID0gMCk7
DQp9Ow0KDQoNCg0KDQp0eXBlZGVmIGlvczo6c2Vla19kaXIgX3NlZWtfZGlyOw0KDQoNCiANCiAN
CiANCiANCiANCg0KIA0KIA0KY2xhc3Mgc3RyZWFtbWFya2VyIDogcHJpdmF0ZSBfSU9fbWFya2Vy
IHsNCiAgICBmcmllbmQgY2xhc3Mgc3RyZWFtYnVmOw0KICAgIHZvaWQgc2V0X29mZnNldChpbnQg
b2Zmc2V0KSB7IF9wb3MgPSBvZmZzZXQ7IH0NCiAgcHVibGljOg0KICAgIHN0cmVhbW1hcmtlcihz
dHJlYW1idWYgKnNiKTsNCiAgICB+c3RyZWFtbWFya2VyKCk7DQogICAgaW50IHNhdmluZygpIHsg
cmV0dXJuICAxOyB9DQogICAgaW50IGRlbHRhKHN0cmVhbW1hcmtlciYpOw0KICAgIGludCBkZWx0
YSgpOw0KfTsNCg0Kc3RydWN0IHN0cmVhbWJ1ZiA6IHB1YmxpYyBfSU9fRklMRSB7ICANCiAgICBm
cmllbmQgY2xhc3MgaW9zOw0KICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtOw0KICAgIGZyaWVuZCBj
bGFzcyBvc3RyZWFtOw0KICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1tYXJrZXI7DQogICAgY29uc3Qg
dm9pZCAqJl92dGFibGUoKSB7IHJldHVybiAqKGNvbnN0IHZvaWQqKikoKF9JT19GSUxFKil0aGlz
ICsgMSk7IH0NCiAgcHJvdGVjdGVkOg0KICAgIHN0YXRpYyBzdHJlYW1idWYqIF9saXN0X2FsbDsg
IA0KICAgIF9JT19GSUxFKiYgeGNoYWluKCkgeyByZXR1cm4gX2NoYWluOyB9DQogICAgdm9pZCBf
dW5fbGluaygpOw0KICAgIHZvaWQgX2xpbmtfaW4oKTsNCiAgICBjaGFyKiBncHRyKCkgY29uc3QN
CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3Jl
YWRfcHRyOyB9DQogICAgY2hhciogcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9wdHI7
IH0NCiAgICBjaGFyKiBlZ3B0cigpIGNvbnN0DQogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgx
MDAgID8gX0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5kOyB9DQogICAgY2hhciogZXBwdHIoKSBj
b25zdCB7IHJldHVybiBfSU9fd3JpdGVfZW5kOyB9DQogICAgY2hhciogcGJhc2UoKSBjb25zdCB7
IHJldHVybiBfSU9fd3JpdGVfYmFzZTsgfQ0KICAgIGNoYXIqIGViYWNrKCkgY29uc3QNCiAgICAg
IHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFz
ZTt9DQogICAgY2hhciogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfYmFzZTsgfQ0KICAg
IGNoYXIqIGVidWYoKSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2VuZDsgfQ0KICAgIGludCBibGVu
KCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQgLSBfSU9fYnVmX2Jhc2U7IH0NCiAgICB2b2lk
IHhwdXRfY2hhcihjaGFyIGMpIHsgKl9JT193cml0ZV9wdHIrKyA9IGM7IH0NCiAgICBpbnQgeGZs
YWdzKCkgeyByZXR1cm4gX2ZsYWdzIDsgfQ0KICAgIGludCB4ZmxhZ3MoaW50IGYpIHtpbnQgZmwg
PSBfZmxhZ3MgOyBfZmxhZ3MgID0gZjsgcmV0dXJuIGZsO30NCiAgICB2b2lkIHhzZXRmbGFncyhp
bnQgZikgeyBfZmxhZ3MgIHw9IGY7IH0NCiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZiwgaW50IG1h
c2spDQogICAgICB7IF9mbGFncyAgPSAoX2ZsYWdzICAmIH5tYXNrKSB8IChmICYgbWFzayk7IH0N
CiAgICB2b2lkIGdidW1wKGludCBuKQ0KICAgICAgeyBfZmxhZ3MgICYgMHgxMDAgID8gKF9JT19z
YXZlX2Jhc2UrPW4pOihfSU9fcmVhZF9wdHIrPW4pO30NCiAgICB2b2lkIHBidW1wKGludCBuKSB7
IF9JT193cml0ZV9wdHIgKz0gbjsgfQ0KICAgIHZvaWQgc2V0YihjaGFyKiBiLCBjaGFyKiBlYiwg
aW50IGE9MCk7DQogICAgdm9pZCBzZXRwKGNoYXIqIHAsIGNoYXIqIGVwKQ0KICAgICAgeyBfSU9f
d3JpdGVfYmFzZT1fSU9fd3JpdGVfcHRyPXA7IF9JT193cml0ZV9lbmQ9ZXA7IH0NCiAgICB2b2lk
IHNldGcoY2hhciogZWIsIGNoYXIqIGcsIGNoYXIgKmVnKSB7DQogICAgICBpZiAoX2ZsYWdzICAm
IDB4MTAwICkgX0lPX2ZyZWVfYmFja3VwX2FyZWEodGhpcyk7IA0KICAgICAgX0lPX3JlYWRfYmFz
ZSA9IGViOyBfSU9fcmVhZF9wdHIgPSBnOyBfSU9fcmVhZF9lbmQgPSBlZzsgfQ0KICAgIGNoYXIg
KnNob3J0YnVmKCkgeyByZXR1cm4gX3Nob3J0YnVmOyB9DQoNCiAgICBpbnQgaW5fYmFja3VwKCkg
eyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgOyB9DQogICAgIA0KICAgIGNoYXIgKkdiYXNlKCkgeyBy
ZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTsgfQ0KICAg
ICANCiAgICBjaGFyICplR3B0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfZW5k
IDogX0lPX3JlYWRfZW5kOyB9DQogICAgIA0KICAgIGNoYXIgKkJiYXNlKCkgeyByZXR1cm4gaW5f
YmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQ0KICAgIGNoYXIgKkJw
dHIoKSB7IHJldHVybiBfSU9fYmFja3VwX2Jhc2U7IH0NCiAgICAgDQogICAgY2hhciAqZUJwdHIo
KSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2VuZCA6IF9JT19zYXZlX2VuZDsgfQ0K
ICAgIGNoYXIgKk5iYXNlKCkgeyByZXR1cm4gX0lPX3NhdmVfYmFzZTsgfQ0KICAgIGNoYXIgKmVO
cHRyKCkgeyByZXR1cm4gX0lPX3NhdmVfZW5kOyB9DQogICAgaW50IGhhdmVfYmFja3VwKCkgeyBy
ZXR1cm4gX0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9DQogICAgaW50IGhhdmVfbWFya2Vycygp
IHsgcmV0dXJuIF9tYXJrZXJzICE9IF9fbnVsbCA7IH0NCiAgICB2b2lkIGZyZWVfYmFja3VwX2Fy
ZWEoKTsNCiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICANCiAgICBpbnQgcHV0X21vZGUoKSB7
IHJldHVybiBfZmxhZ3MgJiAweDgwMCA7IH0NCiAgICBpbnQgc3dpdGNoX3RvX2dldF9tb2RlKCk7
DQogICAgDQogICAgc3RyZWFtYnVmKGludCBmbGFncz0wKTsNCiAgcHVibGljOg0KICAgIHN0YXRp
YyBpbnQgZmx1c2hfYWxsKCk7DQogICAgc3RhdGljIHZvaWQgZmx1c2hfYWxsX2xpbmVidWZmZXJl
ZCgpOyAgDQogICAgdmlydHVhbCB+c3RyZWFtYnVmKCk7DQogICAgdmlydHVhbCBpbnQgb3ZlcmZs
b3coaW50IGMgPSAoLTEpICk7ICANCiAgICB2aXJ0dWFsIGludCB1bmRlcmZsb3coKTsgIA0KICAg
IHZpcnR1YWwgaW50IHVmbG93KCk7ICANCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMp
Ow0KIA0KICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFt
c2l6ZSBuKTsNCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNp
emUgbik7DQogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2Rp
ciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7DQogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vl
a3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOw0KDQogICAg
c3RyZWFtcG9zIHB1YnNlZWtvZmYoc3RyZWFtb2ZmIG8sIF9zZWVrX2RpciBkLCBpbnQgbW9kZT1p
b3M6OmlufGlvczo6b3V0KQ0KICAgICAgeyByZXR1cm4gX0lPX3NlZWtvZmYgKHRoaXMsIG8sIGQs
IG1vZGUpOyB9DQogICAgc3RyZWFtcG9zIHB1YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1v
ZGUgPSBpb3M6OmlufGlvczo6b3V0KQ0KICAgICAgeyByZXR1cm4gX0lPX3NlZWtwb3MgKHRoaXMs
IHBvcywgbW9kZSk7IH0NCiAgICBzdHJlYW1wb3Mgc3NlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19k
aXIsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOw0KICAgIHN0cmVhbXBvcyBzc2Vla3Bvcyhz
dHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOw0KICAgIHZpcnR1YWwg
c3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7DQogICAgdmlydHVhbCBpbnQgc3lu
YygpOw0KICAgIHZpcnR1YWwgaW50IGRvYWxsb2NhdGUoKTsNCg0KICAgIGludCBzZWVrbWFyayhz
dHJlYW1tYXJrZXImIG1hcmssIGludCBkZWx0YSA9IDApOw0KICAgIGludCBzcHV0YmFja2MoY2hh
ciBjKTsNCiAgICBpbnQgc3VuZ2V0YygpOw0KICAgIGludCB1bmJ1ZmZlcmVkKCkgeyByZXR1cm4g
X2ZsYWdzICYgMiAgPyAxIDogMDsgfQ0KICAgIGludCBsaW5lYnVmZmVyZWQoKSB7IHJldHVybiBf
ZmxhZ3MgJiAweDIwMCAgPyAxIDogMDsgfQ0KICAgIHZvaWQgdW5idWZmZXJlZChpbnQgaSkNCgl7
IGlmIChpKSBfZmxhZ3MgfD0gMiA7IGVsc2UgX2ZsYWdzICY9IH4yIDsgfQ0KICAgIHZvaWQgbGlu
ZWJ1ZmZlcmVkKGludCBpKQ0KCXsgaWYgKGkpIF9mbGFncyB8PSAweDIwMCA7IGVsc2UgX2ZsYWdz
ICY9IH4weDIwMCA7IH0NCiAgICBpbnQgYWxsb2NhdGUoKSB7ICANCglpZiAoYmFzZSgpIHx8IHVu
YnVmZmVyZWQoKSkgcmV0dXJuIDA7DQoJZWxzZSByZXR1cm4gZG9hbGxvY2F0ZSgpOyB9DQogICAg
IA0KICAgIHZvaWQgYWxsb2NidWYoKSB7IGlmIChiYXNlKCkgPT0gX19udWxsICkgZG9hbGxvY2J1
ZigpOyB9DQogICAgdm9pZCBkb2FsbG9jYnVmKCk7DQogICAgaW50IGluX2F2YWlsKCkgeyByZXR1
cm4gX0lPX3JlYWRfZW5kIC0gX0lPX3JlYWRfcHRyOyB9DQogICAgaW50IG91dF93YWl0aW5nKCkg
eyByZXR1cm4gX0lPX3dyaXRlX3B0ciAtIF9JT193cml0ZV9iYXNlOyB9DQogICAgc3RyZWFtc2l6
ZSBzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIHhzcHV0bihzLCBu
KTsgfQ0KICAgIHN0cmVhbXNpemUgcGFkbihjaGFyIHBhZCwgc3RyZWFtc2l6ZSBuKSB7IHJldHVy
biBfSU9fcGFkbih0aGlzLCBwYWQsIG4pOyB9DQogICAgc3RyZWFtc2l6ZSBzZ2V0bihjaGFyKiBz
LCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19zZ2V0bih0aGlzLCBzLCBuKTsgfQ0KICAgIGlu
dCBpZ25vcmUoaW50KTsNCiAgICBpbnQgZ2V0X2NvbHVtbigpOw0KICAgIGludCBzZXRfY29sdW1u
KGludCk7DQogICAgbG9uZyBzZ2V0bGluZShjaGFyKiBidWYsIHNpemVfdCAgIG4sIGNoYXIgZGVs
aW0sIGludCBwdXRiYWNrX2RlbGltKTsNCiAgICBpbnQgc3B1dGMoaW50IGMpIHsgcmV0dXJuIF9J
T19wdXRjKGMsIHRoaXMpOyB9DQogICAgaW50IHNidW1wYygpIHsgcmV0dXJuIF9JT19nZXRjKHRo
aXMpOyB9DQogICAgaW50IHNnZXRjKCkgeyByZXR1cm4gKCggIHRoaXMgICktPl9JT19yZWFkX3B0
ciA+PSAoICB0aGlzICApLT5fSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3cgKCAgdGhpcyAgKSA9
PSAoLTEpICA/ICgtMSkgIDogKih1bnNpZ25lZCBjaGFyICopICggIHRoaXMgICktPl9JT19yZWFk
X3B0cikgIDsgfQ0KICAgIGludCBzbmV4dGMoKSB7DQoJaWYgKF9JT19yZWFkX3B0ciA+PSBfSU9f
cmVhZF9lbmQgJiYgX191bmRlcmZsb3codGhpcykgPT0gKC0xKSApDQoJICByZXR1cm4gKC0xKSA7
DQoJZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyssIHNnZXRjKCk7IH0NCiAgICB2b2lkIHN0b3Nz
YygpIHsgaWYgKF9JT19yZWFkX3B0ciA8IF9JT19yZWFkX2VuZCkgX0lPX3JlYWRfcHRyKys7IH0N
CiAgICBpbnQgdnNjYW4oY2hhciBjb25zdCAqZm10MCwgX19nbnVjX3ZhX2xpc3QgIGFwLCBpb3Mq
IHN0cmVhbSA9IF9fbnVsbCApOw0KICAgIGludCBzY2FuKGNoYXIgY29uc3QgKmZtdDAgLi4uKTsN
CiAgICBpbnQgdmZvcm0oY2hhciBjb25zdCAqZm10MCwgX19nbnVjX3ZhX2xpc3QgIGFwKTsNCiAg
ICBpbnQgZm9ybShjaGFyIGNvbnN0ICpmbXQwIC4uLik7DQoNCg0KDQoNCiAgICB2aXJ0dWFsIHN0
cmVhbXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOw0KICAgIHZpcnR1
YWwgc3RyZWFtc2l6ZSBzeXNfd3JpdGUoY29uc3QgY2hhciosIHN0cmVhbXNpemUpOw0KICAgIHZp
cnR1YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsNCiAgICB2aXJ0
dWFsIGludCBzeXNfY2xvc2UoKTsNCiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2b2lkKik7ICAN
Cg0KICAgIHZpcnR1YWwgaW50IHNob3dtYW55YygpOw0KICAgIHZpcnR1YWwgdm9pZCBpbWJ1ZSh2
b2lkICopOw0KDQp9Ow0KDQogDQogDQoNCmNsYXNzIGZpbGVidWYgOiBwdWJsaWMgc3RyZWFtYnVm
IHsNCiAgcHJvdGVjdGVkOg0KICAgIHZvaWQgaW5pdCgpOw0KICBwdWJsaWM6DQogICAgc3RhdGlj
IGNvbnN0IGludCBvcGVucHJvdDsgIA0KICAgIGZpbGVidWYoKTsNCiAgICBmaWxlYnVmKGludCBm
ZCk7DQogICAgZmlsZWJ1ZihpbnQgZmQsIGNoYXIqIHAsIGludCBsZW4pOw0KDQoNCg0KICAgIH5m
aWxlYnVmKCk7DQogICAgZmlsZWJ1ZiogYXR0YWNoKGludCBmZCk7DQogICAgZmlsZWJ1Ziogb3Bl
bihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSk7DQogICAgZmlsZWJ1Ziog
b3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW9zOjpvcGVubW9kZSBtb2RlLCBpbnQgcHJvdCA9
IDA2NjQpOw0KICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOw0KICAgIHZpcnR1YWwgaW50IG92
ZXJmbG93KGludCBjID0gKC0xKSApOw0KICAgIGludCBpc19vcGVuKCkgY29uc3QgeyByZXR1cm4g
X2ZpbGVubyA+PSAwOyB9DQogICAgaW50IGZkKCkgY29uc3QgeyByZXR1cm4gaXNfb3BlbigpID8g
X2ZpbGVubyA6ICgtMSkgOyB9DQogICAgZmlsZWJ1ZiogY2xvc2UoKTsNCiAgICB2aXJ0dWFsIGlu
dCBkb2FsbG9jYXRlKCk7DQogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYs
IF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7DQogICAgdmlydHVhbCBzdHJl
YW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVuKTsNCiAgICBzdHJlYW1zaXplIHhzcHV0bihj
b25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOw0KICAgIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIq
IHMsIHN0cmVhbXNpemUgbik7DQogICAgdmlydHVhbCBpbnQgc3luYygpOw0KICBwcm90ZWN0ZWQ6
ICANCiANCiAgICBpbnQgaXNfcmVhZGluZygpIHsgcmV0dXJuIGViYWNrKCkgIT0gZWdwdHIoKTsg
fQ0KICAgIGNoYXIqIGN1cl9wdHIoKSB7IHJldHVybiBpc19yZWFkaW5nKCkgPyAgZ3B0cigpIDog
cHB0cigpOyB9DQogICAgIA0KICAgIGNoYXIqIGZpbGVfcHRyKCkgeyByZXR1cm4gZUdwdHIoKTsg
fQ0KICAgICANCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBzdHJl
YW1zaXplIHNpemUpOw0KICAgIHZpcnR1YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0cmVhbW9mZiwg
X3NlZWtfZGlyKTsNCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIq
LCBzdHJlYW1zaXplKTsNCiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2b2lkKik7ICANCiAgICB2
aXJ0dWFsIGludCBzeXNfY2xvc2UoKTsNCg0KDQoNCg0KfTsNCg0KaW5saW5lIHZvaWQgaW9zOjpp
bml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZV90bykgew0KCQlfc3RhdGUgPSBzYiA/IGlv
czo6Z29vZGJpdCA6IGlvczo6YmFkYml0OyBfZXhjZXB0aW9ucz0wOw0KCQlfc3RyYnVmPXNiOyBf
dGllID0gdGllX3RvOyBfd2lkdGg9MDsgX2ZpbGw9JyAnOw0KDQoJCV9mbGFncz1pb3M6OnNraXB3
c3xpb3M6OmRlYzsNCg0KDQoNCgkJX3ByZWNpc2lvbj02OyBfYXJyYXlzID0gMDsgfQ0KDQppbmxp
bmUgaW9zOjppb3Moc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7IGluaXQoc2IsIHRp
ZV90byk7IH0NCg0KaW5saW5lIGlvczo6fmlvcygpIHsNCg0KDQoNCiAgICAgDQogICAgIA0KICAg
IG9wZXJhdG9yIGRlbGV0ZVtdIChfYXJyYXlzKTsNCn0NCn0gIA0KDQojIDMxICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaW9zdHJl
YW0uaCIgMiAzDQoNCg0KZXh0ZXJuICJDKysiIHsNCmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJl
YW07DQp0eXBlZGVmIGlvcyYgKCpfX21hbmlwKShpb3MmKTsNCnR5cGVkZWYgaXN0cmVhbSYgKCpf
X2ltYW5pcCkoaXN0cmVhbSYpOw0KdHlwZWRlZiBvc3RyZWFtJiAoKl9fb21hbmlwKShvc3RyZWFt
Jik7DQoNCmV4dGVybiBpc3RyZWFtJiB3cyhpc3RyZWFtJiBpbnMpOw0KZXh0ZXJuIG9zdHJlYW0m
IGZsdXNoKG9zdHJlYW0mIG91dHMpOw0KZXh0ZXJuIG9zdHJlYW0mIGVuZGwob3N0cmVhbSYgb3V0
cyk7DQpleHRlcm4gb3N0cmVhbSYgZW5kcyhvc3RyZWFtJiBvdXRzKTsNCg0KY2xhc3Mgb3N0cmVh
bSA6IHZpcnR1YWwgcHVibGljIGlvcw0Kew0KICAgICANCiAgICB2b2lkIGRvX29zZngoKTsNCiAg
cHVibGljOg0KICAgIG9zdHJlYW0oKSB7IH0NCiAgICBvc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9z
dHJlYW0qIHRpZWQ9IF9fbnVsbCApOw0KICAgIGludCBvcGZ4KCkgew0KCWlmICghZ29vZCgpKSBy
ZXR1cm4gMDsNCgllbHNlIHsgaWYgKF90aWUpIF90aWUtPmZsdXNoKCk7ICA7IHJldHVybiAxO30g
fQ0KICAgIHZvaWQgb3NmeCgpIHsgIDsNCgkJICBpZiAoZmxhZ3MoKSAmIChpb3M6OnVuaXRidWZ8
aW9zOjpzdGRpbykpDQoJCSAgICAgIGRvX29zZngoKTsgfQ0KICAgIG9zdHJlYW0mIGZsdXNoKCk7
DQogICAgb3N0cmVhbSYgcHV0KGNoYXIgYykgeyBfc3RyYnVmLT5zcHV0YyhjKTsgcmV0dXJuICp0
aGlzOyB9DQoNCg0KDQoNCg0KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IGNoYXIgKnMsIHN0cmVh
bXNpemUgbik7DQogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgdW5zaWduZWQgY2hhciAqcywgc3Ry
ZWFtc2l6ZSBuKQ0KICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30NCiAg
ICBvc3RyZWFtJiB3cml0ZShjb25zdCBzaWduZWQgY2hhciAqcywgc3RyZWFtc2l6ZSBuKQ0KICAg
ICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30NCiAgICBvc3RyZWFtJiB3cml0
ZShjb25zdCB2b2lkICpzLCBzdHJlYW1zaXplIG4pDQogICAgICB7IHJldHVybiB3cml0ZSgoY29u
c3QgY2hhciopcywgbik7fQ0KICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbXBvcyk7DQogICAgb3N0
cmVhbSYgc2Vla3Aoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOw0KICAgIHN0cmVhbXBvcyB0ZWxscCgp
Ow0KICAgIG9zdHJlYW0mIGZvcm0oY29uc3QgY2hhciAqZm9ybWF0IC4uLik7DQogICAgb3N0cmVh
bSYgdmZvcm0oY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCAgYXJncyk7DQoNCiAg
ICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNoYXIgYyk7DQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1
bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQ0KICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwoc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhcilj
OyB9DQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBjaGFyICpzKTsNCiAgICBvc3RyZWFt
JiBvcGVyYXRvcjw8KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMpDQoJeyByZXR1cm4gKCp0aGlzKSA8
PCAoY29uc3QgY2hhciopczsgfQ0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVk
IGNoYXIgKnMpDQoJeyByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQ0KICAgIG9z
dHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgdm9pZCAqcCk7DQogICAgb3N0cmVhbSYgb3BlcmF0b3I8
PChpbnQgbik7DQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQgbik7DQogICAg
b3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIG4pOw0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5z
aWduZWQgbG9uZyBuKTsNCg0KICAgIF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8PChs
b25nIGxvbmcgbik7DQogICAgX19leHRlbnNpb25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2ln
bmVkIGxvbmcgbG9uZyBuKTsNCg0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2hvcnQgbikge3Jl
dHVybiBvcGVyYXRvcjw8KChpbnQpbik7fQ0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWdu
ZWQgc2hvcnQgbikge3JldHVybiBvcGVyYXRvcjw8KCh1bnNpZ25lZCBpbnQpbik7fQ0KDQogICAg
b3N0cmVhbSYgb3BlcmF0b3I8PChib29sIGIpIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGludCliKTsg
fQ0KDQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChkb3VibGUgbik7DQogICAgb3N0cmVhbSYgb3Bl
cmF0b3I8PChmbG9hdCBuKSB7IHJldHVybiBvcGVyYXRvcjw8KChkb3VibGUpbik7IH0NCg0KICAg
IG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBkb3VibGUgbik7DQoNCg0KDQogICAgb3N0cmVhbSYg
b3BlcmF0b3I8PChfX29tYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQ0KICAg
IG9zdHJlYW0mIG9wZXJhdG9yPDwoX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVy
biAqdGhpczt9DQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzdHJlYW1idWYqKTsNCg0KDQoNCn07
DQoNCmNsYXNzIGlzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MNCnsNCiAgICAgDQpwcm90ZWN0
ZWQ6DQogICAgc2l6ZV90ICAgX2djb3VudDsNCg0KICAgIGludCBfc2tpcF93cygpOw0KICBwdWJs
aWM6DQogICAgaXN0cmVhbSgpOiBfZ2NvdW50ICgwKSB7IH0NCiAgICBpc3RyZWFtKHN0cmVhbWJ1
Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxsICk7DQogICAgaXN0cmVhbSYgZ2V0KGNoYXIqIHB0
ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOw0KICAgIGlzdHJlYW0mIGdldCh1bnNpZ25l
ZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQ0KCXsgcmV0dXJuIGdldCgo
Y2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQ0KICAgIGlzdHJlYW0mIGdldChjaGFyJiBjKTsNCiAg
ICBpc3RyZWFtJiBnZXQodW5zaWduZWQgY2hhciYgYykgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsg
fQ0KICAgIGlzdHJlYW0mIGdldGxpbmUoY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0g
J1xuJyk7DQogICAgaXN0cmVhbSYgZ2V0bGluZSh1bnNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4s
IGNoYXIgZGVsaW0gPSAnXG4nKQ0KCXsgcmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBk
ZWxpbSk7IH0NCiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNoYXImIGMpICB7IHJldHVybiBnZXQo
KGNoYXImKWMpOyB9DQogICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4s
IGNoYXIgZGVsaW0gPSAnXG4nKQ0KCXsgcmV0dXJuIGdldCgoY2hhciopcHRyLCBsZW4sIGRlbGlt
KTsgfQ0KICAgIGlzdHJlYW0mIGdldGxpbmUoc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hh
ciBkZWxpbSA9ICdcbicpDQoJeyByZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGlt
KTsgfQ0KICAgIGlzdHJlYW0mIHJlYWQoY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pOw0KICAgIGlz
dHJlYW0mIHJlYWQodW5zaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pDQogICAgICB7IHJl
dHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9DQogICAgaXN0cmVhbSYgcmVhZChzaWduZWQgY2hh
ciAqcHRyLCBzdHJlYW1zaXplIG4pDQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4p
OyB9DQogICAgaXN0cmVhbSYgcmVhZCh2b2lkICpwdHIsIHN0cmVhbXNpemUgbikNCiAgICAgIHsg
cmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0NCiAgICBpc3RyZWFtJiBnZXQoc3RyZWFtYnVm
JiBzYiwgY2hhciBkZWxpbSA9ICdcbicpOw0KICAgIGlzdHJlYW0mIGdldHMoY2hhciAqKnMsIGNo
YXIgZGVsaW0gPSAnXG4nKTsNCiAgICBpbnQgaXBmeChpbnQgbmVlZCA9IDApIHsNCglpZiAoIWdv
b2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0NCgllbHNlIHsNCgkgICA7DQoJ
ICBpZiAoX3RpZSAmJiAobmVlZCA9PSAwIHx8IHJkYnVmKCktPmluX2F2YWlsKCkgPCBuZWVkKSkg
X3RpZS0+Zmx1c2goKTsNCgkgIGlmICghbmVlZCAmJiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSkg
cmV0dXJuIF9za2lwX3dzKCk7DQoJICBlbHNlIHJldHVybiAxOw0KCX0NCiAgICB9DQogICAgaW50
IGlwZngwKCkgeyAgDQoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAw
OyB9DQoJZWxzZSB7DQoJICAgOw0KCSAgaWYgKF90aWUpIF90aWUtPmZsdXNoKCk7DQoJICBpZiAo
ZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSByZXR1cm4gX3NraXBfd3MoKTsNCgkgIGVsc2UgcmV0dXJu
IDE7DQoJfQ0KICAgIH0NCiAgICBpbnQgaXBmeDEoKSB7ICANCglpZiAoIWdvb2QoKSkgeyBzZXQo
aW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0NCgllbHNlIHsNCgkgICA7DQoJICBpZiAoX3RpZSAm
JiByZGJ1ZigpLT5pbl9hdmFpbCgpID09IDApIF90aWUtPmZsdXNoKCk7DQoJICByZXR1cm4gMTsN
Cgl9DQogICAgfQ0KICAgIHZvaWQgaXNmeCgpIHsgIDsgfQ0KICAgIGludCBnZXQoKSB7IGlmICgh
aXBmeDEoKSkgcmV0dXJuICgtMSkgOw0KCQllbHNlIHsgaW50IGNoID0gX3N0cmJ1Zi0+c2J1bXBj
KCk7DQoJCSAgICAgICBpZiAoY2ggPT0gKC0xKSApIHNldChpb3M6OmVvZmJpdCk7DQoJCSAgICAg
ICBpc2Z4KCk7DQoJCSAgICAgICByZXR1cm4gY2g7DQoJCSAgICAgfSB9DQogICAgaW50IHBlZWso
KTsNCiAgICBzaXplX3QgICBnY291bnQoKSB7IHJldHVybiBfZ2NvdW50OyB9DQogICAgaXN0cmVh
bSYgaWdub3JlKGludCBuPTEsIGludCBkZWxpbSA9ICgtMSkgKTsNCiAgICBpbnQgc3luYyAoKTsN
CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1wb3MpOw0KICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVh
bW9mZiwgX3NlZWtfZGlyKTsNCiAgICBzdHJlYW1wb3MgdGVsbGcoKTsNCiAgICBpc3RyZWFtJiBw
dXRiYWNrKGNoYXIgY2gpIHsNCglpZiAoZ29vZCgpICYmIF9zdHJidWYtPnNwdXRiYWNrYyhjaCkg
PT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0KTsNCglyZXR1cm4gKnRoaXM7fQ0KICAgIGlzdHJl
YW0mIHVuZ2V0KCkgew0KCWlmIChnb29kKCkgJiYgX3N0cmJ1Zi0+c3VuZ2V0YygpID09ICgtMSkg
KSBjbGVhcihpb3M6OmJhZGJpdCk7DQoJcmV0dXJuICp0aGlzO30NCiAgICBpc3RyZWFtJiBzY2Fu
KGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOw0KICAgIGlzdHJlYW0mIHZzY2FuKGNvbnN0IGNoYXIg
KmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgIGFyZ3MpOw0KDQoNCg0KDQoNCg0KICAgIGlzdHJlYW0m
IG9wZXJhdG9yPj4oY2hhciopOw0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgY2hh
ciogcCkgeyByZXR1cm4gb3BlcmF0b3I+PigoY2hhciopcCk7IH0NCiAgICBpc3RyZWFtJiBvcGVy
YXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9DQog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyJiBjKTsNCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+
KHVuc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQ0KICAgIGlz
dHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hh
ciYpYyk7fQ0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oaW50Jik7DQogICAgaXN0cmVhbSYgb3Bl
cmF0b3I+Pihsb25nJik7DQoNCiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9yPj4o
bG9uZyBsb25nJik7DQogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2ln
bmVkIGxvbmcgbG9uZyYpOw0KDQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaG9ydCYpOw0KICAg
IGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgaW50Jik7DQogICAgaXN0cmVhbSYgb3BlcmF0
b3I+Pih1bnNpZ25lZCBsb25nJik7DQogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBz
aG9ydCYpOw0KDQogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihib29sJik7DQoNCiAgICBpc3RyZWFt
JiBvcGVyYXRvcj4+KGZsb2F0Jik7DQogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihkb3VibGUmKTsN
CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJik7DQogICAgaXN0cmVhbSYgb3Bl
cmF0b3I+PiggX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9DQog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+PihfX2ltYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0
aGlzKTsgfQ0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc3RyZWFtYnVmKik7DQp9Ow0KDQpjbGFz
cyBpb3N0cmVhbSA6IHB1YmxpYyBpc3RyZWFtLCBwdWJsaWMgb3N0cmVhbQ0Kew0KICBwdWJsaWM6
DQogICAgaW9zdHJlYW0oKSB7IH0NCiAgICBpb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFt
KnRpZWQ9IF9fbnVsbCApOw0KfTsNCg0KY2xhc3MgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiA6IHB1
YmxpYyBpc3RyZWFtIHsNCnB1YmxpYzoNCiAgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0
b3I9KGlzdHJlYW0mKTsNCiAgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19p
c3RyZWFtX3dpdGhhc3NpZ24mIHJocykNCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19j
YXN0PGlzdHJlYW0mPiAocmhzKSk7IH0NCn07DQoNCmNsYXNzIF9JT19vc3RyZWFtX3dpdGhhc3Np
Z24gOiBwdWJsaWMgb3N0cmVhbSB7DQpwdWJsaWM6DQogIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24m
IG9wZXJhdG9yPShvc3RyZWFtJik7DQogIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9y
PShfSU9fb3N0cmVhbV93aXRoYXNzaWduJiByaHMpDQogICAgeyByZXR1cm4gb3BlcmF0b3I9IChz
dGF0aWNfY2FzdDxvc3RyZWFtJj4gKHJocykpOyB9DQp9Ow0KDQpleHRlcm4gX0lPX2lzdHJlYW1f
d2l0aGFzc2lnbiBjaW47DQogDQpleHRlcm4gX0lPX29zdHJlYW1fd2l0aGFzc2lnbiBjb3V0LCBj
ZXJyOw0KDQpleHRlcm4gX0lPX29zdHJlYW1fd2l0aGFzc2lnbiBjbG9nDQoNCg0KDQo7DQoNCmV4
dGVybiBpc3RyZWFtJiBsb2NrKGlzdHJlYW0mIGlucyk7DQpleHRlcm4gaXN0cmVhbSYgdW5sb2Nr
KGlzdHJlYW0mIGlucyk7DQpleHRlcm4gb3N0cmVhbSYgbG9jayhvc3RyZWFtJiBvdXRzKTsNCmV4
dGVybiBvc3RyZWFtJiB1bmxvY2sob3N0cmVhbSYgb3V0cyk7DQoNCnN0cnVjdCBJb3N0cmVhbV9p
bml0IHsgfSA7ICAgDQoNCmlubGluZSBpb3MmIGRlYyhpb3MmIGkpDQp7IGkuc2V0Zihpb3M6OmRl
YywgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQ0KaW5saW5lIGlvcyYg
aGV4KGlvcyYgaSkNCnsgaS5zZXRmKGlvczo6aGV4LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9j
dCk7IHJldHVybiBpOyB9DQppbmxpbmUgaW9zJiBvY3QoaW9zJiBpKQ0KeyBpLnNldGYoaW9zOjpv
Y3QsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0NCn0gIA0KDQoNCiMg
NiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL2lvc3RyZWFtIiAyIDMNCg0KDQojIDEgIm1haW4uY3h4IiAyDQoNCiMgMSAiL3Vzci9s
aWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3Zl
Y3RvciIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAxIDMNCiANCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoN
CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0bF9jb25maWcuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCiANCiANCiANCiANCiANCiANCiANCiAN
CiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiAN
CiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCg0KDQog
DQogDQogDQogDQogDQogDQogDQogDQogDQogDQogDQoNCg0KIA0KDQogDQogDQogDQogDQogDQog
DQogDQoNCg0KDQoNCg0KDQoNCg0KIyAxNDggIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8y
Ljk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgICAgIA0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQojIDIzNCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMw0KDQoNCiMgMjQ4ICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Nv
bmZpZy5oIiAzDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KIA0KIA0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KIA0KIA0KIyAzMTYgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8y
Ljk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQogDQogDQogDQojIDM2ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45
NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMw0KDQoNCg0K
IyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RsX3JlbG9wcy5oIiAxIDMNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KIA0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPg0KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfVHAmIF9feCwgY29uc3QgX1Rw
JiBfX3kpIHsNCiAgcmV0dXJuICEoX194ID09IF9feSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf
VHA+DQppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195
KSB7DQogIHJldHVybiBfX3kgPCBfX3g7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQppbmxp
bmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgew0KICBy
ZXR1cm4gIShfX3kgPCBfX3gpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5lIGJv
b2wgb3BlcmF0b3I+PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsNCiAgcmV0dXJu
ICEoX194IDwgX195KTsNCn0NCg0KIA0KDQoNCg0KIA0KIA0KIA0KIyAzOSAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdv
YmFzZS5oIiAyIDMNCg0KDQoNCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUu
Mi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9wYWlyLmgiIDEgMw0KIA0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQog
DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCnN0cnVjdCBwYWlyIHsNCiAgdHlw
ZWRlZiBfVDEgZmlyc3RfdHlwZTsNCiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5cGU7DQoNCiAgX1Qx
IGZpcnN0Ow0KICBfVDIgc2Vjb25kOw0KICBwYWlyKCkgOiBmaXJzdChfVDEoKSksIHNlY29uZChf
VDIoKSkge30NCiAgcGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3Qo
X19hKSwgc2Vjb25kKF9fYikge30NCg0KDQogIHRlbXBsYXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9V
Mj4NCiAgcGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCks
IHNlY29uZChfX3Auc2Vjb25kKSB7fQ0KDQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFz
cyBfVDI+DQppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gs
IGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpDQp7IA0KICByZXR1cm4gX194LmZpcnN0ID09IF9f
eS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7IA0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX1QxLCBjbGFzcyBfVDI+DQppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEs
IF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkNCnsgDQogIHJldHVybiBfX3gu
Zmlyc3QgPCBfX3kuZmlyc3QgfHwgDQogICAgICAgICAoIShfX3kuZmlyc3QgPCBfX3guZmlyc3Qp
ICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsgDQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEs
IGNsYXNzIF9UMj4NCmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoY29uc3QgX1QxJiBf
X3gsIGNvbnN0IF9UMiYgX195KQ0Kew0KICByZXR1cm4gcGFpcjxfVDEsIF9UMj4oX194LCBfX3kp
Ow0KfQ0KDQogDQoNCg0KDQogDQogDQogDQojIDQyICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMw0K
DQoNCg0KIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4u
L2luY2x1ZGUvZysrLTMvdHlwZV90cmFpdHMuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCnN0cnVjdCBfX3RydWVfdHlwZSB7DQp9Ow0K
DQpzdHJ1Y3QgX19mYWxzZV90eXBlIHsNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1
Y3QgX190eXBlX3RyYWl0cyB7IA0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICAgdGhpc19kdW1t
eV9tZW1iZXJfbXVzdF9iZV9maXJzdDsNCiAgICAgICAgICAgICAgICAgICAgDQoNCg0KDQoNCg0K
ICAgIA0KDQoNCg0KDQoNCg0KDQoNCiANCg0KICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgICAgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX19mYWxzZV90eXBlICAg
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAg
ICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX2ZhbHNlX3R5
cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX19mYWxzZV90eXBlICAg
IGlzX1BPRF90eXBlOw0KfTsNCg0KDQoNCiANCiANCiANCg0KDQoNCnRlbXBsYXRlPD4gIHN0cnVj
dCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9E
X3R5cGU7DQp9Ow0KDQoNCg0KdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8Y2hhcj4g
ew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVj
dG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9y
Ow0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBsYXRl
PD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7DQogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90
cmFpdHM8dW5zaWduZWQgY2hhcj4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0Rf
dHlwZTsNCn07DQoNCg0KDQp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90
PiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
dWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0
b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOw0KfTsNCg0KDQoNCnRl
bXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7DQogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90
cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9E
X3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsNCiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsN
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsN
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv
cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+ICBz
dHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0
czxsb25nPiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlf
Y29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOw0KfTsNCg0K
dGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gew0KICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0K
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsNCn07DQoNCg0KDQp0ZW1wbGF0ZTw+ICBz
dHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGxvbmc+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1
bnNpZ25lZCBsb25nIGxvbmc+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5
cGU7DQp9Ow0KDQoNCg0KdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsN
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv
cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv
cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsN
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+
ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxs
b25nIGRvdWJsZT4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZh
dWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsNCn07
DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4g
ew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVj
dG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9y
Ow0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsNCn07DQoNCiMgMjk1ICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvdHlwZV90cmFpdHMuaCIgMw0KDQoNCg0KIA0KIA0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBz
dHJ1Y3QgX0lzX2ludGVnZXIgew0KICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7DQp9
Ow0KDQoNCg0KdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+IHsNCiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQoNCg0KdGVtcGxhdGU8PiAgc3RydWN0IF9J
c19pbnRlZ2VyPGNoYXI+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0K
DQp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8c2lnbmVkIGNoYXI+IHsNCiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2lu
dGVnZXI8dW5zaWduZWQgY2hhcj4gew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsN
Cn07DQoNCg0KDQp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4gew0KICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCg0KDQp0ZW1wbGF0ZTw+ICBzdHJ1
Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7
DQp9Ow0KDQp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsN
CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+ICBzdHJ1
Y3QgX0lzX2ludGVnZXI8aW50PiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0K
fTsNCg0KdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gew0KICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gIHN0cnVjdCBf
SXNfaW50ZWdlcjxsb25nPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0KfTsN
Cg0KdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmc+IHsNCiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQoNCg0KdGVtcGxhdGU8PiAgc3RydWN0
IF9Jc19pbnRlZ2VyPGxvbmcgbG9uZz4gew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsNCn07DQoNCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxv
bmc+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQoNCg0KDQoNCiAN
CiANCiANCiMgNDUgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzDQoNCg0KDQojIDEgIi91c3IvaW5j
bHVkZS9zdHJpbmcuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
IA0KDQoNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgeyANCg0KIA0KDQoNCiMgMSAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMNCg0KDQoNCg0K
DQoNCiANCg0KDQojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1
ZGUvc3RkZGVmLmgiIDMNCg0KDQoNCiANCg0KDQogDQoNCg0KDQoNCg0KIA0KDQoNCiMgNjEgIi91
c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMw0KDQoN
CiANCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQoN
Cg0KDQoNCg0KIA0KDQogDQoNCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45
NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMNCg0KDQogDQoNCiANCg0KDQojIDE4OCAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzDQoNCg0KDQoNCg0K
IA0KDQoNCg0KDQogDQoNCiMgMjcxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4y
L2luY2x1ZGUvc3RkZGVmLmgiIDMNCg0KDQojIDI4MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp
bnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzDQoNCg0KIA0KDQogDQoNCiMgMzE3ICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMNCg0KDQoN
Cg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyAzMyAiL3Vz
ci9pbmNsdWRlL3N0cmluZy5oIiAyIDMNCg0KDQoNCiANCmV4dGVybiB2b2lkICogIG1lbWNweSAg
KHZvaWQgKiAgX19yZXN0cmljdCBfX2Rlc3QsDQoJCQkgICAgX19jb25zdCB2b2lkICogIF9fcmVz
dHJpY3QgX19zcmMsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOw0KIA0KDQpleHRlcm4gdm9pZCAq
ICBtZW1tb3ZlICAodm9pZCAqICBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqICBfX3NyYywNCgkJCSAg
ICAgc2l6ZV90IF9fbikgIHRocm93ICgpICA7DQoNCiANCg0KDQoNCmV4dGVybiB2b2lkICogIG1l
bWNjcHkgICh2b2lkICogIF9fZGVzdCwgX19jb25zdCB2b2lkICogIF9fc3JjLA0KCQkJICAgICBp
bnQgX19jLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsNCg0KDQoNCiANCmV4dGVybiB2b2lkICog
IG1lbXNldCAgKHZvaWQgKiAgX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsN
Cg0KIA0KZXh0ZXJuIGludCBtZW1jbXAgIChfX2NvbnN0IHZvaWQgKiAgX19zMSwgX19jb25zdCB2
b2lkICogIF9fczIsDQoJCQlzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsNCg0KIA0KZXh0ZXJuIHZv
aWQgKiAgbWVtY2hyICAoX19jb25zdCB2b2lkICogIF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikg
IHRocm93ICgpICA7DQoNCg0KDQoNCg0KDQoNCg0KIA0KZXh0ZXJuIGNoYXIgKnN0cmNweSAgKGNo
YXIgKl9fcmVzdHJpY3QgX19kZXN0LA0KCQkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z
cmMpICB0aHJvdyAoKSAgOw0KIA0KZXh0ZXJuIGNoYXIgKnN0cm5jcHkgIChjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVzdCwNCgkJCSAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90
IF9fbikgIHRocm93ICgpICA7DQoNCiANCmV4dGVybiBjaGFyICpzdHJjYXQgIChjaGFyICpfX3Jl
c3RyaWN0IF9fZGVzdCwNCgkJCSAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKSAgdGhy
b3cgKCkgIDsNCiANCmV4dGVybiBjaGFyICpzdHJuY2F0ICAoY2hhciAqX19yZXN0cmljdCBfX2Rl
c3QsDQoJCQkgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pICB0
aHJvdyAoKSAgOw0KDQogDQpleHRlcm4gaW50IHN0cmNtcCAgKF9fY29uc3QgY2hhciAqX19zMSwg
X19jb25zdCBjaGFyICpfX3MyKSAgdGhyb3cgKCkgIDsNCiANCmV4dGVybiBpbnQgc3RybmNtcCAg
KF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKSAgdGhy
b3cgKCkgIDsNCg0KIA0KZXh0ZXJuIGludCBzdHJjb2xsICAoX19jb25zdCBjaGFyICpfX3MxLCBf
X2NvbnN0IGNoYXIgKl9fczIpICB0aHJvdyAoKSAgOw0KIA0KZXh0ZXJuIHNpemVfdCBzdHJ4ZnJt
ICAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsDQoJCQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3JjLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsNCg0KIyAxMDcgIi91c3IvaW5jbHVk
ZS9zdHJpbmcuaCIgMw0KDQoNCg0KIA0KZXh0ZXJuIGNoYXIgKl9fc3RyZHVwICAoX19jb25zdCBj
aGFyICpfX3MpICB0aHJvdyAoKSAgOw0KZXh0ZXJuIGNoYXIgKnN0cmR1cCAgKF9fY29uc3QgY2hh
ciAqX19zKSAgdGhyb3cgKCkgIDsNCg0KDQogDQoNCg0KDQoNCg0KDQojIDE0MyAiL3Vzci9pbmNs
dWRlL3N0cmluZy5oIiAzDQoNCg0KIA0KZXh0ZXJuIGNoYXIgKnN0cmNociAgKF9fY29uc3QgY2hh
ciAqX19zLCBpbnQgX19jKSAgdGhyb3cgKCkgIDsNCiANCmV4dGVybiBjaGFyICpzdHJyY2hyICAo
X19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpICB0aHJvdyAoKSAgOw0KDQoNCg0KDQoNCg0KDQog
DQoNCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNo
YXIgKl9fcmVqZWN0KSAgdGhyb3cgKCkgIDsNCiANCg0KZXh0ZXJuIHNpemVfdCBzdHJzcG4gIChf
X2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkgIHRocm93ICgpICA7DQog
DQpleHRlcm4gY2hhciAqc3RycGJyayAgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIg
Kl9fYWNjZXB0KSAgdGhyb3cgKCkgIDsNCiANCmV4dGVybiBjaGFyICpzdHJzdHIgIChfX2NvbnN0
IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpICB0aHJvdyAoKSAgOw0K
DQoNCg0KDQoNCg0KDQoNCg0KIA0KZXh0ZXJuIGNoYXIgKnN0cnRvayAgKGNoYXIgKl9fcmVzdHJp
Y3QgX19zLA0KCQkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgIHRocm93ICgp
ICA7DQoNCiANCg0KZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywNCgkJCSAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLA0KCQkJICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgIHRocm93ICgpICA7DQoNCmV4dGVybiBjaGFy
ICpzdHJ0b2tfciAgKGNoYXIgKl9fcmVzdHJpY3QgX19zLA0KCQkJICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2RlbGltLA0KCQkJICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIp
ICB0aHJvdyAoKSAgOw0KDQoNCiMgMjAzICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMNCg0KDQoN
CiANCmV4dGVybiBzaXplX3Qgc3RybGVuICAoX19jb25zdCBjaGFyICpfX3MpICB0aHJvdyAoKSAg
Ow0KDQoNCg0KDQoNCg0KDQoNCiANCmV4dGVybiBjaGFyICpzdHJlcnJvciAgKGludCBfX2Vycm51
bSkgIHRocm93ICgpICA7DQoNCiANCg0KZXh0ZXJuIGNoYXIgKl9fc3RyZXJyb3JfciAgKGludCBf
X2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgIHRocm93ICgpICA7DQpleHRl
cm4gY2hhciAqc3RyZXJyb3JfciAgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBf
X2J1ZmxlbikgIHRocm93ICgpICA7DQoNCg0KIA0KDQpleHRlcm4gdm9pZCBfX2J6ZXJvICAodm9p
ZCAqICBfX3MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOw0KDQoNCiANCmV4dGVybiB2b2lkIGJj
b3B5ICAoX19jb25zdCB2b2lkICogIF9fc3JjLCB2b2lkICogIF9fZGVzdCwgc2l6ZV90IF9fbikg
IHRocm93ICgpICA7DQoNCiANCmV4dGVybiB2b2lkIGJ6ZXJvICAodm9pZCAqICBfX3MsIHNpemVf
dCBfX24pICB0aHJvdyAoKSAgOw0KDQogDQpleHRlcm4gaW50IGJjbXAgIChfX2NvbnN0IHZvaWQg
KiAgX19zMSwgX19jb25zdCB2b2lkICogIF9fczIsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOw0K
DQogDQpleHRlcm4gY2hhciAqaW5kZXggIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgIHRo
cm93ICgpICA7DQoNCiANCmV4dGVybiBjaGFyICpyaW5kZXggIChfX2NvbnN0IGNoYXIgKl9fcywg
aW50IF9fYykgIHRocm93ICgpICA7DQoNCiANCg0KZXh0ZXJuIGludCBfX2ZmcyAgKGludCBfX2kp
ICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChjb25zdCkpOw0KZXh0ZXJuIGludCBmZnMgIChp
bnQgX19pKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsNCg0KIA0KDQoNCg0K
DQoNCg0KDQoNCg0KIA0KZXh0ZXJuIGludCBfX3N0cmNhc2VjbXAgIChfX2NvbnN0IGNoYXIgKl9f
czEsIF9fY29uc3QgY2hhciAqX19zMikgIHRocm93ICgpICA7DQpleHRlcm4gaW50IHN0cmNhc2Vj
bXAgIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgIHRocm93ICgpICA7
DQoNCiANCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u
c3QgY2hhciAqX19zMiwNCgkJCSAgICAgc2l6ZV90IF9fbikgIHRocm93ICgpICA7DQoNCg0KIyAy
NzcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMw0KDQoNCg0KIA0KDQpleHRlcm4gY2hhciAqc3Ry
c2VwICAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLA0KCQkJICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19kZWxpbSkgIHRocm93ICgpICA7DQoNCg0KIyAzMTkgIi91c3IvaW5jbHVkZS9z
dHJpbmcuaCIgMw0KDQoNCg0KDQojIDM0NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzDQoNCg0K
DQp9IA0KDQoNCiMgNDggIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzDQoNCiMgMSAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMNCiANCg0KDQog
DQoNCg0KDQoNCg0KIA0KIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2lu
Y2x1ZGUvc3lzbGltaXRzLmgiIDEgMw0KIA0KDQoNCg0KDQoNCiMgMSAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMNCiANCg0KDQogDQoNCiMg
MTE0ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvbGltaXRzLmgi
IDMNCg0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMNCiANCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQogDQojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQogDQoNCg0KIA0KDQoNCiANCg0K
DQogDQoNCg0KIA0KDQoNCiANCg0KDQogDQoNCg0KIA0KDQoNCg0KIA0KDQoNCiANCg0KDQogDQoN
Cg0KIA0KDQoNCiANCg0KDQoNCiANCg0KDQogDQoNCg0KIA0KDQoNCiANCg0KDQogDQoNCg0KIA0K
DQoNCiANCg0KDQogDQoNCg0KIA0KDQoNCiANCg0KDQogDQoNCg0KIA0KDQoNCg0KIA0KDQoNCiAN
Cg0KDQogDQoNCg0KIA0KDQoNCiANCg0KDQoNCiANCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9j
YWxfbGltLmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0K
DQoNCg0KDQoNCiANCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxIDMNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMv
bG9jYWxfbGltLmgiIDIgMw0KDQoNCiANCg0KDQoNCg0KDQogDQoNCiANCg0KDQogDQoNCiANCg0K
DQogDQoNCiANCg0KDQogDQoNCg0KDQogDQoNCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3Np
eDFfbGltLmgiIDIgMw0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KIyAzMCAiL3Vz
ci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMNCg0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvYml0cy9w
b3NpeDJfbGltLmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAN
Cg0KDQoNCg0KDQoNCg0KIA0KDQoNCiANCg0KDQogDQoNCg0KIA0KDQoNCiANCg0KDQoNCg0KIA0K
DQoNCg0KDQogDQoNCg0KDQogDQoNCg0KIA0KDQoNCg0KIA0KDQoNCg0KDQogDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0K
DQoNCiMgMzQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzDQoNCg0KDQoNCg0KDQoNCg0KIA0K
DQoNCg0KDQoNCiANCg0KIyAxMjEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMw0KDQoNCg0KDQog
IA0KDQoNCg0KDQoNCg0KDQoNCiMgMTE3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45
NS4yL2luY2x1ZGUvbGltaXRzLmgiIDIgMw0KDQoNCg0KDQojIDcgIi91c3IvbGliL2djYy1saWIv
aTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzDQoNCg0KIyAxMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL2xpbWl0cy5oIiAyIDMNCg0K
DQoNCg0KDQogDQoNCg0KDQogDQoNCg0KDQogDQoNCg0KDQoNCiANCg0KDQoNCg0KDQogDQoNCg0K
DQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCiANCg0KDQoNCg0KIA0KDQoNCg0KIA0K
DQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0K
DQoNCg0KIyAxMDcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9s
aW1pdHMuaCIgMw0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQojIDQ5ICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Fs
Z29iYXNlLmgiIDIgMw0KDQojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzDQogDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoN
Cg0KIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVm
LmgiIDEgMw0KDQoNCg0KDQoNCg0KIA0KDQoNCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMw0KDQoNCg0KIA0KDQoNCiANCg0KDQoNCg0K
DQogDQoNCg0KIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRl
L3N0ZGRlZi5oIiAzDQoNCg0KIA0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQogDQoNCiANCg0KIyAxMzEgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMw0KDQoNCiANCg0KIA0KDQoN
CiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVm
LmgiIDMNCg0KDQoNCg0KDQogDQoNCg0KDQoNCiANCg0KDQojIDI2OSAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzDQoNCg0KDQoNCiMgMjgzICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMNCg0K
DQogDQoNCiANCg0KIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5j
bHVkZS9zdGRkZWYuaCIgMw0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQojIDMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMw0KDQoNCmV4dGVy
biAiQyIgeyANCg0KDQoNCg0KIA0KdHlwZWRlZiBzdHJ1Y3QNCiAgew0KICAgIGludCBxdW90OwkJ
CSANCiAgICBpbnQgcmVtOwkJCSANCiAgfSBkaXZfdDsNCg0KIA0KDQp0eXBlZGVmIHN0cnVjdA0K
ICB7DQogICAgbG9uZyBpbnQgcXVvdDsJCSANCiAgICBsb25nIGludCByZW07CQkgDQogIH0gbGRp
dl90Ow0KDQoNCg0KIyA2NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzDQoNCg0KDQogDQoNCg0K
DQogDQoNCg0KDQoNCg0KIA0KDQpleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXgg
ICh2b2lkKSAgdGhyb3cgKCkgIDsNCg0KDQogDQpleHRlcm4gZG91YmxlIGF0b2YgIChfX2NvbnN0
IGNoYXIgKl9fbnB0cikgIHRocm93ICgpICA7DQogDQpleHRlcm4gaW50IGF0b2kgIChfX2NvbnN0
IGNoYXIgKl9fbnB0cikgIHRocm93ICgpICA7DQogDQpleHRlcm4gbG9uZyBpbnQgYXRvbCAgKF9f
Y29uc3QgY2hhciAqX19ucHRyKSAgdGhyb3cgKCkgIDsNCg0KDQogDQpfX2V4dGVuc2lvbl9fIGV4
dGVybiBsb25nIGxvbmcgaW50IGF0b2xsICAoX19jb25zdCBjaGFyICpfX25wdHIpICB0aHJvdyAo
KSAgOw0KDQoNCiANCmV4dGVybiBkb3VibGUgc3RydG9kICAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwNCgkJCSAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSAgdGhyb3cgKCkg
IDsNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsDQoJCQkgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLCBpbnQgX19iYXNlKSAgdGhyb3cgKCkgIDsNCiANCmV4dGVybiB1bnNpZ25lZCBsb25n
IGludCBzdHJ0b3VsICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwNCgkJCQkgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsDQoJCQkJICAgICAgIGludCBfX2Jhc2UpICB0
aHJvdyAoKSAgOw0KDQoNCiANCl9fZXh0ZW5zaW9uX18NCmV4dGVybiBsb25nIGxvbmcgaW50IHN0
cnRvcSAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsDQoJCQkJICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgIHRocm93ICgpICA7DQogDQpfX2V4dGVuc2lv
bl9fDQpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxICAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwNCgkJCQkJICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LA0KCQkJCQkgICAgaW50IF9fYmFzZSkgIHRocm93ICgpICA7DQoNCg0KDQogDQoNCiANCl9fZXh0
ZW5zaW9uX18NCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLA0KCQkJCSAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg
X19iYXNlKSAgdGhyb3cgKCkgIDsNCiANCl9fZXh0ZW5zaW9uX18NCmV4dGVybiB1bnNpZ25lZCBs
b25nIGxvbmcgaW50IHN0cnRvdWxsICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwN
CgkJCQkJICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwNCgkJCQkJICAgICBpbnQgX19i
YXNlKSAgdGhyb3cgKCkgIDsNCg0KDQoNCiMgMTkwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMN
Cg0KDQoNCiANCg0KDQpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsICAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwNCgkJCQkgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwNCgkJCQkgICAgICBpbnQgX19ncm91cCkgIHRocm93ICgpICA7DQpleHRlcm4gZmxvYXQg
X19zdHJ0b2ZfaW50ZXJuYWwgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLA0KCQkJ
CSAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSAgdGhyb3cgKCkg
IDsNCmV4dGVybiBsb25nIGRvdWJsZSAgX19zdHJ0b2xkX2ludGVybmFsICAoX19jb25zdCBjaGFy
ICoNCgkJCQkJCV9fcmVzdHJpY3QgX19ucHRyLA0KCQkJCQkJY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsDQoJCQkJCQlpbnQgX19ncm91cCkgIHRocm93ICgpICA7DQoNCmV4dGVybiBsb25nIGlu
dCBfX3N0cnRvbF9pbnRlcm5hbCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsDQoJ
CQkJCWNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLA0KCQkJCQlpbnQgX19iYXNlLCBpbnQgX19n
cm91cCkgIHRocm93ICgpICA7DQoNCg0KDQpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0
b3VsX2ludGVybmFsICAoX19jb25zdCBjaGFyICoNCgkJCQkJCSAgX19yZXN0cmljdCBfX25wdHIs
DQoJCQkJCQkgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLA0KCQkJCQkJICBpbnQgX19iYXNl
LCBpbnQgX19ncm91cCkgIHRocm93ICgpICA7DQoNCg0KDQoNCl9fZXh0ZW5zaW9uX18NCmV4dGVy
biBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsDQoJCQkJCSAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLA0KCQkJ
CQkgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgIHRocm93ICgpICA7DQoNCg0KDQpfX2V4
dGVuc2lvbl9fDQpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVy
bmFsICAoX19jb25zdCBjaGFyICoNCgkJCQkJCQlfX3Jlc3RyaWN0IF9fbnB0ciwNCgkJCQkJCQlj
aGFyICoqDQoJCQkJCQkJX19yZXN0cmljdCBfX2VuZHB0ciwNCgkJCQkJCQlpbnQgX19iYXNlLA0K
CQkJCQkJCWludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsNCg0KDQoNCg0KIyAzMjYgIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMw0KDQoNCg0KDQogDQoNCg0KZXh0ZXJuIGNoYXIgKmw2NGEgIChsb25n
IGludCBfX24pICB0aHJvdyAoKSAgOw0KDQogDQpleHRlcm4gbG9uZyBpbnQgYTY0bCAgKF9fY29u
c3QgY2hhciAqX19zKSAgdGhyb3cgKCkgIDsNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0K
DQoNCg0KDQoNCmV4dGVybiAiQyIgeyANCg0KDQoNCg0KdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7
DQp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Ow0KdHlwZWRlZiBfX3VfaW50IHVfaW50Ow0KdHlw
ZWRlZiBfX3VfbG9uZyB1X2xvbmc7DQp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsNCnR5cGVkZWYg
X191X3F1YWRfdCB1X3F1YWRfdDsNCnR5cGVkZWYgX19mc2lkX3QgZnNpZF90Ow0KDQoNCnR5cGVk
ZWYgX19sb2ZmX3QgbG9mZl90Ow0KDQoNCg0KdHlwZWRlZiBfX2lub190IGlub190Ow0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsNCg0KDQoNCg0KdHlwZWRlZiBf
X2dpZF90IGdpZF90Ow0KDQoNCg0KDQp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsNCg0KDQoNCg0K
dHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsNCg0KDQoNCg0KdHlwZWRlZiBfX3VpZF90IHVpZF90
Ow0KDQoNCg0KDQoNCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7DQoNCg0KDQoNCnR5cGVkZWYgX19pZF90IGlkX3Q7DQoN
Cg0KDQp0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90Ow0KDQoNCg0KDQp0eXBlZGVmIF9fZGFkZHJf
dCBkYWRkcl90Ow0KdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsNCg0KDQoNCnR5cGVkZWYgX19r
ZXlfdCBrZXlfdDsNCg0KDQoNCg0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzDQog
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCiMgNTEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMNCg0KDQoNCiMgNjIgIi91c3Iv
aW5jbHVkZS90aW1lLmgiIDMNCg0KDQoNCg0KDQoNCg0KDQogDQp0eXBlZGVmIF9fdGltZV90IHRp
bWVfdDsNCg0KDQoNCg0KDQojIDg5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzDQoNCg0KDQoNCiMg
Mjc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzDQoNCg0KDQojIDEyMiAiL3Vzci9pbmNsdWRlL3N5
cy90eXBlcy5oIiAyIDMNCg0KDQoNCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIu
OTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMNCg0KDQoNCg0KDQoNCiANCg0KDQojIDE5ICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMNCg0KDQoN
CiANCg0KDQogDQoNCg0KDQoNCg0KIA0KDQoNCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMw0KDQoNCiANCg0KDQoNCg0KDQogDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KIA0KDQogDQoNCiMg
MTMxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgi
IDMNCg0KDQogDQoNCiANCg0KDQojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIu
OTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQogDQoNCiMgMjcx
ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMN
Cg0KDQojIDI4MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0
ZGRlZi5oIiAzDQoNCg0KIA0KDQogDQoNCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyAxMjUgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMiAzDQoNCg0KDQogDQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOw0KdHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsN
Cg0KDQogDQoNCiMgMTU5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMNCg0KDQogDQoNCg0K
DQoNCg0KDQoNCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAg
X19RSV9fICkpKSA7DQp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoICBfX0hJX18gKSkpIDsNCnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fICggIF9fU0lfXyApKSkgOw0KdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKCAgX19ESV9fICkpKSA7DQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9p
bnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fUUlfXyApKSkgOw0KdHlwZWRlZiB1
bnNpZ25lZCBpbnQgdV9pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX0hJX18g
KSkpIDsNCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKCAgX19TSV9fICkpKSA7DQp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDY0X3QgX19h
dHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fRElfXyApKSkgOw0KDQp0eXBlZGVmIGludCByZWdp
c3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7DQoNCg0KIA0KDQoN
Cg0KDQoNCg0KIA0KIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMw0KIA0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQog
DQojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMNCiANCg0KDQoNCg0KDQoNCiMg
MzUgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQojIDE5MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMNCg0KDQogDQojIDEg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KIA0KDQoNCiANCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvc2VsZWN0LmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMw0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KIyA1NiAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDMN
Cg0KIyA3MiAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDMNCg0KIyAzMSAiL3Vzci9pbmNs
dWRlL3N5cy9zZWxlY3QuaCIgMiAzDQoNCg0KIA0KIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdz
ZXQuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQp0
eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsNCg0KIA0KDQoNCnR5cGVkZWYgc3RydWN0DQogIHsN
CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25l
ZCBsb25nIGludCkpKSBdOw0KICB9IF9fc2lnc2V0X3Q7DQoNCg0KDQoNCiANCg0KDQoNCg0KDQoj
IDEyNSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMNCg0KIyAzNCAiL3Vzci9pbmNsdWRl
L3N5cy9zZWxlY3QuaCIgMiAzDQoNCg0KIA0KDQojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEg
Mw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQojIDUxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzDQoNCg0KDQojIDYyICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAzDQoNCg0KDQojIDczICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz
DQoNCg0KDQoNCg0KDQoNCg0KIA0KDQpzdHJ1Y3QgdGltZXNwZWMNCiAgew0KICAgIGxvbmcgaW50
IHR2X3NlYzsJCSANCiAgICBsb25nIGludCB0dl9uc2VjOwkJIA0KICB9Ow0KDQoNCg0KDQoNCiMg
Mjc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzDQoNCg0KDQojIDM4ICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAyIDMNCg0KDQpleHRlcm4gIkMiIHsgDQoNCiANCg0KDQoNCnN0cnVjdCB0aW1l
dmFsOw0KDQp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOw0KDQogDQp0eXBlZGVmIF9fZmRfc2V0
IGZkX3NldDsNCg0KIA0KDQoNCg0KIA0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoN
CmV4dGVybiBpbnQgX19zZWxlY3QgIChpbnQgX19uZmRzLCBfX2ZkX3NldCAqX19yZWFkZmRzLA0K
CQkJICBfX2ZkX3NldCAqX193cml0ZWZkcywgX19mZF9zZXQgKl9fZXhjZXB0ZmRzLA0KCQkJICBz
dHJ1Y3QgdGltZXZhbCAqX190aW1lb3V0KSAgdGhyb3cgKCkgIDsNCmV4dGVybiBpbnQgc2VsZWN0
ICAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywNCgkJCV9fZmRfc2V0ICpfX3dyaXRl
ZmRzLCBfX2ZkX3NldCAqX19leGNlcHRmZHMsDQoJCQlzdHJ1Y3QgdGltZXZhbCAqX190aW1lb3V0
KSAgdGhyb3cgKCkgIDsNCg0KIyA5MSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMw0KDQoN
Cn0gDQoNCg0KIyAxOTQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzDQoNCg0KIA0KIyAx
ICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMNCiANCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQojIDQ3ICIvdXNyL2lu
Y2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAzDQoNCg0KDQojIDE5NyAiL3Vzci9pbmNsdWRlL3N5cy90
eXBlcy5oIiAyIDMNCg0KDQoNCg0KIA0KDQp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CSAg
DQp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90OyAgDQp0eXBlZGVmIF9fZnNmaWxjbnRf
dCBmc2ZpbGNudF90OyAgDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQp9IA0KDQoNCiMgMzM5ICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMw0KDQoNCiANCg0KDQoNCiANCmV4dGVybiBpbnQzMl90
IHJhbmRvbSAgKHZvaWQpICB0aHJvdyAoKSAgOw0KDQogDQpleHRlcm4gdm9pZCBzcmFuZG9tICAo
dW5zaWduZWQgaW50IF9fc2VlZCkgIHRocm93ICgpICA7DQoNCiANCg0KDQoNCmV4dGVybiB2b2lk
ICogIGluaXRzdGF0ZSAgKHVuc2lnbmVkIGludCBfX3NlZWQsIHZvaWQgKiAgX19zdGF0ZWJ1ZiwN
CgkJCSAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgIHRocm93ICgpICA7DQoNCiANCg0KZXh0ZXJu
IHZvaWQgKiAgc2V0c3RhdGUgICh2b2lkICogIF9fc3RhdGVidWYpICB0aHJvdyAoKSAgOw0KDQoN
Cg0KIA0KDQoNCg0Kc3RydWN0IHJhbmRvbV9kYXRhDQogIHsNCiAgICBpbnQzMl90ICpmcHRyOwkJ
IA0KICAgIGludDMyX3QgKnJwdHI7CQkgDQogICAgaW50MzJfdCAqc3RhdGU7CQkgDQogICAgaW50
IHJhbmRfdHlwZTsJCSANCiAgICBpbnQgcmFuZF9kZWc7CQkgDQogICAgaW50IHJhbmRfc2VwOwkJ
IA0KICAgIGludDMyX3QgKmVuZF9wdHI7CQkgDQogIH07DQoNCmV4dGVybiBpbnQgcmFuZG9tX3Ig
IChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsDQoJCQkgIGludDMyX3QgKl9f
cmVzdHJpY3QgX19yZXN1bHQpICB0aHJvdyAoKSAgOw0KDQpleHRlcm4gaW50IHNyYW5kb21fciAg
KHVuc2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpICB0aHJvdyAo
KSAgOw0KDQpleHRlcm4gaW50IGluaXRzdGF0ZV9yICAodW5zaWduZWQgaW50IF9fc2VlZCwNCgkJ
CSAgICAgdm9pZCAqICBfX3Jlc3RyaWN0IF9fc3RhdGVidWYsDQoJCQkgICAgIHNpemVfdCBfX3N0
YXRlbGVuLA0KCQkJICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpICB0
aHJvdyAoKSAgOw0KDQpleHRlcm4gaW50IHNldHN0YXRlX3IgICh2b2lkICogIF9fcmVzdHJpY3Qg
X19zdGF0ZWJ1ZiwNCgkJCSAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYp
ICB0aHJvdyAoKSAgOw0KDQoNCg0KDQogDQpleHRlcm4gaW50IHJhbmQgICh2b2lkKSAgdGhyb3cg
KCkgIDsNCiANCmV4dGVybiB2b2lkIHNyYW5kICAodW5zaWduZWQgaW50IF9fc2VlZCkgIHRocm93
ICgpICA7DQoNCg0KIA0KZXh0ZXJuIGludCByYW5kX3IgICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkg
IHRocm93ICgpICA7DQoNCg0KDQoNCiANCg0KIA0KZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICAodm9p
ZCkgIHRocm93ICgpICA7DQpleHRlcm4gZG91YmxlIGVyYW5kNDggICh1bnNpZ25lZCBzaG9ydCBp
bnQgX194c3ViaVszXSkgIHRocm93ICgpICA7DQoNCiANCmV4dGVybiBsb25nIGludCBscmFuZDQ4
ICAodm9pZCkgIHRocm93ICgpICA7DQpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAgKHVuc2lnbmVk
IHNob3J0IGludCBfX3hzdWJpWzNdKSAgdGhyb3cgKCkgIDsNCg0KIA0KZXh0ZXJuIGxvbmcgaW50
IG1yYW5kNDggICh2b2lkKSAgdGhyb3cgKCkgIDsNCmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICAo
dW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pICB0aHJvdyAoKSAgOw0KDQogDQpleHRlcm4g
dm9pZCBzcmFuZDQ4ICAobG9uZyBpbnQgX19zZWVkdmFsKSAgdGhyb3cgKCkgIDsNCmV4dGVybiB1
bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZb
M10pICB0aHJvdyAoKSAgOw0KZXh0ZXJuIHZvaWQgbGNvbmc0OCAgKHVuc2lnbmVkIHNob3J0IGlu
dCBfX3BhcmFtWzddKSAgdGhyb3cgKCkgIDsNCg0KIA0Kc3RydWN0IGRyYW5kNDhfZGF0YQ0KICB7
DQogICAgdW5zaWduZWQgc2hvcnQgaW50IHhbM107CSANCiAgICB1bnNpZ25lZCBzaG9ydCBpbnQg
YVszXTsJIA0KICAgIHVuc2lnbmVkIHNob3J0IGludCBjOwkgDQogICAgdW5zaWduZWQgc2hvcnQg
aW50IG9sZF94WzNdOyAgDQogICAgaW50IGluaXQ7CQkJIA0KICB9Ow0KDQoNCiANCmV4dGVybiBp
bnQgZHJhbmQ0OF9yICAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwN
CgkJCSAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgIHRocm93ICgpICA7DQpleHRlcm4g
aW50IGVyYW5kNDhfciAgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLA0KCQkJICAgc3Ry
dWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwNCgkJCSAgIGRvdWJsZSAqX19y
ZXN0cmljdCBfX3Jlc3VsdCkgIHRocm93ICgpICA7DQoNCiANCmV4dGVybiBpbnQgbHJhbmQ0OF9y
ICAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwNCgkJCSAgIGxvbmcg
aW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSAgdGhyb3cgKCkgIDsNCmV4dGVybiBpbnQgbnJhbmQ0
OF9yICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sDQoJCQkgICBzdHJ1Y3QgZHJhbmQ0
OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLA0KCQkJICAgbG9uZyBpbnQgKl9fcmVzdHJpY3Qg
X19yZXN1bHQpICB0aHJvdyAoKSAgOw0KDQogDQpleHRlcm4gaW50IG1yYW5kNDhfciAgKHN0cnVj
dCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsDQoJCQkgICBsb25nIGludCAqX19y
ZXN0cmljdCBfX3Jlc3VsdCkgIHRocm93ICgpICA7DQpleHRlcm4gaW50IGpyYW5kNDhfciAgKHVu
c2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLA0KCQkJICAgc3RydWN0IGRyYW5kNDhfZGF0YSAq
X19yZXN0cmljdCBfX2J1ZmZlciwNCgkJCSAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0
KSAgdGhyb3cgKCkgIDsNCg0KIA0KZXh0ZXJuIGludCBzcmFuZDQ4X3IgIChsb25nIGludCBfX3Nl
ZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSAgdGhyb3cgKCkgIDsNCg0KZXh0
ZXJuIGludCBzZWVkNDhfciAgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sDQoJCQkg
IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSAgdGhyb3cgKCkgIDsNCg0KZXh0ZXJuIGlu
dCBsY29uZzQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwNCgkJCSAgIHN0cnVj
dCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSAgdGhyb3cgKCkgIDsNCg0KDQoNCg0KDQoNCg0KIA0K
ZXh0ZXJuIHZvaWQgKiAgbWFsbG9jICAoc2l6ZV90IF9fc2l6ZSkgIHRocm93ICgpICA7DQogDQpl
eHRlcm4gdm9pZCAqICBjYWxsb2MgIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkgIHRo
cm93ICgpICA7DQoNCg0KDQogDQoNCmV4dGVybiB2b2lkICogIHJlYWxsb2MgICh2b2lkICogIF9f
cHRyLCBzaXplX3QgX19zaXplKSAgdGhyb3cgKCkgIDsNCiANCmV4dGVybiB2b2lkIGZyZWUgICh2
b2lkICogIF9fcHRyKSAgdGhyb3cgKCkgIDsNCg0KDQogDQpleHRlcm4gdm9pZCBjZnJlZSAgKHZv
aWQgKiAgX19wdHIpICB0aHJvdyAoKSAgOw0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvYWxsb2Nh
LmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMNCg0KDQoNCg0KDQoNCiANCg0KDQojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMNCg0KDQoNCiANCg0KDQogDQoNCg0KDQoNCg0K
IA0KDQoNCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9z
dGRkZWYuaCIgMw0KDQoNCiANCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KIA0KDQogDQoNCiMgMTMxICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMNCg0KDQogDQoNCiANCg0KDQoj
IDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5o
IiAzDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQogDQoNCiMgMjcxICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMNCg0KDQojIDI4MyAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzDQoNCg0KIA0KDQog
DQoNCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMNCg0KDQpleHRlcm4gIkMiIHsg
DQoNCiANCg0KDQogDQpleHRlcm4gdm9pZCAqICBhbGxvY2EgIChzaXplX3QgX19zaXplKSAgdGhy
b3cgKCkgIDsNCg0KDQoNCg0KDQp9IA0KDQoNCiMgNDkyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDIgMw0KDQoNCg0KDQogDQpleHRlcm4gdm9pZCAqICB2YWxsb2MgIChzaXplX3QgX19zaXplKSAg
dGhyb3cgKCkgIDsNCg0KDQoNCiANCmV4dGVybiB2b2lkIGFib3J0ICAodm9pZCkgIHRocm93ICgp
ICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOw0KDQoNCiANCmV4dGVybiBpbnQgYXRl
eGl0ICAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSAgdGhyb3cgKCkgIDsNCg0KDQogDQoNCmV4dGVy
biBpbnQgX19vbl9leGl0ICAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqICBf
X2FyZyksDQoJCQkgICB2b2lkICogIF9fYXJnKSAgdGhyb3cgKCkgIDsNCmV4dGVybiBpbnQgb25f
ZXhpdCAgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiAgX19hcmcpLA0KCQkJ
IHZvaWQgKiAgX19hcmcpICB0aHJvdyAoKSAgOw0KDQoNCiANCg0KDQpleHRlcm4gdm9pZCBleGl0
ICAoaW50IF9fc3RhdHVzKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f
KSk7DQoNCg0KDQoNCg0KDQoNCg0KIA0KZXh0ZXJuIGNoYXIgKmdldGVudiAgKF9fY29uc3QgY2hh
ciAqX19uYW1lKSAgdGhyb3cgKCkgIDsNCg0KIA0KDQpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0
ZW52ICAoX19jb25zdCBjaGFyICpfX25hbWUpICB0aHJvdyAoKSAgOw0KDQoNCiANCiANCg0KZXh0
ZXJuIGludCBwdXRlbnYgIChjaGFyICpfX3N0cmluZykgIHRocm93ICgpICA7DQoNCg0KDQogDQoN
CmV4dGVybiBpbnQgc2V0ZW52ICAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAq
X192YWx1ZSwNCgkJCWludCBfX3JlcGxhY2UpICB0aHJvdyAoKSAgOw0KDQogDQpleHRlcm4gdm9p
ZCB1bnNldGVudiAgKF9fY29uc3QgY2hhciAqX19uYW1lKSAgdGhyb3cgKCkgIDsNCg0KDQoNCiAN
Cg0KDQpleHRlcm4gaW50IGNsZWFyZW52ICAodm9pZCkgIHRocm93ICgpICA7DQoNCg0KDQoNCiAN
Cg0KDQoNCmV4dGVybiBjaGFyICpta3RlbXAgIChjaGFyICpfX3RlbXBsYXRlKSAgdGhyb3cgKCkg
IDsNCg0KIA0KDQoNCg0KDQpleHRlcm4gaW50IG1rc3RlbXAgIChjaGFyICpfX3RlbXBsYXRlKSAg
dGhyb3cgKCkgIDsNCg0KDQoNCiANCmV4dGVybiBpbnQgc3lzdGVtICAoX19jb25zdCBjaGFyICpf
X2NvbW1hbmQpICB0aHJvdyAoKSAgOw0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0K
ZXh0ZXJuIGNoYXIgKnJlYWxwYXRoICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwN
CgkJCSAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpICB0aHJvdyAoKSAgOw0KDQoNCg0K
IA0KDQoNCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgIChfX2NvbnN0IHZvaWQgKiAsIF9f
Y29uc3Qgdm9pZCAqICkgIDsNCg0KDQoNCg0KDQoNCiANCg0KZXh0ZXJuIHZvaWQgKiAgYnNlYXJj
aCAgKF9fY29uc3Qgdm9pZCAqICBfX2tleSwgX19jb25zdCB2b2lkICogIF9fYmFzZSwNCgkJCSAg
ICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwNCgkJCSAgICAgICBfX2NvbXBhcl9m
bl90IF9fY29tcGFyKSAgOw0KDQogDQoNCmV4dGVybiB2b2lkIHFzb3J0ICAodm9pZCAqICBfX2Jh
c2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLA0KCQkJICBfX2NvbXBhcl9mbl90IF9f
Y29tcGFyKSAgOw0KDQoNCiANCmV4dGVybiBpbnQgYWJzICAoaW50IF9feCkgIHRocm93ICgpICAg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOw0KZXh0ZXJuIGxvbmcgaW50IGxhYnMgIChsb25n
IGludCBfX3gpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsNCg0KDQoN
Cg0KDQoNCiANCg0KIA0KZXh0ZXJuIGRpdl90IGRpdiAgKGludCBfX251bWVyLCBpbnQgX19kZW5v
bSkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOw0KZXh0ZXJuIGxkaXZf
dCBsZGl2ICAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkgIHRocm93ICgpICAN
CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOw0KDQoNCg0KDQoNCg0KDQoNCiANCg0K
DQogDQoNCg0KZXh0ZXJuIGNoYXIgKmVjdnQgIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0
LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwNCgkJCWludCAqX19yZXN0cmljdCBfX3NpZ24pICB0
aHJvdyAoKSAgOw0KDQogDQoNCg0KZXh0ZXJuIGNoYXIgKmZjdnQgIChkb3VibGUgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwNCgkJCWludCAqX19yZXN0cmlj
dCBfX3NpZ24pICB0aHJvdyAoKSAgOw0KDQogDQoNCg0KZXh0ZXJuIGNoYXIgKmdjdnQgIChkb3Vi
bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgIHRocm93ICgpICA7DQoNCiAN
CmV4dGVybiBjaGFyICpxZWN2dCAgKGxvbmcgZG91YmxlICBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs
DQoJCQkgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pICB0
aHJvdyAoKSAgOw0KZXh0ZXJuIGNoYXIgKnFmY3Z0ICAobG9uZyBkb3VibGUgIF9fdmFsdWUsIGlu
dCBfX25kaWdpdCwNCgkJCSBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0
IF9fc2lnbikgIHRocm93ICgpICA7DQpleHRlcm4gY2hhciAqcWdjdnQgIChsb25nIGRvdWJsZSAg
X192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgIHRocm93ICgpICA7DQoNCg0KDQog
DQoNCmV4dGVybiBpbnQgZWN2dF9yICAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50
ICpfX3Jlc3RyaWN0IF9fZGVjcHQsDQoJCQlpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpf
X3Jlc3RyaWN0IF9fYnVmLA0KCQkJc2l6ZV90IF9fbGVuKSAgdGhyb3cgKCkgIDsNCmV4dGVybiBp
bnQgZmN2dF9yICAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0
IF9fZGVjcHQsDQoJCQlpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9f
YnVmLA0KCQkJc2l6ZV90IF9fbGVuKSAgdGhyb3cgKCkgIDsNCg0KZXh0ZXJuIGludCBxZWN2dF9y
ICAobG9uZyBkb3VibGUgIF9fdmFsdWUsIGludCBfX25kaWdpdCwNCgkJCSBpbnQgKl9fcmVzdHJp
Y3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwNCgkJCSBjaGFyICpfX3Jlc3RyaWN0
IF9fYnVmLCBzaXplX3QgX19sZW4pICB0aHJvdyAoKSAgOw0KZXh0ZXJuIGludCBxZmN2dF9yICAo
bG9uZyBkb3VibGUgIF9fdmFsdWUsIGludCBfX25kaWdpdCwNCgkJCSBpbnQgKl9fcmVzdHJpY3Qg
X19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwNCgkJCSBjaGFyICpfX3Jlc3RyaWN0IF9f
YnVmLCBzaXplX3QgX19sZW4pICB0aHJvdyAoKSAgOw0KDQoNCg0KDQogDQoNCmV4dGVybiBpbnQg
bWJsZW4gIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7DQogDQoN
CmV4dGVybiBpbnQgbWJ0b3djICAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywNCgkJCV9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOw0KIA0KDQpl
eHRlcm4gaW50IHdjdG9tYiAgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSAgdGhyb3cgKCkg
IDsNCg0KDQogDQpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICAod2NoYXJfdCAqX19yZXN0cmljdCAg
X19wd2NzLA0KCQkJICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19u
KSAgdGhyb3cgKCkgIDsNCiANCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgIChjaGFyICpfX3Jlc3Ry
aWN0IF9fcywNCgkJCSAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6
ZV90IF9fbikgIHRocm93ICgpICA7DQoNCg0KDQogDQoNCg0KDQpleHRlcm4gaW50IHJwbWF0Y2gg
IChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpICB0aHJvdyAoKSAgOw0KDQoNCg0KIyA3MzIgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMw0KDQoNCg0KIyA3NTYgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMw0KDQoNCiMgNzY2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMNCg0KDQoNCg0KDQp9IA0K
DQoNCiMgNTAgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzDQoNCiMgMSAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMNCg0KDQoNCg0KDQoNCiAN
Cg0KDQoNCg0KDQoNCg0KIA0KDQogDQoNCg0KDQoNCiANCg0KDQogDQoNCg0KDQoNCg0KIA0KDQoN
CiMgNjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYu
aCIgMw0KDQoNCiANCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQogDQoNCg0KDQoNCg0KIA0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQp0eXBlZGVmIGludCBwdHJkaWZmX3Q7DQoNCg0KDQoNCg0KDQoNCg0KDQogDQoN
Cg0KDQoNCiANCg0KIA0KDQoNCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45
NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMNCg0KDQoNCg0KDQogDQoNCg0KDQoNCiANCg0KDQojIDI2
OSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAz
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KIA0KDQojIDMxNyAiL3Vzci9s
aWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzDQoNCg0KDQoN
CiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQojIDUxICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
c3RsX2FsZ29iYXNlLmgiIDIgMw0KDQojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8y
Ljk1LjIvaW5jbHVkZS9uZXcuaCIgMSAzDQogDQoNCg0KDQoNCiMgMSAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL25ldyIgMSAzDQogDQogDQoNCg0KDQoNCiNwcmFn
bWEgaW50ZXJmYWNlICJuZXciDQojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1
LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzDQojIDM0MiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp
bnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzDQoNCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL25ldyIgMiAzDQoNCiMgMSAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL2V4Y2VwdGlvbiIgMSAzDQogDQogDQoNCg0KDQoN
CiNwcmFnbWEgaW50ZXJmYWNlICJleGNlcHRpb24iDQoNCmV4dGVybiAiQysrIiB7DQoNCm5hbWVz
cGFjZSBzdGQgew0KDQpjbGFzcyBleGNlcHRpb24gew0KcHVibGljOg0KICBleGNlcHRpb24gKCkg
eyB9DQogIHZpcnR1YWwgfmV4Y2VwdGlvbiAoKSB7IH0NCiAgdmlydHVhbCBjb25zdCBjaGFyKiB3
aGF0ICgpIGNvbnN0Ow0KfTsNCg0KY2xhc3MgYmFkX2V4Y2VwdGlvbiA6IHB1YmxpYyBleGNlcHRp
b24gew0KcHVibGljOg0KICBiYWRfZXhjZXB0aW9uICgpIHsgfQ0KICB2aXJ0dWFsIH5iYWRfZXhj
ZXB0aW9uICgpIHsgfQ0KfTsNCg0KdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgp
Ow0KdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsNCg0KdGVybWluYXRlX2hh
bmRsZXIgc2V0X3Rlcm1pbmF0ZSAodGVybWluYXRlX2hhbmRsZXIpOw0Kdm9pZCB0ZXJtaW5hdGUg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOw0KdW5leHBlY3RlZF9oYW5kbGVyIHNl
dF91bmV4cGVjdGVkICh1bmV4cGVjdGVkX2hhbmRsZXIpOw0Kdm9pZCB1bmV4cGVjdGVkICgpIF9f
YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsNCmJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uICgp
Ow0KDQp9ICANCg0KfSAgDQoNCg0KIyA5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45
NS4yL2luY2x1ZGUvbmV3IiAyIDMNCg0KDQpleHRlcm4gIkMrKyIgew0KDQpuYW1lc3BhY2Ugc3Rk
IHsNCg0KICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uIHsNCiAgcHVibGljOg0K
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gImJh
ZF9hbGxvYyI7IH0NCiAgfTsNCg0KICBzdHJ1Y3Qgbm90aHJvd190IHt9Ow0KICBleHRlcm4gY29u
c3Qgbm90aHJvd190IG5vdGhyb3c7DQogIHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOw0K
ICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIgKG5ld19oYW5kbGVyKTsNCg0KfSAgDQoNCiAN
CnZvaWQgKm9wZXJhdG9yIG5ldyAoc2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOw0Kdm9p
ZCAqb3BlcmF0b3IgbmV3W10gKHNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsNCnZvaWQg
b3BlcmF0b3IgZGVsZXRlICh2b2lkICopIHRocm93KCk7DQp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtd
ICh2b2lkICopIHRocm93KCk7DQp2b2lkICpvcGVyYXRvciBuZXcgKHNpemVfdCwgY29uc3Qgc3Rk
Ojpub3Rocm93X3QmKSB0aHJvdygpOw0Kdm9pZCAqb3BlcmF0b3IgbmV3W10gKHNpemVfdCwgY29u
c3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOw0Kdm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQg
KiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOw0Kdm9pZCBvcGVyYXRvciBkZWxldGVb
XSAodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7DQoNCiANCmlubGluZSB2
b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBw
bGFjZTsgfQ0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHNpemVfdCwgdm9pZCAqcGxhY2Up
IHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0NCn0gIA0KDQoNCiMgNiAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL25ldy5oIiAyIDMNCg0KDQp1c2luZyBzdGQ6Om5l
d19oYW5kbGVyOw0KdXNpbmcgc3RkOjpzZXRfbmV3X2hhbmRsZXI7DQoNCg0KIyA1MiAiL3Vzci9s
aWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0
bF9hbGdvYmFzZS5oIiAyIDMNCg0KDQoNCg0KIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDEgMw0K
IA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQoN
Cg0KDQoNCg0KDQogDQoNCnN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307DQpzdHJ1Y3Qgb3V0
cHV0X2l0ZXJhdG9yX3RhZyB7fTsNCnN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1Ymxp
YyBpbnB1dF9pdGVyYXRvcl90YWcge307DQpzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcge307DQpzdHJ1Y3QgcmFuZG9tX2FjY2Vz
c19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307DQoN
CiANCiANCiANCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1
Y3QgaW5wdXRfaXRlcmF0b3Igew0KICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRv
cl9jYXRlZ29yeTsNCiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsNCiAg
dHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIF9U
cCogICAgICAgICAgICAgICBwb2ludGVyOw0KICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICBy
ZWZlcmVuY2U7DQp9Ow0KDQpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yIHsNCiAgdHlwZWRlZiBvdXRw
dXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVmIHZvaWQgICAgICAg
ICAgICAgICAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZl
cmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7DQogIHR5
cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yIHsNCiAgdHlw
ZWRlZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiBf
VHAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOw0KICB0eXBlZGVmIF9EaXN0YW5jZSAgICAg
ICAgICAgIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICBw
b2ludGVyOw0KICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsNCn07DQoN
Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlkaXJlY3Rp
b25hbF9pdGVyYXRvciB7DQogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRl
cmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWVfdHlwZTsNCiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNl
X3R5cGU7DQogIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsNCiAg
dHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7DQp9Ow0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yIHsNCiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsNCiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBl
Ow0KICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsN
CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOw0KICB0eXBlZGVm
IF9UcCYgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsNCn07DQoNCiMgOTggIi91c3Iv
bGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z
dGxfaXRlcmF0b3IuaCIgMw0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0Kc3Ry
dWN0IGl0ZXJhdG9yX3RyYWl0cyB7DQogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVy
YXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRl
cmF0b3I6OnZhbHVlX3R5cGUgICAgICAgIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUg
X0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYg
dHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyICAgICAgICAgICBwb2ludGVyOw0KICB0eXBlZGVm
IHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlICAgICAgICAgcmVmZXJlbmNlOw0KfTsNCg0K
dGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gew0KICB0
eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0
eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOw0KICB0eXBlZGVm
IHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYg
X1RwKiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7DQogIHR5cGVkZWYgX1RwJiAgICAg
ICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+
DQpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsNCiAgdHlwZWRlZiByYW5kb21f
YWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiBfVHAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBwdHJkaWZmX3QgICAg
ICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIGNvbnN0IF9UcCogICAg
ICAgICAgICAgICAgICBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IF9UcCYgICAgICAgICAgICAg
ICAgICByZWZlcmVuY2U7DQp9Ow0KDQogDQogDQogDQogDQoNCiANCg0KdGVtcGxhdGUgPGNsYXNz
IF9JdGVyPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9y
X2NhdGVnb3J5DQpfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJikNCnsNCiAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0
ZWdvcnk7DQogIHJldHVybiBfQ2F0ZWdvcnkoKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVy
Pg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlw
ZSoNCl9fZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYpDQp7DQogIHJldHVybiBzdGF0aWNfY2Fz
dDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqPigwKTsN
Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSXRlcj46OnZhbHVlX3R5cGUqDQpfX3ZhbHVlX3R5cGUoY29uc3QgX0l0ZXImKQ0Kew0K
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFs
dWVfdHlwZSo+KDApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+DQppbmxpbmUgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkNCml0ZXJhdG9yX2Nh
dGVnb3J5KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19p
KTsgfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4NCmlubGluZSB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqDQpkaXN0YW5jZV90eXBlKGNvbnN0IF9J
dGVyJiBfX2kpIHsgcmV0dXJuIF9fZGlzdGFuY2VfdHlwZShfX2kpOyB9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfSXRlcj4NCmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1
ZV90eXBlKg0KdmFsdWVfdHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5
cGUoX19pKTsgfQ0KDQoNCg0KDQoNCiMgMjU5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgv
Mi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMNCg0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4NCmlubGluZSB2
b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgaW5wdXRfaXRlcmF0
b3JfdGFnKQ0Kew0KICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsgKytfX2ZpcnN0OyArK19f
bjsgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf
RGlzdGFuY2U+DQppbmxpbmUgdm9pZCBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LCANCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
bGFzdCwgDQogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uLCByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZykNCnsNCiAgX19uICs9IF9fbGFzdCAtIF9fZmlyc3Q7DQp9DQoNCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIHZv
aWQgZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgDQogICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9EaXN0YW5jZSYgX19uKQ0Kew0KICBfX2Rpc3RhbmNl
KF9fZmlyc3QsIF9fbGFzdCwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7DQp9DQoN
Cg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQppbmxpbmUgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlDQpfX2Rpc3RhbmNl
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRl
cmF0b3JfdGFnKQ0Kew0KICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+
OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7
DQogICAgKytfX2ZpcnN0OyArK19fbjsNCiAgfQ0KICByZXR1cm4gX19uOw0KfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUNCl9fZGlzdGFu
Y2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2xhc3QsDQogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7DQogIHJldHVy
biBfX2xhc3QgLSBfX2ZpcnN0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
DQppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlDQpkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QpIHsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl
cmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSANCiAgICBfQ2F0ZWdvcnk7DQogIHJldHVybiBfX2Rp
c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOw0KfQ0KDQoNCg0KdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4NCmlubGluZSB2b2lkIF9fYWR2YW5j
ZShfSW5wdXRJdGVyJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykgew0K
ICB3aGlsZSAoX19uLS0pICsrX19pOw0KfQ0KDQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlk
aXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgdm9pZCBfX2FkdmFu
Y2UoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLCANCiAgICAgICAg
ICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgew0KICBpZiAoX19uID49
IDApDQogICAgd2hpbGUgKF9fbi0tKSArK19faTsNCiAgZWxzZQ0KICAgIHdoaWxlIChfX24rKykg
LS1fX2k7DQp9DQoNCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLCANCiAgICAgICAgICAgICAgICAgICAgICByYW5k
b21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgew0KICBfX2kgKz0gX19uOw0KfQ0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4NCmlubGluZSB2b2lkIGFkdmFu
Y2UoX0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikgew0KICBfX2FkdmFuY2UoX19p
LCBfX24sIGl0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Nv
bnRhaW5lcj4NCmNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yIHsNCnByb3RlY3RlZDoNCiAgX0Nv
bnRhaW5lciogY29udGFpbmVyOw0KcHVibGljOg0KICB0eXBlZGVmIF9Db250YWluZXIgICAgICAg
ICAgY29udGFpbmVyX3R5cGU7DQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRv
cl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7DQog
IHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYg
dm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAg
ICAgcmVmZXJlbmNlOw0KDQogIGV4cGxpY2l0IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWlu
ZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30NCiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0Nv
bnRhaW5lcj4mDQogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90
eXBlJiBfX3ZhbHVlKSB7IA0KICAgIGNvbnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOw0KICAg
IHJldHVybiAqdGhpczsNCiAgfQ0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYg
b3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0Nv
bnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQ0KICBiYWNrX2luc2VydF9p
dGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9DQp9
Ow0KDQojIDM3OCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9D
b250YWluZXI+DQppbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gYmFja19p
bnNlcnRlcihfQ29udGFpbmVyJiBfX3gpIHsNCiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y
PF9Db250YWluZXI+KF9feCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPg0KY2xh
c3MgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yIHsNCnByb3RlY3RlZDoNCiAgX0NvbnRhaW5lciogY29u
dGFpbmVyOw0KcHVibGljOg0KICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVy
X3R5cGU7DQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsN
CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgdm9p
ZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgdm9pZCAgICAgICAg
ICAgICAgICBwb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNl
Ow0KDQogIGV4cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDog
Y29udGFpbmVyKCZfX3gpIHt9DQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYN
CiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFs
dWUpIHsgDQogICAgY29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOw0KICAgIHJldHVybiAq
dGhpczsNCiAgfQ0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9y
KigpIHsgcmV0dXJuICp0aGlzOyB9DQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9DQogIGZyb250X2luc2VydF9pdGVyYXRv
cjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9DQp9Ow0KDQoj
IDQxNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9Db250YWlu
ZXI+DQppbmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2Vy
dGVyKF9Db250YWluZXImIF9feCkgew0KICByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9D
b250YWluZXI+KF9feCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPg0KY2xhc3Mg
aW5zZXJ0X2l0ZXJhdG9yIHsNCnByb3RlY3RlZDoNCiAgX0NvbnRhaW5lciogY29udGFpbmVyOw0K
ICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOw0KcHVibGljOg0KICB0eXBlZGVm
IF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7DQogIHR5cGVkZWYgb3V0cHV0X2l0
ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAg
ICAgIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNl
X3R5cGU7DQogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOw0KICB0eXBlZGVm
IHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOw0KDQogIGluc2VydF9pdGVyYXRvcihfQ29u
dGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkgDQogICAgOiBj
b250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQ0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4mDQogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBf
X3ZhbHVlKSB7IA0KICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsN
CiAgICArK2l0ZXI7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGluc2VydF9pdGVyYXRvcjxf
Q29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0N
Cn07DQoNCiMgNDU5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4u
Ly4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X0NvbnRhaW5lciwgY2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5lIA0KaW5zZXJ0X2l0ZXJhdG9yPF9D
b250YWluZXI+IGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9faSkNCnsNCiAg
dHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2l0ZXI7DQogIHJldHVybiBp
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LCBfX2l0ZXIoX19pKSk7DQp9DQoNCg0KdGVt
cGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX1Jl
ZmVyZW5jZSA9IF9UcCYsIA0KICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdD4g
DQoNCg0KDQoNCmNsYXNzIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvciB7DQogIHR5cGVk
ZWYgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3Is
IF9UcCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVu
Y2UsIF9EaXN0YW5jZT4gIF9TZWxmOw0KcHJvdGVjdGVkOg0KICBfQmlkaXJlY3Rpb25hbEl0ZXJh
dG9yIGN1cnJlbnQ7DQpwdWJsaWM6DQogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZm
ZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRl
cjsNCiAgdHlwZWRlZiBfUmVmZXJlbmNlICAgICAgICAgICAgICAgICByZWZlcmVuY2U7DQoNCiAg
cmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30NCiAgZXhwbGljaXQgcmV2ZXJzZV9i
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX194KQ0KICAgIDog
Y3VycmVudChfX3gpIHt9DQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsg
cmV0dXJuIGN1cnJlbnQ7IH0NCiAgX1JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7DQogICAg
X0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7DQogICAgcmV0dXJuICotLV9f
dG1wOw0KICB9DQoNCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVy
YXRvciooKSk7IH0NCg0KICBfU2VsZiYgb3BlcmF0b3IrKygpIHsNCiAgICAtLWN1cnJlbnQ7DQog
ICAgcmV0dXJuICp0aGlzOw0KICB9DQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7DQogICAgX1Nl
bGYgX190bXAgPSAqdGhpczsNCiAgICAtLWN1cnJlbnQ7DQogICAgcmV0dXJuIF9fdG1wOw0KICB9
DQogIF9TZWxmJiBvcGVyYXRvci0tKCkgew0KICAgICsrY3VycmVudDsNCiAgICByZXR1cm4gKnRo
aXM7DQogIH0NCiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsNCiAgICBfU2VsZiBfX3RtcCA9ICp0
aGlzOw0KICAgICsrY3VycmVudDsNCiAgICByZXR1cm4gX190bXA7DQogIH0NCn07DQoNCiMgNTUw
ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpSXRlciwgY2xh
c3MgX1RwLCBjbGFzcyBfUmVmLA0KICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4NCmlubGluZSBi
b29sIG9wZXJhdG9yPT0oDQogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
PF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX194LCANCiAgICBjb25zdCByZXZlcnNl
X2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBf
X3kpDQp7DQogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7DQp9DQoNCg0KDQogDQog
DQogDQogDQogDQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+DQpjbGFzcyByZXZlcnNlX2l0
ZXJhdG9yIA0Kew0KcHJvdGVjdGVkOg0KICBfSXRlcmF0b3IgY3VycmVudDsNCnB1YmxpYzoNCiAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0
ZWdvcnkNCiAgICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQ0KICAgICAgICAgIHZhbHVlX3R5
cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZl
cmVuY2VfdHlwZQ0KICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcg0KICAgICAgICAgIHBvaW50ZXI7
DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5j
ZQ0KICAgICAgICAgIHJlZmVyZW5jZTsNCg0KICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90
eXBlOw0KICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2VsZjsNCg0KcHVi
bGljOg0KICByZXZlcnNlX2l0ZXJhdG9yKCkge30NCiAgZXhwbGljaXQgcmV2ZXJzZV9pdGVyYXRv
cihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkge30NCg0KICByZXZlcnNlX2l0ZXJh
dG9yKGNvbnN0IF9TZWxmJiBfX3gpIDogY3VycmVudChfX3guY3VycmVudCkge30NCg0KICB0ZW1w
bGF0ZSA8Y2xhc3MgX0l0ZXI+DQogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVy
YXRvcjxfSXRlcj4mIF9feCkNCiAgICA6IGN1cnJlbnQoX194LmJhc2UoKSkge30NCg0KICAgIA0K
ICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9DQogIHJlZmVy
ZW5jZSBvcGVyYXRvciooKSBjb25zdCB7DQogICAgX0l0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsN
CiAgICByZXR1cm4gKi0tX190bXA7DQogIH0NCg0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25z
dCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQ0KDQoNCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7
DQogICAgLS1jdXJyZW50Ow0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBfU2VsZiBvcGVyYXRv
cisrKGludCkgew0KICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7DQogICAgLS1jdXJyZW50Ow0KICAg
IHJldHVybiBfX3RtcDsNCiAgfQ0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsNCiAgICArK2N1cnJl
bnQ7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7DQog
ICAgX1NlbGYgX190bXAgPSAqdGhpczsNCiAgICArK2N1cnJlbnQ7DQogICAgcmV0dXJuIF9fdG1w
Ow0KICB9DQoNCiAgX1NlbGYgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsN
CiAgICByZXR1cm4gX1NlbGYoY3VycmVudCAtIF9fbik7DQogIH0NCiAgX1NlbGYmIG9wZXJhdG9y
Kz0oZGlmZmVyZW5jZV90eXBlIF9fbikgew0KICAgIGN1cnJlbnQgLT0gX19uOw0KICAgIHJldHVy
biAqdGhpczsNCiAgfQ0KICBfU2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29u
c3Qgew0KICAgIHJldHVybiBfU2VsZihjdXJyZW50ICsgX19uKTsNCiAgfQ0KICBfU2VsZiYgb3Bl
cmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKSB7DQogICAgY3VycmVudCArPSBfX247DQogICAg
cmV0dXJuICp0aGlzOw0KICB9DQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlw
ZSBfX24pIGNvbnN0IHsgcmV0dXJuICooKnRoaXMgKyBfX24pOyB9ICANCn07IA0KIA0KdGVtcGxh
dGUgPGNsYXNzIF9JdGVyYXRvcj4NCmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJz
ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsIA0KICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgew0KICByZXR1cm4gX194LmJhc2Uo
KSA9PSBfX3kuYmFzZSgpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5l
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LCAN
CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feSkgew0KICByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7DQp9DQoNCnRlbXBsYXRl
IDxjbGFzcyBfSXRlcmF0b3I+DQppbmxpbmUgdHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUNCm9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9y
PF9JdGVyYXRvcj4mIF9feCwgDQogICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+JiBfX3kpIHsNCiAgcmV0dXJuIF9feS5iYXNlKCkgLSBfX3guYmFzZSgpOw0KfQ0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPiANCm9wZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRp
ZmZlcmVuY2VfdHlwZSBfX24sDQogICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+JiBfX3gpIHsNCiAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3gu
YmFzZSgpIC0gX19uKTsNCn0NCg0KIyA4MDUgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8y
Ljk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMw0KDQoNCiAN
CiANCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3QgPSBwdHJkaWZmX3Q+IA0KY2xh
c3MgaXN0cmVhbV9pdGVyYXRvciB7DQogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gPD4gIChjb25z
dCBpc3RyZWFtX2l0ZXJhdG9yJiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvciYpOw0KcHJvdGVjdGVkOg0KICBpc3Ry
ZWFtKiBfTV9zdHJlYW07DQogIF9UcCBfTV92YWx1ZTsNCiAgYm9vbCBfTV9lbmRfbWFya2VyOw0K
ICB2b2lkIF9NX3JlYWQoKSB7DQogICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRy
dWUgOiBmYWxzZTsNCiAgICBpZiAoX01fZW5kX21hcmtlcikgKl9NX3N0cmVhbSA+PiBfTV92YWx1
ZTsNCiAgICBfTV9lbmRfbWFya2VyID0gKCpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOw0KICB9
DQpwdWJsaWM6DQogIHR5cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnICBpdGVyYXRvcl9jYXRlZ29y
eTsNCiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYg
X0Rpc3QgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgY29uc3QgX1Rw
KiAgICAgICAgICBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IF9UcCYgICAgICAgICAgcmVmZXJl
bmNlOw0KDQogIGlzdHJlYW1faXRlcmF0b3IoKSA6IF9NX3N0cmVhbSgmY2luKSwgX01fZW5kX21h
cmtlcihmYWxzZSkge30NCiAgaXN0cmVhbV9pdGVyYXRvcihpc3RyZWFtJiBfX3MpIDogX01fc3Ry
ZWFtKCZfX3MpIHsgX01fcmVhZCgpOyB9DQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7
IHJldHVybiBfTV92YWx1ZTsgfQ0KDQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0
dXJuICYob3BlcmF0b3IqKCkpOyB9DQoNCiAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiYg
b3BlcmF0b3IrKygpIHsgDQogICAgX01fcmVhZCgpOyANCiAgICByZXR1cm4gKnRoaXM7DQogIH0N
CiAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiBvcGVyYXRvcisrKGludCkgIHsNCiAgICBp
c3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+IF9fdG1wID0gKnRoaXM7DQogICAgX01fcmVhZCgp
Ow0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KfTsNCg0KIyA4NjQgIi91c3IvbGliL2djYy1saWIv
aTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3Iu
aCIgMw0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4NCmlubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9f
eCwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9E
aXN0YW5jZT4mIF9feSkgew0KICByZXR1cm4gKF9feC5fTV9zdHJlYW0gPT0gX195Ll9NX3N0cmVh
bSAmJg0KICAgICAgICAgIF9feC5fTV9lbmRfbWFya2VyID09IF9feS5fTV9lbmRfbWFya2VyKSB8
fA0KICAgICAgICAgX194Ll9NX2VuZF9tYXJrZXIgPT0gZmFsc2UgJiYgX195Ll9NX2VuZF9tYXJr
ZXIgPT0gZmFsc2U7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpjbGFzcyBvc3RyZWFtX2l0
ZXJhdG9yIHsNCnByb3RlY3RlZDoNCiAgb3N0cmVhbSogX01fc3RyZWFtOw0KICBjb25zdCBjaGFy
KiBfTV9zdHJpbmc7DQpwdWJsaWM6DQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVy
YXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7
DQogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVk
ZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgICAgICAgICAg
ICAgICAgcmVmZXJlbmNlOw0KDQogIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbSYgX19zKSA6IF9N
X3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKDApIHt9DQogIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVh
bSYgX19zLCBjb25zdCBjaGFyKiBfX2MpIA0KICAgIDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJp
bmcoX19jKSAge30NCiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0oY29uc3QgX1Rw
JiBfX3ZhbHVlKSB7IA0KICAgICpfTV9zdHJlYW0gPDwgX192YWx1ZTsNCiAgICBpZiAoX01fc3Ry
aW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0cmluZzsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAg
b3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQ0KICBv
c3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfSANCiAg
b3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0g
DQp9Ow0KDQojIDkwNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzDQoNCg0KIA0KDQoNCg0KIA0KIA0K
IA0KIyA1NiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMNCg0KDQoNCiANCg0KIA0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwgY2xhc3MgX1RwPg0K
aW5saW5lIHZvaWQgX19pdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIg
X19iLCBfVHAqKSB7DQogIF9UcCBfX3RtcCA9ICpfX2E7DQogICpfX2EgPSAqX19iOw0KICAqX19i
ID0gX190bXA7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9y
d2FyZEl0ZXIyPg0KaW5saW5lIHZvaWQgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9y
d2FyZEl0ZXIyIF9fYikgew0KICBfX2l0ZXJfc3dhcChfX2EsIF9fYiwgX192YWx1ZV90eXBlKCBf
X2EgKSApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5lIHZvaWQgc3dhcChfVHAm
IF9fYSwgX1RwJiBfX2IpIHsNCiAgX1RwIF9fdG1wID0gX19hOw0KICBfX2EgPSBfX2I7DQogIF9f
YiA9IF9fdG1wOw0KfQ0KDQogDQogDQoNCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0K
aW5saW5lIGNvbnN0IF9UcCYgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikgew0K
ICByZXR1cm4gX19iIDwgX19hID8gX19iIDogX19hOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
Pg0KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikg
ew0KICByZXR1cm4gIF9fYSA8IF9fYiA/IF9fYiA6IF9fYTsNCn0NCg0KDQoNCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPg0KaW5saW5lIGNvbnN0IF9UcCYgbWluKGNvbnN0IF9U
cCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKSB7DQogIHJldHVybiBfX2Nv
bXAoX19iLCBfX2EpID8gX19iIDogX19hOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQ29tcGFyZT4NCmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3Qg
X1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkgew0KICByZXR1cm4gX19jb21wKF9fYSwgX19iKSA/
IF9fYiA6IF9fYTsNCn0NCg0KIA0KIA0KDQogDQogDQogDQogDQogDQogDQogDQoNCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPg0K
aW5saW5lIF9PdXRwdXRJdGVyIF9fY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2Uq
KQ0Kew0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3Qp
DQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7DQogIHJldHVybiBfX3Jlc3VsdDsNCn0NCg0KdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3Mg
X0Rpc3RhbmNlPg0KaW5saW5lIF9PdXRwdXRJdGVyDQpfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikNCnsNCiAgZm9y
IChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pIHsNCiAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDsNCiAgICArK19fZmlyc3Q7DQogICAgKytfX3Jlc3VsdDsN
CiAgfQ0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQppbmxp
bmUgX1RwKg0KX19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9f
bGFzdCwgX1RwKiBfX3Jlc3VsdCkgew0KICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXpl
b2YoX1RwKSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7DQogIHJldHVybiBfX3Jlc3VsdCArIChfX2xh
c3QgLSBfX2ZpcnN0KTsNCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfT3V0cHV0SXRlciwgY2xhc3MgX0Jvb2xUeXBlPg0Kc3RydWN0IF9fY29weV9kaXNwYXRjaCB7
DQogIHN0YXRpYyBfT3V0cHV0SXRlciBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
KSB7DQogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46Oml0
ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsNCiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsNCiAgICByZXR1
cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9DYXRlZ29yeSgpLCAoX0Rpc3Rh
bmNlKikgMCk7DQogIH0NCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgX19jb3B5
X2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPg0Kew0KICBzdGF0aWMgX1RwKiBjb3B5
KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsN
CiAgICByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7DQog
IH0NCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoPGNv
bnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPg0Kew0KICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0
IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsNCiAgICBy
ZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7DQogIH0NCn07
DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlubGlu
ZSBfT3V0cHV0SXRlciBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
DQogICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgew0KICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfVHA7
DQogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yDQogICAgICAgICAgX1RyaXZpYWw7DQogIHJldHVybiBfX2NvcHlfZGlz
cGF0Y2g8X0lucHV0SXRlciwgX091dHB1dEl0ZXIsIF9Ucml2aWFsPg0KICAgIDo6Y29weShfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsNCn0NCg0KIyAyMTMgIi91c3IvbGliL2djYy1saWIvaTM4
Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIg
Mw0KDQoNCiANCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNz
IF9CaWRpcmVjdGlvbmFsSXRlcjIsIA0KICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4NCmlubGlu
ZSBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIx
IF9fZmlyc3QsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0LA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSop
DQp7DQogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkNCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9f
bGFzdDsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5s
aW5lIF9CaWRpcmVjdGlvbmFsSXRlciBfX2NvcHlfYmFja3dhcmQoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqKQ0Kew0KICBm
b3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikNCiAg
ICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQoNCg0K
IA0KIA0KIA0KIA0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyMiwNCiAgICAgICAgICBjbGFzcyBfQm9vbFR5cGU+DQpzdHJ1Y3Qg
X19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoDQp7DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjppdGVyYXRvcl9jYXRlZ29yeSANCiAgICAgICAg
ICBfQ2F0Ow0KICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25h
bEl0ZXIxPjo6ZGlmZmVyZW5jZV90eXBlDQogICAgICAgICAgX0Rpc3RhbmNlOw0KDQogIHN0YXRp
YyBfQmlkaXJlY3Rpb25hbEl0ZXIyIGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCAN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
bGFzdCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyMiBfX3Jlc3VsdCkgew0KICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCwgX0NhdCgpLCAoX0Rpc3RhbmNlKikgMCk7DQogIH0NCn07DQoNCnRlbXBs
YXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9U
cCosIF9fdHJ1ZV90eXBlPg0Kew0KICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJz
dCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsNCiAgICBjb25zdCBwdHJkaWZm
X3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7DQogICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0s
IF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7DQogICAgcmV0dXJuIF9fcmVzdWx0IC0gX051
bTsNCiAgfQ0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBfX2NvcHlfYmFja3dh
cmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+DQp7DQogIHN0YXRpYyBf
VHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jl
c3VsdCkgew0KICAgIHJldHVybiAgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCos
IF9fdHJ1ZV90eXBlPg0KICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOw0K
ICB9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwgY2xhc3MgX0JJMj4NCmlubGluZSBfQkky
IGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkg
ew0KICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9CSTI+Ojp2YWx1ZV90eXBlPg0KICAgICAgICAgICAgICAgICAgICAgICAgOjpoYXNfdHJp
dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yDQogICAgICAgICAgX1RyaXZpYWw7DQogIHJldHVybiBf
X2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+DQogICAgICAgICAg
ICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsNCn0NCg0KIyAzMDMgIi91c3Iv
bGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z
dGxfYWxnb2Jhc2UuaCIgMw0KDQoNCiANCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4NCnBhaXI8X0lucHV0SXRlciwgX091dHB1
dEl0ZXI+IF9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn
KSB7DQogIGZvciAoIDsgX19jb3VudCA+IDA7IC0tX19jb3VudCkgew0KICAgICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0Ow0KICAgICsrX19maXJzdDsNCiAgICArK19fcmVzdWx0Ow0KICB9DQogIHJldHVy
biBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPihfX2ZpcnN0LCBfX3Jlc3VsdCk7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+
DQppbmxpbmUgcGFpcjxfUkFJdGVyLCBfT3V0cHV0SXRlcj4NCl9fY29weV9uKF9SQUl0ZXIgX19m
aXJzdCwgX1NpemUgX19jb3VudCwNCiAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAg
ICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsNCiAgX1JBSXRlciBfX2xhc3QgPSBf
X2ZpcnN0ICsgX19jb3VudDsNCiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+KF9f
bGFzdCwgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+DQppbmxpbmUg
cGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4NCl9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJz
dCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsNCiAgcmV0dXJuIF9fY29w
eV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgX19pdGVy
YXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+DQppbmxpbmUgcGFpcjxfSW5wdXRJ
dGVyLCBfT3V0cHV0SXRlcj4NCmNvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291
bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7DQogIHJldHVybiBfX2NvcHlfbihfX2ZpcnN0LCBf
X2NvdW50LCBfX3Jlc3VsdCk7DQp9DQoNCiANCiANCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyLCBjbGFzcyBfVHA+DQp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkgew0KICBmb3IgKCA7IF9fZmlyc3Qg
IT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOw0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+DQpfT3V0cHV0
SXRlciBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9f
dmFsdWUpIHsNCiAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQ0KICAgICpfX2Zp
cnN0ID0gX192YWx1ZTsNCiAgcmV0dXJuIF9fZmlyc3Q7DQp9DQoNCiANCiANCg0KdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4NCnBhaXI8X0lucHV0SXRlcjEs
IF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKSB7
DQogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIp
IHsNCiAgICArK19fZmlyc3QxOw0KICAgICsrX19maXJzdDI7DQogIH0NCiAgcmV0dXJuIHBhaXI8
X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOw0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQmluYXJ5
UHJlZGljYXRlPg0KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1
dEl0ZXIxIF9fZmlyc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7DQogIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIp
KSB7DQogICAgKytfX2ZpcnN0MTsNCiAgICArK19fZmlyc3QyOw0KICB9DQogIHJldHVybiBwYWly
PF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsNCn0NCg0KdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4NCmlubGluZSBib29s
IGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpIHsNCiAgZm9yICggOyBfX2ZpcnN0MSAh
PSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQ0KICAgIGlmICgqX19maXJzdDEgIT0g
Kl9fZmlyc3QyKQ0KICAgICAgcmV0dXJuIGZhbHNlOw0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFy
eVByZWRpY2F0ZT4NCmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w
dXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs
IF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkgew0KICBmb3IgKCA7IF9fZmlyc3QxICE9
IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpDQogICAgaWYgKCFfX2JpbmFyeV9wcmVk
KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkNCiAgICAgIHJldHVybiBmYWxzZTsNCiAgcmV0dXJuIHRy
dWU7DQp9DQoNCiANCiANCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf
SW5wdXRJdGVyMj4NCmJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19m
aXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKSB7DQogIGZvciAoIDsg
X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyDQogICAgICAgIDsgKytf
X2ZpcnN0MSwgKytfX2ZpcnN0Mikgew0KICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpDQog
ICAgICByZXR1cm4gdHJ1ZTsNCiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQ0KICAgICAg
cmV0dXJuIGZhbHNlOw0KICB9DQogIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmly
c3QyICE9IF9fbGFzdDI7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3Mg
X0lucHV0SXRlcjIsIGNsYXNzIF9Db21wYXJlPg0KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFy
ZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz
dDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgew0KICBm
b3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mg0KICAgICAg
ICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsNCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkNCiAgICAgIHJldHVybiB0cnVlOw0KICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qy
LCAqX19maXJzdDEpKQ0KICAgICAgcmV0dXJuIGZhbHNlOw0KICB9DQogIHJldHVybiBfX2ZpcnN0
MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7DQp9DQoNCmlubGluZSBib29sIA0K
bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsDQog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsDQogICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQ0Kew0KICBj
b25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOw0KICBjb25zdCBzaXplX3Qg
X19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOw0KICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1j
bXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsNCiAgcmV0dXJuIF9f
cmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7DQp9DQoNCmlubGlu
ZSBib29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25z
dCBjaGFyKiBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpDQp7DQoNCiAgcmV0dXJuIGxl
eGljb2dyYXBoaWNhbF9jb21wYXJlKChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QxLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0
MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciop
IF9fZmlyc3QyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25l
ZCBjaGFyKikgX19sYXN0Mik7DQoNCg0KDQoNCg0KDQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+DQppbnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFy
ZV8zd2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0
SXRlcjIgX19sYXN0MikNCnsNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0Mikgew0KICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpDQogICAgICBy
ZXR1cm4gLTE7DQogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkNCiAgICAgIHJldHVybiAx
Ow0KICAgICsrX19maXJzdDE7DQogICAgKytfX2ZpcnN0MjsNCiAgfQ0KICBpZiAoX19maXJzdDIg
PT0gX19sYXN0Mikgew0KICAgIHJldHVybiAhKF9fZmlyc3QxID09IF9fbGFzdDEpOw0KICB9DQog
IGVsc2Ugew0KICAgIHJldHVybiAtMTsNCiAgfQ0KfQ0KDQppbmxpbmUgaW50DQpfX2xleGljb2dy
YXBoaWNhbF9jb21wYXJlXzN3YXkoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2Zp
cnN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFy
KiBfX2xhc3QyKQ0Kew0KICBjb25zdCBwdHJkaWZmX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmly
c3QxOw0KICBjb25zdCBwdHJkaWZmX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOw0KICBj
b25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4x
LCBfX2xlbjIpKTsNCiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCANCiAgICAgICAg
ICAgICAgICAgICAgICAgOiAoX19sZW4xID09IF9fbGVuMiA/IDAgOiAoX19sZW4xIDwgX19sZW4y
ID8gLTEgOiAxKSk7DQp9DQoNCmlubGluZSBpbnQgDQpfX2xleGljb2dyYXBoaWNhbF9jb21wYXJl
XzN3YXkoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIq
IF9fbGFzdDIpDQp7DQoNCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19m
aXJzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hh
ciopIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWdu
ZWQgY2hhciopIF9fZmlyc3QyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29u
c3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsNCg0KDQoNCg0KDQoNCn0NCg0KdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4NCmludCBsZXhpY29ncmFwaGljYWxf
Y29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
bnB1dEl0ZXIyIF9fbGFzdDIpDQp7DQogIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJl
XzN3YXkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsNCn0NCg0KIA0KDQoN
Cg0KIA0KIA0KIA0KIyAzMCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL3ZlY3RvciIgMiAzDQoNCiMgMSAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5o
IiAxIDMNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KIA0KIA0KIA0KIA0KIA0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRk
ZWYuaCIgMSAzDQojIDM0MiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNs
dWRlL3N0ZGRlZi5oIiAzDQoNCiMgNTMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1
LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMiAzDQoNCg0KDQojIDEg
Ii91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KIA0KDQoNCg0KIyAzMiAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzDQoNCg0KDQoN
Cg0KIA0KDQoNCg0KDQojIDU2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMNCg0KDQpleHRlcm4g
IkMiIHsgDQoNCiANCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgIChfX2NvbnN0IGNoYXIgKl9f
YXNzZXJ0aW9uLA0KCQkJCV9fY29uc3QgY2hhciAqX19maWxlLA0KCQkJCXVuc2lnbmVkIGludCBf
X2xpbmUsDQoJCQkJX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKSAgdGhyb3cgKCkgIA0KICAgICBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7DQoNCiANCmV4dGVybiB2b2lkIF9fYXNzZXJ0
X3BlcnJvcl9mYWlsICAoaW50IF9fZXJybnVtLA0KCQkJCSAgICAgICBfX2NvbnN0IGNoYXIgKl9f
ZmlsZSwNCgkJCQkgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwNCgkJCQkgICAgICAgX19jb25z
dCBjaGFyICpfX2Z1bmN0aW9uKSAgdGhyb3cgKCkgIA0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19u
b3JldHVybl9fKSk7DQoNCn0gDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiMgNTYgIi91c3IvbGliL2djYy1saWIv
aTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIg
MiAzDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogICAgIA0KICAgICANCiAgICAgDQojIDEgIi91
c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMw0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0K
IA0KIA0KIA0KDQoNCg0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMSAzDQogDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KIyAx
ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyA1MSAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMw0KDQoNCg0KIyA2MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMw0KDQoNCg0KIyA3
MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMw0KDQoNCg0KDQojIDg5ICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAzDQoNCg0KDQoNCiMgMjc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzDQoNCg0KDQojIDI5
ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzDQoNCg0KIA0KIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9zY2hlZC5oIiAxIDMNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCnN0
cnVjdCBzY2hlZF9wYXJhbQ0KICB7DQogICAgaW50IHNjaGVkX3ByaW9yaXR5Ow0KICB9Ow0KDQpl
eHRlcm4gIkMiIHsgDQoNCiANCg0KZXh0ZXJuIGludCBjbG9uZSAgKGludCAoKl9fZm4pICh2b2lk
ICpfX2FyZyksIHZvaWQgKl9fY2hpbGRfc3RhY2ssDQoJCSAgICAgICBpbnQgX19mbGFncywgdm9p
ZCAqX19hcmcpICB0aHJvdyAoKSAgOw0KDQoNCn0gDQoNCg0KDQoNCg0KDQogDQpzdHJ1Y3QgX19z
Y2hlZF9wYXJhbQ0KICB7DQogICAgaW50IHNjaGVkX3ByaW9yaXR5Ow0KICB9Ow0KDQoNCiMgMzIg
Ii91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMNCg0KDQpleHRlcm4gIkMiIHsgDQoNCiANCmV4dGVy
biBpbnQgX19zY2hlZF9zZXRwYXJhbSAgKF9fcGlkX3QgX19waWQsDQoJCQkJICBfX2NvbnN0IHN0
cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7DQpleHRlcm4gaW50IHNjaGVk
X3NldHBhcmFtICAoX19waWRfdCBfX3BpZCwNCgkJCQlfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJh
bSAqX19wYXJhbSkgIHRocm93ICgpICA7DQoNCiANCmV4dGVybiBpbnQgX19zY2hlZF9nZXRwYXJh
bSAgKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgp
ICA7DQpleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtICAoX19waWRfdCBfX3BpZCwgc3RydWN0IHNj
aGVkX3BhcmFtICpfX3BhcmFtKSAgdGhyb3cgKCkgIDsNCg0KIA0KZXh0ZXJuIGludCBfX3NjaGVk
X3NldHNjaGVkdWxlciAgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwNCgkJCQkgICAgICBf
X2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7DQpleHRlcm4g
aW50IHNjaGVkX3NldHNjaGVkdWxlciAgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwNCgkJ
CQkgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pICB0aHJvdyAoKSAgOw0K
DQogDQpleHRlcm4gaW50IF9fc2NoZWRfZ2V0c2NoZWR1bGVyICAoX19waWRfdCBfX3BpZCkgIHRo
cm93ICgpICA7DQpleHRlcm4gaW50IHNjaGVkX2dldHNjaGVkdWxlciAgKF9fcGlkX3QgX19waWQp
ICB0aHJvdyAoKSAgOw0KDQogDQpleHRlcm4gaW50IF9fc2NoZWRfeWllbGQgICh2b2lkKSAgdGhy
b3cgKCkgIDsNCmV4dGVybiBpbnQgc2NoZWRfeWllbGQgICh2b2lkKSAgdGhyb3cgKCkgIDsNCg0K
IA0KZXh0ZXJuIGludCBfX3NjaGVkX2dldF9wcmlvcml0eV9tYXggIChpbnQgX19hbGdvcml0aG0p
ICB0aHJvdyAoKSAgOw0KZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4ICAoaW50IF9f
YWxnb3JpdGhtKSAgdGhyb3cgKCkgIDsNCg0KIA0KZXh0ZXJuIGludCBfX3NjaGVkX2dldF9wcmlv
cml0eV9taW4gIChpbnQgX19hbGdvcml0aG0pICB0aHJvdyAoKSAgOw0KZXh0ZXJuIGludCBzY2hl
ZF9nZXRfcHJpb3JpdHlfbWluICAoaW50IF9fYWxnb3JpdGhtKSAgdGhyb3cgKCkgIDsNCg0KIA0K
ZXh0ZXJuIGludCBfX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAgKF9fcGlkX3QgX19waWQsIHN0cnVj
dCB0aW1lc3BlYyAqX190KSAgdGhyb3cgKCkgIDsNCmV4dGVybiBpbnQgc2NoZWRfcnJfZ2V0X2lu
dGVydmFsICAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3QpICB0aHJvdyAoKSAg
Ow0KDQp9IA0KDQoNCiMgMjAgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMw0KDQojIDEgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KZXh0ZXJuICJDIiB7IA0KDQoNCg0KDQogDQoNCg0K
IyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMw0KDQoNCg0KDQoNCg0KIA0KDQoNCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51
eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMw0KDQoNCg0KIA0KDQoNCiANCg0KDQoNCg0KDQog
DQoNCg0KIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0
ZGRlZi5oIiAzDQoNCg0KIA0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCiANCg0KDQoNCg0KDQogDQoNCiANCg0KDQojIDEyNiAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzDQoNCg0KIA0KDQoNCg0KDQog
DQoNCiANCg0KDQojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNs
dWRlL3N0ZGRlZi5oIiAzDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQogDQoNCg0KIyAyNjkgIi91c3Iv
bGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMw0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCiANCg0KIyAzMTcgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMw0KDQoNCg0KDQogDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KIyAzOCAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMiAzDQoNCg0KIA0KDQojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAz
DQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoN
CiANCg0KDQogDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQojIDU5ICIvdXNyL2luY2x1ZGUv
Yml0cy90aW1lLmgiIDMNCiANCiMgNDIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMw0KDQoNCiAN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQp0eXBlZGVmIF9fY2xvY2tfdCBjbG9ja190
Ow0KDQoNCg0KDQojIDczICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzDQoNCg0KDQoNCiMgODkgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDMNCg0KDQoNCg0KDQogDQpzdHJ1Y3QgdG0NCnsNCiAgaW50IHRt
X3NlYzsJCQkgDQogIGludCB0bV9taW47CQkJIA0KICBpbnQgdG1faG91cjsJCQkgDQogIGludCB0
bV9tZGF5OwkJCSANCiAgaW50IHRtX21vbjsJCQkgDQogIGludCB0bV95ZWFyOwkJCSANCiAgaW50
IHRtX3dkYXk7CQkJIA0KICBpbnQgdG1feWRheTsJCQkgDQogIGludCB0bV9pc2RzdDsJCQkgDQoN
Cg0KICBsb25nIGludCB0bV9nbXRvZmY7CQkgDQogIF9fY29uc3QgY2hhciAqdG1fem9uZTsJIA0K
DQoNCg0KDQp9Ow0KDQoNCiANCg0KZXh0ZXJuIGNsb2NrX3QgY2xvY2sgICh2b2lkKSAgdGhyb3cg
KCkgIDsNCg0KIA0KZXh0ZXJuIHRpbWVfdCB0aW1lICAodGltZV90ICpfX3RpbWVyKSAgdGhyb3cg
KCkgIDsNCg0KIA0KZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAgKHRpbWVfdCBfX3RpbWUxLCB0aW1l
X3QgX190aW1lMCkgIHRocm93ICgpICANCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
Ow0KDQogDQpleHRlcm4gdGltZV90IG1rdGltZSAgKHN0cnVjdCB0bSAqX190cCkgIHRocm93ICgp
ICA7DQoNCg0KIA0KDQoNCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgIChjaGFyICpfX3Jlc3RyaWN0
IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwNCgkJCSAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LA0KCQkJICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSAg
dGhyb3cgKCkgIDsNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KZXh0ZXJuIHN0cnVjdCB0bSAqZ210
aW1lICAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpICB0aHJvdyAoKSAgOw0KDQogDQoNCmV4dGVy
biBzdHJ1Y3QgdG0gKmxvY2FsdGltZSAgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSAgdGhyb3cg
KCkgIDsNCg0KDQogDQoNCmV4dGVybiBzdHJ1Y3QgdG0gKl9fZ210aW1lX3IgIChfX2NvbnN0IHRp
bWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLA0KCQkJCSAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBf
X3RwKSAgdGhyb3cgKCkgIDsNCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZV9yICAoX19jb25zdCB0
aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwNCgkJCQkgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9f
dHApICB0aHJvdyAoKSAgOw0KDQogDQoNCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yICAo
X19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwNCgkJCQkgICAgc3RydWN0IHRtICpf
X3Jlc3RyaWN0IF9fdHApICB0aHJvdyAoKSAgOw0KDQoNCiANCg0KZXh0ZXJuIGNoYXIgKmFzY3Rp
bWUgIChfX2NvbnN0IHN0cnVjdCB0bSAqX190cCkgIHRocm93ICgpICA7DQoNCiANCmV4dGVybiBj
aGFyICpjdGltZSAgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSAgdGhyb3cgKCkgIDsNCg0KDQog
DQoNCiANCg0KZXh0ZXJuIGNoYXIgKmFzY3RpbWVfciAgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Jl
c3RyaWN0IF9fdHAsDQoJCQkgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpICB0aHJvdyAoKSAg
Ow0KDQogDQpleHRlcm4gY2hhciAqY3RpbWVfciAgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0
IF9fdGltZXIsDQoJCQkgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSAgdGhyb3cgKCkgIDsNCg0K
DQoNCiANCmV4dGVybiBjaGFyICpfX3R6bmFtZVsyXTsJIA0KZXh0ZXJuIGludCBfX2RheWxpZ2h0
OwkJIA0KZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7CSANCg0KDQoNCiANCmV4dGVybiBjaGFy
ICp0em5hbWVbMl07DQoNCiANCg0KZXh0ZXJuIHZvaWQgdHpzZXQgICh2b2lkKSAgdGhyb3cgKCkg
IDsNCg0KDQoNCmV4dGVybiBpbnQgZGF5bGlnaHQ7DQpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7
DQoNCg0KDQogDQoNCmV4dGVybiBpbnQgc3RpbWUgIChfX2NvbnN0IHRpbWVfdCAqX193aGVuKSAg
dGhyb3cgKCkgIDsNCg0KDQoNCiANCg0KDQoNCg0KDQoNCiANCg0KDQogDQpleHRlcm4gdGltZV90
IHRpbWVnbSAgKHN0cnVjdCB0bSAqX190cCkgIHRocm93ICgpICA7DQoNCiANCmV4dGVybiB0aW1l
X3QgdGltZWxvY2FsICAoc3RydWN0IHRtICpfX3RwKSAgdGhyb3cgKCkgIDsNCg0KIA0KZXh0ZXJu
IGludCBkeXNpemUgIChpbnQgX195ZWFyKSAgdGhyb3cgKCkgIDsNCg0KDQoNCg0KIA0KZXh0ZXJu
IGludCBuYW5vc2xlZXAgIChfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0ZWRfdGlt
ZSwNCgkJCSAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW1haW5pbmcpICB0aHJvdyAoKSAgOw0KDQoN
Cg0KIyAyNjQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMNCg0KDQojIDI3NCAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMw0KDQoNCg0KfSANCg0KDQoNCg0KIyAyMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQu
aCIgMiAzDQoNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzDQogDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCmV4dGVy
biAiQyIgeyANCg0KIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzDQogDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQojIDMzICIvdXNyL2luY2x1ZGUvYml0cy9z
aWdzZXQuaCIgMw0KDQoNCg0KIA0KDQoNCg0KDQoNCiMgMTI1ICIvdXNyL2luY2x1ZGUvYml0cy9z
aWdzZXQuaCIgMw0KDQojIDMzICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMw0KDQoNCiANCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90Ow0KDQoN
Cg0KIyAzNjAgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMw0KDQoNCn0gDQoNCg0KIyAyNCAiL3Vz
ci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVh
ZHR5cGVzLmgiIDEgMw0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KDQoN
Cg0KDQoNCg0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMNCiANCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyA2MiAiL3Vzci9pbmNsdWRlL2Jp
dHMvc2NoZWQuaCIgMw0KDQoNCiMgNzMgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMNCg0K
IyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIgMw0KDQoNCiANCnN0cnVj
dCBfcHRocmVhZF9mYXN0bG9jaw0Kew0KICBsb25nIGludCBfX3N0YXR1czsgICAgICAgICAgICAg
DQogIGludCBfX3NwaW5sb2NrOyAgICAgICAgICAgICAgICANCn07DQoNCg0KIA0KdHlwZWRlZiBz
dHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsNCg0KDQoNCg0KIA0K
dHlwZWRlZiBzdHJ1Y3QNCnsNCiAgaW50IF9fZGV0YWNoc3RhdGU7DQogIGludCBfX3NjaGVkcG9s
aWN5Ow0KICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07DQogIGludCBfX2luaGVy
aXRzY2hlZDsNCiAgaW50IF9fc2NvcGU7DQogIHNpemVfdCBfX2d1YXJkc2l6ZTsNCiAgaW50IF9f
c3RhY2thZGRyX3NldDsNCiAgdm9pZCAqX19zdGFja2FkZHI7DQogIHNpemVfdCBfX3N0YWNrc2l6
ZTsNCn0gcHRocmVhZF9hdHRyX3Q7DQoNCg0KIA0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAgc3RydWN0
IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOyAgDQogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0
aW5nOyAgICAgICAgIA0KfSBwdGhyZWFkX2NvbmRfdDsNCg0KDQogDQp0eXBlZGVmIHN0cnVjdA0K
ew0KICBpbnQgX19kdW1teTsNCn0gcHRocmVhZF9jb25kYXR0cl90Ow0KDQogDQp0eXBlZGVmIHVu
c2lnbmVkIGludCBwdGhyZWFkX2tleV90Ow0KDQoNCiANCiANCg0KdHlwZWRlZiBzdHJ1Y3QNCnsN
CiAgaW50IF9fbV9yZXNlcnZlZDsgICAgICAgICAgICAgICAgDQogIGludCBfX21fY291bnQ7ICAg
ICAgICAgICAgICAgICAgIA0KICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7ICAgICAgICANCiAg
aW50IF9fbV9raW5kOyAgICAgICAgICAgICAgICAgICAgDQogIHN0cnVjdCBfcHRocmVhZF9mYXN0
bG9jayBfX21fbG9jazsgIA0KfSBwdGhyZWFkX211dGV4X3Q7DQoNCg0KIA0KdHlwZWRlZiBzdHJ1
Y3QNCnsNCiAgaW50IF9fbXV0ZXhraW5kOw0KfSBwdGhyZWFkX211dGV4YXR0cl90Ow0KDQoNCiAN
CnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90Ow0KDQoNCiMgMTE2ICIvdXNyL2luY2x1ZGUvYml0
cy9wdGhyZWFkdHlwZXMuaCIgMw0KDQoNCg0KIA0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBw
dGhyZWFkX3Q7DQoNCg0KIyAyNSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzDQoNCg0KDQpl
eHRlcm4gIkMiIHsgDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQpl
bnVtDQp7DQogIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFLA0KDQogIFBUSFJFQURfQ1JFQVRFX0RF
VEFDSEVEDQoNCn07DQoNCmVudW0NCnsNCiAgUFRIUkVBRF9JTkhFUklUX1NDSEVELA0KDQogIFBU
SFJFQURfRVhQTElDSVRfU0NIRUQNCg0KfTsNCg0KZW51bQ0Kew0KICBQVEhSRUFEX1NDT1BFX1NZ
U1RFTSwNCg0KICBQVEhSRUFEX1NDT1BFX1BST0NFU1MNCg0KfTsNCg0KZW51bQ0Kew0KICBQVEhS
RUFEX01VVEVYX0ZBU1RfTlAsDQogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLA0KICBQVEhS
RUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlANCg0KDQoNCg0KDQoNCg0KfTsNCg0KZW51bQ0Kew0KICBQ
VEhSRUFEX1BST0NFU1NfUFJJVkFURSwNCg0KICBQVEhSRUFEX1BST0NFU1NfU0hBUkVEDQoNCn07
DQoNCiMgMTAzICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzDQoNCg0KDQoNCiANCg0Kc3RydWN0
IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyDQp7DQogIHZvaWQgKCpfX3JvdXRpbmUpICAodm9pZCAq
KSAgOwkgICANCiAgdm9pZCAqX19hcmc7CQkJCSAgIA0KICBpbnQgX19jYW5jZWx0eXBlOwkJCSAg
IA0KICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fcHJldjsgIA0KfTsNCg0KIA0K
DQplbnVtDQp7DQogIFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSwNCg0KICBQVEhSRUFEX0NBTkNFTF9E
SVNBQkxFDQoNCn07DQplbnVtDQp7DQogIFBUSFJFQURfQ0FOQ0VMX0RFRkVSUkVELA0KDQogIFBU
SFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUw0KDQp9Ow0KDQoNCg0KIA0KDQogDQoNCg0KZXh0ZXJu
IGludCBwdGhyZWFkX2NyZWF0ZSAgKHB0aHJlYWRfdCAqX190aHJlYWQsDQoJCQkJX19jb25zdCBw
dGhyZWFkX2F0dHJfdCAqX19hdHRyLA0KCQkJCXZvaWQgKigqX19zdGFydF9yb3V0aW5lKSAodm9p
ZCAqKSwNCgkJCQl2b2lkICpfX2FyZykgIHRocm93ICgpICA7DQoNCiANCmV4dGVybiBwdGhyZWFk
X3QgcHRocmVhZF9zZWxmICAodm9pZCkgIHRocm93ICgpICA7DQoNCiANCmV4dGVybiBpbnQgcHRo
cmVhZF9lcXVhbCAgKHB0aHJlYWRfdCBfX3RocmVhZDEsIHB0aHJlYWRfdCBfX3RocmVhZDIpICB0
aHJvdyAoKSAgOw0KDQogDQpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgICh2b2lkICpfX3JldHZh
bCkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOw0KDQogDQoNCg0K
ZXh0ZXJuIGludCBwdGhyZWFkX2pvaW4gIChwdGhyZWFkX3QgX190aCwgdm9pZCAqKl9fdGhyZWFk
X3JldHVybikgIHRocm93ICgpICA7DQoNCiANCg0KDQoNCmV4dGVybiBpbnQgcHRocmVhZF9kZXRh
Y2ggIChwdGhyZWFkX3QgX190aCkgIHRocm93ICgpICA7DQoNCg0KIA0KDQogDQoNCg0KZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfaW5pdCAgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpICB0aHJvdyAo
KSAgOw0KDQogDQpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9kZXN0cm95ICAocHRocmVhZF9hdHRy
X3QgKl9fYXR0cikgIHRocm93ICgpICA7DQoNCiANCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3Nl
dGRldGFjaHN0YXRlICAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwNCgkJCQkJICAgICBpbnQgX19k
ZXRhY2hzdGF0ZSkgIHRocm93ICgpICA7DQoNCiANCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dl
dGRldGFjaHN0YXRlICAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLA0KCQkJCQkgICAg
IGludCAqX19kZXRhY2hzdGF0ZSkgIHRocm93ICgpICA7DQoNCiANCmV4dGVybiBpbnQgcHRocmVh
ZF9hdHRyX3NldHNjaGVkcGFyYW0gIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLA0KCQkJCSAgICAg
ICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pICB0aHJvdyAoKSAgOw0KDQog
DQpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtICAoX19jb25zdCBwdGhyZWFk
X2F0dHJfdCAqX19hdHRyLA0KCQkJCQkgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSAg
dGhyb3cgKCkgIDsNCg0KIA0KZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kg
IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLA0KCQkJCQkgICAgIGludCBfX3BvbGljeSkgIHRocm93
ICgpICA7DQoNCiANCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcG9saWN5ICAoX19j
b25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLA0KCQkJCQkgICAgIGludCAqX19wb2xpY3kpICB0
aHJvdyAoKSAgOw0KDQogDQpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQg
IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLA0KCQkJCQkgICAgICBpbnQgX19pbmhlcml0KSAgdGhy
b3cgKCkgIDsNCg0KIA0KZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkICAo
X19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLA0KCQkJCQkgICAgICBpbnQgKl9faW5oZXJp
dCkgIHRocm93ICgpICA7DQoNCiANCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlICAo
cHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fc2NvcGUpICB0aHJvdyAoKSAgOw0KDQogDQpl
eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY29wZSAgKF9fY29uc3QgcHRocmVhZF9hdHRyX3Qg
Kl9fYXR0ciwNCgkJCQkgICAgICAgaW50ICpfX3Njb3BlKSAgdGhyb3cgKCkgIDsNCg0KIyAyMjQg
Ii91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMNCg0KDQogDQoNCg0KDQpleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9zZXRzdGFja2FkZHIgIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLA0KCQkJCQkgICB2
b2lkICpfX3N0YWNrYWRkcikgIHRocm93ICgpICA7DQoNCiANCmV4dGVybiBpbnQgcHRocmVhZF9h
dHRyX2dldHN0YWNrYWRkciAgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwNCgkJCQkJ
ICAgdm9pZCAqKl9fc3RhY2thZGRyKSAgdGhyb3cgKCkgIDsNCg0KIA0KDQoNCmV4dGVybiBpbnQg
cHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsDQoJCQkJ
CSAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgIHRocm93ICgpICA7DQoNCiANCmV4dGVybiBpbnQgcHRo
cmVhZF9hdHRyX2dldHN0YWNrc2l6ZSAgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwN
CgkJCQkJICAgc2l6ZV90ICpfX3N0YWNrc2l6ZSkgIHRocm93ICgpICA7DQoNCiANCg0KIA0KDQpl
eHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAgKHB0aHJlYWRfdCBfX3RhcmdldF90aHJl
YWQsIGludCBfX3BvbGljeSwNCgkJCQkgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0g
Kl9fcGFyYW0pICB0aHJvdyAoKSAgOw0KDQogDQpleHRlcm4gaW50IHB0aHJlYWRfZ2V0c2NoZWRw
YXJhbSAgKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsDQoJCQkJICAgICAgIGludCAqX19wb2xp
Y3ksDQoJCQkJICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7
DQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCiANCg0KZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhf
aW5pdCAgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCwNCgkJCQkgICBfX2NvbnN0IHB0aHJlYWRf
bXV0ZXhhdHRyX3QgKl9fbXV0ZXhfYXR0cikgIHRocm93ICgpICA7DQpleHRlcm4gaW50IHB0aHJl
YWRfbXV0ZXhfaW5pdCAgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCwNCgkJCQkgICBfX2NvbnN0
IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fbXV0ZXhfYXR0cikgIHRocm93ICgpICA7DQoNCiANCmV4
dGVybiBpbnQgX19wdGhyZWFkX211dGV4X2Rlc3Ryb3kgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0
ZXgpICB0aHJvdyAoKSAgOw0KZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kgIChwdGhy
ZWFkX211dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAgOw0KDQogDQpleHRlcm4gaW50IF9fcHRo
cmVhZF9tdXRleF90cnlsb2NrICAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSAgdGhyb3cgKCkg
IDsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90cnlsb2NrICAocHRocmVhZF9tdXRleF90ICpf
X211dGV4KSAgdGhyb3cgKCkgIDsNCg0KIA0KZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhfbG9j
ayAgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgIHRocm93ICgpICA7DQpleHRlcm4gaW50IHB0
aHJlYWRfbXV0ZXhfbG9jayAgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgIHRocm93ICgpICA7
DQoNCiANCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4X3VubG9jayAgKHB0aHJlYWRfbXV0ZXhf
dCAqX19tdXRleCkgIHRocm93ICgpICA7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2Nr
ICAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSAgdGhyb3cgKCkgIDsNCg0KDQogDQoNCiANCg0K
ZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhhdHRyX2luaXQgIChwdGhyZWFkX211dGV4YXR0cl90
ICpfX2F0dHIpICB0aHJvdyAoKSAgOw0KZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9pbml0
ICAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSAgdGhyb3cgKCkgIDsNCg0KIA0KZXh0ZXJu
IGludCBfX3B0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgIChwdGhyZWFkX211dGV4YXR0cl90ICpf
X2F0dHIpICB0aHJvdyAoKSAgOw0KZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95
ICAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSAgdGhyb3cgKCkgIDsNCg0KIyAzMTYgIi91
c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMNCg0KDQoNCiANCg0KIA0KDQpleHRlcm4gaW50IHB0aHJl
YWRfY29uZF9pbml0ICAocHRocmVhZF9jb25kX3QgKl9fY29uZCwNCgkJCQkgICBfX2NvbnN0IHB0
aHJlYWRfY29uZGF0dHJfdCAqX19jb25kX2F0dHIpICB0aHJvdyAoKSAgOw0KDQogDQpleHRlcm4g
aW50IHB0aHJlYWRfY29uZF9kZXN0cm95ICAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgIHRocm93
ICgpICA7DQoNCiANCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3NpZ25hbCAgKHB0aHJlYWRfY29u
ZF90ICpfX2NvbmQpICB0aHJvdyAoKSAgOw0KDQogDQpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9i
cm9hZGNhc3QgIChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSAgdGhyb3cgKCkgIDsNCg0KIA0KDQpl
eHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0ICAocHRocmVhZF9jb25kX3QgKl9fY29uZCwNCgkJ
CQkgICBwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAgOw0KDQogDQoNCg0KDQpl
eHRlcm4gaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQgIChwdGhyZWFkX2NvbmRfdCAqX19jb25k
LA0KCQkJCQlwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgsDQoJCQkJCV9fY29uc3Qgc3RydWN0IHRp
bWVzcGVjICpfX2Fic3RpbWUpICB0aHJvdyAoKSAgOw0KDQogDQoNCiANCmV4dGVybiBpbnQgcHRo
cmVhZF9jb25kYXR0cl9pbml0ICAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpICB0aHJvdyAo
KSAgOw0KDQogDQpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZGVzdHJveSAgKHB0aHJlYWRf
Y29uZGF0dHJfdCAqX19hdHRyKSAgdGhyb3cgKCkgIDsNCg0KDQojIDQwOSAiL3Vzci9pbmNsdWRl
L3B0aHJlYWQuaCIgMw0KDQoNCg0KIA0KDQogDQoNCg0KDQoNCg0KZXh0ZXJuIGludCBfX3B0aHJl
YWRfa2V5X2NyZWF0ZSAgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LA0KCQkJCSAgICAgIHZvaWQgKCpf
X2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgIHRocm93ICgpICA7DQpleHRlcm4gaW50IHB0aHJl
YWRfa2V5X2NyZWF0ZSAgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LA0KCQkJCSAgICB2b2lkICgqX19k
ZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpICB0aHJvdyAoKSAgOw0KDQogDQpleHRlcm4gaW50IHB0
aHJlYWRfa2V5X2RlbGV0ZSAgKHB0aHJlYWRfa2V5X3QgX19rZXkpICB0aHJvdyAoKSAgOw0KDQog
DQpleHRlcm4gaW50IF9fcHRocmVhZF9zZXRzcGVjaWZpYyAgKHB0aHJlYWRfa2V5X3QgX19rZXks
DQoJCQkJICAgICAgIF9fY29uc3Qgdm9pZCAqX19wb2ludGVyKSAgdGhyb3cgKCkgIDsNCmV4dGVy
biBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAgKHB0aHJlYWRfa2V5X3QgX19rZXksDQoJCQkJICAg
ICBfX2NvbnN0IHZvaWQgKl9fcG9pbnRlcikgIHRocm93ICgpICA7DQoNCiANCmV4dGVybiB2b2lk
ICpfX3B0aHJlYWRfZ2V0c3BlY2lmaWMgIChwdGhyZWFkX2tleV90IF9fa2V5KSAgdGhyb3cgKCkg
IDsNCmV4dGVybiB2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljICAocHRocmVhZF9rZXlfdCBfX2tl
eSkgIHRocm93ICgpICA7DQoNCg0KIA0KDQogDQoNCg0KDQpleHRlcm4gaW50IF9fcHRocmVhZF9v
bmNlICAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250cm9sLA0KCQkJCXZvaWQgKCpfX2luaXRf
cm91dGluZSkgKHZvaWQpKSAgdGhyb3cgKCkgIDsNCmV4dGVybiBpbnQgcHRocmVhZF9vbmNlICAo
cHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250cm9sLA0KCQkJICAgICAgdm9pZCAoKl9faW5pdF9y
b3V0aW5lKSAodm9pZCkpICB0aHJvdyAoKSAgOw0KDQoNCiANCg0KIA0KDQpleHRlcm4gaW50IHB0
aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgIChpbnQgX19zdGF0ZSwgaW50ICpfX29sZHN0YXRlKSAgdGhy
b3cgKCkgIDsNCg0KIA0KDQpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlwZSAgKGludCBf
X3R5cGUsIGludCAqX19vbGR0eXBlKSAgdGhyb3cgKCkgIDsNCg0KIA0KZXh0ZXJuIGludCBwdGhy
ZWFkX2NhbmNlbCAgKHB0aHJlYWRfdCBfX3RocmVhZCkgIHRocm93ICgpICA7DQoNCiANCg0KDQpl
eHRlcm4gdm9pZCBwdGhyZWFkX3Rlc3RjYW5jZWwgICh2b2lkKSAgdGhyb3cgKCkgIDsNCg0KDQog
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaCAg
KHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsDQoJCQkJCXZvaWQgKCpf
X3JvdXRpbmUpICh2b2lkICopLA0KCQkJCQl2b2lkICpfX2FyZykgIHRocm93ICgpICA7DQoNCiAN
Cg0KDQoNCg0KDQpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcCAgKHN0cnVjdCBfcHRo
cmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsDQoJCQkJICAgICAgIGludCBfX2V4ZWN1dGUp
ICB0aHJvdyAoKSAgOw0KDQogDQoNCg0KIyA1MTUgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMN
Cg0KDQogDQojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAxIDMNCiANCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQogDQoNCmV4
dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrICAoaW50IF9faG93LCBfX2NvbnN0IF9fc2lnc2V0X3Qg
Kl9fbmV3bWFzaywNCgkJCQkgX19zaWdzZXRfdCAqX19vbGRtYXNrKSAgdGhyb3cgKCkgIDsNCg0K
IA0KZXh0ZXJuIGludCBwdGhyZWFkX2tpbGwgIChwdGhyZWFkX3QgX190aHJlYWQsIGludCBfX3Np
Z25vKSAgdGhyb3cgKCkgIDsNCg0KDQojIDUxOCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAz
DQoNCg0KDQogDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KZXh0ZXJuIGludCBfX3B0aHJlYWRf
YXRmb3JrICAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLA0KCQkJCSAgdm9pZCAoKl9fcGFyZW50
KSAodm9pZCksDQoJCQkJICB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSAgdGhyb3cgKCkgIDsNCmV4
dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksDQoJCQkJ
dm9pZCAoKl9fcGFyZW50KSAodm9pZCksDQoJCQkJdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgIHRo
cm93ICgpICA7DQoNCiANCg0KDQpleHRlcm4gdm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFk
c19ucCAgKHZvaWQpICB0aHJvdyAoKSAgOw0KDQoNCiANCmV4dGVybiB2b2lkIF9fcHRocmVhZF9p
bml0aWFsaXplICAodm9pZCkgIHRocm93ICgpICA7DQoNCn0gDQoNCg0KIyA3MSAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9h
bGxvYy5oIiAyIDMNCg0KDQoNCg0KDQoNCg0KDQojIDg3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
bGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMNCg0K
IyA5NyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzDQoNCiMgMTE1ICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
bGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMNCg0K
DQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQogDQogDQoNCg0KDQoNCg0KDQoNCg0KDQp0ZW1w
bGF0ZSA8aW50IF9faW5zdD4NCmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsNCg0KcHJp
dmF0ZToNCg0KICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOw0KICBzdGF0aWMg
dm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7DQoNCg0KICBzdGF0aWMgdm9pZCAo
KiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKTsNCg0KDQpwdWJsaWM6DQoNCiAgc3RhdGlj
IHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pDQogIHsNCiAgICB2b2lkKiBfX3Jlc3VsdCA9IG1h
bGxvYyhfX24pOw0KICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9tYWxs
b2MoX19uKTsNCiAgICByZXR1cm4gX19yZXN1bHQ7DQogIH0NCg0KICBzdGF0aWMgdm9pZCBkZWFs
bG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICApDQogIHsNCiAgICBmcmVlKF9fcCk7DQogIH0NCg0K
ICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAgLCBzaXplX3QgX19u
ZXdfc3opDQogIHsNCiAgICB2b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7
DQogICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBf
X25ld19zeik7DQogICAgcmV0dXJuIF9fcmVzdWx0Ow0KICB9DQoNCiAgc3RhdGljIHZvaWQgKCog
X19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAoKl9fZikoKSkpKCkNCiAgew0KICAgIHZvaWQgKCog
X19vbGQpKCkgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsNCiAgICBfX21hbGxvY19hbGxv
Y19vb21faGFuZGxlciA9IF9fZjsNCiAgICByZXR1cm4oX19vbGQpOw0KICB9DQoNCn07DQoNCiAN
Cg0KDQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4NCnZvaWQgKCogX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkgPSAwOw0KDQoNCnRlbXBs
YXRlIDxpbnQgX19pbnN0Pg0Kdm9pZCoNCl9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46
Ol9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikNCnsNCiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hh
bmRsZXIpKCk7DQogICAgdm9pZCogX19yZXN1bHQ7DQoNCiAgICBmb3IgKDs7KSB7DQogICAgICAg
IF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsNCiAgICAg
ICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyB0aHJvdyBiYWRfYWxsb2MoKSA7IH0N
CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOw0KICAgICAgICBfX3Jlc3VsdCA9IG1h
bGxvYyhfX24pOw0KICAgICAgICBpZiAoX19yZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7DQogICAg
fQ0KfQ0KDQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4NCnZvaWQqIF9fbWFsbG9jX2FsbG9jX3RlbXBs
YXRlPF9faW5zdD46Ol9TX29vbV9yZWFsbG9jKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikNCnsNCiAg
ICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7DQogICAgdm9pZCogX19yZXN1bHQ7DQoN
CiAgICBmb3IgKDs7KSB7DQogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19h
bGxvY19vb21faGFuZGxlcjsNCiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikg
eyB0aHJvdyBiYWRfYWxsb2MoKSA7IH0NCiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgp
Ow0KICAgICAgICBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX24pOw0KICAgICAgICBpZiAoX19y
ZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7DQogICAgfQ0KfQ0KDQp0eXBlZGVmIF9fbWFsbG9jX2Fs
bG9jX3RlbXBsYXRlPDA+IG1hbGxvY19hbGxvYzsNCg0KdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+DQpjbGFzcyBzaW1wbGVfYWxsb2Mgew0KDQpwdWJsaWM6DQogICAgc3RhdGljIF9U
cCogYWxsb2NhdGUoc2l6ZV90IF9fbikNCiAgICAgIHsgcmV0dXJuIDAgPT0gX19uID8gMCA6IChf
VHAqKSBfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZiAoX1RwKSk7IH0NCiAgICBzdGF0aWMg
X1RwKiBhbGxvY2F0ZSh2b2lkKQ0KICAgICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2Nh
dGUoc2l6ZW9mIChfVHApKTsgfQ0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3As
IHNpemVfdCBfX24pDQogICAgICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9f
cCwgX19uICogc2l6ZW9mIChfVHApKTsgfQ0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1Rw
KiBfX3ApDQogICAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0N
Cn07DQoNCiANCiANCiANCiANCiANCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+DQpjbGFzcyBkZWJ1
Z19hbGxvYyB7DQoNCnByaXZhdGU6DQoNCiAgZW51bSB7X1NfZXh0cmEgPSA4fTsgICANCiAgICAg
ICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICANCg0KcHVibGlj
Og0KDQogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQ0KICB7DQogICAgY2hhciog
X19yZXN1bHQgPSAoY2hhciopX0FsbG9jOjphbGxvY2F0ZShfX24gKyBfU19leHRyYSk7DQogICAg
KihzaXplX3QqKV9fcmVzdWx0ID0gX19uOw0KICAgIHJldHVybiBfX3Jlc3VsdCArIF9TX2V4dHJh
Ow0KICB9DQoNCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24p
DQogIHsNCiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSBfU19leHRyYTsNCiAgICAo
KHZvaWQpICgoICooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24gKSA/IDAgOgkoX19hc3NlcnRfZmFp
bCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24iICwJIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIsIDI2Mywg
X19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsNCiAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19y
ZWFsX3AsIF9fbiArIF9TX2V4dHJhKTsNCiAgfQ0KDQogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRl
KHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opDQogIHsNCiAgICBj
aGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSBfU19leHRyYTsNCiAgICAoKHZvaWQpICgoICoo
c2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiKihz
aXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6IiAsCSIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiLCAyNzAsIF9f
UFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7DQogICAgY2hhciogX19yZXN1bHQgPSAoY2hhciop
DQogICAgICBfQWxsb2M6OnJlYWxsb2NhdGUoX19yZWFsX3AsIF9fb2xkX3N6ICsgX1NfZXh0cmEs
IF9fbmV3X3N6ICsgX1NfZXh0cmEpOw0KICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3X3N6
Ow0KICAgIHJldHVybiBfX3Jlc3VsdCArIF9TX2V4dHJhOw0KICB9DQoNCn07DQoNCg0KDQoNCg0K
DQoNCg0KDQoNCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCg0KIA0K
IA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KDQoNCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Ym9vbCB0aHJl
YWRzLCBpbnQgaW5zdD4NCmNsYXNzIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZSB7DQoNCnByaXZh
dGU6DQogICANCiAgIA0KDQogICAgZW51bSB7X0FMSUdOID0gOH07DQogICAgZW51bSB7X01BWF9C
WVRFUyA9IDEyOH07DQogICAgZW51bSB7X05GUkVFTElTVFMgPSBfTUFYX0JZVEVTL19BTElHTn07
DQoNCiAgc3RhdGljIHNpemVfdA0KICBfU19yb3VuZF91cChzaXplX3QgX19ieXRlcykNCiAgICB7
IHJldHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKSAmIH4oX0FMSUdOIC0gMSkpOyB9DQoNCnBy
aXZhdGUgOg0KICB1bmlvbiBfT2JqIHsNCiAgICAgICAgdW5pb24gX09iaiogX01fZnJlZV9saXN0
X2xpbms7DQogICAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFbMV07ICAgICANCiAgfTsNCnByaXZh
dGU6DQoNCg0KDQoNCiAgICBzdGF0aWMgX09iaiogdm9sYXRpbGUgIF9TX2ZyZWVfbGlzdFtfTkZS
RUVMSVNUU107DQoNCiAgc3RhdGljICBzaXplX3QgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9f
Ynl0ZXMpIHsNCiAgICAgICAgcmV0dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEpL19BTElHTiAt
IDEpOw0KICB9DQoNCiAgIA0KICBzdGF0aWMgdm9pZCogX1NfcmVmaWxsKHNpemVfdCBfX24pOw0K
ICAgDQogICANCiAgc3RhdGljIGNoYXIqIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGlu
dCYgX19ub2Jqcyk7DQoNCiAgIA0KICBzdGF0aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsNCiAgc3Rh
dGljIGNoYXIqIF9TX2VuZF9mcmVlOw0KICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsNCg0K
DQoNCg0KDQoNCg0KDQogICAgc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBfU19ub2RlX2FsbG9jYXRv
cl9sb2NrOw0KDQoNCg0KDQoNCg0KIyAzODkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8y
Ljk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMw0KDQoNCiAgICBj
bGFzcyBfTG9jayB7DQogICAgICAgIHB1YmxpYzoNCiAgICAgICAgICAgIF9Mb2NrKCkgeyBpZiAo
dGhyZWFkcykgcHRocmVhZF9tdXRleF9sb2NrKCZfU19ub2RlX2FsbG9jYXRvcl9sb2NrKSA7IH0N
CiAgICAgICAgICAgIH5fTG9jaygpIHsgaWYgKHRocmVhZHMpIHB0aHJlYWRfbXV0ZXhfdW5sb2Nr
KCZfU19ub2RlX2FsbG9jYXRvcl9sb2NrKSA7IH0NCiAgICB9Ow0KICAgIGZyaWVuZCBjbGFzcyBf
TG9jazsNCg0KcHVibGljOg0KDQogICANCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBf
X24pDQogIHsNCiAgICBfT2JqKiB2b2xhdGlsZSAqIF9fbXlfZnJlZV9saXN0Ow0KICAgIF9PYmoq
ICAgX19yZXN1bHQ7DQoNCiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgew0KICAg
ICAgICByZXR1cm4obWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX24pKTsNCiAgICB9DQogICAgX19t
eV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOw0KICAg
ICANCiAgICAgDQogICAgIA0KDQogICAgICAgICANCiAgICAgICAgX0xvY2sgX19sb2NrX2luc3Rh
bmNlOw0KDQogICAgX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7DQogICAgaWYgKF9fcmVzdWx0
ID09IDApIHsNCiAgICAgICAgdm9pZCogX19yID0gX1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikp
Ow0KICAgICAgICByZXR1cm4gX19yOw0KICAgIH0NCiAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Jl
c3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsNCiAgICByZXR1cm4gKF9fcmVzdWx0KTsNCiAgfTsN
Cg0KICAgDQogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQ0K
ICB7DQogICAgX09iaiogX19xID0gKF9PYmoqKV9fcDsNCiAgICBfT2JqKiB2b2xhdGlsZSAqIF9f
bXlfZnJlZV9saXN0Ow0KDQogICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsNCiAg
ICAgICAgbWFsbG9jX2FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsNCiAgICAgICAgcmV0dXJu
Ow0KICAgIH0NCiAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0
X2luZGV4KF9fbik7DQogICAgIA0KDQogICAgICAgICANCiAgICAgICAgX0xvY2sgX19sb2NrX2lu
c3RhbmNlOw0KDQogICAgX19xIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0
Ow0KICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcTsNCiAgICAgDQogIH0NCg0KICBzdGF0aWMgdm9p
ZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6
KTsNCg0KfSA7DQoNCnR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPCB0cnVlICwgMD4g
YWxsb2M7DQp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxzZSwgMD4gc2luZ2xl
X2NsaWVudF9hbGxvYzsNCg0KDQoNCiANCiANCiANCiANCnRlbXBsYXRlIDxib29sIF9fdGhyZWFk
cywgaW50IF9faW5zdD4NCmNoYXIqDQpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz
LCBfX2luc3Q+OjpfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBfX25vYmpz
KQ0Kew0KICAgIGNoYXIqIF9fcmVzdWx0Ow0KICAgIHNpemVfdCBfX3RvdGFsX2J5dGVzID0gX19z
aXplICogX19ub2JqczsNCiAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2ZyZWUgLSBf
U19zdGFydF9mcmVlOw0KDQogICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKSB7
DQogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsNCiAgICAgICAgX1Nfc3RhcnRfZnJl
ZSArPSBfX3RvdGFsX2J5dGVzOw0KICAgICAgICByZXR1cm4oX19yZXN1bHQpOw0KICAgIH0gZWxz
ZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkgew0KICAgICAgICBfX25vYmpzID0gKGludCko
X19ieXRlc19sZWZ0L19fc2l6ZSk7DQogICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBf
X25vYmpzOw0KICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7DQogICAgICAgIF9TX3N0
YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsNCiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsNCiAg
ICB9IGVsc2Ugew0KICAgICAgICBzaXplX3QgX19ieXRlc190b19nZXQgPQ0KCSAgMiAqIF9fdG90
YWxfYnl0ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7DQogICAgICAgICANCiAg
ICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDApIHsNCiAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxl
ICogX19teV9mcmVlX2xpc3QgPQ0KICAgICAgICAgICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0
ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsNCg0KICAgICAgICAgICAgKChfT2Jq
KilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsN
CiAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVlOw0KICAg
ICAgICB9DQogICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jKF9fYnl0ZXNfdG9f
Z2V0KTsNCiAgICAgICAgaWYgKDAgPT0gX1Nfc3RhcnRfZnJlZSkgew0KICAgICAgICAgICAgc2l6
ZV90IF9faTsNCiAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlICogX19teV9mcmVlX2xpc3Q7DQoJ
ICAgIF9PYmoqIF9fcDsNCiAgICAgICAgICAgICANCiAgICAgICAgICAgICANCiAgICAgICAgICAg
ICANCiAgICAgICAgICAgIGZvciAoX19pID0gX19zaXplOyBfX2kgPD0gX01BWF9CWVRFUzsgX19p
ICs9IF9BTElHTikgew0KICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9s
aXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19pKTsNCiAgICAgICAgICAgICAgICBfX3AgPSAqX19t
eV9mcmVlX2xpc3Q7DQogICAgICAgICAgICAgICAgaWYgKDAgIT0gX19wKSB7DQogICAgICAgICAg
ICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGluazsNCiAg
ICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7DQogICAgICAgICAg
ICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9faTsNCiAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOw0KICAgICAg
ICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB9
DQogICAgICAgICAgICB9DQoJICAgIF9TX2VuZF9mcmVlID0gMDsJIA0KICAgICAgICAgICAgX1Nf
c3RhcnRfZnJlZSA9IChjaGFyKiltYWxsb2NfYWxsb2M6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0
KTsNCiAgICAgICAgICAgICANCiAgICAgICAgICAgICANCiAgICAgICAgICAgICANCiAgICAgICAg
fQ0KICAgICAgICBfU19oZWFwX3NpemUgKz0gX19ieXRlc190b19nZXQ7DQogICAgICAgIF9TX2Vu
ZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0Ow0KICAgICAgICByZXR1cm4o
X1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7DQogICAgfQ0KfQ0KDQoNCiANCiANCiAN
CnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4NCnZvaWQqDQpfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikN
CnsNCiAgICBpbnQgX19ub2JqcyA9IDIwOw0KICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19h
bGxvYyhfX24sIF9fbm9ianMpOw0KICAgIF9PYmoqIHZvbGF0aWxlICogX19teV9mcmVlX2xpc3Q7
DQogICAgX09iaiogX19yZXN1bHQ7DQogICAgX09iaiogX19jdXJyZW50X29iajsNCiAgICBfT2Jq
KiBfX25leHRfb2JqOw0KICAgIGludCBfX2k7DQoNCiAgICBpZiAoMSA9PSBfX25vYmpzKSByZXR1
cm4oX19jaHVuayk7DQogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVl
bGlzdF9pbmRleChfX24pOw0KDQogICAgIA0KICAgICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVu
azsNCiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiopKF9fY2h1bmsg
KyBfX24pOw0KICAgICAgZm9yIChfX2kgPSAxOyA7IF9faSsrKSB7DQogICAgICAgIF9fY3VycmVu
dF9vYmogPSBfX25leHRfb2JqOw0KICAgICAgICBfX25leHRfb2JqID0gKF9PYmoqKSgoY2hhciop
X19uZXh0X29iaiArIF9fbik7DQogICAgICAgIGlmIChfX25vYmpzIC0gMSA9PSBfX2kpIHsNCiAg
ICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSAwOw0KICAgICAg
ICAgICAgYnJlYWs7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBfX2N1cnJlbnRfb2Jq
IC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsNCiAgICAgICAgfQ0KICAgICAgfQ0K
ICAgIHJldHVybihfX3Jlc3VsdCk7DQp9DQoNCnRlbXBsYXRlIDxib29sIHRocmVhZHMsIGludCBp
bnN0Pg0Kdm9pZCoNCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6cmVh
bGxvY2F0ZSh2b2lkKiBfX3AsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fb2xkX3N6LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25ld19zeikNCnsNCiAgICB2b2lk
KiBfX3Jlc3VsdDsNCiAgICBzaXplX3QgX19jb3B5X3N6Ow0KDQogICAgaWYgKF9fb2xkX3N6ID4g
KHNpemVfdCkgX01BWF9CWVRFUyAmJiBfX25ld19zeiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsN
CiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOw0KICAgIH0NCiAgICBpZiAo
X1Nfcm91bmRfdXAoX19vbGRfc3opID09IF9TX3JvdW5kX3VwKF9fbmV3X3N6KSkgcmV0dXJuKF9f
cCk7DQogICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7DQogICAgX19jb3B5X3N6ID0g
X19uZXdfc3ogPiBfX29sZF9zej8gX19vbGRfc3ogOiBfX25ld19zejsNCiAgICBtZW1jcHkoX19y
ZXN1bHQsIF9fcCwgX19jb3B5X3N6KTsNCiAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOw0K
ICAgIHJldHVybihfX3Jlc3VsdCk7DQp9DQoNCg0KICAgIHRlbXBsYXRlIDxib29sIF9fdGhyZWFk
cywgaW50IF9faW5zdD4NCiAgICBwdGhyZWFkX211dGV4X3QNCiAgICBfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRvcl9sb2NrDQogICAg
ICAgID0gezAsIDAsIDAsIFBUSFJFQURfTVVURVhfRkFTVF9OUCwgezAsIDB9fSA7DQoNCg0KDQoN
Cg0KDQoNCg0KDQojIDYwMiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzDQoNCg0KIyA2ODkgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf
YWxsb2MuaCIgMw0KDQoNCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4NCmNo
YXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3N0YXJ0
X2ZyZWUgPSAwOw0KDQp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQpjaGFy
KiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19lbmRfZnJl
ZSA9IDA7DQoNCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4NCnNpemVfdCBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19oZWFwX3NpemUg
PSAwOw0KDQp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQpfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfT2JqKiB2b2xhdGlsZSANCl9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gOjpfU19mcmVlX2xpc3RbDQog
ICAgX05GUkVFTElTVFMNCl0gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgfTsNCiANCiANCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KIA0KIA0KIA0K
IA0KIA0KIA0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmNsYXNzIGFsbG9jYXRvciB7DQog
IHR5cGVkZWYgYWxsb2MgX0FsbG9jOyAgICAgICAgICAgDQpwdWJsaWM6DQogIHR5cGVkZWYgc2l6
ZV90ICAgICBzaXplX3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90ICBkaWZmZXJlbmNlX3R5cGU7
DQogIHR5cGVkZWYgX1RwKiAgICAgICBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IF9UcCogY29u
c3RfcG9pbnRlcjsNCiAgdHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsNCiAgdHlwZWRlZiBj
b25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsNCiAgdHlwZWRlZiBfVHAgICAgICAgIHZhbHVlX3R5
cGU7DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgew0KICAgIHR5cGVk
ZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOw0KICB9Ow0KDQogIGFsbG9jYXRvcigpIHRocm93KCkg
IHt9DQogIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygpICB7fQ0KICB0ZW1wbGF0
ZSA8Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkg
IHt9DQogIH5hbGxvY2F0b3IoKSB0aHJvdygpICB7fQ0KDQogIHBvaW50ZXIgYWRkcmVzcyhyZWZl
cmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9DQogIGNvbnN0X3BvaW50ZXIgYWRkcmVz
cyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9DQoNCiAgIA0KICAg
DQogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKSB7DQogICAg
cmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24g
KiBzaXplb2YoX1RwKSkpDQogICAgICAgICAgICAgICAgICAgIDogMDsNCiAgfQ0KDQogICANCiAg
dm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQ0KICAgIHsgX0FsbG9j
OjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9DQoNCiAgc2l6ZV90eXBlIG1h
eF9zaXplKCkgY29uc3QgdGhyb3coKSANCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9m
KF9UcCk7IH0NCg0KICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3Zh
bCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9DQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkg
eyBfX3AtPn5fVHAoKTsgfQ0KfTsNCg0KdGVtcGxhdGU8Pg0KY2xhc3MgYWxsb2NhdG9yPHZvaWQ+
IHsNCiAgdHlwZWRlZiBzaXplX3QgICAgICBzaXplX3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90
ICAgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIHZvaWQqICAgICAgIHBvaW50ZXI7DQogIHR5
cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsNCiAgdHlwZWRlZiB2b2lkICAgICAgICB2
YWx1ZV90eXBlOw0KDQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsNCiAg
ICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsNCiAgfTsNCn07DQoNCg0KdGVtcGxhdGUg
PGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxv
Y2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikNCnsNCiAgcmV0dXJuIHRydWU7DQp9
DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpDQp7DQogIHJl
dHVybiBmYWxzZTsNCn0NCg0KIA0KIA0KIA0KIA0KIA0KIA0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+DQpzdHJ1Y3QgX19hbGxvY2F0b3Igew0KICBfQWxsb2MgX191bmRlcmx5
aW5nX2FsbG9jOw0KDQogIHR5cGVkZWYgc2l6ZV90ICAgIHNpemVfdHlwZTsNCiAgdHlwZWRlZiBw
dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIF9UcCogICAgICAgcG9pbnRlcjsN
CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7DQogIHR5cGVkZWYgX1RwJiAgICAg
ICByZWZlcmVuY2U7DQogIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7DQogIHR5
cGVkZWYgX1RwICAgICAgICB2YWx1ZV90eXBlOw0KDQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBz
dHJ1Y3QgcmViaW5kIHsNCiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3Ro
ZXI7DQogIH07DQoNCiAgX19hbGxvY2F0b3IoKSB0aHJvdygpICB7fQ0KICBfX2FsbG9jYXRvcihj
b25zdCBfX2FsbG9jYXRvciYgX19hKSB0aHJvdygpIA0KICAgIDogX191bmRlcmx5aW5nX2FsbG9j
KF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9DQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPg0KICBf
X2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkg
DQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30NCiAg
fl9fYWxsb2NhdG9yKCkgdGhyb3coKSAge30NCg0KICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNl
IF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQ0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29u
c3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQ0KDQogICANCiAgX1RwKiBh
bGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsNCiAgICByZXR1cm4gX19u
ICE9IDANCiAgICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxs
b2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQ0KICAgICAgICA6IDA7DQogIH0NCg0KICAgDQogIHZv
aWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikNCiAgICB7IF9fdW5kZXJs
eWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9DQoNCiAgc2l6
ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKSANCiAgICB7IHJldHVybiBzaXplX3QoLTEp
IC8gc2l6ZW9mKF9UcCk7IH0NCg0KICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3Qg
X1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9DQogIHZvaWQgZGVzdHJveShwb2lu
dGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQ0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4N
CmNsYXNzIF9fYWxsb2NhdG9yPHZvaWQsIF9BbGxvYz4gew0KICB0eXBlZGVmIHNpemVfdCAgICAg
IHNpemVfdHlwZTsNCiAgdHlwZWRlZiBwdHJkaWZmX3QgICBkaWZmZXJlbmNlX3R5cGU7DQogIHR5
cGVkZWYgdm9pZCogICAgICAgcG9pbnRlcjsNCiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9w
b2ludGVyOw0KICB0eXBlZGVmIHZvaWQgICAgICAgIHZhbHVlX3R5cGU7DQoNCiAgdGVtcGxhdGUg
PGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgew0KICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw
MSwgX0FsbG9jPiBvdGhlcjsNCiAgfTsNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4NCmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBf
QWxsb2M+JiBfX2ExLA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxf
VHAsIF9BbGxvYz4mIF9fYTIpDQp7DQogIHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyA9
PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsNCn0NCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2M+DQppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9yPF9U
cCwgX0FsbG9jPiYgX19hMSwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0
b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQ0Kew0KICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxs
b2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7DQp9DQoNCg0KIA0KIA0KIA0KDQp0ZW1wbGF0
ZSA8aW50IGluc3Q+DQppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9j
X3RlbXBsYXRlPGluc3Q+JiwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2Nf
YWxsb2NfdGVtcGxhdGU8aW5zdD4mKQ0Kew0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KDQp0ZW1wbGF0
ZSA8aW50IF9faW5zdD4NCmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8X19pbnN0PiYsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFs
bG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mKQ0Kew0KICByZXR1cm4gZmFsc2U7DQp9DQoNCg0K
DQp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQppbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4m
LA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
X190aHJlYWRzLCBfX2luc3Q+JikNCnsNCiAgcmV0dXJuIHRydWU7DQp9DQoNCg0KdGVtcGxhdGUg
PGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwNCiAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywg
X19pbnN0PiYpDQp7DQogIHJldHVybiBmYWxzZTsNCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf
QWxsb2M+DQppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4m
LA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+Jikgew0K
ICByZXR1cm4gdHJ1ZTsNCn0NCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPg0KaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwNCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsNCiAgcmV0dXJuIGZhbHNlOw0K
fQ0KDQoNCiANCiANCiANCiANCiANCiANCg0KIA0KIA0KIA0KIA0KIA0KIA0KDQogDQogDQogDQog
DQogDQogDQogDQogDQogDQogDQogDQoNCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jYXRvcj4NCnN0cnVjdCBfQWxsb2NfdHJhaXRzDQp7DQogIHN0YXRpYyBjb25zdCBib29s
IF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOw0KICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6
OiAgIHJlYmluZDxfVHA+OjpvdGhlcg0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOw0KfTsNCg0K
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4NCmNvbnN0IGJvb2wgX0FsbG9j
X3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7DQoNCiANCg0KdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4NCnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgYWxs
b2NhdG9yPF9UcDE+ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0g
dHJ1ZTsNCiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBhbGxvYz4gX0FsbG9jX3R5cGU7DQog
IHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQogDQoNCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGludCBfX2luc3Q+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9f
bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPg0Kew0KICBzdGF0aWMgY29uc3QgYm9vbCBf
U19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFs
bG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsNCiAgdHlwZWRlZiBfX2Fs
bG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3Jf
dHlwZTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBf
X2luc3Q+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RocmVhZHMsIF9faW5zdD4gPg0Kew0KICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5j
ZWxlc3MgPSB0cnVlOw0KICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPg0KICAgICAgICAgIF9BbGxvY190eXBlOw0K
ICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0PiA+DQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQoNCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwg
ZGVidWdfYWxsb2M8X0FsbG9jPiA+DQp7DQogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNl
bGVzcyA9IHRydWU7DQogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0Fs
bG9jPiA+IF9BbGxvY190eXBlOw0KICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVidWdfYWxs
b2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KIA0KIA0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfVHAxLCBpbnQgX19pbnN0Pg0Kc3RydWN0IF9BbGxvY190cmFpdHM8X1Rw
LA0KICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8X19pbnN0PiA+ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2Vs
ZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190
ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw
LCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0K
DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGJvb2wgX190aHIsIGludCBfX2lu
c3Q+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsDQogICAgICAgICAgICAgICAgICAgICAgX19h
bGxvY2F0b3I8X1RwMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsIF9faW5zdD4gPiA+DQp7DQogIHN0YXRpYyBjb25zdCBi
b29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7DQogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwg
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPg0KICAgICAgICAgIF9BbGxv
Y190eXBlOw0KICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyLF9faW5zdD4gPg0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFzcyBfQWxsb2M+DQpzdHJ1Y3QgX0Fs
bG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiA+
DQp7DQogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7DQogIHR5cGVk
ZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOw0K
ICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRv
cl90eXBlOw0KfTsNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KIA0KIA0KIA0KIyAzMSAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3ZlY3RvciIgMiAzDQoNCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUu
Mi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25zdHJ1Y3QuaCIgMSAzDQogDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0K
DQoNCg0KDQogDQoNCiANCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSB2b2lkIGRl
c3Ryb3koX1RwKiBfX3BvaW50ZXIpIHsNCiAgX19wb2ludGVyLT5+X1RwKCk7DQp9DQoNCnRlbXBs
YXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9f
cCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7DQogIG5ldyAoX19wKSBfVDEoX192YWx1ZSk7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfVDE+DQppbmxpbmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3ApIHsN
CiAgbmV3IChfX3ApIF9UMSgpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv
cj4NCmlubGluZSB2b2lkDQpfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwg
X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkNCnsNCiAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAgIGRlc3Ryb3koJipfX2ZpcnN0KTsNCn0NCg0K
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQppbmxpbmUgdm9pZCBfX2Rlc3Ryb3lf
YXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3IsIF9fdHJ1ZV90eXBlKSB7fQ0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPg0KaW5saW5lIHZv
aWQNCl9fZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3Ig
X19sYXN0LCBfVHAqKQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6
aGFzX3RyaXZpYWxfZGVzdHJ1Y3Rvcg0KICAgICAgICAgIF9Ucml2aWFsX2Rlc3RydWN0b3I7DQog
IF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfVHJpdmlhbF9kZXN0cnVjdG9yKCkpOw0K
fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCmlubGluZSB2b2lkIGRlc3Ry
b3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgew0K
ICBfX2Rlc3Ryb3koX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOw0K
fQ0KDQppbmxpbmUgdm9pZCBkZXN0cm95KGNoYXIqLCBjaGFyKikge30NCmlubGluZSB2b2lkIGRl
c3Ryb3kod2NoYXJfdCosIHdjaGFyX3QqKSB7fQ0KDQogDQoNCg0KDQogDQogDQogDQojIDMyICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvdmVjdG9yIiAyIDMNCg0KIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4y
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzDQogDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoN
Cg0KDQoNCiANCg0KIA0KDQogDQogDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X0ZvcndhcmRJdGVyPg0KaW5saW5lIF9Gb3J3YXJkSXRlciANCl9fdW5pbml0aWFsaXplZF9jb3B5
X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3RydWVfdHlwZSkNCnsNCiAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0
ZXI+DQpfRm9yd2FyZEl0ZXIgDQpfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBl
KQ0Kew0KICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsNCiAgdHJ5ICB7DQogICAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3VyKQ0KICAgICAgY29uc3Ry
dWN0KCYqX19jdXIsICpfX2ZpcnN0KTsNCiAgICByZXR1cm4gX19jdXI7DQogIH0NCiAgY2F0Y2go
Li4uKSB7ICBkZXN0cm95KF9fcmVzdWx0LCBfX2N1cikgOyB0aHJvdzsgfSA7DQp9DQoNCg0KdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0K
aW5saW5lIF9Gb3J3YXJkSXRlcg0KX191bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
ciBfX3Jlc3VsdCwgX1RwKikNCnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9U
cD46OmlzX1BPRF90eXBlIF9Jc19QT0Q7DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9h
dXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsNCn0NCg0KdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4NCmlubGluZSBfRm9yd2FyZEl0
ZXINCiAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpDQp7DQog
IHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX3Jlc3VsdCApICk7
DQp9DQoNCmlubGluZSBjaGFyKiB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJz
dCwgY29uc3QgY2hhciogX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyKiBfX3Jlc3VsdCkgew0KICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBf
X2ZpcnN0KTsNCiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQpp
bmxpbmUgd2NoYXJfdCogDQp1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19maXJz
dCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LA0KICAgICAgICAgICAgICAgICAgIHdjaGFyX3QqIF9f
cmVzdWx0KQ0Kew0KICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkg
KiAoX19sYXN0IC0gX19maXJzdCkpOw0KICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19m
aXJzdCk7DQp9DQoNCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXpl
LCBjbGFzcyBfRm9yd2FyZEl0ZXI+DQpwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4NCl9f
dW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0K
ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAg
ICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsNCiAgX0ZvcndhcmRJdGVyIF9fY3Vy
ID0gX19yZXN1bHQ7DQogIHRyeSAgew0KICAgIGZvciAoIDsgX19jb3VudCA+IDAgOyAtLV9fY291
bnQsICsrX19maXJzdCwgKytfX2N1cikgDQogICAgICBjb25zdHJ1Y3QoJipfX2N1ciwgKl9fZmly
c3QpOw0KICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwg
X19jdXIpOw0KICB9DQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX3Jlc3VsdCwgX19jdXIpIDsg
dGhyb3c7IH0gOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+DQppbmxpbmUgcGFpcjxfUmFuZG9tQWNjZXNzSXRl
ciwgX0ZvcndhcmRJdGVyPg0KX191bmluaXRpYWxpemVkX2NvcHlfbihfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRl
cmF0b3JfdGFnKSB7DQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2Nv
dW50Ow0KICByZXR1cm4gcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPigNCiAg
ICAgICAgICAgICAgICAgX19sYXN0LA0KICAgICAgICAgICAgICAgICB1bmluaXRpYWxpemVkX2Nv
cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4NCmlubGluZSBwYWlyPF9J
bnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4NCl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRl
ciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyIF9fcmVzdWx0KSB7DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3Qs
IF9fY291bnQsIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0
ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+DQppbmxpbmUgcGFpcjxfSW5w
dXRJdGVyLCBfRm9yd2FyZEl0ZXI+DQp1bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fY291bnQsDQogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg
X19yZXN1bHQpIHsNCiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19j
b3VudCwgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0
b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOw0KfQ0KDQogDQogDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyLCBjbGFzcyBfVHA+DQppbmxpbmUgdm9pZA0KX191bmluaXRpYWxpemVkX2ZpbGxf
YXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCANCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpDQp7DQogIGZpbGwo
X19maXJzdCwgX19sYXN0LCBfX3gpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfVHA+DQp2b2lkDQpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIA0KICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpDQp7DQogIF9Gb3J3YXJkSXRlciBfX2N1ciA9
IF9fZmlyc3Q7DQogIHRyeSAgew0KICAgIGZvciAoIDsgX19jdXIgIT0gX19sYXN0OyArK19fY3Vy
KQ0KICAgICAgY29uc3RydWN0KCYqX19jdXIsIF9feCk7DQogIH0NCiAgY2F0Y2goLi4uKSB7ICBk
ZXN0cm95KF9fZmlyc3QsIF9fY3VyKSA7IHRocm93OyB9IDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPg0KaW5saW5lIHZvaWQgX191bmlu
aXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gsIF9UcDEq
KQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwMT46OmlzX1BPRF90eXBl
IF9Jc19QT0Q7DQogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f
eCwgX0lzX1BPRCgpKTsNCiAgICAgICAgICAgICAgICAgICANCn0NCg0KdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0KaW5saW5lIHZvaWQgdW5pbml0aWFsaXplZF9maWxs
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX2xhc3QsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9UcCYgX194KQ0Kew0KICBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9f
eCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsNCn0NCg0KIA0KIA0KdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4NCmlubGluZSBfRm9yd2FyZEl0
ZXINCl9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6
ZSBfX24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVl
X3R5cGUpDQp7DQogIHJldHVybiBmaWxsX24oX19maXJzdCwgX19uLCBfX3gpOw0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPg0KX0Zvcndh
cmRJdGVyDQpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X1NpemUgX19uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9f
ZmFsc2VfdHlwZSkNCnsNCiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsNCiAgdHJ5ICB7
DQogICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikNCiAgICAgIGNvbnN0cnVjdCgm
Kl9fY3VyLCBfX3gpOw0KICAgIHJldHVybiBfX2N1cjsNCiAgfQ0KICBjYXRjaCguLi4pIHsgIGRl
c3Ryb3koX19maXJzdCwgX19jdXIpIDsgdGhyb3c7IH0gOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPg0KaW5saW5l
IF9Gb3J3YXJkSXRlciANCl9fdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQ0Kew0KICB0eXBlZGVmIHR5cGVu
YW1lIF9fdHlwZV90cmFpdHM8X1RwMT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7DQogIHJldHVybiBf
X3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsN
Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9U
cD4NCmlubGluZSBfRm9yd2FyZEl0ZXIgDQp1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkNCnsNCiAgcmV0dXJuIF9fdW5p
bml0aWFsaXplZF9maWxsX24oX19maXJzdCwgX19uLCBfX3gsIF9fdmFsdWVfdHlwZSggX19maXJz
dCApICk7DQp9DQoNCiANCiANCg0KIA0KIA0KIA0KIA0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+DQppbmxpbmUgX0Zv
cndhcmRJdGVyDQpfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1dEl0ZXIxIF9fZmlyc3Qx
LCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQ0Kew0KICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1
bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsNCiAgdHJ5ICB7
DQogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQp
Ow0KICB9DQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX3Jlc3VsdCwgX19taWQpIDsgdGhyb3c7
IH0gOw0KfQ0KDQogDQogDQogDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
VHAsIGNsYXNzIF9JbnB1dEl0ZXI+DQppbmxpbmUgX0ZvcndhcmRJdGVyIA0KX191bmluaXRpYWxp
emVkX2ZpbGxfY29weShfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpDQp7DQog
IHVuaW5pdGlhbGl6ZWRfZmlsbChfX3Jlc3VsdCwgX19taWQsIF9feCk7DQogIHRyeSAgew0KICAg
IHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX21pZCk7DQogIH0N
CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fcmVzdWx0LCBfX21pZCkgOyB0aHJvdzsgfSA7DQp9
DQoNCiANCiANCiANCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9UcD4NCmlubGluZSB2b2lkDQpfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9J
bnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpDQp7DQogIF9Gb3J3YXJkSXRl
ciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3Qy
KTsNCiAgdHJ5ICB7DQogICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194
KTsNCiAgfQ0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19maXJzdDIsIF9fbWlkMikgOyB0aHJv
dzsgfSA7DQp9DQoNCiANCg0KDQoNCiANCiANCiANCiMgMzMgIi91c3IvbGliL2djYy1saWIvaTM4
Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy92ZWN0b3IiIDIgMw0KDQoj
IDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGxfdmVjdG9yLmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQogIA0KDQoNCg0KDQoNCg0KIA0K
IA0KIA0KIA0KIA0KDQoNCg0KIA0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRv
ciwgYm9vbCBfSXNTdGF0aWM+DQpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2Ugew0KcHVibGljOg0K
ICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2Nh
dG9yX3R5cGUNCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsNCiAgYWxsb2NhdG9yX3R5cGUgZ2V0
X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9DQoNCiAgX1Zl
Y3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpDQogICAgOiBfTV9kYXRh
X2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3Rv
cmFnZSgwKSANCiAge30NCiAgDQpwcm90ZWN0ZWQ6DQogIGFsbG9jYXRvcl90eXBlIF9NX2RhdGFf
YWxsb2NhdG9yOw0KICBfVHAqIF9NX3N0YXJ0Ow0KICBfVHAqIF9NX2ZpbmlzaDsNCiAgX1RwKiBf
TV9lbmRfb2Zfc3RvcmFnZTsNCg0KICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pDQogICAg
eyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoX19uKTsgfQ0KICB2b2lkIF9NX2Rl
YWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pDQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2Fs
bG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgX19uKTsgfQ0KfTsNCg0KIA0KIA0KdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4NCmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAs
IF9BbGxvY2F0b3IsIHRydWU+IHsNCnB1YmxpYzoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2Nf
dHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlDQogICAgICAgICAgYWxsb2Nh
dG9yX3R5cGU7DQogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVy
biBhbGxvY2F0b3JfdHlwZSgpOyB9DQoNCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9j
YXRvcl90eXBlJikNCiAgICA6IF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9z
dG9yYWdlKDApIA0KICB7fQ0KICANCnByb3RlY3RlZDoNCiAgX1RwKiBfTV9zdGFydDsNCiAgX1Rw
KiBfTV9maW5pc2g7DQogIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7DQoNCiAgdHlwZWRlZiB0eXBl
bmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlIF9BbGxvY190
eXBlOw0KICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pDQogICAgeyByZXR1cm4gX0FsbG9j
X3R5cGU6OmFsbG9jYXRlKF9fbik7IH0NCiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19wLCBz
aXplX3QgX19uKQ0KICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCBfX24pO30NCn07
DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnN0cnVjdCBfVmVjdG9yX2Jh
c2UNCiAgOiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3Rh
bmNlbGVzcz4NCnsNCiAgdHlwZWRlZiBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsIA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6
X1NfaW5zdGFuY2VsZXNzPg0KICAgICAgICAgIF9CYXNlOw0KICB0eXBlZGVmIHR5cGVuYW1lIF9C
YXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsNCg0KICBfVmVjdG9yX2Jhc2UoY29u
c3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9DQogIF9WZWN0b3JfYmFzZShz
aXplX3QgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgew0KICAg
IF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsNCiAgICBfTV9maW5pc2ggPSBfTV9zdGFydDsN
CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOw0KICB9DQoNCiAgfl9WZWN0
b3JfYmFzZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBf
TV9zdGFydCk7IH0NCn07ICAgIA0KDQojIDE1MCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4
LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF92ZWN0b3IuaCIgMw0KDQoNCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjwgX1RwID4gID4NCmNs
YXNzIHZlY3RvciA6IHByb3RlY3RlZCBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+IA0Kew0KcHJp
dmF0ZToNCiAgdHlwZWRlZiBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNlOw0KcHVibGlj
Og0KICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50
ZXI7DQogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsNCiAgdHlwZWRl
ZiB2YWx1ZV90eXBlKiBpdGVyYXRvcjsNCiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25z
dF9pdGVyYXRvcjsNCiAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7DQogIHR5cGVkZWYg
Y29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOw0KICB0eXBlZGVmIHNpemVfdCBzaXpl
X3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsNCg0KICB0eXBlZGVm
IHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsNCiAgYWxsb2Nh
dG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2Nh
dG9yKCk7IH0NCg0KDQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4g
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsNCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJh
dG9yPiByZXZlcnNlX2l0ZXJhdG9yOw0KDQoNCg0KDQoNCg0KDQpwcm90ZWN0ZWQ6DQoNCiAgdXNp
bmcgX0Jhc2U6Ol9NX2FsbG9jYXRlOw0KICB1c2luZyBfQmFzZTo6X01fZGVhbGxvY2F0ZTsNCiAg
dXNpbmcgX0Jhc2U6Ol9NX3N0YXJ0Ow0KICB1c2luZyBfQmFzZTo6X01fZmluaXNoOw0KICB1c2lu
ZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7DQoNCg0KcHJvdGVjdGVkOg0KICB2b2lkIF9NX2lu
c2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpOw0KICB2b2lkIF9N
X2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbik7DQoNCnB1YmxpYzoNCiAgaXRlcmF0b3Ig
YmVnaW4oKSB7IHJldHVybiBfTV9zdGFydDsgfQ0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9DQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2Zp
bmlzaDsgfQ0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7
IH0NCg0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpDQogICAgeyByZXR1cm4gcmV2ZXJzZV9p
dGVyYXRvcihlbmQoKSk7IH0NCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25z
dA0KICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9DQogIHJldmVy
c2VfaXRlcmF0b3IgcmVuZCgpDQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigp
KTsgfQ0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdA0KICAgIHsgcmV0dXJu
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0NCg0KICBzaXplX3R5cGUgc2l6ZSgp
IGNvbnN0DQogICAgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0NCiAgc2l6
ZV90eXBlIG1heF9zaXplKCkgY29uc3QNCiAgICB7IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6
ZW9mKF9UcCk7IH0NCiAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QNCiAgICB7IHJldHVybiBz
aXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBiZWdpbigpKTsgfQ0KICBib29sIGVtcHR5KCkg
Y29uc3QNCiAgICB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9DQoNCiAgcmVmZXJlbmNlIG9w
ZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQ0KICBj
b25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAq
KGJlZ2luKCkgKyBfX24pOyB9DQoNCiAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90
eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQ0KICAgIDogX0Jhc2UoX19hKSB7fQ0KDQogIHZl
Y3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUsDQogICAgICAgICBjb25zdCBh
bGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgDQogICAgOiBfQmFzZShfX24s
IF9fYSkNCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBf
X24sIF9fdmFsdWUpOyB9DQoNCiAgZXhwbGljaXQgdmVjdG9yKHNpemVfdHlwZSBfX24pDQogICAg
OiBfQmFzZShfX24sIGFsbG9jYXRvcl90eXBlKCkpDQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRp
YWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfVHAoKSk7IH0NCg0KICB2ZWN0b3IoY29uc3Qg
dmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KSANCiAgICA6IF9CYXNlKF9feC5zaXplKCksIF9feC5n
ZXRfYWxsb2NhdG9yKCkpDQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194
LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpOyB9DQoNCg0KICAgDQogIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2Eg
PSBhbGxvY2F0b3JfdHlwZSgpKSA6IF9CYXNlKF9fYSkgew0KICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOw0KICAgIF9N
X2luaXRpYWxpemVfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOw0KICB9DQoNCiAg
dGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPg0KICB2b2lkIF9NX2luaXRpYWxpemVfYXV4KF9JbnRl
Z2VyIF9fbiwgX0ludGVnZXIgX192YWx1ZSwgX190cnVlX3R5cGUpIHsNCiAgICBfTV9zdGFydCA9
IF9NX2FsbG9jYXRlKF9fbik7DQogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9f
bjsgDQogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwg
X192YWx1ZSk7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogIHZv
aWQgX01faW5pdGlhbGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgew0KICAg
IF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5
KCBfX2ZpcnN0ICkgKTsNCiAgfQ0KDQoNCg0KDQoNCg0KDQoNCiAgfnZlY3RvcigpIHsgZGVzdHJv
eShfTV9zdGFydCwgX01fZmluaXNoKTsgfQ0KDQogIHZlY3RvcjxfVHAsIF9BbGxvYz4mIG9wZXJh
dG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpOw0KICB2b2lkIHJlc2VydmUoc2l6
ZV90eXBlIF9fbikgew0KICAgIGlmIChjYXBhY2l0eSgpIDwgX19uKSB7DQogICAgICBjb25zdCBz
aXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsNCiAgICAgIGl0ZXJhdG9yIF9fdG1wID0gX01f
YWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwgX01fZmluaXNoKTsNCiAgICAgIGRlc3Ry
b3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7DQogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBf
TV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsNCiAgICAgIF9NX3N0YXJ0ID0gX190bXA7DQog
ICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9fb2xkX3NpemU7DQogICAgICBfTV9lbmRfb2Zfc3Rv
cmFnZSA9IF9NX3N0YXJ0ICsgX19uOw0KICAgIH0NCiAgfQ0KDQogICANCiAgIA0KICAgDQogICAN
Cg0KICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKTsNCg0KDQog
IA0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogIHZvaWQgYXNzaWduKF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgew0KICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFs
Ow0KICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsN
CiAgfQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4NCiAgdm9pZCBfTV9hc3NpZ25fZGlz
cGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpDQogICAgeyBh
c3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0NCg0KICB0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcj4NCiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQ0KICAgIHsgX01fYXNzaWduX2F1
eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOyB9DQoN
CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICB2b2lkIF9NX2Fzc2lnbl9hdXgo
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAg
ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyYXRvcj4NCiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19m
aXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBmb3J3
YXJkX2l0ZXJhdG9yX3RhZyk7IA0KDQoNCg0KICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAq
YmVnaW4oKTsgfQ0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVn
aW4oKTsgfQ0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQ0KICBj
b25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQ0KDQog
IHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KSB7DQogICAgaWYgKF9NX2ZpbmlzaCAhPSBf
TV9lbmRfb2Zfc3RvcmFnZSkgew0KICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsNCiAg
ICAgICsrX01fZmluaXNoOw0KICAgIH0NCiAgICBlbHNlDQogICAgICBfTV9pbnNlcnRfYXV4KGVu
ZCgpLCBfX3gpOw0KICB9DQogIHZvaWQgcHVzaF9iYWNrKCkgew0KICAgIGlmIChfTV9maW5pc2gg
IT0gX01fZW5kX29mX3N0b3JhZ2UpIHsNCiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOw0KICAg
ICAgKytfTV9maW5pc2g7DQogICAgfQ0KICAgIGVsc2UNCiAgICAgIF9NX2luc2VydF9hdXgoZW5k
KCkpOw0KICB9DQogIHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpIHsNCiAgICAg
Ojpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOw0KICAgICA6OnN3YXAoX01fZmluaXNoLCBf
X3guX01fZmluaXNoKTsNCiAgICAgOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBfX3guX01fZW5k
X29mX3N0b3JhZ2UpOw0KICB9DQoNCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRp
b24sIGNvbnN0IF9UcCYgX194KSB7DQogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBi
ZWdpbigpOw0KICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3Np
dGlvbiA9PSBlbmQoKSkgew0KICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsNCiAgICAg
ICsrX01fZmluaXNoOw0KICAgIH0NCiAgICBlbHNlDQogICAgICBfTV9pbnNlcnRfYXV4KF9fcG9z
aXRpb24sIF9feCk7DQogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247DQogIH0NCiAgaXRlcmF0b3Ig
aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsNCiAgICBzaXplX3R5cGUgX19uID0gX19wb3Np
dGlvbiAtIGJlZ2luKCk7DQogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAm
JiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7DQogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoKTsNCiAg
ICAgICsrX01fZmluaXNoOw0KICAgIH0NCiAgICBlbHNlDQogICAgICBfTV9pbnNlcnRfYXV4KF9f
cG9zaXRpb24pOw0KICAgIHJldHVybiBiZWdpbigpICsgX19uOw0KICB9DQoNCiAgIA0KICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9z
LCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsNCiAgICB0
eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9J
bnRlZ3JhbDsNCiAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwg
X0ludGVncmFsKCkpOw0KICB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPg0KICB2b2lk
IF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdl
ciBfX3ZhbCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsNCiAgICBp
bnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192YWwpOw0KICB9DQoNCiAgdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChp
dGVyYXRvciBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2ZhbHNlX3R5cGUpIHsNCiAgICBfTV9yYW5nZV9pbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9f
bGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7DQogIH0NCg0KDQoNCg0KDQog
IHZvaWQgaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBf
X3gpOw0KDQogIHZvaWQgcG9wX2JhY2soKSB7DQogICAgLS1fTV9maW5pc2g7DQogICAgZGVzdHJv
eShfTV9maW5pc2gpOw0KICB9DQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24p
IHsNCiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpDQogICAgICBjb3B5KF9fcG9zaXRp
b24gKyAxLCBfTV9maW5pc2gsIF9fcG9zaXRpb24pOw0KICAgIC0tX01fZmluaXNoOw0KICAgIGRl
c3Ryb3koX01fZmluaXNoKTsNCiAgICByZXR1cm4gX19wb3NpdGlvbjsNCiAgfQ0KICBpdGVyYXRv
ciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsNCiAgICBpdGVyYXRv
ciBfX2kgPSBjb3B5KF9fbGFzdCwgX01fZmluaXNoLCBfX2ZpcnN0KTsNCiAgICBkZXN0cm95KF9f
aSwgX01fZmluaXNoKTsNCiAgICBfTV9maW5pc2ggPSBfTV9maW5pc2ggLSAoX19sYXN0IC0gX19m
aXJzdCk7DQogICAgcmV0dXJuIF9fZmlyc3Q7DQogIH0NCg0KICB2b2lkIHJlc2l6ZShzaXplX3R5
cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpIHsNCiAgICBpZiAoX19uZXdfc2l6ZSA8IHNp
emUoKSkgDQogICAgICBlcmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5kKCkpOw0KICAgIGVs
c2UNCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsNCiAgfQ0K
ICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkgeyByZXNpemUoX19uZXdfc2l6ZSwg
X1RwKCkpOyB9DQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQ0KDQpw
cm90ZWN0ZWQ6DQoNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgaXRl
cmF0b3IgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90eXBlIF9fbiwgX0ZvcndhcmRJdGVyYXRv
ciBfX2ZpcnN0LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpDQp7DQogICAgaXRlcmF0b3IgX19yZXN1bHQgPSBf
TV9hbGxvY2F0ZShfX24pOw0KICAgIHRyeSAgew0KICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOw0KICAgICAgcmV0dXJuIF9fcmVzdWx0Ow0KICAgIH0N
CiAgICBjYXRjaCguLi4pIHsgIF9NX2RlYWxsb2NhdGUoX19yZXN1bHQsIF9fbikgOyB0aHJvdzsg
fSA7DQogIH0NCiMgNDQwICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAzDQoNCg0KDQoNCiAgdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
cmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpDQogIHsNCiAgICBmb3IgKCA7IF9fZmly
c3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOw0KICB9
DQoNCiAgIA0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgdm9pZCBfTV9y
YW5nZV9pbml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBmb3J3YXJkX2l0ZXJhdG9yX3Rh
ZykNCiAgew0KICAgIHNpemVfdHlwZSBfX24gPSAwOw0KICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9f
bGFzdCwgX19uKTsNCiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7DQogICAgX01fZW5k
X29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsNCiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxp
emVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7DQogIH0NCg0KICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogIHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9f
cG9zLA0KICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y
X3RhZyk7DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQogIHZvaWQgX01f
cmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLA0KICAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAg
ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7DQoNCg0KfTsNCg0KdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0KaW5saW5lIGJvb2wgDQpvcGVyYXRvcj09KGNvbnN0
IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195
KQ0Kew0KICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmDQogICAgICAgICBlcXVh
bChfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29sIA0Kb3BlcmF0b3I8KGNvbnN0IHZl
Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQ0K
ew0KICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQo
KSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVu
ZCgpKTsNCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGlu
ZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+
JiBfX3kpDQp7DQogIF9feC5zd2FwKF9feSk7DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+DQp2ZWN0b3I8X1RwLF9BbGxvYz4mIA0KdmVjdG9yPF9UcCxfQWxsb2M+
OjpvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQ0Kew0KICBpZiAoJl9f
eCAhPSB0aGlzKSB7DQogICAgY29uc3Qgc2l6ZV90eXBlIF9feGxlbiA9IF9feC5zaXplKCk7DQog
ICAgaWYgKF9feGxlbiA+IGNhcGFjaXR5KCkpIHsNCiAgICAgIGl0ZXJhdG9yIF9fdG1wID0gX01f
YWxsb2NhdGVfYW5kX2NvcHkoX194bGVuLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsNCiAgICAg
IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7DQogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0
YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsNCiAgICAgIF9NX3N0YXJ0ID0gX190
bXA7DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX194bGVuOw0KICAgIH0N
CiAgICBlbHNlIGlmIChzaXplKCkgPj0gX194bGVuKSB7DQogICAgICBpdGVyYXRvciBfX2kgPSBj
b3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIGJlZ2luKCkpOw0KICAgICAgZGVzdHJveShfX2ks
IF9NX2ZpbmlzaCk7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgY29weShfX3guYmVnaW4oKSwg
X194LmJlZ2luKCkgKyBzaXplKCksIF9NX3N0YXJ0KTsNCiAgICAgIHVuaW5pdGlhbGl6ZWRfY29w
eShfX3guYmVnaW4oKSArIHNpemUoKSwgX194LmVuZCgpLCBfTV9maW5pc2gpOw0KICAgIH0NCiAg
ICBfTV9maW5pc2ggPSBfTV9zdGFydCArIF9feGxlbjsNCiAgfQ0KICByZXR1cm4gKnRoaXM7DQp9
DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnZvaWQgdmVjdG9yPF9UcCwg
X0FsbG9jPjo6YXNzaWduKHNpemVfdCBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKSB7DQog
IGlmIChfX24gPiBjYXBhY2l0eSgpKSB7DQogICAgdmVjdG9yPF9UcCwgX0FsbG9jPiBfX3RtcChf
X24sIF9fdmFsLCBnZXRfYWxsb2NhdG9yKCkpOw0KICAgIF9fdG1wLnN3YXAoKnRoaXMpOw0KICB9
DQogIGVsc2UgaWYgKF9fbiA+IHNpemUoKSkgew0KICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9f
dmFsKTsNCiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9f
biAtIHNpemUoKSwgX192YWwpOw0KICB9DQogIGVsc2UNCiAgICBlcmFzZShmaWxsX24oYmVnaW4o
KSwgX19uLCBfX3ZhbCksIGVuZCgpKTsNCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+DQp2b2lkIHZlY3RvcjxfVHAs
IF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVy
YXRvcl90YWcpIHsNCiAgaXRlcmF0b3IgX19jdXIgPSBiZWdpbigpOw0KICBmb3IgKCA7IF9fZmly
c3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpDQogICAg
Kl9fY3VyID0gKl9fZmlyc3Q7DQogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkNCiAgICBlcmFzZShf
X2N1ciwgZW5kKCkpOw0KICBlbHNlDQogICAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0LCBfX2xhc3Qp
Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXI+DQp2b2lkDQp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgew0KICBzaXplX3R5
cGUgX19sZW4gPSAwOw0KICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsNCg0KICBp
ZiAoX19sZW4gPiBjYXBhY2l0eSgpKSB7DQogICAgaXRlcmF0b3IgX190bXAgPSBfTV9hbGxvY2F0
ZV9hbmRfY29weShfX2xlbiwgX19maXJzdCwgX19sYXN0KTsNCiAgICBkZXN0cm95KF9NX3N0YXJ0
LCBfTV9maW5pc2gpOw0KICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9y
YWdlIC0gX01fc3RhcnQpOw0KICAgIF9NX3N0YXJ0ID0gX190bXA7DQogICAgX01fZW5kX29mX3N0
b3JhZ2UgPSBfTV9maW5pc2ggPSBfTV9zdGFydCArIF9fbGVuOw0KICB9DQogIGVsc2UgaWYgKHNp
emUoKSA+PSBfX2xlbikgew0KICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IGNvcHkoX19maXJz
dCwgX19sYXN0LCBfTV9zdGFydCk7DQogICAgZGVzdHJveShfX25ld19maW5pc2gsIF9NX2Zpbmlz
aCk7DQogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOw0KICB9DQogIGVsc2Ugew0KICAgIF9G
b3J3YXJkSXRlciBfX21pZCA9IF9fZmlyc3Q7DQogICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsN
CiAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfTV9zdGFydCk7DQogICAgX01fZmluaXNoID0gdW5p
bml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7DQogIH0NCn0NCg0KDQoN
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnZvaWQgDQp2ZWN0b3I8X1RwLCBf
QWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194
KQ0Kew0KICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7DQogICAgY29uc3Ry
dWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7DQogICAgKytfTV9maW5pc2g7DQogICAg
X1RwIF9feF9jb3B5ID0gX194Ow0KICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmlu
aXNoIC0gMiwgX01fZmluaXNoIC0gMSk7DQogICAgKl9fcG9zaXRpb24gPSBfX3hfY29weTsNCiAg
fQ0KICBlbHNlIHsNCiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsNCiAg
ICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6
ZSA6IDE7DQogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7DQog
ICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7DQogICAgdHJ5ICB7DQogICAg
ICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX01fc3RhcnQsIF9fcG9zaXRpb24s
IF9fbmV3X3N0YXJ0KTsNCiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gsIF9feCk7DQogICAg
ICArK19fbmV3X2ZpbmlzaDsNCiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29w
eShfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3X2ZpbmlzaCk7DQogICAgfQ0KICAgIGNhdGNo
KC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgDQogICAgICAgICAg
ICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LF9fbGVuKSkgOyB0aHJvdzsgfSA7DQog
ICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7DQogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwg
X01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7DQogICAgX01fc3RhcnQgPSBfX25ld19zdGFy
dDsNCiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7DQogICAgX01fZW5kX29mX3N0b3JhZ2Ug
PSBfX25ld19zdGFydCArIF9fbGVuOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4NCnZvaWQgDQp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0
ZXJhdG9yIF9fcG9zaXRpb24pDQp7DQogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3Jh
Z2UpIHsNCiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsNCiAgICAr
K19NX2ZpbmlzaDsNCiAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9NX2ZpbmlzaCAtIDIs
IF9NX2ZpbmlzaCAtIDEpOw0KICAgICpfX3Bvc2l0aW9uID0gX1RwKCk7DQogIH0NCiAgZWxzZSB7
DQogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7DQogICAgY29uc3Qgc2l6
ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOw0KICAg
IGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOw0KICAgIGl0ZXJhdG9y
IF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0Ow0KICAgIHRyeSAgew0KICAgICAgX19uZXdfZmlu
aXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3Bvc2l0aW9uLCBfX25ld19zdGFy
dCk7DQogICAgICBjb25zdHJ1Y3QoX19uZXdfZmluaXNoKTsNCiAgICAgICsrX19uZXdfZmluaXNo
Ow0KICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9N
X2ZpbmlzaCwgX19uZXdfZmluaXNoKTsNCiAgICB9DQogICAgY2F0Y2goLi4uKSB7ICAoZGVzdHJv
eShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCANCiAgICAgICAgICAgICAgICAgIF9NX2RlYWxs
b2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKSA7IHRocm93OyB9IDsNCiAgICBkZXN0cm95KGJlZ2lu
KCksIGVuZCgpKTsNCiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFn
ZSAtIF9NX3N0YXJ0KTsNCiAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0Ow0KICAgIF9NX2Zpbmlz
aCA9IF9fbmV3X2ZpbmlzaDsNCiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsg
X19sZW47DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0Kdm9p
ZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjppbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90
eXBlIF9fbiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f
eCkNCnsNCiAgaWYgKF9fbiAhPSAwKSB7DQogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3Rv
cmFnZSAtIF9NX2ZpbmlzaCkgPj0gX19uKSB7DQogICAgICBfVHAgX194X2NvcHkgPSBfX3g7DQog
ICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IF9NX2ZpbmlzaCAtIF9fcG9zaXRp
b247DQogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2ggPSBfTV9maW5pc2g7DQogICAgICBpZiAo
X19lbGVtc19hZnRlciA+IF9fbikgew0KICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmlu
aXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7DQogICAgICAgIF9NX2ZpbmlzaCArPSBf
X247DQogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19u
LCBfX29sZF9maW5pc2gpOw0KICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBf
X24sIF9feF9jb3B5KTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAgICB1bmluaXRpYWxp
emVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAtIF9fZWxlbXNfYWZ0ZXIsIF9feF9jb3B5KTsNCiAg
ICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7DQogICAgICAgIHVuaW5pdGlh
bGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7DQogICAgICAg
IF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOw0KICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9f
b2xkX2ZpbmlzaCwgX194X2NvcHkpOw0KICAgICAgfQ0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOyAgICAgICAgDQogICAgICBjb25z
dCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7DQog
ICAgICBpdGVyYXRvciBfX25ld19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsNCiAgICAgIGl0
ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0Ow0KICAgICAgdHJ5ICB7DQogICAgICAg
IF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfTV9zdGFydCwgX19wb3NpdGlvbiwg
X19uZXdfc3RhcnQpOw0KICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxf
bihfX25ld19maW5pc2gsIF9fbiwgX194KTsNCiAgICAgICAgX19uZXdfZmluaXNoDQogICAgICAg
ICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfX25ld19maW5p
c2gpOw0KICAgICAgfQ0KICAgICAgY2F0Y2goLi4uKSB7ICAoZGVzdHJveShfX25ld19zdGFydCxf
X25ld19maW5pc2gpLCANCiAgICAgICAgICAgICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19z
dGFydCxfX2xlbikpIDsgdGhyb3c7IH0gOw0KICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmlu
aXNoKTsNCiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0g
X01fc3RhcnQpOw0KICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsNCiAgICAgIF9NX2Zpbmlz
aCA9IF9fbmV3X2ZpbmlzaDsNCiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQg
KyBfX2xlbjsNCiAgICB9DQogIH0NCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0Kdm9pZCANCnZlY3Rvcjxf
VHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywgDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykN
CnsNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7DQogICAgX19wb3Mg
PSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsNCiAgICArK19fcG9zOw0KICB9DQp9DQoNCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cmF0b3I+DQp2b2lkIA0KdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0ZXJh
dG9yIF9fcG9zaXRpb24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQ0Kew0KICBpZiAoX19maXJzdCAhPSBfX2xh
c3QpIHsNCiAgICBzaXplX3R5cGUgX19uID0gMDsNCiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xh
c3QsIF9fbik7DQogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2Zpbmlz
aCkgPj0gX19uKSB7DQogICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IF9NX2Zp
bmlzaCAtIF9fcG9zaXRpb247DQogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2ggPSBfTV9maW5p
c2g7DQogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgew0KICAgICAgICB1bmluaXRpYWxp
emVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7DQogICAgICAg
IF9NX2ZpbmlzaCArPSBfX247DQogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19v
bGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOw0KICAgICAgICBjb3B5KF9fZmlyc3QsIF9f
bGFzdCwgX19wb3NpdGlvbik7DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAgICAgX0Zvcndh
cmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7DQogICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxl
bXNfYWZ0ZXIpOw0KICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01f
ZmluaXNoKTsNCiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7DQogICAg
ICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2Zpbmlz
aCk7DQogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOw0KICAgICAgICBjb3B5KF9f
Zmlyc3QsIF9fbWlkLCBfX3Bvc2l0aW9uKTsNCiAgICAgIH0NCiAgICB9DQogICAgZWxzZSB7DQog
ICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsNCiAgICAgIGNvbnN0IHNp
emVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsNCiAgICAg
IGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOw0KICAgICAgaXRlcmF0
b3IgX19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7DQogICAgICB0cnkgIHsNCiAgICAgICAgX19u
ZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3Bvc2l0aW9uLCBfX25l
d19zdGFydCk7DQogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2Zp
cnN0LCBfX2xhc3QsIF9fbmV3X2ZpbmlzaCk7DQogICAgICAgIF9fbmV3X2ZpbmlzaA0KICAgICAg
ICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmlu
aXNoKTsNCiAgICAgIH0NCiAgICAgIGNhdGNoKC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3RhcnQs
X19uZXdfZmluaXNoKSwgDQogICAgICAgICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdf
c3RhcnQsX19sZW4pKSA7IHRocm93OyB9IDsNCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2Zp
bmlzaCk7DQogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAt
IF9NX3N0YXJ0KTsNCiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7DQogICAgICBfTV9maW5p
c2ggPSBfX25ld19maW5pc2g7DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0
ICsgX19sZW47DQogICAgfQ0KICB9DQp9DQoNCiMgODEwICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
bGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAzDQoN
Cg0KDQoNCg0KDQoNCiAgDQoNCg0KDQogDQogDQogDQojIDM0ICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdmVjdG9yIiAyIDMNCg0K
IyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RsX2J2ZWN0b3IuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCiAgDQoNCnN0YXRpYyBjb25z
dCBpbnQgX19XT1JEX0JJVCA9IGludCg4ICpzaXplb2YodW5zaWduZWQgaW50KSk7DQoNCg0KDQoN
Cg0KDQpzdHJ1Y3QgX0JpdF9yZWZlcmVuY2Ugew0KICB1bnNpZ25lZCBpbnQqIF9NX3A7DQogIHVu
c2lnbmVkIGludCBfTV9tYXNrOw0KICBfQml0X3JlZmVyZW5jZSh1bnNpZ25lZCBpbnQqIF9feCwg
dW5zaWduZWQgaW50IF9feSkgDQogICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7fQ0KDQpw
dWJsaWM6DQogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9tYXNrKDApIHt9DQogIG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhKCEoKl9NX3AgJiBfTV9tYXNrKSk7IH0NCiAg
X0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShib29sIF9feCkNCiAgew0KICAgIGlmIChfX3gpICAq
X01fcCB8PSBfTV9tYXNrOw0KICAgIGVsc2UgICAgICAqX01fcCAmPSB+X01fbWFzazsNCiAgICBy
ZXR1cm4gKnRoaXM7DQogIH0NCiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25zdCBfQml0
X3JlZmVyZW5jZSYgX194KSANCiAgICB7IHJldHVybiAqdGhpcyA9IGJvb2woX194KTsgfQ0KICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3QNCiAgICB7IHJl
dHVybiBib29sKCp0aGlzKSA9PSBib29sKF9feCk7IH0NCiAgYm9vbCBvcGVyYXRvcjwoY29uc3Qg
X0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3Qgew0KICAgIHJldHVybiAhYm9vbCgqdGhpcykgJiYg
Ym9vbChfX3gpOw0KICB9DQogIHZvaWQgZmxpcCgpIHsgKl9NX3AgXj0gX01fbWFzazsgfQ0KfTsN
Cg0KaW5saW5lIHZvaWQgc3dhcChfQml0X3JlZmVyZW5jZSBfX3gsIF9CaXRfcmVmZXJlbmNlIF9f
eSkNCnsNCiAgYm9vbCBfX3RtcCA9IF9feDsNCiAgX194ID0gX195Ow0KICBfX3kgPSBfX3RtcDsN
Cn0NCg0Kc3RydWN0IF9CaXRfaXRlcmF0b3IgOiBwdWJsaWMgcmFuZG9tX2FjY2Vzc19pdGVyYXRv
cjxib29sLCBwdHJkaWZmX3Q+IHsNCiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSAgcmVmZXJlbmNl
Ow0KICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOw0KICB0eXBlZGVmIF9CaXRfaXRl
cmF0b3IgICBpdGVyYXRvcjsNCg0KICB1bnNpZ25lZCBpbnQqIF9NX3A7DQogIHVuc2lnbmVkIGlu
dCBfTV9vZmZzZXQ7DQogIHZvaWQgYnVtcF91cCgpIHsNCiAgICBpZiAoX01fb2Zmc2V0KysgPT0g
X19XT1JEX0JJVCAtIDEpIHsNCiAgICAgIF9NX29mZnNldCA9IDA7DQogICAgICArK19NX3A7DQog
ICAgfQ0KICB9DQogIHZvaWQgYnVtcF9kb3duKCkgew0KICAgIGlmIChfTV9vZmZzZXQtLSA9PSAw
KSB7DQogICAgICBfTV9vZmZzZXQgPSBfX1dPUkRfQklUIC0gMTsNCiAgICAgIC0tX01fcDsNCiAg
ICB9DQogIH0NCg0KICBfQml0X2l0ZXJhdG9yKCkgOiBfTV9wKDApLCBfTV9vZmZzZXQoMCkge30N
CiAgX0JpdF9pdGVyYXRvcih1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWduZWQgaW50IF9feSkgDQog
ICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9DQogIHJlZmVyZW5jZSBvcGVyYXRvcioo
KSBjb25zdCB7IHJldHVybiByZWZlcmVuY2UoX01fcCwgMVUgPDwgX01fb2Zmc2V0KTsgfQ0KICBp
dGVyYXRvciYgb3BlcmF0b3IrKygpIHsNCiAgICBidW1wX3VwKCk7DQogICAgcmV0dXJuICp0aGlz
Ow0KICB9DQogIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7DQogICAgaXRlcmF0b3IgX190bXAg
PSAqdGhpczsNCiAgICBidW1wX3VwKCk7DQogICAgcmV0dXJuIF9fdG1wOw0KICB9DQogIGl0ZXJh
dG9yJiBvcGVyYXRvci0tKCkgew0KICAgIGJ1bXBfZG93bigpOw0KICAgIHJldHVybiAqdGhpczsN
CiAgfQ0KICBpdGVyYXRvciBvcGVyYXRvci0tKGludCkgew0KICAgIGl0ZXJhdG9yIF9fdG1wID0g
KnRoaXM7DQogICAgYnVtcF9kb3duKCk7DQogICAgcmV0dXJuIF9fdG1wOw0KICB9DQogIGl0ZXJh
dG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsNCiAgICBkaWZmZXJlbmNlX3R5
cGUgX19uID0gX19pICsgX01fb2Zmc2V0Ow0KICAgIF9NX3AgKz0gX19uIC8gX19XT1JEX0JJVDsN
CiAgICBfX24gPSBfX24gJSBfX1dPUkRfQklUOw0KICAgIGlmIChfX24gPCAwKSB7DQogICAgICBf
TV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX24gKyBfX1dPUkRfQklUOw0KICAgICAgLS1fTV9w
Ow0KICAgIH0gZWxzZQ0KICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uOw0KICAg
IHJldHVybiAqdGhpczsNCiAgfQ0KICBpdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5
cGUgX19pKSB7DQogICAgKnRoaXMgKz0gLV9faTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAg
aXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsNCiAgICBpdGVy
YXRvciBfX3RtcCA9ICp0aGlzOw0KICAgIHJldHVybiBfX3RtcCArPSBfX2k7DQogIH0NCiAgaXRl
cmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsNCiAgICBpdGVyYXRv
ciBfX3RtcCA9ICp0aGlzOw0KICAgIHJldHVybiBfX3RtcCAtPSBfX2k7DQogIH0NCiAgZGlmZmVy
ZW5jZV90eXBlIG9wZXJhdG9yLShpdGVyYXRvciBfX3gpIGNvbnN0IHsNCiAgICByZXR1cm4gX19X
T1JEX0JJVCAqIChfTV9wIC0gX194Ll9NX3ApICsgX01fb2Zmc2V0IC0gX194Ll9NX29mZnNldDsN
CiAgfQ0KICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19pKSB7IHJldHVy
biAqKCp0aGlzICsgX19pKTsgfQ0KICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIF9f
eCkgY29uc3Qgew0KICAgIHJldHVybiBfTV9wID09IF9feC5fTV9wICYmIF9NX29mZnNldCA9PSBf
X3guX01fb2Zmc2V0Ow0KICB9DQogIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgX194
KSBjb25zdCB7DQogICAgcmV0dXJuIF9NX3AgIT0gX194Ll9NX3AgfHwgX01fb2Zmc2V0ICE9IF9f
eC5fTV9vZmZzZXQ7DQogIH0NCiAgYm9vbCBvcGVyYXRvcjwoaXRlcmF0b3IgX194KSBjb25zdCB7
DQogICAgcmV0dXJuIF9NX3AgPCBfX3guX01fcCB8fCAoX01fcCA9PSBfX3guX01fcCAmJiBfTV9v
ZmZzZXQgPCBfX3guX01fb2Zmc2V0KTsNCiAgfQ0KfTsNCg0Kc3RydWN0IF9CaXRfY29uc3RfaXRl
cmF0b3INCiAgOiBwdWJsaWMgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcjxib29sLCBwdHJkaWZmX3Q+
DQp7DQogIHR5cGVkZWYgYm9vbCAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOw0KICB0eXBlZGVm
IGJvb2wgICAgICAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZTsNCiAgdHlwZWRlZiBjb25zdCBi
b29sKiAgICAgICAgICBwb2ludGVyOw0KICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgIGNv
bnN0X2l0ZXJhdG9yOw0KDQogIHVuc2lnbmVkIGludCogX01fcDsNCiAgdW5zaWduZWQgaW50IF9N
X29mZnNldDsNCiAgdm9pZCBidW1wX3VwKCkgew0KICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfX1dP
UkRfQklUIC0gMSkgew0KICAgICAgX01fb2Zmc2V0ID0gMDsNCiAgICAgICsrX01fcDsNCiAgICB9
DQogIH0NCiAgdm9pZCBidW1wX2Rvd24oKSB7DQogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsN
CiAgICAgIF9NX29mZnNldCA9IF9fV09SRF9CSVQgLSAxOw0KICAgICAgLS1fTV9wOw0KICAgIH0N
CiAgfQ0KDQogIF9CaXRfY29uc3RfaXRlcmF0b3IoKSA6IF9NX3AoMCksIF9NX29mZnNldCgwKSB7
fQ0KICBfQml0X2NvbnN0X2l0ZXJhdG9yKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQg
X195KSANCiAgICA6IF9NX3AoX194KSwgX01fb2Zmc2V0KF9feSkge30NCiAgX0JpdF9jb25zdF9p
dGVyYXRvcihjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gpIA0KICAgIDogX01fcChfX3guX01fcCks
IF9NX29mZnNldChfX3guX01fb2Zmc2V0KSB7fQ0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3Iq
KCkgY29uc3Qgew0KICAgIHJldHVybiBfQml0X3JlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZz
ZXQpOw0KICB9DQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgew0KICAgIGJ1bXBfdXAo
KTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKyhp
bnQpIHsNCiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0KICAgIGJ1bXBfdXAoKTsN
CiAgICByZXR1cm4gX190bXA7DQogIH0NCiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7
DQogICAgYnVtcF9kb3duKCk7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGNvbnN0X2l0ZXJh
dG9yIG9wZXJhdG9yLS0oaW50KSB7DQogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsN
CiAgICBidW1wX2Rvd24oKTsNCiAgICByZXR1cm4gX190bXA7DQogIH0NCiAgY29uc3RfaXRlcmF0
b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgew0KICAgIGRpZmZlcmVuY2VfdHlw
ZSBfX24gPSBfX2kgKyBfTV9vZmZzZXQ7DQogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOw0K
ICAgIF9fbiA9IF9fbiAlIF9fV09SRF9CSVQ7DQogICAgaWYgKF9fbiA8IDApIHsNCiAgICAgIF9N
X29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7DQogICAgICAtLV9NX3A7
DQogICAgfSBlbHNlDQogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247DQogICAg
cmV0dXJuICp0aGlzOw0KICB9DQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVu
Y2VfdHlwZSBfX2kpIHsNCiAgICAqdGhpcyArPSAtX19pOw0KICAgIHJldHVybiAqdGhpczsNCiAg
fQ0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3Qg
ew0KICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7DQogICAgcmV0dXJuIF9fdG1wICs9
IF9faTsNCiAgfQ0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9f
aSkgY29uc3Qgew0KICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7DQogICAgcmV0dXJu
IF9fdG1wIC09IF9faTsNCiAgfQ0KICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGNvbnN0X2l0
ZXJhdG9yIF9feCkgY29uc3Qgew0KICAgIHJldHVybiBfX1dPUkRfQklUICogKF9NX3AgLSBfX3gu
X01fcCkgKyBfTV9vZmZzZXQgLSBfX3guX01fb2Zmc2V0Ow0KICB9DQogIGNvbnN0X3JlZmVyZW5j
ZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsgDQogICAgcmV0dXJuICooKnRoaXMg
KyBfX2kpOyANCiAgfQ0KICBib29sIG9wZXJhdG9yPT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIF9f
eCkgY29uc3Qgew0KICAgIHJldHVybiBfTV9wID09IF9feC5fTV9wICYmIF9NX29mZnNldCA9PSBf
X3guX01fb2Zmc2V0Ow0KICB9DQogIGJvb2wgb3BlcmF0b3IhPShjb25zdCBjb25zdF9pdGVyYXRv
ciYgX194KSBjb25zdCB7DQogICAgcmV0dXJuIF9NX3AgIT0gX194Ll9NX3AgfHwgX01fb2Zmc2V0
ICE9IF9feC5fTV9vZmZzZXQ7DQogIH0NCiAgYm9vbCBvcGVyYXRvcjwoY29uc3RfaXRlcmF0b3Ig
X194KSBjb25zdCB7DQogICAgcmV0dXJuIF9NX3AgPCBfX3guX01fcCB8fCAoX01fcCA9PSBfX3gu
X01fcCAmJiBfTV9vZmZzZXQgPCBfX3guX01fb2Zmc2V0KTsNCiAgfQ0KfTsNCg0KIA0KIA0KDQoN
Cg0KIA0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX19pc19zdGF0aWM+DQpjbGFz
cyBfQnZlY3Rvcl9hbGxvY19iYXNlIHsNCnB1YmxpYzoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxs
b2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQ0KICAgICAgICAgIGFs
bG9jYXRvcl90eXBlOw0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0NCg0KICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0
IGFsbG9jYXRvcl90eXBlJiBfX2EpDQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9z
dGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30NCg0KcHJvdGVjdGVk
Og0KICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKSANCiAgICB7IHJldHVy
biBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09S
RF9CSVQpOyB9DQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsNCiAgICBpZiAoX01fc3RhcnQuX01f
cCkNCiAgICAgIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX01fc3RhcnQuX01fcCwgDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01f
c3RhcnQuX01fcCk7DQogIH0gIA0KDQogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQg
aW50LCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUgDQogICAgICAgICAgX01fZGF0YV9hbGxv
Y2F0b3I7DQogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7DQogIF9CaXRfaXRlcmF0b3IgX01fZmlu
aXNoOw0KICB1bnNpZ25lZCBpbnQqIF9NX2VuZF9vZl9zdG9yYWdlOw0KfTsNCg0KIA0KdGVtcGxh
dGUgPGNsYXNzIF9BbGxvY2F0b3I+DQpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvY2F0
b3IsIHRydWU+IHsNCnB1YmxpYzoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJv
b2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQ0KICAgICAgICAgIGFsbG9jYXRvcl90eXBl
Ow0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2Nh
dG9yX3R5cGUoKTsgfQ0KDQogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5
cGUmKQ0KICAgIDogX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDAp
IHt9DQoNCnByb3RlY3RlZDoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPHVuc2ln
bmVkIGludCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlDQogICAgICAgICAgX0FsbG9jX3R5cGU7
DQogICAgICAgICAgDQogIHVuc2lnbmVkIGludCogX01fYml0X2FsbG9jKHNpemVfdCBfX24pIA0K
ICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEp
L19fV09SRF9CSVQpOyB9DQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsNCiAgICBpZiAoX01fc3Rh
cnQuX01fcCkNCiAgICAgIF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0
Ll9NX3ApOw0KICB9ICANCg0KICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0Ow0KICBfQml0X2l0ZXJh
dG9yIF9NX2ZpbmlzaDsNCiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsNCn07ICAN
Cg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4NCmNsYXNzIF9CdmVjdG9yX2Jhc2UNCiAgOiBwdWJs
aWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+DQp7DQog
IHR5cGVkZWYgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4N
CiAgICAgICAgICBfQmFzZTsNCnB1YmxpYzoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxs
b2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7DQoNCiAgX0J2ZWN0b3JfYmFzZShjb25zdCBhbGxv
Y2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30NCiAgfl9CdmVjdG9yX2Jhc2UoKSB7IF9C
YXNlOjpfTV9kZWFsbG9jYXRlKCk7IH0NCn07DQoNCiMgMzQ4ICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2J2ZWN0b3IuaCIg
Mw0KDQoNCiANCiANCiANCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KICAgICAgICANCg0KICAgICAg
ICANCnRlbXBsYXRlPGNsYXNzIF9BbGxvYz4gY2xhc3MgdmVjdG9yPGJvb2wsX0FsbG9jPg0KICA6
IHB1YmxpYyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4NCg0KDQoNCg0Kew0KDQogIHR5cGVkZWYgX0J2
ZWN0b3JfYmFzZTxfQWxsb2M+IF9CYXNlOw0KDQoNCg0KcHVibGljOg0KICB0eXBlZGVmIGJvb2wg
dmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOw0KICB0eXBlZGVmIHB0cmRp
ZmZfdCBkaWZmZXJlbmNlX3R5cGU7IA0KICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5j
ZTsNCiAgdHlwZWRlZiBib29sIGNvbnN0X3JlZmVyZW5jZTsNCiAgdHlwZWRlZiBfQml0X3JlZmVy
ZW5jZSogcG9pbnRlcjsNCiAgdHlwZWRlZiBjb25zdCBib29sKiBjb25zdF9wb2ludGVyOw0KDQog
IHR5cGVkZWYgX0JpdF9pdGVyYXRvciAgICAgICAgICAgICAgICBpdGVyYXRvcjsNCiAgdHlwZWRl
ZiBfQml0X2NvbnN0X2l0ZXJhdG9yICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOw0KDQoNCiAgdHlw
ZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yOw0KICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0
b3I7DQoNCg0KDQoNCg0KDQoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5
cGUgYWxsb2NhdG9yX3R5cGU7DQogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25z
dCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9DQoNCnByb3RlY3RlZDoNCg0KDQoN
Cg0KDQoNCg0KDQpwcm90ZWN0ZWQ6DQogIHZvaWQgX01faW5pdGlhbGl6ZShzaXplX3R5cGUgX19u
KSB7DQogICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsNCiAgICBfTV9l
bmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsN
CiAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7DQogICAgX01fZmluaXNoID0gX01fc3Rh
cnQgKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsNCiAgfQ0KICB2b2lkIF9NX2luc2VydF9hdXgoaXRl
cmF0b3IgX19wb3NpdGlvbiwgYm9vbCBfX3gpIHsNCiAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0g
X01fZW5kX29mX3N0b3JhZ2UpIHsNCiAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01f
ZmluaXNoLCBfTV9maW5pc2ggKyAxKTsNCiAgICAgICpfX3Bvc2l0aW9uID0gX194Ow0KICAgICAg
KytfTV9maW5pc2g7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgc2l6ZV90eXBlIF9fbGVuID0g
c2l6ZSgpID8gMiAqIHNpemUoKSA6IF9fV09SRF9CSVQ7DQogICAgICB1bnNpZ25lZCBpbnQqIF9f
cSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7DQogICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2lu
KCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOw0KICAgICAgKl9faSsrID0gX194Ow0K
ICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsNCiAgICAgIF9N
X2RlYWxsb2NhdGUoKTsNCiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsg
X19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7DQogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9f
cSwgMCk7DQogICAgfQ0KICB9DQoNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
DQogIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVy
YXRvcl90YWcpIHsNCiAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKCk7DQogICAgX01fZmluaXNoID0g
aXRlcmF0b3IoKTsNCiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IDA7DQogICAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSANCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7DQog
IH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgdm9pZCBfTV9pbml0
aWFsaXplX3JhbmdlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBf
X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykg
ew0KICAgIHNpemVfdHlwZSBfX24gPSAwOw0KICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg
X19uKTsNCiAgICBfTV9pbml0aWFsaXplKF9fbik7DQogICAgY29weShfX2ZpcnN0LCBfX2xhc3Qs
IF9NX3N0YXJ0KTsNCiAgfQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAg
dm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3MsDQogICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7DQogICAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7DQogICAgICBfX3BvcyA9IGluc2VydChfX3Bvcywg
Kl9fZmlyc3QpOw0KICAgICAgKytfX3BvczsNCiAgICB9DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19w
b3NpdGlvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2Fy
ZF9pdGVyYXRvcl90YWcpIHsNCiAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsNCiAgICAgIHNp
emVfdHlwZSBfX24gPSAwOw0KICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOw0K
ICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7DQogICAgICAgIGNvcHlfYmFj
a3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24p
KTsNCiAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOw0KICAgICAgICBf
TV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7DQogICAgICB9DQogICAgICBlbHNlIHsN
CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsNCiAg
ICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOw0KICAgICAgICBp
dGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkp
Ow0KICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsNCiAgICAgICAgX01f
ZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsNCiAgICAgICAgX01fZGVhbGxv
Y2F0ZSgpOw0KICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09S
RF9CSVQgLSAxKS9fX1dPUkRfQklUOw0KICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwg
MCk7DQogICAgICB9DQogICAgfQ0KICB9ICAgICAgDQoNCg0KDQpwdWJsaWM6DQogIGl0ZXJhdG9y
IGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7IH0NCiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBfTV9zdGFydDsgfQ0KICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9m
aW5pc2g7IH0NCiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNo
OyB9DQoNCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJh
dG9yKGVuZCgpKTsgfQ0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsg
DQogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyANCiAgfQ0KICByZXZl
cnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9
DQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgDQogICAgcmV0dXJuIGNv
bnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IA0KICB9DQoNCiAgc2l6ZV90eXBlIHNpemUo
KSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQ0KICBzaXplX3R5
cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9DQogIHNpemVfdHlw
ZSBjYXBhY2l0eSgpIGNvbnN0IHsNCiAgICByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9y
KF9NX2VuZF9vZl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOw0KICB9DQogIGJvb2wgZW1wdHkoKSBj
b25zdCB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9DQogIHJlZmVyZW5jZSBvcGVyYXRvcltd
KHNpemVfdHlwZSBfX24pIHsNCiAgICByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBl
KF9fbikpOw0KICB9DQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24p
IGNvbnN0IHsNCiAgICByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOw0K
ICB9DQoNCiAgZXhwbGljaXQgdmVjdG9yIChjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxs
b2NhdG9yX3R5cGUoKSkNCiAgICA6IF9CYXNlKF9fYSkge30NCg0KICB2ZWN0b3IgKHNpemVfdHlw
ZSBfX24sIGJvb2wgX192YWx1ZSwNCiAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf
X2EgPSBhbGxvY2F0b3JfdHlwZSgpKQ0KICAgIDogX0Jhc2UoX19hKQ0KICB7DQogICAgX01faW5p
dGlhbGl6ZShfX24pOw0KICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2Us
IF9fdmFsdWUgPyB+MCA6IDApOw0KICB9DQoNCiAgZXhwbGljaXQgdmVjdG9yIChzaXplX3R5cGUg
X19uKQ0KICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSkNCiAgew0KICAgIF9NX2luaXRpYWxp
emUoX19uKTsNCiAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCAwKTsN
CiAgfQ0KDQogIHZlY3RvciAoY29uc3QgdmVjdG9yICYgX194KSA6IF9CYXNlKF9feC5nZXRfYWxs
b2NhdG9yKCkpIHsNCiAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOw0KICAgIGNvcHkoX194
LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpOw0KICB9DQoNCg0KICAgDQogIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgdmVjdG9yIChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkNCiAgICA6IF9CYXNlKF9fYSkNCiAgew0KICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0lu
dGVncmFsOw0KICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50
ZWdyYWwoKSk7DQogIH0NCiAgICANCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPg0KICB2b2lk
IF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1
ZV90eXBlKSB7DQogICAgX01faW5pdGlhbGl6ZShfX24pOw0KICAgIGZpbGwoX01fc3RhcnQuX01f
cCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7DQogIH0NCiAgICANCiAgdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2go
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7DQogICAgX01faW5pdGlhbGl6ZV9y
YW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOw0K
ICB9DQojIDU4NyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0bF9idmVjdG9yLmgiIDMNCg0KDQogIH52ZWN0b3IgKCkgeyB9DQoN
CiAgdmVjdG9yICYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvciAmIF9feCkgew0KICAgIGlmICgmX194
ID09IHRoaXMpIHJldHVybiAqdGhpczsNCiAgICBpZiAoX194LnNpemUoKSA+IGNhcGFjaXR5KCkp
IHsNCiAgICAgIF9NX2RlYWxsb2NhdGUoKTsNCiAgICAgIF9NX2luaXRpYWxpemUoX194LnNpemUo
KSk7DQogICAgfQ0KICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7DQog
ICAgX01fZmluaXNoID0gYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX3guc2l6ZSgpKTsNCiAg
ICByZXR1cm4gKnRoaXM7DQogIH0NCg0KICAgDQogICANCiAgIA0KICAgDQoNCiAgdm9pZCBhc3Np
Z24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsNCiAgICBpZiAoX19uID4gc2l6ZSgpKSB7DQogICAg
ICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOw0K
ICAgICAgaW5zZXJ0KGVuZCgpLCBfX24gLSBzaXplKCksIF9feCk7DQogICAgfQ0KICAgIGVsc2Ug
ew0KICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbiwgZW5kKCkpOw0KICAgICAgZmlsbChfTV9zdGFy
dC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsNCiAgICB9DQogIH0NCg0K
DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICB2b2lkIGFzc2lnbihfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsNCiAgICB0eXBlZGVm
IHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3Jh
bDsNCiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7
DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+DQogIHZvaWQgX01fYXNzaWduX2Rp
c3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQ0KICAgIHsg
YXNzaWduKChzaXplX3QpIF9fbiwgKGJvb2wpIF9fdmFsKTsgfQ0KDQogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyPg0KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUpDQogICAgeyBfTV9hc3NpZ25fYXV4
KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7IH0NCg0K
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogIHZvaWQgX01fYXNzaWduX2F1eChf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAg
ICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsNCiAgICBpdGVyYXRvciBfX2N1ciA9IGJl
Z2luKCk7DQogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsg
KytfX2N1ciwgKytfX2ZpcnN0KQ0KICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7DQogICAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KQ0KICAgICAgZXJhc2UoX19jdXIsIGVuZCgpKTsNCiAgICBlbHNlDQog
ICAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7DQogIH0NCg0KICB0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRl
cmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAg
ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgew0KICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7DQog
ICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7DQogICAgaWYgKF9fbGVuIDwgc2l6
ZSgpKQ0KICAgICAgZXJhc2UoY29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7
DQogICAgZWxzZSB7DQogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsNCiAg
ICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7DQogICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBi
ZWdpbigpKTsNCiAgICAgIGluc2VydChlbmQoKSwgX19taWQsIF9fbGFzdCk7DQogICAgfQ0KICB9
ICAgIA0KDQoNCg0KICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fbikgew0KICAgIGlmIChjYXBh
Y2l0eSgpIDwgX19uKSB7DQogICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhf
X24pOw0KICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRlcmF0b3IoX19x
LCAwKSk7DQogICAgICBfTV9kZWFsbG9jYXRlKCk7DQogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9y
KF9fcSwgMCk7DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfX1dPUkRf
QklUIC0gMSkvX19XT1JEX0JJVDsNCiAgICB9DQogIH0NCg0KICByZWZlcmVuY2UgZnJvbnQoKSB7
IHJldHVybiAqYmVnaW4oKTsgfQ0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJl
dHVybiAqYmVnaW4oKTsgfQ0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAx
KTsgfQ0KICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkgLSAx
KTsgfQ0KICB2b2lkIHB1c2hfYmFjayhib29sIF9feCkgew0KICAgIGlmIChfTV9maW5pc2guX01f
cCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkNCiAgICAgICpfTV9maW5pc2grKyA9IF9feDsNCiAgICBl
bHNlDQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOw0KICB9DQogIHZvaWQgc3dhcCh2
ZWN0b3IgJiBfX3gpIHsNCiAgICAgOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOw0KICAg
ICA6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsNCiAgICAgOjpzd2FwKF9NX2VuZF9v
Zl9zdG9yYWdlLCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOw0KICB9DQogIGl0ZXJhdG9yIGluc2Vy
dChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJvb2woKSkgew0KICAgIGRpZmZlcmVu
Y2VfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsNCiAgICBpZiAoX01fZmluaXNoLl9N
X3AgIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkNCiAgICAgICpf
TV9maW5pc2grKyA9IF9feDsNCiAgICBlbHNlDQogICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRp
b24sIF9feCk7DQogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247DQogIH0NCg0KDQogICANCiAgdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bv
c2l0aW9uLA0KICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QpIHsNCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0
ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsNCiAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19w
b3NpdGlvbiwgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7DQogIH0NCg0KICB0ZW1wbGF0
ZSA8Y2xhc3MgX0ludGVnZXI+DQogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9f
cG9zLCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgX190cnVlX3R5cGUpIHsNCiAgICBpbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9fbiwgKGJv
b2wpIF9feCk7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogIHZv
aWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgew0KICAgIF9NX2luc2VydF9y
YW5nZShfX3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0
ICkgKTsNCiAgfQ0KIyA3NjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYnZlY3Rvci5oIiAzDQoNCiAgDQogIHZvaWQgaW5z
ZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGJvb2wgX194KSB7DQogICAg
aWYgKF9fbiA9PSAwKSByZXR1cm47DQogICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19u
KSB7DQogICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVuZCgpLCBfTV9maW5pc2ggKyBk
aWZmZXJlbmNlX3R5cGUoX19uKSk7DQogICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24g
KyBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX194KTsNCiAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJl
bmNlX3R5cGUoX19uKTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICBzaXplX3R5cGUgX19sZW4g
PSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOw0KICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBf
TV9iaXRfYWxsb2MoX19sZW4pOw0KICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBf
X3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsNCiAgICAgIGZpbGxfbihfX2ksIF9fbiwgX194
KTsNCiAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSArIGRpZmZl
cmVuY2VfdHlwZShfX24pKTsNCiAgICAgIF9NX2RlYWxsb2NhdGUoKTsNCiAgICAgIF9NX2VuZF9v
Zl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7DQog
ICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7DQogICAgfQ0KICB9DQoNCiAgdm9pZCBw
b3BfYmFjaygpIHsgLS1fTV9maW5pc2g7IH0NCiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19w
b3NpdGlvbikgew0KICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkNCiAgICAgIGNvcHko
X19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsNCiAgICAgIC0tX01fZmluaXNoOw0K
ICAgIHJldHVybiBfX3Bvc2l0aW9uOw0KICB9DQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9f
Zmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgew0KICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19sYXN0LCBl
bmQoKSwgX19maXJzdCk7DQogICAgcmV0dXJuIF9fZmlyc3Q7DQogIH0NCiAgdm9pZCByZXNpemUo
c2l6ZV90eXBlIF9fbmV3X3NpemUsIGJvb2wgX194ID0gYm9vbCgpKSB7DQogICAgaWYgKF9fbmV3
X3NpemUgPCBzaXplKCkpIA0KICAgICAgZXJhc2UoYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShf
X25ld19zaXplKSwgZW5kKCkpOw0KICAgIGVsc2UNCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdf
c2l6ZSAtIHNpemUoKSwgX194KTsNCiAgfQ0KICB2b2lkIGNsZWFyKCkgeyBlcmFzZShiZWdpbigp
LCBlbmQoKSk7IH0NCn07DQoNCg0KDQp0eXBlZGVmIHZlY3Rvcjxib29sLCBhbGxvYz4gYml0X3Zl
Y3RvcjsNCg0KIyA4MjIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfYnZlY3Rvci5oIiAzDQoNCg0KDQoNCg0KDQoNCg0KDQoN
CiAgDQoNCg0KDQogDQogDQogDQojIDM1ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45
NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdmVjdG9yIiAyIDMNCg0KDQoNCg0KIA0KIA0K
IA0KIyAyICJtYWluLmN4eCIgMg0KDQojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8y
Ljk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMSAzDQogDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQojIDEg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAz
DQojIDM0MiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRl
Zi5oIiAzDQoNCiMgMzIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMiAzDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAN
CiANCiANCiMgMyAibWFpbi5jeHgiIDINCg0KIyAxICJmb3MuaHh4IiAxDQoNCg0KDQoNCiMgMSAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3N0cmluZyIgMSAzDQogDQoNCg0KDQoNCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp
bnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAxIDMN
CiANCiANCg0KIA0KIA0KIA0KIA0KIA0KDQogDQogDQogDQogDQoNCiANCiANCiANCg0KIA0KIA0K
IA0KIA0KIA0KDQogDQogDQoNCg0KDQoNCg0KI3ByYWdtYSBpbnRlcmZhY2UNCg0KDQojIDEgIi91
c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9jc3RkZGVmIiAxIDMNCiANCiANCg0KDQoNCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp
bnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMNCiMgMzQyICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMNCg0KIyA2ICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0ZGRl
ZiIgMiAzDQoNCg0KIyAzNSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMNCg0KIyAxICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rk
L3N0cmFpdHMuaCIgMSAzDQogDQogDQoNCiANCiANCiANCiANCiANCg0KIA0KIA0KIA0KIA0KDQog
DQogDQogDQoNCiANCiANCiANCiANCiANCg0KIA0KIA0KDQoNCg0KDQoNCiANCiNwcmFnbWEgaW50
ZXJmYWNlICJzdGQvc3RyYWl0cy5oIg0KDQoNCg0KDQpleHRlcm4gIkMrKyIgew0KdGVtcGxhdGUg
PGNsYXNzIGNoYXJUPg0Kc3RydWN0IHN0cmluZ19jaGFyX3RyYWl0cyB7DQogIHR5cGVkZWYgY2hh
clQgY2hhcl90eXBlOyAgDQoNCiAgIA0KDQogIHN0YXRpYyB2b2lkIGFzc2lnbiAoY2hhcl90eXBl
JiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikNCiAgICB7IGMxID0gYzI7IH0NCiAgc3RhdGljIGJv
b2wgZXEgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpDQogICAgeyBy
ZXR1cm4gKGMxID09IGMyKTsgfQ0KICBzdGF0aWMgYm9vbCBuZSAoY29uc3QgY2hhcl90eXBlJiBj
MSwgY29uc3QgY2hhcl90eXBlJiBjMikNCiAgICB7IHJldHVybiAhKGMxID09IGMyKTsgfQ0KICBz
dGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikN
CiAgICB7IHJldHVybiAoYzEgPCBjMik7IH0NCiAgc3RhdGljIGNoYXJfdHlwZSBlb3MgKCkgeyBy
ZXR1cm4gY2hhcl90eXBlKCk7IH0gIA0KICBzdGF0aWMgYm9vbCBpc19kZWwoY2hhcl90eXBlIGEp
IHsgcmV0dXJuIDA7IH0NCiAgIA0KICANCiAgIA0KDQogIHN0YXRpYyBpbnQgY29tcGFyZSAoY29u
c3QgY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pDQogICAgew0K
ICAgICAgc2l6ZV90IGk7DQogICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQ0KCWlmIChuZSAo
czFbaV0sIHMyW2ldKSkNCgkgIHJldHVybiBsdCAoczFbaV0sIHMyW2ldKSA/IC0xIDogMTsNCg0K
ICAgICAgcmV0dXJuIDA7DQogICAgfQ0KICAgIA0KICBzdGF0aWMgc2l6ZV90IGxlbmd0aCAoY29u
c3QgY2hhcl90eXBlKiBzKQ0KICAgIHsNCiAgICAgIHNpemVfdCBsID0gMDsNCiAgICAgIHdoaWxl
IChuZSAoKnMrKywgZW9zICgpKSkNCgkrK2w7DQogICAgICByZXR1cm4gbDsNCiAgICB9DQoNCiAg
c3RhdGljIGNoYXJfdHlwZSogY29weSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBz
Miwgc2l6ZV90IG4pDQogICAgew0KICAgICAgZm9yICg7IG4tLTsgKQ0KCWFzc2lnbiAoczFbbl0s
IHMyW25dKTsNCiAgICAgIHJldHVybiBzMTsNCiAgICB9DQoNCiAgc3RhdGljIGNoYXJfdHlwZSog
bW92ZSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pDQogICAg
ew0KICAgICAgY2hhcl90eXBlIGFbbl07DQogICAgICBzaXplX3QgaTsNCiAgICAgIGZvciAoaSA9
IDA7IGkgPCBuOyArK2kpDQoJYXNzaWduIChhW2ldLCBzMltpXSk7DQogICAgICBmb3IgKGkgPSAw
OyBpIDwgbjsgKytpKQ0KCWFzc2lnbiAoczFbaV0sIGFbaV0pOw0KICAgICAgcmV0dXJuIHMxOw0K
ICAgIH0NCg0KICBzdGF0aWMgY2hhcl90eXBlKiBzZXQgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNo
YXJfdHlwZSYgYywgc2l6ZV90IG4pDQogICAgew0KICAgICAgZm9yICg7IG4tLTsgKQ0KCWFzc2ln
biAoczFbbl0sIGMpOw0KICAgICAgcmV0dXJuIHMxOw0KICAgIH0NCn07DQoNCmNsYXNzIGlzdHJl
YW07DQpjbGFzcyBvc3RyZWFtOw0KIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45
NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY2N0eXBlIiAxIDMNCiANCiANCg0KDQoNCiMg
MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgeyANCg0KDQogDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KZW51bQ0Kew0KICBfSVN1cHBlciA9ICgoIDAgKSA8IDgg
PyAoKDEgPDwgKCAwICkpIDw8IDgpIDogKCgxIDw8ICggMCApKSA+PiA4KSkgLAkgDQogIF9JU2xv
d2VyID0gKCggMSApIDwgOCA/ICgoMSA8PCAoIDEgKSkgPDwgOCkgOiAoKDEgPDwgKCAxICkpID4+
IDgpKSAsCSANCiAgX0lTYWxwaGEgPSAoKCAyICkgPCA4ID8gKCgxIDw8ICggMiApKSA8PCA4KSA6
ICgoMSA8PCAoIDIgKSkgPj4gOCkpICwJIA0KICBfSVNkaWdpdCA9ICgoIDMgKSA8IDggPyAoKDEg
PDwgKCAzICkpIDw8IDgpIDogKCgxIDw8ICggMyApKSA+PiA4KSkgLAkgDQogIF9JU3hkaWdpdCA9
ICgoIDQgKSA8IDggPyAoKDEgPDwgKCA0ICkpIDw8IDgpIDogKCgxIDw8ICggNCApKSA+PiA4KSkg
LAkgDQogIF9JU3NwYWNlID0gKCggNSApIDwgOCA/ICgoMSA8PCAoIDUgKSkgPDwgOCkgOiAoKDEg
PDwgKCA1ICkpID4+IDgpKSAsCSANCiAgX0lTcHJpbnQgPSAoKCA2ICkgPCA4ID8gKCgxIDw8ICgg
NiApKSA8PCA4KSA6ICgoMSA8PCAoIDYgKSkgPj4gOCkpICwJIA0KICBfSVNncmFwaCA9ICgoIDcg
KSA8IDggPyAoKDEgPDwgKCA3ICkpIDw8IDgpIDogKCgxIDw8ICggNyApKSA+PiA4KSkgLAkgDQog
IF9JU2JsYW5rID0gKCggOCApIDwgOCA/ICgoMSA8PCAoIDggKSkgPDwgOCkgOiAoKDEgPDwgKCA4
ICkpID4+IDgpKSAsCSANCiAgX0lTY250cmwgPSAoKCA5ICkgPCA4ID8gKCgxIDw8ICggOSApKSA8
PCA4KSA6ICgoMSA8PCAoIDkgKSkgPj4gOCkpICwJIA0KICBfSVNwdW5jdCA9ICgoIDEwICkgPCA4
ID8gKCgxIDw8ICggMTAgKSkgPDwgOCkgOiAoKDEgPDwgKCAxMCApKSA+PiA4KSkgLAkgDQogIF9J
U2FsbnVtID0gKCggMTEgKSA8IDggPyAoKDEgPDwgKCAxMSApKSA8PCA4KSA6ICgoMSA8PCAoIDEx
ICkpID4+IDgpKSAJIA0KfTsNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCmV4dGVybiBfX2Nv
bnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwkgDQpleHRlcm4gX19jb25zdCBfX2lu
dDMyX3QgKl9fY3R5cGVfdG9sb3dlcjsgIA0KZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0
eXBlX3RvdXBwZXI7ICANCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCmV4dGVybiBpbnQgIGlz
YWxudW0gICAoaW50KSAgdGhyb3cgKCkgICA7DQpleHRlcm4gaW50ICBpc2FscGhhICAgKGludCkg
IHRocm93ICgpICAgOw0KZXh0ZXJuIGludCAgaXNjbnRybCAgIChpbnQpICB0aHJvdyAoKSAgIDsN
CmV4dGVybiBpbnQgIGlzZGlnaXQgICAoaW50KSAgdGhyb3cgKCkgICA7DQpleHRlcm4gaW50ICBp
c2xvd2VyICAgKGludCkgIHRocm93ICgpICAgOw0KZXh0ZXJuIGludCAgaXNncmFwaCAgIChpbnQp
ICB0aHJvdyAoKSAgIDsNCmV4dGVybiBpbnQgIGlzcHJpbnQgICAoaW50KSAgdGhyb3cgKCkgICA7
DQpleHRlcm4gaW50ICBpc3B1bmN0ICAgKGludCkgIHRocm93ICgpICAgOw0KZXh0ZXJuIGludCAg
aXNzcGFjZSAgIChpbnQpICB0aHJvdyAoKSAgIDsNCmV4dGVybiBpbnQgIGlzdXBwZXIgICAoaW50
KSAgdGhyb3cgKCkgICA7DQpleHRlcm4gaW50ICBpc3hkaWdpdCAgIChpbnQpICB0aHJvdyAoKSAg
IDsNCg0KDQoNCg0KDQoNCiANCmV4dGVybiBpbnQgdG9sb3dlciAgKGludCBfX2MpICB0aHJvdyAo
KSAgOw0KDQogDQpleHRlcm4gaW50IHRvdXBwZXIgIChpbnQgX19jKSAgdGhyb3cgKCkgIDsNCg0K
DQoNCg0KIA0KDQpleHRlcm4gaW50IGlzYXNjaWkgIChpbnQgX19jKSAgdGhyb3cgKCkgIDsNCg0K
IA0KDQpleHRlcm4gaW50IHRvYXNjaWkgIChpbnQgX19jKSAgdGhyb3cgKCkgIDsNCg0KDQoNCg0K
IA0KDQpleHRlcm4gaW50ICBfdG91cHBlciAgIChpbnQpICB0aHJvdyAoKSAgIDsNCmV4dGVybiBp
bnQgIF90b2xvd2VyICAgKGludCkgIHRocm93ICgpICAgOw0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQojIDE2NCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMNCg0KDQojIDE4
NiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyAy
NzMgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzDQoNCg0KfSANCg0KDQojIDYgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9jY3R5cGUi
IDIgMw0KDQoNCiMgMTA1ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAzDQoNCiMgMSAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdHJp
bmciIDEgMw0KIA0KIA0KDQoNCg0KDQoNCg0KIyA5NCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp
bnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdHJpbmciIDMNCg0KDQoNCiMg
MTA2ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAzDQoNCg0Kc3RydWN0IHN0cmluZ19jaGFyX3RyYWl0
cyA8Y2hhcj4gew0KICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOw0KDQogIHN0YXRpYyB2b2lkIGFz
c2lnbiAoY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikNCiAgICB7IGMxID0gYzI7
IH0NCiAgc3RhdGljIGJvb2wgZXEgKGNvbnN0IGNoYXJfdHlwZSAmIGMxLCBjb25zdCBjaGFyX3R5
cGUmIGMyKQ0KICAgIHsgcmV0dXJuIChjMSA9PSBjMik7IH0NCiAgc3RhdGljIGJvb2wgbmUgKGNv
bnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpDQogICAgeyByZXR1cm4gKGMx
ICE9IGMyKTsgfQ0KICBzdGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3Qg
Y2hhcl90eXBlJiBjMikNCiAgICB7IHJldHVybiAoYzEgPCBjMik7IH0NCiAgc3RhdGljIGNoYXJf
dHlwZSBlb3MgKCkgeyByZXR1cm4gMDsgfQ0KICBzdGF0aWMgYm9vbCBpc19kZWwoY2hhcl90eXBl
IGEpIHsgcmV0dXJuIChfX2N0eXBlX2JbKGludCkgKCAoIGEgKSApXSAmICh1bnNpZ25lZCBzaG9y
dCBpbnQpICAgX0lTc3BhY2UgKSAgOyB9DQoNCiAgc3RhdGljIGludCBjb21wYXJlIChjb25zdCBj
aGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikNCiAgICB7IHJldHVy
biBtZW1jbXAgKHMxLCBzMiwgbik7IH0NCiAgc3RhdGljIHNpemVfdCBsZW5ndGggKGNvbnN0IGNo
YXJfdHlwZSogcykNCiAgICB7IHJldHVybiBzdHJsZW4gKHMpOyB9DQogIHN0YXRpYyBjaGFyX3R5
cGUqIGNvcHkgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQ0K
ICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkgKHMxLCBzMiwgbik7IH0NCiAgc3RhdGlj
IGNoYXJfdHlwZSogbW92ZSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6
ZV90IG4pDQogICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbW1vdmUgKHMxLCBzMiwgbik7IH0N
CiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUm
IGMsIHNpemVfdCBuKQ0KICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1zZXQgKHMxLCBjLCBu
KTsgfQ0KfTsNCg0KIyAxNTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvc3RyYWl0cy5oIiAzDQoNCn0gIA0KDQojIDM2ICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RkL2Jhc3RyaW5nLmgiIDIgMw0KDQoNCiANCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2FsbG9jLmgiIDEgMw0KIA0K
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQojIDQwICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxs
b2MuaCIgMw0KDQoNCg0KDQogDQogDQogDQojIDM5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMw0K
DQoNCmV4dGVybiAiQysrIiB7DQpjbGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFtOw0KDQoNCg0K
DQoNCmV4dGVybiB2b2lkIF9fb3V0X29mX3JhbmdlIChjb25zdCBjaGFyICopOw0KZXh0ZXJuIHZv
aWQgX19sZW5ndGhfZXJyb3IgKGNvbnN0IGNoYXIgKik7DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMgPSBzdHJpbmdfY2hhcl90
cmFpdHM8Y2hhclQ+LA0KCSAgY2xhc3MgQWxsb2NhdG9yID0gYWxsb2MgPg0KY2xhc3MgYmFzaWNf
c3RyaW5nDQp7DQpwcml2YXRlOg0KICBzdHJ1Y3QgUmVwIHsNCiAgICBzaXplX3QgbGVuLCByZXMs
IHJlZjsNCiAgICBib29sIHNlbGZpc2g7DQoNCiAgICBjaGFyVCogZGF0YSAoKSB7IHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNoYXJUICo+KHRoaXMgKyAxKTsgfQ0KICAgIGNoYXJUJiBvcGVyYXRv
cltdIChzaXplX3QgcykgeyByZXR1cm4gZGF0YSAoKSBbc107IH0NCiAgICBjaGFyVCogZ3JhYiAo
KSB7IGlmIChzZWxmaXNoKSByZXR1cm4gY2xvbmUgKCk7ICsrcmVmOyByZXR1cm4gZGF0YSAoKTsg
fQ0KIyAxMDggIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMw0KDQogICAgdm9pZCByZWxlYXNlICgpIHsg
aWYgKC0tcmVmID09IDApIGRlbGV0ZSB0aGlzOyB9DQoNCg0KICAgIGlubGluZSBzdGF0aWMgdm9p
ZCAqIG9wZXJhdG9yIG5ldyAoc2l6ZV90LCBzaXplX3QpOw0KICAgIGlubGluZSBzdGF0aWMgdm9p
ZCBvcGVyYXRvciBkZWxldGUgKHZvaWQgKik7DQogICAgaW5saW5lIHN0YXRpYyBSZXAqIGNyZWF0
ZSAoc2l6ZV90KTsNCiAgICBjaGFyVCogY2xvbmUgKCk7DQoNCiAgICBpbmxpbmUgdm9pZCBjb3B5
IChzaXplX3QsIGNvbnN0IGNoYXJUICosIHNpemVfdCk7DQogICAgaW5saW5lIHZvaWQgbW92ZSAo
c2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOw0KICAgIGlubGluZSB2b2lkIHNldCAgKHNp
emVfdCwgY29uc3QgY2hhclQsICAgc2l6ZV90KTsNCg0KICAgIGlubGluZSBzdGF0aWMgYm9vbCBl
eGNlc3Nfc2xvcCAoc2l6ZV90LCBzaXplX3QpOw0KICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IGZy
b2Jfc2l6ZSAoc2l6ZV90KTsNCg0KICBwcml2YXRlOg0KICAgIFJlcCAmb3BlcmF0b3I9IChjb25z
dCBSZXAgJik7DQogIH07DQoNCnB1YmxpYzoNCiANCiAgdHlwZWRlZgkgICB0cmFpdHMJCXRyYWl0
c190eXBlOw0KICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0czo6Y2hhcl90eXBlCXZhbHVlX3R5cGU7
DQogIHR5cGVkZWYJICAgQWxsb2NhdG9yCQlhbGxvY2F0b3JfdHlwZTsNCg0KICB0eXBlZGVmIHNp
emVfdCBzaXplX3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsNCiAg
dHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNlOw0KICB0eXBlZGVmIGNvbnN0IGNoYXJUJiBjb25zdF9y
ZWZlcmVuY2U7DQogIHR5cGVkZWYgY2hhclQqIHBvaW50ZXI7DQogIHR5cGVkZWYgY29uc3QgY2hh
clQqIGNvbnN0X3BvaW50ZXI7DQogIHR5cGVkZWYgcG9pbnRlciBpdGVyYXRvcjsNCiAgdHlwZWRl
ZiBjb25zdF9wb2ludGVyIGNvbnN0X2l0ZXJhdG9yOw0KICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVy
YXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsNCiAgdHlwZWRlZiA6OnJldmVyc2VfaXRl
cmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7DQogIHN0YXRpYyBj
b25zdCBzaXplX3R5cGUgbnBvcyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpOw0KDQpwcml2
YXRlOg0KICBSZXAgKnJlcCAoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PFJlcCAq
PihkYXQpIC0gMTsgfQ0KICB2b2lkIHJlcHVwIChSZXAgKnApIHsgcmVwICgpLT5yZWxlYXNlICgp
OyBkYXQgPSBwLT5kYXRhICgpOyB9DQoNCnB1YmxpYzoNCiAgY29uc3QgY2hhclQqIGRhdGEgKCkg
Y29uc3QNCiAgICB7IHJldHVybiByZXAgKCktPmRhdGEoKTsgfQ0KICBzaXplX3R5cGUgbGVuZ3Ro
ICgpIGNvbnN0DQogICAgeyByZXR1cm4gcmVwICgpLT5sZW47IH0NCiAgc2l6ZV90eXBlIHNpemUg
KCkgY29uc3QNCiAgICB7IHJldHVybiByZXAgKCktPmxlbjsgfQ0KICBzaXplX3R5cGUgY2FwYWNp
dHkgKCkgY29uc3QNCiAgICB7IHJldHVybiByZXAgKCktPnJlczsgfQ0KICBzaXplX3R5cGUgbWF4
X3NpemUgKCkgY29uc3QNCiAgICB7IHJldHVybiAobnBvcyAtIDEpL3NpemVvZiAoY2hhclQpOyB9
CQkgDQogIGJvb2wgZW1wdHkgKCkgY29uc3QNCiAgICB7IHJldHVybiBzaXplICgpID09IDA7IH0N
Cg0KIA0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yPSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIp
DQogICAgew0KICAgICAgaWYgKCZzdHIgIT0gdGhpcykgeyByZXAgKCktPnJlbGVhc2UgKCk7IGRh
dCA9IHN0ci5yZXAgKCktPmdyYWIgKCk7IH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoN
CiAgZXhwbGljaXQgYmFzaWNfc3RyaW5nICgpOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IH0NCiAg
YmFzaWNfc3RyaW5nIChjb25zdCBiYXNpY19zdHJpbmcmIF9zdHIpOiBkYXQgKF9zdHIucmVwICgp
LT5ncmFiICgpKSB7IH0NCiAgYmFzaWNfc3RyaW5nIChjb25zdCBiYXNpY19zdHJpbmcmIF9zdHIs
IHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuID0gbnBvcykNCiAgICA6IGRhdCAobmlsUmVwLmdy
YWIgKCkpIHsgYXNzaWduIChfc3RyLCBwb3MsIG4pOyB9DQogIGJhc2ljX3N0cmluZyAoY29uc3Qg
Y2hhclQqIHMsIHNpemVfdHlwZSBuKQ0KICAgIDogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3Np
Z24gKHMsIG4pOyB9DQogIGJhc2ljX3N0cmluZyAoY29uc3QgY2hhclQqIHMpDQogICAgOiBkYXQg
KG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAocyk7IH0NCiAgYmFzaWNfc3RyaW5nIChzaXplX3R5
cGUgbiwgY2hhclQgYykNCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChuLCBj
KTsgfQ0KDQogIHRlbXBsYXRlPGNsYXNzIElucHV0SXRlcmF0b3I+DQogICAgYmFzaWNfc3RyaW5n
KElucHV0SXRlcmF0b3IgX19iZWdpbiwgSW5wdXRJdGVyYXRvciBfX2VuZCkNCg0KDQoNCiAgICA6
IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChfX2JlZ2luLCBfX2VuZCk7IH0NCg0KICB+
YmFzaWNfc3RyaW5nICgpDQogICAgeyByZXAgKCktPnJlbGVhc2UgKCk7IH0NCg0KICB2b2lkIHN3
YXAgKGJhc2ljX3N0cmluZyAmcykgeyBjaGFyVCAqZCA9IGRhdDsgZGF0ID0gcy5kYXQ7IHMuZGF0
ID0gZDsgfQ0KDQogIGJhc2ljX3N0cmluZyYgYXBwZW5kIChjb25zdCBiYXNpY19zdHJpbmcmIF9z
dHIsIHNpemVfdHlwZSBwb3MgPSAwLA0KCQkJc2l6ZV90eXBlIG4gPSBucG9zKQ0KICAgIHsgcmV0
dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgX3N0ciwgcG9zLCBuKTsgfQ0KICBiYXNpY19zdHJp
bmcmIGFwcGVuZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQ0KICAgIHsgcmV0dXJuIHJl
cGxhY2UgKGxlbmd0aCAoKSwgMCwgcywgbik7IH0NCiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKGNv
bnN0IGNoYXJUKiBzKQ0KICAgIHsgcmV0dXJuIGFwcGVuZCAocywgdHJhaXRzOjpsZW5ndGggKHMp
KTsgfQ0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpDQogICAg
eyByZXR1cm4gcmVwbGFjZSAobGVuZ3RoICgpLCAwLCBuLCBjKTsgfQ0KDQogIHRlbXBsYXRlPGNs
YXNzIElucHV0SXRlcmF0b3I+DQogICAgYmFzaWNfc3RyaW5nJiBhcHBlbmQoSW5wdXRJdGVyYXRv
ciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KQ0KDQoNCg0KICAgIHsgcmV0dXJuIHJlcGxhY2Ug
KGllbmQgKCksIGllbmQgKCksIGZpcnN0LCBsYXN0KTsgfQ0KDQogIGJhc2ljX3N0cmluZyYgYXNz
aWduIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsDQoJCQlzaXpl
X3R5cGUgbiA9IG5wb3MpDQogICAgeyByZXR1cm4gcmVwbGFjZSAoMCwgbnBvcywgc3RyLCBwb3Ms
IG4pOyB9DQogIGJhc2ljX3N0cmluZyYgYXNzaWduIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBl
IG4pDQogICAgeyByZXR1cm4gcmVwbGFjZSAoMCwgbnBvcywgcywgbik7IH0NCiAgYmFzaWNfc3Ry
aW5nJiBhc3NpZ24gKGNvbnN0IGNoYXJUKiBzKQ0KICAgIHsgcmV0dXJuIGFzc2lnbiAocywgdHJh
aXRzOjpsZW5ndGggKHMpKTsgfQ0KICBiYXNpY19zdHJpbmcmIGFzc2lnbiAoc2l6ZV90eXBlIG4s
IGNoYXJUIGMpDQogICAgeyByZXR1cm4gcmVwbGFjZSAoMCwgbnBvcywgbiwgYyk7IH0NCg0KICB0
ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPg0KICAgIGJhc2ljX3N0cmluZyYgYXNzaWduKElu
cHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCkNCg0KDQoNCiAgICB7IHJldHVy
biByZXBsYWNlIChpYmVnaW4gKCksIGllbmQgKCksIGZpcnN0LCBsYXN0KTsgfQ0KDQogIGJhc2lj
X3N0cmluZyYgb3BlcmF0b3I9IChjb25zdCBjaGFyVCogcykNCiAgICB7IHJldHVybiBhc3NpZ24g
KHMpOyB9DQogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9IChjaGFyVCBjKQ0KICAgIHsgcmV0dXJu
IGFzc2lnbiAoMSwgYyk7IH0NCg0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yKz0gKGNvbnN0IGJh
c2ljX3N0cmluZyYgcmhzKQ0KICAgIHsgcmV0dXJuIGFwcGVuZCAocmhzKTsgfQ0KICBiYXNpY19z
dHJpbmcmIG9wZXJhdG9yKz0gKGNvbnN0IGNoYXJUKiBzKQ0KICAgIHsgcmV0dXJuIGFwcGVuZCAo
cyk7IH0NCiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChjaGFyVCBjKQ0KICAgIHsgcmV0dXJu
IGFwcGVuZCAoMSwgYyk7IH0NCg0KICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6ZV90eXBlIHBv
czEsIGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLA0KCQkJc2l6ZV90eXBlIHBvczIgPSAwLCBzaXpl
X3R5cGUgbiA9IG5wb3MpDQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zMSwgMCwgc3RyLCBwb3My
LCBuKTsgfQ0KICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6ZV90eXBlIHBvcywgY29uc3QgY2hh
clQqIHMsIHNpemVfdHlwZSBuKQ0KICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvcywgMCwgcywgbik7
IH0NCiAgYmFzaWNfc3RyaW5nJiBpbnNlcnQgKHNpemVfdHlwZSBwb3MsIGNvbnN0IGNoYXJUKiBz
KQ0KICAgIHsgcmV0dXJuIGluc2VydCAocG9zLCBzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9DQog
IGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbiwgY2hhclQg
YykNCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIDAsIG4sIGMpOyB9DQogIGl0ZXJhdG9yIGlu
c2VydChpdGVyYXRvciBwLCBjaGFyVCBjKQ0KICAgIHsgc2l6ZV90eXBlIF9fbyA9IHAgLSBpYmVn
aW4gKCk7DQogICAgICBpbnNlcnQgKHAgLSBpYmVnaW4gKCksIDEsIGMpOyBzZWxmaXNoICgpOw0K
ICAgICAgcmV0dXJuIGliZWdpbiAoKSArIF9fbzsgfQ0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0
b3IgcCwgc2l6ZV90eXBlIG4sIGNoYXJUIGMpDQogICAgeyBzaXplX3R5cGUgX19vID0gcCAtIGli
ZWdpbiAoKTsNCiAgICAgIGluc2VydCAocCAtIGliZWdpbiAoKSwgbiwgYyk7IHNlbGZpc2ggKCk7
DQogICAgICByZXR1cm4gaWJlZ2luICgpICsgX19vOyB9DQoNCiAgdGVtcGxhdGU8Y2xhc3MgSW5w
dXRJdGVyYXRvcj4NCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBwLCBJbnB1dEl0ZXJhdG9yIGZp
cnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpDQoNCg0KDQogICAgeyByZXBsYWNlIChwLCBwLCBmaXJz
dCwgbGFzdCk7IH0NCg0KICBiYXNpY19zdHJpbmcmIGVyYXNlIChzaXplX3R5cGUgcG9zID0gMCwg
c2l6ZV90eXBlIG4gPSBucG9zKQ0KICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvcywgbiwgKHNpemVf
dHlwZSkwLCAoY2hhclQpMCk7IH0NCiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgcCkNCiAgICB7
IHNpemVfdHlwZSBfX28gPSBwIC0gYmVnaW4oKTsNCiAgICAgIHJlcGxhY2UgKF9fbywgMSwgKHNp
emVfdHlwZSkwLCAoY2hhclQpMCk7IHNlbGZpc2ggKCk7DQogICAgICByZXR1cm4gaWJlZ2luKCkg
KyBfX287IH0NCiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgZiwgaXRlcmF0b3IgbCkNCiAgICB7
IHNpemVfdHlwZSBfX28gPSBmIC0gaWJlZ2luKCk7DQogICAgICByZXBsYWNlIChfX28sIGwtZiwg
KHNpemVfdHlwZSkwLCAoY2hhclQpMCk7c2VsZmlzaCAoKTsNCiAgICAgIHJldHVybiBpYmVnaW4o
KSArIF9fbzsgfQ0KDQogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvczEsIHNp
emVfdHlwZSBuMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsDQoJCQkgc2l6ZV90eXBlIHBvczIg
PSAwLCBzaXplX3R5cGUgbjIgPSBucG9zKTsNCiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXpl
X3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzLA0KCQkJIHNpemVfdHlwZSBu
Mik7DQogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4x
LCBjb25zdCBjaGFyVCogcykNCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4xLCBzLCB0cmFp
dHM6Omxlbmd0aCAocykpOyB9DQogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBv
cywgc2l6ZV90eXBlIG4xLCBzaXplX3R5cGUgbjIsIGNoYXJUIGMpOw0KICBiYXNpY19zdHJpbmcm
IHJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQ0KICAgIHsgcmV0
dXJuIHJlcGxhY2UgKHBvcywgbiwgMSwgYyk7IH0NCiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChp
dGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyKQ0KICAgIHsg
cmV0dXJuIHJlcGxhY2UgKGkxIC0gaWJlZ2luICgpLCBpMiAtIGkxLCBzdHIpOyB9DQogIGJhc2lj
X3N0cmluZyYgcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBjb25zdCBjaGFyVCog
cywgc2l6ZV90eXBlIG4pDQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGky
IC0gaTEsIHMsIG4pOyB9DQogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0
ZXJhdG9yIGkyLCBjb25zdCBjaGFyVCogcykNCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGli
ZWdpbiAoKSwgaTIgLSBpMSwgcyk7IH0NCiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChpdGVyYXRv
ciBpMSwgaXRlcmF0b3IgaTIsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQ0KICAgIHsgcmV0dXJuIHJl
cGxhY2UgKGkxIC0gaWJlZ2luICgpLCBpMiAtIGkxLCBuLCBjKTsgfQ0KDQogIHRlbXBsYXRlPGNs
YXNzIElucHV0SXRlcmF0b3I+DQogICAgYmFzaWNfc3RyaW5nJiByZXBsYWNlKGl0ZXJhdG9yIGkx
LCBpdGVyYXRvciBpMiwNCgkJCSAgSW5wdXRJdGVyYXRvciBqMSwgSW5wdXRJdGVyYXRvciBqMik7
DQoNCg0KDQoNCg0KcHJpdmF0ZToNCiAgc3RhdGljIGNoYXJUIGVvcyAoKSB7IHJldHVybiB0cmFp
dHM6OmVvcyAoKTsgfQ0KICB2b2lkIHVuaXF1ZSAoKSB7IGlmIChyZXAgKCktPnJlZiA+IDEpIGFs
bG9jIChsZW5ndGggKCksIHRydWUpOyB9DQogIHZvaWQgc2VsZmlzaCAoKSB7IHVuaXF1ZSAoKTsg
cmVwICgpLT5zZWxmaXNoID0gdHJ1ZTsgfQ0KDQpwdWJsaWM6DQogIGNoYXJUIG9wZXJhdG9yW10g
KHNpemVfdHlwZSBwb3MpIGNvbnN0DQogICAgew0KICAgICAgaWYgKHBvcyA9PSBsZW5ndGggKCkp
DQoJcmV0dXJuIGVvcyAoKTsNCiAgICAgIHJldHVybiBkYXRhICgpW3Bvc107DQogICAgfQ0KDQog
IHJlZmVyZW5jZSBvcGVyYXRvcltdIChzaXplX3R5cGUgcG9zKQ0KICAgIHsgc2VsZmlzaCAoKTsg
cmV0dXJuICgqcmVwICgpKVtwb3NdOyB9DQoNCiAgcmVmZXJlbmNlIGF0IChzaXplX3R5cGUgcG9z
KQ0KICAgIHsNCiAgICAgIGRvIHsgaWYgKCBwb3MgPj0gbGVuZ3RoICgpICkgX19vdXRfb2ZfcmFu
Z2UgKCJwb3MgPj0gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsNCiAgICAgIHJldHVybiAoKnRo
aXMpW3Bvc107DQogICAgfQ0KICBjb25zdF9yZWZlcmVuY2UgYXQgKHNpemVfdHlwZSBwb3MpIGNv
bnN0DQogICAgew0KICAgICAgZG8geyBpZiAoIHBvcyA+PSBsZW5ndGggKCkgKSBfX291dF9vZl9y
YW5nZSAoInBvcyA+PSBsZW5ndGggKCkiKTsgfSB3aGlsZSAoMCkgOw0KICAgICAgcmV0dXJuIGRh
dGEgKClbcG9zXTsNCiAgICB9DQoNCnByaXZhdGU6DQogIHZvaWQgdGVybWluYXRlICgpIGNvbnN0
DQogICAgeyB0cmFpdHM6OmFzc2lnbiAoKCpyZXAgKCkpW2xlbmd0aCAoKV0sIGVvcyAoKSk7IH0N
Cg0KcHVibGljOg0KICBjb25zdCBjaGFyVCogY19zdHIgKCkgY29uc3QNCiAgICB7IGNvbnN0IGNo
YXJUKiBudWxsX3N0ciA9ICIiOyANCiAgICAgIGlmIChsZW5ndGggKCkgPT0gMCkgcmV0dXJuIG51
bGxfc3RyOyB0ZXJtaW5hdGUgKCk7IHJldHVybiBkYXRhICgpOyB9DQogIHZvaWQgcmVzaXplIChz
aXplX3R5cGUgbiwgY2hhclQgYyk7DQogIHZvaWQgcmVzaXplIChzaXplX3R5cGUgbikNCiAgICB7
IHJlc2l6ZSAobiwgZW9zICgpKTsgfQ0KICB2b2lkIHJlc2VydmUgKHNpemVfdHlwZSkgeyB9DQoN
CiAgc2l6ZV90eXBlIGNvcHkgKGNoYXJUKiBzLCBzaXplX3R5cGUgbiwgc2l6ZV90eXBlIHBvcyA9
IDApIGNvbnN0Ow0KDQogIHNpemVfdHlwZSBmaW5kIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwg
c2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0DQogICAgeyByZXR1cm4gZmluZCAoc3RyLmRhdGEoKSwg
cG9zLCBzdHIubGVuZ3RoKCkpOyB9DQogIHNpemVfdHlwZSBmaW5kIChjb25zdCBjaGFyVCogcywg
c2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0Ow0KICBzaXplX3R5cGUgZmluZCAoY29u
c3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdA0KICAgIHsgcmV0dXJuIGZpbmQg
KHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQ0KICBzaXplX3R5cGUgZmluZCAoY2hhclQg
Yywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0Ow0KDQogIHNpemVfdHlwZSByZmluZCAoY29uc3Qg
YmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdA0KICAgIHsgcmV0
dXJuIHJmaW5kIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0NCiAgc2l6ZV90eXBl
IHJmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0
Ow0KICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gbnBv
cykgY29uc3QNCiAgICB7IHJldHVybiByZmluZCAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykp
OyB9DQogIHNpemVfdHlwZSByZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNv
bnN0Ow0KDQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mIChjb25zdCBiYXNpY19zdHJpbmcmIHN0
ciwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0DQogICAgeyByZXR1cm4gZmluZF9maXJzdF9vZiAo
c3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9DQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0
X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0Ow0K
ICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3Mg
PSAwKSBjb25zdA0KICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfb2YgKHMsIHBvcywgdHJhaXRzOjps
ZW5ndGggKHMpKTsgfQ0KICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY2hhclQgYywgc2l6ZV90
eXBlIHBvcyA9IDApIGNvbnN0DQogICAgeyByZXR1cm4gZmluZCAoYywgcG9zKTsgfQ0KDQogIHNp
emVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUg
cG9zID0gbnBvcykgY29uc3QNCiAgICB7IHJldHVybiBmaW5kX2xhc3Rfb2YgKHN0ci5kYXRhKCks
IHBvcywgc3RyLmxlbmd0aCgpKTsgfQ0KICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjb25zdCBj
aGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0Ow0KICBzaXplX3R5cGUg
ZmluZF9sYXN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0
DQogICAgeyByZXR1cm4gZmluZF9sYXN0X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7
IH0NCiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IG5w
b3MpIGNvbnN0DQogICAgeyByZXR1cm4gcmZpbmQgKGMsIHBvcyk7IH0NCg0KICBzaXplX3R5cGUg
ZmluZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9z
ID0gMCkgY29uc3QNCiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X25vdF9vZiAoc3RyLmRhdGEoKSwg
cG9zLCBzdHIubGVuZ3RoKCkpOyB9DQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY29u
c3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsNCiAgc2l6ZV90
eXBlIGZpbmRfZmlyc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDAp
IGNvbnN0DQogICAgeyByZXR1cm4gZmluZF9maXJzdF9ub3Rfb2YgKHMsIHBvcywgdHJhaXRzOjps
ZW5ndGggKHMpKTsgfQ0KICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNoYXJUIGMsIHNp
emVfdHlwZSBwb3MgPSAwKSBjb25zdDsNCg0KICBzaXplX3R5cGUgZmluZF9sYXN0X25vdF9vZiAo
Y29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdA0KICAg
IHsgcmV0dXJuIGZpbmRfbGFzdF9ub3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgp
KTsgfQ0KICBzaXplX3R5cGUgZmluZF9sYXN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVf
dHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsNCiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rf
b2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QNCiAgICB7IHJl
dHVybiBmaW5kX2xhc3Rfbm90X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0NCiAg
c2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSBucG9z
KSBjb25zdDsNCg0KICBiYXNpY19zdHJpbmcgc3Vic3RyIChzaXplX3R5cGUgcG9zID0gMCwgc2l6
ZV90eXBlIG4gPSBucG9zKSBjb25zdA0KICAgIHsgcmV0dXJuIGJhc2ljX3N0cmluZyAoKnRoaXMs
IHBvcywgbik7IH0NCg0KICBpbnQgY29tcGFyZSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNp
emVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3MpIGNvbnN0Ow0KICAgDQogIGludCBj
b21wYXJlIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0
Ow0KICBpbnQgY29tcGFyZSAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25z
dA0KICAgIHsgcmV0dXJuIGNvbXBhcmUgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQ0K
DQogIGl0ZXJhdG9yIGJlZ2luICgpIHsgc2VsZmlzaCAoKTsgcmV0dXJuICYoKnRoaXMpWzBdOyB9
DQogIGl0ZXJhdG9yIGVuZCAoKSB7IHNlbGZpc2ggKCk7IHJldHVybiAmKCp0aGlzKVtsZW5ndGgg
KCldOyB9DQoNCnByaXZhdGU6DQogIGl0ZXJhdG9yIGliZWdpbiAoKSBjb25zdCB7IHJldHVybiAm
KCpyZXAgKCkpWzBdOyB9DQogIGl0ZXJhdG9yIGllbmQgKCkgY29uc3QgeyByZXR1cm4gJigqcmVw
ICgpKVtsZW5ndGggKCldOyB9DQoNCnB1YmxpYzoNCiAgY29uc3RfaXRlcmF0b3IgYmVnaW4gKCkg
Y29uc3QgeyByZXR1cm4gaWJlZ2luICgpOyB9DQogIGNvbnN0X2l0ZXJhdG9yIGVuZCAoKSBjb25z
dCB7IHJldHVybiBpZW5kICgpOyB9DQoNCiAgcmV2ZXJzZV9pdGVyYXRvciAgICAgICByYmVnaW4o
KSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yIChlbmQgKCkpOyB9DQogIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IgcmJlZ2luKCkgY29uc3QNCiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yIChlbmQgKCkpOyB9DQogIHJldmVyc2VfaXRlcmF0b3IgICAgICAgcmVuZCgpIHsgcmV0dXJu
IHJldmVyc2VfaXRlcmF0b3IgKGJlZ2luICgpKTsgfQ0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
IHJlbmQoKSBjb25zdA0KICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgKGJlZ2lu
ICgpKTsgfQ0KDQpwcml2YXRlOg0KICB2b2lkIGFsbG9jIChzaXplX3R5cGUgc2l6ZSwgYm9vbCBz
YXZlKTsNCiAgc3RhdGljIHNpemVfdHlwZSBfZmluZCAoY29uc3QgY2hhclQqIHB0ciwgY2hhclQg
Yywgc2l6ZV90eXBlIHhwb3MsIHNpemVfdHlwZSBsZW4pOw0KICBpbmxpbmUgYm9vbCBjaGVja19y
ZWFsbG9jIChzaXplX3R5cGUgcykgY29uc3Q7DQoNCiAgc3RhdGljIFJlcCBuaWxSZXA7DQogIGNo
YXJUICpkYXQ7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+IHRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yPg0KYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj46Og0KcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBJbnB1
dEl0ZXJhdG9yIGoxLCBJbnB1dEl0ZXJhdG9yIGoyKQ0KDQoNCg0KDQoNCnsNCiAgY29uc3Qgc2l6
ZV90eXBlIGxlbiA9IGxlbmd0aCAoKTsNCiAgc2l6ZV90eXBlIHBvcyA9IGkxIC0gaWJlZ2luICgp
Ow0KICBzaXplX3R5cGUgbjEgPSBpMiAtIGkxOw0KICBzaXplX3R5cGUgbjIgPSBqMiAtIGoxOw0K
DQogIGRvIHsgaWYgKCBwb3MgPiBsZW4gKSBfX291dF9vZl9yYW5nZSAoInBvcyA+IGxlbiIpOyB9
IHdoaWxlICgwKSA7DQogIGlmIChuMSA+IGxlbiAtIHBvcykNCiAgICBuMSA9IGxlbiAtIHBvczsN
CiAgZG8geyBpZiAoIGxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiApIF9fbGVuZ3RoX2Vycm9y
ICgibGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yIik7IH0gd2hpbGUgKDApIDsNCiAgc2l6ZV90
IG5ld2xlbiA9IGxlbiAtIG4xICsgbjI7DQoNCiAgaWYgKGNoZWNrX3JlYWxsb2MgKG5ld2xlbikp
DQogICAgew0KICAgICAgUmVwICpwID0gUmVwOjpjcmVhdGUgKG5ld2xlbik7DQogICAgICBwLT5j
b3B5ICgwLCBkYXRhICgpLCBwb3MpOw0KICAgICAgcC0+Y29weSAocG9zICsgbjIsIGRhdGEgKCkg
KyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7DQogICAgICBmb3IgKDsgajEgIT0gajI7ICsr
ajEsICsrcG9zKQ0KCXRyYWl0czo6YXNzaWduICgoKnApW3Bvc10sICpqMSk7DQogICAgICByZXB1
cCAocCk7DQogICAgfQ0KICBlbHNlDQogICAgew0KICAgICAgcmVwICgpLT5tb3ZlIChwb3MgKyBu
MiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsNCiAgICAgIGZvciAoOyBq
MSAhPSBqMjsgKytqMSwgKytwb3MpDQoJdHJhaXRzOjphc3NpZ24gKCgqcmVwICgpKVtwb3NdLCAq
ajEpOw0KICAgIH0NCiAgcmVwICgpLT5sZW4gPSBuZXdsZW47DQoNCiAgcmV0dXJuICp0aGlzOw0K
fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
Pg0KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPg0Kb3BlcmF0
b3IrIChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywN
CgkgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykN
CnsNCiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IF9zdHIgKGxocyk7
DQogIF9zdHIuYXBwZW5kIChyaHMpOw0KICByZXR1cm4gX3N0cjsNCn0NCg0KdGVtcGxhdGUgPGNs
YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4NCmlubGluZSBiYXNpY19z
dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4NCm9wZXJhdG9yKyAoY29uc3QgY2hhclQq
IGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMp
DQp7DQogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBfc3RyIChsaHMp
Ow0KICBfc3RyLmFwcGVuZCAocmhzKTsNCiAgcmV0dXJuIF9zdHI7DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+DQppbmxpbmUgYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+DQpvcGVyYXRvcisgKGNoYXJUIGxocywg
Y29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpDQp7DQog
IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBfc3RyICgxLCBsaHMpOw0K
ICBfc3RyLmFwcGVuZCAocmhzKTsNCiAgcmV0dXJuIF9zdHI7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+DQppbmxpbmUgYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+DQpvcGVyYXRvcisgKGNvbnN0IGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQ0K
ew0KICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gX3N0ciAobGhzKTsN
CiAgX3N0ci5hcHBlbmQgKHJocyk7DQogIHJldHVybiBfc3RyOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPg0KaW5saW5lIGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPg0Kb3BlcmF0b3IrIChjb25zdCBiYXNpY19z
dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY2hhclQgcmhzKQ0Kew0KICBi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3RyIChsaHMpOw0KICBzdHIu
YXBwZW5kICgxLCByaHMpOw0KICByZXR1cm4gc3RyOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgY2hh
clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPg0KaW5saW5lIGJvb2wNCm9wZXJhdG9y
PT0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLA0K
CSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykN
CnsNCiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA9PSAwKTsNCn0NCg0KdGVtcGxhdGUgPGNs
YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4NCmlubGluZSBib29sDQpv
cGVyYXRvcj09IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj4mIHJocykNCnsNCiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA9
PSAwKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs
bG9jYXRvcj4NCmlubGluZSBib29sDQpvcGVyYXRvcj09IChjb25zdCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykNCnsNCiAgcmV0
dXJuIChsaHMuY29tcGFyZSAocmhzKSA9PSAwKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4NCmlubGluZSBib29sDQpvcGVyYXRvciE9
IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj4mIHJocykNCnsNCiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSAhPSAwKTsNCn0N
Cg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4N
CmlubGluZSBib29sDQpvcGVyYXRvciE9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykNCnsNCiAgcmV0dXJuIChsaHMu
Y29tcGFyZSAocmhzKSAhPSAwKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0
cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4NCmlubGluZSBib29sDQpvcGVyYXRvcjwgKGNvbnN0IGJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLA0KCSAgICBjb25zdCBi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykNCnsNCiAgcmV0dXJu
IChsaHMuY29tcGFyZSAocmhzKSA8IDApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs
YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPg0KaW5saW5lIGJvb2wNCm9wZXJhdG9yPCAoY29u
c3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+JiByaHMpDQp7DQogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPiAwKTsNCn0NCg0KdGVt
cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4NCmlubGlu
ZSBib29sDQpvcGVyYXRvcjwgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQ0Kew0KICByZXR1cm4gKGxocy5jb21wYXJl
IChyaHMpIDwgMCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+DQppbmxpbmUgYm9vbA0Kb3BlcmF0b3I+IChjb25zdCBjaGFyVCogbGhz
LCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykNCnsN
CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA8IDApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPg0KaW5saW5lIGJvb2wNCm9wZXJh
dG9yPiAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMs
IGNvbnN0IGNoYXJUKiByaHMpDQp7DQogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPiAwKTsN
Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4NCmlubGluZSBib29sDQpvcGVyYXRvcjw9IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykNCnsNCiAgcmV0dXJuIChy
aHMuY29tcGFyZSAobGhzKSA+PSAwKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz
cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4NCmlubGluZSBib29sDQpvcGVyYXRvcjw9IChjb25z
dCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hh
clQqIHJocykNCnsNCiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8PSAwKTsNCn0NCg0KdGVt
cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4NCmlubGlu
ZSBib29sDQpvcGVyYXRvcj49IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykNCnsNCiAgcmV0dXJuIChyaHMuY29tcGFy
ZSAobGhzKSA8PSAwKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs
IGNsYXNzIEFsbG9jYXRvcj4NCmlubGluZSBib29sDQpvcGVyYXRvcj49IChjb25zdCBiYXNpY19z
dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykN
CnsNCiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA+PSAwKTsNCn0NCg0KdGVtcGxhdGUgPGNs
YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4NCmlubGluZSBib29sDQpv
cGVyYXRvciE9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4m
IGxocywNCgkgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
JiByaHMpDQp7DQogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgIT0gMCk7DQp9DQoNCnRlbXBs
YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+DQppbmxpbmUg
Ym9vbA0Kb3BlcmF0b3I+IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4mIGxocywNCgkgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4mIHJocykNCnsNCiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA+IDApOw0KfQ0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPg0KaW5s
aW5lIGJvb2wNCm9wZXJhdG9yPD0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPiYgbGhzLA0KCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj4mIHJocykNCnsNCiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8PSAwKTsN
Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4NCmlubGluZSBib29sDQpvcGVyYXRvcj49IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj4mIGxocywNCgkgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpDQp7DQogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykg
Pj0gMCk7DQp9DQoNCmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07DQp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiBpc3RyZWFtJg0Kb3BlcmF0
b3I+PiAoaXN0cmVhbSYsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYp
Ow0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4g
b3N0cmVhbSYNCm9wZXJhdG9yPDwgKG9zdHJlYW0mLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj4mKTsNCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh
aXRzLCBjbGFzcyBBbGxvY2F0b3I+IGlzdHJlYW0mDQpnZXRsaW5lIChpc3RyZWFtJiwgYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiwgY2hhclQgZGVsaW0gPSAnXG4nKTsN
Cg0KfSAgDQoNCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIgMSAzDQogDQogDQoNCiANCiANCiAN
CiANCiANCg0KIA0KIA0KIA0KIA0KDQogDQogDQogDQoNCiANCiANCiANCiANCiANCg0KIA0KIA0K
DQpleHRlcm4gIkMrKyIgew0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs
YXNzIEFsbG9jYXRvcj4NCmlubGluZSB2b2lkICogYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjpSZXA6Og0Kb3BlcmF0b3IgbmV3IChzaXplX3Qgcywgc2l6ZV90IGV4dHJh
KQ0Kew0KICByZXR1cm4gQWxsb2NhdG9yOjphbGxvY2F0ZShzICsgZXh0cmEgKiBzaXplb2YgKGNo
YXJUKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+DQppbmxpbmUgdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj46OlJlcDo6DQpvcGVyYXRvciBkZWxldGUgKHZvaWQgKiBwdHIpDQp7DQogIEFsbG9jYXRv
cjo6ZGVhbGxvY2F0ZShwdHIsIHNpemVvZihSZXApICsNCgkJCXJlaW50ZXJwcmV0X2Nhc3Q8UmVw
ICo+KHB0ciktPnJlcyAqDQoJCQlzaXplb2YgKGNoYXJUKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+DQppbmxpbmUgc2l6ZV90IGJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoNCmZyb2Jfc2l6ZSAo
c2l6ZV90IHMpDQp7DQogIHNpemVfdCBpID0gMTY7DQogIHdoaWxlIChpIDwgcykgaSAqPSAyOw0K
ICByZXR1cm4gaTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs
YXNzIEFsbG9jYXRvcj4NCmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj46OlJlcCAqDQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJl
cDo6DQpjcmVhdGUgKHNpemVfdCBleHRyYSkNCnsNCiAgZXh0cmEgPSBmcm9iX3NpemUgKGV4dHJh
ICsgMSk7DQogIFJlcCAqcCA9IG5ldyAoZXh0cmEpIFJlcDsNCiAgcC0+cmVzID0gZXh0cmE7DQog
IHAtPnJlZiA9IDE7DQogIHAtPnNlbGZpc2ggPSBmYWxzZTsNCiAgcmV0dXJuIHA7DQp9DQoNCnRl
bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+DQpjaGFy
VCAqIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoNCmNsb25l
ICgpDQp7DQogIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChsZW4pOw0KICBwLT5jb3B5ICgwLCBkYXRh
ICgpLCBsZW4pOw0KICBwLT5sZW4gPSBsZW47DQogIHJldHVybiBwLT5kYXRhICgpOw0KfQ0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPg0KaW5s
aW5lIGJvb2wgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6Og0K
ZXhjZXNzX3Nsb3AgKHNpemVfdCBzLCBzaXplX3QgcikNCnsNCiAgcmV0dXJuIDIgKiAocyA8PSAx
NiA/IDE2IDogcykgPCByOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPg0KaW5saW5lIGJvb2wgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+OjoNCmNoZWNrX3JlYWxsb2MgKGJhc2ljX3N0cmluZzo6c2l6ZV90eXBl
IHMpIGNvbnN0DQp7DQogIHMgKz0gc2l6ZW9mIChjaGFyVCk7DQogIHJlcCAoKS0+c2VsZmlzaCA9
IGZhbHNlOw0KICByZXR1cm4gKHJlcCAoKS0+cmVmID4gMQ0KCSAgfHwgcyA+IGNhcGFjaXR5ICgp
DQoJICB8fCBSZXA6OmV4Y2Vzc19zbG9wIChzLCBjYXBhY2l0eSAoKSkpOw0KfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPg0Kdm9pZCBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Og0KYWxsb2MgKGJhc2ljX3N0cmlu
Zzo6c2l6ZV90eXBlIF9fc2l6ZSwgYm9vbCBfX3NhdmUpDQp7DQogIGlmICghIGNoZWNrX3JlYWxs
b2MgKF9fc2l6ZSkpDQogICAgcmV0dXJuOw0KDQogIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChfX3Np
emUpOw0KDQogIGlmIChfX3NhdmUpDQogICAgew0KICAgICAgcC0+Y29weSAoMCwgZGF0YSAoKSwg
bGVuZ3RoICgpKTsNCiAgICAgIHAtPmxlbiA9IGxlbmd0aCAoKTsNCiAgICB9DQogIGVsc2UNCiAg
ICBwLT5sZW4gPSAwOw0KDQogIHJlcHVwIChwKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4NCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiYNCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
Pjo6DQpyZXBsYWNlIChzaXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLA0KCSBjb25zdCBiYXNp
Y19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvczIsIHNpemVfdHlwZSBuMikNCnsNCiAgY29uc3Qg
c2l6ZV90IGxlbjIgPSBzdHIubGVuZ3RoICgpOw0KDQogIGlmIChwb3MxID09IDAgJiYgbjEgPj0g
bGVuZ3RoICgpICYmIHBvczIgPT0gMCAmJiBuMiA+PSBsZW4yKQ0KICAgIHJldHVybiBvcGVyYXRv
cj0gKHN0cik7DQoNCiAgZG8geyBpZiAoIHBvczIgPiBsZW4yICkgX19vdXRfb2ZfcmFuZ2UgKCJw
b3MyID4gbGVuMiIpOyB9IHdoaWxlICgwKSA7DQoNCiAgaWYgKG4yID4gbGVuMiAtIHBvczIpDQog
ICAgbjIgPSBsZW4yIC0gcG9zMjsNCg0KICByZXR1cm4gcmVwbGFjZSAocG9zMSwgbjEsIHN0ci5k
YXRhICgpICsgcG9zMiwgbjIpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy
YWl0cywgY2xhc3MgQWxsb2NhdG9yPg0KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6Og0KY29weSAoc2l6ZV90IHBvcywgY29uc3QgY2hhclQg
KnMsIHNpemVfdCBuKQ0Kew0KICBpZiAobikNCiAgICB0cmFpdHM6OmNvcHkgKGRhdGEgKCkgKyBw
b3MsIHMsIG4pOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xh
c3MgQWxsb2NhdG9yPg0KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+OjpSZXA6Og0KbW92ZSAoc2l6ZV90IHBvcywgY29uc3QgY2hhclQgKnMsIHNpemVf
dCBuKQ0Kew0KICBpZiAobikNCiAgICB0cmFpdHM6Om1vdmUgKGRhdGEgKCkgKyBwb3MsIHMsIG4p
Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPg0KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Jg0KYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoNCnJlcGxhY2UgKHNpemVfdHlwZSBwb3Ms
IHNpemVfdHlwZSBuMSwgY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuMikNCnsNCiAgY29uc3Qg
c2l6ZV90eXBlIGxlbiA9IGxlbmd0aCAoKTsNCiAgZG8geyBpZiAoIHBvcyA+IGxlbiApIF9fb3V0
X29mX3JhbmdlICgicG9zID4gbGVuIik7IH0gd2hpbGUgKDApIDsNCiAgaWYgKG4xID4gbGVuIC0g
cG9zKQ0KICAgIG4xID0gbGVuIC0gcG9zOw0KICBkbyB7IGlmICggbGVuIC0gbjEgPiBtYXhfc2l6
ZSAoKSAtIG4yICkgX19sZW5ndGhfZXJyb3IgKCJsZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIi
KTsgfSB3aGlsZSAoMCkgOw0KICBzaXplX3QgbmV3bGVuID0gbGVuIC0gbjEgKyBuMjsNCg0KICBp
ZiAoY2hlY2tfcmVhbGxvYyAobmV3bGVuKSkNCiAgICB7DQogICAgICBSZXAgKnAgPSBSZXA6OmNy
ZWF0ZSAobmV3bGVuKTsNCiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCksIHBvcyk7DQogICAgICBw
LT5jb3B5IChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsN
CiAgICAgIHAtPmNvcHkgKHBvcywgcywgbjIpOw0KICAgICAgcmVwdXAgKHApOw0KICAgIH0NCiAg
ZWxzZQ0KICAgIHsNCiAgICAgIHJlcCAoKS0+bW92ZSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3Mg
KyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7DQogICAgICByZXAgKCktPmNvcHkgKHBvcywgcywgbjIp
Ow0KICAgIH0NCiAgcmVwICgpLT5sZW4gPSBuZXdsZW47DQoNCiAgcmV0dXJuICp0aGlzOw0KfQ0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPg0K
aW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6
Og0Kc2V0IChzaXplX3QgcG9zLCBjb25zdCBjaGFyVCBjLCBzaXplX3QgbikNCnsNCiAgdHJhaXRz
OjpzZXQgIChkYXRhICgpICsgcG9zLCBjLCBuKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4NCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiYgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
OjoNCnJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgc2l6ZV90eXBlIG4yLCBj
aGFyVCBjKQ0Kew0KICBjb25zdCBzaXplX3QgbGVuID0gbGVuZ3RoICgpOw0KICBkbyB7IGlmICgg
cG9zID4gbGVuICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPiBsZW4iKTsgfSB3aGlsZSAoMCkgOw0K
ICBpZiAobjEgPiBsZW4gLSBwb3MpDQogICAgbjEgPSBsZW4gLSBwb3M7DQogIGRvIHsgaWYgKCBs
ZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIgKSBfX2xlbmd0aF9lcnJvciAoImxlbiAtIG4xID4g
bWF4X3NpemUgKCkgLSBuMiIpOyB9IHdoaWxlICgwKSA7DQogIHNpemVfdCBuZXdsZW4gPSBsZW4g
LSBuMSArIG4yOw0KDQogIGlmIChjaGVja19yZWFsbG9jIChuZXdsZW4pKQ0KICAgIHsNCiAgICAg
IFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOw0KICAgICAgcC0+Y29weSAoMCwgZGF0YSAo
KSwgcG9zKTsNCiAgICAgIHAtPmNvcHkgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxl
biAtIChwb3MgKyBuMSkpOw0KICAgICAgcC0+c2V0ICAocG9zLCBjLCBuMik7DQogICAgICByZXB1
cCAocCk7DQogICAgfQ0KICBlbHNlDQogICAgew0KICAgICAgcmVwICgpLT5tb3ZlIChwb3MgKyBu
MiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsNCiAgICAgIHJlcCAoKS0+
c2V0ICAocG9zLCBjLCBuMik7DQogICAgfQ0KICByZXAgKCktPmxlbiA9IG5ld2xlbjsNCg0KICBy
ZXR1cm4gKnRoaXM7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+DQp2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPjo6DQpyZXNpemUgKHNpemVfdHlwZSBuLCBjaGFyVCBjKQ0Kew0KICBkbyB7IGlmICggbiA+
IG1heF9zaXplICgpICkgX19sZW5ndGhfZXJyb3IgKCJuID4gbWF4X3NpemUgKCkiKTsgfSB3aGls
ZSAoMCkgOw0KDQogIGlmIChuID4gbGVuZ3RoICgpKQ0KICAgIGFwcGVuZCAobiAtIGxlbmd0aCAo
KSwgYyk7DQogIGVsc2UNCiAgICBlcmFzZSAobik7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBjaGFy
VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+DQpiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQ0KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjoNCmNvcHkgKGNoYXJUKiBzLCBzaXplX3R5cGUgbiwgc2l6ZV90eXBlIHBv
cykgY29uc3QNCnsNCiAgZG8geyBpZiAoIHBvcyA+IGxlbmd0aCAoKSApIF9fb3V0X29mX3Jhbmdl
ICgicG9zID4gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsNCg0KICBpZiAobiA+IGxlbmd0aCAo
KSAtIHBvcykNCiAgICBuID0gbGVuZ3RoICgpIC0gcG9zOw0KDQogIHRyYWl0czo6Y29weSAocywg
ZGF0YSAoKSArIHBvcywgbik7DQogIHJldHVybiBuOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgY2hh
clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPg0KYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUNCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0
cywgQWxsb2NhdG9yPjo6DQpmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6
ZV90eXBlIG4pIGNvbnN0DQp7DQogIHNpemVfdCB4cG9zID0gcG9zOw0KICBmb3IgKDsgeHBvcyAr
IG4gPD0gbGVuZ3RoICgpOyArK3hwb3MpDQogICAgaWYgKHRyYWl0czo6ZXEgKGRhdGEgKCkgW3hw
b3NdLCAqcykNCgkmJiB0cmFpdHM6OmNvbXBhcmUgKGRhdGEgKCkgKyB4cG9zLCBzLCBuKSA9PSAw
KQ0KICAgICAgcmV0dXJuIHhwb3M7DQogIHJldHVybiBucG9zOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPg0KaW5saW5lIGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlDQpiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Og0KX2ZpbmQgKGNvbnN0IGNoYXJUKiBwdHIsIGNo
YXJUIGMsIHNpemVfdHlwZSB4cG9zLCBzaXplX3R5cGUgbGVuKQ0Kew0KICBmb3IgKDsgeHBvcyA8
IGxlbjsgKyt4cG9zKQ0KICAgIGlmICh0cmFpdHM6OmVxIChwdHIgW3hwb3NdLCBjKSkNCiAgICAg
IHJldHVybiB4cG9zOw0KICByZXR1cm4gbnBvczsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4NCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlDQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj46Og0KZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QNCnsNCiAg
cmV0dXJuIF9maW5kIChkYXRhICgpLCBjLCBwb3MsIGxlbmd0aCAoKSk7DQp9DQoNCnRlbXBsYXRl
IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+DQpiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQ0KYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoNCnJmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90
eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0DQp7DQogIGlmIChuID4gbGVuZ3RoICgpKQ0KICAg
IHJldHVybiBucG9zOw0KDQogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gbjsNCiAgaWYgKHhw
b3MgPiBwb3MpDQogICAgeHBvcyA9IHBvczsNCg0KICBmb3IgKCsreHBvczsgeHBvcy0tID4gMDsg
KQ0KICAgIGlmICh0cmFpdHM6OmVxIChkYXRhICgpIFt4cG9zXSwgKnMpDQoJJiYgdHJhaXRzOjpj
b21wYXJlIChkYXRhICgpICsgeHBvcywgcywgbikgPT0gMCkNCiAgICAgIHJldHVybiB4cG9zOw0K
ICByZXR1cm4gbnBvczsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs
IGNsYXNzIEFsbG9jYXRvcj4NCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
Pjo6c2l6ZV90eXBlDQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Og0K
cmZpbmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0DQp7DQogIGlmICgxID4gbGVuZ3Ro
ICgpKQ0KICAgIHJldHVybiBucG9zOw0KDQogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gMTsN
CiAgaWYgKHhwb3MgPiBwb3MpDQogICAgeHBvcyA9IHBvczsNCg0KICBmb3IgKCsreHBvczsgeHBv
cy0tID4gMDsgKQ0KICAgIGlmICh0cmFpdHM6OmVxIChkYXRhICgpIFt4cG9zXSwgYykpDQogICAg
ICByZXR1cm4geHBvczsNCiAgcmV0dXJuIG5wb3M7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBjaGFy
VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+DQpiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQ0KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjoNCmZpbmRfZmlyc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUg
cG9zLCBzaXplX3R5cGUgbikgY29uc3QNCnsNCiAgc2l6ZV90IHhwb3MgPSBwb3M7DQogIGZvciAo
OyB4cG9zIDwgbGVuZ3RoICgpOyArK3hwb3MpDQogICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4
cG9zXSwgMCwgbikgIT0gbnBvcykNCiAgICAgIHJldHVybiB4cG9zOw0KICByZXR1cm4gbnBvczsN
Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4NCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlDQpi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Og0KZmluZF9sYXN0X29mIChj
b25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0DQp7DQogIGlm
IChsZW5ndGgoKSA9PSAwKQ0KICAgIHJldHVybiBucG9zOw0KICBzaXplX3QgeHBvcyA9IGxlbmd0
aCAoKSAtIDE7DQogIGlmICh4cG9zID4gcG9zKQ0KICAgIHhwb3MgPSBwb3M7DQogIGZvciAoKyt4
cG9zOyB4cG9zLS0gPiAwOykNCiAgICBpZiAoX2ZpbmQgKHMsIGRhdGEgKCkgW3hwb3NdLCAwLCBu
KSAhPSBucG9zKQ0KICAgICAgcmV0dXJuIHhwb3M7DQogIHJldHVybiBucG9zOw0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPg0KYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUNCmJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6DQpmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3Qg
Y2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdA0Kew0KICBzaXplX3Qg
eHBvcyA9IHBvczsNCiAgZm9yICg7IHhwb3MgPCBsZW5ndGggKCk7ICsreHBvcykNCiAgICBpZiAo
X2ZpbmQgKHMsIGRhdGEgKCkgW3hwb3NdLCAwLCBuKSA9PSBucG9zKQ0KICAgICAgcmV0dXJuIHhw
b3M7DQogIHJldHVybiBucG9zOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy
YWl0cywgY2xhc3MgQWxsb2NhdG9yPg0KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv
Y2F0b3I+OjpzaXplX3R5cGUNCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
Pjo6DQpmaW5kX2ZpcnN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QNCnsN
CiAgc2l6ZV90IHhwb3MgPSBwb3M7DQogIGZvciAoOyB4cG9zIDwgbGVuZ3RoICgpOyArK3hwb3Mp
DQogICAgaWYgKHRyYWl0czo6bmUgKGRhdGEgKCkgW3hwb3NdLCBjKSkNCiAgICAgIHJldHVybiB4
cG9zOw0KICByZXR1cm4gbnBvczsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0
cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4NCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6c2l6ZV90eXBlDQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj46Og0KZmluZF9sYXN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNp
emVfdHlwZSBuKSBjb25zdA0Kew0KICBpZiAobGVuZ3RoKCkgPT0gMCkNCiAgICByZXR1cm4gbnBv
czsNCiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAxOw0KICBpZiAoeHBvcyA+IHBvcykNCiAg
ICB4cG9zID0gcG9zOw0KICBmb3IgKCsreHBvczsgeHBvcy0tID4gMDspDQogICAgaWYgKF9maW5k
IChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgPT0gbnBvcykNCiAgICAgIHJldHVybiB4cG9zOw0K
ICByZXR1cm4gbnBvczsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs
IGNsYXNzIEFsbG9jYXRvcj4NCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
Pjo6c2l6ZV90eXBlDQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Og0K
ZmluZF9sYXN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QNCnsNCiAgaWYg
KGxlbmd0aCgpID09IDApDQogICAgcmV0dXJuIG5wb3M7DQogIHNpemVfdCB4cG9zID0gbGVuZ3Ro
ICgpIC0gMTsNCiAgaWYgKHhwb3MgPiBwb3MpDQogICAgeHBvcyA9IHBvczsNCiAgZm9yICgrK3hw
b3M7IHhwb3MtLSA+IDA7KQ0KICAgIGlmICh0cmFpdHM6Om5lIChkYXRhICgpIFt4cG9zXSwgYykp
DQogICAgICByZXR1cm4geHBvczsNCiAgcmV0dXJuIG5wb3M7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+DQppbnQgYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoNCmNvbXBhcmUgKGNvbnN0IGJhc2ljX3N0cmlu
ZyYgc3RyLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QNCnsNCiAgZG8geyBpZiAo
IHBvcyA+IGxlbmd0aCAoKSApIF9fb3V0X29mX3JhbmdlICgicG9zID4gbGVuZ3RoICgpIik7IH0g
d2hpbGUgKDApIDsNCg0KICBzaXplX3QgcmxlbiA9IGxlbmd0aCAoKSAtIHBvczsNCiAgaWYgKHJs
ZW4gPiBuKQ0KICAgIHJsZW4gPSBuOw0KICBpZiAocmxlbiA+IHN0ci5sZW5ndGggKCkpDQogICAg
cmxlbiA9IHN0ci5sZW5ndGggKCk7DQogIGludCByID0gdHJhaXRzOjpjb21wYXJlIChkYXRhICgp
ICsgcG9zLCBzdHIuZGF0YSAoKSwgcmxlbik7DQogIGlmIChyICE9IDApDQogICAgcmV0dXJuIHI7
DQogIGlmIChybGVuID09IG4pDQogICAgcmV0dXJuIDA7DQogIHJldHVybiAobGVuZ3RoICgpIC0g
cG9zKSAtIHN0ci5sZW5ndGggKCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+DQppbnQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjoNCmNvbXBhcmUgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBz
aXplX3R5cGUgbikgY29uc3QNCnsNCiAgZG8geyBpZiAoIHBvcyA+IGxlbmd0aCAoKSApIF9fb3V0
X29mX3JhbmdlICgicG9zID4gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsNCg0KICBzaXplX3Qg
cmxlbiA9IGxlbmd0aCAoKSAtIHBvczsNCiAgaWYgKHJsZW4gPiBuKQ0KICAgIHJsZW4gPSBuOw0K
ICBpbnQgciA9IHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHBvcywgcywgcmxlbik7DQogIGlm
IChyICE9IDApDQogICAgcmV0dXJuIHI7DQogIHJldHVybiAobGVuZ3RoICgpIC0gcG9zKSAtIG47
DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs
b2NhdG9yPg0KaXN0cmVhbSAmDQpvcGVyYXRvcj4+IChpc3RyZWFtICZpcywgYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ICZzKQ0Kew0KICBpbnQgdyA9IGlzLndpZHRoICgw
KTsNCiAgaWYgKGlzLmlwZngwICgpKQ0KICAgIHsNCiAgICAgIHJlZ2lzdGVyIHN0cmVhbWJ1ZiAq
c2IgPSBpcy5yZGJ1ZiAoKTsNCiAgICAgIHMucmVzaXplICgwKTsNCiAgICAgIHdoaWxlICgxKQ0K
CXsNCgkgIGludCBjaCA9IHNiLT5zYnVtcGMgKCk7DQoJICBpZiAoY2ggPT0gKC0xKSApDQoJICAg
IHsNCgkgICAgICBpcy5zZXRzdGF0ZSAoaW9zOjplb2ZiaXQpOw0KCSAgICAgIGJyZWFrOw0KCSAg
ICB9DQoJICBlbHNlIGlmICh0cmFpdHM6OmlzX2RlbCAoY2gpKQ0KCSAgICB7DQoJICAgICAgc2It
PnN1bmdldGMgKCk7DQoJICAgICAgYnJlYWs7DQoJICAgIH0NCgkgIHMgKz0gc3RhdGljX2Nhc3Q8
Y2hhclQ+IChjaCk7DQoJICBpZiAoLS13ID09IDEpDQoJICAgIGJyZWFrOw0KCX0NCiAgICB9DQoN
CiAgaXMuaXNmeCAoKTsNCiAgaWYgKHMubGVuZ3RoICgpID09IDApDQogICAgaXMuc2V0c3RhdGUg
KGlvczo6ZmFpbGJpdCk7DQoNCiAgcmV0dXJuIGlzOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgY2hh
clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPg0Kb3N0cmVhbSAmDQpvcGVyYXRvcjw8
IChvc3RyZWFtICZvLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj4mIHMpDQp7DQogIHJldHVybiBvLndyaXRlIChzLmRhdGEgKCksIHMubGVuZ3RoICgpKTsNCn0N
Cg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4N
CmlzdHJlYW0mDQpnZXRsaW5lIChpc3RyZWFtICZpcywgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+JiBzLCBjaGFyVCBkZWxpbSkNCnsNCiAgaWYgKGlzLmlwZngxICgpKQ0K
ICAgIHsNCiAgICAgIHNpemVfdCAgIGNvdW50ID0gMDsNCiAgICAgIHN0cmVhbWJ1ZiAqc2IgPSBp
cy5yZGJ1ZiAoKTsNCiAgICAgIHMucmVzaXplICgwKTsNCg0KICAgICAgd2hpbGUgKDEpDQoJew0K
CSAgaW50IGNoID0gc2ItPnNidW1wYyAoKTsNCgkgIGlmIChjaCA9PSAoLTEpICkNCgkgICAgew0K
CSAgICAgIGlzLnNldHN0YXRlIChjb3VudCA9PSAwDQoJCQkgICA/IChpb3M6OmZhaWxiaXR8aW9z
Ojplb2ZiaXQpDQoJCQkgICA6IGlvczo6ZW9mYml0KTsNCgkgICAgICBicmVhazsNCgkgICAgfQ0K
DQoJICArK2NvdW50Ow0KDQoJICBpZiAoY2ggPT0gZGVsaW0pDQoJICAgIGJyZWFrOw0KDQoJICBz
ICs9IHN0YXRpY19jYXN0PGNoYXJUPiAoY2gpOw0KDQoJICBpZiAocy5sZW5ndGggKCkgPT0gcy5u
cG9zIC0gMSkNCgkgICAgew0KCSAgICAgIGlzLnNldHN0YXRlIChpb3M6OmZhaWxiaXQpOw0KCSAg
ICAgIGJyZWFrOw0KCSAgICB9DQoJfQ0KICAgIH0NCg0KICAgDQogICANCiAgaXMuaXNmeCAoKTsN
Cg0KICByZXR1cm4gaXM7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRz
LCBjbGFzcyBBbGxvY2F0b3I+DQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj46OlJlcA0KYmFzaWNfc3RyaW5nPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Om5pbFJlcCA9
IHsgMCwgMCwgMSwgZmFsc2UgfTsNCg0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4NCmNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPjo6c2l6ZV90eXBlDQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj46Om5wb3M7DQoNCn0gIA0KIyA2NTMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8y
Ljk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMiAzDQoNCg0K
DQojIDYgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9zdHJpbmciIDIgMw0KDQoNCmV4dGVybiAiQysrIiB7DQp0eXBlZGVmIGJhc2lj
X3N0cmluZyA8Y2hhcj4gc3RyaW5nOw0KDQoNCg0KfSAgDQoNCg0KIyA1ICJmb3MuaHh4IiAyDQoN
CiMgMSAiZm9ULmh4eCIgMQ0KDQoNCg0KDQoNCm5hbWVzcGFjZSBmcDYgew0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgVD4NCnN0cnVjdCBmb1Qgew0KICAgDQogIHZpcnR1YWwgVCogb3BlcmF0b3IoKSh2ZWN0
b3I8VD4qKT0wOw0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIFQ+DQpjbGFzcyBmb1BhcnRBcHBUOnB1
YmxpYyBmb1Q8VD4gew0KcHVibGljOg0KICBmb1BhcnRBcHBUKGZvVDxUPiYpOw0KICBUKiBvcGVy
YXRvcigpKHZlY3RvcjxUPiopPTA7DQpwcm90ZWN0ZWQ6DQogIGZvVDxUPiYgckZvOw0KfTsNCg0K
dGVtcGxhdGUgPGNsYXNzIFQ+DQpmb1BhcnRBcHBUPFQ+Ojpmb1BhcnRBcHBUKGZvVDxUPiYgcik6
ckZvKHIpe30NCg0KfTsgDQoNCg0KDQojIDYgImZvcy5oeHgiIDINCg0KDQpuYW1lc3BhY2UgZnA2
IHsNCg0KdGVtcGxhdGUgPGNsYXNzIFQ+DQpzdHJ1Y3QgU3VtOnB1YmxpYyBmb1Q8VD4gew0KICBU
KiBvcGVyYXRvcigpKHZlY3RvcjxUPiopOw0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIFQ+DQpUKg0K
U3VtPFQ+OjpvcGVyYXRvcigpKHZlY3RvcjxUPiogcHZUKSB7DQogIFQqIHBUPW5ldyBUKDApOw0K
ICBmb3IodmVjdG9yPFQ+OjppdGVyYXRvciB2aT1wdlQtPmJlZ2luKCk7dmkgIT0gcHZULT5lbmQo
KTt2aSsrKSB7DQogICAgKnBUICs9ICp2aTsNCiAgfQ0KICBwdlQtPmNsZWFyKCk7DQogIGRlbGV0
ZSBwdlQ7DQogIHJldHVybiBwVDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIFQ+DQpzdHJ1Y3QgU3Vt
VHdpY2U6cHVibGljIGZvUGFydEFwcFQ8VD4gew0KICBTdW1Ud2ljZShmb1Q8VD4mIHIpOmZvUGFy
dEFwcFQ8VD4ocil7fQ0KICBUKiBvcGVyYXRvcigpKHZlY3RvcjxUPiopOw0KfTsNCg0KdGVtcGxh
dGUgPGNsYXNzIFQ+DQpUKg0KU3VtVHdpY2U8VD46Om9wZXJhdG9yKCkodmVjdG9yPFQ+KiBwdlQp
IHsNCiAgVCogcFQ9bmV3IFQoMCk7DQogIGZvcih2ZWN0b3I8VD46Oml0ZXJhdG9yIHZpPXB2VC0+
YmVnaW4oKTt2aSAhPSBwdlQtPmVuZCgpO3ZpKyspIHsNCiAgICB2ZWN0b3I8VD4qIHY9bmV3IHZl
Y3RvcjxUPigxKTsNCiAgICAoKnYpWzBdPSAqdmk7DQogICAgKnBUICs9ICp2aSArICpyRm8odik7
DQogIH0NCiAgcHZULT5jbGVhcigpOw0KICBkZWxldGUgcHZUOw0KICByZXR1cm4gcFQ7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBUPg0Kc3RydWN0IE1hcHsNCiAgTWFwKGZvVDxUPiYgcik6ckZvKHIp
e30NCiAgdmVjdG9yPFQ+KiBvcGVyYXRvcigpKHZlY3RvcjxUPiopOw0KICB2ZWN0b3I8VD4qIG9w
ZXJhdG9yKCkodmVjdG9yPHZlY3RvcjxUPio+Kik7DQpwcml2YXRlOg0KICBmb1Q8VD4mIHJGbzsN
Cn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIFQ+DQp2ZWN0b3I8VD4qDQpNYXA8VD46Om9wZXJhdG9y
KCkodmVjdG9yPFQ+KiBwdlQpIHsNCiAgZm9yKHZlY3RvcjxUPjo6aXRlcmF0b3Igdmk9cHZULT5i
ZWdpbigpOyB2aSAhPSBwdlQtPmVuZCgpOyB2aSsrKSB7DQogICAgdmVjdG9yPFQ+KiB2PW5ldyB2
ZWN0b3I8VD4oMSk7DQogICAgKCp2KVswXT0gKnZpOw0KICAgICp2aT0qckZvKHYpOw0KICB9DQog
IHJldHVybiBwdlQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBUPg0Kdm9pZA0KcHJpbnQob3N0cmVh
bV9pdGVyYXRvcjxUPiYgb2ksIHZlY3RvcjxUPiogdil7DQogICANCiAge2ZvcihpbnQgaT0wLHNp
ej12LT5zaXplKCk7aTxzaXo7aSsrKSBvaT0oKnYpW2ldO30NCiAgdi0+Y2xlYXIoKTsNCiAgZGVs
ZXRlIHY7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBUPg0Kdm9pZA0KcHJpbnQob3N0cmVhbV9pdGVy
YXRvcjxUPiYgb2ksIFQqIHBUKXsNCiAgb2k9ICpwVDsNCiAgZGVsZXRlIHBUOw0KfQ0KDQp9OyAN
Cg0KDQoNCg0KIyA0ICJtYWluLmN4eCIgMg0KDQoNCnVzaW5nIHN0ZDo6dmVjdG9yOw0KdXNpbmcg
c3RkOjpvc3RyZWFtX2l0ZXJhdG9yOw0KdXNpbmcgZnA2OjpTdW07DQp1c2luZyBmcDY6OlN1bVR3
aWNlOw0KdXNpbmcgZnA2OjpNYXA7DQp1c2luZyBmcDY6OnByaW50Ow0KDQp2b2lkIG1haW4odm9p
ZCkgew0KDQogIFN1bTxmbG9hdD4gc3VtOw0KICBTdW1Ud2ljZTxmbG9hdD4gc3VtMihzdW0pOw0K
ICBNYXA8ZmxvYXQ+IG1hcHN1bShzdW0pOw0KICBNYXA8ZmxvYXQ+IG1hcHN1bTIoc3VtMik7DQog
IA0KICBjb3V0PDwiXG5TdW09ICI8PCpzdW0obmV3IHZlY3RvcjxmbG9hdD4oMywxKSk8PCdcbic7
DQogIGNvdXQ8PCJcblN1bTI9ICI8PCpzdW0yKG5ldyB2ZWN0b3I8ZmxvYXQ+ICgzLDEpKTw8J1xu
JzsNCiAgew0KICAgIG9zdHJlYW1faXRlcmF0b3I8ZmxvYXQ+IG9pKGNvdXQsIlxuIik7DQoNCiAg
ICBjb3V0PDwiXG5tYXBzdW06ICI7DQogICAgcHJpbnQob2ksbWFwc3VtKG5ldyB2ZWN0b3I8Zmxv
YXQ+ICgzLDEpKSk7DQoNCgkgDQogICAge2ZvcihpbnQgaT0wO2k8MTAwMDAwMDtpKyspIA0KICAg
IGNvdXQ8PCJcbm1hcHN1bTI6ICI7DQogICAgcHJpbnQob2ksbWFwc3VtMihuZXcgdmVjdG9yPGZs
b2F0PiAoMywxKSkpO2NvdXQ8PCdcbic7fQ0KICB9DQogIGNvdXQ8PGVuZGw7DQp9DQoNCg0KDQoN
Cg==


More information about the Gcc-prs mailing list