From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8403 invoked by alias); 10 Feb 2003 00:26:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 8385 invoked by uid 71); 10 Feb 2003 00:26:00 -0000 Resent-Date: 10 Feb 2003 00:26:00 -0000 Resent-Message-ID: <20030210002600.8383.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, dohashi@floccinaucinihilipilification.net Received: (qmail 7454 invoked by uid 48); 10 Feb 2003 00:20:46 -0000 Message-Id: <20030210002046.7453.qmail@sources.redhat.com> Date: Mon, 10 Feb 2003 00:26:00 -0000 From: dohashi@floccinaucinihilipilification.net Reply-To: dohashi@floccinaucinihilipilification.net To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/9640: segfault while compiling X-SW-Source: 2003-02/txt/msg00443.txt.bz2 List-Id: >Number: 9640 >Category: c++ >Synopsis: segfault while compiling >Confidential: no >Severity: critical >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Mon Feb 10 00:26:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Darin Ohashi >Release: 3.2.1 >Organization: >Environment: Slackware-current. >Description: This preprocessed code cause a segfault when compiled with 3.2.1. This code also caused problems with 3.1 >How-To-Repeat: gcc >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="main.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="main.ii" IyAxICJtYWluLmNjIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMgMSAi bWFpbi5jYyIKCiMgMSAiVHJlZVRhYmxlLmgiIDEKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW50 LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv ZmVhdHVyZXMuaCIgMSAzCiMgMjkxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjkyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu aCIgMiAzCiMgMzIwICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9nbnUvc3R1YnMuaCIgMSAzCiMgMzIxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMg MjcgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2No YXIuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAzCiMgMSAiL3Vzci9pbmNs dWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAz CiMgMzcgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIGludDhf dDsKdHlwZWRlZiBzaG9ydCBpbnQgaW50MTZfdDsKdHlwZWRlZiBpbnQgaW50MzJfdDsKCgoKX19l eHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50NjRfdDsKCgoKCnR5cGVkZWYgdW5z aWduZWQgY2hhciB1aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1aW50MTZfdDsK CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90OwoKCgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRl ZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnQ2NF90OwoKCgoKCgp0eXBlZGVmIHNpZ25lZCBj aGFyIGludF9sZWFzdDhfdDsKdHlwZWRlZiBzaG9ydCBpbnQgaW50X2xlYXN0MTZfdDsKdHlwZWRl ZiBpbnQgaW50X2xlYXN0MzJfdDsKCgoKX19leHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBp bnQgaW50X2xlYXN0NjRfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnRfbGVhc3Q4X3Q7 CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVpbnRfbGVhc3QxNl90Owp0eXBlZGVmIHVuc2ln bmVkIGludCB1aW50X2xlYXN0MzJfdDsKCgoKX19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgdWludF9sZWFzdDY0X3Q7CgoKCgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIg aW50X2Zhc3Q4X3Q7CgoKCgoKdHlwZWRlZiBpbnQgaW50X2Zhc3QxNl90Owp0eXBlZGVmIGludCBp bnRfZmFzdDMyX3Q7Cl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBsb25nIGxvbmcgaW50IGludF9mYXN0 NjRfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnRfZmFzdDhfdDsKCgoKCgp0eXBlZGVm IHVuc2lnbmVkIGludCB1aW50X2Zhc3QxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X2Zh c3QzMl90OwpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50 X2Zhc3Q2NF90OwojIDEyNiAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCnR5cGVkZWYgaW50IGlu dHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRwdHJfdDsKIyAxMzggIi91c3IvaW5j bHVkZS9zdGRpbnQuaCIgMwpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRt YXhfdDsKX19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludG1h eF90OwojIDUgIlRyZWVUYWJsZS5oIiAyCiMgMSAiUHJvamVjdFV0aWxzL0Fzc2VydGlvbi9Bc3Nl cnRpb24uaCIgMQoKCgojIDEgIlByb2plY3RVdGlscy9EYXRhU3RydWN0dXJlcy9TaW5nbGV0b24u aCIgMQoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaW9zdHJlYW0iIDEgMwojIDQzICIv dXNyL2luY2x1ZGUvYysrLzMuMi4xL2lvc3RyZWFtIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvaTM4Ni1zbGFja3dhcmUtbGludXgvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzQgIi91 c3IvaW5jbHVkZS9jKysvMy4yLjEvaTM4Ni1zbGFja3dhcmUtbGludXgvYml0cy9jKytjb25maWcu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaTM4Ni1zbGFja3dhcmUtbGludXgvYml0 cy9vc19kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYtc2xh Y2t3YXJlLWxpbnV4L2JpdHMvYysrY29uZmlnLmgiIDIgMwojIDQ1ICIvdXNyL2luY2x1ZGUvYysr LzMuMi4xL2lvc3RyZWFtIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL29zdHJlYW0i IDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL29zdHJlYW0iIDMKCiMgMSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9pb3MiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2lv cyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2lvc2Z3ZCIgMSAzCiMgNDMgIi91c3Iv aW5jbHVkZS9jKysvMy4yLjEvaW9zZndkIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMv c3RyaW5nZndkLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Fs bG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBz dHJ1Y3QgY2hhcl90cmFpdHM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9j ID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nOwoKICB0ZW1wbGF0 ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPjsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hh cj4gc3RyaW5nOwoKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD47Cgog IHR5cGVkZWYgYmFzaWNfc3RyaW5nPHdjaGFyX3Q+IHdzdHJpbmc7Cgp9CiMgNDYgIi91c3IvaW5j bHVkZS9jKysvMy4yLjEvaW9zZndkIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Jp dHMvZnBvcy5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Zwb3MuaCIg MwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYtc2xhY2t3YXJlLWxpbnV4L2JpdHMv YysraW8uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaTM4Ni1zbGFja3dhcmUt bGludXgvYml0cy9jKytpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jc3RkaW8i IDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2NzdGRpbyIgMwoKCiMgMSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9jc3RkZGVmIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9jc3RkZGVmIiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgv My4yLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYt c2xhY2t3YXJlLWxpbnV4LzMuMi4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRy ZGlmZl90OwojIDIwMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8zLjIu MS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyA0OSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jc3RkZGVmIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHVz aW5nIDo6cHRyZGlmZl90OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgNTEgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvY3N0ZGlvIiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2Fy ZS1saW51eC8zLjIuMS9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDM5ICIvdXNyL2xpYi9nY2MtbGli L2kzODYtc2xhY2t3YXJlLWxpbnV4LzMuMi4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gIkMi IHsKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzMuMi4xL2lu Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ0ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJl LWxpbnV4LzMuMi4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3R5cGVzLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vz ci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8zLjIuMS9pbmNsdWRlL3N0ZGRlZi5o IiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNp Z25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25n OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRf dDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91 c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsK dHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50 IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRl ZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsK Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9f ZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0 eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsK dHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVm IF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3Vf aW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90 IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5 cGVkZWYgX191X2xvbmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0 eXBlZGVmIF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxb Ml07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAq X19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGlu dCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBs b25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVm IGludCBfX2Nsb2NraWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYg aW50IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoK CnR5cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxr Y250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcg X19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRl ZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRf dDsKCgp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19v ZmY2NF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBl ZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv cHRocmVhZHR5cGVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1 ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2No ZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi IDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAg aW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1 Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MK ewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3Nj aGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2Nv cGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAq X19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0 eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9w dGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0 cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5z aWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21f cmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAg aW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhy ZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRo cmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBl ZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2Nr IF9fcndfbG9jazsKICBpbnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3Jp dGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2Ny IF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7 Cn0gcHRocmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5k OwogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHZv bGF0aWxlIGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0cnVj dCBfcHRocmVhZF9mYXN0bG9jayBfX2JhX2xvY2s7CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAgaW50 IF9fYmFfcHJlc2VudDsKICBfcHRocmVhZF9kZXNjciBfX2JhX3dhaXRpbmc7Cn0gcHRocmVhZF9i YXJyaWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9i YXJyaWVyYXR0cl90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90Owoj IDE0NCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgNDYgIi91c3IvbGliL2djYy1s aWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMy4yLjEvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCgoK CgoKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKCgoKCgojIDcxICIvdXNyL2xpYi9nY2Mt bGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzMuMi4xL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVm IHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgODEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFj a3dhcmUtbGludXgvMy4yLjEvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xp YmlvLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9fR19jb25maWcuaCIgMSAzCiMgMTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEg Ii91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMy4yLjEvaW5jbHVkZS9zdGRk ZWYuaCIgMSAzCiMgMzIxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzMu Mi4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1 ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29u ZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVk ZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8z LjIuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIg MwojIDYzICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKCgoKCgoKCnR5cGVkZWYgc3RydWN0CnsK ICBpbnQgX19jb3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193 Y2hiWzRdOwogIH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19H X2NvbmZpZy5oIiAyIDMKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJz dGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90 IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3Iv aW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIyAy OCAiL3Vzci9pbmNsdWRlL2djb252LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAz CiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2 LXNsYWNrd2FyZS1saW51eC8zLjIuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9p bmNsdWRlL3djaGFyLmgiIDIgMwojIDYzICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKIyAyOSAi L3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNs YWNrd2FyZS1saW51eC8zLjIuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNs dWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZf Tk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZ X0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAog IF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1Is CiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1Qg PSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBf X2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9h ZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpf X2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9k YXRhICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9f Z2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpf X2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAo Kl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFy ICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBj aGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAo dm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hh ciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBj aGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0 KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19l bmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252 X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJh bnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsK ICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoK CgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpf X3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRl cjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2Zj dCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0 IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRl ZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgog IGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0 ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19v dXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVy OwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9f bWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFu czsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7 CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBf X2djb252X3N0ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNs dWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5m byBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0 cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252 X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19I SV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo X19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9f ICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3Qg X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5jbHVkZS9s aWJpby5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2xpYi9n Y2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzMuMi4xL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwoj IDQzICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzMuMi4xL2luY2x1ZGUv c3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1 NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE2MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi IDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzIgIi91c3IvaW5jbHVk ZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFy a2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1 ZjsKCgoKICBpbnQgX3BvczsKIyAxOTUgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07CgoKZW51 bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWws CiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKCgoKCnN0cnVjdCBfSU9f Y29kZWN2dAp7CiAgdm9pZCAoKl9fY29kZWN2dF9kZXN0cikgKHN0cnVjdCBfSU9fY29kZWN2dCAq KTsKICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9fb3V0KSAoc3RydWN0IF9J T19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICoqLCBjaGFyICosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBfX2Nv ZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX3Vuc2hpZnQpIChzdHJ1Y3QgX0lPX2NvZGVjdnQg KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJz dGF0ZV90ICosIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19j b2RlY3Z0X2RvX2luKSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqLCB3 Y2hhcl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2No YXJfdCAqLCB3Y2hhcl90ICoqKTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fZW5jb2RpbmcpIChzdHJ1 Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2Fsd2F5c19ub2NvbnYpIChz dHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2xlbmd0aCkgKHN0cnVj dCBfSU9fY29kZWN2dCAqLCBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKICBpbnQgKCpfX2NvZGVj dnRfZG9fbWF4X2xlbmd0aCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKCiAgX0dfaWNvbnZfdCBf X2NkX2luOwogIF9HX2ljb252X3QgX19jZF9vdXQ7Cn07CgoKc3RydWN0IF9JT193aWRlX2RhdGEK ewogIHdjaGFyX3QgKl9JT19yZWFkX3B0cjsKICB3Y2hhcl90ICpfSU9fcmVhZF9lbmQ7CiAgd2No YXJfdCAqX0lPX3JlYWRfYmFzZTsKICB3Y2hhcl90ICpfSU9fd3JpdGVfYmFzZTsKICB3Y2hhcl90 ICpfSU9fd3JpdGVfcHRyOwogIHdjaGFyX3QgKl9JT193cml0ZV9lbmQ7CiAgd2NoYXJfdCAqX0lP X2J1Zl9iYXNlOwogIHdjaGFyX3QgKl9JT19idWZfZW5kOwoKICB3Y2hhcl90ICpfSU9fc2F2ZV9i YXNlOwogIHdjaGFyX3QgKl9JT19iYWNrdXBfYmFzZTsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfZW5k OwoKICBfX21ic3RhdGVfdCBfSU9fc3RhdGU7CiAgX19tYnN0YXRlX3QgX0lPX2xhc3Rfc3RhdGU7 CiAgc3RydWN0IF9JT19jb2RlY3Z0IF9jb2RlY3Z0OwoKICB3Y2hhcl90IF9zaG9ydGJ1ZlsxXTsK CiAgc3RydWN0IF9JT19qdW1wX3QgKl93aWRlX3Z0YWJsZTsKfTsKCgpzdHJ1Y3QgX0lPX0ZJTEUg ewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVh ZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBj aGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1 Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNo YXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9f bWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBfZmls ZW5vOwoKCgogIGludCBfZmxhZ3MyOwoKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2ln bmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNo YXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDMxMSAiL3Vzci9pbmNs dWRlL2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgogIHN0cnVjdCBfSU9fY29kZWN2 dCAqX2NvZGVjdnQ7CiAgc3RydWN0IF9JT193aWRlX2RhdGEgKl93aWRlX2RhdGE7CgoKCgogIGlu dCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2Yg KHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3Qg X0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVz IF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rk ZXJyXzsKIyAzNTAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgX19zc2l6ZV90IF9f aW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMp OwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqX19jb29raWUs IF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tp ZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9fdyk7CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9m biAodm9pZCAqX19jb29raWUpOwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRf ZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90 Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9f aW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewog IF9faW9fcmVhZF9mbiAqcmVhZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtf Zm4gKnNlZWs7CiAgX19pb19jbG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlv bnNfdDsKdHlwZWRlZiBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlv bnNfdDsKCnN0cnVjdCBfSU9fY29va2llX2ZpbGU7CgoKZXh0ZXJuIHZvaWQgX0lPX2Nvb2tpZV9p bml0IChzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlICpfX2NmaWxlLCBpbnQgX19yZWFkX3dyaXRlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fY29va2llLCBfSU9fY29va2llX2lv X2Z1bmN0aW9uc190IF9fZm5zKTsKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRl cmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxF ICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgdGhy b3cgKCk7CmV4dGVybiB3aW50X3QgX193dW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsK ZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50 X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgdGhyb3cgKCk7CiMgNDMyICIvdXNy L2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkg dGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpl eHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBp bnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVy biB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBf SU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5 bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwojIDQ2MiAiL3Vzci9pbmNsdWRlL2xpYmlv LmgiIDMKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25z dCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp c3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChf SU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBf SU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6 ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0 ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGlu dCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9f b2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVh IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IF9JT19nZXR3YyAoX0lPX0ZJ TEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9JT19wdXR3YyAod2NoYXJfdCBfX3dj LCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Z3aWRlIChfSU9fRklM RSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cgKCk7CiMgNTExICIvdXNyL2luY2x1ZGUvbGliaW8u aCIgMwpleHRlcm4gaW50IF9JT192ZndzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25z dCB3Y2hhcl90ICogX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192 YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9JT192Zndwcmlu dGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9f c3NpemVfdCBfSU9fd3BhZG4gKF9JT19GSUxFICosIHdpbnRfdCwgX19zc2l6ZV90KSB0aHJvdyAo KTsKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfd2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAo KTsKCgoKfQojIDgyICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzMuMi4x L2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0eXBlZGVmIF9fZ251Y192YV9saXN0IF9fbm90X3Zh X2xpc3RfXzsKIyA5NSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8zLjIu MS9pbmNsdWRlL3N0ZGlvLmgiIDMKCgp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgoKdHlw ZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxNDcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1z bGFja3dhcmUtbGludXgvMy4yLjEvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDE0OCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNr d2FyZS1saW51eC8zLjIuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gc3RydWN0IF9J T19GSUxFICpzdGRpbjsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRSAqc3Rkb3V0OwpleHRlcm4gc3Ry dWN0IF9JT19GSUxFICpzdGRlcnI7CgoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBj aGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNo YXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJ TEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE4MCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2 LXNsYWNrd2FyZS1saW51eC8zLjIuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRt cG5hbSAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCAodm9p ZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93 ICgpOwojIDIwMiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8zLjIuMS9p bmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19k aXIsIF9fY29uc3QgY2hhciAqX19wZngpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f bWFsbG9jX18pKTsKCgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICpm b3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoKZXh0ZXJu IEZJTEUgKmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAg ICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyAy NDggIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMy4yLjEvaW5jbHVkZS9z dGRpby5oIiAzCgoKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbW9kZXMpIHRocm93ICgpOwpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAo aW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJ TEUgKmZvcGVuY29va2llICh2b2lkICpfX3Jlc3RyaWN0IF9fbWFnaWNfY29va2llLAogICAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAg ICAgICAgICAgICAgICAgICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5j cykgdGhyb3cgKCk7CgoKZXh0ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBf X2xlbiwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpv cGVuX21lbXN0cmVhbSAoY2hhciAqKl9fcmVzdHJpY3QgX19idWZsb2MsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7CgoK CgoKCmV4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAq X19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAg ICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZv aWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0 IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoK CmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgp OwoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg Li4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3Ms CiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu Li4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19z LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg IF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAg ICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9f Z251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNucHJpbnRmIChj aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBp bnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2du dWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf XyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIg KipfX3Jlc3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAg ICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19h c3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNw cmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJp bnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LAogICAgICAgICAg ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRm IChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoK CgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cg KCk7CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs IC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv cm1hdCwgLi4uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVz dHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAg ICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgpleHRlcm4gaW50IHZzY2FuZiAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAw KSkpOwoKCmV4dGVybiBpbnQgdnNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywK ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9f Z251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1h dF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4g aW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBn ZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5s b2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZwdXRjIChp bnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9f YywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9f YykgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywg RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChp bnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxv Y2tlZCAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0 cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9f cywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq ZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoj IDQ3MCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8zLjIuMS9pbmNsdWRl L3N0ZGlvLmgiIDMKZXh0ZXJuIF9fc3NpemVfdCBfX2dldGRlbGltIChjaGFyICoqX19yZXN0cmlj dCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVz dHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBn ZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAo KTsKCgpleHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJv dyAoKTsKCgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z LCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHV0cyAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAo aW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFk ICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAg ICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4 dGVybiBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVf dCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3Ry aWN0IF9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpf X3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5s b2NrZWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p IHRocm93ICgpOwpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpf X3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoK CgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcgaW50IF9fb2ZmLCBpbnQg X193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCiMgNTM3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzMuMi4xL2lu Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2Zm X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8g KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA1NTMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1z bGFja3dhcmUtbGludXgvMy4yLjEvaW5jbHVkZS9zdGRpby5oIiAzCgoKCmV4dGVybiBpbnQgZmdl dHBvcyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9z KQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19j b25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1NzIgIi91c3IvbGliL2djYy1saWIvaTM4 Ni1zbGFja3dhcmUtbGludXgvMy4yLjEvaW5jbHVkZS9zdGRpby5oIiAzCgoKCmV4dGVybiBpbnQg ZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkg dGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZw b3M2NF90ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRw b3M2NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsK CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRl cm4gaW50IGZlb2YgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVycm9y IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxv Y2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQg KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3Qg Y2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zeXNfZXJy bGlzdC5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvc3lzX2Vycmxpc3QuaCIgMwpleHRl cm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0 W107CgoKZXh0ZXJuIGludCBfc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qg X3N5c19lcnJsaXN0W107CiMgNjA5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxp bnV4LzMuMi4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0 IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFy ICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlk IChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBv YnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs IC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZf XywgMiwgMykpKTsKZXh0ZXJuIGludCBvYnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICpf X3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Z251Y192YV9saXN0IF9fYXJncykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt YXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKCgoKCgoKCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpf X3N0cmVhbSkgdGhyb3cgKCk7CiMgNjg2ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJl LWxpbnV4LzMuMi4xL2luY2x1ZGUvc3RkaW8uaCIgMwp9CiMgNTMgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvY3N0ZGlvIiAyIDMKIyA5NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jc3RkaW8iIDMK bmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpGSUxFOwogIHVzaW5nIDo6ZnBvc190OwoKICB1c2lu ZyA6OmNsZWFyZXJyOwogIHVzaW5nIDo6ZmNsb3NlOwogIHVzaW5nIDo6ZmVvZjsKICB1c2luZyA6 OmZlcnJvcjsKICB1c2luZyA6OmZmbHVzaDsKICB1c2luZyA6OmZnZXRjOwogIHVzaW5nIDo6Zmdl dHBvczsKICB1c2luZyA6OmZnZXRzOwogIHVzaW5nIDo6Zm9wZW47CiAgdXNpbmcgOjpmcHJpbnRm OwogIHVzaW5nIDo6ZnB1dGM7CiAgdXNpbmcgOjpmcHV0czsKICB1c2luZyA6OmZyZWFkOwogIHVz aW5nIDo6ZnJlb3BlbjsKICB1c2luZyA6OmZzY2FuZjsKICB1c2luZyA6OmZzZWVrOwogIHVzaW5n IDo6ZnNldHBvczsKICB1c2luZyA6OmZ0ZWxsOwogIHVzaW5nIDo6ZndyaXRlOwogIHVzaW5nIDo6 Z2V0YzsKICB1c2luZyA6OmdldGNoYXI7CiAgdXNpbmcgOjpnZXRzOwogIHVzaW5nIDo6cGVycm9y OwogIHVzaW5nIDo6cHJpbnRmOwogIHVzaW5nIDo6cHV0YzsKICB1c2luZyA6OnB1dGNoYXI7CiAg dXNpbmcgOjpwdXRzOwogIHVzaW5nIDo6cmVtb3ZlOwogIHVzaW5nIDo6cmVuYW1lOwogIHVzaW5n IDo6cmV3aW5kOwogIHVzaW5nIDo6c2NhbmY7CiAgdXNpbmcgOjpzZXRidWY7CiAgdXNpbmcgOjpz ZXR2YnVmOwogIHVzaW5nIDo6c3ByaW50ZjsKICB1c2luZyA6OnNzY2FuZjsKICB1c2luZyA6OnRt cGZpbGU7CiAgdXNpbmcgOjp0bXBuYW07CiAgdXNpbmcgOjp1bmdldGM7CiAgdXNpbmcgOjp2ZnBy aW50ZjsKICB1c2luZyA6OnZwcmludGY7CiAgdXNpbmcgOjp2c3ByaW50ZjsKfQojIDE1MyAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIuMS9jc3RkaW8iIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNp bmcgOjpzbnByaW50ZjsKICB1c2luZyA6OnZmc2NhbmY7CiAgdXNpbmcgOjp2c2NhbmY7CiAgdXNp bmcgOjp2c25wcmludGY7CiAgdXNpbmcgOjp2c3NjYW5mOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1 c2luZyBfX2dudV9jeHg6OnNucHJpbnRmOwogIHVzaW5nIF9fZ251X2N4eDo6dmZzY2FuZjsKICB1 c2luZyBfX2dudV9jeHg6OnZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzbnByaW50ZjsKICB1 c2luZyBfX2dudV9jeHg6OnZzc2NhbmY7Cn0KIyAzNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9p Mzg2LXNsYWNrd2FyZS1saW51eC9iaXRzL2MrK2lvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUv YysrLzMuMi4xL2kzODYtc2xhY2t3YXJlLWxpbnV4L2JpdHMvZ3Roci5oIiAxIDMKIyA5OCAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIuMS9pMzg2LXNsYWNrd2FyZS1saW51eC9iaXRzL2d0aHIuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaTM4Ni1zbGFja3dhcmUtbGludXgvYml0cy9ndGhy LWRlZmF1bHQuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaTM4Ni1zbGFja3dh cmUtbGludXgvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9wdGhyZWFk LmgiIDEgMwojIDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L3NjaGVkLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMwojIDEgIi91c3IvaW5j bHVkZS90aW1lLmgiIDEgMwojIDExNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGlt ZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07 CiMgMzAgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3NjaGVkLmgiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBz Y2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CgpleHRlcm4gIkMi IHsKCgoKZXh0ZXJuIGludCBjbG9uZSAoaW50ICgqX19mbikgKHZvaWQgKl9fYXJnKSwgdm9pZCAq X19jaGlsZF9zdGFjaywKICAgICAgICAgICAgICAgICAgaW50IF9fZmxhZ3MsIHZvaWQgKl9fYXJn KSB0aHJvdyAoKTsKCgp9CiMgMzMgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgoKCmV4dGVy biAiQyIgewoKCmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIF9fY29u c3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBp bnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19w YXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRzY2hlZHVsZXIgKF9fcGlkX3Qg X19waWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNj aGVkX2dldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz Y2hlZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3Jp dHlfbWF4IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0 X3ByaW9yaXR5X21pbiAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNj aGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3Qp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzY2hlZF9zZXRhZmZpbml0eSAoX19waWRfdCBfX3Bp ZCwgdW5zaWduZWQgbG9uZyBpbnQgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGxvbmcgaW50ICpfX21hc2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRf Z2V0YWZmaW5pdHkgKF9fcGlkX3QgX19waWQsIHVuc2lnbmVkIGxvbmcgaW50IF9fbGVuLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGludCAqX19tYXNrKSB0aHJv dyAoKTsKCgp9CiMgMjEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDEgIi91c3IvaW5j bHVkZS90aW1lLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiAiQyIg ewoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzMuMi4x L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgoK IyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvdGlt ZS5oIiAyIDMKIyA1OCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCnR5cGVkZWYgX19jbG9ja190 IGNsb2NrX3Q7CgoKCiMgNzQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgp0eXBlZGVmIF9fdGlt ZV90IHRpbWVfdDsKCgoKIyA5MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fY2xv Y2tpZF90IGNsb2NraWRfdDsKIyAxMDQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBf X3RpbWVyX3QgdGltZXJfdDsKIyAxMjcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgpzdHJ1Y3Qg dG0KewogIGludCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQgdG1faG91cjsKICBpbnQgdG1f bWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0 bV95ZGF5OwogIGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2NvbnN0 IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoKCgoKCnN0cnVjdCBpdGltZXJzcGVjCiAgewogICAg c3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwogICAgc3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVl OwogIH07CgoKc3RydWN0IHNpZ2V2ZW50OwoKCgoKCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoK CgoKCgpleHRlcm4gY2xvY2tfdCBjbG9jayAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVf dCB0aW1lICh0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZGlmZnRp bWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190aW1lMCkKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAq X190cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJmdGltZSAoY2hhciAqX19yZXN0 cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNo YXIgKnN0cnB0aW1lIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgc3RydWN0IHRtICpfX3Rw KQogICAgIHRocm93ICgpOwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMg MjggIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVfc3Ry dWN0CnsKCiAgc3RydWN0IGxvY2FsZV9kYXRhICpfX2xvY2FsZXNbMTNdOwoKCiAgY29uc3QgdW5z aWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7 CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvdXBwZXI7CgoKICBjb25zdCBjaGFyICpfX25hbWVzWzEz XTsKfSAqX19sb2NhbGVfdDsKIyAyMTIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKZXh0ZXJu IHNpemVfdCBzdHJmdGltZV9sIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6 ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m b3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVz dHJpY3QgX190cCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0 aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJwdGltZV9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm10LCBzdHJ1Y3QgdG0gKl9fdHAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2Fs ZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2Nv bnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2Fs dGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCmV4dGVybiBzdHJ1 Y3QgdG0gKmdtdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93 ICgpOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9f cmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0 bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZSAo X19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZSAo X19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKmFz Y3RpbWVfciAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCwKICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNo YXIgKmN0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAg ICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBjaGFyICpfX3R6bmFtZVsyXTsKZXh0ZXJuIGludCBfX2RheWxpZ2h0OwpleHRlcm4gbG9uZyBp bnQgX190aW1lem9uZTsKCgoKCmV4dGVybiBjaGFyICp0em5hbWVbMl07CgoKCmV4dGVybiB2b2lk IHR6c2V0ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBkYXlsaWdodDsKZXh0ZXJuIGxv bmcgaW50IHRpbWV6b25lOwoKCgoKCmV4dGVybiBpbnQgc3RpbWUgKF9fY29uc3QgdGltZV90ICpf X3doZW4pIHRocm93ICgpOwojIDMwNyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gdGlt ZV90IHRpbWVnbSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRp bWVsb2NhbCAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGR5c2l6ZSAo aW50IF9feWVhcikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4 dGVybiBpbnQgbmFub3NsZWVwIChfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0ZWRf dGltZSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW1haW5pbmcp IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNsb2NrX2dldHJlcyAoY2xvY2tpZF90IF9fY2xvY2tf aWQsIHN0cnVjdCB0aW1lc3BlYyAqX19yZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tf Z2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqX190cCkgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19zZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwg X19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgY2xvY2tfbmFub3NsZWVwIChjbG9ja2lkX3QgX19jbG9ja19pZCwgaW50IF9fZmxhZ3MsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dldGNwdWNsb2NraWQgKHBpZF90IF9fcGlkLCBjbG9j a2lkX3QgKl9fY2xvY2tfaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB0aW1lcl9jcmVhdGUg KGNsb2NraWRfdCBfX2Nsb2NrX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNp Z2V2ZW50ICpfX3Jlc3RyaWN0IF9fZXZwLAogICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJf dCAqX19yZXN0cmljdCBfX3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZGVs ZXRlICh0aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9zZXR0 aW1lICh0aW1lcl90IF9fdGltZXJpZCwgaW50IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX3ZhbHVlLAogICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fb3Zh bHVlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2dldHRpbWUgKHRpbWVyX3QgX190aW1l cmlkLCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX192YWx1ZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4g aW50IHRpbWVyX2dldG92ZXJydW4gKHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAoKTsKIyAzNzgg Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKCgoKCgpleHRl cm4gc3RydWN0IHRtICpnZXRkYXRlIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsK IyAzOTMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIGludCBnZXRkYXRlX3IgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3N0cmluZywKICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCB0bSAqX19yZXN0cmljdCBfX3Jlc2J1ZnApIHRocm93ICgpOwoKCn0KIyAyMiAiL3Vzci9pbmNs dWRlL3B0aHJlYWQuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDEgMwojIDMx ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMK dHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVu c2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcg aW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzQgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAz CiMgNTAgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0 X3Q7CiMgMzc3ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKfQojIDI1ICIvdXNyL2luY2x1ZGUv cHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAz CiMgMjYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz L2luaXRzcGluLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgpleHRl cm4gIkMiIHsKIyA1OSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwplbnVtCnsKICBQVEhSRUFE X0NSRUFURV9KT0lOQUJMRSwKCiAgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQKCn07CgplbnVtCnsK ICBQVEhSRUFEX0lOSEVSSVRfU0NIRUQsCgogIFBUSFJFQURfRVhQTElDSVRfU0NIRUQKCn07Cgpl bnVtCnsKICBQVEhSRUFEX1NDT1BFX1NZU1RFTSwKCiAgUFRIUkVBRF9TQ09QRV9QUk9DRVNTCgp9 OwoKZW51bQp7CiAgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VS U0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9B REFQVElWRV9OUAoKICAsCiAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSBQVEhSRUFEX01VVEVYX1RJ TUVEX05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFID0gUFRIUkVBRF9NVVRFWF9SRUNVUlNJ VkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLID0gUFRIUkVBRF9NVVRFWF9FUlJPUkNI RUNLX05QLAogIFBUSFJFQURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURfTVVURVhfTk9STUFMCgoK CiAgLCBQVEhSRUFEX01VVEVYX0ZBU1RfTlAgPSBQVEhSRUFEX01VVEVYX0FEQVBUSVZFX05QCgp9 OwoKZW51bQp7CiAgUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBUSFJFQURfUFJPQ0VTU19T SEFSRUQKCn07CgoKZW51bQp7CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JFQURFUl9OUCwKICBQ VEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9X UklURVJfTk9OUkVDVVJTSVZFX05QLAogIFBUSFJFQURfUldMT0NLX0RFRkFVTFRfTlAgPSBQVEhS RUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QCn07CiMgMTMxICIvdXNyL2luY2x1ZGUvcHRocmVh ZC5oIiAzCnN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGlu ZSkgKHZvaWQgKik7CiAgdm9pZCAqX19hcmc7CiAgaW50IF9fY2FuY2VsdHlwZTsKICBzdHJ1Y3Qg X3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fcHJldjsKfTsKCgoKZW51bQp7CiAgUFRIUkVBRF9D QU5DRUxfRU5BQkxFLAoKICBQVEhSRUFEX0NBTkNFTF9ESVNBQkxFCgp9OwplbnVtCnsKICBQVEhS RUFEX0NBTkNFTF9ERUZFUlJFRCwKCiAgUFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCgp9Owoj IDE2MyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRl IChwdGhyZWFkX3QgKl9fcmVzdHJpY3QgX190aHJlYWRwLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAogICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3Jlc3RyaWN0IF9fYXJnKSB0aHJvdyAoKTsK CgpleHRlcm4gcHRocmVhZF90IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2VxdWFsIChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190aHJl YWQyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9fcmV0dmFs KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVy biBpbnQgcHRocmVhZF9qb2luIChwdGhyZWFkX3QgX190aCwgdm9pZCAqKl9fdGhyZWFkX3JldHVy bikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2RldGFjaCAocHRocmVhZF90IF9f dGgpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRocmVh ZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVz dHJveSAocHRocmVhZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy ZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19kZXRhY2hzdGF0ZSkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUgKF9fY29uc3QgcHRo cmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCAqX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0 dHJfc2V0c2NoZWRwYXJhbSAocHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9w YXJhbSAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFt IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kgKHB0aHJlYWRf YXR0cl90ICpfX2F0dHIsIGludCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGljeSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19y ZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBp bnQgKl9fcmVzdHJpY3QgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy ZWFkX2F0dHJfc2V0aW5oZXJpdHNjaGVkIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2luaGVyaXQpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAoX19jb25zdCBwdGhy ZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9faW5oZXJpdCkKICAgICB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY29wZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0 ciwgaW50IF9fc2NvcGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf Z2V0c2NvcGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2NvcGUpIHRo cm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUgKHB0aHJlYWRf YXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IF9fZ3VhcmRzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRn dWFyZHNpemUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX2d1 YXJkc2l6ZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0 c3RhY2thZGRyIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKl9fc3RhY2thZGRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVz dHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHZvaWQg KipfX3Jlc3RyaWN0IF9fc3RhY2thZGRyKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg cHRocmVhZF9hdHRyX3NldHN0YWNrIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0 YWNrYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YWNr c2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2sgKF9fY29u c3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zdGFja3NpemUpIHRo cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRocmVh ZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgX19zdGFja3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dl dHN0YWNrc2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9f c3RhY2tzaXplKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0YXR0cl9u cCAocHRocmVhZF90IF9fdGgsIHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCgoK CgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3Ro cmVhZCwgaW50IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2dldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wb2xpY3ks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9f cmVzdHJpY3QgX19wYXJhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dl dGNvbmN1cnJlbmN5ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y29u Y3VycmVuY3kgKGludCBfX2xldmVsKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVh ZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9p bml0IChwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmljdAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tdXRleF9hdHRyKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211dGV4 KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9t dXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9j ayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhy ZWFkX211dGV4X3RpbWVkbG9jayAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVz cGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJz dGltZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJl YWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9t dXRleGF0dHJfaW5pdCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3Qg Kl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwc2hh cmVkIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9tdXRl eGF0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0 dHJfc2V0dHlwZSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKQogICAg IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZSAoX19jb25z dCBwdGhyZWFkX211dGV4YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19raW5kKSB0aHJvdyAoKTsK CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2luaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jl c3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhy ZWFkX2NvbmRhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb25kX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kg KHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9j b25kX3NpZ25hbCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfd2FpdCAocHRocmVhZF9jb25kX3QgKl9fcmVz dHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4 X3QgKl9fcmVzdHJpY3QgX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFk X2NvbmRfdGltZWR3YWl0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0 IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1 Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2lu aXQgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0 aHJlYWRfY29uZGF0dHJfZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0 aHJlYWRfY29uZGF0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9jb25kYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93 ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFkX3J3bG9j a190ICpfX3Jlc3RyaWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9y d2xvY2tfZGVzdHJveSAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9j aykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnlyZGxvY2sgKHB0aHJl YWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3 bG9ja190aW1lZHJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGlt ZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja193cmxvY2sg KHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl YWRfcndsb2NrX3RyeXdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgp OwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrIChwdGhyZWFkX3J3bG9j a190ICpfX3Jlc3RyaWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4g aW50IHB0aHJlYWRfcndsb2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRo cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQgKHB0aHJlYWRf cndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xv Y2thdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVh ZF9yd2xvY2thdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw dGhyZWFkX3J3bG9ja2F0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJl ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0a2luZF9ucCAo X19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcHJlZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9f YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHJl ZikgdGhyb3cgKCk7CiMgNTA5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQg cHRocmVhZF9zcGluX2luaXQgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrLCBpbnQgX19wc2hh cmVkKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2Rlc3Ryb3kgKHB0 aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf c3Bpbl9sb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX3NwaW5fdHJ5bG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX3VubG9jayAocHRocmVhZF9zcGlubG9j a190ICpfX2xvY2spIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfaW5p dCAocHRocmVhZF9iYXJyaWVyX3QgKl9fcmVzdHJpY3QgX19iYXJyaWVyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19yZXN0 cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHVuc2lnbmVkIGlu dCBfX2NvdW50KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3kg KHB0aHJlYWRfYmFycmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhy ZWFkX2JhcnJpZXJhdHRyX2luaXQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJv dyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0cm95IChwdGhyZWFkX2Jh cnJpZXJhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmll cmF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg X19wc2hhcmVkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9zZXRw c2hhcmVkIChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJu IGludCBwdGhyZWFkX2JhcnJpZXJfd2FpdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikg dGhyb3cgKCk7CiMgNTU2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRo cmVhZF9rZXlfY3JlYXRlIChwdGhyZWFkX2tleV90ICpfX2tleSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9kZWxldGUgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBf X2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcG9p bnRlcikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJl YWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwojIDU3NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg MwpleHRlcm4gaW50IHB0aHJlYWRfb25jZSAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250cm9s LAogICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkp IHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgKGludCBf X3N0YXRlLCBpbnQgKl9fb2xkc3RhdGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRf c2V0Y2FuY2VsdHlwZSAoaW50IF9fdHlwZSwgaW50ICpfX29sZHR5cGUpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9jYW5jZWwgKHB0aHJlYWRfdCBfX2NhbmNlbHRocmVhZCkgdGhyb3cg KCk7CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX3Rlc3RjYW5jZWwgKHZvaWQpIHRocm93ICgpOwoj IDYxMCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVh bnVwX3B1c2ggKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgp OwoKCgoKCgoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVh ZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19leGVjdXRlKSB0aHJvdyAoKTsKIyA2MzEgIi91c3IvaW5jbHVkZS9wdGhyZWFk LmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoX2RlZmVyIChzdHJ1Y3QgX3B0 aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKIyA2NDIg Ii91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9w b3BfcmVzdG9yZSAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0ZSkgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGNwdWNsb2NraWQgKHB0aHJlYWRfdCBf X3RocmVhZF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NraWRfdCAq X19jbG9ja19pZCkgdGhyb3cgKCk7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVh ZC5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDMKZXh0ZXJuIGlu dCBwdGhyZWFkX3NpZ21hc2sgKGludCBfX2hvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX25ld21hc2ssCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fb2xkbWFzayl0aHJvdyAoKTsK CgpleHRlcm4gaW50IHB0aHJlYWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkaWQsIGludCBfX3Np Z25vKSB0aHJvdyAoKTsKIyA2NTYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDY3MSAi L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lk ICgqX19wcmVwYXJlKSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpf X3BhcmVudCkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19jaGls ZCkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfa2lsbF9vdGhlcl90 aHJlYWRzX25wICh2b2lkKSB0aHJvdyAoKTsKCn0KIyAzOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9pMzg2LXNsYWNrd2FyZS1saW51eC9iaXRzL2d0aHItZGVmYXVsdC5oIiAyIDMKCnR5cGVkZWYg cHRocmVhZF9rZXlfdCBfX2d0aHJlYWRfa2V5X3Q7CnR5cGVkZWYgcHRocmVhZF9vbmNlX3QgX19n dGhyZWFkX29uY2VfdDsKdHlwZWRlZiBwdGhyZWFkX211dGV4X3QgX19ndGhyZWFkX211dGV4X3Q7 CgoKCgoKCiNwcmFnbWEgd2VhayBwdGhyZWFkX29uY2UKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfa2V5 X2NyZWF0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlfZGVsZXRlCiNwcmFnbWEgd2VhayBwdGhy ZWFkX2dldHNwZWNpZmljCiNwcmFnbWEgd2VhayBwdGhyZWFkX3NldHNwZWNpZmljCiNwcmFnbWEg d2VhayBwdGhyZWFkX2NyZWF0ZQoKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfbG9jayAKI3By YWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0 ZXhfdW5sb2NrIAojIDgwICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYtc2xhY2t3YXJlLWxp bnV4L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2Fj dGl2ZV9wICh2b2lkKQp7CiAgc3RhdGljIHZvaWQgKmNvbnN0IF9fZ3RocmVhZF9hY3RpdmVfcHRy ID0gKHZvaWQgKikgJnB0aHJlYWRfY3JlYXRlOwogIHJldHVybiBfX2d0aHJlYWRfYWN0aXZlX3B0 ciAhPSAwOwp9CiMgNDM3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYtc2xhY2t3YXJlLWxp bnV4L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX29u Y2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZvaWQgKCpmdW5jKSAodm9pZCkpCnsKICBpZiAo X19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfb25jZSAob25jZSwgZnVu Yyk7CiAgZWxzZQogICAgcmV0dXJuIC0xOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRf a2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICprZXksIHZvaWQgKCpkdG9yKSAodm9pZCAqKSkK ewogIHJldHVybiBwdGhyZWFkX2tleV9jcmVhdGUgKGtleSwgZHRvcik7Cn0KCnN0YXRpYyBpbmxp bmUgaW50Cl9fZ3RocmVhZF9rZXlfZHRvciAoX19ndGhyZWFkX2tleV90IGtleSwgdm9pZCAqcHRy KQp7CgogIGlmIChwdHIpCiAgICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCAwKTsK ICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9k ZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9rZXlfZGVsZXRl IChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgKgpfX2d0aHJlYWRfZ2V0c3BlY2lmaWMgKF9f Z3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyAoa2V5KTsK fQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX3NldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5 X3Qga2V5LCBjb25zdCB2b2lkICpwdHIpCnsKICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAo a2V5LCBwdHIpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfbG9jayAoX19n dGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAg IHJldHVybiBwdGhyZWFkX211dGV4X2xvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsK fQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9t dXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4g cHRocmVhZF9tdXRleF90cnlsb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0 YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9tdXRleF90 ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVh ZF9tdXRleF91bmxvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQojIDk5ICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL2kzODYtc2xhY2t3YXJlLWxpbnV4L2JpdHMvZ3Roci5oIiAyIDMK IyAzOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9pMzg2LXNsYWNrd2FyZS1saW51eC9iaXRzL2Mr K2lvLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHR5cGVkZWYgbG9uZyBzdHJlYW1vZmY7CiAg dHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsKCiAgdHlwZWRlZiBwdHJkaWZmX3Qgd3N0cmVh bXNpemU7CgogIHR5cGVkZWYgZnBvc190IF9fY19zdHJlYW1wb3M7CgogIHR5cGVkZWYgX19ndGhy ZWFkX211dGV4X3QgX19jX2xvY2s7CgoKICB0eXBlZGVmIEZJTEUgX19jX2ZpbGU7CgoKICBzdHJ1 Y3QgX19pb3NfZmxhZ3MKICB7CiAgICB0eXBlZGVmIHNob3J0IF9faW50X3R5cGU7CgogICAgc3Rh dGljIGNvbnN0IF9faW50X3R5cGUgX1NfYm9vbGFscGhhID0gMHgwMDAxOwogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1NfZGVjID0gMHgwMDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1NfZml4ZWQgPSAweDAwMDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19oZXgg PSAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbnRlcm5hbCA9IDB4MDAx MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2xlZnQgPSAweDAwMjA7CiAgICBzdGF0 aWMgY29uc3QgX19pbnRfdHlwZSBfU19vY3QgPSAweDAwNDA7CiAgICBzdGF0aWMgY29uc3QgX19p bnRfdHlwZSBfU19yaWdodCA9IDB4MDA4MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X3NjaWVudGlmaWMgPSAweDAxMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93 YmFzZSA9IDB4MDIwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb2ludCA9 IDB4MDQwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb3MgPSAweDA4MDA7 CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19za2lwd3MgPSAweDEwMDA7CiAgICBzdGF0 aWMgY29uc3QgX19pbnRfdHlwZSBfU191bml0YnVmID0gMHgyMDAwOwogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1NfdXBwZXJjYXNlID0gMHg0MDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50 X3R5cGUgX1NfYWRqdXN0ZmllbGQgPSAweDAwMjAgfCAweDAwODAgfCAweDAwMTA7CiAgICBzdGF0 aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYXNlZmllbGQgPSAweDAwMDIgfCAweDAwNDAgfCAweDAw MDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mbG9hdGZpZWxkID0gMHgwMTAwIHwg MHgwMDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYWRiaXQgPSAweDAxOwog ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZW9mYml0ID0gMHgwMjsKICAgIHN0YXRpYyBj b25zdCBfX2ludF90eXBlIF9TX2ZhaWxiaXQgPSAweDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19p bnRfdHlwZSBfU19hcHAgPSAweDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXRl ID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JpbiA9IDB4MDQ7CiAgICBz dGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbiA9IDB4MDg7CiAgICBzdGF0aWMgY29uc3QgX19p bnRfdHlwZSBfU19vdXQgPSAweDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdHJ1 bmMgPSAweDIwOwogIH07Cn0KIyA0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Zwb3Mu aCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jd2NoYXIiIDEgMwojIDQ4ICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL2N3Y2hhciIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y LjEvY3RpbWUiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2N0aW1lIiAzCiMgNjQg Ii91c3IvaW5jbHVkZS9jKysvMy4yLjEvY3RpbWUiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcg OjpjbG9ja190OwogIHVzaW5nIDo6dGltZV90OwogIHVzaW5nIDo6dG07CgogIHVzaW5nIDo6Y2xv Y2s7CiAgdXNpbmcgOjpkaWZmdGltZTsKICB1c2luZyA6Om1rdGltZTsKICB1c2luZyA6OnRpbWU7 CiAgdXNpbmcgOjphc2N0aW1lOwogIHVzaW5nIDo6Y3RpbWU7CiAgdXNpbmcgOjpnbXRpbWU7CiAg dXNpbmcgOjpsb2NhbHRpbWU7CiAgdXNpbmcgOjpzdHJmdGltZTsKfQojIDUyICIvdXNyL2luY2x1 ZGUvYysrLzMuMi4xL2N3Y2hhciIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAz CiMgNDAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2 LXNsYWNrd2FyZS1saW51eC8zLjIuMS9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MSAiL3Vzci9p bmNsdWRlL3djaGFyLmgiIDIgMwoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xh Y2t3YXJlLWxpbnV4LzMuMi4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMiAzCiMgNjMgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgojIDg4ICIvdXNy L2luY2x1ZGUvd2NoYXIuaCIgMwoKCnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90OwoKCgoj IDExMyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgpzdHJ1Y3QgdG07 CgoKCgoKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19k ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9fcmVz dHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hh cl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0 ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl X3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzY21wIChfX2NvbnN0IHdjaGFy X3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3Y2hhcl90ICpf X3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gaW50IHdjc2Nhc2VjbXAgKF9fY29u c3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IHdjc25jYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJf dCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoK CgoKZXh0ZXJuIGludCB3Y3NjYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25z dCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xv YykgdGhyb3cgKCk7CgpleHRlcm4gaW50IHdjc25jYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAq X19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgd2Nz Y29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93 ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwK ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwg c2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCB3Y3Njb2xsX2wgKF9fY29u c3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAg ICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHdjc3hm cm1fbCAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0 ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hyIChfX2Nv bnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2NzcmNociAoX19jb25zdCB3Y2hh cl90ICpfX3djcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHJudWwgKF9fY29uc3Qgd2NoYXJf dCAqX19zLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2NvbnN0IHdjaGFyX3QgKl9fd2Nz LCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChfX2NvbnN0IHdjaGFyX3QgKl9f d2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKF9fY29uc3Qgd2NoYXJf dCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2Nzc3RyIChfX2NvbnN0IHdj aGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAo d2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg d2NoYXJfdCAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hh cl90ICoqX19yZXN0cmljdCBfX3B0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NsZW4g KF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3N3Y3MgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFj aywgX19jb25zdCB3Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgd2NzbmxlbiAoX19jb25zdCB3Y2hhcl90 ICpfX3MsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNociAoX19jb25zdCB3Y2hhcl90ICpf X3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19z MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3ZlICh3 Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhy b3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1zZXQgKHdjaGFyX3QgKl9fcywgd2NoYXJfdCBf X2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtcGNweSAo d2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoK CgoKCgpleHRlcm4gd2ludF90IGJ0b3djIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu dCB3Y3RvYiAod2ludF90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgbWJzaW5pdCAoX19j b25zdCBtYnN0YXRlX3QgKl9fcHMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCgpleHRlcm4gc2l6ZV90IG1icnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90 IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJfdCBfX3dj LAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJv dyAoKTsKCgpleHRlcm4gc2l6ZV90IF9fbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVz dHJpY3QgX19wcykgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgbWJybGVuIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgbWJzdGF0 ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKIyAzMjQgIi91c3IvaW5jbHVkZS93Y2hh ci5oIiAzCgoKCmV4dGVybiBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f ZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBf X3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpf X3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAoY2hh ciAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No YXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAg ICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu IHNpemVfdCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf X25tYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4sIG1ic3RhdGVfdCAq X19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJzIChj aGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IF9fbndjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0 ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHdjd2lkdGgg KHdjaGFyX3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3N3aWR0aCAoX19jb25zdCB3 Y2hhcl90ICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIHdj c3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwpl eHRlcm4gbG9uZyBkb3VibGUgd2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdj aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90 ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB1 bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9f CmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9f CmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxsIChfX2NvbnN0IHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgoKX19leHRlbnNpb25f XwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18K ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDQ0MyAiL3Vzci9pbmNsdWRlL3dj aGFyLmgiIDMKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9j YWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWxf bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2Mp IHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xsX2wg KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7 CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxsX2wg KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2Fs ZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB3Y3N0b2RfbCAoX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgd2No YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cg KCk7CgpleHRlcm4gZmxvYXQgd2NzdG9mX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRw dHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUg d2NzdG9sZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGRvdWJsZSBfX3djc3RvZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxv YXQgX193Y3N0b2ZfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l bmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX193 Y3N0b2xkX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3Jv dXApIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5hbCAoX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4 dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3djc3RvdWxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJf dCAqX19yZXN0cmljdCBfX25wdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJv dyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfaW50 ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50 IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25n IGxvbmcgaW50IF9fd2NzdG91bGxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3 Y2hhcl90ICoqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKIyA1NjMgIi91 c3IvaW5jbHVkZS93Y2hhci5oIiAzCmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkgKHdjaGFyX3QgKl9f ZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90 ICp3Y3BuY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNpemVf dCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBmd2lkZSAoX19GSUxFICpf X2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmd3ByaW50ZiAoX19GSUxF ICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50 IHdwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAg IHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19z LCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJuIGludCB2Zndwcmlu dGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2du dWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3cHJpbnRmIChf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg IF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZzd3By aW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAg ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKCmV4dGVy biBpbnQgZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAg ICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRo cm93ICgpIDsKCmV4dGVybiBpbnQgd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHN3c2NhbmYgKF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCgoKCgoK CmV4dGVybiBpbnQgdmZ3c2NhbmYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAg ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJu IGludCB2d3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAg ICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKZXh0 ZXJuIGludCB2c3dzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAg ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoK CgoKCgpleHRlcm4gd2ludF90IGZnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4 dGVybiB3aW50X3QgZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB3 aW50X3QgZ2V0d2NoYXIgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IGZwdXR3YyAo d2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBw dXR3YyAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4g d2ludF90IHB1dHdjaGFyICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHdjaGFy X3QgKmZnZXR3cyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAgICAg ICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgZnB1dHdzIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywKICAgICAg ICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4 dGVybiB3aW50X3QgdW5nZXR3YyAod2ludF90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwoKCgoKCgpleHRlcm4gd2ludF90IGdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cg KCk7CgoKZXh0ZXJuIHdpbnRfdCBmZ2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKCmV4dGVybiB3aW50X3QgZnB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9fd2MsIF9f RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IHB1dHdjX3VubG9ja2Vk ICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90 IHB1dHdjaGFyX3VubG9ja2VkICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4gd2No YXJfdCAqZmdldHdzX3VubG9ja2VkICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0 cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmcHV0d3NfdW5sb2NrZWQgKF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX3dzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxF ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBzaXplX3Qgd2Nz ZnRpbWUgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAp IHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NmdGltZV9sICh3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCwKICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKIyA3MzcgIi91c3IvaW5jbHVk ZS93Y2hhci5oIiAzCn0KIyA1NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jd2NoYXIiIDIgMwoj IDY5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2N3Y2hhciIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1 c2luZyA6Om1ic3RhdGVfdDsKfQojIDEzMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jd2NoYXIi IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVzaW5nIDo6YnRvd2M7CiAg dXNpbmcgOjpmZ2V0d2M7CiAgdXNpbmcgOjpmZ2V0d3M7CiAgdXNpbmcgOjpmcHV0d2M7CiAgdXNp bmcgOjpmcHV0d3M7CiAgdXNpbmcgOjpmd2lkZTsKICB1c2luZyA6OmZ3cHJpbnRmOwogIHVzaW5n IDo6ZndzY2FuZjsKICB1c2luZyA6OmdldHdjOwogIHVzaW5nIDo6Z2V0d2NoYXI7CiAgdXNpbmcg OjptYnJsZW47CiAgdXNpbmcgOjptYnJ0b3djOwogIHVzaW5nIDo6bWJzaW5pdDsKICB1c2luZyA6 Om1ic3J0b3djczsKICB1c2luZyA6OnB1dHdjOwogIHVzaW5nIDo6cHV0d2NoYXI7CiAgdXNpbmcg Ojpzd3ByaW50ZjsKICB1c2luZyA6OnN3c2NhbmY7CiAgdXNpbmcgOjp1bmdldHdjOwogIHVzaW5n IDo6dmZ3cHJpbnRmOwogIHVzaW5nIDo6dmZ3c2NhbmY7CiAgdXNpbmcgOjp2c3dwcmludGY7CiAg dXNpbmcgOjp2c3dzY2FuZjsKICB1c2luZyA6OnZ3cHJpbnRmOwogIHVzaW5nIDo6dndzY2FuZjsK ICB1c2luZyA6OndjcnRvbWI7CiAgdXNpbmcgOjp3Y3NjYXQ7CiAgdXNpbmcgOjp3Y3NjbXA7CiAg dXNpbmcgOjp3Y3Njb2xsOwogIHVzaW5nIDo6d2NzY3B5OwogIHVzaW5nIDo6d2NzY3NwbjsKICB1 c2luZyA6Ondjc2Z0aW1lOwogIHVzaW5nIDo6d2NzbGVuOwogIHVzaW5nIDo6d2NzbmNhdDsKICB1 c2luZyA6Ondjc25jbXA7CiAgdXNpbmcgOjp3Y3NuY3B5OwogIHVzaW5nIDo6d2NzcnRvbWJzOwog IHVzaW5nIDo6d2Nzc3BuOwogIHVzaW5nIDo6d2NzdG9kOwogIHVzaW5nIDo6d2NzdG9mOwogIHVz aW5nIDo6d2NzdG9rOwogIHVzaW5nIDo6d2NzdG9sOwogIHVzaW5nIDo6d2NzdG91bDsKICB1c2lu ZyA6Ondjc3hmcm07CiAgdXNpbmcgOjp3Y3RvYjsKICB1c2luZyA6OndtZW1jbXA7CiAgdXNpbmcg Ojp3bWVtY3B5OwogIHVzaW5nIDo6d21lbW1vdmU7CiAgdXNpbmcgOjp3bWVtc2V0OwogIHVzaW5n IDo6d3ByaW50ZjsKICB1c2luZyA6OndzY2FuZjsKCiAgdXNpbmcgOjp3Y3NjaHI7CgogIGlubGlu ZSB3Y2hhcl90KgogIHdjc2Nocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJu IHdjc2Nocihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5n IDo6d2NzcGJyazsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzcGJyayh3Y2hhcl90KiBfX3MxLCB3 Y2hhcl90KiBfX3MyKQogIHsgcmV0dXJuIHdjc3BicmsoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90 Kj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6d2NzcmNocjsKCiAgaW5saW5lIHdjaGFyX3Qq CiAgd2NzcmNocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJuIHdjc3JjaHIo Y29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2luZyA6Ondjc3N0 cjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2Nzc3RyKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9f czIpCiAgeyByZXR1cm4gd2Nzc3RyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBf X3MyKTsgfQoKICB1c2luZyA6OndtZW1jaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdtZW1jaHIo d2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiB3bWVtY2hy KGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYywgX19uKTsgfQp9CgoKCgoKCgpu YW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6Ondjc3RvbGQ7CiAgdXNpbmcgOjp3Y3N0b2xs OwogIHVzaW5nIDo6d2NzdG91bGw7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4 eDo6d2NzdG9sZDsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvbGw7CiAgdXNpbmcgX19nbnVfY3h4 Ojp3Y3N0b3VsbDsKfQojIDQ2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvZnBvcy5oIiAy IDMKCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBj bGFzcyBmcG9zCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0 ZV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbW9mZiBfTV9vZmY7CiAgICAgIF9fc3Rh dGVfdHlwZSBfTV9zdDsKCiAgICBwdWJsaWM6CiAgICAgIF9fc3RhdGVfdHlwZQogICAgICBzdGF0 ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3N0OyB9CgogICAgICB2b2lkCiAgICAgIHN0YXRlKF9fc3Rh dGVfdHlwZSBfX3N0KSB7IF9NX3N0ID0gX19zdDsgfQoKCgogICAgICBmcG9zKCk6IF9NX29mZihz dHJlYW1vZmYoKSksIF9NX3N0KF9fc3RhdGVfdHlwZSgpKSB7IH0KCiAgICAgIGZwb3Moc3RyZWFt b2ZmIF9fb2ZmLCBfX3N0YXRlX3R5cGUgX19zdCA9IF9fc3RhdGVfdHlwZSgpKQogICAgICA6IF9N X29mZihfX29mZiksIF9NX3N0KF9fc3QpIHsgfQoKICAgICAgb3BlcmF0b3Igc3RyZWFtb2ZmKCkg Y29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvcis9KHN0 cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgKz0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAg ZnBvcyYKICAgICAgb3BlcmF0b3ItPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmIC09IF9fb2Zm OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3IrKHN0cmVhbW9mZiBf X29mZikKICAgICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgKz0gX19v ZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRv ci0oc3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAg ICAgIF9fdCAtPSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBib29s CiAgICAgIG9wZXJhdG9yPT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJu IF9NX29mZiA9PSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhPShj b25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9N X29mZjsgfQoKICAgICAgc3RyZWFtb2ZmCiAgICAgIF9NX3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1 cm4gX01fb2ZmOyB9CgogICAgICB2b2lkCiAgICAgIF9NX3Bvc2l0aW9uKHN0cmVhbW9mZiBfX29m ZikgeyBfTV9vZmYgPSBfX29mZjsgfQogICAgfTsKCgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+ IHN0cmVhbXBvczsKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gd3N0cmVhbXBvczsKCn0KIyA0 NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9pb3Nmd2QiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8z LjIuMS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2V4 Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMv ZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFk X2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgog IHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlw ZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19z KTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv aWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93 X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1l X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBf X3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQoj IDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2lvc2Z3ZCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0 czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBi YXNpY19zdHJlYW1idWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8 X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNz IGJhc2ljX2lvc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2Mg PSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdidWY7CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy VD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAg Y2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFt ZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3Ry ZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy X3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxf Q2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBj bGFzcyBiYXNpY19maWxlYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFt OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry YWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAg IGNsYXNzIGJhc2ljX2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9p dGVyYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0g Y2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOwoKCgog IGNsYXNzIGlvc19iYXNlOwoKCiAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4gaW9zOwogIHR5cGVk ZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXI+IHN0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJl YW08Y2hhcj4gaXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcj4gb3N0cmVhbTsK ICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXI+IGlvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNf c3RyaW5nYnVmPGNoYXI+IHN0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08 Y2hhcj4gaXN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08Y2hhcj4g b3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyPiBzdHJpbmdz dHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXI+IGZpbGVidWY7CiAgdHlwZWRlZiBi YXNpY19pZnN0cmVhbTxjaGFyPiBpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNo YXI+IG9mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTxjaGFyPiBmc3RyZWFtOwoKCiAg dHlwZWRlZiBiYXNpY19pb3M8d2NoYXJfdD4gd2lvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1 Zjx3Y2hhcl90PiB3c3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiB3 aXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08d2NoYXJfdD4gd29zdHJlYW07CiAgdHlw ZWRlZiBiYXNpY19pb3N0cmVhbTx3Y2hhcl90PiB3aW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19z dHJpbmdidWY8d2NoYXJfdD4gd3N0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJl YW08d2NoYXJfdD4gd2lzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFt PHdjaGFyX3Q+IHdvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPHdj aGFyX3Q+IHdzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+IHdm aWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08d2NoYXJfdD4gd2lmc3RyZWFtOwogIHR5 cGVkZWYgYmFzaWNfb2ZzdHJlYW08d2NoYXJfdD4gd29mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNf ZnN0cmVhbTx3Y2hhcl90PiB3ZnN0cmVhbTsKCn0KIyA0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9pb3MiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvZXhjZXB0aW9uIiAxIDMKIyA0 MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9leGNlcHRpb24iIDMKZXh0ZXJuICJDKysiIHsKCm5h bWVzcGFjZSBzdGQKewoKCgoKCgogIGNsYXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBl eGNlcHRpb24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsK CgogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgog IGNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAg IGJhZF9leGNlcHRpb24oKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9u KCkgdGhyb3coKTsKICB9OwoKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgp OwoKICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRl X2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZv aWQgdGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBl Y3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsK CgogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA5 OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9leGNlcHRpb24iIDMKICBib29sIHVuY2F1Z2h0X2V4 Y2VwdGlvbigpIHRocm93KCk7Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewojIDExMSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9leGNlcHRpb24iIDMKICB2b2lkIF9fdmVyYm9zZV90ZXJtaW5hdGVf aGFuZGxlciAoKTsKfQoKfQojIDQ2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2lvcyIgMiAzCiMg MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2NoYXJfdHJhaXRzLmgiIDEgMwojIDQ0ICIv dXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvY2hhcl90cmFpdHMuaCIgMwoKIyAxICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi4xL2NzdHJpbmciIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2NzdHJpbmciIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI4ICIvdXNy L2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgojIDEgIi91c3IvbGliL2djYy1s aWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMy4yLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQg Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lk ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpf X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVt bW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQogICAg IHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBf X2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAg ICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg Km1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNp emVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0 ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24p CiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiB2 b2lkICpyYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtcmNociAoX19jb25zdCB2 b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJp Y3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7 CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p IHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0 LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4g Y2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgp OwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq X19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBp bnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVf dCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu IGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3Ry eGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCiMgMTE3 ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGludCBzdHJjb2xsX2wgKF9fY29uc3Qg Y2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybV9s IChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAg ICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh ciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f bWFsbG9jX18pKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9fY29uc3QgY2hhciAqX19z dHJpbmcsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9j X18pKTsKIyAxNjAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCmV4dGVybiBjaGFyICpzdHJj aHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50 IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNo YXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25z dCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hh ciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19z LCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNr LCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRl cm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKZXh0 ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19j b25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCgpleHRlcm4gdm9pZCAqbWVtbWVt IChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrbGVuLAogICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3QgX19uZWVkbGVsZW4p CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB2b2lk ICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgp OwpleHRlcm4gdm9pZCAqbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p IHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIHNpemVfdCBz dHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVy cm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3Ig KGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoK CgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoK CgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBz aXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXpl X3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwg X19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3Ms IGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBj aGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBp bnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lv bl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9f Y29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3Qg Y2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgc3RyY2FzZWNtcF9s IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f Y29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBf X2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwK ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRo cm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f Y29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIHRocm93ICgpOwoKCmV4dGVy biBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hh ciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAg ICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBf X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpf X3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmZy eSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1mcm9iICh2b2lk ICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYmFzZW5hbWUg KF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CiMgMzc5ICIvdXNyL2luY2x1ZGUv c3RyaW5nLmgiIDMKfQojIDUyICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2NzdHJpbmciIDIgMwoj IDc3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2NzdHJpbmciIDMKbmFtZXNwYWNlIHN0ZAp7CiAg dXNpbmcgOjptZW1jcHk7CiAgdXNpbmcgOjptZW1tb3ZlOwogIHVzaW5nIDo6c3RyY3B5OwogIHVz aW5nIDo6c3RybmNweTsKICB1c2luZyA6OnN0cmNhdDsKICB1c2luZyA6OnN0cm5jYXQ7CiAgdXNp bmcgOjptZW1jbXA7CiAgdXNpbmcgOjpzdHJjbXA7CiAgdXNpbmcgOjpzdHJjb2xsOwogIHVzaW5n IDo6c3RybmNtcDsKICB1c2luZyA6OnN0cnhmcm07CiAgdXNpbmcgOjpzdHJjc3BuOwogIHVzaW5n IDo6c3Ryc3BuOwogIHVzaW5nIDo6c3RydG9rOwogIHVzaW5nIDo6bWVtc2V0OwogIHVzaW5nIDo6 c3RyZXJyb3I7CiAgdXNpbmcgOjpzdHJsZW47CgogIHVzaW5nIDo6bWVtY2hyOwoKICBpbmxpbmUg dm9pZCoKICBtZW1jaHIodm9pZCogX19wLCBpbnQgX19jLCBzaXplX3QgX19uKQogIHsgcmV0dXJu IG1lbWNocihjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihfX3ApLCBfX2MsIF9fbik7IH0KCiAgdXNp bmcgOjpzdHJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cmNocihjaGFyKiBfX3MxLCBpbnQgX19u KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19z MSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJwYnJrOwoKICBpbmxpbmUgY2hhcioKICBzdHJwYnJr KGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnBi cmsoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6c3Ry cmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihjaGFyKiBfX3MxLCBpbnQgX19uKQogIHsg cmV0dXJuIF9fYnVpbHRpbl9zdHJyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBf X24pOyB9CgogIHVzaW5nIDo6c3Ryc3RyOwoKICBpbmxpbmUgY2hhcioKICBzdHJzdHIoY2hhciog X19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0aW5fc3Ryc3RyKGNvbnN0 X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQp9CiMgNDYgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0 ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHMKICAgIHsKICAgICAg dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlu dF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBz dHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7Cgog ICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFy X3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBl JiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAg bHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAg c3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hh cl90eXBlKiBfX3MyLCBzaXplX3QgX19uKTsKCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVu Z3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKTsKCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUq CiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJf dHlwZSYgX19hKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBl KiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pOwoKICAgICAgc3RhdGlj IGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSog X19zMiwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24o Y2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpOwoKICAgICAgc3RhdGlj IGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYyk7CgogICAg ICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2Mp OwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9f YzEsIGNvbnN0IGludF90eXBlJiBfX2MyKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBl b2YoKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBl JiBfX2MpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hh cj4KICAgIHsKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBpbnQg aW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVm IHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsK CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNo YXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wK ICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAg ICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQo Y29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0 dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29uc3Qg Y2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAg IHsgcmV0dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMgc2l6ZV90 CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgeyByZXR1cm4gc3RybGVu KF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3Qg Y2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQogICAgICB7 IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBjaGFyX3R5cGUqPihtZW1jaHIoX19zLCBfX2EsIF9f bikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19z MSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9fczEsIF9fczIsIF9fbikpOyB9CgogICAgICBz dGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90 eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5 cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUq CiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkK ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtc2V0KF9fcywgX19hLCBf X24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3Qg aW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihfX2Mp OyB9CgoKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFy X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KHN0YXRpY19j YXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcV9p bnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpCiAgICAg IHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVv ZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoLTEpKTsgfQoKICAgICAgc3RhdGlj IGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1 cm4gKF9fYyA9PSBlb2YoKSkgPyAwIDogX19jOyB9CiAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBz dHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD4KICAgIHsKICAgICAgdHlwZWRlZiB3Y2hhcl90IGNo YXJfdHlwZTsKICAgICAgdHlwZWRlZiB3aW50X3QgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3Ry ZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIHdzdHJlYW1wb3MgcG9zX3R5cGU7CiAgICAg IHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBh c3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19j MSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYg X19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7 IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29u c3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAg c3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hh cl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiB3bWVtY21wKF9fczEsIF9f czIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJf dHlwZSogX19zKQogICAgICB7IHJldHVybiB3Y3NsZW4oX19zKTsgfQoKICAgICAgc3RhdGljIGNv bnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9f biwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1jaHIoX19zLCBfX2Es IF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBf X3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIGludF90eXBlIF9fbikKICAgICAgeyByZXR1cm4g d21lbW1vdmUoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAg ICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9f bikKICAgICAgeyByZXR1cm4gd21lbWNweShfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0 aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNo YXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1zZXQoX19zLCBfX2EsIF9fbik7IH0KCiAg ICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBf X2MpIHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAg ICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpIHsgcmV0dXJuIGludF90eXBlKF9f Yyk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBl JiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2My OyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nh c3Q8aW50X3R5cGU+KCgweGZmZmZmZmZmdSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAg ICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBlcV9pbnRfdHlw ZShfX2MsIGVvZigpKSA/IDAgOiBfX2M7IH0KICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9DaGFyX3RyYWl0c19tYXRjaAogICAg ewogICAgICBfQ2hhclQgX01fYzsKICAgICAgX0NoYXJfdHJhaXRzX21hdGNoKF9DaGFyVCBjb25z dCYgX19jKSA6IF9NX2MoX19jKSB7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShfQ2hh clQgY29uc3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0czo6ZXEoX01fYywgX19hKTsgfQogICAgfTsK fQojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2lvcyIgMiAzCgojIDEgIi91c3IvaW5jbHVk ZS9jKysvMy4yLjEvYml0cy9sb2NhbGVmd2QuaCIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvYml0cy9sb2NhbGVmd2QuaCIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9p Mzg2LXNsYWNrd2FyZS1saW51eC9iaXRzL2MrK2xvY2FsZS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNs dWRlL2MrKy8zLjIuMS9pMzg2LXNsYWNrd2FyZS1saW51eC9iaXRzL2MrK2xvY2FsZS5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jbG9jYWxlIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRl L2MrKy8zLjIuMS9jbG9jYWxlIiAzCgojIDEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMSAzCiMg MjkgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1z bGFja3dhcmUtbGludXgvMy4yLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5j bHVkZS9sb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDEgMwoj IDI3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMwplbnVtCnsKICBfX0xDX0NUWVBFID0g MCwKICBfX0xDX05VTUVSSUMgPSAxLAogIF9fTENfVElNRSA9IDIsCiAgX19MQ19DT0xMQVRFID0g MywKICBfX0xDX01PTkVUQVJZID0gNCwKICBfX0xDX01FU1NBR0VTID0gNSwKICBfX0xDX0FMTCA9 IDYsCiAgX19MQ19QQVBFUiA9IDcsCiAgX19MQ19OQU1FID0gOCwKICBfX0xDX0FERFJFU1MgPSA5 LAogIF9fTENfVEVMRVBIT05FID0gMTAsCiAgX19MQ19NRUFTVVJFTUVOVCA9IDExLAogIF9fTENf SURFTlRJRklDQVRJT04gPSAxMgp9OwojIDMxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwoK ZXh0ZXJuICJDIiB7CiMgNTIgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwpzdHJ1Y3QgbGNvbnYK ewoKCiAgY2hhciAqZGVjaW1hbF9wb2ludDsKICBjaGFyICp0aG91c2FuZHNfc2VwOwoKCgoKCiAg Y2hhciAqZ3JvdXBpbmc7CgoKCgoKICBjaGFyICppbnRfY3Vycl9zeW1ib2w7CiAgY2hhciAqY3Vy cmVuY3lfc3ltYm9sOwogIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogIGNoYXIgKm1vbl90aG91 c2FuZHNfc2VwOwogIGNoYXIgKm1vbl9ncm91cGluZzsKICBjaGFyICpwb3NpdGl2ZV9zaWduOwog IGNoYXIgKm5lZ2F0aXZlX3NpZ247CiAgY2hhciBpbnRfZnJhY19kaWdpdHM7CiAgY2hhciBmcmFj X2RpZ2l0czsKCiAgY2hhciBwX2NzX3ByZWNlZGVzOwoKICBjaGFyIHBfc2VwX2J5X3NwYWNlOwoK ICBjaGFyIG5fY3NfcHJlY2VkZXM7CgogIGNoYXIgbl9zZXBfYnlfc3BhY2U7CgoKCgoKCiAgY2hh ciBwX3NpZ25fcG9zbjsKICBjaGFyIG5fc2lnbl9wb3NuOwoKCiAgY2hhciBpbnRfcF9jc19wcmVj ZWRlczsKCiAgY2hhciBpbnRfcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgaW50X25fY3NfcHJlY2Vk ZXM7CgogIGNoYXIgaW50X25fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgaW50X3Bfc2lnbl9w b3NuOwogIGNoYXIgaW50X25fc2lnbl9wb3NuOwojIDExOSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5o IiAzCn07CgoKCgoKZXh0ZXJuIGNoYXIgKnNldGxvY2FsZSAoaW50IF9fY2F0ZWdvcnksIF9fY29u c3QgY2hhciAqX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBzdHJ1Y3QgbGNvbnYgKmxvY2Fs ZWNvbnYgKHZvaWQpIHRocm93ICgpOwoKCiMgMTQ4ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMK dHlwZWRlZiBfX2xvY2FsZV90IGxvY2FsZV90OwoKCgoKCmV4dGVybiBfX2xvY2FsZV90IG5ld2xv Y2FsZSAoaW50IF9fY2F0ZWdvcnlfbWFzaywgX19jb25zdCBjaGFyICpfX2xvY2FsZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fYmFzZSkgdGhyb3cgKCk7CiMgMTg5 ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKZXh0ZXJuIF9fbG9jYWxlX3QgZHVwbG9jYWxlIChf X2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGZyZWVsb2NhbGUg KF9fbG9jYWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fbG9jYWxlX3Qg dXNlbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKCgoKCgp9CiMgNTAg Ii91c3IvaW5jbHVkZS9jKysvMy4yLjEvY2xvY2FsZSIgMiAzCgoKCgoKbmFtZXNwYWNlIHN0ZAp7 CiAgdXNpbmcgOjpsY29udjsKICB1c2luZyA6OnNldGxvY2FsZTsKICB1c2luZyA6OmxvY2FsZWNv bnY7Cn0KIyAzNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9pMzg2LXNsYWNrd2FyZS1saW51eC9i aXRzL2MrK2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMSAzCiMg MjQgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL25sX3R5cGVz LmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvbmxfdHlwZXMuaCIgMwpleHRlcm4gIkMiIHsKCgp0 eXBlZGVmIHZvaWQgKm5sX2NhdGQ7CgoKdHlwZWRlZiBpbnQgbmxfaXRlbTsKCgpleHRlcm4gbmxf Y2F0ZCBjYXRvcGVuIChfX2NvbnN0IGNoYXIgKl9fY2F0X25hbWUsIGludCBfX2ZsYWcpIHRocm93 ICgpOwoKCgpleHRlcm4gY2hhciAqY2F0Z2V0cyAobmxfY2F0ZCBfX2NhdGFsb2csIGludCBfX3Nl dCwgaW50IF9fbnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3N0 cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjYXRjbG9zZSAobmxfY2F0ZCBfX2NhdGFsb2cp IHRocm93ICgpOwoKfQojIDI1ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMiAzCgojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZv LmgiIDIgMwoKCmV4dGVybiAiQyIgewojIDQzICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwpl bnVtCnsKCgoKICBBQkRBWV8xID0gKCgoX19MQ19USU1FKSA8PCAxNikgfCAoMCkpLAoKICBBQkRB WV8yLAoKICBBQkRBWV8zLAoKICBBQkRBWV80LAoKICBBQkRBWV81LAoKICBBQkRBWV82LAoKICBB QkRBWV83LAoKCgogIERBWV8xLAoKICBEQVlfMiwKCiAgREFZXzMsCgogIERBWV80LAoKICBEQVlf NSwKCiAgREFZXzYsCgogIERBWV83LAoKCgogIEFCTU9OXzEsCgogIEFCTU9OXzIsCgogIEFCTU9O XzMsCgogIEFCTU9OXzQsCgogIEFCTU9OXzUsCgogIEFCTU9OXzYsCgogIEFCTU9OXzcsCgogIEFC TU9OXzgsCgogIEFCTU9OXzksCgogIEFCTU9OXzEwLAoKICBBQk1PTl8xMSwKCiAgQUJNT05fMTIs CgoKCiAgTU9OXzEsCgogIE1PTl8yLAoKICBNT05fMywKCiAgTU9OXzQsCgogIE1PTl81LAoKICBN T05fNiwKCiAgTU9OXzcsCgogIE1PTl84LAoKICBNT05fOSwKCiAgTU9OXzEwLAoKICBNT05fMTEs CgogIE1PTl8xMiwKCgogIEFNX1NUUiwKCiAgUE1fU1RSLAoKCiAgRF9UX0ZNVCwKCiAgRF9GTVQs CgogIFRfRk1ULAoKICBUX0ZNVF9BTVBNLAoKCiAgRVJBLAoKICBfX0VSQV9ZRUFSLAoKCgogIEVS QV9EX0ZNVCwKCiAgQUxUX0RJR0lUUywKCiAgRVJBX0RfVF9GTVQsCgogIEVSQV9UX0ZNVCwKCgog IF9OTF9USU1FX0VSQV9OVU1fRU5UUklFUywKICBfTkxfVElNRV9FUkFfRU5UUklFUywKCiAgX05M X1dBQkRBWV8xLAogIF9OTF9XQUJEQVlfMiwKICBfTkxfV0FCREFZXzMsCiAgX05MX1dBQkRBWV80 LAogIF9OTF9XQUJEQVlfNSwKICBfTkxfV0FCREFZXzYsCiAgX05MX1dBQkRBWV83LAoKCiAgX05M X1dEQVlfMSwKICBfTkxfV0RBWV8yLAogIF9OTF9XREFZXzMsCiAgX05MX1dEQVlfNCwKICBfTkxf V0RBWV81LAogIF9OTF9XREFZXzYsCiAgX05MX1dEQVlfNywKCgogIF9OTF9XQUJNT05fMSwKICBf TkxfV0FCTU9OXzIsCiAgX05MX1dBQk1PTl8zLAogIF9OTF9XQUJNT05fNCwKICBfTkxfV0FCTU9O XzUsCiAgX05MX1dBQk1PTl82LAogIF9OTF9XQUJNT05fNywKICBfTkxfV0FCTU9OXzgsCiAgX05M X1dBQk1PTl85LAogIF9OTF9XQUJNT05fMTAsCiAgX05MX1dBQk1PTl8xMSwKICBfTkxfV0FCTU9O XzEyLAoKCiAgX05MX1dNT05fMSwKICBfTkxfV01PTl8yLAogIF9OTF9XTU9OXzMsCiAgX05MX1dN T05fNCwKICBfTkxfV01PTl81LAogIF9OTF9XTU9OXzYsCiAgX05MX1dNT05fNywKICBfTkxfV01P Tl84LAogIF9OTF9XTU9OXzksCiAgX05MX1dNT05fMTAsCiAgX05MX1dNT05fMTEsCiAgX05MX1dN T05fMTIsCgogIF9OTF9XQU1fU1RSLAogIF9OTF9XUE1fU1RSLAoKICBfTkxfV0RfVF9GTVQsCiAg X05MX1dEX0ZNVCwKICBfTkxfV1RfRk1ULAogIF9OTF9XVF9GTVRfQU1QTSwKCiAgX05MX1dFUkFf WUVBUiwKICBfTkxfV0VSQV9EX0ZNVCwKICBfTkxfV0FMVF9ESUdJVFMsCiAgX05MX1dFUkFfRF9U X0ZNVCwKICBfTkxfV0VSQV9UX0ZNVCwKCiAgX05MX1RJTUVfV0VFS19OREFZUywKICBfTkxfVElN RV9XRUVLXzFTVERBWSwKICBfTkxfVElNRV9XRUVLXzFTVFdFRUssCiAgX05MX1RJTUVfRklSU1Rf V0VFS0RBWSwKICBfTkxfVElNRV9GSVJTVF9XT1JLREFZLAogIF9OTF9USU1FX0NBTF9ESVJFQ1RJ T04sCiAgX05MX1RJTUVfVElNRVpPTkUsCgogIF9EQVRFX0ZNVCwKCiAgX05MX1dfREFURV9GTVQs CgogIF9OTF9USU1FX0NPREVTRVQsCgogIF9OTF9OVU1fTENfVElNRSwKCgoKCiAgX05MX0NPTExB VEVfTlJVTEVTID0gKCgoX19MQ19DT0xMQVRFKSA8PCAxNikgfCAoMCkpLAogIF9OTF9DT0xMQVRF X1JVTEVTRVRTLAogIF9OTF9DT0xMQVRFX1RBQkxFTUIsCiAgX05MX0NPTExBVEVfV0VJR0hUTUIs CiAgX05MX0NPTExBVEVfRVhUUkFNQiwKICBfTkxfQ09MTEFURV9JTkRJUkVDVE1CLAogIF9OTF9D T0xMQVRFX0dBUDEsCiAgX05MX0NPTExBVEVfR0FQMiwKICBfTkxfQ09MTEFURV9HQVAzLAogIF9O TF9DT0xMQVRFX1RBQkxFV0MsCiAgX05MX0NPTExBVEVfV0VJR0hUV0MsCiAgX05MX0NPTExBVEVf RVhUUkFXQywKICBfTkxfQ09MTEFURV9JTkRJUkVDVFdDLAogIF9OTF9DT0xMQVRFX1NZTUJfSEFT SF9TSVpFTUIsCiAgX05MX0NPTExBVEVfU1lNQl9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJf RVhUUkFNQiwKICBfTkxfQ09MTEFURV9DT0xMU0VRTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUVdD LAogIF9OTF9DT0xMQVRFX0NPREVTRVQsCiAgX05MX05VTV9MQ19DT0xMQVRFLAoKCgoKICBfTkxf Q1RZUEVfQ0xBU1MgPSAoKChfX0xDX0NUWVBFKSA8PCAxNikgfCAoMCkpLAogIF9OTF9DVFlQRV9U T1VQUEVSLAogIF9OTF9DVFlQRV9HQVAxLAogIF9OTF9DVFlQRV9UT0xPV0VSLAogIF9OTF9DVFlQ RV9HQVAyLAogIF9OTF9DVFlQRV9DTEFTUzMyLAogIF9OTF9DVFlQRV9HQVAzLAogIF9OTF9DVFlQ RV9HQVA0LAogIF9OTF9DVFlQRV9HQVA1LAogIF9OTF9DVFlQRV9HQVA2LAogIF9OTF9DVFlQRV9D TEFTU19OQU1FUywKICBfTkxfQ1RZUEVfTUFQX05BTUVTLAogIF9OTF9DVFlQRV9XSURUSCwKICBf TkxfQ1RZUEVfTUJfQ1VSX01BWCwKICBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FLAogIENPREVTRVQg PSBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FLAoKICBfTkxfQ1RZUEVfVE9VUFBFUjMyLAogIF9OTF9D VFlQRV9UT0xPV0VSMzIsCiAgX05MX0NUWVBFX0NMQVNTX09GRlNFVCwKICBfTkxfQ1RZUEVfTUFQ X09GRlNFVCwKICBfTkxfQ1RZUEVfSU5ESUdJVFNfTUJfTEVOLAogIF9OTF9DVFlQRV9JTkRJR0lU UzBfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTMV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMyX01C LAogIF9OTF9DVFlQRV9JTkRJR0lUUzNfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNF9NQiwKICBf TkxfQ1RZUEVfSU5ESUdJVFM1X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzZfTUIsCiAgX05MX0NU WVBFX0lORElHSVRTN19NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM4X01CLAogIF9OTF9DVFlQRV9J TkRJR0lUUzlfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTX1dDX0xFTiwKICBfTkxfQ1RZUEVfSU5E SUdJVFMwX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfV0MsCiAgX05MX0NUWVBFX0lORElHSVRT Ml9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMzX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRfV0Ms CiAgX05MX0NUWVBFX0lORElHSVRTNV9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM2X1dDLAogIF9O TF9DVFlQRV9JTkRJR0lUUzdfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTOF9XQywKICBfTkxfQ1RZ UEVfSU5ESUdJVFM5X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDBfTUIsCiAgX05MX0NUWVBFX09V VERJR0lUMV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQyX01CLAogIF9OTF9DVFlQRV9PVVRESUdJ VDNfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUNF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ1X01C LAogIF9OTF9DVFlQRV9PVVRESUdJVDZfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUN19NQiwKICBf TkxfQ1RZUEVfT1VURElHSVQ4X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDlfTUIsCiAgX05MX0NU WVBFX09VVERJR0lUMF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQxX1dDLAogIF9OTF9DVFlQRV9P VVRESUdJVDJfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUM19XQywKICBfTkxfQ1RZUEVfT1VURElH SVQ0X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDVfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUNl9X QywKICBfTkxfQ1RZUEVfT1VURElHSVQ3X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDhfV0MsCiAg X05MX0NUWVBFX09VVERJR0lUOV9XQywKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVEFCX1NJWkUsCiAg X05MX0NUWVBFX1RSQU5TTElUX0ZST01fSURYLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX1RC TCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9fSURYLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19U QkwsCiAgX05MX0NUWVBFX1RSQU5TTElUX0RFRkFVTFRfTUlTU0lOR19MRU4sCiAgX05MX0NUWVBF X1RSQU5TTElUX0RFRkFVTFRfTUlTU0lORywKICBfTkxfQ1RZUEVfVFJBTlNMSVRfSUdOT1JFX0xF TiwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfSUdOT1JFLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMSwK ICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzIsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8zLAogIF9OTF9D VFlQRV9FWFRSQV9NQVBfNCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzUsCiAgX05MX0NUWVBFX0VY VFJBX01BUF82LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQ XzgsCiAgX05MX0NUWVBFX0VYVFJBX01BUF85LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTAsCiAg X05MX0NUWVBFX0VYVFJBX01BUF8xMSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEyLAogIF9OTF9D VFlQRV9FWFRSQV9NQVBfMTMsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xNCwKICBfTkxfTlVNX0xD X0NUWVBFLAoKCgoKICBfX0lOVF9DVVJSX1NZTUJPTCA9ICgoKF9fTENfTU9ORVRBUlkpIDw8IDE2 KSB8ICgwKSksCgoKCiAgX19DVVJSRU5DWV9TWU1CT0wsCgoKCiAgX19NT05fREVDSU1BTF9QT0lO VCwKCgoKICBfX01PTl9USE9VU0FORFNfU0VQLAoKCgogIF9fTU9OX0dST1VQSU5HLAoKCgogIF9f UE9TSVRJVkVfU0lHTiwKCgoKICBfX05FR0FUSVZFX1NJR04sCgoKCiAgX19JTlRfRlJBQ19ESUdJ VFMsCgoKCiAgX19GUkFDX0RJR0lUUywKCgoKICBfX1BfQ1NfUFJFQ0VERVMsCgoKCiAgX19QX1NF UF9CWV9TUEFDRSwKCgoKICBfX05fQ1NfUFJFQ0VERVMsCgoKCiAgX19OX1NFUF9CWV9TUEFDRSwK CgoKICBfX1BfU0lHTl9QT1NOLAoKCgogIF9fTl9TSUdOX1BPU04sCgoKCiAgX05MX01PTkVUQVJZ X0NSTkNZU1RSLAoKICBfX0lOVF9QX0NTX1BSRUNFREVTLAoKCgogIF9fSU5UX1BfU0VQX0JZX1NQ QUNFLAoKCgogIF9fSU5UX05fQ1NfUFJFQ0VERVMsCgoKCiAgX19JTlRfTl9TRVBfQllfU1BBQ0Us CgoKCiAgX19JTlRfUF9TSUdOX1BPU04sCgoKCiAgX19JTlRfTl9TSUdOX1BPU04sCgoKCiAgX05M X01PTkVUQVJZX0RVT19JTlRfQ1VSUl9TWU1CT0wsCiAgX05MX01PTkVUQVJZX0RVT19DVVJSRU5D WV9TWU1CT0wsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfRlJBQ19ESUdJVFMsCiAgX05MX01PTkVU QVJZX0RVT19GUkFDX0RJR0lUUywKICBfTkxfTU9ORVRBUllfRFVPX1BfQ1NfUFJFQ0VERVMsCiAg X05MX01PTkVUQVJZX0RVT19QX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX05fQ1Nf UFJFQ0VERVMsCiAgX05MX01PTkVUQVJZX0RVT19OX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRB UllfRFVPX0lOVF9QX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfU0VQX0JZ X1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVU QVJZX0RVT19JTlRfTl9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19QX1NJR05fUE9T TiwKICBfTkxfTU9ORVRBUllfRFVPX05fU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9fSU5U X1BfU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fU0lHTl9QT1NOLAogIF9OTF9N T05FVEFSWV9VTk9fVkFMSURfRlJPTSwKICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX1RPLAogIF9O TF9NT05FVEFSWV9EVU9fVkFMSURfRlJPTSwKICBfTkxfTU9ORVRBUllfRFVPX1ZBTElEX1RPLAog IF9OTF9NT05FVEFSWV9DT05WRVJTSU9OX1JBVEUsCiAgX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9J TlRfV0MsCiAgX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsCiAgX05MX01PTkVUQVJZX0NP REVTRVQsCiAgX05MX05VTV9MQ19NT05FVEFSWSwKCgoKICBfX0RFQ0lNQUxfUE9JTlQgPSAoKChf X0xDX05VTUVSSUMpIDw8IDE2KSB8ICgwKSksCgoKCiAgUkFESVhDSEFSID0gX19ERUNJTUFMX1BP SU5ULAoKICBfX1RIT1VTQU5EU19TRVAsCgoKCiAgVEhPVVNFUCA9IF9fVEhPVVNBTkRTX1NFUCwK CiAgX19HUk9VUElORywKCgoKICBfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLAogIF9OTF9O VU1FUklDX1RIT1VTQU5EU19TRVBfV0MsCiAgX05MX05VTUVSSUNfQ09ERVNFVCwKICBfTkxfTlVN X0xDX05VTUVSSUMsCgogIF9fWUVTRVhQUiA9ICgoKF9fTENfTUVTU0FHRVMpIDw8IDE2KSB8ICgw KSksCgogIF9fTk9FWFBSLAoKICBfX1lFU1NUUiwKCgoKICBfX05PU1RSLAoKCgogIF9OTF9NRVNT QUdFU19DT0RFU0VULAogIF9OTF9OVU1fTENfTUVTU0FHRVMsCgogIF9OTF9QQVBFUl9IRUlHSFQg PSAoKChfX0xDX1BBUEVSKSA8PCAxNikgfCAoMCkpLAogIF9OTF9QQVBFUl9XSURUSCwKICBfTkxf UEFQRVJfQ09ERVNFVCwKICBfTkxfTlVNX0xDX1BBUEVSLAoKICBfTkxfTkFNRV9OQU1FX0ZNVCA9 ICgoKF9fTENfTkFNRSkgPDwgMTYpIHwgKDApKSwKICBfTkxfTkFNRV9OQU1FX0dFTiwKICBfTkxf TkFNRV9OQU1FX01SLAogIF9OTF9OQU1FX05BTUVfTVJTLAogIF9OTF9OQU1FX05BTUVfTUlTUywK ICBfTkxfTkFNRV9OQU1FX01TLAogIF9OTF9OQU1FX0NPREVTRVQsCiAgX05MX05VTV9MQ19OQU1F LAoKICBfTkxfQUREUkVTU19QT1NUQUxfRk1UID0gKCgoX19MQ19BRERSRVNTKSA8PCAxNikgfCAo MCkpLAogIF9OTF9BRERSRVNTX0NPVU5UUllfTkFNRSwKICBfTkxfQUREUkVTU19DT1VOVFJZX1BP U1QsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9BQjIsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9BQjMs CiAgX05MX0FERFJFU1NfQ09VTlRSWV9DQVIsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9OVU0sCiAg X05MX0FERFJFU1NfQ09VTlRSWV9JU0JOLAogIF9OTF9BRERSRVNTX0xBTkdfTkFNRSwKICBfTkxf QUREUkVTU19MQU5HX0FCLAogIF9OTF9BRERSRVNTX0xBTkdfVEVSTSwKICBfTkxfQUREUkVTU19M QU5HX0xJQiwKICBfTkxfQUREUkVTU19DT0RFU0VULAogIF9OTF9OVU1fTENfQUREUkVTUywKCiAg X05MX1RFTEVQSE9ORV9URUxfSU5UX0ZNVCA9ICgoKF9fTENfVEVMRVBIT05FKSA8PCAxNikgfCAo MCkpLAogIF9OTF9URUxFUEhPTkVfVEVMX0RPTV9GTVQsCiAgX05MX1RFTEVQSE9ORV9JTlRfU0VM RUNULAogIF9OTF9URUxFUEhPTkVfSU5UX1BSRUZJWCwKICBfTkxfVEVMRVBIT05FX0NPREVTRVQs CiAgX05MX05VTV9MQ19URUxFUEhPTkUsCgogIF9OTF9NRUFTVVJFTUVOVF9NRUFTVVJFTUVOVCA9 ICgoKF9fTENfTUVBU1VSRU1FTlQpIDw8IDE2KSB8ICgwKSksCiAgX05MX01FQVNVUkVNRU5UX0NP REVTRVQsCiAgX05MX05VTV9MQ19NRUFTVVJFTUVOVCwKCiAgX05MX0lERU5USUZJQ0FUSU9OX1RJ VExFID0gKCgoX19MQ19JREVOVElGSUNBVElPTikgPDwgMTYpIHwgKDApKSwKICBfTkxfSURFTlRJ RklDQVRJT05fU09VUkNFLAogIF9OTF9JREVOVElGSUNBVElPTl9BRERSRVNTLAogIF9OTF9JREVO VElGSUNBVElPTl9DT05UQUNULAogIF9OTF9JREVOVElGSUNBVElPTl9FTUFJTCwKICBfTkxfSURF TlRJRklDQVRJT05fVEVMLAogIF9OTF9JREVOVElGSUNBVElPTl9GQVgsCiAgX05MX0lERU5USUZJ Q0FUSU9OX0xBTkdVQUdFLAogIF9OTF9JREVOVElGSUNBVElPTl9URVJSSVRPUlksCiAgX05MX0lE RU5USUZJQ0FUSU9OX0FVRElFTkNFLAogIF9OTF9JREVOVElGSUNBVElPTl9BUFBMSUNBVElPTiwK ICBfTkxfSURFTlRJRklDQVRJT05fQUJCUkVWSUFUSU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9S RVZJU0lPTiwKICBfTkxfSURFTlRJRklDQVRJT05fREFURSwKICBfTkxfSURFTlRJRklDQVRJT05f Q0FURUdPUlksCiAgX05MX0lERU5USUZJQ0FUSU9OX0NPREVTRVQsCiAgX05MX05VTV9MQ19JREVO VElGSUNBVElPTiwKCgogIF9OTF9OVU0KfTsKIyA1NzUgIi91c3IvaW5jbHVkZS9sYW5naW5mby5o IiAzCmV4dGVybiBjaGFyICpubF9sYW5naW5mbyAobmxfaXRlbSBfX2l0ZW0pIHRocm93ICgpOwoj IDU4NiAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMKZXh0ZXJuIGNoYXIgKm5sX2xhbmdpbmZv X2wgKG5sX2l0ZW0gX19pdGVtLCBfX2xvY2FsZV90IGwpOwoKCn0KIyAzOCAiL3Vzci9pbmNsdWRl L2MrKy8zLjIuMS9pMzg2LXNsYWNrd2FyZS1saW51eC9iaXRzL2MrK2xvY2FsZS5oIiAyIDMKIyAx ICIvdXNyL2luY2x1ZGUvaWNvbnYuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9pY29udi5oIiAz CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8zLjIuMS9pbmNsdWRl L3N0ZGRlZi5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDIgMwoKCmV4dGVybiAi QyIgewoKCnR5cGVkZWYgdm9pZCAqaWNvbnZfdDsKCgoKCmV4dGVybiBpY29udl90IGljb252X29w ZW4gKF9fY29uc3QgY2hhciAqX190b2NvZGUsIF9fY29uc3QgY2hhciAqX19mcm9tY29kZSkKICAg ICB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3QgaWNvbnYgKGljb252X3QgX19jZCwgY2hhciAq Kl9fcmVzdHJpY3QgX19pbmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3Ry aWN0IF9faW5ieXRlc2xlZnQsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fb3V0YnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19vdXRi eXRlc2xlZnQpOwoKCmV4dGVybiBpbnQgaWNvbnZfY2xvc2UgKGljb252X3QgX19jZCkgdGhyb3cg KCk7Cgp9CiMgMzkgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaTM4Ni1zbGFja3dhcmUtbGludXgv Yml0cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIgMSAzCiMg MzUgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgpleHRlcm4gY2hh ciAqZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNo YXIgKmRnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgX19jb25zdCBjaGFyICpf X21zZ2lkKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqX19kZ2V0dGV4dCAoX19jb25zdCBj aGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZCkKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSk7CgoKCmV4dGVybiBjaGFyICpkY2dl dHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KSB0aHJvdyAoKTsKZXh0ZXJu IGNoYXIgKl9fZGNnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoKCmV4 dGVybiBjaGFyICpuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkMSwgX19jb25zdCBjaGFy ICpfX21zZ2lkMiwKICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGludCBfX24p CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgxKSkpIF9fYXR0 cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoKZXh0ZXJuIGNoYXIgKmRuZ2V0dGV4 dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZDEsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2lnbmVkIGxv bmcgaW50IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18g KDIpKSkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgpleHRlcm4gY2hh ciAqZGNuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAq X19tc2dpZDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQy LCB1bnNpZ25lZCBsb25nIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19j YXRlZ29yeSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIp KSkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgoKCmV4dGVybiBjaGFy ICp0ZXh0ZG9tYWluIChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkgdGhyb3cgKCk7CgoKCmV4 dGVybiBjaGFyICpiaW5kdGV4dGRvbWFpbiAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Rpcm5hbWUpIHRocm93 ICgpOwoKCgpleHRlcm4gY2hhciAqYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKF9fY29uc3QgY2hh ciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19jb2Rlc2V0KSB0aHJvdyAoKTsKIyAxMjAgIi91c3IvaW5jbHVkZS9saWJp bnRsLmgiIDMKfQojIDQwICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYtc2xhY2t3YXJlLWxp bnV4L2JpdHMvYysrbG9jYWxlLmgiIDIgMwoKCgoKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICBl eHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7Cn0KCgpuYW1lc3BhY2Ug c3RkCnsKICB0eXBlZGVmIF9fbG9jYWxlX3QgX19jX2xvY2FsZTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1R2PgogICAgaW50CiAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LCBjb25zdCBp bnQgX19zaXplLCBjb25zdCBjaGFyKiBfX2ZtdCwKCiAgICAgICAgICAgICAgICAgICAgIF9UdiBf X3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYyA9IC0xKQogICAgewogICAg ICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOwojIDcz ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYtc2xhY2t3YXJlLWxpbnV4L2JpdHMvYysrbG9j YWxlLmgiIDMKICAgICAgaW50IF9fcmV0OwoKICAgICAgaWYgKF9fcHJlYyA+PSAwKQogICAgICAg IF9fcmV0ID0gc25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKICAg ICAgZWxzZQogICAgICAgIF9fcmV0ID0gc25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9f dik7CiMgODcgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaTM4Ni1zbGFja3dhcmUtbGludXgvYml0 cy9jKytsb2NhbGUuaCIgMwogICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKCgoK CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KfQojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvY2xpbWl0 cyIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvY2xpbWl0cyIgMwoKIyAxICIvdXNy L2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzMuMi4xL2luY2x1ZGUvbGltaXRzLmgi IDEgMwojIDExICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzMuMi4xL2lu Y2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxp bnV4LzMuMi4xL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbGliL2dj Yy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMy4yLjEvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMg MTMyICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzMuMi4xL2luY2x1ZGUv bGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDE0NCAiL3Vzci9p bmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAx IDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMwojIDEgIi91c3IvaW5j bHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxf bGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMwojIDM3ICIvdXNy L2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9w b3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEgMwojIDE0OSAiL3Vzci9pbmNsdWRl L2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMSAz CiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0u aCIgMiAzCiMgMTM2ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDEzNyAiL3Vzci9pbmNsdWRlL2JpdHMveG9w ZW5fbGltLmgiIDIgMwojIDE1MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAxMzMgIi91 c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMy4yLjEvaW5jbHVkZS9saW1pdHMu aCIgMiAzCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8zLjIuMS9p bmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNr d2FyZS1saW51eC8zLjIuMS9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA1MCAiL3Vzci9pbmNsdWRl L2MrKy8zLjIuMS9jbGltaXRzIiAyIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz L2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2NjdHlwZSIgMSAz CiMgNDcgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvY2N0eXBlIiAzCgoKIyAxICIvdXNyL2luY2x1 ZGUvY3R5cGUuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiAiQyIg ewojIDQxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4u aCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9i aXRzL2VuZGlhbi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKIyA0MiAi L3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMwoKCgoKCgplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkg PCA4ID8gKCgxIDw8ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIg PSAoKDEpIDwgOCA/ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9J U2FscGhhID0gKCgyKSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgp KSwKICBfSVNkaWdpdCA9ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMp KSA+PiA4KSksCiAgX0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgo MSA8PCAoNCkpID4+IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwg OCkgOiAoKDEgPDwgKDUpKSA+PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAo NikpIDw8IDgpIDogKCgxIDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAo KDEgPDwgKDcpKSA8PCA4KSA6ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkg PCA4ID8gKCgxIDw8ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwg PSAoKDkpIDwgOCA/ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9J U3B1bmN0ID0gKCgxMCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+ IDgpKSwKICBfSVNhbG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8 PCAoMTEpKSA+PiA4KSkKfTsKIyA4MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9f Y29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICoqX19jdHlwZV9iX2xvYyAodm9pZCkKICAgICBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdCkpOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKipfX2N0eXBl X3RvbG93ZXJfbG9jICh2b2lkKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0KSk7CmV4dGVy biBfX2NvbnN0IF9faW50MzJfdCAqKl9fY3R5cGVfdG91cHBlcl9sb2MgKHZvaWQpCiAgICAgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3QpKTsKIyA5NiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKCgoK CgoKZXh0ZXJuIGludCBpc2FsbnVtIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzYWxwaGEg KGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNjbnRybCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu IGludCBpc2RpZ2l0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzbG93ZXIgKGludCkgdGhy b3cgKCk7CmV4dGVybiBpbnQgaXNncmFwaCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3By aW50IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHVuY3QgKGludCkgdGhyb3cgKCk7CmV4 dGVybiBpbnQgaXNzcGFjZSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3VwcGVyIChpbnQp IHRocm93ICgpOwpleHRlcm4gaW50IGlzeGRpZ2l0IChpbnQpIHRocm93ICgpOwoKCgpleHRlcm4g aW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50 IF9fYykgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBpc2JsYW5rIChpbnQpIHRocm93ICgp OwoKCgoKCgpleHRlcm4gaW50IGlzY3R5cGUgKGludCBfX2MsIGludCBfX21hc2spIHRocm93ICgp OwoKCgoKCgpleHRlcm4gaW50IGlzYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4g aW50IHRvYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF90b3VwcGVyIChp bnQpIHRocm93ICgpOwpleHRlcm4gaW50IF90b2xvd2VyIChpbnQpIHRocm93ICgpOwojIDI0NyAi L3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBpc2FsbnVtX2wgKGludCwgX19sb2Nh bGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNhbHBoYV9sIChpbnQsIF9fbG9jYWxlX3QpIHRo cm93ICgpOwpleHRlcm4gaW50IGlzY250cmxfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBpc2RpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBp bnQgaXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3Jh cGhfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3ByaW50X2wgKGlu dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwdW5jdF9sIChpbnQsIF9fbG9j YWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBpc3VwcGVyX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7 CmV4dGVybiBpbnQgaXN4ZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCmV4dGVy biBpbnQgaXNibGFua19sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKCgpleHRlcm4gaW50 IF9fdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CmV4dGVybiBp bnQgdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBfX3RvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwpleHRl cm4gaW50IHRvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwojIDMy MyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKfQojIDUwICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2NjdHlwZSIgMiAzCiMgNjYgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvY2N0eXBlIiAzCm5hbWVz cGFjZSBzdGQKewogIHVzaW5nIDo6aXNhbG51bTsKICB1c2luZyA6OmlzYWxwaGE7CiAgdXNpbmcg Ojppc2NudHJsOwogIHVzaW5nIDo6aXNkaWdpdDsKICB1c2luZyA6OmlzZ3JhcGg7CiAgdXNpbmcg Ojppc2xvd2VyOwogIHVzaW5nIDo6aXNwcmludDsKICB1c2luZyA6OmlzcHVuY3Q7CiAgdXNpbmcg Ojppc3NwYWNlOwogIHVzaW5nIDo6aXN1cHBlcjsKICB1c2luZyA6OmlzeGRpZ2l0OwogIHVzaW5n IDo6dG9sb3dlcjsKICB1c2luZyA6OnRvdXBwZXI7Cn0KIyA0OSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIuMS9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL3N0 cmluZyIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvc3RyaW5nIiAzCgoKCgojIDEg Ii91c3IvaW5jbHVkZS9jKysvMy4yLjEvbWVtb3J5IiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIuMS9tZW1vcnkiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9h bGdvYmFzZS5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdv YmFzZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jc3RkbGliIiAxIDMKIyA0OCAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jc3RkbGliIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvbGli L2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMy4yLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAz CiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgoKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy93YWl0ZmxhZ3MuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2 NSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAzCnVuaW9uIHdhaXQKICB7CiAgICBp bnQgd19zdGF0dXM7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193 X3Rlcm1zaWc6NzsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAg dW5zaWduZWQgaW50IF9fd19yZXRjb2RlOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoK CgoKICAgICAgfSBfX3dhaXRfdGVybWluYXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAg IHVuc2lnbmVkIGludCBfX3dfc3RvcHZhbDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3Rv cHNpZzo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3Rv cHBlZDsKICB9OwojIDQ0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDkzICIvdXNyL2lu Y2x1ZGUvc3RkbGliLmgiIDMKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAg aW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1 b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CgoKCgoKCgpfX2V4dGVuc2lvbl9fIHR5 cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBsb25nIGludCBxdW90OwogICAgbG9uZyBsb25nIGlu dCByZW07CiAgfSBsbGRpdl90OwoKCiMgMTM3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0 ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0 cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQg YXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9f Y29uc3QgY2hhciAqX19ucHRyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIp IHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVy biB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4 dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBs b25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0 ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQg bG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKIyAyMjkgIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMwpleHRlcm4gbG9uZyBpbnQgc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2Nh bGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bF9s IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg KCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGxfbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9u X18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGxfbCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhy b3cgKCk7CgpleHRlcm4gZG91YmxlIHN0cnRvZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzdHJ0b2Zf bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7 CgpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsK ZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91Ymxl IF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3Vw KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNp Z25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4 dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7 CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3Vs bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKIyA0MDggIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsK CgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAx IDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCmV4dGVybiAiQyIgewoKCgoKCnR5 cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVm IF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90 IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZz aWRfdDsKCgoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5v X3Q7CgoKCgoKCnR5cGVkZWYgX19pbm82NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3Qg ZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1v ZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3Qg dWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRf dCBvZmY2NF90OwojIDEwNCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19p ZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKCnR5cGVkZWYgX19k YWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCgoKdHlwZWRlZiBf X2tleV90IGtleV90OwojIDEzNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYg X191c2Vjb25kc190IHVzZWNvbmRzX3Q7CgoKCnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29u ZHNfdDsKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMy4y LjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi IDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVk IHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTk2ICIvdXNy L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19h dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVf aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNp Z25lZCBpbnQgdV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0 eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf X0RJX18pKSk7Cgp0eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf XyAoX193b3JkX18pKSk7CiMgMjE1ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxl Y3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMKIyAzMiAiL3Vzci9p bmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQu aCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwojIDQ2ICIvdXNyL2lu Y2x1ZGUvc3lzL3NlbGVjdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMK IyA2NyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCnN0cnVjdCB0aW1ldmFsCiAgewogICAg X190aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07CiMgNDcgIi91 c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwojIDU1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVj dC5oIiAzCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwojIDY3ICIvdXNyL2luY2x1ZGUvc3lz L3NlbGVjdC5oIiAzCnR5cGVkZWYgc3RydWN0CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRz WzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwoKCgoKCiAgfSBmZF9zZXQ7CgoKCgoK CnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CiMgOTkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0 LmgiIDMKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBm ZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpf X3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJp Y3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0 cmljdCBfX3RpbWVvdXQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9f bmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgICBm ZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQg Kl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0 IHRpbWVzcGVjICpfX3Jlc3RyaWN0IF9fdGltZW91dCwKICAgICAgICAgICAgICAgICAgICBjb25z dCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fc2lnbWFzaykgdGhyb3cgKCk7CgoKfQojIDIxNiAi L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lz bWFjcm9zLmgiIDEgMwojIDIxOSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCnR5 cGVkZWYgX19ibGtzaXplX3QgYmxrc2l6ZV90OwoKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxr Y250X3Q7CgoKCnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19m c2ZpbGNudF90IGZzZmlsY250X3Q7CiMgMjU3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMK dHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBm c2Jsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCn0KIyA0 MTUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCmV4dGVybiBsb25nIGludCByYW5k b20gKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBf X3NlZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGlu dCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX3N0YXRlbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChjaGFyICpf X3N0YXRlYnVmKSB0aHJvdyAoKTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGlu dDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBp bnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAgaW50 MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9k YXRhICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpfX3Jl c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25l ZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsKCmV4dGVy biBpbnQgaW5pdHN0YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3Qg X19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sCiAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1 ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19z dGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVz dHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZvaWQpIHRocm93 ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoK CgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAoKTsKCgoK CgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUg ZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVy biBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IG5yYW5k NDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9u ZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1 bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3Jh bmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0 IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJvdyAoKTsK ZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIHRocm93 ICgpOwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQg X194WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNpZ25lZCBz aG9ydCBpbnQgX19jOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBk cmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBk b3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGVyYW5kNDhf ciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAg ICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAg ICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAo KTsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAog ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1 ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0 KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAq X19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jl c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVk IHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5k NDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcg aW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNyYW5kNDhf ciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAg ICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3Nl ZWQxNnZbM10sCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVm ZmVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQg X19wYXJhbVs3XSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f YnVmZmVyKSB0aHJvdyAoKTsKCgoKCgoKCgoKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9f c2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lk ICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKCgpleHRlcm4gdm9pZCAqcmVhbGxvYyAo dm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21h bGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCgpl eHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgojIDEgIi91c3IvaW5j bHVkZS9hbGxvY2EuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMwojIDEgIi91 c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMy4yLjEvaW5jbHVkZS9zdGRkZWYu aCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoK CgpleHRlcm4gdm9pZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgp9CiMg NTc3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAo c2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoK CmV4dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90IF9fYWxp Z25tZW50LCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21h bGxvY19fKSk7CgoKCgpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVu YykgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1 bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cg KCk7CgoKCgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9f c3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoKCmV4 dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoK CmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpf X3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdW5zZXRl bnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVh cmVudiAodm9pZCkgdGhyb3cgKCk7CiMgNjYxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0 ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRl cm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY3OCAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgbWtzdGVtcDY0IChjaGFyICpfX3RlbXBsYXRl KSB0aHJvdyAoKTsKIyA2ODggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAq bWtkdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzeXN0 ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFy ICpjYW5vbmljYWxpemVfZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7 CiMgNzEyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgq X19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRl ZiBfX2NvbXBhcl9mbl90IGNvbXBhcmlzb25fZm5fdDsKCgoKCgoKZXh0ZXJuIHZvaWQgKmJzZWFy Y2ggKF9fY29uc3Qgdm9pZCAqX19rZXksIF9fY29uc3Qgdm9pZCAqX19iYXNlLAogICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3Qg X19jb21wYXIpOwoKCgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19u bWVtYiwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3QgX19j b21wYXIpOwoKCgpleHRlcm4gaW50IGFicyAoaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJu IGxvbmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBkaXZfdCBkaXYgKGludCBf X251bWVyLCBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19k ZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpfX2V4 dGVuc2lvbl9fIGV4dGVybiBsbGRpdl90IGxsZGl2IChsb25nIGxvbmcgaW50IF9fbnVtZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBpbnQgX19kZW5vbSkK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgojIDc3NiAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50 IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGlu dCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRv dWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAg ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRl cm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBp bnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQs IGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWZjdnQgKGxv bmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQg Kl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4 dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFy ICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUs IGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAg ICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmY3Z0X3IgKGRv dWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAg ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBf X2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgpleHRlcm4g aW50IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAg ICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2ln biwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19s ZW4pIHRocm93ICgpOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGlu dCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwg aW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3Ry aWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBtYmxl biAoX19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg bWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCB3Y3RvbWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24p IHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3Ms CiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3 Y3MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNo IChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwojIDg1OCAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29w dGlvbnAsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9f dG9rZW5zLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXAp IHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkg dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHBvc2l4X29wZW5wdCAoaW50IF9fb2ZsYWcpIHRo cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoK CmV4dGVybiBpbnQgdW5sb2NrcHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFy ICpwdHNuYW1lIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9y IChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBnZXRwdCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgZ2V0bG9hZGF2 ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgdGhyb3cgKCk7CgoKCgoKfQojIDUz ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2NzdGRsaWIiIDIgMwojIDg0ICIvdXNyL2luY2x1ZGUv YysrLzMuMi4xL2NzdGRsaWIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpkaXZfdDsKICB1 c2luZyA6OmxkaXZfdDsKCiAgdXNpbmcgOjphYm9ydDsKICB1c2luZyA6OmFiczsKICB1c2luZyA6 OmF0ZXhpdDsKICB1c2luZyA6OmF0b2Y7CiAgdXNpbmcgOjphdG9pOwogIHVzaW5nIDo6YXRvbDsK ICB1c2luZyA6OmJzZWFyY2g7CiAgdXNpbmcgOjpjYWxsb2M7CiAgdXNpbmcgOjpkaXY7CiAgdXNp bmcgOjpleGl0OwogIHVzaW5nIDo6ZnJlZTsKICB1c2luZyA6OmdldGVudjsKICB1c2luZyA6Omxh YnM7CiAgdXNpbmcgOjpsZGl2OwogIHVzaW5nIDo6bWFsbG9jOwogIHVzaW5nIDo6bWJsZW47CiAg dXNpbmcgOjptYnN0b3djczsKICB1c2luZyA6Om1idG93YzsKICB1c2luZyA6OnFzb3J0OwogIHVz aW5nIDo6cmFuZDsKICB1c2luZyA6OnJlYWxsb2M7CiAgdXNpbmcgOjpzcmFuZDsKICB1c2luZyA6 OnN0cnRvZDsKICB1c2luZyA6OnN0cnRvbDsKICB1c2luZyA6OnN0cnRvdWw7CiAgdXNpbmcgOjpz eXN0ZW07CiAgdXNpbmcgOjp3Y3N0b21iczsKICB1c2luZyA6OndjdG9tYjsKCiAgaW5saW5lIGxv bmcKICBhYnMobG9uZyBfX2kpIHsgcmV0dXJuIGxhYnMoX19pKTsgfQoKICBpbmxpbmUgbGRpdl90 CiAgZGl2KGxvbmcgX19pLCBsb25nIF9faikgeyByZXR1cm4gbGRpdihfX2ksIF9faik7IH0KfQoj IDEzNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jc3RkbGliIiAzCm5hbWVzcGFjZSBfX2dudV9j eHgKewogIHVzaW5nIDo6bGxkaXZfdDsKICB1c2luZyA6Ol9FeGl0OwoKICBpbmxpbmUgbG9uZyBs b25nCiAgYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9feDsg fQoKICBpbmxpbmUgbG9uZyBsb25nCiAgbGxhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX194 ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsbGRpdl90CiAgZGl2KGxvbmcgbG9uZyBf X24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7 IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBs bGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7IF9fcS5x dW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9CgogIHVz aW5nIDo6YXRvbGw7CiAgdXNpbmcgOjpzdHJ0b2Y7CiAgdXNpbmcgOjpzdHJ0b2xsOwogIHVzaW5n IDo6c3RydG91bGw7CiAgdXNpbmcgOjpzdHJ0b2xkOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2lu ZyBfX2dudV9jeHg6OmxsZGl2X3Q7CiAgdXNpbmcgX19nbnVfY3h4OjpfRXhpdDsKICB1c2luZyBf X2dudV9jeHg6OmFiczsKICB1c2luZyBfX2dudV9jeHg6OmxsYWJzOwogIHVzaW5nIF9fZ251X2N4 eDo6ZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXY7CiAgdXNpbmcgX19nbnVfY3h4OjphdG9s bDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvZjsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvbGw7 CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b3VsbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvbGQ7 Cn0KIyA2OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMK CiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9uZXciIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUv YysrLzMuMi4xL25ldyIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CgoKICBjbGFz cyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9hbGxv YygpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9hbGxvYygpIHRocm93KCk7CiAgfTsK CiAgc3RydWN0IG5vdGhyb3dfdCB7IH07CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBub3Rocm93 OwoKCiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CgogIG5ld19oYW5kbGVyIHNldF9u ZXdfaGFuZGxlcihuZXdfaGFuZGxlcikgdGhyb3coKTsKfQojIDc5ICIvdXNyL2luY2x1ZGUvYysr LzMuMi4xL25ldyIgMwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChzdGQ6 OmJhZF9hbGxvYyk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3Rk OjpiYWRfYWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikgdGhyb3coKTsKdm9pZCBv cGVyYXRvciBkZWxldGVbXSh2b2lkKikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6 c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5l d1tdKHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3Bl cmF0b3IgZGVsZXRlKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQg b3BlcmF0b3IgZGVsZXRlW10odm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsK CgppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRocm93 KCkgeyByZXR1cm4gX19wOyB9CmlubGluZSB2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVf dCwgdm9pZCogX19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQoKCmlubGluZSB2b2lkIG9wZXJh dG9yIGRlbGV0ZSAodm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfTsKaW5saW5lIHZvaWQgb3BlcmF0 b3IgZGVsZXRlW10odm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfTsKCn0KIyA3MCAiL3Vzci9pbmNs dWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIuMS9iaXRzL3N0bF9wYWlyLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi4xL2JpdHMvc3RsX3BhaXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwog IHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKCgoK CiAgcGFpcigpIDogZmlyc3QoKSwgc2Vjb25kKCkge30KCgoKCiAgcGFpcihjb25zdCBfVDEmIF9f YSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30KCgogIHRlbXBs YXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KICBwYWlyKGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBf X3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9Cn07CgoKdGVtcGxh dGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBh aXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4g X194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7Cn0KCgp0 ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25z dCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0 dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3kuZmlyc3QgPCBfX3gu Zmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf VDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwYWlyPF9UMSwgX1Qy PiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9f eSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJh dG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195 KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U Mj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25z dCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKCnRlbXBs YXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBw YWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJu ICEoX194IDwgX195KTsKfQojIDE0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9w YWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgoKCmlubGluZSBwYWlyPF9U MSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9feSkKCgoKewogIHJldHVybiBwYWlyPF9U MSwgX1QyPihfX3gsIF9feSk7Cn0KCn0KIyA3MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz L3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvdHlw ZV90cmFpdHMuaCIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy90eXBlX3Ry YWl0cy5oIiAzCiMgOTAgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy90eXBlX3RyYWl0cy5o IiAzCnN0cnVjdCBfX3RydWVfdHlwZSB7fTsKc3RydWN0IF9fZmFsc2VfdHlwZSB7fTsKCnRlbXBs YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwojIDExMyAiL3Vzci9pbmNsdWRl L2MrKy8zLjIuMS9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUg aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFz X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7 Cn07CgoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2ln bmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190 eXBlX3RyYWl0czx1bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7 Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q T0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hv cnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry YWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190 eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9u Zz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh aXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0 ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlw ZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1 bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50 X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNs YXNzIF9UcD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50 ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRl ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl cjxjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ IHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hh cj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1 Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9f dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVu c2lnbmVkIHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1w bGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J bnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4g ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg X0lzX2ludGVnZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoK dGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYg X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8 bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0 ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9f dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9J c19ub3JtYWxfaXRlcmF0b3IgewogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9ybWFsOwp9OwoK Cm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlw ZW5hbWUgX0NvbnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7Cn0KCnRlbXBsYXRlPHR5 cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9Jc19ub3JtYWxf aXRlcmF0b3I8IF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFp bmVyPiA+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDczICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVk ZS9jKysvMy4yLjEvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAxIDMKIyA2OCAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKCm5h bWVzcGFjZSBzdGQKewojIDgwICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2l0ZXJh dG9yX2Jhc2VfdHlwZXMuaCIgMwogIHN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CgogIHN0 cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90 YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgYmlkaXJlY3Rpb25h bF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcge307CgogIHN0cnVj dCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJh dG9yX3RhZyB7fTsKIyAxMDAgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfaXRlcmF0 b3JfYmFzZV90eXBlcy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhdGVnb3J5LCB0eXBlbmFt ZSBfVHAsIHR5cGVuYW1lIF9EaXN0YW5jZSA9IHB0cmRpZmZfdCwKICAgICAgICAgICB0eXBlbmFt ZSBfUG9pbnRlciA9IF9UcCosIHR5cGVuYW1lIF9SZWZlcmVuY2UgPSBfVHAmPgogICAgc3RydWN0 IGl0ZXJhdG9yIHsKCiAgICAgIHR5cGVkZWYgX0NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwoK ICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgIHR5cGVkZWYgX0Rpc3RhbmNlIGRp ZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVkZWYgX1BvaW50ZXIgcG9pbnRlcjsKCiAgICAgIHR5 cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSXRlcmF0b3I+CiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5 OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZl cmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgcG9p bnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSByZWZlcmVu Y2U7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgaXRlcmF0b3Jf dHJhaXRzPF9UcCo+IHsKICAgICAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBp dGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAgICAgdHlw ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIF9UcCogcG9pbnRl cjsKICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gewogICAgICB0 eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAg ICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl bmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVm IGNvbnN0IF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0l0ZXI+CiAgICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0 b3JfY2F0ZWdvcnkKICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImKQogICAgeyBy ZXR1cm4gdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnko KTsgfQoKfQojIDc0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgi IDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9m dW5jcy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRv cl9iYXNlX2Z1bmNzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvY29uY2Vw dF9jaGVjay5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2NvbmNlcHRf Y2hlY2suaCIgMwojIDY5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2l0ZXJhdG9y X2Jhc2VfZnVuY3MuaCIgMiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsKdGVtcGxhdGU8dHlwZW5hbWUg X0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19m aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewoKICAg CgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5j ZV90eXBlIF9fbiA9IDA7CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgKytf X2ZpcnN0OyArK19fbjsKICAgIH0KICAgIHJldHVybiBfX247CiAgfQoKdGVtcGxhdGU8dHlwZW5h bWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgX19kaXN0YW5jZShf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz dCwKICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAogICAg cmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7CiAgfQojIDExMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy YXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICB7CgogICAgcmV0dXJuIF9fZGlzdGFuY2UoX19maXJz dCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICB9Cgp0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBf X2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90 YWcpCiAgewoKICAgCiAgICB3aGlsZSAoX19uLS0pICsrX19pOwogIH0KCnRlbXBsYXRlPHR5cGVu YW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUg dm9pZAogIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBf X24sCiAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAoKICAg IGlmIChfX24gPiAwKQogICAgICB3aGlsZSAoX19uLS0pICsrX19pOwogICAgZWxzZQogICAgICB3 aGlsZSAoX19uKyspIC0tX19pOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9S YW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICByYW5k b21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICB7CgogICAKICAgIF9faSArPSBfX247CiAgfQojIDE2 NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgi IDMKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4K ICBpbmxpbmUgdm9pZAogIGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9f bikKICB7CgogICAgX19hZHZhbmNlKF9faSwgX19uLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9faSkp OwogIH0KCn0KIyA3NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvYmFzZS5o IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEg MwojIDY4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFt ZXNwYWNlIHN0ZAp7CiMgODkgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfaXRlcmF0 b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGNsYXNzIHJldmVyc2Vf aXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAgICAgICAg ICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2Vf dHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl cmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAg X0l0ZXJhdG9yIGN1cnJlbnQ7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9JdGVyYXRvciBp dGVyYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJl bmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpw b2ludGVyIHBvaW50ZXI7CgogICAgcHVibGljOgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yKCkg eyB9CgoKCgogICAgICBleHBsaWNpdAogICAgICByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5 cGUgX194KSA6IGN1cnJlbnQoX194KSB7IH0KCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IoY29u c3QgcmV2ZXJzZV9pdGVyYXRvciYgX194KQogICAgICA6IGN1cnJlbnQoX194LmN1cnJlbnQpIHsg fQoKCgoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgICAgIHJldmVyc2VfaXRl cmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAgICAgICA6IGN1cnJl bnQoX194LmJhc2UoKSkgeyB9CgoKCgogICAgICBpdGVyYXRvcl90eXBlCiAgICAgIGJhc2UoKSBj b25zdCB7IHJldHVybiBjdXJyZW50OyB9CgoKCgoKCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVy YXRvciooKSBjb25zdAogICAgICB7CiAgICAgICAgX0l0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsK ICAgICAgICByZXR1cm4gKi0tX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcG9pbnRlcgogICAg ICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCgoKCgoKICAg ICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAgICAgICAt LWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVy c2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICByZXZlcnNl X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgLS1jdXJyZW50OwogICAgICAgIHJldHVy biBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVy YXRvci0tKCkKICAgICAgewogICAgICAgICsrY3VycmVudDsKICAgICAgICByZXR1cm4gKnRoaXM7 CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciBvcGVyYXRvci0tKGludCkKICAg ICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgICAgICArK2N1 cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2Vf aXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CiAgICAg IHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVudCAtIF9fbik7IH0KCgoKCgoKICAgICAg cmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19uKQog ICAgICB7CiAgICAgICAgY3VycmVudCAtPSBfX247CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg ICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGRpZmZlcmVu Y2VfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVu dCArIF9fbik7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3It PShkaWZmZXJlbmNlX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY3VycmVudCArPSBfX247CiAg ICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJlZmVyZW5jZQogICAgICBv cGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooKnRoaXMgKyBf X24pOyB9CiAgICB9OwojIDI2OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVy YXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wK ICAgIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAg ICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAg eyByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9p dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVy YXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2Uo KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAg b3BlcmF0b3IhPShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAg ICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJl dHVybiAhKF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAg IGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0 b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+ JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0 ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVy YXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJh dG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShj b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29u c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8 IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIHR5cGVu YW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBvcGVy YXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAg ICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBf X3kuYmFzZSgpIC0gX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+ CiAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+CiAgICBvcGVyYXRvcisodHlw ZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAog ICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KQogICAg eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOyB9 CiMgMzI3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0 b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQs IHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNvbnRh aW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5 cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5l ciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyAzNTMgIi91c3IvaW5jbHVkZS9jKysvMy4y LjEvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAg ICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVl KQogICAgICB7CiAgICAgICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiAgICAgICAg cmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAg IG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0 b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGJhY2tfaW5z ZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAg fTsKIyAzODQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYmFja19pbnNlcnRfaXRl cmF0b3I8X0NvbnRhaW5lcj4KICAgIGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAg eyByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQojIDM5NyAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvcgogICAg OiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwg dm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwoK ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgog ICAgICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNv bnRhaW5lcigmX194KSB7IH0KIyA0MjIgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxf aXRlcmF0b3IuaCIgMwogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y PSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewog ICAgICAgIGNvbnRhaW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsKICAgICAgICByZXR1cm4gKnRo aXM7CiAgICAgIH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y KigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAg ICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRl cmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDQ1 MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0b3I8 X0NvbnRhaW5lcj4KICAgIGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAgIHsgcmV0 dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMgNDcwICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBp dGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAg ewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgICAgIHR5cGVu YW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRl ZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCgoKCiAgICAgIGluc2VydF9pdGVyYXRvcihf Q29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKICAgICAg OiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQojIDUxMiAiL3Vzci9pbmNsdWRlL2MrKy8z LjIuMS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAg b3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3Zh bHVlKQogICAgICB7CiAgICAgICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFs dWUpOwogICAgICAgICsraXRlcjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAg ICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoK ICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7 IH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVy biAqdGhpczsgfQogICAgfTsKIyA1NDQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxf aXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXIsIHR5cGVuYW1lIF9J dGVyYXRvcj4KICAgIGlubGluZSBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGluc2Vy dGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9faSkKICAgIHsKICAgICAgcmV0dXJuIGlu c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IoX19pKSk7CiAgICB9 Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewoKCgoKCgoKICB1c2luZyBzdGQ6Oml0ZXJhdG9yX3Ry YWl0czsKICB1c2luZyBzdGQ6Oml0ZXJhdG9yOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv ciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAg IDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpp dGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAg ICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+ Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRl cmF0b3IgX01fY3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNl X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46 OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRlcjsKCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9y KCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIF9f bm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7 IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgaW5saW5lIF9fbm9ybWFs X2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyLCBfQ29udGFpbmVyPiYgX19p KQogICAgICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0KCgogICAgICByZWZlcmVuY2UK ICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKl9NX2N1cnJlbnQ7IH0KCiAgICAgIHBv aW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KCiAg ICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7 IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3Ir KyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQrKyk7IH0KCgogICAg ICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItLSgpIHsgLS1fTV9jdXJyZW50OyBy ZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLS0o aW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50LS0pOyB9CgoKICAgICAg cmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNv bnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoKICAgICAgX19ub3JtYWxfaXRl cmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAg IHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRl cmF0b3IKICAgICAgb3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAog ICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50ICsgX19uKTsgfQoKICAg ICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0oY29uc3QgZGlmZmVyZW5jZV90 eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhpczsgfQoKICAg ICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlw ZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50 IC0gX19uKTsgfQoKICAgICAgY29uc3QgX0l0ZXJhdG9yJgogICAgICBiYXNlKCkgY29uc3QgeyBy ZXR1cm4gX01fY3VycmVudDsgfQogICAgfTsKIyA2NDUgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEv Yml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5 cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBv cGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+ JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIs IF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFz ZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5l cj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9p dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5i YXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckws IHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wK ICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWlu ZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv clIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMu YmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRh aW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8 X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1h bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xo cy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0 b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBi b29sCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250 YWluZXI+JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhz LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250 YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8 X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1h bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xo cy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y TCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9v bAogIG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFp bmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv clIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5i YXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFp bmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J dGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9p dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5i YXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwg dHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAog IG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5l cj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y UiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5i YXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFp bmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFs X2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhz LmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y TCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9v bAogIG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRh aW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jo cy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29u dGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRv cjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9y bWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9f bGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J dGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5s aW5lIHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+Ojpk aWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl cmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJh c2UoKSAtIF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5 cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwg X0NvbnRhaW5lcj4KICBvcGVyYXRvcisodHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgY29uc3Qg X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQogIHsgcmV0dXJu IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9f bik7IH0KfQojIDc2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgi IDIgMwoKCm5hbWVzcGFjZSBzdGQKewojIDkxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMv c3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBl bmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgaW5saW5lIHZvaWQKICAgIGl0ZXJfc3dhcChfRm9yd2Fy ZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUx OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6 dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAg X1ZhbHVlVHlwZTEgX190bXAgPSAqX19hOwogICAgICAqX19hID0gKl9fYjsKICAgICAgKl9fYiA9 IF9fdG1wOwogICAgfQojIDExOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdv YmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIHN3 YXAoX1RwJiBfX2EsIF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIF9UcCBfX3RtcCA9IF9f YTsKICAgICAgX19hID0gX19iOwogICAgICBfX2IgPSBfX3RtcDsKICAgIH0KIyAxNDYgIi91c3Iv aW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNv bnN0IF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIGlmIChfX2IgPCBfX2EpIHJldHVybiBf X2I7IHJldHVybiBfX2E7CiAgICB9CiMgMTY2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMv c3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29u c3QgX1RwJgogICAgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAg ICAgCgogICAgICBpZiAoX19hIDwgX19iKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQoj IDE4NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBf VHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2Nv bXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYiwgX19hKSkgcmV0dXJuIF9fYjsgcmV0dXJu IF9fYTsKICAgIH0KIyAyMDQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnb2Jh c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBp bmxpbmUgY29uc3QgX1RwJgogICAgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwg X0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAgaWYgKF9fY29tcChfX2EsIF9fYikpIHJldHVy biBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMjIxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Jp dHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl bmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5KF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQsCiAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBmb3Ig KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAgICAgKl9f cmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAg aW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0 LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVu Y2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5jZSBfX24gPSBf X2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewogICAgICAgICpfX3Jlc3VsdCA9ICpf X2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAg ICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg aW5saW5lIF9UcCoKICAgIF9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3Qg X1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1vdmUoX19yZXN1bHQs IF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgICAgcmV0dXJu IF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRl cgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7 IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRl Z29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h bWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9hdXgyKF9J bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0 cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJz dCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKF9U cCogX19maXJzdCwgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0LCBf X3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwg X19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAg ICBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LAogICAg ICAgICAgICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2Nv cHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0 SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1 ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw ZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAg ICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5X2F1eDIoX19m aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1 bHQuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwo KSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0 cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJp dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAgICAgcmV0dXJu IF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5s aW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVf dHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9P dXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19m aXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAg ICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9f ZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJh dG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9u aTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CiMgMzM5ICIv dXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0 cHV0SXRlcgogICAgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBf T3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05vcm1h bDsKICAgICAgIHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9f Tm9ybWFsKCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0 ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAgaW5saW5lIF9CaWRpcmVjdGlv bmFsSXRlcjIKICAgIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3Qs IF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9p dGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAg ICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0JpZGlyZWN0 aW9uYWxJdGVyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcgogICAgX19jb3B5X2JhY2t3 YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAgICAgICAg ICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBf X247CiAgICAgIGZvciAoX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCiAg ICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAg IH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5h bWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQm9vbFR5cGU+CiAg ICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCiAgICB7CiAgICAgIHN0YXRpYyBfQmlk aXJlY3Rpb25hbEl0ZXIyCiAgICAgIGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBf QmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIy IF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0 LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwog ICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19jb3B5 X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAgewogICAgICBz dGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xh c3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAgICAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9 IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmly c3QsIHNpemVvZihfVHApICogX051bSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsK ICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29w eV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsK ICAgICAgc3RhdGljIF9UcCoKICAgICAgY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9U cCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9i YWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgICAgICAgIDo6Y29w eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlf YmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czx0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IgX1RyaXZpYWw7CiAgICAgIHJldHVybiBf X2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAg ICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxh dGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19j b3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19y ZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX0JJMihfX2NvcHlfYmFja3dhcmRfYXV4 KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFzZSgpKSk7IH0KCiAgdGVtcGxhdGUgPHR5cGVu YW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3 YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9f ZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19s YXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9C STI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVy YXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9y bWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3Io X19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9Cgog IHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIK ICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBf QkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJ MiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9J c19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBf X2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9f cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNDc3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMv c3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJ Mj4KICAgIGlubGluZSBfQkkyCiAgICBjb3B5X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJMSBf X2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMT46Ol9Ob3JtYWwgX19Ob3Jt YWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAgfQojIDUwOSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBmaWxsKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7Cgog ICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAg ICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgIH0KIyA1MzEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEv Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0 eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIGZpbGxfbihf T3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsK CiAgICAgCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAg Kl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKICBpbmxp bmUgdm9pZAogIGZpbGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19s YXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgdW5zaWduZWQgY2hhciBfX3Rt cCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19maXJzdCk7CiAg fQoKICBpbmxpbmUgdm9pZAogIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25lZCBjaGFy KiBfX2xhc3QsIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgc2lnbmVkIGNoYXIgX190 bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o X190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChjaGFy KiBfX2ZpcnN0LCBjaGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykKICB7CiAgICBjaGFyIF9f dG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+ KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6 ZT4KICAgIGlubGluZSB1bnNpZ25lZCBjaGFyKgogICAgZmlsbF9uKHVuc2lnbmVkIGNoYXIqIF9f Zmlyc3QsIF9TaXplIF9fbiwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBm aWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsg X19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBzaWduZWQg Y2hhcioKICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHNpZ25lZCBj aGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsK ICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9T aXplPgogICAgaW5saW5lIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19u LCBjb25zdCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9f biwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CiMgNjA2ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBwYWlyPF9JbnB1dEl0ZXIx LCBfSW5wdXRJdGVyMj4KICAgIG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCiAgICB7Cgog ICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0 MSAmJiAqX19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg ICArK19fZmlyc3QyOwogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5w dXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKICAgIH0KIyA2NDAgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4K ICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRl cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVy MiBfX2ZpcnN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkK ICAgIHsKCiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBf X2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICsrX19maXJzdDE7 CiAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVy MSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNjY4ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBpbmxpbmUgYm9vbAogICAg ZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAg IGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAg ICAgICBpZiAoISgqX19maXJzdDEgPT0gKl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiBmYWxz ZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNjk5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg dHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxp bmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz dDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgIF9CaW5hcnlQcmVk aWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICBmb3IgKCA7IF9f Zmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgaWYgKCFf X2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiBmYWxz ZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNzMyICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg dHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFy ZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICAgICAgOyArK19fZmly c3QxLCArK19fZmlyc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAg ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAg ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9f bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0KIyA3NjcgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29s CiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0 SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg X0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJz dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgICAgIDsgKytfX2Zp cnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJz dDIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIs ICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJu IF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0KCiAgaW5s aW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyKiBf X2ZpcnN0MSwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgdW5zaWduZWQgY2hh ciogX19sYXN0MikKICB7CiAgICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmly c3QxOwogICAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICAgIGNv bnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEs IF9fbGVuMikpOwogICAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xl bjEgPCBfX2xlbjI7CiAgfQoKICBpbmxpbmUgYm9vbAogIGxleGljb2dyYXBoaWNhbF9jb21wYXJl KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQog IHsKCiAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25lZCBjaGFy KikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNp Z25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKCgoKCgoKICB9Cgp9CiMgNTUg Ii91c3IvaW5jbHVkZS9jKysvMy4yLjEvbWVtb3J5IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysr LzMuMi4xL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDg0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Nhc3NlcnQi IDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Nhc3NlcnQiIDMKCiMgMSAiL3Vzci9p bmNsdWRlL2Fzc2VydC5oIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCmV4dGVy biAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3Nl cnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0 X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBf X2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50 IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoK fQojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Nhc3NlcnQiIDIgMwojIDg1ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8z LjIuMS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2V4 Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMv ZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFk X2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgog IHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlw ZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19z KTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv aWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93 X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1l X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBf X3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQoj IDg2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi91 c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfdGhyZWFkcy5oIiAxIDMKIyA1NCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoK CgogIHN0cnVjdCBfUmVmY291bnRfQmFzZQogIHsKCiAgICB0eXBlZGVmIHNpemVfdCBfUkNfdDsK CgogICAgdm9sYXRpbGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCiAgICBfX2d0aHJlYWRfbXV0ZXhf dCBfTV9yZWZfY291bnRfbG9jazsKCiAgICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24pIDogX01f cmVmX2NvdW50KF9fbikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1wID0gezAs IDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fTsKICAgICAgX01fcmVmX2Nv dW50X2xvY2sgPSBfX3RtcDsKCgoKCgogICAgfQoKICAgIHZvaWQKICAgIF9NX2luY3IoKQogICAg ewogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICAr K19NX3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50 X2xvY2spOwogICAgfQoKICAgIF9SQ190CiAgICBfTV9kZWNyKCkKICAgIHsKICAgICAgX19ndGhy ZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgdm9sYXRpbGUgX1JDX3Qg X190bXAgPSAtLV9NX3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01f cmVmX2NvdW50X2xvY2spOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgfTsKIyAxMDkgIi91 c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgdGVtcGxhdGU8aW50 IF9fZHVtbXk+CiAgICBzdHJ1Y3QgX1N3YXBfbG9ja19zdHJ1Y3QKICAgIHsgc3RhdGljIF9fZ3Ro cmVhZF9tdXRleF90IF9TX3N3YXBfbG9jazsgfTsKCiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+CiAg ICBfX2d0aHJlYWRfbXV0ZXhfdAogICAgX1N3YXBfbG9ja19zdHJ1Y3Q8X19kdW1teT46Ol9TX3N3 YXBfbG9jayA9IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX07CgoK CiAgaW5saW5lIHVuc2lnbmVkIGxvbmcKICBfQXRvbWljX3N3YXAodW5zaWduZWQgbG9uZyAqIF9f cCwgdW5zaWduZWQgbG9uZyBfX3EpCiAgewogICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9Td2Fw X2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAgdW5zaWduZWQgbG9uZyBfX3Jlc3Vs dCA9ICpfX3A7CiAgICAqX19wID0gX19xOwogICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX1N3 YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAg fQojIDE1MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICBz dHJ1Y3QgX1NUTF9tdXRleF9sb2NrCiAgewoKCgoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9s b2NrOwoKICAgIHZvaWQKICAgIF9NX2luaXRpYWxpemUoKQogICAgewojIDE4NCAiL3Vzci9pbmNs dWRlL2MrKy8zLjIuMS9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICAgIH0KCiAgICB2b2lkCiAgICBf TV9hY3F1aXJlX2xvY2soKQogICAgewoKCgogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01f bG9jayk7CiAgICB9CgogICAgdm9pZAogICAgX01fcmVsZWFzZV9sb2NrKCkKICAgIHsKCgoKICAg ICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fbG9jayk7CiAgICB9CiAgfTsKIyAyMjAgIi91 c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgc3RydWN0IF9TVExf YXV0b19sb2NrCiAgewogICAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICAgIF9TVExfYXV0 b19sb2NrKF9TVExfbXV0ZXhfbG9jayYgX19sb2NrKSA6IF9NX2xvY2soX19sb2NrKQogICAgeyBf TV9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9CgogICAgfl9TVExfYXV0b19sb2NrKCkgeyBfTV9s b2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9CgogIHByaXZhdGU6CiAgICB2b2lkIG9wZXJhdG9yPShj b25zdCBfU1RMX2F1dG9fbG9jayYpOwogICAgX1NUTF9hdXRvX2xvY2soY29uc3QgX1NUTF9hdXRv X2xvY2smKTsKICB9OwoKfQojIDg3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2Fs bG9jLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgOTggIi91c3IvaW5jbHVkZS9jKysvMy4yLjEv Yml0cy9zdGxfYWxsb2MuaCIgMwogIGNsYXNzIF9fbmV3X2FsbG9jCiAgewogIHB1YmxpYzoKICAg IHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIDo6b3Bl cmF0b3IgbmV3KF9fbik7IH0KCiAgICBzdGF0aWMgdm9pZAogICAgZGVhbGxvY2F0ZSh2b2lkKiBf X3AsIHNpemVfdCkKICAgIHsgOjpvcGVyYXRvciBkZWxldGUoX19wKTsgfQogIH07CiMgMTIxICIv dXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZSA8aW50 IF9faW5zdD4KICAgIGNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlCiAgICB7CiAgICBwcml2 YXRlOgogICAgICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwogICAgICBzdGF0 aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7CiAgICAgIHN0YXRpYyB2b2lk ICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKICAgIHB1YmxpYzoKICAgICAgc3Rh dGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICB2b2lk KiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jl c3VsdCA9IF9TX29vbV9tYWxsb2MoX19uKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAg IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3Qg KQogICAgICB7IGZyZWUoX19wKTsgfQoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIHJlYWxsb2Nh dGUodm9pZCogX19wLCBzaXplX3QgLCBzaXplX3QgX19uZXdfc3opCiAgICAgIHsKICAgICAgICB2 b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICAgICAgaWYgKDAgPT0g X19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICAg ICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAgICBzdGF0aWMgdm9pZCAoKiBfX3NldF9t YWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogICAgICB7CiAgICAgICAgdm9pZCAoKiBf X29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIF9fbWFsbG9jX2Fs bG9jX29vbV9oYW5kbGVyID0gX19mOwogICAgICAgIHJldHVybihfX29sZCk7CiAgICAgIH0KICAg IH07CgoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nf dGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkgPSAwOwoKICB0 ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxvY190ZW1wbGF0 ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQgKCog X19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9pZCogX19yZXN1bHQ7CgogICAgICBmb3Ig KDs7KQogICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19h bGxvY19vb21faGFuZGxlcjsKICAgICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIp CiAgICAgICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgICgqX19teV9t YWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAg ICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAg fQogICAgfQoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19h bGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fcmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBf X24pCiAgICB7CiAgICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9p ZCogX19yZXN1bHQ7CgogICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFs bG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICAgIGlmICgw ID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpCiAgICAgICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxs b2MoKTsKICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVz dWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAg ICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQoKCgoKCgogIHR5cGVkZWYgX19u ZXdfYWxsb2MgX19tZW1faW50ZXJmYWNlOwojIDIxOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9i aXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CiAg Y2xhc3MgX19zaW1wbGVfYWxsb2MKICB7CiAgcHVibGljOgogICAgc3RhdGljIF9UcCogYWxsb2Nh dGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIDAgPT0gX19uID8gMCA6IChfVHAqKSBfQWxsb2M6 OmFsbG9jYXRlKF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KCiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0 ZSgpCiAgICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9 CgogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsg aWYgKDAgIT0gX19uKSBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkp OyB9CgogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAgIHsgX0FsbG9jOjpk ZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQogIH07CiMgMjUxICIvdXNyL2luY2x1ZGUv YysrLzMuMi4xL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgog IGNsYXNzIF9fZGVidWdfYWxsb2MKICB7CiAgcHJpdmF0ZToKICAgIGVudW0ge19TX2V4dHJhID0g OH07CgoKICBwdWJsaWM6CgogICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAg ICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUoX19uICsg KGludCkgX1NfZXh0cmEpOwogICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247CiAgICAgIHJl dHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOwogICAgfQoKICAgIHN0YXRpYyB2b2lkIGRl YWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewogICAgICBjaGFyKiBfX3JlYWxf cCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ ICgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fbikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNp emVfdCopX19yZWFsX3AgPT0gX19uIiwgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxf YWxsb2MuaCIsIDI3MCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgIF9BbGxvYzo6 ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgfQoKICAgIHN0 YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3Qg X19uZXdfc3opCiAgICB7CiAgICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQp IF9TX2V4dHJhOwogICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKCgqKHNpemVfdCopX19yZWFsX3Ag PT0gX19vbGRfc3opID8gMCA6IChfX2Fzc2VydF9mYWlsICgiKihzaXplX3QqKV9fcmVhbF9wID09 IF9fb2xkX3N6IiwgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxsb2MuaCIsIDI3 NywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNo YXIqKQogICAgICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAoaW50 KSBfU19leHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N6 ICsgKGludCkgX1NfZXh0cmEpOwogICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsK ICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgICB9CiAgfTsKIyAzMjQg Ii91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZTxib29s IF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGUK ICB7CiAgcHJpdmF0ZToKICAgIGVudW0ge19BTElHTiA9IDh9OwogICAgZW51bSB7X01BWF9CWVRF UyA9IDEyOH07CiAgICBlbnVtIHtfTkZSRUVMSVNUUyA9IF9NQVhfQllURVMgLyBfQUxJR059OwoK ICAgIHVuaW9uIF9PYmoKICAgIHsKICAgICAgdW5pb24gX09iaiogX01fZnJlZV9saXN0X2xpbms7 CiAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFbMV07CiAgICB9OwoKICAgIHN0YXRpYyBfT2JqKiB2 b2xhdGlsZSBfU19mcmVlX2xpc3RbX05GUkVFTElTVFNdOwoKCiAgICBzdGF0aWMgY2hhciogX1Nf c3RhcnRfZnJlZTsKICAgIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICAgIHN0YXRpYyBzaXpl X3QgX1NfaGVhcF9zaXplOwoKICAgIHN0YXRpYyBfU1RMX211dGV4X2xvY2sgX1Nfbm9kZV9hbGxv Y2F0b3JfbG9jazsKCiAgICBzdGF0aWMgc2l6ZV90CiAgICBfU19yb3VuZF91cChzaXplX3QgX19i eXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdCkgX0FMSUdOLTEpICYgfigo c2l6ZV90KSBfQUxJR04gLSAxKSk7IH0KCiAgICBzdGF0aWMgc2l6ZV90CiAgICBfU19mcmVlbGlz dF9pbmRleChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgKHNpemVf dClfQUxJR04tMSkvKHNpemVfdClfQUxJR04gLSAxKTsgfQoKCgogICAgc3RhdGljIHZvaWQqCiAg ICBfU19yZWZpbGwoc2l6ZV90IF9fbik7CgoKCiAgICBzdGF0aWMgY2hhcioKICAgIF9TX2NodW5r X2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7CgoKCiAgICBjbGFzcyBfTG9jawog ICAgewogICAgcHVibGljOgogICAgICBfTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1Nfbm9kZV9h bGxvY2F0b3JfbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogICAgICB+X0xvY2soKSB7IGlmIChf X3RocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH0KICAg IH0gX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsKICAgIGZyaWVuZCBjbGFzcyBfTG9jazsK CiAgcHVibGljOgoKICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAg IHsKICAgICAgdm9pZCogX19yZXQgPSAwOwoKICAgICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhf QllURVMpCiAgICAgICAgX19yZXQgPSBfX21lbV9pbnRlcmZhY2U6OmFsbG9jYXRlKF9fbik7CiAg ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xp c3QgPSBfU19mcmVlX2xpc3QKICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoK CgogICAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwogICAgICAgICAgX09iaiogX19yZXN0 cmljdF9fIF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgaWYgKF9fcmVzdWx0 ID09IDApCiAgICAgICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOwog ICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0 ID0gX19yZXN1bHQgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgX19yZXQgPSBf X3Jlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAg fTsKCgogICAgc3RhdGljIHZvaWQKICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19u KQogICAgewogICAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykKICAgICAgICBfX21l bV9pbnRlcmZhY2U6OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgICBlbHNlCiAgICAgICAgewog ICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0CiAgICAgICAgICAgID0gX1Nf ZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAgICAgIF9PYmoqIF9fcSA9 IChfT2JqKilfX3A7CgoKCiAgICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAg ICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAq X19teV9mcmVlX2xpc3QgPSBfX3E7CiAgICAgICAgfQogICAgfQoKICAgIHN0YXRpYyB2b2lkKgog ICAgcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6 KTsKICB9OwoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBpbmxp bmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190 aHJlYWRzLCBfX2luc3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3Rl bXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBs YXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yIT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYs CiAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs IF9faW5zdD4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190 aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hhcioKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0 ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQmIF9fbm9ianMpCiAgICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0OwogICAgICBzaXplX3Qg X190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgIHNpemVfdCBfX2J5dGVzX2xl ZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgICBpZiAoX19ieXRlc19sZWZ0 ID49IF9fdG90YWxfYnl0ZXMpCiAgICAgIHsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2Zy ZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVy bihfX3Jlc3VsdCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6 ZSkKICAgICAgICB7CiAgICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6 ZSk7CiAgICAgICAgICBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgICAgICAg IF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190 b3RhbF9ieXRlczsKICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQogICAgICBl bHNlCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KICAgICAgICAg ICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7Cgog ICAgICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAgX1NfZnJl ZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICAg KChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVf bGlzdDsKICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSAoX09iaiopX1Nfc3RhcnRfZnJl ZTsKICAgICAgICAgICAgfQogICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKikgX19tZW1f aW50ZXJmYWNlOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgICBpZiAoMCA9PSBf U19zdGFydF9mcmVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9faTsKICAg ICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAg X09iaiogX19wOwoKCgogICAgICAgICAgICAgIF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAgICBm b3IgKDsgX19pIDw9IChzaXplX3QpIF9NQVhfQllURVM7IF9faSArPSAoc2l6ZV90KSBfQUxJR04p CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1Nf ZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19pKTsKICAgICAgICAgICAgICAgICAgX19w ID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3ApCiAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0g X19wIC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRf ZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9T X3N0YXJ0X2ZyZWUgKyBfX2k7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oX1NfY2h1bmtf YWxsb2MoX19zaXplLCBfX25vYmpzKSk7CgoKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSAwOwogICAgICAgICAgICAgIF9T X3N0YXJ0X2ZyZWUgPSAoY2hhciopX19tZW1faW50ZXJmYWNlOjphbGxvY2F0ZShfX2J5dGVzX3Rv X2dldCk7CgoKICAgICAgICAgICAgfQogICAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNf dG9fZ2V0OwogICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19ieXRlc190 b19nZXQ7CiAgICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7 CiAgICAgICAgfQogICAgfQoKCgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lu c3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p bnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24pCiAgICB7CiAgICAgIGludCBfX25vYmpzID0gMjA7 CiAgICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAg ICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgIF9PYmoqIF9fcmVzdWx0Owog ICAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOwogICAgICBfT2JqKiBfX25leHRfb2JqOwogICAgICBp bnQgX19pOwoKICAgICAgaWYgKDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmspOwogICAgICBf X215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoK ICAgICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0g X19uZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsg OyBfX2krKykgewogICAgICAgIF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAgIF9f bmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICBpZiAo X19ub2JqcyAtIDEgPT0gX19pKSB7CiAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVf bGlzdF9saW5rID0gMDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAg ICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAg ICB9CiAgICAgIH0KICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KCgogIHRlbXBsYXRlPGJv b2wgdGhyZWFkcywgaW50IGluc3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBs YXRlPHRocmVhZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vbGRfc3os CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fbmV3X3N6KQogICAgewogICAgICB2b2lkKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90 IF9fY29weV9zejsKCiAgICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYg X19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJuKHJlYWxsb2Mo X19wLCBfX25ld19zeikpOwogICAgICB9CiAgICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikg PT0gX1Nfcm91bmRfdXAoX19uZXdfc3opKSByZXR1cm4oX19wKTsKICAgICAgX19yZXN1bHQgPSBh bGxvY2F0ZShfX25ld19zeik7CiAgICAgIF9fY29weV9zeiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/ IF9fb2xkX3N6IDogX19uZXdfc3o7CiAgICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlf c3opOwogICAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgICByZXR1cm4oX19yZXN1 bHQpOwogICAgfQoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBfU1RM X211dGV4X2xvY2sKICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ OjpfU19ub2RlX2FsbG9jYXRvcl9sb2NrCiAgPSB7IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJ TUVEX05QLCB7IDAsIDAgfX0gfTsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lu c3Q+CiAgY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6 X1Nfc3RhcnRfZnJlZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0 PgogIGNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9T X2VuZF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAg c2l6ZV90IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hl YXBfc2l6ZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIHR5 cGVuYW1lIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9PYmoq IHZvbGF0aWxlCiAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6 X1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCiAgdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVt cGxhdGU8dHJ1ZSwgMD4gX19hbGxvYzsKICB0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0 ZTxmYWxzZSwgMD4gX19zaW5nbGVfY2xpZW50X2FsbG9jOwojIDYxMyAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIuMS9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFs bG9jYXRvcgp7CiAgdHlwZWRlZiBfX2FsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6 ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw ZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAg dHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJl bmNlOwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBz dHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07Cgog IGFsbG9jYXRvcigpIHRocm93KCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhy b3coKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9y PF9UcDE+JikgdGhyb3coKSB7fQogIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50ZXIg YWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9p bnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0K CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAg cmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24g KiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVh bGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFsbG9j YXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNv bnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2 b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBf VHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9 Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1YmxpYzoKICB0eXBlZGVm IHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwog IHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50 ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBz dHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07Cn07 CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09 KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJu IHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3Bl cmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewog IHJldHVybiBmYWxzZTsKfQojIDY5NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9h bGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxs b2NhdG9yCnsKICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCBz aXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg X1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVk ZWYgX1RwJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsK ICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0 IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAg fTsKCiAgX19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxv Y2F0b3ImIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJs eWluZ19hbGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRvcihjb25z dCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgIDogX191bmRlcmx5 aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkgdGhy b3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4g Jl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25z dCB7IHJldHVybiAmX194OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0 IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0aWNfY2FzdDxf VHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAg ICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBf X24pCiAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9m KF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0 dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVy IF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBk ZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0FsbG9jPgpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVmIHNpemVf dCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk ZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAg dHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3Qg cmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9 Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVy YXRvcj09KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1 cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3Ih PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9f YTEuX191bmRlcmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKCgoK Cgp0ZW1wbGF0ZSA8aW50IGluc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxs b2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9f bWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0 ZSA8aW50IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxv Y190ZW1wbGF0ZTxfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxv Y19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2RlYnVnX2FsbG9j PF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0Fs bG9jPiYpIHsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5l IGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFs c2U7Cn0KIyA4NDAgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxsb2MuaCIgMwp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0 cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgYWxsb2Nh dG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjb25z dCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoK CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9U cCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVz cyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+IF9BbGxvY190 eXBlOwogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9f bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1Nf aW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxs b2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxv Y2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5 cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+ CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0 cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYg X19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu c3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2FsbG9jPF9B bGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0 eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9j X3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+ IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwg aW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAg ICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gPgp7 CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9f c2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxv Y190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0 ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1Rw LAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0 PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlw ZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Rocixf X2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBhbGxv Y2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFzcyBf QWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgX19kZWJ1 Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNz ID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxs b2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxs b2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIGFsbG9jYXRvcjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPHdj aGFyX3Q+OwoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8dHJ1ZSwgMD47Cgp9CiMgNTYgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvbWVtb3J5IiAyIDMK IyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2 NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwpuYW1lc3Bh Y2Ugc3RkCnsKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CiAgICBpbmxp bmUgdm9pZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKQogICAg eyBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEoX192YWx1ZSk7IH0KCgoKCgoKCiAg dGVtcGxhdGUgPGNsYXNzIF9UMT4KICAgIGlubGluZSB2b2lkCiAgICBfQ29uc3RydWN0KF9UMSog X19wKQogICAgeyBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEoKTsgfQojIDk4ICIv dXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1 eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2Zh bHNlX3R5cGUpCiAgICB7IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgX0Rl c3Ryb3koJipfX2ZpcnN0KTsgfQojIDExMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0 bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAg aW5saW5lIHZvaWQKICAgIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJ dGVyYXRvciwgX190cnVlX3R5cGUpCiAgICB7IH0KCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9UcCogX19wb2ludGVyKQogICAgeyBfX3Bv aW50ZXItPn5fVHAoKTsgfQojIDEzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9j b25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5s aW5lIHZvaWQKICAgIF9EZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJ dGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAg X1ZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVf dHlwZT46Omhhc190cml2aWFsX2Rlc3RydWN0b3IKICAgICAgICAgICAgICAgICAgICAgICBfSGFz X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKCiAgICAgIF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0 LCBfSGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcigpKTsKICAgIH0KfQojIDU3ICIvdXNyL2luY2x1ZGUv YysrLzMuMi4xL21lbW9yeSIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9z dGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz L3N0bF91bmluaXRpYWxpemVkLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3 YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ dGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQog ICAgeyByZXR1cm4gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2Fy ZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAg ICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogICAgICB0cnkgewogICAg ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX2N1cikKICAgICAg ICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgICAgIHJldHVybiBfX2N1cjsK ICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19y ZXN1bHQsIF9fY3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KIyAxMDYgIi91 c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5l IF9Gb3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBf VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlw ZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29w eV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKICAgIH0KCiAgaW5s aW5lIGNoYXIqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3QsIGNvbnN0 IGNoYXIqIF9fbGFzdCwgY2hhciogX19yZXN1bHQpCiAgewogICAgbWVtbW92ZShfX3Jlc3VsdCwg X19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0 IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgd2NoYXJfdCoKICB1bmluaXRpYWxpemVkX2NvcHko Y29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVzdWx0LCBf X2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogICAgcmV0dXJu IF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuaW5p dGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90 eXBlKQogICAgeyBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fdW5pbml0aWFs aXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBl KQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICB0cnkgewog ICAgICAgIGZvciAoIDsgX19jdXIgIT0gX19sYXN0OyArK19fY3VyKQogICAgICAgICAgX0NvbnN0 cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAg ICAgICAgICBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7CiAgICAgICAgICB0aHJvdzsKICAgICAg ICB9CiAgICB9CiMgMTY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX3VuaW5pdGlh bGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1Rw PgogICAgaW5saW5lIHZvaWQKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUg X1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5 cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgo X19maXJzdCwgX19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5s aW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgcmV0dXJuIGZpbGxfbihfX2Zp cnN0LCBfX24sIF9feCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg dHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmlu aXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUp CiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgICAgIHRyeSB7CiAg ICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1 Y3QoJipfX2N1ciwgX194KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0 Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAg ICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KIyAyMTAgIi91c3IvaW5jbHVkZS9jKysvMy4y LjEvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9Gb3J3YXJk SXRlcgogICAgdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXpl IF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNf UE9EOwogICAgICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX19maXJzdCwgX19u LCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CiMgMjI3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Jp dHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIx LCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5l IF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBf X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAgX0Zv cndhcmRJdGVyIF9fbWlkID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBf X3Jlc3VsdCk7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShf X2ZpcnN0MiwgX19sYXN0MiwgX19taWQpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAg ICB7CiAgICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQpOwogICAgICAgICAgdGhyb3c7 CiAgICAgICAgfQogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5 cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIK ICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2NvcHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfRm9y d2FyZEl0ZXIgX19taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg X194LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0KQogICAgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQs IF9fbWlkLCBfX3gpOwogICAgICB0cnkgewogICAgICAgIHJldHVybiB1bmluaXRpYWxpemVkX2Nv cHkoX19maXJzdCwgX19sYXN0LCBfX21pZCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAg ICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgICAgICAgICB0aHJv dzsKICAgICAgICB9CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5 cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9f dW5pbml0aWFsaXplZF9jb3B5X2ZpbGwoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBf X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJz dDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlh bGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIpOwogICAgICB0cnkgewogICAg ICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX21pZDIsIF9fbGFzdDIsIF9feCk7CiAgICAgIH0KICAg ICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QyLCBfX21p ZDIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKfQojIDU5ICIvdXNyL2luY2x1 ZGUvYysrLzMuMi4xL21lbW9yeSIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz L3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KICBjbGFzcyByYXdfc3Rv cmFnZV9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywg dm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0Zvcndh cmRJdGVyYXRvciBfTV9pdGVyOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgcmF3 X3N0b3JhZ2VfaXRlcmF0b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gpIDogX01faXRlcihfX3gpIHt9 CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4g KnRoaXM7IH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29u c3QgX1RwJiBfX2VsZW1lbnQpCiAgICAgIHsKICAgICAgICBfQ29uc3RydWN0KCYqX01faXRlciwg X19lbGVtZW50KTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9y YWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4mCiAgICAgIG9wZXJhdG9yKysoKQog ICAgICB7CiAgICAgICAgKytfTV9pdGVyOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoK ICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgogICAgICBv cGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3 YXJkSXRlcmF0b3IsIF9UcD4gX190bXAgPSAqdGhpczsKICAgICAgICArK19NX2l0ZXI7CiAgICAg ICAgcmV0dXJuIF9fdG1wOwogICAgICB9CiAgICB9Owp9CiMgNjAgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvbWVtb3J5IiAyIDMKCgoKCm5hbWVzcGFjZSBzdGQKewojIDc0ICIvdXNyL2luY2x1ZGUv YysrLzMuMi4xL21lbW9yeSIgMwp0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwPgpwYWlyPF9UcCosIHB0 cmRpZmZfdD4KX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopCnsK ICBpZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkKICAgIF9f bGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAg ICBfVHAqIF9fdG1wID0gKF9UcCopIHN0ZDo6bWFsbG9jKChzdGQ6OnNpemVfdClfX2xlbiAqIHNp emVvZihfVHApKTsKICAgIGlmIChfX3RtcCAhPSAwKQogICAgICByZXR1cm4gcGFpcjxfVHAqLCBw dHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7CiAgICBfX2xlbiAvPSAyOwogIH0KCiAgcmV0dXJuIHBh aXI8X1RwKiwgcHRyZGlmZl90PigoX1RwKikwLCAwKTsKfQojIDEwNiAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIuMS9tZW1vcnkiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSBwYWlyPF9U cCoscHRyZGlmZl90PgogIGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbikKICB7 CiAgICByZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwogIH0K IyAxMjAgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvbWVtb3J5IiAzCnRlbXBsYXRlPHR5cGVuYW1l IF9UcD4KICB2b2lkCiAgcmV0dXJuX3RlbXBvcmFyeV9idWZmZXIoX1RwKiBfX3ApCiAgewogICAg c3RkOjpmcmVlKF9fcCk7CiAgfQojIDEzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9tZW1vcnki IDMKdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICBzdHJ1Y3QgYXV0b19wdHJfcmVmCnsKICAgX1Rw MSogX01fcHRyOwoKICAgZXhwbGljaXQKICAgYXV0b19wdHJfcmVmKF9UcDEqIF9fcCkKICAgOiBf TV9wdHIoX19wKSB7fQp9OwojIDE3NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9tZW1vcnkiIDMK dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGNsYXNzIGF1dG9fcHRyCnsKcHJpdmF0ZToKICBfVHAq IF9NX3B0cjsKCnB1YmxpYzoKCiAgdHlwZWRlZiBfVHAgZWxlbWVudF90eXBlOwoKCgoKCgoKICBl eHBsaWNpdAogIGF1dG9fcHRyKGVsZW1lbnRfdHlwZSogX19wID0gMCkgdGhyb3coKQogIDogX01f cHRyKF9fcCkgeyB9CiMgMjAyICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL21lbW9yeSIgMwogIGF1 dG9fcHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkKICA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7 IH0KIyAyMTQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvbWVtb3J5IiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwMT4KICAgIGF1dG9fcHRyKGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkKICAg IDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHsgfQojIDIyNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9tZW1vcnkiIDMKICBhdXRvX3B0ciYKICBvcGVyYXRvcj0oYXV0b19wdHImIF9fYSkgdGhyb3co KQogICAgewogICAgICByZXNldChfX2EucmVsZWFzZSgpKTsKICAgICAgcmV0dXJuICp0aGlzOwog ICAgfQojIDI0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9tZW1vcnkiIDMKICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgX1RwMT4KICAgIGF1dG9fcHRyJgogICAgb3BlcmF0b3I9KGF1dG9fcHRyPF9UcDE+ JiBfX2EpIHRocm93KCkKICAgIHsKICAgICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICAgIHJl dHVybiAqdGhpczsKICAgIH0KIyAyNjMgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvbWVtb3J5IiAz CiAgfmF1dG9fcHRyKCkgeyBkZWxldGUgX01fcHRyOyB9CiMgMjczICIvdXNyL2luY2x1ZGUvYysr LzMuMi4xL21lbW9yeSIgMwogIGVsZW1lbnRfdHlwZSYKICBvcGVyYXRvciooKSBjb25zdCB0aHJv dygpIHsgcmV0dXJuICpfTV9wdHI7IH0KCgoKCgoKCiAgZWxlbWVudF90eXBlKgogIG9wZXJhdG9y LT4oKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIF9NX3B0cjsgfQojIDI5NSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIuMS9tZW1vcnkiIDMKICBlbGVtZW50X3R5cGUqCiAgZ2V0KCkgY29uc3QgdGhyb3co KSB7IHJldHVybiBfTV9wdHI7IH0KIyAzMDkgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvbWVtb3J5 IiAzCiAgZWxlbWVudF90eXBlKgogIHJlbGVhc2UoKSB0aHJvdygpCiAgICB7CiAgICAgIGVsZW1l bnRfdHlwZSogX190bXAgPSBfTV9wdHI7CiAgICAgIF9NX3B0ciA9IDA7CiAgICAgIHJldHVybiBf X3RtcDsKICAgIH0KIyAzMjQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvbWVtb3J5IiAzCiAgdm9p ZAogIHJlc2V0KGVsZW1lbnRfdHlwZSogX19wID0gMCkgdGhyb3coKQogICAgewogICAgICBpZiAo X19wICE9IF9NX3B0cikKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgX01fcHRyOwogICAgICAg ICAgX01fcHRyID0gX19wOwogICAgICAgIH0KICAgIH0KIyAzNDUgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvbWVtb3J5IiAzCiAgYXV0b19wdHIoYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19y ZWYpIHRocm93KCkKICAgIDogX01fcHRyKF9fcmVmLl9NX3B0cikge30KCiAgYXV0b19wdHImCiAg b3BlcmF0b3I9KGF1dG9fcHRyX3JlZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICB7 CiAgICAgIGlmIChfX3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpCiAgICAgICAgewogICAgICAg ICAgZGVsZXRlIF9NX3B0cjsKICAgICAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsKICAgICAg ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4K ICAgIG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAxPigpIHRocm93KCkKICAgICAgeyByZXR1cm4g YXV0b19wdHJfcmVmPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwMT4KICAgIG9wZXJhdG9yIGF1dG9fcHRyPF9UcDE+KCkgdGhyb3coKQogICAgICB7IHJl dHVybiBhdXRvX3B0cjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9Cgp9OwoKfQojIDQ5ICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL3N0cmluZyIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIuMS9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDEwMSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQXJn LCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZyBh cmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCgoKCnRlbXBs YXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBiaW5h cnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBl ZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRf dHlwZTsKfTsKIyAxMjcgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfZnVuY3Rpb24u aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVu Y3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv bnN0IHsgcmV0dXJuIF9feCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj dCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9U cCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1 cm4gX194ICogX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7 IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5h cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Rw LF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAt X194OyB9Cn07CiMgMTczICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2Z1bmN0aW9u LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDogcHVibGljIGJpbmFy eV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9Cn07CgoKdGVt cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVu Y3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9feTsgfQp9OwoKCnRlbXBsYXRl IDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg X195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpzdHJ1Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAg Ym9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyBy ZXR1cm4gX194IDwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0 ZXJfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wg b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJu IF9feCA+PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVh bCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRv cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9 IF9feTsgfQp9OwojIDIyMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9mdW5jdGlv bi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6IHB1YmxpYyBi aW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9U cCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9feTsgfQp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFyeV9m dW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggfHwgX195OyB9Cn07CgoKdGVtcGxh dGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u PF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJl dHVybiAhX194OyB9Cn07CiMgMjcxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2Z1 bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0 ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50 X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgog IGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChf X3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3Vt ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNh dGU+Cm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0 ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNs YXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1By ZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg dHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVi bGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9N X3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRl OjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVu YW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAg cmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVk aWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRp Y2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVk KTsKfQojIDM0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9mdW5jdGlvbi5oIiAz CnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIxc3QKICA6IHB1YmxpYyB1 bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlw ZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpm aXJzdF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IF9PcGVy YXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3Rf YXJndW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBl bmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUg X09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJu IG9wKHZhbHVlLCBfX3gpOwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBl CiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYg X194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKfTsKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRp b24+CmJpbmQxc3QoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0 eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlw ZTsKICByZXR1cm4gYmluZGVyMXN0PF9PcGVyYXRpb24+KF9fZm4sIF9BcmcxX3R5cGUoX194KSk7 Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJs aWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlw ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRf dHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9u OjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBf T3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNl Y29uZF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQog IHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBl bmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJl dHVybiBvcChfX3gsIHZhbHVlKTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRf dHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlw ZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoKfTsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVy YXRpb24+CmJpbmQybmQoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsK ICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIF9Bcmcy X3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJuZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMl90eXBlKF9f eCkpOwp9CiMgNDM4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2Z1bmN0aW9uLmgi IDMKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9f dW5hcnlfZnVuY3Rpb24gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gewpw cm90ZWN0ZWQ6CiAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZyk7CnB1YmxpYzoKICBwb2ludGVyX3Rv X3VuYXJ5X2Z1bmN0aW9uKCkge30KICBleHBsaWNpdCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9u KF9SZXN1bHQgKCpfX3gpKF9BcmcpKSA6IF9NX3B0cihfX3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRv cigpKF9BcmcgX194KSBjb25zdCB7IHJldHVybiBfTV9wdHIoX194KTsgfQp9OwoKCnRlbXBsYXRl IDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b191bmFyeV9mdW5j dGlvbjxfQXJnLCBfUmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcpKQp7CiAgcmV0 dXJuIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4oX194KTsKfQoKCnRl bXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBv aW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uIDoKICBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9Bcmcx LF9BcmcyLF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEs IF9BcmcyKTsKcHVibGljOgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7fQogICAg ZXhwbGljaXQgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZzEs IF9BcmcyKSkKICAgICAgOiBfTV9wdHIoX194KSB7fQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9B cmcxIF9feCwgX0FyZzIgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBfTV9wdHIoX194LCBfX3kp OwogICAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9S ZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVz dWx0PgpwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpIHsKICByZXR1cm4gcG9p bnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4oX194KTsKfQoKCnRl bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfSWRlbnRpdHkgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp b248X1RwLF9UcD4gewogIF9UcCYgb3BlcmF0b3IoKShfVHAmIF9feCkgY29uc3QgeyByZXR1cm4g X194OyB9CiAgY29uc3QgX1RwJiBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJl dHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3Qxc3Qg OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBl PiB7CiAgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkg Y29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6 OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0 dXJuIF9feC5maXJzdDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2Vs ZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vj b25kX3R5cGU+CnsKICB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoX1Bh aXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQogIGNvbnN0IHR5cGVu YW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25z dCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9Cn07CiMgNTI4ICIvdXNyL2luY2x1ZGUvYysr LzMuMi4xL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz IF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4g ewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01f ZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9f cC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1Ymxp YyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNv bnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30K ICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipf TV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGlj IHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Jl Zl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io KShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9S ZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4K Y2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1Jl dD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6Oipf X3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1Rw JiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChf VHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs IGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U cCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6 Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3As IF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgog IF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz cyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5 X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25z dF9tZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikg e30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdAogICAg eyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9m KShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz cyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw LF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1Rw OjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9f ciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToK ICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xh c3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBi aW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3Rf bWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3Bm KSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsg cmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShf QXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9p ZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4 cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2 b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0 ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNz IGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0 IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KHZvaWQgKF9U cDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25z dCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9U cDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1 bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1 YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01f ZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9m KSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5h cnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5f cmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBv cGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0 ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiA6IHB1YmxpYyBi aW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9m dW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3Bl cmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0K cHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4K ICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsKcHVibGlj OgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29u c3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0Fy ZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6 OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJn PgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5 X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Jl Zl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJh dG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJp dmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+ CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4 cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0 KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9Bcmcg X194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6Oipf TV9mKShfQXJnKSBjb25zdDsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1Rw PgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkK ICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBf UmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4o X1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0 LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1l bV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7 IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVt X2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9m dW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf VHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4o X1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9B cmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+ CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1Rw OjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1Rw LF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B cmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0 IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9B cmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+ CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihf UmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Jl Zl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCgoKfQojIDUzICIvdXNyL2luY2x1ZGUvYysrLzMu Mi4xL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Jhc2ljX3N0 cmluZy5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Jhc2ljX3N0cmlu Zy5oIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaTM4Ni1zbGFja3dhcmUtbGludXgv Yml0cy9hdG9taWNpdHkuaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaTM4Ni1z bGFja3dhcmUtbGludXgvYml0cy9hdG9taWNpdHkuaCIgMwp0eXBlZGVmIGludCBfQXRvbWljX3dv cmQ7CgpzdGF0aWMgaW5saW5lIF9BdG9taWNfd29yZApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRf XykpCl9fZXhjaGFuZ2VfYW5kX2FkZCAodm9sYXRpbGUgX0F0b21pY193b3JkICpfX21lbSwgaW50 IF9fdmFsKQp7CiAgcmVnaXN0ZXIgX0F0b21pY193b3JkIF9fcmVzdWx0OwogIF9fYXNtX18gX192 b2xhdGlsZV9fICgibG9jazsgeGFkZGwgJTAsJTIiCiAgICAgICAgICAgICAgICAgICAgICAgIDog Ij1yIiAoX19yZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiIChfX3ZhbCksICJt IiAoKl9fbWVtKQogICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICByZXR1cm4g X19yZXN1bHQ7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRf XykpCl9fYXRvbWljX2FkZCAodm9sYXRpbGUgX0F0b21pY193b3JkKiBfX21lbSwgaW50IF9fdmFs KQp7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyBhZGRsICUwLCUxIgogICAgICAgICAg ICAgICAgICAgICAgICA6IDogImlyIiAoX192YWwpLCAibSIgKCpfX21lbSkgOiAibWVtb3J5Iik7 Cn0KIyA0NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Jhc2ljX3N0cmluZy5oIiAyIDMK Cm5hbWVzcGFjZSBzdGQKewojIDg4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvYmFzaWNf c3RyaW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0cmluZwogICAgewoKICAgIHB1Ymxp YzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9BbGxvYyBh bGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBz aXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUg ZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVmZXJlbmNl IHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVyZW5j ZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2ludGVy IHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9wb2ludGVyIGNv bnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxw b2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9fZ251X2N4eDo6 X19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgYmFzaWNfc3RyaW5nPgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9p dGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBj b25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRl cmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKIyAxMjMgIi91c3IvaW5jbHVk ZS9jKysvMy4yLjEvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICBzdHJ1Y3QgX1JlcAogICAg ICB7CgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8Y2hh cj46Om90aGVyIF9SYXdfYnl0ZXNfYWxsb2M7CiMgMTQxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIF9T X21heF9zaXplOwogICAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQgX1NfdGVybWluYWw7CgogICAg ICAgIHNpemVfdHlwZSBfTV9sZW5ndGg7CiAgICAgICAgc2l6ZV90eXBlIF9NX2NhcGFjaXR5Owog ICAgICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwoKICAgICAgICBib29sCiAgICAgICAg X01faXNfbGVha2VkKCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2VzIDwgMDsg fQoKICAgICAgICBib29sCiAgICAgICAgX01faXNfc2hhcmVkKCkgY29uc3QKICAgICAgICB7IHJl dHVybiBfTV9yZWZlcmVuY2VzID4gMDsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0X2xl YWtlZCgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gLTE7IH0KCiAgICAgICAgdm9pZAogICAg ICAgIF9NX3NldF9zaGFyYWJsZSgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gMDsgfQoKICAg ICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVmZGF0YSgpIHRocm93KCkKICAgICAgICB7IHJldHVy biByZWludGVycHJldF9jYXN0PF9DaGFyVCo+KHRoaXMgKyAxKTsgfQoKICAgICAgICBfQ2hhclQm CiAgICAgICAgb3BlcmF0b3JbXShzaXplX3QgX19zKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g X01fcmVmZGF0YSgpIFtfX3NdOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9ncmFiKGNv bnN0IF9BbGxvYyYgX19hbGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxvYzIpCiAgICAgICAgewog ICAgICAgICAgcmV0dXJuICghX01faXNfbGVha2VkKCkgJiYgX19hbGxvYzEgPT0gX19hbGxvYzIp CiAgICAgICAgICAgICAgICAgID8gX01fcmVmY29weSgpIDogX01fY2xvbmUoX19hbGxvYzEpOwog ICAgICAgIH0KCgogICAgICAgIHN0YXRpYyBfUmVwKgogICAgICAgIF9TX2NyZWF0ZShzaXplX3Qs IGNvbnN0IF9BbGxvYyYpOwoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGlzcG9zZShjb25zdCBf QWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZf TV9yZWZlcmVuY2VzLCAtMSkgPD0gMCkKICAgICAgICAgICAgX01fZGVzdHJveShfX2EpOwogICAg ICAgIH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhy b3coKTsKCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX3JlZmNvcHkoKSB0aHJvdygpCiAgICAg ICAgewogICAgICAgICAgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsKICAgICAgICAg IHJldHVybiBfTV9yZWZkYXRhKCk7CiAgICAgICAgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAg X01fY2xvbmUoY29uc3QgX0FsbG9jJiwgc2l6ZV90eXBlIF9fcmVzID0gMCk7CiAgICAgIH07CgoK ICAgICAgc3RydWN0IF9BbGxvY19oaWRlciA6IF9BbGxvYwogICAgICB7CiAgICAgICAgX0FsbG9j X2hpZGVyKF9DaGFyVCogX19kYXQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIDogX0FsbG9j KF9fYSksIF9NX3AoX19kYXQpIHsgfQoKICAgICAgICBfQ2hhclQqIF9NX3A7CiAgICAgIH07Cgog ICAgcHVibGljOgoKCgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNf Y2FzdDxzaXplX3R5cGU+KC0xKTsKCiAgICBwcml2YXRlOgoKICAgICAgbXV0YWJsZSBfQWxsb2Nf aGlkZXIgX01fZGF0YXBsdXM7CgoKCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1NfZW1wdHlfcmVw X3N0b3JhZ2VbKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlw ZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEo KSBjb25zdAogICAgICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9CgogICAgICBfQ2hhclQq CiAgICAgIF9NX2RhdGEoX0NoYXJUKiBfX3ApCiAgICAgIHsgcmV0dXJuIChfTV9kYXRhcGx1cy5f TV9wID0gX19wKTsgfQoKICAgICAgX1JlcCoKICAgICAgX01fcmVwKCkgY29uc3QKICAgICAgeyBy ZXR1cm4gJigocmVpbnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0KCgoK ICAgICAgaXRlcmF0b3IKICAgICAgX01faWJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io X01fZGF0YSgpKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWVuZCgpIGNvbnN0IHsgcmV0 dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHZvaWQKICAg ICAgX01fbGVhaygpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX3JlcCgpLT5fTV9pc19sZWFrZWQo KSkKICAgICAgICAgIF9NX2xlYWtfaGFyZCgpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAg ICBfTV9jaGVjayhzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19w b3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNf c3RyaW5nOjpfTV9jaGVjayIpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOwog ICAgICB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3MsIHNp emVfdHlwZSBfX29mZikgY29uc3QKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b2ZmID0gX19v ZmYgPCB0aGlzLT5zaXplKCkgLSBfX3BvczsKICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYgPSBf X3Rlc3RvZmYgPyBfX29mZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHJldHVybiAo X01faWJlZ2luKCkgKyBfX3BvcyArIF9fbmV3b2ZmKTsKICAgICAgfQoKCgogICAgICB0ZW1wbGF0 ZTxjbGFzcyBfSXRlcmF0b3I+CiAgICAgICAgc3RhdGljIHZvaWQKICAgICAgICBfU19jb3B5X2No YXJzKF9DaGFyVCogX19wLCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJhdG9yIF9fazIpCiAgICAgICAg ewogICAgICAgICAgZm9yICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCArK19fcCkKICAgICAgICAg ICAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19wLCAqX19rMSk7CiAgICAgICAgfQoKICAgICAgc3Rh dGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwg aXRlcmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9f azIuYmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hh clQqIF9fcCwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAg eyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAg c3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0NoYXJUKiBfX2sx LCBfQ2hhclQqIF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2sy IC0gX19rMSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJU KiBfX3AsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICB7IHRy YWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICB2b2lkCiAg ICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlw ZSBfX2xlbjIpOwoKICAgICAgdm9pZAogICAgICBfTV9sZWFrX2hhcmQoKTsKCiAgICAgIHN0YXRp YyBfUmVwJgogICAgICBfU19lbXB0eV9yZXAoKQogICAgICB7IHJldHVybiAqcmVpbnRlcnByZXRf Y2FzdDxfUmVwKj4oJl9TX2VtcHR5X3JlcF9zdG9yYWdlKTsgfQoKICAgIHB1YmxpYzoKCgoKCiAg ICAgIGlubGluZQogICAgICBiYXNpY19zdHJpbmcoKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJh c2ljX3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSk7CgoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0 IGJhc2ljX3N0cmluZyYgX19zdHIpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3Ry aW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBl IF9fbiA9IG5wb3MpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0 ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29u c3QgX0FsbG9jJiBfX2EpOwoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBz aXplX3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxs b2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9j JiBfX2EgPSBfQWxsb2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hh clQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIHRlbXBsYXRlPGNs YXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBf X2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9B bGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgfmJhc2ljX3N0cmluZygpCiAgICAgIHsgX01f cmVwKCktPl9NX2Rpc3Bvc2UodGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsgfQoKICAgICAgYmFzaWNf c3RyaW5nJgogICAgICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1 cm4gdGhpcy0+YXNzaWduKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVy YXRvcj0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9Cgog ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJldHVybiB0 aGlzLT5hc3NpZ24oMSwgX19jKTsgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkKICAg ICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgp KTsKICAgICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdAogICAg ICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgog ICAgICBlbmQoKQogICAgICB7CiAgICAgICAgIF9NX2xlYWsoKTsKICAgICAgICAgcmV0dXJuIGl0 ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0 ZXJhdG9yCiAgICAgIGVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9N X2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAg cmJlZ2luKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0K CiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QKICAgICAg eyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIHJl dmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0 b3IodGhpcy0+YmVnaW4oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAg cmVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+ YmVnaW4oKSk7IH0KCiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNv bnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAg ICBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBz aXplX3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhfc2l6 ZTsgfQoKICAgICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7 CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uKSB7IHRoaXMtPnJlc2l6ZShf X24sIF9DaGFyVCgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNhcGFjaXR5KCkgY29uc3Qg eyByZXR1cm4gX01fcmVwKCktPl9NX2NhcGFjaXR5OyB9CgogICAgICB2b2lkCiAgICAgIHJlc2Vy dmUoc2l6ZV90eXBlIF9fcmVzX2FyZyA9IDApOwoKICAgICAgdm9pZAogICAgICBjbGVhcigpIHsg X01fbXV0YXRlKDAsIHRoaXMtPnNpemUoKSwgMCk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHko KSBjb25zdCB7IHJldHVybiB0aGlzLT5zaXplKCkgPT0gMDsgfQoKCiAgICAgIGNvbnN0X3JlZmVy ZW5jZQogICAgICBvcGVyYXRvcltdIChzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIF9NX2RhdGEoKVtfX3Bvc107IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltd KHNpemVfdHlwZSBfX3BvcykKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1 cm4gX01fZGF0YSgpW19fcG9zXTsKICAgICAgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAg IGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHRoaXMt PnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0 Iik7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgogICAgICByZWZlcmVu Y2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGlmIChfX24gPj0gc2l6 ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsK ICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9 CgoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0cmlu ZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0 cmluZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+ YXBwZW5kKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShfQ2hh clQgX19jKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9CgogICAg ICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsK CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19z dHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcm CiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBi YXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1 cm4gdGhpcy0+YXBwZW5kKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7Cgog ICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcm CiAgICAgICAgYXBwZW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgp LCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhfQ2hhclQg X19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEsIF9fYyk7 IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYg X19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3Ry aW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAg ICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAo X19wb3MgPiBfX3N0cnNpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNf c3RyaW5nOjphc3NpZ24iKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0 cnNpemUgLSBfX3BvczsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdzaXplID0gX190ZXN0 biA/IF9fbiA6IF9fc3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgIHJldHVybiB0aGlzLT5hc3NpZ24o X19zdHIuX01fZGF0YSgpICsgX19wb3MsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQog ICAgICB7CiAgICAgICAgaWYgKF9fbiA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICBfX3Ro cm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjphc3NpZ24iKTsKICAgICAgICBpZiAoX01f cmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2Rh dGEoKSkKICAgICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIHRo aXMtPnNpemUoKSwgX19zKSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJl Z2luKCksIF9NX2llbmQoKSwgX19zLCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAg IHsKCiAgICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BvcyA9IF9fcyAtIF9NX2RhdGEoKTsK ICAgICAgICAgICAgaWYgKF9fcG9zID49IF9fbikKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6 Y29weShfTV9kYXRhKCksIF9fcywgX19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19wb3MpCiAg ICAgICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpLCBfX3MsIF9fbik7CiAgICAg ICAgICAgIF9NX3JlcCgpLT5fTV9sZW5ndGggPSBfX247CiAgICAgICAgICAgIF9NX2RhdGEoKVtf X25dID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAg ICAgIH0KICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0No YXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIHRyYWl0c190eXBlOjps ZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKHNpemVfdHlw ZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2lu KCksIF9NX2llbmQoKSwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJ dGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJh dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlz LT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAg ICAgIHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJU IF9fYykKICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0KCiAgICAg IHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJh dG9yIF9fcCwgX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQogICAg ICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQoKICAgICAgYmFz aWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3Ry aW5nJiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIsIDAs IF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVf dHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICBzaXpl X3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90 eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19wb3MyID4gX19zdHJz aXplKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0 Iik7CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuID0gX19uIDwgX19zdHJzaXplIC0gX19wb3My OwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19z dHJzaXplIC0gX19wb3MyOwogICAgICAgIHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0 ci5fTV9kYXRhKCkgKyBfX3BvczIsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0 cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNp emVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhp cy0+c2l6ZSgpOwogICAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3df b3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAgIGlmIChfX3NpemUg PiB0aGlzLT5tYXhfc2l6ZSgpIC0gX19uKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3Io ImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFy ZWQoKSB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAgICAg IHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyBfX3NpemUsIF9fcykpCiAgICAg ICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdp bigpICsgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsg X19uKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CgoKCiAgICAgICAgICAgIGNvbnN0IHNpemVf dHlwZSBfX29mZiA9IF9fcyAtIF9NX2RhdGEoKTsKICAgICAgICAgICAgX01fbXV0YXRlKF9fcG9z LCAwLCBfX24pOwogICAgICAgICAgICBfX3MgPSBfTV9kYXRhKCkgKyBfX29mZjsKICAgICAgICAg ICAgX0NoYXJUKiBfX3AgPSBfTV9kYXRhKCkgKyBfX3BvczsKICAgICAgICAgICAgaWYgKF9fcyAr IF9fbiA8PSBfX3ApCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3MsIF9f bik7CiAgICAgICAgICAgIGVsc2UgaWYgKF9fcyA+PSBfX3ApCiAgICAgICAgICAgICAgdHJhaXRz X3R5cGU6OmNvcHkoX19wLCBfX3MgKyBfX24sIF9fbik7CiAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywgX19w IC0gX19zKTsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCArIChfX3AgLSBf X3MpLCBfX3AgKyBfX24sIF9fbiAtIChfX3AgLSBfX3MpKTsKICAgICAgICAgICAgICB9CiAgICAg ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgIH0KICAgICAgIH0KCiAgICAgIGJhc2ljX3N0 cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MpCiAg ICAgIHsgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvcywgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3Ro KF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19w b3MsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbnNl cnQoX01fY2hlY2soX19wb3MpLCBfX24sIF9fYyk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg ICB9CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfQ2hhclQgX19j ID0gX0NoYXJUKCkpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19wb3MgPSBfX3AgLSBfTV9p YmVnaW4oKTsKICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBzaXplX3R5cGUo MSksIF9fYyk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgICByZXR1 cm4gdGhpcy0+X01faWJlZ2luKCkgKyBfX3BvczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5n JgogICAgICBlcmFzZShzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykK ICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01f Zm9sZChfX3BvcywgX19uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9kYXRhKCks IF9NX2RhdGEoKSk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9y IF9fcG9zaXRpb24pCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19wb3NpdGlvbiAt IF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwgX19wb3NpdGlv biArIDEsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xl YWtlZCgpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAg aXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQog ICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9faSA9IF9fZmlyc3QgLSBfTV9pYmVnaW4oKTsKICAg ICAgICB0aGlzLT5yZXBsYWNlKF9fZmlyc3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRhKCkp OwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICByZXR1cm4gX01faWJl Z2luKCkgKyBfX2k7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShz aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbiwgX19zdHIuX01fZGF0YSgp LCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6 ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs CiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpOwoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f bjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKQogICAg ICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAg ICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFz aWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuMSA9IF9fbjEg PCBfX3NpemUgLSBfX3BvczsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19mb2xkbjEgPSBfX3Rl c3RuMSA/IF9fbjEgOiBfX3NpemUgLSBfX3BvczsKICAgICAgICBpZiAoX19zaXplIC0gX19mb2xk bjEgPiB0aGlzLT5tYXhfc2l6ZSgpIC0gX19uMikKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vy cm9yKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lz X3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAg ICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkK ICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faWJlZ2luKCkgKyBfX3BvcyArIF9fZm9s ZG4xLCBfX3MsIF9fcyArIF9fbjIpOwoKICAgICAgICBlbHNlIHJldHVybgogICAgICAgICAgICAg ICBfTV9yZXBsYWNlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsgX19wb3MgKyBf X2ZvbGRuMSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9DaGFy VCo+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog 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 dXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9CgoKCiAgICAgIGJhc2ljX3N0cmlu ZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfQ2hhclQqIF9f azEsIF9DaGFyVCogX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBf TV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShp dGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9D aGFyVCogX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVn aW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLCBf X2syIC0gX19rMSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRv ciBfX2kxLCBpdGVyYXRvciBfX2kyLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAg ICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19p MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEuYmFzZSgpLCBfX2syIC0gX19r MSk7CiAgICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9y IF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9y IF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCks IF9faTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNlKCks IF9fazIgLSBfX2sxKTsKICAgICAgICB9CgogICAgcHJpdmF0ZToKICAgICAgdGVtcGxhdGU8Y2xh c3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxh Y2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwKICAg ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7 CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0 cmluZyYKICAgICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19p MiwgX0ZvcndhcmRJdGVyYXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy YXRvciBfX2syKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0 aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRl ciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2Zh bHNlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0luSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7CiAgICAgICAgICByZXR1cm4g X1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hLCBfVGFnKCkpOwogICAgICAgIH0KCiAgICAg IHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBf U19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxv YyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICAgICAgewog ICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fYmVn KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4o X19lbmQpLCBfX2EpOwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAg ICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywg X0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsK ICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3RfYXV4KF9fYmVnLCBfX2VuZCwgX19hLCBfSW50 ZWdyYWwoKSk7CiAgICAgICAgfQoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAg ICAgc3RhdGljIF9DaGFyVCoKICAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9J bkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgaW5w dXRfaXRlcmF0b3JfdGFnKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+CiAgICAg ICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3ZEl0ZXIgX19iZWcsIF9G d2RJdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgZm9y d2FyZF9pdGVyYXRvcl90YWcpOwoKICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgX1NfY29uc3Ry dWN0KHNpemVfdHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpOwoKICAg IHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5 cGUgX19uLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgc3dh cChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MpOwoKCiAgICAgIGNv bnN0IF9DaGFyVCoKICAgICAgY19zdHIoKSBjb25zdAogICAgICB7CgogICAgICAgIHNpemVfdHlw ZSBfX24gPSB0aGlzLT5zaXplKCk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRh KClbX19uXSwgX1JlcDo6X1NfdGVybWluYWwpOwogICAgICAgIHJldHVybiBfTV9kYXRhKCk7CiAg ICAgIH0KCiAgICAgIGNvbnN0IF9DaGFyVCoKICAgICAgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIF9N X2RhdGEoKTsgfQoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigpIGNv bnN0IHsgcmV0dXJuIF9NX2RhdGFwbHVzOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChj b25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsK CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNp emVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zdHIu ZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZp bmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsg fQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9z ID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgYmFzaWNfc3Ry aW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+cmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAg c2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3Ms IHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0 IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5yZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9Cgog ICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0g bnBvcykgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBi YXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5maW5kX2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUo KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCog X19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90 eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv cyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zLCBfX3Bv cywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZp bmRfZmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAg IGZpbmRfbGFzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3Mg PSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zdHIuZGF0 YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRf bGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u KSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJU KiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PmZpbmRfbGFzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9Cgog ICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBf X3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fYywgX19wb3Mp OyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFzaWNf c3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgp KTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFy VCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlw ZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNv bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3Ro KF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJU IF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAg ZmluZF9sYXN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19w b3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9f c3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAg ICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CiAgICAgIHNpemVfdHlw ZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19w b3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9f cywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQog ICAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3Mp IGNvbnN0OwoKICAgICAgYmFzaWNfc3RyaW5nCiAgICAgIHN1YnN0cihzaXplX3R5cGUgX19wb3Mg PSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3Bv cyA+IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19z dHJpbmc6OnN1YnN0ciIpOwogICAgICAgIHJldHVybiBiYXNpY19zdHJpbmcoKnRoaXMsIF9fcG9z LCBfX24pOwogICAgICB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBiYXNpY19zdHJp bmcmIF9fc3RyKSBjb25zdAogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMt PnNpemUoKTsKICAgICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAg ICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zaXplLCBfX29zaXplKTsKCiAgICAgICAgaW50IF9f ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zdHIuZGF0YSgpLCBfX2xlbik7 CiAgICAgICAgaWYgKCFfX3IpCiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwogICAg ICAgIHJldHVybiBfX3I7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlw ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7 CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19u MSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19w b3MyLCBzaXplX3R5cGUgX19uMikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25z dCBfQ2hhclQqIF9fcykgY29uc3Q7CgoKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlw ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCiAgICAg IGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0 IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsKICB9OwoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 CiAgICBiYXNpY19zdHJpbmcoKQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAoKS5fTV9y ZWZjb3B5KCksIF9BbGxvYygpKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBw ZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBf X2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0Fs bG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxs b2M+CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfQ2hh clQqIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJu IF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19saHMsIF9DaGFyVCBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwog ICAgICBfX3N0cmluZ190eXBlIF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6 ZV90eXBlKDEpLCBfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFy ZShfX3JocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNv bnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShf X2xocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAg ICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3Jo cykgPT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAg ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg ICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l IGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAg Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7 IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJl dHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s CiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9D aGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMsCiAg ICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBh cmUoX19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAg ICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y aHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX0No YXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDwg MDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJl dHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK ICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVy biBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yPD0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgeyByZXR1cm4gX19y aHMuY29tcGFyZShfX2xocykgPj0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl cmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xo cywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFy VCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywKICAg ICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f cmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0gMDsgfQoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBpbmxpbmUgdm9pZAogICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX2xocywKICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19yaHMpCiAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYg X19vcywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+ JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAg ICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hh clQgX19kZWxpbSk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFp dHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAg ICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsK fQojIDU0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL3N0cmluZyIgMiAzCgoKIyAxICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi4xL2FsZ29yaXRobSIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9jKysvMy4y LjEvYWxnb3JpdGhtIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxf YWxnby5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2hlYXAuaCIgMSAzCiMgNjMg Ii91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfaGVhcC5oIiAzCm5hbWVzcGFjZSBzdGQK ewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUg X0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX3B1c2hfaGVhcChfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2hvbGVJ bmRleCwgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlKQogICAgewogICAgICBfRGlz dGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIHdoaWxlIChfX2hv bGVJbmRleCA+IF9fdG9wSW5kZXggJiYgKihfX2ZpcnN0ICsgX19wYXJlbnQpIDwgX192YWx1ZSkg ewogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50 KTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50OwogICAgICAgIF9fcGFyZW50ID0gKF9f aG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB9CiAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4 KSA9IF9fdmFsdWU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy YXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVl X3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAg ICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmly c3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUo MCksCiAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0 YW5jZSwgdHlwZW5hbWUgX1RwLAogICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZv aWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFu Y2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX190b3BJbmRleCwgX1Rw IF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50 ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3Rv cEluZGV4ICYmIF9fY29tcCgqKF9fZmlyc3QgKyBfX3BhcmVudCksIF9fdmFsdWUpKSB7CiAgICAg ICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAg ICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICAgICAgX19wYXJlbnQgPSAoX19ob2xlSW5k ZXggLSAxKSAvIDI7CiAgICAgIH0KICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192 YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0 eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAg ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAg ICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu ZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5 cGU7CgoKICAgICAKCgogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKChf X2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAg ICBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5h bWUgX1RwPgogICAgdm9pZAogICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgICAgICBfRGlzdGFu Y2UgX19sZW4sIF9UcCBfX3ZhbHVlKQogICAgewogICAgICBfRGlzdGFuY2UgX190b3BJbmRleCA9 IF9faG9sZUluZGV4OwogICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJ bmRleCArIDI7CiAgICAgIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgICAgICBp ZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkgPCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGls ZCAtIDEpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICAgICAqKF9fZmlyc3QgKyBf X2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgICAgICBfX2hvbGVJ bmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNv bmRDaGlsZCArIDEpOwogICAgICB9CiAgICAgIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7 CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25k Q2hpbGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICAg ICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwg X192YWx1ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRv ciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUpCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgICpfX3Jlc3VsdCA9ICpf X2ZpcnN0OwogICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3Rh bmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIHBvcF9oZWFwKF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0 KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj ZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAg ICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUo KihfX2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwKICAgICAgICAgICB0eXBlbmFtZSBfVHAsIHR5 cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgICAg ICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg ICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5jZSBf X3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vjb25k Q2hpbGQgPCBfX2xlbikgewogICAgICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRD aGlsZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKSkKICAgICAgICAgIF9fc2Vj b25kQ2hpbGQtLTsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3Qg KyBfX3NlY29uZENoaWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAg ICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAg ICAgIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19o b2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19o b2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChf X2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSwgX19jb21wKTsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHAs IHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAg ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUs IF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsK ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwg X0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksCiAgICAgICAgICAgICAg ICAgICAgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBw b3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgIF9SYW5k b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCgoK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJh dG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9f bGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZv aWQKICAgIG1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1Zh bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoK CiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAg ICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFu Y2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAg ICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9WYWx1ZVR5cGUo KihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7CiAgICAgICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVy bjsKICAgICAgICBfX3BhcmVudC0tOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9p ZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJh dG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90 eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgoKICAgICAgaWYgKF9fbGFzdCAt IF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3Qg LSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsK CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3Bh cmVudCwgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19maXJzdCAr IF9fcGFyZW50KSksIF9fY29tcCk7CiAgICAgICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsK ICAgICAgICBfX3BhcmVudC0tOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S YW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKCiAg ICAgCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgICAgICBw b3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S YW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBzb3J0 X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKCgog ICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICAgICAgcG9wX2hlYXAoX19maXJz dCwgX19sYXN0LS0sIF9fY29tcCk7CiAgICB9Cgp9CiMgNjUgIi91c3IvaW5jbHVkZS9jKysvMy4y LjEvYml0cy9zdGxfYWxnby5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMv c3RsX3RlbXBidWYuaCIgMSAzCiMgNjQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxf dGVtcGJ1Zi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDc0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2JpdHMvc3RsX3RlbXBidWYuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwg Y2xhc3MgX1RwPgogIGNsYXNzIF9UZW1wb3JhcnlfYnVmZmVyCnsKCiAKCiAgcHRyZGlmZl90IF9N X29yaWdpbmFsX2xlbjsKICBwdHJkaWZmX3QgX01fbGVuOwogIF9UcCogX01fYnVmZmVyOwoKCiAg dm9pZCBfTV9hbGxvY2F0ZV9idWZmZXIoKSB7CiAgICBfTV9vcmlnaW5hbF9sZW4gPSBfTV9sZW47 CiAgICBfTV9idWZmZXIgPSAwOwoKICAgIGlmIChfTV9sZW4gPiAocHRyZGlmZl90KSgyMTQ3NDgz NjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgICBfTV9sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9U cCk7CgogICAgd2hpbGUgKF9NX2xlbiA+IDApIHsKICAgICAgX01fYnVmZmVyID0gKF9UcCopIG1h bGxvYyhfTV9sZW4gKiBzaXplb2YoX1RwKSk7CiAgICAgIGlmIChfTV9idWZmZXIpCiAgICAgICAg YnJlYWs7CiAgICAgIF9NX2xlbiAvPSAyOwogICAgfQogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXpl X2J1ZmZlcihjb25zdCBfVHAmLCBfX3RydWVfdHlwZSkge30KICB2b2lkIF9NX2luaXRpYWxpemVf YnVmZmVyKGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNlX3R5cGUpIHsKICAgIHVuaW5pdGlhbGl6ZWRf ZmlsbF9uKF9NX2J1ZmZlciwgX01fbGVuLCB2YWwpOwogIH0KCnB1YmxpYzoKCiAgcHRyZGlmZl90 IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9sZW47IH0KCiAgcHRyZGlmZl90IHJlcXVlc3RlZF9z aXplKCkgY29uc3QgeyByZXR1cm4gX01fb3JpZ2luYWxfbGVuOyB9CgogIF9UcCogYmVnaW4oKSB7 IHJldHVybiBfTV9idWZmZXI7IH0KCiAgX1RwKiBlbmQoKSB7IHJldHVybiBfTV9idWZmZXIgKyBf TV9sZW47IH0KCiAgX1RlbXBvcmFyeV9idWZmZXIoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3Ry YWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yCiAgICAgICAgICAgIF9U cml2aWFsOwoKICAgIHRyeSB7CiAgICAgIF9NX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFz dCk7CiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigpOwogICAgICBpZiAoX01fbGVuID4gMCkKICAg ICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwgX1RyaXZpYWwoKSk7CiAgICB9CiAg ICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBmcmVlKF9NX2J1ZmZlcik7CiAgICAgICAgX01f YnVmZmVyID0gMDsKICAgICAgICBfTV9sZW4gPSAwOwogICAgICAgIHRocm93OwogICAgICB9CiAg fQoKICB+X1RlbXBvcmFyeV9idWZmZXIoKSB7CiAgICBfRGVzdHJveShfTV9idWZmZXIsIF9NX2J1 ZmZlciArIF9NX2xlbik7CiAgICBmcmVlKF9NX2J1ZmZlcik7CiAgfQoKcHJpdmF0ZToKCiAgX1Rl bXBvcmFyeV9idWZmZXIoY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQogIHZvaWQgb3BlcmF0 b3I9KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KfTsKCn0KIyA2NiAiL3Vzci9pbmNsdWRl L2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKIyA4NCAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+CiAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19h LCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpCiAgICB7CgogICAgIAogICAgICBpZiAo X19hIDwgX19iKQogICAgICAgIGlmIChfX2IgPCBfX2MpCiAgICAgICAgICByZXR1cm4gX19iOwog ICAgICAgIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgICAgICAgIHJldHVybiBfX2M7CiAgICAgICAg ZWxzZQogICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAg ICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fYiA8IF9fYykKICAgICAgICByZXR1cm4g X19jOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9fYjsKICAgIH0KIyAxMTggIi91c3IvaW5j bHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBfX21lZGlhbihj b25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBf X2NvbXApCiAgICB7CgogICAgIAogICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkKICAgICAgICBp ZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgICAgIHJldHVybiBfX2I7CiAgICAgICAgZWxzZSBp ZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgICAgIHJldHVybiBfX2M7CiAgICAgICAgZWxzZQog ICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAg ICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgICAg IHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX19iOwogICAgfQojIDE1MCAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRnVuY3Rpb24+CiAgICBfRnVuY3Rpb24KICAgIGZv cl9lYWNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9GdW5jdGlvbiBf X2YpCiAgICB7CgogICAgIAogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly c3QpCiAgICAgICAgX19mKCpfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZjsKICAgIH0KCgoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg X0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcp CiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhKCpfX2ZpcnN0ID09IF9f dmFsKSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAg ICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAg aW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qg JiYgIV9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgKytfX2ZpcnN0OwogICAgICByZXR1cm4gX19m aXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg dHlwZW5hbWUgX1RwPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmQoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBf VHAmIF9fdmFsLAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAg ICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5j ZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7Cgog ICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAgICAg IGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0 OwoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAg ICsrX19maXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJz dDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0 dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CgogICAgICBzd2l0Y2goX19s YXN0IC0gX19maXJzdCkgewogICAgICBjYXNlIDM6CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9f dmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMjoKICAg ICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19m aXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJu IF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAgICAgIGRlZmF1bHQ6 CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX1JhbmRv bUFjY2Vzc0l0ZXIKICAgIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAg ICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBf Y291bnQKICAgICAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAgICAgZm9yICggOyBf X3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgICAgICBpZiAoX19wcmVkKCpf X2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAo X19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAg ICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2Zp cnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAg ICAgKytfX2ZpcnN0OwogICAgICB9CgogICAgICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewog ICAgICBjYXNlIDM6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0 OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogICAgICAgIGlmIChfX3ByZWQoKl9f Zmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMToK ICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytf X2ZpcnN0OwogICAgICBjYXNlIDA6CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIF9fbGFz dDsKICAgICAgfQogICAgfQojIDI4OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9h bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAg ICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0 ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKICAgICAKICAgICAK CiAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9faXRlcmF0b3JfY2F0 ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMwOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf UHJlZGljYXRlPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmRfaWYoX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQp CiAgICB7CgogICAgIAogICAgIAoKICAgICAgcmV0dXJuIGZpbmRfaWYoX19maXJzdCwgX19sYXN0 LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMyOSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoK ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAg IF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAhPSBf X2xhc3QpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKICAgICAgICAgIHJldHVy biBfX2ZpcnN0OwogICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgICAgcmV0dXJu IF9fbGFzdDsKICAgIH0KIyAzNTggIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxn by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5 UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfQmluYXJ5 UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICBfRm9yd2FyZEl0 ZXIgX19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAg ICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICAgICAgcmV0 dXJuIF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgfQogICAgICByZXR1 cm4gX19sYXN0OwogICAgfQojIDM4NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9h bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAg ICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQog ICAgY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1Rw JiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCiAgICAgIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZv ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoKl9fZmlyc3Qg PT0gX192YWx1ZSkKICAgICAgICAgICsrX19uOwogICAgICByZXR1cm4gX19uOwogICAgfQojIDQx MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNvdW50X2lmKF9J bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQog ICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBf X2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAg ICsrX19uOwogICAgICByZXR1cm4gX19uOwogICAgfQojIDQ1MCAiL3Vzci9pbmNsdWRlL2MrKy8z LjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIx LCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVyMQogICAgc2VhcmNoKF9G b3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICBf Rm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAg IAogICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJz dDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0ZvcndhcmRJ dGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9PSBf X2xhc3QyKQogICAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIp OwoKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgICAgIF9fcDEgPSBfX2ZpcnN0 MjsgKytfX3AxOwoKICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAg ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAgX19maXJzdDEgPSBmaW5k KF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwogICAgICAgIGlmIChfX2ZpcnN0MSA9PSBf X2xhc3QxKQogICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIF9fcCA9IF9fcDE7CiAg ICAgICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9f bGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgd2hpbGUgKCpfX2N1cnJl bnQgPT0gKl9fcCkgewogICAgICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgICAg IHJldHVybiBfX2ZpcnN0MTsKICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQog ICAgICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgICB9CgogICAgICAgICsrX19maXJzdDE7 CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDUyMiAiL3Vzci9pbmNsdWRl L2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZD4KICAg IF9Gb3J3YXJkSXRlcjEKICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2Fy ZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zvcndh cmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGljYXRlKQogICAg ewoKICAgICAKICAgICAKICAgICAKCgoKCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8 IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgICAgIF9G b3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICAgICArK19fdG1wOwogICAgICBpZiAoX190 bXAgPT0gX19sYXN0MikgewogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFf X3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwog ICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgfQoKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9f cDEsIF9fcDsKCiAgICAgIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICAgICAgX0ZvcndhcmRJ dGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICAgIGlm IChfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9 IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAg ICsrX19maXJzdDE7CiAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgICBy ZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsKICAgICAgICBfX2N1cnJlbnQgPSBf X2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJuIF9fbGFz dDE7CgogICAgICAgIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19wKSkgewogICAg ICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsK ICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4g X19sYXN0MTsKICAgICAgICB9CgogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0KICAgICAgcmV0 dXJuIF9fZmlyc3QxOwogICAgfQojIDU5NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9J bnRlZ2VyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVn ZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoK ICAgICAgaWYgKF9fY291bnQgPD0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxz ZSB7CiAgICAgICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICAg ICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgICBfSW50ZWdlciBfX24gPSBf X2NvdW50IC0gMTsKICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICAg ICAgKytfX2k7CiAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiAq X19pID09IF9fdmFsKSB7CiAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICAtLV9fbjsKICAg ICAgICAgIH0KICAgICAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIF9fZmly c3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZmlyc3QgPSBmaW5kKF9faSwgX19sYXN0 LCBfX3ZhbCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0K IyA2NDMgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1Rw LAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0ZvcndhcmRJdGVyCiAgICBz ZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICBf QmluYXJ5UHJlZCBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAo X19jb3VudCA8PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAg ICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVk KCpfX2ZpcnN0LCBfX3ZhbCkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2ZpcnN0 OwogICAgICAgIH0KICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAg IF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICAgICAgX0ZvcndhcmRJdGVyIF9faSA9 IF9fZmlyc3Q7CiAgICAgICAgICArK19faTsKICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0 ICYmIF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAgICAgICAgICAg ICsrX19pOwogICAgICAgICAgICAtLV9fbjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX24g PT0gMCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIHsKICAgICAg ICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QpIHsKICAgICAgICAgICAgICBpZiAoX19iaW5hcnlf cHJlZCgqX19pLCBfX3ZhbCkpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAr K19faTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfX2ZpcnN0ID0gX19pOwogICAgICAgICAg fQogICAgICAgIH0KICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgNjk3ICIv dXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0 ZXIyCiAgICBzd2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIx IF9fbGFzdDEsCiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKQogICAgewoK ICAgICAKICAgICAKICAgICAKCgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9f bGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3Qx LCBfX2ZpcnN0Mik7CiAgICAgIHJldHVybiBfX2ZpcnN0MjsKICAgIH0KIyA3MzIgIi91c3IvaW5j bHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9VbmFyeU9wZXJhdGlvbj4K ICAgIF9PdXRwdXRJdGVyCiAgICB0cmFuc2Zvcm0oX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3Bl cmF0aW9uIF9fdW5hcnlfb3ApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9f Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0 ID0gX191bmFyeV9vcCgqX19maXJzdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3 NjUgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0 cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgogICAgX091dHB1 dEl0ZXIKICAgIHRyYW5zZm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s YXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX091dHB1dEl0ZXIgX19y ZXN1bHQsCiAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKICAgIHsK CiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsg KytfX2ZpcnN0MSwgKytfX2ZpcnN0MiwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBf X2JpbmFyeV9vcCgqX19maXJzdDEsICpfX2ZpcnN0Mik7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsK ICAgIH0KIyA3OTYgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAg ICByZXBsYWNlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg ICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQog ICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz dDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgqX19maXJzdCA9PSBfX29sZF92YWx1ZSkKICAgICAg ICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7CiAgICB9CiMgODI1ICIvdXNyL2luY2x1ZGUvYysr LzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl ciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgcmVwbGFj ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7Cgog ICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f Zmlyc3QpCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgICAqX19maXJzdCA9 IF9fbmV3X3ZhbHVlOwogICAgfQojIDg1NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0 cHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weShf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFs dWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgog ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAg ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUgPyBfX25ld192YWx1ZSA6 ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgODg4ICIvdXNyL2luY2x1 ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLAogICAgICAg ICAgIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAgICByZXBsYWNlX2NvcHlfaWYoX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBf T3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJl ZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAg ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAg ICAgICAqX19yZXN1bHQgPSBfX3ByZWQoKl9fZmlyc3QpID8gX19uZXdfdmFsdWUgOiAqX19maXJz dDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDkxOCAiL3Vzci9pbmNsdWRlL2MrKy8z LjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs IHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAgICB2b2lkCiAgICBnZW5lcmF0ZShfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX0dlbmVyYXRvciBfX2dlbikKICAgIHsKCiAg ICAgCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog ICAgICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKICAgIH0KIyA5NDIgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXIs IHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgogICAgX091dHB1dEl0ZXIKICAg IGdlbmVyYXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBfR2VuZXJhdG9yIF9f Z2VuKQogICAgewoKICAgICAKCgoKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2Zp cnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAg ICB9CiMgOTY5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFt ZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVtb3ZlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0 LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBm b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCEoKl9fZmly c3QgPT0gX192YWx1ZSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAg ICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyAx MDAzICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJl ZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgog ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCFf X3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAg ICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMg MTAzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgog ICAgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg ICAgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAg ICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZSk7CiAgICAgIF9Gb3J3 YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBf X2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5KCsrX19p LCBfX2xhc3QsIF9fZmlyc3QsIF9fdmFsdWUpOwogICAgfQojIDEwNzMgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICByZW1vdmVfaWYo X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg X1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIF9fZmlyc3QgPSBm aW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9 IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHlfaWYoKytfX2ksIF9fbGFzdCwg X19maXJzdCwgX19wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgX191bmlxdWVf Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJh dG9yX3RhZykKICAgIHsKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy Pjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3VsdCA9IF9fdmFs dWU7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghKF9fdmFs dWUgPT0gKl9fZmlyc3QpKSB7CiAgICAgICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICAg ICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgICAgfQogICAgICByZXR1cm4gKytfX3Jlc3Vs dDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg X0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAg ICB7CgogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAh PSBfX2xhc3QpCiAgICAgICAgaWYgKCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkKICAgICAgICAg ICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQoj IDExNDUgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUg X091dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAg ICAgCiAgICAgCgogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwoKICAgICAgaWYgKF9f Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAgIHJldHVybiBfX3VuaXF1ZV9j b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9JdGVyVHlwZSgpKTsKICAgIH0KIyAxMTcw ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5 UHJlZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJl ZCwKICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoK CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBf X3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgIHdoaWxl ICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZChfX3ZhbHVl LCAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgICAgICor K19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAgIHJldHVybiArK19fcmVzdWx0Owog ICAgfQojIDExOTkgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl bmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5 KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0 ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykK ICAgIHsKCiAgICAgCgoKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICB3aGlsZSAo KytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fcmVzdWx0 LCAqX19maXJzdCkpICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19fcmVz dWx0OwogICAgfQojIDEyMzIgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIs IHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIHVu aXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVk aWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBf SXRlclR5cGU7CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsK ICAgICAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LApfX3Jlc3VsdCwgX19i aW5hcnlfcHJlZCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDEyNjMgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy PgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgICAgICAKICAgICAgICAgCgoKICAgICAgICAgIF9f Zmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4g dW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIH0KIyAxMjkwICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRl cgogICAgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog ICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAg ICAgCgoKCiAgICAgIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCwgX19i aW5hcnlfcHJlZCk7CiAgICAgIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9f Zmlyc3QsIF9fYmluYXJ5X3ByZWQpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf QmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBfX3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJ dGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgICAgICB3aGls ZSAodHJ1ZSkKICAgICAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0g LS1fX2xhc3QpCiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCBfX2xhc3QpOwogICAgfQoKCgoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcmV2 ZXJzZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAg ICB7CiAgICAgICAgICB3aGlsZSAoX19maXJzdCA8IF9fbGFzdCkKICAgICAgICAgICAgaXRlcl9z d2FwKF9fZmlyc3QrKywgLS1fX2xhc3QpOwogICAgfQojIDEzNDkgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u YWxJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9f Zmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgICAgICAKCiAgICAg ICAgICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmly c3QpKTsKICAgIH0KIyAxMzc0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX091 dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgcmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFs SXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgog ICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAtLV9fbGFzdDsKICAgICAg ICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAg cmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEzOTkgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0V1Y2xpZGVhblJpbmdFbGVtZW50 PgogICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50CiAgICBfX2djZChfRXVjbGlkZWFuUmluZ0VsZW1l bnQgX19tLCBfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19uKQogICAgewogICAgICB3aGlsZSAoX19u ICE9IDApIHsKICAgICAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX190ID0gX19tICUgX19uOwog ICAgICAgIF9fbSA9IF9fbjsKICAgICAgICBfX24gPSBfX3Q7CiAgICAgIH0KICAgICAgcmV0dXJu IF9fbTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICB2 b2lkCiAgICBfX3JvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmICgoX19maXJzdCA9 PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAg ICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyID0gX19taWRkbGU7CiAgICAgIGRvIHsKICAgICAgICBz d2FwKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX21p ZGRsZSkKICAgICAgICAgIF9fbWlkZGxlID0gX19maXJzdDI7CiAgICAgIH0gd2hpbGUgKF9fZmly c3QyICE9IF9fbGFzdCk7CgogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwoKICAgICAgd2hpbGUg KF9fZmlyc3QyICE9IF9fbGFzdCkgewogICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3Qy KyspOwogICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICAgICAgX19taWRkbGUg PSBfX2ZpcnN0MjsKICAgICAgICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAgICAg ICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX0JpZGlyZWN0 aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRk bGUsCiAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgogICAgICBpZiAoKF9f Zmlyc3QgPT0gX19taWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVy bjsKCiAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVy YXRvcl90YWcoKSk7CiAgICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlv bmFsX2l0ZXJhdG9yX3RhZygpKTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYm IF9fbWlkZGxlICE9IF9fbGFzdCkKICAgICAgICBzd2FwICgqX19maXJzdCsrLCAqLS1fX2xhc3Qp OwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpIHsKICAgICAgICBfX3JldmVyc2UoX19t aWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAg ICAgZWxzZSB7CiAgICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlv bmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAog ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgcmFuZG9t X2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCiAgICAgIGlmICgoX19maXJzdCA9 PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojpk aWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAg IF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2UgX19rID0g X19taWRkbGUgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2UgX19sID0gX19uIC0gX19rOwoKICAg ICAgaWYgKF9fayA9PSBfX2wpIHsKICAgICAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRs ZSwgX19taWRkbGUpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgX0Rpc3RhbmNlIF9f ZCA9IF9fZ2NkKF9fbiwgX19rKTsKCiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faSA9IDA7IF9faSA8 IF9fZDsgX19pKyspIHsKICAgICAgICBfVmFsdWVUeXBlIF9fdG1wID0gKl9fZmlyc3Q7CiAgICAg ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19wID0gX19maXJzdDsKCiAgICAgICAgaWYgKF9fayA8IF9f bCkgewogICAgICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19sL19fZDsgX19q KyspIHsKICAgICAgICAgICAgaWYgKF9fcCA+IF9fZmlyc3QgKyBfX2wpIHsKICAgICAgICAgICAg ICAqX19wID0gKihfX3AgLSBfX2wpOwogICAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAg ICAgIH0KCiAgICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICAgIF9fcCAr PSBfX2s7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBlbHNlIHsKICAgICAgICAgIGZv ciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fay9fX2QgLSAxOyBfX2ogKyspIHsKICAgICAg ICAgICAgaWYgKF9fcCA8IF9fbGFzdCAtIF9faykgewogICAgICAgICAgICAgICpfX3AgPSAqKF9f cCArIF9fayk7CiAgICAgICAgICAgICAgX19wICs9IF9fazsKICAgICAgICAgICAgfQoKICAgICAg ICAgICAgKl9fcCA9ICogKF9fcCAtIF9fbCk7CiAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAg ICAgICB9CiAgICAgICAgfQoKICAgICAgICAqX19wID0gX190bXA7CiAgICAgICAgKytfX2ZpcnN0 OwogICAgICB9CiAgICB9CiMgMTU2MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9h bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgdm9p ZAogICAgcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUs IF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAoKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJU eXBlOwogICAgICBfX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfSXRlclR5cGUo KSk7CiAgICB9CiMgMTU4OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy PgogICAgX091dHB1dEl0ZXIKICAgIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0 LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJu IGNvcHkoX19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19yZXN1bHQp KTsKICAgIH0KIyAxNjEyICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlubGluZSBfRGlzdGFuY2UKICAg IF9fcmFuZG9tX251bWJlcihfRGlzdGFuY2UgX19uKQogICAgewoKICAgICAgcmV0dXJuIGxyYW5k NDgoKSAlIF9fbjsKCgoKICAgIH0KIyAxNjM0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMv c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAg aW5saW5lIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmly c3QgPT0gX19sYXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0g X19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChfX2ks IF9fZmlyc3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQoj IDE2NjAgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9SYW5kb21OdW1iZXJHZW5l cmF0b3I+CiAgICB2b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBfUmFuZG9t TnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCiAgICB7CgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9f Zmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3YXAoX19pLCBf X2ZpcnN0ICsgX19yYW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAgIH0KCgoKCgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0Zv cndhcmRJdGVyCiAgICBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAg ICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9f bGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICB3aGlsZSAoX19wcmVkKCpfX2ZpcnN0KSkKICAg ICAgICBpZiAoKytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICBfRm9y d2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKCiAgICAgIHdoaWxlICgrK19fbmV4dCAhPSBfX2xh c3QpCiAgICAgICAgaWYgKF9fcHJlZCgqX19uZXh0KSkgewogICAgICAgICAgc3dhcCgqX19maXJz dCwgKl9fbmV4dCk7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQoKICAgICAgcmV0dXJu IF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJ dGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyCiAgICBfX3Bh cnRpdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAg YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAg ICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAg ICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSBpZiAoX19wcmVkKCpfX2ZpcnN0 KSkKICAgICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVh azsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBl bHNlIGlmICghX19wcmVkKCpfX2xhc3QpKQogICAgICAgICAgICAtLV9fbGFzdDsKICAgICAgICAg IGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFz dCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTc0OCAiL3Vzci9pbmNsdWRl L2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBw YXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHJl dHVybiBfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRl Z29yeShfX2ZpcnN0KSk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgX0Zvcndh cmRJdGVyCiAgICBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Q cmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pCiAgICB7CiAgICAgIGlmIChfX2xlbiA9 PSAxKQogICAgICAgIHJldHVybiBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0IDogX19maXJzdDsK ICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgYWR2YW5jZShfX21p ZGRsZSwgX19sZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4gPSBfX2lucGxhY2Vf c3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyKTsKICAg ICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19taWRk bGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMik7CiAgICAgIHJvdGF0ZShfX2JlZ2luLCBf X21pZGRsZSwgX19lbmQpOwogICAgICBhZHZhbmNlKF9fYmVnaW4sIGRpc3RhbmNlKF9fbWlkZGxl LCBfX2VuZCkpOwogICAgICByZXR1cm4gX19iZWdpbjsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfUHJlZGlj YXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9Gb3J3YXJkSXRlcgogICAg X19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUg X19wcmVkLCBfRGlzdGFuY2UgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh bmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9zaXpl KSB7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0MSA9IF9fZmlyc3Q7CiAgICAgICAgX1Bv aW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7CiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9f bGFzdCA7ICsrX19maXJzdCkKICAgICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAg ICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsKICAgICAgICAgICAgKytfX3Jlc3VsdDE7CiAg ICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgKl9fcmVzdWx0MiA9ICpfX2Zp cnN0OwogICAgICAgICAgICArK19fcmVzdWx0MjsKICAgICAgICAgIH0KICAgICAgICBjb3B5KF9f YnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0MTsK ICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2Zp cnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICAgICAgX0Zvcndh cmRJdGVyIF9fYmVnaW4gPSBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19t aWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7 CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZl KCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZl ciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2Vu ZCk7CiAgICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0YW5jZShfX21pZGRsZSwgX19lbmQpKTsK ICAgICAgICByZXR1cm4gX19iZWdpbjsKICAgICAgfQogICAgfQojIDE4NDggIi91c3IvaW5jbHVk ZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBzdGFibGVf cGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoK ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAg ICBlbHNlCiAgICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0 YW5jZVR5cGU7CgogICAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1ZhbHVl VHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBpZiAoX19idWYuc2l6ZSgpID4g MCkKICAgICAgICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJzdCwg X19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNpemUo KSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFydGl0 aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSkpOwog ICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs IHR5cGVuYW1lIF9UcD4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0 aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90KQogICAgewogICAgICB3aGls ZSAodHJ1ZSkgewogICAgICAgIHdoaWxlICgqX19maXJzdCA8IF9fcGl2b3QpCiAgICAgICAgICAr K19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9fcGl2b3QgPCAqX19s YXN0KQogICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkp CiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19s YXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFy ZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg IHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkp CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9f Y29tcChfX3Bpdm90LCAqX19sYXN0KSkKICAgICAgICAgIC0tX19sYXN0OwogICAgICAgIGlmICgh KF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgaXRl cl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9 CiMgMTkyOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICBlbnVt IHsgX01fdGhyZXNob2xkID0gMTYgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX191bmd1YXJkZWRfbGluZWFy X2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkKICAgIHsKICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAg d2hpbGUgKF9fdmFsIDwgKl9fbmV4dCkgewogICAgICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAg ICAgIF9fbGFzdCA9IF9fbmV4dDsKICAgICAgICAtLV9fbmV4dDsKICAgICAgfQogICAgICAqX19s YXN0ID0gX192YWw7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3Vu Z3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFs LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9 IF9fbGFzdDsKICAgICAgLS1fX25leHQ7CiAgICAgIHdoaWxlIChfX2NvbXAoX192YWwsICpfX25l eHQpKSB7CiAgICAgICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0 OwogICAgICAgIC0tX19uZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0K CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAg IF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsK CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBf X2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S YW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9f dmFsIDwgKl9fZmlyc3QpIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBf X2kgKyAxKTsKICAgICAgICAgICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVs c2UKICAgICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCk7CiAgICAg IH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nl c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp IHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7 IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAg ICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJk KF9fZmlyc3QsIF9faSwgX19pICsgMSk7CiAgICAgICAgICAqX19maXJzdCA9IF9fdmFsOwogICAg ICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9f aSwgX192YWwsIF9fY29tcCk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuZ3VhcmRlZF9pbnNl cnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgZm9yIChfUmFuZG9t QWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBf X3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAgICB9CgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21w YXJlPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl IF9WYWx1ZVR5cGU7CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7 IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQo X19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25f c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qp CiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAg ICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xkKTsKICAg ICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBf X2xhc3QpOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly c3QsIF9fbGFzdCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25f c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg aWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlv bl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fY29tcCk7CiAgICAgICAg X191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9NX3RocmVzaG9sZCwgX19sYXN0 LCBfX2NvbXApOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9f Zmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf U2l6ZT4KICAgIGlubGluZSBfU2l6ZQogICAgX19sZyhfU2l6ZSBfX24pCiAgICB7CiAgICAgIF9T aXplIF9fazsKICAgICAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsK ICAgICAgcmV0dXJuIF9fazsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29w KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl IF9WYWx1ZVR5cGU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9s ZCkgewogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxf c29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAg fQogICAgICAgIC0tX19kZXB0aF9saW1pdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1 dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9f Zmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIF9faW50 cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgX19kZXB0aF9saW1pdCk7CiAgICAgICAgX19sYXN0 ID0gX19jdXQ7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAog ICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj ZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQs IF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICB3 aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlmIChfX2Rl cHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3Qs IF9fbGFzdCwgX19jb21wKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1f X2RlcHRoX2xpbWl0OwogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAg IF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xh c3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLAogICAgICAgICAgIF9fY29tcCk7 CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0LCBf X2NvbXApOwogICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICB9CiMgMjE2NiAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBzb3J0KF9SYW5kb21BY2Nl c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90 eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19maXJzdCAhPSBfX2xh c3QpIHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhfX2xh c3QgLSBfX2ZpcnN0KSAqIDIpOwogICAgICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJz dCwgX19sYXN0KTsKICAgICAgfQogICAgfQojIDIxOTcgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEv Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs IHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXAp CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl c3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYg KF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBf X2xhc3QsIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyLCBfX2NvbXApOwogICAgICAgIF9fZmlu YWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICB9CiAgICB9 CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAog ICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAx NSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBy ZXR1cm47CiAgICAgIH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0 ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9f Zmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBf X2xhc3QpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKICAgIH0KCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBh cmU+CiAgICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAx NSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwog ICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9 IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lucGxhY2Vfc3RhYmxl X3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIF9faW5wbGFjZV9zdGFibGVf c29ydChfX21pZGRsZSwgX19sYXN0LCBfX2NvbXApOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVm ZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFz dCAtIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAg IF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNj ZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIy IF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBf X3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmly c3QgPj0gX190d29fc3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwgX19m aXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9f c3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgICAg IF9fcmVzdWx0KTsKICAgICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KCiAgICAg IF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3Np emUpOwogICAgICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3Qg KyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+ CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5k b21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAgICAg ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX190d29f c3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49 IF9fdHdvX3N0ZXApIHsKICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3Qg KyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBf c2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jl c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19maXJzdCAr PSBfX3R3b19zdGVwOwogICAgICB9CiAgICAgIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShf X2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwoKICAgICAgbWVyZ2UoX19maXJzdCwgX19m aXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9f bGFzdCwKICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgIF9fY29tcCk7CiAgICB9Cgog IGVudW0geyBfTV9jaHVua19zaXplID0gNyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19jaHVua19pbnNl cnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUp CiAgICB7CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewog ICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSk7 CiAgICAgICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgICAgIH0KICAgICAgX19pbnNlcnRp b25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg IHZvaWQKICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBf RGlzdGFuY2UgX19jaHVua19zaXplLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHdoaWxl IChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAgIF9faW5zZXJ0aW9u X3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsKICAgICAgICBf X2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9f Zmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0 X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcikK ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rpc3RhbmNlIF9fbGVu ID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVm ZmVyICsgX19sZW47CgogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXpl OwogICAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3Np emUpOwoKICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgICAgICBfX21lcmdl X3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSk7CiAgICAg ICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwg X19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9zaXpl ICo9IDI7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9f bWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIg X19idWZmZXIsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3Rh bmNlOwoKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX1Bv aW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogICAgICBfRGlzdGFuY2Ug X19zdGVwX3NpemUgPSBfTV9jaHVua19zaXplOwogICAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0 KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CgogICAgICB3aGlsZSAoX19z dGVwX3NpemUgPCBfX2xlbikgewogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9f bGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9zaXpl ICo9IDI7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3Qs IF9fZmlyc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7 CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5 cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX3N0YWJs ZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIs IF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBfRGlzdGFuY2UgX19sZW4gPSAo X19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRk bGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsK ICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZl ciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRs ZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgIH0KICAgICAgZWxzZSB7 CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1 ZmZlcik7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3Qs IF9fYnVmZmVyKTsKICAgICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAg ICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZl cl9zaXplKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5 cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsCiAgICAgICAgICAgdHlwZW5hbWUg X0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nl c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAog ICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9E aXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogICAgICBfUmFuZG9t QWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAgICAgaWYgKF9fbGVuID4g X19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwg X19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb21wKTsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxl LCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb21wKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX21lcmdlX3Nv cnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2NvbXApOwogICAg ICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwg X19jb21wKTsKICAgICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxl LCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAg ICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9z aXplLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CiMgMjQzMCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBzdGFibGVfc29ydChfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs dWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAg ICAgCgogICAgIAoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9W YWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoYnVmLmJlZ2luKCkgPT0g MCkKICAgICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAg ZWxzZQogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYu YmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSk7CiAgICB9CiMgMjQ2NiAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAg c3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg X19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46 OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKCiAgICAgIF9U ZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYoX19maXJz dCwgX19sYXN0KTsKICAgICAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19pbnBsYWNl X3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgZWxzZQogICAgICAg IF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwgX0Rp c3RhbmNlVHlwZShidWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29tcCk7CiAgICB9CiMgMjUwMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAg IHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAg ICAgCgogICAgICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICBmb3IgKF9SYW5k b21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgICAg IGlmICgqX19pIDwgKl9fZmlyc3QpCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2ksIF9WYWx1ZVR5cGUoKl9faSkpOwogICAgICBzb3J0X2hlYXAoX19maXJzdCwgX19t aWRkbGUpOwogICAgfQojIDI1NDAgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxn by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgdm9pZAogICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9Db21w YXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAg CgoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogICAgICBmb3Ig KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQog ICAgICAgIGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3QpKQogICAgICAgICAgX19wb3BfaGVhcChf X2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgICBz b3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICB9CiMgMjU3OSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIF9SYW5kb21BY2Nlc3NJ dGVyCiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRf Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9s YXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ dGVyPjo6dmFsdWVfdHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFs dWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj ZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAg ICAgCiAgICAgCgogICAgICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0 dXJuIF9fcmVzdWx0X2xhc3Q7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxf bGFzdCA9IF9fcmVzdWx0X2ZpcnN0OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBf X3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3VsdF9y ZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICAg ICArK19fZmlyc3Q7CiAgICAgIH0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jl c3VsdF9yZWFsX2xhc3QpOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAg ICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1bHRfZmlyc3QpCiAgICAgICAgICBfX2FkanVzdF9oZWFw KF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICAgICAg ICBfRGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAg ICAgICAgICAgICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSk7CiAgICAgICAg KytfX2ZpcnN0OwogICAgICB9CiAgICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1 bHRfcmVhbF9sYXN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAgIH0KIyAy NjMzICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRfY29weShf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAg X0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlw ZSBfT3V0cHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAg ICAgCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVz dWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0OwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBf X3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICAgICAgd2hpbGUoX19maXJzdCAh PSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICAg ICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdF9yZWFs X2xhc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAgIG1ha2VfaGVhcChfX3Jlc3Vs dF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogICAgICB3aGlsZSAoX19maXJz dCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmly c3QpKQogICAgICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlVHlw ZSgwKSwKICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFs X2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dFZh bHVlVHlwZSgqX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAg ICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19y ZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0 OwogICAgfQojIDI2ODYgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBudGhf ZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh c3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B Y2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICB3 aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf X2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmly c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq KF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIGlm IChfX2N1dCA8PSBfX250aCkKICAgICAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNl CiAgICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0 KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CiMgMjcyOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9i aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg dHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAg ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBl OwoKCiAgICAgCiAgICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7CiAg ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFy dGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf VmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihf X2xhc3QgLSAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29tcCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7 CiAgICAgICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAgX19maXJzdCA9IF9fY3V0Owog ICAgICAgIGVsc2UKICAgICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9faW5z ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQojIDI3NjggIi91c3Iv aW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGxvd2VyX2Jv dW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAm IF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y d2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VU eXBlOwoKCgoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9 IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwog ICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAg ICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAg ICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwg X192YWwpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJz dDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAg ICBlbHNlCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgfQogICAgICByZXR1cm4gX19m aXJzdDsKICAgIH0KIyAyODE2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBl bmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBjb25zdCBf VHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVy ZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5 cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBl IF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVu ID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBf X2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9f Y29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwog ICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7 CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICB9 CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI4NTYgIi91c3IvaW5jbHVkZS9jKysvMy4y LjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0 eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1 ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCgogICAgIAog ICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3Qs IF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIg X19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19s ZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21p ZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgICAgICBf X2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRs ZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYg LSAxOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyOTAx ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg IF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFy ZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G b3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5j ZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5j ZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0Zv cndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9f aGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFk dmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlk ZGxlKSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAg X19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4g PSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBfX2Zp cnN0OwogICAgfQojIDI5NDggIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBw YWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1YWxfcmFuZ2UoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZh bHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAgICAg CiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJz dCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRl ciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewog ICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0Owog ICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8 IF9fdmFsKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmly c3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAg ICAgZWxzZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsK ICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9f bWlkZGxlLCBfX3ZhbCk7CiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAg ICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCk7CiAg ICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBf X3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVy LCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwogICAgfQojIDMwMDMgIi91c3IvaW5j bHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgcGFpcjxfRm9y d2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KICAgIGVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAg ICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlw ZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBl IF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBf X2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAg ICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAg ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7 CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICAgICAgX19maXJz dCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xl biAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwg Kl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAg ICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsLCBfX2Nv bXApOwogICAgICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgICAgICAgICBfX3JpZ2h0 ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwsIF9fY29tcCk7CiAgICAg ICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3Jp Z2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBf Rm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwogICAgfQojIDMwNTIgIi91c3IvaW5jbHVk ZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBib29sCiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBjb25z dCBfVHAmIF9fdmFsKQogICAgewoKCiAgICAgCiAgICAgCgogICAgIAoKICAgICAgX0ZvcndhcmRJ dGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogICAgICByZXR1 cm4gX19pICE9IF9fbGFzdCAmJiAhKF9fdmFsIDwgKl9faSk7CiAgICB9CiMgMzA4MyAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAg ICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAg ICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJf Ym91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9faSAh PSBfX2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9faSk7CiAgICB9CiMgMzExNSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAg X091dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf X2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz dDIsCiAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAg ICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg X19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEp IHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7 CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx OwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAg ICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg X19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KIyAzMTY2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBl bmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5h bWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJz dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29t cGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgog ICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7 CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgICAgICpf X3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAg ICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytf X2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1 cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1 bHQpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIs IHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIo X0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh bmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikKICAgIHsKICAgICAgaWYgKF9fbGVuMSA9PSAw IHx8IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKF9fbGVuMSArIF9fbGVu MiA9PSAyKSB7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0KQogICAgICAgICAgICAg IGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9CaWRp cmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNlIF9f bGVuMTEgPSAwOwogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xlbjEg PiBfX2xlbjIpIHsKICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZhbmNl KF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3Vu ZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgIF9fbGVuMjIgPSBkaXN0 YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAg ICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19s ZW4yMik7CiAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRs ZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9f Zmlyc3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBf X3NlY29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0gX19m aXJzdF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBkaXN0YW5jZShfX21pZGRsZSwg X19zZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19m aXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xl bjExLCBfX2xlbjIyKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUs IF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu MSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBf Q29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9u YWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwg X0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19j b21wKQogICAgewogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICAgICAg cmV0dXJuOwogICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgICAgICBpZiAoX19j b21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0 LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Nl Y29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICBf RGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAg ICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xl bjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0 LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlk ZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbGVuMjIg PSBfX2xlbjIgLyAyOwogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAg ICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNv bmRfY3V0LCBfX2NvbXApOwogICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2Zp cnN0X2N1dCk7CiAgICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19z ZWNvbmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9IF9fZmly c3RfY3V0OwogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFuY2UoX19taWRkbGUsIF9f c2Vjb25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmly c3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4x MSwgX19sZW4yMiwgX19jb21wKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19t aWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29tcCk7CiAgICB9CgoKCgoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIxCiAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbWlkZGxl LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAg ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwKICAgICAgICAg ICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMiAmJiBf X2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19t aWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwg X19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVy X2VuZCwgX19maXJzdCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19sZW4xIDw9IF9fYnVmZmVy X3NpemUpIHsKICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBf X2J1ZmZlcik7CiAgICAgICAgY29weShfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgICAg ICByZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwog ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19s YXN0KTsKICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3Qp KTsKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl cjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMz4KICAgIF9CaWRpcmVj dGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2Zp cnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIs CiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQpCiAgICB7 CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3 YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBf X2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBf X3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3aGlsZSAo dHJ1ZSkgewogICAgICAgIGlmICgqX19sYXN0MiA8ICpfX2xhc3QxKSB7CiAgICAgICAgICAqLS1f X3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAg ICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVz dWx0KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAg ICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYgKF9fZmlyc3QyID09IF9f bGFzdDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFz dDEsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsKICAgICAgICB9CiAgICAgIH0KICAg IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFt ZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFs SXRlcjMsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMwogICAgX19t ZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25h bEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIg X19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg ICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgX0Nv bXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAg ICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogICAg ICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChf X2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICAgIC0tX19s YXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2xhc3QyLCAq X19sYXN0MSkpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgICAgICBp ZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQo X19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3QxOwogICAg ICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAg ICAgICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIGNvcHlf YmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xh c3QyOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9C aWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRlcj4K ICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs CiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAg ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAg ICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewog ICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUp IHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21p ZGRsZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5k LCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2Ug aWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVm ZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgICAgICBf X21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5k LCBfX2xhc3QpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rpc3RhbmNl IF9fbGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgICAg ICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IF9f bGVuMSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEp OwogICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwg X19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gZGlzdGFu Y2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxz ZSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgICAgICAg ICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgICAgICAgICAgIF9f Zmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQp OwogICAgICAgICAgICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9j dXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19t aWRkbGUgPQogICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwg X19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2Fk YXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUp OwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0 LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgfQog ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5h bWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29t cGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9f Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwK ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAg ICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAog ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgICAgICBpZiAo X19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAg ICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZl cik7CiAgICAgICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBf X2xhc3QsIF9fZmlyc3QsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChf X2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9l bmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICAgICAgX19tZXJn ZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAp OwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl ciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEg PSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgICAgICAgIGlmIChf X2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7 CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAg ICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAq X19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBkaXN0YW5j ZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNl IHsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgICAgICAg ICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICAgICAgICAgICAgX19m aXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwg X19jb21wKTsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9f Zmlyc3RfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19uZXdfbWlkZGxlID0KICAgICAgICAgICAgICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJz dF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMjIsIF9fYnVmZmVyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAgX19t ZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjEx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZl cl9zaXplLCBfX2NvbXApOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRs ZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUs IF9fY29tcCk7CiAgICAgICAgICB9CiAgICB9CiMgMzUwOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0 ZXI+CiAgICB2b2lkCiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0 LAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAg ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUK ICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3Rh bmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8 IF9fbWlkZGxlID09IF9fbGFzdCkKICAgICAgICByZXR1cm47CgogICAgICBfRGlzdGFuY2VUeXBl IF9fbGVuMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3RhbmNlVHlw ZSBfX2xlbjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKCiAgICAgIF9UZW1wb3Jhcnlf YnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwgX19s YXN0KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX21lcmdlX3dpdGhv dXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICAg ICAgZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFz dCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigp LCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSkpOwogICAgfQojIDM1NTkgIi91c3IvaW5jbHVk ZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIGlucGxhY2VfbWVy Z2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1 ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAg IF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19t aWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAgIF9EaXN0 YW5jZVR5cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwogICAgICBfRGlz dGFuY2VUeXBlIF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoKICAgICAgX1Rl bXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2Zp cnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9fbWVy Z2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xl bjIsIF9fY29tcCk7CiAgICAgIGVsc2UKICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3Qs IF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAg ICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLAogICAgICAgICAg ICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBpbmNsdWRlcyhf SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9J bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAg ICAKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f Zmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAg ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlmKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0 MikKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQogICAgICAgICAgKytfX2ZpcnN0 MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5 cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJz dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0 MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAg ICAKICAgICAKCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBf X2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJz dDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UgaWYoX19jb21wKCpfX2Zp cnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQogICAg ICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBf X2xhc3QyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUg X0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNl dF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAg ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgog ICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz dDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAg ICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAg ICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAg Kl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAg ICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICAr K19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgKytfX3Jl c3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShf X2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwK ICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfdW5p b24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAg ICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0 MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAg ICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0 MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAg ICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1 bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0 MjsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29w eShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0 ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50ZXJz ZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwK ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAog ICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2Zp cnN0MikKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwg Kl9fZmlyc3QxKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAgICAgICAg ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICAr K19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBf X3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l IF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBf Q29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIx IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfSW5w dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAg ICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEs ICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UgaWYgKF9fY29t cCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVs c2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0 MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0K ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091 dHB1dEl0ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J bnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs dCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUg KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAo Kl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7 CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAg ICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgKytfX2ZpcnN0 MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmly c3QyOwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVz dWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9J bnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29t cGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2Zp cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAg CgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f Zmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0 MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJz dDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2Nv bXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBl bHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAg IH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0 eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfc3ltbWV0cmljX2Rp ZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxl IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYg KCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx OwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQog ICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVz dWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1 bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg ICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19s YXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBf T3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVy CiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1 dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIg X19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv bXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoK ICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikK ICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAgKl9f cmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19y ZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2Zp cnN0MSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19m aXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAg ICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAg cmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9f cmVzdWx0KSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAg IF9Gb3J3YXJkSXRlcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09 IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9f Zmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgqX19y ZXN1bHQgPCAqX19maXJzdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0 dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5 cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVudChfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9Db21w YXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9f bGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmly c3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmIChfX2NvbXAo Kl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9f cmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9y d2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0 ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xh c3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0 OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoKl9fZmlyc3Qg PCAqX19yZXN1bHQpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBf X3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVy IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfQ29tcGFyZSBf X2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp IHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0Owog ICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19jb21wKCpfX2Zp cnN0LCAqX19yZXN1bHQpKQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1 cm4gX19yZXN1bHQ7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFs SXRlcj4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9f Zmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAg ICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9f aSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAg ICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f aWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpfX2kgPCAqX19paSkgewogICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICgh KCpfX2kgPCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9faSwg X19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB0 cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAgIHJl dmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9 CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0 eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0 aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlm IChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBf X2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0t X19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBf X2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgqX19pLCAqX19paSkpIHsKICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAo IV9fY29tcCgqX19pLCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2Fw KF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJl dHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAg ICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg ICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJ dGVyPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19m aXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAg ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19p ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAg ICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19p aSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faWkgPCAqX19pKSB7CiAgICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCEo Ki0tX19qIDwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBf X2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRy dWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2 ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0K ICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5 cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rp b25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYg KF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9f bGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1f X2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9f aTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2lpLCAqX19pKSkgewogICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICgh X19jb21wKCotLV9faiwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAo X19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0 dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAg ICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg ICAgIH0KICAgICAgfQogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5 cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9JbnB1dEl0ZXIKICAgIGZpbmRfZmlyc3Rfb2YoX0lu cHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBf Rm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyKQogICAgewoKICAgICAK ICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmly c3QxKQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIg IT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIp CiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg dHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9JbnB1dEl0ZXIKICAgIGZpbmRfZmlyc3Rf b2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAg ICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAg ICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAg ICAgCgoKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmly c3QxKQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIg IT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9f aXRlcikpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJuIF9fbGFzdDE7 CiAgICB9CiMgNDIwMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIy PgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3Qx LCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19m aXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVy YXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoX19maXJzdDIg PT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAg X0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEpIHsKICAg ICAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2VhcmNoKF9f Zmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgICAgICBpZiAoX19uZXdf cmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICAg IGVsc2UgewogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAg X19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg ICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFy eVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVy MSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfRm9yd2Fy ZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGZv cndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAg X0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xh c3QyKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2Fy ZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAg X0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2goX19maXJzdDEs IF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAgICAgICAgaWYgKF9fbmV3 X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgICAg ICBlbHNlIHsKICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAg IF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmlyc3QxOwogICAgICAg ICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIF9CaWRpcmVj dGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwg X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg ICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh ZykKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0Jp ZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0 b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIxIF9fcmxh c3QxKF9fZmlyc3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICAgICAg X1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3Qx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwg X19ybGFzdDIpOwoKICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgICAgICByZXR1 cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jl c3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3Rh bmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1l IF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0 ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJ dGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFz dDIsCiAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlv bmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXAp CiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRp cmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y PF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJdGVyMSBfX3JsYXN0 MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgICAgIF9S ZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9f cmxhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CgogICAg ICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAg ICBlbHNlIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0 LmJhc2UoKTsKICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9f bGFzdDIpKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAg aW5saW5lIF9Gb3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEs IF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJz dDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAg ICAgIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0 MiwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSks CiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpKTsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0Zvcndh cmRJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5l IF9Gb3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3 YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9G b3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21w KQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgcmV0dXJuIF9fZmluZF9lbmQoX19m aXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAg ICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICAgICAg X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MiksCiAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29tcCk7CiAgICB9Cgp9CiMgNzAgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYWxnb3JpdGhtIiAy IDMKIyA1NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9zdHJpbmciIDIgMwojIDEgIi91c3IvaW5j bHVkZS9jKysvMy4yLjEvYml0cy9iYXNpY19zdHJpbmcudGNjIiAxIDMKIyA0NSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIuMS9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIF9SZXA6Ol9TX21heF9zaXplID0gKCgobnBvcyAtIHNpemVvZihfUmVwKSkvc2l6ZW9m KF9DaGFyVCkpIC0gMSkgLyA0OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IF9DaGFyVAogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVwOjpfU190ZXJtaW5hbCA9IF9D aGFyVCgpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6bnBvczsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6X1NfZW1wdHlfcmVwX3N0b3JhZ2VbCiAgICAoc2l6ZW9mKF9SZXAp ICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5 cGUpXTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcj4KICAgICAgX0No YXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAg X1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYg X19hLAogICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAg ICAgaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVy biBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgogICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBd OwogICAgICAgIHNpemVfdHlwZSBfX2kgPSAwOwogICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2Vu ZCAmJiBfX2kgPCBzaXplb2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICB7CiAg ICAgICAgICAgIF9fYnVmW19faSsrXSA9ICpfX2JlZzsKICAgICAgICAgICAgKytfX2JlZzsKICAg ICAgICAgIH0KICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19pLCBfX2EpOwog ICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsK ICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9faTsKICAgICAgICB0cnkKICAgICAgICAgIHsKCgoK ICAgICAgICAgICAgZm9yICg7OykKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfQ2hh clQqIF9fcCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9sZW5ndGg7CiAgICAgICAgICAg ICAgICBfQ2hhclQqIF9fbGFzdCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0 eTsKICAgICAgICAgICAgICAgIGZvciAoOzspCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19wIC0gX19yLT5fTV9yZWZk YXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICpfX3AgPSBfUmVwOjpfU190ZXJtaW5hbDsK ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChfX3AgPT0gX19sYXN0KQog ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgKl9fcCsrID0g Kl9fYmVnOwogICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIH0K CiAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEo KTsKICAgICAgICAgICAgICAgIF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xl biArIDEsIF9fYSk7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX2Fub3RoZXIt Pl9NX3JlZmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01f cmVmZGF0YSgpLCBfX2xlbik7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsK ICAgICAgICAgICAgICAgIF9fciA9IF9fYW5vdGhlcjsKICAgICAgICAgICAgICAgIF9fci0+X01f bGVuZ3RoID0gX19sZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIGNhdGNo KC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAg ICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5J dGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAg ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9f ZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7Cgog ICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICBy ZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgICAgaWYgKF9fYnVpbHRp bl9leHBlY3QoX19iZWcgPT0gX0luSXRlcigpLCAwKSkKICAgICAgICAgIF9fdGhyb3dfbG9naWNf ZXJyb3IoImF0dGVtcHQgdG8gY3JlYXRlIHN0cmluZyB3aXRoIG51bGwgcG9pbnRlciIpOwoKCiAg ICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fZG5ldywgX19hKTsKICAgICAgICB0 cnkKICAgICAgICAgIHsgX1NfY29weV9jaGFycyhfX3ItPl9NX3JlZmRhdGEoKSwgX19iZWcsIF9f ZW5kKTsgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5f TV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIF9f ci0+X01fbGVuZ3RoID0gX19kbmV3OwoKICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX2RuZXdd ID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwog ICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6CiAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywg Y29uc3QgX0FsbG9jJiBfX2EpCiAgICB7CiAgICAgIGlmIChfX24gPT0gMCAmJiBfX2EgPT0gX0Fs bG9jKCkpCiAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAg ICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uLCBfX2EpOwogICAgICB0cnkKICAgICAg ICB7CiAgICAgICAgICBpZiAoX19uKQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9f ci0+X01fcmVmZGF0YSgpLCBfX24sIF9fYyk7CiAgICAgICAgfQogICAgICBjYXRjaCguLi4pCiAg ICAgICAgewogICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICB0aHJvdzsK ICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX19uOwogICAgICBfX3ItPl9NX3JlZmRh dGEoKVtfX25dID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRh dGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgOiBf TV9kYXRhcGx1cyhfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfQWxsb2MoKSwgX19zdHIuZ2V0X2Fs bG9jYXRvcigpKSwKICAgICAgICAgICAgICAgICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpCiAgICB7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg IGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29u c3RydWN0KHNpemVfdHlwZSgpLCBfQ2hhclQoKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJp bmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg X19uKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3Mp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19u KSwgX0FsbG9jKCkpLCBfQWxsb2MoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0 cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICBzaXplX3R5cGUg X19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9f c3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3Ry Ll9NX2ZvbGQoX19wb3MsIF9fbiksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0 IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01f ZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19zICsgX19uLCBfX2EpLCBfX2EpCiAgICB7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJh c2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9N X2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyA/IF9fcyArIHRyYWl0c190eXBlOjpsZW5n dGgoX19zKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MgKyBucG9zLCBfX2Ep LCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25z dCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fbiwgX19jLCBf X2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy PgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19z dHJpbmcoX0lucHV0SXRlciBfX2JlZywgX0lucHV0SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBf X2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9f YSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojphc3NpZ24oY29u c3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpICE9IF9fc3Ry Ll9NX3JlcCgpKQogICAgICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSB0aGlz LT5nZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX19zdHIuX01fcmVw KCktPl9NX2dyYWIoX19hLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgX01fcmVw KCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0K ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX01fZGVzdHJveShjb25zdCBf QWxsb2MmIF9fYSkgdGhyb3cgKCkKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHNpemVv ZihfUmVwKSArIChfTV9jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SYXdf Ynl0ZXNfYWxsb2MoX19hKS5kZWFsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMp LCBfX3NpemUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46Ol9NX2xlYWtfaGFyZCgpCiAgICB7CiAgICAgIGlmIChfTV9yZXAo KS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgX01fbXV0YXRlKDAsIDAsIDApOwogICAgICBfTV9y ZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX01fbXV0YXRlKHNpemVf dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMikKICAgIHsKICAg ICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGNvbnN0IHNpemVf dHlwZSBfX25ld19zaXplID0gX19vbGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVuMTsKICAgICAgY29u c3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4xOwogICAgICBjb25z dCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xkX3NpemUgLSBfX3BvcyAtIF9fbGVuMTsKCiAg ICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5 KCkpCiAgICAgICAgewoKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0 b3IoKTsKCgogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0MDk2OwogICAg ICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAo dm9pZCopOwoKICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNpdHkgPSAoX19w YWdlc2l6ZSAtIF9fbWFsbG9jX2hlYWRlcl9zaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFyVCkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7 CiAgICAgICAgICBfUmVwKiBfX3I7CiAgICAgICAgICBpZiAoX19uZXdfc2l6ZSA+IGNhcGFjaXR5 KCkgJiYgX19uZXdfc2l6ZSA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAgICAgIF9fciA9IF9S ZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplID4gMipjYXBhY2l0eSgpID8KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbmV3X3NpemUgOiAyKmNhcGFjaXR5KCksIF9fYSk7CiAgICAg ICAgICBlbHNlCiAgICAgICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplLCBf X2EpOwogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19wb3Mp CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01f ZGF0YSgpLCBfX3Bvcyk7CiAgICAgICAgICAgICAgaWYgKF9faG93X211Y2gpCiAgICAgICAgICAg ICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSArIF9fcG9zICsgX19sZW4y LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zcmMsIF9faG93X211Y2gpOwog ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBfX3ItPl9NX2Rpc3Bvc2UoZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICAgICB0aHJv dzsKICAgICAgICAgICAgfQogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAg ICAgICAgIF9NX2RhdGEoX19yLT5fTV9yZWZkYXRhKCkpOwogICAgICB9CiAgICAgIGVsc2UgaWYg KF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVuMikKICAgICAgICB7CgogICAgICAgICAgdHJh aXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hvd19t dWNoKTsKICAgICAgICB9CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAg X01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbmV3X3NpemU7CiAgICAgIF9NX2RhdGEoKVtfX25ld19z aXplXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwoKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNlcnZlKHNpemVfdHlwZSBfX3Jl cykKICAgIHsKICAgICAgaWYgKF9fcmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+ X01faXNfc2hhcmVkKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fcmVzID4gdGhpcy0+bWF4 X3NpemUoKSkKICAgICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6 cmVzZXJ2ZSIpOwoKICAgICAgICAgIGlmIChfX3JlcyA8IHRoaXMtPnNpemUoKSkKICAgICAgICAg ICAgX19yZXMgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBn ZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01fcmVwKCktPl9NX2Ns b25lKF9fYSwgX19yZXMgLSB0aGlzLT5zaXplKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rp c3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICB2b2lkIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnN3YXAo YmFzaWNfc3RyaW5nJiBfX3MpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfbGVha2Vk KCkpCiAgICAgICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAoX19zLl9N X3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBfX3MuX01fcmVwKCktPl9NX3NldF9zaGFy YWJsZSgpOwogICAgICBpZiAodGhpcy0+Z2V0X2FsbG9jYXRvcigpID09IF9fcy5nZXRfYWxsb2Nh dG9yKCkpCiAgICAgICAgewogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX2RhdGEoKTsKICAg ICAgICAgIF9NX2RhdGEoX19zLl9NX2RhdGEoKSk7CiAgICAgICAgICBfX3MuX01fZGF0YShfX3Rt cCk7CiAgICAgICAgfQoKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGJhc2ljX3N0cmlu ZyBfX3RtcDEoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19zLmdldF9hbGxvY2F0b3IoKSk7CiAg ICAgICAgICBiYXNpY19zdHJpbmcgX190bXAyKF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQo KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsK ICAgICAgICAgICp0aGlzID0gX190bXAyOwogICAgICAgICAgX19zID0gX190bXAxOwogICAgICAg IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjpfUmVwKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6X1JlcDo6CiAgICBfU19jcmVhdGUoc2l6ZV90IF9fY2FwYWNpdHksIGNvbnN0IF9BbGxvYyYg X19hbGxvYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CgoKICAgICAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhf c2l6ZSkKCgoKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfU19j cmVhdGUiKTsKCgoKCiAgICAgIHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6 ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiMgNDIxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMwogICAgICBjb25zdCBzaXplX3QgX19wYWdlc2l6ZSA9 IDQwOTY7CiAgICAgIGNvbnN0IHNpemVfdCBfX3N1YnBhZ2VzaXplID0gMTI4OwogICAgICBjb25z dCBzaXplX3QgX19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CiAgICAg IGlmICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpID4gX19wYWdlc2l6ZSkKICAgICAg ICB7CiAgICAgICAgICBzaXplX3QgX19leHRyYSA9CiAgICAgICAgICAgIChfX3BhZ2VzaXplIC0g KChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgJSBfX3BhZ2VzaXplKSkKICAgICAgICAg ICAgJSBfX3BhZ2VzaXplOwogICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4dHJhIC8gc2l6ZW9m KF9DaGFyVCk7CiAgICAgICAgICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9D aGFyVCkgKyBzaXplb2YoX1JlcCk7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX3NpemUgPiBf X3N1YnBhZ2VzaXplKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2V4dHJhID0KICAgICAg ICAgICAgKF9fc3VicGFnZXNpemUgLSAoKF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplKSAl IF9fc3VicGFnZXNpemUpKQogICAgICAgICAgICAlIF9fc3VicGFnZXNpemU7CiAgICAgICAgICBf X2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBzaXplb2YoX0NoYXJUKTsKICAgICAgICAgIF9fc2l6ZSA9 IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKICAgICAg ICB9CgoKCiAgICAgIHZvaWQqIF9fcGxhY2UgPSBfUmF3X2J5dGVzX2FsbG9jKF9fYWxsb2MpLmFs bG9jYXRlKF9fc2l6ZSk7CiAgICAgIF9SZXAgKl9fcCA9IG5ldyAoX19wbGFjZSkgX1JlcDsKICAg ICAgX19wLT5fTV9jYXBhY2l0eSA9IF9fY2FwYWNpdHk7CiAgICAgIF9fcC0+X01fc2V0X3NoYXJh YmxlKCk7CiAgICAgIF9fcC0+X01fbGVuZ3RoID0gMDsKICAgICAgcmV0dXJuIF9fcDsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBfQ2hhclQqCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjpfUmVwOjoKICAgIF9NX2Nsb25lKGNvbnN0IF9BbGxvYyYgX19hbGxvYywgc2l6ZV90eXBl IF9fcmVzKQogICAgewoKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcmVxdWVzdGVkX2NhcCA9IF9N X2xlbmd0aCArIF9fcmVzOwoKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0MDk2 OwogICAgICBjb25zdCBzaXplX3R5cGUgX19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICogc2l6ZW9m ICh2b2lkKik7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlX2NhcGFjaXR5ID0KICAgICAg ICAoX19wYWdlc2l6ZSAtIF9fbWFsbG9jX2hlYWRlcl9zaXplIC0gc2l6ZW9mKF9SZXApIC0gc2l6 ZW9mKF9DaGFyVCkpCiAgICAgICAgLyBzaXplb2YoX0NoYXJUKTsKICAgICAgX1JlcCogX19yOwog ICAgICBpZiAoX19yZXF1ZXN0ZWRfY2FwID4gX01fY2FwYWNpdHkgJiYgX19yZXF1ZXN0ZWRfY2Fw ID4gX19wYWdlX2NhcGFjaXR5KQoKICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19yZXF1 ZXN0ZWRfY2FwID4gMipfTV9jYXBhY2l0eSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fcmVxdWVzdGVkX2NhcCA6IDIqX01fY2FwYWNpdHksIF9fYWxsb2MpOwogICAgICBlbHNlCiAg ICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCwgX19hbGxvYyk7Cgog ICAgICBpZiAoX01fbGVuZ3RoKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7 IHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfTV9yZWZkYXRhKCksIF9NX2xl bmd0aCk7IH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgewogICAgICAgICAgICAg IF9fci0+X01fZGVzdHJveShfX2FsbG9jKTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg ICAgfQogICAgICAgIH0KICAgICAgX19yLT5fTV9sZW5ndGggPSBfTV9sZW5ndGg7CiAgICAgIHJl dHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNpemUoc2l6ZV90eXBlIF9fbiwgX0No YXJUIF9fYykKICAgIHsKICAgICAgaWYgKF9fbiA+IG1heF9zaXplKCkpCiAgICAgICAgX190aHJv d19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzaXplIik7CiAgICAgIHNpemVfdHlwZSBf X3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgPCBfX24pCiAgICAgICAgdGhp cy0+YXBwZW5kKF9fbiAtIF9fc2l6ZSwgX19jKTsKICAgICAgZWxzZSBpZiAoX19uIDwgX19zaXpl KQogICAgICAgIHRoaXMtPmVyYXNlKF9fbik7CgogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog ICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXIg X19rMSwKICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fazIsIGlucHV0X2l0ZXJhdG9yX3Rh ZykKICAgICAgewoKICAgICAgICBiYXNpY19zdHJpbmcgX19zKF9fazEsIF9fazIpOwogICAgICAg IHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX19pMSwgX19pMiwgX19zLl9NX2liZWdpbigpLCBfX3Mu X01faWVuZCgpKTsKICAgICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3 YXJkSXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAg ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3JlcGxh Y2Vfc2FmZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfRm9yd2FyZEl0ZXIgX19rMSwK ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2syKQogICAgICB7CiAgICAgICAg c2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19rMSwg X19rMikpOwogICAgICAgIHNpemVfdHlwZSBfX2RvbGQgPSBfX2kyIC0gX19pMTsKICAgICAgICBz aXplX3R5cGUgX19kbWF4ID0gdGhpcy0+bWF4X3NpemUoKTsKCiAgICAgICAgaWYgKF9fZG1heCA8 PSBfX2RuZXcpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpf TV9yZXBsYWNlIik7CiAgICAgICAgc2l6ZV90eXBlIF9fb2ZmID0gX19pMSAtIF9NX2liZWdpbigp OwogICAgICAgIF9NX211dGF0ZShfX29mZiwgX19kb2xkLCBfX2RuZXcpOwoKCiAgICAgICAgaWYg KF9fZG5ldykKICAgICAgICAgIF9TX2NvcHlfY2hhcnMoX01fZGF0YSgpICsgX19vZmYsIF9fazEs IF9fazIpOwoKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6CiAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlw ZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICBzaXplX3R5cGUg X19wb3MyLCBzaXplX3R5cGUgX19uMikKICAgIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ry c2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMiA+IF9fc3Ryc2l6ZSkKICAgICAg ICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIGNv bnN0IGJvb2wgX190ZXN0bjIgPSBfX24yIDwgX19zdHJzaXplIC0gX19wb3MyOwogICAgICBjb25z dCBzaXplX3R5cGUgX19mb2xkbjIgPSBfX3Rlc3RuMiA/IF9fbjIgOiBfX3N0cnNpemUgLSBfX3Bv czI7CiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zMSwgX19uMSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19zdHIuX01fZGF0YSgpICsgX19wb3MyLCBfX2ZvbGRuMik7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IGJh c2ljX3N0cmluZyYgX19zdHIpCiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBfX3N0 ci5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc2l6ZSArIHRoaXMtPnNpemUoKTsK ICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZl KF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQo KSwgX19zdHIuX01faWJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIu X01faWVuZCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg ICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXpl X3R5cGUgX19uKQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zdHIuc2l6 ZSgpIC0gX19wb3MsIF9fbikgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMt PmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBf TV9yZXBsYWNlX3NhZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2NoZWNrKF9fcG9z KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24p KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQo Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICB7CiAgICAgIHNpemVfdHlwZSBf X2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNp dHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3JlcGxh Y2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zLCBfX3MgKyBfX24pOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChzaXplX3R5cGUgX19u LCBfQ2hhclQgX19jKQogICAgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5z aXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+ cmVzZXJ2ZShfX2xlbik7CiAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9N X2llbmQoKSwgX19uLCBfX2MpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAogICAg ICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f cmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBl OjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX1RyYWl0 czo6bGVuZ3RoKF9fbGhzKTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19zdHIu cmVzZXJ2ZShfX2xlbiArIF9fcmhzLnNpemUoKSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX2xocywg X19saHMgKyBfX2xlbik7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBf X3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3N0 cmluZ190eXBlIF9fc3RyOwogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9fcmhzLnNpemUoKTsK ICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIDEpOwogICAgICBfX3N0ci5hcHBlbmQoX19zaXpl X3R5cGUoMSksIF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJu IF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJl cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9fbjIsIF9DaGFy VCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX24xID0gX19pMiAtIF9faTE7CiAgICAgIHNp emVfdHlwZSBfX29mZjEgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAgIGlmIChtYXhfc2l6ZSgp IC0gKHRoaXMtPnNpemUoKSAtIF9fbjEpIDw9IF9fbjIpCiAgICAgICAgX190aHJvd19sZW5ndGhf ZXJyb3IoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICBfTV9tdXRhdGUgKF9fb2ZmMSwg X19uMSwgX19uMik7CgogICAgICBpZiAoX19uMikKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWdu KF9NX2RhdGEoKSArIF9fb2ZmMSwgX19uMiwgX19jKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 CiAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MpIGNv bnN0CiAgICB7CiAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93 X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb3B5Iik7CgogICAgICBpZiAoX19uID4gdGhp cy0+c2l6ZSgpIC0gX19wb3MpCiAgICAgICAgX19uID0gdGhpcy0+c2l6ZSgpIC0gX19wb3M7Cgog ICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3MsIF9NX2RhdGEoKSArIF9fcG9zLCBfX24pOwoKICAg ICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl ID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGNvbnN0 IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICBmb3IgKDsgX194cG9zICsgX19uIDw9 IF9fc2l6ZTsgKytfX3hwb3MpCiAgICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0 YSArIF9feHBvcywgX19zLCBfX24pID09IDApCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAg ICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3Mp IGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg IHNpemVfdHlwZSBfX3JldCA9IG5wb3M7CiAgICAgIGlmIChfX3BvcyA8IF9fc2l6ZSkKICAgICAg ICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAg IHNpemVfdHlwZSBfX24gPSBfX3NpemUgLSBfX3BvczsKICAgICAgICAgIGNvbnN0IF9DaGFyVCog X19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19kYXRhICsgX19wb3MsIF9fbiwgX19jKTsKICAgICAg ICAgIGlmIChfX3ApCiAgICAgICAgICAgIF9fcmV0ID0gX19wIC0gX19kYXRhOwogICAgICAgIH0K ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBl IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbiA8PSBfX3NpemUpCiAgICAgICAg ewogICAgICAgICAgX19wb3MgPSBzdGQ6Om1pbihfX3NpemUgLSBfX24sIF9fcG9zKTsKICAgICAg ICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICAgICAgZG8KICAgICAg ICAgICAgewogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBf X3BvcywgX19zLCBfX24pID09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAg ICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3Bvcy0tID4gMCk7CiAgICAgICAgfQogICAgICBy ZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46OgogICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBj b25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBp ZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3NpemUgLSAx OwogICAgICAgICAgaWYgKF9feHBvcyA+IF9fcG9zKQogICAgICAgICAgICBfX3hwb3MgPSBfX3Bv czsKCiAgICAgICAgICBmb3IgKCsrX194cG9zOyBfX3hwb3MtLSA+IDA7ICkKICAgICAgICAgICAg aWYgKHRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX194cG9zXSwgX19jKSkKICAgICAgICAgICAg ICByZXR1cm4gX194cG9zOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6 ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZp bmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl IF9fbikgY29uc3QKICAgIHsKICAgICAgZm9yICg7IF9fbiAmJiBfX3BvcyA8IHRoaXMtPnNpemUo KTsgKytfX3BvcykKICAgICAgICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0 c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19wb3NdKTsKICAgICAgICAgIGlmIChf X3ApCiAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9z OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6CiAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv cywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRo aXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pCiAgICAgICAgewogICAgICAgICAg aWYgKC0tX19zaXplID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwogICAgICAg ICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZmluZChf X3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6 ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tICE9IDApOwogICAgICAg IH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9D aGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAg ICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBvcyA8IHRoaXMtPnNp emUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwg X01fZGF0YSgpW19feHBvc10pKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJu IG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBf X3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3Ig KDsgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19feHBvcykKICAgICAgICBpZiAoIXRyYWl0c190 eXBlOjplcShfTV9kYXRhKClbX194cG9zXSwgX19jKSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7 CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFy VCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAg IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUpCiAgICAg ICAgewogICAgICAgICAgaWYgKC0tX19zaXplID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6ZSA9 IF9fcG9zOwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICghdHJh aXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3NpemVdKSkKICAgICAgICAgICAg ICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3NpemUt LSk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFt ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9sYXN0X25vdF9v ZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlw ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUpCiAgICAgICAgewogICAg ICAgICAgaWYgKC0tX19zaXplID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwog ICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6 OmVxKF9NX2RhdGEoKVtfX3NpemVdLCBfX2MpKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6 ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAgICB9CiAg ICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6 ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3QKICAgIHsKICAgICAg c2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fb3NpemUg PSBfX3N0ci5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93 X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUg X19yc2l6ZT0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24pOwogICAgICBzaXplX3R5cGUgX19sZW4g PSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29t cGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zdHIuZGF0YSgpLCBfX2xlbik7CiAgICAgIGlmICgh X19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25z dCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXpl X3R5cGUgX19uMikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNp emUoKTsKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIGlmIChf X3BvczEgPiBfX3NpemUgfHwgX19wb3MyID4gX19vc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9v Zl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19yc2l6 ZSA9IG1pbihfX3NpemUgLSBfX3BvczEsIF9fbjEpOwogICAgICBzaXplX3R5cGUgX19yb3NpemUg PSBtaW4oX19vc2l6ZSAtIF9fcG9zMiwgX19uMik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1p bihfX3JzaXplLCBfX3Jvc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFy ZShfTV9kYXRhKCkgKyBfX3BvczEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3N0ci5kYXRhKCkgKyBfX3BvczIsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAg X19yID0gX19yc2l6ZSAtIF9fcm9zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg Y29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9f c2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlw ZTo6bGVuZ3RoKF9fcyk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3NpemUsIF9fb3Np emUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3Ms IF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19zaXplIC0gX19vc2l6ZTsK ICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmcg PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywg c2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewogICAgICBzaXpl X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAg ICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAg ICAgc2l6ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgIHNp emVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsKICAgICAgc2l6ZV90 eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRz X3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOwogICAgICBpZiAo IV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29u c3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAgewog ICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBf X3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFy ZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBtaW4odHJhaXRzX3R5cGU6Omxlbmd0aChf X3MpLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3Ms IF9fbjEpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAg ICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19z LCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXpl OwogICAgICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFz cyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CiAgICB2b2lkCiAgICBfU19zdHJpbmdfY29weShjb25z dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwKICAgICAgICAg ICAgICAgICAgIF9DaGFyVCogX19idWYsIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIF9fYnVm c2l6KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVf dHlwZTsKICAgICAgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgc2l6 ZV90eXBlIF9fYnl0ZXMgPSBtaW4oX19zdHJzaXplLCBfX2J1ZnNpeiAtIDEpOwogICAgICBfVHJh aXRzOjpjb3B5KF9fYnVmLCBfX3N0ci5kYXRhKCksIF9fYnl0ZXMpOwogICAgICBfX2J1ZltfX2J5 dGVzXSA9IF9DaGFyVCgpOwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNf c3RyaW5nPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYK ICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOwogIGV4dGVybiB0 ZW1wbGF0ZQogICAgYmFzaWNfb3N0cmVhbTxjaGFyPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0 cmVhbTxjaGFyPiYsIGNvbnN0IHN0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNf aXN0cmVhbTxjaGFyPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYs IGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKICAgIGdl dGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOwoKCiAgZXh0ZXJuIHRlbXBsYXRl IGNsYXNzIGJhc2ljX3N0cmluZzx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2lj X2lzdHJlYW08d2NoYXJfdD4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08d2NoYXJfdD4m LCB3c3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+ JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPHdjaGFyX3Q+JiwgY29uc3Qgd3N0cmluZyYp OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIGdldGxp bmUoYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcmLCB3Y2hhcl90KTsKICBleHRlcm4g dGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCiAgICBnZXRsaW5lKGJhc2ljX2lz dHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJik7Cgp9CiMgNTggIi91c3IvaW5jbHVkZS9jKysvMy4y LjEvc3RyaW5nIiAyIDMKIyA1MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZWZ3 ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvZnVuY3RleGNlcHQuaCIg MSAzCiMgMzQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNl IHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAg X190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lk KTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93 X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50 KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBj aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19z KTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2 b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190 aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191 bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19m YWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA1MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9i aXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgY2xhc3MgbG9jYWxlOwoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2Uo X0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg aW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250cmwoX0NoYXJULCBj b25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv b2wKICAgIGlzdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzbG93ZXIoX0NoYXJULCBjb25zdCBsb2Nh bGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlz YWxwaGEoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgaW5saW5lIGJvb2wKICAgIGlzZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0No YXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s aW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCwgY29u c3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29s CiAgICBpc2dyYXBoKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvdXBwZXIoX0NoYXJULCBjb25zdCBsb2Nh bGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAg dG9sb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKCgogIGNsYXNzIGN0eXBlX2Jhc2U7CiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGU7CiAgdGVtcGxhdGU8PiBj bGFzcyBjdHlwZTxjaGFyPjsKCiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTx3Y2hhcl90PjsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnluYW1lOwoKCiAgY2xh c3MgY29kZWN2dF9iYXNlOwogIGNsYXNzIF9fZW5jX3RyYWl0czsKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFz cyBjb2RlY3Z0OwogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRl X3Q+OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90 PjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBl bmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFy VD4gPgogICAgY2xhc3MgbnVtX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG51 bV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdDsKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGU7CiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPiBjbGFzcwogICAgY29sbGF0ZV9ieW5hbWU7CgoKICBjbGFzcyB0aW1lX2Jhc2U7CiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9p dGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+ CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFz cyB0aW1lX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy ID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFt ZTsKCgogIGNsYXNzIG1vbmV5X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1v bmV5X2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0g b3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X3B1dDsKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5 cHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAg ICBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTsKCgogIGNsYXNzIG1lc3NhZ2VzX2Jhc2U7CiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXM7CiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOwoKCiAgY2xhc3MgbG9jYWxl CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBjYXRlZ29yeTsKCgogICAg Y2xhc3MgZmFjZXQ7CiAgICBjbGFzcyBpZDsKICAgIGNsYXNzIF9JbXBsOwoKICAgIGZyaWVuZCBj bGFzcyBmYWNldDsKICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25z dCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBi b29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoKCgogICAgc3RhdGlj IGNvbnN0IGNhdGVnb3J5IG5vbmUgPSAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGN0eXBl ID0gMUwgPDwgMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBudW1lcmljID0gMUwgPDwgMTsK ICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwgPDwgMjsKICAgIHN0YXRpYyBj b25zdCBjYXRlZ29yeSB0aW1lID0gMUwgPDwgMzsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBt b25ldGFyeSA9IDFMIDw8IDQ7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVzc2FnZXMgPSAx TCA8PCA1OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9IChjdHlwZSB8IG51bWVyaWMg fCBjb2xsYXRlIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRp bWUgfCBtb25ldGFyeSB8IG1lc3NhZ2VzKTsKCgogICAgbG9jYWxlKCkgdGhyb3coKTsKCiAgICBs b2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAgIGV4cGxpY2l0CiAgICBs b2NhbGUoY29uc3QgY2hhciogX19zKTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2Us IGNvbnN0IGNoYXIqIF9fcywgY2F0ZWdvcnkgX19jYXQpOwoKICAgIGxvY2FsZShjb25zdCBsb2Nh bGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwoKICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhl ciwgX0ZhY2V0KiBfX2YpOwoKICAgIH5sb2NhbGUoKSB0aHJvdygpOwoKICAgIGNvbnN0IGxvY2Fs ZSYKICAgIG9wZXJhdG9yPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUKICAgICAgY29tYmluZShjb25zdCBs b2NhbGUmIF9fb3RoZXIpIGNvbnN0OwoKCiAgICBzdHJpbmcKICAgIG5hbWUoKSBjb25zdDsKCiAg ICBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cg KCk7CgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgbG9jYWxlJiBfX290aGVy KSBjb25zdCB0aHJvdyAoKQogICAgeyByZXR1cm4gISh0aGlzLT5vcGVyYXRvcj09KF9fb3RoZXIp KTsgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShjb25zdCBiYXNpY19zdHJp bmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsCiAgICAgICAgICAgICAgICAgY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdDsKCgogICAg c3RhdGljIGxvY2FsZQogICAgZ2xvYmFsKGNvbnN0IGxvY2FsZSYpOwoKICAgIHN0YXRpYyBjb25z dCBsb2NhbGUmCiAgICBjbGFzc2ljKCk7CgogIHByaXZhdGU6CgogICAgX0ltcGwqIF9NX2ltcGw7 CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfY2xhc3NpYzsKCgogICAgc3RhdGljIF9JbXBsKiBfU19n bG9iYWw7CgoKCgoKCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX2NhdGVnb3JpZXNfc2l6ZSA9 IDY7CgoKCgoKCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX2V4dHJhX2NhdGVnb3JpZXNfc2l6 ZSA9IDY7CgoKCgoKICAgIHN0YXRpYyBjb25zdCBjaGFyKiBfU19jYXRlZ29yaWVzW19TX2NhdGVn b3JpZXNfc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX1NfZXh0 cmFfY2F0ZWdvcmllc19zaXplXTsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKF9JbXBsKikgdGhy b3coKTsKCiAgICBzdGF0aWMgaW5saW5lIHZvaWQKICAgIF9TX2luaXRpYWxpemUoKQogICAgewog ICAgICBpZiAoIV9TX2NsYXNzaWMpCiAgICAgICAgY2xhc3NpYygpOwogICAgfQoKICAgIHN0YXRp YyBjYXRlZ29yeQogICAgX1Nfbm9ybWFsaXplX2NhdGVnb3J5KGNhdGVnb3J5KTsKCiAgICB2b2lk CiAgICBfTV9jb2FsZXNjZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2Fk ZCwgY2F0ZWdvcnkgX19jYXQpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjpfSW1wbAogIHsKICBw dWJsaWM6CgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6 OmZhY2V0OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0 IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5 cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxv Y2FsZSYpIHRocm93KCk7CgogIHByaXZhdGU6CgogICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5j ZXM7CiAgICBmYWNldCoqIF9NX2ZhY2V0czsKICAgIHNpemVfdCBfTV9mYWNldHNfc2l6ZTsKCiAg ICBjaGFyKiBfTV9uYW1lc1tfU19jYXRlZ29yaWVzX3NpemUKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX1NfZXh0cmFfY2F0ZWdvcmllc19zaXplXTsK ICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jdHlwZVtdOwogICAgc3Rh dGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX251bWVyaWNbXTsKICAgIHN0YXRpYyBj b25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jb2xsYXRlW107CiAgICBzdGF0aWMgY29uc3Qg bG9jYWxlOjppZCogY29uc3QgX1NfaWRfdGltZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6 aWQqIGNvbnN0IF9TX2lkX21vbmV0YXJ5W107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCog Y29uc3QgX1NfaWRfbWVzc2FnZXNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25z dCogY29uc3QgX1NfZmFjZXRfY2F0ZWdvcmllc1tdOwoKICAgIGlubGluZSB2b2lkCiAgICBfTV9h ZGRfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgeyBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMs IDEpOyB9CgogICAgaW5saW5lIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygp CiAgICB7CiAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA9 PSAxKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IGRlbGV0ZSB0aGlzOyB9 CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsgfQogICAgICAgIH0KICAgIH0KCiAg ICBfSW1wbChjb25zdCBfSW1wbCYsIHNpemVfdCk7CiAgICBfSW1wbChjb25zdCBjaGFyKiwgc2l6 ZV90KTsKICAgIF9JbXBsKGZhY2V0KiosIHNpemVfdCwgYm9vbCk7CgogICB+X0ltcGwoKSB0aHJv dygpOwoKICAgIF9JbXBsKGNvbnN0IF9JbXBsJik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNv bnN0IF9JbXBsJik7CgogICAgaW5saW5lIGJvb2wKICAgIF9NX2NoZWNrX3NhbWVfbmFtZSgpCiAg ICB7CiAgICAgIGJvb2wgX19yZXQgPSB0cnVlOwogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOwog ICAgICAgICAgIF9fcmV0ICYmIF9faSA8IF9TX2NhdGVnb3JpZXNfc2l6ZSArIF9TX2V4dHJhX2Nh dGVnb3JpZXNfc2l6ZSAtIDE7CiAgICAgICAgICAgKytfX2kpCiAgICAgICAgX19yZXQgJj0gKHN0 cmNtcChfTV9uYW1lc1tfX2ldLCBfTV9uYW1lc1tfX2kgKyAxXSkgPT0gMCk7CiAgICAgIHJldHVy biBfX3JldDsKICAgIH0KCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3JpZXMoY29uc3Qg X0ltcGwqLCBjYXRlZ29yeSk7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29yeShjb25z dCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0Kik7CgogICAgdm9pZAogICAgX01fcmVw bGFjZV9mYWNldChjb25zdCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqKTsKCiAgICB2b2lkCiAg ICBfTV9pbnN0YWxsX2ZhY2V0KGNvbnN0IGxvY2FsZTo6aWQqLCBmYWNldCopOwoKICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgaW5saW5lIHZvaWQKICAgICAgX01faW5pdF9mYWNl dChfRmFjZXQqIF9fZmFjZXQpCiAgICAgIHsgX01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwg X19mYWNldCk7IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGU6 OmxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKQogICAgewogICAgICBf TV9pbXBsID0gbmV3IF9JbXBsKCpfX290aGVyLl9NX2ltcGwsIDEpOwogICAgICBfTV9pbXBsLT5f TV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6OmlkLCBfX2YpOwogICAgICBmb3IgKHNpemVfdCBfX2kg PSAwOwogICAgICAgICAgIF9faSA8IF9TX2NhdGVnb3JpZXNfc2l6ZSArIF9TX2V4dHJhX2NhdGVn b3JpZXNfc2l6ZTsgKytfX2kpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIF9NX2ltcGwt Pl9NX25hbWVzW19faV07CiAgICAgICAgICBjaGFyKiBfX25ldyA9IG5ldyBjaGFyWzJdOwogICAg ICAgICAgc3RyY3B5KF9fbmV3LCAiKiIpOwogICAgICAgICAgX01faW1wbC0+X01fbmFtZXNbX19p XSA9IF9fbmV3OwogICAgICAgIH0KICAgIH0KCgogIGNsYXNzIGxvY2FsZTo6ZmFjZXQKICB7CiAg 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 dChjb25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpOwp9CiMgNDkgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvaW9zIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvaW9zX2Jhc2Uu aCIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9pb3NfYmFzZS5oIiAzCgoK Cm5hbWVzcGFjZSBzdGQKewoKCgoKICBlbnVtIF9Jb3NfRm10ZmxhZ3MgeyBfTV9pb3NfZm10Zmxh Z3NfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvciYo X0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10 ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoK ICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfChfSW9zX0ZtdGZsYWdzIF9fYSwgX0lv c19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+ KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdz CiAgb3BlcmF0b3JeKF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJl dHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGlu dD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnw9KF9Jb3NfRm10 ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19i OyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3ImPShfSW9zX0ZtdGZsYWdzJiBf X2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBp bmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yXj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9z X0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9J b3NfRm10ZmxhZ3MKICBvcGVyYXRvcn4oX0lvc19GbXRmbGFncyBfX2EpCiAgeyByZXR1cm4gX0lv c19GbXRmbGFncyh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX09wZW5t b2RlIHsgX01faW9zX29wZW5tb2RlX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX09w ZW5tb2RlCiAgb3BlcmF0b3ImKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikK ICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19j YXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnwoX0lv c19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1v ZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBp bmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yXihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19P cGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9f YSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAg b3BlcmF0b3J8PShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0 dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9y Jj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2Eg PSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcl49KF9Jb3Nf T3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4g X19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J+KF9Jb3NfT3Blbm1vZGUg X19hKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0K CgogIGVudW0gX0lvc19Jb3N0YXRlIHsgX01faW9zX2lvc3RhdGVfZW5kID0gMUwgPDwgMTYgfTsK CiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yJihfSW9zX0lvc3RhdGUgX19hLCBfSW9z X0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9f YSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBv cGVyYXRvcnwoX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBf SW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2Ip KTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3JeKF9Jb3NfSW9zdGF0ZSBfX2Es IF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGlu dD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0 ZQogIG9wZXJhdG9yfD0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyBy ZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRv ciY9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9 IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3JePShfSW9zX0lv c3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7 IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfihfSW9zX0lvc3RhdGUgX19hKQog IHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZSh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKICBlbnVt IF9Jb3NfU2Vla2RpciB7IF9NX2lvc19zZWVrZGlyX2VuZCA9IDFMIDw8IDE2IH07CgoKICBjbGFz cyBpb3NfYmFzZQogIHsKICBwdWJsaWM6CgoKICAgIGNsYXNzIGZhaWx1cmUgOiBwdWJsaWMgZXhj ZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgoKICAgICAgZXhwbGljaXQKICAgICAgZmFpbHVyZShj b25zdCBzdHJpbmcmIF9fc3RyKSB0aHJvdygpOwoKCgogICAgICB2aXJ0dWFsCiAgICAgIH5mYWls dXJlKCkgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgd2hhdCgpIGNv bnN0IHRocm93KCk7CgogICAgcHJpdmF0ZToKICAgICAgZW51bSB7IF9NX2J1ZnNpemUgPSAyNTYg fTsKICAgICAgY2hhciBfTV9uYW1lW19NX2J1ZnNpemVdOwoKICAgIH07CgoKICAgIHR5cGVkZWYg X0lvc19GbXRmbGFncyBmbXRmbGFnczsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYm9vbGFs cGhhID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jvb2xhbHBoYSk7CiAgICBzdGF0aWMgY29u c3QgZm10ZmxhZ3MgZGVjID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2RlYyk7CiAgICBzdGF0 aWMgY29uc3QgZm10ZmxhZ3MgZml4ZWQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZml4ZWQp OwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGhleCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpf U19oZXgpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGludGVybmFsID0gZm10ZmxhZ3MoX19p b3NfZmxhZ3M6Ol9TX2ludGVybmFsKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBsZWZ0ID0g Zm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2xlZnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdz IG9jdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19vY3QpOwogICAgc3RhdGljIGNvbnN0IGZt dGZsYWdzIHJpZ2h0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3JpZ2h0KTsKICAgIHN0YXRp YyBjb25zdCBmbXRmbGFncyBzY2llbnRpZmljID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nj aWVudGlmaWMpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3diYXNlID0gZm10ZmxhZ3Mo X19pb3NfZmxhZ3M6Ol9TX3Nob3diYXNlKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93 cG9pbnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3BvaW50KTsKICAgIHN0YXRpYyBj b25zdCBmbXRmbGFncyBzaG93cG9zID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dwb3Mp OwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNraXB3cyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz OjpfU19za2lwd3MpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVuaXRidWYgPSBmbXRmbGFn cyhfX2lvc19mbGFnczo6X1NfdW5pdGJ1Zik7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdXBw ZXJjYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VwcGVyY2FzZSk7CiAgICBzdGF0aWMg Y29uc3QgZm10ZmxhZ3MgYWRqdXN0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYWRq dXN0ZmllbGQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGJhc2VmaWVsZCA9IGZtdGZsYWdz KF9faW9zX2ZsYWdzOjpfU19iYXNlZmllbGQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZs b2F0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZmxvYXRmaWVsZCk7CgoKICAgIHR5 cGVkZWYgX0lvc19Jb3N0YXRlIGlvc3RhdGU7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBiYWRi aXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19iYWRiaXQpOwogICAgc3RhdGljIGNvbnN0IGlv c3RhdGUgZW9mYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZW9mYml0KTsKICAgIHN0YXRp YyBjb25zdCBpb3N0YXRlIGZhaWxiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19mYWlsYml0 KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGdvb2RiaXQgPSBpb3N0YXRlKDApOwoKCiAgICB0 eXBlZGVmIF9Jb3NfT3Blbm1vZGUgb3Blbm1vZGU7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUg YXBwID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2FwcCk7CiAgICBzdGF0aWMgY29uc3Qgb3Bl bm1vZGUgYXRlID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2F0ZSk7CiAgICBzdGF0aWMgY29u c3Qgb3Blbm1vZGUgYmluYXJ5ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2Jpbik7CiAgICBz dGF0aWMgY29uc3Qgb3Blbm1vZGUgaW4gPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfaW4pOwog ICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIG91dCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19v dXQpOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIHRydW5jID0gb3Blbm1vZGUoX19pb3NfZmxh Z3M6Ol9TX3RydW5jKTsKCgogICAgdHlwZWRlZiBfSW9zX1NlZWtkaXIgc2Vla2RpcjsKICAgIHN0 YXRpYyBjb25zdCBzZWVrZGlyIGJlZyA9IHNlZWtkaXIoMCk7CiAgICBzdGF0aWMgY29uc3Qgc2Vl a2RpciBjdXIgPSBzZWVrZGlyKDEpOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgZW5kID0gc2Vl a2RpcigyKTsKIyAyMjkgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9pb3NfYmFzZS5oIiAz CiAgICBlbnVtIGV2ZW50CiAgICB7CiAgICAgIGVyYXNlX2V2ZW50LAogICAgICBpbWJ1ZV9ldmVu dCwKICAgICAgY29weWZtdF9ldmVudAogICAgfTsKCiAgICB0eXBlZGVmIHZvaWQgKCpldmVudF9j YWxsYmFjaykgKGV2ZW50LCBpb3NfYmFzZSYsIGludCk7CgogICAgdm9pZAogICAgcmVnaXN0ZXJf Y2FsbGJhY2soZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgpOwoKICBwcm90ZWN0ZWQ6 CgogICAgc3RyZWFtc2l6ZSBfTV9wcmVjaXNpb247CiAgICBzdHJlYW1zaXplIF9NX3dpZHRoOwog ICAgZm10ZmxhZ3MgX01fZmxhZ3M7CiAgICBpb3N0YXRlIF9NX2V4Y2VwdGlvbjsKICAgIGlvc3Rh dGUgX01fc3RyZWFtYnVmX3N0YXRlOwoKCgogICAgc3RydWN0IF9DYWxsYmFja19saXN0CiAgICB7 CgogICAgICBfQ2FsbGJhY2tfbGlzdCogX01fbmV4dDsKICAgICAgaW9zX2Jhc2U6OmV2ZW50X2Nh bGxiYWNrIF9NX2ZuOwogICAgICBpbnQgX01faW5kZXg7CiAgICAgIF9BdG9taWNfd29yZCBfTV9y ZWZjb3VudDsKCiAgICAgIF9DYWxsYmFja19saXN0KGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBf X2ZuLCBpbnQgX19pbmRleCwKICAgICAgICAgICAgICAgICAgICAgX0NhbGxiYWNrX2xpc3QqIF9f Y2IpCiAgICAgIDogX01fbmV4dChfX2NiKSwgX01fZm4oX19mbiksIF9NX2luZGV4KF9faW5kZXgp LCBfTV9yZWZjb3VudCgwKSB7IH0KCiAgICAgIHZvaWQKICAgICAgX01fYWRkX3JlZmVyZW5jZSgp IHsgX19hdG9taWNfYWRkKCZfTV9yZWZjb3VudCwgMSk7IH0KCgogICAgICBpbnQKICAgICAgX01f cmVtb3ZlX3JlZmVyZW5jZSgpIHsgcmV0dXJuIF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmY291 bnQsIC0xKTsgfQogICAgfTsKCiAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX2NhbGxiYWNrczsKCiAg ICB2b2lkCiAgICBfTV9jYWxsX2NhbGxiYWNrcyhldmVudCBfX2V2KSB0aHJvdygpOwoKICAgIHZv aWQKICAgIF9NX2Rpc3Bvc2VfY2FsbGJhY2tzKHZvaWQpOwoKCiAgICBzdHJ1Y3QgX1dvcmRzCiAg ICB7CiAgICAgIHZvaWQqIF9NX3B3b3JkOwogICAgICBsb25nIF9NX2l3b3JkOwogICAgICBfV29y ZHMoKSA6IF9NX3B3b3JkKDApLCBfTV9pd29yZCgwKSB7IH0KICAgIH07CgoKICAgIF9Xb3JkcyBf TV93b3JkX3plcm87CgoKICAgIHN0YXRpYyBjb25zdCBpbnQgX1NfbG9jYWxfd29yZF9zaXplID0g ODsKICAgIF9Xb3JkcyBfTV9sb2NhbF93b3JkW19TX2xvY2FsX3dvcmRfc2l6ZV07CgoKICAgIGlu dCBfTV93b3JkX3NpemU7CiAgICBfV29yZHMqIF9NX3dvcmQ7CgogICAgX1dvcmRzJgogICAgX01f Z3Jvd193b3JkcyhpbnQgX19pbmRleCk7CgoKICAgIGxvY2FsZSBfTV9pb3NfbG9jYWxlOwoKICAg IHZvaWQKICAgIF9NX2luaXQoKTsKCiAgcHVibGljOgoKCgoKCiAgICBjbGFzcyBJbml0CiAgICB7 CiAgICAgIGZyaWVuZCBjbGFzcyBpb3NfYmFzZTsKICAgIHB1YmxpYzoKICAgICAgSW5pdCgpOwog ICAgICB+SW5pdCgpOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9zX2NyZWF0ZShib29s IF9fc3luYyk7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19pb3NfZGVzdHJveSgpOwoKICAg IHByaXZhdGU6CiAgICAgIHN0YXRpYyBpbnQgX1NfaW9zX2Jhc2VfaW5pdDsKICAgICAgc3RhdGlj IGJvb2wgX1Nfc3luY2VkX3dpdGhfc3RkaW87CiAgICB9OwoKCiAgICBpbmxpbmUgZm10ZmxhZ3MK ICAgIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gX01fZmxhZ3M7IH0KCiAgICBpbmxpbmUgZm10Zmxh Z3MKICAgIGZsYWdzKGZtdGZsYWdzIF9fZm10ZmwpCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xk ID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzID0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xk OwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsKQog ICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyB8PSBf X2ZtdGZsOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAg ICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwsIGZtdGZsYWdzIF9fbWFzaykKICAgIHsKICAgICAgZm10 ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgJj0gfl9fbWFzazsKICAgICAg X01fZmxhZ3MgfD0gKF9fZm10ZmwgJiBfX21hc2spOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9 CgogICAgaW5saW5lIHZvaWQKICAgIHVuc2V0ZihmbXRmbGFncyBfX21hc2spIHsgX01fZmxhZ3Mg Jj0gfl9fbWFzazsgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICBwcmVjaXNpb24oKSBjb25z dCB7IHJldHVybiBfTV9wcmVjaXNpb247IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgcHJl Y2lzaW9uKHN0cmVhbXNpemUgX19wcmVjKQogICAgewogICAgICBzdHJlYW1zaXplIF9fb2xkID0g X01fcHJlY2lzaW9uOwogICAgICBfTV9wcmVjaXNpb24gPSBfX3ByZWM7CiAgICAgIHJldHVybiBf X29sZDsKICAgIH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoKSBjb25zdCB7IHJl dHVybiBfTV93aWR0aDsgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3aWR0aChzdHJlYW1z aXplIF9fd2lkZSkKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9NX3dpZHRoOwogICAg ICBfTV93aWR0aCA9IF9fd2lkZTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIHN0YXRp YyBib29sCiAgICBzeW5jX3dpdGhfc3RkaW8oYm9vbCBfX3N5bmMgPSB0cnVlKTsKCgogICAgbG9j YWxlCiAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgICBpbmxpbmUgbG9jYWxlCiAg ICBnZXRsb2MoKSBjb25zdCB7IHJldHVybiBfTV9pb3NfbG9jYWxlOyB9CgoKICAgIHN0YXRpYyBp bnQKICAgIHhhbGxvYygpIHRocm93KCk7CgogICAgaW5saW5lIGxvbmcmCiAgICBpd29yZChpbnQg X19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRfc2l6ZSkK ICAgICAgICAgICAgICAgICAgICAgICAgPyBfTV93b3JkW19faXhdIDogX01fZ3Jvd193b3Jkcyhf X2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9pd29yZDsKICAgIH0KCiAgICBpbmxpbmUgdm9p ZComCiAgICBwd29yZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19p eCA8IF9NX3dvcmRfc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgPyBfTV93b3JkW19faXhd IDogX01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9wd29yZDsKICAg IH0KCgogICAgfmlvc19iYXNlKCk7CgogIHByb3RlY3RlZDoKICAgIGlvc19iYXNlKCk7CgoKCiAg cHJpdmF0ZToKICAgIGlvc19iYXNlKGNvbnN0IGlvc19iYXNlJik7CgogICAgaW9zX2Jhc2UmCiAg ICBvcGVyYXRvcj0oY29uc3QgaW9zX2Jhc2UmKTsKCiAgfTsKCgogIGlubGluZSBpb3NfYmFzZSYK ICBib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFz ZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2Um CiAgbm9ib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlv c19iYXNlOjpib29sYWxwaGEpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3Nf YmFzZSYKICBzaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlv c19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19i YXNlJgogIG5vc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRm KGlvc19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlv c19iYXNlJgogIHNob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRm KGlvc19iYXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBp b3NfYmFzZSYKICBub3Nob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51 bnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5s aW5lIGlvc19iYXNlJgogIHNob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu c2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l IGlvc19iYXNlJgogIG5vc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51 bnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu ZSBpb3NfYmFzZSYKICBza2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0 Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9z X2Jhc2UmCiAgbm9za2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRm KGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3Nf YmFzZSYKICB1cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihp b3NfYmFzZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9z X2Jhc2UmCiAgbm91cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5z ZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu ZSBpb3NfYmFzZSYKICB1bml0YnVmKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS5z ZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l IGlvc19iYXNlJgogIG5vdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uu dW5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlu bGluZSBpb3NfYmFzZSYKICBpbnRlcm5hbChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jh c2Uuc2V0Zihpb3NfYmFzZTo6aW50ZXJuYWwsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICAg cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBsZWZ0KGlvc19iYXNlJiBf X2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmxlZnQsIGlvc19iYXNlOjphZGp1 c3RmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHJp Z2h0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnJpZ2h0 LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxp bmUgaW9zX2Jhc2UmCiAgZGVjKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYo aW9zX2Jhc2U6OmRlYywgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwog IH0KCiAgaW5saW5lIGlvc19iYXNlJgogIGhleChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9f YmFzZS5zZXRmKGlvc19iYXNlOjpoZXgsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJu IF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBvY3QoaW9zX2Jhc2UmIF9fYmFzZSkK ICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6b2N0LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsK ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGZpeGVkKGlvc19i YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmZpeGVkLCBpb3NfYmFz ZTo6ZmxvYXRmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNl JgogIHNjaWVudGlmaWMoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3Nf YmFzZTo6c2NpZW50aWZpYywgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFz ZTsKICB9Cgp9CiMgNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaW9zIiAyIDMKIyAxICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL3N0cmVhbWJ1ZiIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvc3RyZWFtYnVmIiAzCgoKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlf c3RyZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX2lvcywKICAgICAgICAgICAg ICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4sCiAgICAg ICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91 dCk7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBj bGFzcyBiYXNpY19zdHJlYW1idWYKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0No YXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0 eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVk ZWYgY3R5cGU8Y2hhcl90eXBlPiBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3Ry ZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnN0YXRlX3R5cGUgX19zdGF0ZV90eXBlOwoKICAg ICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAg ZnJpZW5kIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAg IGZyaWVuZCBjbGFzcyBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAg ICBmcmllbmQgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBl PjsKICAgICAgZnJpZW5kIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFp dHNfdHlwZT47CgogICAgICBmcmllbmQgc3RyZWFtc2l6ZQogICAgICBfX2NvcHlfc3RyZWFtYnVm czw+KGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiYgX19pb3MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYmluLF9fc3RyZWFtYnVmX3R5cGUq IF9fc2JvdXQpOwoKICAgIHByb3RlY3RlZDoKCgoKCgogICAgICBjaGFyX3R5cGUqIF9NX2J1ZjsK CgogICAgICBzaXplX3QgX01fYnVmX3NpemU7CgoKICAgICAgc2l6ZV90IF9NX2J1Zl9zaXplX29w dDsKCgoKICAgICAgYm9vbCBfTV9idWZfdW5pZmllZDsKCgoKCgoKICAgICAgY2hhcl90eXBlKiBf TV9pbl9iZWc7CiAgICAgIGNoYXJfdHlwZSogX01faW5fY3VyOwogICAgICBjaGFyX3R5cGUqIF9N X2luX2VuZDsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfYmVnOwogICAgICBjaGFyX3R5cGUqIF9N X291dF9jdXI7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2VuZDsKCgogICAgICBpb3NfYmFzZTo6 b3Blbm1vZGUgX01fbW9kZTsKCgogICAgICBsb2NhbGUgX01fYnVmX2xvY2FsZTsKCgogICAgICBi b29sIF9NX2J1Zl9sb2NhbGVfaW5pdDsKCgoKCgoKICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBf U19wYmFja19zaXplID0gMTsKICAgICAgY2hhcl90eXBlIF9NX3BiYWNrW19TX3BiYWNrX3NpemVd OwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZlOwogICAgICBjaGFyX3R5cGUqIF9N X3BiYWNrX2VuZF9zYXZlOwogICAgICBib29sIF9NX3BiYWNrX2luaXQ7CgoKICAgICAgZnBvczxf X3N0YXRlX3R5cGU+IF9NX3BvczsKCgoKCiAgICAgIHZvaWQKICAgICAgX01fcGJhY2tfY3JlYXRl KCkKICAgICAgewogICAgICAgIGlmICghX01fcGJhY2tfaW5pdCkKICAgICAgICAgIHsKICAgICAg ICAgICAgc2l6ZV90IF9fZGlzdCA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAgICAgICAg c2l6ZV90IF9fbGVuID0gbWluKF9TX3BiYWNrX3NpemUsIF9fZGlzdCk7CiAgICAgICAgICAgIHRy YWl0c190eXBlOjpjb3B5KF9NX3BiYWNrLCBfTV9pbl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAg X01fcGJhY2tfY3VyX3NhdmUgPSBfTV9pbl9jdXI7CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9z YXZlID0gX01faW5fZW5kOwogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX3BiYWNrLCBfTV9wYmFj aywgX01fcGJhY2sgKyBfX2xlbik7CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSB0cnVlOwog ICAgICAgICAgfQogICAgICB9CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2Rlc3Ryb3ko KQogICAgICB7CiAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7CgogICAgICAg ICAgICBzaXplX3QgX19vZmZfY3VyID0gX01faW5fY3VyIC0gX01fcGJhY2s7CgoKICAgICAgICAg ICAgc2l6ZV90IF9fb2ZmX2VuZCA9IDA7CiAgICAgICAgICAgIHNpemVfdCBfX3BiYWNrX2xlbiA9 IF9NX2luX2VuZCAtIF9NX3BiYWNrOwogICAgICAgICAgICBzaXplX3QgX19zYXZlX2xlbiA9IF9N X3BiYWNrX2VuZF9zYXZlIC0gX01fYnVmOwogICAgICAgICAgICBpZiAoX19wYmFja19sZW4gPiBf X3NhdmVfbGVuKQogICAgICAgICAgICAgIF9fb2ZmX2VuZCA9IF9fcGJhY2tfbGVuIC0gX19zYXZl X2xlbjsKCiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9wYmFja19jdXJfc2F2ZSAr IF9fb2ZmX2N1ciwKICAgICAgICAgICAgICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSArIF9f b2ZmX2VuZCk7CiAgICAgICAgICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gX19udWxsOwogICAgICAg ICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJhY2tfaW5p dCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICB9CgoKCiAgICAgIHZvaWQKICAgICAgX01faW5f Y3VyX21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBf TV9vdXRfY3VyOwogICAgICAgIF9NX2luX2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVzdG91 dCAmJiBfTV9idWZfdW5pZmllZCkKICAgICAgICAgIF9NX291dF9jdXIgKz0gX19uOwogICAgICB9 CiMgMjAyICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL3N0cmVhbWJ1ZiIgMwogICAgICB2b2lkCiAg ICAgIF9NX291dF9jdXJfbW92ZShvZmZfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBib29sIF9f dGVzdGluID0gX01faW5fY3VyOwoKICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsKICAgICAgICBp ZiAoX190ZXN0aW4gJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9pbl9jdXIgKz0gX19u OwogICAgICAgIGlmIChfTV9vdXRfY3VyID4gX01fb3V0X2VuZCkKICAgICAgICAgIHsKICAgICAg ICAgICAgX01fb3V0X2VuZCA9IF9NX291dF9jdXI7CgogICAgICAgICAgICBpZiAoX190ZXN0aW4p CiAgICAgICAgICAgICAgX01faW5fZW5kICs9IF9fbjsKICAgICAgICAgIH0KICAgICAgfQoKCgoK ICAgICAgb2ZmX3R5cGUKICAgICAgX01fb3V0X2J1Zl9zaXplKCkKICAgICAgewogICAgICAgIG9m Zl90eXBlIF9fcmV0ID0gMDsKICAgICAgICBpZiAoX01fb3V0X2N1cikKICAgICAgICAgIHsKCiAg ICAgICAgICAgIGlmIChfTV9vdXRfYmVnID09IF9NX2J1ZikKICAgICAgICAgICAgICBfX3JldCA9 IF9NX291dF9iZWcgKyBfTV9idWZfc2l6ZSAtIF9NX291dF9jdXI7CgogICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfZW5kIC0gX01fb3V0X2N1cjsKICAgICAgICAg IH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgcHVibGljOgogICAgICB2aXJ0dWFs CiAgICAgIH5iYXNpY19zdHJlYW1idWYoKQogICAgICB7CiAgICAgICAgX01fYnVmX3VuaWZpZWQg PSBmYWxzZTsKICAgICAgICBfTV9idWZfc2l6ZSA9IDA7CiAgICAgICAgX01fYnVmX3NpemVfb3B0 ID0gMDsKICAgICAgICBfTV9tb2RlID0gaW9zX2Jhc2U6Om9wZW5tb2RlKDApOwogICAgICAgIF9N X2J1Zl9sb2NhbGVfaW5pdCA9IGZhbHNlOwogICAgICB9CgoKICAgICAgbG9jYWxlCiAgICAgIHB1 YmltYnVlKGNvbnN0IGxvY2FsZSAmX19sb2MpCiAgICAgIHsKICAgICAgICBsb2NhbGUgX190bXAo dGhpcy0+Z2V0bG9jKCkpOwogICAgICAgIHRoaXMtPmltYnVlKF9fbG9jKTsKICAgICAgICByZXR1 cm4gX190bXA7CiAgICAgIH0KCiAgICAgIGxvY2FsZQogICAgICBnZXRsb2MoKSBjb25zdAogICAg ICB7CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGVfaW5pdCkKICAgICAgICAgIHJldHVybiBfTV9i dWZfbG9jYWxlOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBsb2NhbGUoKTsKICAgICAg fQoKCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAgIHB1YnNldGJ1ZihjaGFyX3R5cGUqIF9f cywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNldGJ1ZihfX3MsIF9fbik7 IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19i YXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBf X21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiB0aGlz LT5zZWVrb2ZmKF9fb2ZmLCBfX3dheSwgX19tb2RlKTsgfQoKICAgICAgcG9zX3R5cGUKICAgICAg cHVic2Vla3Bvcyhwb3NfdHlwZSBfX3NwLAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVu bW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVy biB0aGlzLT5zZWVrcG9zKF9fc3AsIF9fbW9kZSk7IH0KCiAgICAgIGludAogICAgICBwdWJzeW5j KCkgeyByZXR1cm4gdGhpcy0+c3luYygpOyB9CgoKCiAgICAgIHN0cmVhbXNpemUKICAgICAgaW5f YXZhaWwoKQogICAgICB7CiAgICAgICAgc3RyZWFtc2l6ZSBfX3JldDsKICAgICAgICBpZiAoX01f aW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAgIHsKICAgICAgICAgICAg aWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc2l6ZV90 IF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX3BiYWNrX2N1cl9zYXZlOwogICAg ICAgICAgICAgICAgc2l6ZV90IF9fcGJhY2tfbGVuID0gX01faW5fY3VyIC0gX01fcGJhY2s7CiAg ICAgICAgICAgICAgICBfX3JldCA9IF9fc2F2ZV9sZW4gLSBfX3BiYWNrX2xlbjsKICAgICAgICAg ICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPmVncHRy KCkgLSB0aGlzLT5ncHRyKCk7CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19y ZXQgPSB0aGlzLT5zaG93bWFueWMoKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAg ICAgIGludF90eXBlCiAgICAgIHNuZXh0YygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX2Vv ZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICByZXR1cm4gKHRyYWl0c190eXBlOjplcV9p bnRfdHlwZSh0aGlzLT5zYnVtcGMoKSwgX19lb2YpCiAgICAgICAgICAgICAgICA/IF9fZW9mIDog dGhpcy0+c2dldGMoKSk7CiAgICAgIH0KCiAgICAgIGludF90eXBlCiAgICAgIHNidW1wYygpOwoK ICAgICAgaW50X3R5cGUKICAgICAgc2dldGMoKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19y ZXQ7CiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAg ICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqKHRoaXMtPmdwdHIoKSkpOwog ICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0gdGhpcy0+dW5kZXJmbG93KCk7CiAgICAgICAg cmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICBzdHJlYW1zaXplCiAgICAgIHNnZXRuKGNoYXJf dHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNnZXRuKF9f cywgX19uKTsgfQoKCiAgICAgIGludF90eXBlCiAgICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19j KTsKCiAgICAgIGludF90eXBlCiAgICAgIHN1bmdldGMoKTsKCgogICAgICBpbnRfdHlwZQogICAg ICBzcHV0YyhjaGFyX3R5cGUgX19jKTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAgc3B1dG4oY29u c3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT54 c3B1dG4oX19zLCBfX24pOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBiYXNpY19zdHJlYW1idWYo KQogICAgICA6IF9NX2J1ZihfX251bGwpLCBfTV9idWZfc2l6ZSgwKSwgX01fYnVmX3NpemVfb3B0 KDgxOTIpLAogICAgICBfTV9idWZfdW5pZmllZChmYWxzZSksIF9NX2luX2JlZygwKSwgX01faW5f Y3VyKDApLCBfTV9pbl9lbmQoMCksCiAgICAgIF9NX291dF9iZWcoMCksIF9NX291dF9jdXIoMCks IF9NX291dF9lbmQoMCksCiAgICAgIF9NX21vZGUoaW9zX2Jhc2U6Om9wZW5tb2RlKDApKSwgX01f YnVmX2xvY2FsZShsb2NhbGUoKSksCiAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdChmYWxzZSksIF9N X3BiYWNrX2N1cl9zYXZlKDApLCBfTV9wYmFja19lbmRfc2F2ZSgwKSwKICAgICAgX01fcGJhY2tf aW5pdChmYWxzZSkKICAgICAgeyB9CgoKICAgICAgY2hhcl90eXBlKgogICAgICBlYmFjaygpIGNv bnN0IHsgcmV0dXJuIF9NX2luX2JlZzsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBncHRyKCkg Y29uc3QgeyByZXR1cm4gX01faW5fY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVncHRy KCkgY29uc3QgeyByZXR1cm4gX01faW5fZW5kOyB9CgogICAgICB2b2lkCiAgICAgIGdidW1wKGlu dCBfX24pIHsgX01faW5fY3VyICs9IF9fbjsgfQoKICAgICAgdm9pZAogICAgICBzZXRnKGNoYXJf dHlwZSogX19nYmVnLCBjaGFyX3R5cGUqIF9fZ25leHQsIGNoYXJfdHlwZSogX19nZW5kKQogICAg ICB7CiAgICAgICAgX01faW5fYmVnID0gX19nYmVnOwogICAgICAgIF9NX2luX2N1ciA9IF9fZ25l eHQ7CiAgICAgICAgX01faW5fZW5kID0gX19nZW5kOwogICAgICAgIGlmICghKF9NX21vZGUgJiBp b3NfYmFzZTo6aW4pICYmIF9fZ2JlZyAmJiBfX2duZXh0ICYmIF9fZ2VuZCkKICAgICAgICAgIF9N X21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6OmluOwogICAgICB9CgoKICAgICAgY2hhcl90eXBl KgogICAgICBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9iZWc7IH0KCiAgICAgIGNoYXJf dHlwZSoKICAgICAgcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9jdXI7IH0KCiAgICAgIGNo YXJfdHlwZSoKICAgICAgZXBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfZW5kOyB9CgogICAg ICB2b2lkCiAgICAgIHBidW1wKGludCBfX24pIHsgX01fb3V0X2N1ciArPSBfX247IH0KCiAgICAg IHZvaWQKICAgICAgc2V0cChjaGFyX3R5cGUqIF9fcGJlZywgY2hhcl90eXBlKiBfX3BlbmQpCiAg ICAgIHsKICAgICAgICBfTV9vdXRfYmVnID0gX01fb3V0X2N1ciA9IF9fcGJlZzsKICAgICAgICBf TV9vdXRfZW5kID0gX19wZW5kOwogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0 KSAmJiBfX3BiZWcgJiYgX19wZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3Nf YmFzZTo6b3V0OwogICAgICB9CgoKCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBpbWJ1ZShjb25z dCBsb2NhbGUmIF9fbG9jKQogICAgICB7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gdHJ1 ZTsKICAgICAgICBpZiAoX01fYnVmX2xvY2FsZSAhPSBfX2xvYykKICAgICAgICAgIF9NX2J1Zl9s b2NhbGUgPSBfX2xvYzsKICAgICAgfQoKCiAgICAgIHZpcnR1YWwgYmFzaWNfc3RyZWFtYnVmPGNo YXJfdHlwZSxfVHJhaXRzPioKICAgICAgc2V0YnVmKGNoYXJfdHlwZSosIHN0cmVhbXNpemUpCiAg ICAgIHsgcmV0dXJuIHRoaXM7IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla29m ZihvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9w ZW5tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9z X3R5cGUob2ZmX3R5cGUoLTEpKTsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVr cG9zKHBvc190eXBlLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNl OjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0x KSk7IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIHN5bmMoKSB7IHJldHVybiAwOyB9CgoKICAg ICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHNob3dtYW55YygpIHsgcmV0dXJuIDA7IH0KCiAg ICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVh bXNpemUgX19uKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KCkKICAg ICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CgogICAgICB2aXJ0dWFsIGludF90eXBl CiAgICAgIHVmbG93KCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5 cGU6OmVvZigpOwogICAgICAgIGJvb2wgX190ZXN0ZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90 eXBlKHRoaXMtPnVuZGVyZmxvdygpLCBfX3JldCk7CiAgICAgICAgYm9vbCBfX3Rlc3RwZW5kaW5n ID0gX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZDsKICAgICAgICBpZiAoIV9fdGVz dGVvZiAmJiBfX3Rlc3RwZW5kaW5nKQogICAgICAgICAgewogICAgICAgICAgICBfX3JldCA9IHRy YWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICAgICAgKytfTV9pbl9j dXI7CiAgICAgICAgICAgIGlmIChfTV9idWZfdW5pZmllZCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6 Om91dCkKICAgICAgICAgICAgICArK19NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0 dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBwYmFja2Zh aWwoaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190 eXBlOjplb2YoKTsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c3B1dG4oY29u c3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5 cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsg cmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQojIDQ4NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9zdHJlYW1idWYiIDMKICAgIHByaXZhdGU6CiAgICAgIGJhc2ljX3N0cmVhbWJ1Zihjb25zdCBf X3N0cmVhbWJ1Zl90eXBlJikgeyB9OwoKICAgICAgX19zdHJlYW1idWZfdHlwZSYKICAgICAgb3Bl cmF0b3I9KGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKSB7IHJldHVybiAqdGhpczsgfTsKCiAgICB9 Owp9CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RyZWFtYnVmLnRjYyIg MSAzCiMgMzkgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdHJlYW1idWYudGNjIiAzCgpu YW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBjb25zdCBzaXplX3QKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+ OjpfU19wYmFja19zaXplOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50 X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNidW1wYygp CiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01faW5fY3VyICYmIF9NX2lu X2N1ciA8IF9NX2luX2VuZCkKICAgICAgICB7CiAgICAgICAgICBjaGFyX3R5cGUgX19jID0gKih0 aGlzLT5ncHRyKCkpOwogICAgICAgICAgX01faW5fY3VyX21vdmUoMSk7CiAgICAgICAgICBfX3Jl dCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpOwogICAgICAgIH0KICAgICAgZWxzZQog ICAgICAgIF9fcmV0ID0gdGhpcy0+dWZsb3coKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFt ZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0 cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKQog ICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgYm9vbCBfX3Rlc3Rwb3MgPSBfTV9pbl9j dXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyOwogICAgICBib29sIF9fdGVzdG5lID0gX01faW5f Y3VyICYmICF0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlzLT5ncHRyKClbLTFdKTsKICAgICAgaWYg KCFfX3Rlc3Rwb3MgfHwgX190ZXN0bmUpCiAgICAgICAgX19yZXQgPSBwYmFja2ZhaWwodHJhaXRz X3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAg X01faW5fY3VyX21vdmUoLTEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50 X3R5cGUoKnRoaXMtPmdwdHIoKSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVu YW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNf c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3VuZ2V0YygpCiAgICB7CiAgICAgIGlu dF90eXBlIF9fcmV0OwogICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1 cikKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAgICAgICBfX3Jl dCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICB9CiAgICAg IGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnBiYWNrZmFpbCgpOwogICAgICByZXR1cm4gX19y ZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90 eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YyhjaGFy X3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX291dF9i dWZfc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgICpfTV9vdXRfY3VyID0gX19jOwogICAgICAg ICAgX01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9f aW50X3R5cGUoX19jKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMt Pm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgcmV0dXJuIF9f cmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAg ICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzdHJl YW1zaXplIF9fcmV0ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsKICAg ICAgICAgIHNpemVfdCBfX2J1Zl9sZW4gPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAg ICBpZiAoX19idWZfbGVuID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBf X3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IG1p bihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29w eShfX3MsIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOwog ICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsKICAgICAgICAgICAgICBfTV9pbl9jdXJfbW92ZShf X2xlbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOwogICAgICAg ICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5cGU6OmVv ZigpKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFz c2lnbigqX19zKyssIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAgICAgICAg ICAgICAgICsrX19yZXQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBf X3JldDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz Pjo6CiAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAg ewogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwgX19uKQog ICAgICAgIHsKICAgICAgICAgIG9mZl90eXBlIF9fYnVmX2xlbiA9IF9NX291dF9idWZfc2l6ZSgp OwogICAgICAgICAgaWYgKF9fYnVmX2xlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBvZmZfdHlwZSBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAgIG9mZl90 eXBlIF9fbGVuID0gbWluKF9fYnVmX2xlbiwgX19yZW1haW5pbmcpOwogICAgICAgICAgICAgIHRy YWl0c190eXBlOjpjb3B5KF9NX291dF9jdXIsIF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9f cmV0ICs9IF9fbGVuOwogICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsKICAgICAgICAgICAgICBf TV9vdXRfY3VyX21vdmUoX19sZW4pOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9fcmV0 IDwgX19uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+ b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfX3MpKTsKICAgICAgICAgICAgICBp ZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkpCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX19yZXQ7CiAgICAgICAgICAgICAg ICAgICsrX19zOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7 CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBf VHJhaXRzPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0No YXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFt YnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpCiAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwoKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7 CiAgICAgIHN0cmVhbXNpemUgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOwogICAgICBz dHJlYW1zaXplIF9feHRyY3Q7CiAgICAgIGJvb2wgX190ZXN0cHV0ID0gX19zYm91dC0+X01fbW9k ZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIHdoaWxlIChf X3Rlc3RwdXQgJiYgX19idWZzaXplICE9IC0xKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg aWYgKF9fYnVmc2l6ZSAhPSAwICYmIF9fc2Jpbi0+Z3B0cigpICE9IF9fbnVsbCkKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX194dHJjdCA9IF9fc2JvdXQtPnNwdXRuKF9fc2Jp bi0+Z3B0cigpLCBfX2J1ZnNpemUpOwogICAgICAgICAgICAgICAgICBfX3JldCArPSBfX3h0cmN0 OwogICAgICAgICAgICAgICAgICBfX3NiaW4tPl9NX2luX2N1cl9tb3ZlKF9feHRyY3QpOwogICAg ICAgICAgICAgICAgICBpZiAoX194dHJjdCAhPSBfX2J1ZnNpemUpCiAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICBfQ2hhclQgX19idWZbMjU2XTsKICAgICAgICAgICAg ICAgICAgc3RyZWFtc2l6ZSBfX2NoYXJzcmVhZCA9IF9fc2Jpbi0+c2dldG4oX19idWYsIHNpemVv ZihfX2J1ZikpOwogICAgICAgICAgICAgICAgICBfX3h0cmN0ID0gX19zYm91dC0+c3B1dG4oX19i dWYsIF9fY2hhcnNyZWFkKTsKICAgICAgICAgICAgICAgICAgX19yZXQgKz0gX194dHJjdDsKICAg ICAgICAgICAgICAgICAgaWYgKF9feHRyY3QgIT0gX19jaGFyc3JlYWQpCiAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKF9UcmFpdHM6 OmVxX2ludF90eXBlKF9fc2Jpbi0+c2dldGMoKSwgX1RyYWl0czo6ZW9mKCkpKQogICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgp OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK ICAgICAgICB7CiAgICAgICAgICBfX2lvcy5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAg ICAgICAgICBpZiAoKF9faW9zLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpmYWlsYml0KSAhPSAw KQogICAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0K CgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPjsKICBleHRl cm4gdGVtcGxhdGUKICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lv czxjaGFyPiYsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiosCiAgICAgICAgICAgICAgICAgICAgICBi YXNpY19zdHJlYW1idWY8Y2hhcj4qKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19z dHJlYW1idWY8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBzdHJlYW1zaXplCiAgICBf X2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8d2NoYXJfdD4mLCBiYXNpY19zdHJlYW1idWY8d2No YXJfdD4qLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+Kik7 Cgp9CiMgNDk5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL3N0cmVhbWJ1ZiIgMiAzCiMgNTEgIi91 c3IvaW5jbHVkZS9jKysvMy4yLjEvaW9zIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2JpdHMvYmFzaWNfaW9zLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMv YmFzaWNfaW9zLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0cmVhbWJ1 Zl9pdGVyYXRvci5oIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0cmVh bWJ1Zl9pdGVyYXRvci5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcgog ICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRlcmF0b3JfdGFnLCBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM6Om9mZl90eXBlLAogICAgICAgICAgICAgICAgICAgICAgX0NoYXJUKiwgX0NoYXJU Jj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg ICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9U cmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjxf Q2hhclQsIF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKCgoKCgoKCiAg ICAgIG11dGFibGUgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7CiAgICAgIGludF90eXBlIF9NX2M7 CgogICAgcHVibGljOgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKCkgdGhyb3coKQogICAgICA6 IF9NX3NidWYoMCksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigpKSB7IH0KCiAgICAgIGlzdHJlYW1i dWZfaXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVmKF9f cy5yZGJ1ZigpKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsgfQoKICAgICAgaXN0cmVhbWJ1 Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1Zihf X3MpLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9CgoKICAgICAgY2hhcl90eXBlCiAgICAg IG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjp0b19jaGFyX3R5 cGUoX01fZ2V0KCkpOyB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRv cisrKCkKICAgICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6 OmVvZigpOwogICAgICAgIGlmIChfTV9zYnVmICYmIHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShf TV9zYnVmLT5zYnVtcGMoKSwgX19lb2YpKQogICAgICAgICAgX01fc2J1ZiA9IDA7CiAgICAgICAg ZWxzZQogICAgICAgICAgX01fYyA9IF9fZW9mOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAg fQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAg ewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAg ICAgIGlzdHJlYW1idWZfaXRlcmF0b3IgX19vbGQgPSAqdGhpczsKICAgICAgICBpZiAoX01fc2J1 ZgogICAgICAgICAgICAmJiB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoKF9fb2xkLl9NX2MgPSBf TV9zYnVmLT5zYnVtcGMoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2VvZikpCiAgICAgICAgICBfTV9zYnVmID0gMDsKICAgICAgICBlbHNlCiAgICAgICAgICBf TV9jID0gX19lb2Y7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CgoKCgogICAgICBib29s CiAgICAgIGVxdWFsKGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3ImIF9fYikgY29uc3QKICAgICAg ewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAg ICAgIGJvb2wgX190aGlzZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX2dldCgpLCBf X2VvZik7CiAgICAgICAgYm9vbCBfX2Jlb2YgPSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19i Ll9NX2dldCgpLCBfX2VvZik7CiAgICAgICAgcmV0dXJuIChfX3RoaXNlb2YgJiYgX19iZW9mIHx8 ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAgfQoKCiAgICBwcml2YXRlOgogICAgICBp bnRfdHlwZQogICAgICBfTV9nZXQoKSBjb25zdAogICAgICB7CiAgICAgICAgY29uc3QgaW50X3R5 cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgaW50X3R5cGUgX19yZXQgPSBf X2VvZjsKICAgICAgICBpZiAoX01fc2J1ZikKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKCF0 cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fYywgX19lb2YpKQogICAgICAgICAgICAgIF9fcmV0 ID0gX01fYzsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6 ZXFfaW50X3R5cGUoKF9fcmV0ID0gX01fc2J1Zi0+c2dldGMoKSksIF9fZW9mKSkKICAgICAgICAg ICAgICAgIF9NX3NidWYgPSAwOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAg ICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRv cjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsCiAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1idWZf aXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19iKQogICAgeyByZXR1cm4gX19hLmVxdWFsKF9f Yik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh clQsIF9UcmFpdHM+JiBfX2EsCiAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0 b3I8X0NoYXJULCBfVHJhaXRzPiYgX19iKQogICAgeyByZXR1cm4gIV9fYS5lcXVhbChfX2IpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNz IG9zdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRv cl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0 eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlw ZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1i dWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gb3N0 cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOwog ICAgICBib29sIF9NX2ZhaWxlZDsKCiAgICBwdWJsaWM6CiAgICAgIGlubGluZQogICAgICBvc3Ry ZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zKSB0aHJvdyAoKQogICAgICA6IF9NX3Ni dWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9NX3NidWYpIHsgfQoKICAgICAgb3N0cmVhbWJ1 Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdyAoKQogICAgICA6IF9NX3NidWYo X19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Im CiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKTsKCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Im CiAgICAgIG9wZXJhdG9yKigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAg IG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB0aHJvdygpCiAgICAg IHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVy YXRvcisrKCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgYm9vbAogICAg ICBmYWlsZWQoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX2ZhaWxlZDsgfQogICAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5s aW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYKICAgIG9zdHJlYW1idWZf aXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I9KF9DaGFyVCBfX2MpCiAgICB7CiAg ICAgIGlmICghX01fZmFpbGVkICYmCiAgICAgICAgICBfVHJhaXRzOjplcV9pbnRfdHlwZShfTV9z YnVmLT5zcHV0YyhfX2MpLCBfVHJhaXRzOjplb2YoKSkpCiAgICAgICAgX01fZmFpbGVkID0gdHJ1 ZTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQp9CiMgNDEgIi91c3IvaW5jbHVkZS9jKysvMy4y LjEvYml0cy9iYXNpY19pb3MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz L2xvY2FsZV9mYWNldHMuaCIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9s b2NhbGVfZmFjZXRzLmgiIDMKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvY3djdHlwZSIg MSAzCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvY3djdHlwZSIgMwoKCgoKIyAxICIvdXNy L2luY2x1ZGUvd2N0eXBlLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKIyAx ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzMuMi4xL2luY2x1ZGUvc3Rk ZGVmLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDIgMwojIDQ1ICIvdXNyL2lu Y2x1ZGUvd2N0eXBlLmgiIDMKCgoKIyA2NCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCgoKCnR5 cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgd2N0eXBlX3Q7CgojIDg2ICIvdXNyL2luY2x1ZGUvd2N0 eXBlLmgiIDMKZW51bQp7CiAgX19JU3d1cHBlciA9IDAsCiAgX19JU3dsb3dlciA9IDEsCiAgX19J U3dhbHBoYSA9IDIsCiAgX19JU3dkaWdpdCA9IDMsCiAgX19JU3d4ZGlnaXQgPSA0LAogIF9fSVN3 c3BhY2UgPSA1LAogIF9fSVN3cHJpbnQgPSA2LAogIF9fSVN3Z3JhcGggPSA3LAogIF9fSVN3Ymxh bmsgPSA4LAogIF9fSVN3Y250cmwgPSA5LAogIF9fSVN3cHVuY3QgPSAxMCwKICBfX0lTd2FsbnVt ID0gMTEsCgogIF9JU3d1cHBlciA9ICgoX19JU3d1cHBlcikgPCA4ID8gKGludCkgKCgxVUwgPDwg KF9fSVN3dXBwZXIpKSA8PCAyNCkgOiAoKF9fSVN3dXBwZXIpIDwgMTYgPyAoaW50KSAoKDFVTCA8 PCAoX19JU3d1cHBlcikpIDw8IDgpIDogKChfX0lTd3VwcGVyKSA8IDI0ID8gKGludCkgKCgxVUwg PDwgKF9fSVN3dXBwZXIpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPj4g MjQpKSkpLAogIF9JU3dsb3dlciA9ICgoX19JU3dsb3dlcikgPCA4ID8gKGludCkgKCgxVUwgPDwg KF9fSVN3bG93ZXIpKSA8PCAyNCkgOiAoKF9fSVN3bG93ZXIpIDwgMTYgPyAoaW50KSAoKDFVTCA8 PCAoX19JU3dsb3dlcikpIDw8IDgpIDogKChfX0lTd2xvd2VyKSA8IDI0ID8gKGludCkgKCgxVUwg PDwgKF9fSVN3bG93ZXIpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPj4g MjQpKSkpLAogIF9JU3dhbHBoYSA9ICgoX19JU3dhbHBoYSkgPCA4ID8gKGludCkgKCgxVUwgPDwg KF9fSVN3YWxwaGEpKSA8PCAyNCkgOiAoKF9fSVN3YWxwaGEpIDwgMTYgPyAoaW50KSAoKDFVTCA8 PCAoX19JU3dhbHBoYSkpIDw8IDgpIDogKChfX0lTd2FscGhhKSA8IDI0ID8gKGludCkgKCgxVUwg PDwgKF9fSVN3YWxwaGEpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPj4g MjQpKSkpLAogIF9JU3dkaWdpdCA9ICgoX19JU3dkaWdpdCkgPCA4ID8gKGludCkgKCgxVUwgPDwg KF9fSVN3ZGlnaXQpKSA8PCAyNCkgOiAoKF9fSVN3ZGlnaXQpIDwgMTYgPyAoaW50KSAoKDFVTCA8 PCAoX19JU3dkaWdpdCkpIDw8IDgpIDogKChfX0lTd2RpZ2l0KSA8IDI0ID8gKGludCkgKCgxVUwg PDwgKF9fSVN3ZGlnaXQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPj4g MjQpKSkpLAogIF9JU3d4ZGlnaXQgPSAoKF9fSVN3eGRpZ2l0KSA8IDggPyAoaW50KSAoKDFVTCA8 PCAoX19JU3d4ZGlnaXQpKSA8PCAyNCkgOiAoKF9fSVN3eGRpZ2l0KSA8IDE2ID8gKGludCkgKCgx VUwgPDwgKF9fSVN3eGRpZ2l0KSkgPDwgOCkgOiAoKF9fSVN3eGRpZ2l0KSA8IDI0ID8gKGludCkg KCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3d4ZGln aXQpKSA+PiAyNCkpKSksCiAgX0lTd3NwYWNlID0gKChfX0lTd3NwYWNlKSA8IDggPyAoaW50KSAo KDFVTCA8PCAoX19JU3dzcGFjZSkpIDw8IDI0KSA6ICgoX19JU3dzcGFjZSkgPCAxNiA/IChpbnQp ICgoMVVMIDw8IChfX0lTd3NwYWNlKSkgPDwgOCkgOiAoKF9fSVN3c3BhY2UpIDwgMjQgPyAoaW50 KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3c3Bh Y2UpKSA+PiAyNCkpKSksCiAgX0lTd3ByaW50ID0gKChfX0lTd3ByaW50KSA8IDggPyAoaW50KSAo KDFVTCA8PCAoX19JU3dwcmludCkpIDw8IDI0KSA6ICgoX19JU3dwcmludCkgPCAxNiA/IChpbnQp ICgoMVVMIDw8IChfX0lTd3ByaW50KSkgPDwgOCkgOiAoKF9fSVN3cHJpbnQpIDwgMjQgPyAoaW50 KSAoKDFVTCA8PCAoX19JU3dwcmludCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3cHJp bnQpKSA+PiAyNCkpKSksCiAgX0lTd2dyYXBoID0gKChfX0lTd2dyYXBoKSA8IDggPyAoaW50KSAo KDFVTCA8PCAoX19JU3dncmFwaCkpIDw8IDI0KSA6ICgoX19JU3dncmFwaCkgPCAxNiA/IChpbnQp ICgoMVVMIDw8IChfX0lTd2dyYXBoKSkgPDwgOCkgOiAoKF9fSVN3Z3JhcGgpIDwgMjQgPyAoaW50 KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3Z3Jh cGgpKSA+PiAyNCkpKSksCiAgX0lTd2JsYW5rID0gKChfX0lTd2JsYW5rKSA8IDggPyAoaW50KSAo KDFVTCA8PCAoX19JU3dibGFuaykpIDw8IDI0KSA6ICgoX19JU3dibGFuaykgPCAxNiA/IChpbnQp ICgoMVVMIDw8IChfX0lTd2JsYW5rKSkgPDwgOCkgOiAoKF9fSVN3YmxhbmspIDwgMjQgPyAoaW50 KSAoKDFVTCA8PCAoX19JU3dibGFuaykpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3Ymxh bmspKSA+PiAyNCkpKSksCiAgX0lTd2NudHJsID0gKChfX0lTd2NudHJsKSA8IDggPyAoaW50KSAo KDFVTCA8PCAoX19JU3djbnRybCkpIDw8IDI0KSA6ICgoX19JU3djbnRybCkgPCAxNiA/IChpbnQp ICgoMVVMIDw8IChfX0lTd2NudHJsKSkgPDwgOCkgOiAoKF9fSVN3Y250cmwpIDwgMjQgPyAoaW50 KSAoKDFVTCA8PCAoX19JU3djbnRybCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3Y250 cmwpKSA+PiAyNCkpKSksCiAgX0lTd3B1bmN0ID0gKChfX0lTd3B1bmN0KSA8IDggPyAoaW50KSAo KDFVTCA8PCAoX19JU3dwdW5jdCkpIDw8IDI0KSA6ICgoX19JU3dwdW5jdCkgPCAxNiA/IChpbnQp ICgoMVVMIDw8IChfX0lTd3B1bmN0KSkgPDwgOCkgOiAoKF9fSVN3cHVuY3QpIDwgMjQgPyAoaW50 KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3cHVu Y3QpKSA+PiAyNCkpKSksCiAgX0lTd2FsbnVtID0gKChfX0lTd2FsbnVtKSA8IDggPyAoaW50KSAo KDFVTCA8PCAoX19JU3dhbG51bSkpIDw8IDI0KSA6ICgoX19JU3dhbG51bSkgPCAxNiA/IChpbnQp ICgoMVVMIDw8IChfX0lTd2FsbnVtKSkgPDwgOCkgOiAoKF9fSVN3YWxudW0pIDwgMjQgPyAoaW50 KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3YWxu dW0pKSA+PiAyNCkpKSkKfTsKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKZXh0ZXJuIGludCBpc3dh bG51bSAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgaXN3YWxwaGEgKHdp bnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd2NudHJsICh3aW50X3QgX193Yykg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3ZGlnaXQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCBpc3dncmFwaCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCBpc3dsb3dlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXN3cHJp bnQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3cHVuY3QgKHdpbnRf dCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3c3BhY2UgKHdpbnRfdCBfX3djKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3dXBwZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBpbnQgaXN3eGRpZ2l0ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIGludCBpc3dibGFuayAod2ludF90IF9fd2MpIHRocm93ICgpOwojIDE4NiAiL3Vzci9pbmNs dWRlL3djdHlwZS5oIiAzCmV4dGVybiB3Y3R5cGVfdCB3Y3R5cGUgKF9fY29uc3QgY2hhciAqX19w cm9wZXJ0eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3Y3R5cGUgKHdpbnRfdCBfX3djLCB3 Y3R5cGVfdCBfX2Rlc2MpIHRocm93ICgpOwoKCgoKCgoKCgoKdHlwZWRlZiBfX2NvbnN0IF9faW50 MzJfdCAqd2N0cmFuc190OwoKCgoKCgoKZXh0ZXJuIHdpbnRfdCB0b3dsb3dlciAod2ludF90IF9f d2MpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgdG93dXBwZXIgKHdpbnRfdCBfX3djKSB0aHJv dyAoKTsKCgp9CiMgMjI4ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKZXh0ZXJuICJDIiB7CgoK CgpleHRlcm4gd2N0cmFuc190IHdjdHJhbnMgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSkgdGhy b3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3djdHJhbnMgKHdpbnRfdCBfX3djLCB3Y3RyYW5zX3Qg X19kZXNjKSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IGlzd2FsbnVtX2wgKHdpbnRfdCBf X3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGlzd2Fs cGhhX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IGlzd2NudHJsX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCBpc3dkaWdpdF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBf X2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3Z3JhcGhfbCAod2ludF90IF9fd2Ms IF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dsb3dlcl9s ICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBpc3dwcmludF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gaW50IGlzd3B1bmN0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9j YWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3c3BhY2VfbCAod2ludF90IF9fd2MsIF9f bG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3d1cHBlcl9sICh3 aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50 IGlzd3hkaWdpdF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gaW50IGlzd2JsYW5rX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9j YWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjdHlwZV90IHdjdHlwZV9sIChfX2NvbnN0IGNoYXIg Kl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVy biBpbnQgaXN3Y3R5cGVfbCAod2ludF90IF9fd2MsIHdjdHlwZV90IF9fZGVzYywgX19sb2NhbGVf dCBfX2xvY2FsZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB3aW50X3QgdG93bG93ZXJf bCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiB3 aW50X3QgdG93dXBwZXJfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93 ICgpOwoKCgpleHRlcm4gd2N0cmFuc190IHdjdHJhbnNfbCAoX19jb25zdCBjaGFyICpfX3Byb3Bl cnR5LCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3Qg dG93Y3RyYW5zX2wgKHdpbnRfdCBfX3djLCB3Y3RyYW5zX3QgX19kZXNjLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKfQojIDUzICIv dXNyL2luY2x1ZGUvYysrLzMuMi4xL2N3Y3R5cGUiIDIgMwojIDc3ICIvdXNyL2luY2x1ZGUvYysr LzMuMi4xL2N3Y3R5cGUiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVz aW5nIDo6d2N0eXBlX3Q7CiAgdXNpbmcgOjp3Y3RyYW5zX3Q7CgogIHVzaW5nIDo6aXN3YWxudW07 CiAgdXNpbmcgOjppc3dhbHBoYTsKICB1c2luZyA6Omlzd2JsYW5rOwogIHVzaW5nIDo6aXN3Y250 cmw7CiAgdXNpbmcgOjppc3dkaWdpdDsKICB1c2luZyA6Omlzd2dyYXBoOwogIHVzaW5nIDo6aXN3 bG93ZXI7CiAgdXNpbmcgOjppc3dwcmludDsKICB1c2luZyA6Omlzd3ByaW50OwogIHVzaW5nIDo6 aXN3cHVuY3Q7CiAgdXNpbmcgOjppc3dzcGFjZTsKICB1c2luZyA6Omlzd3VwcGVyOwogIHVzaW5n IDo6aXN3eGRpZ2l0OwogIHVzaW5nIDo6aXN3Y3R5cGU7CiAgdXNpbmcgOjp0b3dsb3dlcjsKICB1 c2luZyA6OnRvd3VwcGVyOwogIHVzaW5nIDo6dG93Y3RyYW5zOwogIHVzaW5nIDo6d2N0cmFuczsK ICB1c2luZyA6OndjdHlwZTsKfQojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvbG9j YWxlX2ZhY2V0cy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2lvcyIgMSAzCiMg NDggIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKbmFt ZXNwYWNlIHN0ZAp7CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIHN0cnVjdCBfX3BhZDsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2kzODYtc2xhY2t3YXJlLWxpbnV4L2JpdHMvY3R5cGVfYmFzZS5oIiAxIDMKIyAzNiAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9pMzg2LXNsYWNrd2FyZS1saW51eC9iaXRzL2N0eXBlX2Jhc2UuaCIg MwogIHN0cnVjdCBjdHlwZV9iYXNlCiAgewoKICAgIHR5cGVkZWYgY29uc3QgaW50KiBfX3RvX3R5 cGU7CgoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1hc2s7CiAgICBzdGF0aWMgY29uc3Qg bWFzayB1cHBlciA9IF9JU3VwcGVyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSBfSVNs b3dlcjsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFscGhhID0gX0lTYWxwaGE7CiAgICBzdGF0aWMg Y29uc3QgbWFzayBkaWdpdCA9IF9JU2RpZ2l0OwogICAgc3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0 ID0gX0lTeGRpZ2l0OwogICAgc3RhdGljIGNvbnN0IG1hc2sgc3BhY2UgPSBfSVNzcGFjZTsKICAg IHN0YXRpYyBjb25zdCBtYXNrIHByaW50ID0gX0lTcHJpbnQ7CiAgICBzdGF0aWMgY29uc3QgbWFz ayBncmFwaCA9IF9JU2dyYXBoOwogICAgc3RhdGljIGNvbnN0IG1hc2sgY250cmwgPSBfSVNjbnRy bDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHB1bmN0ID0gX0lTcHVuY3Q7CiAgICBzdGF0aWMgY29u c3QgbWFzayBhbG51bSA9IF9JU2FsbnVtOwogIH07CiMgNjQgIi91c3IvaW5jbHVkZS9jKysvMy4y LjEvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgY2xhc3MgX19jdHlwZV9hYnN0cmFjdF9iYXNlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQs IHB1YmxpYyBjdHlwZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFy VCBjaGFyX3R5cGU7CgogICAgICBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19j KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19pcyhfX20sIF9fYyk7IH0KCiAgICAgIGNv bnN0IGNoYXJfdHlwZSoKICAgICAgaXMoY29uc3QgY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFy X3R5cGUgKl9faGksIG1hc2sgKl9fdmVjKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19p cyhfX2xvLCBfX2hpLCBfX3ZlYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgc2Nh bl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f aGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3NjYW5faXMoX19tLCBfX2xvLCBfX2hp KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX25vdChtYXNrIF9fbSwgY29u c3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX3NjYW5fbm90KF9fbSwgX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJf dHlwZQogICAgICB0b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX3RvdXBwZXIoX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b3Vw cGVyKGNoYXJfdHlwZSAqX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUK ICAgICAgdG9sb3dlcihjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k b190b2xvd2VyKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgdG9sb3dlcihj aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9fdG9sb3dlcihfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAg IHdpZGVuKGNoYXIgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2Mp OyB9CgogICAgICBjb25zdCBjaGFyKgogICAgICB3aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25z dCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fdG8pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX3dpZGVuKF9fbG8sIF9faGksIF9fdG8pOyB9CgogICAgICBjaGFyCiAgICAgIG5hcnJvdyhj aGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k b19uYXJyb3coX19jLCBfX2RmYXVsdCk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAg bmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAg ICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIgKl9fdG8pIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmRvX25hcnJvdyhfX2xvLCBfX2hpLCBfX2RmYXVsdCwgX190byk7IH0KCiAgICBwcm90 ZWN0ZWQ6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9fY3R5cGVfYWJzdHJhY3RfYmFzZShzaXplX3Qg X19yZWZzID0gMCk6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIHZpcnR1YWwKICAg ICAgfl9fY3R5cGVfYWJzdHJhY3RfYmFzZSgpIHsgfQoKICAgICAgdmlydHVhbCBib29sCiAgICAg IGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25z dCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgIG1hc2sqIF9fdmVjKSBjb25zdCA9IDA7Cgog ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwg Y29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog X19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRv X3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFy X3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1 YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29u c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQog ICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25z dCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFy X3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRv X3dpZGVuKGNoYXIpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAg ZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwKICAgICAgICAgICAg ICAgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAg ICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdCA9IDA7CgogICAgICB2 aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSog X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1 bHQsIGNoYXIqIF9fZGVzdCkgY29uc3QgPSAwOwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlIDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxf Q2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY3R5cGU6Om1hc2sgbWFzazsKCiAgICAgIHN0YXRpYyBs b2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoc2l6ZV90IF9fcmVmcyA9 IDApIDogX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4oX19yZWZzKSB7IH0KCiAgIHByb3Rl Y3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAog ICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFs IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25z dCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29u c3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUq IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0 IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSog X19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlIF9fYykgY29u c3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91cHBlcihjaGFy X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFs IGNoYXJfdHlwZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoKICAgICAg dmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xv LCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUK ICAgICAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy KgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFy X3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93 KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo YXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hh cl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0 KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6 aWQgY3R5cGU8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjdHlwZTxjaGFy PiA6IHB1YmxpYyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8Y2hhcj4KICAgIHsKICAgIHB1YmxpYzoK CiAgICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKICAgICAgX19j X2xvY2FsZSBfTV9jX2xvY2FsZV9jdHlwZTsKICAgICAgYm9vbCBfTV9kZWw7CiAgICAgIF9fdG9f dHlwZSBfTV90b3VwcGVyOwogICAgICBfX3RvX3R5cGUgX01fdG9sb3dlcjsKICAgICAgY29uc3Qg bWFzayogX01fdGFibGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsK ICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCB0YWJsZV9zaXplID0gMSArIHN0YXRpY19jYXN0PHVu c2lnbmVkIGNoYXI+KC0xKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKGNvbnN0IG1hc2sq IF9fdGFibGUgPSAwLCBib29sIF9fZGVsID0gZmFsc2UsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAg ICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBtYXNrKiBf X3RhYmxlID0gMCwgYm9vbCBfX2RlbCA9IGZhbHNlLAogICAgICAgICAgICBzaXplX3QgX19yZWZz ID0gMCk7CgogICAgICBpbmxpbmUgYm9vbAogICAgICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNv bnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIGlzKGNvbnN0IGNoYXIqIF9fbG8s IGNvbnN0IGNoYXIqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25z dCBjaGFyKgogICAgICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBj aGFyKiBfX2hpKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBzY2FuX25v dChtYXNrIF9fbSwgY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7Cgog ICAgcHJvdGVjdGVkOgogICAgICBjb25zdCBtYXNrKgogICAgICB0YWJsZSgpIGNvbnN0IHRocm93 KCkKICAgICAgeyByZXR1cm4gX01fdGFibGU7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBtYXNrKgog ICAgICBjbGFzc2ljX3RhYmxlKCkgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBl KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBf X2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNv bnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykg Y29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyht YXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNv bnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1h c2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190 b3VwcGVyKGNoYXJfdHlwZSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoK ICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkg Y29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlw ZSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dl cihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFyKSBjb25zdDsKCiAgICAgIHZpcnR1 YWwgY29uc3QgY2hhcioKICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hh ciogX19oaSwgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyCiAg ICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgdmly dHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9f bG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQs IGNoYXIqIF9fZGVzdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjdHlw ZTxjaGFyPiYKICAgIHVzZV9mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYgX19sb2Mp OwoKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGN0eXBlPHdjaGFyX3Q+IDogcHVibGljIF9fY3R5 cGVfYWJzdHJhY3RfYmFzZTx3Y2hhcl90PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRl ZiB3Y2hhcl90IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB3Y3R5cGVfdCBfX3dtYXNrX3R5cGU7 CgogICAgcHJvdGVjdGVkOgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2N0eXBlOwoKICAg IHB1YmxpYzoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAg ICAgY3R5cGUoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUo X19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAg ICAgIF9fd21hc2tfdHlwZQogICAgICBfTV9jb252ZXJ0X3RvX3dtYXNrKGNvbnN0IG1hc2sgX19t KSBjb25zdDsKCiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCk7CgogICAgICB2aXJ0dWFsIGJv b2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoKICAgICAgdmly dHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywg Y29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CgogICAgICB2aXJ0dWFs IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90 eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBj b25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5 cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29u c3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91cHBlcihjaGFy X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFs IGNoYXJfdHlwZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNv bnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAg ICBkb193aWRlbihjaGFyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAg ZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBf X2Rlc3QpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5 cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq CiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSog X19oaSwKICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29uc3Q7 CgogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgY29uc3QgY3R5cGU8d2NoYXJfdD4mCiAgICB1c2Vf ZmFjZXQ8Y3R5cGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmIF9fbG9jKTsKCgoKIyAxICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL2kzODYtc2xhY2t3YXJlLWxpbnV4L2JpdHMvY3R5cGVfaW5saW5l LmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYtc2xhY2t3YXJlLWxpbnV4 L2JpdHMvY3R5cGVfaW5saW5lLmgiIDMKICBib29sCiAgY3R5cGU8Y2hhcj46OgogIGlzKG1hc2sg X19tLCBjaGFyIF9fYykgY29uc3QKICB7IHJldHVybiBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNp Z25lZCBjaGFyPihfX2MpXSAmIF9fbTsgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoK ICBpcyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoLCBtYXNrKiBfX3ZlYykg Y29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gpCiAgICAgICpfX3ZlYysrID0gX01f dGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KyspXTsKICAgIHJldHVybiBf X2hpZ2g7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBzY2FuX2lzKG1hc2sg X19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAogIHsKICAg IHdoaWxlIChfX2xvdyA8IF9faGlnaAogICAgICAgICAgICYmICEoX01fdGFibGVbc3RhdGljX2Nh c3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0gJiBfX20pKQogICAgICArK19fbG93OwogICAgcmV0 dXJuIF9fbG93OwogIH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9ub3Qo bWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAg ewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoCiAgICAgICAgICAgJiYgKF9NX3RhYmxlW3N0YXRp Y19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdyldICYgX19tKSAhPSAwKQogICAgICArK19fbG93 OwogICAgcmV0dXJuIF9fbG93OwogIH0KIyA0MDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0 cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg Y2xhc3MgY3R5cGVfYnluYW1lIDogcHVibGljIGN0eXBlPF9DaGFyVD4KICAgIHsKICAgIHB1Ymxp YzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAg Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHBy b3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGVfYnluYW1lKCkgeyB9OwogICAgfTsK CgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0 IGNoYXIqLCBzaXplX3QgcmVmcyk7CgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTx3Y2hh cl90Pjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgoKIyAxICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvY29kZWN2dC5oIiAxIDMKIyA0NSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIuMS9iaXRzL2NvZGVjdnQuaCIgMwoKCiAgY2xhc3MgY29kZWN2dF9iYXNlCiAgewog IHB1YmxpYzoKICAgIGVudW0gcmVzdWx0CiAgICB7CiAgICAgIG9rLAogICAgICBwYXJ0aWFsLAog ICAgICBlcnJvciwKICAgICAgbm9jb252CiAgICB9OwogIH07CgoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBj bGFzcyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZQogICAgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwg cHVibGljIGNvZGVjdnRfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2Rl Y3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5 cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0 YXRlVCBzdGF0ZV90eXBlOwoKCiAgICAgIHJlc3VsdAogICAgICBvdXQoc3RhdGVfdHlwZSYgX19z dGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgIGNvbnN0IGludGVybl90 eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAg ICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgIGV4 dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMt PmRvX291dChfX3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0K CiAgICAgIHJlc3VsdAogICAgICB1bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90 eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICAgZXh0ZXJuX3R5 cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Vuc2hpZnQoX19z dGF0ZSwgX190byxfX3RvX2VuZCxfX3RvX25leHQpOyB9CgogICAgICByZXN1bHQKICAgICAgaW4o c3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAg Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9t X25leHQsCiAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQs CiAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7CiAgICAgICAg cmV0dXJuIHRoaXMtPmRvX2luKF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25l eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQp OwogICAgICB9CgogICAgICBpbnQKICAgICAgZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX2VuY29kaW5nKCk7IH0KCiAgICAgIGJvb2wKICAgICAgYWx3YXlz X25vY29udigpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fYWx3YXlzX25v Y29udigpOyB9CgogICAgICBpbnQKICAgICAgbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmIF9fc3Rh dGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBleHRlcm5f dHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f bGVuZ3RoKF9fc3RhdGUsIF9fZnJvbSwgX19lbmQsIF9fbWF4KTsgfQoKICAgICAgaW50CiAgICAg IG1heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX21heF9s ZW5ndGgoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jb2RlY3Z0 X2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMp IHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UoKSB7IH0K CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBj b25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUq IF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAg ICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAg ZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0 CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8s CiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9f dG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3Rh dGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAg Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9t X25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19l bmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAg ICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkgPSAwOwoKICAg ICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpID0g MDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwg Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90 eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAog ICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKSA9IDA7CiAgICB9OwoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRl VD4KICAgIGNsYXNzIGNvZGVjdnQKICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNl PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5 cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5U IGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0 eXBlZGVmIF9TdGF0ZVQgc3RhdGVfdHlwZTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2Nh bGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0g MCkKICAgICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCwgX0V4dGVyblQsIF9T dGF0ZVQ+IChfX3JlZnMpIHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+ Y29kZWN2dCgpIHsgfQoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5 cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25z dCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4 dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQs CiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90 eXBlKiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJu X3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9f aW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYg X19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSog X190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAg IHZpcnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAg ICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3Qg ZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBf X2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21h eF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu dGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgbG9jYWxlOjpp ZCBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD46OmlkOwoKCiAgdGVtcGxhdGU8 PgogICAgY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+CiAgICA6IHB1YmxpYyBf X2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+CiAgICB7CiAgICBw dWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgY2hh ciBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICBw dWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAg Y29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFs CiAgICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3Rh dGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAg IGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJv bV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3Rv X2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAg IHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0 ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBl eHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAg ICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAog ICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5 cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90 eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0 OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoK ICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygp OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBj b25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5 cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAg ZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBj bGFzcyBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29k ZWN2dF9hYnN0cmFjdF9iYXNlPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1 YmxpYzoKCiAgICAgIHR5cGVkZWYgd2NoYXJfdCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBj aGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAg IHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAg ICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1 YWwKICAgICAgfmNvZGVjdnQoKTsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChz dGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAg ICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19m cm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9f dG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAg ICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLAog ICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQs CiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAg dmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwKICAgICAgICAg ICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21f ZW5kLAogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAg ICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAg ICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAg IGludCBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsCiAgICAgIGJv b2wgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsCiAgICAg IGludCBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zy b20sCiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3Qg X19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNv bnN0IHRocm93KCk7CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBl bmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1l IDogcHVibGljIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPgogICAgewogICAg cHVibGljOgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0X2J5bmFtZShjb25zdCBjaGFyKiwg c2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9T dGF0ZVQ+KF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5j b2RlY3Z0X2J5bmFtZSgpIHsgfQogICAgfTsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9pMzg2LXNsYWNrd2FyZS1saW51eC9iaXRzL2NvZGVjdnRfc3BlY2lhbGl6YXRpb25zLmgiIDEg MwojIDQ2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYtc2xhY2t3YXJlLWxpbnV4L2JpdHMv Y29kZWN2dF9zcGVjaWFsaXphdGlvbnMuaCIgMwogIGNsYXNzIF9fZW5jX3RyYWl0cwogIHsKICBw dWJsaWM6CgoKCiAgICB0eXBlZGVmIGljb252X3QgX19kZXNjX3R5cGU7CgogIHByb3RlY3RlZDoK CgogICAgc3RhdGljIGNvbnN0IGludCBfU19tYXhfc2l6ZSA9IDMyOwoKICAgIGNoYXIgX01faW50 X2VuY1tfU19tYXhfc2l6ZV07CgogICAgY2hhciBfTV9leHRfZW5jW19TX21heF9zaXplXTsKCgog ICAgX19kZXNjX3R5cGUgX01faW5fZGVzYzsKCiAgICBfX2Rlc2NfdHlwZSBfTV9vdXRfZGVzYzsK CgogICAgaW50IF9NX2V4dF9ib207CgoKICAgIGludCBfTV9pbnRfYm9tOwoKICBwdWJsaWM6CiAg ICBleHBsaWNpdCBfX2VuY190cmFpdHMoKQogICAgOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVz YygwKSwgX01fZXh0X2JvbSgwKSwgX01faW50X2JvbSgwKQogICAgewogICAgICBtZW1zZXQoX01f aW50X2VuYywgMCwgX1NfbWF4X3NpemUpOwogICAgICBtZW1zZXQoX01fZXh0X2VuYywgMCwgX1Nf bWF4X3NpemUpOwogICAgfQoKICAgIGV4cGxpY2l0IF9fZW5jX3RyYWl0cyhjb25zdCBjaGFyKiBf X2ludCwgY29uc3QgY2hhciogX19leHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f aWJvbSA9IDAsIGludCBfX2Vib20gPSAwKQogICAgOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVz YygwKSwgX01fZXh0X2JvbSgwKSwgX01faW50X2JvbSgwKQogICAgewogICAgICBzdHJuY3B5KF9N X2ludF9lbmMsIF9faW50LCBfU19tYXhfc2l6ZSk7CiAgICAgIHN0cm5jcHkoX01fZXh0X2VuYywg X19leHQsIF9TX21heF9zaXplKTsKICAgIH0KCgoKCgoKICAgIF9fZW5jX3RyYWl0cyhjb25zdCBf X2VuY190cmFpdHMmIF9fb2JqKTogX01faW5fZGVzYygwKSwgX01fb3V0X2Rlc2MoMCkKICAgIHsK ICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBfX29iai5fTV9pbnRfZW5jLCBfU19tYXhfc2l6ZSk7 CiAgICAgIHN0cm5jcHkoX01fZXh0X2VuYywgX19vYmouX01fZXh0X2VuYywgX1NfbWF4X3NpemUp OwogICAgICBfTV9leHRfYm9tID0gX19vYmouX01fZXh0X2JvbTsKICAgICAgX01faW50X2JvbSA9 IF9fb2JqLl9NX2ludF9ib207CiAgICB9CgoKICAgIF9fZW5jX3RyYWl0cyYKICAgIG9wZXJhdG9y PShjb25zdCBfX2VuY190cmFpdHMmIF9fb2JqKQogICAgewogICAgICBzdHJuY3B5KF9NX2ludF9l bmMsIF9fb2JqLl9NX2ludF9lbmMsIF9TX21heF9zaXplKTsKICAgICAgc3RybmNweShfTV9leHRf ZW5jLCBfX29iai5fTV9leHRfZW5jLCBfU19tYXhfc2l6ZSk7CiAgICAgIF9NX2luX2Rlc2MgPSAw OwogICAgICBfTV9vdXRfZGVzYyA9IDA7CiAgICAgIF9NX2V4dF9ib20gPSBfX29iai5fTV9leHRf Ym9tOwogICAgICBfTV9pbnRfYm9tID0gX19vYmouX01faW50X2JvbTsKICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQoKICAgIH5fX2VuY190cmFpdHMoKQogICAgewogICAgICBfX2Rlc2NfdHlwZSBf X2VyciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aWNvbnZfdD4oLTEpOwogICAgICBpZiAoX01faW5fZGVz YyAmJiBfTV9pbl9kZXNjICE9IF9fZXJyKQogICAgICAgIGljb252X2Nsb3NlKF9NX2luX2Rlc2Mp OwogICAgICBpZiAoX01fb3V0X2Rlc2MgJiYgX01fb3V0X2Rlc2MgIT0gX19lcnIpCiAgICAgICAg aWNvbnZfY2xvc2UoX01fb3V0X2Rlc2MpOwogICAgfQoKICAgIHZvaWQKICAgIF9NX2luaXQoKQog ICAgewogICAgICBjb25zdCBfX2Rlc2NfdHlwZSBfX2VyciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aWNv bnZfdD4oLTEpOwogICAgICBpZiAoIV9NX2luX2Rlc2MpCiAgICAgICAgewogICAgICAgICAgX01f aW5fZGVzYyA9IGljb252X29wZW4oX01faW50X2VuYywgX01fZXh0X2VuYyk7CiAgICAgICAgICBp ZiAoX01faW5fZGVzYyA9PSBfX2VycikKICAgICAgICAgICAgX190aHJvd19ydW50aW1lX2Vycm9y KCJjcmVhdGluZyBpY29udiBpbnB1dCBkZXNjcmlwdG9yIGZhaWxlZC4iKTsKICAgICAgICB9CiAg ICAgIGlmICghX01fb3V0X2Rlc2MpCiAgICAgICAgewogICAgICAgICAgX01fb3V0X2Rlc2MgPSBp Y29udl9vcGVuKF9NX2V4dF9lbmMsIF9NX2ludF9lbmMpOwogICAgICAgICAgaWYgKF9NX291dF9k ZXNjID09IF9fZXJyKQogICAgICAgICAgICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoImNyZWF0aW5n IGljb252IG91dHB1dCBkZXNjcmlwdG9yIGZhaWxlZC4iKTsKICAgICAgICB9CiAgICB9CgogICAg Ym9vbAogICAgX01fZ29vZCgpCiAgICB7CiAgICAgIGNvbnN0IF9fZGVzY190eXBlIF9fZXJyID0g cmVpbnRlcnByZXRfY2FzdDxpY29udl90PigtMSk7CiAgICAgIGJvb2wgX190ZXN0ID0gX01faW5f ZGVzYyAmJiBfTV9pbl9kZXNjICE9IF9fZXJyOwogICAgICBfX3Rlc3QgJj0gX01fb3V0X2Rlc2Mg JiYgX01fb3V0X2Rlc2MgIT0gX19lcnI7CiAgICAgIHJldHVybiBfX3Rlc3Q7CiAgICB9CgogICAg Y29uc3QgX19kZXNjX3R5cGUqCiAgICBfTV9nZXRfaW5fZGVzY3JpcHRvcigpCiAgICB7IHJldHVy biAmX01faW5fZGVzYzsgfQoKICAgIGNvbnN0IF9fZGVzY190eXBlKgogICAgX01fZ2V0X291dF9k ZXNjcmlwdG9yKCkKICAgIHsgcmV0dXJuICZfTV9vdXRfZGVzYzsgfQoKICAgIGludAogICAgX01f Z2V0X2V4dGVybmFsX2JvbSgpCiAgICB7IHJldHVybiBfTV9leHRfYm9tOyB9CgogICAgaW50CiAg ICBfTV9nZXRfaW50ZXJuYWxfYm9tKCkKICAgIHsgcmV0dXJuIF9NX2ludF9ib207IH0KCiAgICBj b25zdCBjaGFyKgogICAgX01fZ2V0X2ludGVybmFsX2VuYygpCiAgICB7IHJldHVybiBfTV9pbnRf ZW5jOyB9CgogICAgY29uc3QgY2hhcioKICAgIF9NX2dldF9leHRlcm5hbF9lbmMoKQogICAgeyBy ZXR1cm4gX01fZXh0X2VuYzsgfQogIH07CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5U LCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGNsYXNzIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5U LCBfX2VuY190cmFpdHM+CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50 ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5 cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5U IGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0 eXBlZGVmIF9fZW5jX3RyYWl0cyBzdGF0ZV90eXBlOwogICAgICB0eXBlZGVmIF9fZW5jX3RyYWl0 czo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAgIHR5cGVkZWYgX19lbmNfdHJhaXRzIF9f ZW5jX3R5cGU7CgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAog ICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFj dF9iYXNlPGludGVybl90eXBlLCBleHRlcm5fdHlwZSwgc3RhdGVfdHlwZT4oX19yZWZzKQogICAg ICB7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoX19lbmNfdHlwZSogX19lbmMsIHNp emVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGludGVybl90 eXBlLCBleHRlcm5fdHlwZSwgc3RhdGVfdHlwZT4oX19yZWZzKQogICAgICB7IH0KCiAgICBwcm90 ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKSB7IH0KCiAgICAgIHZpcnR1YWwg cmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlw ZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNv bnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSog X190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBf X3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChz dGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBl eHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0 IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zy b21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRl cm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5f dHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNv ZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlz X25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5n dGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAg ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7Cgog ICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICAg IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAg IGxvY2FsZTo6aWQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+ OjppZDsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UPgogICAgaW5saW5lIHNpemVfdAogICAg X19pY29udl9hZGFwdG9yKHNpemVfdCgqX19mdW5jKShpY29udl90LCBfVCwgc2l6ZV90KiwgY2hh cioqLCBzaXplX3QqKSwKICAgICAgICAgICAgICAgICAgICBpY29udl90IF9fY2QsIGNoYXIqKiBf X2luYnVmLCBzaXplX3QqIF9faW5ieXRlcywKICAgICAgICAgICAgICAgICAgICBjaGFyKiogX19v dXRidWYsIHNpemVfdCogX19vdXRieXRlcykKICAgIHsgcmV0dXJuIF9fZnVuYyhfX2NkLCAoX1Qp X19pbmJ1ZiwgX19pbmJ5dGVzLCBfX291dGJ1ZiwgX19vdXRieXRlcyk7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY29kZWN2dF9iYXNlOjpy ZXN1bHQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAg IGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAog ICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlw ZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlw ZSogX190b19lbmQsCiAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAg ICB7CiAgICAgIHJlc3VsdCBfX3JldCA9IGVycm9yOwogICAgICBpZiAoX19zdGF0ZS5fTV9nb29k KCkpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBzdGF0ZV90eXBlOjpfX2Rlc2NfdHlwZSBf X2Rlc2NfdHlwZTsKICAgICAgICAgIGNvbnN0IF9fZGVzY190eXBlKiBfX2Rlc2MgPSBfX3N0YXRl Ll9NX2dldF9vdXRfZGVzY3JpcHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZm11bHRp cGxlID0gc2l6ZW9mKGludGVybl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX2ZieXRlcyA9IF9f Zm11bHRpcGxlICogKF9fZnJvbV9lbmQgLSBfX2Zyb20pOwogICAgICAgICAgY29uc3Qgc2l6ZV90 IF9fdG11bHRpcGxlID0gc2l6ZW9mKGV4dGVybl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX3Ri eXRlcyA9IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190byk7CgoKCiAgICAgICAgICBjaGFy KiBfX2N0byA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fdG8pOwogICAgICAgICAgY2hhciog X19jZnJvbTsKICAgICAgICAgIHNpemVfdCBfX2NvbnY7CgoKCgoKCiAgICAgICAgICBpbnQgX19p bnRfYm9tID0gX19zdGF0ZS5fTV9nZXRfaW50ZXJuYWxfYm9tKCk7CiAgICAgICAgICBpZiAoX19p bnRfYm9tKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSA9IF9fZnJv bV9lbmQgLSBfX2Zyb207CiAgICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fY2ZpeGVkID0gc3Rh dGljX2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihpbnRlcm5fdHlw ZSkgKiAoX19zaXplICsgMSkpKTsKICAgICAgICAgICAgICBfX2NmaXhlZFswXSA9IHN0YXRpY19j YXN0PGludGVybl90eXBlPihfX2ludF9ib20pOwogICAgICAgICAgICAgIGNoYXJfdHJhaXRzPGlu dGVybl90eXBlPjo6Y29weShfX2NmaXhlZCArIDEsIF9fZnJvbSwgX19zaXplKTsKICAgICAgICAg ICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAg ICAgICAgIF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19mYnl0ZXMsICZfX2N0 bywgJl9fdGJ5dGVzKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fY2ZpeGVkID0gY29uc3RfY2FzdDxpbnRlcm5f dHlwZSo+KF9fZnJvbSk7CiAgICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8 Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3Io aWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLCAmX19mYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZfX2N0bywgJl9fdGJ5dGVzKTsKICAgICAgICAgICAgfQoKICAg ICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAg ICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9f Y2Zyb20pOwogICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJu X3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgX19yZXQgPSBvazsKICAgICAgICAgICAgfQog ICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fZmJ5dGVzIDwg X19mbXVsdGlwbGUgKiAoX19mcm9tX2VuZCAtIF9fZnJvbSkpCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRl cm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVy cHJldF9jYXN0PGV4dGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgICAgICBfX3JldCA9 IHBhcnRpYWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg ICAgICAgX19yZXQgPSBlcnJvcjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu IF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4 dGVyblQ+CiAgICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4 dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRl LCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5k LCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0 ID0gZXJyb3I7CiAgICAgIGlmIChfX3N0YXRlLl9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAg ICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAg Y29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9IF9fc3RhdGUuX01fZ2V0X2luX2Rlc2NyaXB0b3Io KTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlw ZSk7CiAgICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBf X3RvKTsKCgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o X190byk7CiAgICAgICAgICBzaXplX3QgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCpf X2Rlc2MsIF9fbnVsbCwgX19udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmX19jdG8sICZfX3RsZW4pOwoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90 KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0 X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgaWYgKF9fdGxlbiA9PSBf X3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pKQogICAgICAgICAgICAgICAgX19yZXQgPSBu b2NvbnY7CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190bGVuID09IDApCiAgICAgICAgICAgICAg ICBfX3JldCA9IG9rOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fcmV0ID0g cGFydGlhbDsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3JldCA9 IGVycm9yOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0X2Jhc2U6OnJl c3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAg ZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAg ICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSom IF9fZnJvbV9uZXh0LAogICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBf X3RvX2VuZCwKICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgewog ICAgICByZXN1bHQgX19yZXQgPSBlcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQog ICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNj X3R5cGU7CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9n ZXRfaW5fZGVzY3JpcHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0g c2l6ZW9mKGV4dGVybl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX2ZsZW4gPSBfX2ZtdWx0aXBs ZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0 aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX190bGVuID0gX190 bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0g cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAgICAgICAgICBjaGFyKiBfX2Nmcm9tOwog ICAgICAgICAgc2l6ZV90IF9fY29udjsKCgoKCgoKICAgICAgICAgIGludCBfX2V4dF9ib20gPSBf X3N0YXRlLl9NX2dldF9leHRlcm5hbF9ib20oKTsKICAgICAgICAgIGlmIChfX2V4dF9ib20pCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19zaXplID0gX19mcm9tX2VuZCAtIF9f ZnJvbTsKICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX19jZml4ZWQgPSBzdGF0aWNfY2FzdDxl eHRlcm5fdHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGV4dGVybl90eXBlKSAqIChfX3Np emUgKyAxKSkpOwogICAgICAgICAgICAgIF9fY2ZpeGVkWzBdID0gc3RhdGljX2Nhc3Q8ZXh0ZXJu X3R5cGU+KF9fZXh0X2JvbSk7CiAgICAgICAgICAgICAgY2hhcl90cmFpdHM8ZXh0ZXJuX3R5cGU+ Ojpjb3B5KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBfX3NpemUpOwogICAgICAgICAgICAgIF9fY2Zy b20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19j b252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmxlbiwgJl9fY3RvLCAmX190bGVuKTsK ICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg ZXh0ZXJuX3R5cGUqIF9fY2ZpeGVkID0gY29uc3RfY2FzdDxleHRlcm5fdHlwZSo+KF9fZnJvbSk7 CiAgICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVk KTsKICAgICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2Ms ICZfX2Nmcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19mbGVu LCAmX19jdG8sICZfX3RsZW4pOwogICAgICAgICAgICB9CgoKICAgICAgICAgIGlmIChfX2NvbnYg IT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0g cmVpbnRlcnByZXRfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAg ICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2N0byk7CiAg ICAgICAgICAgICAgX19yZXQgPSBvazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fZmxlbiA8IHN0YXRpY19jYXN0PHNpemVfdD4o X19mcm9tX2VuZCAtIF9fZnJvbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg IF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KF9fY2Zy b20pOwogICAgICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGludGVy bl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgICAgICBfX3JldCA9IHBhcnRpYWw7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19yZXQgPSBl cnJvcjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQK ICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2Vu Y29kaW5nKCkgY29uc3QgdGhyb3coKQogICAgewogICAgICBpbnQgX19yZXQgPSAwOwogICAgICBp ZiAoc2l6ZW9mKF9FeHRlcm5UKSA8PSBzaXplb2YoX0ludGVyblQpKQogICAgICAgIF9fcmV0ID0g c2l6ZW9mKF9JbnRlcm5UKS9zaXplb2YoX0V4dGVyblQpOwogICAgICByZXR1cm4gX19yZXQ7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAg IGJvb2wKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAg IGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiBmYWxzZTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQK ICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2xl bmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKICAg IHsgcmV0dXJuIG1pbihfX21heCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihfX2VuZCAtIF9fZnJvbSkp OyB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgog ICAgaW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAg ICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gMTsgfQojIDMzNSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2NvZGVjdnQuaCIgMiAzCiMgNDI2ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi4xL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgoKICBjbGFzcyBfX251 bV9iYXNlCiAgewogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0IGNoYXIgX1NfYXRvbXNb XTsKCiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3plcm8sCiAgICAgIF9NX2UgPSBfTV96ZXJvICsg MTAsCiAgICAgIF9NX0UgPSBfTV96ZXJvICsgMTEsCiAgICAgIF9NX3NpemUgPSAyMSArIDEKICAg IH07CgoKCiAgICBzdGF0aWMgYm9vbAogICAgX1NfZm9ybWF0X2Zsb2F0KGNvbnN0IGlvc19iYXNl JiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2QsCiAgICAgICAgICAgICAgICAgICAgc3Ry ZWFtc2l6ZSBfX3ByZWMpOwoKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfZm9ybWF0X2ludChjb25z dCBpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9kLCBjaGFyIF9fbW9kbCk7 CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0IDog cHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0No YXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdf dHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAgICAgIGNo YXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3Nl cDsKICAgICAgY29uc3QgY2hhciogX01fZ3JvdXBpbmc7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSog X01fdHJ1ZW5hbWU7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fZmFsc2VuYW1lOwoKICAgIHB1 YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDog bG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdCgpOyB9 CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90 IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6 ZV9udW1wdW5jdChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9wb2lu dCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsgfQoKICAg ICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGluZygp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0cmlu Z190eXBlCiAgICAgIHRydWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdHJ1 ZW5hbWUoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgZmFsc2VuYW1lKCkgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fZmFsc2VuYW1lKCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAg IHZpcnR1YWwKICAgICAgfm51bXB1bmN0KCk7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAg ICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGVjaW1hbF9wb2lu dDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhvdXNhbmRzX3NlcCgpIGNv bnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAgICAgIHZpcnR1YWwgc3Ry aW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7 IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJ1ZW5hbWUoKSBjb25zdAog ICAgICB7IHJldHVybiBfTV90cnVlbmFtZTsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQog ICAgICBkb19mYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9mYWxzZW5hbWU7IH0K CgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Ns b2MgPSBfX251bGwpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9j YWxlOjppZCBudW1wdW5jdDxfQ2hhclQ+OjppZDsKCiAgdGVtcGxhdGU8PgogICAgbnVtcHVuY3Q8 Y2hhcj46On5udW1wdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBudW1wdW5jdDxj aGFyPjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgoKICB0ZW1w bGF0ZTw+CiAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCk7CgogIHRlbXBsYXRlPD4K ICAgIHZvaWQKICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9f Y19sb2NhbGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNz IG51bXB1bmN0X2J5bmFtZSA6IHB1YmxpYyBudW1wdW5jdDxfQ2hhclQ+CiAgICB7CgogICAgICBf X2NfbG9jYWxlIF9NX2NfbG9jYWxlX251bXB1bmN0OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0 cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3RfYnluYW1lKGNvbnN0IGNo YXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbnVtcHVuY3Q8X0NoYXJUPihfX3Jl ZnMpCiAgICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVu Y3QsIF9fcyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfTV9jX2xvY2FsZV9udW1w dW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1 bmN0X2J5bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1w dW5jdCk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu SXRlcj4KICAgIGNsYXNzIG51bV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIF9f bnVtX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw ZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6 OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtX2dldChzaXplX3QgX19yZWZzID0gMCkg OiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0 ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0 ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh c2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2Vy ciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRl cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBl CiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p bywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3Yp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l cnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0 ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0 ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlw ZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f aW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgbG9uZyYgX192KSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJy LCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVy X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm IF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJf dHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um IF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3YpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIs IF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJf dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19p biwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0 KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9 CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19l bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2 b2lkKiYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQs IF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIH5udW1f Z2V0KCkgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fZXh0cmFjdF9mbG9hdChpdGVyX3R5 cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsCiAgICAgICAgICAg ICAgICAgICAgICAgc3RyaW5nJiBfX3h0cmMpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAg IF9NX2V4dHJhY3RfaW50KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNl Ojppb3N0YXRlJiwKICAgICAgICAgICAgICAgICAgICAgc3RyaW5nJiBfX3h0cmMsIGludCYgX19i YXNlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5 cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGJvb2wmKSBjb25z dDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVy X3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBsb25nJikgY29uc3Q7CgogICAg ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlv c19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgIHVuc2lnbmVk IHNob3J0JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRl cl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAog ICAgICAgICAgICAgdW5zaWduZWQgaW50JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw ZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyYpIGNvbnN0OwoKCiAg ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwg aW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBsb25nIGxv bmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5 cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAg ICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJf dHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZmxvYXQmKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jh c2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBkb3VibGUmKSBjb25z dDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJf dHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBs b25nIGRvdWJsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0 KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwKICAgICAgICAgICAgIHZvaWQqJikgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG51bV9nZXQ8X0NoYXJU LCBfSW5JdGVyPjo6aWQ7CiMgNzIxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvbG9jYWxl X2ZhY2V0cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl cj4KICAgIGNsYXNzIG51bV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIF9fbnVt X2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK ICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjpp ZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApIDog bG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVy X3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0K CiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwg Y2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0 KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAg ICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9f cywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJf dHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3Yp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3Yp OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf X2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsg fQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9f ZiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg ICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAg ICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0 KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRl cl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGNv bnN0IHZvaWQqIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19m LCBfX2ZpbGwsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1l IF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBlCiAgICAgICAgX01fY29udmVydF9mbG9hdChpdGVy X3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciBfX21vZCwgX1ZhbHVlVCBfX3YpIGNvbnN0OwoKICAgICAgdGVtcGxhdGU8 dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgICBpdGVyX3R5cGUKICAgICAgICBfTV9jb252ZXJ0X2lu dChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgX19tb2QsIGNoYXIgX19tb2RsLCBfVmFsdWVUIF9fdikgY29uc3Q7 CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fd2lkZW5fZmxvYXQoaXRlcl90eXBlLCBpb3NfYmFz ZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICAg ICAgaW50IF9fbGVuKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV93aWRlbl9pbnQo aXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY2hhciogX19jcywK ICAgICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAg ICAgX01faW5zZXJ0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGws CiAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fd3MsIGludCBfX2xlbikgY29uc3Q7 CgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1fcHV0KCkgeyB9OwoKICAgICAgdmlydHVhbCBpdGVy X3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxs LCBib29sIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQo aXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdDsK CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNl JiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWduZWQgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVh bCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUg X19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAg ICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWdu ZWQgbG9uZyBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19w dXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNv bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9z X2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBfX3YpIGNvbnN0OwoKICAgICAg dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFy X3R5cGUgX19maWxsLCBjb25zdCB2b2lkKiBfX3YpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGUg PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIG51bV9w dXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6 CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3Ry aW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKCiAgICAgIF9fY19sb2Nh bGUgX01fY19sb2NhbGVfY29sbGF0ZTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6 OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0ZShzaXplX3QgX19yZWZzID0gMCkK ICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9jX2xvY2FsZV9jb2xsYXRl ID0gX1NfY19sb2NhbGU7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoX19jX2xvY2Fs ZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZz KQogICAgICB7IF9NX2NfbG9jYWxlX2NvbGxhdGUgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2Mp OyB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBf Q2hhclQqIF9faGkxLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9D aGFyVCogX19oaTIpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2NvbXBhcmUoX19sbzEs IF9faGkxLCBfX2xvMiwgX19oaTIpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICB0cmFuc2Zv cm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX3RyYW5zZm9ybShfX2xvLCBfX2hpKTsgfQoKICAgICAgbG9uZwogICAg ICBoYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb19oYXNoKF9fbG8sIF9faGkpOyB9CgoKICAgICAgaW50CiAgICAg IF9NX2NvbXBhcmUoY29uc3QgX0NoYXJUKiwgY29uc3QgX0NoYXJUKikgY29uc3Q7CgogICAgICBz aXplX3QKICAgICAgX01fdHJhbnNmb3JtKF9DaGFyVCosIGNvbnN0IF9DaGFyVCosIHNpemVfdCkg Y29uc3Q7CgogIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29sbGF0ZSgpCiAgICAg IHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQoKICAgICAgdmly dHVhbCBpbnQKICAgICAgZG9fY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBfQ2hh clQqIF9faGkxLAogICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9D aGFyVCogX19oaTIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb190 cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0OwoK ICAgICAgdmlydHVhbCBsb25nCiAgICAgIGRvX2hhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25z dCBfQ2hhclQqIF9faGkpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgbG9jYWxlOjppZCBjb2xsYXRlPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAg aW50CiAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFy KikgY29uc3Q7CgogIHRlbXBsYXRlPD4KICAgIHNpemVfdAogICAgY29sbGF0ZTxjaGFyPjo6X01f dHJhbnNmb3JtKGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KSBjb25zdDsKCgogIHRlbXBsYXRl PD4KICAgIGludAogICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90 KiwgY29uc3Qgd2NoYXJfdCopIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBzaXplX3QKICAgIGNv bGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIHNp emVfdCkgY29uc3Q7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xs YXRlX2J5bmFtZSA6IHB1YmxpYyBjb2xsYXRlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKICAg ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf Q2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0ZV9ieW5hbWUo Y29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBjb2xsYXRlPF9DaGFy VD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2Fs ZV9jb2xsYXRlKTsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0 ZSwgX19zKTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29s bGF0ZV9ieW5hbWUoKSB7IH0KICAgIH07CgoKICBjbGFzcyB0aW1lX2Jhc2UKICB7CiAgcHVibGlj OgogICAgZW51bSBkYXRlb3JkZXIgeyBub19vcmRlciwgZG15LCBtZHksIHltZCwgeWRtIH07CiAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgX190aW1lcHVuY3QgOiBw dWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh clQgX19jaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJp bmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKCiAgICAgIHN0YXRpYyBjb25z dCBfQ2hhclQqIF9TX3RpbWV6b25lc1sxNF07CgogICAgcHJvdGVjdGVkOgogICAgICBfX2NfbG9j YWxlIF9NX2NfbG9jYWxlX3RpbWVwdW5jdDsKICAgICAgY2hhciogX01fbmFtZV90aW1lcHVuY3Q7 CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCog X01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX3RpbWVfZm9ybWF0Owog ICAgICBjb25zdCBfQ2hhclQqIF9NX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJU KiBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfdGltZV9l cmFfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2FtOwogICAgICBjb25zdCBfQ2hhclQq IF9NX3BtOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2FtX3BtX2Zvcm1hdDsKCgogICAgICBjb25z dCBfQ2hhclQqIF9NX2RheTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MjsKICAgICAgY29u c3QgX0NoYXJUKiBfTV9kYXkzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTQ7CiAgICAgIGNv bnN0IF9DaGFyVCogX01fZGF5NTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk2OwogICAgICBj b25zdCBfQ2hhclQqIF9NX2RheTc7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTE7CiAg ICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2EyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9h MzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f ZGF5X2E1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNjsKICAgICAgY29uc3QgX0NoYXJU KiBfTV9kYXlfYTc7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDAxOwogICAgICBjb25z dCBfQ2hhclQqIF9NX21vbnRoMDI7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwMzsKICAg ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRo MDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNjsKICAgICAgY29uc3QgX0NoYXJUKiBf TV9tb250aDA3OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDg7CiAgICAgIGNvbnN0IF9D aGFyVCogX01fbW9udGgwOTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDEwOwogICAgICBj b25zdCBfQ2hhclQqIF9NX21vbnRoMTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgxMjsK CgogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwMTsKICAgICAgY29uc3QgX0NoYXJUKiBf TV9tb250aF9hMDI7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTAzOwogICAgICBjb25z dCBfQ2hhclQqIF9NX21vbnRoX2EwNDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDU7 CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA2OwogICAgICBjb25zdCBfQ2hhclQqIF9N X21vbnRoX2EwNzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDg7CiAgICAgIGNvbnN0 IF9DaGFyVCogX01fbW9udGhfYTA5OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMDsK ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f bW9udGhfYTEyOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgX190aW1lcHVuY3Qo c2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsK ICAgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IG5ldyBjaGFyWzJdOwogICAgICAgIHN0cmNweShf TV9uYW1lX3RpbWVwdW5jdCwgIkMiKTsKICAgICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgp OwogICAgICB9CgogICAgICBleHBsaWNpdAogICAgICBfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9f Y2xvYywgY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6 OmZhY2V0KF9fcmVmcykKICAgICAgewogICAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gbmV3IGNo YXJbc3RybGVuKF9fcykgKyAxXTsKICAgICAgICBzdHJjcHkoX01fbmFtZV90aW1lcHVuY3QsIF9f cyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKICAgICAgfQoKICAg ICAgdm9pZAogICAgICBfTV9wdXQoX0NoYXJUKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3Qg X0NoYXJUKiBfX2Zvcm1hdCwKICAgICAgICAgICAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdDsKCiAg ICAgIHZvaWQKICAgICAgX01fZGF0ZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoqIF9fZGF0ZSkgY29u c3QKICAgICAgewoKICAgICAgICBfX2RhdGVbMF0gPSBfTV9kYXRlX2Zvcm1hdDsKICAgICAgICBf X2RhdGVbMV0gPSBfTV9kYXRlX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAg X01fdGltZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoqIF9fdGltZSkgY29uc3QKICAgICAgewoKICAg ICAgICBfX3RpbWVbMF0gPSBfTV90aW1lX2Zvcm1hdDsKICAgICAgICBfX3RpbWVbMV0gPSBfTV90 aW1lX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fYW1wbShjb25zdCBf Q2hhclQqKiBfX2FtcG0pIGNvbnN0CiAgICAgIHsKICAgICAgICBfX2FtcG1bMF0gPSBfTV9hbTsK ICAgICAgICBfX2FtcG1bMV0gPSBfTV9wbTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9k YXRlX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX2R0KSBjb25zdAogICAgICB7CgogICAg ICAgIF9fZHRbMF0gPSBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAgICAgIF9fZHRbMV0gPSBfTV9k YXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9kYXlzKGNv bnN0IF9DaGFyVCoqIF9fZGF5cykgY29uc3QKICAgICAgewogICAgICAgIF9fZGF5c1swXSA9IF9N X2RheTE7CiAgICAgICAgX19kYXlzWzFdID0gX01fZGF5MjsKICAgICAgICBfX2RheXNbMl0gPSBf TV9kYXkzOwogICAgICAgIF9fZGF5c1szXSA9IF9NX2RheTQ7CiAgICAgICAgX19kYXlzWzRdID0g X01fZGF5NTsKICAgICAgICBfX2RheXNbNV0gPSBfTV9kYXk2OwogICAgICAgIF9fZGF5c1s2XSA9 IF9NX2RheTc7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fZGF5c19hYmJyZXZpYXRlZChj b25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0CiAgICAgIHsKICAgICAgICBfX2RheXNbMF0gPSBf TV9kYXlfYTE7CiAgICAgICAgX19kYXlzWzFdID0gX01fZGF5X2EyOwogICAgICAgIF9fZGF5c1sy XSA9IF9NX2RheV9hMzsKICAgICAgICBfX2RheXNbM10gPSBfTV9kYXlfYTQ7CiAgICAgICAgX19k YXlzWzRdID0gX01fZGF5X2E1OwogICAgICAgIF9fZGF5c1s1XSA9IF9NX2RheV9hNjsKICAgICAg ICBfX2RheXNbNl0gPSBfTV9kYXlfYTc7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fbW9u dGhzKGNvbnN0IF9DaGFyVCoqIF9fbW9udGhzKSBjb25zdAogICAgICB7CiAgICAgICAgX19tb250 aHNbMF0gPSBfTV9tb250aDAxOwogICAgICAgIF9fbW9udGhzWzFdID0gX01fbW9udGgwMjsKICAg ICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRoMDM7CiAgICAgICAgX19tb250aHNbM10gPSBfTV9t b250aDA0OwogICAgICAgIF9fbW9udGhzWzRdID0gX01fbW9udGgwNTsKICAgICAgICBfX21vbnRo c1s1XSA9IF9NX21vbnRoMDY7CiAgICAgICAgX19tb250aHNbNl0gPSBfTV9tb250aDA3OwogICAg ICAgIF9fbW9udGhzWzddID0gX01fbW9udGgwODsKICAgICAgICBfX21vbnRoc1s4XSA9IF9NX21v bnRoMDk7CiAgICAgICAgX19tb250aHNbOV0gPSBfTV9tb250aDEwOwogICAgICAgIF9fbW9udGhz WzEwXSA9IF9NX21vbnRoMTE7CiAgICAgICAgX19tb250aHNbMTFdID0gX01fbW9udGgxMjsKICAg ICAgfQoKICAgICAgdm9pZAogICAgICBfTV9tb250aHNfYWJicmV2aWF0ZWQoY29uc3QgX0NoYXJU KiogX19tb250aHMpIGNvbnN0CiAgICAgIHsKICAgICAgICBfX21vbnRoc1swXSA9IF9NX21vbnRo X2EwMTsKICAgICAgICBfX21vbnRoc1sxXSA9IF9NX21vbnRoX2EwMjsKICAgICAgICBfX21vbnRo c1syXSA9IF9NX21vbnRoX2EwMzsKICAgICAgICBfX21vbnRoc1szXSA9IF9NX21vbnRoX2EwNDsK ICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21vbnRoX2EwNTsKICAgICAgICBfX21vbnRoc1s1XSA9 IF9NX21vbnRoX2EwNjsKICAgICAgICBfX21vbnRoc1s2XSA9IF9NX21vbnRoX2EwNzsKICAgICAg ICBfX21vbnRoc1s3XSA9IF9NX21vbnRoX2EwODsKICAgICAgICBfX21vbnRoc1s4XSA9IF9NX21v bnRoX2EwOTsKICAgICAgICBfX21vbnRoc1s5XSA9IF9NX21vbnRoX2ExMDsKICAgICAgICBfX21v bnRoc1sxMF0gPSBfTV9tb250aF9hMTE7CiAgICAgICAgX19tb250aHNbMTFdID0gX01fbW9udGhf YTEyOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5fX3RpbWVw dW5jdCgpCiAgICAgIHsKICAgICAgICBkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CiAgICAg ICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOwogICAgICB9CgoK ICAgICAgdm9pZAogICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xv YyA9IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2Nh bGU6OmlkIF9fdGltZXB1bmN0PF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgY29uc3Qg Y2hhcioKICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfU190aW1lem9uZXNbMTRdOwoKICB0ZW1wbGF0 ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVu Y3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVw dW5jdDxjaGFyPjo6X01fcHV0KGNoYXIqLCBzaXplX3QsIGNvbnN0IGNoYXIqLCBjb25zdCB0bSop IGNvbnN0OwoKCiAgdGVtcGxhdGU8PgogICAgY29uc3Qgd2NoYXJfdCoKICAgIF9fdGltZXB1bmN0 PHdjaGFyX3Q+OjpfU190aW1lem9uZXNbMTRdOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBf X3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBf X2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6 X01fcHV0KHdjaGFyX3QqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB0bSopIGNvbnN0OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4KICAgIGNvbnN0IF9DaGFyVCogX190aW1lcHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpv bmVzWzE0XTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K ICAgIGNsYXNzIHRpbWVfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jh c2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg ICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8 X0NoYXJUPiBfX3N0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAg ICBleHBsaWNpdAogICAgICB0aW1lX2dldChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2Nh bGU6OmZhY2V0IChfX3JlZnMpIHsgfQoKICAgICAgZGF0ZW9yZGVyCiAgICAgIGRhdGVfb3JkZXIo KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kYXRlX29yZGVyKCk7IH0KCiAgICAgIGl0 ZXJfdHlwZQogICAgICBnZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg dG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF90aW1lKF9fYmVnLCBf X2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X2Rh dGUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb19nZXRfZGF0ZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBf X3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX2Jl ZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9z X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fZ2V0X3dlZWtkYXkoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAg ICAgIGl0ZXJfdHlwZQogICAgICBnZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90 eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19n ZXRfbW9udGhuYW1lKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBp dGVyX3R5cGUKICAgICAgZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs IHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfeWVhcihfX2JlZywg X19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVh bAogICAgICB+dGltZV9nZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgZGF0ZW9yZGVyCiAgICAgIGRv X2RhdGVfb3JkZXIoKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dl dF90aW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29u c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUg X19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAg IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVh bCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5 cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg ICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf YmFzZSYsCiAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0 bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfeWVh cihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoK CiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFjdF9udW0oaXRlcl90eXBlJiBfX2JlZywgaXRlcl90 eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAgICAgICAgICAgaW50IF9fbWlu LCBpbnQgX19tYXgsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3R5 cGU8X0NoYXJUPiYgX19jdHlwZSwKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUmIF9fZXJyKSBjb25zdDsKCgoKICAgICAgdm9pZAogICAgICBfTV9leHRyYWN0X25hbWUoaXRl cl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNpemVfdCBfX2luZGV4bGVuLAog ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsKCgog ICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9fYmVnLCBp dGVyX3R5cGUmIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZm9ybWF0KSBjb25zdDsKICAgIH07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgdGlt ZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZSA6IHB1YmxpYyB0aW1l X2dldDxfQ2hhclQsIF9Jbkl0ZXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9D aGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CgogICAgICBl eHBsaWNpdAogICAgICB0aW1lX2dldF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMg PSAwKQogICAgICA6IHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4oX19yZWZzKSB7IH0KCiAgICBw cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0X2J5bmFtZSgpIHsgfQogICAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNs YXNzIHRpbWVfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAg IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw ZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAg ICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfcHV0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxv Y2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90 eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHRtKiBfX3Rt LAogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2JlZywgY29uc3QgX0NoYXJUKiBfX2VuZCkgY29u c3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf X2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgY29uc3QgdG0qIF9fdG0sIGNoYXIgX19m b3JtYXQsIGNoYXIgX19tb2QgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQo X19zLCBfX2lvLCBfX2ZpbGwsIF9fdG0sIF9fZm9ybWF0LCBfX21vZCk7IH0KCiAgICBwcm90ZWN0 ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0KCkKICAgICAgeyB9CgogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8s IGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgICAgICAgY2hhciBfX2Zv cm1hdCwgY2hhciBfX21vZCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCB0aW1lX3B1dDxfQ2hhclQsIF9P dXRJdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0 ZXI+CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWUgOiBwdWJsaWMgdGltZV9wdXQ8X0NoYXJULCBf T3V0SXRlcj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw ZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBleHBsaWNpdAogICAg ICB0aW1lX3B1dF9ieW5hbWUoY29uc3QgY2hhciogLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAg OiB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPihfX3JlZnMpCiAgICAgIHsgfTsKCiAgICBwcm90 ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0X2J5bmFtZSgpIHsgfQogICAgfTsK CgogIGNsYXNzIG1vbmV5X2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSBwYXJ0IHsgbm9uZSwg c3BhY2UsIHN5bWJvbCwgc2lnbiwgdmFsdWUgfTsKICAgIHN0cnVjdCBwYXR0ZXJuIHsgY2hhciBm aWVsZFs0XTsgfTsKCiAgICBzdGF0aWMgY29uc3QgcGF0dGVybiBfU19kZWZhdWx0X3BhdHRlcm47 CgoKCiAgICBzdGF0aWMgcGF0dGVybgogICAgX1NfY29uc3RydWN0X3BhdHRlcm4oY2hhciBfX3By ZWNlZGVzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKTsKICB9OwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjbGFzcyBtb25leXB1bmN0IDogcHVibGljIGxv Y2FsZTo6ZmFjZXQsIHB1YmxpYyBtb25leV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0 eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFy VD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0ludGw7CiAg ICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IGNoYXIq IF9NX2dyb3VwaW5nOwogICAgICBjaGFyX3R5cGUgX01fZGVjaW1hbF9wb2ludDsKICAgICAgY2hh cl90eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fY3Vycl9z eW1ib2w7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fcG9zaXRpdmVfc2lnbjsKICAgICAgY29u c3QgY2hhcl90eXBlKiBfTV9uZWdhdGl2ZV9zaWduOwogICAgICBpbnQgX01fZnJhY19kaWdpdHM7 CiAgICAgIHBhdHRlcm4gX01fcG9zX2Zvcm1hdDsKICAgICAgcGF0dGVybiBfTV9uZWdfZm9ybWF0 OwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChzaXplX3QgX19y ZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX21v bmV5cHVuY3QoKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChfX2NfbG9jYWxl IF9fY2xvYywgY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2Nh bGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jbG9j LCBfX3MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAg 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 ZSBfX2Nsb2MgPSBfX251bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciogX19uYW1lID0gX19udWxsKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgYm9vbCBfSW50bD4KICAgIGxvY2FsZTo6aWQgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6 aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNvbnN0IGJv b2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aW50bDsKCiAgdGVtcGxhdGU8PgogICAgbW9u ZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgbW9u ZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZv aWQKICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChf X2NfbG9jYWxlLCBjb25zdCBjaGFyKik7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5 cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwg Y29uc3QgY2hhciopOwoKCiAgdGVtcGxhdGU8PgogICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVl Pjo6fm1vbmV5cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgbW9uZXlwdW5jdDx3Y2hhcl90LCBm YWxzZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5cHVu Y3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIqKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDx3Y2hhcl90 LCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy Kik7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjbGFzcyBt b25leXB1bmN0X2J5bmFtZSA6IHB1YmxpYyBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+CiAgICB7 CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbW9uZXlwdW5jdDsKCiAgICBwdWJsaWM6CiAg ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8 X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGludGwgPSBfSW50 bDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9f cywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPihf X3JlZnMpCiAgICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbW9u ZXlwdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX01fY19sb2Nh bGVfbW9uZXlwdW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg ICAgfm1vbmV5cHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2Nf bG9jYWxlX21vbmV5cHVuY3QpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3RfYnluYW1lPF9DaGFyVCwgX0lu dGw+OjppbnRsOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+ CiAgICBjbGFzcyBtb25leV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVi bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0 ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190 eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBt b25leV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoK ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQs IGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX2dldChfX3MsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX3VuaXRzKTsgfQoKICAg ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJv b2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf X2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k b19nZXQoX19zLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX19kaWdpdHMpOyB9CgogICAg cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leV9nZXQoKSB7IH0KCiAgICAgIHZp cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19l bmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0OwoKICAgICAgdmlydHVh bCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwg Ym9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBtb25l eV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyBtb25leV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpm YWNldAogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg ICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmlu ZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAg ICBleHBsaWNpdAogICAgICBtb25leV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpm YWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19z LCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBjaGFyX3R5cGUgX19maWxs LCBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQo X19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlwZQog ICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAg ICAgICAgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25z dAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwg X19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leV9w dXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUg X19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAg ICAgICAgICBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90 eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9f aW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSYgX19k aWdpdHMpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+Ojpp ZDsKCgogIHN0cnVjdCBtZXNzYWdlc19iYXNlCiAgewogICAgdHlwZWRlZiBpbnQgY2F0YWxvZzsK ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlcyA6IHB1 YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbWVzc2FnZXNfYmFzZQogICAgewogICAgcHVibGlj OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0 cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgIHByb3RlY3RlZDoKCgogICAgICBfX2NfbG9j YWxlIF9NX2NfbG9jYWxlX21lc3NhZ2VzOwoKCiAgICAgIGNoYXIqIF9NX25hbWVfbWVzc2FnZXM7 CgoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNp dAogICAgICBtZXNzYWdlcyhzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0 KF9fcmVmcykKICAgICAgewogICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBuZXcgY2hhclsyXTsK ICAgICAgICBzdHJjcHkoX01fbmFtZV9tZXNzYWdlcywgIkMiKTsKICAgICAgICBfTV9jX2xvY2Fs ZV9tZXNzYWdlcyA9IF9TX2NfbG9jYWxlOwogICAgICB9CgoKICAgICAgZXhwbGljaXQKICAgICAg bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVm cyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsKICAgICAgICBfTV9u YW1lX21lc3NhZ2VzID0gbmV3IGNoYXJbc3RybGVuKF9fcykgKyAxXTsKICAgICAgICBzdHJjcHko X01fbmFtZV9tZXNzYWdlcywgX19zKTsKICAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9T X2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CiAgICAgIH0KCiAgICAgIGNhdGFsb2cKICAgICAgb3Bl bihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYykgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKCiAgICAgIGNh dGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUm LCBjb25zdCBjaGFyKikgY29uc3Q7CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxv ZyBfX2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2MsIF9fc2V0LCBfX21zZ2lkLCBfX3Mp OyB9CgogICAgICB2b2lkCiAgICAgIGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5kb19jbG9zZShfX2MpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFs CiAgICAgIH5tZXNzYWdlcygpCiAgICAgICB7CiAgICAgICAgIGRlbGV0ZSBbXSBfTV9uYW1lX21l c3NhZ2VzOwogICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2Vz KTsKICAgICAgIH0KCiAgICAgIHZpcnR1YWwgY2F0YWxvZwogICAgICBkb19vcGVuKGNvbnN0IGJh c2ljX3N0cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBz dHJpbmdfdHlwZQogICAgICBkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZ190 eXBlJiBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgZG9fY2xvc2Uo Y2F0YWxvZykgY29uc3Q7CgoKICAgICAgY2hhcioKICAgICAgX01fY29udmVydF90b19jaGFyKGNv bnN0IHN0cmluZ190eXBlJiBfX21zZykgY29uc3QKICAgICAgewoKICAgICAgICByZXR1cm4gcmVp bnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RfY2FzdDxfQ2hhclQqPihfX21zZy5jX3N0cigpKSk7 CiAgICAgIH0KCgogICAgICBzdHJpbmdfdHlwZQogICAgICBfTV9jb252ZXJ0X2Zyb21fY2hhcihj aGFyKiBfX21zZykgY29uc3QKICAgICAgewoKICAgICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3Ry YWl0czxjaGFyPjo6bGVuZ3RoKF9fbXNnKSAtIDE7CiMgMTczNiAiL3Vzci9pbmNsdWRlL2MrKy8z LjIuMS9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwogICAgICAgIHJldHVybiBzdHJpbmdfdHlwZSgp OwogICAgICB9CiAgICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxl OjppZCBtZXNzYWdlczxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIHN0cmluZwogICAg bWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJikg Y29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICB3c3RyaW5nCiAgICBtZXNzYWdlczx3Y2hhcl90Pjo6 ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCB3c3RyaW5nJikgY29uc3Q7CgoKCiMgMSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9pMzg2LXNsYWNrd2FyZS1saW51eC9iaXRzL21lc3NhZ2Vz X21lbWJlcnMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaTM4Ni1zbGFja3dh cmUtbGludXgvYml0cy9tZXNzYWdlc19tZW1iZXJzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCiAgICBtZXNzYWdl czxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2Nh bGUmIF9fbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2Rpcikg Y29uc3QKICAgIHsKICAgICAgYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKICAg ICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKICAg IG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0CiAgICB7 CgoKICAgICAgdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CiAgICAgIHJldHVybiAwOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBtZXNzYWdlczxfQ2hhclQ+ Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdAogICAgeyB9CiMgMTc1NiAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIuMS9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZSA6IHB1YmxpYyBtZXNzYWdlczxfQ2hhclQ+ CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0 CiAgICAgIG1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAw KQogICAgICA6IG1lc3NhZ2VzPF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgZGVsZXRl IFtdIF9NX25hbWVfbWVzc2FnZXM7CiAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IG5ldyBjaGFy W3N0cmxlbihfX3MpICsgMV07CiAgICAgICAgc3RyY3B5KF9NX25hbWVfbWVzc2FnZXMsIF9fcyk7 CiAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CiAgICAg ICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOwogICAgICB9 CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlc19ieW5hbWUoKQog ICAgICB7IH0KICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s aW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAg IHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6 OnNwYWNlLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBi b29sCiAgICBpc3ByaW50KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJl dHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwcmlu dCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAog ICAgaXNjbnRybChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4g dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Y250cmwsIF9f Yyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlz dXBwZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9m YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVwcGVyLCBfX2MpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sIGlzbG93ZXIoX0No YXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlw ZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2MpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCBf X2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0No YXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbHBoYSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hhclQgX19jLCBj b25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g PihfX2xvYykuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJUIF9fYywgY29uc3Qg bG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s b2MpLmlzKGN0eXBlX2Jhc2U6OnB1bmN0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2Nh bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku aXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYg X19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhj dHlwZV9iYXNlOjphbG51bSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9j KQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVf YmFzZTo6Z3JhcGgsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s aW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQog ICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG91cHBlcihfX2Mp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRv bG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9m YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLnRvbG93ZXIoX19jKTsgfQp9CiMgNDIgIi91c3Iv aW5jbHVkZS9jKysvMy4yLjEvYml0cy9iYXNpY19pb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3Mg YmFzaWNfaW9zIDogcHVibGljIGlvc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50 X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUg cG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5 cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGN0 eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0 b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1f cHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVk ZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1Zl9pdGVy OwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0NoYXJULCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1n ZXRfdHlwZTsKCgogICAgcHJvdGVjdGVkOgogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4qIF9NX3RpZTsKICAgICAgbXV0YWJsZSBjaGFyX3R5cGUgX01fZmlsbDsKICAgICAgbXV0 YWJsZSBib29sIF9NX2ZpbGxfaW5pdDsKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry YWl0cz4qIF9NX3N0cmVhbWJ1ZjsKCgogICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9NX2ZjdHlw ZTsKCiAgICAgIGNvbnN0IF9fbnVtcHV0X3R5cGUqIF9NX2ZudW1wdXQ7CgogICAgICBjb25zdCBf X251bWdldF90eXBlKiBfTV9mbnVtZ2V0OwoKICAgIHB1YmxpYzoKICAgICAgb3BlcmF0b3Igdm9p ZCooKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5mYWlsKCkgPyAwIDogY29uc3RfY2FzdDxi YXNpY19pb3MqPih0aGlzKTsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvciEoKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5mYWlsKCk7IH0KCiAgICAgIGlvc3RhdGUKICAgICAgcmRzdGF0 ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsgfQoKICAgICAgdm9p ZAogICAgICBjbGVhcihpb3N0YXRlIF9fc3RhdGUgPSBnb29kYml0KTsKCiAgICAgIHZvaWQKICAg ICAgc2V0c3RhdGUoaW9zdGF0ZSBfX3N0YXRlKQogICAgICB7IHRoaXMtPmNsZWFyKHRoaXMtPnJk c3RhdGUoKSB8IF9fc3RhdGUpOyB9CgogICAgICBib29sCiAgICAgIGdvb2QoKSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5yZHN0YXRlKCkgPT0gMDsgfQoKICAgICAgYm9vbAogICAgICBlb2Yo KSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgZW9mYml0KSAhPSAwOyB9 CgogICAgICBib29sCiAgICAgIGZhaWwoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRz dGF0ZSgpICYgKGJhZGJpdCB8IGZhaWxiaXQpKSAhPSAwOyB9CgogICAgICBib29sCiAgICAgIGJh ZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBiYWRiaXQpICE9IDA7 IH0KCiAgICAgIGlvc3RhdGUKICAgICAgZXhjZXB0aW9ucygpIGNvbnN0CiAgICAgIHsgcmV0dXJu IF9NX2V4Y2VwdGlvbjsgfQoKICAgICAgdm9pZAogICAgICBleGNlcHRpb25zKGlvc3RhdGUgX19l eGNlcHQpCiAgICAgIHsKICAgICAgICBfTV9leGNlcHRpb24gPSBfX2V4Y2VwdDsKICAgICAgICB0 aGlzLT5jbGVhcihfTV9zdHJlYW1idWZfc3RhdGUpOwogICAgICB9CgoKICAgICAgZXhwbGljaXQK ICAgICAgYmFzaWNfaW9zKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKSA6 IGlvc19iYXNlKCkKICAgICAgeyB0aGlzLT5pbml0KF9fc2IpOyB9CgogICAgICB2aXJ0dWFsCiAg ICAgIH5iYXNpY19pb3MoKSB7IH0KCgogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4qCiAgICAgIHRpZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3RpZTsgfQoKICAgICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KgogICAgICB0aWUoYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+KiBfX3RpZXN0cikKICAgICAgewogICAgICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV90aWU7CiAgICAgICAgX01fdGllID0gX190aWVzdHI7 CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CgogICAgICBiYXNpY19zdHJlYW1idWY8X0No YXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJl YW1idWY7IH0KCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICBy ZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7CgogICAgICBiYXNp Y19pb3MmCiAgICAgIGNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3Jocyk7CgogICAgICBjaGFy X3R5cGUKICAgICAgZmlsbCgpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGxfaW5p dCkKICAgICAgICAgIHsKICAgICAgICAgICAgX01fZmlsbCA9IHRoaXMtPndpZGVuKCcgJyk7CiAg ICAgICAgICAgIF9NX2ZpbGxfaW5pdCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJu IF9NX2ZpbGw7CiAgICAgIH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBmaWxsKGNoYXJfdHlwZSBf X2NoKQogICAgICB7CiAgICAgICAgY2hhcl90eXBlIF9fb2xkID0gdGhpcy0+ZmlsbCgpOwogICAg ICAgIF9NX2ZpbGwgPSBfX2NoOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKCiAgICAg IGxvY2FsZQogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgICAgIGNoYXIKICAg ICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgY2hh cl90eXBlCiAgICAgIHdpZGVuKGNoYXIgX19jKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CgogICAg ICBiYXNpY19pb3MoKSA6IGlvc19iYXNlKCkKICAgICAgeyB9CgogICAgICB2b2lkCiAgICAgIGlu aXQoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYm9vbAog ICAgICBfTV9jaGVja19mYWNldChjb25zdCBsb2NhbGU6OmZhY2V0KiBfX2YpIGNvbnN0CiAgICAg IHsKICAgICAgICBpZiAoIV9fZikKICAgICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAgICAg ICByZXR1cm4gdHJ1ZTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9jYWNoZV9mYWNldHMo Y29uc3QgbG9jYWxlJiBfX2xvYyk7CiAgICB9Owp9CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIuMS9iaXRzL2Jhc2ljX2lvcy50Y2MiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2JpdHMvYmFzaWNfaW9zLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFy VCwgX1RyYWl0cz46OmNsZWFyKGlvc3RhdGUgX19zdGF0ZSkKICAgIHsKICAgICAgaWYgKHRoaXMt PnJkYnVmKCkpCiAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZTsKICAgICAgZWxz ZQogICAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJhZGJpdDsKICAgICAg aWYgKCh0aGlzLT5yZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQogICAgICAgIF9fdGhy b3dfaW9zX2ZhaWx1cmUoImJhc2ljX2lvczo6Y2xlYXIoaW9zdGF0ZSkgY2F1c2VkIGV4Y2VwdGlv biIpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgIGJhc2ljX2lvczxfQ2hh clQsIF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19z YikKICAgIHsKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0g X01fc3RyZWFtYnVmOwogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwogICAgICB0aGlzLT5jbGVh cigpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JgogICAg YmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3Jo cykKICAgIHsKCgoKCiAgICAgIF9Xb3JkcyogX193b3JkcyA9IChfX3Jocy5fTV93b3JkX3NpemUg PD0gX1NfbG9jYWxfd29yZF9zaXplKSA/CiAgICAgICAgX01fbG9jYWxfd29yZCA6IG5ldyBfV29y ZHNbX19yaHMuX01fd29yZF9zaXplXTsKCgogICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYiA9IF9f cmhzLl9NX2NhbGxiYWNrczsKICAgICAgaWYgKF9fY2IpCiAgICAgICAgX19jYi0+X01fYWRkX3Jl ZmVyZW5jZSgpOwogICAgICBfTV9jYWxsX2NhbGxiYWNrcyhlcmFzZV9ldmVudCk7CiAgICAgIGlm IChfTV93b3JkICE9IF9NX2xvY2FsX3dvcmQpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtd IF9NX3dvcmQ7CiAgICAgICAgICBfTV93b3JkID0gMDsKICAgICAgICB9CiAgICAgIF9NX2Rpc3Bv c2VfY2FsbGJhY2tzKCk7CgogICAgICBfTV9jYWxsYmFja3MgPSBfX2NiOwogICAgICBmb3IgKGlu dCBfX2kgPSAwOyBfX2kgPCBfX3Jocy5fTV93b3JkX3NpemU7ICsrX19pKQogICAgICAgIF9fd29y ZHNbX19pXSA9IF9fcmhzLl9NX3dvcmRbX19pXTsKICAgICAgaWYgKF9NX3dvcmQgIT0gX01fbG9j YWxfd29yZCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsKICAgICAgICAg IF9NX3dvcmQgPSAwOwogICAgICAgIH0KICAgICAgX01fd29yZCA9IF9fd29yZHM7CiAgICAgIF9N X3dvcmRfc2l6ZSA9IF9fcmhzLl9NX3dvcmRfc2l6ZTsKCiAgICAgIHRoaXMtPmZsYWdzKF9fcmhz LmZsYWdzKCkpOwogICAgICB0aGlzLT53aWR0aChfX3Jocy53aWR0aCgpKTsKICAgICAgdGhpcy0+ cHJlY2lzaW9uKF9fcmhzLnByZWNpc2lvbigpKTsKICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgp KTsKICAgICAgdGhpcy0+ZmlsbChfX3Jocy5maWxsKCkpOwoKICAgICAgdGhpcy0+ZXhjZXB0aW9u cyhfX3Jocy5leGNlcHRpb25zKCkpOwoKICAgICAgX01fY2FsbF9jYWxsYmFja3MoY29weWZtdF9l dmVudCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2hhcgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1Ry YWl0cz46Om5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgewog ICAgICBjaGFyIF9fcmV0ID0gX19kZmF1bHQ7CiAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m Y3R5cGUpKQogICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT5uYXJyb3coX19jLCBfX2RmYXVsdCk7 CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgX0NoYXJUCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRz Pjo6d2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICB7CiAgICAgIGNoYXJfdHlwZSBfX3JldCA9IGNo YXJfdHlwZSgpOwogICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZmN0eXBlKSkKICAgICAgICBf X3JldCA9IF9NX2ZjdHlwZS0+d2lkZW4oX19jKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgbG9jYWxl CiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW1idWUoY29uc3QgbG9jYWxlJiBfX2xv YykKICAgIHsKICAgICAgbG9jYWxlIF9fb2xkKHRoaXMtPmdldGxvYygpKTsKICAgICAgaW9zX2Jh c2U6OmltYnVlKF9fbG9jKTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9fbG9jKTsKICAgICAgaWYg KHRoaXMtPnJkYnVmKCkgIT0gMCkKICAgICAgICB0aGlzLT5yZGJ1ZigpLT5wdWJpbWJ1ZShfX2xv Yyk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0 cz46OmluaXQoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICB7Cgog ICAgICBpb3NfYmFzZTo6X01faW5pdCgpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9zX2xv Y2FsZSk7CiAgICAgIF9NX3RpZSA9IDA7CiMgMTU5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Jp dHMvYmFzaWNfaW9zLnRjYyIgMwogICAgICBfTV9maWxsID0gX0NoYXJUKCk7CiAgICAgIF9NX2Zp bGxfaW5pdCA9IGZhbHNlOwoKICAgICAgX01fZXhjZXB0aW9uID0gZ29vZGJpdDsKICAgICAgX01f c3RyZWFtYnVmID0gX19zYjsKICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zYiA/IGdvb2Ri aXQgOiBiYWRiaXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpfTV9jYWNo ZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgaWYgKGhhc19mYWNldDxf X2N0eXBlX3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mY3R5cGUgPSAmdXNlX2ZhY2V0PF9fY3R5 cGVfdHlwZT4oX19sb2MpOwogICAgICBlbHNlCiAgICAgICAgX01fZmN0eXBlID0gMDsKCiAgICAg IGlmIChoYXNfZmFjZXQ8X19udW1wdXRfdHlwZT4oX19sb2MpKQogICAgICAgIF9NX2ZudW1wdXQg PSAmdXNlX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9N X2ZudW1wdXQgPSAwOwogICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9fbG9jKSkK ICAgICAgICBfTV9mbnVtZ2V0ID0gJnVzZV9mYWNldDxfX251bWdldF90eXBlPihfX2xvYyk7CiAg ICAgIGVsc2UKICAgICAgICBfTV9mbnVtZ2V0ID0gMDsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIGJhc2ljX2lvczxjaGFyPjsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNp Y19pb3M8d2NoYXJfdD47Cgp9CiMgMjA4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvYmFz aWNfaW9zLmgiIDIgMwojIDUyICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2lvcyIgMiAzCiMgNDYg Ii91c3IvaW5jbHVkZS9jKysvMy4yLjEvb3N0cmVhbSIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFz aWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAg ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFp dHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+ IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0 cz4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh clQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9wdXQ8X0No YXJULCBfX29zdHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlw ZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKCgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19vc3Ry ZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoK ICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfb3N0cmVhbSgpIHsgfQoKCiAgICAgIGNsYXNzIHNl bnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsKCgoKICAgICAgX19vc3RyZWFtX3R5cGUm CiAgICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFtX3R5cGUm KSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChfX2lvc190eXBlJiAo Kl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0 b3I8PChpb3NfYmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2UmKSk7CgoKICAgICAgX19vc3RyZWFtX3R5 cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg ICAgIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUm CiAgICAgIG9wZXJhdG9yPDwoYm9vbCBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg IG9wZXJhdG9yPDwoc2hvcnQgX19uKQogICAgICB7CiAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdz IF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgaWYg KF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpoZXgpCiAgICAgICAg ICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0 PihfX24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwo c3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgog ICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+ b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsgfQoKICAgICAgX19v c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW50IF9fbikKICAgICAgewogICAgICAgIGlv c19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZp ZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFz ZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5z aWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2Fz dDx1bnNpZ25lZCBpbnQ+KF9fbikpKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gdGhp cy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsKICAgICAgfQoKICAgICAgX19v c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IF9fbikKICAgICAgeyBy ZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsg fQoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgbG9uZyBfX24p OwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBs b25nIF9fbik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoZG91Ymxl IF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChmbG9hdCBfX2Yp CiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX2Yp KTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBkb3VibGUg X19mKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGNvbnN0IHZvaWQq IF9fcCk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChfX3N0cmVhbWJ1 Zl90eXBlKiBfX3NiKTsKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgcHV0KGNoYXJfdHlw ZSBfX2MpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHdyaXRlKGNvbnN0IGNoYXJfdHlw ZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgZmx1 c2goKTsKCgogICAgICBwb3NfdHlwZQogICAgICB0ZWxscCgpOwoKICAgICAgX19vc3RyZWFtX3R5 cGUmCiAgICAgIHNlZWtwKHBvc190eXBlKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBz ZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOwogICAgfTsKCgogIHRlbXBsYXRlIDx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewoKICAgICAgYm9vbCBfTV9vazsKICAgICAg YmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9NX29zOwoKICAgIHB1YmxpYzoKICAgICAg ZXhwbGljaXQKICAgICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29z KTsKCiAgICAgIH5zZW50cnkoKQogICAgICB7CgogICAgICAgIGlmIChfTV9vcy5mbGFncygpICYg aW9zX2Jhc2U6OnVuaXRidWYgJiYgIXVuY2F1Z2h0X2V4Y2VwdGlvbigpKQogICAgICAgICAgewoK ICAgICAgICAgICAgaWYgKF9NX29zLnJkYnVmKCkgJiYgX01fb3MucmRidWYoKS0+cHVic3luYygp ID09IC0xKQogICAgICAgICAgICAgIF9NX29zLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgfQogICAgICB9CgogICAgICBvcGVyYXRvciBib29sKCkKICAgICAgeyByZXR1cm4g X01fb2s7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYyk7CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgX19vdXQu d2lkZW4oX19jKSk7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0 cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBf VHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKTsKCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAg ICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry ZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4g KF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9U cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChi YXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgdW5zaWduZWQgY2hhciBfX2MpCiAg ICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiAmCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQs IGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNf b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFy LCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBf VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHNpZ25lZCBjaGFyKiBf X3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o X19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hh ciwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ JiBfX291dCwgY29uc3QgdW5zaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9fb3V0IDw8 IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBlbmRsKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykK ICAgIHsgcmV0dXJuIGZsdXNoKF9fb3MucHV0KF9fb3Mud2lkZW4oJ1xuJykpKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRzKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3MucHV0KF9DaGFyVCgpKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBmbHVzaChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f b3MpCiAgICB7IHJldHVybiBfX29zLmZsdXNoKCk7IH0KCn0KCgoKCgojIDEgIi91c3IvaW5jbHVk ZS9jKysvMy4yLjEvYml0cy9vc3RyZWFtLnRjYyIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvYml0cy9vc3RyZWFtLnRjYyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2xv Y2FsZSIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvbG9jYWxlIiAzCgoKCiMgMSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAxIDMKIyAzNyAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCgojIDEgIi91 c3IvaW5jbHVkZS9jKysvMy4yLjEvY2Vycm5vIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8z LjIuMS9jZXJybm8iIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEgMwojIDMyICIvdXNy L2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9lcnJuby5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAxIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNtL2Vy cm5vLmgiIDEgMwojIDUgIi91c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAyIDMKIyAyNiAiL3Vz ci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMiAzCiMgMzggIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5v LmgiIDMKZXh0ZXJuIGludCAqX19lcnJub19sb2NhdGlvbiAodm9pZCkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDM3ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMiAzCiMg NTUgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVybiBjaGFyICpwcm9ncmFtX2ludm9jYXRp b25fbmFtZSwgKnByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lOwoKCgp9CiMgNjkgIi91c3Iv aW5jbHVkZS9lcnJuby5oIiAzCnR5cGVkZWYgaW50IGVycm9yX3Q7CiMgNDkgIi91c3IvaW5jbHVk ZS9jKysvMy4yLjEvY2Vycm5vIiAyIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz L2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvY21h dGgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2NtYXRoIiAzCgoKCiMgMSAiL3Vz ci9pbmNsdWRlL21hdGguaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJu ICJDIiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzCiMgMzQgIi91 c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL25hbi5oIiAx IDMKIyAzOCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9tYXRoZGVmLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDMKdHlw ZWRlZiBsb25nIGRvdWJsZSBmbG9hdF90OwoKdHlwZWRlZiBsb25nIGRvdWJsZSBkb3VibGVfdDsK IyA0MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNjUgIi91c3IvaW5jbHVkZS9tYXRoLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTMgIi91c3IvaW5j bHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCgoKZXh0ZXJuIGRvdWJsZSBhY29zIChkb3VibGUgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK ZXh0ZXJuIGRvdWJsZSBhc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf X2FzaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuIChkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgp OwoKZXh0ZXJuIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBkb3VibGUgX19hdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGRvdWJsZSBjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl IF9fY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgc2luIChkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7 CgpleHRlcm4gZG91YmxlIHRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg X190YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIHRocm93 ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX3NpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW5oIChk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lu eCwgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvcyAoZG91Ymxl IF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0 ZXJuIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19h Y29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGFzaW5oIChkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2FzaW5oIChkb3VibGUgX194KSB0aHJvdyAo KTsKCmV4dGVybiBkb3VibGUgYXRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91 YmxlIF9fYXRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBl eHAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwIChkb3VibGUgX194 KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhw b25lbnQpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZnJleHAgKGRvdWJsZSBfX3gsIGludCAq X19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsZGV4cCAoZG91YmxlIF9feCwg aW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbGRleHAgKGRvdWJsZSBf X3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZyAoZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cgKGRvdWJsZSBfX3gpIHRocm93ICgp OwoKCmV4dGVybiBkb3VibGUgbG9nMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91 YmxlIF9fbG9nMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbW9kZiAo ZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbW9k ZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJs ZSBleHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAxMCAoZG91 YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHBvdzEwIChkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3BvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gZG91YmxlIGV4cG0xIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf X2V4cG0xIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzFwIChkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwIChkb3VibGUgX194KSB0aHJv dyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUg ZXhwMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAyIChkb3VibGUg X194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzIgKGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0 ZXJuIGRvdWJsZSBwb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fcG93IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4g ZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc3FydCAo ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9f eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19oeXBvdCAoZG91YmxlIF9f eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgY2JydCAoZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19jYnJ0IChkb3VibGUgX194KSB0aHJvdyAo KTsKCgoKCgoKCgpleHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2NlaWwgKGRvdWJsZSBfX3gp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZh YnMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0 ZXJuIGRvdWJsZSBfX2ZhYnMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZsb29yIChkb3VibGUgX194KSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19mbG9vciAoZG91Ymxl IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3Vi bGUgZm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg X19mbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg X19pc2luZiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgaXNpbmYgKGRvdWJsZSBf X3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGlu dCBmaW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2RyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93 ICgpOwoKCgpleHRlcm4gZG91YmxlIHNpZ25pZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGRvdWJsZSBfX3NpZ25pZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gZG91YmxlIGNvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2lnbiAoZG91 YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKCgoKCgpleHRlcm4gZG91YmxlIG5hbiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25hbiAoX19jb25z dCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK CgpleHRlcm4gaW50IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAo ZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2owIChkb3VibGUpIHRocm93ICgpOwpl eHRlcm4gZG91YmxlIGoxIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKGRv dWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsg ZXh0ZXJuIGRvdWJsZSBfX2puIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUg eTAgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195MCAoZG91YmxlKSB0aHJvdyAo KTsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kx IChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSkgdGhyb3cg KCk7IGV4dGVybiBkb3VibGUgX195biAoaW50LCBkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRl cm4gZG91YmxlIGVyZiAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZiAoZG91 YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmZjIChkb3VibGUpIHRocm93ICgpOyBleHRl cm4gZG91YmxlIF9fZXJmYyAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBsZ2FtbWEg KGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWEgKGRvdWJsZSkgdGhyb3cg KCk7CgoKCgoKCmV4dGVybiBkb3VibGUgdGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fdGdhbW1hIChkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZ2Ft bWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19nYW1tYSAoZG91YmxlKSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBsZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdh bXApIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3Np Z25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCkg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpl eHRlcm4gZG91YmxlIG5leHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChk b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgpleHRlcm4gZG91YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f eSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9f bmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3VibGUg X194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91 YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2NhbGJuIChk b3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibiAoZG91 YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSBf X3gpIHRocm93ICgpOyBleHRlcm4gaW50IF9faWxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CgoKZXh0ZXJuIGRvdWJsZSBzY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93 ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBuZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fbmVhcmJ5aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGRvdWJsZSByb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19y b3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgdHJ1bmMgKGRvdWJs ZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJs ZSBfX3RydW5jIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCgpleHRlcm4gZG91YmxlIHJlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50 ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yZW1xdW8gKGRvdWJsZSBfX3gsIGRv dWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJp bnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmludCAoZG91Ymxl IF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludCAoZG91YmxlIF9feCkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50IChkb3VibGUgX194KSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGludCBfX2xyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25n IGxvbmcgaW50IGxscm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25n IGludCBfX2xscm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGZk aW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZmRp bSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWF4 IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYXgg KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1pbiAo ZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWluIChk b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3Np ZnkgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdCAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAg ICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZG91YmxlIGZtYSAoZG91 YmxlIF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg X19mbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGRvdWJsZSBzY2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4 dGVybiBkb3VibGUgX19zY2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbikgdGhyb3cgKCk7CiMg NjYgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDg4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDUzICIvdXNyL2luY2x1 ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwoKCmV4dGVybiBmbG9hdCBhY29zZiAoZmxvYXQgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYWNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRl cm4gZmxvYXQgYXNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5m IChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpIHRo cm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVy biBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9fYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZs b2F0IGNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2YgKGZsb2F0 IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9fc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0 YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5mIChmbG9hdCBfX3gp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX19jb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBz aW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2luaGYgKGZsb2F0IF9f eCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4 dGVybiBmbG9hdCBfX3RhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQg c2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAo KTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0 ICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgYWNvc2hmIChmbG9hdCBfX3gp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7Cgpl eHRlcm4gZmxvYXQgYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19h c2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbmhmIChmbG9hdCBf X3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 CgoKCgoKCgpleHRlcm4gZmxvYXQgZXhwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9fZXhwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZnJleHBmIChm bG9hdCBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZyZXhw ZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBs ZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19sZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBm bG9hdCBsb2dmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2dmIChmbG9h dCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cxMGYgKGZsb2F0IF9feCkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX2xvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g ZmxvYXQgbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBm bG9hdCBfX21vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGZsb2F0IGV4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhw MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHBvdzEwZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoK CgoKCmV4dGVybiBmbG9hdCBleHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h dCBfX2V4cG0xZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nMXBmIChm bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cxcGYgKGZsb2F0IF9feCkgdGhy b3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g ZmxvYXQgX19sb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGV4 cDJmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHAyZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4 dGVybiBmbG9hdCBfX2xvZzJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBm bG9hdCBwb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf X3Bvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgc3Fy dGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NxcnRmIChmbG9hdCBfX3gp IHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBoeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9faHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjYnJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9fY2JydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJu IGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsgZXh0ZXJuIGZsb2F0IF9fY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2ZhYnNmIChm bG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g ZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsgZXh0ZXJuIGZsb2F0IF9fZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZm1vZGYgKGZsb2F0IF9feCwgZmxv YXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQg X195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmYgKGZsb2F0IF9fdmFsdWUpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRl ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CgoKCmV4dGVybiBpbnQgaXNpbmZmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGRyZW1m IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2RyZW1mIChm bG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzaWduaWZpY2Fu ZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpZ25pZmljYW5kZiAoZmxv YXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgY29weXNpZ25mIChmbG9hdCBfX3gs IGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g ZmxvYXQgX19jb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBmbG9hdCBuYW5mIChfX2NvbnN0IGNo YXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g ZmxvYXQgX19uYW5mIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25h bmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgpleHRlcm4gZmxvYXQgajBmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2owZiAo ZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVy biBmbG9hdCBfX2oxZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgam5mIChpbnQsIGZs b2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fam5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsK ZXh0ZXJuIGZsb2F0IHkwZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195MGYgKGZs b2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4g ZmxvYXQgX195MWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHluZiAoaW50LCBmbG9h dCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7CgoK CgoKCmV4dGVybiBmbG9hdCBlcmZmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Vy ZmYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGVyZmNmIChmbG9hdCkgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX2VyZmNmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBsZ2Ft bWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWYgKGZsb2F0KSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IHRnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJu IGZsb2F0IF9fdGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBnYW1t YWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZ2FtbWFmIChmbG9hdCkgdGhyb3cg KCk7CgoKCgoKCmV4dGVybiBmbG9hdCBsZ2FtbWFmX3IgKGZsb2F0LCBpbnQgKl9fc2lnbmdhbXAp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmX3IgKGZsb2F0LCBpbnQgKl9fc2lnbmdh bXApIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGZsb2F0IHJpbnRmIChmbG9hdCBfX3gpIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19yaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g ZmxvYXQgbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFmdGVyZiAoZmxvYXQgX194 LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVy biBmbG9hdCBuZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dHRvd2FyZGYg KGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCByZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9f eSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JlbWFpbmRlcmYgKGZsb2F0IF9feCwgZmxvYXQg X195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibmYgKGZsb2F0IF9feCwgaW50IF9f bikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbikg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl cm4gaW50IF9faWxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IHNj YWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf X3NjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBm bG9hdCBuZWFyYnlpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19uZWFy YnlpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgcm91bmRmIChmbG9h dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cg KCk7CgoKCmV4dGVybiBmbG9hdCB0cnVuY2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX190cnVuY2YgKGZsb2F0IF9feCkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGZsb2F0IHJlbXF1 b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9fcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIHRocm93ICgp OwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl cm4gbG9uZyBpbnQgX19scmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxv bmcgaW50IGxscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50 IF9fbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3Vu ZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyb3VuZGYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRmIChmbG9hdCBfX3gp IHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRmIChmbG9hdCBfX3gpIHRo cm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9fZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAo KTsKCgpleHRlcm4gZmxvYXQgZm1heGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9fZm1heGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpl eHRlcm4gZmxvYXQgZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJu IGZsb2F0IF9fZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGludCBfX2ZwY2xhc3NpZnlmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdGYgKGZsb2F0IF9fdmFs dWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4g ZmxvYXQgZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgdGhyb3cgKCk7IGV4 dGVybiBmbG9hdCBfX2ZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IHNjYWxiZiAoZmxvYXQgX194LCBmbG9hdCBfX24pIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKSB0aHJvdyAo KTsKIyA4OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgMTA5ICIvdXNyL2luY2x1ZGUvbWF0 aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDUzICIvdXNy L2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zbCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmwgKGxvbmcg ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5sIChsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFubCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuMmwgKGxvbmcgZG91YmxlIF9f eSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJs IChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv bmcgZG91YmxlIGNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv dWJsZSBfX2Nvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3Vi bGUgc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f c2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5s IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2hsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NobCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2luaGwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgdGFuaGwgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmhsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2luY29zbCAobG9uZyBkb3VibGUgX194LCBs b25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJu IHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxv bmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgYWNv c2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hY29z aGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmhs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2luaGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbmhsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuaGwgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChsb25n IGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2ZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoK CmV4dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25l bnQpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91YmxlIF9f eCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcg ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX21vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OwoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvdzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK CgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19sb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19sb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19leHAybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRl cm4gbG9uZyBkb3VibGUgbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX2xvZzJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4 dGVybiBsb25nIGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcg ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9faHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoK CgoKCmV4dGVybiBsb25nIGRvdWJsZSBjYnJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2JydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2VpbGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CmV4dGVybiBsb25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl cm4gbG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g bG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk b3VibGUgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmwgKGxvbmcgZG91Ymxl IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g aW50IF9fZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgaXNpbmZsIChsb25nIGRvdWJsZSBfX3Zh bHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBm aW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2RyZW1sIChsb25n IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRv dWJsZSBzaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX3NpZ25pZmljYW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gbG9uZyBkb3VibGUgY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBk b3VibGUgX19jb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJs ZSBuYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFn YikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQg X19pc25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUg ajBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2owbCAobG9u ZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgajFsIChsb25nIGRvdWJsZSkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2oxbCAobG9uZyBkb3VibGUpIHRocm93ICgp OwpleHRlcm4gbG9uZyBkb3VibGUgam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJu IGxvbmcgZG91YmxlIHkwbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX195MGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkxbCAo bG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MWwgKGxvbmcgZG91 YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSkgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBlcmZsIChsb25nIGRvdWJsZSkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0 ZXJuIGxvbmcgZG91YmxlIGVyZmNsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX2VyZmNsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJs ZSBsZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xn YW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRn YW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGdhbW1h bCAobG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwg KGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsIChsb25n IGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsX3IgKGxv bmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg X19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoK CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19yaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpl eHRlcm4gbG9uZyBkb3VibGUgbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs ZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBu ZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dHRvd2Fy ZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1haW5kZXJsIChsb25n IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX3JlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9f bikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibmwgKGxvbmcgZG91YmxlIF9f eCwgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxv bmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibG5sIChsb25n IGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJs ZSBuZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19uZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9u ZyBkb3VibGUgcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19yb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25n IGRvdWJsZSB0cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcgZG91YmxlIF9f eCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcg ZG91YmxlIHJlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9f cXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtcXVvbCAobG9uZyBkb3VibGUg X194LCBsb25nIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4g bG9uZyBpbnQgbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBp bnQgX19scmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcg aW50IGxscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcg aW50IF9fbGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcg aW50IGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBf X2xyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50 IGxscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGlu dCBfX2xscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBk b3VibGUgZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1heGwgKGxvbmcgZG91YmxlIF9f eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1heGwg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9u ZyBkb3VibGUgZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAo KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi bGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlsIChsb25nIGRvdWJs ZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl eHRlcm4gaW50IF9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1hbCAo bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi bGUgX195LCBsb25nIGRvdWJsZSBfX3opIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91Ymxl IHNjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19zY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19u KSB0aHJvdyAoKTsKIyAxMTAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDEyNSAiL3Vzci9p bmNsdWRlL21hdGguaCIgMwpleHRlcm4gaW50IHNpZ25nYW07CiMgMTY2ICIvdXNyL2luY2x1ZGUv bWF0aC5oIiAzCmVudW0KICB7CiAgICBGUF9OQU4sCgogICAgRlBfSU5GSU5JVEUsCgogICAgRlBf WkVSTywKCiAgICBGUF9TVUJOT1JNQUwsCgogICAgRlBfTk9STUFMCgogIH07CiMgMjUyICIvdXNy L2luY2x1ZGUvbWF0aC5oIiAzCnR5cGVkZWYgZW51bQp7CiAgX0lFRUVfID0gLTEsCiAgX1NWSURf LAogIF9YT1BFTl8sCiAgX1BPU0lYXywKICBfSVNPQ18KfSBfTElCX1ZFUlNJT05fVFlQRTsKCgoK CmV4dGVybiBfTElCX1ZFUlNJT05fVFlQRSBfTElCX1ZFUlNJT047CiMgMjc1ICIvdXNyL2luY2x1 ZGUvbWF0aC5oIiAzCnN0cnVjdCBfX2V4Y2VwdGlvbgoKCgogIHsKICAgIGludCB0eXBlOwogICAg Y2hhciAqbmFtZTsKICAgIGRvdWJsZSBhcmcxOwogICAgZG91YmxlIGFyZzI7CiAgICBkb3VibGUg cmV0dmFsOwogIH07CgoKZXh0ZXJuIGludCBtYXRoZXJyIChzdHJ1Y3QgX19leGNlcHRpb24gKl9f ZXhjKSB0aHJvdyAoKTsKIyA0MjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKfQojIDUyICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL2NtYXRoIiAyIDMKIyA3OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9jbWF0aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1Rw IF9fY21hdGhfcG93ZXIoX1RwLCB1bnNpZ25lZCBpbnQpOwoKICBpbmxpbmUgZG91YmxlCiAgYWJz KGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKICBpbmxpbmUg ZmxvYXQKICBhYnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9 CgogIGlubGluZSBsb25nIGRvdWJsZQogIGFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4g X19idWlsdGluX2ZhYnNsKF9feCk7IH0KCgogIGlubGluZSBmbG9hdAogIGFjb3MoZmxvYXQgX194 KSB7IHJldHVybiA6OmFjb3NmKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YWNvczsKCgogIGlubGlu ZSBsb25nIGRvdWJsZQogIGFjb3MobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFjb3NsKF9f eCk7IH0KCgoKCgogIHVzaW5nIDo6YXNpbjsKCgogIGlubGluZSBmbG9hdAogIGFzaW4oZmxvYXQg X194KSB7IHJldHVybiA6OmFzaW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUK ICBhc2luKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphc2lubChfX3gpOyB9CgoKCgoKICB1 c2luZyA6OmF0YW47CgoKICBpbmxpbmUgZmxvYXQKICBhdGFuKGZsb2F0IF9feCkgeyByZXR1cm4g OjphdGFuZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbihsb25nIGRv dWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjphdGFuMjsK CgogIGlubGluZSBmbG9hdAogIGF0YW4yKGZsb2F0IF9feSwgZmxvYXQgX194KSB7IHJldHVybiA6 OmF0YW4yZihfX3ksIF9feCk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbjIo bG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbjJsKF9feSwg X194KTsgfQoKCgoKCgogIHVzaW5nIDo6Y2VpbDsKCgogIGlubGluZSBmbG9hdAogIGNlaWwoZmxv YXQgX194KSB7IHJldHVybiA6OmNlaWxmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3Vi bGUKICBjZWlsKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpjZWlsbChfX3gpOyB9CgoKCgoK ICB1c2luZyA6OmNvczsKCiAgaW5saW5lIGZsb2F0CiAgY29zKGZsb2F0IF9feCkKICB7IHJldHVy biBfX2J1aWx0aW5fY29zZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGNvcyhsb25n IGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2Nvc2woX194KTsgfQoKICB1c2luZyA6 OmNvc2g7CgoKICBpbmxpbmUgZmxvYXQKICBjb3NoKGZsb2F0IF9feCkgeyByZXR1cm4gOjpjb3No ZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29zaChsb25nIGRvdWJsZSBf X3gpIHsgcmV0dXJuIDo6Y29zaGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpleHA7CgoKICBpbmxp bmUgZmxvYXQKICBleHAoZmxvYXQgX194KSB7IHJldHVybiA6OmV4cGYoX194KTsgfQoKCgoKCgog IGlubGluZSBsb25nIGRvdWJsZQogIGV4cChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6ZXhw bChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmZhYnM7CgogIGlubGluZSBmbG9hdAogIGZhYnMoZmxv YXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGluZSBsb25n IGRvdWJsZQogIGZhYnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJz bChfX3gpOyB9CgogIHVzaW5nIDo6Zmxvb3I7CgoKICBpbmxpbmUgZmxvYXQKICBmbG9vcihmbG9h dCBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3Vi bGUKICBmbG9vcihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JsKF9feCk7IH0KCgoK CgogIHVzaW5nIDo6Zm1vZDsKCgogIGlubGluZSBmbG9hdAogIGZtb2QoZmxvYXQgX194LCBmbG9h dCBfX3kpIHsgcmV0dXJuIDo6Zm1vZGYoX194LCBfX3kpOyB9CgoKCgoKCgogIGlubGluZSBsb25n IGRvdWJsZQogIGZtb2QobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJu IDo6Zm1vZGwoX194LCBfX3kpOyB9CgoKCgoKCiAgdXNpbmcgOjpmcmV4cDsKCgogIGlubGluZSBm bG9hdAogIGZyZXhwKGZsb2F0IF9feCwgaW50KiBfX2V4cCkgeyByZXR1cm4gOjpmcmV4cGYoX194 LCBfX2V4cCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmcmV4cChsb25nIGRvdWJs ZSBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6ZnJleHBsKF9feCwgX19leHApOyB9CgoKCgoK CiAgdXNpbmcgOjpsZGV4cDsKCgogIGlubGluZSBmbG9hdAogIGxkZXhwKGZsb2F0IF9feCwgaW50 IF9fZXhwKSB7IHJldHVybiA6OmxkZXhwZihfX3gsIF9fZXhwKTsgfQoKCgoKCgoKICBpbmxpbmUg bG9uZyBkb3VibGUKICBsZGV4cChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cCkgeyByZXR1cm4g OjpsZGV4cGwoX194LCBfX2V4cCk7IH0KCgoKCgoKICB1c2luZyA6OmxvZzsKCgogIGlubGluZSBm bG9hdAogIGxvZyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nZihfX3gpOyB9CgoKCgoKCiAgaW5s aW5lIGxvbmcgZG91YmxlCiAgbG9nKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2dsKF9f eCk7IH0KCgoKCgogIHVzaW5nIDo6bG9nMTA7CgoKICBpbmxpbmUgZmxvYXQKICBsb2cxMChmbG9h dCBfX3gpIHsgcmV0dXJuIDo6bG9nMTBmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3Vi bGUKICBsb2cxMChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9nMTBsKF9feCk7IH0KCgoK CgogIHVzaW5nIDo6bW9kZjsKCgogIGlubGluZSBmbG9hdAogIG1vZGYoZmxvYXQgX194LCBmbG9h dCogX19pcHRyKSB7IHJldHVybiA6Om1vZGZmKF9feCwgX19pcHRyKTsgfQojIDM3NSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9jbWF0aCIgMwogIGlubGluZSBsb25nIGRvdWJsZQogIG1vZGYobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSogX19pcHRyKSB7IHJldHVybiA6Om1vZGZsKF9feCwg X19pcHRyKTsgfQojIDM4OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jbWF0aCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAgIF9fcG93X2hlbHBlcihfVHAgX194 LCBpbnQgX19uKQogICAgewogICAgICByZXR1cm4gX19uIDwgMAogICAgICAgID8gX1RwKDEpL19f Y21hdGhfcG93ZXIoX194LCAtX19uKQogICAgICAgIDogX19jbWF0aF9wb3dlcihfX3gsIF9fbik7 CiAgICB9CgogIHVzaW5nIDo6cG93OwoKCiAgaW5saW5lIGZsb2F0CiAgcG93KGZsb2F0IF9feCwg ZmxvYXQgX195KSB7IHJldHVybiA6OnBvd2YoX194LCBfX3kpOyB9CgoKCgoKCgogIGlubGluZSBs b25nIGRvdWJsZQogIHBvdyhsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgeyByZXR1 cm4gOjpwb3dsKF9feCwgX195KTsgfQoKCgoKCgogIGlubGluZSBkb3VibGUKICBwb3coZG91Ymxl IF9feCwgaW50IF9faSkKICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX2kpOyB9CgogIGlu bGluZSBmbG9hdAogIHBvdyhmbG9hdCBfX3gsIGludCBfX24pCiAgeyByZXR1cm4gX19wb3dfaGVs cGVyKF9feCwgX19uKTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUg X194LCBpbnQgX19uKQogIHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7IH0KCiAgdXNp bmcgOjpzaW47CgogIGlubGluZSBmbG9hdAogIHNpbihmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19i dWlsdGluX3NpbmYoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzaW4obG9uZyBkb3Vi bGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5sKF9feCk7IH0KCiAgdXNpbmcgOjpzaW5o OwoKCiAgaW5saW5lIGZsb2F0CiAgc2luaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6c2luaGYoX194 KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIHNpbmgobG9uZyBkb3VibGUgX194KSB7 IHJldHVybiA6OnNpbmhsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6c3FydDsKCiAgaW5saW5lIGZs b2F0CiAgc3FydChmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3NxcnRmKF9feCk7IH0K CiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc3FydChsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4g X19idWlsdGluX3NxcnRsKF9feCk7IH0KCiAgdXNpbmcgOjp0YW47CgoKICBpbmxpbmUgZmxvYXQK ICB0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OnRhbmYoX194KTsgfQoKCgoKCgogIGlubGluZSBs b25nIGRvdWJsZQogIHRhbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6dGFubChfX3gpOyB9 CgoKCgoKICB1c2luZyA6OnRhbmg7CgoKICBpbmxpbmUgZmxvYXQKICB0YW5oKGZsb2F0IF9feCkg eyByZXR1cm4gOjp0YW5oZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgdGFu aChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6dGFuaGwoX194KTsgfQoKCgoKfQoKCgoKCgpu YW1lc3BhY2UgX19nbnVfY3h4CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAg IF9fY2FwdHVyZV9mcGNsYXNzaWZ5KF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0g c2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNp emVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX19mKSA6IF9fZnBjbGFzc2lmeWwgKF9fZikp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzZmlu aXRlKF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBf X2Zpbml0ZWYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19maW5p dGUgKF9fZikgOiBfX2Zpbml0ZWwgKF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICAgIGludAogICAgX19jYXB0dXJlX2lzaW5mKF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9f ZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2lzaW5mZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBz aXplb2YgKGRvdWJsZSkgPyBfX2lzaW5mIChfX2YpIDogX19pc2luZmwgKF9fZikpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzbmFuKF9UcCBfX2Yp IHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2lzbmFuZiAoX19m KSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2lzbmFuIChfX2YpIDogX19p c25hbmwgKF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19j YXB0dXJlX2lzbm9ybWFsKF9UcCBfX2YpIHsgcmV0dXJuICgoc2l6ZW9mIChfX2YpID09IHNpemVv ZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2Yg KGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fZikgOiBfX2ZwY2xhc3NpZnlsIChfX2YpKSA9PSBG UF9OT1JNQUwpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0 dXJlX3NpZ25iaXQoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZs b2F0KSA/IF9fc2lnbmJpdGYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUp ID8gX19zaWduYml0IChfX2YpIDogX19zaWduYml0bCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNncmVhdGVyKF9UcCBfX2YxLCBfVHAg X19mMikKICAgIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX19mMSkgX194 ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9IChfX2YyKTsgIShfX2V4dGVuc2lvbl9f ICh7IF9fdHlwZW9mX18oX194KSBfX3UgPSAoX194KTsgX190eXBlb2ZfXyhfX3kpIF9fdiA9IChf X3kpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191 KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkg OiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXpl b2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9m IChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0g RlBfTkFOOyB9KSkgJiYgX194ID4gX195OyB9KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2dyZWF0ZXJlcXVhbChfVHAgX19mMSwgX1RwIF9f ZjIpCiAgICAgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBfX3gg PSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX195ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9uX18g KHsgX190eXBlb2ZfXyhfX3gpIF9fdSA9IChfX3gpOyBfX3R5cGVvZl9fKF9feSkgX192ID0gKF9f eSk7IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3Up IDogc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191KSA6 IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNpemVv ZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBzaXplb2Yg KGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBG UF9OQU47IH0pKSAmJiBfX3ggPj0gX195OyB9KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2xlc3MoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJl dHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190 eXBlb2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9f KF9feCkgX191ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAo X191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9f dSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5 bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBf X2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9f ZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYm IF9feCA8IF9feTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAg ICBfX2NhcHR1cmVfaXNsZXNzZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJu IChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX19mMSkgX194ID0gKF9fZjEpOyBfX3R5cGVv Zl9fKF9fZjIpIF9feSA9IChfX2YyKTsgIShfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX194 KSBfX3UgPSAoX194KTsgX190eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3Up ID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9 PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChf X3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBj bGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNs YXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkgJiYgX194 IDw9IF9feTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBf X2NhcHR1cmVfaXNsZXNzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4g KF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBfX3ggPSAoX19mMSk7IF9fdHlwZW9m X18oX19mMikgX195ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX3gp IF9fdSA9IChfX3gpOyBfX3R5cGVvZl9fKF9feSkgX192ID0gKF9feSk7IChzaXplb2YgKF9fdSkg PT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9mIChfX3UpID09 IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFzc2lmeWwgKF9f dSkpID09IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNs YXNzaWZ5ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xh c3NpZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0pKSAmJiAoX194 IDwgX195IHx8IF9feSA8IF9feCk7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICAgaW50CiAgICAgX19jYXB0dXJlX2lzdW5vcmRlcmVkKF9UcCBfX2YxLCBfVHAgX19mMikKICAg ICB7IHJldHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9fdSA9IChfX2Yx KTsgX190eXBlb2ZfXyhfX2YyKSBfX3YgPSAoX19mMik7IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9m IChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9mIChfX3UpID09IHNpemVvZiAo ZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQ X05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAo X192KSA6IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9f dikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0pKTsgfQp9CiMgNTgwICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL2NtYXRoIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgZnBjbGFzc2lmeShfVHAgX19mKSB7IHJldHVy biBfX2NhcHR1cmVfZnBjbGFzc2lmeShfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICAgIGludAogICAgaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzZmluaXRl KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2luZihfVHAg X19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNpbmYoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+CiAgICBpbnQKICAgIGlzbmFuKF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc25h bihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNub3JtYWwo X1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbm9ybWFsKF9fZik7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBzaWduYml0KF9UcCBfX2YpIHsgcmV0dXJuIF9fY2Fw dHVyZV9zaWduYml0KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAg ICBpc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVybiBfX2NhcHR1cmVfaXNncmVh dGVyKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAg aXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJl X2lzZ3JlYXRlcmVxdWFsKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICAgIGludAogICAgaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikgeyByZXR1cm4gX19jYXB0dXJl X2lzbGVzcyhfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQK ICAgIGlzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fY2FwdHVy ZV9pc2xlc3NlcXVhbChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBpbnQKICAgIGlzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4g X19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgaW50CiAgICBpc3Vub3JkZXJlZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7 IHJldHVybiBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX19mMSwgX19mMik7IH0KfQoKbmFtZXNwYWNl IHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpmcGNsYXNzaWZ5OwogIHVzaW5nIF9fZ251X2N4eDo6 aXNmaW5pdGU7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2luZjsKICB1c2luZyBfX2dudV9jeHg6Omlz bmFuOwogIHVzaW5nIF9fZ251X2N4eDo6aXNub3JtYWw7CiAgdXNpbmcgX19nbnVfY3h4OjpzaWdu Yml0OwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVyOwogIHVzaW5nIF9fZ251X2N4eDo6aXNn cmVhdGVyZXF1YWw7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3M7CiAgdXNpbmcgX19nbnVfY3h4 Ojppc2xlc3NlcXVhbDsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVzc2dyZWF0ZXI7CiAgdXNpbmcg X19nbnVfY3h4Ojppc3Vub3JkZXJlZDsKfQoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2JpdHMvY21hdGgudGNjIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Nt YXRoLnRjYyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBf VHAKICAgIF9fY21hdGhfcG93ZXIoX1RwIF9feCwgdW5zaWduZWQgaW50IF9fbikKICAgIHsKICAg ICAgX1RwIF9feSA9IF9fbiAlIDIgPyBfX3ggOiAxOwoKICAgICAgd2hpbGUgKF9fbiA+Pj0gMSkK ICAgICAgICB7CiAgICAgICAgICBfX3ggPSBfX3ggKiBfX3g7CiAgICAgICAgICBpZiAoX19uICUg MikKICAgICAgICAgICAgX195ID0gX195ICogX194OwogICAgICAgIH0KCiAgICAgIHJldHVybiBf X3k7CiAgICB9Cn0KIyA2NTUgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvY21hdGgiIDIgMwojIDQy ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKIyAx ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2xpbWl0cyIgMSAzCiMgNDcgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvbGltaXRzIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaTM4Ni1zbGFj a3dhcmUtbGludXgvYml0cy9jcHVfbGltaXRzLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvYysr LzMuMi4xL2xpbWl0cyIgMiAzCiMgODg3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2xpbWl0cyIg MwpuYW1lc3BhY2Ugc3RkCnsKICBlbnVtIGZsb2F0X3JvdW5kX3N0eWxlCiAgewogICAgcm91bmRf aW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgcm91bmRfdG93YXJkX3plcm8gPSAwLAogICAgcm91bmRf dG9fbmVhcmVzdCA9IDEsCiAgICByb3VuZF90b3dhcmRfaW5maW5pdHkgPSAyLAogICAgcm91bmRf dG93YXJkX25lZ19pbmZpbml0eSA9IDMKICB9OwoKICBlbnVtIGZsb2F0X2Rlbm9ybV9zdHlsZQog IHsKICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEsCiAgICBkZW5vcm1fYWJzZW50ID0gMCwK ICAgIGRlbm9ybV9wcmVzZW50ID0gMQogIH07CgoKCgogIHN0cnVjdCBfX251bWVyaWNfbGltaXRz X2Jhc2UKICB7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IGZhbHNlOwoK ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMDsKICAgIHN0YXRpYyBjb25zdCBpbnQgZGln aXRzMTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19leGFjdCA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDA7CgogICAg c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgc3RhdGljIGNvbnN0IGludCBt aW5fZXhwb25lbnQxMCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7 CiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x dWlldF9OYU4gPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFO ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0g PSBkZW5vcm1fYWJzZW50OwogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g ZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19tb2R1bG8gPSBmYWxzZTsKCiAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwog ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICBzdGF0aWMg Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsK ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHMg OiBwdWJsaWMgX19udW1lcmljX2xpbWl0c19iYXNlCiAgICB7CiAgICAgIHN0YXRpYyBfVHAgbWlu KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBf VHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0 YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsg fQogICAgICBzdGF0aWMgX1RwIHJvdW5kX2Vycm9yKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNf Y2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgaW5maW5pdHkoKSB0aHJvdygpIHsgcmV0 dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBxdWlldF9OYU4oKSB0 aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBz aWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAg ICAgIHN0YXRpYyBfVHAgZGVub3JtX21pbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 X1RwPigwKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1p dHM8Ym9vbD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0 cnVlOwoKICAgICAgc3RhdGljIGJvb2wgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxz ZTsgfQoKICAgICAgc3RhdGljIGJvb2wgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiB0cnVl OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE7CiAgICAgIHN0YXRpYyBjb25z dCBpbnQgZGlnaXRzMTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCBy YWRpeCA9IDI7CiAgICAgIHN0YXRpYyBib29sIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAg ICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQg PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3Rh dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1h eF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAg c3RhdGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAg ICAgIHN0YXRpYyBib29sIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7 IH0KICAgICAgc3RhdGljIGJvb2wgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgZGVub3JtX21pbigpIHRocm93KCkKICAgICAg eyByZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgoKCgogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCB0cmFwcyA9IHRydWUKICAgICAgICAgICAgICAgfHwgdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h dF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoK ICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Y2hhcj4KICAgIHsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGNo YXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoY2hhcikoLTEyNyAtIDEpOyB9CiAgICAg IHN0YXRpYyBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGNoYXIpMTI3OyB9Cgog ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg ZGlnaXRzMTAgPSAyOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g MjsKICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hh cigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJl dHVybiBjaGFyKCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsK ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw b25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRp YyBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAg c3RhdGljIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0K ICAgICAgc3RhdGljIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4g Y2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0 aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu ZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg cm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTA3MSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIuMS9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19s aW1pdHM8c2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp YWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuICgtMTI3IC0gMSk7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1heCgp IHRocm93KCkKICAgICAgeyByZXR1cm4gMTI3OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0cyA9IDc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHNpZ25lZCBj aGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHNp Z25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAg ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu dCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9z dHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgaW5maW5p dHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsg fQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHNpZ25lZCBj aGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNp Z25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CgogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVs byA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAg IH07CiMgMTEyOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+ CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj4KICAgIHsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2ln bmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1 bnNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDEyNyAqIDIgKyAxKTsg fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA4OwogICAgICBzdGF0aWMgY29uc3Qg aW50IGRpZ2l0czEwID0gMjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFk aXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBlcHNpbG9uKCkgdGhyb3coKQogICAg ICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkg dGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l eHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwog ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2lu ZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsK ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3Jt X2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7 CgogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2ln bmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1 bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBzaWduYWxpbmdf TmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigw KTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQogICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQoKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVl OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0 X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoK CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx3Y2hhcl90PgogICAgewog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0 aWMgd2NoYXJfdCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICh3Y2hhcl90KSgtMjE0NzQ4 MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBtYXgoKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuICh3Y2hhcl90KTIxNDc0ODM2NDdMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0cyA9IDMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1 ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB3Y2hhcl90 IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHdjaGFy X3Qgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f ZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsK ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFs aW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhh c19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVu b3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB3Y2hhcl90IGluZmluaXR5KCkgdGhyb3co KQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KICAgICAgc3RhdGljIHdjaGFyX3QgcXVpZXRf TmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KICAgICAgc3RhdGljIHdj aGFyX3Qgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9 CiAgICAgIHN0YXRpYyB3Y2hhcl90IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IHdjaGFyX3QoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJh cHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91 bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEyNDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvbGlt aXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNob3J0PgogICAg ewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBz dGF0aWMgc2hvcnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTMyNzY3IC0gMSk7IH0K ICAgICAgc3RhdGljIHNob3J0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMzI3Njc7IH0K CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTU7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgZGlnaXRzMTAgPSA0OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4 ID0gMjsKICAgICAgc3RhdGljIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IDA7IH0KICAgICAgc3RhdGljIHNob3J0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJl dHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg aW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50 MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgc2hv cnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHNob3J0KCk7IH0KICAgICAgc3Rh dGljIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQog ICAgICBzdGF0aWMgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4g c2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAg eyByZXR1cm4gc2hvcnQoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9v bCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg PSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTI5OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWdu ZWQgc2hvcnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0g dHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1heCgpIHRocm93KCkKICAg ICAgeyByZXR1cm4gKDMyNzY3ICogMiArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0cyA9IDE2OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNDsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWdu ZWQgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0 aWMgdW5zaWduZWQgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7 IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGlj IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4 X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7 CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf ZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBz aG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBxdWlldF9OYU4oKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQog ICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1 bnNpZ25lZCBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf Y2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ll YzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19i ZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5k X3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAg IHN0cnVjdCBudW1lcmljX2xpbWl0czxpbnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBpbnQgbWluKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAoaW50KSgtMjE0NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMgaW50 IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGludCkyMTQ3NDgzNjQ3TDsgfQoKICAgICAg c3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp dHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog ICAgICBzdGF0aWMgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAg ICAgc3RhdGljIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoK ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29u c3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw b25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5v cm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGludCBpbmZpbml0eSgp IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0 aWMgaW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50 PigwKTsgfQogICAgICBzdGF0aWMgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAgc3RhdGljIGludCBkZW5vcm1fbWlu KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CgogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0g dHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm bG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsK IyAxNDEwICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAg IHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+CiAgICB7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBp bnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgICBzdGF0aWMgdW5z aWduZWQgaW50IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKHVuc2lnbmVkKSgyMTQ3NDgz NjQ3TCAqIDJVICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZXBzaWxv bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50 IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMg Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4 cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGlu Z19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNf ZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y bV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGluZmluaXR5KCkgdGhy b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAg IHN0YXRpYyB1bnNpZ25lZCBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQg c2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGRlbm9ybV9taW4oKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KCiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g PSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9 OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nPgogICAg ewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBz dGF0aWMgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtMjE0NzQ4MzY0N0wgLSAx KTsgfQogICAgICBzdGF0aWMgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIxNDc0 ODM2NDdMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0 aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln bmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0g MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf ZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Owog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0 YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxs b25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIHNpZ25hbGlu Z19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAg ICAgIHN0YXRpYyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp Y19jYXN0PGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s IHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9 IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNTIyICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25l ZCBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy dWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7 IHJldHVybiAoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0cyA9IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5z aWduZWQgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0 YXRpYyB1bnNpZ25lZCBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAw OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1h eF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAw OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0 X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQg bG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcXVpZXRfTmFOKCkgdGhy b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAg ICBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWdu ZWQgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1 bnNpZ25lZCBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9v bCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg PSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0 IG51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgbG9uZyBtaW4oKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuICgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMIC0gMSk7IH0KICAgICAg c3RhdGljIGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDkyMjMzNzIwMzY4 NTQ3NzU4MDdMTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2MzsKICAgICAg c3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE4OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1 ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhy b3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgcm91bmRfZXJy b3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9 IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGlj IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h TiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBk ZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBm YWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9u ZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9u Zz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQog ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBs b25nIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 bG9uZyBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1 ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0 cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy b3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTYzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9s aW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQg bG9uZyBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9 IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1pbigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1heCgpIHRo cm93KCkKICAgICAgeyByZXR1cm4gKDkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAqIDJVTEwgKyAxKTsg fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2NDsKICAgICAgc3RhdGljIGNvbnN0 IGludCBkaWdpdHMxMCA9IDE5OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCBy YWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHJv dW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29u c3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x dWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu b3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s b3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGluZmluaXR5KCkg dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDAp OyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQog ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAg IHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0 aWMgdW5zaWduZWQgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5k ZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5k X3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRl bXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxmbG9hdD4KICAgIHsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGZsb2F0 IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xNzU0OTQzNWUtMzhGOyB9CiAgICAgIHN0 YXRpYyBmbG9hdCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMuNDAyODIzNDdlKzM4Rjsg fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAyNDsKICAgICAgc3RhdGljIGNvbnN0 IGludCBkaWdpdHMxMCA9IDY7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCBy YWRpeCA9IDI7CiAgICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJl dHVybiAxLjE5MjA5MjkwZS0wN0Y7IH0KICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9yKCkg dGhyb3coKQogICAgICB7IHJldHVybiAxLjBGOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1p bl9leHBvbmVudCA9IC0xMjU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAg PSAtMzc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTI4OwogICAgICBz dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMzg7CgogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1 aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05h TiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5v cm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xv c3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBmbG9hdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAg eyByZXR1cm4gMC4wRjsgfQogICAgICBzdGF0aWMgZmxvYXQgcXVpZXRfTmFOKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAwLjBGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBzaWduYWxpbmdfTmFOKCkg dGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBkZW5vcm1f bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CgogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRl ZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNzY1ICIv dXNyL2luY2x1ZGUvYysrLzMuMi4xL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBu dW1lcmljX2xpbWl0czxkb3VibGU+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Nw ZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBkb3VibGUgbWluKCkgdGhyb3coKQogICAg ICB7IHJldHVybiAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwODsgfQogICAgICBzdGF0aWMgZG91Ymxl IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7IH0K CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNTM7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgZGlnaXRzMTAgPSAxNTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1 ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJh ZGl4ID0gMjsKICAgICAgc3RhdGljIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJl dHVybiAyLjIyMDQ0NjA0OTI1MDMxMzFlLTE2OyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcm91bmRf ZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMDsgfQoKICAgICAgc3RhdGljIGNvbnN0 IGludCBtaW5fZXhwb25lbnQgPSAtMTAyMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw b25lbnQxMCA9IC0zMDc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTAy NDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDMwODsKCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19z aWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5 bGUgaGFzX2Rlbm9ybSA9CiAgICAgICAgICAgICAgZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgZG91Ymxl IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRv dWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQogICAgICBzdGF0 aWMgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQog ICAgICBzdGF0aWMgZG91YmxlIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAu MDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPQogICAgICAgICAg ICAgIHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxODQ0ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi4xL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25n IGRvdWJsZT4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0 cnVlOwoKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gMy4zNjIxMDMxNDMxMTIwOTM1MDYyNmUtNDkzMkw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91 YmxlIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xODk3MzE0OTUzNTcyMzE3NjUwMmUr NDkzMkw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjQ7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln bmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGVwc2lsb24oKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TDsgfQogICAgICBz dGF0aWMgbG9uZyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEu MEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTE2MzgxOwogICAg ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTQ5MzE7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTYzODQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4 X2V4cG9uZW50MTAgPSA0OTMyOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5 ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPQogICAgICAgICAgICAg ICAgZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y bSA9CiAgICAgICAgICAgICAgICBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfZGVub3JtX2xvc3MgPQogICAgICAgICAgICAgICAgZmFsc2U7CgogICAgICBzdGF0aWMg bG9uZyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0KICAg ICAgc3RhdGljIGxvbmcgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4g MC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZGVub3JtX21p bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQg PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAg IHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRf c3R5bGUgcm91bmRfc3R5bGUgPQogICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAx OTI0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2xpbWl0cyIgMwp9CiMgNDQgIi91c3IvaW5jbHVk ZS9jKysvMy4yLjEvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCgojIDEgIi91c3IvaW5jbHVk ZS9jKysvMy4yLjEvdHlwZWluZm8iIDEgMwojIDQwICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL3R5 cGVpbmZvIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2UgX19jeHhhYml2MQp7CiAgY2xhc3Mg X19jbGFzc190eXBlX2luZm87Cn0KIyA1NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS90eXBlaW5m byIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKICBjbGFzcyB0eXBlX2luZm8KICB7CiAgcHVibGljOgoK CgoKICAgIHZpcnR1YWwgfnR5cGVfaW5mbygpOwoKICBwcml2YXRlOgoKICAgIHR5cGVfaW5mbyYg b3BlcmF0b3I9KGNvbnN0IHR5cGVfaW5mbyYpOwogICAgdHlwZV9pbmZvKGNvbnN0IHR5cGVfaW5m byYpOwoKICBwcm90ZWN0ZWQ6CiAgICBjb25zdCBjaGFyICpfX25hbWU7CgogIHByb3RlY3RlZDoK ICAgIGV4cGxpY2l0IHR5cGVfaW5mbyhjb25zdCBjaGFyICpfX24pOiBfX25hbWUoX19uKSB7IH0K CiAgcHVibGljOgoKCgogICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0CiAgICB7IHJldHVybiBf X25hbWU7IH0KIyA5OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS90eXBlaW5mbyIgMwogICAgYm9v bCBiZWZvcmUoY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFt ZSA8IF9fYXJnLl9fbmFtZTsgfQogICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHR5cGVfaW5mbyYg X19hcmcpIGNvbnN0CiAgICB7IHJldHVybiBfX25hbWUgPT0gX19hcmcuX19uYW1lOyB9CgogICAg Ym9vbCBvcGVyYXRvciE9KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVy biAhb3BlcmF0b3I9PShfX2FyZyk7IH0KCgogIHB1YmxpYzoKCiAgICB2aXJ0dWFsIGJvb2wgX19p c19wb2ludGVyX3AoKSBjb25zdDsKCiAgICB2aXJ0dWFsIGJvb2wgX19pc19mdW5jdGlvbl9wKCkg Y29uc3Q7CgoKCgoKCgogICAgdmlydHVhbCBib29sIF9fZG9fY2F0Y2goY29uc3QgdHlwZV9pbmZv ICpfX3Rocl90eXBlLCB2b2lkICoqX190aHJfb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgX19vdXRlcikgY29uc3Q7CgoKICAgIHZpcnR1YWwgYm9vbCBfX2RvX3VwY2Fz dChjb25zdCBfX2N4eGFiaXYxOjpfX2NsYXNzX3R5cGVfaW5mbyAqX190YXJnZXQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKl9fb2JqX3B0cikgY29uc3Q7CiAgfTsKCgoKICBj bGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2Nh c3QoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfY2FzdCgpIHRocm93KCk7CiAgfTsK CgogIGNsYXNzIGJhZF90eXBlaWQgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAg IGJhZF90eXBlaWQgKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX3R5cGVpZCgpIHRo cm93KCk7CiAgfTsKfQoKfQojIDQ2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvbG9jYWxl X2ZhY2V0cy50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zh Y2V0PgogICAgbG9jYWxlCiAgICBsb2NhbGU6OmNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVy KSBjb25zdAogICAgewogICAgICBfSW1wbCogX190bXAgPSBuZXcgX0ltcGwoKl9NX2ltcGwsIDEp OwogICAgICBfX3RtcC0+X01fcmVwbGFjZV9mYWNldChfX290aGVyLl9NX2ltcGwsICZfRmFjZXQ6 OmlkKTsKICAgICAgcmV0dXJuIGxvY2FsZShfX3RtcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYm9vbAog ICAgbG9jYWxlOjpvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3QKICAgIHsKICAgICAgdHlwZWRl ZiBzdGQ6OmNvbGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsKICAgICAgY29uc3QgX19jb2xs YXRlX3R5cGUmIF9fY29sbGF0ZSA9IHVzZV9mYWNldDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOwog ICAgICByZXR1cm4gKF9fY29sbGF0ZS5jb21wYXJlKF9fczEuZGF0YSgpLCBfX3MxLmRhdGEoKSAr IF9fczEubGVuZ3RoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zMi5kYXRh KCksIF9fczIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxv Y2FsZSYgX19sb2MpCiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2lkKCk7 CiAgICAgIGxvY2FsZTo6ZmFjZXQqKiBfX2ZhY2V0cyA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0 czsKICAgICAgaWYgKCEoX19pIDwgX19sb2MuX01faW1wbC0+X01fZmFjZXRzX3NpemUgJiYgX19m YWNldHNbX19pXSkpCiAgICAgICAgX190aHJvd19iYWRfY2FzdCgpOwogICAgICByZXR1cm4gc3Rh dGljX2Nhc3Q8Y29uc3QgX0ZhY2V0Jj4oKl9fZmFjZXRzW19faV0pOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBf X2xvYykgdGhyb3coKQogICAgewogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgp OwogICAgICBsb2NhbGU6OmZhY2V0KiogX19mYWNldHMgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNl dHM7CiAgICAgIHJldHVybiAoX19pIDwgX19sb2MuX01faW1wbC0+X01fZmFjZXRzX3NpemUgJiYg X19mYWNldHNbX19pXSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoK ICAgIF9NX2V4dHJhY3RfZmxvYXQoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgaW9zX2Jh c2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg c3RyaW5nJiBfX3h0cmMpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0No YXJUPiBfX3RyYWl0c190eXBlOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxv YygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBl PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1 c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAgICBjb25zdCBjaGFyX3R5 cGUgX19wbHVzID0gX19jdHlwZS53aWRlbignKycpOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19t aW51cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKICAgICAgaW50IF9fcG9zID0gMDsKICAgICAgY2hh cl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9f cGx1cykgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX21pbnVzKSkKICAgICAgICAgICYmIF9f YmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJv dyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICArK19fcG9zOwogICAgICAgICAgX19jID0gKigrK19f YmVnKTsKICAgICAgICB9CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUu d2lkZW4oX1NfYXRvbXNbX01femVyb10pOwogICAgICBib29sIF9fZm91bmRfemVybyA9IGZhbHNl OwogICAgICB3aGlsZSAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYmIF9fYmVnICE9 IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICBf X2ZvdW5kX3plcm8gPSB0cnVlOwogICAgICAgIH0KICAgICAgaWYgKF9fZm91bmRfemVybykKICAg ICAgICB7CiAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVyb107CiAgICAgICAgICAr K19fcG9zOwogICAgICAgIH0KCgogICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfTV9FIC0gX01f emVybyArIDE7CiAgICAgIGNoYXJfdHlwZSBfX3dhdG9tc1tfX2xlbl07CiAgICAgIF9fY3R5cGUu d2lkZW4oX1NfYXRvbXMsIF9TX2F0b21zICsgX19sZW4sIF9fd2F0b21zKTsKICAgICAgYm9vbCBf X2ZvdW5kX2RlYyA9IGZhbHNlOwogICAgICBib29sIF9fZm91bmRfc2NpID0gZmFsc2U7CiAgICAg IGNvbnN0IGNoYXJfdHlwZSBfX2RlYyA9IF9fbnAuZGVjaW1hbF9wb2ludCgpOwoKICAgICAgc3Ry aW5nIF9fZm91bmRfZ3JvdXBpbmc7CiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19u cC5ncm91cGluZygpOwogICAgICBib29sIF9fY2hlY2tfZ3JvdXBpbmcgPSBfX2dyb3VwaW5nLnNp emUoKTsKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3Nl cCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwoKICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kKQog ICAgICAgIHsKCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fdHJhaXRzX3R5cGU6 OmZpbmQoX193YXRvbXMsIDEwLCBfX2MpOwoKCiAgICAgICAgICBpZiAoX19wICYmICFfX3RyYWl0 c190eXBlOjplcShfX2MsIGNoYXJfdHlwZSgpKSkKICAgICAgICAgICAgewoKICAgICAgICAgICAg ICArK19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfX3AgLSBfX3dhdG9t c107CiAgICAgICAgICAgICAgKytfX3NlcF9wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19f YmVnKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX190cmFpdHNfdHlwZTo6ZXEo X19jLCBfX3NlcCkKICAgICAgICAgICAgICAgICAgICYmIF9fY2hlY2tfZ3JvdXBpbmcgJiYgIV9f Zm91bmRfZGVjKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBpZiAoX19zZXBfcG9zKQog ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0 YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9 IDA7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBf X2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5 cGU6OmVxKF9fYywgX19kZWMpICYmICFfX2ZvdW5kX2RlYykKICAgICAgICAgICAgewoKCgogICAg ICAgICAgICAgIGlmIChfX2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICAgICAgICAgIF9f Zm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAg ICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyArPSAnLic7CiAgICAgICAgICAgICAg X19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBfX2ZvdW5kX2RlYyA9IHRydWU7CiAgICAg ICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fd2F0 b21zW19NX2VdKQogICAgICAgICAgICAgICAgICAgIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywg X193YXRvbXNbX01fRV0pKQogICAgICAgICAgICAgICAgICAgJiYgIV9fZm91bmRfc2NpICYmIF9f cG9zKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAg X194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICBfX2Mg PSAqKCsrX19iZWcpOwoKCiAgICAgICAgICAgICAgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywg X19wbHVzKQogICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fbWlu dXMpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19fcG9zOwogICAgICAg ICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAg ICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgIF9fZm91bmRfc2NpID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQoKICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKCgogICAgICBpZiAoX19jaGVja19ncm91cGluZyAm JiBfX2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CgogICAgICAgICAgaWYgKCFfX2Zv dW5kX2RlYykKICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFy PihfX3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3VwaW5n LCBfX2ZvdW5kX2dyb3VwaW5nKSkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi aXQ7CiAgICAgICAgfQoKCiAgICAgIF9feHRyYyArPSBjaGFyKCk7CiAgICAgIGlmIChfX2JlZyA9 PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4g X19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0 ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0 cmFjdF9pbnQoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYgX194dHJj LCBpbnQmIF9fYmFzZSkgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hh clQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9j KCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8 X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVz ZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCiAgICAgIGlvc19iYXNlOjpmbXRm bGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAg ICAgIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAgIF9fYmFzZSA9IDg7 CiAgICAgIGVsc2UgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgpCiAgICAgICAgX19i YXNlID0gMTY7CiAgICAgIGVsc2UKICAgICAgICBfX2Jhc2UgPSAxMDsKCgogICAgICBpbnQgX19w b3MgPSAwOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBjb25zdCBjaGFyX3R5 cGUgX19wbHVzID0gX19jdHlwZS53aWRlbignKycpOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19t aW51cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKCiAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEo X19jLCBfX3BsdXMpIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19taW51cykpCiAgICAgICAg ICAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBfX3h0cmMgKz0gX19jdHlw ZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgKytfX3BvczsKICAgICAgICAgIF9fYyA9 ICooKytfX2JlZyk7CiAgICAgICAgfQoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3plcm8gPSBf X2N0eXBlLndpZGVuKF9TX2F0b21zW19NX3plcm9dKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9f eCA9IF9fY3R5cGUud2lkZW4oJ3gnKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fWCA9IF9fY3R5 cGUud2lkZW4oJ1gnKTsKICAgICAgaWYgKF9fYmFzZSA9PSAxMCkKICAgICAgICB7CiAgICAgICAg ICBib29sIF9fZm91bmRfemVybyA9IGZhbHNlOwogICAgICAgICAgd2hpbGUgKF9fdHJhaXRzX3R5 cGU6OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgX19mb3VuZF96ZXJvID0g dHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fZm91bmRfemVybykKICAgICAgICAg ICAgewogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfTV96ZXJvXTsKICAgICAgICAg ICAgICArK19fcG9zOwogICAgICAgICAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSAwKQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywg X194KQogICAgICAgICAgICAgICAgICAgICAgIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19Y KSkKICAgICAgICAgICAgICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhf X2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAg ICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgIF9fYmFzZSA9 IDE2OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgICAgIF9fYmFzZSA9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYmFzZSA9PSAxNikKICAgICAgICB7CiAgICAgICAg ICBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYmIF9fYmVnICE9IF9fZW5kKQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3plcm9dOwog ICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAg ICAgICAgICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX194KSB8fCBfX3RyYWl0c190 eXBlOjplcShfX2MsIF9fWCkpCiAgICAgICAgICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQog ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJy b3coX19jLCBjaGFyKCkpOwogICAgICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAg ICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAg ICAgICAgfQoKCgogICAgICBzaXplX3QgX19sZW47CiAgICAgIGlmIChfX2Jhc2UgPT0gMTYpCiAg ICAgICAgX19sZW4gPSBfTV9zaXplOwogICAgICBlbHNlCiAgICAgICAgX19sZW4gPSBfX2Jhc2U7 CgoKICAgICAgY2hhcl90eXBlIF9fd2F0b21zW19NX3NpemVdOwogICAgICBfX2N0eXBlLndpZGVu KF9TX2F0b21zLCBfU19hdG9tcyArIF9fbGVuLCBfX3dhdG9tcyk7CiAgICAgIHN0cmluZyBfX2Zv dW5kX2dyb3VwaW5nOwogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBp bmcoKTsKICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5nID0gX19ncm91cGluZy5zaXplKCk7CiAg ICAgIGludCBfX3NlcF9wb3MgPSAwOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX25w LnRob3VzYW5kc19zZXAoKTsKICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsK ICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dh dG9tcywgX19sZW4sIF9fYyk7CgoKICAgICAgICAgIGlmIChfX3AgJiYgIV9fdHJhaXRzX3R5cGU6 OmVxKF9fYywgY2hhcl90eXBlKCkpKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9feHRy YyArPSBfU19hdG9tc1tfX3AgLSBfX3dhdG9tc107CiAgICAgICAgICAgICAgKytfX3BvczsKICAg ICAgICAgICAgICArK19fc2VwX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwog ICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9f c2VwKSAmJiBfX2NoZWNrX2dyb3VwaW5nKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBp ZiAoX19zZXBfcG9zKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2ZvdW5k X2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAg ICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UK CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCgoKICAgICAgaWYgKF9fY2hlY2tfZ3JvdXBp bmcgJiYgX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAgICAgICAgewoKICAgICAgICAgIF9fZm91 bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgIGlm ICghX192ZXJpZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19mb3VuZF9ncm91cGluZykpCiAgICAg ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0KCgogICAgICBfX3h0 cmMgKz0gY2hhcigpOwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0g aW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9n ZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5 cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwgYm9vbCYgX192KSBjb25zdAogICAgewoKICAgICAgaWYgKCEoX19pby5mbGFncygpICYg aW9zX2Jhc2U6OmJvb2xhbHBoYSkpCiAgICAgICAgewoKCiAgICAgICAgICBzdHJpbmcgX194dHJj OwogICAgICAgICAgaW50IF9fYmFzZTsKICAgICAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQo X19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwoKICAgICAgICAgIHVu c2lnbmVkIGxvbmcgX191bDsKICAgICAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigp LCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgICAgICBpZiAoIShfX2Vy ciAmIGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX3VsIDw9IDEpCiAgICAgICAgICAgIF9fdiA9IF9f dWw7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0 OwogICAgICAgIH0KCgogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBjaGFy X3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgICAgICB0eXBlZGVmIGJhc2ljX3N0 cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CgogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19p by5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2Vf ZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIGNvbnN0IF9fc3RyaW5n X3R5cGUgX190cnVlID0gX19ucC50cnVlbmFtZSgpOwogICAgICAgICAgY29uc3QgX19zdHJpbmdf dHlwZSBfX2ZhbHNlID0gX19ucC5mYWxzZW5hbWUoKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlw ZSogX190cnVlcyA9IF9fdHJ1ZS5jX3N0cigpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBf X2ZhbHNlcyA9IF9fZmFsc2UuY19zdHIoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RydWVu ID0gX190cnVlLnNpemUoKSAtIDE7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19mYWxzZW4gPSBf X2ZhbHNlLnNpemUoKSAtIDE7CgogICAgICAgICAgZm9yIChzaXplX3QgX19uID0gMDsgX19iZWcg IT0gX19lbmQ7ICsrX19uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9f YyA9ICpfX2JlZysrOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZiA9IF9fbiA8PSBfX2ZhbHNl bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX190cmFpdHNfdHlwZTo6ZXEoX19jLCBf X2ZhbHNlc1tfX25dKSA6IGZhbHNlOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0dCA9IF9fbiA8 PSBfX3RydWVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfX3RyYWl0c190eXBlOjpl cShfX2MsIF9fdHJ1ZXNbX19uXSkgOiBmYWxzZTsKICAgICAgICAgICAgICBpZiAoIShfX3Rlc3Rm IHx8IF9fdGVzdHQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2VyciB8 PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0ZiAmJiBfX24gPT0gX19mYWxzZW4p CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdiA9IDA7CiAgICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKF9f dGVzdHQgJiYgX19uID09IF9fdHJ1ZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgIF9fdiA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgIF9f ZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19iZWc7CiAg ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf SW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlw ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5n IF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChf X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVy dF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsK ICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46 OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0 JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7 CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vyciwg X194dHJjLCBfX2Jhc2UpOwogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgIF9fY29udmVy dF90b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7 CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Vs IDw9IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4KCkpCiAgICAgICAgX192ID0g c3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19l cnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAg bnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0 ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9f eHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2Jl ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIHVuc2lnbmVkIGxv bmcgX191bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJy LCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFp bGJpdCkKICAgICAgICAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6 bWF4KCkpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX3VsKTsKICAg ICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4g X19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl cj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQo aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdAog ICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9 IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNl KTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2Nf bG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0 PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAg ICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwg X19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJj LmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4g X19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl cj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQo aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyBsb25nJiBfX3YpIGNv bnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9f YmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBf X2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2Vyciwg X1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51 bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVy X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAg ICAgX194dHJjLnJlc2VydmUoMzIpOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19i ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194 dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVn OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg ICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJf dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX192KSBjb25zdAogICAgewogICAgICBz dHJpbmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01f ZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBf X2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwog ICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6 CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf X2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9f dikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgX194dHJjLnJlc2VydmUo MzIpOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBf X2VyciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwg X19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1f Z2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90 eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVmIGlvc19iYXNlOjpm bXRmbGFncyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdzKCk7CiAg ICAgIGZtdGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6 YmFzZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBwZXJj YXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZtdCAmIF9fZm10 bWFzayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7CgogICAgICBzdHJp bmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50 KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKCgogICAgICBfX2lv LmZsYWdzKF9fZm10KTsKCiAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAgX19jb252ZXJ0 X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsK ICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCiAgICAgICAgX192ID0gcmVp bnRlcnByZXRfY2FzdDx2b2lkKj4oX191bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBp b3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQojIDYxOCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9W YWx1ZVQ+CiAgICAgIF9PdXRJdGVyCiAgICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Ogog ICAgICBfTV9jb252ZXJ0X2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFy VCBfX2ZpbGwsIGNoYXIgX19tb2QsCiAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVCBfX3Yp IGNvbnN0CiAgICAgIHsKCgogICAgICAgIGNvbnN0IGludCBfX21heF9kaWdpdHMgPSBudW1lcmlj X2xpbWl0czxfVmFsdWVUPjo6ZGlnaXRzMTAgKyAxOwogICAgICAgIHN0cmVhbXNpemUgX19wcmVj ID0gX19pby5wcmVjaXNpb24oKTsKCiAgICAgICAgaWYgKF9fcHJlYyA+IHN0YXRpY19jYXN0PHN0 cmVhbXNpemU+KF9fbWF4X2RpZ2l0cykpCiAgICAgICAgICBfX3ByZWMgPSBzdGF0aWNfY2FzdDxz dHJlYW1zaXplPihfX21heF9kaWdpdHMpOwoKCiAgICAgICAgY2hhciBfX2ZidWZbMTZdOwoKCiAg ICAgICAgaW50IF9fbGVuOwoKCgogICAgICAgIGludCBfX2NzX3NpemUgPSBfX21heF9kaWdpdHMg KiAzOwogICAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2Fs bG9jYShfX2NzX3NpemUpKTsKCiAgICAgICAgY29uc3QgYm9vbCBfX2ZwID0gX1NfZm9ybWF0X2Zs b2F0KF9faW8sIF9fZmJ1ZiwgX19tb2QsIF9fcHJlYyk7CiAgICAgICAgaWYgKF9fZnApCiAgICAg ICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9f diwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSwgX19wcmVj KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywg X19jc19zaXplLCBfX2ZidWYsIF9fdiwgX1NfY19sb2NhbGUpOwoKCiAgICAgICAgaWYgKF9fbGVu ID49IF9fY3Nfc2l6ZSkKICAgICAgICAgIHsKICAgICAgICAgICAgX19jc19zaXplID0gX19sZW4g KyAxOwogICAgICAgICAgICBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxv Y2EoX19jc19zaXplKSk7CiAgICAgICAgICAgIGlmIChfX2ZwKQogICAgICAgICAgICAgIF9fbGVu ID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSwgX19wcmVjKTsKICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2Nz LCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfU19jX2xvY2FsZSk7CiAgICAgICAgICB9CiMgNjgxICIvdXNyL2luY2x1ZGUvYysr LzMuMi4xL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICAgICAgICByZXR1cm4gX01fd2lkZW5f ZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fY3MsIF9fbGVuKTsKICAgICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8dHlwZW5h bWUgX1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVy Pjo6CiAgICAgIF9NX2NvbnZlcnRfaW50KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9D aGFyVCBfX2ZpbGwsIGNoYXIgX19tb2QsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2Rs LCBfVmFsdWVUIF9fdikgY29uc3QKICAgICAgewoKCgogICAgICAgIGNoYXIgX19mYnVmWzE2XTsK ICAgICAgICBfU19mb3JtYXRfaW50KF9faW8sIF9fZmJ1ZiwgX19tb2QsIF9fbW9kbCk7CgoKICAg ICAgICBpbnQgX19jc19zaXplID0gNjQ7CiAgICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0 PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgIGludCBfX2xlbiA9 IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKCiAgICAgICAgaWYgKF9f bGVuID49IF9fY3Nfc2l6ZSkKICAgICAgICAgIHsKICAgICAgICAgICAgX19jc19zaXplID0gX19s ZW4gKyAxOwogICAgICAgICAgICBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9h bGxvY2EoX19jc19zaXplKSk7CiAgICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihf X2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX1NfY19sb2NhbGUpOwogICAgICAgICAgfQoKCgoKCgogICAgICAgIHJldHVybiBf TV93aWRlbl9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fY3MsIF9fbGVuKTsKICAgICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIK ICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgX01fd2lkZW5fZmxvYXQoX091dEl0 ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciogX19jcywKICAgICAg ICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3Ry YWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0g X19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9m YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNf Y2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbikp OwoKCiAgICAgIF9DaGFyVCogX193czIgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5f YWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4gKiAyKSk7CiAgICAgIF9fY3R5cGUud2lk ZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsKCgogICAgICBjb25zdCBfQ2hhclQqIF9fcDsK ICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxf Q2hhclQ+ID4oX19sb2MpOwogICAgICBpZiAoX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dz LCBfX2xlbiwgX19jdHlwZS53aWRlbignLicpKSkKICAgICAgICBfX3dzW19fcCAtIF9fd3NdID0g X19ucC5kZWNpbWFsX3BvaW50KCk7CgoKCgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9 IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0g X19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fZ3JvdXBpbmcu c2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgIF9DaGFyVCogX19wMjsKICAgICAgICAgIGludCBf X2RlY2xlbiA9IF9fcCA/IF9fcCAtIF9fd3MgOiBfX2xlbjsKICAgICAgICAgIF9fcDIgPSBfX2Fk ZF9ncm91cGluZyhfX3dzMiwgX19ucC50aG91c2FuZHNfc2VwKCksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSArIF9fZ3JvdXBpbmcuc2l6ZSgpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3MsIF9fd3MgKyBfX2RlY2xlbik7CiAgICAgICAg ICBpbnQgX19uZXdsZW4gPSBfX3AyIC0gX193czI7CgoKICAgICAgICAgIGlmIChfX3ApCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBfX3RyYWl0c190eXBlOjpjb3B5KF9fcDIsIF9fcCwgX19s ZW4gLSBfX2RlY2xlbik7CiAgICAgICAgICAgICAgX19uZXdsZW4gKz0gX19sZW4gLSBfX2RlY2xl bjsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBfX3dzID0gX193czI7CiAgICAgICAgICBfX2xl biA9IF9fbmV3bGVuOwogICAgICAgIH0KCiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19zLCBfX2lv LCBfX2ZpbGwsIF9fd3MsIF9fbGVuKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091 dEl0ZXI+OjoKICAgIF9NX3dpZGVuX2ludChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBf Q2hhclQgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29u c3QKICAgIHsKCgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAg ICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g PihfX2xvYyk7CiAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVp bHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9fbGVuKSk7CgoKICAgICAgX0NoYXJUKiBf X3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFy VCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKiBfX2xlbiAqIDIpKTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19s ZW4sIF9fd3MpOwoKCiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFj ZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBp bmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGNvbnN0IGlvc19iYXNlOjpmbXRmbGFncyBfX2Jh c2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgIGlmIChf X2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CgoKCgoKICAgICAgICAgIHN0cmVhbXNpemUgX19v ZmYgPSAwOwogICAgICAgICAgaWYgKChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2Up ICYmIF9fbGVuID4gMSkKICAgICAgICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpv Y3QpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX19vZmYgPSAxOwogICAgICAgICAg ICAgICAgKl9fd3MyID0gKl9fd3M7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlm IChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgIF9fb2ZmID0gMjsKICAgICAgICAgICAgICAgICpfX3dzMiA9ICpfX3dzOwogICAgICAg ICAgICAgICAgKihfX3dzMiArIDEpID0gKihfX3dzICsgMSk7CiAgICAgICAgICAgICAgfQogICAg ICAgICAgX0NoYXJUKiBfX3A7CiAgICAgICAgICBfX3AgPSBfX2FkZF9ncm91cGluZyhfX3dzMiAr IF9fb2ZmLCBfX25wLnRob3VzYW5kc19zZXAoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fZ3JvdXBpbmcuY19zdHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Z3JvdXBpbmcuY19zdHIoKSArIF9fZ3JvdXBpbmcuc2l6ZSgpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX193cyArIF9fb2ZmLCBfX3dzICsgX19sZW4pOwogICAgICAgICAgX19sZW4g PSBfX3AgLSBfX3dzMjsKCiAgICAgICAgICBfX3dzID0gX193czI7CiAgICAgICAgfQogICAgICBy ZXR1cm4gX01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX3dzLCBfX2xlbik7CiAgICB9CgoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJ dGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIF9NX2luc2VydChfT3V0SXRl ciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjb25zdCBfQ2hhclQqIF9fd3Ms CiAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJf dHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKCiAgICAgIHN0cmVhbXNpemUgX193ID0gX19p by53aWR0aCgpOwogICAgICBfQ2hhclQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19i dWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9fdykpOwogICAgICBpZiAoX193ID4g c3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19sZW4pKQogICAgICAgIHsKICAgICAgICAgIF9fcGFk PF9DaGFyVCwgX190cmFpdHNfdHlwZT46Ol9TX3BhZChfX2lvLCBfX2ZpbGwsIF9fd3MyLCBfX3dz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdywgX19s ZW4sIHRydWUpOwogICAgICAgICAgX19sZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KF9fdyk7CgogICAg ICAgICAgX193cyA9IF9fd3MyOwogICAgICAgIH0KICAgICAgX19pby53aWR0aCgwKTsKCgoKICAg ICAgZm9yIChpbnQgX19qID0gMDsgX19qIDwgX19sZW47ICsrX19qLCArK19fcykKICAgICAgICAq X19zID0gX193c1tfX2pdOwogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8 X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf X2lvLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3QKICAgIHsKICAgICAgaW9zX2Jh c2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7CiAgICAgIGlmICgoX19mbGFncyAm IGlvc19iYXNlOjpib29sYWxwaGEpID09IDApCiAgICAgICAgewogICAgICAgICAgdW5zaWduZWQg bG9uZyBfX3V2ID0gX192OwogICAgICAgICAgX19zID0gX01fY29udmVydF9pbnQoX19zLCBfX2lv LCBfX2ZpbGwsICd1JywgY2hhcigpLCBfX3V2KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAg ICB7CiAgICAgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7 CiAgICAgICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICAgICAgY29uc3Qg bnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19s b2MpOwogICAgICAgICAgX19zdHJpbmdfdHlwZSBfX25hbWU7CiAgICAgICAgICBpZiAoX192KQog ICAgICAgICAgICBfX25hbWUgPSBfX25wLnRydWVuYW1lKCk7CiAgICAgICAgICBlbHNlCiAgICAg ICAgICAgIF9fbmFtZSA9IF9fbnAuZmFsc2VuYW1lKCk7CiAgICAgICAgICBfX3MgPSBfTV9pbnNl cnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fbmFtZS5jX3N0cigpLCBfX25hbWUuc2l6ZSgpKTsKICAg ICAgICB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9P dXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJf dHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQo X19zLCBfX2lvLCBfX2ZpbGwsICdkJywgY2hhcigpLCBfX3YpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxf Q2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9f aW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0 CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCBjaGFy KCksIF9fdik7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0 ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19w dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fYiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBs b25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19iLCBfX2Zp bGwsICdkJywgJ2wnLCBfX3YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6 CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2Zp bGwsCiAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJu IF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAndScsICdsJywgX192KTsgfQoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVy CiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19z LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKICAg IHsgcmV0dXJuIF9NX2NvbnZlcnRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIGNoYXIoKSwgX192 KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg X091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJf dHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIGxv bmcgZG91YmxlIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfZmxvYXQoX19zLCBf X2lvLCBfX2ZpbGwsICdMJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRl cj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUg X19maWxsLAogICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgIHsKICAgICAgaW9z X2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7CiAgICAgIGlvc19iYXNlOjpm bXRmbGFncyBfX2ZtdCA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFzZWZpZWxk CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBwZXJjYXNl IHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZsYWdzICYgX19mbXQg fCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwogICAgICB0cnkKICAgICAg ICB7CiAgICAgICAgICBfX3MgPSBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3Un LCBjaGFyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0 PHVuc2lnbmVkIGxvbmc+KF9fdikpOwogICAgICAgICAgX19pby5mbGFncyhfX2ZsYWdzKTsKICAg ICAgICB9CiAgICAgIGNhdGNoICguLi4pCiAgICAgICAgewogICAgICAgICAgX19pby5mbGFncyhf X2ZsYWdzKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAg IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9J bkl0ZXIKICAgIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5 cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAog ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMp IGNvbnN0CiAgICB7CiAgICAgIHN0cmluZ190eXBlIF9fc3RyOwogICAgICBfX2JlZyA9IHRoaXMt PmRvX2dldChfX2JlZywgX19lbmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fc3RyKTsKCiAgICAg IGNvbnN0IGludCBfX24gPSBudW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT46OmRpZ2l0czEwOwog ICAgICBjaGFyKiBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19u KSk7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0 IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9j KTsKICAgICAgY29uc3QgX0NoYXJUKiBfX3djcyA9IF9fc3RyLmNfc3RyKCk7CiAgICAgIF9fY3R5 cGUubmFycm93KF9fd2NzLCBfX3djcyArIF9fc3RyLnNpemUoKSArIDEsIGNoYXIoKSwgX19jcyk7 CiAgICAgIF9fY29udmVydF90b192KF9fY3MsIF9fdW5pdHMsIF9fZXJyLCBfU19jX2xvY2FsZSk7 CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRl cj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9f aW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCBzdHJpbmdfdHlwZSYgX191bml0cykgY29uc3QKICAgIHsKCiAgICAgIHR5cGVkZWYgbW9uZXlw dW5jdDxfQ2hhclQsIHRydWU+IF9fbW9uZXlfdHJ1ZTsKICAgICAgdHlwZWRlZiBtb25leXB1bmN0 PF9DaGFyVCwgZmFsc2U+IF9fbW9uZXlfZmFsc2U7CiAgICAgIHR5cGVkZWYgbW9uZXlfYmFzZTo6 cGFydCBwYXJ0OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUg c2l6ZV90eXBlOwoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAg ICAgY29uc3QgX19tb25leV90cnVlJiBfX21wdCA9IHVzZV9mYWNldDxfX21vbmV5X3RydWU+KF9f bG9jKTsKICAgICAgY29uc3QgX19tb25leV9mYWxzZSYgX19tcGYgPSB1c2VfZmFjZXQ8X19tb25l eV9mYWxzZT4oX19sb2MpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNl X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgogICAgICBjb25zdCBtb25leV9iYXNlOjpw YXR0ZXJuIF9fcCA9IF9faW50bCA/IF9fbXB0Lm5lZ19mb3JtYXQoKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLm5lZ19mb3JtYXQoKTsKCiAgICAg IGNvbnN0IHN0cmluZ190eXBlIF9fcG9zX3NpZ24gPV9faW50bCA/IF9fbXB0LnBvc2l0aXZlX3Np Z24oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5w b3NpdGl2ZV9zaWduKCk7CiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9fbmVnX3NpZ24gPV9faW50 bCA/IF9fbXB0Lm5lZ2F0aXZlX3NpZ24oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiBfX21wZi5uZWdhdGl2ZV9zaWduKCk7CiAgICAgIGNvbnN0IGNoYXJfdHlw ZSBfX2QgPSBfX2ludGwgPyBfX21wdC5kZWNpbWFsX3BvaW50KCkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6IF9fbXBmLmRlY2ltYWxfcG9pbnQoKTsKICAgICAgY29uc3QgY2hh cl90eXBlIF9fc2VwID0gX19pbnRsID8gX19tcHQudGhvdXNhbmRzX3NlcCgpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLnRob3VzYW5kc19zZXAoKTsKCiAgICAg IGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19pbnRsID8gX19tcHQuZ3JvdXBpbmcoKSA6IF9f bXBmLmdyb3VwaW5nKCk7CgoKICAgICAgc3RyaW5nX3R5cGUgX19zaWduOwoKICAgICAgc3RyaW5n IF9fZ3JvdXBpbmdfdG1wOwoKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7CgogICAgICBib29sIF9f dGVzdHZhbGlkID0gdHJ1ZTsKCiAgICAgIGJvb2wgX190ZXN0ZGVjZm91bmQgPSBmYWxzZTsKCgog ICAgICBzdHJpbmdfdHlwZSBfX3RlbXBfdW5pdHM7CgogICAgICBjaGFyX3R5cGUgX19jID0gKl9f YmVnOwogICAgICBjaGFyX3R5cGUgX19lb2YgPSBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KGNoYXJf dHJhaXRzPGNoYXJfdHlwZT46OmVvZigpKTsKICAgICAgZm9yIChpbnQgX19pID0gMDsgX19iZWcg IT0gX19lbmQgJiYgX19pIDwgNCAmJiBfX3Rlc3R2YWxpZDsgKytfX2kpCiAgICAgICAgewogICAg ICAgICAgcGFydCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19faV0pOwog ICAgICAgICAgc3dpdGNoIChfX3doaWNoKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgY2FzZSBtb25leV9iYXNlOjpzeW1ib2w6CiAgICAgICAgICAgICAgICAgIGlmIChfX2lvLmZs YWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UKICAgICAgICAgICAgICAgICAgICAgIHx8IF9faSA8 IDIgfHwgX19zaWduLnNpemUoKSA+IDEKICAgICAgICAgICAgICAgICAgICAgIHx8ICgoc3RhdGlj X2Nhc3Q8cGFydD4oX19wLmZpZWxkWzNdKSAhPSBtb25leV9iYXNlOjpub25lKQogICAgICAgICAg ICAgICAgICAgICAgICAgICYmIF9faSA9PSAyKSkKICAgICAgICAgICAgICAgICAgICB7CgoKCgoK ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9fc3ltYm9sID0gX19pbnRs ID8gX19tcHQuY3Vycl9zeW1ib2woKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmN1cnJfc3ltYm9sKCk7CiAgICAgICAgICAg ICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3N5bWJvbC5zaXplKCk7CiAgICAgICAgICAg ICAgICAgICAgICBzaXplX3R5cGUgX19qID0gMDsKICAgICAgICAgICAgICAgICAgICAgIHdoaWxl IChfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9faiA8IF9f bGVuICYmIF9fc3ltYm9sW19fal0gPT0gX19jKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAg ICAgICAgICAgICArK19fajsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAg ICAgICAgICAgICBpZiAoX19qICE9IF9fbGVuICYmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6 c2hvd2Jhc2UpKQogICAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwog ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNpZ246CgogICAgICAgICAgICAgICAgICBpZiAoX19wb3Nf c2lnbi5zaXplKCkgJiYgX19uZWdfc2lnbi5zaXplKCkpCiAgICAgICAgICAgICAgICAgIHsKCiAg ICAgICAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX3Bvc19zaWduWzBdKQogICAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBfX3NpZ24gPSBfX3Bvc19zaWduOwog ICAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9fYyA9PSBfX25lZ19zaWduWzBd KQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBfX3NpZ24g PSBfX25lZ19zaWduOwogICAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwog ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgZWxzZSBpZiAoX19wb3Nfc2lnbi5zaXplKCkgJiYgX19jID09IF9fcG9z X3NpZ25bMF0pCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19z aWduID0gX19wb3Nfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7 CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX25lZ19z aWduLnNpemUoKSAmJiBfX2MgPT0gX19uZWdfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICBfX3NpZ24gPSBfX25lZ19zaWduOwogICAgICAgICAgICAg ICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjp2YWx1ZToK CgogICAgICAgICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAg ICAgICAgICAgICYmIChfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfHwgKF9fYyA9PSBfX2QgJiYgIV9fdGVzdGRlY2ZvdW5kKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9fYyA9PSBfX3NlcCkpCiAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2QpCiAgICAgICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nX3Rt cCArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICAgICAg ICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX190ZXN0ZGVjZm91 bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg ICBlbHNlIGlmIChfX2MgPT0gX19zZXApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoX19ncm91cGluZy5zaXplKCkpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5n X3RtcCArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVs c2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9f dGVtcF91bml0cyArPSBfX2M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgKytfX3NlcF9wb3M7 CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICoo KytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3BhY2U6CiAgICAgICAgICAgICAgICBj YXNlIG1vbmV5X2Jhc2U6Om5vbmU6CgogICAgICAgICAgICAgICAgICBpZiAoX19pICE9IDMpCiAg ICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAg ICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgoKICAgICAgaWYgKF9fc2lnbi5zaXplKCkgPiAx KQogICAgICAgIHsKICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc2lnbi5zaXplKCk7CiAg ICAgICAgICBzaXplX3R5cGUgX19pID0gMTsKICAgICAgICAgIGZvciAoOyBfX2MgIT0gX19lb2Yg JiYgX19pIDwgX19sZW47ICsrX19pKQogICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQg JiYgX19jICE9IF9fc2lnbltfX2ldKQogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7Cgog ICAgICAgICAgaWYgKF9faSAhPSBfX2xlbikKICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxz ZTsKICAgICAgICB9CgoKICAgICAgd2hpbGUgKF9fdGVtcF91bml0c1swXSA9PSBfX2N0eXBlLndp ZGVuKCcwJykpCiAgICAgICAgX190ZW1wX3VuaXRzLmVyYXNlKF9fdGVtcF91bml0cy5iZWdpbigp KTsKCiAgICAgIGlmIChfX3NpZ24uc2l6ZSgpICYmIF9fc2lnbiA9PSBfX25lZ19zaWduKQogICAg ICAgIF9fdGVtcF91bml0cy5pbnNlcnQoX190ZW1wX3VuaXRzLmJlZ2luKCksIF9fY3R5cGUud2lk ZW4oJy0nKSk7CgoKICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpICYmIF9fZ3JvdXBpbmdfdG1w LnNpemUoKSkKICAgICAgICB7CiAgICAgICAgICBpZiAoIV9fdmVyaWZ5X2dyb3VwaW5nKF9fZ3Jv dXBpbmcsIF9fZ3JvdXBpbmdfdG1wKSkKICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsK ICAgICAgICB9CgoKICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICBfX2VyciB8PSBpb3Nf YmFzZTo6ZW9mYml0OwoKCiAgICAgIGlmICghX190ZXN0dmFsaWQgfHwgIV9fdGVtcF91bml0cy5z aXplKCkpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIGVsc2UKCiAg ICAgICAgX190ZW1wX3VuaXRzLnN3YXAoX191bml0cyk7CgogICAgICByZXR1cm4gX19iZWc7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBf T3V0SXRlcgogICAgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVy X3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGws CiAgICAgICAgICAgbG9uZyBkb3VibGUgX191bml0cykgY29uc3QKICAgIHsKICAgICAgY29uc3Qg bG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYg X19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKCiAgICAgIGludCBf X2NzX3NpemUgPSA2NDsKICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1 aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICBpbnQgX19sZW4gPSBfX2NvbnZlcnRfZnJv bV92KF9fY3MsIF9fY3Nfc2l6ZSwgIiUuMDFMZiIsIF9fdW5pdHMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUpOwoKICAgICAgaWYgKF9fbGVuID49IF9fY3Nf c2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX2NzX3NpemUgPSBfX2xlbiArIDE7CiAgICAgICAg ICBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7 CiAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCAiJS4w MUxmIiwgX191bml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xv Y2FsZSk7CiAgICAgICAgfQoKCgoKCgoKICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nhc3Q8 X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fY3Nfc2l6ZSkpOwog ICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyBfX2xlbiwgX193cyk7CiAgICAgIHN0cmlu Z190eXBlIF9fZGlnaXRzKF9fd3MpOwogICAgICByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19p bnRsLCBfX2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBtb25leV9wdXQ8X0No YXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBp b3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBjb25zdCBzdHJpbmdf dHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5n X3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgbW9uZXlfYmFzZTo6cGFy dCBwYXJ0OwoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAg Y29uc3Qgc2l6ZV90eXBlIF9fd2lkdGggPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9faW8ud2lk dGgoKSk7CgoKICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgdHJ1ZT4gX19tb25leV90 cnVlOwogICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJULCBmYWxzZT4gX19tb25leV9mYWxz ZTsKICAgICAgY29uc3QgX19tb25leV90cnVlJiBfX21wdCA9IHVzZV9mYWNldDxfX21vbmV5X3Ry dWU+KF9fbG9jKTsKICAgICAgY29uc3QgX19tb25leV9mYWxzZSYgX19tcGYgPSB1c2VfZmFjZXQ8 X19tb25leV9mYWxzZT4oX19sb2MpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBl ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgoKCiAgICAgIGNvbnN0IGNoYXJf dHlwZSogX19iZWcgPSBfX2RpZ2l0cy5kYXRhKCk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19l bmQgPSBfX2JlZyArIF9fZGlnaXRzLnNpemUoKTsKICAgICAgbW9uZXlfYmFzZTo6cGF0dGVybiBf X3A7CiAgICAgIHN0cmluZ190eXBlIF9fc2lnbjsKICAgICAgaWYgKCpfX2JlZyAhPSBfX2N0eXBl LndpZGVuKCctJykpCiAgICAgICAgewogICAgICAgICAgX19wID0gX19pbnRsID8gX19tcHQucG9z X2Zvcm1hdCgpIDogX19tcGYucG9zX2Zvcm1hdCgpOwogICAgICAgICAgX19zaWduID1fX2ludGwg PyBfX21wdC5wb3NpdGl2ZV9zaWduKCkgOiBfX21wZi5wb3NpdGl2ZV9zaWduKCk7CiAgICAgICAg fQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX19wID0gX19pbnRsID8gX19tcHQubmVn X2Zvcm1hdCgpIDogX19tcGYubmVnX2Zvcm1hdCgpOwogICAgICAgICAgX19zaWduID1fX2ludGwg PyBfX21wdC5uZWdhdGl2ZV9zaWduKCkgOiBfX21wZi5uZWdhdGl2ZV9zaWduKCk7CiAgICAgICAg ICArK19fYmVnOwogICAgICAgIH0KCgogICAgICBfX2VuZCA9IF9fY3R5cGUuc2Nhbl9ub3QoY3R5 cGVfYmFzZTo6ZGlnaXQsIF9fYmVnLCBfX2VuZCk7CiAgICAgIGlmIChfX2JlZyAhPSBfX2VuZCkK ICAgICAgICB7CgoKCiAgICAgICAgICBzdHJpbmdfdHlwZSBfX3JlczsKICAgICAgICAgIHN0cmlu Z190eXBlIF9fdmFsdWU7CiAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3N5bWJvbCA9IF9f aW50bCA/IF9fbXB0LmN1cnJfc3ltYm9sKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogX19tcGYuY3Vycl9zeW1ib2woKTsKCgogICAgICAgICAgY29uc3Qg aW50IF9fZnJhYyA9IF9faW50bCA/IF9fbXB0LmZyYWNfZGlnaXRzKCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5mcmFjX2RpZ2l0cygpOwogICAgICAgICAgaWYg KF9fZnJhYyA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUg X19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9wb2ludCgpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmRlY2ltYWxfcG9pbnQoKTsKICAgICAgICAg ICAgICBpZiAoX19lbmQgLSBfX2JlZyA+PSBfX2ZyYWMpCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgIF9fdmFsdWUgPSBzdHJpbmdfdHlwZShfX2VuZCAtIF9fZnJhYywgX19lbmQp OwogICAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydChfX3ZhbHVlLmJlZ2luKCksIF9fZCk7 CiAgICAgICAgICAgICAgICAgIF9fZW5kIC09IF9fZnJhYzsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICBfX3Zh bHVlID0gc3RyaW5nX3R5cGUoX19iZWcsIF9fZW5kKTsKICAgICAgICAgICAgICAgICAgaW50IF9f cGFkZGVjID0gX19mcmFjIC0gKF9fZW5kIC0gX19iZWcpOwogICAgICAgICAgICAgICAgICBjaGFy X3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbignMCcpOwogICAgICAgICAgICAgICAgICBfX3Zh bHVlLmluc2VydChfX3ZhbHVlLmJlZ2luKCksIF9fcGFkZGVjLCBfX3plcm8pOwogICAgICAgICAg ICAgICAgICBfX3ZhbHVlLmluc2VydChfX3ZhbHVlLmJlZ2luKCksIF9fZCk7CiAgICAgICAgICAg ICAgICAgIF9fYmVnID0gX19lbmQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCgoK ICAgICAgICAgIGlmIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgewogICAgICAgICAgICAg IGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19pbnRsID8gX19tcHQuZ3JvdXBpbmcoKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZ3JvdXBp bmcoKTsKICAgICAgICAgICAgICBpZiAoX19ncm91cGluZy5zaXplKCkpCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9faW50bCA/IF9f bXB0LnRob3VzYW5kc19zZXAoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiBfX21wZi50aG91c2FuZHNfc2VwKCk7CiAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIqIF9fZ2JlZyA9IF9fZ3JvdXBpbmcuY19zdHIoKTsKICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciogX19nZW5kID0gX19nYmVnICsgX19ncm91cGluZy5zaXplKCk7CiAgICAgICAg ICAgICAgICAgIGNvbnN0IGludCBfX24gPSAoX19lbmQgLSBfX2JlZykgKiAyOwogICAgICAgICAg ICAgICAgICBfQ2hhclQqIF9fd3MyID0KICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxf Q2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX19uKSk7CiAgICAgICAg ICAgICAgICAgIF9DaGFyVCogX193c19lbmQgPSBfX2FkZF9ncm91cGluZyhfX3dzMiwgX19zZXAs IF9fZ2JlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fZ2VuZCwgX19iZWcsIF9fZW5kKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNl cnQoMCwgX193czIsIF9fd3NfZW5kIC0gX193czIpOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KDAsIHN0cmluZ190eXBl KF9fYmVnLCBfX2VuZCkpOwogICAgICAgICAgICB9CgoKICAgICAgICAgIGlvc19iYXNlOjpmbXRm bGFncyBfX2YgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7CiAgICAgICAg ICBzaXplX3R5cGUgX19sZW4gPSBfX3ZhbHVlLnNpemUoKSArIF9fc2lnbi5zaXplKCk7CiAgICAg ICAgICBfX2xlbiArPSAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSA/IF9fc3lt Ym9sLnNpemUoKSA6IDA7CiAgICAgICAgICBib29sIF9fdGVzdGlwYWQgPSBfX2YgPT0gaW9zX2Jh c2U6OmludGVybmFsICYmIF9fbGVuIDwgX193aWR0aDsKCgogICAgICAgICAgZm9yIChpbnQgX19p ID0gMDsgX19pIDwgNDsgKytfX2kpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBwYXJ0IF9f d2hpY2ggPSBzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRbX19pXSk7CiAgICAgICAgICAgICAg c3dpdGNoIChfX3doaWNoKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2FzZSBt b25leV9iYXNlOjpzeW1ib2w6CiAgICAgICAgICAgICAgICAgIGlmIChfX2lvLmZsYWdzKCkgJiBp b3NfYmFzZTo6c2hvd2Jhc2UpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19zeW1ib2w7 CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNl OjpzaWduOgoKCgogICAgICAgICAgICAgICAgICBpZiAoX19zaWduLnNpemUoKSkKICAgICAgICAg ICAgICAgICAgICBfX3JlcyArPSBfX3NpZ25bMF07CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjp2YWx1ZToKICAgICAgICAgICAgICAgICAg X19yZXMgKz0gX192YWx1ZTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg ICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNlOgoKCgogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0 aXBhZCkKICAgICAgICAgICAgICAgICAgICBfX3JlcyArPSBzdHJpbmdfdHlwZShfX3dpZHRoIC0g X19sZW4sIF9fZmlsbCk7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg ICBfX3JlcyArPSBfX2N0eXBlLndpZGVuKF9fZmlsbCk7CiAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpub25lOgogICAgICAgICAgICAgICAg ICBpZiAoX190ZXN0aXBhZCkKICAgICAgICAgICAgICAgICAgICBfX3JlcyArPSBzdHJpbmdfdHlw ZShfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICB9CgoKICAgICAgICAgIGlmIChfX3NpZ24uc2l6ZSgp ID4gMSkKICAgICAgICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX19zaWduLmJlZ2luKCkgKyAx LCBfX3NpZ24uZW5kKCkpOwoKCiAgICAgICAgICBfX2xlbiA9IF9fcmVzLnNpemUoKTsKICAgICAg ICAgIGlmIChfX3dpZHRoID4gX19sZW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAo X19mID09IGlvc19iYXNlOjpsZWZ0KQoKICAgICAgICAgICAgICAgIF9fcmVzLmFwcGVuZChfX3dp ZHRoIC0gX19sZW4sIF9fZmlsbCk7CiAgICAgICAgICAgICAgZWxzZQoKICAgICAgICAgICAgICAg IF9fcmVzLmluc2VydCgwLCBzdHJpbmdfdHlwZShfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCkpOwog ICAgICAgICAgICAgIF9fbGVuID0gX193aWR0aDsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBm b3IgKHNpemVfdHlwZSBfX2ogPSAwOyBfX2ogPCBfX2xlbjsgKytfX2osICsrX19zKQogICAgICAg ICAgICAqX19zID0gX19yZXNbX19qXTsKICAgICAgICB9CiAgICAgIF9faW8ud2lkdGgoMCk7CiAg ICAgIHJldHVybiBfX3M7CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9Jbkl0ZXI+CiAgICB0aW1lX2Jhc2U6OmRhdGVvcmRlcgogICAgdGltZV9nZXQ8X0No YXJULCBfSW5JdGVyPjo6ZG9fZGF0ZV9vcmRlcigpIGNvbnN0CiAgICB7IHJldHVybiB0aW1lX2Jh c2U6Om5vX29yZGVyOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu SXRlcj4KICAgIHZvaWQKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0 cmFjdF92aWFfZm9ybWF0KGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGlvc19i YXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwgdG0qIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBf X2Zvcm1hdCkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsK ICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVw dW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBl ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIHNpemVfdCBfX2xlbiA9 IGNoYXJfdHJhaXRzPF9DaGFyVD46Omxlbmd0aChfX2Zvcm1hdCk7CgogICAgICBmb3IgKHNpemVf dCBfX2kgPSAwOyBfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBfX2xlbiAmJiAhX19lcnI7ICsrX19p KQogICAgICAgIHsKICAgICAgICAgIGNoYXIgX19jID0gX19mb3JtYXRbX19pXTsKICAgICAgICAg IGlmIChfX2MgPT0gJyUnKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9fYyA9IF9fZm9y bWF0WysrX19pXTsKICAgICAgICAgICAgICBjaGFyIF9fbW9kID0gMDsKICAgICAgICAgICAgICBp bnQgX19tZW0gPSAwOwogICAgICAgICAgICAgIGlmIChfX2MgPT0gJ0UnIHx8IF9fYyA9PSAnTycp CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbW9kID0gX19jOwogICAgICAg ICAgICAgICAgICBfX2MgPSBfX2Zvcm1hdFsrK19faV07CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgc3dpdGNoIChfX2MpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIqIF9fY3M7CiAgICAgICAgICAgICAgICAgIF9DaGFyVCBfX3djc1sxMF07CiAg ICAgICAgICAgICAgICBjYXNlICdhJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlw ZSogX19kYXlzMVs3XTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXlzX2FiYnJldmlhdGVk KF9fZGF5czEpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5k LCBfX3RtLT50bV93ZGF5LCBfX2RheXMxLCA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNh c2UgJ0EnOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2RheXMyWzddOwog ICAgICAgICAgICAgICAgICBfX3RwLl9NX2RheXMoX19kYXlzMik7CiAgICAgICAgICAgICAgICAg IF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX3dkYXksIF9fZGF5czIsIDcs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnaCc6CiAgICAgICAgICAgICAgICBjYXNl ICdiJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHMxWzEyXTsK ICAgICAgICAgICAgICAgICAgX190cC5fTV9tb250aHNfYWJicmV2aWF0ZWQoX19tb250aHMxKTsK ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1f bW9uLCBfX21vbnRoczEsIDEyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19l cnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0InOgoK ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX21vbnRoczJbMTJdOwogICAgICAg ICAgICAgICAgICBfX3RwLl9NX21vbnRocyhfX21vbnRoczIpOwogICAgICAgICAgICAgICAgICBf TV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tb24sIF9fbW9udGhzMiwgMTIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnYyc6CgogICAgICAgICAgICAgICAgICBj b25zdCBjaGFyX3R5cGUqIF9fZHRbMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF0ZV90 aW1lX2Zvcm1hdHMoX19kdCk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1h dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19kdFswXSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICAgICAgY2FzZSAnZCc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShf X2JlZywgX19lbmQsIF9fdG0tPnRtX21kYXksIDEsIDMxLCAyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgICAgY2FzZSAnRCc6CgogICAgICAgICAgICAgICAgICBfX2NzID0gIiVtLyVk LyV5IjsKICAgICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgOSwgX193 Y3MpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5k LCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNl ICdIJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190 bS0+dG1faG91ciwgMCwgMjMsIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBj YXNlICdJJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwg X190bS0+dG1faG91ciwgMSwgMTIsIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg ICBjYXNlICdtJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2Vu ZCwgX19tZW0sIDEsIDEyLCAyLCBfX2N0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGlmICghX19lcnIpCiAgICAgICAgICAgICAg ICAgICAgX190bS0+dG1fbW9uID0gX19tZW0gLSAxOwogICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgIGNhc2UgJ00nOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9u dW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9taW4sIDAsIDU5LCAyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgY2FzZSAnbic6CiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBl Lm5hcnJvdygqX19iZWcsIDApID09ICdcbicpCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsK ICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19i YXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNh c2UgJ1InOgoKICAgICAgICAgICAgICAgICAgX19jcyA9ICIlSDolTSI7CiAgICAgICAgICAgICAg ICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDYsIF9fd2NzKTsKICAgICAgICAgICAgICAg ICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3djcyk7CiAgICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnUyc6CgogICAgICAgICAgICAg ICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX3NlYywgMCwgNTksIDIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd0JzoKICAgICAgICAgICAg ICAgICAgaWYgKF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkgPT0gJ1x0JykKICAgICAgICAgICAg ICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBf X2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICBjYXNlICdUJzoKCiAgICAgICAgICAgICAgICAgIF9fY3MgPSAiJUg6JU06JVMi OwogICAgICAgICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA5LCBfX3djcyk7 CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9f aW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X193Y3MpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3gn OgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2RhdGVzWzJdOwogICAgICAg ICAgICAgICAgICBfX3RwLl9NX2RhdGVfZm9ybWF0cyhfX2RhdGVzKTsKICAgICAgICAgICAgICAg ICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RhdGVzWzBdKTsKICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdYJzoKCiAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX190aW1lc1syXTsKICAgICAgICAgICAgICAgICAg X190cC5fTV90aW1lX2Zvcm1hdHMoX190aW1lcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJh Y3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190aW1lc1swXSk7CiAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAneSc6CgogICAgICAgICAgICAgICAgICBf TV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX3llYXIsIDAsIDk5LCAyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnWSc6CgogICAgICAgICAgICAgICAg ICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fbWVtLCAwLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSwgNCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAg ICBpZiAoIV9fZXJyKQogICAgICAgICAgICAgICAgICAgIF9fdG0tPnRtX3llYXIgPSBfX21lbSAt IDE5MDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnWic6 CgogICAgICAgICAgICAgICAgICBpZiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjp1cHBlciwgKl9f YmVnKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpbnQgX190 bXA7CiAgICAgICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBf X3RtcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RpbWVwdW5jdDxf Q2hhclQ+OjpfU190aW1lem9uZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMTQsIF9fZXJyKTsKCgogICAgICAgICAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICpf X2JlZzsKICAgICAgICAgICAgICAgICAgICAgIGlmICghX19lcnIgJiYgX190bXAgPT0gMAogICAg ICAgICAgICAgICAgICAgICAgICAgICYmIChfX2MgPT0gX19jdHlwZS53aWRlbignLScpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9fYyA9PSBfX2N0eXBlLndpZGVuKCcrJykpKQog ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZXh0 cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtcCwgMCwgMjMsIDIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAg ICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG1wLCAwLCA1OSwgMiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIp OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBfX2VyciB8 PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgICAgIGRlZmF1bHQ6CgogICAgICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9z X2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgIGlm IChfX2MgPT0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSkKICAgICAgICAgICAgICAgICAgICAr K19fYmVnOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAg ICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfbnVtKGl0ZXJfdHlw ZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAgICAgICAgICAgICAg ICAgICBpbnQgX19taW4sIGludCBfX21heCwgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAg ICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSwKICAgICAgICAgICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlJiBfX2VycikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9faSA9IDA7CiAg ICAgIHN0cmluZyBfX2RpZ2l0czsKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CiAgICAg IGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBf X2kgPCBfX2xlbgogICAgICAgICAgICAgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwg X19jKSkKICAgICAgICB7CiAgICAgICAgICBfX2RpZ2l0cyArPSBfX2N0eXBlLm5hcnJvdyhfX2Ms IDApOwogICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICsrX19pOwogICAgICAg IH0KICAgICAgaWYgKF9faSA9PSBfX2xlbikKICAgICAgICB7CiAgICAgICAgICBpbnQgX192YWx1 ZSA9IGF0b2koX19kaWdpdHMuY19zdHIoKSk7CiAgICAgICAgICBpZiAoX19taW4gPD0gX192YWx1 ZSAmJiBfX3ZhbHVlIDw9IF9fbWF4KQogICAgICAgICAgICBfX21lbWJlciA9IF9fdmFsdWU7CiAg ICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQog ICAgICBlbHNlCiAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2 YWxpZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgIH0KCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1l X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfbmFtZShpdGVyX3R5cGUmIF9f YmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAgICAgICAgICAgICAgICAg IGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNpemVfdCBfX2luZGV4bGVuLAogICAgICAgICAgICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3QKICAgIHsKICAgICAgdHlwZWRl ZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgIGludCogX19tYXRjaGVz ID0gc3RhdGljX2Nhc3Q8aW50Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoaW50KSAqIF9faW5k ZXhsZW4pKTsKICAgICAgc2l6ZV90IF9fbm1hdGNoZXMgPSAwOwogICAgICBzaXplX3QgX19wb3Mg PSAwOwogICAgICBib29sIF9fdGVzdHZhbGlkID0gdHJ1ZTsKICAgICAgY29uc3QgY2hhcl90eXBl KiBfX25hbWU7CgogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwoKICAgICAgZm9yIChzaXpl X3QgX19pMSA9IDA7IF9faTEgPCBfX2luZGV4bGVuOyArK19faTEpCiAgICAgICAgaWYgKF9fYyA9 PSBfX25hbWVzW19faTFdWzBdKQogICAgICAgICAgX19tYXRjaGVzW19fbm1hdGNoZXMrK10gPSBf X2kxOwoKICAgICAgd2hpbGUoX19ubWF0Y2hlcyA+IDEpCiAgICAgICAgewoKICAgICAgICAgIHNp emVfdCBfX21pbmxlbiA9IDEwOwogICAgICAgICAgZm9yIChzaXplX3QgX19pMiA9IDA7IF9faTIg PCBfX25tYXRjaGVzOyArK19faTIpCiAgICAgICAgICAgIF9fbWlubGVuID0gbWluKF9fbWlubGVu LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1l c1tfX21hdGNoZXNbX19pMl1dKSk7CgogICAgICAgICAgaWYgKF9fcG9zIDwgX19taW5sZW4gJiYg X19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICArK19fcG9zOwogICAg ICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgZm9yIChzaXplX3QgX19p MyA9IDA7IF9faTMgPCBfX25tYXRjaGVzOyArK19faTMpCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgIF9fbmFtZSA9IF9fbmFtZXNbX19tYXRjaGVzW19faTNdXTsKICAgICAgICAg ICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gIT0gX19jKQogICAgICAgICAgICAgICAgICAgIF9f bWF0Y2hlc1tfX2kzXSA9IF9fbWF0Y2hlc1stLV9fbm1hdGNoZXNdOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGJyZWFrOwogICAgICAg IH0KCiAgICAgIGlmIChfX25tYXRjaGVzID09IDEpCiAgICAgICAgewoKICAgICAgICAgIF9fbmFt ZSA9IF9fbmFtZXNbX19tYXRjaGVzWzBdXTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9 IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgICAgd2hpbGUgKF9fcG9zIDwg X19sZW4gJiYgX19iZWcgIT0gX19lbmQgJiYgX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAg ICAgICAgICsrX19iZWcsICsrX19wb3M7CgogICAgICAgICAgaWYgKF9fbGVuID09IF9fcG9zKQog ICAgICAgICAgICBfX21lbWJlciA9IF9fbWF0Y2hlc1swXTsKICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBf X3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICBpZiAoIV9fdGVzdHZhbGlkKQogICAgICAgIF9fZXJy IHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0 ZXI+OjoKICAgIGRvX2dldF90aW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp b3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg dG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAgIF9DaGFyVCBfX3djc1szXTsKICAgICAgY29uc3Qg Y2hhciogX19jcyA9ICIlWCI7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAg ICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU PiA+KF9fbG9jKTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgMywgX193Y3MpOwog ICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190 bSwgX193Y3MpOwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9z X2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxf Q2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90 eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAgIF9DaGFyVCBfX3djc1szXTsK ICAgICAgY29uc3QgY2hhciogX19jcyA9ICIleCI7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8u Z2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8 Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsg MywgX193Y3MpOwogICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lv LCBfX2VyciwgX190bSwgX193Y3MpOwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAg X19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAg ICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlw ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAg IHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBsb2NhbGUg X19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBf X3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0 IGNoYXJfdHlwZSogX19kYXlzWzddOwogICAgICBfX3RwLl9NX2RheXNfYWJicmV2aWF0ZWQoX19k YXlzKTsKICAgICAgaW50IF9fdG1wd2RheTsKICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBf X2VuZCwgX190bXB3ZGF5LCBfX2RheXMsIDcsIF9fZXJyKTsKCgoKCgoKCiAgICAgIGlmICghX19l cnIpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fcG9zID0gX190cmFpdHNfdHlwZTo6bGVu Z3RoKF9fZGF5c1tfX3RtcHdkYXldKTsKICAgICAgICAgIF9fdHAuX01fZGF5cyhfX2RheXMpOwog ICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX25hbWUgPSBfX2RheXNbX190bXB3ZGF5XTsKICAg ICAgICAgIGlmIChfX25hbWVbX19wb3NdID09ICpfX2JlZykKICAgICAgICAgICAgewoKICAgICAg ICAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1l KTsKICAgICAgICAgICAgICB3aGlsZSAoX19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZAog ICAgICAgICAgICAgICAgICAgICAmJiBfX25hbWVbX19wb3NdID09ICpfX2JlZykKICAgICAgICAg ICAgICAgICsrX19iZWcsICsrX19wb3M7CiAgICAgICAgICAgICAgaWYgKF9fbGVuICE9IF9fcG9z KQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAg IH0KICAgICAgICAgIGlmICghX19lcnIpCiAgICAgICAgICAgIF9fdG0tPnRtX3dkYXkgPSBfX3Rt cHdkYXk7CiAgICAgICAgfQogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGlt ZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBf X2JlZywgaXRlcl90eXBlIF9fZW5kLAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZSYgX19p bywgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAg dHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgIGxvY2FsZSBf X2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9f dHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3Qg Y2hhcl90eXBlKiBfX21vbnRoc1sxMl07CiAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJldmlhdGVk KF9fbW9udGhzKTsKICAgICAgaW50IF9fdG1wbW9uOwogICAgICBfTV9leHRyYWN0X25hbWUoX19i ZWcsIF9fZW5kLCBfX3RtcG1vbiwgX19tb250aHMsIDEyLCBfX2Vycik7CgoKCgoKCgogICAgICBp ZiAoIV9fZXJyKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3BvcyA9IF9fdHJhaXRzX3R5 cGU6Omxlbmd0aChfX21vbnRoc1tfX3RtcG1vbl0pOwogICAgICAgICAgX190cC5fTV9tb250aHMo X19tb250aHMpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX25hbWUgPSBfX21vbnRoc1tf X3RtcG1vbl07CiAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAg ICAgIHsKCiAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6 bGVuZ3RoKF9fbmFtZSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19i ZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAgJiYgX19uYW1lW19fcG9zXSA9PSAqX19i ZWcpCiAgICAgICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwogICAgICAgICAgICAgIGlmIChf X2xlbiAhPSBfX3BvcykKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0 OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICBfX3RtLT50 bV9tb24gPSBfX3RtcG1vbjsKICAgICAgICB9CgogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAg ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J dGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF95ZWFyKGl0ZXJf dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAg IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4m IF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCiAgICAgIGNoYXJf dHlwZSBfX2MgPSAqX19iZWc7CiAgICAgIHNpemVfdCBfX2kgPSAwOwogICAgICBzdHJpbmcgX19k aWdpdHM7CiAgICAgIHdoaWxlIChfX2kgPCA0ICYmIF9fYmVnICE9IF9fZW5kICYmIF9fY3R5cGUu aXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYykpCiAgICAgICAgewogICAgICAgICAgX19kaWdpdHMg Kz0gX19jdHlwZS5uYXJyb3coX19jLCAwKTsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAg ICAgICAgICArK19faTsKICAgICAgICB9CiAgICAgIGlmIChfX2kgPT0gMiB8fCBfX2kgPT0gNCkK ICAgICAgICB7CiAgICAgICAgICBsb25nIF9fbDsKICAgICAgICAgIF9fY29udmVydF90b192KF9f ZGlnaXRzLmNfc3RyKCksIF9fbCwgX19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgICAgIGlmICgh KF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpICYmIF9fbCA8PSAyMTQ3NDgzNjQ3KQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgX19sID0gX19pID09IDIgPyBfX2wgOiBfX2wgLSAxOTAwOwog ICAgICAgICAgICAgIF9fdG0tPnRtX3llYXIgPSBzdGF0aWNfY2FzdDxpbnQ+KF9fbCk7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6 ZmFpbGJpdDsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19i YXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICB0aW1lX3B1dDxf Q2hhclQsIF9PdXRJdGVyPjo6CiAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8s IGNoYXJfdHlwZSwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgY29uc3QgX0NoYXJUKiBfX2JlZywg Y29uc3QgX0NoYXJUKiBfX2VuZCkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19p by5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNl dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCiAg ICAgICAgewogICAgICAgICAgY2hhciBfX2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwog ICAgICAgICAgKytfX2JlZzsKICAgICAgICAgIGlmIChfX2MgPT0gJyUnKQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgY2hhciBfX2Zvcm1hdDsKICAgICAgICAgICAgICBjaGFyIF9fbW9kID0g MDsKICAgICAgICAgICAgICBzaXplX3QgX19sZW4gPSAxOwogICAgICAgICAgICAgIF9fYyA9IF9f Y3R5cGUubmFycm93KCpfX2JlZywgMCk7CiAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAg ICAgICBpZiAoX19jID09ICdFJyB8fCBfX2MgPT0gJ08nKQogICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICBfX21vZCA9IF9fYzsKICAgICAgICAgICAgICAgICAgX19mb3JtYXQgPSBf X2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwogICAgICAgICAgICAgICAgICArK19fYmVnOwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fZm9ybWF0 ID0gX19jOwogICAgICAgICAgICAgIF9fcyA9IHRoaXMtPmRvX3B1dChfX3MsIF9faW8sIGNoYXJf dHlwZSgpLCBfX3RtLCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19tb2QpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAqX19zID0gX19jOwogICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIHRpbWVfcHV0PF9DaGFyVCwg X091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hh cl90eXBlLCBjb25zdCB0bSogX190bSwKICAgICAgICAgICBjaGFyIF9fZm9ybWF0LCBjaGFyIF9f bW9kKSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAg ICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g PihfX2xvYyk7CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFj ZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKCgoKICAgICAgY29uc3Qgc2l6ZV90IF9f bWF4bGVuID0gNjQ7CiAgICAgIGNoYXJfdHlwZSogX19yZXMgPQogICAgICAgIHN0YXRpY19jYXN0 PGNoYXJfdHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGNoYXJfdHlwZSkgKiBfX21heGxl bikpOwoKCgoKCgogICAgICBjaGFyX3R5cGUgX19mbXRbNF07CiAgICAgIF9fZm10WzBdID0gX19j dHlwZS53aWRlbignJScpOwogICAgICBpZiAoIV9fbW9kKQogICAgICAgIHsKICAgICAgICAgIF9f Zm10WzFdID0gX19mb3JtYXQ7CiAgICAgICAgICBfX2ZtdFsyXSA9IGNoYXJfdHlwZSgpOwogICAg ICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9fZm10WzFdID0gX19tb2Q7CiAg ICAgICAgICBfX2ZtdFsyXSA9IF9fZm9ybWF0OwogICAgICAgICAgX19mbXRbM10gPSBjaGFyX3R5 cGUoKTsKICAgICAgICB9CgogICAgICBfX3RwLl9NX3B1dChfX3JlcywgX19tYXhsZW4sIF9fZm10 LCBfX3RtKTsKCgogICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxjaGFyX3R5cGU+Ojps ZW5ndGgoX19yZXMpOwogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX2xlbjsgKytf X2ksICsrX19zKQogICAgICAgICpfX3MgPSBfX3Jlc1tfX2ldOwogICAgICByZXR1cm4gX19zOwog ICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGludAogICAgY29sbGF0ZTxf Q2hhclQ+OjpfTV9jb21wYXJlKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0CiAg ICB7IHJldHVybiAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBzaXplX3QK ICAgIGNvbGxhdGU8X0NoYXJUPjo6X01fdHJhbnNmb3JtKF9DaGFyVCosIGNvbnN0IF9DaGFyVCos IHNpemVfdCkgY29uc3QKICAgIHsgcmV0dXJuIDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgaW50CiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAgZG9fY29tcGFyZShjb25zdCBf Q2hhclQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgICAgICAgICBjb25zdCBf Q2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAogICAgewogICAgICBjb25z dCBzdHJpbmdfdHlwZSBfX29uZShfX2xvMSwgX19oaTEpOwogICAgICBjb25zdCBzdHJpbmdfdHlw ZSBfX3R3byhfX2xvMiwgX19oaTIpOwogICAgICByZXR1cm4gX01fY29tcGFyZShfX29uZS5jX3N0 cigpLCBfX3R3by5jX3N0cigpKTsKICAgIH0KCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICB0eXBlbmFtZSBjb2xsYXRlPF9DaGFyVD46OnN0cmluZ190eXBlCiAgICBjb2xsYXRlPF9DaGFy VD46OgogICAgZG9fdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBf X2hpKSBjb25zdAogICAgewogICAgICBzaXplX3QgX19sZW4gPSAoX19oaSAtIF9fbG8pICogMjsK CiAgICAgIF9DaGFyVCogX19jID0KICAgICAgICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0 aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX19sZW4pKTsKICAgICAgc2l6ZV90IF9fcmVzID0g X01fdHJhbnNmb3JtKF9fYywgX19sbywgX19sZW4pOwoKICAgICAgaWYgKF9fcmVzID49IF9fbGVu KQogICAgICAgIHsKICAgICAgICAgIF9fYyA9CiAgICAgICAgICAgIHN0YXRpY19jYXN0PF9DaGFy VCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX19yZXMgKyAxKSkpOwogICAg ICAgICAgX01fdHJhbnNmb3JtKF9fYywgX19sbywgX19yZXMgKyAxKTsKICAgICAgICB9CiAgICAg IHJldHVybiBzdHJpbmdfdHlwZShfX2MpOwogICAgfQoKIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGxvbmcKICAgIGNvbGxhdGU8X0NoYXJUPjo6CiAgICBkb19oYXNoKGNvbnN0IF9DaGFy VCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgewogICAgICB1bnNpZ25lZCBs b25nIF9fdmFsID0gMDsKICAgICAgZm9yICg7IF9fbG8gPCBfX2hpOyArK19fbG8pCiAgICAgICAg X192YWwgPSAqX19sbyArICgoX192YWwgPDwgNykgfAogICAgICAgICAgICAgICAgICAgICAgIChf X3ZhbCA+PiAobnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz46OmRpZ2l0cyAtIDcpKSk7CiAg ICAgIHJldHVybiBzdGF0aWNfY2FzdDxsb25nPihfX3ZhbCk7CiAgICB9CgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9Udj4KICAgIHZvaWQKICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9f aW4sIF9UdiYgX19vdXQsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICAg ICAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fYmFzZSA9IDEwKTsKCgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1R2PgogICAgaW50CiAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9f b3V0LCBjb25zdCBpbnQgX19zaXplLCBjb25zdCBjaGFyKiBfX2ZtdCwKICAgICAgICAgICAgICAg ICAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMgPSAtMSk7CiMgMTk5 MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9fcGFk CiAgICB7CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX3BhZChpb3NfYmFzZSYgX19pbywgX0No YXJUIF9fZmlsbCwgX0NoYXJUKiBfX25ld3MsCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f b2xkcywgY29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwKICAgICAgICAgICAgIGNvbnN0IHN0cmVh bXNpemUgX19vbGRsZW4sIGNvbnN0IGJvb2wgX19udW0pOwogICAgfTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgX19wYWQ8X0NoYXJU LCBfVHJhaXRzPjo6X1NfcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCogX19uZXdzLCBjb25zdCBfQ2hhclQq IF9fb2xkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW1z aXplIF9fbmV3bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0 cmVhbXNpemUgX19vbGRsZW4sIGNvbnN0IGJvb2wgX19udW0pCiAgICB7CiAgICAgIHNpemVfdCBf X3BsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fbmV3bGVuIC0gX19vbGRsZW4pOwogICAgICBf Q2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6 ZW9mKF9DaGFyVCkgKiBfX3BsZW4pKTsKICAgICAgX1RyYWl0czo6YXNzaWduKF9fcGFkcywgX19w bGVuLCBfX2ZpbGwpOwoKICAgICAgX0NoYXJUKiBfX2JlZzsKICAgICAgX0NoYXJUKiBfX2VuZDsK ICAgICAgc2l6ZV90IF9fbW9kID0gMDsKICAgICAgc2l6ZV90IF9fYmVnbGVuOwogICAgICBpb3Nf YmFzZTo6Zm10ZmxhZ3MgX19hZGp1c3QgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRqdXN0 ZmllbGQ7CgogICAgICBpZiAoX19hZGp1c3QgPT0gaW9zX2Jhc2U6OmxlZnQpCiAgICAgICAgewoK ICAgICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMpOwogICAgICAgICAg X19iZWdsZW4gPSBfX29sZGxlbjsKICAgICAgICAgIF9fZW5kID0gX19wYWRzOwogICAgICAgIH0K ICAgICAgZWxzZSBpZiAoX19hZGp1c3QgPT0gaW9zX2Jhc2U6OmludGVybmFsICYmIF9fbnVtKQog ICAgICAgIHsKCgoKICAgICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAg ICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy VD4gPihfX2xvYyk7CiAgICAgICAgICBjb25zdCBfQ2hhclQgX19taW51cyA9IF9fY3R5cGUud2lk ZW4oJy0nKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcr Jyk7CiAgICAgICAgICBib29sIF9fdGVzdHNpZ24gPSBfVHJhaXRzOjplcShfX29sZHNbMF0sIF9f bWludXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfVHJhaXRzOjplcShfX29sZHNb MF0sIF9fcGx1cyk7CgogICAgICAgICAgYm9vbCBfX3Rlc3RoZXggPSBfVHJhaXRzOjplcShfX2N0 eXBlLndpZGVuKCcwJyksIF9fb2xkc1swXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg KF9UcmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJ3gnKSwgX19vbGRzWzFdKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfHwgX1RyYWl0czo6ZXEoX19jdHlwZS53aWRlbignWCcpLCBfX29s ZHNbMV0pKTsKICAgICAgICAgIGlmIChfX3Rlc3RoZXgpCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBfX25ld3NbMF0gPSBfX29sZHNbMF07CiAgICAgICAgICAgICAgX19uZXdzWzFdID0gX19v bGRzWzFdOwogICAgICAgICAgICAgIF9fbW9kICs9IDI7CiAgICAgICAgICAgICAgX19uZXdzICs9 IDI7CiAgICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4g PSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xk cyArIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX190ZXN0c2lnbikK ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9UcmFpdHM6OmVxKChfX25ld3NbMF0gPSBfX29s ZHNbMF0pLCBfX3BsdXMpID8gX19wbHVzIDogX19taW51czsKICAgICAgICAgICAgICArK19fbW9k OwogICAgICAgICAgICAgICsrX19uZXdzOwogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRzOwog ICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgICAgIF9fZW5kID0gY29u c3RfY2FzdDxfQ2hhclQqPihfX29sZHMgKyBfX21vZCk7CiAgICAgICAgICAgIH0KICAgICAgICAg IGVsc2UKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAg ICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nh c3Q8X0NoYXJUKj4oX19vbGRzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQog ICAgICAgIHsKCiAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgIF9fYmVnbGVuID0g X19wbGVuOwogICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7CiAg ICAgICAgfQogICAgICBfVHJhaXRzOjpjb3B5KF9fbmV3cywgX19iZWcsIF9fYmVnbGVuKTsKICAg ICAgX1RyYWl0czo6Y29weShfX25ld3MgKyBfX2JlZ2xlbiwgX19lbmQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgX19uZXdsZW4gLSBfX2JlZ2xlbiAtIF9fbW9kKTsKICAgIH0KIyAyMDg1ICIv dXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBib29sCiAgICBfX3ZlcmlmeV9ncm91cGluZyhjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJUPiYgX19ncm91cGluZywKICAgICAgICAgICAgICAgICAgICAgIGJh c2ljX3N0cmluZzxfQ2hhclQ+JiBfX2dyb3VwaW5nX3RtcCkKICAgIHsKICAgICAgaW50IF9faSA9 IDA7CiAgICAgIGludCBfX2ogPSAwOwogICAgICBjb25zdCBpbnQgX19sZW4gPSBfX2dyb3VwaW5n LnNpemUoKTsKICAgICAgY29uc3QgaW50IF9fbiA9IF9fZ3JvdXBpbmdfdG1wLnNpemUoKTsKICAg ICAgYm9vbCBfX3Rlc3QgPSB0cnVlOwoKCgoKICAgICAgd2hpbGUgKF9fdGVzdCAmJiBfX2kgPCBf X24gLSAxKQogICAgICAgIGZvciAoX19qID0gMDsgX190ZXN0ICYmIF9faiA8IF9fbGVuICYmIF9f aSA8IF9fbiAtIDE7ICsrX19qLCsrX19pKQogICAgICAgICAgX190ZXN0ICY9IF9fZ3JvdXBpbmdb X19qXSA9PSBfX2dyb3VwaW5nX3RtcFtfX24gLSBfX2kgLSAxXTsKCgogICAgICBfX2ogPT0gX19s ZW4gPyBfX2ogPSAwIDogX19qOwogICAgICBfX3Rlc3QgJj0gX19ncm91cGluZ1tfX2pdID49IF9f Z3JvdXBpbmdfdG1wW19fbiAtIF9faSAtIDFdOwogICAgICByZXR1cm4gX190ZXN0OwogICAgfQoK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9DaGFyVCoKICAgIF9fYWRkX2dy b3VwaW5nKF9DaGFyVCogX19zLCBfQ2hhclQgX19zZXAsCiAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyKiBfX2diZWcsIGNvbnN0IGNoYXIqIF9fZ2VuZCwKICAgICAgICAgICAgICAgICAgIGNv bnN0IF9DaGFyVCogX19maXJzdCwgY29uc3QgX0NoYXJUKiBfX2xhc3QpCiAgICB7CiAgICAgIGlm IChfX2xhc3QgLSBfX2ZpcnN0ID4gKl9fZ2JlZykKICAgICAgICB7CiAgICAgICAgICBfX3MgPSBf X2FkZF9ncm91cGluZyhfX3MsIF9fc2VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KF9fZ2JlZyArIDEgPT0gX19nZW5kID8gX19nYmVnIDogX19nYmVnICsgMSksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2dlbmQsIF9fZmlyc3QsIF9fbGFzdCAtICpfX2diZWcpOwog ICAgICAgICAgX19maXJzdCA9IF9fbGFzdCAtICpfX2diZWc7CiAgICAgICAgICAqX19zKysgPSBf X3NlcDsKICAgICAgICB9CiAgICAgIGRvCiAgICAgICAgKl9fcysrID0gKl9fZmlyc3QrKzsKICAg ICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoK CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OwogIGV4dGVy biB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIsIHRydWU+OwogIGV4dGVybiB0ZW1wbGF0 ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRl IGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPGNoYXIsIHRydWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyBtb25leV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X3B1dDxj aGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3Q8Y2hhcj47CiAgZXh0ZXJuIHRl bXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xh c3MgbnVtX2dldDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtX3B1dDxjaGFyPjsK ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgX190aW1lcHVuY3Q8Y2hhcj47CiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIHRpbWVfcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1 dF9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0PGNoYXI+Owog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldF9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRl bXBsYXRlIGNsYXNzIG1lc3NhZ2VzPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNz YWdlc19ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGN0eXBlX2J5bmFtZTxj aGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5hbWU8Y2hhciwgY2hhciwg bWJzdGF0ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZTxjaGFyPjsKICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8Y2hhcj47CgogIGV4dGVybiB0ZW1wbGF0 ZQogICAgY29uc3QgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+JgogICAgdXNlX2ZhY2V0 PGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl cm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvbGxhdGU8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8Y29sbGF0 ZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51 bXB1bmN0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxl Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX3B1dDxjaGFyPiYKICAgIHVzZV9m YWNldDxudW1fcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog ICAgY29uc3QgbnVtX2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDxudW1fZ2V0PGNoYXI+ID4oY29u c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDxjaGFy LCB0cnVlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PGNoYXIsIHRydWU+ID4oY29uc3QgbG9j YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDxjaGFyLCBmYWxz ZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyLCBmYWxzZT4gPihjb25zdCBsb2NhbGUm KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9wdXQ8Y2hhcj4mCiAgICB1c2Vf ZmFjZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0 ZQogICAgY29uc3QgbW9uZXlfZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG1vbmV5X2dldDxjaGFy PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IF9fdGltZXB1 bmN0PGNoYXI+JgogICAgdXNlX2ZhY2V0PF9fdGltZXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxl Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9wdXQ8Y2hhcj4mCiAgICB1c2Vf ZmFjZXQ8dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl CiAgICBjb25zdCB0aW1lX2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDx0aW1lX2dldDxjaGFyPiA+ KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1lc3NhZ2VzPGNo YXI+JgogICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4 dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3Qg bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvZGVj dnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVt cGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxl Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bXB1bmN0PGNo YXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFz X2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl CiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoK ICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leXB1bmN0PGNoYXI+ ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh Y2V0PG1vbmV5X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK ICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsK CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8X190aW1lcHVuY3Q8Y2hh cj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNf ZmFjZXQ8dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl CiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsK CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8Y2hhcj4g Pihjb25zdCBsb2NhbGUmKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PHdj aGFyX3QsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDx3Y2hhcl90 LCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8d2NoYXJf dCwgZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTx3Y2hh cl90LCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfZ2V0PHdjaGFyX3Q+Owog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9wdXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIG51bXB1bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1w dW5jdF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9nZXQ8d2No YXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8d2NoYXJfdD47CiAgZXh0ZXJu IHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyB0aW1lX3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXRf YnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldDx3Y2hhcl90 PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXRfYnluYW1lPHdjaGFyX3Q+OwogIGV4 dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlczx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUg Y2xhc3MgbWVzc2FnZXNfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBj dHlwZV9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvZGVjdnRfYnlu YW1lPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNv bGxhdGU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGVfYnluYW1lPHdj aGFyX3Q+OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvZGVjdnQ8d2NoYXJfdCwgY2hh ciwgbWJzdGF0ZV90PiYKICAgIHVzZV9mYWNldDxjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3Rh dGVfdD4gPihsb2NhbGUgY29uc3QmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2xs YXRlPHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PGNvbGxhdGU8d2NoYXJfdD4gPihjb25zdCBsb2Nh bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1wdW5jdDx3Y2hhcl90PiYKICAg IHVzZV9mYWNldDxudW1wdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g dGVtcGxhdGUKICAgIGNvbnN0IG51bV9wdXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bnVtX3B1 dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0 IG51bV9nZXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0 IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJf dCwgdHJ1ZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPiA+KGNvbnN0 IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJf dCwgZmFsc2U+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+ID4oY29u c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfcHV0PHdjaGFy X3Q+JgogICAgdXNlX2ZhY2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoK ICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5X2dldDx3Y2hhcl90PiYKICAgIHVzZV9m YWNldDxtb25leV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs YXRlCiAgICBjb25zdCBfX3RpbWVwdW5jdDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxfX3RpbWVw dW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNv bnN0IHRpbWVfcHV0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4o Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9nZXQ8d2No YXJfdD4mCiAgICB1c2VfZmFjZXQ8dGltZV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsK CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtZXNzYWdlczx3Y2hhcl90PiYKICAgIHVzZV9m YWNldDxtZXNzYWdlczx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKIGV4dGVybiB0ZW1wbGF0 ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7 CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvZGVjdnQ8d2NoYXJf dCwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK ICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7 CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bXB1bmN0PHdjaGFy X3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFz X2ZhY2V0PG51bV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs YXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2Fs ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leXB1bmN0 PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAog ICAgaGFzX2ZhY2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl cm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9nZXQ8d2NoYXJfdD4gPihj b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8 X190aW1lcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl CiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUm KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9nZXQ8d2No YXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBo YXNfZmFjZXQ8bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCn0KIyA0NyAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIuMS9sb2NhbGUiIDIgMwojIDM4ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi4xL2JpdHMvb3N0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFp dHM+JiBfX29zKQogICAgOiBfTV9vayhfX29zLmdvb2QoKSksIF9NX29zKF9fb3MpCiAgICB7Cgog ICAgICBpZiAoX01fb2sgJiYgX19vcy50aWUoKSkKICAgICAgICBfX29zLnRpZSgpLT5mbHVzaCgp OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3BmKShfX29z dHJlYW1fdHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYg KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlz KTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19p b3NfdHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9f Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsg fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRo aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNl JikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQog ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAg ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjpvcGVyYXRvcjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbikKICAgIHsKICAgICAg c2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zYmluKQogICAgICAg IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCFfX2NvcHlf c3RyZWFtYnVmcygqdGhpcywgX19zYmluLCB0aGlzLT5yZGJ1ZigpKSkKICAgICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zYmluKQog ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gKnRo aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChib29sIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9f Y2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkp CiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChs b25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2Nl cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBj aGFyX3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOwogICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRm bGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAg ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgYm9vbCBfX2IgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgaWYg KChfX2ZtdCAmIGlvc19iYXNlOjpvY3QpIHx8IChfX2ZtdCAmIGlvc19iYXNlOjpoZXgpKQogICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX19s ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAgICAgICAg IF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsK ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFp bGVkKCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pCiAgICB7CiAg ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg ICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0 KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywg KnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4 Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ OjpvcGVyYXRvcjw8KGxvbmcgbG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo aXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9IHRoaXMtPmZpbGwoKTsKICAgICAgICAg ICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6 OmJhc2VmaWVsZDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkp CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGJvb2wgX19iID0gZmFsc2U7CiAg ICAgICAgICAgICAgICAgIGlmICgoX19mbXQgJiBpb3NfYmFzZTo6b2N0KSB8fCAoX19mbXQgJiBp b3NfYmFzZTo6aGV4KSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nIGxvbmcgX19sOwogICAgICAgICAgICAgICAgICAgICAgX19sID0gc3Rh dGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihfX24pOwogICAgICAgICAgICAgICAgICAgICAg X19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOwog ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg ICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWls ZWQoKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fYikKICAgICAgICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgX19uKQogICAg ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7 CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19m YWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRo aXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAg ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0 aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAg ICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCks IF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgZG91 YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2Nl cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp ZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51 bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAg ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX24pCiAgICB7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N X2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRo aXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnB1 dChjaGFyX3R5cGUgX19jKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAg aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpbnRfdHlwZSBfX3B1dCA9IHJkYnVmKCkt PnNwdXRjKF9fYyk7CiAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fcHV0 LCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp3cml0 ZShjb25zdCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf X2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHN0cmVh bXNpemUgX19wdXQgPSB0aGlzLT5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbik7CiAgICAgICAgICBp ZiAoIF9fcHV0ICE9IF9fbikKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6Zmx1c2goKQog ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICBpZiAodGhpcy0+cmRidWYoKSAmJiB0aGlzLT5yZGJ1ZigpLT5wdWJzeW5j KCkgPT0gLTEpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 OnRlbGxwKCkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7CiAgICAg IGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIF9fcmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vl a29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6b3V0KTsKICAgICAgcmV0dXJuIF9fcmV0 OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjpzZWVrcChwb3NfdHlwZSBfX3BvcykKICAgIHsKICAgICAgaWYgKCF0aGlz LT5mYWlsKCkpCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJk YnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjpvdXQpOwoKCiAgICAgICAgICBpZiAo X19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjoKICAgIHNlZWtwKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2Qp CiAgICB7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIHsKCgogICAgICAgICAgcG9z X3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBfX2QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6 Om91dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQog ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgIH0K ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg b3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQg X19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBf X29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2Nl cmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwog ICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWls dGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX3cgKyAxKSkpOwogICAgICAgICAgICAgIF9f cGFkc1swXSA9IF9fYzsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsKICAgICAg ICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBf X3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm X19jLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193Owog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFkcywgX19sZW4p OwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBj YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19v dXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgog IHRlbXBsYXRlIDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNo YXIgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4g X19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19j ZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsK ICAgICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGlu X2FsbG9jYShfX3cgKyAxKSk7CiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOwogICAgICAg ICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xl bikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8Y2hhciwgX1RyYWl0 cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fYywgX193LCBfX2xlbiwgZmFsc2UpOwog ICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0 aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICByZXR1cm4gX19vdXQ7CiAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0 IF9DaGFyVCogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNl bnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiICYmIF9fcykKICAgICAgICB7CiAg ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0g X19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0 PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAg ICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0 czo6bGVuZ3RoKF9fcykpOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFk KF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fcywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAg ICAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAg ICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3MpCiAgICAgICAgX19vdXQu c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYg YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKCgogICAgICB0 eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXI+IF9fdHJhaXRzX3R5cGU7CgogICAgICB0eXBlbmFtZSBf X29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYg X19zKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2NsZW4gPSBfX3RyYWl0c190eXBlOjps ZW5ndGgoX19zKTsKICAgICAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+ KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX19jbGVuICsgMSkpKTsKICAgICAg ICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fY2xlbjsgKytfX2kpCiAgICAgICAgICAg IF9fd3NbX19pXSA9IF9fb3V0LndpZGVuKF9fc1tfX2ldKTsKICAgICAgICAgIF9DaGFyVCogX19z dHIgPSBfX3dzOwoKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3Ry ZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fY2xlbik7CiAgICAgICAg ICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFy VCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yo X0NoYXJUKSAqIF9fdykpOwoKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3Bh ZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3dzLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAg ICAgICAgICAgIF9fc3RyID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3N0ciwgX19sZW4p OwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBj YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19v dXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3MpCiAgICAgICAg X19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBfX291dDsKICAg IH0KCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9U cmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291 dCwgY29uc3QgY2hhciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hh ciwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBl OjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3MpCiAgICAgICAg ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9f dyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nh c3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193KSk7CiAgICAgICAgICAgICAgc3RyZWFtc2l6 ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsK CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICBfX3BhZDxjaGFyLCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxs KCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fcywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX3MgPSBfX3Bh ZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0Lndp ZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgIGVsc2UgaWYgKCFfX3MpCiAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mIF9fb3V0LAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9f b3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAg ICAgICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcyA9IF9fc3RyLmRhdGEoKTsKICAgICAg ICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgIF9DaGFyVCogX19w YWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJU KSAqIF9fdykpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVh bXNpemU+KF9fc3RyLnNpemUoKSk7CgoKCiAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19v dXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICBfX3Mg PSBfX3BhZHM7CiAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgIH0KICAgICAg ICAgIHN0cmVhbXNpemUgX19yZXMgPSBfX291dC5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbGVuKTsK ICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgaWYgKF9fcmVzICE9IF9fbGVuKQog ICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQog ICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNp Y19vc3RyZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRsKG9zdHJlYW0m KTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kcyhvc3RyZWFtJik7CiAgZXh0ZXJuIHRl bXBsYXRlIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVh bSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0m IG9wZXJhdG9yPDwob3N0cmVhbSYsIHVuc2lnbmVkIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBv c3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBzaWduZWQgY2hhcik7CiAgZXh0ZXJuIHRlbXBs YXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsKICBleHRlcm4g dGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgdW5zaWduZWQgY2hh ciopOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25z dCBzaWduZWQgY2hhciopOwoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX29zdHJlYW08 d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBlbmRsKHdvc3RyZWFtJik7CiAg ZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBlbmRzKHdvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBs YXRlIHdvc3RyZWFtJiBmbHVzaCh3b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVh bSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIHdjaGFyX3QpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0 cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0 cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNvbnN0IHdjaGFyX3QqKTsKICBleHRlcm4gdGVt cGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBjb25zdCBjaGFyKik7Cgp9CiMg Mjc2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL29zdHJlYW0iIDIgMwojIDQ2ICIvdXNyL2luY2x1 ZGUvYysrLzMuMi4xL2lvc3RyZWFtIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2lz dHJlYW0iIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2lzdHJlYW0iIDMKCgoKCm5h bWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9D aGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlw ZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVm PF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19p b3M8X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFt YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5 cGVkZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwog ICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwoKICAgIHByb3RlY3RlZDoK CiAgICAgIHN0cmVhbXNpemUgX01fZ2NvdW50OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0 CiAgICAgIGJhc2ljX2lzdHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgewogICAg ICAgIHRoaXMtPmluaXQoX19zYik7CiAgICAgICAgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsK ICAgICAgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaXN0cmVhbSgpCiAgICAgIHsgX01f Z2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJp ZW5kIGNsYXNzIHNlbnRyeTsKCgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y Pj4oX19pc3RyZWFtX3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX2lz dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5 cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYg KCpfX3BmKShpb3NfYmFzZSYpKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0 b3I+Pihib29sJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4o c2hvcnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNp Z25lZCBzaG9ydCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+ KGludCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2ln bmVkIGludCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxv bmcmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25l ZCBsb25nJiBfX24pOwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxv bmcgbG9uZyYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVu c2lnbmVkIGxvbmcgbG9uZyYgX19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3Bl cmF0b3I+PihmbG9hdCYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRv cj4+KGRvdWJsZSYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+ KGxvbmcgZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y Pj4odm9pZComIF9fcCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihf X3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgICBn Y291bnQodm9pZCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CgogICAgICBpbnRf dHlwZQogICAgICBnZXQodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNo YXJfdHlwZSYgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBl KiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUg X19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24p CiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9 CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2Is IGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAg Z2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChfX3Ni LCB0aGlzLT53aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRs aW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoK ICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19z LCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0bGluZShfX3MsIF9fbiwg dGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgaWdub3Jl KHN0cmVhbXNpemUgX19uID0gMSwgaW50X3R5cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjplb2Yo KSk7CgogICAgICBpbnRfdHlwZQogICAgICBwZWVrKHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5 cGUmCiAgICAgIHJlYWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0 cmVhbXNpemUKICAgICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsK CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwoKICAg ICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHVuZ2V0KHZvaWQpOwoKICAgICAgaW50CiAgICAgIHN5 bmModm9pZCk7CgogICAgICBwb3NfdHlwZQogICAgICB0ZWxsZyh2b2lkKTsKCiAgICAgIF9faXN0 cmVhbV90eXBlJgogICAgICBzZWVrZyhwb3NfdHlwZSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYK ICAgICAgc2Vla2cob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5 cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8 X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgZXhwbGlj aXQKICAgICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgYm9v bCBfX25vc2tpcHdzID0gZmFsc2UpOwoKICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuIF9N X29rOyB9CgogICAgcHJpdmF0ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAg YmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVh bTxjaGFyLCBfVHJhaXRzPiYgX19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4g KF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xh c3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRv cj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBfX2Mp CiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJh aXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNp Y19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsg cmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRlbXBs YXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAgICBv cGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIq IF9fcykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykp OyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBj bGFzcyBiYXNpY19pb3N0cmVhbQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+LAogICAgICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7 CiAgICBwdWJsaWM6CgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0 c190eXBlOwoKCgogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBf X2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4gX19vc3RyZWFtX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0cmVhbShi YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lzdHJlYW1f dHlwZShfX3NiKSwgX19vc3RyZWFtX3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2aXJ0dWFs CiAgICAgIH5iYXNpY19pb3N0cmVhbSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7Cn0KCgoK CgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9pc3RyZWFtLnRjYyIgMSAzCiMgMzYg Ii91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9pc3RyZWFtLnRjYyIgMwoKCgoKbmFtZXNwYWNl IHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgYm9vbCBfX25vc2tpcHdzKQogICAgewog ICAgICBpZiAoX19pbi5nb29kKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9faW4udGllKCkp CiAgICAgICAgICAgIF9faW4udGllKCktPmZsdXNoKCk7CiAgICAgICAgICBpZiAoIV9fbm9za2lw d3MgJiYgKF9faW4uZmxhZ3MoKSAmIGlvc19iYXNlOjpza2lwd3MpKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsK ICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAg ICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAg aWYgKF9faW4uX01fY2hlY2tfZmFjZXQoX19pbi5fTV9mY3R5cGUpKQogICAgICAgICAgICAgICAg d2hpbGUgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAg ICAgICAgICAgICAmJiBfX2luLl9NX2ZjdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjp0b19j aGFyX3R5cGUoX19jKSkpCiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwoK CgogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikp CiAgICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAg ICAgICAgfQogICAgICAgIH0KCiAgICAgIGlmIChfX2luLmdvb2QoKSkKICAgICAgICBfTV9vayA9 IHRydWU7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfTV9vayA9IGZhbHNlOwogICAg ICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46OgogICAgb3BlcmF0b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlw ZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46OgogICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkKICAg IHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg IG9wZXJhdG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkKICAgIHsKICAgICAgX19w ZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4o Ym9vbCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19i YXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdl dCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vy ciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAg IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihzaG9ydCYgX19uKQogICAgewogICAgICBz ZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0 ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAg ICAgICBsb25nIF9fbDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdl dCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vy ciwgX19sKTsKCgogICAgICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQp CiAgICAgICAgICAgICAgICAgICYmIChudW1lcmljX2xpbWl0czxzaG9ydD46Om1pbigpIDw9IF9f bAogICAgICAgICAgICAgICAgICAgICAgJiYgX19sIDw9IG51bWVyaWNfbGltaXRzPHNob3J0Pjo6 bWF4KCkpKQogICAgICAgICAgICAgICAgX19uID0gX19sOwogICAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl cmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0 aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19i YXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hl Y2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRo aXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShf X2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihpbnQmIF9f bikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19j ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29v ZGJpdCk7CiAgICAgICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr X2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlz LCAwLCAqdGhpcywgX19lcnIsIF9fbCk7CgoKICAgICAgICAgICAgICBpZiAoIShfX2VyciAmIGlv c19iYXNlOjpmYWlsYml0KQogICAgICAgICAgICAgICAgICAmJiAobnVtZXJpY19saW1pdHM8aW50 Pjo6bWluKCkgPD0gX19sCiAgICAgICAgICAgICAgICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19s aW1pdHM8aW50Pjo6bWF4KCkpKQogICAgICAgICAgICAgICAgX19uID0gX19sOwogICAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAg IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMt PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0 aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19l cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAg aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdl dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9y Pj4obG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAg ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlv c19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51 bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBf X2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pCiAg ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikK ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQp OwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAg ICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46OgogICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9f Y2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIg PSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYg KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+ Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVu c2lnbmVkIGxvbmcgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBm YWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFj ZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAs ICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7 CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fbikK ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJi KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9z X2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJp dCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAg ICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAg ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjoKICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl cmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0 cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0g aW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChf TV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdl dCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxv bmcgZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsK ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUo aW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m bnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMs IF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAg ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1 cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX24pCiAgICB7CiAg ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAg ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAg IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpCiAgICB7CiAgICAgICBzZW50 cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgICBpZiAoX19jZXJiKQogICAgICAgICB7CiAg ICAgICAgICAgdHJ5CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX194 dHJjdCA9IDA7CiAgICAgICAgICAgICAgIGlmIChfX3Nib3V0KQogICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbiA9IHRoaXMtPnJkYnVm KCk7CiAgICAgICAgICAgICAgICAgICBfX3h0cmN0ID0gX19jb3B5X3N0cmVhbWJ1ZnMoKnRoaXMs IF9fc2JpbiwgX19zYm91dCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAo IV9fc2JvdXQgfHwgIV9feHRyY3QpCiAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICAgfQogICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv biYgX19mYWlsKQogICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjoKICAgIGdldCh2b2lkKQogICAgewogICAgICBjb25zdCBpbnRfdHlwZSBf X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgaW50X3R5cGUgX19jID0gX19lb2Y7CiAg ICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAg ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgX19jID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7CgogICAgICAgICAgICAgIGlm ICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAg X01fZ2NvdW50ID0gMTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAg ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBf X2M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPjo6CiAgICBnZXQoY2hhcl90eXBlJiBfX2MpCiAgICB7CiAgICAgIF9NX2dj b3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19j ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg Y29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAg aW50X3R5cGUgX19idWZ2YWwgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAg ICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19idWZ2YWwsIF9fZW9mKSkKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gMTsKICAgICAgICAgICAg ICAgICAgX19jID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2J1ZnZhbCk7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6CiAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFy X3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9f Y2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg dHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9 IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBp bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVh bWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBf X2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50ICsgMSA8 IF9fbgogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9f YywgX19lb2YpCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5 cGUoX19jLCBfX2lkZWxpbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpf X3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAg X19jID0gX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUo X19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m Yml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICAqX19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46OgogICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2Rl bGltKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlz LCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg ICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5 cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9f ZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUq IF9fdGhpc19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0g X190aGlzX3NiLT5zZ2V0YygpOwogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MyID0gdHJhaXRz X3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwoKICAgICAgICAgICAgICB3aGlsZSAoIXRyYWl0c190 eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJh aXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pCiAgICAgICAgICAgICAgICAgICAg ICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19zYi5zcHV0YyhfX2MyKSwgX19lb2YpKQog ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAg ICAgICAgICAgX19jID0gX190aGlzX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgICAgX19j MiA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAg IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfTV9n Y291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICBy ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJl YW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50 X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAg ICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAg ICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAg ICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUg KF9NX2djb3VudCArIDEgPCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBl OjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRz X3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQogICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAg ICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICAr K19NX2djb3VudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5 cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19p ZGVsaW0pKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2It PnNidW1wYygpOwogICAgICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICpfX3Mg PSBjaGFyX3R5cGUoKTsKICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24sIGludF90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9N X2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAo X19jZXJiICYmIF9fbiA+IDApCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsK ICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAg ICAgICAgICAgICBpbnRfdHlwZSBfX2M7CgogICAgICAgICAgICAgIF9fbiA9IG1pbihfX24sIG51 bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9N X2djb3VudCA8IF9fbgogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2lu dF90eXBlKF9fYyA9IF9fc2ItPnNidW1wYygpLCBfX2VvZikpCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICBpZiAodHJhaXRz X3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19kZWxpbSkpCiAgICAgICAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9p bnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ OjoKICAgIHBlZWsodm9pZCkKICAgIHsKICAgICAgaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6 OmVvZigpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0 cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg ICAgeyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0YygpOyB9CiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFk KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0g MDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9nY291 bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbik7CiAgICAgICAgICAgICAgaWYgKF9N X2djb3VudCAhPSBfX24pCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHJlYWRzb21lKGNoYXJfdHlwZSog X19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg ICAgICAgdHJ5CiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX251bSA9 IHRoaXMtPnJkYnVmKCktPmluX2F2YWlsKCk7CiAgICAgICAgICAgICAgaWYgKF9fbnVtID49IDAp CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbnVtID0gbWluKF9fbnVtLCBf X24pOwogICAgICAgICAgICAgICAgICBpZiAoX19udW0pCiAgICAgICAgICAgICAgICAgICAgX01f Z2NvdW50ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX251bSk7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpm YWlsYml0KTsKICAgICAgcmV0dXJuIF9NX2djb3VudDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHB1dGJhY2so Y2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAg ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAg ICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAg ICAgICAgICBpZiAoIV9fc2IKICAgICAgICAgICAgICAgICAgfHwgdHJhaXRzX3R5cGU6OmVxX2lu dF90eXBlKF9fc2ItPnNwdXRiYWNrYyhfX2MpLCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0 Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93 OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg ICB1bmdldCh2b2lkKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19j ZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0 cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJh aXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0 aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmICghX19zYgogICAgICAgICAgICAgICAgICB8 fCB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19zYi0+c3VuZ2V0YygpLCBfX2VvZikpCiAgICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGludAogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHN5bmModm9pZCkK ICAgIHsKICAgICAgaW50IF9fcmV0ID0gLTE7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg ICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSog X19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKF9fc2IpCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgIGlmIChfX3NiLT5wdWJzeW5jKCkgPT0gLTEpCiAgICAg ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX3JldCA9IDA7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46OnBvc190eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg dGVsbGcodm9pZCkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7CiAg ICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIF9fcmV0ID0gdGhpcy0+cmRidWYoKS0+cHVi c2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6aW4pOwogICAgICByZXR1cm4gX19y ZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46OgogICAgc2Vla2cocG9zX3R5cGUgX19wb3MpCiAgICB7CiAgICAgIF9N X2djb3VudCA9IDA7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIHsKCgogICAgICAg ICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3Nf YmFzZTo6aW4pOwoKCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEp KSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAg ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKG9mZl90eXBlIF9f b2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsK ICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBf X2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZGlyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppbik7 CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAg cmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0 b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKQog ICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJl YW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19p biwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg ICAgICAgICB7IF9faW4uZ2V0KF9fYyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0 KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg IG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQq IF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g X19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9f c3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf VHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl OwogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwogICAgICBzdHJlYW1z aXplIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50 cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg ICAgICB0cnkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0g X19pbi53aWR0aCgpOwogICAgICAgICAgICAgIGlmIChfX251bSA9PSAwKQogICAgICAgICAgICAg ICAgX19udW0gPSBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCk7CgogICAgICAgICAg ICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+ KF9faW4uZ2V0bG9jKCkpOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gX1Ry YWl0czo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4u cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAg ICAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX251bSAtIDEKICAgICAgICAgICAgICAg ICAgICAgJiYgIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAg ICAgICAgICYmICFfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSBfX2M7CiAgICAgICAgICAgICAgICAg ICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShf X2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJp dCk7CgoKCiAgICAgICAgICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwoKICAgICAgICAgICAgICBf X2luLndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICBpZiAoIV9fZXh0cmFjdGVkKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9z X2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19pbjsKICAgIH0KCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LF9UcmFpdHM+JgogICAgd3MoYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9faW4pCiAg ICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVh bV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1 Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFt X3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CgogICAgICBjb25zdCBfX2N0eXBl X3R5cGUmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsK ICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICBfX3N0 cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICBfX2ludF90eXBlIF9fYyA9 IF9fc2ItPnNnZXRjKCk7CgogICAgICB3aGlsZSAoIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywg X19lb2YpCiAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2Mp KQogICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwoKICAgICAgIGlmIChfVHJhaXRzOjplcV9p bnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2Zi aXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JiBfX2luLAogICAgICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3Ry ZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19p c3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsK ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3Ry aW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBl IF9fc2l6ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7CgogICAgICB0 eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgX19zdHIuZXJhc2UoKTsKICAgICAgICAg IHN0cmVhbXNpemUgX193ID0gX19pbi53aWR0aCgpOwogICAgICAgICAgX19zaXplX3R5cGUgX19u OwogICAgICAgICAgX19uID0gX193ID4gMCA/IHN0YXRpY19jYXN0PF9fc2l6ZV90eXBlPihfX3cp IDogX19zdHIubWF4X3NpemUoKTsKCiAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3R5 cGUgPSB1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsKICAgICAgICAgIGNv bnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAgIF9fc3RyZWFt YnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBfX2ludF90eXBlIF9fYyA9 IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19uCiAgICAg ICAgICAgICAgICAgJiYgIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAg ICAgICAgICAgJiYgIV9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsK ICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNu ZXh0YygpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUo X19jLCBfX2VvZikpCiAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7 CiAgICAgICAgICBfX2luLndpZHRoKDApOwogICAgICAgIH0KCgogICAgICBpZiAoIV9fZXh0cmFj dGVkKQogICAgICAgIF9faW4uc2V0c3RhdGUgKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgIHJl dHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAg ICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwgX0No YXJUIF9fZGVsaW0pCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90 eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVh bV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAg IHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190 eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3Np emVfdHlwZTsKCiAgICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKICAgICAgYm9vbCBf X3Rlc3RkZWxpbSA9IGZhbHNlOwogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5 IF9fY2VyYihfX2luLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg ICBfX3N0ci5lcmFzZSgpOwogICAgICAgICAgX19zaXplX3R5cGUgX19uID0gX19zdHIubWF4X3Np emUoKTsKCiAgICAgICAgICBfX2ludF90eXBlIF9faWRlbGltID0gX1RyYWl0czo6dG9faW50X3R5 cGUoX19kZWxpbSk7CiAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1 ZigpOwogICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAg IGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAgIF9fdGVz dGRlbGltID0gX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSk7CgogICAgICAgICAg d2hpbGUgKF9fZXh0cmFjdGVkIDw9IF9fbgogICAgICAgICAgICAgICAgICYmICFfVHJhaXRzOjpl cV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICYmICFfX3Rlc3RkZWxpbSkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fc3RyICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlw ZShfX2MpOwogICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgX19jID0g X19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfVHJhaXRzOjplcV9p bnRfdHlwZShfX2MsIF9faWRlbGltKTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9UcmFp dHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICBfX2luLnNldHN0YXRlKGlv c19iYXNlOjplb2ZiaXQpOwogICAgICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCAmJiAhX190 ZXN0ZGVsaW0pCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAg IHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFp dHMsIGNsYXNzIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRz PiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAg ICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19zdHIpCiAgICB7 IHJldHVybiBnZXRsaW5lKF9faW4sIF9fc3RyLCBfX2luLndpZGVuKCdcbicpKTsgfQoKCgoKICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaXN0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVtcGxh dGUgaXN0cmVhbSYgd3MoaXN0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVy YXRvcj4+KGlzdHJlYW0mLCBjaGFyJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJh dG9yPj4oaXN0cmVhbSYsIGNoYXIqKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0 b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFt JiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBzaWduZWQgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0ZSBp c3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCB1bnNpZ25lZCBjaGFyKik7CiAgZXh0ZXJuIHRl bXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHNpZ25lZCBjaGFyKik7CgoKICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PjsKICBleHRlcm4gdGVt cGxhdGUgd2lzdHJlYW0mIHdzKHdpc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFt JiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgd2NoYXJfdCYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0 cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIHdjaGFyX3QqKTsKCn0KIyAyOTggIi91c3IvaW5j bHVkZS9jKysvMy4yLjEvaXN0cmVhbSIgMiAzCiMgNDcgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEv aW9zdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgZXh0ZXJuIGlzdHJlYW0gY2luOwogIGV4 dGVybiBvc3RyZWFtIGNvdXQ7CiAgZXh0ZXJuIG9zdHJlYW0gY2VycjsKICBleHRlcm4gb3N0cmVh bSBjbG9nOwoKCiAgZXh0ZXJuIHdpc3RyZWFtIHdjaW47CiAgZXh0ZXJuIHdvc3RyZWFtIHdjb3V0 OwogIGV4dGVybiB3b3N0cmVhbSB3Y2VycjsKICBleHRlcm4gd29zdHJlYW0gd2Nsb2c7CgoKCiAg c3RhdGljIGlvc19iYXNlOjpJbml0IF9faW9pbml0Owp9CiMgNSAiUHJvamVjdFV0aWxzL0RhdGFT dHJ1Y3R1cmVzL1NpbmdsZXRvbi5oIiAyCgp0ZW1wbGF0ZSA8Y2xhc3MgRHR5cGU+IGNsYXNzIFNp bmdsZXRvbgp7CiAgICBzdGF0aWMgRHR5cGUgKm1zX1NpbmdsZXRvbjsKCiAgICBwdWJsaWM6CiAg ICAgICAgU2luZ2xldG9uKCkKICAgICAgICB7CiAgICAgICAgICAgIGludCBvZmZzZXQ7CgogICAg ICAgICAgICBpZiAobXNfU2luZ2xldG9uICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgIHN0ZDo6Y2VyciA8PCAiQXR0ZW1wdCB0byBjcmVhdGUgbXVsdGlwbGUgU2luZ2xldG9uIiA8 PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAg ICAgICAgIG9mZnNldCA9IChpbnQpKER0eXBlICopMSAtIChpbnQpKFNpbmdsZXRvbjxEdHlwZT4q KShEdHlwZSAqKTE7CiAgICAgICAgICAgIG1zX1NpbmdsZXRvbiA9IChEdHlwZSAqKSgoaW50KXRo aXMrb2Zmc2V0KTsKICAgICAgICB9CgogICAgICAgIH5TaW5nbGV0b24oKQogICAgICAgIHsKICAg ICAgICAgICAgaWYgKG1zX1NpbmdsZXRvbiA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICBzdGQ6OmNlcnIgPDwgIkRlc3Ryb3lpbmcgYSBzaW5nbGV0b24gdGhhdCBkb2VzIG5vdCBl eGlzdCIgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9 CgogICAgICAgICAgICBtc19TaW5nbGV0b24gPSAwOwogICAgICAgIH0KCiAgICAgICAgc3RhdGlj IER0eXBlICZnZXRTaW5nbGV0b24oKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKG1zX1Npbmds ZXRvbiA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIlNp bmdsZXRvbiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAg ICAgICAgIGFib3J0KCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAoKm1zX1Np bmdsZXRvbik7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgRHR5cGUgKmdldFNpbmdsZXRvblB0 cigpCiAgICAgICAgewogICAgICAgICAgICBpZiAobXNfU2luZ2xldG9uID09IDApCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiU2luZ2xldG9uIGhhcyBub3QgYmVl biBpbml0aWFsaXplZCIgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgICAgZXhpdCgxKTsKICAg ICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG1zX1NpbmdsZXRvbjsKICAgICAgICB9Cgp9 OwoKdGVtcGxhdGUgPGNsYXNzIER0eXBlPiBEdHlwZSAqU2luZ2xldG9uPER0eXBlPjo6bXNfU2lu Z2xldG9uID0gMDsKIyA1ICJQcm9qZWN0VXRpbHMvQXNzZXJ0aW9uL0Fzc2VydGlvbi5oIiAyCiMg MSAiUHJvamVjdFV0aWxzL0RhdGFTdHJ1Y3R1cmVzL1N0cmluZ0hhc2h0YWJsZS5oIiAxCgoKCgoK CiMgMSAiUHJvamVjdFV0aWxzL0RhdGFTdHJ1Y3R1cmVzL0xpc3QuaCIgMQoKCgoKCnRlbXBsYXRl IDxjbGFzcyBEdHlwZT4gY2xhc3MgTGlzdE5vZGUKewogICAgcHVibGljOgogICAgTGlzdE5vZGUg Km5leHQsICpwcmV2OwogICAgRHR5cGUgZGF0YTsKCiAgICBMaXN0Tm9kZSgpOwp9OwoKdGVtcGxh dGUgPGNsYXNzIER0eXBlPiBMaXN0Tm9kZTxEdHlwZT46Okxpc3ROb2RlKCkKewogICAgbmV4dCA9 IF9fbnVsbDsKICAgIHByZXYgPSBfX251bGw7Cn0KCnRlbXBsYXRlIDxjbGFzcyBEdHlwZT4gY2xh c3MgTGlzdAp7CiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgTGlzdE5vZGU8RHR5cGU+ICpmaXJzdCwg Kmxhc3Q7CiAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aDsKCiAgICAgICAgdm9pZCBzcGxpY2VJ bihMaXN0Tm9kZTxEdHlwZT4gKmJlZm9yZSwgTGlzdE5vZGU8RHR5cGU+ICphZnRlciwgTGlzdE5v ZGU8RHR5cGU+ICpub2RlKTsKICAgICAgICB2b2lkIHNwbGljZU91dChMaXN0Tm9kZTxEdHlwZT4g Km5vZGUpOwoKICAgICAgICB2b2lkIGNvcHkoY29uc3QgTGlzdCAmbGlzdCk7CiAgICAgICAgdm9p ZCBkZWwoKTsKCiAgICBwdWJsaWM6CiAgICAgICAgTGlzdCgpOwogICAgICAgIExpc3QoY29uc3Qg TGlzdCAmbGlzdCk7CiAgICAgICAgfkxpc3QoKTsKCiAgICAgICAgTGlzdCAmb3BlcmF0b3I9KGNv bnN0IExpc3QgJmxpc3QpOwoKICAgICAgICBMaXN0Tm9kZTxEdHlwZT4gKmFkZEJlZm9yZShMaXN0 Tm9kZTxEdHlwZT4gKm5vZGUsIER0eXBlIGRhdGEpOwogICAgICAgIExpc3ROb2RlPER0eXBlPiAq YWRkQWZ0ZXIoTGlzdE5vZGU8RHR5cGU+ICpub2RlLCBEdHlwZSBkYXRhKTsKICAgICAgICB2b2lk IGFwcGVuZChEdHlwZSBkYXRhKTsKICAgICAgICB2b2lkIHByZXBlbmQoRHR5cGUgZGF0YSk7Cgog ICAgICAgIHZvaWQgcmVtb3ZlKExpc3ROb2RlPER0eXBlPiAqbm9kZSk7CgogICAgICAgIExpc3RO b2RlPER0eXBlPiAqZ2V0Rmlyc3QoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu IGZpcnN0OwogICAgICAgIH0KCiAgICAgICAgTGlzdE5vZGU8RHR5cGU+ICpnZXRMYXN0KCkgY29u c3QKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBsYXN0OwogICAgICAgIH0KCiAgICAgICAg aW50IGdldExlbmd0aCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gbGVuZ3Ro OwogICAgICAgIH0KCiAgICAgICAgdm9pZCBjbGVhcigpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIER0 eXBlPiB2b2lkIExpc3Q8RHR5cGU+OjpzcGxpY2VJbihMaXN0Tm9kZTxEdHlwZT4gKmJlZm9yZSwg TGlzdE5vZGU8RHR5cGU+ICphZnRlciwgTGlzdE5vZGU8RHR5cGU+ICpub2RlKQp7CiAgICBpZiAo YmVmb3JlICE9IF9fbnVsbCkKICAgIHsKICAgICAgICBiZWZvcmUtPm5leHQgPSBub2RlOwogICAg fQogICAgZWxzZQogICAgewogICAgICAgIGZpcnN0ID0gbm9kZTsKICAgIH0KCiAgICBub2RlLT5w cmV2ID0gYmVmb3JlOwoKICAgIGlmIChhZnRlciAhPSBfX251bGwpCiAgICB7CiAgICAgICAgYWZ0 ZXItPnByZXYgPSBub2RlOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGxhc3QgPSBub2Rl OwogICAgfQoKICAgIG5vZGUtPm5leHQgPSBhZnRlcjsKCiAgICBsZW5ndGgrKzsKfQoKdGVtcGxh dGUgPGNsYXNzIER0eXBlPiB2b2lkIExpc3Q8RHR5cGU+OjpzcGxpY2VPdXQoTGlzdE5vZGU8RHR5 cGU+ICpub2RlKQp7CiAgICBpZiAobm9kZS0+cHJldiAhPSBfX251bGwpCiAgICB7CiAgICAgICAg bm9kZS0+cHJldi0+bmV4dCA9IG5vZGUtPm5leHQ7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAg ICAgZmlyc3QgPSBub2RlLT5uZXh0OwogICAgfQoKICAgIGlmIChub2RlLT5uZXh0ICE9IF9fbnVs bCkKICAgIHsKICAgICAgICBub2RlLT5uZXh0LT5wcmV2ID0gbm9kZS0+cHJldjsKICAgIH0KICAg IGVsc2UKICAgIHsKICAgICAgICBsYXN0ID0gbm9kZS0+cHJldjsKICAgIH0KCiAgICBsZW5ndGgt LTsKfQoKdGVtcGxhdGUgPGNsYXNzIER0eXBlPiB2b2lkIExpc3Q8RHR5cGU+Ojpjb3B5KGNvbnN0 IExpc3Q8RHR5cGU+ICZsaXN0KQp7CiAgICBMaXN0Tm9kZTxEdHlwZT4gKmN1cnJlbnQsICpsYXN0 LCAqbm9kZTsKCiAgICBjdXJyZW50ID0gbGlzdC5nZXRGaXJzdCgpOwogICAgbGFzdCA9IF9fbnVs bDsKCiAgICB3aGlsZSAoY3VycmVudCAhPSBfX251bGwpCiAgICB7CiAgICAgICAgbm9kZSA9IG5l dyBMaXN0Tm9kZTxEdHlwZT4oKTsKCiAgICAgICAgbm9kZS0+ZGF0YSA9IGN1cnJlbnQtPmRhdGE7 CgogICAgICAgIHNwbGljZUluKGxhc3QsIF9fbnVsbCwgbm9kZSk7CgogICAgICAgIGxhc3QgPSBu b2RlOwogICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OwogICAgfQoKICAgIGxlbmd0aCA9 IGxpc3QubGVuZ3RoOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRHR5cGU+IHZvaWQgTGlzdDxEdHlwZT46 OmRlbCgpCnsKICAgIExpc3ROb2RlPER0eXBlPiAqY3VycmVudCwgKm5leHQ7CgogICAgY3VycmVu dCA9IGZpcnN0OwoKICAgIHdoaWxlIChjdXJyZW50ICE9IF9fbnVsbCkKICAgIHsKICAgICAgICBu ZXh0ID0gY3VycmVudC0+bmV4dDsKICAgICAgICBkZWxldGUgY3VycmVudDsKICAgICAgICBjdXJy ZW50ID0gbmV4dDsKICAgIH0KCiAgICBmaXJzdCA9IF9fbnVsbDsKICAgIGxhc3QgPSBfX251bGw7 CiAgICBsZW5ndGggPSAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRHR5cGU+IExpc3Q8RHR5cGU+OjpM aXN0KCkKewogICAgZmlyc3QgPSBfX251bGw7CiAgICBsYXN0ID0gX19udWxsOwoKICAgIGxlbmd0 aCA9IDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBEdHlwZT4gTGlzdDxEdHlwZT46Okxpc3QoY29uc3Qg TGlzdDxEdHlwZT4gJmxpc3QpCnsKICAgIGZpcnN0ID0gX19udWxsOwogICAgbGFzdCA9IF9fbnVs bDsKCiAgICBsZW5ndGggPSAwOwoKICAgIGNvcHkobGlzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBE dHlwZT4gTGlzdDxEdHlwZT46On5MaXN0KCkKewogICAgZGVsKCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBEdHlwZT4gTGlzdDxEdHlwZT4gJkxpc3Q8RHR5cGU+OjpvcGVyYXRvcj0oY29uc3QgTGlzdCAm bGlzdCkKewogICAgaWYgKHRoaXMgIT0gJmxpc3QpCiAgICB7CiAgICAgICAgZGVsKCk7CiAgICAg ICAgY29weShsaXN0KTsKICAgIH0KCiAgICByZXR1cm4gKnRoaXM7Cn0KCgp0ZW1wbGF0ZSA8Y2xh c3MgRHR5cGU+IExpc3ROb2RlPER0eXBlPiAqTGlzdDxEdHlwZT46OmFkZEFmdGVyKExpc3ROb2Rl PER0eXBlPiAqbm9kZSwgRHR5cGUgZCkKewogICAgTGlzdE5vZGU8RHR5cGU+ICp0bXAsICpuZXh0 OwoKICAgIHRtcCA9IG5ldyBMaXN0Tm9kZTxEdHlwZT4oKTsKCiAgICB0bXAtPmRhdGEgPSBkOwoK ICAgIGlmIChub2RlID09IF9fbnVsbCkKICAgIHsKICAgICAgICBpZiAobGVuZ3RoICE9IDApCiAg ICAgICAgewogICAgICAgICAgICByZXR1cm4gX19udWxsOwogICAgICAgIH0KCiAgICAgICAgbmV4 dCA9IF9fbnVsbDsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBuZXh0ID0gbm9kZS0+bmV4 dDsKICAgIH0KCiAgICBzcGxpY2VJbihub2RlLCBuZXh0LCB0bXApOwoKICAgIHJldHVybiB0bXA7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBEdHlwZT4gTGlzdE5vZGU8RHR5cGU+ICpMaXN0PER0eXBlPjo6 YWRkQmVmb3JlKExpc3ROb2RlPER0eXBlPiAqbm9kZSwgRHR5cGUgZCkKewogICAgTGlzdE5vZGU8 RHR5cGU+ICp0bXAsICpwcmV2OwoKICAgIHRtcCA9IG5ldyBMaXN0Tm9kZTxEdHlwZT47CgogICAg dG1wLT5kYXRhID0gZDsKCiAgICBpZiAobm9kZSA9PSBfX251bGwpCiAgICB7CiAgICAgICAgaWYg KGxlbmd0aCAhPSAwKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIF9fbnVsbDsKICAgICAg ICB9CgogICAgICAgIHByZXYgPSBfX251bGw7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICBwcmV2 ID0gbm9kZS0+cHJldjsKICAgIH0KCiAgICBzcGxpY2VJbihwcmV2LCBub2RlLCB0bXApOwoKICAg IHJldHVybiB0bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBEdHlwZT4gdm9pZCBMaXN0PER0eXBlPjo6 cHJlcGVuZChEdHlwZSBkKQp7CiAgICBMaXN0Tm9kZTxEdHlwZT4gKnRtcDsKCiAgICB0bXAgPSBu ZXcgTGlzdE5vZGU8RHR5cGU+OwoKICAgIHRtcC0+ZGF0YSA9IGQ7CgogICAgc3BsaWNlSW4oX19u dWxsLCBmaXJzdCwgdG1wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIER0eXBlPiB2b2lkIExpc3Q8RHR5 cGU+OjphcHBlbmQoRHR5cGUgZCkKewogICAgTGlzdE5vZGU8RHR5cGU+ICp0bXA7CgogICAgdG1w ID0gbmV3IExpc3ROb2RlPER0eXBlPjsKCiAgICB0bXAtPmRhdGEgPSBkOwoKICAgIHNwbGljZUlu KGxhc3QsIF9fbnVsbCwgdG1wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIER0eXBlPiB2b2lkIExpc3Q8 RHR5cGU+OjpyZW1vdmUoTGlzdE5vZGU8RHR5cGU+ICpub2RlKQp7CiAgICBzcGxpY2VPdXQobm9k ZSk7CgogICAgZGVsZXRlIG5vZGU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBEdHlwZT4gdm9pZCBMaXN0 PER0eXBlPjo6Y2xlYXIoKQp7CiAgICBMaXN0Tm9kZTxEdHlwZT4gKmN1ciwgKm5leHQ7CgogICAg Y3VyID0gZmlyc3Q7CgogICAgd2hpbGUgKGN1ciAhPSBfX251bGwpCiAgICB7CiAgICAgICAgbmV4 dCA9IGN1ci0+bmV4dDsKICAgICAgICBkZWxldGUgY3VyOwoKICAgICAgICBjdXIgPSBuZXh0Owog ICAgfQoKICAgIGxlbmd0aCA9IDA7CiAgICBmaXJzdCA9IF9fbnVsbDsKICAgIGxhc3QgPSBfX251 bGw7Cn0KIyA4ICJQcm9qZWN0VXRpbHMvRGF0YVN0cnVjdHVyZXMvU3RyaW5nSGFzaHRhYmxlLmgi IDIKCnRlbXBsYXRlIDxjbGFzcyBEdHlwZT4gY2xhc3MgSGFzaHRhYmxlTm9kZQogICAgICAgIHsK ICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmc7CiAgICAg ICAgICAgICAgICBEdHlwZSBkYXRhOwoKICAgICAgICAgICAgICAgIEhhc2h0YWJsZU5vZGUoKSB7 fTsKCiAgICAgICAgICAgICAgICBIYXNodGFibGVOb2RlKGNvbnN0IHN0ZDo6c3RyaW5nIHN0ciwg Y29uc3QgRHR5cGUgZCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAgICAgICBzdHJpbmcgPSBzdHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkOwog ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgSGFzaHRhYmxlTm9kZShj b25zdCBIYXNodGFibGVOb2RlICZodG4pCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgICAgc3RyaW5nID0gaHRuLnN0cmluZzsKICAgICAgICAgICAgICAgICAg ICAgICAgZGF0YSA9IGh0bi5kYXRhOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg ICAgICAgICAgfkhhc2h0YWJsZU5vZGUoKSB7fQoKICAgICAgICAgICAgICAgIEhhc2h0YWJsZU5v ZGUgb3BlcmF0b3I9KGNvbnN0IEhhc2h0YWJsZU5vZGUgJmh0bikKICAgICAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgPSBodG4uc3RyaW5nOwogICAg ICAgICAgICAgICAgICAgICAgICBkYXRhID0gaHRuLmRhdGE7CgogICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg ICAgICBib29sIGVxdWFsKGNvbnN0IHN0ZDo6c3RyaW5nIHN0cikgY29uc3QKICAgICAgICAgICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHN0cmluZyA9PSBz dHIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKCnRlbXBsYXRlIDxjbGFz cyBEdHlwZT4gY2xhc3MgU3RyaW5nSGFzaHRhYmxlCiAgICAgICAgewogICAgICAgIHByb3RlY3Rl ZDoKICAgICAgICAgICAgICAgIExpc3Q8SGFzaHRhYmxlTm9kZTxEdHlwZT4gPiAqdGFibGU7CiAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGFibGVTaXplOwogICAgICAgICAgICAgICAgdW5z aWduZWQgaW50IG51bWJlcjsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQ7Cgog ICAgICAgICAgICAgICAgdm9pZCBjb3B5KGNvbnN0IFN0cmluZ0hhc2h0YWJsZSAmc2h0KTsKICAg ICAgICAgICAgICAgIHZvaWQgZGVzdHJveSgpOwogICAgICAgICAgICAgICAgaW50IGhhc2goY29u c3Qgc3RkOjpzdHJpbmcgc3RyKSBjb25zdDsKCiAgICAgICAgcHVibGljOgogICAgICAgICAgICAg ICAgU3RyaW5nSGFzaHRhYmxlKHVuc2lnbmVkIGludCBsZW4pOwogICAgICAgICAgICAgICAgU3Ry aW5nSGFzaHRhYmxlKGNvbnN0IFN0cmluZ0hhc2h0YWJsZSAmc2h0KTsKICAgICAgICAgICAgICAg IH5TdHJpbmdIYXNodGFibGUoKTsKCiAgICAgICAgICAgICAgICBTdHJpbmdIYXNodGFibGUgJm9w ZXJhdG9yPShjb25zdCBTdHJpbmdIYXNodGFibGUgJmxpc3QpOwoKICAgICAgICAgICAgICAgIHZv aWQgYWRkKGNvbnN0IHN0ZDo6c3RyaW5nICZrZXksIGNvbnN0IER0eXBlICZkKTsKICAgICAgICAg ICAgICAgIGJvb2wgc2VhcmNoKGNvbnN0IHN0ZDo6c3RyaW5nICZrZXkpIGNvbnN0OwogICAgICAg ICAgICAgICAgYm9vbCBnZXQoY29uc3Qgc3RkOjpzdHJpbmcgJmtleSwgRHR5cGUgJmRhdGEpIGNv bnN0OwogICAgICAgICAgICAgICAgdm9pZCByZW1vdmUoY29uc3Qgc3RkOjpzdHJpbmcgJmtleSk7 CiAgICAgICAgfTsKCnRlbXBsYXRlIDxjbGFzcyBEdHlwZT4gdm9pZCBTdHJpbmdIYXNodGFibGU8 RHR5cGU+Ojpjb3B5KGNvbnN0IFN0cmluZ0hhc2h0YWJsZSAmc3RyKQogICAgICAgIHsKICAgICAg ICBMaXN0Tm9kZTxIYXNodGFibGVOb2RlPER0eXBlPiA+ICpub2RlOwogICAgICAgIGludCBsZW47 CiAgICAgICAgaW50IGluZGV4OwogICAgICAgIGludCBjb3VudDsKCiAgICAgICAgdGFibGVTaXpl ID0gc3RyLnRhYmxlU2l6ZTsKICAgICAgICBvZmZzZXQgPSBzdHIub2Zmc2V0OwoKICAgICAgICBu dW1iZXIgPSAwOwoKICAgICAgICB0YWJsZSA9IG5ldyBMaXN0PEhhc2h0YWJsZU5vZGU8RHR5cGU+ ID5bdGFibGVTaXplXTsKICAgICAgICBjb3VudCA9IDA7CiAgICAgICAgaW5kZXggPSAwOwoKICAg ICAgICB3aGlsZSAoY291bnQgPCBzdHIubnVtYmVyKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgbm9kZSA9IHN0ci50YWJsZVtpbmRleF0uZ2V0Rmlyc3QoKTsKICAgICAgICAgICAg ICAgIGluZGV4Kys7CgogICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUgIT0gX19udWxsKQogICAg ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZChub2RlLT5k YXRhLT5zdHJpbmcsIG5vZGUtPmRhdGEtPmRhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICBj b3VudCsrOwoKICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPm5leHQ7CiAgICAg ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgcmV0dXJuOwog ICAgICAgIH0KCnRlbXBsYXRlIDxjbGFzcyBEdHlwZT4gdm9pZCBTdHJpbmdIYXNodGFibGU8RHR5 cGU+OjpkZXN0cm95KCkKICAgICAgICB7CiAgICAgICAgaWYgKHRhYmxlICE9IF9fbnVsbCkKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSB0YWJsZTsKICAgICAgICAg ICAgICAgIH0KICAgICAgICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRHR5cGU+IGludCBTdHJpbmdIYXNo dGFibGU8RHR5cGU+OjpoYXNoKGNvbnN0IHN0ZDo6c3RyaW5nIHMpIGNvbnN0CiAgICAgICAgewog ICAgICAgIHVuc2lnbmVkIGludCBoYXNoLCB0bXA7CgogICAgICAgIGhhc2ggPSAwOwogICAgICAg IHRtcCA9IG9mZnNldDsKCiAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzLnNp emUoKTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgaGFzaCA9IChoYXNoIDw8IDQpICsgc1tp XSp0bXA7CgogICAgICAgICAgICB0bXAgPSBoYXNoICYgMHhmZjAwMDAwMDsKCiAgICAgICAgICAg IGlmICh0bXAgIT0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGhhc2ggPSBo YXNoICsgKHRtcCA+PiAyNCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBy ZXR1cm4gdG1wJXRhYmxlU2l6ZTsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRHR5cGU+IFN0 cmluZ0hhc2h0YWJsZTxEdHlwZT46OlN0cmluZ0hhc2h0YWJsZSh1bnNpZ25lZCBpbnQgbGVuKQog ICAgICAgIHsKICAgICAgICB0YWJsZVNpemUgPSBsZW47CgogICAgICAgIHRhYmxlID0gbmV3IExp c3Q8SGFzaHRhYmxlTm9kZTxEdHlwZT4gPlt0YWJsZVNpemVdOwoKICAgICAgICBudW1iZXIgPSAw OwogICAgICAgIG9mZnNldCA9IHJhbmRvbSgpJjB4ZmY7CiAgICAgICAgfQoKdGVtcGxhdGUgPGNs YXNzIER0eXBlPiBTdHJpbmdIYXNodGFibGU8RHR5cGU+OjpTdHJpbmdIYXNodGFibGUoY29uc3Qg U3RyaW5nSGFzaHRhYmxlPER0eXBlPiAmc2h0KQogICAgICAgIHsKICAgICAgICBjb3B5KHNodCk7 CiAgICAgICAgfQoKdGVtcGxhdGUgPGNsYXNzIER0eXBlPiBTdHJpbmdIYXNodGFibGU8RHR5cGU+ Ojp+U3RyaW5nSGFzaHRhYmxlKCkKICAgICAgICB7CiAgICAgICAgZGVzdHJveSgpOwogICAgICAg IH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgRHR5cGU+IFN0cmluZ0hhc2h0YWJsZTxEdHlwZT4gJlN0cmlu Z0hhc2h0YWJsZTxEdHlwZT46Om9wZXJhdG9yPShjb25zdCBTdHJpbmdIYXNodGFibGU8RHR5cGU+ ICZzaHQpCiAgICAgICAgewogICAgICAgIGlmICh0aGlzICE9ICZzaHQpCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICBkZXN0cm95KCk7CiAgICAgICAgICAgICAgICBjb3B5KHNodCk7 CiAgICAgICAgICAgICAgICB9CgogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9Cgp0ZW1w bGF0ZSA8Y2xhc3MgRHR5cGU+IHZvaWQgU3RyaW5nSGFzaHRhYmxlPER0eXBlPjo6YWRkKGNvbnN0 IHN0ZDo6c3RyaW5nICZzdHIsCiAgICAgICAgY29uc3QgRHR5cGUgJmQpCiAgICAgICAgewogICAg ICAgIGludCBpbmRleDsKICAgICAgICBMaXN0Tm9kZTxIYXNodGFibGVOb2RlPER0eXBlPiA+ICpu b2RlOwogICAgICAgIEhhc2h0YWJsZU5vZGU8RHR5cGU+IHRtcChzdHIsIGQpOwoKICAgICAgICBp bmRleCA9IGhhc2goc3RyKTsKCiAgICAgICAgbm9kZSA9IHRhYmxlW2luZGV4XS5nZXRGaXJzdCgp OwoKICAgICAgICB3aGlsZSAobm9kZSAhPSBfX251bGwpCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICBpZiAobm9kZS0+ZGF0YS5lcXVhbChzdHIpKQogICAgICAgICAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmRhdGEuZGF0YSA9IGQ7CgogICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg ICAgICAgICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKICAgICAgICAgICAgICAgIH0KCiAgICAg ICAgdGFibGVbaW5kZXhdLmFwcGVuZCh0bXApOwogICAgICAgIH0KCnRlbXBsYXRlIDxjbGFzcyBE dHlwZT4gYm9vbCBTdHJpbmdIYXNodGFibGU8RHR5cGU+OjpzZWFyY2goY29uc3Qgc3RkOjpzdHJp bmcgJnN0cikgY29uc3QKICAgICAgICB7CiAgICAgICAgaW50IGluZGV4OwogICAgICAgIExpc3RO b2RlPEhhc2h0YWJsZU5vZGU8RHR5cGU+ID4gKm5vZGU7CgogICAgICAgIGluZGV4ID0gaGFzaChz dHIpOwoKICAgICAgICBub2RlID0gdGFibGVbaW5kZXhdLmdldEZpcnN0KCk7CgogICAgICAgIHdo aWxlIChub2RlICE9IF9fbnVsbCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlm IChub2RlLT5kYXRhLmVxdWFsKHN0cikpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K CiAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKICAgICAgICAgICAgICAgIH0KCiAg ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCnRlbXBsYXRlIDxjbGFzcyBEdHlwZT4gYm9v bCBTdHJpbmdIYXNodGFibGU8RHR5cGU+OjpnZXQoY29uc3Qgc3RkOjpzdHJpbmcgJnN0ciwgRHR5 cGUgJmQpIGNvbnN0CiAgICAgICAgewogICAgICAgIGludCBpbmRleDsKICAgICAgICBMaXN0Tm9k ZTxIYXNodGFibGVOb2RlPER0eXBlPiA+ICpub2RlOwoKICAgICAgICBpbmRleCA9IGhhc2goc3Ry KTsKCiAgICAgICAgbm9kZSA9IHRhYmxlW2luZGV4XS5nZXRGaXJzdCgpOwoKICAgICAgICB3aGls ZSAobm9kZSAhPSBfX251bGwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAo bm9kZS0+ZGF0YS5lcXVhbChzdHIpKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICAgIGQgPSBub2RlLT5kYXRhLmRhdGE7CgogICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg ICAgIG5vZGUgPSBub2RlLT5uZXh0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICByZXR1cm4g ZmFsc2U7CiAgICAgICAgfQoKdGVtcGxhdGUgPGNsYXNzIER0eXBlPiB2b2lkIFN0cmluZ0hhc2h0 YWJsZTxEdHlwZT46OnJlbW92ZShjb25zdCBzdGQ6OnN0cmluZyAmc3RyKQogICAgICAgIHsKICAg ICAgICBpbnQgaW5kZXg7CiAgICAgICAgTGlzdE5vZGU8SGFzaHRhYmxlTm9kZTxEdHlwZT4gPiAq bm9kZTsKCiAgICAgICAgaW5kZXggPSBoYXNoKHN0cik7CgogICAgICAgIG5vZGUgPSB0YWJsZVtp bmRleF0uZ2V0Rmlyc3QoKTsKCiAgICAgICAgd2hpbGUgKG5vZGUgIT0gX19udWxsKQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKG5vZGUtPmRhdGEuZXF1YWwoc3RyKSkKICAg ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVtpbmRl eF0ucmVtb3ZlKG5vZGUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKICAg ICAgICAgICAgICAgIH0KICAgICAgICB9CiMgNiAiUHJvamVjdFV0aWxzL0Fzc2VydGlvbi9Bc3Nl cnRpb24uaCIgMgojIDEgIlByb2plY3RVdGlscy9Hcm91cC5oIiAxCgoKCgoKdHlwZWRlZiBTdHJp bmdIYXNodGFibGU8dW5zaWduZWQgaW50PiBHcm91cFRhYmxlOwojIDcgIlByb2plY3RVdGlscy9B c3NlcnRpb24vQXNzZXJ0aW9uLmgiIDIKCmNsYXNzIF9fQXNzZXJ0aW9uTW5nciA6IHB1YmxpYyBT aW5nbGV0b248IF9fQXNzZXJ0aW9uTW5nciA+CnsKICAgIHByaXZhdGU6CgoKCgogICAgICAgIHVu c2lnbmVkIGludCBhc3NlcnRpb25MZXZlbDsKCgoKCiAgICAgICAgR3JvdXBUYWJsZSBncm91cHM7 CgogICAgcHVibGljOgogICAgICAgIF9fQXNzZXJ0aW9uTW5ncih1bnNpZ25lZCBpbnQgbGV2ZWwp OwoKICAgICAgICB2b2lkIGFzc2VydGlvbihjb25zdCBib29sICZ0ZXN0LCBjb25zdCB1bnNpZ25l ZCBpbnQgJmxldmVsLAogICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgaW50 ICZsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLiApOwogICAgICAgIHZvaWQgYXNzZXJ0aW9uKGNv bnN0IGJvb2wgJnRlc3QsIGNvbnN0IHN0ZDo6c3RyaW5nICZncm91cCwKICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGludCAmbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4g KTsKCiAgICAgICAgdm9pZCBuZXdHcm91cChjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgY29uc3Qg Ym9vbCAmYWN0aXZlLAogICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICZsZXZlbCk7 CiAgICAgICAgdm9pZCBncm91cEFjdGl2ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgY29uc3Qg Ym9vbCAmYWN0aXZlKTsKICAgICAgICB2b2lkIGdyb3VwTGV2ZWwoY29uc3Qgc3RkOjpzdHJpbmcg Jm5hbWUsIGNvbnN0IHVuc2lnbmVkIGludCAmbGV2ZWwpOwp9OwojIDYgIlRyZWVUYWJsZS5oIiAy CiMgMSAiUHJvamVjdFV0aWxzL0xvZ01hbmFnZXIvTG9nTWFuYWdlci5oIiAxCgoKCgojIDEgIi91 c3IvaW5jbHVkZS9jKysvMy4yLjEvc3N0cmVhbSIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvc3N0cmVhbSIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBiYXNp Y19zdHJpbmdidWYgOiBwdWJsaWMgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4KICAg IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw ZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRv cl90eXBlOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50 X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190 eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlw ZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBl PiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxjaGFyX3R5cGUs IF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf X3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKICAg ICAgX19zdHJpbmdfdHlwZSBfTV9zdHJpbmc7CgogICAgcHVibGljOgoKICAgICAgZXhwbGljaXQK ICAgICAgYmFzaWNfc3RyaW5nYnVmKGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFz ZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICA6IF9fc3RyZWFtYnVmX3R5cGUoKSwgX01fc3Ry aW5nKCkKICAgICAgeyBfTV9zdHJpbmdidWZfaW5pdChfX21vZGUpOyB9CgogICAgICBleHBsaWNp dAogICAgICBiYXNpY19zdHJpbmdidWYoY29uc3QgX19zdHJpbmdfdHlwZSYgX19zdHIsCiAgICAg ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6Omlu IHwgaW9zX2Jhc2U6Om91dCkKICAgICAgOiBfX3N0cmVhbWJ1Zl90eXBlKCksIF9NX3N0cmluZyhf X3N0ci5kYXRhKCksIF9fc3RyLnNpemUoKSkKICAgICAgeyBfTV9zdHJpbmdidWZfaW5pdChfX21v ZGUpOyB9CgoKICAgICAgX19zdHJpbmdfdHlwZQogICAgICBzdHIoKSBjb25zdAogICAgICB7CiAg ICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgewoKCgoKICAgICAg ICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfTV9zdHJpbmcuc2l6ZSgpOwogICAgICAgICAgICBp ZiAoX01fb3V0X2N1ciA+IF9NX291dF9iZWcpCiAgICAgICAgICAgICAgX19sZW4gPSBtYXgoX19z aXplX3R5cGUoX01fb3V0X2VuZCAtIF9NX291dF9iZWcpLCBfX2xlbik7CiAgICAgICAgICAgIHJl dHVybiBfX3N0cmluZ190eXBlKF9NX291dF9iZWcsIF9NX291dF9iZWcgKyBfX2xlbik7CiAgICAg ICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9NX3N0cmluZzsKICAgICAgfQoK ICAgICAgdm9pZAogICAgICBzdHIoY29uc3QgX19zdHJpbmdfdHlwZSYgX19zKQogICAgICB7Cgog ICAgICAgIF9NX3N0cmluZy5hc3NpZ24oX19zLmRhdGEoKSwgX19zLnNpemUoKSk7CiAgICAgICAg X01fc3RyaW5nYnVmX2luaXQoX01fbW9kZSk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CgogICAg ICB2b2lkCiAgICAgIF9NX3N0cmluZ2J1Zl9pbml0KGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUp CiAgICAgIHsKCgoKCgogICAgICAgIF9NX2J1Zl9zaXplID0gX01fc3RyaW5nLnNpemUoKTsKCgoK CgogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDUxMjsKICAgICAgICBfTV9tb2RlID0gX19tb2Rl OwogICAgICAgIGlmIChfTV9tb2RlICYgKGlvc19iYXNlOjphdGUgfCBpb3NfYmFzZTo6YXBwKSkK ICAgICAgICAgIF9NX3JlYWxseV9zeW5jKDAsIF9NX2J1Zl9zaXplKTsKICAgICAgICBlbHNlCiAg ICAgICAgICBfTV9yZWFsbHlfc3luYygwLCAwKTsKICAgICAgfQoKCiAgICAgIHZpcnR1YWwgaW50 X3R5cGUKICAgICAgdW5kZXJmbG93KCkKICAgICAgewogICAgICAgIGlmIChfTV9pbl9jdXIgJiYg X01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgcmV0dXJuIHRyYWl0c190eXBlOjp0b19p bnRfdHlwZSgqZ3B0cigpKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gdHJhaXRzX3R5 cGU6OmVvZigpOwogICAgICB9CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHBiYWNrZmFp bChpbnRfdHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpOwoKICAgICAgdmlydHVhbCBpbnRf dHlwZQogICAgICBvdmVyZmxvdyhpbnRfdHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpOwoK ICAgICAgdmlydHVhbCBfX3N0cmVhbWJ1Zl90eXBlKgogICAgICBzZXRidWYoY2hhcl90eXBlKiBf X3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7CiAgICAgICAgaWYgKF9fcyAmJiBfX24pCiAgICAg ICAgICB7CiAgICAgICAgICAgIF9NX3N0cmluZyA9IF9fc3RyaW5nX3R5cGUoX19zLCBfX24pOwog ICAgICAgICAgICBfTV9yZWFsbHlfc3luYygwLCAwKTsKICAgICAgICAgIH0KICAgICAgICByZXR1 cm4gdGhpczsKICAgICAgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVrb2ZmKG9m Zl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwKICAgICAgICAgICAgICBpb3Nf YmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7Cgog ICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtwb3MocG9zX3R5cGUgX19zcCwKICAgICAg ICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jh c2U6Om91dCk7CgoKCgoKCgogICAgICB2aXJ0dWFsIGludAogICAgICBfTV9yZWFsbHlfc3luYyhf X3NpemVfdHlwZSBfX2ksIF9fc2l6ZV90eXBlIF9fbykKICAgICAgewogICAgICAgIGNoYXJfdHlw ZSogX19iYXNlID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfTV9zdHJpbmcuZGF0YSgpKTsKICAg ICAgICBib29sIF9fdGVzdGluID0gX01fbW9kZSAmIGlvc19iYXNlOjppbjsKICAgICAgICBib29s IF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICAgIF9fc2l6ZV90eXBl IF9fbGVuID0gX01fc3RyaW5nLnNpemUoKTsKCiAgICAgICAgX01fYnVmID0gX19iYXNlOwogICAg ICAgIGlmIChfX3Rlc3RpbikKICAgICAgICAgICAgdGhpcy0+c2V0ZyhfX2Jhc2UsIF9fYmFzZSAr IF9faSwgX19iYXNlICsgX19sZW4pOwogICAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAgICAgICB7 CiAgICAgICAgICAgIHRoaXMtPnNldHAoX19iYXNlLCBfX2Jhc2UgKyBfX2xlbik7CiAgICAgICAg ICAgIF9NX291dF9jdXIgKz0gX19vOwogICAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAg ICB9CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbSA6IHB1Ymxp YyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAg IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190 eXBlOwoKCiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOwoKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAg dHlwZWRlZiBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5n YnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190 eXBlPiBfX2lzdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBfX3N0cmluZ2J1Zl90eXBl IF9NX3N0cmluZ2J1ZjsKCiAgICBwdWJsaWM6CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19p c3RyaW5nc3RyZWFtKGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4pCiAg ICAgIDogX19pc3RyZWFtX3R5cGUoX19udWxsKSwgX01fc3RyaW5nYnVmKF9fbW9kZSB8IGlvc19i YXNlOjppbikKICAgICAgeyB0aGlzLT5pbml0KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICBleHBs aWNpdAogICAgICBiYXNpY19pc3RyaW5nc3RyZWFtKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fc3Ry LAogICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBp b3NfYmFzZTo6aW4pCiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19udWxsKSwgX01fc3RyaW5nYnVm KF9fc3RyLCBfX21vZGUgfCBpb3NfYmFzZTo6aW4pCiAgICAgIHsgdGhpcy0+aW5pdCgmX01fc3Ry aW5nYnVmKTsgfQoKICAgICAgfmJhc2ljX2lzdHJpbmdzdHJlYW0oKQogICAgICB7IH0KCgogICAg ICBfX3N0cmluZ2J1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNv bnN0X2Nhc3Q8X19zdHJpbmdidWZfdHlwZSo+KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICBfX3N0 cmluZ190eXBlCiAgICAgIHN0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmluZ2J1Zi5z dHIoKTsgfQoKICAgICAgdm9pZAogICAgICBzdHIoY29uc3QgX19zdHJpbmdfdHlwZSYgX19zKQog ICAgICB7IF9NX3N0cmluZ2J1Zi5zdHIoX19zKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFz cyBiYXNpY19vc3RyaW5nc3RyZWFtIDogcHVibGljIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog ICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBfQWxsb2Mg YWxsb2NhdG9yX3R5cGU7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRf dHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5 cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBl IG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdidWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp Y19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fb3N0cmVhbV90eXBlOwoKICAgIHBy aXZhdGU6CiAgICAgIF9fc3RyaW5nYnVmX3R5cGUgX01fc3RyaW5nYnVmOwoKICAgIHB1YmxpYzoK CiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX29zdHJpbmdzdHJlYW0oaW9zX2Jhc2U6Om9wZW5t b2RlIF9fbW9kZSA9IGlvc19iYXNlOjpvdXQpCiAgICAgIDogX19vc3RyZWFtX3R5cGUoX19udWxs KSwgX01fc3RyaW5nYnVmKF9fbW9kZSB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgdGhpcy0+aW5p dCgmX01fc3RyaW5nYnVmKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb3N0cmluZ3N0 cmVhbShjb25zdCBfX3N0cmluZ190eXBlJiBfX3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6Om91dCkKICAgICAgOiBfX29z dHJlYW1fdHlwZShfX251bGwpLCBfTV9zdHJpbmdidWYoX19zdHIsIF9fbW9kZSB8IGlvc19iYXNl OjpvdXQpCiAgICAgIHsgdGhpcy0+aW5pdCgmX01fc3RyaW5nYnVmKTsgfQoKICAgICAgfmJhc2lj X29zdHJpbmdzdHJlYW0oKQogICAgICB7IH0KCgogICAgICBfX3N0cmluZ2J1Zl90eXBlKgogICAg ICByZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19zdHJpbmdidWZfdHlw ZSo+KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICBfX3N0cmluZ190eXBlCiAgICAgIHN0cigpIGNv bnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmluZ2J1Zi5zdHIoKTsgfQoKICAgICAgdm9pZAogICAg ICBzdHIoY29uc3QgX19zdHJpbmdfdHlwZSYgX19zKQogICAgICB7IF9NX3N0cmluZ2J1Zi5zdHIo X19zKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW0gOiBw dWJsaWMgYmFzaWNfaW9zdHJlYW08X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoK ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJh aXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7CgogICAgICB0 eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVk ZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwog ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19z dHJpbmdidWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFyX3R5cGUsIHRy YWl0c190eXBlPiBfX2lvc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19zdHJpbmdi dWZfdHlwZSBfTV9zdHJpbmdidWY7CgogICAgcHVibGljOgoKICAgICAgZXhwbGljaXQKICAgICAg YmFzaWNfc3RyaW5nc3RyZWFtKGlvc19iYXNlOjpvcGVubW9kZSBfX20gPSBpb3NfYmFzZTo6b3V0 IHwgaW9zX2Jhc2U6OmluKQogICAgICA6IF9faW9zdHJlYW1fdHlwZShfX251bGwpLCBfTV9zdHJp bmdidWYoX19tKQogICAgICB7IHRoaXMtPmluaXQoJl9NX3N0cmluZ2J1Zik7IH0KCiAgICAgIGV4 cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZ3N0cmVhbShjb25zdCBfX3N0cmluZ190eXBlJiBfX3N0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX20gPSBpb3Nf YmFzZTo6b3V0IHwgaW9zX2Jhc2U6OmluKQogICAgICA6IF9faW9zdHJlYW1fdHlwZShfX251bGwp LCBfTV9zdHJpbmdidWYoX19zdHIsIF9fbSkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9zdHJpbmdi dWYpOyB9CgogICAgICB+YmFzaWNfc3RyaW5nc3RyZWFtKCkKICAgICAgeyB9CgoKICAgICAgX19z dHJpbmdidWZfdHlwZSoKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9j YXN0PF9fc3RyaW5nYnVmX3R5cGUqPigmX01fc3RyaW5nYnVmKTsgfQoKICAgICAgX19zdHJpbmdf dHlwZQogICAgICBzdHIoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJpbmdidWYuc3RyKCk7 IH0KCiAgICAgIHZvaWQKICAgICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fcykKICAgICAg eyBfTV9zdHJpbmdidWYuc3RyKF9fcyk7IH0KICAgIH07Cn0KCgoKCgojIDEgIi91c3IvaW5jbHVk ZS9jKysvMy4yLjEvYml0cy9zc3RyZWFtLnRjYyIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvYml0cy9zc3RyZWFtLnRjYyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL3Nz dHJlYW0iIDEgMwojIDQxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3N0cmVhbS50Y2Mi IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1Ry YWl0cywgY2xhc3MgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46OgogICAgcGJhY2tmYWlsKGludF90eXBlIF9fYykKICAgIHsKICAgICAg aW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIGJvb2wgX190ZXN0ZW9m ID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5cGU6OmVvZigpKTsKICAg ICAgYm9vbCBfX3Rlc3Rwb3MgPSBfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyOwoK CgogICAgICBpZiAoX190ZXN0cG9zKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cmFpdHNfdHlw ZTo6ZXEodHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpLCB0aGlzLT5ncHRyKClbLTFdKQog ICAgICAgICAgICAgICYmICFfX3Rlc3Rlb2YpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAt LV9NX2luX2N1cjsKICAgICAgICAgICAgICBfX3JldCA9IF9fYzsKICAgICAgICAgICAgfQogICAg ICAgICAgZWxzZSBpZiAoIV9fdGVzdGVvZikKICAgICAgICAgICAgewogICAgICAgICAgICAgIC0t X01faW5fY3VyOwogICAgICAgICAgICAgICpfTV9pbl9jdXIgPSB0cmFpdHNfdHlwZTo6dG9fY2hh cl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgX19yZXQgPSBfX2M7CiAgICAgICAgICAgIH0KICAg ICAgICAgIGVsc2UgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgewogICAgICAgICAgICAgIC0t X01faW5fY3VyOwogICAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19j KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0 ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CiAgICB0 eXBlbmFtZSBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjppbnRfdHlw ZQogICAgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBvdmVy ZmxvdyhpbnRfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5 cGU6OmVvZigpOwogICAgICBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlw ZShfX2MsIF9fcmV0KTsKICAgICAgYm9vbCBfX3Rlc3R3cml0ZSA9IF9NX291dF9jdXIgPCBfTV9i dWYgKyBfTV9idWZfc2l6ZTsKICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9tb2RlICYgaW9zX2Jh c2U6Om91dDsKCgoKICAgICAgaWYgKF9fdGVzdG91dCkKICAgICAgICB7CiAgICAgICAgICBpZiAo IV9fdGVzdGVvZikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbGVu ID0gbWF4KF9NX2J1Zl9zaXplLCBfTV9idWZfc2l6ZV9vcHQpOwogICAgICAgICAgICAgIF9fbGVu ICo9IDI7CgogICAgICAgICAgICAgIGlmIChfX3Rlc3R3cml0ZSkKICAgICAgICAgICAgICAgIF9f cmV0ID0gdGhpcy0+c3B1dGModHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKICAgICAg ICAgICAgICBlbHNlIGlmIChfX2xlbiA8PSBfTV9zdHJpbmcubWF4X3NpemUoKSkKICAgICAgICAg ICAgICAgIHsKCiAgICAgICAgICAgICAgICAgIF9NX3N0cmluZyA9IHRoaXMtPnN0cigpOwogICAg ICAgICAgICAgICAgICBfTV9zdHJpbmcucmVzZXJ2ZShfX2xlbik7CiAgICAgICAgICAgICAgICAg IF9NX2J1Zl9zaXplID0gX19sZW47CiAgICAgICAgICAgICAgICAgIF9NX3JlYWxseV9zeW5jKF9N X2luX2N1ciAtIF9NX2luX2JlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01f b3V0X2N1ciAtIF9NX291dF9iZWcpOwogICAgICAgICAgICAgICAgICAqX01fb3V0X2N1ciA9IHRy YWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgX01fb3V0X2N1 cl9tb3ZlKDEpOwogICAgICAgICAgICAgICAgICBfX3JldCA9IF9fYzsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3JldCA9IHRyYWl0 c190eXBlOjpub3RfZW9mKF9fYyk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9 CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4K ICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnBv c190eXBlCiAgICBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg IHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LCBpb3NfYmFz ZTo6b3Blbm1vZGUgX19tb2RlKQogICAgewogICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBl KG9mZl90eXBlKC0xKSk7CiAgICAgIGJvb2wgX190ZXN0aW4gPSAoaW9zX2Jhc2U6OmluICYgX01f bW9kZSAmIF9fbW9kZSkgIT0gMDsKICAgICAgYm9vbCBfX3Rlc3RvdXQgPSAoaW9zX2Jhc2U6Om91 dCAmIF9NX21vZGUgJiBfX21vZGUpICE9IDA7CiAgICAgIGJvb2wgX190ZXN0Ym90aCA9IF9fdGVz dGluICYmIF9fdGVzdG91dCAmJiBfX3dheSAhPSBpb3NfYmFzZTo6Y3VyOwogICAgICBfX3Rlc3Rp biAmPSAhKF9fbW9kZSAmIGlvc19iYXNlOjpvdXQpOwogICAgICBfX3Rlc3RvdXQgJj0gIShfX21v ZGUgJiBpb3NfYmFzZTo6aW4pOwoKICAgICAgaWYgKF9NX2J1Zl9zaXplICYmIChfX3Rlc3RpbiB8 fCBfX3Rlc3RvdXQgfHwgX190ZXN0Ym90aCkpCiAgICAgICAgewogICAgICAgICAgY2hhcl90eXBl KiBfX2JlZyA9IF9NX2J1ZjsKICAgICAgICAgIGNoYXJfdHlwZSogX19jdXJpID0gX19udWxsOwog ICAgICAgICAgY2hhcl90eXBlKiBfX2N1cm8gPSBfX251bGw7CiAgICAgICAgICBjaGFyX3R5cGUq IF9fZW5kaSA9IF9fbnVsbDsKICAgICAgICAgIGNoYXJfdHlwZSogX19lbmRvID0gX19udWxsOwoK ICAgICAgICAgIGlmIChfX3Rlc3RpbiB8fCBfX3Rlc3Rib3RoKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgX19jdXJpID0gdGhpcy0+Z3B0cigpOwogICAgICAgICAgICAgIF9fZW5kaSA9IHRo aXMtPmVncHRyKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX3Rlc3RvdXQgfHwgX190 ZXN0Ym90aCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fY3VybyA9IHRoaXMtPnBwdHIo KTsKICAgICAgICAgICAgICBfX2VuZG8gPSB0aGlzLT5lcHB0cigpOwogICAgICAgICAgICB9Cgog ICAgICAgICAgb2ZmX3R5cGUgX19uZXdvZmZpID0gMDsKICAgICAgICAgIG9mZl90eXBlIF9fbmV3 b2ZmbyA9IDA7CiAgICAgICAgICBpZiAoX193YXkgPT0gaW9zX2Jhc2U6OmN1cikKICAgICAgICAg ICAgewogICAgICAgICAgICAgIF9fbmV3b2ZmaSA9IF9fY3VyaSAtIF9fYmVnOwogICAgICAgICAg ICAgIF9fbmV3b2ZmbyA9IF9fY3VybyAtIF9fYmVnOwogICAgICAgICAgICB9CiAgICAgICAgICBl bHNlIGlmIChfX3dheSA9PSBpb3NfYmFzZTo6ZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgX19uZXdvZmZpID0gX19lbmRpIC0gX19iZWc7CiAgICAgICAgICAgICAgX19uZXdvZmZvID0g X19lbmRvIC0gX19iZWc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoKF9fdGVzdGluIHx8 IF9fdGVzdGJvdGgpCiAgICAgICAgICAgICAgJiYgX19uZXdvZmZpICsgX19vZmYgPj0gMCAmJiBf X2VuZGkgLSBfX2JlZyA+PSBfX25ld29mZmkgKyBfX29mZikKICAgICAgICAgICAgewogICAgICAg ICAgICAgIF9NX2luX2N1ciA9IF9fYmVnICsgX19uZXdvZmZpICsgX19vZmY7CiAgICAgICAgICAg ICAgX19yZXQgPSBwb3NfdHlwZShfX25ld29mZmkpOwogICAgICAgICAgICB9CiAgICAgICAgICBp ZiAoKF9fdGVzdG91dCB8fCBfX3Rlc3Rib3RoKQogICAgICAgICAgICAgICYmIF9fbmV3b2ZmbyAr IF9fb2ZmID49IDAgJiYgX19lbmRvIC0gX19iZWcgPj0gX19uZXdvZmZvICsgX19vZmYpCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoX19uZXdvZmZvICsgX19vZmYg LSAoX01fb3V0X2N1ciAtIF9fYmVnKSk7CiAgICAgICAgICAgICAgX19yZXQgPSBwb3NfdHlwZShf X25ld29mZm8pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAg ICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxv Yz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OnBvc190eXBlCiAgICBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK ICAgIHNlZWtwb3MocG9zX3R5cGUgX19zcCwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkKICAg IHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOwoKICAgICAg aWYgKF9NX2J1Zl9zaXplKQogICAgICAgIHsKICAgICAgICAgIG9mZl90eXBlIF9fcG9zID0gX19z cDsKICAgICAgICAgIGNoYXJfdHlwZSogX19iZWcgPSBfX251bGw7CiAgICAgICAgICBjaGFyX3R5 cGUqIF9fZW5kID0gX19udWxsOwogICAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IChpb3NfYmFzZTo6 aW4gJiBfTV9tb2RlICYgX19tb2RlKSAhPSAwOwogICAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSAo aW9zX2Jhc2U6Om91dCAmIF9NX21vZGUgJiBfX21vZGUpICE9IDA7CiAgICAgICAgICBib29sIF9f dGVzdGJvdGggPSBfX3Rlc3RpbiAmJiBfX3Rlc3RvdXQ7CiAgICAgICAgICBfX3Rlc3RpbiAmPSAh KF9fbW9kZSAmIGlvc19iYXNlOjpvdXQpOwogICAgICAgICAgX190ZXN0b3V0ICY9ICEoX19tb2Rl ICYgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgYm9vbCBfX3Rlc3Rwb3NpID0gZmFsc2U7CiAg ICAgICAgICBib29sIF9fdGVzdHBvc28gPSBmYWxzZTsKICAgICAgICAgIGlmIChfX3Rlc3RpbiB8 fCBfX3Rlc3Rib3RoKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19iZWcgPSB0aGlzLT5l YmFjaygpOwogICAgICAgICAgICAgIF9fZW5kID0gdGhpcy0+ZWdwdHIoKTsKICAgICAgICAgICAg ICBpZiAoMCA8PSBfX3BvcyAmJiBfX3BvcyA8PSBfX2VuZCAtIF9fYmVnKQogICAgICAgICAgICAg ICAgX190ZXN0cG9zaSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX3Rlc3Rv dXQgfHwgX190ZXN0Ym90aCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fYmVnID0gdGhp cy0+cGJhc2UoKTsKICAgICAgICAgICAgICBfX2VuZCA9IF9NX2J1ZiArIF9NX2J1Zl9zaXplOwog ICAgICAgICAgICAgIGlmICgwIDw9IF9fcG9zICYmIF9fcG9zIDw9IF9fZW5kIC0gX19iZWcpCiAg ICAgICAgICAgICAgICBfX3Rlc3Rwb3NvID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAg aWYgKF9fdGVzdHBvc2kgfHwgX190ZXN0cG9zbykKICAgICAgICAgICAgewogICAgICAgICAgICAg IGlmIChfX3Rlc3Rwb3NpKQogICAgICAgICAgICAgICAgX01faW5fY3VyID0gX01faW5fYmVnICsg X19wb3M7CiAgICAgICAgICAgICAgaWYgKF9fdGVzdHBvc28pCiAgICAgICAgICAgICAgICBfTV9v dXRfY3VyX21vdmUoKF9fcG9zKSAtIChfTV9vdXRfY3VyIC0gX19iZWcpKTsKICAgICAgICAgICAg ICBfX3JldCA9IHBvc190eXBlKG9mZl90eXBlKF9fcG9zKSk7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz IGJhc2ljX3N0cmluZ2J1ZjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaXN0 cmluZ3N0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmluZ3N0 cmVhbTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtPGNo YXI+OwoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmluZ2J1Zjx3Y2hhcl90PjsK ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTx3Y2hhcl90PjsKICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PjsKICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFyX3Q+OwoKfQojIDM2OSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9zc3RyZWFtIiAyIDMKIyA2ICJQcm9qZWN0VXRpbHMvTG9n TWFuYWdlci9Mb2dNYW5hZ2VyLmgiIDIKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3 YXJlLWxpbnV4LzMuMi4xL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDExMCAiL3Vzci9saWIvZ2Nj LWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8zLjIuMS9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVk ZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyA3ICJQcm9qZWN0VXRpbHMvTG9nTWFuYWdlci9M b2dNYW5hZ2VyLmgiIDIKCgoKCgp0eXBlZGVmIHN0cnVjdCBMb2dTdHJ1Y3QgewogICAgc3RkOjpv c3RyZWFtICpzdHJlYW07CiAgICBzdGQ6OnN0cmluZyBwcmVmaXg7CiAgICBzdGQ6OnN0cmluZyBm aWxlbmFtZTsKICAgIGJvb2wgZmx1c2g7CiAgICBib29sIGFjdGl2ZTsKfSBMb2dTdHJ1Y3Q7Cgp0 eXBlZGVmIFN0cmluZ0hhc2h0YWJsZTxMb2dTdHJ1Y3QqPiBPdXRIYXNodGFibGU7CnR5cGVkZWYg TGlzdDxMb2dTdHJ1Y3QqPiBMb2dMaXN0Owp0eXBlZGVmIExpc3ROb2RlPExvZ1N0cnVjdCo+IExv Z0xpc3ROb2RlOwoKY2xhc3MgX19Mb2dNbmdyIDogcHVibGljIFNpbmdsZXRvbjxfX0xvZ01uZ3I+ CnsKICAgIHByaXZhdGU6CiAgICAgICAgc3RkOjpzdHJpbmcgbG9nRmlsZVBhdGg7CgogICAgICAg IE91dEhhc2h0YWJsZSB0YWJsZTsKICAgICAgICBMb2dMaXN0IGxpc3Q7CgogICAgICAgIGludCBj aGVja0xvZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcgJnByZSwK ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGUsIGNvbnN0IGJvb2wgJmYpOwog ICAgICAgIHZvaWQgbmV3TG9nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBjb25zdCBzdGQ6OnN0 cmluZyAmcCwKICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSAqc3RyLCBjb25zdCBib29sICZm KTsKICAgICAgICB2b2lkIGZyZWVMb2coY29uc3QgTG9nU3RydWN0ICpsb2cpOwoKICAgIHB1Ymxp YzoKICAgICAgICBfX0xvZ01uZ3IoY29uc3Qgc3RkOjpzdHJpbmcgJnBhdGgsIGNvbnN0IGJvb2wg ZW91dCwgY29uc3QgYm9vbCB3b3V0KTsKICAgICAgICB+X19Mb2dNbmdyKCk7CgogICAgICAgIHZv aWQgbmV3RmlsZUxvZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcg JnByZSwKICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgJmYsIGNvbnN0IHN0ZDo6c3RyaW5nICZm aWxlbmFtZSk7CiAgICAgICAgdm9pZCBuZXdPdXRMb2coY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUs IGNvbnN0IHN0ZDo6c3RyaW5nICZwcmUsCiAgICAgICAgICAgICAgICBjb25zdCBib29sICZmKTsK ICAgICAgICB2b2lkIG5ld0VyckxvZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgY29uc3Qgc3Rk OjpzdHJpbmcgJnByZSwKICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgJmYpOwoKICAgICAgICB2 b2lkIG1lc3NhZ2UoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIGNvbnN0IGNoYXIgKmZpbGUsCiAg ICAgICAgICAgICAgICBjb25zdCBpbnQgJmxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uICk7Cgog ICAgICAgIHZvaWQgbWVzc2FnZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgY29uc3QgY2hhciAq ZmlsZSwKICAgICAgICAgICAgICAgIGNvbnN0IGludCAmbGluZSwgY29uc3QgY2hhciAqZm10LCB2 YV9saXN0ICphcCApOwoKICAgICAgICB2b2lkIGRlYWN0aXZhdGUoY29uc3Qgc3RkOjpzdHJpbmcg Jm5hbWUpOwogICAgICAgIHZvaWQgYWN0aXZhdGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOwp9 OwojIDcgIlRyZWVUYWJsZS5oIiAyCiMgMjEgIlRyZWVUYWJsZS5oIgp0ZW1wbGF0ZSA8Y2xhc3Mg RGF0YVR5cGU+IGNsYXNzIFRyZWVUYWJsZQp7CiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgY29uc3Qg c3RhdGljIHVpbnQzMl90IEJVQ0tFVF9TSVpFOwogICAgICAgIGNvbnN0IHN0YXRpYyB1aW50MzJf dCBCVUNLRVRfTlVNX0JJVFM7CiAgICAgICAgY29uc3Qgc3RhdGljIHVpbnQzMl90IEJVQ0tFVF9O VU1fT0ZGU0VUOwogICAgICAgIGNvbnN0IHN0YXRpYyB1aW50MzJfdCBCVUNLRVRfTlVNX01BU0s7 CiAgICAgICAgY29uc3Qgc3RhdGljIHVpbnQzMl90IEJVQ0tFVF9OVU1fTUFTS19DT01QOwoKICAg ICAgICBjb25zdCBzdGF0aWMgdWludDMyX3QgQlVDS0VUX0xFVkVMX0JJVFM7CiAgICAgICAgY29u c3Qgc3RhdGljIHVpbnQzMl90IEJVQ0tFVF9MRVZFTF9PRkZTRVQ7CiAgICAgICAgY29uc3Qgc3Rh dGljIHVpbnQzMl90IEJVQ0tFVF9MRVZFTF9NQVNLOwogICAgICAgIGNvbnN0IHN0YXRpYyB1aW50 MzJfdCBCVUNLRVRfTEVWRUxfTUFTS19DT01QOwoKICAgICAgICBjb25zdCBzdGF0aWMgdWludDMy X3QgSVNfQV9CVUNLRVRfQklUUzsKICAgICAgICBjb25zdCBzdGF0aWMgdWludDMyX3QgSVNfQV9C VUNLRVRfT0ZGU0VUOwogICAgICAgIGNvbnN0IHN0YXRpYyB1aW50MzJfdCBJU19BX0JVQ0tFVF9N QVNLOwogICAgICAgIGNvbnN0IHN0YXRpYyB1aW50MzJfdCBJU19BX0JVQ0tFVF9NQVNLX0NPTVA7 CgogICAgICAgIGNvbnN0IHN0YXRpYyB1aW50MzJfdCBHUk9XVEhfU0laRTsKICAgICAgICBjb25z dCBzdGF0aWMgdWludDMyX3QgR1JPV1RIX1NJWkVfQklUUzsKCiAgICAgICAgY29uc3Qgc3RhdGlj IHVpbnQzMl90IERBVEFfT0ZGU0VUOwogICAgICAgIGNvbnN0IHN0YXRpYyB1aW50MzJfdCBIQVNI X09GRlNFVDsKICAgICAgICBjb25zdCBzdGF0aWMgdWludDMyX3QgTk9UX0ZPVU5EOwoKICAgICAg ICB1aW50MzJfdCAqdHJlZTsKICAgICAgICB1aW50MzJfdCBudW1iZXJPZkVsZW1lbnRzOwoKICAg ICAgICB1aW50MzJfdCAqcGFyZW50TGV2ZWxzWyAoNCo4KS9HUk9XVEhfU0laRV9CSVRTIF07CiAg ICAgICAgdWludDMyX3QgcGFyZW50RGVwdGg7CgogICAgICAgIHN0YXRpYyB1aW50MzJfdCAqbmV3 QnVja2V0KCApOwogICAgICAgIHN0YXRpYyBib29sIGlzQUJ1Y2tldCggdWludDMyX3QgKiBjb25z dCAmYnVja2V0ICk7CgogICAgICAgIHN0YXRpYyB1aW50MzJfdCBnZXRCdWNrZXROdW0oIHVpbnQz Ml90ICogY29uc3QgJmJ1Y2tldCApOwogICAgICAgIHN0YXRpYyB2b2lkIHNldEJ1Y2tldE51bSgg dWludDMyX3QgKiBjb25zdCAmYnVja2V0LCBjb25zdCB1aW50MzJfdCBuICk7CiAgICAgICAgc3Rh dGljIHZvaWQgaW5jQnVja2V0TnVtKCB1aW50MzJfdCAqIGNvbnN0ICZidWNrZXQgKTsKICAgICAg ICBzdGF0aWMgdm9pZCBkZWNCdWNrZXROdW0oIHVpbnQzMl90ICogY29uc3QgJmJ1Y2tldCApOwoK ICAgICAgICBzdGF0aWMgdWludDMyX3QgZ2V0QnVja2V0TGV2ZWwoIHVpbnQzMl90ICogY29uc3Qg JmJ1Y2tldCApOwogICAgICAgIHN0YXRpYyB2b2lkIHNldEJ1Y2tldExldmVsKCB1aW50MzJfdCAq IGNvbnN0ICZidWNrZXQsIGNvbnN0IHVpbnQzMl90IGwgKTsKICAgICAgICBzdGF0aWMgdm9pZCBp bmNCdWNrZXRMZXZlbCggdWludDMyX3QgKiBjb25zdCAmYnVja2V0ICk7CiAgICAgICAgc3RhdGlj IHZvaWQgZGVjQnVja2V0TGV2ZWwoIHVpbnQzMl90ICogY29uc3QgJmJ1Y2tldCApOwoKICAgICAg ICBzdGF0aWMgdm9pZCAqZ2V0RGF0YUZyb21CdWNrZXQoIHVpbnQzMl90ICogY29uc3QgJmJ1Y2tl dCwgY29uc3QgdWludDMyX3QgJmkgKTsKICAgICAgICBzdGF0aWMgdWludDMyX3QgZ2V0S2V5RnJv bUJ1Y2tldCggdWludDMyX3QgKiBjb25zdCAmYnVja2V0LCBjb25zdCB1aW50MzJfdCAmaSApOwog ICAgICAgIHN0YXRpYyB2b2lkIGFkZERhdGFUb0J1Y2tldCggdWludDMyX3QgKiAmYnVja2V0LCBj b25zdCB1aW50MzJfdCAma2V5LCB2b2lkICogY29uc3QgJmQgKTsKICAgICAgICBzdGF0aWMgdm9p ZCByZW1vdmVGcm9tQnVja2V0KCB1aW50MzJfdCAqICZidWNrZXQsIGNvbnN0IHVpbnQzMl90ICZp ICk7CiAgICAgICAgc3RhdGljIHVpbnQzMl90IHNlYXJjaEJ1Y2tldCggdWludDMyX3QgKiBjb25z dCAmYnVja2V0LCBjb25zdCB1aW50MzJfdCAmaGFzaCApOwogICAgICAgIHN0YXRpYyB1aW50MzJf dCBzZWFyY2hOZXh0QnVja2V0KCB1aW50MzJfdCAqIGNvbnN0ICZidWNrZXQsIGNvbnN0IHVpbnQz Ml90ICZpLCBjb25zdCB1aW50MzJfdCAmaGFzaCApOwoKICAgICAgICB2b2lkIGFkZExldmVsKCB1 aW50MzJfdCAqIGNvbnN0ICZidWNrZXQgKQogICAgICAgIHsKICAgICAgICAgICAgcGFyZW50TGV2 ZWxzW3BhcmVudERlcHRoXSA9IGJ1Y2tldDsKICAgICAgICAgICAgcGFyZW50RGVwdGgrKzsKICAg ICAgICB9CgogICAgICAgIHZvaWQgY2xlYXJMZXZlbHMoKQogICAgICAgIHsKICAgICAgICAgICAg cGFyZW50RGVwdGggPSAwOwogICAgICAgIH0KCiAgICAgICAgdWludDMyX3QgKmZpbmRCdWNrZXQo IGNvbnN0IHVpbnQzMl90ICZoYXNoICkgY29uc3Q7CgogICAgcHVibGljOgogICAgICAgIFRyZWVU YWJsZSgpOwogICAgICAgIH5UcmVlVGFibGUoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBEYXRhVHlw ZT4gY29uc3QgdWludDMyX3QgVHJlZVRhYmxlPERhdGFUeXBlPjo6QlVDS0VUX1NJWkUgPSAzMDsK dGVtcGxhdGUgPGNsYXNzIERhdGFUeXBlPiBjb25zdCB1aW50MzJfdCBUcmVlVGFibGU8RGF0YVR5 cGU+OjpCVUNLRVRfTlVNX0JJVFMgPSA1Owp0ZW1wbGF0ZSA8Y2xhc3MgRGF0YVR5cGU+IGNvbnN0 IHVpbnQzMl90IFRyZWVUYWJsZTxEYXRhVHlwZT46OkJVQ0tFVF9OVU1fT0ZGU0VUID0gMDsKdGVt cGxhdGUgPGNsYXNzIERhdGFUeXBlPiBjb25zdCB1aW50MzJfdCBUcmVlVGFibGU8RGF0YVR5cGU+ OjpCVUNLRVRfTlVNX01BU0sgPSAoICgoMTw8VHJlZVRhYmxlOjpCVUNLRVRfTlVNX0JJVFMpLTEp IDw8IFRyZWVUYWJsZTo6QlVDS0VUX05VTV9PRkZTRVQgKTsKdGVtcGxhdGUgPGNsYXNzIERhdGFU eXBlPiBjb25zdCB1aW50MzJfdCBUcmVlVGFibGU8RGF0YVR5cGU+OjpCVUNLRVRfTlVNX01BU0tf Q09NUCA9ICh+VHJlZVRhYmxlOjpCVUNLRVRfTlVNX01BU0spOwoKdGVtcGxhdGUgPGNsYXNzIERh dGFUeXBlPiBjb25zdCB1aW50MzJfdCBUcmVlVGFibGU8RGF0YVR5cGU+OjpCVUNLRVRfTEVWRUxf QklUUyA9IDQ7CnRlbXBsYXRlIDxjbGFzcyBEYXRhVHlwZT4gY29uc3QgdWludDMyX3QgVHJlZVRh YmxlPERhdGFUeXBlPjo6QlVDS0VUX0xFVkVMX09GRlNFVCA9IFRyZWVUYWJsZTo6QlVDS0VUX05V TV9CSVRTOwp0ZW1wbGF0ZSA8Y2xhc3MgRGF0YVR5cGU+IGNvbnN0IHVpbnQzMl90IFRyZWVUYWJs ZTxEYXRhVHlwZT46OkJVQ0tFVF9MRVZFTF9NQVNLID0gKCAoKDE8PFRyZWVUYWJsZTo6QlVDS0VU X0xFVkVMX0JJVFMpLTEpIDw8IFRyZWVUYWJsZTo6QlVDS0VUX0xFVkVMX09GRlNFVCApOwp0ZW1w bGF0ZSA8Y2xhc3MgRGF0YVR5cGU+IGNvbnN0IHVpbnQzMl90IFRyZWVUYWJsZTxEYXRhVHlwZT46 OkJVQ0tFVF9MRVZFTF9NQVNLX0NPTVAgPSAoflRyZWVUYWJsZTo6QlVDS0VUX0xFVkVMX01BU0sp OwoKdGVtcGxhdGUgPGNsYXNzIERhdGFUeXBlPiBjb25zdCB1aW50MzJfdCBUcmVlVGFibGU8RGF0 YVR5cGU+OjpJU19BX0JVQ0tFVF9CSVRTID0gMTsKdGVtcGxhdGUgPGNsYXNzIERhdGFUeXBlPiBj b25zdCB1aW50MzJfdCBUcmVlVGFibGU8RGF0YVR5cGU+OjpJU19BX0JVQ0tFVF9PRkZTRVQgPSBU cmVlVGFibGU6OkJVQ0tFVF9MRVZFTF9PRkZTRVQrVHJlZVRhYmxlOjpCVUNLRVRfTEVWRUxfQklU UzsKdGVtcGxhdGUgPGNsYXNzIERhdGFUeXBlPiBjb25zdCB1aW50MzJfdCBUcmVlVGFibGU8RGF0 YVR5cGU+OjpJU19BX0JVQ0tFVF9NQVNLID0gKCAxIDw8IFRyZWVUYWJsZTo6SVNfQV9CVUNLRVRf T0ZGU0VUICk7CnRlbXBsYXRlIDxjbGFzcyBEYXRhVHlwZT4gY29uc3QgdWludDMyX3QgVHJlZVRh YmxlPERhdGFUeXBlPjo6SVNfQV9CVUNLRVRfTUFTS19DT01QID0gKH5UcmVlVGFibGU6OklTX0Ff QlVDS0VUX01BU0spOwoKdGVtcGxhdGUgPGNsYXNzIERhdGFUeXBlPiBjb25zdCB1aW50MzJfdCBU cmVlVGFibGU8RGF0YVR5cGU+OjpIQVNIX09GRlNFVCA9IDE7CnRlbXBsYXRlIDxjbGFzcyBEYXRh VHlwZT4gY29uc3QgdWludDMyX3QgVHJlZVRhYmxlPERhdGFUeXBlPjo6REFUQV9PRkZTRVQgPSAx K1RyZWVUYWJsZTo6QlVDS0VUX1NJWkU7CnRlbXBsYXRlIDxjbGFzcyBEYXRhVHlwZT4gY29uc3Qg dWludDMyX3QgVHJlZVRhYmxlPERhdGFUeXBlPjo6Tk9UX0ZPVU5EID0gVHJlZVRhYmxlOjpCVUNL RVRfU0laRSsxOwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBEYXRhVHlwZT4gdWludDMyX3QgKlRyZWVU YWJsZTxEYXRhVHlwZT46Om5ld0J1Y2tldCgpCnsKCiAgICByZXR1cm4gbmV3IHVpbnQzMl90WyAx K0JVQ0tFVF9TSVpFK0JVQ0tFVF9TSVpFIF07Cn0KCnRlbXBsYXRlIDxjbGFzcyBEYXRhVHlwZT4g dWludDMyX3QgVHJlZVRhYmxlPERhdGFUeXBlPjo6Z2V0QnVja2V0TnVtKCB1aW50MzJfdCAqIGNv bnN0ICZidWNrZXQgKQp7CiAgICByZXR1cm4gKCBidWNrZXRbMF0gJiBCVUNLRVRfTlVNX01BU0sg KSA+PiBCVUNLRVRfTEVWRUxfT0ZGU0VUOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRGF0YVR5cGU+IHZv aWQgVHJlZVRhYmxlPERhdGFUeXBlPjo6c2V0QnVja2V0TnVtKCB1aW50MzJfdCAqIGNvbnN0ICZi dWNrZXQsIGNvbnN0IHVpbnQzMl90IG51bSApCnsKICAgIGJ1Y2tldFswXSA9ICggYnVja2V0WzBd ICYgQlVDS0VUX05VTV9NQVNLX0NPTVAgKSB8ICggbnVtIDw8IEJVQ0tFVF9OVU1fT0ZGU0VUICk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBEYXRhVHlwZT4gdm9pZCBUcmVlVGFibGU8RGF0YVR5cGU+Ojpp bmNCdWNrZXROdW0oIHVpbnQzMl90ICogY29uc3QgJmJ1Y2tldCApCnsKICAgIGJ1Y2tldFswXSAr PSAxIDw8IEJVQ0tFVF9OVU1fT0ZGU0VUOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRGF0YVR5cGU+IHZv aWQgVHJlZVRhYmxlPERhdGFUeXBlPjo6ZGVjQnVja2V0TnVtKCB1aW50MzJfdCAqIGNvbnN0ICZi dWNrZXQgKQp7CiAgICBidWNrZXRbMF0gLT0gMSA8PCBCVUNLRVRfTlVNX09GRlNFVDsKfQoKdGVt cGxhdGUgPGNsYXNzIERhdGFUeXBlPiB1aW50MzJfdCBUcmVlVGFibGU8RGF0YVR5cGU+OjpnZXRC dWNrZXRMZXZlbCggdWludDMyX3QgKiBjb25zdCAmYnVja2V0ICkKewogICAgcmV0dXJuICggYnVj a2V0WzBdICYgQlVDS0VUX0xFVkVMX01BU0sgKSA+PiBCVUNLRVRfTEVWRUxfT0ZGU0VUOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgRGF0YVR5cGU+IHZvaWQgVHJlZVRhYmxlPERhdGFUeXBlPjo6c2V0QnVj a2V0TGV2ZWwoIHVpbnQzMl90ICogY29uc3QgJmJ1Y2tldCwgY29uc3QgdWludDMyX3QgbnVtICkK ewogICAgYnVja2V0WzBdID0gKCBidWNrZXRbMF0gJiBCVUNLRVRfTEVWRUxfTUFTS19DT01QICkg fCAoIG51bSA8PCBCVUNLRVRfTEVWRUxfT0ZGU0VUICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBEYXRh VHlwZT4gdm9pZCBUcmVlVGFibGU8RGF0YVR5cGU+OjppbmNCdWNrZXRMZXZlbCggdWludDMyX3Qg KiBjb25zdCAmYnVja2V0ICkKewogICAgYnVja2V0WzBdICs9IDEgPDwgQlVDS0VUX0xFVkVMX09G RlNFVDsKfQoKdGVtcGxhdGUgPGNsYXNzIERhdGFUeXBlPiB2b2lkIFRyZWVUYWJsZTxEYXRhVHlw ZT46OmRlY0J1Y2tldExldmVsKCB1aW50MzJfdCAqIGNvbnN0ICZidWNrZXQgKQp7CiAgICBidWNr ZXRbMF0gLT0gMSA8PCBCVUNLRVRfTEVWRUxfT0ZGU0VUOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRGF0 YVR5cGU+IGJvb2wgVHJlZVRhYmxlPERhdGFUeXBlPjo6aXNBQnVja2V0KCB1aW50MzJfdCAqIGNv bnN0ICZidWNrZXQgKQp7CiAgICByZXR1cm4gKCBidWNrZXRbMF0gJiBJU19BX0JVQ0tFVF9NQVNL ICkgIT0gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIERhdGFUeXBlPiB2b2lkICpUcmVlVGFibGU8RGF0 YVR5cGU+OjpnZXREYXRhRnJvbUJ1Y2tldCggdWludDMyX3QgKiBjb25zdCAmYnVja2V0LCBjb25z dCB1aW50MzJfdCAmaSApCnsKICAgIHJldHVybiBidWNrZXRbIGkgKyBEQVRBX09GRlNFVCBdOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgRGF0YVR5cGU+IHVpbnQzMl90IFRyZWVUYWJsZTxEYXRhVHlwZT46 OmdldEtleUZyb21CdWNrZXQoIHVpbnQzMl90ICogY29uc3QgJmJ1Y2tldCwgY29uc3QgdWludDMy X3QgJmkgKQp7CiAgICByZXR1cm4gYnVja2V0WyBpICsgSEFTSF9PRkZTRVQgXTsKfQoKdGVtcGxh dGUgPGNsYXNzIERhdGFUeXBlPiB2b2lkIFRyZWVUYWJsZTxEYXRhVHlwZT46OmFkZERhdGFUb0J1 Y2tldCggdWludDMyX3QgKiAmYnVja2V0LCBjb25zdCB1aW50MzJfdCAma2V5LCB2b2lkICogY29u c3QgJmQgKQp7CiAgICBidWNrZXRbIGkrIERBVEFfT0ZGU0VUIF07Cn0KCnRlbXBsYXRlIDxjbGFz cyBEYXRhVHlwZT4gdm9pZCBUcmVlVGFibGU8RGF0YVR5cGU+OjpyZW1vdmVGcm9tQnVja2V0KCB1 aW50MzJfdCAqICZidWNrZXQsIGNvbnN0IHVpbnQzMl90ICZpICkKewogICAgdWludDMyX3QgbnVt OwoKICAgIG51bSA9IGdldEJ1Y2tldE51bSggYnVja2V0ICk7CgogICAgaWYgKCBudW0gPiAxICkK ICAgIHsKICAgICAgICBidWNrZXRbIGkrSEFTSF9PRkZTRVQgXSA9IGJ1Y2tldFsgbnVtK0hBU0hf T0ZGU0VUIF07CiAgICAgICAgYnVja2V0WyBpK0RBVEFfT0ZGU0VUIF0gPSBidWNrZXRbIG51bStE QVRBX09GRlNFVCBdOwogICAgfQoKICAgIGRlY0J1Y2tldE51bSggYnVja2V0ICk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBEYXRhVHlwZT4gdWludDMyX3QgVHJlZVRhYmxlPERhdGFUeXBlPjo6c2VhcmNo QnVja2V0KCB1aW50MzJfdCAqIGNvbnN0ICZidWNrZXQsIGNvbnN0IHVpbnQzMl90ICZoYXNoICkK ewogICAgdWludDMyX3QgbnVtLCBpOwoKICAgIG51bSA9IGdldEJ1Y2tldE51bSggYnVja2V0ICk7 CgogICAgZm9yICggaSA9IEhBU0hfT0ZGU0VUOyBpIDwgbnVtK0hBU0hfT0ZGU0VUOyBpKysgKQog ICAgewogICAgICAgIGlmICggYnVja2V0WyBpIF0gPT0gaGFzaCApCiAgICAgICAgewogICAgICAg ICAgICByZXR1cm4gaS1IQVNIX09GRlNFVDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIE5P VF9GT1VORDsKfQoKdGVtcGxhdGUgPGNsYXNzIERhdGFUeXBlPiB1aW50MzJfdCBUcmVlVGFibGU8 RGF0YVR5cGU+OjpzZWFyY2hOZXh0QnVja2V0KCB1aW50MzJfdCAqIGNvbnN0ICZidWNrZXQsIGNv bnN0IHVpbnQzMl90ICZpbml0LCBjb25zdCB1aW50MzJfdCAmaGFzaCApCnsKICAgIHVpbnQzMl90 IG51bSwgaTsKCiAgICBudW0gPSBnZXRCdWNrZXROdW0oIGJ1Y2tldCApOwoKICAgIGZvciAoIGkg PSBpbml0K0hBU0hfT0ZGU0VUOyBpIDwgbnVtK0hBU0hfT0ZGU0VUOyBpKysgKQogICAgewogICAg ICAgIGlmICggYnVja2V0WyBpIF0gPT0gaGFzaCApCiAgICAgICAgewogICAgICAgICAgICByZXR1 cm4gaS1IQVNIX09GRlNFVDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIE5PVF9GT1VORDsK fQoKdGVtcGxhdGUgPGNsYXNzIERhdGFUeXBlPiB1aW50MzJfdCAqVHJlZVRhYmxlPERhdGFUeXBl Pjo6ZmluZEJ1Y2tldCggY29uc3QgdWludDMyX3QgJmhhc2ggKSBjb25zdAp7CiAgICBpZiAoIGlz QUJ1Y2tldCggdHJlZSApICkKICAgIHsKICAgICAgICByZXR1cm4gdHJlZTsKICAgIH0KCiAgICBy ZXR1cm4gX19udWxsOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRGF0YVR5cGU+IFRyZWVUYWJsZTxEYXRh VHlwZT46OlRyZWVUYWJsZSgpCnsKCgoKCn0KIyAzICJtYWluLmNjIiAyCgojIDEgIlByb2plY3RV dGlscy9pbml0LmgiIDEKCgoKdm9pZCBpbml0UHJvamVjdFV0aWxzU2luZ2xldG9ucygpOwp2b2lk IGRlc3Ryb3lQcm9qZWN0VXRpbHNTaW5nbGV0b25zKCk7CiMgNSAibWFpbi5jYyIgMgoKCnR5cGVk ZWYgVHJlZVRhYmxlPGludD4gSW50VGFibGU7CgppbnQgbWFpbiggdm9pZCApCnsKICAgIEludFRh YmxlICp0OwoKICAgIGluaXRQcm9qZWN0VXRpbHNTaW5nbGV0b25zKCk7CgogICAgdCA9IG5ldyBJ bnRUYWJsZSgpOwoKICAgIHJldHVybiAwOwp9Cg==