public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* other/7814: incorrect scheduling for glibc-2.2.92 stpcpy test
@ 2002-09-02 12:26 glen
  0 siblings, 0 replies; 3+ messages in thread
From: glen @ 2002-09-02 12:26 UTC (permalink / raw)
  To: gcc-gnats


>Number:         7814
>Category:       other
>Synopsis:       incorrect scheduling for glibc-2.2.92 stpcpy test
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Mon Sep 02 12:26:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     glibc-2.2.92 testsuite
>Release:        gcc 3.2
>Organization:
>Environment:
i586-pc-linux-gnu
>Description:
GCC incorrectly generates scheduling dependencies...

test_stpcpy:
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %edi
        pushl   %esi
        movl    $1, %esi
        pushl   %ebx
        movl    $one, %ebx
        subl    %ebx, %esi
        subl    $20, %esp
        movl    $.LC2, it
        leal    (%ebx,%esi), %edi
        pushl   $1
        cmpl    $1, %edi
        addl    $one+2, %esi      << incorrectly clobbers CC
        sete    %al
        andl    $255, %eax
        pushl   %eax
        movw    $97, one
        call    check
        addl    $12, %esp
>How-To-Repeat:
bash:~# gcc -O2 -mcpu=i586 stpcpy.i
bash:~# ./a.out
stpcpy flunked test 1
1 errors.
>Fix:
I'm testing a patch to sched-deps.c which I'll post soon.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="stpcpy.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="stpcpy.i"

IyAxICJzdHBjcHkuYyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+IgojIDEg
InN0cGNweS5jIgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDI4ICIvdXNyL2lu
Y2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyODMg
Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5o
IiAxIDMKIyAyODQgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMTIgIi91c3IvaW5j
bHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAz
MTMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N0ZGlv
LmgiIDIgMwoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LzMuMi4xL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDIwMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4
LzMuMi4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90Owoj
IDM1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5
cGVzLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9s
aWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LzMuMi4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMw
ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIg
X191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2ln
bmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVu
c2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVu
c2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRl
L2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90
Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBp
bnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNp
b25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25f
XyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19x
dWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9f
dV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcg
X19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlu
a190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7
CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3Vf
bG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191
X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9f
ZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7
CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29u
ZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9f
c3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xv
Y2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKCgoKdHlwZWRlZiBpbnQgX19rZXlf
dDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBs
b25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlw
ZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250
X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25n
IF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVk
ZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoK
dHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQg
X190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWdu
ZWQgaW50IF9fc29ja2xlbl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlw
ZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9iaXRzL3Nj
aGVkLmgiIDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0
eTsKICB9OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAzCgoKc3Ry
dWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBpbnQgX19zcGlu
bG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJl
YWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAgaW50IF9f
ZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0g
X19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXpl
X3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRk
cjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3Ry
dWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVz
Y3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBp
bnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
cHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsK
ICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tp
bmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhf
dDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4
YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoKCnR5cGVkZWYgc3RydWN0
IF9wdGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19yd19sb2Nr
OwogIGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZXI7CiAgX3B0
aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0
ZV93YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNoYXJlZDsKfSBwdGhyZWFk
X3J3bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7CiAgaW50IF9f
cHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVkZWYgdm9sYXRpbGUgaW50
IHB0aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgc3RydWN0IF9wdGhyZWFk
X2Zhc3Rsb2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9yZXF1aXJlZDsKICBpbnQgX19iYV9wcmVz
ZW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsKfSBwdGhyZWFkX2JhcnJpZXJfdDsK
Cgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX2JhcnJpZXJhdHRy
X3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMTQ0ICIvdXNy
L2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyAzNyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIg
MwojIDQ1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBG
SUxFOwojIDU1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklM
RSBfX0ZJTEU7CiMgNjUgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2xpYmlvLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9fR19jb25maWcuaCIgMSAzCiMgMTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwoj
IDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC8zLjIuMS9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMKIyAyOTQgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC8zLjIuMS9pbmNsdWRl
L3N0ZGRlZi5oIiAzCnR5cGVkZWYgbG9uZyBpbnQgd2NoYXJfdDsKIyAzMjEgIi91c3IvbGliL2dj
Yy1saWIvaTU4Ni1wYy1saW51eC8zLjIuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5z
aWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKIyAy
NCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgi
IDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIv
aTU4Ni1wYy1saW51eC8zLjIuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNs
dWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMKIyA1
MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDY3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
Mwp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3Qg
X193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMg
MjUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19v
ZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBz
dHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zw
b3M2NF90OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZ2NvbnYuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91
c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC8zLjIuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK
IyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDI5ICIvdXNyL2luY2x1ZGUvZ2NvbnYu
aCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgvMy4yLjEvaW5jbHVk
ZS9zdGRkZWYuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoKCgplbnVt
CnsKICBfX0dDT05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIsCiAg
X19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExfT1VU
UFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQs
CgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJST1IK
fTsKCgoKZW51bQp7CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdOT1JF
X0VSUk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19nY29u
dl9zdGVwX2RhdGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2djb252
X3RyYW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19nY29u
dl9zdGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAq
LCBpbnQsIGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0IF9f
Z2NvbnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9f
Z2NvbnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVj
dCBfX2djb252X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBfX2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50
ICgqX19nY29udl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBj
aGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
dW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2dj
b252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVk
ZWYgaW50ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7
CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3Qg
X19nY29udl90cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7CiAg
X19nY29udl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2NvbnZf
dHJhbnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVjdCBf
X2djb252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAg
c3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25zdCBj
aGFyICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1lOwog
IGNoYXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2Zj
dCBfX2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9fbWlu
X25lZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVlZGVk
X3RvOwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAq
X19kYXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIg
Kl9fb3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2ZsYWdz
OwoKCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91c2U7
CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0
cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9f
Z2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9f
c3RlcHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhIFtd
Owp9ICpfX2djb252X3Q7CiMgNDUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5cGVk
ZWYgdW5pb24KewogIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBz
dHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19k
YXRhOwogIH0gX19jb21iaW5lZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZf
dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50
MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5
cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo
X19TSV9fKSkpOwojIDMzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNTMgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LzMuMi4x
L2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu
dXgvMy4yLjEvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9f
Z251Y192YV9saXN0OwojIDU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgMTYwICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9JT19GSUxFOwoj
IDE3MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoK
CgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1
Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5MyAiL3Vzci9pbmNsdWRlL2xp
YmlvLmgiIDMKfTsKCgplbnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9vaywKICBf
X2NvZGVjdnRfcGFydGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25vY29udgp9
OwojIDI2MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19GSUxFIHsKICBpbnQg
X2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwog
IGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lP
X3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsK
ICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9f
YmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAq
X21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBp
bnQgX2Jsa3NpemU7CiAgX19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBf
Y3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1
ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9jazsKIyAzMDUgIi91c3IvaW5jbHVkZS9saWJpby5o
IiAzCiAgX19vZmY2NF90IF9vZmZzZXQ7CgoKCgoKICB2b2lkICpfX3BhZDE7CiAgdm9pZCAqX19w
YWQyOwoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBzaXplb2YgKGludCkgLSAy
ICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX0lPX0ZJ
TEU7CgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMg
X0lPXzJfMV9zdGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91
dF87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzQ0ICIv
dXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZv
aWQgKl9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVk
ZWYgX19zc2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIg
Kl9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoK
CgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAq
X19wb3MsIGludCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29v
a2llKTsKCgoKCnR5cGVkZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5
cGVkZWYgX19pb193cml0ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lv
X3NlZWtfZm4gY29va2llX3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNv
b2tpZV9jbG9zZV9mdW5jdGlvbl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4g
KnJlYWQ7CiAgX19pb193cml0ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9f
aW9fY2xvc2VfZm4gKmNsb3NlOwp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYg
X0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3Qg
X0lPX2Nvb2tpZV9maWxlOwoKCmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9J
T19jb29raWVfZmlsZSAqX19jZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBf
X2Zucyk7CgoKCgoKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSA7CmV4dGVy
biBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgKF9JT19G
SUxFICosIGludCkgOwpleHRlcm4gd2ludF90IF9fd3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgOwpl
eHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiB3aW50X3QgX193b3Zl
cmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgOwojIDQyNiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDMKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9f
cHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lP
X0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAqX19mcCkgOwoK
ZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgOwoKCgoKCmV4dGVy
biB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxv
Y2tmaWxlIChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJ
TEUgKikgOwojIDQ1NiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZz
Y2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgOwpl
eHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCkgOwpl
eHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkgOwpl
eHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIDsKCmV4
dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBp
bnQpIDsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90
LCBpbnQpIDsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSA7
CiMgNjYgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xp
c3QgdmFfbGlzdDsKIyA4MCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBfR19mcG9z
X3QgZnBvc190OwoKCgoKdHlwZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxMjkgIi91c3Iv
aW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEg
MwojIDEzMCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gRklMRSAqc3RkaW47
CmV4dGVybiBGSUxFICpzdGRvdXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7CgoKCgoKCmV4dGVybiBp
bnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIDsKCmV4dGVybiBpbnQgcmVuYW1l
IChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSA7CgoKCgpleHRlcm4g
RklMRSAqdG1wZmlsZSAodm9pZCkgOwojIDE1OCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0
ZXJuIEZJTEUgKnRtcGZpbGU2NCAodm9pZCkgOwoKCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIg
Kl9fcykgOwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIDsKIyAxNzggIi91
c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIg
Kl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxv
Y19fKSk7CgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBp
bnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tl
ZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lkKSA7CgoK
CgoKZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFt
ZSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2Rlcykg
OwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVu
YW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9k
ZXMsCiAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CiMg
MjIyICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgOwpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAg
ICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgoKCmV4dGVybiBGSUxFICpmZG9wZW4g
KGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIDsKCgoKCgpleHRlcm4gRklMRSAqZm9w
ZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2lvX2Z1bmNzKSA7CgoK
ZXh0ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBj
aGFyICpfX21vZGVzKSA7CgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1zdHJlYW0gKGNoYXIgKipf
X3Jlc3RyaWN0IF9fYnVmbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq
X19yZXN0cmljdCBfX3NpemVsb2MpIDsKCgoKCgpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIDsKCgoKZXh0ZXJuIGlu
dCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9f
YnVmLAogICAgICAgICAgICAgICAgICAgIGludCBfX21vZGVzLCBzaXplX3QgX19uKSA7CgoKCgpl
eHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9f
cmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSkgOwoK
CmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50
IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgcHJp
bnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGlu
dCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKCmV4dGVybiBpbnQgdmZwcmlu
dGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSA7CgpleHRlcm4g
aW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3Zh
X2xpc3QgX19hcmcpCiAgICAgOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmlj
dCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg
ICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIDsKCgoKZXh0ZXJuIGludCBzbnByaW50ZiAoY2hh
ciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVf
XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IHZzbnByaW50
ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3Qg
X19hcmcpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDAp
KSk7CgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAgICAgICAgICAgX19nbnVj
X3ZhX2xpc3QgX19hcmcpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm
X18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10
LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMp
KSk7CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICBf
X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgpleHRlcm4g
aW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LAog
ICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICBfX2F0dHJpYnV0
ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRm
IChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgX19h
dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgpleHRlcm4g
aW50IGZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHNj
YW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGlu
dCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKCgpleHRlcm4gaW50
IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAg
X19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgpleHRlcm4g
aW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFf
bGlzdCBfX2FyZykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAx
LCAwKSkpOwoKCmV4dGVybiBpbnQgdnNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
cywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf
X3NjYW5mX18sIDIsIDApKSk7CgoKCgpleHRlcm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVhbSkg
OwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBnZXRjaGFy
ICh2b2lkKSA7CgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFt
KSA7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBm
Z2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZnB1dGMgKGlu
dCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAq
X19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIDsKCgoKCgoKCmV4dGVy
biBpbnQgZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRl
cm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBp
bnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgOwoKCgoKCmV4dGVybiBpbnQgZ2V0dyAoRklM
RSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFt
KSA7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19u
LCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIDsKCgoKZXh0ZXJuIGNoYXIgKmZnZXRz
X3VubG9ja2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoKCgpleHRlcm4gY2hh
ciAqZ2V0cyAoY2hhciAqX19zKSA7CiMgNDI2ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRl
cm4gX19zc2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBf
X2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJp
Y3QgX19zdHJlYW0pIDsKZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJp
Y3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0
cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChj
aGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgKl9fcmVzdHJpY3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmcHV0cyAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICA7CgoKCmV4
dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgoK
ZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgOwoKCgpleHRlcm4gaW50IHVuZ2V0
YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9p
ZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKZXh0ZXJuIHNpemVfdCBm
d3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSA7CgoK
CmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNp
emVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQg
KF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0pIDsKCgoKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29m
ZiwgaW50IF9fd2hlbmNlKSA7CgpleHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFt
KSA7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSA7CiMgNDg5ICIvdXNyL2lu
Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2Zm
X3QgX19vZmYsIGludCBfX3doZW5jZSkgOwoKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChGSUxFICpf
X3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0sIGZwb3NfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICA7CgpleHRlcm4gaW50IGZzZXRwb3Mg
KEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19wb3MpIDsKIyA1MjMgIi91c3IvaW5j
bHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29m
ZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgOwpleHRlcm4gX19vZmY2NF90IGZ0ZWxsbzY0IChG
SUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGZnZXRwb3M2NCAoRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSwgZnBvczY0X3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgOwpleHRlcm4gaW50IGZz
ZXRwb3M2NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSA7CgoKCmV4
dGVybiB2b2lkIGNsZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZW9mIChG
SUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSA7CgoK
CmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4g
aW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZmVycm9yX3Vu
bG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0
IGNoYXIgKl9fcykgOwoKCgoKZXh0ZXJuIGludCBzeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hh
ciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwoKCmV4dGVybiBpbnQgX3N5c19uZXJyOwpleHRlcm4g
X19jb25zdCBjaGFyICpfX2NvbnN0IF9zeXNfZXJybGlzdFtdOwoKCgoKCmV4dGVybiBpbnQgZmls
ZW5vIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJ
TEUgKl9fc3RyZWFtKSA7CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFyICpf
X2NvbW1hbmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgOwoKCmV4dGVybiBpbnQgcGNsb3NlIChG
SUxFICpfX3N0cmVhbSkgOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIDsK
CgoKCgpleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19zKSA7CgoKCgpzdHJ1Y3Qgb2JzdGFj
azsKCgpleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmlj
dCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1
Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpIDsKCgoKCgoKCmV4dGVybiB2b2lkIGZs
b2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJ
TEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFt
KSA7CiMgNjMwICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L3N0ZGlvLmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAzCmV4dGVybiBf
X2lubGluZSBpbnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2du
dWNfdmFfbGlzdCBfX2FyZykKewogIHJldHVybiB2ZnByaW50ZiAoc3Rkb3V0LCBfX2ZtdCwgX19h
cmcpOwp9CgoKZXh0ZXJuIF9faW5saW5lIGludApnZXRjaGFyICh2b2lkKQp7CiAgcmV0dXJuIF9J
T19nZXRjIChzdGRpbik7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBpbnQKZ2V0Y191bmxvY2tlZCAo
RklMRSAqX19mcCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVhZF9wdHIgPj0gKF9fZnApLT5f
SU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWduZWQgY2hhciAqKSAoX19mcCkt
Pl9JT19yZWFkX3B0cisrKTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQKZ2V0Y2hhcl91bmxvY2tl
ZCAodm9pZCkKewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRfcHRyID49IChzdGRpbiktPl9J
T19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWduZWQgY2hhciAqKSAoc3RkaW4p
LT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBpbnQKcHV0Y2hhciAoaW50
IF9fYykKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQpOwp9CgoKCgpleHRlcm4gX19p
bmxpbmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkKewogIHJl
dHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRl
X2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1
bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0K
CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9f
c3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJl
YW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hh
cikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisr
ID0gKF9fYykpKTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQKcHV0Y2hhcl91bmxvY2tlZCAoaW50
IF9fYykKewogIHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVfcHRyID49IChzdGRvdXQpLT5f
SU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVuc2lnbmVkIGNoYXIpIChfX2Mp
KSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkp
Owp9CgoKCgoKZXh0ZXJuIF9faW5saW5lIF9fc3NpemVfdApnZXRsaW5lIChjaGFyICoqX19saW5l
cHRyLCBzaXplX3QgKl9fbiwgRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gX19nZXRkZWxpbSAo
X19saW5lcHRyLCBfX24sICdcbicsIF9fc3RyZWFtKTsKfQoKCgoKCmV4dGVybiBfX2lubGluZSBp
bnQKZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJlYW0p
LT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQKZmVycm9yX3Vu
bG9ja2VkIChGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAm
IDB4MjApICE9IDApOwp9CiMgNjMxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCiMgNCAi
c3RwY3B5LmMiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI4ICIvdXNyL2lu
Y2x1ZGUvc3RyaW5nLmgiIDMKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51
eC8zLjIuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5o
IiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90
IF9fbikgOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9p
ZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgOwoKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2
b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAog
ICAgICAgICAgICAgICAgICAgICAgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICA7CgoKCgpleHRl
cm4gdm9pZCAqbWVtc2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIDsKCgpleHRl
cm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNp
emVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQg
Km1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHZvaWQgKnJhd21lbWNociAoX19j
b25zdCB2b2lkICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4
dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9f
bikKICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3Ry
Y3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
c3JjKQogICAgIDsKCmV4dGVybiBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz
dCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywg
c2l6ZV90IF9fbikgOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19k
ZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgOwoKZXh0ZXJuIGNoYXIg
KnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGlu
dCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0IGNo
YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cmNvbGwgKF9fY29uc3QgY2hhciAqX19z
MSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
ZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p
IDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1
ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVj
dCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGlu
dCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAq
X19jdHlwZV90b3VwcGVyOwp9ICpfX2xvY2FsZV90OwojIDEwOSAiL3Vzci9pbmNsdWRlL3N0cmlu
Zy5oIiAyIDMKCgpleHRlcm4gaW50IF9fc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f
Y29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29u
c3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bG9jYWxlX3QgX19sKSA7CgoKCgpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9f
cykgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5k
dXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVf
XyAoKF9fbWFsbG9jX18pKTsKIyAxNTUgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4g
Y2hhciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGlu
dCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNo
cm51bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25z
dCBjaGFyICpfX3JlamVjdCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRl
cm4gc2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2Nl
cHQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJy
ayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIg
Kl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9f
aGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICA7CgoKCmV4dGVybiBjaGFyICpf
X3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19y
IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0s
CiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgOwoK
CgoKCgpleHRlcm4gdm9pZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVf
dCBfX2hheXN0YWNrbGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fbmVl
ZGxlLCBzaXplX3QgX19uZWVkbGVsZW4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCmV4dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVf
dCBfX24pIDsKZXh0ZXJuIHZvaWQgKm1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAog
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl
X3QgX19uKSA7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2Nv
bnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCiAgICAgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgOwoK
CgpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6
ZV90IF9fYnVmbGVuKSA7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVf
dCBfX24pIDsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQg
Kl9fZGVzdCwgc2l6ZV90IF9fbikgOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNp
emVfdCBfX24pIDsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25z
dCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hh
ciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGlu
dCBmZnMgKGludCBfX2kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBp
bnQgZmZzbCAobG9uZyBpbnQgX19sKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4
dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29u
c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwg
X19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgX19zdHJjYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19z
MSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2Fs
ZV90IF9fbG9jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgX19zdHJu
Y2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpCiAgICAg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hh
ciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2Nv
bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIDsKCgpleHRl
cm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19zcmMpCiAgICAgOwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFyICpfX3Jl
c3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIDsKCgoK
ZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9f
bikgOwpleHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf
X24pIDsKCgpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgOwoKCmV4dGVybiB2
b2lkICptZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIDsKCgoKCgoKZXh0ZXJuIGNoYXIg
KmJhc2VuYW1lIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIDsKIyAzNTcgIi91c3IvaW5jbHVk
ZS9zdHJpbmcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZy5oIiAxIDMKIyAzNTgg
Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdHJp
bmcyLmgiIDEgMwojIDUyICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9lbmRp
YW4uaCIgMiAzCiMgNTMgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMiAzCiMgMjIxICIv
dXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIHZvaWQgKl9fbWVt
cGNweV9zbWFsbCAodm9pZCAqLCBjaGFyLCBjaGFyLCBjaGFyLCBjaGFyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VpbnQxNl90LCBfX3VpbnQxNl90LCBfX3VpbnQz
Ml90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VpbnQzMl90LCBz
aXplX3QpOwpleHRlcm4gX19pbmxpbmUgdm9pZCAqCl9fbWVtcGNweV9zbWFsbCAodm9pZCAqX19k
ZXN0MSwKICAgICAgICAgICAgICAgICBjaGFyIF9fc3JjMF8xLCBjaGFyIF9fc3JjMl8xLCBjaGFy
IF9fc3JjNF8xLCBjaGFyIF9fc3JjNl8xLAogICAgICAgICAgICAgICAgIF9fdWludDE2X3QgX19z
cmMwXzIsIF9fdWludDE2X3QgX19zcmM0XzIsCiAgICAgICAgICAgICAgICAgX191aW50MzJfdCBf
X3NyYzBfNCwgX191aW50MzJfdCBfX3NyYzRfNCwKICAgICAgICAgICAgICAgICBzaXplX3QgX19z
cmNsZW4pCnsKICB1bmlvbiB7CiAgICBfX3VpbnQzMl90IF9fdWk7CiAgICBfX3VpbnQxNl90IF9f
dXNpOwogICAgdW5zaWduZWQgY2hhciBfX3VjOwogICAgdW5zaWduZWQgY2hhciBfX2M7CiAgfSAq
X191ID0gX19kZXN0MTsKICBzd2l0Y2ggKCh1bnNpZ25lZCBpbnQpIF9fc3JjbGVuKQogICAgewog
ICAgY2FzZSAxOgogICAgICBfX3UtPl9fYyA9IF9fc3JjMF8xOwogICAgICBfX3UgPSBfX2V4dGVu
c2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDEpOwogICAgICBicmVhazsKICAgIGNhc2Ug
MjoKICAgICAgX191LT5fX3VzaSA9IF9fc3JjMF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9f
ICh2b2lkICopKChjaGFyICopIF9fdSArIDIpOwogICAgICBicmVhazsKICAgIGNhc2UgMzoKICAg
ICAgX191LT5fX3VzaSA9IF9fc3JjMF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lk
ICopKChjaGFyICopIF9fdSArIDIpOwogICAgICBfX3UtPl9fYyA9IF9fc3JjMl8xOwogICAgICBf
X3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDEpOwogICAgICBicmVh
azsKICAgIGNhc2UgNDoKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9f
ZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7CiAgICAgIGJyZWFrOwogICAg
Y2FzZSA1OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNp
b25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX2MgPSBfX3NyYzRf
MTsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyAxKTsK
ICAgICAgYnJlYWs7CiAgICBjYXNlIDY6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAg
ICBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOwogICAgICBf
X3UtPl9fdXNpID0gX19zcmM0XzI7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKiko
KGNoYXIgKikgX191ICsgMik7CiAgICAgIGJyZWFrOwogICAgY2FzZSA3OgogICAgICBfX3UtPl9f
dWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAq
KSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VzaSA9IF9fc3JjNF8yOwogICAgICBfX3UgPSBfX2V4
dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDIpOwogICAgICBfX3UtPl9fYyA9IF9f
c3JjNl8xOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSAr
IDEpOwogICAgICBicmVhazsKICAgIGNhc2UgODoKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7
CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7CiAg
ICAgIF9fdS0+X191aSA9IF9fc3JjNF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lk
ICopKChjaGFyICopIF9fdSArIDQpOwogICAgICBicmVhazsKICAgIH0KICByZXR1cm4gKHZvaWQg
KikgX191Owp9CiMgMzc3ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIHZv
aWQgKl9fcmF3bWVtY2hyIChjb25zdCB2b2lkICpfX3MsIGludCBfX2MpOwojIDQwNSAiL3Vzci9p
bmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cmNweV9z
bWFsbCAoY2hhciAqLCBfX3VpbnQxNl90LCBfX3VpbnQxNl90LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fdWludDMyX3QsIF9fdWludDMyX3QsIHNpemVfdCk7CmV4dGVy
biBfX2lubGluZSBjaGFyICoKX19zdHJjcHlfc21hbGwgKGNoYXIgKl9fZGVzdCwKICAgICAgICAg
ICAgICAgIF9fdWludDE2X3QgX19zcmMwXzIsIF9fdWludDE2X3QgX19zcmM0XzIsCiAgICAgICAg
ICAgICAgICBfX3VpbnQzMl90IF9fc3JjMF80LCBfX3VpbnQzMl90IF9fc3JjNF80LAogICAgICAg
ICAgICAgICAgc2l6ZV90IF9fc3JjbGVuKQp7CiAgdW5pb24gewogICAgX191aW50MzJfdCBfX3Vp
OwogICAgX191aW50MTZfdCBfX3VzaTsKICAgIHVuc2lnbmVkIGNoYXIgX191YzsKICB9ICpfX3Ug
PSAodm9pZCAqKSBfX2Rlc3Q7CiAgc3dpdGNoICgodW5zaWduZWQgaW50KSBfX3NyY2xlbikKICAg
IHsKICAgIGNhc2UgMToKICAgICAgX191LT5fX3VjID0gJ1wwJzsKICAgICAgYnJlYWs7CiAgICBj
YXNlIDI6CiAgICAgIF9fdS0+X191c2kgPSBfX3NyYzBfMjsKICAgICAgYnJlYWs7CiAgICBjYXNl
IDM6CiAgICAgIF9fdS0+X191c2kgPSBfX3NyYzBfMjsKICAgICAgX191ID0gX19leHRlbnNpb25f
XyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyAyKTsKICAgICAgX191LT5fX3VjID0gJ1wwJzsKICAg
ICAgYnJlYWs7CiAgICBjYXNlIDQ6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBi
cmVhazsKICAgIGNhc2UgNToKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9
IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7CiAgICAgIF9fdS0+X191
YyA9ICdcMCc7CiAgICAgIGJyZWFrOwogICAgY2FzZSA2OgogICAgICBfX3UtPl9fdWkgPSBfX3Ny
YzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0
KTsKICAgICAgX191LT5fX3VzaSA9IF9fc3JjNF8yOwogICAgICBicmVhazsKICAgIGNhc2UgNzoK
ICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZv
aWQgKikoKGNoYXIgKikgX191ICsgNCk7CiAgICAgIF9fdS0+X191c2kgPSBfX3NyYzRfMjsKICAg
ICAgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyAyKTsKICAgICAg
X191LT5fX3VjID0gJ1wwJzsKICAgICAgYnJlYWs7CiAgICBjYXNlIDg6CiAgICAgIF9fdS0+X191
aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICop
IF9fdSArIDQpOwogICAgICBfX3UtPl9fdWkgPSBfX3NyYzRfNDsKICAgICAgYnJlYWs7CiAgICB9
CiAgcmV0dXJuIF9fZGVzdDsKfQojIDU3MCAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAz
CmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cGNweV9zbWFsbCAoY2hhciAqLCBfX3VpbnQxNl90
LCBfX3VpbnQxNl90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdWlu
dDMyX3QsIF9fdWludDMyX3QsIHNpemVfdCk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHBj
cHlfc21hbGwgKGNoYXIgKl9fZGVzdCwKICAgICAgICAgICAgICAgIF9fdWludDE2X3QgX19zcmMw
XzIsIF9fdWludDE2X3QgX19zcmM0XzIsCiAgICAgICAgICAgICAgICBfX3VpbnQzMl90IF9fc3Jj
MF80LCBfX3VpbnQzMl90IF9fc3JjNF80LAogICAgICAgICAgICAgICAgc2l6ZV90IF9fc3JjbGVu
KQp7CiAgdW5pb24gewogICAgdW5zaWduZWQgaW50IF9fdWk7CiAgICB1bnNpZ25lZCBzaG9ydCBp
bnQgX191c2k7CiAgICB1bnNpZ25lZCBjaGFyIF9fdWM7CiAgICBjaGFyIF9fYzsKICB9ICpfX3Ug
PSAodm9pZCAqKSBfX2Rlc3Q7CiAgc3dpdGNoICgodW5zaWduZWQgaW50KSBfX3NyY2xlbikKICAg
IHsKICAgIGNhc2UgMToKICAgICAgX191LT5fX3VjID0gJ1wwJzsKICAgICAgYnJlYWs7CiAgICBj
YXNlIDI6CiAgICAgIF9fdS0+X191c2kgPSBfX3NyYzBfMjsKICAgICAgX191ID0gX19leHRlbnNp
b25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyAxKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDM6
CiAgICAgIF9fdS0+X191c2kgPSBfX3NyYzBfMjsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAo
dm9pZCAqKSgoY2hhciAqKSBfX3UgKyAyKTsKICAgICAgX191LT5fX3VjID0gJ1wwJzsKICAgICAg
YnJlYWs7CiAgICBjYXNlIDQ6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3Ug
PSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDMpOwogICAgICBicmVhazsK
ICAgIGNhc2UgNToKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0
ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7CiAgICAgIF9fdS0+X191YyA9ICdc
MCc7CiAgICAgIGJyZWFrOwogICAgY2FzZSA2OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsK
ICAgICAgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsKICAg
ICAgX191LT5fX3VzaSA9IF9fc3JjNF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lk
ICopKChjaGFyICopIF9fdSArIDEpOwogICAgICBicmVhazsKICAgIGNhc2UgNzoKICAgICAgX191
LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNo
YXIgKikgX191ICsgNCk7CiAgICAgIF9fdS0+X191c2kgPSBfX3NyYzRfMjsKICAgICAgX191ID0g
X19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyAyKTsKICAgICAgX191LT5fX3Vj
ID0gJ1wwJzsKICAgICAgYnJlYWs7CiAgICBjYXNlIDg6CiAgICAgIF9fdS0+X191aSA9IF9fc3Jj
MF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQp
OwogICAgICBfX3UtPl9fdWkgPSBfX3NyYzRfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAo
dm9pZCAqKSgoY2hhciAqKSBfX3UgKyAzKTsKICAgICAgYnJlYWs7CiAgICB9CiAgcmV0dXJuICZf
X3UtPl9fYzsKfQojIDg5MyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBf
X2lubGluZSBzaXplX3QgX19zdHJjc3BuX2MxIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVq
ZWN0KTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cmNzcG5fYzEgKF9fY29uc3QgY2hhciAq
X19zLCBpbnQgX19yZWplY3QpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwogIHdo
aWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdCkK
ICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6
ZV90IF9fc3RyY3Nwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19yZWplY3QyKTsKZXh0ZXJuIF9f
aW5saW5lIHNpemVfdApfX3N0cmNzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWpl
Y3QxLCBpbnQgX19yZWplY3QyKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKICB3
aGlsZSAoX19zW19fcmVzdWx0XSAhPSAnXDAnICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3Qx
CiAgICAgICAgICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QyKQogICAgKytfX3Jlc3VsdDsK
ICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJjc3BuX2Mz
IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX3JlamVjdDIsIGludCBfX3JlamVjdDMpOwpleHRlcm4gX19p
bmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVj
dDEsIGludCBfX3JlamVjdDIsCiAgICAgICAgICAgICAgaW50IF9fcmVqZWN0MykKewogIHJlZ2lz
dGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAm
JiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MQogICAgICAgICAmJiBfX3NbX19yZXN1bHRdICE9
IF9fcmVqZWN0MiAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MykKICAgICsrX19yZXN1bHQ7
CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMgOTUwICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgi
IDMKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cnNwbl9jMSAoX19jb25zdCBjaGFyICpfX3Ms
IGludCBfX2FjY2VwdCk7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJzcG5fYzEgKF9fY29u
c3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQg
PSAwOwoKICB3aGlsZSAoX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdCkKICAgICsrX19yZXN1bHQ7
CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2My
IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0Mik7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19z
dHJzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLCBpbnQgX19hY2NlcHQy
KQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKCiAgd2hpbGUgKF9fc1tfX3Jlc3Vs
dF0gPT0gX19hY2NlcHQxIHx8IF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQyKQogICAgKytfX3Jl
c3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJz
cG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyLCBpbnQgX19hY2NlcHQzKTsKZXh0ZXJu
IF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Fj
Y2VwdDEsIGludCBfX2FjY2VwdDIsIGludCBfX2FjY2VwdDMpCnsKICByZWdpc3RlciBzaXplX3Qg
X19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDEgfHwgX19z
W19fcmVzdWx0XSA9PSBfX2FjY2VwdDIKICAgICAgICAgfHwgX19zW19fcmVzdWx0XSA9PSBfX2Fj
Y2VwdDMpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQojIDEwMDcgIi91c3Iv
aW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJwYnJr
X2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIpOwpleHRlcm4gX19pbmxpbmUgY2hhciAq
Cl9fc3RycGJya19jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2Fj
Y2VwdDIpCnsKCiAgd2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAqX19zICE9IF9fYWNjZXB0MSAmJiAq
X19zICE9IF9fYWNjZXB0MikKICAgICsrX19zOwogIHJldHVybiAqX19zID09ICdcMCcgPyAoKHZv
aWQgKikwKSA6IChjaGFyICopIChzaXplX3QpIF9fczsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIg
Kl9fc3RycGJya19jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyLCBpbnQgX19hY2NlcHQz
KTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnBicmtfYzMgKF9fY29uc3QgY2hhciAqX19z
LCBpbnQgX19hY2NlcHQxLCBpbnQgX19hY2NlcHQyLAogICAgICAgICAgICAgIGludCBfX2FjY2Vw
dDMpCnsKCiAgd2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAqX19zICE9IF9fYWNjZXB0MSAmJiAqX19z
ICE9IF9fYWNjZXB0MgogICAgICAgICAmJiAqX19zICE9IF9fYWNjZXB0MykKICAgICsrX19zOwog
IHJldHVybiAqX19zID09ICdcMCcgPyAoKHZvaWQgKikwKSA6IChjaGFyICopIChzaXplX3QpIF9f
czsKfQojIDEwNTkgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxp
bmUgY2hhciAqX19zdHJ0b2tfcl8xYyAoY2hhciAqX19zLCBjaGFyIF9fc2VwLCBjaGFyICoqX19u
ZXh0cCk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJ0b2tfcl8xYyAoY2hhciAqX19zLCBj
aGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCkKewogIGNoYXIgKl9fcmVzdWx0OwogIGlmIChfX3Mg
PT0gKCh2b2lkICopMCkpCiAgICBfX3MgPSAqX19uZXh0cDsKICB3aGlsZSAoKl9fcyA9PSBfX3Nl
cCkKICAgICsrX19zOwogIF9fcmVzdWx0ID0gKCh2b2lkICopMCk7CiAgaWYgKCpfX3MgIT0gJ1ww
JykKICAgIHsKICAgICAgX19yZXN1bHQgPSBfX3MrKzsKICAgICAgd2hpbGUgKCpfX3MgIT0gJ1ww
JykKICAgICAgICBpZiAoKl9fcysrID09IF9fc2VwKQogICAgICAgICAgewogICAgICAgICAgICBf
X3NbLTFdID0gJ1wwJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICpfX25l
eHRwID0gX19zOwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQojIDEwOTEgIi91c3IvaW5jbHVk
ZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gY2hhciAqX19zdHJzZXBfZyAoY2hhciAqKl9fc3Ry
aW5ncCwgX19jb25zdCBjaGFyICpfX2RlbGltKTsKIyAxMTA5ICIvdXNyL2luY2x1ZGUvYml0cy9z
dHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3Ryc2VwXzFjIChjaGFyICoqX19z
LCBjaGFyIF9fcmVqZWN0KTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnNlcF8xYyAoY2hh
ciAqKl9fcywgY2hhciBfX3JlamVjdCkKewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0gKl9f
czsKICBpZiAoX19yZXR2YWwgIT0gKCh2b2lkICopMCkgJiYgKCpfX3MgPSAoX19leHRlbnNpb25f
XyAoX19idWlsdGluX2NvbnN0YW50X3AgKF9fcmVqZWN0KSAmJiAoX19yZWplY3QpID09ICdcMCcg
PyAoY2hhciAqKSBfX3Jhd21lbWNociAoX19yZXR2YWwsIF9fcmVqZWN0KSA6IHN0cmNociAoX19y
ZXR2YWwsIF9fcmVqZWN0KSkpKSAhPSAoKHZvaWQgKikwKSkKICAgICooKl9fcykrKyA9ICdcMCc7
CiAgcmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfMmMg
KGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0Mik7CmV4dGVybiBfX2lu
bGluZSBjaGFyICoKX19zdHJzZXBfMmMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFy
IF9fcmVqZWN0MikKewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0gKl9fczsKICBpZiAoX19y
ZXR2YWwgIT0gKCh2b2lkICopMCkpCiAgICB7CiAgICAgIHJlZ2lzdGVyIGNoYXIgKl9fY3AgPSBf
X3JldHZhbDsKICAgICAgd2hpbGUgKDEpCiAgICAgICAgewogICAgICAgICAgaWYgKCpfX2NwID09
ICdcMCcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2NwID0gKCh2b2lkICopMCk7CiAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCpfX2NwID09IF9fcmVq
ZWN0MSB8fCAqX19jcCA9PSBfX3JlamVjdDIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAq
X19jcCsrID0gJ1wwJzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAg
ICAgKytfX2NwOwogICAgICAgIH0KICAgICAgKl9fcyA9IF9fY3A7CiAgICB9CiAgcmV0dXJuIF9f
cmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfM2MgKGNoYXIgKipfX3Ms
IGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyIF9fcmVqZWN0Myk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJz
ZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwgY2hhciBf
X3JlamVjdDMpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0
dmFsICE9ICgodm9pZCAqKTApKQogICAgewogICAgICByZWdpc3RlciBjaGFyICpfX2NwID0gX19y
ZXR2YWw7CiAgICAgIHdoaWxlICgxKQogICAgICAgIHsKICAgICAgICAgIGlmICgqX19jcCA9PSAn
XDAnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jcCA9ICgodm9pZCAqKTApOwogICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICgqX19jcCA9PSBfX3JlamVj
dDEgfHwgKl9fY3AgPT0gX19yZWplY3QyIHx8ICpfX2NwID09IF9fcmVqZWN0MykKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICpfX2NwKysgPSAnXDAnOwogICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICB9CiAgICAgICAgICArK19fY3A7CiAgICAgICAgfQogICAgICAqX19zID0gX19j
cDsKICAgIH0KICByZXR1cm4gX19yZXR2YWw7Cn0KIyAxMTg1ICIvdXNyL2luY2x1ZGUvYml0cy9z
dHJpbmcyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDMzICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgvMy4y
LjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAz
CgoKIyA1MjcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCAqbWFsbG9jIChz
aXplX3QgX19zaXplKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQg
KmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAgX19hdHRyaWJ1dGVf
XyAoKF9fbWFsbG9jX18pKTsKIyA4NjQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKIyAxMTg2
ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDIgMwoKCgoKZXh0ZXJuIGNoYXIgKl9fc3Ry
ZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp
OwojIDEyMDkgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gY2hhciAqX19z
dHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmli
dXRlX18gKChfX21hbGxvY19fKSk7CiMgMzYxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoK
CgoKIyA1ICJzdHBjcHkuYyIgMgoKY29uc3QgY2hhciAqaXQgPSAiPFVOU0VUPiI7CnNpemVfdCBl
cnJvcnMgPSAwOwoKCnN0YXRpYyB2b2lkCmNoZWNrIChpbnQgdGhpbmcsIGludCBudW1iZXIpCnsK
ICBpZiAoIXRoaW5nKQogICAgewogICAgICBwcmludGYoIiVzIGZsdW5rZWQgdGVzdCAlZFxuIiwg
aXQsIG51bWJlcik7CiAgICAgICsrZXJyb3JzOwogICAgfQp9CgoKc3RhdGljIHZvaWQKZXF1YWwg
KGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIsIGludCBudW1iZXIpCnsKICBjaGVjayhhICE9
ICgodm9pZCAqKTApICYmIGIgIT0gKCh2b2lkICopMCkgJiYgKF9fZXh0ZW5zaW9uX18gKHsgc2l6
ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFudF9wIChhKSAmJiBfX2J1
aWx0aW5fY29uc3RhbnRfcCAoYikgJiYgKF9fczFfbGVuID0gc3RybGVuIChhKSwgX19zMl9sZW4g
PSBzdHJsZW4gKGIpLCAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKChhKSArIDEpIC0gKHNpemVf
dCkoY29uc3Qgdm9pZCAqKShhKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90
KShjb25zdCB2b2lkICopKChiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShiKSA9PSAx
KSB8fCBfX3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0IGNoYXIgKikgKGEpLCAoX19j
b25zdCBjaGFyICopIChiKSwgKF9fczFfbGVuIDwgX19zMl9sZW4gPyBfX3MxX2xlbiA6IF9fczJf
bGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChhKSAmJiAoKHNpemVfdCkoY29uc3Qg
dm9pZCAqKSgoYSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoYSkgPT0gMSkgJiYgKF9f
czFfbGVuID0gc3RybGVuIChhKSwgX19zMV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRf
cCAoYikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGIpICsgMSkgLSAoc2l6ZV90KShjb25z
dCB2b2lkICopKGIpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVz
dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGEpKVsw
XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoYikpWzBdKTsg
aWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25z
dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGEpKVsxXSAtICgoX19jb25zdCB1
bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGIpKVsxXSk7IGlmIChfX3MxX2xlbiA+
IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hh
ciAqKSAoX19jb25zdCBjaGFyICopIChhKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq
KSAoX19jb25zdCBjaGFyICopIChiKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0
ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo
YXIgKikgKGEpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg
KikgKGIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25z
dCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z
dCBjaGFyICopIChiKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25l
ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGEpKVswXSAtIF9fczJbMF0pOyBpZiAoX19zMV9s
ZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVk
IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYSkpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xl
biA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqKSAoX19jb25zdCBjaGFyICopIChhKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVu
ID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hh
ciAqKSAoX19jb25zdCBjaGFyICopIChhKSlbM10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9
KSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChiKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAq
KSgoYikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoYikgPT0gMSkgJiYgKF9fczJfbGVu
ID0gc3RybGVuIChiKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYSkg
JiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGEpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lk
ICopKGEpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0g
KCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGEpKVswXSAtICgo
X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoYikpWzBdKTsgaWYgKF9f
czJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNp
Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGEpKVsxXSAtICgoX19jb25zdCB1bnNpZ25l
ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGIpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYg
X19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo
X19jb25zdCBjaGFyICopIChhKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j
b25zdCBjaGFyICopIChiKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDAp
IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg
KGEpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGIp
KVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNp
Z25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy
ICopIChhKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAtICgoX19jb25zdCB1bnNp
Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGIpKVswXTsgaWYgKF9fczJfbGVuID4gMCAm
JiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAoKF9fY29uc3QgdW5zaWdu
ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYm
IF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25l
ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYg
X19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBj
aGFyICopIChfX2NvbnN0IGNoYXIgKikgKGIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IHN0
cmNtcCAoYSwgYikpKSk7IH0pID09IDApLCBudW1iZXIpOwp9CgpjaGFyIG9uZVs1MF07CmNoYXIg
dHdvWzUwXTsKY2hhciAqY3A7CiMgNDAgInN0cGNweS5jIgpzdGF0aWMgdm9pZAp0ZXN0X3N0cGNw
eSAodm9pZCkKewogIGl0ID0gInN0cGNweSI7CiAgY2hlY2sgKCgoX19leHRlbnNpb25fXyAoX19i
dWlsdGluX2NvbnN0YW50X3AgKCJhIikgPyAoKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJhIikg
KyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoImEiKSA9PSAxKSAmJiBzdHJsZW4gKCJhIikg
KyAxIDw9IDggPyBfX2J1aWx0aW5fc3RyY3B5IChvbmUsICJhIikgKyBzdHJsZW4gKCJhIikgOiAo
KGNoYXIgKikgKF9fbWVtcGNweSkgKG9uZSwgImEiLCBzdHJsZW4gKCJhIikgKyAxKSAtIDEpKSA6
IF9fc3RwY3B5IChvbmUsICJhIikpKSAtIG9uZSkgPT0gMSwgMSk7CiAgZXF1YWwgKG9uZSwgImEi
LCAyKTsKCiAgY2hlY2sgKCgoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKCJh
YiIpID8gKCgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiYWIiKSArIDEpIC0gKHNpemVfdCkoY29u
c3Qgdm9pZCAqKSgiYWIiKSA9PSAxKSAmJiBzdHJsZW4gKCJhYiIpICsgMSA8PSA4ID8gX19idWls
dGluX3N0cmNweSAob25lLCAiYWIiKSArIHN0cmxlbiAoImFiIikgOiAoKGNoYXIgKikgKF9fbWVt
cGNweSkgKG9uZSwgImFiIiwgc3RybGVuICgiYWIiKSArIDEpIC0gMSkpIDogX19zdHBjcHkgKG9u
ZSwgImFiIikpKSAtIG9uZSkgPT0gMiwgMyk7CiAgZXF1YWwgKG9uZSwgImFiIiwgNCk7CgogIGNo
ZWNrICgoKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wICgiYWJjIikgPyAoKChz
aXplX3QpKGNvbnN0IHZvaWQgKikoKCJhYmMiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAq
KSgiYWJjIikgPT0gMSkgJiYgc3RybGVuICgiYWJjIikgKyAxIDw9IDggPyBfX2J1aWx0aW5fc3Ry
Y3B5IChvbmUsICJhYmMiKSArIHN0cmxlbiAoImFiYyIpIDogKChjaGFyICopIChfX21lbXBjcHkp
IChvbmUsICJhYmMiLCBzdHJsZW4gKCJhYmMiKSArIDEpIC0gMSkpIDogX19zdHBjcHkgKG9uZSwg
ImFiYyIpKSkgLSBvbmUpID09IDMsIDUpOwogIGVxdWFsIChvbmUsICJhYmMiLCA2KTsKCiAgY2hl
Y2sgKCgoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKCJhYmNkIikgPyAoKChz
aXplX3QpKGNvbnN0IHZvaWQgKikoKCJhYmNkIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQg
KikoImFiY2QiKSA9PSAxKSAmJiBzdHJsZW4gKCJhYmNkIikgKyAxIDw9IDggPyBfX2J1aWx0aW5f
c3RyY3B5IChvbmUsICJhYmNkIikgKyBzdHJsZW4gKCJhYmNkIikgOiAoKGNoYXIgKikgKF9fbWVt
cGNweSkgKG9uZSwgImFiY2QiLCBzdHJsZW4gKCJhYmNkIikgKyAxKSAtIDEpKSA6IF9fc3RwY3B5
IChvbmUsICJhYmNkIikpKSAtIG9uZSkgPT0gNCwgNyk7CiAgZXF1YWwgKG9uZSwgImFiY2QiLCA4
KTsKCiAgY2hlY2sgKCgoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKCJhYmNk
ZSIpID8gKCgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiYWJjZGUiKSArIDEpIC0gKHNpemVfdCko
Y29uc3Qgdm9pZCAqKSgiYWJjZGUiKSA9PSAxKSAmJiBzdHJsZW4gKCJhYmNkZSIpICsgMSA8PSA4
ID8gX19idWlsdGluX3N0cmNweSAob25lLCAiYWJjZGUiKSArIHN0cmxlbiAoImFiY2RlIikgOiAo
KGNoYXIgKikgKF9fbWVtcGNweSkgKG9uZSwgImFiY2RlIiwgc3RybGVuICgiYWJjZGUiKSArIDEp
IC0gMSkpIDogX19zdHBjcHkgKG9uZSwgImFiY2RlIikpKSAtIG9uZSkgPT0gNSwgOSk7CiAgZXF1
YWwgKG9uZSwgImFiY2RlIiwgMTApOwoKICBjaGVjayAoKChfX2V4dGVuc2lvbl9fIChfX2J1aWx0
aW5fY29uc3RhbnRfcCAoImFiY2RlZiIpID8gKCgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiYWJj
ZGVmIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoImFiY2RlZiIpID09IDEpICYmIHN0
cmxlbiAoImFiY2RlZiIpICsgMSA8PSA4ID8gX19idWlsdGluX3N0cmNweSAob25lLCAiYWJjZGVm
IikgKyBzdHJsZW4gKCJhYmNkZWYiKSA6ICgoY2hhciAqKSAoX19tZW1wY3B5KSAob25lLCAiYWJj
ZGVmIiwgc3RybGVuICgiYWJjZGVmIikgKyAxKSAtIDEpKSA6IF9fc3RwY3B5IChvbmUsICJhYmNk
ZWYiKSkpIC0gb25lKSA9PSA2LCAxMSk7CiAgZXF1YWwgKG9uZSwgImFiY2RlZiIsIDEyKTsKCiAg
Y2hlY2sgKCgoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKCJhYmNkZWZnIikg
PyAoKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJhYmNkZWZnIikgKyAxKSAtIChzaXplX3QpKGNv
bnN0IHZvaWQgKikoImFiY2RlZmciKSA9PSAxKSAmJiBzdHJsZW4gKCJhYmNkZWZnIikgKyAxIDw9
IDggPyBfX2J1aWx0aW5fc3RyY3B5IChvbmUsICJhYmNkZWZnIikgKyBzdHJsZW4gKCJhYmNkZWZn
IikgOiAoKGNoYXIgKikgKF9fbWVtcGNweSkgKG9uZSwgImFiY2RlZmciLCBzdHJsZW4gKCJhYmNk
ZWZnIikgKyAxKSAtIDEpKSA6IF9fc3RwY3B5IChvbmUsICJhYmNkZWZnIikpKSAtIG9uZSkgPT0g
NywgMTMpOwogIGVxdWFsIChvbmUsICJhYmNkZWZnIiwgMTQpOwoKICBjaGVjayAoKChfX2V4dGVu
c2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoImFiY2RlZmdoIikgPyAoKChzaXplX3QpKGNv
bnN0IHZvaWQgKikoKCJhYmNkZWZnaCIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJh
YmNkZWZnaCIpID09IDEpICYmIHN0cmxlbiAoImFiY2RlZmdoIikgKyAxIDw9IDggPyBfX2J1aWx0
aW5fc3RyY3B5IChvbmUsICJhYmNkZWZnaCIpICsgc3RybGVuICgiYWJjZGVmZ2giKSA6ICgoY2hh
ciAqKSAoX19tZW1wY3B5KSAob25lLCAiYWJjZGVmZ2giLCBzdHJsZW4gKCJhYmNkZWZnaCIpICsg
MSkgLSAxKSkgOiBfX3N0cGNweSAob25lLCAiYWJjZGVmZ2giKSkpIC0gb25lKSA9PSA4LCAxNSk7
CiAgZXF1YWwgKG9uZSwgImFiY2RlZmdoIiwgMTYpOwoKICBjaGVjayAoKChfX2V4dGVuc2lvbl9f
IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoImFiY2RlZmdoaSIpID8gKCgoc2l6ZV90KShjb25zdCB2
b2lkICopKCgiYWJjZGVmZ2hpIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoImFiY2Rl
ZmdoaSIpID09IDEpICYmIHN0cmxlbiAoImFiY2RlZmdoaSIpICsgMSA8PSA4ID8gX19idWlsdGlu
X3N0cmNweSAob25lLCAiYWJjZGVmZ2hpIikgKyBzdHJsZW4gKCJhYmNkZWZnaGkiKSA6ICgoY2hh
ciAqKSAoX19tZW1wY3B5KSAob25lLCAiYWJjZGVmZ2hpIiwgc3RybGVuICgiYWJjZGVmZ2hpIikg
KyAxKSAtIDEpKSA6IF9fc3RwY3B5IChvbmUsICJhYmNkZWZnaGkiKSkpIC0gb25lKSA9PSA5LCAx
Nyk7CiAgZXF1YWwgKG9uZSwgImFiY2RlZmdoaSIsIDE4KTsKCiAgY2hlY2sgKCgoX19leHRlbnNp
b25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKCJ4IikgPyAoKChzaXplX3QpKGNvbnN0IHZvaWQg
KikoKCJ4IikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoIngiKSA9PSAxKSAmJiBzdHJs
ZW4gKCJ4IikgKyAxIDw9IDggPyBfX2J1aWx0aW5fc3RyY3B5IChvbmUsICJ4IikgKyBzdHJsZW4g
KCJ4IikgOiAoKGNoYXIgKikgKF9fbWVtcGNweSkgKG9uZSwgIngiLCBzdHJsZW4gKCJ4IikgKyAx
KSAtIDEpKSA6IF9fc3RwY3B5IChvbmUsICJ4IikpKSAtIG9uZSkgPT0gMSwgMTkpOwogIGVxdWFs
IChvbmUsICJ4IiwgMjApOwogIGVxdWFsIChvbmUrMiwgImNkZWZnaGkiLCAyMSk7CgogIGNoZWNr
ICgoKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wICgieHgiKSA/ICgoKHNpemVf
dCkoY29uc3Qgdm9pZCAqKSgoInh4IikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoInh4
IikgPT0gMSkgJiYgc3RybGVuICgieHgiKSArIDEgPD0gOCA/IF9fYnVpbHRpbl9zdHJjcHkgKG9u
ZSwgInh4IikgKyBzdHJsZW4gKCJ4eCIpIDogKChjaGFyICopIChfX21lbXBjcHkpIChvbmUsICJ4
eCIsIHN0cmxlbiAoInh4IikgKyAxKSAtIDEpKSA6IF9fc3RwY3B5IChvbmUsICJ4eCIpKSkgLSBv
bmUpID09IDIsIDIyKTsKICBlcXVhbCAob25lLCAieHgiLCAyMyk7CiAgZXF1YWwgKG9uZSszLCAi
ZGVmZ2hpIiwgMjQpOwoKICBjaGVjayAoKChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3Rh
bnRfcCAoInh4eCIpID8gKCgoc2l6ZV90KShjb25zdCB2b2lkICopKCgieHh4IikgKyAxKSAtIChz
aXplX3QpKGNvbnN0IHZvaWQgKikoInh4eCIpID09IDEpICYmIHN0cmxlbiAoInh4eCIpICsgMSA8
PSA4ID8gX19idWlsdGluX3N0cmNweSAob25lLCAieHh4IikgKyBzdHJsZW4gKCJ4eHgiKSA6ICgo
Y2hhciAqKSAoX19tZW1wY3B5KSAob25lLCAieHh4Iiwgc3RybGVuICgieHh4IikgKyAxKSAtIDEp
KSA6IF9fc3RwY3B5IChvbmUsICJ4eHgiKSkpIC0gb25lKSA9PSAzLCAyNSk7CiAgZXF1YWwgKG9u
ZSwgInh4eCIsIDI2KTsKICBlcXVhbCAob25lKzQsICJlZmdoaSIsIDI3KTsKCiAgY2hlY2sgKCgo
X19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKCJ4eHh4IikgPyAoKChzaXplX3Qp
KGNvbnN0IHZvaWQgKikoKCJ4eHh4IikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoInh4
eHgiKSA9PSAxKSAmJiBzdHJsZW4gKCJ4eHh4IikgKyAxIDw9IDggPyBfX2J1aWx0aW5fc3RyY3B5
IChvbmUsICJ4eHh4IikgKyBzdHJsZW4gKCJ4eHh4IikgOiAoKGNoYXIgKikgKF9fbWVtcGNweSkg
KG9uZSwgInh4eHgiLCBzdHJsZW4gKCJ4eHh4IikgKyAxKSAtIDEpKSA6IF9fc3RwY3B5IChvbmUs
ICJ4eHh4IikpKSAtIG9uZSkgPT0gNCwgMjgpOwogIGVxdWFsIChvbmUsICJ4eHh4IiwgMjkpOwog
IGVxdWFsIChvbmUrNSwgImZnaGkiLCAzMCk7CgogIGNoZWNrICgoKF9fZXh0ZW5zaW9uX18gKF9f
YnVpbHRpbl9jb25zdGFudF9wICgieHh4eHgiKSA/ICgoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgo
Inh4eHh4IikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoInh4eHh4IikgPT0gMSkgJiYg
c3RybGVuICgieHh4eHgiKSArIDEgPD0gOCA/IF9fYnVpbHRpbl9zdHJjcHkgKG9uZSwgInh4eHh4
IikgKyBzdHJsZW4gKCJ4eHh4eCIpIDogKChjaGFyICopIChfX21lbXBjcHkpIChvbmUsICJ4eHh4
eCIsIHN0cmxlbiAoInh4eHh4IikgKyAxKSAtIDEpKSA6IF9fc3RwY3B5IChvbmUsICJ4eHh4eCIp
KSkgLSBvbmUpID09IDUsIDMxKTsKICBlcXVhbCAob25lLCAieHh4eHgiLCAzMik7CiAgZXF1YWwg
KG9uZSs2LCAiZ2hpIiwgMzMpOwoKICBjaGVjayAoKChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5f
Y29uc3RhbnRfcCAoInh4eHh4eCIpID8gKCgoc2l6ZV90KShjb25zdCB2b2lkICopKCgieHh4eHh4
IikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoInh4eHh4eCIpID09IDEpICYmIHN0cmxl
biAoInh4eHh4eCIpICsgMSA8PSA4ID8gX19idWlsdGluX3N0cmNweSAob25lLCAieHh4eHh4Iikg
KyBzdHJsZW4gKCJ4eHh4eHgiKSA6ICgoY2hhciAqKSAoX19tZW1wY3B5KSAob25lLCAieHh4eHh4
Iiwgc3RybGVuICgieHh4eHh4IikgKyAxKSAtIDEpKSA6IF9fc3RwY3B5IChvbmUsICJ4eHh4eHgi
KSkpIC0gb25lKSA9PSA2LCAzNCk7CiAgZXF1YWwgKG9uZSwgInh4eHh4eCIsIDM1KTsKICBlcXVh
bCAob25lKzcsICJoaSIsIDM2KTsKCiAgY2hlY2sgKCgoX19leHRlbnNpb25fXyAoX19idWlsdGlu
X2NvbnN0YW50X3AgKCJ4eHh4eHh4IikgPyAoKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJ4eHh4
eHh4IikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoInh4eHh4eHgiKSA9PSAxKSAmJiBz
dHJsZW4gKCJ4eHh4eHh4IikgKyAxIDw9IDggPyBfX2J1aWx0aW5fc3RyY3B5IChvbmUsICJ4eHh4
eHh4IikgKyBzdHJsZW4gKCJ4eHh4eHh4IikgOiAoKGNoYXIgKikgKF9fbWVtcGNweSkgKG9uZSwg
Inh4eHh4eHgiLCBzdHJsZW4gKCJ4eHh4eHh4IikgKyAxKSAtIDEpKSA6IF9fc3RwY3B5IChvbmUs
ICJ4eHh4eHh4IikpKSAtIG9uZSkgPT0gNywgMzcpOwogIGVxdWFsIChvbmUsICJ4eHh4eHh4Iiwg
MzgpOwogIGVxdWFsIChvbmUrOCwgImkiLCAzOSk7CgogIGNoZWNrICgoKF9fZXh0ZW5zaW9uX18g
KF9fYnVpbHRpbl9jb25zdGFudF9wICgiYyIpID8gKCgoc2l6ZV90KShjb25zdCB2b2lkICopKCgi
YyIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJjIikgPT0gMSkgJiYgc3RybGVuICgi
YyIpICsgMSA8PSA4ID8gX19idWlsdGluX3N0cmNweSAoKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRp
bl9jb25zdGFudF9wICgiYiIpID8gKCgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiYiIpICsgMSkg
LSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJiIikgPT0gMSkgJiYgc3RybGVuICgiYiIpICsgMSA8
PSA4ID8gX19idWlsdGluX3N0cmNweSAoKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFu
dF9wICgiYSIpID8gKCgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiYSIpICsgMSkgLSAoc2l6ZV90
KShjb25zdCB2b2lkICopKCJhIikgPT0gMSkgJiYgc3RybGVuICgiYSIpICsgMSA8PSA4ID8gX19i
dWlsdGluX3N0cmNweSAob25lLCAiYSIpICsgc3RybGVuICgiYSIpIDogKChjaGFyICopIChfX21l
bXBjcHkpIChvbmUsICJhIiwgc3RybGVuICgiYSIpICsgMSkgLSAxKSkgOiBfX3N0cGNweSAob25l
LCAiYSIpKSksICJiIikgKyBzdHJsZW4gKCJiIikgOiAoKGNoYXIgKikgKF9fbWVtcGNweSkgKChf
X2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoImEiKSA/ICgoKHNpemVfdCkoY29u
c3Qgdm9pZCAqKSgoImEiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiYSIpID09IDEp
ICYmIHN0cmxlbiAoImEiKSArIDEgPD0gOCA/IF9fYnVpbHRpbl9zdHJjcHkgKG9uZSwgImEiKSAr
IHN0cmxlbiAoImEiKSA6ICgoY2hhciAqKSAoX19tZW1wY3B5KSAob25lLCAiYSIsIHN0cmxlbiAo
ImEiKSArIDEpIC0gMSkpIDogX19zdHBjcHkgKG9uZSwgImEiKSkpLCAiYiIsIHN0cmxlbiAoImIi
KSArIDEpIC0gMSkpIDogX19zdHBjcHkgKChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3Rh
bnRfcCAoImEiKSA/ICgoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoImEiKSArIDEpIC0gKHNpemVf
dCkoY29uc3Qgdm9pZCAqKSgiYSIpID09IDEpICYmIHN0cmxlbiAoImEiKSArIDEgPD0gOCA/IF9f
YnVpbHRpbl9zdHJjcHkgKG9uZSwgImEiKSArIHN0cmxlbiAoImEiKSA6ICgoY2hhciAqKSAoX19t
ZW1wY3B5KSAob25lLCAiYSIsIHN0cmxlbiAoImEiKSArIDEpIC0gMSkpIDogX19zdHBjcHkgKG9u
ZSwgImEiKSkpLCAiYiIpKSksICJjIikgKyBzdHJsZW4gKCJjIikgOiAoKGNoYXIgKikgKF9fbWVt
cGNweSkgKChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoImIiKSA/ICgoKHNp
emVfdCkoY29uc3Qgdm9pZCAqKSgoImIiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgi
YiIpID09IDEpICYmIHN0cmxlbiAoImIiKSArIDEgPD0gOCA/IF9fYnVpbHRpbl9zdHJjcHkgKChf
X2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoImEiKSA/ICgoKHNpemVfdCkoY29u
c3Qgdm9pZCAqKSgoImEiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiYSIpID09IDEp
ICYmIHN0cmxlbiAoImEiKSArIDEgPD0gOCA/IF9fYnVpbHRpbl9zdHJjcHkgKG9uZSwgImEiKSAr
IHN0cmxlbiAoImEiKSA6ICgoY2hhciAqKSAoX19tZW1wY3B5KSAob25lLCAiYSIsIHN0cmxlbiAo
ImEiKSArIDEpIC0gMSkpIDogX19zdHBjcHkgKG9uZSwgImEiKSkpLCAiYiIpICsgc3RybGVuICgi
YiIpIDogKChjaGFyICopIChfX21lbXBjcHkpICgoX19leHRlbnNpb25fXyAoX19idWlsdGluX2Nv
bnN0YW50X3AgKCJhIikgPyAoKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJhIikgKyAxKSAtIChz
aXplX3QpKGNvbnN0IHZvaWQgKikoImEiKSA9PSAxKSAmJiBzdHJsZW4gKCJhIikgKyAxIDw9IDgg
PyBfX2J1aWx0aW5fc3RyY3B5IChvbmUsICJhIikgKyBzdHJsZW4gKCJhIikgOiAoKGNoYXIgKikg
KF9fbWVtcGNweSkgKG9uZSwgImEiLCBzdHJsZW4gKCJhIikgKyAxKSAtIDEpKSA6IF9fc3RwY3B5
IChvbmUsICJhIikpKSwgImIiLCBzdHJsZW4gKCJiIikgKyAxKSAtIDEpKSA6IF9fc3RwY3B5ICgo
X19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKCJhIikgPyAoKChzaXplX3QpKGNv
bnN0IHZvaWQgKikoKCJhIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoImEiKSA9PSAx
KSAmJiBzdHJsZW4gKCJhIikgKyAxIDw9IDggPyBfX2J1aWx0aW5fc3RyY3B5IChvbmUsICJhIikg
KyBzdHJsZW4gKCJhIikgOiAoKGNoYXIgKikgKF9fbWVtcGNweSkgKG9uZSwgImEiLCBzdHJsZW4g
KCJhIikgKyAxKSAtIDEpKSA6IF9fc3RwY3B5IChvbmUsICJhIikpKSwgImIiKSkpLCAiYyIsIHN0
cmxlbiAoImMiKSArIDEpIC0gMSkpIDogX19zdHBjcHkgKChfX2V4dGVuc2lvbl9fIChfX2J1aWx0
aW5fY29uc3RhbnRfcCAoImIiKSA/ICgoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoImIiKSArIDEp
IC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiYiIpID09IDEpICYmIHN0cmxlbiAoImIiKSArIDEg
PD0gOCA/IF9fYnVpbHRpbl9zdHJjcHkgKChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3Rh
bnRfcCAoImEiKSA/ICgoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoImEiKSArIDEpIC0gKHNpemVf
dCkoY29uc3Qgdm9pZCAqKSgiYSIpID09IDEpICYmIHN0cmxlbiAoImEiKSArIDEgPD0gOCA/IF9f
YnVpbHRpbl9zdHJjcHkgKG9uZSwgImEiKSArIHN0cmxlbiAoImEiKSA6ICgoY2hhciAqKSAoX19t
ZW1wY3B5KSAob25lLCAiYSIsIHN0cmxlbiAoImEiKSArIDEpIC0gMSkpIDogX19zdHBjcHkgKG9u
ZSwgImEiKSkpLCAiYiIpICsgc3RybGVuICgiYiIpIDogKChjaGFyICopIChfX21lbXBjcHkpICgo
X19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKCJhIikgPyAoKChzaXplX3QpKGNv
bnN0IHZvaWQgKikoKCJhIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoImEiKSA9PSAx
KSAmJiBzdHJsZW4gKCJhIikgKyAxIDw9IDggPyBfX2J1aWx0aW5fc3RyY3B5IChvbmUsICJhIikg
KyBzdHJsZW4gKCJhIikgOiAoKGNoYXIgKikgKF9fbWVtcGNweSkgKG9uZSwgImEiLCBzdHJsZW4g
KCJhIikgKyAxKSAtIDEpKSA6IF9fc3RwY3B5IChvbmUsICJhIikpKSwgImIiLCBzdHJsZW4gKCJi
IikgKyAxKSAtIDEpKSA6IF9fc3RwY3B5ICgoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0
YW50X3AgKCJhIikgPyAoKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJhIikgKyAxKSAtIChzaXpl
X3QpKGNvbnN0IHZvaWQgKikoImEiKSA9PSAxKSAmJiBzdHJsZW4gKCJhIikgKyAxIDw9IDggPyBf
X2J1aWx0aW5fc3RyY3B5IChvbmUsICJhIikgKyBzdHJsZW4gKCJhIikgOiAoKGNoYXIgKikgKF9f
bWVtcGNweSkgKG9uZSwgImEiLCBzdHJsZW4gKCJhIikgKyAxKSAtIDEpKSA6IF9fc3RwY3B5IChv
bmUsICJhIikpKSwgImIiKSkpLCAiYyIpKSkgLSBvbmUpID09IDMsIDQwKTsKICBlcXVhbCAob25l
LCAiYWJjIiwgNDEpOwogIGVxdWFsIChvbmUgKyA0LCAieHh4IiwgNDIpOwp9CgppbnQKbWFpbiAo
dm9pZCkKewogIGludCBzdGF0dXM7CgoKICB0ZXN0X3N0cGNweSAoKTsKCiAgaWYgKGVycm9ycyA9
PSAwKQogICAgewogICAgICBzdGF0dXMgPSAwOwogICAgICBwdXRzKCJObyBlcnJvcnMuIik7CiAg
ICB9CiAgZWxzZQogICAgewogICAgICBzdGF0dXMgPSAxOwogICAgICBwcmludGYoIiVaZCBlcnJv
cnMuXG4iLCBlcnJvcnMpOwogICAgfQoKICByZXR1cm4gc3RhdHVzOwp9Cg==


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

