This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

c++/7861: Failure to compile on the second attempt


>Number:         7861
>Category:       c++
>Synopsis:       Failure to compile on the second attempt
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun Sep 08 18:16:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Paul Johnon
>Release:        3.2
>Organization:
>Environment:
i686-linux (redhat)
>Description:
I have a simple source which includes iostream and string. It will compile normally first time around. If the source is changed and a recompilation is attempted, I get a pile of errors from the string header.

It makes no difference after the code fails to compile if the code is compiled with the -c switch to form an object file - the same errors occur.
>How-To-Repeat:
To repeat the bug, I can send you the source code. Compile, alter any line and attempt to recompile. I can also email the error logs if this helps.

>Fix:

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

IyAxICJzdHJpbmd0ZXN0LmNwcCIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+
IgojIDEgInN0cmluZ3Rlc3QuY3BwIgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2lv
c3RyZWFtIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaW9zdHJlYW0iIDMK
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9j
Kytjb25maWcuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMt
bGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2RlZmluZXMuaCIgMSAzCiMgMzkgIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI5MSAiL3Vzci9pbmNsdWRl
L2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDEgMwojIDI5MiAi
L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDMyMCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMwojIDMyMSAiL3Vzci9pbmNs
dWRlL2ZlYXR1cmVzLmgiIDIgMwojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pNjg2
LXBjLWxpbnV4LWdudS9iaXRzL29zX2RlZmluZXMuaCIgMiAzCiMgMzUgIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDIgMwojIDQ1
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pb3N0cmVhbSIgMiAzCiMgMSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIgMSAzCiMgNDQgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4yL29zdHJlYW0iIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaW9zIiAx
IDMKIyA0MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaW9zIiAzCgojIDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4yL2lvc2Z3ZCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4yL2lvc2Z3ZCIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dHJpbmdmd2QuaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Ry
aW5nZndkLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgog
ICAgc3RydWN0IGNoYXJfdHJhaXRzOwoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czxj
aGFyPjsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD47CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBhbGxvY2F0b3I7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAg
ICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3Mg
YmFzaWNfc3RyaW5nOwoKICB0eXBlZGVmIGJhc2ljX3N0cmluZzxjaGFyPiBzdHJpbmc7CiAgdHlw
ZWRlZiBiYXNpY19zdHJpbmc8d2NoYXJfdD4gd3N0cmluZzsKfQojIDQ2ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMi9pb3Nmd2QiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y
L2JpdHMvZnBvcy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9m
cG9zLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1n
bnUvYml0cy9jKytpby5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4
Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjIvY3N0ZGlvIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlv
IiAzCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jc3RkZGVmIiAxIDMKIyA0NyAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0ZGRlZiIgMwoKIyAxICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAx
NDcgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUv
c3RkZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDIwMSAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVm
IHVuc2lnbmVkIGludCBzaXplX3Q7CiMgNDkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2Nz
dGRkZWYiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcg
OjpzaXplX3Q7Cn0KIyA1MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAyIDMK
CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVk
ZS9zdGRpby5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvbG9j
YWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEg
MwojIDQ0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNs
dWRlL3N0ZGlvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAy
OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMwICIvdXNy
L2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2No
YXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGlu
dCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9f
IHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9f
IHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMv
dHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBl
ZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19p
bnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0
eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3Qg
Kl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9fdV9pbnQg
X191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcgX19pbm9f
dDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190Owp0
eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVk
ZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3VfbG9uZyBf
X3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191X2ludCBf
X2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90
OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVk
ZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29uZHNfdDsK
dHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtf
dDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90
OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKCgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0
eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBsb25nIGlu
dCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBf
X3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5
cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNm
aWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYgX191
X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoKdHlwZWRl
ZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190X3Vz
Y2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50
IF9fc29ja2xlbl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIg
MSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgi
IDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9
OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAzCgoKc3RydWN0IF9w
dGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBpbnQgX19zcGlubG9jazsK
Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVz
Y3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAgaW50IF9fZGV0YWNo
c3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0gX19zY2hl
ZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXplX3QgX19n
dWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRkcjsKICBz
aXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsK
ICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVzY3IgX19j
X3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19k
dW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVh
ZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsKICBpbnQg
X19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tpbmQ7CiAg
c3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhfdDsKCgoK
dHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0cl90
OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoKCnR5cGVkZWYgc3RydWN0IF9wdGhy
ZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19yd19sb2NrOwogIGlu
dCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZXI7CiAgX3B0aHJlYWRf
ZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZV93YWl0
aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9j
a190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7CiAgaW50IF9fcHNoYXJl
ZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVkZWYgdm9sYXRpbGUgaW50IHB0aHJl
YWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rs
b2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9yZXF1aXJlZDsKICBpbnQgX19iYV9wcmVzZW50Owog
IF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsKfSBwdGhyZWFkX2JhcnJpZXJfdDsKCgp0eXBl
ZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX2JhcnJpZXJhdHRyX3Q7CgoK
CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMTQ0ICIvdXNyL2luY2x1
ZGUvYml0cy90eXBlcy5oIiAyIDMKIyA0NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyA1NCAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYg
c3RydWN0IF9JT19GSUxFIEZJTEU7CiMgNjQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklM
RSBfX0ZJTEU7CiMgNzQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4yL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMKIyAz
MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgi
IDEgMwojIDE0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAz
MjEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUv
c3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1
ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz
CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVk
ZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAy
IDMKIyA2NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBf
X2NvdW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07
CiAgfSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmln
LmgiIDIgMwoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3Qg
X19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7
CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRl
L19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwojIDI4ICIvdXNy
L2luY2x1ZGUvZ2NvbnYuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDIgMwojIDI5ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKIyAxICIvdXNy
L2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0KewogIF9fR0NP
TlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05P
TUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19H
Q09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09O
Vl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVt
CnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0g
MHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0
YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0
YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwg
c3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50
KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVw
ICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVw
ICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZf
c3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZf
c3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252
X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBj
aGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNf
cXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpf
X2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2
b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3Ry
YW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3Ry
YW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRf
ZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJh
bnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19n
Y29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9k
bmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190
b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9m
Y3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zy
b207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50
IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07
CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7
CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50
IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0
YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2Nv
bnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZv
CnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBf
X2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2Nv
bnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlvbgp7
CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2dj
b252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBf
X2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0
cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191
aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7
CiMgMzMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9p
bmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92YV9s
aXN0IF9fZ251Y192YV9saXN0OwojIDU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgMTYw
ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9JT19G
SUxFOwojIDE3MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19sb2Nr
X3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsK
ICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5MyAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKfTsKCgplbnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9v
aywKICBfX2NvZGVjdnRfcGFydGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25v
Y29udgp9OwoKCgoKc3RydWN0IF9JT19jb2RlY3Z0CnsKICB2b2lkICgqX19jb2RlY3Z0X2Rlc3Ry
KSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29k
ZWN2dF9kb19vdXQpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiosIGNo
YXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
LCBjaGFyICoqKTsKICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9fdW5zaGlm
dCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwgY2hhciAqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFyICoqKTsKICBlbnVt
IF9fY29kZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9faW4pIChzdHJ1Y3QgX0lPX2NvZGVjdnQg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVf
dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKiosIHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICosIHdjaGFyX3QgKiopOwogIGludCAoKl9fY29k
ZWN2dF9kb19lbmNvZGluZykgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBpbnQgKCpfX2NvZGVj
dnRfZG9fYWx3YXlzX25vY29udikgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBpbnQgKCpfX2Nv
ZGVjdnRfZG9fbGVuZ3RoKSAoc3RydWN0IF9JT19jb2RlY3Z0ICosIF9fbWJzdGF0ZV90ICosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBz
aXplX3QpOwogIGludCAoKl9fY29kZWN2dF9kb19tYXhfbGVuZ3RoKSAoc3RydWN0IF9JT19jb2Rl
Y3Z0ICopOwoKICBfR19pY29udl90IF9fY2RfaW47CiAgX0dfaWNvbnZfdCBfX2NkX291dDsKfTsK
CgpzdHJ1Y3QgX0lPX3dpZGVfZGF0YQp7CiAgd2NoYXJfdCAqX0lPX3JlYWRfcHRyOwogIHdjaGFy
X3QgKl9JT19yZWFkX2VuZDsKICB3Y2hhcl90ICpfSU9fcmVhZF9iYXNlOwogIHdjaGFyX3QgKl9J
T193cml0ZV9iYXNlOwogIHdjaGFyX3QgKl9JT193cml0ZV9wdHI7CiAgd2NoYXJfdCAqX0lPX3dy
aXRlX2VuZDsKICB3Y2hhcl90ICpfSU9fYnVmX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX2J1Zl9lbmQ7
CgogIHdjaGFyX3QgKl9JT19zYXZlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX2JhY2t1cF9iYXNlOwoK
ICB3Y2hhcl90ICpfSU9fc2F2ZV9lbmQ7CgogIF9fbWJzdGF0ZV90IF9JT19zdGF0ZTsKICBfX21i
c3RhdGVfdCBfSU9fbGFzdF9zdGF0ZTsKICBzdHJ1Y3QgX0lPX2NvZGVjdnQgX2NvZGVjdnQ7Cgog
IHdjaGFyX3QgX3Nob3J0YnVmWzFdOwoKICBzdHJ1Y3QgX0lPX2p1bXBfdCAqX3dpZGVfdnRhYmxl
Owp9OwoKCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3Jl
YWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNo
YXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dy
aXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNo
YXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19z
YXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJ
TEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29s
ZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIg
X3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xv
Y2s7CiMgMzA1ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoK
CiAgc3RydWN0IF9JT19jb2RlY3Z0ICpfY29kZWN2dDsKICBzdHJ1Y3QgX0lPX3dpZGVfZGF0YSAq
X3dpZGVfZGF0YTsKCgoKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9m
IChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklMRV9w
bHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4g
c3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19G
SUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDM0NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK
dHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19i
dWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRl
X2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3Nl
ZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBl
ZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9f
cmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29v
a2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1
bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsK
Cgp0eXBlZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4g
KndyaXRlOwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBf
SU9fY29va2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25z
X3QgY29va2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRl
cm4gdm9pZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUs
IGludCBfX3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19j
b29raWUsIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJDIiB7
CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBp
bnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAo
X0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9J
T19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSB0
aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSB0
aHJvdyAoKTsKIyA0MjYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX2dl
dGMgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9f
YywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklM
RSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnAp
IHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhy
b3cgKCk7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7
CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMgNDU2
ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklM
RSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAg
ICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBfSU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jl
c3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgp
OwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkg
dGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNp
emVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAq
LCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vl
a3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQg
X0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwoKCmV4dGVybiB3aW50
X3QgX0lPX2dldHdjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX0lP
X3B1dHdjICh3Y2hhcl90IF9fd2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBfSU9fZndpZGUgKF9JT19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsKIyA1MDUg
Ii91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmd3NjYW5mIChfSU9fRklM
RSAqIF9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgX0lPX3Zmd3ByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3Qp
IHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT193cGFkbiAoX0lPX0ZJTEUgKiwgd2ludF90
LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnJlZV93YmFja3VwX2FyZWEg
KF9JT19GSUxFICopIHRocm93ICgpOwoKCgp9CiMgNzUgIi91c3IvbG9jYWwvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0eXBlZGVmIF9f
Z251Y192YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA4OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgX0dfZnBv
c190IGZwb3NfdDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0X3Q7CiMgMTM4ICIvdXNy
L2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMTM5ICIvdXNyL2xv
Y2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDIg
MwoKCgpleHRlcm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxFICpzdGRvdXQ7CmV4dGVybiBGSUxF
ICpzdGRlcnI7CiMgMTUzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCByZW1vdmUgKF9fY29uc3QgY2hhciAq
X19maWxlbmFtZSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpf
X29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqdG1w
ZmlsZSAodm9pZCkgdGhyb3cgKCk7CiMgMTY5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2
NCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnRtcG5hbSAoY2hhciAqX19zKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyAx
ODkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUv
c3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpfX2RpciwgX19j
b25zdCBjaGFyICpfX3BmeCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2Nf
XykpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
ZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZnJl
b3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAg
ICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDIzMyAiL3Vzci9s
b2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAz
CmV4dGVybiBGSUxFICpmb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVz
KSB0aHJvdyAoKTsKZXh0ZXJuIEZJTEUgKmZyZW9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpmZG9wZW4gKGludCBfX2ZkLCBf
X2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbmNv
b2tpZSAodm9pZCAqX19yZXN0cmljdCBfX21hZ2ljX2Nvb2tpZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9faW9fZnVuY3MpIHRocm93ICgp
OwoKCmV4dGVybiBGSUxFICpmbWVtb3BlbiAodm9pZCAqX19zLCBzaXplX3QgX19sZW4sIF9fY29u
c3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1zdHJl
YW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fYnVmbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCAqX19yZXN0cmljdCBfX3NpemVsb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiB2
b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBf
X2J1ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICBpbnQg
X19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIg
KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQg
c2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHJp
bnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg
cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7
CgpleHRlcm4gaW50IHNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHZmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz
dCBfX2FyZykgdGhyb3cgKCk7CgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBf
X2FyZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3Qg
X19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0ZXJuIGludCB2c25wcmludGYgKGNo
YXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJn
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAz
LCAwKSkpOwoKCgoKCmV4dGVybiBpbnQgdmFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0
ciwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZiwKICAgICAgICAgICAgICAgICAgICAgIF9f
Z251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1h
dF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IF9fYXNwcmludGYgKGNoYXIgKipf
X3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1h
dF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwpleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqX19y
ZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g
KF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKZXh0ZXJuIGludCB2ZHByaW50ZiAoaW50IF9fZmQsIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVj
X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g
KF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgZHByaW50ZiAoaW50IF9fZmQsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCgoKZXh0ZXJuIGludCBmc2Nh
bmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNj
YW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9s
aXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3Nj
YW5mX18sIDIsIDApKSk7CgoKZXh0ZXJuIGludCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMSwgMCkpKTsKCgpleHRlcm4gaW50IHZz
c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAw
KSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRl
cm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldGNo
YXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgpleHRl
cm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBj
aGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJp
Y3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpmZ2V0c191bmxvY2tl
ZCAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh
ciAqZ2V0cyAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyA0MzcgIi91c3IvbG9jYWwvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gX19zc2l6
ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRl
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0pIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0cmlj
dCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3Ry
aWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBfX3NzaXplX3QgZ2V0
bGluZSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0
cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh
bSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBj
aGFyICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50IF9fYywgRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jlc3Ry
aWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19u
LCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3QgZndy
aXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykgdGhyb3cg
KCk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3QgX19w
dHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf
X24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IGZ3
cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19z
aXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpf
X3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4g
bG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHJl
d2luZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDUwMCAiL3Vzci9sb2NhbC9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQg
ZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJv
dyAoKTsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3NfdCAq
X19yZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZnNldHBvcyAoRklM
RSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgdGhyb3cgKCk7CiMgNTM0ICIvdXNy
L2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgi
IDMKZXh0ZXJuIGludCBmc2Vla282NCAoRklMRSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBfX29mZiwg
aW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZnZXRwb3M2NCAoRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CmV4
dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAqX19w
b3MpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRl
cm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBj
bGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZl
b2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZXJyb3Jf
dW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHBlcnJv
ciAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXNfbmVycjsK
ZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwoKCmV4dGVybiBpbnQg
X3N5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IF9zeXNfZXJybGlzdFtdOwoK
CgoKCmV4dGVybiBpbnQgZmlsZW5vIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIg
Kl9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpzdHJ1
Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAq
X19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBvYnN0
YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJncykgdGhyb3cg
KCk7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
CgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDY0
MSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9z
dGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMSAzCiMgMzMgIi91c3Iv
aW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDMKaW5saW5lIGludAp2cHJpbnRmIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQp7CiAgcmV0
dXJuIHZmcHJpbnRmIChzdGRvdXQsIF9fZm10LCBfX2FyZyk7Cn0KCgppbmxpbmUgaW50CmdldGNo
YXIgKHZvaWQpIHRocm93ICgpCnsKICByZXR1cm4gX0lPX2dldGMgKHN0ZGluKTsKfQoKCgoKaW5s
aW5lIGludApnZXRjX3VubG9ja2VkIChGSUxFICpfX2ZwKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgo
X19mcCktPl9JT19yZWFkX3B0ciA+PSAoX19mcCktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKF9f
ZnApIDogKih1bnNpZ25lZCBjaGFyICopIChfX2ZwKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKaW5s
aW5lIGludApnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoc3Rk
aW4pLT5fSU9fcmVhZF9wdHIgPj0gKHN0ZGluKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoc3Rk
aW4pIDogKih1bnNpZ25lZCBjaGFyICopIChzdGRpbiktPl9JT19yZWFkX3B0cisrKTsKfQoKCgoK
aW5saW5lIGludApwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9JT19wdXRj
IChfX2MsIHN0ZG91dCk7Cn0KCgoKCmlubGluZSBpbnQKZnB1dGNfdW5sb2NrZWQgKGludCBfX2Ms
IEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dy
aXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3Ry
ZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFt
KS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmlubGluZSBpbnQKcHV0Y191bmxv
Y2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19z
dHJlYW0pLT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19v
dmVyZmxvdyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hh
cikgKCooX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKaW5saW5lIGlu
dApwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKHN0ZG91
dCktPl9JT193cml0ZV9wdHIgPj0gKHN0ZG91dCktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxv
dyAoc3Rkb3V0LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHN0
ZG91dCktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgppbmxpbmUgX19zc2l6ZV90
CmdldGxpbmUgKGNoYXIgKipfX2xpbmVwdHIsIHNpemVfdCAqX19uLCBGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCkKewogIHJldHVybiBfX2dldGRlbGltIChfX2xpbmVwdHIsIF9fbiwgJ1xuJywgX19z
dHJlYW0pOwp9CgoKCgoKaW5saW5lIGludApmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MTApICE9IDApOwp9
CgoKaW5saW5lIGludApmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7
CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgyMCkgIT0gMCk7Cn0KIyA2NDIgIi91
c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8u
aCIgMiAzCgoKfQojIDUzICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDIgMwoj
IDk3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDMKbmFtZXNwYWNlIHN0ZAp7
CiAgdXNpbmcgOjpGSUxFOwogIHVzaW5nIDo6ZnBvc190OwoKICB1c2luZyA6OmNsZWFyZXJyOwog
IHVzaW5nIDo6ZmNsb3NlOwogIHVzaW5nIDo6ZmVvZjsKICB1c2luZyA6OmZlcnJvcjsKICB1c2lu
ZyA6OmZmbHVzaDsKICB1c2luZyA6OmZnZXRjOwogIHVzaW5nIDo6ZmdldHBvczsKICB1c2luZyA6
OmZnZXRzOwogIHVzaW5nIDo6Zm9wZW47CiAgdXNpbmcgOjpmcHJpbnRmOwogIHVzaW5nIDo6ZnB1
dGM7CiAgdXNpbmcgOjpmcHV0czsKICB1c2luZyA6OmZyZWFkOwogIHVzaW5nIDo6ZnJlb3BlbjsK
ICB1c2luZyA6OmZzY2FuZjsKICB1c2luZyA6OmZzZWVrOwogIHVzaW5nIDo6ZnNldHBvczsKICB1
c2luZyA6OmZ0ZWxsOwogIHVzaW5nIDo6ZndyaXRlOwogIHVzaW5nIDo6Z2V0YzsKICB1c2luZyA6
OmdldGNoYXI7CiAgdXNpbmcgOjpnZXRzOwogIHVzaW5nIDo6cGVycm9yOwogIHVzaW5nIDo6cHJp
bnRmOwogIHVzaW5nIDo6cHV0YzsKICB1c2luZyA6OnB1dGNoYXI7CiAgdXNpbmcgOjpwdXRzOwog
IHVzaW5nIDo6cmVtb3ZlOwogIHVzaW5nIDo6cmVuYW1lOwogIHVzaW5nIDo6cmV3aW5kOwogIHVz
aW5nIDo6c2NhbmY7CiAgdXNpbmcgOjpzZXRidWY7CiAgdXNpbmcgOjpzZXR2YnVmOwogIHVzaW5n
IDo6c3ByaW50ZjsKICB1c2luZyA6OnNzY2FuZjsKICB1c2luZyA6OnRtcGZpbGU7CiAgdXNpbmcg
Ojp0bXBuYW07CiAgdXNpbmcgOjp1bmdldGM7CiAgdXNpbmcgOjp2ZnByaW50ZjsKICB1c2luZyA6
OnZwcmludGY7CiAgdXNpbmcgOjp2c3ByaW50ZjsKfQojIDE1MyAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvY3N0ZGlvIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6c25wcmlu
dGY7CiAgdXNpbmcgOjp2ZnNjYW5mOwogIHVzaW5nIDo6dnNjYW5mOwogIHVzaW5nIDo6dnNucHJp
bnRmOwogIHVzaW5nIDo6dnNzY2FuZjsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVf
Y3h4OjpzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6OnZmc2NhbmY7CiAgdXNpbmcgX19nbnVf
Y3h4Ojp2c2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c25wcmludGY7CiAgdXNpbmcgX19nbnVf
Y3h4Ojp2c3NjYW5mOwp9CiMgMzYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMt
bGludXgtZ251L2JpdHMvYysraW8uaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci5oIiAxIDMKIyA5OCAiL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgiIDMKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVs
dC5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1n
bnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEg
MwojIDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3NjaGVk
LmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDEgMwojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMK
ICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgMzAg
Ii91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVk
LmgiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBzY2hlZF9w
YXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CgpleHRlcm4gIkMiIHsKCgoK
ZXh0ZXJuIGludCBjbG9uZSAoaW50ICgqX19mbikgKHZvaWQgKl9fYXJnKSwgdm9pZCAqX19jaGls
ZF9zdGFjaywKICAgICAgICAgICAgICAgICAgaW50IF9fZmxhZ3MsIHZvaWQgKl9fYXJnKSB0aHJv
dyAoKTsKCgp9CiMgMzMgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgoKCmV4dGVybiAiQyIg
ewoKCmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIF9fY29uc3Qgc3Ry
dWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2No
ZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQs
IGludCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3Ry
dWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dl
dHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF95
aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4
IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9y
aXR5X21pbiAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3Jy
X2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3QpIHRocm93
ICgpOwoKfQojIDIxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gIkMiIHsK
CgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIv
aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCgoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS90aW1l
LmgiIDIgMwojIDU5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX19jbG9ja190IGNs
b2NrX3Q7CiMgNzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX3RpbWVfdCB0aW1l
X3Q7CiMgODIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9j
a2lkX3Q7CiMgOTQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX3RpbWVyX3QgdGlt
ZXJfdDsKIyAxMTggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRtCnsKICBpbnQgdG1f
c2VjOwogIGludCB0bV9taW47CiAgaW50IHRtX2hvdXI7CiAgaW50IHRtX21kYXk7CiAgaW50IHRt
X21vbjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1fd2RheTsKICBpbnQgdG1feWRheTsKICBpbnQg
dG1faXNkc3Q7CgoKICBsb25nIGludCB0bV9nbXRvZmY7CiAgX19jb25zdCBjaGFyICp0bV96b25l
OwoKCgoKfTsKCgoKCnN0cnVjdCBpdGltZXJzcGVjCiAgewogICAgc3RydWN0IHRpbWVzcGVjIGl0
X2ludGVydmFsOwogICAgc3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOwogIH07CgoKc3RydWN0IHNp
Z2V2ZW50OwoKCgoKCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCgoKCmV4dGVybiBjbG9ja190
IGNsb2NrICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190
aW1lcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEs
IHRpbWVfdCBfX3RpbWUwKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgpleHRlcm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f
bWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19y
ZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJwdGltZSAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0bSAqX190cCkKICAgICB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190
aW1lcikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0
aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAq
bG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gY2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRo
cm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAq
X19yZXN0cmljdCBfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0
IF9fYnVmKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3Qg
Kl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJp
Y3QgX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4g
aW50IF9fZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNo
YXIgKnR6bmFtZVsyXTsKCgoKZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IGRheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJu
IGludCBzdGltZSAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7CiMgMjcxICIvdXNy
L2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9fdHAp
IHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHApIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgZHlzaXplIChpbnQgX195ZWFyKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29uc3Qg
c3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLAogICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xv
Y2tfZ2V0cmVzIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3Jlcykg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19p
ZCwgc3RydWN0IHRpbWVzcGVjICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX3Nl
dHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190
cCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19uYW5vc2xlZXAgKGNsb2NraWRf
dCBfX2Nsb2NrX2lkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCB0aW1lc3BlYyAqX19yZW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0
Y3B1Y2xvY2tpZCAocGlkX3QgX19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJpY3QgX19ldnAsCiAg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl90ICpfX3Jlc3RyaWN0IF9fdGltZXJpZCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBpbnQg
X19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJz
cGVjICpfX3Jlc3RyaWN0IF9fdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX19vdmFsdWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
dGltZXJfZ2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQsIHN0cnVjdCBpdGltZXJzcGVjICpfX3Zh
bHVlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJf
dCBfX3RpbWVyaWQpIHRocm93ICgpOwojIDM0MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRl
cm4gaW50IGdldGRhdGVfZXJyOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUgKF9fY29u
c3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwojIDM1NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
MwpleHRlcm4gaW50IGdldGRhdGVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5n
LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkg
dGhyb3cgKCk7CgoKCn0KIyAyMiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKIyAxICIv
dXNyL2luY2x1ZGUvc2lnbmFsLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMK
ZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAi
L3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7
CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0
IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMg
MzQgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzCiMgNDggIi91c3IvaW5jbHVkZS9zaWduYWwu
aCIgMwp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CiMgMzcxICIvdXNyL2luY2x1ZGUvc2ln
bmFsLmgiIDMKfQojIDI1ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9wdGhyZWFk
LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2luaXRzcGluLmgiIDEgMwojIDI3ICIvdXNy
L2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgpleHRlcm4gIkMiIHsKIyA1OSAiL3Vzci9pbmNsdWRl
L3B0aHJlYWQuaCIgMwplbnVtCnsKICBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSwKCiAgUFRIUkVB
RF9DUkVBVEVfREVUQUNIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX0lOSEVSSVRfU0NIRUQsCgog
IFBUSFJFQURfRVhQTElDSVRfU0NIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX1NDT1BFX1NZU1RF
TSwKCiAgUFRIUkVBRF9TQ09QRV9QUk9DRVNTCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9NVVRFWF9U
SU1FRF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VS
Uk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoKICAsCiAgUFRIUkVBRF9N
VVRFWF9OT1JNQUwgPSBQVEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBUSFJFQURfTVVURVhfUkVD
VVJTSVZFID0gUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJP
UkNIRUNLID0gUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfREVG
QVVMVCA9IFBUSFJFQURfTVVURVhfTk9STUFMCgoKCiAgLCBQVEhSRUFEX01VVEVYX0ZBU1RfTlAg
PSBQVEhSRUFEX01VVEVYX0FEQVBUSVZFX05QCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9QUk9DRVNT
X1BSSVZBVEUsCgogIFBUSFJFQURfUFJPQ0VTU19TSEFSRUQKCn07CgoKZW51bQp7CiAgUFRIUkVB
RF9SV0xPQ0tfUFJFRkVSX1JFQURFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVS
X05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTk9OUkVDVVJTSVZFX05QLAogIFBU
SFJFQURfUldMT0NLX0RFRkFVTFRfTlAgPSBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05Q
Cn07CiMgMTMxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCnN0cnVjdCBfcHRocmVhZF9jbGVh
bnVwX2J1ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKik7CiAgdm9pZCAqX19hcmc7
CiAgaW50IF9fY2FuY2VsdHlwZTsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9f
cHJldjsKfTsKCgoKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxFLAoKICBQVEhSRUFEX0NB
TkNFTF9ESVNBQkxFCgp9OwplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9ERUZFUlJFRCwKCiAgUFRI
UkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCgp9OwojIDE2MyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQu
aCIgMwpleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRlIChwdGhyZWFkX3QgKl9fcmVzdHJpY3QgX190
aHJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9hdHRyX3Qg
Kl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICooKl9f
c3RhcnRfcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg
Kl9fcmVzdHJpY3QgX19hcmcpIHRocm93ICgpOwoKCmV4dGVybiBwdGhyZWFkX3QgcHRocmVhZF9z
ZWxmICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfZXF1YWwgKHB0aHJlYWRf
dCBfX3RocmVhZDEsIHB0aHJlYWRfdCBfX3RocmVhZDIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lk
IHB0aHJlYWRfZXhpdCAodm9pZCAqX19yZXR2YWwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2pvaW4gKHB0aHJlYWRf
dCBfX3RoLCB2b2lkICoqX190aHJlYWRfcmV0dXJuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50
IHB0aHJlYWRfZGV0YWNoIChwdGhyZWFkX3QgX190aCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9pbml0IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9kZXN0cm95IChwdGhyZWFkX2F0dHJfdCAqX19hdHRy
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSAocHRo
cmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX2RldGFjaHN0YXRlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0
cl9nZXRkZXRhY2hzdGF0ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2RldGFjaHN0YXRlKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX2F0
dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcGFyYW0gKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9f
cmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0g
Kl9fcmVzdHJpY3QgX19wYXJhbSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf
YXR0cl9zZXRzY2hlZHBvbGljeSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fcG9saWN5
KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcG9saWN5
IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX3BvbGljeSkKICAg
ICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQgKHB0
aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IF9faW5oZXJpdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf
Z2V0aW5oZXJpdHNjaGVkIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJp
Y3QgX19pbmhlcml0KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3Nl
dHNjb3BlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19zY29wZSkKICAgICB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY29wZSAoX19jb25zdCBwdGhyZWFkX2F0
dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgKl9fcmVzdHJpY3QgX19zY29wZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9hdHRyX3NldGd1YXJkc2l6ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ndWFyZHNpemUpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGd1YXJkc2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0
dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
YXR0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fZ3VhcmRzaXplKQogICAgIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIgKHB0aHJlYWRfYXR0cl90ICpf
X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19zdGFj
a2FkZHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkciAo
X19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fYXR0ciwgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIpCiAg
ICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2sgKHB0aHJl
YWRfYXR0cl90ICpfX2F0dHIsIHZvaWQgKl9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9nZXRzdGFjayAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmlj
dCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19yZXN0
cmljdCBfX3N0YWNrYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCAqX19yZXN0cmljdCBfX3N0YWNrc2l6ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX2F0dHJfc2V0c3RhY2tzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplIChfX2NvbnN0IHB0aHJlYWRf
YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19zdGFja3NpemUpCiAgICAgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgcHRocmVhZF9nZXRhdHRyX25wIChwdGhyZWFkX3QgX190aCwgcHRocmVhZF9h
dHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzY2hl
ZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLCBpbnQgX19wb2xpY3ksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19w
YXJhbSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSAo
cHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCAqX19yZXN0cmljdCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0Y29uY3VycmVuY3kgKHZvaWQpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjb25jdXJyZW5jeSAoaW50IF9fbGV2ZWwpIHRocm93
ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3lpZWxkICh2b2lkKSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0
cmljdCBfX211dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhy
ZWFkX211dGV4YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX211dGV4X2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9kZXN0
cm95IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9tdXRleF90cnlsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgp
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrIChwdGhyZWFk
X211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX211dGV4X3VubG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4
YXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJf
ZGVzdHJveSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0
dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmlj
dCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpf
X3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4
YXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlIChwdGhyZWFkX211dGV4YXR0
cl90ICpfX2F0dHIsIGludCBfX2tpbmQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy
ZWFkX211dGV4YXR0cl9nZXR0eXBlIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVz
dHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAq
X19yZXN0cmljdCBfX2tpbmQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2Nv
bmRfaW5pdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqX19yZXN0cmljdAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbmRfYXR0cikgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX2NvbmRfZGVzdHJveSAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfc2lnbmFsIChwdGhyZWFkX2NvbmRfdCAq
X19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QgKHB0
aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29u
ZF93YWl0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4KSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQgKHB0aHJlYWRfY29u
ZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfaW5pdCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0
dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95IChwdGhy
ZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2Nv
bmRhdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJl
ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX3NldHBzaGFyZWQgKHB0
aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJl
YWRfcndsb2NrX2luaXQgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJf
dCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95IChwdGhyZWFkX3J3bG9j
a190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19yZGxv
Y2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfcndsb2NrX3RyeXJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RpbWVkcmRsb2NrIChwdGhyZWFkX3J3
bG9ja190ICpfX3Jlc3RyaWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHB0aHJlYWRfcndsb2NrX3dybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2sp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrIChwdGhyZWFk
X3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xv
Y2tfdGltZWR3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVz
cGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
YWJzdGltZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdW5sb2NrIChw
dGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX3J3bG9ja2F0dHJfaW5pdCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cikgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJveSAocHRocmVhZF9yd2xv
Y2thdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0
dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hh
cmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRwc2hhcmVk
IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfcndsb2NrYXR0cl9nZXRraW5kX25wIChfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90
ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAq
X19wcmVmKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRraW5k
X25wIChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19wcmVmKSB0aHJvdyAoKTsKIyA1MDkgIi91c3IvaW5j
bHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5faW5pdCAocHRocmVhZF9z
cGlubG9ja190ICpfX2xvY2ssIGludCBfX3BzaGFyZWQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX3NwaW5fZGVzdHJveSAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2xvY2sgKHB0aHJlYWRfc3BpbmxvY2tf
dCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl90cnlsb2NrIChw
dGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X3NwaW5fdW5sb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl9pbml0IChwdGhyZWFkX2JhcnJpZXJfdCAqX19yZXN0
cmljdCBfX2JhcnJpZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
cHRocmVhZF9iYXJyaWVyYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fYXR0ciwgdW5zaWduZWQgaW50IF9fY291bnQpIHRocm93ICgpOwoKZXh0ZXJu
IGludCBwdGhyZWFkX2JhcnJpZXJfZGVzdHJveSAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmll
cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfaW5pdCAocHRocmVh
ZF9iYXJyaWVyYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2Jh
cnJpZXJhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAo
KTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0
aHJlYWRfYmFycmllcmF0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJu
IGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfYmFycmllcmF0dHJf
dCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl93YWl0IChw
dGhyZWFkX2JhcnJpZXJfdCAqX19iYXJyaWVyKSB0aHJvdyAoKTsKIyA1NTYgIi91c3IvaW5jbHVk
ZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5
X3QgKl9fa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fZGVzdHJf
ZnVuY3Rpb24pICh2b2lkICopKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2Rl
bGV0ZSAocHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X3NldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19wb2ludGVyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9p
ZCAqcHRocmVhZF9nZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CiMg
NTc2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChw
dGhyZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQg
cHRocmVhZF9zZXRjYW5jZWxzdGF0ZSAoaW50IF9fc3RhdGUsIGludCAqX19vbGRzdGF0ZSkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWx0eXBlIChpbnQgX190eXBlLCBp
bnQgKl9fb2xkdHlwZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbCAocHRo
cmVhZF90IF9fdGhyZWFkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNh
bmNlbCAodm9pZCkgdGhyb3cgKCk7CiMgNjEwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4
dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBf
YnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICgqX19yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICpfX2FyZykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVh
bnVwX3BvcCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwojIDYz
MSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVw
X3B1c2hfZGVmZXIgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkg
KHZvaWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq
X19hcmcpIHRocm93ICgpOwojIDY0MiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4g
dm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcF9yZXN0b3JlIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51
cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19leGVjdXRlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0
Y3B1Y2xvY2tpZCAocHRocmVhZF90IF9fdGhyZWFkX2lkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xvY2tpZF90ICpfX2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvYml0cy9z
aWd0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfc2lnbWFzayAoaW50IF9faG93LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9f
bmV3bWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2lnc2V0X3QgKl9fcmVzdHJp
Y3QgX19vbGRtYXNrKXRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9raWxsIChwdGhyZWFk
X3QgX190aHJlYWQsIGludCBfX3NpZ25vKSB0aHJvdyAoKTsKIyA2NTYgIi91c3IvaW5jbHVkZS9w
dGhyZWFkLmgiIDIgMwojIDY3MSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50
IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lk
IHB0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzX25wICh2b2lkKSB0aHJvdyAoKTsKCn0KIyAzOCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRl
ZmF1bHQuaCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19ndGhyZWFkX2tleV90Owp0eXBl
ZGVmIHB0aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7CnR5cGVkZWYgcHRocmVhZF9tdXRl
eF90IF9fZ3RocmVhZF9tdXRleF90OwoKCgoKCgojcHJhZ21hIHdlYWsgcHRocmVhZF9vbmNlCiNw
cmFnbWEgd2VhayBwdGhyZWFkX2tleV9jcmVhdGUKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfa2V5X2Rl
bGV0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVh
ZF9zZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9jcmVhdGUKCiNwcmFnbWEgd2VhayBw
dGhyZWFkX211dGV4X2xvY2sgCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3RyeWxvY2sgCiNw
cmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3VubG9jayAKIyA4MCAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwpzdGF0aWMg
aW5saW5lIGludApfX2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpCnsKICBzdGF0aWMgdm9pZCAqY29u
c3QgX19ndGhyZWFkX2FjdGl2ZV9wdHIgPSAodm9pZCAqKSAmcHRocmVhZF9jcmVhdGU7CiAgcmV0
dXJuIF9fZ3RocmVhZF9hY3RpdmVfcHRyICE9IDA7Cn0KIyA0MzcgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGlj
IGlubGluZSBpbnQKX19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZvaWQg
KCpmdW5jKSAodm9pZCkpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJu
IHB0aHJlYWRfb25jZSAob25jZSwgZnVuYyk7CiAgZWxzZQogICAgcmV0dXJuIC0xOwp9CgpzdGF0
aWMgaW5saW5lIGludApfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICprZXks
IHZvaWQgKCpkdG9yKSAodm9pZCAqKSkKewogIHJldHVybiBwdGhyZWFkX2tleV9jcmVhdGUgKGtl
eSwgZHRvcik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZHRvciAoX19ndGhy
ZWFkX2tleV90IGtleSwgdm9pZCAqcHRyKQp7CgogIGlmIChwdHIpCiAgICByZXR1cm4gcHRocmVh
ZF9zZXRzcGVjaWZpYyAoa2V5LCAwKTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlu
bGluZSBpbnQKX19ndGhyZWFkX2tleV9kZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICBy
ZXR1cm4gcHRocmVhZF9rZXlfZGVsZXRlIChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgKgpf
X2d0aHJlYWRfZ2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRo
cmVhZF9nZXRzcGVjaWZpYyAoa2V5KTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX3Nl
dHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2b2lkICpwdHIpCnsKICByZXR1
cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCBwdHIpOwp9CgpzdGF0aWMgaW5saW5lIGludApf
X2d0aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9f
Z3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX211dGV4X2xvY2sgKG11dGV4
KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211
dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRf
YWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF90cnlsb2NrIChtdXRleCk7CiAg
ZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF91
bmxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZl
X3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sgKG11dGV4KTsKICBlbHNlCiAg
ICByZXR1cm4gMDsKfQojIDk5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxp
bnV4LWdudS9iaXRzL2d0aHIuaCIgMiAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y
L2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAg
dHlwZWRlZiBsb25nIHN0cmVhbW9mZjsKICB0eXBlZGVmIHB0cmRpZmZfdCBzdHJlYW1zaXplOwoK
ICB0eXBlZGVmIHB0cmRpZmZfdCB3c3RyZWFtc2l6ZTsKCiAgdHlwZWRlZiBmcG9zX3QgX19jX3N0
cmVhbXBvczsKCiAgdHlwZWRlZiBfX2d0aHJlYWRfbXV0ZXhfdCBfX2NfbG9jazsKCgogIHR5cGVk
ZWYgRklMRSBfX2NfZmlsZTsKCgogIHN0cnVjdCBfX2lvc19mbGFncwogIHsKICAgIHR5cGVkZWYg
c2hvcnQgX19pbnRfdHlwZTsKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19ib29sYWxw
aGEgPSAweDAwMDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19kZWMgPSAweDAwMDI7
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19maXhlZCA9IDB4MDAwNDsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX2hleCA9IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX2ludGVybmFsID0gMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1NfbGVmdCA9IDB4MDAyMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX29jdCA9IDB4
MDA0MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3JpZ2h0ID0gMHgwMDgwOwogICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2NpZW50aWZpYyA9IDB4MDEwMDsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3diYXNlID0gMHgwMjAwOwogICAgc3RhdGljIGNvbnN0
IF9faW50X3R5cGUgX1Nfc2hvd3BvaW50ID0gMHgwNDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50
X3R5cGUgX1Nfc2hvd3BvcyA9IDB4MDgwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X3NraXB3cyA9IDB4MTAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VuaXRidWYg
PSAweDIwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191cHBlcmNhc2UgPSAweDQw
MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hZGp1c3RmaWVsZCA9IDB4MDAyMCB8
IDB4MDA4MCB8IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jhc2VmaWVs
ZCA9IDB4MDAwMiB8IDB4MDA0MCB8IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX2Zsb2F0ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX2JhZGJpdCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19l
b2ZiaXQgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmFpbGJpdCA9IDB4
MDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FwcCA9IDB4MDE7CiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19hdGUgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50
X3R5cGUgX1NfYmluID0gMHgwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2luID0g
MHgwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX291dCA9IDB4MTA7CiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU190cnVuYyA9IDB4MjA7CiAgfTsKfQojIDQ1ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Zwb3MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjIvY3djaGFyIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv
Y3djaGFyIiAzCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3RpbWUiIDEgMwoj
IDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jdGltZSIgMwojIDY0ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMi9jdGltZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmNsb2Nr
X3Q7CiAgdXNpbmcgOjp0aW1lX3Q7CiAgdXNpbmcgOjp0bTsKCiAgdXNpbmcgOjpjbG9jazsKICB1
c2luZyA6OmRpZmZ0aW1lOwogIHVzaW5nIDo6bWt0aW1lOwogIHVzaW5nIDo6dGltZTsKICB1c2lu
ZyA6OmFzY3RpbWU7CiAgdXNpbmcgOjpjdGltZTsKICB1c2luZyA6OmdtdGltZTsKICB1c2luZyA6
OmxvY2FsdGltZTsKICB1c2luZyA6OnN0cmZ0aW1lOwp9CiMgNTIgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2N3Y2hhciIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMg
NDAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDEgIi91c3IvaW5j
bHVkZS93Y2hhci5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVk
ZS93Y2hhci5oIiAyIDMKIyA4NSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBfX21i
c3RhdGVfdCBtYnN0YXRlX3Q7CiMgMTA1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpzdHJ1Y3Qg
dG07CgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NweSAod2NoYXJfdCAqX19y
ZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2NzbmNweSAod2No
YXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoK
ZXh0ZXJuIHdjaGFyX3QgKndjc2NhdCAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYykgdGhy
b3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2NzbmNhdCAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rl
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3NjbXAgKF9f
Y29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCB3Y3NuY21wIChfX2NvbnN0
IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCB3Y3NjYXNl
Y21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCB3Y3NuY2FzZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2Nv
bnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKCgojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2lu
Y2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0
cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0
IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGlu
dCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xvY2FsZV90OwojIDE0NCAiL3Vzci9pbmNsdWRlL3dj
aGFyLmgiIDIgMwoKZXh0ZXJuIGludCBfX3djc2Nhc2VjbXBfbCAoX19jb25zdCB3Y2hhcl90ICpf
X3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX3djc25jYXNlY21wX2wgKF9f
Y29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHdjc2NvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hh
cl90ICpfX3MyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3N4ZnJtICh3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBf
X3djc2NvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIs
CiAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpl
eHRlcm4gc2l6ZV90IF9fd2NzeGZybV9sICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3Qg
Kl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3Qg
X19sb2MpIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3Y3NkdXAgKF9fY29uc3Qgd2NoYXJf
dCAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4g
d2NoYXJfdCAqd2NzY2hyIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAq
d2NzcmNociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2No
cm51bCAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX193YykKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgd2NzY3NwbiAoX19j
b25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX3JlamVjdCkKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHdjc3NwbiAo
X19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3Nw
YnJrIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3Qg
Kndjc3N0ciAoX19jb25zdCB3Y2hhcl90ICpfX2hheXN0YWNrLCBfX2NvbnN0IHdjaGFyX3QgKl9f
bmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRl
cm4gd2NoYXJfdCAqd2Nzd2NzIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qg
d2NoYXJfdCAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3N0b2sgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAog
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZWxp
bSwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19wdHIpIHRo
cm93ICgpOwoKCmV4dGVybiBzaXplX3Qgd2NzbGVuIChfX2NvbnN0IHdjaGFyX3QgKl9fcykgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBzaXplX3Qgd2Nzbmxl
biAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY2hyIChf
X2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCB3bWVtY21wIChfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNweSAod2NoYXJf
dCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gd2No
YXJfdCAqd21lbW1vdmUgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6
ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd21lbXNldCAod2NoYXJf
dCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gd2No
YXJfdCAqd21lbXBjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikK
ICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gd2ludF90IGJ0b3djIChpbnQgX19jKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCB3Y3RvYiAod2ludF90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgbWJzaW5pdCAoX19jb25zdCBtYnN0YXRlX3QgKl9fcHMpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gc2l6ZV90IG1icnRvd2MgKHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9f
cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywgd2NoYXJfdCBfX3djLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0
cmljdCBfX3BzKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IF9fbWJybGVuIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICBt
YnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgbWJybGVu
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAg
ICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4g
X19pbmxpbmUgc2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6
ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0
cmljdCBfX3BzKSB0aHJvdyAoKQp7IHJldHVybiAoX19wcyAhPSBfX251bGwKICAgICAgICAgID8g
bWJydG93YyAoX19udWxsLCBfX3MsIF9fbiwgX19wcykgOiBfX21icmxlbiAoX19zLCBfX24sIF9f
bnVsbCkpOyB9CgoKCgpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJfdCAqX19yZXN0cmlj
dCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJp
Y3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVf
dCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NydG9tYnMg
KGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIHNpemVfdCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVf
dCBfX25tYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4sIG1ic3RhdGVf
dCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJz
IChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fbndjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWJz
dGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHdjd2lk
dGggKHdjaGFyX3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3N3aWR0aCAoX19jb25z
dCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUg
d2NzdG9kIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRl
cm4gZmxvYXQgd2NzdG9mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7
CmV4dGVybiBsb25nIGRvdWJsZSB3Y3N0b2xkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGludCB3Y3N0b2wgKF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFy
X3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0
cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9u
X18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgd2NzdG9xIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9f
CmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdXEgKF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgpfX2V4dGVuc2lvbl9fCmV4
dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4
dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxsIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsKIyA0MTAgIi91c3IvaW5jbHVkZS93
Y2hhci5oIiAzCmV4dGVybiBsb25nIGludCBfX3djc3RvbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBf
X3djc3RvdWxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xv
Y2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp
bnQgX193Y3N0b2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxl
X3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBs
b25nIGludCBfX3djc3RvdWxsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVy
biBkb3VibGUgX193Y3N0b2RfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
X19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBfX3djc3RvZl9s
IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAg
ICAgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2wgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBfX3dj
c3RvZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQgX193Y3N0b2ZfaW50ZXJu
YWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3Vw
KQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2ludGVybmFsIChf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCmV4
dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoq
X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25n
IGludCBfX3djc3RvdWxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNp
b25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfaW50ZXJuYWwgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgp
OwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91
bGxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBfX2lubGluZSBkb3Vi
bGUgd2NzdG9kIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93
ICgpCnsgcmV0dXJuIF9fd2NzdG9kX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsgfQpl
eHRlcm4gX19pbmxpbmUgbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
YmFzZSkgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b2xfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw
dHIsIF9fYmFzZSwgMCk7IH0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgaW50IHdjc3Rv
dWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRo
cm93ICgpCnsgcmV0dXJuIF9fd2NzdG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19i
YXNlLCAwKTsgfQoKCmV4dGVybiBfX2lubGluZSBmbG9hdCB3Y3N0b2YgKF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFy
X3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvZl9pbnRl
cm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91Ymxl
IHdjc3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikg
dGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b2xkX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAw
KTsgfQoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQgd2NzdG9x
IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsgcmV0
dXJuIF9fd2NzdG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsgfQpf
X2V4dGVuc2lvbl9fCmV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3Rv
dXEgKF9fY29uc3Qgd2NoYXJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkg
dGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwg
X19iYXNlLCAwKTsgfQoKCgoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjcGNweSAod2NoYXJfdCAqX19k
ZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3Qg
KndjcG5jcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYywgc2l6ZV90
IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZndpZGUgKF9fRklMRSAqX19m
cCwgaW50IF9fbW9kZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZndwcmludGYgKF9fRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB3
cHJpbnRmIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0
aHJvdyAoKSA7CgpleHRlcm4gaW50IHN3cHJpbnRmICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywg
c2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCmV4dGVybiBpbnQgdmZ3cHJpbnRm
IChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgX19nbnVj
X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB2d3ByaW50ZiAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBf
X2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJuIGludCB2c3dwcmlu
dGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAg
ICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCgpleHRlcm4g
aW50IGZ3c2NhbmYgKF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJv
dyAoKSA7CgpleHRlcm4gaW50IHdzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
Zm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBzd3NjYW5mIChfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCgoKCmV4dGVy
biBpbnQgdmZ3c2NhbmYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg
ICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB2
d3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAg
ICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGlu
dCB2c3dzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAg
ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKCgpleHRl
cm4gd2ludF90IGZnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50
X3QgZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgZ2V0
d2NoYXIgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IGZwdXR3YyAod2NoYXJfdCBf
X3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBwdXR3YyAod2No
YXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHB1
dHdjaGFyICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3
cyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAg
ICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
ZnB1dHdzIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywKICAgICAgICAgICAgICAg
ICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50
X3QgdW5nZXR3YyAod2ludF90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoK
CmV4dGVybiB3aW50X3QgZ2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwpleHRlcm4gd2ludF90IGdldHdjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRl
cm4gd2ludF90IGZnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIHdpbnRfdCBmcHV0d2NfdW5sb2NrZWQgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3QgcHV0d2NfdW5sb2NrZWQgKHdjaGFyX3Qg
X193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgcHV0d2NoYXJf
dW5sb2NrZWQgKHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICpmZ2V0
d3NfdW5sb2NrZWQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywgaW50IF9fbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IGZwdXR3c191bmxvY2tlZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJp
Y3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gc2l6ZV90IHdjc2Z0aW1lICh3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsK
IyA2ODAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCn0KIyA1NSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvY3djaGFyIiAyIDMKIyA2OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3dj
aGFyIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWJzdGF0ZV90Owp9CiMgMTMzICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcg
Ojp3aW50X3Q7CgogIHVzaW5nIDo6YnRvd2M7CiAgdXNpbmcgOjpmZ2V0d2M7CiAgdXNpbmcgOjpm
Z2V0d3M7CiAgdXNpbmcgOjpmcHV0d2M7CiAgdXNpbmcgOjpmcHV0d3M7CiAgdXNpbmcgOjpmd2lk
ZTsKICB1c2luZyA6OmZ3cHJpbnRmOwogIHVzaW5nIDo6ZndzY2FuZjsKICB1c2luZyA6OmdldHdj
OwogIHVzaW5nIDo6Z2V0d2NoYXI7CiAgdXNpbmcgOjptYnJsZW47CiAgdXNpbmcgOjptYnJ0b3dj
OwogIHVzaW5nIDo6bWJzaW5pdDsKICB1c2luZyA6Om1ic3J0b3djczsKICB1c2luZyA6OnB1dHdj
OwogIHVzaW5nIDo6cHV0d2NoYXI7CiAgdXNpbmcgOjpzd3ByaW50ZjsKICB1c2luZyA6OnN3c2Nh
bmY7CiAgdXNpbmcgOjp1bmdldHdjOwogIHVzaW5nIDo6dmZ3cHJpbnRmOwogIHVzaW5nIDo6dmZ3
c2NhbmY7CiAgdXNpbmcgOjp2c3dwcmludGY7CiAgdXNpbmcgOjp2c3dzY2FuZjsKICB1c2luZyA6
OnZ3cHJpbnRmOwogIHVzaW5nIDo6dndzY2FuZjsKICB1c2luZyA6OndjcnRvbWI7CiAgdXNpbmcg
Ojp3Y3NjYXQ7CiAgdXNpbmcgOjp3Y3NjbXA7CiAgdXNpbmcgOjp3Y3Njb2xsOwogIHVzaW5nIDo6
d2NzY3B5OwogIHVzaW5nIDo6d2NzY3NwbjsKICB1c2luZyA6Ondjc2Z0aW1lOwogIHVzaW5nIDo6
d2NzbGVuOwogIHVzaW5nIDo6d2NzbmNhdDsKICB1c2luZyA6Ondjc25jbXA7CiAgdXNpbmcgOjp3
Y3NuY3B5OwogIHVzaW5nIDo6d2NzcnRvbWJzOwogIHVzaW5nIDo6d2Nzc3BuOwogIHVzaW5nIDo6
d2NzdG9kOwogIHVzaW5nIDo6d2NzdG9mOwogIHVzaW5nIDo6d2NzdG9rOwogIHVzaW5nIDo6d2Nz
dG9sOwogIHVzaW5nIDo6d2NzdG91bDsKICB1c2luZyA6Ondjc3hmcm07CiAgdXNpbmcgOjp3Y3Rv
YjsKICB1c2luZyA6OndtZW1jbXA7CiAgdXNpbmcgOjp3bWVtY3B5OwogIHVzaW5nIDo6d21lbW1v
dmU7CiAgdXNpbmcgOjp3bWVtc2V0OwogIHVzaW5nIDo6d3ByaW50ZjsKICB1c2luZyA6OndzY2Fu
ZjsKCiAgdXNpbmcgOjp3Y3NjaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc2Nocih3Y2hhcl90
KiBfX3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJuIHdjc2Nocihjb25zdF9jYXN0PGNvbnN0IHdj
aGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5nIDo6d2NzcGJyazsKCiAgaW5saW5lIHdjaGFy
X3QqCiAgd2NzcGJyayh3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBfX3MyKQogIHsgcmV0dXJuIHdj
c3BicmsoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5n
IDo6d2NzcmNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzcmNocih3Y2hhcl90KiBfX3AsIHdj
aGFyX3QgX19jKQogIHsgcmV0dXJuIHdjc3JjaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4o
X19wKSwgX19jKTsgfQoKICB1c2luZyA6Ondjc3N0cjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2Nz
c3RyKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2Nzc3RyKGNvbnN0
X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6OndtZW1jaHI7
CgogIGlubGluZSB3Y2hhcl90KgogIHdtZW1jaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYywg
c2l6ZV90IF9fbikKICB7IHJldHVybiB3bWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+
KF9fcCksIF9fYywgX19uKTsgfQp9CgoKCgoKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2lu
ZyA6Ondjc3RvbGQ7CiAgdXNpbmcgOjp3Y3N0b2xsOwogIHVzaW5nIDo6d2NzdG91bGw7Cn0KCm5h
bWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sZDsKICB1c2luZyBfX2dudV9j
eHg6Ondjc3RvbGw7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b3VsbDsKfQojIDQ2ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Zwb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgZnBvcwogICAgewogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlwZTsKCiAgICBwcml2YXRlOgog
ICAgICBzdHJlYW1vZmYgX01fb2ZmOwogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7CgogICAgcHVi
bGljOgogICAgICBfX3N0YXRlX3R5cGUKICAgICAgc3RhdGUoKSBjb25zdCB7IHJldHVybiBfTV9z
dDsgfQoKICAgICAgdm9pZAogICAgICBzdGF0ZShfX3N0YXRlX3R5cGUgX19zdCkgeyBfTV9zdCA9
IF9fc3Q7IH0KCgoKICAgICAgZnBvcygpOiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChfX3N0
YXRlX3R5cGUoKSkgeyB9CgogICAgICBmcG9zKHN0cmVhbW9mZiBfX29mZiwgX19zdGF0ZV90eXBl
IF9fc3QgPSBfX3N0YXRlX3R5cGUoKSkKICAgICAgOiBfTV9vZmYoX19vZmYpLCBfTV9zdChfX3N0
KSB7IH0KCiAgICAgIG9wZXJhdG9yIHN0cmVhbW9mZigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsg
fQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0b3IrPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2Zm
ICs9IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yLT0o
c3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiAtPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAg
ICBmcG9zCiAgICAgIG9wZXJhdG9yKyhzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBm
cG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190ICs9IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7
CiAgICAgIH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikKICAg
ICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgLT0gX19vZmY7CiAgICAg
ICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvcj09KGNvbnN0
IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01fb2Zm
OyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIF9NX29mZiAhPSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIHN0cmVhbW9m
ZgogICAgICBfTV9wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgdm9p
ZAogICAgICBfTV9wb3NpdGlvbihzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmID0gX19vZmY7IH0K
ICAgIH07CgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7CgogIHR5cGVkZWYg
ZnBvczxtYnN0YXRlX3Q+IHdzdHJlYW1wb3M7Cgp9CiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4yL2lvc2Z3ZCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9m
dW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9m
dW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9u
X2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVu
Y3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4
Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZv
aWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlk
KHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f
dGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291
dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDQ4
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pb3Nmd2QiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp
dHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3M7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mg
YmFzaWNfc3RyZWFtYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW07Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz
PF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFz
cyBiYXNpY19pb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9j
ID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVmOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh
clQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAg
IGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5h
bWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0
cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hh
cl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8
X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAg
Y2xhc3MgYmFzaWNfZmlsZWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pZnN0cmVh
bTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90
cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAg
ICBjbGFzcyBiYXNpY19mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGlzdHJlYW1idWZf
aXRlcmF0b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsKCgoK
ICBjbGFzcyBpb3NfYmFzZTsKCgogIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXI+IGlvczsKICB0eXBl
ZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiBzdHJlYW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3Ry
ZWFtPGNoYXI+IGlzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07
CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFyPiBpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2lj
X3N0cmluZ2J1ZjxjaGFyPiBzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFt
PGNoYXI+IGlzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+
IG9zdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08Y2hhcj4gc3RyaW5n
c3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyPiBmaWxlYnVmOwogIHR5cGVkZWYg
YmFzaWNfaWZzdHJlYW08Y2hhcj4gaWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxj
aGFyPiBvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsKCiAg
dHlwZWRlZiBiYXNpY19pb3M8d2NoYXJfdD4gd2lvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1
Zjx3Y2hhcl90PiB3c3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiB3
aXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08d2NoYXJfdD4gd29zdHJlYW07CiAgdHlw
ZWRlZiBiYXNpY19pb3N0cmVhbTx3Y2hhcl90PiB3aW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19z
dHJpbmdidWY8d2NoYXJfdD4gd3N0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJl
YW08d2NoYXJfdD4gd2lzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFt
PHdjaGFyX3Q+IHdvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPHdj
aGFyX3Q+IHdzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+IHdm
aWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08d2NoYXJfdD4gd2lmc3RyZWFtOwogIHR5
cGVkZWYgYmFzaWNfb2ZzdHJlYW08d2NoYXJfdD4gd29mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNf
ZnN0cmVhbTx3Y2hhcl90PiB3ZnN0cmVhbTsKfQojIDQ1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMi9pb3MiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlvbiIg
MSAzCiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlvbiIgMwpleHRlcm4g
IkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgY2xhc3MgZXhjZXB0aW9uCiAgewogIHB1
YmxpYzoKICAgIGV4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5leGNlcHRpb24o
KSB0aHJvdygpOwoKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygp
OwogIH07CgoKCiAgY2xhc3MgYmFkX2V4Y2VwdGlvbiA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAg
cHVibGljOgogICAgYmFkX2V4Y2VwdGlvbigpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJh
ZF9leGNlcHRpb24oKSB0aHJvdygpOwogIH07CgoKICB0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVf
aGFuZGxlcikgKCk7CgogIHR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7CgoK
ICB0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlKHRlcm1pbmF0ZV9oYW5kbGVyKSB0aHJv
dygpOwoKCiAgdm9pZCB0ZXJtaW5hdGUoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7
CgoKICB1bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9oYW5kbGVy
KSB0aHJvdygpOwoKCiAgdm9pZCB1bmV4cGVjdGVkKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1
cm5fXykpOwojIDk4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb24iIDMKICBi
b29sIHVuY2F1Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgK
ewojIDExMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uIiAzCiAgdm9pZCBf
X3ZlcmJvc2VfdGVybWluYXRlX2hhbmRsZXIgKCk7Cn0KCn0KIyA0NiAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjIvaW9zIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRz
L2NoYXJfdHJhaXRzLmgiIDEgMwojIDQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRz
L2NoYXJfdHJhaXRzLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0cmlu
ZyIgMSAzCiMgNDggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NzdHJpbmciIDMKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgi
IDMKZXh0ZXJuICJDIiB7CgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3Ry
aW5nLmgiIDIgMwoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVz
dCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBz
aXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVtbW92ZSAodm9pZCAqX19kZXN0
LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCmV4
dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lk
ICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgaW50IF9fYywgc2l6ZV90
IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywg
aW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtZW1jbXAgKF9fY29u
c3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1jaHIgKF9f
Y29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiB2b2lkICpyYXdtZW1jaHIgKF9fY29u
c3Qgdm9pZCAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgpleHRlcm4gdm9pZCAqbWVtcmNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNp
emVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoK
ZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJuY3B5
IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNo
YXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpf
X3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzdHJjbXAg
KF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0IGNo
YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cmNvbGwgKF9fY29uc3Qg
Y2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jlc3RyaWN0
IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwojIDExMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5o
IiAzCmV4dGVybiBpbnQgX19zdHJjb2xsX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj
aGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCmV4dGVybiBzaXplX3QgX19zdHJ4ZnJtX2wgKGNoYXIgKl9fZGVzdCwgX19j
b25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25z
dCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoK
CmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19u
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMTU1ICIvdXNy
L2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFyICpf
X3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJu
IGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjaHJudWwgKF9fY29u
c3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3Qg
Y2hhciAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIg
Kl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0
ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNj
ZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNo
YXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVl
ZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4g
Y2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIg
Kl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpl
eHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cnRv
a19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RydG9r
X3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxp
bSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19jb25zdCB2b2lkICpfX2hheXN0
YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2
b2lkICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAqX19tZW1wY3B5ICh2b2lkICpfX3Jl
c3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jl
c3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgKm1lbXBjcHkg
KHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2
b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBz
aXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3QgY2hhciAqX19z
dHJpbmcsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9fZXJybnVtKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYs
IHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lk
ICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25z
dCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl
cm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3Qg
X19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBj
aGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAq
X19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0
ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcg
bG9uZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj
aGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4
dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf
X3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCgoKCmV4dGVybiBpbnQgX19zdHJjYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19j
b25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9f
bG9jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgX19z
dHJuY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIg
KnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IHN0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpz
dHJzaWduYWwgKGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKl9fc3RwY3B5IChj
aGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQog
ICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz
dCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKCgpleHRl
cm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAog
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykg
dGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQgKl9fcywgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2Zp
bGVuYW1lKSB0aHJvdyAoKTsKIyAzNjQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwp9CiMgNTIg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NzdHJpbmciIDIgMwojIDc3ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWVt
Y3B5OwogIHVzaW5nIDo6bWVtbW92ZTsKICB1c2luZyA6OnN0cmNweTsKICB1c2luZyA6OnN0cm5j
cHk7CiAgdXNpbmcgOjpzdHJjYXQ7CiAgdXNpbmcgOjpzdHJuY2F0OwogIHVzaW5nIDo6bWVtY21w
OwogIHVzaW5nIDo6c3RyY21wOwogIHVzaW5nIDo6c3RyY29sbDsKICB1c2luZyA6OnN0cm5jbXA7
CiAgdXNpbmcgOjpzdHJ4ZnJtOwogIHVzaW5nIDo6c3RyY3NwbjsKICB1c2luZyA6OnN0cnNwbjsK
ICB1c2luZyA6OnN0cnRvazsKICB1c2luZyA6Om1lbXNldDsKICB1c2luZyA6OnN0cmVycm9yOwog
IHVzaW5nIDo6c3RybGVuOwoKICB1c2luZyA6Om1lbWNocjsKCiAgaW5saW5lIHZvaWQqCiAgbWVt
Y2hyKHZvaWQqIF9fcCwgaW50IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiBtZW1jaHIoY29u
c3RfY2FzdDxjb25zdCB2b2lkKj4oX19wKSwgX19jLCBfX24pOyB9CgogIHVzaW5nIDo6c3RyY2hy
OwoKICBpbmxpbmUgY2hhcioKICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVy
biBfX2J1aWx0aW5fc3RyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9
CgogIHVzaW5nIDo6c3RycGJyazsKCiAgaW5saW5lIGNoYXIqCiAgc3RycGJyayhjaGFyKiBfX3Mx
LCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJwYnJrKGNvbnN0X2Nh
c3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6OnN0cnJjaHI7CgogIGlu
bGluZSBjaGFyKgogIHN0cnJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1
aWx0aW5fc3RycmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1
c2luZyA6OnN0cnN0cjsKCiAgaW5saW5lIGNoYXIqCiAgc3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0
IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnN0cihjb25zdF9jYXN0PGNvbnN0
IGNoYXIqPihfX3MxKSwgX19zMik7IH0KfQojIDQ2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRl
PGNsYXNzIF9DaGFyVD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0cwogICAgewogICAgICB0eXBlZGVm
IF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50X3R5cGU7
CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9m
ZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0
YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYg
X19jMik7CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEs
IGNvbnN0IGNoYXJfdHlwZSYgX19jMik7CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25z
dCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMik7CgogICAgICBzdGF0aWMg
aW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUq
IF9fczIsIHNpemVfdCBfX24pOwoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29u
c3QgY2hhcl90eXBlKiBfX3MpOwoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAg
ZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBf
X2EpOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEs
IGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMgY2hhcl90
eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBz
aXplX3QgX19uKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5
cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSk7CgogICAgICBzdGF0aWMgY2hhcl90
eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKTsKCiAgICAgIHN0YXRp
YyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYyk7CgogICAg
ICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29u
c3QgaW50X3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpOwoK
ICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYyk7
CiAgICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPgogICAg
ewogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGludCBpbnRfdHlw
ZTsKICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFt
b2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAg
c3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBl
JiBfX2MyKQogICAgICB7IF9fYzEgPSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBl
cShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBy
ZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBj
aGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19j
MSA8IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5
cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1
cm4gbWVtY21wKF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAg
bGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVybiBzdHJsZW4oX19zKTsg
fQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5
cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGNvbnN0IGNoYXJfdHlwZSo+KG1lbWNocihfX3MsIF9fYSwgX19uKSk7IH0K
CiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25z
dCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PGNoYXJfdHlwZSo+KG1lbW1vdmUoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBj
aGFyX3R5cGUqCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9f
czIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1l
bWNweShfX3MxLCBfX3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAg
YXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9
CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlw
ZSYgX19jKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0KCgoK
ICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYg
X19jKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oX19jKSk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBl
KGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1
cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KCgtMSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5
cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiAoX19j
ID09IGVvZigpKSA/IDAgOiBfX2M7IH0KICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBj
aGFyX3RyYWl0czx3Y2hhcl90PgogICAgewogICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBl
OwogICAgICB0eXBlZGVmIHdpbnRfdCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYg
b2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgd3N0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRl
ZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihj
aGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19j
MjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBj
b25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAg
ICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFy
X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMg
aW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUq
IF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHdtZW1jbXAoX19zMSwgX19zMiwgX19u
KTsgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBf
X3MpCiAgICAgIHsgcmV0dXJuIHdjc2xlbihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hh
cl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25z
dCBjaGFyX3R5cGUmIF9fYSkKICAgICAgeyByZXR1cm4gd21lbWNocihfX3MsIF9fYSwgX19uKTsg
fQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNv
bnN0IGNoYXJfdHlwZSogX19zMiwgaW50X3R5cGUgX19uKQogICAgICB7IHJldHVybiB3bWVtbW92
ZShfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5
KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAg
ICB7IHJldHVybiB3bWVtY3B5KF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFy
X3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBl
IF9fYSkKICAgICAgeyByZXR1cm4gd21lbXNldChfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3Rh
dGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykgeyBy
ZXR1cm4gY2hhcl90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19p
bnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykgeyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQoK
ICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEs
IGNvbnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAg
ICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRf
dHlwZT4oKDB4ZmZmZmZmZmZ1KSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3Rf
ZW9mKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywg
ZW9mKCkpID8gMCA6IF9fYzsgfQogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX0NoYXJfdHJhaXRzX21hdGNoCiAgICB7CiAgICAg
IF9DaGFyVCBfTV9jOwogICAgICBfQ2hhcl90cmFpdHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2Mp
IDogX01fYyhfX2MpIHsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25z
dCYgX19hKSB7IHJldHVybiBfVHJhaXRzOjplcShfTV9jLCBfX2EpOyB9CiAgICB9Owp9CiMgNDcg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAzCgojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlZndkLmgiIDEgMwojIDQ0ICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAzCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAxIDMKIyAzNiAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUu
aCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2Nsb2NhbGUiIDEgMwojIDQ4ICIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jbG9jYWxlIiAzCgojIDEgIi91c3IvaW5jbHVkZS9s
b2NhbGUuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwojIDEgIi91c3IvbG9j
YWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEg
MwojIDMwICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L2xvY2FsZS5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDMKZW51bQp7
CiAgX19MQ19DVFlQRSA9IDAsCiAgX19MQ19OVU1FUklDID0gMSwKICBfX0xDX1RJTUUgPSAyLAog
IF9fTENfQ09MTEFURSA9IDMsCiAgX19MQ19NT05FVEFSWSA9IDQsCiAgX19MQ19NRVNTQUdFUyA9
IDUsCiAgX19MQ19BTEwgPSA2LAogIF9fTENfUEFQRVIgPSA3LAogIF9fTENfTkFNRSA9IDgsCiAg
X19MQ19BRERSRVNTID0gOSwKICBfX0xDX1RFTEVQSE9ORSA9IDEwLAogIF9fTENfTUVBU1VSRU1F
TlQgPSAxMSwKICBfX0xDX0lERU5USUZJQ0FUSU9OID0gMTIKfTsKIyAzMSAiL3Vzci9pbmNsdWRl
L2xvY2FsZS5oIiAyIDMKCmV4dGVybiAiQyIgewojIDUyICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgi
IDMKc3RydWN0IGxjb252CnsKCgogIGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAgY2hhciAqdGhvdXNh
bmRzX3NlcDsKCgoKCgogIGNoYXIgKmdyb3VwaW5nOwoKCgoKCiAgY2hhciAqaW50X2N1cnJfc3lt
Ym9sOwogIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsKICBjaGFyICptb25fZGVjaW1hbF9wb2ludDsK
ICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsKICBjaGFyICptb25fZ3JvdXBpbmc7CiAgY2hhciAq
cG9zaXRpdmVfc2lnbjsKICBjaGFyICpuZWdhdGl2ZV9zaWduOwogIGNoYXIgaW50X2ZyYWNfZGln
aXRzOwogIGNoYXIgZnJhY19kaWdpdHM7CgogIGNoYXIgcF9jc19wcmVjZWRlczsKCiAgY2hhciBw
X3NlcF9ieV9zcGFjZTsKCiAgY2hhciBuX2NzX3ByZWNlZGVzOwoKICBjaGFyIG5fc2VwX2J5X3Nw
YWNlOwoKCgoKCgogIGNoYXIgcF9zaWduX3Bvc247CiAgY2hhciBuX3NpZ25fcG9zbjsKCgogIGNo
YXIgaW50X3BfY3NfcHJlY2VkZXM7CgogIGNoYXIgaW50X3Bfc2VwX2J5X3NwYWNlOwoKICBjaGFy
IGludF9uX2NzX3ByZWNlZGVzOwoKICBjaGFyIGludF9uX3NlcF9ieV9zcGFjZTsKCgoKCgoKICBj
aGFyIGludF9wX3NpZ25fcG9zbjsKICBjaGFyIGludF9uX3NpZ25fcG9zbjsKIyAxMTkgIi91c3Iv
aW5jbHVkZS9sb2NhbGUuaCIgMwp9OwoKCgpleHRlcm4gY2hhciAqc2V0bG9jYWxlIChpbnQgX19j
YXRlZ29yeSwgX19jb25zdCBjaGFyICpfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVj
dCBsY29udiAqbG9jYWxlY29udiAodm9pZCkgdGhyb3cgKCk7CiMgMTQ5ICIvdXNyL2luY2x1ZGUv
bG9jYWxlLmgiIDMKZXh0ZXJuIF9fbG9jYWxlX3QgX19uZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5
X21hc2ssIF9fY29uc3QgY2hhciAqX19sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2xvY2FsZV90IF9fYmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBfX2xvY2FsZV90IF9f
ZHVwbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lk
IF9fZnJlZWxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCn0KIyA1MCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY2xvY2FsZSIgMiAzCgoKCgoKbmFtZXNwYWNlIHN0
ZAp7CiAgdXNpbmcgOjpsY29udjsKICB1c2luZyA6OnNldGxvY2FsZTsKICB1c2luZyA6OmxvY2Fs
ZWNvbnY7Cn0KIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1n
bnUvYml0cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDEg
MwojIDI0ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9ubF90
eXBlcy5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL25sX3R5cGVzLmgiIDMKZXh0ZXJuICJDIiB7
CgoKdHlwZWRlZiB2b2lkICpubF9jYXRkOwoKCnR5cGVkZWYgaW50IG5sX2l0ZW07CgoKZXh0ZXJu
IG5sX2NhdGQgY2F0b3BlbiAoX19jb25zdCBjaGFyICpfX2NhdF9uYW1lLCBpbnQgX19mbGFnKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmNhdGdldHMgKG5sX2NhdGQgX19jYXRhbG9nLCBpbnQg
X19zZXQsIGludCBfX251bWJlciwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2F0Y2xvc2UgKG5sX2NhdGQgX19jYXRh
bG9nKSB0aHJvdyAoKTsKCn0KIyAyNSAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDIgMwoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9sYW5n
aW5mby5oIiAyIDMKCgpleHRlcm4gIkMiIHsKIyA0MyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgi
IDMKZW51bQp7CgoKCiAgQUJEQVlfMSA9ICgoKF9fTENfVElNRSkgPDwgMTYpIHwgKDApKSwKCiAg
QUJEQVlfMiwKCiAgQUJEQVlfMywKCiAgQUJEQVlfNCwKCiAgQUJEQVlfNSwKCiAgQUJEQVlfNiwK
CiAgQUJEQVlfNywKCgoKICBEQVlfMSwKCiAgREFZXzIsCgogIERBWV8zLAoKICBEQVlfNCwKCiAg
REFZXzUsCgogIERBWV82LAoKICBEQVlfNywKCgoKICBBQk1PTl8xLAoKICBBQk1PTl8yLAoKICBB
Qk1PTl8zLAoKICBBQk1PTl80LAoKICBBQk1PTl81LAoKICBBQk1PTl82LAoKICBBQk1PTl83LAoK
ICBBQk1PTl84LAoKICBBQk1PTl85LAoKICBBQk1PTl8xMCwKCiAgQUJNT05fMTEsCgogIEFCTU9O
XzEyLAoKCgogIE1PTl8xLAoKICBNT05fMiwKCiAgTU9OXzMsCgogIE1PTl80LAoKICBNT05fNSwK
CiAgTU9OXzYsCgogIE1PTl83LAoKICBNT05fOCwKCiAgTU9OXzksCgogIE1PTl8xMCwKCiAgTU9O
XzExLAoKICBNT05fMTIsCgoKICBBTV9TVFIsCgogIFBNX1NUUiwKCgogIERfVF9GTVQsCgogIERf
Rk1ULAoKICBUX0ZNVCwKCiAgVF9GTVRfQU1QTSwKCgogIEVSQSwKCiAgX19FUkFfWUVBUiwKCgoK
ICBFUkFfRF9GTVQsCgogIEFMVF9ESUdJVFMsCgogIEVSQV9EX1RfRk1ULAoKICBFUkFfVF9GTVQs
CgoKICBfTkxfVElNRV9FUkFfTlVNX0VOVFJJRVMsCiAgX05MX1RJTUVfRVJBX0VOVFJJRVMsCgog
IF9OTF9XQUJEQVlfMSwKICBfTkxfV0FCREFZXzIsCiAgX05MX1dBQkRBWV8zLAogIF9OTF9XQUJE
QVlfNCwKICBfTkxfV0FCREFZXzUsCiAgX05MX1dBQkRBWV82LAogIF9OTF9XQUJEQVlfNywKCgog
IF9OTF9XREFZXzEsCiAgX05MX1dEQVlfMiwKICBfTkxfV0RBWV8zLAogIF9OTF9XREFZXzQsCiAg
X05MX1dEQVlfNSwKICBfTkxfV0RBWV82LAogIF9OTF9XREFZXzcsCgoKICBfTkxfV0FCTU9OXzEs
CiAgX05MX1dBQk1PTl8yLAogIF9OTF9XQUJNT05fMywKICBfTkxfV0FCTU9OXzQsCiAgX05MX1dB
Qk1PTl81LAogIF9OTF9XQUJNT05fNiwKICBfTkxfV0FCTU9OXzcsCiAgX05MX1dBQk1PTl84LAog
IF9OTF9XQUJNT05fOSwKICBfTkxfV0FCTU9OXzEwLAogIF9OTF9XQUJNT05fMTEsCiAgX05MX1dB
Qk1PTl8xMiwKCgogIF9OTF9XTU9OXzEsCiAgX05MX1dNT05fMiwKICBfTkxfV01PTl8zLAogIF9O
TF9XTU9OXzQsCiAgX05MX1dNT05fNSwKICBfTkxfV01PTl82LAogIF9OTF9XTU9OXzcsCiAgX05M
X1dNT05fOCwKICBfTkxfV01PTl85LAogIF9OTF9XTU9OXzEwLAogIF9OTF9XTU9OXzExLAogIF9O
TF9XTU9OXzEyLAoKICBfTkxfV0FNX1NUUiwKICBfTkxfV1BNX1NUUiwKCiAgX05MX1dEX1RfRk1U
LAogIF9OTF9XRF9GTVQsCiAgX05MX1dUX0ZNVCwKICBfTkxfV1RfRk1UX0FNUE0sCgogIF9OTF9X
RVJBX1lFQVIsCiAgX05MX1dFUkFfRF9GTVQsCiAgX05MX1dBTFRfRElHSVRTLAogIF9OTF9XRVJB
X0RfVF9GTVQsCiAgX05MX1dFUkFfVF9GTVQsCgogIF9OTF9USU1FX1dFRUtfTkRBWVMsCiAgX05M
X1RJTUVfV0VFS18xU1REQVksCiAgX05MX1RJTUVfV0VFS18xU1RXRUVLLAogIF9OTF9USU1FX0ZJ
UlNUX1dFRUtEQVksCiAgX05MX1RJTUVfRklSU1RfV09SS0RBWSwKICBfTkxfVElNRV9DQUxfRElS
RUNUSU9OLAogIF9OTF9USU1FX1RJTUVaT05FLAoKICBfREFURV9GTVQsCgogIF9OTF9XX0RBVEVf
Rk1ULAoKICBfTkxfVElNRV9DT0RFU0VULAoKICBfTkxfTlVNX0xDX1RJTUUsCgoKCgogIF9OTF9D
T0xMQVRFX05SVUxFUyA9ICgoKF9fTENfQ09MTEFURSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ09M
TEFURV9SVUxFU0VUUywKICBfTkxfQ09MTEFURV9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1dFSUdI
VE1CLAogIF9OTF9DT0xMQVRFX0VYVFJBTUIsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RNQiwKICBf
TkxfQ09MTEFURV9HQVAxLAogIF9OTF9DT0xMQVRFX0dBUDIsCiAgX05MX0NPTExBVEVfR0FQMywK
ICBfTkxfQ09MTEFURV9UQUJMRVdDLAogIF9OTF9DT0xMQVRFX1dFSUdIVFdDLAogIF9OTF9DT0xM
QVRFX0VYVFJBV0MsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RXQywKICBfTkxfQ09MTEFURV9TWU1C
X0hBU0hfU0laRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJfVEFCTEVNQiwKICBfTkxfQ09MTEFURV9T
WU1CX0VYVFJBTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUU1CLAogIF9OTF9DT0xMQVRFX0NPTExT
RVFXQywKICBfTkxfQ09MTEFURV9DT0RFU0VULAogIF9OTF9OVU1fTENfQ09MTEFURSwKCgoKCiAg
X05MX0NUWVBFX0NMQVNTID0gKCgoX19MQ19DVFlQRSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ1RZ
UEVfVE9VUFBFUiwKICBfTkxfQ1RZUEVfR0FQMSwKICBfTkxfQ1RZUEVfVE9MT1dFUiwKICBfTkxf
Q1RZUEVfR0FQMiwKICBfTkxfQ1RZUEVfQ0xBU1MzMiwKICBfTkxfQ1RZUEVfR0FQMywKICBfTkxf
Q1RZUEVfR0FQNCwKICBfTkxfQ1RZUEVfR0FQNSwKICBfTkxfQ1RZUEVfR0FQNiwKICBfTkxfQ1RZ
UEVfQ0xBU1NfTkFNRVMsCiAgX05MX0NUWVBFX01BUF9OQU1FUywKICBfTkxfQ1RZUEVfV0lEVEgs
CiAgX05MX0NUWVBFX01CX0NVUl9NQVgsCiAgX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKICBDT0RF
U0VUID0gX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKCiAgX05MX0NUWVBFX1RPVVBQRVIzMiwKICBf
TkxfQ1RZUEVfVE9MT1dFUjMyLAogIF9OTF9DVFlQRV9DTEFTU19PRkZTRVQsCiAgX05MX0NUWVBF
X01BUF9PRkZTRVQsCiAgX05MX0NUWVBFX0lORElHSVRTX01CX0xFTiwKICBfTkxfQ1RZUEVfSU5E
SUdJVFMwX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfTUIsCiAgX05MX0NUWVBFX0lORElHSVRT
Ml9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMzX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRfTUIs
CiAgX05MX0NUWVBFX0lORElHSVRTNV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM2X01CLAogIF9O
TF9DVFlQRV9JTkRJR0lUUzdfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTOF9NQiwKICBfTkxfQ1RZ
UEVfSU5ESUdJVFM5X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUU19XQ19MRU4sCiAgX05MX0NUWVBF
X0lORElHSVRTMF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMxX1dDLAogIF9OTF9DVFlQRV9JTkRJ
R0lUUzJfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTM19XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM0
X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTNl9XQywK
ICBfTkxfQ1RZUEVfSU5ESUdJVFM3X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzhfV0MsCiAgX05M
X0NUWVBFX0lORElHSVRTOV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQwX01CLAogIF9OTF9DVFlQ
RV9PVVRESUdJVDFfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMl9NQiwKICBfTkxfQ1RZUEVfT1VU
RElHSVQzX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDRfTUIsCiAgX05MX0NUWVBFX09VVERJR0lU
NV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ2X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDdfTUIs
CiAgX05MX0NUWVBFX09VVERJR0lUOF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ5X01CLAogIF9O
TF9DVFlQRV9PVVRESUdJVDBfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMV9XQywKICBfTkxfQ1RZ
UEVfT1VURElHSVQyX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDNfV0MsCiAgX05MX0NUWVBFX09V
VERJR0lUNF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ1X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJ
VDZfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUN19XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ4X1dD
LAogIF9OTF9DVFlQRV9PVVRESUdJVDlfV0MsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RBQl9TSVpF
LAogIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJP
TV9UQkwsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRf
VE9fVEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkdfTEVOLAogIF9OTF9D
VFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkcsCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9S
RV9MRU4sCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQ
XzEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8yLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMywKICBf
TkxfQ1RZUEVfRVhUUkFfTUFQXzQsCiAgX05MX0NUWVBFX0VYVFJBX01BUF81LAogIF9OTF9DVFlQ
RV9FWFRSQV9NQVBfNiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzcsCiAgX05MX0NUWVBFX0VYVFJB
X01BUF84LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEw
LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMiwKICBf
TkxfQ1RZUEVfRVhUUkFfTUFQXzEzLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTQsCiAgX05MX05V
TV9MQ19DVFlQRSwKCgoKCiAgX19JTlRfQ1VSUl9TWU1CT0wgPSAoKChfX0xDX01PTkVUQVJZKSA8
PCAxNikgfCAoMCkpLAoKCgogIF9fQ1VSUkVOQ1lfU1lNQk9MLAoKCgogIF9fTU9OX0RFQ0lNQUxf
UE9JTlQsCgoKCiAgX19NT05fVEhPVVNBTkRTX1NFUCwKCgoKICBfX01PTl9HUk9VUElORywKCgoK
ICBfX1BPU0lUSVZFX1NJR04sCgoKCiAgX19ORUdBVElWRV9TSUdOLAoKCgogIF9fSU5UX0ZSQUNf
RElHSVRTLAoKCgogIF9fRlJBQ19ESUdJVFMsCgoKCiAgX19QX0NTX1BSRUNFREVTLAoKCgogIF9f
UF9TRVBfQllfU1BBQ0UsCgoKCiAgX19OX0NTX1BSRUNFREVTLAoKCgogIF9fTl9TRVBfQllfU1BB
Q0UsCgoKCiAgX19QX1NJR05fUE9TTiwKCgoKICBfX05fU0lHTl9QT1NOLAoKCgogIF9OTF9NT05F
VEFSWV9DUk5DWVNUUiwKCiAgX19JTlRfUF9DU19QUkVDRURFUywKCgoKICBfX0lOVF9QX1NFUF9C
WV9TUEFDRSwKCgoKICBfX0lOVF9OX0NTX1BSRUNFREVTLAoKCgogIF9fSU5UX05fU0VQX0JZX1NQ
QUNFLAoKCgogIF9fSU5UX1BfU0lHTl9QT1NOLAoKCgogIF9fSU5UX05fU0lHTl9QT1NOLAoKCgog
IF9OTF9NT05FVEFSWV9EVU9fSU5UX0NVUlJfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fQ1VS
UkVOQ1lfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0ZSQUNfRElHSVRTLAogIF9OTF9N
T05FVEFSWV9EVU9fRlJBQ19ESUdJVFMsCiAgX05MX01PTkVUQVJZX0RVT19QX0NTX1BSRUNFREVT
LAogIF9OTF9NT05FVEFSWV9EVU9fUF9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19O
X0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TRVBfQllfU1BBQ0UsCiAgX05MX01P
TkVUQVJZX0RVT19JTlRfUF9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX1NF
UF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX0NTX1BSRUNFREVTLAogIF9OTF9N
T05FVEFSWV9EVU9fSU5UX05fU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fUF9TSUdO
X1BPU04sCiAgX05MX01PTkVUQVJZX0RVT19OX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVP
X0lOVF9QX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX1NJR05fUE9TTiwKICBf
TkxfTU9ORVRBUllfVU5PX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX1VOT19WQUxJRF9UTywK
ICBfTkxfTU9ORVRBUllfRFVPX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX0RVT19WQUxJRF9U
TywKICBfTkxfTU9ORVRBUllfQ09OVkVSU0lPTl9SQVRFLAogIF9OTF9NT05FVEFSWV9ERUNJTUFM
X1BPSU5UX1dDLAogIF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLAogIF9OTF9NT05FVEFS
WV9DT0RFU0VULAogIF9OTF9OVU1fTENfTU9ORVRBUlksCgoKCiAgX19ERUNJTUFMX1BPSU5UID0g
KCgoX19MQ19OVU1FUklDKSA8PCAxNikgfCAoMCkpLAoKCgogIFJBRElYQ0hBUiA9IF9fREVDSU1B
TF9QT0lOVCwKCiAgX19USE9VU0FORFNfU0VQLAoKCgogIFRIT1VTRVAgPSBfX1RIT1VTQU5EU19T
RVAsCgogIF9fR1JPVVBJTkcsCgoKCiAgX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywKICBf
TkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLAogIF9OTF9OVU1FUklDX0NPREVTRVQsCiAgX05M
X05VTV9MQ19OVU1FUklDLAoKICBfX1lFU0VYUFIgPSAoKChfX0xDX01FU1NBR0VTKSA8PCAxNikg
fCAoMCkpLAoKICBfX05PRVhQUiwKCiAgX19ZRVNTVFIsCgoKCiAgX19OT1NUUiwKCgoKICBfTkxf
TUVTU0FHRVNfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01FU1NBR0VTLAoKICBfTkxfUEFQRVJfSEVJ
R0hUID0gKCgoX19MQ19QQVBFUikgPDwgMTYpIHwgKDApKSwKICBfTkxfUEFQRVJfV0lEVEgsCiAg
X05MX1BBUEVSX0NPREVTRVQsCiAgX05MX05VTV9MQ19QQVBFUiwKCiAgX05MX05BTUVfTkFNRV9G
TVQgPSAoKChfX0xDX05BTUUpIDw8IDE2KSB8ICgwKSksCiAgX05MX05BTUVfTkFNRV9HRU4sCiAg
X05MX05BTUVfTkFNRV9NUiwKICBfTkxfTkFNRV9OQU1FX01SUywKICBfTkxfTkFNRV9OQU1FX01J
U1MsCiAgX05MX05BTUVfTkFNRV9NUywKICBfTkxfTkFNRV9DT0RFU0VULAogIF9OTF9OVU1fTENf
TkFNRSwKCiAgX05MX0FERFJFU1NfUE9TVEFMX0ZNVCA9ICgoKF9fTENfQUREUkVTUykgPDwgMTYp
IHwgKDApKSwKICBfTkxfQUREUkVTU19DT1VOVFJZX05BTUUsCiAgX05MX0FERFJFU1NfQ09VTlRS
WV9QT1NULAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIyLAogIF9OTF9BRERSRVNTX0NPVU5UUllf
QUIzLAogIF9OTF9BRERSRVNTX0NPVU5UUllfQ0FSLAogIF9OTF9BRERSRVNTX0NPVU5UUllfTlVN
LAogIF9OTF9BRERSRVNTX0NPVU5UUllfSVNCTiwKICBfTkxfQUREUkVTU19MQU5HX05BTUUsCiAg
X05MX0FERFJFU1NfTEFOR19BQiwKICBfTkxfQUREUkVTU19MQU5HX1RFUk0sCiAgX05MX0FERFJF
U1NfTEFOR19MSUIsCiAgX05MX0FERFJFU1NfQ09ERVNFVCwKICBfTkxfTlVNX0xDX0FERFJFU1Ms
CgogIF9OTF9URUxFUEhPTkVfVEVMX0lOVF9GTVQgPSAoKChfX0xDX1RFTEVQSE9ORSkgPDwgMTYp
IHwgKDApKSwKICBfTkxfVEVMRVBIT05FX1RFTF9ET01fRk1ULAogIF9OTF9URUxFUEhPTkVfSU5U
X1NFTEVDVCwKICBfTkxfVEVMRVBIT05FX0lOVF9QUkVGSVgsCiAgX05MX1RFTEVQSE9ORV9DT0RF
U0VULAogIF9OTF9OVU1fTENfVEVMRVBIT05FLAoKICBfTkxfTUVBU1VSRU1FTlRfTUVBU1VSRU1F
TlQgPSAoKChfX0xDX01FQVNVUkVNRU5UKSA8PCAxNikgfCAoMCkpLAogIF9OTF9NRUFTVVJFTUVO
VF9DT0RFU0VULAogIF9OTF9OVU1fTENfTUVBU1VSRU1FTlQsCgogIF9OTF9JREVOVElGSUNBVElP
Tl9USVRMRSA9ICgoKF9fTENfSURFTlRJRklDQVRJT04pIDw8IDE2KSB8ICgwKSksCiAgX05MX0lE
RU5USUZJQ0FUSU9OX1NPVVJDRSwKICBfTkxfSURFTlRJRklDQVRJT05fQUREUkVTUywKICBfTkxf
SURFTlRJRklDQVRJT05fQ09OVEFDVCwKICBfTkxfSURFTlRJRklDQVRJT05fRU1BSUwsCiAgX05M
X0lERU5USUZJQ0FUSU9OX1RFTCwKICBfTkxfSURFTlRJRklDQVRJT05fRkFYLAogIF9OTF9JREVO
VElGSUNBVElPTl9MQU5HVUFHRSwKICBfTkxfSURFTlRJRklDQVRJT05fVEVSUklUT1JZLAogIF9O
TF9JREVOVElGSUNBVElPTl9BVURJRU5DRSwKICBfTkxfSURFTlRJRklDQVRJT05fQVBQTElDQVRJ
T04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0FCQlJFVklBVElPTiwKICBfTkxfSURFTlRJRklDQVRJ
T05fUkVWSVNJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0RBVEUsCiAgX05MX0lERU5USUZJQ0FU
SU9OX0NBVEVHT1JZLAogIF9OTF9JREVOVElGSUNBVElPTl9DT0RFU0VULAogIF9OTF9OVU1fTENf
SURFTlRJRklDQVRJT04sCgoKICBfTkxfTlVNCn07CiMgNTc1ICIvdXNyL2luY2x1ZGUvbGFuZ2lu
Zm8uaCIgMwpleHRlcm4gY2hhciAqbmxfbGFuZ2luZm8gKG5sX2l0ZW0gX19pdGVtKSB0aHJvdyAo
KTsKIyA1ODYgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzCmV4dGVybiBjaGFyICpfX25sX2xh
bmdpbmZvX2wgKG5sX2l0ZW0gX19pdGVtLCBfX2xvY2FsZV90IGwpOwoKCn0KIyAzOCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIg
MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvaWNv
bnYuaCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4y
L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvaWNvbnYuaCIgMiAzCgoK
ZXh0ZXJuICJDIiB7CgoKdHlwZWRlZiB2b2lkICppY29udl90OwoKCgoKZXh0ZXJuIGljb252X3Qg
aWNvbnZfb3BlbiAoX19jb25zdCBjaGFyICpfX3RvY29kZSwgX19jb25zdCBjaGFyICpfX2Zyb21j
b2RlKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBpY29udiAoaWNvbnZfdCBfX2Nk
LCBjaGFyICoqX19yZXN0cmljdCBfX2luYnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
Kl9fcmVzdHJpY3QgX19pbmJ5dGVzbGVmdCwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19vdXRidWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmlj
dCBfX291dGJ5dGVzbGVmdCk7CgoKZXh0ZXJuIGludCBpY29udl9jbG9zZSAoaWNvbnZfdCBfX2Nk
KSB0aHJvdyAoKTsKCn0KIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1s
aW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmludGwu
aCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgpl
eHRlcm4gY2hhciAqZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGNoYXIgKmRnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgX19jb25z
dCBjaGFyICpfX21zZ2lkKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqX19kZ2V0dGV4dCAo
X19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZCkKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSk7CgoKCmV4dGVybiBj
aGFyICpkY2dldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KSB0aHJvdyAo
KTsKZXh0ZXJuIGNoYXIgKl9fZGNnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2Nh
dGVnb3J5KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikp
KTsKCgoKCmV4dGVybiBjaGFyICpuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkMSwgX19j
b25zdCBjaGFyICpfX21zZ2lkMiwKICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n
IGludCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgx
KSkpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoKZXh0ZXJuIGNoYXIg
KmRuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19t
c2dpZDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZDIsIHVu
c2lnbmVkIGxvbmcgaW50IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt
YXRfYXJnX18gKDIpKSkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgpl
eHRlcm4gY2hhciAqZGNuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29u
c3QgY2hhciAqX19tc2dpZDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19jYXRlZ29yeSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf
YXJnX18gKDIpKSkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgoKCmV4
dGVybiBjaGFyICp0ZXh0ZG9tYWluIChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBjaGFyICpiaW5kdGV4dGRvbWFpbiAoX19jb25zdCBjaGFyICpfX2RvbWFp
bm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Rpcm5h
bWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKF9f
Y29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19jb2Rlc2V0KSB0aHJvdyAoKTsKCgoKCgoKCiMgMSAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgOTUgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgiIDIgMwojIDExNSAiL3Vzci9pbmNs
dWRlL2xpYmludGwuaCIgMwp9CiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2k2ODYt
cGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0
eXBlZGVmIF9fbG9jYWxlX3QgX19jX2xvY2FsZTsKfQojIDQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMi9jbGltaXRzIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY2xpbWl0
cyIgMwoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9p
bmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwoKCgoK
CgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1
ZGUvbGltaXRzLmgiIDEgMwojIDEzMiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMu
aCIgMSAzCiMgMTQ0ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9wb3NpeDFfbGltLmgiIDEgMwojIDEyNiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xp
bS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDEgMwojIDM2ICIvdXNy
L2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9saW1p
dHMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAyIDMKIyAxMjcg
Ii91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMiAzCiMgMTQ1ICIvdXNyL2luY2x1ZGUv
bGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAz
CiMgMTQ5ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3hvcGVuX2xpbS5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMzUgIi91c3IvaW5j
bHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMKIyAxMzYgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVu
X2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMTM3ICIv
dXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMgMTUzICIvdXNyL2luY2x1ZGUvbGlt
aXRzLmgiIDIgMwojIDEzMyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzCiMgMTIgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvbGltaXRzLmgi
IDIgMwojIDUwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jbGltaXRzIiAyIDMKIyA0OCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY2N0eXBlIiAxIDMKIyA0NyAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjIvY2N0eXBlIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzCiMg
MjkgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiAiQyIgewojIDQwICIvdXNyL2luY2x1
ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgMzcgIi91c3Iv
aW5jbHVkZS9lbmRpYW4uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMK
IyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2N0eXBl
LmgiIDIgMwoKCgoKCgplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8ICgwKSkg
PDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/ICgoMSA8
PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9JU2FscGhhID0gKCgyKSA8IDgg
PyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgpKSwKICBfSVNkaWdpdCA9ICgo
MykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4KSksCiAgX0lTeGRp
Z2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAoNCkpID4+IDgpKSwK
ICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwgKDUpKSA+
PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8IDgpIDogKCgxIDw8
ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAoKDEgPDwgKDcpKSA8PCA4KSA6
ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8ICg4KSkg
PDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwgPSAoKDkpIDwgOCA/ICgoMSA8
PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0ID0gKCgxMCkgPCA4
ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwKICBfSVNhbG51bSA9
ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEpKSA+PiA4KSkKfTsK
IyA3NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9fY29uc3QgdW5zaWduZWQgc2hv
cnQgaW50ICpfX2N0eXBlX2I7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b2xv
d2VyOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG91cHBlcjsKIyA5MSAiL3Vz
ci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBpc2FsbnVtIChpbnQpIHRocm93ICgpOwpl
eHRlcm4gaW50IGlzYWxwaGEgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNjbnRybCAoaW50
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2RpZ2l0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50
IGlzbG93ZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNncmFwaCAoaW50KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBpc3ByaW50IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHVuY3Qg
KGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNzcGFjZSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBpc3VwcGVyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzeGRpZ2l0IChpbnQpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgaXNibGFuayAoaW50KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp
bnQgdG9sb3dlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0b3VwcGVyIChpbnQg
X19jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBpc2FzY2lpIChpbnQgX19jKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCB0b2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBfdG91cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfdG9sb3dlciAoaW50KSB0aHJv
dyAoKTsKIyAyMjMgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgX19pc2FsbnVt
X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2FscGhhX2wgKGlu
dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2NudHJsX2wgKGludCwgX19s
b2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2RpZ2l0X2wgKGludCwgX19sb2NhbGVf
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2xvd2VyX2wgKGludCwgX19sb2NhbGVfdCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgX19pc2dyYXBoX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgX19pc3ByaW50X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX19pc3B1bmN0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
X19pc3NwYWNlX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3Vw
cGVyX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3hkaWdpdF9s
IChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX2lzYmxhbmtfbCAoaW50
LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAoaW50IF9f
YywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX190b3VwcGVyX2wgKGlu
dCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKIyAyNzYgIi91c3IvaW5jbHVkZS9jdHlw
ZS5oIiAzCn0KIyA1MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY2N0eXBlIiAyIDMKIyA2
NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY2N0eXBlIiAzCm5hbWVzcGFjZSBzdGQKewog
IHVzaW5nIDo6aXNhbG51bTsKICB1c2luZyA6OmlzYWxwaGE7CiAgdXNpbmcgOjppc2NudHJsOwog
IHVzaW5nIDo6aXNkaWdpdDsKICB1c2luZyA6OmlzZ3JhcGg7CiAgdXNpbmcgOjppc2xvd2VyOwog
IHVzaW5nIDo6aXNwcmludDsKICB1c2luZyA6OmlzcHVuY3Q7CiAgdXNpbmcgOjppc3NwYWNlOwog
IHVzaW5nIDo6aXN1cHBlcjsKICB1c2luZyA6OmlzeGRpZ2l0OwogIHVzaW5nIDo6dG9sb3dlcjsK
ICB1c2luZyA6OnRvdXBwZXI7Cn0KIyA0OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0
cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAic3RyaW5nIiAxIDMKf0VMRgEBASACIAMgASBgiAQINCAI
NiA0IAYgKCAfIBwgBiA0IDSABAg0gAQIwCDAIAUgBCADIPQg9IAECPSABAgTIBMgBCABIAEggAQI
IIAECGQOIGQOIAUgECABIBAgkAQIIJAECNQCICgEIAYgECACIIARIICRBAiAkQQI6CDoIAYgBCAE
IAgBIAiBBAgIgQQIIAQgBCAvbGliL2xkLTEgLnNvLjIgBCAQIAEgR05VIAIgAiAFIBEgGCATCgog
ICAUIBYgDiAFIBAgByAVIAggFyACIAMgDyAEIAEgBiASIBEgjwEg2JIECIwgESAXIEggXIcECAIC
IBIgciBshwQIJCASIDYCIASQBAggESAPIFIgfIcECBwBIBIgDgIgjIcECP8gIgAAABwBAACchwQI
SQAAABIAAACXAAAArIcECAoCAAASAAAAbgEAAGiTBAiQAAAAEQAXABAAAAC8hwQItQEAABIAAADi
AAAAzIcECIoAAAASAAAAggAAANyHBAiuBAAAEgAAAOMBAADshwQImgAAACIgUgIg/IcECMogEiBo
IIgECHsBIBIgNAEgHIgECG4gEiD/ASAsiAQI1yASIEMCIBSOBAgEIBEgDiD/IPiTBAgQIBEgFyCo
ASB3ASA8iAQINyASIJkBIEyIBAhlIBIgvAEgbGlic3RkYysrLnNvLjUgX1pTdGxzSVN0MTFjaGFy
X3RyYWl0c0ljRUVSU3QxM2Jhc2ljX29zdHJlYW1JY1RfRVM1X1BLYyBfWk5Tb2xzRWwgX19jeGFf
Y2FsbF91bmV4cGVjdGVkIF9aTlNvbHNFbSBfWlN0OXRlcm1pbmF0ZXYgX19neHhfcGVyc29uYWxp
dHlfdjAgX1pTdHJzSWNTdDExY2hhcl90cmFpdHNJY0VTYUljRUVSU3QxM2Jhc2ljX2lzdHJlYW1J
VF9UMF9FUzdfUlNiSVM0X1M1X1QxX0UgX1pOU3M0X1JlcDhfTV9jbG9uZUVSS1NhSWNFaiBfWk5T
czIwX1NfZW1wdHlfcmVwX3N0b3JhZ2VFIF9aTlN0OGlvc19iYXNlNEluaXRDMUV2IF9aTlN0MjRf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGVJTGIxRUxpMEVFMTBkZWFsbG9jYXRlRVB2aiBfWlN0M2Np
biBfWk5TdDhpb3NfYmFzZTRJbml0RDFFdiBfWlN0NGNvdXQgX1pOS1NzNGZpbmRFY2ogX0p2X1Jl
Z2lzdGVyQ2xhc3NlcyBfX2dtb25fc3RhcnRfXyBsaWJtLnNvLjYgbGliZ2NjX3Muc28uMSBfX3Jl
Z2lzdGVyX2ZyYW1lX2luZm9fYmFzZXMgX1Vud2luZF9SZXN1bWUgX19kZXJlZ2lzdGVyX2ZyYW1l
X2luZm9fYmFzZXMgbGliYy5zby42IF9fZHNvX2hhbmRsZSBfSU9fc3RkaW5fdXNlZCBfX2xpYmNf
c3RhcnRfbWFpbiAvdXNyL2xvY2FsL2xpYjogR0xJQkNfMi4wIEdDQ18zLjAgQ1hYQUJJXzEuMiBH
TElCQ1BQXzMuMiACIAIgAiABIAMgBCACIAIgAiACIAIgAyAEIAUgAiACIAQgASACIAIgAiABIAEg
LAIgECAQaWkKICAFIHQCIAEgASDVASAQIFAmeSAEIH4CIAEgAiABIBAg0q9rBSADIIYCIBAgcika
CCACIJECINCSBAgGFyDYkgQIBQEgaJMECAUg+JMECAUTIJCSBAgHAiCUkgQIBwMgmJIECAcFIJyS
BAgHBiCgkgQIBwcgpJIECAcIIKiSBAgHCiAgrJIECAcgsJIECAcgtJIECAcKICC4kgQIBw4gvJIE
CAcPIMCSBAgHECDEkgQIBxEgyJIECAcVIMySBAgHFiBVieWD7AjoRQEgkOjLASDodgYgycP/NYiS
BAj/JYySBAgg/yWQkgQIaCDp4P////8llJIECGgIIOnQ/////yWYkgQIaBAg6cD/////JZySBAho
GCDpsP////8loJIECGgg6aD/////JaSSBAhoKCDpkP////8lqJIECGgwIOmA/////yWskgQIaDgg
6XD/////JbCSBAhoQCDpYP////8ltJIECGhIIOlQ/////yW4kgQIaFAg6UD/////JbySBAhoWCDp
MP////8lwJIECGhgIOkg/////yXEkgQIaGgg6RD/////JciSBAhocCDpIP////8lzJIECGh4IOnw
/v//IDHtXonhg+TwUFRSaPCNBAhoNIcECFFWaECKBAjoe/////SJ9lWJ5VNQ6CBbgcP2IIuDTCCF
wHQC/9CLXfzJw4n2kJCQkJCQkJBVieWD7AiAPQiUBAggdUKhCJAECIsQhdJ0G422IIPABKMIkAQI
/9KhCJAECIsQhdJ167iMhwQIhcB0IMcEJCCQBAjokv7//8YFCJQECAHJw5CNtiCNvyBVuOyHBAiJ
5eggWoHCZyCD7BiFwHQgxwQkIJAECMdEJAQglAQIx0QkCCCJVCQg6KH+//+hgJIECIXAdBW4IIXA
dCDHBCSAkgQI6Jd2+/eJ7F3DjXYgVYnlg+wIgX0g//8giV38i10IdCCLXfyJ7F3DjXQmIIP7AXQW
hdt17MdFCCSUBAiLXfyJ7F3pkf7//8cEJCSUBAjo5f3//+vckI22IFWJ5VdWMfZTMduD7CCLfQiJ
XCQIiTwkx0QkBCgg6Gj+//+D+P+Jw3QaiTwkx0QkBCkgiUQkCOhN/v//QHTORuvLg8QgifBbXl9d
w5BVieWD7BjHRCQELiCLRQjHRCQIIIkEJOgb/v//QA+UwonsXQ+2wsONdCYgVbkglAQIieVWuAEg
U41d6IPsYIPk8PABAcdF6ASUBAiNddjHBCTYkgQIx0QkBBiOBAjoQ/3//8cEJGiTBAiJXCQE6CP9
//+LTeiNXciNUfSLQgjB6B+EwA+FoAEgjVn8uAEg8AEDiciJBok0JMdEJAQuIMdEJAgg6IX9//+L
ddgx24P4/w+Uw41O9Lj/////8A/BRvyFwA+OOwEghNuNdagPhBcBIItN6I1duI1R9ItCCMHoH4TA
D4XnII1Z/LgBIPABA4nIiQaJNCTooP7//4t1qInDuP////+NTvTwD8FG/IXAD46dIIXbdUXHBCTY
kgQIx0QkBCuOBAjoavz//4td6Lj/////jUv08A/BQ/yFwH4gjWX4McBbXl3Di0EEiSAkg8AKiUQk
BOib/P//6+PHBCTYkgQIx0QkBEKOBAjoJfz//4nCiyCLSPSNNBGLRiCpQCB1BYPgCHQZiRQkiVwk
BOhQ/P//iQQkx0QkBDiOBAjrhIkUJIlcJAToh/v//+vli0EEiSAkg8AKiUQkBOgz/P//6Uz///+J
9okUJIlcJATHRCQIIOjI+///6Qr////HBCTYkgQIx0QkBE2OBAjon/v//+nQ/v//i0EEiSAkg8AK
iUQkBOjo+///6a7+//+NtCYgiRQkiVwkBMdEJAgg6Hj7///pVP7//420JiCJw4t16Lj/////jU70
8A/BRvyFwH4KiRwk6K77//+J9otBBIkgJIPAColEJAToivv//+vii3XYicO4/////41O9PAPwUb8
hcB/uItBBIkgJIPAColEJAToYPv//+ukQnQU6wqQkJCQkJCQkJCQkJCQ6Jf6//+JBCTon/r//+vx
QonDD4V6////iQQk6Iz6///pa////+lm////i3WoicO4/////41O9PAPwUb8hcAPj07///+LQQSJ
ICSDwAqJRCQE6Pb6///pN////0J1ookEJOhG+v//65hCicMPhSH///+JBCToM/r//+kS////QonD
D4Uf////iQQk6B36//+Jw+kQ////Qg+FY////4kEJOgH+v//6Vb///+NtiBVieWD7AjHBCQBIMdE
JAT//yDo1vv//4nsXcOJ9lWJ5YPsCMcEJCDHRCQE//8g6Lb7//+J7F3DkJBVieVTg+wEoWySBAi7
bJIECIP4/3QWjXYgjbwnAAAAAIPrBP/QiwOD+P919FhbXcNVieVTUugAAAAAW4HDigQAAI12AOin
+v//i138ycMAAAMAAAABAAIARW50ZXIgYSBmb3JtdWxhIDogAFRoZXJlIGFyZSBubyBicmFja2V0
cycKIFRoZXJlIGFyZSBUaGUgZm9ybXVsYSBoYXMgYSBkb3QKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHiSBAgYIAF6UEwgAXwIBiDchwQIIAQEiAEcIHCJBAhJIAQgQQ4IhQJCCgVNgwMkIEAgwIkECE8g
BCBBDgiFAkIKBUKGBIcDQ4MFIBwgaCAQigQILCAEIEEOCIUCQgoFIIggQIoECDoDIAT4kAQIQQ4I
hQJHCgVHgwSGAyAcIKwggI0ECB4gBCBBDgiFAkIKBSAcIMwgoI0ECB4gBCBBDgiFAkIKBSD/IIAB
AXw0FaAEIIIBBdQEINsBBboFII0CBaAEILwCBY4GAdICQ6AEIKQDBfgFAb8DBbUFINgDBaAEIO8D
BZ8FAY8EBZkEILkEBSDNBAWmBgH3BAX+BAGYBQWdBSCrBQWwBSDhBQXrBQHxBQX2BSCEBgWJBiCa
BgWfBiCwBgW1BiB/IAEgASABIMsBIAEg1QEgASAsAiAPIGQCIDSHBAgKICAg8I0ECAQgKIEECAUg
VIMECAYg1IEECAogICCdAiAQIBUgAyCEkgQIAiCAIBQgESAXILSGBAgRIJSGBAgSIBMgCCD+//9v
JIYECP///28DIPD//2/yhQQIIP////+AjQQIIP////+gjQQIIICRBAggYocECHKHBAiChwQIkocE
CKKHBAiyhwQIwocECNKHBAjihwQI8ocECAKIBAgSiAQIIogECDKIBAhCiAQIUogECAAAAAAAAAAA
AQAAAAAAogCFGQAACAAAAGQAAACEiAQIAQAAAGQAAACEiAQIOgAAADwAAAAAAAAASQAAAIAAAAAA
AAAAcwAAAIAAAAAAAAAAjQAAAIAAAAAAAAAAvAAAAIAAAAAAAAAA9AAAAIAAAAAAAAAAMQEAAIAA
AAAAAAAAggEAAIAAAAAAAAAA0wEAAIAAAAAAAAAA/gEAAIAAAAAAAAAALQIAAIAAAAAAAAAAVwIA
AIAAAAAAAAAAgAIAAIAAAAAAAAAAmgIAAIAAAAAAAAAAtQIAAIAAAAAAAAAA1gIAAIAAAAAAAAAA
DwMAAIAAAAAAAAAAMgMAAIAAAAAAAAAAVwMAAIAAAAAAAAAAgQMAAIAAAAAAAAAAqgMAAIIAAAAA
AAAAxAMAAIIAAAAAAAAAAAAAAKIAAAAAAAAAAAAAAKIAAAAAAAAACwQAAIIAAABjVgAAJgQAAIIA
AADvWwEATgQAAIIAAAAAAAAAZAQAAIIAAAAAAAAAewQAAIIAAAAAAAAAAAAAAKIAAAAAAAAAAAAA
AKIAAAAAAAAAAAAAAKIAAAAAAAAAjwQAAIIAAADYBAAAyAQAAIAAxwAAAAAAAAAAAKIAAAAAAAAA
3AQAAIAAIAAAAAAA8wQAAIAAIQAAAAAACgUAAIAAIiAfBSCAICMgNQUggCAlIE0FIIAgJiBjBSCA
IDEgegUggCAyIJIFIIAgMyCpBSCAIDQgwgUggCA1INoFIIAgNiDzBSCAIDggBiCAIDkgJAYggCA7
IEQGIIAgPSBaBiCAID4gcAYggCA/IIYGIIAgQCCcBiCAIEEgswYggCBCIMsGIIAgQyDhBiCAIEQg
+AYggCBFIA4HIIAgRiAmByCAIEcgPQcggCBIIFYHIIAgSSBrByCAIE4g0QcggCBRIOkHIIAgUiAI
IIAgUyAIIIAgVCA7CCCAIFUgVwgggCBWIG8IIIAgWCCHCCCAIFsgoQgggCBeILkIIIAgZSDPCCCA
IGgg6QgggCBsIAMggCBxIBwggCByIDcggCB1IFIggCB2IG8ggCB5IIoggCB6IKcggCB9IL8ggCCA
INgggCCDIPMggCCEIA8KICCAIIcgKAogIIAgiiBCCiAggiDLlAEgdgogIIIgRhAgngogIIAgoiDU
CiAggCAcIIAgIyBYIIAgWyCAIDQgdyCAIDwgxCCAIEMg/CCAIEYgGAogIIAgUyCrCiAggCBaIOkK
ICCAIF4gBg4ggCDbDiCAIGwg+w4ggCB0IE8PIIAgeSBwDyCAIIEg+A8ggCCGIDYQIIAgjCCiIKIg
jwQggiARCiAgThAggCAfASBkECCAIDgBIKIgeRAggiCMECCCIGIfII8EIIIgoiCeECCCIKIgyxAg
gCBLIKIgoiBOESCAIB4gkREggCAjINYRIIIg6REggiA1wQEgTgQgwiB5ECDCIIwQIIIgjwQgwiCe
ECDCIKIgjwQgwiD6ESCAINkSIIAgEBMggCBIIDoTIIAgSyBpEyCAIEwgmhMggCBVIM0TIIAgWiAI
FCCAIF4gQRQggCBhIHkUIIAgYiCxFCCAIF4VIIAgBxcggCD9FyCAIHQYIIAgrSCiIKIgmBgggCA1
IBkggCA3ICMZIIAgOCA7GSCAIDkgVRkggCA6IKIgbxkgGSBkIISIBAggaW5pdC5jIC91c3Ivc3Jj
L2J1aWxkLzEzMzczMS0xL0JVSUxEL2dsaWJjLTIuMi41L2NzdS8gZ2NjMl9jb21waWxlZC4gaW50
OnQoMCwxKT1yKDAsMSk7LTIxNDc0ODM2NDg7MjE0NzQ4MzY0NzsgY2hhcjp0KDAsMik9cigwLDIp
OzA7MTI3OyBsb25nIGludDp0KDAsMyk9cigwLDMpOy0yMTQ3NDgzNjQ4OzIxNDc0ODM2NDc7IHVu
c2lnbmVkIGludDp0KDAsNCk9cigwLDQpOzAwMDAwMDAwMDAwMDA7MDAzNzc3Nzc3Nzc3NzsgbG9u
ZyB1bnNpZ25lZCBpbnQ6dCgwLDUpPXIoMCw1KTswMDAwMDAwMDAwMDAwOzAwMzc3Nzc3Nzc3Nzc7
IGxvbmcgbG9uZyBpbnQ6dCgwLDYpPUBzNjQ7cigwLDYpOzAxMDAwMDAwMDAwMDAwMDAwMDAwMDAw
OzA3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc7IGxvbmcgbG9uZyB1bnNpZ25lZCBpbnQ6dCgwLDcpPUBz
NjQ7cigwLDcpOzAwMDAwMDAwMDAwMDA7MDE3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc7IHNob3J0IGlu
dDp0KDAsOCk9QHMxNjtyKDAsOCk7LTMyNzY4OzMyNzY3OyBzaG9ydCB1bnNpZ25lZCBpbnQ6dCgw
LDkpPUBzMTY7cigwLDkpOzA7NjU1MzU7IHNpZ25lZCBjaGFyOnQoMCwxMCk9QHM4O3IoMCwxMCk7
LTEyODsxMjc7IHVuc2lnbmVkIGNoYXI6dCgwLDExKT1Aczg7cigwLDExKTswOzI1NTsgZmxvYXQ6
dCgwLDEyKT1yKDAsMSk7NDswOyBkb3VibGU6dCgwLDEzKT1yKDAsMSk7ODswOyBsb25nIGRvdWJs
ZTp0KDAsMTQpPXIoMCwxKTsxMjswOyBjb21wbGV4IGludDp0KDAsMTUpPXM4cmVhbDooMCwxKSww
LDMyO2ltYWc6KDAsMSksMzIsMzI7OyBjb21wbGV4IGZsb2F0OnQoMCwxNik9cigwLDE2KTs4OzA7
IGNvbXBsZXggZG91YmxlOnQoMCwxNyk9cigwLDE3KTsxNjswOyBjb21wbGV4IGxvbmcgZG91Ymxl
OnQoMCwxOCk9cigwLDE4KTsyNDswOyBfX2J1aWx0aW5fdmFfbGlzdDp0KDAsMTkpPSooMCwyMCk9
KDAsMjApIC4uL2luY2x1ZGUvbGliYy1zeW1ib2xzLmggL3Vzci9zcmMvYnVpbGQvMTMzNzMxLTEv
QlVJTEQvZ2xpYmMtMi4yLjUvYnVpbGQtMSAtMS9jb25maWcuaCAuLi9zeXNkZXBzL2dudS9fR19j
b25maWcuaCAuLi9zeXNkZXBzLzEvc3lzdi8xL2JpdHMvdHlwZXMuaCAuLi9pbmNsdWRlL2ZlYXR1
cmVzLmggLi4vaW5jbHVkZS9zeXMvY2RlZnMuaCAuLi9taXNjL3N5cy9jZGVmcy5oIC91c3IvbGli
L2djYy1saWIvMSAtcmVkaGF0LTEvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIHNpemVfdDp0KDgsMSk9
KDAsNCkgX191X2NoYXI6dCg0LDEpPSgwLDExKSBfX3Vfc2hvcnQ6dCg0LDIpPSgwLDkpIF9fdV9p
bnQ6dCg0LDMpPSgwLDQpIF9fdV9sb25nOnQoNCw0KT0oMCw1KSBfX3VfcXVhZF90OnQoNCw1KT0o
MCw3KSBfX3F1YWRfdDp0KDQsNik9KDAsNikgX19pbnQ4X3Q6dCg0LDcpPSgwLDEwKSBfX3VpbnQ4
X3Q6dCg0LDgpPSgwLDExKSBfX2ludDE2X3Q6dCg0LDkpPSgwLDgpIF9fdWludDE2X3Q6dCg0LDEw
KT0oMCw5KSBfX2ludDMyX3Q6dCg0LDExKT0oMCwxKSBfX3VpbnQzMl90OnQoNCwxMik9KDAsNCkg
X19pbnQ2NF90OnQoNCwxMyk9KDAsNikgX191aW50NjRfdDp0KDQsMTQpPSgwLDcpIF9fcWFkZHJf
dDp0KDQsMTUpPSg0LDE2KT0qKDQsNikgX19kZXZfdDp0KDQsMTcpPSg0LDUpIF9fdWlkX3Q6dCg0
LDE4KT0oNCwzKSBfX2dpZF90OnQoNCwxOSk9KDQsMykgX19pbm9fdDp0KDQsMjApPSg0LDQpIF9f
bW9kZV90OnQoNCwyMSk9KDQsMykgX19ubGlua190OnQoNCwyMik9KDQsMykgX19vZmZfdDp0KDQs
MjMpPSgwLDMpIF9fbG9mZl90OnQoNCwyNCk9KDQsNikgX19waWRfdDp0KDQsMjUpPSgwLDEpIF9f
c3NpemVfdDp0KDQsMjYpPSgwLDEpIF9fcmxpbV90OnQoNCwyNyk9KDQsNCkgX19ybGltNjRfdDp0
KDQsMjgpPSg0LDUpIF9faWRfdDp0KDQsMjkpPSg0LDMpIF9fZnNpZF90OnQoNCwzMCk9KDQsMzEp
PXM4X192YWw6KDQsMzIpPWFyKDQsMzMpPXIoNCwzMyk7MDAwMDAwMDAwMDAwMDswMDM3Nzc3Nzc3
Nzc3OzswOzE7KDAsMSksMCw2NDs7IF9fZGFkZHJfdDp0KDQsMzQpPSgwLDEpIF9fY2FkZHJfdDp0
KDQsMzUpPSg0LDM2KT0qKDAsMikgX190aW1lX3Q6dCg0LDM3KT0oMCwzKSBfX3VzZWNvbmRzX3Q6
dCg0LDM4KT0oMCw0KSBfX3N1c2Vjb25kc190OnQoNCwzOSk9KDAsMykgX19zd2Jsa190OnQoNCw0
MCk9KDAsMykgX19jbG9ja190OnQoNCw0MSk9KDAsMykgX19jbG9ja2lkX3Q6dCg0LDQyKT0oMCwx
KSBfX3RpbWVyX3Q6dCg0LDQzKT0oMCwxKSBfX2tleV90OnQoNCw0NCk9KDAsMSkgX19pcGNfcGlk
X3Q6dCg0LDQ1KT0oMCw5KSBfX2Jsa3NpemVfdDp0KDQsNDYpPSgwLDMpIF9fYmxrY250X3Q6dCg0
LDQ3KT0oMCwzKSBfX2Jsa2NudDY0X3Q6dCg0LDQ4KT0oNCw2KSBfX2ZzYmxrY250X3Q6dCg0LDQ5
KT0oNCw0KSBfX2ZzYmxrY250NjRfdDp0KDQsNTApPSg0LDUpIF9fZnNmaWxjbnRfdDp0KDQsNTEp
PSg0LDQpIF9fZnNmaWxjbnQ2NF90OnQoNCw1Mik9KDQsNSkgX19pbm82NF90OnQoNCw1Myk9KDQs
NSkgX19vZmY2NF90OnQoNCw1NCk9KDQsMjQpIF9fdF9zY2FsYXJfdDp0KDQsNTUpPSgwLDMpIF9f
dF91c2NhbGFyX3Q6dCg0LDU2KT0oMCw1KSBfX2ludHB0cl90OnQoNCw1Nyk9KDAsMSkgX19zb2Nr
bGVuX3Q6dCg0LDU4KT0oMCw0KSAuLi9saW51eHRocmVhZHMvc3lzZGVwcy9wdGhyZWFkL2JpdHMv
cHRocmVhZHR5cGVzLmggLi4vc3lzZGVwcy8xL3N5c3YvMS9iaXRzL3NjaGVkLmggX19zY2hlZF9w
YXJhbTpUKDEwLDEpPXM0X19zY2hlZF9wcmlvcml0eTooMCwxKSwwLDMyOzsgX3B0aHJlYWRfZmFz
dGxvY2s6VCg5LDEpPXM4X19zdGF0dXM6KDAsMyksMCwzMjtfX3NwaW5sb2NrOigwLDEpLDMyLDMy
OzsgX3B0aHJlYWRfZGVzY3I6dCg5LDIpPSg5LDMpPSooOSw0KT14c19wdGhyZWFkX2Rlc2NyX3N0
cnVjdDogX19wdGhyZWFkX2F0dHJfczpUKDksNSk9czM2X19kZXRhY2hzdGF0ZTooMCwxKSwwLDMy
O19fc2NoZWRwb2xpY3k6KDAsMSksMzIsMzI7X19zY2hlZHBhcmFtOigxMCwxKSw2NCwzMjtfX2lu
aGVyaXRzY2hlZDooMCwxKSw5NiwzMjtfX3Njb3BlOigwLDEpLDEyOCwzMjtfX2d1YXJkc2l6ZToo
OCwxKSwxNjAsMzI7X19zdGFja2FkZHJfc2V0OigwLDEpLDE5MiwzMjtfX3N0YWNrYWRkcjooMCwx
OSksMjI0LDMyO19fc3RhY2tzaXplOig4LDEpLDI1NiwzMjs7IHB0aHJlYWRfYXR0cl90OnQoOSw2
KT0oOSw1KSBwdGhyZWFkX2NvbmRfdDp0KDksNyk9KDksOCk9czEyX19jX2xvY2s6KDksMSksMCw2
NDtfX2Nfd2FpdGluZzooOSwyKSw2NCwzMjs7IHB0aHJlYWRfY29uZGF0dHJfdDp0KDksOSk9KDks
MTApPXM0X19kdW1teTooMCwxKSwwLDMyOzsgcHRocmVhZF9rZXlfdDp0KDksMTEpPSgwLDQpIHB0
aHJlYWRfbXV0ZXhfdDp0KDksMTIpPSg5LDEzKT1zMjRfX21fcmVzZXJ2ZWQ6KDAsMSksMCwzMjtf
X21fY291bnQ6KDAsMSksMzIsMzI7X19tX293bmVyOig5LDIpLDY0LDMyO19fbV9raW5kOigwLDEp
LDk2LDMyO19fbV9sb2NrOig5LDEpLDEyOCw2NDs7IHB0aHJlYWRfbXV0ZXhhdHRyX3Q6dCg5LDE0
KT0oOSwxNSk9czRfX211dGV4a2luZDooMCwxKSwwLDMyOzsgcHRocmVhZF9vbmNlX3Q6dCg5LDE2
KT0oMCwxKSBfcHRocmVhZF9yd2xvY2tfdDpUKDksMTcpPXMzMl9fcndfbG9jazooOSwxKSwwLDY0
O19fcndfcmVhZGVyczooMCwxKSw2NCwzMjtfX3J3X3dyaXRlcjooOSwyKSw5NiwzMjtfX3J3X3Jl
YWRfd2FpdGluZzooOSwyKSwxMjgsMzI7X19yd193cml0ZV93YWl0aW5nOig5LDIpLDE2MCwzMjtf
X3J3X2tpbmQ6KDAsMSksMTkyLDMyO19fcndfcHNoYXJlZDooMCwxKSwyMjQsMzI7OyBwdGhyZWFk
X3J3bG9ja190OnQoOSwxOCk9KDksMTcpIHB0aHJlYWRfcndsb2NrYXR0cl90OnQoOSwxOSk9KDks
MjApPXM4X19sb2Nra2luZDooMCwxKSwwLDMyO19fcHNoYXJlZDooMCwxKSwzMiwzMjs7IHB0aHJl
YWRfc3BpbmxvY2tfdDp0KDksMjEpPSgwLDEpIHB0aHJlYWRfYmFycmllcl90OnQoOSwyMik9KDks
MjMpPXMyMF9fYmFfbG9jazooOSwxKSwwLDY0O19fYmFfcmVxdWlyZWQ6KDAsMSksNjQsMzI7X19i
YV9wcmVzZW50OigwLDEpLDk2LDMyO19fYmFfd2FpdGluZzooOSwyKSwxMjgsMzI7OyBwdGhyZWFk
X2JhcnJpZXJhdHRyX3Q6dCg5LDI0KT0oOSwyNSk9czRfX3BzaGFyZWQ6KDAsMSksMCwzMjs7IHB0
aHJlYWRfdDp0KDksMjYpPSgwLDUpIHdjaGFyX3Q6dCgxMSwxKT0oMCwzKSB3aW50X3Q6dCgxMSwy
KT0oMCw0KSAuLi9pbmNsdWRlL3djaGFyLmggLi4vd2NzbWJzL3djaGFyLmggLi4vc3lzZGVwcy8x
L3N5c3YvMS8xL2JpdHMvd2NoYXIuaCBfX21ic3RhdGVfdDp0KDEzLDEpPSgxMywyKT1zOF9fY291
bnQ6KDAsMSksMCwzMjtfX3ZhbHVlOigxMywzKT11NF9fd2NoOigxMSwyKSwwLDMyO19fd2NoYjoo
MTMsNCk9YXIoNCwzMyk7MDszOygwLDIpLDAsMzI7OywzMiwzMjs7IF9HX2Zwb3NfdDp0KDMsMSk9
KDMsMik9czEyX19wb3M6KDQsMjMpLDAsMzI7X19zdGF0ZTooMTMsMSksMzIsNjQ7OyBfR19mcG9z
NjRfdDp0KDMsMyk9KDMsNCk9czE2X19wb3M6KDQsNTQpLDAsNjQ7X19zdGF0ZTooMTMsMSksNjQs
NjQ7OyAuLi9pbmNsdWRlL2djb252LmggLi4vaWNvbnYvZ2NvbnYuaCA6VCgxNywxKT1lX19HQ09O
Vl9PSzowLF9fR0NPTlZfTk9DT05WOjEsX19HQ09OVl9OT0RCOjIsX19HQ09OVl9OT01FTTozLF9f
R0NPTlZfRU1QVFlfSU5QVVQ6NCxfX0dDT05WX0ZVTExfT1VUUFVUOjUsX19HQ09OVl9JTExFR0FM
X0lOUFVUOjYsX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVUOjcsX19HQ09OVl9JTExFR0FMX0RFU0NS
SVBUT1I6OCxfX0dDT05WX0lOVEVSTkFMX0VSUk9SOjksOyA6VCgxNywyKT1lX19HQ09OVl9JU19M
QVNUOjEsX19HQ09OVl9JR05PUkVfRVJST1JTOjIsOyBfX2djb252X2ZjdDp0KDE3LDMpPSgxNyw0
KT0qKDE3LDUpPWYoMCwxKSBfX2djb252X2luaXRfZmN0OnQoMTcsNik9KDE3LDcpPSooMTcsOCk9
ZigwLDEpIF9fZ2NvbnZfZW5kX2ZjdDp0KDE3LDkpPSgxNywxMCk9KigxNywxMSk9ZigwLDIwKSBf
X2djb252X3RyYW5zX2ZjdDp0KDE3LDEyKT0oMTcsMTMpPSooMTcsMTQpPWYoMCwxKSBfX2djb252
X3RyYW5zX2NvbnRleHRfZmN0OnQoMTcsMTUpPSgxNywxNik9KigxNywxNyk9ZigwLDEpIF9fZ2Nv
bnZfdHJhbnNfcXVlcnlfZmN0OnQoMTcsMTgpPSgxNywxOSk9KigxNywyMCk9ZigwLDEpIF9fZ2Nv
bnZfdHJhbnNfaW5pdF9mY3Q6dCgxNywyMSk9KDE3LDIyKT0qKDE3LDIzKT1mKDAsMSkgX19nY29u
dl90cmFuc19lbmRfZmN0OnQoMTcsMjQpPSgxNywyNSk9KigxNywyNik9ZigwLDIwKSBfX2djb252
X3RyYW5zX2RhdGE6VCgxNywyNyk9czIwX190cmFuc19mY3Q6KDE3LDEyKSwwLDMyO19fdHJhbnNf
Y29udGV4dF9mY3Q6KDE3LDE1KSwzMiwzMjtfX3RyYW5zX2VuZF9mY3Q6KDE3LDI0KSw2NCwzMjtf
X2RhdGE6KDAsMTkpLDk2LDMyO19fbmV4dDooMTcsMjgpPSooMTcsMjcpLDEyOCwzMjs7IF9fZ2Nv
bnZfc3RlcDpUKDE3LDI5KT1zNTZfX3NobGliX2hhbmRsZTooMTcsMzApPSooMTcsMzEpPXhzX19n
Y29udl9sb2FkZWRfb2JqZWN0OiwwLDMyO19fbW9kbmFtZTooMTcsMzIpPSooMCwyKSwzMiwzMjtf
X2NvdW50ZXI6KDAsMSksNjQsMzI7X19mcm9tX25hbWU6KDQsMzYpLDk2LDMyO19fdG9fbmFtZToo
NCwzNiksMTI4LDMyO19fZmN0OigxNywzKSwxNjAsMzI7X19pbml0X2ZjdDooMTcsNiksMTkyLDMy
O19fZW5kX2ZjdDooMTcsOSksMjI0LDMyO19fbWluX25lZWRlZF9mcm9tOigwLDEpLDI1NiwzMjtf
X21heF9uZWVkZWRfZnJvbTooMCwxKSwyODgsMzI7X19taW5fbmVlZGVkX3RvOigwLDEpLDMyMCwz
MjtfX21heF9uZWVkZWRfdG86KDAsMSksMzUyLDMyO19fc3RhdGVmdWw6KDAsMSksMzg0LDMyO19f
ZGF0YTooMCwxOSksNDE2LDMyOzsgX19nY29udl9zdGVwX2RhdGE6VCgxNywzMyk9czM2X19vdXRi
dWY6KDE3LDM0KT0qKDAsMTEpLDAsMzI7X19vdXRidWZlbmQ6KDE3LDM0KSwzMiwzMjtfX2ZsYWdz
OigwLDEpLDY0LDMyO19faW52b2NhdGlvbl9jb3VudGVyOigwLDEpLDk2LDMyO19faW50ZXJuYWxf
dXNlOigwLDEpLDEyOCwzMjtfX3N0YXRlcDooMTcsMzUpPSooMTMsMSksMTYwLDMyO19fc3RhdGU6
KDEzLDEpLDE5Miw2NDtfX3RyYW5zOigxNywyOCksMjU2LDMyOzsgX19nY29udl9pbmZvOlQoMTcs
MzYpPXM4X19uc3RlcHM6KDgsMSksMCwzMjtfX3N0ZXBzOigxNywzNyk9KigxNywyOSksMzIsMzI7
X19kYXRhOigxNywzOCk9YXIoNCwzMyk7MDstMTsoMTcsMzMpLDY0LDA7OyBfX2djb252X3Q6dCgx
NywzOSk9KDE3LDQwKT0qKDE3LDM2KSBfR19pY29udl90OnQoMyw1KT0oMyw2KT11NDRfX2NkOigx
NywzNiksMCw2NDtfX2NvbWJpbmVkOigzLDcpPXM0NF9fY2Q6KDE3LDM2KSwwLDY0O19fZGF0YToo
MTcsMzMpLDY0LDI4ODs7LDAsMzUyOzsgX0dfaW50MTZfdDp0KDMsOCk9KDAsOCkgX0dfaW50MzJf
dDp0KDMsOSk9KDAsMSkgX0dfdWludDE2X3Q6dCgzLDEwKT0oMCw5KSBfR191aW50MzJfdDp0KDMs
MTEpPSgwLDQpIF9JT19zdGRpbl91c2VkOkcoMCwxKSBHQ0M6IChHTlUpIDIuOTYgMjAwMDA3MzEg
KFJlZCBIYXQgTGludXggNy4zIDIuOTYtMTEwKSBHQ0M6IChHTlUpIDIuOTYgMjAwMDA3MzEgKFJl
ZCBIYXQgTGludXggNy4zIDIuOTYtMTEwKSBHQ0M6IChHTlUpIDMuMiBHQ0M6IChHTlUpIDMuMiBH
Q0M6IChHTlUpIDMuMiBHQ0M6IChHTlUpIDIuOTYgMjAwMDA3MzEgKFJlZCBIYXQgTGludXggNy4z
IDIuOTYtMTEwKSAIIAEgMDEuMDEgCCABIDAxLjAxIAggASAwMS4wMSAuc3ltdGFiIC5zdHJ0YWIg
LnNoc3RydGFiIC5pbnRlcnAgLm5vdGUuQUJJLXRhZyAuaGFzaCAuZHluc3ltIC5keW5zdHIgLmdu
dS52ZXJzaW9uIC5nbnUudmVyc2lvbl9yIC5yZWwuZHluIC5yZWwucGx0IC5pbml0IC50ZXh0IC5m
aW5pIC5yb2RhdGEgLmRhdGEgLmVoX2ZyYW1lIC5nY2NfZXhjZXB0X3RhYmxlIC5keW5hbWljIC5j
dG9ycyAuZHRvcnMgLmpjciAuZ290IC5ic3MgLnN0YWIgLnN0YWJzdHIgLmNvbW1lbnQgLm5vdGUg
GyABIAIg9IAECPQgEyABICMgByACIAiBBAgIASAEIDEgBSACICiBBAgoASCsIAQgBCAEIDcgAiDU
gQQI1AEggAEgBSABIAQgECA/IAMgAiBUgwQIVAMgnQIgASBHIP///28CIPKFBAjyBSAwIAQgAiAC
IFQg/v//bwIgJIYECCQGIHAgBSADIAQgYyACIJSGBAiUBiAEIAQgCCBsIAIgtIYECLQGIIAgBCAE
IAggdSABIAYgNIcECDQHIBggBCBwIAEgBiBMhwQITAcgEAEgBCAEIHsgASAGIGCIBAhgCCCQBSAQ
IIEgASAGIPCNBAjwCiAgHiAEIIcgASACIBCOBAgQDiBUIAQgjyABIAMgkAQIIBAgBCCVIAEgAyCQ
BAggECDsIAQgnyABIAMg+JAECPgQIIUgBCCxIAYgAyCAkQQIgBEg6CAFIAQgCCC6IAEgAyBokgQI
aBIgBCDBIAEgAyB0kgQIdBIgBCDIIAEgAyCAkgQIgBIgBCAEIM0gASADIISSBAiEEiBQIAQgBCDS
IAggAyDYkgQI2BIgUAEgCCDXIAEg2BIgpAcgGSAEIN0gAyB8GiCFGSABIOYgASABNCDVIAEg7yAH
INY0IDwgASARIAMgEjUg9SABIAEgAiDgOiDwBSAeIDogBCAQIAMg0EAgMwUgASD0gAQIIAMgASAI
gQQIIAMgAiAogQQIIAMgAyDUgQQIIAMgBCBUgwQIIAMgBSDyhQQIIAMgBiAkhgQIIAMgByCUhgQI
IAMgCCC0hgQIIAMgNIcECCADCiAgICAgTIcECCADIGCIBAggAyDwjQQIIAMKICAgICAQjgQIIAMg
DiCQBAggAyAPIJAECCADIBAg+JAECCADIBEggJEECCADIBIgaJIECCADIBMgdJIECCADIBQggJIE
CCADIBUghJIECCADIBYg2JIECCADIBcgAyAYIAMgGSADIBogAyAbIAMgHCADIB0gAyAeIAEgBCDx
/wggBCDx/xMghIgECCAiAAAAhIgECAAAAAACAAwAMgAAAAAAAAAAAAAABADx/z0AAABokgQIAAAA
AAEAEwBLAAAAdJIECAAAAAABABQAWQAAAAyQBAgAAAAAAQAQAGwAAACAkgQIAAAAAAEAFQB5AAAA
CJAECAAAAAABAA8AfQAAAAiUBAgBAAAAAQAXAIkAAACwiAQIAAAAAAIADACfAAAADJQECBgAAAAB
ABcAqAAAABCJBAgAAAAAAgAMADIAAAAAAAAAAAAAAAQA8f+0AAAAcJIECAAAAAABABMAwQAAAHyS
BAgAAAAAAQAUAM4AAAD0kAQIAAAAAAEAEADcAAAAgJIECAAAAAABABUA6AAAAMCNBAgAAAAAAgAM
AAgAAAAAAAAAAAAAAAQA8f8TAAAA8I0ECAAAAAAAAAwA/gAAAAAAAAAAAAAABADx/woBAAAklAQI
AQAAAAEAFwAbAQAAcIkECEkAAAACAAwASwEAAICNBAgeAAAAAgAMAGgBAACgjQQIHgAAAAIADACF
AQAAgJEECAAAAAARABIAjgEAANiSBAiMAAAAEQAXAKUBAABchwQIAgIAABIAAAC8AQAAEI4ECAQA
AAARAA4AwwEAAGyHBAgkAAAAEgAAAOABAAAEkAQIAAAAABEADwDtAQAAfIcECBwBAAASAAAADwIA
AMCJBAhPAAAAEgAMACECAACMhwQI/wAAACIgSAIgnIcECEkgEiBtAiAQigQILCASIIICIDSHBAgg
EgogiAIgrIcECAoCIBIg4AIgaJMECJAgESAXIPYCILyHBAi1ASASIDsDIMyHBAiKIBIgZQMgYIgE
CCASIGwDINyHBAiuBCASII0DINSSBAggECDx/5kDIECKBAg6AyASIJ4DIOyHBAiaICIAAADDAwAA
/IcECMoAAAASAAAA4AMAAACQBAgAAAAAIAAPAOsDAADwjQQIAAAAABIACgDxAwAADIgECHsBAAAS
AAAACAQAANSSBAgAAAAAEADx/w8EAACEkgQIAAAAABEAFgAlBAAAKJQECAAAAAAQAPH/KgQAAByI
BAhuAAAAEgAAAHEEAAAsiAQI1wAAABIAAACJBAAAFI4ECAQAAAARAA4AmAQAAPiTBAgQAAAAEQAX
AMIEAAAAkAQIAAAAABAADwDPBAAAAAAAAAAAAAAgAAAA4wQAADyIBAg3AAAAEgAAAAgFAABMiAQI
ZQAAABIAAAAkBQAAAAAAAAAAAAAgAAAAAGluaXQuYwBpbml0ZmluaS5jAGdjYzJfY29tcGlsZWQu
AGNhbGxfZ21vbl9zdGFydABjcnRzdHVmZi5jAF9fQ1RPUl9MSVNUX18AX19EVE9SX0xJU1RfXwBf
X0VIX0ZSQU1FX0JFR0lOX18AX19KQ1JfTElTVF9fAHAuMABjb21wbGV0ZWQuMQBfX2RvX2dsb2Jh
bF9kdG9yc19hdXgAb2JqZWN0LjIAZnJhbWVfZHVtbXkAX19DVE9SX0VORF9fAF9fRFRPUl9FTkRf
XwBfX0ZSQU1FX0VORF9fAF9fSkNSX0VORF9fAF9fZG9fZ2xvYmFsX2N0b3JzX2F1eABzdHJpbmd0
ZXN0LmNwcABfWlN0OF9faW9pbml0AF9aNDFfX3N0YXRpY19pbml0aWFsaXphdGlvbl9hbmRfZGVz
dHJ1Y3Rpb25fMGlpAF9HTE9CQUxfX0lfX1oxMW5vX2JyYWNrZXRzU3MAX0dMT0JBTF9fRF9fWjEx
bm9fYnJhY2tldHNTcwBfRFlOQU1JQwBfWlN0NGNvdXRAQEdMSUJDUFBfMy4yAF9aTlNvbHNFbEBA
R0xJQkNQUF8zLjIAX2ZwX2h3AF9aU3Q5dGVybWluYXRldkBAR0xJQkNQUF8zLjIAX19kc29faGFu
ZGxlAF9fY3hhX2NhbGxfdW5leHBlY3RlZEBAQ1hYQUJJXzEuMgBfWjExbm9fYnJhY2tldHNTcwBf
X2RlcmVnaXN0ZXJfZnJhbWVfaW5mb19iYXNlc0BAR0NDXzMuMABfWk5TdDhpb3NfYmFzZTRJbml0
QzFFdkBAR0xJQkNQUF8zLjIAX1oxNGlzX3RoZXJlX2FfZG90U3MAX2luaXQAX1pTdHJzSWNTdDEx
Y2hhcl90cmFpdHNJY0VTYUljRUVSU3QxM2Jhc2ljX2lzdHJlYW1JVF9UMF9FUzdfUlNiSVM0X1M1
X1QxX0VAQEdMSUJDUFBfMy4yAF9aU3QzY2luQEBHTElCQ1BQXzMuMgBfWlN0bHNJU3QxMWNoYXJf
dHJhaXRzSWNFRVJTdDEzYmFzaWNfb3N0cmVhbUljVF9FUzVfUEtjQEBHTElCQ1BQXzMuMgBfWk5T
czRfUmVwOF9NX2Nsb25lRVJLU2FJY0VqQEBHTElCQ1BQXzMuMgBfc3RhcnQAX19neHhfcGVyc29u
YWxpdHlfdjBAQENYWEFCSV8xLjIAX19ic3Nfc3RhcnQAbWFpbgBfX3JlZ2lzdGVyX2ZyYW1lX2lu
Zm9fYmFzZXNAQEdDQ18zLjAAX19saWJjX3N0YXJ0X21haW5AQEdMSUJDXzIuMABkYXRhX3N0YXJ0
AF9maW5pAF9aTlNvbHNFbUBAR0xJQkNQUF8zLjIAX2VkYXRhAF9HTE9CQUxfT0ZGU0VUX1RBQkxF
XwBfZW5kAF9aTlN0MjRfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGVJTGIxRUxpMEVFMTBkZWFsbG9j
YXRlRVB2akBAR0xJQkNQUF8zLjIAX1Vud2luZF9SZXN1bWVAQEdDQ18zLjAAX0lPX3N0ZGluX3Vz
ZWQAX1pOU3MyMF9TX2VtcHR5X3JlcF9zdG9yYWdlRUBAR0xJQkNQUF8zLjIAX19kYXRhX3N0YXJ0
AF9Kdl9SZWdpc3RlckNsYXNzZXMAX1pOU3Q4aW9zX2Jhc2U0SW5pdEQxRXZAQEdMSUJDUFBfMy4y
AF9aTktTczRmaW5kRWNqQEBHTElCQ1BQXzMuMgBfX2dtb25fc3RhcnRfXwAiCiMgNTAgIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7
CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJv
d19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAg
dm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2lj
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19v
dmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZs
b3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJl
KGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA1MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0
cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1w
Yy1saW51eC1nbnUvYml0cy9hdG9taWNpdHkuaCIgMSAzCiMgMzMgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYXRvbWljaXR5LmgiIDMKdHlwZWRlZiBp
bnQgX0F0b21pY193b3JkOwoKc3RhdGljIGlubGluZSBfQXRvbWljX3dvcmQKX19hdHRyaWJ1dGVf
XyAoKF9fdW51c2VkX18pKQpfX2V4Y2hhbmdlX2FuZF9hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29y
ZCAqX19tZW0sIGludCBfX3ZhbCkKewogIHJlZ2lzdGVyIF9BdG9taWNfd29yZCBfX3Jlc3VsdDsK
ICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IHhhZGRsICUwLCUyIgogICAgICAgICAgICAg
ICAgICAgICAgICA6ICI9ciIgKF9fcmVzdWx0KQogICAgICAgICAgICAgICAgICAgICAgICA6ICIw
IiAoX192YWwpLCAibSIgKCpfX21lbSkKICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5
Iik7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpzdGF0aWMgaW5saW5lIHZvaWQKX19hdHRyaWJ1dGVf
XyAoKF9fdW51c2VkX18pKQpfX2F0b21pY19hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCogX19t
ZW0sIGludCBfX3ZhbCkKewogIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgYWRkbCAlMCwl
MSIKICAgICAgICAgICAgICAgICAgICAgICAgOiA6ICJpciIgKF9fdmFsKSwgIm0iICgqX19tZW0p
IDogIm1lbW9yeSIpOwp9CiMgNTIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9j
YWxlZndkLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIGNsYXNzIGxvY2FsZTsKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3NwYWNlKF9DaGFyVCwg
Y29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBi
b29sCiAgICBpc3ByaW50KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCwgY29uc3QgbG9j
YWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp
c3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGlubGluZSBib29sCiAgICBpc2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhhKF9D
aGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu
bGluZSBib29sCiAgICBpc2RpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3B1bmN0KF9DaGFyVCwgY29u
c3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29s
CiAgICBpc3hkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbG51bShfQ2hhclQsIGNvbnN0IGxvY2Fs
ZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNn
cmFwaChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIo
X0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCgoKICBjbGFzcyBjdHlwZV9iYXNlOwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlOwogIHRlbXBsYXRlPD4gY2xhc3MgY3R5
cGU8Y2hhcj47CgogIHRlbXBsYXRlPD4gY2xhc3MgY3R5cGU8d2NoYXJfdD47CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5bmFtZTsKCgogIGNsYXNzIGNvZGVj
dnRfYmFzZTsKICBjbGFzcyBfX2VuY190cmFpdHM7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVy
blQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2
dDsKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PjsKCiAg
dGVtcGxhdGU8PiBjbGFzcyBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD47CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0
YXRlVD4KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAg
IGNsYXNzIG51bV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0
SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBudW1fcHV0Owog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVuY3Q7CiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4g
Y2xhc3MKICAgIGNvbGxhdGVfYnluYW1lOwoKCiAgY2xhc3MgdGltZV9iYXNlOwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8
X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xh
c3MgdGltZV9nZXRfYnluYW1lOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9w
dXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJl
YW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWU7CgoKICBj
bGFzcyBtb25leV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBtb25leV9nZXQ7
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1i
dWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBtb25leV9wdXQ7CiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAgICBjbGFzcyBtb25leXB1bmN0Owog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgogICAgY2xhc3Mg
bW9uZXlwdW5jdF9ieW5hbWU7CgoKICBjbGFzcyBtZXNzYWdlc19iYXNlOwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTsKCgogIGNsYXNzIGxvY2FsZQogIHsKICBw
dWJsaWM6CgogICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgY2F0ZWdvcnk7CgoKICAgIGNsYXNzIGZh
Y2V0OwogICAgY2xhc3MgaWQ7CiAgICBjbGFzcyBfSW1wbDsKCiAgICBmcmllbmQgY2xhc3MgZmFj
ZXQ7CiAgICBmcmllbmQgY2xhc3MgX0ltcGw7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0
PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxl
Jik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAg
ICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsKCgoKICAgIHN0YXRpYyBjb25zdCBj
YXRlZ29yeSBub25lID0gMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjdHlwZSA9IDFMIDw8
IDA7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbnVtZXJpYyA9IDFMIDw8IDE7CiAgICBzdGF0
aWMgY29uc3QgY2F0ZWdvcnkgY29sbGF0ZSA9IDFMIDw8IDI7CiAgICBzdGF0aWMgY29uc3QgY2F0
ZWdvcnkgdGltZSA9IDFMIDw8IDM7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbW9uZXRhcnkg
PSAxTCA8PCA0OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1lc3NhZ2VzID0gMUwgPDwgNTsK
ICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBhbGwgPSAoY29sbGF0ZSB8IGN0eXBlIHwgbW9uZXRh
cnkgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpYyB8
IHRpbWUgfCBtZXNzYWdlcyk7CgoKICAgIGxvY2FsZSgpIHRocm93KCk7CgogICAgbG9jYWxlKGNv
bnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKGNv
bnN0IGNoYXIqIF9fcyk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBj
aGFyKiBfX3MsIGNhdGVnb3J5IF9fY2F0KTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jh
c2UsIGNvbnN0IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsKCiAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNl
dCogX19mKTsKCiAgICB+bG9jYWxlKCkgdGhyb3coKTsKCiAgICBjb25zdCBsb2NhbGUmCiAgICBv
cGVyYXRvcj0oY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9GYWNldD4KICAgICAgbG9jYWxlCiAgICAgIGNvbWJpbmUoY29uc3QgbG9jYWxlJiBf
X290aGVyKSBjb25zdDsKCgogICAgc3RyaW5nCiAgICBuYW1lKCkgY29uc3Q7CgogICAgYm9vbAog
ICAgb3BlcmF0b3I9PShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93ICgpOwoKICAg
IGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3Qg
dGhyb3cgKCkKICAgIHsgcmV0dXJuICEodGhpcy0+b3BlcmF0b3I9PShfX290aGVyKSk7IH0KCiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgICBib29sCiAgICAgIG9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MxLAogICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3Q7CgoKICAgIHN0YXRpYyBs
b2NhbGUKICAgIGdsb2JhbChjb25zdCBsb2NhbGUmKTsKCiAgICBzdGF0aWMgY29uc3QgbG9jYWxl
JgogICAgY2xhc3NpYygpOwoKICBwcml2YXRlOgoKICAgIF9JbXBsKiBfTV9pbXBsOwoKCiAgICBz
dGF0aWMgX0ltcGwqIF9TX2NsYXNzaWM7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfZ2xvYmFsOwoK
ICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfbnVtX2NhdGVnb3JpZXMgPSA2OwoKICAgIGV4cGxp
Y2l0CiAgICBsb2NhbGUoX0ltcGwqKSB0aHJvdygpOwoKICAgIHN0YXRpYyBpbmxpbmUgdm9pZAog
ICAgX1NfaW5pdGlhbGl6ZSgpCiAgICB7CiAgICAgIGlmICghX1NfY2xhc3NpYykKICAgICAgICBj
bGFzc2ljKCk7CiAgICB9CgogICAgc3RhdGljIGNhdGVnb3J5CiAgICBfU19ub3JtYWxpemVfY2F0
ZWdvcnkoY2F0ZWdvcnkpOwoKICAgIHZvaWQKICAgIF9NX2NvYWxlc2NlKGNvbnN0IGxvY2FsZSYg
X19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7CiAgfTsKCgoKICBj
bGFzcyBsb2NhbGU6Ol9JbXBsCiAgewogIHB1YmxpYzoKCiAgICBmcmllbmQgY2xhc3MgbG9jYWxl
OwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6ZmFjZXQ7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3Qg
bG9jYWxlJik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9v
bAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsKCiAgcHJpdmF0ZToKCiAg
ICBfQXRvbWljX3dvcmQgX01fcmVmZXJlbmNlczsKICAgIGZhY2V0KiogX01fZmFjZXRzOwogICAg
c2l6ZV90IF9NX2ZhY2V0c19zaXplOwogICAgY29uc3QgY2hhciogX01fbmFtZXNbX1NfbnVtX2Nh
dGVnb3JpZXNdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX2N0eXBl
W107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbnVtZXJpY1tdOwog
ICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX2NvbGxhdGVbXTsKICAgIHN0
YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF90aW1lW107CiAgICBzdGF0aWMgY29u
c3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbW9uZXRhcnlbXTsKICAgIHN0YXRpYyBjb25zdCBs
b2NhbGU6OmlkKiBjb25zdCBfU19pZF9tZXNzYWdlc1tdOwogICAgc3RhdGljIGNvbnN0IGxvY2Fs
ZTo6aWQqIGNvbnN0KiBjb25zdCBfU19mYWNldF9jYXRlZ29yaWVzW107CgogICAgaW5saW5lIHZv
aWQKICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygpCiAgICB7IF9fYXRvbWljX2FkZCgmX01f
cmVmZXJlbmNlcywgMSk7IH0KCiAgICBpbmxpbmUgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5j
ZSgpIHRocm93KCkKICAgIHsKICAgICAgaWYgKF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmZXJl
bmNlcywgLTEpID09IDEpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgZGVs
ZXRlIHRoaXM7IH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgeyB9CiAgICAgICAg
fQogICAgfQoKICAgIF9JbXBsKGNvbnN0IF9JbXBsJiwgc2l6ZV90KTsKICAgIF9JbXBsKGNvbnN0
IGNoYXIqLCBzaXplX3QpOwogICAgX0ltcGwoZmFjZXQqKiwgc2l6ZV90LCBib29sKTsKCiAgIH5f
SW1wbCgpIHRocm93KCk7CgogICAgX0ltcGwoY29uc3QgX0ltcGwmKTsKCiAgICB2b2lkCiAgICBv
cGVyYXRvcj0oY29uc3QgX0ltcGwmKTsKCiAgICBpbmxpbmUgYm9vbAogICAgX01fY2hlY2tfc2Ft
ZV9uYW1lKCkKICAgIHsKICAgICAgYm9vbCBfX3JldCA9IHRydWU7CiAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBfX3JldCAmJiBpIDwgX1NfbnVtX2NhdGVnb3JpZXMgLSAxOyArK2kpCiAgICAgICAg
X19yZXQgJj0gKHN0cmNtcChfTV9uYW1lc1tpXSwgX01fbmFtZXNbaSArIDFdKSA9PSAwKTsKICAg
ICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0ZWdvcmll
cyhjb25zdCBfSW1wbCosIGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVn
b3J5KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCogY29uc3QqKTsKCiAgICB2b2lkCiAg
ICBfTV9yZXBsYWNlX2ZhY2V0KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCopOwoKICAg
IHZvaWQKICAgIF9NX2luc3RhbGxfZmFjZXQoY29uc3QgbG9jYWxlOjppZCosIGZhY2V0Kik7Cgog
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBpbmxpbmUgdm9pZAogICAgICBfTV9p
bml0X2ZhY2V0KF9GYWNldCogX19mYWNldCkKICAgICAgeyBfTV9pbnN0YWxsX2ZhY2V0KCZfRmFj
ZXQ6OmlkLCBfX2ZhY2V0KTsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAg
IGxvY2FsZTo6bG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpCiAgICB7
CiAgICAgIF9NX2ltcGwgPSBuZXcgX0ltcGwoKl9fb3RoZXIuX01faW1wbCwgMSk7CiAgICAgIF9N
X2ltcGwtPl9NX2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZik7CiAgICAgIGZvciAoc2l6
ZV90IF9faSA9IDA7IF9faSA8IF9TX251bV9jYXRlZ29yaWVzOyArK19faSkKICAgICAgICBfTV9p
bXBsLT5fTV9uYW1lc1tfX2ldID0gIioiOwogICAgfQoKCiAgY2xhc3MgbG9jYWxlOjpmYWNldAog
IHsKICBwcml2YXRlOgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBs
b2NhbGU6Ol9JbXBsOwoKICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwoKICBwcm90ZWN0
ZWQ6CgoKICAgIHN0YXRpYyBfX2NfbG9jYWxlIF9TX2NfbG9jYWxlOwoKICAgIGV4cGxpY2l0CiAg
ICBmYWNldChzaXplX3QgX19yZWZzID0gMCkgdGhyb3coKTsKCiAgICB2aXJ0dWFsCiAgICB+ZmFj
ZXQoKTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUm
IF9fY2xvYywgY29uc3QgY2hhciogX19zLAogICAgICAgICAgICAgICAgICAgICAgIF9fY19sb2Nh
bGUgX19vbGQgPSAwKTsKCiAgICBzdGF0aWMgX19jX2xvY2FsZQogICAgX1NfY2xvbmVfY19sb2Nh
bGUoX19jX2xvY2FsZSYgX19jbG9jKTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfZGVzdHJveV9j
X2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoKICBwcml2YXRlOgogICAgdm9pZAogICAgX01f
YWRkX3JlZmVyZW5jZSgpIHRocm93KCk7CgogICAgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5j
ZSgpIHRocm93KCk7CgogICAgZmFjZXQoY29uc3QgZmFjZXQmKTsKCiAgICB2b2lkCiAgICBvcGVy
YXRvcj0oY29uc3QgZmFjZXQmKTsKICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6aWQKICB7CiAgcHJp
dmF0ZToKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpf
SW1wbDsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9G
YWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwogICAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxl
JikgdGhyb3cgKCk7CgoKCgogICAgbXV0YWJsZSBzaXplX3QgX01faW5kZXg7CgoKICAgIHN0YXRp
YyBfQXRvbWljX3dvcmQgX1NfaGlnaHdhdGVyOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25z
dCBpZCYpOwoKICAgIGlkKGNvbnN0IGlkJik7CgogIHB1YmxpYzoKCgogICAgaWQoKTsKCiAgICBp
bmxpbmUgc2l6ZV90CiAgICBfTV9pZCgpIGNvbnN0CiAgICB7CiAgICAgIGlmICghX01faW5kZXgp
CiAgICAgICAgX01faW5kZXggPSAxICsgX19leGNoYW5nZV9hbmRfYWRkKCZfU19oaWdod2F0ZXIs
IDEpOwogICAgICByZXR1cm4gX01faW5kZXggLSAxOwogICAgfQogIH07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2Nh
bGUmIF9fbG9jKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFz
X2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCk7Cn0KIyA0OSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjIvaW9zIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9i
aXRzL2lvc19iYXNlLmgiIDEgMwojIDQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRz
L2lvc19iYXNlLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIGVudW0gX0lvc19GbXRmbGFn
cyB7IF9NX2lvc19mbXRmbGFnc19lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19GbXRm
bGFncwogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAg
eyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2Fz
dDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8KF9Jb3Nf
Rm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdz
KHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5s
aW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl4oX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10
ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2Ep
IF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9w
ZXJhdG9yfD0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVy
biBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvciY9
KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0g
X19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3JePShfSW9zX0Zt
dGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9f
YjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfihfSW9zX0ZtdGZsYWdzIF9f
YSkKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgoK
ICBlbnVtIF9Jb3NfT3Blbm1vZGUgeyBfTV9pb3Nfb3Blbm1vZGVfZW5kID0gMUwgPDwgMTYgfTsK
CiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciYoX0lvc19PcGVubW9kZSBfX2EsIF9J
b3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50
PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9k
ZQogIG9wZXJhdG9yfChfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyBy
ZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxp
bnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JeKF9Jb3NfT3Bl
bm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0
YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5l
IF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnw9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVu
bW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9zX09w
ZW5tb2RlCiAgb3BlcmF0b3ImPShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19i
KQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQog
IG9wZXJhdG9yXj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJl
dHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRv
cn4oX0lvc19PcGVubW9kZSBfX2EpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZSh+c3RhdGljX2Nh
c3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX0lvc3RhdGUgeyBfTV9pb3NfaW9zdGF0ZV9l
bmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3ImKF9Jb3Nf
SW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0
YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5l
IF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfChfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUg
X19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0
aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcl4o
X0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3Rh
dGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBp
bmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8PShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19J
b3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3Nf
SW9zdGF0ZQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2Ip
CiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBv
cGVyYXRvcl49KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJu
IF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J+KF9J
b3NfSW9zdGF0ZSBfX2EpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKH5zdGF0aWNfY2FzdDxpbnQ+
KF9fYSkpOyB9CgogIGVudW0gX0lvc19TZWVrZGlyIHsgX01faW9zX3NlZWtkaXJfZW5kID0gMUwg
PDwgMTYgfTsKCgogIGNsYXNzIGlvc19iYXNlCiAgewogIHB1YmxpYzoKCgogICAgY2xhc3MgZmFp
bHVyZSA6IHB1YmxpYyBleGNlcHRpb24KICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBleHBsaWNp
dAogICAgICBmYWlsdXJlKGNvbnN0IHN0cmluZyYgX19zdHIpIHRocm93KCk7CgoKCiAgICAgIHZp
cnR1YWwKICAgICAgfmZhaWx1cmUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy
KgogICAgICB3aGF0KCkgY29uc3QgdGhyb3coKTsKCiAgICBwcml2YXRlOgogICAgICBlbnVtIHsg
X01fYnVmc2l6ZSA9IDI1NiB9OwogICAgICBjaGFyIF9NX25hbWVbX01fYnVmc2l6ZV07CgogICAg
fTsKCgogICAgdHlwZWRlZiBfSW9zX0ZtdGZsYWdzIGZtdGZsYWdzOwoKICAgIHN0YXRpYyBjb25z
dCBmbXRmbGFncyBib29sYWxwaGEgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYm9vbGFscGhh
KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBkZWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6
X1NfZGVjKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmaXhlZCA9IGZtdGZsYWdzKF9faW9z
X2ZsYWdzOjpfU19maXhlZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaGV4ID0gZm10Zmxh
Z3MoX19pb3NfZmxhZ3M6Ol9TX2hleCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaW50ZXJu
YWwgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaW50ZXJuYWwpOwogICAgc3RhdGljIGNvbnN0
IGZtdGZsYWdzIGxlZnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfbGVmdCk7CiAgICBzdGF0
aWMgY29uc3QgZm10ZmxhZ3Mgb2N0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX29jdCk7CiAg
ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgcmlnaHQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nf
cmlnaHQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNjaWVudGlmaWMgPSBmbXRmbGFncyhf
X2lvc19mbGFnczo6X1Nfc2NpZW50aWZpYyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hv
d2Jhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd2Jhc2UpOwogICAgc3RhdGljIGNv
bnN0IGZtdGZsYWdzIHNob3dwb2ludCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9p
bnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb3MgPSBmbXRmbGFncyhfX2lvc19m
bGFnczo6X1Nfc2hvd3Bvcyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2tpcHdzID0gZm10
ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NraXB3cyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg
dW5pdGJ1ZiA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191bml0YnVmKTsKICAgIHN0YXRpYyBj
b25zdCBmbXRmbGFncyB1cHBlcmNhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdXBwZXJj
YXNlKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBhZGp1c3RmaWVsZCA9IGZtdGZsYWdzKF9f
aW9zX2ZsYWdzOjpfU19hZGp1c3RmaWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYmFz
ZWZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jhc2VmaWVsZCk7CiAgICBzdGF0aWMg
Y29uc3QgZm10ZmxhZ3MgZmxvYXRmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19mbG9h
dGZpZWxkKTsKCgogICAgdHlwZWRlZiBfSW9zX0lvc3RhdGUgaW9zdGF0ZTsKICAgIHN0YXRpYyBj
b25zdCBpb3N0YXRlIGJhZGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2JhZGJpdCk7CiAg
ICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBlb2ZiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19l
b2ZiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZmFpbGJpdCA9IGlvc3RhdGUoX19pb3Nf
ZmxhZ3M6Ol9TX2ZhaWxiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZ29vZGJpdCA9IGlv
c3RhdGUoMCk7CgoKICAgIHR5cGVkZWYgX0lvc19PcGVubW9kZSBvcGVubW9kZTsKICAgIHN0YXRp
YyBjb25zdCBvcGVubW9kZSBhcHAgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYXBwKTsKICAg
IHN0YXRpYyBjb25zdCBvcGVubW9kZSBhdGUgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYXRl
KTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBiaW5hcnkgPSBvcGVubW9kZShfX2lvc19mbGFn
czo6X1NfYmluKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBpbiA9IG9wZW5tb2RlKF9faW9z
X2ZsYWdzOjpfU19pbik7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgb3V0ID0gb3Blbm1vZGUo
X19pb3NfZmxhZ3M6Ol9TX291dCk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgdHJ1bmMgPSBv
cGVubW9kZShfX2lvc19mbGFnczo6X1NfdHJ1bmMpOwoKCiAgICB0eXBlZGVmIF9Jb3NfU2Vla2Rp
ciBzZWVrZGlyOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgYmVnID0gc2Vla2RpcigwKTsKICAg
IHN0YXRpYyBjb25zdCBzZWVrZGlyIGN1ciA9IHNlZWtkaXIoMSk7CiAgICBzdGF0aWMgY29uc3Qg
c2Vla2RpciBlbmQgPSBzZWVrZGlyKDIpOwojIDIyNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjIvYml0cy9pb3NfYmFzZS5oIiAzCiAgICBlbnVtIGV2ZW50CiAgICB7CiAgICAgIGVyYXNlX2V2
ZW50LAogICAgICBpbWJ1ZV9ldmVudCwKICAgICAgY29weWZtdF9ldmVudAogICAgfTsKCiAgICB0
eXBlZGVmIHZvaWQgKCpldmVudF9jYWxsYmFjaykgKGV2ZW50LCBpb3NfYmFzZSYsIGludCk7Cgog
ICAgdm9pZAogICAgcmVnaXN0ZXJfY2FsbGJhY2soZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9f
aW5kZXgpOwoKICBwcm90ZWN0ZWQ6CgogICAgc3RyZWFtc2l6ZSBfTV9wcmVjaXNpb247CiAgICBz
dHJlYW1zaXplIF9NX3dpZHRoOwogICAgZm10ZmxhZ3MgX01fZmxhZ3M7CiAgICBpb3N0YXRlIF9N
X2V4Y2VwdGlvbjsKICAgIGlvc3RhdGUgX01fc3RyZWFtYnVmX3N0YXRlOwoKCgogICAgc3RydWN0
IF9DYWxsYmFja19saXN0CiAgICB7CgogICAgICBfQ2FsbGJhY2tfbGlzdCogX01fbmV4dDsKICAg
ICAgaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9NX2ZuOwogICAgICBpbnQgX01faW5kZXg7CiAg
ICAgIF9BdG9taWNfd29yZCBfTV9yZWZjb3VudDsKCiAgICAgIF9DYWxsYmFja19saXN0KGlvc19i
YXNlOjpldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRleCwKICAgICAgICAgICAgICAgICAg
ICAgX0NhbGxiYWNrX2xpc3QqIF9fY2IpCiAgICAgIDogX01fbmV4dChfX2NiKSwgX01fZm4oX19m
biksIF9NX2luZGV4KF9faW5kZXgpLCBfTV9yZWZjb3VudCgwKSB7IH0KCiAgICAgIHZvaWQKICAg
ICAgX01fYWRkX3JlZmVyZW5jZSgpIHsgX19hdG9taWNfYWRkKCZfTV9yZWZjb3VudCwgMSk7IH0K
CgogICAgICBpbnQKICAgICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHsgcmV0dXJuIF9fZXhjaGFu
Z2VfYW5kX2FkZCgmX01fcmVmY291bnQsIC0xKTsgfQogICAgfTsKCiAgICAgX0NhbGxiYWNrX2xp
c3QqIF9NX2NhbGxiYWNrczsKCiAgICB2b2lkCiAgICBfTV9jYWxsX2NhbGxiYWNrcyhldmVudCBf
X2V2KSB0aHJvdygpOwoKICAgIHZvaWQKICAgIF9NX2Rpc3Bvc2VfY2FsbGJhY2tzKHZvaWQpOwoK
CiAgICBzdHJ1Y3QgX1dvcmRzCiAgICB7CiAgICAgIHZvaWQqIF9NX3B3b3JkOwogICAgICBsb25n
IF9NX2l3b3JkOwogICAgICBfV29yZHMoKSA6IF9NX3B3b3JkKDApLCBfTV9pd29yZCgwKSB7IH0K
ICAgIH07CgoKICAgIF9Xb3JkcyBfTV93b3JkX3plcm87CgoKICAgIHN0YXRpYyBjb25zdCBpbnQg
X1NfbG9jYWxfd29yZF9zaXplID0gODsKICAgIF9Xb3JkcyBfTV9sb2NhbF93b3JkW19TX2xvY2Fs
X3dvcmRfc2l6ZV07CgoKICAgIGludCBfTV93b3JkX3NpemU7CiAgICBfV29yZHMqIF9NX3dvcmQ7
CgogICAgX1dvcmRzJgogICAgX01fZ3Jvd193b3JkcyhpbnQgX19pbmRleCk7CgoKICAgIGxvY2Fs
ZSBfTV9pb3NfbG9jYWxlOwoKICAgIHZvaWQKICAgIF9NX2luaXQoKTsKCiAgcHVibGljOgoKCgoK
CiAgICBjbGFzcyBJbml0CiAgICB7CiAgICAgIGZyaWVuZCBjbGFzcyBpb3NfYmFzZTsKICAgIHB1
YmxpYzoKICAgICAgSW5pdCgpOwogICAgICB+SW5pdCgpOwoKICAgICAgc3RhdGljIHZvaWQKICAg
ICAgX1NfaW9zX2NyZWF0ZShib29sIF9fc3luYyk7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBf
U19pb3NfZGVzdHJveSgpOwoKICAgIHByaXZhdGU6CiAgICAgIHN0YXRpYyBpbnQgX1NfaW9zX2Jh
c2VfaW5pdDsKICAgICAgc3RhdGljIGJvb2wgX1Nfc3luY2VkX3dpdGhfc3RkaW87CiAgICB9OwoK
CiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gX01fZmxhZ3M7
IH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIGZsYWdzKGZtdGZsYWdzIF9fZm10ZmwpCiAgICB7
CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzID0gX19mbXRm
bDsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgc2V0
ZihmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdz
OwogICAgICBfTV9mbGFncyB8PSBfX2ZtdGZsOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9Cgog
ICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwsIGZtdGZsYWdzIF9f
bWFzaykKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxh
Z3MgJj0gfl9fbWFzazsKICAgICAgX01fZmxhZ3MgfD0gKF9fZm10ZmwgJiBfX21hc2spOwogICAg
ICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIHZvaWQKICAgIHVuc2V0ZihmbXRmbGFn
cyBfX21hc2spIHsgX01fZmxhZ3MgJj0gfl9fbWFzazsgfQoKICAgIGlubGluZSBzdHJlYW1zaXpl
CiAgICBwcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBfTV9wcmVjaXNpb247IH0KCiAgICBpbmxp
bmUgc3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKHN0cmVhbXNpemUgX19wcmVjKQogICAgewogICAg
ICBzdHJlYW1zaXplIF9fb2xkID0gX01fcHJlY2lzaW9uOwogICAgICBfTV9wcmVjaXNpb24gPSBf
X3ByZWM7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQog
ICAgd2lkdGgoKSBjb25zdCB7IHJldHVybiBfTV93aWR0aDsgfQoKICAgIGlubGluZSBzdHJlYW1z
aXplCiAgICB3aWR0aChzdHJlYW1zaXplIF9fd2lkZSkKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBf
X29sZCA9IF9NX3dpZHRoOwogICAgICBfTV93aWR0aCA9IF9fd2lkZTsKICAgICAgcmV0dXJuIF9f
b2xkOwogICAgfQoKICAgIHN0YXRpYyBib29sCiAgICBzeW5jX3dpdGhfc3RkaW8oYm9vbCBfX3N5
bmMgPSB0cnVlKTsKCgogICAgbG9jYWxlCiAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsK
CiAgICBpbmxpbmUgbG9jYWxlCiAgICBnZXRsb2MoKSBjb25zdCB7IHJldHVybiBfTV9pb3NfbG9j
YWxlOyB9CgoKICAgIHN0YXRpYyBpbnQKICAgIHhhbGxvYygpIHRocm93KCk7CgogICAgaW5saW5l
IGxvbmcmCiAgICBpd29yZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAo
X19peCA8IF9NX3dvcmRfc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgPyBfTV93b3JkW19f
aXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9pd29yZDsK
ICAgIH0KCiAgICBpbmxpbmUgdm9pZComCiAgICBwd29yZChpbnQgX19peCkKICAgIHsKICAgICAg
X1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRfc2l6ZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgPyBfTV93b3JkW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAgcmV0dXJu
IF9fd29yZC5fTV9wd29yZDsKICAgIH0KCgogICAgfmlvc19iYXNlKCk7CgogIHByb3RlY3RlZDoK
ICAgIGlvc19iYXNlKCk7CgoKCiAgcHJpdmF0ZToKICAgIGlvc19iYXNlKGNvbnN0IGlvc19iYXNl
Jik7CgogICAgaW9zX2Jhc2UmCiAgICBvcGVyYXRvcj0oY29uc3QgaW9zX2Jhc2UmKTsKCiAgfTsK
CgogIGlubGluZSBpb3NfYmFzZSYKICBib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAg
ICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAg
fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9ib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkKICB7
CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpOwogICAgcmV0dXJuIF9fYmFz
ZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQog
IHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1cm4gX19iYXNl
OwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkK
ICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1cm4gX19i
YXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3dwb2ludChpb3NfYmFzZSYgX19iYXNl
KQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9f
YmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3dwb2ludChpb3NfYmFzZSYgX19i
YXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CiAgICByZXR1
cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3dwb3MoaW9zX2Jhc2UmIF9f
YmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4g
X19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd3Bvcyhpb3NfYmFzZSYgX19i
YXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAgcmV0dXJu
IF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBza2lwd3MoaW9zX2Jhc2UmIF9fYmFz
ZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9za2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkK
ICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFz
ZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICB1cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkK
ICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm91cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFz
ZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOwogICAgcmV0dXJu
IF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICB1bml0YnVmKGlvc19iYXNlJiBfX2Jh
c2UpCiAgewogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAgICByZXR1cm4g
X19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vdW5pdGJ1Zihpb3NfYmFzZSYgX19i
YXNlKQogIHsKICAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAgICByZXR1
cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBpbnRlcm5hbChpb3NfYmFzZSYg
X19iYXNlKQogIHsKICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aW50ZXJuYWwsIGlvc19iYXNl
OjphZGp1c3RmaWVsZCk7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFz
ZSYKICBsZWZ0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6
OmxlZnQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAg
aW5saW5lIGlvc19iYXNlJgogIHJpZ2h0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNl
LnNldGYoaW9zX2Jhc2U6OnJpZ2h0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgcmV0dXJu
IF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgZGVjKGlvc19iYXNlJiBfX2Jhc2Up
CiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmRlYywgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7
CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIGhleChpb3NfYmFz
ZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpoZXgsIGlvc19iYXNlOjpi
YXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBv
Y3QoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6b2N0LCBp
b3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlv
c19iYXNlJgogIGZpeGVkKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9z
X2Jhc2U6OmZpeGVkLCBpb3NfYmFzZTo6ZmxvYXRmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwog
IH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNjaWVudGlmaWMoaW9zX2Jhc2UmIF9fYmFzZSkKICB7
CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2NpZW50aWZpYywgaW9zX2Jhc2U6OmZsb2F0Zmll
bGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgp9CiMgNTAgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4yL2lvcyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVm
IiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVmIiAzCgoKCgoK
CgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0No
YXJULCBfVHJhaXRzPiYgX2lvcywKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4sCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19z
dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCk7CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWYKICAg
IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190
eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw
ZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6
Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgY3R5cGU8Y2hhcl90eXBlPiBfX2N0
eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRz
X3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5
cGU6OnN0YXRlX3R5cGUgX19zdGF0ZV90eXBlOwoKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lv
czxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lzdHJl
YW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19vc3Ry
ZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgaXN0cmVhbWJ1
Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIG9z
dHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CgogICAgICBmcmllbmQg
c3RyZWFtc2l6ZQogICAgICBfX2NvcHlfc3RyZWFtYnVmczw+KGJhc2ljX2lvczxjaGFyX3R5cGUs
IHRyYWl0c190eXBlPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHJlYW1i
dWZfdHlwZSogX19zYmluLF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpOwoKICAgIHByb3RlY3Rl
ZDoKCgoKCgogICAgICBjaGFyX3R5cGUqIF9NX2J1ZjsKCgogICAgICBzaXplX3QgX01fYnVmX3Np
emU7CgoKICAgICAgc2l6ZV90IF9NX2J1Zl9zaXplX29wdDsKCgoKICAgICAgYm9vbCBfTV9idWZf
dW5pZmllZDsKCgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9pbl9iZWc7CiAgICAgIGNoYXJfdHlw
ZSogX01faW5fY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2VuZDsKICAgICAgY2hhcl90eXBl
KiBfTV9vdXRfYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9jdXI7CiAgICAgIGNoYXJfdHlw
ZSogX01fb3V0X2VuZDsKCgogICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX01fbW9kZTsKCgogICAg
ICBsb2NhbGUgX01fYnVmX2xvY2FsZTsKCgogICAgICBib29sIF9NX2J1Zl9sb2NhbGVfaW5pdDsK
CgoKCgoKICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBfU19wYmFja19zaXplID0gMTsKICAgICAg
Y2hhcl90eXBlIF9NX3BiYWNrW19TX3BiYWNrX3NpemVdOwogICAgICBjaGFyX3R5cGUqIF9NX3Bi
YWNrX2N1cl9zYXZlOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2VuZF9zYXZlOwogICAgICBi
b29sIF9NX3BiYWNrX2luaXQ7CgoKICAgICAgZnBvczxfX3N0YXRlX3R5cGU+IF9NX3BvczsKCgoK
CiAgICAgIHZvaWQKICAgICAgX01fcGJhY2tfY3JlYXRlKCkKICAgICAgewogICAgICAgIGlmICgh
X01fcGJhY2tfaW5pdCkKICAgICAgICAgIHsKICAgICAgICAgICAgc2l6ZV90IF9fZGlzdCA9IF9N
X2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gbWluKF9TX3Bi
YWNrX3NpemUsIF9fZGlzdCk7CiAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX3BiYWNr
LCBfTV9pbl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfTV9p
bl9jdXI7CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gX01faW5fZW5kOwogICAgICAg
ICAgICB0aGlzLT5zZXRnKF9NX3BiYWNrLCBfTV9wYmFjaywgX01fcGJhY2sgKyBfX2xlbik7CiAg
ICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSB0cnVlOwogICAgICAgICAgfQogICAgICB9CgoKCgog
ICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKQogICAgICB7CiAgICAgICAgaWYgKF9N
X3BiYWNrX2luaXQpCiAgICAgICAgICB7CgogICAgICAgICAgICBzaXplX3QgX19vZmZfY3VyID0g
X01faW5fY3VyIC0gX01fcGJhY2s7CgoKICAgICAgICAgICAgc2l6ZV90IF9fb2ZmX2VuZCA9IDA7
CiAgICAgICAgICAgIHNpemVfdCBfX3BiYWNrX2xlbiA9IF9NX2luX2VuZCAtIF9NX3BiYWNrOwog
ICAgICAgICAgICBzaXplX3QgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fYnVm
OwogICAgICAgICAgICBpZiAoX19wYmFja19sZW4gPiBfX3NhdmVfbGVuKQogICAgICAgICAgICAg
IF9fb2ZmX2VuZCA9IF9fcGJhY2tfbGVuIC0gX19zYXZlX2xlbjsKCiAgICAgICAgICAgIHRoaXMt
PnNldGcoX01fYnVmLCBfTV9wYmFja19jdXJfc2F2ZSArIF9fb2ZmX2N1ciwKICAgICAgICAgICAg
ICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSArIF9fb2ZmX2VuZCk7CiAgICAgICAgICAgIF9N
X3BiYWNrX2N1cl9zYXZlID0gX19udWxsOwogICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9
IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJhY2tfaW5pdCA9IGZhbHNlOwogICAgICAgICAgfQog
ICAgICB9CgoKCiAgICAgIHZvaWQKICAgICAgX01faW5fY3VyX21vdmUob2ZmX3R5cGUgX19uKQog
ICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9vdXRfY3VyOwogICAgICAgIF9NX2lu
X2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVzdG91dCAmJiBfTV9idWZfdW5pZmllZCkKICAg
ICAgICAgIF9NX291dF9jdXIgKz0gX19uOwogICAgICB9CiMgMjAyICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMi9zdHJlYW1idWYiIDMKICAgICAgdm9pZAogICAgICBfTV9vdXRfY3VyX21vdmUo
b2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX2luX2N1cjsK
CiAgICAgICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVzdGluICYmIF9NX2J1
Zl91bmlmaWVkKQogICAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAgICAgICBpZiAoX01fb3V0
X2N1ciA+IF9NX291dF9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX291dF9lbmQgPSBf
TV9vdXRfY3VyOwoKICAgICAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgICAgIF9NX2lu
X2VuZCArPSBfX247CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIG9mZl90eXBlCiAgICAg
IF9NX291dF9idWZfc2l6ZSgpCiAgICAgIHsKICAgICAgICBvZmZfdHlwZSBfX3JldCA9IDA7CiAg
ICAgICAgaWYgKF9NX291dF9jdXIpCiAgICAgICAgICB7CgogICAgICAgICAgICBpZiAoX01fb3V0
X2JlZyA9PSBfTV9idWYpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnICsgX01fYnVm
X3NpemUgLSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fcmV0
ID0gX01fb3V0X2VuZCAtIF9NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9f
cmV0OwogICAgICB9CgogIHB1YmxpYzoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfc3RyZWFt
YnVmKCkKICAgICAgewogICAgICAgIF9NX2J1Zl91bmlmaWVkID0gZmFsc2U7CiAgICAgICAgX01f
YnVmX3NpemUgPSAwOwogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDA7CiAgICAgICAgX01fbW9k
ZSA9IGlvc19iYXNlOjpvcGVubW9kZSgwKTsKICAgICAgICBfTV9idWZfbG9jYWxlX2luaXQgPSBm
YWxzZTsKICAgICAgfQoKCiAgICAgIGxvY2FsZQogICAgICBwdWJpbWJ1ZShjb25zdCBsb2NhbGUg
Jl9fbG9jKQogICAgICB7CiAgICAgICAgbG9jYWxlIF9fdG1wKHRoaXMtPmdldGxvYygpKTsKICAg
ICAgICB0aGlzLT5pbWJ1ZShfX2xvYyk7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9Cgog
ICAgICBsb2NhbGUKICAgICAgZ2V0bG9jKCkgY29uc3QKICAgICAgewogICAgICAgIGlmIChfTV9i
dWZfbG9jYWxlX2luaXQpCiAgICAgICAgICByZXR1cm4gX01fYnVmX2xvY2FsZTsKICAgICAgICBl
bHNlCiAgICAgICAgICByZXR1cm4gbG9jYWxlKCk7CiAgICAgIH0KCgogICAgICBfX3N0cmVhbWJ1
Zl90eXBlKgogICAgICBwdWJzZXRidWYoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQog
ICAgICB7IHJldHVybiB0aGlzLT5zZXRidWYoX19zLCBfX24pOyB9CgogICAgICBwb3NfdHlwZQog
ICAgICBwdWJzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwK
ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6Omlu
IHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla29mZihfX29mZiwgX193
YXksIF9fbW9kZSk7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtwb3MocG9zX3R5cGUg
X19zcCwKICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jh
c2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla3BvcyhfX3Nw
LCBfX21vZGUpOyB9CgogICAgICBpbnQKICAgICAgcHVic3luYygpIHsgcmV0dXJuIHRoaXMtPnN5
bmMoKTsgfQoKCgogICAgICBzdHJlYW1zaXplCiAgICAgIGluX2F2YWlsKCkKICAgICAgewogICAg
ICAgIHN0cmVhbXNpemUgX19yZXQ7CiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIg
PCBfTV9pbl9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChfTV9wYmFja19pbml0KQog
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNpemVfdCBfX3NhdmVfbGVuID0gX01fcGJh
Y2tfZW5kX3NhdmUgLSBfTV9wYmFja19jdXJfc2F2ZTsKICAgICAgICAgICAgICAgIHNpemVfdCBf
X3BiYWNrX2xlbiA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOwogICAgICAgICAgICAgICAgX19yZXQg
PSBfX3NhdmVfbGVuIC0gX19wYmFja19sZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigpOwog
ICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0gdGhpcy0+c2hvd21hbnlj
KCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICBpbnRfdHlwZQogICAgICBz
bmV4dGMoKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m
KCk7CiAgICAgICAgcmV0dXJuICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUodGhpcy0+c2J1bXBj
KCksIF9fZW9mKQogICAgICAgICAgICAgICAgPyBfX2VvZiA6IHRoaXMtPnNnZXRjKCkpOwogICAg
ICB9CgogICAgICBpbnRfdHlwZQogICAgICBzYnVtcGMoKTsKCiAgICAgIGludF90eXBlCiAgICAg
IHNnZXRjKCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9p
bl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgX19yZXQgPSB0cmFpdHNf
dHlwZTo6dG9faW50X3R5cGUoKih0aGlzLT5ncHRyKCkpKTsKICAgICAgICBlbHNlCiAgICAgICAg
ICBfX3JldCA9IHRoaXMtPnVuZGVyZmxvdygpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAg
fQoKICAgICAgc3RyZWFtc2l6ZQogICAgICBzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6
ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzZ2V0bihfX3MsIF9fbik7IH0KCgogICAgICBp
bnRfdHlwZQogICAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYyk7CgogICAgICBpbnRfdHlwZQog
ICAgICBzdW5nZXRjKCk7CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1dGMoY2hhcl90eXBlIF9f
Yyk7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBz
dHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNwdXRuKF9fcywgX19uKTsgfQoK
ICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfc3RyZWFtYnVmKCkKICAgICAgOiBfTV9idWYoX19u
dWxsKSwgX01fYnVmX3NpemUoMCksIF9NX2J1Zl9zaXplX29wdCg4MTkyKSwKICAgICAgX01fYnVm
X3VuaWZpZWQoZmFsc2UpLCBfTV9pbl9iZWcoMCksIF9NX2luX2N1cigwKSwgX01faW5fZW5kKDAp
LAogICAgICBfTV9vdXRfYmVnKDApLCBfTV9vdXRfY3VyKDApLCBfTV9vdXRfZW5kKDApLAogICAg
ICBfTV9tb2RlKGlvc19iYXNlOjpvcGVubW9kZSgwKSksIF9NX2J1Zl9sb2NhbGUobG9jYWxlKCkp
LAogICAgICBfTV9idWZfbG9jYWxlX2luaXQoZmFsc2UpLCBfTV9wYmFja19jdXJfc2F2ZSgwKSwg
X01fcGJhY2tfZW5kX3NhdmUoMCksCiAgICAgIF9NX3BiYWNrX2luaXQoZmFsc2UpCiAgICAgIHsg
fQoKCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZWJhY2soKSBjb25zdCB7IHJldHVybiBfTV9pbl9i
ZWc7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9NX2lu
X2N1cjsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBlZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9N
X2luX2VuZDsgfQoKICAgICAgdm9pZAogICAgICBnYnVtcChpbnQgX19uKSB7IF9NX2luX2N1ciAr
PSBfX247IH0KCiAgICAgIHZvaWQKICAgICAgc2V0ZyhjaGFyX3R5cGUqIF9fZ2JlZywgY2hhcl90
eXBlKiBfX2duZXh0LCBjaGFyX3R5cGUqIF9fZ2VuZCkKICAgICAgewogICAgICAgIF9NX2luX2Jl
ZyA9IF9fZ2JlZzsKICAgICAgICBfTV9pbl9jdXIgPSBfX2duZXh0OwogICAgICAgIF9NX2luX2Vu
ZCA9IF9fZ2VuZDsKICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6OmluKSAmJiBfX2di
ZWcgJiYgX19nbmV4dCAmJiBfX2dlbmQpCiAgICAgICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlv
c19iYXNlOjppbjsKICAgICAgfQoKCiAgICAgIGNoYXJfdHlwZSoKICAgICAgcGJhc2UoKSBjb25z
dCB7IHJldHVybiBfTV9vdXRfYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIHBwdHIoKSBj
b25zdCB7IHJldHVybiBfTV9vdXRfY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVwcHRy
KCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2VuZDsgfQoKICAgICAgdm9pZAogICAgICBwYnVtcChp
bnQgX19uKSB7IF9NX291dF9jdXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAgICAgIHNldHAoY2hh
cl90eXBlKiBfX3BiZWcsIGNoYXJfdHlwZSogX19wZW5kKQogICAgICB7CiAgICAgICAgX01fb3V0
X2JlZyA9IF9NX291dF9jdXIgPSBfX3BiZWc7CiAgICAgICAgX01fb3V0X2VuZCA9IF9fcGVuZDsK
ICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkgJiYgX19wYmVnICYmIF9fcGVu
ZCkKICAgICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6Om91dDsKICAgICAgfQoK
CgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAg
ICAgewogICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IHRydWU7CiAgICAgICAgaWYgKF9NX2J1
Zl9sb2NhbGUgIT0gX19sb2MpCiAgICAgICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7CiAgICAg
IH0KCgogICAgICB2aXJ0dWFsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsX1RyYWl0cz4qCiAg
ICAgIHNldGJ1ZihjaGFyX3R5cGUqLCBzdHJlYW1zaXplKQogICAgICB7IHJldHVybiB0aGlzOyB9
CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlvc19iYXNl
OjpzZWVrZGlyLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjpp
biB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7
IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSwKICAgICAg
ICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0
KQogICAgICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFs
IGludAogICAgICBzeW5jKCkgeyByZXR1cm4gMDsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6
ZQogICAgICBzaG93bWFueWMoKSB7IHJldHVybiAwOyB9CgogICAgICB2aXJ0dWFsIHN0cmVhbXNp
emUKICAgICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2
aXJ0dWFsIGludF90eXBlCiAgICAgIHVuZGVyZmxvdygpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190
eXBlOjplb2YoKTsgfQoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1ZmxvdygpCiAgICAg
IHsKICAgICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBi
b29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSh0aGlzLT51bmRlcmZsb3co
KSwgX19yZXQpOwogICAgICAgIGJvb2wgX190ZXN0cGVuZGluZyA9IF9NX2luX2N1ciAmJiBfTV9p
bl9jdXIgPCBfTV9pbl9lbmQ7CiAgICAgICAgaWYgKCFfX3Rlc3Rlb2YgJiYgX190ZXN0cGVuZGlu
ZykKICAgICAgICAgIHsKICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5
cGUoKl9NX2luX2N1cik7CiAgICAgICAgICAgICsrX01faW5fY3VyOwogICAgICAgICAgICBpZiAo
X01fYnVmX3VuaWZpZWQgJiYgX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpCiAgICAgICAgICAgICAg
KytfTV9vdXRfY3VyOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoK
CiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlID0gdHJhaXRz
X3R5cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCgogICAg
ICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBz
dHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIG92ZXJmbG93KGlu
dF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6
ZW9mKCk7IH0KIyA0ODUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMwog
ICAgcHJpdmF0ZToKICAgICAgYmFzaWNfc3RyZWFtYnVmKGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUm
KSB7IH07CgogICAgICBfX3N0cmVhbWJ1Zl90eXBlJgogICAgICBvcGVyYXRvcj0oY29uc3QgX19z
dHJlYW1idWZfdHlwZSYpIHsgcmV0dXJuICp0aGlzOyB9OwoKICAgIH07Cn0KCgoKCgojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RyZWFtYnVmLnRjYyIgMSAzCiMgMzkgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RyZWFtYnVmLnRjYyIgMwoKbmFtZXNwYWNl
IHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
Y29uc3Qgc2l6ZV90CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGJh
Y2tfc2l6ZTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAg
ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzYnVtcGMoKQogICAgewog
ICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBf
TV9pbl9lbmQpCiAgICAgICAgewogICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICoodGhpcy0+Z3B0
cigpKTsKICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKDEpOwogICAgICAgICAgX19yZXQgPSB0cmFp
dHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBf
X3JldCA9IHRoaXMtPnVmbG93KCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYykKICAgIHsKICAg
ICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGJvb2wgX190ZXN0cG9zID0gX01faW5fY3VyICYmIF9N
X2luX2JlZyA8IF9NX2luX2N1cjsKICAgICAgYm9vbCBfX3Rlc3RuZSA9IF9NX2luX2N1ciAmJiAh
dHJhaXRzX3R5cGU6OmVxKF9fYywgdGhpcy0+Z3B0cigpWy0xXSk7CiAgICAgIGlmICghX190ZXN0
cG9zIHx8IF9fdGVzdG5lKQogICAgICAgIF9fcmV0ID0gcGJhY2tmYWlsKHRyYWl0c190eXBlOjp0
b19pbnRfdHlwZShfX2MpKTsKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9NX2luX2N1
cl9tb3ZlKC0xKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCp0
aGlzLT5ncHRyKCkpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHN1bmdldGMoKQogICAgewogICAgICBpbnRfdHlwZSBf
X3JldDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXIpCiAgICAg
ICAgewogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEpOwogICAgICAgICAgX19yZXQgPSB0cmFp
dHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7CiAgICAgICAgfQogICAgICBlbHNlCiAg
ICAgICAgX19yZXQgPSB0aGlzLT5wYmFja2ZhaWwoKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAg
fQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3B1dGMoY2hhcl90eXBlIF9f
YykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9vdXRfYnVmX3NpemUo
KSkKICAgICAgICB7CiAgICAgICAgICAqX01fb3V0X2N1ciA9IF9fYzsKICAgICAgICAgIF9NX291
dF9jdXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBl
KF9fYyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT5vdmVyZmxv
dyh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7CiAgICAgIHJldHVybiBfX3JldDsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3Ry
ZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNnZXRu
KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBf
X3JldCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBz
aXplX3QgX19idWZfbGVuID0gX01faW5fZW5kIC0gX01faW5fY3VyOwogICAgICAgICAgaWYgKF9f
YnVmX2xlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19yZW1haW5p
bmcgPSBfX24gLSBfX3JldDsKICAgICAgICAgICAgICBzaXplX3QgX19sZW4gPSBtaW4oX19idWZf
bGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBf
TV9pbl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAg
ICAgICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAgX01faW5fY3VyX21vdmUoX19sZW4pOwog
ICAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9fcmV0IDwgX19uKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+dWZsb3coKTsKICAgICAgICAgICAgICBp
ZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkpCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9f
cysrLCB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAgICAgICAgICAgICAr
K19fcmV0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAg
ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAg
eHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAg
c3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7
CiAgICAgICAgICBvZmZfdHlwZSBfX2J1Zl9sZW4gPSBfTV9vdXRfYnVmX3NpemUoKTsKICAgICAg
ICAgIGlmIChfX2J1Zl9sZW4gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgb2ZmX3R5
cGUgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX2xl
biA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlw
ZTo6Y29weShfTV9vdXRfY3VyLCBfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX3JldCArPSBf
X2xlbjsKICAgICAgICAgICAgICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAgX01fb3V0X2N1
cl9tb3ZlKF9fbGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93
KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX19zKSk7CiAgICAgICAgICAgICAgaWYgKCF0cmFp
dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAgICAgICAgICArK19f
czsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3Ry
ZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4m
IF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+KiBfX3Nib3V0KQogIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRz
OjppbnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOwogICAgICBz
dHJlYW1zaXplIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsKICAgICAgc3RyZWFtc2l6
ZSBfX3h0cmN0OwogICAgICBib29sIF9fdGVzdHB1dCA9IF9fc2JvdXQtPl9NX21vZGUgJiBpb3Nf
YmFzZTo6b3V0OwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICB3aGlsZSAoX190ZXN0cHV0
ICYmIF9fYnVmc2l6ZSAhPSAtMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9feHRyY3Qg
PSBfX3Nib3V0LT5zcHV0bihfX3NiaW4tPmdwdHIoKSwgX19idWZzaXplKTsKICAgICAgICAgICAg
ICBfX3JldCArPSBfX3h0cmN0OwogICAgICAgICAgICAgIF9fc2Jpbi0+X01faW5fY3VyX21vdmUo
X194dHJjdCk7CiAgICAgICAgICAgICAgaWYgKF9feHRyY3QgPT0gX19idWZzaXplKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19z
YmluLT5zZ2V0YygpLCBfVHJhaXRzOjplb2YoKSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgewogICAgICAgICAgX19pb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAg
ICAgaWYgKChfX2lvcy5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgIT0gMCkKICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1idWY8Y2hhcj47CiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8Y2hh
cj4mLCBiYXNpY19zdHJlYW1idWY8Y2hhcj4qLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNf
c3RyZWFtYnVmPGNoYXI+Kik7CgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1i
dWY8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlf
c3RyZWFtYnVmcyhiYXNpY19pb3M8d2NoYXJfdD4mLCBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4q
LAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+Kik7Cn0KIyA0
OTkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMiAzCiMgNTEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9iYXNpY19pb3MuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4yL2JpdHMvYmFzaWNfaW9zLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdHJlYW1idWZfaXRlcmF0b3IuaCIgMSAzCiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgiIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxpbnB1dF9pdGVyYXRvcl90YWcs
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUsCiAgICAgICAgICAgICAgICAgICAg
ICBfQ2hhclQqLCBfQ2hhclQmPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5
cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgICBw
cml2YXRlOgoKCgoKCgoKICAgICAgbXV0YWJsZSBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsKICAg
ICAgaW50X3R5cGUgX01fYzsKCiAgICBwdWJsaWM6CiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3Io
KSB0aHJvdygpCiAgICAgIDogX01fc2J1ZigwKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsg
fQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihpc3RyZWFtX3R5cGUmIF9fcykgdGhyb3coKQog
ICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9
CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93KCkK
ICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigpKSB7IH0KCgogICAg
ICBjaGFyX3R5cGUKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgeyByZXR1cm4gdHJhaXRz
X3R5cGU6OnRvX2NoYXJfdHlwZShfTV9nZXQoKSk7IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0
b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgY29uc3QgaW50X3R5cGUgX19l
b2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgaWYgKF9NX3NidWYgJiYgdHJhaXRzX3R5
cGU6OmVxX2ludF90eXBlKF9NX3NidWYtPnNidW1wYygpLCBfX2VvZikpCiAgICAgICAgICBfTV9z
YnVmID0gMDsKICAgICAgICBlbHNlCiAgICAgICAgICBfTV9jID0gX19lb2Y7CiAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgICB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICAgIG9wZXJh
dG9yKysoaW50KQogICAgICB7CiAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNf
dHlwZTo6ZW9mKCk7CiAgICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvciBfX29sZCA9ICp0aGlzOwog
ICAgICAgIGlmIChfTV9zYnVmCiAgICAgICAgICAgICYmIHRyYWl0c190eXBlOjplcV9pbnRfdHlw
ZSgoX19vbGQuX01fYyA9IF9NX3NidWYtPnNidW1wYygpKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZW9mKSkKICAgICAgICAgIF9NX3NidWYgPSAwOwogICAgICAg
IGVsc2UKICAgICAgICAgIF9NX2MgPSBfX2VvZjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAg
IH0KCgoKCiAgICAgIGJvb2wKICAgICAgZXF1YWwoY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvciYg
X19iKSBjb25zdAogICAgICB7CiAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNf
dHlwZTo6ZW9mKCk7CiAgICAgICAgYm9vbCBfX3RoaXNlb2YgPSB0cmFpdHNfdHlwZTo6ZXFfaW50
X3R5cGUoX01fZ2V0KCksIF9fZW9mKTsKICAgICAgICBib29sIF9fYmVvZiA9IHRyYWl0c190eXBl
OjplcV9pbnRfdHlwZShfX2IuX01fZ2V0KCksIF9fZW9mKTsKICAgICAgICByZXR1cm4gKF9fdGhp
c2VvZiAmJiBfX2Jlb2YgfHwgKCFfX3RoaXNlb2YgJiYgIV9fYmVvZikpOwogICAgICB9CgoKICAg
IHByaXZhdGU6CiAgICAgIGludF90eXBlCiAgICAgIF9NX2dldCgpIGNvbnN0CiAgICAgIHsKICAg
ICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBp
bnRfdHlwZSBfX3JldCA9IF9fZW9mOwogICAgICAgIGlmIChfTV9zYnVmKQogICAgICAgICAgewog
ICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9jLCBfX2VvZikpCiAg
ICAgICAgICAgICAgX19yZXQgPSBfTV9jOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
aWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSgoX19yZXQgPSBfTV9zYnVmLT5zZ2V0YygpKSwg
X19lb2YpKQogICAgICAgICAgICAgICAgX01fc2J1ZiA9IDA7CiAgICAgICAgICB9CiAgICAgICAg
cmV0dXJuIF9fcmV0OwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBp
c3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYSwKICAgICAgICAgICAgICAg
Y29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2IpCiAgICB7IHJl
dHVybiBfX2EuZXF1YWwoX19iKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBpc3RyZWFt
YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYSwKICAgICAgICAgICAgICAgY29uc3Qg
aXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2IpCiAgICB7IHJldHVybiAh
X19hLmVxdWFsKF9fYik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0
b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAg
IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBf
VHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgc3RyZWFtYnVm
X3R5cGUqIF9NX3NidWY7CiAgICAgIGJvb2wgX01fZmFpbGVkOwoKICAgIHB1YmxpYzoKICAgICAg
aW5saW5lCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MpIHRocm93
ICgpCiAgICAgIDogX01fc2J1ZihfX3MucmRidWYoKSksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9
CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93ICgp
CiAgICAgIDogX01fc2J1ZihfX3MpLCBfTV9mYWlsZWQoIV9NX3NidWYpIHsgfQoKICAgICAgb3N0
cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpOwoKICAgICAgb3N0
cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKyhp
bnQpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRl
cmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9
CgogICAgICBib29sCiAgICAgIGZhaWxlZCgpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4g
X01fZmFpbGVkOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBpbmxpbmUgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+
JgogICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcj0oX0No
YXJUIF9fYykKICAgIHsKICAgICAgaWYgKCFfTV9mYWlsZWQgJiYKICAgICAgICAgIF9UcmFpdHM6
OmVxX2ludF90eXBlKF9NX3NidWYtPnNwdXRjKF9fYyksIF9UcmFpdHM6OmVvZigpKSkKICAgICAg
ICBfTV9mYWlsZWQgPSB0cnVlOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cn0KIyA0MSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MuaCIgMiAzCiMgMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDEgMwojIDQ0ICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwoKCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3djdHlwZSIgMSAzCiMgNDggIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4yL2N3Y3R5cGUiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAx
IDMKIyAzNSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzYgIi91
c3IvaW5jbHVkZS93Y3R5cGUuaCIgMiAzCiMgNjEgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHdjdHlwZV90OwojIDc5ICIvdXNyL2luY2x1ZGUvd2N0
eXBlLmgiIDMKZW51bQp7CiAgX19JU3d1cHBlciA9IDAsCiAgX19JU3dsb3dlciA9IDEsCiAgX19J
U3dhbHBoYSA9IDIsCiAgX19JU3dkaWdpdCA9IDMsCiAgX19JU3d4ZGlnaXQgPSA0LAogIF9fSVN3
c3BhY2UgPSA1LAogIF9fSVN3cHJpbnQgPSA2LAogIF9fSVN3Z3JhcGggPSA3LAogIF9fSVN3Ymxh
bmsgPSA4LAogIF9fSVN3Y250cmwgPSA5LAogIF9fSVN3cHVuY3QgPSAxMCwKICBfX0lTd2FsbnVt
ID0gMTEsCgogIF9JU3d1cHBlciA9ICgoX19JU3d1cHBlcikgPCA4ID8gKGludCkgKCgxVUwgPDwg
KF9fSVN3dXBwZXIpKSA8PCAyNCkgOiAoKF9fSVN3dXBwZXIpIDwgMTYgPyAoaW50KSAoKDFVTCA8
PCAoX19JU3d1cHBlcikpIDw8IDgpIDogKChfX0lTd3VwcGVyKSA8IDI0ID8gKGludCkgKCgxVUwg
PDwgKF9fSVN3dXBwZXIpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPj4g
MjQpKSkpLAogIF9JU3dsb3dlciA9ICgoX19JU3dsb3dlcikgPCA4ID8gKGludCkgKCgxVUwgPDwg
KF9fSVN3bG93ZXIpKSA8PCAyNCkgOiAoKF9fSVN3bG93ZXIpIDwgMTYgPyAoaW50KSAoKDFVTCA8
PCAoX19JU3dsb3dlcikpIDw8IDgpIDogKChfX0lTd2xvd2VyKSA8IDI0ID8gKGludCkgKCgxVUwg
PDwgKF9fSVN3bG93ZXIpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPj4g
MjQpKSkpLAogIF9JU3dhbHBoYSA9ICgoX19JU3dhbHBoYSkgPCA4ID8gKGludCkgKCgxVUwgPDwg
KF9fSVN3YWxwaGEpKSA8PCAyNCkgOiAoKF9fSVN3YWxwaGEpIDwgMTYgPyAoaW50KSAoKDFVTCA8
PCAoX19JU3dhbHBoYSkpIDw8IDgpIDogKChfX0lTd2FscGhhKSA8IDI0ID8gKGludCkgKCgxVUwg
PDwgKF9fSVN3YWxwaGEpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPj4g
MjQpKSkpLAogIF9JU3dkaWdpdCA9ICgoX19JU3dkaWdpdCkgPCA4ID8gKGludCkgKCgxVUwgPDwg
KF9fSVN3ZGlnaXQpKSA8PCAyNCkgOiAoKF9fSVN3ZGlnaXQpIDwgMTYgPyAoaW50KSAoKDFVTCA8
PCAoX19JU3dkaWdpdCkpIDw8IDgpIDogKChfX0lTd2RpZ2l0KSA8IDI0ID8gKGludCkgKCgxVUwg
PDwgKF9fSVN3ZGlnaXQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPj4g
MjQpKSkpLAogIF9JU3d4ZGlnaXQgPSAoKF9fSVN3eGRpZ2l0KSA8IDggPyAoaW50KSAoKDFVTCA8
PCAoX19JU3d4ZGlnaXQpKSA8PCAyNCkgOiAoKF9fSVN3eGRpZ2l0KSA8IDE2ID8gKGludCkgKCgx
VUwgPDwgKF9fSVN3eGRpZ2l0KSkgPDwgOCkgOiAoKF9fSVN3eGRpZ2l0KSA8IDI0ID8gKGludCkg
KCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3d4ZGln
aXQpKSA+PiAyNCkpKSksCiAgX0lTd3NwYWNlID0gKChfX0lTd3NwYWNlKSA8IDggPyAoaW50KSAo
KDFVTCA8PCAoX19JU3dzcGFjZSkpIDw8IDI0KSA6ICgoX19JU3dzcGFjZSkgPCAxNiA/IChpbnQp
ICgoMVVMIDw8IChfX0lTd3NwYWNlKSkgPDwgOCkgOiAoKF9fSVN3c3BhY2UpIDwgMjQgPyAoaW50
KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3c3Bh
Y2UpKSA+PiAyNCkpKSksCiAgX0lTd3ByaW50ID0gKChfX0lTd3ByaW50KSA8IDggPyAoaW50KSAo
KDFVTCA8PCAoX19JU3dwcmludCkpIDw8IDI0KSA6ICgoX19JU3dwcmludCkgPCAxNiA/IChpbnQp
ICgoMVVMIDw8IChfX0lTd3ByaW50KSkgPDwgOCkgOiAoKF9fSVN3cHJpbnQpIDwgMjQgPyAoaW50
KSAoKDFVTCA8PCAoX19JU3dwcmludCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3cHJp
bnQpKSA+PiAyNCkpKSksCiAgX0lTd2dyYXBoID0gKChfX0lTd2dyYXBoKSA8IDggPyAoaW50KSAo
KDFVTCA8PCAoX19JU3dncmFwaCkpIDw8IDI0KSA6ICgoX19JU3dncmFwaCkgPCAxNiA/IChpbnQp
ICgoMVVMIDw8IChfX0lTd2dyYXBoKSkgPDwgOCkgOiAoKF9fSVN3Z3JhcGgpIDwgMjQgPyAoaW50
KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3Z3Jh
cGgpKSA+PiAyNCkpKSksCiAgX0lTd2JsYW5rID0gKChfX0lTd2JsYW5rKSA8IDggPyAoaW50KSAo
KDFVTCA8PCAoX19JU3dibGFuaykpIDw8IDI0KSA6ICgoX19JU3dibGFuaykgPCAxNiA/IChpbnQp
ICgoMVVMIDw8IChfX0lTd2JsYW5rKSkgPDwgOCkgOiAoKF9fSVN3YmxhbmspIDwgMjQgPyAoaW50
KSAoKDFVTCA8PCAoX19JU3dibGFuaykpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3Ymxh
bmspKSA+PiAyNCkpKSksCiAgX0lTd2NudHJsID0gKChfX0lTd2NudHJsKSA8IDggPyAoaW50KSAo
KDFVTCA8PCAoX19JU3djbnRybCkpIDw8IDI0KSA6ICgoX19JU3djbnRybCkgPCAxNiA/IChpbnQp
ICgoMVVMIDw8IChfX0lTd2NudHJsKSkgPDwgOCkgOiAoKF9fSVN3Y250cmwpIDwgMjQgPyAoaW50
KSAoKDFVTCA8PCAoX19JU3djbnRybCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3Y250
cmwpKSA+PiAyNCkpKSksCiAgX0lTd3B1bmN0ID0gKChfX0lTd3B1bmN0KSA8IDggPyAoaW50KSAo
KDFVTCA8PCAoX19JU3dwdW5jdCkpIDw8IDI0KSA6ICgoX19JU3dwdW5jdCkgPCAxNiA/IChpbnQp
ICgoMVVMIDw8IChfX0lTd3B1bmN0KSkgPDwgOCkgOiAoKF9fSVN3cHVuY3QpIDwgMjQgPyAoaW50
KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3cHVu
Y3QpKSA+PiAyNCkpKSksCiAgX0lTd2FsbnVtID0gKChfX0lTd2FsbnVtKSA8IDggPyAoaW50KSAo
KDFVTCA8PCAoX19JU3dhbG51bSkpIDw8IDI0KSA6ICgoX19JU3dhbG51bSkgPCAxNiA/IChpbnQp
ICgoMVVMIDw8IChfX0lTd2FsbnVtKSkgPDwgOCkgOiAoKF9fSVN3YWxudW0pIDwgMjQgPyAoaW50
KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3YWxu
dW0pKSA+PiAyNCkpKSkKfTsKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgpleHRlcm4gaW50IGlzd2Fs
bnVtICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBpc3dhbHBoYSAod2lu
dF90IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXN3Y250cmwgKHdpbnRfdCBfX3djKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3dkaWdpdCAod2ludF90IF9fd2MpIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IGlzd2dyYXBoICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IGlzd2xvd2VyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc3dwcmlu
dCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dwdW5jdCAod2ludF90
IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dzcGFjZSAod2ludF90IF9fd2MpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3d1cHBlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGludCBpc3d4ZGlnaXQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gaW50IGlzd2JsYW5rICh3aW50X3QgX193YykgdGhyb3cgKCk7CiMgMTc4ICIvdXNyL2luY2x1
ZGUvd2N0eXBlLmgiIDMKZXh0ZXJuIHdjdHlwZV90IHdjdHlwZSAoX19jb25zdCBjaGFyICpfX3By
b3BlcnR5KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3djdHlwZSAod2ludF90IF9fd2MsIHdj
dHlwZV90IF9fZGVzYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gdW5zaWduZWQgaW50ICpfX2N0eXBl
MzJfYjsKIyAyNDkgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp0eXBlZGVmIF9fY29uc3QgX19p
bnQzMl90ICp3Y3RyYW5zX3Q7CgoKZXh0ZXJuIHdpbnRfdCB0b3dsb3dlciAod2ludF90IF9fd2Mp
IHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgdG93dXBwZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBjb25zdCB3aW50X3QgKl9fY3R5cGUzMl90b2xvd2VyOwpleHRlcm4gY29u
c3Qgd2ludF90ICpfX2N0eXBlMzJfdG91cHBlcjsKIyAyNzUgIi91c3IvaW5jbHVkZS93Y3R5cGUu
aCIgMwp9CiMgMjg4ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKZXh0ZXJuICJDIiB7CgoKCmV4
dGVybiB3Y3RyYW5zX3Qgd2N0cmFucyAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5KSB0aHJvdyAo
KTsKCgpleHRlcm4gd2ludF90IHRvd2N0cmFucyAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rl
c2MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBfX2lzd2FsbnVtX2wgKHdpbnRfdCBfX3dj
LCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IF9faXN3YWxw
aGFfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgX19pc3djbnRybF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgX19pc3dkaWdpdF9sICh3aW50X3QgX193YywgX19sb2NhbGVf
dCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19pc3dncmFwaF9sICh3aW50X3Qg
X193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3
bG93ZXJfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgX19pc3dwcmludF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3cHVuY3RfbCAod2ludF90IF9fd2MsIF9fbG9j
YWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3NwYWNlX2wgKHdp
bnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
X19pc3d1cHBlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IF9faXN3eGRpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9f
bG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dibGFua19sICh3aW50X3QgX193
YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y3R5cGVfdCBfX3dj
dHlwZV9sIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAg
ICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19pc3djdHlwZV9sICh3aW50X3QgX193Yywgd2N0
eXBlX3QgX19kZXNjLCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCgoKCgoK
ZXh0ZXJuIHdpbnRfdCBfX3Rvd2xvd2VyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9j
YWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IF9fdG93dXBwZXJfbCAod2ludF90IF9fd2Ms
IF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gd2N0cmFuc190IF9fd2N0
cmFuc19sIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAg
ICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBfX3Rvd2N0cmFuc19sICh3aW50X3QgX193Yywg
d2N0cmFuc190IF9fZGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90
IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKfQojIDUzICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
Mi9jd2N0eXBlIiAyIDMKIyA3NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3djdHlwZSIg
MwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OndpbnRfdDsKCiAgdXNpbmcgOjp3Y3R5cGVfdDsK
ICB1c2luZyA6OndjdHJhbnNfdDsKCiAgdXNpbmcgOjppc3dhbG51bTsKICB1c2luZyA6Omlzd2Fs
cGhhOwogIHVzaW5nIDo6aXN3Ymxhbms7CiAgdXNpbmcgOjppc3djbnRybDsKICB1c2luZyA6Omlz
d2RpZ2l0OwogIHVzaW5nIDo6aXN3Z3JhcGg7CiAgdXNpbmcgOjppc3dsb3dlcjsKICB1c2luZyA6
Omlzd3ByaW50OwogIHVzaW5nIDo6aXN3cHJpbnQ7CiAgdXNpbmcgOjppc3dwdW5jdDsKICB1c2lu
ZyA6Omlzd3NwYWNlOwogIHVzaW5nIDo6aXN3dXBwZXI7CiAgdXNpbmcgOjppc3d4ZGlnaXQ7CiAg
dXNpbmcgOjppc3djdHlwZTsKICB1c2luZyA6OnRvd2xvd2VyOwogIHVzaW5nIDo6dG93dXBwZXI7
CiAgdXNpbmcgOjp0b3djdHJhbnM7CiAgdXNpbmcgOjp3Y3RyYW5zOwogIHVzaW5nIDo6d2N0eXBl
Owp9CiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5o
IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pb3MiIDEgMwojIDQ4ICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgpuYW1lc3Bh
Y2Ugc3RkCnsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgc3RydWN0IF9fcGFkOwoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y
L2k2ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVfYmFzZS5oIiAxIDMKIyA1MCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9iYXNlLmgiIDMK
ICBzdHJ1Y3QgY3R5cGVfYmFzZQogIHsKCiAgICB0eXBlZGVmIGNvbnN0IGludCogX190b190eXBl
OwoKCgogICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtYXNrOwogICAgc3RhdGljIGNvbnN0IG1h
c2sgdXBwZXIgPSBfSVN1cHBlcjsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGxvd2VyID0gX0lTbG93
ZXI7CiAgICBzdGF0aWMgY29uc3QgbWFzayBhbHBoYSA9IF9JU2FscGhhOwogICAgc3RhdGljIGNv
bnN0IG1hc2sgZGlnaXQgPSBfSVNkaWdpdDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHhkaWdpdCA9
IF9JU3hkaWdpdDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHNwYWNlID0gX0lTc3BhY2U7CiAgICBz
dGF0aWMgY29uc3QgbWFzayBwcmludCA9IF9JU3ByaW50OwogICAgc3RhdGljIGNvbnN0IG1hc2sg
Z3JhcGggPSBfSVNncmFwaDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGNudHJsID0gX0lTY250cmw7
CiAgICBzdGF0aWMgY29uc3QgbWFzayBwdW5jdCA9IF9JU3B1bmN0OwogICAgc3RhdGljIGNvbnN0
IG1hc2sgYWxudW0gPSBfSVNhbG51bTsKICB9OwojIDY0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBjbGFzcyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNl
dCwgcHVibGljIGN0eXBlX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0No
YXJUIGNoYXJfdHlwZTsKCiAgICAgIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlwZSBf
X2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbSwgX19jKTsgfQoKICAgICAg
Y29uc3QgY2hhcl90eXBlKgogICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNo
YXJfdHlwZSAqX19oaSwgbWFzayAqX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X2lzKF9fbG8sIF9faGksIF9fdmVjKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBz
Y2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSog
X19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9fbG8sIF9f
aGkpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBj
b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hh
cl90eXBlCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fdG91cHBlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHRv
dXBwZXIoY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlw
ZQogICAgICB0b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX3RvbG93ZXIoX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b2xvd2Vy
KGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb190b2xvd2VyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAg
ICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9f
Yyk7IH0KCiAgICAgIGNvbnN0IGNoYXIqCiAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNv
bnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fd2lkZW4oX19sbywgX19oaSwgX190byk7IH0KCiAgICAgIGNoYXIKICAgICAgbmFycm93
KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX25hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAg
ICBuYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAg
ICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciAqX190bykgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fbmFycm93KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3RvKTsgfQoKICAgIHBy
b3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jdHlwZV9hYnN0cmFjdF9iYXNlKHNpemVf
dCBfX3JlZnMgPSAwKTogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVhbAog
ICAgICB+X19jdHlwZV9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIGJvb2wKICAg
ICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNv
bnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgbWFzayogX192ZWMpIGNvbnN0ID0gMDsK
CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19t
LCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBl
KiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAg
ZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNo
YXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmly
dHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBj
b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl
CiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNo
YXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAg
ZG9fd2lkZW4oY2hhcikgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAg
ICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLAogICAgICAgICAg
ICAgICBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyCiAg
ICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0ID0gMDsKCiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBl
KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICAgY2hhciBfX2Rm
YXVsdCwgY2hhciogX19kZXN0KSBjb25zdCA9IDA7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNl
PF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOwoKICAgICAgc3RhdGlj
IGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19yZWZz
ID0gMCkgOiBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPihfX3JlZnMpIHsgfQoKICAgcHJv
dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29s
CiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNv
bnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBj
b25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlw
ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29u
c3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBl
KiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUgX19jKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNo
YXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9f
bG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlw
ZQogICAgICBkb193aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNo
YXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJy
b3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBj
aGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rl
c3QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxl
OjppZCBjdHlwZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGN0eXBlPGNo
YXI+IDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxjaGFyPgogICAgewogICAgcHVibGlj
OgoKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBf
X2NfbG9jYWxlIF9NX2NfbG9jYWxlX2N0eXBlOwogICAgICBib29sIF9NX2RlbDsKICAgICAgX190
b190eXBlIF9NX3RvdXBwZXI7CiAgICAgIF9fdG9fdHlwZSBfTV90b2xvd2VyOwogICAgICBjb25z
dCBtYXNrKiBfTV90YWJsZTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk
OwogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHRhYmxlX3NpemUgPSAxICsgc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oLTEpOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoY29uc3QgbWFz
ayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwgc2l6ZV90IF9fcmVmcyA9IDApOwoK
ICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IG1hc2sq
IF9fdGFibGUgPSAwLCBib29sIF9fZGVsID0gZmFsc2UsCiAgICAgICAgICAgIHNpemVfdCBfX3Jl
ZnMgPSAwKTsKCiAgICAgIGlubGluZSBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9fYykg
Y29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgaXMoY29uc3QgY2hhciogX19s
bywgY29uc3QgY2hhciogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgaW5saW5lIGNv
bnN0IGNoYXIqCiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0
IGNoYXIqIF9faGkpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5f
bm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsK
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIGNvbnN0IG1hc2sqCiAgICAgIHRhYmxlKCkgY29uc3QgdGhy
b3coKQogICAgICB7IHJldHVybiBfTV90YWJsZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IG1hc2sq
CiAgICAgIGNsYXNzaWNfdGFibGUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICB+Y3R5
cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBl
IF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMo
Y29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVj
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lz
KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3Qo
bWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRv
X3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
KgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hp
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90
eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xv
d2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBj
aGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIK
ICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSog
X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVs
dCwgY2hhciogX19kZXN0KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0
eXBlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9jYWxlJiBfX2xv
Yyk7CgoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY3R5cGU8d2NoYXJfdD4gOiBwdWJsaWMgX19j
dHlwZV9hYnN0cmFjdF9iYXNlPHdjaGFyX3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl
ZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHdjdHlwZV90IF9fd21hc2tfdHlw
ZTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7Cgog
ICAgcHVibGljOgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAog
ICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlw
ZShfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoK
ICAgICAgX193bWFza190eXBlCiAgICAgIF9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFzayBf
X20pIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwg
Ym9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xv
LCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFy
X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJf
dHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNo
YXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywg
Y29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAg
ICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAg
ICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUq
IF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJf
dHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlw
ZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBl
KiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25z
dDsKCiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjdHlwZTx3Y2hhcl90PiYKICAgIHVz
ZV9mYWNldDxjdHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKCgojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVfaW5s
aW5lLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4
LWdudS9iaXRzL2N0eXBlX2lubGluZS5oIiAzCiAgYm9vbAogIGN0eXBlPGNoYXI+OjoKICBpcyht
YXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0CiAgeyByZXR1cm4gX01fdGFibGVbc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oX19jKV0gJiBfX207IH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFy
Pjo6CiAgaXMoY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCwgbWFzayogX192
ZWMpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQogICAgICAqX192ZWMrKyA9
IF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdysrKV07CiAgICByZXR1
cm4gX19oaWdoOwogIH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9pcyht
YXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7
CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gKICAgICAgICAgICAmJiAhKF9NX3RhYmxlW3N0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdyldICYgX19tKSkKICAgICAgKytfX2xvdzsKICAg
IHJldHVybiBfX2xvdzsKICB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5f
bm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25z
dAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaAogICAgICAgICAgICYmIChfTV90YWJsZVtz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXSAmIF9fbSkgIT0gMCkKICAgICAgKytf
X2xvdzsKICAgIHJldHVybiBfX2xvdzsKICB9CiMgNDAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5cGU8X0NoYXJUPgogICAgewog
ICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICBleHBsaWNp
dAogICAgICBjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCk7
CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZV9ieW5hbWUoKSB7IH07
CiAgICB9OwoKCiAgdGVtcGxhdGU8PgogICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5h
bWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsKCiAgdGVtcGxhdGU8PgogICAgY3R5cGVfYnlu
YW1lPHdjaGFyX3Q+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsKCgoj
IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvY29kZWN2dC5oIiAxIDMKIyA0NSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9jb2RlY3Z0LmgiIDMKCgogIGNsYXNzIGNv
ZGVjdnRfYmFzZQogIHsKICBwdWJsaWM6CiAgICBlbnVtIHJlc3VsdAogICAgewogICAgICBvaywK
ICAgICAgcGFydGlhbCwKICAgICAgZXJyb3IsCiAgICAgIG5vY29udgogICAgfTsKICB9OwoKCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFt
ZSBfU3RhdGVUPgogICAgY2xhc3MgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UKICAgIDogcHVibGlj
IGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBjb2RlY3Z0X2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAg
ICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9J
bnRlcm5UIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwog
ICAgICB0eXBlZGVmIF9TdGF0ZVQgc3RhdGVfdHlwZTsKCgogICAgICByZXN1bHQKICAgICAgb3V0
KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAg
ICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zy
b21fbmV4dCwKICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19l
bmQsCiAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgewogICAg
ICAgIHJldHVybiB0aGlzLT5kb19vdXQoX19zdGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zy
b21fbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3Rv
X25leHQpOwogICAgICB9CgogICAgICByZXN1bHQKICAgICAgdW5zaGlmdChzdGF0ZV90eXBlJiBf
X3N0YXRlLCBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAg
ICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5kb191bnNoaWZ0KF9fc3RhdGUsIF9fdG8sX190b19lbmQsX190b19uZXh0KTsgfQoKICAgICAg
cmVzdWx0CiAgICAgIGluKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBf
X2Zyb20sCiAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRl
cm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJu
X3R5cGUqIF9fdG9fZW5kLAogICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QK
ICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5kb19pbihfX3N0YXRlLCBfX2Zyb20sIF9fZnJv
bV9lbmQsIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RvLCBfX3Rv
X2VuZCwgX190b19uZXh0KTsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGVuY29kaW5nKCkgY29u
c3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5kb19lbmNvZGluZygpOyB9CgogICAgICBi
b29sCiAgICAgIGFsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX2Fsd2F5c19ub2NvbnYoKTsgfQoKICAgICAgaW50CiAgICAgIGxlbmd0aChjb25zdCBz
dGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAg
ICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX2xlbmd0aChfX3N0YXRlLCBfX2Zyb20sIF9fZW5kLCBfX21heCk7IH0K
CiAgICAgIGludAogICAgICBtYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVy
biB0aGlzLT5kb19tYXhfbGVuZ3RoKCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGV4cGxpY2l0
CiAgICAgIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2Fs
ZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfl9fY29kZWN2dF9hYnN0
cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVf
dHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNv
bnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9u
ZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2Vu
ZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAg
ICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4
dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwg
ZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0
CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zy
b20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRl
cm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50
ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkg
Y29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0
aHJvdygpID0gMDsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkg
Y29uc3QgdGhyb3coKSA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29u
c3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAg
ICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QgPSAwOwoKICAg
ICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkgPSAwOwog
ICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQs
IHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0CiAgICA6IHB1YmxpYyBfX2NvZGVj
dnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+CiAgICB7CiAgICBw
dWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAg
dHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRl
cm5fdHlwZTsKICAgICAgdHlwZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7CgoKICAgICAgc3RhdGlj
IGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3Jl
ZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULF9FeHRlcm5U
LF9TdGF0ZVQ+IChfX3JlZnMpIHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg
ICB+Y29kZWN2dCgpIHsgfQoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRl
X3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBj
b25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21f
bmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19l
bmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2
aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVy
bl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0
ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAg
ZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAg
ICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBl
KiYgX19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlw
ZSogX190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAg
ICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsK
CiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29u
c3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBl
KiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRv
X21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgbG9jYWxl
OjppZCBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD46OmlkOwoKCiAgdGVtcGxh
dGU8PgogICAgY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+CiAgICA6IHB1Ymxp
YyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+CiAgICB7CiAg
ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYg
Y2hhciBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCgog
ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQo
c2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+
Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUm
IF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBp
bnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwK
ICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAg
ICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFs
IHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBl
KiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5
cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4o
c3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAg
ICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19m
cm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190
b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZp
cnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAg
IHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0
ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Vu
ZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9s
ZW5ndGgoKSBjb25zdCB0aHJvdygpOwogIH07CgoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY29k
ZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJz
dHJhY3RfYmFzZTx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CiAgICB7CiAgICBwdWJsaWM6Cgog
ICAgICB0eXBlZGVmIHdjaGFyX3QgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgY2hhciBleHRl
cm5fdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCgogICAgICBzdGF0
aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9f
cmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgp
OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUs
IGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlw
ZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAg
ICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAg
ICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAog
ICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAgICAgICAgICAgICAgZXh0
ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgICAgICBl
eHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAg
ICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLAogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5
cGUqIF9fZnJvbSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsCiAgICAgICAgICAgICBj
b25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgaW50ZXJuX3R5cGUq
IF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGludGVybl90eXBlKiYg
X190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwKICAgICAgaW50IGRvX2VuY29kaW5nKCkg
Y29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgYm9vbCBkb19hbHdheXNfbm9jb252
KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgaW50IGRvX2xlbmd0aChjb25z
dCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAg
ICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICAgIH07
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBl
bmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWUgOiBwdWJsaWMgY29kZWN2dDxf
SW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxp
Y2l0CiAgICAgIGNvZGVjdnRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkK
ICAgICAgOiBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4oX19yZWZzKSB7IH0K
ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dF9ieW5hbWUoKSB7IH0K
ICAgIH07CgoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgt
Z251L2JpdHMvY29kZWN2dF9zcGVjaWFsaXphdGlvbnMuaCIgMSAzCiMgNDYgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY29kZWN2dF9zcGVjaWFsaXph
dGlvbnMuaCIgMwogIGNsYXNzIF9fZW5jX3RyYWl0cwogIHsKICBwdWJsaWM6CgoKCiAgICB0eXBl
ZGVmIGljb252X3QgX19kZXNjX3R5cGU7CgogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0
IGludCBfU19tYXhfc2l6ZSA9IDMyOwoKICAgIGNoYXIgX01faW50X2VuY1tfU19tYXhfc2l6ZV07
CgogICAgY2hhciBfTV9leHRfZW5jW19TX21heF9zaXplXTsKCgogICAgX19kZXNjX3R5cGUgX01f
aW5fZGVzYzsKCiAgICBfX2Rlc2NfdHlwZSBfTV9vdXRfZGVzYzsKCgogICAgaW50IF9NX2V4dF9i
b207CgoKICAgIGludCBfTV9pbnRfYm9tOwoKICBwdWJsaWM6CiAgICBleHBsaWNpdCBfX2VuY190
cmFpdHMoKQogICAgOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVzYygwKSwgX01fZXh0X2JvbSgw
KSwgX01faW50X2JvbSgwKQogICAgewogICAgICBtZW1zZXQoX01faW50X2VuYywgMCwgX1NfbWF4
X3NpemUpOwogICAgICBtZW1zZXQoX01fZXh0X2VuYywgMCwgX1NfbWF4X3NpemUpOwogICAgfQoK
ICAgIGV4cGxpY2l0IF9fZW5jX3RyYWl0cyhjb25zdCBjaGFyKiBfX2ludCwgY29uc3QgY2hhciog
X19leHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9faWJvbSA9IDAsIGludCBfX2Vi
b20gPSAwKQogICAgOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVzYygwKSwgX01fZXh0X2JvbSgw
KSwgX01faW50X2JvbSgwKQogICAgewogICAgICBzdHJuY3B5KF9NX2ludF9lbmMsIF9faW50LCBf
U19tYXhfc2l6ZSk7CiAgICAgIHN0cm5jcHkoX01fZXh0X2VuYywgX19leHQsIF9TX21heF9zaXpl
KTsKICAgIH0KCgoKCgoKICAgIF9fZW5jX3RyYWl0cyhjb25zdCBfX2VuY190cmFpdHMmIF9fb2Jq
KTogX01faW5fZGVzYygwKSwgX01fb3V0X2Rlc2MoMCkKICAgIHsKICAgICAgc3RybmNweShfTV9p
bnRfZW5jLCBfX29iai5fTV9pbnRfZW5jLCBfU19tYXhfc2l6ZSk7CiAgICAgIHN0cm5jcHkoX01f
ZXh0X2VuYywgX19vYmouX01fZXh0X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBfTV9leHRfYm9t
ID0gX19vYmouX01fZXh0X2JvbTsKICAgICAgX01faW50X2JvbSA9IF9fb2JqLl9NX2ludF9ib207
CiAgICB9CgoKICAgIF9fZW5jX3RyYWl0cyYKICAgIG9wZXJhdG9yPShjb25zdCBfX2VuY190cmFp
dHMmIF9fb2JqKQogICAgewogICAgICBzdHJuY3B5KF9NX2ludF9lbmMsIF9fb2JqLl9NX2ludF9l
bmMsIF9TX21heF9zaXplKTsKICAgICAgc3RybmNweShfTV9leHRfZW5jLCBfX29iai5fTV9leHRf
ZW5jLCBfU19tYXhfc2l6ZSk7CiAgICAgIF9NX2luX2Rlc2MgPSAwOwogICAgICBfTV9vdXRfZGVz
YyA9IDA7CiAgICAgIF9NX2V4dF9ib20gPSBfX29iai5fTV9leHRfYm9tOwogICAgICBfTV9pbnRf
Ym9tID0gX19vYmouX01faW50X2JvbTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIH5f
X2VuY190cmFpdHMoKQogICAgewogICAgICBfX2Rlc2NfdHlwZSBfX2VyciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8aWNvbnZfdD4oLTEpOwogICAgICBpZiAoX01faW5fZGVzYyAmJiBfTV9pbl9kZXNjICE9
IF9fZXJyKQogICAgICAgIGljb252X2Nsb3NlKF9NX2luX2Rlc2MpOwogICAgICBpZiAoX01fb3V0
X2Rlc2MgJiYgX01fb3V0X2Rlc2MgIT0gX19lcnIpCiAgICAgICAgaWNvbnZfY2xvc2UoX01fb3V0
X2Rlc2MpOwogICAgfQoKICAgIHZvaWQKICAgIF9NX2luaXQoKQogICAgewogICAgICBjb25zdCBf
X2Rlc2NfdHlwZSBfX2VyciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aWNvbnZfdD4oLTEpOwogICAgICBp
ZiAoIV9NX2luX2Rlc2MpCiAgICAgICAgewogICAgICAgICAgX01faW5fZGVzYyA9IGljb252X29w
ZW4oX01faW50X2VuYywgX01fZXh0X2VuYyk7CiAgICAgICAgICBpZiAoX01faW5fZGVzYyA9PSBf
X2VycikKICAgICAgICAgICAgX190aHJvd19ydW50aW1lX2Vycm9yKCJjcmVhdGluZyBpY29udiBp
bnB1dCBkZXNjcmlwdG9yIGZhaWxlZC4iKTsKICAgICAgICB9CiAgICAgIGlmICghX01fb3V0X2Rl
c2MpCiAgICAgICAgewogICAgICAgICAgX01fb3V0X2Rlc2MgPSBpY29udl9vcGVuKF9NX2V4dF9l
bmMsIF9NX2ludF9lbmMpOwogICAgICAgICAgaWYgKF9NX291dF9kZXNjID09IF9fZXJyKQogICAg
ICAgICAgICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoImNyZWF0aW5nIGljb252IG91dHB1dCBkZXNj
cmlwdG9yIGZhaWxlZC4iKTsKICAgICAgICB9CiAgICB9CgogICAgYm9vbAogICAgX01fZ29vZCgp
CiAgICB7CiAgICAgIGNvbnN0IF9fZGVzY190eXBlIF9fZXJyID0gcmVpbnRlcnByZXRfY2FzdDxp
Y29udl90PigtMSk7CiAgICAgIGJvb2wgX190ZXN0ID0gX01faW5fZGVzYyAmJiBfTV9pbl9kZXNj
ICE9IF9fZXJyOwogICAgICBfX3Rlc3QgJj0gX01fb3V0X2Rlc2MgJiYgX01fb3V0X2Rlc2MgIT0g
X19lcnI7CiAgICAgIHJldHVybiBfX3Rlc3Q7CiAgICB9CgogICAgY29uc3QgX19kZXNjX3R5cGUq
CiAgICBfTV9nZXRfaW5fZGVzY3JpcHRvcigpCiAgICB7IHJldHVybiAmX01faW5fZGVzYzsgfQoK
ICAgIGNvbnN0IF9fZGVzY190eXBlKgogICAgX01fZ2V0X291dF9kZXNjcmlwdG9yKCkKICAgIHsg
cmV0dXJuICZfTV9vdXRfZGVzYzsgfQoKICAgIGludAogICAgX01fZ2V0X2V4dGVybmFsX2JvbSgp
CiAgICB7IHJldHVybiBfTV9leHRfYm9tOyB9CgogICAgaW50CiAgICBfTV9nZXRfaW50ZXJuYWxf
Ym9tKCkKICAgIHsgcmV0dXJuIF9NX2ludF9ib207IH0KCiAgICBjb25zdCBjaGFyKgogICAgX01f
Z2V0X2ludGVybmFsX2VuYygpCiAgICB7IHJldHVybiBfTV9pbnRfZW5jOyB9CgogICAgY29uc3Qg
Y2hhcioKICAgIF9NX2dldF9leHRlcm5hbF9lbmMoKQogICAgeyByZXR1cm4gX01fZXh0X2VuYzsg
fQogIH07CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJu
VD4KICAgIGNsYXNzIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+CiAg
ICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCwgX0V4dGVyblQsIF9f
ZW5jX3RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNl
OjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAg
ICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9fZW5jX3RyYWl0
cyBzdGF0ZV90eXBlOwogICAgICB0eXBlZGVmIF9fZW5jX3RyYWl0czo6X19kZXNjX3R5cGUgX19k
ZXNjX3R5cGU7CiAgICAgIHR5cGVkZWYgX19lbmNfdHJhaXRzIF9fZW5jX3R5cGU7CgoKICAgICAg
c3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVf
dCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGludGVybl90eXBl
LCBleHRlcm5fdHlwZSwgc3RhdGVfdHlwZT4oX19yZWZzKQogICAgICB7IH0KCiAgICAgIGV4cGxp
Y2l0CiAgICAgIGNvZGVjdnQoX19lbmNfdHlwZSogX19lbmMsIHNpemVfdCBfX3JlZnMgPSAwKQog
ICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGludGVybl90eXBlLCBleHRlcm5fdHlwZSwg
c3RhdGVfdHlwZT4oX19yZWZzKQogICAgICB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1
YWwKICAgICAgfmNvZGVjdnQoKSB7IH0KCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291
dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAg
ICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYg
X19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUq
IF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRl
LCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19l
bmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0
CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zy
b20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRl
cm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50
ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93
KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRo
cm93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlw
ZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRl
cm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAog
ICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGxvY2FsZTo6aWQKICAgIGNv
ZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjppZDsKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UPgogICAgaW5saW5lIHNpemVfdAogICAgX19pY29udl9hZGFwdG9yKHNp
emVfdCgqX19mdW5jKShpY29udl90LCBfVCwgc2l6ZV90KiwgY2hhcioqLCBzaXplX3QqKSwKICAg
ICAgICAgICAgICAgICAgICBpY29udl90IF9fY2QsIGNoYXIqKiBfX2luYnVmLCBzaXplX3QqIF9f
aW5ieXRlcywKICAgICAgICAgICAgICAgICAgICBjaGFyKiogX19vdXRidWYsIHNpemVfdCogX19v
dXRieXRlcykKICAgIHsgcmV0dXJuIF9fZnVuYyhfX2NkLCAoX1QpX19pbmJ1ZiwgX19pbmJ5dGVz
LCBfX291dGJ1ZiwgX19vdXRieXRlcyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQs
IHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNvZGVjdnQ8
X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX291dChzdGF0ZV90eXBl
JiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgIGNvbnN0IGlu
dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAog
ICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAg
ICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICB7CiAgICAgIHJlc3VsdCBf
X3JldCA9IGVycm9yOwogICAgICBpZiAoX19zdGF0ZS5fTV9nb29kKCkpCiAgICAgICAgewogICAg
ICAgICAgdHlwZWRlZiBzdGF0ZV90eXBlOjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAg
ICAgIGNvbnN0IF9fZGVzY190eXBlKiBfX2Rlc2MgPSBfX3N0YXRlLl9NX2dldF9vdXRfZGVzY3Jp
cHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9mKGludGVy
bl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX2ZieXRlcyA9IF9fZm11bHRpcGxlICogKF9fZnJv
bV9lbmQgLSBfX2Zyb20pOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdG11bHRpcGxlID0gc2l6
ZW9mKGV4dGVybl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX3RieXRlcyA9IF9fdG11bHRpcGxl
ICogKF9fdG9fZW5kIC0gX190byk7CgoKCiAgICAgICAgICBjaGFyKiBfX2N0byA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KF9fdG8pOwogICAgICAgICAgY2hhciogX19jZnJvbTsKICAgICAgICAg
IHNpemVfdCBfX2NvbnY7CgoKCgoKCiAgICAgICAgICBpbnQgX19pbnRfYm9tID0gX19zdGF0ZS5f
TV9nZXRfaW50ZXJuYWxfYm9tKCk7CiAgICAgICAgICBpZiAoX19pbnRfYm9tKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSA9IF9fZnJvbV9lbmQgLSBfX2Zyb207CiAg
ICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fY2ZpeGVkID0gc3RhdGljX2Nhc3Q8aW50ZXJuX3R5
cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihpbnRlcm5fdHlwZSkgKiAoX19zaXplICsgMSkp
KTsKICAgICAgICAgICAgICBfX2NmaXhlZFswXSA9IHN0YXRpY19jYXN0PGludGVybl90eXBlPihf
X2ludF9ib20pOwogICAgICAgICAgICAgIGNoYXJfdHJhaXRzPGludGVybl90eXBlPjo6Y29weShf
X2NmaXhlZCArIDEsIF9fZnJvbSwgX19zaXplKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9IF9f
aWNvbnZfYWRhcHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmX19mYnl0ZXMsICZfX2N0bywgJl9fdGJ5dGVzKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW50
ZXJuX3R5cGUqIF9fY2ZpeGVkID0gY29uc3RfY2FzdDxpbnRlcm5fdHlwZSo+KF9fZnJvbSk7CiAg
ICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsK
ICAgICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZf
X2Nmcm9tLCAmX19mYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZfX2N0bywgJl9fdGJ5dGVzKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX2NvbnYg
IT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAg
ICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAg
ICAgICAgICAgICAgX19yZXQgPSBvazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fZmJ5dGVzIDwgX19mbXVsdGlwbGUgKiAoX19m
cm9tX2VuZCAtIF9fZnJvbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9f
ZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20p
OwogICAgICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGV4dGVybl90
eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgICAgICBfX3JldCA9IHBhcnRpYWw7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19yZXQgPSBlcnJv
cjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0
X2Jhc2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0
cz46OgogICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190
bywKICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9f
dG9fbmV4dCkgY29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gZXJyb3I7CiAgICAgIGlm
IChfX3N0YXRlLl9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5
cGU6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUq
IF9fZGVzYyA9IF9fc3RhdGUuX01fZ2V0X2luX2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0
IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSk7CiAgICAgICAgICBzaXpl
X3QgX190bGVuID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoKICAgICAgICAg
IGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAgICAgICAgICBz
aXplX3QgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCpfX2Rlc2MsIF9fbnVsbCwgX19u
dWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19jdG8sICZf
X3RsZW4pOwoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUq
PihfX2N0byk7CiAgICAgICAgICAgICAgaWYgKF9fdGxlbiA9PSBfX3RtdWx0aXBsZSAqIChfX3Rv
X2VuZCAtIF9fdG8pKQogICAgICAgICAgICAgICAgX19yZXQgPSBub2NvbnY7CiAgICAgICAgICAg
ICAgZWxzZSBpZiAoX190bGVuID09IDApCiAgICAgICAgICAgICAgICBfX3JldCA9IG9rOwogICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fcmV0ID0gcGFydGlhbDsKICAgICAgICAg
ICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3JldCA9IGVycm9yOwogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg
dHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAogICAgY29kZWN2dDxf
SW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9faW4oc3RhdGVfdHlwZSYg
X19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgIGNvbnN0IGV4dGVy
bl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAg
ICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAg
IGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgewogICAgICByZXN1bHQgX19yZXQg
PSBlcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAgIHsKICAgICAgICAg
IHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAgICAgICBj
b25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfaW5fZGVzY3JpcHRvcigp
OwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9mKGV4dGVybl90eXBl
KTsKICAgICAgICAgIHNpemVfdCBfX2ZsZW4gPSBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0g
X19mcm9tKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihpbnRl
cm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlwbGUgKiAoX190b19l
bmQgLSBfX3RvKTsKCgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oX190byk7CiAgICAgICAgICBjaGFyKiBfX2Nmcm9tOwogICAgICAgICAgc2l6ZV90IF9f
Y29udjsKCgoKCgoKICAgICAgICAgIGludCBfX2V4dF9ib20gPSBfX3N0YXRlLl9NX2dldF9leHRl
cm5hbF9ib20oKTsKICAgICAgICAgIGlmIChfX2V4dF9ib20pCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBzaXplX3QgX19zaXplID0gX19mcm9tX2VuZCAtIF9fZnJvbTsKICAgICAgICAgICAg
ICBleHRlcm5fdHlwZSogX19jZml4ZWQgPSBzdGF0aWNfY2FzdDxleHRlcm5fdHlwZSo+KF9fYnVp
bHRpbl9hbGxvY2Eoc2l6ZW9mKGV4dGVybl90eXBlKSAqIChfX3NpemUgKyAxKSkpOwogICAgICAg
ICAgICAgIF9fY2ZpeGVkWzBdID0gc3RhdGljX2Nhc3Q8ZXh0ZXJuX3R5cGU+KF9fZXh0X2JvbSk7
CiAgICAgICAgICAgICAgY2hhcl90cmFpdHM8ZXh0ZXJuX3R5cGU+Ojpjb3B5KF9fY2ZpeGVkICsg
MSwgX19mcm9tLCBfX3NpemUpOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9j
YXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFw
dG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJl9fZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQogICAg
ICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fY2Zp
eGVkID0gY29uc3RfY2FzdDxleHRlcm5fdHlwZSo+KF9fZnJvbSk7CiAgICAgICAgICAgICAgX19j
ZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAgICAgICBf
X2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19mbGVuLCAmX19jdG8sICZfX3RsZW4p
OwogICAgICAgICAgICB9CgoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90KC0xKSkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgX19yZXQg
PSBvazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgaWYgKF9fZmxlbiA8IHN0YXRpY19jYXN0PHNpemVfdD4oX19mcm9tX2VuZCAtIF9fZnJv
bSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAg
ICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGludGVybl90eXBlKj4oX19jdG8pOwog
ICAgICAgICAgICAgICAgICBfX3JldCA9IHBhcnRpYWw7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19yZXQgPSBlcnJvcjsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVy
blQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhy
b3coKQogICAgewogICAgICBpbnQgX19yZXQgPSAwOwogICAgICBpZiAoc2l6ZW9mKF9FeHRlcm5U
KSA8PSBzaXplb2YoX0ludGVyblQpKQogICAgICAgIF9fcmV0ID0gc2l6ZW9mKF9JbnRlcm5UKS9z
aXplb2YoX0V4dGVyblQpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGJvb2wKICAgIGNvZGVjdnQ8
X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2Fsd2F5c19ub2NvbnYo
KSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiBmYWxzZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVy
blQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90
eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICBjb25zdCBleHRl
cm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKICAgIHsgcmV0dXJuIG1pbihfX21h
eCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihfX2VuZCAtIF9fZnJvbSkpOyB9CgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAgICBjb2RlY3Z0
PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19tYXhfbGVuZ3RoKCkg
Y29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gMTsgfQojIDMzNCAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvYml0cy9jb2RlY3Z0LmgiIDIgMwojIDQyNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKCgogIGNsYXNzIF9fbnVtX2Jhc2UKICB7
CiAgcHJvdGVjdGVkOgoKCiAgICBzdGF0aWMgY29uc3QgY2hhciBfU19hdG9tc1tdOwoKICAgIGVu
dW0KICAgIHsKICAgICAgX01femVybywKICAgICAgX01fZSA9IF9NX3plcm8gKyAxMCwKICAgICAg
X01fRSA9IF9NX3plcm8gKyAxMSwKICAgICAgX01fc2l6ZSA9IDIxICsgMQogICAgfTsKCgoKICAg
IHN0YXRpYyBib29sCiAgICBfU19mb3JtYXRfZmxvYXQoY29uc3QgaW9zX2Jhc2UmIF9faW8sIGNo
YXIqIF9fZnB0ciwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9f
cHJlYyk7CgoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19mb3JtYXRfaW50KGNvbnN0IGlvc19iYXNl
JiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2QsIGNoYXIgX19tb2RsKTsKICB9OwoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVuY3QgOiBwdWJsaWMgbG9j
YWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90
eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAg
ICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgcHJpdmF0ZToKICAgICAgY2hhcl90eXBlIF9N
X2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwogICAgICBj
b25zdCBjaGFyKiBfTV9ncm91cGluZzsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV90cnVlbmFt
ZTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV9mYWxzZW5hbWU7CgogICAgcHVibGljOgogICAg
ICBleHBsaWNpdAogICAgICBudW1wdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZh
Y2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0KCk7IH0KCiAgICAgIGV4
cGxpY2l0CiAgICAgIG51bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0g
MCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0
KF9fY2xvYyk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBkZWNpbWFsX3BvaW50KCkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGVjaW1hbF9wb2ludCgpOyB9CgogICAgICBjaGFyX3R5
cGUKICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Ro
b3VzYW5kc19zZXAoKTsgfQoKICAgICAgc3RyaW5nCiAgICAgIGdyb3VwaW5nKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fZ3JvdXBpbmcoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAg
ICAgdHJ1ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190cnVlbmFtZSgpOyB9
CgogICAgICBzdHJpbmdfdHlwZQogICAgICBmYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb19mYWxzZW5hbWUoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAog
ICAgICB+bnVtcHVuY3QoKTsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2lt
YWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAg
ICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAg
eyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAg
ZG9fZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoKICAgICAg
dmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb190cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9NX3RydWVuYW1lOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2Zh
bHNlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2ZhbHNlbmFtZTsgfQoKCiAgICAgIHZv
aWQKICAgICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9TX2Nf
bG9jYWxlKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6
aWQgbnVtcHVuY3Q8X0NoYXJUPjo6aWQ7CgogIHRlbXBsYXRlPD4KICAgIG51bXB1bmN0PGNoYXI+
Ojp+bnVtcHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8Y2hhcj46
Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCiAgdGVtcGxhdGU8
PgogICAgbnVtcHVuY3Q8d2NoYXJfdD46On5udW1wdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2
b2lkCiAgICBudW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9j
YWxlIF9fY2xvYyk7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBudW1w
dW5jdF9ieW5hbWUgOiBwdWJsaWMgbnVtcHVuY3Q8X0NoYXJUPgogICAgewoKICAgICAgX19jX2xv
Y2FsZSBfTV9jX2xvY2FsZV9udW1wdW5jdDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0No
YXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdf
dHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBf
X3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQog
ICAgICB7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0LCBf
X3MpOwogICAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX01fY19sb2NhbGVfbnVtcHVuY3Qp
OwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1wdW5jdF9i
eW5hbWUoKQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3Qp
OyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+
CiAgICBjbGFzcyBudW1fZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBfX251bV9i
YXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg
ICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBp
ZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9j
YWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5
cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5
cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf
X2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
dik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlw
ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dl
dChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBf
X3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5
cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCB1bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dl
dChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAg
ICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192
KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgdW5zaWduZWQgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUK
ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv
LAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Yp
OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCBkb3VibGUmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9f
ZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVy
X3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAg
ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZCom
IF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lv
LCBfX2VyciwgX192KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbCB+bnVtX2dldCgp
IHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX2V4dHJhY3RfZmxvYXQoaXRlcl90eXBlLCBp
dGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAogICAgICAgICAgICAgICAg
ICAgICAgIHN0cmluZyYgX194dHJjKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9l
eHRyYWN0X2ludChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9z
dGF0ZSYsCiAgICAgICAgICAgICAgICAgICAgIHN0cmluZyYgX194dHJjLCBpbnQmIF9fYmFzZSkg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp
dGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBib29sJikgY29uc3Q7CgoK
ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBl
LCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgbG9uZyYpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFz
ZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9y
dCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlw
ZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAg
ICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcmKSBjb25zdDsKCgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i
YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBsb25nJikg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp
dGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAg
ICAgdW5zaWduZWQgbG9uZyBsb25nJikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7CgogICAgICB2aXJ0dWFs
IGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZG91YmxlJikgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUs
IGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBk
b3VibGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVy
X3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAg
ICAgICAgICAgICB2b2lkKiYpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0lu
SXRlcj46OmlkOwojIDcyMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVf
ZmFjZXRzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
PgogICAgY2xhc3MgbnVtX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgX19udW1f
YmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog
ICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk
IGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtX3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBs
b2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJf
dHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoK
ICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBj
aGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
cHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQo
aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAg
IHVuc2lnbmVkIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19z
LCBfX2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90
eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7
IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9f
ZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9
CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19m
LCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAg
IHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAg
ICAgICAgbG9uZyBkb3VibGUgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQo
X19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVy
X3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgY29u
c3Qgdm9pZCogX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2Ys
IF9fZmlsbCwgX192KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
X1ZhbHVlVD4KICAgICAgICBpdGVyX3R5cGUKICAgICAgICBfTV9jb252ZXJ0X2Zsb2F0KGl0ZXJf
dHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyIF9fbW9kLCBfVmFsdWVUIF9fdikgY29uc3Q7CgogICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVmFsdWVUPgogICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZlcnRfaW50
KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciBfX21vZCwgY2hhciBfX21vZGwsIF9WYWx1ZVQgX192KSBjb25zdDsK
CiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV93aWRlbl9mbG9hdChpdGVyX3R5cGUsIGlvc19iYXNl
JiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAgICAgICAgICAgICAg
ICBpbnQgX19sZW4pIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX3dpZGVuX2ludChp
dGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjaGFyKiBfX2NzLAog
ICAgICAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBfTV9pbnNlcnQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwK
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX193cywgaW50IF9fbGVuKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwKICAgICAgfm51bV9wdXQoKSB7IH07CgogICAgICB2aXJ0dWFsIGl0ZXJf
dHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGws
IGJvb2wgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChp
dGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2Um
LCBjaGFyX3R5cGUgX19maWxsLCB1bnNpZ25lZCBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFs
IGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBf
X2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAg
ICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCB1bnNpZ25l
ZCBsb25nIGxvbmcpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1
dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3Nf
YmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdikgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJf
dHlwZSBfX2ZpbGwsIGNvbnN0IHZvaWQqIF9fdikgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbnVtX3B1
dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBjbGFzcyBjb2xsYXRlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoK
CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp
bmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgoKICAgICAgX19jX2xvY2Fs
ZSBfTV9jX2xvY2FsZV9jb2xsYXRlOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6
aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRlKHNpemVfdCBfX3JlZnMgPSAwKQog
ICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2NfbG9jYWxlX2NvbGxhdGUg
PSBfU19jX2xvY2FsZTsgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoX19jX2xvY2Fs
ZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZz
KQogICAgICB7IF9NX2NfbG9jYWxlX2NvbGxhdGUgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2Mp
OyB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBf
Q2hhclQqIF9faGkxLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9D
aGFyVCogX19oaTIpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2NvbXBhcmUoX19sbzEs
IF9faGkxLCBfX2xvMiwgX19oaTIpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICB0cmFuc2Zv
cm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX3RyYW5zZm9ybShfX2xvLCBfX2hpKTsgfQoKICAgICAgbG9uZwogICAg
ICBoYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19oYXNoKF9fbG8sIF9faGkpOyB9CgoKICAgICAgaW50CiAgICAg
IF9NX2NvbXBhcmUoY29uc3QgX0NoYXJUKiwgY29uc3QgX0NoYXJUKikgY29uc3Q7CgogICAgICBz
aXplX3QKICAgICAgX01fdHJhbnNmb3JtKF9DaGFyVCosIGNvbnN0IF9DaGFyVCosIHNpemVfdCkg
Y29uc3Q7CgogIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29sbGF0ZSgpCiAgICAg
IHsKICAgICAgICBpZiAoX01fY19sb2NhbGVfY29sbGF0ZSAhPSBfU19jX2xvY2FsZSkKICAgICAg
ICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSk7CiAgICAgIH0KCiAg
ICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29u
c3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBj
b25zdCBfQ2hhclQqIF9faGkyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAg
ICAgZG9fdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgbG9uZwogICAgICBkb19oYXNoKGNvbnN0IF9DaGFyVCogX19s
bywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgY29sbGF0ZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRl
PD4KICAgIGludAogICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiwgY29u
c3QgY2hhciopIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBzaXplX3QKICAgIGNvbGxhdGU8Y2hh
cj46Ol9NX3RyYW5zZm9ybShjaGFyKiwgY29uc3QgY2hhciosIHNpemVfdCkgY29uc3Q7CgoKICB0
ZW1wbGF0ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBhcmUoY29uc3Qg
d2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgc2l6ZV90
CiAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCosIGNvbnN0IHdjaGFy
X3QqLCBzaXplX3QpIGNvbnN0OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xh
c3MgY29sbGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0ZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJs
aWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19z
dHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGVf
YnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogY29sbGF0
ZTxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAgIGlmIChfTV9jX2xvY2FsZV9jb2xsYXRl
ICE9IF9TX2NfbG9jYWxlKQogICAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2Fs
ZV9jb2xsYXRlKTsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0
ZSwgX19zKTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29s
bGF0ZV9ieW5hbWUoKSB7IH0KICAgIH07CgoKICBjbGFzcyB0aW1lX2Jhc2UKICB7CiAgcHVibGlj
OgogICAgZW51bSBkYXRlb3JkZXIgeyBub19vcmRlciwgZG15LCBtZHksIHltZCwgeWRtIH07CiAg
fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgX190aW1lcHVuY3QgOiBw
dWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh
clQgX19jaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJp
bmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKCiAgICAgIHN0YXRpYyBjb25z
dCBfQ2hhclQqIF9TX3RpbWV6b25lc1sxNF07CgogICAgcHJvdGVjdGVkOgogICAgICBfX2NfbG9j
YWxlIF9NX2NfbG9jYWxlX3RpbWVwdW5jdDsKICAgICAgY29uc3QgY2hhciogX01fbmFtZV90aW1l
cHVuY3Q7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9D
aGFyVCogX01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX3RpbWVfZm9y
bWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3Qg
X0NoYXJUKiBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVf
dGltZV9lcmFfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2FtOwogICAgICBjb25zdCBf
Q2hhclQqIF9NX3BtOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2FtX3BtX2Zvcm1hdDsKCgogICAg
ICBjb25zdCBfQ2hhclQqIF9NX2RheTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MjsKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9kYXkzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTQ7CiAg
ICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk2Owog
ICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTc7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlf
YTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2EyOwogICAgICBjb25zdCBfQ2hhclQqIF9N
X2RheV9hMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTQ7CiAgICAgIGNvbnN0IF9DaGFy
VCogX01fZGF5X2E1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNjsKICAgICAgY29uc3Qg
X0NoYXJUKiBfTV9kYXlfYTc7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDAxOwogICAg
ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDI7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgw
MzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA0OwogICAgICBjb25zdCBfQ2hhclQqIF9N
X21vbnRoMDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNjsKICAgICAgY29uc3QgX0No
YXJUKiBfTV9tb250aDA3OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDg7CiAgICAgIGNv
bnN0IF9DaGFyVCogX01fbW9udGgwOTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDEwOwog
ICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u
dGgxMjsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwMTsKICAgICAgY29uc3QgX0No
YXJUKiBfTV9tb250aF9hMDI7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTAzOwogICAg
ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250
aF9hMDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA2OwogICAgICBjb25zdCBfQ2hh
clQqIF9NX21vbnRoX2EwNzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDg7CiAgICAg
IGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA5OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRo
X2ExMDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMTE7CiAgICAgIGNvbnN0IF9DaGFy
VCogX01fbW9udGhfYTEyOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgX190aW1l
cHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpLCBf
TV9uYW1lX3RpbWVwdW5jdCgiQyIpCiAgICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsg
fQoKICAgICAgZXhwbGljaXQKICAgICAgX190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNv
bnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChf
X3JlZnMpLCBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCiAgICAgIHsgX01faW5pdGlhbGl6ZV90aW1l
cHVuY3QoX19jbG9jKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9wdXQoX0NoYXJUKiBfX3MsIHNp
emVfdCBfX21heGxlbiwgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCwKICAgICAgICAgICAgIGNvbnN0
IHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgX01fZGF0ZV9mb3JtYXRzKGNvbnN0
IF9DaGFyVCoqIF9fZGF0ZSkgY29uc3QKICAgICAgewoKICAgICAgICBfX2RhdGVbMF0gPSBfTV9k
YXRlX2Zvcm1hdDsKICAgICAgICBfX2RhdGVbMV0gPSBfTV9kYXRlX2VyYV9mb3JtYXQ7CiAgICAg
IH0KCiAgICAgIHZvaWQKICAgICAgX01fdGltZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoqIF9fdGlt
ZSkgY29uc3QKICAgICAgewoKICAgICAgICBfX3RpbWVbMF0gPSBfTV90aW1lX2Zvcm1hdDsKICAg
ICAgICBfX3RpbWVbMV0gPSBfTV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZvaWQK
ICAgICAgX01fYW1wbShjb25zdCBfQ2hhclQqKiBfX2FtcG0pIGNvbnN0CiAgICAgIHsKICAgICAg
ICBfX2FtcG1bMF0gPSBfTV9hbTsKICAgICAgICBfX2FtcG1bMV0gPSBfTV9wbTsKICAgICAgfQoK
ICAgICAgdm9pZAogICAgICBfTV9kYXRlX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX2R0
KSBjb25zdAogICAgICB7CgogICAgICAgIF9fZHRbMF0gPSBfTV9kYXRlX3RpbWVfZm9ybWF0Owog
ICAgICAgIF9fZHRbMV0gPSBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgfQoKICAgICAg
dm9pZAogICAgICBfTV9kYXlzKGNvbnN0IF9DaGFyVCoqIF9fZGF5cykgY29uc3QKICAgICAgewog
ICAgICAgIF9fZGF5c1swXSA9IF9NX2RheTE7CiAgICAgICAgX19kYXlzWzFdID0gX01fZGF5MjsK
ICAgICAgICBfX2RheXNbMl0gPSBfTV9kYXkzOwogICAgICAgIF9fZGF5c1szXSA9IF9NX2RheTQ7
CiAgICAgICAgX19kYXlzWzRdID0gX01fZGF5NTsKICAgICAgICBfX2RheXNbNV0gPSBfTV9kYXk2
OwogICAgICAgIF9fZGF5c1s2XSA9IF9NX2RheTc7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAg
X01fZGF5c19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0CiAgICAgIHsK
ICAgICAgICBfX2RheXNbMF0gPSBfTV9kYXlfYTE7CiAgICAgICAgX19kYXlzWzFdID0gX01fZGF5
X2EyOwogICAgICAgIF9fZGF5c1syXSA9IF9NX2RheV9hMzsKICAgICAgICBfX2RheXNbM10gPSBf
TV9kYXlfYTQ7CiAgICAgICAgX19kYXlzWzRdID0gX01fZGF5X2E1OwogICAgICAgIF9fZGF5c1s1
XSA9IF9NX2RheV9hNjsKICAgICAgICBfX2RheXNbNl0gPSBfTV9kYXlfYTc7CiAgICAgIH0KCiAg
ICAgIHZvaWQKICAgICAgX01fbW9udGhzKGNvbnN0IF9DaGFyVCoqIF9fbW9udGhzKSBjb25zdAog
ICAgICB7CiAgICAgICAgX19tb250aHNbMF0gPSBfTV9tb250aDAxOwogICAgICAgIF9fbW9udGhz
WzFdID0gX01fbW9udGgwMjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRoMDM7CiAgICAg
ICAgX19tb250aHNbM10gPSBfTV9tb250aDA0OwogICAgICAgIF9fbW9udGhzWzRdID0gX01fbW9u
dGgwNTsKICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoMDY7CiAgICAgICAgX19tb250aHNb
Nl0gPSBfTV9tb250aDA3OwogICAgICAgIF9fbW9udGhzWzddID0gX01fbW9udGgwODsKICAgICAg
ICBfX21vbnRoc1s4XSA9IF9NX21vbnRoMDk7CiAgICAgICAgX19tb250aHNbOV0gPSBfTV9tb250
aDEwOwogICAgICAgIF9fbW9udGhzWzEwXSA9IF9NX21vbnRoMTE7CiAgICAgICAgX19tb250aHNb
MTFdID0gX01fbW9udGgxMjsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9tb250aHNfYWJi
cmV2aWF0ZWQoY29uc3QgX0NoYXJUKiogX19tb250aHMpIGNvbnN0CiAgICAgIHsKICAgICAgICBf
X21vbnRoc1swXSA9IF9NX21vbnRoX2EwMTsKICAgICAgICBfX21vbnRoc1sxXSA9IF9NX21vbnRo
X2EwMjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRoX2EwMzsKICAgICAgICBfX21vbnRo
c1szXSA9IF9NX21vbnRoX2EwNDsKICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21vbnRoX2EwNTsK
ICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoX2EwNjsKICAgICAgICBfX21vbnRoc1s2XSA9
IF9NX21vbnRoX2EwNzsKICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21vbnRoX2EwODsKICAgICAg
ICBfX21vbnRoc1s4XSA9IF9NX21vbnRoX2EwOTsKICAgICAgICBfX21vbnRoc1s5XSA9IF9NX21v
bnRoX2ExMDsKICAgICAgICBfX21vbnRoc1sxMF0gPSBfTV9tb250aF9hMTE7CiAgICAgICAgX19t
b250aHNbMTFdID0gX01fbW9udGhfYTEyOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2
aXJ0dWFsCiAgICAgIH5fX3RpbWVwdW5jdCgpOwoKCiAgICAgIHZvaWQKICAgICAgX01faW5pdGlh
bGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfU19jX2xvY2FsZSk7CiAgICB9OwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIF9fdGltZXB1bmN0PF9D
aGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgX190aW1lcHVuY3Q8Y2hhcj46On5fX3RpbWVw
dW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjaGFyKgogICAgX190aW1lcHVuY3Q8Y2hh
cj46Ol9TX3RpbWV6b25lc1sxNF07CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1
bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7Cgog
IHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9wdXQoY2hhcios
IHNpemVfdCwgY29uc3QgY2hhciosIGNvbnN0IHRtKikgY29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAg
ICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6fl9fdGltZXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAg
IGNvbnN0IHdjaGFyX3QqCiAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X1NfdGltZXpvbmVzWzE0
XTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2lu
aXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCiAgdGVtcGxhdGU8PgogICAg
dm9pZAogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX3B1dCh3Y2hhcl90Kiwgc2l6ZV90LCBj
b25zdCB3Y2hhcl90KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG0q
KSBjb25zdDsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjb25zdCBfQ2hhclQq
IF9fdGltZXB1bmN0PF9DaGFyVD46Ol9TX3RpbWV6b25lc1sxNF07CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldCA6IHB1Ymxp
YyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAg
ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5
cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAg
ICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXQo
c2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSB7IH0KCiAg
ICAgIGRhdGVvcmRlcgogICAgICBkYXRlX29yZGVyKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fZGF0ZV9vcmRlcigpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3RpbWUoaXRl
cl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb19nZXRfdGltZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsg
fQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90
eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X2Rh
dGUoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQog
ICAgICBnZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0q
IF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF93ZWVrZGF5KF9fYmVnLCBf
X2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X21v
bnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s
CiAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X21vbnRobmFtZShfX2JlZywgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF95ZWFyKGl0
ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fZ2V0X3llYXIoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7
IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0KCkgeyB9Cgog
ICAgICB2aXJ0dWFsIGRhdGVvcmRlcgogICAgICBkb19kYXRlX29yZGVyKCkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5
cGUKICAgICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF93
ZWVrZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAgICAg
ICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0
OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5
cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmly
dHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5
cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJh
Y3RfbnVtKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIs
CiAgICAgICAgICAgICAgICAgICAgIGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3QgX19sZW4s
CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAg
ICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3Q7CgoKCiAgICAg
IHZvaWQKICAgICAgX01fZXh0cmFjdF9uYW1lKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYg
X19lbmQsIGludCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQq
KiBfX25hbWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAgICAgICAgICAgICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VycikgY29uc3Q7CgoKICAgICAgdm9pZAogICAgICBfTV9leHRyYWN0
X3ZpYV9mb3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBf
X2Zvcm1hdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46Omlk
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFz
cyB0aW1lX2dldF9ieW5hbWUgOiBwdWJsaWMgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPgogICAg
ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXRfYnlu
YW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiB0aW1lX2dldDxfQ2hh
clQsIF9Jbkl0ZXI+KF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAg
ICAgIH50aW1lX2dldF9ieW5hbWUoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1dCA6IHB1YmxpYyBsb2Nh
bGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl
ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoK
ICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1
dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9Cgog
ICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBj
aGFyX3R5cGUgX19maWxsLCBjb25zdCB0bSogX190bSwKICAgICAgICAgIGNvbnN0IF9DaGFyVCog
X19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAg
IHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAg
ICAgICAgIGNvbnN0IHRtKiBfX3RtLCBjaGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kID0gMCkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbywgX19maWxsLCBfX3RtLCBf
X2Zvcm1hdCwgX19tb2QpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50
aW1lX3B1dCgpCiAgICAgIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0
KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB0
bSogX190bSwKICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2QpIGNvbnN0Owog
ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAg
IGxvY2FsZTo6aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXRfYnlu
YW1lIDogcHVibGljIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+CiAgICB7CiAgICBwdWJsaWM6
CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIg
aXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9wdXRfYnluYW1lKGNvbnN0IGNo
YXIqICwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRl
cj4oX19yZWZzKQogICAgICB7IH07CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg
IH50aW1lX3B1dF9ieW5hbWUoKSB7IH0KICAgIH07CgoKICBjbGFzcyBtb25leV9iYXNlCiAgewog
IHB1YmxpYzoKICAgIGVudW0gcGFydCB7IG5vbmUsIHNwYWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVl
IH07CiAgICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmllbGRbNF07IH07CgogICAgc3RhdGljIGNv
bnN0IHBhdHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJuOwoKCgogICAgc3RhdGljIHBhdHRlcm4KICAg
IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFy
IF9fcG9zbik7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgog
ICAgY2xhc3MgbW9uZXlwdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlf
YmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog
ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsK
CiAgICBwcml2YXRlOgogICAgICBjb25zdCBjaGFyKiBfTV9ncm91cGluZzsKICAgICAgY2hhcl90
eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwog
ICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX2N1cnJfc3ltYm9sOwogICAgICBjb25zdCBjaGFyX3R5
cGUqIF9NX3Bvc2l0aXZlX3NpZ247CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fbmVnYXRpdmVf
c2lnbjsKICAgICAgaW50IF9NX2ZyYWNfZGlnaXRzOwogICAgICBwYXR0ZXJuIF9NX3Bvc19mb3Jt
YXQ7CiAgICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxp
Y2l0CiAgICAgIG1vbmV5cHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChf
X3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7IH0KCiAgICAgIGV4cGxp
Y2l0CiAgICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywg
c2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsg
X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY2xvYywgX19zKTsgfQoKICAgICAgY2hhcl90eXBl
CiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNp
bWFsX3BvaW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0aG91c2FuZHNfc2VwKCkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAgICBzdHJp
bmcKICAgICAgZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19ncm91cGlu
ZygpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBjdXJyX3N5bWJvbCgpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX2N1cnJfc3ltYm9sKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAg
ICAgIHBvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wb3NpdGl2
ZV9zaWduKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIG5lZ2F0aXZlX3NpZ24oKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7IH0KCiAgICAgIGludAog
ICAgICBmcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2ZyYWNfZGln
aXRzKCk7IH0KCiAgICAgIHBhdHRlcm4KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX3Bvc19mb3JtYXQoKTsgfQoKICAgICAgcGF0dGVybgogICAgICBuZWdf
Zm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVnX2Zvcm1hdCgpOyB9Cgog
ICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0KCk7CgogICAgICB2
aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gX01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAg
ZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7
IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAg
eyByZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAg
ZG9fY3Vycl9zeW1ib2woKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyX3N5bWJvbDsgfQoK
ICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19wb3NpdGl2ZV9zaWduKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gX01fcG9zaXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdf
dHlwZQogICAgICBkb19uZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbmVn
YXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZnJhY19kaWdpdHMoKSBj
b25zdAogICAgICB7IHJldHVybiBfTV9mcmFjX2RpZ2l0czsgfQoKICAgICAgdmlydHVhbCBwYXR0
ZXJuCiAgICAgIGRvX3Bvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9wb3NfZm9y
bWF0OyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fbmVnX2Zvcm1hdCgpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIF9NX25lZ19mb3JtYXQ7IH0KCgogICAgICAgdm9pZAogICAgICAgX01f
aW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX1NfY19sb2NhbGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19uYW1lID0gX19udWxs
KTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGxv
Y2FsZTo6aWQgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNvbnN0IGJvb2wgbW9uZXlwdW5jdDxfQ2hhclQs
IF9JbnRsPjo6aW50bDsKCiAgdGVtcGxhdGU8PgogICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6
fm1vbmV5cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46
On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8Y2hh
ciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLCBjb25zdCBjaGFy
Kik7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Ojpf
TV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwgY29uc3QgY2hhciopOwoKCiAgdGVt
cGxhdGU8PgogICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6fm1vbmV5cHVuY3QoKTsKCiAg
dGVtcGxhdGU8PgogICAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46On5tb25leXB1bmN0KCk7
CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9N
X2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKTsKCiAgdGVtcGxh
dGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46Ol9NX2luaXRpYWxp
emVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKik7CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjbGFzcyBtb25leXB1bmN0X2J5bmFtZSA6IHB1
YmxpYyBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+CiAgICB7CiAgICAgIF9fY19sb2NhbGUgX01f
Y19sb2NhbGVfbW9uZXlwdW5jdDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsK
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGludGwgPSBfSW50bDsKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIG1vbmV5cHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDAp
CiAgICAgIDogbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPihfX3JlZnMpCiAgICAgIHsKICAgICAg
ICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlwdW5jdCwgX19zKTsKICAgICAg
ICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX01fY19sb2NhbGVfbW9uZXlwdW5jdCk7CiAgICAg
IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3RfYnluYW1l
KCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9
CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25z
dCBib29sIG1vbmV5cHVuY3RfYnluYW1lPF9DaGFyVCwgX0ludGw+OjppbnRsOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBtb25leV9nZXQg
OiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBf
Q2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwogICAgICB0
eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxv
Y2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBtb25leV9nZXQoc2l6ZV90IF9fcmVm
cyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAg
IGdldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFz
ZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUm
IF9fdW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX3MsIF9fZW5kLCBf
X2ludGwsIF9faW8sIF9fZXJyLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdl
dChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYg
X19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9f
ZGlnaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19zLCBfX2VuZCwgX19p
bnRsLCBfX2lvLCBfX2VyciwgX19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0
dWFsCiAgICAgIH5tb25leV9nZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3Nf
YmFzZSYgX19pbywKICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBk
b3VibGUmIF9fdW5pdHMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
Z2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNl
JiBfX2lvLAogICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlw
ZSYgX19kaWdpdHMpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg
ICBjbGFzcyBtb25leV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGlj
OgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIg
aXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBl
OwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBtb25l
eV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAg
ICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBfX3VuaXRz
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2ludGwsIF9faW8sIF9f
ZmlsbCwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9f
cywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgY2hhcl90eXBlIF9fZmls
bCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5kb19wdXQoX19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwgX19kaWdpdHMpOyB9CgogICAgcHJv
dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leV9wdXQoKSB7IH0KCiAgICAgIHZpcnR1
YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9z
X2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICBsb25nIGRvdWJsZSBf
X3VuaXRzKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVy
X3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGws
CiAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0OwogICAgfTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2Fs
ZTo6aWQgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCgogIHN0cnVjdCBtZXNzYWdl
c19iYXNlCiAgewogICAgdHlwZWRlZiBpbnQgY2F0YWxvZzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlcyA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBw
dWJsaWMgbWVzc2FnZXNfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190
eXBlOwoKICAgIHByb3RlY3RlZDoKCgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX21lc3Nh
Z2VzOwoKCiAgICAgIGNvbnN0IGNoYXIqIF9NX25hbWVfbWVzc2FnZXM7CgoKICAgIHB1YmxpYzoK
ICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBtZXNzYWdl
cyhzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcyksIF9NX25h
bWVfbWVzc2FnZXMoIkMiKQogICAgICB7IF9NX2NfbG9jYWxlX21lc3NhZ2VzID0gX1NfY19sb2Nh
bGU7IH0KCgogICAgICBleHBsaWNpdAogICAgICBtZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywg
Y29uc3QgY2hhciogX19uYW1lLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZh
Y2V0KF9fcmVmcykKICAgICAgewogICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX25hbWU7CiAg
ICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOwog
ICAgICB9CgogICAgICBjYXRhbG9nCiAgICAgIG9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+
JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X29wZW4oX19zLCBfX2xvYyk7IH0KCgogICAgICBjYXRhbG9nCiAgICAgIG9wZW4oY29uc3QgYmFz
aWNfc3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxlJiwgY29uc3QgY2hhciopIGNvbnN0OwoKICAg
ICAgc3RyaW5nX3R5cGUKICAgICAgZ2V0KGNhdGFsb2cgX19jLCBpbnQgX19zZXQsIGludCBfX21z
Z2lkLCBjb25zdCBzdHJpbmdfdHlwZSYgX19zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k
b19nZXQoX19jLCBfX3NldCwgX19tc2dpZCwgX19zKTsgfQoKICAgICAgdm9pZAogICAgICBjbG9z
ZShjYXRhbG9nIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY2xvc2UoX19jKTsg
fQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bWVzc2FnZXMoKQogICAgICAg
ewogICAgICAgICBpZiAoX01fY19sb2NhbGVfbWVzc2FnZXMgIT0gX1NfY19sb2NhbGUpCiAgICAg
ICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CiAgICAgICB9
CgogICAgICB2aXJ0dWFsIGNhdGFsb2cKICAgICAgZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8
Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUK
ICAgICAgZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmdfdHlwZSYgX19kZmF1
bHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCB2b2lkCiAgICAgIGRvX2Nsb3NlKGNhdGFsb2cpIGNv
bnN0OwoKCiAgICAgIGNoYXIqCiAgICAgIF9NX2NvbnZlcnRfdG9fY2hhcihjb25zdCBzdHJpbmdf
dHlwZSYgX19tc2cpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19tc2cuY19zdHIoKSkpOwogICAgICB9CgoK
ICAgICAgc3RyaW5nX3R5cGUKICAgICAgX01fY29udmVydF9mcm9tX2NoYXIoY2hhciogX19tc2cp
IGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8Y2hhcj46
Omxlbmd0aChfX21zZykgLSAxOwojIDE3MzAgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAgICAgICAgcmV0dXJuIHN0cmluZ190eXBlKCk7CiAgICAg
IH0KICAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG1l
c3NhZ2VzPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgc3RyaW5nCiAgICBtZXNzYWdl
czxjaGFyPjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmKSBjb25zdDsK
CgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMv
bWVzc2FnZXNfbWVtYmVycy5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9tZXNzYWdlc19tZW1iZXJzLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCiAg
ICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBj
b25zdCBsb2NhbGUmIF9fbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBfX2RpcikgY29uc3QKICAgIHsKICAgICAgYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9f
ZGlyKTsKICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNh
dGFsb2cKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNo
YXI+JiBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsZSYpIGNv
bnN0CiAgICB7CgoKICAgICAgdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CiAgICAgIHJldHVybiAw
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdl
czxfQ2hhclQ+OjpzdHJpbmdfdHlwZQogICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fZ2V0KGNhdGFs
b2csIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190
eXBlJiBfX2RmYXVsdCkgY29uc3QKICAgIHsKCgoKCgoKICAgICAgY2hhciogX19vbGQgPSBzdHJk
dXAoc2V0bG9jYWxlKF9fTENfQUxMLCBfX251bGwpKTsKICAgICAgc2V0bG9jYWxlKF9fTENfQUxM
LCBfTV9uYW1lX21lc3NhZ2VzKTsKICAgICAgY2hhciogX19tc2cgPSBkY2dldHRleHQgKF9fbnVs
bCwgX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSwgX19MQ19NRVNTQUdFUyk7CiAgICAgIHNl
dGxvY2FsZShfX0xDX0FMTCwgX19vbGQpOwogICAgICBmcmVlKF9fb2xkKTsKICAgICAgcmV0dXJu
IF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIHZvaWQKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cp
IGNvbnN0CiAgICB7IH0KIyAxNzQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xv
Y2FsZV9mYWNldHMuaCIgMiAzCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNz
IG1lc3NhZ2VzX2J5bmFtZSA6IHB1YmxpYyBtZXNzYWdlczxfQ2hhclQ+CiAgICB7CiAgICBwdWJs
aWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19z
dHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2Vz
X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IG1lc3Nh
Z2VzPF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9f
czsKICAgICAgICBpZiAoX01fY19sb2NhbGVfbWVzc2FnZXMgIT0gX1NfY19sb2NhbGUpCiAgICAg
ICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKICAgICAgICBf
U19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7CiAgICAgIH0KCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1lc3NhZ2VzX2J5bmFtZSgpCiAgICAg
IHsgfQogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg
Ym9vbAogICAgaXNzcGFjZShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyBy
ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6c3Bh
Y2UsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK
ICAgIGlzcHJpbnQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJu
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnByaW50LCBf
X2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp
c2NudHJsKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2Vf
ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpjbnRybCwgX19jKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBl
cihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0
PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6dXBwZXIsIF9fYyk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wgaXNsb3dlcihfQ2hhclQg
X19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9D
aGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6bG93ZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxwaGEoX0NoYXJUIF9fYywg
Y29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+
ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFscGhhLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2RpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0
IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f
bG9jKS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQgX19jLCBjb25zdCBsb2Nh
bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku
aXMoY3R5cGVfYmFzZTo6cHVuY3QsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgaW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYg
X19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhj
dHlwZV9iYXNlOjp4ZGlnaXQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xv
YykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBl
X2Jhc2U6OmFsbnVtLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu
bGluZSBib29sCiAgICBpc2dyYXBoKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAg
ICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNl
OjpncmFwaCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg
X0NoYXJUCiAgICB0b3VwcGVyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7
IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS50b3VwcGVyKF9fYyk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG9sb3dl
cihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0
PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG9sb3dlcihfX2MpOyB9Cn0KIyA0MiAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3Mg
YmFzaWNfaW9zIDogcHVibGljIGlvc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl
ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50
X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUg
cG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5
cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGN0
eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0
b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1f
cHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVk
ZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1Zl9pdGVy
OwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0NoYXJULCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1n
ZXRfdHlwZTsKCgogICAgcHJvdGVjdGVkOgogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4qIF9NX3RpZTsKICAgICAgbXV0YWJsZSBjaGFyX3R5cGUgX01fZmlsbDsKICAgICAgbXV0
YWJsZSBib29sIF9NX2ZpbGxfaW5pdDsKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4qIF9NX3N0cmVhbWJ1ZjsKCgogICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9NX2ZjdHlw
ZTsKCiAgICAgIGNvbnN0IF9fbnVtcHV0X3R5cGUqIF9NX2ZudW1wdXQ7CgogICAgICBjb25zdCBf
X251bWdldF90eXBlKiBfTV9mbnVtZ2V0OwoKICAgIHB1YmxpYzoKICAgICAgb3BlcmF0b3Igdm9p
ZCooKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5mYWlsKCkgPyAwIDogY29uc3RfY2FzdDxi
YXNpY19pb3MqPih0aGlzKTsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvciEoKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5mYWlsKCk7IH0KCiAgICAgIGlvc3RhdGUKICAgICAgcmRzdGF0
ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsgfQoKICAgICAgdm9p
ZAogICAgICBjbGVhcihpb3N0YXRlIF9fc3RhdGUgPSBnb29kYml0KTsKCiAgICAgIHZvaWQKICAg
ICAgc2V0c3RhdGUoaW9zdGF0ZSBfX3N0YXRlKQogICAgICB7IHRoaXMtPmNsZWFyKHRoaXMtPnJk
c3RhdGUoKSB8IF9fc3RhdGUpOyB9CgogICAgICBib29sCiAgICAgIGdvb2QoKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5yZHN0YXRlKCkgPT0gMDsgfQoKICAgICAgYm9vbAogICAgICBlb2Yo
KSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgZW9mYml0KSAhPSAwOyB9
CgogICAgICBib29sCiAgICAgIGZhaWwoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRz
dGF0ZSgpICYgKGJhZGJpdCB8IGZhaWxiaXQpKSAhPSAwOyB9CgogICAgICBib29sCiAgICAgIGJh
ZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBiYWRiaXQpICE9IDA7
IH0KCiAgICAgIGlvc3RhdGUKICAgICAgZXhjZXB0aW9ucygpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IF9NX2V4Y2VwdGlvbjsgfQoKICAgICAgdm9pZAogICAgICBleGNlcHRpb25zKGlvc3RhdGUgX19l
eGNlcHQpCiAgICAgIHsKICAgICAgICBfTV9leGNlcHRpb24gPSBfX2V4Y2VwdDsKICAgICAgICB0
aGlzLT5jbGVhcihfTV9zdHJlYW1idWZfc3RhdGUpOwogICAgICB9CgoKICAgICAgZXhwbGljaXQK
ICAgICAgYmFzaWNfaW9zKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKSA6
IGlvc19iYXNlKCkKICAgICAgeyB0aGlzLT5pbml0KF9fc2IpOyB9CgogICAgICB2aXJ0dWFsCiAg
ICAgIH5iYXNpY19pb3MoKSB7IH0KCgogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4qCiAgICAgIHRpZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3RpZTsgfQoKICAgICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KgogICAgICB0aWUoYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+KiBfX3RpZXN0cikKICAgICAgewogICAgICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV90aWU7CiAgICAgICAgX01fdGllID0gX190aWVzdHI7
CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CgogICAgICBiYXNpY19zdHJlYW1idWY8X0No
YXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJl
YW1idWY7IH0KCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICBy
ZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7CgogICAgICBiYXNp
Y19pb3MmCiAgICAgIGNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3Jocyk7CgogICAgICBjaGFy
X3R5cGUKICAgICAgZmlsbCgpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGxfaW5p
dCkKICAgICAgICAgIHsKICAgICAgICAgICAgX01fZmlsbCA9IHRoaXMtPndpZGVuKCcgJyk7CiAg
ICAgICAgICAgIF9NX2ZpbGxfaW5pdCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJu
IF9NX2ZpbGw7CiAgICAgIH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBmaWxsKGNoYXJfdHlwZSBf
X2NoKQogICAgICB7CiAgICAgICAgY2hhcl90eXBlIF9fb2xkID0gdGhpcy0+ZmlsbCgpOwogICAg
ICAgIF9NX2ZpbGwgPSBfX2NoOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKCiAgICAg
IGxvY2FsZQogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgICAgIGNoYXIKICAg
ICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgY2hh
cl90eXBlCiAgICAgIHdpZGVuKGNoYXIgX19jKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CgogICAg
ICBiYXNpY19pb3MoKSA6IGlvc19iYXNlKCkKICAgICAgeyB9CgogICAgICB2b2lkCiAgICAgIGlu
aXQoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYm9vbAog
ICAgICBfTV9jaGVja19mYWNldChjb25zdCBsb2NhbGU6OmZhY2V0KiBfX2YpIGNvbnN0CiAgICAg
IHsKICAgICAgICBpZiAoIV9fZikKICAgICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9jYWNoZV9mYWNldHMo
Y29uc3QgbG9jYWxlJiBfX2xvYyk7CiAgICB9Owp9CgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvYml0cy9iYXNpY19pb3MudGNjIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvYml0cy9iYXNpY19pb3MudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19p
b3M8X0NoYXJULCBfVHJhaXRzPjo6Y2xlYXIoaW9zdGF0ZSBfX3N0YXRlKQogICAgewogICAgICBp
ZiAodGhpcy0+cmRidWYoKSkKICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRlOwog
ICAgICBlbHNlCiAgICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRlIHwgYmFkYml0
OwogICAgICBpZiAoKHRoaXMtPnJkc3RhdGUoKSAmIHRoaXMtPmV4Y2VwdGlvbnMoKSkpCiAgICAg
ICAgX190aHJvd19pb3NfZmFpbHVyZSgiYmFzaWNfaW9zOjpjbGVhcihpb3N0YXRlKSBjYXVzZWQg
ZXhjZXB0aW9uIik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgYmFzaWNf
aW9zPF9DaGFyVCwgX1RyYWl0cz46OnJkYnVmKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+KiBfX3NiKQogICAgewogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiog
X19vbGQgPSBfTV9zdHJlYW1idWY7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fc2I7CiAgICAgIHRo
aXMtPmNsZWFyKCk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y29weWZtdChjb25zdCBiYXNpY19p
b3MmIF9fcmhzKQogICAgewoKCgoKICAgICAgX1dvcmRzKiBfX3dvcmRzID0gKF9fcmhzLl9NX3dv
cmRfc2l6ZSA8PSBfU19sb2NhbF93b3JkX3NpemUpID8KICAgICAgICBfTV9sb2NhbF93b3JkIDog
bmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX3NpemVdOwoKCiAgICAgIF9DYWxsYmFja19saXN0KiBf
X2NiID0gX19yaHMuX01fY2FsbGJhY2tzOwogICAgICBpZiAoX19jYikKICAgICAgICBfX2NiLT5f
TV9hZGRfcmVmZXJlbmNlKCk7CiAgICAgIF9NX2NhbGxfY2FsbGJhY2tzKGVyYXNlX2V2ZW50KTsK
ICAgICAgaWYgKF9NX3dvcmQgIT0gX01fbG9jYWxfd29yZCkKICAgICAgICB7CiAgICAgICAgICBk
ZWxldGUgW10gX01fd29yZDsKICAgICAgICAgIF9NX3dvcmQgPSAwOwogICAgICAgIH0KICAgICAg
X01fZGlzcG9zZV9jYWxsYmFja3MoKTsKCiAgICAgIF9NX2NhbGxiYWNrcyA9IF9fY2I7CiAgICAg
IGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fcmhzLl9NX3dvcmRfc2l6ZTsgKytfX2kpCiAgICAg
ICAgX193b3Jkc1tfX2ldID0gX19yaHMuX01fd29yZFtfX2ldOwogICAgICBpZiAoX01fd29yZCAh
PSBfTV9sb2NhbF93b3JkKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBbXSBfTV93b3JkOwog
ICAgICAgICAgX01fd29yZCA9IDA7CiAgICAgICAgfQogICAgICBfTV93b3JkID0gX193b3JkczsK
ICAgICAgX01fd29yZF9zaXplID0gX19yaHMuX01fd29yZF9zaXplOwoKICAgICAgdGhpcy0+Zmxh
Z3MoX19yaHMuZmxhZ3MoKSk7CiAgICAgIHRoaXMtPndpZHRoKF9fcmhzLndpZHRoKCkpOwogICAg
ICB0aGlzLT5wcmVjaXNpb24oX19yaHMucHJlY2lzaW9uKCkpOwogICAgICB0aGlzLT50aWUoX19y
aHMudGllKCkpOwogICAgICB0aGlzLT5maWxsKF9fcmhzLmZpbGwoKSk7CgogICAgICB0aGlzLT5l
eGNlcHRpb25zKF9fcmhzLmV4Y2VwdGlvbnMoKSk7CgogICAgICBfTV9jYWxsX2NhbGxiYWNrcyhj
b3B5Zm10X2V2ZW50KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjaGFyCiAgICBiYXNpY19pb3M8X0No
YXJULCBfVHJhaXRzPjo6bmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0
CiAgICB7CiAgICAgIGNoYXIgX19yZXQgPSBfX2RmYXVsdDsKICAgICAgaWYgKF9NX2NoZWNrX2Zh
Y2V0KF9NX2ZjdHlwZSkpCiAgICAgICAgX19yZXQgPSBfTV9mY3R5cGUtPm5hcnJvdyhfX2MsIF9f
ZGZhdWx0KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBfQ2hhclQKICAgIGJhc2ljX2lvczxfQ2hhclQs
IF9UcmFpdHM+Ojp3aWRlbihjaGFyIF9fYykgY29uc3QKICAgIHsKICAgICAgY2hhcl90eXBlIF9f
cmV0ID0gY2hhcl90eXBlKCk7CiAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mY3R5cGUpKQog
ICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT53aWRlbihfX2MpOwogICAgICByZXR1cm4gX19yZXQ7
CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBsb2NhbGUKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjppbWJ1ZShjb25zdCBsb2Nh
bGUmIF9fbG9jKQogICAgewogICAgICBsb2NhbGUgX19vbGQodGhpcy0+Z2V0bG9jKCkpOwogICAg
ICBpb3NfYmFzZTo6aW1idWUoX19sb2MpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX19sb2MpOwog
ICAgICBpZiAodGhpcy0+cmRidWYoKSAhPSAwKQogICAgICAgIHRoaXMtPnJkYnVmKCktPnB1Ymlt
YnVlKF9fbG9jKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19pb3M8X0NoYXJU
LCBfVHJhaXRzPjo6aW5pdChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikK
ICAgIHsKCiAgICAgIGlvc19iYXNlOjpfTV9pbml0KCk7CiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhf
TV9pb3NfbG9jYWxlKTsKICAgICAgX01fdGllID0gMDsKIyAxNTkgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLnRjYyIgMwogICAgICBfTV9maWxsID0gX0NoYXJUKCk7
CiAgICAgIF9NX2ZpbGxfaW5pdCA9IGZhbHNlOwoKICAgICAgX01fZXhjZXB0aW9uID0gZ29vZGJp
dDsKICAgICAgX01fc3RyZWFtYnVmID0gX19zYjsKICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0g
X19zYiA/IGdvb2RiaXQgOiBiYWRiaXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFp
dHM+OjpfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgaWYg
KGhhc19mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mY3R5cGUgPSAmdXNl
X2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19sb2MpOwogICAgICBlbHNlCiAgICAgICAgX01fZmN0eXBl
ID0gMDsKCiAgICAgIGlmIChoYXNfZmFjZXQ8X19udW1wdXRfdHlwZT4oX19sb2MpKQogICAgICAg
IF9NX2ZudW1wdXQgPSAmdXNlX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKTsKICAgICAgZWxz
ZQogICAgICAgIF9NX2ZudW1wdXQgPSAwOwogICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtZ2V0X3R5
cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVtZ2V0ID0gJnVzZV9mYWNldDxfX251bWdldF90eXBl
PihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAgICBfTV9mbnVtZ2V0ID0gMDsKICAgIH0KCgoKCiAg
ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgYmFzaWNfaW9zPHdjaGFyX3Q+Owp9CiMgMjA4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMi9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyA1MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjIvaW9zIiAyIDMKIyA0NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lv
czxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFy
VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAg
IHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVh
bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz
aWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgb3N0
cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOwogICAg
ICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlw
ZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKCgogICAgICBleHBs
aWNpdAogICAgICBiYXNpY19vc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsg
dGhpcy0+aW5pdChfX3NiKTsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfb3N0cmVhbSgp
IHsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsKCgoK
ICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgq
X19wZikoX19vc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3Bl
cmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX29zdHJl
YW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2UmKSk7
CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBfX24pOwoKICAg
ICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pOwoK
ICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoYm9vbCBfX24pOwoKICAgICAg
X19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoc2hvcnQgX19uKQogICAgICB7CiAgICAg
ICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpi
YXNlZmllbGQ7CiAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlv
c19iYXNlOjpoZXgpCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIHNob3J0PihfX24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0
dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAg
ICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IF9fbikK
ICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
PihfX24pKTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW50IF9f
bikKICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdz
KCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpv
Y3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJh
dG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikpKTsKICAgICAgICBlbHNl
CiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24p
KTsKICAgICAgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWdu
ZWQgaW50IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPihfX24pKTsgfQoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVy
YXRvcjw8KGxvbmcgbG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9fbik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg
ICAgIG9wZXJhdG9yPDwoZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I8PChmbG9hdCBfX2YpCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3Rh
dGljX2Nhc3Q8ZG91YmxlPihfX2YpKTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9w
ZXJhdG9yPDwobG9uZyBkb3VibGUgX19mKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9fcCk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBfX29zdHJlYW1fdHlw
ZSYKICAgICAgcHV0KGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg
IHdyaXRlKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBfX29z
dHJlYW1fdHlwZSYKICAgICAgZmx1c2goKTsKCgogICAgICBwb3NfdHlwZQogICAgICB0ZWxscCgp
OwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtwKHBvc190eXBlKTsKCiAgICAgIF9f
b3N0cmVhbV90eXBlJgogICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOwog
ICAgfTsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBjbGFzcyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewoKICAg
ICAgYm9vbCBfTV9vazsKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9NX29z
OwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5KGJhc2ljX29zdHJlYW08
X0NoYXJULF9UcmFpdHM+JiBfX29zKTsKCiAgICAgIH5zZW50cnkoKQogICAgICB7CgogICAgICAg
IGlmIChfTV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVuaXRidWYgJiYgIXVuY2F1Z2h0X2V4Y2Vw
dGlvbigpKQogICAgICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX29zLnJkYnVmKCkgJiYgX01f
b3MucmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICAgIF9NX29zLnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgfQogICAgICB9CgogICAgICBvcGVyYXRvciBi
b29sKCkKICAgICAgeyByZXR1cm4gX01fb2s7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291
dCwgX0NoYXJUIF9fYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7IHJl
dHVybiAoX19vdXQgPDwgX19vdXQud2lkZW4oX19jKSk7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo
YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKTsKCgogIHRlbXBs
YXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAg
b3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgc2lnbmVkIGNo
YXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9
CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp
dHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwg
dW5zaWduZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hh
cj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcyk7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiAmCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFz
cyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9y
PDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7
CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJh
aXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQs
IGNvbnN0IHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4K
ICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19v
c3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgdW5zaWduZWQgY2hhciogX19zKQog
ICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykp
OyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRsKGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIGZsdXNoKF9fb3MucHV0KF9fb3Mud2lk
ZW4oJ1xuJykpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRzKGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3MucHV0KF9DaGFy
VCgpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBmbHVzaChiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBfX29zLmZsdXNoKCk7IH0KCn0K
CgoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvb3N0cmVhbS50Y2MiIDEg
MwojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL29zdHJlYW0udGNjIiAzCgoj
IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2xvY2FsZSIgMSAzCiMgNDMgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4yL2xvY2FsZSIgMwoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCgojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4yL2NlcnJubyIgMSAzCiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y
L2NlcnJubyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMzIgIi91c3IvaW5j
bHVkZS9lcnJuby5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vy
cm5vLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2xpbnV4L2Vycm5vLmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8u
aCIgMSAzCiMgNSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNyL2lu
Y2x1ZGUvYml0cy9lcnJuby5oIiAyIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIg
MwpleHRlcm4gaW50IGVycm5vOwoKCmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRl
L2Vycm5vLmgiIDIgMwojIDU1ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gY2hhciAq
cHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUsICpwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsK
CgoKfQojIDY5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwp0eXBlZGVmIGludCBlcnJvcl90Owoj
IDQ5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jZXJybm8iIDIgMwojIDM5ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0ZGxpYiIgMSAzCiMgNDggIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4yL2NzdGRsaWIiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAx
IDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy93YWl0ZmxhZ3MuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg
MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2NSAiL3Vzci9p
bmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAzCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0
dXM7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6
NzsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQg
aW50IF9fd19yZXRjb2RlOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAg
fSBfX3dhaXRfdGVybWluYXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVk
IGludCBfX3dfc3RvcHZhbDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4Owog
ICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9
OwojIDQ0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDk0ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAg
fSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9u
ZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzdHJ1Y3QK
ICB7CiAgICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGxvbmcgaW50IHJlbTsKICB9IGxs
ZGl2X3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0
eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9m
IChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgpleHRlcm4gaW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNo
YXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCl9fZXh0
ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRy
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gZG91
YmxlIHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGZsb2F0IHN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhy
b3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0
b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAg
ICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9x
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsK
Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAg
dGhyb3cgKCk7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9s
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgp
OwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQog
ICAgIHRocm93ICgpOwojIDIxNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBsb25n
IGludCBfX3N0cnRvbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh
c2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAo
KTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRl
cm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJv
dyAoKTsKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBfX3N0
cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRo
cm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9j
YWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVy
bmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAg
ICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVy
biBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJu
YWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoK
CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93
ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50
ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3Jv
dXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcg
aW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CgoKCgoK
CgpleHRlcm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4g
X19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGlu
ZSBsb25nIGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICBy
ZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0K
ZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBp
bnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRy
LCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBmbG9hdApzdHJ0b2Yg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9mX2ludGVybmFsIChfX25wdHIsIF9fZW5k
cHRyLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUKc3RydG9sZCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93
ICgpCnsKICByZXR1cm4gX19zdHJ0b2xkX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsK
fQoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsCiAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGxfaW50
ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRl
cm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg
aW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25w
dHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5s
aW5lIGxvbmcgbG9uZyBpbnQKc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93
ICgpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jh
c2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQKc3RydG91bGwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICBy
ZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsK
fQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRo
cm93ICgpCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSBfX251bGwpOwp9CmV4
dGVybiBfX2lubGluZSBpbnQKYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsK
ICByZXR1cm4gKGludCkgc3RydG9sIChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQpl
eHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93
ICgpCnsKICByZXR1cm4gc3RydG9sIChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQoK
Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29u
c3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNo
YXIgKiopIF9fbnVsbCwgMTApOwp9CiMgMzg0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0
ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50
IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgp0eXBlZGVmIF9fdV9jaGFyIHVf
Y2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0
eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYg
X191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKCgp0eXBlZGVm
IF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0eXBlZGVm
IF9faW5vNjRfdCBpbm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRl
ZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVm
IF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVk
ZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKIyAxMDQg
Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlw
ZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0
eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKIyAx
MzYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fdXNlY29uZHNfdCB1c2Vj
b25kc190OwoKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoKIyAxICIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMKIyAxNDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9y
dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxOTAgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJ
X18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJ
X18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJ
X18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJ
X18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJp
YnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQz
Ml90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVk
IGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBl
ZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7
CiMgMjE1ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxl
Y3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMzUgIi91
c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwojIDQ2ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVj
dC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA2NyAiL3Vzci9pbmNs
dWRlL2JpdHMvdGltZS5oIiAzCnN0cnVjdCB0aW1ldmFsCiAgewogICAgX190aW1lX3QgdHZfc2Vj
OwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07CiMgNDcgIi91c3IvaW5jbHVkZS9zeXMv
c2VsZWN0LmgiIDIgMwojIDU1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCnR5cGVkZWYg
bG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2Zk
X21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9
IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKIyA5NSAiL3Vzci9pbmNs
dWRlL3N5cy9zZWxlY3QuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgoKZXh0ZXJuIGludCBzZWxlY3Qg
KGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAg
ICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgIGZk
X3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0
aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBw
c2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAg
ICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAg
ICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0LAogICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zaWdtYXNrKSB0aHJvdyAo
KTsKCgp9CiMgMjE2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9p
bmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMgMjE5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDIgMwoKCgoKdHlwZWRlZiBfX2Jsa3NpemVfdCBibGtzaXplX3Q7CgoKCgoKCnR5cGVkZWYg
X19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsK
CgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTcgIi91c3IvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9f
ZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNu
dDY0X3Q7CgoKfQojIDM5MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJu
IGxvbmcgaW50IHJhbmRvbSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAo
dW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0
ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc2V0
c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9k
YXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90
ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFu
ZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChz
dHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAg
IGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcmFu
ZG9tX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hh
ciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
X19zdGF0ZWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpf
X3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAq
X19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5k
b21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCByYW5k
ICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVk
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0
aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4
dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93
ICgpOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxv
bmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsK
CgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGlu
dCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVu
c2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNd
KSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFy
YW1bN10pIHRocm93ICgpOwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25l
ZCBzaG9ydCBpbnQgX194WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAg
ICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsK
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4
X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAg
ICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4g
aW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBf
X2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVz
dWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBf
X3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19y
ZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3Ry
aWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRy
YW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxv
bmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBqcmFuZDQ4
X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X2J1ZmZlcikKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNo
b3J0IGludCBfX3NlZWQxNnZbM10sCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4
X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25l
ZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFu
ZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKIyA1MjcgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMwpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1l
bWIsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9j
X18pKTsKCgoKCgpleHRlcm4gdm9pZCAqcmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3Np
emUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBm
cmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICpf
X3B0cikgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMKIyAyNSAi
L3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVk
ZS9hbGxvY2EuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgpleHRlcm4gdm9pZCAqYWxsb2NhIChz
aXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTQ3ICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgcG9zaXhfbWVtYWxp
Z24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXplKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB2b2lk
IGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoK
CmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpf
X2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIGV4aXQg
KGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoK
CgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFy
ICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2Nv
bnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKGNoYXIg
Kl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoX19jb25zdCBjaGFy
ICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAgICB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIHRocm93ICgpOwojIDYyMyAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxh
dGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRl
KSB0aHJvdyAoKTsKIyA2NDAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IG1r
c3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjUwICIvdXNyL2luY2x1ZGUv
c3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3Qg
Y2hhciAqX19uYW1lKSB0aHJvdyAoKTsKIyA2NzIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpl
eHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJvdyAo
KTsKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAoX19jb25zdCB2b2lkICosIF9f
Y29uc3Qgdm9pZCAqKTsKCgp0eXBlZGVmIF9fY29tcGFyX2ZuX3QgY29tcGFyaXNvbl9mbl90OwoK
CgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZv
aWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3Qg
X19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZv
aWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAg
ICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxh
YnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
X19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBsbGFicyAobG9uZyBsb25nIGludCBf
X3gpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRl
cm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9f
bnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gbGxkaXZfdCBsbGRpdiAobG9uZyBsb25n
IGludCBfX251bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxv
bmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwojIDcyOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3Vi
bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAg
ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmlj
dCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhy
b3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp
dCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRv
dWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jl
c3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4g
Y2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAg
ICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2ln
bikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50
IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGVjdnRfciAo
ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAg
ICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0
IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmlj
dCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hh
ciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhy
b3cgKCk7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpf
X3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9f
YnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91
YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz
dHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAg
ICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRo
cm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
cHdjcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
cywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpf
X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy
biBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsKIyA4MDgg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKl9f
cmVzdHJpY3QgX19vcHRpb25wLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCAq
X19yZXN0cmljdCBfX3Rva2VucywKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fdmFsdWVwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRrZXkgKF9fY29uc3Qg
Y2hhciAqX19rZXkpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwb3NpeF9vcGVucHQgKGlu
dCBfX29mbGFnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50IF9fZmQp
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
aW50IHB0c25hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
aW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIHRocm93ICgp
OwoKCgoKCn0KIyA1MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0ZGxpYiIgMiAzCiMg
ODQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NzdGRsaWIiIDMKbmFtZXNwYWNlIHN0ZAp7
CiAgdXNpbmcgOjpkaXZfdDsKICB1c2luZyA6OmxkaXZfdDsKCiAgdXNpbmcgOjphYm9ydDsKICB1
c2luZyA6OmFiczsKICB1c2luZyA6OmF0ZXhpdDsKICB1c2luZyA6OmF0b2Y7CiAgdXNpbmcgOjph
dG9pOwogIHVzaW5nIDo6YXRvbDsKICB1c2luZyA6OmJzZWFyY2g7CiAgdXNpbmcgOjpjYWxsb2M7
CiAgdXNpbmcgOjpkaXY7CiAgdXNpbmcgOjpleGl0OwogIHVzaW5nIDo6ZnJlZTsKICB1c2luZyA6
OmdldGVudjsKICB1c2luZyA6OmxhYnM7CiAgdXNpbmcgOjpsZGl2OwogIHVzaW5nIDo6bWFsbG9j
OwogIHVzaW5nIDo6bWJsZW47CiAgdXNpbmcgOjptYnN0b3djczsKICB1c2luZyA6Om1idG93YzsK
ICB1c2luZyA6OnFzb3J0OwogIHVzaW5nIDo6cmFuZDsKICB1c2luZyA6OnJlYWxsb2M7CiAgdXNp
bmcgOjpzcmFuZDsKICB1c2luZyA6OnN0cnRvZDsKICB1c2luZyA6OnN0cnRvbDsKICB1c2luZyA6
OnN0cnRvdWw7CiAgdXNpbmcgOjpzeXN0ZW07CiAgdXNpbmcgOjp3Y3N0b21iczsKICB1c2luZyA6
OndjdG9tYjsKCiAgaW5saW5lIGxvbmcKICBhYnMobG9uZyBfX2kpIHsgcmV0dXJuIGxhYnMoX19p
KTsgfQoKICBpbmxpbmUgbGRpdl90CiAgZGl2KGxvbmcgX19pLCBsb25nIF9faikgeyByZXR1cm4g
bGRpdihfX2ksIF9faik7IH0KfQojIDEzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0
ZGxpYiIgMwpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6OmxsZGl2X3Q7CiAgdXNpbmcg
OjpfRXhpdDsKCiAgaW5saW5lIGxvbmcgbG9uZwogIGFicyhsb25nIGxvbmcgX194KSB7IHJldHVy
biBfX3ggPj0gMCA/IF9feCA6IC1fX3g7IH0KCiAgaW5saW5lIGxvbmcgbG9uZwogIGxsYWJzKGxv
bmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUg
bGxkaXZfdAogIGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBf
X3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19x
OyB9CgogIGlubGluZSBsbGRpdl90CiAgbGxkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9f
ZCkKICB7IGxsZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAl
IF9fZDsgcmV0dXJuIF9fcTsgfQoKICB1c2luZyA6OmF0b2xsOwogIHVzaW5nIDo6c3RydG9mOwog
IHVzaW5nIDo6c3RydG9sbDsKICB1c2luZyA6OnN0cnRvdWxsOwogIHVzaW5nIDo6c3RydG9sZDsK
fQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGRpdl90OwogIHVzaW5nIF9f
Z251X2N4eDo6X0V4aXQ7CiAgdXNpbmcgX19nbnVfY3h4OjphYnM7CiAgdXNpbmcgX19nbnVfY3h4
OjpsbGFiczsKICB1c2luZyBfX2dudV9jeHg6OmRpdjsKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2
OwogIHVzaW5nIF9fZ251X2N4eDo6YXRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2Y7CiAg
dXNpbmcgX19nbnVfY3h4OjpzdHJ0b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG91bGw7CiAg
dXNpbmcgX19nbnVfY3h4OjpzdHJ0b2xkOwp9CiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4yL2NtYXRoIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY21hdGgi
IDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL21h
dGguaCIgMwpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5o
IiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvbmFuLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL21h
dGhkZWYuaCIgMwp0eXBlZGVmIGxvbmcgZG91YmxlIGZsb2F0X3Q7Cgp0eXBlZGVmIGxvbmcgZG91
YmxlIGRvdWJsZV90OwojIDQxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA2MyAiL3Vzci9p
bmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMK
IyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBhY29z
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3MgKGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2FzaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBh
dGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4gKGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUg
c2luIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbiAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBkb3VibGUgX190YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBz
aW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29zeCkgdGhyb3cg
KCk7IGV4dGVybiB2b2lkIF9fc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91
YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGNvc2ggKGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
CgpleHRlcm4gZG91YmxlIHNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHRhbmggKGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuaCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKCmV4dGVybiBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fYWNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2lu
aCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2luaCAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX2F0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
ZG91YmxlIGV4cCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAgKGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGV4cDEwIChkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4
dGVybiBkb3VibGUgcG93MTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
cG93MTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGZyZXhwIChkb3Vi
bGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZnJleHAg
KGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBs
ZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4g
ZG91YmxlIGxvZyAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cgKGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMTAgKGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4
dGVybiBkb3VibGUgbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgp
OwoKCgpleHRlcm4gZG91YmxlIGV4cG0xIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2V4cG0xIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzFw
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwIChkb3VibGUgX194
KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91
YmxlIGV4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwMiAoZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cyIChkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19wb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVy
biBkb3VibGUgc3FydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zcXJ0
IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9f
eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19oeXBvdCAoZG91YmxlIF9f
eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNicnQgKGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY2JydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBkb3VibGUgY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fY2VpbCAoZG91YmxlIF9feCkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZmFicyAo
ZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g
ZG91YmxlIF9fZmFicyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCmV4dGVybiBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBm
bW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Zt
b2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lz
aW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCmV4dGVybiBpbnQgX19maW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1
ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmlu
aXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCmV4dGVybiBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19kcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGRvdWJsZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19zaWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
ZG91YmxlIGNvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9f
eCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK
ZXh0ZXJuIGRvdWJsZSBuYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29uc3QgY2hhciAq
X190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g
aW50IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2owIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91
YmxlIGoxIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgdGhy
b3cgKCk7CmV4dGVybiBkb3VibGUgam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2puIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJs
ZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195MCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJu
IGRvdWJsZSB5MSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUp
IHRocm93ICgpOwpleHRlcm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX195biAoaW50LCBkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUg
ZXJmIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmIChkb3VibGUpIHRocm93
ICgpOwpleHRlcm4gZG91YmxlIGVyZmMgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg
X19lcmZjIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGRvdWJsZSB0Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190Z2Ft
bWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGdhbW1hIChkb3VibGUpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBkb3VibGUgbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19yaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG5l
eHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3Vi
bGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91
YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAoZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCmV4dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91Ymxl
IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGlu
dCBfX24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQg
X19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBpbnQgX19pbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91
YmxlIHNjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19zY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpl
eHRlcm4gZG91YmxlIG5lYXJieWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19uZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHJv
dW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JvdW5kIChkb3VibGUg
X194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRv
dWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVy
biBkb3VibGUgcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50
ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50IChkb3VibGUgX194KSB0aHJvdyAo
KTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRl
cm4gbG9uZyBpbnQgbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50
IF9fbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxy
b3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3Vu
ZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9f
eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mZGltIChkb3VibGUgX194
LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtYXggKGRvdWJsZSBfX3gs
IGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1heCAoZG91YmxlIF9feCwg
ZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBk
b3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9f
dmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy
biBpbnQgX19zaWduYml0IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3Vi
bGUgX195LCBkb3VibGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYSAoZG91Ymxl
IF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7CiMgNjQgIi91c3IvaW5jbHVk
ZS9tYXRoLmgiIDIgMwojIDgyICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2Fs
bHMuaCIgMwpleHRlcm4gZmxvYXQgYWNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX2Fjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChm
bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbjJmIChm
bG9hdCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW4yZiAoZmxv
YXQgX195LCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBf
X3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoK
ZXh0ZXJuIGZsb2F0IHNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Np
bmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIHZvaWQgc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4
KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3Np
bngsIGZsb2F0ICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgY29zaGYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9hdCBfX3gpIHRocm93
ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19zaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5oZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7CgoKCmV4dGVybiBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX2Fjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luaGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2F0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQg
ZXhwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGV4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fZXhwMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0
IHBvdzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93MTBmIChmbG9h
dCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZnJleHBmIChmbG9hdCBfX3gsIGludCAq
X19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZyZXhwZiAoZmxvYXQgX194LCBp
bnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsZGV4cGYgKGZsb2F0IF9f
eCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZGV4cGYgKGZsb2F0
IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2dmIChmbG9h
dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2dmIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKCmV4dGVybiBmbG9hdCBsb2cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX2xvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbW9kZmYgKGZs
b2F0IF9feCwgZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX21vZGZmIChm
bG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZXhwbTFm
IChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBtMWYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fbG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBs
b2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX2V4cDJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9h
dCBsb2cyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMmYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBwb3dmIChmbG9hdCBfX3gsIGZsb2F0
IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Bvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195
KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4
dGVybiBmbG9hdCBfX3NxcnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQg
aHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2h5
cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGNi
cnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY2VpbGYgKGZsb2F0
IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9h
dCBmYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
IGV4dGVybiBmbG9hdCBfX2ZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fZmxvb3JmIChmbG9h
dCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxv
YXQgZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
Zm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19p
c2luZmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgpleHRlcm4gaW50IF9fZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZmYgKGZsb2F0IF9fdmFs
dWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZp
bml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgpleHRlcm4gZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGZsb2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fc2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0
IGNvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0
IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGZs
b2F0IG5hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNu
YW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCmV4dGVybiBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19qMGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGoxZiAoZmxv
YXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJu
IGZsb2F0IGpuZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2puZiAoaW50
LCBmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9feTBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MWYgKGZsb2F0
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBm
bG9hdCB5bmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195bmYgKGludCwg
ZmxvYXQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBlcmZmIChmbG9hdCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX2VyZmYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGVyZmNm
IChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2VyZmNmIChmbG9hdCkgdGhyb3cgKCk7
CmV4dGVybiBmbG9hdCBsZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xn
YW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRnYW1tYWYgKGZsb2F0KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGZsb2F0IGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19nYW1tYWYg
KGZsb2F0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxnYW1tYWZfciAoZmxvYXQsIGlu
dCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWZfciAoZmxvYXQs
IGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCByaW50ZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHRhZnRl
cmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgpleHRlcm4gZmxvYXQgbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBf
X25leHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgcmVtYWluZGVyZiAoZmxvYXQg
X194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9h
dCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzY2FsYmYgKGZsb2F0
IF9feCwgZmxvYXQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJmIChmbG9hdCBf
X3gsIGZsb2F0IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJuZiAoZmxvYXQg
X194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJuZiAoZmxvYXQgX194
LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYmYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gZmxvYXQgc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX25lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBy
b3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JvdW5kZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRydW5jZiAoZmxvYXQgX194KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX3RydW5jZiAoZmxv
YXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g
ZmxvYXQgcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19yZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1
bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0
ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9u
ZyBpbnQgbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJv
dW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBmZGltZiAoZmxvYXQgX194LCBmbG9h
dCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mZGltZiAoZmxvYXQgX194LCBmbG9hdCBf
X3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRo
cm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19mbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpCiAg
ICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0ZiAo
ZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCmV4dGVybiBmbG9hdCBmbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0
IF9feikgdGhyb3cgKCk7CiMgODMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDk5ICIvdXNy
L2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEg
MwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBkb3Vi
bGUgYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2Fjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFz
aW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2lu
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFubCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbjJsIChsb25n
IGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CmV4dGVybiBsb25nIGRvdWJsZSBjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19jb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBk
b3VibGUgdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29z
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19j
b3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gbG9uZyBkb3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19zaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25n
IGRvdWJsZSB0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRv
dWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2Fjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJs
ZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2FzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBh
dGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0
YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUg
ZXhwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhw
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDEw
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMTBs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvdzEwbCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChs
b25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX2ZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgp
OwoKCmV4dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhw
b25lbnQpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91Ymxl
IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2ds
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX21vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93
ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2V4cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4
dGVybiBsb25nIGRvdWJsZSBsb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBsb25nIGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2h5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGNicnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19jYnJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2VpbGwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy
biBsb25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9u
ZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBk
b3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmwgKGxvbmcgZG91YmxlIF9fdmFs
dWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9f
ZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWwg
KGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi
bGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKGxvbmcgZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNp
Z25pZmljYW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fc2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxv
bmcgZG91YmxlIGNvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
Y29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5hbmwgKF9f
Y29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX25hbmwgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW5sIChs
b25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCmV4dGVybiBpbnQgaXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGowbCAobG9uZyBk
b3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qMGwgKGxvbmcgZG91YmxlKSB0
aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGoxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19qMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxv
bmcgZG91YmxlIGpubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX2pubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJs
ZSB5MGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feTBsIChs
b25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MWwgKGxvbmcgZG91Ymxl
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feTFsIChsb25nIGRvdWJsZSkgdGhyb3cg
KCk7CmV4dGVybiBsb25nIGRvdWJsZSB5bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX195bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBsb25nIGRvdWJsZSBlcmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX2VyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91
YmxlIGVyZmNsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Vy
ZmNsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsIChs
b25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWwgKGxvbmcg
ZG91YmxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRnYW1tYWwgKGxvbmcgZG91
YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGdhbW1hbCAobG9uZyBkb3VibGUp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAobG9uZyBkb3VibGUpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWxfciAobG9uZyBkb3VibGUsIGludCAq
X19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWxfciAobG9u
ZyBkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRv
dWJsZSByaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fcmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IG5leHRhZnRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHRhZnRl
cmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gbG9uZyBkb3VibGUgbmV4dHRvd2FyZGwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHR0b3dhcmRsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1haW5kZXJsIChs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25n
IGRvdWJsZSBzY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlIF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJubCAobG9uZyBk
b3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJu
bCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9n
YmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYmwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJsbmwgKGxv
bmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIG5lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX25lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRydW5jbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RydW5j
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1x
dW9sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0
ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmZGltbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mZGltbCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWF4
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19mbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93
ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWlubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWlubCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFz
c2lmeWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0bCAobG9uZyBkb3VibGUgX192YWx1
ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBs
b25nIGRvdWJsZSBmbWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBk
b3VibGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1hbCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCk7CiMgMTAw
ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyAxMTMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMK
ZXh0ZXJuIGludCBzaWduZ2FtOwojIDE1NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwplbnVtCiAg
ewogICAgRlBfTkFOLAoKICAgIEZQX0lORklOSVRFLAoKICAgIEZQX1pFUk8sCgogICAgRlBfU1VC
Tk9STUFMLAoKICAgIEZQX05PUk1BTAoKICB9OwojIDI0MCAiL3Vzci9pbmNsdWRlL21hdGguaCIg
Mwp0eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5fLAogIF9Q
T1NJWF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJT
SU9OX1RZUEUgX0xJQl9WRVJTSU9OOwojIDI2MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpzdHJ1
Y3QgX19leGNlcHRpb24KCgoKICB7CiAgICBpbnQgdHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBk
b3VibGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwogICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4
dGVybiBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhjZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMg
MzUwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlu
bGluZS5oIiAxIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lu
bGluZSBpbnQKX19zaWduYml0ZiAoZmxvYXQgX194KSB0aHJvdyAoKQp7CiAgX19leHRlbnNpb25f
XyB1bmlvbiB7IGZsb2F0IF9fZjsgaW50IF9faTsgfSBfX3UgPSB7IF9fZjogX194IH07CiAgcmV0
dXJuIF9fdS5fX2kgPCAwOwp9Cl9faW5saW5lIGludApfX3NpZ25iaXQgKGRvdWJsZSBfX3gpIHRo
cm93ICgpCnsKICBfX2V4dGVuc2lvbl9fIHVuaW9uIHsgZG91YmxlIF9fZDsgaW50IF9faVsyXTsg
fSBfX3UgPSB7IF9fZDogX194IH07CiAgcmV0dXJuIF9fdS5fX2lbMV0gPCAwOwp9Cl9faW5saW5l
IGludApfX3NpZ25iaXRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpCnsKICBfX2V4dGVuc2lv
bl9fIHVuaW9uIHsgbG9uZyBkb3VibGUgX19sOyBpbnQgX19pWzNdOyB9IF9fdSA9IHsgX19sOiBf
X3ggfTsKICByZXR1cm4gKF9fdS5fX2lbMl0gJiAweDgwMDApICE9IDA7Cn0KIyAyOTEgIi91c3Iv
aW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgX19zZ24gKGRvdWJs
ZSkgdGhyb3cgKCk7IF9faW5saW5lIGRvdWJsZSBfX3NnbiAoZG91YmxlIF9feCkgdGhyb3cgKCkg
eyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfSBf
X2lubGluZSBmbG9hdCBfX3NnbmYgKGZsb2F0KSB0aHJvdyAoKTsgX19pbmxpbmUgZmxvYXQgX19z
Z25mIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194
ID4gMC4wID8gMS4wIDogLTEuMCk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ25sIChsb25n
IGRvdWJsZSkgdGhyb3cgKCk7IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2dubCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/
IDEuMCA6IC0xLjApOyB9CiMgNDI2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMK
X19pbmxpbmUgZG91YmxlIGF0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KSB0aHJvdyAoKSB7
IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRh
biIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJl
dHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBf
X3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xh
dGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkg
OiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbjJs
IChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBs
b25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAo
X192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1
ZTsgfQpfX2lubGluZSBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19h
c20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAi
dSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KCgpfX2lubGluZSBkb3VibGUg
Zm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRv
dWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJ
JSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gp
LCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxv
YXQgZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3Rz
dwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f
eCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBs
b25nIGRvdWJsZSBmbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93
ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgi
MToJZnByZW1cblx0IiAiZm5zdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQi
IChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImF4IiwgImNjIik7IHJldHVybiBf
X3ZhbHVlOyB9CiMgNDQxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxp
bmUgZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9f
cmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAi
MCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgZmxvYXQgc3FydGYgKGZsb2F0
IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGls
ZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVz
dWx0OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIHNxcnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAo
ImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsg
fQpfX2lubGluZSBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZz
cXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfQoK
Cl9faW5saW5lIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX2J1
aWx0aW5fZmFicyAoX194KTsgfQpfX2lubGluZSBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSB0aHJv
dyAoKSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YgKF9feCk7IH0KX19pbmxpbmUgbG9uZyBkb3Vi
bGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2Zh
YnNsIChfX3gpOyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsIChfX3gpOyB9CiMgNDY3ICIvdXNy
L2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIGF0YW4gKGRvdWJs
ZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0
aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0
KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBmbG9hdCBhdGFuZiAoZmxvYXQgX194
KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18g
KCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7
IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBf
X3ZvbGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gp
IDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfQoKX19pbmxpbmUgbG9uZyBkb3VibGUgX19z
Z24xbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbjFs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgX19leHRlbnNpb25fXyB1bmlvbiB7IGxvbmcg
ZG91YmxlIF9feGxkOyB1bnNpZ25lZCBpbnQgX194aVszXTsgfSBfX24gPSB7IF9feGxkOiBfX3gg
fTsgX19uLl9feGlbMl0gPSAoX19uLl9feGlbMl0gJiAweDgwMDApIHwgMHgzZmZmOyBfX24uX194
aVsxXSA9IDB4ODAwMDAwMDA7IF9fbi5fX3hpWzBdID0gMDsgcmV0dXJuIF9fbi5fX3hsZDsgfQoj
IDQ5MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBm
bG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVl
OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVk
IHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIg
KF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xh
dGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJm
cm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAo
ImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZs
b2F0IGZsb29yZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f
dmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5z
aWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDog
Ij1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBf
X3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGls
ZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0
aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxp
bmUgbG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0
ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19j
dzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGls
ZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikg
fCAweDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkp
OyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194
KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4g
X192YWx1ZTsgfQojIDUwNCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5s
aW5lIGRvdWJsZSBjZWlsIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRp
bGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cg
JTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBf
X2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192
b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBf
X3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0g
X19pbmxpbmUgZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25n
IGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3Zv
bGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5z
dGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgw
MDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNt
IF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19h
c20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVl
OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9y
dCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20g
X192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAm
IDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAo
X19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6
ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykp
OyByZXR1cm4gX192YWx1ZTsgfQojIDUyMiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5o
IiAzCl9faW5saW5lIGRvdWJsZQpsZGV4cCAoZG91YmxlIF9feCwgaW50IF9feSkgdGhyb3cgKCkK
ewogIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZz
Y2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgobG9uZyBkb3VibGUpIF9f
eSkpOyByZXR1cm4gX192YWx1ZTsKfQojIDU0MCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGlu
ZS5oIiAzCl9faW5saW5lIGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdp
c3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUg
KiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVs
c2UgX19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIg
OiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsg
fSBfX2lubGluZSBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBs
b25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAxLjQx
NDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVsc2UgX19h
c20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIgOiAiPXQi
IChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lu
bGluZSBsb25nIGRvdWJsZSBsb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdp
c3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUg
KiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVs
c2UgX19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIg
OiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsg
fQojIDU1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJs
ZSBhc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kg
PSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9f
eSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9IF9faW5saW5l
IGZsb2F0IGFzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0
bCAoX195ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0gX19p
bmxpbmUgbG9uZyBkb3VibGUgYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVn
aXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9f
eSAqIF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kgKyAxLjApICsgMS4wKSArIF9feSkgKiBfX3Nn
bjFsIChfX3gpKTsgfQoKCgoKX19pbmxpbmUgZG91YmxlIGFjb3NoIChkb3VibGUgX194KSB0aHJv
dyAoKSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAo
X194ICsgMS4wKSk7IH0gX19pbmxpbmUgZmxvYXQgYWNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgp
IHsgcmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3gg
KyAxLjApKTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCkgeyByZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3Fy
dGwgKF9feCArIDEuMCkpOyB9CgoKX19pbmxpbmUgZG91YmxlIGF0YW5oIChkb3VibGUgX194KSB0
aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVy
biAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChf
X3gpOyB9IF9faW5saW5lIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lz
dGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBs
ICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9IF9faW5saW5l
IGxvbmcgZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVy
IGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgt
KF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9CgoKCgpfX2lubGlu
ZSBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmV0dXJu
IF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0gX19pbmxpbmUgZmxvYXQgaHlwb3Rm
IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgeyByZXR1cm4gX19zcXJ0bCAoX194ICog
X194ICsgX195ICogX195KTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJldHVybiBfX3NxcnRsIChfX3gg
KiBfX3ggKyBfX3kgKiBfX3kpOyB9CgpfX2lubGluZSBkb3VibGUgbG9nYiAoZG91YmxlIF9feCkg
dGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRv
dWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9f
anVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19p
bmxpbmUgZmxvYXQgbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRv
dWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRp
bGVfXyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAi
IChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nYmwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBy
ZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rc
blx0IiA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJu
IF9fdmFsdWU7IH0KIyA1ODQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lu
bGluZSBmbG9hdApsZGV4cGYgKGZsb2F0IF9feCwgaW50IF9feSkgdGhyb3cgKCkKewogIHJlZ2lz
dGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAi
PXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgobG9uZyBkb3VibGUpIF9feSkpOyByZXR1
cm4gX192YWx1ZTsKfQoKX19pbmxpbmUgbG9uZyBkb3VibGUKbGRleHBsIChsb25nIGRvdWJsZSBf
X3gsIGludCBfX3kpIHRocm93ICgpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBf
X2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCks
ICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KIyA2MDggIi91c3Iv
aW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBsb25nIGludApscmludGYgKGZs
b2F0IF9feCkgdGhyb3cgKCkKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xh
dGlsZV9fICgiZmlzdHBsICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0
Iik7IHJldHVybiBfX2xyaW50cmVzOwp9Cl9faW5saW5lIGxvbmcgaW50CmxyaW50IChkb3VibGUg
X194KSB0aHJvdyAoKQp7CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxl
X18gKCJmaXN0cGwgJTAiIDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsg
cmV0dXJuIF9fbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBpbnQKbHJpbnRsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRp
bGVfXyAoImZpc3RwbCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIp
OyByZXR1cm4gX19scmludHJlczsKfQojIDYzMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGlu
ZS5oIiAzCl9faW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAo
KQp7CiAgbG9uZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJm
aXN0cGxsICUwIiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1
cm4gX19sbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnQgKGRvdWJsZSBf
X3gpIHRocm93ICgpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9fdm9s
YXRpbGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChfX3gpIDog
InN0Iik7IHJldHVybiBfX2xscmludHJlczsKfQpfX2lubGluZSBsb25nIGxvbmcgaW50Cmxscmlu
dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkKewogIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRy
ZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChfX2xscmludHJl
cykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9CgoKCgoKCgpfX2lu
bGluZSBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgeyByZWdp
c3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3Zv
bGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpw
CTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAi
dSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgZHJlbWYg
KGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVl
OyByZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVt
MVxuXHQiICJmc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1
ZSksICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyBy
ZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7
IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0x
XG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVl
KSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJl
dHVybiBfX3ZhbHVlOyB9CiMgNjY2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMK
X19pbmxpbmUgaW50Cl9fZmluaXRlIChkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgcmV0dXJuIChf
X2V4dGVuc2lvbl9fCiAgICAgICAgICAoKCgoKHVuaW9uIHsgZG91YmxlIF9fZDsgaW50IF9faVsy
XTsgfSkge19fZDogX194fSkuX19pWzFdCiAgICAgICAgICAgICB8IDB4ODAwZmZmZmZ1KSArIDEp
ID4+IDMxKSk7Cn0KIyAzNTEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDQxMSAiL3Vzci9p
bmNsdWRlL21hdGguaCIgMwp9CiMgNTIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NtYXRo
IiAyIDMKIyA3OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMKbmFtZXNwYWNl
IHN0ZAp7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2NtYXRoX3Bvd2VyKF9UcCwg
dW5zaWduZWQgaW50KTsKCiAgaW5saW5lIGRvdWJsZQogIGFicyhkb3VibGUgX194KQogIHsgcmV0
dXJuIF9fYnVpbHRpbl9mYWJzKF9feCk7IH0KCiAgaW5saW5lIGZsb2F0CiAgYWJzKGZsb2F0IF9f
eCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3Vi
bGUKICBhYnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gp
OyB9CgoKICBpbmxpbmUgZmxvYXQKICBhY29zKGZsb2F0IF9feCkgeyByZXR1cm4gOjphY29zZihf
X3gpOyB9CgoKCgoKICB1c2luZyA6OmFjb3M7CgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhY29z
KGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphY29zbChfX3gpOyB9CgoKCgoKICB1c2luZyA6
OmFzaW47CgoKICBpbmxpbmUgZmxvYXQKICBhc2luKGZsb2F0IF9feCkgeyByZXR1cm4gOjphc2lu
ZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXNpbihsb25nIGRvdWJsZSBf
X3gpIHsgcmV0dXJuIDo6YXNpbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjphdGFuOwoKCiAgaW5s
aW5lIGZsb2F0CiAgYXRhbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXRhbmYoX194KTsgfQoKCgoK
CgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4obG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6
OmF0YW5sKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YXRhbjI7CgoKICBpbmxpbmUgZmxvYXQKICBh
dGFuMihmbG9hdCBfX3ksIGZsb2F0IF9feCkgeyByZXR1cm4gOjphdGFuMmYoX195LCBfX3gpOyB9
CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4yKGxvbmcgZG91YmxlIF9feSwgbG9u
ZyBkb3VibGUgX194KSB7IHJldHVybiA6OmF0YW4ybChfX3ksIF9feCk7IH0KCgoKCgoKICB1c2lu
ZyA6OmNlaWw7CgoKICBpbmxpbmUgZmxvYXQKICBjZWlsKGZsb2F0IF9feCkgeyByZXR1cm4gOjpj
ZWlsZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY2VpbChsb25nIGRvdWJs
ZSBfX3gpIHsgcmV0dXJuIDo6Y2VpbGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpjb3M7CgogIGlu
bGluZSBmbG9hdAogIGNvcyhmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2Nvc2YoX194
KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb3MobG9uZyBkb3VibGUgX194KQogIHsgcmV0
dXJuIF9fYnVpbHRpbl9jb3NsKF9feCk7IH0KCiAgdXNpbmcgOjpjb3NoOwoKCiAgaW5saW5lIGZs
b2F0CiAgY29zaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Y29zaGYoX194KTsgfQoKCgoKCgogIGlu
bGluZSBsb25nIGRvdWJsZQogIGNvc2gobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmNvc2hs
KF9feCk7IH0KCgoKCgogIHVzaW5nIDo6ZXhwOwoKCiAgaW5saW5lIGZsb2F0CiAgZXhwKGZsb2F0
IF9feCkgeyByZXR1cm4gOjpleHBmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUK
ICBleHAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmV4cGwoX194KTsgfQoKCgoKCiAgdXNp
bmcgOjpmYWJzOwoKICBpbmxpbmUgZmxvYXQKICBmYWJzKGZsb2F0IF9feCkKICB7IHJldHVybiBf
X2J1aWx0aW5fZmFic2YoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmYWJzKGxvbmcg
ZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2woX194KTsgfQoKICB1c2luZyA6
OmZsb29yOwoKCiAgaW5saW5lIGZsb2F0CiAgZmxvb3IoZmxvYXQgX194KSB7IHJldHVybiA6OmZs
b29yZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZmxvb3IobG9uZyBkb3Vi
bGUgX194KSB7IHJldHVybiA6OmZsb29ybChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmZtb2Q7CgoK
ICBpbmxpbmUgZmxvYXQKICBmbW9kKGZsb2F0IF9feCwgZmxvYXQgX195KSB7IHJldHVybiA6OmZt
b2RmKF9feCwgX195KTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmbW9kKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJldHVybiA6OmZtb2RsKF9feCwgX195KTsg
fQoKCgoKCgogIHVzaW5nIDo6ZnJleHA7CgoKICBpbmxpbmUgZmxvYXQKICBmcmV4cChmbG9hdCBf
X3gsIGludCogX19leHApIHsgcmV0dXJuIDo6ZnJleHBmKF9feCwgX19leHApOyB9CgoKCgoKCiAg
aW5saW5lIGxvbmcgZG91YmxlCiAgZnJleHAobG9uZyBkb3VibGUgX194LCBpbnQqIF9fZXhwKSB7
IHJldHVybiA6OmZyZXhwbChfX3gsIF9fZXhwKTsgfQoKCgoKCgogIHVzaW5nIDo6bGRleHA7CgoK
ICBpbmxpbmUgZmxvYXQKICBsZGV4cChmbG9hdCBfX3gsIGludCBfX2V4cCkgeyByZXR1cm4gOjps
ZGV4cGYoX194LCBfX2V4cCk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbGRleHAo
bG9uZyBkb3VibGUgX194LCBpbnQgX19leHApIHsgcmV0dXJuIDo6bGRleHBsKF9feCwgX19leHAp
OyB9CgoKCgoKCiAgdXNpbmcgOjpsb2c7CgoKICBpbmxpbmUgZmxvYXQKICBsb2coZmxvYXQgX194
KSB7IHJldHVybiA6OmxvZ2YoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGxv
Zyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9nbChfX3gpOyB9CgoKCgoKICB1c2luZyA6
OmxvZzEwOwoKCiAgaW5saW5lIGZsb2F0CiAgbG9nMTAoZmxvYXQgX194KSB7IHJldHVybiA6Omxv
ZzEwZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbG9nMTAobG9uZyBkb3Vi
bGUgX194KSB7IHJldHVybiA6OmxvZzEwbChfX3gpOyB9CgoKCgoKICB1c2luZyA6Om1vZGY7CgoK
ICBpbmxpbmUgZmxvYXQKICBtb2RmKGZsb2F0IF9feCwgZmxvYXQqIF9faXB0cikgeyByZXR1cm4g
Ojptb2RmZihfX3gsIF9faXB0cik7IH0KIyAzNzUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y
L2NtYXRoIiAzCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbW9kZihsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlKiBfX2lwdHIpIHsgcmV0dXJuIDo6bW9kZmwoX194LCBfX2lwdHIpOyB9CiMgMzg4
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICAgIGlubGluZSBfVHAKICAgIF9fcG93X2hlbHBlcihfVHAgX194LCBpbnQgX19uKQog
ICAgewogICAgICByZXR1cm4gX19uIDwgMAogICAgICAgID8gX1RwKDEpL19fY21hdGhfcG93ZXIo
X194LCAtX19uKQogICAgICAgIDogX19jbWF0aF9wb3dlcihfX3gsIF9fbik7CiAgICB9CgogIHVz
aW5nIDo6cG93OwoKCiAgaW5saW5lIGZsb2F0CiAgcG93KGZsb2F0IF9feCwgZmxvYXQgX195KSB7
IHJldHVybiA6OnBvd2YoX194LCBfX3kpOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQog
IHBvdyhsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgeyByZXR1cm4gOjpwb3dsKF9f
eCwgX195KTsgfQoKCgoKCgogIGlubGluZSBkb3VibGUKICBwb3coZG91YmxlIF9feCwgaW50IF9f
aSkKICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX2kpOyB9CgogIGlubGluZSBmbG9hdAog
IHBvdyhmbG9hdCBfX3gsIGludCBfX24pCiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19u
KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUgX194LCBpbnQgX19u
KQogIHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7IH0KCiAgdXNpbmcgOjpzaW47Cgog
IGlubGluZSBmbG9hdAogIHNpbihmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3NpbmYo
X194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzaW4obG9uZyBkb3VibGUgX194KQogIHsg
cmV0dXJuIF9fYnVpbHRpbl9zaW5sKF9feCk7IH0KCiAgdXNpbmcgOjpzaW5oOwoKCiAgaW5saW5l
IGZsb2F0CiAgc2luaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6c2luaGYoX194KTsgfQoKCgoKCgog
IGlubGluZSBsb25nIGRvdWJsZQogIHNpbmgobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnNp
bmhsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6c3FydDsKCiAgaW5saW5lIGZsb2F0CiAgc3FydChm
bG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3NxcnRmKF9feCk7IH0KCiAgaW5saW5lIGxv
bmcgZG91YmxlCiAgc3FydChsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3Nx
cnRsKF9feCk7IH0KCiAgdXNpbmcgOjp0YW47CgoKICBpbmxpbmUgZmxvYXQKICB0YW4oZmxvYXQg
X194KSB7IHJldHVybiA6OnRhbmYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQog
IHRhbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6dGFubChfX3gpOyB9CgoKCgoKICB1c2lu
ZyA6OnRhbmg7CgoKICBpbmxpbmUgZmxvYXQKICB0YW5oKGZsb2F0IF9feCkgeyByZXR1cm4gOjp0
YW5oZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgdGFuaChsb25nIGRvdWJs
ZSBfX3gpIHsgcmV0dXJuIDo6dGFuaGwoX194KTsgfQoKCgoKfQoKCgoKCgpuYW1lc3BhY2UgX19n
bnVfY3h4CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9m
cGNsYXNzaWZ5KF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9h
dCkgPyBfX2ZwY2xhc3NpZnlmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91Ymxl
KSA/IF9fZnBjbGFzc2lmeSAoX19mKSA6IF9fZnBjbGFzc2lmeWwgKF9fZikpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzZmluaXRlKF9UcCBfX2Yp
IHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2Zpbml0ZWYgKF9f
ZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19maW5pdGUgKF9fZikgOiBf
X2Zpbml0ZWwgKF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAg
X19jYXB0dXJlX2lzaW5mKF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9m
IChmbG9hdCkgPyBfX2lzaW5mZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJs
ZSkgPyBfX2lzaW5mIChfX2YpIDogX19pc2luZmwgKF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzbmFuKF9UcCBfX2YpIHsgcmV0dXJuIChz
aXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2lzbmFuZiAoX19mKSA6IHNpemVvZiAo
X19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2lzbmFuIChfX2YpIDogX19pc25hbmwgKF9fZikp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzbm9y
bWFsKF9UcCBfX2YpIHsgcmV0dXJuICgoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8g
X19mcGNsYXNzaWZ5ZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBf
X2ZwY2xhc3NpZnkgKF9fZikgOiBfX2ZwY2xhc3NpZnlsIChfX2YpKSA9PSBGUF9OT1JNQUwpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX3NpZ25iaXQo
X1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fc2ln
bmJpdGYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19zaWduYml0
IChfX2YpIDogX19zaWduYml0bCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
ICAgaW50CiAgICBfX2NhcHR1cmVfaXNncmVhdGVyKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsg
cmV0dXJuIF9fYnVpbHRpbl9pc2dyZWF0ZXIgKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXNncmVhdGVyZXF1YWwoX1RwIF9f
ZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2dyZWF0ZXJlcXVhbCAoX19m
MSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2Fw
dHVyZV9pc2xlc3MoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVybiBfX2J1aWx0aW5faXNsZXNz
IChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAg
X19jYXB0dXJlX2lzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJldHVybiBf
X2J1aWx0aW5faXNsZXNzZXF1YWwgKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXNsZXNzZ3JlYXRlcihfVHAgX19mMSwgX1Rw
IF9fZjIpCiAgICAgeyByZXR1cm4gX19idWlsdGluX2lzbGVzc2dyZWF0ZXIgKF9fZjEsIF9fZjIp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXN1
bm9yZGVyZWQoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc3Vu
b3JkZXJlZCAoX19mMSwgX19mMik7IH0KfQojIDU4MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjIvY21hdGgiIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogICAgaW50CiAgICBmcGNsYXNzaWZ5KF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9mcGNs
YXNzaWZ5KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2Zp
bml0ZShfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNmaW5pdGUoX19mKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzaW5mKF9UcCBfX2YpIHsgcmV0dXJuIF9f
Y2FwdHVyZV9pc2luZihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAog
ICAgaXNuYW4oX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbmFuKF9fZik7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc25vcm1hbChfVHAgX19mKSB7IHJldHVy
biBfX2NhcHR1cmVfaXNub3JtYWwoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBpbnQKICAgIHNpZ25iaXQoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX3NpZ25iaXQoX19m
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzZ3JlYXRlcihfVHAg
X19mMSwgX1RwIF9fZjIpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2dyZWF0ZXIoX19mMSwgX19mMik7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2dyZWF0ZXJlcXVhbChf
VHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXNncmVhdGVyZXF1YWwo
X19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2xl
c3MoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVybiBfX2NhcHR1cmVfaXNsZXNzKF9fZjEsIF9f
ZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzZXF1YWwo
X1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzc2VxdWFsKF9f
ZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNz
Z3JlYXRlcihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXNsZXNz
Z3JlYXRlcihfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQK
ICAgIGlzdW5vcmRlcmVkKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fY2FwdHVy
ZV9pc3Vub3JkZXJlZChfX2YxLCBfX2YyKTsgfQp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBf
X2dudV9jeHg6OmZwY2xhc3NpZnk7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2Zpbml0ZTsKICB1c2lu
ZyBfX2dudV9jeHg6OmlzaW5mOwogIHVzaW5nIF9fZ251X2N4eDo6aXNuYW47CiAgdXNpbmcgX19n
bnVfY3h4Ojppc25vcm1hbDsKICB1c2luZyBfX2dudV9jeHg6OnNpZ25iaXQ7CiAgdXNpbmcgX19n
bnVfY3h4Ojppc2dyZWF0ZXI7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2dyZWF0ZXJlcXVhbDsKICB1
c2luZyBfX2dudV9jeHg6OmlzbGVzczsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVzc2VxdWFsOwog
IHVzaW5nIF9fZ251X2N4eDo6aXNsZXNzZ3JlYXRlcjsKICB1c2luZyBfX2dudV9jeHg6OmlzdW5v
cmRlcmVkOwp9CgoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvY21hdGgu
dGNjIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9jbWF0aC50Y2Mi
IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgX1RwCiAgICBf
X2NtYXRoX3Bvd2VyKF9UcCBfX3gsIHVuc2lnbmVkIGludCBfX24pCiAgICB7CiAgICAgIF9UcCBf
X3kgPSBfX24gJSAyID8gX194IDogMTsKCiAgICAgIHdoaWxlIChfX24gPj49IDEpCiAgICAgICAg
ewogICAgICAgICAgX194ID0gX194ICogX194OwogICAgICAgICAgaWYgKF9fbiAlIDIpCiAgICAg
ICAgICAgIF9feSA9IF9feSAqIF9feDsKICAgICAgICB9CgogICAgICByZXR1cm4gX195OwogICAg
fQp9CiMgNjU1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMiAzCiMgNDIgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKIyAx
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDEgMwojIDQ3ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jcHVfbGltaXRzLmgiIDEgMwojIDQ5ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDIgMwojIDg4NyAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvbGltaXRzIiAzCm5hbWVzcGFjZSBzdGQKewogIGVudW0gZmxvYXRfcm91bmRfc3R5
bGUKICB7CiAgICByb3VuZF9pbmRldGVybWluYXRlID0gLTEsCiAgICByb3VuZF90b3dhcmRfemVy
byA9IDAsCiAgICByb3VuZF90b19uZWFyZXN0ID0gMSwKICAgIHJvdW5kX3Rvd2FyZF9pbmZpbml0
eSA9IDIsCiAgICByb3VuZF90b3dhcmRfbmVnX2luZmluaXR5ID0gMwogIH07CgogIGVudW0gZmxv
YXRfZGVub3JtX3N0eWxlCiAgewogICAgZGVub3JtX2luZGV0ZXJtaW5hdGUgPSAtMSwKICAgIGRl
bm9ybV9hYnNlbnQgPSAwLAogICAgZGVub3JtX3ByZXNlbnQgPSAxCiAgfTsKCgoKCiAgc3RydWN0
IF9fbnVtZXJpY19saW1pdHNfYmFzZQogIHsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp
YWxpemVkID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAwOwogICAgc3Rh
dGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDA7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWdu
ZWQgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgaW50
IHJhZGl4ID0gMDsKCiAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50ID0gMDsKICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAw
OwoKICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1f
c3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkg
PSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSBmYWxzZTsKICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBib29s
IHRyYXBzID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBm
YWxzZTsKICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJv
dW5kX3Rvd2FyZF96ZXJvOwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVj
dCBudW1lcmljX2xpbWl0cyA6IHB1YmxpYyBfX251bWVyaWNfbGltaXRzX2Jhc2UKICAgIHsKICAg
ICAgc3RhdGljIF9UcCBtaW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7
IH0KICAgICAgc3RhdGljIF9UcCBtYXgoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9U
cD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBlcHNpbG9uKCkgdGhyb3coKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgcm91bmRfZXJyb3IoKSB0aHJvdygp
IHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBpbmZpbml0
eSgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMg
X1RwIHF1aWV0X05hTigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQog
ICAgICBzdGF0aWMgX1RwIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBkZW5vcm1fbWluKCkgdGhyb3coKSB7IHJl
dHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0
cnVjdCBudW1lcmljX2xpbWl0czxib29sPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgYm9vbCBtaW4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICBzdGF0aWMgYm9vbCBtYXgoKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2Vy
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGJvb2wgZXBzaWxvbigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgcm91bmRfZXJy
b3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll
dF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3Jt
ID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz
ID0gZmFsc2U7CgogICAgICBzdGF0aWMgYm9vbCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBzaWduYWxpbmdfTmFOKCkgdGhy
b3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBkZW5vcm1fbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCgoKCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZQogICAgICAgICAgICAgICB8fCB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJk
X3plcm87CiAgICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxj
aGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7
CgogICAgICBzdGF0aWMgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIChjaGFyKSgt
MTI3IC0gMSk7IH0KICAgICAgc3RhdGljIGNoYXIgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVy
biAoY2hhcikxMjc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNzsKICAgICAg
c3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDc7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgY2hhciBlcHNpbG9uKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgcm91bmRfZXJyb3IoKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBt
aW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g
MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFO
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRl
bm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
bHNlOwoKICAgICAgc3RhdGljIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IGNoYXIoKTsgfQogICAgICBzdGF0aWMgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgZGVub3JtX21pbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0g
dHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsK
IyAxMDcxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+
CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBzaWduZWQg
Y2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtMTI3IC0gMSk7IH0KICAgICAgc3Rh
dGljIHNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMTI3OyB9CgogICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln
aXRzMTAgPSAyOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsK
ICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IDA7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4
cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGlj
IGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0
aWMgc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFO
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0K
ICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVk
IGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2ln
bmVkIGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0
cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy
b3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTEyOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2ln
bmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0g
dHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtYXgoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuICgxMjcgKiAyICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
ID0gODsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p
bnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGNo
YXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5z
aWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l
bnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1f
c3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5m
aW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGlj
IHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIg
ZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBz
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5k
X3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJp
Y19saW1pdHM8d2NoYXJfdD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh
bGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHdjaGFyX3QgbWluKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAod2NoYXJfdCkoLTIxNDc0ODM2NDdMIC0gMSk7IH0KICAgICAgc3RhdGljIHdjaGFy
X3QgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAod2NoYXJfdCkyMTQ3NDgzNjQ3TDsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg
PSAyOwogICAgICBzdGF0aWMgd2NoYXJfdCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAwOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMg
d2NoYXJfdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9CiAg
ICAgIHN0YXRpYyB3Y2hhcl90IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2No
YXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBkZW5vcm1fbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3Vu
ZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu
ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxMjQxICIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1
Y3QgbnVtZXJpY19saW1pdHM8c2hvcnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBzaG9ydCBtaW4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuICgtMzI3NjcgLSAxKTsgfQogICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhy
b3coKQogICAgICB7IHJldHVybiAzMjc2NzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp
dHMgPSAxNTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDQ7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgc2hvcnQgZXBz
aWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgc2hvcnQgcm91
bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l
bnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1
aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05h
TiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5v
cm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xv
c3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAg
eyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBzaWduYWxpbmdf
TmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAgIHN0YXRpYyBzaG9y
dCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0g
dHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsK
IyAxMjk4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+
CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+CiAgICB7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNp
Z25lZCBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGlj
IHVuc2lnbmVkIHNob3J0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDMyNzY3ICogMiAr
IDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE2OwogICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0czEwID0gNDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZXBzaWxvbigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcm91bmRf
ZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQx
MCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0
X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0g
PSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg
PSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0
YXRpYyB1bnNpZ25lZCBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hv
cnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZW5vcm1fbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3pl
cm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxp
bnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsK
CiAgICAgIHN0YXRpYyBpbnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoaW50KSgtMjE0
NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMgaW50IG1heCgpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gKGludCkyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMg
PSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu
dGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgaW50IGVwc2lsb24o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGludCByb3VuZF9lcnJv
cigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBt
aW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g
MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFO
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRl
bm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
bHNlOwoKICAgICAgc3RhdGljIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IHF1aWV0X05hTigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50
IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
MCk7IH0KICAgICAgc3RhdGljIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1
NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm
b3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z
dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNDEwICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1p
dHM8dW5zaWduZWQgaW50PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFs
aXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1pbigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gMDsgfQogICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuICh1bnNpZ25lZCkoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg
PSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9lcnJvcigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l
bnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50
IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0
eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNl
bnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAg
ICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50
IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAg
c3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l
c3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSBy
b3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+
CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgbWluKCkgdGhy
b3coKQogICAgICB7IHJldHVybiAoLTIxNDc0ODM2NDdMIC0gMSk7IH0KICAgICAgc3RhdGljIGxv
bmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMx
MCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAg
ICBzdGF0aWMgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAg
IHN0YXRpYyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9y
bV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBpbmZpbml0eSgp
IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgc3Rh
dGljIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxs
b25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBkZW5v
cm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v
ZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsK
ICAgIH07CiMgMTUyMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVt
cGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+CiAgICB7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRp
YyB1bnNpZ25lZCBsb25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBz
dGF0aWMgdW5zaWduZWQgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgyMTQ3NDgz
NjQ3TCAqIDJVICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVwc2ls
b24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f
ZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFs
aW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhh
c19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVu
b3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZmluaXR5KCkg
dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQog
ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbm9ybV9t
aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDAp
OyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96
ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8
bG9uZyBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9
IHRydWU7CgogICAgICBzdGF0aWMgbG9uZyBsb25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gKC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgLSAxKTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25n
IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gOTIyMzM3MjAzNjg1NDc3NTgwN0xMOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDYzOwogICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0czEwID0gMTg7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg
PSAyOwogICAgICBzdGF0aWMgbG9uZyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDA7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l
eHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3Rh
dGljIGxvbmcgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8bG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIHF1aWV0X05hTigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICBz
dGF0aWMgbG9uZyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBkZW5vcm1f
bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
bW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv
OwogICAgfTsKIyAxNjM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0
ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZyBsb25nPgog
ICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg
ICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1heCgpIHRocm93KCkKICAgICAg
eyByZXR1cm4gKDkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAqIDJVTEwgKyAxKTsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IGludCBkaWdpdHMgPSA2NDsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMx
MCA9IDE5OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHJvdW5kX2Vycm9yKCkg
dGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2lu
ZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3Jt
X2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7
CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0
YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNp
Z25lZCBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQg
bG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ll
YzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19i
ZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5k
X3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAg
IHN0cnVjdCBudW1lcmljX2xpbWl0czxmbG9hdD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGZsb2F0IG1pbigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMS4xNzU0OTQzNWUtMzhGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBt
YXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMuNDAyODIzNDdlKzM4RjsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IGludCBkaWdpdHMgPSAyNDsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMx
MCA9IDY7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAg
ICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjE5MjA5
MjkwZS0wN0Y7IH0KICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAxLjBGOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9
IC0xMjU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzc7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTI4OwogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudDEwID0gMzg7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5m
aW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1f
YWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsK
CiAgICAgIHN0YXRpYyBmbG9hdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4w
RjsgfQogICAgICBzdGF0aWMgZmxvYXQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAwLjBGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAwLjBGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBkZW5vcm1fbWluKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAwLjBGOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1
NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf
YmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu
ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNzY1ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19s
aW1pdHM8ZG91YmxlPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXpl
ZCA9IHRydWU7CgogICAgICBzdGF0aWMgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDg7IH0KICAgICAgc3RhdGljIGRvdWJsZSBtYXgoKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4OyB9CgogICAgICBz
dGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDUzOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
czEwID0gMTU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7
CiAgICAgIHN0YXRpYyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMi4y
MjA0NDYwNDkyNTAzMTMxZS0xNjsgfQogICAgICBzdGF0aWMgZG91YmxlIHJvdW5kX2Vycm9yKCkg
dGhyb3coKQogICAgICB7IHJldHVybiAxLjA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
X2V4cG9uZW50ID0gLTEwMjE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAg
PSAtMzA3OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEwMjQ7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzMDg7CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5n
X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k
ZW5vcm0gPQogICAgICAgICAgICAgIGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0
eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcXVp
ZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJs
ZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3Rh
dGljIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k
dWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGlj
IGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0KICAgICAgICAgICAgICByb3Vu
ZF90b3dhcmRfemVybzsKICAgIH07CiMgMTg0NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv
bGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgZG91
YmxlPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7
CgogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAz
LjM2MjEwMzE0MzExMjA5MzUwNjI2ZS00OTMyTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUg
bWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjE4OTczMTQ5NTM1NzIzMTc2NTAyZSs0OTMy
TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2NDsKICAgICAgc3RhdGljIGNv
bnN0IGludCBkaWdpdHMxMCA9IDE4OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gMS4wODQyMDIxNzI0ODU1MDQ0MzQwMWUtMTlMOyB9CiAgICAgIHN0YXRp
YyBsb25nIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4wTDsg
fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTYzODE7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtNDkzMTsKICAgICAgc3RhdGljIGNvbnN0
IGludCBtYXhfZXhwb25lbnQgPSAxNjM4NDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw
b25lbnQxMCA9IDQ5MzI7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9CiAgICAgICAgICAgICAgICBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0K
ICAgICAgICAgICAgICAgIGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19kZW5vcm1fbG9zcyA9CiAgICAgICAgICAgICAgICBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25n
IGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQogICAgICBz
dGF0aWMgbG9uZyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBM
OyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAwLjBMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBkZW5vcm1fbWluKCkg
dGhyb3coKQogICAgICB7IHJldHVybiAwLjBMOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu
eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHls
ZSByb3VuZF9zdHlsZSA9CiAgICAgICAgcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDE5MjQg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwp9CiMgNDQgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMi90eXBlaW5mbyIgMSAzCiMgNDAgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL3R5cGVpbmZvIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2UgX19jeHhhYml2
MQp7CiAgY2xhc3MgX19jbGFzc190eXBlX2luZm87Cn0KIyA1NSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvdHlwZWluZm8iIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgY2xhc3MgdHlwZV9pbmZv
CiAgewogIHB1YmxpYzoKCgoKCiAgICB2aXJ0dWFsIH50eXBlX2luZm8oKTsKCiAgcHJpdmF0ZToK
CiAgICB0eXBlX2luZm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsKICAgIHR5cGVfaW5m
byhjb25zdCB0eXBlX2luZm8mKTsKCiAgcHJvdGVjdGVkOgogICAgY29uc3QgY2hhciAqX19uYW1l
OwoKICBwcm90ZWN0ZWQ6CiAgICBleHBsaWNpdCB0eXBlX2luZm8oY29uc3QgY2hhciAqX19uKTog
X19uYW1lKF9fbikgeyB9CgogIHB1YmxpYzoKCgoKICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25z
dAogICAgeyByZXR1cm4gX19uYW1lOyB9CiMgOTggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y
L3R5cGVpbmZvIiAzCiAgICBib29sIGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25z
dAogICAgeyByZXR1cm4gX19uYW1lIDwgX19hcmcuX19uYW1lOyB9CiAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA9PSBf
X2FyZy5fX25hbWU7IH0KCiAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2Fy
ZykgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRvcj09KF9fYXJnKTsgfQoKCiAgcHVibGljOgoK
ICAgIHZpcnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJfcCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgYm9v
bCBfX2lzX2Z1bmN0aW9uX3AoKSBjb25zdDsKCgoKCgoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb19j
YXRjaChjb25zdCB0eXBlX2luZm8gKl9fdGhyX3R5cGUsIHZvaWQgKipfX3Rocl9vYmosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsKCgogICAgdmly
dHVhbCBib29sIF9fZG9fdXBjYXN0KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3NfdHlwZV9pbmZv
ICpfX3RhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19vYmpfcHRy
KSBjb25zdDsKICB9OwoKCgogIGNsYXNzIGJhZF9jYXN0IDogcHVibGljIGV4Y2VwdGlvbgogIHsK
ICBwdWJsaWM6CiAgICBiYWRfY2FzdCgpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9j
YXN0KCkgdGhyb3coKTsKICB9OwoKCiAgY2xhc3MgYmFkX3R5cGVpZCA6IHB1YmxpYyBleGNlcHRp
b24KICB7CiAgcHVibGljOgogICAgYmFkX3R5cGVpZCAoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0
dWFsIH5iYWRfdHlwZWlkKCkgdGhyb3coKTsKICB9Owp9Cgp9CiMgNDYgIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9jYWxlCiAgICBsb2NhbGU6OmNvbWJp
bmUoY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdAogICAgewogICAgICBfSW1wbCogX190bXAg
PSBuZXcgX0ltcGwoKl9NX2ltcGwsIDEpOwogICAgICBfX3RtcC0+X01fcmVwbGFjZV9mYWNldChf
X290aGVyLl9NX2ltcGwsICZfRmFjZXQ6OmlkKTsKICAgICAgcmV0dXJuIGxvY2FsZShfX3RtcCk7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgYm9vbAogICAgbG9jYWxlOjpvcGVyYXRvcigpKGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsCiAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikg
Y29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBzdGQ6OmNvbGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVf
dHlwZTsKICAgICAgY29uc3QgX19jb2xsYXRlX3R5cGUmIF9fY29sbGF0ZSA9IHVzZV9mYWNldDxf
X2NvbGxhdGVfdHlwZT4oKnRoaXMpOwogICAgICByZXR1cm4gKF9fY29sbGF0ZS5jb21wYXJlKF9f
czEuZGF0YSgpLCBfX3MxLmRhdGEoKSArIF9fczEubGVuZ3RoKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19zMi5kYXRhKCksIF9fczIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkg
PCAwKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0
JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIHNpemVfdCBf
X2kgPSBfRmFjZXQ6OmlkLl9NX2lkKCk7CiAgICAgIGxvY2FsZTo6ZmFjZXQqKiBfX2ZhY2V0cyA9
IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsKICAgICAgaWYgKCEoX19pIDwgX19sb2MuX01faW1w
bC0+X01fZmFjZXRzX3NpemUgJiYgX19mYWNldHNbX19pXSkpCiAgICAgICAgX190aHJvd19iYWRf
Y2FzdCgpOwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgX0ZhY2V0Jj4oKl9fZmFjZXRz
W19faV0pOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBo
YXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKQogICAgewogICAgICBzaXplX3Qg
X19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOwogICAgICBsb2NhbGU6OmZhY2V0KiogX19mYWNldHMg
PSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIHJldHVybiAoX19pIDwgX19sb2MuX01f
aW1wbC0+X01fZmFjZXRzX3NpemUgJiYgX19mYWNldHNbX19pXSk7CiAgICB9CgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVt
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfZmxvYXQoX0luSXRlciBfX2Jl
ZywgX0luSXRlciBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nJiBfX3h0cmMpIGNvbnN0CiAgICB7CiAgICAg
IHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBjb25zdCBs
b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBf
X2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IG51
bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9j
KTsKCgogICAgICBjb25zdCBjaGFyX3R5cGUgX19wbHVzID0gX19jdHlwZS53aWRlbignKycpOwog
ICAgICBjb25zdCBjaGFyX3R5cGUgX19taW51cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKICAgICAg
aW50IF9fcG9zID0gMDsKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgaWYgKChf
X3RyYWl0c190eXBlOjplcShfX2MsIF9fcGx1cykgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBf
X21pbnVzKSkKICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAg
IF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICArK19fcG9z
OwogICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICB9CgoKICAgICAgY29uc3QgY2hh
cl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oX1NfYXRvbXNbX01femVyb10pOwogICAgICBi
b29sIF9fZm91bmRfemVybyA9IGZhbHNlOwogICAgICB3aGlsZSAoX190cmFpdHNfdHlwZTo6ZXEo
X19jLCBfX3plcm8pICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIF9fYyA9
ICooKytfX2JlZyk7CiAgICAgICAgICBfX2ZvdW5kX3plcm8gPSB0cnVlOwogICAgICAgIH0KICAg
ICAgaWYgKF9fZm91bmRfemVybykKICAgICAgICB7CiAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRv
bXNbX01femVyb107CiAgICAgICAgICArK19fcG9zOwogICAgICAgIH0KCgogICAgICBjb25zdCBz
aXplX3QgX19sZW4gPSBfTV9FIC0gX01femVybyArIDE7CiAgICAgIGNoYXJfdHlwZSBfX3dhdG9t
c1tfX2xlbl07CiAgICAgIF9fY3R5cGUud2lkZW4oX1NfYXRvbXMsIF9TX2F0b21zICsgX19sZW4s
IF9fd2F0b21zKTsKICAgICAgYm9vbCBfX2ZvdW5kX2RlYyA9IGZhbHNlOwogICAgICBib29sIF9f
Zm91bmRfc2NpID0gZmFsc2U7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX2RlYyA9IF9fbnAuZGVj
aW1hbF9wb2ludCgpOwoKICAgICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBpbmc7CiAgICAgIGNvbnN0
IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBib29sIF9fY2hlY2tf
Z3JvdXBpbmcgPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7CiAg
ICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwoKICAgICAg
d2hpbGUgKF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKCiAgICAgICAgICBjb25zdCBjaGFyX3R5
cGUqIF9fcCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193YXRvbXMsIDEwLCBfX2MpOwoKCiAgICAg
ICAgICBpZiAoX19wICYmICFfX3RyYWl0c190eXBlOjplcShfX2MsIGNoYXJfdHlwZSgpKSkKICAg
ICAgICAgICAgewoKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyAr
PSBfU19hdG9tc1tfX3AgLSBfX3dhdG9tc107CiAgICAgICAgICAgICAgKytfX3NlcF9wb3M7CiAg
ICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxz
ZSBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3NlcCkKICAgICAgICAgICAgICAgICAgICYm
IF9fY2hlY2tfZ3JvdXBpbmcgJiYgIV9fZm91bmRfZGVjKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICBpZiAoX19zZXBfcG9zKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAg
ICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytf
X2JlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19kZWMpICYmICFfX2ZvdW5kX2Rl
YykKICAgICAgICAgICAgewoKCgogICAgICAgICAgICAgIGlmIChfX2ZvdW5kX2dyb3VwaW5nLnNp
emUoKSkKICAgICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hh
cj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9feHRy
YyArPSAnLic7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBf
X2ZvdW5kX2RlYyA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKChfX3Ry
YWl0c190eXBlOjplcShfX2MsIF9fd2F0b21zW19NX2VdKQogICAgICAgICAgICAgICAgICAgIHx8
IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX193YXRvbXNbX01fRV0pKQogICAgICAgICAgICAgICAg
ICAgJiYgIV9fZm91bmRfc2NpICYmIF9fcG9zKQogICAgICAgICAgICB7CgogICAgICAgICAgICAg
ICsrX19wb3M7CiAgICAgICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hh
cigpKTsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwoKCiAgICAgICAgICAgICAgaWYg
KF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKQogICAgICAgICAgICAgICAgICB8fCBfX3Ry
YWl0c190eXBlOjplcShfX2MsIF9fbWludXMpKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJy
b3coX19jLCBjaGFyKCkpOwogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fZm91bmRfc2NpID0gdHJ1ZTsKICAgICAgICAg
ICAgfQogICAgICAgICAgZWxzZQoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKCgogICAg
ICBpZiAoX19jaGVja19ncm91cGluZyAmJiBfX2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkKICAgICAg
ICB7CgogICAgICAgICAgaWYgKCFfX2ZvdW5kX2RlYykKICAgICAgICAgICAgX19mb3VuZF9ncm91
cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3Zl
cmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2ZvdW5kX2dyb3VwaW5nKSkKICAgICAgICAgICAg
X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIF9feHRyYyArPSBj
aGFyKCk7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFz
ZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFy
VCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9pbnQoX0luSXRlciBfX2JlZywgX0luSXRlciBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHN0cmluZyYgX194dHJjLCBpbnQmIF9fYmFzZSkgY29uc3QKICAgIHsKICAgICAg
dHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgIGNvbnN0IGxv
Y2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9f
Y3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgbnVt
cHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2Mp
OwoKCiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAm
IGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6
b2N0KQogICAgICAgIF9fYmFzZSA9IDg7CiAgICAgIGVsc2UgaWYgKF9fYmFzZWZpZWxkID09IGlv
c19iYXNlOjpoZXgpCiAgICAgICAgX19iYXNlID0gMTY7CiAgICAgIGVsc2UKICAgICAgICBfX2Jh
c2UgPSAxMDsKCgogICAgICBpbnQgX19wb3MgPSAwOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9f
YmVnOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19wbHVzID0gX19jdHlwZS53aWRlbignKycpOwog
ICAgICBjb25zdCBjaGFyX3R5cGUgX19taW51cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKCiAgICAg
IGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3BsdXMpIHx8IF9fdHJhaXRzX3R5cGU6OmVx
KF9fYywgX19taW51cykpCiAgICAgICAgICAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAg
ICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAg
KytfX3BvczsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgfQoKCiAgICAgIGNv
bnN0IGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndpZGVuKF9TX2F0b21zW19NX3plcm9dKTsK
ICAgICAgY29uc3QgY2hhcl90eXBlIF9feCA9IF9fY3R5cGUud2lkZW4oJ3gnKTsKICAgICAgY29u
c3QgY2hhcl90eXBlIF9fWCA9IF9fY3R5cGUud2lkZW4oJ1gnKTsKICAgICAgaWYgKF9fYmFzZSA9
PSAxMCkKICAgICAgICB7CiAgICAgICAgICBib29sIF9fZm91bmRfemVybyA9IGZhbHNlOwogICAg
ICAgICAgd2hpbGUgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAhPSBf
X2VuZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAg
ICAgICAgICAgX19mb3VuZF96ZXJvID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYg
KF9fZm91bmRfemVybykKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9feHRyYyArPSBfU19h
dG9tc1tfTV96ZXJvXTsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIGlmIChf
X2Jhc2VmaWVsZCA9PSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAo
KF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX194KQogICAgICAgICAgICAgICAgICAgICAgIHx8IF9f
dHJhaXRzX3R5cGU6OmVxKF9fYywgX19YKSkKICAgICAgICAgICAgICAgICAgICAgICYmIF9fYmVn
ICE9IF9fZW5kKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9f
eHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgICAgICAg
ICArK19fcG9zOwogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAg
ICAgICAgICAgICAgICAgIF9fYmFzZSA9IDE2OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fYmFzZSA9IDg7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYmFzZSA9
PSAxNikKICAgICAgICB7CiAgICAgICAgICBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3pl
cm8pICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX194dHJj
ICs9IF9TX2F0b21zW19NX3plcm9dOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAg
ICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVx
KF9fYywgX194KSB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fWCkpCiAgICAgICAgICAgICAg
ICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgICAgICAg
ICArK19fcG9zOwogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKCgogICAgICBzaXplX3QgX19sZW47CiAg
ICAgIGlmIChfX2Jhc2UgPT0gMTYpCiAgICAgICAgX19sZW4gPSBfTV9zaXplOwogICAgICBlbHNl
CiAgICAgICAgX19sZW4gPSBfX2Jhc2U7CgoKICAgICAgY2hhcl90eXBlIF9fd2F0b21zW19NX3Np
emVdOwogICAgICBfX2N0eXBlLndpZGVuKF9TX2F0b21zLCBfU19hdG9tcyArIF9fbGVuLCBfX3dh
dG9tcyk7CiAgICAgIHN0cmluZyBfX2ZvdW5kX2dyb3VwaW5nOwogICAgICBjb25zdCBzdHJpbmcg
X19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5n
ID0gX19ncm91cGluZy5zaXplKCk7CiAgICAgIGludCBfX3NlcF9wb3MgPSAwOwogICAgICBjb25z
dCBjaGFyX3R5cGUgX19zZXAgPSBfX25wLnRob3VzYW5kc19zZXAoKTsKICAgICAgd2hpbGUgKF9f
YmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19wID0g
X190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9tcywgX19sZW4sIF9fYyk7CgoKICAgICAgICAgIGlm
IChfX3AgJiYgIV9fdHJhaXRzX3R5cGU6OmVxKF9fYywgY2hhcl90eXBlKCkpKQogICAgICAgICAg
ICB7CgogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfX3AgLSBfX3dhdG9tc107CiAg
ICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICArK19fc2VwX3BvczsKICAgICAgICAg
ICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChf
X3RyYWl0c190eXBlOjplcShfX2MsIF9fc2VwKSAmJiBfX2NoZWNrX2dyb3VwaW5nKQogICAgICAg
ICAgICB7CgoKICAgICAgICAgICAgICBpZiAoX19zZXBfcG9zKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9f
c2VwX3Bvcyk7CiAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAg
ICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6
ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGVsc2UKCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCgoK
ICAgICAgaWYgKF9fY2hlY2tfZ3JvdXBpbmcgJiYgX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAg
ICAgICAgewoKICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4o
X19zZXBfcG9zKTsKICAgICAgICAgIGlmICghX192ZXJpZnlfZ3JvdXBpbmcoX19ncm91cGluZywg
X19mb3VuZF9ncm91cGluZykpCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0
OwogICAgICAgIH0KCgogICAgICBfX3h0cmMgKz0gY2hhcigpOwogICAgICBpZiAoX19iZWcgPT0g
X19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9f
YmVnOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
cj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQo
aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdAogICAgewoKICAg
ICAgaWYgKCEoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkpCiAgICAgICAgewoK
CiAgICAgICAgICBzdHJpbmcgX194dHJjOwogICAgICAgICAgaW50IF9fYmFzZTsKICAgICAgICAg
IF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJj
LCBfX2Jhc2UpOwoKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAgICAgIF9fY29u
dmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFz
ZSk7CiAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX3VsIDw9
IDEpCiAgICAgICAgICAgIF9fdiA9IF9fdWw7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0KCgogICAgICBlbHNlCiAgICAgICAg
ewogICAgICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAg
ICAgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CgogICAg
ICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IG51bXB1
bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsK
ICAgICAgICAgIGNvbnN0IF9fc3RyaW5nX3R5cGUgX190cnVlID0gX19ucC50cnVlbmFtZSgpOwog
ICAgICAgICAgY29uc3QgX19zdHJpbmdfdHlwZSBfX2ZhbHNlID0gX19ucC5mYWxzZW5hbWUoKTsK
ICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX190cnVlcyA9IF9fdHJ1ZS5jX3N0cigpOwogICAg
ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2ZhbHNlcyA9IF9fZmFsc2UuY19zdHIoKTsKICAgICAg
ICAgIGNvbnN0IHNpemVfdCBfX3RydWVuID0gX190cnVlLnNpemUoKSAtIDE7CiAgICAgICAgICBj
b25zdCBzaXplX3QgX19mYWxzZW4gPSBfX2ZhbHNlLnNpemUoKSAtIDE7CgogICAgICAgICAgZm9y
IChzaXplX3QgX19uID0gMDsgX19iZWcgIT0gX19lbmQ7ICsrX19uKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZysrOwogICAgICAgICAgICAgIGJvb2wg
X190ZXN0ZiA9IF9fbiA8PSBfX2ZhbHNlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgID8g
X190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX2ZhbHNlc1tfX25dKSA6IGZhbHNlOwogICAgICAgICAg
ICAgIGJvb2wgX190ZXN0dCA9IF9fbiA8PSBfX3RydWVuCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPyBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fdHJ1ZXNbX19uXSkgOiBmYWxzZTsKICAg
ICAgICAgICAgICBpZiAoIShfX3Rlc3RmIHx8IF9fdGVzdHQpKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190
ZXN0ZiAmJiBfX24gPT0gX19mYWxzZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgIF9fdiA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdHQgJiYgX19uID09IF9fdHJ1ZW4pCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdiA9IDE7CiAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19iZWcg
PT0gX19lbmQpCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgICAg
fQogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRl
cj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz
ZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikg
Y29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAg
X19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMs
IF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJy
LCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBu
dW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRl
cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBf
X3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19i
ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICB1bnNpZ25lZCBs
b25nIF9fdWw7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2Vy
ciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZh
aWxiaXQpCiAgICAgICAgICAmJiBfX3VsIDw9IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0
Pjo6bWF4KCkpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fdWwp
OwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIHJl
dHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
SW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRv
X2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29u
c3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19i
ZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9f
YmFzZSk7CiAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194
dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYg
KCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fdWwgPD0gbnVtZXJp
Y19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50PihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNl
OjpmYWlsYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJU
LCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5z
aWduZWQgbG9uZyYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBp
bnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19p
bywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNf
c3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19i
ZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+
CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0
ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewog
ICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4
dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAg
ICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxl
LCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJU
LCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5z
aWduZWQgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAg
ICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5k
LCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0
cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVy
biBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19n
ZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgIHsK
ICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgX194dHJjLnJlc2VydmUoMzIpOwogICAgICBfX2Jl
ZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsK
ICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9j
YWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0lu
SXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYg
X192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2
ZSgzMik7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192
LCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51
bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVy
X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRy
YzsKICAgICAgX194dHJjLnJlc2VydmUoMzIpOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxv
YXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0X3Rv
X3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJu
IF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0
ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0
KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICB7Cgog
ICAgICB0eXBlZGVmIGlvc19iYXNlOjpmbXRmbGFncyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3Mg
X19mbXQgPSBfX2lvLmZsYWdzKCk7CiAgICAgIGZtdGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jh
c2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFzZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCBpb3NfYmFzZTo6dXBwZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAg
X19pby5mbGFncyhfX2ZtdCAmIF9fZm10bWFzayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6
OnNob3diYXNlKSk7CgogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAg
ICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRy
YywgX19iYXNlKTsKCgogICAgICBfX2lvLmZsYWdzKF9fZm10KTsKCiAgICAgIHVuc2lnbmVkIGxv
bmcgX191bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJy
LCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFp
bGJpdCkpCiAgICAgICAgX192ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX191bCk7CiAgICAg
IGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9f
YmVnOwogICAgfQojIDYxOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVf
ZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
ZXI+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICBfT3V0SXRlcgogICAgICBu
dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgICAgX01fY29udmVydF9mbG9hdChfT3V0SXRl
ciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyIF9fbW9kLAogICAgICAg
ICAgICAgICAgICAgICAgIF9WYWx1ZVQgX192KSBjb25zdAogICAgICB7CgoKICAgICAgICBjb25z
dCBpbnQgX19tYXhfZGlnaXRzID0gbnVtZXJpY19saW1pdHM8X1ZhbHVlVD46OmRpZ2l0czEwICsg
MTsKICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyA9IF9faW8ucHJlY2lzaW9uKCk7CgogICAgICAg
IGlmIChfX3ByZWMgPiBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX21heF9kaWdpdHMpKQogICAg
ICAgICAgX19wcmVjID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19tYXhfZGlnaXRzKTsKCgog
ICAgICAgIGNoYXIgX19mYnVmWzE2XTsKCgogICAgICAgIGludCBfX2xlbjsKCgoKICAgICAgICBp
bnQgX19jc19zaXplID0gX19tYXhfZGlnaXRzICogMzsKICAgICAgICBjaGFyKiBfX2NzID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CgogICAgICAgIGNv
bnN0IGJvb2wgX19mcCA9IF9TX2Zvcm1hdF9mbG9hdChfX2lvLCBfX2ZidWYsIF9fbW9kLCBfX3By
ZWMpOwogICAgICAgIGlmIChfX2ZwKQogICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92
KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1NfY19sb2NhbGUsIF9fcHJlYyk7CiAgICAgICAgZWxzZQogICAgICAgICAgX19s
ZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsIF9TX2Nf
bG9jYWxlKTsKCgogICAgICAgIGlmIChfX2xlbiA+PSBfX2NzX3NpemUpCiAgICAgICAgICB7CiAg
ICAgICAgICAgIF9fY3Nfc2l6ZSA9IF9fbGVuICsgMTsKICAgICAgICAgICAgX19jcyA9IHN0YXRp
Y19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgICAgICBp
ZiAoX19mcCkKICAgICAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19j
c19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1NfY19sb2NhbGUsIF9fcHJlYyk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBf
X2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUpOwogICAgICAg
ICAgfQojIDY4MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRz
LnRjYyIgMwogICAgICAgIHJldHVybiBfTV93aWRlbl9mbG9hdChfX3MsIF9faW8sIF9fZmlsbCwg
X19jcywgX19sZW4pOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX091dEl0ZXI+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICBfT3V0SXRl
cgogICAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgICAgX01fY29udmVydF9pbnQo
X091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciBfX21vZCwK
ICAgICAgICAgICAgICAgICAgICAgY2hhciBfX21vZGwsIF9WYWx1ZVQgX192KSBjb25zdAogICAg
ICB7CgoKCiAgICAgICAgY2hhciBfX2ZidWZbMTZdOwogICAgICAgIF9TX2Zvcm1hdF9pbnQoX19p
bywgX19mYnVmLCBfX21vZCwgX19tb2RsKTsKCgogICAgICAgIGludCBfX2NzX3NpemUgPSA2NDsK
ICAgICAgICBjaGFyKiBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2Eo
X19jc19zaXplKSk7CiAgICAgICAgaW50IF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBf
X2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1NfY19sb2NhbGUpOwoKICAgICAgICBpZiAoX19sZW4gPj0gX19jc19zaXplKQogICAgICAg
ICAgewogICAgICAgICAgICBfX2NzX3NpemUgPSBfX2xlbiArIDE7CiAgICAgICAgICAgIF9fY3Mg
PSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAg
ICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBf
X3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSk7CiAg
ICAgICAgICB9CgoKCgoKCiAgICAgICAgcmV0dXJuIF9NX3dpZGVuX2ludChfX3MsIF9faW8sIF9f
ZmlsbCwgX19jcywgX19sZW4pOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJ
dGVyPjo6CiAgICBfTV93aWRlbl9mbG9hdChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBf
Q2hhclQgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAgICAgICAgICAgICAgaW50IF9fbGVuKSBj
b25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlw
ZTsKCgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25z
dCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv
Yyk7CiAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9h
bGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqIF9fbGVuKSk7CgoKICAgICAgX0NoYXJUKiBfX3dzMiA9
IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KiBfX2xlbiAqIDIpKTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9f
d3MpOwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX19wOwogICAgICBjb25zdCBudW1wdW5jdDxfQ2hh
clQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGlm
IChfX3AgPSBfX3RyYWl0c190eXBlOjpmaW5kKF9fd3MsIF9fbGVuLCBfX2N0eXBlLndpZGVuKCcu
JykpKQogICAgICAgIF9fd3NbX19wIC0gX193c10gPSBfX25wLmRlY2ltYWxfcG9pbnQoKTsKCgoK
CiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBp
b3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6
YmFzZWZpZWxkOwogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkpCiAgICAgICAgewogICAgICAg
ICAgX0NoYXJUKiBfX3AyOwogICAgICAgICAgaW50IF9fZGVjbGVuID0gX19wID8gX19wIC0gX193
cyA6IF9fbGVuOwogICAgICAgICAgX19wMiA9IF9fYWRkX2dyb3VwaW5nKF9fd3MyLCBfX25wLnRo
b3VzYW5kc19zZXAoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5n
LmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0
cigpICsgX19ncm91cGluZy5zaXplKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X193cywgX193cyArIF9fZGVjbGVuKTsKICAgICAgICAgIGludCBfX25ld2xlbiA9IF9fcDIgLSBf
X3dzMjsKCgogICAgICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9f
dHJhaXRzX3R5cGU6OmNvcHkoX19wMiwgX19wLCBfX2xlbiAtIF9fZGVjbGVuKTsKICAgICAgICAg
ICAgICBfX25ld2xlbiArPSBfX2xlbiAtIF9fZGVjbGVuOwogICAgICAgICAgICB9CgoKICAgICAg
ICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICAgIF9fbGVuID0gX19uZXdsZW47CiAgICAgICAgfQoK
ICAgICAgcmV0dXJuIF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193cywgX19sZW4pOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg
X091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgX01fd2lkZW5faW50
KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIqIF9fY3Ms
CiAgICAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdAogICAgewoKCiAgICAgIGNvbnN0IGxv
Y2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9f
Y3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX0NoYXJUKiBf
X3dzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJU
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICogX19sZW4pKTsKCgogICAgICBfQ2hhclQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJU
Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9fbGVuICogMikpOwogICAg
ICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyBfX2xlbiwgX193cyk7CgoKICAgICAgY29uc3Qg
bnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19s
b2MpOwogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAg
ICAgY29uc3QgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygpICYg
aW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAg
IHsKCgoKICAgICAgICAgIHN0cmVhbXNpemUgX19vZmYgPSAwOwogICAgICAgICAgaWYgKF9faW8u
ZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkKICAgICAgICAgICAgaWYgKF9fYmFzZWZpZWxk
ID09IGlvc19iYXNlOjpvY3QpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX19vZmYg
PSAxOwogICAgICAgICAgICAgICAgKl9fd3MyID0gKl9fd3M7CiAgICAgICAgICAgICAgfQogICAg
ICAgICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6aGV4KQogICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIF9fb2ZmID0gMjsKICAgICAgICAgICAgICAgICpfX3dzMiA9
ICpfX3dzOwogICAgICAgICAgICAgICAgKihfX3dzMiArIDEpID0gKihfX3dzICsgMSk7CiAgICAg
ICAgICAgICAgfQogICAgICAgICAgX0NoYXJUKiBfX3A7CiAgICAgICAgICBfX3AgPSBfX2FkZF9n
cm91cGluZyhfX3dzMiArIF9fb2ZmLCBfX25wLnRob3VzYW5kc19zZXAoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSArIF9fZ3JvdXBpbmcuc2l6ZSgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX193cyArIF9fb2ZmLCBfX3dzICsgX19sZW4pOwog
ICAgICAgICAgX19sZW4gPSBfX3AgLSBfX3dzMjsKCiAgICAgICAgICBfX3dzID0gX193czI7CiAg
ICAgICAgfQogICAgICByZXR1cm4gX01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX3dzLCBf
X2xlbik7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0
SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIF9N
X2luc2VydChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjb25z
dCBfQ2hhclQqIF9fd3MsCiAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdAogICAgewogICAg
ICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKCiAgICAgIHN0cmVh
bXNpemUgX193ID0gX19pby53aWR0aCgpOwogICAgICBfQ2hhclQqIF9fd3MyID0gc3RhdGljX2Nh
c3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9fdykpOwog
ICAgICBpZiAoX193ID4gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19sZW4pKQogICAgICAgIHsK
ICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX190cmFpdHNfdHlwZT46Ol9TX3BhZChfX2lvLCBfX2Zp
bGwsIF9fd3MyLCBfX3dzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fdywgX19sZW4sIHRydWUpOwogICAgICAgICAgX19sZW4gPSBzdGF0aWNfY2FzdDxp
bnQ+KF9fdyk7CgogICAgICAgICAgX193cyA9IF9fd3MyOwogICAgICAgIH0KICAgICAgX19pby53
aWR0aCgwKTsKCgoKICAgICAgZm9yIChpbnQgX19qID0gMDsgX19qIDwgX19sZW47ICsrX19qLCAr
K19fcykKICAgICAgICAqX19zID0gX193c1tfX2pdOwogICAgICByZXR1cm4gX19zOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0
ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBf
X3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3QKICAg
IHsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7CiAgICAg
IGlmICgoX19mbGFncyAmIGlvc19iYXNlOjpib29sYWxwaGEpID09IDApCiAgICAgICAgewogICAg
ICAgICAgdW5zaWduZWQgbG9uZyBfX3V2ID0gX192OwogICAgICAgICAgX19zID0gX01fY29udmVy
dF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigpLCBfX3V2KTsKICAgICAgICB9CiAg
ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+
IF9fc3RyaW5nX3R5cGU7CiAgICAgICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwog
ICAgICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5j
dDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICAgICAgX19zdHJpbmdfdHlwZSBfX25hbWU7CiAgICAg
ICAgICBpZiAoX192KQogICAgICAgICAgICBfX25hbWUgPSBfX25wLnRydWVuYW1lKCk7CiAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgIF9fbmFtZSA9IF9fbnAuZmFsc2VuYW1lKCk7CiAgICAgICAg
ICBfX3MgPSBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fbmFtZS5jX3N0cigpLCBfX25h
bWUuc2l6ZSgpKTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVt
X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jh
c2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4g
X01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICdkJywgY2hhcigpLCBfX3YpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRl
cgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9f
cywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9f
ZmlsbCwgJ3UnLCBjaGFyKCksIF9fdik7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJ
dGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fYiwgY2hhcl90eXBl
IF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50
KF9fcywgX19iLCBfX2ZpbGwsICdkJywgJ2wnLCBfX3YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hh
clQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8s
IGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdikgY29u
c3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAndScsICds
JywgX192KTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl
cj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1
dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgZG91Ymxl
IF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfZmxvYXQoX19zLCBfX2lvLCBfX2Zp
bGwsIGNoYXIoKSwgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Ogog
ICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxs
LAogICAgICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZl
cnRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsICdMJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8
X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf
X2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QK
ICAgIHsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7CiAg
ICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3Nf
YmFzZTo6YmFzZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3Nf
YmFzZTo6dXBwZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhf
X2ZsYWdzICYgX19mbXQgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwog
ICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfTV9jb252ZXJ0X2ludChfX3MsIF9f
aW8sIF9fZmlsbCwgJ3UnLCBjaGFyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGxvbmc+KF9fdikpOwogICAgICAgICAgX19pby5mbGFn
cyhfX2ZsYWdzKTsKICAgICAgICB9CiAgICAgIGNhdGNoICguLi4pCiAgICAgICAgewogICAgICAg
ICAgX19pby5mbGFncyhfX2ZsYWdzKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAg
cmV0dXJuIF9fczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg
IGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBk
b3VibGUmIF9fdW5pdHMpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZ190eXBlIF9fc3RyOwogICAg
ICBfX2JlZyA9IHRoaXMtPmRvX2dldChfX2JlZywgX19lbmQsIF9faW50bCwgX19pbywgX19lcnIs
IF9fc3RyKTsKCiAgICAgIGNvbnN0IGludCBfX24gPSBudW1lcmljX2xpbWl0czxsb25nIGRvdWJs
ZT46OmRpZ2l0czEwOwogICAgICBjaGFyKiBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVp
bHRpbl9hbGxvY2EoX19uKSk7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9j
KCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8
X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgX0NoYXJUKiBfX3djcyA9IF9fc3RyLmNfc3Ry
KCk7CiAgICAgIF9fY3R5cGUubmFycm93KF9fd2NzLCBfX3djcyArIF9fc3RyLnNpemUoKSArIDEs
IGNoYXIoKSwgX19jcyk7CiAgICAgIF9fY29udmVydF90b192KF9fY3MsIF9fdW5pdHMsIF9fZXJy
LCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbW9uZXlfZ2V0
PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl
IF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX191bml0cykgY29uc3QKICAgIHsKCiAgICAg
IHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIHRydWU+IF9fbW9uZXlfdHJ1ZTsKICAgICAgdHlw
ZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgZmFsc2U+IF9fbW9uZXlfZmFsc2U7CiAgICAgIHR5cGVk
ZWYgbW9uZXlfYmFzZTo6cGFydCBwYXJ0OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0cmluZ190
eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19p
by5nZXRsb2MoKTsKICAgICAgY29uc3QgX19tb25leV90cnVlJiBfX21wdCA9IHVzZV9mYWNldDxf
X21vbmV5X3RydWU+KF9fbG9jKTsKICAgICAgY29uc3QgX19tb25leV9mYWxzZSYgX19tcGYgPSB1
c2VfZmFjZXQ8X19tb25leV9mYWxzZT4oX19sb2MpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+
JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgogICAgICBjb25z
dCBtb25leV9iYXNlOjpwYXR0ZXJuIF9fcCA9IF9faW50bCA/IF9fbXB0Lm5lZ19mb3JtYXQoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLm5lZ19m
b3JtYXQoKTsKCiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9fcG9zX3NpZ24gPV9faW50bCA/IF9f
bXB0LnBvc2l0aXZlX3NpZ24oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBfX21wZi5wb3NpdGl2ZV9zaWduKCk7CiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9f
bmVnX3NpZ24gPV9faW50bCA/IF9fbXB0Lm5lZ2F0aXZlX3NpZ24oKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5uZWdhdGl2ZV9zaWduKCk7CiAgICAg
IGNvbnN0IGNoYXJfdHlwZSBfX2QgPSBfX2ludGwgPyBfX21wdC5kZWNpbWFsX3BvaW50KCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmRlY2ltYWxfcG9pbnQoKTsK
ICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19pbnRsID8gX19tcHQudGhvdXNhbmRzX3Nl
cCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLnRob3VzYW5k
c19zZXAoKTsKCiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19pbnRsID8gX19tcHQu
Z3JvdXBpbmcoKSA6IF9fbXBmLmdyb3VwaW5nKCk7CgoKICAgICAgc3RyaW5nX3R5cGUgX19zaWdu
OwoKICAgICAgc3RyaW5nIF9fZ3JvdXBpbmdfdG1wOwoKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7
CgogICAgICBib29sIF9fdGVzdHZhbGlkID0gdHJ1ZTsKCiAgICAgIGJvb2wgX190ZXN0ZGVjZm91
bmQgPSBmYWxzZTsKCgogICAgICBzdHJpbmdfdHlwZSBfX3RlbXBfdW5pdHM7CgogICAgICBjaGFy
X3R5cGUgX19jID0gKl9fYmVnOwogICAgICBjaGFyX3R5cGUgX19lb2YgPSBzdGF0aWNfY2FzdDxj
aGFyX3R5cGU+KGNoYXJfdHJhaXRzPGNoYXJfdHlwZT46OmVvZigpKTsKICAgICAgZm9yIChpbnQg
X19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgNCAmJiBfX3Rlc3R2YWxpZDsgKytfX2kp
CiAgICAgICAgewogICAgICAgICAgcGFydCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19w
LmZpZWxkW19faV0pOwogICAgICAgICAgc3dpdGNoIChfX3doaWNoKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzeW1ib2w6CiAgICAgICAgICAgICAg
ICAgIGlmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UKICAgICAgICAgICAgICAg
ICAgICAgIHx8IF9faSA8IDIgfHwgX19zaWduLnNpemUoKSA+IDEKICAgICAgICAgICAgICAgICAg
ICAgIHx8ICgoc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkWzNdKSAhPSBtb25leV9iYXNlOjpu
b25lKQogICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9faSA9PSAyKSkKICAgICAgICAgICAg
ICAgICAgICB7CgoKCgoKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9f
c3ltYm9sID0gX19pbnRsID8gX19tcHQuY3Vycl9zeW1ib2woKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmN1cnJfc3ltYm9s
KCk7CiAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3N5bWJvbC5zaXpl
KCk7CiAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19qID0gMDsKICAgICAgICAgICAg
ICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICYmIF9faiA8IF9fbGVuICYmIF9fc3ltYm9sW19fal0gPT0gX19jKQogICAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICArK19fajsKICAgICAgICAgICAgICAgICAgICAgICAg
fQoKCiAgICAgICAgICAgICAgICAgICAgICBpZiAoX19qICE9IF9fbGVuICYmIChfX2lvLmZsYWdz
KCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpKQogICAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2
YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNpZ246CgogICAgICAgICAgICAg
ICAgICBpZiAoX19wb3Nfc2lnbi5zaXplKCkgJiYgX19uZWdfc2lnbi5zaXplKCkpCiAgICAgICAg
ICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX3Bvc19zaWduWzBd
KQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBfX3NpZ24g
PSBfX3Bvc19zaWduOwogICAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwog
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9fYyA9
PSBfX25lZ19zaWduWzBdKQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICBfX3NpZ24gPSBfX25lZ19zaWduOwogICAgICAgICAgICAgICAgICAgICAgICBfX2Mg
PSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19wb3Nfc2lnbi5zaXplKCkg
JiYgX19jID09IF9fcG9zX3NpZ25bMF0pCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgX19zaWduID0gX19wb3Nfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgIF9f
YyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBl
bHNlIGlmIChfX25lZ19zaWduLnNpemUoKSAmJiBfX2MgPT0gX19uZWdfc2lnblswXSkKICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBfX3NpZ24gPSBfX25lZ19zaWdu
OwogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25l
eV9iYXNlOjp2YWx1ZToKCgogICAgICAgICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQK
ICAgICAgICAgICAgICAgICAgICAgICAgICYmIChfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0
LCBfX2MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKF9fYyA9PSBfX2QgJiYgIV9f
dGVzdGRlY2ZvdW5kKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9fYyA9PSBfX3Nl
cCkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgaWYgKF9fYyA9
PSBfX2QpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2dyb3VwaW5nX3RtcCArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgX190ZXN0ZGVjZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19zZXApCiAgICAgICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX19ncm91cGluZy5zaXplKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2dyb3VwaW5nX3RtcCArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190ZXN0dmFs
aWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fdGVtcF91bml0cyArPSBfX2M7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgKytfX3NlcF9wb3M7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3BhY2U6CiAg
ICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6Om5vbmU6CgogICAgICAgICAgICAgICAgICBp
ZiAoX19pICE9IDMpCiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2Us
IF9fYykpCiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgoKICAgICAgaWYgKF9f
c2lnbi5zaXplKCkgPiAxKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9f
c2lnbi5zaXplKCk7CiAgICAgICAgICBzaXplX3R5cGUgX19pID0gMTsKICAgICAgICAgIGZvciAo
OyBfX2MgIT0gX19lb2YgJiYgX19pIDwgX19sZW47ICsrX19pKQogICAgICAgICAgICB3aGlsZSAo
X19iZWcgIT0gX19lbmQgJiYgX19jICE9IF9fc2lnbltfX2ldKQogICAgICAgICAgICAgIF9fYyA9
ICooKytfX2JlZyk7CgogICAgICAgICAgaWYgKF9faSAhPSBfX2xlbikKICAgICAgICAgICAgX190
ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICB9CgoKICAgICAgd2hpbGUgKF9fdGVtcF91bml0c1sw
XSA9PSBfX2N0eXBlLndpZGVuKCcwJykpCiAgICAgICAgX190ZW1wX3VuaXRzLmVyYXNlKF9fdGVt
cF91bml0cy5iZWdpbigpKTsKCiAgICAgIGlmIChfX3NpZ24uc2l6ZSgpICYmIF9fc2lnbiA9PSBf
X25lZ19zaWduKQogICAgICAgIF9fdGVtcF91bml0cy5pbnNlcnQoX190ZW1wX3VuaXRzLmJlZ2lu
KCksIF9fY3R5cGUud2lkZW4oJy0nKSk7CgoKICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpICYm
IF9fZ3JvdXBpbmdfdG1wLnNpemUoKSkKICAgICAgICB7CiAgICAgICAgICBpZiAoIV9fdmVyaWZ5
X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZ3JvdXBpbmdfdG1wKSkKICAgICAgICAgICAgX190ZXN0
dmFsaWQgPSBmYWxzZTsKICAgICAgICB9CgoKICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAg
ICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwoKCiAgICAgIGlmICghX190ZXN0dmFsaWQgfHwg
IV9fdGVtcF91bml0cy5zaXplKCkpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7
CiAgICAgIGVsc2UKCiAgICAgICAgX190ZW1wX3VuaXRzLnN3YXAoX191bml0cyk7CgogICAgICBy
ZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoK
ICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNo
YXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgbG9uZyBkb3VibGUgX191bml0cykgY29uc3QKICAg
IHsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3Qg
Y3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2Mp
OwoKCiAgICAgIGludCBfX2NzX3NpemUgPSA2NDsKICAgICAgY2hhciogX19jcyA9IHN0YXRpY19j
YXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICBpbnQgX19sZW4g
PSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgIiUuMDFMZiIsIF9fdW5pdHMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUpOwoKICAgICAgaWYg
KF9fbGVuID49IF9fY3Nfc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX2NzX3NpemUgPSBfX2xl
biArIDE7CiAgICAgICAgICBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxv
Y2EoX19jc19zaXplKSk7CiAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywg
X19jc19zaXplLCAiJS4wMUxmIiwgX191bml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfU19jX2xvY2FsZSk7CiAgICAgICAgfQoKCgoKCgoKICAgICAgX0NoYXJUKiBfX3dz
ID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAq
IF9fY3Nfc2l6ZSkpOwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyBfX2xlbiwgX193
cyk7CiAgICAgIHN0cmluZ190eXBlIF9fZGlnaXRzKF9fd3MpOwogICAgICByZXR1cm4gdGhpcy0+
ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAg
ICBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3Ms
IGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAg
ICBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYg
bW9uZXlfYmFzZTo6cGFydCBwYXJ0OwoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5n
ZXRsb2MoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fd2lkdGggPSBzdGF0aWNfY2FzdDxzaXpl
X3R5cGU+KF9faW8ud2lkdGgoKSk7CgoKICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwg
dHJ1ZT4gX19tb25leV90cnVlOwogICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJULCBmYWxz
ZT4gX19tb25leV9mYWxzZTsKICAgICAgY29uc3QgX19tb25leV90cnVlJiBfX21wdCA9IHVzZV9m
YWNldDxfX21vbmV5X3RydWU+KF9fbG9jKTsKICAgICAgY29uc3QgX19tb25leV9mYWxzZSYgX19t
cGYgPSB1c2VfZmFjZXQ8X19tb25leV9mYWxzZT4oX19sb2MpOwogICAgICBjb25zdCBjdHlwZTxf
Q2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgoKCiAg
ICAgIGNvbnN0IGNoYXJfdHlwZSogX19iZWcgPSBfX2RpZ2l0cy5kYXRhKCk7CiAgICAgIGNvbnN0
IGNoYXJfdHlwZSogX19lbmQgPSBfX2JlZyArIF9fZGlnaXRzLnNpemUoKTsKICAgICAgbW9uZXlf
YmFzZTo6cGF0dGVybiBfX3A7CiAgICAgIHN0cmluZ190eXBlIF9fc2lnbjsKICAgICAgaWYgKCpf
X2JlZyAhPSBfX2N0eXBlLndpZGVuKCctJykpCiAgICAgICAgewogICAgICAgICAgX19wID0gX19p
bnRsID8gX19tcHQucG9zX2Zvcm1hdCgpIDogX19tcGYucG9zX2Zvcm1hdCgpOwogICAgICAgICAg
X19zaWduID1fX2ludGwgPyBfX21wdC5wb3NpdGl2ZV9zaWduKCkgOiBfX21wZi5wb3NpdGl2ZV9z
aWduKCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX19wID0gX19p
bnRsID8gX19tcHQubmVnX2Zvcm1hdCgpIDogX19tcGYubmVnX2Zvcm1hdCgpOwogICAgICAgICAg
X19zaWduID1fX2ludGwgPyBfX21wdC5uZWdhdGl2ZV9zaWduKCkgOiBfX21wZi5uZWdhdGl2ZV9z
aWduKCk7CiAgICAgICAgICArK19fYmVnOwogICAgICAgIH0KCgogICAgICBfX2VuZCA9IF9fY3R5
cGUuc2Nhbl9ub3QoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYmVnLCBfX2VuZCk7CiAgICAgIGlmIChf
X2JlZyAhPSBfX2VuZCkKICAgICAgICB7CgoKCiAgICAgICAgICBzdHJpbmdfdHlwZSBfX3JlczsK
ICAgICAgICAgIHN0cmluZ190eXBlIF9fdmFsdWU7CiAgICAgICAgICBjb25zdCBzdHJpbmdfdHlw
ZSBfX3N5bWJvbCA9IF9faW50bCA/IF9fbXB0LmN1cnJfc3ltYm9sKCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuY3Vycl9zeW1ib2woKTsKCgog
ICAgICAgICAgY29uc3QgaW50IF9fZnJhYyA9IF9faW50bCA/IF9fbXB0LmZyYWNfZGlnaXRzKCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5mcmFjX2RpZ2l0cygp
OwogICAgICAgICAgaWYgKF9fZnJhYyA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBj
b25zdCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9wb2ludCgpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmRlY2ltYWxfcG9p
bnQoKTsKICAgICAgICAgICAgICBpZiAoX19lbmQgLSBfX2JlZyA+PSBfX2ZyYWMpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUgPSBzdHJpbmdfdHlwZShfX2VuZCAt
IF9fZnJhYywgX19lbmQpOwogICAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydChfX3ZhbHVl
LmJlZ2luKCksIF9fZCk7CiAgICAgICAgICAgICAgICAgIF9fZW5kIC09IF9fZnJhYzsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CgogICAgICAg
ICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19iZWcsIF9fZW5kKTsKICAgICAgICAg
ICAgICAgICAgaW50IF9fcGFkZGVjID0gX19mcmFjIC0gKF9fZW5kIC0gX19iZWcpOwogICAgICAg
ICAgICAgICAgICBjaGFyX3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbignMCcpOwogICAgICAg
ICAgICAgICAgICBfX3ZhbHVlLmluc2VydChfX3ZhbHVlLmJlZ2luKCksIF9fcGFkZGVjLCBfX3pl
cm8pOwogICAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydChfX3ZhbHVlLmJlZ2luKCksIF9f
ZCk7CiAgICAgICAgICAgICAgICAgIF9fYmVnID0gX19lbmQ7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KCgoKICAgICAgICAgIGlmIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19pbnRsID8gX19tcHQu
Z3JvdXBpbmcoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogX19tcGYuZ3JvdXBpbmcoKTsKICAgICAgICAgICAgICBpZiAoX19ncm91cGluZy5zaXplKCkp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3Nl
cCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5kc19zZXAoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi50aG91c2FuZHNfc2VwKCk7CiAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2JlZyA9IF9fZ3JvdXBpbmcuY19zdHIoKTsKICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19nZW5kID0gX19nYmVnICsgX19ncm91cGluZy5z
aXplKCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBfX24gPSAoX19lbmQgLSBfX2JlZykg
KiAyOwogICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fd3MyID0KICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICog
X19uKSk7CiAgICAgICAgICAgICAgICAgIF9DaGFyVCogX193c19lbmQgPSBfX2FkZF9ncm91cGlu
ZyhfX3dzMiwgX19zZXAsIF9fZ2JlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZ2VuZCwgX19iZWcsIF9fZW5kKTsKICAgICAgICAgICAgICAg
ICAgX192YWx1ZS5pbnNlcnQoMCwgX193czIsIF9fd3NfZW5kIC0gX193czIpOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0
KDAsIHN0cmluZ190eXBlKF9fYmVnLCBfX2VuZCkpOwogICAgICAgICAgICB9CgoKICAgICAgICAg
IGlvc19iYXNlOjpmbXRmbGFncyBfX2YgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRqdXN0
ZmllbGQ7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3ZhbHVlLnNpemUoKSArIF9fc2ln
bi5zaXplKCk7CiAgICAgICAgICBfX2xlbiArPSAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNo
b3diYXNlKSA/IF9fc3ltYm9sLnNpemUoKSA6IDA7CiAgICAgICAgICBib29sIF9fdGVzdGlwYWQg
PSBfX2YgPT0gaW9zX2Jhc2U6OmludGVybmFsICYmIF9fbGVuIDwgX193aWR0aDsKCgogICAgICAg
ICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgNDsgKytfX2kpCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBwYXJ0IF9fd2hpY2ggPSBzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRbX19pXSk7
CiAgICAgICAgICAgICAgc3dpdGNoIChfX3doaWNoKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzeW1ib2w6CiAgICAgICAgICAgICAgICAgIGlmIChf
X2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpCiAgICAgICAgICAgICAgICAgICAgX19y
ZXMgKz0gX19zeW1ib2w7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
Y2FzZSBtb25leV9iYXNlOjpzaWduOgoKCgogICAgICAgICAgICAgICAgICBpZiAoX19zaWduLnNp
emUoKSkKICAgICAgICAgICAgICAgICAgICBfX3JlcyArPSBfX3NpZ25bMF07CiAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjp2YWx1ZToKICAg
ICAgICAgICAgICAgICAgX19yZXMgKz0gX192YWx1ZTsKICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNlOgoKCgogICAgICAgICAgICAg
ICAgICBpZiAoX190ZXN0aXBhZCkKICAgICAgICAgICAgICAgICAgICBfX3JlcyArPSBzdHJpbmdf
dHlwZShfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICBfX3JlcyArPSBfX2N0eXBlLndpZGVuKF9fZmlsbCk7CiAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpub25lOgog
ICAgICAgICAgICAgICAgICBpZiAoX190ZXN0aXBhZCkKICAgICAgICAgICAgICAgICAgICBfX3Jl
cyArPSBzdHJpbmdfdHlwZShfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7CiAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgoKICAgICAgICAgIGlm
IChfX3NpZ24uc2l6ZSgpID4gMSkKICAgICAgICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX19z
aWduLmJlZ2luKCkgKyAxLCBfX3NpZ24uZW5kKCkpOwoKCiAgICAgICAgICBfX2xlbiA9IF9fcmVz
LnNpemUoKTsKICAgICAgICAgIGlmIChfX3dpZHRoID4gX19sZW4pCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBpZiAoX19mID09IGlvc19iYXNlOjpsZWZ0KQoKICAgICAgICAgICAgICAgIF9f
cmVzLmFwcGVuZChfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7CiAgICAgICAgICAgICAgZWxzZQoK
ICAgICAgICAgICAgICAgIF9fcmVzLmluc2VydCgwLCBzdHJpbmdfdHlwZShfX3dpZHRoIC0gX19s
ZW4sIF9fZmlsbCkpOwogICAgICAgICAgICAgIF9fbGVuID0gX193aWR0aDsKICAgICAgICAgICAg
fQoKCiAgICAgICAgICBmb3IgKHNpemVfdHlwZSBfX2ogPSAwOyBfX2ogPCBfX2xlbjsgKytfX2os
ICsrX19zKQogICAgICAgICAgICAqX19zID0gX19yZXNbX19qXTsKICAgICAgICB9CiAgICAgIF9f
aW8ud2lkdGgoMCk7CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB0aW1lX2Jhc2U6OmRhdGVvcmRlcgog
ICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6ZG9fZGF0ZV9vcmRlcigpIGNvbnN0CiAgICB7
IHJldHVybiB0aW1lX2Jhc2U6Om5vX29yZGVyOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIHZvaWQKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRl
cj46OgogICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlw
ZSYgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX0NoYXJUKiBfX2Zvcm1hdCkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0g
X19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVz
ZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBjdHlwZTxf
Q2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAg
IHNpemVfdCBfX2xlbiA9IGNoYXJfdHJhaXRzPF9DaGFyVD46Omxlbmd0aChfX2Zvcm1hdCk7Cgog
ICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBfX2xlbiAm
JiAhX19lcnI7ICsrX19pKQogICAgICAgIHsKICAgICAgICAgIGNoYXIgX19jID0gX19mb3JtYXRb
X19pXTsKICAgICAgICAgIGlmIChfX2MgPT0gJyUnKQogICAgICAgICAgICB7CgogICAgICAgICAg
ICAgIF9fYyA9IF9fZm9ybWF0WysrX19pXTsKICAgICAgICAgICAgICBjaGFyIF9fbW9kID0gMDsK
ICAgICAgICAgICAgICBpbnQgX19tZW0gPSAwOwogICAgICAgICAgICAgIGlmIChfX2MgPT0gJ0Un
IHx8IF9fYyA9PSAnTycpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbW9k
ID0gX19jOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX2Zvcm1hdFsrK19faV07CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgc3dpdGNoIChfX2MpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fY3M7CiAgICAgICAgICAgICAgICAgIF9DaGFy
VCBfX3djc1sxMF07CiAgICAgICAgICAgICAgICBjYXNlICdhJzoKCiAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXJfdHlwZSogX19kYXlzMVs3XTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9k
YXlzX2FiYnJldmlhdGVkKF9fZGF5czEpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25h
bWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2RheXMxLCA3LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgIGNhc2UgJ0EnOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBl
KiBfX2RheXMyWzddOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX2RheXMoX19kYXlzMik7CiAg
ICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX3dk
YXksIF9fZGF5czIsIDcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vycik7
CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnaCc6CiAgICAg
ICAgICAgICAgICBjYXNlICdiJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog
X19tb250aHMxWzEyXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9tb250aHNfYWJicmV2aWF0
ZWQoX19tb250aHMxKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBf
X2VuZCwgX190bS0+dG1fbW9uLCBfX21vbnRoczEsIDEyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgIGNhc2UgJ0InOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX21vbnRo
czJbMTJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX21vbnRocyhfX21vbnRoczIpOwogICAg
ICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tb24s
IF9fbW9udGhzMiwgMTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vycik7
CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnYyc6CgogICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZHRbMl07CiAgICAgICAgICAgICAgICAg
IF9fdHAuX01fZGF0ZV90aW1lX2Zvcm1hdHMoX19kdCk7CiAgICAgICAgICAgICAgICAgIF9NX2V4
dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kdFswXSk7CiAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnZCc6CgogICAgICAgICAgICAgICAgICBf
TV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21kYXksIDEsIDMxLCAyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnRCc6CgogICAgICAgICAgICAgICAg
ICBfX2NzID0gIiVtLyVkLyV5IjsKICAgICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2Nz
LCBfX2NzICsgOSwgX193Y3MpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3Jt
YXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICBjYXNlICdIJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9f
YmVnLCBfX2VuZCwgX190bS0+dG1faG91ciwgMCwgMjMsIDIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICBjYXNlICdJJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVt
KF9fYmVnLCBfX2VuZCwgX190bS0+dG1faG91ciwgMSwgMTIsIDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICBjYXNlICdtJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3Rf
bnVtKF9fYmVnLCBfX2VuZCwgX19tZW0sIDEsIDEyLCAyLCBfX2N0eXBlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGlmICghX19lcnIp
CiAgICAgICAgICAgICAgICAgICAgX190bS0+dG1fbW9uID0gX19tZW0gLSAxOwogICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ00nOgoKICAgICAgICAgICAgICAg
ICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9taW4sIDAsIDU5LCAyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbic6CiAgICAgICAgICAgICAg
ICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09ICdcbicpCiAgICAgICAgICAgICAg
ICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgIGNhc2UgJ1InOgoKICAgICAgICAgICAgICAgICAgX19jcyA9ICIlSDolTSI7
CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDYsIF9fd2NzKTsK
ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19p
bywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnUyc6
CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRt
X3NlYywgMCwgNTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUs
IF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd0
JzoKICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkgPT0gJ1x0
JykKICAgICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdUJzoKCiAgICAgICAgICAgICAgICAgIF9f
Y3MgPSAiJUg6JU06JVMiOwogICAgICAgICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9f
Y3MgKyA5LCBfX3djcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChf
X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX193Y3MpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgIGNhc2UgJ3gnOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2Rh
dGVzWzJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX2RhdGVfZm9ybWF0cyhfX2RhdGVzKTsK
ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19p
bywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2RhdGVzWzBdKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNl
ICdYJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX190aW1lc1syXTsKICAg
ICAgICAgICAgICAgICAgX190cC5fTV90aW1lX2Zvcm1hdHMoX190aW1lcyk7CiAgICAgICAgICAg
ICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBf
X3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190aW1lc1swXSk7
CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAneSc6CgogICAg
ICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX3llYXIs
IDAsIDk5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vy
cik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnWSc6Cgog
ICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fbWVtLCAwLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSwgNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwog
ICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICAgICAgICAgIF9fdG0tPnRt
X3llYXIgPSBfX21lbSAtIDE5MDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgY2FzZSAnWic6CgogICAgICAgICAgICAgICAgICBpZiAoX19jdHlwZS5pcyhjdHlwZV9i
YXNlOjp1cHBlciwgKl9fYmVnKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX190bXA7CiAgICAgICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUo
X19iZWcsIF9fZW5kLCBfX3RtcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfU190aW1lem9uZXMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMTQsIF9fZXJyKTsKCgogICAgICAgICAgICAgICAgICAgICAgY2hh
cl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgICAgICAgICAgICAgICAgIGlmICghX19lcnIgJiYg
X190bXAgPT0gMAogICAgICAgICAgICAgICAgICAgICAgICAgICYmIChfX2MgPT0gX19jdHlwZS53
aWRlbignLScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9fYyA9PSBfX2N0eXBl
LndpZGVuKCcrJykpKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtcCwgMCwgMjMsIDIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9f
dG1wLCAwLCA1OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CgogICAgICAgICAgICAgICAgICAg
ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKCiAgICAg
ICAgICAgICAgICAgIGlmIChfX2MgPT0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSkKICAgICAg
ICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0
ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJh
Y3RfbnVtKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIs
CiAgICAgICAgICAgICAgICAgICBpbnQgX19taW4sIGludCBfX21heCwgc2l6ZV90IF9fbGVuLAog
ICAgICAgICAgICAgICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSwKICAgICAgICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3QKICAgIHsKICAgICAgc2l6
ZV90IF9faSA9IDA7CiAgICAgIHN0cmluZyBfX2RpZ2l0czsKICAgICAgYm9vbCBfX3Rlc3R2YWxp
ZCA9IHRydWU7CiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgIHdoaWxlIChfX2Jl
ZyAhPSBfX2VuZCAmJiBfX2kgPCBfX2xlbgogICAgICAgICAgICAgJiYgX19jdHlwZS5pcyhjdHlw
ZV9iYXNlOjpkaWdpdCwgX19jKSkKICAgICAgICB7CiAgICAgICAgICBfX2RpZ2l0cyArPSBfX2N0
eXBlLm5hcnJvdyhfX2MsIDApOwogICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAg
ICsrX19pOwogICAgICAgIH0KICAgICAgaWYgKF9faSA9PSBfX2xlbikKICAgICAgICB7CiAgICAg
ICAgICBpbnQgX192YWx1ZSA9IGF0b2koX19kaWdpdHMuY19zdHIoKSk7CiAgICAgICAgICBpZiAo
X19taW4gPD0gX192YWx1ZSAmJiBfX3ZhbHVlIDw9IF9fbWF4KQogICAgICAgICAgICBfX21lbWJl
ciA9IF9fdmFsdWU7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFs
c2U7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAg
ICAgaWYgKCFfX3Rlc3R2YWxpZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsK
ICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg
ICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfbmFt
ZShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNpemVfdCBfX2luZGV4bGVu
LAogICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3QKICAg
IHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAg
IGludCogX19tYXRjaGVzID0gc3RhdGljX2Nhc3Q8aW50Kj4oX19idWlsdGluX2FsbG9jYShzaXpl
b2YoaW50KSAqIF9faW5kZXhsZW4pKTsKICAgICAgc2l6ZV90IF9fbm1hdGNoZXMgPSAwOwogICAg
ICBzaXplX3QgX19wb3MgPSAwOwogICAgICBib29sIF9fdGVzdHZhbGlkID0gdHJ1ZTsKICAgICAg
Y29uc3QgY2hhcl90eXBlKiBfX25hbWU7CgogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwoK
ICAgICAgZm9yIChzaXplX3QgX19pMSA9IDA7IF9faTEgPCBfX2luZGV4bGVuOyArK19faTEpCiAg
ICAgICAgaWYgKF9fYyA9PSBfX25hbWVzW19faTFdWzBdKQogICAgICAgICAgX19tYXRjaGVzW19f
bm1hdGNoZXMrK10gPSBfX2kxOwoKICAgICAgd2hpbGUoX19ubWF0Y2hlcyA+IDEpCiAgICAgICAg
ewoKICAgICAgICAgIHNpemVfdCBfX21pbmxlbiA9IDEwOwogICAgICAgICAgZm9yIChzaXplX3Qg
X19pMiA9IDA7IF9faTIgPCBfX25tYXRjaGVzOyArK19faTIpCiAgICAgICAgICAgIF9fbWlubGVu
ID0gbWluKF9fbWlubGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RyYWl0c190eXBl
OjpsZW5ndGgoX19uYW1lc1tfX21hdGNoZXNbX19pMl1dKSk7CgogICAgICAgICAgaWYgKF9fcG9z
IDwgX19taW5sZW4gJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICArK19fcG9zOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgX19pMyA9IDA7IF9faTMgPCBfX25tYXRjaGVzOyArK19faTMpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbmFtZSA9IF9fbmFtZXNbX19tYXRjaGVzW19f
aTNdXTsKICAgICAgICAgICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gIT0gX19jKQogICAgICAg
ICAgICAgICAgICAgIF9fbWF0Y2hlc1tfX2kzXSA9IF9fbWF0Y2hlc1stLV9fbm1hdGNoZXNdOwog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAg
IGJyZWFrOwogICAgICAgIH0KCiAgICAgIGlmIChfX25tYXRjaGVzID09IDEpCiAgICAgICAgewoK
ICAgICAgICAgIF9fbmFtZSA9IF9fbmFtZXNbX19tYXRjaGVzWzBdXTsKICAgICAgICAgIGNvbnN0
IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgICAg
d2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0gX19lbmQgJiYgX19uYW1lW19fcG9zXSA9
PSAqX19iZWcpCiAgICAgICAgICAgICsrX19iZWcsICsrX19wb3M7CgogICAgICAgICAgaWYgKF9f
bGVuID09IF9fcG9zKQogICAgICAgICAgICBfX21lbWJlciA9IF9fbWF0Y2hlc1swXTsKICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAg
IGVsc2UKICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICBpZiAoIV9fdGVzdHZhbGlk
KQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dl
dDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF90aW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRl
cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAgIF9DaGFyVCBfX3djc1sz
XTsKICAgICAgY29uc3QgY2hhciogX19jcyA9ICIlWCI7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9f
aW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFj
ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2Nz
ICsgMywgX193Y3MpOwogICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBf
X2lvLCBfX2VyciwgX190bSwgX193Y3MpOwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAg
ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVy
CiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF9kYXRlKGl0ZXJfdHlw
ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAgIF9D
aGFyVCBfX3djc1szXTsKICAgICAgY29uc3QgY2hhciogX19jcyA9ICIleCI7CiAgICAgIGxvY2Fs
ZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5
cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX19jdHlwZS53aWRl
bihfX2NzLCBfX2NzICsgMywgX193Y3MpOwogICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19i
ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwgX193Y3MpOwogICAgICBpZiAoX19iZWcgPT0g
X19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9f
YmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+
CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF93
ZWVrZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK
ICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNv
bnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBl
OwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBfX3RpbWVwdW5jdDxf
Q2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xv
Yyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXlzWzddOwogICAgICBfX3RwLl9NX2RheXNf
YWJicmV2aWF0ZWQoX19kYXlzKTsKICAgICAgaW50IF9fdG1wd2RheTsKICAgICAgX01fZXh0cmFj
dF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXB3ZGF5LCBfX2RheXMsIDcsIF9fZXJyKTsKCgoKCgoK
CiAgICAgIGlmICghX19lcnIpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fcG9zID0gX190
cmFpdHNfdHlwZTo6bGVuZ3RoKF9fZGF5c1tfX3RtcHdkYXldKTsKICAgICAgICAgIF9fdHAuX01f
ZGF5cyhfX2RheXMpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX25hbWUgPSBfX2RheXNb
X190bXB3ZGF5XTsKICAgICAgICAgIGlmIChfX25hbWVbX19wb3NdID09ICpfX2JlZykKICAgICAg
ICAgICAgewoKICAgICAgICAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3RyYWl0c190eXBl
OjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgICAgICB3aGlsZSAoX19wb3MgPCBfX2xlbiAmJiBf
X2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAmJiBfX25hbWVbX19wb3NdID09ICpf
X2JlZykKICAgICAgICAgICAgICAgICsrX19iZWcsICsrX19wb3M7CiAgICAgICAgICAgICAgaWYg
KF9fbGVuICE9IF9fcG9zKQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi
aXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICghX19lcnIpCiAgICAgICAgICAgIF9fdG0t
PnRtX3dkYXkgPSBfX3RtcHdkYXk7CiAgICAgICAgfQogICAgICBpZiAoX19iZWcgPT0gX19lbmQp
CiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwog
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg
X0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfbW9udGhu
YW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLAogICAgICAgICAgICAgICAgICAg
ICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29u
c3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7
CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0PF9D
aGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9j
KTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX21vbnRoc1sxMl07CiAgICAgIF9fdHAuX01fbW9u
dGhzX2FiYnJldmlhdGVkKF9fbW9udGhzKTsKICAgICAgaW50IF9fdG1wbW9uOwogICAgICBfTV9l
eHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtcG1vbiwgX19tb250aHMsIDEyLCBfX2Vycik7
CgoKCgoKCgogICAgICBpZiAoIV9fZXJyKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3Bv
cyA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX21vbnRoc1tfX3RtcG1vbl0pOwogICAgICAgICAg
X190cC5fTV9tb250aHMoX19tb250aHMpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX25h
bWUgPSBfX21vbnRoc1tfX3RtcG1vbl07CiAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSA9PSAq
X19iZWcpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0g
X190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9fcG9z
IDwgX19sZW4gJiYgX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAgJiYgX19uYW1l
W19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwogICAg
ICAgICAgICAgIGlmIChfX2xlbiAhPSBfX3BvcykKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlv
c19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoIV9fZXJyKQogICAg
ICAgICAgICBfX3RtLT50bV9tb24gPSBfX3RtcG1vbjsKICAgICAgICB9CgogICAgICBpZiAoX19i
ZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0
dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRv
X2dldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p
bywKICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNv
bnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0
IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9j
KTsKCiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgIHNpemVfdCBfX2kgPSAwOwog
ICAgICBzdHJpbmcgX19kaWdpdHM7CiAgICAgIHdoaWxlIChfX2kgPCA0ICYmIF9fYmVnICE9IF9f
ZW5kICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYykpCiAgICAgICAgewogICAg
ICAgICAgX19kaWdpdHMgKz0gX19jdHlwZS5uYXJyb3coX19jLCAwKTsKICAgICAgICAgIF9fYyA9
ICooKytfX2JlZyk7CiAgICAgICAgICArK19faTsKICAgICAgICB9CiAgICAgIGlmIChfX2kgPT0g
MiB8fCBfX2kgPT0gNCkKICAgICAgICB7CiAgICAgICAgICBsb25nIF9fbDsKICAgICAgICAgIF9f
Y29udmVydF90b192KF9fZGlnaXRzLmNfc3RyKCksIF9fbCwgX19lcnIsIF9TX2NfbG9jYWxlKTsK
ICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpICYmIF9fbCA8PSAyMTQ3
NDgzNjQ3KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19sID0gX19pID09IDIgPyBfX2wg
OiBfX2wgLSAxOTAwOwogICAgICAgICAgICAgIF9fdG0tPnRtX3llYXIgPSBzdGF0aWNfY2FzdDxp
bnQ+KF9fbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2Vy
ciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAg
IF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVy
CiAgICB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBwdXQoaXRlcl90eXBlIF9fcywg
aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgY29uc3Qg
X0NoYXJUKiBfX2JlZywgY29uc3QgX0NoYXJUKiBfX2VuZCkgY29uc3QKICAgIHsKICAgICAgbG9j
YWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19j
dHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICB3aGlsZSAoX19i
ZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgY2hhciBfX2MgPSBfX2N0eXBlLm5hcnJv
dygqX19iZWcsIDApOwogICAgICAgICAgKytfX2JlZzsKICAgICAgICAgIGlmIChfX2MgPT0gJyUn
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhciBfX2Zvcm1hdDsKICAgICAgICAgICAg
ICBjaGFyIF9fbW9kID0gMDsKICAgICAgICAgICAgICBzaXplX3QgX19sZW4gPSAxOwogICAgICAg
ICAgICAgIF9fYyA9IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCk7CiAgICAgICAgICAgICAgKytf
X2JlZzsKICAgICAgICAgICAgICBpZiAoX19jID09ICdFJyB8fCBfX2MgPT0gJ08nKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX21vZCA9IF9fYzsKICAgICAgICAgICAgICAg
ICAgX19mb3JtYXQgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwogICAgICAgICAgICAgICAg
ICArK19fYmVnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgIF9fZm9ybWF0ID0gX19jOwogICAgICAgICAgICAgIF9fcyA9IHRoaXMtPmRvX3B1dChf
X3MsIF9faW8sIGNoYXJfdHlwZSgpLCBfX3RtLCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19tb2QpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAqX19zID0gX19jOwogICAgICAgICAgICAgICsrX19zOwog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIHRp
bWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3Nf
YmFzZSYgX19pbywgY2hhcl90eXBlLCBjb25zdCB0bSogX190bSwKICAgICAgICAgICBjaGFyIF9f
Zm9ybWF0LCBjaGFyIF9fbW9kKSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lv
LmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0
PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3Qm
IF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKCgoKICAgICAg
Y29uc3Qgc2l6ZV90IF9fbWF4bGVuID0gNjQ7CiAgICAgIGNoYXJfdHlwZSogX19yZXMgPQogICAg
ICAgIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGNoYXJf
dHlwZSkgKiBfX21heGxlbikpOwoKCgoKCgogICAgICBjaGFyX3R5cGUgX19mbXRbNF07CiAgICAg
IF9fZm10WzBdID0gX19jdHlwZS53aWRlbignJScpOwogICAgICBpZiAoIV9fbW9kKQogICAgICAg
IHsKICAgICAgICAgIF9fZm10WzFdID0gX19mb3JtYXQ7CiAgICAgICAgICBfX2ZtdFsyXSA9IGNo
YXJfdHlwZSgpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9fZm10
WzFdID0gX19tb2Q7CiAgICAgICAgICBfX2ZtdFsyXSA9IF9fZm9ybWF0OwogICAgICAgICAgX19m
bXRbM10gPSBjaGFyX3R5cGUoKTsKICAgICAgICB9CgogICAgICBfX3RwLl9NX3B1dChfX3Jlcywg
X19tYXhsZW4sIF9fZm10LCBfX3RtKTsKCgogICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0
czxjaGFyX3R5cGU+OjpsZW5ndGgoX19yZXMpOwogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBf
X2kgPCBfX2xlbjsgKytfX2ksICsrX19zKQogICAgICAgICpfX3MgPSBfX3Jlc1tfX2ldOwogICAg
ICByZXR1cm4gX19zOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu
dAogICAgY29sbGF0ZTxfQ2hhclQ+OjpfTV9jb21wYXJlKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9D
aGFyVCopIGNvbnN0CiAgICB7IHJldHVybiAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBzaXplX3QKICAgIGNvbGxhdGU8X0NoYXJUPjo6X01fdHJhbnNmb3JtKF9DaGFyVCos
IGNvbnN0IF9DaGFyVCosIHNpemVfdCkgY29uc3QKICAgIHsgcmV0dXJuIDA7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW50CiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAgZG9f
Y29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAg
ICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAog
ICAgewogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX29uZShfX2xvMSwgX19oaTEpOwogICAgICBj
b25zdCBzdHJpbmdfdHlwZSBfX3R3byhfX2xvMiwgX19oaTIpOwogICAgICByZXR1cm4gX01fY29t
cGFyZShfX29uZS5jX3N0cigpLCBfX3R3by5jX3N0cigpKTsKICAgIH0KCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBjb2xsYXRlPF9DaGFyVD46OnN0cmluZ190eXBlCiAg
ICBjb2xsYXRlPF9DaGFyVD46OgogICAgZG9fdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywg
Y29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgewogICAgICBzaXplX3QgX19sZW4gPSAoX19o
aSAtIF9fbG8pICogMjsKCiAgICAgIF9DaGFyVCogX19jID0KICAgICAgICBzdGF0aWNfY2FzdDxf
Q2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX19sZW4pKTsKICAgICAg
c2l6ZV90IF9fcmVzID0gX01fdHJhbnNmb3JtKF9fYywgX19sbywgX19sZW4pOwoKICAgICAgaWYg
KF9fcmVzID49IF9fbGVuKQogICAgICAgIHsKICAgICAgICAgIF9fYyA9CiAgICAgICAgICAgIHN0
YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX19y
ZXMgKyAxKSkpOwogICAgICAgICAgX01fdHJhbnNmb3JtKF9fYywgX19sbywgX19yZXMgKyAxKTsK
ICAgICAgICB9CiAgICAgIHJldHVybiBzdHJpbmdfdHlwZShfX2MpOwogICAgfQoKIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvbmcKICAgIGNvbGxhdGU8X0NoYXJUPjo6CiAgICBkb19o
YXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgewog
ICAgICB1bnNpZ25lZCBsb25nIF9fdmFsID0gMDsKICAgICAgZm9yICg7IF9fbG8gPCBfX2hpOyAr
K19fbG8pCiAgICAgICAgX192YWwgPSAqX19sbyArICgoX192YWwgPDwgNykgfAogICAgICAgICAg
ICAgICAgICAgICAgIChfX3ZhbCA+PiAobnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz46OmRp
Z2l0cyAtIDcpKSk7CiAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxsb25nPihfX3ZhbCk7CiAgICB9
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KICAgIHZvaWQKICAgIF9fY29udmVydF90b192
KGNvbnN0IGNoYXIqIF9faW4sIF9UdiYgX19vdXQsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwK
ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fYmFzZSA9
IDEwKTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KICAgIGludAogICAgX19jb252ZXJ0
X2Zyb21fdihjaGFyKiBfX291dCwgY29uc3QgaW50IF9fc2l6ZSwgY29uc3QgY2hhciogX19mbXQs
CiAgICAgICAgICAgICAgICAgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19w
cmVjID0gLTEpCiAgICB7CiAgICAgIGludCBfX3JldDsKICAgICAgY2hhciogX19vbGQgPSBzdHJk
dXAoc2V0bG9jYWxlKF9fTENfQUxMLCBfX251bGwpKTsKICAgICAgc2V0bG9jYWxlKF9fTENfQUxM
LCAiQyIpOwogICAgICBpZiAoX19wcmVjID49IDApCiAgICAgICAgX19yZXQgPSBzbnByaW50Zihf
X291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOwogICAgICBlbHNlCiAgICAgICAgX19y
ZXQgPSBzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX192KTsKICAgICAgc2V0bG9jYWxl
KF9fTENfQUxMLCBfX29sZCk7CiAgICAgIGZyZWUoX19vbGQpOwogICAgICByZXR1cm4gX19yZXQ7
CiAgICB9CiMgMjAxOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFj
ZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIHN0cnVjdCBfX3BhZAogICAgewogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19wYWQoaW9z
X2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIF9DaGFyVCogX19uZXdzLAogICAgICAgICAgICAg
Y29uc3QgX0NoYXJUKiBfX29sZHMsIGNvbnN0IHN0cmVhbXNpemUgX19uZXdsZW4sCiAgICAgICAg
ICAgICBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuLCBjb25zdCBib29sIF9fbnVtKTsKICAgIH07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQK
ICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChpb3NfYmFzZSYgX19pbywgX0NoYXJU
IF9fZmlsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fbmV3
cywgY29uc3QgX0NoYXJUKiBfX29sZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuLCBjb25zdCBib29sIF9fbnVtKQogICAg
ewogICAgICBzaXplX3QgX19wbGVuID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX25ld2xlbiAtIF9f
b2xkbGVuKTsKICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1
aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX19wbGVuKSk7CiAgICAgIF9UcmFpdHM6OmFz
c2lnbihfX3BhZHMsIF9fcGxlbiwgX19maWxsKTsKCiAgICAgIF9DaGFyVCogX19iZWc7CiAgICAg
IF9DaGFyVCogX19lbmQ7CiAgICAgIHNpemVfdCBfX21vZCA9IDA7CiAgICAgIHNpemVfdCBfX2Jl
Z2xlbjsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYWRqdXN0ID0gX19pby5mbGFncygpICYg
aW9zX2Jhc2U6OmFkanVzdGZpZWxkOwoKICAgICAgaWYgKF9fYWRqdXN0ID09IGlvc19iYXNlOjps
ZWZ0KQogICAgICAgIHsKCiAgICAgICAgICBfX2JlZyA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19v
bGRzKTsKICAgICAgICAgIF9fYmVnbGVuID0gX19vbGRsZW47CiAgICAgICAgICBfX2VuZCA9IF9f
cGFkczsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYWRqdXN0ID09IGlvc19iYXNlOjppbnRl
cm5hbCAmJiBfX251bSkKICAgICAgICB7CgoKCiAgICAgICAgICBsb2NhbGUgX19sb2MgPSBfX2lv
LmdldGxvYygpOwogICAgICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9m
YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICAgICAgY29uc3QgX0NoYXJUIF9fbWlu
dXMgPSBfX2N0eXBlLndpZGVuKCctJyk7CiAgICAgICAgICBjb25zdCBfQ2hhclQgX19wbHVzID0g
X19jdHlwZS53aWRlbignKycpOwogICAgICAgICAgYm9vbCBfX3Rlc3RzaWduID0gX1RyYWl0czo6
ZXEoX19vbGRzWzBdLCBfX21pbnVzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX1Ry
YWl0czo6ZXEoX19vbGRzWzBdLCBfX3BsdXMpOwoKICAgICAgICAgIGJvb2wgX190ZXN0aGV4ID0g
X1RyYWl0czo6ZXEoX19jdHlwZS53aWRlbignMCcpLCBfX29sZHNbMF0pCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICYmIChfVHJhaXRzOjplcShfX2N0eXBlLndpZGVuKCd4JyksIF9fb2xkc1sx
XSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9UcmFpdHM6OmVxKF9fY3R5cGUu
d2lkZW4oJ1gnKSwgX19vbGRzWzFdKSk7CiAgICAgICAgICBpZiAoX190ZXN0aGV4KQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgX19uZXdzWzBdID0gX19vbGRzWzBdOwogICAgICAgICAgICAg
IF9fbmV3c1sxXSA9IF9fb2xkc1sxXTsKICAgICAgICAgICAgICBfX21vZCArPSAyOwogICAgICAg
ICAgICAgIF9fbmV3cyArPSAyOwogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAg
ICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2Fz
dDxfQ2hhclQqPihfX29sZHMgKyBfX21vZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2Ug
aWYgKF9fdGVzdHNpZ24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfVHJhaXRzOjplcSgo
X19uZXdzWzBdID0gX19vbGRzWzBdKSwgX19wbHVzKSA/IF9fcGx1cyA6IF9fbWludXM7CiAgICAg
ICAgICAgICAgKytfX21vZDsKICAgICAgICAgICAgICArK19fbmV3czsKICAgICAgICAgICAgICBf
X2JlZyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAgICAg
ICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzICsgX19tb2QpOwogICAgICAg
ICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgX19iZWcg
PSBfX3BhZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAg
X19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAg
ICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxfQ2hh
clQqPihfX29sZHMpOwogICAgICAgIH0KICAgICAgX1RyYWl0czo6Y29weShfX25ld3MsIF9fYmVn
LCBfX2JlZ2xlbik7CiAgICAgIF9UcmFpdHM6OmNvcHkoX19uZXdzICsgX19iZWdsZW4sIF9fZW5k
LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3bGVuIC0gX19iZWdsZW4gLSBfX21vZCk7
CiAgICB9CiMgMjExNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFj
ZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGJvb2wKICAgIF9fdmVy
aWZ5X2dyb3VwaW5nKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQ+JiBfX2dyb3VwaW5nLAogICAg
ICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVD4mIF9fZ3JvdXBpbmdfdG1wKQog
ICAgewogICAgICBpbnQgX19pID0gMDsKICAgICAgaW50IF9faiA9IDA7CiAgICAgIGNvbnN0IGlu
dCBfX2xlbiA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBjb25zdCBpbnQgX19uID0gX19ncm91
cGluZ190bXAuc2l6ZSgpOwogICAgICBib29sIF9fdGVzdCA9IHRydWU7CgoKCgogICAgICB3aGls
ZSAoX190ZXN0ICYmIF9faSA8IF9fbiAtIDEpCiAgICAgICAgZm9yIChfX2ogPSAwOyBfX3Rlc3Qg
JiYgX19qIDwgX19sZW4gJiYgX19pIDwgX19uIC0gMTsgKytfX2osKytfX2kpCiAgICAgICAgICBf
X3Rlc3QgJj0gX19ncm91cGluZ1tfX2pdID09IF9fZ3JvdXBpbmdfdG1wW19fbiAtIF9faSAtIDFd
OwoKCiAgICAgIF9faiA9PSBfX2xlbiA/IF9faiA9IDAgOiBfX2o7CiAgICAgIF9fdGVzdCAmPSBf
X2dyb3VwaW5nW19fal0gPj0gX19ncm91cGluZ190bXBbX19uIC0gX19pIC0gMV07CiAgICAgIHJl
dHVybiBfX3Rlc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
X0NoYXJUKgogICAgX19hZGRfZ3JvdXBpbmcoX0NoYXJUKiBfX3MsIF9DaGFyVCBfX3NlcCwKICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2JlZywgY29uc3QgY2hhciogX19nZW5kLAog
ICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2ZpcnN0LCBjb25zdCBfQ2hhclQqIF9f
bGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiAqX19nYmVnKQogICAgICAg
IHsKICAgICAgICAgIF9fcyA9IF9fYWRkX2dyb3VwaW5nKF9fcywgX19zZXAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoX19nYmVnICsgMSA9PSBfX2dlbmQgPyBfX2diZWcgOiBfX2di
ZWcgKyAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ2VuZCwgX19maXJzdCwg
X19sYXN0IC0gKl9fZ2JlZyk7CiAgICAgICAgICBfX2ZpcnN0ID0gX19sYXN0IC0gKl9fZ2JlZzsK
ICAgICAgICAgICpfX3MrKyA9IF9fc2VwOwogICAgICAgIH0KICAgICAgZG8KICAgICAgICAqX19z
KysgPSAqX19maXJzdCsrOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpOwogICAgICBy
ZXR1cm4gX19zOwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDxj
aGFyLCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1
ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPGNoYXIsIGZhbHNl
PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8Y2hhciwgdHJ1ZT47
CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X2dldDxjaGFyPjsKICBleHRlcm4gdGVtcGxh
dGUgY2xhc3MgbW9uZXlfcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1
bmN0PHdjaGFyX3QsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDx3
Y2hhcl90LCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8
d2NoYXJfdCwgZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFt
ZTx3Y2hhcl90LCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfZ2V0PHdjaGFy
X3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9wdXQ8d2NoYXJfdD47CiAgZXh0ZXJu
IHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBu
dW1wdW5jdF9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9nZXQ8Y2hh
cj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIG51bXB1bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1w
dW5jdF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9nZXQ8d2No
YXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8d2NoYXJfdD47CiAgZXh0ZXJu
IHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz
cyB0aW1lX3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXRfYnluYW1l
PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldDxjaGFyPjsKICBleHRlcm4g
dGVtcGxhdGUgY2xhc3MgdGltZV9nZXRfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyBfX3RpbWVwdW5jdDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9w
dXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTx3Y2hh
cl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXQ8d2NoYXJfdD47CiAgZXh0ZXJu
IHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxh
dGUgY2xhc3MgbWVzc2FnZXM8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2Vz
X2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXM8d2NoYXJfdD47
CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTx3Y2hhcl90PjsKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgY3R5cGVfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyBjdHlwZV9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvZGVj
dnRfYnluYW1lPGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz
IGNvZGVjdnRfYnluYW1lPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD47CiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIGNvbGxhdGU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGVf
YnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlPHdjaGFyX3Q+Owog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlX2J5bmFtZTx3Y2hhcl90PjsKCiAgZXh0ZXJu
IHRlbXBsYXRlCiAgICBjb25zdCBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4mCiAgICB1
c2VfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29sbGF0ZTxjaGFyPiYKICAgIHVzZV9mYWNl
dDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg
Y29uc3QgbnVtcHVuY3Q8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25z
dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1fcHV0PGNoYXI+Jgog
ICAgdXNlX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBjb25zdCBudW1fZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bV9nZXQ8Y2hh
cj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1
bmN0PGNoYXIsIHRydWU+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT4gPihj
b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0PGNo
YXIsIGZhbHNlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PGNoYXIsIGZhbHNlPiA+KGNvbnN0
IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5X3B1dDxjaGFyPiYK
ICAgIHVzZV9mYWNldDxtb25leV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJu
IHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9nZXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bW9uZXlf
Z2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3Qg
X190aW1lcHVuY3Q8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8Y2hhcj4gPihjb25z
dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1lX3B1dDxjaGFyPiYK
ICAgIHVzZV9mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g
dGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0PHRpbWVfZ2V0
PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbWVz
c2FnZXM8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bWVzc2FnZXM8Y2hhcj4gPihjb25zdCBsb2NhbGUm
KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1i
c3RhdGVfdD4mCiAgICB1c2VfZmFjZXQ8Y29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+
ID4obG9jYWxlIGNvbnN0Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29sbGF0ZTx3
Y2hhcl90PiYKICAgIHVzZV9mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtcHVuY3Q8d2NoYXJfdD4mCiAgICB1c2Vf
ZmFjZXQ8bnVtcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs
YXRlCiAgICBjb25zdCBudW1fcHV0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG51bV9wdXQ8d2No
YXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1f
Z2V0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG51bV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2Nh
bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0PHdjaGFyX3QsIHRy
dWU+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT4gPihjb25zdCBsb2Nh
bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0PHdjaGFyX3QsIGZh
bHNlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPiA+KGNvbnN0IGxv
Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5X3B1dDx3Y2hhcl90PiYK
ICAgIHVzZV9mYWNldDxtb25leV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9nZXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8
bW9uZXlfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog
ICAgY29uc3QgX190aW1lcHVuY3Q8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8
d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0
aW1lX3B1dDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDx0aW1lX3B1dDx3Y2hhcl90PiA+KGNvbnN0
IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfZ2V0PHdjaGFyX3Q+
JgogICAgdXNlX2ZhY2V0PHRpbWVfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4
dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbWVzc2FnZXM8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8
bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCgogIGV4dGVybiB0ZW1wbGF0ZQog
ICAgYm9vbAogICAgaGFzX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4
dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvZGVjdnQ8Y2hhciwgY2hhciwg
bWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wK
ICAgIGhhc19mYWNldDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0
ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bXB1bmN0PGNoYXI+ID4oY29uc3QgbG9j
YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bV9wdXQ8
Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBo
YXNfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh
dGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxl
Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5X3B1dDxj
aGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhh
c19mYWNldDxtb25leV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs
YXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8X190aW1lcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2Nh
bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9wdXQ8
Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBo
YXNfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs
YXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8Y2hhcj4gPihjb25zdCBsb2NhbGUm
KTsKCiBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjdHlwZTx3Y2hhcl90
PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19m
YWNldDxjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsK
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y29sbGF0ZTx3Y2hhcl90
PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19m
YWNldDxudW1wdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh
dGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1fcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxl
Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bV9nZXQ8d2No
YXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBo
YXNfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g
dGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9wdXQ8d2NoYXJfdD4gPihjb25z
dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9u
ZXlfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg
Ym9vbAogICAgaGFzX2ZhY2V0PF9fdGltZXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PHRpbWVfcHV0PHdjaGFy
X3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFz
X2ZhY2V0PHRpbWVfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1w
bGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1lc3NhZ2VzPHdjaGFyX3Q+ID4oY29uc3QgbG9j
YWxlJik7Cn0KIyA0NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvbG9jYWxlIiAyIDMKIyAz
OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9vc3RyZWFtLnRjYyIgMiAzCgpuYW1l
c3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6CiAgICBzZW50cnko
YmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MpCiAgICA6IF9NX29rKF9fb3MuZ29v
ZCgpKSwgX01fb3MoX19vcykKICAgIHsKCiAgICAgIGlmIChfTV9vayAmJiBfX29zLnRpZSgpKQog
ICAgICAgIF9fb3MudGllKCktPmZsdXNoKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KF9f
b3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBlJikpCiAgICB7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9y
PDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpCiAgICB7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwo
aW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg
ICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoX19zdHJlYW1idWZf
dHlwZSogX19zYmluKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYg
KF9fY2VyYiAmJiBfX3NiaW4pCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpZiAoIV9fY29weV9zdHJlYW1idWZzKCp0aGlzLCBfX3NiaW4sIHRoaXMt
PnJkYnVmKCkpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxi
aXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk
Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgIGVsc2UgaWYgKCFfX3NiaW4pCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGJvb2wg
X19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChf
TV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0
LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAg
ICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlv
c19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu
dW1wdXQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZh
bHNlOwogICAgICAgICAgICAgICAgICBpZiAoKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCkgfHwgKF9f
Zm10ICYgaW9zX2Jhc2U6OmhleCkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbG9uZyBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihf
X24pOwogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAq
dGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgq
dGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgaWYgKF9f
YikKICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u
JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PCh1
bnNpZ25lZCBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAg
IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBp
ZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxl
ZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBsb25nIF9fbikKICAg
IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAg
ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19j
ID0gdGhpcy0+ZmlsbCgpOwogICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9
IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgICAgICAgIGlmIChf
TV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgYm9vbCBfX2IgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgaWYgKChfX2ZtdCAmIGlv
c19iYXNlOjpvY3QpIHx8IChfX2ZtdCAmIGlvc19iYXNlOjpoZXgpKQogICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2w7CiAgICAg
ICAgICAgICAgICAgICAgICBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KF9f
bik7CiAgICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0
aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0
aGlzLCAqdGhpcywgX19jLCBfX24pLmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICBpZiAoX19i
KQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVu
c2lnbmVkIGxvbmcgbG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwog
ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAg
ICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5m
YWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg
ICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGRvdWJsZSBfX24pCiAg
ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr
X2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgq
dGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46Om9wZXJhdG9yPDwobG9uZyBkb3VibGUgX19uKQogICAgewogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkK
ICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5m
aWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGNv
bnN0IHZvaWQqIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAo
X01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgp
KQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cHV0KGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg
IGludF90eXBlIF9fcHV0ID0gcmRidWYoKS0+c3B1dGMoX19jKTsKICAgICAgICAgIGlmICh0cmFp
dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19wdXQsIHRyYWl0c190eXBlOjplb2YoKSkpCiAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OndyaXRlKGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXpl
IF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgc3RyZWFtc2l6ZSBfX3B1dCA9IHRoaXMtPnJkYnVmKCktPnNw
dXRuKF9fcywgX19uKTsKICAgICAgICAgIGlmICggX19wdXQgIT0gX19uKQogICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjpmbHVzaCgpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMp
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0aGlzLT5yZGJ1Zigp
ICYmIHRoaXMtPnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5
cGVuYW1lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6dGVsbHAoKQogICAgewogICAgICBwb3NfdHlwZSBf
X3JldCA9IHBvc190eXBlKC0xKTsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgX19y
ZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNl
OjpvdXQpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlZWtwKHBvc190eXBlIF9f
cG9zKQogICAgewogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICB7CgoKICAgICAgICAg
IHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla3BvcyhfX3BvcywgaW9zX2Jh
c2U6Om91dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkp
KQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAg
IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla3Aob2ZmX3R5cGUgX19v
ZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZCkKICAgIHsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkp
CiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1
YnNlZWtvZmYoX19vZmYsIF9fZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3V0KTsKCgogICAgICAgICAgaWYgKF9fZXJyID09
IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBf
X29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1z
aXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBz
dGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9f
dyArIDEpKSk7CiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOwogICAgICAgICAgICAgIHN0
cmVhbXNpemUgX19sZW4gPSAxOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1Nf
cGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZfX2MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAg
ICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
X19vdXQud3JpdGUoX19wYWRzLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg
ICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt
PGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz
aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUg
X19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQog
ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFt
c2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIGNoYXIqIF9fcGFkcyA9IHN0
YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fdyArIDEpKTsKICAgICAgICAgICAg
ICBfX3BhZHNbMF0gPSBfX2M7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAg
ICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICBfX3BhZDxjaGFyLCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCks
IF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
X19jLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193Owog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFkcywgX19sZW4p
OwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19v
dXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAgIHR5cGVk
ZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0
eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChf
X2NlcmIgJiYgX19zKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9D
aGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXpl
b2YoX0NoYXJUKSAqIF9fdykpOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0
aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7CiAgICAgICAgICAgICAg
aWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3Bh
ZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3cs
IF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAg
ICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19v
dXQud3JpdGUoX19zLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxz
ZSBpZiAoIV9fcykKICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgcmV0dXJuIF9fb3V0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIq
IF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g
X19vc3RyZWFtX3R5cGU7CgoKCiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8Y2hhcj4gX190cmFp
dHNfdHlwZTsKCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9f
b3V0KTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3MpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90
IF9fY2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwogICAgICAgICAgX0NoYXJUKiBf
X3dzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJU
KSAqIChfX2NsZW4gKyAxKSkpOwogICAgICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwg
X19jbGVuOyArK19faSkKICAgICAgICAgICAgX193c1tfX2ldID0gX19vdXQud2lkZW4oX19zW19f
aV0pOwogICAgICAgICAgX0NoYXJUKiBfX3N0ciA9IF9fd3M7CgogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3Ry
ZWFtc2l6ZT4oX19jbGVuKTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0Lndp
ZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQq
PihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7CgogICAgICAgICAgICAg
IGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19w
YWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3MsIF9f
dywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19zdHIgPSBfX3BhZHM7CiAgICAg
ICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
IF9fb3V0LndyaXRlKF9fc3RyLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg
ICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgZWxzZSBpZiAoIV9fcykKICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4K
ICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z
dHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAg
IHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAg
ICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBp
ZiAoX19jZXJiICYmIF9fcykKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAg
ICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cp
KTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6
ZT4oX1RyYWl0czo6bGVuZ3RoKF9fcykpOwoKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4p
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPGNoYXIsIF9UcmFpdHM+
OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAg
ICAgICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBf
X3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBfX2xl
bik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBf
X291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0
LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0
aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fcykKICAgICAg
ICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuIF9fb3V0Owog
ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsCiAgICAgICAgICAg
ICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQog
ICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJl
YW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19v
dXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCog
X19zID0gX19zdHIuZGF0YSgpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0
aCgpOwogICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1
aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7CiAgICAgICAgICBzdHJlYW1zaXpl
IF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19zdHIuc2l6ZSgpKTsKCgoKICAgICAg
ICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fcGFkPF9D
aGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsIF9fcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193LCBfX2xlbiwg
ZmFsc2UpOwogICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2xlbiA9
IF9fdzsKICAgICAgICAgICAgfQogICAgICAgICAgc3RyZWFtc2l6ZSBfX3JlcyA9IF9fb3V0LnJk
YnVmKCktPnNwdXRuKF9fcywgX19sZW4pOwogICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAg
ICAgICBpZiAoX19yZXMgIT0gX19sZW4pCiAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19i
YXNlOjpmYWlsYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgoKCiAg
ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX29zdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBs
YXRlIG9zdHJlYW0mIGVuZGwob3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBl
bmRzKG9zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYp
OwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjaGFyKTsK
ICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgdW5zaWduZWQg
Y2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIHNp
Z25lZCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFt
JiwgY29uc3QgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9z
dHJlYW0mLCBjb25zdCB1bnNpZ25lZCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0m
IG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHNpZ25lZCBjaGFyKik7CgoKICBleHRlcm4gdGVt
cGxhdGUgY2xhc3MgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgd29z
dHJlYW0mIGVuZGwod29zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZHMo
d29zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGZsdXNoKHdvc3RyZWFtJik7
CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgd2NoYXJf
dCk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY2hh
cik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29u
c3Qgd2NoYXJfdCopOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0
cmVhbSYsIGNvbnN0IGNoYXIqKTsKCn0KIyAyNzYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y
L29zdHJlYW0iIDIgMwojIDQ2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pb3N0cmVhbSIg
MiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaXN0cmVhbSIgMSAzCiMgNDMgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2lzdHJlYW0iIDMKCgoKCm5hbWVzcGFjZSBzdGQKewoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBi
YXNpY19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4K
ICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRy
YWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0
cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBfVHJh
aXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9D
aGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dldDxf
Q2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwogICAgICB0eXBlZGVmIGN0
eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIHN0cmVhbXNp
emUgX01fZ2NvdW50OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lz
dHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgewogICAgICAgIHRoaXMtPmluaXQo
X19zYik7CiAgICAgICAgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsKICAgICAgfQoKICAgICAg
dmlydHVhbAogICAgICB+YmFzaWNfaXN0cmVhbSgpCiAgICAgIHsgX01fZ2NvdW50ID0gc3RyZWFt
c2l6ZSgwKTsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRy
eTsKCgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5
cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg
ICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBf
X2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFz
ZSYpKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihib29sJiBfX24p
OwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbik7Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19u
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19uKTsK
CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7CgogICAg
ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pOwoK
CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19uKTsK
CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9u
ZyYgX19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihmbG9hdCYg
X19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19m
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBf
X2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odm9pZComIF9fcCk7
CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBl
KiBfX3NiKTsKCgogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgICBnY291bnQodm9pZCkgY29u
c3QKICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CgogICAgICBpbnRfdHlwZQogICAgICBnZXQo
dm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSYgX19jKTsK
CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNp
emUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUm
CiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJu
IHRoaXMtPmdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJl
YW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2Rl
bGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVm
X3R5cGUmIF9fc2IpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChfX3NiLCB0aGlzLT53aWRlbign
XG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9f
aXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f
bikKICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0bGluZShfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xu
JykpOyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgaWdub3JlKHN0cmVhbXNpemUgX19u
ID0gMSwgaW50X3R5cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICBpbnRf
dHlwZQogICAgICBwZWVrKHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHJlYWQo
Y2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAg
cmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIF9faXN0cmVh
bV90eXBlJgogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIHVuZ2V0KHZvaWQpOwoKICAgICAgaW50CiAgICAgIHN5bmModm9pZCk7CgogICAg
ICBwb3NfdHlwZQogICAgICB0ZWxsZyh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAg
ICBzZWVrZyhwb3NfdHlwZSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cob2Zm
X3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0
cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz
PiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1f
dHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
VHJhaXRzOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5
KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgYm9vbCBfX25vc2tpcHdzID0g
ZmFsc2UpOwoKICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuIF9NX29rOyB9CgogICAgcHJp
dmF0ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0No
YXJUJiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxj
aGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRz
PiYgX19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJl
YW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7IHJldHVybiAo
X19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYg
X19pbiwgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNf
aXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIs
X1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2luID4+
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2lj
X2lzdHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0
dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3N0
cmVhbQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LAogICAgICBw
dWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgoK
CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
VHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRz
Ojpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZf
dHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCgogICAg
ICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsK
ICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5
cGU7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1idWY8
X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX3NiKSwgX19v
c3RyZWFtX3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19p
b3N0cmVhbSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIHdzKGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7Cn0KCgoKCgojIDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvaXN0cmVhbS50Y2MiIDEgMwojIDM2ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMi9iaXRzL2lzdHJlYW0udGNjIiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6CiAgICBzZW50cnkoYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBib29sIF9fbm9za2lwd3MpCiAgICB7CiAgICAgIGlm
IChfX2luLmdvb2QoKSkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19pbi50aWUoKSkKICAgICAg
ICAgICAgX19pbi50aWUoKS0+Zmx1c2goKTsKICAgICAgICAgIGlmICghX19ub3NraXB3cyAmJiAo
X19pbi5mbGFncygpICYgaW9zX2Jhc2U6OnNraXB3cykpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAg
ICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICAg
ICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICBpZiAoX19p
bi5fTV9jaGVja19mYWNldChfX2luLl9NX2ZjdHlwZSkpCiAgICAgICAgICAgICAgICB3aGlsZSAo
IXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAg
ICAgICYmIF9faW4uX01fZmN0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlw
ZShfX2MpKSkKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CgoKCiAgICAg
ICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAg
ICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICAgICAgICB9
CiAgICAgICAgfQoKICAgICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIF9NX29rID0gdHJ1ZTsK
ICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9NX29rID0gZmFsc2U7CiAgICAgICAgICBf
X2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVhbV90eXBlJikpCiAg
ICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQogICAgewogICAg
ICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0
b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQogICAgewogICAgICBfX3BmKCp0aGlz
KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihib29sJiBf
X24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9f
Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdv
b2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAg
ICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24p
OwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJy
ID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGxv
bmcgX19sOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAg
ICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX2wp
OwoKCiAgICAgICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAg
ICAgICAgICAgICAgJiYgKG51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWluKCkgPD0gX19sCiAgICAg
ICAgICAgICAgICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8c2hvcnQ+OjptYXgoKSkp
CiAgICAgICAgICAgICAgICBfX24gPSBfX2w7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+
KHVuc2lnbmVkIHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZh
bHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlv
c3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl
dChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwg
KnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGludCYgX19uKQogICAg
ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsK
ICAgICAgICAgICAgICBsb25nIF9fbDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQo
X01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0
aGlzLCBfX2VyciwgX19sKTsKCgogICAgICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6
OmZhaWxiaXQpCiAgICAgICAgICAgICAgICAgICYmIChudW1lcmljX2xpbWl0czxpbnQ+OjptaW4o
KSA8PSBfX2wKICAgICAgICAgICAgICAgICAgICAgICYmIF9fbCA8PSBudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSkpCiAgICAgICAgICAgICAgICBfX24gPSBfX2w7CiAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJi
KCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlv
c19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01f
Y2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQo
KnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls
KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25n
JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6
Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkK
ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBf
X24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9fbikKICAgIHsKICAg
ICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAg
X01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0
aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19i
YXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hl
Y2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRo
aXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShf
X2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQg
bG9uZyBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUo
aW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m
bnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMs
IF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihmbG9hdCYgX19uKQogICAgewog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAg
ICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAg
ICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ogog
ICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz
ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr
X2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlz
LCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19l
cnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk
Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyBkb3Vi
bGUmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBp
ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFz
ZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQp
KQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIs
IF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odm9pZComIF9fbikKICAgIHsKICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg
ICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUg
X19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51
bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJh
dG9yPj4oX19zdHJlYW1idWZfdHlwZSogX19zYm91dCkKICAgIHsKICAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMsIGZhbHNlKTsKICAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgIHsKICAgICAgICAg
ICB0cnkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0ID0g
MDsKICAgICAgICAgICAgICAgaWYgKF9fc2JvdXQpCiAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYmluID0gdGhpcy0+cmRidWYoKTsKICAg
ICAgICAgICAgICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmlu
LCBfX3Nib3V0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGlmICghX19zYm91
dCB8fCAhX194dHJjdCkKICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
ZmFpbGJpdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpCiAgICAgICAgICAgICB7CgoKICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgZ2V0KHZvaWQpCiAgICB7CiAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0g
dHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBpbnRfdHlwZSBfX2MgPSBfX2VvZjsKICAgICAgX01f
Z2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYgKCF0cmFp
dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICBfTV9nY291
bnQgPSAxOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fYzsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIGdldChjaGFyX3R5cGUmIF9fYykKICAgIHsKICAgICAgX01fZ2NvdW50ID0g
MDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBp
bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBpbnRfdHlw
ZSBfX2J1ZnZhbCA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOwoKICAgICAgICAgICAgICBpZiAo
IXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2J1ZnZhbCwgX19lb2YpKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICBfTV9nY291bnQgPSAxOwogICAgICAgICAgICAgICAgICBf
X2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYnVmdmFsKTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjoKICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBf
X2RlbGltKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0
aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRz
X3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBl
IF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5
cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9f
c2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgKyAxIDwgX19uCiAg
ICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2Vv
ZikKICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2Ms
IF9faWRlbGltKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0g
dHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgICBfX2MgPSBf
X3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9f
ZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwog
ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
ICpfX3MgPSBjaGFyX3R5cGUoKTsKICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYiwgY2hhcl90eXBlIF9fZGVsaW0pCiAg
ICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUp
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9f
aW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0
cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX190aGlz
X3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3RoaXNf
c2ItPnNnZXRjKCk7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYzIgPSB0cmFpdHNfdHlwZTo6
dG9fY2hhcl90eXBlKF9fYyk7CgogICAgICAgICAgICAgIHdoaWxlICghdHJhaXRzX3R5cGU6OmVx
X2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlw
ZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkKICAgICAgICAgICAgICAgICAgICAgJiYgIXRy
YWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLnNwdXRjKF9fYzIpLCBfX2VvZikpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAg
ICBfX2MgPSBfX3RoaXNfc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICBfX2MyID0gdHJh
aXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBpZiAoIV9NX2djb3VudCkK
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg
X19uLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBf
X2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAg
ICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAg
ICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBp
bnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2Nv
dW50ICsgMSA8IF9fbgogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2lu
dF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6
ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAg
ICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2Nv
dW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFf
aW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkp
CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19zYi0+c2J1bXBj
KCk7CiAgICAgICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp
ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJf
dHlwZSgpOwogICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGlnbm9y
ZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50
ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIg
JiYgX19uID4gMCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAg
ICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAg
ICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIF9fbiA9IG1p
bihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSk7CiAgICAgICAgICAgICAg
d2hpbGUgKF9NX2djb3VudCA8IF9fbgogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5
cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFp
dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2RlbGltKSkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICAgICsr
X01fZ2NvdW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlw
ZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICBlbHNlIGlmICh0cmFpdHNfdHlwZTo6
ZXFfaW50X3R5cGUoX19jLCBfX2RlbGltKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIHBlZWsodm9pZCkKICAgIHsKICAgICAgaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6
OmVvZigpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0
cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgeyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0YygpOyB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFk
KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0g
MDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9nY291
bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbik7CiAgICAgICAgICAgICAgaWYgKF9N
X2djb3VudCAhPSBfX24pCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl
cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHJlYWRzb21lKGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0g
dGhpcy0+cmRidWYoKS0+aW5fYXZhaWwoKTsKICAgICAgICAgICAgICBpZiAoX19udW0gPiAwKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX251bSA9IG1pbihfX251bSwgX19u
KTsKICAgICAgICAgICAgICAgICAgaWYgKF9fbnVtKQogICAgICAgICAgICAgICAgICAgIF9NX2dj
b3VudCA9IHRoaXMtPnJkYnVmKCktPnNnZXRuKF9fcywgX19udW0pOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFp
bGJpdCk7CiAgICAgIHJldHVybiBfTV9nY291bnQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBwdXRiYWNrKGNo
YXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAg
ICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAg
ICAgICAgaWYgKCFfX3NiCiAgICAgICAgICAgICAgICAgIHx8IHRyYWl0c190eXBlOjplcV9pbnRf
dHlwZShfX3NiLT5zcHV0YmFja2MoX19jKSwgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg
dW5nZXQodm9pZCkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0
c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhp
cy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9fc2IKICAgICAgICAgICAgICAgICAgfHwg
dHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fc2ItPnN1bmdldGMoKSwgX19lb2YpKQogICAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp
ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBp
bnQKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzeW5jKHZvaWQpCiAg
ICB7CiAgICAgIGludCBfX3JldCA9IC0xOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50
cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg
ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9f
c2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmIChfX3NiKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICBpZiAoX19zYi0+cHVic3luYygpID09IC0xKQogICAgICAg
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19yZXQgPSAwOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk
Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHRl
bGxnKHZvaWQpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAg
ICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIs
IGlvc19iYXNlOjppbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv
c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKHBv
c190eXBlIF9fcG9zKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0
cnkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5y
ZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICAgICAg
aWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIHNlZWtnKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikKICAg
IHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29m
ZihfX29mZiwgX19kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlvc19iYXNlOjppbik7CgoKICAgICAgICAgICAgICBpZiAoX19lcnIg
PT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mIF9faW4sIF9DaGFyVCYgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFt
X3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9faW4uZ2V0KF9fYyk7IH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19p
bi5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luLnNl
dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19j
dHlwZV90eXBlOwogICAgICBzdHJlYW1zaXplIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVu
YW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewoKICAgICAgICAg
ICAgICBzdHJlYW1zaXplIF9fbnVtID0gX19pbi53aWR0aCgpOwogICAgICAgICAgICAgIGlmIChf
X251bSA9PSAwKQogICAgICAgICAgICAgICAgX19udW0gPSBudW1lcmljX2xpbWl0czxzdHJlYW1z
aXplPjo6bWF4KCk7CgogICAgICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9
IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICAgICAgICAgIGNv
bnN0IGludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJl
YW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBf
X2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBf
X251bSAtIDEKICAgICAgICAgICAgICAgICAgICAgJiYgX19jICE9IF9fZW9mICYmICFfX2N0eXBl
LmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAqX19zKysgPSBfX2M7CiAgICAgICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAg
ICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgICAgICAgICBfX2luLnNldHN0
YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKCgogICAgICAgICAgICAgICpfX3MgPSBjaGFyX3R5cGUo
KTsKCiAgICAgICAgICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9f
aW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX2luLmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAg
ICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAg
ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJU
LF9UcmFpdHM+JiBfX2luKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJl
YW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwoK
ICAgICAgY29uc3QgX19jdHlwZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlw
ZT4oX19pbi5nZXRsb2MoKSk7CiAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRz
Ojplb2YoKTsKICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAg
ICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgd2hpbGUgKF9fYyAhPSBf
X2VvZiAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgIF9fYyA9
IF9fc2ItPnNuZXh0YygpOwogICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgIF9faW4uc2V0
c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBlZGVm
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVh
bWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBl
X3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0
cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9fZXh0
cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJi
KF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBfX3N0
ci5lcmFzZSgpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX2luLndpZHRoKCk7CiAgICAg
ICAgICBfX3NpemVfdHlwZSBfX247CiAgICAgICAgICBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nh
c3Q8X19zaXplX3R5cGU+KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIGNvbnN0
IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0
bG9jKCkpOwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigp
OwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAg
ICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICB3aGlsZSAoX19l
eHRyYWN0ZWQgPCBfX24KICAgICAgICAgICAgICAgICAmJiBfX2MgIT0gX19lb2YgJiYgIV9fY3R5
cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICArK19f
ZXh0cmFjdGVkOwogICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAg
ICB9CiAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgICAgICBfX2luLnNldHN0YXRl
KGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICB9CgoK
ICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAgICBfX2luLnNldHN0YXRlIChpb3NfYmFzZTo6
ZmFpbGJpdCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19pbiwKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKQogICAgewogICAgICB0eXBlZGVmIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUg
X19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190
eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CgogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3Rl
ZCA9IDA7CiAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBmYWxzZTsKICAgICAgdHlwZW5hbWUgX19p
c3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgX19zdHIuZXJhc2UoKTsKICAgICAgICAgIF9fc2l6ZV90eXBl
IF9fbiA9IF9fc3RyLm1heF9zaXplKCk7CgogICAgICAgICAgX19pbnRfdHlwZSBfX2lkZWxpbSA9
IF9UcmFpdHM6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgX19zdHJlYW1idWZfdHlw
ZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+
c2J1bXBjKCk7CiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9m
KCk7CiAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19p
ZGVsaW0pOwoKICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8PSBfX24KICAgICAgICAgICAg
ICAgICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAg
ICAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBf
VHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwog
ICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgIF9fdGVzdGRl
bGltID0gX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSk7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAg
ICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICB9CiAgICAgIGlmICgh
X19leHRyYWN0ZWQgJiYgIV9fdGVzdGRlbGltKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jh
c2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3Mg
X0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19pbiwKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9B
bGxvYz4mIF9fc3RyKQogICAgeyByZXR1cm4gZ2V0bGluZShfX2luLCBfX3N0ciwgX19pbi53aWRl
bignXG4nKSk7IH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hh
cj47CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIHdzKGlzdHJlYW0mKTsKICBleHRlcm4gdGVt
cGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY2hhciYpOwogIGV4dGVybiB0ZW1w
bGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBs
YXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHVuc2lnbmVkIGNoYXImKTsKICBleHRl
cm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgc2lnbmVkIGNoYXImKTsK
ICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQg
Y2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBz
aWduZWQgY2hhciopOwoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lzdHJlYW08d2No
YXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiB3cyh3aXN0cmVhbSYpOwogIGV4dGVy
biB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIHdjaGFyX3QmKTsKICBl
eHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCB3Y2hhcl90Kik7
Cgp9CiMgMjk4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pc3RyZWFtIiAyIDMKIyA0NyAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaW9zdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7
CiAgZXh0ZXJuIGlzdHJlYW0gY2luOwogIGV4dGVybiBvc3RyZWFtIGNvdXQ7CiAgZXh0ZXJuIG9z
dHJlYW0gY2VycjsKICBleHRlcm4gb3N0cmVhbSBjbG9nOwoKICBleHRlcm4gd2lzdHJlYW0gd2Np
bjsKICBleHRlcm4gd29zdHJlYW0gd2NvdXQ7CiAgZXh0ZXJuIHdvc3RyZWFtIHdjZXJyOwogIGV4
dGVybiB3b3N0cmVhbSB3Y2xvZzsKCgoKICBzdGF0aWMgaW9zX2Jhc2U6OkluaXQgX19pb2luaXQ7
Cn0KIyAyICJzdHJpbmd0ZXN0LmNwcCIgMgojIDEgInN0cmluZyIgMSAzCn9FTEYBAQEgAiADIAEg
YIgECDQgCDYgNCAGICggHyAcIAYgNCA0gAQINIAECMAgwCAFIAQgAyD0IPSABAj0gAQIEyATIAQg
ASABIIAECCCABAhkDiBkDiAFIBAgASAQIJAECCCQBAjUAiAoBCAGIBAgAiCAESCAkQQIgJEECOgg
6CAGIAQgBCAIASAIgQQICIEECCAEIAQgL2xpYi9sZC0xIC5zby4yIAQgECABIEdOVSACIAIgBSAR
IBggEwoKICAgFCAWIA4gBSAQIAcgFSAIIBcgAiADIA8gBCABIAYgEiARII8BINiSBAiMIBEgFyBI
IFyHBAgCAiASIHIgbIcECCQgEiA2AiAEkAQIIBEgDyBSIHyHBAgcASASIA4CIIyHBAj/ICIAAAAc
AQAAnIcECEkAAAASAAAAlwAAAKyHBAgKAgAAEgAAAG4BAABokwQIkAAAABEAFwAQAAAAvIcECLUB
AAASAAAA4gAAAMyHBAiKAAAAEgAAAIIAAADchwQIrgQAABIAAADjAQAA7IcECJoAAAAiIFICIPyH
BAjKIBIgaCCIBAh7ASASIDQBIByIBAhuIBIg/wEgLIgECNcgEiBDAiAUjgQIBCARIA4g/yD4kwQI
ECARIBcgqAEgdwEgPIgECDcgEiCZASBMiAQIZSASILwBIGxpYnN0ZGMrKy5zby41IF9aU3Rsc0lT
dDExY2hhcl90cmFpdHNJY0VFUlN0MTNiYXNpY19vc3RyZWFtSWNUX0VTNV9QS2MgX1pOU29sc0Vs
IF9fY3hhX2NhbGxfdW5leHBlY3RlZCBfWk5Tb2xzRW0gX1pTdDl0ZXJtaW5hdGV2IF9fZ3h4X3Bl
cnNvbmFsaXR5X3YwIF9aU3Ryc0ljU3QxMWNoYXJfdHJhaXRzSWNFU2FJY0VFUlN0MTNiYXNpY19p
c3RyZWFtSVRfVDBfRVM3X1JTYklTNF9TNV9UMV9FIF9aTlNzNF9SZXA4X01fY2xvbmVFUktTYUlj
RWogX1pOU3MyMF9TX2VtcHR5X3JlcF9zdG9yYWdlRSBfWk5TdDhpb3NfYmFzZTRJbml0QzFFdiBf
Wk5TdDI0X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlSUxiMUVMaTBFRTEwZGVhbGxvY2F0ZUVQdmog
X1pTdDNjaW4gX1pOU3Q4aW9zX2Jhc2U0SW5pdEQxRXYgX1pTdDRjb3V0IF9aTktTczRmaW5kRWNq
IF9Kdl9SZWdpc3RlckNsYXNzZXMgX19nbW9uX3N0YXJ0X18gbGlibS5zby42IGxpYmdjY19zLnNv
LjEgX19yZWdpc3Rlcl9mcmFtZV9pbmZvX2Jhc2VzIF9VbndpbmRfUmVzdW1lIF9fZGVyZWdpc3Rl
cl9mcmFtZV9pbmZvX2Jhc2VzIGxpYmMuc28uNiBfX2Rzb19oYW5kbGUgX0lPX3N0ZGluX3VzZWQg
X19saWJjX3N0YXJ0X21haW4gL3Vzci9sb2NhbC9saWI6IEdMSUJDXzIuMCBHQ0NfMy4wIENYWEFC
SV8xLjIgR0xJQkNQUF8zLjIgAiACIAIgASADIAQgAiACIAIgAiACIAMgBCAFIAIgAiAEIAEgAiAC
IAIgASABICwCIBAgEGlpCiAgBSB0AiABIAEg1QEgECBQJnkgBCB+AiABIAIgASAQINKvawUgAyCG
AiAQIHIpGgggAiCRAiDQkgQIBhcg2JIECAUBIGiTBAgFIPiTBAgFEyCQkgQIBwIglJIECAcDIJiS
BAgHBSCckgQIBwYgoJIECAcHIKSSBAgHCCCokgQIBwogIKySBAgHILCSBAgHILSSBAgHCiAguJIE
CAcOILySBAgHDyDAkgQIBxAgxJIECAcRIMiSBAgHFSDMkgQIBxYgVYnlg+wI6EUBIJDoywEg6HYG
IMnD/zWIkgQI/yWMkgQIIP8lkJIECGgg6eD/////JZSSBAhoCCDp0P////8lmJIECGgQIOnA////
/yWckgQIaBgg6bD/////JaCSBAhoIOmg/////yWkkgQIaCgg6ZD/////JaiSBAhoMCDpgP////8l
rJIECGg4IOlw/////yWwkgQIaEAg6WD/////JbSSBAhoSCDpUP////8luJIECGhQIOlA/////yW8
kgQIaFgg6TD/////JcCSBAhoYCDpIP////8lxJIECGhoIOkQ/////yXIkgQIaHAg6SD/////JcyS
BAhoeCDp8P7//yAx7V6J4YPk8FBUUmjwjQQIaDSHBAhRVmhAigQI6Hv////0ifZVieVTUOggW4HD
9iCLg0wghcB0Av/Qi138ycOJ9pCQkJCQkJCQVYnlg+wIgD0IlAQIIHVCoQiQBAiLEIXSdBuNtiCD
wASjCJAECP/SoQiQBAiLEIXSdeu4jIcECIXAdCDHBCQgkAQI6JL+///GBQiUBAgBycOQjbYgjb8g
VbjshwQIieXoIFqBwmcgg+wYhcB0IMcEJCCQBAjHRCQEIJQECMdEJAggiVQkIOih/v//oYCSBAiF
wHQVuCCFwHQgxwQkgJIECOiXdvv3iexdw412IFWJ5YPsCIF9IP//IIld/ItdCHQgi138iexdw410
JiCD+wF0FoXbdezHRQgklAQIi138iexd6ZH+///HBCQklAQI6OX9///r3JCNtiBVieVXVjH2UzHb
g+wgi30IiVwkCIk8JMdEJAQoIOho/v//g/j/icN0Gok8JMdEJAQpIIlEJAjoTf7//0B0zkbry4PE
IInwW15fXcOQVYnlg+wYx0QkBC4gi0UIx0QkCCCJBCToG/7//0APlMKJ7F0PtsLDjXQmIFW5IJQE
CInlVrgBIFONXeiD7GCD5PDwAQHHRegElAQIjXXYxwQk2JIECMdEJAQYjgQI6EP9///HBCRokwQI
iVwkBOgj/f//i03ojV3IjVH0i0IIwegfhMAPhaABII1Z/LgBIPABA4nIiQaJNCTHRCQELiDHRCQI
IOiF/f//i3XYMduD+P8PlMONTvS4//////APwUb8hcAPjjsBIITbjXWoD4QXASCLTeiNXbiNUfSL
QgjB6B+EwA+F5yCNWfy4ASDwAQOJyIkGiTQk6KD+//+LdaiJw7j/////jU708A/BRvyFwA+OnSCF
23VFxwQk2JIECMdEJAQrjgQI6Gr8//+LXei4/////41L9PAPwUP8hcB+II1l+DHAW15dw4tBBIkg
JIPAColEJATom/z//+vjxwQk2JIECMdEJARCjgQI6CX8//+Jwosgi0j0jTQRi0YgqUAgdQWD4Ah0
GYkUJIlcJAToUPz//4kEJMdEJAQ4jgQI64SJFCSJXCQE6If7///r5YtBBIkgJIPAColEJAToM/z/
/+lM////ifaJFCSJXCQEx0QkCCDoyPv//+kK////xwQk2JIECMdEJARNjgQI6J/7///p0P7//4tB
BIkgJIPAColEJATo6Pv//+mu/v//jbQmIIkUJIlcJATHRCQIIOh4+///6VT+//+NtCYgicOLdei4
/////41O9PAPwUb8hcB+CokcJOiu+///ifaLQQSJICSDwAqJRCQE6Ir7///r4ot12InDuP////+N
TvTwD8FG/IXAf7iLQQSJICSDwAqJRCQE6GD7///rpEJ0FOsKkJCQkJCQkJCQkJCQkOiX+v//iQQk
6J/6///r8UKJww+Fev///4kEJOiM+v//6Wv////pZv///4t1qInDuP////+NTvTwD8FG/IXAD49O
////i0EEiSAkg8AKiUQkBOj2+v//6Tf///9CdaKJBCToRvr//+uYQonDD4Uh////iQQk6DP6///p
Ev///0KJww+FH////4kEJOgd+v//icPpEP///0IPhWP///+JBCToB/r//+lW////jbYgVYnlg+wI
xwQkASDHRCQE//8g6Nb7//+J7F3DifZVieWD7AjHBCQgx0QkBP//IOi2+///iexdw5CQVYnlU4Ps
BKFskgQIu2ySBAiD+P90Fo12II28JwAAAACD6wT/0IsDg/j/dfRYW13DVYnlU1LoAAAAAFuBw4oE
AACNdgDop/r//4td/MnDAAADAAAAAQACAEVudGVyIGEgZm9ybXVsYSA6IABUaGVyZSBhcmUgbm8g
YnJhY2tldHMnCiBUaGVyZSBhcmUgVGhlIGZvcm11bGEgaGFzIGEgZG90CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB4kgQIGCABelBMIAF8CAYg3IcECCAEBIgBHCBwiQQISSAEIEEOCIUCQgoFTYMDJCBA
IMCJBAhPIAQgQQ4IhQJCCgVChgSHA0ODBSAcIGggEIoECCwgBCBBDgiFAkIKBSCIIECKBAg6AyAE
+JAECEEOCIUCRwoFR4MEhgMgHCCsIICNBAgeIAQgQQ4IhQJCCgUgHCDMIKCNBAgeIAQgQQ4IhQJC
CgUg/yCAAQF8NBWgBCCCAQXUBCDbAQW6BSCNAgWgBCC8AgWOBgHSAkOgBCCkAwX4BQG/AwW1BSDY
AwWgBCDvAwWfBQGPBAWZBCC5BAUgzQQFpgYB9wQF/gQBmAUFnQUgqwUFsAUg4QUF6wUB8QUF9gUg
hAYFiQYgmgYFnwYgsAYFtQYgfyABIAEgASDLASABINUBIAEgLAIgDyBkAiA0hwQICiAgIPCNBAgE
ICiBBAgFIFSDBAgGINSBBAgKICAgnQIgECAVIAMghJIECAIggCAUIBEgFyC0hgQIESCUhgQIEiAT
IAgg/v//bySGBAj///9vAyDw//9v8oUECCD/////gI0ECCD/////oI0ECCCAkQQIIGKHBAhyhwQI
gocECJKHBAiihwQIsocECMKHBAjShwQI4ocECPKHBAgCiAQIEogECCKIBAgyiAQIQogECFKIBAgA
AAAAAAAAAAEAAAAAAKIAhRkAAAgAAABkAAAAhIgECAEAAABkAAAAhIgECDoAAAA8AAAAAAAAAEkA
AACAAAAAAAAAAHMAAACAAAAAAAAAAI0AAACAAAAAAAAAALwAAACAAAAAAAAAAPQAAACAAAAAAAAA
ADEBAACAAAAAAAAAAIIBAACAAAAAAAAAANMBAACAAAAAAAAAAP4BAACAAAAAAAAAAC0CAACAAAAA
AAAAAFcCAACAAAAAAAAAAIACAACAAAAAAAAAAJoCAACAAAAAAAAAALUCAACAAAAAAAAAANYCAACA
AAAAAAAAAA8DAACAAAAAAAAAADIDAACAAAAAAAAAAFcDAACAAAAAAAAAAIEDAACAAAAAAAAAAKoD
AACCAAAAAAAAAMQDAACCAAAAAAAAAAAAAACiAAAAAAAAAAAAAACiAAAAAAAAAAsEAACCAAAAY1YA
ACYEAACCAAAA71sBAE4EAACCAAAAAAAAAGQEAACCAAAAAAAAAHsEAACCAAAAAAAAAAAAAACiAAAA
AAAAAAAAAACiAAAAAAAAAAAAAACiAAAAAAAAAI8EAACCAAAA2AQAAMgEAACAAMcAAAAAAAAAAACi
AAAAAAAAANwEAACAACAAAAAAAPMEAACAACEAAAAAAAoFAACAACIgHwUggCAjIDUFIIAgJSBNBSCA
ICYgYwUggCAxIHoFIIAgMiCSBSCAIDMgqQUggCA0IMIFIIAgNSDaBSCAIDYg8wUggCA4IAYggCA5
ICQGIIAgOyBEBiCAID0gWgYggCA+IHAGIIAgPyCGBiCAIEAgnAYggCBBILMGIIAgQiDLBiCAIEMg
4QYggCBEIPgGIIAgRSAOByCAIEYgJgcggCBHID0HIIAgSCBWByCAIEkgawcggCBOINEHIIAgUSDp
ByCAIFIgCCCAIFMgCCCAIFQgOwgggCBVIFcIIIAgViBvCCCAIFgghwgggCBbIKEIIIAgXiC5CCCA
IGUgzwgggCBoIOkIIIAgbCADIIAgcSAcIIAgciA3IIAgdSBSIIAgdiBvIIAgeSCKIIAgeiCnIIAg
fSC/IIAggCDYIIAggyDzIIAghCAPCiAggCCHICgKICCAIIogQgogIIIgy5QBIHYKICCCIEYQIJ4K
ICCAIKIg1AogIIAgHCCAICMgWCCAIFsggCA0IHcggCA8IMQggCBDIPwggCBGIBgKICCAIFMgqwog
IIAgWiDpCiAggCBeIAYOIIAg2w4ggCBsIPsOIIAgdCBPDyCAIHkgcA8ggCCBIPgPIIAghiA2ECCA
IIwgoiCiII8EIIIgEQogIE4QIIAgHwEgZBAggCA4ASCiIHkQIIIgjBAggiBiHyCPBCCCIKIgnhAg
giCiIMsQIIAgSyCiIKIgThEggCAeIJERIIAgIyDWESCCIOkRIIIgNcEBIE4EIMIgeRAgwiCMECCC
II8EIMIgnhAgwiCiII8EIMIg+hEggCDZEiCAIBATIIAgSCA6EyCAIEsgaRMggCBMIJoTIIAgVSDN
EyCAIFogCBQggCBeIEEUIIAgYSB5FCCAIGIgsRQggCBeFSCAIAcXIIAg/RcggCB0GCCAIK0goiCi
IJgYIIAgNSAZIIAgNyAjGSCAIDggOxkggCA5IFUZIIAgOiCiIG8ZIBkgZCCEiAQIIGluaXQuYyAv
dXNyL3NyYy9idWlsZC8xMzM3MzEtMS9CVUlMRC9nbGliYy0yLjIuNS9jc3UvIGdjYzJfY29tcGls
ZWQuIGludDp0KDAsMSk9cigwLDEpOy0yMTQ3NDgzNjQ4OzIxNDc0ODM2NDc7IGNoYXI6dCgwLDIp
PXIoMCwyKTswOzEyNzsgbG9uZyBpbnQ6dCgwLDMpPXIoMCwzKTstMjE0NzQ4MzY0ODsyMTQ3NDgz
NjQ3OyB1bnNpZ25lZCBpbnQ6dCgwLDQpPXIoMCw0KTswMDAwMDAwMDAwMDAwOzAwMzc3Nzc3Nzc3
Nzc7IGxvbmcgdW5zaWduZWQgaW50OnQoMCw1KT1yKDAsNSk7MDAwMDAwMDAwMDAwMDswMDM3Nzc3
Nzc3Nzc3OyBsb25nIGxvbmcgaW50OnQoMCw2KT1AczY0O3IoMCw2KTswMTAwMDAwMDAwMDAwMDAw
MDAwMDAwMDswNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3OyBsb25nIGxvbmcgdW5zaWduZWQgaW50OnQo
MCw3KT1AczY0O3IoMCw3KTswMDAwMDAwMDAwMDAwOzAxNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3OyBz
aG9ydCBpbnQ6dCgwLDgpPUBzMTY7cigwLDgpOy0zMjc2ODszMjc2Nzsgc2hvcnQgdW5zaWduZWQg
aW50OnQoMCw5KT1AczE2O3IoMCw5KTswOzY1NTM1OyBzaWduZWQgY2hhcjp0KDAsMTApPUBzODty
KDAsMTApOy0xMjg7MTI3OyB1bnNpZ25lZCBjaGFyOnQoMCwxMSk9QHM4O3IoMCwxMSk7MDsyNTU7
IGZsb2F0OnQoMCwxMik9cigwLDEpOzQ7MDsgZG91YmxlOnQoMCwxMyk9cigwLDEpOzg7MDsgbG9u
ZyBkb3VibGU6dCgwLDE0KT1yKDAsMSk7MTI7MDsgY29tcGxleCBpbnQ6dCgwLDE1KT1zOHJlYWw6
KDAsMSksMCwzMjtpbWFnOigwLDEpLDMyLDMyOzsgY29tcGxleCBmbG9hdDp0KDAsMTYpPXIoMCwx
Nik7ODswOyBjb21wbGV4IGRvdWJsZTp0KDAsMTcpPXIoMCwxNyk7MTY7MDsgY29tcGxleCBsb25n
IGRvdWJsZTp0KDAsMTgpPXIoMCwxOCk7MjQ7MDsgX19idWlsdGluX3ZhX2xpc3Q6dCgwLDE5KT0q
KDAsMjApPSgwLDIwKSAuLi9pbmNsdWRlL2xpYmMtc3ltYm9scy5oIC91c3Ivc3JjL2J1aWxkLzEz
MzczMS0xL0JVSUxEL2dsaWJjLTIuMi41L2J1aWxkLTEgLTEvY29uZmlnLmggLi4vc3lzZGVwcy9n
bnUvX0dfY29uZmlnLmggLi4vc3lzZGVwcy8xL3N5c3YvMS9iaXRzL3R5cGVzLmggLi4vaW5jbHVk
ZS9mZWF0dXJlcy5oIC4uL2luY2x1ZGUvc3lzL2NkZWZzLmggLi4vbWlzYy9zeXMvY2RlZnMuaCAv
dXNyL2xpYi9nY2MtbGliLzEgLXJlZGhhdC0xLzIuOTYvaW5jbHVkZS9zdGRkZWYuaCBzaXplX3Q6
dCg4LDEpPSgwLDQpIF9fdV9jaGFyOnQoNCwxKT0oMCwxMSkgX191X3Nob3J0OnQoNCwyKT0oMCw5
KSBfX3VfaW50OnQoNCwzKT0oMCw0KSBfX3VfbG9uZzp0KDQsNCk9KDAsNSkgX191X3F1YWRfdDp0
KDQsNSk9KDAsNykgX19xdWFkX3Q6dCg0LDYpPSgwLDYpIF9faW50OF90OnQoNCw3KT0oMCwxMCkg
X191aW50OF90OnQoNCw4KT0oMCwxMSkgX19pbnQxNl90OnQoNCw5KT0oMCw4KSBfX3VpbnQxNl90
OnQoNCwxMCk9KDAsOSkgX19pbnQzMl90OnQoNCwxMSk9KDAsMSkgX191aW50MzJfdDp0KDQsMTIp
PSgwLDQpIF9faW50NjRfdDp0KDQsMTMpPSgwLDYpIF9fdWludDY0X3Q6dCg0LDE0KT0oMCw3KSBf
X3FhZGRyX3Q6dCg0LDE1KT0oNCwxNik9Kig0LDYpIF9fZGV2X3Q6dCg0LDE3KT0oNCw1KSBfX3Vp
ZF90OnQoNCwxOCk9KDQsMykgX19naWRfdDp0KDQsMTkpPSg0LDMpIF9faW5vX3Q6dCg0LDIwKT0o
NCw0KSBfX21vZGVfdDp0KDQsMjEpPSg0LDMpIF9fbmxpbmtfdDp0KDQsMjIpPSg0LDMpIF9fb2Zm
X3Q6dCg0LDIzKT0oMCwzKSBfX2xvZmZfdDp0KDQsMjQpPSg0LDYpIF9fcGlkX3Q6dCg0LDI1KT0o
MCwxKSBfX3NzaXplX3Q6dCg0LDI2KT0oMCwxKSBfX3JsaW1fdDp0KDQsMjcpPSg0LDQpIF9fcmxp
bTY0X3Q6dCg0LDI4KT0oNCw1KSBfX2lkX3Q6dCg0LDI5KT0oNCwzKSBfX2ZzaWRfdDp0KDQsMzAp
PSg0LDMxKT1zOF9fdmFsOig0LDMyKT1hcig0LDMzKT1yKDQsMzMpOzAwMDAwMDAwMDAwMDA7MDAz
Nzc3Nzc3Nzc3Nzs7MDsxOygwLDEpLDAsNjQ7OyBfX2RhZGRyX3Q6dCg0LDM0KT0oMCwxKSBfX2Nh
ZGRyX3Q6dCg0LDM1KT0oNCwzNik9KigwLDIpIF9fdGltZV90OnQoNCwzNyk9KDAsMykgX191c2Vj
b25kc190OnQoNCwzOCk9KDAsNCkgX19zdXNlY29uZHNfdDp0KDQsMzkpPSgwLDMpIF9fc3dibGtf
dDp0KDQsNDApPSgwLDMpIF9fY2xvY2tfdDp0KDQsNDEpPSgwLDMpIF9fY2xvY2tpZF90OnQoNCw0
Mik9KDAsMSkgX190aW1lcl90OnQoNCw0Myk9KDAsMSkgX19rZXlfdDp0KDQsNDQpPSgwLDEpIF9f
aXBjX3BpZF90OnQoNCw0NSk9KDAsOSkgX19ibGtzaXplX3Q6dCg0LDQ2KT0oMCwzKSBfX2Jsa2Nu
dF90OnQoNCw0Nyk9KDAsMykgX19ibGtjbnQ2NF90OnQoNCw0OCk9KDQsNikgX19mc2Jsa2NudF90
OnQoNCw0OSk9KDQsNCkgX19mc2Jsa2NudDY0X3Q6dCg0LDUwKT0oNCw1KSBfX2ZzZmlsY250X3Q6
dCg0LDUxKT0oNCw0KSBfX2ZzZmlsY250NjRfdDp0KDQsNTIpPSg0LDUpIF9faW5vNjRfdDp0KDQs
NTMpPSg0LDUpIF9fb2ZmNjRfdDp0KDQsNTQpPSg0LDI0KSBfX3Rfc2NhbGFyX3Q6dCg0LDU1KT0o
MCwzKSBfX3RfdXNjYWxhcl90OnQoNCw1Nik9KDAsNSkgX19pbnRwdHJfdDp0KDQsNTcpPSgwLDEp
IF9fc29ja2xlbl90OnQoNCw1OCk9KDAsNCkgLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVh
ZC9iaXRzL3B0aHJlYWR0eXBlcy5oIC4uL3N5c2RlcHMvMS9zeXN2LzEvYml0cy9zY2hlZC5oIF9f
c2NoZWRfcGFyYW06VCgxMCwxKT1zNF9fc2NoZWRfcHJpb3JpdHk6KDAsMSksMCwzMjs7IF9wdGhy
ZWFkX2Zhc3Rsb2NrOlQoOSwxKT1zOF9fc3RhdHVzOigwLDMpLDAsMzI7X19zcGlubG9jazooMCwx
KSwzMiwzMjs7IF9wdGhyZWFkX2Rlc2NyOnQoOSwyKT0oOSwzKT0qKDksNCk9eHNfcHRocmVhZF9k
ZXNjcl9zdHJ1Y3Q6IF9fcHRocmVhZF9hdHRyX3M6VCg5LDUpPXMzNl9fZGV0YWNoc3RhdGU6KDAs
MSksMCwzMjtfX3NjaGVkcG9saWN5OigwLDEpLDMyLDMyO19fc2NoZWRwYXJhbTooMTAsMSksNjQs
MzI7X19pbmhlcml0c2NoZWQ6KDAsMSksOTYsMzI7X19zY29wZTooMCwxKSwxMjgsMzI7X19ndWFy
ZHNpemU6KDgsMSksMTYwLDMyO19fc3RhY2thZGRyX3NldDooMCwxKSwxOTIsMzI7X19zdGFja2Fk
ZHI6KDAsMTkpLDIyNCwzMjtfX3N0YWNrc2l6ZTooOCwxKSwyNTYsMzI7OyBwdGhyZWFkX2F0dHJf
dDp0KDksNik9KDksNSkgcHRocmVhZF9jb25kX3Q6dCg5LDcpPSg5LDgpPXMxMl9fY19sb2NrOig5
LDEpLDAsNjQ7X19jX3dhaXRpbmc6KDksMiksNjQsMzI7OyBwdGhyZWFkX2NvbmRhdHRyX3Q6dCg5
LDkpPSg5LDEwKT1zNF9fZHVtbXk6KDAsMSksMCwzMjs7IHB0aHJlYWRfa2V5X3Q6dCg5LDExKT0o
MCw0KSBwdGhyZWFkX211dGV4X3Q6dCg5LDEyKT0oOSwxMyk9czI0X19tX3Jlc2VydmVkOigwLDEp
LDAsMzI7X19tX2NvdW50OigwLDEpLDMyLDMyO19fbV9vd25lcjooOSwyKSw2NCwzMjtfX21fa2lu
ZDooMCwxKSw5NiwzMjtfX21fbG9jazooOSwxKSwxMjgsNjQ7OyBwdGhyZWFkX211dGV4YXR0cl90
OnQoOSwxNCk9KDksMTUpPXM0X19tdXRleGtpbmQ6KDAsMSksMCwzMjs7IHB0aHJlYWRfb25jZV90
OnQoOSwxNik9KDAsMSkgX3B0aHJlYWRfcndsb2NrX3Q6VCg5LDE3KT1zMzJfX3J3X2xvY2s6KDks
MSksMCw2NDtfX3J3X3JlYWRlcnM6KDAsMSksNjQsMzI7X19yd193cml0ZXI6KDksMiksOTYsMzI7
X19yd19yZWFkX3dhaXRpbmc6KDksMiksMTI4LDMyO19fcndfd3JpdGVfd2FpdGluZzooOSwyKSwx
NjAsMzI7X19yd19raW5kOigwLDEpLDE5MiwzMjtfX3J3X3BzaGFyZWQ6KDAsMSksMjI0LDMyOzsg
cHRocmVhZF9yd2xvY2tfdDp0KDksMTgpPSg5LDE3KSBwdGhyZWFkX3J3bG9ja2F0dHJfdDp0KDks
MTkpPSg5LDIwKT1zOF9fbG9ja2tpbmQ6KDAsMSksMCwzMjtfX3BzaGFyZWQ6KDAsMSksMzIsMzI7
OyBwdGhyZWFkX3NwaW5sb2NrX3Q6dCg5LDIxKT0oMCwxKSBwdGhyZWFkX2JhcnJpZXJfdDp0KDks
MjIpPSg5LDIzKT1zMjBfX2JhX2xvY2s6KDksMSksMCw2NDtfX2JhX3JlcXVpcmVkOigwLDEpLDY0
LDMyO19fYmFfcHJlc2VudDooMCwxKSw5NiwzMjtfX2JhX3dhaXRpbmc6KDksMiksMTI4LDMyOzsg
cHRocmVhZF9iYXJyaWVyYXR0cl90OnQoOSwyNCk9KDksMjUpPXM0X19wc2hhcmVkOigwLDEpLDAs
MzI7OyBwdGhyZWFkX3Q6dCg5LDI2KT0oMCw1KSB3Y2hhcl90OnQoMTEsMSk9KDAsMykgd2ludF90
OnQoMTEsMik9KDAsNCkgLi4vaW5jbHVkZS93Y2hhci5oIC4uL3djc21icy93Y2hhci5oIC4uL3N5
c2RlcHMvMS9zeXN2LzEvMS9iaXRzL3djaGFyLmggX19tYnN0YXRlX3Q6dCgxMywxKT0oMTMsMik9
czhfX2NvdW50OigwLDEpLDAsMzI7X192YWx1ZTooMTMsMyk9dTRfX3djaDooMTEsMiksMCwzMjtf
X3djaGI6KDEzLDQpPWFyKDQsMzMpOzA7MzsoMCwyKSwwLDMyOzssMzIsMzI7OyBfR19mcG9zX3Q6
dCgzLDEpPSgzLDIpPXMxMl9fcG9zOig0LDIzKSwwLDMyO19fc3RhdGU6KDEzLDEpLDMyLDY0Ozsg
X0dfZnBvczY0X3Q6dCgzLDMpPSgzLDQpPXMxNl9fcG9zOig0LDU0KSwwLDY0O19fc3RhdGU6KDEz
LDEpLDY0LDY0OzsgLi4vaW5jbHVkZS9nY29udi5oIC4uL2ljb252L2djb252LmggOlQoMTcsMSk9
ZV9fR0NPTlZfT0s6MCxfX0dDT05WX05PQ09OVjoxLF9fR0NPTlZfTk9EQjoyLF9fR0NPTlZfTk9N
RU06MyxfX0dDT05WX0VNUFRZX0lOUFVUOjQsX19HQ09OVl9GVUxMX09VVFBVVDo1LF9fR0NPTlZf
SUxMRUdBTF9JTlBVVDo2LF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVDo3LF9fR0NPTlZfSUxMRUdB
TF9ERVNDUklQVE9SOjgsX19HQ09OVl9JTlRFUk5BTF9FUlJPUjo5LDsgOlQoMTcsMik9ZV9fR0NP
TlZfSVNfTEFTVDoxLF9fR0NPTlZfSUdOT1JFX0VSUk9SUzoyLDsgX19nY29udl9mY3Q6dCgxNywz
KT0oMTcsNCk9KigxNyw1KT1mKDAsMSkgX19nY29udl9pbml0X2ZjdDp0KDE3LDYpPSgxNyw3KT0q
KDE3LDgpPWYoMCwxKSBfX2djb252X2VuZF9mY3Q6dCgxNyw5KT0oMTcsMTApPSooMTcsMTEpPWYo
MCwyMCkgX19nY29udl90cmFuc19mY3Q6dCgxNywxMik9KDE3LDEzKT0qKDE3LDE0KT1mKDAsMSkg
X19nY29udl90cmFuc19jb250ZXh0X2ZjdDp0KDE3LDE1KT0oMTcsMTYpPSooMTcsMTcpPWYoMCwx
KSBfX2djb252X3RyYW5zX3F1ZXJ5X2ZjdDp0KDE3LDE4KT0oMTcsMTkpPSooMTcsMjApPWYoMCwx
KSBfX2djb252X3RyYW5zX2luaXRfZmN0OnQoMTcsMjEpPSgxNywyMik9KigxNywyMyk9ZigwLDEp
IF9fZ2NvbnZfdHJhbnNfZW5kX2ZjdDp0KDE3LDI0KT0oMTcsMjUpPSooMTcsMjYpPWYoMCwyMCkg
X19nY29udl90cmFuc19kYXRhOlQoMTcsMjcpPXMyMF9fdHJhbnNfZmN0OigxNywxMiksMCwzMjtf
X3RyYW5zX2NvbnRleHRfZmN0OigxNywxNSksMzIsMzI7X190cmFuc19lbmRfZmN0OigxNywyNCks
NjQsMzI7X19kYXRhOigwLDE5KSw5NiwzMjtfX25leHQ6KDE3LDI4KT0qKDE3LDI3KSwxMjgsMzI7
OyBfX2djb252X3N0ZXA6VCgxNywyOSk9czU2X19zaGxpYl9oYW5kbGU6KDE3LDMwKT0qKDE3LDMx
KT14c19fZ2NvbnZfbG9hZGVkX29iamVjdDosMCwzMjtfX21vZG5hbWU6KDE3LDMyKT0qKDAsMiks
MzIsMzI7X19jb3VudGVyOigwLDEpLDY0LDMyO19fZnJvbV9uYW1lOig0LDM2KSw5NiwzMjtfX3Rv
X25hbWU6KDQsMzYpLDEyOCwzMjtfX2ZjdDooMTcsMyksMTYwLDMyO19faW5pdF9mY3Q6KDE3LDYp
LDE5MiwzMjtfX2VuZF9mY3Q6KDE3LDkpLDIyNCwzMjtfX21pbl9uZWVkZWRfZnJvbTooMCwxKSwy
NTYsMzI7X19tYXhfbmVlZGVkX2Zyb206KDAsMSksMjg4LDMyO19fbWluX25lZWRlZF90bzooMCwx
KSwzMjAsMzI7X19tYXhfbmVlZGVkX3RvOigwLDEpLDM1MiwzMjtfX3N0YXRlZnVsOigwLDEpLDM4
NCwzMjtfX2RhdGE6KDAsMTkpLDQxNiwzMjs7IF9fZ2NvbnZfc3RlcF9kYXRhOlQoMTcsMzMpPXMz
Nl9fb3V0YnVmOigxNywzNCk9KigwLDExKSwwLDMyO19fb3V0YnVmZW5kOigxNywzNCksMzIsMzI7
X19mbGFnczooMCwxKSw2NCwzMjtfX2ludm9jYXRpb25fY291bnRlcjooMCwxKSw5NiwzMjtfX2lu
dGVybmFsX3VzZTooMCwxKSwxMjgsMzI7X19zdGF0ZXA6KDE3LDM1KT0qKDEzLDEpLDE2MCwzMjtf
X3N0YXRlOigxMywxKSwxOTIsNjQ7X190cmFuczooMTcsMjgpLDI1NiwzMjs7IF9fZ2NvbnZfaW5m
bzpUKDE3LDM2KT1zOF9fbnN0ZXBzOig4LDEpLDAsMzI7X19zdGVwczooMTcsMzcpPSooMTcsMjkp
LDMyLDMyO19fZGF0YTooMTcsMzgpPWFyKDQsMzMpOzA7LTE7KDE3LDMzKSw2NCwwOzsgX19nY29u
dl90OnQoMTcsMzkpPSgxNyw0MCk9KigxNywzNikgX0dfaWNvbnZfdDp0KDMsNSk9KDMsNik9dTQ0
X19jZDooMTcsMzYpLDAsNjQ7X19jb21iaW5lZDooMyw3KT1zNDRfX2NkOigxNywzNiksMCw2NDtf
X2RhdGE6KDE3LDMzKSw2NCwyODg7OywwLDM1Mjs7IF9HX2ludDE2X3Q6dCgzLDgpPSgwLDgpIF9H
X2ludDMyX3Q6dCgzLDkpPSgwLDEpIF9HX3VpbnQxNl90OnQoMywxMCk9KDAsOSkgX0dfdWludDMy
X3Q6dCgzLDExKT0oMCw0KSBfSU9fc3RkaW5fdXNlZDpHKDAsMSkgR0NDOiAoR05VKSAyLjk2IDIw
MDAwNzMxIChSZWQgSGF0IExpbnV4IDcuMyAyLjk2LTExMCkgR0NDOiAoR05VKSAyLjk2IDIwMDAw
NzMxIChSZWQgSGF0IExpbnV4IDcuMyAyLjk2LTExMCkgR0NDOiAoR05VKSAzLjIgR0NDOiAoR05V
KSAzLjIgR0NDOiAoR05VKSAzLjIgR0NDOiAoR05VKSAyLjk2IDIwMDAwNzMxIChSZWQgSGF0IExp
bnV4IDcuMyAyLjk2LTExMCkgCCABIDAxLjAxIAggASAwMS4wMSAIIAEgMDEuMDEgLnN5bXRhYiAu
c3RydGFiIC5zaHN0cnRhYiAuaW50ZXJwIC5ub3RlLkFCSS10YWcgLmhhc2ggLmR5bnN5bSAuZHlu
c3RyIC5nbnUudmVyc2lvbiAuZ251LnZlcnNpb25fciAucmVsLmR5biAucmVsLnBsdCAuaW5pdCAu
dGV4dCAuZmluaSAucm9kYXRhIC5kYXRhIC5laF9mcmFtZSAuZ2NjX2V4Y2VwdF90YWJsZSAuZHlu
YW1pYyAuY3RvcnMgLmR0b3JzIC5qY3IgLmdvdCAuYnNzIC5zdGFiIC5zdGFic3RyIC5jb21tZW50
IC5ub3RlIBsgASACIPSABAj0IBMgASAjIAcgAiAIgQQICAEgBCAxIAUgAiAogQQIKAEgrCAEIAQg
BCA3IAIg1IEECNQBIIABIAUgASAEIBAgPyADIAIgVIMECFQDIJ0CIAEgRyD///9vAiDyhQQI8gUg
MCAEIAIgAiBUIP7//28CICSGBAgkBiBwIAUgAyAEIGMgAiCUhgQIlAYgBCAEIAggbCACILSGBAi0
BiCAIAQgBCAIIHUgASAGIDSHBAg0ByAYIAQgcCABIAYgTIcECEwHIBABIAQgBCB7IAEgBiBgiAQI
YAggkAUgECCBIAEgBiDwjQQI8AogIB4gBCCHIAEgAiAQjgQIEA4gVCAEII8gASADIJAECCAQIAQg
lSABIAMgkAQIIBAg7CAEIJ8gASADIPiQBAj4ECCFIAQgsSAGIAMggJEECIARIOggBSAEIAgguiAB
IAMgaJIECGgSIAQgwSABIAMgdJIECHQSIAQgyCABIAMggJIECIASIAQgBCDNIAEgAyCEkgQIhBIg
UCAEIAQg0iAIIAMg2JIECNgSIFABIAgg1yABINgSIKQHIBkgBCDdIAMgfBoghRkgASDmIAEgATQg
1SABIO8gByDWNCA8IAEgESADIBI1IPUgASABIAIg4Dog8AUgHiA6IAQgECADINBAIDMFIAEg9IAE
CCADIAEgCIEECCADIAIgKIEECCADIAMg1IEECCADIAQgVIMECCADIAUg8oUECCADIAYgJIYECCAD
IAcglIYECCADIAggtIYECCADIDSHBAggAwogICAgIEyHBAggAyBgiAQIIAMg8I0ECCADCiAgICAg
EI4ECCADIA4gkAQIIAMgDyCQBAggAyAQIPiQBAggAyARIICRBAggAyASIGiSBAggAyATIHSSBAgg
AyAUIICSBAggAyAVIISSBAggAyAWINiSBAggAyAXIAMgGCADIBkgAyAaIAMgGyADIBwgAyAdIAMg
HiABIAQg8f8IIAQg8f8TIISIBAggIgAAAISIBAgAAAAAAgAMADIAAAAAAAAAAAAAAAQA8f89AAAA
aJIECAAAAAABABMASwAAAHSSBAgAAAAAAQAUAFkAAAAMkAQIAAAAAAEAEABsAAAAgJIECAAAAAAB
ABUAeQAAAAiQBAgAAAAAAQAPAH0AAAAIlAQIAQAAAAEAFwCJAAAAsIgECAAAAAACAAwAnwAAAAyU
BAgYAAAAAQAXAKgAAAAQiQQIAAAAAAIADAAyAAAAAAAAAAAAAAAEAPH/tAAAAHCSBAgAAAAAAQAT
AMEAAAB8kgQIAAAAAAEAFADOAAAA9JAECAAAAAABABAA3AAAAICSBAgAAAAAAQAVAOgAAADAjQQI
AAAAAAIADAAIAAAAAAAAAAAAAAAEAPH/EwAAAPCNBAgAAAAAAAAMAP4AAAAAAAAAAAAAAAQA8f8K
AQAAJJQECAEAAAABABcAGwEAAHCJBAhJAAAAAgAMAEsBAACAjQQIHgAAAAIADABoAQAAoI0ECB4A
AAACAAwAhQEAAICRBAgAAAAAEQASAI4BAADYkgQIjAAAABEAFwClAQAAXIcECAICAAASAAAAvAEA
ABCOBAgEAAAAEQAOAMMBAABshwQIJAAAABIAAADgAQAABJAECAAAAAARAA8A7QEAAHyHBAgcAQAA
EgAAAA8CAADAiQQITwAAABIADAAhAgAAjIcECP8AAAAiIEgCIJyHBAhJIBIgbQIgEIoECCwgEiCC
AiA0hwQIIBIKIIgCIKyHBAgKAiASIOACIGiTBAiQIBEgFyD2AiC8hwQItQEgEiA7AyDMhwQIiiAS
IGUDIGCIBAggEiBsAyDchwQIrgQgEiCNAyDUkgQIIBAg8f+ZAyBAigQIOgMgEiCeAyDshwQImiAi
AAAAwwMAAPyHBAjKAAAAEgAAAOADAAAAkAQIAAAAACAADwDrAwAA8I0ECAAAAAASAAoA8QMAAAyI
BAh7AQAAEgAAAAgEAADUkgQIAAAAABAA8f8PBAAAhJIECAAAAAARABYAJQQAACiUBAgAAAAAEADx
/yoEAAAciAQIbgAAABIAAABxBAAALIgECNcAAAASAAAAiQQAABSOBAgEAAAAEQAOAJgEAAD4kwQI
EAAAABEAFwDCBAAAAJAECAAAAAAQAA8AzwQAAAAAAAAAAAAAIAAAAOMEAAA8iAQINwAAABIAAAAI
BQAATIgECGUAAAASAAAAJAUAAAAAAAAAAAAAIAAAAABpbml0LmMAaW5pdGZpbmkuYwBnY2MyX2Nv
bXBpbGVkLgBjYWxsX2dtb25fc3RhcnQAY3J0c3R1ZmYuYwBfX0NUT1JfTElTVF9fAF9fRFRPUl9M
SVNUX18AX19FSF9GUkFNRV9CRUdJTl9fAF9fSkNSX0xJU1RfXwBwLjAAY29tcGxldGVkLjEAX19k
b19nbG9iYWxfZHRvcnNfYXV4AG9iamVjdC4yAGZyYW1lX2R1bW15AF9fQ1RPUl9FTkRfXwBfX0RU
T1JfRU5EX18AX19GUkFNRV9FTkRfXwBfX0pDUl9FTkRfXwBfX2RvX2dsb2JhbF9jdG9yc19hdXgA
c3RyaW5ndGVzdC5jcHAAX1pTdDhfX2lvaW5pdABfWjQxX19zdGF0aWNfaW5pdGlhbGl6YXRpb25f
YW5kX2Rlc3RydWN0aW9uXzBpaQBfR0xPQkFMX19JX19aMTFub19icmFja2V0c1NzAF9HTE9CQUxf
X0RfX1oxMW5vX2JyYWNrZXRzU3MAX0RZTkFNSUMAX1pTdDRjb3V0QEBHTElCQ1BQXzMuMgBfWk5T
b2xzRWxAQEdMSUJDUFBfMy4yAF9mcF9odwBfWlN0OXRlcm1pbmF0ZXZAQEdMSUJDUFBfMy4yAF9f
ZHNvX2hhbmRsZQBfX2N4YV9jYWxsX3VuZXhwZWN0ZWRAQENYWEFCSV8xLjIAX1oxMW5vX2JyYWNr
ZXRzU3MAX19kZXJlZ2lzdGVyX2ZyYW1lX2luZm9fYmFzZXNAQEdDQ18zLjAAX1pOU3Q4aW9zX2Jh
c2U0SW5pdEMxRXZAQEdMSUJDUFBfMy4yAF9aMTRpc190aGVyZV9hX2RvdFNzAF9pbml0AF9aU3Ry
c0ljU3QxMWNoYXJfdHJhaXRzSWNFU2FJY0VFUlN0MTNiYXNpY19pc3RyZWFtSVRfVDBfRVM3X1JT
YklTNF9TNV9UMV9FQEBHTElCQ1BQXzMuMgBfWlN0M2NpbkBAR0xJQkNQUF8zLjIAX1pTdGxzSVN0
MTFjaGFyX3RyYWl0c0ljRUVSU3QxM2Jhc2ljX29zdHJlYW1JY1RfRVM1X1BLY0BAR0xJQkNQUF8z
LjIAX1pOU3M0X1JlcDhfTV9jbG9uZUVSS1NhSWNFakBAR0xJQkNQUF8zLjIAX3N0YXJ0AF9fZ3h4
X3BlcnNvbmFsaXR5X3YwQEBDWFhBQklfMS4yAF9fYnNzX3N0YXJ0AG1haW4AX19yZWdpc3Rlcl9m
cmFtZV9pbmZvX2Jhc2VzQEBHQ0NfMy4wAF9fbGliY19zdGFydF9tYWluQEBHTElCQ18yLjAAZGF0
YV9zdGFydABfZmluaQBfWk5Tb2xzRW1AQEdMSUJDUFBfMy4yAF9lZGF0YQBfR0xPQkFMX09GRlNF
VF9UQUJMRV8AX2VuZABfWk5TdDI0X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlSUxiMUVMaTBFRTEw
ZGVhbGxvY2F0ZUVQdmpAQEdMSUJDUFBfMy4yAF9VbndpbmRfUmVzdW1lQEBHQ0NfMy4wAF9JT19z
dGRpbl91c2VkAF9aTlNzMjBfU19lbXB0eV9yZXBfc3RvcmFnZUVAQEdMSUJDUFBfMy4yAF9fZGF0
YV9zdGFydABfSnZfUmVnaXN0ZXJDbGFzc2VzAF9aTlN0OGlvc19iYXNlNEluaXREMUV2QEBHTElC
Q1BQXzMuMgBfWk5LU3M0ZmluZEVjakBAR0xJQkNQUF8zLjIAX19nbW9uX3N0YXJ0X18AIgojIDMg
InN0cmluZ3Rlc3QuY3BwIiAyCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG5vX2JyYWNrZXRz
KHN0cmluZyBzKQp7CiAgaW50IG5iID0gMDsKICB1bnNpZ25lZCBpbnQgaSA9IDAsIGMgPSAwOwog
IHdoaWxlIChpICE9IHN0cmluZzo6bnBvcykKICAgIHsKICAgICAgaSA9IHMuZmluZCgnKCcsIGMp
OwogICAgICBpZiAoaSA9PSBzdHJpbmc6Om5wb3MpIGNvbnRpbnVlOwogICAgICBjID0gcy5maW5k
KCcpJywgaSk7CiAgICAgIGlmIChjICE9IHN0cmluZzo6bnBvcykKICAgICAgICBuYisrOwogICAg
fQogIHJldHVybiBuYjsKfQoKYm9vbCBpc190aGVyZV9hX2RvdChzdHJpbmcgcykKewogIHVuc2ln
bmVkIGludCBpOwogIHJldHVybiBpID0gcy5maW5kKCcuJykgPT0gc3RyaW5nOjpucG9zID8gdHJ1
ZTogZmFsc2U7Cn0KCmludCBtYWluKCkKewogIHN0cmluZyBlOwogIGNvdXQgPDwgIkVudGVyIGEg
Zm9ybXVsYSA6ICI7CiAgY2luID4+IGU7CiAgaWYgKGlzX3RoZXJlX2FfZG90KGUpID09IGZhbHNl
KQogICAgY291dCA8PCAiVGhlIGZvcm11bGEgaGFzIGEgZG90XG4iOwogIGludCBuID0gbm9fYnJh
Y2tldHMoZSk7CiAgaWYgKG4gPT0gMCkKICAgIGNvdXQgPDwgIlRoZXJlIGFyZSBubyBicmFja2V0
c1xuIjsKICBlbHNlCiAgICBjb3V0IDw8ICJUaGVyZSBhcmUgIiA8PCBuIDw8ICJicmFja2V0c1xu
IjsKICByZXR1cm4gMDsKfQo=


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]