c++/3011: g++ 2.95.3 hangs forever on syntactically eroneous code

mtodorov@alu.hr mtodorov@alu.hr
Thu May 31 07:56:00 GMT 2001


>Number:         3011
>Category:       c++
>Synopsis:       g++ 2.95.3 hangs forever on syntactically eroneous code
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-illegal-code
>Submitter-Id:   net
>Arrival-Date:   Thu May 31 07:56:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     mtodorov@alu.hr
>Release:        gcc version 2.95.3 20010315 (release)
>Organization:
>Environment:
alpha-dec-osf4.0b, sparc-sun-solaris2.7
>Description:
gcc is called with no options:

> g++ -v -save-temps virtual-method.cc
Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.7/2.95.3/specs
gcc version 2.95.3 20010315 (release)
 /usr/local/lib/gcc-lib/sparc-sun-solaris2.7/2.95.3/cpp0 -lang-c++ -v -D__GNUC__=2 -D__GNUG__=2 -D__GNUC_MINOR__=95 -D__cplusplus -Dsparc -Dsun -Dunix -D__svr4__ -D__SVR4 -D__sparc__ -D__sun__ -D__unix__ -D__svr4__ -D__SVR4 -D__sparc -D__sun -D__unix -Asystem(unix) -Asystem(svr4) -D__EXCEPTIONS -D__GCC_NEW_VARARGS__ -Acpu(sparc) -Amachine(sparc) v2.cc v2.ii
GNU CPP version 2.95.3 20010315 (release) (sparc)
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/lib/gcc-lib/sparc-sun-solaris2.7/2.95.3/../../../../include/g++-3
 /usr/local/include
 /usr/local/lib/gcc-lib/sparc-sun-solaris2.7/2.95.3/../../../../sparc-sun-solaris2.7/include
 /usr/local/lib/gcc-lib/sparc-sun-solaris2.7/2.95.3/include
 /usr/include
End of search list.
The following default directories have been omitted from the search path:
End of omitted list.
 /usr/local/lib/gcc-lib/sparc-sun-solaris2.7/2.95.3/cc1plus v2.ii -quiet -dumpbase v2.cc -version -o v2.s
