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


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

c++/7497: ice on large bool array, not on small or huge array


>Number:         7497
>Category:       c++
>Synopsis:       ice on large bool array, not on small or huge array
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Mon Aug 05 08:46:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     sekelly@nist.gov
>Release:        2.95.2 19991024
>Organization:
>Environment:

>Description:
Code declares a bool array.  When the array is ~125000 
square (large, yes, but that's not the biggest issue) g++ 
gives an ICE in 'assign_stack_temp_for_type'.  When the size 
is significantly reduced, it compiles fine.  Oddly enough, 
however, when the size is significantly increased (~1000000 
square) it also compiles without error (of course it also 
seg faults when run, but that's beside the point).
As I am not the administrator of the network I work on, I cannot 
upgrade to gcc 3.1 to determine if this problem still exists 
in the current release.
>How-To-Repeat:
declare boolean array of size ~125000x~125000
>Fix:
use a smaller array (and break input data into smaller pieces,
running program more times)
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="gtb-redlin.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="gtb-redlin.ii"

IyAxICJndGItcmVkbGluLmNwcCIKIAoKCgoKCgoKCgojIDEgIi91c3IvZnJlZXdhcmUvbGliL2dj
Yy1saWIvbWlwcy1zZ2ktaXJpeDYuMi8yLjk1LjIvaW5jbHVkZS9nKysvaW9zdHJlYW0uaCIgMSAz
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCiMgMSAiL3Vz
ci9mcmVld2FyZS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni4yLzIuOTUuMi9pbmNsdWRlL2cr
Ky9zdHJlYW1idWYuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGlu
dGVyZmFjZQoKCiAgIAoKCgpleHRlcm4gIkMiIHsKIyAxICIvdXNyL2ZyZWV3YXJlL2xpYi9nY2Mt
bGliL21pcHMtc2dpLWlyaXg2LjIvMi45NS4yL2luY2x1ZGUvZysrL2xpYmlvLmgiIDEgMwogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvZnJlZXdhcmUvbGliL2djYy1saWIv
bWlwcy1zZ2ktaXJpeDYuMi8yLjk1LjIvaW5jbHVkZS9nKysvX0dfY29uZmlnLmgiIDEgMwogIAoK
CgoKCgoKCgp0eXBlZGVmICAgICAgICAgIGludCAgIF9HX2ludDhfdCBfX2F0dHJpYnV0ZV9fKChf
X21vZGVfXyhfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50ICBfR191aW50OF90IF9fYXR0
cmlidXRlX18oKF9fbW9kZV9fKF9fUUlfXykpKTsKdHlwZWRlZiAgICAgICAgICBpbnQgIF9HX2lu
dDE2X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVk
IGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0hJX18pKSk7CnR5cGVk
ZWYgICAgICAgICAgaW50ICBfR19pbnQzMl90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lf
XykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19t
b2RlX18oX19TSV9fKSkpOwp0eXBlZGVmICAgICAgICAgIGludCAgX0dfaW50NjRfdCBfX2F0dHJp
YnV0ZV9fKChfX21vZGVfXyhfX0RJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQ2
NF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fRElfXykpKTsKCl9fZXh0ZW5zaW9uX18gdHlw
ZWRlZiBsb25nIGxvbmcgX0dfbGxvbmc7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGxvbmcgX0dfdWxsb25nOwoKCgoKCgoKCnR5cGVkZWYgbG9uZyBfR19jbG9ja190Owp0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgX0dfZGV2X3Q7CnR5cGVkZWYgX0dfbGxvbmcgX0dfZnBvc190Owp0
eXBlZGVmIGxvbmcgX0dfZ2lkX3Q7CnR5cGVkZWYgX0dfdWxsb25nIF9HX2lub190Owp0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgX0dfbW9kZV90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX0dfbmxpbmtf
dDsKdHlwZWRlZiBfR19sbG9uZyBfR19vZmZfdDsKdHlwZWRlZiBsb25nIF9HX3BpZF90OwoKCgp0
eXBlZGVmIGludCAgX0dfcHRyZGlmZl90Owp0eXBlZGVmIGludCAgIF9HX3NpZ3NldF90OwoKCgp0
eXBlZGVmIHVuc2lnbmVkIGludCAgX0dfc2l6ZV90Owp0eXBlZGVmIGxvbmcgX0dfdGltZV90Owp0
eXBlZGVmIGxvbmcgX0dfdWlkX3Q7CnR5cGVkZWYgbG9uZyBfR193Y2hhcl90OwoKCgoKCgoKCgoK
CgoKCgp0eXBlZGVmIGludCBfR19zc2l6ZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfR193aW50
X3Q7CnR5cGVkZWYgY2hhciAqIF9HX3ZhX2xpc3Q7CgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNy
L2ZyZWV3YXJlL2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjIvMi45NS4yL2luY2x1ZGUvc3Rk
ZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9mcmVld2FyZS9saWIvZ2NjLWxpYi9taXBz
LXNnaS1pcml4Ni4yLzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoK
CiMgNjEgIi91c3IvZnJlZXdhcmUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuMi8yLjk1LjIv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgog
CgogCgojIDEzMSAiL3Vzci9mcmVld2FyZS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni4yLzIu
OTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAxOTAgIi91c3IvZnJlZXdhcmUvbGli
L2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuMi8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgog
CgoKCgogCgojIDI3MSAiL3Vzci9mcmVld2FyZS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni4y
LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvZnJlZXdhcmUvbGliL2dj
Yy1saWIvbWlwcy1zZ2ktaXJpeDYuMi8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAK
CiMgMzE3ICIvdXNyL2ZyZWV3YXJlL2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjIvMi45NS4y
L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA4NiAiL3Vz
ci9mcmVld2FyZS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni4yLzIuOTUuMi9pbmNsdWRlL2cr
Ky9fR19jb25maWcuaCIgMiAzCgoKIyAzMCAiL3Vzci9mcmVld2FyZS9saWIvZ2NjLWxpYi9taXBz
LXNnaS1pcml4Ni4yLzIuOTUuMi9pbmNsdWRlL2crKy9saWJpby5oIiAyIDMKCgoKCgoKCgoKCgoK
CgoKCgojIDU1ICIvdXNyL2ZyZWV3YXJlL2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjIvMi45
NS4yL2luY2x1ZGUvZysrL2xpYmlvLmgiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVm
cy5oIiAxIDMKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiNpZGVudCAgIiRSZXZpc2lvbjogMS4zICQi
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgojIDU5ICIvdXNyL2ZyZWV3YXJlL2xpYi9nY2Mt
bGliL21pcHMtc2dpLWlyaXg2LjIvMi45NS4yL2luY2x1ZGUvZysrL2xpYmlvLmgiIDIgMwoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCiMgMTA0ICIvdXNyL2ZyZWV3YXJlL2xpYi9n
Y2MtbGliL21pcHMtc2dpLWlyaXg2LjIvMi45NS4yL2luY2x1ZGUvZysrL2xpYmlvLmgiIDMKCgoK
CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCnN0
cnVjdCBfSU9fanVtcF90OyAgc3RydWN0IF9JT19GSUxFOwoKIAojIDE3NCAiL3Vzci9mcmVld2Fy
ZS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni4yLzIuOTUuMi9pbmNsdWRlL2crKy9saWJpby5o
IiAzCgoKCgoKCgoKCiAgICB0eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKCgogCgpzdHJ1Y3Qg
X0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklM
RSAqX3NidWY7CiAgIAoKICAgCiAgaW50IF9wb3M7CiMgMjA3ICIvdXNyL2ZyZWV3YXJlL2xpYi9n
Y2MtbGliL21pcHMtc2dpLWlyaXg2LjIvMi45NS4yL2luY2x1ZGUvZysrL2xpYmlvLmgiIDMKCn07
CgpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CQkgCgoKICAgCiAgIAogIGNoYXIqIF9J
T19yZWFkX3B0cjsJIAogIGNoYXIqIF9JT19yZWFkX2VuZDsJIAogIGNoYXIqIF9JT19yZWFkX2Jh
c2U7CSAKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsJIAogIGNoYXIqIF9JT193cml0ZV9wdHI7CSAK
ICBjaGFyKiBfSU9fd3JpdGVfZW5kOwkgCiAgY2hhciogX0lPX2J1Zl9iYXNlOwkgCiAgY2hhciog
X0lPX2J1Zl9lbmQ7CSAKICAgCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsgIAogIGNoYXIgKl9JT19i
YWNrdXBfYmFzZTsgICAKICBjaGFyICpfSU9fc2F2ZV9lbmQ7ICAKCiAgc3RydWN0IF9JT19tYXJr
ZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87
CiAgaW50IF9ibGtzaXplOwoKCgogIF9HX29mZl90ICBfb2Zmc2V0OwoKCgogICAKICB1bnNpZ25l
ZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBjaGFyIF91bnVzZWQ7CiAgY2hhciBfc2hvcnRidWZbMV07
CgogICAKCgoKCgoKCgp9OwoKCgoKCgoKCgoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwpleHRlcm4g
c3RydWN0IF9JT19GSUxFX3BsdXMgX0lPX3N0ZGluXywgX0lPX3N0ZG91dF8sIF9JT19zdGRlcnJf
OwoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIF9HX3NzaXplX3QgICgqcmVhZCkgIChzdHJ1Y3Qg
X0lPX0ZJTEUgKiwgdm9pZCAqLCBfR19zc2l6ZV90ICkgIDsKICBfR19zc2l6ZV90ICAoKndyaXRl
KSAgKHN0cnVjdCBfSU9fRklMRSAqLCBjb25zdCB2b2lkICosIF9HX3NzaXplX3QgKSAgOwogIF9H
X2Zwb3NfdCAgKCpzZWVrKSAgKHN0cnVjdCBfSU9fRklMRSAqLCBfR19vZmZfdCAsIGludCkgIDsK
ICBpbnQgKCpjbG9zZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKikgIDsKfSBfSU9fY29va2llX2lvX2Z1
bmN0aW9uc190OwoKIApzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlCnsKICBzdHJ1Y3QgX0lPX0ZJTEUg
ZmlsZTsKICBjb25zdCB2b2lkICp2dGFibGU7CiAgdm9pZCAqY29va2llOwogIF9JT19jb29raWVf
aW9fZnVuY3Rpb25zX3QgaW9fZnVuY3Rpb25zOwp9OwoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4g
aW50IF9fdW5kZXJmbG93ICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfX3VmbG93ICAoX0lP
X0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfX292ZXJmbG93ICAoX0lPX0ZJTEUgKiwgaW50KSAgOwoK
CgoKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgX0lPX2dldGMgIChfSU9fRklMRSAqX19mcCkgIDsK
ZXh0ZXJuIGludCBfSU9fcHV0YyAgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4g
aW50IF9JT19mZW9mICAoX0lPX0ZJTEUgKl9fZnApICA7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAg
KF9JT19GSUxFICpfX2ZwKSAgOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkICAoX0lPX0ZJ
TEUgKl9fZnApICA7CgogCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgIChfSU9fRklMRSAq
KSAgOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgIChfSU9fRklMRSAqKSAgOwpleHRlcm4g
aW50IF9JT19mdHJ5bG9ja2ZpbGUgIChfSU9fRklMRSAqKSAgOwoKCgoKCgoKCgoKCgoKZXh0ZXJu
IGludCBfSU9fdmZzY2FuZiAgKF9JT19GSUxFICosIGNvbnN0IGNoYXIgKiwgX0dfdmFfbGlzdCAs
IGludCAqKSAgOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAgKF9JT19GSUxFICosIGNvbnN0IGNo
YXIgKiwgX0dfdmFfbGlzdCApICA7CmV4dGVybiBfR19zc2l6ZV90ICBfSU9fcGFkbiAgKF9JT19G
SUxFICosIGludCwgX0dfc3NpemVfdCApICA7CmV4dGVybiBfR19zaXplX3QgIF9JT19zZ2V0biAg
KF9JT19GSUxFICosIHZvaWQgKiwgX0dfc2l6ZV90ICkgIDsKCgoKCgpleHRlcm4gX0dfZnBvc190
ICBfSU9fc2Vla29mZiAgKF9JT19GSUxFICosIF9HX29mZl90ICwgaW50LCBpbnQpICA7CmV4dGVy
biBfR19mcG9zX3QgIF9JT19zZWVrcG9zICAoX0lPX0ZJTEUgKiwgX0dfZnBvc190ICwgaW50KSAg
OwoKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhICAoX0lPX0ZJTEUgKikgIDsKCgp9
CgoKCiMgMzYgIi91c3IvZnJlZXdhcmUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuMi8yLjk1
LjIvaW5jbHVkZS9nKysvc3RyZWFtYnVmLmgiIDIgMwoKfQogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgIApjbGFzcyBvc3RyZWFtOyBjbGFz
cyBzdHJlYW1idWY7CgogCgoKCgoKCgp0eXBlZGVmIF9HX29mZl90ICBzdHJlYW1vZmY7CnR5cGVk
ZWYgX0dfZnBvc190ICBzdHJlYW1wb3M7Cgp0eXBlZGVmIF9HX3NzaXplX3QgIHN0cmVhbXNpemU7
Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19mbXRmbGFnczsKdHlwZWRlZiB1bnNpZ25lZCBjaGFy
IF9faW9zdGF0ZTsKCnN0cnVjdCBfaW9zX2ZpZWxkcwp7ICAKICAgIHN0cmVhbWJ1ZiAqX3N0cmJ1
ZjsKICAgIG9zdHJlYW0qIF90aWU7CiAgICBpbnQgX3dpZHRoOwogICAgX19mbXRmbGFncyBfZmxh
Z3M7CiAgICBzaG9ydCAgX2ZpbGw7CiAgICBfX2lvc3RhdGUgX3N0YXRlOwogICAgX19pb3N0YXRl
IF9leGNlcHRpb25zOwogICAgaW50IF9wcmVjaXNpb247CgogICAgdm9pZCAqX2FycmF5czsgIAp9
OwoKCgoKCgoKCgoKCgoKCgojIDEyNCAiL3Vzci9mcmVld2FyZS9saWIvZ2NjLWxpYi9taXBzLXNn
aS1pcml4Ni4yLzIuOTUuMi9pbmNsdWRlL2crKy9zdHJlYW1idWYuaCIgMwoKCmNsYXNzIGlvcyA6
IHB1YmxpYyBfaW9zX2ZpZWxkcyB7CiAgaW9zJiBvcGVyYXRvcj0oaW9zJik7ICAgCiAgaW9zIChj
b25zdCBpb3MmKTsgIAogIHB1YmxpYzoKICAgIHR5cGVkZWYgX19mbXRmbGFncyBmbXRmbGFnczsK
ICAgIHR5cGVkZWYgaW50IGlvc3RhdGU7CiAgICB0eXBlZGVmIGludCBvcGVubW9kZTsKICAgIHR5
cGVkZWYgX0dfc3NpemVfdCAgc3RyZWFtc2l6ZTsKICAgIGVudW0gaW9fc3RhdGUgewoJZ29vZGJp
dCA9IDAgLAoJZW9mYml0ID0gMSAsCglmYWlsYml0ID0gMiAsCgliYWRiaXQgPSA0ICB9OwogICAg
ZW51bSBvcGVuX21vZGUgewoJaW4gPSAxICwKCW91dCA9IDIgLAoJYXRlID0gNCAsCglhcHAgPSA4
ICwKCXRydW5jID0gMTYgLAoJbm9jcmVhdGUgPSAzMiAsCglub3JlcGxhY2UgPSA2NCAsCgliaW4g
PSAxMjggLCAgCgliaW5hcnkgPSAxMjggIH07CiAgICBlbnVtIHNlZWtfZGlyIHsgYmVnLCBjdXIs
IGVuZH07CiAgICB0eXBlZGVmIGVudW0gc2Vla19kaXIgc2Vla2RpcjsKICAgICAKICAgIGVudW0g
eyBza2lwd3M9IDAxICwKCSAgIGxlZnQ9IDAyICwgcmlnaHQ9IDA0ICwgaW50ZXJuYWw9IDAxMCAs
CgkgICBkZWM9IDAyMCAsIG9jdD0gMDQwICwgaGV4PSAwMTAwICwKCSAgIHNob3diYXNlPSAwMjAw
ICwgc2hvd3BvaW50PSAwNDAwICwKCSAgIHVwcGVyY2FzZT0gMDEwMDAgLCBzaG93cG9zPSAwMjAw
MCAsCgkgICBzY2llbnRpZmljPSAwNDAwMCAsIGZpeGVkPSAwMTAwMDAgLAoJICAgdW5pdGJ1Zj0g
MDIwMDAwICwgc3RkaW89IDA0MDAwMCAKCgoKCSAgIH07CiAgICBlbnVtIHsgIAoJYmFzZWZpZWxk
PWRlYytvY3QraGV4LAoJZmxvYXRmaWVsZCA9IHNjaWVudGlmaWMrZml4ZWQsCglhZGp1c3RmaWVs
ZCA9IGxlZnQrcmlnaHQraW50ZXJuYWwKICAgIH07CgojIDE3NyAiL3Vzci9mcmVld2FyZS9saWIv
Z2NjLWxpYi9taXBzLXNnaS1pcml4Ni4yLzIuOTUuMi9pbmNsdWRlL2crKy9zdHJlYW1idWYuaCIg
MwoKCiAgICBvc3RyZWFtKiB0aWUoKSBjb25zdCB7IHJldHVybiBfdGllOyB9CiAgICBvc3RyZWFt
KiB0aWUob3N0cmVhbSogdmFsKSB7IG9zdHJlYW0qIHNhdmU9X3RpZTsgX3RpZT12YWw7IHJldHVy
biBzYXZlOyB9CgogICAgIAogICAgc2hvcnQgIGZpbGwoKSBjb25zdCB7IHJldHVybiBfZmlsbDsg
fQogICAgc2hvcnQgIGZpbGwoc2hvcnQgIG5ld2YpCgl7c2hvcnQgIG9sZGYgPSBfZmlsbDsgX2Zp
bGwgPSBuZXdmOyByZXR1cm4gb2xkZjt9CiAgICBmbXRmbGFncyBmbGFncygpIGNvbnN0IHsgcmV0
dXJuIF9mbGFnczsgfQogICAgZm10ZmxhZ3MgZmxhZ3MoZm10ZmxhZ3MgbmV3X3ZhbCkgewoJZm10
ZmxhZ3Mgb2xkX3ZhbCA9IF9mbGFnczsgX2ZsYWdzID0gbmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7
IH0KICAgIGludCBwcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBfcHJlY2lzaW9uOyB9CiAgICBp
bnQgcHJlY2lzaW9uKGludCBuZXdwKSB7Cgl1bnNpZ25lZCBzaG9ydCBvbGRwID0gX3ByZWNpc2lv
bjsgX3ByZWNpc2lvbiA9ICh1bnNpZ25lZCBzaG9ydCluZXdwOwoJcmV0dXJuIG9sZHA7IH0KICAg
IGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdz
OwoJX2ZsYWdzIHw9IHZhbDsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10
ZmxhZ3MgdmFsLCBmbXRmbGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJ
X2ZsYWdzID0gKF9mbGFncyAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsgcmV0dXJuIG9sZGJpdHM7
IH0KICAgIGZtdGZsYWdzIHVuc2V0ZihmbXRmbGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRz
ID0gX2ZsYWdzOwoJX2ZsYWdzICY9IH5tYXNrOyByZXR1cm4gb2xkYml0czsgfQogICAgaW50IHdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gX3dpZHRoOyB9CiAgICBpbnQgd2lkdGgoaW50IHZhbCkgeyBp
bnQgc2F2ZSA9IF93aWR0aDsgX3dpZHRoID0gdmFsOyByZXR1cm4gc2F2ZTsgfQoKCgoKICAgIHZv
aWQgX3Rocm93X2ZhaWx1cmUoKSBjb25zdCB7IH0KCiAgICB2b2lkIGNsZWFyKGlvc3RhdGUgc3Rh
dGUgPSAwKSB7Cglfc3RhdGUgPSBfc3RyYnVmID8gc3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CglpZiAo
X3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0KGlv
c3RhdGUgZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykg
X3Rocm93X2ZhaWx1cmUoKTsgfQogICAgdm9pZCBzZXRzdGF0ZShpb3N0YXRlIGZsYWcpIHsgX3N0
YXRlIHw9IGZsYWc7ICAKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUo
KTsgfQogICAgaW50IGdvb2QoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgPT0gMDsgfQogICAgaW50
IGVvZigpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6ZW9mYml0OyB9CiAgICBpbnQgZmFp
bCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIChpb3M6OmJhZGJpdHxpb3M6OmZhaWxiaXQpOyB9
CiAgICBpbnQgYmFkKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0KICAg
IGlvc3RhdGUgcmRzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZTsgfQogICAgb3BlcmF0b3Ig
dm9pZCooKSBjb25zdCB7IHJldHVybiBmYWlsKCkgPyAodm9pZCopMCA6ICh2b2lkKikoLTEpOyB9
CiAgICBpbnQgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gZmFpbCgpOyB9CiAgICBpb3N0YXRl
IGV4Y2VwdGlvbnMoKSBjb25zdCB7IHJldHVybiBfZXhjZXB0aW9uczsgfQogICAgdm9pZCBleGNl
cHRpb25zKGlvc3RhdGUgZW5hYmxlKSB7CglfZXhjZXB0aW9ucyA9IGVuYWJsZTsKCWlmIChfc3Rh
dGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQoKICAgIHN0cmVhbWJ1ZiogcmRi
dWYoKSBjb25zdCB7IHJldHVybiBfc3RyYnVmOyB9CiAgICBzdHJlYW1idWYqIHJkYnVmKHN0cmVh
bWJ1ZiAqX3MpIHsKICAgICAgc3RyZWFtYnVmICpfb2xkID0gX3N0cmJ1ZjsgX3N0cmJ1ZiA9IF9z
OyBjbGVhciAoKTsgcmV0dXJuIF9vbGQ7IH0KCiAgICBzdGF0aWMgaW50IHN5bmNfd2l0aF9zdGRp
byhpbnQgb24pOwogICAgc3RhdGljIHZvaWQgc3luY193aXRoX3N0ZGlvKCkgeyBzeW5jX3dpdGhf
c3RkaW8oMSk7IH0KICAgIHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOwogICAgc3RhdGljIGlu
dCB4YWxsb2MoKTsKICAgIHZvaWQqJiBwd29yZChpbnQpOwogICAgdm9pZCogcHdvcmQoaW50KSBj
b25zdDsKICAgIGxvbmcmIGl3b3JkKGludCk7CiAgICBsb25nIGl3b3JkKGludCkgY29uc3Q7CgoK
CgoKCgoKCiAgICAgCiAgICBjbGFzcyBJbml0IHsKICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7
IH0KICAgIH07CgogIHByb3RlY3RlZDoKICAgIGlubGluZSBpb3Moc3RyZWFtYnVmKiBzYiA9IDAs
IG9zdHJlYW0qIHRpZV90byA9IDApOwogICAgaW5saW5lIHZpcnR1YWwgfmlvcygpOwogICAgaW5s
aW5lIHZvaWQgaW5pdChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWUgPSAwKTsKfTsKCgoKCnR5
cGVkZWYgaW9zOjpzZWVrX2RpciBfc2Vla19kaXI7CgoKIAogCiAKIAogCgogCiAKY2xhc3Mgc3Ry
ZWFtbWFya2VyIDogcHJpdmF0ZSBfSU9fbWFya2VyIHsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1i
dWY7CiAgICB2b2lkIHNldF9vZmZzZXQoaW50IG9mZnNldCkgeyBfcG9zID0gb2Zmc2V0OyB9CiAg
cHVibGljOgogICAgc3RyZWFtbWFya2VyKHN0cmVhbWJ1ZiAqc2IpOwogICAgfnN0cmVhbW1hcmtl
cigpOwogICAgaW50IHNhdmluZygpIHsgcmV0dXJuICAxOyB9CiAgICBpbnQgZGVsdGEoc3RyZWFt
bWFya2VyJik7CiAgICBpbnQgZGVsdGEoKTsKfTsKCnN0cnVjdCBzdHJlYW1idWYgOiBwdWJsaWMg
X0lPX0ZJTEUgeyAgCiAgICBmcmllbmQgY2xhc3MgaW9zOwogICAgZnJpZW5kIGNsYXNzIGlzdHJl
YW07CiAgICBmcmllbmQgY2xhc3Mgb3N0cmVhbTsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1tYXJr
ZXI7CiAgICBjb25zdCB2b2lkIComX3Z0YWJsZSgpIHsgcmV0dXJuICooY29uc3Qgdm9pZCoqKSgo
X0lPX0ZJTEUqKXRoaXMgKyAxKTsgfQogIHByb3RlY3RlZDoKICAgIHN0YXRpYyBzdHJlYW1idWYq
IF9saXN0X2FsbDsgIAogICAgX0lPX0ZJTEUqJiB4Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0K
ICAgIHZvaWQgX3VuX2xpbmsoKTsKICAgIHZvaWQgX2xpbmtfaW4oKTsKICAgIGNoYXIqIGdwdHIo
KSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6
IF9JT19yZWFkX3B0cjsgfQogICAgY2hhciogcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0
ZV9wdHI7IH0KICAgIGNoYXIqIGVncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAm
IDB4MTAwICA/IF9JT19zYXZlX2VuZCA6IF9JT19yZWFkX2VuZDsgfQogICAgY2hhciogZXBwdHIo
KSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfZW5kOyB9CiAgICBjaGFyKiBwYmFzZSgpIGNvbnN0
IHsgcmV0dXJuIF9JT193cml0ZV9iYXNlOyB9CiAgICBjaGFyKiBlYmFjaygpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFz
ZTt9CiAgICBjaGFyKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9iYXNlOyB9CiAgICBj
aGFyKiBlYnVmKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQ7IH0KICAgIGludCBibGVuKCkg
Y29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQgLSBfSU9fYnVmX2Jhc2U7IH0KICAgIHZvaWQgeHB1
dF9jaGFyKGNoYXIgYykgeyAqX0lPX3dyaXRlX3B0cisrID0gYzsgfQogICAgaW50IHhmbGFncygp
IHsgcmV0dXJuIF9mbGFncyA7IH0KICAgIGludCB4ZmxhZ3MoaW50IGYpIHtpbnQgZmwgPSBfZmxh
Z3MgOyBfZmxhZ3MgID0gZjsgcmV0dXJuIGZsO30KICAgIHZvaWQgeHNldGZsYWdzKGludCBmKSB7
IF9mbGFncyAgfD0gZjsgfQogICAgdm9pZCB4c2V0ZmxhZ3MoaW50IGYsIGludCBtYXNrKQogICAg
ICB7IF9mbGFncyAgPSAoX2ZsYWdzICAmIH5tYXNrKSB8IChmICYgbWFzayk7IH0KICAgIHZvaWQg
Z2J1bXAoaW50IG4pCiAgICAgIHsgX2ZsYWdzICAmIDB4MTAwICA/IChfSU9fc2F2ZV9iYXNlKz1u
KTooX0lPX3JlYWRfcHRyKz1uKTt9CiAgICB2b2lkIHBidW1wKGludCBuKSB7IF9JT193cml0ZV9w
dHIgKz0gbjsgfQogICAgdm9pZCBzZXRiKGNoYXIqIGIsIGNoYXIqIGViLCBpbnQgYT0wKTsKICAg
IHZvaWQgc2V0cChjaGFyKiBwLCBjaGFyKiBlcCkKICAgICAgeyBfSU9fd3JpdGVfYmFzZT1fSU9f
d3JpdGVfcHRyPXA7IF9JT193cml0ZV9lbmQ9ZXA7IH0KICAgIHZvaWQgc2V0ZyhjaGFyKiBlYiwg
Y2hhciogZywgY2hhciAqZWcpIHsKICAgICAgaWYgKF9mbGFncyAgJiAweDEwMCApIF9JT19mcmVl
X2JhY2t1cF9hcmVhKHRoaXMpOyAKICAgICAgX0lPX3JlYWRfYmFzZSA9IGViOyBfSU9fcmVhZF9w
dHIgPSBnOyBfSU9fcmVhZF9lbmQgPSBlZzsgfQogICAgY2hhciAqc2hvcnRidWYoKSB7IHJldHVy
biBfc2hvcnRidWY7IH0KCiAgICBpbnQgaW5fYmFja3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgx
MDAgOyB9CiAgICAgCiAgICBjaGFyICpHYmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lP
X3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jhc2U7IH0KICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyBy
ZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAK
ICAgIGNoYXIgKkJiYXNlKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDog
X0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFz
ZTsgfQogICAgIAogICAgY2hhciAqZUJwdHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19y
ZWFkX2VuZCA6IF9JT19zYXZlX2VuZDsgfQogICAgY2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9f
c2F2ZV9iYXNlOyB9CiAgICBjaGFyICplTnB0cigpIHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQog
ICAgaW50IGhhdmVfYmFja3VwKCkgeyByZXR1cm4gX0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9
CiAgICBpbnQgaGF2ZV9tYXJrZXJzKCkgeyByZXR1cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQog
ICAgdm9pZCBmcmVlX2JhY2t1cF9hcmVhKCk7CiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAK
ICAgIGludCBwdXRfbW9kZSgpIHsgcmV0dXJuIF9mbGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3
aXRjaF90b19nZXRfbW9kZSgpOwogICAgCiAgICBzdHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1
YmxpYzoKICAgIHN0YXRpYyBpbnQgZmx1c2hfYWxsKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9h
bGxfbGluZWJ1ZmZlcmVkKCk7ICAKICAgIHZpcnR1YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVh
bCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpICk7ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxv
dygpOyAgCiAgICB2aXJ0dWFsIGludCB1ZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2Zh
aWwoaW50IGMpOwogCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMs
IHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0
cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3Nl
ZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9z
IHNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKCiAg
ICBzdHJlYW1wb3MgcHVic2Vla29mZihzdHJlYW1vZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2Rl
PWlvczo6aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBk
LCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHB1YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1v
ZGUgPSBpb3M6OmlufGlvczo6b3V0KQogICAgICB7IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywg
cG9zLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHNzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGly
LCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJl
YW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJl
YW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsK
ICAgIHZpcnR1YWwgaW50IGRvYWxsb2NhdGUoKTsKCiAgICBpbnQgc2Vla21hcmsoc3RyZWFtbWFy
a2VyJiBtYXJrLCBpbnQgZGVsdGEgPSAwKTsKICAgIGludCBzcHV0YmFja2MoY2hhciBjKTsKICAg
IGludCBzdW5nZXRjKCk7CiAgICBpbnQgdW5idWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDIg
ID8gMSA6IDA7IH0KICAgIGludCBsaW5lYnVmZmVyZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAweDIw
MCAgPyAxIDogMDsgfQogICAgdm9pZCB1bmJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdz
IHw9IDIgOyBlbHNlIF9mbGFncyAmPSB+MiA7IH0KICAgIHZvaWQgbGluZWJ1ZmZlcmVkKGludCBp
KQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDB4MjAwIDsgZWxzZSBfZmxhZ3MgJj0gfjB4MjAwIDsgfQog
ICAgaW50IGFsbG9jYXRlKCkgeyAgCglpZiAoYmFzZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJu
IDA7CgllbHNlIHJldHVybiBkb2FsbG9jYXRlKCk7IH0KICAgICAKICAgIHZvaWQgYWxsb2NidWYo
KSB7IGlmIChiYXNlKCkgPT0gX19udWxsICkgZG9hbGxvY2J1ZigpOyB9CiAgICB2b2lkIGRvYWxs
b2NidWYoKTsKICAgIGludCBpbl9hdmFpbCgpIHsgcmV0dXJuIF9JT19yZWFkX2VuZCAtIF9JT19y
ZWFkX3B0cjsgfQogICAgaW50IG91dF93YWl0aW5nKCkgeyByZXR1cm4gX0lPX3dyaXRlX3B0ciAt
IF9JT193cml0ZV9iYXNlOyB9CiAgICBzdHJlYW1zaXplIHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0
cmVhbXNpemUgbikgeyByZXR1cm4geHNwdXRuKHMsIG4pOyB9CiAgICBzdHJlYW1zaXplIHBhZG4o
Y2hhciBwYWQsIHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3BhZG4odGhpcywgcGFkLCBuKTsg
fQogICAgc3RyZWFtc2l6ZSBzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9J
T19zZ2V0bih0aGlzLCBzLCBuKTsgfQogICAgaW50IGlnbm9yZShpbnQpOwogICAgaW50IGdldF9j
b2x1bW4oKTsKICAgIGludCBzZXRfY29sdW1uKGludCk7CiAgICBsb25nIHNnZXRsaW5lKGNoYXIq
IGJ1ZiwgX0dfc2l6ZV90ICBuLCBjaGFyIGRlbGltLCBpbnQgcHV0YmFja19kZWxpbSk7CiAgICBp
bnQgc3B1dGMoaW50IGMpIHsgcmV0dXJuIF9JT19wdXRjKGMsIHRoaXMpOyB9CiAgICBpbnQgc2J1
bXBjKCkgeyByZXR1cm4gX0lPX2dldGModGhpcyk7IH0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJu
ICgoICB0aGlzICApLT5fSU9fcmVhZF9wdHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRfZW5kICYm
IF9fdW5kZXJmbG93ICggIHRoaXMgICkgPT0gKC0xKSAgPyAoLTEpICA6ICoodW5zaWduZWQgY2hh
ciAqKSAoICB0aGlzICApLT5fSU9fcmVhZF9wdHIpICA7IH0KICAgIGludCBzbmV4dGMoKSB7Cglp
ZiAoX0lPX3JlYWRfcHRyID49IF9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyh0aGlzKSA9PSAo
LTEpICkKCSAgcmV0dXJuICgtMSkgOwoJZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyssIHNnZXRj
KCk7IH0KICAgIHZvaWQgc3Rvc3NjKCkgeyBpZiAoX0lPX3JlYWRfcHRyIDwgX0lPX3JlYWRfZW5k
KSBfSU9fcmVhZF9wdHIrKzsgfQogICAgaW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9HX3Zh
X2xpc3QgIGFwLCBpb3MqIHN0cmVhbSA9IF9fbnVsbCApOwogICAgaW50IHNjYW4oY2hhciBjb25z
dCAqZm10MCAuLi4pOwogICAgaW50IHZmb3JtKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3Qg
IGFwKTsKICAgIGludCBmb3JtKGNoYXIgY29uc3QgKmZtdDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFs
IHN0cmVhbXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmly
dHVhbCBzdHJlYW1zaXplIHN5c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2
aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0
dWFsIGludCBzeXNfY2xvc2UoKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAoK
CgoKfTsKCiAKIAoKY2xhc3MgZmlsZWJ1ZiA6IHB1YmxpYyBzdHJlYW1idWYgewogIHByb3RlY3Rl
ZDoKICAgIHZvaWQgaW5pdCgpOwogIHB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBpbnQgb3BlbnBy
b3Q7ICAKICAgIGZpbGVidWYoKTsKICAgIGZpbGVidWYoaW50IGZkKTsKICAgIGZpbGVidWYoaW50
IGZkLCBjaGFyKiBwLCBpbnQgbGVuKTsKCgoKICAgIH5maWxlYnVmKCk7CiAgICBmaWxlYnVmKiBh
dHRhY2goaW50IGZkKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNv
bnN0IGNoYXIgKm1vZGUpOwogICAgZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwg
aW9zOjpvcGVubW9kZSBtb2RlLCBpbnQgcHJvdCA9IDA2NjQpOwogICAgdmlydHVhbCBpbnQgdW5k
ZXJmbG93KCk7CiAgICB2aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkgKTsKICAgIGlu
dCBpc19vcGVuKCkgY29uc3QgeyByZXR1cm4gX2ZpbGVubyA+PSAwOyB9CiAgICBpbnQgZmQoKSBj
b25zdCB7IHJldHVybiBpc19vcGVuKCkgPyBfZmlsZW5vIDogKC0xKSA7IH0KICAgIGZpbGVidWYq
IGNsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7CiAgICB2aXJ0dWFsIHN0cmVh
bXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6
b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAg
ICBzdHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgc3Ry
ZWFtc2l6ZSB4c2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgaW50IHN5
bmMoKTsKICBwcm90ZWN0ZWQ6ICAKIAogICAgaW50IGlzX3JlYWRpbmcoKSB7IHJldHVybiBlYmFj
aygpICE9IGVncHRyKCk7IH0KICAgIGNoYXIqIGN1cl9wdHIoKSB7IHJldHVybiBpc19yZWFkaW5n
KCkgPyAgZ3B0cigpIDogcHB0cigpOyB9CiAgICAgCiAgICBjaGFyKiBmaWxlX3B0cigpIHsgcmV0
dXJuIGVHcHRyKCk7IH0KICAgICAKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFy
KiBidWYsIHN0cmVhbXNpemUgc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2Vlayhz
dHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNv
bnN0IGNoYXIqLCBzdHJlYW1zaXplKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsg
IAogICAgdmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7CgoKCgp9OwoKaW5saW5lIHZvaWQgaW9zOjpp
bml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZV90bykgewoJCV9zdGF0ZSA9IHNiID8gaW9z
Ojpnb29kYml0IDogaW9zOjpiYWRiaXQ7IF9leGNlcHRpb25zPTA7CgkJX3N0cmJ1Zj1zYjsgX3Rp
ZSA9IHRpZV90bzsgX3dpZHRoPTA7IF9maWxsPScgJzsKCgkJX2ZsYWdzPWlvczo6c2tpcHdzfGlv
czo6ZGVjOwoKCgoJCV9wcmVjaXNpb249NjsgX2FycmF5cyA9IDA7IH0KCmlubGluZSBpb3M6Omlv
cyhzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsgaW5pdChzYiwgdGllX3RvKTsgfQoK
aW5saW5lIGlvczo6fmlvcygpIHsKCgoKICAgICAKICAgICAKICAgIG9wZXJhdG9yIGRlbGV0ZVtd
IChfYXJyYXlzKTsKfQp9ICAKCiMgMzEgIi91c3IvZnJlZXdhcmUvbGliL2djYy1saWIvbWlwcy1z
Z2ktaXJpeDYuMi8yLjk1LjIvaW5jbHVkZS9nKysvaW9zdHJlYW0uaCIgMiAzCgoKZXh0ZXJuICJD
KysiIHsKY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdHlwZWRlZiBpb3MmICgqX19tYW5p
cCkoaW9zJik7CnR5cGVkZWYgaXN0cmVhbSYgKCpfX2ltYW5pcCkoaXN0cmVhbSYpOwp0eXBlZGVm
IG9zdHJlYW0mICgqX19vbWFuaXApKG9zdHJlYW0mKTsKCmV4dGVybiBpc3RyZWFtJiB3cyhpc3Ry
ZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYgb3V0cyk7CmV4dGVybiBv
c3RyZWFtJiBlbmRsKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kcyhvc3RyZWFt
JiBvdXRzKTsKCmNsYXNzIG9zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewogICAgIAogICAg
dm9pZCBkb19vc2Z4KCk7CiAgcHVibGljOgogICAgb3N0cmVhbSgpIHsgfQogICAgb3N0cmVhbShz
dHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVkPSBfX251bGwgKTsKICAgIGludCBvcGZ4KCkgewoJ
aWYgKCFnb29kKCkpIHJldHVybiAwOwoJZWxzZSB7IGlmIChfdGllKSBfdGllLT5mbHVzaCgpOyAg
OyByZXR1cm4gMTt9IH0KICAgIHZvaWQgb3NmeCgpIHsgIDsKCQkgIGlmIChmbGFncygpICYgKGlv
czo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkKCQkgICAgICBkb19vc2Z4KCk7IH0KICAgIG9zdHJlYW0m
IGZsdXNoKCk7CiAgICBvc3RyZWFtJiBwdXQoY2hhciBjKSB7IF9zdHJidWYtPnNwdXRjKGMpOyBy
ZXR1cm4gKnRoaXM7IH0KCgoKCgogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgY2hhciAqcywgc3Ry
ZWFtc2l6ZSBuKTsKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMsIHN0
cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30KICAg
IG9zdHJlYW0mIHdyaXRlKGNvbnN0IHNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAg
IHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShj
b25zdCB2b2lkICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBj
aGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiBzZWVrcChzdHJlYW1wb3MpOwogICAgb3N0cmVhbSYg
c2Vla3Aoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9zIHRlbGxwKCk7CiAgICBv
c3RyZWFtJiBmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgb3N0cmVhbSYgdmZvcm0o
Y29uc3QgY2hhciAqZm9ybWF0LCBfR192YV9saXN0ICBhcmdzKTsKCiAgICBvc3RyZWFtJiBvcGVy
YXRvcjw8KGNoYXIgYyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGNoYXIgYykg
eyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHNp
Z25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQogICAgb3N0cmVhbSYg
b3BlcmF0b3I8PChjb25zdCBjaGFyICpzKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qg
dW5zaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7IH0K
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIgKnMpCgl7IHJldHVybiAo
KnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0
IHZvaWQgKnApOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChpbnQgbik7CiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KHVuc2lnbmVkIGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBu
KTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBuKTsKCiAgICBfX2V4dGVu
c2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBsb25nIG4pOwogICAgX19leHRlbnNpb25f
XyBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBuKTsKCiAgICBvc3RyZWFt
JiBvcGVyYXRvcjw8KHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgoaW50KW4pO30KICAgIG9z
dHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgbikge3JldHVybiBvcGVyYXRvcjw8KCh1
bnNpZ25lZCBpbnQpbik7fQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoYm9vbCBiKSB7IHJldHVy
biBvcGVyYXRvcjw8KChpbnQpYik7IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGRvdWJsZSBu
KTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZmxvYXQgbikgeyByZXR1cm4gb3BlcmF0b3I8PCgo
ZG91YmxlKW4pOyB9CgoKCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIG4pIHsg
cmV0dXJuIG9wZXJhdG9yPDwoKGRvdWJsZSluKTsgfQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwo
X19vbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhpcyk7IH0KICAgIG9zdHJlYW0mIG9w
ZXJhdG9yPDwoX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9CiAg
ICBvc3RyZWFtJiBvcGVyYXRvcjw8KHN0cmVhbWJ1ZiopOwoKCgp9OwoKY2xhc3MgaXN0cmVhbSA6
IHZpcnR1YWwgcHVibGljIGlvcwp7CiAgICAgCnByb3RlY3RlZDoKICAgIF9HX3NpemVfdCAgX2dj
b3VudDsKCiAgICBpbnQgX3NraXBfd3MoKTsKICBwdWJsaWM6CiAgICBpc3RyZWFtKCk6IF9nY291
bnQgKDApIHsgfQogICAgaXN0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IF9fbnVs
bCApOwogICAgaXN0cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdc
bicpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBk
ZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAg
IGlzdHJlYW0mIGdldChjaGFyJiBjKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFyJiBj
KSB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKGNoYXIqIHB0
ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0bGluZSh1bnNp
Z25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0
bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBj
aGFyJiBjKSAgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVhbSYgZ2V0KHNpZ25l
ZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0KChj
aGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKHNpZ25lZCBjaGFy
KiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0bGluZSgoY2hh
ciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgcmVhZChjaGFyICpwdHIsIHN0cmVh
bXNpemUgbik7CiAgICBpc3RyZWFtJiByZWFkKHVuc2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFtc2l6
ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiBy
ZWFkKHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgo
Y2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZCh2b2lkICpwdHIsIHN0cmVhbXNpemUg
bikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgZ2V0
KHN0cmVhbWJ1ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldHMoY2hh
ciAqKnMsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGludCBpcGZ4KGludCBuZWVkID0gMCkgewoJ
aWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAg
IDsKCSAgaWYgKF90aWUgJiYgKG5lZWQgPT0gMCB8fCByZGJ1ZigpLT5pbl9hdmFpbCgpIDwgbmVl
ZCkpIF90aWUtPmZsdXNoKCk7CgkgIGlmICghbmVlZCAmJiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdz
KSkgcmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICBpbnQg
aXBmeDAoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsg
fQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllKSBfdGllLT5mbHVzaCgpOwoJICBpZiAoZmxhZ3Mo
KSAmIGlvczo6c2tpcHdzKSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSByZXR1cm4gMTsKCX0K
ICAgIH0KICAgIGludCBpcGZ4MSgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJp
dCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgcmRidWYoKS0+aW5f
YXZhaWwoKSA9PSAwKSBfdGllLT5mbHVzaCgpOwoJICByZXR1cm4gMTsKCX0KICAgIH0KICAgIHZv
aWQgaXNmeCgpIHsgIDsgfQogICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4MSgpKSByZXR1cm4gKC0x
KSA7CgkJZWxzZSB7IGludCBjaCA9IF9zdHJidWYtPnNidW1wYygpOwoJCSAgICAgICBpZiAoY2gg
PT0gKC0xKSApIHNldChpb3M6OmVvZmJpdCk7CgkJICAgICAgIGlzZngoKTsKCQkgICAgICAgcmV0
dXJuIGNoOwoJCSAgICAgfSB9CiAgICBpbnQgcGVlaygpOwogICAgX0dfc2l6ZV90ICBnY291bnQo
KSB7IHJldHVybiBfZ2NvdW50OyB9CiAgICBpc3RyZWFtJiBpZ25vcmUoaW50IG49MSwgaW50IGRl
bGltID0gKC0xKSApOwogICAgaW50IHN5bmMgKCk7CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1w
b3MpOwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFt
cG9zIHRlbGxnKCk7CiAgICBpc3RyZWFtJiBwdXRiYWNrKGNoYXIgY2gpIHsKCWlmIChnb29kKCkg
JiYgX3N0cmJ1Zi0+c3B1dGJhY2tjKGNoKSA9PSAoLTEpICkgY2xlYXIoaW9zOjpiYWRiaXQpOwoJ
cmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIHVuZ2V0KCkgewoJaWYgKGdvb2QoKSAmJiBfc3Ry
YnVmLT5zdW5nZXRjKCkgPT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0KTsKCXJldHVybiAqdGhp
czt9CiAgICBpc3RyZWFtJiBzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgaXN0cmVh
bSYgdnNjYW4oY29uc3QgY2hhciAqZm9ybWF0LCBfR192YV9saXN0ICBhcmdzKTsKCgoKCgoKICAg
IGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciopOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNp
Z25lZCBjaGFyKiBwKSB7IHJldHVybiBvcGVyYXRvcj4+KChjaGFyKilwKTsgfQogICAgaXN0cmVh
bSYgb3BlcmF0b3I+PihzaWduZWQgY2hhcipwKSB7IHJldHVybiBvcGVyYXRvcj4+KChjaGFyKilw
KTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyJiBjKTsKICAgIGlzdHJlYW0mIG9wZXJh
dG9yPj4odW5zaWduZWQgY2hhciYgYykge3JldHVybiBvcGVyYXRvcj4+KChjaGFyJiljKTt9CiAg
ICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4o
KGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oaW50Jik7CiAgICBpc3RyZWFtJiBv
cGVyYXRvcj4+KGxvbmcmKTsKCiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9yPj4o
bG9uZyBsb25nJik7CiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWdu
ZWQgbG9uZyBsb25nJik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaG9ydCYpOwogICAgaXN0
cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4o
dW5zaWduZWQgbG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYp
OwoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oYm9vbCYpOwoKICAgIGlzdHJlYW0mIG9wZXJhdG9y
Pj4oZmxvYXQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oZG91YmxlJik7CiAgICBpc3RyZWFt
JiBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KCBfX21h
bmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIG9w
ZXJhdG9yPj4oX19pbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhpcyk7IH0KICAgIGlz
dHJlYW0mIG9wZXJhdG9yPj4oc3RyZWFtYnVmKik7Cn07CgpjbGFzcyBpb3N0cmVhbSA6IHB1Ymxp
YyBpc3RyZWFtLCBwdWJsaWMgb3N0cmVhbQp7CiAgcHVibGljOgogICAgaW9zdHJlYW0oKSB7IH0K
ICAgIGlvc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxsICk7Cn07Cgpj
bGFzcyBfSU9faXN0cmVhbV93aXRoYXNzaWduIDogcHVibGljIGlzdHJlYW0gewpwdWJsaWM6CiAg
X0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KGlzdHJlYW0mKTsKICBfSU9faXN0cmVh
bV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQogICAg
eyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxpc3RyZWFtJj4gKHJocykpOyB9Cn07Cgpj
bGFzcyBfSU9fb3N0cmVhbV93aXRoYXNzaWduIDogcHVibGljIG9zdHJlYW0gewpwdWJsaWM6CiAg
X0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KG9zdHJlYW0mKTsKICBfSU9fb3N0cmVh
bV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQogICAg
eyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxvc3RyZWFtJj4gKHJocykpOyB9Cn07Cgpl
eHRlcm4gX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiBjaW47CiAKZXh0ZXJuIF9JT19vc3RyZWFtX3dp
dGhhc3NpZ24gY291dCwgY2VycjsKCmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNsb2cK
CgoKOwoKZXh0ZXJuIGlzdHJlYW0mIGxvY2soaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIGlzdHJlYW0m
IHVubG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgbG9jayhvc3RyZWFtJiBvdXRz
KTsKZXh0ZXJuIG9zdHJlYW0mIHVubG9jayhvc3RyZWFtJiBvdXRzKTsKCnN0cnVjdCBJb3N0cmVh
bV9pbml0IHsgfSA7ICAgCgppbmxpbmUgaW9zJiBkZWMoaW9zJiBpKQp7IGkuc2V0Zihpb3M6OmRl
YywgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBo
ZXgoaW9zJiBpKQp7IGkuc2V0Zihpb3M6OmhleCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3Qp
OyByZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBvY3QoaW9zJiBpKQp7IGkuc2V0Zihpb3M6Om9jdCwg
aW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQp9ICAKCgojIDExICJndGIt
cmVkbGluLmNwcCIgMgoKIyAxICIvdXNyL2ZyZWV3YXJlL2xpYi9nY2MtbGliL21pcHMtc2dpLWly
aXg2LjIvMi45NS4yL2luY2x1ZGUvZysrL2ZzdHJlYW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgpleHRlcm4gIkMrKyIgewpjbGFzcyBmc3Ry
ZWFtYmFzZSA6IHZpcnR1YWwgcHVibGljIGlvcyB7CgogICAgbXV0YWJsZSBmaWxlYnVmIF9fbXlf
ZmI7ICAKCiAgICB2b2lkIF9fZmJfaW5pdCAoKTsKICBwdWJsaWM6CiAgICBmc3RyZWFtYmFzZSgp
OwogICAgZnN0cmVhbWJhc2UoaW50IGZkKTsKICAgIGZzdHJlYW1iYXNlKGludCBmZCwgY2hhciAq
cCwgaW50IGwpOyAgCiAgICBmc3RyZWFtYmFzZShjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9kZSwg
aW50IHByb3Q9MDY2NCk7CiAgICB2b2lkIGNsb3NlKCk7CgogICAgZmlsZWJ1ZiogcmRidWYoKSBj
b25zdCB7IHJldHVybiAmX19teV9mYjsgfQoKCgogICAgdm9pZCBvcGVuKGNvbnN0IGNoYXIgKm5h
bWUsIGludCBtb2RlLCBpbnQgcHJvdD0wNjY0KTsKICAgIGludCBpc19vcGVuKCkgY29uc3QgeyBy
ZXR1cm4gcmRidWYoKS0+aXNfb3BlbigpOyB9CiAgICB2b2lkIHNldGJ1ZihjaGFyICpwdHIsIGlu
dCBsZW4pIHsgcmRidWYoKS0+c2V0YnVmKHB0ciwgbGVuKTsgfQogICAgdm9pZCBhdHRhY2goaW50
IGZkKTsKCgoKCn07CgpjbGFzcyBpZnN0cmVhbSA6IHB1YmxpYyBmc3RyZWFtYmFzZSwgcHVibGlj
IGlzdHJlYW0gewogIHB1YmxpYzoKICAgIGlmc3RyZWFtKCkgOiBmc3RyZWFtYmFzZSgpIHsgfQog
ICAgaWZzdHJlYW0oaW50IGZkKSA6IGZzdHJlYW1iYXNlKGZkKSB7IH0KICAgIGlmc3RyZWFtKGlu
dCBmZCwgY2hhciAqcCwgaW50IGwpIDogZnN0cmVhbWJhc2UoZmQsIHAsIGwpIHsgfSAgCiAgICBp
ZnN0cmVhbShjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9kZT1pb3M6OmluLCBpbnQgcHJvdD0wNjY0
KQoJOiBmc3RyZWFtYmFzZShuYW1lLCBtb2RlLCBwcm90KSB7IH0KICAgIHZvaWQgb3Blbihjb25z
dCBjaGFyICpuYW1lLCBpbnQgbW9kZT1pb3M6OmluLCBpbnQgcHJvdD0wNjY0KQoJeyBmc3RyZWFt
YmFzZTo6b3BlbihuYW1lLCBtb2RlLCBwcm90KTsgfQp9OwoKY2xhc3Mgb2ZzdHJlYW0gOiBwdWJs
aWMgZnN0cmVhbWJhc2UsIHB1YmxpYyBvc3RyZWFtIHsKICBwdWJsaWM6CiAgICBvZnN0cmVhbSgp
IDogZnN0cmVhbWJhc2UoKSB7IH0KICAgIG9mc3RyZWFtKGludCBmZCkgOiBmc3RyZWFtYmFzZShm
ZCkgeyB9CiAgICBvZnN0cmVhbShpbnQgZmQsIGNoYXIgKnAsIGludCBsKSA6IGZzdHJlYW1iYXNl
KGZkLCBwLCBsKSB7IH0gIAogICAgb2ZzdHJlYW0oY29uc3QgY2hhciAqbmFtZSwgaW50IG1vZGU9
aW9zOjpvdXQsIGludCBwcm90PTA2NjQpCgk6IGZzdHJlYW1iYXNlKG5hbWUsIG1vZGUsIHByb3Qp
IHsgfQogICAgdm9pZCBvcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlPWlvczo6b3V0LCBp
bnQgcHJvdD0wNjY0KQoJeyBmc3RyZWFtYmFzZTo6b3BlbihuYW1lLCBtb2RlLCBwcm90KTsgfQp9
OwoKY2xhc3MgZnN0cmVhbSA6IHB1YmxpYyBmc3RyZWFtYmFzZSwgcHVibGljIGlvc3RyZWFtIHsK
ICBwdWJsaWM6CiAgICBmc3RyZWFtKCkgOiBmc3RyZWFtYmFzZSgpIHsgfQogICAgZnN0cmVhbShp
bnQgZmQpIDogZnN0cmVhbWJhc2UoZmQpIHsgfQogICAgZnN0cmVhbShjb25zdCBjaGFyICpuYW1l
LCBpbnQgbW9kZSwgaW50IHByb3Q9MDY2NCkKCTogZnN0cmVhbWJhc2UobmFtZSwgbW9kZSwgcHJv
dCkgeyB9CiAgICBmc3RyZWFtKGludCBmZCwgY2hhciAqcCwgaW50IGwpIDogZnN0cmVhbWJhc2Uo
ZmQsIHAsIGwpIHsgfSAgCiAgICB2b2lkIG9wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IG1vZGUs
IGludCBwcm90PTA2NjQpCgl7IGZzdHJlYW1iYXNlOjpvcGVuKG5hbWUsIG1vZGUsIHByb3QpOyB9
Cn07Cn0gIAoKIyAxMiAiZ3RiLXJlZGxpbi5jcHAiIDIKCgoKaW50IG1haW4oKXsKCgljaGFyIGNo
OwoJaW50IHBvaW50cywgZmFjZXMsIG9mYWNlczsKCWNoYXIgc1s4MCBdLCBjaHNbODAgKzJdOwoJ
aW50IGksajsKCWJvb2wgbGluZXB0c1sxMjUwMDAgXVsxMjUwMDAgXTsKCWludCBwdGEsIHB0Yiwg
dmVydHM7CglpZnN0cmVhbSBidWZmZXJpbjsKCW9mc3RyZWFtIGJ1ZmZlcm91dDsKCiAKCgkgCgoK
CgoJCglidWZmZXJvdXQub3BlbigicmVkbGluX2J1ZmZlci50bXAiKTsKCiAKCmNlcnI8PCJ2YXJz
IGluaXQnZCI8PGVuZGw7CgoJd2hpbGUoIWNpbi5lb2YoKSl7CgkgCgkJY2g9Y2luLnBlZWsoKTsK
CQlpZiAoY2g9PScjJyl7CgkJCWNpbi5nZXRsaW5lKHMsODAgLTEsJ1xuJyk7CgkJCWNvdXQ8PHM8
PGVuZGw7CgkJfQoJCWVsc2V7CgkJCWNpbj4+cG9pbnRzPj5mYWNlczsKCQkJYnJlYWs7CgkJfQoJ
fQpjZXJyPDxwb2ludHM8PGVuZGw7CglpZihwb2ludHM+IDEyNTAwMCApewoJCWNlcnI8PCJUcnlp
bmcgdG8gcHJvY2VzcyBhIGZpbGUgb2YgdGhpcyBtYWduaXR1ZGUgd2lsbCBnZXQgdWdseS4iPDxl
bmRsOwoJCWNlcnI8PCJTdWdnZXN0IHJlZHVjaW5nIGZpbGUgdG8gPCI8PCAxMjUwMDAgPDwiIHBv
aW50cy4iPDxlbmRsOwoJCWV4aXQoMCk7Cgl9CgpjZXJyPDwicG9pbnRzL2ZhY2VzIHJlYWQiPDxl
bmRsOwoKCW9mYWNlcz1mYWNlczsKCiAKCglpPTA7Cgl3aGlsZSghY2luLmVvZigpKXsKCQljaCA9
IGNpbi5wZWVrKCk7CgkJY2luLmdldGxpbmUocyw4MCAtMSwnXG4nKTsKCQlidWZmZXJvdXQ8PHM8
PGVuZGw7CgkgCgkJaWYgKChjaGFyKWNoIT0nIycpCgkJCWkrKzsKCQlpZiAoaT09cG9pbnRzKQoJ
CQlicmVhazsKCX0KCQoJaWYgKGNpbi5lb2YoKSl7CgkJY2Vycjw8ImRhdGEgaW5jb21wbGV0ZSwg
RU9GIHJlYWNoZWQgZHVyaW5nIGNvb3JkaW5hdGUgc2VjdGlvbiI8PGVuZGw7CgkJZXhpdCgwKTsK
CX0KCiAKCglpPTA7Cgl3aGlsZSghY2luLmVvZigpKXsKCQlpZiAoaT09ZmFjZXMpCgkJCWJyZWFr
OwoJCWNoID0gY2luLnBlZWsoKTsKCSAKCQlpZiAoKGNoYXIpY2g9PScjJyl7CgkJCWNpbi5nZXRs
aW5lKHMsODAgLTEsJ1xuJyk7CgkJCWJ1ZmZlcm91dDw8czw8ZW5kbDsKCQl9CgkJZWxzZXsKCQkJ
Y2luPj52ZXJ0czsKCQkJaWYgKHZlcnRzIT0yKXsKCQkJCWNpbi5nZXRsaW5lKHMsODAgLTEsJ1xu
Jyk7CgkJCQlidWZmZXJvdXQ8PHM8PGVuZGw7CgkJCX0KCQkJZWxzZXsKCQkJCWNpbj4+cHRhPj5w
dGI7CgkJCQlpZighbGluZXB0c1twdGEtMV1bcHRiLTFdICYmICFsaW5lcHRzW3B0Yi0xXVtwdGEt
MV0pewoJCQkJCWxpbmVwdHNbcHRhLTFdW3B0Yi0xXT0xOwoJCQkJCWxpbmVwdHNbcHRiLTFdW3B0
YS0xXT0xOwoJCQkJfQoJCQkJZWxzZXsKCQkJCQlvZmFjZXMtLTsKCQkJCX0KCQkJfQoJCQlpKys7
CgkJfQoJfQoKY2Vycjw8ImFsbCBmYWNlcyByZWFkLCByZWR1bmRhbnQgbGluZXMgcmVtb3ZlZCI8
PGVuZGw7CgoJaWYgKGNpbi5lb2YoKSl7CgkJY2Vycjw8ImRhdGEgcG9zc2libHkgaW5jb21wbGV0
ZSwgRU9GIHJlYWNoZWQgZHVyaW5nIGZhY2Ugc2VjdGlvbiI8PGVuZGw7Cgl9CgkKCWJ1ZmZlcm91
dC5jbG9zZSgpOwoJYnVmZmVyaW4ub3BlbigicmVkbGluX2J1ZmZlci50bXAiKTsKCgljb3V0PDxw
b2ludHM8PCcgJzw8b2ZhY2VzPDxlbmRsOwoJd2hpbGUoIWJ1ZmZlcmluLmVvZigpKXsKCQlidWZm
ZXJpbj4+Y2g7CgkJY291dDw8Y2g7Cgl9CgkKY2Vycjw8Im91dHB1dCB0cmFuc2ZlcnJlZCBmcm9t
IGJ1ZmZlciI8PGVuZGw7CgoJYnVmZmVyaW4uY2xvc2UoKTsKCQoJcmV0dXJuKDApOwp9Cg==


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