* Re: other/7814: incorrect scheduling for glibc-2.2.92 stpcpy test
@ 2002-09-02 13:26 Glen Nakamura
  0 siblings, 0 replies; 3+ messages in thread
From: Glen Nakamura @ 2002-09-02 13:26 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR other/7814; it has been noted by GNATS.

From: Glen Nakamura <glen@imodulo.com>
To: gcc-gnats@gcc.gnu.org, gcc-bugs@gcc.gnu.org
Cc:  
Subject: Re: other/7814: incorrect scheduling for glibc-2.2.92 stpcpy test
Date: Mon, 2 Sep 2002 10:24:48 -1000

 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7814
 Okay, I think the problem is that when we flush the dependency lists
 (e.g. when ?_length > MAX_PENDING_LIST_LENGTH), we end up with a single
 insn in the 'clobbers' list while the 'sets' and 'uses' lists are empty.
 Now, if there is another clobber insn before any set or use insn, it won't
 be dependent on any previous insn because the 'sets' and 'uses' lists
 are empty...  The problem is fixed by adding the last insn to the 'sets'
 list after flushing.
 
 - glen
 
 Here is the patch:
 
 ChangeLog
 ===================================================================
 2002-09-02  Glen Nakamura  <glen@imodulo.com>
 
 	* sched-deps.c (sched_analyze_insn): Make sure to add insn
 	to reg_last->sets after flushing the dependency lists to guarantee
 	that subsequent clobbers will be dependent on it.
 
 Index: sched-deps.c
 ===================================================================
 RCS file: /cvsroot/gcc/gcc/gcc/sched-deps.c,v
 retrieving revision 1.34.6.1
 diff -c -3 -p -u -r1.34.6.1 sched-deps.c
 --- sched-deps.c	19 Aug 2002 18:59:31 -0000	1.34.6.1
 +++ sched-deps.c	2 Sep 2002 06:35:15 -0000
 @@ -1118,8 +1118,6 @@ sched_analyze_insn (deps, x, insn, loop_
  	  EXECUTE_IF_SET_IN_REG_SET (reg_pending_clobbers, 0, i,
  	    {
  	      struct deps_reg *reg_last = &deps->reg_last[i];
 -	      add_dependence_list (insn, reg_last->sets, REG_DEP_OUTPUT);
 -	      add_dependence_list (insn, reg_last->uses, REG_DEP_ANTI);
  	      if (reg_last->uses_length > MAX_PENDING_LIST_LENGTH
  		  || reg_last->clobbers_length > MAX_PENDING_LIST_LENGTH)
  		{
 @@ -1129,6 +1127,7 @@ sched_analyze_insn (deps, x, insn, loop_
  						REG_DEP_ANTI);
  		  add_dependence_list_and_free (insn, &reg_last->clobbers,
  						REG_DEP_OUTPUT);
 +		  reg_last->sets = alloc_INSN_LIST (insn, reg_last->sets);
  		  reg_last->clobbers_length = 0;
  		  reg_last->uses_length = 0;
  		}


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

* Re: other/7814: incorrect scheduling for glibc-2.2.92 stpcpy test
@ 2002-09-02 12:46 Glen Nakamura
  0 siblings, 0 replies; 3+ messages in thread
From: Glen Nakamura @ 2002-09-02 12:46 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR other/7814; it has been noted by GNATS.

From: Glen Nakamura <glen@imodulo.com>
To: gcc-gnats@gcc.gnu.org, gcc-bugs@gcc.gnu.org
Cc:  
Subject: Re: other/7814: incorrect scheduling for glibc-2.2.92 stpcpy test
Date: Mon, 2 Sep 2002 09:36:09 -1000

 --J2SCkAp4GZ/dPZZf
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 Hmm, I intended to file this under optimization, but I must have selected
 other by mistake... *grr*  Anyway, here is the C source for the uploaded
 testcase.
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7814
 
 --J2SCkAp4GZ/dPZZf
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: attachment; filename="stpcpy.c"
 
 #define _GNU_SOURCE
 
 #include <stdio.h>
 #include <string.h>
 
 const char *it = "<UNSET>";	/* Routine name for message routines. */
 size_t errors = 0;
 
 /* Complain if condition is not true.  */
 static void
 check (int thing, int number)
 {
   if (!thing)
     {
       printf("%s flunked test %d\n", it, number);
       ++errors;
     }
 }
 
 /* Complain if first two args don't strcmp as equal.  */
 static void
 equal (const char *a, const char *b, int number)
 {
   check(a != NULL && b != NULL && (strcmp (a, b) == 0), number);
 }
 
 char one[50];
 char two[50];
 char *cp;
 
 #undef __stpcpy
 #    define __stpcpy(dest, src) \
   (__extension__ (__builtin_constant_p (src)                                  \
                   ? (__string2_1bptr_p (src) && strlen (src) + 1 <= 8         \
                      ? __builtin_strcpy (dest, src) + strlen (src)            \
                      : ((char *) (__mempcpy) (dest, src, strlen (src) + 1)    \
                         - 1))                                                 \
                   : __stpcpy (dest, src)))
 
 static void
 test_stpcpy (void)
 {
   it = "stpcpy";
   check ((stpcpy (one, "a") - one) == 1, 1);
   equal (one, "a", 2);
 
   check ((stpcpy (one, "ab") - one) == 2, 3);
   equal (one, "ab", 4);
 
   check ((stpcpy (one, "abc") - one) == 3, 5);
   equal (one, "abc", 6);
 
   check ((stpcpy (one, "abcd") - one) == 4, 7);
   equal (one, "abcd", 8);
 
   check ((stpcpy (one, "abcde") - one) == 5, 9);
   equal (one, "abcde", 10);
 
   check ((stpcpy (one, "abcdef") - one) == 6, 11);
   equal (one, "abcdef", 12);
 
   check ((stpcpy (one, "abcdefg") - one) == 7, 13);
   equal (one, "abcdefg", 14);
 
   check ((stpcpy (one, "abcdefgh") - one) == 8, 15);
   equal (one, "abcdefgh", 16);
 
   check ((stpcpy (one, "abcdefghi") - one) == 9, 17);
   equal (one, "abcdefghi", 18);
 
   check ((stpcpy (one, "x") - one) == 1, 19);
   equal (one, "x", 20);			/* Writeover. */
   equal (one+2, "cdefghi", 21);		/* Wrote too much? */
 
   check ((stpcpy (one, "xx") - one) == 2, 22);
   equal (one, "xx", 23);		/* Writeover. */
   equal (one+3, "defghi", 24);		/* Wrote too much? */
 
   check ((stpcpy (one, "xxx") - one) == 3, 25);
   equal (one, "xxx", 26);		/* Writeover. */
   equal (one+4, "efghi", 27);		/* Wrote too much? */
 
   check ((stpcpy (one, "xxxx") - one) == 4, 28);
   equal (one, "xxxx", 29);		/* Writeover. */
   equal (one+5, "fghi", 30);		/* Wrote too much? */
 
   check ((stpcpy (one, "xxxxx") - one) == 5, 31);
   equal (one, "xxxxx", 32);		/* Writeover. */
   equal (one+6, "ghi", 33);		/* Wrote too much? */
 
   check ((stpcpy (one, "xxxxxx") - one) == 6, 34);
   equal (one, "xxxxxx", 35);		/* Writeover. */
   equal (one+7, "hi", 36);		/* Wrote too much? */
 
   check ((stpcpy (one, "xxxxxxx") - one) == 7, 37);
   equal (one, "xxxxxxx", 38);		/* Writeover. */
   equal (one+8, "i", 39);		/* Wrote too much? */
 
   check ((stpcpy (stpcpy (stpcpy (one, "a"), "b"), "c") - one) == 3, 40);
   equal (one, "abc", 41);
   equal (one + 4, "xxx", 42);
 }
 
 int
 main (void)
 {
   int status;
 
   /* A closely related function is stpcpy.  */
   test_stpcpy ();
 
   if (errors == 0)
     {
       status = 0;
       puts("No errors.");
     }
   else
     {
       status = 1;
       printf("%Zd errors.\n", errors);
     }
 
   return status;
 }
 
 --J2SCkAp4GZ/dPZZf--


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

end of thread, other threads:[~2002-09-02 20:26 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-09-02 12:26 other/7814: incorrect scheduling for glibc-2.2.92 stpcpy test glen
2002-09-02 12:46 Glen Nakamura
2002-09-02 13:26 Glen Nakamura

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