GNU C++ version 2.95.3 20010315 (release) (sparc-sun-solaris2.7) compiled by GNU C version 2.95.3 20010315 (release).
v2.cc:13: semicolon missing after declaration of `RootObject'
v2.cc:21: semicolon missing after declaration of `Point3D'
v2.cc:30: semicolon missing after declaration of `Line3D'
<here it hangs>

(g++ behaves the same way).

After reporting correct syntax errors for the following
C++ code, and producing .ii file gcc-2.95.3 hangs
in cc1plus process forever doing something that even
truss -p <pid> can't detect
(so she is only calculating some loop without ever
issuing a system call).

The program is small 9in How-To-Repeat: window.

The belonging virtual-method.ii is in attachment.
There is never generated a line of .s file, though
an empty .s file is created.

>How-To-Repeat:
% cat > virtual-method.cc
/*
 * Program tests the virtual function calling mechanism
 */

#include <iostream.h>

class RootObject {
public:
        char* typeOf() { return "RootObject"; }
        virtual void draw() { cout << "RootObject->draw() called.\n"; }
}

class Point3D : public RootObject {
protected:
        long double x, y, z;
public:
        char *typeOf() { return "Point3D"; }
        virtual void draw() { cout << "Point3D->draw() called.\n"; }
}

class Line3D : public RootObject {
protected:
        long double x1, y1, z1;
        long double x2, y2, z2;
public:
        char *typeOf() { return "Line3D"; }
        virtual void draw() { cout << "Line3D->draw() called.\n"; }
}

int main(int argc, char *argv[])
{
        RootObject* objarray[4];

        objarray[0] = new RootObject;
        objarray[1] = new Point3D;
        objarray[2] = new Line3D;
        objarray[3] = new Point3D;

        for (int i = 0; i <= 3; i++)
        {
                cout << objarray[i]->typeOf();
        }
        for (i = 0; i <= 3; i++)
        {
                objarray[i]->draw();
        }
}
^D
% g++ virtual-method.cc
// the problem occurs only with all three commas missing,
// only one or two won't do to reproduce the bug!!!
// if there are four classes without trailing ; - compiler
// hangs again ...
// P.S. Please don't laugh at the errors in example ...
>Fix:
Nothing comes to mind (yet). Unfortunatelly, I'm not so much
introduced in deep secrets of g++ and cc1plus ...
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="virtual-method.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="virtual-method.ii"

IyAxICJ2aXJ0dWFsLW1ldGhvZC5jYyIKIAoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaW9z
dHJlYW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNl
CgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8yLjk1
LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCiAgIAoKCgpleHRlcm4gIkMiIHsK
IyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2xpYmlvLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjcvMi45NS4zLy4uLy4uLy4uLy4uL3NwYXJjLXN1bi1zb2xhcmlzMi43L2luY2x1ZGUvX0dfY29u
ZmlnLmgiIDEgMyA0CiAgCgoKCgoKCgoKCnR5cGVkZWYgICAgICAgICAgaW50ICAgX0dfaW50OF90
IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
IF9HX3VpbnQ4X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkpOwp0eXBlZGVmICAg
ICAgICAgIGludCAgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0hJX18pKSk7
CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9f
KF9fSElfXykpKTsKdHlwZWRlZiAgICAgICAgICBpbnQgIF9HX2ludDMyX3QgX19hdHRyaWJ1dGVf
XygoX19tb2RlX18oX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBf
X2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7CnR5cGVkZWYgICAgICAgICAgaW50ICBf
R19pbnQ2NF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fRElfXykpKTsKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgX0dfdWludDY0X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ESV9fKSkpOwoK
X19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBfR19sbG9uZzsKX19leHRlbnNpb25fXyB0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfR191bGxvbmc7CgoKCgoKCgoKdHlwZWRlZiBsb25n
IF9HX2Nsb2NrX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfR19kZXZfdDsKdHlwZWRlZiBsb25n
IF9HX2Zwb3NfdDsKdHlwZWRlZiBsb25nIF9HX2dpZF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
X0dfaW5vX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfR19tb2RlX3Q7CnR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBfR19ubGlua190Owp0eXBlZGVmIGxvbmcgX0dfb2ZmX3Q7CnR5cGVkZWYgbG9uZyBf
R19waWRfdDsKCgoKdHlwZWRlZiBpbnQgX0dfcHRyZGlmZl90Owp0eXBlZGVmIGludCAgIF9HX3Np
Z3NldF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBfR19zaXplX3Q7CnR5cGVkZWYgbG9uZyBf
R190aW1lX3Q7CnR5cGVkZWYgbG9uZyBfR191aWRfdDsKdHlwZWRlZiBsb25nIGludCBfR193Y2hh
cl90OwoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIGludCBfR19zc2l6ZV90Owp0eXBlZGVmIHVuc2ln
bmVkIGludCBfR193aW50X3Q7CnR5cGVkZWYgdm9pZCAqIF9HX3ZhX2xpc3Q7CgoKCgoKCgoKCgoK
CgoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzIu
OTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAoKCgoKCgogCgoKIyAxOSAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg
MyA0CgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCiAKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgoKIAoK
IAoKIyAxOTAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMi45
NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCgogCgoKCgogCgojIDI3MSAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg
MyA0CgoKIyAyODMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCiAKCiAKCiMgMzE3ICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz
IDQKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA4NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vc3BhcmMtc3VuLXNvbGFy
aXMyLjcvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzIDQKCgojIDMwICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL2xpYmlvLmgiIDIgMwoKCgoKCgoKCgoKCgoKCgoKCiMgNTUgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvbGliaW8uaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgojIDEw
NCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8yLjk1LjMvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9saWJpby5oIiAzCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IF9JT19qdW1wX3Q7ICBz
dHJ1Y3QgX0lPX0ZJTEU7CgogCiMgMTc1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2xpYmlvLmgiIDMK
CgoKCgoKCgoKICAgIHR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCiAKCnN0cnVjdCBfSU9f
bWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpf
c2J1ZjsKICAgCgogICAKICBpbnQgX3BvczsKIyAyMDggIi91c3IvbG9jYWwvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGli
aW8uaCIgMwoKfTsKCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsJCSAKCgogICAKICAg
CiAgY2hhciogX0lPX3JlYWRfcHRyOwkgCiAgY2hhciogX0lPX3JlYWRfZW5kOwkgCiAgY2hhciog
X0lPX3JlYWRfYmFzZTsJIAogIGNoYXIqIF9JT193cml0ZV9iYXNlOwkgCiAgY2hhciogX0lPX3dy
aXRlX3B0cjsJIAogIGNoYXIqIF9JT193cml0ZV9lbmQ7CSAKICBjaGFyKiBfSU9fYnVmX2Jhc2U7
CSAKICBjaGFyKiBfSU9fYnVmX2VuZDsJIAogICAKICBjaGFyICpfSU9fc2F2ZV9iYXNlOyAgCiAg
Y2hhciAqX0lPX2JhY2t1cF9iYXNlOyAgIAogIGNoYXIgKl9JT19zYXZlX2VuZDsgIAoKICBzdHJ1
Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBp
bnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CgoKCiAgX0dfb2ZmX3QgIF9vZmZzZXQ7CgoKCiAg
IAogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIGNoYXIgX3VudXNlZDsKICBjaGFyIF9z
aG9ydGJ1ZlsxXTsKCiAgIAoKCgoKCgoKCn07CgoKCgoKCgoKCgoKc3RydWN0IF9JT19GSUxFX3Bs
dXM7CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fc3RkaW5fLCBfSU9fc3Rkb3V0Xywg
X0lPX3N0ZGVycl87CgoKCgoKIAp0eXBlZGVmIHN0cnVjdAp7CiAgX0dfc3NpemVfdCAgKCpyZWFk
KSAgKHN0cnVjdCBfSU9fRklMRSAqLCB2b2lkICosIF9HX3NzaXplX3QgKSAgOwogIF9HX3NzaXpl
X3QgICgqd3JpdGUpICAoc3RydWN0IF9JT19GSUxFICosIGNvbnN0IHZvaWQgKiwgX0dfc3NpemVf
dCApICA7CiAgX0dfb2ZmX3QgICgqc2VlaykgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgX0dfb2ZmX3Qg
LCBpbnQpICA7CiAgaW50ICgqY2xvc2UpICAoc3RydWN0IF9JT19GSUxFICopICA7Cn0gX0lPX2Nv
b2tpZV9pb19mdW5jdGlvbnNfdDsKCiAKc3RydWN0IF9JT19jb29raWVfZmlsZQp7CiAgc3RydWN0
IF9JT19GSUxFIGZpbGU7CiAgY29uc3Qgdm9pZCAqdnRhYmxlOwogIHZvaWQgKmNvb2tpZTsKICBf
SU9fY29va2llX2lvX2Z1bmN0aW9uc190IGlvX2Z1bmN0aW9uczsKfTsKCgoKZXh0ZXJuICJDIiB7
CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAgKF9JT19GSUxFICopICA7CmV4dGVybiBpbnQgX191
ZmxvdyAgKF9JT19GSUxFICopICA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAgKF9JT19GSUxFICos
IGludCkgIDsKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT19nZXRjICAoX0lPX0ZJTEUg
Kl9fZnApICA7CmV4dGVybiBpbnQgX0lPX3B1dGMgIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkg
IDsKZXh0ZXJuIGludCBfSU9fZmVvZiAgKF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4gaW50IF9J
T19mZXJyb3IgIChfSU9fRklMRSAqX19mcCkgIDsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tl
ZCAgKF9JT19GSUxFICpfX2ZwKSAgOwoKIAoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlICAo
X0lPX0ZJTEUgKikgIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlICAoX0lPX0ZJTEUgKikg
IDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKCgoKCgoKCgoK
CgoKCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgIChfSU9fRklMRSAqLCBjb25zdCBjaGFyICosIF9H
X3ZhX2xpc3QgLCBpbnQgKikgIDsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgIChfSU9fRklMRSAq
LCBjb25zdCBjaGFyICosIF9HX3ZhX2xpc3QgKSAgOwpleHRlcm4gX0dfc3NpemVfdCAgX0lPX3Bh
ZG4gIChfSU9fRklMRSAqLCBpbnQsIF9HX3NzaXplX3QgKSAgOwpleHRlcm4gX0dfc2l6ZV90ICBf
SU9fc2dldG4gIChfSU9fRklMRSAqLCB2b2lkICosIF9HX3NpemVfdCApICA7CgoKCgoKZXh0ZXJu
IF9HX29mZl90ICBfSU9fc2Vla29mZiAgKF9JT19GSUxFICosIF9HX29mZl90ICwgaW50LCBpbnQp
ICA7CmV4dGVybiBfR19vZmZfdCAgX0lPX3NlZWtwb3MgIChfSU9fRklMRSAqLCBfR19vZmZfdCAs
IGludCkgIDsKCgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAgKF9JT19GSUxFICop
ICA7CgoKfQoKCgojIDM2ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAyIDMKCn0K
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07
ICAKY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOwoKIAoKCgoKCgoKdHlwZWRlZiBfR19v
ZmZfdCAgc3RyZWFtb2ZmOwp0eXBlZGVmIF9HX29mZl90ICBzdHJlYW1wb3M7Cgp0eXBlZGVmIF9H
X3NzaXplX3QgIHN0cmVhbXNpemU7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19mbXRmbGFnczsK
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9faW9zdGF0ZTsKCnN0cnVjdCBfaW9zX2ZpZWxkcwp7ICAK
ICAgIHN0cmVhbWJ1ZiAqX3N0cmJ1ZjsKICAgIG9zdHJlYW0qIF90aWU7CiAgICBpbnQgX3dpZHRo
OwogICAgX19mbXRmbGFncyBfZmxhZ3M7CiAgICBzaG9ydCAgX2ZpbGw7CiAgICBfX2lvc3RhdGUg
X3N0YXRlOwogICAgX19pb3N0YXRlIF9leGNlcHRpb25zOwogICAgaW50IF9wcmVjaXNpb247Cgog
ICAgdm9pZCAqX2FycmF5czsgIAp9OwoKCgoKCgoKCgoKCgoKCgojIDEyNCAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdHJlYW1idWYuaCIgMwoKCmNsYXNzIGlvcyA6IHB1YmxpYyBfaW9zX2ZpZWxkcyB7
CiAgaW9zJiBvcGVyYXRvcj0oaW9zJik7ICAgCiAgaW9zIChjb25zdCBpb3MmKTsgIAogIHB1Ymxp
YzoKICAgIHR5cGVkZWYgX19mbXRmbGFncyBmbXRmbGFnczsKICAgIHR5cGVkZWYgaW50IGlvc3Rh
dGU7CiAgICB0eXBlZGVmIGludCBvcGVubW9kZTsKICAgIHR5cGVkZWYgX0dfc3NpemVfdCAgc3Ry
ZWFtc2l6ZTsKICAgIGVudW0gaW9fc3RhdGUgewoJZ29vZGJpdCA9IDAgLAoJZW9mYml0ID0gMSAs
CglmYWlsYml0ID0gMiAsCgliYWRiaXQgPSA0ICB9OwogICAgZW51bSBvcGVuX21vZGUgewoJaW4g
PSAxICwKCW91dCA9IDIgLAoJYXRlID0gNCAsCglhcHAgPSA4ICwKCXRydW5jID0gMTYgLAoJbm9j
cmVhdGUgPSAzMiAsCglub3JlcGxhY2UgPSA2NCAsCgliaW4gPSAxMjggLCAgCgliaW5hcnkgPSAx
MjggIH07CiAgICBlbnVtIHNlZWtfZGlyIHsgYmVnLCBjdXIsIGVuZH07CiAgICB0eXBlZGVmIGVu
dW0gc2Vla19kaXIgc2Vla2RpcjsKICAgICAKICAgIGVudW0geyBza2lwd3M9IDAxICwKCSAgIGxl
ZnQ9IDAyICwgcmlnaHQ9IDA0ICwgaW50ZXJuYWw9IDAxMCAsCgkgICBkZWM9IDAyMCAsIG9jdD0g
MDQwICwgaGV4PSAwMTAwICwKCSAgIHNob3diYXNlPSAwMjAwICwgc2hvd3BvaW50PSAwNDAwICwK
CSAgIHVwcGVyY2FzZT0gMDEwMDAgLCBzaG93cG9zPSAwMjAwMCAsCgkgICBzY2llbnRpZmljPSAw
NDAwMCAsIGZpeGVkPSAwMTAwMDAgLAoJICAgdW5pdGJ1Zj0gMDIwMDAwICwgc3RkaW89IDA0MDAw
MCAKCgoKCSAgIH07CiAgICBlbnVtIHsgIAoJYmFzZWZpZWxkPWRlYytvY3QraGV4LAoJZmxvYXRm
aWVsZCA9IHNjaWVudGlmaWMrZml4ZWQsCglhZGp1c3RmaWVsZCA9IGxlZnQrcmlnaHQraW50ZXJu
YWwKICAgIH07CgojIDE3NyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwoKCiAg
ICBvc3RyZWFtKiB0aWUoKSBjb25zdCB7IHJldHVybiBfdGllOyB9CiAgICBvc3RyZWFtKiB0aWUo
b3N0cmVhbSogdmFsKSB7IG9zdHJlYW0qIHNhdmU9X3RpZTsgX3RpZT12YWw7IHJldHVybiBzYXZl
OyB9CgogICAgIAogICAgc2hvcnQgIGZpbGwoKSBjb25zdCB7IHJldHVybiBfZmlsbDsgfQogICAg
c2hvcnQgIGZpbGwoc2hvcnQgIG5ld2YpCgl7c2hvcnQgIG9sZGYgPSBfZmlsbDsgX2ZpbGwgPSBu
ZXdmOyByZXR1cm4gb2xkZjt9CiAgICBmbXRmbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9m
bGFnczsgfQogICAgZm10ZmxhZ3MgZmxhZ3MoZm10ZmxhZ3MgbmV3X3ZhbCkgewoJZm10ZmxhZ3Mg
b2xkX3ZhbCA9IF9mbGFnczsgX2ZsYWdzID0gbmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7IH0KICAg
IGludCBwcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBfcHJlY2lzaW9uOyB9CiAgICBpbnQgcHJl
Y2lzaW9uKGludCBuZXdwKSB7Cgl1bnNpZ25lZCBzaG9ydCBvbGRwID0gX3ByZWNpc2lvbjsgX3By
ZWNpc2lvbiA9ICh1bnNpZ25lZCBzaG9ydCluZXdwOwoJcmV0dXJuIG9sZHA7IH0KICAgIGZtdGZs
YWdzIHNldGYoZm10ZmxhZ3MgdmFsKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2Zs
YWdzIHw9IHZhbDsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3Mg
dmFsLCBmbXRmbGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdz
ID0gKF9mbGFncyAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsgcmV0dXJuIG9sZGJpdHM7IH0KICAg
IGZtdGZsYWdzIHVuc2V0ZihmbXRmbGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2Zs
YWdzOwoJX2ZsYWdzICY9IH5tYXNrOyByZXR1cm4gb2xkYml0czsgfQogICAgaW50IHdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gX3dpZHRoOyB9CiAgICBpbnQgd2lkdGgoaW50IHZhbCkgeyBpbnQgc2F2
ZSA9IF93aWR0aDsgX3dpZHRoID0gdmFsOyByZXR1cm4gc2F2ZTsgfQoKCgoKICAgIHZvaWQgX3Ro
cm93X2ZhaWx1cmUoKSBjb25zdCB7IH0KCiAgICB2b2lkIGNsZWFyKGlvc3RhdGUgc3RhdGUgPSAw
KSB7Cglfc3RhdGUgPSBfc3RyYnVmID8gc3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CglpZiAoX3N0YXRl
ICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0KGlvc3RhdGUg
ZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93
X2ZhaWx1cmUoKTsgfQogICAgdm9pZCBzZXRzdGF0ZShpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9
IGZsYWc7ICAKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQog
ICAgaW50IGdvb2QoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgPT0gMDsgfQogICAgaW50IGVvZigp
IGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6ZW9mYml0OyB9CiAgICBpbnQgZmFpbCgpIGNv
bnN0IHsgcmV0dXJuIF9zdGF0ZSAmIChpb3M6OmJhZGJpdHxpb3M6OmZhaWxiaXQpOyB9CiAgICBp
bnQgYmFkKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0KICAgIGlvc3Rh
dGUgcmRzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZTsgfQogICAgb3BlcmF0b3Igdm9pZCoo
KSBjb25zdCB7IHJldHVybiBmYWlsKCkgPyAodm9pZCopMCA6ICh2b2lkKikoLTEpOyB9CiAgICBp
bnQgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gZmFpbCgpOyB9CiAgICBpb3N0YXRlIGV4Y2Vw
dGlvbnMoKSBjb25zdCB7IHJldHVybiBfZXhjZXB0aW9uczsgfQogICAgdm9pZCBleGNlcHRpb25z
KGlvc3RhdGUgZW5hYmxlKSB7CglfZXhjZXB0aW9ucyA9IGVuYWJsZTsKCWlmIChfc3RhdGUgJiBf
ZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQoKICAgIHN0cmVhbWJ1ZiogcmRidWYoKSBj
b25zdCB7IHJldHVybiBfc3RyYnVmOyB9CiAgICBzdHJlYW1idWYqIHJkYnVmKHN0cmVhbWJ1ZiAq
X3MpIHsKICAgICAgc3RyZWFtYnVmICpfb2xkID0gX3N0cmJ1ZjsgX3N0cmJ1ZiA9IF9zOyBjbGVh
ciAoKTsgcmV0dXJuIF9vbGQ7IH0KCiAgICBzdGF0aWMgaW50IHN5bmNfd2l0aF9zdGRpbyhpbnQg
b24pOwogICAgc3RhdGljIHZvaWQgc3luY193aXRoX3N0ZGlvKCkgeyBzeW5jX3dpdGhfc3RkaW8o
MSk7IH0KICAgIHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOwogICAgc3RhdGljIGludCB4YWxs
b2MoKTsKICAgIHZvaWQqJiBwd29yZChpbnQpOwogICAgdm9pZCogcHdvcmQoaW50KSBjb25zdDsK
ICAgIGxvbmcmIGl3b3JkKGludCk7CiAgICBsb25nIGl3b3JkKGludCkgY29uc3Q7CgoKCgoKCgoK
CiAgICAgCiAgICBjbGFzcyBJbml0IHsKICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7IH0KICAg
IH07CgogIHByb3RlY3RlZDoKICAgIGlubGluZSBpb3Moc3RyZWFtYnVmKiBzYiA9IDAsIG9zdHJl
YW0qIHRpZV90byA9IDApOwogICAgaW5saW5lIHZpcnR1YWwgfmlvcygpOwogICAgaW5saW5lIHZv
aWQgaW5pdChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWUgPSAwKTsKfTsKCgoKCnR5cGVkZWYg
aW9zOjpzZWVrX2RpciBfc2Vla19kaXI7CgoKIAogCiAKIAogCgogCiAKY2xhc3Mgc3RyZWFtbWFy
a2VyIDogcHJpdmF0ZSBfSU9fbWFya2VyIHsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1idWY7CiAg
ICB2b2lkIHNldF9vZmZzZXQoaW50IG9mZnNldCkgeyBfcG9zID0gb2Zmc2V0OyB9CiAgcHVibGlj
OgogICAgc3RyZWFtbWFya2VyKHN0cmVhbWJ1ZiAqc2IpOwogICAgfnN0cmVhbW1hcmtlcigpOwog
ICAgaW50IHNhdmluZygpIHsgcmV0dXJuICAxOyB9CiAgICBpbnQgZGVsdGEoc3RyZWFtbWFya2Vy
Jik7CiAgICBpbnQgZGVsdGEoKTsKfTsKCnN0cnVjdCBzdHJlYW1idWYgOiBwdWJsaWMgX0lPX0ZJ
TEUgeyAgCiAgICBmcmllbmQgY2xhc3MgaW9zOwogICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07CiAg
ICBmcmllbmQgY2xhc3Mgb3N0cmVhbTsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1tYXJrZXI7CiAg
ICBjb25zdCB2b2lkIComX3Z0YWJsZSgpIHsgcmV0dXJuICooY29uc3Qgdm9pZCoqKSgoX0lPX0ZJ
TEUqKXRoaXMgKyAxKTsgfQogIHByb3RlY3RlZDoKICAgIHN0YXRpYyBzdHJlYW1idWYqIF9saXN0
X2FsbDsgIAogICAgX0lPX0ZJTEUqJiB4Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0KICAgIHZv
aWQgX3VuX2xpbmsoKTsKICAgIHZvaWQgX2xpbmtfaW4oKTsKICAgIGNoYXIqIGdwdHIoKSBjb25z
dAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19y
ZWFkX3B0cjsgfQogICAgY2hhciogcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9wdHI7
IH0KICAgIGNoYXIqIGVncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAw
ICA/IF9JT19zYXZlX2VuZCA6IF9JT19yZWFkX2VuZDsgfQogICAgY2hhciogZXBwdHIoKSBjb25z
dCB7IHJldHVybiBfSU9fd3JpdGVfZW5kOyB9CiAgICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0
dXJuIF9JT193cml0ZV9iYXNlOyB9CiAgICBjaGFyKiBlYmFjaygpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTt9CiAg
ICBjaGFyKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9iYXNlOyB9CiAgICBjaGFyKiBl
YnVmKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQ7IH0KICAgIGludCBibGVuKCkgY29uc3Qg
eyByZXR1cm4gX0lPX2J1Zl9lbmQgLSBfSU9fYnVmX2Jhc2U7IH0KICAgIHZvaWQgeHB1dF9jaGFy
KGNoYXIgYykgeyAqX0lPX3dyaXRlX3B0cisrID0gYzsgfQogICAgaW50IHhmbGFncygpIHsgcmV0
dXJuIF9mbGFncyA7IH0KICAgIGludCB4ZmxhZ3MoaW50IGYpIHtpbnQgZmwgPSBfZmxhZ3MgOyBf
ZmxhZ3MgID0gZjsgcmV0dXJuIGZsO30KICAgIHZvaWQgeHNldGZsYWdzKGludCBmKSB7IF9mbGFn
cyAgfD0gZjsgfQogICAgdm9pZCB4c2V0ZmxhZ3MoaW50IGYsIGludCBtYXNrKQogICAgICB7IF9m
bGFncyAgPSAoX2ZsYWdzICAmIH5tYXNrKSB8IChmICYgbWFzayk7IH0KICAgIHZvaWQgZ2J1bXAo
aW50IG4pCiAgICAgIHsgX2ZsYWdzICAmIDB4MTAwICA/IChfSU9fc2F2ZV9iYXNlKz1uKTooX0lP
X3JlYWRfcHRyKz1uKTt9CiAgICB2b2lkIHBidW1wKGludCBuKSB7IF9JT193cml0ZV9wdHIgKz0g
bjsgfQogICAgdm9pZCBzZXRiKGNoYXIqIGIsIGNoYXIqIGViLCBpbnQgYT0wKTsKICAgIHZvaWQg
c2V0cChjaGFyKiBwLCBjaGFyKiBlcCkKICAgICAgeyBfSU9fd3JpdGVfYmFzZT1fSU9fd3JpdGVf
cHRyPXA7IF9JT193cml0ZV9lbmQ9ZXA7IH0KICAgIHZvaWQgc2V0ZyhjaGFyKiBlYiwgY2hhciog
ZywgY2hhciAqZWcpIHsKICAgICAgaWYgKF9mbGFncyAgJiAweDEwMCApIF9JT19mcmVlX2JhY2t1
cF9hcmVhKHRoaXMpOyAKICAgICAgX0lPX3JlYWRfYmFzZSA9IGViOyBfSU9fcmVhZF9wdHIgPSBn
OyBfSU9fcmVhZF9lbmQgPSBlZzsgfQogICAgY2hhciAqc2hvcnRidWYoKSB7IHJldHVybiBfc2hv
cnRidWY7IH0KCiAgICBpbnQgaW5fYmFja3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgOyB9
CiAgICAgCiAgICBjaGFyICpHYmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVf
YmFzZSA6IF9JT19yZWFkX2Jhc2U7IH0KICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4g
aW5fYmFja3VwKCkgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAKICAgIGNo
YXIgKkJiYXNlKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3Nh
dmVfYmFzZTsgfQogICAgY2hhciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQog
ICAgIAogICAgY2hhciAqZUJwdHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2Vu
ZCA6IF9JT19zYXZlX2VuZDsgfQogICAgY2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9i
YXNlOyB9CiAgICBjaGFyICplTnB0cigpIHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQogICAgaW50
IGhhdmVfYmFja3VwKCkgeyByZXR1cm4gX0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9CiAgICBp
bnQgaGF2ZV9tYXJrZXJzKCkgeyByZXR1cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQogICAgdm9p
ZCBmcmVlX2JhY2t1cF9hcmVhKCk7CiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAKICAgIGlu
dCBwdXRfbW9kZSgpIHsgcmV0dXJuIF9mbGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3aXRjaF90
b19nZXRfbW9kZSgpOwogICAgCiAgICBzdHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoK
ICAgIHN0YXRpYyBpbnQgZmx1c2hfYWxsKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGlu
ZWJ1ZmZlcmVkKCk7ICAKICAgIHZpcnR1YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBpbnQg
b3ZlcmZsb3coaW50IGMgPSAoLTEpICk7ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOyAg
CiAgICB2aXJ0dWFsIGludCB1ZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50
IGMpOwogCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVh
bXNpemUgbik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNp
emUgbik7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGly
LCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtw
b3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKCiAgICBzdHJl
YW1wb3MgcHVic2Vla29mZihzdHJlYW1vZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlvczo6
aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBtb2Rl
KTsgfQogICAgc3RyZWFtcG9zIHB1YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBp
b3M6OmlufGlvczo6b3V0KQogICAgICB7IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9zLCBt
b2RlKTsgfQogICAgc3RyZWFtcG9zIHNzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQg
bW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3Mg
cG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYq
IHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAgIHZp
cnR1YWwgaW50IGRvYWxsb2NhdGUoKTsKCiAgICBpbnQgc2Vla21hcmsoc3RyZWFtbWFya2VyJiBt
YXJrLCBpbnQgZGVsdGEgPSAwKTsKICAgIGludCBzcHV0YmFja2MoY2hhciBjKTsKICAgIGludCBz
dW5nZXRjKCk7CiAgICBpbnQgdW5idWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDIgID8gMSA6
IDA7IH0KICAgIGludCBsaW5lYnVmZmVyZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAweDIwMCAgPyAx
IDogMDsgfQogICAgdm9pZCB1bmJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDIg
OyBlbHNlIF9mbGFncyAmPSB+MiA7IH0KICAgIHZvaWQgbGluZWJ1ZmZlcmVkKGludCBpKQoJeyBp
ZiAoaSkgX2ZsYWdzIHw9IDB4MjAwIDsgZWxzZSBfZmxhZ3MgJj0gfjB4MjAwIDsgfQogICAgaW50
IGFsbG9jYXRlKCkgeyAgCglpZiAoYmFzZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJuIDA7Cgll
bHNlIHJldHVybiBkb2FsbG9jYXRlKCk7IH0KICAgICAKICAgIHZvaWQgYWxsb2NidWYoKSB7IGlm
IChiYXNlKCkgPT0gX19udWxsICkgZG9hbGxvY2J1ZigpOyB9CiAgICB2b2lkIGRvYWxsb2NidWYo
KTsKICAgIGludCBpbl9hdmFpbCgpIHsgcmV0dXJuIF9JT19yZWFkX2VuZCAtIF9JT19yZWFkX3B0
cjsgfQogICAgaW50IG91dF93YWl0aW5nKCkgeyByZXR1cm4gX0lPX3dyaXRlX3B0ciAtIF9JT193
cml0ZV9iYXNlOyB9CiAgICBzdHJlYW1zaXplIHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNp
emUgbikgeyByZXR1cm4geHNwdXRuKHMsIG4pOyB9CiAgICBzdHJlYW1zaXplIHBhZG4oY2hhciBw
YWQsIHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3BhZG4odGhpcywgcGFkLCBuKTsgfQogICAg
c3RyZWFtc2l6ZSBzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19zZ2V0
bih0aGlzLCBzLCBuKTsgfQogICAgaW50IGlnbm9yZShpbnQpOwogICAgaW50IGdldF9jb2x1bW4o
KTsKICAgIGludCBzZXRfY29sdW1uKGludCk7CiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1Ziwg
X0dfc2l6ZV90ICBuLCBjaGFyIGRlbGltLCBpbnQgcHV0YmFja19kZWxpbSk7CiAgICBpbnQgc3B1
dGMoaW50IGMpIHsgcmV0dXJuIF9JT19wdXRjKGMsIHRoaXMpOyB9CiAgICBpbnQgc2J1bXBjKCkg
eyByZXR1cm4gX0lPX2dldGModGhpcyk7IH0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJuICgoICB0
aGlzICApLT5fSU9fcmVhZF9wdHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRfZW5kICYmIF9fdW5k
ZXJmbG93ICggIHRoaXMgICkgPT0gKC0xKSAgPyAoLTEpICA6ICoodW5zaWduZWQgY2hhciAqKSAo
ICB0aGlzICApLT5fSU9fcmVhZF9wdHIpICA7IH0KICAgIGludCBzbmV4dGMoKSB7CglpZiAoX0lP
X3JlYWRfcHRyID49IF9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyh0aGlzKSA9PSAoLTEpICkK
CSAgcmV0dXJuICgtMSkgOwoJZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyssIHNnZXRjKCk7IH0K
ICAgIHZvaWQgc3Rvc3NjKCkgeyBpZiAoX0lPX3JlYWRfcHRyIDwgX0lPX3JlYWRfZW5kKSBfSU9f
cmVhZF9wdHIrKzsgfQogICAgaW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3Qg
IGFwLCBpb3MqIHN0cmVhbSA9IF9fbnVsbCApOwogICAgaW50IHNjYW4oY2hhciBjb25zdCAqZm10
MCAuLi4pOwogICAgaW50IHZmb3JtKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFwKTsK
ICAgIGludCBmb3JtKGNoYXIgY29uc3QgKmZtdDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0cmVh
bXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBz
dHJlYW1zaXplIHN5c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFs
IHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIGlu
dCBzeXNfY2xvc2UoKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAoKCgoKfTsK
CiAKIAoKY2xhc3MgZmlsZWJ1ZiA6IHB1YmxpYyBzdHJlYW1idWYgewogIHByb3RlY3RlZDoKICAg
IHZvaWQgaW5pdCgpOwogIHB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBpbnQgb3BlbnByb3Q7ICAK
ICAgIGZpbGVidWYoKTsKICAgIGZpbGVidWYoaW50IGZkKTsKICAgIGZpbGVidWYoaW50IGZkLCBj
aGFyKiBwLCBpbnQgbGVuKTsKCgoKICAgIH5maWxlYnVmKCk7CiAgICBmaWxlYnVmKiBhdHRhY2go
aW50IGZkKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNo
YXIgKm1vZGUpOwogICAgZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW9zOjpv
cGVubW9kZSBtb2RlLCBpbnQgcHJvdCA9IDA2NjQpOwogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93
KCk7CiAgICB2aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkgKTsKICAgIGludCBpc19v
cGVuKCkgY29uc3QgeyByZXR1cm4gX2ZpbGVubyA+PSAwOyB9CiAgICBpbnQgZmQoKSBjb25zdCB7
IHJldHVybiBpc19vcGVuKCkgPyBfZmlsZW5vIDogKC0xKSA7IH0KICAgIGZpbGVidWYqIGNsb3Nl
KCk7CiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBz
ZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsK
ICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICBzdHJl
YW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgc3RyZWFtc2l6
ZSB4c2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsK
ICBwcm90ZWN0ZWQ6ICAKIAogICAgaW50IGlzX3JlYWRpbmcoKSB7IHJldHVybiBlYmFjaygpICE9
IGVncHRyKCk7IH0KICAgIGNoYXIqIGN1cl9wdHIoKSB7IHJldHVybiBpc19yZWFkaW5nKCkgPyAg
Z3B0cigpIDogcHB0cigpOyB9CiAgICAgCiAgICBjaGFyKiBmaWxlX3B0cigpIHsgcmV0dXJuIGVH
cHRyKCk7IH0KICAgICAKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYs
IHN0cmVhbXNpemUgc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1v
ZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNo
YXIqLCBzdHJlYW1zaXplKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAogICAg
dmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7CgoKCgp9OwoKaW5saW5lIHZvaWQgaW9zOjppbml0KHN0
cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZV90bykgewoJCV9zdGF0ZSA9IHNiID8gaW9zOjpnb29k
Yml0IDogaW9zOjpiYWRiaXQ7IF9leGNlcHRpb25zPTA7CgkJX3N0cmJ1Zj1zYjsgX3RpZSA9IHRp
ZV90bzsgX3dpZHRoPTA7IF9maWxsPScgJzsKCgkJX2ZsYWdzPWlvczo6c2tpcHdzfGlvczo6ZGVj
OwoKCgoJCV9wcmVjaXNpb249NjsgX2FycmF5cyA9IDA7IH0KCmlubGluZSBpb3M6OmlvcyhzdHJl
YW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsgaW5pdChzYiwgdGllX3RvKTsgfQoKaW5saW5l
IGlvczo6fmlvcygpIHsKCgoKICAgICAKICAgICAKICAgIG9wZXJhdG9yIGRlbGV0ZVtdIChfYXJy
YXlzKTsKfQp9ICAKCiMgMzEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIgMiAzCgoK
ZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdHlwZWRlZiBpb3Mm
ICgqX19tYW5pcCkoaW9zJik7CnR5cGVkZWYgaXN0cmVhbSYgKCpfX2ltYW5pcCkoaXN0cmVhbSYp
Owp0eXBlZGVmIG9zdHJlYW0mICgqX19vbWFuaXApKG9zdHJlYW0mKTsKCmV4dGVybiBpc3RyZWFt
JiB3cyhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYgb3V0cyk7
CmV4dGVybiBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5k
cyhvc3RyZWFtJiBvdXRzKTsKCmNsYXNzIG9zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewog
ICAgIAogICAgdm9pZCBkb19vc2Z4KCk7CiAgcHVibGljOgogICAgb3N0cmVhbSgpIHsgfQogICAg
b3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVkPSBfX251bGwgKTsKICAgIGludCBv
cGZ4KCkgewoJaWYgKCFnb29kKCkpIHJldHVybiAwOwoJZWxzZSB7IGlmIChfdGllKSBfdGllLT5m
bHVzaCgpOyAgOyByZXR1cm4gMTt9IH0KICAgIHZvaWQgb3NmeCgpIHsgIDsKCQkgIGlmIChmbGFn
cygpICYgKGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkKCQkgICAgICBkb19vc2Z4KCk7IH0KICAg
IG9zdHJlYW0mIGZsdXNoKCk7CiAgICBvc3RyZWFtJiBwdXQoY2hhciBjKSB7IF9zdHJidWYtPnNw
dXRjKGMpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgY2hh
ciAqcywgc3RyZWFtc2l6ZSBuKTsKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHVuc2lnbmVkIGNo
YXIgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMs
IG4pO30KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXpl
IG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFt
JiB3cml0ZShjb25zdCB2b2lkICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRl
KChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiBzZWVrcChzdHJlYW1wb3MpOwogICAg
b3N0cmVhbSYgc2Vla3Aoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9zIHRlbGxw
KCk7CiAgICBvc3RyZWFtJiBmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgb3N0cmVh
bSYgdmZvcm0oY29uc3QgY2hhciAqZm9ybWF0LCBfR192YV9saXN0ICBhcmdzKTsKCiAgICBvc3Ry
ZWFtJiBvcGVyYXRvcjw8KGNoYXIgYyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVk
IGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVy
YXRvcjw8KHNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQogICAg
b3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBjaGFyICpzKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9y
PDwoY29uc3QgdW5zaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNo
YXIqKXM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIgKnMpCgl7
IHJldHVybiAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRv
cjw8KGNvbnN0IHZvaWQgKnApOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChpbnQgbik7CiAgICBv
c3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9y
PDwobG9uZyBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBuKTsKCiAg
ICBfX2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBsb25nIG4pOwogICAgX19l
eHRlbnNpb25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBuKTsKCiAg
ICBvc3RyZWFtJiBvcGVyYXRvcjw8KHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgoaW50KW4p
O30KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgbikge3JldHVybiBvcGVy
YXRvcjw8KCh1bnNpZ25lZCBpbnQpbik7fQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoYm9vbCBi
KSB7IHJldHVybiBvcGVyYXRvcjw8KChpbnQpYik7IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8
KGRvdWJsZSBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZmxvYXQgbikgeyByZXR1cm4gb3Bl
cmF0b3I8PCgoZG91YmxlKW4pOyB9CgoKCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgZG91
YmxlIG4pIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGRvdWJsZSluKTsgfQoKICAgIG9zdHJlYW0mIG9w
ZXJhdG9yPDwoX19vbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhpcyk7IH0KICAgIG9z
dHJlYW0mIG9wZXJhdG9yPDwoX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVybiAq
dGhpczt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHN0cmVhbWJ1ZiopOwoKCgp9OwoKY2xhc3Mg
aXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGlvcwp7CiAgICAgCnByb3RlY3RlZDoKICAgIF9HX3Np
emVfdCAgX2djb3VudDsKCiAgICBpbnQgX3NraXBfd3MoKTsKICBwdWJsaWM6CiAgICBpc3RyZWFt
KCk6IF9nY291bnQgKDApIHsgfQogICAgaXN0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRp
ZWQ9IF9fbnVsbCApOwogICAgaXN0cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBk
ZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxl
biwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBkZWxp
bSk7IH0KICAgIGlzdHJlYW0mIGdldChjaGFyJiBjKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25l
ZCBjaGFyJiBjKSB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5l
KGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0
bGluZSh1bnNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyBy
ZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0
KHNpZ25lZCBjaGFyJiBjKSAgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVhbSYg
Z2V0KHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1
cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKHNp
Z25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0
bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgcmVhZChjaGFyICpw
dHIsIHN0cmVhbXNpemUgbik7CiAgICBpc3RyZWFtJiByZWFkKHVuc2lnbmVkIGNoYXIgKnB0ciwg
c3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBp
c3RyZWFtJiByZWFkKHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1
cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZCh2b2lkICpwdHIsIHN0
cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0
cmVhbSYgZ2V0KHN0cmVhbWJ1ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0m
IGdldHMoY2hhciAqKnMsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGludCBpcGZ4KGludCBuZWVk
ID0gMCkgewoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9Cgll
bHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgKG5lZWQgPT0gMCB8fCByZGJ1ZigpLT5pbl9hdmFp
bCgpIDwgbmVlZCkpIF90aWUtPmZsdXNoKCk7CgkgIGlmICghbmVlZCAmJiAoZmxhZ3MoKSAmIGlv
czo6c2tpcHdzKSkgcmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9CiAgICB9
CiAgICBpbnQgaXBmeDAoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyBy
ZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllKSBfdGllLT5mbHVzaCgpOwoJICBp
ZiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSByZXR1
cm4gMTsKCX0KICAgIH0KICAgIGludCBpcGZ4MSgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0KGlv
czo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgcmRi
dWYoKS0+aW5fYXZhaWwoKSA9PSAwKSBfdGllLT5mbHVzaCgpOwoJICByZXR1cm4gMTsKCX0KICAg
IH0KICAgIHZvaWQgaXNmeCgpIHsgIDsgfQogICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4MSgpKSBy
ZXR1cm4gKC0xKSA7CgkJZWxzZSB7IGludCBjaCA9IF9zdHJidWYtPnNidW1wYygpOwoJCSAgICAg
ICBpZiAoY2ggPT0gKC0xKSApIHNldChpb3M6OmVvZmJpdCk7CgkJICAgICAgIGlzZngoKTsKCQkg
ICAgICAgcmV0dXJuIGNoOwoJCSAgICAgfSB9CiAgICBpbnQgcGVlaygpOwogICAgX0dfc2l6ZV90
ICBnY291bnQoKSB7IHJldHVybiBfZ2NvdW50OyB9CiAgICBpc3RyZWFtJiBpZ25vcmUoaW50IG49
MSwgaW50IGRlbGltID0gKC0xKSApOwogICAgaW50IHN5bmMgKCk7CiAgICBpc3RyZWFtJiBzZWVr
ZyhzdHJlYW1wb3MpOwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwog
ICAgc3RyZWFtcG9zIHRlbGxnKCk7CiAgICBpc3RyZWFtJiBwdXRiYWNrKGNoYXIgY2gpIHsKCWlm
IChnb29kKCkgJiYgX3N0cmJ1Zi0+c3B1dGJhY2tjKGNoKSA9PSAoLTEpICkgY2xlYXIoaW9zOjpi
YWRiaXQpOwoJcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIHVuZ2V0KCkgewoJaWYgKGdvb2Qo
KSAmJiBfc3RyYnVmLT5zdW5nZXRjKCkgPT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0KTsKCXJl
dHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiBzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwog
ICAgaXN0cmVhbSYgdnNjYW4oY29uc3QgY2hhciAqZm9ybWF0LCBfR192YV9saXN0ICBhcmdzKTsK
CgoKCgoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciopOwogICAgaXN0cmVhbSYgb3BlcmF0
b3I+Pih1bnNpZ25lZCBjaGFyKiBwKSB7IHJldHVybiBvcGVyYXRvcj4+KChjaGFyKilwKTsgfQog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaWduZWQgY2hhcipwKSB7IHJldHVybiBvcGVyYXRvcj4+
KChjaGFyKilwKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyJiBjKTsKICAgIGlzdHJl
YW0mIG9wZXJhdG9yPj4odW5zaWduZWQgY2hhciYgYykge3JldHVybiBvcGVyYXRvcj4+KChjaGFy
JiljKTt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9w
ZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oaW50Jik7CiAgICBp
c3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcmKTsKCiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9w
ZXJhdG9yPj4obG9uZyBsb25nJik7CiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9y
Pj4odW5zaWduZWQgbG9uZyBsb25nJik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaG9ydCYp
OwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmKTsKICAgIGlzdHJlYW0mIG9w
ZXJhdG9yPj4odW5zaWduZWQgbG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25l
ZCBzaG9ydCYpOwoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oYm9vbCYpOwoKICAgIGlzdHJlYW0m
IG9wZXJhdG9yPj4oZmxvYXQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oZG91YmxlJik7CiAg
ICBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJik7CiAgICBpc3RyZWFtJiBvcGVyYXRv
cj4+KCBfX21hbmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30KICAgIGlz
dHJlYW0mIG9wZXJhdG9yPj4oX19pbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhpcyk7
IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc3RyZWFtYnVmKik7Cn07CgpjbGFzcyBpb3N0cmVh
bSA6IHB1YmxpYyBpc3RyZWFtLCBwdWJsaWMgb3N0cmVhbQp7CiAgcHVibGljOgogICAgaW9zdHJl
YW0oKSB7IH0KICAgIGlvc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxs
ICk7Cn07CgpjbGFzcyBfSU9faXN0cmVhbV93aXRoYXNzaWduIDogcHVibGljIGlzdHJlYW0gewpw
dWJsaWM6CiAgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KGlzdHJlYW0mKTsKICBf
SU9faXN0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYg
cmhzKQogICAgeyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxpc3RyZWFtJj4gKHJocykp
OyB9Cn07CgpjbGFzcyBfSU9fb3N0cmVhbV93aXRoYXNzaWduIDogcHVibGljIG9zdHJlYW0gewpw
dWJsaWM6CiAgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KG9zdHJlYW0mKTsKICBf
SU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYg
cmhzKQogICAgeyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxvc3RyZWFtJj4gKHJocykp
OyB9Cn07CgpleHRlcm4gX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiBjaW47CiAKZXh0ZXJuIF9JT19v
c3RyZWFtX3dpdGhhc3NpZ24gY291dCwgY2VycjsKCmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNz
aWduIGNsb2cKCgoKOwoKZXh0ZXJuIGlzdHJlYW0mIGxvY2soaXN0cmVhbSYgaW5zKTsKZXh0ZXJu
IGlzdHJlYW0mIHVubG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgbG9jayhvc3Ry
ZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0mIHVubG9jayhvc3RyZWFtJiBvdXRzKTsKCnN0cnVj
dCBJb3N0cmVhbV9pbml0IHsgfSA7ICAgCgppbmxpbmUgaW9zJiBkZWMoaW9zJiBpKQp7IGkuc2V0
Zihpb3M6OmRlYywgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxp
bmUgaW9zJiBoZXgoaW9zJiBpKQp7IGkuc2V0Zihpb3M6OmhleCwgaW9zOjpkZWN8aW9zOjpoZXh8
aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBvY3QoaW9zJiBpKQp7IGkuc2V0Zihp
b3M6Om9jdCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQp9ICAKCgoj
IDUgInZpcnR1YWwtbWV0aG9kLmNjIiAyCgoKY2xhc3MgUm9vdE9iamVjdCB7CnB1YmxpYzoKCWNo
YXIqIHR5cGVPZigpIHsgcmV0dXJuICJSb290T2JqZWN0IjsgfQoJdmlydHVhbCB2b2lkIGRyYXco
KSB7IGNvdXQgPDwgIlJvb3RPYmplY3QtPmRyYXcoKSBjYWxsZWQuXG4iOyB9Cn0KCmNsYXNzIFBv
aW50M0QgOiBwdWJsaWMgUm9vdE9iamVjdCB7CnByb3RlY3RlZDoKCWxvbmcgZG91YmxlIHgsIHks
IHo7CnB1YmxpYzoKCWNoYXIgKnR5cGVPZigpIHsgcmV0dXJuICJQb2ludDNEIjsgfQoJdmlydHVh
bCB2b2lkIGRyYXcoKSB7IGNvdXQgPDwgIlBvaW50M0QtPmRyYXcoKSBjYWxsZWQuXG4iOyB9Cn0K
CmNsYXNzIExpbmUzRCA6IHB1YmxpYyBSb290T2JqZWN0IHsKcHJvdGVjdGVkOgoJbG9uZyBkb3Vi
bGUgeDEsIHkxLCB6MTsKCWxvbmcgZG91YmxlIHgyLCB5MiwgejI7CnB1YmxpYzoKCWNoYXIgKnR5
cGVPZigpIHsgcmV0dXJuICJMaW5lM0QiOyB9Cgl2aXJ0dWFsIHZvaWQgZHJhdygpIHsgY291dCA8
PCAiTGluZTNELT5kcmF3KCkgY2FsbGVkLlxuIjsgfQp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hh
ciAqYXJndltdKQp7CglSb290T2JqZWN0KiBvYmphcnJheVs0XTsKCglvYmphcnJheVswXSA9IG5l
dyBSb290T2JqZWN0OwoJb2JqYXJyYXlbMV0gPSBuZXcgUG9pbnQzRDsKCW9iamFycmF5WzJdID0g
bmV3IExpbmUzRDsKCW9iamFycmF5WzNdID0gbmV3IFBvaW50M0Q7CgoJZm9yIChpbnQgaSA9IDA7
IGkgPD0gMzsgaSsrKQoJewoJCWNvdXQgPDwgb2JqYXJyYXlbaV0tPnR5cGVPZigpOwoJfQoJZm9y
IChpID0gMDsgaSA8PSAzOyBpKyspCgl7CgkJb2JqYXJyYXlbaV0tPmRyYXcoKTsKCX0KfQoK



More information about the Gcc-bugs mailing list