From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15783 invoked by alias); 14 Jun 2002 00:16:07 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 15709 invoked by uid 71); 14 Jun 2002 00:16:03 -0000 Resent-Date: 14 Jun 2002 00:16:03 -0000 Resent-Message-ID: <20020614001603.15704.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org, b2.mccarthy@student.qut.edu.au Resent-Reply-To: gcc-gnats@gcc.gnu.org, bp_mccarthy@iprimus.com.au Received: (qmail 14366 invoked by uid 61); 14 Jun 2002 00:12:56 -0000 Message-Id: <20020614001256.14365.qmail@sources.redhat.com> Date: Thu, 13 Jun 2002 17:56:00 -0000 From: bp_mccarthy@iprimus.com.au Reply-To: bp_mccarthy@iprimus.com.au To: gcc-gnats@gcc.gnu.org Cc: b2.mccarthy@student.qut.edu.au X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) X-GNATS-Notify: b2.mccarthy@student.qut.edu.au Subject: optimization/7025: Build of jikes fails in simplify_unary_operation at simplify-rtx.c:580 X-SW-Source: 2002-06/txt/msg00319.txt.bz2 List-Id: >Number: 7025 >Category: optimization >Synopsis: Build of jikes fails in simplify_unary_operation at simplify-rtx.c:580 >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Thu Jun 13 17:16:02 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Brendan McCarthy >Release: gcc version 3.1 >Organization: >Environment: Linux 2.4.18 GlibC 2.2.5 gcc 3.1 >Description: Compiling the attached file with: g++ -O double.ii -o double.o results in: double.cpp: In constructor `IEEEfloat::IEEEfloat(const IEEEdouble&)': double.cpp:200: Internal compiler error in simplify_unary_operation, at simplify-rtx.c:580 Please submit a full bug report, Configured with: ../gcc-3.1//configure --prefix=/usr --enable-shared --enable-languages=c,c++ --enable-threads=posix Thread model: posix >How-To-Repeat: Compile the attached file with g++ -O double.ii -o double.o >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="double.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="double.ii" IyAxICJkb3VibGUuY3BwIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMg MSAiZG91YmxlLmNwcCIKIyA2MSAiZG91YmxlLmNwcCIKIyAxICJkb3VibGUuaCIgMQojIDY0ICJk b3VibGUuaCIKIyAxICJwbGF0Zm9ybS5oIiAxCiMgNDIgInBsYXRmb3JtLmgiCiMgMSAiY29uZmln LmgiIDEKIyA0MyAicGxhdGZvcm0uaCIgMgojIDU1ICJwbGF0Zm9ybS5oIgojIDEgIi91c3IvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyODMgIi91c3IvaW5jbHVkZS9mZWF0 dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAyODQgIi91c3Iv aW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMTMgIi91c3IvaW5jbHVkZS9m ZWF0dXJlcy5oIiAyIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCmV4dGVy biAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOSAiL3Vzci9p bmNsdWRlL2JpdHMvdHlwZXMuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDIwMSAiL3Vzci9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVk IGludCBzaXplX3Q7CiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVk ZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hv cnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBf X3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9f dV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90Owoj IDQ5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19p bnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNo b3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7 CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWlu dDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2 NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2 NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9f ZGV2X3Q7CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsK dHlwZWRlZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVk ZWYgX191X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBf X3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6 ZV90Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGlt NjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50 IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVm IGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNp Z25lZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5 cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoK dHlwZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0 eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3Bp ZF90OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGlu dCBfX2Jsa2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9f dV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoK CnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Zp bGNudDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9m Zl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1 bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7 CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVh ZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vz ci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGlu dCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0 eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3Rh dHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVz Y3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRf YXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1 Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGlu dCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0Owog IHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJf dDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9j azsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlw ZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBl ZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBp bnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293 bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7 Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5k Owp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoK CgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9m YXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBf X3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVh ZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19w c2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19s b2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlw ZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsK ICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVk OwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0 aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0 aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJl YWRfdDsKIyAxNDQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDMxICIvdXNyL2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRl ZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9s b25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1 X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKCgp0eXBlZGVmIF9fbG9mZl90IGxv ZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0eXBlZGVmIF9faW5vNjRfdCBp bm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdp ZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBu bGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBv ZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKCgoKCnR5cGVkZWYgX19waWRf dCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBz c2l6ZV90OwoKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90 IGNhZGRyX3Q7CgoKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwojIDEzMiAiL3Vzci9pbmNsdWRl L3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgNTkgIi91c3Iv aW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsKIyA3MCAiL3Vzci9p bmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKIyA4MiAiL3Vzci9pbmNs dWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsKIyA5NCAiL3Vzci9p bmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90OwojIDEzMyAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiBfX3VzZWNvbmRzX3QgdXNlY29uZHNf dDsKCgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCiMgMSAiL3Vzci9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg MTQ3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxv bmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYg dW5zaWduZWQgaW50IHVpbnQ7CiMgMTkwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlw ZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBl ZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBl ZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBl ZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5 cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19R SV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9f bW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2 NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVn aXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDIxMiAiL3Vz ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMK IyAzNyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZW5k aWFuLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDIxMyAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi IDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMK CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRl L2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVm IHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXpl b2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzUgIi91c3IvaW5j bHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoK CgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAxMDYgIi91c3IvaW5jbHVkZS90aW1l LmgiIDMKc3RydWN0IHRpbWVzcGVjCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgbG9uZyBp bnQgdHZfbnNlYzsKICB9OwojIDQ1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2JpdHMv dGltZS5oIiAzCnN0cnVjdCB0aW1ldmFsCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgX19z dXNlY29uZHNfdCB0dl91c2VjOwogIH07CiMgNDcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi IDIgMwojIDU1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCnR5cGVkZWYgbG9uZyBpbnQg X19mZF9tYXNrOwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRz X2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsK CgoKCgoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKIyA5NSAiL3Vzci9pbmNsdWRlL3N5cy9z ZWxlY3QuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25m ZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9z ZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19y ZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpf X3Jlc3RyaWN0IF9fdGltZW91dCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChp bnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAg ICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgIGZk X3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgICBjb25zdCBz dHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0LAogICAgICAgICAgICAgICAgICAg IGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zaWdtYXNrKSB0aHJvdyAoKTsKCgp9CiMg MjE2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5 cy9zeXNtYWNyb3MuaCIgMSAzCiMgMjE5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoK CgoKdHlwZWRlZiBfX2Jsa3NpemVfdCBibGtzaXplX3Q7CgoKCgoKCnR5cGVkZWYgX19ibGtjbnRf dCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRl ZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMwp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2 NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CgoK fQojIDU2ICJwbGF0Zm9ybS5oIiAyCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAxIDMK IyAzMiAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5o IiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDIgMwojIDk2ICIvdXNyL2luY2x1 ZGUvc3lzL3N0YXQuaCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3Rh dC5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvc3RhdC5oIiAzCnN0cnVjdCBzdGF0CiAg ewogICAgX19kZXZfdCBzdF9kZXY7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19wYWQxOwoKICAg IF9faW5vX3Qgc3RfaW5vOwoKCgogICAgX19tb2RlX3Qgc3RfbW9kZTsKICAgIF9fbmxpbmtfdCBz dF9ubGluazsKICAgIF9fdWlkX3Qgc3RfdWlkOwogICAgX19naWRfdCBzdF9naWQ7CiAgICBfX2Rl dl90IHN0X3JkZXY7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19wYWQyOwoKICAgIF9fb2ZmX3Qg c3Rfc2l6ZTsKCgoKICAgIF9fYmxrc2l6ZV90IHN0X2Jsa3NpemU7CgoKICAgIF9fYmxrY250X3Qg c3RfYmxvY2tzOwoKCgogICAgX190aW1lX3Qgc3RfYXRpbWU7CiAgICB1bnNpZ25lZCBsb25nIGlu dCBfX3VudXNlZDE7CiAgICBfX3RpbWVfdCBzdF9tdGltZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50 IF9fdW51c2VkMjsKICAgIF9fdGltZV90IHN0X2N0aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQg X191bnVzZWQzOwoKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkNDsKICAgIHVuc2lnbmVk IGxvbmcgaW50IF9fdW51c2VkNTsKCgoKICB9OwoKCnN0cnVjdCBzdGF0NjQKICB7CiAgICBfX2Rl dl90IHN0X2RldjsKICAgIHVuc2lnbmVkIGludCBfX3BhZDE7CgogICAgX19pbm9fdCBfX3N0X2lu bzsKICAgIF9fbW9kZV90IHN0X21vZGU7CiAgICBfX25saW5rX3Qgc3Rfbmxpbms7CiAgICBfX3Vp ZF90IHN0X3VpZDsKICAgIF9fZ2lkX3Qgc3RfZ2lkOwogICAgX19kZXZfdCBzdF9yZGV2OwogICAg dW5zaWduZWQgaW50IF9fcGFkMjsKICAgIF9fb2ZmNjRfdCBzdF9zaXplOwogICAgX19ibGtzaXpl X3Qgc3RfYmxrc2l6ZTsKCiAgICBfX2Jsa2NudDY0X3Qgc3RfYmxvY2tzOwogICAgX190aW1lX3Qg c3RfYXRpbWU7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDE7CiAgICBfX3RpbWVfdCBz dF9tdGltZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMjsKICAgIF9fdGltZV90IHN0 X2N0aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQzOwogICAgX19pbm82NF90IHN0 X2lubzsKICB9OwojIDk5ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMiAzCiMgMjAwICIvdXNy L2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpleHRlcm4gaW50IHN0YXQgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2ZpbGUsCiAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9fcmVzdHJpY3Qg X19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZzdGF0IChpbnQgX19mZCwgc3RydWN0IHN0 YXQgKl9fYnVmKSB0aHJvdyAoKTsKIyAyMTkgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzCmV4 dGVybiBpbnQgc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlLAogICAgICAg ICAgICAgICAgICAgc3RydWN0IHN0YXQ2NCAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CmV4 dGVybiBpbnQgZnN0YXQ2NCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0NjQgKl9fYnVmKSB0aHJvdyAo KTsKCgoKCgoKZXh0ZXJuIGludCBsc3RhdCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmls ZSwKICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9fcmVzdHJpY3QgX19idWYpIHRocm93 ICgpOwojIDI0MSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKZXh0ZXJuIGludCBsc3RhdDY0 IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlLAogICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBzdGF0NjQgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50 IGNobW9kIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19tb2RlX3QgX19tb2RlKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCBmY2htb2QgKGludCBfX2ZkLCBfX21vZGVfdCBfX21vZGUpIHRocm93ICgp OwoKCgoKCmV4dGVybiBfX21vZGVfdCB1bWFzayAoX19tb2RlX3QgX19tYXNrKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBfX21vZGVfdCBnZXR1bWFzayAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgbWtkaXIgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21vZGUpIHRocm93ICgp OwoKCgoKCmV4dGVybiBpbnQgbWtub2QgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBf X21vZGUsIF9fZGV2X3QgX19kZXYpCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IG1rZmlm byAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSkgdGhyb3cgKCk7CiMgMzA2 ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpleHRlcm4gaW50IF9fZnhzdGF0IChpbnQgX192 ZXIsIGludCBfX2ZpbGRlcywgc3RydWN0IHN0YXQgKl9fc3RhdF9idWYpIHRocm93ICgpOwpleHRl cm4gaW50IF9feHN0YXQgKGludCBfX3ZlciwgX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lLAogICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmKSB0aHJvdyAoKTsKZXh0ZXJu IGludCBfX2x4c3RhdCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUsCiAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmKSB0aHJvdyAoKTsKIyAzMzAg Ii91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzCmV4dGVybiBpbnQgX19meHN0YXQ2NCAoaW50IF9f dmVyLCBpbnQgX19maWxkZXMsIHN0cnVjdCBzdGF0NjQgKl9fc3RhdF9idWYpCiAgICAgdGhyb3cg KCk7CmV4dGVybiBpbnQgX194c3RhdDY0IChpbnQgX192ZXIsIF9fY29uc3QgY2hhciAqX19maWxl bmFtZSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9fc3RhdF9idWYpIHRo cm93ICgpOwpleHRlcm4gaW50IF9fbHhzdGF0NjQgKGludCBfX3ZlciwgX19jb25zdCBjaGFyICpf X2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9fc3RhdF9i dWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX3hta25vZCAoaW50IF9fdmVyLCBfX2NvbnN0IGNo YXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlLAogICAgICAgICAgICAgICAgICAgICBfX2Rldl90 ICpfX2RldikgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgc3RhdCAoX19jb25z dCBjaGFyICpfX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAq X19zdGF0YnVmKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9feHN0YXQgKDMsIF9fcGF0aCwgX19zdGF0 YnVmKTsKfQoKCmV4dGVybiBfX2lubGluZV9fIGludCBsc3RhdCAoX19jb25zdCBjaGFyICpfX3Bh dGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9fc3RhdGJ1Zikg dGhyb3cgKCkKewogIHJldHVybiBfX2x4c3RhdCAoMywgX19wYXRoLCBfX3N0YXRidWYpOwp9CgoK ZXh0ZXJuIF9faW5saW5lX18gaW50IGZzdGF0IChpbnQgX19mZCwgc3RydWN0IHN0YXQgKl9fc3Rh dGJ1ZikgdGhyb3cgKCkKewogIHJldHVybiBfX2Z4c3RhdCAoMywgX19mZCwgX19zdGF0YnVmKTsK fQoKCmV4dGVybiBfX2lubGluZV9fIGludCBta25vZCAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9f bW9kZV90IF9fbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rldl90IF9fZGV2 KSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9feG1rbm9kICgxLCBfX3BhdGgsIF9fbW9kZSwgJl9fZGV2 KTsKfQoKCgoKCmV4dGVybiBfX2lubGluZV9fIGludCBzdGF0NjQgKF9fY29uc3QgY2hhciAqX19w YXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdDY0ICpfX3N0YXRi dWYpIHRocm93ICgpCnsKICByZXR1cm4gX194c3RhdDY0ICgzLCBfX3BhdGgsIF9fc3RhdGJ1Zik7 Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgbHN0YXQ2NCAoX19jb25zdCBjaGFyICpfX3BhdGgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdDY0ICpfX3N0YXRidWYp IHRocm93ICgpCnsKICByZXR1cm4gX19seHN0YXQ2NCAoMywgX19wYXRoLCBfX3N0YXRidWYpOwp9 CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IGZzdGF0NjQgKGludCBfX2ZkLCBzdHJ1Y3Qgc3RhdDY0 ICpfX3N0YXRidWYpIHRocm93ICgpCnsKICByZXR1cm4gX19meHN0YXQ2NCAoMywgX19mZCwgX19z dGF0YnVmKTsKfQoKCgoKfQojIDU4ICJwbGF0Zm9ybS5oIiAyCgojIDEgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0 ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvd2FpdGZsYWdzLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvc3RkbGli LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMSAzCiMgNjUgIi91 c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMwp1bmlvbiB3YWl0CiAgewogICAgaW50IHdf c3RhdHVzOwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd190ZXJt c2lnOjc7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19jb3JlZHVtcDoxOwogICAgICAgIHVuc2ln bmVkIGludCBfX3dfcmV0Y29kZTo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKCiAg ICAgIH0gX193YWl0X3Rlcm1pbmF0ZWQ7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNp Z25lZCBpbnQgX193X3N0b3B2YWw6ODsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3BzaWc6 ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCiAgICAgIH0gX193YWl0X3N0b3BwZWQ7 CiAgfTsKIyA0NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyA5NCAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAzCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVt OwogIH0gZGl2X3Q7CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAg IGxvbmcgaW50IHJlbTsKICB9IGxkaXZfdDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3Ry dWN0CiAgewogICAgbG9uZyBsb25nIGludCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAg fSBsbGRpdl90OwojIDEzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3Qg X19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUg YXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25z dCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpf X2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9f bnB0cikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJu IGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4 dGVybiBmbG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4 dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIp IHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQg c3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl KQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0 cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cg KCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQog ICAgIHRocm93ICgpOwoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0 cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJv dyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91 bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFz ZSkKICAgICB0aHJvdyAoKTsKIyAyMTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAz CnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAq X19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwog IGNvbnN0IGludCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVy Owp9ICpfX2xvY2FsZV90OwojIDIxMiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKZXh0 ZXJuIGxvbmcgaW50IF9fc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg aW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2Mp IHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9sIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK X19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfbCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lv bl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQog ICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9sIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZs b2F0IF9fc3RydG9mX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBf X2xvYykgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2wgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgX19zdHJ0 b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19n cm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAo KTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBfX3N0cnRv bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhy b3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91 cCkgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3Ry dG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBp bnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxv bmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAo KTsKCgoKCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKc3RydG9kIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKewog IHJldHVybiBfX3N0cnRvZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJu IF9faW5saW5lIGxvbmcgaW50CnN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cg KCkKewogIHJldHVybiBfX3N0cnRvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNl LCAwKTsKfQpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAg ICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsX2ludGVybmFs IChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0 CnN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2ZfaW50ZXJuYWwgKF9fbnB0 ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZQpzdHJ0b2xkIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 cikgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw dHIsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQK c3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3Ry dG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lv bl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdXEgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog ICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJu YWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBleHRl cm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFz ZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw dHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQg bG9uZyBsb25nIGludApzdHJ0b3VsbCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIs IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cg KCkKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jh c2UsIDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIgKl9f bnB0cikgdGhyb3cgKCkKewogIHJldHVybiBzdHJ0b2QgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVs bCk7Cn0KZXh0ZXJuIF9faW5saW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhy b3cgKCkKewogIHJldHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwg MTApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludAphdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0 cikgdGhyb3cgKCkKewogIHJldHVybiBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwg MTApOwp9CgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludAphdG9s bCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sbCAoX19u cHRyLCAoY2hhciAqKikgX19udWxsLCAxMCk7Cn0KIyAzODQgIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMwpleHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4g bG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwojIDM5NyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBsb25n IGludCByYW5kb20gKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2ln bmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVu c2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBfX3N0YXRlbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRl IChjaGFyICpfX3N0YXRlYnVmKSB0aHJvdyAoKTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQog IHsKICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3Rh dGU7CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2Vw OwogICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0 IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQz Ml90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3JhbmRvbV9y ICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAo KTsKCmV4dGVybiBpbnQgaW5pdHN0YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9f cmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3Rh dGVsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0 cmljdCBfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVz dHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2Rh dGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9p ZCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhyb3cg KCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4g ZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsK CgpleHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGlu dCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQganJh bmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiB2 b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25l ZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhy b3cgKCk7CmV4dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzdd KSB0aHJvdyAoKTsKCgoKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hv cnQgaW50IF9feFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5z aWduZWQgc2hvcnQgaW50IF9fYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1 bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChz dHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAg ICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBl cmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAg ICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm ZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkg dGhyb3cgKCk7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3Vi aVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJp Y3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBf X3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4 X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGlu dCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1 bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg ICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz cmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZm ZXIpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBp bnQgX19zZWVkMTZ2WzNdLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRh ICpfX2J1ZmZlcikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hv cnQgaW50IF9fcGFyYW1bN10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9k YXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CiMgNTI3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMK ZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBz aXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7 CgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAo dm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIp IHRocm93ICgpOwoKCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiMgMjUgIi91c3Iv aW5jbHVkZS9hbGxvY2EuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgi IDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6 ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDU0NyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoK CmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IHBvc2l4X21lbWFsaWduICh2b2lkICoq X19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4gdm9pZCBhYm9ydCAodm9p ZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50 IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg b25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lk ICpfX2FyZykKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0 dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2 b2lkIF9FeGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0 dXJuX18pKTsKCgoKCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpf X25hbWUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBf X2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxhY2UpCiAgICAgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gaW50IGNsZWFyZW52ICh2b2lkKSB0aHJvdyAoKTsKIyA2MjMgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAo KTsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7 CiMgNjQwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNo YXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz CmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKCgoK CmV4dGVybiBjaGFyICpjYW5vbmljYWxpemVfZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFt ZSkgdGhyb3cgKCk7CiMgNjcyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIg KnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5 cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQg Kik7CgoKdHlwZWRlZiBfX2NvbXBhcl9mbl90IGNvbXBhcmlzb25fZm5fdDsKCgoKCgpleHRlcm4g dm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2Us CiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19j b21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2Us IHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21w YXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGlu dCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9u X18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KQogICAgIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRp diAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25n IGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxsZGl2X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1l ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIGludCBfX2Rl bm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyA3MjggIi91 c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUs IGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAg ICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0 IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwK ICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9f YnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1 ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2Rl Y3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0 IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAg aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgp OwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwg Y2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3Zh bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAg ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAg ICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmN2dF9y IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwK ICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJp Y3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0 ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAg ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBf X3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90 IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVl LCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVj cHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19y ZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBt YmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBp bnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCB3Y3RvbWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBf X24pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBf X3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X3B3Y3MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0 Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CiMgODA4ICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBnZXRzdWJvcHQgKGNoYXIgKipfX3Jlc3RyaWN0IF9f b3B0aW9ucCwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29uc3QgKl9fcmVzdHJpY3Qg X190b2tlbnMsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3ZhbHVl cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5 KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcG9zaXhfb3BlbnB0IChpbnQgX19vZmxhZykg dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdyYW50cHQgKGludCBfX2ZkKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCB1bmxvY2twdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo YXIgKnB0c25hbWUgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdHNuYW1l X3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IGdldHB0ICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBnZXRsb2Fk YXZnIChkb3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSB0aHJvdyAoKTsKCgoKCgp9CiMg NjAgInBsYXRmb3JtLmgiIDIKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi91c3IvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRyZGlmZl90 OwojIDYxICJwbGF0Zm9ybS5oIiAyCiMgNzIgInBsYXRmb3JtLmgiCiMgMSAiL3Vzci9pbmNsdWRl L3N0cmluZy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiAiQyIg ewoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRl L3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJu IHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7 CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Ny Yywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAo dm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywK ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7 CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24p IHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29u c3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50 IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9f YykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1l bXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkg KGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMp CiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBf X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z cmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9f cmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhy b3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEs IF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo YXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3Qg Y2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4 dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0 aHJvdyAoKTsKIyAxMTEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gaW50IF9fc3Ry Y29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVf dCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4g c2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNp emVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1 cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz CmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2Nv bnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f YykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90 IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgc3Ry c3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChf X2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3Qg Y2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmNhc2VzdHIgKF9f Y29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRvayAo Y2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKQog ICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmlj dCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2 ZV9wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0 IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoKCgoKCmV4dGVy biB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3Rh Y2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNpemVf dCBfX25lZWRsZWxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90 IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9f ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3Ny Yywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25z dCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0 ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhs ZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4g Y2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpz dHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRo cm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQg Kl9fZGVzdCwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQg Kl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiY21wIChfX2NvbnN0IHZv aWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3Qg Y2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgZmZzIChpbnQgX19p KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGZm c2wgKGxvbmcgaW50IF9fbCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK X19leHRlbnNpb25fXyBleHRlcm4gaW50IGZmc2xsIChsb25nIGxvbmcgaW50IF9fbGwpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBzdHJj YXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21w IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gaW50IF9f c3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAoX19jb25z dCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jl c3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZGVsaW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2Nv bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcp IHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rl c3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKZXh0ZXJu IGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAo Y2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiBjaGFy ICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoK ZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiB2 b2lkICptZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRl cm4gY2hhciAqYmFzZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CiMg MzY0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKfQojIDczICJwbGF0Zm9ybS5oIiAyCiMgODYg InBsYXRmb3JtLmgiCiMgMSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDEgMwojIDI0ICIvdXNyL2lu Y2x1ZGUvaWNvbnYuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvaWNvbnYuaCIgMiAz CgoKZXh0ZXJuICJDIiB7CgoKdHlwZWRlZiB2b2lkICppY29udl90OwoKCgoKZXh0ZXJuIGljb252 X3QgaWNvbnZfb3BlbiAoX19jb25zdCBjaGFyICpfX3RvY29kZSwgX19jb25zdCBjaGFyICpfX2Zy b21jb2RlKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBpY29udiAoaWNvbnZfdCBf X2NkLCBjaGFyICoqX19yZXN0cmljdCBfX2luYnVmLAogICAgICAgICAgICAgICAgICAgICBzaXpl X3QgKl9fcmVzdHJpY3QgX19pbmJ5dGVzbGVmdCwKICAgICAgICAgICAgICAgICAgICAgY2hhciAq Kl9fcmVzdHJpY3QgX19vdXRidWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0 cmljdCBfX291dGJ5dGVzbGVmdCk7CgoKZXh0ZXJuIGludCBpY29udl9jbG9zZSAoaWNvbnZfdCBf X2NkKSB0aHJvdyAoKTsKCn0KIyA4NyAicGxhdGZvcm0uaCIgMgojIDEgIi91c3IvaW5jbHVkZS9l cnJuby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMKZXh0ZXJuICJDIiB7CgoK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9i aXRzL2Vycm5vLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMSAzCgoKCiMg MSAiL3Vzci9pbmNsdWRlL2FzbS9lcnJuby5oIiAxIDMKIyA1ICIvdXNyL2luY2x1ZGUvbGludXgv ZXJybm8uaCIgMiAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDIgMwojIDM2ICIv dXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCmV4dGVybiBpbnQgZXJybm87CgoKZXh0ZXJuIGlu dCAqX19lcnJub19sb2NhdGlvbiAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwojIDM3ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMiAzCiMgNTUgIi91c3IvaW5jbHVk ZS9lcnJuby5oIiAzCmV4dGVybiBjaGFyICpwcm9ncmFtX2ludm9jYXRpb25fbmFtZSwgKnByb2dy YW1faW52b2NhdGlvbl9zaG9ydF9uYW1lOwoKCgp9CiMgNjkgIi91c3IvaW5jbHVkZS9lcnJuby5o IiAzCnR5cGVkZWYgaW50IGVycm9yX3Q7CiMgODggInBsYXRmb3JtLmgiIDIKIyA5OCAicGxhdGZv cm0uaCIKIyAxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUv dW5pc3RkLmgiIDMKZXh0ZXJuICJDIiB7CiMgMTc1ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeF9vcHQuaCIgMSAzCiMgMTc2ICIvdXNyL2luY2x1 ZGUvdW5pc3RkLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50cy5o IiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1lbnRzLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvZW52 aXJvbm1lbnRzLmgiIDIgMwojIDE4MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKIyAxOTkg Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDIwMCAiL3Vzci9pbmNsdWRlL3Vu aXN0ZC5oIiAyIDMKIyAyNDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwp0eXBlZGVmIF9faW50 cHRyX3QgaW50cHRyX3Q7CgoKCgoKCnR5cGVkZWYgX19zb2NrbGVuX3Qgc29ja2xlbl90OwojIDI2 MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgYWNjZXNzIChfX2NvbnN0IGNo YXIgKl9fbmFtZSwgaW50IF9fdHlwZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGV1aWRhY2Nl c3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSB0aHJvdyAoKTsKIyAyOTAgIi91 c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmZfdCBsc2VlayAoaW50IF9fZmQsIF9f b2ZmX3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CiMgMzAyICIvdXNyL2luY2x1 ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fb2ZmNjRfdCBsc2VlazY0IChpbnQgX19mZCwgX19vZmY2 NF90IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNsb3Nl IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzc2l6ZV90IHJlYWQgKGludCBfX2ZkLCB2 b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gc3NpemVfdCB3 cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24pIHRocm93ICgp OwoKCgpleHRlcm4gc3NpemVfdCBwcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3Qg X19uYnl0ZXMsIF9fb2ZmX3QgX19vZmZzZXQpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBzc2l6ZV90 IHB3cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sCiAgICAg ICAgICAgICAgICAgICAgICAgX19vZmZfdCBfX29mZnNldCkgdGhyb3cgKCk7CiMgMzQwICIvdXNy L2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHNzaXplX3QgcHJlYWQ2NCAoaW50IF9fZmQsIHZv aWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fb2Zm NjRfdCBfX29mZnNldCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNzaXplX3QgcHdyaXRlNjQgKGludCBf X2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAg ICAgICAgX19vZmY2NF90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcGlw ZSAoaW50IF9fcGlwZWRlc1syXSkgdGhyb3cgKCk7CiMgMzYyICIvdXNyL2luY2x1ZGUvdW5pc3Rk LmgiIDMKZXh0ZXJuIHVuc2lnbmVkIGludCBhbGFybSAodW5zaWduZWQgaW50IF9fc2Vjb25kcykg dGhyb3cgKCk7CiMgMzcxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHVuc2lnbmVk IGludCBzbGVlcCAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVy biBfX3VzZWNvbmRzX3QgdWFsYXJtIChfX3VzZWNvbmRzX3QgX192YWx1ZSwgX191c2Vjb25kc190 IF9faW50ZXJ2YWwpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdXNsZWVwIChfX3VzZWNv bmRzX3QgX191c2Vjb25kcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwYXVzZSAodm9pZCkg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2hvd24gKF9fY29uc3QgY2hhciAqX19maWxlLCBfX3Vp ZF90IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91cCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu dCBmY2hvd24gKGludCBfX2ZkLCBfX3VpZF90IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91cCkgdGhy b3cgKCk7CgoKCgpleHRlcm4gaW50IGxjaG93biAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fdWlk X3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu dCBjaGRpciAoX19jb25zdCBjaGFyICpfX3BhdGgpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZj aGRpciAoaW50IF9fZmQpIHRocm93ICgpOwojIDQyMyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAz CmV4dGVybiBjaGFyICpnZXRjd2QgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19zaXplKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gY2hhciAqZ2V0X2N1cnJlbnRfZGlyX25hbWUgKHZvaWQpIHRocm93ICgp OwoKCgoKCgpleHRlcm4gY2hhciAqZ2V0d2QgKGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBpbnQgZHVwIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkdXAyIChpbnQg X19mZCwgaW50IF9fZmQyKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqKl9fZW52aXJvbjsKCmV4 dGVybiBjaGFyICoqZW52aXJvbjsKCgoKCgpleHRlcm4gaW50IGV4ZWN2ZSAoX19jb25zdCBjaGFy ICpfX3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2W10sCiAgICAgICAgICAgICAgICAgICBjaGFy ICpfX2NvbnN0IF9fZW52cFtdKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmV4ZWN2ZSAoaW50 IF9fZmQsIGNoYXIgKl9fY29uc3QgX19hcmd2W10sIGNoYXIgKl9fY29uc3QgX19lbnZwW10pCiAg ICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGV4ZWN2IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwg Y2hhciAqX19jb25zdCBfX2FyZ3ZbXSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZXhlY2xlIChf X2NvbnN0IGNoYXIgKl9fcGF0aCwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCBleGVjbCAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAq X19hcmcsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZXhlY3ZwIChfX2NvbnN0IGNoYXIg Kl9fZmlsZSwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50 IGV4ZWNscCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IG5pY2UgKGludCBfX2luYykgdGhyb3cgKCk7CgoKCgpl eHRlcm4gdm9pZCBfZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy bl9fKSk7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oIiAxIDMKIyAyNSAi L3Vzci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMwplbnVtCiAgewogICAgX1BDX0xJTktfTUFY LAoKICAgIF9QQ19NQVhfQ0FOT04sCgogICAgX1BDX01BWF9JTlBVVCwKCiAgICBfUENfTkFNRV9N QVgsCgogICAgX1BDX1BBVEhfTUFYLAoKICAgIF9QQ19QSVBFX0JVRiwKCiAgICBfUENfQ0hPV05f UkVTVFJJQ1RFRCwKCiAgICBfUENfTk9fVFJVTkMsCgogICAgX1BDX1ZESVNBQkxFLAoKICAgIF9Q Q19TWU5DX0lPLAoKICAgIF9QQ19BU1lOQ19JTywKCiAgICBfUENfUFJJT19JTywKCiAgICBfUENf U09DS19NQVhCVUYsCgogICAgX1BDX0ZJTEVTSVpFQklUUywKCiAgICBfUENfUkVDX0lOQ1JfWEZF Ul9TSVpFLAoKICAgIF9QQ19SRUNfTUFYX1hGRVJfU0laRSwKCiAgICBfUENfUkVDX01JTl9YRkVS X1NJWkUsCgogICAgX1BDX1JFQ19YRkVSX0FMSUdOLAoKICAgIF9QQ19BTExPQ19TSVpFX01JTiwK CiAgICBfUENfU1lNTElOS19NQVgKCiAgfTsKCgplbnVtCiAgewogICAgX1NDX0FSR19NQVgsCgog ICAgX1NDX0NISUxEX01BWCwKCiAgICBfU0NfQ0xLX1RDSywKCiAgICBfU0NfTkdST1VQU19NQVgs CgogICAgX1NDX09QRU5fTUFYLAoKICAgIF9TQ19TVFJFQU1fTUFYLAoKICAgIF9TQ19UWk5BTUVf TUFYLAoKICAgIF9TQ19KT0JfQ09OVFJPTCwKCiAgICBfU0NfU0FWRURfSURTLAoKICAgIF9TQ19S RUFMVElNRV9TSUdOQUxTLAoKICAgIF9TQ19QUklPUklUWV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19U SU1FUlMsCgogICAgX1NDX0FTWU5DSFJPTk9VU19JTywKCiAgICBfU0NfUFJJT1JJVElaRURfSU8s CgogICAgX1NDX1NZTkNIUk9OSVpFRF9JTywKCiAgICBfU0NfRlNZTkMsCgogICAgX1NDX01BUFBF RF9GSUxFUywKCiAgICBfU0NfTUVNTE9DSywKCiAgICBfU0NfTUVNTE9DS19SQU5HRSwKCiAgICBf U0NfTUVNT1JZX1BST1RFQ1RJT04sCgogICAgX1NDX01FU1NBR0VfUEFTU0lORywKCiAgICBfU0Nf U0VNQVBIT1JFUywKCiAgICBfU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTLAoKICAgIF9TQ19BSU9f TElTVElPX01BWCwKCiAgICBfU0NfQUlPX01BWCwKCiAgICBfU0NfQUlPX1BSSU9fREVMVEFfTUFY LAoKICAgIF9TQ19ERUxBWVRJTUVSX01BWCwKCiAgICBfU0NfTVFfT1BFTl9NQVgsCgogICAgX1ND X01RX1BSSU9fTUFYLAoKICAgIF9TQ19WRVJTSU9OLAoKICAgIF9TQ19QQUdFU0laRSwKCgogICAg X1NDX1JUU0lHX01BWCwKCiAgICBfU0NfU0VNX05TRU1TX01BWCwKCiAgICBfU0NfU0VNX1ZBTFVF X01BWCwKCiAgICBfU0NfU0lHUVVFVUVfTUFYLAoKICAgIF9TQ19USU1FUl9NQVgsCgoKCgogICAg X1NDX0JDX0JBU0VfTUFYLAoKICAgIF9TQ19CQ19ESU1fTUFYLAoKICAgIF9TQ19CQ19TQ0FMRV9N QVgsCgogICAgX1NDX0JDX1NUUklOR19NQVgsCgogICAgX1NDX0NPTExfV0VJR0hUU19NQVgsCgog ICAgX1NDX0VRVUlWX0NMQVNTX01BWCwKCiAgICBfU0NfRVhQUl9ORVNUX01BWCwKCiAgICBfU0Nf TElORV9NQVgsCgogICAgX1NDX1JFX0RVUF9NQVgsCgogICAgX1NDX0NIQVJDTEFTU19OQU1FX01B WCwKCgogICAgX1NDXzJfVkVSU0lPTiwKCiAgICBfU0NfMl9DX0JJTkQsCgogICAgX1NDXzJfQ19E RVYsCgogICAgX1NDXzJfRk9SVF9ERVYsCgogICAgX1NDXzJfRk9SVF9SVU4sCgogICAgX1NDXzJf U1dfREVWLAoKICAgIF9TQ18yX0xPQ0FMRURFRiwKCgogICAgX1NDX1BJSSwKCiAgICBfU0NfUElJ X1hUSSwKCiAgICBfU0NfUElJX1NPQ0tFVCwKCiAgICBfU0NfUElJX0lOVEVSTkVULAoKICAgIF9T Q19QSUlfT1NJLAoKICAgIF9TQ19QT0xMLAoKICAgIF9TQ19TRUxFQ1QsCgogICAgX1NDX1VJT19N QVhJT1YsCgogICAgX1NDX0lPVl9NQVggPSBfU0NfVUlPX01BWElPViwKCiAgICBfU0NfUElJX0lO VEVSTkVUX1NUUkVBTSwKCiAgICBfU0NfUElJX0lOVEVSTkVUX0RHUkFNLAoKICAgIF9TQ19QSUlf T1NJX0NPVFMsCgogICAgX1NDX1BJSV9PU0lfQ0xUUywKCiAgICBfU0NfUElJX09TSV9NLAoKICAg IF9TQ19UX0lPVl9NQVgsCgoKCiAgICBfU0NfVEhSRUFEUywKCiAgICBfU0NfVEhSRUFEX1NBRkVf RlVOQ1RJT05TLAoKICAgIF9TQ19HRVRHUl9SX1NJWkVfTUFYLAoKICAgIF9TQ19HRVRQV19SX1NJ WkVfTUFYLAoKICAgIF9TQ19MT0dJTl9OQU1FX01BWCwKCiAgICBfU0NfVFRZX05BTUVfTUFYLAoK ICAgIF9TQ19USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TLAoKICAgIF9TQ19USFJFQURfS0VZ U19NQVgsCgogICAgX1NDX1RIUkVBRF9TVEFDS19NSU4sCgogICAgX1NDX1RIUkVBRF9USFJFQURT X01BWCwKCiAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSLAoKICAgIF9TQ19USFJFQURfQVRU Ul9TVEFDS1NJWkUsCgogICAgX1NDX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HLAoKICAgIF9T Q19USFJFQURfUFJJT19JTkhFUklULAoKICAgIF9TQ19USFJFQURfUFJJT19QUk9URUNULAoKICAg IF9TQ19USFJFQURfUFJPQ0VTU19TSEFSRUQsCgoKICAgIF9TQ19OUFJPQ0VTU09SU19DT05GLAoK ICAgIF9TQ19OUFJPQ0VTU09SU19PTkxOLAoKICAgIF9TQ19QSFlTX1BBR0VTLAoKICAgIF9TQ19B VlBIWVNfUEFHRVMsCgogICAgX1NDX0FURVhJVF9NQVgsCgogICAgX1NDX1BBU1NfTUFYLAoKCiAg ICBfU0NfWE9QRU5fVkVSU0lPTiwKCiAgICBfU0NfWE9QRU5fWENVX1ZFUlNJT04sCgogICAgX1ND X1hPUEVOX1VOSVgsCgogICAgX1NDX1hPUEVOX0NSWVBULAoKICAgIF9TQ19YT1BFTl9FTkhfSTE4 TiwKCiAgICBfU0NfWE9QRU5fU0hNLAoKCiAgICBfU0NfMl9DSEFSX1RFUk0sCgogICAgX1NDXzJf Q19WRVJTSU9OLAoKICAgIF9TQ18yX1VQRSwKCgogICAgX1NDX1hPUEVOX1hQRzIsCgogICAgX1ND X1hPUEVOX1hQRzMsCgogICAgX1NDX1hPUEVOX1hQRzQsCgoKICAgIF9TQ19DSEFSX0JJVCwKCiAg ICBfU0NfQ0hBUl9NQVgsCgogICAgX1NDX0NIQVJfTUlOLAoKICAgIF9TQ19JTlRfTUFYLAoKICAg IF9TQ19JTlRfTUlOLAoKICAgIF9TQ19MT05HX0JJVCwKCiAgICBfU0NfV09SRF9CSVQsCgogICAg X1NDX01CX0xFTl9NQVgsCgogICAgX1NDX05aRVJPLAoKICAgIF9TQ19TU0laRV9NQVgsCgogICAg X1NDX1NDSEFSX01BWCwKCiAgICBfU0NfU0NIQVJfTUlOLAoKICAgIF9TQ19TSFJUX01BWCwKCiAg ICBfU0NfU0hSVF9NSU4sCgogICAgX1NDX1VDSEFSX01BWCwKCiAgICBfU0NfVUlOVF9NQVgsCgog ICAgX1NDX1VMT05HX01BWCwKCiAgICBfU0NfVVNIUlRfTUFYLAoKCiAgICBfU0NfTkxfQVJHTUFY LAoKICAgIF9TQ19OTF9MQU5HTUFYLAoKICAgIF9TQ19OTF9NU0dNQVgsCgogICAgX1NDX05MX05N QVgsCgogICAgX1NDX05MX1NFVE1BWCwKCiAgICBfU0NfTkxfVEVYVE1BWCwKCgogICAgX1NDX1hC UzVfSUxQMzJfT0ZGMzIsCgogICAgX1NDX1hCUzVfSUxQMzJfT0ZGQklHLAoKICAgIF9TQ19YQlM1 X0xQNjRfT0ZGNjQsCgogICAgX1NDX1hCUzVfTFBCSUdfT0ZGQklHLAoKCiAgICBfU0NfWE9QRU5f TEVHQUNZLAoKICAgIF9TQ19YT1BFTl9SRUFMVElNRSwKCiAgICBfU0NfWE9QRU5fUkVBTFRJTUVf VEhSRUFEUywKCgogICAgX1NDX0FEVklTT1JZX0lORk8sCgogICAgX1NDX0JBUlJJRVJTLAoKICAg IF9TQ19CQVNFLAoKICAgIF9TQ19DX0xBTkdfU1VQUE9SVCwKCiAgICBfU0NfQ19MQU5HX1NVUFBP UlRfUiwKCiAgICBfU0NfQ0xPQ0tfU0VMRUNUSU9OLAoKICAgIF9TQ19DUFVUSU1FLAoKICAgIF9T Q19USFJFQURfQ1BVVElNRSwKCiAgICBfU0NfREVWSUNFX0lPLAoKICAgIF9TQ19ERVZJQ0VfU1BF Q0lGSUMsCgogICAgX1NDX0RFVklDRV9TUEVDSUZJQ19SLAoKICAgIF9TQ19GRF9NR01ULAoKICAg IF9TQ19GSUZPLAoKICAgIF9TQ19QSVBFLAoKICAgIF9TQ19GSUxFX0FUVFJJQlVURVMsCgogICAg X1NDX0ZJTEVfTE9DS0lORywKCiAgICBfU0NfRklMRV9TWVNURU0sCgogICAgX1NDX01PTk9UT05J Q19DTE9DSywKCiAgICBfU0NfTVVMVElfUFJPQ0VTUywKCiAgICBfU0NfU0lOR0xFX1BST0NFU1Ms CgogICAgX1NDX05FVFdPUktJTkcsCgogICAgX1NDX1JFQURFUl9XUklURVJfTE9DS1MsCgogICAg X1NDX1NQSU5fTE9DS1MsCgogICAgX1NDX1JFR0VYUCwKCiAgICBfU0NfUkVHRVhfVkVSU0lPTiwK CiAgICBfU0NfU0hFTEwsCgogICAgX1NDX1NJR05BTFMsCgogICAgX1NDX1NQQVdOLAoKICAgIF9T Q19TUE9SQURJQ19TRVJWRVIsCgogICAgX1NDX1RIUkVBRF9TUE9SQURJQ19TRVJWRVIsCgogICAg X1NDX1NZU1RFTV9EQVRBQkFTRSwKCiAgICBfU0NfU1lTVEVNX0RBVEFCQVNFX1IsCgogICAgX1ND X1RJTUVPVVRTLAoKICAgIF9TQ19UWVBFRF9NRU1PUllfT0JKRUNUUywKCiAgICBfU0NfVVNFUl9H Uk9VUFMsCgogICAgX1NDX1VTRVJfR1JPVVBTX1IsCgogICAgX1NDXzJfUEJTLAoKICAgIF9TQ18y X1BCU19BQ0NPVU5USU5HLAoKICAgIF9TQ18yX1BCU19MT0NBVEUsCgogICAgX1NDXzJfUEJTX01F U1NBR0UsCgogICAgX1NDXzJfUEJTX1RSQUNLLAoKICAgIF9TQ19TWU1MT09QX01BWCwKCiAgICBf U0NfU1RSRUFNUywKCiAgICBfU0NfMl9QQlNfQ0hFQ0tQT0lOVCwKCgogICAgX1NDX1Y2X0lMUDMy X09GRjMyLAoKICAgIF9TQ19WNl9JTFAzMl9PRkZCSUcsCgogICAgX1NDX1Y2X0xQNjRfT0ZGNjQs CgogICAgX1NDX1Y2X0xQQklHX09GRkJJRywKCgogICAgX1NDX0hPU1RfTkFNRV9NQVgsCgogICAg X1NDX1RSQUNFLAoKICAgIF9TQ19UUkFDRV9FVkVOVF9GSUxURVIsCgogICAgX1NDX1RSQUNFX0lO SEVSSVQsCgogICAgX1NDX1RSQUNFX0xPRwoKICB9OwoKCgoKCmVudW0KICB7CiAgICBfQ1NfUEFU SCwKCgoKCiAgICBfQ1NfTEZTX0NGTEFHUyA9IDEwMDAsCgogICAgX0NTX0xGU19MREZMQUdTLAoK ICAgIF9DU19MRlNfTElCUywKCiAgICBfQ1NfTEZTX0xJTlRGTEFHUywKCiAgICBfQ1NfTEZTNjRf Q0ZMQUdTLAoKICAgIF9DU19MRlM2NF9MREZMQUdTLAoKICAgIF9DU19MRlM2NF9MSUJTLAoKICAg IF9DU19MRlM2NF9MSU5URkxBR1MsCgoKCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfQ0ZMQUdT ID0gMTEwMCwKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MREZMQUdTLAoKICAgIF9DU19YQlM1 X0lMUDMyX09GRjMyX0xJQlMsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElOVEZMQUdTLAoK ICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZG QklHX0xERkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJQlMsCgogICAgX0NTX1hC UzVfSUxQMzJfT0ZGQklHX0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0NGTEFH UywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xERkxBR1MsCgogICAgX0NTX1hCUzVfTFA2NF9P RkY2NF9MSUJTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElOVEZMQUdTLAoKICAgIF9DU19Y QlM1X0xQQklHX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xERkxB R1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xJQlMsCgogICAgX0NTX1hCUzVfTFBCSUdf T0ZGQklHX0xJTlRGTEFHUywKCgoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9DRkxBR1Ms CgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xERkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2 X0lMUDMyX09GRjMyX0xJQlMsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xJTlRGTEFH UywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfUE9TSVhf VjZfSUxQMzJfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19M SUJTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfTElOVEZMQUdTLAoKICAgIF9DU19Q T1NJWF9WNl9MUDY0X09GRjY0X0NGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9M REZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0X09GRjY0X0xJQlMsCgogICAgX0NTX1BPU0lY X1Y2X0xQNjRfT0ZGNjRfTElOVEZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdf Q0ZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfTERGTEFHUywKCiAgICBfQ1Nf UE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xJQlMsCgogICAgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJ R19MSU5URkxBR1MsCgoKCiAgICBfQ1NfVjZfV0lEVEhfUkVTVFJJQ1RFRF9FTlZTCgogIH07CiMg NTAxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCmV4dGVybiBsb25nIGludCBwYXRoY29u ZiAoX19jb25zdCBjaGFyICpfX3BhdGgsIGludCBfX25hbWUpIHRocm93ICgpOwoKCmV4dGVybiBs b25nIGludCBmcGF0aGNvbmYgKGludCBfX2ZkLCBpbnQgX19uYW1lKSB0aHJvdyAoKTsKCgpleHRl cm4gbG9uZyBpbnQgc3lzY29uZiAoaW50IF9fbmFtZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCgpleHRlcm4gc2l6ZV90IGNvbmZzdHIgKGludCBfX25hbWUsIGNoYXIg Kl9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGlk ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gX19waWRfdCBnZXRwcGlkICh2b2lkKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBfX3BpZF90IGdldHBncnAgKHZvaWQpIHRocm93ICgpOwojIDUzNiAiL3Vz ci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IF9fZ2V0cGdpZCAoX19waWRfdCBf X3BpZCkgdGhyb3cgKCk7CgpleHRlcm4gX19waWRfdCBnZXRwZ2lkIChfX3BpZF90IF9fcGlkKSB0 aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBzZXRwZ2lkIChfX3BpZF90IF9fcGlkLCBfX3BpZF90 IF9fcGdpZCkgdGhyb3cgKCk7CiMgNTYyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJu IGludCBzZXRwZ3JwICh2b2lkKSB0aHJvdyAoKTsKIyA1ODAgIi91c3IvaW5jbHVkZS91bmlzdGQu aCIgMwpleHRlcm4gX19waWRfdCBzZXRzaWQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gX19w aWRfdCBnZXRzaWQgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoKCgpleHRlcm4gX191aWRfdCBn ZXR1aWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBfX3VpZF90IGdldGV1aWQgKHZvaWQpIHRo cm93ICgpOwoKCmV4dGVybiBfX2dpZF90IGdldGdpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJu IF9fZ2lkX3QgZ2V0ZWdpZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGdldGdyb3Vw cyAoaW50IF9fc2l6ZSwgX19naWRfdCBfX2xpc3RbXSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg Z3JvdXBfbWVtYmVyIChfX2dpZF90IF9fZ2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBz ZXR1aWQgKF9fdWlkX3QgX191aWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRyZXVpZCAo X191aWRfdCBfX3J1aWQsIF9fdWlkX3QgX19ldWlkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg c2V0ZXVpZCAoX191aWRfdCBfX3VpZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgc2V0Z2lk IChfX2dpZF90IF9fZ2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0cmVnaWQgKF9fZ2lk X3QgX19yZ2lkLCBfX2dpZF90IF9fZWdpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldGVn aWQgKF9fZ2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gX19waWRfdCBmb3JrICh2 b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fcGlkX3QgdmZvcmsgKHZvaWQpIHRocm93ICgp OwoKCgoKCmV4dGVybiBjaGFyICp0dHluYW1lIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVy biBpbnQgdHR5bmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxlbikg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXNhdHR5IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGludCB0dHlzbG90ICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbGluayAo X19jb25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgc3ltbGluayAoX19jb25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190 bykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHJlYWRsaW5rIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19wYXRoLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubGluayAoX19jb25zdCBj aGFyICpfX25hbWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcm1kaXIgKF9fY29uc3QgY2hhciAq X19wYXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9fcGlkX3QgdGNnZXRwZ3JwIChpbnQgX19mZCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0Y3NldHBncnAgKGludCBfX2ZkLCBfX3BpZF90IF9fcGdy cF9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXRsb2dpbiAodm9pZCkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gaW50IGdldGxvZ2luX3IgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbmFtZV9s ZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRsb2dpbiAoX19jb25zdCBjaGFyICpfX25h bWUpIHRocm93ICgpOwojIDcyNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2dldG9wdC5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVy biAiQyIgewojIDQ3ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGNoYXIgKm9wdGFy ZzsKIyA2MSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBpbnQgb3B0aW5kOwoKCgoK ZXh0ZXJuIGludCBvcHRlcnI7CgoKCmV4dGVybiBpbnQgb3B0b3B0OwojIDE0NSAiL3Vzci9pbmNs dWRlL2dldG9wdC5oIiAzCmV4dGVybiBpbnQgZ2V0b3B0IChpbnQgX19fYXJnYywgY2hhciAqY29u c3QgKl9fX2FyZ3YsIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzKTsKIyAxNzUgIi91c3IvaW5jbHVk ZS9nZXRvcHQuaCIgMwp9CiMgNzI3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgoKCgoK ZXh0ZXJuIGludCBnZXRob3N0bmFtZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93 ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldGhvc3RuYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwg c2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXRob3N0aWQgKGxvbmcgaW50 IF9faWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFtZSAoY2hhciAqX19u YW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IHNldGRvbWFpbm5hbWUgKF9f Y29uc3QgY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBp bnQgdmhhbmd1cCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCByZXZva2UgKF9fY29uc3Qg Y2hhciAqX19maWxlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHJvZmlsICh1bnNpZ25l ZCBzaG9ydCBpbnQgKl9fc2FtcGxlX2J1ZmZlciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAg ICAgICAgIHNpemVfdCBfX29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUpIHRocm93ICgpOwoK CgoKCmV4dGVybiBpbnQgYWNjdCAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpl eHRlcm4gY2hhciAqZ2V0dXNlcnNoZWxsICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgZW5k dXNlcnNoZWxsICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgc2V0dXNlcnNoZWxsICh2b2lk KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGRhZW1vbiAoaW50IF9fbm9jaGRpciwgaW50IF9f bm9jbG9zZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2hyb290IChfX2NvbnN0IGNoYXIg Kl9fcGF0aCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXRwYXNzIChfX2NvbnN0IGNoYXIg Kl9fcHJvbXB0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZzeW5jIChpbnQgX19mZCkgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBnZXRob3N0aWQgKHZvaWQpIHRocm93ICgpOwoK CmV4dGVybiB2b2lkIHN5bmMgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBnZXRwYWdl c2l6ZSAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0 ZXJuIGludCB0cnVuY2F0ZSAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmX3QgX19sZW5ndGgp IHRocm93ICgpOwojIDgzNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgdHJ1 bmNhdGU2NCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmNjRfdCBfX2xlbmd0aCkgdGhyb3cg KCk7CgoKCgpleHRlcm4gaW50IGZ0cnVuY2F0ZSAoaW50IF9fZmQsIF9fb2ZmX3QgX19sZW5ndGgp IHRocm93ICgpOwojIDg1MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgZnRy dW5jYXRlNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19sZW5ndGgpIHRocm93ICgpOwoKCgoKCmV4 dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSAodm9pZCkgdGhyb3cgKCk7CiMgODY2ICIvdXNyL2luY2x1 ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBicmsgKHZvaWQgKl9fYWRkcikgdGhyb3cgKCk7CgoK CgoKZXh0ZXJuIHZvaWQgKnNicmsgKGludHB0cl90IF9fZGVsdGEpIHRocm93ICgpOwojIDg4NyAi L3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBsb25nIGludCBzeXNjYWxsIChsb25nIGlu dCBfX3N5c25vLCAuLi4pIHRocm93ICgpOwojIDkwNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAz CmV4dGVybiBpbnQgbG9ja2YgKGludCBfX2ZkLCBpbnQgX19jbWQsIF9fb2ZmX3QgX19sZW4pIHRo cm93ICgpOwojIDkxNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgbG9ja2Y2 NCAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmY2NF90IF9fbGVuKSB0aHJvdyAoKTsKIyA5Mzgg Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGZkYXRhc3luYyAoaW50IF9fZmls ZGVzKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpjcnlwdCAoX19jb25zdCBjaGFyICpf X2tleSwgX19jb25zdCBjaGFyICpfX3NhbHQpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBlbmNy eXB0IChjaGFyICpfX2Jsb2NrLCBpbnQgX19lZGZsYWcpIHRocm93ICgpOwoKCgoKCgpleHRlcm4g dm9pZCBzd2FiIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19mcm9tLCB2b2lkICpfX3Jlc3Ry aWN0IF9fdG8sCiAgICAgICAgICAgICAgICAgIHNzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoK CmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwojIDk4MyAiL3Vzci9p bmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3By ZXBhcmUpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFyZW50 KSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAodm9p ZCkpIHRocm93ICgpOwoKCn0KIyA5OSAicGxhdGZvcm0uaCIgMgojIDExMCAicGxhdGZvcm0uaCIK IyAxICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvZGlyZW50 LmgiIDMKZXh0ZXJuICJDIiB7CiMgNjIgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL2RpcmVudC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvZGly ZW50LmgiIDMKc3RydWN0IGRpcmVudAogIHsKCiAgICBfX2lub190IGRfaW5vOwogICAgX19vZmZf dCBkX29mZjsKCgoKCiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgZF9yZWNsZW47CiAgICB1bnNpZ25l ZCBjaGFyIGRfdHlwZTsKICAgIGNoYXIgZF9uYW1lWzI1Nl07CiAgfTsKCgpzdHJ1Y3QgZGlyZW50 NjQKICB7CiAgICBfX2lubzY0X3QgZF9pbm87CiAgICBfX29mZjY0X3QgZF9vZmY7CiAgICB1bnNp Z25lZCBzaG9ydCBpbnQgZF9yZWNsZW47CiAgICB1bnNpZ25lZCBjaGFyIGRfdHlwZTsKICAgIGNo YXIgZF9uYW1lWzI1Nl07CiAgfTsKIyA2MyAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMKIyA5 OCAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAzCmVudW0KICB7CiAgICBEVF9VTktOT1dOID0gMCwK CiAgICBEVF9GSUZPID0gMSwKCiAgICBEVF9DSFIgPSAyLAoKICAgIERUX0RJUiA9IDQsCgogICAg RFRfQkxLID0gNiwKCiAgICBEVF9SRUcgPSA4LAoKICAgIERUX0xOSyA9IDEwLAoKICAgIERUX1NP Q0sgPSAxMiwKCiAgICBEVF9XSFQgPSAxNAoKICB9OwojIDEyOCAiL3Vzci9pbmNsdWRlL2RpcmVu dC5oIiAzCnR5cGVkZWYgc3RydWN0IF9fZGlyc3RyZWFtIERJUjsKCgoKZXh0ZXJuIERJUiAqb3Bl bmRpciAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNsb3Nl ZGlyIChESVIgKl9fZGlycCkgdGhyb3cgKCk7CiMgMTQ2ICIvdXNyL2luY2x1ZGUvZGlyZW50Lmgi IDMKZXh0ZXJuIHN0cnVjdCBkaXJlbnQgKnJlYWRkaXIgKERJUiAqX19kaXJwKSB0aHJvdyAoKTsK IyAxNTYgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gc3RydWN0IGRpcmVudDY0ICpy ZWFkZGlyNjQgKERJUiAqX19kaXJwKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCByZWFkZGly X3IgKERJUiAqX19yZXN0cmljdCBfX2RpcnAsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZGlyZW50ICpfX3Jlc3RyaWN0IF9fZW50cnksCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZGlyZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CiMgMTc5ICIvdXNyL2luY2x1 ZGUvZGlyZW50LmgiIDMKZXh0ZXJuIGludCByZWFkZGlyNjRfciAoRElSICpfX3Jlc3RyaWN0IF9f ZGlycCwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudDY0ICpfX3Jlc3RyaWN0 IF9fZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQ2NCAqKl9fcmVz dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcmV3aW5kZGlyIChESVIg Kl9fZGlycCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2Vla2RpciAoRElSICpfX2RpcnAs IGxvbmcgaW50IF9fcG9zKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgdGVsbGRpciAoRElS ICpfX2RpcnApIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZGlyZmQgKERJUiAqX19kaXJwKSB0 aHJvdyAoKTsKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMK IyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGlt LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMwojIDM3ICIvdXNyL2lu Y2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3Np eDFfbGltLmgiIDIgMwojIDIxMCAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMKIyAyMjAgIi91 c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDIyMSAiL3Vzci9pbmNsdWRlL2RpcmVu dC5oIiAyIDMKCgoKCgoKZXh0ZXJuIGludCBzY2FuZGlyIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19kaXIsCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudCAqKipfX3Jlc3RyaWN0 IF9fbmFtZWxpc3QsCiAgICAgICAgICAgICAgICAgICAgaW50ICgqX19zZWxlY3RvcikgKF9fY29u c3Qgc3RydWN0IGRpcmVudCAqKSwKICAgICAgICAgICAgICAgICAgICBpbnQgKCpfX2NtcCkgKF9f Y29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKikpIHRocm93ICgpOwojIDI0NyAiL3Vzci9pbmNs dWRlL2RpcmVudC5oIiAzCmV4dGVybiBpbnQgc2NhbmRpcjY0IChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19kaXIsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50NjQgKioqX19y ZXN0cmljdCBfX25hbWVsaXN0LAogICAgICAgICAgICAgICAgICAgICAgaW50ICgqX19zZWxlY3Rv cikgKF9fY29uc3Qgc3RydWN0IGRpcmVudDY0ICopLAogICAgICAgICAgICAgICAgICAgICAgaW50 ICgqX19jbXApIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBpbnQgYWxwaGFzb3J0IChfX2NvbnN0IHZvaWQgKl9fZTEsIF9fY29uc3Qgdm9pZCAq X19lMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyAyNjkgIi91 c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gaW50IGFscGhhc29ydDY0IChfX2NvbnN0IHZv aWQgKl9fZTEsIF9fY29uc3Qgdm9pZCAqX19lMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gaW50IHZlcnNpb25zb3J0IChfX2NvbnN0IHZvaWQg Kl9fZTEsIF9fY29uc3Qgdm9pZCAqX19lMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKIyAyOTAgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gaW50IHZl cnNpb25zb3J0NjQgKF9fY29uc3Qgdm9pZCAqX19lMSwgX19jb25zdCB2b2lkICpfX2UyKQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwojIDMwMCAiL3Vzci9pbmNsdWRl L2RpcmVudC5oIiAzCmV4dGVybiBfX3NzaXplX3QgZ2V0ZGlyZW50cmllcyAoaW50IF9fZmQsIGNo YXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IF9fbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmX3QgKl9f cmVzdHJpY3QgX19iYXNlcCkgdGhyb3cgKCk7CiMgMzE2ICIvdXNyL2luY2x1ZGUvZGlyZW50Lmgi IDMKZXh0ZXJuIF9fc3NpemVfdCBnZXRkaXJlbnRyaWVzNjQgKGludCBfX2ZkLCBjaGFyICpfX3Jl c3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f bmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vZmY2NF90ICpfX3Jl c3RyaWN0IF9fYmFzZXApIHRocm93ICgpOwoKCgoKfQojIDExMSAicGxhdGZvcm0uaCIgMgojIDEx OSAicGxhdGZvcm0uaCIKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgMzcgIi91c3Iv aW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjEvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyA1NCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxF IEZJTEU7CiMgNjQgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xL2luY2x1 ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgMzggIi91c3Iv aW5jbHVkZS93Y2hhci5oIiAyIDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4xL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvdXNyL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19idWlsdGlu X3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMK CgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzCiMgMzIxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyA0 OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hh ci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDY3ICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMwp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7 CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19t YnN0YXRlX3Q7CiMgODUgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgX19tYnN0YXRl X3QgbWJzdGF0ZV90OwojIDEwNSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKc3RydWN0IHRtOwoK CmV4dGVybiAiQyIgewoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVy biB3Y2hhcl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgp OwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3Jj LCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzY21wIChfX2NvbnN0 IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3Y2hh cl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgd2NzY2FzZWNtcCAo X19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgpOwoK CmV4dGVybiBpbnQgd2NzbmNhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3 Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gaW50IF9fd2NzY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEs IF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2Nh bGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9fd2NzbmNhc2VjbXBfbCAoX19jb25z dCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBpbnQgd2NzY29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3Qg Kl9fczIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3QgKl9fcmVz dHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IF9fd2Nz Y29sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAg ICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCmV4dGVy biBzaXplX3QgX193Y3N4ZnJtX2wgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19z MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xv YykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19jb25zdCB3Y2hhcl90ICpf X3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB3Y2hh cl90ICp3Y3NjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3Ny Y2hyIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hybnVs IChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2NvbnN0 IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChfX2Nv bnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3Bicmsg KF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2Nz c3RyIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVk bGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB3 Y2hhcl90ICp3Y3N3Y3MgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3Y2hh cl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgoKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2RlbGltLAog ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3B0cikgdGhyb3cg KCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NubGVuIChf X2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIgKF9fY29u c3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHdtZW1jbXAgKF9fY29uc3Qg d2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5ICh3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90 ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3Qg X19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90ICpf X3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hhcl90 ICp3bWVtcGNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAg IHRocm93ICgpOwoKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIHRocm93ICgpOwoK CgpleHRlcm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBt YnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0cmlj dCBfX3B3YywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19wKSB0 aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjcnRvbWIgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCB3 Y2hhcl90IF9fd2MsCiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0 IF9fcHMpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3QgX19tYnJsZW4gKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgIG1ic3Rh dGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBtYnJsZW4gKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAg ICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCmV4dGVybiBfX2lu bGluZSBzaXplX3QgbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0 IF9fcHMpIHRocm93ICgpCnsgcmV0dXJuIChfX3BzICE9IF9fbnVsbAogICAgICAgICAgPyBtYnJ0 b3djIChfX251bGwsIF9fcywgX19uLCBfX3BzKSA6IF9fbWJybGVuIChfX3MsIF9fbiwgX19udWxs KSk7IH0KCgoKCmV4dGVybiBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f ZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBf X3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpf X3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAoY2hh ciAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No YXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAg ICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g c2l6ZV90IG1ic25ydG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9f bm1jLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpf X3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25ydG9tYnMgKGNo YXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3 Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgX19ud2MsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRl X3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgd2N3aWR0aCAo d2NoYXJfdCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjc3dpZHRoIChfX2NvbnN0IHdj aGFyX3QgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSB3Y3N0 b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBm bG9hdCB3Y3N0b2YgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKZXh0 ZXJuIGxvbmcgZG91YmxlIHdjc3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu ZHB0cikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAoX19jb25zdCB3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgpleHRlcm4gdW5z aWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpl eHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2No YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu IGxvbmcgbG9uZyBpbnQgd2NzdG9sbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l bmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91bGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDQxMCAiL3Vzci9pbmNsdWRlL3djaGFy LmgiIDMKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0 cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f bG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2Nz dG91bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxl X3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBf X3djc3RvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBf X2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcg aW50IF9fd2NzdG91bGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRv dWJsZSBfX3djc3RvZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xv Y2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2wgKF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0 aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfbCAoX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIF9fd2NzdG9k X2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50 IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3djc3RvZl9pbnRlcm5hbCAo X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAg ICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfaW50ZXJuYWwgKF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGxvbmcgaW50IF9fd2NzdG9sX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50 IF9fd2NzdG91bF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9f CmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoK Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9p bnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKioKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSB3 Y3N0b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkK eyByZXR1cm4gX193Y3N0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOyB9CmV4dGVy biBfX2lubGluZSBsb25nIGludCB3Y3N0b2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl KSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwg X19iYXNlLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bCAo X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cg KCkKeyByZXR1cm4gX193Y3N0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us IDApOyB9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG9mX2ludGVybmFs IChfX25wdHIsIF9fZW5kcHRyLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgd2Nz dG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJv dyAoKQp7IHJldHVybiBfX3djc3RvbGRfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOyB9 CgoKX19leHRlbnNpb25fXwpleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludCB3Y3N0b3EgKF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKeyByZXR1cm4g X193Y3N0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9Cl9fZXh0 ZW5zaW9uX18KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAo X19jb25zdCB3Y2hhcl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJv dyAoKQp7IHJldHVybiBfX3djc3RvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jh c2UsIDApOyB9CgoKCgoKCgpleHRlcm4gd2NoYXJfdCAqd2NwY3B5ICh3Y2hhcl90ICpfX2Rlc3Qs IF9fY29uc3Qgd2NoYXJfdCAqX19zcmMpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2Nw bmNweSAod2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjLCBzaXplX3QgX19u KQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmd2lkZSAoX19GSUxFICpfX2ZwLCBp bnQgX19tb2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmd3ByaW50ZiAoX19GSUxFICpfX3Jl c3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHdwcmlu dGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93 ICgpIDsKCmV4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXpl X3QgX19uLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJuIGludCB2ZndwcmludGYgKF9f RklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf bGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3cHJpbnRmIChfX2NvbnN0 IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251 Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZzd3ByaW50ZiAo d2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKCmV4dGVybiBpbnQg ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAg IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgp IDsKCmV4dGVybiBpbnQgd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3Jt YXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHN3c2NhbmYgKF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCgoKZXh0ZXJuIGlu dCB2ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAg X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAg ICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3c2Nh bmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZz d3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAg ICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgoKCmV4dGVybiB3 aW50X3QgZmdldHdjIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBn ZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hh ciAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3QgZnB1dHdjICh3Y2hhcl90IF9fd2Ms IF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IHB1dHdjICh3Y2hhcl90 IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgcHV0d2No YXIgKHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gd2NoYXJfdCAqZmdldHdzICh3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg IF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmcHV0 d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAogICAgICAgICAgICAgICAgICAg X19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCB1 bmdldHdjICh3aW50X3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4 dGVybiB3aW50X3QgZ2V0d2NoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB3 aW50X3QgZmdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl cm4gd2ludF90IGZwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3dj LCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhcl91bmxv Y2tlZCAod2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3c191 bmxvY2tlZCAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp OwoKCmV4dGVybiBpbnQgZnB1dHdzX3VubG9ja2VkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBf X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBzaXplX3Qgd2NzZnRpbWUgKHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwojIDY4 MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKfQojIDEyMCAicGxhdGZvcm0uaCIgMgoKCgojIDEg Ii91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMK ZXh0ZXJuICJDIiB7CiMgNDcgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmVudW0KewogIF9JU3Vw cGVyID0gKCgwKSA8IDggPyAoKDEgPDwgKDApKSA8PCA4KSA6ICgoMSA8PCAoMCkpID4+IDgpKSwK ICBfSVNsb3dlciA9ICgoMSkgPCA4ID8gKCgxIDw8ICgxKSkgPDwgOCkgOiAoKDEgPDwgKDEpKSA+ PiA4KSksCiAgX0lTYWxwaGEgPSAoKDIpIDwgOCA/ICgoMSA8PCAoMikpIDw8IDgpIDogKCgxIDw8 ICgyKSkgPj4gOCkpLAogIF9JU2RpZ2l0ID0gKCgzKSA8IDggPyAoKDEgPDwgKDMpKSA8PCA4KSA6 ICgoMSA8PCAoMykpID4+IDgpKSwKICBfSVN4ZGlnaXQgPSAoKDQpIDwgOCA/ICgoMSA8PCAoNCkp IDw8IDgpIDogKCgxIDw8ICg0KSkgPj4gOCkpLAogIF9JU3NwYWNlID0gKCg1KSA8IDggPyAoKDEg PDwgKDUpKSA8PCA4KSA6ICgoMSA8PCAoNSkpID4+IDgpKSwKICBfSVNwcmludCA9ICgoNikgPCA4 ID8gKCgxIDw8ICg2KSkgPDwgOCkgOiAoKDEgPDwgKDYpKSA+PiA4KSksCiAgX0lTZ3JhcGggPSAo KDcpIDwgOCA/ICgoMSA8PCAoNykpIDw8IDgpIDogKCgxIDw8ICg3KSkgPj4gOCkpLAogIF9JU2Js YW5rID0gKCg4KSA8IDggPyAoKDEgPDwgKDgpKSA8PCA4KSA6ICgoMSA8PCAoOCkpID4+IDgpKSwK ICBfSVNjbnRybCA9ICgoOSkgPCA4ID8gKCgxIDw8ICg5KSkgPDwgOCkgOiAoKDEgPDwgKDkpKSA+ PiA4KSksCiAgX0lTcHVuY3QgPSAoKDEwKSA8IDggPyAoKDEgPDwgKDEwKSkgPDwgOCkgOiAoKDEg PDwgKDEwKSkgPj4gOCkpLAogIF9JU2FsbnVtID0gKCgxMSkgPCA4ID8gKCgxIDw8ICgxMSkpIDw8 IDgpIDogKCgxIDw8ICgxMSkpID4+IDgpKQp9OwojIDc1ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIg MwpleHRlcm4gX19jb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKZXh0ZXJuIF9f Y29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvbG93ZXI7CmV4dGVybiBfX2NvbnN0IF9faW50MzJf dCAqX19jdHlwZV90b3VwcGVyOwojIDkxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4g aW50IGlzYWxudW0gKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNhbHBoYSAoaW50KSB0aHJv dyAoKTsKZXh0ZXJuIGludCBpc2NudHJsIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZGln aXQgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNsb3dlciAoaW50KSB0aHJvdyAoKTsKZXh0 ZXJuIGludCBpc2dyYXBoIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHJpbnQgKGludCkg dGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwdW5jdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBp c3NwYWNlIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzdXBwZXIgKGludCkgdGhyb3cgKCk7 CmV4dGVybiBpbnQgaXN4ZGlnaXQgKGludCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc2JsYW5r IChpbnQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB0b2xvd2VyIChpbnQgX19jKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHRvdXBwZXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4g aW50IGlzYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHRvYXNjaWkgKGlu dCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF90b3VwcGVyIChpbnQpIHRocm93ICgpOwpl eHRlcm4gaW50IF90b2xvd2VyIChpbnQpIHRocm93ICgpOwojIDE2NyAiL3Vzci9pbmNsdWRlL2N0 eXBlLmgiIDMKZXh0ZXJuIF9faW5saW5lIGludAp0b2xvd2VyIChpbnQgX19jKSB0aHJvdyAoKQp7 CiAgcmV0dXJuIF9fYyA+PSAtMTI4ICYmIF9fYyA8IDI1NiA/IF9fY3R5cGVfdG9sb3dlcltfX2Nd IDogX19jOwp9CgpleHRlcm4gX19pbmxpbmUgaW50CnRvdXBwZXIgKGludCBfX2MpIHRocm93ICgp CnsKICByZXR1cm4gX19jID49IC0xMjggJiYgX19jIDwgMjU2ID8gX19jdHlwZV90b3VwcGVyW19f Y10gOiBfX2M7Cn0KIyAyMjMgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgX19p c2FsbnVtX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2FscGhh X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2NudHJsX2wgKGlu dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2RpZ2l0X2wgKGludCwgX19s b2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2xvd2VyX2wgKGludCwgX19sb2NhbGVf dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2dyYXBoX2wgKGludCwgX19sb2NhbGVfdCkgdGhy b3cgKCk7CmV4dGVybiBpbnQgX19pc3ByaW50X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7 CmV4dGVybiBpbnQgX19pc3B1bmN0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVy biBpbnQgX19pc3NwYWNlX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg X19pc3VwcGVyX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3hk aWdpdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX2lzYmxhbmtf bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAo aW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX190b3VwcGVy X2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKIyAyNzYgIi91c3IvaW5jbHVk ZS9jdHlwZS5oIiAzCn0KIyAxMjQgInBsYXRmb3JtLmgiIDIKCgoKIyAxICIvdXNyL2luY2x1ZGUv YXNzZXJ0LmgiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKZXh0ZXJuICJDIiB7 CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwg X19jb25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9y X2ZhaWwgKGludCBfX2Vycm51bSwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0 IChjb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5l KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgp9CiMgMTI4 ICJwbGF0Zm9ybS5oIiAyCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjEvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAzOSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91 c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDEg MwojIDQ0ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL3N0 ZGlvLmgiIDIgMwojIDc0ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9p bmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiMgMzIgIi91 c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMK IyAxNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTUgIi91c3IvaW5j bHVkZS9fR19jb25maWcuaCIgMiAzCiMgMjYgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwp0 eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9 IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3Rh dGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmln LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9n Y29udi5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEvaW5j bHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoKCgpl bnVtCnsKICBfX0dDT05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIs CiAgX19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExf T1VUUFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5Q VVQsCgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJS T1IKfTsKCgoKZW51bQp7CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdO T1JFX0VSUk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19n Y29udl9zdGVwX2RhdGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2dj b252X3RyYW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19n Y29udl9zdGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVf dCAqLCBpbnQsIGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0 IF9fZ2NvbnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0 IF9fZ2NvbnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0 cnVjdCBfX2djb252X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYg aW50ICgqX19nY29udl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25l ZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBpbnQgKCpf X2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5 cGVkZWYgaW50ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIg Kik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1 Y3QgX19nY29udl90cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7 CiAgX19nY29udl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2Nv bnZfdHJhbnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVj dCBfX2djb252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7 CiAgc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25z dCBjaGFyICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1l OwogIGNoYXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0 X2ZjdCBfX2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9f bWluX25lZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVl ZGVkX3RvOwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9p ZCAqX19kYXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNo YXIgKl9fb3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2Zs YWdzOwoKCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91 c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgog IHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0 IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAg Kl9fc3RlcHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRh IFtdOwp9ICpfX2djb252X3Q7CiMgNDUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5 cGVkZWYgdW5pb24KewogIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAg ICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEg X19kYXRhOwogIH0gX19jb21iaW5lZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50 MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0df aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNp Z25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7 CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf XyAoX19TSV9fKSkpOwojIDMzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNTMgIi91c3Iv aW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjEvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAy IDMKIyAxNjAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fanVtcF90OyBzdHJ1 Y3QgX0lPX0ZJTEU7CiMgMTcwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIHZvaWQg X0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIg Kl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7CiMgMTkzICIv dXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19j b2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2Nv ZGVjdnRfbm9jb252Cn07CiMgMjYxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lP X0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBf SU9fcmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFz ZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciog X0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNl OwogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVj dCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGlu dCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVu c2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0Owog IGNoYXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDMwNSAiL3Vzci9p bmNsdWRlL2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgoKCgogIHZvaWQgKl9fcGFk MTsKICB2b2lkICpfX3BhZDI7CgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNp emVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJ TEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0 ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBf SU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsKIyAzNDQgIi91c3IvaW5jbHVkZS9saWJpby5o IiAzCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIg Kl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193 cml0ZV9mbiAodm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBpbnQgX19p b19zZWVrX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9fdyk7CgoK dHlwZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9pZCAqX19jb29raWUpOwoKCgoKdHlwZWRlZiBf X2lvX3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2Zu IGNvb2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vl a19mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9u X3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9faW9fcmVhZF9mbiAqcmVhZDsKICBfX2lvX3dyaXRl X2ZuICp3cml0ZTsKICBfX2lvX3NlZWtfZm4gKnNlZWs7CiAgX19pb19jbG9zZV9mbiAqY2xvc2U7 Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKdHlwZWRlZiBfSU9fY29va2llX2lvX2Z1bmN0 aW9uc190IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsKCnN0cnVjdCBfSU9fY29va2llX2ZpbGU7CgoK ZXh0ZXJuIHZvaWQgX0lPX2Nvb2tpZV9pbml0IChzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlICpfX2Nm aWxlLCBpbnQgX19yZWFkX3dyaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg Kl9fY29va2llLCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9fZm5zKTsKCgoKCmV4dGVybiAi QyIgewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRl cm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fb3ZlcmZs b3cgKF9JT19GSUxFICosIGludCkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dW5kZXJmbG93 IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lPX0ZJTEUg KikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRf dCkgdGhyb3cgKCk7CiMgNDI2ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9J T19nZXRjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGlu dCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lP X0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpf X2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9f ZnApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICop IHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93 ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwoj IDQ1NiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lP X0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAgICAg ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4 dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAq X19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0aHJv dyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXpl X3QpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAq LCBzaXplX3QpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJ TEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgX0lP X3NlZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVybiB2 b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKIyA1MTQgIi91 c3IvaW5jbHVkZS9saWJpby5oIiAzCn0KIyA3NSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjEvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xp c3QgX19ub3RfdmFfbGlzdF9fOwojIDg5ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBfR19mcG9zX3QgZnBvc190OwoKCgoK dHlwZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxMzggIi91c3IvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9i aXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxMzkgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCmV4dGVybiBGSUxFICpzdGRpbjsKZXh0 ZXJuIEZJTEUgKnN0ZG91dDsKZXh0ZXJuIEZJTEUgKnN0ZGVycjsKCgoKCgoKZXh0ZXJuIGludCBy ZW1vdmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHJl bmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhyb3cgKCk7 CgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCk7CiMgMTY3ICIvdXNyL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJu IEZJTEUgKnRtcGZpbGU2NCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnRtcG5hbSAo Y2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19z KSB0aHJvdyAoKTsKIyAxODcgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4x L2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpf X2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZv cGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4g RklMRSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAg ICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDIz MSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRpby5o IiAzCmV4dGVybiBGSUxFICpmb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxl bmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21v ZGVzKSB0aHJvdyAoKTsKZXh0ZXJuIEZJTEUgKmZyZW9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpmZG9wZW4gKGludCBfX2Zk LCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKCmV4dGVybiBGSUxFICpmb3Bl bmNvb2tpZSAodm9pZCAqX19yZXN0cmljdCBfX21hZ2ljX2Nvb2tpZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAg ICAgICAgICAgICAgICBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9faW9fZnVuY3MpIHRocm93 ICgpOwoKCmV4dGVybiBGSUxFICpmbWVtb3BlbiAodm9pZCAqX19zLCBzaXplX3QgX19sZW4sIF9f Y29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1z dHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fYnVmbG9jLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX3NpemVsb2MpIHRocm93ICgpOwoKCgoKCmV4dGVy biB2b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmlj dCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICBp bnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBzZXRidWZm ZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZv aWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBm cHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBp bnQgcHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cg KCk7CgpleHRlcm4gaW50IHNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHZmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf bGlzdCBfX2FyZykgdGhyb3cgKCk7CgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCk7 CgpleHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz dCBfX2FyZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJp Y3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0ZXJuIGludCB2c25wcmludGYg KGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9f YXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9f LCAzLCAwKSkpOwoKCgoKCmV4dGVybiBpbnQgdmFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBf X3B0ciwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZiwKICAgICAgICAgICAgICAgICAgICAg IF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zv cm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IF9fYXNwcmludGYgKGNoYXIg KipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zv cm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwpleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoq X19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0 X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKZXh0ZXJuIGludCB2ZHByaW50ZiAoaW50IF9fZmQs IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwKICAgICAgICAgICAgICAgICAgICAgX19n bnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0 X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgZHByaW50ZiAoaW50IF9fZmQsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCgoKZXh0ZXJuIGludCBm c2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50 IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7 CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgIF9fZ251Y192 YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf X3NjYW5mX18sIDIsIDApKSk7CgoKZXh0ZXJuIGludCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMSwgMCkpKTsKCgpleHRlcm4gaW50 IHZzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2Fy ZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAy LCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpl eHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdl dGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9p ZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgpl eHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpmZ2V0c191bmxv Y2tlZCAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g Y2hhciAqZ2V0cyAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyA0MzUgIi91c3IvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gX19zc2l6ZV90 IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p IHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBf X2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0 IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBfX3NzaXplX3QgZ2V0bGlu ZSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJ TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0cyAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkK ICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFy ICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50IF9fYywgRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0 IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3QgZndyaXRl IChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykgdGhyb3cgKCk7 CgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIs IHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24s IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IGZ3cml0 ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXpl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0 cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gbG9u ZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHJld2lu ZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDQ5OCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvIChG SUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4 dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4g aW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3NfdCAqX19yZXN0cmlj dCBfX3BvcykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJl YW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgdGhyb3cgKCk7CiMgNTMyICIvdXNyL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBm c2Vla282NCAoRklMRSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0 aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwpleHRlcm4gaW50IGZnZXRwb3M2NCAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBv czY0X3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBpbnQgZnNldHBv czY0IChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAqX19wb3MpIHRocm93ICgpOwoK CgpleHRlcm4gdm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJu IGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlcnJvciAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tl ZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFy ICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXNfbmVycjsKZXh0ZXJuIF9fY29uc3Qg Y2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwoKCmV4dGVybiBpbnQgX3N5c19uZXJyOwpleHRl cm4gX19jb25zdCBjaGFyICpfX2NvbnN0IF9zeXNfZXJybGlzdFtdOwoKCgoKCmV4dGVybiBpbnQg ZmlsZW5vIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZpbGVub191 bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqcG9w ZW4gKF9fY29uc3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNo YXIgKmN1c2VyaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpzdHJ1Y3Qgb2JzdGFjazsKCgpl eHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29i c3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBvYnN0YWNrX3ZwcmludGYgKHN0 cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJncykgdGhyb3cgKCk7CgoKCgoKCgpleHRl cm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu dCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBm dW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDYzOSAiL3Vzci9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvc3RkaW8uaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgi IDMKaW5saW5lIGludAp2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIF9f Z251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQp7CiAgcmV0dXJuIHZmcHJpbnRmIChzdGRvdXQs IF9fZm10LCBfX2FyZyk7Cn0KCgppbmxpbmUgaW50CmdldGNoYXIgKHZvaWQpIHRocm93ICgpCnsK ICByZXR1cm4gX0lPX2dldGMgKHN0ZGluKTsKfQoKCgoKaW5saW5lIGludApnZXRjX3VubG9ja2Vk IChGSUxFICpfX2ZwKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoX19mcCktPl9JT19yZWFkX3B0ciA+ PSAoX19mcCktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKF9fZnApIDogKih1bnNpZ25lZCBjaGFy ICopIChfX2ZwKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKaW5saW5lIGludApnZXRjaGFyX3VubG9j a2VkICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoc3RkaW4pLT5fSU9fcmVhZF9wdHIgPj0g KHN0ZGluKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoc3RkaW4pIDogKih1bnNpZ25lZCBjaGFy ICopIChzdGRpbiktPl9JT19yZWFkX3B0cisrKTsKfQoKCgoKaW5saW5lIGludApwdXRjaGFyIChp bnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9JT19wdXRjIChfX2MsIHN0ZG91dCk7Cn0KCgoK CmlubGluZSBpbnQKZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJlYW0p LT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hhcikg KF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisrID0g KF9fYykpKTsKfQoKCgoKCmlubGluZSBpbnQKcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAq X19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRy ID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoX19zdHJlYW0sICh1 bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooX19zdHJlYW0pLT5fSU9f d3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKaW5saW5lIGludApwdXRjaGFyX3VubG9ja2VkIChp bnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKHN0ZG91dCktPl9JT193cml0ZV9wdHIgPj0g KHN0ZG91dCktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoc3Rkb3V0LCAodW5zaWduZWQg Y2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHN0ZG91dCktPl9JT193cml0ZV9wdHIr KyA9IChfX2MpKSk7Cn0KCgoKCgppbmxpbmUgX19zc2l6ZV90CmdldGxpbmUgKGNoYXIgKipfX2xp bmVwdHIsIHNpemVfdCAqX19uLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiBf X2dldGRlbGltIChfX2xpbmVwdHIsIF9fbiwgJ1xuJywgX19zdHJlYW0pOwp9CgoKCgoKaW5saW5l IGludApmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAo KChfX3N0cmVhbSktPl9mbGFncyAmIDB4MTApICE9IDApOwp9CgoKaW5saW5lIGludApmZXJyb3Jf dW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFt KS0+X2ZsYWdzICYgMHgyMCkgIT0gMCk7Cn0KIyA2NDAgIi91c3IvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKfQojIDEzMiAicGxhdGZvcm0u aCIgMgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xL2luY2x1 ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMS9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjEvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzCgoKCgoKCiMgMSAiL3Vzci9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTMy ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL2xpbWl0cy5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxNDggIi91c3IvaW5jbHVkZS9s aW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiMgMTQ5 ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3hv cGVuX2xpbS5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9i aXRzL3hvcGVuX2xpbS5oIiAyIDMKIyAxMzYgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMTM3ICIvdXNyL2lu Y2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMgMTUzICIvdXNyL2luY2x1ZGUvbGltaXRzLmgi IDIgMwojIDEzMyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVk ZS9saW1pdHMuaCIgMiAzCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjEvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzCiMgMTIgIi91c3IvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4xL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDEzNiAicGxhdGZvcm0uaCIg MgoKCgojIDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvbWF0 aC5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgi IDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9uYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0 aGRlZi5oIiAzCnR5cGVkZWYgbG9uZyBkb3VibGUgZmxvYXRfdDsKCnR5cGVkZWYgbG9uZyBkb3Vi bGUgZG91YmxlX3Q7CiMgNDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDYzICIvdXNyL2lu Y2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwoj IDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIGFjb3Mg KGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYWNvcyAoZG91YmxlIF9feCkg dGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gZG91YmxlIF9fYXNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0 YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbiAoZG91YmxlIF9f eCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194 KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBkb3VibGUgX19jb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBz aW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2luIChkb3VibGUgX194 KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX3RhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIHNp bmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAo KTsgZXh0ZXJuIHZvaWQgX19zaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3Vi bGUgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgY29zaCAoZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19jb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsK CmV4dGVybiBkb3VibGUgc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg X19zaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgdGFuaCAoZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190YW5oIChkb3VibGUgX194KSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk b3VibGUgX19hY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGFzaW5o IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2FzaW5oIChkb3VibGUgX194 KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gZG91YmxlIF9fYXRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBk b3VibGUgZXhwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cCAoZG91 YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZXhwMTAgKGRvdWJsZSBfX3gpIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0 ZXJuIGRvdWJsZSBwb3cxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19w b3cxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZnJleHAgKGRvdWJs ZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mcmV4cCAo ZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxk ZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg X19sZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBk b3VibGUgbG9nIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZyAoZG91 YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGRvdWJsZSBtb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4 dGVybiBkb3VibGUgX19tb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7 CgoKCmV4dGVybiBkb3VibGUgZXhwbTEgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91 YmxlIF9fZXhwbTEgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMXAg KGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nMXAgKGRvdWJsZSBfX3gp IHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBkb3VibGUgX19sb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3Vi bGUgZXhwMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAyIChkb3Vi bGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzIgKGRvdWJsZSBfX3gpIHRocm93 ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBkb3VibGUgcG93IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX3BvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGRvdWJsZSBzcXJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NxcnQg KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGh5cG90IChkb3VibGUgX194 LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2h5cG90IChkb3VibGUgX194 LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgY2JydCAoZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19jYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIGRvdWJsZSBjZWlsIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX2NlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZmFicyAo ZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g ZG91YmxlIF9fZmFicyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCmV4dGVybiBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gZG91YmxlIF9fZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUg Zm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19m bW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19p c2luZiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgpleHRlcm4gaW50IF9fZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZiAoZG91YmxlIF9fdmFs dWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZp bml0ZSAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgpleHRlcm4gZG91YmxlIGRyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7 CgoKCmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gZG91YmxlIF9fc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGRvdWJsZSBjb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fY29weXNpZ24gKGRvdWJsZSBf X3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK CmV4dGVybiBkb3VibGUgbmFuIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmFuIChfX2NvbnN0IGNoYXIg Kl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJu IGludCBfX2lzbmFuIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFuIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgajAgKGRvdWJsZSkg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qMCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRv dWJsZSBqMSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2oxIChkb3VibGUpIHRo cm93ICgpOwpleHRlcm4gZG91YmxlIGpuIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBk b3VibGUgX19qbiAoaW50LCBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIHkwIChkb3Vi bGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9feTAgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVy biBkb3VibGUgeTEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195MSAoZG91Ymxl KSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5biAoaW50LCBkb3VibGUpIHRocm93ICgpOyBleHRl cm4gZG91YmxlIF9feW4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91Ymxl IGVyZiAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZiAoZG91YmxlKSB0aHJv dyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmZjIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl IF9fZXJmYyAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBsZ2FtbWEgKGRvdWJsZSkg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCmV4 dGVybiBkb3VibGUgdGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGdh bW1hIChkb3VibGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBnYW1tYSAoZG91YmxlKSB0 aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2dhbW1hIChkb3VibGUpIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gZG91YmxlIGxnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7 IGV4dGVybiBkb3VibGUgX19sZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93 ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gZG91YmxlIF9fcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBu ZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25leHRhZnRlciAoZG91YmxlIF9feCwgZG91 YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGRv dWJsZSBuZXh0dG93YXJkIChkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25leHR0b3dhcmQgKGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCgpleHRlcm4gZG91YmxlIHJlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9f eSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJs ZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHNjYWxiIChkb3VibGUgX194LCBkb3Vi bGUgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxiIChkb3VibGUgX194LCBkb3Vi bGUgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGJuIChkb3VibGUgX194LCBp bnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibiAoZG91YmxlIF9feCwgaW50 IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gaW50IF9faWxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRv dWJsZSBzY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fc2NhbGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGRvdWJsZSBuZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91 YmxlIF9fbmVhcmJ5aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBy b3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yb3VuZCAoZG91Ymxl IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgdHJ1bmMgKGRvdWJsZSBfX3gpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX3RydW5jIChk b3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRl cm4gZG91YmxlIHJlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhy b3cgKCk7IGV4dGVybiBkb3VibGUgX19yZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGlu dCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnQgKGRvdWJsZSBf X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmludCAoZG91YmxlIF9feCkgdGhyb3cg KCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGxvbmcgaW50IGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGlu dCBfX2xyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxs cm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91 bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGZkaW0gKGRvdWJsZSBf X3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZmRpbSAoZG91YmxlIF9f eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWF4IChkb3VibGUgX194 LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYXggKGRvdWJsZSBfX3gs IGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1pbiAoZG91YmxlIF9feCwg ZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWluIChkb3VibGUgX194LCBk b3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnkgKGRvdWJsZSBf X3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl cm4gaW50IF9fc2lnbmJpdCAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZG91YmxlIGZtYSAoZG91YmxlIF9feCwgZG91 YmxlIF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWEgKGRvdWJs ZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIHRocm93ICgpOwojIDY0ICIvdXNyL2luY2x1 ZGUvbWF0aC5oIiAyIDMKIyA4MiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5j bHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNh bGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g ZmxvYXQgX19hY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKGZsb2F0IF9feCkgdGhy b3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm bG9hdCBfX2F0YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW4yZiAo ZmxvYXQgX195LCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuMmYgKGZs b2F0IF9feSwgZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgY29zZiAoZmxvYXQg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK CmV4dGVybiBmbG9hdCBzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19z aW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmYgKGZsb2F0IF9feCkg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3RhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4 dGVybiB2b2lkIHNpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQgKl9fY29z eCkgdGhyb3cgKCk7IGV4dGVybiB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19z aW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGNvc2hmIChm bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jb3NoZiAoZmxvYXQgX194KSB0aHJv dyAoKTsKCmV4dGVybiBmbG9hdCBzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9fc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuaGYgKGZs b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3RhbmhmIChmbG9hdCBfX3gpIHRocm93 ICgpOwoKCgpleHRlcm4gZmxvYXQgYWNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g ZmxvYXQgX19hY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXNpbmhm IChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luaGYgKGZsb2F0IF9feCkg dGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19hdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0 IGV4cGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cGYgKGZsb2F0IF9f eCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBleHAxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX2V4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9h dCBwb3cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3BvdzEwZiAoZmxv YXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGZyZXhwZiAoZmxvYXQgX194LCBpbnQg Kl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mcmV4cGYgKGZsb2F0IF9feCwg aW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbGRleHBmIChmbG9hdCBf X3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGRleHBmIChmbG9h dCBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nZiAoZmxv YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nZiAoZmxvYXQgX194KSB0aHJvdyAo KTsKCgpleHRlcm4gZmxvYXQgbG9nMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxv YXQgX19sb2cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IG1vZGZmIChm bG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19tb2RmZiAo ZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGV4cG0x ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFmIChmbG9hdCBfX3gp IHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4 dGVybiBmbG9hdCBfX2xvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQg bG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2JmIChmbG9hdCBf X3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGV4cDJmIChmbG9hdCBfX3gpIHRocm93ICgp OyBleHRlcm4gZmxvYXQgX19leHAyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxv YXQgbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZzJmIChmbG9h dCBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgcG93ZiAoZmxvYXQgX194LCBmbG9h dCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19wb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9f eSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX19zcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0 IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19o eXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBj YnJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY2JydGYgKGZsb2F0IF9f eCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjZWlsZiAoZmxvYXQgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZs b2F0IGZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsgZXh0ZXJuIGZsb2F0IF9fZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX2Zsb29yZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g ZmxvYXQgZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0 IF9fZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg X19pc2luZmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZmYgKGZsb2F0IF9f dmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50 IGZpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgpleHRlcm4gZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGZsb2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGZsb2F0IF9fc2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZs b2F0IGNvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBfX3gsIGZs b2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJu IGZsb2F0IG5hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25hbmYgKF9fY29uc3QgY2hhciAqX190YWdi KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9f aXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCmV4dGVybiBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQpIHRocm93ICgp OyBleHRlcm4gZmxvYXQgX19qMGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGoxZiAo ZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0 ZXJuIGZsb2F0IGpuZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2puZiAo aW50LCBmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKGZsb2F0KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9feTBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MWYgKGZs b2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVy biBmbG9hdCB5bmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195bmYgKGlu dCwgZmxvYXQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBlcmZmIChmbG9hdCkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX2VyZmYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGVy ZmNmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2VyZmNmIChmbG9hdCkgdGhyb3cg KCk7CmV4dGVybiBmbG9hdCBsZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf X2xnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRnYW1tYWYgKGZsb2F0 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGZsb2F0IGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19nYW1t YWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxnYW1tYWZfciAoZmxvYXQs IGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWZfciAoZmxv YXQsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCByaW50ZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCkgdGhy b3cgKCk7CgoKZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHRh ZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgpleHRlcm4gZmxvYXQgbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3Vi bGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9h dCBfX25leHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgcmVtYWluZGVyZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmIChm bG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzY2FsYmYgKGZs b2F0IF9feCwgZmxvYXQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJmIChmbG9h dCBfX3gsIGZsb2F0IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJuZiAoZmxv YXQgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJuZiAoZmxvYXQg X194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYmYgKGZsb2F0IF9feCkg dGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gZmxvYXQgc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9fc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy biBmbG9hdCBfX25lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9h dCByb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JvdW5kZiAoZmxv YXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRydW5jZiAoZmxvYXQgX194KSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX3RydW5jZiAo ZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRl cm4gZmxvYXQgcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19yZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpf X3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGYgKGZsb2F0IF9feCkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGxvbmcgbG9uZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4g bG9uZyBpbnQgbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9f bHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3Vu ZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGYg KGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBmZGltZiAoZmxvYXQgX194LCBm bG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mZGltZiAoZmxvYXQgX194LCBmbG9h dCBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBf X3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp IHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRo cm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93 ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgp CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0 ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCmV4dGVybiBmbG9hdCBmbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZs b2F0IF9feikgdGhyb3cgKCk7CiMgODMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDk5ICIv dXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgi IDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBk b3VibGUgYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2Fjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl IGFzaW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19h c2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFu bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbjJsIChs b25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv dWJsZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OwoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19jb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0 ZXJuIGxvbmcgZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9u ZyBkb3VibGUgdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2lu Y29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAq X19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoK CgpleHRlcm4gbG9uZyBkb3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0 ZXJuIGxvbmcgZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g bG9uZyBkb3VibGUgX19zaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBs b25nIGRvdWJsZSB0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25n IGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv dWJsZSBfX2Fjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRv dWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2FzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJs ZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X2F0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3Vi bGUgZXhwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f ZXhwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4 cDEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhw MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvdzEw bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBs IChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX2ZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93 ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9f ZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91 YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBs b2dsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2ds IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKGxv bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX21vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRo cm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CmV4dGVybiBsb25nIGRvdWJsZSBsb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoK CmV4dGVybiBsb25nIGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f eSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgaHlwb3RsIChsb25n IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2h5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoK CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNicnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19jYnJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19jZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpl eHRlcm4gbG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJu IGxvbmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBs b25nIGRvdWJsZSBmbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3VibGUg X192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBp bnQgX19maW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mbCAobG9uZyBkb3VibGUgX192YWx1 ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmlu aXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19kcmVtbCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3Vi bGUgc2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19zaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRl cm4gbG9uZyBkb3VibGUgY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f eSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19jb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbmFu bCAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmFubCAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25h bmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgajBsIChs b25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2owbCAobG9uZyBkb3Vi bGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgajFsIChsb25nIGRvdWJsZSkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2oxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRl cm4gbG9uZyBkb3VibGUgam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg ZG91YmxlIHkwbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195 MGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkxbCAobG9uZyBk b3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MWwgKGxvbmcgZG91YmxlKSB0 aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9u ZyBkb3VibGUgZXJmY2wgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fZXJmY2wgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1t YWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbCAo bG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdGdhbW1hbCAobG9u ZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190Z2FtbWFsIChsb25nIGRv dWJsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZ2FtbWFsIChsb25nIGRvdWJs ZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2dhbW1hbCAobG9uZyBkb3VibGUpIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbF9yIChsb25nIGRvdWJsZSwg aW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbF9y IChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxv bmcgZG91YmxlIHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19yaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBk b3VibGUgbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4 dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0dG93YXJkbCAo bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dHRvd2FyZGwgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1haW5kZXJsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbWFpbmRl cmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIHNjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRo cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYm5sIChs b25nIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19z Y2FsYm5sIChsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50 IGlsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2dibCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYmxu bCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19zY2FsYmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgp OwoKCgpleHRlcm4gbG9uZyBkb3VibGUgbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNsIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f dHJ1bmNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X3JlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0 aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZkaW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg ZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZkaW1sIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl IGZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2ZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtaW5sIChsb25n IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19m cGNsYXNzaWZ5bCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRsIChsb25nIGRvdWJsZSBf X3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIGZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBs b25nIGRvdWJsZSBfX3opIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWFsIChsb25n IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSB0aHJvdyAoKTsK IyAxMDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDExMyAiL3Vzci9pbmNsdWRlL21hdGgu aCIgMwpleHRlcm4gaW50IHNpZ25nYW07CiMgMTU0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmVu dW0KICB7CiAgICBGUF9OQU4sCgogICAgRlBfSU5GSU5JVEUsCgogICAgRlBfWkVSTywKCiAgICBG UF9TVUJOT1JNQUwsCgogICAgRlBfTk9STUFMCgogIH07CiMgMjQwICIvdXNyL2luY2x1ZGUvbWF0 aC5oIiAzCnR5cGVkZWYgZW51bQp7CiAgX0lFRUVfID0gLTEsCiAgX1NWSURfLAogIF9YT1BFTl8s CiAgX1BPU0lYXywKICBfSVNPQ18KfSBfTElCX1ZFUlNJT05fVFlQRTsKCgoKCmV4dGVybiBfTElC X1ZFUlNJT05fVFlQRSBfTElCX1ZFUlNJT047CiMgMjYzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAz CnN0cnVjdCBfX2V4Y2VwdGlvbgoKCgogIHsKICAgIGludCB0eXBlOwogICAgY2hhciAqbmFtZTsK ICAgIGRvdWJsZSBhcmcxOwogICAgZG91YmxlIGFyZzI7CiAgICBkb3VibGUgcmV0dmFsOwogIH07 CgoKZXh0ZXJuIGludCBtYXRoZXJyIChzdHJ1Y3QgX19leGNlcHRpb24gKl9fZXhjKSB0aHJvdyAo KTsKIyAzNTAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9t YXRoaW5saW5lLmgiIDEgMwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAz Cl9faW5saW5lIGludApfX3NpZ25iaXRmIChmbG9hdCBfX3gpIHRocm93ICgpCnsKICBfX2V4dGVu c2lvbl9fIHVuaW9uIHsgZmxvYXQgX19mOyBpbnQgX19pOyB9IF9fdSA9IHsgX19mOiBfX3ggfTsK ICByZXR1cm4gX191Ll9faSA8IDA7Cn0KX19pbmxpbmUgaW50Cl9fc2lnbmJpdCAoZG91YmxlIF9f eCkgdGhyb3cgKCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24geyBkb3VibGUgX19kOyBpbnQgX19p WzJdOyB9IF9fdSA9IHsgX19kOiBfX3ggfTsKICByZXR1cm4gX191Ll9faVsxXSA8IDA7Cn0KX19p bmxpbmUgaW50Cl9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkKewogIF9fZXh0 ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBfX2w7IGludCBfX2lbM107IH0gX191ID0geyBf X2w6IF9feCB9OwogIHJldHVybiAoX191Ll9faVsyXSAmIDB4ODAwMCkgIT0gMDsKfQojIDI5MSAi L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBfX3NnbiAo ZG91YmxlKSB0aHJvdyAoKTsgX19pbmxpbmUgZG91YmxlIF9fc2duIChkb3VibGUgX194KSB0aHJv dyAoKSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjAp OyB9IF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxvYXQpIHRocm93ICgpOyBfX2lubGluZSBmbG9h dCBfX3NnbmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6 IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBfX3Nnbmwg KGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ25sIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4g MC4wID8gMS4wIDogLTEuMCk7IH0KIyA0MjUgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUu aCIgMwpfX2lubGluZSBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93 ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgi ZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSki KTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZs b2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBf X3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAo X195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBh dGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAi PXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBf X3ZhbHVlOyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIF9fYXRhbjJsIChsb25nIGRvdWJsZSBfX3ks IGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVl OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f eCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfQoKCl9faW5saW5lIGRv dWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxv bmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZu c3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIg KF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGlu ZSBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIg bG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAi Zm5zdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIw IiAoX194KSwgInUiIChfX3kpIDogImF4IiwgImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5s aW5lIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg dGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxl X18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6 ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0 dXJuIF9fdmFsdWU7IH0KIyA0NDAgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpf X2lubGluZSBkb3VibGUgc3FydCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3Vi bGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0 KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBmbG9hdCBzcXJ0ZiAo ZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3Zv bGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4g X19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGls ZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVz dWx0OyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9f ICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0 OyB9CgoKX19pbmxpbmUgZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJu IF9fYnVpbHRpbl9mYWJzIChfX3gpOyB9Cl9faW5saW5lIGZsb2F0IGZhYnNmIChmbG9hdCBfX3gp IHRocm93ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZiAoX194KTsgfQpfX2lubGluZSBsb25n IGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX2J1aWx0 aW5fZmFic2wgKF9feCk7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2wgKF9feCk7IH0KIyA0NjYg Ii91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgYXRhbiAo ZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9f dm9sYXRpbGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkg OiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGZsb2F0IGF0YW5mIChmbG9h dCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRp bGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3Qo MSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW5sIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9f YXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIg KF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgpfX2lubGluZSBsb25nIGRvdWJs ZSBfX3NnbjFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IF9faW5saW5lIGxvbmcgZG91YmxlIF9f c2duMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyBfX2V4dGVuc2lvbl9fIHVuaW9uIHsg bG9uZyBkb3VibGUgX194bGQ7IHVuc2lnbmVkIGludCBfX3hpWzNdOyB9IF9fbiA9IHsgX194bGQ6 IF9feCB9OyBfX24uX194aVsyXSA9IChfX24uX194aVsyXSAmIDB4ODAwMCkgfCAweDNmZmY7IF9f bi5fX3hpWzFdID0gMHg4MDAwMDAwMDsgX19uLl9feGlbMF0gPSAwOyByZXR1cm4gX19uLl9feGxk OyB9CiMgNDkyICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZG91 YmxlIGZsb29yIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f dmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5z aWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDog Ij1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBf X3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGls ZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0 aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxp bmUgZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGls ZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAl MCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9f YXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3Zv bGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9f dm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBf X2lubGluZSBsb25nIGRvdWJsZSBmbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyBy ZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGlu dCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3Zv bGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhm M2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3 dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAi IChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJl dHVybiBfX3ZhbHVlOyB9CiMgNTAzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMK X19pbmxpbmUgZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192 b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZu c3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4 MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2Fz bSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9f YXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1 ZTsgfSBfX2lubGluZSBmbG9hdCBjZWlsZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVy IGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7 IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUg KCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwg MHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsg X19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkp OyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9f dmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVk IHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBf X2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChf X2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDog Im0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFs dWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChf X2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9CiMgNTIxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5s aW5lLmgiIDMKX19pbmxpbmUgZG91YmxlCmxkZXhwIChkb3VibGUgX194LCBpbnQgX195KSB0aHJv dyAoKQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9f ICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJs ZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9CiMgNTM5ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo aW5saW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIGxvZzFwIChkb3VibGUgX194KSB0aHJvdyAoKSB7 IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAt IDAuNSAqIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODBMKSBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194 KTsgZWxzZSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjJcblx0IiAiZnhjaFxuXHQiICJmeWwy eHAxIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Zh bHVlOyB9IF9faW5saW5lIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAq IDEuNDE0MjEzNTYyMzczMDk1MDQ4ODBMKSBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsgZWxz ZSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjJcblx0IiAiZnhjaFxuXHQiICJmeWwyeHAxIiA6 ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9 IF9faW5saW5lIGxvbmcgZG91YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7 IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAt IDAuNSAqIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODBMKSBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194 KTsgZWxzZSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjJcblx0IiAiZnhjaFxuXHQiICJmeWwy eHAxIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Zh bHVlOyB9CiMgNTUzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUg ZG91YmxlIGFzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0 bCAoX195ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0gX19p bmxpbmUgZmxvYXQgYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBk b3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChf X3NxcnRsIChfX3kgKiBfX3kgKyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsg fSBfX2lubGluZSBsb25nIGRvdWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkg eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFw bCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAq IF9fc2duMWwgKF9feCkpOyB9CgoKCgpfX2lubGluZSBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gp IHRocm93ICgpIHsgcmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3Nx cnRsIChfX3ggKyAxLjApKTsgfSBfX2lubGluZSBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgdGhy b3cgKCkgeyByZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwg KF9feCArIDEuMCkpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICog X19zcXJ0bCAoX194ICsgMS4wKSk7IH0KCgpfX2lubGluZSBkb3VibGUgYXRhbmggKGRvdWJsZSBf X3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsg cmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2du MWwgKF9feCk7IH0gX19pbmxpbmUgZmxvYXQgYXRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpIHsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBs b2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCk7IH0gX19p bmxpbmUgbG9uZyBkb3VibGUgYXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVn aXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBsb2cx cGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCk7IH0KCgoKCl9f aW5saW5lIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgeyBy ZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsgX195ICogX195KTsgfSBfX2lubGluZSBmbG9hdCBo eXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSB7IHJldHVybiBfX3NxcnRsIChf X3ggKiBfX3ggKyBfX3kgKiBfX3kpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGh5cG90bCAobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmV0dXJuIF9fc3FydGwg KF9feCAqIF9feCArIF9feSAqIF9feSk7IH0KCl9faW5saW5lIGRvdWJsZSBsb2diIChkb3VibGUg X194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxv bmcgZG91YmxlIF9fanVuazsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10 IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsg fSBfX2lubGluZSBmbG9hdCBsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxv bmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fanVuazsgX19hc20gX192 b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkg OiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBsb2di bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs dWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fanVuazsgX19hc20gX192b2xhdGlsZV9fICgiZnh0 cmFjdFxuXHQiIDogIj10IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBy ZXR1cm4gX192YWx1ZTsgfQojIDU4MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAz Cl9faW5saW5lIGZsb2F0CmxkZXhwZiAoZmxvYXQgX194LCBpbnQgX195KSB0aHJvdyAoKQp7CiAg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxl IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7 IHJldHVybiBfX3ZhbHVlOwp9CgpfX2lubGluZSBsb25nIGRvdWJsZQpsZGV4cGwgKGxvbmcgZG91 YmxlIF9feCwgaW50IF9feSkgdGhyb3cgKCkKewogIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs dWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAo X194KSwgInUiICgobG9uZyBkb3VibGUpIF9feSkpOyByZXR1cm4gX192YWx1ZTsKfQojIDYwNyAi L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGxvbmcgaW50CmxyaW50 ZiAoZmxvYXQgX194KSB0aHJvdyAoKQp7CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBf X3ZvbGF0aWxlX18gKCJmaXN0cGwgJTAiIDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkg OiAic3QiKTsgcmV0dXJuIF9fbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBpbnQKbHJpbnQgKGRv dWJsZSBfX3gpIHRocm93ICgpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9s YXRpbGVfXyAoImZpc3RwbCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJz dCIpOyByZXR1cm4gX19scmludHJlczsKfQpfX2lubGluZSBsb25nIGludApscmludGwgKGxvbmcg ZG91YmxlIF9feCkgdGhyb3cgKCkKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192 b2xhdGlsZV9fICgiZmlzdHBsICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDog InN0Iik7IHJldHVybiBfX2xyaW50cmVzOwp9CiMgNjMwICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo aW5saW5lLmgiIDMKX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnRmIChmbG9hdCBfX3gpIHRo cm93ICgpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVf XyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7 IHJldHVybiBfX2xscmludHJlczsKfQpfX2lubGluZSBsb25nIGxvbmcgaW50CmxscmludCAoZG91 YmxlIF9feCkgdGhyb3cgKCkKewogIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRyZXM7IF9fYXNtX18g X192b2xhdGlsZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChfX2xscmludHJlcykgOiAidCIgKF9f eCkgOiAic3QiKTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9Cl9faW5saW5lIGxvbmcgbG9uZyBpbnQK bGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgbG9uZyBsb25nIGludCBfX2xs cmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGxsICUwIiA6ICI9bSIgKF9fbGxy aW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19sbHJpbnRyZXM7Cn0KCgoKCgoK Cl9faW5saW5lIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSB7 IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNt IF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3RzdwklJWF4XG5cdCIgInNhaGZcblx0 IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9f eCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBk cmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9f dmFsdWU7IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJ ZnByZW0xXG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChf X3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNj Iik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX192 YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglm cHJlbTFcblx0IiAiZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9f dmFsdWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2Mi KTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA2NjUgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUu aCIgMwpfX2lubGluZSBpbnQKX19maW5pdGUgKGRvdWJsZSBfX3gpIHRocm93ICgpCnsKICByZXR1 cm4gKF9fZXh0ZW5zaW9uX18KICAgICAgICAgICgoKCgodW5pb24geyBkb3VibGUgX19kOyBpbnQg X19pWzJdOyB9KSB7X19kOiBfX3h9KS5fX2lbMV0KICAgICAgICAgICAgIHwgMHg4MDBmZmZmZnUp ICsgMSkgPj4gMzEpKTsKfQojIDM1MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNDExICIv dXNyL2luY2x1ZGUvbWF0aC5oIiAzCn0KIyAxNDAgInBsYXRmb3JtLmgiIDIKCgoKIyAxICIvdXNy L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL2Zsb2F0LmgiIDEgMwoj IDE0NCAicGxhdGZvcm0uaCIgMgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDMw ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiAiQyIgewoKCgoKCgoKIyAxICIvdXNyL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAz OSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGlt ZS5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCiMgMTE4ICIvdXNyL2luY2x1 ZGUvdGltZS5oIiAzCnN0cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsKICBpbnQgdG1fbWluOwogIGlu dCB0bV9ob3VyOwogIGludCB0bV9tZGF5OwogIGludCB0bV9tb247CiAgaW50IHRtX3llYXI7CiAg aW50IHRtX3dkYXk7CiAgaW50IHRtX3lkYXk7CiAgaW50IHRtX2lzZHN0OwoKCiAgbG9uZyBpbnQg dG1fZ210b2ZmOwogIF9fY29uc3QgY2hhciAqdG1fem9uZTsKCgoKCn07CgoKCgpzdHJ1Y3QgaXRp bWVyc3BlYwogIHsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAgIHN0cnVjdCB0 aW1lc3BlYyBpdF92YWx1ZTsKICB9OwoKCnN0cnVjdCBzaWdldmVudDsKIyAxNjMgIi91c3IvaW5j bHVkZS90aW1lLmgiIDMKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQpIHRocm93ICgpOwoKCmV4 dGVybiB0aW1lX3QgdGltZSAodGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgpleHRlcm4gZG91 YmxlIGRpZmZ0aW1lICh0aW1lX3QgX190aW1lMSwgdGltZV90IF9fdGltZTApCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiB0aW1lX3QgbWt0aW1lIChz dHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNo YXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGNoYXIgKnN0cnB0aW1lIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgc3RydWN0 IHRtICpfX3RwKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAo X19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHRtICps b2NhbHRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBz dHJ1Y3QgdG0gKmdtdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRo cm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0aW1lX3Qg Kl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICphc2N0aW1l IChfX2NvbnN0IHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1l IChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICph c2N0aW1lX3IgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCmV4dGVybiBj aGFyICpjdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAg ICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRl cm4gY2hhciAqX190em5hbWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJuIGxvbmcg aW50IF9fdGltZXpvbmU7CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRlcm4gdm9p ZCB0enNldCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBs b25nIGludCB0aW1lem9uZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAq X193aGVuKSB0aHJvdyAoKTsKIyAyNzEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRp bWVfdCB0aW1lZ20gKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0 aW1lbG9jYWwgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUg KGludCBfX3llYXIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpl eHRlcm4gaW50IG5hbm9zbGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVk X3RpbWUsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5n KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2Nr X2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2Nr X2dldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQs IF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4g aW50IGNsb2NrX25hbm9zbGVlcCAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIGludCBfX2ZsYWdzLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCBfX3BpZCwgY2xv Y2tpZF90ICpfX2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3JlYXRl IChjbG9ja2lkX3QgX19jbG9ja19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz aWdldmVudCAqX19yZXN0cmljdCBfX2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVy X3QgKl9fcmVzdHJpY3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2Rl bGV0ZSAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfc2V0 dGltZSAodGltZXJfdCBfX3RpbWVyaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292 YWx1ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGlt ZXJpZCwgc3RydWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCB0aW1lcl9nZXRvdmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7CiMgMzQy ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CgoKCgoKZXh0 ZXJuIHN0cnVjdCB0bSAqZ2V0ZGF0ZSAoX19jb25zdCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7 CiMgMzU3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9yIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgdG0gKl9fcmVzdHJpY3QgX19yZXNidWZwKSB0aHJvdyAoKTsKCgoKfQojIDE0OCAicGxhdGZv cm0uaCIgMgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pb3N0cmVhbSIgMSAzCiMgNDMg Ii91c3IvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12 My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNCAiL3Vzci9pbmNs dWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2RlZmluZXMuaCIgMSAz CiMgMzUgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25m aWcuaCIgMiAzCiMgNDUgIi91c3IvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDIgMwojIDEgIi91 c3IvaW5jbHVkZS9nKystdjMvb3N0cmVhbSIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9nKystdjMv b3N0cmVhbSIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2lvcyIgMSAzCiMgNDMgIi91c3Iv aW5jbHVkZS9nKystdjMvaW9zIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaW9zZndkIiAx IDMKIyA0MyAiL3Vzci9pbmNsdWRlL2crKy12My9pb3Nmd2QiIDMKCgojIDEgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9zdHJpbmdmd2QuaCIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTxjbGFzcyBf Q2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM7CgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJf dHJhaXRzPGNoYXI+OwoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90PjsK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRvcjsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No YXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAg ICBjbGFzcyBiYXNpY19zdHJpbmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+IHN0cmlu ZzsKICB0eXBlZGVmIGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwp9CiMgNDYgIi91c3Iv aW5jbHVkZS9nKystdjMvaW9zZndkIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv ZnBvcy5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMwoKIyAx ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMSAz CiMgMzUgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9jc3RkaW8iIDEgMwojIDQ4ICIvdXNyL2luY2x1 ZGUvZysrLXYzL2NzdGRpbyIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9jc3RkZGVmIiAx IDMKIyA0NyAiL3Vzci9pbmNsdWRlL2crKy12My9jc3RkZGVmIiAzCgojIDEgIi91c3IvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIv dXNyL2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcg OjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpzaXplX3Q7Cn0KIyA1MSAiL3Vzci9pbmNsdWRlL2crKy12 My9jc3RkaW8iIDIgMwojIDk3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2NzdGRpbyIgMwpuYW1lc3Bh Y2Ugc3RkCnsKICB1c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6Y2xl YXJlcnI7CiAgdXNpbmcgOjpmY2xvc2U7CiAgdXNpbmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVycm9y OwogIHVzaW5nIDo6ZmZsdXNoOwogIHVzaW5nIDo6ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9zOwog IHVzaW5nIDo6ZmdldHM7CiAgdXNpbmcgOjpmb3BlbjsKICB1c2luZyA6OmZwcmludGY7CiAgdXNp bmcgOjpmcHV0YzsKICB1c2luZyA6OmZwdXRzOwogIHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcgOjpm cmVvcGVuOwogIHVzaW5nIDo6ZnNjYW5mOwogIHVzaW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpmc2V0 cG9zOwogIHVzaW5nIDo6ZnRlbGw7CiAgdXNpbmcgOjpmd3JpdGU7CiAgdXNpbmcgOjpnZXRjOwog IHVzaW5nIDo6Z2V0Y2hhcjsKICB1c2luZyA6OmdldHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAgdXNp bmcgOjpwcmludGY7CiAgdXNpbmcgOjpwdXRjOwogIHVzaW5nIDo6cHV0Y2hhcjsKICB1c2luZyA6 OnB1dHM7CiAgdXNpbmcgOjpyZW1vdmU7CiAgdXNpbmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpyZXdp bmQ7CiAgdXNpbmcgOjpzY2FuZjsKICB1c2luZyA6OnNldGJ1ZjsKICB1c2luZyA6OnNldHZidWY7 CiAgdXNpbmcgOjpzcHJpbnRmOwogIHVzaW5nIDo6c3NjYW5mOwogIHVzaW5nIDo6dG1wZmlsZTsK ICB1c2luZyA6OnRtcG5hbTsKICB1c2luZyA6OnVuZ2V0YzsKICB1c2luZyA6OnZmcHJpbnRmOwog IHVzaW5nIDo6dnByaW50ZjsKICB1c2luZyA6OnZzcHJpbnRmOwp9CiMgMTUzICIvdXNyL2luY2x1 ZGUvZysrLXYzL2NzdGRpbyIgMwpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6OnNucHJp bnRmOwogIHVzaW5nIDo6dmZzY2FuZjsKICB1c2luZyA6OnZzY2FuZjsKICB1c2luZyA6OnZzbnBy aW50ZjsKICB1c2luZyA6OnZzc2NhbmY7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251 X2N4eDo6c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2ZnNjYW5mOwogIHVzaW5nIF9fZ251 X2N4eDo6dnNjYW5mOwogIHVzaW5nIF9fZ251X2N4eDo6dnNucHJpbnRmOwogIHVzaW5nIF9fZ251 X2N4eDo6dnNzY2FuZjsKfQojIDM2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgt Z251L2JpdHMvYysraW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1s aW51eC1nbnUvYml0cy9ndGhyLmgiIDEgMwojIDk4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYt cGMtbGludXgtZ251L2JpdHMvZ3Roci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2 LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRl L2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL3B0aHJlYWQuaCIgMSAzCiMgMjAgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zY2hlZC5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNDcgIi91c3IvaW5jbHVk ZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IHNjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRf cHJpb3JpdHk7CiAgfTsKCmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW50IGNsb25lIChpbnQgKCpf X2ZuKSAodm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAogICAgICAgICAgICAgICAg ICBpbnQgX19mbGFncywgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCn0KIyAzMyAiL3Vzci9pbmNs dWRlL3NjaGVkLmgiIDIgMwoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRw YXJhbSAoX19waWRfdCBfX3BpZCwgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0p CiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRwYXJhbSAoX19waWRfdCBfX3Bp ZCwgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNj aGVkX3NldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0p IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlk KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3lpZWxkICh2b2lkKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXggKGludCBfX2FsZ29yaXRobSkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQgX19hbGdvcml0aG0p IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfcnJfZ2V0X2ludGVydmFsIChfX3BpZF90IF9f cGlkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdCkgdGhyb3cgKCk7Cgp9CiMgMjEgIi91c3IvaW5jbHVk ZS9wdGhyZWFkLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMzEg Ii91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvc2lnc2V0LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwojIDM3 MSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCn0KIyAyNSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQu aCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwojIDI2ICIv dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9pbml0c3Bp bi5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKZXh0ZXJuICJDIiB7 CiMgNTkgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVf Sk9JTkFCTEUsCgogIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVB RF9JTkhFUklUX1NDSEVELAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAg UFRIUkVBRF9TQ09QRV9TWVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0K ewogIFBUSFJFQURfTVVURVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAs CiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfQURBUFRJVkVf TlAKCiAgLAogIFBUSFJFQURfTVVURVhfTk9STUFMID0gUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwK ICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSA9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAog IFBUSFJFQURfTVVURVhfRVJST1JDSEVDSyA9IFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwK ICBQVEhSRUFEX01VVEVYX0RFRkFVTFQgPSBQVEhSRUFEX01VVEVYX05PUk1BTAoKCgogICwgUFRI UkVBRF9NVVRFWF9GQVNUX05QID0gUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoKfTsKCmVudW0K ewogIFBUSFJFQURfUFJPQ0VTU19QUklWQVRFLAoKICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9 OwoKCmVudW0KewogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9SRUFERVJfTlAsCiAgUFRIUkVBRF9S V0xPQ0tfUFJFRkVSX1dSSVRFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05P TlJFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX1JXTE9DS19ERUZBVUxUX05QID0gUFRIUkVBRF9SV0xP Q0tfUFJFRkVSX1dSSVRFUl9OUAp9OwojIDEzMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpz dHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lk ICopOwogIHZvaWQgKl9fYXJnOwogIGludCBfX2NhbmNlbHR5cGU7CiAgc3RydWN0IF9wdGhyZWFk X2NsZWFudXBfYnVmZmVyICpfX3ByZXY7Cn07CgoKCmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0VO QUJMRSwKCiAgUFRIUkVBRF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAgUFRIUkVBRF9DQU5D RUxfREVGRVJSRUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoKfTsKIyAxNjMgIi91 c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRocmVh ZF90ICpfX3Jlc3RyaWN0IF9fdGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICpfX3Jlc3RyaWN0IF9fYXJnKSB0aHJvdyAoKTsKCgpleHRlcm4g cHRocmVhZF90IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy ZWFkX2VxdWFsIChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190aHJlYWQyKSB0aHJv dyAoKTsKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9fcmV0dmFsKQogICAgIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBpbnQgcHRo cmVhZF9qb2luIChwdGhyZWFkX3QgX190aCwgdm9pZCAqKl9fdGhyZWFkX3JldHVybikgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2RldGFjaCAocHRocmVhZF90IF9fdGgpIHRocm93 ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRocmVhZF9hdHRyX3Qg Kl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVzdHJveSAocHRo cmVhZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf c2V0ZGV0YWNoc3RhdGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUgKF9fY29uc3QgcHRocmVhZF9hdHRy X3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAq X19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2No ZWRwYXJhbSAocHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19y ZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3BhcmFtKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtIChfX2NvbnN0 IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kgKHB0aHJlYWRfYXR0cl90ICpf X2F0dHIsIGludCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf YXR0cl9nZXRzY2hlZHBvbGljeSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVz dHJpY3QgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf c2V0aW5oZXJpdHNjaGVkIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2luaGVyaXQpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAoX19jb25zdCBwdGhyZWFkX2F0dHJf dCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f YXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9faW5oZXJpdCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4g aW50IHB0aHJlYWRfYXR0cl9zZXRzY29wZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9f c2NvcGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUg KF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2NvcGUpIHRocm93ICgpOwoK CgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUgKHB0aHJlYWRfYXR0cl90ICpf X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fZ3Vh cmRzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUg KF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX2d1YXJkc2l6ZSkK ICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRy IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZvaWQgKl9fc3RhY2thZGRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf YXR0cl9nZXRzdGFja2FkZHIgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHZvaWQgKipfX3Jlc3Ry aWN0IF9fc3RhY2thZGRyKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9h dHRyX3NldHN0YWNrIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0YWNrYWRkciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2sgKF9fY29uc3QgcHRocmVh ZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zdGFja3NpemUpIHRocm93ICgpOwoK CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRocmVhZF9hdHRyX3Qg Kl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19z dGFja3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6 ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXpl KQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0YXR0cl9ucCAocHRocmVh ZF90IF9fdGgsIHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4g aW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50 IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1 Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy ZWFkX2dldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wb2xpY3ksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3Qg X19wYXJhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGNvbmN1cnJl bmN5ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y29uY3VycmVuY3kg KGludCBfX2xldmVsKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF95aWVsZCAo dm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9pbml0IChwdGhy ZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19tdXRleF9hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90ICpf X211dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVh ZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4 X3RpbWVkbG9jayAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jl c3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhf dCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJf aW5pdCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwc2hhcmVkIChfX2Nv bnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9tdXRleGF0dHJfdCAq X19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3Bz aGFyZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlw ZSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKQogICAgIHRocm93ICgp OwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZSAoX19jb25zdCBwdGhyZWFk X211dGV4YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19raW5kKSB0aHJvdyAoKTsKCgoKCgoKCmV4 dGVybiBpbnQgcHRocmVhZF9jb25kX2luaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9f Y29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2NvbmRh dHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25kX2F0 dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kgKHB0aHJlYWRf Y29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3NpZ25h bCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X2NvbmRfYnJvYWRjYXN0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGludCBwdGhyZWFkX2NvbmRfd2FpdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19j b25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgKl9fcmVz dHJpY3QgX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGlt ZWR3YWl0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNw ZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3Rp bWUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJl YWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29u ZGF0dHJfZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfY29u ZGF0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3Ry aWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAq X19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25k YXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCgoK CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFkX3J3bG9ja190ICpfX3Jl c3RyaWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg cHRocmVhZF9yd2xvY2thdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfZGVz dHJveSAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHRocmVhZF9yd2xvY2tfcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnlyZGxvY2sgKHB0aHJlYWRfcndsb2Nr X3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190aW1l ZHJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9f cmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1l KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja193cmxvY2sgKHB0aHJlYWRf cndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2Nr X3RyeXdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgpleHRl cm4gaW50IHB0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jl c3RyaWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJl YWRfcndsb2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoK CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQgKHB0aHJlYWRfcndsb2NrYXR0 cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2Rl c3Ryb3kgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBp bnQgcHRocmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9yd2xvY2th dHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3Ry aWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3 bG9ja2F0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0a2luZF9ucCAoX19jb25zdCBw dGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgKl9fcHJlZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X3J3bG9ja2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHJlZikgdGhyb3cg KCk7CiMgNTA5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9z cGluX2luaXQgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrLCBpbnQgX19wc2hhcmVkKQogICAg IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2Rlc3Ryb3kgKHB0aHJlYWRfc3Bp bmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9sb2Nr IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy ZWFkX3NwaW5fdHJ5bG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcHRocmVhZF9zcGluX3VubG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xv Y2spIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfaW5pdCAocHRocmVh ZF9iYXJyaWVyX3QgKl9fcmVzdHJpY3QgX19iYXJyaWVyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19yZXN0cmljdAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHVuc2lnbmVkIGludCBfX2NvdW50 KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3kgKHB0aHJlYWRf YmFycmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJp ZXJhdHRyX2luaXQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCmV4 dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJhdHRy X3QgKl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfZ2V0 cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVk KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9zZXRwc2hhcmVkIChw dGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhy ZWFkX2JhcnJpZXJfd2FpdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhyb3cgKCk7 CiMgNTU2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9rZXlf Y3JlYXRlIChwdGhyZWFkX2tleV90ICpfX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2tleV9kZWxldGUgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcG9pbnRlcikgdGhy b3cgKCk7CgoKZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3Qg X19rZXkpIHRocm93ICgpOwojIDU3NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4g aW50IHB0aHJlYWRfb25jZSAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250cm9sLAogICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpIHRocm93ICgp OwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgKGludCBfX3N0YXRlLCBp bnQgKl9fb2xkc3RhdGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2Vs dHlwZSAoaW50IF9fdHlwZSwgaW50ICpfX29sZHR5cGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHRocmVhZF9jYW5jZWwgKHB0aHJlYWRfdCBfX3RocmVhZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g dm9pZCBwdGhyZWFkX3Rlc3RjYW5jZWwgKHZvaWQpIHRocm93ICgpOwojIDYxMCAiL3Vzci9pbmNs dWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2ggKHN0cnVj dCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu IHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZl ciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19leGVj dXRlKSB0aHJvdyAoKTsKIyA2MzEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIHZv aWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoX2RlZmVyIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9i dWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKIyA2NDIgIi91c3IvaW5jbHVkZS9w dGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3BfcmVzdG9yZSAoc3Ry dWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIGludCBwdGhyZWFkX2dldGNwdWNsb2NraWQgKHB0aHJlYWRfdCBfX3RocmVhZF9pZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NraWRfdCAqX19jbG9ja19pZCkgdGhy b3cgKCk7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAxIDMKIyAzMSAi L3Vzci9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX3NpZ21h c2sgKGludCBfX2hvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgX19zaWdz ZXRfdCAqX19yZXN0cmljdCBfX25ld21hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fb2xkbWFzayl0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0 aHJlYWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkLCBpbnQgX19zaWdubykgdGhyb3cgKCk7CiMg NjU2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyA2NzEgIi91c3IvaW5jbHVkZS9wdGhy ZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZv aWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgdGhyb3cg KCk7CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCAodm9pZCkg dGhyb3cgKCk7Cgp9CiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUv Yml0cy9ndGhyLWRlZmF1bHQuaCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19ndGhyZWFk X2tleV90Owp0eXBlZGVmIHB0aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7CnR5cGVkZWYg cHRocmVhZF9tdXRleF90IF9fZ3RocmVhZF9tdXRleF90OwoKCgoKCgojcHJhZ21hIHdlYWsgcHRo cmVhZF9vbmNlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9jcmVhdGUKI3ByYWdtYSB3ZWFrIHB0 aHJlYWRfa2V5X2RlbGV0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZpYwojcHJhZ21h IHdlYWsgcHRocmVhZF9zZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9jcmVhdGUKCiNw cmFnbWEgd2VhayBwdGhyZWFkX211dGV4X2xvY2sgCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4 X3RyeWxvY2sgCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3VubG9jayAKIyA4MCAiL3Vzci9p bmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCnN0 YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkKewogIHN0YXRpYyB2b2lk ICpjb25zdCBfX2d0aHJlYWRfYWN0aXZlX3B0ciA9ICh2b2lkICopICZwdGhyZWFkX2NyZWF0ZTsK ICByZXR1cm4gX19ndGhyZWFkX2FjdGl2ZV9wdHIgIT0gMDsKfQojIDQzNyAiL3Vzci9pbmNsdWRl L2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCnN0YXRpYyBp bmxpbmUgaW50Cl9fZ3RocmVhZF9vbmNlIChfX2d0aHJlYWRfb25jZV90ICpvbmNlLCB2b2lkICgq ZnVuYykgKHZvaWQpKQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBw dGhyZWFkX29uY2UgKG9uY2UsIGZ1bmMpOwogIGVsc2UKICAgIHJldHVybiAtMTsKfQoKc3RhdGlj IGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9jcmVhdGUgKF9fZ3RocmVhZF9rZXlfdCAqa2V5LCB2 b2lkICgqZHRvcikgKHZvaWQgKikpCnsKICByZXR1cm4gcHRocmVhZF9rZXlfY3JlYXRlIChrZXks IGR0b3IpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfa2V5X2R0b3IgKF9fZ3RocmVh ZF9rZXlfdCBrZXksIHZvaWQgKnB0cikKewoKICBpZiAocHRyKQogICAgcmV0dXJuIHB0aHJlYWRf c2V0c3BlY2lmaWMgKGtleSwgMCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxp bmUgaW50Cl9fZ3RocmVhZF9rZXlfZGVsZXRlIChfX2d0aHJlYWRfa2V5X3Qga2V5KQp7CiAgcmV0 dXJuIHB0aHJlYWRfa2V5X2RlbGV0ZSAoa2V5KTsKfQoKc3RhdGljIGlubGluZSB2b2lkICoKX19n dGhyZWFkX2dldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qga2V5KQp7CiAgcmV0dXJuIHB0aHJl YWRfZ2V0c3BlY2lmaWMgKGtleSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9zZXRz cGVjaWZpYyAoX19ndGhyZWFkX2tleV90IGtleSwgY29uc3Qgdm9pZCAqcHRyKQp7CiAgcmV0dXJu IHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwgcHRyKTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19n dGhyZWFkX211dGV4X2xvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0 aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF9sb2NrIChtdXRleCk7 CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRl eF90cnlsb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2Fj dGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAobXV0ZXgpOwogIGVs c2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdW5s b2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9w ICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChtdXRleCk7CiAgZWxzZQogICAg cmV0dXJuIDA7Cn0KIyA5OSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9i aXRzL2d0aHIuaCIgMiAzCiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1n bnUvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0eXBlZGVmIGxvbmcgc3Ry ZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7CgogIHR5cGVkZWYgcHRyZGlm Zl90IHdzdHJlYW1zaXplOwoKICB0eXBlZGVmIGZwb3NfdCBfX2Nfc3RyZWFtcG9zOwoKICB0eXBl ZGVmIF9fZ3RocmVhZF9tdXRleF90IF9fY19sb2NrOwoKCiAgdHlwZWRlZiBGSUxFIF9fY19maWxl OwoKCiAgc3RydWN0IF9faW9zX2ZsYWdzCiAgewogICAgdHlwZWRlZiBzaG9ydCBfX2ludF90eXBl OwoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9IDB4MDAwMTsKICAg IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9IDB4MDAwMjsKICAgIHN0YXRpYyBjb25z dCBfX2ludF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1NfaGV4ID0gMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW50ZXJu YWwgPSAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19sZWZ0ID0gMHgwMDIw OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgwMDQwOwogICAgc3RhdGlj IGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAwODA7CiAgICBzdGF0aWMgY29uc3QgX19p bnRfdHlwZSBfU19zY2llbnRpZmljID0gMHgwMTAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19z aG93cG9pbnQgPSAweDA0MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9z ID0gMHgwODAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAw OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4MjAwMDsKICAgIHN0 YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VwcGVyY2FzZSA9IDB4NDAwMDsKICAgIHN0YXRpYyBj b25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEw OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0gMHgwMDAyIHwgMHgw MDQwIHwgMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmxvYXRmaWVsZCA9 IDB4MDEwMCB8IDB4MDAwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFkYml0 ID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAg ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWlsYml0ID0gMHgwNDsKCgogICAgc3RhdGlj IGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90 eXBlIF9TX2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iaW4gPSAw eDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW4gPSAweDA4OwogICAgc3RhdGlj IGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90 eXBlIF9TX3RydW5jID0gMHgyMDsKICB9Owp9CiMgNDUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9mcG9zLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvY3djaGFyIiAxIDMKIyA0OCAi L3Vzci9pbmNsdWRlL2crKy12My9jd2NoYXIiIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L2N0aW1lIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2crKy12My9jdGltZSIgMwojIDY0ICIvdXNy L2luY2x1ZGUvZysrLXYzL2N0aW1lIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6Y2xvY2tf dDsKICB1c2luZyA6OnRpbWVfdDsKICB1c2luZyA6OnRtOwoKICB1c2luZyA6OmNsb2NrOwogIHVz aW5nIDo6ZGlmZnRpbWU7CiAgdXNpbmcgOjpta3RpbWU7CiAgdXNpbmcgOjp0aW1lOwogIHVzaW5n IDo6YXNjdGltZTsKICB1c2luZyA6OmN0aW1lOwogIHVzaW5nIDo6Z210aW1lOwogIHVzaW5nIDo6 bG9jYWx0aW1lOwogIHVzaW5nIDo6c3RyZnRpbWU7Cn0KIyA1MiAiL3Vzci9pbmNsdWRlL2crKy12 My9jd2NoYXIiIDIgMwojIDY5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2N3Y2hhciIgMwpuYW1lc3Bh Y2Ugc3RkCnsKICB1c2luZyA6Om1ic3RhdGVfdDsKfQojIDEzMyAiL3Vzci9pbmNsdWRlL2crKy12 My9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVzaW5nIDo6 YnRvd2M7CiAgdXNpbmcgOjpmZ2V0d2M7CiAgdXNpbmcgOjpmZ2V0d3M7CiAgdXNpbmcgOjpmcHV0 d2M7CiAgdXNpbmcgOjpmcHV0d3M7CiAgdXNpbmcgOjpmd2lkZTsKICB1c2luZyA6OmZ3cHJpbnRm OwogIHVzaW5nIDo6ZndzY2FuZjsKICB1c2luZyA6OmdldHdjOwogIHVzaW5nIDo6Z2V0d2NoYXI7 CiAgdXNpbmcgOjptYnJsZW47CiAgdXNpbmcgOjptYnJ0b3djOwogIHVzaW5nIDo6bWJzaW5pdDsK ICB1c2luZyA6Om1ic3J0b3djczsKICB1c2luZyA6OnB1dHdjOwogIHVzaW5nIDo6cHV0d2NoYXI7 CiAgdXNpbmcgOjpzd3ByaW50ZjsKICB1c2luZyA6OnN3c2NhbmY7CiAgdXNpbmcgOjp1bmdldHdj OwogIHVzaW5nIDo6dmZ3cHJpbnRmOwogIHVzaW5nIDo6dmZ3c2NhbmY7CiAgdXNpbmcgOjp2c3dw cmludGY7CiAgdXNpbmcgOjp2c3dzY2FuZjsKICB1c2luZyA6OnZ3cHJpbnRmOwogIHVzaW5nIDo6 dndzY2FuZjsKICB1c2luZyA6OndjcnRvbWI7CiAgdXNpbmcgOjp3Y3NjYXQ7CiAgdXNpbmcgOjp3 Y3NjbXA7CiAgdXNpbmcgOjp3Y3Njb2xsOwogIHVzaW5nIDo6d2NzY3B5OwogIHVzaW5nIDo6d2Nz Y3NwbjsKICB1c2luZyA6Ondjc2Z0aW1lOwogIHVzaW5nIDo6d2NzbGVuOwogIHVzaW5nIDo6d2Nz bmNhdDsKICB1c2luZyA6Ondjc25jbXA7CiAgdXNpbmcgOjp3Y3NuY3B5OwogIHVzaW5nIDo6d2Nz cnRvbWJzOwogIHVzaW5nIDo6d2Nzc3BuOwogIHVzaW5nIDo6d2NzdG9kOwogIHVzaW5nIDo6d2Nz dG9mOwogIHVzaW5nIDo6d2NzdG9rOwogIHVzaW5nIDo6d2NzdG9sOwogIHVzaW5nIDo6d2NzdG91 bDsKICB1c2luZyA6Ondjc3hmcm07CiAgdXNpbmcgOjp3Y3RvYjsKICB1c2luZyA6OndtZW1jbXA7 CiAgdXNpbmcgOjp3bWVtY3B5OwogIHVzaW5nIDo6d21lbW1vdmU7CiAgdXNpbmcgOjp3bWVtc2V0 OwogIHVzaW5nIDo6d3ByaW50ZjsKICB1c2luZyA6OndzY2FuZjsKCiAgdXNpbmcgOjp3Y3NjaHI7 CgogIGlubGluZSB3Y2hhcl90KgogIHdjc2Nocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQog IHsgcmV0dXJuIHdjc2Nocihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9 CgogIHVzaW5nIDo6d2NzcGJyazsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzcGJyayh3Y2hhcl90 KiBfX3MxLCB3Y2hhcl90KiBfX3MyKQogIHsgcmV0dXJuIHdjc3BicmsoY29uc3RfY2FzdDxjb25z dCB3Y2hhcl90Kj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6d2NzcmNocjsKCiAgaW5saW5l IHdjaGFyX3QqCiAgd2NzcmNocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJu IHdjc3JjaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2lu ZyA6Ondjc3N0cjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2Nzc3RyKHdjaGFyX3QqIF9fczEsIHdj aGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2Nzc3RyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+ KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6OndtZW1jaHI7CgogIGlubGluZSB3Y2hhcl90Kgog IHdtZW1jaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVy biB3bWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYywgX19uKTsgfQp9 CgoKCgoKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6Ondjc3RvbGQ7CiAgdXNpbmcg Ojp3Y3N0b2xsOwogIHVzaW5nIDo6d2NzdG91bGw7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5n IF9fZ251X2N4eDo6d2NzdG9sZDsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvbGw7CiAgdXNpbmcg X19nbnVfY3h4Ojp3Y3N0b3VsbDsKfQojIDQ2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBv cy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQ+ CiAgICBjbGFzcyBmcG9zCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9TdGF0ZVQg X19zdGF0ZV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbW9mZiBfTV9vZmY7CiAgICAg IF9fc3RhdGVfdHlwZSBfTV9zdDsKCiAgICBwdWJsaWM6CiAgICAgIF9fc3RhdGVfdHlwZQogICAg ICBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3N0OyB9CgogICAgICB2b2lkCiAgICAgIHN0YXRl KF9fc3RhdGVfdHlwZSBfX3N0KSB7IF9NX3N0ID0gX19zdDsgfQoKCgogICAgICBmcG9zKCk6IF9N X29mZihzdHJlYW1vZmYoKSksIF9NX3N0KF9fc3RhdGVfdHlwZSgpKSB7IH0KCiAgICAgIGZwb3Mo c3RyZWFtb2ZmIF9fb2ZmLCBfX3N0YXRlX3R5cGUgX19zdCA9IF9fc3RhdGVfdHlwZSgpKQogICAg ICA6IF9NX29mZihfX29mZiksIF9NX3N0KF9fc3QpIHsgfQoKICAgICAgb3BlcmF0b3Igc3RyZWFt b2ZmKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRv cis9KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgKz0gX19vZmY7IHJldHVybiAqdGhpczsgfQoK ICAgICAgZnBvcyYKICAgICAgb3BlcmF0b3ItPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmIC09 IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3IrKHN0cmVh bW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3Qg Kz0gX19vZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgZnBvcwogICAgICBv cGVyYXRvci0oc3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMp OwogICAgICAgIF9fdCAtPSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAg ICBib29sCiAgICAgIG9wZXJhdG9yPT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsg cmV0dXJuIF9NX29mZiA9PSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0 b3IhPShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmICE9IF9f cG9zLl9NX29mZjsgfQoKICAgICAgc3RyZWFtb2ZmCiAgICAgIF9NX3Bvc2l0aW9uKCkgY29uc3Qg eyByZXR1cm4gX01fb2ZmOyB9CgogICAgICB2b2lkCiAgICAgIF9NX3Bvc2l0aW9uKHN0cmVhbW9m ZiBfX29mZikgeyBfTV9vZmYgPSBfX29mZjsgfQogICAgfTsKCgogIHR5cGVkZWYgZnBvczxtYnN0 YXRlX3Q+IHN0cmVhbXBvczsKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gd3N0cmVhbXBvczsK Cn0KIyA0NyAiL3Vzci9pbmNsdWRlL2crKy12My9pb3Nmd2QiIDIgMwojIDEgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlv bl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNl cHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlv bih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBf X3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQp OwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p ZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro cm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df bGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9y YW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAg dm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDQ4ICIvdXNy L2luY2x1ZGUvZysrLXYzL2lvc2Z3ZCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4K ICAgIGNsYXNzIGJhc2ljX2lvczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1i dWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf dHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAg ICBjbGFzcyBiYXNpY19vc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3Ry ZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy X3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8 X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAg ICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf aXN0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBh bGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtOwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh clQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAg IGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19m aWxlYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBj aGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ ID4KICAgIGNsYXNzIGJhc2ljX29mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj X2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9 IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8 X0NoYXJUPiA+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOwoKCgogIGNsYXNzIGlvc19i YXNlOwoKCiAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3Ry ZWFtYnVmPGNoYXI+IHN0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0 cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJh c2ljX2lvc3RyZWFtPGNoYXI+IGlvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNo YXI+IHN0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmlu Z3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVh bTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlw ZWRlZiBiYXNpY19maWxlYnVmPGNoYXI+IGZpbGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVh bTxjaGFyPiBpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFt OwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTxjaGFyPiBmc3RyZWFtOwoKICB0eXBlZGVmIGJhc2lj X2lvczx3Y2hhcl90PiB3aW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+IHdz dHJlYW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+IHdpc3RyZWFtOwogIHR5 cGVkZWYgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiB3b3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lv c3RyZWFtPHdjaGFyX3Q+IHdpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1Zjx3Y2hh cl90PiB3c3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTx3Y2hhcl90PiB3 aXN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08d2NoYXJfdD4gd29z dHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08d2NoYXJfdD4gd3N0cmlu Z3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8d2NoYXJfdD4gd2ZpbGVidWY7CiAgdHlw ZWRlZiBiYXNpY19pZnN0cmVhbTx3Y2hhcl90PiB3aWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19v ZnN0cmVhbTx3Y2hhcl90PiB3b2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPHdjaGFy X3Q+IHdmc3RyZWFtOwp9CiMgNDUgIi91c3IvaW5jbHVkZS9nKystdjMvaW9zIiAyIDMKIyAxICIv dXNyL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMSAzCiMgNDAgIi91c3IvaW5jbHVkZS9nKyst djMvZXhjZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICBj bGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0K ICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7CgoKICAgIHZpcnR1YWwgY29uc3QgY2hh ciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICBjbGFzcyBiYWRfZXhjZXB0aW9uIDog cHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkgdGhyb3co KSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigpIHRocm93KCk7CiAgfTsKCgogIHR5 cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKCiAgdHlwZWRlZiB2b2lkICgqdW5l eHBlY3RlZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUo dGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHRlcm1pbmF0ZSgpIF9fYXR0cmli dXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogIHVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBl Y3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHVuZXhwZWN0ZWQoKSBf X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMgOTggIi91c3IvaW5jbHVkZS9nKystdjMv ZXhjZXB0aW9uIiAzCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9CgpuYW1l c3BhY2UgX19nbnVfY3h4CnsKIyAxMTEgIi91c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAz CiAgdm9pZCBfX3ZlcmJvc2VfdGVybWluYXRlX2hhbmRsZXIgKCk7Cn0KCn0KIyA0NiAiL3Vzci9p bmNsdWRlL2crKy12My9pb3MiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9jaGFy X3RyYWl0cy5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRz LmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9jc3RyaW5nIiAxIDMKIyA0OCAiL3Vzci9p bmNsdWRlL2crKy12My9jc3RyaW5nIiAzCiMgNzcgIi91c3IvaW5jbHVkZS9nKystdjMvY3N0cmlu ZyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1lbWNweTsKICB1c2luZyA6Om1lbW1vdmU7 CiAgdXNpbmcgOjpzdHJjcHk7CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3RyY2F0Owog IHVzaW5nIDo6c3RybmNhdDsKICB1c2luZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0cmNtcDsKICB1 c2luZyA6OnN0cmNvbGw7CiAgdXNpbmcgOjpzdHJuY21wOwogIHVzaW5nIDo6c3RyeGZybTsKICB1 c2luZyA6OnN0cmNzcG47CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0b2s7CiAgdXNp bmcgOjptZW1zZXQ7CiAgdXNpbmcgOjpzdHJlcnJvcjsKICB1c2luZyA6OnN0cmxlbjsKCiAgdXNp bmcgOjptZW1jaHI7CgogIGlubGluZSB2b2lkKgogIG1lbWNocih2b2lkKiBfX3AsIGludCBfX2Ms IHNpemVfdCBfX24pCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9f cCksIF9fYywgX19uKTsgfQoKICB1c2luZyA6OnN0cmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3Ry Y2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25z dF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnBicms7Cgog IGlubGluZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7 IHJldHVybiBfX2J1aWx0aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwg X19zMik7IH0KCiAgdXNpbmcgOjpzdHJyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJyY2hyKGNo YXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29uc3RfY2Fz dDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7CgogIGlubGlu ZSBjaGFyKgogIHN0cnN0cihjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJu IF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9 Cn0KIyA0NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMwoKCm5h bWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVjdCBjaGFy X3RyYWl0cwogICAgewogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICB0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190 eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0 YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5 cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoK ICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj aGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3Rh dGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUm IF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAg ICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIs IHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBf X247ICsrX19pKQogICAgICAgICAgaWYgKCFlcShfX3MxW19faV0sIF9fczJbX19pXSkpCiAgICAg ICAgICAgIHJldHVybiBsdChfX3MxW19faV0sIF9fczJbX19pXSkgPyAtMSA6IDE7CiAgICAgICAg cmV0dXJuIDA7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0 IGNoYXJfdHlwZSogX19zKQogICAgICB7CiAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3AgPSBf X3M7CiAgICAgICAgd2hpbGUgKCpfX3ApICsrX19wOwogICAgICAgIHJldHVybiAoX19wIC0gX19z KTsKICAgICAgfQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25z dCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAg IHsKICAgICAgICBmb3IgKGNvbnN0IGNoYXJfdHlwZSogX19wID0gX19zOyBzaXplX3QoX19wIC0g X19zKSA8IF9fbjsgKytfX3ApCiAgICAgICAgICBpZiAoKl9fcCA9PSBfX2EpIHJldHVybiBfX3A7 CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAg IG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24p CiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1tb3ZlKF9fczEsIF9fczIsIF9fbiAqIHNp emVvZihjaGFyX3R5cGUpKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShj aGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAg eyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbWNweShfX3MxLCBfX3MyLCBfX24gKiBzaXplb2YoY2hh cl90eXBlKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5 cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgewogICAgICAgIGZvciAo Y2hhcl90eXBlKiBfX3AgPSBfX3M7IF9fcCA8IF9fcyArIF9fbjsgKytfX3ApCiAgICAgICAgICBh c3NpZ24oKl9fcCwgX19hKTsKICAgICAgICByZXR1cm4gX19zOwogICAgICB9CgogICAgICBzdGF0 aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAg ICB7IHJldHVybiBjaGFyX3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAg IHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKSB7IHJldHVybiBpbnRfdHlwZShfX2Mp OyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYg X19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsg fQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0 PGludF90eXBlPigtMSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNv bnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkp ID8gaW50X3R5cGUoMCkgOiBfX2M7IH0KICAgIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0 IGNoYXJfdHJhaXRzPGNoYXI+CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CiAg ICAgIHR5cGVkZWYgaW50IGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBwb3NfdHlw ZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0 ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBl JiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0KCiAg ICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hh cl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRp YyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBf X2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGljIGludAogICAg ICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBz aXplX3QgX19uKQogICAgICB7IHJldHVybiBtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQoKICAg ICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAgICAg IHsgcmV0dXJuIHN0cmxlbihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgog ICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5 cGUmIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcl90eXBlKj4obWVt Y2hyKF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgbW92 ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtbW92ZShfX3MxLCBfX3MyLCBf X24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9f czEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtY3B5KF9fczEsIF9fczIsIF9fbikpOyB9CgogICAgICBz dGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24s IGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1l bXNldChfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9f Y2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PGNoYXJfdHlwZT4oX19jKTsgfQoKCgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50 X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGlu dF90eXBlPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpKTsgfQoKICAgICAgc3RhdGlj IGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90 eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBp bnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oKC0xKSk7 IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBf X2MpCiAgICAgIHsgcmV0dXJuIChfX2MgPT0gZW9mKCkpID8gMCA6IF9fYzsgfQogIH07CgoKCiAg dGVtcGxhdGU8PgogICAgc3RydWN0IGNoYXJfdHJhaXRzPHdjaGFyX3Q+CiAgICB7CiAgICAgIHR5 cGVkZWYgd2NoYXJfdCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgd2ludF90IGludF90eXBlOwog ICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiB3c3RyZWFtcG9z IHBvc190eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3Rh dGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBf X2MyKQogICAgICB7IF9fYzEgPSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShj b25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1 cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFy X3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8 IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUq IF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4g d21lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxl bmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgeyByZXR1cm4gd2NzbGVuKF9fcyk7IH0K CiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBl KiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQogICAgICB7IHJldHVybiB3 bWVtY2hyKF9fcywgX19hLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBt b3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBpbnRfdHlwZSBfX24p CiAgICAgIHsgcmV0dXJuIHdtZW1tb3ZlKF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRp YyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUq IF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHdtZW1jcHkoX19zMSwgX19zMiwgX19u KTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19z LCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVybiB3bWVtc2V0KF9fcywg X19hLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlwZShj b25zdCBpbnRfdHlwZSYgX19jKSB7IHJldHVybiBjaGFyX3R5cGUoX19jKTsgfQoKICAgICAgc3Rh dGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKSB7IHJl dHVybiBpbnRfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlw ZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0 dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpIHsg cmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoMHhmZmZmZmZmZnUpKTsgfQoKICAgICAgc3Rh dGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyBy ZXR1cm4gZXFfaW50X3R5cGUoX19jLCBlb2YoKSkgPyAwIDogX19jOyB9CiAgfTsKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cnVjdCBfQ2hhcl90 cmFpdHNfbWF0Y2gKICAgIHsKICAgICAgX0NoYXJUIF9NX2M7CiAgICAgIF9DaGFyX3RyYWl0c19t YXRjaChfQ2hhclQgY29uc3QmIF9fYykgOiBfTV9jKF9fYykgeyB9CgogICAgICBib29sCiAgICAg IG9wZXJhdG9yKCkoX0NoYXJUIGNvbnN0JiBfX2EpIHsgcmV0dXJuIF9UcmFpdHM6OmVxKF9NX2Ms IF9fYSk7IH0KICAgIH07Cn0KIyA0NyAiL3Vzci9pbmNsdWRlL2crKy12My9pb3MiIDIgMwoKIyAx ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDEgMwojIDQ0ICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDMKCgojIDEgIi91c3IvaW5jbHVkZS9nKyst djMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMSAzCiMgMzYgIi91c3IvaW5j bHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9nKystdjMvY2xvY2FsZSIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9nKystdjMv Y2xvY2FsZSIgMwoKIyAxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDEgMwojIDI5ICIvdXNyL2lu Y2x1ZGUvbG9jYWxlLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAy IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVk ZS9iaXRzL2xvY2FsZS5oIiAzCmVudW0KewogIF9fTENfQ1RZUEUgPSAwLAogIF9fTENfTlVNRVJJ QyA9IDEsCiAgX19MQ19USU1FID0gMiwKICBfX0xDX0NPTExBVEUgPSAzLAogIF9fTENfTU9ORVRB UlkgPSA0LAogIF9fTENfTUVTU0FHRVMgPSA1LAogIF9fTENfQUxMID0gNiwKICBfX0xDX1BBUEVS ID0gNywKICBfX0xDX05BTUUgPSA4LAogIF9fTENfQUREUkVTUyA9IDksCiAgX19MQ19URUxFUEhP TkUgPSAxMCwKICBfX0xDX01FQVNVUkVNRU5UID0gMTEsCiAgX19MQ19JREVOVElGSUNBVElPTiA9 IDEyCn07CiMgMzEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCgpleHRlcm4gIkMiIHsKIyA1 MiAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCnN0cnVjdCBsY29udgp7CgoKICBjaGFyICpkZWNp bWFsX3BvaW50OwogIGNoYXIgKnRob3VzYW5kc19zZXA7CgoKCgoKICBjaGFyICpncm91cGluZzsK CgoKCgogIGNoYXIgKmludF9jdXJyX3N5bWJvbDsKICBjaGFyICpjdXJyZW5jeV9zeW1ib2w7CiAg Y2hhciAqbW9uX2RlY2ltYWxfcG9pbnQ7CiAgY2hhciAqbW9uX3Rob3VzYW5kc19zZXA7CiAgY2hh ciAqbW9uX2dyb3VwaW5nOwogIGNoYXIgKnBvc2l0aXZlX3NpZ247CiAgY2hhciAqbmVnYXRpdmVf c2lnbjsKICBjaGFyIGludF9mcmFjX2RpZ2l0czsKICBjaGFyIGZyYWNfZGlnaXRzOwoKICBjaGFy IHBfY3NfcHJlY2VkZXM7CgogIGNoYXIgcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgbl9jc19wcmVj ZWRlczsKCiAgY2hhciBuX3NlcF9ieV9zcGFjZTsKCgoKCgoKICBjaGFyIHBfc2lnbl9wb3NuOwog IGNoYXIgbl9zaWduX3Bvc247CgoKICBjaGFyIGludF9wX2NzX3ByZWNlZGVzOwoKICBjaGFyIGlu dF9wX3NlcF9ieV9zcGFjZTsKCiAgY2hhciBpbnRfbl9jc19wcmVjZWRlczsKCiAgY2hhciBpbnRf bl9zZXBfYnlfc3BhY2U7CgoKCgoKCiAgY2hhciBpbnRfcF9zaWduX3Bvc247CiAgY2hhciBpbnRf bl9zaWduX3Bvc247CiMgMTE5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKfTsKCgoKZXh0ZXJu IGNoYXIgKnNldGxvY2FsZSAoaW50IF9fY2F0ZWdvcnksIF9fY29uc3QgY2hhciAqX19sb2NhbGUp IHRocm93ICgpOwoKCmV4dGVybiBzdHJ1Y3QgbGNvbnYgKmxvY2FsZWNvbnYgKHZvaWQpIHRocm93 ICgpOwojIDE0OSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCmV4dGVybiBfX2xvY2FsZV90IF9f bmV3bG9jYWxlIChpbnQgX19jYXRlZ29yeV9tYXNrLCBfX2NvbnN0IGNoYXIgKl9fbG9jYWxlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2Jhc2UpIHRocm93ICgp OwoKCgpleHRlcm4gX19sb2NhbGVfdCBfX2R1cGxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQp IHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBfX2ZyZWVsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRh c2V0KSB0aHJvdyAoKTsKCgp9CiMgNTAgIi91c3IvaW5jbHVkZS9nKystdjMvY2xvY2FsZSIgMiAz CgoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpsY29udjsKICB1c2luZyA6OnNldGxvY2Fs ZTsKICB1c2luZyA6OmxvY2FsZWNvbnY7Cn0KIyAzNyAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2 LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvbGFu Z2luZm8uaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL25sX3R5cGVzLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvbmxfdHlwZXMuaCIgMwpl eHRlcm4gIkMiIHsKCgp0eXBlZGVmIHZvaWQgKm5sX2NhdGQ7CgoKdHlwZWRlZiBpbnQgbmxfaXRl bTsKCgpleHRlcm4gbmxfY2F0ZCBjYXRvcGVuIChfX2NvbnN0IGNoYXIgKl9fY2F0X25hbWUsIGlu dCBfX2ZsYWcpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqY2F0Z2V0cyAobmxfY2F0ZCBfX2Nh dGFsb2csIGludCBfX3NldCwgaW50IF9fbnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjYXRjbG9zZSAobmxf Y2F0ZCBfX2NhdGFsb2cpIHRocm93ICgpOwoKfQojIDI1ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8u aCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAxIDMKIyAyNyAiL3Vzci9p bmNsdWRlL2xhbmdpbmZvLmgiIDIgMwoKCmV4dGVybiAiQyIgewojIDQzICIvdXNyL2luY2x1ZGUv bGFuZ2luZm8uaCIgMwplbnVtCnsKCgoKICBBQkRBWV8xID0gKCgoX19MQ19USU1FKSA8PCAxNikg fCAoMCkpLAoKICBBQkRBWV8yLAoKICBBQkRBWV8zLAoKICBBQkRBWV80LAoKICBBQkRBWV81LAoK ICBBQkRBWV82LAoKICBBQkRBWV83LAoKCgogIERBWV8xLAoKICBEQVlfMiwKCiAgREFZXzMsCgog IERBWV80LAoKICBEQVlfNSwKCiAgREFZXzYsCgogIERBWV83LAoKCgogIEFCTU9OXzEsCgogIEFC TU9OXzIsCgogIEFCTU9OXzMsCgogIEFCTU9OXzQsCgogIEFCTU9OXzUsCgogIEFCTU9OXzYsCgog IEFCTU9OXzcsCgogIEFCTU9OXzgsCgogIEFCTU9OXzksCgogIEFCTU9OXzEwLAoKICBBQk1PTl8x MSwKCiAgQUJNT05fMTIsCgoKCiAgTU9OXzEsCgogIE1PTl8yLAoKICBNT05fMywKCiAgTU9OXzQs CgogIE1PTl81LAoKICBNT05fNiwKCiAgTU9OXzcsCgogIE1PTl84LAoKICBNT05fOSwKCiAgTU9O XzEwLAoKICBNT05fMTEsCgogIE1PTl8xMiwKCgogIEFNX1NUUiwKCiAgUE1fU1RSLAoKCiAgRF9U X0ZNVCwKCiAgRF9GTVQsCgogIFRfRk1ULAoKICBUX0ZNVF9BTVBNLAoKCiAgRVJBLAoKICBfX0VS QV9ZRUFSLAoKCgogIEVSQV9EX0ZNVCwKCiAgQUxUX0RJR0lUUywKCiAgRVJBX0RfVF9GTVQsCgog IEVSQV9UX0ZNVCwKCgogIF9OTF9USU1FX0VSQV9OVU1fRU5UUklFUywKICBfTkxfVElNRV9FUkFf RU5UUklFUywKCiAgX05MX1dBQkRBWV8xLAogIF9OTF9XQUJEQVlfMiwKICBfTkxfV0FCREFZXzMs CiAgX05MX1dBQkRBWV80LAogIF9OTF9XQUJEQVlfNSwKICBfTkxfV0FCREFZXzYsCiAgX05MX1dB QkRBWV83LAoKCiAgX05MX1dEQVlfMSwKICBfTkxfV0RBWV8yLAogIF9OTF9XREFZXzMsCiAgX05M X1dEQVlfNCwKICBfTkxfV0RBWV81LAogIF9OTF9XREFZXzYsCiAgX05MX1dEQVlfNywKCgogIF9O TF9XQUJNT05fMSwKICBfTkxfV0FCTU9OXzIsCiAgX05MX1dBQk1PTl8zLAogIF9OTF9XQUJNT05f NCwKICBfTkxfV0FCTU9OXzUsCiAgX05MX1dBQk1PTl82LAogIF9OTF9XQUJNT05fNywKICBfTkxf V0FCTU9OXzgsCiAgX05MX1dBQk1PTl85LAogIF9OTF9XQUJNT05fMTAsCiAgX05MX1dBQk1PTl8x MSwKICBfTkxfV0FCTU9OXzEyLAoKCiAgX05MX1dNT05fMSwKICBfTkxfV01PTl8yLAogIF9OTF9X TU9OXzMsCiAgX05MX1dNT05fNCwKICBfTkxfV01PTl81LAogIF9OTF9XTU9OXzYsCiAgX05MX1dN T05fNywKICBfTkxfV01PTl84LAogIF9OTF9XTU9OXzksCiAgX05MX1dNT05fMTAsCiAgX05MX1dN T05fMTEsCiAgX05MX1dNT05fMTIsCgogIF9OTF9XQU1fU1RSLAogIF9OTF9XUE1fU1RSLAoKICBf TkxfV0RfVF9GTVQsCiAgX05MX1dEX0ZNVCwKICBfTkxfV1RfRk1ULAogIF9OTF9XVF9GTVRfQU1Q TSwKCiAgX05MX1dFUkFfWUVBUiwKICBfTkxfV0VSQV9EX0ZNVCwKICBfTkxfV0FMVF9ESUdJVFMs CiAgX05MX1dFUkFfRF9UX0ZNVCwKICBfTkxfV0VSQV9UX0ZNVCwKCiAgX05MX1RJTUVfV0VFS19O REFZUywKICBfTkxfVElNRV9XRUVLXzFTVERBWSwKICBfTkxfVElNRV9XRUVLXzFTVFdFRUssCiAg X05MX1RJTUVfRklSU1RfV0VFS0RBWSwKICBfTkxfVElNRV9GSVJTVF9XT1JLREFZLAogIF9OTF9U SU1FX0NBTF9ESVJFQ1RJT04sCiAgX05MX1RJTUVfVElNRVpPTkUsCgogIF9EQVRFX0ZNVCwKCiAg X05MX1dfREFURV9GTVQsCgogIF9OTF9USU1FX0NPREVTRVQsCgogIF9OTF9OVU1fTENfVElNRSwK CgoKCiAgX05MX0NPTExBVEVfTlJVTEVTID0gKCgoX19MQ19DT0xMQVRFKSA8PCAxNikgfCAoMCkp LAogIF9OTF9DT0xMQVRFX1JVTEVTRVRTLAogIF9OTF9DT0xMQVRFX1RBQkxFTUIsCiAgX05MX0NP TExBVEVfV0VJR0hUTUIsCiAgX05MX0NPTExBVEVfRVhUUkFNQiwKICBfTkxfQ09MTEFURV9JTkRJ UkVDVE1CLAogIF9OTF9DT0xMQVRFX0dBUDEsCiAgX05MX0NPTExBVEVfR0FQMiwKICBfTkxfQ09M TEFURV9HQVAzLAogIF9OTF9DT0xMQVRFX1RBQkxFV0MsCiAgX05MX0NPTExBVEVfV0VJR0hUV0Ms CiAgX05MX0NPTExBVEVfRVhUUkFXQywKICBfTkxfQ09MTEFURV9JTkRJUkVDVFdDLAogIF9OTF9D T0xMQVRFX1NZTUJfSEFTSF9TSVpFTUIsCiAgX05MX0NPTExBVEVfU1lNQl9UQUJMRU1CLAogIF9O TF9DT0xMQVRFX1NZTUJfRVhUUkFNQiwKICBfTkxfQ09MTEFURV9DT0xMU0VRTUIsCiAgX05MX0NP TExBVEVfQ09MTFNFUVdDLAogIF9OTF9DT0xMQVRFX0NPREVTRVQsCiAgX05MX05VTV9MQ19DT0xM QVRFLAoKCgoKICBfTkxfQ1RZUEVfQ0xBU1MgPSAoKChfX0xDX0NUWVBFKSA8PCAxNikgfCAoMCkp LAogIF9OTF9DVFlQRV9UT1VQUEVSLAogIF9OTF9DVFlQRV9HQVAxLAogIF9OTF9DVFlQRV9UT0xP V0VSLAogIF9OTF9DVFlQRV9HQVAyLAogIF9OTF9DVFlQRV9DTEFTUzMyLAogIF9OTF9DVFlQRV9H QVAzLAogIF9OTF9DVFlQRV9HQVA0LAogIF9OTF9DVFlQRV9HQVA1LAogIF9OTF9DVFlQRV9HQVA2 LAogIF9OTF9DVFlQRV9DTEFTU19OQU1FUywKICBfTkxfQ1RZUEVfTUFQX05BTUVTLAogIF9OTF9D VFlQRV9XSURUSCwKICBfTkxfQ1RZUEVfTUJfQ1VSX01BWCwKICBfTkxfQ1RZUEVfQ09ERVNFVF9O QU1FLAogIENPREVTRVQgPSBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FLAoKICBfTkxfQ1RZUEVfVE9V UFBFUjMyLAogIF9OTF9DVFlQRV9UT0xPV0VSMzIsCiAgX05MX0NUWVBFX0NMQVNTX09GRlNFVCwK ICBfTkxfQ1RZUEVfTUFQX09GRlNFVCwKICBfTkxfQ1RZUEVfSU5ESUdJVFNfTUJfTEVOLAogIF9O TF9DVFlQRV9JTkRJR0lUUzBfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTMV9NQiwKICBfTkxfQ1RZ UEVfSU5ESUdJVFMyX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzNfTUIsCiAgX05MX0NUWVBFX0lO RElHSVRTNF9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM1X01CLAogIF9OTF9DVFlQRV9JTkRJR0lU UzZfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTN19NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM4X01C LAogIF9OTF9DVFlQRV9JTkRJR0lUUzlfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTX1dDX0xFTiwK ICBfTkxfQ1RZUEVfSU5ESUdJVFMwX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfV0MsCiAgX05M X0NUWVBFX0lORElHSVRTMl9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMzX1dDLAogIF9OTF9DVFlQ RV9JTkRJR0lUUzRfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTNV9XQywKICBfTkxfQ1RZUEVfSU5E SUdJVFM2X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzdfV0MsCiAgX05MX0NUWVBFX0lORElHSVRT OF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM5X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDBfTUIs CiAgX05MX0NUWVBFX09VVERJR0lUMV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQyX01CLAogIF9O TF9DVFlQRV9PVVRESUdJVDNfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUNF9NQiwKICBfTkxfQ1RZ UEVfT1VURElHSVQ1X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDZfTUIsCiAgX05MX0NUWVBFX09V VERJR0lUN19NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ4X01CLAogIF9OTF9DVFlQRV9PVVRESUdJ VDlfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQxX1dD LAogIF9OTF9DVFlQRV9PVVRESUdJVDJfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUM19XQywKICBf TkxfQ1RZUEVfT1VURElHSVQ0X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDVfV0MsCiAgX05MX0NU WVBFX09VVERJR0lUNl9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ3X1dDLAogIF9OTF9DVFlQRV9P VVRESUdJVDhfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUOV9XQywKICBfTkxfQ1RZUEVfVFJBTlNM SVRfVEFCX1NJWkUsCiAgX05MX0NUWVBFX1RSQU5TTElUX0ZST01fSURYLAogIF9OTF9DVFlQRV9U UkFOU0xJVF9GUk9NX1RCTCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9fSURYLAogIF9OTF9DVFlQ RV9UUkFOU0xJVF9UT19UQkwsCiAgX05MX0NUWVBFX1RSQU5TTElUX0RFRkFVTFRfTUlTU0lOR19M RU4sCiAgX05MX0NUWVBFX1RSQU5TTElUX0RFRkFVTFRfTUlTU0lORywKICBfTkxfQ1RZUEVfVFJB TlNMSVRfSUdOT1JFX0xFTiwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfSUdOT1JFLAogIF9OTF9DVFlQ RV9FWFRSQV9NQVBfMSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzIsCiAgX05MX0NUWVBFX0VYVFJB X01BUF8zLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzUs CiAgX05MX0NUWVBFX0VYVFJBX01BUF82LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNywKICBfTkxf Q1RZUEVfRVhUUkFfTUFQXzgsCiAgX05MX0NUWVBFX0VYVFJBX01BUF85LAogIF9OTF9DVFlQRV9F WFRSQV9NQVBfMTAsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMSwKICBfTkxfQ1RZUEVfRVhUUkFf TUFQXzEyLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTMsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8x NCwKICBfTkxfTlVNX0xDX0NUWVBFLAoKCgoKICBfX0lOVF9DVVJSX1NZTUJPTCA9ICgoKF9fTENf TU9ORVRBUlkpIDw8IDE2KSB8ICgwKSksCgoKCiAgX19DVVJSRU5DWV9TWU1CT0wsCgoKCiAgX19N T05fREVDSU1BTF9QT0lOVCwKCgoKICBfX01PTl9USE9VU0FORFNfU0VQLAoKCgogIF9fTU9OX0dS T1VQSU5HLAoKCgogIF9fUE9TSVRJVkVfU0lHTiwKCgoKICBfX05FR0FUSVZFX1NJR04sCgoKCiAg X19JTlRfRlJBQ19ESUdJVFMsCgoKCiAgX19GUkFDX0RJR0lUUywKCgoKICBfX1BfQ1NfUFJFQ0VE RVMsCgoKCiAgX19QX1NFUF9CWV9TUEFDRSwKCgoKICBfX05fQ1NfUFJFQ0VERVMsCgoKCiAgX19O X1NFUF9CWV9TUEFDRSwKCgoKICBfX1BfU0lHTl9QT1NOLAoKCgogIF9fTl9TSUdOX1BPU04sCgoK CiAgX05MX01PTkVUQVJZX0NSTkNZU1RSLAoKICBfX0lOVF9QX0NTX1BSRUNFREVTLAoKCgogIF9f SU5UX1BfU0VQX0JZX1NQQUNFLAoKCgogIF9fSU5UX05fQ1NfUFJFQ0VERVMsCgoKCiAgX19JTlRf Tl9TRVBfQllfU1BBQ0UsCgoKCiAgX19JTlRfUF9TSUdOX1BPU04sCgoKCiAgX19JTlRfTl9TSUdO X1BPU04sCgoKCiAgX05MX01PTkVUQVJZX0RVT19JTlRfQ1VSUl9TWU1CT0wsCiAgX05MX01PTkVU QVJZX0RVT19DVVJSRU5DWV9TWU1CT0wsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfRlJBQ19ESUdJ VFMsCiAgX05MX01PTkVUQVJZX0RVT19GUkFDX0RJR0lUUywKICBfTkxfTU9ORVRBUllfRFVPX1Bf Q1NfUFJFQ0VERVMsCiAgX05MX01PTkVUQVJZX0RVT19QX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9O RVRBUllfRFVPX05fQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVUQVJZX0RVT19OX1NFUF9CWV9TUEFD RSwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9E VU9fSU5UX1BfU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fQ1NfUFJFQ0VE RVMsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfTl9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZ X0RVT19QX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX05fU0lHTl9QT1NOLAogIF9OTF9N T05FVEFSWV9EVU9fSU5UX1BfU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fU0lH Tl9QT1NOLAogIF9OTF9NT05FVEFSWV9VTk9fVkFMSURfRlJPTSwKICBfTkxfTU9ORVRBUllfVU5P X1ZBTElEX1RPLAogIF9OTF9NT05FVEFSWV9EVU9fVkFMSURfRlJPTSwKICBfTkxfTU9ORVRBUllf RFVPX1ZBTElEX1RPLAogIF9OTF9NT05FVEFSWV9DT05WRVJTSU9OX1JBVEUsCiAgX05MX01PTkVU QVJZX0RFQ0lNQUxfUE9JTlRfV0MsCiAgX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsCiAg X05MX01PTkVUQVJZX0NPREVTRVQsCiAgX05MX05VTV9MQ19NT05FVEFSWSwKCgoKICBfX0RFQ0lN QUxfUE9JTlQgPSAoKChfX0xDX05VTUVSSUMpIDw8IDE2KSB8ICgwKSksCgoKCiAgUkFESVhDSEFS ID0gX19ERUNJTUFMX1BPSU5ULAoKICBfX1RIT1VTQU5EU19TRVAsCgoKCiAgVEhPVVNFUCA9IF9f VEhPVVNBTkRTX1NFUCwKCiAgX19HUk9VUElORywKCgoKICBfTkxfTlVNRVJJQ19ERUNJTUFMX1BP SU5UX1dDLAogIF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsCiAgX05MX05VTUVSSUNfQ09E RVNFVCwKICBfTkxfTlVNX0xDX05VTUVSSUMsCgogIF9fWUVTRVhQUiA9ICgoKF9fTENfTUVTU0FH RVMpIDw8IDE2KSB8ICgwKSksCgogIF9fTk9FWFBSLAoKICBfX1lFU1NUUiwKCgoKICBfX05PU1RS LAoKCgogIF9OTF9NRVNTQUdFU19DT0RFU0VULAogIF9OTF9OVU1fTENfTUVTU0FHRVMsCgogIF9O TF9QQVBFUl9IRUlHSFQgPSAoKChfX0xDX1BBUEVSKSA8PCAxNikgfCAoMCkpLAogIF9OTF9QQVBF Ul9XSURUSCwKICBfTkxfUEFQRVJfQ09ERVNFVCwKICBfTkxfTlVNX0xDX1BBUEVSLAoKICBfTkxf TkFNRV9OQU1FX0ZNVCA9ICgoKF9fTENfTkFNRSkgPDwgMTYpIHwgKDApKSwKICBfTkxfTkFNRV9O QU1FX0dFTiwKICBfTkxfTkFNRV9OQU1FX01SLAogIF9OTF9OQU1FX05BTUVfTVJTLAogIF9OTF9O QU1FX05BTUVfTUlTUywKICBfTkxfTkFNRV9OQU1FX01TLAogIF9OTF9OQU1FX0NPREVTRVQsCiAg X05MX05VTV9MQ19OQU1FLAoKICBfTkxfQUREUkVTU19QT1NUQUxfRk1UID0gKCgoX19MQ19BRERS RVNTKSA8PCAxNikgfCAoMCkpLAogIF9OTF9BRERSRVNTX0NPVU5UUllfTkFNRSwKICBfTkxfQURE UkVTU19DT1VOVFJZX1BPU1QsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9BQjIsCiAgX05MX0FERFJF U1NfQ09VTlRSWV9BQjMsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9DQVIsCiAgX05MX0FERFJFU1Nf Q09VTlRSWV9OVU0sCiAgX05MX0FERFJFU1NfQ09VTlRSWV9JU0JOLAogIF9OTF9BRERSRVNTX0xB TkdfTkFNRSwKICBfTkxfQUREUkVTU19MQU5HX0FCLAogIF9OTF9BRERSRVNTX0xBTkdfVEVSTSwK ICBfTkxfQUREUkVTU19MQU5HX0xJQiwKICBfTkxfQUREUkVTU19DT0RFU0VULAogIF9OTF9OVU1f TENfQUREUkVTUywKCiAgX05MX1RFTEVQSE9ORV9URUxfSU5UX0ZNVCA9ICgoKF9fTENfVEVMRVBI T05FKSA8PCAxNikgfCAoMCkpLAogIF9OTF9URUxFUEhPTkVfVEVMX0RPTV9GTVQsCiAgX05MX1RF TEVQSE9ORV9JTlRfU0VMRUNULAogIF9OTF9URUxFUEhPTkVfSU5UX1BSRUZJWCwKICBfTkxfVEVM RVBIT05FX0NPREVTRVQsCiAgX05MX05VTV9MQ19URUxFUEhPTkUsCgogIF9OTF9NRUFTVVJFTUVO VF9NRUFTVVJFTUVOVCA9ICgoKF9fTENfTUVBU1VSRU1FTlQpIDw8IDE2KSB8ICgwKSksCiAgX05M X01FQVNVUkVNRU5UX0NPREVTRVQsCiAgX05MX05VTV9MQ19NRUFTVVJFTUVOVCwKCiAgX05MX0lE RU5USUZJQ0FUSU9OX1RJVExFID0gKCgoX19MQ19JREVOVElGSUNBVElPTikgPDwgMTYpIHwgKDAp KSwKICBfTkxfSURFTlRJRklDQVRJT05fU09VUkNFLAogIF9OTF9JREVOVElGSUNBVElPTl9BRERS RVNTLAogIF9OTF9JREVOVElGSUNBVElPTl9DT05UQUNULAogIF9OTF9JREVOVElGSUNBVElPTl9F TUFJTCwKICBfTkxfSURFTlRJRklDQVRJT05fVEVMLAogIF9OTF9JREVOVElGSUNBVElPTl9GQVgs CiAgX05MX0lERU5USUZJQ0FUSU9OX0xBTkdVQUdFLAogIF9OTF9JREVOVElGSUNBVElPTl9URVJS SVRPUlksCiAgX05MX0lERU5USUZJQ0FUSU9OX0FVRElFTkNFLAogIF9OTF9JREVOVElGSUNBVElP Tl9BUFBMSUNBVElPTiwKICBfTkxfSURFTlRJRklDQVRJT05fQUJCUkVWSUFUSU9OLAogIF9OTF9J REVOVElGSUNBVElPTl9SRVZJU0lPTiwKICBfTkxfSURFTlRJRklDQVRJT05fREFURSwKICBfTkxf SURFTlRJRklDQVRJT05fQ0FURUdPUlksCiAgX05MX0lERU5USUZJQ0FUSU9OX0NPREVTRVQsCiAg X05MX05VTV9MQ19JREVOVElGSUNBVElPTiwKCgogIF9OTF9OVU0KfTsKIyA1NzUgIi91c3IvaW5j bHVkZS9sYW5naW5mby5oIiAzCmV4dGVybiBjaGFyICpubF9sYW5naW5mbyAobmxfaXRlbSBfX2l0 ZW0pIHRocm93ICgpOwojIDU4NiAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMKZXh0ZXJuIGNo YXIgKl9fbmxfbGFuZ2luZm9fbCAobmxfaXRlbSBfX2l0ZW0sIF9fbG9jYWxlX3QgbCk7CgoKfQoj IDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxl LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvbGliaW50bC5oIiAxIDMKIyAzMCAiL3Vzci9pbmNs dWRlL2xpYmludGwuaCIgMwpleHRlcm4gIkMiIHsKCgoKCmV4dGVybiBjaGFyICpnZXR0ZXh0IChf X2NvbnN0IGNoYXIgKl9fbXNnaWQpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZGdldHRleHQg KF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBfX2NvbnN0IGNoYXIgKl9fbXNnaWQpCiAgICAg dGhyb3cgKCk7CmV4dGVybiBjaGFyICpfX2RnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlu bmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoKZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dCAoX19jb25z dCBjaGFyICpfX2RvbWFpbm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19tc2dpZCwgaW50IF9fY2F0ZWdvcnkpIHRocm93ICgpOwpleHRlcm4gY2hhciAqX19kY2dl dHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19tc2dpZCwgaW50IF9fY2F0ZWdvcnkpCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgyKSkpOwoKCgoKZXh0ZXJuIGNoYXIgKm5n ZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fbXNnaWQxLCBfX2NvbnN0IGNoYXIgKl9fbXNnaWQyLAog ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDEpKSkgX19hdHRyaWJ1dGVfXyAoKF9f Zm9ybWF0X2FyZ19fICgyKSkpOwoKCgpleHRlcm4gY2hhciAqZG5nZXR0ZXh0IChfX2NvbnN0IGNo YXIgKl9fZG9tYWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkMSwKICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgX19uKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKSBfX2F0dHJp YnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDMpKSk7CgoKCmV4dGVybiBjaGFyICpkY25nZXR0ZXh0 IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkMSwKICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2lnbmVkIGxv bmcgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2NhdGVnb3J5KQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKSBfX2F0dHJpYnV0 ZV9fICgoX19mb3JtYXRfYXJnX18gKDMpKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnRleHRkb21haW4g KF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmJp bmR0ZXh0ZG9tYWluIChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZGlybmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVy biBjaGFyICpiaW5kX3RleHRkb21haW5fY29kZXNldCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5h bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X2NvZGVzZXQpIHRocm93ICgpOwoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA5NSAiL3Vzci9pbmNsdWRlL2xp YmludGwuaCIgMiAzCiMgMTE1ICIvdXNyL2luY2x1ZGUvbGliaW50bC5oIiAzCn0KIyA0MCAiL3Vz ci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAyIDMK CgoKbmFtZXNwYWNlIHN0ZAp7CiAgdHlwZWRlZiBfX2xvY2FsZV90IF9fY19sb2NhbGU7Cn0KIyA0 NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2NsaW1pdHMiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2NsaW1p dHMiIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVk ZS9saW1pdHMuaCIgMSAzCiMgNTAgIi91c3IvaW5jbHVkZS9nKystdjMvY2xpbWl0cyIgMiAzCiMg NDggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9p bmNsdWRlL2crKy12My9jY3R5cGUiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2NjdHlw ZSIgMwojIDY2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2NjdHlwZSIgMwpuYW1lc3BhY2Ugc3RkCnsK ICB1c2luZyA6OmlzYWxudW07CiAgdXNpbmcgOjppc2FscGhhOwogIHVzaW5nIDo6aXNjbnRybDsK ICB1c2luZyA6OmlzZGlnaXQ7CiAgdXNpbmcgOjppc2dyYXBoOwogIHVzaW5nIDo6aXNsb3dlcjsK ICB1c2luZyA6OmlzcHJpbnQ7CiAgdXNpbmcgOjppc3B1bmN0OwogIHVzaW5nIDo6aXNzcGFjZTsK ICB1c2luZyA6OmlzdXBwZXI7CiAgdXNpbmcgOjppc3hkaWdpdDsKICB1c2luZyA6OnRvbG93ZXI7 CiAgdXNpbmcgOjp0b3VwcGVyOwp9CiMgNDkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2Nh bGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9zdHJpbmciIDEgMwojIDQ0ICIv dXNyL2luY2x1ZGUvZysrLXYzL3N0cmluZyIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L21lbW9yeSIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9nKystdjMvbWVtb3J5IiAzCgojIDEgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgNjcgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKyst djMvY3N0ZGxpYiIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9nKystdjMvY3N0ZGxpYiIgMwojIDg0 ICIvdXNyL2luY2x1ZGUvZysrLXYzL2NzdGRsaWIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcg OjpkaXZfdDsKICB1c2luZyA6OmxkaXZfdDsKCiAgdXNpbmcgOjphYm9ydDsKICB1c2luZyA6OmFi czsKICB1c2luZyA6OmF0ZXhpdDsKICB1c2luZyA6OmF0b2Y7CiAgdXNpbmcgOjphdG9pOwogIHVz aW5nIDo6YXRvbDsKICB1c2luZyA6OmJzZWFyY2g7CiAgdXNpbmcgOjpjYWxsb2M7CiAgdXNpbmcg OjpkaXY7CiAgdXNpbmcgOjpleGl0OwogIHVzaW5nIDo6ZnJlZTsKICB1c2luZyA6OmdldGVudjsK ICB1c2luZyA6OmxhYnM7CiAgdXNpbmcgOjpsZGl2OwogIHVzaW5nIDo6bWFsbG9jOwogIHVzaW5n IDo6bWJsZW47CiAgdXNpbmcgOjptYnN0b3djczsKICB1c2luZyA6Om1idG93YzsKICB1c2luZyA6 OnFzb3J0OwogIHVzaW5nIDo6cmFuZDsKICB1c2luZyA6OnJlYWxsb2M7CiAgdXNpbmcgOjpzcmFu ZDsKICB1c2luZyA6OnN0cnRvZDsKICB1c2luZyA6OnN0cnRvbDsKICB1c2luZyA6OnN0cnRvdWw7 CiAgdXNpbmcgOjpzeXN0ZW07CiAgdXNpbmcgOjp3Y3N0b21iczsKICB1c2luZyA6OndjdG9tYjsK CiAgaW5saW5lIGxvbmcKICBhYnMobG9uZyBfX2kpIHsgcmV0dXJuIGxhYnMoX19pKTsgfQoKICBp bmxpbmUgbGRpdl90CiAgZGl2KGxvbmcgX19pLCBsb25nIF9faikgeyByZXR1cm4gbGRpdihfX2ks IF9faik7IH0KfQojIDEzNiAiL3Vzci9pbmNsdWRlL2crKy12My9jc3RkbGliIiAzCm5hbWVzcGFj ZSBfX2dudV9jeHgKewogIHVzaW5nIDo6bGxkaXZfdDsKICB1c2luZyA6Ol9FeGl0OwoKICBpbmxp bmUgbG9uZyBsb25nCiAgYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194 IDogLV9feDsgfQoKICBpbmxpbmUgbG9uZyBsb25nCiAgbGxhYnMobG9uZyBsb25nIF9feCkgeyBy ZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsbGRpdl90CiAgZGl2KGxv bmcgbG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBf X24gLyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgaW5saW5lIGxs ZGl2X3QKICBsbGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBf X3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19x OyB9CgogIHVzaW5nIDo6YXRvbGw7CiAgdXNpbmcgOjpzdHJ0b2Y7CiAgdXNpbmcgOjpzdHJ0b2xs OwogIHVzaW5nIDo6c3RydG91bGw7CiAgdXNpbmcgOjpzdHJ0b2xkOwp9CgpuYW1lc3BhY2Ugc3Rk CnsKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2X3Q7CiAgdXNpbmcgX19nbnVfY3h4OjpfRXhpdDsK ICB1c2luZyBfX2dudV9jeHg6OmFiczsKICB1c2luZyBfX2dudV9jeHg6OmxsYWJzOwogIHVzaW5n IF9fZ251X2N4eDo6ZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXY7CiAgdXNpbmcgX19nbnVf Y3h4OjphdG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvZjsKICB1c2luZyBfX2dudV9jeHg6 OnN0cnRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b3VsbDsKICB1c2luZyBfX2dudV9jeHg6 OnN0cnRvbGQ7Cn0KIyA2OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5o IiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9uZXciIDEgMwojIDQ0ICIvdXNyL2luY2x1 ZGUvZysrLXYzL25ldyIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CgoKICBjbGFz cyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9hbGxv YygpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9hbGxvYygpIHRocm93KCk7CiAgfTsK CiAgc3RydWN0IG5vdGhyb3dfdCB7IH07CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBub3Rocm93 OwoKCiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CgogIG5ld19oYW5kbGVyIHNldF9u ZXdfaGFuZGxlcihuZXdfaGFuZGxlcik7Cn0KIyA3OSAiL3Vzci9pbmNsdWRlL2crKy12My9uZXci IDMKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2Mp Owp2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9j KTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCopIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVs ZXRlW10odm9pZCopIHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgY29u c3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNp emVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0 ZSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRl bGV0ZVtdKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgoKaW5saW5lIHZv aWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCogX19wKSB0aHJvdygpIHsgcmV0dXJu IF9fcDsgfQppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIHZvaWQqIF9f cCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KCn0KIyA3MCAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF9wYWlyLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3BhaXIuaCIg MwpuYW1lc3BhY2Ugc3RkCnsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVj dCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90 eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKCgoKCiAgcGFpcigpIDogZmlyc3QoKSwg c2Vjb25kKCkge30KCgoKCiAgcGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDog Zmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30KCgogIHRlbXBsYXRlIDxjbGFzcyBfVTEsIGNsYXNz IF9VMj4KICBwYWlyKGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBfX3ApIDogZmlyc3QoX19wLmZpcnN0 KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3Mg X1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNv bnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJz dCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj bGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194 LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5m aXJzdCB8fAogICAgICAgICAoIShfX3kuZmlyc3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQg PCBfX3kuc2Vjb25kKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5l IGJvb2wgb3BlcmF0b3IhPShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9U MSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xh c3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwg X1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9f eDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0 b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195 KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz IF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBj b25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQojIDE0 MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9wYWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNz IF9UMSwgY2xhc3MgX1QyPgoKCmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9f eCwgX1QyIF9feSkKCgoKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCn0K IyA3MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzCiMgNTMgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzCiMgOTAgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy90eXBlX3RyYWl0cy5oIiAzCnN0cnVjdCBfX3RydWVfdHlwZSB7fTsKc3RydWN0IF9f ZmFsc2VfdHlwZSB7fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRz IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0 OwojIDExMyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKICAgdHlw ZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl ZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNl X3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRz PGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl X3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0 IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVt cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q T0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNo b3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90 cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8 PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVt cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWdu ZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5 cGVfdHJhaXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3Np Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9E X3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91Ymxl PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFp dHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZh dWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVu dF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNz IF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07 CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsKICB0eXBlZGVm IF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl cjxib29sPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ IHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy YWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5 cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2lu dGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9 OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190 cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hv cnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3Ry dWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBf SW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRl Z2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoK dGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5 cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQg bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBz dHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50 ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxv bmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPHR5cGVu YW1lIF9UcD4gc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3IgewogICB0eXBlZGVmIF9fZmFsc2Vf dHlwZSBfTm9ybWFsOwp9OwoKCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0 b3I7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K c3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3I8IF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8 X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiA+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfTm9ybWFs Owp9OwojIDczICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoj IDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAx IDMKIyA2OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVz LmgiIDMKCm5hbWVzcGFjZSBzdGQKewojIDgwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307 CgogIHN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgZm9yd2FyZF9pdGVy YXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgYmlkaXJl Y3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcge307Cgog IHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFs X2l0ZXJhdG9yX3RhZyB7fTsKIyAxMDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRl cmF0b3JfYmFzZV90eXBlcy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhdGVnb3J5LCB0eXBl bmFtZSBfVHAsIHR5cGVuYW1lIF9EaXN0YW5jZSA9IHB0cmRpZmZfdCwKICAgICAgICAgICB0eXBl bmFtZSBfUG9pbnRlciA9IF9UcCosIHR5cGVuYW1lIF9SZWZlcmVuY2UgPSBfVHAmPgogICAgc3Ry dWN0IGl0ZXJhdG9yIHsKCiAgICAgIHR5cGVkZWYgX0NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5 OwoKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgIHR5cGVkZWYgX0Rpc3RhbmNl IGRpZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVkZWYgX1BvaW50ZXIgcG9pbnRlcjsKCiAgICAg IHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVn b3J5OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6dmFsdWVfdHlwZSB2YWx1ZV90 eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRp ZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIg cG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSByZWZl cmVuY2U7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgaXRlcmF0 b3JfdHJhaXRzPF9UcCo+IHsKICAgICAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAgICAg dHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIF9UcCogcG9p bnRlcjsKICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICAgIH07CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gewogICAg ICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog ICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm ZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiBwb2ludGVyOwogICAgICB0eXBl ZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0l0ZXI+CiAgICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRl cmF0b3JfY2F0ZWdvcnkKICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImKQogICAg eyByZXR1cm4gdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdv cnkoKTsgfQoKfQojIDc0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgi IDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5j cy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNl X2Z1bmNzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5o IiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMwoj IDY5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIg MiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+ CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZl cmVuY2VfdHlwZQogIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl cmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewoKICAgCgogICAgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7 CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgKytfX2ZpcnN0OyArK19fbjsK ICAgIH0KICAgIHJldHVybiBfX247CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yPgogIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRl cmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAogICAgcmV0dXJuIF9fbGFzdCAt IF9fZmlyc3Q7CiAgfQojIDExMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRv cl9iYXNlX2Z1bmNzLmgiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgaW5s aW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2Vf dHlwZQogIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCkKICB7CgogICAgcmV0dXJuIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJh dG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy LCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFuY2UoX0lucHV0SXRl ciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewoKICAgCiAgICB3 aGlsZSAoX19uLS0pICsrX19pOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFs SXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShf QmlkaXJlY3Rpb25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgIGJp ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAoKICAgIGlmIChfX24gPiAwKQogICAg ICB3aGlsZSAoX19uLS0pICsrX19pOwogICAgZWxzZQogICAgICB3aGlsZSAoX19uKyspIC0tX19p OwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUg X0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRv ciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9y X3RhZykKICB7CgogICAKICAgIF9faSArPSBfX247CiAgfQojIDE2NCAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKdGVtcGxhdGU8dHlwZW5hbWUg X0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIGFkdmFu Y2UoX0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikKICB7CgogICAgX19hZHZhbmNl KF9faSwgX19uLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwogIH0KCn0KIyA3NSAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgODkgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy YXRvcj4KICAgIGNsYXNzIHJldmVyc2VfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAg ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2 YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAg ICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KICAg IHsKICAgIHByb3RlY3RlZDoKICAgICAgX0l0ZXJhdG9yIGN1cnJlbnQ7CgogICAgcHVibGljOgog ICAgICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlm ZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl cmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyIHBvaW50ZXI7CgogICAgcHVibGljOgoKCgog ICAgICByZXZlcnNlX2l0ZXJhdG9yKCkgeyB9CgoKCgogICAgICBleHBsaWNpdAogICAgICByZXZl cnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7IH0KCgoKCiAg ICAgIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvciYgX194KQogICAgICA6 IGN1cnJlbnQoX194LmN1cnJlbnQpIHsgfQoKCgoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9J dGVyPgogICAgICAgIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl cj4mIF9feCkKICAgICAgICA6IGN1cnJlbnQoX194LmJhc2UoKSkgeyB9CgoKCgogICAgICBpdGVy YXRvcl90eXBlCiAgICAgIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CgoKCgoKCiAg ICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICB7CiAgICAgICAgX0l0 ZXJhdG9yIF9fdG1wID0gY3VycmVudDsKICAgICAgICByZXR1cm4gKi0tX190bXA7CiAgICAgIH0K CgoKCgoKICAgICAgcG9pbnRlcgogICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihv cGVyYXRvciooKSk7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0 b3IrKygpCiAgICAgIHsKICAgICAgICAtLWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwog ICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQp CiAgICAgIHsKICAgICAgICByZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAg LS1jdXJyZW50OwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZl cnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci0tKCkKICAgICAgewogICAgICAgICsrY3VycmVu dDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVy YXRvciBvcGVyYXRvci0tKGludCkKICAgICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190 bXAgPSAqdGhpczsKICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAg ICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGRpZmZlcmVu Y2VfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVu dCAtIF9fbik7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3Ir PShkaWZmZXJlbmNlX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY3VycmVudCAtPSBfX247CiAg ICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IK ICAgICAgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJu IHJldmVyc2VfaXRlcmF0b3IoY3VycmVudCArIF9fbik7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9p dGVyYXRvciYKICAgICAgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKQogICAgICB7CiAg ICAgICAgY3VycmVudCArPSBfX247CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoK CiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNv bnN0IHsgcmV0dXJuICooKnRoaXMgKyBfX24pOyB9CiAgICB9OwojIDI2OSAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh dG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRv cjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8 X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVy YXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAg ICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBf X3kuYmFzZSgpIDwgX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+ CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J dGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl cmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJz ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y PD0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAg ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEo X195IDwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUg Ym9vbAogICAgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f eCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kp CiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh dG9yPgogICAgaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlm ZmVyZW5jZV90eXBlCiAgICBvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0 b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+ JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0 b3I+CiAgICBvcGVyYXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+Ojpk aWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8 X0l0ZXJhdG9yPiYgX194KQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+ KF9feC5iYXNlKCkgLSBfX24pOyB9CiMgMzI3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3Mg YmFja19pbnNlcnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRv cl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAg IF9Db250YWluZXIqIGNvbnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250 YWluZXIgY29udGFpbmVyX3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFja19pbnNlcnRf aXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyAzNTMgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBiYWNrX2luc2Vy dF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3Jl ZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192 YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgYmFja19pbnNlcnRf aXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFj a19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoK CiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVy biAqdGhpczsgfQogICAgfTsKIyAzODQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRl cmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYmFj a19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5l ciYgX194KQogICAgeyByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194 KTsgfQojIDM5NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVy YXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9p ZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29u dGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJf dHlwZTsKCgogICAgICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYg X194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyA0MjIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9w ZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAg ICAgewogICAgICAgIGNvbnRhaW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsKICAgICAgICByZXR1 cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9w ZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9y JgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBmcm9udF9pbnNl cnRfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9 OwojIDQ1MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0 b3I8X0NvbnRhaW5lcj4KICAgIGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAgIHsg cmV0dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMgNDcwICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBp dGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAg ewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgICAgIHR5cGVu YW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRl ZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCgoKCiAgICAgIGluc2VydF9pdGVyYXRvcihf Q29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKICAgICAg OiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQojIDUxMiAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3Bl cmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVl KQogICAgICB7CiAgICAgICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUp OwogICAgICAgICsraXRlcjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBp bnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAg ICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0K CgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAq dGhpczsgfQogICAgfTsKIyA1NDQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0 b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXIsIHR5cGVuYW1lIF9JdGVyYXRv cj4KICAgIGlubGluZSBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGluc2VydGVyKF9D b250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9faSkKICAgIHsKICAgICAgcmV0dXJuIGluc2VydF9p dGVyYXRvcjxfQ29udGFpbmVyPihfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IoX19pKSk7CiAgICB9Cn0KCm5h bWVzcGFjZSBfX2dudV9jeHgKewoKCgoKCgoKICB1c2luZyBzdGQ6Oml0ZXJhdG9yX3RyYWl0czsK ICB1c2luZyBzdGQ6Oml0ZXJhdG9yOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlw ZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIDogcHVi bGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRv cl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAg ICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2lu dGVyLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0 ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3Ig X01fY3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVy ZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J dGVyYXRvcj46OnBvaW50ZXIgcG9pbnRlcjsKCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKCkgOiBf TV9jdXJyZW50KF9JdGVyYXRvcigpKSB7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIF9fbm9ybWFs X2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0KCgog ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgaW5saW5lIF9fbm9ybWFsX2l0ZXJh dG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyLCBfQ29udGFpbmVyPiYgX19pKQogICAg ICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0KCgogICAgICByZWZlcmVuY2UKICAgICAg b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKl9NX2N1cnJlbnQ7IH0KCiAgICAgIHBvaW50ZXIK ICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KCiAgICAgIF9f bm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVy biAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQp IHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQrKyk7IH0KCgogICAgICBfX25v cm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItLSgpIHsgLS1fTV9jdXJyZW50OyByZXR1cm4g KnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLS0oaW50KSB7 IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50LS0pOyB9CgoKICAgICAgcmVmZXJl bmNlCiAgICAgIG9wZXJhdG9yW10oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAg ICAgIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3Im CiAgICAgIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01f Y3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IK ICAgICAgb3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7 IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50ICsgX19uKTsgfQoKICAgICAgX19u b3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBf X24pCiAgICAgIHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhpczsgfQoKICAgICAgX19u b3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19u KSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19u KTsgfQoKICAgICAgZGlmZmVyZW5jZV90eXBlCiAgICAgIG9wZXJhdG9yLShjb25zdCBfX25vcm1h bF9pdGVyYXRvciYgX19pKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyZW50IC0gX19pLl9N X2N1cnJlbnQ7IH0KCiAgICAgIGNvbnN0IF9JdGVyYXRvciYKICAgICAgYmFzZSgpIGNvbnN0IHsg cmV0dXJuIF9NX2N1cnJlbnQ7IH0KICAgIH07CiMgNjQ5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBl bmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3Bl cmF0b3I9PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYg X19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBf Q29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2Uo KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+ CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy YXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl cmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFz ZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0 eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAg b3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVy PiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JS LCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJh c2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWlu ZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J dGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMu YmFzZSgpICE9IF9fcmhzLmJhc2UoKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y TCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9v bAogIG9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFp bmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv clIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5i YXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFp bmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J dGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMu YmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckws IHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wK ICBvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5l cj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JS LCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFz ZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5l cj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl cmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFz ZSgpID4gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5 cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBv cGVyYXRvcjw9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+ JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIs IF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFz ZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5l cj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9p dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5i YXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckws IHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wK ICBvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWlu ZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv clIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMu YmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRh aW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8 X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1h bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xo cy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv ciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yLCBfQ29udGFpbmVyPgogIG9wZXJhdG9yKyh0eXBlbmFtZSBfX25vcm1hbF9pdGVyYXRvcjxf SXRlcmF0b3IsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgICBj b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2kpCiAgeyBy ZXR1cm4gX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPihfX2kuYmFzZSgp ICsgX19uKTsgfQp9CiMgNzYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu aCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiMgOTEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVu YW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBpbmxpbmUgdm9pZAogICAgaXRlcl9zd2FwKF9Gb3J3YXJk SXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTE7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjI+Ojp2 YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgogICAgICBf VmFsdWVUeXBlMSBfX3RtcCA9ICpfX2E7CiAgICAgICpfX2EgPSAqX19iOwogICAgICAqX19iID0g X190bXA7CiAgICB9CiMgMTE4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNl LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChf VHAmIF9fYSwgX1RwJiBfX2IpCiAgICB7CgogICAgIAoKICAgICAgX1RwIF9fdG1wID0gX19hOwog ICAgICBfX2EgPSBfX2I7CiAgICAgIF9fYiA9IF9fdG1wOwogICAgfQojIDE0NiAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1Rw JiBfX2IpCiAgICB7CgogICAgIAoKICAgICAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0 dXJuIF9fYTsKICAgIH0KIyAxNjYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jh c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb25zdCBfVHAmCiAg ICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAg IGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMTg2ICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1pbihj b25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAg ICAgIGlmIChfX2NvbXAoX19iLCBfX2EpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQoj IDIwNCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAm CiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXAp CiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9f YTsKICAgIH0KIyAyMjEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgog ICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAg ICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh c3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsK ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIK ICAgIF9fY29weShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QsCiAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgcmFuZG9t X2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBf RGlzdGFuY2U7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9f biA+IDA7IC0tX19uKSB7CiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytf X2ZpcnN0OwogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0 OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19j b3B5X3RyaXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBf X3Jlc3VsdCkKICAgIHsKICAgICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKF9U cCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogICAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0 IC0gX19maXJzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu YW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfYXV4Mihf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2Zp cnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAg IGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf X3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0 LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X2F1eDIoX1RwKiBfX2ZpcnN0LCBfVHAqIF9f bGFzdCwKICAgICAgICAgICAgICAgIF9UcCogX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyBy ZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKGNvbnN0 IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9f cmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3Qs IF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5 cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmky KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9W YWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBl Pjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAg ICAgIHJldHVybiBfT3V0cHV0SXRlcihfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdC5iYXNlKCksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHJpdmlhbCgpKSk7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5l IF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5 cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0 ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJz dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfVHJpdmlhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAg IF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFs IF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0 LmJhc2UoKSwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRl cgogICAgX19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewog ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+Ojpf Tm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KIyAzMzkgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5 cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBjb3B5KF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQog ICAgewoKICAgICAKICAgICAKCgogICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0 ZXJhdG9yPF9JbnB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICAgcmV0dXJuIF9fY29w eV9uaTEoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVj dGlvbmFsSXRlcjI+CiAgICBpbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyMgogICAgX19jb3B5X2Jh Y2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyMSBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCwK ICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAg ICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgICAgICotLV9fcmVzdWx0ID0gKi0tX19s YXN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S YW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBpbmxpbmUg X0JpZGlyZWN0aW9uYWxJdGVyCiAgICBfX2NvcHlfYmFja3dhcmQoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNj ZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S YW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbjsKICAgICAgZm9yIChfX24gPSBf X2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikKICAgICAgICAqLS1fX3Jlc3VsdCA9ICot LV9fbGFzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIy LAogICAgICAgICAgIHR5cGVuYW1lIF9Cb29sVHlwZT4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dh cmRfZGlzcGF0Y2gKICAgIHsKICAgICAgc3RhdGljIF9CaWRpcmVjdGlvbmFsSXRlcjIKICAgICAg Y29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19s YXN0LAogICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQpCiAgICAgIHsKICAg ICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICAgIH0KICAgIH07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1Rw KiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICB7CiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGNvcHko Y29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAg ICAgewogICAgICAgIGNvbnN0IHB0cmRpZmZfdCBfTnVtID0gX19sYXN0IC0gX19maXJzdDsKICAg ICAgICBtZW1tb3ZlKF9fcmVzdWx0IC0gX051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVt KTsKICAgICAgICByZXR1cm4gX19yZXN1bHQgLSBfTnVtOwogICAgICB9CiAgICB9OwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPGNv bnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAgewogICAgICBzdGF0aWMgX1RwKgogICAg ICBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1 bHQpCiAgICAgIHsKICAgICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCos IF9UcCosIF9fdHJ1ZV90eXBlPgogICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19y ZXN1bHQpOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkkxLCB0eXBlbmFt ZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9hdXgoX0JJMSBfX2Zp cnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVf dHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6aGFzX3RyaXZpYWxfYXNzaWdubWVu dF9vcGVyYXRvciBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRj aDxfQkkxLCBfQkkyLCBfVHJpdmlhbD4KICAgICAgICAgICAgICAgICAgOjpjb3B5KF9fZmlyc3Qs IF9fbGFzdCwgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlw ZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25v cm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAg ICB7IHJldHVybiBfQkkyKF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jl c3VsdC5iYXNlKCkpKTsgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJ Mj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVy YXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgeyByZXR1 cm4gX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAg ICBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJ MSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIg X19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19u b3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2Nv cHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0 LmJhc2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9C STEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2lu cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5 cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkky Pjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRf bm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX05vcm1hbCgpKTsKICAgIH0K IyA0NzcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBs YXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIGNv cHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkKICAg IHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1h bF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9i YWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3Jt YWwoKSk7CiAgICB9CiMgNTA5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNl LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAg IHZvaWQKICAgIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs IGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3Qg IT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgfQoj IDUzMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAg ICBfT3V0cHV0SXRlcgogICAgZmlsbF9uKF9PdXRwdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwg Y29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKCiAgICAgIGZvciAoIDsgX19uID4gMDsg LS1fX24sICsrX19maXJzdCkKICAgICAgICAqX19maXJzdCA9IF9fdmFsdWU7CiAgICAgIHJldHVy biBfX2ZpcnN0OwogICAgfQoKCgogIGlubGluZSB2b2lkCiAgZmlsbCh1bnNpZ25lZCBjaGFyKiBf X2ZpcnN0LCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykK ICB7CiAgICB1bnNpZ25lZCBjaGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIF9f dG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChzaWduZWQg Y2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9fbGFzdCwgY29uc3Qgc2lnbmVkIGNoYXImIF9f YykKICB7CiAgICBzaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBz dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0K CiAgaW5saW5lIHZvaWQKICBmaWxsKGNoYXIqIF9fZmlyc3QsIGNoYXIqIF9fbGFzdCwgY29uc3Qg Y2hhciYgX19jKQogIHsKICAgIGNoYXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwg c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIHVuc2lnbmVkIGNoYXIqCiAg ICBmaWxsX24odW5zaWduZWQgY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCB1bnNpZ25l ZCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19j KTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9TaXplPgogICAgaW5saW5lIHNpZ25lZCBjaGFyKgogICAgZmlsbF9uKGNoYXIqIF9fZmlyc3Qs IF9TaXplIF9fbiwgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykKICAgIHsKICAgICAgZmlsbChfX2Zp cnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogICAgICByZXR1cm4gX19maXJzdCArIF9fbjsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgY2hhcioKICAgIGZpbGxf bihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IGNoYXImIF9fYykKICAgIHsKICAgICAg ZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogICAgICByZXR1cm4gX19maXJzdCAr IF9fbjsKICAgIH0KIyA2MDYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVy Mj4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0 SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJ dGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIHdo aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIpIHsKICAg ICAgICArK19fZmlyc3QxOwogICAgICAgICsrX19maXJzdDI7CiAgICAgIH0KICAgICAgcmV0dXJu IHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwogICAg fQojIDY0MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFt ZSBfQmluYXJ5UHJlZGljYXRlPgogICAgcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+CiAg ICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgX0JpbmFyeVByZWRp Y2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHdoaWxlIChfX2Zp cnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7 CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICArK19fZmlyc3QyOwogICAgICB9CiAgICAgIHJl dHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsK ICAgIH0KIyA2NjggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAg IGlubGluZSBib29sCiAgICBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg X19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAgICAKICAg ICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3Qx LCArK19fZmlyc3QyKQogICAgICAgIGlmICghKCpfX2ZpcnN0MSA9PSAqX19maXJzdDIpKQogICAg ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA2OTkgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRp Y2F0ZT4KICAgIGlubGluZSBib29sCiAgICBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAg ICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCiAg ICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikK ICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAg ICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA3MzIgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGJvb2wKICAgIGxleGljb2dyYXBo aWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0 ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3Ig KCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAgICAg ICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9f Zmlyc3QyKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpf X2ZpcnN0MSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gX19m aXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwogICAgfQojIDc2NyAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQ29tcGFyZT4K ICAgIGJvb2wKICAgIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0 SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKICAgICAgZm9yICgg OyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICAgICAg OyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEs ICpfX2ZpcnN0MikpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoX19jb21wKCpf X2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAg ICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwogICAg fQoKICBpbmxpbmUgYm9vbAogIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVk IGNoYXIqIF9fZmlyc3QxLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLCBjb25zdCB1bnNp Z25lZCBjaGFyKiBfX2xhc3QyKQogIHsKICAgIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3Qx IC0gX19maXJzdDE7CiAgICBjb25zdCBzaXplX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3Qy OwogICAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWlu KF9fbGVuMSwgX19sZW4yKSk7CiAgICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwg MCA6IF9fbGVuMSA8IF9fbGVuMjsKICB9CgogIGlubGluZSBib29sCiAgbGV4aWNvZ3JhcGhpY2Fs X2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9f bGFzdDIpCiAgewoKICAgIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2ln bmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgogIH0K Cn0KIyA1NSAiL3Vzci9pbmNsdWRlL2crKy12My9tZW1vcnkiIDIgMwojIDEgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMSAzCiMgODQgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfYWxsb2MuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvY2Fzc2VydCIgMSAz CiMgNDcgIi91c3IvaW5jbHVkZS9nKystdjMvY2Fzc2VydCIgMwoKIyAxICIvdXNyL2luY2x1ZGUv YXNzZXJ0LmgiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKZXh0ZXJuICJDIiB7 CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwg X19jb25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9y X2ZhaWwgKGludCBfX2Vycm51bSwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0 IChjb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5l KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgp9CiMgNDkg Ii91c3IvaW5jbHVkZS9nKystdjMvY2Fzc2VydCIgMiAzCiMgODUgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Z1 bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNl cHQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAz CiMgMzUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVz cGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9p ZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qo dm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190 aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21h aW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1 bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29u c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19p b3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgODYgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90 aHJlYWRzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMu aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgc3RydWN0IF9SZWZjb3VudF9CYXNlCiAgewoKICAg IHR5cGVkZWYgc2l6ZV90IF9SQ190OwoKCiAgICB2b2xhdGlsZSBfUkNfdCBfTV9yZWZfY291bnQ7 CgoKICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX3JlZl9jb3VudF9sb2NrOwoKICAgIF9SZWZjb3Vu dF9CYXNlKF9SQ190IF9fbikgOiBfTV9yZWZfY291bnQoX19uKQogICAgewoKICAgICAgX19ndGhy ZWFkX211dGV4X3QgX190bXAgPSB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAw LCAwIH19OwogICAgICBfTV9yZWZfY291bnRfbG9jayA9IF9fdG1wOwoKCgoKCiAgICB9CgogICAg dm9pZAogICAgX01faW5jcigpCiAgICB7CiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9y ZWZfY291bnRfbG9jayk7CiAgICAgICsrX01fcmVmX2NvdW50OwogICAgICBfX2d0aHJlYWRfbXV0 ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICB9CgogICAgX1JDX3QKICAgIF9NX2Rl Y3IoKQogICAgewogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2sp OwogICAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2NvdW50OwogICAgICBfX2d0 aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgIHJldHVybiBfX3Rt cDsKICAgIH0KICB9OwojIDEwOSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRz LmgiIDMKICB0ZW1wbGF0ZTxpbnQgX19kdW1teT4KICAgIHN0cnVjdCBfU3dhcF9sb2NrX3N0cnVj dAogICAgeyBzdGF0aWMgX19ndGhyZWFkX211dGV4X3QgX1Nfc3dhcF9sb2NrOyB9OwoKICB0ZW1w bGF0ZTxpbnQgX19kdW1teT4KICAgIF9fZ3RocmVhZF9tdXRleF90CiAgICBfU3dhcF9sb2NrX3N0 cnVjdDxfX2R1bW15Pjo6X1Nfc3dhcF9sb2NrID0gezAsIDAsIDAsIFBUSFJFQURfTVVURVhfVElN RURfTlAsIHsgMCwgMCB9fTsKCgoKICBpbmxpbmUgdW5zaWduZWQgbG9uZwogIF9BdG9taWNfc3dh cCh1bnNpZ25lZCBsb25nICogX19wLCB1bnNpZ25lZCBsb25nIF9fcSkKICB7CiAgICBfX2d0aHJl YWRfbXV0ZXhfbG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICB1 bnNpZ25lZCBsb25nIF9fcmVzdWx0ID0gKl9fcDsKICAgICpfX3AgPSBfX3E7CiAgICBfX2d0aHJl YWRfbXV0ZXhfdW5sb2NrKCZfU3dhcF9sb2NrX3N0cnVjdDwwPjo6X1Nfc3dhcF9sb2NrKTsKICAg IHJldHVybiBfX3Jlc3VsdDsKICB9CiMgMTUxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX211dGV4X2xvY2sKICB7CgoKCgoKICAgIF9fZ3Ro cmVhZF9tdXRleF90IF9NX2xvY2s7CgogICAgdm9pZAogICAgX01faW5pdGlhbGl6ZSgpCiAgICB7 CiMgMTg0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogICAgfQoK ICAgIHZvaWQKICAgIF9NX2FjcXVpcmVfbG9jaygpCiAgICB7CgoKCiAgICAgIF9fZ3RocmVhZF9t dXRleF9sb2NrKCZfTV9sb2NrKTsKICAgIH0KCiAgICB2b2lkCiAgICBfTV9yZWxlYXNlX2xvY2so KQogICAgewoKCgogICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9sb2NrKTsKICAgIH0K ICB9OwojIDIyMCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICBz dHJ1Y3QgX1NUTF9hdXRvX2xvY2sKICB7CiAgICBfU1RMX211dGV4X2xvY2smIF9NX2xvY2s7Cgog ICAgX1NUTF9hdXRvX2xvY2soX1NUTF9tdXRleF9sb2NrJiBfX2xvY2spIDogX01fbG9jayhfX2xv Y2spCiAgICB7IF9NX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KCiAgICB+X1NUTF9hdXRvX2xv Y2soKSB7IF9NX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH0KCiAgcHJpdmF0ZToKICAgIHZvaWQg b3BlcmF0b3I9KGNvbnN0IF9TVExfYXV0b19sb2NrJik7CiAgICBfU1RMX2F1dG9fbG9jayhjb25z dCBfU1RMX2F1dG9fbG9jayYpOwogIH07Cgp9CiMgODcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfYWxsb2MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA5OCAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgY2xhc3MgX19uZXdfYWxsb2MKICB7CiAgcHVibGlj OgogICAgc3RhdGljIHZvaWQqCiAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4g OjpvcGVyYXRvciBuZXcoX19uKTsgfQoKICAgIHN0YXRpYyB2b2lkCiAgICBkZWFsbG9jYXRlKHZv aWQqIF9fcCwgc2l6ZV90KQogICAgeyA6Om9wZXJhdG9yIGRlbGV0ZShfX3ApOyB9CiAgfTsKIyAx MjEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlIDxp bnQgX19pbnN0PgogICAgY2xhc3MgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGUKICAgIHsKICAgIHBy aXZhdGU6CiAgICAgIHN0YXRpYyB2b2lkKiBfU19vb21fbWFsbG9jKHNpemVfdCk7CiAgICAgIHN0 YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKICAgICAgc3RhdGljIHZv aWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7CgogICAgcHVibGljOgogICAgICBz dGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIHZv aWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgaWYgKDAgPT0gX19yZXN1bHQpIF9f cmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAg ICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVf dCApCiAgICAgIHsgZnJlZShfX3ApOyB9CgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgcmVhbGxv Y2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAsIHNpemVfdCBfX25ld19zeikKICAgICAgewogICAgICAg IHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgICAgICBpZiAoMCA9 PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAg ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkICgqIF9fc2V0 X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkpKSgpCiAgICAgIHsKICAgICAgICB2b2lkICgq IF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgX19tYWxsb2Nf YWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAgICAgICAgcmV0dXJuKF9fb2xkKTsKICAgICAgfQog ICAgfTsKCgogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAgdm9pZCAoKiBfX21hbGxvY19hbGxv Y190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7Cgog IHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAgdm9pZCoKICAgIF9fbWFsbG9jX2FsbG9jX3RlbXBs YXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCAo KiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZv ciAoOzspCiAgICAgICAgewogICAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9j X2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxl cikKICAgICAgICAgICAgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOwogICAgICAgICAgKCpfX215 X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgICAgX19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAg ICAgICAgIGlmIChfX3Jlc3VsdCkKICAgICAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgICAg ICB9CiAgICB9CgogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAgdm9pZCoKICAgIF9fbWFsbG9j X2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9yZWFsbG9jKHZvaWQqIF9fcCwgc2l6ZV90 IF9fbikKICAgIHsKICAgICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICB2 b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZvciAoOzspCiAgICAgICAgewogICAgICAgICAgX19teV9t YWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgICAgaWYg KDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikKICAgICAgICAgICAgc3RkOjpfX3Rocm93X2JhZF9h bGxvYygpOwogICAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgICAgX19y ZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uKTsKICAgICAgICAgIGlmIChfX3Jlc3VsdCkKICAgICAg ICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgICAgICB9CiAgICB9CgoKCgoKCiAgdHlwZWRlZiBf X25ld19hbGxvYyBfX21lbV9pbnRlcmZhY2U7CiMgMjE5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KICBj bGFzcyBfX3NpbXBsZV9hbGxvYwogIHsKICBwdWJsaWM6CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0 ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gMCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6 YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsgfQoKICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRl KCkKICAgIHsgcmV0dXJuIChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0K CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBp ZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7 IH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wKQogICAgeyBfQWxsb2M6OmRl YWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9CiAgfTsKIyAyNTEgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CiAgY2xh c3MgX19kZWJ1Z19hbGxvYwogIHsKICBwcml2YXRlOgogICAgZW51bSB7X1NfZXh0cmEgPSA4fTsK CgogIHB1YmxpYzoKCiAgICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsK ICAgICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopX0FsbG9jOjphbGxvY2F0ZShfX24gKyAoaW50 KSBfU19leHRyYSk7CiAgICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgICAgcmV0dXJu IF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgICB9CgogICAgc3RhdGljIHZvaWQgZGVhbGxv Y2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgICB7CiAgICAgIGNoYXIqIF9fcmVhbF9wID0g KGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOwogICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKCgq KHNpemVfdCopX19yZWFsX3AgPT0gX19uKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90 KilfX3JlYWxfcCA9PSBfX24iLCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5o IiwgMjcwLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgX0FsbG9jOjpkZWFsbG9j YXRlKF9fcmVhbF9wLCBfX24gKyAoaW50KSBfU19leHRyYSk7CiAgICB9CgogICAgc3RhdGljIHZv aWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19z eikKICAgIHsKICAgICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0 cmE7CiAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29s ZF9zeikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRf c3oiLCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiwgMjc3LCBfX1BSRVRU WV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopCiAgICAg ICAgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9wLCBfX29sZF9zeiArIChpbnQpIF9TX2V4dHJh LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3ogKyAoaW50KSBf U19leHRyYSk7CiAgICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3X3N6OwogICAgICByZXR1 cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICAgIH0KICB9OwojIDMyNCAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBp bnQgX19pbnN0PgogIGNsYXNzIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZQogIHsKICBwcml2YXRl OgogICAgZW51bSB7X0FMSUdOID0gOH07CiAgICBlbnVtIHtfTUFYX0JZVEVTID0gMTI4fTsKICAg IGVudW0ge19ORlJFRUxJU1RTID0gX01BWF9CWVRFUyAvIF9BTElHTn07CgogICAgdW5pb24gX09i agogICAgewogICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgY2hhciBf TV9jbGllbnRfZGF0YVsxXTsKICAgIH07CgogICAgc3RhdGljIF9PYmoqIHZvbGF0aWxlIF9TX2Zy ZWVfbGlzdFtfTkZSRUVMSVNUU107CgoKICAgIHN0YXRpYyBjaGFyKiBfU19zdGFydF9mcmVlOwog ICAgc3RhdGljIGNoYXIqIF9TX2VuZF9mcmVlOwogICAgc3RhdGljIHNpemVfdCBfU19oZWFwX3Np emU7CgogICAgc3RhdGljIF9TVExfbXV0ZXhfbG9jayBfU19ub2RlX2FsbG9jYXRvcl9sb2NrOwoK ICAgIHN0YXRpYyBzaXplX3QKICAgIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQogICAgeyBy ZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KSBfQUxJR04tMSkgJiB+KChzaXplX3QpIF9BTElH TiAtIDEpKTsgfQoKICAgIHN0YXRpYyBzaXplX3QKICAgIF9TX2ZyZWVsaXN0X2luZGV4KHNpemVf dCBfX2J5dGVzKQogICAgeyByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KV9BTElHTi0xKS8o c2l6ZV90KV9BTElHTiAtIDEpOyB9CgoKCiAgICBzdGF0aWMgdm9pZCoKICAgIF9TX3JlZmlsbChz aXplX3QgX19uKTsKCgoKICAgIHN0YXRpYyBjaGFyKgogICAgX1NfY2h1bmtfYWxsb2Moc2l6ZV90 IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCgoKICAgIGNsYXNzIF9Mb2NrCiAgICB7CiAgICBwdWJs aWM6CiAgICAgIF9Mb2NrKCkgeyBpZiAoX190aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2Nr Ll9NX2FjcXVpcmVfbG9jaygpOyB9CiAgICAgIH5fTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1Nf bm9kZV9hbGxvY2F0b3JfbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQogICAgfSBfX2F0dHJpYnV0 ZV9fICgoX191bnVzZWRfXykpOwogICAgZnJpZW5kIGNsYXNzIF9Mb2NrOwoKICBwdWJsaWM6Cgog ICAgc3RhdGljIHZvaWQqCiAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgewogICAgICB2b2lk KiBfX3JldCA9IDA7CgogICAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykKICAgICAg ICBfX3JldCA9IF9fbWVtX2ludGVyZmFjZTo6YWxsb2NhdGUoX19uKTsKICAgICAgZWxzZQogICAg ICAgIHsKICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVf bGlzdAogICAgICAgICAgICArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKCiAgICAgICAgICBf TG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICBfT2JqKiBfX3Jlc3RyaWN0X18gX19yZXN1 bHQgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICBpZiAoX19yZXN1bHQgPT0gMCkKICAgICAg ICAgICAgX19yZXQgPSBfU19yZWZpbGwoX1Nfcm91bmRfdXAoX19uKSk7CiAgICAgICAgICBlbHNl CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Jlc3VsdCAt PiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICBfX3JldCA9IF9fcmVzdWx0OwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9OwoKCiAgICBzdGF0 aWMgdm9pZAogICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgICB7CiAgICAg IGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKQogICAgICAgIF9fbWVtX2ludGVyZmFjZTo6 ZGVhbGxvY2F0ZShfX3AsIF9fbik7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfT2Jq KiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QKICAgICAgICAgICAgPSBfU19mcmVlX2xpc3QgKyBf U19mcmVlbGlzdF9pbmRleChfX24pOwogICAgICAgICAgX09iaiogX19xID0gKF9PYmoqKV9fcDsK CgoKICAgICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAgICAgIF9fcSAtPiBfTV9m cmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICpfX215X2ZyZWVfbGlz dCA9IF9fcTsKICAgICAgICB9CiAgICB9CgogICAgc3RhdGljIHZvaWQqCiAgICByZWFsbG9jYXRl KHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opOwogIH07CgoKICB0 ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvcj09KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z dD4mLAogICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl YWRzLCBfX2luc3Q+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8Ym9vbCBfX3Ro cmVhZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBf X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAgICAgICAgICAg ICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCiAg ICB7IHJldHVybiBmYWxzZTsgfQoKCgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBf X2luc3Q+CiAgICBjaGFyKgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywg X19pbnN0Pjo6X1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgX19ub2Jq cykKICAgIHsKICAgICAgY2hhciogX19yZXN1bHQ7CiAgICAgIHNpemVfdCBfX3RvdGFsX2J5dGVz ID0gX19zaXplICogX19ub2JqczsKICAgICAgc2l6ZV90IF9fYnl0ZXNfbGVmdCA9IF9TX2VuZF9m cmVlIC0gX1Nfc3RhcnRfZnJlZTsKCiAgICAgIGlmIChfX2J5dGVzX2xlZnQgPj0gX190b3RhbF9i eXRlcykKICAgICAgewogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBf U19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsK ICAgICAgfQogICAgICBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKQogICAgICAgIHsK ICAgICAgICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsKICAgICAgICAg IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgICAgX19yZXN1bHQgPSBf U19zdGFydF9mcmVlOwogICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwog ICAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7 CiAgICAgICAgICBzaXplX3QgX19ieXRlc190b19nZXQgPQogICAgICAgICAgICAyICogX190b3Rh bF9ieXRlcyArIF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsKCiAgICAgICAgICBpZiAo X19ieXRlc19sZWZ0ID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9PYmoqIHZvbGF0 aWxlKiBfX215X2ZyZWVfbGlzdCA9CiAgICAgICAgICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19m cmVlbGlzdF9pbmRleChfX2J5dGVzX2xlZnQpOwoKICAgICAgICAgICAgICAoKF9PYmoqKV9TX3N0 YXJ0X2ZyZWUpIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAg ICAgICAgICpfX215X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVlOwogICAgICAgICAg ICB9CiAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKSBfX21lbV9pbnRlcmZhY2U6OmFs bG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICAgIGlmICgwID09IF9TX3N0YXJ0X2ZyZWUp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19pOwogICAgICAgICAgICAgIF9P YmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICBfT2JqKiBfX3A7CgoK CiAgICAgICAgICAgICAgX19pID0gX19zaXplOwogICAgICAgICAgICAgIGZvciAoOyBfX2kgPD0g KHNpemVfdCkgX01BWF9CWVRFUzsgX19pICs9IChzaXplX3QpIF9BTElHTikKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBf U19mcmVlbGlzdF9pbmRleChfX2kpOwogICAgICAgICAgICAgICAgICBfX3AgPSAqX19teV9mcmVl X2xpc3Q7CiAgICAgICAgICAgICAgICAgIGlmICgwICE9IF9fcCkKICAgICAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJl ZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIq KV9fcDsKICAgICAgICAgICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSAr IF9faTsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUs IF9fbm9ianMpKTsKCgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICBfU19lbmRfZnJlZSA9IDA7CiAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9 IChjaGFyKilfX21lbV9pbnRlcmZhY2U6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKCgogICAg ICAgICAgICB9CiAgICAgICAgICBfU19oZWFwX3NpemUgKz0gX19ieXRlc190b19nZXQ7CiAgICAg ICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAg ICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKICAgICAgICB9CiAg ICB9CgoKCgoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHZvaWQq CiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19yZWZp bGwoc2l6ZV90IF9fbikKICAgIHsKICAgICAgaW50IF9fbm9ianMgPSAyMDsKICAgICAgY2hhciog X19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7CiAgICAgIF9PYmoqIHZvbGF0 aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgX09iaiogX19yZXN1bHQ7CiAgICAgIF9PYmoqIF9f Y3VycmVudF9vYmo7CiAgICAgIF9PYmoqIF9fbmV4dF9vYmo7CiAgICAgIGludCBfX2k7CgogICAg ICBpZiAoMSA9PSBfX25vYmpzKSByZXR1cm4oX19jaHVuayk7CiAgICAgIF9fbXlfZnJlZV9saXN0 ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCgogICAgICBfX3Jlc3Vs dCA9IChfT2JqKilfX2NodW5rOwogICAgICAqX19teV9mcmVlX2xpc3QgPSBfX25leHRfb2JqID0g KF9PYmoqKShfX2NodW5rICsgX19uKTsKICAgICAgZm9yIChfX2kgPSAxOyA7IF9faSsrKSB7CiAg ICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7CiAgICAgICAgX19uZXh0X29iaiA9IChf T2JqKikoKGNoYXIqKV9fbmV4dF9vYmogKyBfX24pOwogICAgICAgIGlmIChfX25vYmpzIC0gMSA9 PSBfX2kpIHsKICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSAw OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9fY3VycmVudF9v YmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSBfX25leHRfb2JqOwogICAgICAgIH0KICAgICAgfQog ICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfQoKCiAgdGVtcGxhdGU8Ym9vbCB0aHJlYWRzLCBp bnQgaW5zdD4KICAgIHZvaWQqCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dGhyZWFkcywg aW5zdD46OnJlYWxsb2NhdGUodm9pZCogX19wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29sZF9zeiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uZXdf c3opCiAgICB7CiAgICAgIHZvaWQqIF9fcmVzdWx0OwogICAgICBzaXplX3QgX19jb3B5X3N6OwoK ICAgICAgaWYgKF9fb2xkX3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUyAmJiBfX25ld19zeiA+IChz aXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgICByZXR1cm4ocmVhbGxvYyhfX3AsIF9fbmV3X3N6 KSk7CiAgICAgIH0KICAgICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91 cChfX25ld19zeikpIHJldHVybihfX3ApOwogICAgICBfX3Jlc3VsdCA9IGFsbG9jYXRlKF9fbmV3 X3N6KTsKICAgICAgX19jb3B5X3N6ID0gX19uZXdfc3ogPiBfX29sZF9zej8gX19vbGRfc3ogOiBf X25ld19zejsKICAgICAgbWVtY3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9zeik7CiAgICAgIGRl YWxsb2NhdGUoX19wLCBfX29sZF9zeik7CiAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9Cgog IHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIF9TVExfbXV0ZXhfbG9jawog IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX25vZGVfYWxs b2NhdG9yX2xvY2sKICA9IHsgezAsIDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURfTlAsIHsgMCwg MCB9fSB9OwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBjaGFyKiBf X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19zdGFydF9mcmVl ID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgY2hhciogX19k ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAw OwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBzaXplX3QgX19kZWZh dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsK CiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgdHlwZW5hbWUgX19kZWZh dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X09iaiogdm9sYXRpbGUKICBf X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19mcmVlX2xpc3Rb X05GUkVFTElTVFNdOwoKICB0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAw PiBfX2FsbG9jOwogIHR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBf X3NpbmdsZV9jbGllbnRfYWxsb2M7CiMgNjEzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgYWxsb2NhdG9yCnsKICB0eXBl ZGVmIF9fYWxsb2MgX0FsbG9jOwpwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwog IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRl cjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVm ZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBf VHAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewog ICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKCiAgYWxsb2NhdG9yKCkgdGhy b3coKSB7fQogIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygpIHt9CiAgdGVtcGxh dGUgPGNsYXNzIF9UcDE+IGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3I8X1RwMT4mKSB0aHJvdygp IHt9CiAgfmFsbG9jYXRvcigpIHRocm93KCkge30KCiAgcG9pbnRlciBhZGRyZXNzKHJlZmVyZW5j ZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29u c3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKCgogIF9UcCogYWxsb2Nh dGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKSB7CiAgICByZXR1cm4gX19uICE9IDAg PyBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSkK ICAgICAgICAgICAgICAgICAgICA6IDA7CiAgfQoKCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIg X19wLCBzaXplX3R5cGUgX19uKQogICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBz aXplb2YoX1RwKSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQogICAg eyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBv aW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2 b2lkIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlPD4K Y2xhc3MgYWxsb2NhdG9yPHZvaWQ+IHsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlw ZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiBw b2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZv aWQgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewog ICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKfTsKCgp0ZW1wbGF0ZSA8Y2xh c3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgYWxsb2NhdG9y PF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGFs bG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9 CiMgNjk1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX19hbGxvY2F0b3IKewogIF9BbGxvYyBf X3VuZGVybHlpbmdfYWxsb2M7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVm IHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlw ZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsK ICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwIHZhbHVl X3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVk ZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9OwoKICBfX2FsbG9jYXRvcigp IHRocm93KCkge30KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0aHJvdygp CiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQogIHRl bXBsYXRlIDxjbGFzcyBfVHAxPgogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yPF9UcDEs IF9BbGxvYz4mIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5k ZXJseWluZ19hbGxvYykge30KICB+X19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50ZXIg YWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9p bnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0K CgogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKSB7CiAgICBy ZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0YXRpY19jYXN0PF9UcCo+KF9fdW5kZXJseWluZ19h bGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgOiAwOwogIH0KCgogIHZv aWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX191bmRlcmx5 aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KCiAgc2l6ZV90 eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNp emVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9f dmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3Ap IHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9fYWxs b2NhdG9yPHZvaWQsIF9BbGxvYz4gewogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBl ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwog IHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgdmFsdWVf dHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRl ZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07Cn07Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19hbGxv Y2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9f YWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJseWlu Z19hbGxvYyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9y PF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9j YXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxs b2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCgoKCgoKCnRlbXBsYXRlIDxpbnQgaW5z dD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxp bnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxh dGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgppbmxp bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4m LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f aW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxp bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiB0 cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv bnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg X19kZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsKfQojIDg0MCAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvY2F0b3I+CnN0cnVjdCBfQWxsb2NfdHJhaXRzCnsKICBzdGF0aWMgY29uc3QgYm9v bCBfU19pbnN0YW5jZWxlc3MgPSBmYWxzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6 OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBhbGxvY2F0b3JfdHlwZTsKfTsKCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxf VHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX1RwMT4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1RwMT4gPgp7 CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9f c2ltcGxlX2FsbG9jPF9UcCwgX19hbGxvYz4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxvY2F0 b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGludCBf X2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8 X19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwog IHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu c3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2Fs bG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8 X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KewogIHN0 YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBs ZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4g PgogICAgICAgICAgX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVm YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICAgICAgYWxsb2Nh dG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3Qg X0FsbG9jX3RyYWl0czxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMgY29u c3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8 X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxs b2NhdG9yPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0Fs bG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9f bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBf U19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX21h bGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2Fs bG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3Jf dHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBib29sIF9fdGhyLCBp bnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAg ICBfX2FsbG9jYXRvcjxfVHAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19k ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLCBfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0 IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9U cCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAgICAgX0Fs bG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1w bGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190 cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CnsK ICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgX19z aW1wbGVfYWxsb2M8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0 eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9y X3R5cGU7Cn07CgoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPGNoYXI+Owog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBhbGxvY2F0b3I8d2NoYXJfdD47CgoKCiAgZXh0ZXJuIHRl bXBsYXRlIGNsYXNzIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPjsKCn0KIyA1NiAi L3Vzci9pbmNsdWRlL2crKy12My9tZW1vcnkiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDY3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX2NvbnN0cnVjdC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKCgogIHRlbXBsYXRlIDxjbGFz cyBfVDEsIGNsYXNzIF9UMj4KICAgIGlubGluZSB2b2lkCiAgICBfQ29uc3RydWN0KF9UMSogX19w LCBjb25zdCBfVDImIF9fdmFsdWUpCiAgICB7IG5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkp IF9UMShfX3ZhbHVlKTsgfQoKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgogICAgaW5saW5l IHZvaWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3ApCiAgICB7IG5ldyAoc3RhdGljX2Nhc3Q8dm9p ZCo+KF9fcCkpIF9UMSgpOyB9CiMgOTggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29u c3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlubGlu ZSB2b2lkCiAgICBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zvcndh cmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdDsgKytfX2ZpcnN0KSBfRGVzdHJveSgmKl9fZmlyc3QpOyB9CiMgMTEyICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2Fy ZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBfX3RydWVfdHlwZSkKICAgIHsgfQoKCgoKCgog IHRlbXBsYXRlIDxjbGFzcyBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX0Rlc3Ryb3koX1RwKiBf X3BvaW50ZXIpCiAgICB7IF9fcG9pbnRlci0+fl9UcCgpOyB9CiMgMTM0ICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX0Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAg ICAgICAgICAgICAgICAgICBfVmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5 cGVfdHJhaXRzPF9WYWx1ZV90eXBlPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAg ICAgICAgICAgICAgIF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwoKICAgICAgX19kZXN0cm95X2F1 eChfX2ZpcnN0LCBfX2xhc3QsIF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yKCkpOwogICAgfQp9CiMg NTcgIi91c3IvaW5jbHVkZS9nKystdjMvbWVtb3J5IiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDY2ICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxp bmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf Rm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVl X3R5cGUpCiAgICB7IHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAg IF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv cndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2Vf dHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiAgICAgIHRy eSB7CiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3Vy KQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICAgICAgcmV0dXJu IF9fY3VyOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVz dHJveShfX3Jlc3VsdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoj IDEwNiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBp bmxpbmUgX0ZvcndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2Zp cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90 eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFs dWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9fdW5pbml0aWFsaXpl ZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkpOwogICAgfQoK ICBpbmxpbmUgY2hhcioKICB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwg Y29uc3QgY2hhciogX19sYXN0LCBjaGFyKiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVz dWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJldHVybiBfX3Jlc3VsdCArIChf X2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB3Y2hhcl90KgogIHVuaW5pdGlhbGl6ZWRf Y29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hhcl90KiBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQogIHsKICAgIG1lbW1vdmUoX19yZXN1 bHQsIF9fZmlyc3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7CiAgICBy ZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAgfQoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9f dW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190 cnVlX3R5cGUpCiAgICB7IGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX191bmlu aXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNl X3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgICAgIHRy eSB7CiAgICAgICAgZm9yICggOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpCiAgICAgICAgICBf Q29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAg IHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAgICAgICAgIHRocm93Owog ICAgICAgIH0KICAgIH0KIyAxNjQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0 aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBf VHA+CiAgICBpbmxpbmUgdm9pZAogICAgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlw ZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVl VHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1 eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBp bmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICByZXR1cm4gZmlsbF9uKF9f Zmlyc3QsIF9fbiwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy LCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3Vu aW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlw ZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICAgICAgdHJ5IHsK ICAgICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQogICAgICAgICAgX0NvbnN0 cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICAgIHJldHVybiBfX2N1cjsKICAgICAgfQogICAgICBj YXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOwog ICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDIxMCAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0ZvcndhcmRJ dGVyCiAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUg X19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19Q T0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24s IF9feCwgX0lzX1BPRCgpKTsKICAgIH0KIyAyMjcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5 cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgX0Zv cndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1dEl0ZXIxIF9fZmly c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQogICAgewogICAgICBfRm9yd2Fy ZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVz dWx0KTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmly c3QyLCBfX2xhc3QyLCBfX21pZCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsK ICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgICAgICAgICB0aHJvdzsKICAg ICAgICB9CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5h bWUgX1RwLCB0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAg X191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJk SXRlciBfX21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX3Jlc3VsdCwgX19t aWQsIF9feCk7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShf X2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAg ewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsKICAgICAgICAgIHRocm93Owog ICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmlu aXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFz dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0Miwg X0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IF9UcCYgX194KQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQyID0gdW5pbml0aWFsaXpl ZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CiAgICAgIHRyeSB7CiAgICAgICAg dW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194KTsKICAgICAgfQogICAgICBj YXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJzdDIsIF9fbWlkMik7 CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9Cgp9CiMgNTkgIi91c3IvaW5jbHVkZS9n KystdjMvbWVtb3J5IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Jhd19z dG9yYWdlX2l0ZXIuaCIgMSAzCiMgNjQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcmF3 X3N0b3JhZ2VfaXRlci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg X0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIHJhd19zdG9yYWdlX2l0ZXJhdG9y CiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2 b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9N X2l0ZXI7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICByYXdfc3RvcmFnZV9pdGVy YXRvcihfRm9yd2FyZEl0ZXJhdG9yIF9feCkgOiBfTV9pdGVyKF9feCkge30KCiAgICAgIHJhd19z dG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKICAg ICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fZWxl bWVudCkKICAgICAgewogICAgICAgIF9Db25zdHJ1Y3QoJipfTV9pdGVyLCBfX2VsZW1lbnQpOwog ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8 X0ZvcndhcmRJdGVyYXRvciwgX1RwPiYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAgICAg ICArK19NX2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICByYXdfc3Rv cmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+CiAgICAgIG9wZXJhdG9yKysoaW50 KQogICAgICB7CiAgICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwg X1RwPiBfX3RtcCA9ICp0aGlzOwogICAgICAgICsrX01faXRlcjsKICAgICAgICByZXR1cm4gX190 bXA7CiAgICAgIH0KICAgIH07Cn0KIyA2MCAiL3Vzci9pbmNsdWRlL2crKy12My9tZW1vcnkiIDIg MwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVHA+CiAgcGFpcjxf VHAqLCBwdHJkaWZmX3Q+CiAgX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4s IF9UcCopCiAgewogICAgaWYgKF9fbGVuID4gcHRyZGlmZl90KDIxNDc0ODM2NDcgLyBzaXplb2Yo X1RwKSkpCiAgICAgIF9fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICAgIHdoaWxl IChfX2xlbiA+IDApIHsKICAgICAgX1RwKiBfX3RtcCA9IChfVHAqKSBzdGQ6Om1hbGxvYygoc3Rk OjpzaXplX3QpX19sZW4gKiBzaXplb2YoX1RwKSk7CiAgICAgIGlmIChfX3RtcCAhPSAwKQogICAg ICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190bXAsIF9fbGVuKTsKICAgICAgX19s ZW4gLz0gMjsKICAgIH0KCiAgICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChfVHAqKTAs IDApOwogIH0KIyAxMDIgIi91c3IvaW5jbHVkZS9nKystdjMvbWVtb3J5IiAzCiAgdGVtcGxhdGUg PGNsYXNzIF9UcD4KICBpbmxpbmUgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IGdldF90ZW1wb3Jhcnlf YnVmZmVyKHB0cmRpZmZfdCBfX2xlbikgewogICAgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZm ZXIoX19sZW4sIChfVHAqKSAwKTsKICB9CiMgMTE0ICIvdXNyL2luY2x1ZGUvZysrLXYzL21lbW9y eSIgMwogIHRlbXBsYXRlIDxjbGFzcyBfVHA+CiAgdm9pZCByZXR1cm5fdGVtcG9yYXJ5X2J1ZmZl cihfVHAqIF9fcCkgewogICAgc3RkOjpmcmVlKF9fcCk7CiAgfQoKCnRlbXBsYXRlIDxjbGFzcyBf VHAxPgogIHN0cnVjdCBhdXRvX3B0cl9yZWYKewogICBfVHAxKiBfTV9wdHI7CiAgIGF1dG9fcHRy X3JlZihfVHAxKiBfX3ApIDogX01fcHRyKF9fcCkge30KfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBf VHA+CiAgY2xhc3MgYXV0b19wdHIKewpwcml2YXRlOgogIF9UcCogX01fcHRyOwoKcHVibGljOgog IHR5cGVkZWYgX1RwIGVsZW1lbnRfdHlwZTsKCiAgZXhwbGljaXQgYXV0b19wdHIoX1RwKiBfX3Ag PSAwKSB0aHJvdygpIDogX01fcHRyKF9fcCkge30KICBhdXRvX3B0cihhdXRvX3B0ciYgX19hKSB0 aHJvdygpIDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHt9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAx PiBhdXRvX3B0cihhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX2Eu cmVsZWFzZSgpKSB7fQoKICBhdXRvX3B0ciYgb3BlcmF0b3I9KGF1dG9fcHRyJiBfX2EpIHRocm93 KCkgewogICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB0 ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBhdXRvX3B0ciYgb3BlcmF0b3I9KGF1dG9fcHRyPF9UcDE+ JiBfX2EpIHRocm93KCkgewogICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICByZXR1cm4gKnRo aXM7CiAgfQoKCgoKCiAgfmF1dG9fcHRyKCkgeyBkZWxldGUgX01fcHRyOyB9CgogIF9UcCYgb3Bl cmF0b3IqKCkgY29uc3QgdGhyb3coKSB7CiAgICByZXR1cm4gKl9NX3B0cjsKICB9CiAgX1RwKiBv cGVyYXRvci0+KCkgY29uc3QgdGhyb3coKSB7CiAgICByZXR1cm4gX01fcHRyOwogIH0KICBfVHAq IGdldCgpIGNvbnN0IHRocm93KCkgewogICAgcmV0dXJuIF9NX3B0cjsKICB9CiAgX1RwKiByZWxl YXNlKCkgdGhyb3coKSB7CiAgICBfVHAqIF9fdG1wID0gX01fcHRyOwogICAgX01fcHRyID0gMDsK ICAgIHJldHVybiBfX3RtcDsKICB9CiAgdm9pZCByZXNldChfVHAqIF9fcCA9IDApIHRocm93KCkg ewogICAgaWYgKF9fcCAhPSBfTV9wdHIpIHsKICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAgX01f cHRyID0gX19wOwogICAgfQogIH0KCnB1YmxpYzoKICBhdXRvX3B0cihhdXRvX3B0cl9yZWY8X1Rw PiBfX3JlZikgdGhyb3coKQogICAgOiBfTV9wdHIoX19yZWYuX01fcHRyKSB7fQoKICBhdXRvX3B0 ciYgb3BlcmF0b3I9KGF1dG9fcHRyX3JlZjxfVHA+IF9fcmVmKSB0aHJvdygpIHsKICAgIGlmIChf X3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpIHsKICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAg X01fcHRyID0gX19yZWYuX01fcHRyOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVt cGxhdGUgPGNsYXNzIF9UcDE+IG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAxPigpIHRocm93KCkK ICAgIHsgcmV0dXJuIGF1dG9fcHRyX3JlZjxfVHA+KHRoaXMtPnJlbGVhc2UoKSk7IH0KICB0ZW1w bGF0ZSA8Y2xhc3MgX1RwMT4gb3BlcmF0b3IgYXV0b19wdHI8X1RwMT4oKSB0aHJvdygpCiAgICB7 IHJldHVybiBhdXRvX3B0cjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9Cn07Cgp9CiMgNDkgIi91 c3IvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX2Z1bmN0aW9uLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgMTAxICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9S ZXN1bHQ+CnN0cnVjdCB1bmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnIGFyZ3VtZW50X3R5 cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNz IF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGJpbmFyeV9mdW5jdGlv biB7CiAgdHlwZWRlZiBfQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX0FyZzIg c2Vjb25kX2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9Owoj IDEyNyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRl IDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1Rw LF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg Y29uc3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry dWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBv cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g X194IC0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG11bHRpcGxpZXMg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggKiBfX3k7 IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5h cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAvIF9feTsgfQp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf VHAsX1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm IF9feSkgY29uc3QgeyByZXR1cm4gX194ICUgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U cD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPgp7CiAgX1Rw IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0KfTsKIyAx NzMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf VHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBf X3kpIGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJv b2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBj b25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry dWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJv b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0 dXJuIF9feCA+IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzIDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPCBfX3k7 IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1Ymxp YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0 IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID49IF9feTsgfQp9 OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzX2VxdWFsIDogcHVibGljIGJpbmFy eV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPD0gX195OyB9Cn07CiMgMjIy ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNs YXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfYW5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg X195KSBjb25zdCB7IHJldHVybiBfX3ggJiYgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U cD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9v bD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv bnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1 Y3QgbG9naWNhbF9ub3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLGJvb2w+CnsKICBib29s IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuICFfX3g7IH0KfTsKIyAy NzEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8 Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgdW5hcnlfZnVu Y3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4gewpwcm90ZWN0 ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgdW5hcnlfbmVnYXRl KGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9y KCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7 CiAgICByZXR1cm4gIV9NX3ByZWQoX194KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVk aWNhdGU+CmlubGluZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90MShjb25zdCBfUHJlZGlj YXRlJiBfX3ByZWQpCnsKICByZXR1cm4gdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7 Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgYmluYXJ5X25lZ2F0ZQogIDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVu dF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlOjpz ZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD4gewpw cm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5 X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBv cGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUm IF9feCwKICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25k X2FyZ3VtZW50X3R5cGUmIF9feSkgY29uc3QKICB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194LCBf X3kpOwogIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIGJpbmFyeV9u ZWdhdGU8X1ByZWRpY2F0ZT4Kbm90Mihjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1 cm4gYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CiMgMzQ5ICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRp b24+CmNsYXNzIGJpbmRlcjFzdAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9P cGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg IHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0 aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7 CnB1YmxpYzoKICBiaW5kZXIxc3QoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBj b25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAg IDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90 eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1l bnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKCiAg dHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKHR5cGVuYW1lIF9P cGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBv cCh2YWx1ZSwgX194KTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFz cyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4KYmluZDFzdChjb25zdCBfT3BlcmF0 aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlv bjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBiaW5kZXIxc3Q8X09w ZXJhdGlvbj4oX19mbiwgX0FyZzFfdHlwZShfX3gpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfT3Bl cmF0aW9uPgpjbGFzcyBiaW5kZXIybmQKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFt ZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAg ICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3Bl cmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIHZh bHVlOwpwdWJsaWM6CiAgYmluZGVyMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAg ICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkK ICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVz dWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2Fy Z3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0K CgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFt ZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy biBvcChfX3gsIHZhbHVlKTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBj bGFzcyBfVHA+CmlubGluZSBiaW5kZXIybmQ8X09wZXJhdGlvbj4KYmluZDJuZChjb25zdCBfT3Bl cmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJh dGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlwZTsKICByZXR1cm4gYmluZGVyMm5k PF9PcGVyYXRpb24+KF9fZm4sIF9BcmcyX3R5cGUoX194KSk7Cn0KIyA0MzggIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xh c3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbiA6IHB1YmxpYyB1bmFy eV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiB7CnByb3RlY3RlZDoKICBfUmVzdWx0ICgqX01fcHRy KShfQXJnKTsKcHVibGljOgogIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oKSB7fQogIGV4cGxp Y2l0IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZykpIDogX01f cHRyKF9feCkge30KICBfUmVzdWx0IG9wZXJhdG9yKCkoX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJu IF9NX3B0cihfX3gpOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+ CmlubGluZSBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHB0cl9mdW4o X1Jlc3VsdCAoKl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlv bjxfQXJnLCBfUmVzdWx0PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBf QXJnMiwgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24gOgog IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6 CiAgICBfUmVzdWx0ICgqX01fcHRyKShfQXJnMSwgX0FyZzIpOwpwdWJsaWM6CiAgICBwb2ludGVy X3RvX2JpbmFyeV9mdW5jdGlvbigpIHt9CiAgICBleHBsaWNpdCBwb2ludGVyX3RvX2JpbmFyeV9m dW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKQogICAgICA6IF9NX3B0cihfX3gp IHt9CiAgICBfUmVzdWx0IG9wZXJhdG9yKCkoX0FyZzEgX194LCBfQXJnMiBfX3kpIGNvbnN0IHsK ICAgICAgcmV0dXJuIF9NX3B0cihfX3gsIF9feSk7CiAgICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNz IF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fYmlu YXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+CnB0cl9mdW4oX1Jlc3VsdCAoKl9feCko X0FyZzEsIF9BcmcyKSkgewogIHJldHVybiBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJn MSxfQXJnMixfUmVzdWx0PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9J ZGVudGl0eSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPiB7CiAgX1RwJiBvcGVyYXRv cigpKF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KICBjb25zdCBfVHAmIG9wZXJhdG9y KCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNs YXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFp ciwgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+IHsKICB0eXBlbmFtZSBfUGFpcjo6Zmlyc3Rf dHlwZSYgb3BlcmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0 OwogIH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShjb25z dCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KfTsKCnRlbXBs YXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3QybmQgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp b248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZT4KewogIHR5cGVuYW1lIF9QYWly OjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4g X194LnNlY29uZDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVy YXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwog IH0KfTsKIyA1MjggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0 ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3QgOiBwdWJsaWMg dW5hcnlfZnVuY3Rpb248X1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Qo X1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9U cCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQg KF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xh c3MgY29uc3RfbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX1Jl dD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYp KCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9f cCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6 OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNs YXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVi bGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9m KF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19y LipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVi bGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9t ZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQog IF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01f ZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxh dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdCA6 IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxp Y2l0IG1lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQog IF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3At PipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07CgoK dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3Rf bWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+ IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZiko X0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAq IF9fcCwgX0FyZyBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpw cml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90IDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNp dCBtZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9 CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9f ci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0 X21lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7 CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3Bm KShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9U cCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2 YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFz cyBfVHA+CmNsYXNzIG1lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u PF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9f cGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3Qg eyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoK dGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBw dWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNp dCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYp IHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25zdCB7IChfX3AtPipfTV9m KSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5h cnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qo dm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9U cCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6Oipf TV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVm X3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6 CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0 KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0 IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7 Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdDx2 b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9Bcmcsdm9pZD4g ewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSkg OiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkgY29u c3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9B cmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21l bV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25z dCBfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdCh2 b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVy YXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194 KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIF9U cCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJs aWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDog X01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0 IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9Bcmcp Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9m dW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw LF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3Qodm9p ZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0 b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsg fQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCgoKCnRlbXBs YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1l bV9mdW4oX1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fdDxfUmV0LF9UcD4o X19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21l bV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyBy ZXR1cm4gY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9y ZWYoX1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+ KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9t ZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkgY29u c3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVt cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4x X3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0 dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9S ZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxf VHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJu IGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNz IF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQs X1RwLF9Bcmc+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4g bWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9S ZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3JlZl90PF9S ZXQsX1RwLF9Bcmc+Cm1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAg eyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKCgp9 CiMgNTMgIi91c3IvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBj LWxpbnV4LWdudS9iaXRzL2F0b21pY2l0eS5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL2crKy12 My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2F0b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9t aWNfd29yZDsKCnN0YXRpYyBpbmxpbmUgX0F0b21pY193b3JkCl9fYXR0cmlidXRlX18gKChfX3Vu dXNlZF9fKSkKX19leGNoYW5nZV9hbmRfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQgKl9fbWVt LCBpbnQgX192YWwpCnsKICByZWdpc3RlciBfQXRvbWljX3dvcmQgX19yZXN1bHQ7CiAgX19hc21f XyBfX3ZvbGF0aWxlX18gKCJsb2NrOyB4YWRkbCAlMCwlMiIKICAgICAgICAgICAgICAgICAgICAg ICAgOiAiPXIiIChfX3Jlc3VsdCkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fdmFs KSwgIm0iICgqX19tZW0pCiAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogIHJl dHVybiBfX3Jlc3VsdDsKfQoKc3RhdGljIGlubGluZSB2b2lkCl9fYXR0cmlidXRlX18gKChfX3Vu dXNlZF9fKSkKX19hdG9taWNfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQg X192YWwpCnsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IGFkZGwgJTAsJTEiCiAgICAg ICAgICAgICAgICAgICAgICAgIDogOiAiaXIiIChfX3ZhbCksICJtIiAoKl9fbWVtKSA6ICJtZW1v cnkiKTsKfQojIDQ2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDIg MwoKbmFtZXNwYWNlIHN0ZAp7CiMgODggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19z dHJpbmcuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nCiAgICB7CgogICAgcHVibGlj OgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX1RyYWl0czo6Y2hhcl90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgX0FsbG9jIGFs bG9jYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNp emVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBk aWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2Ug cmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNl IGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIg cG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgY29u c3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBv aW50ZXIsIGJhc2ljX3N0cmluZz4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojpf X25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCBiYXNpY19zdHJpbmc+CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0 ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNv bnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVy YXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgojIDEyMyAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgIHN0cnVjdCBfUmVwCiAgICAgIHsK CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxjaGFyPjo6 b3RoZXIgX1Jhd19ieXRlc19hbGxvYzsKIyAxNDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9i YXNpY19zdHJpbmcuaCIgMwogICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgX1NfbWF4X3Np emU7CiAgICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCBfU190ZXJtaW5hbDsKCiAgICAgICAgc2l6 ZV90eXBlIF9NX2xlbmd0aDsKICAgICAgICBzaXplX3R5cGUgX01fY2FwYWNpdHk7CiAgICAgICAg X0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19s ZWFrZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPCAwOyB9CgogICAg ICAgIGJvb2wKICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9N X3JlZmVyZW5jZXMgPiAwOyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9zZXRfbGVha2VkKCkK ICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01f c2V0X3NoYXJhYmxlKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAwOyB9CgogICAgICAgIF9D aGFyVCoKICAgICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHJlaW50 ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4odGhpcyArIDEpOyB9CgogICAgICAgIF9DaGFyVCYKICAgICAg ICBvcGVyYXRvcltdKHNpemVfdCBfX3MpIHRocm93KCkKICAgICAgICB7IHJldHVybiBfTV9yZWZk YXRhKCkgW19fc107IH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2dyYWIoY29uc3QgX0Fs bG9jJiBfX2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikKICAgICAgICB7CiAgICAgICAg ICByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2FsbG9jMikKICAgICAg ICAgICAgICAgICAgPyBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9jMSk7CiAgICAgICAg fQoKCiAgICAgICAgc3RhdGljIF9SZXAqCiAgICAgICAgX1NfY3JlYXRlKHNpemVfdCwgY29uc3Qg X0FsbG9jJik7CgogICAgICAgIHZvaWQKICAgICAgICBfTV9kaXNwb3NlKGNvbnN0IF9BbGxvYyYg X19hKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmVy ZW5jZXMsIC0xKSA8PSAwKQogICAgICAgICAgICBfTV9kZXN0cm95KF9fYSk7CiAgICAgICAgfQoK ICAgICAgICB2b2lkCiAgICAgICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmKSB0aHJvdygpOwoK ICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVmY29weSgpIHRocm93KCkKICAgICAgICB7CiAg ICAgICAgICBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOwogICAgICAgICAgcmV0dXJu IF9NX3JlZmRhdGEoKTsKICAgICAgICB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9jbG9u ZShjb25zdCBfQWxsb2MmLCBzaXplX3R5cGUgX19yZXMgPSAwKTsKICAgICAgfTsKCgogICAgICBz dHJ1Y3QgX0FsbG9jX2hpZGVyIDogX0FsbG9jCiAgICAgIHsKICAgICAgICBfQWxsb2NfaGlkZXIo X0NoYXJUKiBfX2RhdCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgOiBfQWxsb2MoX19hKSwg X01fcChfX2RhdCkgeyB9CgogICAgICAgIF9DaGFyVCogX01fcDsKICAgICAgfTsKCiAgICBwdWJs aWM6CgoKCiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9IHN0YXRpY19jYXN0PHNp emVfdHlwZT4oLTEpOwoKICAgIHByaXZhdGU6CgogICAgICBtdXRhYmxlIF9BbGxvY19oaWRlciBf TV9kYXRhcGx1czsKCgoKICAgICAgc3RhdGljIHNpemVfdHlwZSBfU19lbXB0eV9yZXBfc3RvcmFn ZVsoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEp L3NpemVvZihzaXplX3R5cGUpXTsKCiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0YSgpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIF9NX2RhdGFwbHVzLl9NX3A7IH0KCiAgICAgIF9DaGFyVCoKICAgICAg X01fZGF0YShfQ2hhclQqIF9fcCkKICAgICAgeyByZXR1cm4gKF9NX2RhdGFwbHVzLl9NX3AgPSBf X3ApOyB9CgogICAgICBfUmVwKgogICAgICBfTV9yZXAoKSBjb25zdAogICAgICB7IHJldHVybiAm KChyZWludGVycHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFdKTsgfQoKCgogICAgICBp dGVyYXRvcgogICAgICBfTV9pYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRh KCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9pZW5kKCkgY29uc3QgeyByZXR1cm4gaXRl cmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9s ZWFrKCkKICAgICAgewogICAgICAgIGlmICghX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAg ICAgICAgX01fbGVha19oYXJkKCk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2No ZWNrKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+IHRo aXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6 Ol9NX2NoZWNrIik7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19wb3M7CiAgICAgIH0K CgogICAgICBpdGVyYXRvcgogICAgICBfTV9mb2xkKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl IF9fb2ZmKSBjb25zdAogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvZmYgPSBfX29mZiA8IHRo aXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHNpemVfdHlwZSBfX25ld29mZiA9IF9fdGVzdG9m ZiA/IF9fb2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgcmV0dXJuIChfTV9pYmVn aW4oKSArIF9fcG9zICsgX19uZXdvZmYpOwogICAgICB9CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNz IF9JdGVyYXRvcj4KICAgICAgICBzdGF0aWMgdm9pZAogICAgICAgIF9TX2NvcHlfY2hhcnMoX0No YXJUKiBfX3AsIF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikKICAgICAgICB7CiAgICAg ICAgICBmb3IgKDsgX19rMSAhPSBfX2syOyArK19fazEsICsrX19wKQogICAgICAgICAgICB0cmFp dHNfdHlwZTo6YXNzaWduKCpfX3AsICpfX2sxKTsKICAgICAgICB9CgogICAgICBzdGF0aWMgdm9p ZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRv ciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNl KCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19w LCBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2syKQogICAgICB7IF9TX2Nv cHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMg dm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hhclQqIF9fazEsIF9DaGFy VCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sx KTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwg Y29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAgICAgIHsgdHJhaXRzX3R5 cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01f bXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVu Mik7CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWtfaGFyZCgpOwoKICAgICAgc3RhdGljIF9SZXAm CiAgICAgIF9TX2VtcHR5X3JlcCgpCiAgICAgIHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PF9S ZXAqPigmX1NfZW1wdHlfcmVwX3N0b3JhZ2UpOyB9CgogICAgcHVibGljOgoKCgoKICAgICAgaW5s aW5lCiAgICAgIGJhc2ljX3N0cmluZygpOwoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfc3Ry aW5nKGNvbnN0IF9BbGxvYyYgX19hKTsKCgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNf c3RyaW5nJiBfX3N0cik7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9f c3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uID0g bnBvcyk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXpl X3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxs b2MmIF9fYSk7CgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw ZSBfX24sCiAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsK ICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSA9 IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2Ms IGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lu cHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXJhdG9yIF9fYmVnLCBf SW5wdXRJdGVyYXRvciBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBf X2EgPSBfQWxsb2MoKSk7CgogICAgICB+YmFzaWNfc3RyaW5nKCkKICAgICAgeyBfTV9yZXAoKS0+ X01fZGlzcG9zZSh0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcm CiAgICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJldHVybiB0aGlz LT5hc3NpZ24oX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShj b25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcyk7IH0KCiAgICAgIGJh c2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFz c2lnbigxLCBfX2MpOyB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4oKQogICAgICB7CiAg ICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOwogICAg ICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVu ZCgpCiAgICAgIHsKICAgICAgICAgX01fbGVhaygpOwogICAgICAgICByZXR1cm4gaXRlcmF0b3Io X01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsKICAgICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IK ICAgICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgp ICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4o KQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAg Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVy biBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAgcmV2ZXJzZV9p dGVyYXRvcgogICAgICByZW5kKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlz LT5iZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkg Y29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigp KTsgfQoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkgY29uc3QgeyBy ZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGxlbmd0 aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlw ZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9TX21heF9zaXplOyB9Cgog ICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAg IHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24pIHsgdGhpcy0+cmVzaXplKF9fbiwgX0No YXJUKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVy biBfTV9yZXAoKS0+X01fY2FwYWNpdHk7IH0KCiAgICAgIHZvaWQKICAgICAgcmVzZXJ2ZShzaXpl X3R5cGUgX19yZXNfYXJnID0gMCk7CgogICAgICB2b2lkCiAgICAgIGNsZWFyKCkgeyBfTV9tdXRh dGUoMCwgdGhpcy0+c2l6ZSgpLCAwKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0eSgpIGNvbnN0 IHsgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9CgoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAg ICAgIG9wZXJhdG9yW10gKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01f ZGF0YSgpW19fcG9zXTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oc2l6ZV90 eXBlIF9fcG9zKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBfTV9k YXRhKClbX19wb3NdOwogICAgICB9CgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgYXQoc2l6 ZV90eXBlIF9fbikgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgp KQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAg ICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCiAgICAgIHJlZmVyZW5jZQogICAg ICBhdChzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgaWYgKF9fbiA+PSBzaXplKCkpCiAg ICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOwogICAgICAg IF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCgogICAg ICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0 cikgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog ICAgICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hcHBlbmQo X19zKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KF9DaGFyVCBfX2Mp IHsgcmV0dXJuIHRoaXMtPmFwcGVuZChzaXplX3R5cGUoMSksIF9fYyk7IH0KCiAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6 ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg YXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0 cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlz LT5hcHBlbmQoX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19z dHJpbmcmCiAgICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRl bXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg ICBhcHBlbmQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQog ICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fZmly c3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKF9DaGFyVCBfX2MpCiAg ICAgIHsgdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgMSwgX19jKTsgfQoKICAg ICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7 CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9f c3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25z dCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlmIChfX3BvcyA+ IF9fc3Ryc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6 OmFzc2lnbiIpOwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0biA9IF9fbiA8IF9fc3Ryc2l6ZSAt IF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19u IDogX19zdHJzaXplIC0gX19wb3M7CiAgICAgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0ci5f TV9kYXRhKCkgKyBfX3BvcywgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5n JgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsK ICAgICAgICBpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgIF9fdGhyb3dfbGVu Z3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+ X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQog ICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgdGhpcy0+c2l6 ZSgpLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSwg X01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICAgICAgZWxzZQogICAgICAgICAgewoKICAg ICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcG9zID0gX19zIC0gX01fZGF0YSgpOwogICAgICAg ICAgICBpZiAoX19wb3MgPj0gX19uKQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9N X2RhdGEoKSwgX19zLCBfX24pOwogICAgICAgICAgICBlbHNlIGlmIChfX3BvcykKICAgICAgICAg ICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCksIF9fcywgX19uKTsKICAgICAgICAgICAg X01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbjsKICAgICAgICAgICAgX01fZGF0YSgpW19fbl0gPSBf UmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgfQog ICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9f cykKICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChf X3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwg X0NoYXJUIF9fYykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pYmVnaW4oKSwgX01f aWVuZCgpLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9y PgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19m aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxh Y2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQoKICAgICAgdm9p ZAogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQog ICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fbiwgX19jKTsgfQoKICAgICAgdGVtcGxh dGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19w LCBfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQpCiAgICAgICAgeyB0 aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX2JlZywgX19lbmQpOyB9CgogICAgICBiYXNpY19zdHJp bmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9f c3RyKQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0ciwgMCwgX19zdHIu c2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9f cG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgIHNpemVfdHlwZSBf X3BvczIsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19z dHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlmIChfX3BvczIgPiBfX3N0cnNpemUpCiAg ICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAg ICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAg ICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4gPyBfX24gOiBfX3N0cnNpemUg LSBfX3BvczI7CiAgICAgICAgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvczEsIF9fc3RyLl9NX2Rh dGEoKSArIF9fcG9zMiwgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog ICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl IF9fbikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXpl KCk7CiAgICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgICAgX190aHJvd19vdXRfb2Zf cmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9fc2l6ZSA+IHRoaXMt Pm1heF9zaXplKCkgLSBfX24pCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNf c3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8 IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAgICAgfHwgbGVz czxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkKICAgICAgICAgIHJl dHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywgX01faWJlZ2luKCkgKyBf X3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3MgKyBfX24pOwog ICAgICAgIGVsc2UKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f b2ZmID0gX19zIC0gX01fZGF0YSgpOwogICAgICAgICAgICBfTV9tdXRhdGUoX19wb3MsIDAsIF9f bik7CiAgICAgICAgICAgIF9fcyA9IF9NX2RhdGEoKSArIF9fb2ZmOwogICAgICAgICAgICBfQ2hh clQqIF9fcCA9IF9NX2RhdGEoKSArIF9fcG9zOwogICAgICAgICAgICBpZiAoX19zICsgX19uIDw9 IF9fcCkKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywgX19uKTsKICAg ICAgICAgICAgZWxzZSBpZiAoX19zID49IF9fcCkKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6 Y29weShfX3AsIF9fcyArIF9fbiwgX19uKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zLCBfX3AgLSBfX3Mp OwogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wICsgKF9fcCAtIF9fcyksIF9f cCArIF9fbiwgX19uIC0gKF9fcCAtIF9fcykpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAg cmV0dXJuICp0aGlzOwogICAgICAgICAgfQogICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog ICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyBy ZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7 IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bvcywgc2l6 ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHRoaXMtPmluc2VydChfTV9j aGVjayhfX3BvcyksIF9fbiwgX19jKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAg ICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBfX2MgPSBfQ2hh clQoKSkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9fcCAtIF9NX2liZWdpbigp OwogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIHNpemVfdHlwZSgxKSwgX19j KTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgIHJldHVybiB0aGlz LT5fTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg IGVyYXNlKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKQogICAgICB7 CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9f cG9zLCBfX24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2RhdGEoKSwgX01fZGF0 YSgpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3Np dGlvbikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0aW9uIC0gX01faWJl Z2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgMSwg X01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7 CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAgICBpdGVyYXRv cgogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICAgIHsK ICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdpbigpOwogICAgICAgIHRo aXMtPnJlcGxhY2UoX19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAg ICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSAr IF9faTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlw ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAg eyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uLCBfX3N0ci5fTV9kYXRhKCksIF9fc3Ry LnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUg X19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAg ICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMik7CgogICAgICBiYXNpY19z dHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29u c3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpCiAgICAgIHsKICAg ICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIGlmIChf X3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp bmc6OnJlcGxhY2UiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4xID0gX19uMSA8IF9fc2l6 ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRuMSA9IF9fdGVzdG4xID8g X19uMSA6IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGlmIChfX3NpemUgLSBfX2ZvbGRuMSA+IHRo aXMtPm1heF9zaXplKCkgLSBfX24yKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJh c2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVk KCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAgICAgICAgICB8 fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBfX3MpKQogICAgICAg ICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSArIF9fcG9zLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfTV9pYmVnaW4oKSArIF9fcG9zICsgX19mb2xkbjEsIF9f cywgX19zICsgX19uMik7CiAgICAgICAgZWxzZSByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVj ayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19zLCBfX3MgKyBfX24yKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog ICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFy VCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24xLCBfX3MsIHRy YWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVw bGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwgX0No YXJUIF9fYykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9N X2ZvbGQoX19wb3MsIF9fbjEpLCBfX24yLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg ICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3Ry aW5nJiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3N0 ci5fTV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg cmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4g dGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLCBfX3MsIF9fbik7 IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVy YXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFj ZShfX2kxLCBfX2kyLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJh c2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBz aXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0 ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9f aTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBf SW5wdXRJdGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2UoX19pMSwgX19p MiwgX19rMSwgX19rMiwKICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w dXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9CgogICAgcHJpdmF0ZToKICAgICAg dGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAg ICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0 b3IgX19rMSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0X2l0 ZXJhdG9yX3RhZyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAg ICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwg aXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyYXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyYXRvciBfX2syKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4K ICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBf X2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAg ICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0luSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7CiAgICAg ICAgICByZXR1cm4gX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hLCBfVGFnKCkpOwogICAg ICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFy VCoKICAgICAgICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQs IGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUp CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXpl X3R5cGU+KF9fYmVnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8 dmFsdWVfdHlwZT4oX19lbmQpLCBfX2EpOwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNz IF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0lu SXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewog ICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFs IF9JbnRlZ3JhbDsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3RfYXV4KF9fYmVnLCBfX2Vu ZCwgX19hLCBfSW50ZWdyYWwoKSk7CiAgICAgICAgfQoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9J bkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0 ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAg ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3 ZEl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3ZEl0 ZXIgX19iZWcsIF9Gd2RJdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAg ICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKICAgICAgc3RhdGljIF9DaGFyVCoKICAg ICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9j JiBfX2EpOwoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBjb3B5KF9DaGFyVCog X19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHZv aWQKICAgICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3Mp OwoKCiAgICAgIGNvbnN0IF9DaGFyVCoKICAgICAgY19zdHIoKSBjb25zdAogICAgICB7CgogICAg ICAgIHNpemVfdHlwZSBfX24gPSB0aGlzLT5zaXplKCk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmFz c2lnbihfTV9kYXRhKClbX19uXSwgX1JlcDo6X1NfdGVybWluYWwpOwogICAgICAgIHJldHVybiBf TV9kYXRhKCk7CiAgICAgIH0KCiAgICAgIGNvbnN0IF9DaGFyVCoKICAgICAgZGF0YSgpIGNvbnN0 IHsgcmV0dXJuIF9NX2RhdGEoKTsgfQoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2Fs bG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFwbHVzOyB9CgogICAgICBzaXplX3R5cGUK ICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg X19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmlu ZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90 eXBlCiAgICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxl bmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6 ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29u c3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgp KTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAg IHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3Ro KF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90 eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJz dF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25z dAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3Ms IF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNv bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoK ICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNp emVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rf b2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90 eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6 ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXpl X3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rf b2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBl CiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBz aXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2Yo Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3Ro KF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2Ms IHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5k KF9fYywgX19wb3MpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2Yo Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3Bvcywg X19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29m KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmly c3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNf dHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9u b3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXpl X3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBz aXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xh c3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNp emVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5 cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CiAg ICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBz aXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xh c3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAg IHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBf X3BvcyA9IG5wb3MpIGNvbnN0OwoKICAgICAgYmFzaWNfc3RyaW5nCiAgICAgIHN1YnN0cihzaXpl X3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykgY29uc3QKICAgICAgewogICAg ICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jh bmdlKCJiYXNpY19zdHJpbmc6OnN1YnN0ciIpOwogICAgICAgIHJldHVybiBiYXNpY19zdHJpbmco KnRoaXMsIF9fcG9zLCBfX24pOwogICAgICB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25z dCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9f c2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNp emUoKTsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zaXplLCBfX29zaXplKTsKCiAg ICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zdHIuZGF0 YSgpLCBfX2xlbik7CiAgICAgICAgaWYgKCFfX3IpCiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBf X29zaXplOwogICAgICAgIHJldHVybiBfX3I7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21w YXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0cikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBz aXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBz aXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3Q7CgogICAgICBpbnQKICAgICAg Y29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29uc3Q7CgoKCiAgICAgIGludAogICAgICBjb21w YXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBj b25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl IF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBj b25zdDsKICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoKQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0 eV9yZXAoKS5fTV9yZWZjb3B5KCksIF9BbGxvYygpKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAg ICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29u c3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs X1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19z dHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAg ICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsK ICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsIF9DaGFyVCBfX3JocykKICAgIHsKICAg ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5n X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9f c2l6ZV90eXBlOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIu YXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0K CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4g X19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvcj09KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19y aHMuY29tcGFyZShfX2xocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVy YXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhz LAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMu Y29tcGFyZShfX3JocykgPT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0 b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywK ICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAg ICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19y aHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJl KF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAg ICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhz KSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFy VCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7 IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJu IF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19s aHMsCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhz LmNvbXBhcmUoX19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv cj4oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBh cmUoX19saHMpIDwgMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShj b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAg ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19y aHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMp CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAg ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg eyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPj0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg Ym9vbAogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhz KSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAg IGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+ PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJU KiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0gMDsg fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYgX19vcywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m IF9faXMsCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fc3RyLCBfQ2hhclQgX19kZWxpbSk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08 X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mIF9faXMsCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fc3RyKTsKfQojIDU0ICIvdXNyL2luY2x1ZGUvZysrLXYzL3N0cmluZyIgMiAzCgoKIyAx ICIvdXNyL2luY2x1ZGUvZysrLXYzL2FsZ29yaXRobSIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9n KystdjMvYWxnb3JpdGhtIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf YWxnby5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2hlYXAuaCIgMSAzCiMgNjMgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfaGVhcC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNl LCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRl cmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rp c3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlKQogICAgewogICAgICBfRGlzdGFuY2UgX19w YXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIHdoaWxlIChfX2hvbGVJbmRleCA+ IF9fdG9wSW5kZXggJiYgKihfX2ZpcnN0ICsgX19wYXJlbnQpIDwgX192YWx1ZSkgewogICAgICAg ICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgICAg ICBfX2hvbGVJbmRleCA9IF9fcGFyZW50OwogICAgICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4 IC0gMSkgLyAyOwogICAgICB9CiAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFs dWU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAg IGlubGluZSB2b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAg ICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3Rh bmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0 YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICAg ICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlw ZW5hbWUgX1RwLAogICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9f cHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xl SW5kZXgsCiAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUs IF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9s ZUluZGV4IC0gMSkgLyAyOwogICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYm IF9fY29tcCgqKF9fZmlyc3QgKyBfX3BhcmVudCksIF9fdmFsdWUpKSB7CiAgICAgICAgKihfX2Zp cnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgICAgIF9faG9s ZUluZGV4ID0gX19wYXJlbnQ7CiAgICAgICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAv IDI7CiAgICAgIH0KICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBf Q29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg X0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVU eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAg ICAKCgogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKChfX2xhc3QgLSBf X2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICBfVmFsdWVU eXBlKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgog ICAgdm9pZAogICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwg X0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4s IF9UcCBfX3ZhbHVlKQogICAgewogICAgICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUlu ZGV4OwogICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7 CiAgICAgIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgICAgICBpZiAoKihfX2Zp cnN0ICsgX19zZWNvbmRDaGlsZCkgPCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkK ICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRl eCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9f c2Vjb25kQ2hpbGQ7CiAgICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCAr IDEpOwogICAgICB9CiAgICAgIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAgICAg KihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAx KSk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICAgICAgfQogICAg ICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSk7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5h bWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46 OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog ICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFz dCAtIF9fZmlyc3QpLCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nl c3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0 b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBfX3BvcF9o ZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3Qg LSAxKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3Is IHR5cGVuYW1lIF9EaXN0YW5jZSwKICAgICAgICAgICB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgdm9pZAogICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgICAgICBfRGlzdGFu Y2UgX19sZW4sIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0 YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENo aWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBf X2xlbikgewogICAgICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksICoo X19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hpbGQt LTsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29u ZENoaWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAgX19z ZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAgICAgIGlmIChf X3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgp ID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5kZXgg PSBfX3NlY29uZENoaWxkIC0gMTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBf X2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1l IF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9Db21wYXJl IF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgKl9f cmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNl KDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX192 YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBwb3BfaGVhcChf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCgoKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFs dWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEs IF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIG1h a2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJh dG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgog ICAgIAoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0 YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9f cGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgX19h ZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9WYWx1ZVR5cGUoKihfX2ZpcnN0 ICsgX19wYXJlbnQpKSk7CiAgICAgICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAg ICBfX3BhcmVudC0tOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgbWFr ZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0 b3IgX19sYXN0LAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFs dWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAg ICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3Qg PCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0 OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdo aWxlICh0cnVlKSB7CiAgICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19s ZW4sCiAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19maXJzdCArIF9fcGFyZW50 KSksIF9fY29tcCk7CiAgICAgICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBf X3BhcmVudC0tOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl c3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKCiAgICAgCgogICAg IAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgICAgICBwb3BfaGVhcChf X2ZpcnN0LCBfX2xhc3QtLSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl c3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBzb3J0X2hlYXAoX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs CiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKCgogICAgICB3aGls ZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICAgICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0 LS0sIF9fY29tcCk7CiAgICB9Cgp9CiMgNjUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf YWxnby5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIg MSAzCiMgNjQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCm5hbWVz cGFjZSBzdGQKewojIDc0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIg Mwp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIF9U ZW1wb3JhcnlfYnVmZmVyCnsKCiAKCiAgcHRyZGlmZl90IF9NX29yaWdpbmFsX2xlbjsKICBwdHJk aWZmX3QgX01fbGVuOwogIF9UcCogX01fYnVmZmVyOwoKCiAgdm9pZCBfTV9hbGxvY2F0ZV9idWZm ZXIoKSB7CiAgICBfTV9vcmlnaW5hbF9sZW4gPSBfTV9sZW47CiAgICBfTV9idWZmZXIgPSAwOwoK ICAgIGlmIChfTV9sZW4gPiAocHRyZGlmZl90KSgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQog ICAgICBfTV9sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9NX2xl biA+IDApIHsKICAgICAgX01fYnVmZmVyID0gKF9UcCopIG1hbGxvYyhfTV9sZW4gKiBzaXplb2Yo X1RwKSk7CiAgICAgIGlmIChfTV9idWZmZXIpCiAgICAgICAgYnJlYWs7CiAgICAgIF9NX2xlbiAv PSAyOwogICAgfQogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBf X3RydWVfdHlwZSkge30KICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYgdmFs LCBfX2ZhbHNlX3R5cGUpIHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01f bGVuLCB2YWwpOwogIH0KCnB1YmxpYzoKCiAgcHRyZGlmZl90IHNpemUoKSBjb25zdCB7IHJldHVy biBfTV9sZW47IH0KCiAgcHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4g X01fb3JpZ2luYWxfbGVuOyB9CgogIF9UcCogYmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7IH0K CiAgX1RwKiBlbmQoKSB7IHJldHVybiBfTV9idWZmZXIgKyBfTV9sZW47IH0KCiAgX1RlbXBvcmFy eV9idWZmZXIoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFz dCkgewoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlh bF9kZWZhdWx0X2NvbnN0cnVjdG9yCiAgICAgICAgICAgIF9Ucml2aWFsOwoKICAgIHRyeSB7CiAg ICAgIF9NX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9NX2FsbG9jYXRl X2J1ZmZlcigpOwogICAgICBpZiAoX01fbGVuID4gMCkKICAgICAgICBfTV9pbml0aWFsaXplX2J1 ZmZlcigqX19maXJzdCwgX1RyaXZpYWwoKSk7CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsK ICAgICAgICBmcmVlKF9NX2J1ZmZlcik7CiAgICAgICAgX01fYnVmZmVyID0gMDsKICAgICAgICBf TV9sZW4gPSAwOwogICAgICAgIHRocm93OwogICAgICB9CiAgfQoKICB+X1RlbXBvcmFyeV9idWZm ZXIoKSB7CiAgICBfRGVzdHJveShfTV9idWZmZXIsIF9NX2J1ZmZlciArIF9NX2xlbik7CiAgICBm cmVlKF9NX2J1ZmZlcik7CiAgfQoKcHJpdmF0ZToKCiAgX1RlbXBvcmFyeV9idWZmZXIoY29uc3Qg X1RlbXBvcmFyeV9idWZmZXImKSB7fQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3Jhcnlf YnVmZmVyJikge30KfTsKCn0KIyA2NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv LmgiIDIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKIyA4NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIGNvbnN0IF9U cCYKICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1Rw JiBfX2MpCiAgICB7CgogICAgIAogICAgICBpZiAoX19hIDwgX19iKQogICAgICAgIGlmIChfX2Ig PCBfX2MpCiAgICAgICAgICByZXR1cm4gX19iOwogICAgICAgIGVsc2UgaWYgKF9fYSA8IF9fYykK ICAgICAgICAgIHJldHVybiBfX2M7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9fYTsK ICAgICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2Ug aWYgKF9fYiA8IF9fYykKICAgICAgICByZXR1cm4gX19jOwogICAgICBlbHNlCiAgICAgICAgcmV0 dXJuIF9fYjsKICAgIH0KIyAxMTggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGlu ZSBjb25zdCBfVHAmCiAgICBfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2Is IGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgICBpZiAo X19jb21wKF9fYSwgX19iKSkKICAgICAgICBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgICAg IHJldHVybiBfX2I7CiAgICAgICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgICAg IHJldHVybiBfX2M7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxz ZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlm IChfX2NvbXAoX19iLCBfX2MpKQogICAgICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAg ICByZXR1cm4gX19iOwogICAgfQojIDE1MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRnVuY3Rp b24+CiAgICBfRnVuY3Rpb24KICAgIGZvcl9lYWNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsIF9GdW5jdGlvbiBfX2YpCiAgICB7CgogICAgIAogICAgICBmb3IgKCA7IF9f Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgX19mKCpfX2ZpcnN0KTsKICAgICAg cmV0dXJuIF9fZjsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0 eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAg ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9f bGFzdCAmJiAhKCpfX2ZpcnN0ID09IF9fdmFsKSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIHJl dHVybiBfX2ZpcnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs IHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZF9pZihf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGlj YXRlIF9fcHJlZCwKICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3 aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgIV9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgKytf X2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX1JhbmRvbUFjY2Vzc0l0 ZXIKICAgIGZpbmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg X19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICByYW5kb21fYWNjZXNz X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9f bGFzdCAtIF9fZmlyc3QpID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAt LV9fdHJpcF9jb3VudCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9f Zmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwp IHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0 ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlm ICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0Owog ICAgICB9CgogICAgICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogICAgICBjYXNlIDM6CiAg ICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19f Zmlyc3Q7CiAgICAgIGNhc2UgMjoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVy biBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmICgq X19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAg ICBjYXNlIDA6CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQog ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt ZSBfUHJlZGljYXRlPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmRfaWYoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICBf UHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcp CiAgICB7CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46 OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgICAgICA9IChfX2xhc3QgLSBfX2ZpcnN0 KSA+PiAyOwoKICAgICAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQp IHsKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAg KytfX2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7 CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJu IF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0 KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CgogICAgICBzd2l0 Y2goX19sYXN0IC0gX19maXJzdCkgewogICAgICBjYXNlIDM6CiAgICAgICAgaWYgKF9fcHJlZCgq X19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAy OgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICAr K19fZmlyc3Q7CiAgICAgIGNhc2UgMToKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0 dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAgICAgIGRlZmF1 bHQ6CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQojIDI4OSAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFs KQogICAgewoKICAgICAKICAgICAKCiAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QsIF9fbGFzdCwg X192YWwsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMwOSAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZp bmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg X1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgcmV0dXJuIGZpbmRf aWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkp OwogICAgfQojIDMyOSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFj ZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7 CgogICAgIAogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVy biBfX2xhc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGls ZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkK ICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAg IH0KICAgICAgcmV0dXJuIF9fbGFzdDsKICAgIH0KIyAzNTggIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl bmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBhZGphY2VudF9maW5k KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoK CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19sYXN0OwogICAg ICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUoKytfX25leHQgIT0g X19sYXN0KSB7CiAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQog ICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAg fQogICAgICByZXR1cm4gX19sYXN0OwogICAgfQojIDM4NyAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt ZSBfVHA+CiAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVu Y2VfdHlwZQogICAgY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwg Y29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCiAgICAgIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7 CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAo Kl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgICAgICsrX19uOwogICAgICByZXR1cm4gX19uOwog ICAgfQojIDQxMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNvdW50 X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19w cmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsgX19maXJz dCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAg ICAgICAgICsrX19uOwogICAgICByZXR1cm4gX19uOwogICAgfQojIDQ1MCAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVyMQogICAgc2VhcmNo KF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAg ICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7Cgog ICAgIAogICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19m aXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0Zvcndh cmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9 PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJz dDIpOwoKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgICAgIF9fcDEgPSBfX2Zp cnN0MjsgKytfX3AxOwoKICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsK CiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAgX19maXJzdDEgPSBm aW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwogICAgICAgIGlmIChfX2ZpcnN0MSA9 PSBfX2xhc3QxKQogICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIF9fcCA9IF9fcDE7 CiAgICAgICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAgICAgICAgaWYgKCsrX19jdXJyZW50ID09 IF9fbGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgd2hpbGUgKCpfX2N1 cnJlbnQgPT0gKl9fcCkgewogICAgICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAg ICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3Qx KQogICAgICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgICB9CgogICAgICAgICsrX19maXJz dDE7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDUyMiAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZD4KICAg IF9Gb3J3YXJkSXRlcjEKICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2Fy ZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zvcndh cmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGljYXRlKQogICAg ewoKICAgICAKICAgICAKICAgICAKCgoKCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8 IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgICAgIF9G b3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICAgICArK19fdG1wOwogICAgICBpZiAoX190 bXAgPT0gX19sYXN0MikgewogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFf X3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwog ICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgfQoKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9f cDEsIF9fcDsKCiAgICAgIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICAgICAgX0ZvcndhcmRJ dGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICAgIGlm IChfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9 IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAg ICsrX19maXJzdDE7CiAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgICBy ZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsKICAgICAgICBfX2N1cnJlbnQgPSBf X2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJuIF9fbGFz dDE7CgogICAgICAgIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19wKSkgewogICAg ICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsK ICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4g X19sYXN0MTsKICAgICAgICB9CgogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0KICAgICAgcmV0 dXJuIF9fZmlyc3QxOwogICAgfQojIDU5NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9JbnRl Z2VyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIg X19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKICAg ICAgaWYgKF9fY291bnQgPD0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSB7 CiAgICAgICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgICAg d2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgICBfSW50ZWdlciBfX24gPSBfX2Nv dW50IC0gMTsKICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICAgICAg KytfX2k7CiAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiAqX19p ID09IF9fdmFsKSB7CiAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICAtLV9fbjsKICAgICAg ICAgIH0KICAgICAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7 CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZmlyc3QgPSBmaW5kKF9faSwgX19sYXN0LCBf X3ZhbCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2 NDMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwLAogICAg ICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0ZvcndhcmRJdGVyCiAgICBzZWFyY2hf bihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg IF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICBfQmluYXJ5 UHJlZCBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19jb3Vu dCA8PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICB3aGls ZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2Zp cnN0LCBfX3ZhbCkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2ZpcnN0OwogICAg ICAgIH0KICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9JbnRl Z2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmly c3Q7CiAgICAgICAgICArK19faTsKICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9f biAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAgICAgICAgICAgICsrX19p OwogICAgICAgICAgICAtLV9fbjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX24gPT0gMCkK ICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg d2hpbGUgKF9faSAhPSBfX2xhc3QpIHsKICAgICAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgq X19pLCBfX3ZhbCkpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICArK19faTsK ICAgICAgICAgICAgfQogICAgICAgICAgICBfX2ZpcnN0ID0gX19pOwogICAgICAgICAgfQogICAg ICAgIH0KICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgNjk3ICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3 YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIyCiAgICBz d2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEs CiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAgICAKICAg ICAKICAgICAKCgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsr X19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0 Mik7CiAgICAgIHJldHVybiBfX2ZpcnN0MjsKICAgIH0KIyA3MzIgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw ZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9VbmFyeU9wZXJhdGlvbj4KICAgIF9PdXRwdXRJ dGVyCiAgICB0cmFuc2Zvcm0oX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3BlcmF0aW9uIF9fdW5h cnlfb3ApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gX191bmFyeV9v cCgqX19maXJzdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3NjUgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAg ICAgICB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAgIHRyYW5z Zm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAg ICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKICAgIHsKCiAgICAgCiAgICAgCiAg ICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytf X2ZpcnN0MiwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX2JpbmFyeV9vcCgqX19m aXJzdDEsICpfX2ZpcnN0Mik7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3OTYgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXBsYWNlKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICBjb25zdCBfVHAm IF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAK CiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAg ICAgIGlmICgqX19maXJzdCA9PSBfX29sZF92YWx1ZSkKICAgICAgICAgICpfX2ZpcnN0ID0gX19u ZXdfdmFsdWU7CiAgICB9CiMgODI1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0 ZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgcmVwbGFjZV9pZihfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3By ZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgog ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKF9f cHJlZCgqX19maXJzdCkpCiAgICAgICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwogICAgfQoj IDg1NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1RwPgog ICAgX091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAg ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFs dWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0g X19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmly c3QgPT0gX19vbGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1cm4g X19yZXN1bHQ7CiAgICB9CiMgODg4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy LCB0eXBlbmFtZSBfUHJlZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRw dXRJdGVyCiAgICByZXBsYWNlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAg ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkK ICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh c3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX3ByZWQoKl9f Zmlyc3QpID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0Owog ICAgfQojIDkxOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAgICB2b2lk CiAgICBnZW5lcmF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwg X0dlbmVyYXRvciBfX2dlbikKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgZm9yICggOyBfX2Zp cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKICAg IH0KIyA5NDIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfR2VuZXJh dG9yPgogICAgX091dHB1dEl0ZXIKICAgIGdlbmVyYXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwg X1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKCgoKICAgICAgZm9yICgg OyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4oKTsK ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgOTY5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l IF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVtb3ZlX2Nv cHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg IF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAog ICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp CiAgICAgICAgaWYgKCEoKl9fZmlyc3QgPT0gX192YWx1ZSkpIHsKICAgICAgICAgICpfX3Jlc3Vs dCA9ICpfX2ZpcnN0OwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVy biBfX3Jlc3VsdDsKICAgIH0KIyAxMDAzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJ dGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIHJlbW92ZV9jb3B5 X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAg IAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly c3QpCiAgICAgICAgaWYgKCFfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgICAqX19yZXN1bHQg PSAqX19maXJzdDsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4g X19yZXN1bHQ7CiAgICB9CiMgMTAzOSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAg IF9Gb3J3YXJkSXRlcgogICAgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0 ZXIgX19sYXN0LAogICAgICAgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAg ICAgCgogICAgIAoKCiAgICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1 ZSk7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJz dCA9PSBfX2xhc3QgPyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJl bW92ZV9jb3B5KCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fdmFsdWUpOwogICAgfQojIDEwNzMg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAg ICByZW1vdmVfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAg IF9fZmlyc3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKICAgICAgX0Zvcndh cmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9f Zmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHlfaWYoKytf X2ksIF9fbGFzdCwgX19maXJzdCwgX19wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgog ICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg b3V0cHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jl c3VsdCA9IF9fdmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAg IGlmICghKF9fdmFsdWUgPT0gKl9fZmlyc3QpKSB7CiAgICAgICAgICBfX3ZhbHVlID0gKl9fZmly c3Q7CiAgICAgICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgICAgfQogICAgICByZXR1 cm4gKytfX3Jlc3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9j b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVy YXRvcl90YWcpCiAgICB7CgogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgd2hpbGUg KCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0 KSkKICAgICAgICAgICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19fcmVz dWx0OwogICAgfQojIDExNDUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAg ICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkK ICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwoKICAg ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAgIHJldHVybiBf X3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9JdGVyVHlwZSgpKTsKICAg IH0KIyAxMTcwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBf QmluYXJ5UHJlZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5h cnlfcHJlZCwKICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAg ICAgCgoKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVf dHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAg IHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZChf X3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAg ICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAgIHJldHVybiArK19fcmVz dWx0OwogICAgfQojIDExOTkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0 eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9j b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp Y2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh ZykKICAgIHsKCiAgICAgCgoKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICB3aGls ZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fcmVz dWx0LCAqX19maXJzdCkpICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19f cmVzdWx0OwogICAgfQojIDEyMzIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIs IHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIHVu aXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVk aWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBf SXRlclR5cGU7CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsK ICAgICAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LApfX3Jlc3VsdCwgX19i aW5hcnlfcHJlZCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDEyNjMgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgog ICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QpCiAgICB7CgogICAgICAgICAKICAgICAgICAgCgoKICAgICAgICAgIF9fZmly c3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdW5p cXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIH0KIyAxMjkwICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3 YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAg dW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg ICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoK CiAgICAgIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCwgX19iaW5hcnlf cHJlZCk7CiAgICAgIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3Qs IF9fYmluYXJ5X3ByZWQpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl Y3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBfX3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9f Zmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgICAgICB3aGlsZSAodHJ1 ZSkKICAgICAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0gLS1fX2xh c3QpCiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgZWxzZQogICAgICAgICAg ICAgICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCBfX2xhc3QpOwogICAgfQoKCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcmV2ZXJzZShf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAg ICAgICAgICB3aGlsZSAoX19maXJzdCA8IF9fbGFzdCkKICAgICAgICAgICAgaXRlcl9zd2FwKF9f Zmlyc3QrKywgLS1fX2xhc3QpOwogICAgfQojIDEzNDkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgog ICAgaW5saW5lIHZvaWQKICAgIHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9C aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgICAgICAKCiAgICAgICAgICBfX3Jl dmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAg IH0KIyAxMzc0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAg ICBfT3V0cHV0SXRlcgogICAgcmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0 LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAo X19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICAqX19yZXN1bHQg PSAqX19sYXN0OwogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVz dWx0OwogICAgfQojIDEzOTkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0V1Y2xpZGVhblJpbmdFbGVtZW50PgogICAgX0V1Y2xpZGVh blJpbmdFbGVtZW50CiAgICBfX2djZChfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLCBfRXVjbGlk ZWFuUmluZ0VsZW1lbnQgX19uKQogICAgewogICAgICB3aGlsZSAoX19uICE9IDApIHsKICAgICAg ICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX190ID0gX19tICUgX19uOwogICAgICAgIF9fbSA9IF9f bjsKICAgICAgICBfX24gPSBfX3Q7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbTsKICAgIH0KCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0 ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRs ZSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgZm9yd2Fy ZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwg KF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0ZvcndhcmRJdGVy IF9fZmlyc3QyID0gX19taWRkbGU7CiAgICAgIGRvIHsKICAgICAgICBzd2FwKCpfX2ZpcnN0Kyss ICpfX2ZpcnN0MisrKTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgICAg IF9fbWlkZGxlID0gX19maXJzdDI7CiAgICAgIH0gd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCk7 CgogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fZmlyc3QyICE9IF9f bGFzdCkgewogICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAgIGlm IChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAg ICAgICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAgICAgICBfX2ZpcnN0MiA9IF9f bWlkZGxlOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0 aW9uYWxJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly c3QsCiAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxf aXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRk bGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsKCiAgICAgIF9fcmV2 ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAg ICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh ZygpKTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9IF9f bGFzdCkKICAgICAgICBzd2FwICgqX19maXJzdCsrLCAqLS1fX2xhc3QpOwoKICAgICAgaWYgKF9f Zmlyc3QgPT0gX19taWRkbGUpIHsKICAgICAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwg YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAg ICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh ZygpKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl c3NJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwK ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRv cl90YWcpCiAgICB7CgogICAgIAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwg KF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUg X0Rpc3RhbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIF9EaXN0YW5jZSBfX24g PSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2UgX19rID0gX19taWRkbGUgLSBfX2Zp cnN0OwogICAgICBfRGlzdGFuY2UgX19sID0gX19uIC0gX19rOwoKICAgICAgaWYgKF9fayA9PSBf X2wpIHsKICAgICAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRsZSwgX19taWRkbGUpOwog ICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwg X19rKTsKCiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faSA9IDA7IF9faSA8IF9fZDsgX19pKyspIHsK ICAgICAgICBfVmFsdWVUeXBlIF9fdG1wID0gKl9fZmlyc3Q7CiAgICAgICAgX1JhbmRvbUFjY2Vz c0l0ZXIgX19wID0gX19maXJzdDsKCiAgICAgICAgaWYgKF9fayA8IF9fbCkgewogICAgICAgICAg Zm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19sL19fZDsgX19qKyspIHsKICAgICAgICAg ICAgaWYgKF9fcCA+IF9fZmlyc3QgKyBfX2wpIHsKICAgICAgICAgICAgICAqX19wID0gKihfX3Ag LSBfX2wpOwogICAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICAgIH0KCiAgICAgICAg ICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAg ICB9CiAgICAgICAgfQoKICAgICAgICBlbHNlIHsKICAgICAgICAgIGZvciAoX0Rpc3RhbmNlIF9f aiA9IDA7IF9faiA8IF9fay9fX2QgLSAxOyBfX2ogKyspIHsKICAgICAgICAgICAgaWYgKF9fcCA8 IF9fbGFzdCAtIF9faykgewogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAg ICAgICAgICAgX19wICs9IF9fazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9ICog KF9fcCAtIF9fbCk7CiAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICB9CiAgICAgICAg fQoKICAgICAgICAqX19wID0gX190bXA7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9 CiMgMTU2MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcm90YXRlKF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9Gb3J3YXJkSXRlciBfX2xh c3QpCiAgICB7CgogICAgIAoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0ZvcndhcmRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwogICAgICBfX3JvdGF0 ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTU4OSAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAg IHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUs CiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3Vs dCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19taWRk bGUsIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19yZXN1bHQpKTsKICAgIH0KIyAxNjEyICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9E aXN0YW5jZT4KICAgIGlubGluZSBfRGlzdGFuY2UKICAgIF9fcmFuZG9tX251bWJlcihfRGlzdGFu Y2UgX19uKQogICAgewoKICAgICAgcmV0dXJuIGxyYW5kNDgoKSAlIF9fbjsKCgoKICAgIH0KIyAx NjM0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJhbmRvbV9zaHVm ZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkK ICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgICAg IGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7 ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmRvbV9udW1iZXIo KF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQojIDE2NjAgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs IHR5cGVuYW1lIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CiAgICB2b2lkCiAgICByYW5kb21fc2h1 ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCiAgICB7 CgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICBmb3Ig KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19f aSkKICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kKChfX2kgLSBfX2ZpcnN0 KSArIDEpKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0 eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3BhcnRpdGlvbihfRm9y d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9Q cmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAg ICB7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICB3 aGlsZSAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICBpZiAoKytfX2ZpcnN0ID09IF9fbGFzdCkg cmV0dXJuIF9fZmlyc3Q7CgogICAgICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKCiAg ICAgIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fcHJlZCgqX19uZXh0 KSkgewogICAgICAgICAgc3dhcCgqX19maXJzdCwgKl9fbmV4dCk7CiAgICAgICAgICArK19fZmly c3Q7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAg X0JpZGlyZWN0aW9uYWxJdGVyCiAgICBfX3BhcnRpdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19m aXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9QcmVkaWNh dGUgX19wcmVkLAogICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAg ICB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICBp ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAg ICAgZWxzZSBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICAgKytfX2ZpcnN0OwogICAg ICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3 aGlsZSAodHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICAgICAg cmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlmICghX19wcmVkKCpfX2xhc3QpKQogICAg ICAgICAgICAtLV9fbGFzdDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9 CiAgICB9CiMgMTc0OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBp bmxpbmUgX0ZvcndhcmRJdGVyCiAgICBwYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7 CgogICAgIAogICAgIAoKCiAgICAgIHJldHVybiBfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3Qs IF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgoKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5h bWUgX0Rpc3RhbmNlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX2lucGxhY2Vfc3RhYmxlX3BhcnRp dGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4p CiAgICB7CiAgICAgIGlmIChfX2xlbiA9PSAxKQogICAgICAgIHJldHVybiBfX3ByZWQoKl9fZmly c3QpID8gX19sYXN0IDogX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19m aXJzdDsKICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJ dGVyIF9fYmVnaW4gPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRs ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19sZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19pbnBsYWNl X3N0YWJsZV9wYXJ0aXRpb24oX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMik7 CiAgICAgIHJvdGF0ZShfX2JlZ2luLCBfX21pZGRsZSwgX19lbmQpOwogICAgICBhZHZhbmNlKF9f YmVnaW4sIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICByZXR1cm4gX19iZWdpbjsK ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Q b2ludGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5j ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIGlm IChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0 MSA9IF9fZmlyc3Q7CiAgICAgICAgX1BvaW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7CiAgICAg ICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19maXJzdCkKICAgICAgICAgIGlmIChf X3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsKICAg ICAgICAgICAgKytfX3Jlc3VsdDE7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAg ICAgICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0OwogICAgICAgICAgICArK19fcmVzdWx0MjsKICAg ICAgICAgIH0KICAgICAgICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CiAg ICAgICAgcmV0dXJuIF9fcmVzdWx0MTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9y d2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9f bGVuIC8gMik7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4gPSBfX3N0YWJsZV9wYXJ0aXRp b25fYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19z dGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s ZW4gLSBfX2xlbiAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgcm90YXRl KF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CiAgICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0 YW5jZShfX21pZGRsZSwgX19lbmQpKTsKICAgICAgICByZXR1cm4gX19iZWdpbjsKICAgICAgfQog ICAgfQojIDE4NDggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0Zv cndhcmRJdGVyCiAgICBzdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkK ICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAg IHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlCiAgICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7 CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6 ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgogICAgICAgIF9UZW1wb3JhcnlfYnVmZmVy PF9Gb3J3YXJkSXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAg ICBpZiAoX19idWYuc2l6ZSgpID4gMCkKICAgICAgICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRp b25fYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3Np emUoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVm LmJlZ2luKCksIF9fYnVmLnNpemUoKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9f aW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYu cmVxdWVzdGVkX3NpemUoKSkpOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9SYW5kb21BY2Nlc3NJdGVy CiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bp dm90KQogICAgewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIHdoaWxlICgqX19maXJzdCA8 IF9fcGl2b3QpCiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAg d2hpbGUgKF9fcGl2b3QgPCAqX19sYXN0KQogICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYg KCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBp dGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAg IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUg X1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3Vh cmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFy ZSBfX2NvbXApCiAgICB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUgKF9fY29t cCgqX19maXJzdCwgX19waXZvdCkpCiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xh c3Q7CiAgICAgICAgd2hpbGUgKF9fY29tcChfX3Bpdm90LCAqX19sYXN0KSkKICAgICAgICAgIC0t X19sYXN0OwogICAgICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJu IF9fZmlyc3Q7CiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytf X2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTkyOSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF9hbGdvLmgiIDMKICBlbnVtIHsgX01fdGhyZXNob2xkID0gMTYgfTsKCgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAg X191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBf X3ZhbCkKICAgIHsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAg ICAtLV9fbmV4dDsKICAgICAgd2hpbGUgKF9fdmFsIDwgKl9fbmV4dCkgewogICAgICAgICpfX2xh c3QgPSAqX19uZXh0OwogICAgICAgIF9fbGFzdCA9IF9fbmV4dDsKICAgICAgICAtLV9fbmV4dDsK ICAgICAgfQogICAgICAqX19sYXN0ID0gX192YWw7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+ CiAgICB2b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCwgX1RwIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAgICAgLS1fX25leHQ7CiAgICAgIHdoaWxlIChf X2NvbXAoX192YWwsICpfX25leHQpKSB7CiAgICAgICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICAg ICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0tX19uZXh0OwogICAgICB9CiAgICAgICpfX2xh c3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlcj4KICAgIHZvaWQKICAgIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19maXJzdCA9 PSBfX2xhc3QpIHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19m aXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpf X2k7CiAgICAgICAgaWYgKF9fdmFsIDwgKl9fZmlyc3QpIHsKICAgICAgICAgIGNvcHlfYmFja3dh cmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAgICAgICpfX2ZpcnN0ID0gX192YWw7CiAg ICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQo X19pLCBfX3ZhbCk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2luc2VydGlv bl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAo X19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIg X19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBf X3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7CiAgICAg ICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9faSwgX19pICsgMSk7CiAgICAgICAgICAqX19m aXJzdCA9IF9fdmFsOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3VuZ3VhcmRl ZF9saW5lYXJfaW5zZXJ0KF9faSwgX192YWwsIF9fY29tcCk7CiAgICAgIH0KICAgIH0KCgoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAg ICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoK ICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0 OyArK19faSkKICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1ZhbHVlVHlw ZSgqX19pKSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5ndWFyZGVkX2lu c2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJ dGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFy ZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgfQoK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAg X19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01f dGhyZXNob2xkKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsg X01fdGhyZXNob2xkKTsKICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0 ICsgX01fdGhyZXNob2xkLCBfX2xhc3QpOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2lu c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAg X19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f Y29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsK ICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfTV90aHJlc2hvbGQs IF9fY29tcCk7CiAgICAgICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9N X3RocmVzaG9sZCwgX19sYXN0LCBfX2NvbXApOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBf X2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBfU2l6ZQogICAgX19sZyhfU2l6ZSBf X24pCiAgICB7CiAgICAgIF9TaXplIF9fazsKICAgICAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsg X19uID4+PSAxKSArK19fazsKICAgICAgcmV0dXJuIF9fazsKICAgIH0KCgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemU+CiAgICB2b2lkCiAg ICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCkK ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19m aXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsK ICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgICAg ICByZXR1cm47CiAgICAgICAgfQogICAgICAgIC0tX19kZXB0aF9saW1pdDsKICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19m aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUo X19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEp KSkpOwogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgX19kZXB0aF9saW1p dCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgdm9pZAogICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9T aXplIF9fZGVwdGhfbGltaXQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9W YWx1ZVR5cGU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkg ewogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxfc29y dChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgICAgIHJldHVybjsKICAg ICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy IF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19m aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLAog ICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0 LCBfX2RlcHRoX2xpbWl0LCBfX2NvbXApOwogICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9 CiAgICB9CiMgMjE2NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBz b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkK ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAo X19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9f bGFzdCwgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAgICAgIF9fZmluYWxfaW5zZXJ0 aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgfQogICAgfQojIDIxOTcgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQo X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29t cGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAg IAoKICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgX19pbnRyb3NvcnRfbG9v cChfX2ZpcnN0LCBfX2xhc3QsIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyLCBfX2NvbXApOwog ICAgICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwog ICAgICB9CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy PgogICAgdm9pZAogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAt IF9fZmlyc3QgPCAxNSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0 KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRk bGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0 YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0 KF9fbWlkZGxlLCBfX2xhc3QpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3Qs IF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUg LSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxl KTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAt IF9fZmlyc3QgPCAxNSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0 LCBfX2NvbXApOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lu cGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIF9faW5w bGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0LCBfX2NvbXApOwogICAgICBfX21lcmdl X3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4K ICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0 LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUpCiAgICB7CiAgICAg IF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9f bGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2Uo X19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAg X19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fcmVzdWx0KTsKICAgICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAg ICAgIH0KCiAgICAgIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0 KSwgX19zdGVwX3NpemUpOwogICAgICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3Np emUsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgICAgICBfX3Jlc3VsdCk7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5h bWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNz SXRlcjEgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXpl LAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlz dGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgICAgIHdoaWxlIChfX2xhc3Qg LSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmly c3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmly c3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAg ICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAg ICAgX19maXJzdCArPSBfX3R3b19zdGVwOwogICAgICB9CiAgICAgIF9fc3RlcF9zaXplID0gbWlu KF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwoKICAgICAgbWVyZ2Uo X19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICBfX2ZpcnN0ICsgX19z dGVwX3NpemUsIF9fbGFzdCwKICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgIF9fY29t cCk7CiAgICB9CgogIGVudW0geyBfTV9jaHVua19zaXplID0gNyB9OwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAg X19jaHVua19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBf X2NodW5rX3NpemUpCiAgICB7CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1 bmtfc2l6ZSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9f Y2h1bmtfc2l6ZSk7CiAgICAgICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgICAgIH0KICAg ICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBf Q29tcGFyZT4KICAgIHZvaWQKICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7 CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAg IF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21w KTsKICAgICAgICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2luc2Vy dGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAg X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRl ciBfX2J1ZmZlcikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rp c3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJf bGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBf TV9jaHVua19zaXplOwogICAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFz dCwgX19zdGVwX3NpemUpOwoKICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAg ICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBf c2l6ZSk7CiAgICAgICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgICBfX21lcmdlX3NvcnRfbG9v cChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUpOwogICAgICAg IF9fc3RlcF9zaXplICo9IDI7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh bmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg IHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1BvaW50ZXIgX19idWZmZXIsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNl X3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJz dDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogICAg ICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXplOwogICAgICBfX2NodW5rX2lu c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CgogICAg ICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29w KF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgICAg IF9fc3RlcF9zaXplICo9IDI7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9f YnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3Rl cF9zaXplICo9IDI7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lk CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50 ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBfRGlzdGFu Y2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vz c0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVm ZmVyX3NpemUpIHsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFw dGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgIH0K ICAgICAgZWxzZSB7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9f bWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlk ZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAog ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVm ZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsCiAgICAgICAg ICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZl KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1 ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAg ICB7CiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwog ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAgICAg aWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRp dmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0 aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAg ICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBf X2NvbXApOwogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0 LCBfX2J1ZmZlciwgX19jb21wKTsKICAgICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmly c3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAg ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVy LCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CiMg MjQzMCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBzdGFibGVfc29y dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ dGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VU eXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vz c0l0ZXIsIF9WYWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoYnVmLmJl Z2luKCkgPT0gMCkKICAgICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0 KTsKICAgICAgZWxzZQogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19s YXN0LCBidWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSk7CiAgICB9CiMgMjQ2 NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9p ZAogICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVU eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKCiAg ICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYo X19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19p bnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgZWxzZQog ICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4o KSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29tcCk7CiAgICB9CiMgMjUwMiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQK ICAgIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAK CiAgICAgCgogICAgICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICBmb3IgKF9S YW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAg ICAgIGlmICgqX19pIDwgKl9fZmlyc3QpCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9f bWlkZGxlLCBfX2ksIF9WYWx1ZVR5cGUoKl9faSkpOwogICAgICBzb3J0X2hlYXAoX19maXJzdCwg X19taWRkbGUpOwogICAgfQojIDI1NDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgdm9pZAogICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9Db21w YXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAg CgoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogICAgICBmb3Ig KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQog ICAgICAgIGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3QpKQogICAgICAgICAgX19wb3BfaGVhcChf X2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgICBz b3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICB9CiMgMjU3OSAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIF9SYW5kb21BY2Nlc3NJdGVy CiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmly c3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0 KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy Pjo6dmFsdWVfdHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFsdWVU eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAg CiAgICAgCgogICAgICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJu IF9fcmVzdWx0X2xhc3Q7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFz dCA9IF9fcmVzdWx0X2ZpcnN0OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jl c3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3VsdF9yZWFs X2xhc3QgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICAgICAr K19fZmlyc3Q7CiAgICAgIH0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3Vs dF9yZWFsX2xhc3QpOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBp ZiAoKl9fZmlyc3QgPCAqX19yZXN1bHRfZmlyc3QpCiAgICAgICAgICBfX2FkanVzdF9oZWFwKF9f cmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICAgICAgICBf RGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgICAg ICAgICAgICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSk7CiAgICAgICAgKytf X2ZpcnN0OwogICAgICB9CiAgICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRf cmVhbF9sYXN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAgIH0KIyAyNjMz ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29t cGFyZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBh cmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0 cHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu ZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAg ICAgCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xh c3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0OwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3Vs dF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICAgICAgd2hpbGUoX19maXJzdCAhPSBfX2xh c3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICAgICAqX19y ZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7 CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAgIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJz dCwgX19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBf X2xhc3QpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQog ICAgICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlVHlwZSgwKSwK ICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xhc3Qg LSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dFZhbHVlVHlw ZSgqX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgKytf X2ZpcnN0OwogICAgICB9CiAgICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRf cmVhbF9sYXN0LCBfX2NvbXApOwogICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0OwogICAg fQojIDI2ODYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19udGgsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy Pjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19s YXN0IC0gX19maXJzdCA+IDMpIHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAg ICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3Qg KyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIGlmIChfX2N1dCA8 PSBfX250aCkKICAgICAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAgICAg ICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs IF9fbGFzdCk7CiAgICB9CiMgMjcyOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Nv bXBhcmU+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0 LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf Q29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCiAg ICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7CiAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmly c3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9f bWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t cCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgaWYg KF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgICAgIGVsc2UK ICAgICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQo X19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQojIDI3NjggIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0 eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1 ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCgoKCgogICAg IAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmly c3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0 ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0g X19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShf X21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAg ICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9f bGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAg ICBfX2xlbiA9IF9faGFsZjsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAy ODE2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg IF9Gb3J3YXJkSXRlcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFy ZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G b3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5j ZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5j ZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0Zv cndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9f aGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFk dmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9f dmFsKSkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0 OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAg IGVsc2UKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICB9CiAgICAgIHJldHVybiBfX2Zp cnN0OwogICAgfQojIDI4NTYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9y d2FyZEl0ZXIKICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0 ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZl cmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rp c3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0 YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGls ZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21p ZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAg ICBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAg ICBlbHNlIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJz dDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAg fQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyOTAxICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJf Ym91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUg X1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh cmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKCiAg ICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAg ICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAg ICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAg ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7 CiAgICAgICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0g X19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAg ICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAg ICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI5NDggIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJ dGVyPgogICAgZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5j ZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFu Y2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNl VHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0 OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7 CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9f aGFsZik7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgICAgICBfX2ZpcnN0 ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVu IC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX192YWwgPCAqX19taWRk bGUpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9f bGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCk7CiAgICAgICAgICBh ZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgr K19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2Fy ZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0K ICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9f Zmlyc3QpOwogICAgfQojIDMwMDMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVu YW1lIF9Db21wYXJlPgogICAgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KICAgIGVx dWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25z dCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90 eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G b3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAg CiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19s YXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21p ZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAg IF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAg IGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUs IF9fdmFsKSkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2Zp cnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAg ICAgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0g X19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19m aXJzdCwgX19taWRkbGUsIF9fdmFsLCBfX2NvbXApOwogICAgICAgICAgYWR2YW5jZShfX2ZpcnN0 LCBfX2xlbik7CiAgICAgICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19m aXJzdCwgX192YWwsIF9fY29tcCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIs IF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAg cmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3Qp OwogICAgfQojIDMwNTIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBib29sCiAg ICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKCiAgICAgCiAgICAg CgogICAgIAoKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9f bGFzdCwgX192YWwpOwogICAgICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhKF9fdmFsIDwgKl9f aSk7CiAgICB9CiMgMzA4MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg X0NvbXBhcmU+CiAgICBib29sCiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFs LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBfRm9y d2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21w KTsKICAgICAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9faSk7CiAg ICB9CiMgMzExNSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1l IF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmly c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs IF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAg IHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmly c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19m aXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAg ICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9f cmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAg ICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0 MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KIyAzMTY2ICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAg ICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lu cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJ dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVy IF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAg ICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0 MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkp IHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7 CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx OwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAg ICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg X19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk aXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vf d2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikKICAgIHsKICAgICAg aWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYg KF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0 KQogICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0 dXJuOwogICAgICB9CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmly c3Q7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAg ICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAg ICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsK ICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9j dXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAg IF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgfQogICAg ICBlbHNlIHsKICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICBhZHZhbmNlKF9f c2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChf X2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAgX19sZW4xMSA9IGRpc3Rh bmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19maXJzdF9j dXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19u ZXdfbWlkZGxlID0gX19maXJzdF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBkaXN0 YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZm ZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZl cihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIpOwogICAgfQoKCgoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3Rh bmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZm ZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp c3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4y ID09IDApCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsK ICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAgICAgICAgICAgIGl0 ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNlIF9fbGVu MTEgPSAwOwogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xlbjEgPiBf X2xlbjIpIHsKICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZhbmNlKF9f Zmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChf X21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4yMiA9 IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVsc2Ugewog ICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0 LCBfX2xlbjIyKTsKICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9f bWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICAgIF9fbGVuMTEgPSBkaXN0YW5j ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0 LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3 X21pZGRsZSA9IF9fZmlyc3RfY3V0OwogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFu Y2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVy KF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19sZW4xMSwgX19sZW4yMiwgX19jb21wKTsKICAgICAgX19tZXJnZV93aXRob3V0 X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29t cCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwg dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFu Y2U+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJl Y3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIxIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy MSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFu Y2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1 ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAg ewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsKICAgICAgaWYgKF9fbGVu MSA+IF9fbGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fYnVmZmVy X2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgIGNvcHlfYmFj a3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuIGNvcHkoX19i dWZmZXIsIF9fYnVmZmVyX2VuZCwgX19maXJzdCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19s ZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmly c3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgY29weShfX21pZGRsZSwgX19sYXN0LCBf X2ZpcnN0KTsKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZlciwgX19idWZmZXJf ZW5kLCBfX2xhc3QpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHJvdGF0ZShfX2ZpcnN0 LCBfX21pZGRsZSwgX19sYXN0KTsKICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIGRpc3RhbmNlKF9f bWlkZGxlLCBfX2xhc3QpKTsKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgfQogICAgfQoK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9C aWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy Mz4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0 aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAg ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25h bEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMg X19yZXN1bHQpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJl dHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlm IChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmly c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3Qy OwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGlmICgqX19sYXN0MiA8ICpfX2xhc3QxKSB7 CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9fZmlyc3Qx ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCAr K19fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9CiAgICAg ICAgZWxzZSB7CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYg KF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9f Zmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsKICAgICAg ICB9CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1l IF9CaWRpcmVjdGlvbmFsSXRlcjMsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0JpZGlyZWN0aW9u YWxJdGVyMwogICAgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3Qx LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAg ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgICAg ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0g X19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0Miwg X19yZXN1bHQpOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4g Y29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFz dDE7CiAgICAgIC0tX19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoX19j b21wKCpfX2xhc3QyLCAqX19sYXN0MSkpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFz dDE7CiAgICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJu IGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAgICAg LS1fX2xhc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0 ID0gKl9fbGFzdDI7CiAgICAgICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICAg ICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwog ICAgICAgICAgLS1fX2xhc3QyOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBl bmFtZSBfUG9pbnRlcj4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9u YWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwK ICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZl cl9zaXplKQogICAgewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9 IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29w eShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShfX2J1ZmZl ciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgICAgICAgIH0K ICAgICAgICAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAg IF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIp OwogICAgICAgICAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZl ciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAg ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAg ICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4y MiA9IDA7CiAgICAgICAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAg ICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJz dF9jdXQsIF9fbGVuMTEpOwogICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9i b3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgICAgICAgICAgICBf X2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgIH0K ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAy OwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAg ICAgICAgICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUs ICpfX3NlY29uZF9jdXQpOwogICAgICAgICAgICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19m aXJzdCwgX19maXJzdF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2 ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAg ICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUs IF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIs IF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRs ZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUp OwogICAgICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlv bmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRlciwKICAgICAgICAg ICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGly ZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9f bGVuMiwKICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBf X2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7 CiAgICAgICAgICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6 ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9f bWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9l bmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICAg ICAgICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9p bnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAg ICAgICAgICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9f YnVmZmVyX2VuZCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbXApOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rp c3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAg ICAgICAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4x MSA9IF9fbGVuMSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9f bGVuMTEpOwogICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21p ZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgICAgICAgICAgIF9f bGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgfQog ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7 CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAg ICAgICAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwg Kl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IGRpc3Rh bmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgICAgICAgICAgICAgX19yb3RhdGVf YWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMjIsIF9fYnVm ZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlcl9zaXplKTsK ICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdf bWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9f YnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0 aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIs IF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICB9CiMgMzUwOCAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk aXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFs SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRk bGUsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46 OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAg ICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09 IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgICAgICByZXR1cm47CgogICAgICBf RGlzdGFuY2VUeXBlIF9fbGVuMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAg X0Rpc3RhbmNlVHlwZSBfX2xlbjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKCiAgICAg IF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4gX19idWYo X19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBf X21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwg X19sZW4yKTsKICAgICAgZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19t aWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBf X2J1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSkpOwogICAgfQojIDM1NTkg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIGlu cGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAg ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0 ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUK ICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgaWYgKF9fZmly c3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAg ICAgIF9EaXN0YW5jZVR5cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwog ICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoK ICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBf X2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAg ICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19s ZW4xLCBfX2xlbjIsIF9fY29tcCk7CiAgICAgIGVsc2UKICAgICAgICBfX21lcmdlX2FkYXB0aXZl KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAg ICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLAog ICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBp bmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoK ICAgICAKICAgICAKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2Zp cnN0MSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlmKCpfX2ZpcnN0MSA8 ICpfX2ZpcnN0MikKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQogICAgICAgICAg KytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3Qy OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0 SXRlcjIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgaW5jbHVkZXMoX0lucHV0SXRl cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVy MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQogICAgewoK ICAgICAKICAgICAKICAgICAKCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qy LCAqX19maXJzdDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UgaWYoX19j b21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg ZWxzZQogICAgICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2Zp cnN0MiA9PSBfX2xhc3QyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg dHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0 ZXIKICAgIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0 MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0 MiwKICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAg CiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg JiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz dDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJz dDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewog ICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAg ICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAg ICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAg ICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0 MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0 cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAg ICBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoX19jb21w KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx OwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21w KCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qy OwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAg ICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAg KytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICBy ZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y ZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l IF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBz ZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx LAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIg X19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7 CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0 MSA8ICpfX2ZpcnN0MikKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoKl9f Zmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsK ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAg ICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAg IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEs IHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0 eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50ZXJzZWN0aW9uKF9J bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgq X19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2Ug aWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwog ICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAg KytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0Owog ICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy PgogICAgX091dHB1dEl0ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAg ICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAg ICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAg ICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAg KytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg ICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFz dDEsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5 cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBl bmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAg ICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEs ICpfX2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAg ICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNl IGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytfX2ZpcnN0MjsK ICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3Qy OwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0 KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1 dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfc3lt bWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J bnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAg ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAg ICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAg ICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAg ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAg ICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0 MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2Zp cnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0 eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9P dXRwdXRJdGVyCiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJz dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoK ICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g X19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAg ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg ICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJz dDIsICpfX2ZpcnN0MSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAg ICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBl bHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAg IH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9f bGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl c3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAg IGlmICgqX19yZXN1bHQgPCAqX19maXJzdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsK ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVu dChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3Vs dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlm IChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAg cmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+ CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJz dCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQg PSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAo Kl9fZmlyc3QgPCAqX19yZXN1bHQpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAg IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBf Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9 PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBf X2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19j b21wKCpfX2ZpcnN0LCAqX19yZXN1bHQpKQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0Owog ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRp cmVjdGlvbmFsSXRlcj4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9u YWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAog ICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7 CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAg ICAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBf X2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpfX2kgPCAqX19p aSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAg IHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9z d2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAg IHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAg ICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsK ICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u YWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24o X0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoK CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYg KF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7 CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgqX19pLCAqX19p aSkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAg ICB3aGlsZSAoIV9fY29tcCgqX19pLCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAg aXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAg ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3Qp IHsKICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBm YWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25h bEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAg ICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsK ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAg ICBpZiAoX19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9f bGFzdDsKICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faWkgPCAqX19p KSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAg d2hpbGUgKCEoKi0tX19qIDwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3 YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAg cmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAg ICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwog ICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihf QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoK ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAo X19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsK ICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2lpLCAqX19p KSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAg IHdoaWxlICghX19jb21wKCotLV9faiwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBp dGVyX3N3YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAg ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkg ewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZh bHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9JbnB1dEl0ZXIKICAgIGZpbmRfZmly c3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAg ICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyKQogICAg ewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx OyArK19fZmlyc3QxKQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3Qy OyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoKl9fZmlyc3QxID09 ICpfX2l0ZXIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJuIF9fbGFz dDE7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3 YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9JbnB1dEl0ZXIKICAgIGZp bmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3Qy LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAg CiAgICAgCiAgICAgCgoKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx OyArK19fZmlyc3QxKQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3Qy OyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoX19jb21wKCpfX2Zp cnN0MSwgKl9faXRlcikpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJu IF9fbGFzdDE7CiAgICB9CiMgNDIwMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9f Zmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl cjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgZm9yd2Fy ZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoX19m aXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAg ICAgICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEp IHsKICAgICAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2Vh cmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgICAgICBpZiAo X19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAg ICAgICAgIGVsc2UgewogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAg ICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAg ICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9G b3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUg X0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0Zvcndh cmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBf Rm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg ICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAg ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MiA9 PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBf Rm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewogICAg ICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2goX19m aXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAgICAgICAgaWYg KF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAg ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAg ICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmlyc3QxOwog ICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIF9C aWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2Zp cnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAg ICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJh dG9yX3RhZykKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0 b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2Vf aXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIx IF9fcmxhc3QxKF9fZmlyc3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsK ICAgICAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9f cmxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xh c3QyKSwgX19ybGFzdDIpOwoKICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgICAg ICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy MSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwg LWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0Owog ICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5 cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVBy ZWRpY2F0ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0 aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIy IF9fbGFzdDIsCiAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRp cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBf X2NvbXApCiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y PF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0 ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJdGVyMSBf X3JsYXN0MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAg ICAgIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3Js YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0 MiksIF9fcmxhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7 CgogICAgICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3Qx OwogICAgICBlbHNlIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19y cmVzdWx0LmJhc2UoKTsKICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJz dDIsIF9fbGFzdDIpKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIy PgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19m aXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIg X19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAg CgoKCiAgICAgIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Miwg X19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2Zp cnN0MSksCiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz dDIpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUg X0ZvcndhcmRJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAg aW5saW5lIF9Gb3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEs IF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJz dDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg X19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgcmV0dXJuIF9fZmluZF9l bmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAg ICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAg ICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MiksCiAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29tcCk7CiAgICB9Cgp9CiMgNzAgIi91c3IvaW5jbHVkZS9nKystdjMvYWxnb3JpdGht IiAyIDMKIyA1NyAiL3Vzci9pbmNsdWRlL2crKy12My9zdHJpbmciIDIgMwojIDEgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAxIDMKIyA0NSAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg IF9SZXA6Ol9TX21heF9zaXplID0gKCgobnBvcyAtIHNpemVvZihfUmVwKSkvc2l6ZW9mKF9DaGFy VCkpIC0gMSkgLyA0OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IF9DaGFyVAogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVwOjpfU190ZXJtaW5hbCA9IF9DaGFyVCgp OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6bnBvczsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6X1NfZW1wdHlfcmVwX3N0b3JhZ2VbCiAgICAoc2l6ZW9mKF9SZXApICsgc2l6 ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcj4KICAgICAgX0NoYXJUKgog ICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX1NfY29u c3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAog ICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgaWYg KF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVybiBfU19l bXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgogICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBdOwogICAg ICAgIHNpemVfdHlwZSBfX2kgPSAwOwogICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBf X2kgPCBzaXplb2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICB7CiAgICAgICAg ICAgIF9fYnVmW19faSsrXSA9ICpfX2JlZzsKICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAg IH0KICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19pLCBfX2EpOwogICAgICAg IHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsKICAgICAg ICBfX3ItPl9NX2xlbmd0aCA9IF9faTsKICAgICAgICB0cnkKICAgICAgICAgIHsKCgoKICAgICAg ICAgICAgZm9yICg7OykKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9f cCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9sZW5ndGg7CiAgICAgICAgICAgICAgICBf Q2hhclQqIF9fbGFzdCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsKICAg ICAgICAgICAgICAgIGZvciAoOzspCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7 CiAgICAgICAgICAgICAgICAgICAgICAgICpfX3AgPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChfX3AgPT0gX19sYXN0KQogICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgKl9fcCsrID0gKl9fYmVn OwogICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIH0KCiAgICAg ICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAg ICAgICAgICAgICAgIF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEs IF9fYSk7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX2Fub3RoZXItPl9NX3Jl ZmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fcmVmZGF0 YSgpLCBfX2xlbik7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAg ICAgICAgICAgIF9fciA9IF9fYW5vdGhlcjsKICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3Ro ID0gX19sZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIGNhdGNoKC4uLikK ICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAg IHRocm93OwogICAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg dGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9f YmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAg IGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9 IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7CgoKICAgICAg ICBpZiAoX19idWlsdGluX2V4cGVjdChfX2JlZyA9PSBfSW5JdGVyKDApLCAwKSkKICAgICAgICAg IF9fdGhyb3dfbG9naWNfZXJyb3IoImF0dGVtcHQgdG8gY3JlYXRlIHN0cmluZyB3aXRoIG51bGwg cG9pbnRlciIpOwoKICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygp KQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICAg IF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2RuZXcsIF9fYSk7CiAgICAgICAgdHJ5CiAg ICAgICAgICB7IF9TX2NvcHlfY2hhcnMoX19yLT5fTV9yZWZkYXRhKCksIF9fYmVnLCBfX2VuZCk7 IH0KICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVz dHJveShfX2EpOwogICAgICAgICAgICB0aHJvdzsKICAgICAgICAgIH0KICAgICAgICBfX3ItPl9N X2xlbmd0aCA9IF9fZG5ldzsKCiAgICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19kbmV3XSA9IF9S ZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OgogICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0 IF9BbGxvYyYgX19hKQogICAgewogICAgICBpZiAoX19uID09IDAgJiYgX19hID09IF9BbGxvYygp KQogICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgX1Jl cCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbiwgX19hKTsKICAgICAgdHJ5CiAgICAgICAgewog ICAgICAgICAgaWYgKF9fbikKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfX3ItPl9N X3JlZmRhdGEoKSwgX19uLCBfX2MpOwogICAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAg IHsKICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgdGhyb3c7CiAgICAg ICAgfQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fbjsKICAgICAgX19yLT5fTV9yZWZkYXRhKClb X19uXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIDogX01fZGF0 YXBsdXMoX19zdHIuX01fcmVwKCktPl9NX2dyYWIoX0FsbG9jKCksIF9fc3RyLmdldF9hbGxvY2F0 b3IoKSksCiAgICAgICAgICAgICAgICAgX19zdHIuZ2V0X2FsbG9jYXRvcigpKQogICAgeyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNp Y19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVj dChzaXplX3R5cGUoKSwgX0NoYXJUKCksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNv bnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikK ICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9B bGxvYygpKSwgX0FsbG9jKCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcm IF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwg Y29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5f TV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9m b2xkKF9fcG9zLCBfX24pLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hh clQqIF9fcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFw bHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyArIF9fbiwgX19hKSwgX19hKQogICAgeyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19z dHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRh cGx1cyhfU19jb25zdHJ1Y3QoX19zLCBfX3MgPyBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f cykgOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hKSwgX19hKQogICAgeyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBi YXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2Ep CiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX24sIF9fYywgX19hKSwgX19hKQogICAg eyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0 ZXIgX19iZWcsIF9JbnB1dEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9k YXRhcGx1cyhfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6YXNzaWduKGNvbnN0IGJhc2ljX3N0cmlu ZyYgX19zdHIpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5fTV9yZXAoKSkKICAg ICAgICB7CgogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gdGhpcy0+Z2V0X2FsbG9jYXRv cigpOwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9f YSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3Nl KF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICAgIHJldHVybiAq dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJiBfX2EpIHRo cm93ICgpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkgKyAoX01f Y2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpOwogICAgICBfUmF3X2J5dGVzX2FsbG9jKF9f YSkuZGVhbGxvY2F0ZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSwgX19zaXplKTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjpfTV9sZWFrX2hhcmQoKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJl ZCgpKQogICAgICAgIF9NX211dGF0ZSgwLCAwLCAwKTsKICAgICAgX01fcmVwKCktPl9NX3NldF9s ZWFrZWQoKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNp emVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpCiAgICB7CiAgICAgIHNpemVfdHlwZSBf X29sZF9zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdfc2l6 ZSA9IF9fb2xkX3NpemUgKyBfX2xlbjIgLSBfX2xlbjE7CiAgICAgIGNvbnN0IF9DaGFyVCogX19z cmMgPSBfTV9kYXRhKCkgKyBfX3BvcyArIF9fbGVuMTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f aG93X211Y2ggPSBfX29sZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7CgogICAgICBpZiAoX01fcmVw KCktPl9NX2lzX3NoYXJlZCgpIHx8IF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpKQogICAgICAgIHsK CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CgoKICAgICAg ICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgICAgIGNvbnN0IHNp emVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsKCiAgICAg ICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlX2NhcGFjaXR5ID0gKF9fcGFnZXNpemUgLSBfX21h bGxvY19oZWFkZXJfc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtIHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX1Jl cCogX19yOwogICAgICAgICAgaWYgKF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpICYmIF9fbmV3X3Np emUgPiBfX3BhZ2VfY2FwYWNpdHkpCgogICAgICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUo X19uZXdfc2l6ZSA+IDIqY2FwYWNpdHkoKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX25ld19zaXplIDogMipjYXBhY2l0eSgpLCBfX2EpOwogICAgICAgICAgZWxzZQogICAg ICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSwgX19hKTsKICAgICAgICAg IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9zKQogICAgICAgICAgICAg ICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX2RhdGEoKSwgX19wb3Mp OwogICAgICAgICAgICAgIGlmIChfX2hvd19tdWNoKQogICAgICAgICAgICAgICAgdHJhaXRzX3R5 cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICAgICAgfQog ICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19yLT5fTV9k aXNwb3NlKGdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg IH0KICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRh KF9fci0+X01fcmVmZGF0YSgpKTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2hvd19tdWNoICYm IF9fbGVuMSAhPSBfX2xlbjIpCiAgICAgICAgewoKICAgICAgICAgIHRyYWl0c190eXBlOjptb3Zl KF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4yLCBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAg fQogICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9NX3JlcCgpLT5fTV9s ZW5ndGggPSBfX25ld19zaXplOwogICAgICBfTV9kYXRhKClbX19uZXdfc2l6ZV0gPSBfUmVwOjpf U190ZXJtaW5hbDsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6cmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpCiAgICB7CiAgICAg IGlmIChfX3JlcyA+IHRoaXMtPmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3NoYXJlZCgp KQogICAgICAgIHsKICAgICAgICAgIGlmIChfX3JlcyA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAg ICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2VydmUiKTsKCiAg ICAgICAgICBpZiAoX19yZXMgPCB0aGlzLT5zaXplKCkpCiAgICAgICAgICAgIF9fcmVzID0gdGhp cy0+c2l6ZSgpOwogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigp OwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX3JlcCgpLT5fTV9jbG9uZShfX2EsIF9fcmVz IC0gdGhpcy0+c2l6ZSgpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAg ICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpzd2FwKGJhc2ljX3N0cmluZyYg X19zKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgIF9N X3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYgKF9fcy5fTV9yZXAoKS0+X01faXNf bGVha2VkKCkpCiAgICAgICAgX19zLl9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAg aWYgKHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBfX3MuZ2V0X2FsbG9jYXRvcigpKQogICAgICAg IHsKICAgICAgICAgIF9DaGFyVCogX190bXAgPSBfTV9kYXRhKCk7CiAgICAgICAgICBfTV9kYXRh KF9fcy5fTV9kYXRhKCkpOwogICAgICAgICAgX19zLl9NX2RhdGEoX190bXApOwogICAgICAgIH0K CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAxKF9NX2li ZWdpbigpLCBfTV9pZW5kKCksIF9fcy5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgYmFzaWNf c3RyaW5nIF9fdG1wMihfX3MuX01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAqdGhp cyA9IF9fdG1wMjsKICAgICAgICAgIF9fcyA9IF9fdG1wMTsKICAgICAgICB9CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1Jl cCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAg X1NfY3JlYXRlKHNpemVfdCBfX2NhcGFjaXR5LCBjb25zdCBfQWxsb2MmIF9fYWxsb2MpCiAgICB7 CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0 cmluZ190eXBlOwoKCiAgICAgIGlmIChfX2NhcGFjaXR5ID4gX1NfbWF4X3NpemUpCgoKCiAgICAg ICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X1NfY3JlYXRlIik7CgoKCgog ICAgICBzaXplX3QgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsg c2l6ZW9mKF9SZXApOwojIDQyMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmlu Zy50Y2MiIDMKICAgICAgY29uc3Qgc2l6ZV90IF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25z dCBzaXplX3QgX19zdWJwYWdlc2l6ZSA9IDEyODsKICAgICAgY29uc3Qgc2l6ZV90IF9fbWFsbG9j X2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwogICAgICBpZiAoKF9fc2l6ZSArIF9f bWFsbG9jX2hlYWRlcl9zaXplKSA+IF9fcGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAgc2l6 ZV90IF9fZXh0cmEgPQogICAgICAgICAgICAoX19wYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxs b2NfaGVhZGVyX3NpemUpICUgX19wYWdlc2l6ZSkpCiAgICAgICAgICAgICUgX19wYWdlc2l6ZTsK ICAgICAgICAgIF9fY2FwYWNpdHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAg ICAgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9S ZXApOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19zaXplID4gX19zdWJwYWdlc2l6ZSkKICAg ICAgICB7CiAgICAgICAgICBzaXplX3QgX19leHRyYSA9CiAgICAgICAgICAgIChfX3N1YnBhZ2Vz aXplIC0gKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgJSBfX3N1YnBhZ2VzaXplKSkK ICAgICAgICAgICAgJSBfX3N1YnBhZ2VzaXplOwogICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4 dHJhIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEp ICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiAgICAgICAgfQoKCgogICAgICB2b2lk KiBfX3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOwog ICAgICBfUmVwICpfX3AgPSBuZXcgKF9fcGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+X01fY2FwYWNp dHkgPSBfX2NhcGFjaXR5OwogICAgICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfX3At Pl9NX2xlbmd0aCA9IDA7CiAgICAgIHJldHVybiBfX3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJU KgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBf TV9jbG9uZShjb25zdCBfQWxsb2MmIF9fYWxsb2MsIHNpemVfdHlwZSBfX3JlcykKICAgIHsKCiAg ICAgIGNvbnN0IHNpemVfdHlwZSBfX3JlcXVlc3RlZF9jYXAgPSBfTV9sZW5ndGggKyBfX3JlczsK CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgY29uc3Qgc2l6 ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAg Y29uc3Qgc2l6ZV90eXBlIF9fcGFnZV9jYXBhY2l0eSA9CiAgICAgICAgKF9fcGFnZXNpemUgLSBf X21hbGxvY19oZWFkZXJfc2l6ZSAtIHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAg ICAgIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SZXAqIF9fcjsKICAgICAgaWYgKF9fcmVxdWVz dGVkX2NhcCA+IF9NX2NhcGFjaXR5ICYmIF9fcmVxdWVzdGVkX2NhcCA+IF9fcGFnZV9jYXBhY2l0 eSkKCiAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCA+IDIqX01f Y2FwYWNpdHkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3JlcXVlc3RlZF9jYXAg OiAyKl9NX2NhcGFjaXR5LCBfX2FsbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9fciA9IF9SZXA6 Ol9TX2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAsIF9fYWxsb2MpOwoKICAgICAgaWYgKF9NX2xlbmd0 aCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyB0cmFpdHNfdHlwZTo6Y29w eShfX3ItPl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgpLCBfTV9sZW5ndGgpOyB9CiAgICAgICAg ICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3ko X19hbGxvYyk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIF9fci0+X01fbGVuZ3RoID0gX01fbGVuZ3RoOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZk YXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6cmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAg ICAgIGlmIChfX24gPiBtYXhfc2l6ZSgpKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJi YXNpY19zdHJpbmc6OnJlc2l6ZSIpOwogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6 ZSgpOwogICAgICBpZiAoX19zaXplIDwgX19uKQogICAgICAgIHRoaXMtPmFwcGVuZChfX24gLSBf X3NpemUsIF9fYyk7CiAgICAgIGVsc2UgaWYgKF9fbiA8IF9fc2l6ZSkKICAgICAgICB0aGlzLT5l cmFzZShfX24pOwoKICAgIH0KIyA1MDggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19z dHJpbmcudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBf X2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgX0lu cHV0SXRlciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKCiAgICAgICAgYmFzaWNf c3RyaW5nIF9fcyhfX2sxLCBfX2syKTsKICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9f aTEsIF9faTIsIF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSk7CiAgICAgIH0KCgoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3JlcGxhY2Vfc2FmZShpdGVyYXRvciBfX2kxLCBp dGVyYXRvciBfX2kyLCBfRm9yd2FyZEl0ZXIgX19rMSwKICAgICAgICAgICAgICAgICAgICAgIF9G b3J3YXJkSXRlciBfX2syKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRp Y19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19rMSwgX19rMikpOwogICAgICAgIHNpemVfdHlw ZSBfX2RvbGQgPSBfX2kyIC0gX19pMTsKICAgICAgICBzaXplX3R5cGUgX19kbWF4ID0gdGhpcy0+ bWF4X3NpemUoKTsKCiAgICAgICAgaWYgKF9fZG1heCA8PSBfX2RuZXcpCiAgICAgICAgICBfX3Ro cm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfTV9yZXBsYWNlIik7CiAgICAgICAgc2l6 ZV90eXBlIF9fb2ZmID0gX19pMSAtIF9NX2liZWdpbigpOwogICAgICAgIF9NX211dGF0ZShfX29m ZiwgX19kb2xkLCBfX2RuZXcpOwoKCiAgICAgICAgaWYgKF9fZG5ldykKICAgICAgICAgIF9TX2Nv cHlfY2hhcnMoX01fZGF0YSgpICsgX19vZmYsIF9fazEsIF9fazIpOwoKICAgICAgICByZXR1cm4g KnRoaXM7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBy ZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJp bmcmIF9fc3RyLAogICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikK ICAgIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAg ICAgaWYgKF9fcG9zMiA+IF9fc3Ryc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgi YmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIGNvbnN0IGJvb2wgX190ZXN0bjIgPSBfX24y IDwgX19zdHJzaXplIC0gX19wb3MyOwogICAgICBjb25zdCBzaXplX3R5cGUgX19mb2xkbjIgPSBf X3Rlc3RuMiA/IF9fbjIgOiBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgIHJldHVybiB0aGlzLT5y ZXBsYWNlKF9fcG9zMSwgX19uMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01f ZGF0YSgpICsgX19wb3MyLCBfX2ZvbGRuMik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICB7 CgoKCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIHNpemVfdHlw ZSBfX2xlbiA9IF9fc2l6ZSArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+ Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIF9N X3JlcGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01faWJlZ2luKCksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01faWVuZCgpKTsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3Ry aW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgewoKCgogICAg ICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zdHIuc2l6ZSgpIC0gX19wb3MsIF9fbikgKyB0aGlz LT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhp cy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgp LCBfTV9pZW5kKCksIF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf dHlwZSBfX24pCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUo KTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNl cnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2ll bmQoKSwgX19zLCBfX3MgKyBfX24pOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjoKICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgewogICAg ICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+ IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgICBy ZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9w ZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0eXBlZGVm IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7 CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX1RyYWl0czo6bGVuZ3RoKF9fbGhzKTsKICAgICAg X19zdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIF9fcmhzLnNp emUoKSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX2xocywgX19saHMgKyBfX2xlbik7CiAgICAgIF9f c3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoX0NoYXJU IF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3Jo cykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6 c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBf X3NpemVfdHlwZSBfX2xlbiA9IF9fcmhzLnNpemUoKTsKICAgICAgX19zdHIucmVzZXJ2ZShfX2xl biArIDEpOwogICAgICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUoMSksIF9fbGhzKTsKICAgICAg X19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRl cmF0b3IgX19pMiwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHNpemVf dHlwZSBfX24xID0gX19pMiAtIF9faTE7CiAgICAgIHNpemVfdHlwZSBfX29mZjEgPSBfX2kxIC0g X01faWJlZ2luKCk7CiAgICAgIGlmIChtYXhfc2l6ZSgpIC0gKHRoaXMtPnNpemUoKSAtIF9fbjEp IDw9IF9fbjIpCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVw bGFjZSIpOwogICAgICBfTV9tdXRhdGUgKF9fb2ZmMSwgX19uMSwgX19uMik7CgogICAgICBpZiAo X19uMikKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKSArIF9fb2ZmMSwgX19u MiwgX19jKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb3B5KF9DaGFyVCogX19zLCBz aXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIGlmIChfX3Bv cyA+IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3Ry aW5nOjpjb3B5Iik7CgogICAgICBpZiAoX19uID4gdGhpcy0+c2l6ZSgpIC0gX19wb3MpCiAgICAg ICAgX19uID0gdGhpcy0+c2l6ZSgpIC0gX19wb3M7CgogICAgICB0cmFpdHNfdHlwZTo6Y29weShf X3MsIF9NX2RhdGEoKSArIF9fcG9zLCBfX24pOwoKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpz aXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg ZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBj b25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBz aXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0 YSgpOwogICAgICBmb3IgKDsgX194cG9zICsgX19uIDw9IF9fc2l6ZTsgKytfX3hwb3MpCiAgICAg ICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9feHBvcywgX19zLCBfX24pID09 IDApCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpz aXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg ZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVf dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX3JldCA9IG5wb3M7 CiAgICAgIGlmIChfX3BvcyA8IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBjb25zdCBfQ2hh clQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIHNpemVfdHlwZSBfX24gPSBfX3NpemUg LSBfX3BvczsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQo X19kYXRhICsgX19wb3MsIF9fbiwgX19jKTsKICAgICAgICAgIGlmIChfX3ApCiAgICAgICAgICAg IF9fcmV0ID0gX19wIC0gX19kYXRhOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAg fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OgogICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl IF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsK ICAgICAgaWYgKF9fbiA8PSBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19wb3MgPSBzdGQ6 Om1pbihfX3NpemUgLSBfX24sIF9fcG9zKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRh ID0gX01fZGF0YSgpOwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlm ICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3BvcywgX19zLCBfX24pID09IDApCiAg ICAgICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxl IChfX3Bvcy0tID4gMCk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXpl X3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmZp bmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5 cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAg ICAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3NpemUgLSAxOwogICAgICAgICAgaWYgKF9feHBvcyA+ IF9fcG9zKQogICAgICAgICAgICBfX3hwb3MgPSBfX3BvczsKCiAgICAgICAgICBmb3IgKCsrX194 cG9zOyBfX3hwb3MtLSA+IDA7ICkKICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcShfTV9k YXRhKClbX194cG9zXSwgX19jKSkKICAgICAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICAg IH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJU KiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAg Zm9yICg7IF9fbiAmJiBfX3BvcyA8IHRoaXMtPnNpemUoKTsgKytfX3BvcykKICAgICAgICB7CiAg ICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBf TV9kYXRhKClbX19wb3NdKTsKICAgICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIHJldHVybiBf X3BvczsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVu YW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfb2Yo Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QK ICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9f c2l6ZSAmJiBfX24pCiAgICAgICAgewogICAgICAgICAgaWYgKC0tX19zaXplID4gX19wb3MpCiAg ICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAg ICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6 ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAg ICAgd2hpbGUgKF9fc2l6ZS0tICE9IDApOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19w b3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3Bv czsKICAgICAgZm9yICg7IF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAg aWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19feHBvc10pKQogICAg ICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg dHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBl CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmly c3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAg c2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3IgKDsgX194cG9zIDwgdGhpcy0+c2l6ZSgp OyArK19feHBvcykKICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX194cG9z XSwgX19jKSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 CiAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3Ms IHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlz LT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUpCiAgICAgICAgewogICAgICAgICAgaWYgKC0tX19z aXplID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwogICAgICAgICAgZG8KICAg ICAgICAgICAgewogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24s IF9NX2RhdGEoKVtfX3NpemVdKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAg ICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3NpemUtLSk7CiAgICAgICAgfQogICAgICByZXR1 cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OgogICAgZmluZF9sYXN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUg X19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7 CiAgICAgIGlmIChfX3NpemUpCiAgICAgICAgewogICAgICAgICAgaWYgKC0tX19zaXplID4gX19w b3MpCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwogICAgICAgICAgZG8KICAgICAgICAgICAg ewogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3NpemVdLCBf X2MpKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAg ICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNf c3RyaW5nJiBfX3N0cikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMt PnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIGlm IChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3Ry aW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19yc2l6ZT0gbWluKF9fc2l6ZSAtIF9f cG9zLCBfX24pOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7 CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3Bvcywg X19zdHIuZGF0YSgpLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNp emUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVf dHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAog ICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3QKICAgIHsK ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9f b3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIGlmIChfX3BvczEgPiBfX3NpemUgfHwgX19wb3My ID4gX19vc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpj b21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvczEs IF9fbjEpOwogICAgICBzaXplX3R5cGUgX19yb3NpemUgPSBtaW4oX19vc2l6ZSAtIF9fcG9zMiwg X19uMik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX3Jvc2l6ZSk7CiAg ICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvczEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5kYXRhKCkgKyBfX3BvczIs IF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fcm9zaXpl OwogICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9f cykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAg ICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zLCBfX3NpemUp OwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3NpemUgLSB0cmFpdHNfdHlwZTo6bGVu Z3RoKF9fcyk7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFz aWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5 cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKICAgIHsK ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4g X19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBh cmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp OwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAg ICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9f ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsK ICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJl dHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl IF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29u c3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYg KF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp bmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gbWluKHRyYWl0c190eXBl OjpsZW5ndGgoX19zKSwgX19uMik7CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6 ZSAtIF9fcG9zLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9f b3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsg X19wb3MsIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXpl IC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9D aGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgdm9pZAogICAgX1Nfc3RyaW5n X2NvcHkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIs CiAgICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fYnVmLCB0eXBlbmFtZSBfQWxsb2M6OnNpemVf dHlwZSBfX2J1ZnNpeikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVf dHlwZSBzaXplX3R5cGU7CiAgICAgIHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7 CiAgICAgIHNpemVfdHlwZSBfX2J5dGVzID0gbWluKF9fc3Ryc2l6ZSwgX19idWZzaXogLSAxKTsK ICAgICAgX1RyYWl0czo6Y29weShfX2J1ZiwgX19zdHIuZGF0YSgpLCBfX2J5dGVzKTsKICAgICAg X19idWZbX19ieXRlc10gPSBfQ2hhclQoKTsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIGJhc2ljX3N0cmluZzxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJl YW08Y2hhcj4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmKTsK ICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX29zdHJlYW08Y2hhcj4mCiAgICBvcGVyYXRvcjw8 KGJhc2ljX29zdHJlYW08Y2hhcj4mLCBjb25zdCBzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUK ICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08Y2hhcj4m LCBzdHJpbmcmLCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08Y2hh cj4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmKTsKCiAgZXh0ZXJu IHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmluZzx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUK ICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08 d2NoYXJfdD4mLCB3c3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19vc3RyZWFt PHdjaGFyX3Q+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPHdjaGFyX3Q+JiwgY29uc3Qg d3N0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYK ICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcmLCB3Y2hhcl90KTsK ICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCiAgICBnZXRsaW5l KGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJik7Cn0KIyA1OCAiL3Vzci9pbmNsdWRl L2crKy12My9zdHJpbmciIDIgMwojIDUwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxl ZndkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAx IDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAg dm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2Jh ZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lk CiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJy b3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0 IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hh ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk CiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro cm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJm bG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29u c3QgY2hhciogX19zKTsKfQojIDUxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndk LmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewoKICBjbGFzcyBsb2NhbGU7CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQsIGNvbnN0 IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAog ICAgaXNwcmludChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQsIGNvbnN0IGxvY2FsZSYp OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBl cihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICBpbmxpbmUgYm9vbAogICAgaXNsb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbHBoYShfQ2hhclQs IGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg Ym9vbAogICAgaXNkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQsIGNvbnN0IGxv Y2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAg aXN4ZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJULCBjb25zdCBsb2NhbGUmKTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZ3JhcGgo X0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg aW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2VyKF9DaGFy VCwgY29uc3QgbG9jYWxlJik7CgoKCiAgY2xhc3MgY3R5cGVfYmFzZTsKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZTsKICB0ZW1wbGF0ZTw+IGNsYXNzIGN0eXBlPGNo YXI+OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGN0eXBlPHdjaGFyX3Q+OwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWU7CgoKICBjbGFzcyBjb2RlY3Z0X2Jh c2U7CiAgY2xhc3MgX19lbmNfdHJhaXRzOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0 eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnQ7CiAg dGVtcGxhdGU8PiBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47CgogIHRlbXBs YXRlPD4gY2xhc3MgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+ CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFz cyBudW1fZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIg PSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX3B1dDsKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0OwogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4gY2xhc3MgbnVtcHVuY3RfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgY2xhc3MgY29sbGF0ZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNz CiAgICBjb2xsYXRlX2J5bmFtZTsKCgogIGNsYXNzIHRpbWVfYmFzZTsKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFy VD4gPgogICAgY2xhc3MgdGltZV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRp bWVfZ2V0X2J5bmFtZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ dGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0Owog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVm X2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lOwoKCiAgY2xhc3Mg bW9uZXlfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIg PSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbW9uZXlfZ2V0OwogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0 ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbW9uZXlfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgogICAgY2xhc3MgbW9uZXlwdW5jdDsKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5 cHVuY3RfYnluYW1lOwoKCiAgY2xhc3MgbWVzc2FnZXNfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlczsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWU7CgoKICBjbGFzcyBsb2NhbGUKICB7CiAgcHVibGlj OgoKICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IGNhdGVnb3J5OwoKCiAgICBjbGFzcyBmYWNldDsK ICAgIGNsYXNzIGlkOwogICAgY2xhc3MgX0ltcGw7CgogICAgZnJpZW5kIGNsYXNzIGZhY2V0Owog ICAgZnJpZW5kIGNsYXNzIF9JbXBsOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAg ICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoK ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFz X2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CgoKCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdv cnkgbm9uZSA9IDA7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgY3R5cGUgPSAxTCA8PCAwOwog ICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG51bWVyaWMgPSAxTCA8PCAxOwogICAgc3RhdGljIGNv bnN0IGNhdGVnb3J5IGNvbGxhdGUgPSAxTCA8PCAyOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5 IHRpbWUgPSAxTCA8PCAzOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1vbmV0YXJ5ID0gMUwg PDwgNDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBtZXNzYWdlcyA9IDFMIDw8IDU7CiAgICBz dGF0aWMgY29uc3QgY2F0ZWdvcnkgYWxsID0gKGNvbGxhdGUgfCBjdHlwZSB8IG1vbmV0YXJ5IHwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWMgfCB0aW1l IHwgbWVzc2FnZXMpOwoKCiAgICBsb2NhbGUoKSB0aHJvdygpOwoKICAgIGxvY2FsZShjb25zdCBs b2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShjb25zdCBj aGFyKiBfX3MpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgY2hhciog X19zLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBj b25zdCBsb2NhbGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZhY2V0PgogICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9f Zik7CgogICAgfmxvY2FsZSgpIHRocm93KCk7CgogICAgY29uc3QgbG9jYWxlJgogICAgb3BlcmF0 b3I9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRmFjZXQ+CiAgICAgIGxvY2FsZQogICAgICBjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19vdGhl cikgY29uc3Q7CgoKICAgIHN0cmluZwogICAgbmFtZSgpIGNvbnN0OwoKICAgIGJvb2wKICAgIG9w ZXJhdG9yPT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKTsKCiAgICBpbmxp bmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93 ICgpCiAgICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19vdGhlcikpOyB9CgogICAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1Ry YWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8 X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0OwoKCiAgICBzdGF0aWMgbG9jYWxl CiAgICBnbG9iYWwoY29uc3QgbG9jYWxlJik7CgogICAgc3RhdGljIGNvbnN0IGxvY2FsZSYKICAg IGNsYXNzaWMoKTsKCiAgcHJpdmF0ZToKCiAgICBfSW1wbCogX01faW1wbDsKCgogICAgc3RhdGlj IF9JbXBsKiBfU19jbGFzc2ljOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9TX2dsb2JhbDsKCiAgICBz dGF0aWMgY29uc3Qgc2l6ZV90IF9TX251bV9jYXRlZ29yaWVzID0gNjsKCiAgICBleHBsaWNpdAog ICAgbG9jYWxlKF9JbXBsKikgdGhyb3coKTsKCiAgICBzdGF0aWMgaW5saW5lIHZvaWQKICAgIF9T X2luaXRpYWxpemUoKQogICAgewogICAgICBpZiAoIV9TX2NsYXNzaWMpCiAgICAgICAgY2xhc3Np YygpOwogICAgfQoKICAgIHN0YXRpYyBjYXRlZ29yeQogICAgX1Nfbm9ybWFsaXplX2NhdGVnb3J5 KGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBfTV9jb2FsZXNjZShjb25zdCBsb2NhbGUmIF9fYmFz ZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwogIH07CgoKCiAgY2xhc3Mg bG9jYWxlOjpfSW1wbAogIHsKICBwdWJsaWM6CgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAg IGZyaWVuZCBjbGFzcyBsb2NhbGU6OmZhY2V0OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNl dD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2Fs ZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAg ICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CgogIHByaXZhdGU6CgogICAgX0F0 b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CiAgICBmYWNldCoqIF9NX2ZhY2V0czsKICAgIHNpemVf dCBfTV9mYWNldHNfc2l6ZTsKICAgIGNvbnN0IGNoYXIqIF9NX25hbWVzW19TX251bV9jYXRlZ29y aWVzXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jdHlwZVtdOwog ICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX251bWVyaWNbXTsKICAgIHN0 YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jb2xsYXRlW107CiAgICBzdGF0aWMg Y29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfdGltZVtdOwogICAgc3RhdGljIGNvbnN0IGxv Y2FsZTo6aWQqIGNvbnN0IF9TX2lkX21vbmV0YXJ5W107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxl OjppZCogY29uc3QgX1NfaWRfbWVzc2FnZXNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6Omlk KiBjb25zdCogY29uc3QgX1NfZmFjZXRfY2F0ZWdvcmllc1tdOwoKICAgIGlubGluZSB2b2lkCiAg ICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgeyBfX2F0b21pY19hZGQoJl9NX3JlZmVy ZW5jZXMsIDEpOyB9CgogICAgaW5saW5lIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0 aHJvdygpCiAgICB7CiAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5jZXMs IC0xKSA9PSAxKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IGRlbGV0ZSB0 aGlzOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsgfQogICAgICAgIH0KICAg IH0KCiAgICBfSW1wbChjb25zdCBfSW1wbCYsIHNpemVfdCk7CiAgICBfSW1wbChjb25zdCBjaGFy Kiwgc2l6ZV90KTsKICAgIF9JbXBsKGZhY2V0KiosIHNpemVfdCwgYm9vbCk7CgogICB+X0ltcGwo KSB0aHJvdygpOwoKICAgIF9JbXBsKGNvbnN0IF9JbXBsJik7CgogICAgdm9pZAogICAgb3BlcmF0 b3I9KGNvbnN0IF9JbXBsJik7CgogICAgaW5saW5lIGJvb2wKICAgIF9NX2NoZWNrX3NhbWVfbmFt ZSgpCiAgICB7CiAgICAgIGJvb2wgX19yZXQgPSB0cnVlOwogICAgICBmb3IgKHNpemVfdCBpID0g MDsgX19yZXQgJiYgaSA8IF9TX251bV9jYXRlZ29yaWVzIC0gMTsgKytpKQogICAgICAgIF9fcmV0 ICY9IChzdHJjbXAoX01fbmFtZXNbaV0sIF9NX25hbWVzW2kgKyAxXSkgPT0gMCk7CiAgICAgIHJl dHVybiBfX3JldDsKICAgIH0KCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3JpZXMoY29u c3QgX0ltcGwqLCBjYXRlZ29yeSk7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29yeShj b25zdCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0Kik7CgogICAgdm9pZAogICAgX01f cmVwbGFjZV9mYWNldChjb25zdCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqKTsKCiAgICB2b2lk CiAgICBfTV9pbnN0YWxsX2ZhY2V0KGNvbnN0IGxvY2FsZTo6aWQqLCBmYWNldCopOwoKICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgaW5saW5lIHZvaWQKICAgICAgX01faW5pdF9m YWNldChfRmFjZXQqIF9fZmFjZXQpCiAgICAgIHsgX01faW5zdGFsbF9mYWNldCgmX0ZhY2V0Ojpp ZCwgX19mYWNldCk7IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2Nh bGU6OmxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKQogICAgewogICAg ICBfTV9pbXBsID0gbmV3IF9JbXBsKCpfX290aGVyLl9NX2ltcGwsIDEpOwogICAgICBfTV9pbXBs LT5fTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6OmlkLCBfX2YpOwogICAgICBmb3IgKHNpemVfdCBf X2kgPSAwOyBfX2kgPCBfU19udW1fY2F0ZWdvcmllczsgKytfX2kpCiAgICAgICAgX01faW1wbC0+ X01fbmFtZXNbX19pXSA9ICIqIjsKICAgIH0KCgogIGNsYXNzIGxvY2FsZTo6ZmFjZXQKICB7CiAg cHJpdmF0ZToKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxl OjpfSW1wbDsKCiAgICBfQXRvbWljX3dvcmQgX01fcmVmZXJlbmNlczsKCiAgcHJvdGVjdGVkOgoK CiAgICBzdGF0aWMgX19jX2xvY2FsZSBfU19jX2xvY2FsZTsKCiAgICBleHBsaWNpdAogICAgZmFj ZXQoc2l6ZV90IF9fcmVmcyA9IDApIHRocm93KCk7CgogICAgdmlydHVhbAogICAgfmZhY2V0KCk7 CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Ns b2MsIGNvbnN0IGNoYXIqIF9fcywKICAgICAgICAgICAgICAgICAgICAgICBfX2NfbG9jYWxlIF9f b2xkID0gMCk7CgogICAgc3RhdGljIF9fY19sb2NhbGUKICAgIF9TX2Nsb25lX2NfbG9jYWxlKF9f Y19sb2NhbGUmIF9fY2xvYyk7CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2Rlc3Ryb3lfY19sb2Nh bGUoX19jX2xvY2FsZSYgX19jbG9jKTsKCiAgcHJpdmF0ZToKICAgIHZvaWQKICAgIF9NX2FkZF9y ZWZlcmVuY2UoKSB0aHJvdygpOwoKICAgIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0 aHJvdygpOwoKICAgIGZhY2V0KGNvbnN0IGZhY2V0Jik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9 KGNvbnN0IGZhY2V0Jik7CiAgfTsKCgoKICBjbGFzcyBsb2NhbGU6OmlkCiAgewogIHByaXZhdGU6 CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7 CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQm CiAgICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9G YWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRo cm93ICgpOwoKCgoKICAgIG11dGFibGUgc2l6ZV90IF9NX2luZGV4OwoKCiAgICBzdGF0aWMgX0F0 b21pY193b3JkIF9TX2hpZ2h3YXRlcjsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgaWQm KTsKCiAgICBpZChjb25zdCBpZCYpOwoKICBwdWJsaWM6CgoKICAgIGlkKCk7CgogICAgaW5saW5l IHNpemVfdAogICAgX01faWQoKSBjb25zdAogICAgewogICAgICBpZiAoIV9NX2luZGV4KQogICAg ICAgIF9NX2luZGV4ID0gMSArIF9fZXhjaGFuZ2VfYW5kX2FkZCgmX1NfaGlnaHdhdGVyLCAxKTsK ICAgICAgcmV0dXJuIF9NX2luZGV4IC0gMTsKICAgIH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFjZXQmCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBf X2xvYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19mYWNl dChjb25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpOwp9CiMgNDkgIi91c3IvaW5jbHVkZS9nKyst djMvaW9zIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvaW9zX2Jhc2UuaCIgMSAz CiMgNDQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5oIiAzCgoKCm5hbWVzcGFj ZSBzdGQKewoKCgoKICBlbnVtIF9Jb3NfRm10ZmxhZ3MgeyBfTV9pb3NfZm10ZmxhZ3NfZW5kID0g MUwgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvciYoX0lvc19GbXRm bGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3Rh dGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUg X0lvc19GbXRmbGFncwogIG9wZXJhdG9yfChfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFn cyBfX2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBz dGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0 b3JeKF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9z X0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7 IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnw9KF9Jb3NfRm10ZmxhZ3MmIF9f YSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlu bGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3ImPShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3Nf Rm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lv c19GbXRmbGFncwogIG9wZXJhdG9yXj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdz IF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10Zmxh Z3MKICBvcGVyYXRvcn4oX0lvc19GbXRmbGFncyBfX2EpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFn cyh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX09wZW5tb2RlIHsgX01f aW9zX29wZW5tb2RlX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAg b3BlcmF0b3ImKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVy biBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4o X19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnwoX0lvc19PcGVubW9k ZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGlj X2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lv c19PcGVubW9kZQogIG9wZXJhdG9yXihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBf X2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0 aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8 PShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9 IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yJj0oX0lvc19P cGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBf X2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcl49KF9Jb3NfT3Blbm1vZGUm IF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9Cgog IGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J+KF9Jb3NfT3Blbm1vZGUgX19hKQogIHsg cmV0dXJuIF9Jb3NfT3Blbm1vZGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0g X0lvc19Jb3N0YXRlIHsgX01faW9zX2lvc3RhdGVfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5l IF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yJihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUg X19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0 aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcnwo X0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3Rh dGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBp bmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3JeKF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9z dGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSBe IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJh dG9yfD0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19h ID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciY9KF9Jb3Nf SW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9f YjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3JePShfSW9zX0lvc3RhdGUmIF9f YSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5s aW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfihfSW9zX0lvc3RhdGUgX19hKQogIHsgcmV0dXJu IF9Jb3NfSW9zdGF0ZSh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKICBlbnVtIF9Jb3NfU2Vl a2RpciB7IF9NX2lvc19zZWVrZGlyX2VuZCA9IDFMIDw8IDE2IH07CgoKICBjbGFzcyBpb3NfYmFz ZQogIHsKICBwdWJsaWM6CgoKICAgIGNsYXNzIGZhaWx1cmUgOiBwdWJsaWMgZXhjZXB0aW9uCiAg ICB7CiAgICBwdWJsaWM6CgoKICAgICAgZXhwbGljaXQKICAgICAgZmFpbHVyZShjb25zdCBzdHJp bmcmIF9fc3RyKSB0aHJvdygpOwoKCgogICAgICB2aXJ0dWFsCiAgICAgIH5mYWlsdXJlKCkgdGhy b3coKTsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgd2hhdCgpIGNvbnN0IHRocm93 KCk7CgogICAgcHJpdmF0ZToKICAgICAgZW51bSB7IF9NX2J1ZnNpemUgPSAyNTYgfTsKICAgICAg Y2hhciBfTV9uYW1lW19NX2J1ZnNpemVdOwoKICAgIH07CgoKICAgIHR5cGVkZWYgX0lvc19GbXRm bGFncyBmbXRmbGFnczsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYm9vbGFscGhhID0gZm10 ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jvb2xhbHBoYSk7CiAgICBzdGF0aWMgY29uc3QgZm10Zmxh Z3MgZGVjID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2RlYyk7CiAgICBzdGF0aWMgY29uc3Qg Zm10ZmxhZ3MgZml4ZWQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZml4ZWQpOwogICAgc3Rh dGljIGNvbnN0IGZtdGZsYWdzIGhleCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19oZXgpOwog ICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGludGVybmFsID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6 Ol9TX2ludGVybmFsKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBsZWZ0ID0gZm10ZmxhZ3Mo X19pb3NfZmxhZ3M6Ol9TX2xlZnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIG9jdCA9IGZt dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19vY3QpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHJp Z2h0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3JpZ2h0KTsKICAgIHN0YXRpYyBjb25zdCBm bXRmbGFncyBzY2llbnRpZmljID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NjaWVudGlmaWMp OwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3diYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxh Z3M6Ol9TX3Nob3diYXNlKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9pbnQgPSBm bXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3BvaW50KTsKICAgIHN0YXRpYyBjb25zdCBmbXRm bGFncyBzaG93cG9zID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dwb3MpOwogICAgc3Rh dGljIGNvbnN0IGZtdGZsYWdzIHNraXB3cyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19za2lw d3MpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVuaXRidWYgPSBmbXRmbGFncyhfX2lvc19m bGFnczo6X1NfdW5pdGJ1Zik7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdXBwZXJjYXNlID0g Zm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VwcGVyY2FzZSk7CiAgICBzdGF0aWMgY29uc3QgZm10 ZmxhZ3MgYWRqdXN0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYWRqdXN0ZmllbGQp OwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGJhc2VmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2Zs YWdzOjpfU19iYXNlZmllbGQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZsb2F0ZmllbGQg PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZmxvYXRmaWVsZCk7CgoKICAgIHR5cGVkZWYgX0lv c19Jb3N0YXRlIGlvc3RhdGU7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBiYWRiaXQgPSBpb3N0 YXRlKF9faW9zX2ZsYWdzOjpfU19iYWRiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9m Yml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZW9mYml0KTsKICAgIHN0YXRpYyBjb25zdCBp b3N0YXRlIGZhaWxiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19mYWlsYml0KTsKICAgIHN0 YXRpYyBjb25zdCBpb3N0YXRlIGdvb2RiaXQgPSBpb3N0YXRlKDApOwoKCiAgICB0eXBlZGVmIF9J b3NfT3Blbm1vZGUgb3Blbm1vZGU7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXBwID0gb3Bl bm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2FwcCk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXRl ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2F0ZSk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1v ZGUgYmluYXJ5ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2Jpbik7CiAgICBzdGF0aWMgY29u c3Qgb3Blbm1vZGUgaW4gPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfaW4pOwogICAgc3RhdGlj IGNvbnN0IG9wZW5tb2RlIG91dCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19vdXQpOwogICAg c3RhdGljIGNvbnN0IG9wZW5tb2RlIHRydW5jID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX3Ry dW5jKTsKCgogICAgdHlwZWRlZiBfSW9zX1NlZWtkaXIgc2Vla2RpcjsKICAgIHN0YXRpYyBjb25z dCBzZWVrZGlyIGJlZyA9IHNlZWtkaXIoMCk7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBjdXIg PSBzZWVrZGlyKDEpOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgZW5kID0gc2Vla2RpcigyKTsK IyAyMjYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5oIiAzCiAgICBlbnVtIGV2 ZW50CiAgICB7CiAgICAgIGVyYXNlX2V2ZW50LAogICAgICBpbWJ1ZV9ldmVudCwKICAgICAgY29w eWZtdF9ldmVudAogICAgfTsKCiAgICB0eXBlZGVmIHZvaWQgKCpldmVudF9jYWxsYmFjaykgKGV2 ZW50LCBpb3NfYmFzZSYsIGludCk7CgogICAgdm9pZAogICAgcmVnaXN0ZXJfY2FsbGJhY2soZXZl bnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgpOwoKICBwcm90ZWN0ZWQ6CgogICAgc3RyZWFt c2l6ZSBfTV9wcmVjaXNpb247CiAgICBzdHJlYW1zaXplIF9NX3dpZHRoOwogICAgZm10ZmxhZ3Mg X01fZmxhZ3M7CiAgICBpb3N0YXRlIF9NX2V4Y2VwdGlvbjsKICAgIGlvc3RhdGUgX01fc3RyZWFt YnVmX3N0YXRlOwoKCgogICAgc3RydWN0IF9DYWxsYmFja19saXN0CiAgICB7CgogICAgICBfQ2Fs bGJhY2tfbGlzdCogX01fbmV4dDsKICAgICAgaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9NX2Zu OwogICAgICBpbnQgX01faW5kZXg7CiAgICAgIF9BdG9taWNfd29yZCBfTV9yZWZjb3VudDsKCiAg ICAgIF9DYWxsYmFja19saXN0KGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19p bmRleCwKICAgICAgICAgICAgICAgICAgICAgX0NhbGxiYWNrX2xpc3QqIF9fY2IpCiAgICAgIDog X01fbmV4dChfX2NiKSwgX01fZm4oX19mbiksIF9NX2luZGV4KF9faW5kZXgpLCBfTV9yZWZjb3Vu dCgwKSB7IH0KCiAgICAgIHZvaWQKICAgICAgX01fYWRkX3JlZmVyZW5jZSgpIHsgX19hdG9taWNf YWRkKCZfTV9yZWZjb3VudCwgMSk7IH0KCgogICAgICBpbnQKICAgICAgX01fcmVtb3ZlX3JlZmVy ZW5jZSgpIHsgcmV0dXJuIF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmY291bnQsIC0xKTsgfQog ICAgfTsKCiAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX2NhbGxiYWNrczsKCiAgICB2b2lkCiAgICBf TV9jYWxsX2NhbGxiYWNrcyhldmVudCBfX2V2KSB0aHJvdygpOwoKICAgIHZvaWQKICAgIF9NX2Rp c3Bvc2VfY2FsbGJhY2tzKHZvaWQpOwoKCiAgICBzdHJ1Y3QgX1dvcmRzCiAgICB7CiAgICAgIHZv aWQqIF9NX3B3b3JkOwogICAgICBsb25nIF9NX2l3b3JkOwogICAgICBfV29yZHMoKSA6IF9NX3B3 b3JkKDApLCBfTV9pd29yZCgwKSB7IH0KICAgIH07CgoKICAgIF9Xb3JkcyBfTV93b3JkX3plcm87 CgoKICAgIHN0YXRpYyBjb25zdCBpbnQgX1NfbG9jYWxfd29yZF9zaXplID0gODsKICAgIF9Xb3Jk cyBfTV9sb2NhbF93b3JkW19TX2xvY2FsX3dvcmRfc2l6ZV07CgoKICAgIGludCBfTV93b3JkX3Np emU7CiAgICBfV29yZHMqIF9NX3dvcmQ7CgogICAgX1dvcmRzJgogICAgX01fZ3Jvd193b3Jkcyhp bnQgX19pbmRleCk7CgoKICAgIGxvY2FsZSBfTV9pb3NfbG9jYWxlOwoKICAgIHZvaWQKICAgIF9N X2luaXQoKTsKCiAgcHVibGljOgoKCgoKCiAgICBjbGFzcyBJbml0CiAgICB7CiAgICAgIGZyaWVu ZCBjbGFzcyBpb3NfYmFzZTsKICAgIHB1YmxpYzoKICAgICAgSW5pdCgpOwogICAgICB+SW5pdCgp OwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9zX2NyZWF0ZShib29sIF9fc3luYyk7Cgog ICAgICBzdGF0aWMgdm9pZAogICAgICBfU19pb3NfZGVzdHJveSgpOwoKICAgIHByaXZhdGU6CiAg ICAgIHN0YXRpYyBpbnQgX1NfaW9zX2Jhc2VfaW5pdDsKICAgICAgc3RhdGljIGJvb2wgX1Nfc3lu Y2VkX3dpdGhfc3RkaW87CiAgICB9OwoKCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIGZsYWdzKCkg Y29uc3QgeyByZXR1cm4gX01fZmxhZ3M7IH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIGZsYWdz KGZtdGZsYWdzIF9fZm10ZmwpCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7 CiAgICAgIF9NX2ZsYWdzID0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAg IGlubGluZSBmbXRmbGFncwogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBm bXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyB8PSBfX2ZtdGZsOwogICAg ICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZtdGZs YWdzIF9fZm10ZmwsIGZtdGZsYWdzIF9fbWFzaykKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQg PSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgJj0gfl9fbWFzazsKICAgICAgX01fZmxhZ3MgfD0g KF9fZm10ZmwgJiBfX21hc2spOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5l IHZvaWQKICAgIHVuc2V0ZihmbXRmbGFncyBfX21hc2spIHsgX01fZmxhZ3MgJj0gfl9fbWFzazsg fQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICBwcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBf TV9wcmVjaXNpb247IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKHN0cmVh bXNpemUgX19wcmVjKQogICAgewogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fcHJlY2lzaW9u OwogICAgICBfTV9wcmVjaXNpb24gPSBfX3ByZWM7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0K CiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoKSBjb25zdCB7IHJldHVybiBfTV93aWR0 aDsgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3aWR0aChzdHJlYW1zaXplIF9fd2lkZSkK ICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9NX3dpZHRoOwogICAgICBfTV93aWR0aCA9 IF9fd2lkZTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIHN0YXRpYyBib29sCiAgICBz eW5jX3dpdGhfc3RkaW8oYm9vbCBfX3N5bmMgPSB0cnVlKTsKCgogICAgbG9jYWxlCiAgICBpbWJ1 ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgICBpbmxpbmUgbG9jYWxlCiAgICBnZXRsb2MoKSBj b25zdCB7IHJldHVybiBfTV9pb3NfbG9jYWxlOyB9CgoKICAgIHN0YXRpYyBpbnQKICAgIHhhbGxv YygpIHRocm93KCk7CgogICAgaW5saW5lIGxvbmcmCiAgICBpd29yZChpbnQgX19peCkKICAgIHsK ICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRfc2l6ZSkKICAgICAgICAgICAg ICAgICAgICAgICAgPyBfTV93b3JkW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAg cmV0dXJuIF9fd29yZC5fTV9pd29yZDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZComCiAgICBwd29y ZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRf c2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgPyBfTV93b3JkW19faXhdIDogX01fZ3Jvd193 b3JkcyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9wd29yZDsKICAgIH0KCgogICAgfmlv c19iYXNlKCk7CgogIHByb3RlY3RlZDoKICAgIGlvc19iYXNlKCk7CgoKCiAgcHJpdmF0ZToKICAg IGlvc19iYXNlKGNvbnN0IGlvc19iYXNlJik7CgogICAgaW9zX2Jhc2UmCiAgICBvcGVyYXRvcj0o Y29uc3QgaW9zX2Jhc2UmKTsKCiAgfTsKCgogIGlubGluZSBpb3NfYmFzZSYKICBib29sYWxwaGEo aW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhh KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9ib29sYWxw aGEoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpib29s YWxwaGEpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93 YmFzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93 YmFzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hv d2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpz aG93YmFzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNo b3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpz aG93cG9pbnQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBu b3Nob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jh c2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNl JgogIHNob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFz ZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgog IG5vc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jh c2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYK ICBza2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6 c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9z a2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpz a2lwd3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICB1cHBl cmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dXBw ZXJjYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm91 cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNl Ojp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYK ICB1bml0YnVmKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNl Ojp1bml0YnVmKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgog IG5vdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2UudW5zZXRmKGlvc19i YXNlOjp1bml0YnVmKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFz ZSYKICBpbnRlcm5hbChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uuc2V0Zihpb3Nf YmFzZTo6aW50ZXJuYWwsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICAgcmV0dXJuIF9fYmFz ZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBsZWZ0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewog ICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmxlZnQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAg ICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHJpZ2h0KGlvc19iYXNl JiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnJpZ2h0LCBpb3NfYmFzZTo6 YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2Um CiAgZGVjKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmRl YywgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l IGlvc19iYXNlJgogIGhleChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlv c19iYXNlOjpoZXgsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9 CgogIGlubGluZSBpb3NfYmFzZSYKICBvY3QoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh c2Uuc2V0Zihpb3NfYmFzZTo6b2N0LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBf X2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGZpeGVkKGlvc19iYXNlJiBfX2Jhc2Up CiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmZpeGVkLCBpb3NfYmFzZTo6ZmxvYXRmaWVs ZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNjaWVudGlm aWMoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2NpZW50 aWZpYywgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgp9CiMg NTAgIi91c3IvaW5jbHVkZS9nKystdjMvaW9zIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L3N0cmVhbWJ1ZiIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9nKystdjMvc3RyZWFtYnVmIiAzCgoK CgoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8 X0NoYXJULCBfVHJhaXRzPiYgX2lvcywKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVh bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4sCiAgICAgICAgICAgICAgICAgICAgICBiYXNp Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCk7CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWYK ICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg dHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0 c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNf dHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5 cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgY3R5cGU8Y2hhcl90eXBlPiBf X2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSwgdHJh aXRzX3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7CgogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaW9z PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaXN0cmVh bTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX29zdHJl YW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtYnVm X2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3Mgb3N0 cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKCiAgICAgIGZyaWVuZCBz dHJlYW1zaXplCiAgICAgIF9fY29weV9zdHJlYW1idWZzPD4oYmFzaWNfaW9zPGNoYXJfdHlwZSwg dHJhaXRzX3R5cGU+JiBfX2lvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1 Zl90eXBlKiBfX3NiaW4sX19zdHJlYW1idWZfdHlwZSogX19zYm91dCk7CgogICAgcHJvdGVjdGVk OgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01fYnVmOwoKCiAgICAgIGludF90eXBlIF9NX2J1Zl9z aXplOwoKCiAgICAgIGludF90eXBlIF9NX2J1Zl9zaXplX29wdDsKCgoKICAgICAgYm9vbCBfTV9i dWZfdW5pZmllZDsKCgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9pbl9iZWc7CiAgICAgIGNoYXJf dHlwZSogX01faW5fY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2VuZDsKICAgICAgY2hhcl90 eXBlKiBfTV9vdXRfYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9jdXI7CiAgICAgIGNoYXJf dHlwZSogX01fb3V0X2VuZDsKCgogICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX01fbW9kZTsKCgog ICAgICBsb2NhbGUgX01fYnVmX2xvY2FsZTsKCgogICAgICBib29sIF9NX2J1Zl9sb2NhbGVfaW5p dDsKCgoKCgoKICAgICAgc3RhdGljIGNvbnN0IGludF90eXBlIF9TX3BiYWNrX3NpemUgPSAxOwog ICAgICBjaGFyX3R5cGUgX01fcGJhY2tbX1NfcGJhY2tfc2l6ZV07CiAgICAgIGNoYXJfdHlwZSog X01fcGJhY2tfY3VyX3NhdmU7CiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2tfZW5kX3NhdmU7CiAg ICAgIGJvb2wgX01fcGJhY2tfaW5pdDsKCgoKCiAgICAgIHZvaWQKICAgICAgX01fcGJhY2tfY3Jl YXRlKCkKICAgICAgewogICAgICAgIGlmICghX01fcGJhY2tfaW5pdCkKICAgICAgICAgIHsKICAg ICAgICAgICAgaW50X3R5cGUgX19kaXN0ID0gX01faW5fZW5kIC0gX01faW5fY3VyOwogICAgICAg ICAgICBpbnRfdHlwZSBfX2xlbiA9IG1pbihfU19wYmFja19zaXplLCBfX2Rpc3QpOwogICAgICAg ICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9wYmFjaywgX01faW5fY3VyLCBfX2xlbik7CiAgICAg ICAgICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gX01faW5fY3VyOwogICAgICAgICAgICBfTV9wYmFj a19lbmRfc2F2ZSA9IF9NX2luX2VuZDsKICAgICAgICAgICAgdGhpcy0+c2V0ZyhfTV9wYmFjaywg X01fcGJhY2ssIF9NX3BiYWNrICsgX19sZW4pOwogICAgICAgICAgICBfTV9wYmFja19pbml0ID0g dHJ1ZTsKICAgICAgICAgIH0KICAgICAgfQoKCgoKICAgICAgdm9pZAogICAgICBfTV9wYmFja19k ZXN0cm95KCkKICAgICAgewogICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAgICAgewoK ICAgICAgICAgICAgaW50X3R5cGUgX19vZmZfY3VyID0gX01faW5fY3VyIC0gX01fcGJhY2s7CgoK ICAgICAgICAgICAgaW50X3R5cGUgX19vZmZfZW5kID0gMDsKICAgICAgICAgICAgaW50X3R5cGUg X19wYmFja19sZW4gPSBfTV9pbl9lbmQgLSBfTV9wYmFjazsKICAgICAgICAgICAgaW50X3R5cGUg X19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fYnVmOwogICAgICAgICAgICBpZiAo X19wYmFja19sZW4gPiBfX3NhdmVfbGVuKQogICAgICAgICAgICAgIF9fb2ZmX2VuZCA9IF9fcGJh Y2tfbGVuIC0gX19zYXZlX2xlbjsKCiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9w YmFja19jdXJfc2F2ZSArIF9fb2ZmX2N1ciwKICAgICAgICAgICAgICAgICAgICAgICBfTV9wYmFj a19lbmRfc2F2ZSArIF9fb2ZmX2VuZCk7CiAgICAgICAgICAgIF9NX3BiYWNrX2N1cl9zYXZlID0g X19udWxsOwogICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9fbnVsbDsKICAgICAgICAg ICAgX01fcGJhY2tfaW5pdCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICB9CgoKCiAgICAgIHZv aWQKICAgICAgX01faW5fY3VyX21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9v bCBfX3Rlc3RvdXQgPSBfTV9vdXRfY3VyOwogICAgICAgIF9NX2luX2N1ciArPSBfX247CiAgICAg ICAgaWYgKF9fdGVzdG91dCAmJiBfTV9idWZfdW5pZmllZCkKICAgICAgICAgIF9NX291dF9jdXIg Kz0gX19uOwogICAgICB9CiMgMTk4ICIvdXNyL2luY2x1ZGUvZysrLXYzL3N0cmVhbWJ1ZiIgMwog ICAgICB2b2lkCiAgICAgIF9NX291dF9jdXJfbW92ZShvZmZfdHlwZSBfX24pCiAgICAgIHsKICAg ICAgICBib29sIF9fdGVzdGluID0gX01faW5fY3VyOwoKICAgICAgICBfTV9vdXRfY3VyICs9IF9f bjsKICAgICAgICBpZiAoX190ZXN0aW4gJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9p bl9jdXIgKz0gX19uOwogICAgICAgIGlmIChfTV9vdXRfY3VyID4gX01fb3V0X2VuZCkKICAgICAg ICAgIHsKICAgICAgICAgICAgX01fb3V0X2VuZCA9IF9NX291dF9jdXI7CgogICAgICAgICAgICBp ZiAoX190ZXN0aW4pCiAgICAgICAgICAgICAgX01faW5fZW5kICs9IF9fbjsKICAgICAgICAgIH0K ICAgICAgfQoKCgoKICAgICAgb2ZmX3R5cGUKICAgICAgX01fb3V0X2J1Zl9zaXplKCkKICAgICAg ewogICAgICAgIG9mZl90eXBlIF9fcmV0ID0gMDsKICAgICAgICBpZiAoX01fb3V0X2N1cikKICAg ICAgICAgIHsKCiAgICAgICAgICAgIGlmIChfTV9vdXRfYmVnID09IF9NX2J1ZikKICAgICAgICAg ICAgICBfX3JldCA9IF9NX291dF9iZWcgKyBfTV9idWZfc2l6ZSAtIF9NX291dF9jdXI7CgogICAg ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfZW5kIC0gX01fb3V0X2N1 cjsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgcHVibGljOgog ICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19zdHJlYW1idWYoKQogICAgICB7CiAgICAgICAgX01f YnVmX3VuaWZpZWQgPSBmYWxzZTsKICAgICAgICBfTV9idWZfc2l6ZSA9IDA7CiAgICAgICAgX01f YnVmX3NpemVfb3B0ID0gMDsKICAgICAgICBfTV9tb2RlID0gaW9zX2Jhc2U6Om9wZW5tb2RlKDAp OwogICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IGZhbHNlOwogICAgICB9CgoKICAgICAgbG9j YWxlCiAgICAgIHB1YmltYnVlKGNvbnN0IGxvY2FsZSAmX19sb2MpCiAgICAgIHsKICAgICAgICBs b2NhbGUgX190bXAodGhpcy0+Z2V0bG9jKCkpOwogICAgICAgIHRoaXMtPmltYnVlKF9fbG9jKTsK ICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIGxvY2FsZQogICAgICBnZXRsb2Mo KSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGVfaW5pdCkKICAgICAgICAg IHJldHVybiBfTV9idWZfbG9jYWxlOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBsb2Nh bGUoKTsKICAgICAgfQoKCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAgIHB1YnNldGJ1Zihj aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNldGJ1 ZihfX3MsIF9fbik7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtvZmYob2ZmX3R5cGUg X19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAgICAgIGlvc19iYXNl OjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7 IHJldHVybiB0aGlzLT5zZWVrb2ZmKF9fb2ZmLCBfX3dheSwgX19tb2RlKTsgfQoKICAgICAgcG9z X3R5cGUKICAgICAgcHVic2Vla3Bvcyhwb3NfdHlwZSBfX3NwLAogICAgICAgICAgICAgICAgIGlv c19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQog ICAgICB7IHJldHVybiB0aGlzLT5zZWVrcG9zKF9fc3AsIF9fbW9kZSk7IH0KCiAgICAgIGludAog ICAgICBwdWJzeW5jKCkgeyByZXR1cm4gdGhpcy0+c3luYygpOyB9CgoKCiAgICAgIHN0cmVhbXNp emUKICAgICAgaW5fYXZhaWwoKQogICAgICB7CiAgICAgICAgc3RyZWFtc2l6ZSBfX3JldDsKICAg ICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAgIHsK ICAgICAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgaW50X3R5cGUgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fcGJhY2tf Y3VyX3NhdmU7CiAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX3BiYWNrX2xlbiA9IF9NX2luX2N1 ciAtIF9NX3BiYWNrOwogICAgICAgICAgICAgICAgX19yZXQgPSBfX3NhdmVfbGVuIC0gX19wYmFj a19sZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgX19y ZXQgPSB0aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigpOwogICAgICAgICAgfQogICAgICAgIGVs c2UKICAgICAgICAgIF9fcmV0ID0gdGhpcy0+c2hvd21hbnljKCk7CiAgICAgICAgcmV0dXJuIF9f cmV0OwogICAgICB9CgogICAgICBpbnRfdHlwZQogICAgICBzbmV4dGMoKQogICAgICB7CiAgICAg ICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgcmV0dXJuICh0 aGlzLT5zYnVtcGMoKSA9PSBfX2VvZiA/IF9fZW9mIDogdGhpcy0+c2dldGMoKSk7CiAgICAgIH0K CiAgICAgIGludF90eXBlCiAgICAgIHNidW1wYygpOwoKICAgICAgaW50X3R5cGUKICAgICAgc2dl dGMoKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgICAgaWYgKF9NX2luX2N1 ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBl Ojp0b19pbnRfdHlwZSgqKHRoaXMtPmdwdHIoKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9f cmV0ID0gdGhpcy0+dW5kZXJmbG93KCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9Cgog ICAgICBzdHJlYW1zaXplCiAgICAgIHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f bikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNnZXRuKF9fcywgX19uKTsgfQoKCiAgICAgIGludF90 eXBlCiAgICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKTsKCiAgICAgIGludF90eXBlCiAgICAg IHN1bmdldGMoKTsKCgogICAgICBpbnRfdHlwZQogICAgICBzcHV0YyhjaGFyX3R5cGUgX19jKTsK CiAgICAgIHN0cmVhbXNpemUKICAgICAgc3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVh bXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT54c3B1dG4oX19zLCBfX24pOyB9CgogICAg cHJvdGVjdGVkOgogICAgICBiYXNpY19zdHJlYW1idWYoKQogICAgICA6IF9NX2J1ZihfX251bGwp LCBfTV9idWZfc2l6ZSgwKSwKICAgICAgX01fYnVmX3NpemVfb3B0KHN0YXRpY19jYXN0PGludF90 eXBlPig4MTkyKSksIF9NX2J1Zl91bmlmaWVkKGZhbHNlKSwKICAgICAgX01faW5fYmVnKDApLCBf TV9pbl9jdXIoMCksIF9NX2luX2VuZCgwKSwgX01fb3V0X2JlZygwKSwgX01fb3V0X2N1cigwKSwK ICAgICAgX01fb3V0X2VuZCgwKSwgX01fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUoMCkpLCBfTV9i dWZfbG9jYWxlKGxvY2FsZSgpKSwKICAgICAgX01fYnVmX2xvY2FsZV9pbml0KGZhbHNlKSwgX01f cGJhY2tfY3VyX3NhdmUoMCksIF9NX3BiYWNrX2VuZF9zYXZlKDApLAogICAgICBfTV9wYmFja19p bml0KGZhbHNlKQogICAgICB7IH0KCgogICAgICBjaGFyX3R5cGUqCiAgICAgIGViYWNrKCkgY29u c3QgeyByZXR1cm4gX01faW5fYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGdwdHIoKSBj b25zdCB7IHJldHVybiBfTV9pbl9jdXI7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZWdwdHIo KSBjb25zdCB7IHJldHVybiBfTV9pbl9lbmQ7IH0KCiAgICAgIHZvaWQKICAgICAgZ2J1bXAoaW50 IF9fbikgeyBfTV9pbl9jdXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAgICAgIHNldGcoY2hhcl90 eXBlKiBfX2diZWcsIGNoYXJfdHlwZSogX19nbmV4dCwgY2hhcl90eXBlKiBfX2dlbmQpCiAgICAg IHsKICAgICAgICBfTV9pbl9iZWcgPSBfX2diZWc7CiAgICAgICAgX01faW5fY3VyID0gX19nbmV4 dDsKICAgICAgICBfTV9pbl9lbmQgPSBfX2dlbmQ7CiAgICAgICAgaWYgKCEoX01fbW9kZSAmIGlv c19iYXNlOjppbikgJiYgX19nYmVnICYmIF9fZ25leHQgJiYgX19nZW5kKQogICAgICAgICAgX01f bW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6aW47CiAgICAgIH0KCgogICAgICBjaGFyX3R5cGUq CiAgICAgIHBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2JlZzsgfQoKICAgICAgY2hhcl90 eXBlKgogICAgICBwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2N1cjsgfQoKICAgICAgY2hh cl90eXBlKgogICAgICBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9lbmQ7IH0KCiAgICAg IHZvaWQKICAgICAgcGJ1bXAoaW50IF9fbikgeyBfTV9vdXRfY3VyICs9IF9fbjsgfQoKICAgICAg dm9pZAogICAgICBzZXRwKGNoYXJfdHlwZSogX19wYmVnLCBjaGFyX3R5cGUqIF9fcGVuZCkKICAg ICAgewogICAgICAgIF9NX291dF9iZWcgPSBfTV9vdXRfY3VyID0gX19wYmVnOwogICAgICAgIF9N X291dF9lbmQgPSBfX3BlbmQ7CiAgICAgICAgaWYgKCEoX01fbW9kZSAmIGlvc19iYXNlOjpvdXQp ICYmIF9fcGJlZyAmJiBfX3BlbmQpCiAgICAgICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19i YXNlOjpvdXQ7CiAgICAgIH0KCgoKICAgICAgdmlydHVhbCB2b2lkCiAgICAgIGltYnVlKGNvbnN0 IGxvY2FsZSYgX19sb2MpCiAgICAgIHsKICAgICAgICBfTV9idWZfbG9jYWxlX2luaXQgPSB0cnVl OwogICAgICAgIGlmIChfTV9idWZfbG9jYWxlICE9IF9fbG9jKQogICAgICAgICAgX01fYnVmX2xv Y2FsZSA9IF9fbG9jOwogICAgICB9CgoKICAgICAgdmlydHVhbCBiYXNpY19zdHJlYW1idWY8Y2hh cl90eXBlLF9UcmFpdHM+KgogICAgICBzZXRidWYoY2hhcl90eXBlKiwgc3RyZWFtc2l6ZSkKICAg ICAgeyByZXR1cm4gdGhpczsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVrb2Zm KG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2RpciwKICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Bl bm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiBwb3Nf dHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtw b3MocG9zX3R5cGUsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9zX2Jhc2U6 OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEp KTsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgc3luYygpIHsgcmV0dXJuIDA7IH0KCgogICAg ICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc2hvd21hbnljKCkgeyByZXR1cm4gMDsgfQoKICAg ICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFt c2l6ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1bmRlcmZsb3coKQogICAg ICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCiAgICAgIHZpcnR1YWwgaW50X3R5cGUK ICAgICAgdWZsb3coKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlw ZTo6ZW9mKCk7CiAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0aGlzLT51bmRlcmZsb3coKSA9PSBf X3JldDsKICAgICAgICBib29sIF9fdGVzdHBlbmRpbmcgPSBfTV9pbl9jdXIgJiYgX01faW5fY3Vy IDwgX01faW5fZW5kOwogICAgICAgIGlmICghX190ZXN0ZW9mICYmIF9fdGVzdHBlbmRpbmcpCiAg ICAgICAgICB7CiAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpf TV9pbl9jdXIpOwogICAgICAgICAgICArK19NX2luX2N1cjsKICAgICAgICAgICAgaWYgKF9NX2J1 Zl91bmlmaWVkICYmIF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgICAgICsrX01f b3V0X2N1cjsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCgogICAg ICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHBiYWNrZmFpbChpbnRfdHlwZSA9IHRyYWl0c190eXBl Ojplb2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CgoKICAgICAgdmly dHVhbCBzdHJlYW1zaXplCiAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFt c2l6ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBvdmVyZmxvdyhpbnRfdHlw ZSA9IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigp OyB9CiMgNDgwICIvdXNyL2luY2x1ZGUvZysrLXYzL3N0cmVhbWJ1ZiIgMwogICAgcHJpdmF0ZToK ICAgICAgYmFzaWNfc3RyZWFtYnVmKGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKSB7IH07CgogICAg ICBfX3N0cmVhbWJ1Zl90eXBlJgogICAgICBvcGVyYXRvcj0oY29uc3QgX19zdHJlYW1idWZfdHlw ZSYpIHsgcmV0dXJuICp0aGlzOyB9OwoKICAgIH07Cn0KCgoKCgojIDEgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zdHJlYW1idWYudGNjIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0cmVhbWJ1Zi50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmVh bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFy VCwgX1RyYWl0cz46Ol9TX3BiYWNrX3NpemU7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U cmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Ogog ICAgc2J1bXBjKCkKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9pbl9j dXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgIHsKICAgICAgICAgIGNoYXJfdHlw ZSBfX2MgPSAqKHRoaXMtPmdwdHIoKSk7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgxKTsKICAg ICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYyk7CiAgICAgICAgfQog ICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT51ZmxvdygpOwogICAgICByZXR1cm4gX19y ZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQog ICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3B1dGJhY2tjKGNoYXJf dHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBib29sIF9fdGVzdHBv cyA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7CiAgICAgIGJvb2wgX190ZXN0 bmUgPSBfTV9pbl9jdXIgJiYgIXRyYWl0c190eXBlOjplcShfX2MsIHRoaXMtPmdwdHIoKVstMV0p OwogICAgICBpZiAoIV9fdGVzdHBvcyB8fCBfX3Rlc3RuZSkKICAgICAgICBfX3JldCA9IHBiYWNr ZmFpbCh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7CiAgICAgIGVsc2UKICAgICAgICB7 CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190 eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0cigpKTsKICAgICAgICB9CiAgICAgIHJldHVybiBf X3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBl CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzdW5nZXRjKCkKICAg IHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fYmVn IDwgX01faW5fY3VyKQogICAgICAgIHsKICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAg ICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwogICAg ICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+cGJhY2tmYWlsKCk7CiAgICAg IHJldHVybiBfX3JldDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh aXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAg IHNwdXRjKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBp ZiAoX01fb3V0X2J1Zl9zaXplKCkpCiAgICAgICAgewogICAgICAgICAgKl9NX291dF9jdXIgPSBf X2M7CiAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0 c190eXBlOjp0b19pbnRfdHlwZShfX2MpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9f cmV0ID0gdGhpcy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAg ICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U cmFpdHM+OjoKICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7 CiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAg ICAgICAgewogICAgICAgICAgc2l6ZV90IF9fYnVmX2xlbiA9IF9NX2luX2VuZCAtIF9NX2luX2N1 cjsKICAgICAgICAgIGlmIChfX2J1Zl9sZW4gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgc2l6ZV90IF9fcmVtYWluaW5nID0gX19uIC0gX19yZXQ7CiAgICAgICAgICAgICAgc2l6ZV90 IF9fbGVuID0gbWluKF9fYnVmX2xlbiwgX19yZW1haW5pbmcpOwogICAgICAgICAgICAgIHRyYWl0 c190eXBlOjpjb3B5KF9fcywgX01faW5fY3VyLCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQg Kz0gX19sZW47CiAgICAgICAgICAgICAgX19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX2lu X2N1cl9tb3ZlKF9fbGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9f bikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPnVmbG93 KCk7CiAgICAgICAgICAgICAgaWYgKF9fYyAhPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcysrLCB0 cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAgICAgICAgICAgICArK19fcmV0 OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3Ry ZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNwdXRu KGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFt c2l6ZSBfX3JldCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAgICAg ICAgICBvZmZfdHlwZSBfX2J1Zl9sZW4gPSBfTV9vdXRfYnVmX3NpemUoKTsKICAgICAgICAgIGlm IChfX2J1Zl9sZW4gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19y ZW1haW5pbmcgPSBfX24gLSBfX3JldDsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX2xlbiA9IG1p bihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29w eShfTV9vdXRfY3VyLCBfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX2xlbjsK ICAgICAgICAgICAgICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAgX01fb3V0X2N1cl9tb3Zl KF9fbGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAg ICAgICAgewogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93KHRyYWl0 c190eXBlOjp0b19pbnRfdHlwZSgqX19zKSk7CiAgICAgICAgICAgICAgaWYgKF9fYyAhPSB0cmFp dHNfdHlwZTo6ZW9mKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX19y ZXQ7CiAgICAgICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhi YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAgICBi YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAg ICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpCiAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwoKICAgICAgc3Ry ZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHN0cmVhbXNpemUgX19idWZzaXplID0gX19zYmluLT5p bl9hdmFpbCgpOwogICAgICBzdHJlYW1zaXplIF9feHRyY3Q7CiAgICAgIGJvb2wgX190ZXN0cHV0 ID0gX19zYm91dC0+X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAgIHRyeQogICAgICAgIHsK ICAgICAgICAgIHdoaWxlIChfX3Rlc3RwdXQgJiYgX19idWZzaXplICE9IC0xKQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgX194dHJjdCA9IF9fc2JvdXQtPnNwdXRuKF9fc2Jpbi0+Z3B0cigp LCBfX2J1ZnNpemUpOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9feHRyY3Q7CiAgICAgICAgICAg ICAgX19zYmluLT5fTV9pbl9jdXJfbW92ZShfX3h0cmN0KTsKICAgICAgICAgICAgICBpZiAoX194 dHJjdCA9PSBfX2J1ZnNpemUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlm IChfX3NiaW4tPnNnZXRjKCkgPT0gX1RyYWl0czo6ZW9mKCkpCiAgICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICAgIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp CiAgICAgICAgewogICAgICAgICAgX19pb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwog ICAgICAgICAgaWYgKChfX2lvcy5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgIT0g MCkKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9 CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1idWY8Y2hhcj47CiAgZXh0 ZXJuIHRlbXBsYXRlCiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19p b3M8Y2hhcj4mLCBiYXNpY19zdHJlYW1idWY8Y2hhcj4qLAogICAgICAgICAgICAgICAgICAgICAg YmFzaWNfc3RyZWFtYnVmPGNoYXI+Kik7CgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19z dHJlYW1idWY8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBzdHJlYW1zaXplCiAgICBf X2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8d2NoYXJfdD4mLCBiYXNpY19zdHJlYW1idWY8d2No YXJfdD4qLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+Kik7 Cn0KIyA0OTQgIi91c3IvaW5jbHVkZS9nKystdjMvc3RyZWFtYnVmIiAyIDMKIyA1MSAiL3Vzci9p bmNsdWRlL2crKy12My9pb3MiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNp Y19pb3MuaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIg MwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgiIDEg MwojIDQyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgiIDMK Cm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRv cjxpbnB1dF9pdGVyYXRvcl90YWcsIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUs CiAgICAgICAgICAgICAgICAgICAgICBfQ2hhclQqLCBfQ2hhclQmPgogICAgewogICAgcHVibGlj OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMg dHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50 X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3Ry ZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ IGlzdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgoKCgoKCgoKICAgICAgbXV0YWJsZSBzdHJlYW1i dWZfdHlwZSogX01fc2J1ZjsKICAgICAgaW50X3R5cGUgX01fYzsKCiAgICBwdWJsaWM6CiAgICAg IGlzdHJlYW1idWZfaXRlcmF0b3IoKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZigwKSwgX01fYygt MikgeyB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSB0aHJv dygpCiAgICAgIDogX01fc2J1ZihfX3MucmRidWYoKSksIF9NX2MoLTIpIHsgfQoKICAgICAgaXN0 cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdygpCiAgICAgIDogX01f c2J1ZihfX3MpLCBfTV9jKC0yKSB7IH0KCgogICAgICBjaGFyX3R5cGUKICAgICAgb3BlcmF0b3Iq KCkgY29uc3QKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfTV9nZXQo KSk7IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAg ICB7CiAgICAgICAgaWYgKF9NX3NidWYgJiYgX01fc2J1Zi0+c2J1bXBjKCkgPT0gdHJhaXRzX3R5 cGU6OmVvZigpKQogICAgICAgICAgX01fc2J1ZiA9IDA7CiAgICAgICAgZWxzZQogICAgICAgICAg X01fYyA9IC0yOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgaXN0cmVhbWJ1 Zl9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIGlzdHJlYW1i dWZfaXRlcmF0b3IgX19vbGQgPSAqdGhpczsKICAgICAgICBpZiAoX01fc2J1ZiAmJiAoX19vbGQu X01fYyA9IF9NX3NidWYtPnNidW1wYygpKSA9PSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgICAg ICBfTV9zYnVmID0gMDsKICAgICAgICBlbHNlCiAgICAgICAgICBfTV9jID0gLTI7CiAgICAgICAg cmV0dXJuIF9fb2xkOwogICAgICB9CgoKCgogICAgICBib29sCiAgICAgIGVxdWFsKGNvbnN0IGlz dHJlYW1idWZfaXRlcmF0b3ImIF9fYikgY29uc3QKICAgICAgewogICAgICAgIGNvbnN0IGludF90 eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGJvb2wgX190aGlzZW9mID0g X01fZ2V0KCkgPT0gX19lb2Y7CiAgICAgICAgYm9vbCBfX2Jlb2YgPSBfX2IuX01fZ2V0KCkgPT0g X19lb2Y7CiAgICAgICAgcmV0dXJuIChfX3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9m ICYmICFfX2Jlb2YpKTsKICAgICAgfQoKCiAgICBwcml2YXRlOgogICAgICBpbnRfdHlwZQogICAg ICBfTV9nZXQoKSBjb25zdAogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNf dHlwZTo6ZW9mKCk7CiAgICAgICAgaWYgKF9NX3NidWYpCiAgICAgICAgICB7CiAgICAgICAgICAg IGlmIChfTV9jICE9IHN0YXRpY19jYXN0PGludF90eXBlPigtMikpCiAgICAgICAgICAgICAgX19y ZXQgPSBfTV9jOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgaWYgKChfX3JldCA9IF9N X3NidWYtPnNnZXRjKCkpID09IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgICAgICAgICAgIF9N X3NidWYgPSAwOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQogICAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQs IF9UcmFpdHM+JiBfX2EsCiAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8 X0NoYXJULCBfVHJhaXRzPiYgX19iKQogICAgeyByZXR1cm4gX19hLmVxdWFsKF9fYik7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFp dHM+JiBfX2EsCiAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU LCBfVHJhaXRzPiYgX19iKQogICAgeyByZXR1cm4gIV9fYS5lcXVhbChfX2IpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIG9zdHJlYW1i dWZfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZv aWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9D aGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAg dHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsK ICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gb3N0cmVhbV90eXBl OwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBib29s IF9NX2ZhaWxlZDsKCiAgICBwdWJsaWM6CiAgICAgIGlubGluZQogICAgICBvc3RyZWFtYnVmX2l0 ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zKSB0aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zLnJk YnVmKCkpLCBfTV9mYWlsZWQoIV9NX3NidWYpIHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRv cihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zKSwgX01f ZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9w ZXJhdG9yPShfQ2hhclQgX19jKTsKCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9w ZXJhdG9yKigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIG9zdHJlYW1i dWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB0aHJvdygpCiAgICAgIHsgcmV0dXJu ICp0aGlzOyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkg dGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgYm9vbAogICAgICBmYWlsZWQo KSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX2ZhaWxlZDsgfQogICAgfTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIG9zdHJl YW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYKICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8 X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I9KF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmICgh X01fZmFpbGVkICYmCiAgICAgICAgICBfVHJhaXRzOjplcV9pbnRfdHlwZShfTV9zYnVmLT5zcHV0 YyhfX2MpLCBfVHJhaXRzOjplb2YoKSkpCiAgICAgICAgX01fZmFpbGVkID0gdHJ1ZTsKICAgICAg cmV0dXJuICp0aGlzOwogICAgfQp9CiMgNDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNp Y19pb3MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMu aCIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMK CgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvY3djdHlwZSIgMSAzCiMgNDggIi91c3IvaW5jbHVk ZS9nKystdjMvY3djdHlwZSIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDEgMwoj IDM1ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRl L3djdHlwZS5oIiAyIDMKIyA2MSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCnR5cGVkZWYgdW5z aWduZWQgbG9uZyBpbnQgd2N0eXBlX3Q7CiMgNzkgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwpl bnVtCnsKICBfX0lTd3VwcGVyID0gMCwKICBfX0lTd2xvd2VyID0gMSwKICBfX0lTd2FscGhhID0g MiwKICBfX0lTd2RpZ2l0ID0gMywKICBfX0lTd3hkaWdpdCA9IDQsCiAgX19JU3dzcGFjZSA9IDUs CiAgX19JU3dwcmludCA9IDYsCiAgX19JU3dncmFwaCA9IDcsCiAgX19JU3dibGFuayA9IDgsCiAg X19JU3djbnRybCA9IDksCiAgX19JU3dwdW5jdCA9IDEwLAogIF9fSVN3YWxudW0gPSAxMSwKCiAg X0lTd3VwcGVyID0gKChfX0lTd3VwcGVyKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBl cikpIDw8IDI0KSA6ICgoX19JU3d1cHBlcikgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd3Vw cGVyKSkgPDwgOCkgOiAoKF9fSVN3dXBwZXIpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1 cHBlcikpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA+PiAyNCkpKSksCiAg X0lTd2xvd2VyID0gKChfX0lTd2xvd2VyKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dl cikpIDw8IDI0KSA6ICgoX19JU3dsb3dlcikgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xv d2VyKSkgPDwgOCkgOiAoKF9fSVN3bG93ZXIpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3ds b3dlcikpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA+PiAyNCkpKSksCiAg X0lTd2FscGhhID0gKChfX0lTd2FscGhhKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBo YSkpIDw8IDI0KSA6ICgoX19JU3dhbHBoYSkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2Fs cGhhKSkgPDwgOCkgOiAoKF9fSVN3YWxwaGEpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dh bHBoYSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA+PiAyNCkpKSksCiAg X0lTd2RpZ2l0ID0gKChfX0lTd2RpZ2l0KSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdp dCkpIDw8IDI0KSA6ICgoX19JU3dkaWdpdCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2Rp Z2l0KSkgPDwgOCkgOiAoKF9fSVN3ZGlnaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dk aWdpdCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA+PiAyNCkpKSksCiAg X0lTd3hkaWdpdCA9ICgoX19JU3d4ZGlnaXQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hk aWdpdCkpIDw8IDI0KSA6ICgoX19JU3d4ZGlnaXQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19J U3d4ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3d4ZGlnaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAo X19JU3d4ZGlnaXQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDI0 KSkpKSwKICBfSVN3c3BhY2UgPSAoKF9fSVN3c3BhY2UpIDwgOCA/IChpbnQpICgoMVVMIDw8IChf X0lTd3NwYWNlKSkgPDwgMjQpIDogKChfX0lTd3NwYWNlKSA8IDE2ID8gKGludCkgKCgxVUwgPDwg KF9fSVN3c3BhY2UpKSA8PCA4KSA6ICgoX19JU3dzcGFjZSkgPCAyNCA/IChpbnQpICgoMVVMIDw8 IChfX0lTd3NwYWNlKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpID4+IDI0 KSkpKSwKICBfSVN3cHJpbnQgPSAoKF9fSVN3cHJpbnQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChf X0lTd3ByaW50KSkgPDwgMjQpIDogKChfX0lTd3ByaW50KSA8IDE2ID8gKGludCkgKCgxVUwgPDwg KF9fSVN3cHJpbnQpKSA8PCA4KSA6ICgoX19JU3dwcmludCkgPCAyNCA/IChpbnQpICgoMVVMIDw8 IChfX0lTd3ByaW50KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpID4+IDI0 KSkpKSwKICBfSVN3Z3JhcGggPSAoKF9fSVN3Z3JhcGgpIDwgOCA/IChpbnQpICgoMVVMIDw8IChf X0lTd2dyYXBoKSkgPDwgMjQpIDogKChfX0lTd2dyYXBoKSA8IDE2ID8gKGludCkgKCgxVUwgPDwg KF9fSVN3Z3JhcGgpKSA8PCA4KSA6ICgoX19JU3dncmFwaCkgPCAyNCA/IChpbnQpICgoMVVMIDw8 IChfX0lTd2dyYXBoKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpID4+IDI0 KSkpKSwKICBfSVN3YmxhbmsgPSAoKF9fSVN3YmxhbmspIDwgOCA/IChpbnQpICgoMVVMIDw8IChf X0lTd2JsYW5rKSkgPDwgMjQpIDogKChfX0lTd2JsYW5rKSA8IDE2ID8gKGludCkgKCgxVUwgPDwg KF9fSVN3YmxhbmspKSA8PCA4KSA6ICgoX19JU3dibGFuaykgPCAyNCA/IChpbnQpICgoMVVMIDw8 IChfX0lTd2JsYW5rKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpID4+IDI0 KSkpKSwKICBfSVN3Y250cmwgPSAoKF9fSVN3Y250cmwpIDwgOCA/IChpbnQpICgoMVVMIDw8IChf X0lTd2NudHJsKSkgPDwgMjQpIDogKChfX0lTd2NudHJsKSA8IDE2ID8gKGludCkgKCgxVUwgPDwg KF9fSVN3Y250cmwpKSA8PCA4KSA6ICgoX19JU3djbnRybCkgPCAyNCA/IChpbnQpICgoMVVMIDw8 IChfX0lTd2NudHJsKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpID4+IDI0 KSkpKSwKICBfSVN3cHVuY3QgPSAoKF9fSVN3cHVuY3QpIDwgOCA/IChpbnQpICgoMVVMIDw8IChf X0lTd3B1bmN0KSkgPDwgMjQpIDogKChfX0lTd3B1bmN0KSA8IDE2ID8gKGludCkgKCgxVUwgPDwg KF9fSVN3cHVuY3QpKSA8PCA4KSA6ICgoX19JU3dwdW5jdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8 IChfX0lTd3B1bmN0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpID4+IDI0 KSkpKSwKICBfSVN3YWxudW0gPSAoKF9fSVN3YWxudW0pIDwgOCA/IChpbnQpICgoMVVMIDw8IChf X0lTd2FsbnVtKSkgPDwgMjQpIDogKChfX0lTd2FsbnVtKSA8IDE2ID8gKGludCkgKCgxVUwgPDwg KF9fSVN3YWxudW0pKSA8PCA4KSA6ICgoX19JU3dhbG51bSkgPCAyNCA/IChpbnQpICgoMVVMIDw8 IChfX0lTd2FsbnVtKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpID4+IDI0 KSkpKQp9OwoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCmV4dGVybiBpbnQgaXN3YWxudW0gKHdpbnRf dCBfX3djKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGlzd2FscGhhICh3aW50X3QgX193Yykg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc3djbnRybCAod2ludF90IF9fd2MpIHRocm93ICgpOwoK CgpleHRlcm4gaW50IGlzd2RpZ2l0ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgaXN3Z3JhcGggKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3bG93 ZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd3ByaW50ICh3aW50X3Qg X193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3B1bmN0ICh3aW50X3QgX193YykgdGhy b3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3NwYWNlICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoK CgpleHRlcm4gaW50IGlzd3VwcGVyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4g aW50IGlzd3hkaWdpdCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgaXN3 YmxhbmsgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKIyAxNzggIi91c3IvaW5jbHVkZS93Y3R5cGUu aCIgMwpleHRlcm4gd2N0eXBlX3Qgd2N0eXBlIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHkpIHRo cm93ICgpOwoKCgpleHRlcm4gaW50IGlzd2N0eXBlICh3aW50X3QgX193Yywgd2N0eXBlX3QgX19k ZXNjKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB1bnNpZ25lZCBpbnQgKl9fY3R5cGUzMl9iOwojIDI0 OSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCnR5cGVkZWYgX19jb25zdCBfX2ludDMyX3QgKndj dHJhbnNfdDsKCgpleHRlcm4gd2ludF90IHRvd2xvd2VyICh3aW50X3QgX193YykgdGhyb3cgKCk7 CgoKZXh0ZXJuIHdpbnRfdCB0b3d1cHBlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGNvbnN0IHdpbnRfdCAqX19jdHlwZTMyX3RvbG93ZXI7CmV4dGVybiBjb25zdCB3aW50X3Qg Kl9fY3R5cGUzMl90b3VwcGVyOwojIDI3NSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCn0KIyAy ODggIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwpleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIHdjdHJh bnNfdCB3Y3RyYW5zIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHkpIHRocm93ICgpOwoKCmV4dGVy biB3aW50X3QgdG93Y3RyYW5zICh3aW50X3QgX193Yywgd2N0cmFuc190IF9fZGVzYykgdGhyb3cg KCk7CgoKCgoKCgpleHRlcm4gaW50IF9faXN3YWxudW1fbCAod2ludF90IF9fd2MsIF9fbG9jYWxl X3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgX19pc3dhbHBoYV9sICh3aW50 X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX2lz d2NudHJsX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGludCBfX2lzd2RpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxl KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2dyYXBoX2wgKHdpbnRfdCBfX3djLCBfX2xv Y2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dsb3dlcl9sICh3 aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBf X2lzd3ByaW50X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBpbnQgX19pc3dwdW5jdF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xv Y2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3c3BhY2VfbCAod2ludF90IF9fd2Ms IF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3VwcGVy X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgX19pc3d4ZGlnaXRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRo cm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd2JsYW5rX2wgKHdpbnRfdCBfX3djLCBfX2xvY2Fs ZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjdHlwZV90IF9fd2N0eXBlX2wgKF9f Y29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2NhbGVfdCBfX2xvY2FsZSkKICAgICB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBfX2lzd2N0eXBlX2wgKHdpbnRfdCBfX3djLCB3Y3R5cGVfdCBfX2Rl c2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gd2lu dF90IF9fdG93bG93ZXJfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93 ICgpOwoKCmV4dGVybiB3aW50X3QgX190b3d1cHBlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVf dCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y3RyYW5zX3QgX193Y3RyYW5zX2wgKF9f Y29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2NhbGVfdCBfX2xvY2FsZSkKICAgICB0aHJvdyAo KTsKCgpleHRlcm4gd2ludF90IF9fdG93Y3RyYW5zX2wgKHdpbnRfdCBfX3djLCB3Y3RyYW5zX3Qg X19kZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2NhbGUp IHRocm93ICgpOwoKCgp9CiMgNTMgIi91c3IvaW5jbHVkZS9nKystdjMvY3djdHlwZSIgMiAzCiMg NzcgIi91c3IvaW5jbHVkZS9nKystdjMvY3djdHlwZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2lu ZyA6OndpbnRfdDsKCiAgdXNpbmcgOjp3Y3R5cGVfdDsKICB1c2luZyA6OndjdHJhbnNfdDsKCiAg dXNpbmcgOjppc3dhbG51bTsKICB1c2luZyA6Omlzd2FscGhhOwogIHVzaW5nIDo6aXN3Ymxhbms7 CiAgdXNpbmcgOjppc3djbnRybDsKICB1c2luZyA6Omlzd2RpZ2l0OwogIHVzaW5nIDo6aXN3Z3Jh cGg7CiAgdXNpbmcgOjppc3dsb3dlcjsKICB1c2luZyA6Omlzd3ByaW50OwogIHVzaW5nIDo6aXN3 cHJpbnQ7CiAgdXNpbmcgOjppc3dwdW5jdDsKICB1c2luZyA6Omlzd3NwYWNlOwogIHVzaW5nIDo6 aXN3dXBwZXI7CiAgdXNpbmcgOjppc3d4ZGlnaXQ7CiAgdXNpbmcgOjppc3djdHlwZTsKICB1c2lu ZyA6OnRvd2xvd2VyOwogIHVzaW5nIDo6dG93dXBwZXI7CiAgdXNpbmcgOjp0b3djdHJhbnM7CiAg dXNpbmcgOjp3Y3RyYW5zOwogIHVzaW5nIDo6d2N0eXBlOwp9CiMgNDcgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMv aW9zIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIg MiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA2MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs ZV9mYWNldHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUv Yml0cy9jdHlwZV9iYXNlLmgiIDEgMwojIDUwICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMt bGludXgtZ251L2JpdHMvY3R5cGVfYmFzZS5oIiAzCiAgc3RydWN0IGN0eXBlX2Jhc2UKICB7Cgog ICAgdHlwZWRlZiBjb25zdCBpbnQqIF9fdG9fdHlwZTsKCgoKICAgIHR5cGVkZWYgdW5zaWduZWQg c2hvcnQgbWFzazsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHVwcGVyID0gX0lTdXBwZXI7CiAgICBz dGF0aWMgY29uc3QgbWFzayBsb3dlciA9IF9JU2xvd2VyOwogICAgc3RhdGljIGNvbnN0IG1hc2sg YWxwaGEgPSBfSVNhbHBoYTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGRpZ2l0ID0gX0lTZGlnaXQ7 CiAgICBzdGF0aWMgY29uc3QgbWFzayB4ZGlnaXQgPSBfSVN4ZGlnaXQ7CiAgICBzdGF0aWMgY29u c3QgbWFzayBzcGFjZSA9IF9JU3NwYWNlOwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSBf SVNwcmludDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGdyYXBoID0gX0lTZ3JhcGg7CiAgICBzdGF0 aWMgY29uc3QgbWFzayBjbnRybCA9IF9JU2NudHJsOwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHVu Y3QgPSBfSVNwdW5jdDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVtID0gX0lTYWxudW07CiAg fTsKIyA2MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfX2N0eXBlX2Fic3RyYWN0X2Jh c2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGN0eXBlX2Jhc2UKICAgIHsKICAgIHB1 YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGJvb2wKICAgICAg aXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X2lzKF9fbSwgX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBpcyhjb25zdCBj aGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSAqX19oaSwgbWFzayAqX192ZWMpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9faGksIF9fdmVjKTsgfQoKICAgICAg Y29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUq IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ ZG9fc2Nhbl9pcyhfX20sIF9fbG8sIF9faGkpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAg ICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJf dHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9ub3QoX19tLCBf X2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlIF9f YykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2MpOyB9CgogICAgICBj b25zdCBjaGFyX3R5cGUqCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFy X3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19sbywg X19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19jKTsgfQoKICAgICAgY29uc3Qg Y2hhcl90eXBlKgogICAgICB0b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBl KiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fbG8sIF9faGkp OyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXIqCiAgICAgIHdp ZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX190bykg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19sbywgX19oaSwgX190byk7IH0K CiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQoKICAg ICAgY29uc3QgY2hhcl90eXBlKgogICAgICBuYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBj b25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciAq X190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fbG8sIF9faGksIF9f ZGZhdWx0LCBfX3RvKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19j dHlwZV9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKTogbG9jYWxlOjpmYWNldChfX3Jl ZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jdHlwZV9hYnN0cmFjdF9iYXNlKCkgeyB9 CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2Mp IGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhj b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAg bWFzayogX192ZWMpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgog ICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAg ICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJf dHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z dCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlw ZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3Rv dXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsK CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25z dCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihj aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAg dmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3QgPSAwOwoKICAgICAg dmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25z dCBjaGFyKiBfX2hpLAogICAgICAgICAgICAgICBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QgPSAw OwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19k ZmF1bHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk b19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAg ICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdCA9IDA7CiAg ICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGUgOiBwdWJs aWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAg IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjdHlwZTo6 bWFzayBtYXNrOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAog ICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8X0No YXJUPihfX3JlZnMpIHsgfQoKICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlw ZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUg X19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhj b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMp IGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMo bWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj b25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdCht YXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBj aGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f dG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90 eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hh cl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAg ZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFyIF9fYykgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9f bG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZp cnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25z dDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3Qg Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBj aGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjdHlwZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBs YXRlPD4KICAgIGNsYXNzIGN0eXBlPGNoYXI+IDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFz ZTxjaGFyPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsK CiAgICBwcm90ZWN0ZWQ6CgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2N0eXBlOwogICAg ICBib29sIF9NX2RlbDsKICAgICAgX190b190eXBlIF9NX3RvdXBwZXI7CiAgICAgIF9fdG9fdHlw ZSBfTV90b2xvd2VyOwogICAgICBjb25zdCBtYXNrKiBfTV90YWJsZTsKCiAgICBwdWJsaWM6CiAg ICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHRhYmxl X3NpemUgPSAxICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oLTEpOwoKICAgICAgZXhwbGlj aXQKICAgICAgY3R5cGUoY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxz ZSwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoX19jX2xv Y2FsZSBfX2Nsb2MsIGNvbnN0IG1hc2sqIF9fdGFibGUgPSAwLCBib29sIF9fZGVsID0gZmFsc2Us CiAgICAgICAgICAgIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGlubGluZSBib29sCiAgICAg IGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioK ICAgICAgaXMoY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgbWFzayogX192ZWMp IGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5faXMobWFzayBfX20s IGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OwoKICAgICAgaW5saW5l IGNvbnN0IGNoYXIqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBj b25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGNvbnN0IG1hc2sq CiAgICAgIHRhYmxlKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiBfTV90YWJsZTsgfQoK ICAgICAgc3RhdGljIGNvbnN0IG1hc2sqCiAgICAgIGNsYXNzaWNfdGFibGUoKSB0aHJvdygpOwoK ICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBk b19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0 IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFy X3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh cl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8s IGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf dHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywK ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAg IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19s bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl CiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg Y2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90 eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVu KGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihj b25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29u c3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBf X2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f bmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAg ICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKICAgIH07Cgog IHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGN0eXBlPGNo YXI+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CgoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY3R5 cGU8d2NoYXJfdD4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPHdjaGFyX3Q+CiAgICB7 CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBl ZGVmIHdjdHlwZV90IF9fd21hc2tfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9fY19sb2Nh bGUgX01fY19sb2NhbGVfY3R5cGU7CgogICAgcHVibGljOgoKICAgICAgc3RhdGljIGxvY2FsZTo6 aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCk7Cgog ICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVm cyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgX193bWFza190eXBlCiAgICAgIF9NX2NvbnZl cnRfdG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICB+ Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90 eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f aXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9f dmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2Fu X2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o aSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9u b3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29u c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAg IGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90 eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hh cl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190 b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAg dmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25z dCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNo YXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAg ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlw ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2Rm YXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKCiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjb25z dCBjdHlwZTx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxjdHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxv Y2FsZSYgX19sb2MpOwoKCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1n bnUvYml0cy9jdHlwZV9pbmxpbmUuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4 Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9pbmxpbmUuaCIgMwogIGJvb2wKICBjdHlwZTxjaGFy Pjo6CiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdAogIHsgcmV0dXJuIF9NX3RhYmxlW3N0 YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldICYgX19tOyB9CgogIGNvbnN0IGNoYXIqCiAg Y3R5cGU8Y2hhcj46OgogIGlzKGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gs IG1hc2sqIF9fdmVjKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCkKICAgICAg Kl9fdmVjKysgPSBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3crKyld OwogICAgcmV0dXJuIF9faGlnaDsKICB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46Ogog IHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gp IGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoCiAgICAgICAgICAgJiYgIShfTV90 YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXSAmIF9fbSkpCiAgICAgICsr X19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+ OjoKICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9f aGlnaCkgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gKICAgICAgICAgICAmJiAo X01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0gJiBfX20pICE9IDAp CiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQojIDM5OCAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5cGU8X0NoYXJUPgogICAg ewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICBleHBs aWNpdAogICAgICBjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0g MCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZV9ieW5hbWUoKSB7 IH07CiAgICB9OwoKCiAgdGVtcGxhdGU8PgogICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9i eW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsKCiAgdGVtcGxhdGU8PgogICAgY3R5cGVf YnluYW1lPHdjaGFyX3Q+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsK CgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9jb2RlY3Z0LmgiIDEgMwojIDQ1ICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAzCgoKICBjbGFzcyBjb2RlY3Z0X2Jhc2UK ICB7CiAgcHVibGljOgogICAgZW51bSByZXN1bHQKICAgIHsKICAgICAgb2ssCiAgICAgIHBhcnRp YWwsCiAgICAgIGVycm9yLAogICAgICBub2NvbnYKICAgIH07CiAgfTsKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4K ICAgIGNsYXNzIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlCiAgICA6IHB1YmxpYyBsb2NhbGU6OmZh Y2V0LCBwdWJsaWMgY29kZWN2dF9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVm IGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRl cm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRl ZiBfU3RhdGVUIHN0YXRlX3R5cGU7CgoKICAgICAgcmVzdWx0CiAgICAgIG91dChzdGF0ZV90eXBl JiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgY29uc3QgaW50 ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAg ICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAg ICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1cm4g dGhpcy0+ZG9fb3V0KF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAg ICAgfQoKICAgICAgcmVzdWx0CiAgICAgIHVuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0 ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgICBleHRl cm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdW5zaGlm dChfX3N0YXRlLCBfX3RvLF9fdG9fZW5kLF9fdG9fbmV4dCk7IH0KCiAgICAgIHJlc3VsdAogICAg ICBpbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAg ICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBf X2Zyb21fbmV4dCwKICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3Rv X2VuZCwKICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAg ICAgICByZXR1cm4gdGhpcy0+ZG9faW4oX19zdGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zy b21fbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9fdG9f bmV4dCk7CiAgICAgIH0KCiAgICAgIGludAogICAgICBlbmNvZGluZygpIGNvbnN0IHRocm93KCkK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZW5jb2RpbmcoKTsgfQoKICAgICAgYm9vbAogICAgICBh bHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5kb19hbHdh eXNfbm9jb252KCk7IH0KCiAgICAgIGludAogICAgICBsZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYg X19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGV4 dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5kb19sZW5ndGgoX19zdGF0ZSwgX19mcm9tLCBfX2VuZCwgX19tYXgpOyB9CgogICAgICBpbnQK ICAgICAgbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f bWF4X2xlbmd0aCgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2Nv ZGVjdnRfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9f cmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2NvZGVjdnRfYWJzdHJhY3RfYmFzZSgp IHsgfQoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3Rh dGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5f dHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAg ICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAg ICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBy ZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSog X190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBl KiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19p bihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAg ICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBf X2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBf X3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsK CiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKSA9IDA7 CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93 KCkgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5 cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0 ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwg aW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpID0gMDsKICAgIH07CgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBf U3RhdGVUPgogICAgY2xhc3MgY29kZWN2dAogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0 X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPgogICAgewogICAgcHVibGljOgoKICAg ICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0lu dGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAg ICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk IGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKICAg ICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCxfRXh0ZXJuVCxfU3RhdGVUPiAo X19yZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQo KSB7IH0KCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0 YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJu X3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAg ICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAg ICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1 bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190 bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYg X190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRl X3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNv bnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9u ZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5k LAogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFs IGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0 dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90 eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNp emVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3Ro KCkgY29uc3QgdGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0 eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGxvY2FsZTo6aWQgY29kZWN2 dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNs YXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PgogICAgOiBwdWJsaWMgX19jb2RlY3Z0 X2Fic3RyYWN0X2Jhc2U8Y2hhciwgY2hhciwgbWJzdGF0ZV90PgogICAgewogICAgcHVibGljOgoK ICAgICAgdHlwZWRlZiBjaGFyIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJu X3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgoKICAgICAgc3RhdGlj IGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3Jl ZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKTsK CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBj b25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUq IF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAg ICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAg ZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAg ICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAg ICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19u ZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUm IF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4 dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAog ICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAg ICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGlu dAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wK ICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGlu dAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBf X2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBf X21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29u c3QgdGhyb3coKTsKICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGNvZGVjdnQ8d2NoYXJf dCwgY2hhciwgbWJzdGF0ZV90PgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8 d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRl ZiB3Y2hhcl90IGludGVybl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7CiAg ICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgoKICAgICAgc3RhdGljIGxvY2FsZTo6 aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKTsK CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKTsKCiAgICAgIHZp cnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRl cm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9l bmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5f dHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5 cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5z aGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBf X3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUq JiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3Rh dGVfdHlwZSYgX19zdGF0ZSwKICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20s IGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLAogICAgICAgICAgICAgY29uc3QgZXh0ZXJu X3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRl cm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkg Y29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIGludCBkb19lbmNvZGluZygpIGNvbnN0IHRocm93 KCk7CgogICAgICB2aXJ0dWFsCiAgICAgIGJvb2wgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRo cm93KCk7CgogICAgICB2aXJ0dWFsCiAgICAgIGludCBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlw ZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICAgICAgY29uc3Qg ZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBp bnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgICB9OwoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRl VD4KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lIDogcHVibGljIGNvZGVjdnQ8X0ludGVyblQsIF9F eHRlcm5ULCBfU3RhdGVUPgogICAgewogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBj b2RlY3Z0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogY29k ZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+KF9fcmVmcykgeyB9CiAgICBwcm90ZWN0 ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnRfYnluYW1lKCkgeyB9CiAgICB9OwoKCgoK IyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY29kZWN2dF9z cGVjaWFsaXphdGlvbnMuaCIgMSAzCiMgNDYgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1s aW51eC1nbnUvYml0cy9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oIiAzCiAgY2xhc3MgX19lbmNf dHJhaXRzCiAgewogIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgaWNvbnZfdCBfX2Rlc2NfdHlwZTsK CiAgcHJvdGVjdGVkOgoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX21heF9zaXplID0gMzI7Cgog ICAgY2hhciBfTV9pbnRfZW5jW19TX21heF9zaXplXTsKCiAgICBjaGFyIF9NX2V4dF9lbmNbX1Nf bWF4X3NpemVdOwoKCiAgICBfX2Rlc2NfdHlwZSBfTV9pbl9kZXNjOwoKICAgIF9fZGVzY190eXBl IF9NX291dF9kZXNjOwoKCiAgICBpbnQgX01fZXh0X2JvbTsKCgogICAgaW50IF9NX2ludF9ib207 CgogIHB1YmxpYzoKICAgIGV4cGxpY2l0IF9fZW5jX3RyYWl0cygpCiAgICA6IF9NX2luX2Rlc2Mo MCksIF9NX291dF9kZXNjKDApLCBfTV9leHRfYm9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CiAg ICAgIG1lbXNldChfTV9pbnRfZW5jLCAwLCBfU19tYXhfc2l6ZSk7CiAgICAgIG1lbXNldChfTV9l eHRfZW5jLCAwLCBfU19tYXhfc2l6ZSk7CiAgICB9CgogICAgZXhwbGljaXQgX19lbmNfdHJhaXRz KGNvbnN0IGNoYXIqIF9faW50LCBjb25zdCBjaGFyKiBfX2V4dCwKICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19pYm9tID0gMCwgaW50IF9fZWJvbSA9IDApCiAgICA6IF9NX2luX2Rlc2Mo MCksIF9NX291dF9kZXNjKDApLCBfTV9leHRfYm9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CiAg ICAgIHN0cm5jcHkoX01faW50X2VuYywgX19pbnQsIF9TX21heF9zaXplKTsKICAgICAgc3RybmNw eShfTV9leHRfZW5jLCBfX2V4dCwgX1NfbWF4X3NpemUpOwogICAgfQoKCgoKCgogICAgX19lbmNf dHJhaXRzKGNvbnN0IF9fZW5jX3RyYWl0cyYgX19vYmopOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRf ZGVzYygwKQogICAgewogICAgICBzdHJuY3B5KF9NX2ludF9lbmMsIF9fb2JqLl9NX2ludF9lbmMs IF9TX21heF9zaXplKTsKICAgICAgc3RybmNweShfTV9leHRfZW5jLCBfX29iai5fTV9leHRfZW5j LCBfU19tYXhfc2l6ZSk7CiAgICAgIF9NX2V4dF9ib20gPSBfX29iai5fTV9leHRfYm9tOwogICAg ICBfTV9pbnRfYm9tID0gX19vYmouX01faW50X2JvbTsKICAgIH0KCgogICAgX19lbmNfdHJhaXRz JgogICAgb3BlcmF0b3I9KGNvbnN0IF9fZW5jX3RyYWl0cyYgX19vYmopCiAgICB7CiAgICAgIHN0 cm5jcHkoX01faW50X2VuYywgX19vYmouX01faW50X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBz dHJuY3B5KF9NX2V4dF9lbmMsIF9fb2JqLl9NX2V4dF9lbmMsIF9TX21heF9zaXplKTsKICAgICAg X01faW5fZGVzYyA9IDA7CiAgICAgIF9NX291dF9kZXNjID0gMDsKICAgICAgX01fZXh0X2JvbSA9 IF9fb2JqLl9NX2V4dF9ib207CiAgICAgIF9NX2ludF9ib20gPSBfX29iai5fTV9pbnRfYm9tOwog ICAgfQoKICAgIH5fX2VuY190cmFpdHMoKQogICAgewogICAgICBfX2Rlc2NfdHlwZSBfX2VyciA9 IHJlaW50ZXJwcmV0X2Nhc3Q8aWNvbnZfdD4oLTEpOwogICAgICBpZiAoX01faW5fZGVzYyAmJiBf TV9pbl9kZXNjICE9IF9fZXJyKQogICAgICAgIGljb252X2Nsb3NlKF9NX2luX2Rlc2MpOwogICAg ICBpZiAoX01fb3V0X2Rlc2MgJiYgX01fb3V0X2Rlc2MgIT0gX19lcnIpCiAgICAgICAgaWNvbnZf Y2xvc2UoX01fb3V0X2Rlc2MpOwogICAgfQoKICAgIHZvaWQKICAgIF9NX2luaXQoKQogICAgewog ICAgICBjb25zdCBfX2Rlc2NfdHlwZSBfX2VyciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aWNvbnZfdD4o LTEpOwogICAgICBpZiAoIV9NX2luX2Rlc2MpCiAgICAgICAgewogICAgICAgICAgX01faW5fZGVz YyA9IGljb252X29wZW4oX01faW50X2VuYywgX01fZXh0X2VuYyk7CiAgICAgICAgICBpZiAoX01f aW5fZGVzYyA9PSBfX2VycikKICAgICAgICAgICAgX190aHJvd19ydW50aW1lX2Vycm9yKCJjcmVh dGluZyBpY29udiBpbnB1dCBkZXNjcmlwdG9yIGZhaWxlZC4iKTsKICAgICAgICB9CiAgICAgIGlm ICghX01fb3V0X2Rlc2MpCiAgICAgICAgewogICAgICAgICAgX01fb3V0X2Rlc2MgPSBpY29udl9v cGVuKF9NX2V4dF9lbmMsIF9NX2ludF9lbmMpOwogICAgICAgICAgaWYgKF9NX291dF9kZXNjID09 IF9fZXJyKQogICAgICAgICAgICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoImNyZWF0aW5nIGljb252 IG91dHB1dCBkZXNjcmlwdG9yIGZhaWxlZC4iKTsKICAgICAgICB9CiAgICB9CgogICAgYm9vbAog ICAgX01fZ29vZCgpCiAgICB7CiAgICAgIGNvbnN0IF9fZGVzY190eXBlIF9fZXJyID0gcmVpbnRl cnByZXRfY2FzdDxpY29udl90PigtMSk7CiAgICAgIGJvb2wgX190ZXN0ID0gX01faW5fZGVzYyAm JiBfTV9pbl9kZXNjICE9IF9fZXJyOwogICAgICBfX3Rlc3QgJj0gX01fb3V0X2Rlc2MgJiYgX01f b3V0X2Rlc2MgIT0gX19lcnI7CiAgICAgIHJldHVybiBfX3Rlc3Q7CiAgICB9CgogICAgY29uc3Qg X19kZXNjX3R5cGUqCiAgICBfTV9nZXRfaW5fZGVzY3JpcHRvcigpCiAgICB7IHJldHVybiAmX01f aW5fZGVzYzsgfQoKICAgIGNvbnN0IF9fZGVzY190eXBlKgogICAgX01fZ2V0X291dF9kZXNjcmlw dG9yKCkKICAgIHsgcmV0dXJuICZfTV9vdXRfZGVzYzsgfQoKICAgIGludAogICAgX01fZ2V0X2V4 dGVybmFsX2JvbSgpCiAgICB7IHJldHVybiBfTV9leHRfYm9tOyB9CgogICAgaW50CiAgICBfTV9n ZXRfaW50ZXJuYWxfYm9tKCkKICAgIHsgcmV0dXJuIF9NX2ludF9ib207IH0KCiAgICBjb25zdCBj aGFyKgogICAgX01fZ2V0X2ludGVybmFsX2VuYygpCiAgICB7IHJldHVybiBfTV9pbnRfZW5jOyB9 CgogICAgY29uc3QgY2hhcioKICAgIF9NX2dldF9leHRlcm5hbF9lbmMoKQogICAgeyByZXR1cm4g X01fZXh0X2VuYzsgfQogIH07CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBl bmFtZSBfRXh0ZXJuVD4KICAgIGNsYXNzIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2Vu Y190cmFpdHM+CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCwg X0V4dGVyblQsIF9fZW5jX3RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg Y29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVy bl90eXBlOwogICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVm IF9fZW5jX3RyYWl0cyBzdGF0ZV90eXBlOwogICAgICB0eXBlZGVmIF9fZW5jX3RyYWl0czo6X19k ZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAgIHR5cGVkZWYgX19lbmNfdHJhaXRzIF9fZW5jX3R5 cGU7CgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBj b2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNl PGludGVybl90eXBlLCBleHRlcm5fdHlwZSwgc3RhdGVfdHlwZT4oX19yZWZzKQogICAgICB7IH0K CiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoX19lbmNfdHlwZSogX19lbmMsIHNpemVfdCBf X3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGludGVybl90eXBlLCBl eHRlcm5fdHlwZSwgc3RhdGVfdHlwZT4oX19yZWZzKQogICAgICB7IH0KCiAgICBwcm90ZWN0ZWQ6 CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKSB7IH0KCiAgICAgIHZpcnR1YWwgcmVzdWx0 CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19m cm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGlu dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywg ZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25l eHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90 eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5f dHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZp cnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVy bl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5k LCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlw ZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5fdHlwZSom IF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygp IGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29u digpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29u c3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAg ICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICAgIH07Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGxvY2Fs ZTo6aWQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjppZDsK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UPgogICAgaW5saW5lIHNpemVfdAogICAgX19pY29u dl9hZGFwdG9yKHNpemVfdCgqX19mdW5jKShpY29udl90LCBfVCwgc2l6ZV90KiwgY2hhcioqLCBz aXplX3QqKSwKICAgICAgICAgICAgICAgICAgICBpY29udl90IF9fY2QsIGNoYXIqKiBfX2luYnVm LCBzaXplX3QqIF9faW5ieXRlcywKICAgICAgICAgICAgICAgICAgICBjaGFyKiogX19vdXRidWYs IHNpemVfdCogX19vdXRieXRlcykKICAgIHsgcmV0dXJuIF9fZnVuYyhfX2NkLCAoX1QpX19pbmJ1 ZiwgX19pbmJ5dGVzLCBfX291dGJ1ZiwgX19vdXRieXRlcyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQK ICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX291 dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAg ICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9f ZnJvbV9uZXh0LAogICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190 b19lbmQsCiAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICB7CiAg ICAgIHJlc3VsdCBfX3JldCA9IGVycm9yOwogICAgICBpZiAoX19zdGF0ZS5fTV9nb29kKCkpCiAg ICAgICAgewogICAgICAgICAgdHlwZWRlZiBzdGF0ZV90eXBlOjpfX2Rlc2NfdHlwZSBfX2Rlc2Nf dHlwZTsKICAgICAgICAgIGNvbnN0IF9fZGVzY190eXBlKiBfX2Rlc2MgPSBfX3N0YXRlLl9NX2dl dF9vdXRfZGVzY3JpcHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0g c2l6ZW9mKGludGVybl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX2ZieXRlcyA9IF9fZm11bHRp cGxlICogKF9fZnJvbV9lbmQgLSBfX2Zyb20pOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdG11 bHRpcGxlID0gc2l6ZW9mKGV4dGVybl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX3RieXRlcyA9 IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190byk7CgoKCiAgICAgICAgICBjaGFyKiBfX2N0 byA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fdG8pOwogICAgICAgICAgY2hhciogX19jZnJv bTsKICAgICAgICAgIHNpemVfdCBfX2NvbnY7CgoKCgoKCiAgICAgICAgICBpbnQgX19pbnRfYm9t ID0gX19zdGF0ZS5fTV9nZXRfaW50ZXJuYWxfYm9tKCk7CiAgICAgICAgICBpZiAoX19pbnRfYm9t KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSA9IF9fZnJvbV9lbmQg LSBfX2Zyb207CiAgICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fY2ZpeGVkID0gc3RhdGljX2Nh c3Q8aW50ZXJuX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihpbnRlcm5fdHlwZSkgKiAo X19zaXplICsgMSkpKTsKICAgICAgICAgICAgICBfX2NmaXhlZFswXSA9IHN0YXRpY19jYXN0PGlu dGVybl90eXBlPihfX2ludF9ib20pOwogICAgICAgICAgICAgIGNoYXJfdHJhaXRzPGludGVybl90 eXBlPjo6Y29weShfX2NmaXhlZCArIDEsIF9fZnJvbSwgX19zaXplKTsKICAgICAgICAgICAgICBf X2Nmcm9tID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAg IF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19mYnl0ZXMsICZfX2N0bywgJl9f dGJ5dGVzKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgaW50ZXJuX3R5cGUqIF9fY2ZpeGVkID0gY29uc3RfY2FzdDxpbnRlcm5fdHlwZSo+ KF9fZnJvbSk7CiAgICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+ KF9fY2ZpeGVkKTsKICAgICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYs ICpfX2Rlc2MsICZfX2Nmcm9tLCAmX19mYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZfX2N0bywgJl9fdGJ5dGVzKTsKICAgICAgICAgICAgfQoKICAgICAgICAg IGlmIChfX2NvbnYgIT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9f ZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20p OwogICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUq PihfX2N0byk7CiAgICAgICAgICAgICAgX19yZXQgPSBvazsKICAgICAgICAgICAgfQogICAgICAg ICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fZmJ5dGVzIDwgX19mbXVs dGlwbGUgKiAoX19mcm9tX2VuZCAtIF9fZnJvbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlw ZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9j YXN0PGV4dGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgICAgICBfX3JldCA9IHBhcnRp YWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg X19yZXQgPSBlcnJvcjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0 OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+ CiAgICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQs IF9fZW5jX3RyYWl0cz46OgogICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRl cm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRl cm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gZXJy b3I7CiAgICAgIGlmIChfX3N0YXRlLl9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBl ZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3Qg X19kZXNjX3R5cGUqIF9fZGVzYyA9IF9fc3RhdGUuX01fZ2V0X2luX2Rlc2NyaXB0b3IoKTsKICAg ICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSk7CiAg ICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsK CgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7 CiAgICAgICAgICBzaXplX3QgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCpfX2Rlc2Ms IF9fbnVsbCwgX19udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmX19jdG8sICZfX3RsZW4pOwoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90KC0xKSkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8 ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgaWYgKF9fdGxlbiA9PSBfX3RtdWx0 aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pKQogICAgICAgICAgICAgICAgX19yZXQgPSBub2NvbnY7 CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190bGVuID09IDApCiAgICAgICAgICAgICAgICBfX3Jl dCA9IG9rOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fcmV0ID0gcGFydGlh bDsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3JldCA9IGVycm9y OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAog ICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9faW4o c3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAg IGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJv bV9uZXh0LAogICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2Vu ZCwKICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgewogICAgICBy ZXN1bHQgX19yZXQgPSBlcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAg IHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7 CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfaW5f ZGVzY3JpcHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9m KGV4dGVybl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX2ZsZW4gPSBfX2ZtdWx0aXBsZSAqIChf X2Zyb21fZW5kIC0gX19mcm9tKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9 IHNpemVvZihpbnRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlw bGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRl cnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAgICAgICAgICBjaGFyKiBfX2Nmcm9tOwogICAgICAg ICAgc2l6ZV90IF9fY29udjsKCgoKCgoKICAgICAgICAgIGludCBfX2V4dF9ib20gPSBfX3N0YXRl Ll9NX2dldF9leHRlcm5hbF9ib20oKTsKICAgICAgICAgIGlmIChfX2V4dF9ib20pCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19zaXplID0gX19mcm9tX2VuZCAtIF9fZnJvbTsK ICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX19jZml4ZWQgPSBzdGF0aWNfY2FzdDxleHRlcm5f dHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGV4dGVybl90eXBlKSAqIChfX3NpemUgKyAx KSkpOwogICAgICAgICAgICAgIF9fY2ZpeGVkWzBdID0gc3RhdGljX2Nhc3Q8ZXh0ZXJuX3R5cGU+ KF9fZXh0X2JvbSk7CiAgICAgICAgICAgICAgY2hhcl90cmFpdHM8ZXh0ZXJuX3R5cGU+Ojpjb3B5 KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBfX3NpemUpOwogICAgICAgICAgICAgIF9fY2Zyb20gPSBy ZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0g X19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAgICAg ICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZXh0ZXJu X3R5cGUqIF9fY2ZpeGVkID0gY29uc3RfY2FzdDxleHRlcm5fdHlwZSo+KF9fZnJvbSk7CiAgICAg ICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAg ICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nm cm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19mbGVuLCAmX19j dG8sICZfX3RsZW4pOwogICAgICAgICAgICB9CgoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6 ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRl cnByZXRfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgIF9f dG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAg ICAgICAgX19yZXQgPSBvazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgaWYgKF9fZmxlbiA8IHN0YXRpY19jYXN0PHNpemVfdD4oX19mcm9t X2VuZCAtIF9fZnJvbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJv bV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwog ICAgICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGludGVybl90eXBl Kj4oX19jdG8pOwogICAgICAgICAgICAgICAgICBfX3JldCA9IHBhcnRpYWw7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19yZXQgPSBlcnJvcjsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQKICAgIGNv ZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2VuY29kaW5n KCkgY29uc3QgdGhyb3coKQogICAgewogICAgICBpbnQgX19yZXQgPSAwOwogICAgICBpZiAoc2l6 ZW9mKF9FeHRlcm5UKSA8PSBzaXplb2YoX0ludGVyblQpKQogICAgICAgIF9fcmV0ID0gc2l6ZW9m KF9JbnRlcm5UKS9zaXplb2YoX0V4dGVyblQpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGJvb2wK ICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2Fs d2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiBmYWxzZTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQKICAgIGNv ZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2xlbmd0aChj b25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAg ICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKICAgIHsgcmV0 dXJuIG1pbihfX21heCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihfX2VuZCAtIF9fZnJvbSkpOyB9CgoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50 CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19t YXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gMTsgfQojIDMzNCAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQuaCIgMiAzCiMgNDIzICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgoKICBjbGFzcyBfX251bV9iYXNlCiAgewog IHByb3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0IGNoYXIgX1NfYXRvbXNbXTsKCiAgICBlbnVt CiAgICB7CiAgICAgIF9NX3plcm8sCiAgICAgIF9NX2UgPSBfTV96ZXJvICsgMTAsCiAgICAgIF9N X0UgPSBfTV96ZXJvICsgMTEsCiAgICAgIF9NX3NpemUgPSAyMSArIDEKICAgIH07CgoKCiAgICBz dGF0aWMgYm9vbAogICAgX1NfZm9ybWF0X2Zsb2F0KGNvbnN0IGlvc19iYXNlJiBfX2lvLCBjaGFy KiBfX2ZwdHIsIGNoYXIgX19tb2QsCiAgICAgICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3By ZWMpOwoKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfZm9ybWF0X2ludChjb25zdCBpb3NfYmFzZSYg X19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9kLCBjaGFyIF9fbW9kbCk7CiAgfTsKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0IDogcHVibGljIGxvY2Fs ZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw ZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAg IHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAgICAgIGNoYXJfdHlwZSBfTV9k ZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsKICAgICAgY29u c3QgY2hhciogX01fZ3JvdXBpbmc7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fdHJ1ZW5hbWU7 CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fZmFsc2VuYW1lOwoKICAgIHB1YmxpYzoKICAgICAg ZXhwbGljaXQKICAgICAgbnVtcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNl dChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdCgpOyB9CgogICAgICBleHBs aWNpdAogICAgICBudW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDAp IDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdChf X2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBl CiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190aG91 c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGluZygpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAg IHRydWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdHJ1ZW5hbWUoKTsgfQoK ICAgICAgc3RyaW5nX3R5cGUKICAgICAgZmFsc2VuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fZmFsc2VuYW1lKCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg ICAgfm51bXB1bmN0KCk7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFs X3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAg dmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsg cmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRv X2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZp cnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJ1ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVy biBfTV90cnVlbmFtZTsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19mYWxz ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9mYWxzZW5hbWU7IH0KCgogICAgICB2b2lk CiAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfU19jX2xv Y2FsZSk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6Omlk IG51bXB1bmN0PF9DaGFyVD46OmlkOwoKICB0ZW1wbGF0ZTw+CiAgICBudW1wdW5jdDxjaGFyPjo6 fm51bXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51bXB1bmN0PGNoYXI+Ojpf TV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPD4K ICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9p ZAogICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2Fs ZSBfX2Nsb2MpOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVu Y3RfYnluYW1lIDogcHVibGljIG51bXB1bmN0PF9DaGFyVD4KICAgIHsKCiAgICAgIF9fY19sb2Nh bGUgX01fY19sb2NhbGVfbnVtcHVuY3Q7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFy VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5 cGU7CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19z LCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBudW1wdW5jdDxfQ2hhclQ+KF9fcmVmcykKICAg ICAgewogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1wdW5jdCwgX19z KTsKICAgICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9NX2NfbG9jYWxlX251bXB1bmN0KTsK ICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtcHVuY3RfYnlu YW1lKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0KTsg fQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgog ICAgY2xhc3MgbnVtX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgX19udW1fYmFz ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg ICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7 CgogICAgICBleHBsaWNpdAogICAgICBudW1fZ2V0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2Fs ZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBl IF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBl CiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p bywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192KSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Yp OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUg X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQo X19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAg Z2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192 KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBl IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQo X19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAg IGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7 IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs IHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19n ZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAg ICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsg fQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9f ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg ZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2Vu ZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90 eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAg IGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9z X2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBf X3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywg X19lcnIsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgfm51bV9nZXQoKSB7 IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9leHRyYWN0X2Zsb2F0KGl0ZXJfdHlwZSwgaXRl cl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwKICAgICAgICAgICAgICAgICAg ICAgICBzdHJpbmcmIF9feHRyYykgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fZXh0 cmFjdF9pbnQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3Rh dGUmLAogICAgICAgICAgICAgICAgICAgICBzdHJpbmcmIF9feHRyYywgaW50JiBfX2Jhc2UpIGNv bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRl cl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgYm9vbCYpIGNvbnN0OwoKICAg ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBp b3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVh bCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYs IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCYp IGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwg aXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAg ICAgIHVuc2lnbmVkIGludCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg ZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcmKSBjb25zdDsKCgogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNl JiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBsb25nJikgY29u c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVy X3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAg dW5zaWduZWQgbG9uZyBsb25nJikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAg ICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0 YXRlJiBfX2VyciwKICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0 ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9z X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZG91YmxlJikgY29uc3Q7CgogICAg ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlv c19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBkb3Vi bGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5 cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAg ICAgICAgICB2b2lkKiYpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0luSXRl cj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog ICAgY2xhc3MgbnVtX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgX19udW1fYmFz ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg ICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk OwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtX3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2Nh bGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlw ZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAg ICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFy X3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0 KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRl cl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIHVu c2lnbmVkIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBf X2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBl IF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0K CiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwg Y2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgoK ICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBj aGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k b19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1 dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAg ICAgbG9uZyBkb3VibGUgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19z LCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5 cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgY29uc3Qg dm9pZCogX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9f ZmlsbCwgX192KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zh bHVlVD4KICAgICAgICBpdGVyX3R5cGUKICAgICAgICBfTV9jb252ZXJ0X2Zsb2F0KGl0ZXJfdHlw ZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyIF9fbW9kLCBfVmFsdWVUIF9fdikgY29uc3Q7CgogICAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVmFsdWVUPgogICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZlcnRfaW50KGl0 ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICAg ICAgICAgICAgY2hhciBfX21vZCwgY2hhciBfX21vZGwsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAg ICAgIGl0ZXJfdHlwZQogICAgICBfTV93aWRlbl9mbG9hdChpdGVyX3R5cGUsIGlvc19iYXNlJiBf X2lvLCBjaGFyX3R5cGUgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAgICAgICAgICAgICAgICBp bnQgX19sZW4pIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX3dpZGVuX2ludChpdGVy X3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjaGFyKiBfX2NzLAogICAg ICAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBf TV9pbnNlcnQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX193cywgaW50IF9fbGVuKSBjb25zdDsKCiAg ICAgIHZpcnR1YWwKICAgICAgfm51bV9wdXQoKSB7IH07CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw ZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGJv b2wgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVy X3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0OwoKICAg ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBj aGFyX3R5cGUgX19maWxsLCB1bnNpZ25lZCBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0 ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2Zp bGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg ZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCB1bnNpZ25lZCBs b25nIGxvbmcpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChp dGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFz ZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdikgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlw ZSBfX2ZpbGwsIGNvbnN0IHZvaWQqIF9fdikgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbnVtX3B1dDxf Q2hhclQsIF9PdXRJdGVyPjo6aWQ7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBj bGFzcyBjb2xsYXRlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAg ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8 X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgoKICAgICAgX19jX2xvY2FsZSBf TV9jX2xvY2FsZV9jb2xsYXRlOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQg aWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRlKHNpemVfdCBfX3JlZnMgPSAwKQogICAg ICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2NfbG9jYWxlX2NvbGxhdGUgPSBf U19jX2xvY2FsZTsgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoX19jX2xvY2FsZSBf X2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQog ICAgICB7IF9NX2NfbG9jYWxlX2NvbGxhdGUgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOyB9 CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBfQ2hh clQqIF9faGkxLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFy VCogX19oaTIpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2NvbXBhcmUoX19sbzEsIF9f aGkxLCBfX2xvMiwgX19oaTIpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICB0cmFuc2Zvcm0o Y29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX3RyYW5zZm9ybShfX2xvLCBfX2hpKTsgfQoKICAgICAgbG9uZwogICAgICBo YXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb19oYXNoKF9fbG8sIF9faGkpOyB9CgoKICAgICAgaW50CiAgICAgIF9N X2NvbXBhcmUoY29uc3QgX0NoYXJUKiwgY29uc3QgX0NoYXJUKikgY29uc3Q7CgogICAgICBzaXpl X3QKICAgICAgX01fdHJhbnNmb3JtKF9DaGFyVCosIGNvbnN0IF9DaGFyVCosIHNpemVfdCkgY29u c3Q7CgogIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29sbGF0ZSgpCiAgICAgIHsK ICAgICAgICBpZiAoX01fY19sb2NhbGVfY29sbGF0ZSAhPSBfU19jX2xvY2FsZSkKICAgICAgICAg IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSk7CiAgICAgIH0KCiAgICAg IHZpcnR1YWwgaW50CiAgICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3Qg X0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25z dCBfQ2hhclQqIF9faGkyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAg ZG9fdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25z dDsKCiAgICAgIHZpcnR1YWwgbG9uZwogICAgICBkb19oYXNoKGNvbnN0IF9DaGFyVCogX19sbywg Y29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4KICAgIGxvY2FsZTo6aWQgY29sbGF0ZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4K ICAgIGludAogICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiwgY29uc3Qg Y2hhciopIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBzaXplX3QKICAgIGNvbGxhdGU8Y2hhcj46 Ol9NX3RyYW5zZm9ybShjaGFyKiwgY29uc3QgY2hhciosIHNpemVfdCkgY29uc3Q7CgoKICB0ZW1w bGF0ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBhcmUoY29uc3Qgd2No YXJfdCosIGNvbnN0IHdjaGFyX3QqKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgc2l6ZV90CiAg ICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCosIGNvbnN0IHdjaGFyX3Qq LCBzaXplX3QpIGNvbnN0OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3Mg Y29sbGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0ZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6 CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp bmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGVfYnlu YW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogY29sbGF0ZTxf Q2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAgIGlmIChfTV9jX2xvY2FsZV9jb2xsYXRlICE9 IF9TX2NfbG9jYWxlKQogICAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9j b2xsYXRlKTsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSwg X19zKTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29sbGF0 ZV9ieW5hbWUoKSB7IH0KICAgIH07CgoKICBjbGFzcyB0aW1lX2Jhc2UKICB7CiAgcHVibGljOgog ICAgZW51bSBkYXRlb3JkZXIgeyBub19vcmRlciwgZG15LCBtZHksIHltZCwgeWRtIH07CiAgfTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgX190aW1lcHVuY3QgOiBwdWJs aWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQg X19jaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdf dHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKCiAgICAgIHN0YXRpYyBjb25zdCBf Q2hhclQqIF9TX3RpbWV6b25lc1sxNF07CgogICAgcHJvdGVjdGVkOgogICAgICBfX2NfbG9jYWxl IF9NX2NfbG9jYWxlX3RpbWVwdW5jdDsKICAgICAgY29uc3QgY2hhciogX01fbmFtZV90aW1lcHVu Y3Q7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFy VCogX01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX3RpbWVfZm9ybWF0 OwogICAgICBjb25zdCBfQ2hhclQqIF9NX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0No YXJUKiBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfdGlt ZV9lcmFfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2FtOwogICAgICBjb25zdCBfQ2hh clQqIF9NX3BtOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2FtX3BtX2Zvcm1hdDsKCgogICAgICBj b25zdCBfQ2hhclQqIF9NX2RheTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MjsKICAgICAg Y29uc3QgX0NoYXJUKiBfTV9kYXkzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTQ7CiAgICAg IGNvbnN0IF9DaGFyVCogX01fZGF5NTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk2OwogICAg ICBjb25zdCBfQ2hhclQqIF9NX2RheTc7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTE7 CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2EyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2Rh eV9hMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTQ7CiAgICAgIGNvbnN0IF9DaGFyVCog X01fZGF5X2E1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNjsKICAgICAgY29uc3QgX0No YXJUKiBfTV9kYXlfYTc7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDAxOwogICAgICBj b25zdCBfQ2hhclQqIF9NX21vbnRoMDI7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwMzsK ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21v bnRoMDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNjsKICAgICAgY29uc3QgX0NoYXJU KiBfTV9tb250aDA3OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDg7CiAgICAgIGNvbnN0 IF9DaGFyVCogX01fbW9udGgwOTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDEwOwogICAg ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgx MjsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwMTsKICAgICAgY29uc3QgX0NoYXJU KiBfTV9tb250aF9hMDI7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTAzOwogICAgICBj b25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9h MDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA2OwogICAgICBjb25zdCBfQ2hhclQq IF9NX21vbnRoX2EwNzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDg7CiAgICAgIGNv bnN0IF9DaGFyVCogX01fbW9udGhfYTA5OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2Ex MDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMTE7CiAgICAgIGNvbnN0IF9DaGFyVCog X01fbW9udGhfYTEyOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgX190aW1lcHVu Y3Qoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpLCBfTV9u YW1lX3RpbWVwdW5jdCgiQyIpCiAgICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQoK ICAgICAgZXhwbGljaXQKICAgICAgX190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0 IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3Jl ZnMpLCBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCiAgICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVu Y3QoX19jbG9jKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9wdXQoX0NoYXJUKiBfX3MsIHNpemVf dCBfX21heGxlbiwgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCwKICAgICAgICAgICAgIGNvbnN0IHRt KiBfX3RtKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgX01fZGF0ZV9mb3JtYXRzKGNvbnN0IF9D aGFyVCoqIF9fZGF0ZSkgY29uc3QKICAgICAgewoKICAgICAgICBfX2RhdGVbMF0gPSBfTV9kYXRl X2Zvcm1hdDsKICAgICAgICBfX2RhdGVbMV0gPSBfTV9kYXRlX2VyYV9mb3JtYXQ7CiAgICAgIH0K CiAgICAgIHZvaWQKICAgICAgX01fdGltZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoqIF9fdGltZSkg Y29uc3QKICAgICAgewoKICAgICAgICBfX3RpbWVbMF0gPSBfTV90aW1lX2Zvcm1hdDsKICAgICAg ICBfX3RpbWVbMV0gPSBfTV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAg ICAgX01fYW1wbShjb25zdCBfQ2hhclQqKiBfX2FtcG0pIGNvbnN0CiAgICAgIHsKICAgICAgICBf X2FtcG1bMF0gPSBfTV9hbTsKICAgICAgICBfX2FtcG1bMV0gPSBfTV9wbTsKICAgICAgfQoKICAg ICAgdm9pZAogICAgICBfTV9kYXRlX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX2R0KSBj b25zdAogICAgICB7CgogICAgICAgIF9fZHRbMF0gPSBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAg ICAgIF9fZHRbMV0gPSBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgfQoKICAgICAgdm9p ZAogICAgICBfTV9kYXlzKGNvbnN0IF9DaGFyVCoqIF9fZGF5cykgY29uc3QKICAgICAgewogICAg ICAgIF9fZGF5c1swXSA9IF9NX2RheTE7CiAgICAgICAgX19kYXlzWzFdID0gX01fZGF5MjsKICAg ICAgICBfX2RheXNbMl0gPSBfTV9kYXkzOwogICAgICAgIF9fZGF5c1szXSA9IF9NX2RheTQ7CiAg ICAgICAgX19kYXlzWzRdID0gX01fZGF5NTsKICAgICAgICBfX2RheXNbNV0gPSBfTV9kYXk2Owog ICAgICAgIF9fZGF5c1s2XSA9IF9NX2RheTc7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01f ZGF5c19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0CiAgICAgIHsKICAg ICAgICBfX2RheXNbMF0gPSBfTV9kYXlfYTE7CiAgICAgICAgX19kYXlzWzFdID0gX01fZGF5X2Ey OwogICAgICAgIF9fZGF5c1syXSA9IF9NX2RheV9hMzsKICAgICAgICBfX2RheXNbM10gPSBfTV9k YXlfYTQ7CiAgICAgICAgX19kYXlzWzRdID0gX01fZGF5X2E1OwogICAgICAgIF9fZGF5c1s1XSA9 IF9NX2RheV9hNjsKICAgICAgICBfX2RheXNbNl0gPSBfTV9kYXlfYTc7CiAgICAgIH0KCiAgICAg IHZvaWQKICAgICAgX01fbW9udGhzKGNvbnN0IF9DaGFyVCoqIF9fbW9udGhzKSBjb25zdAogICAg ICB7CiAgICAgICAgX19tb250aHNbMF0gPSBfTV9tb250aDAxOwogICAgICAgIF9fbW9udGhzWzFd ID0gX01fbW9udGgwMjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRoMDM7CiAgICAgICAg X19tb250aHNbM10gPSBfTV9tb250aDA0OwogICAgICAgIF9fbW9udGhzWzRdID0gX01fbW9udGgw NTsKICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoMDY7CiAgICAgICAgX19tb250aHNbNl0g PSBfTV9tb250aDA3OwogICAgICAgIF9fbW9udGhzWzddID0gX01fbW9udGgwODsKICAgICAgICBf X21vbnRoc1s4XSA9IF9NX21vbnRoMDk7CiAgICAgICAgX19tb250aHNbOV0gPSBfTV9tb250aDEw OwogICAgICAgIF9fbW9udGhzWzEwXSA9IF9NX21vbnRoMTE7CiAgICAgICAgX19tb250aHNbMTFd ID0gX01fbW9udGgxMjsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9tb250aHNfYWJicmV2 aWF0ZWQoY29uc3QgX0NoYXJUKiogX19tb250aHMpIGNvbnN0CiAgICAgIHsKICAgICAgICBfX21v bnRoc1swXSA9IF9NX21vbnRoX2EwMTsKICAgICAgICBfX21vbnRoc1sxXSA9IF9NX21vbnRoX2Ew MjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRoX2EwMzsKICAgICAgICBfX21vbnRoc1sz XSA9IF9NX21vbnRoX2EwNDsKICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21vbnRoX2EwNTsKICAg ICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoX2EwNjsKICAgICAgICBfX21vbnRoc1s2XSA9IF9N X21vbnRoX2EwNzsKICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21vbnRoX2EwODsKICAgICAgICBf X21vbnRoc1s4XSA9IF9NX21vbnRoX2EwOTsKICAgICAgICBfX21vbnRoc1s5XSA9IF9NX21vbnRo X2ExMDsKICAgICAgICBfX21vbnRoc1sxMF0gPSBfTV9tb250aF9hMTE7CiAgICAgICAgX19tb250 aHNbMTFdID0gX01fbW9udGhfYTEyOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0 dWFsCiAgICAgIH5fX3RpbWVwdW5jdCgpOwoKCiAgICAgIHZvaWQKICAgICAgX01faW5pdGlhbGl6 ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfU19jX2xvY2FsZSk7CiAgICB9OwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIF9fdGltZXB1bmN0PF9DaGFy VD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgX190aW1lcHVuY3Q8Y2hhcj46On5fX3RpbWVwdW5j dCgpOwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjaGFyKgogICAgX190aW1lcHVuY3Q8Y2hhcj46 Ol9TX3RpbWV6b25lc1sxNF07CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0 PGNoYXI+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgogIHRl bXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9wdXQoY2hhciosIHNp emVfdCwgY29uc3QgY2hhciosIGNvbnN0IHRtKikgY29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICBf X3RpbWVwdW5jdDx3Y2hhcl90Pjo6fl9fdGltZXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIGNv bnN0IHdjaGFyX3QqCiAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X1NfdGltZXpvbmVzWzE0XTsK CiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRp YWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCiAgdGVtcGxhdGU8PgogICAgdm9p ZAogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX3B1dCh3Y2hhcl90Kiwgc2l6ZV90LCBjb25z dCB3Y2hhcl90KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG0qKSBj b25zdDsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjb25zdCBfQ2hhclQqIF9f dGltZXB1bmN0PF9DaGFyVD46Ol9TX3RpbWV6b25lc1sxNF07CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldCA6IHB1YmxpYyBs b2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0 eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7 CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAg IHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXQoc2l6 ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSB7IH0KCiAgICAg IGRhdGVvcmRlcgogICAgICBkYXRlX29yZGVyKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ ZG9fZGF0ZV9vcmRlcigpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3RpbWUoaXRlcl90 eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5kb19nZXRfdGltZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoK ICAgICAgaXRlcl90eXBlCiAgICAgIGdldF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm IF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X2RhdGUo X19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg ICBnZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um IF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9f dG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF93ZWVrZGF5KF9fYmVnLCBfX2Vu ZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X21vbnRo bmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X21vbnRobmFtZShfX2JlZywgX19lbmQsIF9f aW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF95ZWFyKGl0ZXJf dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9fZ2V0X3llYXIoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0K CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0KCkgeyB9CgogICAg ICB2aXJ0dWFsIGRhdGVvcmRlcgogICAgICBkb19kYXRlX29yZGVyKCkgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJf dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK ICAgICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt KiBfX3RtKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF93ZWVr ZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAg ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoK ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUg X19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAgICAgICAg IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVh bCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0 ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3Rf bnVtKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAg ICAgICAgICAgICAgICAgICAgIGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3QgX19sZW4sCiAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICAg ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3Q7CgoKCiAgICAgIHZv aWQKICAgICAgX01fZXh0cmFjdF9uYW1lKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19l bmQsIGludCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqKiBf X25hbWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VycikgY29uc3Q7CgoKICAgICAgdm9pZAogICAgICBfTV9leHRyYWN0X3Zp YV9mb3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW9zX2Jhc2UmIF9f aW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs IHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2Zv cm1hdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0 aW1lX2dldF9ieW5hbWUgOiBwdWJsaWMgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPgogICAgewog ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVm IF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXRfYnluYW1l KGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiB0aW1lX2dldDxfQ2hhclQs IF9Jbkl0ZXI+KF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg IH50aW1lX2dldF9ieW5hbWUoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6 OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVm IF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAg ICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dChz aXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAg ICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFy X3R5cGUgX19maWxsLCBjb25zdCB0bSogX190bSwKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19i ZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1 dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAg ICAgIGNvbnN0IHRtKiBfX3RtLCBjaGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kID0gMCkgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbywgX19maWxsLCBfX3RtLCBfX2Zv cm1hdCwgX19tb2QpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1l X3B1dCgpCiAgICAgIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0 ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB0bSog X190bSwKICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2QpIGNvbnN0OwogICAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxv Y2FsZTo6aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1l IDogcHVibGljIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+CiAgICB7CiAgICBwdWJsaWM6Cgog ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRl cl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIq ICwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4o X19yZWZzKQogICAgICB7IH07CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50 aW1lX3B1dF9ieW5hbWUoKSB7IH0KICAgIH07CgoKICBjbGFzcyBtb25leV9iYXNlCiAgewogIHB1 YmxpYzoKICAgIGVudW0gcGFydCB7IG5vbmUsIHNwYWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07 CiAgICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmllbGRbNF07IH07CgogICAgc3RhdGljIGNvbnN0 IHBhdHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJuOwoKCgogICAgc3RhdGljIHBhdHRlcm4KICAgIF9T X2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9f cG9zbik7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAg Y2xhc3MgbW9uZXlwdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFz ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAg ICBwcml2YXRlOgogICAgICBjb25zdCBjaGFyKiBfTV9ncm91cGluZzsKICAgICAgY2hhcl90eXBl IF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwogICAg ICBjb25zdCBjaGFyX3R5cGUqIF9NX2N1cnJfc3ltYm9sOwogICAgICBjb25zdCBjaGFyX3R5cGUq IF9NX3Bvc2l0aXZlX3NpZ247CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fbmVnYXRpdmVfc2ln bjsKICAgICAgaW50IF9NX2ZyYWNfZGlnaXRzOwogICAgICBwYXR0ZXJuIF9NX3Bvc19mb3JtYXQ7 CiAgICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0 CiAgICAgIG1vbmV5cHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3Jl ZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0 CiAgICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKSA6 IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChf X2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBl CiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190aG91 c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGluZygpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAg IGN1cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY3Vycl9zeW1ib2wo KTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgcG9zaXRpdmVfc2lnbigpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX3Bvc2l0aXZlX3NpZ24oKTsgfQoKICAgICAgc3RyaW5nX3R5cGUK ICAgICAgbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ2F0 aXZlX3NpZ24oKTsgfQoKICAgICAgaW50CiAgICAgIGZyYWNfZGlnaXRzKCkgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fZnJhY19kaWdpdHMoKTsgfQoKICAgICAgcGF0dGVybgogICAgICBw b3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zX2Zvcm1hdCgpOyB9 CgogICAgICBwYXR0ZXJuCiAgICAgIG5lZ19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb19uZWdfZm9ybWF0KCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg ICAgfm1vbmV5cHVuY3QoKTsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2lt YWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAg ICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAg eyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAg ZG9fZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoKICAgICAg dmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19jdXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsg cmV0dXJuIF9NX2N1cnJfc3ltYm9sOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAg IGRvX3Bvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBfTV9wb3NpdGl2ZV9zaWdu OyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX25lZ2F0aXZlX3NpZ24oKSBj b25zdAogICAgICB7IHJldHVybiBfTV9uZWdhdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIGlu dAogICAgICBkb19mcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2ZyYWNfZGln aXRzOyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fcG9zX2Zvcm1hdCgpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIF9NX3Bvc19mb3JtYXQ7IH0KCiAgICAgIHZpcnR1YWwgcGF0dGVybgog ICAgICBkb19uZWdfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbmVnX2Zvcm1hdDsg fQoKCiAgICAgICB2b2lkCiAgICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2Fs ZSBfX2Nsb2MgPSBfU19jX2xvY2FsZSk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIGJvb2wgX0ludGw+CiAgICBsb2NhbGU6OmlkIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46 OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBi b29sIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmludGw7CgogIHRlbXBsYXRlPD4KICAgIG1v bmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIG1v bmV5cHVuY3Q8Y2hhciwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2 b2lkCiAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3Qo X19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0 PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9j KTsKCgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1 bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9u ZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3Qs IHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0 ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5p dGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lIDogcHVi bGljIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4KICAgIHsKICAgICAgX19jX2xvY2FsZSBfTV9j X2xvY2FsZV9tb25leXB1bmN0OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh cl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwoKICAgICAgZXhwbGljaXQKICAg ICAgbW9uZXlwdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkK ICAgICAgOiBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+KF9fcmVmcykKICAgICAgewogICAgICAg IF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0LCBfX3MpOwogICAgICAg IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfTV9jX2xvY2FsZV9tb25leXB1bmN0KTsKICAgICAg fQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlwdW5jdF9ieW5hbWUo KQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlwdW5jdCk7IH0K ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNvbnN0 IGJvb2wgbW9uZXlwdW5jdF9ieW5hbWU8X0NoYXJULCBfSW50bD46OmludGw7CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIG1vbmV5X2dldCA6 IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9D aGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAgICAgIHR5 cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9j YWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5X2dldChzaXplX3QgX19yZWZz ID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAg Z2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNl JiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYg X191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywgX19lbmQsIF9f aW50bCwgX19pbywgX19lcnIsIF9fdW5pdHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0 KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBf X2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX19k aWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX3MsIF9fZW5kLCBfX2lu dGwsIF9faW8sIF9fZXJyLCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1 YWwKICAgICAgfm1vbmV5X2dldCgpIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg ZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19i YXNlJiBfX2lvLAogICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRv dWJsZSYgX191bml0cykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19n ZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2Um IF9faW8sCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBl JiBfX2RpZ2l0cykgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+ OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAg IGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6 CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBp dGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7 CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5 X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAg ICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFz ZSYgX19pbywKICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdW5pdHMp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19m aWxsLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19z LCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBjaGFyX3R5cGUgX19maWxs LCBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90 ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5X3B1dCgpIHsgfQoKICAgICAgdmlydHVh bCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3Nf YmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgIGxvbmcgZG91YmxlIF9f dW5pdHMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJf dHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwK ICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3Q7CiAgICB9OwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxl OjppZCBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKCiAgc3RydWN0IG1lc3NhZ2Vz X2Jhc2UKICB7CiAgICB0eXBlZGVmIGludCBjYXRhbG9nOwogIH07CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1 YmxpYyBtZXNzYWdlc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFy VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5 cGU7CgogICAgcHJvdGVjdGVkOgoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbWVzc2Fn ZXM7CgoKICAgICAgY29uc3QgY2hhciogX01fbmFtZV9tZXNzYWdlczsKCgogICAgcHVibGljOgog ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2Vz KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSwgX01fbmFt ZV9tZXNzYWdlcygiQyIpCiAgICAgIHsgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jX2xvY2Fs ZTsgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBj b25zdCBjaGFyKiBfX25hbWUsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFj ZXQoX19yZWZzKQogICAgICB7CiAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fbmFtZTsKICAg ICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CiAg ICAgIH0KCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4m IF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f b3BlbihfX3MsIF9fbG9jKTsgfQoKCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNp Y19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmLCBjb25zdCBjaGFyKikgY29uc3Q7CgogICAg ICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50IF9fbXNn aWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X2dldChfX2MsIF9fc2V0LCBfX21zZ2lkLCBfX3MpOyB9CgogICAgICB2b2lkCiAgICAgIGNsb3Nl KGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jbG9zZShfX2MpOyB9 CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlcygpCiAgICAgICB7 CiAgICAgICAgIGlmIChfTV9jX2xvY2FsZV9tZXNzYWdlcyAhPSBfU19jX2xvY2FsZSkKICAgICAg ICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKICAgICAgIH0K CiAgICAgIHZpcnR1YWwgY2F0YWxvZwogICAgICBkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxj aGFyPiYsIGNvbnN0IGxvY2FsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQog ICAgICBkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVs dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgZG9fY2xvc2UoY2F0YWxvZykgY29u c3Q7CgoKICAgICAgY2hhcioKICAgICAgX01fY29udmVydF90b19jaGFyKGNvbnN0IHN0cmluZ190 eXBlJiBfX21zZykgY29uc3QKICAgICAgewoKICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz dDxjaGFyKj4oY29uc3RfY2FzdDxfQ2hhclQqPihfX21zZy5jX3N0cigpKSk7CiAgICAgIH0KCgog ICAgICBzdHJpbmdfdHlwZQogICAgICBfTV9jb252ZXJ0X2Zyb21fY2hhcihjaGFyKiBfX21zZykg Y29uc3QKICAgICAgewoKICAgICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxjaGFyPjo6 bGVuZ3RoKF9fbXNnKSAtIDE7CiMgMTcwNSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs ZV9mYWNldHMuaCIgMwogICAgICAgIHJldHVybiBzdHJpbmdfdHlwZSgpOwogICAgICB9CiAgICAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBtZXNzYWdlczxf Q2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIHN0cmluZwogICAgbWVzc2FnZXM8Y2hhcj46 OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJikgY29uc3Q7CgoKIyAxICIv dXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvbWVzc2FnZXNfbWVtYmVy cy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRz L21lc3NhZ2VzX21lbWJlcnMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5 cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9w ZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAogICAgewog ICAgICBiaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOwogICAgICByZXR1cm4gdGhp cy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZwogICAgbWVzc2FnZXM8X0No YXJUPjo6ZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbG9jYWxlJikgY29uc3QKICAgIHsKCgogICAgICB0ZXh0 ZG9tYWluKF9fcy5jX3N0cigpKTsKICAgICAgcmV0dXJuIDA7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OnN0cmluZ190eXBl CiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGZhdWx0KSBjb25zdAog ICAgewoKCgoKCgogICAgICBjb25zdCBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShfX0xDX0FMTCwg X01fbmFtZV9tZXNzYWdlcyk7CiAgICAgIGNoYXIqIF9fbXNnID0gZGNnZXR0ZXh0IChfX251bGws IF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCksIF9fTENfTUVTU0FHRVMpOwogICAgICBzZXRs b2NhbGUoX19MQ19BTEwsIF9fb2xkKTsKICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFy KF9fbXNnKTsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHZvaWQKICAg IG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0CiAgICB7IH0KIyAxNzE5 ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lIDogcHVibGljIG1l c3NhZ2VzPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh cl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoK ICAgICAgZXhwbGljaXQKICAgICAgbWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6 ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpCiAgICAgIHsK ICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX19zOwogICAgICAgIGlmIChfTV9jX2xvY2FsZV9t ZXNzYWdlcyAhPSBfU19jX2xvY2FsZSkKICAgICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01f Y19sb2NhbGVfbWVzc2FnZXMpOwogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2Fs ZV9tZXNzYWdlcywgX19zKTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAog ICAgICB+bWVzc2FnZXNfYnluYW1lKCkKICAgICAgeyB9CiAgICB9OwoKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3NwYWNlKF9DaGFyVCBfX2Ms IGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU PiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwcmludChfQ2hhclQgX19jLCBjb25z dCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf X2xvYykuaXMoY3R5cGVfYmFzZTo6cHJpbnQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250cmwoX0NoYXJUIF9fYywgY29uc3QgbG9j YWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2Mp LmlzKGN0eXBlX2Jhc2U6OmNudHJsLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGlubGluZSBib29sCiAgICBpc3VwcGVyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYg X19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhj dHlwZV9iYXNlOjp1cHBlciwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICBpbmxpbmUgYm9vbCBpc2xvd2VyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAg ICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNl Ojpsb3dlciwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg Ym9vbAogICAgaXNhbHBoYShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyBy ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6YWxw aGEsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK ICAgIGlzZGlnaXQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJu IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBf X2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp c3B1bmN0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2Vf ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwdW5jdCwgX19jKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN4ZGln aXQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNl dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnhkaWdpdCwgX19jKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbG51bShf Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0 eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6YWxudW0sIF9fYyk7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZ3JhcGgoX0NoYXJU IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf Q2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmdyYXBoLCBfX2MpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvdXBwZXIoX0NoYXJUIF9f YywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hh clQ+ID4oX19sb2MpLnRvdXBwZXIoX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2VyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYg X19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS50b2xv d2VyKF9fYyk7IH0KfQojIDQyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLmgi IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFzZQogICAgewog ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9U cmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5 cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlw ZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0 ZXI7CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251 bXB1dF90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJh aXRzPiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19p c3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKICAgIHByb3RlY3RlZDoKICAgICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfTV90aWU7CiAgICAgIG11dGFibGUgY2hhcl90 eXBlIF9NX2ZpbGw7CiAgICAgIG11dGFibGUgYm9vbCBfTV9maWxsX2luaXQ7CiAgICAgIGJhc2lj X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfTV9zdHJlYW1idWY7CgoKICAgICAgY29uc3Qg X19jdHlwZV90eXBlKiBfTV9mY3R5cGU7CgogICAgICBjb25zdCBfX251bXB1dF90eXBlKiBfTV9m bnVtcHV0OwoKICAgICAgY29uc3QgX19udW1nZXRfdHlwZSogX01fZm51bWdldDsKCiAgICBwdWJs aWM6CiAgICAgIG9wZXJhdG9yIHZvaWQqKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFp bCgpID8gMCA6IGNvbnN0X2Nhc3Q8YmFzaWNfaW9zKj4odGhpcyk7IH0KCiAgICAgIGJvb2wKICAg ICAgb3BlcmF0b3IhKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpOyB9CgogICAg ICBpb3N0YXRlCiAgICAgIHJkc3RhdGUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1i dWZfc3RhdGU7IH0KCiAgICAgIHZvaWQKICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29v ZGJpdCk7CgogICAgICB2b2lkCiAgICAgIHNldHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkKICAgICAg eyB0aGlzLT5jbGVhcih0aGlzLT5yZHN0YXRlKCkgfCBfX3N0YXRlKTsgfQoKICAgICAgYm9vbAog ICAgICBnb29kKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmRzdGF0ZSgpID09IDA7IH0K CiAgICAgIGJvb2wKICAgICAgZW9mKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3Rh dGUoKSAmIGVvZmJpdCkgIT0gMDsgfQoKICAgICAgYm9vbAogICAgICBmYWlsKCkgY29uc3QKICAg ICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIChiYWRiaXQgfCBmYWlsYml0KSkgIT0gMDsg fQoKICAgICAgYm9vbAogICAgICBiYWQoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRz dGF0ZSgpICYgYmFkYml0KSAhPSAwOyB9CgogICAgICBpb3N0YXRlCiAgICAgIGV4Y2VwdGlvbnMo KSBjb25zdAogICAgICB7IHJldHVybiBfTV9leGNlcHRpb247IH0KCiAgICAgIHZvaWQKICAgICAg ZXhjZXB0aW9ucyhpb3N0YXRlIF9fZXhjZXB0KQogICAgICB7CiAgICAgICAgX01fZXhjZXB0aW9u ID0gX19leGNlcHQ7CiAgICAgICAgdGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVmX3N0YXRlKTsKICAg ICAgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvcyhiYXNpY19zdHJlYW1idWY8X0No YXJULCBfVHJhaXRzPiogX19zYikgOiBpb3NfYmFzZSgpCiAgICAgIHsgdGhpcy0+aW5pdChfX3Ni KTsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zKCkgeyB9CgoKICAgICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KgogICAgICB0aWUoKSBjb25zdAogICAgICB7IHJldHVy biBfTV90aWU7IH0KCiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAg dGllKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX190aWVzdHIpCiAgICAgIHsKICAg ICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fdGllOwogICAg ICAgIF9NX3RpZSA9IF9fdGllc3RyOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAg ICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHJkYnVmKCkgY29uc3QK ICAgICAgeyByZXR1cm4gX01fc3RyZWFtYnVmOyB9CgogICAgICBiYXNpY19zdHJlYW1idWY8X0No YXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0 cz4qIF9fc2IpOwoKICAgICAgYmFzaWNfaW9zJgogICAgICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lv cyYgX19yaHMpOwoKICAgICAgY2hhcl90eXBlCiAgICAgIGZpbGwoKSBjb25zdAogICAgICB7CiAg ICAgICAgaWYgKCFfTV9maWxsX2luaXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX2ZpbGwg PSB0aGlzLT53aWRlbignICcpOwogICAgICAgICAgICBfTV9maWxsX2luaXQgPSB0cnVlOwogICAg ICAgICAgfQogICAgICAgIHJldHVybiBfTV9maWxsOwogICAgICB9CgogICAgICBjaGFyX3R5cGUK ICAgICAgZmlsbChjaGFyX3R5cGUgX19jaCkKICAgICAgewogICAgICAgIGNoYXJfdHlwZSBfX29s ZCA9IHRoaXMtPmZpbGwoKTsKICAgICAgICBfTV9maWxsID0gX19jaDsKICAgICAgICByZXR1cm4g X19vbGQ7CiAgICAgIH0KCgogICAgICBsb2NhbGUKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBf X2xvYyk7CgogICAgICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZh dWx0KSBjb25zdDsKCiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3Q7 CgogICAgcHJvdGVjdGVkOgoKICAgICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFzZSgpCiAgICAgIHsg fQoKICAgICAgdm9pZAogICAgICBpbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+ KiBfX3NiKTsKCiAgICAgIGJvb2wKICAgICAgX01fY2hlY2tfZmFjZXQoY29uc3QgbG9jYWxlOjpm YWNldCogX19mKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKCFfX2YpCiAgICAgICAgICBfX3Ro cm93X2JhZF9jYXN0KCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIHZvaWQK ICAgICAgX01fY2FjaGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpOwogICAgfTsKfQoKCgoj IDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MudGNjIiAxIDMKIyAzNCAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAg IGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpjbGVhcihpb3N0YXRlIF9fc3RhdGUpCiAgICB7 CiAgICAgIGlmICh0aGlzLT5yZGJ1ZigpKQogICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9f c3RhdGU7CiAgICAgIGVsc2UKICAgICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGUg fCBiYWRiaXQ7CiAgICAgIGlmICgodGhpcy0+cmRzdGF0ZSgpICYgdGhpcy0+ZXhjZXB0aW9ucygp KSkKICAgICAgICBfX3Rocm93X2lvc19mYWlsdXJlKCJiYXNpY19pb3M6OmNsZWFyKGlvc3RhdGUp IGNhdXNlZCBleGNlcHRpb24iKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAg ICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6cmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFy VCwgX1RyYWl0cz4qIF9fc2IpCiAgICB7CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U cmFpdHM+KiBfX29sZCA9IF9NX3N0cmVhbWJ1ZjsKICAgICAgX01fc3RyZWFtYnVmID0gX19zYjsK ICAgICAgdGhpcy0+Y2xlYXIoKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pb3M8X0NoYXJU LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpjb3B5Zm10KGNvbnN0 IGJhc2ljX2lvcyYgX19yaHMpCiAgICB7CgoKCgogICAgICBfV29yZHMqIF9fd29yZHMgPSAoX19y aHMuX01fd29yZF9zaXplIDw9IF9TX2xvY2FsX3dvcmRfc2l6ZSkgPwogICAgICAgIF9NX2xvY2Fs X3dvcmQgOiBuZXcgX1dvcmRzW19fcmhzLl9NX3dvcmRfc2l6ZV07CgoKICAgICAgX0NhbGxiYWNr X2xpc3QqIF9fY2IgPSBfX3Jocy5fTV9jYWxsYmFja3M7CiAgICAgIGlmIChfX2NiKQogICAgICAg IF9fY2ItPl9NX2FkZF9yZWZlcmVuY2UoKTsKICAgICAgX01fY2FsbF9jYWxsYmFja3MoZXJhc2Vf ZXZlbnQpOwogICAgICBpZiAoX01fd29yZCAhPSBfTV9sb2NhbF93b3JkKQogICAgICAgIHsKICAg ICAgICAgIGRlbGV0ZSBbXSBfTV93b3JkOwogICAgICAgICAgX01fd29yZCA9IDA7CiAgICAgICAg fQogICAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcygpOwoKICAgICAgX01fY2FsbGJhY2tzID0gX19j YjsKICAgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgX19yaHMuX01fd29yZF9zaXplOyArK19f aSkKICAgICAgICBfX3dvcmRzW19faV0gPSBfX3Jocy5fTV93b3JkW19faV07CiAgICAgIGlmIChf TV93b3JkICE9IF9NX2xvY2FsX3dvcmQpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIF9N X3dvcmQ7CiAgICAgICAgICBfTV93b3JkID0gMDsKICAgICAgICB9CiAgICAgIF9NX3dvcmQgPSBf X3dvcmRzOwogICAgICBfTV93b3JkX3NpemUgPSBfX3Jocy5fTV93b3JkX3NpemU7CgogICAgICB0 aGlzLT5mbGFncyhfX3Jocy5mbGFncygpKTsKICAgICAgdGhpcy0+d2lkdGgoX19yaHMud2lkdGgo KSk7CiAgICAgIHRoaXMtPnByZWNpc2lvbihfX3Jocy5wcmVjaXNpb24oKSk7CiAgICAgIHRoaXMt PnRpZShfX3Jocy50aWUoKSk7CiAgICAgIHRoaXMtPmZpbGwoX19yaHMuZmlsbCgpKTsKCiAgICAg IHRoaXMtPmV4Y2VwdGlvbnMoX19yaHMuZXhjZXB0aW9ucygpKTsKCiAgICAgIF9NX2NhbGxfY2Fs bGJhY2tzKGNvcHlmbXRfZXZlbnQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNoYXIKICAgIGJhc2lj X2lvczxfQ2hhclQsIF9UcmFpdHM+OjpuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVs dCkgY29uc3QKICAgIHsKICAgICAgY2hhciBfX3JldCA9IF9fZGZhdWx0OwogICAgICBpZiAoX01f Y2hlY2tfZmFjZXQoX01fZmN0eXBlKSkKICAgICAgICBfX3JldCA9IF9NX2ZjdHlwZS0+bmFycm93 KF9fYywgX19kZmF1bHQpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIF9DaGFyVAogICAgYmFzaWNfaW9z PF9DaGFyVCwgX1RyYWl0cz46OndpZGVuKGNoYXIgX19jKSBjb25zdAogICAgewogICAgICBjaGFy X3R5cGUgX19yZXQgPSBjaGFyX3R5cGUoKTsKICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zj dHlwZSkpCiAgICAgICAgX19yZXQgPSBfTV9mY3R5cGUtPndpZGVuKF9fYyk7CiAgICAgIHJldHVy biBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGxvY2FsZQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmltYnVlKGNv bnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGxvY2FsZSBfX29sZCh0aGlzLT5nZXRsb2Mo KSk7CiAgICAgIGlvc19iYXNlOjppbWJ1ZShfX2xvYyk7CiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhf X2xvYyk7CiAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICE9IDApCiAgICAgICAgdGhpcy0+cmRidWYo KS0+cHViaW1idWUoX19sb2MpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lv czxfQ2hhclQsIF9UcmFpdHM+Ojppbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+ KiBfX3NiKQogICAgewoKICAgICAgaW9zX2Jhc2U6Ol9NX2luaXQoKTsKICAgICAgX01fY2FjaGVf ZmFjZXRzKF9NX2lvc19sb2NhbGUpOwogICAgICBfTV90aWUgPSAwOwojIDE1OSAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy50Y2MiIDMKICAgICAgX01fZmlsbCA9IDA7CiAgICAg IF9NX2ZpbGxfaW5pdCA9IGZhbHNlOwoKICAgICAgX01fZXhjZXB0aW9uID0gZ29vZGJpdDsKICAg ICAgX01fc3RyZWFtYnVmID0gX19zYjsKICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zYiA/ IGdvb2RiaXQgOiBiYWRiaXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpf TV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgaWYgKGhhc19m YWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mY3R5cGUgPSAmdXNlX2ZhY2V0 PF9fY3R5cGVfdHlwZT4oX19sb2MpOwogICAgICBlbHNlCiAgICAgICAgX01fZmN0eXBlID0gMDsK CiAgICAgIGlmIChoYXNfZmFjZXQ8X19udW1wdXRfdHlwZT4oX19sb2MpKQogICAgICAgIF9NX2Zu dW1wdXQgPSAmdXNlX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKTsKICAgICAgZWxzZQogICAg ICAgIF9NX2ZudW1wdXQgPSAwOwogICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9f bG9jKSkKICAgICAgICBfTV9mbnVtZ2V0ID0gJnVzZV9mYWNldDxfX251bWdldF90eXBlPihfX2xv Yyk7CiAgICAgIGVsc2UKICAgICAgICBfTV9mbnVtZ2V0ID0gMDsKICAgIH0KCgoKCiAgZXh0ZXJu IHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg YmFzaWNfaW9zPHdjaGFyX3Q+Owp9CiMgMjA4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz aWNfaW9zLmgiIDIgMwojIDUyICIvdXNyL2luY2x1ZGUvZysrLXYzL2lvcyIgMiAzCiMgNDYgIi91 c3IvaW5jbHVkZS9nKystdjMvb3N0cmVhbSIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0 cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAg ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Ry YWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlw ZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3Ry ZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4gX19p b3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19v c3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9U cmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBf X29zdHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hh clQ+IF9fY3R5cGVfdHlwZTsKCgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19vc3RyZWFtKF9f c3RyZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKICAgICAg dmlydHVhbAogICAgICB+YmFzaWNfb3N0cmVhbSgpIHsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsK ICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsKCgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg IG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFtX3R5cGUmKSk7Cgog ICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYp KF9faW9zX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChp b3NfYmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2UmKSk7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg ICAgIG9wZXJhdG9yPDwobG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9w ZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg IG9wZXJhdG9yPDwoYm9vbCBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh dG9yPDwoc2hvcnQgX19uKQogICAgICB7CiAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10 ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgaWYgKF9fZm10 ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpoZXgpCiAgICAgICAgICByZXR1 cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX24p KSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGlj X2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv cGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0 b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsgfQoKICAgICAgX19vc3RyZWFt X3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW50IF9fbikKICAgICAgewogICAgICAgIGlvc19iYXNl OjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwog ICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4 KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQg bG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNp Z25lZCBpbnQ+KF9fbikpKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3Bl cmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsKICAgICAgfQoKICAgICAgX19vc3RyZWFt X3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IF9fbikKICAgICAgeyByZXR1cm4g dGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsgfQoKCiAg ICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgbG9uZyBfX24pOwoKICAg ICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9f bik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoZG91YmxlIF9fZik7 CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChmbG9hdCBfX2YpCiAgICAg IHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX2YpKTsgfQoK ICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBkb3VibGUgX19mKTsK CiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9fcCk7 CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBl KiBfX3NiKTsKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgcHV0KGNoYXJfdHlwZSBfX2Mp OwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHdyaXRlKGNvbnN0IGNoYXJfdHlwZSogX19z LCBzdHJlYW1zaXplIF9fbik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgZmx1c2goKTsK CgogICAgICBwb3NfdHlwZQogICAgICB0ZWxscCgpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg ICAgIHNlZWtwKHBvc190eXBlKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChv ZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOwogICAgfTsKCgogIHRlbXBsYXRlIDx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46OnNlbnRyeQogICAgewoKICAgICAgYm9vbCBfTV9vazsKICAgICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9NX29zOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGlj aXQKICAgICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zKTsKCiAg ICAgIH5zZW50cnkoKQogICAgICB7CgogICAgICAgIGlmIChfTV9vcy5mbGFncygpICYgaW9zX2Jh c2U6OnVuaXRidWYgJiYgIXVuY2F1Z2h0X2V4Y2VwdGlvbigpKQogICAgICAgICAgewoKICAgICAg ICAgICAgaWYgKF9NX29zLnJkYnVmKCkgJiYgX01fb3MucmRidWYoKS0+cHVic3luYygpID09IC0x KQogICAgICAgICAgICAgIF9NX29zLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg ICAgfQogICAgICB9CgogICAgICBvcGVyYXRvciBib29sKCkKICAgICAgeyByZXR1cm4gX01fb2s7 IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYyk7CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgX19vdXQud2lkZW4o X19jKSk7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxj aGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz PiYgX19vdXQsIGNoYXIgX19jKTsKCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNp Y19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNo YXIsIF9UcmFpdHM+JiBfX291dCwgc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0 IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+ CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19v c3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgdW5zaWduZWQgY2hhciBfX2MpCiAgICB7IHJl dHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m IF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAmCiAg ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0 IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh bTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJh aXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRz PgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHNpZ25lZCBjaGFyKiBfX3MpCiAg ICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7 IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry YWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291 dCwgY29uc3QgdW5zaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50 ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBlbmRsKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsg cmV0dXJuIGZsdXNoKF9fb3MucHV0KF9fb3Mud2lkZW4oJ1xuJykpKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBlbmRzKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19v cykKICAgIHsgcmV0dXJuIF9fb3MucHV0KF9DaGFyVCgpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBmbHVzaChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAg ICB7IHJldHVybiBfX29zLmZsdXNoKCk7IH0KCn0KCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9vc3RyZWFtLnRjYyIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9v c3RyZWFtLnRjYyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2xvY2FsZSIgMSAzCiMgNDMg Ii91c3IvaW5jbHVkZS9nKystdjMvbG9jYWxlIiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvY2Vycm5v IiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2crKy12My9jZXJybm8iIDMKCiMgMSAiL3Vzci9pbmNs dWRlL2Vycm5vLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2NlcnJubyIgMiAzCiMg MzkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCgoKIyAx ICIvdXNyL2luY2x1ZGUvZysrLXYzL2NtYXRoIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2crKy12 My9jbWF0aCIgMwojIDc5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2NtYXRoIiAzCm5hbWVzcGFjZSBz dGQKewoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19jbWF0aF9wb3dlcihfVHAsIHVu c2lnbmVkIGludCk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgX1RwCiAgICBf X2NtYXRoX2FicyhfVHAgX194KQogICAgewogICAgICByZXR1cm4gX194IDwgX1RwKCkgPyAtX194 IDogX194OwogICAgfQoKICBpbmxpbmUgZG91YmxlCiAgYWJzKGRvdWJsZSBfX3gpCiAgeyByZXR1 cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKICBpbmxpbmUgZmxvYXQKICBhYnMoZmxvYXQgX194 KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJs ZQogIGFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsKF9feCk7 IH0KCgogIGlubGluZSBmbG9hdAogIGFjb3MoZmxvYXQgX194KSB7IHJldHVybiA6OmFjb3NmKF9f eCk7IH0KCgoKCgogIHVzaW5nIDo6YWNvczsKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGFjb3Mo bG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFjb3NsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6 YXNpbjsKCgogIGlubGluZSBmbG9hdAogIGFzaW4oZmxvYXQgX194KSB7IHJldHVybiA6OmFzaW5m KF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhc2luKGxvbmcgZG91YmxlIF9f eCkgeyByZXR1cm4gOjphc2lubChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmF0YW47CgoKICBpbmxp bmUgZmxvYXQKICBhdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjphdGFuZihfX3gpOyB9CgoKCgoK CiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6 YXRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjphdGFuMjsKCgogIGlubGluZSBmbG9hdAogIGF0 YW4yKGZsb2F0IF9feSwgZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW4yZihfX3ksIF9feCk7IH0K CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbjIobG9uZyBkb3VibGUgX195LCBsb25n IGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbjJsKF9feSwgX194KTsgfQoKCgoKCgogIHVzaW5n IDo6Y2VpbDsKCgogIGlubGluZSBmbG9hdAogIGNlaWwoZmxvYXQgX194KSB7IHJldHVybiA6OmNl aWxmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjZWlsKGxvbmcgZG91Ymxl IF9feCkgeyByZXR1cm4gOjpjZWlsbChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmNvczsKCiAgaW5s aW5lIGZsb2F0CiAgY29zKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fY29zZihfX3gp OyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGNvcyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1 cm4gX19idWlsdGluX2Nvc2woX194KTsgfQoKICB1c2luZyA6OmNvc2g7CgoKICBpbmxpbmUgZmxv YXQKICBjb3NoKGZsb2F0IF9feCkgeyByZXR1cm4gOjpjb3NoZihfX3gpOyB9CgoKCgoKCiAgaW5s aW5lIGxvbmcgZG91YmxlCiAgY29zaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Y29zaGwo X194KTsgfQoKCgoKCiAgdXNpbmcgOjpleHA7CgoKICBpbmxpbmUgZmxvYXQKICBleHAoZmxvYXQg X194KSB7IHJldHVybiA6OmV4cGYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQog IGV4cChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6ZXhwbChfX3gpOyB9CgoKCgoKICB1c2lu ZyA6OmZhYnM7CgogIGlubGluZSBmbG9hdAogIGZhYnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9f YnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGZhYnMobG9uZyBk b3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9CgogIHVzaW5nIDo6 Zmxvb3I7CgoKICBpbmxpbmUgZmxvYXQKICBmbG9vcihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Zmxv b3JmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmbG9vcihsb25nIGRvdWJs ZSBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6Zm1vZDsKCgog IGlubGluZSBmbG9hdAogIGZtb2QoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6Zm1v ZGYoX194LCBfX3kpOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZtb2QobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6Zm1vZGwoX194LCBfX3kpOyB9 CgoKCgoKCiAgdXNpbmcgOjpmcmV4cDsKCgogIGlubGluZSBmbG9hdAogIGZyZXhwKGZsb2F0IF9f eCwgaW50KiBfX2V4cCkgeyByZXR1cm4gOjpmcmV4cGYoX194LCBfX2V4cCk7IH0KCgoKCgoKICBp bmxpbmUgbG9uZyBkb3VibGUKICBmcmV4cChsb25nIGRvdWJsZSBfX3gsIGludCogX19leHApIHsg cmV0dXJuIDo6ZnJleHBsKF9feCwgX19leHApOyB9CgoKCgoKCiAgdXNpbmcgOjpsZGV4cDsKCgog IGlubGluZSBmbG9hdAogIGxkZXhwKGZsb2F0IF9feCwgaW50IF9fZXhwKSB7IHJldHVybiA6Omxk ZXhwZihfX3gsIF9fZXhwKTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsZGV4cChs b25nIGRvdWJsZSBfX3gsIGludCBfX2V4cCkgeyByZXR1cm4gOjpsZGV4cGwoX194LCBfX2V4cCk7 IH0KCgoKCgoKICB1c2luZyA6OmxvZzsKCgogIGlubGluZSBmbG9hdAogIGxvZyhmbG9hdCBfX3gp IHsgcmV0dXJuIDo6bG9nZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbG9n KGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2dsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6 bG9nMTA7CgoKICBpbmxpbmUgZmxvYXQKICBsb2cxMChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9n MTBmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsb2cxMChsb25nIGRvdWJs ZSBfX3gpIHsgcmV0dXJuIDo6bG9nMTBsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6bW9kZjsKCgog IGlubGluZSBmbG9hdAogIG1vZGYoZmxvYXQgX194LCBmbG9hdCogX19pcHRyKSB7IHJldHVybiA6 Om1vZGZmKF9feCwgX19pcHRyKTsgfQojIDM4MiAiL3Vzci9pbmNsdWRlL2crKy12My9jbWF0aCIg MwogIGlubGluZSBsb25nIGRvdWJsZQogIG1vZGYobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs ZSogX19pcHRyKSB7IHJldHVybiA6Om1vZGZsKF9feCwgX19pcHRyKTsgfQojIDM5NSAiL3Vzci9p bmNsdWRlL2crKy12My9jbWF0aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGlu ZSBfVHAKICAgIF9fcG93X2hlbHBlcihfVHAgX194LCBpbnQgX19uKQogICAgewogICAgICByZXR1 cm4gX19uIDwgMAogICAgICAgID8gX1RwKDEpL19fY21hdGhfcG93ZXIoX194LCAtX19uKQogICAg ICAgIDogX19jbWF0aF9wb3dlcihfX3gsIF9fbik7CiAgICB9CgogIHVzaW5nIDo6cG93OwoKCiAg aW5saW5lIGZsb2F0CiAgcG93KGZsb2F0IF9feCwgZmxvYXQgX195KSB7IHJldHVybiA6OnBvd2Yo X194LCBfX3kpOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIHBvdyhsb25nIGRvdWJs ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgeyByZXR1cm4gOjpwb3dsKF9feCwgX195KTsgfQoKCgoK CgogIGlubGluZSBkb3VibGUKICBwb3coZG91YmxlIF9feCwgaW50IF9faSkKICB7IHJldHVybiBf X3Bvd19oZWxwZXIoX194LCBfX2kpOyB9CgogIGlubGluZSBmbG9hdAogIHBvdyhmbG9hdCBfX3gs IGludCBfX24pCiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19uKTsgfQoKICBpbmxpbmUg bG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUgX194LCBpbnQgX19uKQogIHsgcmV0dXJuIF9f cG93X2hlbHBlcihfX3gsIF9fbik7IH0KCiAgdXNpbmcgOjpzaW47CgogIGlubGluZSBmbG9hdAog IHNpbihmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3NpbmYoX194KTsgfQoKICBpbmxp bmUgbG9uZyBkb3VibGUKICBzaW4obG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRp bl9zaW5sKF9feCk7IH0KCiAgdXNpbmcgOjpzaW5oOwoKCiAgaW5saW5lIGZsb2F0CiAgc2luaChm bG9hdCBfX3gpIHsgcmV0dXJuIDo6c2luaGYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRv dWJsZQogIHNpbmgobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnNpbmhsKF9feCk7IH0KCgoK CgogIHVzaW5nIDo6c3FydDsKCiAgaW5saW5lIGZsb2F0CiAgc3FydChmbG9hdCBfX3gpCiAgeyBy ZXR1cm4gX19idWlsdGluX3NxcnRmKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc3Fy dChsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3NxcnRsKF9feCk7IH0KCiAg dXNpbmcgOjp0YW47CgoKICBpbmxpbmUgZmxvYXQKICB0YW4oZmxvYXQgX194KSB7IHJldHVybiA6 OnRhbmYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIHRhbihsb25nIGRvdWJs ZSBfX3gpIHsgcmV0dXJuIDo6dGFubChfX3gpOyB9CgoKCgoKICB1c2luZyA6OnRhbmg7CgoKICBp bmxpbmUgZmxvYXQKICB0YW5oKGZsb2F0IF9feCkgeyByZXR1cm4gOjp0YW5oZihfX3gpOyB9CgoK CgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgdGFuaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu IDo6dGFuaGwoX194KTsgfQoKCgoKfQoKCgoKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9mcGNsYXNzaWZ5KF9UcCBf X2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3Np ZnlmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lm eSAoX19mKSA6IF9fZnBjbGFzc2lmeWwgKF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4KICAgIGludAogICAgX19jYXB0dXJlX2lzZmluaXRlKF9UcCBfX2YpIHsgcmV0dXJuIChzaXpl b2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2Zpbml0ZWYgKF9fZikgOiBzaXplb2YgKF9f ZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19maW5pdGUgKF9fZikgOiBfX2Zpbml0ZWwgKF9fZikp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzaW5m KF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2lz aW5mZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2lzaW5mIChf X2YpIDogX19pc2luZmwgKF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu dAogICAgX19jYXB0dXJlX2lzbmFuKF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0g c2l6ZW9mIChmbG9hdCkgPyBfX2lzbmFuZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2Yg KGRvdWJsZSkgPyBfX2lzbmFuIChfX2YpIDogX19pc25hbmwgKF9fZikpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzbm9ybWFsKF9UcCBfX2YpIHsg cmV0dXJuICgoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAo X19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9f ZikgOiBfX2ZwY2xhc3NpZnlsIChfX2YpKSA9PSBGUF9OT1JNQUwpOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX3NpZ25iaXQoX1RwIF9fZikgeyByZXR1 cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fc2lnbmJpdGYgKF9fZikgOiBz aXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19zaWduYml0IChfX2YpIDogX19zaWdu Yml0bCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2Nh cHR1cmVfaXNncmVhdGVyKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fYnVpbHRp bl9pc2dyZWF0ZXIgKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg ICBpbnQKICAgICBfX2NhcHR1cmVfaXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQog ICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2dyZWF0ZXJlcXVhbCAoX19mMSwgX19mMik7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2xlc3MoX1Rw IF9fZjEsIF9UcCBfX2YyKSB7IHJldHVybiBfX2J1aWx0aW5faXNsZXNzIChfX2YxLCBfX2YyKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVz c2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJldHVybiBfX2J1aWx0aW5faXNsZXNz ZXF1YWwgKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQK ICAgICBfX2NhcHR1cmVfaXNsZXNzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyBy ZXR1cm4gX19idWlsdGluX2lzbGVzc2dyZWF0ZXIgKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX1RwIF9f ZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc3Vub3JkZXJlZCAoX19mMSwg X19mMik7IH0KfQojIDU4NyAiL3Vzci9pbmNsdWRlL2crKy12My9jbWF0aCIgMwpuYW1lc3BhY2Ug X19nbnVfY3h4CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGZwY2xhc3Np ZnkoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2ZwY2xhc3NpZnkoX19mKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzZmluaXRlKF9UcCBfX2YpIHsgcmV0dXJu IF9fY2FwdHVyZV9pc2Zpbml0ZShfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg IGludAogICAgaXNpbmYoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzaW5mKF9fZik7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc25hbihfVHAgX19mKSB7IHJl dHVybiBfX2NhcHR1cmVfaXNuYW4oX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBpbnQKICAgIGlzbm9ybWFsKF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc25vcm1hbChf X2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgc2lnbmJpdChfVHAg X19mKSB7IHJldHVybiBfX2NhcHR1cmVfc2lnbmJpdChfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4KICAgIGludAogICAgaXNncmVhdGVyKF9UcCBfX2YxLCBfVHAgX19mMikgeyByZXR1 cm4gX19jYXB0dXJlX2lzZ3JlYXRlcihfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+CiAgICBpbnQKICAgIGlzZ3JlYXRlcmVxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAg IHsgcmV0dXJuIF9fY2FwdHVyZV9pc2dyZWF0ZXJlcXVhbChfX2YxLCBfX2YyKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzcyhfVHAgX19mMSwgX1RwIF9fZjIp IHsgcmV0dXJuIF9fY2FwdHVyZV9pc2xlc3MoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2xlc3NlcXVhbChfVHAgX19mMSwgX1RwIF9fZjIpCiAg ICB7IHJldHVybiBfX2NhcHR1cmVfaXNsZXNzZXF1YWwoX19mMSwgX19mMik7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2xlc3NncmVhdGVyKF9UcCBfX2YxLCBfVHAg X19mMikKICAgIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2xlc3NncmVhdGVyKF9fZjEsIF9fZjIpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXN1bm9yZGVyZWQoX1RwIF9f ZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzdW5vcmRlcmVkKF9fZjEsIF9f ZjIpOyB9Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6ZnBjbGFzc2lmeTsK ICB1c2luZyBfX2dudV9jeHg6OmlzZmluaXRlOwogIHVzaW5nIF9fZ251X2N4eDo6aXNpbmY7CiAg dXNpbmcgX19nbnVfY3h4Ojppc25hbjsKICB1c2luZyBfX2dudV9jeHg6Omlzbm9ybWFsOwogIHVz aW5nIF9fZ251X2N4eDo6c2lnbmJpdDsKICB1c2luZyBfX2dudV9jeHg6OmlzZ3JlYXRlcjsKICB1 c2luZyBfX2dudV9jeHg6OmlzZ3JlYXRlcmVxdWFsOwogIHVzaW5nIF9fZ251X2N4eDo6aXNsZXNz OwogIHVzaW5nIF9fZ251X2N4eDo6aXNsZXNzZXF1YWw7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xl c3NncmVhdGVyOwogIHVzaW5nIF9fZ251X2N4eDo6aXN1bm9yZGVyZWQ7Cn0KCgoKCiMgMSAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL2NtYXRoLnRjYyIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9jbWF0aC50Y2MiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgX1RwCiAgICBfX2NtYXRoX3Bvd2VyKF9UcCBfX3gsIHVuc2lnbmVkIGludCBf X24pCiAgICB7CiAgICAgIF9UcCBfX3kgPSBfX24gJSAyID8gX194IDogMTsKCiAgICAgIHdoaWxl IChfX24gPj49IDEpCiAgICAgICAgewogICAgICAgICAgX194ID0gX194ICogX194OwogICAgICAg ICAgaWYgKF9fbiAlIDIpCiAgICAgICAgICAgIF9feSA9IF9feSAqIF9feDsKICAgICAgICB9Cgog ICAgICByZXR1cm4gX195OwogICAgfQp9CiMgNjYyICIvdXNyL2luY2x1ZGUvZysrLXYzL2NtYXRo IiAyIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAy IDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9saW1pdHMiIDEgMwojIDQ3ICIvdXNyL2luY2x1 ZGUvZysrLXYzL2xpbWl0cyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGlu dXgtZ251L2JpdHMvY3B1X2xpbWl0cy5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL2crKy12My9s aW1pdHMiIDIgMwojIDg4NyAiL3Vzci9pbmNsdWRlL2crKy12My9saW1pdHMiIDMKbmFtZXNwYWNl IHN0ZAp7CiAgZW51bSBmbG9hdF9yb3VuZF9zdHlsZQogIHsKICAgIHJvdW5kX2luZGV0ZXJtaW5h dGUgPSAtMSwKICAgIHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwKICAgIHJvdW5kX3RvX25lYXJlc3Qg PSAxLAogICAgcm91bmRfdG93YXJkX2luZmluaXR5ID0gMiwKICAgIHJvdW5kX3Rvd2FyZF9uZWdf aW5maW5pdHkgPSAzCiAgfTsKCiAgZW51bSBmbG9hdF9kZW5vcm1fc3R5bGUKICB7CiAgICBkZW5v cm1faW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgZGVub3JtX2Fic2VudCA9IDAsCiAgICBkZW5vcm1f cHJlc2VudCA9IDEKICB9OwoKCgoKICBzdHJ1Y3QgX19udW1lcmljX2xpbWl0c19iYXNlCiAgewog ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSBmYWxzZTsKCiAgICBzdGF0aWMg Y29uc3QgaW50IGRpZ2l0cyA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMDsK ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg PSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAwOwoKICAgIHN0YXRpYyBjb25z dCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50 MTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgc3RhdGlj IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X2luZmluaXR5ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0g ZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwog ICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fi c2VudDsKICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfYm91bmRlZCA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0g ZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgIHN0YXRpYyBj b25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGZsb2F0 X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgfTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzIDogcHVibGljIF9f bnVtZXJpY19saW1pdHNfYmFzZQogICAgewogICAgICBzdGF0aWMgX1RwIG1pbigpIHRocm93KCkg eyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIG1heCgpIHRo cm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIGVw c2lsb24oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3Rh dGljIF9UcCByb3VuZF9lcnJvcigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigw KTsgfQogICAgICBzdGF0aWMgX1RwIGluZmluaXR5KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNf Y2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgcXVpZXRfTmFOKCkgdGhyb3coKSB7IHJl dHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgc2lnbmFsaW5nX05h TigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMg X1RwIGRlbm9ybV9taW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0K ICAgIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGJvb2w+CiAg ICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAg IHN0YXRpYyBib29sIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgICAg IHN0YXRpYyBib29sIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gdHJ1ZTsgfQoKICAgICAg c3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAxOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0 czEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog ICAgICBzdGF0aWMgYm9vbCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsg fQogICAgICBzdGF0aWMgYm9vbCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g ZmFsc2U7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAg c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQx MCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg ZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBib29s IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMg Ym9vbCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0 YXRpYyBib29sIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9 CiAgICAgIHN0YXRpYyBib29sIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZh bHNlOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX21vZHVsbyA9IGZhbHNlOwoKCgoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMg PSB0cnVlCiAgICAgICAgICAgICAgIHx8IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp bnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5 bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCiAgdGVtcGxhdGU8 PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjaGFyIG1pbigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gKGNoYXIpKC0xMjcgLSAxKTsgfQogICAgICBzdGF0aWMgY2hh ciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIChjaGFyKTEyNzsgfQoKICAgICAgc3RhdGlj IGNvbnN0IGludCBkaWdpdHMgPSA3OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0g NzsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0 YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAg ICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigp OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1h eF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAw OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0 X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgY2hhciBpbmZp bml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFy IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRp YyBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQog ICAgICBzdGF0aWMgY2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDxjaGFyPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl ID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEwNzEgIi91c3IvaW5jbHVkZS9nKystdjMv bGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNpZ25lZCBj aGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7 CgogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAo LTEyNyAtIDEpOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtYXgoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDEyNzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3OwogICAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGlj IGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBlcHNpbG9uKCkg dGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciByb3Vu ZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0 IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu dDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBz dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVp ZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFO ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y bSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9z cyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhyb3coKQog ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGlj IHNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBzaWduYWxpbmdf TmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7 IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5k ZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5k X3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDExMjggIi91 c3IvaW5jbHVkZS9nKystdjMvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVy aWNfbGltaXRzPHVuc2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtYXgo KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgxMjcgKiAyICsgMSk7IH0KCiAgICAgIHN0YXRpYyBj b25zdCBpbnQgZGlnaXRzID0gODsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf ZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3Rh dGljIHVuc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQog ICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAg ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0 IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu dDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVu c2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0X05h TigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7 IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGlj IHVuc2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ll YzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBj b25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf YmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAg ICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8d2NoYXJfdD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHdjaGFyX3QgbWluKCkg dGhyb3coKQogICAgICB7IHJldHVybiAod2NoYXJfdCkoLTIxNDc0ODM2NDdMIC0gMSk7IH0KICAg ICAgc3RhdGljIHdjaGFyX3QgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAod2NoYXJfdCky MTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAg c3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgd2NoYXJfdCBlcHNpbG9uKCkgdGhyb3co KQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHJvdW5kX2Vycm9yKCkg dGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l eHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwog ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2lu ZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsK ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3Jt X2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7 CgogICAgICBzdGF0aWMgd2NoYXJfdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4g d2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHF1aWV0X05hTigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHNpZ25hbGluZ19O YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2No YXJfdCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k dWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog ICAgfTsKIyAxMjQxICIvdXNyL2luY2x1ZGUvZysrLXYzL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4K ICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxzaG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHNob3J0IG1pbigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gKC0zMjc2NyAtIDEpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBt YXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMyNzY3OyB9CgogICAgICBzdGF0aWMgY29uc3Qg aW50IGRpZ2l0cyA9IDE1OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNDsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0 ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBz aG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBz aG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3Rh dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1p bl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu YWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUg aGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k ZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHNob3J0IGluZmluaXR5KCkgdGhyb3co KQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBxdWlldF9OYU4o KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHNob3J0KCk7IH0KICAgICAgc3RhdGljIHNob3J0IHNp Z25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHNob3J0KCk7IH0KICAgICAgc3Rh dGljIHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHNob3J0KCk7IH0K CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19t b2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGlj IGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87 CiAgICB9OwojIDEyOTggIi91c3IvaW5jbHVkZS9nKystdjMvbGltaXRzIiAzCiAgdGVtcGxhdGU8 PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0PgogICAgewogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5z aWduZWQgc2hvcnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRp YyB1bnNpZ25lZCBzaG9ydCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgzMjc2NyAqIDIg KyAxKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAxNjsKICAgICAgc3RhdGlj IGNvbnN0IGludCBkaWdpdHMxMCA9IDQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25l ZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg aW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGVwc2lsb24oKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHJvdW5k X2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3Qg aW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50 MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll dF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3Jt ID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz ID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICBz dGF0aWMgdW5zaWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz dGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNo b3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu c2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGVub3JtX21p bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDAp OyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96 ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8 aW50PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7 CgogICAgICBzdGF0aWMgaW50IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGludCkoLTIx NDc0ODM2NDdMIC0gMSk7IH0KICAgICAgc3RhdGljIGludCBtYXgoKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIChpbnQpMjE0NzQ4MzY0N0w7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz ID0gMzE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p bnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwog ICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGludCBlcHNpbG9u KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBpbnQgcm91bmRfZXJy b3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9 IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGlj IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h TiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBk ZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBm YWxzZTsKCiAgICAgIHN0YXRpYyBpbnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAgc3RhdGljIGludCBxdWlldF9OYU4oKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAgc3RhdGljIGlu dCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+ KDApOyB9CiAgICAgIHN0YXRpYyBpbnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVj NTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29u c3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2Jl Zm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTQxMCAiL3Vzci9pbmNsdWRlL2cr Ky12My9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5z aWduZWQgaW50PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9 IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1pbigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gMDsgfQogICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuICh1bnNpZ25lZCkoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAgICBz dGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0 czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog ICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGlj IGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l eHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3Rh dGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHF1aWV0 X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pigw KTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGlj IHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf Y2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1 NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25z dCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm b3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBz dHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgbWluKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAoLTIxNDc0ODM2NDdMIC0gMSk7IH0KICAgICAgc3RhdGljIGxvbmcgbWF4 KCkgdGhyb3coKQogICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNv bnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19l eGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0 aWMgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRp YyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBz dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9 IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3Np Z25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls ZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBpbmZpbml0eSgpIHRocm93 KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxv bmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigw KTsgfQogICAgICBzdGF0aWMgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBkZW5vcm1fbWlu KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQoKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9 IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg ZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07 CiMgMTUyMiAiL3Vzci9pbmNsdWRlL2crKy12My9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBz dHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxv bmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25l ZCBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDIxNDc0ODM2NDdMICogMlUgKyAx KTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMjsKICAgICAgc3RhdGljIGNv bnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50 IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZXBzaWxvbigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9lcnJv cigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBt aW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg Y29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFO ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRl bm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh bHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1 bnNpZ25lZCBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2lnbmFs aW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u Zz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0 cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZs b2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoK CgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nIGxvbmc+CiAg ICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAg IHN0YXRpYyBsb25nIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTkyMjMzNzIw MzY4NTQ3NzU4MDdMTCAtIDEpOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWF4KCkgdGhyb3co KQogICAgICB7IHJldHVybiA5MjIzMzcyMDM2ODU0Nzc1ODA3TEw7IH0KCiAgICAgIHN0YXRpYyBj b25zdCBpbnQgZGlnaXRzID0gNjM7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAx ODsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0 YXRpYyBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAg ICBzdGF0aWMgbG9uZyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAw OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1h eF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAw OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0 X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBsb25n IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+ KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7 IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxv bmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9u ZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVl OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0 X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDE2 MzQgIi91c3IvaW5jbHVkZS9nKystdjMvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0 IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxv bmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVu c2lnbmVkIGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICg5MjIzMzcyMDM2 ODU0Nzc1ODA3TEwgKiAyVUxMICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz ID0gNjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxOTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQg bG9uZyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3Rh dGljIHVuc2lnbmVkIGxvbmcgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBz dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEw ID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2ln bmVkIGxvbmcgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBs b25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHNpZ25h bGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv bmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBkZW5vcm1fbWlu KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+ KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1 ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2Fy ZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1p dHM8ZmxvYXQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0g dHJ1ZTsKCiAgICAgIHN0YXRpYyBmbG9hdCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEu MTc1NDk0MzVlLTM4RjsgfQogICAgICBzdGF0aWMgZmxvYXQgbWF4KCkgdGhyb3coKQogICAgICB7 IHJldHVybiAzLjQwMjgyMzQ3ZSszOEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz ID0gMjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA2OwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p bnRlZ2VyID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgZmxvYXQgZXBz aWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xOTIwOTI5MGUtMDdGOyB9CiAgICAgIHN0 YXRpYyBmbG9hdCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4wRjsgfQoK ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTI1OwogICAgICBzdGF0aWMg Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTM3OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1h eF9leHBvbmVudCA9IDEyODsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9 IDM4OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZs b2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgZmxvYXQg aW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KICAgICAgc3RhdGljIGZs b2F0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAgICBzdGF0 aWMgZmxvYXQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQog ICAgICBzdGF0aWMgZmxvYXQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4w RjsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh cmRfemVybzsKICAgIH07CiMgMTc2NSAiL3Vzci9pbmNsdWRlL2crKy12My9saW1pdHMiIDMKICB0 ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZG91YmxlPgogICAgewogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgZG91 YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDg7 IH0KICAgICAgc3RhdGljIGRvdWJsZSBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuNzk3 NjkzMTM0ODYyMzE1N2UrMzA4OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDUz OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTU7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVn ZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAg ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBkb3VibGUgZXBzaWxv bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMi4yMjA0NDYwNDkyNTAzMTMxZS0xNjsgfQogICAg ICBzdGF0aWMgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjA7 IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTEwMjE7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzA3OwogICAgICBzdGF0aWMgY29uc3Qg aW50IG1heF9leHBvbmVudCA9IDEwMjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u ZW50MTAgPSAzMDg7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPQogICAgICAgICAgICAgIGRlbm9y bV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNl OwoKICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4g MC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJl dHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhy b3coKQogICAgICB7IHJldHVybiAwLjA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ll YzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMg Y29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz c19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv dW5kX3N0eWxlID0KICAgICAgICAgICAgICByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTg0 NCAiL3Vzci9pbmNsdWRlL2crKy12My9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3Qg bnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtaW4oKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuIDMuMzYyMTAzMTQzMTEyMDkzNTA2MjZlLTQ5MzJMOyB9CiAg ICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTg5 NzMxNDk1MzU3MjMxNzY1MDJlKzQ5MzJMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0 cyA9IDY0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTg7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGRv dWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjA4NDIwMjE3MjQ4NTUwNDQz NDAxZS0xOUw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3co KQogICAgICB7IHJldHVybiAxLjBMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv bmVudCA9IC0xNjM4MTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC00 OTMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDE2Mzg0OwogICAgICBz dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gNDkzMjsKCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf cXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdf TmFOID0KICAgICAgICAgICAgICAgIGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVu b3JtX3N0eWxlIGhhc19kZW5vcm0gPQogICAgICAgICAgICAgICAgZGVub3JtX2Fic2VudDsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0KICAgICAgICAgICAgICAgIGZh bHNlOwoKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7 IHJldHVybiAwLjBMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHNpZ25h bGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0KICAgICAgc3RhdGljIGxv bmcgZG91YmxlIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0KCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k dWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGlj IGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0KICAgICAgICByb3VuZF90b3dh cmRfemVybzsKICAgIH07CiMgMTkyNCAiL3Vzci9pbmNsdWRlL2crKy12My9saW1pdHMiIDMKfQoj IDQ0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKIyAx ICIvdXNyL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2cr Ky12My90eXBlaW5mbyIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIF9fY3h4YWJpdjEKewog IGNsYXNzIF9fY2xhc3NfdHlwZV9pbmZvOwp9CiMgNTUgIi91c3IvaW5jbHVkZS9nKystdjMvdHlw ZWluZm8iIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgY2xhc3MgdHlwZV9pbmZvCiAgewogIHB1Ymxp YzoKCgoKCiAgICB2aXJ0dWFsIH50eXBlX2luZm8oKTsKCiAgcHJpdmF0ZToKCiAgICB0eXBlX2lu Zm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsKICAgIHR5cGVfaW5mbyhjb25zdCB0eXBl X2luZm8mKTsKCiAgcHJvdGVjdGVkOgogICAgY29uc3QgY2hhciAqX19uYW1lOwoKICBwcm90ZWN0 ZWQ6CiAgICBleHBsaWNpdCB0eXBlX2luZm8oY29uc3QgY2hhciAqX19uKTogX19uYW1lKF9fbikg eyB9CgogIHB1YmxpYzoKCgoKICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdAogICAgeyByZXR1 cm4gX19uYW1lOyB9CiMgOTggIi91c3IvaW5jbHVkZS9nKystdjMvdHlwZWluZm8iIDMKICAgIGJv b2wgYmVmb3JlKGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiBfX25h bWUgPCBfX2FyZy5fX25hbWU7IH0KICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB0eXBlX2luZm8m IF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lID09IF9fYXJnLl9fbmFtZTsgfQoKICAg IGJvb2wgb3BlcmF0b3IhPShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1 cm4gIW9wZXJhdG9yPT0oX19hcmcpOyB9CgoKICBwdWJsaWM6CgogICAgdmlydHVhbCBib29sIF9f aXNfcG9pbnRlcl9wKCkgY29uc3Q7CgogICAgdmlydHVhbCBib29sIF9faXNfZnVuY3Rpb25fcCgp IGNvbnN0OwoKCgoKCgoKICAgIHZpcnR1YWwgYm9vbCBfX2RvX2NhdGNoKGNvbnN0IHR5cGVfaW5m byAqX190aHJfdHlwZSwgdm9pZCAqKl9fdGhyX29iaiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIF9fb3V0ZXIpIGNvbnN0OwoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb191cGNh c3QoY29uc3QgX19jeHhhYml2MTo6X19jbGFzc190eXBlX2luZm8gKl9fdGFyZ2V0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipfX29ial9wdHIpIGNvbnN0OwogIH07CgoKCiAg Y2xhc3MgYmFkX2Nhc3QgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9j YXN0KCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2Nhc3QoKSB0aHJvdygpOwogIH07 CgoKICBjbGFzcyBiYWRfdHlwZWlkIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAg ICBiYWRfdHlwZWlkICgpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF90eXBlaWQoKSB0 aHJvdygpOwogIH07Cn0KCn0KIyA0NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9m YWNldHMudGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNl dD4KICAgIGxvY2FsZQogICAgbG9jYWxlOjpjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19vdGhlcikg Y29uc3QKICAgIHsKICAgICAgX0ltcGwqIF9fdG1wID0gbmV3IF9JbXBsKCpfTV9pbXBsLCAxKTsK ICAgICAgX190bXAtPl9NX3JlcGxhY2VfZmFjZXQoX19vdGhlci5fTV9pbXBsLCAmX0ZhY2V0Ojpp ZCk7CiAgICAgIHJldHVybiBsb2NhbGUoX190bXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJvb2wKICAg IGxvY2FsZTo6b3BlcmF0b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYg c3RkOjpjb2xsYXRlPF9DaGFyVD4gX19jb2xsYXRlX3R5cGU7CiAgICAgIGNvbnN0IF9fY29sbGF0 ZV90eXBlJiBfX2NvbGxhdGUgPSB1c2VfZmFjZXQ8X19jb2xsYXRlX3R5cGU+KCp0aGlzKTsKICAg ICAgcmV0dXJuIChfX2NvbGxhdGUuY29tcGFyZShfX3MxLmRhdGEoKSwgX19zMS5kYXRhKCkgKyBf X3MxLmxlbmd0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fczIuZGF0YSgp LCBfX3MyLmRhdGEoKSArIF9fczIubGVuZ3RoKCkpIDwgMCk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2Nh bGUmIF9fbG9jKQogICAgewogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOwog ICAgICBsb2NhbGU6OmZhY2V0KiogX19mYWNldHMgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7 CiAgICAgIGlmICghKF9faSA8IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0c19zaXplICYmIF9fZmFj ZXRzW19faV0pKQogICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAgICAgcmV0dXJuIHN0YXRp Y19jYXN0PGNvbnN0IF9GYWNldCY+KCpfX2ZhY2V0c1tfX2ldKTsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19s b2MpIHRocm93KCkKICAgIHsKICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01faWQoKTsK ICAgICAgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRz OwogICAgICByZXR1cm4gKF9faSA8IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0c19zaXplICYmIF9f ZmFjZXRzW19faV0pOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg ICBfTV9leHRyYWN0X2Zsb2F0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGlvc19iYXNl JiBfX2lvLAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0 cmluZyYgX194dHJjKSBjb25zdAogICAgewogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lv LmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0 PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9f bnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAgICBjb25zdCBj aGFyX3R5cGUgX19wbHVzID0gX19jdHlwZS53aWRlbignKycpOwogICAgICBjb25zdCBjaGFyX3R5 cGUgX19taW51cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKICAgICAgaW50IF9fcG9zID0gMDsKICAg ICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgaWYgKChfX2MgPT0gX19wbHVzIHx8IF9f YyA9PSBfX21pbnVzKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBfX3h0 cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgKytfX3BvczsKICAg ICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgfQoKCiAgICAgIGNvbnN0IGNoYXJfdHlw ZSBfX3plcm8gPSBfX2N0eXBlLndpZGVuKF9TX2F0b21zW19NX3plcm9dKTsKICAgICAgYm9vbCBf X2ZvdW5kX3plcm8gPSBmYWxzZTsKICAgICAgd2hpbGUgKF9fYyA9PSBfX3plcm8gJiYgX19iZWcg IT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAg IF9fZm91bmRfemVybyA9IHRydWU7CiAgICAgICAgfQogICAgICBpZiAoX19mb3VuZF96ZXJvKQog ICAgICAgIHsKICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfTV96ZXJvXTsKICAgICAgICAg ICsrX19wb3M7CiAgICAgICAgfQoKCiAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9NX0UgLSBf TV96ZXJvICsgMTsKICAgICAgY2hhcl90eXBlIF9fd2F0b21zW19fbGVuXTsKICAgICAgX19jdHlw ZS53aWRlbihfU19hdG9tcywgX1NfYXRvbXMgKyBfX2xlbiwgX193YXRvbXMpOwogICAgICBib29s IF9fZm91bmRfZGVjID0gZmFsc2U7CiAgICAgIGJvb2wgX19mb3VuZF9zY2kgPSBmYWxzZTsKICAg ICAgY29uc3QgY2hhcl90eXBlIF9fZGVjID0gX19ucC5kZWNpbWFsX3BvaW50KCk7CgogICAgICBz dHJpbmcgX19mb3VuZF9ncm91cGluZzsKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBf X25wLmdyb3VwaW5nKCk7CiAgICAgIGJvb2wgX19jaGVja19ncm91cGluZyA9IF9fZ3JvdXBpbmcu c2l6ZSgpOwogICAgICBpbnQgX19zZXBfcG9zID0gMDsKICAgICAgY29uc3QgY2hhcl90eXBlIF9f c2VwID0gX19ucC50aG91c2FuZHNfc2VwKCk7CgogICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQp CiAgICAgICAgewoKICAgICAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0 c190eXBlOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3RyYWl0c190eXBlOjpm aW5kKF9fd2F0b21zLCAxMCwgX19jKTsKCgogICAgICAgICAgaWYgKF9fcCAmJiBfX2MpCiAgICAg ICAgICAgIHsKCiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0g X1NfYXRvbXNbX19wIC0gX193YXRvbXNdOwogICAgICAgICAgICAgICsrX19zZXBfcG9zOwogICAg ICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2Ug aWYgKF9fYyA9PSBfX3NlcCAmJiBfX2NoZWNrX2dyb3VwaW5nICYmICFfX2ZvdW5kX2RlYykKICAg ICAgICAgICAgewoKCiAgICAgICAgICAgICAgaWYgKF9fc2VwX3BvcykKICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFy PihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAg ICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg IGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jh c2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19kZWMgJiYgIV9fZm91bmRf ZGVjKQogICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgaWYgKF9fZm91bmRfZ3JvdXBpbmcu c2l6ZSgpKQogICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxj aGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX194 dHJjICs9ICcuJzsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAg IF9fZm91bmRfZGVjID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoKF9f YyA9PSBfX3dhdG9tc1tfTV9lXSB8fCBfX2MgPT0gX193YXRvbXNbX01fRV0pCiAgICAgICAgICAg ICAgICAgICAmJiAhX19mb3VuZF9zY2kgJiYgX19wb3MpCiAgICAgICAgICAgIHsKCiAgICAgICAg ICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19j LCBjaGFyKCkpOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CgoKICAgICAgICAgICAg ICBpZiAoX19jID09IF9fcGx1cyB8fCBfX2MgPT0gX19taW51cykKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAgICAgX194dHJjICs9IF9f Y3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICAgICAgX19jID0gKigrK19f YmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX2ZvdW5kX3NjaSA9IHRydWU7 CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKCiAgICAgICAgICAgIGJyZWFrOwogICAgICAg IH0KCgoKICAgICAgaWYgKF9fY2hlY2tfZ3JvdXBpbmcgJiYgX19mb3VuZF9ncm91cGluZy5zaXpl KCkpCiAgICAgICAgewoKICAgICAgICAgIGlmICghX19mb3VuZF9kZWMpCiAgICAgICAgICAgIF9f Zm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAg IGlmICghX192ZXJpZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19mb3VuZF9ncm91cGluZykpCiAg ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0KCgogICAgICBf X3h0cmMgKz0gY2hhcigpOwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVt X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfaW50KF9Jbkl0ZXIgX19iZWcs IF9Jbkl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICAgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9feHRyYywgaW50JiBfX2Jhc2UpIGNvbnN0CiAg ICB7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0 IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9j KTsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5j dDxfQ2hhclQ+ID4oX19sb2MpOwoKCiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVs ZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgIGlmIChfX2Jhc2Vm aWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAgIF9fYmFzZSA9IDg7CiAgICAgIGVsc2UgaWYg KF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgpCiAgICAgICAgX19iYXNlID0gMTY7CiAgICAg IGVsc2UKICAgICAgICBfX2Jhc2UgPSAxMDsKCgogICAgICBpbnQgX19wb3MgPSAwOwogICAgICBj aGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBpZiAoKF9fYyA9PSBfX2N0eXBlLndpZGVuKCcr JykgfHwgX19jID09IF9fY3R5cGUud2lkZW4oJy0nKSkKICAgICAgICAgICYmIF9fYmVnICE9IF9f ZW5kKQogICAgICAgIHsKICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNo YXIoKSk7CiAgICAgICAgICArK19fcG9zOwogICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAg ICAgICB9CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oX1Nf YXRvbXNbX01femVyb10pOwogICAgICBjb25zdCBjaGFyX3R5cGUgX194ID0gX19jdHlwZS53aWRl bigneCcpOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19YID0gX19jdHlwZS53aWRlbignWCcpOwog ICAgICBpZiAoX19iYXNlID09IDEwKQogICAgICAgIHsKICAgICAgICAgIGJvb2wgX19mb3VuZF96 ZXJvID0gZmFsc2U7CiAgICAgICAgICB3aGlsZSAoX19jID09IF9femVybyAmJiBfX2JlZyAhPSBf X2VuZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAg ICAgICAgICAgX19mb3VuZF96ZXJvID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYg KF9fZm91bmRfemVybykKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9feHRyYyArPSBfU19h dG9tc1tfTV96ZXJvXTsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIGlmIChf X2Jhc2VmaWVsZCA9PSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAo KF9fYyA9PSBfX3ggfHwgX19jID09IF9fWCkgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93 KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAg ICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgICAgX19iYXNl ID0gMTY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgICAgICAgX19iYXNlID0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19iYXNlID09IDE2KQogICAgICAgIHsKICAgICAg ICAgIGlmIChfX2MgPT0gX196ZXJvICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3plcm9dOwogICAgICAgICAgICAgICsr X19wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBpZiAo KF9fYyA9PSBfX3ggfHwgX19jID09IF9fWCkgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNo YXIoKSk7CiAgICAgICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgIF9fYyA9 ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgoK CiAgICAgIHNpemVfdCBfX2xlbjsKICAgICAgaWYgKF9fYmFzZSA9PSAxNikKICAgICAgICBfX2xl biA9IF9NX3NpemU7CiAgICAgIGVsc2UKICAgICAgICBfX2xlbiA9IF9fYmFzZTsKCgogICAgICBj aGFyX3R5cGUgX193YXRvbXNbX01fc2l6ZV07CiAgICAgIF9fY3R5cGUud2lkZW4oX1NfYXRvbXMs IF9TX2F0b21zICsgX19sZW4sIF9fd2F0b21zKTsKICAgICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBp bmc7CiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAg ICBib29sIF9fY2hlY2tfZ3JvdXBpbmcgPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgaW50IF9f c2VwX3BvcyA9IDA7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRz X3NlcCgpOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAg dHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgICAgICBjb25z dCBjaGFyX3R5cGUqIF9fcCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193YXRvbXMsIF9fbGVuLCBf X2MpOwoKCiAgICAgICAgICBpZiAoX19wICYmIF9fYykKICAgICAgICAgICAgewoKICAgICAgICAg ICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX19wIC0gX193YXRvbXNdOwogICAgICAgICAgICAgICsr X19wb3M7CiAgICAgICAgICAgICAgKytfX3NlcF9wb3M7CiAgICAgICAgICAgICAgX19jID0gKigr K19fYmVnKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19jID09IF9fc2VwICYm IF9fY2hlY2tfZ3JvdXBpbmcpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIGlmIChfX3Nl cF9wb3MpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBp bmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgX19z ZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQoKICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgfQoKCgogICAgICBpZiAoX19jaGVja19ncm91cGluZyAmJiBf X2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CgogICAgICAgICAgX19mb3VuZF9ncm91 cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3Zl cmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2ZvdW5kX2dyb3VwaW5nKSkKICAgICAgICAgICAg X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIF9feHRyYyArPSBj aGFyKCk7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFz ZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hh clQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBi b29sJiBfX3YpIGNvbnN0CiAgICB7CgogICAgICBpZiAoIShfX2lvLmZsYWdzKCkgJiBpb3NfYmFz ZTo6Ym9vbGFscGhhKSkKICAgICAgICB7CgoKICAgICAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAg ICAgICBpbnQgX19iYXNlOwogICAgICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywg X19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CgogICAgICAgICAgdW5zaWduZWQg bG9uZyBfX3VsOwogICAgICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWws IF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgICAgIGlmICghKF9fZXJyICYgaW9z X2Jhc2U6OmZhaWxiaXQpICYmIF9fdWwgPD0gMSkKICAgICAgICAgICAgX192ID0gX191bDsKICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAg ICAgfQoKCiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIGJhc2ljX3N0cmlu ZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CiAgICAgICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdl dGxvYygpOwogICAgICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNl dDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICAgICAgY29uc3QgX19zdHJpbmdfdHlw ZSBfX3RydWUgPSBfX25wLnRydWVuYW1lKCk7CiAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBl IF9fZmFsc2UgPSBfX25wLmZhbHNlbmFtZSgpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBf X3RydWVzID0gX190cnVlLmNfc3RyKCk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmFs c2VzID0gX19mYWxzZS5jX3N0cigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdHJ1ZW4gPSBf X3RydWUuc2l6ZSgpIC0gMTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2ZhbHNlbiA9IF9fZmFs c2Uuc2l6ZSgpIC0gMTsKCiAgICAgICAgICBmb3IgKHNpemVfdCBfX24gPSAwOyBfX2JlZyAhPSBf X2VuZDsgKytfX24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0g Kl9fYmVnKys7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RmID0gX19uIDw9IF9fZmFsc2VuID8g X19jID09IF9fZmFsc2VzW19fbl0gOiBmYWxzZTsKICAgICAgICAgICAgICBib29sIF9fdGVzdHQg PSBfX24gPD0gX190cnVlbiA/IF9fYyA9PSBfX3RydWVzW19fbl0gOiBmYWxzZTsKICAgICAgICAg ICAgICBpZiAoIShfX3Rlc3RmIHx8IF9fdGVzdHQpKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0ZiAm JiBfX24gPT0gX19mYWxzZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9f diA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgIGVsc2UgaWYgKF9fdGVzdHQgJiYgX19uID09IF9fdHJ1ZW4pCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgIF9fdiA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19iZWcgPT0gX19l bmQpCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgICAgfQogICAg ICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Ogog ICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p bywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QK ICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcg PSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFz ZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19j X2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0 PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7 CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9f ZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICB1bnNpZ25lZCBsb25nIF9f dWw7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1Nf Y19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQp CiAgICAgICAgICAmJiBfX3VsIDw9IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4 KCkpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fdWwpOwogICAg ICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBf X2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy PgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChp dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAg IHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBf TV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7 CiAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNf c3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19l cnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1p dHM8dW5zaWduZWQgaW50Pjo6bWF4KCkpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgaW50PihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWls Yml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQg bG9uZyYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19i YXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19l cnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCks IF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAg ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf SW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlw ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewogICAgICBz dHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3Rf aW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19j b252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jh c2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQg bG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGlu dCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lv LCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19z dHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2Jl ZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K ICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRl cl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgIHsKICAgICAg c3RyaW5nIF9feHRyYzsKICAgICAgX194dHJjLnJlc2VydmUoMzIpOwogICAgICBfX2JlZyA9IF9N X2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKICAgICAg X19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlKTsK ICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46 OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX192KSBj b25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7 CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy LCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2Vy ciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8 X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAg ICAgX194dHJjLnJlc2VydmUoMzIpOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19i ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194 dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVn OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg ICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJf dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICB7CgogICAgICB0 eXBlZGVmIGlvc19iYXNlOjpmbXRmbGFncyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3MgX19mbXQg PSBfX2lvLmZsYWdzKCk7CiAgICAgIGZtdGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNo b3dwb3MgfCBpb3NfYmFzZTo6YmFzZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCBpb3NfYmFzZTo6dXBwZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5m bGFncyhfX2ZtdCAmIF9fZm10bWFzayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3di YXNlKSk7CgogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2Jl ZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19i YXNlKTsKCgogICAgICBfX2lvLmZsYWdzKF9fZm10KTsKCiAgICAgIHVuc2lnbmVkIGxvbmcgX191 bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19j X2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkp CiAgICAgICAgX192ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX191bCk7CiAgICAgIGVsc2UK ICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwog ICAgfQojIDYwNCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgIF9PdXRJdGVyCiAgICAgIG51bV9wdXQ8X0NoYXJU LCBfT3V0SXRlcj46OgogICAgICBfTV9jb252ZXJ0X2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9zX2Jh c2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIgX19tb2QsCiAgICAgICAgICAgICAgICAgICAg ICAgX1ZhbHVlVCBfX3YpIGNvbnN0CiAgICAgIHsKCgogICAgICAgIGNvbnN0IGludCBfX21heF9k aWdpdHMgPSBudW1lcmljX2xpbWl0czxfVmFsdWVUPjo6ZGlnaXRzMTAgKyAxOwogICAgICAgIHN0 cmVhbXNpemUgX19wcmVjID0gX19pby5wcmVjaXNpb24oKTsKCiAgICAgICAgaWYgKF9fcHJlYyA+ IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbWF4X2RpZ2l0cykpCiAgICAgICAgICBfX3ByZWMg PSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX21heF9kaWdpdHMpOwoKCiAgICAgICAgY2hhciBf X2ZidWZbMTZdOwoKCiAgICAgICAgaW50IF9fbGVuOwoKCgogICAgICAgIGludCBfX2NzX3NpemUg PSBfX21heF9kaWdpdHMgKiAzOwogICAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFy Kj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKCiAgICAgICAgY29uc3QgYm9vbCBfX2Zw ID0gX1NfZm9ybWF0X2Zsb2F0KF9faW8sIF9fZmJ1ZiwgX19tb2QsIF9fcHJlYyk7CiAgICAgICAg aWYgKF9fZnApCiAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19z aXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19j X2xvY2FsZSwgX19wcmVjKTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xlbiA9IF9fY29udmVy dF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwgX1NfY19sb2NhbGUpOwoKCiAg ICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6ZSkKICAgICAgICAgIHsKICAgICAgICAgICAgX19j c19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAgICBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+ KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgICAgICAgIGlmIChfX2ZwKQogICAg ICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1 ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2Fs ZSwgX19wcmVjKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fbGVuID0gX19jb252 ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSk7CiAgICAgICAgICB9CiMgNjY3ICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICAgICAgICByZXR1 cm4gX01fd2lkZW5fZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fY3MsIF9fbGVuKTsKICAgICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgdGVt cGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hh clQsIF9PdXRJdGVyPjo6CiAgICAgIF9NX2NvbnZlcnRfaW50KF9PdXRJdGVyIF9fcywgaW9zX2Jh c2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIgX19tb2QsCiAgICAgICAgICAgICAgICAgICAg IGNoYXIgX19tb2RsLCBfVmFsdWVUIF9fdikgY29uc3QKICAgICAgewoKCgogICAgICAgIGNoYXIg X19mYnVmWzE2XTsKICAgICAgICBfU19mb3JtYXRfaW50KF9faW8sIF9fZmJ1ZiwgX19tb2QsIF9f bW9kbCk7CgoKICAgICAgICBpbnQgX19jc19zaXplID0gNjQ7CiAgICAgICAgY2hhciogX19jcyA9 IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICAg IGludCBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9f diwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKCiAg ICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6ZSkKICAgICAgICAgIHsKICAgICAgICAgICAgX19j c19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAgICBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+ KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgICAgICAgIF9fbGVuID0gX19jb252 ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUpOwogICAgICAgICAgfQoKCgoKCgogICAg ICAgIHJldHVybiBfTV93aWRlbl9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fY3MsIF9fbGVuKTsK ICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog ICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgX01fd2lkZW5f ZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciog X19jcywKICAgICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKCgogICAgICBj b25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hh clQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9D aGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9m KF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqIF9fbGVuKSk7CgoKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0 PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbiAqIDIp KTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwoKCiAgICAg IGNvbnN0IF9DaGFyVCogX19wOwogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0g dXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGlmIChfX3AgPSBjaGFy X3RyYWl0czxfQ2hhclQ+OjpmaW5kKF9fd3MsIF9fbGVuLCBfX2N0eXBlLndpZGVuKCcuJykpKQog ICAgICAgIF9fd3NbX19wIC0gX193c10gPSBfX25wLmRlY2ltYWxfcG9pbnQoKTsKCgoKCiAgICAg IGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBpb3NfYmFz ZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZp ZWxkOwogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkpCiAgICAgICAgewogICAgICAgICAgX0No YXJUKiBfX3AyOwogICAgICAgICAgaW50IF9fZGVjbGVuID0gX19wID8gX19wIC0gX193cyA6IF9f bGVuOwogICAgICAgICAgX19wMiA9IF9fYWRkX2dyb3VwaW5nKF9fd3MyLCBfX25wLnRob3VzYW5k c19zZXAoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3Ry KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigpICsg X19ncm91cGluZy5zaXplKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193cywg X193cyArIF9fZGVjbGVuKTsKICAgICAgICAgIGludCBfX25ld2xlbiA9IF9fcDIgLSBfX3dzMjsK CgogICAgICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHJh aXRzPF9DaGFyVD46OmNvcHkoX19wMiwgX19wLCBfX2xlbiAtIF9fZGVjbGVuKTsKICAgICAgICAg ICAgICBfX25ld2xlbiArPSBfX2xlbiAtIF9fZGVjbGVuOwogICAgICAgICAgICB9CgoKICAgICAg ICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICAgIF9fbGVuID0gX19uZXdsZW47CiAgICAgICAgfQoK ICAgICAgcmV0dXJuIF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193cywgX19sZW4pOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg X091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgX01fd2lkZW5faW50 KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIqIF9fY3Ms CiAgICAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdAogICAgewoKCiAgICAgIGNvbnN0IGxv Y2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9f Y3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX0NoYXJUKiBf X3dzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJU KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICogX19sZW4pKTsKCgogICAgICBfQ2hhclQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJU Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9fbGVuICogMikpOwogICAg ICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyBfX2xlbiwgX193cyk7CgoKICAgICAgY29uc3Qg bnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19s b2MpOwogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAg ICAgY29uc3QgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygpICYg aW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAg IHsKCgoKICAgICAgICAgIHN0cmVhbXNpemUgX19vZmYgPSAwOwogICAgICAgICAgaWYgKF9faW8u ZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkKICAgICAgICAgICAgaWYgKF9fYmFzZWZpZWxk ID09IGlvc19iYXNlOjpvY3QpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX19vZmYg PSAxOwogICAgICAgICAgICAgICAgKl9fd3MyID0gKl9fd3M7CiAgICAgICAgICAgICAgfQogICAg ICAgICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6aGV4KQogICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgIF9fb2ZmID0gMjsKICAgICAgICAgICAgICAgICpfX3dzMiA9 ICpfX3dzOwogICAgICAgICAgICAgICAgKihfX3dzMiArIDEpID0gKihfX3dzICsgMSk7CiAgICAg ICAgICAgICAgfQogICAgICAgICAgX0NoYXJUKiBfX3A7CiAgICAgICAgICBfX3AgPSBfX2FkZF9n cm91cGluZyhfX3dzMiArIF9fb2ZmLCBfX25wLnRob3VzYW5kc19zZXAoKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSArIF9fZ3JvdXBpbmcuc2l6ZSgpLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX193cyArIF9fb2ZmLCBfX3dzICsgX19sZW4pOwog ICAgICAgICAgX19sZW4gPSBfX3AgLSBfX3dzMjsKCiAgICAgICAgICBfX3dzID0gX193czI7CiAg ICAgICAgfQogICAgICByZXR1cm4gX01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX3dzLCBf X2xlbik7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0 SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIF9N X2luc2VydChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjb25z dCBfQ2hhclQqIF9fd3MsCiAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdAogICAgewoKICAg ICAgc3RyZWFtc2l6ZSBfX3cgPSBfX2lvLndpZHRoKCk7CiAgICAgIF9DaGFyVCogX193czIgPSBz dGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICog X193KSk7CiAgICAgIGlmIChfX3cgPiBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2xlbikpCiAg ICAgICAgewogICAgICAgICAgX19wYWQoX19pbywgX19maWxsLCBfX3dzMiwgX193cywgX193LCBf X2xlbiwgdHJ1ZSk7CiAgICAgICAgICBfX2xlbiA9IHN0YXRpY19jYXN0PGludD4oX193KTsKCiAg ICAgICAgICBfX3dzID0gX193czI7CiAgICAgICAgfQogICAgICBfX2lvLndpZHRoKDApOwoKCgog ICAgICBmb3IgKGludCBfX2ogPSAwOyBfX2ogPCBfX2xlbjsgKytfX2osICsrX19zKQogICAgICAg ICpfX3MgPSBfX3dzW19fal07CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1 dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2Um IF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdAogICAgewogICAgICBpb3Nf YmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxhZ3MoKTsKICAgICAgaWYgKChfX2ZsYWdz ICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkgPT0gMCkKICAgICAgICB7CiAgICAgICAgICB1bnNpZ25l ZCBsb25nIF9fdXYgPSBfX3Y7CiAgICAgICAgICBfX3MgPSBfTV9jb252ZXJ0X2ludChfX3MsIF9f aW8sIF9fZmlsbCwgJ3UnLCBjaGFyX3R5cGUoKSwgX191dik7CiAgICAgICAgfQogICAgICBlbHNl CiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmlu Z190eXBlOwogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAg IGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJU PiA+KF9fbG9jKTsKICAgICAgICAgIF9fc3RyaW5nX3R5cGUgX19uYW1lOwogICAgICAgICAgaWYg KF9fdikKICAgICAgICAgICAgX19uYW1lID0gX19ucC50cnVlbmFtZSgpOwogICAgICAgICAgZWxz ZQogICAgICAgICAgICBfX25hbWUgPSBfX25wLmZhbHNlbmFtZSgpOwogICAgICAgICAgX19zID0g X01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX25hbWUuY19zdHIoKSwgX19uYW1lLnNpemUo KSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0No YXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lv LCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZl cnRfaW50KF9fcywgX19pbywgX19maWxsLCAnZCcsIGNoYXJfdHlwZSgpLCBfX3YpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgog ICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgdW5zaWduZWQgbG9u ZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmls bCwgJ3UnLCBjaGFyX3R5cGUoKSwgX192KTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091 dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19iLCBjaGFyX3R5 cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9p bnQoX19zLCBfX2IsIF9fZmlsbCwgJ2QnLCAnbCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9D aGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19p bywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBj b25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1Jywg J2wnLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ dGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9f cHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBkb3Vi bGUgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9mbG9hdChfX3MsIF9faW8sIF9f ZmlsbCwgY2hhcl90eXBlKCksIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0 ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBl IF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBf TV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBu dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3Nf YmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBjb25zdCB2b2lkKiBfX3Yp IGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFn cygpOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNlOjpzaG93cG9z IHwgaW9zX2Jhc2U6OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8u ZmxhZ3MoX19mbGFncyAmIF9fZm10IHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jh c2UpKTsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgX19zID0gX01fY29udmVydF9pbnQo X19zLCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcl90eXBlKCksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGxvbmc+KF9fdikpOwogICAgICAg ICAgX19pby5mbGFncyhfX2ZsYWdzKTsKICAgICAgICB9CiAgICAgIGNhdGNoICguLi4pCiAgICAg ICAgewogICAgICAgICAgX19pby5mbGFncyhfX2ZsYWdzKTsKICAgICAgICAgIHRocm93OwogICAg ICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG1vbmV5X2dldDxfQ2hhclQsIF9J bkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgYm9v bCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZ190eXBl IF9fc3RyOwogICAgICBfX2JlZyA9IHRoaXMtPmRvX2dldChfX2JlZywgX19lbmQsIF9faW50bCwg X19pbywgX19lcnIsIF9fc3RyKTsKCiAgICAgIGNvbnN0IGludCBfX24gPSBudW1lcmljX2xpbWl0 czxsb25nIGRvdWJsZT46OmRpZ2l0czEwOwogICAgICBjaGFyKiBfX2NzID0gc3RhdGljX2Nhc3Q8 Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19uKSk7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9 IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2Vf ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgX0NoYXJUKiBfX3djcyA9 IF9fc3RyLmNfc3RyKCk7CiAgICAgIF9fY3R5cGUubmFycm93KF9fd2NzLCBfX3djcyArIF9fc3Ry LnNpemUoKSArIDEsIGNoYXIoKSwgX19jcyk7CiAgICAgIF9fY29udmVydF90b192KF9fY3MsIF9f dW5pdHMsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgog ICAgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2Jl ZywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX191bml0cykgY29uc3QK ICAgIHsKCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIHRydWU+IF9fbW9uZXlfdHJ1 ZTsKICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgZmFsc2U+IF9fbW9uZXlfZmFsc2U7 CiAgICAgIHR5cGVkZWYgbW9uZXlfYmFzZTo6cGFydCBwYXJ0OwogICAgICB0eXBlZGVmIHR5cGVu YW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwoKICAgICAgY29uc3QgbG9jYWxl IF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgX19tb25leV90cnVlJiBfX21wdCA9 IHVzZV9mYWNldDxfX21vbmV5X3RydWU+KF9fbG9jKTsKICAgICAgY29uc3QgX19tb25leV9mYWxz ZSYgX19tcGYgPSB1c2VfZmFjZXQ8X19tb25leV9mYWxzZT4oX19sb2MpOwogICAgICBjb25zdCBj dHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7 CgogICAgICBjb25zdCBtb25leV9iYXNlOjpwYXR0ZXJuIF9fcCA9IF9faW50bCA/IF9fbXB0Lm5l Z19mb3JtYXQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 IF9fbXBmLm5lZ19mb3JtYXQoKTsKCiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9fcG9zX3NpZ24g PV9faW50bCA/IF9fbXB0LnBvc2l0aXZlX3NpZ24oKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiBfX21wZi5wb3NpdGl2ZV9zaWduKCk7CiAgICAgIGNvbnN0IHN0 cmluZ190eXBlIF9fbmVnX3NpZ24gPV9faW50bCA/IF9fbXB0Lm5lZ2F0aXZlX3NpZ24oKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5uZWdhdGl2ZV9z aWduKCk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX2QgPSBfX2ludGwgPyBfX21wdC5kZWNpbWFs X3BvaW50KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmRlY2lt YWxfcG9pbnQoKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19pbnRsID8gX19tcHQu dGhvdXNhbmRzX3NlcCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9f bXBmLnRob3VzYW5kc19zZXAoKTsKCiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19p bnRsID8gX19tcHQuZ3JvdXBpbmcoKSA6IF9fbXBmLmdyb3VwaW5nKCk7CgoKICAgICAgc3RyaW5n X3R5cGUgX19zaWduOwoKICAgICAgc3RyaW5nIF9fZ3JvdXBpbmdfdG1wOwoKICAgICAgaW50IF9f c2VwX3BvcyA9IDA7CgogICAgICBib29sIF9fdGVzdHZhbGlkID0gdHJ1ZTsKCiAgICAgIGJvb2wg X190ZXN0ZGVjZm91bmQgPSBmYWxzZTsKCgogICAgICBzdHJpbmdfdHlwZSBfX3RlbXBfdW5pdHM7 CgogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBjaGFyX3R5cGUgX19lb2YgPSBz dGF0aWNfY2FzdDxjaGFyX3R5cGU+KGNoYXJfdHJhaXRzPGNoYXJfdHlwZT46OmVvZigpKTsKICAg ICAgZm9yIChpbnQgX19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgNCAmJiBfX3Rlc3R2 YWxpZDsgKytfX2kpCiAgICAgICAgewogICAgICAgICAgcGFydCBfX3doaWNoID0gc3RhdGljX2Nh c3Q8cGFydD4oX19wLmZpZWxkW19faV0pOwogICAgICAgICAgc3dpdGNoIChfX3doaWNoKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzeW1ib2w6CiAg ICAgICAgICAgICAgICAgIGlmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UKICAg ICAgICAgICAgICAgICAgICAgIHx8IF9faSA8IDIgfHwgX19zaWduLnNpemUoKSA+IDEKICAgICAg ICAgICAgICAgICAgICAgIHx8ICgoc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkWzNdKSAhPSBt b25leV9iYXNlOjpub25lKQogICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9faSA9PSAyKSkK ICAgICAgICAgICAgICAgICAgICB7CgoKCgoKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0 cmluZ190eXBlIF9fc3ltYm9sID0gX19pbnRsID8gX19tcHQuY3Vycl9zeW1ib2woKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBm LmN1cnJfc3ltYm9sKCk7CiAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBf X3N5bWJvbC5zaXplKCk7CiAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19qID0gMDsK ICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICYmIF9faiA8IF9fbGVuICYmIF9fc3ltYm9sW19fal0gPT0gX19jKQog ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jID0g KigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICArK19fajsKICAgICAgICAgICAg ICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAgICAgICBpZiAoX19qICE9IF9fbGVuICYm IChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpKQogICAgICAgICAgICAgICAgICAg ICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNpZ246Cgog ICAgICAgICAgICAgICAgICBpZiAoX19wb3Nfc2lnbi5zaXplKCkgJiYgX19uZWdfc2lnbi5zaXpl KCkpCiAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKF9fYyA9PSBf X3Bvc19zaWduWzBdKQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg ICAgICBfX3NpZ24gPSBfX3Bvc19zaWduOwogICAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAq KCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVs c2UgaWYgKF9fYyA9PSBfX25lZ19zaWduWzBdKQogICAgICAgICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICAgICBfX3NpZ24gPSBfX25lZ19zaWduOwogICAgICAgICAgICAgICAg ICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFs c2U7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19wb3Nf c2lnbi5zaXplKCkgJiYgX19jID09IF9fcG9zX3NpZ25bMF0pCiAgICAgICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19wb3Nfc2lnbjsKICAgICAgICAgICAg ICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICBlbHNlIGlmIChfX25lZ19zaWduLnNpemUoKSAmJiBfX2MgPT0gX19uZWdfc2ln blswXSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBfX3NpZ24g PSBfX25lZ19zaWduOwogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgY2FzZSBtb25leV9iYXNlOjp2YWx1ZToKCgogICAgICAgICAgICAgICAgICB3aGlsZSAoX19i ZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAgICAgICYmIChfX2N0eXBlLmlzKGN0eXBl X2Jhc2U6OmRpZ2l0LCBfX2MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKF9fYyA9 PSBfX2QgJiYgIV9fdGVzdGRlY2ZvdW5kKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8 IF9fYyA9PSBfX3NlcCkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg ICAgaWYgKF9fYyA9PSBfX2QpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2dyb3VwaW5nX3RtcCArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9w b3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgX190ZXN0ZGVjZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19zZXApCiAgICAg ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX19ncm91 cGluZy5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nX3RtcCArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3Nl cF9wb3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVtcF91bml0cyArPSBfX2M7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgKytfX3NlcF9wb3M7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFz ZTo6c3BhY2U6CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6Om5vbmU6CgogICAgICAg ICAgICAgICAgICBpZiAoX19pICE9IDMpCiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVn ICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9fY3R5cGUuaXMoY3R5cGVf YmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcp OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgoK ICAgICAgaWYgKF9fc2lnbi5zaXplKCkgPiAxKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdHlw ZSBfX2xlbiA9IF9fc2lnbi5zaXplKCk7CiAgICAgICAgICBzaXplX3R5cGUgX19pID0gMTsKICAg ICAgICAgIGZvciAoOyBfX2MgIT0gX19lb2YgJiYgX19pIDwgX19sZW47ICsrX19pKQogICAgICAg ICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19jICE9IF9fc2lnbltfX2ldKQogICAgICAg ICAgICAgIF9fYyA9ICooKytfX2JlZyk7CgogICAgICAgICAgaWYgKF9faSAhPSBfX2xlbikKICAg ICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICB9CgoKICAgICAgd2hpbGUgKF9f dGVtcF91bml0c1swXSA9PSBfX2N0eXBlLndpZGVuKCcwJykpCiAgICAgICAgX190ZW1wX3VuaXRz LmVyYXNlKF9fdGVtcF91bml0cy5iZWdpbigpKTsKCiAgICAgIGlmIChfX3NpZ24uc2l6ZSgpICYm IF9fc2lnbiA9PSBfX25lZ19zaWduKQogICAgICAgIF9fdGVtcF91bml0cy5pbnNlcnQoX190ZW1w X3VuaXRzLmJlZ2luKCksIF9fY3R5cGUud2lkZW4oJy0nKSk7CgoKICAgICAgaWYgKF9fZ3JvdXBp bmcuc2l6ZSgpICYmIF9fZ3JvdXBpbmdfdG1wLnNpemUoKSkKICAgICAgICB7CiAgICAgICAgICBp ZiAoIV9fdmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZ3JvdXBpbmdfdG1wKSkKICAgICAg ICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICB9CgoKICAgICAgaWYgKF9fYyA9PSBf X2VvZikKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwoKCiAgICAgIGlmICghX190 ZXN0dmFsaWQgfHwgIV9fdGVtcF91bml0cy5zaXplKCkpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jh c2U6OmZhaWxiaXQ7CiAgICAgIGVsc2UKCiAgICAgICAgX190ZW1wX3VuaXRzLnN3YXAoX191bml0 cyk7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbW9uZXlfcHV0PF9DaGFyVCwg X091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jh c2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgbG9uZyBkb3VibGUgX191bml0 cykgY29uc3QKICAgIHsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsK ICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hh clQ+ID4oX19sb2MpOwoKCiAgICAgIGludCBfX2NzX3NpemUgPSA2NDsKICAgICAgY2hhciogX19j cyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAg ICBpbnQgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgIiUuMDFMZiIs IF9fdW5pdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUp OwoKICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX2Nz X3NpemUgPSBfX2xlbiArIDE7CiAgICAgICAgICBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9f YnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9m cm9tX3YoX19jcywgX19jc19zaXplLCAiJS4wMUxmIiwgX191bml0cywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSk7CiAgICAgICAgfQoKCgoKCgoKICAgICAg X0NoYXJUKiBfX3dzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXpl b2YoX0NoYXJUKSAqIF9fY3Nfc2l6ZSkpOwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3Mg KyBfX2xlbiwgX193cyk7CiAgICAgIHN0cmluZ190eXBlIF9fZGlnaXRzKF9fd3MpOwogICAgICBy ZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAg IF9PdXRJdGVyCiAgICBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0 ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmls bCwKICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICB7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAg ICAgIHR5cGVkZWYgbW9uZXlfYmFzZTo6cGFydCBwYXJ0OwoKICAgICAgY29uc3QgbG9jYWxlIF9f bG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fd2lkdGggPSBzdGF0 aWNfY2FzdDxzaXplX3R5cGU+KF9faW8ud2lkdGgoKSk7CgoKICAgICAgdHlwZWRlZiBtb25leXB1 bmN0PF9DaGFyVCwgdHJ1ZT4gX19tb25leV90cnVlOwogICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8 X0NoYXJULCBmYWxzZT4gX19tb25leV9mYWxzZTsKICAgICAgY29uc3QgX19tb25leV90cnVlJiBf X21wdCA9IHVzZV9mYWNldDxfX21vbmV5X3RydWU+KF9fbG9jKTsKICAgICAgY29uc3QgX19tb25l eV9mYWxzZSYgX19tcGYgPSB1c2VfZmFjZXQ8X19tb25leV9mYWxzZT4oX19sb2MpOwogICAgICBj b25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf X2xvYyk7CgoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19iZWcgPSBfX2RpZ2l0cy5kYXRhKCk7 CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19lbmQgPSBfX2JlZyArIF9fZGlnaXRzLnNpemUoKTsK ICAgICAgbW9uZXlfYmFzZTo6cGF0dGVybiBfX3A7CiAgICAgIHN0cmluZ190eXBlIF9fc2lnbjsK ICAgICAgaWYgKCpfX2JlZyAhPSBfX2N0eXBlLndpZGVuKCctJykpCiAgICAgICAgewogICAgICAg ICAgX19wID0gX19pbnRsID8gX19tcHQucG9zX2Zvcm1hdCgpIDogX19tcGYucG9zX2Zvcm1hdCgp OwogICAgICAgICAgX19zaWduID1fX2ludGwgPyBfX21wdC5wb3NpdGl2ZV9zaWduKCkgOiBfX21w Zi5wb3NpdGl2ZV9zaWduKCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAg ICAgX19wID0gX19pbnRsID8gX19tcHQubmVnX2Zvcm1hdCgpIDogX19tcGYubmVnX2Zvcm1hdCgp OwogICAgICAgICAgX19zaWduID1fX2ludGwgPyBfX21wdC5uZWdhdGl2ZV9zaWduKCkgOiBfX21w Zi5uZWdhdGl2ZV9zaWduKCk7CiAgICAgICAgICArK19fYmVnOwogICAgICAgIH0KCgogICAgICBf X2VuZCA9IF9fY3R5cGUuc2Nhbl9ub3QoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYmVnLCBfX2VuZCk7 CiAgICAgIGlmIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CgoKCiAgICAgICAgICBzdHJpbmdf dHlwZSBfX3JlczsKICAgICAgICAgIHN0cmluZ190eXBlIF9fdmFsdWU7CiAgICAgICAgICBjb25z dCBzdHJpbmdfdHlwZSBfX3N5bWJvbCA9IF9faW50bCA/IF9fbXB0LmN1cnJfc3ltYm9sKCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuY3Vycl9z eW1ib2woKTsKCgogICAgICAgICAgY29uc3QgaW50IF9fZnJhYyA9IF9faW50bCA/IF9fbXB0LmZy YWNfZGlnaXRzKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5m cmFjX2RpZ2l0cygpOwogICAgICAgICAgaWYgKF9fZnJhYyA+IDApCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9w b2ludCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBm LmRlY2ltYWxfcG9pbnQoKTsKICAgICAgICAgICAgICBpZiAoX19lbmQgLSBfX2JlZyA+PSBfX2Zy YWMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUgPSBzdHJpbmdf dHlwZShfX2VuZCAtIF9fZnJhYywgX19lbmQpOwogICAgICAgICAgICAgICAgICBfX3ZhbHVlLmlu c2VydChfX3ZhbHVlLmJlZ2luKCksIF9fZCk7CiAgICAgICAgICAgICAgICAgIF9fZW5kIC09IF9f ZnJhYzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg ICB7CgogICAgICAgICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19iZWcsIF9fZW5k KTsKICAgICAgICAgICAgICAgICAgaW50IF9fcGFkZGVjID0gX19mcmFjIC0gKF9fZW5kIC0gX19i ZWcpOwogICAgICAgICAgICAgICAgICBjaGFyX3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbign MCcpOwogICAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydChfX3ZhbHVlLmJlZ2luKCksIF9f cGFkZGVjLCBfX3plcm8pOwogICAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydChfX3ZhbHVl LmJlZ2luKCksIF9fZCk7CiAgICAgICAgICAgICAgICAgIF9fYmVnID0gX19lbmQ7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgIH0KCgoKICAgICAgICAgIGlmIChfX2JlZyAhPSBfX2VuZCkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19p bnRsID8gX19tcHQuZ3JvdXBpbmcoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDogX19tcGYuZ3JvdXBpbmcoKTsKICAgICAgICAgICAgICBpZiAoX19ncm91 cGluZy5zaXplKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXJfdHlwZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5kc19zZXAoKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi50aG91c2FuZHNf c2VwKCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2JlZyA9IF9fZ3JvdXBpbmcu Y19zdHIoKTsKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19nZW5kID0gX19nYmVnICsg X19ncm91cGluZy5zaXplKCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBfX24gPSAoX19l bmQgLSBfX2JlZykgKiAyOwogICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fd3MyID0KICAgICAg ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVv ZihfQ2hhclQpICogX19uKSk7CiAgICAgICAgICAgICAgICAgIF9DaGFyVCogX193c19lbmQgPSBf X2FkZF9ncm91cGluZyhfX3dzMiwgX19zZXAsIF9fZ2JlZywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ2VuZCwgX19iZWcsIF9fZW5kKTsKICAg ICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoMCwgX193czIsIF9fd3NfZW5kIC0gX193czIp OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9f dmFsdWUuaW5zZXJ0KDAsIHN0cmluZ190eXBlKF9fYmVnLCBfX2VuZCkpOwogICAgICAgICAgICB9 CgoKICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2YgPSBfX2lvLmZsYWdzKCkgJiBpb3Nf YmFzZTo6YWRqdXN0ZmllbGQ7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3ZhbHVlLnNp emUoKSArIF9fc2lnbi5zaXplKCk7CiAgICAgICAgICBfX2xlbiArPSAoX19pby5mbGFncygpICYg aW9zX2Jhc2U6OnNob3diYXNlKSA/IF9fc3ltYm9sLnNpemUoKSA6IDA7CiAgICAgICAgICBib29s IF9fdGVzdGlwYWQgPSBfX2YgPT0gaW9zX2Jhc2U6OmludGVybmFsICYmIF9fbGVuIDwgX193aWR0 aDsKCgogICAgICAgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgNDsgKytfX2kpCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBwYXJ0IF9fd2hpY2ggPSBzdGF0aWNfY2FzdDxwYXJ0PihfX3Au ZmllbGRbX19pXSk7CiAgICAgICAgICAgICAgc3dpdGNoIChfX3doaWNoKQogICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzeW1ib2w6CiAgICAgICAgICAg ICAgICAgIGlmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpCiAgICAgICAgICAg ICAgICAgICAgX19yZXMgKz0gX19zeW1ib2w7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzaWduOgoKCgogICAgICAgICAgICAgICAgICBp ZiAoX19zaWduLnNpemUoKSkKICAgICAgICAgICAgICAgICAgICBfX3JlcyArPSBfX3NpZ25bMF07 CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNl Ojp2YWx1ZToKICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX192YWx1ZTsKICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNlOgoKCgog ICAgICAgICAgICAgICAgICBpZiAoX190ZXN0aXBhZCkKICAgICAgICAgICAgICAgICAgICBfX3Jl cyArPSBzdHJpbmdfdHlwZShfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7CiAgICAgICAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX3JlcyArPSBfX2N0eXBlLndpZGVuKF9fZmls bCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9i YXNlOjpub25lOgogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0aXBhZCkKICAgICAgICAgICAg ICAgICAgICBfX3JlcyArPSBzdHJpbmdfdHlwZShfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7CiAg ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgoK ICAgICAgICAgIGlmIChfX3NpZ24uc2l6ZSgpID4gMSkKICAgICAgICAgICAgX19yZXMgKz0gc3Ry aW5nX3R5cGUoX19zaWduLmJlZ2luKCkgKyAxLCBfX3NpZ24uZW5kKCkpOwoKCiAgICAgICAgICBf X2xlbiA9IF9fcmVzLnNpemUoKTsKICAgICAgICAgIGlmIChfX3dpZHRoID4gX19sZW4pCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19mID09IGlvc19iYXNlOjpsZWZ0KQoKICAgICAg ICAgICAgICAgIF9fcmVzLmFwcGVuZChfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7CiAgICAgICAg ICAgICAgZWxzZQoKICAgICAgICAgICAgICAgIF9fcmVzLmluc2VydCgwLCBzdHJpbmdfdHlwZShf X3dpZHRoIC0gX19sZW4sIF9fZmlsbCkpOwogICAgICAgICAgICAgIF9fbGVuID0gX193aWR0aDsK ICAgICAgICAgICAgfQoKCiAgICAgICAgICBmb3IgKHNpemVfdHlwZSBfX2ogPSAwOyBfX2ogPCBf X2xlbjsgKytfX2osICsrX19zKQogICAgICAgICAgICAqX19zID0gX19yZXNbX19qXTsKICAgICAg ICB9CiAgICAgIF9faW8ud2lkdGgoMCk7CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB0aW1lX2Jhc2U6 OmRhdGVvcmRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6ZG9fZGF0ZV9vcmRlcigp IGNvbnN0CiAgICB7IHJldHVybiB0aW1lX2Jhc2U6Om5vX29yZGVyOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIHZvaWQKICAgIHRpbWVfZ2V0PF9D aGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KGl0ZXJfdHlwZSYgX19i ZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCkgY29uc3QKICAgIHsKICAgICAgbG9j YWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25z dCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBj b25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf X2xvYyk7CiAgICAgIHNpemVfdCBfX2xlbiA9IGNoYXJfdHJhaXRzPF9DaGFyVD46Omxlbmd0aChf X2Zvcm1hdCk7CgogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2JlZyAhPSBfX2VuZCAmJiBf X2kgPCBfX2xlbiAmJiAhX19lcnI7ICsrX19pKQogICAgICAgIHsKICAgICAgICAgIGNoYXIgX19j ID0gX19mb3JtYXRbX19pXTsKICAgICAgICAgIGlmIChfX2MgPT0gJyUnKQogICAgICAgICAgICB7 CgogICAgICAgICAgICAgIF9fYyA9IF9fZm9ybWF0WysrX19pXTsKICAgICAgICAgICAgICBjaGFy IF9fbW9kID0gMDsKICAgICAgICAgICAgICBpbnQgX19tZW0gPSAwOwogICAgICAgICAgICAgIGlm IChfX2MgPT0gJ0UnIHx8IF9fYyA9PSAnTycpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgIF9fbW9kID0gX19jOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX2Zvcm1hdFsrK19f aV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc3dpdGNoIChfX2MpCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fY3M7CiAgICAgICAgICAg ICAgICAgIF9DaGFyVCBfX3djc1sxMF07CiAgICAgICAgICAgICAgICBjYXNlICdhJzoKCiAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXlzMVs3XTsKICAgICAgICAgICAgICAg ICAgX190cC5fTV9kYXlzX2FiYnJldmlhdGVkKF9fZGF5czEpOwogICAgICAgICAgICAgICAgICBf TV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2RheXMxLCA3LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0EnOgoKICAgICAgICAgICAgICAgICAgY29u c3QgY2hhcl90eXBlKiBfX2RheXMyWzddOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX2RheXMo X19kYXlzMik7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQs IF9fdG0tPnRtX3dkYXksIF9fZGF5czIsIDcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz ZSAnaCc6CiAgICAgICAgICAgICAgICBjYXNlICdiJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXJfdHlwZSogX19tb250aHMxWzEyXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9tb250 aHNfYWJicmV2aWF0ZWQoX19tb250aHMxKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9u YW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCBfX21vbnRoczEsIDEyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgIGNhc2UgJ0InOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90 eXBlKiBfX21vbnRoczJbMTJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX21vbnRocyhfX21v bnRoczIpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBf X3RtLT50bV9tb24sIF9fbW9udGhzMiwgMTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz ZSAnYyc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZHRbMl07CiAgICAg ICAgICAgICAgICAgIF9fdHAuX01fZGF0ZV90aW1lX2Zvcm1hdHMoX19kdCk7CiAgICAgICAgICAg ICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBf X3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kdFswXSk7CiAg ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnZCc6CgogICAgICAg ICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21kYXksIDEs IDMxLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7 CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnRCc6CgogICAg ICAgICAgICAgICAgICBfX2NzID0gIiVtLyVkLyV5IjsKICAgICAgICAgICAgICAgICAgX19jdHlw ZS53aWRlbihfX2NzLCBfX2NzICsgOSwgX193Y3MpOwogICAgICAgICAgICAgICAgICBfTV9leHRy YWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2NzKTsKICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdIJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4 dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1faG91ciwgMCwgMjMsIDIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdJJzoKCiAgICAgICAgICAgICAgICAgIF9N X2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1faG91ciwgMSwgMTIsIDIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdtJzoKCiAgICAgICAgICAgICAgICAg IF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX19tZW0sIDEsIDEyLCAyLCBfX2N0eXBlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAg IGlmICghX19lcnIpCiAgICAgICAgICAgICAgICAgICAgX190bS0+dG1fbW9uID0gX19tZW0gLSAx OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ00nOgoKICAg ICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9taW4s IDAsIDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vy cik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbic6CiAg ICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09ICdcbicpCiAg ICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1InOgoKICAgICAgICAgICAgICAgICAgX19j cyA9ICIlSDolTSI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyAr IDYsIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVn LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgY2FzZSAnUyc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19l bmQsIF9fdG0tPnRtX3NlYywgMCwgNTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICBjYXNlICd0JzoKICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUubmFycm93KCpfX2Jl ZywgMCkgPT0gJ1x0JykKICAgICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdUJzoKCiAgICAgICAg ICAgICAgICAgIF9fY3MgPSAiJUg6JU06JVMiOwogICAgICAgICAgICAgICAgICBfX2N0eXBlLndp ZGVuKF9fY3MsIF9fY3MgKyA5LCBfX3djcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3Rf dmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX193Y3MpOwogICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgIGNhc2UgJ3gnOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hh cl90eXBlKiBfX2RhdGVzWzJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX2RhdGVfZm9ybWF0 cyhfX2RhdGVzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVn LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2RhdGVzWzBdKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgICBjYXNlICdYJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX190 aW1lc1syXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV90aW1lX2Zvcm1hdHMoX190aW1lcyk7 CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9f aW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X190aW1lc1swXSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz ZSAneSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9f dG0tPnRtX3llYXIsIDAsIDk5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg Y2FzZSAnWSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQs IF9fbWVtLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljX2xpbWl0 czxpbnQ+OjptYXgoKSwgNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlw ZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICAgICAg ICAgIF9fdG0tPnRtX3llYXIgPSBfX21lbSAtIDE5MDA7CiAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgY2FzZSAnWic6CgogICAgICAgICAgICAgICAgICBpZiAoX19jdHlw ZS5pcyhjdHlwZV9iYXNlOjp1cHBlciwgKl9fYmVnKSkKICAgICAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgICBpbnQgX190bXA7CiAgICAgICAgICAgICAgICAgICAgICBfTV9l eHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtcCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfU190aW1lem9uZXMsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQsIF9fZXJyKTsKCgogICAgICAgICAgICAg ICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgICAgICAgICAgICAgICAgIGlm ICghX19lcnIgJiYgX190bXAgPT0gMAogICAgICAgICAgICAgICAgICAgICAgICAgICYmIChfX2Mg PT0gX19jdHlwZS53aWRlbignLScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9f YyA9PSBfX2N0eXBlLndpZGVuKCcrJykpKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtcCwg MCwgMjMsIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5 cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2Jl ZywgX19lbmQsIF9fdG1wLCAwLCA1OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CgogICAgICAg ICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgIHsKCiAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19jdHlwZS5uYXJyb3coKl9fYmVn LCAwKSkKICAgICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoK ICAgIF9NX2V4dHJhY3RfbnVtKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGlu dCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICBpbnQgX19taW4sIGludCBfX21heCwgc2l6 ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlw ZSwKICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3QKICAg IHsKICAgICAgc2l6ZV90IF9faSA9IDA7CiAgICAgIHN0cmluZyBfX2RpZ2l0czsKICAgICAgYm9v bCBfX3Rlc3R2YWxpZCA9IHRydWU7CiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAg IHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBfX2xlbgogICAgICAgICAgICAgJiYgX19j dHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKSkKICAgICAgICB7CiAgICAgICAgICBfX2Rp Z2l0cyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIDApOwogICAgICAgICAgX19jID0gKigrK19fYmVn KTsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAgaWYgKF9faSA9PSBfX2xlbikKICAg ICAgICB7CiAgICAgICAgICBpbnQgX192YWx1ZSA9IGF0b2koX19kaWdpdHMuY19zdHIoKSk7CiAg ICAgICAgICBpZiAoX19taW4gPD0gX192YWx1ZSAmJiBfX3ZhbHVlIDw9IF9fbWF4KQogICAgICAg ICAgICBfX21lbWJlciA9IF9fdmFsdWU7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fdGVz dHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX190ZXN0dmFsaWQg PSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFz ZTo6ZmFpbGJpdDsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9N X2V4dHJhY3RfbmFtZShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9f bWVtYmVyLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNpemVf dCBfX2luZGV4bGVuLAogICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy cikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyX3R5cGU+IF9fdHJh aXRzX3R5cGU7CiAgICAgIGludCogX19tYXRjaGVzID0gc3RhdGljX2Nhc3Q8aW50Kj4oX19idWls dGluX2FsbG9jYShzaXplb2YoaW50KSAqIF9faW5kZXhsZW4pKTsKICAgICAgc2l6ZV90IF9fbm1h dGNoZXMgPSAwOwogICAgICBzaXplX3QgX19wb3MgPSAwOwogICAgICBib29sIF9fdGVzdHZhbGlk ID0gdHJ1ZTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX25hbWU7CgogICAgICBjaGFyX3R5cGUg X19jID0gKl9fYmVnOwoKICAgICAgZm9yIChzaXplX3QgX19pMSA9IDA7IF9faTEgPCBfX2luZGV4 bGVuOyArK19faTEpCiAgICAgICAgaWYgKF9fYyA9PSBfX25hbWVzW19faTFdWzBdKQogICAgICAg ICAgX19tYXRjaGVzW19fbm1hdGNoZXMrK10gPSBfX2kxOwoKICAgICAgd2hpbGUoX19ubWF0Y2hl cyA+IDEpCiAgICAgICAgewoKICAgICAgICAgIHNpemVfdCBfX21pbmxlbiA9IDEwOwogICAgICAg ICAgZm9yIChzaXplX3QgX19pMiA9IDA7IF9faTIgPCBfX25tYXRjaGVzOyArK19faTIpCiAgICAg ICAgICAgIF9fbWlubGVuID0gbWluKF9fbWlubGVuLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lc1tfX21hdGNoZXNbX19pMl1dKSk7CgogICAg ICAgICAgaWYgKF9fcG9zIDwgX19taW5sZW4gJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7 CiAgICAgICAgICAgICAgZm9yIChzaXplX3QgX19pMyA9IDA7IF9faTMgPCBfX25tYXRjaGVzOyAr K19faTMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbmFtZSA9IF9fbmFt ZXNbX19tYXRjaGVzW19faTNdXTsKICAgICAgICAgICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10g IT0gX19jKQogICAgICAgICAgICAgICAgICAgIF9fbWF0Y2hlc1tfX2kzXSA9IF9fbWF0Y2hlc1st LV9fbm1hdGNoZXNdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBl bHNlCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgIGlmIChfX25tYXRjaGVzID09 IDEpCiAgICAgICAgewoKICAgICAgICAgIF9fbmFtZSA9IF9fbmFtZXNbX19tYXRjaGVzWzBdXTsK ICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25h bWUpOwogICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0gX19lbmQgJiYg X19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgICsrX19iZWcsICsrX19wb3M7Cgog ICAgICAgICAgaWYgKF9fbGVuID09IF9fcG9zKQogICAgICAgICAgICBfX21lbWJlciA9IF9fbWF0 Y2hlc1swXTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsK ICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICBp ZiAoIV9fdGVzdHZhbGlkKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J dGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF90aW1lKGl0ZXJf dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAg IF9DaGFyVCBfX3djc1szXTsKICAgICAgY29uc3QgY2hhciogX19jcyA9ICIlWCI7CiAgICAgIGxv Y2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9f Y3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX19jdHlwZS53 aWRlbihfX2NzLCBfX2NzICsgMywgX193Y3MpOwogICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQo X19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwgX193Y3MpOwogICAgICBpZiAoX19iZWcg PT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJu IF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0 ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dl dF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK ICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0 CiAgICB7CiAgICAgIF9DaGFyVCBfX3djc1szXTsKICAgICAgY29uc3QgY2hhciogX19jcyA9ICIl eCI7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFy VD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAg ICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgMywgX193Y3MpOwogICAgICBfTV9leHRyYWN0 X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwgX193Y3MpOwogICAg ICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsK ICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+ OjoKICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp b3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8Y2hhcl90 eXBlPiBfX3RyYWl0c190eXBlOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwog ICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1 bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXlzWzddOwog ICAgICBfX3RwLl9NX2RheXNfYWJicmV2aWF0ZWQoX19kYXlzKTsKICAgICAgaW50IF9fdG1wd2Rh eTsKICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXB3ZGF5LCBfX2RheXMs IDcsIF9fZXJyKTsKCgoKCgoKCiAgICAgIGlmICghX19lcnIpCiAgICAgICAgewogICAgICAgICAg c2l6ZV90IF9fcG9zID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fZGF5c1tfX3RtcHdkYXldKTsK ICAgICAgICAgIF9fdHAuX01fZGF5cyhfX2RheXMpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBl KiBfX25hbWUgPSBfX2RheXNbX190bXB3ZGF5XTsKICAgICAgICAgIGlmIChfX25hbWVbX19wb3Nd ID09ICpfX2JlZykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBjb25zdCBzaXplX3QgX19s ZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgICAgICB3aGlsZSAo X19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAmJiBf X25hbWVbX19wb3NdID09ICpfX2JlZykKICAgICAgICAgICAgICAgICsrX19iZWcsICsrX19wb3M7 CiAgICAgICAgICAgICAgaWYgKF9fbGVuICE9IF9fcG9zKQogICAgICAgICAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICghX19lcnIp CiAgICAgICAgICAgIF9fdG0tPnRtX3dkYXkgPSBfX3RtcHdkYXk7CiAgICAgICAgfQogICAgICBp ZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAg ICAgcmV0dXJuIF9fYmVnOwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6 CiAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLAog ICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFy X3R5cGU+IF9fdHJhaXRzX3R5cGU7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7 CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1l cHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX21vbnRoc1sx Ml07CiAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJldmlhdGVkKF9fbW9udGhzKTsKICAgICAgaW50 IF9fdG1wbW9uOwogICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtcG1vbiwg X19tb250aHMsIDEyLCBfX2Vycik7CgoKCgoKCgogICAgICBpZiAoIV9fZXJyKQogICAgICAgIHsK ICAgICAgICAgIHNpemVfdCBfX3BvcyA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX21vbnRoc1tf X3RtcG1vbl0pOwogICAgICAgICAgX190cC5fTV9tb250aHMoX19tb250aHMpOwogICAgICAgICAg Y29uc3QgY2hhcl90eXBlKiBfX25hbWUgPSBfX21vbnRoc1tfX3RtcG1vbl07CiAgICAgICAgICBp ZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAg Y29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAgICAg ICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0gX19lbmQKICAgICAgICAg ICAgICAgICAgICAgJiYgX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgICAgICAr K19fYmVnLCArK19fcG9zOwogICAgICAgICAgICAgIGlmIChfX2xlbiAhPSBfX3BvcykKICAgICAg ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICB9CiAgICAg ICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICBfX3RtLT50bV9tb24gPSBfX3RtcG1vbjsKICAg ICAgICB9CgogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jh c2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hh clQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8u Z2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8 Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAg ICAgIHNpemVfdCBfX2kgPSAwOwogICAgICBzdHJpbmcgX19kaWdpdHM7CiAgICAgIHdoaWxlIChf X2kgPCA0ICYmIF9fYmVnICE9IF9fZW5kICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQs IF9fYykpCiAgICAgICAgewogICAgICAgICAgX19kaWdpdHMgKz0gX19jdHlwZS5uYXJyb3coX19j LCAwKTsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICArK19faTsKICAgICAg ICB9CiAgICAgIGlmIChfX2kgPT0gMiB8fCBfX2kgPT0gNCkKICAgICAgICB7CiAgICAgICAgICBs b25nIF9fbDsKICAgICAgICAgIF9fY29udmVydF90b192KF9fZGlnaXRzLmNfc3RyKCksIF9fbCwg X19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZh aWxiaXQpICYmIF9fbCA8PSAyMTQ3NDgzNjQ3KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg X19sID0gX19pID09IDIgPyBfX2wgOiBfX2wgLSAxOTAwOwogICAgICAgICAgICAgIF9fdG0tPnRt X3llYXIgPSBzdGF0aWNfY2FzdDxpbnQ+KF9fbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgaWYgKF9f YmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJl dHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf T3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAg ICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSwgY29uc3QgdG0q IF9fdG0sCiAgICAgICAgY29uc3QgX0NoYXJUKiBfX2JlZywgY29uc3QgX0NoYXJUKiBfX2VuZCkg Y29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5 cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s b2MpOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgY2hh ciBfX2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwogICAgICAgICAgKytfX2JlZzsKICAg ICAgICAgIGlmIChfX2MgPT0gJyUnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhciBf X2Zvcm1hdDsKICAgICAgICAgICAgICBjaGFyIF9fbW9kID0gMDsKICAgICAgICAgICAgICBzaXpl X3QgX19sZW4gPSAxOwogICAgICAgICAgICAgIF9fYyA9IF9fY3R5cGUubmFycm93KCpfX2JlZywg MCk7CiAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICBpZiAoX19jID09ICdFJyB8 fCBfX2MgPT0gJ08nKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX21vZCA9 IF9fYzsKICAgICAgICAgICAgICAgICAgX19mb3JtYXQgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcs IDApOwogICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fZm9ybWF0ID0gX19jOwogICAgICAgICAgICAg IF9fcyA9IHRoaXMtPmRvX3B1dChfX3MsIF9faW8sIGNoYXJfdHlwZSgpLCBfX3RtLCBfX2Zvcm1h dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tb2QpOwogICAgICAgICAgICB9 CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAqX19zID0gX19jOwog ICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g X19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy PgogICAgX091dEl0ZXIKICAgIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1 dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlLCBjb25zdCB0bSogX190 bSwKICAgICAgICAgICBjaGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kKSBjb25zdAogICAgewogICAg ICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0 JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fdGlt ZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJU PiA+KF9fbG9jKTsKCgoKICAgICAgY29uc3Qgc2l6ZV90IF9fbWF4bGVuID0gNjQ7CiAgICAgIGNo YXJfdHlwZSogX19yZXMgPQogICAgICAgIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KF9fYnVpbHRp bl9hbGxvY2Eoc2l6ZW9mKGNoYXJfdHlwZSkgKiBfX21heGxlbikpOwoKCgoKCgogICAgICBjaGFy X3R5cGUgX19mbXRbNF07CiAgICAgIF9fZm10WzBdID0gX19jdHlwZS53aWRlbignJScpOwogICAg ICBpZiAoIV9fbW9kKQogICAgICAgIHsKICAgICAgICAgIF9fZm10WzFdID0gX19mb3JtYXQ7CiAg ICAgICAgICBfX2ZtdFsyXSA9IGNoYXJfdHlwZSgpOwogICAgICAgIH0KICAgICAgZWxzZQogICAg ICAgIHsKICAgICAgICAgIF9fZm10WzFdID0gX19tb2Q7CiAgICAgICAgICBfX2ZtdFsyXSA9IF9f Zm9ybWF0OwogICAgICAgICAgX19mbXRbM10gPSBjaGFyX3R5cGUoKTsKICAgICAgICB9CgogICAg ICBfX3RwLl9NX3B1dChfX3JlcywgX19tYXhsZW4sIF9fZm10LCBfX3RtKTsKCgogICAgICBzaXpl X3QgX19sZW4gPSBjaGFyX3RyYWl0czxjaGFyX3R5cGU+OjpsZW5ndGgoX19yZXMpOwogICAgICBm b3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX2xlbjsgKytfX2ksICsrX19zKQogICAgICAgICpf X3MgPSBfX3Jlc1tfX2ldOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIGludAogICAgY29sbGF0ZTxfQ2hhclQ+OjpfTV9jb21wYXJlKGNv bnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0CiAgICB7IHJldHVybiAwOyB9CgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBzaXplX3QKICAgIGNvbGxhdGU8X0NoYXJUPjo6 X01fdHJhbnNmb3JtKF9DaGFyVCosIGNvbnN0IF9DaGFyVCosIHNpemVfdCkgY29uc3QKICAgIHsg cmV0dXJuIDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW50CiAgICBjb2xs YXRlPF9DaGFyVD46OgogICAgZG9fY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBf Q2hhclQqIF9faGkxLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBf Q2hhclQqIF9faGkyKSBjb25zdAogICAgewogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX29uZShf X2xvMSwgX19oaTEpOwogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3R3byhfX2xvMiwgX19oaTIp OwogICAgICByZXR1cm4gX01fY29tcGFyZShfX29uZS5jX3N0cigpLCBfX3R3by5jX3N0cigpKTsK ICAgIH0KCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBjb2xsYXRlPF9D aGFyVD46OnN0cmluZ190eXBlCiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAgZG9fdHJhbnNmb3Jt KGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgewogICAg ICBzaXplX3QgX19sZW4gPSAoX19oaSAtIF9fbG8pICogMjsKCiAgICAgIF9DaGFyVCogX19jID0K ICAgICAgICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hh clQpICogX19sZW4pKTsKICAgICAgc2l6ZV90IF9fcmVzID0gX01fdHJhbnNmb3JtKF9fYywgX19s bywgX19sZW4pOwoKICAgICAgaWYgKF9fcmVzID49IF9fbGVuKQogICAgICAgIHsKICAgICAgICAg IF9fYyA9CiAgICAgICAgICAgIHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eo c2l6ZW9mKF9DaGFyVCkgKiAoX19yZXMgKyAxKSkpOwogICAgICAgICAgX01fdHJhbnNmb3JtKF9f YywgX19sbywgX19yZXMgKyAxKTsKICAgICAgICB9CiAgICAgIHJldHVybiBzdHJpbmdfdHlwZShf X2MpOwogICAgfQoKIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvbmcKICAgIGNvbGxh dGU8X0NoYXJUPjo6CiAgICBkb19oYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJU KiBfX2hpKSBjb25zdAogICAgewogICAgICB1bnNpZ25lZCBsb25nIF9fdmFsID0gMDsKICAgICAg Zm9yICg7IF9fbG8gPCBfX2hpOyArK19fbG8pCiAgICAgICAgX192YWwgPSAqX19sbyArICgoX192 YWwgPDwgNykgfAogICAgICAgICAgICAgICAgICAgICAgIChfX3ZhbCA+PiAobnVtZXJpY19saW1p dHM8dW5zaWduZWQgbG9uZz46OmRpZ2l0cyAtIDcpKSk7CiAgICAgIHJldHVybiBzdGF0aWNfY2Fz dDxsb25nPihfX3ZhbCk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KICAgIHZv aWQKICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9faW4sIF9UdiYgX19vdXQsIGlvc19i YXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fY19sb2NhbGUm IF9fY2xvYywgaW50IF9fYmFzZSA9IDEwKTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4K ICAgIGludAogICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwgY29uc3QgaW50IF9fc2l6 ZSwgY29uc3QgY2hhciogX19mbXQsCiAgICAgICAgICAgICAgICAgICAgIF9UdiBfX3YsIGNvbnN0 IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjID0gLTEpCiAgICB7CiAgICAgIGludCBfX3JldDsKICAg ICAgY29uc3QgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoX19MQ19BTEwsICJDIik7CiAgICAgIGlm IChfX3ByZWMgPj0gMCkKICAgICAgICBfX3JldCA9IHNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9f Zm10LCBfX3ByZWMsIF9fdik7CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHNucHJpbnRmKF9f b3V0LCBfX3NpemUsIF9fZm10LCBfX3YpOwogICAgICBzZXRsb2NhbGUoX19MQ19BTEwsIF9fb2xk KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQojIDE5OTUgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIF9fcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQg X19maWxsLCBfQ2hhclQqIF9fbmV3cywgY29uc3QgX0NoYXJUKiBfX29sZHMsCiAgICAgICAgICBj b25zdCBzdHJlYW1zaXplIF9fbmV3bGVuLCBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuLAogICAg ICAgICAgY29uc3QgYm9vbCBfX251bSkKICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90 eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwoKICAgICAgaW50X3R5cGUgX19w bGVuID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX25ld2xlbiAtIF9fb2xkbGVuKTsKICAgICAgY2hh cl90eXBlKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2Nh KHNpemVvZihjaGFyX3R5cGUpICogX19wbGVuKSk7CiAgICAgIHRyYWl0c190eXBlOjphc3NpZ24o X19wYWRzLCBfX3BsZW4sIF9fZmlsbCk7CgogICAgICBjaGFyX3R5cGUqIF9fYmVnOwogICAgICBj aGFyX3R5cGUqIF9fZW5kOwogICAgICBzaXplX3QgX19tb2QgPSAwOwogICAgICBzaXplX3QgX19i ZWdsZW47CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2FkanVzdCA9IF9faW8uZmxhZ3MoKSAm IGlvc19iYXNlOjphZGp1c3RmaWVsZDsKCiAgICAgIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6 bGVmdCkKICAgICAgICB7CgogICAgICAgICAgX19iZWcgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+ KF9fb2xkcyk7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xkbGVuOwogICAgICAgICAgX19lbmQg PSBfX3BhZHM7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6 aW50ZXJuYWwgJiYgX19udW0pCiAgICAgICAgewoKCgogICAgICAgICAgbG9jYWxlIF9fbG9jID0g X19pby5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1 c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlw ZSBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBl IF9fcGx1cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgICAgIGJvb2wgX190ZXN0c2lnbiA9 IF9fb2xkc1swXSA9PSBfX21pbnVzIHx8IF9fb2xkc1swXSA9PSBfX3BsdXM7CiAgICAgICAgICBi b29sIF9fdGVzdGhleCA9IF9fY3R5cGUud2lkZW4oJzAnKSA9PSBfX29sZHNbMF0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgJiYgKF9fY3R5cGUud2lkZW4oJ3gnKSA9PSBfX29sZHNbMV0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9fY3R5cGUud2lkZW4oJ1gnKSA9PSBfX29s ZHNbMV0pOwogICAgICAgICAgaWYgKF9fdGVzdGhleCkKICAgICAgICAgICAgewogICAgICAgICAg ICAgIF9fbmV3c1swXSA9IF9fb2xkc1swXTsKICAgICAgICAgICAgICBfX25ld3NbMV0gPSBfX29s ZHNbMV07CiAgICAgICAgICAgICAgX19tb2QgKz0gMjsKICAgICAgICAgICAgICBfX25ld3MgKz0g MjsKICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9 IF9fcGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19v bGRzICsgX19tb2QpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3Rlc3RzaWdu KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19uZXdzWzBdID0gX19vbGRzWzBdID09IF9f cGx1cyA/IF9fcGx1cyA6IF9fbWludXM7CiAgICAgICAgICAgICAgKytfX21vZDsKICAgICAgICAg ICAgICArK19fbmV3czsKICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAg ICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hh cl90eXBlKj4oX19vbGRzICsgX19tb2QpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAg ICAgICAgICAgIHsKCiAgICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAg X19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJf dHlwZSo+KF9fb2xkcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAg ICB7CgogICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxl bjsKICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOwogICAg ICAgIH0KICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19uZXdzLCBfX2JlZywgX19iZWdsZW4pOwog ICAgICB0cmFpdHNfdHlwZTo6Y29weShfX25ld3MgKyBfX2JlZ2xlbiwgX19lbmQsIF9fbmV3bGVu IC0gX19iZWdsZW4gLSBfX21vZCk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIHZvaWQKICAgIF9fcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBfQ2hh clQqIF9fbmV3cywgY29uc3QgX0NoYXJUKiBfX29sZHMsCiAgICAgICAgICBjb25zdCBzdHJlYW1z aXplIF9fbmV3bGVuLCBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuLAogICAgICAgICAgY29uc3Qg Ym9vbCBfX251bSkKICAgIHsKICAgICAgcmV0dXJuIF9fcGFkPF9DaGFyVCwgY2hhcl90cmFpdHM8 X0NoYXJUPiA+KF9faW8sIF9fZmlsbCwgX19uZXdzLCBfX29sZHMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld2xlbiwgX19vbGRsZW4sIF9fbnVt KTsKICAgIH0KIyAyMDk0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50 Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBib29sCiAgICBfX3ZlcmlmeV9n cm91cGluZyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiYgX19ncm91cGluZywKICAgICAgICAg ICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQ+JiBfX2dyb3VwaW5nX3RtcCkKICAgIHsK ICAgICAgaW50IF9faSA9IDA7CiAgICAgIGludCBfX2ogPSAwOwogICAgICBjb25zdCBpbnQgX19s ZW4gPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgY29uc3QgaW50IF9fbiA9IF9fZ3JvdXBpbmdf dG1wLnNpemUoKTsKICAgICAgYm9vbCBfX3Rlc3QgPSB0cnVlOwoKCgoKICAgICAgd2hpbGUgKF9f dGVzdCAmJiBfX2kgPCBfX24gLSAxKQogICAgICAgIGZvciAoX19qID0gMDsgX190ZXN0ICYmIF9f aiA8IF9fbGVuICYmIF9faSA8IF9fbiAtIDE7ICsrX19qLCsrX19pKQogICAgICAgICAgX190ZXN0 ICY9IF9fZ3JvdXBpbmdbX19qXSA9PSBfX2dyb3VwaW5nX3RtcFtfX24gLSBfX2kgLSAxXTsKCgog ICAgICBfX2ogPT0gX19sZW4gPyBfX2ogPSAwIDogX19qOwogICAgICBfX3Rlc3QgJj0gX19ncm91 cGluZ1tfX2pdID49IF9fZ3JvdXBpbmdfdG1wW19fbiAtIF9faSAtIDFdOwogICAgICByZXR1cm4g X190ZXN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9DaGFy VCoKICAgIF9fYWRkX2dyb3VwaW5nKF9DaGFyVCogX19zLCBfQ2hhclQgX19zZXAsCiAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyKiBfX2diZWcsIGNvbnN0IGNoYXIqIF9fZ2VuZCwKICAgICAg ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19maXJzdCwgY29uc3QgX0NoYXJUKiBfX2xhc3Qp CiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gKl9fZ2JlZykKICAgICAgICB7CiAg ICAgICAgICBfX3MgPSBfX2FkZF9ncm91cGluZyhfX3MsIF9fc2VwLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKF9fZ2JlZyArIDEgPT0gX19nZW5kID8gX19nYmVnIDogX19nYmVnICsg MSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dlbmQsIF9fZmlyc3QsIF9fbGFz dCAtICpfX2diZWcpOwogICAgICAgICAgX19maXJzdCA9IF9fbGFzdCAtICpfX2diZWc7CiAgICAg ICAgICAqX19zKysgPSBfX3NlcDsKICAgICAgICB9CiAgICAgIGRvCiAgICAgICAgKl9fcysrID0g Kl9fZmlyc3QrKzsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KTsKICAgICAgcmV0dXJu IF9fczsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwg ZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIsIHRydWU+Owog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCBmYWxzZT47CiAg ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPGNoYXIsIHRydWU+OwogIGV4 dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIG1vbmV5X3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDx3 Y2hhcl90LCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8d2NoYXJf dCwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPHdjaGFy X3QsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8d2No YXJfdCwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X2dldDx3Y2hhcl90PjsK ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfcHV0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBudW1wdW5jdDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVu Y3RfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fZ2V0PGNoYXI+Owog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyBudW1wdW5jdDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3Rf YnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fZ2V0PHdjaGFyX3Q+ OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fcHV0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBfX3RpbWVwdW5jdDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGlt ZV9wdXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTxjaGFy PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg X190aW1lcHVuY3Q8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0PHdj aGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8d2NoYXJfdD47 CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyB0aW1lX2dldF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIG1lc3NhZ2VzPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlc19ieW5h bWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzPHdjaGFyX3Q+OwogIGV4 dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlc19ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRl bXBsYXRlIGNsYXNzIGN0eXBlX2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg Y3R5cGVfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0X2J5 bmFtZTxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2Rl Y3Z0X2J5bmFtZTx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyBjb2xsYXRlPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlX2J5bmFt ZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZTx3Y2hhcl90PjsKICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8d2NoYXJfdD47CgogIGV4dGVybiB0ZW1w bGF0ZQogICAgY29uc3QgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+JgogICAgdXNlX2Zh Y2V0PGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl eHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvbGxhdGU8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8Y29s bGF0ZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0 IG51bXB1bmN0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bXB1bmN0PGNoYXI+ID4oY29uc3QgbG9j YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX3B1dDxjaGFyPiYKICAgIHVz ZV9mYWNldDxudW1fcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0 ZQogICAgY29uc3QgbnVtX2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDxudW1fZ2V0PGNoYXI+ID4o Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDxj aGFyLCB0cnVlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PGNoYXIsIHRydWU+ID4oY29uc3Qg bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDxjaGFyLCBm YWxzZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyLCBmYWxzZT4gPihjb25zdCBsb2Nh bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9wdXQ8Y2hhcj4mCiAgICB1 c2VfZmFjZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1w bGF0ZQogICAgY29uc3QgbW9uZXlfZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG1vbmV5X2dldDxj aGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IF9fdGlt ZXB1bmN0PGNoYXI+JgogICAgdXNlX2ZhY2V0PF9fdGltZXB1bmN0PGNoYXI+ID4oY29uc3QgbG9j YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9wdXQ8Y2hhcj4mCiAgICB1 c2VfZmFjZXQ8dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs YXRlCiAgICBjb25zdCB0aW1lX2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDx0aW1lX2dldDxjaGFy PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1lc3NhZ2Vz PGNoYXI+JgogICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7Cgog IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRl X3Q+JgogICAgdXNlX2ZhY2V0PGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiA+KGxv Y2FsZSBjb25zdCYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvbGxhdGU8d2NoYXJf dD4mCiAgICB1c2VfZmFjZXQ8Y29sbGF0ZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl eHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bXB1bmN0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0 PG51bXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog ICAgY29uc3QgbnVtX3B1dDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxudW1fcHV0PHdjaGFyX3Q+ ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX2dldDx3 Y2hhcl90PiYKICAgIHVzZV9mYWNldDxudW1fZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7 CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPiYK ICAgIHVzZV9mYWNldDxtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+ID4oY29uc3QgbG9jYWxlJik7 CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT4m CiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT4gPihjb25zdCBsb2NhbGUm KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9wdXQ8d2NoYXJfdD4mCiAgICB1 c2VfZmFjZXQ8bW9uZXlfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0 ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfZ2V0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG1vbmV5 X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNv bnN0IF9fdGltZXB1bmN0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PF9fdGltZXB1bmN0PHdjaGFy X3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9w dXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8dGltZV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2Nh bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1lX2dldDx3Y2hhcl90PiYKICAg IHVzZV9mYWNldDx0aW1lX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g dGVtcGxhdGUKICAgIGNvbnN0IG1lc3NhZ2VzPHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG1lc3Nh Z2VzPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJv b2wKICAgIGhhc19mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g dGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3Rh dGVfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBo YXNfZmFjZXQ8Y29sbGF0ZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh dGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1wdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYp OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1fcHV0PGNoYXI+ ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh Y2V0PG51bV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoK ICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9wdXQ8Y2hhcj4g Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFj ZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog ICAgYm9vbAogICAgaGFzX2ZhY2V0PF9fdGltZXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7 CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PHRpbWVfcHV0PGNoYXI+ ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh Y2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog ICAgYm9vbAogICAgaGFzX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7Cgog ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y3R5cGU8d2NoYXJfdD4gPihj b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8 Y29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4 dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvbGxhdGU8d2NoYXJfdD4gPihj b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8 bnVtcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoK ICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1fZ2V0PHdjaGFyX3Q+ ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh Y2V0PG1vbmV5cHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs YXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9j YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5X2dl dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wK ICAgIGhhc19mYWNldDxfX3RpbWVwdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1lX3B1dDx3Y2hhcl90PiA+ KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNl dDx0aW1lX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK ICAgIGJvb2wKICAgIGhhc19mYWNldDxtZXNzYWdlczx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYp Owp9CiMgNDcgIi91c3IvaW5jbHVkZS9nKystdjMvbG9jYWxlIiAyIDMKIyAzOCAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL29zdHJlYW0udGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFy VCxfVHJhaXRzPiYgX19vcykKICAgIDogX01fb2soX19vcy5nb29kKCkpLCBfTV9vcyhfX29zKQog ICAgewoKICAgICAgaWYgKF9NX29rICYmIF9fb3MudGllKCkpCiAgICAgICAgX19vcy50aWUoKS0+ Zmx1c2goKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19w ZikoX19vc3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAg ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19w ZigqdGhpcyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAg ICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9 IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChfX2lvc190eXBlJiAoKl9f cGYpKF9faW9zX3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigq dGhpcyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7 CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0 dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKShp b3NfYmFzZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9f Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsg fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRo aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4pCiAgICB7 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3h0 cmN0ID0gMDsKICAgICAgICAgICAgICBpZiAoX19zYmluKQogICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0ID0gdGhpcy0+cmRidWYoKTsK ICAgICAgICAgICAgICAgICAgX194dHJjdCA9IF9fY29weV9zdHJlYW1idWZzKCp0aGlzLCBfX3Ni aW4sIF9fc2JvdXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg IGlmICghX194dHJjdCkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpm YWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6 OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChib29sIF9fbikK ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hl Y2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0 KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAg ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq dGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOwogICAgICAg ICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFz ZTo6YmFzZWZpZWxkOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0 KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgYm9vbCBfX2IgPSBmYWxzZTsK ICAgICAgICAgICAgICAgICAgaWYgKChfX2ZtdCAmIGlvc19iYXNlOjpvY3QpIHx8IChfX2ZtdCAm IGlvc19iYXNlOjpoZXgpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGxvbmcgX19sID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKTsK ICAgICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMs IF9fYywgX19sKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMs ICp0aGlzLCBfX2MsIF9fbikuZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX2IpCiAg ICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWdu ZWQgbG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAo X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9N X2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkK ICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7 CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0 dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgbG9uZyBfX24pCiAgICB7CiAg ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg ICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9IHRo aXMtPmZpbGwoKTsKICAgICAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlz LT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICAgICAgICBpZiAoX01fY2hl Y2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg IGJvb2wgX19iID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGlmICgoX19mbXQgJiBpb3NfYmFz ZTo6b2N0KSB8fCAoX19mbXQgJiBpb3NfYmFzZTo6aGV4KSkKICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX19sOwogICAgICAgICAg ICAgICAgICAgICAgX19sID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihfX24pOwog ICAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywg X19jLCBfX2wpLmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywg KnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fYikKICAg ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNpZ25l ZCBsb25nIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAg aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlm IChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVk KCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg IHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQogICAgewog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl dChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMs ICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBj YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ OjpvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq dGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAg ICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgp LCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChjb25zdCB2 b2lkKiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19j ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2Zu dW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAg ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OnB1dChjaGFyX3R5cGUgX19jKQogICAgewogICAgICBzZW50cnkg X19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpbnRf dHlwZSBfX3B1dCA9IHJkYnVmKCktPnNwdXRjKF9fYyk7CiAgICAgICAgICBpZiAodHJhaXRzX3R5 cGU6OmVxX2ludF90eXBlKF9fcHV0LCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAq dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+Ojp3cml0ZShjb25zdCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24p CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIHN0cmVhbXNpemUgX19wdXQgPSB0aGlzLT5yZGJ1ZigpLT5zcHV0bihf X3MsIF9fbik7CiAgICAgICAgICBpZiAoIF9fcHV0ICE9IF9fbikKICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6Zmx1c2goKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpZiAodGhpcy0+cmRidWYoKSAmJiB0 aGlzLT5yZGJ1ZigpLT5wdWJzeW5jKCkgPT0gLTEpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFt ZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46OnRlbGxwKCkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQg PSBwb3NfdHlwZSgtMSk7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIF9fcmV0ID0g dGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6b3V0 KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZWVrcChwb3NfdHlwZSBfX3BvcykK ICAgIHsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgewoKCiAgICAgICAgICBwb3Nf dHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjpv dXQpOwoKCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICB9CiAg ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtwKG9mZl90eXBlIF9fb2ZmLCBp b3NfYmFzZTo6c2Vla2RpciBfX2QpCiAgICB7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAg ICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVr b2ZmKF9fb2ZmLCBfX2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW9zX2Jhc2U6Om91dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3Nf dHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 ZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3Ry ZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf X3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGlj X2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX3cgKyAx KSkpOwogICAgICAgICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAgICAgICAgICAgICBzdHJlYW1z aXplIF9fbGVuID0gMTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFk cywgJl9fYywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9f dzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3BhZHMsIF9f bGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg IF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19v dXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9 CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0 LCBjaGFyIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp dHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5 IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRo KCk7CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVp bHRpbl9hbGxvY2EoX193ICsgMSkpOwogICAgICAgICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAg ICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsKICAgICAgICAgICAgICBpZiAoX193ID4g X19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkKF9fb3V0LCBf X291dC5maWxsKCksIF9fcGFkcywgJl9fYywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAg ICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291 dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAg ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg IHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg ICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy ZXR1cm4gX19vdXQ7CiAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRv cjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IF9DaGFyVCog X19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBf X29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2Nl cmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwog ICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWls dGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwogICAgICAgICAgICAgIHN0cmVhbXNp emUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7 CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICBfX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsIF9fcywgX193LCBf X2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAgICAg ICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0 LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy biBfX291dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpCiAg ICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVh bV90eXBlOwoKCgogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXI+IF9fY3RyYWl0c190eXBl OwoKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwog ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2NsZW4gPSBfX2N0 cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNf Y2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fY2xlbiAr IDEpKSk7CiAgICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPD0gX19jbGVuOyArK19f aSkKICAgICAgICAgICAgX193c1tfX2ldID0gX19vdXQud2lkZW4oX19zW19faV0pOwogICAgICAg ICAgX0NoYXJUKiBfX3N0ciA9IF9fd3M7CgogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19j bGVuKTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAg ICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5f YWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7CgogICAgICAgICAgICAgIGlmIChfX3cgPiBf X2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQoX19vdXQsIF9f b3V0LmZpbGwoKSwgX19wYWRzLCBfX3dzLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAg ICAgICAgIF9fc3RyID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3N0ciwgX19sZW4pOwog ICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQu c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNl cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRl bXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jgog ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3Qg Y2hhciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0 cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkg X19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgo KTsKICAgICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWls dGluX2FsbG9jYShfX3cpKTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGlj X2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6bGVuZ3RoKF9fcykpOwogICAgICAgICAgICAgIGlm IChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQo X19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAg ICAgICAgICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9f dzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVu KTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9f b3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQu ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwKICAgICAgICAgICAgICAgY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAg ICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBl OwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAg ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBf X3N0ci5kYXRhKCk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAg ICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9h bGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4g PSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX3N0ci5zaXplKCkpOwoKCgogICAgICAgICAgaWYg KF9fdyA+IF9fbGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19wYWQoX19vdXQsIF9f b3V0LmZpbGwoKSwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAg ICBfX3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgIH0K ICAgICAgICAgIHN0cmVhbXNpemUgX19yZXMgPSBfX291dC5yZGJ1ZigpLT5zcHV0bihfX3MsIF9f bGVuKTsKICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgaWYgKF9fcmVzICE9IF9f bGVuKQogICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAg ICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz cyBiYXNpY19vc3RyZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRsKG9z dHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kcyhvc3RyZWFtJik7CiAgZXh0 ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUg b3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9z dHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIHVuc2lnbmVkIGNoYXIpOwogIGV4dGVybiB0ZW1w bGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBzaWduZWQgY2hhcik7CiAgZXh0ZXJu IHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsKICBl eHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgdW5zaWdu ZWQgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0m LCBjb25zdCBzaWduZWQgY2hhciopOwoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0 cmVhbTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZGwod29zdHJlYW0m KTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZHMod29zdHJlYW0mKTsKICBleHRlcm4g dGVtcGxhdGUgd29zdHJlYW0mIGZsdXNoKHdvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdv c3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgd2NoYXJfdCk7CiAgZXh0ZXJuIHRlbXBsYXRl IHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRl IHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3Qgd2NoYXJfdCopOwogIGV4dGVy biB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsK fQojIDI3NiAiL3Vzci9pbmNsdWRlL2crKy12My9vc3RyZWFtIiAyIDMKIyA0NiAiL3Vzci9pbmNs dWRlL2crKy12My9pb3N0cmVhbSIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pc3RyZWFt IiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2crKy12My9pc3RyZWFtIiAzCgoKCgpuYW1lc3BhY2Ug c3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg Y2xhc3MgYmFzaWNfaXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9U cmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1Ry YWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs IF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFy VCwgX1RyYWl0cz4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVy YXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51 bV9nZXQ8X0NoYXJULCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlwZTsKICAgICAgdHlw ZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBz dHJlYW1zaXplIF9NX2djb3VudDsKCiAgICBwdWJsaWM6CgogICAgICBleHBsaWNpdAogICAgICBi YXNpY19pc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsKICAgICAgICB0aGlz LT5pbml0KF9fc2IpOwogICAgICAgIF9NX2djb3VudCA9IHN0cmVhbXNpemUoMCk7CiAgICAgIH0K CiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2lzdHJlYW0oKQogICAgICB7IF9NX2djb3VudCA9 IHN0cmVhbXNpemUoMCk7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFz cyBzZW50cnk7CgoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9faXN0 cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVhbV90eXBlJikpOwoKICAgICAgX19pc3RyZWFtX3R5 cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoK ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oaW9zX2Jhc2UmICgqX19wZiko aW9zX2Jhc2UmKSk7CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oYm9v bCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHNob3J0JiBf X24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgc2hv cnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihpbnQmIF9f bik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQm IF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nJiBfX24p OwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYg X19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGxvbmcm IF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBs b25nIGxvbmcmIF9fbik7CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4o ZmxvYXQmIF9fZik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihkb3Vi bGUmIF9fZik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGRv dWJsZSYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHZvaWQq JiBfX3ApOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19zdHJlYW1i dWZfdHlwZSogX19zYik7CgoKICAgICAgaW5saW5lIHN0cmVhbXNpemUKICAgICAgZ2NvdW50KHZv aWQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2djb3VudDsgfQoKICAgICAgaW50X3R5cGUKICAg ICAgZ2V0KHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUm IF9fYyk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBz dHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVh bV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7 IHJldHVybiB0aGlzLT5nZXQoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAg X19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5 cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChfX3N0 cmVhbWJ1Zl90eXBlJiBfX3NiKQogICAgICB7IHJldHVybiB0aGlzLT5nZXQoX19zYiwgdGhpcy0+ d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0bGluZShjaGFy X3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlu bGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFt c2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldGxpbmUoX19zLCBfX24sIHRoaXMtPndp ZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGlnbm9yZShzdHJlYW1z aXplIF9fbiA9IDEsIGludF90eXBlIF9fZGVsaW0gPSB0cmFpdHNfdHlwZTo6ZW9mKCkpOwoKICAg ICAgaW50X3R5cGUKICAgICAgcGVlayh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAg ICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBzdHJlYW1zaXpl CiAgICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBf X2lzdHJlYW1fdHlwZSYKICAgICAgcHV0YmFjayhjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9faXN0 cmVhbV90eXBlJgogICAgICB1bmdldCh2b2lkKTsKCiAgICAgIGludAogICAgICBzeW5jKHZvaWQp OwoKICAgICAgcG9zX3R5cGUKICAgICAgdGVsbGcodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlw ZSYKICAgICAgc2Vla2cocG9zX3R5cGUpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHNl ZWtnKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2Rpcik7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9U cmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg X1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19p c3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgX19pbnRfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAg IHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIGJvb2wgX19ub3Nr aXB3cyA9IGZhbHNlKTsKCiAgICAgIG9wZXJhdG9yIGJvb2woKSB7IHJldHVybiBfTV9vazsgfQoK ICAgIHByaXZhdGU6CiAgICAgIGJvb2wgX01fb2s7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f aW4sIF9DaGFyVCYgX19jKTsKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lz dHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwg X1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0dXJuIChfX2luID4+ IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciY+KF9fYykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFp dHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNp Y19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciYgX19jKQogICAgeyBy ZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mIF9faW4sIF9DaGFyVCogX19zKTsKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAg IGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVh bTxjaGFyLF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAo X19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFz cyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+ PihiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyKiBfX3MpCiAg ICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3MpKTsgfQoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFz aWNfaW9zdHJlYW0KICAgIDogcHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiwK ICAgICAgcHVibGljIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVi bGljOgoKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3Ry ZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9f b3N0cmVhbV90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaW9zdHJlYW0oYmFzaWNf c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICAgIDogX19pc3RyZWFtX3R5cGUo X19zYiksIF9fb3N0cmVhbV90eXBlKF9fc2IpCiAgICAgIHsgfQoKICAgICAgdmlydHVhbAogICAg ICB+YmFzaWNfaW9zdHJlYW0oKSB7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMpOwp9CgoKCgoKIyAx ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvaXN0cmVhbS50Y2MiIDEgMwojIDM2ICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvaXN0cmVhbS50Y2MiIDMKCgoKCm5hbWVzcGFjZSBzdGQKewogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19ub3NraXB3cykKICAgIHsKICAgICAgaWYgKF9f aW4uZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2luLnRpZSgpKQogICAgICAgICAg ICBfX2luLnRpZSgpLT5mbHVzaCgpOwogICAgICAgICAgaWYgKCFfX25vc2tpcHdzICYmIChfX2lu LmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkKICAgICAgICAgICAgewogICAgICAgICAgICAg IGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAg ICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgICAgICBf X2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIGlmIChfX2luLl9N X2NoZWNrX2ZhY2V0KF9faW4uX01fZmN0eXBlKSkKICAgICAgICAgICAgICAgIHdoaWxlIChfX2Mg IT0gX19lb2YKICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2luLl9NX2ZjdHlwZS0+aXMoY3R5 cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0 YygpOwoKCgogICAgICAgICAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgICAgICAgICBf X2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgICAgICAgfQogICAgICAgIH0K CiAgICAgIGlmIChfX2luLmdvb2QoKSkKICAgICAgICBfTV9vayA9IHRydWU7CiAgICAgIGVsc2UK ICAgICAgICB7CiAgICAgICAgICBfTV9vayA9IGZhbHNlOwogICAgICAgICAgX19pbi5zZXRzdGF0 ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+ PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlwZSYpKQogICAgewogICAgICBf X3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+ PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhp cyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW9zX2Jh c2UmICgqX19wZikoaW9zX2Jhc2UmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJl dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKQogICAgewog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAg ICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAg ICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ogog ICAgb3BlcmF0b3I+PihzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz LCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNl Ojppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBsb25nIF9fbDsKICAg ICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAg ICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19sKTsKCgogICAgICAg ICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAgICAg ICYmIChudW1lcmljX2xpbWl0czxzaG9ydD46Om1pbigpIDw9IF9fbAogICAgICAgICAgICAgICAg ICAgICAgJiYgX19sIDw9IG51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWF4KCkpKQogICAgICAgICAg ICAgICAgX19uID0gX19sOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fZXJy IHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vy cik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg ICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0 KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBz aG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19i YXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdl dCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vy ciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAg IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihpbnQmIF9fbikKICAgIHsKICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg ICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUg X19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAg ICAgbG9uZyBfX2w7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQp KQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIs IF9fbCk7CgoKICAgICAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQog ICAgICAgICAgICAgICAgICAmJiAobnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgPD0gX19sCiAg ICAgICAgICAgICAgICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkp KQogICAgICAgICAgICAgICAgX19uID0gX19sOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+ Pih1bnNpZ25lZCBpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFs c2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9z dGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0 KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAq dGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwog ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQogICAg ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsK ICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAg ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4 Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf X2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJy ID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlm IChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQt PmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9 CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+ Pihsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2Up OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0 ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N X2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhp cywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAg ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw KQogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1 cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYg X19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChf X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpn b29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAg ICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19u KTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAg ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19l cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAg aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdl dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9y Pj4oZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsK ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUo aW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m bnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMs IF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAg ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1 cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX24pCiAg ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikK ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQp OwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAg ICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9z X2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9j aGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6 OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9fc3Ry ZWFtYnVmX3R5cGUqIF9fc2JvdXQpCiAgICB7CiAgICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBm YWxzZSk7CiAgICAgICBpZiAoX19jZXJiKQogICAgICAgICB7CiAgICAgICAgICAgdHJ5CiAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7CiAgICAgICAg ICAgICAgIGlmIChfX3Nib3V0KQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg IF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAg ICAgICBfX3h0cmN0ID0gX19jb3B5X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91dCk7 CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoIV9fc2JvdXQgfHwgIV9feHRy Y3QpCiAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwog ICAgICAgICAgICAgfQogICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi aXQpICE9IDApCiAgICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgICB9CiAgICAgICAg IH0KICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg IGdldCh2b2lkKQogICAgewogICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBl Ojplb2YoKTsKICAgICAgaW50X3R5cGUgX19jID0gX19lb2Y7CiAgICAgIF9NX2djb3VudCA9IDA7 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0gdGhp cy0+cmRidWYoKS0+c2J1bXBjKCk7CgogICAgICAgICAgICAgIGlmIChfX2MgIT0gX19lb2YpCiAg ICAgICAgICAgICAgICBfTV9nY291bnQgPSAxOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJp dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg ICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0 KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K ICAgICAgcmV0dXJuIF9fYzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChjaGFyX3R5cGUmIF9fYykKICAg IHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7 CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsK ICAgICAgICAgICAgICBpbnRfdHlwZSBfX2J1ZnZhbCA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygp OwoKICAgICAgICAgICAgICBpZiAoX19idWZ2YWwgIT0gX19lb2YpCiAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7CiAgICAgICAgICAgICAgICAgIF9fYyA9 IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19idWZ2YWwpOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl Ojplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4 Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 OgogICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVs aW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs IHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlw ZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19l b2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSog X19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+ c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCArIDEgPCBfX24gJiYgX19j ICE9IF9fZW9mICYmIF9fYyAhPSBfX2lkZWxpbSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAg ICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgICAgKytfTV9n Y291bnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikK ICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICpfX3Mg PSBjaGFyX3R5cGUoKTsKICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAg ICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAg ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5 cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNf dHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0g dGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3RoaXNfc2ItPnNn ZXRjKCk7CgogICAgICAgICAgICAgIHdoaWxlIChfX2MgIT0gX19lb2YgJiYgX19jICE9IF9faWRl bGltCiAgICAgICAgICAgICAgICAgICAgICYmIChfX3NiLnNwdXRjKHRyYWl0c190eXBlOjp0b19j aGFyX3R5cGUoX19jKSkgIT0gX19lb2YpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgX19jID0gX190aGlzX3NiLT5zbmV4 dGMoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQog ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFf TV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBz dHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9 IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQog ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3Qg aW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAg ICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAg ICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAg ICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hp bGUgKF9NX2djb3VudCArIDEgPCBfX24gJiYgX19jICE9IF9fZW9mICYmIF9fYyAhPSBfX2lkZWxp bSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5 cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4 dGMoKTsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2lkZWxpbSkKICAgICAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAg ICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpm YWlsYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAqX19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlm ICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgaWdub3JlKHN0cmVhbXNpemUgX19u LCBpbnRfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50 cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9m ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9f c2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNn ZXRjKCk7CgogICAgICAgICAgICAgIF9fbiA9IG1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVh bXNpemU+OjptYXgoKSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAmJiBf X2MgIT1fX2VvZiAmJiBfX2MgIT0gX19kZWxpbSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2Nv dW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAg ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAg ICAgICBlbHNlIGlmIChfX2MgPT0gX19kZWxpbSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Owog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjoKICAgIHBlZWsodm9pZCkKICAgIHsKICAgICAgaW50X3R5cGUgX19jID0gdHJhaXRzX3R5 cGU6OmVvZigpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlz LCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg ICAgICAgeyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0YygpOyB9CiAgICAgICAgICBjYXRjaChl eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBy ZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50 ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIp CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9n Y291bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbik7CiAgICAgICAgICAgICAgaWYg KF9NX2djb3VudCAhPSBfX24pCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBj YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHJlYWRzb21lKGNoYXJfdHlw ZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAg c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBf X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVt ID0gdGhpcy0+cmRidWYoKS0+aW5fYXZhaWwoKTsKICAgICAgICAgICAgICBpZiAoX19udW0gIT0g c3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19lb2YpKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICBfX251bSA9IG1pbihfX251bSwgX19uKTsKICAgICAgICAgICAgICAgICAgaWYg KF9fbnVtKQogICAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCktPnNn ZXRuKF9fcywgX19udW0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAg ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfTV9n Y291bnQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6CiAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg X19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlw ZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKCFfX3NiIHx8IF9fc2It PnNwdXRiYWNrYyhfX2MpID09IF9fZW9mKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg ICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgdW5nZXQodm9p ZCkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywg dHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl b2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYo KTsKICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19lb2YgPT0gX19zYi0+c3VuZ2V0YygpKQog ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQog ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBpbnQKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzeW5jKHZv aWQpCiAgICB7CiAgICAgIGludCBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgX01f Z2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChf X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBp ZiAoIV9fc2IgfHwgX19yZXQgPT0gX19zYi0+cHVic3luYygpKQogICAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgX19yZXQgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjoKICAgIHRlbGxnKHZvaWQpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9z X3R5cGUoLTEpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlz LCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg ICAgICAgewogICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAs IGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjppbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4 Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ OjoKICAgIHNlZWtnKHBvc190eXBlIF9fcG9zKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgcG9zX3R5cGUg X19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6aW4pOwoK CiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgICAg ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vl a2RpciBfX2RpcikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRi dWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppbik7CgoKICAgICAgICAg ICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKQogICAgewogICAgICB0eXBlZGVm IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlw ZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBp ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9faW4uZ2V0 KF9fYyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7 CgoKICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg ICAgICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UK ICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9f aW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAg dHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19z dHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBp bnRfdHlwZTsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGN0 eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwogICAgICBzdHJlYW1zaXplIF9fZXh0cmFjdGVkID0g MDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZh bHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg ICAgewoKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gX19pbi53aWR0aCgpOwogICAg ICAgICAgICAgIGlmIChfX251bSA9PSAwKQogICAgICAgICAgICAgICAgX19udW0gPSBudW1lcmlj X2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCk7CgogICAgICAgICAgICAgIGNvbnN0IF9fY3R5cGVf dHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwog ICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAg ICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAg ICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICB3aGlsZSAo X19leHRyYWN0ZWQgPCBfX251bSAtIDEKICAgICAgICAgICAgICAgICAgICAgJiYgX19jICE9IF9f ZW9mICYmICFfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSBfX2M7CiAgICAgICAgICAgICAgICAgICsr X19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgICAg ICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKCgogICAgICAgICAgICAgICpf X3MgPSBjaGFyX3R5cGUoKTsKCiAgICAgICAgICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICAg ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog ICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg ICAgaWYgKChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfX2V4 dHJhY3RlZCkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAg cmV0dXJuIF9faW47CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIHdzKGJhc2lj X2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2luKQogICAgewogICAgICB0eXBlZGVmIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19j dHlwZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlw ZSBfX2ludF90eXBlOwoKICAgICAgY29uc3QgX19jdHlwZV90eXBlJiBfX2N0eXBlID0gdXNlX2Zh Y2V0PF9fY3R5cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7CiAgICAgIGNvbnN0IF9faW50X3R5cGUg X19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9f aW4ucmRidWYoKTsKICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAg d2hpbGUgKF9fYyAhPSBfX2VvZiAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2Mp KQogICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICBpZiAoX19jID09IF9fZW9mKQog ICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICByZXR1cm4gX19p bjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg b3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAg ICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAg ewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1f dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19p bnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1i dWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVh bV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9f c2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBl OjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7 CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX2lu LndpZHRoKCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX247CiAgICAgICAgICBfX24gPSBfX3cg PiAwID8gc3RhdGljX2Nhc3Q8X19zaXplX3R5cGU+KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOwoK ICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBl X3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9 IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4u cmRidWYoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAg ICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX24KICAgICAgICAgICAgICAgICAmJiBfX2MgIT0g X19lb2YgJiYgIV9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsKICAg ICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0 YygpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgICAg ICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgX19pbi53aWR0aCgw KTsKICAgICAgICB9CgoKICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAgICBfX2luLnNldHN0 YXRlIChpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKQogICAgewogICAg ICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlw ZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBl OjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CgogICAgICBfX3NpemVf dHlwZSBfX2V4dHJhY3RlZCA9IDA7CiAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBmYWxzZTsKICAg ICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgdHJ1ZSk7CiAg ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgX19zdHIuZXJhc2UoKTsKICAgICAg ICAgIF9fc2l6ZV90eXBlIF9fbiA9IF9fc3RyLm1heF9zaXplKCk7CgogICAgICAgICAgX19pbnRf dHlwZSBfX2lkZWxpbSA9IF9UcmFpdHM6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAg X19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgIF9faW50X3R5 cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9m ID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxp bTsKCiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPD0gX19uICYmIF9fYyAhPSBfX2VvZiAm JiAhX190ZXN0ZGVsaW0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJh aXRzOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAg ICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgIF9fdGVzdGRlbGlt ID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19jID09IF9f ZW9mKQogICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAg IH0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAgX19pbi5z ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0 ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIGlu bGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0No YXJULF9UcmFpdHMsX0FsbG9jPiYgX19zdHIpCiAgICB7IHJldHVybiBnZXRsaW5lKF9faW4sIF9f c3RyLCBfX2luLndpZGVuKCdcbicpKTsgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFz aWNfaXN0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgd3MoaXN0cmVhbSYp OwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjaGFyJik7 CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNoYXIqKTsK ICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQg Y2hhciYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBz aWduZWQgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJl YW0mLCB1bnNpZ25lZCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9y Pj4oaXN0cmVhbSYsIHNpZ25lZCBjaGFyKik7CgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNp Y19pc3RyZWFtPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd3Mod2lzdHJl YW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCB3 Y2hhcl90Jik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFt Jiwgd2NoYXJfdCopOwp9CiMgMjg4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2lzdHJlYW0iIDIgMwoj IDQ3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2lvc3RyZWFtIiAyIDMKCm5hbWVzcGFjZSBzdGQKewog IGV4dGVybiBpc3RyZWFtIGNpbjsKICBleHRlcm4gb3N0cmVhbSBjb3V0OwogIGV4dGVybiBvc3Ry ZWFtIGNlcnI7CiAgZXh0ZXJuIG9zdHJlYW0gY2xvZzsKCiAgZXh0ZXJuIHdpc3RyZWFtIHdjaW47 CiAgZXh0ZXJuIHdvc3RyZWFtIHdjb3V0OwogIGV4dGVybiB3b3N0cmVhbSB3Y2VycjsKICBleHRl cm4gd29zdHJlYW0gd2Nsb2c7CgoKCiAgc3RhdGljIGlvc19iYXNlOjpJbml0IF9faW9pbml0Owp9 CiMgMTU0ICJwbGF0Zm9ybS5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9mc3RyZWFtIiAx IDMKIyA0NCAiL3Vzci9pbmNsdWRlL2crKy12My9mc3RyZWFtIiAzCgoKCgojIDEgIi91c3IvaW5j bHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9iYXNpY19maWxlLmgiIDEgMwojIDQz ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYmFzaWNfZmlsZS5o IiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg Y2xhc3MgX19iYXNpY19maWxlOwoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgX19iYXNpY19maWxl PGNoYXI+CiAgICB7CgogICAgICBfX2NfZmlsZSogX01fY2ZpbGU7CgogICAgICBib29sIF9NX2Nm aWxlX2NyZWF0ZWQ7CgogICAgcHVibGljOgogICAgICBfX2Jhc2ljX2ZpbGUoX19jX2xvY2sqIF9f bG9jayA9IDApOwoKICAgICAgdm9pZAogICAgICBfTV9vcGVuX21vZGUoaW9zX2Jhc2U6Om9wZW5t b2RlIF9fbW9kZSwgaW50JiBfX3BfbW9kZSwgaW50JiBfX3J3X21vZGUsCiAgICAgICAgICAgICAg ICAgICBjaGFyKiBfX2NfbW9kZSk7CgogICAgICBfX2Jhc2ljX2ZpbGUqCiAgICAgIG9wZW4oY29u c3QgY2hhciogX19uYW1lLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlLCBpbnQgX19wcm90ID0g MDY2NCk7CgogICAgICBfX2Jhc2ljX2ZpbGUqCiAgICAgIHN5c19vcGVuKF9fY19maWxlKiBfX2Zp bGUsIGlvc19iYXNlOjpvcGVubW9kZSk7CgogICAgICBfX2Jhc2ljX2ZpbGUqCiAgICAgIHN5c19v cGVuKGludCBfX2ZkLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlLCBib29sIF9fZGVsKTsKCiAg ICAgIGludAogICAgICBzeXNfZ2V0YygpOwoKICAgICAgaW50CiAgICAgIHN5c191bmdldGMoaW50 KTsKCiAgICAgIF9fYmFzaWNfZmlsZSoKICAgICAgY2xvc2UoKTsKCiAgICAgIGJvb2wKICAgICAg aXNfb3BlbigpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGZkKCk7CgogICAgICB+X19iYXNpY19m aWxlKCk7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHhzcHV0bihjb25zdCBjaGFyKiBfX3MsIHN0 cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAgeHNnZXRuKGNoYXIqIF9fcywg c3RyZWFtc2l6ZSBfX24pOwoKICAgICAgc3RyZWFtb2ZmCiAgICAgIHNlZWtvZmYoc3RyZWFtb2Zm IF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwKICAgICAgICAgICAgICBpb3NfYmFzZTo6 b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7CgogICAgICBz dHJlYW1vZmYKICAgICAgc2Vla3BvcyhzdHJlYW1vZmYgX19wb3MsCiAgICAgICAgICAgICAgaW9z X2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOwoK ICAgICAgaW50CiAgICAgIHN5bmMoKTsKICAgIH07Cn0KIyA0OSAiL3Vzci9pbmNsdWRlL2crKy12 My9mc3RyZWFtIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19maWxlYnVmIDogcHVibGljIGJh c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0 eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgog ICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX3N0 cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcl90eXBlLCB0cmFp dHNfdHlwZT4gX19maWxlYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgX19iYXNpY19maWxlPGNoYXI+ IF9fZmlsZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpzdGF0ZV90 eXBlIF9fc3RhdGVfdHlwZTsKICAgICAgdHlwZWRlZiBjb2RlY3Z0PGNoYXJfdHlwZSwgY2hhciwg X19zdGF0ZV90eXBlPiBfX2NvZGVjdnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Nv ZGVjdnRfdHlwZTo6cmVzdWx0IF9fcmVzX3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8Y2hhcl90 eXBlPiBfX2N0eXBlX3R5cGU7CgogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7CgogICAgcHJv dGVjdGVkOgoKCiAgICAgIF9fY19sb2NrIF9NX2xvY2s7CgoKICAgICAgX19maWxlX3R5cGUgX01f ZmlsZTsKCgogICAgICBfX3N0YXRlX3R5cGUgX01fc3RhdGVfY3VyOwogICAgICBfX3N0YXRlX3R5 cGUgX01fc3RhdGVfYmVnOwoKCiAgICAgIGJvb2wgX01fYnVmX2FsbG9jYXRlZDsKCgogICAgICBi b29sIF9NX2xhc3Rfb3ZlcmZsb3dlZDsKCgoKICAgICAgY2hhcl90eXBlKiBfTV9maWxlcG9zOwoK ICAgIHB1YmxpYzoKCiAgICAgIGJhc2ljX2ZpbGVidWYoKTsKCiAgICAgIHZpcnR1YWwKICAgICAg fmJhc2ljX2ZpbGVidWYoKQogICAgICB7CiAgICAgICAgdGhpcy0+Y2xvc2UoKTsKICAgICAgICBf TV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAgfQoKCiAgICAgIGJvb2wKICAgICAgaXNf b3BlbigpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbGUuaXNfb3BlbigpOyB9CgogICAgICBfX2ZpbGVi dWZfdHlwZSoKICAgICAgb3Blbihjb25zdCBjaGFyKiBfX3MsIGlvc19iYXNlOjpvcGVubW9kZSBf X21vZGUpOwoKICAgICAgX19maWxlYnVmX3R5cGUqCiAgICAgIGNsb3NlKCk7CgogICAgcHJvdGVj dGVkOgogICAgICB2b2lkCiAgICAgIF9NX2FsbG9jYXRlX2ludGVybmFsX2J1ZmZlcigpOwoKICAg ICAgdm9pZAogICAgICBfTV9kZXN0cm95X2ludGVybmFsX2J1ZmZlcigpOwoKCiAgICAgIHZpcnR1 YWwgc3RyZWFtc2l6ZQogICAgICBzaG93bWFueWMoKTsKIyAxNDAgIi91c3IvaW5jbHVkZS9nKyst djMvZnN0cmVhbSIgMwogICAgICBpbnRfdHlwZQogICAgICBfTV91bmRlcmZsb3dfY29tbW9uKGJv b2wgX19idW1wKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KCkgeyBy ZXR1cm4gX01fdW5kZXJmbG93X2NvbW1vbihmYWxzZSk7IH0KCiAgICAgIHZpcnR1YWwgaW50X3R5 cGUKICAgICAgdWZsb3coKSB7IHJldHVybiBfTV91bmRlcmZsb3dfY29tbW9uKHRydWUpOyB9Cgog ICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHBiYWNrZmFpbChpbnRfdHlwZSBfX2MgPSBfVHJh aXRzOjplb2YoKSk7CiMgMTYwICIvdXNyL2luY2x1ZGUvZysrLXYzL2ZzdHJlYW0iIDMKICAgICAg dmlydHVhbCBpbnRfdHlwZQogICAgICBvdmVyZmxvdyhpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjpl b2YoKSk7CiMgMTcwICIvdXNyL2luY2x1ZGUvZysrLXYzL2ZzdHJlYW0iIDMKICAgICAgaW50X3R5 cGUKICAgICAgX01fcmVhbGx5X292ZXJmbG93KGludF90eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigp KTsKCgoKICAgICAgdm9pZAogICAgICBfTV9jb252ZXJ0X3RvX2V4dGVybmFsKGNoYXJfdHlwZSos IHN0cmVhbXNpemUsIHN0cmVhbXNpemUmLCBzdHJlYW1zaXplJik7CgogICAgICB2aXJ0dWFsIF9f c3RyZWFtYnVmX3R5cGUqCiAgICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf X24pOwoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVrb2ZmKG9mZl90eXBlIF9fb2Zm LCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwKICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1v ZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7CgogICAgICB2aXJ0dWFs IHBvc190eXBlCiAgICAgIHNlZWtwb3MocG9zX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgaW9z X2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOwoK ICAgICAgdmlydHVhbCBpbnQKICAgICAgc3luYygpCiAgICAgIHsKICAgICAgICBib29sIF9fdGVz dHB1dCA9IF9NX291dF9jdXIgJiYgX01fb3V0X2JlZyA8IF9NX291dF9lbmQ7CgoKCiAgICAgICAg aWYgKF9fdGVzdHB1dCkKICAgICAgICAgIHsKCiAgICAgICAgICAgIG9mZl90eXBlIF9fb2ZmID0g X01fb3V0X2N1ciAtIF9NX291dF9lbmQ7CiAgICAgICAgICAgIF9NX3JlYWxseV9vdmVyZmxvdygp OwogICAgICAgICAgICBpZiAoX19vZmYpCiAgICAgICAgICAgICAgX01fZmlsZS5zZWVrb2ZmKF9f b2ZmLCBpb3NfYmFzZTo6Y3VyKTsKICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBf TV9maWxlLnN5bmMoKTsKICAgICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAg ICByZXR1cm4gMDsKICAgICAgfQoKICAgICAgdmlydHVhbCB2b2lkCiAgICAgIGltYnVlKGNvbnN0 IGxvY2FsZSYgX19sb2MpOwoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzZ2V0bihj aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsKICAgICAgICBzdHJlYW1zaXpl IF9fcmV0ID0gMDsKCiAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7CiAgICAg ICAgICAgIHdoaWxlIChfX3JldCA8IF9fbiAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgKl9fcyA9ICpfTV9pbl9jdXI7CiAgICAgICAgICAg ICAgICArK19fcmV0OwogICAgICAgICAgICAgICAgKytfX3M7CiAgICAgICAgICAgICAgICArK19N X2luX2N1cjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKTsK ICAgICAgICAgIH0KICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAgICBfX3JldCArPSBf X3N0cmVhbWJ1Zl90eXBlOjp4c2dldG4oX19zLCBfX24gLSBfX3JldCk7CiAgICAgICAgcmV0dXJu IF9fcmV0OwogICAgICB9CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNwdXRuKGNv bnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgewogICAgICAgIF9NX3Bi YWNrX2Rlc3Ryb3koKTsKICAgICAgICByZXR1cm4gX19zdHJlYW1idWZfdHlwZTo6eHNwdXRuKF9f cywgX19uKTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9vdXRwdXRfdW5zaGlmdCgpOwoj IDI1MSAiL3Vzci9pbmNsdWRlL2crKy12My9mc3RyZWFtIiAzCiAgICAgIHZvaWQKICAgICAgX01f c2V0X2luZGV0ZXJtaW5hdGUodm9pZCkKICAgICAgewogICAgICAgIGlmIChfTV9tb2RlICYgaW9z X2Jhc2U6OmluKQogICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX2J1ZiwgX01fYnVmKTsK ICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpCiAgICAgICAgICB0aGlzLT5zZXRw KF9NX2J1ZiwgX01fYnVmKTsKICAgICAgICBfTV9maWxlcG9zID0gX01fYnVmOwogICAgICB9Cgog ICAgICB2b2lkCiAgICAgIF9NX3NldF9kZXRlcm1pbmF0ZShvZmZfdHlwZSBfX29mZikKICAgICAg ewogICAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOwogICAgICAg IGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAgICAgaWYgKF9f dGVzdGluKQogICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX2J1ZiwgX01fYnVmICsgX19v ZmYpOwogICAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAgICAgICB0aGlzLT5zZXRwKF9NX2J1Ziwg X01fYnVmICsgX19vZmYpOwogICAgICAgIF9NX2ZpbGVwb3MgPSBfTV9idWYgKyBfX29mZjsKICAg ICAgfQoKICAgICAgYm9vbAogICAgICBfTV9pc19pbmRldGVybWluYXRlKHZvaWQpCiAgICAgIHsK ICAgICAgICBib29sIF9fcmV0ID0gZmFsc2U7CgogICAgICAgIGlmIChfTV9idWYpCiAgICAgICAg ICB7CiAgICAgICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6OmluKQogICAgICAgICAgICAg IF9fcmV0ID0gX01faW5fYmVnID09IF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPT0gX01faW5fZW5k OwogICAgICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpCiAgICAgICAgICAgICAg X19yZXQgPSBfTV9vdXRfYmVnID09IF9NX291dF9jdXIgJiYgX01fb3V0X2N1ciA9PSBfTV9vdXRf ZW5kOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQogICAgfTsKCgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xh c3MgYmFzaWNfaWZzdHJlYW0gOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg IHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFp dHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRz X3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190 eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hh cl90eXBlLCB0cmFpdHNfdHlwZT4gX19maWxlYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf aXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2lzdHJlYW1fdHlwZTsKCiAgICBwcml2 YXRlOgogICAgICBfX2ZpbGVidWZfdHlwZSBfTV9maWxlYnVmOwoKICAgIHB1YmxpYzoKCgogICAg ICBiYXNpY19pZnN0cmVhbSgpCiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19udWxsKSwgX01fZmls ZWJ1ZigpCiAgICAgIHsgdGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7IH0KIyAzMjggIi91c3IvaW5j bHVkZS9nKystdjMvZnN0cmVhbSIgMwogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pZnN0cmVh bShjb25zdCBjaGFyKiBfX3MsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6 aW4pCiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19udWxsKSwgX01fZmlsZWJ1ZigpCiAgICAgIHsK ICAgICAgICB0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsKICAgICAgICB0aGlzLT5vcGVuKF9fcywg X19tb2RlKTsKICAgICAgfQoKICAgICAgfmJhc2ljX2lmc3RyZWFtKCkKICAgICAgeyB9CgoKCgoK CiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0dXJu IGNvbnN0X2Nhc3Q8X19maWxlYnVmX3R5cGUqPigmX01fZmlsZWJ1Zik7IH0KCiAgICAgIGJvb2wK ICAgICAgaXNfb3BlbigpIHsgcmV0dXJuIF9NX2ZpbGVidWYuaXNfb3BlbigpOyB9CgogICAgICB2 b2lkCiAgICAgIG9wZW4oY29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2Rl ID0gaW9zX2Jhc2U6OmluKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxlYnVmLm9wZW4oX19z LCBfX21vZGUgfCBpb3NfYmFzZTo6aW4pKQogICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmZhaWxiaXQpOwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBjbG9zZSgpCiAgICAgIHsK ICAgICAgICBpZiAoIV9NX2ZpbGVidWYuY2xvc2UoKSkKICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19vZnN0cmVhbSA6 IHB1YmxpYyBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPgogICAgewogICAgcHVibGljOgoK ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJh aXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGlu dF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3Nf dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5 cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+ IF9fZmlsZWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcl90eXBlLCB0 cmFpdHNfdHlwZT4gX19vc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19maWxlYnVm X3R5cGUgX01fZmlsZWJ1ZjsKCiAgICBwdWJsaWM6CgoKICAgICAgYmFzaWNfb2ZzdHJlYW0oKQog ICAgICA6IF9fb3N0cmVhbV90eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQogICAgICB7IHRoaXMt PmluaXQoJl9NX2ZpbGVidWYpOyB9CiMgNDA1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2ZzdHJlYW0i IDMKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb2ZzdHJlYW0oY29uc3QgY2hhciogX19zLAog ICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6 Om91dHxpb3NfYmFzZTo6dHJ1bmMpCiAgICAgIDogX19vc3RyZWFtX3R5cGUoX19udWxsKSwgX01f ZmlsZWJ1ZigpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsKICAgICAg ICB0aGlzLT5vcGVuKF9fcywgX19tb2RlKTsKICAgICAgfQoKICAgICAgfmJhc2ljX29mc3RyZWFt KCkKICAgICAgeyB9CgoKCgoKCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICByZGJ1ZigpIGNv bnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19maWxlYnVmX3R5cGUqPigmX01fZmlsZWJ1 Zik7IH0KCgoKCgogICAgICBib29sCiAgICAgIGlzX29wZW4oKSB7IHJldHVybiBfTV9maWxlYnVm LmlzX29wZW4oKTsgfQojIDQ0MSAiL3Vzci9pbmNsdWRlL2crKy12My9mc3RyZWFtIiAzCiAgICAg IHZvaWQKICAgICAgb3Blbihjb25zdCBjaGFyKiBfX3MsCiAgICAgICAgICAgaW9zX2Jhc2U6Om9w ZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpvdXQgfCBpb3NfYmFzZTo6dHJ1bmMpCiAgICAgIHsK ICAgICAgICBpZiAoIV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSB8IGlvc19iYXNlOjpvdXQp KQogICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CgoK ICAgICAgdm9pZAogICAgICBjbG9zZSgpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGVidWYu Y2xvc2UoKSkKICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAg ICAgfQogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBjbGFzcyBiYXNpY19mc3RyZWFtIDogcHVibGljIGJhc2ljX2lvc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFz aWNfZmlsZWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZfdHlwZTsKICAgICAg dHlwZWRlZiBiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19pb3NfdHlwZTsKICAg ICAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2lvc3Ry ZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19maWxlYnVmX3R5cGUgX01fZmlsZWJ1ZjsK CiAgICBwdWJsaWM6CgoKICAgICAgYmFzaWNfZnN0cmVhbSgpCiAgICAgIDogX19pb3N0cmVhbV90 eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQogICAgICB7IHRoaXMtPmluaXQoJl9NX2ZpbGVidWYp OyB9CiMgNDk3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2ZzdHJlYW0iIDMKICAgICAgZXhwbGljaXQK ICAgICAgYmFzaWNfZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsCiAgICAgICAgICAgICAgICAgICAg aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQp CiAgICAgIDogX19pb3N0cmVhbV90eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQogICAgICB7CiAg ICAgICAgdGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7CiAgICAgICAgdGhpcy0+b3BlbihfX3MsIF9f bW9kZSk7CiAgICAgIH0KCiAgICAgIH5iYXNpY19mc3RyZWFtKCkKICAgICAgeyB9CgoKCgoKCiAg ICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNv bnN0X2Nhc3Q8X19maWxlYnVmX3R5cGUqPigmX01fZmlsZWJ1Zik7IH0KCgoKCgogICAgICBib29s CiAgICAgIGlzX29wZW4oKSB7IHJldHVybiBfTV9maWxlYnVmLmlzX29wZW4oKTsgfQojIDUzMyAi L3Vzci9pbmNsdWRlL2crKy12My9mc3RyZWFtIiAzCiAgICAgIHZvaWQKICAgICAgb3Blbihjb25z dCBjaGFyKiBfX3MsCiAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19i YXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGVidWYu b3BlbihfX3MsIF9fbW9kZSkpCiAgICAgICAgICBzZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7 CiAgICAgIH0KCgogICAgICB2b2lkCiAgICAgIGNsb3NlKCkKICAgICAgewogICAgICAgIGlmICgh X01fZmlsZWJ1Zi5jbG9zZSgpKQogICAgICAgICAgc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp OwogICAgICB9CiAgICB9Owp9CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnN0 cmVhbS50Y2MiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnN0cmVhbS50Y2Mi IDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBfTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKQogICAgewogICAgICBpZiAoIV9NX2J1ZiAm JiBfTV9idWZfc2l6ZV9vcHQpCiAgICAgICAgewogICAgICAgICAgX01fYnVmX3NpemUgPSBfTV9i dWZfc2l6ZV9vcHQ7CgoKICAgICAgICAgIHRyeSB7IF9NX2J1ZiA9IG5ldyBjaGFyX3R5cGVbX01f YnVmX3NpemVdOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBkZWxldGUgW10gX01fYnVmOwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9 CiAgICAgICAgICBfTV9idWZfYWxsb2NhdGVkID0gdHJ1ZTsKICAgICAgICB9CiAgICB9CgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBi YXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgX01fZGVzdHJveV9pbnRlcm5hbF9i dWZmZXIoKQogICAgewogICAgICBpZiAoX01fYnVmX2FsbG9jYXRlZCkKICAgICAgICB7CiAgICAg ICAgICBkZWxldGUgW10gX01fYnVmOwogICAgICAgICAgX01fYnVmID0gX19udWxsOwogICAgICAg ICAgX01fYnVmX2FsbG9jYXRlZCA9IGZhbHNlOwogICAgICAgICAgdGhpcy0+c2V0ZyhfX251bGws IF9fbnVsbCwgX19udWxsKTsKICAgICAgICAgIHRoaXMtPnNldHAoX19udWxsLCBfX251bGwpOwog ICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGJhc2ljX2ZpbGVi dWYoKSA6IF9fc3RyZWFtYnVmX3R5cGUoKSwgX01fZmlsZSgmX01fbG9jayksCiAgICBfTV9zdGF0 ZV9jdXIoX19zdGF0ZV90eXBlKCkpLCBfTV9zdGF0ZV9iZWcoX19zdGF0ZV90eXBlKCkpLAogICAg X01fYnVmX2FsbG9jYXRlZChmYWxzZSksIF9NX2xhc3Rfb3ZlcmZsb3dlZChmYWxzZSkKICAgIHsg X01fYnVmX3VuaWZpZWQgPSB0cnVlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz Pjo6X19maWxlYnVmX3R5cGUqCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Ogog ICAgb3Blbihjb25zdCBjaGFyKiBfX3MsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUpCiAgICB7 CiAgICAgIF9fZmlsZWJ1Zl90eXBlICpfX3JldCA9IF9fbnVsbDsKICAgICAgaWYgKCF0aGlzLT5p c19vcGVuKCkpCiAgICAgICAgewogICAgICAgICAgX01fZmlsZS5vcGVuKF9fcywgX19tb2RlKTsK ICAgICAgICAgIGlmICh0aGlzLT5pc19vcGVuKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBfTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKTsKICAgICAgICAgICAgICBfTV9tb2RlID0g X19tb2RlOwoKCiAgICAgICAgICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUoKTsKICAgICAgICAg ICAgICBpZiAoKF9fbW9kZSAmIGlvc19iYXNlOjphdGUpCiAgICAgICAgICAgICAgICAgICYmIHRo aXMtPnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmVuZCwgX19tb2RlKSA8IDApCiAgICAgICAgICAgICAg ICB0aGlzLT5jbG9zZSgpOwogICAgICAgICAgICAgIF9fcmV0ID0gdGhpczsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9D aGFyVCwgX1RyYWl0cz46Ol9fZmlsZWJ1Zl90eXBlKgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQs IF9UcmFpdHM+OjoKICAgIGNsb3NlKCkKICAgIHsKICAgICAgX19maWxlYnVmX3R5cGUgKl9fcmV0 ID0gX19udWxsOwogICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQogICAgICAgIHsKICAgICAgICAg IGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgYm9v bCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3VyICYmIF9NX291dF9iZWcgPCBfTV9vdXRfZW5kOwogICAg ICAgICAgaWYgKF9fdGVzdHB1dCAmJiBfTV9yZWFsbHlfb3ZlcmZsb3coX19lb2YpID09IF9fZW9m KQogICAgICAgICAgICByZXR1cm4gX19yZXQ7CgoKICAgICAgICAgIF9NX21vZGUgPSBpb3NfYmFz ZTo6b3Blbm1vZGUoMCk7CiAgICAgICAgICBfTV9kZXN0cm95X2ludGVybmFsX2J1ZmZlcigpOwog ICAgICAgICAgX01fcGJhY2tfZGVzdHJveSgpOwojIDEzNyAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL2ZzdHJlYW0udGNjIiAzCiAgICAgICAgICBpZiAoX01fZmlsZS5jbG9zZSgpKQogICAgICAg ICAgICBfX3JldCA9IHRoaXM7CiAgICAgICAgfQoKICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0g ZmFsc2U7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfZmlsZWJ1Zjxf Q2hhclQsIF9UcmFpdHM+OjoKICAgIHNob3dtYW55YygpCiAgICB7CiAgICAgIHN0cmVhbXNpemUg X19yZXQgPSAtMTsKICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47 CgogICAgICBpZiAoX190ZXN0aW4gJiYgdGhpcy0+aXNfb3BlbigpKQogICAgICAgIHsKICAgICAg ICAgIGlmIChfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICAgIF9fcmV0ID0gX01faW5f ZW5kIC0gX01faW5fY3VyOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3JldCA9IDA7CiAg ICAgICAgfQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAgcmV0dXJuIF9f cmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAg ICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgX01fdW5kZXJmbG93X2NvbW1v bihib29sIF9fYnVtcCkKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlwZTo6 ZW9mKCk7CiAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOwogICAg ICBib29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwoKICAgICAgaWYgKF9f dGVzdGluKQogICAgICAgIHsKCgoKICAgICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgX01fcGJhY2tfZGVzdHJveSgpOwogICAgICAgICAgICAgIGlm IChfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICAgICAgICByZXR1cm4gdHJhaXRzX3R5 cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwogICAgICAgICAgICB9CgoKCiAgICAgICAgICBi b29sIF9fdGVzdGdldCA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7CiAgICAg ICAgICBib29sIF9fdGVzdGluaXQgPSBfTV9pc19pbmRldGVybWluYXRlKCk7CiAgICAgICAgICBp ZiAoX190ZXN0Z2V0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fdGVzdG91dCkK ICAgICAgICAgICAgICAgIF9NX3JlYWxseV9vdmVyZmxvdygpOwogICAgICAgICAgICAgIGVsc2Ug aWYgKF9NX2luX2N1ciAhPSBfTV9maWxlcG9zKQogICAgICAgICAgICAgICAgX01fZmlsZS5zZWVr b2ZmKF9NX2luX2N1ciAtIF9NX2ZpbGVwb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6OmluKTsKICAgICAgICAgICAgfQoKICAgICAgICAg IGlmIChfX3Rlc3Rpbml0IHx8IF9fdGVzdGdldCkKICAgICAgICAgICAgewogICAgICAgICAgICAg IGNvbnN0IGxvY2FsZSBfX2xvYyA9IHRoaXMtPmdldGxvYygpOwogICAgICAgICAgICAgIGNvbnN0 IF9fY29kZWN2dF90eXBlJiBfX2N2dCA9IHVzZV9mYWNldDxfX2NvZGVjdnRfdHlwZT4oX19sb2Mp OwoKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fZWxlbiA9IDA7CiAgICAgICAgICAgICAgc3Ry ZWFtc2l6ZSBfX2lsZW4gPSAwOwogICAgICAgICAgICAgIGlmIChfX2N2dC5hbHdheXNfbm9jb252 KCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZWxlbiA9IF9NX2ZpbGUu eHNnZXRuKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9NX2luX2JlZyksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2J1Zl9zaXplKTsKICAgICAgICAgICAgICAg ICAgX19pbGVuID0gX19lbGVuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgY2hhciogX19idWYgPSBzdGF0aWNf Y2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfTV9idWZfc2l6ZSkpOwogICAgICAgICAgICAg ICAgICBfX2VsZW4gPSBfTV9maWxlLnhzZ2V0bihfX2J1ZiwgX01fYnVmX3NpemUpOwoKICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciogX19lZW5kOwogICAgICAgICAgICAgICAgICBjaGFyX3R5 cGUqIF9faWVuZDsKICAgICAgICAgICAgICAgICAgX19yZXNfdHlwZSBfX3IgPSBfX2N2dC5pbihf TV9zdGF0ZV9jdXIsIF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fYnVmICsgX19lbGVuLCBfX2VlbmQsIF9NX2luX2JlZywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9pbl9iZWcgKyBfTV9idWZfc2l6ZSwgX19p ZW5kKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fciA9PSBjb2RlY3Z0X2Jhc2U6Om9rKQogICAg ICAgICAgICAgICAgICAgIF9faWxlbiA9IF9faWVuZCAtIF9NX2luX2JlZzsKICAgICAgICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICBf X2lsZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgX01fZmlsZS5zZWVrb2ZmKC1fX2VsZW4s IGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjppbik7CiAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBpZiAoMCA8IF9faWxlbikKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgX01fc2V0X2RldGVybWluYXRlKF9faWxlbik7CiAgICAg ICAgICAgICAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAgICAgICAgICAgICAgICAgX01fb3V0X2N1 ciA9IF9NX2luX2N1cjsKICAgICAgICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9f aW50X3R5cGUoKl9NX2luX2N1cik7CiAgICAgICAgICAgICAgICAgIGlmIChfX2J1bXApCiAgICAg ICAgICAgICAgICAgICAgX01faW5fY3VyX21vdmUoMSk7CiAgICAgICAgICAgICAgICAgIGVsc2Ug aWYgKF9NX2J1Zl9zaXplID09IDEpCiAgICAgICAgICAgICAgICAgICAgewoKCgogICAgICAgICAg ICAgICAgICAgICAgX01fZmlsZS5zeXNfdW5nZXRjKCpfTV9pbl9jdXIpOwogICAgICAgICAgICAg ICAgICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9NX2xhc3Rfb3Zl cmZsb3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVi dWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBf VHJhaXRzPjo6CiAgICBwYmFja2ZhaWwoaW50X3R5cGUgX19pKQogICAgewogICAgICBpbnRfdHlw ZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21v ZGUgJiBpb3NfYmFzZTo6aW47CgogICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAgewogICAgICAg ICAgYm9vbCBfX3Rlc3RwYiA9IF9NX2luX2JlZyA8IF9NX2luX2N1cjsKICAgICAgICAgIGNoYXJf dHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9faSk7CiAgICAgICAgICBib29s IF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2ksIF9fcmV0KTsKCiAgICAg ICAgICBpZiAoX190ZXN0cGIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBib29sIF9fdGVz dG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICAgICAgICAgIGJvb2wgX190ZXN0 ZXEgPSB0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlzLT5ncHRyKClbLTFdKTsKCgoKICAgICAgICAg ICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RlcSkKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgLS1fTV9pbl9jdXI7CiAgICAgICAgICAgICAgICAgIGlmIChfX3Rlc3RvdXQp CiAgICAgICAgICAgICAgICAgICAgLS1fTV9vdXRfY3VyOwogICAgICAgICAgICAgICAgICBfX3Jl dCA9IF9faTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3Rl b2YpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIC0tX01faW5fY3VyOwogICAg ICAgICAgICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgICAgICAgICAgICAgIC0tX01fb3V0 X2N1cjsKICAgICAgICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2kp OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKCFfX3Rlc3Rlb2YpCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIC0tX01faW5fY3VyOwogICAgICAgICAg ICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgICAgICAgICAgICAgIC0tX01fb3V0X2N1cjsK ICAgICAgICAgICAgICAgICAgX01fcGJhY2tfY3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgICpf TV9pbl9jdXIgPSBfX2M7CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gX19pOwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKCgogICAg ICAgICAgICAgIHRoaXMtPnNlZWtvZmYoLTEsIGlvc19iYXNlOjpjdXIpOwogICAgICAgICAgICAg IHRoaXMtPnVuZGVyZmxvdygpOwogICAgICAgICAgICAgIGlmICghX190ZXN0ZW9mKQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfX2MsICpf TV9pbl9jdXIpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9N X3BiYWNrX2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgICAgICAgKl9NX2luX2N1ciA9IF9fYzsK ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gX19pOwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fcmV0ID0g dHJhaXRzX3R5cGU6Om5vdF9lb2YoX19pKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg X01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUg YmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfZmlsZWJ1 ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG92ZXJmbG93KGludF90eXBlIF9fYykKICAgIHsKICAg ICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIGJvb2wgX190ZXN0 cHV0ID0gX01fb3V0X2N1ciAmJiBfTV9vdXRfY3VyIDwgX01fYnVmICsgX01fYnVmX3NpemU7CiAg ICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CgogICAgICBpZiAo X190ZXN0b3V0KQogICAgICAgIHsKICAgICAgICAgIGlmIChfX3Rlc3RwdXQpCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICAqX01fb3V0X2N1ciA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUo X19jKTsKICAgICAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoMSk7CiAgICAgICAgICAgICAgX19y ZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2MpOwogICAgICAgICAgICB9CiAgICAgICAgICBl bHNlCiAgICAgICAgICAgIF9fcmV0ID0gdGhpcy0+X01fcmVhbGx5X292ZXJmbG93KF9fYyk7CiAg ICAgICAgfQoKICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICAgIHJldHVybiBf X3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgdm9pZAogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIF9NX2Nv bnZlcnRfdG9fZXh0ZXJuYWwoX0NoYXJUKiBfX2lidWYsIHN0cmVhbXNpemUgX19pbGVuLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zaXplJiBfX2VsZW4sIHN0cmVhbXNpemUmIF9f cGxlbikKICAgIHsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gdGhpcy0+Z2V0bG9jKCk7CiAg ICAgIGNvbnN0IF9fY29kZWN2dF90eXBlJiBfX2N2dCA9IHVzZV9mYWNldDxfX2NvZGVjdnRfdHlw ZT4oX19sb2MpOwoKICAgICAgaWYgKF9fY3Z0LmFsd2F5c19ub2NvbnYoKSAmJiBfX2lsZW4pCiAg ICAgICAgewogICAgICAgICAgX19lbGVuICs9IF9NX2ZpbGUueHNwdXRuKHJlaW50ZXJwcmV0X2Nh c3Q8Y2hhcio+KF9faWJ1ZiksIF9faWxlbik7CiAgICAgICAgICBfX3BsZW4gKz0gX19pbGVuOwog ICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBpbnQgX19leHRfbXVsdGlw bGllciA9IF9fY3Z0LmVuY29kaW5nKCk7CiAgICAgICAgICBpZiAoX19leHRfbXVsdGlwbGllciA9 PSAtMSB8fCBfX2V4dF9tdWx0aXBsaWVyID09IDApCiAgICAgICAgICAgIF9fZXh0X211bHRpcGxp ZXIgPSBzaXplb2YoY2hhcl90eXBlKTsKICAgICAgICAgIHN0cmVhbXNpemUgX19ibGVuID0gX19p bGVuICogX19leHRfbXVsdGlwbGllcjsKICAgICAgICAgIGNoYXIqIF9fYnVmID0gc3RhdGljX2Nh c3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19ibGVuKSk7CiAgICAgICAgICBjaGFyKiBfX2Jl bmQ7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faWVuZDsKICAgICAgICAgIF9fcmVzX3R5 cGUgX19yID0gX19jdnQub3V0KF9NX3N0YXRlX2N1ciwgX19pYnVmLCBfX2lidWYgKyBfX2lsZW4s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2llbmQsIF9fYnVmLCBfX2J1 ZiArIF9fYmxlbiwgX19iZW5kKTsKCiAgICAgICAgICBpZiAoX19yICE9IGNvZGVjdnRfYmFzZTo6 ZXJyb3IpCiAgICAgICAgICAgIF9fYmxlbiA9IF9fYmVuZCAtIF9fYnVmOwoKICAgICAgICAgIGVs c2UKICAgICAgICAgICAgX19ibGVuID0gMDsKCiAgICAgICAgICBpZiAoX19ibGVuKQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgX19lbGVuICs9IF9NX2ZpbGUueHNwdXRuKF9fYnVmLCBfX2Js ZW4pOwogICAgICAgICAgICAgIF9fcGxlbiArPSBfX2JsZW47CiAgICAgICAgICAgIH0KCgogICAg ICAgICAgaWYgKF9fciA9PSBjb2RlY3Z0X2Jhc2U6OnBhcnRpYWwpCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faXJlc3VtZSA9IF9faWVuZDsKICAgICAgICAg ICAgICBzdHJlYW1zaXplIF9fcmxlbiA9IF9NX291dF9lbmQgLSBfX2llbmQ7CiAgICAgICAgICAg ICAgX19yID0gX19jdnQub3V0KF9NX3N0YXRlX2N1ciwgX19pcmVzdW1lLCBfX2lyZXN1bWUgKyBf X3JsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faWVuZCwgX19idWYsIF9fYnVm ICsgX19ibGVuLCBfX2JlbmQpOwogICAgICAgICAgICAgIGlmIChfX3IgIT0gY29kZWN2dF9iYXNl OjplcnJvcikKICAgICAgICAgICAgICAgIF9fcmxlbiA9IF9fYmVuZCAtIF9fYnVmOwogICAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fcmxlbiA9IDA7CiAgICAgICAgICAgICAgaWYg KF9fcmxlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lbGVuICs9IF9N X2ZpbGUueHNwdXRuKF9fYnVmLCBfX3JsZW4pOwogICAgICAgICAgICAgICAgICBfX3BsZW4gKz0g X19ybGVuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFt ZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19maWxl YnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgX01fcmVhbGx5X292ZXJmbG93KGludF90eXBlIF9f YykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAg IGJvb2wgX190ZXN0cHV0ID0gX01fb3V0X2N1ciAmJiBfTV9vdXRfYmVnIDwgX01fb3V0X2VuZDsK ICAgICAgYm9vbCBfX3Rlc3R1bmJ1ZmZlcmVkID0gX01fZmlsZS5pc19vcGVuKCkgJiYgIV9NX2J1 Zl9zaXplOwoKICAgICAgaWYgKF9fdGVzdHB1dCB8fCBfX3Rlc3R1bmJ1ZmZlcmVkKQogICAgICAg IHsKCiAgICAgICAgICBzdHJlYW1zaXplIF9fZWxlbiA9IDA7CiAgICAgICAgICBzdHJlYW1zaXpl IF9fcGxlbiA9IDA7CgoKCgogICAgICAgICAgaWYgKF9NX2ZpbGVwb3MgJiYgX01fZmlsZXBvcyAh PSBfTV9vdXRfYmVnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19vZmYg PSBfTV9vdXRfYmVnIC0gX01fZmlsZXBvczsKICAgICAgICAgICAgICBfTV9maWxlLnNlZWtvZmYo X19vZmYsIGlvc19iYXNlOjpjdXIpOwogICAgICAgICAgICB9CgoKCiAgICAgICAgICBpZiAoIV9f dGVzdHVuYnVmZmVyZWQpCiAgICAgICAgICAgIF9NX2NvbnZlcnRfdG9fZXh0ZXJuYWwoX01fb3V0 X2JlZywgX01fb3V0X2VuZCAtIF9NX291dF9iZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19lbGVuLCBfX3BsZW4pOwoKCgogICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6 ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgY2hhcl90eXBlIF9fcGVuZGluZyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUo X19jKTsKICAgICAgICAgICAgICBfTV9jb252ZXJ0X3RvX2V4dGVybmFsKCZfX3BlbmRpbmcsIDEs IF9fZWxlbiwgX19wbGVuKTsKCgogICAgICAgICAgICAgIGlmIChfX2VsZW4gPT0gX19wbGVuKQog ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfTV9zZXRfaW5kZXRlcm1pbmF0ZSgp OwogICAgICAgICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKCFfTV9maWxl LnN5bmMoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX3NldF9pbmRldGVybWluYXRl KCk7CiAgICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2MpOwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSB0cnVlOwogICAg ICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6 X19zdHJlYW1idWZfdHlwZSoKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBzZXRidWYoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBpZiAo IXRoaXMtPmlzX29wZW4oKSAmJiBfX3MgPT0gMCAmJiBfX24gPT0gMCkKICAgICAgICBfTV9idWZf c2l6ZV9vcHQgPSAwOwogICAgICBlbHNlIGlmIChfX3MgJiYgX19uKQogICAgICAgIHsKCgoKCgog ICAgICAgICAgX01fZGVzdHJveV9pbnRlcm5hbF9idWZmZXIoKTsKCgogICAgICAgICAgX01fYnVm ID0gX19zOwogICAgICAgICAgX01fYnVmX3NpemVfb3B0ID0gX01fYnVmX3NpemUgPSBfX247CiAg ICAgICAgICBfTV9zZXRfaW5kZXRlcm1pbmF0ZSgpOwogICAgICAgIH0KICAgICAgX01fbGFzdF9v dmVyZmxvd2VkID0gZmFsc2U7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19maWxl YnVmPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwg X1RyYWl0cz46OgogICAgc2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIg X193YXksIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUpCiAgICB7CiAgICAgIHBvc190eXBlIF9f cmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsKICAgICAgYm9vbCBfX3Rlc3RpbiA9IChpb3Nf YmFzZTo6aW4gJiBfTV9tb2RlICYgX19tb2RlKSAhPSAwOwogICAgICBib29sIF9fdGVzdG91dCA9 IChpb3NfYmFzZTo6b3V0ICYgX01fbW9kZSAmIF9fbW9kZSkgIT0gMDsKCgogICAgICBpbnQgX193 aWR0aCA9IHVzZV9mYWNldDxfX2NvZGVjdnRfdHlwZT4oX01fYnVmX2xvY2FsZSkuZW5jb2Rpbmco KTsKICAgICAgaWYgKF9fd2lkdGggPCAwKQogICAgICAgIF9fd2lkdGggPSAwOwogICAgICBib29s IF9fdGVzdGZhaWwgPSBfX29mZiAhPSAwICYmIF9fd2lkdGggPD0gMDsKCiAgICAgIGlmICh0aGlz LT5pc19vcGVuKCkgJiYgIV9fdGVzdGZhaWwgJiYgKF9fdGVzdGluIHx8IF9fdGVzdG91dCkpCiAg ICAgICAgewoKICAgICAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKTsKCiAgICAgICAgICBpZiAoX193 YXkgIT0gaW9zX2Jhc2U6OmN1ciB8fCBfX29mZiAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgb2ZmX3R5cGUgX19jb21wdXRlZF9vZmYgPSBfX3dpZHRoICogX19vZmY7CgogICAgICAg ICAgICAgIGJvb2wgX190ZXN0Z2V0ID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2Vu ZDsKICAgICAgICAgICAgICBib29sIF9fdGVzdHB1dCA9IF9NX291dF9jdXIgJiYgX01fb3V0X2Jl ZyA8IF9NX291dF9lbmQ7CgoKICAgICAgICAgICAgICBpZiAoX190ZXN0cHV0IHx8IF9NX2xhc3Rf b3ZlcmZsb3dlZCkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgIHRoaXMtPnN5 bmMoKTsKCiAgICAgICAgICAgICAgICAgIF9NX291dHB1dF91bnNoaWZ0KCk7CiAgICAgICAgICAg ICAgICB9CgogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdGdldCAmJiBfX3dheSA9PSBpb3Nf YmFzZTo6Y3VyKQogICAgICAgICAgICAgICAgX19jb21wdXRlZF9vZmYgKz0gX01faW5fY3VyIC0g X01fZmlsZXBvczsKCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9maWxlLnNlZWtvZmYoX19jb21w dXRlZF9vZmYsIF9fd2F5LCBfX21vZGUpOwogICAgICAgICAgICAgIF9NX3NldF9pbmRldGVybWlu YXRlKCk7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgX19yZXQgPSBfTV9maWxlLnNlZWtvZmYoX19vZmYsIGlvc19iYXNlOjpjdXIsIF9f bW9kZSk7CiAgICAgICAgICAgICAgX19yZXQgKz0gbWF4KF9NX291dF9jdXIsIF9NX2luX2N1cikg LSBfTV9maWxlcG9zOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBfTV9sYXN0X292ZXJm bG93ZWQgPSBmYWxzZTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVm PF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1Ry YWl0cz46OgogICAgc2Vla3Bvcyhwb3NfdHlwZSBfX3BvcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9f bW9kZSkKICAgIHsKCgogICAgICByZXR1cm4gdGhpcy0+c2Vla29mZihvZmZfdHlwZShfX3Bvcyks IGlvc19iYXNlOjpiZWcsIF9fbW9kZSk7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwg X1RyYWl0cz46OgogICAgX01fb3V0cHV0X3Vuc2hpZnQoKQogICAgeyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVi dWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAg ewogICAgICBib29sIF9fdGVzdGJlZyA9IGdwdHIoKSA9PSBlYmFjaygpICYmIHBwdHIoKSA9PSBw YmFzZSgpOwoKICAgICAgaWYgKF9fdGVzdGJlZyAmJiBfTV9idWZfbG9jYWxlICE9IF9fbG9jKQog ICAgICAgIHsKICAgICAgICAgIF9NX2J1Zl9sb2NhbGUgPSBfX2xvYzsKICAgICAgICAgIF9NX2J1 Zl9sb2NhbGVfaW5pdCA9IHRydWU7CiAgICAgICAgfQoKCgoKCiAgICAgIF9NX2xhc3Rfb3ZlcmZs b3dlZCA9IGZhbHNlOwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfZmls ZWJ1ZjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90 PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaWZzdHJlYW08Y2hhcj47CiAgZXh0ZXJu IHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lmc3RyZWFtPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0 ZSBjbGFzcyBiYXNpY19vZnN0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFz aWNfb2ZzdHJlYW08d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2ZzdHJl YW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD47 Cn0KIyA1NTYgIi91c3IvaW5jbHVkZS9nKystdjMvZnN0cmVhbSIgMiAzCiMgMTU1ICJwbGF0Zm9y bS5oIiAyCiMgMTc5ICJwbGF0Zm9ybS5oIgogICB1c2luZyBuYW1lc3BhY2Ugc3RkOwojIDIxNSAi cGxhdGZvcm0uaCIKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTg7CgoKdHlwZWRlZiBzaWdu ZWQgbG9uZyBsb25nIGk4OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1NDsKCgp0eXBlZGVmIHNp Z25lZCBpbnQgaTQ7CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MjsKCgp0eXBlZGVmIHNpZ25l ZCBzaG9ydCBpMjsKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTE7CgoKdHlwZWRlZiBzaWduZWQg Y2hhciBpMTsKIyAyNjEgInBsYXRmb3JtLmgiCiMgMSAidHVwbGUuaCIgMQojIDE0ICJ0dXBsZS5o IgojIDEgImppa2VzYXBpLmgiIDEKIyAxNCAiamlrZXNhcGkuaCIKY2xhc3MgSmlrZXNPcHRpb24K ewogcHVibGljOgoKICAgIGNoYXIgKmJvb3RjbGFzc3BhdGg7CiAgICBjaGFyICpleHRkaXJzOwog ICAgY2hhciAqY2xhc3NwYXRoOwogICAgY2hhciAqc291cmNlcGF0aDsKICAgIGNoYXIgKmRpcmVj dG9yeTsKICAgIGNoYXIgKmVuY29kaW5nOwoKCgogICAgaW50IG5vd3JpdGU7CiAgICBpbnQgZGVw cmVjYXRpb247CiAgICBpbnQgTzsKICAgIGludCBnOwogICAgaW50IHZlcmJvc2U7CiAgICBpbnQg ZGVwZW5kOwogICAgaW50IG5vd2FybjsKICAgIGludCBvbGRfY2xhc3NwYXRoX3NlYXJjaF9vcmRl cjsKICAgIGludCB6ZXJvX2RlZmVjdDsKCiAgICB2aXJ0dWFsIH5KaWtlc09wdGlvbigpOwoKIHBy b3RlY3RlZDoKCiAgICBKaWtlc09wdGlvbigpOwp9OwoKY2xhc3MgSmlrZXNFcnJvcgp7CiBwdWJs aWM6CgogICAgZW51bSBKaWtlc0Vycm9yU2V2ZXJpdHkKICAgIHsKICAgICAgICBKSUtFU19FUlJP UiwKICAgICAgICBKSUtFU19DQVVUSU9OLAogICAgICAgIEpJS0VTX1dBUk5JTkcKICAgIH0gOwoK ICAgIHZpcnR1YWwgSmlrZXNFcnJvclNldmVyaXR5IGdldFNldmVyaXR5KCkgPSAwIDsKICAgIHZp cnR1YWwgY29uc3QgY2hhciAqZ2V0RmlsZU5hbWUoKSA9IDAgOwoKICAgIHZpcnR1YWwgaW50IGdl dExlZnRMaW5lTm8gKCkgPSAwIDsKICAgIHZpcnR1YWwgaW50IGdldExlZnRDb2x1bW5ObyAoKSA9 IDAgOwogICAgdmlydHVhbCBpbnQgZ2V0UmlnaHRMaW5lTm8gKCkgPSAwIDsKICAgIHZpcnR1YWwg aW50IGdldFJpZ2h0Q29sdW1uTm8gKCkgPSAwIDsKCgoKCiAgICB2aXJ0dWFsIGNvbnN0IHdjaGFy X3QgKmdldEVycm9yTWVzc2FnZSgpID0gMDsKCgoKCiAgICB2aXJ0dWFsIGNvbnN0IHdjaGFyX3Qg KmdldEVycm9yUmVwb3J0KCkgPSAwOwoKIHByb3RlY3RlZDoKCiAgICBjb25zdCBjaGFyICpnZXRT ZXZlcml0eVN0cmluZygpOwp9OwoKCgoKY2xhc3MgSmlrZXNBUEkKewogcHVibGljOgoKICAgIEpp a2VzQVBJKCk7CgogICAgdmlydHVhbCB+SmlrZXNBUEkoKTsKCgoKCgoKICAgIHZpcnR1YWwgSmlr ZXNPcHRpb24gKmdldE9wdGlvbnMoKTsKIyAxMDUgImppa2VzYXBpLmgiCiAgICB2aXJ0dWFsIGNo YXIqKiBwYXJzZU9wdGlvbnMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KSA7CgoKCgogICAgdmlydHVh bCBpbnQgY29tcGlsZShjaGFyICoqIGZpbGVuYW1lcyk7CgoKCgoKICAgIHN0YXRpYyBKaWtlc0FQ SSAqIGdldEluc3RhbmNlKCk7CgoKCgogICAgdmlydHVhbCB2b2lkIHJlcG9ydEVycm9yKEppa2Vz RXJyb3IgKmVycm9yKTsKCgoKCgoKICAgIGNsYXNzIEZpbGVSZWFkZXIKICAgICAgICB7CiAgICBw dWJsaWM6CiAgICAgICAgICAgIHZpcnR1YWwgfkZpbGVSZWFkZXIoKSB7fQoKICAgICAgICAgICAg dmlydHVhbCBjb25zdCBjaGFyICpnZXRCdWZmZXIoKSA9IDA7CiAgICAgICAgICAgIHZpcnR1YWwg c2l6ZV90IGdldEJ1ZmZlclNpemUoKSA9IDA7CiAgICAgICAgfTsKCgoKCgogICAgY2xhc3MgRmls ZVdyaXRlcgogICAgICAgIHsKICAgIHB1YmxpYzoKICAgICAgICAgICAgRmlsZVdyaXRlcihzaXpl X3QgbVMpOiBtYXhTaXplKG1TKSB7fQogICAgICAgICAgICB2aXJ0dWFsIH5GaWxlV3JpdGVyKCkg e30KCiAgICAgICAgICAgIHNpemVfdCB3cml0ZShjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBz aXplX3Qgc2l6ZSk7CiAgICAgICAgICAgIHZpcnR1YWwgaW50IGlzVmFsaWQoKSA9IDA7CgogICAg cHJpdmF0ZToKCiAgICAgICAgICAgIHZpcnR1YWwgc2l6ZV90IGRvV3JpdGUoY29uc3QgdW5zaWdu ZWQgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpID0gMDsKICAgICAgICAgICAgc2l6ZV90IG1heFNp emU7CiAgICAgICAgfTsKCiAgICB2aXJ0dWFsIGludCBzdGF0KGNvbnN0IGNoYXIgKmZpbGVuYW1l LCBzdHJ1Y3Qgc3RhdCAqc3RhdHVzKTsKCiAgICB2aXJ0dWFsIEZpbGVSZWFkZXIgKnJlYWQgKGNv bnN0IGNoYXIgKmZpbGVuYW1lICk7CiAgICB2aXJ0dWFsIEZpbGVXcml0ZXIgKndyaXRlIChjb25z dCBjaGFyICpmaWxlbmFtZSwgc2l6ZV90IGJ5dGVzKTsKCiBwcml2YXRlOgoKICAgIHZvaWQgY2xl YW51cE9wdGlvbnMoKTsKCiAgICBKaWtlc09wdGlvbiAqb3B0aW9uOwogICAgY2hhciAqKnBhcnNl ZE9wdGlvbnM7CgogICAgc3RhdGljIEppa2VzQVBJICppbnN0YW5jZTsKfTsKIyAxNSAidHVwbGUu aCIgMgoKCgoKCmNsYXNzIE91dHB1dEJ1ZmZlcjsKIyAzMSAidHVwbGUuaCIKdGVtcGxhdGUgPGNs YXNzIFQ+CmNsYXNzIFR1cGxlCnsKcHJvdGVjdGVkOgoKICAgIGZyaWVuZCBjbGFzcyBPdXRwdXRC dWZmZXI7CgogICAgZW51bSB7IERFRkFVTFRfTE9HX0JMS1NJWkUgPSAzLCBERUZBVUxUX0JBU0Vf SU5DUkVNRU5UID0gNCB9OwoKICAgIFQgKipiYXNlOwogICAgaW50IGJhc2Vfc2l6ZSwKICAgICAg ICB0b3AsCiAgICAgICAgc2l6ZTsKCiAgICBpbnQgbG9nX2Jsa3NpemUsCiAgICAgICAgYmFzZV9p bmNyZW1lbnQ7CgogICAgaW5saW5lIGludCBCbGtzaXplKCkgeyByZXR1cm4gKDEgPDwgbG9nX2Js a3NpemUpOyB9CgoKCgogICAgaW5saW5lIHZvaWQgQWxsb2NhdGVNb3JlU3BhY2UoKQogICAgewoj IDY4ICJ0dXBsZS5oIgogICAgICAgIGludCBrID0gc2l6ZSA+PiBsb2dfYmxrc2l6ZTsKCgoKCiAg ICAgICAgaWYgKGsgPT0gYmFzZV9zaXplKQogICAgICAgIHsKICAgICAgICAgICAgaW50IG9sZF9i YXNlX3NpemUgPSBiYXNlX3NpemU7CiAgICAgICAgICAgIFQgKipvbGRfYmFzZSA9IGJhc2U7Cgog ICAgICAgICAgICBiYXNlX3NpemUgKz0gYmFzZV9pbmNyZW1lbnQ7CiAgICAgICAgICAgIGJhc2Ug PSBuZXcgVCpbYmFzZV9zaXplXTsKCiAgICAgICAgICAgIGlmIChvbGRfYmFzZSAhPSBfX251bGwp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG1lbW1vdmUoYmFzZSwgb2xkX2Jhc2UsIG9s ZF9iYXNlX3NpemUgKiBzaXplb2YoVCAqKSk7CiAgICAgICAgICAgICAgICBkZWxldGUgW10gb2xk X2Jhc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbWVtc2V0KCZiYXNlW29sZF9iYXNlX3Np emVdLCAwLCAoYmFzZV9zaXplIC0gb2xkX2Jhc2Vfc2l6ZSkgKiBzaXplb2YoVCAqKSk7CiAgICAg ICAgfQoKCgoKCgoKICAgICAgICBiYXNlW2tdID0gbmV3IFRbQmxrc2l6ZSgpXTsKICAgICAgICBi YXNlW2tdIC09IHNpemU7CgoKCgogICAgICAgIHNpemUgKz0gQmxrc2l6ZSgpOwoKICAgICAgICBy ZXR1cm47CiAgICB9CgpwdWJsaWM6CiMgMTE3ICJ0dXBsZS5oIgogICAgaW5saW5lIHZvaWQgUmVz aXplKGNvbnN0IGludCBuID0gMCkKICAgIHsKCgoKCgogICAgICAgIGlmIChuID4gc2l6ZSkKICAg ICAgICB7CiAgICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEFsbG9j YXRlTW9yZVNwYWNlKCk7CiAgICAgICAgICAgIH0gd2hpbGUgKG4gPiBzaXplKTsKICAgICAgICB9 CiAgICAgICAgZWxzZSBpZiAobiA8IHNpemUpCiAgICAgICAgewoKCiAgICAgICAgICAgIGludCBz bG90ID0gKG4gPD0gMCA/IC0xIDogKG4gLSAxKSA+PiBsb2dfYmxrc2l6ZSk7CgogICAgICAgICAg ICBmb3IgKGludCBrID0gKHNpemUgPj4gbG9nX2Jsa3NpemUpIC0gMTsgayA+IHNsb3Q7IGstLSkK ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc2l6ZSAtPSBCbGtzaXplKCk7CiAgICAgICAg ICAgICAgICBiYXNlW2tdICs9IHNpemU7CiAgICAgICAgICAgICAgICBkZWxldGUgW10gYmFzZVtr XTsKICAgICAgICAgICAgICAgIGJhc2Vba10gPSBfX251bGw7CiAgICAgICAgICAgIH0KCiAgICAg ICAgICAgIGlmIChzbG90IDwgMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZGVsZXRl IFtdIGJhc2U7CiAgICAgICAgICAgICAgICBiYXNlID0gX19udWxsOwogICAgICAgICAgICAgICAg YmFzZV9zaXplID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdG9wID0gbjsK ICAgIH0KCgoKCgoKCiAgICBpbmxpbmUgdm9pZCBSZXNldChjb25zdCBpbnQgbiA9IDApCiAgICB7 CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgobiA+PSAwICYmIG4gPD0gc2l6ZSkgPyAwIDog KF9fYXNzZXJ0X2ZhaWwgKCJuID49IDAgJiYgbiA8PSBzaXplIiwgInR1cGxlLmgiLCAxNjQsIF9f UFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgICAgICB0b3AgPSBuOwogICAgfQoKCgoKICAg IGlubGluZSBpbnQgTGVuZ3RoKCkgeyByZXR1cm4gdG9wOyB9CiMgMTgxICJ0dXBsZS5oIgogICAg aW5saW5lIFQmIG9wZXJhdG9yW10oY29uc3QgaW50IGkpCiAgICB7CiAgICAgICAgKHN0YXRpY19j YXN0PHZvaWQ+ICgoaSA+PSAwICYmIGkgPCB0b3ApID8gMCA6IChfX2Fzc2VydF9mYWlsICgiaSA+ PSAwICYmIGkgPCB0b3AiLCAidHVwbGUuaCIsIDE4MywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDAp KSk7CgogICAgICAgIHJldHVybiBiYXNlW2kgPj4gbG9nX2Jsa3NpemVdW2ldOwogICAgfQoKCgoK ICAgIGlubGluZSBpbnQgTmV4dEluZGV4KCkKICAgIHsKICAgICAgICBpbnQgaSA9IHRvcCsrOwog ICAgICAgIGlmIChpID09IHNpemUpCiAgICAgICAgICAgIEFsbG9jYXRlTW9yZVNwYWNlKCk7CiAg ICAgICAgcmV0dXJuIGk7CiAgICB9CgogICAgaW5saW5lIHZvaWQgUHVzaChUIGVsdCkgeyB0aGlz IC0+IE5leHQoKSA9IGVsdDsgfQoKCiAgICBpbmxpbmUgVCBQb3AoKSB7IChzdGF0aWNfY2FzdDx2 b2lkPiAoKHRvcCE9MCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ0b3AhPTAiLCAidHVwbGUuaCIs IDIwMiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7IHRvcC0tOyByZXR1cm4gYmFzZVt0b3Ag Pj4gbG9nX2Jsa3NpemVdW3RvcF07IH0KICAgIGlubGluZSBUIFRvcCgpIHsgKHN0YXRpY19jYXN0 PHZvaWQ+ICgodG9wIT0wKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInRvcCE9MCIsICJ0dXBsZS5o IiwgMjAzLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsgcmV0dXJuICgqdGhpcylbdG9wLTFd OyB9CgoKCgoKICAgIGlubGluZSBUJiBOZXh0KCkgeyBpbnQgaSA9IE5leHRJbmRleCgpOyByZXR1 cm4gYmFzZVtpID4+IGxvZ19ibGtzaXplXVtpXTsgfQoKCgoKICAgIGlubGluZSBUdXBsZTxUPiYg b3BlcmF0b3I9KGNvbnN0IFR1cGxlPFQ+JiByaHMpCiAgICB7CiAgICAgICAgaWYgKHRoaXMgIT0g JnJocykKICAgICAgICB7CiAgICAgICAgICAgIFJlc2l6ZShyaHMudG9wKTsKICAgICAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCByaHMudG9wOyBpKyspCiAgICAgICAgICAgICAgICBiYXNlW2kg Pj4gbG9nX2Jsa3NpemVdW2ldID0gcmhzLmJhc2VbaSA+PiBsb2dfYmxrc2l6ZV1baV07CiAgICAg ICAgfQoKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKCgogICAgVHVwbGUodW5zaWduZWQg ZXN0aW1hdGUgPSAwKQogICAgewogICAgICAgIGlmIChlc3RpbWF0ZSA9PSAwKQogICAgICAgIHsK ICAgICAgICAgICAgbG9nX2Jsa3NpemUgPSBERUZBVUxUX0xPR19CTEtTSVpFOwogICAgICAgICAg ICBiYXNlX2luY3JlbWVudCA9IERFRkFVTFRfQkFTRV9JTkNSRU1FTlQ7CiAgICAgICAgfQogICAg ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGZvciAobG9nX2Jsa3NpemUgPSAxOyAoKCh1 bnNpZ25lZCkgMSA8PCBsb2dfYmxrc2l6ZSkgPCBlc3RpbWF0ZSkgJiYgKGxvZ19ibGtzaXplIDwg MzEpOyBsb2dfYmxrc2l6ZSsrKQogICAgICAgICAgICAgICAgOwogICAgICAgICAgICBpZiAobG9n X2Jsa3NpemUgPD0gREVGQVVMVF9MT0dfQkxLU0laRSkKICAgICAgICAgICAgICAgIGJhc2VfaW5j cmVtZW50ID0gMTsKICAgICAgICAgICAgZWxzZSBpZiAobG9nX2Jsa3NpemUgPCAxMykKICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgYmFzZV9pbmNyZW1lbnQgPSAodW5zaWduZWQpIDEgPDwg KGxvZ19ibGtzaXplIC0gNCk7CiAgICAgICAgICAgICAgICBsb2dfYmxrc2l6ZSA9IDQ7CiAgICAg ICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBi YXNlX2luY3JlbWVudCA9ICh1bnNpZ25lZCkgMSA8PCAobG9nX2Jsa3NpemUgLSA4KTsKICAgICAg ICAgICAgICAgIGxvZ19ibGtzaXplID0gODsKICAgICAgICAgICAgfQogICAgICAgICAgICBiYXNl X2luY3JlbWVudCsrOwogICAgICAgIH0KCiAgICAgICAgYmFzZV9zaXplID0gMDsKICAgICAgICBz aXplID0gMDsKICAgICAgICB0b3AgPSAwOwogICAgICAgIGJhc2UgPSBfX251bGw7CiAgICB9CgoK CgogICAgVHVwbGUoaW50IGxvZ19ibGtzaXplXywgaW50IGJhc2VfaW5jcmVtZW50XykgOiBsb2df Ymxrc2l6ZShsb2dfYmxrc2l6ZV8pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBiYXNlX2luY3JlbWVudChiYXNlX2luY3JlbWVudF8pCiAgICB7CiAg ICAgICAgYmFzZV9zaXplID0gMDsKICAgICAgICBzaXplID0gMDsKICAgICAgICB0b3AgPSAwOwog ICAgICAgIGJhc2UgPSBfX251bGw7CiAgICB9CgoKCgogICAgVHVwbGUoY29uc3QgVHVwbGU8VD4m IHJocykgOiBsb2dfYmxrc2l6ZShyaHMubG9nX2Jsa3NpemUpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBiYXNlX2luY3JlbWVudChyaHMuYmFzZV9pbmNyZW1lbnQpCiAgICB7CiAg ICAgICAgYmFzZV9zaXplID0gMDsKICAgICAgICBzaXplID0gMDsKICAgICAgICBiYXNlID0gX19u dWxsOwogICAgICAgICp0aGlzID0gcmhzOwogICAgfQoKCgoKICAgIH5UdXBsZSgpIHsgUmVzaXpl KDApOyB9CgoKCgoKCiAgICBpbmxpbmUgc2l6ZV90IFNwYWNlQWxsb2NhdGVkKHZvaWQpCiAgICB7 CiAgICAgICAgcmV0dXJuICgoYmFzZV9zaXplICogc2l6ZW9mKFQgKiopKSArIChzaXplICogc2l6 ZW9mKFQpKSk7CiAgICB9CgoKCgogICAgaW5saW5lIHNpemVfdCBTcGFjZVVzZWQodm9pZCkKICAg IHsKICAgICAgICByZXR1cm4gKCgoc2l6ZSA+PiBsb2dfYmxrc2l6ZSkgKiBzaXplb2YoVCAqKikp ICsgKHRvcCAqIHNpemVvZihUKSkpOwogICAgfQp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpj bGFzcyBDb252ZXJ0aWJsZUFycmF5IDogcHVibGljIFR1cGxlPFQ+CnsKcHVibGljOgoKICAgIENv bnZlcnRpYmxlQXJyYXkoaW50IGVzdGltYXRlID0gMCkgOiBUdXBsZTxUPihlc3RpbWF0ZSksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoX19udWxsKQogICAg e30KCiAgICBDb252ZXJ0aWJsZUFycmF5KGludCBsb2dfYmxrc2l6ZSwgaW50IGJhc2VfaW5jcmVt ZW50KSA6IFR1cGxlPFQ+KGxvZ19ibGtzaXplLCBiYXNlX2luY3JlbWVudCksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KF9f bnVsbCkKICAgIHt9CgogICAgfkNvbnZlcnRpYmxlQXJyYXkoKSB7IGRlbGV0ZSBbXSBhcnJheTsg fQoKCgoKCiAgICBpbmxpbmUgVCAqJkFycmF5KCkKICAgIHsKICAgICAgICBpZiAoKCEgYXJyYXkp ICYmIFR1cGxlPFQ+Ojp0b3AgPiAwKQogICAgICAgIHsKICAgICAgICAgICAgYXJyYXkgPSBuZXcg VFtUdXBsZTxUPjo6dG9wXTsKCiAgICAgICAgICAgIGludCBpID0gMCwKICAgICAgICAgICAgICAg IHByb2Nlc3NlZF9zaXplID0gMCwKICAgICAgICAgICAgICAgIG4gPSAoVHVwbGU8VD46OnRvcCAt IDEpID4+IFR1cGxlPFQ+Ojpsb2dfYmxrc2l6ZTsKICAgICAgICAgICAgd2hpbGUgKGkgPCBuKQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBtZW1tb3ZlKCZhcnJheVtwcm9jZXNzZWRfc2l6 ZV0sIFR1cGxlPFQ+OjpiYXNlW2ldICsgcHJvY2Vzc2VkX3NpemUsIFR1cGxlPFQ+OjpCbGtzaXpl KCkgKiBzaXplb2YoVCkpOwogICAgICAgICAgICAgICAgZGVsZXRlIFtdIChUdXBsZTxUPjo6YmFz ZVtpXSArIHByb2Nlc3NlZF9zaXplKTsKICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAg ICAgIHByb2Nlc3NlZF9zaXplICs9IFR1cGxlPFQ+OjpCbGtzaXplKCk7CiAgICAgICAgICAgIH0K ICAgICAgICAgICAgbWVtbW92ZSgmYXJyYXlbcHJvY2Vzc2VkX3NpemVdLCBUdXBsZTxUPjo6YmFz ZVtuXSArIHByb2Nlc3NlZF9zaXplLCAoVHVwbGU8VD46OnRvcCAtIHByb2Nlc3NlZF9zaXplKSAq IHNpemVvZihUKSk7CiAgICAgICAgICAgIGRlbGV0ZSBbXSAoVHVwbGU8VD46OmJhc2Vbbl0gKyBw cm9jZXNzZWRfc2l6ZSk7CiAgICAgICAgICAgIGRlbGV0ZSBbXSBUdXBsZTxUPjo6YmFzZTsKICAg ICAgICAgICAgVHVwbGU8VD46OmJhc2UgPSBfX251bGw7CiAgICAgICAgICAgIFR1cGxlPFQ+Ojpz aXplID0gMDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBhcnJheTsKICAgIH0KCiAgICBpbmxp bmUgVCYgb3BlcmF0b3JbXShjb25zdCBpbnQgaSkKICAgIHsKICAgICAgICAoc3RhdGljX2Nhc3Q8 dm9pZD4gKChpID49IDAgJiYgaSA8IFR1cGxlPFQ+Ojp0b3ApID8gMCA6IChfX2Fzc2VydF9mYWls ICgiaSA+PSAwICYmIGkgPCBUdXBsZTxUPjo6dG9wIiwgInR1cGxlLmgiLCAzNjAsIF9fUFJFVFRZ X0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgICAgICByZXR1cm4gKGFycmF5ID8gYXJyYXlbaV0gOiBU dXBsZTxUPjo6YmFzZVtpID4+IFR1cGxlPFQ+Ojpsb2dfYmxrc2l6ZV1baV0pOwogICAgfQoKICAg IGlubGluZSB2b2lkIFJlc2l6ZShjb25zdCBpbnQgbiA9IDApIHsgKHN0YXRpY19jYXN0PHZvaWQ+ ICgoZmFsc2UpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiZmFsc2UiLCAidHVwbGUuaCIsIDM2NSwg X19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7IH0KICAgIGlubGluZSB2b2lkIFJlc2V0KGNvbnN0 IGludCBuID0gMCkgeyAoc3RhdGljX2Nhc3Q8dm9pZD4gKChmYWxzZSkgPyAwIDogKF9fYXNzZXJ0 X2ZhaWwgKCJmYWxzZSIsICJ0dXBsZS5oIiwgMzY2LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkp KTsgfQogICAgaW5saW5lIFQmIE5leHQoKQogICAgewogICAgICAgIChzdGF0aWNfY2FzdDx2b2lk PiAoKCEgYXJyYXkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiISBhcnJheSIsICJ0dXBsZS5oIiwg MzY5LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKCiAgICAgICAgaW50IGkgPSBUdXBsZTxU Pjo6TmV4dEluZGV4KCk7CiAgICAgICAgcmV0dXJuIFR1cGxlPFQ+OjpiYXNlW2kgPj4gVHVwbGU8 VD46OmxvZ19ibGtzaXplXVtpXTsKICAgIH0KICAgIGlubGluZSBUdXBsZTxUPiYgb3BlcmF0b3I9 KGNvbnN0IFR1cGxlPFQ+JiByaHMpCiAgICB7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgo ZmFsc2UpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiZmFsc2UiLCAidHVwbGUuaCIsIDM3NiwgX19Q UkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKcHJp dmF0ZToKCiAgICBUICphcnJheTsKfTsKCgoKCgpjbGFzcyBPdXRwdXRCdWZmZXIKewpwdWJsaWM6 CgogICAgT3V0cHV0QnVmZmVyKGludCBsb2dfYmxrc2l6ZSA9IDEzLCBpbnQgYmFzZV9pbmNyZW1l bnQgPSAxMjgpIDogYnVmZmVyKGxvZ19ibGtzaXplLCBiYXNlX2luY3JlbWVudCkge30KCiAgICBp bmxpbmUgdm9pZCBQdXRCMSh1MSB1KSB7IGJ1ZmZlci5OZXh0KCkgPSB1OyB9CgogICAgaW5saW5l IHZvaWQgUHV0QjIodTIgdSkKICAgIHsKICAgICAgICBidWZmZXIuTmV4dCgpID0gdSA+PiA4Owog ICAgICAgIGJ1ZmZlci5OZXh0KCkgPSB1ICYgMHhmZjsKICAgIH0KCiAgICBpbmxpbmUgdm9pZCBQ dXRCNCh1NCB1KQogICAgewogICAgICAgIGJ1ZmZlci5OZXh0KCkgPSB1ID4+IDI0OwogICAgICAg IGJ1ZmZlci5OZXh0KCkgPSAodSA+PiAxNikgJiAweGZmOwogICAgICAgIGJ1ZmZlci5OZXh0KCkg PSAodSA+PiA4KSAmIDB4ZmY7CiAgICAgICAgYnVmZmVyLk5leHQoKSA9IHUgJiAweGZmOwogICAg fQoKICAgIGlubGluZSB2b2lkIHB1dF9uKHUxICp1LCBpbnQgbikKICAgIHsKICAgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IG47IGkrKykKICAgICAgICAgICAgYnVmZmVyLk5leHQoKSA9IHVbaV07 CiAgICB9CgogICAgaW5saW5lIGJvb2wgV3JpdGVUb0ZpbGUoY2hhciAqZmlsZV9uYW1lKQogICAg ewogICAgICAgIEppa2VzQVBJOjpGaWxlV3JpdGVyICpmaWxlID0gSmlrZXNBUEk6OmdldEluc3Rh bmNlKCktPndyaXRlKGZpbGVfbmFtZSxidWZmZXIudG9wKTsKCiAgICAgICAgaWYgKGZpbGUgPT0g X19udWxsKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHNpemVfdCBzaXplID0g MDsKICAgICAgICBpbnQgbiA9IChidWZmZXIudG9wIC0gMSkgPj4gYnVmZmVyLmxvZ19ibGtzaXpl OwoKICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBuOyBpKyspCiAgICAgICAgewogICAgICAgICAg ICBmaWxlLT53cml0ZShidWZmZXIuYmFzZVtpXSArIHNpemUsIGJ1ZmZlci5CbGtzaXplKCkpOwog ICAgICAgICAgICBzaXplICs9IGJ1ZmZlci5CbGtzaXplKCk7CiAgICAgICAgfQogICAgICAgIGZp bGUtPndyaXRlKGJ1ZmZlci5iYXNlW25dICsgc2l6ZSwgKGJ1ZmZlci50b3AgLSBzaXplKSk7Cgog ICAgICAgIGRlbGV0ZSBmaWxlOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCnByaXZhdGU6 CgogICAgVHVwbGU8dTE+IGJ1ZmZlcjsKfTsKIyAyNjIgInBsYXRmb3JtLmgiIDIKIyAzMDIgInBs YXRmb3JtLmgiCnZvaWQgU2V0TmV3SGFuZGxlcigpOwoKCgoKZXh0ZXJuIHZvaWQgT3V0T2ZNZW1v cnkoKTsKCgoKCgoKCmV4dGVybiB2b2lkIEZsb2F0aW5nUG9pbnRDaGVjaygpOwoKCgoKCgpleHRl cm4gaW50IFN5c3RlbVN0YXQoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0YXRfc3Ry dWN0KTsKZXh0ZXJuIEZJTEUgKlN5c3RlbUZvcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNo YXIgKm1vZGUpOwpleHRlcm4gc2l6ZV90IFN5c3RlbUZyZWFkKGNoYXIgKnB0ciwgc2l6ZV90IGVs ZW1lbnRfc2l6ZSwgc2l6ZV90IGNvdW50LCBGSUxFICpzdHJlYW0pOwpleHRlcm4gaW50IFN5c3Rl bUlzRGlyZWN0b3J5KGNoYXIgKm5hbWUpOwoKCgoKCmV4dGVybiBjaGFyIFBhdGhTZXBhcmF0b3Io KTsKZXh0ZXJuIGludCBTeXN0ZW1Na2RpcihjaGFyICopOwpleHRlcm4gaW50IFN5c3RlbU1rZGly aGllcihjaGFyICopOwoKZXh0ZXJuIGNoYXIgKiBzdHJjYXQzKGNvbnN0IGNoYXIgKiwgY29uc3Qg Y2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqIHdzdHJpbmcyc3RyaW5nKHdjaGFy X3QgKiBpbik7CiMgMzgwICJwbGF0Zm9ybS5oIgplbnVtIFVfY2hhcnMKewogICAgVV9OVUxMID0g MCwgVV9OVSA9IFVfTlVMTCwKICAgIFVfQkFDS1NQQUNFID0gOCwgVV9CUyA9IFVfQkFDS1NQQUNF LAogICAgVV9IT1JJWk9OVEFMX1RBQiA9IDksIFVfSFQgPSBVX0hPUklaT05UQUxfVEFCLAogICAg VV9MSU5FX0ZFRUQgPSAxMCwgVV9MRiA9IFVfTElORV9GRUVELAogICAgVV9GT1JNX0ZFRUQgPSAx MiwgVV9GRiA9IFVfRk9STV9GRUVELAogICAgVV9DQVJSSUFHRV9SRVRVUk4gPSAxMywgVV9DUiA9 IFVfQ0FSUklBR0VfUkVUVVJOLAoKICAgIFVfQ1RMX1ogPSAyNiwKICAgIFVfRVNDQVBFID0gMjcs CgogICAgVV9TUEFDRSA9IDMyLCBVX1NQID0gVV9TUEFDRSwKICAgIFVfRVhDTEFNQVRJT04gPSAz MywgVV9FWCA9IFVfRVhDTEFNQVRJT04sCiAgICBVX0RPVUJMRV9RVU9URSA9IDM0LCBVX0RRID0g VV9ET1VCTEVfUVVPVEUsCiAgICBVX1BPVU5EID0gMzUsIFVfU0ggPSBVX1BPVU5ELAogICAgVV9E T0xMQVIgPSAzNiwgVV9EUyA9IFVfRE9MTEFSLAogICAgVV9QRVJDRU5UID0gMzcsIFVfUEUgPSBV X1BFUkNFTlQsCiAgICBVX0FNUEVSU0FORCA9IDM4LCBVX0FNID0gVV9BTVBFUlNBTkQsCiAgICBV X1NJTkdMRV9RVU9URSA9IDM5LCBVX1NRID0gVV9TSU5HTEVfUVVPVEUsCiAgICBVX0xFRlRfUEFS RU5USEVTSVMgPSA0MCwgVV9MUCA9IFVfTEVGVF9QQVJFTlRIRVNJUywKICAgIFVfUklHSFRfUEFS RU5USEVTSVMgPSA0MSwgVV9SUCA9IFVfUklHSFRfUEFSRU5USEVTSVMsCiAgICBVX1NUQVIgPSA0 MiwgVV9TVCA9IFVfU1RBUiwKICAgIFVfUExVUyA9IDQzLCBVX1BMID0gVV9QTFVTLAogICAgVV9N SU5VUyA9IDQ1LCBVX01JID0gVV9NSU5VUywKICAgIFVfQ09NTUEgPSA0NCwgVV9DTSA9IFVfQ09N TUEsCiAgICBVX0RPVCA9IDQ2LCBVX0RPID0gVV9ET1QsCiAgICBVX1NMQVNIID0gNDcsIFVfU0wg PSBVX1NMQVNILAoKICAgIFVfMCA9IDQ4LAogICAgVV8xID0gNDksCiAgICBVXzIgPSA1MCwKICAg IFVfMyA9IDUxLAogICAgVV80ID0gNTIsCiAgICBVXzUgPSA1MywKICAgIFVfNiA9IDU0LAogICAg VV83ID0gNTUsCiAgICBVXzggPSA1NiwKICAgIFVfOSA9IDU3LAoKICAgIFVfQ09MT04gPSA1OCwg VV9DTyA9IFVfQ09MT04sCiAgICBVX1NFTUlDT0xPTiA9IDU5LCBVX1NDID0gVV9TRU1JQ09MT04s CiAgICBVX0xFU1MgPSA2MCwgVV9MVCA9IFVfTEVTUywKICAgIFVfRVFVQUwgPSA2MSwgVV9FUSA9 IFVfRVFVQUwsCiAgICBVX0dSRUFURVIgPSA2MiwgVV9HVCA9IFVfR1JFQVRFUiwKICAgIFVfUVVF U1RJT04gPSA2MywgVV9RVSA9IFVfUVVFU1RJT04sCiAgICBVX0FUID0gNjQsCgogICAgVV9BID0g NjUsCiAgICBVX0IgPSA2NiwKICAgIFVfQyA9IDY3LAogICAgVV9EID0gNjgsCiAgICBVX0UgPSA2 OSwKICAgIFVfRiA9IDcwLAogICAgVV9HID0gNzEsCiAgICBVX0ggPSA3MiwKICAgIFVfSSA9IDcz LAogICAgVV9KID0gNzQsCiAgICBVX0sgPSA3NSwKICAgIFVfTCA9IDc2LAogICAgVV9NID0gNzcs CiAgICBVX04gPSA3OCwKICAgIFVfTyA9IDc5LAogICAgVV9QID0gODAsCiAgICBVX1EgPSA4MSwK ICAgIFVfUiA9IDgyLAogICAgVV9TID0gODMsCiAgICBVX1QgPSA4NCwKICAgIFVfVSA9IDg1LAog ICAgVV9WID0gODYsCiAgICBVX1cgPSA4NywKICAgIFVfWCA9IDg4LAogICAgVV9ZID0gODksCiAg ICBVX1ogPSA5MCwKCiAgICBVX0xFRlRfQlJBQ0tFVCA9IDkxLCBVX0xCID0gVV9MRUZUX0JSQUNL RVQsCiAgICBVX0JBQ0tTTEFTSCA9IDkyLCBVX1JTID0gVV9CQUNLU0xBU0gsCiAgICBVX1JJR0hU X0JSQUNLRVQgPSA5MywgVV9SQiA9IFVfUklHSFRfQlJBQ0tFVCwKICAgIFVfQ0FSRVQgPSA5NCwg VV9DQSA9IFVfQ0FSRVQsCiAgICBVX1VOREVSU0NPUkUgPSA5NSwgVV9VTiA9IFVfVU5ERVJTQ09S RSwKCiAgICBVX2EgPSA5NywKICAgIFVfYiA9IDk4LAogICAgVV9jID0gOTksCiAgICBVX2QgPSAx MDAsCiAgICBVX2UgPSAxMDEsCiAgICBVX2YgPSAxMDIsCiAgICBVX2cgPSAxMDMsCiAgICBVX2gg PSAxMDQsCiAgICBVX2kgPSAxMDUsCiAgICBVX2ogPSAxMDYsCiAgICBVX2sgPSAxMDcsCiAgICBV X2wgPSAxMDgsCiAgICBVX20gPSAxMDksCiAgICBVX24gPSAxMTAsCiAgICBVX28gPSAxMTEsCiAg ICBVX3AgPSAxMTIsCiAgICBVX3EgPSAxMTMsCiAgICBVX3IgPSAxMTQsCiAgICBVX3MgPSAxMTUs CiAgICBVX3QgPSAxMTYsCiAgICBVX3UgPSAxMTcsCiAgICBVX3YgPSAxMTgsCiAgICBVX3cgPSAx MTksCiAgICBVX3ggPSAxMjAsCiAgICBVX3kgPSAxMjEsCiAgICBVX3ogPSAxMjIsCgogICAgVV9M RUZUX0JSQUNFID0gMTIzLCBVX09TID0gVV9MRUZUX0JSQUNFLAogICAgVV9CQVIgPSAxMjQsIFVf QkEgPSBVX0JBUiwKICAgIFVfUklHSFRfQlJBQ0UgPSAxMjUsIFVfQ1MgPSBVX1JJR0hUX0JSQUNF LAogICAgVV9USUxERSA9IDEyNiwgVV9USSA9IFVfVElMREUsCgogICAgVV9CT00gPSAweGZlZmYs CiAgICBVX1JFVkVSU0VfQk9NID0gMHhmZmZlCn07CgoKCgoKY2xhc3MgU3RyaW5nQ29uc3RhbnQK ewpwdWJsaWM6CiAgICBzdGF0aWMgd2NoYXJfdCBVU19BTkRbXSwKICAgICAgICAgICAgICAgICAg IFVTX0FORF9BTkRbXSwKICAgICAgICAgICAgICAgICAgIFVTX0FORF9FUVVBTFtdLAogICAgICAg ICAgICAgICAgICAgVVNfQ09MT05bXSwKICAgICAgICAgICAgICAgICAgIFVTX0NPTU1BW10sCiAg ICAgICAgICAgICAgICAgICBVU19ESVZJREVbXSwKICAgICAgICAgICAgICAgICAgIFVTX0RJVklE RV9FUVVBTFtdLAogICAgICAgICAgICAgICAgICAgVVNfRE9UW10sCiAgICAgICAgICAgICAgICAg ICBVU19FTVBUWVtdLAogICAgICAgICAgICAgICAgICAgVVNfRVFVQUxbXSwKICAgICAgICAgICAg ICAgICAgIFVTX0VRVUFMX0VRVUFMW10sCiAgICAgICAgICAgICAgICAgICBVU19HUkVBVEVSW10s CiAgICAgICAgICAgICAgICAgICBVU19HUkVBVEVSX0VRVUFMW10sCiAgICAgICAgICAgICAgICAg ICBVU19MQlJBQ0VbXSwKICAgICAgICAgICAgICAgICAgIFVTX0xCUkFDS0VUW10sCiAgICAgICAg ICAgICAgICAgICBVU19MRUZUX1NISUZUW10sCiAgICAgICAgICAgICAgICAgICBVU19MRUZUX1NI SUZUX0VRVUFMW10sCiAgICAgICAgICAgICAgICAgICBVU19MRVNTW10sCiAgICAgICAgICAgICAg ICAgICBVU19MRVNTX0VRVUFMW10sCiAgICAgICAgICAgICAgICAgICBVU19MUEFSRU5bXSwKICAg ICAgICAgICAgICAgICAgIFVTX01JTlVTW10sCiAgICAgICAgICAgICAgICAgICBVU19NSU5VU19F UVVBTFtdLAogICAgICAgICAgICAgICAgICAgVVNfTUlOVVNfTUlOVVNbXSwKICAgICAgICAgICAg ICAgICAgIFVTX01VTFRJUExZW10sCiAgICAgICAgICAgICAgICAgICBVU19NVUxUSVBMWV9FUVVB TFtdLAogICAgICAgICAgICAgICAgICAgVVNfTk9UW10sCiAgICAgICAgICAgICAgICAgICBVU19O T1RfRVFVQUxbXSwKICAgICAgICAgICAgICAgICAgIFVTX09SW10sCiAgICAgICAgICAgICAgICAg ICBVU19PUl9FUVVBTFtdLAogICAgICAgICAgICAgICAgICAgVVNfT1JfT1JbXSwKICAgICAgICAg ICAgICAgICAgIFVTX1BMVVNbXSwKICAgICAgICAgICAgICAgICAgIFVTX1BMVVNfRVFVQUxbXSwK ICAgICAgICAgICAgICAgICAgIFVTX1BMVVNfUExVU1tdLAogICAgICAgICAgICAgICAgICAgVVNf UVVFU1RJT05bXSwKICAgICAgICAgICAgICAgICAgIFVTX1JCUkFDRVtdLAogICAgICAgICAgICAg ICAgICAgVVNfUkJSQUNLRVRbXSwKICAgICAgICAgICAgICAgICAgIFVTX1JFTUFJTkRFUltdLAog ICAgICAgICAgICAgICAgICAgVVNfUkVNQUlOREVSX0VRVUFMW10sCiAgICAgICAgICAgICAgICAg ICBVU19SSUdIVF9TSElGVFtdLAogICAgICAgICAgICAgICAgICAgVVNfUklHSFRfU0hJRlRfRVFV QUxbXSwKICAgICAgICAgICAgICAgICAgIFVTX1JQQVJFTltdLAogICAgICAgICAgICAgICAgICAg VVNfU0VNSUNPTE9OW10sCiAgICAgICAgICAgICAgICAgICBVU19UV0lERExFW10sCiAgICAgICAg ICAgICAgICAgICBVU19VTlNJR05FRF9SSUdIVF9TSElGVFtdLAogICAgICAgICAgICAgICAgICAg VVNfVU5TSUdORURfUklHSFRfU0hJRlRfRVFVQUxbXSwKICAgICAgICAgICAgICAgICAgIFVTX1hP UltdLAogICAgICAgICAgICAgICAgICAgVVNfWE9SX0VRVUFMW10sCgogICAgICAgICAgICAgICAg ICAgVVNfQm9vbGVhbltdLAogICAgICAgICAgICAgICAgICAgVVNfQnl0ZVtdLAogICAgICAgICAg ICAgICAgICAgVVNfQ2hhcmFjdGVyW10sCiAgICAgICAgICAgICAgICAgICBVU19DbGFzc1tdLAog ICAgICAgICAgICAgICAgICAgVVNfQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbltdLAogICAgICAgICAg ICAgICAgICAgVVNfQ2xvbmVhYmxlW10sCiAgICAgICAgICAgICAgICAgICBVU19Eb3VibGVbXSwK ICAgICAgICAgICAgICAgICAgIFVTX0Vycm9yW10sCiAgICAgICAgICAgICAgICAgICBVU19FeGNl cHRpb25bXSwKICAgICAgICAgICAgICAgICAgIFVTX0Zsb2F0W10sCiAgICAgICAgICAgICAgICAg ICBVU19JbnRlZ2VyW10sCiAgICAgICAgICAgICAgICAgICBVU19MW10sCiAgICAgICAgICAgICAg ICAgICBVU19Mb25nW10sCiAgICAgICAgICAgICAgICAgICBVU19Ob0NsYXNzRGVmRm91bmRFcnJv cltdLAogICAgICAgICAgICAgICAgICAgVVNfT2JqZWN0W10sCiAgICAgICAgICAgICAgICAgICBV U19QT2JqZWN0W10sCiAgICAgICAgICAgICAgICAgICBVU19SdW50aW1lRXhjZXB0aW9uW10sCiAg ICAgICAgICAgICAgICAgICBVU19TZXJpYWxpemFibGVbXSwKICAgICAgICAgICAgICAgICAgIFVT X1Nob3J0W10sCiAgICAgICAgICAgICAgICAgICBVU19TdHJpbmdbXSwKICAgICAgICAgICAgICAg ICAgIFVTX1N0cmluZ0J1ZmZlcltdLAogICAgICAgICAgICAgICAgICAgVVNfVFlQRVtdLAogICAg ICAgICAgICAgICAgICAgVVNfVGhyb3dhYmxlW10sCiAgICAgICAgICAgICAgICAgICBVU19Wb2lk W10sCiAgICAgICAgICAgICAgICAgICBVU19fRE9bXSwKICAgICAgICAgICAgICAgICAgIFVTX19E T19fRE9bXSwKICAgICAgICAgICAgICAgICAgIFVTX19EU1tdLAogICAgICAgICAgICAgICAgICAg VVNfX0xCX19SQltdLAogICAgICAgICAgICAgICAgICAgVVNfX0xUX2NsaW5pdF9HVFtdLAogICAg ICAgICAgICAgICAgICAgVVNfX0xUX2luaXRfR1RbXSwKICAgICAgICAgICAgICAgICAgIFVTX19R VV9fUVVbXSwKICAgICAgICAgICAgICAgICAgIFVTX19TQ1tdLAogICAgICAgICAgICAgICAgICAg VVNfX1NMW10sCgogICAgICAgICAgICAgICAgICAgVVNfX3ppcFtdLAogICAgICAgICAgICAgICAg ICAgVVNfX2phcltdLAoKICAgICAgICAgICAgICAgICAgIFVTX19hcnJheVtdLAogICAgICAgICAg ICAgICAgICAgVVNfX2FjY2Vzc19ET0xMQVJbXSwKICAgICAgICAgICAgICAgICAgIFVTX19jbGFz c19ET0xMQVJbXSwKICAgICAgICAgICAgICAgICAgIFVTX19jb25zdHJ1Y3Rvcl9ET0xMQVJbXSwK ICAgICAgICAgICAgICAgICAgIFVTX190aGlzX0RPTExBUltdLAogICAgICAgICAgICAgICAgICAg VVNfX3ZhbF9ET0xMQVJbXSwKCiAgICAgICAgICAgICAgICAgICBVU19hYnN0cmFjdFtdLAogICAg ICAgICAgICAgICAgICAgVVNfYXBwZW5kW10sCiAgICAgICAgICAgICAgICAgICBVU19ibG9ja19E T0xMQVJbXSwKICAgICAgICAgICAgICAgICAgIFVTX2Jvb2xlYW5bXSwKICAgICAgICAgICAgICAg ICAgIFVTX2JyZWFrW10sCiAgICAgICAgICAgICAgICAgICBVU19ieXRlW10sCiAgICAgICAgICAg ICAgICAgICBVU19jYXNlW10sCiAgICAgICAgICAgICAgICAgICBVU19jYXRjaFtdLAogICAgICAg ICAgICAgICAgICAgVVNfY2hhcltdLAogICAgICAgICAgICAgICAgICAgVVNfY2xhc3NbXSwKICAg ICAgICAgICAgICAgICAgIFVTX2Nsb25lW10sCiAgICAgICAgICAgICAgICAgICBVU19jb25zdFtd LAogICAgICAgICAgICAgICAgICAgVVNfY29udGludWVbXSwKICAgICAgICAgICAgICAgICAgIFVT X2RlZmF1bHRbXSwKICAgICAgICAgICAgICAgICAgIFVTX2RvW10sCiAgICAgICAgICAgICAgICAg ICBVU19kb3VibGVbXSwKICAgICAgICAgICAgICAgICAgIFVTX2Vsc2VbXSwKICAgICAgICAgICAg ICAgICAgIFVTX2V4dGVuZHNbXSwKICAgICAgICAgICAgICAgICAgIFVTX2ZhbHNlW10sCiAgICAg ICAgICAgICAgICAgICBVU19maW5hbFtdLAogICAgICAgICAgICAgICAgICAgVVNfZmluYWxseVtd LAogICAgICAgICAgICAgICAgICAgVVNfZmxvYXRbXSwKICAgICAgICAgICAgICAgICAgIFVTX2Zv cltdLAogICAgICAgICAgICAgICAgICAgVVNfZm9yTmFtZVtdLAogICAgICAgICAgICAgICAgICAg VVNfZ2V0TWVzc2FnZVtdLAogICAgICAgICAgICAgICAgICAgVVNfZ290b1tdLAogICAgICAgICAg ICAgICAgICAgVVNfaWZbXSwKICAgICAgICAgICAgICAgICAgIFVTX2ltcGxlbWVudHNbXSwKICAg ICAgICAgICAgICAgICAgIFVTX2ltcG9ydFtdLAogICAgICAgICAgICAgICAgICAgVVNfaW5zdGFu Y2VvZltdLAogICAgICAgICAgICAgICAgICAgVVNfaW50W10sCiAgICAgICAgICAgICAgICAgICBV U19pbnRlcmZhY2VbXSwKICAgICAgICAgICAgICAgICAgIFVTX2phdmFfU0xfaW9bXSwKICAgICAg ICAgICAgICAgICAgIFVTX2phdmFfU0xfbGFuZ1tdLAogICAgICAgICAgICAgICAgICAgVVNfamF2 YV9TTF91dGlsW10sCiAgICAgICAgICAgICAgICAgICBVU19sZW5ndGhbXSwKICAgICAgICAgICAg ICAgICAgIFVTX2xvbmdbXSwKICAgICAgICAgICAgICAgICAgIFVTX25hdGl2ZVtdLAogICAgICAg ICAgICAgICAgICAgVVNfbmV3W10sCiAgICAgICAgICAgICAgICAgICBVU19udWxsW10sCiAgICAg ICAgICAgICAgICAgICBVU19wYWNrYWdlW10sCiAgICAgICAgICAgICAgICAgICBVU19wcml2YXRl W10sCiAgICAgICAgICAgICAgICAgICBVU19wcm90ZWN0ZWRbXSwKICAgICAgICAgICAgICAgICAg IFVTX3B1YmxpY1tdLAogICAgICAgICAgICAgICAgICAgVVNfcmV0dXJuW10sCiAgICAgICAgICAg ICAgICAgICBVU19zaG9ydFtdLAogICAgICAgICAgICAgICAgICAgVVNfc3RhdGljW10sCiAgICAg ICAgICAgICAgICAgICBVU19zdHJpY3RmcFtdLAogICAgICAgICAgICAgICAgICAgVVNfc3VwZXJb XSwKICAgICAgICAgICAgICAgICAgIFVTX3N3aXRjaFtdLAogICAgICAgICAgICAgICAgICAgVVNf c3luY2hyb25pemVkW10sCiAgICAgICAgICAgICAgICAgICBVU190aGlzMFtdLAogICAgICAgICAg ICAgICAgICAgVVNfdGhpc1tdLAogICAgICAgICAgICAgICAgICAgVVNfdGhyb3dbXSwKICAgICAg ICAgICAgICAgICAgIFVTX3Rocm93c1tdLAogICAgICAgICAgICAgICAgICAgVVNfdG9TdHJpbmdb XSwKICAgICAgICAgICAgICAgICAgIFVTX3RyYW5zaWVudFtdLAogICAgICAgICAgICAgICAgICAg VVNfdHJ1ZVtdLAogICAgICAgICAgICAgICAgICAgVVNfdHJ5W10sCiAgICAgICAgICAgICAgICAg ICBVU192b2lkW10sCiAgICAgICAgICAgICAgICAgICBVU192b2xhdGlsZVtdLAogICAgICAgICAg ICAgICAgICAgVVNfd2hpbGVbXSwKCiAgICAgICAgICAgICAgICAgICBVU19FT0ZbXTsKCiAgICBz dGF0aWMgd2NoYXJfdCBVU19zbWFsbGVzdF9pbnRbXTsKCiAgICBzdGF0aWMgY2hhciBVOFNfY29t bWFuZF9mb3JtYXRbXTsKCiAgICBzdGF0aWMgaW50IFU4U19Db25zdGFudFZhbHVlX2xlbmd0aCwK ICAgICAgICAgICAgICAgVThTX0V4Y2VwdGlvbnNfbGVuZ3RoLAogICAgICAgICAgICAgICBVOFNf SW5uZXJDbGFzc2VzX2xlbmd0aCwKICAgICAgICAgICAgICAgVThTX1N5bnRoZXRpY19sZW5ndGgs CiAgICAgICAgICAgICAgIFU4U19EZXByZWNhdGVkX2xlbmd0aCwKICAgICAgICAgICAgICAgVThT X0xpbmVOdW1iZXJUYWJsZV9sZW5ndGgsCiAgICAgICAgICAgICAgIFU4U19Mb2NhbFZhcmlhYmxl VGFibGVfbGVuZ3RoLAogICAgICAgICAgICAgICBVOFNfQ29kZV9sZW5ndGgsCiAgICAgICAgICAg ICAgIFU4U19Tb3VyY2VmaWxlX2xlbmd0aCwKCiAgICAgICAgICAgICAgIFU4U19udWxsX2xlbmd0 aCwKICAgICAgICAgICAgICAgVThTX3RoaXNfbGVuZ3RoOwoKICAgIHN0YXRpYyBjaGFyIFU4U19C W10sCiAgICAgICAgICAgICAgICBVOFNfQ1tdLAogICAgICAgICAgICAgICAgVThTX0NvZGVbXSwK ICAgICAgICAgICAgICAgIFU4U19Db25zdGFudFZhbHVlW10sCiAgICAgICAgICAgICAgICBVOFNf RFtdLAogICAgICAgICAgICAgICAgVThTX0V4Y2VwdGlvbnNbXSwKICAgICAgICAgICAgICAgIFU4 U19GW10sCiAgICAgICAgICAgICAgICBVOFNfSVtdLAogICAgICAgICAgICAgICAgVThTX0lubmVy Q2xhc3Nlc1tdLAogICAgICAgICAgICAgICAgVThTX0pbXSwKICAgICAgICAgICAgICAgIFU4U19M UF9MamF2YV9TTF9sYW5nX1NMX1N0cmluZ19TQ19SUF9MamF2YV9TTF9sYW5nX1NMX0NsYXNzX1ND W10sCiAgICAgICAgICAgICAgICBVOFNfTFBfTGphdmFfU0xfbGFuZ19TTF9TdHJpbmdfU0NfUlBf VltdLAogICAgICAgICAgICAgICAgVThTX0xQX1JQX0xqYXZhX1NMX2xhbmdfU0xfU3RyaW5nX1ND W10sCiAgICAgICAgICAgICAgICBVOFNfTFBfUlBfVltdLAogICAgICAgICAgICAgICAgVThTX0xp bmVOdW1iZXJUYWJsZVtdLAogICAgICAgICAgICAgICAgVThTX0xvY2FsVmFyaWFibGVUYWJsZVtd LAogICAgICAgICAgICAgICAgVThTX1NbXSwKICAgICAgICAgICAgICAgIFU4U19Tb3VyY2VmaWxl W10sCiAgICAgICAgICAgICAgICBVOFNfU3ludGhldGljW10sCiAgICAgICAgICAgICAgICBVOFNf RGVwcmVjYXRlZFtdLAogICAgICAgICAgICAgICAgVThTX1ZbXSwKICAgICAgICAgICAgICAgIFU4 U19aW10sCgogICAgICAgICAgICAgICAgVThTX19ET1tdLAogICAgICAgICAgICAgICAgVThTX19E T19jbGFzc1tdLAogICAgICAgICAgICAgICAgVThTX19ET19qYXZhW10sCiAgICAgICAgICAgICAg ICBVOFNfX0RPX3Rva1tdLAogICAgICAgICAgICAgICAgVThTX19ET191W10sCiAgICAgICAgICAg ICAgICBVOFNfX0xQW10sCiAgICAgICAgICAgICAgICBVOFNfX1JQW10sCiAgICAgICAgICAgICAg ICBVOFNfX1NMW10sCiAgICAgICAgICAgICAgICBVOFNfX1NUW10sCgogICAgICAgICAgICAgICAg VThTX2NsYXNzW10sCiAgICAgICAgICAgICAgICBVOFNfamF2YVtdLAogICAgICAgICAgICAgICAg VThTX2phdmFfU0xfbGFuZ19TTF9DbGFzc05vdEZvdW5kRXhjZXB0aW9uW10sCiAgICAgICAgICAg ICAgICBVOFNfamF2YV9TTF9sYW5nX1NMX0NsYXNzW10sCiAgICAgICAgICAgICAgICBVOFNfamF2 YV9TTF9sYW5nX1NMX0ludGVybmFsRXJyb3JbXSwKICAgICAgICAgICAgICAgIFU4U19qYXZhX1NM X2xhbmdfU0xfTm9DbGFzc0RlZkZvdW5kRXJyb3JbXSwKICAgICAgICAgICAgICAgIFU4U19qYXZh X1NMX2xhbmdfU0xfU3RyaW5nQnVmZmVyW10sCiAgICAgICAgICAgICAgICBVOFNfamF2YV9TTF9s YW5nX1NMX1Rocm93YWJsZVtdLAogICAgICAgICAgICAgICAgVThTX251bGxbXSwKICAgICAgICAg ICAgICAgIFU4U19xdWl0W10sCiAgICAgICAgICAgICAgICBVOFNfdGhpc1tdLAoKICAgICAgICAg ICAgICAgIFU4U19MUF9MQl9DX1JQX0xqYXZhX1NMX2xhbmdfU0xfU3RyaW5nQnVmZmVyX1NDW10s CiAgICAgICAgICAgICAgICBVOFNfTFBfQ19SUF9MamF2YV9TTF9sYW5nX1NMX1N0cmluZ0J1ZmZl cl9TQ1tdLAogICAgICAgICAgICAgICAgVThTX0xQX1pfUlBfTGphdmFfU0xfbGFuZ19TTF9TdHJp bmdCdWZmZXJfU0NbXSwKICAgICAgICAgICAgICAgIFU4U19MUF9JX1JQX0xqYXZhX1NMX2xhbmdf U0xfU3RyaW5nQnVmZmVyX1NDW10sCiAgICAgICAgICAgICAgICBVOFNfTFBfSl9SUF9MamF2YV9T TF9sYW5nX1NMX1N0cmluZ0J1ZmZlcl9TQ1tdLAogICAgICAgICAgICAgICAgVThTX0xQX0ZfUlBf TGphdmFfU0xfbGFuZ19TTF9TdHJpbmdCdWZmZXJfU0NbXSwKICAgICAgICAgICAgICAgIFU4U19M UF9EX1JQX0xqYXZhX1NMX2xhbmdfU0xfU3RyaW5nQnVmZmVyX1NDW10sCiAgICAgICAgICAgICAg ICBVOFNfTFBfTGphdmFfU0xfbGFuZ19TTF9TdHJpbmdfU0NfUlBfTGphdmFfU0xfbGFuZ19TTF9T dHJpbmdCdWZmZXJfU0NbXSwKICAgICAgICAgICAgICAgIFU4U19MUF9MamF2YV9TTF9sYW5nX1NM X09iamVjdF9TQ19SUF9MamF2YV9TTF9sYW5nX1NMX1N0cmluZ0J1ZmZlcl9TQ1tdOwoKICAgIHN0 YXRpYyBjaGFyIFU4U19zbWFsbGVzdF9pbnRbXSwKICAgICAgICAgICAgICAgIFU4U19zbWFsbGVz dF9sb25nX2ludFtdLAogICAgICAgICAgICAgICAgVThTX05hTltdLAogICAgICAgICAgICAgICAg VThTX3Bvc19JbmZpbml0eVtdLAogICAgICAgICAgICAgICAgVThTX25lZ19JbmZpbml0eVtdLAog ICAgICAgICAgICAgICAgVThTX3Bvc19aZXJvW10sCiAgICAgICAgICAgICAgICBVOFNfbmVnX1pl cm9bXTsKfTsKCgoKCgpjbGFzcyBJbnRUb1N0cmluZwp7CnB1YmxpYzoKICAgIEludFRvU3RyaW5n KGludCk7CgogICAgY2hhciAqU3RyaW5nKCkgeyByZXR1cm4gc3RyOyB9CiAgICBpbnQgTGVuZ3Ro KCkgeyByZXR1cm4gKCZpbmZvW1RBSUxfSU5ERVhdKSAtIHN0cjsgfQoKcHJpdmF0ZToKICAgIGVu dW0geyBUQUlMX0lOREVYID0gMSArIDEwIH07CgogICAgY2hhciBpbmZvW1RBSUxfSU5ERVggKyAx XSwKICAgICAgICAgKnN0cjsKfTsKCgoKCgpjbGFzcyBJbnRUb1dzdHJpbmcKewpwdWJsaWM6CiAg ICBJbnRUb1dzdHJpbmcoaW50KTsKCiAgICB3Y2hhcl90ICpTdHJpbmcoKSB7IHJldHVybiB3c3Ry OyB9CiAgICBpbnQgTGVuZ3RoKCkgeyByZXR1cm4gKCZ3aW5mb1tUQUlMX0lOREVYXSkgLSB3c3Ry OyB9Cgpwcml2YXRlOgogICAgZW51bSB7IFRBSUxfSU5ERVggPSAxICsgMTAgfTsKCiAgICB3Y2hh cl90IHdpbmZvW1RBSUxfSU5ERVggKyAxXSwKICAgICAgICAgICAgKndzdHI7Cn07CgoKCgoKY2xh c3MgVUxvbmdJbnQ7CmNsYXNzIFVMb25nVG9EZWNTdHJpbmcKewpwdWJsaWM6CiAgICBVTG9uZ1Rv RGVjU3RyaW5nKFVMb25nSW50ICYpOwoKICAgIGNoYXIgKlN0cmluZygpIHsgcmV0dXJuIHN0cjsg fQogICAgaW50IExlbmd0aCgpIHsgcmV0dXJuICgmaW5mb1tUQUlMX0lOREVYXSkgLSBzdHI7IH0K CnByaXZhdGU6CiAgICBlbnVtIHsgVEFJTF9JTkRFWCA9IDIwIH07CgogICAgY2hhciBpbmZvW1RB SUxfSU5ERVggKyAxXSwKICAgICAgICAgKnN0cjsKfTsKCgoKCgpjbGFzcyBCYXNlTG9uZzsKY2xh c3MgTG9uZ1RvT2N0U3RyaW5nCnsKcHVibGljOgogICAgTG9uZ1RvT2N0U3RyaW5nKEJhc2VMb25n ICYpOwoKICAgIGNoYXIgKlN0cmluZygpIHsgcmV0dXJuIHN0ciArIDE7IH0KICAgIGNoYXIgKlN0 cmluZ1dpdGhCYXNlKCkgeyByZXR1cm4gc3RyOyB9CiAgICBpbnQgTGVuZ3RoKCkgeyByZXR1cm4g KCZpbmZvW1RBSUxfSU5ERVhdKSAtIHN0cjsgfQoKcHJpdmF0ZToKICAgIGVudW0geyBUQUlMX0lO REVYID0gMSArIDIyIH07CgogICAgY2hhciBpbmZvW1RBSUxfSU5ERVggKyAxXSwKICAgICAgICAg KnN0cjsKfTsKCgoKCgpjbGFzcyBMb25nVG9IZXhTdHJpbmcKewpwdWJsaWM6CiAgICBMb25nVG9I ZXhTdHJpbmcoQmFzZUxvbmcgJik7CgogICAgY2hhciAqU3RyaW5nKCkgeyByZXR1cm4gc3RyICsg MjsgfQogICAgY2hhciAqU3RyaW5nV2l0aEJhc2UoKSB7IHJldHVybiBzdHI7IH0KICAgIGludCBM ZW5ndGgoKSB7IHJldHVybiAoJmluZm9bVEFJTF9JTkRFWF0pIC0gc3RyOyB9Cgpwcml2YXRlOgog ICAgZW51bSB7IFRBSUxfSU5ERVggPSAxICsgMSArIDE2IH07CgogICAgY2hhciBpbmZvW1RBSUxf SU5ERVggKyAxXSwKICAgICAgICAgKnN0cjsKfTsKCgoKCgpjbGFzcyBMb25nSW50OwpjbGFzcyBM b25nVG9EZWNTdHJpbmcKewpwdWJsaWM6CiAgICBMb25nVG9EZWNTdHJpbmcoTG9uZ0ludCAmKTsK CiAgICBjaGFyICpTdHJpbmcoKSB7IHJldHVybiBzdHI7IH0KICAgIGludCBMZW5ndGgoKSB7IHJl dHVybiAoJmluZm9bVEFJTF9JTkRFWF0pIC0gc3RyOyB9Cgpwcml2YXRlOgogICAgZW51bSB7IFRB SUxfSU5ERVggPSAxICsgMTkgfTsKCiAgICBjaGFyIGluZm9bVEFJTF9JTkRFWCArIDFdLAogICAg ICAgICAqc3RyOwp9OwoKCgoKY2xhc3MgSUVFRWRvdWJsZTsKY2xhc3MgRG91YmxlVG9TdHJpbmcK ewpwdWJsaWM6CiAgICBEb3VibGVUb1N0cmluZyhjb25zdCBJRUVFZG91YmxlICYpOwoKICAgIGNv bnN0IGNoYXIgKlN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHN0cjsgfQogICAgaW50IExlbmd0aCgp IGNvbnN0IHsgcmV0dXJuIGxlbmd0aDsgfQoKcHJpdmF0ZToKICAgIHZvaWQgRm9ybWF0KGNoYXIg KiwgaW50LCBib29sKTsKCiAgICBlbnVtCiAgICB7CiAgICAgICAgTUFYSU1VTV9QUkVDSVNJT04g PSAxNywKICAgICAgICBNQVhJTVVNX1NUUl9MRU5HVEggPSAxICsgTUFYSU1VTV9QUkVDSVNJT04g KyAxICsgNQogICAgfTsKCiAgICBjaGFyIHN0cltNQVhJTVVNX1NUUl9MRU5HVEggKyAxXTsKICAg IGludCBsZW5ndGg7Cn07CgoKCgpjbGFzcyBJRUVFZmxvYXQ7CmNsYXNzIEZsb2F0VG9TdHJpbmcK ewpwdWJsaWM6CiAgICBGbG9hdFRvU3RyaW5nKGNvbnN0IElFRUVmbG9hdCAmKTsKCiAgICBjb25z dCBjaGFyICpTdHJpbmcoKSBjb25zdCB7IHJldHVybiBzdHI7IH0KICAgIGludCBMZW5ndGgoKSBj b25zdCB7IHJldHVybiBsZW5ndGg7IH0KCnByaXZhdGU6CiAgICB2b2lkIEZvcm1hdChjaGFyICos IGludCwgYm9vbCk7CgogICAgZW51bQogICAgewogICAgICAgIE1BWElNVU1fUFJFQ0lTSU9OID0g OSwKICAgICAgICBNQVhJTVVNX1NUUl9MRU5HVEggPSAxICsgTUFYSU1VTV9QUkVDSVNJT04gKyAx ICsgNAogICAgfTsKCiAgICBjaGFyIHN0cltNQVhJTVVNX1NUUl9MRU5HVEggKyAxXTsKICAgIGlu dCBsZW5ndGg7Cn07CgoKCmNsYXNzIExvbmdJbnQ7CmNsYXNzIFVMb25nSW50OwoKCgpjbGFzcyBP c3RyZWFtCnsKICAgIG9zdHJlYW0gKm9zOwoKICAgIGJvb2wgZXhwYW5kX3djaGFyOwoKcHVibGlj OgoKICAgIE9zdHJlYW0oKSA6IG9zKCZjZXJyKSwKICAgICAgICAgICAgICAgIGV4cGFuZF93Y2hh cihmYWxzZSkKICAgIHt9CgogICAgT3N0cmVhbShvc3RyZWFtICpfb3MpIDogb3MoX29zKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZF93Y2hhcihmYWxzZSkKICAgIHt9CgogICAg dm9pZCBTdGFuZGFyZE91dHB1dCgpIHsgb3MgPSAmY291dDsgfQogICAgdm9pZCBTdGFuZGFyZEVy cm9yKCkgeyBvcyA9ICZjZXJyOyB9CiAgICB2b2lkIFNldEV4cGFuZFdjaGFyKGJvb2wgdmFsID0g dHJ1ZSkgeyBleHBhbmRfd2NoYXIgPSB2YWw7IH0KICAgIGJvb2wgRXhwYW5kV2NoYXIoKSB7IHJl dHVybiBleHBhbmRfd2NoYXI7IH0KCiAgICBPc3RyZWFtICZvcGVyYXRvcjw8KHdjaGFyX3QgY2gp CiAgICB7CiAgICAgICAgaWYgKGNoID4+IDggPT0gMCkKICAgICAgICAgICAgKm9zIDw8IChjaGFy KSBjaDsKICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBpZiAoZXhwYW5kX3djaGFy ID09IDApCiAgICAgICAgICAgICAgICAqb3MgPDwgKGNoYXIpIFVfUVVFU1RJT047CiAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKm9zIDw8IChjaGFyKSBVX0JB Q0tTTEFTSAogICAgICAgICAgICAgICAgICAgIDw8IChjaGFyKSBVX3U7CgogICAgICAgICAgICAg ICAgY2hhciBzdHJbNF07CiAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMzsgaSA+PSAwOyBp LS0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaW50IGQgPSBjaCAlIDE2 OwogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZCkKICAgICAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJbaV0gPSBVX0E7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgICAgICAgICAgY2FzZSAxMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cltpXSA9IFVfQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgICAgICAgICBjYXNlIDEyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyW2ld ID0gVV9DOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgMTM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJbaV0gPSBV X0Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg ICAgICAgY2FzZSAxNDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cltpXSA9IFVfRTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg ICBjYXNlIDE1OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyW2ldID0gVV9GOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGRl ZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJbaV0gPSBVXzAgKyBkOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgIGNoIC89IDE2OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgKm9zIDw8IHN0clswXTsKICAgICAgICAgICAgICAgICpvcyA8PCBzdHJbMV07CiAgICAgICAg ICAgICAgICAqb3MgPDwgc3RyWzJdOwogICAgICAgICAgICAgICAgKm9zIDw8IHN0clszXTsKICAg ICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIE9z dHJlYW0gJm9wZXJhdG9yPDwoY29uc3Qgd2NoYXJfdCAqc3RyKQogICAgewogICAgICAgIGZvciAo OyAqc3RyOyBzdHIrKykKICAgICAgICAgICAgKCp0aGlzKSA8PCAqc3RyOwogICAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCgogICAgT3N0cmVhbSAmb3BlcmF0b3I8PChjaGFyIGMpCiAgICB7CiAg ICAgICAgKm9zIDw8IGM7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIE9zdHJlYW0g Jm9wZXJhdG9yPDwoc2lnbmVkIGNoYXIgYykKICAgIHsKICAgICAgICAqb3MgPDwgYzsKICAgICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgT3N0cmVhbSAmb3BlcmF0b3I8PCh1bnNpZ25lZCBj aGFyIGMpCiAgICB7CiAgICAgICAgKm9zIDw8IGM7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKICAgIE9zdHJlYW0gJm9wZXJhdG9yPDwoY29uc3QgY2hhciAqYykKICAgIHsKICAgICAgICAq b3MgPDwgYzsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgT3N0cmVhbSAmb3BlcmF0 b3I8PChjb25zdCBzaWduZWQgY2hhciAqYykKICAgIHsKICAgICAgICAqb3MgPDwgYzsKICAgICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgT3N0cmVhbSAmb3BlcmF0b3I8PChjb25zdCB1bnNp Z25lZCBjaGFyICpjKQogICAgewoKCgoKCgoKICAgICAgICAqb3MgPDwgYzsKCiAgICAgICAgcmV0 dXJuICp0aGlzOwogICAgfQoKICAgIE9zdHJlYW0gJm9wZXJhdG9yPDwoaW50IGEpCiAgICB7CiAg ICAgICAgKm9zIDw8IGE7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIE9zdHJlYW0g Jm9wZXJhdG9yPDwodW5zaWduZWQgaW50IGEpCiAgICB7CiAgICAgICAgKm9zIDw8IGE7CiAgICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIE9zdHJlYW0gJm9wZXJhdG9yPDwoTG9uZ0ludCk7 CiAgICBPc3RyZWFtICZvcGVyYXRvcjw8KFVMb25nSW50KTsKCiAgICBPc3RyZWFtICZvcGVyYXRv cjw8KGZsb2F0IGYpCiAgICB7CiAgICAgICAgKm9zIDw8IGY7CiAgICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKICAgIE9zdHJlYW0gJm9wZXJhdG9yPDwoZG91YmxlIGQpCiAgICB7CiAgICAgICAg Km9zIDw8IGQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIGNoYXIgZmlsbChjaGFy IGMpIHsgcmV0dXJuIG9zIC0+IGZpbGwoYyk7IH0KCiAgICBPc3RyZWFtICZmbHVzaCgpCiAgICB7 CiAgICAgICAgb3MgLT4gZmx1c2goKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAg aW50IHdpZHRoKGludCB3KQogICAgewogICAgICAgIHJldHVybiBvcyAtPiB3aWR0aCh3KTsKICAg IH0KCiAgICBPc3RyZWFtICZvcGVyYXRvcjw8KGlvcyAmKCpmKShpb3MmKSkKICAgIHsKICAgICAg ICAoKmYpKCpvcyk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIE9zdHJlYW0gJm9w ZXJhdG9yPDwob3N0cmVhbSAmKCpmKShvc3RyZWFtJikpCiAgICB7CiAgICAgICAgKCpmKSgqb3Mp OwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KfTsKCmV4dGVybiBPc3RyZWFtIENvdXRwdXQ7 CiMgMTExMyAicGxhdGZvcm0uaCIKY2xhc3MgRXJyb3JTdHJpbmc6IHB1YmxpYyBDb252ZXJ0aWJs ZUFycmF5PHdjaGFyX3Q+CnsKIHB1YmxpYzoKICAgIEVycm9yU3RyaW5nKCk7CgogICAgRXJyb3JT dHJpbmcgJm9wZXJhdG9yPDwoY29uc3Qgd2NoYXJfdCAqcyk7CiAgICBFcnJvclN0cmluZyAmb3Bl cmF0b3I8PChjb25zdCB3Y2hhcl90IGMgKTsKICAgIEVycm9yU3RyaW5nICZvcGVyYXRvcjw8KGNv bnN0IGNoYXIgKnMpOwogICAgRXJyb3JTdHJpbmcgJm9wZXJhdG9yPDwoY29uc3QgY2hhciBjICk7 CiAgICBFcnJvclN0cmluZyAmb3BlcmF0b3I8PChpbnQgbik7CgogICAgdm9pZCB3aWR0aChpbnQg dyk7CiAgICB2b2lkIGZpbGwoY29uc3QgY2hhciBjKTsKCiAgICB3Y2hhcl90ICpBcnJheSgpOwoK IHByaXZhdGU6CgogICAgdm9pZCBkb19maWxsKGludCBuKTsKICAgIGNoYXIgZmlsbF9jaGFyIDsK ICAgIGludCBmaWVsZF93aWR0aCA7Cn07CiMgNjUgImRvdWJsZS5oIiAyCiMgMSAibG9uZy5oIiAx CiMgMjAgImxvbmcuaCIKY2xhc3MgSUVFRWRvdWJsZTsKY2xhc3MgSUVFRWZsb2F0OwoKY2xhc3Mg TG9uZ0ludDsKY2xhc3MgVUxvbmdJbnQ7CgpjbGFzcyBCYXNlTG9uZwp7CnByb3RlY3RlZDoKICAg IGVudW0KICAgIHsKICAgICAgICBNQVhfSU5UID0gMHg3RkZGRkZGRiwKICAgICAgICBNSU5fSU5U ID0gMHg4MDAwMDAwMCwKICAgICAgICBTSE9SVF9NQVNLID0gMHhGRkZGLAogICAgICAgIFNJR05f QklUID0gMHg4MDAwMDAwMAogICAgfTsKCiAgICB1bmlvbgogICAgewogICAgICAgIGRvdWJsZSBk b3VibGVfdmFsdWU7CgoKCiAgICAgICAgdTggd29yZHM7CgogICAgfSB2YWx1ZTsKCgogICAgaW5s aW5lIHZvaWQgc2V0SGlnaFdvcmQodTQgaGlnaCkgewoKCgoKCgoKICAgICAgICBzZXRIaWdoQW5k TG93V29yZHMoaGlnaCwgTG93V29yZCgpKTsKCiAgICB9CgoKICAgIGlubGluZSB2b2lkIHNldExv d1dvcmQodTQgbG93KSB7CgoKCgoKCgogICAgICAgIHNldEhpZ2hBbmRMb3dXb3JkcyhIaWdoV29y ZCgpLCBsb3cpOwoKICAgIH0KCgogICAgaW5saW5lIHZvaWQgc2V0SGlnaEFuZExvd1dvcmRzKHU0 IGhpZ2gsIHU0IGxvdykgewojIDg0ICJsb25nLmgiCiAgICAgICAgdmFsdWUud29yZHMgPSAoKCh1 OCkgaGlnaCkgPDwgMzIpIHwgbG93OwoKICAgIH0KCgogICAgaW5saW5lIHZvaWQgc2V0SGlnaEFu ZExvd1dvcmRzKGNvbnN0IEJhc2VMb25nICZvcCkKICAgIHsKCgoKCiAgICAgICAgdmFsdWUud29y ZHMgPSBvcC52YWx1ZS53b3JkczsKCiAgICB9CgpwdWJsaWM6CiMgMTEwICJsb25nLmgiCiAgICBp bmxpbmUgdTQgSGlnaFdvcmQodm9pZCkgY29uc3QgeyByZXR1cm4gKCh1NCkgKHZhbHVlLndvcmRz ID4+IDMyKSk7IH0KICAgIGlubGluZSB1NCBMb3dXb3JkKHZvaWQpIGNvbnN0IHsgcmV0dXJuICgo dTQpIHZhbHVlLndvcmRzKTsgfQogICAgaW5saW5lIHU4IFdvcmRzKHZvaWQpIGNvbnN0IHsgcmV0 dXJuIHZhbHVlLndvcmRzOyB9CgoKICAgIGRvdWJsZSBEb3VibGVWaWV3KHZvaWQpIGNvbnN0IHsg cmV0dXJuIHZhbHVlLmRvdWJsZV92YWx1ZTsgfQoKICAgIEJhc2VMb25nKHU0IGhpZ2gsIHU0IGxv dyk7CiAgICBCYXNlTG9uZyh1NCBhKTsKICAgIEJhc2VMb25nKGk0IGEpOwogICAgaW5saW5lIEJh c2VMb25nICh2b2lkKSB7fQoKICAgIGlubGluZSBCYXNlTG9uZyh1OCBhKSB7IHZhbHVlLndvcmRz ID0gYTsgfQoKCiAgICBCYXNlTG9uZyBvcGVyYXRvcisgKGNvbnN0IEJhc2VMb25nKSBjb25zdDsK ICAgIEJhc2VMb25nIG9wZXJhdG9yKyAodm9pZCkgY29uc3Q7CiAgICBCYXNlTG9uZyAmb3BlcmF0 b3IrPSAoY29uc3QgQmFzZUxvbmcpOwogICAgQmFzZUxvbmcgb3BlcmF0b3IrKyAoaW50KTsKICAg IEJhc2VMb25nIG9wZXJhdG9yKysgKHZvaWQpOwoKICAgIEJhc2VMb25nIG9wZXJhdG9yLSAoY29u c3QgQmFzZUxvbmcpIGNvbnN0OwogICAgQmFzZUxvbmcgb3BlcmF0b3ItICh2b2lkKSBjb25zdDsK ICAgIEJhc2VMb25nICZvcGVyYXRvci09IChjb25zdCBCYXNlTG9uZyk7CiAgICBCYXNlTG9uZyBv cGVyYXRvci0tIChpbnQpOwogICAgQmFzZUxvbmcgb3BlcmF0b3ItLSAodm9pZCk7CgogICAgQmFz ZUxvbmcgb3BlcmF0b3IqIChjb25zdCBCYXNlTG9uZykgY29uc3Q7CiAgICBCYXNlTG9uZyAmb3Bl cmF0b3IqPSAoY29uc3QgQmFzZUxvbmcpOwoKCgoKCiAgICBCYXNlTG9uZyBvcGVyYXRvcjw8IChp bnQpIGNvbnN0OwogICAgQmFzZUxvbmcgJm9wZXJhdG9yPDw9KGludCk7CgogICAgYm9vbCBvcGVy YXRvcj09IChjb25zdCBCYXNlTG9uZykgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yIT0gKGNvbnN0 IEJhc2VMb25nKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3IhICh2b2lkKSBjb25zdDsKCiAgICBC YXNlTG9uZyBvcGVyYXRvcn4gKHZvaWQpIGNvbnN0OwogICAgQmFzZUxvbmcgb3BlcmF0b3JeIChj b25zdCBCYXNlTG9uZykgY29uc3Q7CiAgICBCYXNlTG9uZyAmb3BlcmF0b3JePSAoY29uc3QgQmFz ZUxvbmcpOwogICAgQmFzZUxvbmcgb3BlcmF0b3J8IChjb25zdCBCYXNlTG9uZykgY29uc3Q7CiAg ICBCYXNlTG9uZyAmb3BlcmF0b3J8PSAoY29uc3QgQmFzZUxvbmcpOwogICAgQmFzZUxvbmcgb3Bl cmF0b3ImIChjb25zdCBCYXNlTG9uZykgY29uc3Q7CiAgICBCYXNlTG9uZyAmb3BlcmF0b3ImPSAo Y29uc3QgQmFzZUxvbmcpOwoKICAgIGJvb2wgb3BlcmF0b3ImJiAoY29uc3QgQmFzZUxvbmcpIGNv bnN0OwogICAgYm9vbCBvcGVyYXRvcnx8IChjb25zdCBCYXNlTG9uZykgY29uc3Q7CgogICAgc3Rh dGljIHZvaWQgRGl2aWRlKGNvbnN0IEJhc2VMb25nICYsIGNvbnN0IEJhc2VMb25nICYsIEJhc2VM b25nICYsIEJhc2VMb25nICYpOwoKICAgIG9wZXJhdG9yIExvbmdJbnQodm9pZCkgY29uc3Q7CiAg ICBvcGVyYXRvciBVTG9uZ0ludCh2b2lkKSBjb25zdDsKCgogICAgaW5saW5lIGk0IGhhc2hDb2Rl KHZvaWQpIGNvbnN0IHsgcmV0dXJuIChIaWdoV29yZCgpIF4gTG93V29yZCgpKTsgfQp9OwoKCmNs YXNzIExvbmdJbnQgOiBwdWJsaWMgQmFzZUxvbmcKewpwdWJsaWM6CgogICAgaW5saW5lIExvbmdJ bnQgKHU0IGEsIHU0IGIpIDogQmFzZUxvbmcgKGEsIGIpIHt9CiAgICBpbmxpbmUgTG9uZ0ludCAo dTQgYSkgOiBCYXNlTG9uZyAoYSkge30KICAgIGlubGluZSBMb25nSW50IChpNCBhKSA6IEJhc2VM b25nIChhKSB7fQogICAgaW5saW5lIExvbmdJbnQgKHZvaWQpIDogQmFzZUxvbmcgKCkge30KCiAg ICBleHBsaWNpdAoKICAgICAgICAgICBMb25nSW50IChjb25zdCBJRUVFZG91YmxlICYpOwoKCiAg ICBleHBsaWNpdAoKICAgICAgICAgICBMb25nSW50IChjb25zdCBJRUVFZmxvYXQgJik7CgogICAg aW5saW5lIExvbmdJbnQodTggYSkgOiBCYXNlTG9uZyAoYSkge30KCgoKCgoKICAgIHN0YXRpYyBp bmxpbmUgY29uc3QgTG9uZ0ludCBNQVhfTE9ORyh2b2lkKQogICAgewogICAgICAgIHJldHVybiBt YXhfbG9uZ19jb25zdCA/ICptYXhfbG9uZ19jb25zdAogICAgICAgICAgICA6ICoobWF4X2xvbmdf Y29uc3QgPSBuZXcgTG9uZ0ludCgweDdGRkZGRkZGLCAweEZGRkZGRkZGKSk7CiAgICB9CiAgICBz dGF0aWMgaW5saW5lIGNvbnN0IExvbmdJbnQgTUlOX0xPTkcodm9pZCkKICAgIHsKICAgICAgICBy ZXR1cm4gbWluX2xvbmdfY29uc3QgPyAqbWluX2xvbmdfY29uc3QKICAgICAgICAgICAgOiAqKG1p bl9sb25nX2NvbnN0ID0gbmV3IExvbmdJbnQoMHg4MDAwMDAwMCwgMHgwMDAwMDAwMCkpOwogICAg fQogICAgc3RhdGljIHZvaWQgQ29uc3RhbnRDbGVhbnVwKHZvaWQpCiAgICB7CgoKCiAgICAgICAg aWYgKG1heF9sb25nX2NvbnN0KQogICAgICAgICAgICBkZWxldGUgKExvbmdJbnQqKW1heF9sb25n X2NvbnN0OwogICAgICAgIGlmIChtaW5fbG9uZ19jb25zdCkKICAgICAgICAgICAgZGVsZXRlIChM b25nSW50KiltaW5fbG9uZ19jb25zdDsKICAgIH0KCgpwcml2YXRlOgogICAgc3RhdGljIGNvbnN0 IExvbmdJbnQgKm1heF9sb25nX2NvbnN0LCAqbWluX2xvbmdfY29uc3Q7CgpwdWJsaWM6CiAgICBM b25nSW50IG9wZXJhdG9yLyAoY29uc3QgTG9uZ0ludCkgY29uc3Q7CiAgICBMb25nSW50ICZvcGVy YXRvci89IChjb25zdCBMb25nSW50KTsKCiAgICBMb25nSW50IG9wZXJhdG9yJSAoY29uc3QgTG9u Z0ludCkgY29uc3Q7CiAgICBMb25nSW50ICZvcGVyYXRvciU9IChjb25zdCBMb25nSW50KTsKCgoK CgogICAgTG9uZ0ludCBvcGVyYXRvcj4+IChpbnQpIGNvbnN0OwogICAgTG9uZ0ludCAmb3BlcmF0 b3I+Pj0oaW50KTsKCiAgICBib29sIG9wZXJhdG9yPCAoY29uc3QgTG9uZ0ludCkgY29uc3Q7CiAg ICBib29sIG9wZXJhdG9yPiAoY29uc3QgTG9uZ0ludCkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9y PD0gKGNvbnN0IExvbmdJbnQpIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvcj49IChjb25zdCBMb25n SW50KSBjb25zdDsKfTsKCgpjbGFzcyBVTG9uZ0ludCA6IHB1YmxpYyBCYXNlTG9uZwp7CnB1Ymxp YzoKCiAgICBpbmxpbmUgVUxvbmdJbnQgKHU0IGEsIHU0IGIpIDogQmFzZUxvbmcgKGEsIGIpIHt9 CiAgICBpbmxpbmUgVUxvbmdJbnQgKHU0IGEpIDogQmFzZUxvbmcgKGEpIHt9CiAgICBpbmxpbmUg VUxvbmdJbnQgKGk0IGEpIDogQmFzZUxvbmcgKGEpIHt9CiAgICBpbmxpbmUgVUxvbmdJbnQgKHZv aWQpIDogQmFzZUxvbmcgKCkge30KCiAgICBpbmxpbmUgVUxvbmdJbnQodTggYSkgOiBCYXNlTG9u ZyAoYSkge30KCgogICAgVUxvbmdJbnQgb3BlcmF0b3IvIChjb25zdCBVTG9uZ0ludCkgY29uc3Q7 CiAgICBVTG9uZ0ludCAmb3BlcmF0b3IvPSAoY29uc3QgVUxvbmdJbnQpOwoKICAgIFVMb25nSW50 IG9wZXJhdG9yJSAoY29uc3QgVUxvbmdJbnQpIGNvbnN0OwogICAgVUxvbmdJbnQgJm9wZXJhdG9y JT0gKGNvbnN0IFVMb25nSW50KTsKCgoKCgogICAgVUxvbmdJbnQgb3BlcmF0b3I+PiAoaW50KSBj b25zdDsKICAgIFVMb25nSW50ICZvcGVyYXRvcj4+PShpbnQpOwoKICAgIGJvb2wgb3BlcmF0b3I8 IChjb25zdCBVTG9uZ0ludCkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yPiAoY29uc3QgVUxvbmdJ bnQpIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvcjw9IChjb25zdCBVTG9uZ0ludCkgY29uc3Q7CiAg ICBib29sIG9wZXJhdG9yPj0gKGNvbnN0IFVMb25nSW50KSBjb25zdDsKfTsKIyA2NiAiZG91Ymxl LmgiIDIKCgoKCgpjbGFzcyBMb25nSW50OwpjbGFzcyBJRUVFZG91YmxlOwpjbGFzcyBCaWdJbnQ7 CgpjbGFzcyBJRUVFZmxvYXQKewoKCgoKCgpwcml2YXRlOgogICAgZnJpZW5kIGNsYXNzIEZsb2F0 VG9TdHJpbmc7CgogICAgdW5pb24KICAgIHsKICAgICAgICBmbG9hdCBmbG9hdF92YWx1ZTsKICAg ICAgICB1NCB3b3JkOwogICAgICAgIGk0IGl3b3JkOwogICAgfSB2YWx1ZTsKCgoKCiAgICBlbnVt CiAgICB7CiAgICAgICAgRlJBQ1RfU0laRSA9IDIzLAogICAgICAgIEJJQVMgPSAxMjcsCiAgICAg ICAgTUFYX0RFQ19FWFAgPSAzOCwKICAgICAgICBNQVhfRElHSVRTID0gQklBUyArIEZSQUNUX1NJ WkUgKyAxIC0gTUFYX0RFQ19FWFAKICAgIH07CiAgICBlbnVtCiAgICB7CiAgICAgICAgU0lHTl9C SVQgPSAweDgwMDAwMDAwLAogICAgICAgIEVYUF9CSVRTID0gMHg3RjgwMDAwMCwKICAgICAgICBG UkFDVF9CSVRTID0gMHgwMDdGRkZGRiwKICAgICAgICBBQlNfQklUUyA9IEVYUF9CSVRTIHwgRlJB Q1RfQklUUywKICAgICAgICBNQVhfRlJBQ1QgPSAweDAxMDAwMDAwLAogICAgICAgIE1JTl9GUkFD VCA9IDB4MDA4MDAwMDAsCiAgICAgICAgTkVHX1pFUk8gPSAweDgwMDAwMDAwLAogICAgICAgIFBP U19aRVJPID0gMHgwMDAwMDAwMCwKICAgICAgICBORUdfSU5GID0gMHhGRjgwMDAwMCwKICAgICAg ICBQT1NfSU5GID0gMHg3RjgwMDAwMCwKICAgICAgICBKX05BTiA9IDB4N0ZDMDAwMDAsCiAgICAg ICAgQllURV9NQVNLID0gMHgwMDAwMDBGRiwKICAgICAgICBNQVhfSU5UID0gMHg3RkZGRkZGRiwK ICAgICAgICBNSU5fSU5UID0gMHg4MDAwMDAwMCwKICAgICAgICBNSU5fTE9OR19GID0gMHhERjAw MDAwMCwKICAgICAgICBNSU5fSU5UX0YgPSAweENGMDAwMDAwCiAgICB9OwoKICAgIGlubGluZSB1 NCBTaWduQml0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIHZhbHVlLndvcmQgJiBTSUdOX0JJVDsgfQog ICAgaW5saW5lIHU0IEV4cEJpdHModm9pZCkgY29uc3QgeyByZXR1cm4gdmFsdWUud29yZCAmIEVY UF9CSVRTOyB9CiAgICBpbmxpbmUgdTQgRnJhY3RCaXRzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHZh bHVlLndvcmQgJiBGUkFDVF9CSVRTOyB9CgoKCiAgICBzdGF0aWMgSUVFRWZsb2F0IE5vcm1hbGl6 ZShpbnQsIGludCwgdTQpOwoKCiAgICBpbnQgU3BsaXRJbnRvKHU0ICZmcmFjdGlvbikgY29uc3Q7 CgoKICAgIElFRUVmbG9hdCBVbHAodm9pZCkgY29uc3Q7CgogICAgc3RhdGljIElFRUVmbG9hdCBS YXRpbyhjb25zdCBCaWdJbnQgJiwgY29uc3QgQmlnSW50ICYpOwoKCiAgICBib29sIEFkanVzdChj b25zdCBCaWdJbnQgJiwgY29uc3QgQmlnSW50ICYsIGNvbnN0IGJvb2wpOwoKCgoKCgogICAgc3Rh dGljIGNvbnN0IElFRUVmbG9hdCB0ZW5zW107CiAgICBzdGF0aWMgY29uc3QgSUVFRWZsb2F0IGJp Z3RlbnNbXTsKCgpwdWJsaWM6CgoKCiAgICBpbmxpbmUgdTQgV29yZCh2b2lkKSBjb25zdCB7IHJl dHVybiB2YWx1ZS53b3JkOyB9CgogICAgaW5saW5lIGludCBTaWduKHZvaWQpIGNvbnN0IHsgcmV0 dXJuIHZhbHVlLndvcmQgPj4gMzE7IH0KICAgIGlubGluZSBpbnQgRXhwb25lbnQodm9pZCkgY29u c3QgeyByZXR1cm4gKCh2YWx1ZS53b3JkICYgRVhQX0JJVFMpID4+IEZSQUNUX1NJWkUpIC0gQklB UzsgfQogICAgaW5saW5lIHU0IEZyYWN0aW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuICh2YWx1ZS53 b3JkICYgRlJBQ1RfQklUUykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAoRXhwQml0cygpID8gTUlOX0ZSQUNUIDogMCk7IH0KICAgIHN0YXRpYyBpbmxpbmUgaW50 IEJpYXModm9pZCkgeyByZXR1cm4gQklBUzsgfQogICAgc3RhdGljIGlubGluZSBpbnQgRnJhY3RT aXplKHZvaWQpIHsgcmV0dXJuIEZSQUNUX1NJWkU7IH0KCiAgICBpbmxpbmUgYm9vbCBJc05hTih2 b2lkKSBjb25zdCB7IHJldHVybiAodmFsdWUud29yZCAmIEFCU19CSVRTKSA+IEVYUF9CSVRTOyB9 CgogICAgaW5saW5lIGJvb2wgSXNOZWdhdGl2ZSh2b2lkKSBjb25zdCB7IHJldHVybiAodmFsdWUu aXdvcmQgPCAwKSAmJiAhSXNOYU4oKTsgfQogICAgaW5saW5lIGJvb2wgSXNQb3NpdGl2ZSh2b2lk KSBjb25zdCB7IHJldHVybiAodmFsdWUuaXdvcmQgPj0gMCkgJiYgIUlzTmFOKCk7IH0KCiAgICBp bmxpbmUgYm9vbCBJc05lZ2F0aXZlWmVybyh2b2lkKSBjb25zdCB7IHJldHVybiB2YWx1ZS53b3Jk ID09IE5FR19aRVJPOyB9CiAgICBpbmxpbmUgYm9vbCBJc1Bvc2l0aXZlWmVybyh2b2lkKSBjb25z dCB7IHJldHVybiB2YWx1ZS53b3JkID09IFBPU19aRVJPOyB9CiAgICBpbmxpbmUgYm9vbCBJc1pl cm8odm9pZCkgY29uc3QgeyByZXR1cm4gKHZhbHVlLndvcmQgJiBBQlNfQklUUykgPT0gUE9TX1pF Uk87IH0KCiAgICBpbmxpbmUgYm9vbCBJc05lZ2F0aXZlSW5maW5pdHkodm9pZCkgY29uc3QgeyBy ZXR1cm4gdmFsdWUud29yZCA9PSBORUdfSU5GOyB9CiAgICBpbmxpbmUgYm9vbCBJc1Bvc2l0aXZl SW5maW5pdHkodm9pZCkgY29uc3QgeyByZXR1cm4gdmFsdWUud29yZCA9PSBQT1NfSU5GOyB9CiAg ICBpbmxpbmUgYm9vbCBJc0luZmluaXRlKHZvaWQpIGNvbnN0IHsgcmV0dXJuICh2YWx1ZS53b3Jk ICYgQUJTX0JJVFMpID09IFBPU19JTkY7IH0KIyAxODYgImRvdWJsZS5oIgogICAgc3RhdGljIGlu bGluZSBjb25zdCBJRUVFZmxvYXQKICAgICAgICBOYU4odm9pZCkgeyByZXR1cm4gSUVFRWZsb2F0 KCh1NCkoX19leHRlbnNpb25fXyAoKHVuaW9uIHsgdW5zaWduZWQgX19sIF9fYXR0cmlidXRlX18o KF9fbW9kZV9fKF9fU0lfXykpKTsgZmxvYXQgX19kOyB9KSB7IF9fbDogMHg3ZmMwMDAwMFVMIH0p Ll9fZCkpOyB9CiAgICBzdGF0aWMgaW5saW5lIGNvbnN0IElFRUVmbG9hdAogICAgICAgIFBPU0lU SVZFX0lORklOSVRZKHZvaWQpIHsgcmV0dXJuIElFRUVmbG9hdCgodTQpUE9TX0lORik7IH0KICAg IHN0YXRpYyBpbmxpbmUgY29uc3QgSUVFRWZsb2F0CiAgICAgICAgTkVHQVRJVkVfSU5GSU5JVFko dm9pZCkgeyByZXR1cm4gSUVFRWZsb2F0KCh1NClORUdfSU5GKTsgfQogICAgc3RhdGljIGlubGlu ZSBjb25zdCBJRUVFZmxvYXQKICAgICAgICBQT1NJVElWRV9aRVJPKHZvaWQpIHsgcmV0dXJuIElF RUVmbG9hdCgodTQpUE9TX1pFUk8pOyB9CiAgICBzdGF0aWMgaW5saW5lIGNvbnN0IElFRUVmbG9h dAogICAgICAgIE5FR0FUSVZFX1pFUk8odm9pZCkgeyByZXR1cm4gSUVFRWZsb2F0KCh1NClORUdf WkVSTyk7IH0KCgoKCgogICAgaW5saW5lIElFRUVmbG9hdChmbG9hdCBmKSB7IHZhbHVlLmZsb2F0 X3ZhbHVlID0gZjsgfQoKCiAgICAgICAgICAgICBJRUVFZmxvYXQoY29uc3QgY2hhciAqLCBib29s IGNoZWNrX2ludmFsaWQgPSBmYWxzZSk7CgogICAgICAgICAgICAgSUVFRWZsb2F0KGk0KTsKCiAg ICAgICAgICAgICBJRUVFZmxvYXQoY29uc3QgTG9uZ0ludCAmKTsKCgogICAgZXhwbGljaXQKCiAg ICAgICAgICAgICBJRUVFZmxvYXQoY29uc3QgSUVFRWRvdWJsZSAmKTsKCiAgICBpbmxpbmUgSUVF RWZsb2F0KHZvaWQpIHt9CgoKICAgIGlubGluZSBJRUVFZmxvYXQodTQgYml0cykgeyB2YWx1ZS53 b3JkID0gYml0czsgfQoKCgoKCiAgICAgICAgICAgaTQgSW50VmFsdWUodm9pZCkgY29uc3Q7CiAg ICAgICAgICAgTG9uZ0ludCBMb25nVmFsdWUodm9pZCkgY29uc3Q7CiAgICBpbmxpbmUgZmxvYXQg RmxvYXRWaWV3KHZvaWQpIGNvbnN0IHsgcmV0dXJuIHZhbHVlLmZsb2F0X3ZhbHVlOyB9CiAgICBp bmxpbmUgSUVFRWRvdWJsZSBEb3VibGVWYWx1ZSh2b2lkKSBjb25zdDsKCgoKCgoKICAgICAgICAg ICBJRUVFZmxvYXQgb3BlcmF0b3IrIChjb25zdCBJRUVFZmxvYXQpIGNvbnN0OwogICAgaW5saW5l IElFRUVmbG9hdCBvcGVyYXRvcisgKHZvaWQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICBpbmxpbmUg SUVFRWZsb2F0ICZvcGVyYXRvcis9IChjb25zdCBJRUVFZmxvYXQgb3ApIHsgcmV0dXJuICp0aGlz ID0gKnRoaXMgKyBvcDsgfQogICAgaW5saW5lIElFRUVmbG9hdCBvcGVyYXRvcisrICh2b2lkKSB7 IHJldHVybiAqdGhpcyArPSAxOyB9CiAgICBpbmxpbmUgSUVFRWZsb2F0IG9wZXJhdG9yKysgKGlu dCBkdW1teSkKICAgIHsKICAgICAgICBJRUVFZmxvYXQgcmVzdWx0ID0gKnRoaXM7CiAgICAgICAg KnRoaXMgKz0gMTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgICAgICAgICBJRUVF ZmxvYXQgb3BlcmF0b3ItICh2b2lkKSBjb25zdDsKICAgIGlubGluZSBJRUVFZmxvYXQgb3BlcmF0 b3ItIChjb25zdCBJRUVFZmxvYXQgb3ApIGNvbnN0IHsgcmV0dXJuICp0aGlzICsgKC1vcCk7IH0K ICAgIGlubGluZSBJRUVFZmxvYXQgJm9wZXJhdG9yLT0gKGNvbnN0IElFRUVmbG9hdCBvcCkgeyBy ZXR1cm4gKnRoaXMgPSAqdGhpcyAtIG9wOyB9CiAgICBpbmxpbmUgSUVFRWZsb2F0IG9wZXJhdG9y LS0gKHZvaWQpIHsgcmV0dXJuICp0aGlzIC09IDE7IH0KICAgIGlubGluZSBJRUVFZmxvYXQgb3Bl cmF0b3ItLSAoaW50IGR1bW15KQogICAgewogICAgICAgIElFRUVmbG9hdCByZXN1bHQgPSAqdGhp czsKICAgICAgICAqdGhpcyAtPSAxOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAg ICAgICAgIElFRUVmbG9hdCBvcGVyYXRvciogKGNvbnN0IElFRUVmbG9hdCkgY29uc3Q7CiAgICBp bmxpbmUgSUVFRWZsb2F0ICZvcGVyYXRvcio9IChjb25zdCBJRUVFZmxvYXQgb3ApIHsgcmV0dXJu ICp0aGlzID0gKnRoaXMgKiBvcDsgfQoKICAgICAgICAgICBJRUVFZmxvYXQgb3BlcmF0b3IvIChj b25zdCBJRUVFZmxvYXQpIGNvbnN0OwogICAgaW5saW5lIElFRUVmbG9hdCAmb3BlcmF0b3IvPSAo Y29uc3QgSUVFRWZsb2F0IG9wKSB7IHJldHVybiAqdGhpcyA9ICp0aGlzIC8gb3A7IH0KCiAgICAg ICAgICAgSUVFRWZsb2F0IG9wZXJhdG9yJSAoY29uc3QgSUVFRWZsb2F0KSBjb25zdDsKICAgIGlu bGluZSBJRUVFZmxvYXQgJm9wZXJhdG9yJT0gKGNvbnN0IElFRUVmbG9hdCBvcCkgeyByZXR1cm4g KnRoaXMgPSAqdGhpcyAlIG9wOyB9CgoKCgogICAgYm9vbCBvcGVyYXRvcj09IChjb25zdCBJRUVF ZmxvYXQpIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9IChjb25zdCBJRUVFZmxvYXQpIGNvbnN0 OwogICAgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IElFRUVmbG9hdCkgY29uc3Q7CiAgICBib29sIG9w ZXJhdG9yPiAoY29uc3QgSUVFRWZsb2F0KSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3I8PSAoY29u c3QgSUVFRWZsb2F0KSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3I+PSAoY29uc3QgSUVFRWZsb2F0 KSBjb25zdDsKIyAyODQgImRvdWJsZS5oIgogICAgaW5saW5lIGJvb2wgZXF1YWxzKGNvbnN0IElF RUVmbG9hdCBvcCkgY29uc3QgeyByZXR1cm4gdmFsdWUud29yZCA9PSBvcC52YWx1ZS53b3JkOyB9 CiAgICBpbmxpbmUgaTQgaGFzaENvZGUodm9pZCkgY29uc3QgeyByZXR1cm4gdmFsdWUuaXdvcmQ7 IH0KICAgIGlubGluZSBpbnQgY29tcGFyZVRvKGNvbnN0IElFRUVmbG9hdCBvcCkgY29uc3QKICAg IHsKICAgICAgICByZXR1cm4gSXNOYU4oKSA/IDEKICAgICAgICAgICAgICAgICAgICAgICA6IChJ c1plcm8oKSAmJiBvcC5Jc1plcm8oKSkgPyBvcC5TaWduKCkgLSBTaWduKCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoKnRoaXMgPCBvcCkgPyAt MQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6ICp0aGlzID4gb3A7CiAgICB9Cn07CgoKY2xhc3MgSUVFRWRvdWJsZSA6IHB1 YmxpYyBCYXNlTG9uZwoKCgoKCgp7CnByaXZhdGU6CiAgICBmcmllbmQgY2xhc3MgRG91YmxlVG9T dHJpbmc7CgoKCgogICAgZW51bQogICAgewogICAgICAgIEZSQUNUX1NJWkUgPSA1MiwKICAgICAg ICBGUkFDVF9TSVpFX0hJID0gRlJBQ1RfU0laRSAtIDMyLAogICAgICAgIEJJQVMgPSAxMDIzLAog ICAgICAgIE1BWF9ERUNfRVhQID0gMzA4LAogICAgICAgIE1BWF9ESUdJVFMgPSBCSUFTICsgRlJB Q1RfU0laRSArIDEgLSBNQVhfREVDX0VYUAogICAgfTsKICAgIGVudW0KICAgIHsKICAgICAgICBF WFBfQklUUyA9IDB4N0ZGMDAwMDAsCiAgICAgICAgRlJBQ1RfQklUUyA9IDB4MDAwRkZGRkYsCiAg ICAgICAgQUJTX0JJVFMgPSBFWFBfQklUUyB8IEZSQUNUX0JJVFMsCiAgICAgICAgTUFYX0ZSQUNU ID0gMHgwMDIwMDAwMCwKICAgICAgICBNSU5fRlJBQ1QgPSAweDAwMTAwMDAwLAogICAgICAgIE5F R19aRVJPX0hJID0gMHg4MDAwMDAwMCwKICAgICAgICBQT1NfWkVST19ISSA9IDB4MDAwMDAwMDAs CiAgICAgICAgTkVHX0lORl9ISSA9IDB4RkZGMDAwMDAsCiAgICAgICAgUE9TX0lORl9ISSA9IDB4 N0ZGMDAwMDAsCiAgICAgICAgTkFOX0hJID0gMHg3RkY4MDAwMCwKICAgICAgICBaRVJPX0xPID0g MHgwMDAwMDAwMAogICAgfTsKCiAgICBpbmxpbmUgdTQgU2lnbkJpdCh2b2lkKSBjb25zdCB7IHJl dHVybiBIaWdoV29yZCgpICYgU0lHTl9CSVQ7IH0KICAgIGlubGluZSB1NCBFeHBCaXRzKHZvaWQp IGNvbnN0IHsgcmV0dXJuIEhpZ2hXb3JkKCkgJiBFWFBfQklUUzsgfQogICAgaW5saW5lIHU0IEZy YWN0Qml0cyh2b2lkKSBjb25zdCB7IHJldHVybiBIaWdoV29yZCgpICYgRlJBQ1RfQklUUzsgfQoK CgogICAgc3RhdGljIElFRUVkb3VibGUgTm9ybWFsaXplKGludCwgaW50LCBVTG9uZ0ludCk7CgoK ICAgIGludCBTcGxpdEludG8oQmFzZUxvbmcgJmZyYWN0aW9uKSBjb25zdDsKCgogICAgSUVFRWRv dWJsZSBVbHAodm9pZCkgY29uc3Q7CgogICAgc3RhdGljIElFRUVkb3VibGUgUmF0aW8oY29uc3Qg QmlnSW50ICZhLCBjb25zdCBCaWdJbnQgJmIpOwoKCgoKCgoKICAgIHN0YXRpYyBjb25zdCBJRUVF ZG91YmxlIHRlbnNbXTsKICAgIHN0YXRpYyBjb25zdCBJRUVFZG91YmxlIGJpZ3RlbnNbXTsKCgpw dWJsaWM6CgoKCiAgICBpbmxpbmUgaW50IFNpZ24odm9pZCkgY29uc3QgeyByZXR1cm4gSGlnaFdv cmQoKSA+PiAzMTsgfQogICAgaW5saW5lIGludCBFeHBvbmVudCh2b2lkKSBjb25zdCB7IHJldHVy biAoKEhpZ2hXb3JkKCkgJiBFWFBfQklUUykgPj4gKEZSQUNUX1NJWkVfSEkpKSAtIEJJQVM7IH0K ICAgIGlubGluZSBMb25nSW50IEZyYWN0aW9uKHZvaWQpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0 dXJuIExvbmdJbnQoKEhpZ2hXb3JkKCkgJiBGUkFDVF9CSVRTKSB8IChFeHBCaXRzKCkgPyBNSU5f RlJBQ1QgOiAwKSwKICAgICAgICAgICAgICAgICAgICAgICBMb3dXb3JkKCkpOwogICAgfQogICAg c3RhdGljIGlubGluZSBpbnQgQmlhcyh2b2lkKSB7IHJldHVybiBCSUFTOyB9CiAgICBzdGF0aWMg aW5saW5lIGludCBGcmFjdFNpemUodm9pZCkgeyByZXR1cm4gRlJBQ1RfU0laRTsgfQoKICAgIGlu bGluZSBib29sIElzTmFOKHZvaWQpIGNvbnN0CiAgICB7CgogICAgICAgIHU0IGhpZ2ggPSBIaWdo V29yZCgpLAogICAgICAgICAgICBsb3cgPSBMb3dXb3JkKCk7CiAgICAgICAgcmV0dXJuICgoaGln aCAmIEFCU19CSVRTKSB8ICgobG93IHwgLShpNCkgbG93KSA+PiAzMSkpID4gRVhQX0JJVFM7CiAg ICB9CgogICAgaW5saW5lIGJvb2wgSXNOZWdhdGl2ZSh2b2lkKSBjb25zdCB7IHJldHVybiAoKGk0 KSBIaWdoV29yZCgpIDwgMCkgJiYgIUlzTmFOKCk7IH0KICAgIGlubGluZSBib29sIElzUG9zaXRp dmUodm9pZCkgY29uc3QgeyByZXR1cm4gKChpNCkgSGlnaFdvcmQoKSA+PSAwKSAmJiAhSXNOYU4o KTsgfQoKICAgIGlubGluZSBib29sIElzTmVnYXRpdmVaZXJvKHZvaWQpIGNvbnN0CiAgICB7CiAg ICAgICAgcmV0dXJuIChIaWdoV29yZCgpID09IE5FR19aRVJPX0hJKSAmJiAoTG93V29yZCgpID09 IFpFUk9fTE8pOwogICAgfQogICAgaW5saW5lIGJvb2wgSXNQb3NpdGl2ZVplcm8odm9pZCkgY29u c3QKICAgIHsKICAgICAgICByZXR1cm4gKEhpZ2hXb3JkKCkgPT0gUE9TX1pFUk9fSEkpICYmIChM b3dXb3JkKCkgPT0gWkVST19MTyk7CiAgICB9CiAgICBpbmxpbmUgYm9vbCBJc1plcm8odm9pZCkg Y29uc3QKICAgIHsKICAgICAgICByZXR1cm4gKChIaWdoV29yZCgpICYgQUJTX0JJVFMpID09IFBP U19aRVJPX0hJKSAmJiAoTG93V29yZCgpID09IFpFUk9fTE8pOwogICAgfQoKICAgIGlubGluZSBi b29sIElzTmVnYXRpdmVJbmZpbml0eSh2b2lkKSBjb25zdAogICAgewogICAgICAgIHJldHVybiAo SGlnaFdvcmQoKSA9PSBORUdfSU5GX0hJKSAmJiAoTG93V29yZCgpID09IFpFUk9fTE8pOwogICAg fQogICAgaW5saW5lIGJvb2wgSXNQb3NpdGl2ZUluZmluaXR5KHZvaWQpIGNvbnN0CiAgICB7CiAg ICAgICAgcmV0dXJuIChIaWdoV29yZCgpID09IFBPU19JTkZfSEkpICYmIChMb3dXb3JkKCkgPT0g WkVST19MTyk7CiAgICB9CiAgICBpbmxpbmUgYm9vbCBJc0luZmluaXRlKHZvaWQpIGNvbnN0CiAg ICB7CiAgICAgICAgcmV0dXJuICgoSGlnaFdvcmQoKSAmIEFCU19CSVRTKSA9PSBQT1NfSU5GX0hJ KSAmJiAoTG93V29yZCgpID09IFpFUk9fTE8pOwogICAgfQojIDQxNyAiZG91YmxlLmgiCiAgICBz dGF0aWMgaW5saW5lIGNvbnN0IElFRUVkb3VibGUgTmFOKHZvaWQpIHsgcmV0dXJuIElFRUVkb3Vi bGUoTkFOX0hJLCBaRVJPX0xPKTsgfQogICAgc3RhdGljIGlubGluZSBjb25zdCBJRUVFZG91Ymxl IFBPU0lUSVZFX0lORklOSVRZKHZvaWQpIHsgcmV0dXJuIElFRUVkb3VibGUoUE9TX0lORl9ISSwg WkVST19MTyk7IH0KICAgIHN0YXRpYyBpbmxpbmUgY29uc3QgSUVFRWRvdWJsZSBORUdBVElWRV9J TkZJTklUWSh2b2lkKSB7IHJldHVybiBJRUVFZG91YmxlKE5FR19JTkZfSEksIFpFUk9fTE8pOyB9 CiAgICBzdGF0aWMgaW5saW5lIGNvbnN0IElFRUVkb3VibGUgUE9TSVRJVkVfWkVSTyh2b2lkKSB7 IHJldHVybiBJRUVFZG91YmxlKFBPU19aRVJPX0hJLCBaRVJPX0xPKTsgfQogICAgc3RhdGljIGlu bGluZSBjb25zdCBJRUVFZG91YmxlIE5FR0FUSVZFX1pFUk8odm9pZCkgeyByZXR1cm4gSUVFRWRv dWJsZShORUdfWkVST19ISSwgWkVST19MTyk7IH0KCgoKCgoKICAgIGlubGluZSBJRUVFZG91Ymxl KGRvdWJsZSBkKSB7IHZhbHVlLmRvdWJsZV92YWx1ZSA9IGQ7IH0KCiAgICAgICAgICAgSUVFRWRv dWJsZShjb25zdCBjaGFyICosIGJvb2wgY2hlY2tfaW52YWxpZCA9IGZhbHNlKTsKCgogICAgICAg ICAgIElFRUVkb3VibGUoaTQpOwoKICAgICAgICAgICBJRUVFZG91YmxlKGNvbnN0IExvbmdJbnQg Jik7CgogICAgICAgICAgIElFRUVkb3VibGUoY29uc3QgSUVFRWZsb2F0ICYpOwoKICAgIGlubGlu ZSBJRUVFZG91YmxlKHZvaWQpIHt9CgogICAgaW5saW5lIElFRUVkb3VibGUodTQgaGksIHU0IGxv KSB7IHNldEhpZ2hBbmRMb3dXb3JkcyhoaSwgbG8pOyB9CgoKCgogICAgICAgICAgIGk0IEludFZh bHVlKHZvaWQpIGNvbnN0OwogICAgICAgICAgIExvbmdJbnQgTG9uZ1ZhbHVlKHZvaWQpIGNvbnN0 OwogICAgaW5saW5lIElFRUVmbG9hdCBGbG9hdFZhbHVlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIElF RUVmbG9hdCgqdGhpcyk7IH0KCgoKCgoKICAgICAgICAgICBJRUVFZG91YmxlIG9wZXJhdG9yKyAo Y29uc3QgSUVFRWRvdWJsZSkgY29uc3Q7CiAgICBpbmxpbmUgSUVFRWRvdWJsZSBvcGVyYXRvcisg KHZvaWQpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CiAgICBpbmxpbmUgSUVFRWRvdWJsZSAmb3Bl cmF0b3IrPSAoY29uc3QgSUVFRWRvdWJsZSBvcCkgeyByZXR1cm4gKnRoaXMgPSAqdGhpcyArIG9w OyB9CiAgICBpbmxpbmUgSUVFRWRvdWJsZSBvcGVyYXRvcisrICh2b2lkKSB7IHJldHVybiAqdGhp cyArPSAxOyB9CiAgICBpbmxpbmUgSUVFRWRvdWJsZSBvcGVyYXRvcisrIChpbnQgZHVtbXkpCiAg ICB7CiAgICAgICAgSUVFRWRvdWJsZSByZXN1bHQgPSAqdGhpczsKICAgICAgICAqdGhpcyArPSAx OwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgICAgICAgIElFRUVkb3VibGUgb3Bl cmF0b3ItICh2b2lkKSBjb25zdDsKICAgIGlubGluZSBJRUVFZG91YmxlIG9wZXJhdG9yLSAoY29u c3QgSUVFRWRvdWJsZSBvcCkgY29uc3QgeyByZXR1cm4gKnRoaXMgKyAoLW9wKTsgfQogICAgaW5s aW5lIElFRUVkb3VibGUgJm9wZXJhdG9yLT0gKGNvbnN0IElFRUVkb3VibGUgb3ApIHsgcmV0dXJu ICp0aGlzID0gKnRoaXMgLSBvcDsgfQogICAgaW5saW5lIElFRUVkb3VibGUgb3BlcmF0b3ItLSAo dm9pZCkgeyByZXR1cm4gKnRoaXMgLT0gMTsgfQogICAgaW5saW5lIElFRUVkb3VibGUgb3BlcmF0 b3ItLSAoaW50IGR1bW15KQogICAgewogICAgICAgIElFRUVkb3VibGUgcmVzdWx0ID0gKnRoaXM7 CiAgICAgICAgKnRoaXMgLT0gMTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgICAg ICAgICBJRUVFZG91YmxlIG9wZXJhdG9yKiAoY29uc3QgSUVFRWRvdWJsZSkgY29uc3Q7CiAgICBp bmxpbmUgSUVFRWRvdWJsZSAmb3BlcmF0b3IqPSAoY29uc3QgSUVFRWRvdWJsZSBvcCkgeyByZXR1 cm4gKnRoaXMgPSAqdGhpcyAqIG9wOyB9CgogICAgICAgICAgIElFRUVkb3VibGUgb3BlcmF0b3Iv IChjb25zdCBJRUVFZG91YmxlKSBjb25zdDsKICAgIGlubGluZSBJRUVFZG91YmxlICZvcGVyYXRv ci89IChjb25zdCBJRUVFZG91YmxlIG9wKSB7IHJldHVybiAqdGhpcyA9ICp0aGlzIC8gb3A7IH0K CiAgICAgICAgICAgSUVFRWRvdWJsZSBvcGVyYXRvciUgKGNvbnN0IElFRUVkb3VibGUpIGNvbnN0 OwogICAgaW5saW5lIElFRUVkb3VibGUgJm9wZXJhdG9yJT0gKGNvbnN0IElFRUVkb3VibGUgb3Ap IHsgcmV0dXJuICp0aGlzID0gKnRoaXMgJSBvcDsgfQoKCgoKICAgIGJvb2wgb3BlcmF0b3I9PSAo Y29uc3QgSUVFRWRvdWJsZSkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yIT0gKGNvbnN0IElFRUVk b3VibGUpIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IElFRUVkb3VibGUpIGNvbnN0 OwogICAgYm9vbCBvcGVyYXRvcj4gKGNvbnN0IElFRUVkb3VibGUpIGNvbnN0OwogICAgYm9vbCBv cGVyYXRvcjw9IChjb25zdCBJRUVFZG91YmxlKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3I+PSAo Y29uc3QgSUVFRWRvdWJsZSkgY29uc3Q7CiMgNTA1ICJkb3VibGUuaCIKICAgIGlubGluZSBib29s IGVxdWFscyhjb25zdCBJRUVFZG91YmxlIG9wKSBjb25zdCB7IHJldHVybiAoQmFzZUxvbmcpICp0 aGlzID09IChCYXNlTG9uZykgb3A7IH0KICAgIGlubGluZSBpNCBoYXNoQ29kZSh2b2lkKSBjb25z dCB7IHJldHVybiAoKEJhc2VMb25nKSAqdGhpcykuaGFzaENvZGUoKTsgfQogICAgaW5saW5lIGlu dCBjb21wYXJlVG8oY29uc3QgSUVFRWRvdWJsZSBvcCkgY29uc3QKICAgIHsKICAgICAgICByZXR1 cm4gSXNOYU4oKSA/IDEKICAgICAgICAgICAgICAgICAgICAgICA6IChJc1plcm8oKSAmJiBvcC5J c1plcm8oKSkgPyBvcC5TaWduKCkgLSBTaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiAoKnRoaXMgPCBvcCkgPyAtMQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICp0 aGlzID4gb3A7CiAgICB9Cn07CgoKCgoKCmNsYXNzIEJpZ0ludAp7CnB1YmxpYzoKCiAgICBCaWdJ bnQoY29uc3QgSUVFRWZsb2F0ICYsIGludCAmZXhwLCBpbnQgJmJpdGNudCk7CiAgICBCaWdJbnQo Y29uc3QgSUVFRWRvdWJsZSAmLCBpbnQgJmV4cCwgaW50ICZiaXRjbnQpOwoKICAgIGlubGluZSBC aWdJbnQoaW50KTsKCgoKCiAgICBCaWdJbnQoY29uc3QgY2hhciAqLCBpbnQgYmVmb3JlLCBpbnQg dG90YWwsIHU0IHN0YXJ0LCBpbnQgc3RhcnRzaXplKTsKCiAgICBCaWdJbnQgJm9wZXJhdG9yID0o Y29uc3QgQmlnSW50ICYpOwogICAgQmlnSW50KGNvbnN0IEJpZ0ludCAmb3ApIHsgKnRoaXMgPSBv cDsgfQoKICAgIH5CaWdJbnQoKQogICAgewogICAgICAgIGRlbGV0ZSBkYXRhOwogICAgfQoKcHJp dmF0ZToKCiAgICBpbmxpbmUgdm9pZCByZXNpemUoaW50IGspOwoKCiAgICBzdGF0aWMgaW50IGhp MGJpdHModTQgeCk7CgoKICAgIHN0YXRpYyBpbnQgbG8wYml0cyh1NCAmeSk7CgpwdWJsaWM6Cgog ICAgaW5saW5lIGludCBoaTBiaXRzKCkgY29uc3QgeyAoc3RhdGljX2Nhc3Q8dm9pZD4gKChkYXRh KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoImRhdGEiLCAiZG91YmxlLmgiLCA1NTUsIF9fUFJFVFRZ X0ZVTkNUSU9OX18pLCAwKSkpOyByZXR1cm4gaGkwYml0cyhkYXRhW3dkcyAtIDFdKTsgfQoKCiAg ICBpbmxpbmUgYm9vbCBJc1plcm8oKSBjb25zdCB7IChzdGF0aWNfY2FzdDx2b2lkPiAoKGRhdGEp ID8gMCA6IChfX2Fzc2VydF9mYWlsICgiZGF0YSIsICJkb3VibGUuaCIsIDU1OCwgX19QUkVUVFlf RlVOQ1RJT05fXyksIDApKSk7IHJldHVybiAhIChkYXRhWzBdIHx8IHdkcyA+IDEpOyB9CgoKICAg IGlubGluZSBib29sIElzTmVnYXRpdmUoKSBjb25zdCB7IHJldHVybiBuZWc7IH0KCiAgICBpbmxp bmUgdm9pZCBJc05lZ2F0aXZlKGJvb2wgdmFsdWUpIHsgbmVnID0gdmFsdWU7IH0KCgogICAgICAg ICAgIEJpZ0ludCAmb3BlcmF0b3IgKyAoY29uc3QgdW5zaWduZWQgb3ApIGNvbnN0OwogICAgaW5s aW5lIEJpZ0ludCAmb3BlcmF0b3IgKz0gKGNvbnN0IHVuc2lnbmVkIG9wKSB7IHJldHVybiAqdGhp cyA9ICp0aGlzICsgb3A7IH0KICAgIGlubGluZSBCaWdJbnQgJm9wZXJhdG9yICsrICh2b2lkKSB7 IHJldHVybiAqdGhpcyArPSAxOyB9CiAgICAgICAgICAgQmlnSW50ICZvcGVyYXRvciAtIChjb25z dCBCaWdJbnQgJm9wKSBjb25zdDsKICAgICAgICAgICBCaWdJbnQgJm9wZXJhdG9yICogKGNvbnN0 IEJpZ0ludCAmb3ApIGNvbnN0OwogICAgICAgICAgIEJpZ0ludCAmb3BlcmF0b3IgKiAodW5zaWdu ZWQgb3ApIGNvbnN0OwogICAgaW5saW5lIEJpZ0ludCAmb3BlcmF0b3IgKj0gKGNvbnN0IEJpZ0lu dCAmb3ApIHsgcmV0dXJuICp0aGlzID0gKnRoaXMgKiBvcDsgfQogICAgaW5saW5lIEJpZ0ludCAm b3BlcmF0b3IgKj0gKHVuc2lnbmVkIG9wKSB7IHJldHVybiAqdGhpcyA9ICp0aGlzICogb3A7IH0K ICAgICAgICAgICBCaWdJbnQgJm9wZXJhdG9yIDw8ICh1bnNpZ25lZCBvcCkgY29uc3Q7CiAgICBp bmxpbmUgQmlnSW50ICZvcGVyYXRvciA8PD0odW5zaWduZWQgb3ApIHsgcmV0dXJuICp0aGlzID0g KnRoaXMgPDwgb3A7IH0KCgogICAgQmlnSW50ICZtdWx0YWRkKHVuc2lnbmVkIG0sIHVuc2lnbmVk IGEpOwoKICAgIEJpZ0ludCAmcG93NW11bHQodW5zaWduZWQgayk7CgogICAgaW50IGNvbXBhcmVU byhjb25zdCBCaWdJbnQgJmIpIGNvbnN0OwoKICAgIGludCBxdW9yZW0oY29uc3QgQmlnSW50ICZT KTsKCgogICAgSUVFRWZsb2F0IEZsb2F0VmFsdWUoKSBjb25zdDsKICAgIElFRUVkb3VibGUgRG91 YmxlVmFsdWUoKSBjb25zdDsKCnByaXZhdGU6CiAgICBmcmllbmQgY2xhc3MgSUVFRWZsb2F0Owog ICAgZnJpZW5kIGNsYXNzIElFRUVkb3VibGU7CgogICAgaW50IGs7CiAgICBpbnQgbWF4d2RzOwog ICAgYm9vbCBuZWc7CiAgICBpbnQgd2RzOwogICAgdTQgKmRhdGE7CgoKCgoKICAgIHN0YXRpYyBj b25zdCB1NCBmaXZlc1tdOwogICAgc3RhdGljIGNvbnN0IEJpZ0ludCAqYmlnZml2ZXNbXTsKCgp9 OwoKCmlubGluZSBJRUVFZG91YmxlIElFRUVmbG9hdDo6RG91YmxlVmFsdWUoKSBjb25zdAp7CiAg ICByZXR1cm4gSUVFRWRvdWJsZSgqdGhpcyk7Cn0KCmlubGluZSBCaWdJbnQ6OkJpZ0ludChpbnQg aSkgOiBkYXRhKF9fbnVsbCkKewogICAgcmVzaXplKDApOwogICAgZGF0YVswXSA9IGk7CiAgICB3 ZHMgPSAxOwogICAgbmVnID0gaSA8IDA7Cn0KCmlubGluZSB2b2lkIEJpZ0ludDo6cmVzaXplKGlu dCBrKQp7CiAgICBtYXh3ZHMgPSAxIDw8IGs7CiAgICBkZWxldGUgZGF0YTsKICAgIGRhdGEgPSBu ZXcgdTRbbWF4d2RzXTsKICAgIHRoaXMgLT4gayA9IGs7CiAgICB3ZHMgPSAwOwogICAgbmVnID0g ZmFsc2U7Cn0KIyA2MiAiZG91YmxlLmNwcCIgMgojIDg3ICJkb3VibGUuY3BwIgpjb25zdCBJRUVF ZmxvYXQgSUVFRWZsb2F0Ojp0ZW5zW10gPSB7CiAgICAxZTBmLCAxZTFmLCAxZTJmLCAxZTNmLCAx ZTRmLCAxZTVmLCAxZTZmLAogICAgMWU3ZiwgMWU4ZiwgMWU5ZiwgMWUxMGYKfTsKY29uc3QgSUVF RWZsb2F0IElFRUVmbG9hdDo6YmlndGVuc1tdID0gewogICAgMWU4ZiwgMWUxNmYsIDFlMzJmCn07 Cgpjb25zdCBJRUVFZG91YmxlIElFRUVkb3VibGU6OnRlbnNbXSA9IHsKICAgIDFlMCwgMWUxLCAx ZTIsIDFlMywgMWU0LCAxZTUsIDFlNiwgMWU3LAogICAgMWU4LCAxZTksIDFlMTAsIDFlMTEsIDFl MTIsIDFlMTMsIDFlMTQsIDFlMTUsCiAgICAxZTE2LCAxZTE3LCAxZTE4LCAxZTE5LCAxZTIwLCAx ZTIxLCAxZTIyCn07CmNvbnN0IElFRUVkb3VibGUgSUVFRWRvdWJsZTo6YmlndGVuc1tdID0gewog ICAgMWUxNiwgMWUzMiwgMWU2NCwgMWUxMjgsIDFlMjU2Cn07CgoKCklFRUVmbG9hdDo6SUVFRWZs b2F0KGk0IGEpCnsKCgoKICAgIGludCBzaWduID0gMDsKCiAgICBpZiAoYSA8IDApCiAgICB7CiAg ICAgICAgYSA9IC1hOwogICAgICAgIHNpZ24gPSAxOwogICAgfQogICAgaWYgKGEgPT0gMCkKICAg ICAgICAqdGhpcyA9IFBPU0lUSVZFX1pFUk8oKTsKICAgIGVsc2UKICAgICAgICAqdGhpcyA9IE5v cm1hbGl6ZShzaWduLCBGUkFDVF9TSVpFLCAodTQpIGEpOwoKfQoKSUVFRWZsb2F0OjpJRUVFZmxv YXQoY29uc3QgTG9uZ0ludCAmYSkKewojIDEzOSAiZG91YmxlLmNwcCIKICAgIGludCBzaWduID0g MDsKICAgIExvbmdJbnQgbCA9IGE7CgogICAgaWYgKGEgPCAwKQogICAgewogICAgICAgIGwgPSAt YTsKICAgICAgICBzaWduID0gMTsKICAgICAgICBpZiAobCA8IDApCiAgICAgICAgewogICAgICAg ICAgICB2YWx1ZS53b3JkID0gTUlOX0xPTkdfRjsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAg IH0KICAgIH0KICAgIGlmIChsID09IDApCiAgICAgICAgKnRoaXMgPSBQT1NJVElWRV9aRVJPKCk7 CiAgICBlbHNlIGlmIChsLkhpZ2hXb3JkKCkgPT0gMCkKICAgICAgICAqdGhpcyA9IE5vcm1hbGl6 ZShzaWduLCBGUkFDVF9TSVpFLCBsLkxvd1dvcmQoKSk7CiAgICBlbHNlCiAgICB7CiAgICAgICAg aW50IGV4cG9uZW50ID0gRlJBQ1RfU0laRSwgcm91bmQgPSAwOwogICAgICAgIHdoaWxlIChsLkhp Z2hXb3JkKCkpCiAgICAgICAgewogICAgICAgICAgICByb3VuZCB8PSAobC5Mb3dXb3JkKCkgJiBC WVRFX01BU0spID8gMSA6IDA7CiAgICAgICAgICAgIGwgPj49IDg7CiAgICAgICAgICAgIGV4cG9u ZW50ICs9IDg7CiAgICAgICAgfQogICAgICAgICp0aGlzID0gTm9ybWFsaXplKHNpZ24sIGV4cG9u ZW50LCBsLkxvd1dvcmQoKSB8IHJvdW5kKTsKICAgIH0KCn0KCklFRUVmbG9hdDo6SUVFRWZsb2F0 KGNvbnN0IElFRUVkb3VibGUgJmQpCnsKCgoKCiAgICBpZiAoZC5FeHBvbmVudCgpIDwgLUJJQVMg LSAzMCkKICAgICAgICAqdGhpcyA9IChkLklzUG9zaXRpdmUoKSA/IFBPU0lUSVZFX1pFUk8oKSA6 IE5FR0FUSVZFX1pFUk8oKSk7CiAgICBlbHNlCiAgICB7CiAgICAgICAgaWYgKGQuSXNQb3NpdGl2 ZUluZmluaXR5KCkpCiAgICAgICAgICAgICp0aGlzID0gUE9TSVRJVkVfSU5GSU5JVFkoKTsKICAg ICAgICBlbHNlIGlmIChkLklzTmVnYXRpdmVJbmZpbml0eSgpKQogICAgICAgICAgICAqdGhpcyA9 IE5FR0FUSVZFX0lORklOSVRZKCk7CiAgICAgICAgZWxzZSBpZiAoZC5Jc05hTigpKQogICAgICAg ICAgICAqdGhpcyA9IE5hTigpOwogICAgICAgIGVsc2UKICAgICAgICB7CgoKCgogICAgICAgICAg ICBMb25nSW50IGZyYWN0ID0gZC5GcmFjdGlvbigpIDw8IDU7CiAgICAgICAgICAgIHU0IGZyYWN0 aW9uID0gZnJhY3QuSGlnaFdvcmQoKSB8IChmcmFjdC5Mb3dXb3JkKCkgPyAweDAyMDAwMDAxCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOiAweDAyMDAwMDAwKTsKCiAgICAgICAgICAgICp0aGlzID0gTm9ybWFsaXplKGQuU2lnbigp LCBkLkV4cG9uZW50KCkgLSAyLCBmcmFjdGlvbik7CiAgICAgICAgfQogICAgfQoKfQoKYm9vbCBJ RUVFZmxvYXQ6OkFkanVzdChjb25zdCBCaWdJbnQgJmRlbHRhLCBjb25zdCBCaWdJbnQgJmJzLCBj b25zdCBib29sIGRzaWduKQp7CiAgICBJRUVFZmxvYXQgYWFkaiwgYWFkajE7CiAgICBpNCB5OwoK ICAgIGFhZGogPSBSYXRpbyhkZWx0YSwgYnMpOwogICAgaWYgKGFhZGogPD0gMikKICAgIHsKICAg ICAgICBpZiAoZHNpZ24pCiAgICAgICAgICAgIGFhZGogPSBhYWRqMSA9IDE7CiAgICAgICAgZWxz ZSBpZiAoRnJhY3RCaXRzKCkpCiAgICAgICAgewogICAgICAgICAgICBpZiAodmFsdWUud29yZCA9 PSAxKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgKnRoaXMgPSBQT1NJVElWRV9aRVJP KCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAg ICBhYWRqID0gMTsKICAgICAgICAgICAgYWFkajEgPSAtMTsKICAgICAgICB9CiAgICAgICAgZWxz ZQogICAgICAgIHsKCgoKICAgICAgICAgICAgaWYgKGFhZGogPCAxLjBmKQogICAgICAgICAgICAg ICAgYWFkaiA9IDAuNWY7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGFhZGogKj0g MC41ZjsKICAgICAgICAgICAgYWFkajEgPSAtYWFkajsKICAgICAgICB9CiAgICB9CiAgICBlbHNl CiAgICB7CiAgICAgICAgYWFkaiAqPSAwLjVmOwogICAgICAgIGFhZGoxID0gZHNpZ24gPyBhYWRq IDogLWFhZGo7CiAgICB9CiAgICB5ID0gRXhwb25lbnQoKTsKCgoKICAgIGlmICh5ID09IEJJQVMp CiAgICB7CiAgICAgICAgSUVFRWZsb2F0IHRtcCgqdGhpcyk7CiAgICAgICAgdmFsdWUud29yZCAt PSAoRlJBQ1RfU0laRSArIDEpICogTUlOX0ZSQUNUOwogICAgICAgICp0aGlzICs9IGFhZGoxICog VWxwKCk7CiAgICAgICAgaWYgKEV4cG9uZW50KCkgPj0gQklBUyAtIEZSQUNUX1NJWkUpCiAgICAg ICAgewogICAgICAgICAgICBpZiAodG1wLnZhbHVlLndvcmQgPT0gUE9TX0lORiAtIDEpCiAgICAg ICAgICAgIHsKCiAgICAgICAgICAgICAgICAqdGhpcyA9IFBPU0lUSVZFX0lORklOSVRZKCk7CiAg ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YWx1 ZS53b3JkID0gUE9TX0lORiAtIDE7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9 CiAgICAgICAgZWxzZQogICAgICAgICAgICB2YWx1ZS53b3JkICs9IChGUkFDVF9TSVpFICsgMSkg KiBNSU5fRlJBQ1Q7CiAgICB9CiAgICBlbHNlCiAgICB7CgoKCgoKCiAgICAgICAgaWYgKHkgPD0g RlJBQ1RfU0laRSAtIEJJQVMgfHwgYWFkaiA+IDEpCiAgICAgICAgewogICAgICAgICAgICBhYWRq MSA9IElFRUVmbG9hdCgoYWFkaiArIDAuNWYpLkludFZhbHVlKCkpOwogICAgICAgICAgICBpZiAo ISBkc2lnbikKICAgICAgICAgICAgICAgIGFhZGoxID0gLWFhZGoxOwogICAgICAgIH0KICAgICAg ICAqdGhpcyArPSBhYWRqMSAqIFVscCgpOwogICAgfQogICAgaWYgKHkgPT0gRXhwb25lbnQoKSkK ICAgIHsKCgoKCiAgICAgICAgYWFkaiAtPSBhYWRqLkludFZhbHVlKCk7CiAgICAgICAgaWYgKGRz aWduIHx8IEZyYWN0Qml0cygpKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGFhZGogPCAuNDk5 OTk5OWYgfHwgYWFkaiA+IC41MDAwMDAxZikKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog ICAgICAgIH0KICAgICAgICBlbHNlIGlmIChhYWRqIDwgLjQ5OTk5OTlmIC8gMikKICAgICAgICAg ICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KCklFRUVmbG9hdDo6SUVF RWZsb2F0KGNvbnN0IGNoYXIgKnN0ciwgYm9vbCBjaGVja19pbnZhbGlkKQp7CiAgICBpbnQgYmIy LCBiYjUsIGJiZSwgYmQyLCBiZDUsIGJiYml0cywgYnMyLAogICAgICAgIGUsIGUxLCBpLCBqLCBr OwogICAgaW50IG5kLAogICAgICAgIG5kMCwKICAgICAgICBuZiwKICAgICAgICBuejsKICAgIGJv b2wgbnowLAogICAgICAgICByb3VuZHVwLAogICAgICAgICBzaWduLAogICAgICAgICBkc2lnbiwK ICAgICAgICAgZXNpZ247CiAgICBjaGFyIGM7CiAgICBjb25zdCBjaGFyICpzLCAqczAsICpzMTsK ICAgIGk0IEw7CiAgICBpNCB5LCB6OwoKICAgIHNpZ24gPSBuejAgPSByb3VuZHVwID0gZmFsc2U7 CiAgICBueiA9IDA7CgoKCgogICAgZm9yIChzID0gc3RyOyA7IHMrKykKICAgICAgICBzd2l0Y2gg KCpzKQogICAgICAgIHsKICAgICAgICBjYXNlIFVfTUlOVVM6CiAgICAgICAgICAgIHNpZ24gPSB0 cnVlOwoKICAgICAgICBjYXNlIFVfUExVUzoKICAgICAgICAgICAgaWYgKCorK3MpCiAgICAgICAg ICAgICAgICBnb3RvIGJyZWFrMjsKCiAgICAgICAgY2FzZSBVX05VOgogICAgICAgICAgICAqdGhp cyA9IE5hTigpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgY2FzZSBVX1NQOgogICAgICAg IGNhc2UgVV9IVDoKICAgICAgICBjYXNlIFVfRkY6CiAgICAgICAgY2FzZSBVX0xGOgogICAgICAg IGNhc2UgVV9DUjoKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgZGVmYXVsdDoKICAgICAg ICAgICAgZ290byBicmVhazI7CiAgICAgICAgfQogYnJlYWsyOgoKCgogICAgaWYgKCpzID09IFVf MCkKICAgIHsKICAgICAgICBuejAgPSB0cnVlOwogICAgICAgIHdoaWxlICgqKytzID09IFVfMCk7 CgogICAgICAgIGlmICghICpzKQogICAgICAgIHsKICAgICAgICAgICAgKnRoaXMgPSBzaWduID8g TkVHQVRJVkVfWkVSTygpIDogUE9TSVRJVkVfWkVSTygpOwogICAgICAgICAgICByZXR1cm47CiAg ICAgICAgfQogICAgfQoKCgoKICAgIHMwID0gczsKICAgIHkgPSB6ID0gMDsKICAgIGZvciAobmQg PSBuZiA9IDA7IChjID0gKnMpID49IFVfMCAmJiBjIDw9IFVfOTsgbmQrKywgcysrKQogICAgICAg IGlmIChuZCA8IDgpCiAgICAgICAgICAgIHkgPSAxMCAqIHkgKyBjIC0gVV8wOwogICAgbmQwID0g bmQ7CiAgICBpZiAoYyA9PSBVX0RPVCkKICAgIHsKCgoKICAgICAgICBjID0gKisrczsKICAgICAg ICBpZiAoIW5kKQogICAgICAgIHsKICAgICAgICAgICAgZm9yICggOyBjID09IFVfMDsgYyA9ICor K3MpCiAgICAgICAgICAgICAgICBueisrOwogICAgICAgICAgICBpZiAoYyA+IFVfMCAmJiBjIDw9 IFVfOSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgczAgPSBzOwogICAgICAgICAgICAg ICAgbmYgKz0gbno7CiAgICAgICAgICAgICAgICBueiA9IDA7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgICAgZm9yICggOyBjID49IFVfMCAmJiBjIDw9IFVfOTsgYyA9ICorK3MpCiAgICAg ICAgewogICAgICAgICAgICBueisrOwogICAgICAgICAgICBpZiAoYyAtPSBVXzApCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgIG5mICs9IG56OwogICAgICAgICAgICAgICAgZm9yIChpID0g MTsgaSA8IG56OyBpKyspCiAgICAgICAgICAgICAgICAgICAgaWYgKG5kKysgPCA4KQogICAgICAg ICAgICAgICAgICAgICAgICB5ICo9IDEwOwogICAgICAgICAgICAgICAgaWYgKG5kKysgPCA4KQog ICAgICAgICAgICAgICAgICAgIHkgPSAxMCAqIHkgKyBjOwogICAgICAgICAgICAgICAgbnogPSAw OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKCgogICAgZSA9IDA7CiAgICBpZiAoYyA9 PSBVX2UgfHwgYyA9PSBVX0UpIHsKICAgICAgICBzdHIgPSBzOwogICAgICAgIGVzaWduID0gZmFs c2U7CiAgICAgICAgc3dpdGNoIChjID0gKisrcykKICAgICAgICB7CiAgICAgICAgY2FzZSBVX01J TlVTOgogICAgICAgICAgICBlc2lnbiA9IHRydWU7CgogICAgICAgIGNhc2UgVV9QTFVTOgogICAg ICAgICAgICBjID0gKisrczsKICAgICAgICB9CiAgICAgICAgaWYgKGMgPj0gVV8wICYmIGMgPD0g VV85KQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCFuZCAmJiAhbnogJiYgIW56MCkKICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgKnRoaXMgPSBzaWduID8gTkVHQVRJVkVfWkVSTygpIDog UE9TSVRJVkVfWkVSTygpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAg ICAgICAgICAgIHdoaWxlIChjID09IFVfMCkKICAgICAgICAgICAgICAgIGMgPSAqKytzOwogICAg ICAgICAgICBpZiAoYyA+IFVfMCAmJiBjIDw9IFVfOSkKICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgTCA9IGMgLSBVXzA7CiAgICAgICAgICAgICAgICBzMSA9IHM7CiAgICAgICAgICAgICAg ICB3aGlsZSAoKGMgPSAqKytzKSA+PSBVXzAgJiYgYyA8PSBVXzkpCiAgICAgICAgICAgICAgICAg ICAgTCA9IDEwICogTCArIGMgLSBVXzA7CgoKCiAgICAgICAgICAgICAgICBpZiAocyAtIHMxID4g OCB8fCBMID4gMTk5OTkpCiAgICAgICAgICAgICAgICAgICAgZSA9IDE5OTk5OwogICAgICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGUgPSBMOwogICAgICAgICAgICAgICAgaWYg KGVzaWduKQogICAgICAgICAgICAgICAgICAgIGUgPSAtZTsKICAgICAgICAgICAgfQogICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICBlID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZQog ICAgICAgICAgICBzID0gc3RyOwogICAgfQogICAgaWYgKCFuZCkgewogICAgICAgICp0aGlzID0g KCFueiAmJiAhbnowKSA/IE5hTigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2ln biA/IE5FR0FUSVZFX1pFUk8oKSA6IFBPU0lUSVZFX1pFUk8oKTsKICAgICAgICByZXR1cm47CiAg ICB9CgoKCgoKCiAgICBpZiAobmQgPiBNQVhfRElHSVRTKQogICAgewogICAgICAgIGsgPSBuZCAt IE1BWF9ESUdJVFM7CiAgICAgICAgaSA9IE1BWF9ESUdJVFMgLSBuZDA7CiAgICAgICAgaWYgKGkg PD0gMCkKICAgICAgICB7CgogICAgICAgICAgICBuZDAgPSBNQVhfRElHSVRTOwogICAgICAgICAg ICBuZiA9IGk7CiAgICAgICAgICAgIGogPSAwOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChp ID09IE1BWF9ESUdJVFMpCiAgICAgICAgewoKICAgICAgICAgICAgbmYgLT0gazsKICAgICAgICAg ICAgaiA9IDA7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgICBu ZiAtPSBrOwogICAgICAgICAgICBqID0gMTsKICAgICAgICB9CiAgICAgICAgcm91bmR1cCA9IHMw W01BWF9ESUdJVFMgLSAxICsgal0gIT0gVV80OwogICAgICAgIG5kID0gTUFYX0RJR0lUUzsKICAg IH0KICAgIGUxID0gZSAtPSBuZjsKCgoKCgoKICAgIGlmICghIG5kMCkKICAgICAgICBuZDAgPSBu ZDsKICAgIGsgPSBuZCA8IDggPyBuZCA6IDg7CiAgICAqdGhpcyA9IElFRUVmbG9hdCh5KTsKICAg IGlmIChuZCA8IDgpCiAgICB7CiAgICAgICAgaWYgKCFlKQogICAgICAgIHsKICAgICAgICAgICAg aWYgKHNpZ24pCiAgICAgICAgICAgICAgICAqdGhpcyA9IC0qdGhpczsKICAgICAgICAgICAgcmV0 dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoZSA+IDApCiAgICAgICAgewogICAgICAgICAgICBp ZiAoZSA8PSAxMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKnRoaXMgKj0gdGVuc1tl XTsKICAgICAgICAgICAgICAgIGlmIChzaWduKQogICAgICAgICAgICAgICAgICAgICp0aGlzID0g LSp0aGlzOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAg IGkgPSA3IC0gbmQ7CiAgICAgICAgICAgIGlmIChlIDw9IDEwICsgaSkKICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgZSAtPSBpOwogICAgICAgICAgICAgICAgKnRoaXMgKj0gdGVuc1tpXTsK ICAgICAgICAgICAgICAgICp0aGlzICo9IHRlbnNbZV07CiAgICAgICAgICAgICAgICBpZiAoc2ln bikKICAgICAgICAgICAgICAgICAgICAqdGhpcyA9IC0qdGhpczsKICAgICAgICAgICAgICAgIHJl dHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChlID49IC0xMCAp CiAgICAgICAgewogICAgICAgICAgICAqdGhpcyAvPSB0ZW5zWy1lXTsKICAgICAgICAgICAgaWYg KHNpZ24pCiAgICAgICAgICAgICAgICAqdGhpcyA9IC0qdGhpczsKICAgICAgICAgICAgcmV0dXJu OwogICAgICAgIH0KICAgIH0KICAgIGUxICs9IG5kIC0gazsKCgoKCiAgICBpZiAoZTEgPiAwKQog ICAgewogICAgICAgIGkgPSBlMSAmIDc7CiAgICAgICAgaWYgKGkpCiAgICAgICAgICAgICp0aGlz ICo9IHRlbnNbaV07CiAgICAgICAgaWYgKGUxID4+PSAzKQogICAgICAgIHsKICAgICAgICAgICAg aWYgKGUxID4gTUFYX0RFQ19FWFAgPj4gMykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg KnRoaXMgPSBjaGVja19pbnZhbGlkID8gTmFOKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6IHNpZ24gPyBORUdBVElWRV9JTkZJTklUWSgpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogUE9TSVRJVkVfSU5GSU5JVFkoKTsKICAgICAg ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKGogPSAwOyBl MSA+IDE7IGorKywgZTEgPj49IDEpCiAgICAgICAgICAgICAgICBpZiAoZTEgJiAxKQogICAgICAg ICAgICAgICAgICAgICp0aGlzICo9IGJpZ3RlbnNbal07CgoKCiAgICAgICAgICAgIHZhbHVlLndv cmQgLT0gKEZSQUNUX1NJWkUgKyAxKSAqIE1JTl9GUkFDVDsKICAgICAgICAgICAgKnRoaXMgKj0g YmlndGVuc1tqXTsKICAgICAgICAgICAgeiA9IEV4cG9uZW50KCk7CiAgICAgICAgICAgIGlmICh6 ID4gQklBUyAtIEZSQUNUX1NJWkUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICp0aGlz ID0gY2hlY2tfaW52YWxpZCA/IE5hTigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOiBzaWduID8gTkVHQVRJVkVfSU5GSU5JVFkoKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6IFBPU0lUSVZFX0lORklOSVRZKCk7CiAgICAgICAgICAg ICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHogPiBCSUFTIC0gRlJB Q1RfU0laRSAtIDEpCiAgICAgICAgICAgICAgICB2YWx1ZS53b3JkID0gUE9TX0lORiAtIDE7CiAg ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHZhbHVlLndvcmQgKz0gKEZSQUNUX1NJWkUg KyAxKSAqIE1JTl9GUkFDVDsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChlMSA8IDApCiAg ICB7CiAgICAgICAgZTEgPSAtZTE7CiAgICAgICAgaSA9IGUxICYgNzsKICAgICAgICBpZiAoaSkK ICAgICAgICAgICAgKnRoaXMgLz0gdGVuc1tpXTsKICAgICAgICBpZiAoZTEgPj49IDMpCiAgICAg ICAgewogICAgICAgICAgICBpZiAoZTEgPj0gMSA8PCAzKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAqdGhpcyA9IGNoZWNrX2ludmFsaWQgPyBOYU4oKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDogc2lnbiA/IE5FR0FUSVZFX1pFUk8oKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFBPU0lUSVZFX1pFUk8oKTsKICAgICAg ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKGogPSAwOyBl MSA+IDE7IGorKywgZTEgPj49IDEpCiAgICAgICAgICAgICAgICBpZiAoZTEgJiAxKQogICAgICAg ICAgICAgICAgICAgICp0aGlzIC89IGJpZ3RlbnNbal07CgoKCiAgICAgICAgICAgIElFRUVmbG9h dCB0bXAoKnRoaXMpOwogICAgICAgICAgICAqdGhpcyAvPSBiaWd0ZW5zW2pdOwogICAgICAgICAg ICBpZiAoSXNaZXJvKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICp0aGlzID0gdG1w ICogMjsKICAgICAgICAgICAgICAgICp0aGlzIC89IGJpZ3RlbnNbal07CiAgICAgICAgICAgICAg ICBpZiAoSXNaZXJvKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKnRo aXMgPSBjaGVja19pbnZhbGlkID8gTmFOKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiBzaWduID8gTkVHQVRJVkVfWkVSTygpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFBPU0lUSVZFX1pFUk8oKTsKICAgICAgICAg ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YWx1 ZS53b3JkID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCgoKCgogICAgQmlnSW50 IGJkMChzMCwgbmQwLCBuZCwgeSwgOCk7CiAgICBpZiAocm91bmR1cCkKICAgICAgICArK2JkMDsK ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgQmlnSW50IGJkKGJkMCk7CiAgICAgICAgQmlnSW50 IGJiKCp0aGlzLCBiYmUsIGJiYml0cyk7CiAgICAgICAgQmlnSW50IGJzKDEpOwogICAgICAgIGlm IChlID49IDApCiAgICAgICAgewogICAgICAgICAgICBiYjIgPSBiYjUgPSAwOwogICAgICAgICAg ICBiZDIgPSBiZDUgPSBlOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAg ICAgICBiYjIgPSBiYjUgPSAtZTsKICAgICAgICAgICAgYmQyID0gYmQ1ID0gMDsKICAgICAgICB9 CiAgICAgICAgaWYgKGJiZSA+PSAwKQogICAgICAgICAgICBiYjIgKz0gYmJlOwogICAgICAgIGVs c2UKICAgICAgICAgICAgYmQyIC09IGJiZTsKICAgICAgICBiczIgPSBiYjI7CiAgICAgICAgaiA9 IGJiZTsKICAgICAgICBpID0gaiArIGJiYml0cyAtIDE7CiAgICAgICAgaWYgKGkgPCAxIC0gQklB UykKICAgICAgICAgICAgaiArPSBCSUFTICsgRlJBQ1RfU0laRTsKICAgICAgICBlbHNlCiAgICAg ICAgICAgIGogPSBGUkFDVF9TSVpFICsgMiAtIGJiYml0czsKICAgICAgICBiYjIgKz0gajsKICAg ICAgICBiZDIgKz0gajsKICAgICAgICBpID0gYmIyIDwgYmQyID8gYmIyIDogYmQyOwogICAgICAg IGlmIChpID4gYnMyKQogICAgICAgICAgICBpID0gYnMyOwogICAgICAgIGlmIChpID4gMCkKICAg ICAgICB7CiAgICAgICAgICAgIGJiMiAtPSBpOwogICAgICAgICAgICBiZDIgLT0gaTsKICAgICAg ICAgICAgYnMyIC09IGk7CiAgICAgICAgfQogICAgICAgIGlmIChiYjUgPiAwKSB7CiAgICAgICAg ICAgIGJzLnBvdzVtdWx0KGJiNSk7CiAgICAgICAgICAgIGJiICo9IGJzOwogICAgICAgIH0KICAg ICAgICBpZiAoYmIyID4gMCkKICAgICAgICAgICAgYmIgPDw9IGJiMjsKICAgICAgICBpZiAoYmQ1 ID4gMCkKICAgICAgICAgICAgYmQucG93NW11bHQoYmQ1KTsKICAgICAgICBpZiAoYmQyID4gMCkK ICAgICAgICAgICAgYmQgPDw9IGJkMjsKICAgICAgICBpZiAoYnMyID4gMCkKICAgICAgICAgICAg YnMgPDw9IGJzMjsKICAgICAgICBCaWdJbnQgZGVsdGEgPSBiYiAtIGJkOwogICAgICAgIGRzaWdu ID0gZGVsdGEuSXNOZWdhdGl2ZSgpOwogICAgICAgIGlmIChkc2lnbikKICAgICAgICAgICAgZGVs dGEuSXNOZWdhdGl2ZShmYWxzZSk7CiAgICAgICAgaSA9IGRlbHRhLmNvbXBhcmVUbyhicyk7CgoK CgogICAgICAgIGlmIChpIDwgMCkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChkc2lnbiB8fCBG cmFjdEJpdHMoKSB8fCBFeHBvbmVudCgpIDw9IDEgLSBCSUFTCiAgICAgICAgICAgICAgICB8fCBk ZWx0YS5Jc1plcm8oKSkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWx0YSA8 PD0gMTsKICAgICAgICAgICAgaWYgKGRlbHRhLmNvbXBhcmVUbyhicykgPiAwKQoKICAgICAgICAg ICAgICAgIHZhbHVlLndvcmQtLTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKCgogICAg ICAgIGVsc2UgaWYgKGkgPT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIGlmICh2YWx1ZS53b3Jk ICYgMSkKICAgICAgICAgICAgICAgIHZhbHVlLndvcmQgKz0gZHNpZ24gPyAxIDogLTE7CiAgICAg ICAgICAgIGJyZWFrOwogICAgICAgIH0KCgoKCgoKICAgICAgICBpZiAoQWRqdXN0KGRlbHRhLCBi cywgZHNpZ24pKQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIGlmIChjaGVja19pbnZhbGlk ICYmIChJc1plcm8oKSB8fCBJc0luZmluaXRlKCkpKQogICAgICAgICp0aGlzID0gTmFOKCk7CiAg ICBlbHNlIGlmIChzaWduKQogICAgICAgICp0aGlzID0gLSp0aGlzOwp9CgppNCBJRUVFZmxvYXQ6 OkludFZhbHVlKCkgY29uc3QKewogICAgaWYgKElzTmFOKCkpCiAgICAgICAgcmV0dXJuIDA7Cgog ICAgaW50IHNpZ24gPSBTaWduKCksCiAgICAgICAgZXhwb25lbnQgPSBFeHBvbmVudCgpOwoKICAg IGlmIChJc0luZmluaXRlKCkpCiAgICAgICAgcmV0dXJuIHNpZ24gPyBNSU5fSU5UIDogTUFYX0lO VDsKCgogICAgaWYgKGV4cG9uZW50IDwgMCkKICAgICAgICByZXR1cm4gMDsKCiAgICBpNCByZXN1 bHQgPSBGcmFjdGlvbigpOwoKICAgIGlmIChleHBvbmVudCA+IEZSQUNUX1NJWkUpCiAgICAgICAg cmVzdWx0IDw8PSAoZXhwb25lbnQgLSBGUkFDVF9TSVpFKTsKICAgIGVsc2UgaWYgKGV4cG9uZW50 IDwgRlJBQ1RfU0laRSkKICAgICAgICByZXN1bHQgPj49IChGUkFDVF9TSVpFIC0gZXhwb25lbnQp OwoKICAgIHJldHVybiBzaWduID8gLXJlc3VsdCA6IHJlc3VsdDsKfQoKTG9uZ0ludCBJRUVFZmxv YXQ6OkxvbmdWYWx1ZSgpIGNvbnN0CnsKICAgIGlmIChJc05hTigpKQogICAgICAgIHJldHVybiBM b25nSW50KDApOwoKICAgIGludCBzaWduID0gU2lnbigpLAogICAgICAgIGV4cG9uZW50ID0gRXhw b25lbnQoKTsKCiAgICBpZiAoSXNJbmZpbml0ZSgpKQogICAgICAgIHJldHVybiBzaWduID8gTG9u Z0ludDo6TUlOX0xPTkcoKSA6IExvbmdJbnQ6Ok1BWF9MT05HKCk7CgoKICAgIGlmIChleHBvbmVu dCA8IDApCiAgICAgICAgcmV0dXJuIExvbmdJbnQoMCk7CgogICAgTG9uZ0ludCByZXN1bHQoRnJh Y3Rpb24oKSk7CgogICAgaWYgKGV4cG9uZW50ID4gRlJBQ1RfU0laRSkKICAgICAgICByZXN1bHQg PDw9IChleHBvbmVudCAtIEZSQUNUX1NJWkUpOwogICAgZWxzZSBpZiAoZXhwb25lbnQgPCBGUkFD VF9TSVpFKQogICAgICAgIHJlc3VsdCA+Pj0gKEZSQUNUX1NJWkUgLSBleHBvbmVudCk7CgogICAg cmV0dXJuIHNpZ24gPyAoTG9uZ0ludCkgLXJlc3VsdCA6IHJlc3VsdDsKfQoKSUVFRWZsb2F0IElF RUVmbG9hdDo6Tm9ybWFsaXplKGludCBzaWduLCBpbnQgZXhwb25lbnQsIHU0IGZyYWN0aW9uKQp7 CiAgICBib29sIHJvdW5kID0gZmFsc2UsIHN0aWNreSA9IGZhbHNlOwoKICAgIChzdGF0aWNfY2Fz dDx2b2lkPiAoKGZyYWN0aW9uKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoImZyYWN0aW9uIiwgImRv dWJsZS5jcHAiLCA3NjMsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKCgoKICAgIGlmIChm cmFjdGlvbiA+PSBNQVhfRlJBQ1QpCiAgICB7CiAgICAgICAgd2hpbGUgKGZyYWN0aW9uID49IE1B WF9GUkFDVCkKICAgICAgICB7CiAgICAgICAgICAgIHN0aWNreSB8PSByb3VuZDsKICAgICAgICAg ICAgcm91bmQgPSAoZnJhY3Rpb24gJiAxKSAhPSAwOwogICAgICAgICAgICBmcmFjdGlvbiA+Pj0g MTsKICAgICAgICAgICAgZXhwb25lbnQrKzsKICAgICAgICB9CiAgICAgICAgaWYgKHJvdW5kICYm IChzdGlja3kgfHwgKGZyYWN0aW9uICYgMSkpICYmIGV4cG9uZW50ID4gLUJJQVMpCgoKCgoKICAg ICAgICAgICAgaWYgKCsrZnJhY3Rpb24gPj0gTUFYX0ZSQUNUKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICBmcmFjdGlvbiA+Pj0gMTsKICAgICAgICAgICAgICAgIGV4cG9uZW50Kys7CiAg ICAgICAgICAgIH0KICAgIH0KCgoKCiAgICBlbHNlCiAgICAgICAgd2hpbGUgKGZyYWN0aW9uIDwg TUlOX0ZSQUNUKQogICAgICAgIHsKICAgICAgICAgICAgZnJhY3Rpb24gPDw9IDE7CiAgICAgICAg ICAgIGV4cG9uZW50LS07CiAgICAgICAgfQoKCgoKICAgIGlmIChleHBvbmVudCA+IEJJQVMpCiAg ICAgICAgcmV0dXJuIHNpZ24gPyBORUdBVElWRV9JTkZJTklUWSgpIDogUE9TSVRJVkVfSU5GSU5J VFkoKTsKCgoKCiAgICBpZiAoZXhwb25lbnQgPD0gLUJJQVMpCiAgICB7CiAgICAgICAgd2hpbGUg KGV4cG9uZW50IDw9IC1CSUFTKQogICAgICAgIHsKICAgICAgICAgICAgc3RpY2t5IHw9IHJvdW5k OwogICAgICAgICAgICByb3VuZCA9IChmcmFjdGlvbiAmIDEpICE9IDA7CiAgICAgICAgICAgIGZy YWN0aW9uID4+PSAxOwogICAgICAgICAgICBleHBvbmVudCsrOwogICAgICAgIH0KCiAgICAgICAg aWYgKHJvdW5kICYmIChzdGlja3kgfHwgKGZyYWN0aW9uICYgMSkpKQogICAgICAgICAgICBmcmFj dGlvbisrOwoKICAgICAgICBleHBvbmVudCA9IC1CSUFTOwoKICAgICAgICBpZiAoZnJhY3Rpb24g PT0gMCkKICAgICAgICAgICAgcmV0dXJuIHNpZ24gPyBORUdBVElWRV9aRVJPKCkgOiBQT1NJVElW RV9aRVJPKCk7CiAgICB9CgogICAgZnJhY3Rpb24gJj0gRlJBQ1RfQklUUzsKICAgIGZyYWN0aW9u IHw9ICgoZXhwb25lbnQgKyBCSUFTKSA8PCBGUkFDVF9TSVpFKTsKICAgIGlmIChzaWduKQogICAg ICAgIGZyYWN0aW9uIHw9IFNJR05fQklUOwogICAgcmV0dXJuIElFRUVmbG9hdChmcmFjdGlvbik7 Cn0KCmludCBJRUVFZmxvYXQ6OlNwbGl0SW50byh1NCAmZnJhY3Rpb24pIGNvbnN0CnsKICAgIGlu dCBleHBvbmVudCA9IEV4cG9uZW50KCk7CiAgICBmcmFjdGlvbiA9IEZyYWN0aW9uKCk7CgogICAg aWYgKGV4cG9uZW50ID09IC1CSUFTKQogICAgewogICAgICAgIGV4cG9uZW50Kys7CiAgICAgICAg d2hpbGUgKGZyYWN0aW9uIDwgTUlOX0ZSQUNUKQogICAgICAgIHsKICAgICAgICAgICAgZnJhY3Rp b24gPDw9IDE7CiAgICAgICAgICAgIGV4cG9uZW50LS07CiAgICAgICAgfQogICAgfQoKICAgIHJl dHVybiBleHBvbmVudDsKfQoKSUVFRWZsb2F0IElFRUVmbG9hdDo6VWxwKCkgY29uc3QKewogICAg aTQgTDsKICAgIElFRUVmbG9hdCBmOwogICAgZi52YWx1ZS5mbG9hdF92YWx1ZSA9IHZhbHVlLmZs b2F0X3ZhbHVlOwoKICAgIEwgPSAoaTQpIGYuRXhwQml0cygpIC0gRlJBQ1RfU0laRSAqIE1JTl9G UkFDVDsKICAgIGlmIChMID4gMCkKICAgICAgICBmLnZhbHVlLml3b3JkID0gTDsKICAgIGVsc2UK ICAgIHsKICAgICAgICBMID0gLUwgPj4gRlJBQ1RfU0laRTsKICAgICAgICBmLnZhbHVlLml3b3Jk ID0gTCA+PSAoaTQpIEZSQUNUX1NJWkUgPyAxIDogMHg0MDAwMDAgPj4gTDsKICAgIH0KICAgIHJl dHVybiBmOwp9CgpJRUVFZmxvYXQgSUVFRWZsb2F0OjpSYXRpbyhjb25zdCBCaWdJbnQgJmEsIGNv bnN0IEJpZ0ludCAmYikKewogICAgSUVFRWZsb2F0IGZhLCBmYjsKICAgIGludCBrOwogICAgZmEg PSBhLkZsb2F0VmFsdWUoKTsKICAgIGZiID0gYi5GbG9hdFZhbHVlKCk7CiAgICBrID0gYi5oaTBi aXRzKCkgLSBhLmhpMGJpdHMoKSArIDMyICogKGEud2RzIC0gYi53ZHMpOwogICAgaWYgKGsgPiAw KQogICAgICAgIGZhLnZhbHVlLndvcmQgKz0gayAqIE1JTl9GUkFDVDsKICAgIGVsc2UKICAgICAg ICBmYi52YWx1ZS53b3JkIC09IGsgKiBNSU5fRlJBQ1Q7CiAgICByZXR1cm4gZmEgLyBmYjsKfQoK Ym9vbCBJRUVFZmxvYXQ6Om9wZXJhdG9yPT0gKGNvbnN0IElFRUVmbG9hdCBvcCkgY29uc3QKewoK CgoKICAgIHJldHVybiBJc05hTigpIHx8IG9wLklzTmFOKCkgPyBmYWxzZQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6IElzWmVybygpICYmIG9wLklzWmVybygpID8gdHJ1ZQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog dmFsdWUud29yZCA9PSBvcC52YWx1ZS53b3JkOwoKfQoKYm9vbCBJRUVFZmxvYXQ6Om9wZXJhdG9y IT0gKGNvbnN0IElFRUVmbG9hdCBvcCkgY29uc3QKewoKCgoKICAgIHJldHVybiAhKCp0aGlzID09 IG9wKTsKCn0KCmJvb2wgSUVFRWZsb2F0OjpvcGVyYXRvcjwgKGNvbnN0IElFRUVmbG9hdCBvcCkg Y29uc3QKewoKCgoKICAgIGlmIChJc05hTigpIHx8IG9wLklzTmFOKCkpCiAgICAgICAgcmV0dXJu IGZhbHNlOwogICAgaWYgKElzWmVybygpKQogICAgICAgIHJldHVybiBvcC5Jc1plcm8oKSA/IGZh bHNlIDogb3AuSXNQb3NpdGl2ZSgpOwogICAgaWYgKG9wLklzWmVybygpKQogICAgICAgIHJldHVy biBJc05lZ2F0aXZlKCk7CgogICAgcmV0dXJuIHZhbHVlLml3b3JkIDwgb3AudmFsdWUuaXdvcmQ7 Cgp9Cgpib29sIElFRUVmbG9hdDo6b3BlcmF0b3I8PSAoY29uc3QgSUVFRWZsb2F0IG9wKSBjb25z dAp7CgoKCgogICAgcmV0dXJuICp0aGlzIDwgb3AgfHwgKnRoaXMgPT0gb3A7Cgp9Cgpib29sIElF RUVmbG9hdDo6b3BlcmF0b3I+IChjb25zdCBJRUVFZmxvYXQgb3ApIGNvbnN0CnsKCgoKCiAgICBp ZiAoSXNOYU4oKSB8fCBvcC5Jc05hTigpKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChJ c1plcm8oKSkKICAgICAgICByZXR1cm4gb3AuSXNaZXJvKCkgPyBmYWxzZSA6IG9wLklzTmVnYXRp dmUoKTsKICAgIGlmIChvcC5Jc1plcm8oKSkKICAgICAgICByZXR1cm4gSXNQb3NpdGl2ZSgpOwoK ICAgIHJldHVybiB2YWx1ZS5pd29yZCA+IG9wLnZhbHVlLml3b3JkOwoKfQoKYm9vbCBJRUVFZmxv YXQ6Om9wZXJhdG9yPj0gKGNvbnN0IElFRUVmbG9hdCBvcCkgY29uc3QKewoKCgoKICAgIHJldHVy biAqdGhpcyA+IG9wIHx8ICp0aGlzID09IG9wOwoKfQoKSUVFRWZsb2F0IElFRUVmbG9hdDo6b3Bl cmF0b3IrIChjb25zdCBJRUVFZmxvYXQgb3ApIGNvbnN0CnsKCgoKCiAgICBpZiAoSXNOYU4oKSB8 fCBvcC5Jc05hTigpKQogICAgICAgIHJldHVybiBOYU4oKTsKCgoKCgoKICAgIGlmIChJc0luZmlu aXRlKCkpCiAgICAgICAgcmV0dXJuIG9wLklzSW5maW5pdGUoKSAmJiAoU2lnbigpICE9IG9wLlNp Z24oKSkgPyBOYU4oKSA6ICp0aGlzOwogICAgaWYgKG9wLklzSW5maW5pdGUoKSkKICAgICAgICBy ZXR1cm4gb3A7CgoKCgogICAgaWYgKElzWmVybygpKQogICAgICAgIHJldHVybiAob3AuSXNaZXJv KCkpID8gKFNpZ24oKSAhPSBvcC5TaWduKCkpID8gUE9TSVRJVkVfWkVSTygpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAqdGhpcwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDogb3A7CiAgICBpZiAob3AuSXNaZXJvKCkpCiAgICAgICAg cmV0dXJuICp0aGlzOwoKCgoKICAgIGk0IHgsIHksIHJvdW5kID0gMDsKICAgIGludCBleHB4LCBl eHB5LCBzaWdueCwgc2lnbnk7CgogICAgZXhweCA9IFNwbGl0SW50bygodTQgJikgeCk7CiAgICBl eHB5ID0gb3AuU3BsaXRJbnRvKCh1NCAmKSB5KTsKCiAgICBzaWdueCA9IFNpZ24oKTsKICAgIHNp Z255ID0gb3AuU2lnbigpOwoKCiAgICBpZiAoZXhweCA+IGV4cHkgKyAyNSkKICAgICAgICByZXR1 cm4gKnRoaXM7CiAgICBpZiAoZXhweSA+IGV4cHggKyAyNSkKICAgICAgICByZXR1cm4gb3A7CgoK CgoKCiAgICBpZiAoc2lnbngpCiAgICAgICAgeCA9IC14OwogICAgaWYgKHNpZ255KQogICAgICAg IHkgPSAteTsKCiAgICB4IDw8PSA2OwogICAgeSA8PD0gNjsKCiAgICBpZiAoZXhweCA+IGV4cHkp IHsKICAgICAgICByb3VuZCA9IHkgPDwgKDMyICsgZXhweSAtIGV4cHgpOwogICAgICAgIHkgPj49 IGV4cHggLSBleHB5OwogICAgfQogICAgZWxzZSBpZiAoZXhweSA+IGV4cHgpCiAgICB7CiAgICAg ICAgcm91bmQgPSB4IDw8ICgzMiArIGV4cHggLSBleHB5KTsKICAgICAgICB4ID4+PSBleHB5IC0g ZXhweDsKICAgICAgICBleHB4ID0gZXhweTsKICAgIH0KCgoKCgoKICAgIHggKz0geTsKICAgIGlm IChyb3VuZCkKICAgICAgICB4IHw9IDE7CgoKCgoKICAgIGlmICh4IDwgMCkKICAgIHsKICAgICAg ICB4ID0gLXg7CiAgICAgICAgc2lnbnggPSAxOwogICAgfQogICAgZWxzZQogICAgICAgIHNpZ254 ID0gMDsKCiAgICBpZiAoeCA9PSAwKQogICAgICAgIHJldHVybiBzaWdueCA/IE5FR0FUSVZFX1pF Uk8oKSA6IFBPU0lUSVZFX1pFUk8oKTsKCgoKCgoKICAgIHJldHVybiBOb3JtYWxpemUoc2lnbngs IGV4cHggLSA2LCAodTQpIHgpOwoKfQoKSUVFRWZsb2F0IElFRUVmbG9hdDo6b3BlcmF0b3ItICgp IGNvbnN0CnsKCgoKCiAgICBpZiAoSXNOYU4oKSkKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICBy ZXR1cm4gSUVFRWZsb2F0KHZhbHVlLndvcmQgXiBTSUdOX0JJVCk7Cgp9CgpJRUVFZmxvYXQgSUVF RWZsb2F0OjpvcGVyYXRvciogKGNvbnN0IElFRUVmbG9hdCBvcCkgY29uc3QKewoKCgogICAgaWYg KElzTmFOKCkgfHwgb3AuSXNOYU4oKSkKICAgICAgICByZXR1cm4gTmFOKCk7CgogICAgaW50IHNp Z24gPSBTaWduKCkgXiBvcC5TaWduKCk7CgoKCgogICAgaWYgKElzWmVybygpKQogICAgICAgIHJl dHVybiBvcC5Jc0luZmluaXRlKCkgPyBOYU4oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOiBzaWduID8gTkVHQVRJVkVfWkVSTygpIDogUE9TSVRJVkVfWkVSTygpOwoKICAgIGlmIChv cC5Jc1plcm8oKSkKICAgICAgICByZXR1cm4gSXNJbmZpbml0ZSgpID8gTmFOKCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDogc2lnbiA/IE5FR0FUSVZFX1pFUk8oKSA6IFBPU0lUSVZFX1pF Uk8oKTsKCiAgICBpZiAoSXNJbmZpbml0ZSgpIHx8IG9wLklzSW5maW5pdGUoKSkKICAgICAgICBy ZXR1cm4gc2lnbiA/IE5FR0FUSVZFX0lORklOSVRZKCkgOiBQT1NJVElWRV9JTkZJTklUWSgpOwoK CgoKICAgIHU0IHgsIHk7CiAgICBpbnQgZXhwb25lbnQ7CgogICAgZXhwb25lbnQgPSBTcGxpdElu dG8oeCkgKyBvcC5TcGxpdEludG8oeSk7CiMgMTExNSAiZG91YmxlLmNwcCIKICAgIFVMb25nSW50 IGEgPSB4LAogICAgICAgICAgICAgYiA9IHk7CiAgICBhICo9IGI7CiAgICBiID0gYSAmIDB4ZmZm ZmY7CiAgICBhID4+PSAyMDsKICAgIHggPSBhLkxvd1dvcmQoKSB8ICgoYiA+IDApID8gMSA6IDAp OwoKICAgIHJldHVybiBOb3JtYWxpemUoc2lnbiwgZXhwb25lbnQgLSAzLCB4KTsKCn0KCklFRUVm bG9hdCBJRUVFZmxvYXQ6Om9wZXJhdG9yLyAoY29uc3QgSUVFRWZsb2F0IG9wKSBjb25zdAp7CgoK CgoKCgogICAgaWYgKElzTmFOKCkgfHwgb3AuSXNOYU4oKSkKICAgICAgICByZXR1cm4gTmFOKCk7 CgogICAgaW50IHNpZ24gPSBTaWduKCkgXiBvcC5TaWduKCk7CgoKCgoKICAgIGlmIChJc0luZmlu aXRlKCkpCiAgICAgICAgcmV0dXJuIG9wLklzSW5maW5pdGUoKSA/IE5hTigpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6IHNpZ24gPyBORUdBVElWRV9JTkZJTklUWSgpIDogUE9TSVRJ VkVfSU5GSU5JVFkoKTsKCiAgICBpZiAob3AuSXNJbmZpbml0ZSgpKQogICAgICAgIHJldHVybiBz aWduID8gTkVHQVRJVkVfWkVSTygpIDogUE9TSVRJVkVfWkVSTygpOwoKICAgIGlmIChJc1plcm8o KSkKICAgICAgICByZXR1cm4gb3AuSXNaZXJvKCkgPyBOYU4oKQogICAgICAgICAgICAgICAgICAg ICAgICAgICA6IHNpZ24gPyBORUdBVElWRV9aRVJPKCkgOiBQT1NJVElWRV9aRVJPKCk7CgogICAg aWYgKG9wLklzWmVybygpKQogICAgICAgIHJldHVybiBzaWduID8gTkVHQVRJVkVfSU5GSU5JVFko KSA6IFBPU0lUSVZFX0lORklOSVRZKCk7CgoKCgogICAgdTQgeCwgeTsKICAgIGludCBleHBvbmVu dDsKCiAgICBleHBvbmVudCA9IFNwbGl0SW50byh4KSAtIG9wLlNwbGl0SW50byh5KTsKCiAgICB1 NCBtYXNrID0gMHg4MDAwMDAwMCwKICAgICAgICByZXN1bHQgPSAwOwoKCgogICAgaWYgKHggPCB5 KQogICAgewogICAgICAgIHggPDw9IDE7CiAgICAgICAgZXhwb25lbnQtLTsKICAgIH0KCgoKCgoK ICAgIHdoaWxlIChtYXNrKQogICAgewogICAgICAgIGlmICh4ID49IHkpCiAgICAgICAgewogICAg ICAgICAgICByZXN1bHQgKz0gbWFzazsKICAgICAgICAgICAgeCAtPSB5OwogICAgICAgICAgICBp ZiAoeCA9PSAwKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHggPDw9 IDE7CiAgICAgICAgbWFzayA+Pj0gMTsKICAgIH0KCiAgICByZXR1cm4gTm9ybWFsaXplKHNpZ24s IGV4cG9uZW50IC0gOCwgcmVzdWx0KTsKCn0KCklFRUVmbG9hdCBJRUVFZmxvYXQ6Om9wZXJhdG9y JSAoY29uc3QgSUVFRWZsb2F0IG9wKSBjb25zdAp7CgoKCgogICAgaWYgKElzTmFOKCkgfHwgb3Au SXNOYU4oKSkKICAgICAgICByZXR1cm4gTmFOKCk7CgoKCgoKICAgIGlmIChJc0luZmluaXRlKCkg fHwgb3AuSXNaZXJvKCkpCiAgICAgICAgcmV0dXJuIE5hTigpOwoKICAgIGlmIChJc1plcm8oKSB8 fCBvcC5Jc0luZmluaXRlKCkpCiAgICAgICAgcmV0dXJuICp0aGlzOwoKCgoKCgogICAgaW50IHNp Z24gPSBTaWduKCk7CiAgICB1NCB4LCB5OwogICAgaW50IGV4cHksIGV4cG9uZW50OwogICAgaTQg ejsKCiAgICBleHB5ID0gb3AuU3BsaXRJbnRvKHkpOwogICAgZXhwb25lbnQgPSBTcGxpdEludG8o eCkgLSBleHB5OwoKICAgIGlmIChleHBvbmVudCA8IDAgfHwgKGV4cG9uZW50ID09IDAgJiYgeCA8 IHkpKQogICAgICAgIHJldHVybiAqdGhpczsKCiAgICB3aGlsZSAoZXhwb25lbnQtLSkKICAgIHsK ICAgICAgICB6ID0geCAtIHk7CiAgICAgICAgaWYgKHogPCAwKQogICAgICAgICAgICB4IDw8PSAx OwogICAgICAgIGVsc2UgaWYgKHogPT0gMCkKICAgICAgICAgICAgcmV0dXJuIHNpZ24gPyBORUdB VElWRV9aRVJPKCkgOiBQT1NJVElWRV9aRVJPKCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICB4 ID0geiArIHo7CiAgICB9CiAgICB6ID0geCAtIHk7CiAgICBpZiAoeiA+PSAwKQogICAgICAgIHgg PSB6OwoKICAgIGlmICh4ID09IDApCiAgICAgICAgcmV0dXJuIHNpZ24gPyBORUdBVElWRV9aRVJP KCkgOiBQT1NJVElWRV9aRVJPKCk7CiAgICByZXR1cm4gTm9ybWFsaXplKHNpZ24sIGV4cHksIHgp OwoKfQoKCgpJRUVFZG91YmxlOjpJRUVFZG91YmxlKGNvbnN0IElFRUVmbG9hdCAmZikKewoKCgog ICAgaW50IHNpZ24gPSBmLlNpZ24oKTsKICAgIGludCBleHBvbmVudCA9IGYuRXhwb25lbnQoKTsK CiAgICBpZiAoZXhwb25lbnQgPT0gLUlFRUVmbG9hdDo6QmlhcygpKQogICAgewogICAgICAgIGlm IChmLklzWmVybygpKQogICAgICAgICAgICAqdGhpcyA9IHNpZ24gPyBORUdBVElWRV9aRVJPKCkg OiBQT1NJVElWRV9aRVJPKCk7CiAgICAgICAgZWxzZQogICAgICAgIHsKCgoKICAgICAgICAgICAg KnRoaXMgPSBOb3JtYWxpemUoc2lnbiwgMSAtIElFRUVmbG9hdDo6QmlhcygpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBVTG9uZ0ludChmLkZyYWN0aW9uKCkpIDw8IDI5KTsKICAgICAg ICB9CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgaWYgKGYuSXNJbmZpbml0ZSgpKQogICAg ICAgICAgICAqdGhpcyA9IHNpZ24gPyBORUdBVElWRV9JTkZJTklUWSgpIDogUE9TSVRJVkVfSU5G SU5JVFkoKTsKICAgICAgICBlbHNlIGlmIChmLklzTmFOKCkpCiAgICAgICAgICAgICp0aGlzID0g TmFOKCk7CiAgICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICAgICp0aGlzID0gTm9ybWFs aXplKHNpZ24sIGV4cG9uZW50LCBVTG9uZ0ludChmLkZyYWN0aW9uKCkpIDw8IDI5KTsKICAgICAg ICB9CiAgICB9Cgp9CgpJRUVFZG91YmxlOjpJRUVFZG91YmxlKGk0IGEpCnsKCgoKICAgIGludCBz aWduID0gMDsKCiAgICBpZiAoYSA8IDApCiAgICB7CiAgICAgICAgYSA9IC1hOwogICAgICAgIHNp Z24gPSAxOwogICAgfQogICAgaWYgKGEgPT0gMCkKICAgICAgICAqdGhpcyA9IFBPU0lUSVZFX1pF Uk8oKTsKICAgIGVsc2UKICAgICAgICAqdGhpcyA9IE5vcm1hbGl6ZShzaWduLCBGUkFDVF9TSVpF LCBVTG9uZ0ludCgodTQpIGEpKTsKCn0KCklFRUVkb3VibGU6OklFRUVkb3VibGUoY29uc3QgTG9u Z0ludCAmYSkKewojIDEzMjEgImRvdWJsZS5jcHAiCiAgICBpbnQgc2lnbiA9IDA7CiAgICBMb25n SW50IGwgPSBhOwoKICAgIGlmIChhIDwgMCkKICAgIHsKICAgICAgICBsID0gLWE7CiAgICAgICAg c2lnbiA9IDE7CiAgICB9CiAgICBpZiAobCA9PSAwKQogICAgICAgICp0aGlzID0gUE9TSVRJVkVf WkVSTygpOwogICAgZWxzZQogICAgICAgICp0aGlzID0gTm9ybWFsaXplKHNpZ24sIEZSQUNUX1NJ WkUsIFVMb25nSW50KGwpKTsKCn0KCklFRUVkb3VibGU6OklFRUVkb3VibGUoY29uc3QgY2hhciAq c3RyLCBib29sIGNoZWNrX2ludmFsaWQpCnsKICAgIGludCBiYjIsIGJiNSwgYmJlLCBiZDIsIGJk NSwgYmJiaXRzLCBiczIsCiAgICAgICAgZSwgZTEsIGksIGosIGs7CiAgICBpbnQgbmQsCiAgICAg ICAgbmQwLAogICAgICAgIG5mLAogICAgICAgIG56OwogICAgYm9vbCBuejAsCiAgICAgICAgIHJv dW5kdXAsCiAgICAgICAgIHNpZ24sCiAgICAgICAgIGRzaWduLAogICAgICAgICBlc2lnbjsKICAg IGNoYXIgYzsKICAgIGNvbnN0IGNoYXIgKnMsICpzMCwgKnMxOwogICAgSUVFRWRvdWJsZSBhYWRq LCBhYWRqMTsKICAgIGk0IEw7CiAgICBpNCB5LCB6OwoKICAgIHNpZ24gPSBuejAgPSByb3VuZHVw ID0gZmFsc2U7CiAgICBueiA9IDA7CgoKCgogICAgZm9yIChzID0gc3RyOyA7IHMrKykKICAgICAg ICBzd2l0Y2ggKCpzKQogICAgICAgIHsKICAgICAgICBjYXNlIFVfTUlOVVM6CiAgICAgICAgICAg IHNpZ24gPSB0cnVlOwoKICAgICAgICBjYXNlIFVfUExVUzoKICAgICAgICAgICAgaWYgKCorK3Mp CiAgICAgICAgICAgICAgICBnb3RvIGJyZWFrMjsKCiAgICAgICAgY2FzZSBVX05VOgogICAgICAg ICAgICAqdGhpcyA9IE5hTigpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgY2FzZSBVX1NQ QUNFOgogICAgICAgIGNhc2UgVV9IVDoKICAgICAgICBjYXNlIFVfRkY6CiAgICAgICAgY2FzZSBV X0xGOgogICAgICAgIGNhc2UgVV9DUjoKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgZGVm YXVsdDoKICAgICAgICAgICAgZ290byBicmVhazI7CiAgICAgICAgfQogYnJlYWsyOgoKCgogICAg aWYgKCpzID09IFVfMCkKICAgIHsKICAgICAgICBuejAgPSB0cnVlOwogICAgICAgIHdoaWxlICgq KytzID09IFVfMCk7CgogICAgICAgIGlmICghICpzKQogICAgICAgIHsKICAgICAgICAgICAgKnRo aXMgPSBzaWduID8gTkVHQVRJVkVfWkVSTygpIDogUE9TSVRJVkVfWkVSTygpOwogICAgICAgICAg ICByZXR1cm47CiAgICAgICAgfQogICAgfQoKCgoKICAgIHMwID0gczsKICAgIHkgPSB6ID0gMDsK ICAgIGZvciAobmQgPSBuZiA9IDA7IChjID0gKnMpID49IFVfMCAmJiBjIDw9IFVfOTsgbmQrKywg cysrKQogICAgICAgIGlmIChuZCA8IDkpCiAgICAgICAgICAgIHkgPSAxMCAqIHkgKyBjIC0gVV8w OwogICAgICAgIGVsc2UgaWYgKG5kIDwgMTYpCiAgICAgICAgICAgIHogPSAxMCAqIHogKyBjIC0g VV8wOwogICAgbmQwID0gbmQ7CiAgICBpZiAoYyA9PSBVX0RPVCkKICAgIHsKCgoKICAgICAgICBj ID0gKisrczsKICAgICAgICBpZiAoIW5kKQogICAgICAgIHsKICAgICAgICAgICAgZm9yICggOyBj ID09IFVfMDsgYyA9ICorK3MpCiAgICAgICAgICAgICAgICBueisrOwogICAgICAgICAgICBpZiAo YyA+IFVfMCAmJiBjIDw9IFVfOSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgczAgPSBz OwogICAgICAgICAgICAgICAgbmYgKz0gbno7CiAgICAgICAgICAgICAgICBueiA9IDA7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yICggOyBjID49IFVfMCAmJiBjIDw9IFVfOTsg YyA9ICorK3MpCiAgICAgICAgewogICAgICAgICAgICBueisrOwogICAgICAgICAgICBpZiAoYyAt PSBVXzApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG5mICs9IG56OwogICAgICAgICAg ICAgICAgZm9yIChpID0gMTsgaSA8IG56OyBpKyspCiAgICAgICAgICAgICAgICAgICAgaWYgKG5k KysgPCA5KQogICAgICAgICAgICAgICAgICAgICAgICB5ICo9IDEwOwogICAgICAgICAgICAgICAg ICAgIGVsc2UgaWYgKG5kIDw9IDE2KQogICAgICAgICAgICAgICAgICAgICAgICB6ICo9IDEwOwog ICAgICAgICAgICAgICAgaWYgKG5kKysgPCA5KQogICAgICAgICAgICAgICAgICAgIHkgPSAxMCAq IHkgKyBjOwogICAgICAgICAgICAgICAgZWxzZSBpZiAobmQgPD0gMTYpCiAgICAgICAgICAgICAg ICAgICAgeiA9IDEwICogeiArIGM7CiAgICAgICAgICAgICAgICBueiA9IDA7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICB9CgoKCiAgICBlID0gMDsKICAgIGlmIChjID09IFVfZSB8fCBjID09 IFVfRSkgewogICAgICAgIHN0ciA9IHM7CiAgICAgICAgZXNpZ24gPSBmYWxzZTsKICAgICAgICBz d2l0Y2ggKGMgPSAqKytzKQogICAgICAgIHsKICAgICAgICBjYXNlIFVfTUlOVVM6CiAgICAgICAg ICAgIGVzaWduID0gdHJ1ZTsKCiAgICAgICAgY2FzZSBVX1BMVVM6CiAgICAgICAgICAgIGMgPSAq KytzOwogICAgICAgIH0KICAgICAgICBpZiAoYyA+PSBVXzAgJiYgYyA8PSBVXzkpCiAgICAgICAg ewogICAgICAgICAgICBpZiAoIW5kICYmICFueiAmJiAhbnowKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAqdGhpcyA9IHNpZ24gPyBORUdBVElWRV9aRVJPKCkgOiBQT1NJVElWRV9aRVJP KCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hp bGUgKGMgPT0gVV8wKQogICAgICAgICAgICAgICAgYyA9ICorK3M7CiAgICAgICAgICAgIGlmIChj ID4gVV8wICYmIGMgPD0gVV85KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBMID0gYyAt IFVfMDsKICAgICAgICAgICAgICAgIHMxID0gczsKICAgICAgICAgICAgICAgIHdoaWxlICgoYyA9 ICorK3MpID49IFVfMCAmJiBjIDw9IFVfOSkKICAgICAgICAgICAgICAgICAgICBMID0gMTAgKiBM ICsgYyAtIFVfMDsKCgoKICAgICAgICAgICAgICAgIGlmIChzIC0gczEgPiA4IHx8IEwgPiAxOTk5 OSkKICAgICAgICAgICAgICAgICAgICBlID0gMTk5OTk7CiAgICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICAgICAgZSA9IEw7CiAgICAgICAgICAgICAgICBpZiAoZXNpZ24pCiAgICAg ICAgICAgICAgICAgICAgZSA9IC1lOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgIGUgPSAwOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgIHMg PSBzdHI7CiAgICB9CiAgICBpZiAoIW5kKSB7CiAgICAgICAgKnRoaXMgPSAoIW56ICYmICFuejAp ID8gTmFOKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzaWduID8gTkVHQVRJVkVf WkVSTygpIDogUE9TSVRJVkVfWkVSTygpOwogICAgICAgIHJldHVybjsKICAgIH0KCgoKCgoKICAg IGlmIChuZCA+IE1BWF9ESUdJVFMpCiAgICB7CiAgICAgICAgayA9IG5kIC0gTUFYX0RJR0lUUzsK ICAgICAgICBpID0gTUFYX0RJR0lUUyAtIG5kMDsKICAgICAgICBpZiAoaSA8PSAwKQogICAgICAg IHsKCiAgICAgICAgICAgIG5kMCA9IE1BWF9ESUdJVFM7CiAgICAgICAgICAgIG5mID0gaTsKICAg ICAgICAgICAgaiA9IDA7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGkgPT0gTUFYX0RJR0lU UykKICAgICAgICB7CgogICAgICAgICAgICBuZiAtPSBrOwogICAgICAgICAgICBqID0gMDsKICAg ICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICAgIG5mIC09IGs7CiAgICAg ICAgICAgIGogPSAxOwogICAgICAgIH0KICAgICAgICByb3VuZHVwID0gczBbTUFYX0RJR0lUUyAt IDEgKyBqXSAhPSBVXzQ7CiAgICAgICAgbmQgPSBNQVhfRElHSVRTOwogICAgfQogICAgZTEgPSBl IC09IG5mOwoKCgoKCgogICAgaWYgKCEgbmQwKQogICAgICAgIG5kMCA9IG5kOwogICAgayA9IG5k IDwgMTYgPyBuZCA6IDE2OwogICAgKnRoaXMgPSBJRUVFZG91YmxlKHkpOwogICAgaWYgKGsgPiA5 KQogICAgICAgICp0aGlzID0gKnRoaXMgKiB0ZW5zW2sgLSA5XSArIHo7CiAgICBpZiAobmQgPCAx NikKICAgIHsKICAgICAgICBpZiAoIWUpCiAgICAgICAgewogICAgICAgICAgICBpZiAoc2lnbikK ICAgICAgICAgICAgICAgICp0aGlzID0gLSp0aGlzOwogICAgICAgICAgICByZXR1cm47CiAgICAg ICAgfQogICAgICAgIGlmIChlID4gMCkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChlIDw9IDIy KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAqdGhpcyAqPSB0ZW5zW2VdOwogICAgICAg ICAgICAgICAgaWYgKHNpZ24pCiAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSAtKnRoaXM7CiAg ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaSA9IDE1IC0g bmQ7CiAgICAgICAgICAgIGlmIChlIDw9IDIyICsgaSkKICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgZSAtPSBpOwogICAgICAgICAgICAgICAgKnRoaXMgKj0gdGVuc1tpXTsKICAgICAgICAg ICAgICAgICp0aGlzICo9IHRlbnNbZV07CiAgICAgICAgICAgICAgICBpZiAoc2lnbikKICAgICAg ICAgICAgICAgICAgICAqdGhpcyA9IC0qdGhpczsKICAgICAgICAgICAgICAgIHJldHVybjsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChlID49IC0yMiApCiAgICAgICAg ewogICAgICAgICAgICAqdGhpcyAvPSB0ZW5zWy1lXTsKICAgICAgICAgICAgaWYgKHNpZ24pCiAg ICAgICAgICAgICAgICAqdGhpcyA9IC0qdGhpczsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAg IH0KICAgIH0KICAgIGUxICs9IG5kIC0gazsKCgoKCiAgICBpZiAoZTEgPiAwKQogICAgewogICAg ICAgIGkgPSBlMSAmIDB4ZjsKICAgICAgICBpZiAoaSkKICAgICAgICAgICAgKnRoaXMgKj0gdGVu c1tpXTsKICAgICAgICBpZiAoZTEgPj49IDQpCiAgICAgICAgewogICAgICAgICAgICBpZiAoZTEg PiBNQVhfREVDX0VYUCA+PiA0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAqdGhpcyA9 IGNoZWNrX2ludmFsaWQgPyBOYU4oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDogc2lnbiA/IE5FR0FUSVZFX0lORklOSVRZKCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOiBQT1NJVElWRV9JTkZJTklUWSgpOwogICAgICAgICAgICAg ICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAoaiA9IDA7IGUxID4gMTsg aisrLCBlMSA+Pj0gMSkKICAgICAgICAgICAgICAgIGlmIChlMSAmIDEpCiAgICAgICAgICAgICAg ICAgICAgKnRoaXMgKj0gYmlndGVuc1tqXTsKCgoKICAgICAgICAgICAgc2V0SGlnaFdvcmQoSGln aFdvcmQoKSAtIChGUkFDVF9TSVpFICsgMSkgKiBNSU5fRlJBQ1QpOwogICAgICAgICAgICAqdGhp cyAqPSBiaWd0ZW5zW2pdOwogICAgICAgICAgICB6ID0gRXhwb25lbnQoKTsKICAgICAgICAgICAg aWYgKHogPiBCSUFTIC0gRlJBQ1RfU0laRSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg KnRoaXMgPSBjaGVja19pbnZhbGlkID8gTmFOKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6IHNpZ24gPyBORUdBVElWRV9JTkZJTklUWSgpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogUE9TSVRJVkVfSU5GSU5JVFkoKTsKICAgICAg ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoeiA+IEJJQVMg LSBGUkFDVF9TSVpFIC0gMSkKICAgICAgICAgICAgICAgIHNldEhpZ2hBbmRMb3dXb3JkcyhQT1Nf SU5GX0hJIC0gMSwgWkVST19MTyAtIDEpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg ICBzZXRIaWdoV29yZChIaWdoV29yZCgpICsgKEZSQUNUX1NJWkUgKyAxKSAqIE1JTl9GUkFDVCk7 CiAgICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoZTEgPCAwKQogICAgewogICAgICAgIGUxID0g LWUxOwogICAgICAgIGkgPSBlMSAmIDB4ZjsKICAgICAgICBpZiAoaSkKICAgICAgICAgICAgKnRo aXMgLz0gdGVuc1tpXTsKICAgICAgICBpZiAoZTEgPj49IDQpCiAgICAgICAgewogICAgICAgICAg ICBpZiAoZTEgPj0gMSA8PCA1KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAqdGhpcyA9 IGNoZWNrX2ludmFsaWQgPyBOYU4oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDogc2lnbiA/IE5FR0FUSVZFX1pFUk8oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6IFBPU0lUSVZFX1pFUk8oKTsKICAgICAgICAgICAgICAgIHJldHVy bjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKGogPSAwOyBlMSA+IDE7IGorKywgZTEg Pj49IDEpCiAgICAgICAgICAgICAgICBpZiAoZTEgJiAxKQogICAgICAgICAgICAgICAgICAgICp0 aGlzIC89IGJpZ3RlbnNbal07CgoKCiAgICAgICAgICAgIElFRUVkb3VibGUgdG1wKCp0aGlzKTsK ICAgICAgICAgICAgKnRoaXMgLz0gYmlndGVuc1tqXTsKICAgICAgICAgICAgaWYgKElzWmVybygp KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAqdGhpcyA9IHRtcCAqIDI7CiAgICAgICAg ICAgICAgICAqdGhpcyAvPSBiaWd0ZW5zW2pdOwogICAgICAgICAgICAgICAgaWYgKElzWmVybygp KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICp0aGlzID0gY2hlY2tfaW52 YWxpZCA/IE5hTigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog c2lnbiA/IE5FR0FUSVZFX1pFUk8oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOiBQT1NJVElWRV9aRVJPKCk7CiAgICAgICAgICAgICAgICAgICAgcmV0 dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc2V0SGlnaEFuZExvd1dvcmRz KDAsIDEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKCgoKCiAgICBCaWdJbnQgYmQw KHMwLCBuZDAsIG5kLCB5LCA5KTsKICAgIGlmIChyb3VuZHVwKQogICAgICAgICsrYmQwOwogICAg d2hpbGUgKHRydWUpIHsKICAgICAgICBCaWdJbnQgYmQoYmQwKTsKICAgICAgICBCaWdJbnQgYmIo KnRoaXMsIGJiZSwgYmJiaXRzKTsKICAgICAgICBCaWdJbnQgYnMoMSk7CiAgICAgICAgaWYgKGUg Pj0gMCkKICAgICAgICB7CiAgICAgICAgICAgIGJiMiA9IGJiNSA9IDA7CiAgICAgICAgICAgIGJk MiA9IGJkNSA9IGU7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAg IGJiMiA9IGJiNSA9IC1lOwogICAgICAgICAgICBiZDIgPSBiZDUgPSAwOwogICAgICAgIH0KICAg ICAgICBpZiAoYmJlID49IDApCiAgICAgICAgICAgIGJiMiArPSBiYmU7CiAgICAgICAgZWxzZQog ICAgICAgICAgICBiZDIgLT0gYmJlOwogICAgICAgIGJzMiA9IGJiMjsKICAgICAgICBqID0gYmJl OwogICAgICAgIGkgPSBqICsgYmJiaXRzIC0gMTsKICAgICAgICBpZiAoaSA8IDEgLSBCSUFTKQog ICAgICAgICAgICBqICs9IEJJQVMgKyBGUkFDVF9TSVpFOwogICAgICAgIGVsc2UKICAgICAgICAg ICAgaiA9IEZSQUNUX1NJWkUgKyAyIC0gYmJiaXRzOwogICAgICAgIGJiMiArPSBqOwogICAgICAg IGJkMiArPSBqOwogICAgICAgIGkgPSBiYjIgPCBiZDIgPyBiYjIgOiBiZDI7CiAgICAgICAgaWYg KGkgPiBiczIpCiAgICAgICAgICAgIGkgPSBiczI7CiAgICAgICAgaWYgKGkgPiAwKQogICAgICAg IHsKICAgICAgICAgICAgYmIyIC09IGk7CiAgICAgICAgICAgIGJkMiAtPSBpOwogICAgICAgICAg ICBiczIgLT0gaTsKICAgICAgICB9CiAgICAgICAgaWYgKGJiNSA+IDApIHsKICAgICAgICAgICAg YnMucG93NW11bHQoYmI1KTsKICAgICAgICAgICAgYmIgKj0gYnM7CiAgICAgICAgfQogICAgICAg IGlmIChiYjIgPiAwKQogICAgICAgICAgICBiYiA8PD0gYmIyOwogICAgICAgIGlmIChiZDUgPiAw KQogICAgICAgICAgICBiZC5wb3c1bXVsdChiZDUpOwogICAgICAgIGlmIChiZDIgPiAwKQogICAg ICAgICAgICBiZCA8PD0gYmQyOwogICAgICAgIGlmIChiczIgPiAwKQogICAgICAgICAgICBicyA8 PD0gYnMyOwogICAgICAgIEJpZ0ludCBkZWx0YSA9IGJiIC0gYmQ7CiAgICAgICAgZHNpZ24gPSBk ZWx0YS5Jc05lZ2F0aXZlKCk7CiAgICAgICAgaWYgKGRzaWduKQogICAgICAgICAgICBkZWx0YS5J c05lZ2F0aXZlKGZhbHNlKTsKICAgICAgICBpID0gZGVsdGEuY29tcGFyZVRvKGJzKTsKCgoKCiAg ICAgICAgaWYgKGkgPCAwKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGRzaWduIHx8IExvd1dv cmQoKSB8fCBGcmFjdEJpdHMoKQogICAgICAgICAgICAgICAgfHwgRXhwb25lbnQoKSA8PSAxIC0g QklBUyB8fCBkZWx0YS5Jc1plcm8oKSkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICBkZWx0YSA8PD0gMTsKICAgICAgICAgICAgaWYgKGRlbHRhLmNvbXBhcmVUbyhicykgPiAwKQoK ICAgICAgICAgICAgICAgIEJhc2VMb25nOjpvcGVyYXRvciAtLSgpOwogICAgICAgICAgICBicmVh azsKICAgICAgICB9CgoKCiAgICAgICAgZWxzZSBpZiAoaSA9PSAwKQogICAgICAgIHsKICAgICAg ICAgICAgaWYgKExvd1dvcmQoKSAmIDEpCiAgICAgICAgICAgICAgICBCYXNlTG9uZzo6b3BlcmF0 b3IgKz0oZHNpZ24gPyAxIDogLTEpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgoKCiAg ICAgICAgYWFkaiA9IFJhdGlvKGRlbHRhLCBicyk7CiAgICAgICAgaWYgKGFhZGogPD0gMikKICAg ICAgICB7CiAgICAgICAgICAgIGlmIChkc2lnbikKICAgICAgICAgICAgICAgIGFhZGogPSBhYWRq MSA9IDE7CiAgICAgICAgICAgIGVsc2UgaWYgKEZyYWN0Qml0cygpIHx8IExvd1dvcmQoKSkKICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKCFIaWdoV29yZCgpICYmIExvd1dvcmQoKSA9 PSAxKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAqdGhpcyA9IFBPU0lU SVZFX1pFUk8oKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgIGFhZGogPSAxOwogICAgICAgICAgICAgICAgYWFkajEgPSAtMTsKICAg ICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKCgoKICAgICAgICAgICAg ICAgIGlmIChhYWRqIDwgMS4wKQogICAgICAgICAgICAgICAgICAgIGFhZGogPSAwLjU7CiAgICAg ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgYWFkaiAqPSAwLjU7CiAgICAgICAg ICAgICAgICBhYWRqMSA9IC1hYWRqOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVs c2UKICAgICAgICB7CiAgICAgICAgICAgIGFhZGogKj0gMC41OwoKCgoKICAgICAgICAgICAgaWYg KGRzaWduKQogICAgICAgICAgICAgICAgYWFkajEgPSBhYWRqOwogICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICBhYWRqMSA9IC1hYWRqOwogICAgICAgIH0KICAgICAgICB5ID0gRXhwb25l bnQoKTsKCgoKICAgICAgICBpZiAoeSA9PSBCSUFTKQogICAgICAgIHsKICAgICAgICAgICAgSUVF RWRvdWJsZSB0bXAoKnRoaXMpOwogICAgICAgICAgICBzZXRIaWdoV29yZChIaWdoV29yZCgpIC0g KEZSQUNUX1NJWkUgKyAxKSAqIE1JTl9GUkFDVCk7CiAgICAgICAgICAgICp0aGlzICs9IGFhZGox ICogVWxwKCk7CiAgICAgICAgICAgIGlmIChFeHBvbmVudCgpID49IEJJQVMgLSBGUkFDVF9TSVpF KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAodG1wLkhpZ2hXb3JkKCkgPT0gUE9T X0lORl9ISSAtIDEgJiYgdG1wLkxvd1dvcmQoKSA9PSBaRVJPX0xPIC0gMSkKICAgICAgICAgICAg ICAgIHsKCiAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSBQT1NJVElWRV9JTkZJTklUWSgpOwog ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgc2V0SGlnaEFuZExvd1dvcmRzKFBPU19JTkZfSEkgLSAxLCBaRVJPX0xPIC0gMSk7CiAgICAg ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgICBzZXRIaWdoV29yZChIaWdoV29yZCgpICsgKEZSQUNUX1NJWkUgKyAxKSAqIE1J Tl9GUkFDVCk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CgoKCgoKCiAgICAgICAg ICAgIGlmICh5IDw9IEZSQUNUX1NJWkUgLSBCSUFTIHx8IGFhZGogPiAxKQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICBhYWRqMSA9IElFRUVkb3VibGUoKGFhZGogKyAwLjUpLkludFZhbHVl KCkpOwogICAgICAgICAgICAgICAgaWYgKCEgZHNpZ24pCiAgICAgICAgICAgICAgICAgICAgYWFk ajEgPSAtYWFkajE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgKnRoaXMgKz0gYWFkajEgKiBV bHAoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHkgPT0gRXhwb25lbnQoKSkKICAgICAgICB7CgoK CgogICAgICAgICAgICBhYWRqIC09IGFhZGouSW50VmFsdWUoKTsKICAgICAgICAgICAgaWYgKGRz aWduIHx8IEZyYWN0Qml0cygpIHx8IExvd1dvcmQoKSkKICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgaWYgKGFhZGogPCAuNDk5OTk5OSB8fCBhYWRqID4gLjUwMDAwMDEpCiAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoYWFkaiA8 IC40OTk5OTk5IC8gMikKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAg IGlmIChjaGVja19pbnZhbGlkICYmIChJc1plcm8oKSB8fCBJc0luZmluaXRlKCkpKQogICAgICAg ICp0aGlzID0gTmFOKCk7CiAgICBlbHNlIGlmIChzaWduKQogICAgICAgICp0aGlzID0gLSp0aGlz Owp9CgppNCBJRUVFZG91YmxlOjpJbnRWYWx1ZSgpIGNvbnN0CnsKICAgIGlmIChJc05hTigpKQog ICAgICAgIHJldHVybiAwOwojIDE4NTggImRvdWJsZS5jcHAiCiAgICBpbnQgc2lnbiA9IFNpZ24o KSwKICAgICAgICBleHBvbmVudCA9IEV4cG9uZW50KCk7CgogICAgaWYgKElzSW5maW5pdGUoKSB8 fCBleHBvbmVudCA+IDMwKQogICAgICAgIHJldHVybiBzaWduID8gTUlOX0lOVCA6IE1BWF9JTlQ7 CgoKICAgIGlmIChleHBvbmVudCA8IDApCiAgICAgICAgcmV0dXJuIDA7CgogICAgaTQgcmVzdWx0 ID0gKGk0KSAoRnJhY3Rpb24oKSA+PiAoRlJBQ1RfU0laRSAtIGV4cG9uZW50KSkuTG93V29yZCgp OwoKICAgIHJldHVybiBzaWduID8gLXJlc3VsdCA6IHJlc3VsdDsKCn0KCkxvbmdJbnQgSUVFRWRv dWJsZTo6TG9uZ1ZhbHVlKCkgY29uc3QKewogICAgaWYgKElzTmFOKCkpCiAgICAgICAgcmV0dXJu IExvbmdJbnQoMCk7CgogICAgaW50IHNpZ24gPSBTaWduKCksCiAgICAgICAgZXhwb25lbnQgPSBF eHBvbmVudCgpOwoKICAgIGlmIChJc0luZmluaXRlKCkgfHwgZXhwb25lbnQgPiA2MikKICAgICAg ICByZXR1cm4gc2lnbiA/IExvbmdJbnQ6Ok1JTl9MT05HKCkgOiBMb25nSW50OjpNQVhfTE9ORygp OwoKCiAgICBpZiAoZXhwb25lbnQgPCAwKQogICAgICAgIHJldHVybiBMb25nSW50KDApOwoKICAg IExvbmdJbnQgcmVzdWx0ID0gRnJhY3Rpb24oKTsKCiAgICBpZiAoZXhwb25lbnQgPiAoaW50KSBG UkFDVF9TSVpFKQogICAgICAgIHJlc3VsdCA8PD0gKGV4cG9uZW50IC0gRlJBQ1RfU0laRSk7CiAg ICBlbHNlIGlmIChleHBvbmVudCA8IChpbnQpIEZSQUNUX1NJWkUpCiAgICAgICAgcmVzdWx0ID4+ PSAoRlJBQ1RfU0laRSAtIGV4cG9uZW50KTsKCiAgICByZXR1cm4gc2lnbiA/IChMb25nSW50KSAt cmVzdWx0IDogcmVzdWx0Owp9CgpJRUVFZG91YmxlIElFRUVkb3VibGU6Ok5vcm1hbGl6ZShpbnQg c2lnbiwgaW50IGV4cG9uZW50LCBVTG9uZ0ludCBmcmFjdGlvbikKewogICAgYm9vbCByb3VuZCA9 IGZhbHNlLCBzdGlja3kgPSBmYWxzZTsKCiAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKChmcmFjdGlv biAhPSAwKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoImZyYWN0aW9uICE9IDAiLCAiZG91YmxlLmNw cCIsIDE5MDMsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKCgoKICAgIGlmIChmcmFjdGlv bi5IaWdoV29yZCgpID49IE1BWF9GUkFDVCkKICAgIHsKICAgICAgICB3aGlsZSAoZnJhY3Rpb24u SGlnaFdvcmQoKSA+PSBNQVhfRlJBQ1QpCiAgICAgICAgewogICAgICAgICAgICBzdGlja3kgfD0g cm91bmQ7CiAgICAgICAgICAgIHJvdW5kID0gKGZyYWN0aW9uLkxvd1dvcmQoKSAmIDEpICE9IDA7 CiAgICAgICAgICAgIGZyYWN0aW9uID4+PSAxOwogICAgICAgICAgICBleHBvbmVudCsrOwogICAg ICAgIH0KICAgICAgICBpZiAocm91bmQgJiYgKHN0aWNreSB8fCAoZnJhY3Rpb24uTG93V29yZCgp ICYgMSkpICYmIGV4cG9uZW50ID4gLShpbnQpIEJJQVMpCgoKCgoKICAgICAgICAgICAgaWYgKCgr K2ZyYWN0aW9uKS5IaWdoV29yZCgpID49IE1BWF9GUkFDVCkKICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgZnJhY3Rpb24gPj49IDE7CiAgICAgICAgICAgICAgICBleHBvbmVudCsrOwogICAg ICAgICAgICB9CiAgICB9CgoKCgogICAgZWxzZQogICAgICAgIHdoaWxlIChmcmFjdGlvbi5IaWdo V29yZCgpIDwgTUlOX0ZSQUNUKQogICAgICAgIHsKICAgICAgICAgICAgZnJhY3Rpb24gPDw9IDE7 CiAgICAgICAgICAgIGV4cG9uZW50LS07CiAgICAgICAgfQoKCgoKICAgIGlmIChleHBvbmVudCA+ IChpbnQpIEJJQVMpCiAgICAgICAgcmV0dXJuIHNpZ24gPyBORUdBVElWRV9JTkZJTklUWSgpIDog UE9TSVRJVkVfSU5GSU5JVFkoKTsKCgoKCiAgICBpZiAoZXhwb25lbnQgPD0gLShpbnQpIEJJQVMp CiAgICB7CiAgICAgICAgd2hpbGUgKGV4cG9uZW50IDw9IC0oaW50KSBCSUFTKQogICAgICAgIHsK ICAgICAgICAgICAgc3RpY2t5IHw9IHJvdW5kOwogICAgICAgICAgICByb3VuZCA9IChmcmFjdGlv bi5Mb3dXb3JkKCkgJiAxKSAhPSAwOwogICAgICAgICAgICBmcmFjdGlvbiA+Pj0gMTsKICAgICAg ICAgICAgZXhwb25lbnQrKzsKICAgICAgICB9CgogICAgICAgIGlmIChyb3VuZCAmJiAoc3RpY2t5 IHx8IChmcmFjdGlvbi5Mb3dXb3JkKCkgJiAxKSkpCiAgICAgICAgICAgIGZyYWN0aW9uKys7Cgog ICAgICAgIGV4cG9uZW50ID0gLShpbnQpIEJJQVM7CgogICAgICAgIGlmIChmcmFjdGlvbiA9PSAw KQogICAgICAgICAgICByZXR1cm4gc2lnbiA/IE5FR0FUSVZFX1pFUk8oKSA6IFBPU0lUSVZFX1pF Uk8oKTsKICAgIH0KCiAgICByZXR1cm4gSUVFRWRvdWJsZSgoc2lnbiA8PCAzMSkgfCAoKGV4cG9u ZW50ICsgQklBUykgPDwgRlJBQ1RfU0laRV9ISSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8IChmcmFjdGlvbi5IaWdoV29yZCgpICYgRlJBQ1RfQklUUyksCiAgICAgICAgICAg ICAgICAgICAgICBmcmFjdGlvbi5Mb3dXb3JkKCkpOwp9CgppbnQgSUVFRWRvdWJsZTo6U3BsaXRJ bnRvKEJhc2VMb25nICZmcmFjdGlvbikgY29uc3QKewogICAgaW50IGV4cG9uZW50ID0gRXhwb25l bnQoKTsKICAgIGZyYWN0aW9uID0gRnJhY3Rpb24oKTsKCiAgICBpZiAoZXhwb25lbnQgPT0gLShp bnQpIEJJQVMpCiAgICB7CiAgICAgICAgZXhwb25lbnQrKzsKICAgICAgICB3aGlsZSAoZnJhY3Rp b24uSGlnaFdvcmQoKSA8IE1JTl9GUkFDVCkKICAgICAgICB7CiAgICAgICAgICAgIGZyYWN0aW9u IDw8PSAxOwogICAgICAgICAgICBleHBvbmVudC0tOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1 cm4gZXhwb25lbnQ7Cn0KCklFRUVkb3VibGUgSUVFRWRvdWJsZTo6VWxwKCkgY29uc3QKewogICAg aTQgTDsKICAgIElFRUVkb3VibGUgZDsKICAgIGQudmFsdWUuZG91YmxlX3ZhbHVlID0gdmFsdWUu ZG91YmxlX3ZhbHVlOwoKICAgIEwgPSAoaTQpIGQuRXhwQml0cygpIC0gRlJBQ1RfU0laRSAqIE1J Tl9GUkFDVDsKICAgIGlmIChMID4gMCkKICAgICAgICBkLnNldEhpZ2hBbmRMb3dXb3JkcygodTQp IEwsIDApOwogICAgZWxzZQogICAgewogICAgICAgIEwgPSAtTCA+PiBGUkFDVF9TSVpFX0hJOwog ICAgICAgIGlmIChMIDwgKGk0KSBGUkFDVF9TSVpFX0hJKQogICAgICAgICAgICBkLnNldEhpZ2hB bmRMb3dXb3JkcyhNSU5fRlJBQ1QgPj4gKEwgKyAxKSwgMCk7CiAgICAgICAgZWxzZQogICAgICAg IHsKICAgICAgICAgICAgTCAtPSBGUkFDVF9TSVpFX0hJOwogICAgICAgICAgICBkLnNldEhpZ2hB bmRMb3dXb3JkcygwLCBMID49IDMxID8gMSA6IDEgPDwgMzEgLSBMKTsKICAgICAgICB9CiAgICB9 CiAgICByZXR1cm4gZDsKfQoKSUVFRWRvdWJsZSBJRUVFZG91YmxlOjpSYXRpbyhjb25zdCBCaWdJ bnQgJmEsIGNvbnN0IEJpZ0ludCAmYikKewogICAgSUVFRWRvdWJsZSBkYSwgZGI7CiAgICBpbnQg azsKICAgIGRhID0gYS5Eb3VibGVWYWx1ZSgpOwogICAgZGIgPSBiLkRvdWJsZVZhbHVlKCk7CiAg ICBrID0gYi5oaTBiaXRzKCkgLSBhLmhpMGJpdHMoKSArIDMyICogKGEud2RzIC0gYi53ZHMpOwog ICAgaWYgKGsgPiAwKQogICAgICAgIGRhLnNldEhpZ2hXb3JkKGRhLkhpZ2hXb3JkKCkgKyBrICog TUlOX0ZSQUNUKTsKICAgIGVsc2UKICAgICAgICBkYi5zZXRIaWdoV29yZChkYi5IaWdoV29yZCgp IC0gayAqIE1JTl9GUkFDVCk7CiAgICByZXR1cm4gZGEgLyBkYjsKfQoKYm9vbCBJRUVFZG91Ymxl OjpvcGVyYXRvcj09IChjb25zdCBJRUVFZG91YmxlIG9wKSBjb25zdAp7CgoKCgoKICAgIHJldHVy biBJc05hTigpIHx8IG9wLklzTmFOKCkgPyBmYWxzZQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6IElzWmVybygpICYmIG9wLklzWmVybygpID8gdHJ1ZQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKEJhc2VMb25nKSAq dGhpcyA9PSAoQmFzZUxvbmcpIG9wOwoKfQoKYm9vbCBJRUVFZG91YmxlOjpvcGVyYXRvciE9IChj b25zdCBJRUVFZG91YmxlIG9wKSBjb25zdAp7CgoKCgogICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ap OwoKfQoKSUVFRWRvdWJsZSBJRUVFZG91YmxlOjpvcGVyYXRvcisgKGNvbnN0IElFRUVkb3VibGUg b3ApIGNvbnN0CnsKCgoKCiAgICBpZiAoSXNOYU4oKSB8fCBvcC5Jc05hTigpKQogICAgICAgIHJl dHVybiBOYU4oKTsKCgoKCgoKICAgIGlmIChJc0luZmluaXRlKCkpCiAgICAgICAgcmV0dXJuIG9w LklzSW5maW5pdGUoKSAmJiAoU2lnbigpICE9IG9wLlNpZ24oKSkgPyBOYU4oKSA6ICp0aGlzOwog ICAgaWYgKG9wLklzSW5maW5pdGUoKSkKICAgICAgICByZXR1cm4gb3A7CgoKCgogICAgaWYgKElz WmVybygpKQogICAgICAgIHJldHVybiAob3AuSXNaZXJvKCkpID8gKFNpZ24oKSAhPSBvcC5TaWdu KCkpID8gUE9TSVRJVkVfWkVSTygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiAqdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog b3A7CiAgICBpZiAob3AuSXNaZXJvKCkpCiAgICAgICAgcmV0dXJuICp0aGlzOwoKCgoKICAgIExv bmdJbnQgeCwgeSwgcm91bmQgPSAwOwogICAgaW50IGV4cHgsIGV4cHksIHNpZ254LCBzaWdueTsK CiAgICBleHB4ID0gU3BsaXRJbnRvKHgpOwogICAgZXhweSA9IG9wLlNwbGl0SW50byh5KTsKCiAg ICBzaWdueCA9IFNpZ24oKTsKICAgIHNpZ255ID0gb3AuU2lnbigpOwoKCiAgICBpZiAoZXhweCA+ IGV4cHkgKyA1NCkKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICBpZiAoZXhweSA+IGV4cHggKyA1 NCkKICAgICAgICByZXR1cm4gb3A7CgoKCgoKCiAgICBpZiAoc2lnbngpCiAgICAgICAgeCA9IC14 OwogICAgaWYgKHNpZ255KQogICAgICAgIHkgPSAteTsKCiAgICB4IDw8PSA4OwogICAgeSA8PD0g ODsKCiAgICBpZiAoZXhweCA+IGV4cHkpCiAgICB7CiAgICAgICAgcm91bmQgPSB5IDw8ICg2NCAr IGV4cHkgLSBleHB4KTsKICAgICAgICB5ID4+PSBleHB4IC0gZXhweTsKICAgIH0KICAgIGVsc2Ug aWYgKGV4cHkgPiBleHB4KQogICAgewogICAgICAgIHJvdW5kID0geCA8PCAoNjQgKyBleHB4IC0g ZXhweSk7CiAgICAgICAgeCA+Pj0gZXhweSAtIGV4cHg7CiAgICAgICAgZXhweCA9IGV4cHk7CiAg ICB9CgoKCgoKCiAgICB4ICs9IHk7CiAgICBpZiAocm91bmQgIT0gMCkKICAgICAgICB4IHw9IDE7 CgoKCgoKICAgIGlmICh4IDwgMCkKICAgIHsKICAgICAgICB4ID0gLXg7CiAgICAgICAgc2lnbngg PSAxOwogICAgfQogICAgZWxzZQogICAgICAgIHNpZ254ID0gMDsKCiAgICBpZiAoeCA9PSAwKQog ICAgICAgIHJldHVybiBzaWdueCA/IE5FR0FUSVZFX1pFUk8oKSA6IFBPU0lUSVZFX1pFUk8oKTsK CgoKCgoKICAgIHJldHVybiBOb3JtYWxpemUoc2lnbngsIGV4cHggLSA4LCAoVUxvbmdJbnQpIHgp OwoKfQoKSUVFRWRvdWJsZSBJRUVFZG91YmxlOjpvcGVyYXRvci0gKCkgY29uc3QKewoKCgoKICAg IGlmIChJc05hTigpKQogICAgICAgIHJldHVybiAqdGhpczsKICAgIHJldHVybiBJRUVFZG91Ymxl KEhpZ2hXb3JkKCkgXiBTSUdOX0JJVCwgTG93V29yZCgpKTsKCn0KCklFRUVkb3VibGUgSUVFRWRv dWJsZTo6b3BlcmF0b3IqIChjb25zdCBJRUVFZG91YmxlIG9wKSBjb25zdAp7CgoKCiAgICBpZiAo SXNOYU4oKSB8fCBvcC5Jc05hTigpKQogICAgICAgIHJldHVybiBOYU4oKTsKCiAgICBpbnQgc2ln biA9IFNpZ24oKSBeIG9wLlNpZ24oKTsKCgoKCiAgICBpZiAoSXNaZXJvKCkpCiAgICAgICAgcmV0 dXJuIG9wLklzSW5maW5pdGUoKSA/IE5hTigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6IHNpZ24gPyBORUdBVElWRV9aRVJPKCkgOiBQT1NJVElWRV9aRVJPKCk7CgogICAgaWYgKG9w LklzWmVybygpKQogICAgICAgIHJldHVybiBJc0luZmluaXRlKCkgPyBOYU4oKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiBzaWduID8gTkVHQVRJVkVfWkVSTygpIDogUE9TSVRJVkVfWkVS TygpOwoKICAgIGlmIChJc0luZmluaXRlKCkgfHwgb3AuSXNJbmZpbml0ZSgpKQogICAgICAgIHJl dHVybiBzaWduID8gTkVHQVRJVkVfSU5GSU5JVFkoKSA6IFBPU0lUSVZFX0lORklOSVRZKCk7CgoK CgogICAgVUxvbmdJbnQgeCwgeSwgeiwgdywgcHIxLCBwcjI7CiAgICB1NCByb3VuZDsKICAgIGlu dCBleHBvbmVudDsKCiAgICBleHBvbmVudCA9IFNwbGl0SW50byh4KSArIG9wLlNwbGl0SW50byh5 KTsKCgoKCgoKICAgIHogPSBVTG9uZ0ludCh4Lkxvd1dvcmQoKSk7CiAgICB3ID0gVUxvbmdJbnQo eS5Mb3dXb3JkKCkpOwogICAgeCA+Pj0gMzI7CiAgICB5ID4+PSAzMjsKCiAgICBwcjEgPSB6ICog dzsKICAgIHByMiA9IHogKiB5ICsgeCAqIHcgKyBwcjEuSGlnaFdvcmQoKTsKICAgIHJvdW5kID0g cHIxLkxvd1dvcmQoKTsKICAgIHggPSAoeCAqIHkpIDw8IDIwOwoKICAgIHJvdW5kIHw9IHByMi5M b3dXb3JkKCkgJiAweEZGRjsKICAgIHByMiA+Pj0gMTI7CgogICAgeCArPSBwcjIgfCAocm91bmQg PyAxIDogMCk7CgogICAgcmV0dXJuIE5vcm1hbGl6ZShzaWduLCBleHBvbmVudCAtIDgsIHgpOwoK fQoKSUVFRWRvdWJsZSBJRUVFZG91YmxlOjpvcGVyYXRvci8gKGNvbnN0IElFRUVkb3VibGUgb3Ap IGNvbnN0CnsKCgoKCgoKCiAgICBpZiAoSXNOYU4oKSB8fCBvcC5Jc05hTigpKQogICAgICAgIHJl dHVybiBOYU4oKTsKCiAgICBpbnQgc2lnbiA9IFNpZ24oKSBeIG9wLlNpZ24oKTsKCgoKCgogICAg aWYgKElzSW5maW5pdGUoKSkKICAgICAgICByZXR1cm4gb3AuSXNJbmZpbml0ZSgpID8gTmFOKCkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2lnbiA/IE5FR0FUSVZFX0lORklOSVRZ KCkgOiBQT1NJVElWRV9JTkZJTklUWSgpOwoKICAgIGlmIChvcC5Jc0luZmluaXRlKCkpCiAgICAg ICAgcmV0dXJuIHNpZ24gPyBORUdBVElWRV9aRVJPKCkgOiBQT1NJVElWRV9aRVJPKCk7CgogICAg aWYgKElzWmVybygpKQogICAgICAgIHJldHVybiBvcC5Jc1plcm8oKSA/IE5hTigpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIDogc2lnbiA/IE5FR0FUSVZFX1pFUk8oKSA6IFBPU0lUSVZFX1pF Uk8oKTsKCiAgICBpZiAob3AuSXNaZXJvKCkpCiAgICAgICAgcmV0dXJuIHNpZ24gPyBORUdBVElW RV9JTkZJTklUWSgpIDogUE9TSVRJVkVfSU5GSU5JVFkoKTsKCgoKCiAgICBVTG9uZ0ludCB4LCB5 OwogICAgaW50IGV4cG9uZW50OwoKICAgIGV4cG9uZW50ID0gU3BsaXRJbnRvKHgpIC0gb3AuU3Bs aXRJbnRvKHkpOwoKICAgIFVMb25nSW50IG1hc2sgKDB4ODAwMDAwMDAsIDB4MDAwMDAwMDApLAog ICAgICAgICAgICAgcmVzdWx0KDB4MDAwMDAwMDAsIDB4MDAwMDAwMDApOwoKCgogICAgaWYgKHgg PCB5KQogICAgewogICAgICAgIHggPDw9IDE7CiAgICAgICAgZXhwb25lbnQtLTsKICAgIH0KCgoK CgoKICAgIHdoaWxlIChtYXNrICE9IDApCiAgICB7CiAgICAgICAgaWYgKHggPj0geSkKICAgICAg ICB7CiAgICAgICAgICAgIHJlc3VsdCArPSBtYXNrOwogICAgICAgICAgICB4IC09IHk7CiAgICAg ICAgICAgIGlmICh4ID09IDApCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAg ICAgeCA8PD0gMTsKICAgICAgICBtYXNrID4+PSAxOwogICAgfQoKICAgIHJldHVybiBOb3JtYWxp emUoc2lnbiwgZXhwb25lbnQgLSAxMSwgcmVzdWx0KTsKCn0KCklFRUVkb3VibGUgSUVFRWRvdWJs ZTo6b3BlcmF0b3IlIChjb25zdCBJRUVFZG91YmxlIG9wKSBjb25zdAp7CgoKCgogICAgaWYgKElz TmFOKCkgfHwgb3AuSXNOYU4oKSkKICAgICAgICByZXR1cm4gTmFOKCk7CgoKCgoKICAgIGlmIChJ c0luZmluaXRlKCkgfHwgb3AuSXNaZXJvKCkpCiAgICAgICAgcmV0dXJuIE5hTigpOwoKICAgIGlm IChJc1plcm8oKSB8fCBvcC5Jc0luZmluaXRlKCkpCiAgICAgICAgcmV0dXJuICp0aGlzOwoKCgoK CgogICAgaW50IHNpZ24gPSBTaWduKCk7CiAgICBVTG9uZ0ludCB4LCB5OwogICAgaW50IGV4cHks IGV4cG9uZW50OwogICAgTG9uZ0ludCB6OwoKICAgIGV4cHkgPSBvcC5TcGxpdEludG8oeSk7CiAg ICBleHBvbmVudCA9IFNwbGl0SW50byh4KSAtIGV4cHk7CgogICAgaWYgKGV4cG9uZW50IDwgMCB8 fCAoZXhwb25lbnQgPT0gMCAmJiB4IDwgeSkpCiAgICAgICAgcmV0dXJuICp0aGlzOwoKICAgIHdo aWxlIChleHBvbmVudC0tKQogICAgewogICAgICAgIHogPSB4IC0geTsKICAgICAgICBpZiAoeiA8 IDApCiAgICAgICAgICAgIHggPDw9IDE7CiAgICAgICAgZWxzZSBpZiAoeiA9PSAwKQogICAgICAg ICAgICByZXR1cm4gc2lnbiA/IE5FR0FUSVZFX1pFUk8oKSA6IFBPU0lUSVZFX1pFUk8oKTsKICAg ICAgICBlbHNlCiAgICAgICAgICAgIHggPSB6ICsgejsKICAgIH0KICAgIHogPSB4IC0geTsKICAg IGlmICh6ID49IDApCiAgICAgICAgeCA9IHo7CgogICAgaWYgKHggPT0gMCkKICAgICAgICByZXR1 cm4gc2lnbiA/IE5FR0FUSVZFX1pFUk8oKSA6IFBPU0lUSVZFX1pFUk8oKTsKICAgIHJldHVybiBO b3JtYWxpemUoc2lnbiwgZXhweSwgeCk7Cgp9Cgpib29sIElFRUVkb3VibGU6Om9wZXJhdG9yPCAo Y29uc3QgSUVFRWRvdWJsZSBvcCkgY29uc3QKewoKCgoKICAgIGlmIChJc05hTigpIHx8IG9wLklz TmFOKCkpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKElzWmVybygpKQogICAgICAgIHJl dHVybiBvcC5Jc1plcm8oKSA/IGZhbHNlIDogb3AuSXNQb3NpdGl2ZSgpOwogICAgaWYgKG9wLklz WmVybygpKQogICAgICAgIHJldHVybiBJc05lZ2F0aXZlKCk7CgogICAgdTQgYSA9IEhpZ2hXb3Jk KCksIGIgPSBvcC5IaWdoV29yZCgpOwogICAgcmV0dXJuIChhIDwgYikgfHwgKChhID09IGIpICYm IExvd1dvcmQoKSA8IG9wLkxvd1dvcmQoKSk7Cgp9Cgpib29sIElFRUVkb3VibGU6Om9wZXJhdG9y PD0gKGNvbnN0IElFRUVkb3VibGUgb3ApIGNvbnN0CnsKCgoKCiAgICByZXR1cm4gKnRoaXMgPCBv cCB8fCAqdGhpcyA9PSBvcDsKCn0KCmJvb2wgSUVFRWRvdWJsZTo6b3BlcmF0b3I+IChjb25zdCBJ RUVFZG91YmxlIG9wKSBjb25zdAp7CgoKCgogICAgaWYgKElzTmFOKCkgfHwgb3AuSXNOYU4oKSkK ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoSXNaZXJvKCkpCiAgICAgICAgcmV0dXJuIG9w LklzWmVybygpID8gZmFsc2UgOiBvcC5Jc05lZ2F0aXZlKCk7CiAgICBpZiAob3AuSXNaZXJvKCkp CiAgICAgICAgcmV0dXJuIElzUG9zaXRpdmUoKTsKCiAgICB1NCBhID0gSGlnaFdvcmQoKSwgYiA9 IG9wLkhpZ2hXb3JkKCk7CiAgICByZXR1cm4gKGEgPiBiKSB8fCAoKGEgPT0gYikgJiYgTG93V29y ZCgpID4gb3AuTG93V29yZCgpKTsKCn0KCmJvb2wgSUVFRWRvdWJsZTo6b3BlcmF0b3I+PSAoY29u c3QgSUVFRWRvdWJsZSBvcCkgY29uc3QKewoKCgoKICAgIHJldHVybiAqdGhpcyA+IG9wIHx8ICp0 aGlzID09IG9wOwoKfQojIDI0MTggImRvdWJsZS5jcHAiCmNvbnN0IHU0IEJpZ0ludDo6Zml2ZXNb XSA9IHsKICAgIDEsIDUsIDI1LCAxMjUsIDYyNSwgMzEyNSwgMTU2MjUsIDc4MTI1Cn07CmNvbnN0 IEJpZ0ludCAqQmlnSW50OjpiaWdmaXZlc1tdID0gewogICAgX19udWxsLCBfX251bGwsIF9fbnVs bCwgX19udWxsLCBfX251bGwsIF9fbnVsbCwgX19udWxsLCBfX251bGwKfTsKCgpCaWdJbnQ6OkJp Z0ludChjb25zdCBJRUVFZmxvYXQgJmYsIGludCAmZSwgaW50ICZiaXRzKSA6IGRhdGEoX19udWxs KQp7CiAgICBpbnQgZmUsIGs7CiAgICB1NCB6OwogICAgcmVzaXplKDApOwogICAgeiA9IGYuRnJh Y3Rpb24oKTsKICAgIGZlID0gZi5FeHBvbmVudCgpOwogICAgayA9IGxvMGJpdHMoeik7CiAgICBk YXRhWzBdID0gejsKICAgIHdkcyA9IDE7CiAgICBpZiAoZmUgKyBJRUVFZmxvYXQ6OkJpYXMoKSkK ICAgIHsKICAgICAgICBlID0gayArIGZlIC0gSUVFRWZsb2F0OjpGcmFjdFNpemUoKTsKICAgICAg ICBiaXRzID0gSUVFRWZsb2F0OjpGcmFjdFNpemUoKSAtIGsgKyAxOwogICAgfQogICAgZWxzZQog ICAgewogICAgICAgIGUgPSBrICsgZmUgLSBJRUVFZmxvYXQ6OkZyYWN0U2l6ZSgpICsgMTsKICAg ICAgICBiaXRzID0gMzIgLSBoaTBiaXRzKHopOwogICAgfQp9CgpCaWdJbnQ6OkJpZ0ludChjb25z dCBJRUVFZG91YmxlICZkLCBpbnQgJmUsIGludCAmYml0cykgOiBkYXRhKF9fbnVsbCkKewogICAg aW50IGRlLCBrOwogICAgTG9uZ0ludCB4OwogICAgdTQgeSwgejsKCiAgICByZXNpemUoMSk7CiAg ICB4ID0gZC5GcmFjdGlvbigpOwogICAgeiA9IHguSGlnaFdvcmQoKTsKICAgIGRlID0gZC5FeHBv bmVudCgpOwogICAgaWYgKCh5ID0geC5Mb3dXb3JkKCkpICE9IDApCiAgICB7CiAgICAgICAgaWYg KChrID0gbG8wYml0cyh5KSkgIT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIGRhdGFbMF0gPSB5 IHwgeiA8PCAzMiAtIGs7CiAgICAgICAgICAgIHogPj49IGs7CiAgICAgICAgfQogICAgICAgIGVs c2UKICAgICAgICAgICAgZGF0YVswXSA9IHk7CiAgICAgICAgd2RzID0gKGRhdGFbMV0gPSB6KSA/ IDIgOiAxOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGsgPSBsbzBiaXRzKHopICsgMzI7 CiAgICAgICAgZGF0YVswXSA9IHo7CiAgICAgICAgd2RzID0gMTsKICAgIH0KICAgIGlmIChkZSAr IElFRUVkb3VibGU6OkJpYXMoKSkKICAgIHsKICAgICAgICBlID0gayArIGRlIC0gSUVFRWRvdWJs ZTo6RnJhY3RTaXplKCk7CiAgICAgICAgYml0cyA9IElFRUVkb3VibGU6OkZyYWN0U2l6ZSgpIC0g ayArIDE7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgZSA9IGsgKyBkZSAtIElFRUVkb3Vi bGU6OkZyYWN0U2l6ZSgpICsgMTsKICAgICAgICBiaXRzID0gMzIgKiB3ZHMgLSBoaTBiaXRzKGRh dGFbd2RzIC0gMV0pOwogICAgfQp9CgpCaWdJbnQ6OkJpZ0ludChjb25zdCBjaGFyICpzLCBpbnQg bmQwLCBpbnQgbmQsIHU0IHN0YXJ0LCBpbnQgc3RhcnRzaXplKSA6CiAgICBkYXRhKF9fbnVsbCkK ewogICAgaW50IGksIGs7CiAgICB1NCB4LCB5OwogICAgeCA9IChuZCArIDgpIC8gOTsKICAgIGZv ciAoayA9IDAsIHkgPSAxOyB4ID4geTsgeSA8PD0gMSwgaysrKTsKCiAgICByZXNpemUoayk7CiAg ICBkYXRhWzBdID0gc3RhcnQ7CiAgICB3ZHMgPSAxOwogICAgaSA9IHN0YXJ0c2l6ZTsKICAgIGlm IChzdGFydHNpemUgPCBuZDApCiAgICB7CiAgICAgICAgcyArPSBzdGFydHNpemU7CiAgICAgICAg ZG8KICAgICAgICAgICAgbXVsdGFkZCgxMCwgKnMrKyAtIFVfMCk7CiAgICAgICAgd2hpbGUgKCsr aSA8IG5kMCk7CiAgICAgICAgcysrOwogICAgfQogICAgZWxzZQogICAgICAgIHMgKz0gc3RhcnRz aXplICsgMTsKCiAgICBmb3IgKCA7IGkgPCBuZDsgaSsrKQogICAgICAgIG11bHRhZGQoMTAsICpz KysgLSBVXzApOwp9CgpCaWdJbnQgJkJpZ0ludDo6b3BlcmF0b3IgPShjb25zdCBCaWdJbnQgJmIp CnsKICAgIGsgPSBiLms7CiAgICBtYXh3ZHMgPSBiLm1heHdkczsKICAgIG5lZyA9IGIubmVnOwog ICAgd2RzID0gYi53ZHM7CiAgICBkYXRhID0gbmV3IHU0W21heHdkc107CiAgICBtZW1jcHkoZGF0 YSwgYi5kYXRhLCB3ZHMgKiBzaXplb2YodTQpKTsKICAgIHJldHVybiAqdGhpczsKfQoKaW50IEJp Z0ludDo6aGkwYml0cyh1NCB4KQp7CiAgICBpbnQgayA9IDA7CiAgICBpZiAoISAoeCAmIDB4ZmZm ZjAwMDApKQogICAgewogICAgICAgIGsgPSAxNjsKICAgICAgICB4IDw8PSAxNjsKICAgIH0KICAg IGlmICghICh4ICYgMHhmZjAwMDAwMCkpCiAgICB7CiAgICAgICAgayArPSA4OwogICAgICAgIHgg PDw9IDg7CiAgICB9CiAgICBpZiAoISAoeCAmIDB4ZjAwMDAwMDApKQogICAgewogICAgICAgIGsg Kz0gNDsKICAgICAgICB4IDw8PSA0OwogICAgfQogICAgaWYgKCEgKHggJiAweGMwMDAwMDAwKSkK ICAgIHsKICAgICAgICBrICs9IDI7CiAgICAgICAgeCA8PD0gMjsKICAgIH0KICAgIGlmICghICh4 ICYgMHg4MDAwMDAwMCkpCiAgICB7CiAgICAgICAgaysrOwogICAgICAgIGlmICghICh4ICYgMHg0 MDAwMDAwMCkpCiAgICAgICAgICAgIHJldHVybiAzMjsKICAgIH0KICAgIHJldHVybiBrOwp9Cgpp bnQgQmlnSW50OjpsbzBiaXRzKHU0ICZ5KQp7CiAgICBpbnQgazsKICAgIGlmICh5ICYgNykKICAg IHsKICAgICAgICBpZiAoeSAmIDEpCiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGlmICh5 ICYgMikKICAgICAgICB7CiAgICAgICAgICAgIHkgPj49IDE7CiAgICAgICAgICAgIHJldHVybiAx OwogICAgICAgIH0KICAgICAgICB5ID4+PSAyOwogICAgICAgIHJldHVybiAyOwogICAgfQogICAg ayA9IDA7CiAgICBpZiAoISAoeSAmIDB4ZmZmZikpCiAgICB7CiAgICAgICAgayA9IDE2OwogICAg ICAgIHkgPj49IDE2OwogICAgfQogICAgaWYgKCEgKHkgJiAweGZmKSkKICAgIHsKICAgICAgICBr ICs9IDg7CiAgICAgICAgeSA+Pj0gODsKICAgIH0KICAgIGlmICghICh5ICYgMHhmKSkKICAgIHsK ICAgICAgICBrICs9IDQ7CiAgICAgICAgeSA+Pj0gNDsKICAgIH0KICAgIGlmICghICh5ICYgMHgz KSkKICAgIHsKICAgICAgICBrICs9IDI7CiAgICAgICAgeSA+Pj0gMjsKICAgIH0KICAgIGlmICgh ICh5ICYgMSkpCiAgICB7CiAgICAgICAgaysrOwogICAgICAgIHkgPj49IDE7CiAgICAgICAgaWYg KCEgeSkKICAgICAgICAgICAgcmV0dXJuIDMyOwogICAgfQogICAgcmV0dXJuIGs7Cn0KCkJpZ0lu dCAmQmlnSW50OjpvcGVyYXRvciArKGNvbnN0IHVuc2lnbmVkIG9wKSBjb25zdAp7CiAgICBpbnQg aSA9IDA7CiAgICB1NCBjYXJyeSA9IG9wOwogICAgVUxvbmdJbnQgc3VtOwogICAgQmlnSW50ICpy ZXN1bHQgPSBuZXcgQmlnSW50KCp0aGlzKTsKICAgIHU0ICp4ID0gcmVzdWx0IC0+IGRhdGE7Cgog ICAgZG8KICAgIHsKICAgICAgICBzdW0gPSBVTG9uZ0ludCgqeCkgKyBjYXJyeTsKICAgICAgICBj YXJyeSA9IHN1bS5IaWdoV29yZCgpOwogICAgICAgICp4KysgPSBzdW0uTG93V29yZCgpOwogICAg fSB3aGlsZSAoY2FycnkgJiYgKytpIDwgd2RzKTsKICAgIGlmIChjYXJyeSAmJiBpID09IHdkcykK ICAgIHsKICAgICAgICBpZiAod2RzID09IG1heHdkcykKICAgICAgICB7CiAgICAgICAgICAgIHJl c3VsdCAtPiBtYXh3ZHMgPSAxIDw8ICgrK3Jlc3VsdCAtPiBrKTsKICAgICAgICAgICAgeCA9IG5l dyB1NFtyZXN1bHQgLT4gbWF4d2RzXTsKICAgICAgICAgICAgbWVtY3B5KHgsIHJlc3VsdCAtPiBk YXRhLCB3ZHMgKiBzaXplb2YodTQpKTsKICAgICAgICAgICAgZGVsZXRlIHJlc3VsdCAtPiBkYXRh OwogICAgICAgICAgICByZXN1bHQgLT4gZGF0YSA9IHg7CiAgICAgICAgfQogICAgICAgIHJlc3Vs dCAtPiBkYXRhW3Jlc3VsdCAtPiB3ZHMrK10gPSBjYXJyeTsKICAgIH0KICAgIHJldHVybiAqcmVz dWx0Owp9CgpCaWdJbnQgJkJpZ0ludDo6b3BlcmF0b3IgLShjb25zdCBCaWdJbnQgJm9wKSBjb25z dAp7CiAgICBjb25zdCBCaWdJbnQgKmEgPSB0aGlzLCAqYiA9ICZvcDsKICAgIEJpZ0ludCAqYyA9 IF9fbnVsbDsKICAgIGludCBpLCB3YSwgd2I7CiAgICB1NCAqeGEsICp4YWUsICp4YiwgKnhiZSwg KnhjOwogICAgdTQgYm9ycm93OwogICAgVUxvbmdJbnQgeTsKCiAgICBpID0gYSAtPiBjb21wYXJl VG8ob3ApOwogICAgaWYgKCEgaSkKICAgICAgICByZXR1cm4gKm5ldyBCaWdJbnQoMCk7CiAgICBp ZiAoaSA8IDApCiAgICB7CiAgICAgICAgY29uc3QgQmlnSW50ICp0bXAgPSBhOwogICAgICAgIGEg PSBiOwogICAgICAgIGIgPSB0bXA7CiAgICAgICAgaSA9IDE7CiAgICB9CiAgICBlbHNlCiAgICAg ICAgaSA9IDA7CiAgICBjID0gbmV3IEJpZ0ludCgwKTsKICAgIGMgLT4gcmVzaXplKGEgLT4gayk7 CiAgICBjIC0+IG5lZyA9IGkgIT0gMDsKICAgIHdhID0gYSAtPiB3ZHM7CiAgICB4YSA9IGEgLT4g ZGF0YTsKICAgIHhhZSA9IHhhICsgd2E7CiAgICB3YiA9IGIgLT4gd2RzOwogICAgeGIgPSBiIC0+ IGRhdGE7CiAgICB4YmUgPSB4YiArIHdiOwogICAgeGMgPSBjIC0+IGRhdGE7CiAgICBib3Jyb3cg PSAwOwogICAgZG8KICAgIHsKICAgICAgICB5ID0gVUxvbmdJbnQoKnhhKyspIC0gKnhiKysgLSBi b3Jyb3c7CiAgICAgICAgYm9ycm93ID0geS5IaWdoV29yZCgpICYgMTsKICAgICAgICAqeGMrKyA9 IHkuTG93V29yZCgpOwogICAgfSB3aGlsZSAoeGIgPCB4YmUpOwogICAgd2hpbGUgKHhhIDwgeGFl KQogICAgewogICAgICAgIHkgPSBVTG9uZ0ludCgqeGErKykgLSBib3Jyb3c7CiAgICAgICAgYm9y cm93ID0geS5IaWdoV29yZCgpICYgMTsKICAgICAgICAqeGMrKyA9IHkuTG93V29yZCgpOwogICAg fQogICAgd2hpbGUgKCEqLS14YykKICAgICAgICB3YS0tOwogICAgYyAtPiB3ZHMgPSB3YTsKICAg IHJldHVybiAqYzsKfQoKQmlnSW50ICZCaWdJbnQ6Om9wZXJhdG9yICoodW5zaWduZWQgb3ApIGNv bnN0CnsKICAgIGludCBpID0gMDsKICAgIHU0IGNhcnJ5ID0gMDsKICAgIFVMb25nSW50IHByb2R1 Y3Q7CiAgICBCaWdJbnQgKnJlc3VsdCA9IG5ldyBCaWdJbnQoKnRoaXMpOwogICAgdTQgKnggPSBy ZXN1bHQgLT4gZGF0YTsKICAgIFVMb25nSW50IGZhY3RvciA9IG9wOwoKICAgIGRvCiAgICB7CiAg ICAgICAgcHJvZHVjdCA9IFVMb25nSW50KCp4KSAqIGZhY3RvciArIGNhcnJ5OwogICAgICAgIGNh cnJ5ID0gcHJvZHVjdC5IaWdoV29yZCgpOwogICAgICAgICp4KysgPSBwcm9kdWN0Lkxvd1dvcmQo KTsKICAgIH0gd2hpbGUgKCsraSA8IHdkcyk7CiAgICBpZiAoY2FycnkpCiAgICB7CiAgICAgICAg aWYgKHdkcyA9PSBtYXh3ZHMpCiAgICAgICAgewogICAgICAgICAgICByZXN1bHQgLT4gbWF4d2Rz ID0gMSA8PCAoKytyZXN1bHQgLT4gayk7CiAgICAgICAgICAgIHggPSBuZXcgdTRbcmVzdWx0IC0+ IG1heHdkc107CiAgICAgICAgICAgIG1lbWNweSh4LCByZXN1bHQgLT4gZGF0YSwgd2RzICogc2l6 ZW9mKHU0KSk7CiAgICAgICAgICAgIGRlbGV0ZSByZXN1bHQgLT4gZGF0YTsKICAgICAgICAgICAg cmVzdWx0IC0+IGRhdGEgPSB4OwogICAgICAgIH0KICAgICAgICByZXN1bHQgLT4gZGF0YVtyZXN1 bHQgLT4gd2RzKytdID0gY2Fycnk7CiAgICB9CiAgICByZXR1cm4gKnJlc3VsdDsKfQoKQmlnSW50 ICZCaWdJbnQ6Om9wZXJhdG9yICooY29uc3QgQmlnSW50ICZvcCkgY29uc3QKewogICAgY29uc3Qg QmlnSW50ICphID0gdGhpcywgKmIgPSAmb3A7CiAgICBCaWdJbnQgKmM7CiAgICBpbnQgazsKICAg IGludCB3YSwgd2IsIHdjOwogICAgdTQgKngsICp4YSwgKnhhZSwgKnhiLCAqeGJlLCAqeGMsICp4 YzA7CiAgICB1NCB5LCBjYXJyeTsKICAgIFVMb25nSW50IHo7CgogICAgaWYgKGEgLT4gd2RzIDwg YiAtPiB3ZHMpCiAgICB7CiAgICAgICAgY29uc3QgQmlnSW50ICp0bXAgPSBhOwogICAgICAgIGEg PSBiOwogICAgICAgIGIgPSB0bXA7CiAgICB9CiAgICBrID0gYSAtPiBrOwogICAgd2EgPSBhIC0+ IHdkczsKICAgIHdiID0gYiAtPiB3ZHM7CiAgICB3YyA9IHdhICsgd2I7CiAgICBpZiAod2MgPiBh IC0+IG1heHdkcykKICAgICAgICBrKys7CiAgICBjID0gbmV3IEJpZ0ludCgwKTsKICAgIGMgLT4g cmVzaXplKGspOwogICAgYyAtPiBuZWcgPSBhIC0+IG5lZyBeIGIgLT4gbmVnOwogICAgZm9yICh4 ID0gYyAtPiBkYXRhLCB4YSA9IHggKyB3YzsgeCA8IHhhOyB4KyspCiAgICAgICAgKnggPSAwOwog ICAgeGEgPSBhIC0+IGRhdGE7CiAgICB4YWUgPSB4YSArIHdhOwogICAgeGIgPSBiIC0+IGRhdGE7 CiAgICB4YmUgPSB4YiArIHdiOwogICAgeGMwID0gYyAtPiBkYXRhOwogICAgZm9yICggOyB4YiA8 IHhiZTsgeGMwKyspCiAgICB7CiAgICAgICAgaWYgKCh5ID0gKnhiKyspICE9IDApCiAgICAgICAg ewogICAgICAgICAgICB4ID0geGE7CiAgICAgICAgICAgIHhjID0geGMwOwogICAgICAgICAgICBj YXJyeSA9IDA7CiAgICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHog PSBVTG9uZ0ludCgqeCsrKSAqIHkgKyAqeGMgKyBjYXJyeTsKICAgICAgICAgICAgICAgIGNhcnJ5 ID0gei5IaWdoV29yZCgpOwogICAgICAgICAgICAgICAgKnhjKysgPSB6Lkxvd1dvcmQoKTsKICAg ICAgICAgICAgfSB3aGlsZSAoeCA8IHhhZSk7CiAgICAgICAgICAgICp4YyA9IGNhcnJ5OwogICAg ICAgIH0KICAgIH0KICAgIGZvciAoeGMwID0gYyAtPiBkYXRhLCB4YyA9IHhjMCArIHdjOyB3YyA+ IDAgJiYgISotLXhjOyAtLXdjKTsKCiAgICBjIC0+IHdkcyA9IHdjOwogICAgcmV0dXJuICpjOwp9 CgpCaWdJbnQgJkJpZ0ludDo6b3BlcmF0b3IgPDwodW5zaWduZWQgb3ApIGNvbnN0CnsKICAgIGlu dCBpLCBrMSwgbiwgbjE7CiAgICB1NCAqeCwgKngxLCAqeGUsIHo7CiAgICBuID0gb3AgPj4gNTsK ICAgIGsxID0gazsKICAgIG4xID0gbiArIHdkcyArIDE7CiAgICBmb3IgKGkgPSBtYXh3ZHM7IG4x ID4gaTsgaSA8PD0gMSkKICAgICAgICBrMSsrOwogICAgQmlnSW50ICpyZXN1bHQgPSBuZXcgQmln SW50KCp0aGlzKTsKICAgIHJlc3VsdCAtPiBtYXh3ZHMgPSAxIDw8IGsxOwogICAgcmVzdWx0IC0+ IGsgPSBrMTsKICAgIGRlbGV0ZSByZXN1bHQgLT4gZGF0YTsKICAgIHJlc3VsdCAtPiBkYXRhID0g eDEgPSBuZXcgdTRbcmVzdWx0IC0+IG1heHdkc107CiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsr KQogICAgICAgICp4MSsrID0gMDsKICAgIHggPSBkYXRhOwogICAgeGUgPSB4ICsgd2RzOwogICAg aWYgKG9wICY9IDB4MWYpCiAgICB7CiAgICAgICAgazEgPSAzMiAtIG9wOwogICAgICAgIHogPSAw OwogICAgICAgIGRvCiAgICAgICAgewogICAgICAgICAgICAqeDErKyA9ICp4IDw8IG9wIHwgejsK ICAgICAgICAgICAgeiA9ICp4KysgPj4gazE7CiAgICAgICAgfSB3aGlsZSAoeCA8IHhlKTsKICAg ICAgICBpZiAoKCp4MSA9IHopICE9IDApCiAgICAgICAgICAgICsrbjE7CiAgICB9CiAgICBlbHNl CiAgICAgICAgZG8KICAgICAgICAgICAgKngxKysgPSAqeCsrOwogICAgICAgIHdoaWxlICh4IDwg eGUpOwogICAgcmVzdWx0IC0+IHdkcyA9IG4xIC0gMTsKICAgIHJldHVybiAqcmVzdWx0Owp9CgpC aWdJbnQgJkJpZ0ludDo6bXVsdGFkZCh1bnNpZ25lZCBtLCB1bnNpZ25lZCBhKQp7CiAgICBpbnQg aSA9IDA7CiAgICB1NCAqeCA9IGRhdGE7CiAgICB1NCBjYXJyeSA9IGE7CiAgICBVTG9uZ0ludCBw cm9kdWN0OwogICAgVUxvbmdJbnQgZmFjdG9yID0gbTsKCiAgICBkbwogICAgewogICAgICAgIHBy b2R1Y3QgPSBVTG9uZ0ludCgqeCkgKiBmYWN0b3IgKyBjYXJyeTsKICAgICAgICBjYXJyeSA9IHBy b2R1Y3QuSGlnaFdvcmQoKTsKICAgICAgICAqeCsrID0gcHJvZHVjdC5Mb3dXb3JkKCk7CiAgICB9 IHdoaWxlICgrK2kgPCB3ZHMpOwogICAgaWYgKGNhcnJ5KQogICAgewogICAgICAgIGlmICh3ZHMg PT0gbWF4d2RzKQogICAgICAgIHsKICAgICAgICAgICAgbWF4d2RzID0gMSA8PCAoKytrKTsKICAg ICAgICAgICAgeCA9IG5ldyB1NFttYXh3ZHNdOwogICAgICAgICAgICBtZW1jcHkoeCwgZGF0YSwg d2RzICogc2l6ZW9mKHU0KSk7CiAgICAgICAgICAgIGRlbGV0ZSBkYXRhOwogICAgICAgICAgICBk YXRhID0geDsKICAgICAgICB9CiAgICAgICAgZGF0YVt3ZHMrK10gPSBjYXJyeTsKICAgIH0KICAg IHJldHVybiAqdGhpczsKfQoKQmlnSW50ICZCaWdJbnQ6OnBvdzVtdWx0KHVuc2lnbmVkIGspCnsK ICAgIGNvbnN0IEJpZ0ludCAqcDU7CiAgICBpbnQgaTsKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAo KGsgPCAweDgwMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJrIDwgMHg4MDAiLCAiZG91YmxlLmNw cCIsIDI4MzcsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgaWYgKChpID0gayAmIDB4 NykgIT0gMCkKICAgICAgICAqdGhpcyAqPSBmaXZlc1tpXTsKICAgIGlmICghIChrID4+PSAzKSkK ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICBpZiAoISAocDUgPSBiaWdmaXZlc1tpID0gMF0pKQog ICAgICAgIHA1ID0gYmlnZml2ZXNbaV0gPSBuZXcgQmlnSW50KDM5MDYyNSk7CiAgICB3aGlsZSAo dHJ1ZSkKICAgIHsKICAgICAgICBpZiAoayAmIDEpCiAgICAgICAgICAgICp0aGlzICo9ICpwNTsK ICAgICAgICBpZiAoISAoayA+Pj0gMSkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGlmICgh IChwNSA9IGJpZ2ZpdmVzWysraV0pKQogICAgICAgICAgICBwNSA9IGJpZ2ZpdmVzW2ldID0gbmV3 IEJpZ0ludCgqYmlnZml2ZXNbaS0xXSAqICpiaWdmaXZlc1tpLTFdKTsKICAgIH0KICAgIHJldHVy biAqdGhpczsKfQoKaW50IEJpZ0ludDo6Y29tcGFyZVRvKGNvbnN0IEJpZ0ludCAmYikgY29uc3QK ewogICAgdTQgKnhhLCAqeGEwLCAqeGIsICp4YjA7CiAgICBpbnQgaSwgajsKICAgIGkgPSB3ZHM7 CiAgICBqID0gYi53ZHM7CiAgICBpZiAoaSAtPSBqKQogICAgICAgIHJldHVybiBpOwogICAgeGEw ID0gZGF0YTsKICAgIHhhID0geGEwICsgajsKICAgIHhiMCA9IGIuZGF0YTsKICAgIHhiID0geGIw ICsgajsKICAgIHdoaWxlICh4YSA+IHhhMCkKICAgICAgICBpZiAoKi0teGEgIT0gKi0teGIpCiAg ICAgICAgICAgIHJldHVybiAqeGEgPCAqeGIgPyAtMSA6IDE7CiAgICByZXR1cm4gMDsKfQoKaW50 IEJpZ0ludDo6cXVvcmVtKGNvbnN0IEJpZ0ludCAmUykKewogICAgaW50IG47CiAgICB1NCAqYngs ICpieGUsIHEsICpzeCwgKnN4ZTsKICAgIHU0IGJvcnJvdywgY2Fycnk7CiAgICBVTG9uZ0ludCB5 LCB5czsKICAgIG4gPSBTLndkczsKICAgIGlmICh3ZHMgPCBuKQogICAgICAgIHJldHVybiAwOwog ICAgc3ggPSBTLmRhdGE7CiAgICBzeGUgPSBzeCArIC0tbjsKICAgIGJ4ID0gZGF0YTsKICAgIGJ4 ZSA9IGJ4ICsgbjsKICAgIHEgPSAqYnhlIC8gKCpzeGUgKyAxKTsKICAgIGlmIChxKQogICAgewog ICAgICAgIGJvcnJvdyA9IDA7CiAgICAgICAgY2FycnkgPSAwOwogICAgICAgIGRvCiAgICAgICAg ewogICAgICAgICAgICB5cyA9IFVMb25nSW50KCpzeCsrKSAqIHEgKyBjYXJyeTsKICAgICAgICAg ICAgY2FycnkgPSB5cy5IaWdoV29yZCgpOwogICAgICAgICAgICB5ID0gVUxvbmdJbnQoKmJ4KSAt IHlzLkxvd1dvcmQoKSAtIGJvcnJvdzsKICAgICAgICAgICAgYm9ycm93ID0geS5IaWdoV29yZCgp ICYgMTsKICAgICAgICAgICAgKmJ4KysgPSB5Lkxvd1dvcmQoKTsKICAgICAgICB9IHdoaWxlIChz eCA8PSBzeGUpOwogICAgICAgIGlmICghKmJ4ZSkKICAgICAgICB7CiAgICAgICAgICAgIGJ4ID0g ZGF0YTsKICAgICAgICAgICAgd2hpbGUgKC0tYnhlID4gYnggJiYgISpieGUpCiAgICAgICAgICAg ICAgICAtLW47CiAgICAgICAgICAgIHdkcyA9IG47CiAgICAgICAgfQogICAgfQogICAgaWYgKGNv bXBhcmVUbyhTKSA+PSAwKQogICAgewogICAgICAgIHErKzsKICAgICAgICBib3Jyb3cgPSAwOwog ICAgICAgIGNhcnJ5ID0gMDsKICAgICAgICBieCA9IGRhdGE7CiAgICAgICAgc3ggPSBTLmRhdGE7 CiAgICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICAgIHlzID0gVUxvbmdJbnQoKnN4KyspICsg Y2Fycnk7CiAgICAgICAgICAgIGNhcnJ5ID0geXMuSGlnaFdvcmQoKTsKICAgICAgICAgICAgeSA9 IFVMb25nSW50KCpieCkgLSB5cy5Mb3dXb3JkKCkgLSBib3Jyb3c7CiAgICAgICAgICAgIGJvcnJv dyA9IHkuSGlnaFdvcmQoKSAmIDE7CiAgICAgICAgICAgICpieCsrID0geS5Mb3dXb3JkKCk7CiAg ICAgICAgfSB3aGlsZSAoc3ggPD0gc3hlKTsKICAgICAgICBieCA9IGRhdGE7CiAgICAgICAgYnhl ID0gYnggKyBuOwogICAgICAgIGlmICghKmJ4ZSkKICAgICAgICB7CiAgICAgICAgICAgIHdoaWxl ICgtLWJ4ZSA+IGJ4ICYmICEqYnhlKQogICAgICAgICAgICAgICAgLS1uOwogICAgICAgICAgICB3 ZHMgPSBuOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBxOwp9CgpJRUVFZmxvYXQgQmlnSW50 OjpGbG9hdFZhbHVlKCkgY29uc3QKewogICAgdTQgKnhhLCB5LCB6OwogICAgaW50IGs7CiAgICB4 YSA9IGRhdGEgKyB3ZHM7CiAgICB5ID0gKi0teGE7CiAgICBrID0gaGkwYml0cyh5KTsKICAgIGlm IChrIDwgOCkKICAgICAgICByZXR1cm4gSUVFRWZsb2F0KDB4M2Y4MDAwMDAgfCB5ID4+IDggLSBr KTsKICAgIHogPSB4YSA+IGRhdGEgPyAqLS14YSA6IDA7CiAgICBpZiAoayAtPSA4KQogICAgICAg IHJldHVybiBJRUVFZmxvYXQoMHgzZjgwMDAwMCB8IHkgPDwgayB8IHogPj4gMzIgLSBrKTsKICAg IGVsc2UKICAgICAgICByZXR1cm4gSUVFRWZsb2F0KDB4M2Y4MDAwMDAgfCB5KTsKfQoKSUVFRWRv dWJsZSBCaWdJbnQ6OkRvdWJsZVZhbHVlKCkgY29uc3QKewogICAgdTQgKnhhLCB3LCB5LCB6LCBo aSwgbG87CiAgICBpbnQgazsKICAgIHhhID0gZGF0YSArIHdkczsKICAgIHkgPSAqLS14YTsKICAg IGsgPSBoaTBiaXRzKHkpOwogICAgaWYgKGsgPCAxMSkKICAgIHsKICAgICAgICBoaSA9IDB4M2Zm MDAwMDAgfCB5ID4+IDExIC0gazsKICAgICAgICB3ID0geGEgPiBkYXRhID8gKi0teGEgOiAwOwog ICAgICAgIGxvID0geSA8PCAoMzItIDExKSArIGsgfCB3ID4+IDExIC0gazsKICAgICAgICByZXR1 cm4gSUVFRWRvdWJsZShoaSwgbG8pOwogICAgfQogICAgeiA9IHhhID4gZGF0YSA/ICotLXhhIDog MDsKICAgIGlmIChrIC09IDExKQogICAgewogICAgICAgIGhpID0gMHgzZmYwMDAwMCB8IHkgPDwg ayB8IHogPj4gMzIgLSBrOwogICAgICAgIHkgPSB4YSA+IGRhdGEgPyAqLS14YSA6IDA7CiAgICAg ICAgbG8gPSB6IDw8IGsgfCB5ID4+IDMyIC0gazsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAg ICBoaSA9IDB4M2ZmMDAwMDAgfCB5OwogICAgICAgIGxvID0gejsKICAgIH0KICAgIHJldHVybiBJ RUVFZG91YmxlKGhpLCBsbyk7Cn0K