From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15615 invoked by alias); 12 Jul 2002 21:36:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 15597 invoked by uid 71); 12 Jul 2002 21:36:00 -0000 Resent-Date: 12 Jul 2002 21:36:00 -0000 Resent-Message-ID: <20020712213600.15596.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, ronny@mit.edu Received: (qmail 11408 invoked by uid 61); 12 Jul 2002 21:27:55 -0000 Message-Id: <20020712212755.11407.qmail@sources.redhat.com> Date: Fri, 12 Jul 2002 14:36:00 -0000 From: ronny@mit.edu Reply-To: ronny@mit.edu To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/7296: Internal compiler error when getting a pointer to a templated function inside a templated class X-SW-Source: 2002-07/txt/msg00401.txt.bz2 List-Id: >Number: 7296 >Category: c++ >Synopsis: Internal compiler error when getting a pointer to a templated function inside a templated class >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Fri Jul 12 14:36:00 PDT 2002 >Closed-Date: >Last-Modified: >Originator: ronny@mit.edu >Release: 2.95.3 20010315 >Organization: >Environment: linux, x86 >Description: bug.cc: In function `int main()': bug.cc:19: Internal compiler error 56. bug.cc:19: Please submit a full bug report. bug.cc:19: See for instructions. >How-To-Repeat: compile this: template class A { public: template static int foo() { return a+f; }; }; int main() { typedef int (*FUNC_TYPE) (); FUNC_TYPE pfunc = A<1>::foo<2>; int x = pfunc(); return 0; }; >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="bug.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="bug.ii" IyAxICJidWcuY2MiCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMwogCgoKCgoKCgoKCgoK CgoKCgoKCiAKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwogCgoKCgoK CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKCgog CgoKCgoKCgogCiMgMTQyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwoKCiAKCgoKCgoKCgoK IAoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyMDggIi91c3IvaW5jbHVk ZS9mZWF0dXJlcy5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAK CgogCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCiMgMSAiL3Vzci9pbmNsdWRl L3N5cy9jZGVmcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKIAoK CgoKCiAKCgoKCgoKCgogCgoKCiMgNjUgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMwoKCiAK CgoKCgogCgoKCgogCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK CgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoK CgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgojIDI4MyAi L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwoKCgogCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgoK CgoKCgojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK CgoKCiMgMzEyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCgoKCgojIDI4ICIvdXNyL2lu Y2x1ZGUvc3RkaW8uaCIgMiAzCgoKZXh0ZXJuICJDIiB7IAoKCgojIDEgIi91c3IvdW5zL2djYy0y Ljk1LjMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkZGVm LmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci91bnMvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoK CiAKCgojIDYxICIvdXNyL3Vucy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK CgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL3Vucy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvdW5zL2djYy0yLjk1LjMv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMK CgojIDI4MyAiL3Vzci91bnMvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL3Vucy9nY2Mt Mi45NS4zL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNsdWRlL3N0ZGRl Zi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRp by5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwogCgoKCgoKCgoK CgoKCgoKCgoKIAoKCgoKCgoKCgojIDEgIi91c3IvdW5zL2djYy0yLjk1LjMvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoK IyAxOSAiL3Vzci91bnMvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8y Ljk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL3Vu cy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNsdWRl L3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMg MTMxICIvdXNyL3Vucy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIu OTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL3Vucy9nY2MtMi45 NS4zL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5o IiAzCgoKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvdW5zL2djYy0yLjk1LjMvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAiL3Vz ci91bnMvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjMvaW5j bHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL3Vucy9nY2MtMi45NS4zL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgog CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIg MwoKCiAKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNo b3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNp Z25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcg bG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQg X19xdWFkX3Q7CiMgNDggIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKCnR5cGVkZWYgc2ln bmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVk ZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50 IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWdu ZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9u ZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25n IGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBf X3VfcXVhZF90IF9fZGV2X3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX3VpZF90OwkJIAp0eXBlZGVm IF9fdV9pbnQgX19naWRfdDsJCSAKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190OwkJIAp0eXBlZGVm IF9fdV9pbnQgX19tb2RlX3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7IAkJIAp0eXBl ZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CQkgCnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CQkgCnR5 cGVkZWYgaW50IF9fcGlkX3Q7CQkJIAp0eXBlZGVmIGludCBfX3NzaXplX3Q7CQkJIAp0eXBlZGVm IF9fdV9sb25nIF9fcmxpbV90OwkJIAp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsJCSAK dHlwZWRlZiBfX3VfaW50IF9faWRfdDsJCQkgCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBf X3ZhbFsyXTsKICB9IF9fZnNpZF90OwkJCQkgCgogCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsJCQkg CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBl ZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29u ZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7CQkgCgwKdHlwZWRlZiBsb25nIGludCBf X2Nsb2NrX3Q7CgogCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKIAp0eXBlZGVmIGludCBfX3Rp bWVyX3Q7CgoKIAoKCgp0eXBlZGVmIGludCBfX2tleV90OwoKIAp0eXBlZGVmIHVuc2lnbmVkIHNo b3J0IGludCBfX2lwY19waWRfdDsKCgogCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7Cgog CgogCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2Nu dDY0X3Q7CgogCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFk X3QgX19mc2Jsa2NudDY0X3Q7CgogCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBl ZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgogCnR5cGVkZWYgX191X3F1YWRfdCBfX2lu bzY0X3Q7CgogCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKIAp0eXBlZGVmIGxvbmcgaW50 IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoK IAp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKIAp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3NvY2ts ZW5fdDsKCgogCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Nj aGVkLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgojIDYyICIvdXNyL2luY2x1ZGUvYml0cy9z Y2hlZC5oIiAzCgoKCgoKIApzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVk X3ByaW9yaXR5OwogIH07CgoKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi IDIgMwoKCiAKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsg ICAgCiAgaW50IF9fc3BpbmxvY2s7ICAgICAgIAoKfTsKCgogCnR5cGVkZWYgc3RydWN0IF9wdGhy ZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgogCnR5cGVkZWYgc3RydWN0IF9f cHRocmVhZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5 OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2No ZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRk cl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJl YWRfYXR0cl90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9j ayBfX2NfbG9jazsgIAogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOyAgICAgICAgIAp9IHB0 aHJlYWRfY29uZF90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJl YWRfY29uZGF0dHJfdDsKCiAKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgog CiAKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOyAgICAgICAgICAgICAgICAK ICBpbnQgX19tX2NvdW50OyAgICAgICAgICAgICAgICAgICAKICBfcHRocmVhZF9kZXNjciBfX21f b3duZXI7ICAgICAgICAKICBpbnQgX19tX2tpbmQ7ICAgICAgICAgICAgICAgICAgICAKICBzdHJ1 Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7ICAKfSBwdGhyZWFkX211dGV4X3Q7CgoKIAp0 eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7 CgoKIAp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgojIDExNyAiL3Vzci9pbmNsdWRlL2Jp dHMvcHRocmVhZHR5cGVzLmgiIDMKCgojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5 cGVzLmgiIDMKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKCgojIDE0 MyAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKCgojIDM2ICIvdXNyL2luY2x1ZGUv c3RkaW8uaCIgMiAzCgoKCgoKCgoKIAp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwoKCgoK CgoKCiAKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX19GSUxFOwoKCgoKCgoKCgojIDEgIi91c3Iv aW5jbHVkZS9saWJpby5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEg Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiAKCgoKCgogCgoKCgoKCiMgMSAiL3Vzci91 bnMvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjMvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL3Vucy9nY2MtMi45NS4zL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAK CgogCgoKCgoKIAoKCiMgNjEgIi91c3IvdW5zL2djYy0yLjk1LjMvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoK CgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvdW5zL2djYy0yLjk1LjMvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgog CgoKIyAxODggIi91c3IvdW5zL2djYy0yLjk1LjMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCAgd2ludF90OwoKCgoKIAoKIAoKIyAzMTcg Ii91c3IvdW5zL2djYy0yLjk1LjMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4z L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxNCAiL3Vz ci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3dj aGFyLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiMgNDYgIi91c3IvaW5j bHVkZS93Y2hhci5oIiAzCgoKIyAxICIvdXNyL3Vucy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMg MTkgIi91c3IvdW5zL2djYy0yLjk1LjMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45 NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci91bnMv Z2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjMvaW5jbHVkZS9z dGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgojIDEz MSAiL3Vzci91bnMvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1 LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMTkwICIvdXNyL3Vucy9nY2MtMi45NS4z L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz CgoKCiAKCgoKCiAKCiMgMjcxICIvdXNyL3Vucy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoKCgoKCgoKIAoK IAoKIyAzMTcgIi91c3IvdW5zL2djYy0yLjk1LjMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK IyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv d2NoYXIuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNTAgIi91c3IvaW5jbHVk ZS93Y2hhci5oIiAyIDMKCgogCgoKCgoKCgoKCgoKCgogCnR5cGVkZWYgc3RydWN0CnsKICBpbnQg X19jb3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRd OwogIH0gX192YWx1ZTsJCSAKfSBfX21ic3RhdGVfdDsKCgoKCiAKCiMgNjgyICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMwoKCgojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKCnR5 cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0g X0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0 ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZ2Nv bnYuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUv d2NoYXIuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKIyA0NiAiL3Vzci9p bmNsdWRlL3djaGFyLmgiIDMKCgojIDEgIi91c3IvdW5zL2djYy0yLjk1LjMvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoK IyAxOSAiL3Vzci91bnMvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8y Ljk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL3Vu cy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNsdWRl L3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMg MTMxICIvdXNyL3Vucy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIu OTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAxOTAgIi91c3IvdW5zL2djYy0yLjk1 LjMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgi IDMKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvdW5zL2djYy0yLjk1LjMvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgog CgogCgojIDMxNyAiL3Vzci91bnMvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK CgojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgoKCgogCgoKCgoKCgoKCgoKIyA3NiAi L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCgoKCiAKCiMgNjgyICIvdXNyL2luY2x1ZGUvd2NoYXIu aCIgMwoKCgojIDI4ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKCiMgMSAiL3Vzci91bnMv Z2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjMvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL3Vucy9nY2MtMi45NS4zL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgog CgoKCgoKIAoKCiMgNjEgIi91c3IvdW5zL2djYy0yLjk1LjMvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoK CgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvdW5zL2djYy0yLjk1LjMvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoK IyAxODggIi91c3IvdW5zL2djYy0yLjk1LjMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3IvdW5z L2djYy0yLjk1LjMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUv c3RkZGVmLmgiIDMKCgoKCiMgMjgzICIvdXNyL3Vucy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcg Ii91c3IvdW5zL2djYy0yLjk1LjMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4z L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAzMSAiL3Vz ci9pbmNsdWRlL2djb252LmgiIDIgMwoKCiAKCgogCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAog IF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dD T05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FM X0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RF U0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCiAKZW51bQp7CiAgX19HQ09O Vl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdOT1JFX0VSUk9SUyA9IDB4MDAwMgp9OwoK CiAKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3Qg X19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhOwoKCiAKdHlw ZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9f Z2NvbnZfc3RlcF9kYXRhICosCgkJCSAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29u c3QgdW5zaWduZWQgY2hhciAqLAoJCQkgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGlu dCwgaW50KTsKCiAKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0IF9fZ2Nv bnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9fZ2Nv bnZfc3RlcCAqKTsKCgogCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3QpIChzdHJ1Y3Qg X19nY29udl9zdGVwICosCgkJCQkgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICos CgkJCQkgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAoJCQkJICBfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKiosCgkJCQkgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAoJ CQkJICBzaXplX3QgKik7CgogCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19jb250ZXh0X2Zj dCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCgkJCQkJICBfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKiwKCQkJCQkgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCiAK dHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBf X2NvbnN0IGNoYXIgKioqLAoJCQkJCXNpemVfdCAqKTsKCiAKdHlwZWRlZiBpbnQgKCpfX2djb252 X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgq X19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2Rh dGEKewogICAKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5z X2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0 IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNf ZGF0YSAqX19uZXh0Owp9OwoKCiAKc3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAgc3RydWN0IF9fZ2Nv bnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25zdCBjaGFyICpfX21vZG5h bWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1lOwogIGNoYXIgKl9fdG9f bmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2ZjdCBfX2luaXRfZmN0 OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgogICAKCiAgaW50IF9fbWluX25lZWRlZF9m cm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVlZGVkX3RvOwogIGlu dCBfX21heF9uZWVkZWRfdG87CgogICAKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAqX19kYXRh OwkJIAp9OwoKIAoKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1bnNpZ25lZCBjaGFyICpf X291dGJ1ZjsgICAgIAogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOyAgCgoKICAgCiAgaW50 IF9fZmxhZ3M7CgogICAKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKICAgCgogIGludCBf X2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9f c3RhdGU7CSAKCgogICAKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX3RyYW5zOwp9OwoK CiAKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3Ry dWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252 X3N0ZXBfZGF0YSBfX2RhdGEgWzBdIDsKfSAqX19nY29udl90OwoKCiMgNDQgIi91c3IvaW5jbHVk ZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZv IF9fY2Q7CiAgc3RydWN0CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3Ry dWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsKICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZf dDsKCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJ X18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf X1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18g KChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBf X2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKCgoKCiAKCgoKCgoKCgoKCgoKCgoK CgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCiMgMzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMK CiAKCgoKCgoKCgoKCgoKCgoKCgogCgojIDEgIi91c3IvdW5zL2djYy0yLjk1LjMvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgogCgoKCgoKCnR5cGVkZWYgdm9pZCAqX19nbnVjX3ZhX2xpc3Q7CgoKCiAKCiMgMTIyICIvdXNy L3Vucy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNs dWRlL3N0ZGFyZy5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyMDkgIi91c3IvdW5zL2djYy0y Ljk1LjMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkYXJn LmgiIDMKCgoKCiMgNTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKCgoKCgoKCiMgNzIgIi91 c3IvaW5jbHVkZS9saWJpby5oIiAzCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiMgMTAzICIvdXNyL2lu Y2x1ZGUvbGliaW8uaCIgMwoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCBfSU9fanVtcF90OyAgc3RydWN0IF9JT19GSUxFOwoK IAoKCgoKCgoKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCiAKCnN0cnVjdCBfSU9fbWFya2Vy IHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsK ICAgCgogICAKICBpbnQgX3BvczsKIyAxOTIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCgp9OwoK IAplbnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9vaywKICBfX2NvZGVjdnRfcGFy dGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25vY29udgp9OwoKIyAyNTkgIi91 c3IvaW5jbHVkZS9saWJpby5oIiAzCgoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwkJ IAoKCiAgIAogICAKICBjaGFyKiBfSU9fcmVhZF9wdHI7CSAKICBjaGFyKiBfSU9fcmVhZF9lbmQ7 CSAKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CSAKICBj aGFyKiBfSU9fd3JpdGVfcHRyOwkgCiAgY2hhciogX0lPX3dyaXRlX2VuZDsJIAogIGNoYXIqIF9J T19idWZfYmFzZTsJIAogIGNoYXIqIF9JT19idWZfZW5kOwkgCiAgIAogIGNoYXIgKl9JT19zYXZl X2Jhc2U7ICAKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7ICAgCiAgY2hhciAqX0lPX3NhdmVfZW5k OyAgCgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpf Y2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90ICAgX29sZF9v ZmZzZXQ7ICAKCgogICAKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hh ciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCiAgIAoKICBfSU9fbG9ja190 ICpfbG9jazsKCgoKCgoKCgogIF9fb2ZmNjRfdCAgIF9vZmZzZXQ7CgoKCgoKICB2b2lkICpfX3Bh ZDE7CiAgdm9pZCAqX19wYWQyOwoKICBpbnQgX21vZGU7CiAgIAogIGNoYXIgX3VudXNlZDJbMTUg KiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKCgoKc3RydWN0IF9J T19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87 CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVybiBzdHJ1 Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CgoKCgoKCgoKCgoKIAoKIAoKdHlwZWRl ZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNp emVfdCBfX25ieXRlcyk7CgogCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAo dm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCgkJCQkgc2l6ZV90IF9fbik7Cgog CgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90 ICAgKl9fcG9zLCBpbnQgX193KTsKCiAKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9pZCAq X19jb29raWUpOwoKCiMgMzg5ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwoKCgoKZXh0ZXJuICJD IiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCkgOwpleHRl cm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpIDsKZXh0ZXJuIGludCBfX292ZXJm bG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpIDsKZXh0ZXJuIHdpbnRfdCAgIF9fd3VuZGVy ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCkgOwpleHRlcm4gd2ludF90ICAgX193dWZsb3cgKF9J T19GSUxFICopIHRocm93ICgpIDsKZXh0ZXJuIHdpbnRfdCAgIF9fd292ZXJmbG93IChfSU9fRklM RSAqLCB3aW50X3QgICkgdGhyb3cgKCkgOwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4g aW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCkgOwpleHRlcm4gaW50IF9JT19w dXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCkgOwpleHRlcm4gaW50IF9JT19m ZW9mIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCkgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9J T19GSUxFICpfX2ZwKSB0aHJvdyAoKSA7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9J T19GSUxFICpfX2ZwKSB0aHJvdyAoKSA7CgogCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUg KF9JT19GSUxFICopIHRocm93ICgpIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9f RklMRSAqKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUg KikgdGhyb3cgKCkgOwoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lP X0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKCQkJX19nbnVjX3Zh X2xpc3QgLCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpIDsKZXh0ZXJuIGludCBfSU9fdmZwcmlu dGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LAoJCQkgX19n bnVjX3ZhX2xpc3QgKSB0aHJvdyAoKSA7CmV4dGVybiBfX3NzaXplX3QgICBfSU9fcGFkbiAoX0lP X0ZJTEUgKiwgaW50LCBfX3NzaXplX3QgICkgdGhyb3cgKCkgOwpleHRlcm4gc2l6ZV90ICAgX0lP X3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCAgKSB0aHJvdyAoKSA7CgpleHRlcm4g X19vZmY2NF90ICAgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCAgLCBpbnQsIGlu dCkgdGhyb3cgKCkgOwpleHRlcm4gX19vZmY2NF90ICAgX0lPX3NlZWtwb3MgKF9JT19GSUxFICos IF9fb2ZmNjRfdCAgLCBpbnQpIHRocm93ICgpIDsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1 cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAoKSA7CgojIDUxMSAiL3Vzci9pbmNsdWRlL2xpYmlv LmgiIDMKCgoKfQoKCgojIDY1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKIyA3NiAiL3Vz ci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgogCgp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgoK CgogCgoKCgoKIAoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgojIDEyOSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgogCmV4 dGVybiBGSUxFICpzdGRpbjsJCSAKZXh0ZXJuIEZJTEUgKnN0ZG91dDsJCSAKZXh0ZXJuIEZJTEUg KnN0ZGVycjsJCSAKCiAKCgoKCgogCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9f ZmlsZW5hbWUpIHRocm93ICgpIDsKIApleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpf X29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhyb3cgKCkgOwoKCiAKCmV4dGVybiBGSUxFICp0 bXBmaWxlICh2b2lkKSB0aHJvdyAoKSA7CgoKCgoKCgoKCgogCmV4dGVybiBjaGFyICp0bXBuYW0g KGNoYXIgKl9fcykgdGhyb3cgKCkgOwoKCiAKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAq X19zKSB0aHJvdyAoKSA7CgoKCgogCgoKCgoKCmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0 IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQogICAgIHRocm93ICgpICAgOwoKCgog CmV4dGVybiBpbnQgZmNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwogCmV4dGVybiBp bnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIGludCBmZmx1 c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKCgoKCgoKCiAKZXh0ZXJu IEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKCQkgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpIDsKIApleHRlcm4gRklM RSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCgkJICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCgkJICAgICAgRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSkgdGhyb3cgKCkgOwojIDIyMiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoK CgoKCgoKCiAKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19t b2RlcykgdGhyb3cgKCkgOwoKCiMgMjUxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgogCgpl eHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVz dHJpY3QgX19idWYpIHRocm93ICgpIDsKIAoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKCQkgICAgaW50IF9fbW9k ZXMsIHNpemVfdCBfX24pIHRocm93ICgpIDsKCgogCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJ TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCgkJICAgICAg IHNpemVfdCBfX3NpemUpIHRocm93ICgpIDsKCiAKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklM RSAqX19zdHJlYW0pIHRocm93ICgpIDsKCgoKIApleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0sCgkJICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwgLi4uKSB0aHJvdyAoKSA7CiAKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKSA7CiAKZXh0ZXJuIGludCBzcHJpbnRmIChj aGFyICpfX3Jlc3RyaWN0IF9fcywKCQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y bWF0LCAuLi4pIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0 cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKCQkgICAgIF9fZ251 Y192YV9saXN0ICBfX2FyZykgdGhyb3cgKCkgOwogCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCAgX19hcmcpCiAgICAg dGhyb3cgKCkgOwogCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCgkJICAgICBfX2dudWNfdmFfbGlzdCAg X19hcmcpIHRocm93ICgpIDsKCgogCmV4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJp Y3QgX19zLCBzaXplX3QgX19tYXhsZW4sCgkJICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g KF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqX19yZXN0 cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKCQkgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0ICBfX2FyZykKICAgICB0aHJvdyAoKSAgX19hdHRy aWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CgoKIyAzMjMgIi91c3Iv aW5jbHVkZS9zdGRpby5oIiAzCgoKCiAKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJp Y3QgX19zdHJlYW0sCgkJICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4p IHRocm93ICgpIDsKIApleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19mb3JtYXQsIC4uLikgdGhyb3cgKCkgOwogCmV4dGVybiBpbnQgc3NjYW5mIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19zLAoJCSAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwgLi4uKSB0aHJvdyAoKSA7CgojIDM0OSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKIApl eHRlcm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwpleHRlcm4gaW50IGdl dGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgZ2V0Y2hhciAodm9p ZCkgdGhyb3cgKCkgOwoKIAoKCgoKIApleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhy b3cgKCkgOwoKCgogCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKSA7CgoKCiAKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0p IHRocm93ICgpIDsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCkgOwoKIApleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIHRocm93ICgpIDsKCiAKCgoK CiAKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRo cm93ICgpIDsKCgoKIApleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykg dGhyb3cgKCkgOwoKCgoKIApleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KSA7CgogCmV4dGVybiBpbnQgcHV0dyAoaW50IF9fdywgRklMRSAqX19zdHJlYW0pIHRocm93ICgp IDsKCgoKIApleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19u LCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpIDsKCgoKCgoKCiAKCmV4 dGVybiBjaGFyICpnZXRzIChjaGFyICpfX3MpIHRocm93ICgpIDsKCgojIDQzOSAiL3Vzci9pbmNs dWRlL3N0ZGlvLmgiIDMKCgoKIApleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpIDsKCgoK CgoKCiAKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgOwoKCiAK ZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoK IApleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19z aXplLAoJCSAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg KCkgOwogCmV4dGVybiBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19w dHIsIHNpemVfdCBfX3NpemUsCgkJICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBf X3MpIHRocm93ICgpIDsKCgogCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9f cmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCgkJCSAgICAgIHNpemVfdCBfX24sIEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpIDsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5s b2NrZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKCQkJ ICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpIDsK CgoKIApleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGlu dCBfX3doZW5jZSkgdGhyb3cgKCkgOwogCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19z dHJlYW0pIHRocm93ICgpIDsKIApleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKSA7CgogCgoKCgoKCgoKCgoKCiAKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jl c3RyaWN0IF9fc3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCkg OwogCmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpf X3BvcykgdGhyb3cgKCkgOwojIDUyMiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKCgoKCgoK CiAKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CiAKZXh0 ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwogCmV4dGVybiBpbnQgZmVy cm9yIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIHZvaWQgY2xlYXJlcnJf dW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgZmVvZl91bmxv Y2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2Nr ZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKCiAKZXh0ZXJuIHZvaWQgcGVycm9yIChf X2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgOwoKIAoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4 dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgoKCgoKCgogCmV4dGVy biBpbnQgZmlsZW5vIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCgogCmV4dGVybiBpbnQg ZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCgoKCiAKZXh0ZXJu IEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21v ZGVzKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCkgOwoKCgoKIApleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSB0aHJvdyAoKSA7 CgoKCgoKCgoKCiMgNjA0ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgoKIAoKIApleHRlcm4g dm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgogCgpleHRlcm4gaW50 IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKCiAKZXh0ZXJuIHZvaWQg ZnVubG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKCgoKCgoKCgogCgoKCgoK fSAKCgoKCiMgMSAiYnVnLmNjIiAyCgoKdGVtcGxhdGUgPGludCBhPgpjbGFzcyBBIHsKcHVibGlj OgogIAogIHRlbXBsYXRlIDxpbnQgZj4KICBzdGF0aWMgaW50IGZvbygpIHsKICAgIHJldHVybiBh K2Y7CiAgfTsKCn07CgppbnQgbWFpbigpIHsKCiAgdHlwZWRlZiBpbnQgKCpGVU5DX1RZUEUpICgp OwoKICAKICBGVU5DX1RZUEUgcGZ1bmMgPSBBPDE+Ojpmb288Mj47CgogIGludCB4ID0gcGZ1bmMo KTsKICAKCiAgIAogICAKCiAgcHJpbnRmKCIlZFxuIiwgeCk7CgogIHJldHVybiAwOwp9Owo=