This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
>Number: 2455 >Category: c++ >Synopsis: 'g++ A0439589.C' results in Internal error (core) in cc1plus >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Mon Apr 02 01:36:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Andreas Krakowczyk >Release: gcc-20010320 >Organization: >Environment: sparc-sun-solaris2.8 >Description: When compiling file A0439589.C, g++ reports g++: Internal error: Segmentation Fault (program cc1plus) Doesn't work with gcc-2.95.3 either. >How-To-Repeat: g++ -c A0439589.i >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="A0439589.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="A0439589.i" IyA3ICJBMDQzOTU4OS5DIgojaWRlbnQgIiVXJSBvZiAlRSUiCgojIDEgIi9ob21lNS9rcmFrb3cv Z251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9p bmNsdWRlL2crKy9pb3N0cmVhbS5oIiAxIDMKIyAzMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwu MjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysr L2lvc3RyZWFtLmgiIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9z dHJlYW0uaCIgMSAzCiMgMzggIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9pb3N0 cmVhbS5oIiAzCgojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJp czIuOC9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwu MjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysr L3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysrY29uZmlnLmgiIDMKIyAxICIvaG9tZTUva3Jh a293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9vc19kZWZpbmVzLmgiIDEg MwojIDM1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0 cy9jKytjb25maWcuaCIgMiAzCiMgNDAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIw L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0 ZF9pb3N0cmVhbS5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRf b3N0cmVhbS5oIiAxIDMKIyAzOCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX29z dHJlYW0uaCIgMwoKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zLmgi IDEgMwojIDM4ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zLmgiIDMKCiMg MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyAzOCAi L2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lvc2Z3ZC5oIiAzCgojIDEgIi9ob21l NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2MrK2NvbmZpZy5o IiAxIDMKIyA0MCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lvc2Z3ZC5oIiAy IDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3djaGFyLmgiIDEgMwoj IDM5ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3djaGFyLmgiIDMKIyAxICIv aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jKytjb25m aWcuaCIgMSAzCiMgNDAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jd2NoYXIu aCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRkZWYuaCIg MSAzCiMgNDAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkZGVmLmgiIDMK IyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAxNDcgIi9ob21lNS9r cmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDE5OSAi L2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGludCBz aXplX3Q7CiMgNDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkZGVmLmgi IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpzaXpl X3Q7Cn0KIyA0MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2N3Y2hhci5oIiAy IDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGlvLmgiIDEgMwoj IDM5ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGlvLmgiIDMKIyAxICIv aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jKytjb25m aWcuaCIgMSAzCiMgNDAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkaW8u aCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRhcmcuaCIg MSAzCiMgNDAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkYXJnLmgiIDMK IyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMSAzIDQKIyA0MyAiL2hvbWU1L2ty YWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv My4wL2luY2x1ZGUvc3RkYXJnLmgiIDMgNAp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251 Y192YV9saXN0OwojIDkwICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMyA0CnR5cGVk ZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyA0MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwu MjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysr L2JpdHMvc3RkX2NzdGRhcmcuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OnZhX2xp c3Q7Cn0KIyA0MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRpby5oIiAy IDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMK IyA0MiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRpby5oIiAyIDMKIyA0 NCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRpby5oIiAzCiMgMSAiL2hv bWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzIDQKIyAxNCAiL2hvbWU1L2tyYWtvdy9nbnUv bG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1 ZGUvc3RkaW8uaCIgMyA0CiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RkYXJnLmgiIDEgMyA0 CiMgMTUgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CiMgMzQgIi9ob21lNS9r cmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc3RkaW8uaAkxLjc4 CTk5LzEyLzA4IFNNSSIKCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5o IiAxIDMgNAojIDQxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9pc28vc3RkaW9faXNvLmgiIDMgNAoj cHJhZ21hIGlkZW50ICJAKCMpc3RkaW9faXNvLmgJMS4yCTk5LzEwLzI1IFNNSSIKCgojIDEgIi9o b21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi44LzMuMC9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0CiMgMjIgIi9ob21l NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzMuMC9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDMgNAojcHJhZ21hIGlkZW50ICJA KCMpZmVhdHVyZV90ZXN0cy5oCTEuMTgJOTkvMDcvMjYgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUv c3lzL2lzYV9kZWZzLmgiIDEgMyA0CiMgOSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAz IDQKI3ByYWdtYSBpZGVudCAiQCgjKWlzYV9kZWZzLmgJMS4yMAk5OS8wNS8wNCBTTUkiCiMgMTU4 ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNApleHRlcm4gIkMiIHsKIyAzODAgIi91 c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMyA0Cn0KIyAyNSAiL2hvbWU1L2tyYWtvdy9nbnUv bG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1 ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsKIyAxOTAgIi9ob21l NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzMuMC9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDMgNAp9CiMgNDUgIi9ob21lNS9r cmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzMuMC9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lz L3ZhX2xpc3QuaCIgMSAzIDQKIyA5ICIvdXNyL2luY2x1ZGUvc3lzL3ZhX2xpc3QuaCIgMyA0CiNw cmFnbWEgaWRlbnQgIkAoIyl2YV9saXN0LmgJMS4xMgk5OS8wNS8wNCBTTUkiCiMgMjIgIi91c3Iv aW5jbHVkZS9zeXMvdmFfbGlzdC5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCnR5cGVkZWYgdm9pZCAq X192YV9saXN0OwoKCgoKCn0KIyA0NiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNvL3N0ZGlvX2lz by5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zdGRpb190YWcuaCIgMSAzIDQKIyA5ICIvdXNy L2luY2x1ZGUvc3RkaW9fdGFnLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc3RkaW9fdGFnLmgJ MS4zCTk4LzA0LzIwIFNNSSIKCgpleHRlcm4gIkMiIHsKIyAyMSAiL3Vzci9pbmNsdWRlL3N0ZGlv X3RhZy5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgRklMRSBfX0ZJTEU7CgoKCn0KIyA0NyAiL2hvbWU1 L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjgvMy4wL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9z dGRpb19pbXBsLmgiIDEgMyA0CiMgOSAiL3Vzci9pbmNsdWRlL3N0ZGlvX2ltcGwuaCIgMyA0CiNw cmFnbWEgaWRlbnQgIkAoIylzdGRpb19pbXBsLmgJMS44CTk5LzA2LzEwIFNNSSIKCiMgMSAiL3Vz ci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNAojIDEyICIvdXNyL2luY2x1ZGUvc3RkaW9f aW1wbC5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewoKCgoKCgoKdHlwZWRlZiBpbnQgc3NpemVfdDsK IyAzOCAiL3Vzci9pbmNsdWRlL3N0ZGlvX2ltcGwuaCIgMyA0CnN0cnVjdCBGSUxFCnsKCgoKCiAg ICAgICAgc3NpemVfdCBfY250OwogICAgICAgIHVuc2lnbmVkIGNoYXIgKl9wdHI7CgogICAgICAg IHVuc2lnbmVkIGNoYXIgKl9iYXNlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgX2ZsYWc7CiAgICAg ICAgdW5zaWduZWQgY2hhciBfZmlsZTsKICAgICAgICB1bnNpZ25lZCBfX29yaWVudGF0aW9uOjI7 CiAgICAgICAgdW5zaWduZWQgX19pb25vbG9jazoxOwogICAgICAgIHVuc2lnbmVkIF9fZmlsbGVy OjU7Cn07CgoKCgp9CiMgNDggIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIg MiAzIDQKIyA1OCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5oIiAzIDQKZXh0 ZXJuICJDIiB7CiMgNjggIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMyA0 CnR5cGVkZWYgbG9uZyBsb25nIF9fbG9uZ2xvbmdfdDsKIyA4NCAiL2hvbWU1L2tyYWtvdy9nbnUv bG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1 ZGUvaXNvL3N0ZGlvX2lzby5oIiAzIDQKdHlwZWRlZiBfX0ZJTEUgRklMRTsKIyA5NyAiL2hvbWU1 L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjgvMy4wL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5oIiAzIDQKdHlwZWRlZiBsb25nIGZwb3NfdDsK IyAxNTYgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMyA0CmV4dGVybiBf X0ZJTEUgX19pb2JbMjBdOwojIDE3MyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNvL3N0ZGlvX2lz by5oIiAzIDQKZXh0ZXJuIGludCByZW1vdmUoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCByZW5h bWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklMRSAqdG1wZmlsZSh2b2lk KTsKZXh0ZXJuIGNoYXIgKnRtcG5hbShjaGFyICopOwpleHRlcm4gaW50IGZjbG9zZShGSUxFICop OwpleHRlcm4gaW50IGZmbHVzaChGSUxFICopOwpleHRlcm4gRklMRSAqZm9wZW4oY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklMRSAqZnJlb3Blbihjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIHZvaWQgc2V0YnVmKEZJTEUgKiwgY2hhciAqKTsK ZXh0ZXJuIGludCBzZXR2YnVmKEZJTEUgKiwgY2hhciAqLCBpbnQsIHNpemVfdCk7CgpleHRlcm4g aW50IGZwcmludGYoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CgpleHRlcm4gaW50IGZzY2Fu ZihGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgcHJpbnRmKGNvbnN0IGNo YXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgc2NhbmYoY29uc3QgY2hhciAqLCAuLi4pOwoKZXh0ZXJu IGludCBzcHJpbnRmKGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwoKZXh0ZXJuIGludCBzc2Nh bmYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CmV4dGVybiBpbnQgdmZwcmludGYo RklMRSAqLCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCk7CmV4dGVybiBpbnQgdnByaW50Zihjb25z dCBjaGFyICosIF9fdmFfbGlzdCk7CmV4dGVybiBpbnQgdnNwcmludGYoY2hhciAqLCBjb25zdCBj aGFyICosIF9fdmFfbGlzdCk7CmV4dGVybiBpbnQgZmdldGMoRklMRSAqKTsKZXh0ZXJuIGNoYXIg KmZnZXRzKGNoYXIgKiwgaW50LCBGSUxFICopOwpleHRlcm4gaW50IGZwdXRjKGludCwgRklMRSAq KTsKZXh0ZXJuIGludCBmcHV0cyhjb25zdCBjaGFyICosIEZJTEUgKik7CgoKZXh0ZXJuIGludCBn ZXRjKEZJTEUgKik7CmV4dGVybiBpbnQgcHV0YyhpbnQsIEZJTEUgKik7CgoKCmV4dGVybiBpbnQg Z2V0Y2hhcih2b2lkKTsKZXh0ZXJuIGludCBwdXRjaGFyKGludCk7CgpleHRlcm4gY2hhciAqZ2V0 cyhjaGFyICopOwpleHRlcm4gaW50IHB1dHMoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCB1bmdl dGMoaW50LCBGSUxFICopOwpleHRlcm4gc2l6ZV90IGZyZWFkKHZvaWQgKiwgc2l6ZV90LCBzaXpl X3QsIEZJTEUgKik7CmV4dGVybiBzaXplX3QgZndyaXRlKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBz aXplX3QsIEZJTEUgKik7CmV4dGVybiBpbnQgZmdldHBvcyhGSUxFICosIGZwb3NfdCAqKTsKZXh0 ZXJuIGludCBmc2VlayhGSUxFICosIGxvbmcsIGludCk7CmV4dGVybiBpbnQgZnNldHBvcyhGSUxF ICosIGNvbnN0IGZwb3NfdCAqKTsKZXh0ZXJuIGxvbmcgZnRlbGwoRklMRSAqKTsKZXh0ZXJuIHZv aWQgcmV3aW5kKEZJTEUgKik7CgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIoRklMRSAqKTsKZXh0ZXJu IGludCBmZW9mKEZJTEUgKik7CmV4dGVybiBpbnQgZmVycm9yKEZJTEUgKik7CgpleHRlcm4gdm9p ZCBwZXJyb3IoY29uc3QgY2hhciAqKTsKCgpleHRlcm4gaW50IF9fZmlsYnVmKEZJTEUgKik7CmV4 dGVybiBpbnQgX19mbHNidWYoaW50LCBGSUxFICopOwojIDM0NSAiL2hvbWU1L2tyYWtvdy9nbnUv bG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1 ZGUvaXNvL3N0ZGlvX2lzby5oIiAzIDQKfQojIDM3ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4y MDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRp by5oIiAyIDMgNAojIDk4ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJu ICJDIiB7CgoKCgoKCnR5cGVkZWYgbG9uZyBvZmZfdDsKCgoKCgoKCnR5cGVkZWYgX19sb25nbG9u Z190IG9mZjY0X3Q7CiMgMTIzICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQKdHlw ZWRlZiBfX2xvbmdsb25nX3QgZnBvczY0X3Q7CiMgMTM0ICIvaG9tZTUva3Jha293L2dudS9sb2Nh bC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9z dGRpby5oIiAzIDQKdHlwZWRlZiBfX3ZhX2xpc3QgX19ub3RfdmFfbGlzdF9fOwojIDE1MSAiL2hv bWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiB1bnNpZ25lZCBjaGFyIF9zaWJ1 ZltdLCBfc29idWZbXTsKIyAxOTMgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNApl eHRlcm4gdW5zaWduZWQgY2hhciAqX2J1ZmVuZHRhYltdOwpleHRlcm4gRklMRSAqX2xhc3RidWY7 CiMgMjI1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGNoYXIgKnRt cG5hbV9yKGNoYXIgKik7CgoKCmV4dGVybiB2b2lkIHNldGJ1ZmZlcihGSUxFICosIGNoYXIgKiwg c2l6ZV90KTsKZXh0ZXJuIGludCBzZXRsaW5lYnVmKEZJTEUgKik7CgoKCgoKZXh0ZXJuIGludCBz bnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOwoKCgoKZXh0ZXJuIGlu dCB2c25wcmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3Qp OwojIDI1MCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBGSUxFICpm ZG9wZW4oaW50LCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqY3Rlcm1pZChjaGFyICopOwpl eHRlcm4gaW50IGZpbGVubyhGSUxFICopOwojIDI2MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwu MjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3Rk aW8uaCIgMyA0CmV4dGVybiB2b2lkIGZsb2NrZmlsZShGSUxFICopOwpleHRlcm4gaW50IGZ0cnls b2NrZmlsZShGSUxFICopOwpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZShGSUxFICopOwpleHRlcm4g aW50IGdldGNfdW5sb2NrZWQoRklMRSAqKTsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkKHZv aWQpOwpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQoaW50LCBGSUxFICopOwpleHRlcm4gaW50IHB1 dGNoYXJfdW5sb2NrZWQoaW50KTsKIyAyNzYgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0ZGlvLmgi IDMgNApleHRlcm4gRklMRSAqcG9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRl cm4gY2hhciAqY3VzZXJpZChjaGFyICopOwpleHRlcm4gY2hhciAqdGVtcG5hbShjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgZ2V0b3B0KGludCwgY2hhciAqY29uc3QgKiwg Y29uc3QgY2hhciAqKTsKCgoKZXh0ZXJuIGNoYXIgKm9wdGFyZzsKZXh0ZXJuIGludCBvcHRpbmQs IG9wdGVyciwgb3B0b3B0OwpleHRlcm4gaW50IGdldHcoRklMRSAqKTsKZXh0ZXJuIGludCBwdXR3 KGludCwgRklMRSAqKTsKZXh0ZXJuIGludCBwY2xvc2UoRklMRSAqKTsKCgoKCgoKCmV4dGVybiBp bnQgZnNlZWtvKEZJTEUgKiwgb2ZmX3QsIGludCk7CmV4dGVybiBvZmZfdCBmdGVsbG8oRklMRSAq KTsKIyAzMDUgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gRklMRSAq Zm9wZW42NChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFICpmcmVvcGVu NjQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUgKik7CmV4dGVybiBGSUxFICp0bXBm aWxlNjQodm9pZCk7CmV4dGVybiBpbnQgZmdldHBvczY0KEZJTEUgKiwgZnBvczY0X3QgKik7CmV4 dGVybiBpbnQgZnNldHBvczY0KEZJTEUgKiwgY29uc3QgZnBvczY0X3QgKik7CmV4dGVybiBpbnQg ZnNlZWtvNjQoRklMRSAqLCBvZmY2NF90LCBpbnQpOwpleHRlcm4gb2ZmNjRfdCBmdGVsbG82NChG SUxFICopOwojIDQxMiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0Cn0KIyA0NSAi L2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRpby5oIiAyIDMKIyA5NCAiL2hv bWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRpby5oIiAzCm5hbWVzcGFjZSBzdGQK ewogIHVzaW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsKCiAgZXh0ZXJuICJDIiBpbnQgcmVt b3ZlKGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGludCByZW5hbWUoY29uc3QgY2hhciosIGNv bnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIEZJTEUqIHRtcGZpbGUodm9pZCk7CiAgZXh0ZXJuICJD IiBjaGFyKiB0bXBuYW0oY2hhciopOwogIGV4dGVybiAiQyIgaW50IGZjbG9zZShGSUxFKik7CiAg ZXh0ZXJuICJDIiBpbnQgZmZsdXNoKEZJTEUqKTsKICBleHRlcm4gIkMiIEZJTEUqIGZvcGVuKGNv bnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBGSUxFKiBmcmVvcGVuKGNvbnN0 IGNoYXIqLCBjb25zdCBjaGFyKiwgRklMRSopOwogIGV4dGVybiAiQyIgdm9pZCBzZXRidWYoRklM RSosIGNoYXIqKTsKICBleHRlcm4gIkMiIGludCBzZXR2YnVmKEZJTEUqLCBjaGFyKiwgaW50LCBz aXplX3QpOwogIGV4dGVybiAiQyIgaW50IGZwcmludGYoRklMRSosIGNvbnN0IGNoYXIqLCAuLi4p OwogIGV4dGVybiAiQyIgaW50IGZzY2FuZihGSUxFKiwgY29uc3QgY2hhciosIC4uLik7CiAgZXh0 ZXJuICJDIiBpbnQgcHJpbnRmKGNvbnN0IGNoYXIqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50IHNj YW5mKGNvbnN0IGNoYXIqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50IHNucHJpbnRmKGNoYXIgKiwg c2l6ZV90LCBjb25zdCBjaGFyKiwgLi4uKTsKICBleHRlcm4gIkMiIGludCBzcHJpbnRmKGNoYXIg KiwgY29uc3QgY2hhciosIC4uLik7CiAgZXh0ZXJuICJDIiBpbnQgc3NjYW5mKGNvbnN0IGNoYXIq LCBjb25zdCBjaGFyKiwgLi4uKTsKICBleHRlcm4gIkMiIGludCB2ZnByaW50ZihGSUxFKiwgY29u c3QgY2hhciosIHZhX2xpc3QpOwogIGV4dGVybiAiQyIgaW50IHZmc2NhbmYoRklMRSosIGNvbnN0 IGNoYXIqLCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB2cHJpbnRmKGNvbnN0IGNoYXIqLCB2 YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB2c2NhbmYoY29uc3QgY2hhciosIHZhX2xpc3QpOwog IGV4dGVybiAiQyIgaW50IHZzbnByaW50ZihjaGFyKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgdmFf bGlzdCk7CiAgZXh0ZXJuICJDIiBpbnQgdnNwcmludGYoY2hhciosIGNvbnN0IGNoYXIqLCB2YV9s aXN0KTsKICBleHRlcm4gIkMiIGludCB2c3NjYW5mKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwg dmFfbGlzdCk7CiAgZXh0ZXJuICJDIiBpbnQgZmdldGMoRklMRSAqKTsKICBleHRlcm4gIkMiIGNo YXIgKmZnZXRzKGNoYXIqLCBpbnQsIEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBmcHV0YyhpbnQs IEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBmcHV0cyhjb25zdCBjaGFyKiwgRklMRSopOwogIGV4 dGVybiAiQyIgaW50IGdldGMoRklMRSopOwogIGV4dGVybiAiQyIgaW50IGdldGNoYXIodm9pZCk7 CiAgZXh0ZXJuICJDIiBjaGFyICpnZXRzKGNoYXIqKTsKICBleHRlcm4gIkMiIGludCBwdXRjKGlu dCwgRklMRSopOwogIGV4dGVybiAiQyIgaW50IHB1dGNoYXIoaW50KTsKICBleHRlcm4gIkMiIGlu dCBwdXRzKGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGludCB1bmdldGMoaW50LCBGSUxFKik7 CiAgZXh0ZXJuICJDIiBzaXplX3QgZnJlYWQodm9pZCosIHNpemVfdCwgc2l6ZV90LCBGSUxFKik7 CiAgZXh0ZXJuICJDIiBzaXplX3QgZndyaXRlKGNvbnN0IHZvaWQqLCBzaXplX3QsIHNpemVfdCwg RklMRSopOwogIGV4dGVybiAiQyIgaW50IGZnZXRwb3MoRklMRSosIGZwb3NfdCopOwogIGV4dGVy biAiQyIgaW50IGZzZWVrKEZJTEUqLCBsb25nIGludCwgaW50KTsKICBleHRlcm4gIkMiIGludCBm c2V0cG9zKEZJTEUqLCBjb25zdCBmcG9zX3QqKTsKICBleHRlcm4gIkMiIGxvbmcgaW50IGZ0ZWxs KEZJTEUqKTsKICBleHRlcm4gIkMiIHZvaWQgcmV3aW5kKEZJTEUqKTsKICBleHRlcm4gIkMiIHZv aWQgY2xlYXJlcnIoRklMRSopOwogIGV4dGVybiAiQyIgaW50IGZlb2YoRklMRSopOwogIGV4dGVy biAiQyIgaW50IGZlcnJvcihGSUxFKik7CiAgZXh0ZXJuICJDIiB2b2lkIHBlcnJvcihjb25zdCBj aGFyKik7Cn0KIyA0MiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2N3Y2hhci5o IiAyIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGFyZy5oIiAx IDMKIyA0MyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMK IyA0NiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2N3Y2hhci5oIiAzCiMgMSAi L2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjgvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMSAzIDQKIyAxOCAiL2hvbWU1L2tyYWtvdy9n bnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2lu Y2x1ZGUvd2NoYXIuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyl3Y2hhci5oCTEuMzMJOTkvMDgv MzAgU01JIgoKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDEgMyA0 CiMgMzAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMyA0CiNwcmFnbWEg aWRlbnQgIkAoIyl3Y2hhcl9pc28uaAkxLjIJOTkvMTEvMTAgU01JIgoKIyAxICIvaG9tZTUva3Jh a293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDMzICIvaG9tZTUva3Jha293 L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv aW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvX3Rh Zy5oIiAxIDMgNAojIDM0ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDIg MyA0CiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyX2ltcGwuaCIgMSAzIDQKIyA5ICIvdXNyL2luY2x1 ZGUvd2NoYXJfaW1wbC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXdjaGFyX2ltcGwuaAkxLjMJ OTkvMDcvMjYgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0CiMg MTIgIi91c3IvaW5jbHVkZS93Y2hhcl9pbXBsLmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CgoKCgp0 eXBlZGVmIHN0cnVjdCBfX21ic3RhdGVfdCB7CgoKCiAgICAgICAgaW50IF9fZmlsbGVyWzZdOwoK fSBfX21ic3RhdGVfdDsKCgoKfQojIDM1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMy MC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9pc28vd2NoYXJf aXNvLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2lzby90aW1lX2lzby5oIiAxIDMgNAojIDI4 ICIvdXNyL2luY2x1ZGUvaXNvL3RpbWVfaXNvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpdGlt ZV9pc28uaAkxLjEJOTkvMDgvMDkgU01JIgoKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4y MDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXMv ZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDMxICIvdXNyL2luY2x1ZGUvaXNvL3RpbWVfaXNvLmgi IDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgNTkgIi91c3IvaW5jbHVkZS9pc28vdGltZV9pc28uaCIg MyA0CnR5cGVkZWYgbG9uZyBjbG9ja190OwoKCgoKdHlwZWRlZiBsb25nIHRpbWVfdDsKCgoKCnN0 cnVjdCB0bSB7CiAgICAgICAgaW50IHRtX3NlYzsKICAgICAgICBpbnQgdG1fbWluOwogICAgICAg IGludCB0bV9ob3VyOwogICAgICAgIGludCB0bV9tZGF5OwogICAgICAgIGludCB0bV9tb247CiAg ICAgICAgaW50IHRtX3llYXI7CiAgICAgICAgaW50IHRtX3dkYXk7CiAgICAgICAgaW50IHRtX3lk YXk7CiAgICAgICAgaW50IHRtX2lzZHN0Owp9OwoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUoY29u c3Qgc3RydWN0IHRtICopOwpleHRlcm4gY2xvY2tfdCBjbG9jayh2b2lkKTsKZXh0ZXJuIGNoYXIg KmN0aW1lKGNvbnN0IHRpbWVfdCAqKTsKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSh0aW1lX3QsIHRp bWVfdCk7CmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZShjb25zdCB0aW1lX3QgKik7CmV4dGVybiBz dHJ1Y3QgdG0gKmxvY2FsdGltZShjb25zdCB0aW1lX3QgKik7CmV4dGVybiB0aW1lX3QgbWt0aW1l KHN0cnVjdCB0bSAqKTsKZXh0ZXJuIHRpbWVfdCB0aW1lKHRpbWVfdCAqKTsKZXh0ZXJuIHNpemVf dCBzdHJmdGltZShjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0g Kik7CiMgMTEzICIvdXNyL2luY2x1ZGUvaXNvL3RpbWVfaXNvLmgiIDMgNAp9CiMgMzYgIi9ob21l NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzMuMC9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMiAzIDQKCgoKCiMgMSAiL2hvbWU1L2ty YWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv My4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzIDQKIyA0MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwu MjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNv L3djaGFyX2lzby5oIiAyIDMgNAoKCgojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2N0eXBlLmgi IDEgMyA0CiMgMjUgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2N0eXBlLmgiIDMgNAojcHJhZ21hIGlk ZW50ICJAKCMpY3R5cGUuaAkxLjMzCTk5LzA4LzEwIFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL2lz by9jdHlwZV9pc28uaCIgMSAzIDQKIyAyOCAiL3Vzci9pbmNsdWRlL2lzby9jdHlwZV9pc28uaCIg MyA0CiNwcmFnbWEgaWRlbnQgIkAoIyljdHlwZV9pc28uaAkxLjEJOTkvMDgvMDkgU01JIgoKIyAx ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDMxICIv dXNyL2luY2x1ZGUvaXNvL2N0eXBlX2lzby5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDYzICIv dXNyL2luY2x1ZGUvaXNvL2N0eXBlX2lzby5oIiAzIDQKZXh0ZXJuIGludCBpc2FsbnVtKGludCk7 CmV4dGVybiBpbnQgaXNhbHBoYShpbnQpOwpleHRlcm4gaW50IGlzY250cmwoaW50KTsKZXh0ZXJu IGludCBpc2RpZ2l0KGludCk7CmV4dGVybiBpbnQgaXNncmFwaChpbnQpOwpleHRlcm4gaW50IGlz bG93ZXIoaW50KTsKZXh0ZXJuIGludCBpc3ByaW50KGludCk7CmV4dGVybiBpbnQgaXNwdW5jdChp bnQpOwpleHRlcm4gaW50IGlzc3BhY2UoaW50KTsKZXh0ZXJuIGludCBpc3VwcGVyKGludCk7CmV4 dGVybiBpbnQgaXN4ZGlnaXQoaW50KTsKCgoKCgoKCmV4dGVybiBpbnQgdG9sb3dlcihpbnQpOwpl eHRlcm4gaW50IHRvdXBwZXIoaW50KTsKCgoKCgpleHRlcm4gdW5zaWduZWQgY2hhciBfX2N0eXBl W107CmV4dGVybiB1bnNpZ25lZCBpbnQgKl9fY3R5cGVfbWFzazsKZXh0ZXJuIGludCAqX190cmFu c191cHBlcjsKZXh0ZXJuIGludCAqX190cmFuc19sb3dlcjsKIyAxODYgIi91c3IvaW5jbHVkZS9p c28vY3R5cGVfaXNvLmgiIDMgNAp9CiMgMjggIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2N0eXBlLmgi IDIgMyA0CiMgNTAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2N0eXBlLmgiIDMgNApleHRlcm4gIkMi IHsKCgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaShpbnQpOwpleHRlcm4gaW50IHRvYXNjaWkoaW50 KTsKZXh0ZXJuIGludCBfdG9sb3dlcihpbnQpOwpleHRlcm4gaW50IF90b3VwcGVyKGludCk7CiMg OTkgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2N0eXBlLmgiIDMgNAp9CiMgNDUgIi9ob21lNS9rcmFr b3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu MC9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMiAzIDQKIyAxICIvaG9tZTUva3Jha293L2dudS9s b2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzIDQKIyA0NiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNvL3djaGFyX2lz by5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy92YV9saXN0LmgiIDEgMyA0CiMgNDkg Ii9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMiAzIDQKCgpleHRlcm4gIkMi IHsKIyA3NiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNvL3djaGFyX2lzby5oIiAzIDQKdHlwZWRl ZiBsb25nIHdpbnRfdDsKIyAxMTMgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby93Y2hhcl9pc28u aCIgMyA0CnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90OwojIDEyNCAiL2hvbWU1L2tyYWtv dy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w L2luY2x1ZGUvaXNvL3djaGFyX2lzby5oIiAzIDQKZXh0ZXJuIHdpbnRfdCBmZ2V0d2MoX19GSUxF ICopOwpleHRlcm4gd2NoYXJfdCAqZmdldHdzKHdjaGFyX3QgKiwgaW50LCBfX0ZJTEUgKik7CmV4 dGVybiB3aW50X3QgZnB1dHdjKHdpbnRfdCwgX19GSUxFICopOwpleHRlcm4gaW50IGZwdXR3cyhj b25zdCB3Y2hhcl90ICosIF9fRklMRSAqKTsKZXh0ZXJuIHdpbnRfdCB1bmdldHdjKHdpbnRfdCwg X19GSUxFICopOwpleHRlcm4gd2ludF90IGdldHdjKF9fRklMRSAqKTsKZXh0ZXJuIHdpbnRfdCBn ZXR3Y2hhcih2b2lkKTsKZXh0ZXJuIHdpbnRfdCBwdXR3Yyh3aW50X3QsIF9fRklMRSAqKTsKZXh0 ZXJuIHdpbnRfdCBwdXR3Y2hhcih3aW50X3QpOwpleHRlcm4gZG91YmxlIHdjc3RvZChjb25zdCB3 Y2hhcl90ICosIHdjaGFyX3QgKiopOwpleHRlcm4gbG9uZyB3Y3N0b2woY29uc3Qgd2NoYXJfdCAq LCB3Y2hhcl90ICoqLCBpbnQpOwpleHRlcm4gdW5zaWduZWQgbG9uZyB3Y3N0b3VsKGNvbnN0IHdj aGFyX3QgKiwgd2NoYXJfdCAqKiwgaW50KTsKZXh0ZXJuIHdjaGFyX3QgKndjc2NhdCh3Y2hhcl90 ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiBpbnQgd2NzY21wKGNvbnN0IHdjaGFyX3QgKiwg Y29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIGludCB3Y3Njb2xsKGNvbnN0IHdjaGFyX3QgKiwgY29u c3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIHdjaGFyX3QgKndjc2NweSh3Y2hhcl90ICosIGNvbnN0IHdj aGFyX3QgKik7CmV4dGVybiBzaXplX3Qgd2NzY3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdj aGFyX3QgKik7CmV4dGVybiBzaXplX3Qgd2NzbGVuKGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiB3 Y2hhcl90ICp3Y3NuY2F0KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwpleHRl cm4gaW50IHdjc25jbXAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7 CmV4dGVybiB3Y2hhcl90ICp3Y3NuY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXpl X3QpOwpleHRlcm4gc2l6ZV90IHdjc3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3Qg Kik7CmV4dGVybiBzaXplX3Qgd2NzeGZybSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6 ZV90KTsKIyAxNjcgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMyA0CmV4 dGVybiB3Y2hhcl90ICp3Y3NjaHIoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKZXh0ZXJuIHdj aGFyX3QgKndjc3BicmsoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpleHRlcm4g d2NoYXJfdCAqd2NzcmNocihjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpOwojIDE4MyAiL2hvbWU1 L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjgvMy4wL2luY2x1ZGUvaXNvL3djaGFyX2lzby5oIiAzIDQKZXh0ZXJuIHdjaGFyX3QgKl9fd2Nz dG9rX3hwZzUod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiopOwpleHRlcm4g c2l6ZV90IF9fd2NzZnRpbWVfeHBnNSh3Y2hhcl90ICosIHNpemVfdCwgY29uc3Qgd2NoYXJfdCAq LAogICAgICAgIGNvbnN0IHN0cnVjdCB0bSAqKTsKIyAxOTQgIi9ob21lNS9rcmFrb3cvZ251L2xv Y2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl L2lzby93Y2hhcl9pc28uaCIgMyA0CmV4dGVybiB3aW50X3QgYnRvd2MoaW50KTsKZXh0ZXJuIGlu dCBmd3ByaW50ZihfX0ZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwpleHRlcm4gaW50IGZ3 c2NhbmYoX19GSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKZXh0ZXJuIGludCBmd2lkZShf X0ZJTEUgKiwgaW50KTsKZXh0ZXJuIGludCBtYnNpbml0KGNvbnN0IG1ic3RhdGVfdCAqKTsKZXh0 ZXJuIHNpemVfdCBtYnJsZW4oY29uc3QgY2hhciAqLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsKZXh0 ZXJuIHNpemVfdCBtYnJ0b3djKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIG1ic3Rh dGVfdCAqKTsKZXh0ZXJuIHNpemVfdCBtYnNydG93Y3Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICoq LCBzaXplX3QsIG1ic3RhdGVfdCAqKTsKZXh0ZXJuIGludCBzd3ByaW50Zih3Y2hhcl90ICosIHNp emVfdCwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwpleHRlcm4gaW50IHN3c2NhbmYoY29uc3Qgd2No YXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7CmV4dGVybiBpbnQgdmZ3cHJpbnRmKF9fRklM RSAqLCBjb25zdCB3Y2hhcl90ICosIF9fdmFfbGlzdCk7CmV4dGVybiBpbnQgdndwcmludGYoY29u c3Qgd2NoYXJfdCAqLCBfX3ZhX2xpc3QpOwpleHRlcm4gaW50IHZzd3ByaW50Zih3Y2hhcl90ICos IHNpemVfdCwgY29uc3Qgd2NoYXJfdCAqLCBfX3ZhX2xpc3QpOwpleHRlcm4gc2l6ZV90IHdjcnRv bWIoY2hhciAqLCB3Y2hhcl90LCBtYnN0YXRlX3QgKik7CmV4dGVybiBzaXplX3Qgd2NzcnRvbWJz KGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7CmV4dGVybiBp bnQgd2N0b2Iod2ludF90KTsKZXh0ZXJuIGludCB3bWVtY21wKGNvbnN0IHdjaGFyX3QgKiwgY29u c3Qgd2NoYXJfdCAqLCBzaXplX3QpOwpleHRlcm4gd2NoYXJfdCAqd21lbWNweSh3Y2hhcl90ICos IGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3ZlKHdjaGFy X3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwpleHRlcm4gd2NoYXJfdCAqd21lbXNldCh3 Y2hhcl90ICosIHdjaGFyX3QsIHNpemVfdCk7CmV4dGVybiBpbnQgd3ByaW50Zihjb25zdCB3Y2hh cl90ICosIC4uLik7CmV4dGVybiBpbnQgd3NjYW5mKGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKIyAy MzAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMyA0CmV4dGVybiB3Y2hh cl90ICp3Y3NzdHIoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpleHRlcm4gd2No YXJfdCAqd21lbWNocihjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QsIHNpemVfdCk7CiMgMzI5ICIv aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOC8zLjAvaW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDMgNApleHRlcm4gd2ludF90IF9f ZmdldHdjX3hwZzUoX19GSUxFICopOwpleHRlcm4gd2ludF90IF9fZ2V0d2NfeHBnNShfX0ZJTEUg Kik7CmV4dGVybiB3aW50X3QgX19nZXR3Y2hhcl94cGc1KHZvaWQpOwpleHRlcm4gd2ludF90IF9f ZnB1dHdjX3hwZzUod2ludF90LCBfX0ZJTEUgKik7CmV4dGVybiB3aW50X3QgX19wdXR3Y194cGc1 KHdpbnRfdCwgX19GSUxFICopOwpleHRlcm4gd2ludF90IF9fcHV0d2NoYXJfeHBnNSh3aW50X3Qp OwpleHRlcm4gd2NoYXJfdCAqX19mZ2V0d3NfeHBnNSh3Y2hhcl90ICosIGludCwgX19GSUxFICop OwpleHRlcm4gaW50IF9fZnB1dHdzX3hwZzUoY29uc3Qgd2NoYXJfdCAqLCBfX0ZJTEUgKik7CmV4 dGVybiB3aW50X3QgX191bmdldHdjX3hwZzUod2ludF90LCBfX0ZJTEUgKik7CiMgMzY3ICIvaG9t ZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8zLjAvaW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDMgNAp9CiMgMjEgIi9ob21lNS9rcmFr b3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu MC9pbmNsdWRlL3djaGFyLmgiIDIgMyA0CiMgOTAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIw MDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3djaGFy LmgiIDMgNApleHRlcm4gIkMiIHsKCgoKCgp0eXBlZGVmIGludCB3Y3R5cGVfdDsKCgoKCgoKZXh0 ZXJuIGludCBpc3dhbHBoYSh3aW50X3QpOwpleHRlcm4gaW50IGlzd3VwcGVyKHdpbnRfdCk7CmV4 dGVybiBpbnQgaXN3bG93ZXIod2ludF90KTsKZXh0ZXJuIGludCBpc3dkaWdpdCh3aW50X3QpOwpl eHRlcm4gaW50IGlzd3hkaWdpdCh3aW50X3QpOwpleHRlcm4gaW50IGlzd2FsbnVtKHdpbnRfdCk7 CmV4dGVybiBpbnQgaXN3c3BhY2Uod2ludF90KTsKZXh0ZXJuIGludCBpc3dwdW5jdCh3aW50X3Qp OwpleHRlcm4gaW50IGlzd3ByaW50KHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3Z3JhcGgod2ludF90 KTsKZXh0ZXJuIGludCBpc3djbnRybCh3aW50X3QpOwpleHRlcm4gaW50IGlzd2N0eXBlKHdpbnRf dCwgd2N0eXBlX3QpOwpleHRlcm4gd2ludF90IHRvd2xvd2VyKHdpbnRfdCk7CmV4dGVybiB3aW50 X3QgdG93dXBwZXIod2ludF90KTsKZXh0ZXJuIHdjaGFyX3QgKndjc3djcyhjb25zdCB3Y2hhcl90 ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiBpbnQgd2Nzd2lkdGgoY29uc3Qgd2NoYXJfdCAq LCBzaXplX3QpOwpleHRlcm4gaW50IHdjd2lkdGgoY29uc3Qgd2NoYXJfdCk7CmV4dGVybiB3Y3R5 cGVfdCB3Y3R5cGUoY29uc3QgY2hhciAqKTsKIyAxNDkgIi9ob21lNS9rcmFrb3cvZ251L2xvY2Fs LjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3dj aGFyLmgiIDMgNAp9CiMgNDcgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jd2No YXIuaCIgMiAzCiMgNjIgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jd2NoYXIu aCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1ic3RhdGVfdDsKfQojIDQxICIvaG9tZTUv a3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu OC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zZndkLmgiIDIgMwojIDEgIi9ob21lNS9rcmFr b3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu MC9pbmNsdWRlL2crKy9iaXRzL3N0cmluZ2Z3ZC5oIiAxIDMKIyAzOCAiL2hvbWU1L2tyYWtvdy9n bnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2lu Y2x1ZGUvZysrL2JpdHMvc3RyaW5nZndkLmgiIDMKCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9j YWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUv ZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIvaG9t ZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdHJpbmdmd2QuaCIgMiAzCgpuYW1lc3BhY2Ugc3Rk CnsKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM7CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRvcjsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwK ICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFz cyBiYXNpY19zdHJpbmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+IHN0cmluZzsKCgoK fQojIDQyICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zZndkLmgiIDIgMwoj IDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0 ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL2hv bWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMy4wL2luY2x1ZGUvZysrL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvaG9t ZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBz dGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9f dGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7 CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19s b2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJy b3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChj b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hh ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p ZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5k ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFp bHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNDMgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIw MDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9i aXRzL3N0ZF9pb3Nmd2QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8PiBjbGFz cyBjaGFyX3RyYWl0czxjaGFyPjsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3M7 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh aXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmOwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAg IGNsYXNzIGJhc2ljX2lzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmVh bTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90 cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAg ICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3Mg YmFzaWNfc3RyaW5nYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9 IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D aGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgog ICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBl bmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdz dHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNo YXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZjsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+ CiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19v ZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0g Y2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19mc3RyZWFtOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ ID4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mg b3N0cmVhbWJ1Zl9pdGVyYXRvcjsKCgoKICBjbGFzcyBpb3NfYmFzZTsKCgogIHRlbXBsYXRlPGNs YXNzIF9TdGF0ZT4gc3RydWN0IGZwb3M7CgoKCgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBz dHJlYW1wb3M7CgoKCgoKICB0eXBlZGVmIGJhc2ljX2lvczxjaGFyPiBpb3M7CiAgdHlwZWRlZiBi YXNpY19zdHJlYW1idWY8Y2hhcj4gc3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxj aGFyPiBpc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBvc3RyZWFtOwogIHR5 cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJp bmdidWY8Y2hhcj4gc3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFy PiBpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPiBvc3Ry aW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0cmluZ3N0cmVh bTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2lj X2lmc3RyZWFtPGNoYXI+IGlmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08Y2hhcj4g b2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZzdHJlYW07CiMgMTQ3ICIv aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zZndkLmgiIDMKfQojIDQwICIvaG9t ZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi9ob21lNS9rcmFr b3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu MC9pbmNsdWRlL2crKy9leGNlcHRpb24iIDEgMwojIDM0ICIvaG9tZTUva3Jha293L2dudS9sb2Nh bC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9n KysvZXhjZXB0aW9uIiAzCiNwcmFnbWEgaW50ZXJmYWNlICJleGNlcHRpb24iCgpleHRlcm4gIkMr KyIgewoKbmFtZXNwYWNlIHN0ZAp7CiAgY2xhc3MgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAg IGV4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5leGNlcHRpb24oKSB0aHJvdygp IHsgfQogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoK ICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAg ICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmJhZF9leGNlcHRpb24o KSB0aHJvdygpIHsgfQogIH07CgogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAo KTsKICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKICB0ZXJtaW5hdGVf aGFuZGxlciBzZXRfdGVybWluYXRlKHRlcm1pbmF0ZV9oYW5kbGVyKSB0aHJvdygpOwogIHZvaWQg dGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKICB1bmV4cGVjdGVk X2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9oYW5kbGVyKSB0aHJvdygpOwogIHZv aWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCiAgYm9vbCB1 bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9Cgp9CiMgNDEgIi9ob21lNS9rcmFrb3cvZ251 L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs dWRlL2crKy9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwu MjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysr L2JpdHMvY2hhcl90cmFpdHMuaCIgMSAzCiMgMzggIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIw MDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9i aXRzL2NoYXJfdHJhaXRzLmgiIDMKCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAz MjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMv c3RkX2N3Y2hhci5oIiAxIDMKIyA0MCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvY2hh cl90cmFpdHMuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nz dHJpbmcuaCIgMSAzCiMgMzkgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3Ry aW5nLmgiIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMy LjgvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIw MDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9i aXRzL3N0ZF9jc3RyaW5nLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRz L3N0ZF9jc3RkZGVmLmgiIDEgMwojIDQxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMy MC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9z dGRfY3N0cmluZy5oIiAyIDMKIyA0MyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rk X2NzdHJpbmcuaCIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0cmluZy5oIiAxIDMgNAoj IDI1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAo IylzdHJpbmcuaAkxLjI0CTk5LzA4LzEwIFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL2lzby9zdHJp bmdfaXNvLmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS9pc28vc3RyaW5nX2lzby5oIiAzIDQK I3ByYWdtYSBpZGVudCAiQCgjKXN0cmluZ19pc28uaAkxLjIJOTkvMTEvMDkgU01JIgoKCiMgMSAi L2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQKIyAzMiAiL3Vz ci9pbmNsdWRlL2lzby9zdHJpbmdfaXNvLmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgNjAgIi91 c3IvaW5jbHVkZS9pc28vc3RyaW5nX2lzby5oIiAzIDQKZXh0ZXJuIGludCBtZW1jbXAoY29uc3Qg dm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CmV4dGVybiB2b2lkICptZW1jcHkodm9pZCAq LCBjb25zdCB2b2lkICosIHNpemVfdCk7CmV4dGVybiB2b2lkICptZW1tb3ZlKHZvaWQgKiwgY29u c3Qgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCAqbWVtc2V0KHZvaWQgKiwgaW50LCBzaXpl X3QpOwpleHRlcm4gY2hhciAqc3RyY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGlu dCBzdHJjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqc3RyY3B5 KGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBzdHJjb2xsKGNvbnN0IGNoYXIgKiwg Y29uc3QgY2hhciAqKTsKZXh0ZXJuIHNpemVfdCBzdHJjc3BuKGNvbnN0IGNoYXIgKiwgY29uc3Qg Y2hhciAqKTsKZXh0ZXJuIGNoYXIgKnN0cmVycm9yKGludCk7CmV4dGVybiBzaXplX3Qgc3RybGVu KGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJuY2F0KGNoYXIgKiwgY29uc3QgY2hhciAq LCBzaXplX3QpOwpleHRlcm4gaW50IHN0cm5jbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICos IHNpemVfdCk7CmV4dGVybiBjaGFyICpzdHJuY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXpl X3QpOwpleHRlcm4gc2l6ZV90IHN0cnNwbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4 dGVybiBjaGFyICpzdHJ0b2soY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gc2l6ZV90IHN0 cnhmcm0oY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiMgMTEyICIvdXNyL2luY2x1ZGUv aXNvL3N0cmluZ19pc28uaCIgMyA0CmV4dGVybiB2b2lkICptZW1jaHIoY29uc3Qgdm9pZCAqLCBp bnQsIHNpemVfdCk7CmV4dGVybiBjaGFyICpzdHJjaHIoY29uc3QgY2hhciAqLCBpbnQpOwpleHRl cm4gY2hhciAqc3RycGJyayhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFy ICpzdHJyY2hyKGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJuIGNoYXIgKnN0cnN0cihjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKik7CiMgMTUxICIvdXNyL2luY2x1ZGUvaXNvL3N0cmluZ19pc28u aCIgMyA0Cn0KIyAyOCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RyaW5nLmgiIDIgMyA0CiMgNjAg Ii9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0cmluZy5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCgoKCmV4 dGVybiBjaGFyICpzdHJ0b2tfcihjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKik7CgoKCgpl eHRlcm4gdm9pZCAqbWVtY2NweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwoK CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbChpbnQpOwpleHRlcm4gaW50IGZmcyhpbnQpOwpleHRl cm4gaW50IHN0cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50 IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4g c2l6ZV90IHN0cmxjcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBzaXpl X3Qgc3RybGNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKCgoKCgpleHRlcm4gY2hh ciAqc3RyZHVwKGNvbnN0IGNoYXIgKik7CiMgMTIyICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4y MDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdHJp bmcuaCIgMyA0Cn0KIyA0NCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdHJp bmcuaCIgMiAzCiMgNjkgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RyaW5n LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgZXh0ZXJuICJDIiB2b2lkKiBtZW1jcHkodm9pZCosIGNv bnN0IHZvaWQqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgdm9pZCogbWVtbW92ZSh2b2lkKiwgY29u c3Qgdm9pZCosIHNpemVfdCk7CiAgZXh0ZXJuICJDIiBjaGFyKiBzdHJjcHkoY2hhciosIGNvbnN0 IGNoYXIqKTsKICBleHRlcm4gIkMiIGNoYXIqIHN0cm5jcHkoY2hhciosIGNvbnN0IGNoYXIqLCBz aXplX3QpOwogIGV4dGVybiAiQyIgY2hhciogc3RyY2F0KGNoYXIqLCBjb25zdCBjaGFyKik7CiAg ZXh0ZXJuICJDIiBjaGFyKiBzdHJuY2F0KGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBl eHRlcm4gIkMiIGludCBtZW1jbXAoY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3QpOwog IGV4dGVybiAiQyIgaW50IHN0cmNtcChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogIGV4dGVy biAiQyIgaW50IHN0cmNvbGwoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMi IGludCBzdHJuY21wKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4g IkMiIHNpemVfdCBzdHJ4ZnJtKGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4g IkMiIHZvaWQqIG1lbWNocihjb25zdCB2b2lkKiwgaW50LCBzaXplX3QpOwogIGV4dGVybiAiQyIg Y2hhciogc3RyY2hyKGNvbnN0IGNoYXIqLCBpbnQpOwogIGV4dGVybiAiQyIgc2l6ZV90IHN0cmNz cG4oY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGNoYXIqIHN0cnBicmso Y29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGNoYXIqIHN0cnJjaHIoY29u c3QgY2hhciosIGludCk7CiAgZXh0ZXJuICJDIiBzaXplX3Qgc3Ryc3BuKGNvbnN0IGNoYXIqLCBj b25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBjaGFyKiBzdHJzdHIoY29uc3QgY2hhciosIGNvbnN0 IGNoYXIqKTsKICBleHRlcm4gIkMiIGNoYXIqIHN0cnRvayhjaGFyKiwgY29uc3QgY2hhciopOwog IGV4dGVybiAiQyIgdm9pZCogbWVtc2V0KHZvaWQqLCBpbnQsIHNpemVfdCk7CiAgZXh0ZXJuICJD IiBjaGFyKiBzdHJlcnJvcihpbnQpOwogIGV4dGVybiAiQyIgc2l6ZV90IHN0cmxlbihjb25zdCBj aGFyKik7Cn0KIyA0MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvY2hhcl90cmFpdHMu aCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvZnBvcy5oIiAxIDMKIyAz OCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvZnBvcy5oIiAzCgoKCgojIDEgIi9ob21l NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2MrK2lvLmgiIDEg MwojIDM1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0 cy9jKytpby5oIiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzIDQKIyAz NiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysr aW8uaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzcg Ii9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2MrK2lv LmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJpczIu OC9iaXRzL2MrK3RocmVhZHMuaCIgMSAzCiMgNDggIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIw MDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9z cGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2MrK3RocmVhZHMuaCIgMwpuYW1lc3BhY2Ugc3RkIHsK CiAgc3RydWN0IF9fbnVsbF9tdXRleHQgeyB9OwogIHR5cGVkZWYgX19udWxsX211dGV4dCBfX211 dGV4dF90eXBlOwoKfQojIDM4ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNv bGFyaXMyLjgvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0eXBlZGVmIGxv bmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7CgoKCgogIHR5cGVk ZWYgZnBvc190IF9fY19zdHJlYW1wb3M7CgoKCgogIHR5cGVkZWYgaW50IF9fY19sb2NrOwoKCgoK ICB0eXBlZGVmIEZJTEUgX19jX2ZpbGVfdHlwZTsKCgogIHN0cnVjdCBfX2lvc19mbGFncwogIHsK ICAgIHR5cGVkZWYgc2hvcnQgX19pbnRfdHlwZTsKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19ib29sYWxwaGEgPSAweDAwMDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19k ZWMgPSAweDAwMDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19maXhlZCA9IDB4MDAw NDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2hleCA9IDB4MDAwODsKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX2ludGVybmFsID0gMHgwMDEwOwogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1NfbGVmdCA9IDB4MDAyMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl IF9TX29jdCA9IDB4MDA0MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3JpZ2h0ID0g MHgwMDgwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2NpZW50aWZpYyA9IDB4MDEw MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3diYXNlID0gMHgwMjAwOwogICAg c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvaW50ID0gMHgwNDAwOwogICAgc3RhdGlj IGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvcyA9IDB4MDgwMDsKICAgIHN0YXRpYyBjb25zdCBf X2ludF90eXBlIF9TX3NraXB3cyA9IDB4MTAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl IF9TX3VuaXRidWYgPSAweDIwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191cHBl cmNhc2UgPSAweDQwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hZGp1c3RmaWVs ZCA9IDB4MDAyMCB8IDB4MDA4MCB8IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl IF9TX2Jhc2VmaWVsZCA9IDB4MDAwMiB8IDB4MDA0MCB8IDB4MDAwODsKICAgIHN0YXRpYyBjb25z dCBfX2ludF90eXBlIF9TX2Zsb2F0ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7CgoKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX2JhZGJpdCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19p bnRfdHlwZSBfU19lb2ZiaXQgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf ZmFpbGJpdCA9IDB4MDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FwcCA9IDB4 MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hdGUgPSAweDAyOwogICAgc3RhdGlj IGNvbnN0IF9faW50X3R5cGUgX1NfYmluID0gMHgwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90 eXBlIF9TX2luID0gMHgwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX291dCA9IDB4 MTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU190cnVuYyA9IDB4MjA7CiAgfTsKfQoj IDQzICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9mcG9zLmgiIDIgMwoKbmFtZXNwYWNl IHN0ZCB7CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBmcG9zCiAg ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90eXBlOwoKICAg IHByaXZhdGU6CiAgICAgIF9fc3RhdGVfdHlwZSBfTV9zdDsKICAgICAgc3RyZWFtb2ZmIF9NX29m ZjsKCiAgICBwdWJsaWM6CiAgICAgIF9fc3RhdGVfdHlwZQogICAgICBzdGF0ZSgpIGNvbnN0IHsg cmV0dXJuIF9NX3N0OyB9CgogICAgICB2b2lkCiAgICAgIHN0YXRlKF9fc3RhdGVfdHlwZSBfX3N0 KSB7IF9NX3N0ID0gX19zdDsgfQoKCgogICAgICBmcG9zKCk6IF9NX3N0KF9fc3RhdGVfdHlwZSgp KSwgX01fb2ZmKHN0cmVhbW9mZigpKSB7IH0KCiAgICAgIGZwb3Moc3RyZWFtb2ZmIF9fb2ZmLCBf X3N0YXRlX3R5cGUgX19zdCA9IF9fc3RhdGVfdHlwZSgpKQogICAgICA6IF9NX3N0KF9fc3QpLCBf TV9vZmYoX19vZmYpIHsgfQoKICAgICAgb3BlcmF0b3Igc3RyZWFtb2ZmKCkgY29uc3QgeyByZXR1 cm4gX01fb2ZmOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvcis9KHN0cmVhbW9mZiBfX29m ZikgeyBfTV9vZmYgKz0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcyYKICAgICAg b3BlcmF0b3ItPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmIC09IF9fb2ZmOyByZXR1cm4gKnRo aXM7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3I9PShjb25zdCBmcG9zJiBfX3BvcykgY29u c3QgeyByZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQoKICAgICAgYm9vbAogICAgICBv cGVyYXRvciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdCB7IHJldHVybiBfTV9vZmYgIT0gX19w b3MuX01fb2ZmOyB9CgogICAgICBzdHJlYW1vZmYKICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7 IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2Zm IF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf U3RhdGU+CiAgICBpbmxpbmUgZnBvczxfU3RhdGU+CiAgICBvcGVyYXRvcisoY29uc3QgZnBvczxf U3RhdGU+JiBfX3Bvcywgc3RyZWFtb2ZmIF9fb2ZmKQogICAgewogICAgICBmcG9zPF9TdGF0ZT4g dChfX3Bvcyk7CiAgICAgIHJldHVybiB0ICs9IF9fb2ZmOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfU3RhdGU+CiAgICBpbmxpbmUgZnBvczxfU3RhdGU+CiAgICBvcGVyYXRvci0oY29uc3Qg ZnBvczxfU3RhdGU+JiBfX3Bvcywgc3RyZWFtb2ZmIF9fb2ZmKQogICAgewogICAgICBmcG9zPF9T dGF0ZT4gdChfX3Bvcyk7CiAgICAgIHJldHVybiB0IC09IF9fb2ZmOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfU3RhdGU+CiAgICBpbmxpbmUgc3RyZWFtb2ZmCiAgICBvcGVyYXRvci0oY29u c3QgZnBvczxfU3RhdGU+JiBfX3BvczEsIGNvbnN0IGZwb3M8X1N0YXRlPiYgX19wb3MyKQogICAg eyByZXR1cm4gX19wb3MxLl9NX3Bvc2l0aW9uKCkgLSBfX3BvczIuX01fcG9zaXRpb24oKTsgfQoK fQojIDQyICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMK Cm5hbWVzcGFjZSBzdGQgewoKCgoKCgoKICAgIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVh bXBvczsKIyA2MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvY2hhcl90cmFpdHMuaCIg MwogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0cwogICAgewog ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICB0eXBlZGVmIHVuc2lnbmVkIGxv bmcgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBl ZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlw ZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0 IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJv b2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIp CiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAg bHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsg cmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29u c3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAg ICAgIHsKICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQogICAg ICAgICAgaWYgKCFlcShfX3MxW19faV0sIF9fczJbX19pXSkpCiAgICAgICAgICAgIHJldHVybiBs dChfX3MxW19faV0sIF9fczJbX19pXSkgPyAtMSA6IDE7CiAgICAgICAgcmV0dXJuIDA7CiAgICAg IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19z KQogICAgICB7CiAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7CiAgICAgICAgd2hp bGUgKCpfX3ApICsrX19wOwogICAgICAgIHJldHVybiAoX19wIC0gX19zKTsKICAgICAgfQoKICAg ICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9f cywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsKICAgICAgICBmb3Ig KGNvbnN0IGNoYXJfdHlwZSogX19wID0gX19zOyBzaXplX3QoX19wIC0gX19zKSA8IF9fbjsgKytf X3ApCiAgICAgICAgICBpZiAoKl9fcCA9PSBfX2EpIHJldHVybiBfX3A7CiAgICAgICAgcmV0dXJu IDA7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBl KiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJu IChjaGFyX3R5cGUqKSBtZW1tb3ZlKF9fczEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFyX3R5cGUp KTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEs IGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gKGNoYXJf dHlwZSopIG1lbWNweShfX3MxLCBfX3MyLCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSk7IH0KCiAg ICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90 IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgewogICAgICAgIGZvciAoY2hhcl90eXBlKiBfX3Ag PSBfX3M7IF9fcCA8IF9fcyArIF9fbjsgKytfX3ApCiAgICAgICAgICBhc3NpZ24oKl9fcCwgX19h KTsKICAgICAgICByZXR1cm4gX19zOwogICAgICB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAg ICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBjaGFy X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNv bnN0IGNoYXJfdHlwZSYgX19jKSB7IHJldHVybiBpbnRfdHlwZShfX2MpOyB9CgogICAgICBzdGF0 aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50 X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGlj IGludF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigtMSk7 IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBf X2MpCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkpID8gaW50X3R5cGUoMCkg OiBfX2M7IH0KICAgIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IGNoYXJfdHJhaXRzPGNo YXI+CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgaW50 IGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRl ZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7 CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj aGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29s CiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQog ICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0 KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJl dHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0 IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAg ICB7IHJldHVybiBtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIHNpemVf dAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsgcmV0dXJuIHN0cmxl bihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0 IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcl90eXBlKj4obWVtY2hyKF9fcywgX19hLCBf X24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9f czEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtbW92ZShfX3MxLCBfX3MyLCBfX24pKTsgfQoKICAgICAg c3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJf dHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90 eXBlKj4obWVtY3B5KF9fczEsIF9fczIsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBl KgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2Ep CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbXNldChfX3MsIF9fYSwg X19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0 IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZT4oX19j KTsgfQoKCgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hh cl90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPihzdGF0aWNf Y2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFf aW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAg ICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBl b2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oKC0xKSk7IH0KCiAgICAgIHN0YXRp YyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0 dXJuIChfX2MgPT0gZW9mKCkpID8gMCA6IF9fYzsgfQogIH07CiMgMjc4ICIvaG9tZTUva3Jha293 L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv aW5jbHVkZS9nKysvYml0cy9jaGFyX3RyYWl0cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9DaGFyX3RyYWl0c19tYXRjaAogICAg ewogICAgICBfQ2hhclQgX01fYzsKICAgICAgX0NoYXJfdHJhaXRzX21hdGNoKF9DaGFyVCBjb25z dCYgX19jKSA6IF9NX2MoX19jKSB7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShfQ2hh clQgY29uc3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0czo6ZXEoX01fYywgX19hKTsgfQogICAgfTsK Cn0KIyA0MiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAx ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGlvLmgiIDEgMwojIDQzICIv aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi9ob21lNS9r cmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzMuMC9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyAzOCAiL2hvbWU1L2tyYWtv dy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w L2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlZndkLmgiIDMKCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUv bG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1 ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIv aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL2hvbWU1 L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjgvMy4wL2luY2x1ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysrbG9jYWxlLmgi IDEgMwojIDM2ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgv Yml0cy9jKytsb2NhbGUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB0eXBlZGVmIGludCogX19jX2xv Y2FsZTsKfQojIDQxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVmd2QuaCIg MiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NsaW1pdHMuaCIgMSAz CiMgNDAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jbGltaXRzLmgiIDMKIyAx ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIyAxMSAiL2hvbWU1L2tyYWtv dy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w L2luY2x1ZGUvbGltaXRzLmgiIDMgNAojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5c2xpbWl0 cy5oIiAxIDMgNAojIDI1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMyA0CiNw cmFnbWEgaWRlbnQgIkAoIylsaW1pdHMuaAkxLjUxCTk5LzEwLzA4IFNNSSIKCiMgMSAiL2hvbWU1 L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjgvMy4wL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQKIyAyOCAiL2hvbWU1L2ty YWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv My4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2Ff ZGVmcy5oIiAxIDMgNAojIDI5ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAz IDQKIyAxICIvdXNyL2luY2x1ZGUvaXNvL2xpbWl0c19pc28uaCIgMSAzIDQKIyAyOCAiL3Vzci9p bmNsdWRlL2lzby9saW1pdHNfaXNvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpbGltaXRzX2lz by5oCTEuMQk5OS8wOC8wOSBTTUkiCgoKZXh0ZXJuICJDIiB7CiMgNzUgIi91c3IvaW5jbHVkZS9p c28vbGltaXRzX2lzby5oIiAzIDQKfQojIDMwICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAx MDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXNsaW1p dHMuaCIgMiAzIDQKIyA0MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNAoj IDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5cy9pbnRfbGltaXRzLmgiIDEgMyA0CiMgMTggIi9o b21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi44LzMuMC9pbmNsdWRlL3N5cy9pbnRfbGltaXRzLmgiIDMgNAojcHJhZ21hIGlkZW50ICJA KCMpaW50X2xpbWl0cy5oCTEuNgk5OS8wOC8wNiBTTUkiCiMgNTMgIi9ob21lNS9rcmFrb3cvZ251 L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs dWRlL3N5cy9pbnRfbGltaXRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMu aCIgMSAzIDQKIyA1NCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL2ludF9saW1pdHMuaCIgMiAz IDQKCgpleHRlcm4gIkMiIHsKIyAxNzEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIw L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5cy9pbnRfbGlt aXRzLmgiIDMgNAp9CiMgNDIgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMg NAoKCgpleHRlcm4gIkMiIHsKIyAyNDYgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIw L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5c2xpbWl0cy5o IiAzIDQKZXh0ZXJuIGxvbmcgX3N5c2NvbmYoaW50KTsKIyAyNjggIi9ob21lNS9rcmFrb3cvZ251 L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs dWRlL3N5c2xpbWl0cy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAxIDMg NAojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgj KXVuaXN0ZC5oCTEuMzcJOTgvMTAvMjggU01JIgoKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2Nh bC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9z eXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5o IiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDI2NSAiL3Vzci9pbmNsdWRlL3N5cy91bmlzdGQuaCIg MyA0Cn0KIyAyNjkgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMgNAojIDI3 OSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNApleHRlcm4gbG9uZyBfc3lz Y29uZihpbnQpOwojIDI4OSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNAp9 CiMgMTIgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAojIDQxICIvaG9tZTUv a3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu OC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY2xpbWl0cy5oIiAyIDMKIyA0MiAiL2hvbWU1L2ty YWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv My4wL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cv Z251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9p bmNsdWRlL2crKy9iaXRzL3N0ZF9zdHJpbmcuaCIgMSAzCiMgMzggIi9ob21lNS9rcmFrb3cvZ251 L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs dWRlL2crKy9iaXRzL3N0ZF9zdHJpbmcuaCIgMwoKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2Nh bC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9n Kysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi9ob21l NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL2hvbWU1L2ty YWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv My4wL2luY2x1ZGUvZysrL2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDQxICIvaG9tZTUva3Jha293 L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv aW5jbHVkZS9nKysvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251 L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs dWRlL2crKy9iaXRzL2NoYXJfdHJhaXRzLmgiIDEgMwojIDQyICIvaG9tZTUva3Jha293L2dudS9s b2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk ZS9nKysvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2Fs LjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2cr Ky9iaXRzL3N0ZF9pdGVyYXRvci5oIiAxIDMKIyAzMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwu MjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysr L2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDMKCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAw MTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2Jp dHMvc3RsX2NvbmZpZy5oIiAxIDMKIyAzMyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAz MjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMv c3RkX2l0ZXJhdG9yLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIw L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0 ZF9jc3RkZGVmLmgiIDEgMwojIDM0ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRf aXRlcmF0b3IuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lv c2Z3ZC5oIiAxIDMKIyAzNSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2l0ZXJh dG9yLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRv cl9iYXNlLmgiIDEgMwojIDM4ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRl cmF0b3JfYmFzZS5oIiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvY29uY2Vw dF9jaGVja3MuaCIgMSAzCiMgMjMyICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9jb25j ZXB0X2NoZWNrcy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfTXV0YWJsZV90cmFp dCB7CiAgdHlwZWRlZiBfVHAgX1R5cGU7Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBf TXV0YWJsZV90cmFpdDxjb25zdCBfVHA+IHsKICB0eXBlZGVmIF9UcCBfVHlwZTsKfTsKCgoKdGVt cGxhdGUgPGNsYXNzIF9UeXBlPgp2b2lkIF9fc2lua191bnVzZWRfd2FybmluZyhfVHlwZSkgeyB9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1R5cGVYLCBjbGFzcyBfVHlwZVk+CnN0cnVjdCBfU1RMX0NPTlZF UlRfRVJST1IgewogIHN0YXRpYyB2b2lkCiAgX190eXBlX1hfaXNfbm90X2NvbnZlcnRpYmxlX3Rv X3R5cGVfWShfVHlwZVggX194LCBfVHlwZVkpIHsKICAgIF9UeXBlWSBfX3kgPSBfX3g7CiAgICBf X3NpbmtfdW51c2VkX3dhcm5pbmcoX195KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UeXBl PiBzdHJ1Y3QgX19jaGVja19lcXVhbCB7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1R5cGVYLCBjbGFz cyBfVHlwZVk+CnN0cnVjdCBfU1RMX1NBTUVfVFlQRV9FUlJPUiB7CiAgc3RhdGljIHZvaWQKICBf X3R5cGVfWF9ub3Rfc2FtZV9hc190eXBlX1koX1R5cGVYICwgX1R5cGVZICkgewogICAgX19jaGVj a19lcXVhbDxfVHlwZVg+IHQxID0gX19jaGVja19lcXVhbDxfVHlwZVk+KCk7CiAgfQp9OwoKCgoK dGVtcGxhdGUgPGNsYXNzIF9GdW5jLCBjbGFzcyBfUmV0PgpzdHJ1Y3QgX1NUTF9HRU5FUkFUT1Jf RVJST1IgewogIHN0YXRpYyBfUmV0IF9fZ2VuZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihf RnVuYyYgX19mKSB7CiAgICByZXR1cm4gX19mKCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9G dW5jPgpzdHJ1Y3QgX1NUTF9HRU5FUkFUT1JfRVJST1I8X0Z1bmMsIHZvaWQ+IHsKICBzdGF0aWMg dm9pZCBfX2dlbmVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0Z1bmMmIF9fZikgewogICAg X19mKCk7CiAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfRnVuYywgY2xhc3MgX1JldCwgY2xhc3Mg X0FyZz4Kc3RydWN0IF9TVExfVU5BUllfRlVOQ1RJT05fRVJST1IgewogIHN0YXRpYyBfUmV0CiAg X191bmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0Z1bmMmIF9fZiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0FyZyYgX19hcmcpIHsK ICAgIHJldHVybiBfX2YoX19hcmcpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfRnVuYywgY2xh c3MgX0FyZz4Kc3RydWN0IF9TVExfVU5BUllfRlVOQ1RJT05fRVJST1I8X0Z1bmMsIHZvaWQsIF9B cmc+IHsKICBzdGF0aWMgdm9pZAogIF9fdW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0 aW9uKF9GdW5jJiBfX2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IF9BcmcmIF9fYXJnKSB7CiAgICBfX2YoX19hcmcpOwogIH0KfTsKCnRlbXBsYXRlIDxj bGFzcyBfRnVuYywgY2xhc3MgX1JldCwgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vjb25kPgpzdHJ1 Y3QgX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1IgewogIHN0YXRpYyBfUmV0CiAgX19iaW5hcnlf ZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9GdW5jJiBfX2YsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9GaXJzdCYgX19maXJzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1NlY29uZCYgX19zZWNv bmQpIHsKICAgIHJldHVybiBfX2YoX19maXJzdCwgX19zZWNvbmQpOwogIH0KfTsKCnRlbXBsYXRl IDxjbGFzcyBfRnVuYywgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vjb25kPgpzdHJ1Y3QgX1NUTF9C SU5BUllfRlVOQ1RJT05fRVJST1I8X0Z1bmMsIHZvaWQsIF9GaXJzdCwgX1NlY29uZD4gewogIHN0 YXRpYyB2b2lkCiAgX19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9GdW5j JiBfX2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9G aXJzdCYgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX1NlY29uZCYgX19zZWNvbmQpIHsKICAgIF9fZihfX2ZpcnN0LCBfX3NlY29uZCk7CiAg fQp9OwojIDMzOCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvY29uY2VwdF9jaGVja3Mu aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vjb25kPiBz dHJ1Y3QgX1NUTF9CSU5BUllfT1BfRVFVQUxfRVJST1IgeyBzdGF0aWMgX1JldCBfX2NvbnN0X2Jp bmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oY29uc3QgX0ZpcnN0JiBfX2ZpcnN0 LCBjb25zdCBfU2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCA9PSBfX3NlY29uZDsg fSBzdGF0aWMgX1JldCBfX2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0Zp cnN0JiBfX2ZpcnN0LCBfU2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCA9PSBfX3Nl Y29uZDsgfSB9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vj b25kPiBzdHJ1Y3QgX1NUTF9CSU5BUllfT1BfTk9UX0VRVUFMX0VSUk9SIHsgc3RhdGljIF9SZXQg X19jb25zdF9iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKGNvbnN0IF9GaXJz dCYgX19maXJzdCwgY29uc3QgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0dXJuIF9fZmlyc3QgIT0g X19zZWNvbmQ7IH0gc3RhdGljIF9SZXQgX19iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlv bGF0aW9uKF9GaXJzdCYgX19maXJzdCwgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0dXJuIF9fZmly c3QgIT0gX19zZWNvbmQ7IH0gfTsKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9GaXJzdCwg Y2xhc3MgX1NlY29uZD4gc3RydWN0IF9TVExfQklOQVJZX09QX0xFU1NfVEhBTl9FUlJPUiB7IHN0 YXRpYyBfUmV0IF9fY29uc3RfYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihj b25zdCBfRmlyc3QmIF9fZmlyc3QsIGNvbnN0IF9TZWNvbmQmIF9fc2Vjb25kKSB7IHJldHVybiBf X2ZpcnN0IDwgX19zZWNvbmQ7IH0gc3RhdGljIF9SZXQgX19iaW5hcnlfb3BlcmF0b3JfcmVxdWly ZW1lbnRfdmlvbGF0aW9uKF9GaXJzdCYgX19maXJzdCwgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0 dXJuIF9fZmlyc3QgPCBfX3NlY29uZDsgfSB9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg X0ZpcnN0LCBjbGFzcyBfU2Vjb25kPiBzdHJ1Y3QgX1NUTF9CSU5BUllfT1BfTEVTU19FUVVBTF9F UlJPUiB7IHN0YXRpYyBfUmV0IF9fY29uc3RfYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zp b2xhdGlvbihjb25zdCBfRmlyc3QmIF9fZmlyc3QsIGNvbnN0IF9TZWNvbmQmIF9fc2Vjb25kKSB7 IHJldHVybiBfX2ZpcnN0IDw9IF9fc2Vjb25kOyB9IHN0YXRpYyBfUmV0IF9fYmluYXJ5X29wZXJh dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfRmlyc3QmIF9fZmlyc3QsIF9TZWNvbmQmIF9fc2Vj b25kKSB7IHJldHVybiBfX2ZpcnN0IDw9IF9fc2Vjb25kOyB9IH07CnRlbXBsYXRlIDxjbGFzcyBf UmV0LCBjbGFzcyBfRmlyc3QsIGNsYXNzIF9TZWNvbmQ+IHN0cnVjdCBfU1RMX0JJTkFSWV9PUF9H UkVBVEVSX1RIQU5fRVJST1IgeyBzdGF0aWMgX1JldCBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9y ZXF1aXJlbWVudF92aW9sYXRpb24oY29uc3QgX0ZpcnN0JiBfX2ZpcnN0LCBjb25zdCBfU2Vjb25k JiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCA+IF9fc2Vjb25kOyB9IHN0YXRpYyBfUmV0IF9f YmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfRmlyc3QmIF9fZmlyc3QsIF9T ZWNvbmQmIF9fc2Vjb25kKSB7IHJldHVybiBfX2ZpcnN0ID4gX19zZWNvbmQ7IH0gfTsKdGVtcGxh dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9GaXJzdCwgY2xhc3MgX1NlY29uZD4gc3RydWN0IF9TVExf QklOQVJZX09QX0dSRUFURVJfRVFVQUxfRVJST1IgeyBzdGF0aWMgX1JldCBfX2NvbnN0X2JpbmFy eV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oY29uc3QgX0ZpcnN0JiBfX2ZpcnN0LCBj b25zdCBfU2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCA+PSBfX3NlY29uZDsgfSBz dGF0aWMgX1JldCBfX2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0ZpcnN0 JiBfX2ZpcnN0LCBfU2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCA+PSBfX3NlY29u ZDsgfSB9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vjb25k PiBzdHJ1Y3QgX1NUTF9CSU5BUllfT1BfUExVU19FUlJPUiB7IHN0YXRpYyBfUmV0IF9fY29uc3Rf YmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihjb25zdCBfRmlyc3QmIF9fZmly c3QsIGNvbnN0IF9TZWNvbmQmIF9fc2Vjb25kKSB7IHJldHVybiBfX2ZpcnN0ICsgX19zZWNvbmQ7 IH0gc3RhdGljIF9SZXQgX19iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9G aXJzdCYgX19maXJzdCwgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0dXJuIF9fZmlyc3QgKyBfX3Nl Y29uZDsgfSB9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vj b25kPiBzdHJ1Y3QgX1NUTF9CSU5BUllfT1BfVElNRVNfRVJST1IgeyBzdGF0aWMgX1JldCBfX2Nv bnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oY29uc3QgX0ZpcnN0JiBf X2ZpcnN0LCBjb25zdCBfU2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCAqIF9fc2Vj b25kOyB9IHN0YXRpYyBfUmV0IF9fYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv bihfRmlyc3QmIF9fZmlyc3QsIF9TZWNvbmQmIF9fc2Vjb25kKSB7IHJldHVybiBfX2ZpcnN0ICog X19zZWNvbmQ7IH0gfTsKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9GaXJzdCwgY2xhc3Mg X1NlY29uZD4gc3RydWN0IF9TVExfQklOQVJZX09QX0RJVklERV9FUlJPUiB7IHN0YXRpYyBfUmV0 IF9fY29uc3RfYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihjb25zdCBfRmly c3QmIF9fZmlyc3QsIGNvbnN0IF9TZWNvbmQmIF9fc2Vjb25kKSB7IHJldHVybiBfX2ZpcnN0IC8g X19zZWNvbmQ7IH0gc3RhdGljIF9SZXQgX19iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlv bGF0aW9uKF9GaXJzdCYgX19maXJzdCwgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0dXJuIF9fZmly c3QgLyBfX3NlY29uZDsgfSB9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX0ZpcnN0LCBj bGFzcyBfU2Vjb25kPiBzdHJ1Y3QgX1NUTF9CSU5BUllfT1BfU1VCVFJBQ1RfRVJST1IgeyBzdGF0 aWMgX1JldCBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oY29u c3QgX0ZpcnN0JiBfX2ZpcnN0LCBjb25zdCBfU2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4gX19m aXJzdCAtIF9fc2Vjb25kOyB9IHN0YXRpYyBfUmV0IF9fYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVt ZW50X3Zpb2xhdGlvbihfRmlyc3QmIF9fZmlyc3QsIF9TZWNvbmQmIF9fc2Vjb25kKSB7IHJldHVy biBfX2ZpcnN0IC0gX19zZWNvbmQ7IH0gfTsKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9G aXJzdCwgY2xhc3MgX1NlY29uZD4gc3RydWN0IF9TVExfQklOQVJZX09QX01PRF9FUlJPUiB7IHN0 YXRpYyBfUmV0IF9fY29uc3RfYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihj b25zdCBfRmlyc3QmIF9fZmlyc3QsIGNvbnN0IF9TZWNvbmQmIF9fc2Vjb25kKSB7IHJldHVybiBf X2ZpcnN0ICUgX19zZWNvbmQ7IH0gc3RhdGljIF9SZXQgX19iaW5hcnlfb3BlcmF0b3JfcmVxdWly ZW1lbnRfdmlvbGF0aW9uKF9GaXJzdCYgX19maXJzdCwgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0 dXJuIF9fZmlyc3QgJSBfX3NlY29uZDsgfSB9OwojIDM2MCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9j YWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUv ZysrL2JpdHMvY29uY2VwdF9jaGVja3MuaCIgMwpzdHJ1Y3QgX1NUTF9FUlJPUiB7CgogIHRlbXBs YXRlIDxjbGFzcyBfVHlwZT4KICBzdGF0aWMgX1R5cGUKICBfX2RlZmF1bHRfY29uc3RydWN0b3Jf cmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9UeXBlKSB7CiAgICByZXR1cm4gX1R5cGUoKTsKICB9CiAg dGVtcGxhdGUgPGNsYXNzIF9UeXBlPgogIHN0YXRpYyBfVHlwZQogIF9fYXNzaWdubWVudF9vcGVy YXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX1R5cGUgX19hKSB7CiAgICBfX2EgPSBfX2E7CiAg ICByZXR1cm4gX19hOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+CiAgc3RhdGljIF9UeXBl CiAgX19jb3B5X2NvbnN0cnVjdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfVHlwZSBfX2EpIHsK ICAgIF9UeXBlIF9fYyhfX2EpOwogICAgcmV0dXJuIF9fYzsKICB9CiAgdGVtcGxhdGUgPGNsYXNz IF9UeXBlPgogIHN0YXRpYyBfVHlwZQogIF9fY29uc3RfcGFyYW1ldGVyX3JlcXVpcmVkX2Zvcl9j b3B5X2NvbnN0cnVjdG9yKF9UeXBlICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBfVHlwZSYgX19iKSB7CiAgICBfVHlwZSBfX2MoX19iKTsK ICAgIHJldHVybiBfX2M7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfVHlwZT4KICBzdGF0aWMgX1R5 cGUKICBfX2NvbnN0X3BhcmFtZXRlcl9yZXF1aXJlZF9mb3JfYXNzaWdubWVudF9vcGVyYXRvcihf VHlwZSBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgX1R5cGUmIF9fYikgewogICAgX19hID0gX19iOwogICAgcmV0dXJuIF9fYTsK ICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9UeXBlPgogIHN0YXRpYyBfVHlwZQogIF9fbGVzc190aGFu X2NvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9UeXBlIF9fYSwgX1R5cGUgX19iKSB7 CiAgICBpZiAoX19hIDwgX19iKSByZXR1cm4gX19hOwogICAgcmV0dXJuIF9fYjsKICB9CiAgdGVt cGxhdGUgPGNsYXNzIF9UeXBlPgogIHN0YXRpYyBfVHlwZQogIF9fZXF1YWxpdHlfY29tcGFyYWJs ZV9yZXF1aXJlbWVudF92aW9sYXRpb24oX1R5cGUgX19hLCBfVHlwZSBfX2IpIHsKICAgIGlmIChf X2EgPT0gX19iIHx8IF9fYSAhPSBfX2IpIHJldHVybiBfX2E7CiAgICByZXR1cm4gX19iOwogIH0K ICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgogIHN0YXRpYyB2b2lkCiAgX19kZXJlZmVyZW5j ZV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0l0ZXJhdG9yIF9faSkgewogICAgX19z aW5rX3VudXNlZF93YXJuaW5nKCpfX2kpOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9y PgogIHN0YXRpYyB2b2lkCiAgX19kZXJlZmVyZW5jZV9vcGVyYXRvcl9hbmRfYXNzaWdubWVudF9y ZXF1aXJlbWVudF92aW9sYXRpb24oX0l0ZXJhdG9yIF9faSkgewogICAgKl9faSA9ICpfX2k7CiAg fQogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CiAgc3RhdGljIHZvaWQKICBfX3ByZWluY3Jl bWVudF9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0l0ZXJhdG9yIF9faSkgewogICAg KytfX2k7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CiAgc3RhdGljIHZvaWQKICBf X3Bvc3RpbmNyZW1lbnRfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9JdGVyYXRvciBf X2kpIHsKICAgIF9faSsrOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgogIHN0YXRp YyB2b2lkCiAgX19wcmVkZWNyZW1lbnRfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9J dGVyYXRvciBfX2kpIHsKICAgIC0tX19pOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9y PgogIHN0YXRpYyB2b2lkCiAgX19wb3N0ZGVjcmVtZW50X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zp b2xhdGlvbihfSXRlcmF0b3IgX19pKSB7CiAgICBfX2ktLTsKICB9CiAgdGVtcGxhdGUgPGNsYXNz IF9JdGVyYXRvciwgY2xhc3MgX1R5cGU+CiAgc3RhdGljIHZvaWQKICBfX3Bvc3RpbmNyZW1lbnRf b3BlcmF0b3JfYW5kX2Fzc2lnbm1lbnRfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9JdGVyYXRvciBf X2ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfVHlwZSBfX3QpIHsKICAgICpfX2krKyA9IF9fdDsKICB9CiAgdGVtcGxhdGUg PGNsYXNzIF9JdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgogIHN0YXRpYyBfSXRlcmF0b3IKICBf X2l0ZXJhdG9yX2FkZGl0aW9uX2Fzc2lnbm1lbnRfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9JdGVy YXRvciBfX2ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfRGlzdGFuY2UgX19uKSB7CiAgICBfX2kgKz0gX19uOwogICAgcmV0dXJuIF9faTsK ICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgogIHN0YXRp YyBfSXRlcmF0b3IKICBfX2l0ZXJhdG9yX2FkZGl0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihf SXRlcmF0b3IgX19pLCBfRGlzdGFuY2UgX19uKSB7CiAgICBfX2kgPSBfX2kgKyBfX247CiAgICBf X2kgPSBfX24gKyBfX2k7CiAgICByZXR1cm4gX19pOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0 ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CiAgc3RhdGljIF9JdGVyYXRvcgogIF9faXRlcmF0b3Jf c3VidHJhY3Rpb25fYXNzaWdubWVudF9yZXF1aXJlbWVudF92aW9sYXRpb24oX0l0ZXJhdG9yIF9f aSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9EaXN0YW5jZSBfX24pIHsKICAgIF9faSAtPSBfX247CiAgICByZXR1cm4gX19pOwogIH0K ICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CiAgc3RhdGljIF9J dGVyYXRvcgogIF9faXRlcmF0b3Jfc3VidHJhY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9J dGVyYXRvciBfX2ksIF9EaXN0YW5jZSBfX24pIHsKICAgIF9faSA9IF9faSAtIF9fbjsKICAgIHJl dHVybiBfX2k7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5j ZT4KICBzdGF0aWMgX0Rpc3RhbmNlCiAgX19kaWZmZXJlbmNlX29wZXJhdG9yX3JlcXVpcmVtZW50 X3Zpb2xhdGlvbihfSXRlcmF0b3IgX19pLCBfSXRlcmF0b3IgX19qLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbikgewogICAgX19uID0g X19pIC0gX19qOwogICAgcmV0dXJuIF9fbjsKICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9FeHAsIGNs YXNzIF9UeXBlLCBjbGFzcyBfRGlzdGFuY2U+CiAgc3RhdGljIF9UeXBlCiAgX19lbGVtZW50X2Fj Y2Vzc19vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0V4cCBfX3gsIF9UeXBlKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Ug X19uKSB7CiAgICByZXR1cm4gX194W19fbl07CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfRXhwLCBj bGFzcyBfVHlwZSwgY2xhc3MgX0Rpc3RhbmNlPgogIHN0YXRpYyB2b2lkCiAgX19lbGVtZW50X2Fz c2lnbm1lbnRfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9FeHAgX194LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHlwZSogX190 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf RGlzdGFuY2UgX19uKSB7CiAgICBfX3hbX19uXSA9ICpfX3Q7CiAgfQoKfTsKCgoKbmFtZXNwYWNl IHN0ZCB7CnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+IHN0cnVjdCBpdGVyYXRvcl90cmFpdHM7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4Kc3RydWN0IF9fdmFsdWVfdHlwZV90eXBlX2RlZmlu aXRpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uIHsKICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRl cmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwp9OwoKdGVtcGxhdGUg PGNsYXNzIF9JdGVyPgpzdHJ1Y3QgX19kaWZmZXJlbmNlX3R5cGVfdHlwZV9kZWZpbml0aW9uX3Jl cXVpcmVtZW50X3Zpb2xhdGlvbiB7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3Ry YWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgpzdHJ1Y3QgX19yZWZlcmVuY2VfdHlwZV9kZWZpbml0 aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbiB7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJh dG9yX3RyYWl0czxfSXRlcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0l0ZXI+CnN0cnVjdCBfX3BvaW50ZXJfdHlwZV9kZWZpbml0aW9uX3JlcXVpcmVtZW50X3Zp b2xhdGlvbiB7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcj46 OnBvaW50ZXIgcG9pbnRlcjsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4Kc3RydWN0IF9faXRl cmF0b3JfY2F0ZWdvcnlfdHlwZV9kZWZpbml0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbiB7CiAg dHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2Nh dGVnb3J5CiAgICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKfTsKCgoKCnRlbXBsYXRlIDxjbGFz cyBfVHlwZT4Kc3RydWN0IF9Bc3NpZ25hYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbiB7CiAgc3Rh dGljIHZvaWQgX0Fzc2lnbmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9UeXBlIF9fYSkgewog ICAgX1NUTF9FUlJPUjo6X19hc3NpZ25tZW50X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv bihfX2EpOwogICAgX1NUTF9FUlJPUjo6X19jb3B5X2NvbnN0cnVjdG9yX3JlcXVpcmVtZW50X3Zp b2xhdGlvbihfX2EpOwogICAgX1NUTF9FUlJPUjo6X19jb25zdF9wYXJhbWV0ZXJfcmVxdWlyZWRf Zm9yX2NvcHlfY29uc3RydWN0b3IoX19hLF9fYSk7CiAgICBfU1RMX0VSUk9SOjpfX2NvbnN0X3Bh cmFtZXRlcl9yZXF1aXJlZF9mb3JfYXNzaWdubWVudF9vcGVyYXRvcihfX2EsX19hKTsKICB9Cn07 CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+CnN0cnVjdCBfRGVmYXVsdENvbnN0cnVjdGlibGVf Y29uY2VwdF9zcGVjaWZpY2F0aW9uIHsKICBzdGF0aWMgdm9pZCBfRGVmYXVsdENvbnN0cnVjdGli bGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9UeXBlIF9fYSkgewogICAgX1NUTF9FUlJPUjo6X19k ZWZhdWx0X2NvbnN0cnVjdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2EpOwogIH0KfTsKCgoK dGVtcGxhdGUgPGNsYXNzIF9UeXBlPgpzdHJ1Y3QgX0VxdWFsaXR5Q29tcGFyYWJsZV9jb25jZXB0 X3NwZWNpZmljYXRpb24gewogIHN0YXRpYyB2b2lkIF9FcXVhbGl0eUNvbXBhcmFibGVfcmVxdWly ZW1lbnRfdmlvbGF0aW9uKF9UeXBlIF9fYSkgewogICAgX1NUTF9FUlJPUjo6X19lcXVhbGl0eV9j b21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2EsIF9fYSk7CiAgfQp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfVHlwZT4Kc3RydWN0IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVj aWZpY2F0aW9uIHsKICBzdGF0aWMgdm9pZCBfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50 X3Zpb2xhdGlvbihfVHlwZSBfX2EpIHsKICAgIF9TVExfRVJST1I6Ol9fbGVzc190aGFuX2NvbXBh cmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9fYSwgX19hKTsKICB9Cn07CgoKCnRlbXBsYXRl IDxjbGFzcyBfVHJpdmlhbEl0ZXJhdG9yPgpzdHJ1Y3QgX1RyaXZpYWxJdGVyYXRvcl9jb25jZXB0 X3NwZWNpZmljYXRpb24gewpzdGF0aWMgdm9pZApfVHJpdmlhbEl0ZXJhdG9yX3JlcXVpcmVtZW50 X3Zpb2xhdGlvbihfVHJpdmlhbEl0ZXJhdG9yIF9faSkgewogIHR5cGVkZWYgdHlwZW5hbWUKICAg IF9fdmFsdWVfdHlwZV90eXBlX2RlZmluaXRpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uPF9Ucml2 aWFsSXRlcmF0b3I+OjoKICAgIHZhbHVlX3R5cGUgX19UOwoKICBfQXNzaWduYWJsZV9jb25jZXB0 X3NwZWNpZmljYXRpb248X1RyaXZpYWxJdGVyYXRvcj46OgogICAgX0Fzc2lnbmFibGVfcmVxdWly ZW1lbnRfdmlvbGF0aW9uKF9faSk7CgogIF9EZWZhdWx0Q29uc3RydWN0aWJsZV9jb25jZXB0X3Nw ZWNpZmljYXRpb248X1RyaXZpYWxJdGVyYXRvcj46OgogICAgX0RlZmF1bHRDb25zdHJ1Y3RpYmxl X3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwoKICBfRXF1YWxpdHlDb21wYXJhYmxlX2NvbmNl cHRfc3BlY2lmaWNhdGlvbjxfVHJpdmlhbEl0ZXJhdG9yPjo6CiAgICBfRXF1YWxpdHlDb21wYXJh YmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwoKICBfU1RMX0VSUk9SOjpfX2RlcmVmZXJl bmNlX29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwp9Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RyaXZpYWxJdGVyYXRvcj4Kc3RydWN0IF9NdXRhYmxlX1RyaXZpYWxJdGVyYXRvcl9j b25jZXB0X3NwZWNpZmljYXRpb24gewpzdGF0aWMgdm9pZApfTXV0YWJsZV9Ucml2aWFsSXRlcmF0 b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9Ucml2aWFsSXRlcmF0b3IgX19pKSB7CiAgX1RyaXZp YWxJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248X1RyaXZpYWxJdGVyYXRvcj46OgogICAg X1RyaXZpYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pKTsKCiAgX1NUTF9FUlJP Ujo6X19kZXJlZmVyZW5jZV9vcGVyYXRvcl9hbmRfYXNzaWdubWVudF9yZXF1aXJlbWVudF92aW9s YXRpb24oX19pKTsKfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CnN0cnVj dCBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb24gewpzdGF0aWMgdm9pZApfSW5w dXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0lucHV0SXRlcmF0b3IgX19pKSB7Cgog IF9Ucml2aWFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPF9JbnB1dEl0ZXJhdG9yPjo6 CiAgICBfVHJpdmlhbEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwoKICBfX2Rp ZmZlcmVuY2VfdHlwZV90eXBlX2RlZmluaXRpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uPF9JbnB1 dEl0ZXJhdG9yPigpOwogIF9fcmVmZXJlbmNlX3R5cGVfZGVmaW5pdGlvbl9yZXF1aXJlbWVudF92 aW9sYXRpb248X0lucHV0SXRlcmF0b3I+KCk7CiAgX19wb2ludGVyX3R5cGVfZGVmaW5pdGlvbl9y ZXF1aXJlbWVudF92aW9sYXRpb248X0lucHV0SXRlcmF0b3I+KCk7CiAgX19pdGVyYXRvcl9jYXRl Z29yeV90eXBlX2RlZmluaXRpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uPF9JbnB1dEl0ZXJhdG9y PigpOwoKICBfU1RMX0VSUk9SOjpfX3ByZWluY3JlbWVudF9vcGVyYXRvcl9yZXF1aXJlbWVudF92 aW9sYXRpb24oX19pKTsKICBfU1RMX0VSUk9SOjpfX3Bvc3RpbmNyZW1lbnRfb3BlcmF0b3JfcmVx dWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7Cn0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJ dGVyYXRvcj4Kc3RydWN0IF9PdXRwdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb24gewpz dGF0aWMgdm9pZApfT3V0cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9PdXRwdXRJ dGVyYXRvciBfX2kpIHsKCiAgX0Fzc2lnbmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPF9PdXRw dXRJdGVyYXRvcj46OgogICAgX0Fzc2lnbmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7 CgogIF9faXRlcmF0b3JfY2F0ZWdvcnlfdHlwZV9kZWZpbml0aW9uX3JlcXVpcmVtZW50X3Zpb2xh dGlvbjxfT3V0cHV0SXRlcmF0b3I+KCk7CgogIF9TVExfRVJST1I6Ol9fZGVyZWZlcmVuY2Vfb3Bl cmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7CiAgX1NUTF9FUlJPUjo6X19wcmVpbmNy ZW1lbnRfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7CiAgX1NUTF9FUlJPUjo6 X19wb3N0aW5jcmVtZW50X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwogIF9T VExfRVJST1I6OgogICAgX19wb3N0aW5jcmVtZW50X29wZXJhdG9yX2FuZF9hc3NpZ25tZW50X3Jl cXVpcmVtZW50X3Zpb2xhdGlvbihfX2ksICpfX2kpOwp9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBf Rm9yd2FyZEl0ZXJhdG9yPgpzdHJ1Y3QgX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmlj YXRpb24gewpzdGF0aWMgdm9pZApfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv bihfRm9yd2FyZEl0ZXJhdG9yIF9faSkgewoKICBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNp ZmljYXRpb248X0ZvcndhcmRJdGVyYXRvcj46OgogICAgX0lucHV0SXRlcmF0b3JfcmVxdWlyZW1l bnRfdmlvbGF0aW9uKF9faSk7Cn0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y PgpzdHJ1Y3QgX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbiB7 CnN0YXRpYyB2b2lkCl9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp b24oX0ZvcndhcmRJdGVyYXRvciBfX2kpIHsKICBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3Bl Y2lmaWNhdGlvbjxfRm9yd2FyZEl0ZXJhdG9yPjo6CiAgICBfRm9yd2FyZEl0ZXJhdG9yX3JlcXVp cmVtZW50X3Zpb2xhdGlvbihfX2kpOwoKICBfT3V0cHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZp Y2F0aW9uPF9Gb3J3YXJkSXRlcmF0b3I+OjoKICAgIF9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVu dF92aW9sYXRpb24oX19pKTsKfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ dGVyYXRvcj4Kc3RydWN0IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0 aW9uIHsKc3RhdGljIHZvaWQKX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9s YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2kpIHsKCiAgX0ZvcndhcmRJdGVyYXRvcl9j b25jZXB0X3NwZWNpZmljYXRpb248X0JpZGlyZWN0aW9uYWxJdGVyYXRvcj46OgogICAgX0Zvcndh cmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pKTsKCiAgX1NUTF9FUlJPUjo6X19w cmVkZWNyZW1lbnRfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7CiAgX1NUTF9F UlJPUjo6X19wb3N0ZGVjcmVtZW50X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kp Owp9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcj4Kc3RydWN0IF9N dXRhYmxlX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb24gewpzdGF0 aWMgdm9pZApfTXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0 aW9uKAogICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2kpCnsKICBfQmlkaXJlY3Rpb25h bEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPjo6 CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwoK ICBfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPF9CaWRpcmVj dGlvbmFsSXRlcmF0b3I+OjoKICAgIF9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVu dF92aW9sYXRpb24oX19pKTsKICB0eXBlZGVmIHR5cGVuYW1lCiAgICBfX3ZhbHVlX3R5cGVfdHlw ZV9kZWZpbml0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjwKICAgIF9CaWRpcmVjdGlvbmFsSXRl cmF0b3I+Ojp2YWx1ZV90eXBlIF9fVDsKICB0eXBlbmFtZSBfTXV0YWJsZV90cmFpdDxfX1Q+Ojpf VHlwZSogX190bXBfcHRyID0gMDsKCiAgX1NUTF9FUlJPUjo6CiAgICBfX3Bvc3RpbmNyZW1lbnRf b3BlcmF0b3JfYW5kX2Fzc2lnbm1lbnRfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKl9fdG1wX3B0cik7Cn0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kQWNjSXRlcj4Kc3Ry dWN0IF9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb24gewpzdGF0aWMg dm9pZApfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9SYW5kQWNj SXRlciBfX2kpIHsKCiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRp b248X1JhbmRBY2NJdGVyPjo6CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVpcmVtZW50 X3Zpb2xhdGlvbihfX2kpOwoKICBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNh dGlvbjxfUmFuZEFjY0l0ZXI+OjoKICAgIF9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRf dmlvbGF0aW9uKF9faSk7CiAgdHlwZWRlZiB0eXBlbmFtZQogICAgICAgIF9fdmFsdWVfdHlwZV90 eXBlX2RlZmluaXRpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uPF9SYW5kQWNjSXRlcj4KICAgICAg ICA6OnZhbHVlX3R5cGUKICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZQogICAgICAg IF9fZGlmZmVyZW5jZV90eXBlX3R5cGVfZGVmaW5pdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb248 X1JhbmRBY2NJdGVyPgogICAgICAgIDo6ZGlmZmVyZW5jZV90eXBlCiAgICBfRGlzdDsKICB0eXBl ZGVmIHR5cGVuYW1lIF9NdXRhYmxlX3RyYWl0PF9EaXN0Pjo6X1R5cGUgX011dERpc3Q7CgoKICBf U1RMX0VSUk9SOjpfX2l0ZXJhdG9yX2FkZGl0aW9uX2Fzc2lnbm1lbnRfcmVxdWlyZW1lbnRfdmlv bGF0aW9uKF9faSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9NdXREaXN0KCkpOwogIF9TVExfRVJST1I6Ol9faXRlcmF0 b3JfYWRkaXRpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTXV0RGlzdCgpKTsKICBfU1RM X0VSUk9SOjoKICAgIF9faXRlcmF0b3Jfc3VidHJhY3Rpb25fYXNzaWdubWVudF9yZXF1aXJlbWVu dF92aW9sYXRpb24oX19pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfTXV0RGlzdCgpKTsKICBfU1RMX0VSUk9SOjpfX2l0ZXJhdG9y X3N1YnRyYWN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2ksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX011dERpc3QoKSk7CiAg X1NUTF9FUlJPUjo6X19kaWZmZXJlbmNlX29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihf X2ksIF9faSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9NdXREaXN0KCkpOwogIHR5cGVuYW1lIF9NdXRhYmxlX3RyYWl0PHZhbHVlX3R5 cGU+OjpfVHlwZSogX19kdW1teV9wdHIgPSAwOwogIF9TVExfRVJST1I6Ol9fZWxlbWVudF9hY2Nl c3Nfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2R1bW15X3B0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfTXV0RGlzdCgpKTsKfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kQWNjSXRlcj4Kc3Ry dWN0IF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbiB7 CnN0YXRpYyB2b2lkCl9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zp b2xhdGlvbihfUmFuZEFjY0l0ZXIgX19pKQp7CiAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNl cHRfc3BlY2lmaWNhdGlvbjxfUmFuZEFjY0l0ZXI+OjoKICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRv cl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pKTsKCiAgX011dGFibGVfQmlkaXJlY3Rpb25hbEl0 ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjxfUmFuZEFjY0l0ZXI+OjoKICAgIF9NdXRhYmxl X0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pKTsKICB0eXBl ZGVmIHR5cGVuYW1lCiAgICAgICAgX192YWx1ZV90eXBlX3R5cGVfZGVmaW5pdGlvbl9yZXF1aXJl bWVudF92aW9sYXRpb248X1JhbmRBY2NJdGVyPgogICAgICAgIDo6dmFsdWVfdHlwZQogICAgdmFs dWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lCiAgICAgICAgX19kaWZmZXJlbmNlX3R5cGVfdHlw ZV9kZWZpbml0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjxfUmFuZEFjY0l0ZXI+CiAgICAgICAg OjpkaWZmZXJlbmNlX3R5cGUKICAgIF9EaXN0OwoKICB0eXBlbmFtZSBfTXV0YWJsZV90cmFpdDx2 YWx1ZV90eXBlPjo6X1R5cGUqIF9fdG1wX3B0ciA9IDA7CgogIF9TVExfRVJST1I6Ol9fZWxlbWVu dF9hc3NpZ25tZW50X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2ksCiAgICAgICAg ICAgICAgICAgIF9fdG1wX3B0ciwgX0Rpc3QoKSk7Cn0KfTsKCgoKCgoKCnRlbXBsYXRlIDxjbGFz cyBUeXBlPiBzdHJ1Y3QgX192YWx1ZV90eXBlX190eXBlZGVmX3JlcXVpcmVtZW50X3Zpb2xhdGlv biB7IHR5cGVkZWYgdHlwZW5hbWUgVHlwZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOyB9Owp0ZW1w bGF0ZSA8Y2xhc3MgVHlwZT4gc3RydWN0IF9fZGlmZmVyZW5jZV90eXBlX190eXBlZGVmX3JlcXVp cmVtZW50X3Zpb2xhdGlvbiB7IHR5cGVkZWYgdHlwZW5hbWUgVHlwZTo6ZGlmZmVyZW5jZV90eXBl IGRpZmZlcmVuY2VfdHlwZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFR5cGU+IHN0cnVjdCBfX3NpemVf dHlwZV9fdHlwZWRlZl9yZXF1aXJlbWVudF92aW9sYXRpb24geyB0eXBlZGVmIHR5cGVuYW1lIFR5 cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7IH07CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBzdHJ1Y3Qg X19yZWZlcmVuY2VfX3R5cGVkZWZfcmVxdWlyZW1lbnRfdmlvbGF0aW9uIHsgdHlwZWRlZiB0eXBl bmFtZSBUeXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4g c3RydWN0IF9fY29uc3RfcmVmZXJlbmNlX190eXBlZGVmX3JlcXVpcmVtZW50X3Zpb2xhdGlvbiB7 IHR5cGVkZWYgdHlwZW5hbWUgVHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsg fTsKdGVtcGxhdGUgPGNsYXNzIFR5cGU+IHN0cnVjdCBfX3BvaW50ZXJfX3R5cGVkZWZfcmVxdWly ZW1lbnRfdmlvbGF0aW9uIHsgdHlwZWRlZiB0eXBlbmFtZSBUeXBlOjpwb2ludGVyIHBvaW50ZXI7 IH07CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBzdHJ1Y3QgX19jb25zdF9wb2ludGVyX190eXBlZGVm X3JlcXVpcmVtZW50X3Zpb2xhdGlvbiB7IHR5cGVkZWYgdHlwZW5hbWUgVHlwZTo6Y29uc3RfcG9p bnRlciBjb25zdF9wb2ludGVyOyB9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CnN0cnVjdCBf QWxsb2NhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbiB7CnN0YXRpYyB2b2lkCl9BbGxvY2F0b3Jf cmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9BbGxvYyBfX2EpIHsKCiAgX0RlZmF1bHRDb25zdHJ1Y3Rp YmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjxfQWxsb2M+OjoKICAgIF9EZWZhdWx0Q29uc3RydWN0 aWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb24oX19hKTsKCiAgX0VxdWFsaXR5Q29tcGFyYWJsZV9j b25jZXB0X3NwZWNpZmljYXRpb248X0FsbG9jPjo6CiAgICBfRXF1YWxpdHlDb21wYXJhYmxlX3Jl cXVpcmVtZW50X3Zpb2xhdGlvbihfX2EpOwoKICBfX3ZhbHVlX3R5cGVfX3R5cGVkZWZfcmVxdWly ZW1lbnRfdmlvbGF0aW9uPF9BbGxvYz4oKTsKICBfX2RpZmZlcmVuY2VfdHlwZV9fdHlwZWRlZl9y ZXF1aXJlbWVudF92aW9sYXRpb248X0FsbG9jPigpOwogIF9fc2l6ZV90eXBlX190eXBlZGVmX3Jl cXVpcmVtZW50X3Zpb2xhdGlvbjxfQWxsb2M+KCk7CiAgX19yZWZlcmVuY2VfX3R5cGVkZWZfcmVx dWlyZW1lbnRfdmlvbGF0aW9uPF9BbGxvYz4oKTsKICBfX2NvbnN0X3JlZmVyZW5jZV9fdHlwZWRl Zl9yZXF1aXJlbWVudF92aW9sYXRpb248X0FsbG9jPigpOwogIF9fcG9pbnRlcl9fdHlwZWRlZl9y ZXF1aXJlbWVudF92aW9sYXRpb248X0FsbG9jPigpOwogIF9fY29uc3RfcG9pbnRlcl9fdHlwZWRl Zl9yZXF1aXJlbWVudF92aW9sYXRpb248X0FsbG9jPigpOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Fs bG9jOjp2YWx1ZV90eXBlIF9UcDsKCgp9Cn07CiMgMzkgIi9ob21lNS9rcmFrb3cvZ251L2xvY2Fs LjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2cr Ky9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZCB7CgpzdHJ1Y3Qg aW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3Ry dWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsK c3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0 b3JfdGFnIHt9OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlk aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsKICB0eXBlZGVmIGlucHV0X2l0 ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwog IHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRl cjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKc3RydWN0IG91dHB1dF9pdGVyYXRvciB7 CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVk ZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw ZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGZvcndhcmRfaXRlcmF0b3Igewog IHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRl ZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAg dHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0 ZXJhdG9yIHsKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh dGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlm ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZl cmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBy YW5kb21fYWNjZXNzX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf dGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRl ZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5 cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9DYXRlZ29yeSwgY2xh c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICBjbGFzcyBfUG9p bnRlciA9IF9UcCosIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmPgpzdHJ1Y3QgaXRlcmF0b3Igewog IHR5cGVkZWYgX0NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVl X3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1Bv aW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNlOwp9OwoKCgoKdGVt cGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5 OwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAg dHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5 cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBl ZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRl IDxjbGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogIHR5cGVkZWYgcmFu ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAg dmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl ZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gewogIHR5cGVkZWYg cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBf VHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw ZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsK fTsKIyAxNDIgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNl LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBf SXRlciYpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJh dG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICByZXR1cm4gX0NhdGVnb3J5KCk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRp ZmZlcmVuY2VfdHlwZSoKX19kaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJikKewogIHJldHVybiBz dGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5 cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKX192YWx1ZV90eXBlKGNvbnN0IF9JdGVyJikK ewogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2 YWx1ZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cml0ZXJhdG9yX2NhdGVn b3J5KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKTsg fQoKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoKZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYgX19p KSB7IHJldHVybiBfX2Rpc3RhbmNlX3R5cGUoX19pKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVy PgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKdmFs dWVfdHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUoX19pKTsgfQoj IDI2NyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2UuaCIg Mwp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l IHZvaWQgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJh dG9yX3RhZykKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19u OyB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0 YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz dCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uLCByYW5kb21fYWNjZXNzX2l0ZXJh dG9yX3RhZykKewogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyYXRvciApID0g X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yID4gOjpfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9u OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIF9fbiArPSBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZv aWQgZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg X0lucHV0SXRlcmF0b3IgX19sYXN0LCBfRGlzdGFuY2UmIF9fbikKewogIGRvIHsgdm9pZCAoKl9f eCkoIF9JbnB1dEl0ZXJhdG9yICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRp b248IF9JbnB1dEl0ZXJhdG9yID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp b247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3Qs IF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy YXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7 CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fZmlyc3Q7ICsrX19uOwogIH0K ICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgpp bmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRp ZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRl cmF0b3JfdGFnKSB7CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yICkg PSBfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgPiA6Ol9SYW5kb21BY2Nlc3NJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp b247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpkaXN0YW5jZShfSW5wdXRJ dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAg ICBfQ2F0ZWdvcnk7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcmF0b3IgKSA9IF9JbnB1 dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcmF0b3IgPiA6Ol9JbnB1 dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsK ICByZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKCgp0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBf X2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90 YWcpIHsKICB3aGlsZSAoX19uLS0pICsrX19pOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRp cmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNl KF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAg ICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgZG8geyB2b2lkICgqX194 KSggX0JpZGlyZWN0aW9uYWxJdGVyYXRvciApID0gX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9jb25j ZXB0X3NwZWNpZmljYXRpb248IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgPiA6Ol9CaWRpcmVjdGlv bmFsSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDAp OwogIGlmIChfX24gPj0gMCkKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hp bGUgKF9fbisrKSAtLV9faTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl cmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9SYW5kb21BY2Nl c3NJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICAgICAgICAgICAgcmFu ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgKSA9IF9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRp b248IF9SYW5kb21BY2Nlc3NJdGVyYXRvciA+IDo6X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVp cmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBfX2kgKz0gX19uOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l IHZvaWQgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKSB7CiAgZG8g eyB2b2lkICgqX194KSggX0lucHV0SXRlcmF0b3IgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRf c3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcmF0b3IgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVt ZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBfX2FkdmFuY2UoX19pLCBf X24sIGl0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwp9Cgp9CiMgMzYgIi9ob21lNS9rcmFrb3cvZ251 L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs dWRlL2crKy9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9s b2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk ZS9nKysvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAzCiMgMzQgIi9ob21lNS9rcmFrb3cvZ251L2xv Y2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl L2crKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCm5hbWVzcGFjZSBzdGQgewoKCnRlbXBsYXRlIDxj bGFzcyBfQ29udGFpbmVyPgpjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoK ICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgY29u dGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn b3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNl X3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsK CiAgZXhwbGljaXQgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRh aW5lcigmX194KSB7fQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJh dG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAg ICBjb250YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAg YmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0 aGlzOyB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7 IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVy YXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKIyA3MSAiL2hvbWU1L2tyYWtvdy9nbnUv bG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1 ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+ CmlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBiYWNrX2luc2VydGVyKF9D b250YWluZXImIF9feCkgewogIHJldHVybiBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy PihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgZnJvbnRfaW5zZXJ0 X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsKcHVibGljOgog IHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVy YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAg dHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0 eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3Io X0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGZyb250X2luc2VydF9pdGVy YXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6 dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgY29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUp OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l cj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9y PF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNl cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsg fQp9OwojIDExMCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yLmgi IDMKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0 b3I8X0NvbnRhaW5lcj4gZnJvbnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJu IGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0NvbnRhaW5lcj4KY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250 YWluZXIqIGNvbnRhaW5lcjsKICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwpw dWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0 cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVf dHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2lu dGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGluc2VydF9pdGVyYXRvcihfQ29udGFp bmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKICAgIDogY29udGFp bmVyKCZfX3gpLCBpdGVyKF9faSkge30KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAg b3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUp IHsKICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsKICAgICsraXRl cjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv cGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy PiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250 YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKIyAxNTIgIi9ob21l NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFz cyBfQ29udGFpbmVyLCBjbGFzcyBfSXRlcmF0b3I+CmlubGluZQppbnNlcnRfaXRlcmF0b3I8X0Nv bnRhaW5lcj4gaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQp7CiAgdHlw ZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2l0ZXI7CiAgcmV0dXJuIGluc2Vy dF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsIF9faXRlcihfX2kpKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZmVyZW5jZSA9 IF9UcCYsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3Q+CmNsYXNzIHJldmVy c2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiByZXZlcnNlX2JpZGlyZWN0aW9u YWxfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgX1RwLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4gX1NlbGY7CnBy b3RlY3RlZDoKICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBl ZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVk ZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwog IHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7Cgog IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9i aWRpcmVjdGlvbmFsX2l0ZXJhdG9yKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX194KQogICAgOiBj dXJyZW50KF9feCkge30KICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGJhc2UoKSBjb25zdCB7IHJl dHVybiBjdXJyZW50OyB9CiAgX1JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICBfQmlk aXJlY3Rpb25hbEl0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAqLS1fX3RtcDsK ICB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkp OyB9CgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0 aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhp czsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9y LS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJh dG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAg cmV0dXJuIF9fdG1wOwogIH0KfTsKIyAyMzggIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRz L3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNs YXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PSgKICAgIGNv bnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9E aXN0YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxf QmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkKewogIHJldHVybiBfX3guYmFzZSgp ID09IF9feS5iYXNlKCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9CaUl0ZXIsIGNsYXNzIF9UcCwg Y2xhc3MgX1JlZiwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KAogICAg Y29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwg X0Rpc3RhbmNlPiYgX194LAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9y PF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQp7CiAgcmV0dXJuICEoX194ID09 IF9feSk7Cn0KIyAyNjcgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRv ci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmNsYXNzIHJldmVyc2VfaXRlcmF0b3IK ewpwcm90ZWN0ZWQ6CiAgX0l0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAg ICAgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAg ICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SXRlcmF0b3I+Ojpwb2ludGVyCiAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZQogICAgICAgICAgcmVmZXJlbmNl OwoKICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogIHR5cGVkZWYgcmV2ZXJzZV9p dGVyYXRvcjxfSXRlcmF0b3I+IF9TZWxmOwoKcHVibGljOgogIHJldmVyc2VfaXRlcmF0b3IoKSB7 fQogIGV4cGxpY2l0IHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3VycmVu dChfX3gpIHt9CgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgX1NlbGYmIF9feCkgOiBjdXJyZW50 KF9feC5jdXJyZW50KSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CiAgcmV2ZXJzZV9pdGVy YXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAgOiBjdXJyZW50KF9f eC5iYXNlKCkpIHt9CgoKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJy ZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9JdGVyYXRvciBfX3Rt cCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQoKICBwb2ludGVyIG9wZXJhdG9y LT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCiAgX1NlbGYmIG9wZXJhdG9y KysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJh dG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAg cmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsK ICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxm IF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBf U2VsZiBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0dXJuIF9T ZWxmKGN1cnJlbnQgLSBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5 cGUgX19uKSB7CiAgICBjdXJyZW50IC09IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1Nl bGYgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiBfU2Vs ZihjdXJyZW50ICsgX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBl IF9fbikgewogICAgY3VycmVudCArPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIHJlZmVy ZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooKnRo aXMgKyBfX24pOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBv cGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7 CiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J dGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0 ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRv cjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7Cn0K CgoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiAhKF9f eCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVy YXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAg ICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJl dHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29s IG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kp IHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpp bmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYg X194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0 b3I+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRp ZmZlcmVuY2VfdHlwZQpvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+ JiBfX3gsCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkg ewogIHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J dGVyYXRvcj4KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgpvcGVyYXRvcisodHlw ZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAog ICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gpIHsKICByZXR1 cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOwp9CiMgODIz ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdCA9IHB0cmRpZmZfdD4gY2xhc3MgaXN0cmVhbV9pdGVy YXRvcjsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0PgppbmxpbmUgYm9vbCBvcGVy YXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4mLAogICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4mKTsKCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0PgpjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsKCiAgdGVt cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX0QxPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29u c3QgaXN0cmVhbV9pdGVyYXRvcjxfVDEsIF9EMT4mLAogICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVDEsIF9EMT4mKTsKCgoKCgoKcHJvdGVjdGVkOgogIGlz dHJlYW0qIF9NX3N0cmVhbTsKICBfVHAgX01fdmFsdWU7CiAgYm9vbCBfTV9lbmRfbWFya2VyOwog IHZvaWQgX01fcmVhZCgpIHsKICAgIF9NX2VuZF9tYXJrZXIgPSAoKl9NX3N0cmVhbSkgPyB0cnVl IDogZmFsc2U7CiAgICBpZiAoX01fZW5kX21hcmtlcikgKl9NX3N0cmVhbSA+PiBfTV92YWx1ZTsK ICAgIF9NX2VuZF9tYXJrZXIgPSAoKl9NX3N0cmVhbSkgPyB0cnVlIDogZmFsc2U7CiAgfQpwdWJs aWM6CiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlw ZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0IGRpZmZlcmVuY2VfdHlwZTsKICB0 eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNl OwoKICBpc3RyZWFtX2l0ZXJhdG9yKCkgOiBfTV9zdHJlYW0oJmNpbiksIF9NX2VuZF9tYXJrZXIo ZmFsc2UpIHt9CiAgaXN0cmVhbV9pdGVyYXRvcihpc3RyZWFtJiBfX3MpIDogX01fc3RyZWFtKCZf X3MpIHsgX01fcmVhZCgpOyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJu IF9NX3ZhbHVlOyB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3Bl cmF0b3IqKCkpOyB9CgogIGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4mIG9wZXJhdG9yKyso KSB7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGlzdHJlYW1faXRlcmF0 b3I8X1RwLCBfRGlzdD4gb3BlcmF0b3IrKyhpbnQpIHsKICAgIGlzdHJlYW1faXRlcmF0b3I8X1Rw LCBfRGlzdD4gX190bXAgPSAqdGhpczsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiBfX3RtcDsK ICB9Cn07CiMgODkzICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3Iu aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBib29sIG9w ZXJhdG9yPT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feCwKICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNl PiYgX195KSB7CiAgcmV0dXJuIChfX3guX01fc3RyZWFtID09IF9feS5fTV9zdHJlYW0gJiYKICAg ICAgICAgIF9feC5fTV9lbmRfbWFya2VyID09IF9feS5fTV9lbmRfbWFya2VyKSB8fAogICAgICAg ICBfX3guX01fZW5kX21hcmtlciA9PSBmYWxzZSAmJiBfX3kuX01fZW5kX21hcmtlciA9PSBmYWxz ZTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBib29s IG9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feCwK ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3Rh bmNlPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNz IF9UcD4KY2xhc3Mgb3N0cmVhbV9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBvc3RyZWFtKiBfTV9z dHJlYW07CiAgY29uc3QgY2hhciogX01fc3RyaW5nOwpwdWJsaWM6CiAgdHlwZWRlZiBvdXRwdXRf aXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBl OwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7 CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtJiBf X3MpIDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoMCkge30KICBvc3RyZWFtX2l0ZXJhdG9y KG9zdHJlYW0mIF9fcywgY29uc3QgY2hhciogX19jKQogICAgOiBfTV9zdHJlYW0oJl9fcyksIF9N X3N0cmluZyhfX2MpIHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0oY29uc3Qg X1RwJiBfX3ZhbHVlKSB7CiAgICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7CiAgICBpZiAoX01fc3Ry aW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0cmluZzsKICAgIHJldHVybiAqdGhpczsKICB9CiAgb3N0 cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIG9zdHJl YW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgb3N0cmVh bV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKIyA5 NTUgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KY2xhc3MgX19ub3Jt YWxfaXRlcmF0b3IKICA6IHB1YmxpYyBpdGVyYXRvcjxpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y Pjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRz PF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJh aXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSwKICAgICAgICAgICAgICAgICAgICBpdGVy YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICBpdGVy YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgp7Cgpwcm90ZWN0ZWQ6CiAgX0l0ZXJh dG9yIF9NX2N1cnJlbnQ7CgpwdWJsaWM6CiAgdHlwZWRlZiBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3IsIF9Db250YWluZXI+IG5vcm1hbF9pdGVyYXRvcl90eXBlOwogIHR5cGVkZWYgaXRlcmF0 b3JfdHJhaXRzPF9JdGVyYXRvcj4gX190cmFpdHNfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9f dHJhaXRzX3R5cGU6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVk ZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwogIHR5cGVk ZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlw ZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0 eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7CgogIF9f bm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7IH0KCiAgZXhwbGlj aXQgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2kpIDogX01fY3VycmVudChf X2kpIHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgaW5saW5lIF9fbm9ybWFsX2l0 ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyLCBfQ29udGFpbmVyPiYgX19pKQog ICAgOiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQoKCiAgcmVmZXJlbmNlCiAgb3BlcmF0b3Iq KCkgY29uc3QgeyByZXR1cm4gKl9NX2N1cnJlbnQ7IH0KCiAgcG9pbnRlcgogIG9wZXJhdG9yLT4o KSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CgogIG5vcm1hbF9pdGVyYXRvcl90eXBlJgog IG9wZXJhdG9yKysoKSB7ICsrX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9p dGVyYXRvcl90eXBlCiAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9y KF9NX2N1cnJlbnQrKyk7IH0KCgogIG5vcm1hbF9pdGVyYXRvcl90eXBlJgogIG9wZXJhdG9yLS0o KSB7IC0tX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9pdGVyYXRvcl90eXBl CiAgb3BlcmF0b3ItLShpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQt LSk7IH0KCgogIHJlZmVyZW5jZQogIG9wZXJhdG9yW10oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBf X24pIGNvbnN0CiAgeyByZXR1cm4gX01fY3VycmVudFtfX25dOyB9CgogIG5vcm1hbF9pdGVyYXRv cl90eXBlJgogIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgeyBfTV9j dXJyZW50ICs9IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9pdGVyYXRvcl90eXBlCiAg b3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJuIF9f bm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgKyBfX24pOyB9CgogIG5vcm1hbF9pdGVyYXRvcl90 eXBlJgogIG9wZXJhdG9yL