From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31104 invoked by alias); 13 Mar 2003 19:56:02 -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 31050 invoked by uid 71); 13 Mar 2003 19:56:01 -0000 Resent-Date: 13 Mar 2003 19:56:01 -0000 Resent-Message-ID: <20030313195601.31049.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, brian.r.landy@wellsfargo.com Received: (qmail 8607 invoked by uid 48); 13 Mar 2003 19:52:17 -0000 Message-Id: <20030313195217.8606.qmail@sources.redhat.com> Date: Thu, 13 Mar 2003 19:56:00 -0000 From: brian.r.landy@wellsfargo.com Reply-To: brian.r.landy@wellsfargo.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: libstdc++/10064: crash when using valarray's operator= X-SW-Source: 2003-03/txt/msg00779.txt.bz2 List-Id: >Number: 10064 >Category: libstdc++ >Synopsis: crash when using valarray's operator= >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Thu Mar 13 19:56:01 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Brian Landy >Release: gcc version 3.2 >Organization: >Environment: AIX 4.3, cygwin, ... >Description: There is a bug in the dfinition of: valarray<_Tp>::operator= (const valarray<_Tp>& __v) The target valarray is not resized to match the size of the source valarray before copying. Then, the size of the target valarray is used to determine what elements to copy. This means the assignment always succeeds, but (assuming the target valarray has size==0) any attempt to access the target valarray causes a crash. >How-To-Repeat: I've attached a .ii that reproduces the problem. >Fix: This patch (to include/c++/3.2/valarray) resolves the problem: --- valarray.old 2002-08-19 11:18:44.000000000 -0500 +++ valarray 2003-01-10 09:29:48.000000000 -0600 @@ -336,6 +336,9 @@ inline valarray<_Tp>& valarray<_Tp>::operator= (const valarray<_Tp>& __v) { + if (this == &__v) + return *this; + resize(__v._M_size); __valarray_copy(__v._M_data, _M_size, _M_data); return *this; } >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="valarrtest.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="valarrtest.ii" IyAxICJ2YWxhcnJ0ZXN0LmNwcCINCiMgMSAiPGJ1aWx0LWluPiINCiMgMSAiPGNvbW1hbmQgbGlu ZT4iDQojIDEgInZhbGFycnRlc3QuY3BwIg0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi92YWxh cnJheSIgMSAzDQojIDQyICIvdXNyL2luY2x1ZGUvYysrLzMuMi92YWxhcnJheSIgMw0KDQojIDEg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtY3lnd2luL2JpdHMvYysrY29uZmlnLmgiIDEg Mw0KIyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3aW4vYml0cy9jKytjb25m aWcuaCIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWN5Z3dpbi9iaXRzL29z X2RlZmluZXMuaCIgMSAzDQojIDM1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWN5Z3dp bi9iaXRzL2MrK2NvbmZpZy5oIiAyIDMNCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL3ZhbGFy cmF5IiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGRlZiIgMSAzDQojIDQ3ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkZGVmIiAzDQoNCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p Njg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzDQojIDE0OSAiL3Vzci9saWIv Z2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMw0KdHlwZWRlZiBp bnQgcHRyZGlmZl90Ow0KIyAyMDMgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy4y L2luY2x1ZGUvc3RkZGVmLmgiIDMNCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsNCiMgNDkg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRkZWYiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQog IHVzaW5nIDo6cHRyZGlmZl90Ow0KICB1c2luZyA6OnNpemVfdDsNCn0NCiMgNDUgIi91c3IvaW5j bHVkZS9jKysvMy4yL3ZhbGFycmF5IiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21h dGgiIDEgMw0KIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMNCg0KDQoNCiMgMSAi L3Vzci9pbmNsdWRlL21hdGguaCIgMSAzDQoNCg0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lz L3JlZW50LmgiIDEgMw0KIyA5ICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMNCmV4dGVybiAi QyIgew0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvX2Fuc2kuaCIgMSAzDQojIDE1ICIvdXNyL2lu Y2x1ZGUvX2Fuc2kuaCIgMw0KIyAxICIvdXNyL2luY2x1ZGUvbmV3bGliLmgiIDEgMw0KIyAxNiAi L3Vzci9pbmNsdWRlL19hbnNpLmgiIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NvbmZpZy5o IiAxIDMNCg0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL21hY2hpbmUvaWVlZWZwLmgiIDEgMw0KIyA1 ICIvdXNyL2luY2x1ZGUvc3lzL2NvbmZpZy5oIiAyIDMNCiMgMTcgIi91c3IvaW5jbHVkZS9fYW5z aS5oIiAyIDMNCiMgMTQgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMiAzDQojIDEgIi91c3Iv aW5jbHVkZS9zeXMvX3R5cGVzLmgiIDEgMw0KIyAxMiAiL3Vzci9pbmNsdWRlL3N5cy9fdHlwZXMu aCIgMw0KdHlwZWRlZiBsb25nIF9vZmZfdDsNCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxv bmcgX29mZjY0X3Q7DQoNCg0KdHlwZWRlZiBpbnQgX3NzaXplX3Q7DQoNCg0KDQoNCg0KIyAxICIv dXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMN CiMgMzIzICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGRl Zi5oIiAzDQp0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7DQojIDIzICIvdXNyL2luY2x1ZGUv c3lzL190eXBlcy5oIiAyIDMNCg0KDQp0eXBlZGVmIHN0cnVjdA0Kew0KICBpbnQgX19jb3VudDsN CiAgdW5pb24NCiAgew0KICAgIHdpbnRfdCBfX3djaDsNCiAgICB1bnNpZ25lZCBjaGFyIF9fd2No Yls0XTsNCiAgfSBfX3ZhbHVlOw0KfSBfbWJzdGF0ZV90Ow0KDQp0eXBlZGVmIGludCBfZmxvY2tf dDsNCiMgMTUgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMiAzDQoNCg0KDQoNCnR5cGVkZWYg dW5zaWduZWQgbG9uZyBfX1VMb25nOw0KIyA0MCAiL3Vzci9pbmNsdWRlL3N5cy9yZWVudC5oIiAz DQpzdHJ1Y3QgX0JpZ2ludA0Kew0KICBzdHJ1Y3QgX0JpZ2ludCAqX25leHQ7DQogIGludCBfaywg X21heHdkcywgX3NpZ24sIF93ZHM7DQogIF9fVUxvbmcgX3hbMV07DQp9Ow0KDQoNCnN0cnVjdCBf X3RtDQp7DQogIGludCBfX3RtX3NlYzsNCiAgaW50IF9fdG1fbWluOw0KICBpbnQgX190bV9ob3Vy Ow0KICBpbnQgX190bV9tZGF5Ow0KICBpbnQgX190bV9tb247DQogIGludCBfX3RtX3llYXI7DQog IGludCBfX3RtX3dkYXk7DQogIGludCBfX3RtX3lkYXk7DQogIGludCBfX3RtX2lzZHN0Ow0KfTsN CiMgNjggIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMw0Kc3RydWN0IF9hdGV4aXQgew0KICAg ICAgICBzdHJ1Y3QgX2F0ZXhpdCAqX25leHQ7DQogICAgICAgIGludCBfaW5kOw0KICAgICAgICB2 b2lkICgqX2Zuc1szMl0pKHZvaWQpOw0KICAgICAgICB2b2lkICpfZm5hcmdzWzMyXTsNCiAgICAg ICAgX19VTG9uZyBfZm50eXBlczsNCn07DQojIDkxICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50Lmgi IDMNCnN0cnVjdCBfX3NidWYgew0KICAgICAgICB1bnNpZ25lZCBjaGFyICpfYmFzZTsNCiAgICAg ICAgaW50IF9zaXplOw0KfTsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgbG9uZyBfZnBvc190Ow0KIyAx NTYgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMw0Kc3RydWN0IF9fc0ZJTEUgew0KICB1bnNp Z25lZCBjaGFyICpfcDsNCiAgaW50IF9yOw0KICBpbnQgX3c7DQogIHNob3J0IF9mbGFnczsNCiAg c2hvcnQgX2ZpbGU7DQogIHN0cnVjdCBfX3NidWYgX2JmOw0KICBpbnQgX2xiZnNpemU7DQoNCg0K DQoNCg0KDQogIHZvaWQgKiBfY29va2llOw0KDQogIF9zc2l6ZV90IF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpICgqX3JlYWQpICh2b2lkICogX2Nvb2tpZSwgY2hhciAqX2J1ZiwgaW50IF9uKTsN CiAgX3NzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgKCpfd3JpdGUpICh2b2lkICog X2Nvb2tpZSwgY29uc3QgY2hhciAqX2J1ZiwgaW50IF9uKTsNCg0KICBfZnBvc190IF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpICgqX3NlZWspICh2b2lkICogX2Nvb2tpZSwgX2Zwb3NfdCBfb2Zm c2V0LCBpbnQgX3doZW5jZSk7DQogIGludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSAoKl9j bG9zZSkgKHZvaWQgKiBfY29va2llKTsNCg0KDQogIHN0cnVjdCBfX3NidWYgX3ViOw0KICB1bnNp Z25lZCBjaGFyICpfdXA7DQogIGludCBfdXI7DQoNCg0KICB1bnNpZ25lZCBjaGFyIF91YnVmWzNd Ow0KICB1bnNpZ25lZCBjaGFyIF9uYnVmWzFdOw0KDQoNCiAgc3RydWN0IF9fc2J1ZiBfbGI7DQoN Cg0KICBpbnQgX2Jsa3NpemU7DQogIGludCBfb2Zmc2V0Ow0KDQoNCiAgc3RydWN0IF9yZWVudCAq X2RhdGE7DQoNCg0KDQogIF9mbG9ja190IF9sb2NrOw0KDQp9Ow0KIyAyNDkgIi91c3IvaW5jbHVk ZS9zeXMvcmVlbnQuaCIgMw0KdHlwZWRlZiBzdHJ1Y3QgX19zRklMRSBfX0ZJTEU7DQoNCg0Kc3Ry dWN0IF9nbHVlDQp7DQogIHN0cnVjdCBfZ2x1ZSAqX25leHQ7DQogIGludCBfbmlvYnM7DQogIF9f RklMRSAqX2lvYnM7DQp9Ow0KIyAyODAgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMw0Kc3Ry dWN0IF9yYW5kNDggew0KICB1bnNpZ25lZCBzaG9ydCBfc2VlZFszXTsNCiAgdW5zaWduZWQgc2hv cnQgX211bHRbM107DQogIHVuc2lnbmVkIHNob3J0IF9hZGQ7DQoNCg0KDQoNCn07DQojIDUzMiAi L3Vzci9pbmNsdWRlL3N5cy9yZWVudC5oIiAzDQpzdHJ1Y3QgX3JlZW50DQp7DQogIGludCBfZXJy bm87DQoNCg0KDQoNCiAgX19GSUxFICpfc3RkaW4sICpfc3Rkb3V0LCAqX3N0ZGVycjsNCg0KICBp bnQgX2luYzsNCiAgY2hhciBfZW1lcmdlbmN5WzI1XTsNCg0KICBpbnQgX2N1cnJlbnRfY2F0ZWdv cnk7DQogIGNvbnN0IGNoYXIgKl9jdXJyZW50X2xvY2FsZTsNCg0KICBpbnQgX19zZGlkaW5pdDsN Cg0KICB2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpICgqX19jbGVhbnVwKSAoc3RydWN0 IF9yZWVudCAqKTsNCg0KDQogIHN0cnVjdCBfQmlnaW50ICpfcmVzdWx0Ow0KICBpbnQgX3Jlc3Vs dF9rOw0KICBzdHJ1Y3QgX0JpZ2ludCAqX3A1czsNCiAgc3RydWN0IF9CaWdpbnQgKipfZnJlZWxp c3Q7DQoNCg0KICBpbnQgX2N2dGxlbjsNCiAgY2hhciAqX2N2dGJ1ZjsNCg0KICB1bmlvbg0KICAg IHsNCiAgICAgIHN0cnVjdA0KICAgICAgICB7DQogICAgICAgICAgdW5zaWduZWQgaW50IF91bnVz ZWRfcmFuZDsNCiAgICAgICAgICBjaGFyICogX3N0cnRva19sYXN0Ow0KICAgICAgICAgIGNoYXIg X2FzY3RpbWVfYnVmWzI2XTsNCiAgICAgICAgICBzdHJ1Y3QgX190bSBfbG9jYWx0aW1lX2J1ZjsN CiAgICAgICAgICBpbnQgX2dhbW1hX3NpZ25nYW07DQogICAgICAgICAgX19leHRlbnNpb25fXyB1 bnNpZ25lZCBsb25nIGxvbmcgX3JhbmRfbmV4dDsNCiAgICAgICAgICBzdHJ1Y3QgX3JhbmQ0OCBf cjQ4Ow0KICAgICAgICAgIF9tYnN0YXRlX3QgX21ibGVuX3N0YXRlOw0KICAgICAgICAgIF9tYnN0 YXRlX3QgX21idG93Y19zdGF0ZTsNCiAgICAgICAgICBfbWJzdGF0ZV90IF93Y3RvbWJfc3RhdGU7 DQogICAgICAgICAgY2hhciBfbDY0YV9idWZbOF07DQogICAgICAgICAgY2hhciBfc2lnbmFsX2J1 ZlsyNF07DQogICAgICAgICAgaW50IF9nZXRkYXRlX2VycjsNCiAgICAgICAgICBfbWJzdGF0ZV90 IF9tYnJsZW5fc3RhdGU7DQogICAgICAgICAgX21ic3RhdGVfdCBfbWJydG93Y19zdGF0ZTsNCiAg ICAgICAgICBfbWJzdGF0ZV90IF9tYnNydG93Y3Nfc3RhdGU7DQogICAgICAgICAgX21ic3RhdGVf dCBfd2NydG9tYl9zdGF0ZTsNCiAgICAgICAgICBfbWJzdGF0ZV90IF93Y3NydG9tYnNfc3RhdGU7 DQogICAgICAgIH0gX3JlZW50Ow0KDQoNCg0KICAgICAgc3RydWN0DQogICAgICAgIHsNCg0KICAg ICAgICAgIHVuc2lnbmVkIGNoYXIgKiBfbmV4dGZbMzBdOw0KICAgICAgICAgIHVuc2lnbmVkIGlu dCBfbm1hbGxvY1szMF07DQogICAgICAgIH0gX3VudXNlZDsNCiAgICB9IF9uZXc7DQoNCg0KICBz dHJ1Y3QgX2F0ZXhpdCAqX2F0ZXhpdDsNCiAgc3RydWN0IF9hdGV4aXQgX2F0ZXhpdDA7DQoNCg0K ICB2b2lkICgqKihfc2lnX2Z1bmMpKShpbnQpOw0KDQoNCg0KDQogIHN0cnVjdCBfZ2x1ZSBfX3Nn bHVlOw0KICBfX0ZJTEUgX19zZlszXTsNCn07DQojIDcyOCAiL3Vzci9pbmNsdWRlL3N5cy9yZWVu dC5oIiAzDQpleHRlcm4gc3RydWN0IF9yZWVudCAqX2ltcHVyZV9wdHIgOw0KDQp2b2lkIF9yZWNs YWltX3JlZW50IChzdHJ1Y3QgX3JlZW50ICopOw0KIyA3NDYgIi91c3IvaW5jbHVkZS9zeXMvcmVl bnQuaCIgMw0KfQ0KIyA3ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMNCiMgMSAiL3Vzci9pbmNs dWRlL21hY2hpbmUvaWVlZWZwLmgiIDEgMw0KIyA4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMN Cg0KDQpleHRlcm4gIkMiIHsNCg0KDQoNCg0KDQoNCnVuaW9uIF9fZG1hdGgNCnsNCiAgX19VTG9u ZyBpWzJdOw0KICBkb3VibGUgZDsNCn07DQoNCg0KDQoNCmV4dGVybiBfX2F0dHJpYnV0ZV9fKChk bGxpbXBvcnQpKSBjb25zdCB1bmlvbiBfX2RtYXRoIF9faW5maW5pdHlbXTsNCiMgMzUgIi91c3Iv aW5jbHVkZS9tYXRoLmgiIDMNCmV4dGVybiBkb3VibGUgYXRhbiAoZG91YmxlKTsNCmV4dGVybiBk b3VibGUgY29zIChkb3VibGUpOw0KZXh0ZXJuIGRvdWJsZSBzaW4gKGRvdWJsZSk7DQpleHRlcm4g ZG91YmxlIHRhbiAoZG91YmxlKTsNCmV4dGVybiBkb3VibGUgdGFuaCAoZG91YmxlKTsNCmV4dGVy biBkb3VibGUgZnJleHAgKGRvdWJsZSwgaW50ICopOw0KZXh0ZXJuIGRvdWJsZSBtb2RmIChkb3Vi bGUsIGRvdWJsZSAqKTsNCmV4dGVybiBkb3VibGUgY2VpbCAoZG91YmxlKTsNCmV4dGVybiBkb3Vi bGUgZmFicyAoZG91YmxlKTsNCmV4dGVybiBkb3VibGUgZmxvb3IgKGRvdWJsZSk7DQoNCg0KDQoN Cg0KDQpleHRlcm4gZG91YmxlIGFjb3MgKGRvdWJsZSk7DQpleHRlcm4gZG91YmxlIGFzaW4gKGRv dWJsZSk7DQpleHRlcm4gZG91YmxlIGF0YW4yIChkb3VibGUsIGRvdWJsZSk7DQpleHRlcm4gZG91 YmxlIGNvc2ggKGRvdWJsZSk7DQpleHRlcm4gZG91YmxlIHNpbmggKGRvdWJsZSk7DQpleHRlcm4g ZG91YmxlIGV4cCAoZG91YmxlKTsNCmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSwgaW50KTsN CmV4dGVybiBkb3VibGUgbG9nIChkb3VibGUpOw0KZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91Ymxl KTsNCmV4dGVybiBkb3VibGUgcG93IChkb3VibGUsIGRvdWJsZSk7DQpleHRlcm4gZG91YmxlIHNx cnQgKGRvdWJsZSk7DQpleHRlcm4gZG91YmxlIGZtb2QgKGRvdWJsZSwgZG91YmxlKTsNCiMgNzIg Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDMNCnR5cGVkZWYgZmxvYXQgZmxvYXRfdDsNCnR5cGVkZWYg ZG91YmxlIGRvdWJsZV90Ow0KIyA4MiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMw0KZXh0ZXJuIGlu dCBfX2ZwY2xhc3NpZnlmIChmbG9hdCB4KTsNCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5ZCAoZG91 YmxlIHgpOw0KIyAxMjEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMNCmV4dGVybiBkb3VibGUgaW5m aW5pdHkgKHZvaWQpOw0KZXh0ZXJuIGRvdWJsZSBuYW4gKHZvaWQpOw0KZXh0ZXJuIGludCBpc25h biAoZG91YmxlKTsNCmV4dGVybiBpbnQgaXNpbmYgKGRvdWJsZSk7DQpleHRlcm4gaW50IGZpbml0 ZSAoZG91YmxlKTsNCmV4dGVybiBkb3VibGUgY29weXNpZ24gKGRvdWJsZSwgZG91YmxlKTsNCmV4 dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSk7DQoNCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSk7 DQpleHRlcm4gZG91YmxlIGNicnQgKGRvdWJsZSk7DQpleHRlcm4gZG91YmxlIG5leHRhZnRlciAo ZG91YmxlLCBkb3VibGUpOw0KZXh0ZXJuIGRvdWJsZSByaW50IChkb3VibGUpOw0KZXh0ZXJuIGRv dWJsZSBzY2FsYm4gKGRvdWJsZSwgaW50KTsNCg0KZXh0ZXJuIGRvdWJsZSBleHAyIChkb3VibGUp Ow0KZXh0ZXJuIGRvdWJsZSBzY2FsYmxuIChkb3VibGUsIGxvbmcgaW50KTsNCmV4dGVybiBkb3Vi bGUgdGdhbW1hIChkb3VibGUpOw0KZXh0ZXJuIGRvdWJsZSBuZWFyYnlpbnQgKGRvdWJsZSk7DQpl eHRlcm4gbG9uZyBpbnQgbHJpbnQgKGRvdWJsZSk7DQpleHRlcm4gZG91YmxlIHJvdW5kIChkb3Vi bGUpOw0KZXh0ZXJuIGxvbmcgaW50IGxyb3VuZCAoZG91YmxlKTsNCmV4dGVybiBkb3VibGUgdHJ1 bmMgKGRvdWJsZSk7DQpleHRlcm4gZG91YmxlIHJlbXF1byAoZG91YmxlLCBkb3VibGUsIGludCAq KTsNCmV4dGVybiBkb3VibGUgY29weXNpZ24gKGRvdWJsZSwgZG91YmxlKTsNCmV4dGVybiBkb3Vi bGUgZmRpbSAoZG91YmxlLCBkb3VibGUpOw0KZXh0ZXJuIGRvdWJsZSBmbWF4IChkb3VibGUsIGRv dWJsZSk7DQpleHRlcm4gZG91YmxlIGZtaW4gKGRvdWJsZSwgZG91YmxlKTsNCmV4dGVybiBkb3Vi bGUgZm1hIChkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsNCmV4dGVybiB2b2lkIHNpbmNvcyAoZG91 YmxlLCBkb3VibGUgKiwgZG91YmxlICopOw0KDQoNCmV4dGVybiBkb3VibGUgbG9nMXAgKGRvdWJs ZSk7DQpleHRlcm4gZG91YmxlIGV4cG0xIChkb3VibGUpOw0KDQoNCg0KZXh0ZXJuIGRvdWJsZSBh Y29zaCAoZG91YmxlKTsNCmV4dGVybiBkb3VibGUgYXRhbmggKGRvdWJsZSk7DQpleHRlcm4gZG91 YmxlIHJlbWFpbmRlciAoZG91YmxlLCBkb3VibGUpOw0KZXh0ZXJuIGRvdWJsZSBnYW1tYSAoZG91 YmxlKTsNCmV4dGVybiBkb3VibGUgZ2FtbWFfciAoZG91YmxlLCBpbnQgKik7DQpleHRlcm4gZG91 YmxlIGxnYW1tYSAoZG91YmxlKTsNCmV4dGVybiBkb3VibGUgbGdhbW1hX3IgKGRvdWJsZSwgaW50 ICopOw0KZXh0ZXJuIGRvdWJsZSBlcmYgKGRvdWJsZSk7DQpleHRlcm4gZG91YmxlIGVyZmMgKGRv dWJsZSk7DQpleHRlcm4gZG91YmxlIHkwIChkb3VibGUpOw0KZXh0ZXJuIGRvdWJsZSB5MSAoZG91 YmxlKTsNCmV4dGVybiBkb3VibGUgeW4gKGludCwgZG91YmxlKTsNCmV4dGVybiBkb3VibGUgajAg KGRvdWJsZSk7DQpleHRlcm4gZG91YmxlIGoxIChkb3VibGUpOw0KZXh0ZXJuIGRvdWJsZSBqbiAo aW50LCBkb3VibGUpOw0KDQoNCg0KZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlLCBkb3VibGUp Ow0KDQoNCmV4dGVybiBkb3VibGUgY2FicygpOw0KZXh0ZXJuIGRvdWJsZSBkcmVtIChkb3VibGUs IGRvdWJsZSk7DQojIDE4OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMw0KZXh0ZXJuIGZsb2F0IGF0 YW5mIChmbG9hdCk7DQpleHRlcm4gZmxvYXQgY29zZiAoZmxvYXQpOw0KZXh0ZXJuIGZsb2F0IHNp bmYgKGZsb2F0KTsNCmV4dGVybiBmbG9hdCB0YW5mIChmbG9hdCk7DQpleHRlcm4gZmxvYXQgdGFu aGYgKGZsb2F0KTsNCmV4dGVybiBmbG9hdCBmcmV4cGYgKGZsb2F0LCBpbnQgKik7DQpleHRlcm4g ZmxvYXQgbW9kZmYgKGZsb2F0LCBmbG9hdCAqKTsNCmV4dGVybiBmbG9hdCBjZWlsZiAoZmxvYXQp Ow0KZXh0ZXJuIGZsb2F0IGZhYnNmIChmbG9hdCk7DQpleHRlcm4gZmxvYXQgZmxvb3JmIChmbG9h dCk7DQoNCg0KZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCk7DQpleHRlcm4gZmxvYXQgYXNpbmYg KGZsb2F0KTsNCmV4dGVybiBmbG9hdCBhdGFuMmYgKGZsb2F0LCBmbG9hdCk7DQpleHRlcm4gZmxv YXQgY29zaGYgKGZsb2F0KTsNCmV4dGVybiBmbG9hdCBzaW5oZiAoZmxvYXQpOw0KZXh0ZXJuIGZs b2F0IGV4cGYgKGZsb2F0KTsNCmV4dGVybiBmbG9hdCBsZGV4cGYgKGZsb2F0LCBpbnQpOw0KZXh0 ZXJuIGZsb2F0IGxvZ2YgKGZsb2F0KTsNCmV4dGVybiBmbG9hdCBsb2cxMGYgKGZsb2F0KTsNCmV4 dGVybiBmbG9hdCBwb3dmIChmbG9hdCwgZmxvYXQpOw0KZXh0ZXJuIGZsb2F0IHNxcnRmIChmbG9h dCk7DQpleHRlcm4gZmxvYXQgZm1vZGYgKGZsb2F0LCBmbG9hdCk7DQojIDIyMSAiL3Vzci9pbmNs dWRlL21hdGguaCIgMw0KZXh0ZXJuIGZsb2F0IGV4cDJmIChmbG9hdCk7DQpleHRlcm4gZmxvYXQg c2NhbGJsbmYgKGZsb2F0LCBsb25nIGludCk7DQpleHRlcm4gZmxvYXQgdGdhbW1hZiAoZmxvYXQp Ow0KZXh0ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0KTsNCmV4dGVybiBsb25nIGludCBscmlu dGYgKGZsb2F0KTsNCmV4dGVybiBmbG9hdCByb3VuZGYgKGZsb2F0KTsNCmV4dGVybiBsb25nIGlu dCBscm91bmRmIChmbG9hdCk7DQpleHRlcm4gZmxvYXQgdHJ1bmNmIChmbG9hdCk7DQpleHRlcm4g ZmxvYXQgcmVtcXVvZiAoZmxvYXQsIGZsb2F0LCBpbnQgKik7DQpleHRlcm4gZmxvYXQgY29weXNp Z25mIChmbG9hdCwgZmxvYXQpOw0KZXh0ZXJuIGZsb2F0IGZkaW1mIChmbG9hdCwgZmxvYXQpOw0K ZXh0ZXJuIGZsb2F0IGZtYXhmIChmbG9hdCwgZmxvYXQpOw0KZXh0ZXJuIGZsb2F0IGZtaW5mIChm bG9hdCwgZmxvYXQpOw0KZXh0ZXJuIGZsb2F0IGZtYWYgKGZsb2F0LCBmbG9hdCwgZmxvYXQpOw0K DQpleHRlcm4gZmxvYXQgaW5maW5pdHlmICh2b2lkKTsNCmV4dGVybiBmbG9hdCBuYW5mICh2b2lk KTsNCmV4dGVybiBpbnQgaXNuYW5mIChmbG9hdCk7DQpleHRlcm4gaW50IGlzaW5mZiAoZmxvYXQp Ow0KZXh0ZXJuIGludCBmaW5pdGVmIChmbG9hdCk7DQpleHRlcm4gZmxvYXQgY29weXNpZ25mIChm bG9hdCwgZmxvYXQpOw0KZXh0ZXJuIGludCBpbG9nYmYgKGZsb2F0KTsNCg0KZXh0ZXJuIGZsb2F0 IGFzaW5oZiAoZmxvYXQpOw0KZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9hdCk7DQpleHRlcm4gZmxv YXQgbmV4dGFmdGVyZiAoZmxvYXQsIGZsb2F0KTsNCmV4dGVybiBmbG9hdCByaW50ZiAoZmxvYXQp Ow0KZXh0ZXJuIGZsb2F0IHNjYWxibmYgKGZsb2F0LCBpbnQpOw0KZXh0ZXJuIGZsb2F0IGxvZzFw ZiAoZmxvYXQpOw0KZXh0ZXJuIGZsb2F0IGV4cG0xZiAoZmxvYXQpOw0KZXh0ZXJuIHZvaWQgc2lu Y29zZiAoZmxvYXQsIGZsb2F0ICosIGZsb2F0ICopOw0KDQoNCmV4dGVybiBmbG9hdCBhY29zaGYg KGZsb2F0KTsNCmV4dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0KTsNCmV4dGVybiBmbG9hdCByZW1h aW5kZXJmIChmbG9hdCwgZmxvYXQpOw0KZXh0ZXJuIGZsb2F0IGdhbW1hZiAoZmxvYXQpOw0KZXh0 ZXJuIGZsb2F0IGdhbW1hZl9yIChmbG9hdCwgaW50ICopOw0KZXh0ZXJuIGZsb2F0IGxnYW1tYWYg KGZsb2F0KTsNCmV4dGVybiBmbG9hdCBsZ2FtbWFmX3IgKGZsb2F0LCBpbnQgKik7DQpleHRlcm4g ZmxvYXQgZXJmZiAoZmxvYXQpOw0KZXh0ZXJuIGZsb2F0IGVyZmNmIChmbG9hdCk7DQpleHRlcm4g ZmxvYXQgeTBmIChmbG9hdCk7DQpleHRlcm4gZmxvYXQgeTFmIChmbG9hdCk7DQpleHRlcm4gZmxv YXQgeW5mIChpbnQsIGZsb2F0KTsNCmV4dGVybiBmbG9hdCBqMGYgKGZsb2F0KTsNCmV4dGVybiBm bG9hdCBqMWYgKGZsb2F0KTsNCmV4dGVybiBmbG9hdCBqbmYgKGludCwgZmxvYXQpOw0KDQpleHRl cm4gZmxvYXQgaHlwb3RmIChmbG9hdCwgZmxvYXQpOw0KDQpleHRlcm4gZmxvYXQgY2Fic2YoKTsN CmV4dGVybiBmbG9hdCBkcmVtZiAoZmxvYXQsIGZsb2F0KTsNCg0KDQoNCg0KDQoNCmV4dGVybiBp bnQgKl9fc2lnbmdhbSAodm9pZCk7DQoNCg0KDQoNCg0KDQoNCnN0cnVjdCBfX2V4Y2VwdGlvbg0K DQoNCg0Kew0KICBpbnQgdHlwZTsNCiAgY2hhciAqbmFtZTsNCiAgZG91YmxlIGFyZzE7DQogIGRv dWJsZSBhcmcyOw0KICBkb3VibGUgcmV0dmFsOw0KICBpbnQgZXJyOw0KfTsNCg0KDQpleHRlcm4g aW50IG1hdGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqZSk7DQojIDM0NSAiL3Vzci9pbmNsdWRl L21hdGguaCIgMw0KZW51bSBfX2ZkbGlibV92ZXJzaW9uDQp7DQogIF9fZmRsaWJtX2llZWUgPSAt MSwNCiAgX19mZGxpYm1fc3ZpZCwNCiAgX19mZGxpYm1feG9wZW4sDQogIF9fZmRsaWJtX3Bvc2l4 DQp9Ow0KDQoNCg0KDQpleHRlcm4gX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgY29uc3QgZW51 bSBfX2ZkbGlibV92ZXJzaW9uIF9fZmRsaWJfdmVyc2lvbjsNCiMgMzY1ICIvdXNyL2luY2x1ZGUv bWF0aC5oIiAzDQp9DQojIDUyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMiAzDQojIDc5 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19jbWF0aF9wb3dlcihfVHAsIHVuc2lnbmVkIGlu dCk7DQoNCiAgaW5saW5lIGRvdWJsZQ0KICBhYnMoZG91YmxlIF9feCkNCiAgeyByZXR1cm4gX19i dWlsdGluX2ZhYnMoX194KTsgfQ0KDQogIGlubGluZSBmbG9hdA0KICBhYnMoZmxvYXQgX194KQ0K ICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KTsgfQ0KDQogIGlubGluZSBsb25nIGRvdWJs ZQ0KICBhYnMobG9uZyBkb3VibGUgX194KQ0KICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2woX194 KTsgfQ0KDQoNCiAgaW5saW5lIGZsb2F0DQogIGFjb3MoZmxvYXQgX194KSB7IHJldHVybiA6OmFj b3NmKF9feCk7IH0NCg0KDQoNCg0KDQogIHVzaW5nIDo6YWNvczsNCg0KDQoNCg0KDQogIGlubGlu ZSBsb25nIGRvdWJsZQ0KICBhY29zKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphY29zKHN0 YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0NCg0KDQogIHVzaW5nIDo6YXNpbjsNCg0KDQogIGlu bGluZSBmbG9hdA0KICBhc2luKGZsb2F0IF9feCkgeyByZXR1cm4gOjphc2luZihfX3gpOyB9DQoj IDEyOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMNCiAgaW5saW5lIGxvbmcgZG91Ymxl DQogIGFzaW4obG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFzaW4oc3RhdGljX2Nhc3Q8ZG91 YmxlPihfX3gpKTsgfQ0KDQoNCiAgdXNpbmcgOjphdGFuOw0KDQoNCiAgaW5saW5lIGZsb2F0DQog IGF0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW5mKF9feCk7IH0NCiMgMTQ3ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9jbWF0aCIgMw0KICBpbmxpbmUgbG9uZyBkb3VibGUNCiAgYXRhbihsb25n IGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbihzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9 DQoNCg0KICB1c2luZyA6OmF0YW4yOw0KDQoNCiAgaW5saW5lIGZsb2F0DQogIGF0YW4yKGZsb2F0 IF9feSwgZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW4yZihfX3ksIF9feCk7IH0NCiMgMTY2ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMw0KICBpbmxpbmUgbG9uZyBkb3VibGUNCiAgYXRh bjIobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpDQogIHsgcmV0dXJuIDo6YXRhbjIo c3RhdGljX2Nhc3Q8ZG91YmxlPihfX3kpLCBzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9DQoN Cg0KICB1c2luZyA6OmNlaWw7DQoNCg0KICBpbmxpbmUgZmxvYXQNCiAgY2VpbChmbG9hdCBfX3gp IHsgcmV0dXJuIDo6Y2VpbGYoX194KTsgfQ0KIyAxODUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Nt YXRoIiAzDQogIGlubGluZSBsb25nIGRvdWJsZQ0KICBjZWlsKGxvbmcgZG91YmxlIF9feCkgeyBy ZXR1cm4gOjpjZWlsKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0NCg0KDQogIHVzaW5nIDo6 Y29zOw0KDQogIGlubGluZSBmbG9hdA0KICBjb3MoZmxvYXQgX194KQ0KICB7IHJldHVybiBfX2J1 aWx0aW5fY29zZihfX3gpOyB9DQoNCiAgaW5saW5lIGxvbmcgZG91YmxlDQogIGNvcyhsb25nIGRv dWJsZSBfX3gpDQogIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3NsKF9feCk7IH0NCg0KICB1c2luZyA6 OmNvc2g7DQoNCg0KICBpbmxpbmUgZmxvYXQNCiAgY29zaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6 Y29zaGYoX194KTsgfQ0KIyAyMTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzDQogIGlu bGluZSBsb25nIGRvdWJsZQ0KICBjb3NoKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpjb3No KHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0NCg0KDQogIHVzaW5nIDo6ZXhwOw0KDQoNCiAg aW5saW5lIGZsb2F0DQogIGV4cChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6ZXhwZihfX3gpOyB9DQoj IDIzMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMNCiAgaW5saW5lIGxvbmcgZG91Ymxl DQogIGV4cChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6ZXhwKHN0YXRpY19jYXN0PGRvdWJs ZT4oX194KSk7IH0NCg0KDQogIHVzaW5nIDo6ZmFiczsNCg0KICBpbmxpbmUgZmxvYXQNCiAgZmFi cyhmbG9hdCBfX3gpDQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9DQoNCiAgaW5s aW5lIGxvbmcgZG91YmxlDQogIGZhYnMobG9uZyBkb3VibGUgX194KQ0KICB7IHJldHVybiBfX2J1 aWx0aW5fZmFic2woX194KTsgfQ0KDQogIHVzaW5nIDo6Zmxvb3I7DQoNCg0KICBpbmxpbmUgZmxv YXQNCiAgZmxvb3IoZmxvYXQgX194KSB7IHJldHVybiA6OmZsb29yZihfX3gpOyB9DQojIDI1OSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMNCiAgaW5saW5lIGxvbmcgZG91YmxlDQogIGZs b29yKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpmbG9vcihzdGF0aWNfY2FzdDxkb3VibGU+ KF9feCkpOyB9DQoNCg0KICB1c2luZyA6OmZtb2Q7DQoNCg0KICBpbmxpbmUgZmxvYXQNCiAgZm1v ZChmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZXR1cm4gOjpmbW9kZihfX3gsIF9feSk7IH0NCiMg Mjc4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMw0KICBpbmxpbmUgbG9uZyBkb3VibGUN CiAgZm1vZChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkNCiAgeyByZXR1cm4gOjpm bW9kKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3kpKTsg fQ0KDQoNCiAgdXNpbmcgOjpmcmV4cDsNCg0KDQogIGlubGluZSBmbG9hdA0KICBmcmV4cChmbG9h dCBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6ZnJleHBmKF9feCwgX19leHApOyB9DQojIDI5 NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMNCiAgaW5saW5lIGxvbmcgZG91YmxlDQog IGZyZXhwKGxvbmcgZG91YmxlIF9feCwgaW50KiBfX2V4cCkNCiAgeyByZXR1cm4gOjpmcmV4cChz dGF0aWNfY2FzdDxkb3VibGU+KF9feCksIF9fZXhwKTsgfQ0KDQoNCiAgdXNpbmcgOjpsZGV4cDsN Cg0KDQogIGlubGluZSBmbG9hdA0KICBsZGV4cChmbG9hdCBfX3gsIGludCBfX2V4cCkgeyByZXR1 cm4gOjpsZGV4cGYoX194LCBfX2V4cCk7IH0NCiMgMzE3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9j bWF0aCIgMw0KICBpbmxpbmUgbG9uZyBkb3VibGUNCiAgbGRleHAobG9uZyBkb3VibGUgX194LCBp bnQgX19leHApDQogIHsgcmV0dXJuIDo6bGRleHAoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpLCBf X2V4cCk7IH0NCg0KDQogIHVzaW5nIDo6bG9nOw0KDQoNCiAgaW5saW5lIGZsb2F0DQogIGxvZyhm bG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nZihfX3gpOyB9DQojIDMzNiAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvY21hdGgiIDMNCiAgaW5saW5lIGxvbmcgZG91YmxlDQogIGxvZyhsb25nIGRvdWJsZSBf X3gpIHsgcmV0dXJuIDo6bG9nKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0NCg0KDQogIHVz aW5nIDo6bG9nMTA7DQoNCg0KICBpbmxpbmUgZmxvYXQNCiAgbG9nMTAoZmxvYXQgX194KSB7IHJl dHVybiA6OmxvZzEwZihfX3gpOyB9DQojIDM1NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgi IDMNCiAgaW5saW5lIGxvbmcgZG91YmxlDQogIGxvZzEwKGxvbmcgZG91YmxlIF9feCkgeyByZXR1 cm4gOjpsb2cxMChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9DQoNCg0KICB1c2luZyA6Om1v ZGY7DQoNCg0KICBpbmxpbmUgZmxvYXQNCiAgbW9kZihmbG9hdCBfX3gsIGZsb2F0KiBfX2lwdHIp IHsgcmV0dXJuIDo6bW9kZmYoX194LCBfX2lwdHIpOyB9DQojIDM3OCAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvY21hdGgiIDMNCiAgaW5saW5lIGxvbmcgZG91YmxlDQogIG1vZGYobG9uZyBkb3VibGUg X194LCBsb25nIGRvdWJsZSogX19pcHRyKQ0KICB7DQogICAgZG91YmxlIF9fdG1wOw0KICAgIGRv dWJsZSBfX3JlcyA9IDo6bW9kZihzdGF0aWNfY2FzdDxkb3VibGU+KF9feCksICZfX3RtcCk7DQog ICAgKiBfX2lwdHIgPSBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oX190bXApOw0KICAgIHJldHVy biBfX3JlczsNCiAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIGlubGluZSBf VHANCiAgICBfX3Bvd19oZWxwZXIoX1RwIF9feCwgaW50IF9fbikNCiAgICB7DQogICAgICByZXR1 cm4gX19uIDwgMA0KICAgICAgICA/IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9feCwgLV9fbikNCiAg ICAgICAgOiBfX2NtYXRoX3Bvd2VyKF9feCwgX19uKTsNCiAgICB9DQoNCiAgdXNpbmcgOjpwb3c7 DQoNCg0KICBpbmxpbmUgZmxvYXQNCiAgcG93KGZsb2F0IF9feCwgZmxvYXQgX195KSB7IHJldHVy biA6OnBvd2YoX194LCBfX3kpOyB9DQojIDQxMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgi IDMNCiAgaW5saW5lIGxvbmcgZG91YmxlDQogIHBvdyhsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91 YmxlIF9feSkNCiAgeyByZXR1cm4gOjpwb3coc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpLCBzdGF0 aWNfY2FzdDxkb3VibGU+KF9feSkpOyB9DQoNCg0KICBpbmxpbmUgZG91YmxlDQogIHBvdyhkb3Vi bGUgX194LCBpbnQgX19pKQ0KICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX2kpOyB9DQoN CiAgaW5saW5lIGZsb2F0DQogIHBvdyhmbG9hdCBfX3gsIGludCBfX24pDQogIHsgcmV0dXJuIF9f cG93X2hlbHBlcihfX3gsIF9fbik7IH0NCg0KICBpbmxpbmUgbG9uZyBkb3VibGUNCiAgcG93KGxv bmcgZG91YmxlIF9feCwgaW50IF9fbikNCiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19u KTsgfQ0KDQogIHVzaW5nIDo6c2luOw0KDQogIGlubGluZSBmbG9hdA0KICBzaW4oZmxvYXQgX194 KQ0KICB7IHJldHVybiBfX2J1aWx0aW5fc2luZihfX3gpOyB9DQoNCiAgaW5saW5lIGxvbmcgZG91 YmxlDQogIHNpbihsb25nIGRvdWJsZSBfX3gpDQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5sKF9f eCk7IH0NCg0KICB1c2luZyA6OnNpbmg7DQoNCg0KICBpbmxpbmUgZmxvYXQNCiAgc2luaChmbG9h dCBfX3gpIHsgcmV0dXJuIDo6c2luaGYoX194KTsgfQ0KIyA0NTMgIi91c3IvaW5jbHVkZS9jKysv My4yL2NtYXRoIiAzDQogIGlubGluZSBsb25nIGRvdWJsZQ0KICBzaW5oKGxvbmcgZG91YmxlIF9f eCkgeyByZXR1cm4gOjpzaW5oKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0NCg0KDQogIHVz aW5nIDo6c3FydDsNCg0KICBpbmxpbmUgZmxvYXQNCiAgc3FydChmbG9hdCBfX3gpDQogIHsgcmV0 dXJuIF9fYnVpbHRpbl9zcXJ0ZihfX3gpOyB9DQoNCiAgaW5saW5lIGxvbmcgZG91YmxlDQogIHNx cnQobG9uZyBkb3VibGUgX194KQ0KICB7IHJldHVybiBfX2J1aWx0aW5fc3FydGwoX194KTsgfQ0K DQogIHVzaW5nIDo6dGFuOw0KDQoNCiAgaW5saW5lIGZsb2F0DQogIHRhbihmbG9hdCBfX3gpIHsg cmV0dXJuIDo6dGFuZihfX3gpOyB9DQojIDQ4MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgi IDMNCiAgaW5saW5lIGxvbmcgZG91YmxlDQogIHRhbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu IDo6dGFuKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0NCg0KDQogIHVzaW5nIDo6dGFuaDsN Cg0KDQogIGlubGluZSBmbG9hdA0KICB0YW5oKGZsb2F0IF9feCkgeyByZXR1cm4gOjp0YW5oZihf X3gpOyB9DQojIDQ5OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMNCiAgaW5saW5lIGxv bmcgZG91YmxlDQogIHRhbmgobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRhbmgoc3RhdGlj X2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQ0KDQp9DQojIDY1NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Y21hdGgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jbWF0aC50Y2MiIDEgMw0K IyAzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jbWF0aC50Y2MiIDMNCm5hbWVzcGFjZSBz dGQNCnsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIF9UcA0KICAgIF9fY21hdGhfcG93 ZXIoX1RwIF9feCwgdW5zaWduZWQgaW50IF9fbikNCiAgICB7DQogICAgICBfVHAgX195ID0gX19u ICUgMiA/IF9feCA6IDE7DQoNCiAgICAgIHdoaWxlIChfX24gPj49IDEpDQogICAgICAgIHsNCiAg ICAgICAgICBfX3ggPSBfX3ggKiBfX3g7DQogICAgICAgICAgaWYgKF9fbiAlIDIpDQogICAgICAg ICAgICBfX3kgPSBfX3kgKiBfX3g7DQogICAgICAgIH0NCg0KICAgICAgcmV0dXJuIF9feTsNCiAg ICB9DQp9DQojIDY1NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDIgMw0KIyA0NiAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvdmFsYXJyYXkiIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9jc3RkbGliIiAxIDMNCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRsaWIiIDMNCg0K DQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMw0KIyAxNCAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAzDQojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy4yL2lu Y2x1ZGUvc3RkZGVmLmgiIDEgMw0KIyAxNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMNCg0K DQojIDEgIi91c3IvaW5jbHVkZS9tYWNoaW5lL3N0ZGxpYi5oIiAxIDMNCiMgMTggIi91c3IvaW5j bHVkZS9zdGRsaWIuaCIgMiAzDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMNCiMg MjAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzDQoNCg0KZXh0ZXJuICJDIiB7DQoNCnR5cGVk ZWYgc3RydWN0DQp7DQogIGludCBxdW90Ow0KICBpbnQgcmVtOw0KfSBkaXZfdDsNCg0KdHlwZWRl ZiBzdHJ1Y3QNCnsNCiAgbG9uZyBxdW90Ow0KICBsb25nIHJlbTsNCn0gbGRpdl90Ow0KIyA0NSAi L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzDQpleHRlcm4gX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0 KSkgaW50IF9fbWJfY3VyX21heDsNCg0KDQoNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgYWJvcnQgKHZvaWQpIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOw0KaW50IF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIGFicyAoaW50KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpKHZvaWQpKTsNCmRvdWJsZSBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBhdG9mIChjb25zdCBjaGFyICpfX25wdHIpOw0KDQpmbG9hdCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBhdG9mZiAoY29uc3QgY2hhciAqX19ucHRyKTsNCg0KaW50IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGF0b2kgKGNvbnN0IGNoYXIgKl9fbnB0cik7DQpsb25n IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGF0b2wgKGNvbnN0IGNoYXIgKl9fbnB0cik7DQp2 b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYnNlYXJjaCAoY29uc3Qgdm9pZCAqIF9f a2V5LCBjb25zdCB2b2lkICogX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwg aW50ICgqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9jb21wYXIpIChjb25zdCB2b2lkICos IGNvbnN0IHZvaWQgKikpOw0KDQoNCg0KDQp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSk7DQpkaXZfdCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSk7DQp2b2lk IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGV4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1 dGVfXyAoKG5vcmV0dXJuKSk7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZyZWUg KHZvaWQgKik7DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0ZW52IChjb25z dCBjaGFyICpfX3N0cmluZyk7DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2dl dGVudl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKl9fc3RyaW5nKTsNCmNoYXIgKiBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZmluZGVudiAoY29uc3QgY2hhciAqLCBpbnQgKik7 DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2ZpbmRlbnZfciAoc3RydWN0IF9y ZWVudCAqLCBjb25zdCBjaGFyICosIGludCAqKTsNCmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgbGFicyAobG9uZyk7DQpsZGl2X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbGRp diAobG9uZyBfX251bWVyLCBsb25nIF9fZGVub20pOw0Kdm9pZCAqIF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIG1hbGxvYyAoc2l6ZV90IF9fc2l6ZSk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgbWJsZW4gKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsNCmludCBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBfbWJsZW5fciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIHNp emVfdCwgX21ic3RhdGVfdCAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtYnRv d2MgKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0KaW50IF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIF9tYnRvd2NfciAoc3RydWN0IF9yZWVudCAqLCB3Y2hhcl90ICosIGNvbnN0 IGNoYXIgKiwgc2l6ZV90LCBfbWJzdGF0ZV90ICopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2Rl Y2xfXykpIHdjdG9tYiAoY2hhciAqLCB3Y2hhcl90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSBfd2N0b21iX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCB3Y2hhcl90LCBfbWJz dGF0ZV90ICopOw0Kc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1ic3Rvd2NzICh3 Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsNCnNpemVfdCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBfbWJzdG93Y3NfciAoc3RydWN0IF9yZWVudCAqLCB3Y2hhcl90ICosIGNvbnN0 IGNoYXIgKiwgc2l6ZV90LCBfbWJzdGF0ZV90ICopOw0Kc2l6ZV90IF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIHdjc3RvbWJzIChjaGFyICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsNCnNp emVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfd2NzdG9tYnNfciAoc3RydWN0IF9yZWVu dCAqLCBjaGFyICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90LCBfbWJzdGF0ZV90ICopOw0KDQoN CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBta3N0ZW1wIChjaGFyICopOw0KY2hhciAq IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1rdGVtcCAoY2hhciAqKTsNCg0KDQp2b2lkIF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHFzb3J0ICh2b2lkICogX19iYXNlLCBzaXplX3QgX19u bWVtYiwgc2l6ZV90IF9fc2l6ZSwgaW50KCpfY29tcGFyKShjb25zdCB2b2lkICosIGNvbnN0IHZv aWQgKikpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJhbmQgKHZvaWQpOw0Kdm9p ZCAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJlYWxsb2MgKHZvaWQgKiBfX3IsIHNpemVf dCBfX3NpemUpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzcmFuZCAodW5zaWdu ZWQgX19zZWVkKTsNCmRvdWJsZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJ0b2QgKGNv bnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUik7DQpkb3VibGUgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgX3N0cnRvZF9yIChzdHJ1Y3QgX3JlZW50ICosY29uc3QgY2hhciAqX19uLCBj aGFyICoqX19lbmRfUFRSKTsNCmZsb2F0IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnRv ZiAoY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSKTsNCg0KDQoNCg0KDQoNCmxvbmcg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydG9sIChjb25zdCBjaGFyICpfX24sIGNoYXIg KipfX2VuZF9QVFIsIGludCBfX2Jhc2UpOw0KbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBfc3RydG9sX3IgKHN0cnVjdCBfcmVlbnQgKixjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2Vu ZF9QVFIsIGludCBfX2Jhc2UpOw0KdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBzdHJ0b3VsIChjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBfX2Jh c2UpOw0KdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc3RydG91bF9y IChzdHJ1Y3QgX3JlZW50ICosY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSLCBpbnQg X19iYXNlKTsNCg0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN5c3RlbSAoY29uc3Qg Y2hhciAqX19zdHJpbmcpOw0KDQoNCmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYTY0 bCAoY29uc3QgY2hhciAqX19pbnB1dCk7DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgbDY0YSAobG9uZyBfX2lucHV0KTsNCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBfbDY0YV9yIChzdHJ1Y3QgX3JlZW50ICosbG9uZyBfX2lucHV0KTsNCmludCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBvbl9leGl0ICh2b2lkICgqX19mdW5jKShpbnQsIHZvaWQgKiksdm9p ZCAqIF9fYXJnKTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX0V4aXQgKGludCBf X3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7DQppbnQgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgcHV0ZW52IChjb25zdCBjaGFyICpfX3N0cmluZyk7DQppbnQgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgX3B1dGVudl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIg Kl9fc3RyaW5nKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXRlbnYgKGNvbnN0 IGNoYXIgKl9fc3RyaW5nLCBjb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19vdmVyd3JpdGUpOw0K aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9zZXRlbnZfciAoc3RydWN0IF9yZWVudCAq LCBjb25zdCBjaGFyICpfX3N0cmluZywgY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fb3Zlcndy aXRlKTsNCg0KY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdjdnQgKGRvdWJsZSxp bnQsY2hhciAqKTsNCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnY3Z0ZiAoZmxv YXQsaW50LGNoYXIgKik7DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmN2dCAo ZG91YmxlLGludCxpbnQgKixpbnQgKik7DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgZmN2dGYgKGZsb2F0LGludCxpbnQgKixpbnQgKik7DQpjaGFyICogX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgZWN2dCAoZG91YmxlLGludCxpbnQgKixpbnQgKik7DQpjaGFyICogX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgZWN2dGJ1ZiAoZG91YmxlLCBpbnQsIGludCosIGludCosIGNo YXIgKik7DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmN2dGJ1ZiAoZG91Ymxl LCBpbnQsIGludCosIGludCosIGNoYXIgKik7DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgZWN2dGYgKGZsb2F0LGludCxpbnQgKixpbnQgKik7DQpjaGFyICogX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgZHRvYSAoZG91YmxlLCBpbnQsIGludCwgaW50ICosIGludCosIGNoYXIq Kik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcmFuZF9yICh1bnNpZ25lZCAqX19z ZWVkKTsNCg0KZG91YmxlIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGRyYW5kNDggKHZvaWQp Ow0KZG91YmxlIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9kcmFuZDQ4X3IgKHN0cnVjdCBf cmVlbnQgKik7DQpkb3VibGUgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZXJhbmQ0OCAodW5z aWduZWQgc2hvcnQgWzNdKTsNCmRvdWJsZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZXJh bmQ0OF9yIChzdHJ1Y3QgX3JlZW50ICosIHVuc2lnbmVkIHNob3J0IFszXSk7DQpsb25nIF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IFszXSk7DQpsb25n IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9qcmFuZDQ4X3IgKHN0cnVjdCBfcmVlbnQgKiwg dW5zaWduZWQgc2hvcnQgWzNdKTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbGNv bmc0OCAodW5zaWduZWQgc2hvcnQgWzddKTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgX2xjb25nNDhfciAoc3RydWN0IF9yZWVudCAqLCB1bnNpZ25lZCBzaG9ydCBbN10pOw0KbG9u ZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBscmFuZDQ4ICh2b2lkKTsNCmxvbmcgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgX2xyYW5kNDhfciAoc3RydWN0IF9yZWVudCAqKTsNCmxvbmcg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbXJhbmQ0OCAodm9pZCk7DQpsb25nIF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIF9tcmFuZDQ4X3IgKHN0cnVjdCBfcmVlbnQgKik7DQpsb25nIF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IFszXSk7DQps b25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9ucmFuZDQ4X3IgKHN0cnVjdCBfcmVlbnQg KiwgdW5zaWduZWQgc2hvcnQgWzNdKTsNCnVuc2lnbmVkIHNob3J0ICoNCiAgICAgICBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBzZWVkNDggKHVuc2lnbmVkIHNob3J0IFszXSk7DQp1bnNpZ25l ZCBzaG9ydCAqDQogICAgICAgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3NlZWQ0OF9yIChz dHJ1Y3QgX3JlZW50ICosIHVuc2lnbmVkIHNob3J0IFszXSk7DQp2b2lkIF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIHNyYW5kNDggKGxvbmcpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBfc3JhbmQ0OF9yIChzdHJ1Y3QgX3JlZW50ICosIGxvbmcpOw0KbG9uZyBsb25nIF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnRvbGwgKGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9f ZW5kX1BUUiwgaW50IF9fYmFzZSk7DQpsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgX3N0cnRvbGxfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICpfX24sIGNoYXIgKipf X2VuZF9QVFIsIGludCBfX2Jhc2UpOw0KdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIHN0cnRvdWxsIChjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIs IGludCBfX2Jhc2UpOw0KdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIF9zdHJ0b3VsbF9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKl9fbiwgY2hhciAq Kl9fZW5kX1BUUiwgaW50IF9fYmFzZSk7DQoNCg0KDQoNCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSByZWFscGF0aCAoY29uc3QgY2hhciAqLCBjaGFyICopOw0Kdm9pZCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSB1bnNldGVudiAoY29uc3QgY2hhciAqX19zdHJpbmcpOw0Kdm9p ZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdW5zZXRlbnZfciAoc3RydWN0IF9yZWVudCAq LCBjb25zdCBjaGFyICpfX3N0cmluZyk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg cmFuZG9tICh2b2lkKTsNCmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3JhbmRvbSAo dW5zaWduZWQgX19zZWVkKTsNCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwdHNu YW1lIChpbnQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdyYW50cHQgKGludCk7 DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdW5sb2NrcHQgKGludCk7DQoNCg0KDQoN CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZHRvYV9yIChzdHJ1Y3QgX3JlZW50 ICosIGRvdWJsZSwgaW50LCBpbnQsIGludCAqLCBpbnQqLCBjaGFyKiopOw0KDQoNCg0KDQoNCg0K DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3N5c3RlbV9yIChzdHJ1Y3QgX3JlZW50 ICosIGNvbnN0IGNoYXIgKik7DQoNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX19l cHJpbnRmIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50LCBjb25zdCBj aGFyICopOw0KIyAyMTMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMw0KfQ0KIyA1MyAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvY3N0ZGxpYiIgMiAzDQojIDg0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9j c3RkbGliIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHVzaW5nIDo6ZGl2X3Q7DQogIHVzaW5nIDo6 bGRpdl90Ow0KDQogIHVzaW5nIDo6YWJvcnQ7DQogIHVzaW5nIDo6YWJzOw0KICB1c2luZyA6OmF0 ZXhpdDsNCiAgdXNpbmcgOjphdG9mOw0KICB1c2luZyA6OmF0b2k7DQogIHVzaW5nIDo6YXRvbDsN CiAgdXNpbmcgOjpic2VhcmNoOw0KICB1c2luZyA6OmNhbGxvYzsNCiAgdXNpbmcgOjpkaXY7DQog IHVzaW5nIDo6ZXhpdDsNCiAgdXNpbmcgOjpmcmVlOw0KICB1c2luZyA6OmdldGVudjsNCiAgdXNp bmcgOjpsYWJzOw0KICB1c2luZyA6OmxkaXY7DQogIHVzaW5nIDo6bWFsbG9jOw0KICB1c2luZyA6 Om1ibGVuOw0KICB1c2luZyA6Om1ic3Rvd2NzOw0KICB1c2luZyA6Om1idG93YzsNCiAgdXNpbmcg Ojpxc29ydDsNCiAgdXNpbmcgOjpyYW5kOw0KICB1c2luZyA6OnJlYWxsb2M7DQogIHVzaW5nIDo6 c3JhbmQ7DQogIHVzaW5nIDo6c3RydG9kOw0KICB1c2luZyA6OnN0cnRvbDsNCiAgdXNpbmcgOjpz dHJ0b3VsOw0KICB1c2luZyA6OnN5c3RlbTsNCiAgdXNpbmcgOjp3Y3N0b21iczsNCiAgdXNpbmcg Ojp3Y3RvbWI7DQoNCiAgaW5saW5lIGxvbmcNCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJz KF9faSk7IH0NCg0KICBpbmxpbmUgbGRpdl90DQogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsg cmV0dXJuIGxkaXYoX19pLCBfX2opOyB9DQp9DQojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi92 YWxhcnJheSIgMiAzDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL251bWVyaWMiIDEgMw0KIyA2 NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbnVtZXJpYyIgMw0KDQoNCiMgMSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvaXRlcmF0b3IiIDEgMw0KIyA2NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaXRlcmF0 b3IiIDMNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jh c2VfdHlwZXMuaCIgMSAzDQojIDY4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVy YXRvcl9iYXNlX3R5cGVzLmgiIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KIyA4MCAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzDQogIHN0cnVjdCBp bnB1dF9pdGVyYXRvcl90YWcge307DQoNCiAgc3RydWN0IG91dHB1dF9pdGVyYXRvcl90YWcge307 DQoNCiAgc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9y X3RhZyB7fTsNCg0KICBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMg Zm9yd2FyZF9pdGVyYXRvcl90YWcge307DQoNCiAgc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0 b3JfdGFnIDogcHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9Ow0KIyAxMDAgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMw0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2F0ZWdvcnksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Rpc3Rh bmNlID0gcHRyZGlmZl90LA0KICAgICAgICAgICB0eXBlbmFtZSBfUG9pbnRlciA9IF9UcCosIHR5 cGVuYW1lIF9SZWZlcmVuY2UgPSBfVHAmPg0KICAgIHN0cnVjdCBpdGVyYXRvciB7DQoNCiAgICAg IHR5cGVkZWYgX0NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5Ow0KDQogICAgICB0eXBlZGVmIF9U cCB2YWx1ZV90eXBlOw0KDQogICAgICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7 DQoNCiAgICAgIHR5cGVkZWYgX1BvaW50ZXIgcG9pbnRlcjsNCg0KICAgICAgdHlwZWRlZiBfUmVm ZXJlbmNlIHJlZmVyZW5jZTsNCiAgICB9Ow0KDQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvcj4NCiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzIHsNCiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29y eTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5 cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRp ZmZlcmVuY2VfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVy IHBvaW50ZXI7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJl ZmVyZW5jZTsNCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICBzdHJ1Y3Qg aXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsNCiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVy YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7DQogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl Ow0KICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOw0KICAgICAgdHlwZWRl ZiBfVHAqIHBvaW50ZXI7DQogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOw0KICAgIH07DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29u c3QgX1RwKj4gew0KICAgICAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVy YXRvcl9jYXRlZ29yeTsNCiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQogICAgICB0eXBl ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7DQogICAgICB0eXBlZGVmIGNvbnN0IF9UcCog cG9pbnRlcjsNCiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7DQogICAgfTsNCg0K DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4NCiAgICBpbmxpbmUgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkNCiAgICBfX2l0ZXJh dG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJikNCiAgICB7IHJldHVybiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpOyB9DQoNCn0NCiMgNjggIi91c3Iv aW5jbHVkZS9jKysvMy4yL2l0ZXJhdG9yIiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMNCiMgNjggIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMw0KIyAxICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzDQojIDM5ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMw0KIyA2OSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAyIDMNCg0KDQoNCg0KbmFtZXNwYWNl IHN0ZA0Kew0KdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+DQogIGlubGluZSB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUNCiAg X19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs IGlucHV0X2l0ZXJhdG9yX3RhZykNCiAgew0KDQogICANCg0KICAgIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOw0KICAgIHdo aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICAgKytfX2ZpcnN0OyArK19fbjsNCiAgICB9 DQogICAgcmV0dXJuIF9fbjsNCiAgfQ0KDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlcmF0b3I+DQogIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlDQogIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAg ICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpDQogIHsNCg0KICAgDQogICAgcmV0dXJuIF9f bGFzdCAtIF9fZmlyc3Q7DQogIH0NCiMgMTExICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMNCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJh dG9yPg0KICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6 ZGlmZmVyZW5jZV90eXBlDQogIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1 dEl0ZXJhdG9yIF9fbGFzdCkNCiAgew0KDQogICAgcmV0dXJuIF9fZGlzdGFuY2UoX19maXJzdCwg X19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAgfQ0KDQp0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+DQogIGlubGluZSB2b2lkDQog IF9fYWR2YW5jZShfSW5wdXRJdGVyJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9y X3RhZykNCiAgew0KDQogICANCiAgICB3aGlsZSAoX19uLS0pICsrX19pOw0KICB9DQoNCnRlbXBs YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4N CiAgaW5saW5lIHZvaWQNCiAgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwg X0Rpc3RhbmNlIF9fbiwNCiAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQ0K ICB7DQoNCiAgIA0KDQogICAgaWYgKF9fbiA+IDApDQogICAgICB3aGlsZSAoX19uLS0pICsrX19p Ow0KICAgIGVsc2UNCiAgICAgIHdoaWxlIChfX24rKykgLS1fX2k7DQogIH0NCg0KdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+DQogIGlu bGluZSB2b2lkDQogIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3Rh bmNlIF9fbiwNCiAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQ0KICB7DQoN CiAgIA0KICAgIF9faSArPSBfX247DQogIH0NCiMgMTY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMNCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+DQogIGlubGluZSB2b2lkDQogIGFkdmFuY2Uo X0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikNCiAgew0KDQogICAgX19hZHZhbmNl KF9faSwgX19uLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOw0KICB9DQoNCn0NCiMgNjkgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2l0ZXJhdG9yIiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAzDQojIDY4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9pdGVyYXRvci5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQojIDg5ICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9J dGVyYXRvcj4NCiAgICBjbGFzcyByZXZlcnNlX2l0ZXJhdG9yDQogICAgOiBwdWJsaWMgaXRlcmF0 b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5 LA0KICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0 b3I+Ojp2YWx1ZV90eXBlLA0KICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsDQogICAgICAgICAgICAgICAgICAg ICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsDQogICAgICAg ICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVy ZW5jZT4NCiAgICB7DQogICAgcHJvdGVjdGVkOg0KICAgICAgX0l0ZXJhdG9yIGN1cnJlbnQ7DQoN CiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOw0KICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5j ZV90eXBlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJlbmNlOw0KICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVy Ow0KDQogICAgcHVibGljOg0KDQoNCg0KICAgICAgcmV2ZXJzZV9pdGVyYXRvcigpIHsgfQ0KDQoN Cg0KDQogICAgICBleHBsaWNpdA0KICAgICAgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBl IF9feCkgOiBjdXJyZW50KF9feCkgeyB9DQoNCg0KDQoNCiAgICAgIHJldmVyc2VfaXRlcmF0b3Io Y29uc3QgcmV2ZXJzZV9pdGVyYXRvciYgX194KQ0KICAgICAgOiBjdXJyZW50KF9feC5jdXJyZW50 KSB7IH0NCg0KDQoNCg0KDQogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4NCiAgICAgICAg cmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQ0KICAg ICAgICA6IGN1cnJlbnQoX194LmJhc2UoKSkgeyB9DQoNCg0KDQoNCiAgICAgIGl0ZXJhdG9yX3R5 cGUNCiAgICAgIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9DQoNCg0KDQoNCg0KDQog ICAgICByZWZlcmVuY2UNCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0DQogICAgICB7DQogICAgICAg IF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7DQogICAgICAgIHJldHVybiAqLS1fX3RtcDsNCiAg ICAgIH0NCg0KDQoNCg0KDQoNCiAgICAgIHBvaW50ZXINCiAgICAgIG9wZXJhdG9yLT4oKSBjb25z dCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQ0KDQoNCg0KDQoNCg0KICAgICAgcmV2ZXJzZV9p dGVyYXRvciYNCiAgICAgIG9wZXJhdG9yKysoKQ0KICAgICAgew0KICAgICAgICAtLWN1cnJlbnQ7 DQogICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0NCg0KDQoNCg0KDQoNCiAgICAgIHJldmVy c2VfaXRlcmF0b3INCiAgICAgIG9wZXJhdG9yKysoaW50KQ0KICAgICAgew0KICAgICAgICByZXZl cnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7DQogICAgICAgIC0tY3VycmVudDsNCiAgICAgICAg cmV0dXJuIF9fdG1wOw0KICAgICAgfQ0KDQoNCg0KDQoNCg0KICAgICAgcmV2ZXJzZV9pdGVyYXRv ciYNCiAgICAgIG9wZXJhdG9yLS0oKQ0KICAgICAgew0KICAgICAgICArK2N1cnJlbnQ7DQogICAg ICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0NCg0KDQoNCg0KDQoNCiAgICAgIHJldmVyc2VfaXRl cmF0b3Igb3BlcmF0b3ItLShpbnQpDQogICAgICB7DQogICAgICAgIHJldmVyc2VfaXRlcmF0b3Ig X190bXAgPSAqdGhpczsNCiAgICAgICAgKytjdXJyZW50Ow0KICAgICAgICByZXR1cm4gX190bXA7 DQogICAgICB9DQoNCg0KDQoNCg0KDQogICAgICByZXZlcnNlX2l0ZXJhdG9yDQogICAgICBvcGVy YXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QNCiAgICAgIHsgcmV0dXJuIHJldmVyc2Vf aXRlcmF0b3IoY3VycmVudCAtIF9fbik7IH0NCg0KDQoNCg0KDQoNCiAgICAgIHJldmVyc2VfaXRl cmF0b3ImDQogICAgICBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pDQogICAgICB7DQog ICAgICAgIGN1cnJlbnQgLT0gX19uOw0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgICB9DQoN Cg0KDQoNCg0KDQogICAgICByZXZlcnNlX2l0ZXJhdG9yDQogICAgICBvcGVyYXRvci0oZGlmZmVy ZW5jZV90eXBlIF9fbikgY29uc3QNCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3Vy cmVudCArIF9fbik7IH0NCg0KDQoNCg0KDQoNCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImDQogICAg ICBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX24pDQogICAgICB7DQogICAgICAgIGN1cnJl bnQgKz0gX19uOw0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgICB9DQoNCg0KDQoNCg0KDQog ICAgICByZWZlcmVuY2UNCiAgICAgIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29u c3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0NCiAgICB9Ow0KIyAyNjkgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0 ZXJhdG9yPg0KICAgIGlubGluZSBib29sDQogICAgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwNCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRl cmF0b3I8X0l0ZXJhdG9yPiYgX195KQ0KICAgIHsgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJh c2UoKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4NCiAgICBpbmxpbmUgYm9v bA0KICAgIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwN CiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpDQog ICAgeyByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSXRlcmF0b3I+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvciE9KGNvbnN0IHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LA0KICAgICAgICAgICAgICAgY29uc3QgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpDQogICAgeyByZXR1cm4gIShfX3ggPT0gX195 KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4NCiAgICBpbmxpbmUgYm9vbA0K ICAgIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwNCiAg ICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpDQogICAg eyByZXR1cm4gX195IDwgX194OyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPg0K ICAgIGlubGluZSBib29sDQogICAgb3BlcmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J dGVyYXRvcj4mIF9feCwNCiAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J dGVyYXRvcj4mIF9feSkNCiAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0NCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSXRlcmF0b3I+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj49KGNv bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LA0KICAgICAgICAgICAgICAgY29u c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpDQogICAgeyByZXR1cm4gIShfX3gg PCBfX3kpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPg0KICAgIGlubGluZSB0 eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0KICAg IG9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwNCiAgICAg ICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpDQogICAgeyBy ZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNlKCk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SXRlcmF0b3I+DQogICAgaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPg0KICAgIG9w ZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2Vf dHlwZSBfX24sDQogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y PiYgX194KQ0KICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFz ZSgpIC0gX19uKTsgfQ0KIyAzMjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJh dG9yLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4NCiAgICBjbGFzcyBiYWNr X2luc2VydF9pdGVyYXRvcg0KICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90 YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+DQogICAgew0KICAgIHByb3RlY3RlZDoNCiAgICAg IF9Db250YWluZXIqIGNvbnRhaW5lcjsNCg0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBf Q29udGFpbmVyIGNvbnRhaW5lcl90eXBlOw0KDQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBiYWNr X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHsgfQ0K IyAzNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMNCiAgICAg IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWlu ZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQ0KICAgICAgew0KICAgICAgICBjb250YWluZXIt PnB1c2hfYmFjayhfX3ZhbHVlKTsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0KDQoN CiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4g KnRoaXM7IH0NCg0KDQogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYNCiAgICAgIG9wZXJhdG9y KysoKSB7IHJldHVybiAqdGhpczsgfQ0KDQoNCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yDQog ICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgICB9Ow0KIyAzODQgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NvbnRhaW5lcj4NCiAgICBpbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRh aW5lcj4NCiAgICBiYWNrX2luc2VydGVyKF9Db250YWluZXImIF9feCkNCiAgICB7IHJldHVybiBi YWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9DQojIDM5NyAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q29udGFpbmVyPg0KICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvcg0KICAgIDogcHVibGlj IGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+DQog ICAgew0KICAgIHByb3RlY3RlZDoNCiAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsNCg0KICAg IHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOw0KDQoN CiAgICAgIGV4cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDog Y29udGFpbmVyKCZfX3gpIHsgfQ0KIyA0MjIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2l0ZXJhdG9yLmgiIDMNCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYNCiAgICAgIG9wZXJh dG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkNCiAgICAg IHsNCiAgICAgICAgY29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOw0KICAgICAgICByZXR1 cm4gKnRoaXM7DQogICAgICB9DQoNCg0KICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJg0KICAg ICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0NCg0KDQogICAgICBmcm9udF9pbnNlcnRf aXRlcmF0b3ImDQogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0NCg0KDQogICAg ICBmcm9udF9pbnNlcnRfaXRlcmF0b3INCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAq dGhpczsgfQ0KICAgIH07DQojIDQ1MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRl cmF0b3IuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPg0KICAgIGlubGluZSBm cm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4NCiAgICBmcm9udF9pbnNlcnRlcihfQ29u dGFpbmVyJiBfX3gpDQogICAgeyByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWlu ZXI+KF9feCk7IH0NCiMgNDcwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRv ci5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+DQogICAgY2xhc3MgaW5zZXJ0 X2l0ZXJhdG9yDQogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9p ZCwgdm9pZCwgdm9pZCwgdm9pZD4NCiAgICB7DQogICAgcHJvdGVjdGVkOg0KICAgICAgX0NvbnRh aW5lciogY29udGFpbmVyOw0KICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRl cjsNCg0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90 eXBlOw0KDQoNCg0KDQoNCiAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5 cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkNCiAgICAgIDogY29udGFpbmVyKCZfX3gp LCBpdGVyKF9faSkge30NCiMgNTEyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVy YXRvci5oIiAzDQogICAgICBpbnNlcnRfaXRlcmF0b3ImDQogICAgICBvcGVyYXRvcj0oY29uc3Qg dHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpDQogICAgICB7DQog ICAgICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsNCiAgICAgICAg KytpdGVyOw0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgICB9DQoNCg0KICAgICAgaW5zZXJ0 X2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0NCg0KDQogICAg ICBpbnNlcnRfaXRlcmF0b3ImDQogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0N Cg0KDQogICAgICBpbnNlcnRfaXRlcmF0b3ImDQogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1 cm4gKnRoaXM7IH0NCiAgICB9Ow0KIyA1NDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2l0ZXJhdG9yLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lciwgdHlwZW5hbWUg X0l0ZXJhdG9yPg0KICAgIGlubGluZSBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4NCiAgICBp bnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpDQogICAgew0KICAgICAgcmV0 dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yKF9faSkp Ow0KICAgIH0NCn0NCg0KbmFtZXNwYWNlIF9fZ251X2N4eA0Kew0KDQoNCg0KDQoNCg0KDQogIHVz aW5nIHN0ZDo6aXRlcmF0b3JfdHJhaXRzOw0KICB1c2luZyBzdGQ6Oml0ZXJhdG9yOw0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+DQogICAgY2xhc3Mg X19ub3JtYWxfaXRlcmF0b3INCiAgICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwNCiAgICAgICAgICAgICAg ICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBl LA0KICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy YXRvcj46OmRpZmZlcmVuY2VfdHlwZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLA0KICAgICAgICAgICAgICAgICAg ICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4NCiAg ICB7DQogICAgcHJvdGVjdGVkOg0KICAgICAgX0l0ZXJhdG9yIF9NX2N1cnJlbnQ7DQoNCiAgICBw dWJsaWM6DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+ OjpkaWZmZXJlbmNlX3R5cGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsNCiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7 DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2lu dGVyIHBvaW50ZXI7DQoNCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9J dGVyYXRvcigpKSB7IH0NCg0KICAgICAgZXhwbGljaXQNCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9y KGNvbnN0IF9JdGVyYXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0NCg0KDQogICAgICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4NCiAgICAgIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcihj b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwgX0NvbnRhaW5lcj4mIF9faSkNCiAgICAgICAg OiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQ0KDQoNCiAgICAgIHJlZmVyZW5jZQ0KICAgICAg b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKl9NX2N1cnJlbnQ7IH0NCg0KICAgICAgcG9pbnRl cg0KICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0NCg0KICAg ICAgX19ub3JtYWxfaXRlcmF0b3ImDQogICAgICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7 IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBfX25vcm1hbF9pdGVyYXRvcg0KICAgICAgb3BlcmF0 b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQrKyk7IH0NCg0K DQogICAgICBfX25vcm1hbF9pdGVyYXRvciYNCiAgICAgIG9wZXJhdG9yLS0oKSB7IC0tX01fY3Vy cmVudDsgcmV0dXJuICp0aGlzOyB9DQoNCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yDQogICAgICBv cGVyYXRvci0tKGludCkgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudC0tKTsg fQ0KDQoNCiAgICAgIHJlZmVyZW5jZQ0KICAgICAgb3BlcmF0b3JbXShjb25zdCBkaWZmZXJlbmNl X3R5cGUmIF9fbikgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQ0KDQog ICAgICBfX25vcm1hbF9pdGVyYXRvciYNCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5j ZV90eXBlJiBfX24pDQogICAgICB7IF9NX2N1cnJlbnQgKz0gX19uOyByZXR1cm4gKnRoaXM7IH0N Cg0KICAgICAgX19ub3JtYWxfaXRlcmF0b3INCiAgICAgIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJl bmNlX3R5cGUmIF9fbikgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9N X2N1cnJlbnQgKyBfX24pOyB9DQoNCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJg0KICAgICAgb3Bl cmF0b3ItPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikNCiAgICAgIHsgX01fY3VycmVudCAt PSBfX247IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBfX25vcm1hbF9pdGVyYXRvcg0KICAgICAg b3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdA0KICAgICAgeyByZXR1 cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCAtIF9fbik7IH0NCg0KICAgICAgY29uc3Qg X0l0ZXJhdG9yJg0KICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0NCiAg ICB9Ow0KIyA2NDUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlw ZW5hbWUgX0NvbnRhaW5lcj4NCiAgaW5saW5lIGJvb2wNCiAgb3BlcmF0b3I9PShjb25zdCBfX25v cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsDQogICAgICAgICAg ICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhz KQ0KICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KICBpbmxpbmUgYm9v bA0KICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRh aW5lcj4mIF9fbGhzLA0KICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy YXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQ0KICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19y aHMuYmFzZSgpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUg X0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4NCiAgaW5saW5lIGJvb2wNCiAgb3BlcmF0 b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19s aHMsDQogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0Nv bnRhaW5lcj4mIF9fcmhzKQ0KICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgp OyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVy Pg0KICBpbmxpbmUgYm9vbA0KICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J dGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLA0KICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFs X2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQ0KICB7IHJldHVybiBfX2xo cy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl cmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KICBpbmxp bmUgYm9vbA0KICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwg X0NvbnRhaW5lcj4mIF9fbGhzLA0KICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8 X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQ0KICB7IHJldHVybiBfX2xocy5iYXNlKCkg PCBfX3Jocy5iYXNlKCk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVu YW1lIF9Db250YWluZXI+DQogIGlubGluZSBib29sDQogIG9wZXJhdG9yPChjb25zdCBfX25vcm1h bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywNCiAgICAgICAgICAgICBj b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykNCiAg eyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5l cj4NCiAgaW5saW5lIGJvb2wNCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J dGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywNCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFs X2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykNCiAgeyByZXR1cm4gX19s aHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh dG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KICBpbmxpbmUgYm9vbA0KICBvcGVyYXRvcj4oY29u c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsDQogICAg ICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBf X3JocykNCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUg X0NvbnRhaW5lcj4NCiAgaW5saW5lIGJvb2wNCiAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9p dGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsDQogICAgICAgICAgICAgY29u c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQ0KICB7 IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KICBpbmxpbmUgYm9vbA0KICBv cGVyYXRvcjw9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4m IF9fbGhzLA0KICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwg X0NvbnRhaW5lcj4mIF9fcmhzKQ0KICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFz ZSgpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJh dG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4NCiAgaW5saW5lIGJvb2wNCiAgb3BlcmF0b3I+PShj b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsDQog ICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5l cj4mIF9fcmhzKQ0KICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KICBp bmxpbmUgYm9vbA0KICBvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv ciwgX0NvbnRhaW5lcj4mIF9fbGhzLA0KICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJh dG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQ0KICB7IHJldHVybiBfX2xocy5iYXNl KCkgPj0gX19yaHMuYmFzZSgpOyB9DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl cmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KICBpbmxp bmUgdHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj46OmRp ZmZlcmVuY2VfdHlwZQ0KICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLA0KICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0 ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykNCiAgeyByZXR1cm4gX19saHMu YmFzZSgpIC0gX19yaHMuYmFzZSgpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y LCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yLCBfQ29udGFpbmVyPg0KICBvcGVyYXRvcisodHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8 X0l0ZXJhdG9yLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwNCiAgICAgICAgICAg IGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9faSkNCiAg eyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPihfX2kuYmFz ZSgpICsgX19uKTsgfQ0KfQ0KIyA3MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaXRlcmF0b3IiIDIg Mw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9vc3RyZWFtIiAxIDMNCiMgNDQgIi91c3IvaW5j bHVkZS9jKysvMy4yL29zdHJlYW0iIDMNCg0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb3Mi IDEgMw0KIyA0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAzDQoNCiMgMSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvaW9zZndkIiAxIDMNCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc2Z3 ZCIgMw0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJpbmdmd2QuaCIgMSAz DQojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmluZ2Z3ZC5oIiAzDQoNCg0KDQpu YW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4NCiAgICBzdHJ1Y3QgY2hh cl90cmFpdHM7DQoNCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj47DQoNCg0K DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPg0KICAgIGNsYXNzIGFsbG9jYXRvcjsNCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0 czxfQ2hhclQ+LA0KICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJU PiA+DQogICAgY2xhc3MgYmFzaWNfc3RyaW5nOw0KDQogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNo YXI+IHN0cmluZzsNCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8d2NoYXJfdD4gd3N0cmluZzsNCn0N CiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc2Z3ZCIgMiAzDQojIDEgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2JpdHMvZnBvcy5oIiAxIDMNCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvZnBvcy5oIiAzDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3aW4v Yml0cy9jKytpby5oIiAxIDMNCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtY3ln d2luL2JpdHMvYysraW8uaCIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDEg Mw0KIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAzDQoNCg0KDQoNCiMgMSAiL3Vz ci9pbmNsdWRlL3N0ZGlvLmgiIDEgMw0KIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMNCiMg MSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRkZWYuaCIg MSAzDQojIDM1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzDQoNCg0KIyAxICIvdXNyL2xpYi9n Y2MtbGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMNCiMgNDQgIi91 c3IvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy4yL2luY2x1ZGUvc3RkYXJnLmgiIDMNCnR5 cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7DQojIDM4ICIvdXNyL2luY2x1 ZGUvc3RkaW8uaCIgMiAzDQojIDQ2ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMw0KIyAxICIvdXNy L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMw0KIyAyNCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o IiAzDQp0eXBlZGVmIHNob3J0IGludCBfX2ludDE2X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0 IGludCBfX3VpbnQxNl90Ow0KDQoNCg0KDQoNCnR5cGVkZWYgaW50IF9faW50MzJfdDsNCnR5cGVk ZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7DQoNCg0KDQoNCg0KDQpfX2V4dGVuc2lvbl9fIHR5 cGVkZWYgbG9uZyBsb25nIF9faW50NjRfdDsNCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25l ZCBsb25nIGxvbmcgX191aW50NjRfdDsNCiMgNTkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg Mw0KIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMNCiMgNjAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzDQojIDEgIi91c3Iv aW5jbHVkZS9tYWNoaW5lL3R5cGVzLmgiIDEgMw0KIyAzNiAiL3Vzci9pbmNsdWRlL21hY2hpbmUv dHlwZXMuaCIgMw0KdHlwZWRlZiBsb25nIGludCBfX29mZl90Ow0KdHlwZWRlZiBpbnQgX19waWRf dDsNCg0KX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19sb2ZmX3Q7DQojIDYx ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMw0KIyA4MiAiL3Vzci9pbmNsdWRlL3N5cy90 eXBlcy5oIiAzDQp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdV9jaGFyOw0KdHlwZWRlZiB1bnNpZ25l ZCBzaG9ydCB1X3Nob3J0Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ7DQp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgdV9sb25nOw0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2hvcnQ7 DQp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50Ow0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBsb25n IGNsb2NrX3Q7DQoNCg0KDQoNCnR5cGVkZWYgbG9uZyB0aW1lX3Q7DQoNCg0KDQoNCnN0cnVjdCB0 aW1lc3BlYyB7DQogIHRpbWVfdCB0dl9zZWM7DQogIGxvbmcgdHZfbnNlYzsNCn07DQoNCnN0cnVj dCBpdGltZXJzcGVjIHsNCiAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOw0KICBzdHJ1Y3Qg dGltZXNwZWMgaXRfdmFsdWU7DQp9Ow0KDQoNCnR5cGVkZWYgbG9uZyBkYWRkcl90Ow0KdHlwZWRl ZiBjaGFyICogY2FkZHJfdDsNCg0KDQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW5vX3Q7DQojIDEz MCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzDQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdm1f b2Zmc2V0X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdm1fc2l6ZV90Ow0KDQoNCg0KdHlwZWRl ZiBjaGFyIGludDhfdDsNCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1X2ludDhfdDsNCnR5cGVkZWYg c2hvcnQgaW50MTZfdDsNCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9pbnQxNl90Ow0KdHlwZWRl ZiBpbnQgaW50MzJfdDsNCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdDsNCnR5cGVkZWYg bG9uZyBsb25nIGludDY0X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1X2ludDY0X3Q7 DQp0eXBlZGVmIGludDMyX3QgcmVnaXN0ZXJfdDsNCiMgMTY5ICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDMNCnR5cGVkZWYgaW50IHBpZF90Ow0KdHlwZWRlZiBsb25nIGtleV90Ow0KdHlwZWRl ZiBfc3NpemVfdCBzc2l6ZV90Ow0KDQoNCnR5cGVkZWYgY2hhciAqIGFkZHJfdDsNCnR5cGVkZWYg aW50IG1vZGVfdDsNCiMgMTg4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMNCnR5cGVkZWYg dW5zaWduZWQgc2hvcnQgbmxpbmtfdDsNCiMgMjEwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi IDMNCnR5cGVkZWYgbG9uZyBmZF9tYXNrOw0KDQoNCg0KDQoNCg0KDQp0eXBlZGVmIHN0cnVjdCBf dHlwZXNfZmRfc2V0IHsNCiAgICAgICAgZmRfbWFzayBmZHNfYml0c1soKCg2NCkrKCgoc2l6ZW9m IChmZF9tYXNrKSAqIDgpKS0xKSkvKChzaXplb2YgKGZkX21hc2spICogOCkpKV07DQp9IF90eXBl c19mZF9zZXQ7DQojIDI0NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzDQp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgY2xvY2tpZF90Ow0KDQoNCg0KDQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdGlt ZXJfdDsNCg0KDQoNCg0KdHlwZWRlZiBsb25nIHVzZWNvbmRzX3Q7DQoNCg0KIyAxICIvdXNyL2lu Y2x1ZGUvc3lzL2ZlYXR1cmVzLmgiIDEgMw0KIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJl cy5oIiAzDQpleHRlcm4gIkMiIHsNCiMgOTMgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZXMuaCIg Mw0KfQ0KIyAyNjAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzDQojIDM2NCAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAzDQojIDEgIi91c3IvaW5jbHVkZS9jeWd3aW4vdHlwZXMuaCIg MSAzDQojIDEzICIvdXNyL2luY2x1ZGUvY3lnd2luL3R5cGVzLmgiIDMNCmV4dGVybiAiQyINCnsN Cg0KDQoNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMw0KIyAyMSAi L3Vzci9pbmNsdWRlL2N5Z3dpbi90eXBlcy5oIiAyIDMNCg0KdHlwZWRlZiBzdHJ1Y3QgdGltZXNw ZWMgdGltZXNwZWNfdCwgdGltZXN0cnVjX3Q7DQoNCnR5cGVkZWYgbG9uZyBfX29mZjMyX3Q7DQp0 eXBlZGVmIGxvbmcgbG9uZyBfX29mZjY0X3Q7DQoNCg0KDQp0eXBlZGVmIF9fb2ZmMzJfdCBvZmZf dDsNCg0KDQp0eXBlZGVmIHNob3J0IF9fZGV2MTZfdDsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBf X2RldjMyX3Q7DQoNCg0KDQp0eXBlZGVmIF9fZGV2MTZfdCBkZXZfdDsNCg0KDQp0eXBlZGVmIGxv bmcgYmxrc2l6ZV90Ow0KDQp0eXBlZGVmIGxvbmcgX19ibGtjbnQzMl90Ow0KdHlwZWRlZiBsb25n IGxvbmcgX19ibGtjbnQ2NF90Ow0KDQoNCg0KdHlwZWRlZiBfX2Jsa2NudDMyX3QgYmxrY250X3Q7 DQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3VpZDE2X3Q7DQp0eXBlZGVmIHVuc2lnbmVk IHNob3J0IF9fZ2lkMTZfdDsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VpZDMyX3Q7DQp0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgX19naWQzMl90Ow0KDQoNCg0KDQp0eXBlZGVmIF9fdWlkMTZfdCB1 aWRfdDsNCnR5cGVkZWYgX19naWQxNl90IGdpZF90Ow0KDQoNCg0KDQp0eXBlZGVmIHN0cnVjdCBf X3B0aHJlYWRfdCB7Y2hhciBfX2R1bW15O30gKnB0aHJlYWRfdDsNCnR5cGVkZWYgc3RydWN0IF9f cHRocmVhZF9tdXRleF90IHtjaGFyIF9fZHVtbXk7fSAqcHRocmVhZF9tdXRleF90Ow0KDQp0eXBl ZGVmIHN0cnVjdCBfX3B0aHJlYWRfa2V5X3Qge2NoYXIgX19kdW1teTt9ICpwdGhyZWFkX2tleV90 Ow0KdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfdCB7Y2hhciBfX2R1bW15O30gKnB0aHJl YWRfYXR0cl90Ow0KdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX211dGV4YXR0cl90IHtjaGFyIF9f ZHVtbXk7fSAqcHRocmVhZF9tdXRleGF0dHJfdDsNCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9j b25kYXR0cl90IHtjaGFyIF9fZHVtbXk7fSAqcHRocmVhZF9jb25kYXR0cl90Ow0KdHlwZWRlZiBz dHJ1Y3QgX19wdGhyZWFkX2NvbmRfdCB7Y2hhciBfX2R1bW15O30gKnB0aHJlYWRfY29uZF90Ow0K DQoNCnR5cGVkZWYgc3RydWN0DQp7DQogIHB0aHJlYWRfbXV0ZXhfdCBtdXRleDsNCiAgaW50IHN0 YXRlOw0KfQ0KcHRocmVhZF9vbmNlX3Q7DQp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfcndsb2Nr X3Qge2NoYXIgX19kdW1teTt9ICpwdGhyZWFkX3J3bG9ja190Ow0KdHlwZWRlZiBzdHJ1Y3QgX19w dGhyZWFkX3J3bG9ja2F0dHJfdCB7Y2hhciBfX2R1bW15O30gKnB0aHJlYWRfcndsb2NrYXR0cl90 Ow0KIyAxMDQgIi91c3IvaW5jbHVkZS9jeWd3aW4vdHlwZXMuaCIgMw0KfQ0KIyAzNjUgIi91c3Iv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzDQojIDQ3ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAz DQoNCmV4dGVybiAiQyIgew0KDQp0eXBlZGVmIF9mcG9zX3QgZnBvc190Ow0KdHlwZWRlZiBfX0ZJ TEUgRklMRTsNCg0KDQoNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RkaW8uaCIgMSAzDQoj IDU4ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzDQojIDE2MiAiL3Vzci9pbmNsdWRlL3N0ZGlv LmgiIDMNCkZJTEUgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB0bXBmaWxlICh2b2lkKTsN CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB0bXBuYW0gKGNoYXIgKik7DQppbnQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmNsb3NlIChGSUxFICopOw0KaW50IF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIGZmbHVzaCAoRklMRSAqKTsNCkZJTEUgKiBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBmcmVvcGVuIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgRklMRSAq KTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0YnVmIChGSUxFICosIGNoYXIg Kik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0dmJ1ZiAoRklMRSAqLCBjaGFy ICosIGludCwgc2l6ZV90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmcHJpbnRm IChGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBmc2NhbmYgKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOw0KaW50IF9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIHByaW50ZiAoY29uc3QgY2hhciAqLCAuLi4pOw0KaW50IF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIHNjYW5mIChjb25zdCBjaGFyICosIC4uLik7DQppbnQgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgc3NjYW5mIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwg Li4uKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB2ZnByaW50ZiAoRklMRSAqLCBj b25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSB2cHJpbnRmIChjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsNCmludCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSB2c3ByaW50ZiAoY2hhciAqLCBjb25zdCBjaGFyICosIF9fZ251 Y192YV9saXN0KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmZ2V0YyAoRklMRSAq KTsNCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmZ2V0cyAoY2hhciAqLCBpbnQs IEZJTEUgKik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnB1dGMgKGludCwgRklM RSAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmcHV0cyAoY29uc3QgY2hhciAq LCBGSUxFICopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldGMgKEZJTEUgKik7 DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0Y2hhciAodm9pZCk7DQpjaGFyICog X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0cyAoY2hhciAqKTsNCmludCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBwdXRjIChpbnQsIEZJTEUgKik7DQppbnQgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgcHV0Y2hhciAoaW50KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBwdXRzIChjb25zdCBjaGFyICopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHVu Z2V0YyAoaW50LCBGSUxFICopOw0Kc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZy ZWFkICh2b2lkICosIHNpemVfdCBfc2l6ZSwgc2l6ZV90IF9uLCBGSUxFICopOw0Kc2l6ZV90IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZ3cml0ZSAoY29uc3Qgdm9pZCAqICwgc2l6ZV90IF9z aXplLCBzaXplX3QgX24sIEZJTEUgKik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg ZmdldHBvcyAoRklMRSAqLCBmcG9zX3QgKik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgZnNlZWsgKEZJTEUgKiwgbG9uZywgaW50KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBmc2V0cG9zIChGSUxFICosIGNvbnN0IGZwb3NfdCAqKTsNCmxvbmcgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgZnRlbGwgKCBGSUxFICopOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSByZXdpbmQgKEZJTEUgKik7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IGNsZWFyZXJyIChGSUxFICopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZlb2Yg KEZJTEUgKik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmVycm9yIChGSUxFICop Ow0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwZXJyb3IgKGNvbnN0IGNoYXIgKik7 DQoNCkZJTEUgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmb3BlbiAoY29uc3QgY2hhciAq X25hbWUsIGNvbnN0IGNoYXIgKl90eXBlKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBzcHJpbnRmIChjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsNCmludCBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSByZW1vdmUgKGNvbnN0IGNoYXIgKik7DQppbnQgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgcmVuYW1lIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQoNCg0KaW50 IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGFzcHJpbnRmIChjaGFyICoqLCBjb25zdCBjaGFy ICosIC4uLik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnNlZWtvIChGSUxFICos IG9mZl90LCBpbnQpOw0Kb2ZmX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnRlbGxvICgg RklMRSAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB2ZmlwcmludGYgKEZJTEUg KiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgaXByaW50ZiAoY29uc3QgY2hhciAqLCAuLi4pOw0KaW50IF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIGZpcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsNCmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzaXByaW50ZiAoY2hhciAqLCBjb25zdCBjaGFyICos IC4uLik7DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdGVtcG5hbSAoY29uc3Qg Y2hhciAqLCBjb25zdCBjaGFyICopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHZh c3ByaW50ZiAoY2hhciAqKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7DQppbnQgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdnNucHJpbnRmIChjaGFyICosIHNpemVfdCwgY29uc3Qg Y2hhciAqLCBfX2dudWNfdmFfbGlzdCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg dmZzY2FuZiAoRklMRSAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsNCmludCBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB2c2NhbmYgKGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xp c3QpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHZzc2NhbmYgKGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7DQoNCmludCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBmY2xvc2VhbGwgKHZvaWQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIHNucHJpbnRmIChjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOw0KIyAyMzEg Ii91c3IvaW5jbHVkZS9zdGRpby5oIiAzDQpGSUxFICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgZmRvcGVuIChpbnQsIGNvbnN0IGNoYXIgKik7DQoNCmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSBmaWxlbm8gKEZJTEUgKik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg Z2V0dyAoRklMRSAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwY2xvc2UgKEZJ TEUgKik7DQpGSUxFICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcG9wZW4gKGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwdXR3 IChpbnQsIEZJTEUgKik7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNldGJ1ZmZl ciAoRklMRSAqLCBjaGFyICosIGludCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg c2V0bGluZWJ1ZiAoRklMRSAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXRj X3VubG9ja2VkIChGSUxFICopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldGNo YXJfdW5sb2NrZWQgKHZvaWQpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmbG9j a2ZpbGUgKEZJTEUgKik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnRyeWxvY2tm aWxlIChGSUxFICopOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmdW5sb2NrZmls ZSAoRklMRSAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwdXRjX3VubG9ja2Vk IChpbnQsIEZJTEUgKik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcHV0Y2hhcl91 bmxvY2tlZCAoaW50KTsNCg0KDQoNCg0KDQoNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBfYXNwcmludGZfciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICoqLCBjb25zdCBjaGFyICosIC4u Lik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2ZjbG9zZWFsbF9yIChzdHJ1Y3Qg X3JlZW50ICopOw0KRklMRSAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9mZG9wZW5fciAo c3RydWN0IF9yZWVudCAqLCBpbnQsIGNvbnN0IGNoYXIgKik7DQpGSUxFICogX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgX2ZvcGVuX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9mc2NhbmZfciAo c3RydWN0IF9yZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsNCmludCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBfZ2V0Y2hhcl9yIChzdHJ1Y3QgX3JlZW50ICopOw0KY2hhciAq IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9nZXRzX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hh ciAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfaXByaW50Zl9yIChzdHJ1Y3Qg X3JlZW50ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBfbWtzdGVtcF9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKik7DQpjaGFyICogX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgX21rdGVtcF9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKik7 DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9wZXJyb3JfciAoc3RydWN0IF9yZWVu dCAqLCBjb25zdCBjaGFyICopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9wcmlu dGZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIC4uLik7DQppbnQgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgX3B1dGNoYXJfciAoc3RydWN0IF9yZWVudCAqLCBpbnQpOw0KaW50 IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9wdXRzX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29u c3QgY2hhciAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfcmVtb3ZlX3IgKHN0 cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBfcmVuYW1lX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqX29sZCwgY29uc3Qg Y2hhciAqX25ldyk7DQoNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc2NhbmZfciAo c3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIC4uLik7DQppbnQgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgX3NwcmludGZfciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICosIGNvbnN0IGNo YXIgKiwgLi4uKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc25wcmludGZfciAo c3RydWN0IF9yZWVudCAqLCBjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOw0KaW50 IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9zc2NhbmZfciAoc3RydWN0IF9yZWVudCAqLCBj b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsNCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBfdGVtcG5hbV9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgY29u c3QgY2hhciAqKTsNCkZJTEUgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdG1wZmlsZV9y IChzdHJ1Y3QgX3JlZW50ICopOw0KY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF90 bXBuYW1fciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICopOw0KaW50IF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIF92YXNwcmludGZfciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICoqLCBjb25zdCBj aGFyICosIF9fZ251Y192YV9saXN0KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBf dmZwcmludGZfciAoc3RydWN0IF9yZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgX19nbnVj X3ZhX2xpc3QpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF92cHJpbnRmX3IgKHN0 cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7DQppbnQgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgX3ZzcHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAq LCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSBfdnNucHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCBzaXplX3QsIGNv bnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIF92ZnNjYW5mX3IgKHN0cnVjdCBfcmVlbnQgKiwgRklMRSAqLCBjb25zdCBjaGFyICosIF9f Z251Y192YV9saXN0KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdnNjYW5mX3Ig KHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7DQppbnQgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3Zzc2NhbmZfciAoc3RydWN0IF9yZWVudCAqLCBjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOw0KDQpzc2l6ZV90IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIF9fZ2V0ZGVsaW0gKGNoYXIgKiosIHNpemVfdCAqLCBpbnQs IEZJTEUgKik7DQpzc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9fZ2V0bGluZSAo Y2hhciAqKiwgc2l6ZV90ICosIEZJTEUgKik7DQojIDMwOSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgi IDMNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfX3NyZ2V0IChGSUxFICopOw0KaW50 IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9fc3didWYgKGludCwgRklMRSAqKTsNCg0KDQoN Cg0KDQoNCkZJTEUgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZ1bm9wZW4gKGNvbnN0IHZv aWQgKiBfY29va2llLCBpbnQgKCpyZWFkZm4pKHZvaWQgKiBfY29va2llLCBjaGFyICpfYnVmLCBp bnQgX24pLCBpbnQgKCp3cml0ZWZuKSh2b2lkICogX2Nvb2tpZSwgY29uc3QgY2hhciAqX2J1Ziwg aW50IF9uKSwgZnBvc190ICgqc2Vla2ZuKSh2b2lkICogX2Nvb2tpZSwgZnBvc190IF9vZmYsIGlu dCBfd2hlbmNlKSwgaW50ICgqY2xvc2Vmbikodm9pZCAqIF9jb29raWUpKTsNCiMgMzM0ICIvdXNy L2luY2x1ZGUvc3RkaW8uaCIgMw0Kc3RhdGljIF9faW5saW5lX18gaW50IF9fc2dldGMoRklMRSAq X19wKQ0KICB7DQogICAgaW50IF9fYyA9ICgtLShfX3ApLT5fciA8IDAgPyBfX3NyZ2V0KF9fcCkg OiAoaW50KSgqKF9fcCktPl9wKyspKTsNCiAgICBpZiAoKF9fcC0+X2ZsYWdzICYgMHg0MDAwKSAm JiAoX19jID09ICdccicpKQ0KICAgICAgew0KICAgICAgaW50IF9fYzIgPSAoLS0oX19wKS0+X3Ig PCAwID8gX19zcmdldChfX3ApIDogKGludCkoKihfX3ApLT5fcCsrKSk7DQogICAgICBpZiAoX19j MiA9PSAnXG4nKQ0KICAgICAgICBfX2MgPSBfX2MyOw0KICAgICAgZWxzZQ0KICAgICAgICB1bmdl dGMoX19jMiwgX19wKTsNCiAgICAgIH0NCiAgICByZXR1cm4gX19jOw0KICB9DQojIDQxNiAiL3Vz ci9pbmNsdWRlL3N0ZGlvLmgiIDMNCn0NCiMgNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRp byIgMiAzDQojIDk3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDMNCm5hbWVzcGFjZSBz dGQNCnsNCiAgdXNpbmcgOjpGSUxFOw0KICB1c2luZyA6OmZwb3NfdDsNCg0KICB1c2luZyA6OmNs ZWFyZXJyOw0KICB1c2luZyA6OmZjbG9zZTsNCiAgdXNpbmcgOjpmZW9mOw0KICB1c2luZyA6OmZl cnJvcjsNCiAgdXNpbmcgOjpmZmx1c2g7DQogIHVzaW5nIDo6ZmdldGM7DQogIHVzaW5nIDo6Zmdl dHBvczsNCiAgdXNpbmcgOjpmZ2V0czsNCiAgdXNpbmcgOjpmb3BlbjsNCiAgdXNpbmcgOjpmcHJp bnRmOw0KICB1c2luZyA6OmZwdXRjOw0KICB1c2luZyA6OmZwdXRzOw0KICB1c2luZyA6OmZyZWFk Ow0KICB1c2luZyA6OmZyZW9wZW47DQogIHVzaW5nIDo6ZnNjYW5mOw0KICB1c2luZyA6OmZzZWVr Ow0KICB1c2luZyA6OmZzZXRwb3M7DQogIHVzaW5nIDo6ZnRlbGw7DQogIHVzaW5nIDo6ZndyaXRl Ow0KICB1c2luZyA6OmdldGM7DQogIHVzaW5nIDo6Z2V0Y2hhcjsNCiAgdXNpbmcgOjpnZXRzOw0K ICB1c2luZyA6OnBlcnJvcjsNCiAgdXNpbmcgOjpwcmludGY7DQogIHVzaW5nIDo6cHV0YzsNCiAg dXNpbmcgOjpwdXRjaGFyOw0KICB1c2luZyA6OnB1dHM7DQogIHVzaW5nIDo6cmVtb3ZlOw0KICB1 c2luZyA6OnJlbmFtZTsNCiAgdXNpbmcgOjpyZXdpbmQ7DQogIHVzaW5nIDo6c2NhbmY7DQogIHVz aW5nIDo6c2V0YnVmOw0KICB1c2luZyA6OnNldHZidWY7DQogIHVzaW5nIDo6c3ByaW50ZjsNCiAg dXNpbmcgOjpzc2NhbmY7DQogIHVzaW5nIDo6dG1wZmlsZTsNCiAgdXNpbmcgOjp0bXBuYW07DQog IHVzaW5nIDo6dW5nZXRjOw0KICB1c2luZyA6OnZmcHJpbnRmOw0KICB1c2luZyA6OnZwcmludGY7 DQogIHVzaW5nIDo6dnNwcmludGY7DQp9DQojIDM2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pNjg2 LXBjLWN5Z3dpbi9iaXRzL2MrK2lvLmgiIDIgMw0KDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y L2k2ODYtcGMtY3lnd2luL2JpdHMvZ3Roci5oIiAxIDMNCiMgMTAyICIvdXNyL2luY2x1ZGUvYysr LzMuMi9pNjg2LXBjLWN5Z3dpbi9iaXRzL2d0aHIuaCIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysr LzMuMi9pNjg2LXBjLWN5Z3dpbi9iaXRzL2d0aHItc2luZ2xlLmgiIDEgMw0KIyAzNCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3aW4vYml0cy9ndGhyLXNpbmdsZS5oIiAzDQp0eXBl ZGVmIGludCBfX2d0aHJlYWRfbXV0ZXhfdDsNCiMgMjExICIvdXNyL2luY2x1ZGUvYysrLzMuMi9p Njg2LXBjLWN5Z3dpbi9iaXRzL2d0aHItc2luZ2xlLmgiIDMNCnN0YXRpYyBpbmxpbmUgaW50DQpf X2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpDQp7DQogIHJldHVybiAwOw0KfQ0KDQpzdGF0aWMgaW5s aW5lIGludA0KX19ndGhyZWFkX211dGV4X2xvY2sgKF9fZ3RocmVhZF9tdXRleF90ICogKQ0Kew0K ICByZXR1cm4gMDsNCn0NCg0Kc3RhdGljIGlubGluZSBpbnQNCl9fZ3RocmVhZF9tdXRleF90cnls b2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqICkNCnsNCiAgcmV0dXJuIDA7DQp9DQoNCnN0YXRpYyBp bmxpbmUgaW50DQpfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqICkN CnsNCiAgcmV0dXJuIDA7DQp9DQojIDEwMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1j eWd3aW4vYml0cy9ndGhyLmgiIDIgMw0KIyAzOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1w Yy1jeWd3aW4vYml0cy9jKytpby5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQogIHR5cGVk ZWYgbG9uZyBzdHJlYW1vZmY7DQogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7DQoNCg0K DQogIHR5cGVkZWYgZnBvc190IF9fY19zdHJlYW1wb3M7DQoNCiAgdHlwZWRlZiBfX2d0aHJlYWRf bXV0ZXhfdCBfX2NfbG9jazsNCg0KDQogIHR5cGVkZWYgRklMRSBfX2NfZmlsZTsNCg0KDQogIHN0 cnVjdCBfX2lvc19mbGFncw0KICB7DQogICAgdHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOw0KDQog ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYm9vbGFscGhhID0gMHgwMDAxOw0KICAgIHN0 YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9IDB4MDAwMjsNCiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19maXhlZCA9IDB4MDAwNDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19oZXggPSAweDAwMDg7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW50ZXJu YWwgPSAweDAwMTA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfbGVmdCA9IDB4MDAy MDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vY3QgPSAweDAwNDA7DQogICAgc3Rh dGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAwODA7DQogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1Nfc2NpZW50aWZpYyA9IDB4MDEwMDsNCiAgICBzdGF0aWMgY29uc3QgX19p bnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19zaG93cG9pbnQgPSAweDA0MDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf c2hvd3BvcyA9IDB4MDgwMDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19za2lwd3Mg PSAweDEwMDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4MjAw MDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191cHBlcmNhc2UgPSAweDQwMDA7DQog ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYWRqdXN0ZmllbGQgPSAweDAwMjAgfCAweDAw ODAgfCAweDAwMTA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0g MHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2Zsb2F0ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7DQoNCg0KICAgIHN0YXRpYyBjb25zdCBfX2lu dF90eXBlIF9TX2JhZGJpdCA9IDB4MDE7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf ZW9mYml0ID0gMHgwMjsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWlsYml0ID0g MHgwNDsNCg0KDQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsNCiAg ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hdGUgPSAweDAyOw0KICAgIHN0YXRpYyBjb25z dCBfX2ludF90eXBlIF9TX2JpbiA9IDB4MDQ7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg X1NfaW4gPSAweDA4Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX291dCA9IDB4MTA7 DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIwOw0KICB9Ow0KfQ0K IyA0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mcG9zLmgiIDIgMw0KIyAxICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9jd2NoYXIiIDEgMw0KIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3dj aGFyIiAzDQoNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2N0aW1lIiAxIDMNCiMgNDgg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2N0aW1lIiAzDQoNCg0KDQojIDEgIi91c3IvaW5jbHVkZS90 aW1lLmgiIDEgMw0KIyAxOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMw0KIyAxICIvdXNyL2luY2x1 ZGUvbWFjaGluZS90aW1lLmgiIDEgMw0KIyAxOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzDQoj IDI3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzDQojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1w Yy1jeWd3aW4vMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMw0KIyAyOCAiL3Vzci9pbmNsdWRlL3Rp bWUuaCIgMiAzDQoNCg0KDQpleHRlcm4gIkMiIHsNCg0Kc3RydWN0IHRtDQp7DQogIGludCB0bV9z ZWM7DQogIGludCB0bV9taW47DQogIGludCB0bV9ob3VyOw0KICBpbnQgdG1fbWRheTsNCiAgaW50 IHRtX21vbjsNCiAgaW50IHRtX3llYXI7DQogIGludCB0bV93ZGF5Ow0KICBpbnQgdG1feWRheTsN CiAgaW50IHRtX2lzZHN0Ow0KfTsNCg0KY2xvY2tfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBjbG9jayAodm9pZCk7DQpkb3VibGUgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZGlmZnRp bWUgKHRpbWVfdCBfdGltZTIsIHRpbWVfdCBfdGltZTEpOw0KdGltZV90IF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIG1rdGltZSAoc3RydWN0IHRtICpfdGltZXB0cik7DQp0aW1lX3QgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgdGltZSAodGltZV90ICpfdGltZXIpOw0KDQpjaGFyICpfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBhc2N0aW1lIChjb25zdCBzdHJ1Y3QgdG0gKl90YmxvY2sp Ow0KY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgY3RpbWUgKGNvbnN0IHRpbWVfdCAq X3RpbWUpOw0Kc3RydWN0IHRtICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnbXRpbWUgKGNv bnN0IHRpbWVfdCAqX3RpbWVyKTsNCnN0cnVjdCB0bSAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgbG9jYWx0aW1lIChjb25zdCB0aW1lX3QgKl90aW1lcik7DQoNCnNpemVfdCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBzdHJmdGltZSAoY2hhciAqX3MsIHNpemVfdCBfbWF4c2l6ZSwgY29u c3QgY2hhciAqX2ZtdCwgY29uc3Qgc3RydWN0IHRtICpfdCk7DQoNCmNoYXIgKl9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIGFzY3RpbWVfciAoY29uc3Qgc3RydWN0IHRtICosIGNoYXIgKik7DQpj aGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBjdGltZV9yIChjb25zdCB0aW1lX3QgKiwg Y2hhciAqKTsNCnN0cnVjdCB0bSAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ210aW1lX3Ig KGNvbnN0IHRpbWVfdCAqLCBzdHJ1Y3QgdG0gKik7DQpzdHJ1Y3QgdG0gKl9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIGxvY2FsdGltZV9yIChjb25zdCB0aW1lX3QgKiwgc3RydWN0IHRtICopOw0K DQp9DQoNCg0KZXh0ZXJuICJDIiB7DQoNCg0KDQpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBzdHJwdGltZSAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHN0cnVjdCB0bSAqKTsN CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdHpzZXQgKHZvaWQpOw0Kdm9pZCBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdHpzZXRfciAoc3RydWN0IF9yZWVudCAqKTsNCiMgOTgg Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMNCmV4dGVybiBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQp KSB0aW1lX3QgX3RpbWV6b25lOw0KZXh0ZXJuIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGlu dCBfZGF5bGlnaHQ7DQpleHRlcm4gX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgY2hhciAqX3R6 bmFtZVsyXTsNCiMgMTE3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzDQpjaGFyICpfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSB0aW1lem9uZSAodm9pZCk7DQoNCg0KDQoNCg0KfQ0KIyAxNjkgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDMNCmV4dGVybiAiQyIgew0KDQppbnQgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgbmFub3NsZWVwIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnJxdHAsIHN0cnVj dCB0aW1lc3BlYyAqcm10cCk7DQoNCn0NCg0KDQoNCg0KDQpleHRlcm4gIkMiIHsNCiMgMjQ3ICIv dXNyL2luY2x1ZGUvdGltZS5oIiAzDQp9DQojIDUyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jdGlt ZSIgMiAzDQojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jdGltZSIgMw0KbmFtZXNwYWNlIHN0 ZA0Kew0KICB1c2luZyA6OmNsb2NrX3Q7DQogIHVzaW5nIDo6dGltZV90Ow0KICB1c2luZyA6OnRt Ow0KDQogIHVzaW5nIDo6Y2xvY2s7DQogIHVzaW5nIDo6ZGlmZnRpbWU7DQogIHVzaW5nIDo6bWt0 aW1lOw0KICB1c2luZyA6OnRpbWU7DQogIHVzaW5nIDo6YXNjdGltZTsNCiAgdXNpbmcgOjpjdGlt ZTsNCiAgdXNpbmcgOjpnbXRpbWU7DQogIHVzaW5nIDo6bG9jYWx0aW1lOw0KICB1c2luZyA6OnN0 cmZ0aW1lOw0KfQ0KIyA1MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAyIDMNCg0KDQoj IDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMNCiMgOSAiL3Vzci9pbmNsdWRlL3djaGFyLmgi IDMNCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRk ZWYuaCIgMSAzDQojIDEwICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzDQojIDM0ICIvdXNyL2lu Y2x1ZGUvd2NoYXIuaCIgMw0KZXh0ZXJuICJDIiB7DQoNCg0KDQp0eXBlZGVmIF9tYnN0YXRlX3Qg bWJzdGF0ZV90Ow0KDQoNCndpbnRfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBidG93YyAo aW50KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3RvYiAod2ludF90KTsNCnNp emVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtYnJsZW4gKGNvbnN0IGNoYXIgKiAsIHNp emVfdCwgbWJzdGF0ZV90ICopOw0Kc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1i cnRvd2MgKHdjaGFyX3QgKiAsIGNvbnN0IGNoYXIgKiAsIHNpemVfdCwgbWJzdGF0ZV90ICopOw0K aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1ic2luaXQgKGNvbnN0IG1ic3RhdGVfdCAq KTsNCnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtYnNydG93Y3MgKHdjaGFyX3Qg KiAsIGNvbnN0IGNoYXIgKiogLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsNCnNpemVfdCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSB3Y3J0b21iIChjaGFyICogLCB3Y2hhcl90LCBtYnN0YXRlX3Qg Kik7DQpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2NzcnRvbWJzIChjaGFyICog LCBjb25zdCB3Y2hhcl90ICoqICwgc2l6ZV90LCBtYnN0YXRlX3QgKik7DQp3Y2hhcl90ICpfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NjYXQgKHdjaGFyX3QgKiAsIGNvbnN0IHdjaGFyX3Qg Kik7DQp3Y2hhcl90ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NjaHIgKGNvbnN0IHdj aGFyX3QgKiwgd2NoYXJfdCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2NzY21w IChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7DQp3Y2hhcl90ICpfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSB3Y3NjcHkgKHdjaGFyX3QgKiAsIGNvbnN0IHdjaGFyX3QgKik7DQpz aXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2NzY3NwbiAoY29uc3Qgd2NoYXJfdCAq LCBjb25zdCB3Y2hhcl90ICopOw0Kc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdj c2xjYXQgKHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOw0Kc2l6ZV90IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIHdjc2xjcHkgKHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAq LCBzaXplX3QpOw0Kc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdjc2xlbiAoY29u c3Qgd2NoYXJfdCAqKTsNCndjaGFyX3QgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdjc25j YXQgKHdjaGFyX3QgKiAsIGNvbnN0IHdjaGFyX3QgKiAsIHNpemVfdCk7DQppbnQgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgd2NzbmNtcCAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90 ICosIHNpemVfdCk7DQp3Y2hhcl90ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NuY3B5 ICh3Y2hhcl90ICogLCBjb25zdCB3Y2hhcl90ICogLCBzaXplX3QpOw0Kd2NoYXJfdCAqX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgd2NzcGJyayAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hh cl90ICopOw0Kd2NoYXJfdCAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2NzcmNociAoY29u c3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsNCnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSB3Y3NzcG4gKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsNCndjaGFyX3QgKl9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdjc3N0ciAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3 Y2hhcl90ICopOw0Kd2NoYXJfdCAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd21lbWNociAo Y29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90LCBzaXplX3QpOw0KaW50IF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIHdtZW1jbXAgKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXpl X3QpOw0Kd2NoYXJfdCAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd21lbWNweSAod2NoYXJf dCAqICwgY29uc3Qgd2NoYXJfdCAqICwgc2l6ZV90KTsNCndjaGFyX3QgKl9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIHdtZW1tb3ZlICh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90 KTsNCndjaGFyX3QgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdtZW1zZXQgKHdjaGFyX3Qg Kiwgd2NoYXJfdCwgc2l6ZV90KTsNCg0KfQ0KIyA1NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3dj aGFyIiAyIDMNCiMgNjkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2N3Y2hhciIgMw0KbmFtZXNwYWNl IHN0ZA0Kew0KICB1c2luZyA6Om1ic3RhdGVfdDsNCn0NCiMgNDYgIi91c3IvaW5jbHVkZS9jKysv My4yL2JpdHMvZnBvcy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfU3RhdGVUPg0KICAgIGNsYXNzIGZwb3MNCiAgICB7DQogICAgcHVibGljOg0K DQogICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90eXBlOw0KDQogICAgcHJpdmF0ZToNCiAg ICAgIHN0cmVhbW9mZiBfTV9vZmY7DQogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7DQoNCiAgICBw dWJsaWM6DQogICAgICBfX3N0YXRlX3R5cGUNCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g X01fc3Q7IH0NCg0KICAgICAgdm9pZA0KICAgICAgc3RhdGUoX19zdGF0ZV90eXBlIF9fc3QpIHsg X01fc3QgPSBfX3N0OyB9DQoNCg0KDQogICAgICBmcG9zKCk6IF9NX29mZihzdHJlYW1vZmYoKSks IF9NX3N0KF9fc3RhdGVfdHlwZSgpKSB7IH0NCg0KICAgICAgZnBvcyhzdHJlYW1vZmYgX19vZmYs IF9fc3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpDQogICAgICA6IF9NX29mZihfX29m ZiksIF9NX3N0KF9fc3QpIHsgfQ0KDQogICAgICBvcGVyYXRvciBzdHJlYW1vZmYoKSBjb25zdCB7 IHJldHVybiBfTV9vZmY7IH0NCg0KICAgICAgZnBvcyYNCiAgICAgIG9wZXJhdG9yKz0oc3RyZWFt b2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9DQoNCiAgICAgIGZw b3MmDQogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgLT0gX19vZmY7 IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBmcG9zDQogICAgICBvcGVyYXRvcisoc3RyZWFtb2Zm IF9fb2ZmKQ0KICAgICAgew0KICAgICAgICBmcG9zIF9fdCgqdGhpcyk7DQogICAgICAgIF9fdCAr PSBfX29mZjsNCiAgICAgICAgcmV0dXJuIF9fdDsNCiAgICAgIH0NCg0KICAgICAgZnBvcw0KICAg ICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikNCiAgICAgIHsNCiAgICAgICAgZnBvcyBfX3Qo KnRoaXMpOw0KICAgICAgICBfX3QgLT0gX19vZmY7DQogICAgICAgIHJldHVybiBfX3Q7DQogICAg ICB9DQoNCiAgICAgIGJvb2wNCiAgICAgIG9wZXJhdG9yPT0oY29uc3QgZnBvcyYgX19wb3MpIGNv bnN0DQogICAgICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01fb2ZmOyB9DQoNCiAgICAgIGJv b2wNCiAgICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0DQogICAgICB7IHJl dHVybiBfTV9vZmYgIT0gX19wb3MuX01fb2ZmOyB9DQoNCiAgICAgIHN0cmVhbW9mZg0KICAgICAg X01fcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0NCg0KICAgICAgdm9pZA0KICAg ICAgX01fcG9zaXRpb24oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9DQogICAg fTsNCg0KDQogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVhbXBvczsNCg0KDQoNCn0NCiMg NDcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc2Z3ZCIgMiAzDQojIDEgIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzDQojIDM0ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0 aW9uX2RlZmluZXMuaCIgMSAzDQojIDM1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0 ZXhjZXB0LmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCiAgdm9pZA0KICBfX3Rocm93X2Jh ZF9leGNlcHRpb24odm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQp Ow0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOw0KDQogIHZvaWQNCiAgX190 aHJvd19iYWRfdHlwZWlkKHZvaWQpOw0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2xvZ2ljX2Vycm9y KGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25z dCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0 IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFy KiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19z KTsNCg0KICB2b2lkDQogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K DQogIHZvaWQNCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZv aWQNCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQN CiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KDQogIHZvaWQN CiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOw0KfQ0KIyA0OCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvaW9zZndkIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ ID4NCiAgICBjbGFzcyBiYXNpY19pb3M7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+DQogICAgY2xhc3MgYmFzaWNf c3RyZWFtYnVmOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW07DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8 X0NoYXJUPiA+DQogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4NCiAgICBj bGFzcyBiYXNpY19pb3N0cmVhbTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LA0KICAgICAgICAgICAgdHlwZW5hbWUg X0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX3N0cmluZ2J1ZjsN Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry YWl0czxfQ2hhclQ+LA0KICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0No YXJUPiA+DQogICAgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTsNCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LA0KICAg ICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+DQogICAgY2xhc3Mg YmFzaWNfb3N0cmluZ3N0cmVhbTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LA0KICAgICAgICAgICB0eXBlbmFtZSBf QWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFt Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf dHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWY7DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+ DQogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+DQogICAgY2xhc3MgYmFz aWNfb2ZzdHJlYW07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+DQogICAgY2xhc3MgYmFzaWNfZnN0cmVhbTsNCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0 czxfQ2hhclQ+ID4NCiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOw0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4g Pg0KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7DQoNCg0KDQogIGNsYXNzIGlvc19iYXNl Ow0KDQoNCiAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4gaW9zOw0KICB0eXBlZGVmIGJhc2ljX3N0 cmVhbWJ1ZjxjaGFyPiBzdHJlYW1idWY7DQogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyPiBp c3RyZWFtOw0KICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcj4gb3N0cmVhbTsNCiAgdHlwZWRl ZiBiYXNpY19pb3N0cmVhbTxjaGFyPiBpb3N0cmVhbTsNCiAgdHlwZWRlZiBiYXNpY19zdHJpbmdi dWY8Y2hhcj4gc3RyaW5nYnVmOw0KICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4g aXN0cmluZ3N0cmVhbTsNCiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+IG9zdHJp bmdzdHJlYW07DQogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0cmluZ3N0cmVh bTsNCiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXI+IGZpbGVidWY7DQogIHR5cGVkZWYgYmFz aWNfaWZzdHJlYW08Y2hhcj4gaWZzdHJlYW07DQogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08Y2hh cj4gb2ZzdHJlYW07DQogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTxjaGFyPiBmc3RyZWFtOw0KDQog IHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+IHdpb3M7DQogIHR5cGVkZWYgYmFzaWNfc3RyZWFt YnVmPHdjaGFyX3Q+IHdzdHJlYW1idWY7DQogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90 PiB3aXN0cmVhbTsNCiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+IHdvc3RyZWFtOw0K ICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPHdjaGFyX3Q+IHdpb3N0cmVhbTsNCiAgdHlwZWRlZiBi YXNpY19zdHJpbmdidWY8d2NoYXJfdD4gd3N0cmluZ2J1ZjsNCiAgdHlwZWRlZiBiYXNpY19pc3Ry aW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3RyaW5nc3RyZWFtOw0KICB0eXBlZGVmIGJhc2ljX29zdHJp bmdzdHJlYW08d2NoYXJfdD4gd29zdHJpbmdzdHJlYW07DQogIHR5cGVkZWYgYmFzaWNfc3RyaW5n c3RyZWFtPHdjaGFyX3Q+IHdzdHJpbmdzdHJlYW07DQogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1Zjx3 Y2hhcl90PiB3ZmlsZWJ1ZjsNCiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTx3Y2hhcl90PiB3aWZz dHJlYW07DQogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08d2NoYXJfdD4gd29mc3RyZWFtOw0KICB0 eXBlZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4gd2ZzdHJlYW07DQp9DQojIDQ1ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9pb3MiIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRp b24iIDEgMw0KIyA0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uIiAzDQpleHRlcm4g IkMrKyIgew0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQoNCg0KDQogIGNsYXNzIGV4Y2VwdGlv bg0KICB7DQogIHB1YmxpYzoNCiAgICBleGNlcHRpb24oKSB0aHJvdygpIHsgfQ0KICAgIHZpcnR1 YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7DQoNCg0KICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hh dCgpIGNvbnN0IHRocm93KCk7DQogIH07DQoNCg0KDQogIGNsYXNzIGJhZF9leGNlcHRpb24gOiBw dWJsaWMgZXhjZXB0aW9uDQogIHsNCiAgcHVibGljOg0KICAgIGJhZF9leGNlcHRpb24oKSB0aHJv dygpIHsgfQ0KDQoNCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhyb3coKTsNCiAgfTsN Cg0KDQogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsNCg0KICB0eXBlZGVm IHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOw0KDQoNCiAgdGVybWluYXRlX2hhbmRsZXIg c2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsNCg0KDQogIHZvaWQgdGVy bWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOw0KDQoNCiAgdW5leHBlY3Rl ZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsNCg0K DQogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsNCiMg OTggIi91c3IvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlvbiIgMw0KICBib29sIHVuY2F1Z2h0X2V4 Y2VwdGlvbigpIHRocm93KCk7DQp9DQoNCm5hbWVzcGFjZSBfX2dudV9jeHgNCnsNCiMgMTExICIv dXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb24iIDMNCiAgdm9pZCBfX3ZlcmJvc2VfdGVybWlu YXRlX2hhbmRsZXIgKCk7DQp9DQoNCn0NCiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIg MiAzDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY2hhcl90cmFpdHMuaCIgMSAzDQoj IDQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NoYXJfdHJhaXRzLmgiIDMNCg0KIyAxICIv dXNyL2luY2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAxIDMNCiMgNDggIi91c3IvaW5jbHVkZS9jKysv My4yL2NzdHJpbmciIDMNCg0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMNCiMg MTQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMw0KIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYt cGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMNCiMgMTUgIi91c3IvaW5jbHVkZS9z dHJpbmcuaCIgMiAzDQoNCg0KDQoNCg0KZXh0ZXJuICJDIiB7DQoNCnZvaWQgKiBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBtZW1jaHIgKGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOw0KaW50 IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1lbWNtcCAoY29uc3Qgdm9pZCAqLCBjb25zdCB2 b2lkICosIHNpemVfdCk7DQp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWVtY3B5 ICh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsNCnZvaWQgKiBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBtZW1tb3ZlICh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsNCnZvaWQg KiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtZW1zZXQgKHZvaWQgKiwgaW50LCBzaXplX3Qp Ow0KY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RyY2F0IChjaGFyICosIGNvbnN0 IGNoYXIgKik7DQpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJjaHIgKGNvbnN0 IGNoYXIgKiwgaW50KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJjbXAgKGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBzdHJjb2xsIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQpjaGFyICpfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBzdHJjcHkgKGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCnNpemVfdCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJjc3BuIChjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKik7DQpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJlcnJvciAoaW50KTsN CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJsZW4gKGNvbnN0IGNoYXIgKik7 DQpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJuY2F0IChjaGFyICosIGNvbnN0 IGNoYXIgKiwgc2l6ZV90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJuY21w IChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsNCmNoYXIgKl9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIHN0cm5jcHkgKGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0K Y2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RycGJyayAoY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICopOw0KY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RycmNociAo Y29uc3QgY2hhciAqLCBpbnQpOw0Kc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0 cnNwbiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOw0KY2hhciAqX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgc3Ryc3RyIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQoNCg0KY2hh ciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydG9rIChjaGFyICosIGNvbnN0IGNoYXIg Kik7DQoNCg0Kc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnhmcm0gKGNoYXIg KiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0KDQoNCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2Rl Y2xfXykpIHN0cnRva19yIChjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKik7DQoNCmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBiY21wIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQg Kiwgc2l6ZV90KTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYmNvcHkgKGNvbnN0 IHZvaWQgKiwgdm9pZCAqLCBzaXplX3QpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBiemVybyAodm9pZCAqLCBzaXplX3QpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IGZmcyAoaW50KTsNCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGluZGV4IChjb25z dCBjaGFyICosIGludCk7DQp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWVtY2Nw eSAodm9pZCAqLCBjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsNCnZvaWQgKiBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBtZW1wY3B5ICh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsN CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJpbmRleCAoY29uc3QgY2hhciAqLCBp bnQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cmNhc2VjbXAgKGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqKTsNCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0 cmR1cCAoY29uc3QgY2hhciAqKTsNCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9z dHJkdXBfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICopOw0KY2hhciAqX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgc3RybmR1cCAoY29uc3QgY2hhciAqLCBzaXplX3QpOw0KY2hhciAq X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3N0cm5kdXBfciAoc3RydWN0IF9yZWVudCAqLCBj b25zdCBjaGFyICosIHNpemVfdCk7DQpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBz dHJlcnJvcl9yIChpbnQsIGNoYXIgKiwgc2l6ZV90KTsNCnNpemVfdCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBzdHJsY2F0IChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsNCnNpemVf dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJsY3B5IChjaGFyICosIGNvbnN0IGNoYXIg Kiwgc2l6ZV90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJuY2FzZWNtcCAo Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7DQpzaXplX3QgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgc3RybmxlbiAoY29uc3QgY2hhciAqLCBzaXplX3QpOw0KY2hhciAqX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3Ryc2VwIChjaGFyICoqLCBjb25zdCBjaGFyICopOw0K Y2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RybHdyIChjaGFyICopOw0KY2hhciAq X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydXByIChjaGFyICopOw0KDQoNCmNvbnN0IGNo YXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnNpZ25hbCAoaW50IF9fc2lnbm8pOw0K DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydG9zaWdubyAoY29uc3QgY2hhciAq X19uYW1lKTsNCiMgOTggIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMw0KfQ0KIyA1MiAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvY3N0cmluZyIgMiAzDQojIDc3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9j c3RyaW5nIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHVzaW5nIDo6bWVtY3B5Ow0KICB1c2luZyA6 Om1lbW1vdmU7DQogIHVzaW5nIDo6c3RyY3B5Ow0KICB1c2luZyA6OnN0cm5jcHk7DQogIHVzaW5n IDo6c3RyY2F0Ow0KICB1c2luZyA6OnN0cm5jYXQ7DQogIHVzaW5nIDo6bWVtY21wOw0KICB1c2lu ZyA6OnN0cmNtcDsNCiAgdXNpbmcgOjpzdHJjb2xsOw0KICB1c2luZyA6OnN0cm5jbXA7DQogIHVz aW5nIDo6c3RyeGZybTsNCiAgdXNpbmcgOjpzdHJjc3BuOw0KICB1c2luZyA6OnN0cnNwbjsNCiAg dXNpbmcgOjpzdHJ0b2s7DQogIHVzaW5nIDo6bWVtc2V0Ow0KICB1c2luZyA6OnN0cmVycm9yOw0K ICB1c2luZyA6OnN0cmxlbjsNCg0KICB1c2luZyA6Om1lbWNocjsNCg0KICBpbmxpbmUgdm9pZCoN CiAgbWVtY2hyKHZvaWQqIF9fcCwgaW50IF9fYywgc2l6ZV90IF9fbikNCiAgeyByZXR1cm4gbWVt Y2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9fcCksIF9fYywgX19uKTsgfQ0KDQogIHVzaW5n IDo6c3RyY2hyOw0KDQogIGlubGluZSBjaGFyKg0KICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9f bikNCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihf X3MxKSwgX19uKTsgfQ0KDQogIHVzaW5nIDo6c3RycGJyazsNCg0KICBpbmxpbmUgY2hhcioNCiAg c3RycGJyayhjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQ0KICB7IHJldHVybiBfX2J1aWx0 aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0NCg0KICB1 c2luZyA6OnN0cnJjaHI7DQoNCiAgaW5saW5lIGNoYXIqDQogIHN0cnJjaHIoY2hhciogX19zMSwg aW50IF9fbikNCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29uc3RfY2FzdDxjb25zdCBj aGFyKj4oX19zMSksIF9fbik7IH0NCg0KICB1c2luZyA6OnN0cnN0cjsNCg0KICBpbmxpbmUgY2hh cioNCiAgc3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpDQogIHsgcmV0dXJuIF9f YnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9DQp9 DQojIDQ2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMw0KDQoN Cm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPg0KICAgIHN0 cnVjdCBjaGFyX3RyYWl0cw0KICAgIHsNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsN Cg0KICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOw0KICAgICAgdHlwZWRlZiBz dHJlYW1wb3MgcG9zX3R5cGU7DQogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsNCiAg ICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7DQoNCiAgICAgIHN0YXRpYyB2b2lkDQog ICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOw0KDQog ICAgICBzdGF0aWMgYm9vbA0KICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj aGFyX3R5cGUmIF9fYzIpOw0KDQogICAgICBzdGF0aWMgYm9vbA0KICAgICAgbHQoY29uc3QgY2hh cl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOw0KDQogICAgICBzdGF0aWMgaW50 DQogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBf X3MyLCBzaXplX3QgX19uKTsNCg0KICAgICAgc3RhdGljIHNpemVfdA0KICAgICAgbGVuZ3RoKGNv bnN0IGNoYXJfdHlwZSogX19zKTsNCg0KICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoNCiAg ICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlw ZSYgX19hKTsNCg0KICAgICAgc3RhdGljIGNoYXJfdHlwZSoNCiAgICAgIG1vdmUoY2hhcl90eXBl KiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pOw0KDQogICAgICBzdGF0 aWMgY2hhcl90eXBlKg0KICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlw ZSogX19zMiwgc2l6ZV90IF9fbik7DQoNCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqDQogICAgICBh c3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpOw0KDQogICAg ICBzdGF0aWMgY2hhcl90eXBlDQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9f Yyk7DQoNCiAgICAgIHN0YXRpYyBpbnRfdHlwZQ0KICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hh cl90eXBlJiBfX2MpOw0KDQogICAgICBzdGF0aWMgYm9vbA0KICAgICAgZXFfaW50X3R5cGUoY29u c3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKTsNCg0KICAgICAgc3RhdGlj IGludF90eXBlDQogICAgICBlb2YoKTsNCg0KICAgICAgc3RhdGljIGludF90eXBlDQogICAgICBu b3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpOw0KICAgIH07DQoNCg0KDQogIHRlbXBsYXRlPD4N CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj4NCiAgICB7DQogICAgICB0eXBlZGVmIGNoYXIg Y2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7DQogICAgICB0eXBlZGVmIHN0 cmVhbXBvcyBwb3NfdHlwZTsNCiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOw0KICAg ICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsNCg0KICAgICAgc3RhdGljIHZvaWQNCiAg ICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikNCiAgICAg IHsgX19jMSA9IF9fYzI7IH0NCg0KICAgICAgc3RhdGljIGJvb2wNCiAgICAgIGVxKGNvbnN0IGNo YXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQ0KICAgICAgeyByZXR1cm4gX19j MSA9PSBfX2MyOyB9DQoNCiAgICAgIHN0YXRpYyBib29sDQogICAgICBsdChjb25zdCBjaGFyX3R5 cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikNCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBf X2MyOyB9DQoNCiAgICAgIHN0YXRpYyBpbnQNCiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBl KiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pDQogICAgICB7IHJldHVy biBtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQ0KDQogICAgICBzdGF0aWMgc2l6ZV90DQogICAg ICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpDQogICAgICB7IHJldHVybiBzdHJsZW4oX19z KTsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZmluZChjb25zdCBj aGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpDQogICAgICB7 IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBjaGFyX3R5cGUqPihtZW1jaHIoX19zLCBfX2EsIF9f bikpOyB9DQoNCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqDQogICAgICBtb3ZlKGNoYXJfdHlwZSog X19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQ0KICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtbW92ZShfX3MxLCBfX3MyLCBfX24pKTsgfQ0KDQog ICAgICBzdGF0aWMgY2hhcl90eXBlKg0KICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0 IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PGNoYXJfdHlwZSo+KG1lbWNweShfX3MxLCBfX3MyLCBfX24pKTsgfQ0KDQogICAgICBzdGF0aWMg Y2hhcl90eXBlKg0KICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFy X3R5cGUgX19hKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtc2V0 KF9fcywgX19hLCBfX24pKTsgfQ0KDQogICAgICBzdGF0aWMgY2hhcl90eXBlDQogICAgICB0b19j aGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PGNoYXJfdHlwZT4oX19jKTsgfQ0KDQoNCg0KICAgICAgc3RhdGljIGludF90eXBlDQogICAgICB0 b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PGludF90eXBlPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpKTsgfQ0KDQogICAg ICBzdGF0aWMgYm9vbA0KICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNv bnN0IGludF90eXBlJiBfX2MyKQ0KICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9DQoNCiAg ICAgIHN0YXRpYyBpbnRfdHlwZQ0KICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50 X3R5cGU+KCgtMSkpOyB9DQoNCiAgICAgIHN0YXRpYyBpbnRfdHlwZQ0KICAgICAgbm90X2VvZihj b25zdCBpbnRfdHlwZSYgX19jKQ0KICAgICAgeyByZXR1cm4gKF9fYyA9PSBlb2YoKSkgPyAwIDog X19jOyB9DQogIH07DQojIDI0MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jaGFyX3RyYWl0 cy5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAg ICBzdHJ1Y3QgX0NoYXJfdHJhaXRzX21hdGNoDQogICAgew0KICAgICAgX0NoYXJUIF9NX2M7DQog ICAgICBfQ2hhcl90cmFpdHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01fYyhfX2MpIHsg fQ0KDQogICAgICBib29sDQogICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJl dHVybiBfVHJhaXRzOjplcShfTV9jLCBfX2EpOyB9DQogICAgfTsNCn0NCiMgNDcgIi91c3IvaW5j bHVkZS9jKysvMy4yL2lvcyIgMiAzDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9s b2NhbGVmd2QuaCIgMSAzDQojIDQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3 ZC5oIiAzDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWN5Z3dpbi9iaXRz L2MrK2xvY2FsZS5oIiAxIDMNCiMgMzYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtY3ln d2luL2JpdHMvYysrbG9jYWxlLmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2xvY2Fs ZSIgMSAzDQojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbG9jYWxlIiAzDQoNCiMgMSAiL3Vz ci9pbmNsdWRlL2xvY2FsZS5oIiAxIDMNCiMgMjQgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMw0K ZXh0ZXJuICJDIiB7DQoNCnN0cnVjdCBsY29udg0Kew0KICBjaGFyICpkZWNpbWFsX3BvaW50Ow0K ICBjaGFyICp0aG91c2FuZHNfc2VwOw0KICBjaGFyICpncm91cGluZzsNCiAgY2hhciAqaW50X2N1 cnJfc3ltYm9sOw0KICBjaGFyICpjdXJyZW5jeV9zeW1ib2w7DQogIGNoYXIgKm1vbl9kZWNpbWFs X3BvaW50Ow0KICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsNCiAgY2hhciAqbW9uX2dyb3VwaW5n Ow0KICBjaGFyICpwb3NpdGl2ZV9zaWduOw0KICBjaGFyICpuZWdhdGl2ZV9zaWduOw0KICBjaGFy IGludF9mcmFjX2RpZ2l0czsNCiAgY2hhciBmcmFjX2RpZ2l0czsNCiAgY2hhciBwX2NzX3ByZWNl ZGVzOw0KICBjaGFyIHBfc2VwX2J5X3NwYWNlOw0KICBjaGFyIG5fY3NfcHJlY2VkZXM7DQogIGNo YXIgbl9zZXBfYnlfc3BhY2U7DQogIGNoYXIgcF9zaWduX3Bvc247DQogIGNoYXIgbl9zaWduX3Bv c247DQp9Ow0KDQoNCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNldGxvY2FsZSAo aW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUpOw0Kc3RydWN0IGxjb252ICpfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBsb2NhbGVjb252ICh2b2lkKTsNCg0KDQpzdHJ1Y3QgX3JlZW50 Ow0KY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3NldGxvY2FsZV9yIChzdHJ1Y3Qg X3JlZW50ICosIGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqbG9jYWxlKTsNCnN0cnVjdCBsY29u diAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2xvY2FsZWNvbnZfciAoc3RydWN0IF9yZWVu dCAqKTsNCg0KfQ0KIyA1MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2xvY2FsZSIgMiAzDQoNCg0K DQoNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB1c2luZyA6Omxjb252Ow0KICB1c2luZyA6OnNldGxv Y2FsZTsNCiAgdXNpbmcgOjpsb2NhbGVjb252Ow0KfQ0KIyAzNyAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvaTY4Ni1wYy1jeWd3aW4vYml0cy9jKytsb2NhbGUuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQN CnsNCiAgdHlwZWRlZiBpbnQqIF9fY19sb2NhbGU7DQp9DQojIDQ3ICIvdXNyL2luY2x1ZGUvYysr LzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2xp bWl0cyIgMSAzDQojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbGltaXRzIiAzDQoNCiMgMSAi L3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMSAz DQojIDExICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL2xpbWl0 cy5oIiAzDQojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy4yL2luY2x1ZGUv c3lzbGltaXRzLmgiIDEgMw0KDQoNCg0KDQoNCg0KIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYt cGMtY3lnd2luLzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMNCiMgMTMyICIvdXNyL2xpYi9nY2Mt bGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAzDQojIDEgIi91c3IvaW5j bHVkZS9saW1pdHMuaCIgMSAzDQojIDEzMyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dp bi8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzDQojIDggIi91c3IvbGliL2djYy1saWIvaTY4Ni1w Yy1jeWd3aW4vMy4yL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMw0KIyAxMiAiL3Vzci9saWIvZ2Nj LWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzDQojIDUwICIvdXNy L2luY2x1ZGUvYysrLzMuMi9jbGltaXRzIiAyIDMNCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvbG9jYWxlZndkLmgiIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jY3R5cGUi IDEgMw0KIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2N0eXBlIiAzDQoNCg0KIyAxICIvdXNy L2luY2x1ZGUvY3R5cGUuaCIgMSAzDQoNCg0KDQoNCg0KZXh0ZXJuICJDIiB7DQoNCmludCBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc2FsbnVtIChpbnQgX19jKTsNCmludCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBpc2FscGhhIChpbnQgX19jKTsNCmludCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBpc2NudHJsIChpbnQgX19jKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBpc2RpZ2l0IChpbnQgX19jKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBp c2dyYXBoIChpbnQgX19jKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc2xvd2Vy IChpbnQgX19jKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3ByaW50IChpbnQg X19jKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3B1bmN0IChpbnQgX19jKTsN CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3NwYWNlIChpbnQgX19jKTsNCmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3VwcGVyIChpbnQgX19jKTsNCmludCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBpc3hkaWdpdCAoaW50IF9fYyk7DQppbnQgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgdG9sb3dlciAoaW50IF9fYyk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgdG91cHBlciAoaW50IF9fYyk7DQoNCg0KaW50IF9fYXR0cmlidXRlX18oKF9fY2Rl Y2xfXykpIGlzYmxhbmsgKGludCBfX2MpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IGlzYXNjaWkgKGludCBfX2MpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHRvYXNj aWkgKGludCBfX2MpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF90b2xvd2VyIChp bnQgX19jKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdG91cHBlciAoaW50IF9f Yyk7DQojIDM5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMw0KZXh0ZXJuIF9fYXR0cmlidXRlX18o KGRsbGltcG9ydCkpIGNvbnN0IGNoYXIgX2N0eXBlX1tdOw0KIyA2OCAiL3Vzci9pbmNsdWRlL2N0 eXBlLmgiIDMNCn0NCiMgNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NjdHlwZSIgMiAzDQojIDY2 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jY3R5cGUiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdXNp bmcgOjppc2FsbnVtOw0KICB1c2luZyA6OmlzYWxwaGE7DQogIHVzaW5nIDo6aXNjbnRybDsNCiAg dXNpbmcgOjppc2RpZ2l0Ow0KICB1c2luZyA6OmlzZ3JhcGg7DQogIHVzaW5nIDo6aXNsb3dlcjsN CiAgdXNpbmcgOjppc3ByaW50Ow0KICB1c2luZyA6OmlzcHVuY3Q7DQogIHVzaW5nIDo6aXNzcGFj ZTsNCiAgdXNpbmcgOjppc3VwcGVyOw0KICB1c2luZyA6OmlzeGRpZ2l0Ow0KICB1c2luZyA6OnRv bG93ZXI7DQogIHVzaW5nIDo6dG91cHBlcjsNCn0NCiMgNDkgIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvbG9jYWxlZndkLmgiIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmci IDEgMw0KIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAzDQoNCg0KDQoNCiMgMSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAxIDMNCiMgNTMgIi91c3IvaW5jbHVkZS9jKysv My4yL21lbW9yeSIgMw0KDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29i YXNlLmgiIDEgMw0KIyA2OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2Uu aCIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9uZXciIDEgMw0KIyA0NCAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvbmV3IiAzDQpleHRlcm4gIkMrKyIgew0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoN Cg0KICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uDQogIHsNCiAgcHVibGljOg0K ICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9DQoNCg0KICAgIHZpcnR1YWwgfmJhZF9hbGxvYygp IHRocm93KCk7DQogIH07DQoNCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07DQogIGV4dGVybiBjb25z dCBub3Rocm93X3Qgbm90aHJvdzsNCg0KDQogIHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgp Ow0KDQogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcikgdGhyb3coKTsN Cn0NCiMgNzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL25ldyIgMw0Kdm9pZCogb3BlcmF0b3IgbmV3 KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOw0Kdm9pZCogb3BlcmF0b3IgbmV3 W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7DQp2b2lkIG9wZXJhdG9yIGRl bGV0ZSh2b2lkKikgdGhyb3coKTsNCnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCopIHRocm93 KCk7DQp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190 JikgdGhyb3coKTsNCnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6 Om5vdGhyb3dfdCYpIHRocm93KCk7DQp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgY29uc3Qg c3RkOjpub3Rocm93X3QmKSB0aHJvdygpOw0Kdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwg Y29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOw0KDQoNCmlubGluZSB2b2lkKiBvcGVyYXRv ciBuZXcoc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0NCmlu bGluZSB2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgdm9pZCogX19wKSB0aHJvdygp IHsgcmV0dXJuIF9fcDsgfQ0KDQoNCmlubGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCos IHZvaWQqKSB0aHJvdygpIHsgfTsNCmlubGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQq LCB2b2lkKikgdGhyb3coKSB7IH07DQoNCn0NCiMgNzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2FsZ29iYXNlLmgiIDIgMw0KDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX3BhaXIuaCIgMSAzDQojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9wYWly LmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf VDI+DQpzdHJ1Y3QgcGFpciB7DQogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7DQogIHR5cGVkZWYg X1QyIHNlY29uZF90eXBlOw0KDQogIF9UMSBmaXJzdDsNCiAgX1QyIHNlY29uZDsNCg0KDQoNCg0K ICBwYWlyKCkgOiBmaXJzdCgpLCBzZWNvbmQoKSB7fQ0KDQoNCg0KDQogIHBhaXIoY29uc3QgX1Qx JiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSksIHNlY29uZChfX2IpIHt9DQoNCg0K ICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+DQogIHBhaXIoY29uc3QgcGFpcjxfVTEs IF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30NCn07 DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5saW5lIGJvb2wgb3BlcmF0 b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195 KQ0Kew0KICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9f eS5zZWNvbmQ7DQp9DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5saW5l IGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1Qx LCBfVDI+JiBfX3kpDQp7DQogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwNCiAgICAg ICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQp Ow0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGluZSBib29sIG9w ZXJhdG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m IF9feSkgew0KICByZXR1cm4gIShfX3ggPT0gX195KTsNCn0NCg0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X1QxLCBjbGFzcyBfVDI+DQppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9U Mj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgew0KICByZXR1cm4gX195IDwgX194 Ow0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGluZSBib29sIG9w ZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m IF9feSkgew0KICByZXR1cm4gIShfX3kgPCBfX3gpOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf VDEsIGNsYXNzIF9UMj4NCmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEsIF9U Mj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgew0KICByZXR1cm4gIShfX3ggPCBf X3kpOw0KfQ0KIyAxNDAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3BhaXIuaCIgMw0K dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KDQoNCmlubGluZSBwYWlyPF9UMSwgX1Qy PiBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9feSkNCg0KDQoNCnsNCiAgcmV0dXJuIHBhaXI8X1Qx LCBfVDI+KF9feCwgX195KTsNCn0NCg0KfQ0KIyA3MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfYWxnb2Jhc2UuaCIgMiAzDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvdHlw ZV90cmFpdHMuaCIgMSAzDQojIDUzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3R5cGVfdHJh aXRzLmgiIDMNCiMgOTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvdHlwZV90cmFpdHMuaCIg Mw0Kc3RydWN0IF9fdHJ1ZV90eXBlIHt9Ow0Kc3RydWN0IF9fZmFsc2VfdHlwZSB7fTsNCg0KdGVt cGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsNCiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsNCiMgMTEzICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3R5cGVfdHJhaXRzLmgiIDMNCiAgIHR5cGVkZWYgX19mYWxzZV90 eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fZmFsc2Vf dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX2ZhbHNlX3R5 cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX19mYWxzZV90 eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBpc19Q T0RfdHlwZTsNCn07DQoNCg0KDQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9v bD4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj dG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y Ow0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y Ow0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9f dHlwZV90cmFpdHM8Y2hhcj4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j b3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3Np Z25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0 cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBs YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsNCiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf UE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVk IGNoYXI+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25z dHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1 Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy YXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVj dCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0K DQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7DQogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25l ZCBzaG9ydD4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv bnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0 cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w ZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0K ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3Ry dWN0IF9fdHlwZV90cmFpdHM8aW50PiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0K dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsNCiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxv bmc+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1 Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBf X3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9 Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4gew0KICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVf dHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8 dW5zaWduZWQgbG9uZyBsb25nPiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz c2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl c3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVt cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gew0KICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf dHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7DQog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry YWl0czxsb25nIGRvdWJsZT4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j b3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3Np Z25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0 cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBs YXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgX190eXBlX3RyYWl0czxfVHAqPiB7DQogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGlzX1BPRF90eXBlOw0KfTsNCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3Qg X0lzX2ludGVnZXIgew0KICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0 ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7DQogIHR5cGVkZWYgX190cnVlX3R5 cGUgX0ludGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4g ew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3Ry dWN0IF9Jc19pbnRlZ2VyPHNpZ25lZCBjaGFyPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu dGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hh cj4gew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4g c3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50 ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaG9ydD4gew0KICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9J c19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn cmFsOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8aW50PiB7DQogIHR5cGVk ZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2lu dGVnZXI8dW5zaWduZWQgaW50PiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0K fTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gew0KICB0eXBlZGVmIF9f dHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2Vy PHVuc2lnbmVkIGxvbmc+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0K DQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nIGxvbmc+IHsNCiAgdHlwZWRlZiBf X3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl cjx1bnNpZ25lZCBsb25nIGxvbmc+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7 DQp9Ow0KDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9y IHsNCiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7DQp9Ow0KDQoNCm5hbWVzcGFjZSBf X2dudV9jeHgNCnsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29u dGFpbmVyPiBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcjsNCn0NCg0KdGVtcGxhdGU8dHlwZW5hbWUg X0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0Kc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0 b3I8IF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiA+ IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgX05vcm1hbDsNCn07DQojIDczICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMNCg0KDQoNCg0KDQpuYW1lc3BhY2Ug c3RkDQp7DQojIDkxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAz DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRl cjI+DQogICAgaW5saW5lIHZvaWQNCiAgICBpdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9G b3J3YXJkSXRlcjIgX19iKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOw0KICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMj46OnZhbHVlX3R5cGUg X1ZhbHVlVHlwZTI7DQoNCg0KICAgICANCiAgICAgDQogICAgIA0KICAgICANCg0KICAgICAgX1Zh bHVlVHlwZTEgX190bXAgPSAqX19hOw0KICAgICAgKl9fYSA9ICpfX2I7DQogICAgICAqX19iID0g X190bXA7DQogICAgfQ0KIyAxMTggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29i YXNlLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIGlubGluZSB2b2lkDQogICAg c3dhcChfVHAmIF9fYSwgX1RwJiBfX2IpDQogICAgew0KDQogICAgIA0KDQogICAgICBfVHAgX190 bXAgPSBfX2E7DQogICAgICBfX2EgPSBfX2I7DQogICAgICBfX2IgPSBfX3RtcDsNCiAgICB9DQoj IDE0NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMw0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgaW5saW5lIGNvbnN0IF9UcCYNCiAgICBtaW4oY29uc3Qg X1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQ0KICAgIHsNCg0KICAgICANCg0KICAgICAgaWYgKF9f YiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsNCiAgICB9DQojIDE2NiAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+DQogICAgaW5saW5lIGNvbnN0IF9UcCYNCiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0 IF9UcCYgX19iKQ0KICAgIHsNCg0KICAgICANCg0KICAgICAgaWYgKF9fYSA8IF9fYikgcmV0dXJu IF9fYjsgcmV0dXJuIF9fYTsNCiAgICB9DQojIDE4NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfYWxnb2Jhc2UuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D b21wYXJlPg0KICAgIGlubGluZSBjb25zdCBfVHAmDQogICAgbWluKGNvbnN0IF9UcCYgX19hLCBj b25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCg0KICAgICAgaWYgKF9fY29t cChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7DQogICAgfQ0KIyAyMDQgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBpbmxpbmUgY29uc3QgX1RwJg0KICAgIG1h eChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkNCiAgICB7 DQoNCiAgICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOw0K ICAgIH0NCiMgMjIxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAz DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPg0K ICAgIGlubGluZSBfT3V0cHV0SXRlcg0KICAgIF9fY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwNCiAgICAg ICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCiAgICAgIGZvciAoIDsgX19maXJzdCAh PSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkNCiAgICAgICAgKl9fcmVzdWx0ID0gKl9f Zmlyc3Q7DQogICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4NCiAgICBpbmxpbmUg X091dHB1dEl0ZXINCiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwNCiAg ICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpDQogICAgew0KICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNl X3R5cGUNCiAgICAgICAgICBfRGlzdGFuY2U7DQogICAgICBmb3IgKF9EaXN0YW5jZSBfX24gPSBf X2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgew0KICAgICAgICAqX19yZXN1bHQgPSAq X19maXJzdDsNCiAgICAgICAgKytfX2ZpcnN0Ow0KICAgICAgICArK19fcmVzdWx0Ow0KICAgICAg fQ0KICAgICAgcmV0dXJuIF9fcmVzdWx0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+DQogICAgaW5saW5lIF9UcCoNCiAgICBfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmly c3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQ0KICAgIHsNCiAgICAgIG1lbW1v dmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsN CiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsNCiAgICB9DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQogICAg aW5saW5lIF9PdXRwdXRJdGVyDQogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg X19mYWxzZV90eXBlKQ0KICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz dWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPg0KICAgIGlubGluZSBfT3V0cHV0 SXRlcg0KICAgIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsDQogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQ0K ICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9y X2NhdGVnb3J5KF9fZmlyc3QpKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICBp bmxpbmUgX1RwKg0KICAgIF9fY29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsDQog ICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpDQogICAgeyByZXR1cm4g X19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0NCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+DQogICAgaW5saW5lIF9UcCoNCiAgICBfX2NvcHlfYXV4Mihjb25zdCBf VHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LA0KICAgICAgICAgICAgICAgIF9UcCogX19y ZXN1bHQsIF9fdHJ1ZV90eXBlKQ0KICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3Qs IF9fbGFzdCwgX19yZXN1bHQpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg dHlwZW5hbWUgX091dHB1dEl0ZXI+DQogICAgaW5saW5lIF9PdXRwdXRJdGVyDQogICAgX19jb3B5 X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQ0KICAgIHsNCiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlDQogICAg ICAgICAgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxf VmFsdWVUeXBlPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcg0KICAgICAgICAgIF9U cml2aWFsOw0KICAgICAgcmV0dXJuIF9PdXRwdXRJdGVyKF9fY29weV9hdXgyKF9fZmlyc3QsIF9f bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdC5iYXNl KCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSkpOw0K ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0 SXRlcj4NCiAgICBpbmxpbmUgX091dHB1dEl0ZXINCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCwgX19mYWxzZV90eXBlKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlDQogICAgICAgICAgX1ZhbHVlVHlw ZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcg0KICAgICAgICAgIF9Ucml2aWFsOw0KICAgICAg cmV0dXJuIF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfVHJpdmlhbCgpKTsNCiAg ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0 ZXI+DQogICAgaW5saW5lIF9PdXRwdXRJdGVyDQogICAgX19jb3B5X25pMShfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y ZXN1bHQsIF9fdHJ1ZV90eXBlKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25v cm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7DQogICAgICByZXR1 cm4gX19jb3B5X25pMihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwgX19yZXN1bHQsIF9f Tm9ybWFsKCkpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl bmFtZSBfT3V0cHV0SXRlcj4NCiAgICBpbmxpbmUgX091dHB1dEl0ZXINCiAgICBfX2NvcHlfbmkx KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICBf T3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3Jt YWw7DQogICAgICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBf X05vcm1hbCgpKTsNCiAgICB9DQojIDMzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf YWxnb2Jhc2UuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf T3V0cHV0SXRlcj4NCiAgICBpbmxpbmUgX091dHB1dEl0ZXINCiAgICBjb3B5KF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQ0KICAgIHsN Cg0KICAgICANCiAgICAgDQoNCg0KICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9p dGVyYXRvcjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsNCiAgICAgICByZXR1cm4gX19j b3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsNCiAgICB9DQoN Cg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUg X0JpZGlyZWN0aW9uYWxJdGVyMj4NCiAgICBpbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyMg0KICAg IF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIF9CaWRpcmVjdGlv bmFsSXRlcjEgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIy IF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh ZykNCiAgICB7DQogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpDQogICAgICAgICotLV9f cmVzdWx0ID0gKi0tX19sYXN0Ow0KICAgICAgcmV0dXJuIF9fcmVzdWx0Ow0KICAgIH0NCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0JpZGlyZWN0aW9u YWxJdGVyPg0KICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXINCiAgICBfX2NvcHlfYmFja3dh cmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0K ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsDQogICAgICAg ICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCiAgICAgIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlw ZSBfX247DQogICAgICBmb3IgKF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19u KQ0KICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsNCiAgICAgIHJldHVybiBfX3Jlc3Vs dDsNCiAgICB9DQoNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u YWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwNCiAgICAgICAgICAgdHlwZW5h bWUgX0Jvb2xUeXBlPg0KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2gNCiAgICB7 DQogICAgICBzdGF0aWMgX0JpZGlyZWN0aW9uYWxJdGVyMg0KICAgICAgY29weShfQmlkaXJlY3Rp b25hbEl0ZXIxIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LA0KICAgICAgICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KQ0KICAgICAgew0KICAgICAgICByZXR1cm4g X19jb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh dG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAgICAgIH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4NCiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9U cCosIF9fdHJ1ZV90eXBlPg0KICAgIHsNCiAgICAgIHN0YXRpYyBfVHAqDQogICAgICBjb3B5KGNv bnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpDQogICAg ICB7DQogICAgICAgIGNvbnN0IHB0cmRpZmZfdCBfTnVtID0gX19sYXN0IC0gX19maXJzdDsNCiAg ICAgICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051 bSk7DQogICAgICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07DQogICAgICB9DQogICAgfTsNCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNw YXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4NCiAgICB7DQogICAgICBzdGF0aWMg X1RwKg0KICAgICAgY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBf VHAqIF9fcmVzdWx0KQ0KICAgICAgew0KICAgICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rp c3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPg0KICAgICAgICAgIDo6Y29weShfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0KTsNCiAgICAgIH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+DQogICAgaW5saW5lIF9CSTINCiAgICBfX2NvcHlfYmFj a3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpDQogICAg ew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IgX1RyaXZpYWw7DQogICAgICByZXR1cm4g X19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPg0KICAgICAgICAg ICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOw0KICAgIH0NCg0KICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4NCiAgICBpbmxpbmUgX0JJMg0K ICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwg X0JJMSBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpDQogICAgeyByZXR1cm4gX0JJMihfX2NvcHlfYmFj a3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFzZSgpKSk7IH0NCg0KICB0ZW1w bGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4NCiAgICBpbmxpbmUgX0JJMg0KICAg IF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJ MSBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJ MiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQ0KICAgIHsgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9h dXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0NCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUg X0JJMSwgdHlwZW5hbWUgX0JJMj4NCiAgICBpbmxpbmUgX0JJMg0KICAgIF9fY29weV9iYWNrd2Fy ZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1 ZV90eXBlKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRv cjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsNCiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRf b3V0cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3Vs dCwgX19Ob3JtYWwoKSk7DQogICAgfQ0KDQogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBl bmFtZSBfQkkyPg0KICAgIGlubGluZSBfQkkyDQogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25v cm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQ0K ICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6 X05vcm1hbCBfX05vcm1hbDsNCiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25v cm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOw0KICAgIH0N CiMgNDc3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzDQogIHRl bXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPg0KICAgIGlubGluZSBfQkkyDQog ICAgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0 KQ0KICAgIHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQoNCg0KICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTE+OjpfTm9ybWFsIF9fTm9ybWFsOw0KICAgICAg cmV0dXJuIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19s YXN0LCBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fTm9ybWFsKCkpOw0KICAgIH0NCiMgNTA5ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl ciwgdHlwZW5hbWUgX1RwPg0KICAgIHZvaWQNCiAgICBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpDQogICAgew0KDQogICAg IA0KDQogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgICAg ICpfX2ZpcnN0ID0gX192YWx1ZTsNCiAgICB9DQojIDUzMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwg dHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4NCiAgICBfT3V0cHV0SXRlcg0KICAgIGZpbGxf bihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkNCiAg ICB7DQoNCiAgICAgDQoNCiAgICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkN CiAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOw0KICAgICAgcmV0dXJuIF9fZmlyc3Q7DQogICAg fQ0KDQoNCg0KICBpbmxpbmUgdm9pZA0KICBmaWxsKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHVu c2lnbmVkIGNoYXIqIF9fbGFzdCwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQ0KICB7DQogICAg dW5zaWduZWQgY2hhciBfX3RtcCA9IF9fYzsNCiAgICBtZW1zZXQoX19maXJzdCwgX190bXAsIF9f bGFzdCAtIF9fZmlyc3QpOw0KICB9DQoNCiAgaW5saW5lIHZvaWQNCiAgZmlsbChzaWduZWQgY2hh ciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9fbGFzdCwgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykN CiAgew0KICAgIHNpZ25lZCBjaGFyIF9fdG1wID0gX19jOw0KICAgIG1lbXNldChfX2ZpcnN0LCBz dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOw0KICB9 DQoNCiAgaW5saW5lIHZvaWQNCiAgZmlsbChjaGFyKiBfX2ZpcnN0LCBjaGFyKiBfX2xhc3QsIGNv bnN0IGNoYXImIF9fYykNCiAgew0KICAgIGNoYXIgX190bXAgPSBfX2M7DQogICAgbWVtc2V0KF9f Zmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJz dCk7DQogIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4NCiAgICBpbmxpbmUgdW5zaWdu ZWQgY2hhcioNCiAgICBmaWxsX24odW5zaWduZWQgY2hhciogX19maXJzdCwgX1NpemUgX19uLCBj b25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpDQogICAgew0KICAgICAgZmlsbChfX2ZpcnN0LCBfX2Zp cnN0ICsgX19uLCBfX2MpOw0KICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247DQogICAgfQ0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPg0KICAgIGlubGluZSBzaWduZWQgY2hhcioNCiAgICBm aWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBzaWduZWQgY2hhciYgX19jKQ0K ICAgIHsNCiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsNCiAgICAgIHJl dHVybiBfX2ZpcnN0ICsgX19uOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4N CiAgICBpbmxpbmUgY2hhcioNCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBj b25zdCBjaGFyJiBfX2MpDQogICAgew0KICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19u LCBfX2MpOw0KICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247DQogICAgfQ0KIyA2MDYgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPg0KICAgIHBhaXI8X0lucHV0SXRl cjEsIF9JbnB1dEl0ZXIyPg0KICAgIG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w dXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQ0KICAg IHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQogICAgIA0KDQoNCiAgICAgIHdoaWxlIChfX2Zp cnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIpIHsNCiAgICAgICAgKytf X2ZpcnN0MTsNCiAgICAgICAgKytfX2ZpcnN0MjsNCiAgICAgIH0NCiAgICAgIHJldHVybiBwYWly PF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsNCiAgICB9DQoj IDY0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMw0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1l IF9CaW5hcnlQcmVkaWNhdGU+DQogICAgcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+DQog ICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQog ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsDQogICAgICAgICAgICAgX0JpbmFyeVBy ZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCiAgICAgIHdo aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19m aXJzdDIpKSB7DQogICAgICAgICsrX19maXJzdDE7DQogICAgICAgICsrX19maXJzdDI7DQogICAg ICB9DQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3Qx LCBfX2ZpcnN0Mik7DQogICAgfQ0KIyA2NjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2FsZ29iYXNlLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l IF9JbnB1dEl0ZXIyPg0KICAgIGlubGluZSBib29sDQogICAgZXF1YWwoX0lucHV0SXRlcjEgX19m aXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz dDIpDQogICAgew0KDQogICAgIA0KICAgICANCiAgICAgDQoNCg0KDQogICAgICBmb3IgKCA7IF9f Zmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpDQogICAgICAgIGlmICgh KCpfX2ZpcnN0MSA9PSAqX19maXJzdDIpKQ0KICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAg IHJldHVybiB0cnVlOw0KICAgIH0NCiMgNjk5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9hbGdvYmFzZS5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4NCiAgICBpbmxpbmUgYm9v bA0KICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0K ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLA0KICAgICAgICAgIF9CaW5hcnlQcmVkaWNh dGUgX19iaW5hcnlfcHJlZCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQogICAgICBmb3IgKCA7 IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpDQogICAgICAgIGlm ICghX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpDQogICAgICAgICAgcmV0dXJu IGZhbHNlOw0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KIyA3MzIgIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPg0KICAgIGJvb2wNCiAgICBsZXhpY29ncmFwaGlj YWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl cjIgX19sYXN0MikNCiAgICB7DQoNCiAgICAgDQogICAgIA0KICAgICANCg0KICAgICANCg0KDQog ICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mg0K ICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7DQogICAgICAgIGlmICgqX19m aXJzdDEgPCAqX19maXJzdDIpDQogICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIGlmICgq X19maXJzdDIgPCAqX19maXJzdDEpDQogICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0K ICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsN CiAgICB9DQojIDc2NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIg Mw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIs IHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIGJvb2wNCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFy ZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0 MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0K DQogICAgIA0KICAgICANCg0KICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f Zmlyc3QyICE9IF9fbGFzdDINCiAgICAgICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0Mikg ew0KICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkNCiAgICAgICAgICBy ZXR1cm4gdHJ1ZTsNCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpDQog ICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09 IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsNCiAgICB9DQoNCiAgaW5saW5lIGJvb2wN CiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEs IGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xh c3QyKQ0KICB7DQogICAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsN CiAgICBjb25zdCBzaXplX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOw0KICAgIGNvbnN0 IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEsIF9f bGVuMikpOw0KICAgIHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4x IDwgX19sZW4yOw0KICB9DQoNCiAgaW5saW5lIGJvb2wNCiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBh cmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsDQogICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3Qy KQ0KICB7DQoNCiAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25l ZCBjaGFyKikgX19maXJzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj b25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsNCg0KDQoNCg0K DQoNCiAgfQ0KDQp9DQojIDU1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDIgMw0KIyAx ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAxIDMNCiMgODQgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvY2Fzc2VydCIgMSAzDQojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAz DQoNCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMNCg0KDQoNCg0KDQpleHRlcm4gIkMi IHsNCiMgMjUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBfX2Fzc2VydCAoY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKik7DQoN Cg0KfQ0KIyA0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2Fzc2VydCIgMiAzDQojIDg1ICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMNCiMgMzQgIi91c3IvaW5jbHVkZS9jKysv My4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9leGNl cHRpb25fZGVmaW5lcy5oIiAxIDMNCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVu Y3RleGNlcHQuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB2b2lkDQogIF9fdGhyb3df YmFkX2V4Y2VwdGlvbih2b2lkKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19iYWRfYWxsb2Modm9p ZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7DQoNCiAgdm9pZA0KICBf X3Rocm93X2JhZF90eXBlaWQodm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfbG9naWNfZXJy b3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29u c3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNo YXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBf X3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 DQoNCiAgdm9pZA0KICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAg dm9pZA0KICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9p ZA0KICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQoNCiAgdm9p ZA0KICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7DQp9DQojIDg2ICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAxIDMNCiMgNTQgIi91c3IvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KDQogIHN0 cnVjdCBfUmVmY291bnRfQmFzZQ0KICB7DQoNCiAgICB0eXBlZGVmIHNpemVfdCBfUkNfdDsNCg0K DQogICAgdm9sYXRpbGUgX1JDX3QgX01fcmVmX2NvdW50Ow0KDQoNCiAgICBfX2d0aHJlYWRfbXV0 ZXhfdCBfTV9yZWZfY291bnRfbG9jazsNCg0KICAgIF9SZWZjb3VudF9CYXNlKF9SQ190IF9fbikg OiBfTV9yZWZfY291bnQoX19uKQ0KICAgIHsNCg0KICAgICAgX19ndGhyZWFkX211dGV4X3QgX190 bXAgPSAwOw0KICAgICAgX01fcmVmX2NvdW50X2xvY2sgPSBfX3RtcDsNCg0KDQoNCg0KDQogICAg fQ0KDQogICAgdm9pZA0KICAgIF9NX2luY3IoKQ0KICAgIHsNCiAgICAgIF9fZ3RocmVhZF9tdXRl eF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7DQogICAgICArK19NX3JlZl9jb3VudDsNCiAgICAg IF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsNCiAgICB9DQoNCiAg ICBfUkNfdA0KICAgIF9NX2RlY3IoKQ0KICAgIHsNCiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2Nr KCZfTV9yZWZfY291bnRfbG9jayk7DQogICAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01f cmVmX2NvdW50Ow0KICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xv Y2spOw0KICAgICAgcmV0dXJuIF9fdG1wOw0KICAgIH0NCiAgfTsNCiMgMTA5ICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDMNCiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+ DQogICAgc3RydWN0IF9Td2FwX2xvY2tfc3RydWN0DQogICAgeyBzdGF0aWMgX19ndGhyZWFkX211 dGV4X3QgX1Nfc3dhcF9sb2NrOyB9Ow0KDQogIHRlbXBsYXRlPGludCBfX2R1bW15Pg0KICAgIF9f Z3RocmVhZF9tdXRleF90DQogICAgX1N3YXBfbG9ja19zdHJ1Y3Q8X19kdW1teT46Ol9TX3N3YXBf bG9jayA9IDA7DQoNCg0KDQogIGlubGluZSB1bnNpZ25lZCBsb25nDQogIF9BdG9taWNfc3dhcCh1 bnNpZ25lZCBsb25nICogX19wLCB1bnNpZ25lZCBsb25nIF9fcSkNCiAgew0KICAgIF9fZ3RocmVh ZF9tdXRleF9sb2NrKCZfU3dhcF9sb2NrX3N0cnVjdDwwPjo6X1Nfc3dhcF9sb2NrKTsNCiAgICB1 bnNpZ25lZCBsb25nIF9fcmVzdWx0ID0gKl9fcDsNCiAgICAqX19wID0gX19xOw0KICAgIF9fZ3Ro cmVhZF9tdXRleF91bmxvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xvY2spOw0K ICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgfQ0KIyAxNTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX3RocmVhZHMuaCIgMw0KICBzdHJ1Y3QgX1NUTF9tdXRleF9sb2NrDQogIHsNCg0KDQoN Cg0KDQogICAgX19ndGhyZWFkX211dGV4X3QgX01fbG9jazsNCg0KICAgIHZvaWQNCiAgICBfTV9p bml0aWFsaXplKCkNCiAgICB7DQojIDE4NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf dGhyZWFkcy5oIiAzDQogICAgfQ0KDQogICAgdm9pZA0KICAgIF9NX2FjcXVpcmVfbG9jaygpDQog ICAgew0KDQoNCg0KICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX2xvY2spOw0KICAgIH0N Cg0KICAgIHZvaWQNCiAgICBfTV9yZWxlYXNlX2xvY2soKQ0KICAgIHsNCg0KDQoNCiAgICAgIF9f Z3RocmVhZF9tdXRleF91bmxvY2soJl9NX2xvY2spOw0KICAgIH0NCiAgfTsNCiMgMjIwICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDMNCiAgc3RydWN0IF9TVExfYXV0 b19sb2NrDQogIHsNCiAgICBfU1RMX211dGV4X2xvY2smIF9NX2xvY2s7DQoNCiAgICBfU1RMX2F1 dG9fbG9jayhfU1RMX211dGV4X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9jaykNCiAgICB7 IF9NX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0NCg0KICAgIH5fU1RMX2F1dG9fbG9jaygpIHsg X01fbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQ0KDQogIHByaXZhdGU6DQogICAgdm9pZCBvcGVy YXRvcj0oY29uc3QgX1NUTF9hdXRvX2xvY2smKTsNCiAgICBfU1RMX2F1dG9fbG9jayhjb25zdCBf U1RMX2F1dG9fbG9jayYpOw0KICB9Ow0KDQp9DQojIDg3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9hbGxvYy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KIyA5OCAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMw0KICBjbGFzcyBfX25ld19hbGxvYw0KICB7 DQogIHB1YmxpYzoNCiAgICBzdGF0aWMgdm9pZCoNCiAgICBhbGxvY2F0ZShzaXplX3QgX19uKQ0K ICAgIHsgcmV0dXJuIDo6b3BlcmF0b3IgbmV3KF9fbik7IH0NCg0KICAgIHN0YXRpYyB2b2lkDQog ICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCkNCiAgICB7IDo6b3BlcmF0b3IgZGVsZXRl KF9fcCk7IH0NCiAgfTsNCiMgMTIxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxv Yy5oIiAzDQogIHRlbXBsYXRlIDxpbnQgX19pbnN0Pg0KICAgIGNsYXNzIF9fbWFsbG9jX2FsbG9j X3RlbXBsYXRlDQogICAgew0KICAgIHByaXZhdGU6DQogICAgICBzdGF0aWMgdm9pZCogX1Nfb29t X21hbGxvYyhzaXplX3QpOw0KICAgICAgc3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9jKHZvaWQq LCBzaXplX3QpOw0KICAgICAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRs ZXIpKCk7DQoNCiAgICBwdWJsaWM6DQogICAgICBzdGF0aWMgdm9pZCoNCiAgICAgIGFsbG9jYXRl KHNpemVfdCBfX24pDQogICAgICB7DQogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9f bik7DQogICAgICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9tYWxsb2Mo X19uKTsNCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0Ow0KICAgICAgfQ0KDQogICAgICBzdGF0aWMg dm9pZA0KICAgICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApDQogICAgICB7IGZyZWUo X19wKTsgfQ0KDQogICAgICBzdGF0aWMgdm9pZCoNCiAgICAgIHJlYWxsb2NhdGUodm9pZCogX19w LCBzaXplX3QgLCBzaXplX3QgX19uZXdfc3opDQogICAgICB7DQogICAgICAgIHZvaWQqIF9fcmVz dWx0ID0gcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsNCiAgICAgICAgaWYgKDAgPT0gX19yZXN1bHQp IF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBfX25ld19zeik7DQogICAgICAgIHJldHVy biBfX3Jlc3VsdDsNCiAgICAgIH0NCg0KICAgICAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9j X2hhbmRsZXIodm9pZCAoKl9fZikoKSkpKCkNCiAgICAgIHsNCiAgICAgICAgdm9pZCAoKiBfX29s ZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOw0KICAgICAgICBfX21hbGxvY19hbGxv Y19vb21faGFuZGxlciA9IF9fZjsNCiAgICAgICAgcmV0dXJuKF9fb2xkKTsNCiAgICAgIH0NCiAg ICB9Ow0KDQoNCiAgdGVtcGxhdGUgPGludCBfX2luc3Q+DQogICAgdm9pZCAoKiBfX21hbGxvY19h bGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7 DQoNCiAgdGVtcGxhdGUgPGludCBfX2luc3Q+DQogICAgdm9pZCoNCiAgICBfX21hbGxvY19hbGxv Y190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pDQogICAgew0KICAg ICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOw0KICAgICAgdm9pZCogX19yZXN1bHQ7 DQoNCiAgICAgIGZvciAoOzspDQogICAgICAgIHsNCiAgICAgICAgICBfX215X21hbGxvY19oYW5k bGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7DQogICAgICAgICAgaWYgKDAgPT0gX19t eV9tYWxsb2NfaGFuZGxlcikNCiAgICAgICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsN CiAgICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7DQogICAgICAgICAgX19yZXN1bHQg PSBtYWxsb2MoX19uKTsNCiAgICAgICAgICBpZiAoX19yZXN1bHQpDQogICAgICAgICAgICByZXR1 cm4oX19yZXN1bHQpOw0KICAgICAgICB9DQogICAgfQ0KDQogIHRlbXBsYXRlIDxpbnQgX19pbnN0 Pg0KICAgIHZvaWQqDQogICAgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29t X3JlYWxsb2Modm9pZCogX19wLCBzaXplX3QgX19uKQ0KICAgIHsNCiAgICAgIHZvaWQgKCogX19t eV9tYWxsb2NfaGFuZGxlcikoKTsNCiAgICAgIHZvaWQqIF9fcmVzdWx0Ow0KDQogICAgICBmb3Ig KDs7KQ0KICAgICAgICB7DQogICAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9j X2FsbG9jX29vbV9oYW5kbGVyOw0KICAgICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRs ZXIpDQogICAgICAgICAgICBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7DQogICAgICAgICAgKCpf X215X21hbGxvY19oYW5kbGVyKSgpOw0KICAgICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3As IF9fbik7DQogICAgICAgICAgaWYgKF9fcmVzdWx0KQ0KICAgICAgICAgICAgcmV0dXJuKF9fcmVz dWx0KTsNCiAgICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdHlwZWRlZiBfX25ld19hbGxv YyBfX21lbV9pbnRlcmZhY2U7DQojIDIxOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf YWxsb2MuaCIgMw0KICB0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCiAgY2xhc3Mg X19zaW1wbGVfYWxsb2MNCiAgew0KICBwdWJsaWM6DQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUo c2l6ZV90IF9fbikNCiAgICB7IHJldHVybiAwID09IF9fbiA/IDAgOiAoX1RwKikgX0FsbG9jOjph bGxvY2F0ZShfX24gKiBzaXplb2YgKF9UcCkpOyB9DQoNCiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0 ZSgpDQogICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsg fQ0KDQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikNCiAg ICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mIChf VHApKTsgfQ0KDQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkNCiAgICB7IF9B bGxvYzo6ZGVhbGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0NCiAgfTsNCiMgMjUxICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzDQogIHRlbXBsYXRlIDxjbGFzcyBf QWxsb2M+DQogIGNsYXNzIF9fZGVidWdfYWxsb2MNCiAgew0KICBwcml2YXRlOg0KICAgIGVudW0g e19TX2V4dHJhID0gOH07DQoNCg0KICBwdWJsaWM6DQoNCiAgICBzdGF0aWMgdm9pZCogYWxsb2Nh dGUoc2l6ZV90IF9fbikNCiAgICB7DQogICAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxs b2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsNCiAgICAgICooc2l6ZV90KilfX3Jl c3VsdCA9IF9fbjsNCiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOw0KICAg IH0NCg0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQ0K ICAgIHsNCiAgICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJh Ow0KICAgICAgKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSA/ICh2b2lkKTAgOiBfX2Fzc2Vy dCgiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIsIDI3MCwgIiooc2l6ZV90 KilfX3JlYWxfcCA9PSBfX24iKSk7DQogICAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19yZWFsX3As IF9fbiArIChpbnQpIF9TX2V4dHJhKTsNCiAgICB9DQoNCiAgICBzdGF0aWMgdm9pZCogcmVhbGxv Y2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KQ0KICAgIHsN CiAgICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOw0KICAg ICAgKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3opID8gKHZvaWQpMCA6IF9fYXNzZXJ0 KCIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiwgMjc3LCAiKihzaXplX3Qq KV9fcmVhbF9wID09IF9fb2xkX3N6IikpOw0KICAgICAgY2hhciogX19yZXN1bHQgPSAoY2hhciop DQogICAgICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAoaW50KSBf U19leHRyYSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zeiAr IChpbnQpIF9TX2V4dHJhKTsNCiAgICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3X3N6Ow0K ICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7DQogICAgfQ0KICB9Ow0KIyAz MjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMNCnRlbXBsYXRlPGJv b2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KICBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGUNCiAgew0KICBwcml2YXRlOg0KICAgIGVudW0ge19BTElHTiA9IDh9Ow0KICAgIGVudW0ge19N QVhfQllURVMgPSAxMjh9Ow0KICAgIGVudW0ge19ORlJFRUxJU1RTID0gX01BWF9CWVRFUyAvIF9B TElHTn07DQoNCiAgICB1bmlvbiBfT2JqDQogICAgew0KICAgICAgdW5pb24gX09iaiogX01fZnJl ZV9saXN0X2xpbms7DQogICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOw0KICAgIH07DQoNCiAg ICBzdGF0aWMgX09iaiogdm9sYXRpbGUgX1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsNCg0KDQog ICAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7DQogICAgc3RhdGljIGNoYXIqIF9TX2VuZF9m cmVlOw0KICAgIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXplOw0KDQogICAgc3RhdGljIF9TVExf bXV0ZXhfbG9jayBfU19ub2RlX2FsbG9jYXRvcl9sb2NrOw0KDQogICAgc3RhdGljIHNpemVfdA0K ICAgIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQ0KICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMp ICsgKHNpemVfdCkgX0FMSUdOLTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAxKSk7IH0NCg0KICAg IHN0YXRpYyBzaXplX3QNCiAgICBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19ieXRlcykNCiAg ICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpX0FMSUdOLTEpLyhzaXplX3QpX0FMSUdO IC0gMSk7IH0NCg0KDQoNCiAgICBzdGF0aWMgdm9pZCoNCiAgICBfU19yZWZpbGwoc2l6ZV90IF9f bik7DQoNCg0KDQogICAgc3RhdGljIGNoYXIqDQogICAgX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9f c2l6ZSwgaW50JiBfX25vYmpzKTsNCg0KDQoNCiAgICBjbGFzcyBfTG9jaw0KICAgIHsNCiAgICBw dWJsaWM6DQogICAgICBfTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3Jf bG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQ0KICAgICAgfl9Mb2NrKCkgeyBpZiAoX190aHJlYWRz KSBfU19ub2RlX2FsbG9jYXRvcl9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9DQogICAgfSBfX2F0 dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOw0KICAgIGZyaWVuZCBjbGFzcyBfTG9jazsNCg0KICBw dWJsaWM6DQoNCiAgICBzdGF0aWMgdm9pZCoNCiAgICBhbGxvY2F0ZShzaXplX3QgX19uKQ0KICAg IHsNCiAgICAgIHZvaWQqIF9fcmV0ID0gMDsNCg0KICAgICAgaWYgKF9fbiA+IChzaXplX3QpIF9N QVhfQllURVMpDQogICAgICAgIF9fcmV0ID0gX19tZW1faW50ZXJmYWNlOjphbGxvY2F0ZShfX24p Ow0KICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlf ZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0DQogICAgICAgICAgICArIF9TX2ZyZWVsaXN0X2luZGV4 KF9fbik7DQoNCg0KDQogICAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOw0KICAgICAgICAg IF9PYmoqIF9fcmVzdHJpY3RfXyBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAgICAg ICBpZiAoX19yZXN1bHQgPT0gMCkNCiAgICAgICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3Jv dW5kX3VwKF9fbikpOw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg ICAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQgLT4gX01fZnJlZV9saXN0X2xpbms7DQogICAg ICAgICAgICAgIF9fcmV0ID0gX19yZXN1bHQ7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAg ICAgIHJldHVybiBfX3JldDsNCiAgICB9Ow0KDQoNCiAgICBzdGF0aWMgdm9pZA0KICAgIGRlYWxs b2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQ0KICAgIHsNCiAgICAgIGlmIChfX24gPiAoc2l6 ZV90KSBfTUFYX0JZVEVTKQ0KICAgICAgICBfX21lbV9pbnRlcmZhY2U6OmRlYWxsb2NhdGUoX19w LCBfX24pOw0KICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgX09iaiogdm9sYXRpbGUq IF9fbXlfZnJlZV9saXN0DQogICAgICAgICAgICA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0 X2luZGV4KF9fbik7DQogICAgICAgICAgX09iaiogX19xID0gKF9PYmoqKV9fcDsNCg0KDQoNCiAg ICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7DQogICAgICAgICAgX19xIC0+IF9NX2ZyZWVf bGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0Ow0KICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9 IF9fcTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHN0YXRpYyB2b2lkKg0KICAgIHJlYWxsb2Nh dGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeik7DQogIH07DQoN Cg0KICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4NCiAgICBpbmxpbmUgYm9v bA0KICAgIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk cywgX19pbnN0PiYsDQogICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8X190aHJlYWRzLCBfX2luc3Q+JikNCiAgICB7IHJldHVybiB0cnVlOyB9DQoNCiAgdGVtcGxh dGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVy YXRvciE9KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4m LA0KICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk cywgX19pbnN0PiYpDQogICAgeyByZXR1cm4gZmFsc2U7IH0NCg0KDQoNCg0KDQogIHRlbXBsYXRl PGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KICAgIGNoYXIqDQogICAgX19kZWZhdWx0X2Fs bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9f c2l6ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpDQogICAgew0KICAgICAgY2hhciogX19yZXN1bHQ7 DQogICAgICBzaXplX3QgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7DQogICAgICBz aXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2ZyZWUgLSBfU19zdGFydF9mcmVlOw0KDQogICAg ICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpDQogICAgICB7DQogICAgICAgIF9f cmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsNCiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFs X2J5dGVzOw0KICAgICAgICByZXR1cm4oX19yZXN1bHQpOw0KICAgICAgfQ0KICAgICAgZWxzZSBp ZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkNCiAgICAgICAgew0KICAgICAgICAgIF9fbm9ianMg PSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsNCiAgICAgICAgICBfX3RvdGFsX2J5dGVzID0g X19zaXplICogX19ub2JqczsNCiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7DQog ICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOw0KICAgICAgICAgIHJldHVy bihfX3Jlc3VsdCk7DQogICAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAg IHNpemVfdCBfX2J5dGVzX3RvX2dldCA9DQogICAgICAgICAgICAyICogX190b3RhbF9ieXRlcyAr IF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsNCg0KICAgICAgICAgIGlmIChfX2J5dGVz X2xlZnQgPiAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSog X19teV9mcmVlX2xpc3QgPQ0KICAgICAgICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVs aXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7DQoNCiAgICAgICAgICAgICAgKChfT2JqKilfU19zdGFy dF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAgICAg ICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7DQogICAgICAgICAg ICB9DQogICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKikgX19tZW1faW50ZXJmYWNlOjph bGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7DQogICAgICAgICAgaWYgKDAgPT0gX1Nfc3RhcnRfZnJl ZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgc2l6ZV90IF9faTsNCiAgICAgICAgICAg ICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0Ow0KICAgICAgICAgICAgICBfT2JqKiBf X3A7DQoNCg0KDQogICAgICAgICAgICAgIF9faSA9IF9fc2l6ZTsNCiAgICAgICAgICAgICAgZm9y ICg7IF9faSA8PSAoc2l6ZV90KSBfTUFYX0JZVEVTOyBfX2kgKz0gKHNpemVfdCkgX0FMSUdOKQ0K ICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1Nf ZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19pKTsNCiAgICAgICAgICAgICAgICAgIF9f cCA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAgICAgICAgICAgICAgIGlmICgwICE9IF9fcCkNCiAg ICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICpfX215X2ZyZWVfbGlz dCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGluazsNCiAgICAgICAgICAgICAgICAgICAgICBfU19z dGFydF9mcmVlID0gKGNoYXIqKV9fcDsNCiAgICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJl ZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2k7DQogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKF9T X2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOw0KDQoNCiAgICAgICAgICAgICAgICAgICAg fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSAwOw0KICAg ICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9fbWVtX2ludGVyZmFjZTo6YWxsb2Nh dGUoX19ieXRlc190b19nZXQpOw0KDQoNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBfU19oZWFw X3NpemUgKz0gX19ieXRlc190b19nZXQ7DQogICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFy dF9mcmVlICsgX19ieXRlc190b19nZXQ7DQogICAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9j KF9fc2l6ZSwgX19ub2JqcykpOw0KICAgICAgICB9DQogICAgfQ0KDQoNCg0KDQoNCiAgdGVtcGxh dGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQogICAgdm9pZCoNCiAgICBfX2RlZmF1bHRf YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikN CiAgICB7DQogICAgICBpbnQgX19ub2JqcyA9IDIwOw0KICAgICAgY2hhciogX19jaHVuayA9IF9T X2NodW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7DQogICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9m cmVlX2xpc3Q7DQogICAgICBfT2JqKiBfX3Jlc3VsdDsNCiAgICAgIF9PYmoqIF9fY3VycmVudF9v Ymo7DQogICAgICBfT2JqKiBfX25leHRfb2JqOw0KICAgICAgaW50IF9faTsNCg0KICAgICAgaWYg KDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmspOw0KICAgICAgX19teV9mcmVlX2xpc3QgPSBf U19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOw0KDQoNCiAgICAgIF9fcmVzdWx0 ID0gKF9PYmoqKV9fY2h1bms7DQogICAgICAqX19teV9mcmVlX2xpc3QgPSBfX25leHRfb2JqID0g KF9PYmoqKShfX2NodW5rICsgX19uKTsNCiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykgew0K ICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsNCiAgICAgICAgX19uZXh0X29iaiA9 IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmogKyBfX24pOw0KICAgICAgICBpZiAoX19ub2JqcyAt IDEgPT0gX19pKSB7DQogICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGlu ayA9IDA7DQogICAgICAgICAgYnJlYWs7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgX19j dXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IF9fbmV4dF9vYmo7DQogICAgICAgIH0N CiAgICAgIH0NCiAgICAgIHJldHVybihfX3Jlc3VsdCk7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8 Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4NCiAgICB2b2lkKg0KICAgIF9fZGVmYXVsdF9hbGxvY190 ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0ZSh2b2lkKiBfX3AsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29s ZF9zeiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IF9fbmV3X3N6KQ0KICAgIHsNCiAgICAgIHZvaWQqIF9fcmVzdWx0Ow0KICAg ICAgc2l6ZV90IF9fY29weV9zejsNCg0KICAgICAgaWYgKF9fb2xkX3N6ID4gKHNpemVfdCkgX01B WF9CWVRFUyAmJiBfX25ld19zeiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsNCiAgICAgICAgcmV0 dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOw0KICAgICAgfQ0KICAgICAgaWYgKF9TX3JvdW5k X3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25ld19zeikpIHJldHVybihfX3ApOw0KICAg ICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7DQogICAgICBfX2NvcHlfc3ogPSBfX25l d19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6Ow0KICAgICAgbWVtY3B5KF9fcmVz dWx0LCBfX3AsIF9fY29weV9zeik7DQogICAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOw0K ICAgICAgcmV0dXJuKF9fcmVzdWx0KTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVh ZHMsIGludCBfX2luc3Q+DQogIF9TVExfbXV0ZXhfbG9jaw0KICBfX2RlZmF1bHRfYWxsb2NfdGVt cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRvcl9sb2NrDQogID0geyAw IH07DQoNCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQogIGNoYXIqIF9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUg PSAwOw0KDQogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KICBjaGFyKiBf X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19lbmRfZnJlZSA9 IDA7DQoNCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQogIHNpemVfdCBf X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19oZWFwX3NpemUg PSAwOw0KDQogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KICB0eXBlbmFt ZSBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfT2JqKiB2b2xh dGlsZQ0KICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19m cmVlX2xpc3RbX05GUkVFTElTVFNdOw0KDQogIHR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBs YXRlPHRydWUsIDA+IF9fYWxsb2M7DQogIHR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl PGZhbHNlLCAwPiBfX3NpbmdsZV9jbGllbnRfYWxsb2M7DQojIDYxMyAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmNsYXNzIGFs bG9jYXRvcg0Kew0KICB0eXBlZGVmIF9fYWxsb2MgX0FsbG9jOw0KcHVibGljOg0KICB0eXBlZGVm IHNpemVfdCBzaXplX3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsN CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2lu dGVyOw0KICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOw0KICB0eXBlZGVmIGNvbnN0IF9UcCYgY29u c3RfcmVmZXJlbmNlOw0KICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KDQogIHRlbXBsYXRlIDxj bGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsNCiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBv dGhlcjsNCiAgfTsNCg0KICBhbGxvY2F0b3IoKSB0aHJvdygpIHt9DQogIGFsbG9jYXRvcihjb25z dCBhbGxvY2F0b3ImKSB0aHJvdygpIHt9DQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0 b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSB7fQ0KICB+YWxsb2NhdG9yKCkgdGhy b3coKSB7fQ0KDQogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVy biAmX194OyB9DQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBj b25zdCB7IHJldHVybiAmX194OyB9DQoNCg0KDQogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9f biwgY29uc3Qgdm9pZCogPSAwKSB7DQogICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8 X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpDQogICAgICAgICAgICAg ICAgICAgIDogMDsNCiAgfQ0KDQoNCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXpl X3R5cGUgX19uKQ0KICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9U cCkpOyB9DQoNCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQ0KICAgIHsgcmV0 dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQ0KDQogIHZvaWQgY29uc3RydWN0KHBvaW50 ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0NCiAgdm9p ZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9DQp9Ow0KDQp0ZW1wbGF0ZTw+ DQpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gew0KcHVibGljOg0KICB0eXBlZGVmIHNpemVfdCBzaXpl X3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB2 b2lkKiBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7DQogIHR5 cGVkZWYgdm9pZCB2YWx1ZV90eXBlOw0KDQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3Qg cmViaW5kIHsNCiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsNCiAgfTsNCn07DQoN Cg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I9 PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikNCnsNCiAgcmV0 dXJuIHRydWU7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGluZSBi b29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1Qy PiYpDQp7DQogIHJldHVybiBmYWxzZTsNCn0NCiMgNjk1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9hbGxvYy5oIiAzDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpz dHJ1Y3QgX19hbGxvY2F0b3INCnsNCiAgX0FsbG9jIF9fdW5kZXJseWluZ19hbGxvYzsNCg0KICB0 eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf dHlwZTsNCiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25z dF9wb2ludGVyOw0KICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOw0KICB0eXBlZGVmIGNvbnN0IF9U cCYgY29uc3RfcmVmZXJlbmNlOw0KICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KDQogIHRlbXBs YXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsNCiAgICB0eXBlZGVmIF9fYWxsb2NhdG9y PF9UcDEsIF9BbGxvYz4gb3RoZXI7DQogIH07DQoNCiAgX19hbGxvY2F0b3IoKSB0aHJvdygpIHt9 DQogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yJiBfX2EpIHRocm93KCkNCiAgICA6IF9f dW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQ0KICB0ZW1wbGF0ZSA8 Y2xhc3MgX1RwMT4NCiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9j PiYgX19hKSB0aHJvdygpDQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWlu Z19hbGxvYykge30NCiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQ0KDQogIHBvaW50ZXIgYWRk cmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9DQogIGNvbnN0X3BvaW50 ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9DQoN Cg0KICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgew0KICAg IHJldHVybiBfX24gIT0gMA0KICAgICAgICA/IHN0YXRpY19jYXN0PF9UcCo+KF9fdW5kZXJseWlu Z19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpDQogICAgICAgIDogMDsNCiAgfQ0K DQoNCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQ0KICAgIHsg X191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0N Cg0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpDQogICAgeyByZXR1cm4gc2l6 ZV90KC0xKSAvIHNpemVvZihfVHApOyB9DQoNCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3As IGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQ0KICB2b2lkIGRlc3Ry b3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0NCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBf QWxsb2M+DQpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsNCiAgdHlwZWRlZiBzaXpl X3Qgc2l6ZV90eXBlOw0KICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5 cGVkZWYgdm9pZCogcG9pbnRlcjsNCiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVy Ow0KICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4g c3RydWN0IHJlYmluZCB7DQogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90 aGVyOw0KICB9Ow0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0KaW5s aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEs DQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYg X19hMikNCnsNCiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRl cmx5aW5nX2FsbG9jOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpp bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19h MSwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+ JiBfX2EyKQ0Kew0KICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgIT0gX19hMi5fX3Vu ZGVybHlpbmdfYWxsb2M7DQp9DQoNCg0KDQoNCg0KDQoNCnRlbXBsYXRlIDxpbnQgaW5zdD4NCmlu bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4m LA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxp bnN0PiYpDQp7DQogIHJldHVybiB0cnVlOw0KfQ0KDQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4NCmlu bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0 PiYsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl PF9faW5zdD4mKQ0Kew0KICByZXR1cm4gZmFsc2U7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfQWxs b2M+DQppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYs DQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsN CiAgcmV0dXJuIHRydWU7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+DQppbmxpbmUgYm9v bCBvcGVyYXRvciE9KGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsDQogICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsNCiAgcmV0dXJuIGZhbHNl Ow0KfQ0KIyA4NDAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMNCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0 cw0Kew0KICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSBmYWxzZTsNCiAgdHlw ZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgYWxs b2NhdG9yX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9y Pg0KY29uc3QgYm9vbCBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNl bGVzczsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxPg0Kc3RydWN0IF9BbGxv Y190cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1RwMT4gPg0Kew0KICBzdGF0aWMgY29uc3QgYm9vbCBf U19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19h bGxvYz4gX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5 cGU7DQp9Ow0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0Pg0Kc3RydWN0 IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4NCnsN CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBf X3NpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxs b2NfdHlwZTsNCiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBs YXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9U cCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAs IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPg0Kew0KICBzdGF0 aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBlZGVmIF9fc2ltcGxl X2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+ DQogICAgICAgICAgX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2Rl ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4NCiAgICAgICAgICBhbGxv Y2F0b3JfdHlwZTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0K c3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPg0Kew0KICBz dGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBlZGVmIF9fc2lt cGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7DQogIHR5 cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3Jf dHlwZTsNCn07DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGludCBf X2luc3Q+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsDQogICAgICAgICAgICAgICAgICAgICBf X2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gPg0Kew0K ICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBlZGVmIF9f c2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxv Y190eXBlOw0KICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxh dGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBjbGFzcyBfVHAxLCBib29sIF9fdGhyLCBpbnQgX19pbnN0Pg0Kc3RydWN0IF9BbGxvY190cmFp dHM8X1RwLA0KICAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy LCBfX2luc3Q+ID4gPg0Kew0KICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0 cnVlOw0KICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBs YXRlPF9fdGhyLF9faW5zdD4gPg0KICAgICAgICAgIF9BbGxvY190eXBlOw0KICB0eXBlZGVmIF9f YWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPg0K ICAgICAgICAgIGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfVHAxLCBjbGFzcyBfQWxsb2M+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxs b2NhdG9yPF9UcDEsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4NCnsNCiAgc3RhdGljIGNvbnN0 IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxf VHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOw0KICB0eXBlZGVmIF9fYWxs b2NhdG9yPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0K DQoNCg0KDQoNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjxjaGFyPjsNCiAgZXh0 ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjx3Y2hhcl90PjsNCg0KDQoNCiAgZXh0ZXJuIHRl bXBsYXRlIGNsYXNzIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPjsNCg0KfQ0KIyA1 NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMw0KIyA2NyAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCg0KDQoN CiAgdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KICAgIGlubGluZSB2b2lkDQogICAg X0NvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKQ0KICAgIHsgbmV3IChzdGF0 aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKF9fdmFsdWUpOyB9DQoNCg0KDQoNCg0KDQoNCiAgdGVt cGxhdGUgPGNsYXNzIF9UMT4NCiAgICBpbmxpbmUgdm9pZA0KICAgIF9Db25zdHJ1Y3QoX1QxKiBf X3ApDQogICAgeyBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEoKTsgfQ0KIyA5OCAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDMNCiAgdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQogICAgaW5saW5lIHZvaWQNCiAgICBfX2Rlc3Ryb3lf YXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9f ZmFsc2VfdHlwZSkNCiAgICB7IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkg X0Rlc3Ryb3koJipfX2ZpcnN0KTsgfQ0KIyAxMTIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2NvbnN0cnVjdC5oIiAzDQogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPg0K ICAgIGlubGluZSB2b2lkDQogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9y d2FyZEl0ZXJhdG9yLCBfX3RydWVfdHlwZSkNCiAgICB7IH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxh dGUgPGNsYXNzIF9UcD4NCiAgICBpbmxpbmUgdm9pZA0KICAgIF9EZXN0cm95KF9UcCogX19wb2lu dGVyKQ0KICAgIHsgX19wb2ludGVyLT5+X1RwKCk7IH0NCiMgMTM0ICIvdXNyL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMw0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyYXRvcj4NCiAgICBpbmxpbmUgdm9pZA0KICAgIF9EZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3Ig X19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpDQogICAgew0KICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUNCiAg ICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9fdHlwZV90cmFpdHM8X1ZhbHVlX3R5cGU+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yDQogICAg ICAgICAgICAgICAgICAgICAgIF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KDQogICAgICBfX2Rl c3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0hhc190cml2aWFsX2Rlc3RydWN0b3IoKSk7DQog ICAgfQ0KfQ0KIyA1NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAyIDMNCg0KIyAxICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMw0KIyA2NiAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzDQpuYW1lc3Bh Y2Ugc3RkDQp7DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l IF9Gb3J3YXJkSXRlcj4NCiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyDQogICAgX191bmluaXRpYWxp emVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpDQogICAgeyByZXR1cm4gY29weShfX2Zp cnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0 ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4NCiAgICBfRm9yd2FyZEl0ZXINCiAgICBfX3VuaW5p dGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpDQogICAgew0KICAgICAgX0Zv cndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7DQogICAgICB0cnkgew0KICAgICAgICBmb3IgKCA7 IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpDQogICAgICAgICAgX0NvbnN0 cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7DQogICAgICAgIHJldHVybiBfX2N1cjsNCiAgICAgIH0N CiAgICAgIGNhdGNoKC4uLikNCiAgICAgICAgew0KICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0 LCBfX2N1cik7DQogICAgICAgICAgdGhyb3c7DQogICAgICAgIH0NCiAgICB9DQojIDEwNiAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4NCiAgICBpbmxpbmUg X0ZvcndhcmRJdGVyDQogICAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkNCiAgICB7DQogICAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBl IF9WYWx1ZVR5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVl VHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7DQogICAgICByZXR1cm4gX191bmluaXRpYWxpemVk X2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0QoKSk7DQogICAgfQ0K DQogIGlubGluZSBjaGFyKg0KICB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJz dCwgY29uc3QgY2hhciogX19sYXN0LCBjaGFyKiBfX3Jlc3VsdCkNCiAgew0KICAgIG1lbW1vdmUo X19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmlyc3QpOw0KICAgIHJldHVybiBfX3Jlc3Vs dCArIChfX2xhc3QgLSBfX2ZpcnN0KTsNCiAgfQ0KDQogIGlubGluZSB3Y2hhcl90Kg0KICB1bmlu aXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19s YXN0LA0KICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCogX19yZXN1bHQpDQogIHsNCiAgICBt ZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19m aXJzdCkpOw0KICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsNCiAgfQ0K DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4NCiAg ICBpbmxpbmUgdm9pZA0KICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQ0KICAgIHsgZmlsbChfX2ZpcnN0LCBfX2xh c3QsIF9feCk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l IF9UcD4NCiAgICB2b2lkDQogICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQ0KICAgIHsNCiAgICAgIF9Gb3J3YXJk SXRlciBfX2N1ciA9IF9fZmlyc3Q7DQogICAgICB0cnkgew0KICAgICAgICBmb3IgKCA7IF9fY3Vy ICE9IF9fbGFzdDsgKytfX2N1cikNCiAgICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7 DQogICAgICB9DQogICAgICBjYXRjaCguLi4pDQogICAgICAgIHsNCiAgICAgICAgICBfRGVzdHJv eShfX2ZpcnN0LCBfX2N1cik7DQogICAgICAgICAgdGhyb3c7DQogICAgICAgIH0NCiAgICB9DQoj IDE2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPg0KICAgIGlubGlu ZSB2b2lkDQogICAgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9feCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5 cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omlz X1BPRF90eXBlIF9Jc19QT0Q7DQogICAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19maXJz dCwgX19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7DQogICAgfQ0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+DQogICAgaW5s aW5lIF9Gb3J3YXJkSXRlcg0KICAgIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQ0KICAgIHsNCiAgICAgIHJldHVybiBmaWxsX24o X19maXJzdCwgX19uLCBfX3gpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+DQogICAgX0ZvcndhcmRJdGVyDQog ICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXpl IF9fbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19m YWxzZV90eXBlKQ0KICAgIHsNCiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7DQog ICAgICB0cnkgew0KICAgICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQ0KICAg ICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsNCiAgICAgICAgcmV0dXJuIF9fY3VyOw0K ICAgICAgfQ0KICAgICAgY2F0Y2goLi4uKQ0KICAgICAgICB7DQogICAgICAgICAgX0Rlc3Ryb3ko X19maXJzdCwgX19jdXIpOw0KICAgICAgICAgIHRocm93Ow0KICAgICAgICB9DQogICAgfQ0KIyAy MTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMw0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBf VHA+DQogICAgaW5saW5lIF9Gb3J3YXJkSXRlcg0KICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9G b3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194KQ0KICAgIHsNCiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVl X3R5cGUgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxf VmFsdWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsNCiAgICAgIHJldHVybiBfX3VuaW5pdGlh bGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsNCiAgICB9DQoj IDIyNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlw ZW5hbWUgX0ZvcndhcmRJdGVyPg0KICAgIGlubGluZSBfRm9yd2FyZEl0ZXINCiAgICBfX3VuaW5p dGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh c3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs IF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y d2FyZEl0ZXIgX19yZXN1bHQpDQogICAgew0KICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gdW5p bml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7DQogICAgICB0cnkg ew0KICAgICAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBf X21pZCk7DQogICAgICB9DQogICAgICBjYXRjaCguLi4pDQogICAgICAgIHsNCiAgICAgICAgICBf RGVzdHJveShfX3Jlc3VsdCwgX19taWQpOw0KICAgICAgICAgIHRocm93Ow0KICAgICAgICB9DQog ICAgfQ0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg X1RwLCB0eXBlbmFtZSBfSW5wdXRJdGVyPg0KICAgIGlubGluZSBfRm9yd2FyZEl0ZXINCiAgICBf X3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJ dGVyIF9fbWlkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0KQ0KICAgIHsNCiAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX3Jlc3VsdCwg X19taWQsIF9feCk7DQogICAgICB0cnkgew0KICAgICAgICByZXR1cm4gdW5pbml0aWFsaXplZF9j b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOw0KICAgICAgfQ0KICAgICAgY2F0Y2goLi4uKQ0K ICAgICAgICB7DQogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsNCiAgICAgICAg ICB0aHJvdzsNCiAgICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4NCiAgICBpbmxp bmUgdm9pZA0KICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2ZpbGwoX0lucHV0SXRlciBfX2ZpcnN0 MSwgX0lucHV0SXRlciBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv cndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQ0KICAgIHsNCiAgICAgIF9Gb3J3YXJkSXRl ciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3Qy KTsNCiAgICAgIHRyeSB7DQogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX21pZDIsIF9fbGFz dDIsIF9feCk7DQogICAgICB9DQogICAgICBjYXRjaCguLi4pDQogICAgICAgIHsNCiAgICAgICAg ICBfRGVzdHJveShfX2ZpcnN0MiwgX19taWQyKTsNCiAgICAgICAgICB0aHJvdzsNCiAgICAgICAg fQ0KICAgIH0NCg0KfQ0KIyA1OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAyIDMNCiMg MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAxIDMN CiMgNjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIg Mw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KDQogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXJhdG9yLCBjbGFzcyBfVHA+DQogIGNsYXNzIHJhd19zdG9yYWdlX2l0ZXJhdG9yDQogICAgOiBw dWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9p ZD4NCiAgICB7DQogICAgcHJvdGVjdGVkOg0KICAgICAgX0ZvcndhcmRJdGVyYXRvciBfTV9pdGVy Ow0KDQogICAgcHVibGljOg0KICAgICAgZXhwbGljaXQNCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJh dG9yKF9Gb3J3YXJkSXRlcmF0b3IgX194KSA6IF9NX2l0ZXIoX194KSB7fQ0KDQogICAgICByYXdf c3RvcmFnZV9pdGVyYXRvciYNCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9DQoN CiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3I9KGNvbnN0IF9UcCYg X19lbGVtZW50KQ0KICAgICAgew0KICAgICAgICBfQ29uc3RydWN0KCYqX01faXRlciwgX19lbGVt ZW50KTsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0KDQogICAgICByYXdfc3RvcmFn ZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+Jg0KICAgICAgb3BlcmF0b3IrKygpDQog ICAgICB7DQogICAgICAgICsrX01faXRlcjsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAg fQ0KDQogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+DQog ICAgICBvcGVyYXRvcisrKGludCkNCiAgICAgIHsNCiAgICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0 b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBfX3RtcCA9ICp0aGlzOw0KICAgICAgICArK19NX2l0 ZXI7DQogICAgICAgIHJldHVybiBfX3RtcDsNCiAgICAgIH0NCiAgICB9Ow0KfQ0KIyA2MCAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAyIDMNCg0KDQoNCg0KbmFtZXNwYWNlIHN0ZA0Kew0K IyA3NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzDQp0ZW1wbGF0ZSA8dHlwZW5hbWUg X1RwPg0KcGFpcjxfVHAqLCBwdHJkaWZmX3Q+DQpfX2dldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRp ZmZfdCBfX2xlbiwgX1RwKikNCnsNCiAgaWYgKF9fbGVuID4gcHRyZGlmZl90KDIxNDc0ODM2NDcg LyBzaXplb2YoX1RwKSkpDQogICAgX19sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7DQoN CiAgd2hpbGUgKF9fbGVuID4gMCkgew0KICAgIF9UcCogX190bXAgPSAoX1RwKikgc3RkOjptYWxs b2MoKHN0ZDo6c2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOw0KICAgIGlmIChfX3RtcCAhPSAw KQ0KICAgICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PihfX3RtcCwgX19sZW4pOw0KICAg IF9fbGVuIC89IDI7DQogIH0NCg0KICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChfVHAq KTAsIDApOw0KfQ0KIyAxMDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMw0KdGVtcGxh dGU8dHlwZW5hbWUgX1RwPg0KICBpbmxpbmUgcGFpcjxfVHAqLHB0cmRpZmZfdD4NCiAgZ2V0X3Rl bXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuKQ0KICB7DQogICAgcmV0dXJuIF9fZ2V0X3Rl bXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsNCiAgfQ0KIyAxMjAgIi91c3IvaW5jbHVk ZS9jKysvMy4yL21lbW9yeSIgMw0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICB2b2lkDQogIHJl dHVybl90ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKQ0KICB7DQogICAgc3RkOjpmcmVlKF9fcCk7 DQogIH0NCiMgMTM1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMNCnRlbXBsYXRlPHR5 cGVuYW1lIF9UcDE+DQogIHN0cnVjdCBhdXRvX3B0cl9yZWYNCnsNCiAgIF9UcDEqIF9NX3B0cjsN Cg0KICAgZXhwbGljaXQNCiAgIGF1dG9fcHRyX3JlZihfVHAxKiBfX3ApDQogICA6IF9NX3B0cihf X3ApIHt9DQp9Ow0KIyAxNzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMw0KdGVtcGxh dGU8dHlwZW5hbWUgX1RwPg0KICBjbGFzcyBhdXRvX3B0cg0Kew0KcHJpdmF0ZToNCiAgX1RwKiBf TV9wdHI7DQoNCnB1YmxpYzoNCg0KICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7DQoNCg0KDQoN Cg0KDQoNCiAgZXhwbGljaXQNCiAgYXV0b19wdHIoZWxlbWVudF90eXBlKiBfX3AgPSAwKSB0aHJv dygpDQogIDogX01fcHRyKF9fcCkgeyB9DQojIDIwMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVt b3J5IiAzDQogIGF1dG9fcHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkNCiAgOiBfTV9wdHIoX19h LnJlbGVhc2UoKSkgeyB9DQojIDIxNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+DQogICAgYXV0b19wdHIoYXV0b19wdHI8X1RwMT4mIF9f YSkgdGhyb3coKQ0KICAgIDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHsgfQ0KIyAyMjYgIi91c3Iv aW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMw0KICBhdXRvX3B0ciYNCiAgb3BlcmF0b3I9KGF1dG9f cHRyJiBfX2EpIHRocm93KCkNCiAgICB7DQogICAgICByZXNldChfX2EucmVsZWFzZSgpKTsNCiAg ICAgIHJldHVybiAqdGhpczsNCiAgICB9DQojIDI0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVt b3J5IiAzDQogIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAxPg0KICAgIGF1dG9fcHRyJg0KICAgIG9w ZXJhdG9yPShhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpDQogICAgew0KICAgICAgcmVzZXQo X19hLnJlbGVhc2UoKSk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KIyAyNjMgIi91c3Iv aW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMw0KICB+YXV0b19wdHIoKSB7IGRlbGV0ZSBfTV9wdHI7 IH0NCiMgMjczICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMNCiAgZWxlbWVudF90eXBl Jg0KICBvcGVyYXRvciooKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICpfTV9wdHI7IH0NCg0KDQoN Cg0KDQoNCg0KICBlbGVtZW50X3R5cGUqDQogIG9wZXJhdG9yLT4oKSBjb25zdCB0aHJvdygpIHsg cmV0dXJuIF9NX3B0cjsgfQ0KIyAyOTUgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMw0K ICBlbGVtZW50X3R5cGUqDQogIGdldCgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gX01fcHRyOyB9 DQojIDMwOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzDQogIGVsZW1lbnRfdHlwZSoN CiAgcmVsZWFzZSgpIHRocm93KCkNCiAgICB7DQogICAgICBlbGVtZW50X3R5cGUqIF9fdG1wID0g X01fcHRyOw0KICAgICAgX01fcHRyID0gMDsNCiAgICAgIHJldHVybiBfX3RtcDsNCiAgICB9DQoj IDMyNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzDQogIHZvaWQNCiAgcmVzZXQoZWxl bWVudF90eXBlKiBfX3AgPSAwKSB0aHJvdygpDQogICAgew0KICAgICAgaWYgKF9fcCAhPSBfTV9w dHIpDQogICAgICAgIHsNCiAgICAgICAgICBkZWxldGUgX01fcHRyOw0KICAgICAgICAgIF9NX3B0 ciA9IF9fcDsNCiAgICAgICAgfQ0KICAgIH0NCiMgMzQ1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9t ZW1vcnkiIDMNCiAgYXV0b19wdHIoYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19yZWYpIHRo cm93KCkNCiAgICA6IF9NX3B0cihfX3JlZi5fTV9wdHIpIHt9DQoNCiAgYXV0b19wdHImDQogIG9w ZXJhdG9yPShhdXRvX3B0cl9yZWY8ZWxlbWVudF90eXBlPiBfX3JlZikgdGhyb3coKQ0KICAgIHsN CiAgICAgIGlmIChfX3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpDQogICAgICAgIHsNCiAgICAg ICAgICBkZWxldGUgX01fcHRyOw0KICAgICAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsNCiAg ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHAxPg0KICAgIG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAxPigpIHRocm93KCkNCiAgICAg IHsgcmV0dXJuIGF1dG9fcHRyX3JlZjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwMT4NCiAgICBvcGVyYXRvciBhdXRvX3B0cjxfVHAxPigpIHRocm93 KCkNCiAgICAgIHsgcmV0dXJuIGF1dG9fcHRyPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0NCg0K fTsNCg0KfQ0KIyA0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMNCg0KDQoNCiMg MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMSAzDQojIDY0ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzDQpuYW1lc3BhY2Ugc3Rk DQp7DQojIDEwMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMw0K dGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+DQpzdHJ1Y3QgdW5hcnlfZnVuY3Rp b24gew0KICB0eXBlZGVmIF9BcmcgYXJndW1lbnRfdHlwZTsNCiAgdHlwZWRlZiBfUmVzdWx0IHJl c3VsdF90eXBlOw0KfTsNCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJn MiwgY2xhc3MgX1Jlc3VsdD4NCnN0cnVjdCBiaW5hcnlfZnVuY3Rpb24gew0KICB0eXBlZGVmIF9B cmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7DQogIHR5cGVkZWYgX0FyZzIgc2Vjb25kX2FyZ3VtZW50 X3R5cGU7DQogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsNCn07DQojIDEyNyAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9U cD4NCnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gew0K ICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsg cmV0dXJuIF9feCArIF9feTsgfQ0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0 IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gew0KICBfVHAgb3Bl cmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f eCAtIF9feTsgfQ0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IG11bHRpcGxp ZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7DQogIF9UcCBvcGVyYXRv cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICog X195OyB9DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgZGl2aWRlcyA6IHB1 YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsNCiAgX1RwIG9wZXJhdG9yKCkoY29u c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7IH0N Cn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJp bmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4NCnsNCiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1Rw JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJSBfX3k7IH0NCn07DQoN Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVu Y3Rpb248X1RwLF9UcD4NCnsNCiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0 IHsgcmV0dXJuIC1fX3g7IH0NCn07DQojIDE3MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfZnVuY3Rpb24uaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBlcXVhbF90byA6 IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPg0Kew0KICBib29sIG9wZXJhdG9y KCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0g X195OyB9DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3Qgbm90X2VxdWFsX3Rv IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+DQp7DQogIGJvb2wgb3BlcmF0 b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAh PSBfX3k7IH0NCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBncmVhdGVyIDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+DQp7DQogIGJvb2wgb3BlcmF0b3Io KShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+IF9f eTsgfQ0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IGxlc3MgOiBwdWJsaWMg YmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4NCnsNCiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0 IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDwgX195OyB9DQp9 Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1Ymxp YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPg0Kew0KICBib29sIG9wZXJhdG9yKCkoY29u c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPj0gX195OyB9 DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1Ymxp YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPg0Kew0KICBib29sIG9wZXJhdG9yKCkoY29u c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPD0gX195OyB9 DQp9Ow0KIyAyMjIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMN CnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5 X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4NCnsNCiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg X194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9feTsgfQ0KfTsNCg0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5 X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4NCnsNCiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg X194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8IF9feTsgfQ0KfTsNCg0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5 X2Z1bmN0aW9uPF9UcCxib29sPg0Kew0KICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gp IGNvbnN0IHsgcmV0dXJuICFfX3g7IH0NCn07DQojIDI3MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfZnVuY3Rpb24uaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+DQpjbGFz cyB1bmFyeV9uZWdhdGUNCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRp Y2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4gew0KcHJvdGVjdGVkOg0KICBfUHJlZGljYXRlIF9N X3ByZWQ7DQpwdWJsaWM6DQogIGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRl JiBfX3gpIDogX01fcHJlZChfX3gpIHt9DQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFt ZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsNCiAgICByZXR1cm4gIV9N X3ByZWQoX194KTsNCiAgfQ0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4NCmlu bGluZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4NCm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19w cmVkKQ0Kew0KICByZXR1cm4gdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7DQp9DQoN Cg0KdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+DQpjbGFzcyBiaW5hcnlfbmVnYXRlDQogIDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVu dF90eXBlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6 c2Vjb25kX2FyZ3VtZW50X3R5cGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBib29sPiB7 DQpwcm90ZWN0ZWQ6DQogIF9QcmVkaWNhdGUgX01fcHJlZDsNCnB1YmxpYzoNCiAgZXhwbGljaXQg YmluYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9DQog IGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVu dF90eXBlJiBfX3gsDQogICAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRl OjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KSBjb25zdA0KICB7DQogICAgcmV0dXJuICFfTV9w cmVkKF9feCwgX195KTsNCiAgfQ0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4N CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+DQpub3QyKGNvbnN0IF9QcmVkaWNhdGUm IF9fcHJlZCkNCnsNCiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsN Cn0NCiMgMzQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzDQp0 ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4NCmNsYXNzIGJpbmRlcjFzdA0KICA6IHB1YmxpYyB1 bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5 cGU+IHsNCnByb3RlY3RlZDoNCiAgX09wZXJhdGlvbiBvcDsNCiAgdHlwZW5hbWUgX09wZXJhdGlv bjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsNCnB1YmxpYzoNCiAgYmluZGVyMXN0KGNvbnN0 IF9PcGVyYXRpb24mIF9feCwNCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246 OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkNCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7 fQ0KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQ0KICBvcGVyYXRvcigpKGNvbnN0 IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsN CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7DQogIH0NCg0KDQogIHR5cGVuYW1lIF9PcGVyYXRp b246OnJlc3VsdF90eXBlDQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25k X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qgew0KICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsN CiAgfQ0KDQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+DQpp bmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+DQpiaW5kMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9f Zm4sIGNvbnN0IF9UcCYgX194KQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OmZp cnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsNCiAgcmV0dXJuIGJpbmRlcjFzdDxfT3BlcmF0 aW9uPihfX2ZuLCBfQXJnMV90eXBlKF9feCkpOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfT3Bl cmF0aW9uPg0KY2xhc3MgYmluZGVyMm5kDQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVu YW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsDQogICAgICAgICAgICAgICAgICAg ICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7DQpwcm90ZWN0ZWQ6DQog IF9PcGVyYXRpb24gb3A7DQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90 eXBlIHZhbHVlOw0KcHVibGljOg0KICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LA0K ICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5 cGUmIF9feSkNCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQ0KICB0eXBlbmFtZSBfT3Bl cmF0aW9uOjpyZXN1bHRfdHlwZQ0KICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRp b246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qgew0KICAgIHJldHVybiBvcChfX3gs IHZhbHVlKTsNCiAgfQ0KDQoNCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUNCiAg b3BlcmF0b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gp IGNvbnN0IHsNCiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7DQogIH0NCg0KfTsNCg0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPg0KaW5saW5lIGJpbmRlcjJuZDxfT3Bl cmF0aW9uPg0KYmluZDJuZChjb25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkN CnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBf QXJnMl90eXBlOw0KICByZXR1cm4gYmluZGVyMm5kPF9PcGVyYXRpb24+KF9fZm4sIF9BcmcyX3R5 cGUoX194KSk7DQp9DQojIDQzOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rp b24uaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+DQpjbGFzcyBwb2lu dGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1 bHQ+IHsNCnByb3RlY3RlZDoNCiAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZyk7DQpwdWJsaWM6DQog IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oKSB7fQ0KICBleHBsaWNpdCBwb2ludGVyX3RvX3Vu YXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcpKSA6IF9NX3B0cihfX3gpIHt9DQogIF9S ZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7IH0N Cn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+DQppbmxpbmUgcG9p bnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpf X3gpKF9BcmcpKQ0Kew0KICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBf UmVzdWx0PihfX3gpOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIs IGNsYXNzIF9SZXN1bHQ+DQpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6DQogIHB1 YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4gew0KcHJvdGVjdGVkOg0K ICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7DQpwdWJsaWM6DQogICAgcG9pbnRl cl90b19iaW5hcnlfZnVuY3Rpb24oKSB7fQ0KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5 X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpDQogICAgICA6IF9NX3B0cihf X3gpIHt9DQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwgX0FyZzIgX195KSBjb25z dCB7DQogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195KTsNCiAgICB9DQp9Ow0KDQoNCnRlbXBs YXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+DQppbmxpbmUgcG9p bnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4NCnB0cl9mdW4oX1Jl c3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgew0KICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlf ZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4oX194KTsNCn0NCg0KDQp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPg0Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1Rw PiB7DQogIF9UcCYgb3BlcmF0b3IoKShfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9DQog IGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194 OyB9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+DQpzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1 YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+IHsN CiAgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29u c3Qgew0KICAgIHJldHVybiBfX3guZmlyc3Q7DQogIH0NCiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6 OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3Qgew0KICAgIHJl dHVybiBfX3guZmlyc3Q7DQogIH0NCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4NCnN0cnVj dCBfU2VsZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFp cjo6c2Vjb25kX3R5cGU+DQp7DQogIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0 b3IoKShfUGFpciYgX194KSBjb25zdCB7DQogICAgcmV0dXJuIF9feC5zZWNvbmQ7DQogIH0NCiAg Y29uc3QgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWly JiBfX3gpIGNvbnN0IHsNCiAgICByZXR1cm4gX194LnNlY29uZDsNCiAgfQ0KfTsNCiMgNTI4ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzDQp0ZW1wbGF0ZSA8Y2xh c3MgX1JldCwgY2xhc3MgX1RwPg0KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0 aW9uPF9UcCosX1JldD4gew0KcHVibGljOg0KICBleHBsaWNpdCBtZW1fZnVuX3QoX1JldCAoX1Rw OjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9DQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkg Y29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0NCnByaXZhdGU6DQogIF9SZXQgKF9UcDo6 Kl9NX2YpKCk7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+DQpjbGFz cyBjb25zdF9tZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfUmV0 PiB7DQpwdWJsaWM6DQogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3Bm KSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30NCiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCog X19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQ0KcHJpdmF0ZToNCiAgX1JldCAo X1RwOjoqX01fZikoKSBjb25zdDsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz IF9UcD4NCmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9S ZXQ+IHsNCnB1YmxpYzoNCiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3Bm KSgpKSA6IF9NX2YoX19wZikge30NCiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7 IHJldHVybiAoX19yLipfTV9mKSgpOyB9DQpwcml2YXRlOg0KICBfUmV0IChfVHA6OipfTV9mKSgp Ow0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPg0KY2xhc3MgY29uc3Rf bWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gew0KcHVibGlj Og0KICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29u c3QpIDogX01fZihfX3BmKSB7fQ0KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNv bnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0NCnByaXZhdGU6DQogIF9SZXQgKF9UcDo6Kl9N X2YpKCkgY29uc3Q7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNs YXNzIF9Bcmc+DQpjbGFzcyBtZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAq LF9BcmcsX1JldD4gew0KcHVibGljOg0KICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6 Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30NCiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19w LCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0NCnByaXZhdGU6 DQogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOw0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl dCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPg0KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1Ymxp YyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+IHsNCnB1YmxpYzoNCiAgZXhw bGljaXQgY29uc3RfbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBf TV9mKF9fcGYpIHt9DQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gp IGNvbnN0DQogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0NCnByaXZhdGU6DQogIF9S ZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Ow0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl dCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPg0KY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMg YmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsNCnB1YmxpYzoNCiAgZXhwbGljaXQgbWVt X2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQ0KICBf UmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipf TV9mKShfX3gpOyB9DQpwcml2YXRlOg0KICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsNCn07DQoN Cg0KdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4NCmNsYXNzIGNv bnN0X21lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0 PiB7DQpwdWJsaWM6DQogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6 Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30NCiAgX1JldCBvcGVyYXRvcigpKGNv bnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsg fQ0KcHJpdmF0ZToNCiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7DQp9Ow0KDQoNCnRl bXBsYXRlIDxjbGFzcyBfVHA+DQpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1 bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsNCnB1YmxpYzoNCiAgZXhwbGljaXQgbWVtX2Z1bl90 KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQ0KICB2b2lkIG9wZXJhdG9yKCko X1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0NCnByaXZhdGU6DQogIHZvaWQgKF9U cDo6Kl9NX2YpKCk7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpjbGFzcyBjb25zdF9t ZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLHZv aWQ+IHsNCnB1YmxpYzoNCiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9f cGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQ0KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1Rw KiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0NCnByaXZhdGU6DQogIHZvaWQgKF9UcDo6 Kl9NX2YpKCkgY29uc3Q7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpjbGFzcyBtZW1f ZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsN CnB1YmxpYzoNCiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6 IF9NX2YoX19wZikge30NCiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IChfX3Iu Kl9NX2YpKCk7IH0NCnByaXZhdGU6DQogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7DQp9Ow0KDQoNCnRl bXBsYXRlIDxjbGFzcyBfVHA+DQpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4g OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsNCnB1YmxpYzoNCiAgZXhwbGljaXQg Y29uc3RfbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19w Zikge30NCiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9N X2YpKCk7IH0NCnByaXZhdGU6DQogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7DQp9Ow0KDQoN CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+DQpjbGFzcyBtZW1fZnVuMV90PHZvaWQs IF9UcCwgX0FyZz4gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyx2b2lkPiB7DQpw dWJsaWM6DQogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDog X01fZihfX3BmKSB7fQ0KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25z dCB7IChfX3AtPipfTV9mKShfX3gpOyB9DQpwcml2YXRlOg0KICB2b2lkIChfVHA6OipfTV9mKShf QXJnKTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4NCmNsYXNzIGNv bnN0X21lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPg0KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp b248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsNCnB1YmxpYzoNCiAgZXhwbGljaXQgY29uc3RfbWVt X2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9DQog IHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+ Kl9NX2YpKF9feCk7IH0NCnByaXZhdGU6DQogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0 Ow0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPg0KY2xhc3MgbWVtX2Z1 bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJnPg0KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw LF9Bcmcsdm9pZD4gew0KcHVibGljOg0KICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdCh2b2lkIChf VHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9DQogIHZvaWQgb3BlcmF0b3IoKShfVHAm IF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQ0KcHJpdmF0ZToNCiAg dm9pZCAoX1RwOjoqX01fZikoX0FyZyk7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9Bcmc+DQpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+DQog IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7DQpwdWJsaWM6DQogIGV4 cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0 KSA6IF9NX2YoX19wZikge30NCiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJn IF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9DQpwcml2YXRlOg0KICB2b2lkIChfVHA6 OipfTV9mKShfQXJnKSBjb25zdDsNCn07DQoNCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9SZXQs IGNsYXNzIF9UcD4NCmlubGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1Rw OjoqX19mKSgpKQ0KICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0NCg0KdGVt cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4NCmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1Jl dCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQ0KICB7IHJldHVybiBjb25z dF9tZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs YXNzIF9UcD4NCmlubGluZSBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0 IChfVHA6OipfX2YpKCkpDQogIHsgcmV0dXJuIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7 IH0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4NCmlubGluZSBjb25zdF9tZW1f ZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkgY29uc3Qp DQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0NCg0KdGVt cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4NCmlubGluZSBtZW1fZnVu MV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkNCiAgeyBy ZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9DQoNCnRlbXBsYXRlIDxjbGFz cyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+DQppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxf UmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpDQogIHsg cmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQ0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPg0KaW5saW5lIG1lbV9mdW4xX3Jl Zl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpDQog IHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0NCg0KdGVtcGxh dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4NCmlubGluZSBjb25zdF9tZW1f ZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPg0KbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShf QXJnKSBjb25zdCkNCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0Fy Zz4oX19mKTsgfQ0KDQoNCg0KfQ0KIyA1MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAy IDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMSAzDQoj IDQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzDQoNCiMgMSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3aW4vYml0cy9hdG9taWNpdHkuaCIgMSAz DQojIDMzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWN5Z3dpbi9iaXRzL2F0b21pY2l0 eS5oIiAzDQp0eXBlZGVmIGludCBfQXRvbWljX3dvcmQ7DQoNCnN0YXRpYyBpbmxpbmUgX0F0b21p Y193b3JkDQpfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpDQpfX2V4Y2hhbmdlX2FuZF9hZGQg KHZvbGF0aWxlIF9BdG9taWNfd29yZCAqX19tZW0sIGludCBfX3ZhbCkNCnsNCiAgcmVnaXN0ZXIg X0F0b21pY193b3JkIF9fcmVzdWx0Ow0KICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IHhh ZGRsICUwLCUyIg0KICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChfX3Jlc3VsdCkNCiAg ICAgICAgICAgICAgICAgICAgICAgIDogIjAiIChfX3ZhbCksICJtIiAoKl9fbWVtKQ0KICAgICAg ICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7DQogIHJldHVybiBfX3Jlc3VsdDsNCn0NCg0K c3RhdGljIGlubGluZSB2b2lkDQpfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpDQpfX2F0b21p Y19hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkNCnsNCiAgX19h c21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyBhZGRsICUwLCUxIg0KICAgICAgICAgICAgICAgICAg ICAgICAgOiA6ICJpciIgKF9fdmFsKSwgIm0iICgqX19tZW0pIDogIm1lbW9yeSIpOw0KfQ0KIyA0 NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMiAzDQoNCm5hbWVz cGFjZSBzdGQNCnsNCiMgODggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5n LmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+DQogICAgY2xhc3MgYmFzaWNfc3RyaW5nDQogICAgew0KDQogICAgcHVibGlj Og0KICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfVHJhaXRzOjpjaGFyX3R5cGUgdmFsdWVfdHlwZTsNCiAgICAgIHR5cGVkZWYgX0FsbG9j IGFsbG9jYXRvcl90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlw ZSBzaXplX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90 eXBlIGRpZmZlcmVuY2VfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZl cmVuY2UgcmVmZXJlbmNlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3Jl ZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6 cG9pbnRlciBwb2ludGVyOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3Bv aW50ZXIgY29uc3RfcG9pbnRlcjsNCiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9p dGVyYXRvcjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9yOw0KICAgICAgdHlwZWRlZiBf X2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIGJhc2ljX3N0cmluZz4N CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0X2l0ZXJhdG9yOw0KICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0 X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOw0KICAgICAgdHlwZWRlZiByZXZlcnNl X2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOw0KDQogICAgcHJpdmF0ZToNCiMg MTIzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzDQogICAgICBz dHJ1Y3QgX1JlcA0KICAgICAgew0KDQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0 ZW1wbGF0ZSByZWJpbmQ8Y2hhcj46Om90aGVyIF9SYXdfYnl0ZXNfYWxsb2M7DQojIDE0MSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMw0KICAgICAgICBzdGF0aWMg Y29uc3Qgc2l6ZV90eXBlIF9TX21heF9zaXplOw0KICAgICAgICBzdGF0aWMgY29uc3QgX0NoYXJU IF9TX3Rlcm1pbmFsOw0KDQogICAgICAgIHNpemVfdHlwZSBfTV9sZW5ndGg7DQogICAgICAgIHNp emVfdHlwZSBfTV9jYXBhY2l0eTsNCiAgICAgICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7 DQoNCiAgICAgICAgYm9vbA0KICAgICAgICBfTV9pc19sZWFrZWQoKSBjb25zdA0KICAgICAgICB7 IHJldHVybiBfTV9yZWZlcmVuY2VzIDwgMDsgfQ0KDQogICAgICAgIGJvb2wNCiAgICAgICAgX01f aXNfc2hhcmVkKCkgY29uc3QNCiAgICAgICAgeyByZXR1cm4gX01fcmVmZXJlbmNlcyA+IDA7IH0N Cg0KICAgICAgICB2b2lkDQogICAgICAgIF9NX3NldF9sZWFrZWQoKQ0KICAgICAgICB7IF9NX3Jl ZmVyZW5jZXMgPSAtMTsgfQ0KDQogICAgICAgIHZvaWQNCiAgICAgICAgX01fc2V0X3NoYXJhYmxl KCkNCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gMDsgfQ0KDQogICAgICAgIF9DaGFyVCoNCiAg ICAgICAgX01fcmVmZGF0YSgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gcmVpbnRlcnByZXRf Y2FzdDxfQ2hhclQqPih0aGlzICsgMSk7IH0NCg0KICAgICAgICBfQ2hhclQmDQogICAgICAgIG9w ZXJhdG9yW10oc2l6ZV90IF9fcykgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBfTV9yZWZkYXRh KCkgW19fc107IH0NCg0KICAgICAgICBfQ2hhclQqDQogICAgICAgIF9NX2dyYWIoY29uc3QgX0Fs bG9jJiBfX2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikNCiAgICAgICAgew0KICAgICAg ICAgIHJldHVybiAoIV9NX2lzX2xlYWtlZCgpICYmIF9fYWxsb2MxID09IF9fYWxsb2MyKQ0KICAg ICAgICAgICAgICAgICAgPyBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9jMSk7DQogICAg ICAgIH0NCg0KDQogICAgICAgIHN0YXRpYyBfUmVwKg0KICAgICAgICBfU19jcmVhdGUoc2l6ZV90 LCBjb25zdCBfQWxsb2MmKTsNCg0KICAgICAgICB2b2lkDQogICAgICAgIF9NX2Rpc3Bvc2UoY29u c3QgX0FsbG9jJiBfX2EpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAoX19leGNoYW5nZV9hbmRf YWRkKCZfTV9yZWZlcmVuY2VzLCAtMSkgPD0gMCkNCiAgICAgICAgICAgIF9NX2Rlc3Ryb3koX19h KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHZvaWQNCiAgICAgICAgX01fZGVzdHJveShjb25zdCBf QWxsb2MmKSB0aHJvdygpOw0KDQogICAgICAgIF9DaGFyVCoNCiAgICAgICAgX01fcmVmY29weSgp IHRocm93KCkNCiAgICAgICAgew0KICAgICAgICAgIF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNl cywgMSk7DQogICAgICAgICAgcmV0dXJuIF9NX3JlZmRhdGEoKTsNCiAgICAgICAgfQ0KDQogICAg ICAgIF9DaGFyVCoNCiAgICAgICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiwgc2l6ZV90eXBlIF9f cmVzID0gMCk7DQogICAgICB9Ow0KDQoNCiAgICAgIHN0cnVjdCBfQWxsb2NfaGlkZXIgOiBfQWxs b2MNCiAgICAgIHsNCiAgICAgICAgX0FsbG9jX2hpZGVyKF9DaGFyVCogX19kYXQsIGNvbnN0IF9B bGxvYyYgX19hKQ0KICAgICAgICA6IF9BbGxvYyhfX2EpLCBfTV9wKF9fZGF0KSB7IH0NCg0KICAg ICAgICBfQ2hhclQqIF9NX3A7DQogICAgICB9Ow0KDQogICAgcHVibGljOg0KDQoNCg0KICAgICAg c3RhdGljIGNvbnN0IHNpemVfdHlwZSBucG9zID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSk7 DQoNCiAgICBwcml2YXRlOg0KDQogICAgICBtdXRhYmxlIF9BbGxvY19oaWRlciBfTV9kYXRhcGx1 czsNCg0KDQoNCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1NfZW1wdHlfcmVwX3N0b3JhZ2VbKHNp emVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXpl b2Yoc2l6ZV90eXBlKV07DQoNCiAgICAgIF9DaGFyVCoNCiAgICAgIF9NX2RhdGEoKSBjb25zdA0K ICAgICAgeyByZXR1cm4gX01fZGF0YXBsdXMuX01fcDsgfQ0KDQogICAgICBfQ2hhclQqDQogICAg ICBfTV9kYXRhKF9DaGFyVCogX19wKQ0KICAgICAgeyByZXR1cm4gKF9NX2RhdGFwbHVzLl9NX3Ag PSBfX3ApOyB9DQoNCiAgICAgIF9SZXAqDQogICAgICBfTV9yZXAoKSBjb25zdA0KICAgICAgeyBy ZXR1cm4gJigocmVpbnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0NCg0K DQoNCiAgICAgIGl0ZXJhdG9yDQogICAgICBfTV9pYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVy YXRvcihfTV9kYXRhKCkpOyB9DQoNCiAgICAgIGl0ZXJhdG9yDQogICAgICBfTV9pZW5kKCkgY29u c3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQ0KDQogICAg ICB2b2lkDQogICAgICBfTV9sZWFrKCkNCiAgICAgIHsNCiAgICAgICAgaWYgKCFfTV9yZXAoKS0+ X01faXNfbGVha2VkKCkpDQogICAgICAgICAgX01fbGVha19oYXJkKCk7DQogICAgICB9DQoNCiAg ICAgIGl0ZXJhdG9yDQogICAgICBfTV9jaGVjayhzaXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAg ICB7DQogICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkNCiAgICAgICAgICBfX3Rocm93 X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpfTV9jaGVjayIpOw0KICAgICAgICByZXR1cm4g X01faWJlZ2luKCkgKyBfX3BvczsNCiAgICAgIH0NCg0KDQogICAgICBpdGVyYXRvcg0KICAgICAg X01fZm9sZChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX29mZikgY29uc3QNCiAgICAgIHsN CiAgICAgICAgYm9vbCBfX3Rlc3RvZmYgPSBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOw0K ICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYgPSBfX3Rlc3RvZmYgPyBfX29mZiA6IHRoaXMtPnNp emUoKSAtIF9fcG9zOw0KICAgICAgICByZXR1cm4gKF9NX2liZWdpbigpICsgX19wb3MgKyBfX25l d29mZik7DQogICAgICB9DQoNCg0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0b3I+DQog ICAgICAgIHN0YXRpYyB2b2lkDQogICAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9J dGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikNCiAgICAgICAgew0KICAgICAgICAgIGZvciAo OyBfX2sxICE9IF9fazI7ICsrX19rMSwgKytfX3ApDQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6 YXNzaWduKCpfX3AsICpfX2sxKTsNCiAgICAgICAgfQ0KDQogICAgICBzdGF0aWMgdm9pZA0KICAg ICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19r MikNCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7 IH0NCg0KICAgICAgc3RhdGljIHZvaWQNCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3As IGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpDQogICAgICB7IF9TX2Nv cHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9DQoNCiAgICAgIHN0YXRp YyB2b2lkDQogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hhclQqIF9fazEsIF9D aGFyVCogX19rMikNCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0g X19rMSk7IH0NCg0KICAgICAgc3RhdGljIHZvaWQNCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJU KiBfX3AsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQ0KICAgICAgeyB0 cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQ0KDQogICAgICB2b2lk DQogICAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXpl X3R5cGUgX19sZW4yKTsNCg0KICAgICAgdm9pZA0KICAgICAgX01fbGVha19oYXJkKCk7DQoNCiAg ICAgIHN0YXRpYyBfUmVwJg0KICAgICAgX1NfZW1wdHlfcmVwKCkNCiAgICAgIHsgcmV0dXJuICpy ZWludGVycHJldF9jYXN0PF9SZXAqPigmX1NfZW1wdHlfcmVwX3N0b3JhZ2UpOyB9DQoNCiAgICBw dWJsaWM6DQoNCg0KDQoNCiAgICAgIGlubGluZQ0KICAgICAgYmFzaWNfc3RyaW5nKCk7DQoNCiAg ICAgIGV4cGxpY2l0DQogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpOw0KDQoN CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsNCiAgICAgIGJh c2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsDQog ICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IG5wb3MpOw0KICAgICAgYmFzaWNfc3Ry aW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywNCiAgICAgICAg ICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSk7DQoNCiAgICAgIGJh c2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwNCiAgICAgICAgICAg ICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsNCiAgICAgIGJhc2ljX3N0cmlu Zyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7DQogICAg ICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBf X2EgPSBfQWxsb2MoKSk7DQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0K ICAgICAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9y IF9fZW5kLA0KICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2Mo KSk7DQoNCiAgICAgIH5iYXNpY19zdHJpbmcoKQ0KICAgICAgeyBfTV9yZXAoKS0+X01fZGlzcG9z ZSh0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAg IG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJldHVybiB0aGlzLT5hc3Np Z24oX19zdHIpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIG9wZXJhdG9yPShjb25z dCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcyk7IH0NCg0KICAgICAgYmFz aWNfc3RyaW5nJg0KICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFz c2lnbigxLCBfX2MpOyB9DQoNCg0KICAgICAgaXRlcmF0b3INCiAgICAgIGJlZ2luKCkNCiAgICAg IHsNCiAgICAgICAgX01fbGVhaygpOw0KICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgp KTsNCiAgICAgIH0NCg0KICAgICAgY29uc3RfaXRlcmF0b3INCiAgICAgIGJlZ2luKCkgY29uc3QN CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSk7IH0NCg0KICAgICAgaXRl cmF0b3INCiAgICAgIGVuZCgpDQogICAgICB7DQogICAgICAgICBfTV9sZWFrKCk7DQogICAgICAg ICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsNCiAgICAgIH0NCg0K ICAgICAgY29uc3RfaXRlcmF0b3INCiAgICAgIGVuZCgpIGNvbnN0DQogICAgICB7IHJldHVybiBj b25zdF9pdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9DQoNCiAgICAgIHJldmVy c2VfaXRlcmF0b3INCiAgICAgIHJiZWdpbigpDQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJh dG9yKHRoaXMtPmVuZCgpKTsgfQ0KDQogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yDQogICAg ICByYmVnaW4oKSBjb25zdA0KICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0 aGlzLT5lbmQoKSk7IH0NCg0KICAgICAgcmV2ZXJzZV9pdGVyYXRvcg0KICAgICAgcmVuZCgpDQog ICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9DQoNCiAgICAg IGNvbnN0X3JldmVyc2VfaXRlcmF0b3INCiAgICAgIHJlbmQoKSBjb25zdA0KICAgICAgeyByZXR1 cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQ0KDQogICAgcHVibGlj Og0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9yZXAo KS0+X01fbGVuZ3RoOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgbGVuZ3RoKCkgY29uc3Qg eyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAg IG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX1JlcDo6X1NfbWF4X3NpemU7IH0NCg0KICAgICAg dm9pZA0KICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOw0KDQogICAgICB2 b2lkDQogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbikgeyB0aGlzLT5yZXNpemUoX19uLCBfQ2hh clQoKSk7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0 dXJuIF9NX3JlcCgpLT5fTV9jYXBhY2l0eTsgfQ0KDQogICAgICB2b2lkDQogICAgICByZXNlcnZl KHNpemVfdHlwZSBfX3Jlc19hcmcgPSAwKTsNCg0KICAgICAgdm9pZA0KICAgICAgY2xlYXIoKSB7 IF9NX211dGF0ZSgwLCB0aGlzLT5zaXplKCksIDApOyB9DQoNCiAgICAgIGJvb2wNCiAgICAgIGVt cHR5KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+c2l6ZSgpID09IDA7IH0NCg0KDQogICAgICBjb25z dF9yZWZlcmVuY2UNCiAgICAgIG9wZXJhdG9yW10gKHNpemVfdHlwZSBfX3BvcykgY29uc3QNCiAg ICAgIHsgcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107IH0NCg0KICAgICAgcmVmZXJlbmNlDQogICAg ICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX3BvcykNCiAgICAgIHsNCiAgICAgICAgX01fbGVhaygp Ow0KICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsNCiAgICAgIH0NCg0KICAgICAgY29u c3RfcmVmZXJlbmNlDQogICAgICBhdChzaXplX3R5cGUgX19uKSBjb25zdA0KICAgICAgew0KICAg ICAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkNCiAgICAgICAgICBfX3Rocm93X291dF9vZl9y YW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOw0KICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07 DQogICAgICB9DQoNCiAgICAgIHJlZmVyZW5jZQ0KICAgICAgYXQoc2l6ZV90eXBlIF9fbikNCiAg ICAgIHsNCiAgICAgICAgaWYgKF9fbiA+PSBzaXplKCkpDQogICAgICAgICAgX190aHJvd19vdXRf b2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsNCiAgICAgICAgX01fbGVhaygpOw0KICAgICAg ICByZXR1cm4gX01fZGF0YSgpW19fbl07DQogICAgICB9DQoNCg0KICAgICAgYmFzaWNfc3RyaW5n Jg0KICAgICAgb3BlcmF0b3IrPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJldHVybiB0 aGlzLT5hcHBlbmQoX19zdHIpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIG9wZXJh dG9yKz0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MpOyB9DQoN CiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIG9wZXJhdG9yKz0oX0NoYXJUIF9fYykgeyByZXR1 cm4gdGhpcy0+YXBwZW5kKHNpemVfdHlwZSgxKSwgX19jKTsgfQ0KDQogICAgICBiYXNpY19zdHJp bmcmDQogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7DQoNCiAgICAgIGJh c2ljX3N0cmluZyYNCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXpl X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pOw0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAg ICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pOw0KDQogICAgICBiYXNp Y19zdHJpbmcmDQogICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MpDQogICAgICB7IHJldHVy biB0aGlzLT5hcHBlbmQoX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoNCiAgICAg IGJhc2ljX3N0cmluZyYNCiAgICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsN Cg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogICAgICAgIGJhc2ljX3N0 cmluZyYNCiAgICAgICAgYXBwZW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh dG9yIF9fbGFzdCkNCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9N X2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQ0KDQogICAgICB2b2lkDQogICAgICBwdXNoX2Jh Y2soX0NoYXJUIF9fYykNCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQo KSwgMSwgX19jKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBhc3NpZ24oY29uc3Qg YmFzaWNfc3RyaW5nJiBfX3N0cik7DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGFzc2ln bihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf X24pDQogICAgICB7DQogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5z aXplKCk7DQogICAgICAgIGlmIChfX3BvcyA+IF9fc3Ryc2l6ZSkNCiAgICAgICAgICBfX3Rocm93 X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphc3NpZ24iKTsNCiAgICAgICAgY29uc3QgYm9v bCBfX3Rlc3RuID0gX19uIDwgX19zdHJzaXplIC0gX19wb3M7DQogICAgICAgIGNvbnN0IHNpemVf dHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3M7DQogICAg ICAgIHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIuX01fZGF0YSgpICsgX19wb3MsIF9fbmV3c2l6 ZSk7DQogICAgICB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGFzc2lnbihjb25zdCBf Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikNCiAgICAgIHsNCiAgICAgICAgaWYgKF9fbiA+IHRo aXMtPm1heF9zaXplKCkpDQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0 cmluZzo6YXNzaWduIik7DQogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwg bGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQ0KICAgICAgICAgICAgfHwgbGVz czxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSwgX19zKSkNCiAgICAg ICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcywg X19zICsgX19uKTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIHsNCg0KICAgICAgICAgICAgY29u c3Qgc2l6ZV90eXBlIF9fcG9zID0gX19zIC0gX01fZGF0YSgpOw0KICAgICAgICAgICAgaWYgKF9f cG9zID49IF9fbikNCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fZGF0YSgpLCBf X3MsIF9fbik7DQogICAgICAgICAgICBlbHNlIGlmIChfX3BvcykNCiAgICAgICAgICAgICAgdHJh aXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpLCBfX3MsIF9fbik7DQogICAgICAgICAgICBfTV9yZXAo KS0+X01fbGVuZ3RoID0gX19uOw0KICAgICAgICAgICAgX01fZGF0YSgpW19fbl0gPSBfUmVwOjpf U190ZXJtaW5hbDsNCiAgICAgICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgICAgICB9DQogICAg ICB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9f cykNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgo X19zKSk7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXNzaWduKHNpemVfdHlwZSBf X24sIF9DaGFyVCBfX2MpDQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2liZWdpbigp LCBfTV9pZW5kKCksIF9fbiwgX19jKTsgfQ0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJ dGVyYXRvcj4NCiAgICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgICBhc3NpZ24oX0lucHV0SXRl cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQ0KICAgICAgICB7IHJldHVybiB0 aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0N Cg0KICAgICAgdm9pZA0KICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwg X0NoYXJUIF9fYykNCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19uLCBfX2MpOyB9 DQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgICAgICB2b2lkIGlu c2VydChpdGVyYXRvciBfX3AsIF9JbnB1dEl0ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBf X2VuZCkNCiAgICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX2JlZywgX19lbmQpOyB9 DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBj b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9f cG9zMSwgX19zdHIsIDAsIF9fc3RyLnNpemUoKSk7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0K ICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs DQogICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbikNCiAgICAgIHsN CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAgICAg ICAgaWYgKF9fcG9zMiA+IF9fc3Ryc2l6ZSkNCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5n ZSgiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsNCiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuID0g X19uIDwgX19zdHJzaXplIC0gX19wb3MyOw0KICAgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdz aXplID0gX190ZXN0biA/IF9fbiA6IF9fc3Ryc2l6ZSAtIF9fcG9zMjsNCiAgICAgICAgcmV0dXJu IHRoaXMtPmluc2VydChfX3BvczEsIF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19uZXdzaXpl KTsNCiAgICAgIH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgaW5zZXJ0KHNpemVfdHlw ZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pDQogICAgICB7DQogICAg ICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICAgIGlmIChf X3BvcyA+IF9fc2l6ZSkNCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3Ry aW5nOjppbnNlcnQiKTsNCiAgICAgICAgaWYgKF9fc2l6ZSA+IHRoaXMtPm1heF9zaXplKCkgLSBf X24pDQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6aW5zZXJ0 Iik7DQogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBf Q2hhclQqPigpKF9fcywgX01fZGF0YSgpKQ0KICAgICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hh clQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkNCiAgICAgICAgICByZXR1cm4gX01fcmVw bGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsgX19wb3MsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbik7DQogICAgICAgIGVs c2UNCiAgICAgICAgICB7DQoNCg0KDQogICAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19vZmYg PSBfX3MgLSBfTV9kYXRhKCk7DQogICAgICAgICAgICBfTV9tdXRhdGUoX19wb3MsIDAsIF9fbik7 DQogICAgICAgICAgICBfX3MgPSBfTV9kYXRhKCkgKyBfX29mZjsNCiAgICAgICAgICAgIF9DaGFy VCogX19wID0gX01fZGF0YSgpICsgX19wb3M7DQogICAgICAgICAgICBpZiAoX19zICsgX19uIDw9 IF9fcCkNCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3MsIF9fbik7DQog ICAgICAgICAgICBlbHNlIGlmIChfX3MgPj0gX19wKQ0KICAgICAgICAgICAgICB0cmFpdHNfdHlw ZTo6Y29weShfX3AsIF9fcyArIF9fbiwgX19uKTsNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAg ICAgICAgew0KICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zLCBfX3Ag LSBfX3MpOw0KICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCArIChfX3AgLSBf X3MpLCBfX3AgKyBfX24sIF9fbiAtIChfX3AgLSBfX3MpKTsNCiAgICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgICAgIH0NCiAgICAgICB9DQoNCiAgICAgIGJh c2ljX3N0cmluZyYNCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCog X19zKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBl OjpsZW5ndGgoX19zKSk7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgaW5zZXJ0KHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykNCiAgICAgIHsNCiAgICAg ICAgdGhpcy0+aW5zZXJ0KF9NX2NoZWNrKF9fcG9zKSwgX19uLCBfX2MpOw0KICAgICAgICByZXR1 cm4gKnRoaXM7DQogICAgICB9DQoNCiAgICAgIGl0ZXJhdG9yDQogICAgICBpbnNlcnQoaXRlcmF0 b3IgX19wLCBfQ2hhclQgX19jID0gX0NoYXJUKCkpDQogICAgICB7DQogICAgICAgIHNpemVfdHlw ZSBfX3BvcyA9IF9fcCAtIF9NX2liZWdpbigpOw0KICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hl Y2soX19wb3MpLCBzaXplX3R5cGUoMSksIF9fYyk7DQogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRf bGVha2VkKCk7DQogICAgICAgIHJldHVybiB0aGlzLT5fTV9pYmVnaW4oKSArIF9fcG9zOw0KICAg ICAgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBlcmFzZShzaXplX3R5cGUgX19wb3Mg PSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykNCiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHRoaXMt PnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfTV9kYXRhKCksIF9NX2RhdGEoKSk7DQogICAgICB9DQoNCiAg ICAgIGl0ZXJhdG9yDQogICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQ0KICAgICAgew0K ICAgICAgICBzaXplX3R5cGUgX19pID0gX19wb3NpdGlvbiAtIF9NX2liZWdpbigpOw0KICAgICAg ICB0aGlzLT5yZXBsYWNlKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyAxLCBfTV9kYXRhKCksIF9N X2RhdGEoKSk7DQogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7DQogICAgICAgIHJl dHVybiBfTV9pYmVnaW4oKSArIF9faTsNCiAgICAgIH0NCg0KICAgICAgaXRlcmF0b3INCiAgICAg IGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkNCiAgICAgIHsNCiAgICAg ICAgc2l6ZV90eXBlIF9faSA9IF9fZmlyc3QgLSBfTV9pYmVnaW4oKTsNCiAgICAgICAgdGhpcy0+ cmVwbGFjZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsNCiAgICAgICAg X01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsNCiAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBf X2k7DQogICAgICB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIHJlcGxhY2Uoc2l6ZV90 eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQ0KICAg ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uLCBfX3N0ci5fTV9kYXRhKCksIF9f c3RyLnNpemUoKSk7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgcmVwbGFjZShzaXpl X3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwN CiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpOw0KDQogICAg ICBiYXNpY19zdHJpbmcmDQogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl IF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLA0KICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikN CiAgICAgIHsNCiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsN CiAgICAgICAgaWYgKF9fcG9zID4gX19zaXplKQ0KICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jh bmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsNCiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3Ru MSA9IF9fbjEgPCBfX3NpemUgLSBfX3BvczsNCiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9s ZG4xID0gX190ZXN0bjEgPyBfX24xIDogX19zaXplIC0gX19wb3M7DQogICAgICAgIGlmIChfX3Np emUgLSBfX2ZvbGRuMSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24yKQ0KICAgICAgICAgIF9fdGhy b3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsNCiAgICAgICAgaWYgKF9N X3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9k YXRhKCkpDQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsg X19zaXplLCBfX3MpKQ0KICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2lu KCkgKyBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2liZWdpbigp ICsgX19wb3MgKyBfX2ZvbGRuMSwgX19zLCBfX3MgKyBfX24yKTsNCg0KICAgICAgICBlbHNlIHJl dHVybg0KICAgICAgICAgICAgICAgX01fcmVwbGFjZShfTV9pYmVnaW4oKSArIF9fcG9zLCBfTV9p YmVnaW4oKSArIF9fcG9zICsgX19mb2xkbjEsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9f cywgX19zICsgX19uMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPGNvbnN0IF9DaGFyVCo+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsNCiAgICAgIH0N Cg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNp emVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJl cGxhY2UoX19wb3MsIF9fbjEsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQ0KDQog ICAgICBiYXNpY19zdHJpbmcmDQogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90 eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQ0KICAgICAgeyByZXR1cm4gdGhp cy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLCBfX24yLCBf X2MpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19p MSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikNCiAgICAgIHsgcmV0 dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zdHIuX01fZGF0YSgpLCBfX3N0ci5zaXpl KCkpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19p MSwgaXRlcmF0b3IgX19pMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFy VCogX19zLCBzaXplX3R5cGUgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kx IC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLCBfX3MsIF9fbik7IH0NCg0KICAgICAgYmFzaWNf c3RyaW5nJg0KICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25z dCBfQ2hhclQqIF9fcykNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwg X19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYN CiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9f biwgX0NoYXJUIF9fYyk7DQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0K ICAgICAgICBiYXNpY19zdHJpbmcmDQogICAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRl cmF0b3IgX19pMiwNCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJ dGVyYXRvciBfX2syKQ0KICAgICAgICB7IHJldHVybiBfTV9yZXBsYWNlKF9faTEsIF9faTIsIF9f azEsIF9fazIsDQogICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0 ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7IH0NCg0KDQoNCiAgICAgIGJhc2ljX3N0cmlu ZyYNCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0NoYXJUKiBf X2sxLCBfQ2hhclQqIF9fazIpDQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAt IF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2sxLCBfX2syIC0gX19rMSk7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgcmVw bGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fazEsIGNv bnN0IF9DaGFyVCogX19rMikNCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0g X01faWJlZ2luKCksIF9faTIgLSBfX2kxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fazEsIF9fazIgLSBfX2sxKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICByZXBs YWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9y IF9fazIpDQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigp LCBfX2kyIC0gX19pMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLmJhc2Uo KSwgX19rMiAtIF9fazEpOw0KICAgICAgICB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAg IHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3RfaXRlcmF0b3IgX19r MSwgY29uc3RfaXRlcmF0b3IgX19rMikNCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShf X2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fazEuYmFzZSgpLCBfX2syIC0gX19rMSk7DQogICAgICAgIH0NCg0KICAgIHByaXZh dGU6DQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgICAgICAgYmFzaWNf c3RyaW5nJg0KICAgICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs IF9JbnB1dEl0ZXJhdG9yIF9fazEsDQogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3Ig X19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKTsNCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Zvcndh cmRJdGVyYXRvcj4NCiAgICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgICBfTV9yZXBsYWNlX3Nh ZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyYXRvciBfX2sxLA0K ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19rMik7DQoNCg0KDQogICAgICB0 ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPg0KICAgICAgICBzdGF0aWMgX0NoYXJUKg0KICAgICAgICBf U19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxv YyYgX19hLA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkNCiAgICAgICAg ew0KICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Jbkl0ZXI+Ojpp dGVyYXRvcl9jYXRlZ29yeSBfVGFnOw0KICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3QoX19i ZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7DQogICAgICAgIH0NCg0KICAgICAgdGVtcGxhdGU8Y2xh c3MgX0luSXRlcj4NCiAgICAgICAgc3RhdGljIF9DaGFyVCoNCiAgICAgICAgX1NfY29uc3RydWN0 X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkNCiAgICAgICAgew0KICAgICAgICAg IHJldHVybiBfU19jb25zdHJ1Y3Qoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2JlZyksDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90eXBlPihfX2VuZCks IF9fYSk7DQogICAgICAgIH0NCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4NCiAgICAg ICAgc3RhdGljIF9DaGFyVCoNCiAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9J bkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQ0KICAgICAgICB7DQogICAgICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsN CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0X2F1eChfX2JlZywgX19lbmQsIF9fYSwgX0lu dGVncmFsKCkpOw0KICAgICAgICB9DQoNCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4N CiAgICAgICAgc3RhdGljIF9DaGFyVCoNCiAgICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9f YmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwNCiAgICAgICAgICAgICAgICAg ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOw0KDQoNCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3 ZEl0ZXI+DQogICAgICAgIHN0YXRpYyBfQ2hhclQqDQogICAgICAgIF9TX2NvbnN0cnVjdChfRndk SXRlciBfX2JlZywgX0Z3ZEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLA0KICAgICAgICAg ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOw0KDQogICAgICBzdGF0aWMgX0NoYXJU Kg0KICAgICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3Qg X0FsbG9jJiBfX2EpOw0KDQogICAgcHVibGljOg0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGNv cHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0 Ow0KDQogICAgICB2b2lkDQogICAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fcyk7DQoNCg0KICAgICAgY29uc3QgX0NoYXJUKg0KICAgICAgY19zdHIoKSBj b25zdA0KICAgICAgew0KDQogICAgICAgIHNpemVfdHlwZSBfX24gPSB0aGlzLT5zaXplKCk7DQog ICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpW19fbl0sIF9SZXA6Ol9TX3Rlcm1p bmFsKTsNCiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKTsNCiAgICAgIH0NCg0KICAgICAgY29uc3Qg X0NoYXJUKg0KICAgICAgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGEoKTsgfQ0KDQogICAg ICBhbGxvY2F0b3JfdHlwZQ0KICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9N X2RhdGFwbHVzOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZChjb25zdCBfQ2hhclQq IF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsNCg0KICAgICAgc2l6 ZV90eXBlDQogICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf X3BvcyA9IDApIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fc3RyLmRhdGEoKSwg X19wb3MsIF9fc3RyLnNpemUoKSk7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5kKGNv bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdA0KICAgICAgeyByZXR1 cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoN CiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3Mg PSAwKSBjb25zdDsNCg0KICAgICAgc2l6ZV90eXBlDQogICAgICByZmluZChjb25zdCBiYXNpY19z dHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdA0KICAgICAgeyByZXR1 cm4gdGhpcy0+cmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQog ICAgICBzaXplX3R5cGUNCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg X19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIHJm aW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdA0KICAg ICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChf X3MpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVf dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRf Zmlyc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkg Y29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBf X3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmly c3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikg Y29uc3Q7DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hh clQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMt PmZpbmRfZmlyc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQ0K DQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90 eXBlIF9fcG9zID0gMCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19jLCBfX3Bv cyk7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgYmFzaWNf c3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QNCiAgICAgIHsgcmV0 dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkp OyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCog X19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0Ow0KDQogICAgICBzaXpl X3R5cGUNCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f cG9zID0gbnBvcykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3Ms IF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0K ICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNv bnN0DQogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX2MsIF9fcG9zKTsgfQ0KDQogICAgICBz aXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19z dHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5maW5k X2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9DQoNCiAg ICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3Ms IHNpemVfdHlwZSBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24p IGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0 IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdA0KICAgICAgeyByZXR1cm4g dGhpcy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChf X3MpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKF9DaGFy VCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUNCiAg ICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBl IF9fcG9zID0gbnBvcykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rf b2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQogICAgICBzaXplX3R5 cGUNCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf X3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7DQogICAg ICBzaXplX3R5cGUNCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNp emVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xh c3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0NCg0KICAg ICAgc2l6ZV90eXBlDQogICAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlw ZSBfX3BvcyA9IG5wb3MpIGNvbnN0Ow0KDQogICAgICBiYXNpY19zdHJpbmcNCiAgICAgIHN1YnN0 cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykgY29uc3QNCiAgICAg IHsNCiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQ0KICAgICAgICAgIF9fdGhyb3df b3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnN1YnN0ciIpOw0KICAgICAgICByZXR1cm4gYmFz aWNfc3RyaW5nKCp0aGlzLCBfX3BvcywgX19uKTsNCiAgICAgIH0NCg0KICAgICAgaW50DQogICAg ICBjb21wYXJlKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0DQogICAgICB7DQogICAg ICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICAgIHNpemVfdHlwZSBf X29zaXplID0gX19zdHIuc2l6ZSgpOw0KICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19z aXplLCBfX29zaXplKTsNCg0KICAgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUo X01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsNCiAgICAgICAgaWYgKCFfX3IpDQogICAg ICAgICAgX19yID0gX19zaXplIC0gX19vc2l6ZTsNCiAgICAgICAgcmV0dXJuIF9fcjsNCiAgICAg IH0NCg0KICAgICAgaW50DQogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl IF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7DQoNCiAgICAgIGludA0KICAg ICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNf c3RyaW5nJiBfX3N0ciwNCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBl IF9fbjIpIGNvbnN0Ow0KDQogICAgICBpbnQNCiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBf X3MpIGNvbnN0Ow0KDQoNCg0KICAgICAgaW50DQogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bv cywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsNCg0KICAgICAgaW50 DQogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9D aGFyVCogX19zLA0KICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3Q7DQogIH07DQoN Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4NCiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6DQogICAgYmFzaWNfc3RyaW5nKCkNCiAgICA6IF9NX2RhdGFwbHVzKF9TX2VtcHR5X3JlcCgp Ll9NX3JlZmNvcHkoKSwgX0FsbG9jKCkpIHsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPg0KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAgew0KICAg ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xocyk7DQog ICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOw0KICAgICAgcmV0dXJuIF9fc3RyOw0KICAgIH0NCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPg0KICAgIG9wZXJh dG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJp bmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+DQogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywg Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsNCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4NCiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPg0KICAg IG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf X2xocywNCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQ0KICAgIHsNCiAgICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOw0KICAgICAg X19zdHIuYXBwZW5kKF9fcmhzKTsNCiAgICAgIHJldHVybiBfX3N0cjsNCiAgICB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ DQogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4NCiAgICBv cGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19s aHMsIF9DaGFyVCBfX3JocykNCiAgICB7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOw0KICAgICAgX19zdHJpbmdf dHlwZSBfX3N0cihfX2xocyk7DQogICAgICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUoMSksIF9f cmhzKTsNCiAgICAgIHJldHVybiBfX3N0cjsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUg Ym9vbA0KICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykNCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9f cmhzKSA9PSAwOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj09KGNv bnN0IF9DaGFyVCogX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykNCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJl KF9fbGhzKSA9PSAwOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj09 KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAg ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykNCiAgICB7IHJldHVybiBfX2xocy5jb21w YXJlKF9fcmhzKSA9PSAwOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJh dG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMs DQogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX3JocykNCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvciE9KGNvbnN0IF9DaGFyVCogX19s aHMsDQogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX3JocykNCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29u c3QgX0NoYXJUKiBfX3JocykNCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSAhPSAw OyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yPChjb25zdCBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAg Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAg eyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5l IGJvb2wNCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpDQogICAg eyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5l IGJvb2wNCiAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBfX2xocywNCiAgICAgICAgICAgICAg Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAg eyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPiAwOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxp bmUgYm9vbA0KICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShf X3JocykgPiAwOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj4oY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsDQogICAgICAg ICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpDQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShf X3JocykgPiAwOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj4oY29u c3QgX0NoYXJUKiBfX2xocywNCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShf X2xocykgPCAwOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yPD0o Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsDQogICAg ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf X3JocykNCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3QgX0NoYXJU KiBfX3JocykNCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcjw9KGNvbnN0IF9DaGFyVCogX19saHMs DQogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX3JocykNCiAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPj0gMDsgfQ0KDQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAgeyByZXR1 cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29s DQogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpDQogICAgeyBy ZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBi b29sDQogICAgb3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAgICAgIGNv bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQ0KICAgIHsg cmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDw9IDA7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGlu ZSB2b2lkDQogICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf X2xocywNCiAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f cmhzKQ0KICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mIF9faXMsDQogICAgICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JiBfX29zLA0KICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19zdHIpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LF9UcmFpdHM+Jg0KICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf X2lzLA0KICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19zdHIsIF9DaGFyVCBfX2RlbGltKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYmFzaWNfaXN0cmVh bTxfQ2hhclQsX1RyYWl0cz4mDQogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mIF9faXMsDQogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX3N0cik7DQp9DQojIDU0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIg Mw0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYWxnb3JpdGhtIiAxIDMNCiMgNjUgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2FsZ29yaXRobSIgMw0KDQoNCg0KDQojIDEgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMSAzDQojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF9hbGdvLmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf aGVhcC5oIiAxIDMNCiMgNjMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2hlYXAuaCIg Mw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPg0KICAgIHZvaWQN CiAgICBfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwNCiAgICAgICAg ICAgICAgICBfRGlzdGFuY2UgX19ob2xlSW5kZXgsIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAg X192YWx1ZSkNCiAgICB7DQogICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXgg LSAxKSAvIDI7DQogICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmICooX19m aXJzdCArIF9fcGFyZW50KSA8IF9fdmFsdWUpIHsNCiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xl SW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOw0KICAgICAgICBfX2hvbGVJbmRleCA9IF9f cGFyZW50Ow0KICAgICAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsNCiAgICAg IH0NCiAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7DQogICAgfQ0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4NCiAgICBpbmxpbmUgdm9p ZA0KICAgIHB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fbGFzdCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlDQogICAgICAgICAg X1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0KICAgICAgICAgIF9EaXN0YW5jZVR5 cGU7DQoNCg0KICAgICANCg0KICAgICANCg0KICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rp c3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlVHlwZSgwKSwNCiAg ICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOw0KICAgIH0NCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5j ZSwgdHlwZW5hbWUgX1RwLA0KICAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAgdm9p ZA0KICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFu Y2UgX19ob2xlSW5kZXgsDQogICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9U cCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgX0Rpc3RhbmNlIF9fcGFy ZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOw0KICAgICAgd2hpbGUgKF9faG9sZUluZGV4ID4g X190b3BJbmRleCAmJiBfX2NvbXAoKihfX2ZpcnN0ICsgX19wYXJlbnQpLCBfX3ZhbHVlKSkgew0K ICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7 DQogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7DQogICAgICAgIF9fcGFyZW50ID0gKF9f aG9sZUluZGV4IC0gMSkgLyAyOw0KICAgICAgfQ0KICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5k ZXgpID0gX192YWx1ZTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBpbmxpbmUgdm9pZA0KICAgIHB1c2hf aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fbGFzdCwNCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZh bHVlX3R5cGUNCiAgICAgICAgICBfVmFsdWVUeXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlDQog ICAgICAgICAgX0Rpc3RhbmNlVHlwZTsNCg0KDQogICAgIA0KDQoNCiAgICAgIF9fcHVzaF9oZWFw KF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5j ZVR5cGUoMCksDQogICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpLCBf X2NvbXApOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0 b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPg0KICAgIHZvaWQNCiAgICBfX2Fk anVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xl SW5kZXgsDQogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQ0K ICAgIHsNCiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7DQogICAgICBf RGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7DQogICAgICB3aGls ZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7DQogICAgICAgIGlmICgqKF9fZmlyc3QgKyBfX3Nl Y29uZENoaWxkKSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKQ0KICAgICAgICAg IF9fc2Vjb25kQ2hpbGQtLTsNCiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihf X2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7DQogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRD aGlsZDsNCiAgICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOw0K ICAgICAgfQ0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsNCiAgICAgICAgKihf X2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7 DQogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7DQogICAgICB9DQogICAg ICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSk7 DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlw ZW5hbWUgX1RwPg0KICAgIGlubGluZSB2b2lkDQogICAgX19wb3BfaGVhcChfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAg ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUpDQogICAg ew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsNCiAgICAgICpfX3Jlc3VsdCA9ICpf X2ZpcnN0Ow0KICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0 YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX192YWx1ZSk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4NCiAgICBpbmxpbmUgdm9pZA0KICAgIHBvcF9o ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19sYXN0KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S YW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsNCg0KDQogICAgIA0K DQogICAgIA0KDQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAt IDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwNCiAgICAgICAg ICAgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICB2b2lkDQogICAgX19hZGp1 c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUlu ZGV4LA0KICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSwgX0Nv bXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xl SW5kZXg7DQogICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCAr IDI7DQogICAgICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7DQogICAgICAgIGlmIChf X2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29uZENo aWxkIC0gMSkpKSkNCiAgICAgICAgICBfX3NlY29uZENoaWxkLS07DQogICAgICAgICooX19maXJz dCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOw0KICAgICAgICBf X2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7DQogICAgICAgIF9fc2Vjb25kQ2hpbGQgPSAyICog KF9fc2Vjb25kQ2hpbGQgKyAxKTsNCiAgICAgIH0NCiAgICAgIGlmIChfX3NlY29uZENoaWxkID09 IF9fbGVuKSB7DQogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCAr IChfX3NlY29uZENoaWxkIC0gMSkpOw0KICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hp bGQgLSAxOw0KICAgICAgfQ0KICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgs IF9fdG9wSW5kZXgsIF9fdmFsdWUsIF9fY29tcCk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFy ZT4NCiAgICBpbmxpbmUgdm9pZA0KICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICBf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2Nv bXApDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv bUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsNCiAgICAgICpfX3Jl c3VsdCA9ICpfX2ZpcnN0Ow0KICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2Uo MCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAgX192 YWx1ZSwgX19jb21wKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBpbmxpbmUgdm9pZA0KICAgIHBvcF9o ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQoNCiAgICAgDQoN Cg0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOw0KICAgICAgX19wb3BfaGVhcChfX2ZpcnN0 LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpLCBfX2Nv bXApOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+ DQogICAgdm9pZA0KICAgIG1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwg X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlDQog ICAgICAgICAgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0KICAgICAgICAgIF9E aXN0YW5jZVR5cGU7DQoNCg0KICAgICANCg0KICAgICANCg0KICAgICAgaWYgKF9fbGFzdCAtIF9f Zmlyc3QgPCAyKSByZXR1cm47DQogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gX19sYXN0IC0g X19maXJzdDsNCiAgICAgIF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOw0K DQogICAgICB3aGlsZSAodHJ1ZSkgew0KICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9f cGFyZW50LCBfX2xlbiwgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsNCiAgICAg ICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsNCiAgICAgICAgX19wYXJlbnQtLTsNCiAgICAg IH0NCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0 eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBpbmxpbmUgdm9pZA0KICAgIG1ha2VfaGVhcChfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAg ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUNCiAg ICAgICAgICBfVmFsdWVUeXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlDQogICAgICAgICAgX0Rp c3RhbmNlVHlwZTsNCg0KDQogICAgIA0KDQoNCiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwg MikgcmV0dXJuOw0KICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7 DQogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsNCg0KICAgICAg d2hpbGUgKHRydWUpIHsNCiAgICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwg X19sZW4sDQogICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3Bh cmVudCkpLCBfX2NvbXApOw0KICAgICAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOw0KICAg ICAgICBfX3BhcmVudC0tOw0KICAgICAgfQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlcmF0b3I+DQogICAgdm9pZA0KICAgIHNvcnRfaGVhcChfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkNCiAgICB7 DQoNCiAgICAgDQoNCiAgICAgDQoNCg0KICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAx KQ0KICAgICAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSk7DQogICAgfQ0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+DQog ICAgdm9pZA0KICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w KQ0KICAgIHsNCg0KICAgICANCg0KDQogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEp DQogICAgICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tLCBfX2NvbXApOw0KICAgIH0NCg0K fQ0KIyA2NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAyIDMNCiMgMSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGVtcGJ1Zi5oIiAxIDMNCiMgNjQgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RlbXBidWYuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0K IyA3NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzDQp0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPg0KICBjbGFzcyBfVGVtcG9yYXJ5 X2J1ZmZlcg0Kew0KDQogDQoNCiAgcHRyZGlmZl90IF9NX29yaWdpbmFsX2xlbjsNCiAgcHRyZGlm Zl90IF9NX2xlbjsNCiAgX1RwKiBfTV9idWZmZXI7DQoNCg0KICB2b2lkIF9NX2FsbG9jYXRlX2J1 ZmZlcigpIHsNCiAgICBfTV9vcmlnaW5hbF9sZW4gPSBfTV9sZW47DQogICAgX01fYnVmZmVyID0g MDsNCg0KICAgIGlmIChfTV9sZW4gPiAocHRyZGlmZl90KSgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9U cCkpKQ0KICAgICAgX01fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOw0KDQogICAgd2hp bGUgKF9NX2xlbiA+IDApIHsNCiAgICAgIF9NX2J1ZmZlciA9IChfVHAqKSBtYWxsb2MoX01fbGVu ICogc2l6ZW9mKF9UcCkpOw0KICAgICAgaWYgKF9NX2J1ZmZlcikNCiAgICAgICAgYnJlYWs7DQog ICAgICBfTV9sZW4gLz0gMjsNCiAgICB9DQogIH0NCg0KICB2b2lkIF9NX2luaXRpYWxpemVfYnVm ZmVyKGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQ0KICB2b2lkIF9NX2luaXRpYWxpemVfYnVm ZmVyKGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNlX3R5cGUpIHsNCiAgICB1bmluaXRpYWxpemVkX2Zp bGxfbihfTV9idWZmZXIsIF9NX2xlbiwgdmFsKTsNCiAgfQ0KDQpwdWJsaWM6DQoNCiAgcHRyZGlm Zl90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9sZW47IH0NCg0KICBwdHJkaWZmX3QgcmVxdWVz dGVkX3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9vcmlnaW5hbF9sZW47IH0NCg0KICBfVHAqIGJl Z2luKCkgeyByZXR1cm4gX01fYnVmZmVyOyB9DQoNCiAgX1RwKiBlbmQoKSB7IHJldHVybiBfTV9i dWZmZXIgKyBfTV9sZW47IH0NCg0KICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9y IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7DQoNCiAgICB0eXBlZGVmIHR5cGVu YW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rvcg0K ICAgICAgICAgICAgX1RyaXZpYWw7DQoNCiAgICB0cnkgew0KICAgICAgX01fbGVuID0gZGlzdGFu Y2UoX19maXJzdCwgX19sYXN0KTsNCiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigpOw0KICAgICAg aWYgKF9NX2xlbiA+IDApDQogICAgICAgIF9NX2luaXRpYWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBf VHJpdmlhbCgpKTsNCiAgICB9DQogICAgY2F0Y2goLi4uKQ0KICAgICAgew0KICAgICAgICBmcmVl KF9NX2J1ZmZlcik7DQogICAgICAgIF9NX2J1ZmZlciA9IDA7DQogICAgICAgIF9NX2xlbiA9IDA7 DQogICAgICAgIHRocm93Ow0KICAgICAgfQ0KICB9DQoNCiAgfl9UZW1wb3JhcnlfYnVmZmVyKCkg ew0KICAgIF9EZXN0cm95KF9NX2J1ZmZlciwgX01fYnVmZmVyICsgX01fbGVuKTsNCiAgICBmcmVl KF9NX2J1ZmZlcik7DQogIH0NCg0KcHJpdmF0ZToNCg0KICBfVGVtcG9yYXJ5X2J1ZmZlcihjb25z dCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9DQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3Jh cnlfYnVmZmVyJikge30NCn07DQoNCn0NCiMgNjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2FsZ28uaCIgMiAzDQoNCg0KDQpuYW1lc3BhY2Ugc3RkDQp7DQojIDg0ICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0K ICBpbmxpbmUgY29uc3QgX1RwJg0KICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBf VHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpDQogICAgew0KDQogICAgIA0KICAgICAgaWYgKF9fYSA8 IF9fYikNCiAgICAgICAgaWYgKF9fYiA8IF9fYykNCiAgICAgICAgICByZXR1cm4gX19iOw0KICAg ICAgICBlbHNlIGlmIChfX2EgPCBfX2MpDQogICAgICAgICAgcmV0dXJuIF9fYzsNCiAgICAgICAg ZWxzZQ0KICAgICAgICAgIHJldHVybiBfX2E7DQogICAgICBlbHNlIGlmIChfX2EgPCBfX2MpDQog ICAgICAgIHJldHVybiBfX2E7DQogICAgICBlbHNlIGlmIChfX2IgPCBfX2MpDQogICAgICAgIHJl dHVybiBfX2M7DQogICAgICBlbHNlDQogICAgICAgIHJldHVybiBfX2I7DQogICAgfQ0KIyAxMTgg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIGlubGluZSBjb25zdCBfVHAmDQogICAg X19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYywg X0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCg0KICAgICANCiAgICAgIGlmIChfX2NvbXAoX19hLCBf X2IpKQ0KICAgICAgICBpZiAoX19jb21wKF9fYiwgX19jKSkNCiAgICAgICAgICByZXR1cm4gX19i Ow0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQ0KICAgICAgICAgIHJldHVybiBf X2M7DQogICAgICAgIGVsc2UNCiAgICAgICAgICByZXR1cm4gX19hOw0KICAgICAgZWxzZSBpZiAo X19jb21wKF9fYSwgX19jKSkNCiAgICAgICAgcmV0dXJuIF9fYTsNCiAgICAgIGVsc2UgaWYgKF9f Y29tcChfX2IsIF9fYykpDQogICAgICAgIHJldHVybiBfX2M7DQogICAgICBlbHNlDQogICAgICAg IHJldHVybiBfX2I7DQogICAgfQ0KIyAxNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRnVu Y3Rpb24+DQogICAgX0Z1bmN0aW9uDQogICAgZm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikNCiAgICB7DQoNCiAgICAgDQogICAgICBm b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgICAgIF9fZigqX19maXJz dCk7DQogICAgICByZXR1cm4gX19mOw0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1RwPg0KICAgIGlubGluZSBfSW5wdXRJdGVyDQog ICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAg Y29uc3QgX1RwJiBfX3ZhbCwNCiAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykNCiAgICB7DQog ICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgISgqX19maXJzdCA9PSBfX3ZhbCkpDQog ICAgICAgICsrX19maXJzdDsNCiAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgIH0NCg0KDQoNCg0K DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4N CiAgICBpbmxpbmUgX0lucHV0SXRlcg0KICAgIGZpbmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLA0KICAgICAg ICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9 IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkNCiAgICAgICAgKytfX2ZpcnN0Ow0KICAgICAg cmV0dXJuIF9fZmlyc3Q7DQogICAgfQ0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPg0KICAgIF9SYW5kb21BY2Nlc3NJdGVyDQog ICAgZmluZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh c3QsDQogICAgICAgICBjb25zdCBfVHAmIF9fdmFsLA0KICAgICAgICAgcmFuZG9tX2FjY2Vzc19p dGVyYXRvcl90YWcpDQogICAgew0KICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudA0KICAgICAgICA9IChf X2xhc3QgLSBfX2ZpcnN0KSA+PiAyOw0KDQogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAg OyAtLV9fdHJpcF9jb3VudCkgew0KICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVy biBfX2ZpcnN0Ow0KICAgICAgICArK19fZmlyc3Q7DQoNCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09 IF9fdmFsKSByZXR1cm4gX19maXJzdDsNCiAgICAgICAgKytfX2ZpcnN0Ow0KDQogICAgICAgIGlm ICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7DQogICAgICAgICsrX19maXJzdDsN Cg0KICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0Ow0KICAgICAg ICArK19fZmlyc3Q7DQogICAgICB9DQoNCiAgICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7 DQogICAgICBjYXNlIDM6DQogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9f Zmlyc3Q7DQogICAgICAgICsrX19maXJzdDsNCiAgICAgIGNhc2UgMjoNCiAgICAgICAgaWYgKCpf X2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsNCiAgICAgICAgKytfX2ZpcnN0Ow0KICAg ICAgY2FzZSAxOg0KICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0 Ow0KICAgICAgICArK19fZmlyc3Q7DQogICAgICBjYXNlIDA6DQogICAgICBkZWZhdWx0Og0KICAg ICAgICByZXR1cm4gX19sYXN0Ow0KICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+DQogICAg X1JhbmRvbUFjY2Vzc0l0ZXINCiAgICBmaW5kX2lmKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk LA0KICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpDQogICAgew0KICAgICAg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90 eXBlIF9fdHJpcF9jb3VudA0KICAgICAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOw0KDQog ICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgew0KICAgICAg ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAgICAgICsrX19maXJz dDsNCg0KICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAg ICAgICsrX19maXJzdDsNCg0KICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9f Zmlyc3Q7DQogICAgICAgICsrX19maXJzdDsNCg0KICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0 KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAgICAgICsrX19maXJzdDsNCiAgICAgIH0NCg0KICAgICAg c3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsNCiAgICAgIGNhc2UgMzoNCiAgICAgICAgaWYgKF9f cHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0Ow0KICAgICAgICArK19fZmlyc3Q7DQogICAg ICBjYXNlIDI6DQogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsN CiAgICAgICAgKytfX2ZpcnN0Ow0KICAgICAgY2FzZSAxOg0KICAgICAgICBpZiAoX19wcmVkKCpf X2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAgICAgICsrX19maXJzdDsNCiAgICAgIGNhc2Ug MDoNCiAgICAgIGRlZmF1bHQ6DQogICAgICAgIHJldHVybiBfX2xhc3Q7DQogICAgICB9DQogICAg fQ0KIyAyODkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+DQogICAgaW5saW5lIF9JbnB1 dEl0ZXINCiAgICBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQog ICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCiAgICAg IHJldHVybiBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9faXRlcmF0b3JfY2F0ZWdvcnko X19maXJzdCkpOw0KICAgIH0NCiMgMzA5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h bGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRp Y2F0ZT4NCiAgICBpbmxpbmUgX0lucHV0SXRlcg0KICAgIGZpbmRfaWYoX0lucHV0SXRlciBfX2Zp cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQ0K ICAgIHsNCg0KICAgICANCiAgICAgDQoNCiAgICAgIHJldHVybiBmaW5kX2lmKF9fZmlyc3QsIF9f bGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAgICB9DQojIDMy OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9Gb3J3YXJkSXRlcj4NCiAgICBfRm9yd2FyZEl0ZXINCiAgICBhZGphY2VudF9maW5k KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQ0KICAgIHsNCg0KICAg ICANCiAgICAgDQoNCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkNCiAgICAgICAgcmV0dXJu IF9fbGFzdDsNCiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0Ow0KICAgICAgd2hp bGUoKytfX25leHQgIT0gX19sYXN0KSB7DQogICAgICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0 KQ0KICAgICAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgICAgICBfX2ZpcnN0ID0gX19uZXh0Ow0K ICAgICAgfQ0KICAgICAgcmV0dXJuIF9fbGFzdDsNCiAgICB9DQojIDM1OCAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4NCiAgICBfRm9yd2FyZEl0ZXINCiAgICBh ZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0K ICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQ0KICAgIHsN Cg0KICAgICANCiAgICAgDQoNCg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgICAg ICByZXR1cm4gX19sYXN0Ow0KICAgICAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7DQog ICAgICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsNCiAgICAgICAgaWYgKF9fYmluYXJ5X3By ZWQoKl9fZmlyc3QsICpfX25leHQpKQ0KICAgICAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgICAg ICBfX2ZpcnN0ID0gX19uZXh0Ow0KICAgICAgfQ0KICAgICAgcmV0dXJuIF9fbGFzdDsNCiAgICB9 DQojIDM4NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4NCiAgICB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQ0KICAgIGNvdW50KF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkNCiAg ICB7DQoNCiAgICAgDQogICAgIA0KDQogICAgIA0KICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsNCiAgICAgIGZvciAoIDsg X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9f dmFsdWUpDQogICAgICAgICAgKytfX247DQogICAgICByZXR1cm4gX19uOw0KICAgIH0NCiMgNDEx ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4NCiAgICB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQ0KICAgIGNvdW50X2lmKF9J bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQ0K ICAgIHsNCg0KICAgICANCiAgICAgDQoNCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7DQogICAgICBmb3IgKCA7IF9fZmly c3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQ0K ICAgICAgICAgICsrX19uOw0KICAgICAgcmV0dXJuIF9fbjsNCiAgICB9DQojIDQ1MCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9G b3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+DQogICAgX0ZvcndhcmRJdGVyMQ0K ICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEs DQogICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0 MikNCiAgICB7DQoNCiAgICAgDQogICAgIA0KICAgICANCg0KDQoNCg0KICAgICAgaWYgKF9fZmly c3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikNCiAgICAgICAgcmV0dXJuIF9f Zmlyc3QxOw0KDQoNCiAgICAgIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOw0KICAgICAg KytfX3RtcDsNCiAgICAgIGlmIChfX3RtcCA9PSBfX2xhc3QyKQ0KICAgICAgICByZXR1cm4gZmlu ZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsNCg0KDQoNCiAgICAgIF9Gb3J3YXJkSXRl cjIgX19wMSwgX19wOw0KDQogICAgICBfX3AxID0gX19maXJzdDI7ICsrX19wMTsNCg0KICAgICAg X0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsNCg0KICAgICAgd2hpbGUgKF9fZmly c3QxICE9IF9fbGFzdDEpIHsNCiAgICAgICAgX19maXJzdDEgPSBmaW5kKF9fZmlyc3QxLCBfX2xh c3QxLCAqX19maXJzdDIpOw0KICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkNCiAgICAg ICAgICByZXR1cm4gX19sYXN0MTsNCg0KICAgICAgICBfX3AgPSBfX3AxOw0KICAgICAgICBfX2N1 cnJlbnQgPSBfX2ZpcnN0MTsNCiAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpDQog ICAgICAgICAgcmV0dXJuIF9fbGFzdDE7DQoNCiAgICAgICAgd2hpbGUgKCpfX2N1cnJlbnQgPT0g Kl9fcCkgew0KICAgICAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQ0KICAgICAgICAgICAgcmV0 dXJuIF9fZmlyc3QxOw0KICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQ0KICAg ICAgICAgICAgcmV0dXJuIF9fbGFzdDE7DQogICAgICAgIH0NCg0KICAgICAgICArK19fZmlyc3Qx Ow0KICAgICAgfQ0KICAgICAgcmV0dXJuIF9fZmlyc3QxOw0KICAgIH0NCiMgNTIyICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWQ+ DQogICAgX0ZvcndhcmRJdGVyMQ0KICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBf Rm9yd2FyZEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIs IF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgX0JpbmFyeVByZWQgX19wcmVkaWNh dGUpDQogICAgew0KDQogICAgIA0KICAgICANCiAgICAgDQoNCg0KDQoNCiAgICAgIGlmIChfX2Zp cnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpDQogICAgICAgIHJldHVybiBf X2ZpcnN0MTsNCg0KDQogICAgICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsNCiAgICAg ICsrX190bXA7DQogICAgICBpZiAoX190bXAgPT0gX19sYXN0Mikgew0KICAgICAgICB3aGlsZSAo X19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIp KQ0KICAgICAgICAgICsrX19maXJzdDE7DQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsNCiAgICAg IH0NCg0KDQoNCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOw0KDQogICAgICBfX3AxID0g X19maXJzdDI7ICsrX19wMTsNCg0KICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2Zp cnN0MTsNCg0KICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsNCiAgICAgICAgd2hp bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsNCiAgICAgICAgICBpZiAoX19wcmVkaWNhdGUoKl9f Zmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgKytfX2Zp cnN0MTsNCiAgICAgICAgfQ0KICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAh X19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAgICAgICsrX19maXJzdDE7 DQogICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQ0KICAgICAgICAgIHJldHVybiBfX2xh c3QxOw0KDQogICAgICAgIF9fcCA9IF9fcDE7DQogICAgICAgIF9fY3VycmVudCA9IF9fZmlyc3Qx Ow0KICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJuIF9fbGFzdDE7DQoN CiAgICAgICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7DQogICAgICAg ICAgaWYgKCsrX19wID09IF9fbGFzdDIpDQogICAgICAgICAgICByZXR1cm4gX19maXJzdDE7DQog ICAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpDQogICAgICAgICAgICByZXR1cm4g X19sYXN0MTsNCiAgICAgICAgfQ0KDQogICAgICAgICsrX19maXJzdDE7DQogICAgICB9DQogICAg ICByZXR1cm4gX19maXJzdDE7DQogICAgfQ0KIyA1OTYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu YW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHA+DQogICAgX0ZvcndhcmRJdGVyDQogICAgc2VhcmNo X24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAg ICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCkNCiAgICB7DQoNCiAgICAgDQog ICAgIA0KDQogICAgIA0KDQogICAgICBpZiAoX19jb3VudCA8PSAwKQ0KICAgICAgICByZXR1cm4g X19maXJzdDsNCiAgICAgIGVsc2Ugew0KICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBf X2xhc3QsIF9fdmFsKTsNCiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAg ICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAtIDE7DQogICAgICAgICAgX0ZvcndhcmRJdGVy IF9faSA9IF9fZmlyc3Q7DQogICAgICAgICAgKytfX2k7DQogICAgICAgICAgd2hpbGUgKF9faSAh PSBfX2xhc3QgJiYgX19uICE9IDAgJiYgKl9faSA9PSBfX3ZhbCkgew0KICAgICAgICAgICAgKytf X2k7DQogICAgICAgICAgICAtLV9fbjsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKF9fbiA9 PSAwKQ0KICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7DQogICAgICAgICAgZWxzZQ0KICAgICAg ICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsNCiAgICAgICAgfQ0KICAg ICAgICByZXR1cm4gX19sYXN0Ow0KICAgICAgfQ0KICAgIH0NCiMgNjQzICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwLA0KICAgICAgICAgICB0eXBlbmFt ZSBfQmluYXJ5UHJlZD4NCiAgICBfRm9yd2FyZEl0ZXINCiAgICBzZWFyY2hfbihfRm9yd2FyZEl0 ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICBfSW50ZWdlciBf X2NvdW50LCBjb25zdCBfVHAmIF9fdmFsLA0KICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmlu YXJ5X3ByZWQpDQogICAgew0KDQogICAgIA0KICAgICANCg0KDQogICAgICBpZiAoX19jb3VudCA8 PSAwKQ0KICAgICAgICByZXR1cm4gX19maXJzdDsNCiAgICAgIGVsc2Ugew0KICAgICAgICB3aGls ZSAoX19maXJzdCAhPSBfX2xhc3QpIHsNCiAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19m aXJzdCwgX192YWwpKQ0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgKytfX2ZpcnN0Ow0K ICAgICAgICB9DQogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICAgICAg IF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOw0KICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2kg PSBfX2ZpcnN0Ow0KICAgICAgICAgICsrX19pOw0KICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19s YXN0ICYmIF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7DQogICAgICAg ICAgICArK19faTsNCiAgICAgICAgICAgIC0tX19uOw0KICAgICAgICAgIH0NCiAgICAgICAgICBp ZiAoX19uID09IDApDQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsNCiAgICAgICAgICBlbHNl IHsNCiAgICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0KSB7DQogICAgICAgICAgICAgIGlm IChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkNCiAgICAgICAgICAgICAgICBicmVhazsNCiAg ICAgICAgICAgICAgKytfX2k7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBfX2ZpcnN0ID0g X19pOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gX19sYXN0Ow0KICAg ICAgfQ0KICAgIH0NCiMgNjk3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgi IDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJ dGVyMj4NCiAgICBfRm9yd2FyZEl0ZXIyDQogICAgc3dhcF9yYW5nZXMoX0ZvcndhcmRJdGVyMSBf X2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgIF9Gb3J3YXJk SXRlcjIgX19maXJzdDIpDQogICAgew0KDQogICAgIA0KICAgICANCiAgICAgDQoNCg0KICAgICAN Cg0KDQoNCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytf X2ZpcnN0MikNCiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0Mik7DQogICAgICBy ZXR1cm4gX19maXJzdDI7DQogICAgfQ0KIyA3MzIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf T3V0cHV0SXRlciwgdHlwZW5hbWUgX1VuYXJ5T3BlcmF0aW9uPg0KICAgIF9PdXRwdXRJdGVyDQog ICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAg ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9v cCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQoNCg0KICAgICAgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQ0KICAgICAgICAqX19yZXN1bHQgPSBfX3Vu YXJ5X29wKCpfX2ZpcnN0KTsNCiAgICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgICB9DQojIDc2NSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0 ZXIsDQogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24+DQogICAgX091dHB1dEl0 ZXINCiAgICB0cmFuc2Zvcm0oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz dDEsDQogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jl c3VsdCwNCiAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkNCiAgICB7 DQoNCiAgICAgDQogICAgIA0KICAgICANCg0KDQoNCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0g X19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MiwgKytfX3Jlc3VsdCkNCiAgICAgICAgKl9f cmVzdWx0ID0gX19iaW5hcnlfb3AoKl9fZmlyc3QxLCAqX19maXJzdDIpOw0KICAgICAgcmV0dXJu IF9fcmVzdWx0Ow0KICAgIH0NCiMgNzk2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h bGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+ DQogICAgdm9pZA0KICAgIHJlcGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl ciBfX2xhc3QsDQogICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAm IF9fbmV3X3ZhbHVlKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCiAgICAgDQoNCg0KICAgICAg Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAgICAgICBpZiAoKl9fZmly c3QgPT0gX19vbGRfdmFsdWUpDQogICAgICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsNCiAg ICB9DQojIDgyNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5h bWUgX1RwPg0KICAgIHZvaWQNCiAgICByZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNv bnN0IF9UcCYgX19uZXdfdmFsdWUpDQogICAgew0KDQogICAgIA0KICAgICANCg0KICAgICANCg0K DQogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgICAgIGlm IChfX3ByZWQoKl9fZmlyc3QpKQ0KICAgICAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7DQog ICAgfQ0KIyA4NTYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5h bWUgX1RwPg0KICAgIF9PdXRwdXRJdGVyDQogICAgcmVwbGFjZV9jb3B5KF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0LA0KICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBf VHAmIF9fbmV3X3ZhbHVlKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCiAgICAgDQoNCg0KICAg ICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQ0KICAg ICAgICAqX19yZXN1bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/IF9fbmV3X3ZhbHVlIDog Kl9fZmlyc3Q7DQogICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0KIyA4ODggIi91c3IvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwNCiAgICAg ICAgICAgdHlwZW5hbWUgX1RwPg0KICAgIF9PdXRwdXRJdGVyDQogICAgcmVwbGFjZV9jb3B5X2lm KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRl IF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkNCiAgICB7DQoNCiAgICAgDQogICAgIA0K DQogICAgIA0KDQoNCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwg KytfX3Jlc3VsdCkNCiAgICAgICAgKl9fcmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbmV3 X3ZhbHVlIDogKl9fZmlyc3Q7DQogICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0KIyA5MTgg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9HZW5lcmF0b3I+DQogICAgdm9pZA0KICAgIGdl bmVyYXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfR2VuZXJh dG9yIF9fZ2VuKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCg0KICAgICAgZm9yICggOyBfX2Zp cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAgICAgICAqX19maXJzdCA9IF9fZ2VuKCk7DQog ICAgfQ0KIyA5NDIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9H ZW5lcmF0b3I+DQogICAgX091dHB1dEl0ZXINCiAgICBnZW5lcmF0ZV9uKF9PdXRwdXRJdGVyIF9f Zmlyc3QsIF9TaXplIF9fbiwgX0dlbmVyYXRvciBfX2dlbikNCiAgICB7DQoNCiAgICAgDQoNCg0K DQogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpDQogICAgICAgICpfX2Zp cnN0ID0gX19nZW4oKTsNCiAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgIH0NCiMgOTY5ICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4NCiAgICBfT3V0 cHV0SXRlcg0KICAgIHJlbW92ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf X2xhc3QsDQogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYg X192YWx1ZSkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQogICAgIA0KDQoNCiAgICAgIGZvciAo IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICAgICAgaWYgKCEoKl9fZmlyc3Qg PT0gX192YWx1ZSkpIHsNCiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsNCiAgICAgICAg ICArK19fcmVzdWx0Ow0KICAgICAgICB9DQogICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0K IyAxMDAzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9Q cmVkaWNhdGU+DQogICAgX091dHB1dEl0ZXINCiAgICByZW1vdmVfY29weV9pZihfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ dGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0K DQogICAgIA0KDQoNCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkN CiAgICAgICAgaWYgKCFfX3ByZWQoKl9fZmlyc3QpKSB7DQogICAgICAgICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3Q7DQogICAgICAgICAgKytfX3Jlc3VsdDsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJu IF9fcmVzdWx0Ow0KICAgIH0NCiMgMTAzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf YWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1Rw Pg0KICAgIF9Gb3J3YXJkSXRlcg0KICAgIHJlbW92ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbHVlKQ0KICAgIHsN Cg0KICAgICANCiAgICAgDQoNCiAgICAgDQoNCg0KICAgICAgX19maXJzdCA9IGZpbmQoX19maXJz dCwgX19sYXN0LCBfX3ZhbHVlKTsNCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0Ow0K ICAgICAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHkoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX192 YWx1ZSk7DQogICAgfQ0KIyAxMDczICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv LmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGlj YXRlPg0KICAgIF9Gb3J3YXJkSXRlcg0KICAgIHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQp DQogICAgew0KDQogICAgIA0KICAgICANCg0KDQogICAgICBfX2ZpcnN0ID0gZmluZF9pZihfX2Zp cnN0LCBfX2xhc3QsIF9fcHJlZCk7DQogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsN CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5X2lmKCsrX19pLCBfX2xhc3QsIF9fZmlyc3Qs IF9fcHJlZCk7DQogICAgfQ0KDQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPg0KICAgIF9PdXRwdXRJdGVyDQogICAgX191bmlx dWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAg ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICBvdXRwdXRf aXRlcmF0b3JfdGFnKQ0KICAgIHsNCg0KICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J bnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsNCiAgICAgICpfX3Jlc3Vs dCA9IF9fdmFsdWU7DQogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkNCiAgICAgICAg aWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsNCiAgICAgICAgICBfX3ZhbHVlID0gKl9fZmly c3Q7DQogICAgICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOw0KICAgICAgICB9DQogICAgICBy ZXR1cm4gKytfX3Jlc3VsdDsNCiAgICB9DQoNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPg0KICAgIF9Gb3J3YXJkSXRlcg0K ICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwN CiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAg ICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCg0KICAgICAgKl9fcmVzdWx0ID0gKl9f Zmlyc3Q7DQogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkNCiAgICAgICAgaWYgKCEo Kl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkNCiAgICAgICAgICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0 Ow0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7DQogICAgfQ0KIyAxMTQ1ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQogICAgaW5saW5lIF9PdXRwdXRJdGVyDQogICAgdW5p cXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAg ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQog ICAgIA0KDQoNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJ dGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOw0KDQogICAgICBpZiAoX19maXJzdCA9 PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsNCiAgICAgIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9JdGVyVHlwZSgpKTsNCiAgICB9DQojIDExNzAgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRp Y2F0ZT4NCiAgICBfT3V0cHV0SXRlcg0KICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2Zp cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0LA0KICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk LA0KICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykNCiAgICB7DQoNCiAgICAg DQoNCg0KDQogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVl X3R5cGUgX192YWx1ZSA9ICpfX2ZpcnN0Ow0KICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsNCiAg ICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQ0KICAgICAgICBpZiAoIV9fYmluYXJ5X3By ZWQoX192YWx1ZSwgKl9fZmlyc3QpKSB7DQogICAgICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0Ow0K ICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJu ICsrX19yZXN1bHQ7DQogICAgfQ0KIyAxMTk5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Zv cndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPg0KICAgIF9Gb3J3YXJkSXRlcg0K ICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwN CiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAg ICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwNCiAgICAgICAgICAgICAgICAgIGZv cndhcmRfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCg0KICAgICANCg0KDQoNCiAgICAgICpfX3Jlc3Vs dCA9ICpfX2ZpcnN0Ow0KICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAgICAg IGlmICghX19iaW5hcnlfcHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgKisrX19yZXN1bHQgPSAq X19maXJzdDsNCiAgICAgIHJldHVybiArK19fcmVzdWx0Ow0KICAgIH0NCiMgMTIzMiAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRl Pg0KICAgIGlubGluZSBfT3V0cHV0SXRlcg0KICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y ZXN1bHQsDQogICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQ0K ICAgIHsNCg0KICAgICANCiAgICAgDQoNCg0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7DQoNCiAg ICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0Ow0KICAgICAgcmV0dXJu IF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LA0KX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQs IF9JdGVyVHlwZSgpKTsNCiAgICB9DQojIDEyNjMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+DQogICAgX0Zv cndhcmRJdGVyDQogICAgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg X19sYXN0KQ0KICAgIHsNCg0KICAgICAgICAgDQogICAgICAgICANCg0KDQogICAgICAgICAgX19m aXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0KTsNCiAgICAgICAgICByZXR1cm4g dW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0KTsNCiAgICB9DQojIDEyOTAgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+DQogICAgX0ZvcndhcmRJ dGVyDQogICAgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LA0KICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpDQogICAgew0KDQog ICAgIA0KICAgICANCg0KDQoNCiAgICAgIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3Qs IF9fbGFzdCwgX19iaW5hcnlfcHJlZCk7DQogICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJz dCwgX19sYXN0LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsNCiAgICB9DQoNCg0KDQoNCg0KDQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPg0KICAgIHZvaWQNCiAgICBf X3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBf X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf dGFnKQ0KICAgIHsNCiAgICAgICAgICB3aGlsZSAodHJ1ZSkNCiAgICAgICAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCB8fCBfX2ZpcnN0ID09IC0tX19sYXN0KQ0KICAgICAgICAgICAgICAgICAg cmV0dXJuOw0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgaXRlcl9zd2FwKF9f Zmlyc3QrKywgX19sYXN0KTsNCiAgICB9DQoNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1JhbmRvbUFjY2Vzc0l0ZXI+DQogICAgdm9pZA0KICAgIF9fcmV2ZXJzZShfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAgICAg ICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCiAgICAgICAg ICB3aGlsZSAoX19maXJzdCA8IF9fbGFzdCkNCiAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0 KyssIC0tX19sYXN0KTsNCiAgICB9DQojIDEzNDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+DQog ICAgaW5saW5lIHZvaWQNCiAgICByZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBf QmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQ0KICAgIHsNCg0KICAgICAgICAgDQoNCiAgICAgICAg ICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3Qp KTsNCiAgICB9DQojIDEzNzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIg Mw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9PdXRw dXRJdGVyPg0KICAgIF9PdXRwdXRJdGVyDQogICAgcmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFs SXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkNCiAgICB7DQoNCiAgICAgDQogICAg IA0KDQoNCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICAgICAtLV9fbGFz dDsNCiAgICAgICAgKl9fcmVzdWx0ID0gKl9fbGFzdDsNCiAgICAgICAgKytfX3Jlc3VsdDsNCiAg ICAgIH0NCiAgICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgICB9DQojIDEzOTkgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXVjbGlk ZWFuUmluZ0VsZW1lbnQ+DQogICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50DQogICAgX19nY2QoX0V1 Y2xpZGVhblJpbmdFbGVtZW50IF9fbSwgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikNCiAgICB7 DQogICAgICB3aGlsZSAoX19uICE9IDApIHsNCiAgICAgICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50 IF9fdCA9IF9fbSAlIF9fbjsNCiAgICAgICAgX19tID0gX19uOw0KICAgICAgICBfX24gPSBfX3Q7 DQogICAgICB9DQogICAgICByZXR1cm4gX19tOw0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPg0KICAgIHZvaWQNCiAgICBfX3JvdGF0ZShfRm9yd2Fy ZEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsDQogICAg ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgZm9yd2FyZF9pdGVy YXRvcl90YWcpDQogICAgew0KICAgICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19s YXN0ID09IF9fbWlkZGxlKSkNCiAgICAgICAgcmV0dXJuOw0KDQogICAgICBfRm9yd2FyZEl0ZXIg X19maXJzdDIgPSBfX21pZGRsZTsNCiAgICAgIGRvIHsNCiAgICAgICAgc3dhcCgqX19maXJzdCsr LCAqX19maXJzdDIrKyk7DQogICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQ0KICAgICAg ICAgIF9fbWlkZGxlID0gX19maXJzdDI7DQogICAgICB9IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xh c3QpOw0KDQogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOw0KDQogICAgICB3aGlsZSAoX19maXJz dDIgIT0gX19sYXN0KSB7DQogICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOw0K ICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkNCiAgICAgICAgICBfX21pZGRsZSA9IF9f Zmlyc3QyOw0KICAgICAgICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpDQogICAgICAgICAg X19maXJzdDIgPSBfX21pZGRsZTsNCiAgICAgIH0NCiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4NCiAgICB2b2lkDQogICAgX19yb3RhdGUo X0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9fbWlkZGxlLA0KICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQog ICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCg0KICAgICAN Cg0KDQogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRk bGUpKQ0KICAgICAgICByZXR1cm47DQoNCiAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRs ZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7DQogICAgICBfX3JldmVyc2UoX19taWRk bGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7DQoNCiAgICAgIHdoaWxl IChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9IF9fbGFzdCkNCiAgICAgICAgc3dh cCAoKl9fZmlyc3QrKywgKi0tX19sYXN0KTsNCg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRk bGUpIHsNCiAgICAgICAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxf aXRlcmF0b3JfdGFnKCkpOw0KICAgICAgfQ0KICAgICAgZWxzZSB7DQogICAgICAgIF9fcmV2ZXJz ZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7DQogICAg ICB9DQogICAgfQ0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlcj4NCiAgICB2b2lkDQogICAgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwN CiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwNCiAgICAgICAgICAgICBf UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVy YXRvcl90YWcpDQogICAgew0KDQogICAgIA0KDQoNCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21p ZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpDQogICAgICAgIHJldHVybjsNCg0KICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZm ZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQoNCiAgICAg IF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0Ow0KICAgICAgX0Rpc3RhbmNlIF9fayA9 IF9fbWlkZGxlIC0gX19maXJzdDsNCiAgICAgIF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7DQoN CiAgICAgIGlmIChfX2sgPT0gX19sKSB7DQogICAgICAgIHN3YXBfcmFuZ2VzKF9fZmlyc3QsIF9f bWlkZGxlLCBfX21pZGRsZSk7DQogICAgICAgIHJldHVybjsNCiAgICAgIH0NCg0KICAgICAgX0Rp c3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwgX19rKTsNCg0KICAgICAgZm9yIChfRGlzdGFuY2UgX19p ID0gMDsgX19pIDwgX19kOyBfX2krKykgew0KICAgICAgICBfVmFsdWVUeXBlIF9fdG1wID0gKl9f Zmlyc3Q7DQogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7DQoNCiAgICAg ICAgaWYgKF9fayA8IF9fbCkgew0KICAgICAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9f aiA8IF9fbC9fX2Q7IF9faisrKSB7DQogICAgICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9f bCkgew0KICAgICAgICAgICAgICAqX19wID0gKihfX3AgLSBfX2wpOw0KICAgICAgICAgICAgICBf X3AgLT0gX19sOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAqX19wID0gKihfX3AgKyBf X2spOw0KICAgICAgICAgICAgX19wICs9IF9fazsNCiAgICAgICAgICB9DQogICAgICAgIH0NCg0K ICAgICAgICBlbHNlIHsNCiAgICAgICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBf X2svX19kIC0gMTsgX19qICsrKSB7DQogICAgICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0gX19r KSB7DQogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7DQogICAgICAgICAgICAgIF9f cCArPSBfX2s7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICpfX3AgPSAqIChfX3AgLSBf X2wpOw0KICAgICAgICAgICAgX19wIC09IF9fbDsNCiAgICAgICAgICB9DQogICAgICAgIH0NCg0K ICAgICAgICAqX19wID0gX190bXA7DQogICAgICAgICsrX19maXJzdDsNCiAgICAgIH0NCiAgICB9 DQojIDE1NjEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+DQogICAgaW5saW5lIHZvaWQNCiAgICByb3RhdGUo X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX0ZvcndhcmRJdGVy IF9fbGFzdCkNCiAgICB7DQoNCiAgICAgDQoNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsNCiAg ICAgIF9fcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9JdGVyVHlwZSgpKTsNCiAg ICB9DQojIDE1ODkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPg0KICAg IF9PdXRwdXRJdGVyDQogICAgcm90YXRlX2NvcHkoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX21pZGRsZSwNCiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBf T3V0cHV0SXRlciBfX3Jlc3VsdCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQoNCiAgICAgIHJl dHVybiBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fcmVz dWx0KSk7DQogICAgfQ0KIyAxNjEyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv LmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Rpc3RhbmNlPg0KICAgIGlubGluZSBfRGlzdGFu Y2UNCiAgICBfX3JhbmRvbV9udW1iZXIoX0Rpc3RhbmNlIF9fbikNCiAgICB7DQoNCg0KDQogICAg ICByZXR1cm4gcmFuZCgpICUgX19uOw0KDQogICAgfQ0KIyAxNjM0ICIvdXNyL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXI+DQogICAgaW5saW5lIHZvaWQNCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpDQogICAgew0KDQogICAgIA0K DQoNCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOw0KICAgICAgZm9yIChfUmFu ZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpDQog ICAgICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9f Zmlyc3QpICsgMSkpOw0KICAgIH0NCiMgMTY2MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl bmFtZSBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPg0KICAgIHZvaWQNCiAgICByYW5kb21fc2h1ZmZs ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQog ICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKQ0KICAgIHsN Cg0KICAgICANCg0KDQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsNCiAgICAg IGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7 ICsrX19pKQ0KICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kKChfX2kgLSBf X2ZpcnN0KSArIDEpKTsNCiAgICB9DQoNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPg0KICAgIF9Gb3J3YXJkSXRlcg0KICAg IF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0K ICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLA0KICAgICAgICAgICAgICAgIGZvcndh cmRfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0 dXJuIF9fZmlyc3Q7DQoNCiAgICAgIHdoaWxlIChfX3ByZWQoKl9fZmlyc3QpKQ0KICAgICAgICBp ZiAoKytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7DQoNCiAgICAgIF9Gb3J3YXJk SXRlciBfX25leHQgPSBfX2ZpcnN0Ow0KDQogICAgICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0 KQ0KICAgICAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7DQogICAgICAgICAgc3dhcCgqX19maXJz dCwgKl9fbmV4dCk7DQogICAgICAgICAgKytfX2ZpcnN0Ow0KICAgICAgICB9DQoNCiAgICAgIHJl dHVybiBfX2ZpcnN0Ow0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp ZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPg0KICAgIF9CaWRpcmVjdGlvbmFs SXRlcg0KICAgIF9fcGFydGl0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLA0K ICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCiAgICAg IHdoaWxlICh0cnVlKSB7DQogICAgICAgIHdoaWxlICh0cnVlKQ0KICAgICAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkNCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgICAgICAgIGVs c2UgaWYgKF9fcHJlZCgqX19maXJzdCkpDQogICAgICAgICAgICArK19fZmlyc3Q7DQogICAgICAg ICAgZWxzZQ0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIC0tX19sYXN0Ow0KICAgICAgICB3 aGlsZSAodHJ1ZSkNCiAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgICAgICAg ICByZXR1cm4gX19maXJzdDsNCiAgICAgICAgICBlbHNlIGlmICghX19wcmVkKCpfX2xhc3QpKQ0K ICAgICAgICAgICAgLS1fX2xhc3Q7DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgYnJlYWs7 DQogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOw0KICAgICAgICArK19fZmlyc3Q7 DQogICAgICB9DQogICAgfQ0KIyAxNzQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h bGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJl ZGljYXRlPg0KICAgIGlubGluZSBfRm9yd2FyZEl0ZXINCiAgICBwYXJ0aXRpb24oX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgIF9QcmVkaWNh dGUgX19wcmVkKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCg0KICAgICAgcmV0dXJuIF9fcGFy dGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmly c3QpKTsNCiAgICB9DQoNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfRGlzdGFuY2U+DQogICAgX0Zvcndh cmRJdGVyDQogICAgX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbikNCiAgICB7DQogICAgICBpZiAoX19s ZW4gPT0gMSkNCiAgICAgICAgcmV0dXJuIF9fcHJlZCgqX19maXJzdCkgPyBfX2xhc3QgOiBfX2Zp cnN0Ow0KICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsNCiAgICAgIGFkdmFu Y2UoX19taWRkbGUsIF9fbGVuIC8gMik7DQogICAgICBfRm9yd2FyZEl0ZXIgX19iZWdpbiA9IF9f aW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbWlkZGxlLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu IC8gMik7DQogICAgICBfRm9yd2FyZEl0ZXIgX19lbmQgPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRp dGlvbihfX21pZGRsZSwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19wcmVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIpOw0KICAgICAgcm90 YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7DQogICAgICBhZHZhbmNlKF9fYmVnaW4sIGRp c3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOw0KICAgICAgcmV0dXJuIF9fYmVnaW47DQogICAgfQ0K DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Q b2ludGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLA0KICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFu Y2U+DQogICAgX0ZvcndhcmRJdGVyDQogICAgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9G b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpDQogICAgew0K ICAgICAgaWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsNCiAgICAgICAgX0ZvcndhcmRJdGVy IF9fcmVzdWx0MSA9IF9fZmlyc3Q7DQogICAgICAgIF9Qb2ludGVyIF9fcmVzdWx0MiA9IF9fYnVm ZmVyOw0KICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0IDsgKytfX2ZpcnN0KQ0KICAg ICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSB7DQogICAgICAgICAgICAqX19yZXN1bHQxID0g Kl9fZmlyc3Q7DQogICAgICAgICAgICArK19fcmVzdWx0MTsNCiAgICAgICAgICB9DQogICAgICAg ICAgZWxzZSB7DQogICAgICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7DQogICAgICAgICAg ICArK19fcmVzdWx0MjsNCiAgICAgICAgICB9DQogICAgICAgIGNvcHkoX19idWZmZXIsIF9fcmVz dWx0MiwgX19yZXN1bHQxKTsNCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0MTsNCiAgICAgIH0NCiAg ICAgIGVsc2Ugew0KICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0Ow0KICAg ICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOw0KICAgICAgICBfRm9yd2FyZEl0ZXIg X19iZWdpbiA9IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19wcmVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2xlbiAvIDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsNCiAg ICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKCBf X21pZGRsZSwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fcHJlZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMiwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZl ciwgX19idWZmZXJfc2l6ZSk7DQogICAgICAgIHJvdGF0ZShfX2JlZ2luLCBfX21pZGRsZSwgX19l bmQpOw0KICAgICAgICBhZHZhbmNlKF9fYmVnaW4sIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkp Ow0KICAgICAgICByZXR1cm4gX19iZWdpbjsNCiAgICAgIH0NCiAgICB9DQojIDE4NDggIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+DQogICAgX0ZvcndhcmRJdGVyDQogICAg c3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz dCwNCiAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQ0KICAgIHsNCg0KICAg ICANCiAgICAgDQoNCg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgICAgICByZXR1 cm4gX19maXJzdDsNCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOw0K ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojpk aWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsNCg0KICAgICAgICBfVGVtcG9yYXJ5X2J1ZmZl cjxfRm9yd2FyZEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7DQogICAg ICAgIGlmIChfX2J1Zi5zaXplKCkgPiAwKQ0KICAgICAgICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0 aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVlc3Rl ZF9zaXplKCkpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19idWYuYmVnaW4oKSwgX19idWYuc2l6ZSgpKTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIHJl dHVybiBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlw ZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSk7DQogICAgICB9DQogICAgfQ0KDQoNCg0KDQoNCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPg0KICAg IF9SYW5kb21BY2Nlc3NJdGVyDQogICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nl c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgX1RwIF9fcGl2b3QpDQogICAgew0KICAgICAgd2hpbGUgKHRydWUpIHsNCiAg ICAgICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZvdCkNCiAgICAgICAgICArK19fZmlyc3Q7DQog ICAgICAgIC0tX19sYXN0Ow0KICAgICAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpDQogICAg ICAgICAgLS1fX2xhc3Q7DQogICAgICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQ0KICAgICAg ICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsN CiAgICAgICAgKytfX2ZpcnN0Ow0KICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Nv bXBhcmU+DQogICAgX1JhbmRvbUFjY2Vzc0l0ZXINCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24o X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCwgX0NvbXBhcmUgX19jb21wKQ0KICAg IHsNCiAgICAgIHdoaWxlICh0cnVlKSB7DQogICAgICAgIHdoaWxlIChfX2NvbXAoKl9fZmlyc3Qs IF9fcGl2b3QpKQ0KICAgICAgICAgICsrX19maXJzdDsNCiAgICAgICAgLS1fX2xhc3Q7DQogICAg ICAgIHdoaWxlIChfX2NvbXAoX19waXZvdCwgKl9fbGFzdCkpDQogICAgICAgICAgLS1fX2xhc3Q7 DQogICAgICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQ0KICAgICAgICAgIHJldHVybiBfX2Zp cnN0Ow0KICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsNCiAgICAgICAgKytfX2Zp cnN0Ow0KICAgICAgfQ0KICAgIH0NCiMgMTkyOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfYWxnby5oIiAzDQogIGVudW0geyBfTV90aHJlc2hvbGQgPSAxNiB9Ow0KDQoNCg0KDQoNCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPg0KICAg IHZvaWQNCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCwgX1RwIF9fdmFsKQ0KICAgIHsNCiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9 IF9fbGFzdDsNCiAgICAgIC0tX19uZXh0Ow0KICAgICAgd2hpbGUgKF9fdmFsIDwgKl9fbmV4dCkg ew0KICAgICAgICAqX19sYXN0ID0gKl9fbmV4dDsNCiAgICAgICAgX19sYXN0ID0gX19uZXh0Ow0K ICAgICAgICAtLV9fbmV4dDsNCiAgICAgIH0NCiAgICAgICpfX2xhc3QgPSBfX3ZhbDsNCiAgICB9 DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl bmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIHZvaWQNCiAgICBfX3VuZ3VhcmRlZF9s aW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsLCBfQ29tcGFy ZSBfX2NvbXApDQogICAgew0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0 Ow0KICAgICAgLS1fX25leHQ7DQogICAgICB3aGlsZSAoX19jb21wKF9fdmFsLCAqX19uZXh0KSkg ew0KICAgICAgICAqX19sYXN0ID0gKl9fbmV4dDsNCiAgICAgICAgX19sYXN0ID0gX19uZXh0Ow0K ICAgICAgICAtLV9fbmV4dDsNCiAgICAgIH0NCiAgICAgICpfX2xhc3QgPSBfX3ZhbDsNCiAgICB9 DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPg0KICAg IHZvaWQNCiAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCiAgICB7DQogICAgICBpZiAoX19maXJzdCA9PSBfX2xh c3QpIHJldHVybjsNCg0KICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0 ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpDQogICAgICB7DQogICAgICAgIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX192YWwgPSAqX19p Ow0KICAgICAgICBpZiAoX192YWwgPCAqX19maXJzdCkgew0KICAgICAgICAgIGNvcHlfYmFja3dh cmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsNCiAgICAgICAgICAqX19maXJzdCA9IF9fdmFsOw0K ICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5z ZXJ0KF9faSwgX192YWwpOw0KICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIHZvaWQN CiAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkN CiAgICB7DQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsNCg0KICAgICAgZm9y IChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytf X2kpDQogICAgICB7DQogICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj ZXNzSXRlcj46OnZhbHVlX3R5cGUgX192YWwgPSAqX19pOw0KICAgICAgICBpZiAoX19jb21wKF9f dmFsLCAqX19maXJzdCkpIHsNCiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9faSwg X19pICsgMSk7DQogICAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbDsNCiAgICAgICAgfQ0KICAgICAg ICBlbHNlDQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9fdmFsLCBf X2NvbXApOw0KICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXI+DQogICAgaW5saW5lIHZvaWQNCiAgICBfX3VuZ3VhcmRlZF9pbnNl cnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QpDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQoNCiAgICAgIGZvciAoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpDQogICAg ICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBlKCpfX2kpKTsNCiAg ICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0 eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBpbmxpbmUgdm9pZA0KICAgIF9fdW5ndWFyZGVkX2luc2Vy dGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQog ICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQoNCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vz c0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpDQogICAgICAgIF9fdW5n dWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOw0KICAg IH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+DQog ICAgdm9pZA0KICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0KICAgIHsNCiAgICAgIGlmIChfX2xhc3Qg LSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7DQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19m aXJzdCwgX19maXJzdCArIF9NX3RocmVzaG9sZCk7DQogICAgICAgIF9fdW5ndWFyZGVkX2luc2Vy dGlvbl9zb3J0KF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fbGFzdCk7DQogICAgICB9DQogICAg ICBlbHNlDQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsNCiAgICB9 DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl bmFtZSBfQ29tcGFyZT4NCiAgICB2b2lkDQogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgaWYgKF9f bGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsNCiAgICAgICAgX19pbnNlcnRpb25fc29y dChfX2ZpcnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBfX2NvbXApOw0KICAgICAgICBfX3Vu Z3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBfX2xhc3QsIF9f Y29tcCk7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19m aXJzdCwgX19sYXN0LCBfX2NvbXApOw0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1NpemU+DQogICAgaW5saW5lIF9TaXplDQogICAgX19sZyhfU2l6ZSBfX24pDQogICAg ew0KICAgICAgX1NpemUgX19rOw0KICAgICAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+ PSAxKSArK19fazsNCiAgICAgIHJldHVybiBfX2s7DQogICAgfQ0KDQoNCg0KDQoNCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemU+DQogICAgdm9p ZA0KICAgIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9s aW1pdCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsNCg0KICAgICAgd2hpbGUgKF9f bGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsNCiAgICAgICAgaWYgKF9fZGVwdGhfbGlt aXQgPT0gMCkgew0KICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFz dCk7DQogICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgIC0tX19kZXB0aF9saW1p dDsNCiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQ0KICAgICAgICAgIF9fdW5ndWFy ZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9f Zmlyc3QpLzIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICooX19sYXN0IC0gMSkpKSk7DQogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQs IF9fbGFzdCwgX19kZXB0aF9saW1pdCk7DQogICAgICAgIF9fbGFzdCA9IF9fY3V0Ow0KICAgICAg fQ0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICB2b2lkDQogICAgX19p bnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0LCBfQ29t cGFyZSBfX2NvbXApDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQoNCiAgICAgIHdo aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7DQogICAgICAgIGlmIChfX2Rl cHRoX2xpbWl0ID09IDApIHsNCiAgICAgICAgICBwYXJ0aWFsX3NvcnQoX19maXJzdCwgX19sYXN0 LCBfX2xhc3QsIF9fY29tcCk7DQogICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAg IC0tX19kZXB0aF9saW1pdDsNCiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQ0KICAg ICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0 ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLA0KICAgICAgICAg ICBfX2NvbXApOw0KICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIF9fZGVw dGhfbGltaXQsIF9fY29tcCk7DQogICAgICAgIF9fbGFzdCA9IF9fY3V0Ow0KICAgICAgfQ0KICAg IH0NCiMgMjE2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPg0KICAgIGlubGluZSB2b2lkDQogICAg c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qp DQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj Y2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQoNCg0KICAgICANCg0KICAgICANCg0K ICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAgICAgIF9faW50cm9zb3J0X2xvb3Ao X19maXJzdCwgX19sYXN0LCBfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMik7DQogICAgICAgIF9f ZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsNCiAgICAgIH0NCiAgICB9DQoj IDIxOTcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAgaW5s aW5lIHZvaWQNCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFs dWVUeXBlOw0KDQoNCiAgICAgDQoNCiAgICAgDQoNCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFz dCkgew0KICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhfX2xh c3QgLSBfX2ZpcnN0KSAqIDIsIF9fY29tcCk7DQogICAgICAgIF9fZmluYWxfaW5zZXJ0aW9uX3Nv cnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOw0KICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KDQoN Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4NCiAgICB2b2lkDQogICAg X19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCkNCiAgICB7DQogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1 KSB7DQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsNCiAgICAgICAg cmV0dXJuOw0KICAgICAgfQ0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2Zp cnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsNCiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29y dChfX2ZpcnN0LCBfX21pZGRsZSk7DQogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRk bGUsIF9fbGFzdCk7DQogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19m aXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUpOw0K ICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs IHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIHZvaWQNCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQo X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgaWYg KF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgew0KICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly c3QsIF9fbGFzdCwgX19jb21wKTsNCiAgICAgICAgcmV0dXJuOw0KICAgICAgfQ0KICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8g MjsNCiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21w KTsNCiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0LCBfX2NvbXAp Ow0KICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwNCiAgICAgICAg ICAgdHlwZW5hbWUgX0Rpc3RhbmNlPg0KICAgIHZvaWQNCiAgICBfX21lcmdlX3NvcnRfbG9vcChf UmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwNCiAg ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5j ZSBfX3N0ZXBfc2l6ZSkNCiAgICB7DQogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBf X3N0ZXBfc2l6ZTsNCg0KICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3Rl cCkgew0KICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBf c2l6ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9f Zmlyc3QgKyBfX3R3b19zdGVwLA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0KTsN CiAgICAgICAgX19maXJzdCArPSBfX3R3b19zdGVwOw0KICAgICAgfQ0KDQogICAgICBfX3N0ZXBf c2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsNCiAg ICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fc3Rl cF9zaXplLCBfX2xhc3QsDQogICAgICAgICAgICBfX3Jlc3VsdCk7DQogICAgfQ0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXIyLA0KICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPg0K ICAgIHZvaWQNCiAgICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSwNCiAgICAgICAg ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgX0Rpc3RhbmNlIF9f dHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7DQoNCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2Zp cnN0ID49IF9fdHdvX3N0ZXApIHsNCiAgICAgICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBf X2ZpcnN0ICsgX19zdGVwX3NpemUsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCAr IF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICAgICAg ICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7DQogICAgICB9DQogICAgICBfX3N0ZXBfc2l6ZSA9IG1p bihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsNCg0KICAgICAgbWVy Z2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLA0KICAgICAgICAgICAgX19maXJzdCAr IF9fc3RlcF9zaXplLCBfX2xhc3QsDQogICAgICAgICAgICBfX3Jlc3VsdCwNCiAgICAgICAgICAg IF9fY29tcCk7DQogICAgfQ0KDQogIGVudW0geyBfTV9jaHVua19zaXplID0gNyB9Ow0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+DQog ICAgdm9pZA0KICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSkNCiAgICB7DQogICAgICB3aGlsZSAoX19sYXN0IC0g X19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsNCiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2Zp cnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplKTsNCiAgICAgICAgX19maXJzdCArPSBfX2NodW5r X3NpemU7DQogICAgICB9DQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7 DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt ZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIHZvaWQNCiAgICBfX2NodW5rX2lu c2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3Np emUsIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJz dCA+PSBfX2NodW5rX3NpemUpIHsNCiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf X2ZpcnN0ICsgX19jaHVua19zaXplLCBfX2NvbXApOw0KICAgICAgICBfX2ZpcnN0ICs9IF9fY2h1 bmtfc2l6ZTsNCiAgICAgIH0NCiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0 LCBfX2NvbXApOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl ciwgdHlwZW5hbWUgX1BvaW50ZXI+DQogICAgdm9pZA0KICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1 ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyKQ0KICAgIHsN CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy Pjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsNCg0KICAgICAgX0Rpc3RhbmNlIF9fbGVuID0g X19sYXN0IC0gX19maXJzdDsNCiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZl ciArIF9fbGVuOw0KDQogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXpl Ow0KICAgICAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9z aXplKTsNCg0KICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsNCiAgICAgICAgX19t ZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUpOw0K ICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOw0KICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1 ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUpOw0KICAgICAgICBfX3N0 ZXBfc2l6ZSAqPSAyOw0KICAgICAgfQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAg IHZvaWQNCiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVy ZW5jZV90eXBlIF9EaXN0YW5jZTsNCg0KICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0g X19maXJzdDsNCiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVu Ow0KDQogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXplOw0KICAgICAg X19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplLCBfX2Nv bXApOw0KDQogICAgICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgew0KICAgICAgICBfX21l cmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwgX19j b21wKTsNCiAgICAgICAgX19zdGVwX3NpemUgKj0gMjsNCiAgICAgICAgX19tZXJnZV9zb3J0X2xv b3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplLCBfX2NvbXAp Ow0KICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOw0KICAgICAgfQ0KICAgIH0NCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1l IF9EaXN0YW5jZT4NCiAgICB2b2lkDQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3Np emUpDQogICAgew0KICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAx KSAvIDI7DQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xl bjsNCiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsNCiAgICAgICAgX19zdGFibGVf c29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUp Ow0KICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVm ZmVyLCBfX2J1ZmZlcl9zaXplKTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAgICBfX21l cmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsNCiAgICAg ICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsN CiAgICAgIH0NCiAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFz dCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksDQogICAgICAgICAgICAgICAgICAgICAg IF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsN CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l IF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsDQogICAgICAgICAgIHR5cGVuYW1lIF9Db21w YXJlPg0KICAgIHZvaWQNCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQogICAgICBf RGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsNCiAgICAgIF9SYW5k b21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOw0KICAgICAgaWYgKF9fbGVu ID4gX19idWZmZXJfc2l6ZSkgew0KICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmly c3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbXApOw0KICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9f bWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29tcCk7DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAgICAg X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19j b21wKTsNCiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3Qs IF9fYnVmZmVyLCBfX2NvbXApOw0KICAgICAgfQ0KICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2Zp cnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwNCiAg ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZm ZXIsIF9fYnVmZmVyX3NpemUsDQogICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQogICAg fQ0KIyAyNDMwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+DQogICAgaW5saW5lIHZvaWQNCiAgICBz dGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QpDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlw ZSBfRGlzdGFuY2VUeXBlOw0KDQoNCiAgICAgDQoNCiAgICAgDQoNCiAgICAgIF9UZW1wb3Jhcnlf YnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYoX19maXJzdCwgX19sYXN0 KTsNCiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAwKQ0KICAgICAgICBfX2lucGxhY2Vfc3RhYmxl X3NvcnQoX19maXJzdCwgX19sYXN0KTsNCiAgICAgIGVsc2UNCiAgICAgICAgX19zdGFibGVfc29y dF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKGJ1 Zi5zaXplKCkpKTsNCiAgICB9DQojIDI0NjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h bWUgX0NvbXBhcmU+DQogICAgaW5saW5lIHZvaWQNCiAgICBzdGFibGVfc29ydChfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29t cCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9E aXN0YW5jZVR5cGU7DQoNCg0KICAgICANCg0KICAgICANCg0KDQogICAgICBfVGVtcG9yYXJ5X2J1 ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1ZhbHVlVHlwZT4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7 DQogICAgICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkNCiAgICAgICAgX19pbnBsYWNlX3N0YWJsZV9z b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsNCiAgICAgIGVsc2UNCiAgICAgICAgX19zdGFi bGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VU eXBlKGJ1Zi5zaXplKCkpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7 DQogICAgfQ0KIyAyNTAyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+DQogICAgdm9pZA0KICAgIHBh cnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICBf UmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwNCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOw0KDQoNCiAgICAg DQoNCiAgICAgDQoNCiAgICAgIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7DQogICAgICBm b3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19p KQ0KICAgICAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KQ0KICAgICAgICAgIF9fcG9wX2hlYXAoX19m aXJzdCwgX19taWRkbGUsIF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7DQogICAgICBzb3J0X2hlYXAo X19maXJzdCwgX19taWRkbGUpOw0KICAgIH0NCiMgMjU0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy LCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICB2b2lkDQogICAgcGFydGlhbF9zb3J0KF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f bWlkZGxlLA0KICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAg ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVl VHlwZTsNCg0KDQogICAgIA0KDQogICAgIA0KDQoNCiAgICAgIG1ha2VfaGVhcChfX2ZpcnN0LCBf X21pZGRsZSwgX19jb21wKTsNCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19t aWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpDQogICAgICAgIGlmIChfX2NvbXAoKl9faSwgKl9f Zmlyc3QpKQ0KICAgICAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1Zh bHVlVHlwZSgqX19pKSwgX19jb21wKTsNCiAgICAgIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRs ZSwgX19jb21wKTsNCiAgICB9DQojIDI1NzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlcj4NCiAgICBfUmFuZG9tQWNjZXNzSXRlcg0KICAgIHBhcnRpYWxfc29ydF9j b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsDQogICAgICAgICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkNCiAgICB7DQogICAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBf SW5wdXRWYWx1ZVR5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf UmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX091dHB1dFZhbHVlVHlwZTsNCiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVy ZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7DQoNCg0KICAgICANCiAgICAgDQogICAgIA0KICAgICAN Cg0KICAgICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jl c3VsdF9sYXN0Ow0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0g X19yZXN1bHRfZmlyc3Q7DQogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3Vs dF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgew0KICAgICAgICAqX19yZXN1bHRfcmVhbF9s YXN0ID0gKl9fZmlyc3Q7DQogICAgICAgICsrX19yZXN1bHRfcmVhbF9sYXN0Ow0KICAgICAgICAr K19fZmlyc3Q7DQogICAgICB9DQogICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVz dWx0X3JlYWxfbGFzdCk7DQogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsNCiAgICAg ICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0X2ZpcnN0KQ0KICAgICAgICAgIF9fYWRqdXN0X2hl YXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCksDQogICAgICAgICAgICAgICAgICAg ICAgICBfRGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwN CiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dFZhbHVlVHlwZSgqX19maXJzdCkpOw0KICAg ICAgICArK19fZmlyc3Q7DQogICAgICB9DQogICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3Qs IF9fcmVzdWx0X3JlYWxfbGFzdCk7DQogICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0Ow0K ICAgIH0NCiMgMjYzMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy LCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBfUmFuZG9tQWNjZXNzSXRlcg0KICAgIHBhcnRpYWxf c29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAg ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsDQogICAgICAg ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwNCiAgICAgICAg ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX0lucHV0VmFsdWVU eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7DQogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBf RGlzdGFuY2VUeXBlOw0KDQoNCiAgICAgDQogICAgIA0KICAgICANCiAgICAgDQoNCg0KICAgICAg aWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0 Ow0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRf Zmlyc3Q7DQogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xh c3QgIT0gX19yZXN1bHRfbGFzdCkgew0KICAgICAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9f Zmlyc3Q7DQogICAgICAgICsrX19yZXN1bHRfcmVhbF9sYXN0Ow0KICAgICAgICArK19fZmlyc3Q7 DQogICAgICB9DQogICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxf bGFzdCwgX19jb21wKTsNCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICAg ICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQ0KICAgICAgICAgIF9fYWRq dXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCksDQogICAgICAgICAgICAg ICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2Zp cnN0KSwNCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dFZhbHVlVHlwZSgqX19maXJzdCks DQogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICAgICAgICArK19fZmlyc3Q7DQog ICAgICB9DQogICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFz dCwgX19jb21wKTsNCiAgICAgIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7DQogICAgfQ0KIyAy Njg2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+DQogICAgdm9pZA0KICAgIG50aF9lbGVtZW50KF9S YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19udGgsDQogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0KICAg IHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ dGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOw0KDQoNCiAgICAgDQogICAgIA0KDQogICAgICB3 aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsNCiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19jdXQgPQ0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3Qs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9f Zmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7DQogICAg ICAgIGlmIChfX2N1dCA8PSBfX250aCkNCiAgICAgICAgICBfX2ZpcnN0ID0gX19jdXQ7DQogICAg ICAgIGVsc2UNCiAgICAgICAgICBfX2xhc3QgPSBfX2N1dDsNCiAgICAgIH0NCiAgICAgIF9faW5z ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsNCiAgICB9DQojIDI3MjggIi91c3IvaW5jbHVk ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAgdm9pZA0KICAgIG50aF9lbGVtZW50 KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz c0l0ZXIgX19udGgsDQogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZh bHVlX3R5cGUgX1ZhbHVlVHlwZTsNCg0KDQogICAgIA0KICAgICANCg0KDQogICAgICB3aGlsZSAo X19sYXN0IC0gX19maXJzdCA+IDMpIHsNCiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQg PQ0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3Qs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihf X2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKSksDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQogICAgICAgIGlmIChfX2N1dCA8PSBf X250aCkNCiAgICAgICAgICBfX2ZpcnN0ID0gX19jdXQ7DQogICAgICAgIGVsc2UNCiAgICAgICAg ICBfX2xhc3QgPSBfX2N1dDsNCiAgICAgIH0NCiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJz dCwgX19sYXN0LCBfX2NvbXApOw0KICAgIH0NCiMgMjc2OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw ZW5hbWUgX1RwPg0KICAgIF9Gb3J3YXJkSXRlcg0KICAgIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQ0KICAgIHsN CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZh bHVlX3R5cGUgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOw0KDQoNCg0K DQoNCg0KICAgICANCiAgICAgDQogICAgIA0KDQogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0g ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsNCiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOw0K ICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOw0KDQogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7 DQogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7DQogICAgICAgIF9fbWlkZGxlID0gX19maXJz dDsNCiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsNCiAgICAgICAgaWYgKCpfX21p ZGRsZSA8IF9fdmFsKSB7DQogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOw0KICAgICAgICAg ICsrX19maXJzdDsNCiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsNCiAgICAg ICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7DQogICAgICB9DQog ICAgICByZXR1cm4gX19maXJzdDsNCiAgICB9DQojIDI4MTYgIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5 cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAgX0ZvcndhcmRJdGVyDQogICAgbG93 ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAg ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVl X3R5cGUgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOw0KDQoNCiAgICAg DQogICAgIA0KDQogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwg X19sYXN0KTsNCiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOw0KICAgICAgX0ZvcndhcmRJdGVy IF9fbWlkZGxlOw0KDQogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7DQogICAgICAgIF9faGFsZiA9 IF9fbGVuID4+IDE7DQogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsNCiAgICAgICAgYWR2YW5j ZShfX21pZGRsZSwgX19oYWxmKTsNCiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFs KSkgew0KICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsNCiAgICAgICAgICArK19fZmlyc3Q7 DQogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7DQogICAgICAgIH0NCiAgICAg ICAgZWxzZQ0KICAgICAgICAgIF9fbGVuID0gX19oYWxmOw0KICAgICAgfQ0KICAgICAgcmV0dXJu IF9fZmlyc3Q7DQogICAgfQ0KIyAyODU2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h bGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+ DQogICAgX0ZvcndhcmRJdGVyDQogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpDQogICAgew0KICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBf VmFsdWVUeXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh cmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7DQoNCg0KDQogICAgIA0KICAg ICANCiAgICAgDQoNCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0 LCBfX2xhc3QpOw0KICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7DQogICAgICBfRm9yd2FyZEl0 ZXIgX19taWRkbGU7DQoNCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsNCiAgICAgICAgX19oYWxm ID0gX19sZW4gPj4gMTsNCiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0Ow0KICAgICAgICBhZHZh bmNlKF9fbWlkZGxlLCBfX2hhbGYpOw0KICAgICAgICBpZiAoX192YWwgPCAqX19taWRkbGUpDQog ICAgICAgICAgX19sZW4gPSBfX2hhbGY7DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgIF9fZmly c3QgPSBfX21pZGRsZTsNCiAgICAgICAgICArK19fZmlyc3Q7DQogICAgICAgICAgX19sZW4gPSBf X2xlbiAtIF9faGFsZiAtIDE7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHJldHVybiBfX2Zp cnN0Ow0KICAgIH0NCiMgMjkwMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o IiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBl bmFtZSBfQ29tcGFyZT4NCiAgICBfRm9yd2FyZEl0ZXINCiAgICB1cHBlcl9ib3VuZChfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICBjb25z dCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBl Ow0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6 ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7DQoNCg0KICAgICANCiAgICAgDQoNCiAgICAg IF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOw0KICAgICAg X0Rpc3RhbmNlVHlwZSBfX2hhbGY7DQogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7DQoNCiAg ICAgIHdoaWxlIChfX2xlbiA+IDApIHsNCiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsNCiAg ICAgICAgX19taWRkbGUgPSBfX2ZpcnN0Ow0KICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hh bGYpOw0KICAgICAgICBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQ0KICAgICAgICAgIF9f bGVuID0gX19oYWxmOw0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRk bGU7DQogICAgICAgICAgKytfX2ZpcnN0Ow0KICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hh bGYgLSAxOw0KICAgICAgICB9DQogICAgICB9DQogICAgICByZXR1cm4gX19maXJzdDsNCiAgICB9 DQojIDI5NDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4NCiAgICBwYWlyPF9Gb3J3 YXJkSXRlciwgX0ZvcndhcmRJdGVyPg0KICAgIGVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQ0KICAgIHsNCiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5 cGUgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G b3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOw0KDQoNCg0KICAgICAN CiAgICAgDQogICAgIA0KDQogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19m aXJzdCwgX19sYXN0KTsNCiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOw0KICAgICAgX0Zvcndh cmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7DQoNCiAgICAgIHdoaWxlIChfX2xlbiA+ IDApIHsNCiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsNCiAgICAgICAgX19taWRkbGUgPSBf X2ZpcnN0Ow0KICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOw0KICAgICAgICBpZiAo Kl9fbWlkZGxlIDwgX192YWwpIHsNCiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7DQogICAg ICAgICAgKytfX2ZpcnN0Ow0KICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOw0K ICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQ0KICAgICAgICAg IF9fbGVuID0gX19oYWxmOw0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICBfX2xlZnQgPSBsb3dl cl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwpOw0KICAgICAgICAgIGFkdmFuY2UoX19m aXJzdCwgX19sZW4pOw0KICAgICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxl LCBfX2ZpcnN0LCBfX3ZhbCk7DQogICAgICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBf Rm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAg IHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0 KTsNCiAgICB9DQojIDMwMDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIg Mw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5h bWUgX0NvbXBhcmU+DQogICAgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4NCiAgICBl cXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29u c3QgX1RwJiBfX3ZhbCwNCiAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0K ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFs dWVfdHlwZSBfVmFsdWVUeXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7DQoNCg0KICAg ICANCiAgICAgDQogICAgIA0KDQogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2Uo X19maXJzdCwgX19sYXN0KTsNCiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOw0KICAgICAgX0Zv cndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7DQoNCiAgICAgIHdoaWxlIChfX2xl biA+IDApIHsNCiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsNCiAgICAgICAgX19taWRkbGUg PSBfX2ZpcnN0Ow0KICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOw0KICAgICAgICBp ZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7DQogICAgICAgICAgX19maXJzdCA9IF9fbWlk ZGxlOw0KICAgICAgICAgICsrX19maXJzdDsNCiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19o YWxmIC0gMTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoX192YWwsICpfX21p ZGRsZSkpDQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7DQogICAgICAgIGVsc2Ugew0KICAgICAg ICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCwgX19jb21w KTsNCiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsNCiAgICAgICAgICBfX3JpZ2h0 ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwsIF9fY29tcCk7DQogICAg ICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19y aWdodCk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRl ciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsNCiAgICB9DQojIDMwNTIgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4NCiAgICBib29sDQogICAgYmluYXJ5X3NlYXJjaChf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAg ICAgIGNvbnN0IF9UcCYgX192YWwpDQogICAgew0KDQoNCiAgICAgDQogICAgIA0KDQogICAgIA0K DQogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBf X3ZhbCk7DQogICAgICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhKF9fdmFsIDwgKl9faSk7DQog ICAgfQ0KIyAzMDgzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D b21wYXJlPg0KICAgIGJvb2wNCiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3Zh bCwgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCiAgICAgDQoNCg0K ICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192 YWwsIF9fY29tcCk7DQogICAgICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhX19jb21wKF9fdmFs LCAqX19pKTsNCiAgICB9DQojIDMxMTUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs Z28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0 SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPg0KICAgIF9PdXRwdXRJdGVyDQogICAgbWVyZ2Uo X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgX0lu cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQpDQogICAgew0KDQogICAgIA0KICAgICANCiAgICAgDQoNCiAgICAgDQoN Cg0KICAgICANCg0KDQogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0 MiAhPSBfX2xhc3QyKSB7DQogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsNCiAg ICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7DQogICAgICAgICAgKytfX2ZpcnN0MjsNCiAg ICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7 DQogICAgICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICAgfQ0KICAgICAgICArK19fcmVzdWx0Ow0K ICAgICAgfQ0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJz dDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7DQogICAgfQ0KIyAzMTY2ICIvdXNyL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEs IHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwNCiAgICAgICAgICAg dHlwZW5hbWUgX0NvbXBhcmU+DQogICAgX091dHB1dEl0ZXINCiAgICBtZXJnZShfSW5wdXRJdGVy MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICBfSW5wdXRJdGVyMiBf X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl c3VsdCwgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQoN CiAgICAgDQoNCiAgICAgDQoNCg0KDQogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7DQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAq X19maXJzdDEpKSB7DQogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOw0KICAgICAgICAg ICsrX19maXJzdDI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgKl9fcmVz dWx0ID0gKl9fZmlyc3QxOw0KICAgICAgICAgICsrX19maXJzdDE7DQogICAgICAgIH0NCiAgICAg ICAgKytfX3Jlc3VsdDsNCiAgICAgIH0NCiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xh c3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOw0KICAgIH0NCg0KDQoNCg0K DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlz dGFuY2U+DQogICAgdm9pZA0KICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9u YWxJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19taWRkbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVu MSwgX0Rpc3RhbmNlIF9fbGVuMikNCiAgICB7DQogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19s ZW4yID09IDApDQogICAgICAgIHJldHVybjsNCiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0g Mikgew0KICAgICAgICBpZiAoKl9fbWlkZGxlIDwgKl9fZmlyc3QpDQogICAgICAgICAgICAgIGl0 ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7DQogICAgICAgIHJldHVybjsNCiAgICAgIH0NCiAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7DQogICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7DQogICAgICBfRGlzdGFuY2Ug X19sZW4xMSA9IDA7DQogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7DQogICAgICBpZiAoX19s ZW4xID4gX19sZW4yKSB7DQogICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOw0KICAgICAgICBh ZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsNCiAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93 ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsNCiAgICAgICAgX19sZW4y MiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOw0KICAgICAgfQ0KICAgICAgZWxz ZSB7DQogICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOw0KICAgICAgICBhZHZhbmNlKF9fc2Vj b25kX2N1dCwgX19sZW4yMik7DQogICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19m aXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOw0KICAgICAgICBfX2xlbjExID0gZGlzdGFu Y2UoX19maXJzdCwgX19maXJzdF9jdXQpOw0KICAgICAgfQ0KICAgICAgcm90YXRlKF9fZmlyc3Rf Y3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsNCiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsNCiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBk aXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KSk7DQogICAgICBfX21lcmdlX3dpdGhvdXRf YnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIpOw0KICAgICAgX19tZXJnZV93aXRob3V0 X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIgLSBfX2xlbjIyKTsNCiAg ICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwg dHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICB2b2lkDQogICAgX19t ZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAgIGlm IChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkNCiAgICAgICAgcmV0dXJuOw0KICAgICAgaWYg KF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7DQogICAgICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCAq X19maXJzdCkpDQogICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7DQog ICAgICAgIHJldHVybjsNCiAgICAgIH0NCiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0 X2N1dCA9IF9fZmlyc3Q7DQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0g X19taWRkbGU7DQogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7DQogICAgICBfRGlzdGFuY2Ug X19sZW4yMiA9IDA7DQogICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7DQogICAgICAgIF9fbGVu MTEgPSBfX2xlbjEgLyAyOw0KICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsN CiAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9f Zmlyc3RfY3V0LCBfX2NvbXApOw0KICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUs IF9fc2Vjb25kX2N1dCk7DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAgICAgX19sZW4yMiA9 IF9fbGVuMiAvIDI7DQogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsNCiAg ICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vj b25kX2N1dCwgX19jb21wKTsNCiAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9f Zmlyc3RfY3V0KTsNCiAgICAgIH0NCiAgICAgIHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUs IF9fc2Vjb25kX2N1dCk7DQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0g X19maXJzdF9jdXQ7DQogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFuY2UoX19taWRk bGUsIF9fc2Vjb25kX2N1dCkpOw0KICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0 LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2xlbjExLCBfX2xlbjIyLCBfX2NvbXApOw0KICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZl cihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIgLSBfX2xlbjIyLCBfX2NvbXApOw0K ICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy MSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwNCiAgICAgICAgICAgdHlwZW5hbWUgX0Rp c3RhbmNlPg0KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjENCiAgICBfX3JvdGF0ZV9hZGFwdGl2ZShf QmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyMSBfX21pZGRsZSwNCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIxIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4x LCBfRGlzdGFuY2UgX19sZW4yLA0KICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlcjIgX19idWZmZXIsDQogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVy X3NpemUpDQogICAgew0KICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlcl9lbmQ7DQog ICAgICBpZiAoX19sZW4xID4gX19sZW4yICYmIF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7DQog ICAgICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOw0K ICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOw0KICAgICAg ICByZXR1cm4gY29weShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2ZpcnN0KTsNCiAgICAgIH0N CiAgICAgIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7DQogICAgICAgIF9fYnVm ZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsNCiAgICAgICAgY29w eShfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsNCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dh cmQoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsNCiAgICAgIH0NCiAgICAgIGVsc2Ug ew0KICAgICAgICByb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7DQogICAgICAgIGFk dmFuY2UoX19maXJzdCwgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCkpOw0KICAgICAgICByZXR1 cm4gX19maXJzdDsNCiAgICAgIH0NCiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsDQog ICAgICAgICAgIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjM+DQogICAgX0JpZGlyZWN0aW9u YWxJdGVyMw0KICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0 MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLA0K ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCkNCiAgICB7 DQogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkNCiAgICAgICAgcmV0dXJuIGNvcHlfYmFj a3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsNCiAgICAgIGlmIChfX2ZpcnN0MiA9 PSBfX2xhc3QyKQ0KICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0 MSwgX19yZXN1bHQpOw0KICAgICAgLS1fX2xhc3QxOw0KICAgICAgLS1fX2xhc3QyOw0KICAgICAg d2hpbGUgKHRydWUpIHsNCiAgICAgICAgaWYgKCpfX2xhc3QyIDwgKl9fbGFzdDEpIHsNCiAgICAg ICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOw0KICAgICAgICAgIGlmIChfX2ZpcnN0MSA9PSBf X2xhc3QxKQ0KICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19s YXN0MiwgX19yZXN1bHQpOw0KICAgICAgICAgIC0tX19sYXN0MTsNCiAgICAgICAgfQ0KICAgICAg ICBlbHNlIHsNCiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOw0KICAgICAgICAgIGlm IChfX2ZpcnN0MiA9PSBfX2xhc3QyKQ0KICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQo X19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOw0KICAgICAgICAgIC0tX19sYXN0MjsNCiAg ICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwNCiAgICAg ICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMywgdHlwZW5hbWUgX0NvbXBhcmU+DQog ICAgX0JpZGlyZWN0aW9uYWxJdGVyMw0KICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9u YWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLA0KICAgICAgICAg ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJ dGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBf X3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQog ICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkNCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dh cmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsNCiAgICAgIGlmIChfX2ZpcnN0MiA9PSBf X2xhc3QyKQ0KICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwg X19yZXN1bHQpOw0KICAgICAgLS1fX2xhc3QxOw0KICAgICAgLS1fX2xhc3QyOw0KICAgICAgd2hp bGUgKHRydWUpIHsNCiAgICAgICAgaWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKSB7DQog ICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsNCiAgICAgICAgICBpZiAoX19maXJzdDEg PT0gX19sYXN0MSkNCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCAr K19fbGFzdDIsIF9fcmVzdWx0KTsNCiAgICAgICAgICAtLV9fbGFzdDE7DQogICAgICAgIH0NCiAg ICAgICAgZWxzZSB7DQogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsNCiAgICAgICAg ICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikNCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3 YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsNCiAgICAgICAgICAtLV9fbGFzdDI7 DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9p bnRlcj4NCiAgICB2b2lkDQogICAgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIg X19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRs ZSwNCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQogICAg ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLA0KICAg ICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9z aXplKQ0KICAgIHsNCiAgICAgICAgICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0g X19idWZmZXJfc2l6ZSkgew0KICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29w eShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOw0KICAgICAgICAgICAgbWVyZ2UoX19idWZm ZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7DQogICAgICAgICAg fQ0KICAgICAgICAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7DQogICAgICAg ICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVm ZmVyKTsNCiAgICAgICAgICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9f YnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVs c2Ugew0KICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJz dDsNCiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRs ZTsNCiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsNCiAgICAgICAgICAgIF9EaXN0 YW5jZSBfX2xlbjIyID0gMDsNCiAgICAgICAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsNCiAg ICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOw0KICAgICAgICAgICAgICAgICAg YWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7DQogICAgICAgICAgICAgICAgICBfX3NlY29u ZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOw0KICAg ICAgICAgICAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQp Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICBf X2xlbjIyID0gX19sZW4yIC8gMjsNCiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19zZWNvbmRf Y3V0LCBfX2xlbjIyKTsNCiAgICAgICAgICAgICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91 bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOw0KICAgICAgICAgICAgICAgICAg X19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsNCiAgICAgICAgICAgIH0N CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQ0KICAgICAgICAg ICAgICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29u ZF9jdXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xl bjExLCBfX2xlbjIyLCBfX2J1ZmZlciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fYnVmZmVyX3NpemUpOw0KICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0 LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7DQogICAgICAgICAg ICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9f bGVuMSAtIF9fbGVuMTEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9f bGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsNCiAgICAgICAgICB9DQogICAgfQ0KDQoN Cg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1l IF9EaXN0YW5jZSwgdHlwZW5hbWUgX1BvaW50ZXIsDQogICAgICAgICAgIHR5cGVuYW1lIF9Db21w YXJlPg0KICAgIHZvaWQNCiAgICBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBf X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxl LA0KICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwNCiAgICAg ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsDQogICAg ICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3Np emUsDQogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAg ICAgIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7DQog ICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxl LCBfX2J1ZmZlcik7DQogICAgICAgICAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBf X21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXApOw0KICAgICAgICAgIH0NCiAgICAgICAg ICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgew0KICAgICAgICAgICAgX1BvaW50 ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7DQogICAg ICAgICAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19i dWZmZXJfZW5kLCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbXApOw0KICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIHsNCiAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7DQogICAgICAgICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7DQogICAgICAgICAg ICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7DQogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9 IDA7DQogICAgICAgICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7DQogICAgICAgICAgICAgICAg ICBfX2xlbjExID0gX19sZW4xIC8gMjsNCiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJz dF9jdXQsIF9fbGVuMTEpOw0KICAgICAgICAgICAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJf Ym91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOw0KICAgICAgICAg ICAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOw0KICAg ICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICBfX2xlbjIy ID0gX19sZW4yIC8gMjsNCiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBf X2xlbjIyKTsNCiAgICAgICAgICAgICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19m aXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7DQogICAgICAgICAgICAgICAg ICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOw0KICAgICAgICAgICAg fQ0KICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9DQogICAgICAg ICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vj b25kX2N1dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9f bGVuMTEsIF9fbGVuMjIsIF9fYnVmZmVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19idWZmZXJfc2l6ZSk7DQogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmly c3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOw0K ICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwg X19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsNCiAgICAg ICAgICB9DQogICAgfQ0KIyAzNTA4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv LmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPg0KICAgIHZvaWQN CiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAgICAgICAg ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBlDQogICAgICAg ICAgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9C aWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQ0KICAgICAgICAgIF9EaXN0YW5jZVR5 cGU7DQoNCg0KICAgICANCg0KICAgICANCg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUg fHwgX19taWRkbGUgPT0gX19sYXN0KQ0KICAgICAgICByZXR1cm47DQoNCiAgICAgIF9EaXN0YW5j ZVR5cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOw0KICAgICAgX0Rpc3Rh bmNlVHlwZSBfX2xlbjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsNCg0KICAgICAgX1Rl bXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2Zp cnN0LCBfX2xhc3QpOw0KICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkNCiAgICAgICAgX19t ZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9f bGVuMik7DQogICAgICBlbHNlDQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19t aWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsDQogICAgICAgICAgICAgICAgICAgICAgICAg X19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpKTsNCiAgICB9DQojIDM1 NTkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIHZvaWQN CiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAgICAgICAg ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f Y29tcCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlk aXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBlDQogICAgICAgICAgX1ZhbHVlVHlwZTsNCiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OmRp ZmZlcmVuY2VfdHlwZQ0KICAgICAgICAgIF9EaXN0YW5jZVR5cGU7DQoNCg0KICAgICANCg0KICAg ICANCg0KDQogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xh c3QpDQogICAgICAgIHJldHVybjsNCg0KICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjEgPSBkaXN0 YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7DQogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9IGRp c3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOw0KDQogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlk aXJlY3Rpb25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7DQogICAg ICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQ0KICAgICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVy KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2NvbXApOw0KICAg ICAgZWxzZQ0KICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xh c3QsIF9fbGVuMSwgX19sZW4yLA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2lu KCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSwNCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbXApOw0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPg0KICAgIGJvb2wNCiAgICBpbmNsdWRlcyhfSW5w dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICBfSW5w dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikNCiAgICB7DQoNCiAgICAgDQog ICAgIA0KICAgICANCg0KDQogICAgIA0KDQoNCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpDQogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19m aXJzdDEpDQogICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICBlbHNlIGlmKCpfX2ZpcnN0 MSA8ICpfX2ZpcnN0MikNCiAgICAgICAgICArK19fZmlyc3QxOw0KICAgICAgICBlbHNlDQogICAg ICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsNCg0KICAgICAgcmV0dXJuIF9fZmlyc3QyID09 IF9fbGFzdDI7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBl bmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAgYm9vbA0KICAgIGluY2x1 ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAg ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLCBfQ29tcGFyZSBf X2NvbXApDQogICAgew0KDQogICAgIA0KICAgICANCiAgICAgDQoNCg0KICAgICANCg0KDQoNCiAg ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpDQog ICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQ0KICAgICAgICAgIHJldHVy biBmYWxzZTsNCiAgICAgICAgZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQ0K ICAgICAgICAgICsrX19maXJzdDE7DQogICAgICAgIGVsc2UNCiAgICAgICAgICArK19fZmlyc3Qx LCArK19fZmlyc3QyOw0KDQogICAgICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsNCiAgICB9 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIy LCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4NCiAgICBfT3V0cHV0SXRlcg0KICAgIHNldF91bmlvbihf SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAg X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAg IF9PdXRwdXRJdGVyIF9fcmVzdWx0KQ0KICAgIHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQog ICAgIA0KDQoNCiAgICAgDQoNCg0KICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg X19maXJzdDIgIT0gX19sYXN0Mikgew0KICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3Qy KSB7DQogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0KICAgICAgICAgICsrX19maXJz dDE7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7 DQogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOw0KICAgICAgICAgICsrX19maXJzdDI7 DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmly c3QxOw0KICAgICAgICAgICsrX19maXJzdDE7DQogICAgICAgICAgKytfX2ZpcnN0MjsNCiAgICAg ICAgfQ0KICAgICAgICArK19fcmVzdWx0Ow0KICAgICAgfQ0KICAgICAgcmV0dXJuIGNvcHkoX19m aXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7DQogICAg fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVy MiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsDQogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPg0K ICAgIF9PdXRwdXRJdGVyDQogICAgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w dXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu cHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9D b21wYXJlIF9fY29tcCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KICAgICANCg0KDQogICAgIA0K DQogICAgIA0KDQoNCg0KICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz dDIgIT0gX19sYXN0Mikgew0KICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3Qy KSkgew0KICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICAgICArK19fZmly c3QxOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2Zp cnN0MSkpIHsNCiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7DQogICAgICAgICAgKytf X2ZpcnN0MjsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAqX19yZXN1bHQg PSAqX19maXJzdDE7DQogICAgICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICAgICArK19fZmlyc3Qy Ow0KICAgICAgICB9DQogICAgICAgICsrX19yZXN1bHQ7DQogICAgICB9DQogICAgICByZXR1cm4g Y29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQp KTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9J bnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4NCiAgICBfT3V0cHV0SXRlcg0KICAgIHNl dF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs DQogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIg X19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQ0KICAg IHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQogICAgIA0KDQoNCiAgICAgDQoNCg0KICAgICAg d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICAg ICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikNCiAgICAgICAgICArK19fZmlyc3QxOw0KICAg ICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpDQogICAgICAgICAgKytfX2ZpcnN0 MjsNCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0KICAg ICAgICAgICsrX19maXJzdDE7DQogICAgICAgICAgKytfX2ZpcnN0MjsNCiAgICAgICAgICArK19f cmVzdWx0Ow0KICAgICAgICB9DQogICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5h bWUgX091dHB1dEl0ZXIsDQogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIF9PdXRw dXRJdGVyDQogICAgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0 SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy LCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KICAgICAN Cg0KDQogICAgIA0KDQogICAgIA0KDQoNCg0KICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEs ICpfX2ZpcnN0MikpDQogICAgICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICAgZWxzZSBpZiAoX19j b21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkNCiAgICAgICAgICArK19fZmlyc3QyOw0KICAgICAg ICBlbHNlIHsNCiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7DQogICAgICAgICAgKytf X2ZpcnN0MTsNCiAgICAgICAgICArK19fZmlyc3QyOw0KICAgICAgICAgICsrX19yZXN1bHQ7DQog ICAgICAgIH0NCiAgICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0 SXRlcj4NCiAgICBfT3V0cHV0SXRlcg0KICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9f Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0 ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0KQ0KICAgIHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQogICAg IA0KDQoNCiAgICAgDQoNCg0KICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m aXJzdDIgIT0gX19sYXN0MikNCiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0Mikgew0K ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICAgICArK19fZmlyc3QxOw0K ICAgICAgICAgICsrX19yZXN1bHQ7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAoKl9fZmly c3QyIDwgKl9fZmlyc3QxKQ0KICAgICAgICAgICsrX19maXJzdDI7DQogICAgICAgIGVsc2Ugew0K ICAgICAgICAgICsrX19maXJzdDE7DQogICAgICAgICAgKytfX2ZpcnN0MjsNCiAgICAgICAgfQ0K ICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsNCiAgICB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0 eXBlbmFtZSBfT3V0cHV0SXRlciwNCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAg X091dHB1dEl0ZXINCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu cHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0 MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQogICAgIA0K DQoNCiAgICAgDQoNCiAgICAgDQoNCg0KDQogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0 MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0KICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwg Kl9fZmlyc3QyKSkgew0KICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICAg ICArK19fZmlyc3QxOw0KICAgICAgICAgICsrX19yZXN1bHQ7DQogICAgICAgIH0NCiAgICAgICAg ZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkNCiAgICAgICAgICArK19fZmly c3QyOw0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICArK19fZmlyc3QxOw0KICAgICAgICAgICsr X19maXJzdDI7DQogICAgICAgIH0NCiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3Qx LCBfX3Jlc3VsdCk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0 eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQogICAgX091dHB1dEl0 ZXINCiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J bnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0 ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KICAg ICANCg0KICAgICANCg0KDQogICAgIA0KDQoNCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpDQogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19m aXJzdDIpIHsNCiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7DQogICAgICAgICAgKytf X2ZpcnN0MTsNCiAgICAgICAgICArK19fcmVzdWx0Ow0KICAgICAgICB9DQogICAgICAgIGVsc2Ug aWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgew0KICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp cnN0MjsNCiAgICAgICAgICArK19fZmlyc3QyOw0KICAgICAgICAgICsrX19yZXN1bHQ7DQogICAg ICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICAgICAr K19fZmlyc3QyOw0KICAgICAgICB9DQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0 MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsNCiAgICB9DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBf T3V0cHV0SXRlciwNCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAgX091dHB1dEl0 ZXINCiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J bnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0 ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQoNCiAg ICAgDQoNCiAgICAgDQoNCg0KDQogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBf X2ZpcnN0MiAhPSBfX2xhc3QyKQ0KICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmly c3QyKSkgew0KICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICAgICArK19f Zmlyc3QxOw0KICAgICAgICAgICsrX19yZXN1bHQ7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBp ZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgew0KICAgICAgICAgICpfX3Jlc3VsdCA9 ICpfX2ZpcnN0MjsNCiAgICAgICAgICArK19fZmlyc3QyOw0KICAgICAgICAgICsrX19yZXN1bHQ7 DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgKytfX2ZpcnN0MTsNCiAgICAg ICAgICArK19fZmlyc3QyOw0KICAgICAgICB9DQogICAgICByZXR1cm4gY29weShfX2ZpcnN0Miwg X19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsNCiAgICB9DQoNCg0K DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPg0KICAgIF9Gb3J3YXJkSXRlcg0K ICAgIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 KQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0 KSByZXR1cm4gX19maXJzdDsNCiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7 DQogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkNCiAgICAgICAgaWYgKCpfX3Jlc3Vs dCA8ICpfX2ZpcnN0KQ0KICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsNCiAgICAgIHJldHVy biBfX3Jlc3VsdDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0 eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBfRm9yd2FyZEl0ZXINCiAgICBtYXhfZWxlbWVudChfRm9y d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICBf Q29tcGFyZSBfX2NvbXApDQogICAgew0KDQogICAgIA0KICAgICANCg0KDQoNCiAgICAgIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7DQogICAgICBfRm9yd2FyZEl0ZXIgX19y ZXN1bHQgPSBfX2ZpcnN0Ow0KICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAg ICAgIGlmIChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsN CiAgICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyPg0KICAgIF9Gb3J3YXJkSXRlcg0KICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoN Cg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsNCiAgICAgIF9G b3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7DQogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9 IF9fbGFzdCkNCiAgICAgICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0KQ0KICAgICAgICAgIF9f cmVzdWx0ID0gX19maXJzdDsNCiAgICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgICB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBfRm9y d2FyZEl0ZXINCiAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KDQog ICAgIA0KICAgICANCg0KDQoNCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9f Zmlyc3Q7DQogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0Ow0KICAgICAgd2hp bGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpf X3Jlc3VsdCkpDQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0Ow0KICAgICAgcmV0dXJuIF9f cmVzdWx0Ow0KICAgIH0NCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXI+DQogICAgYm9vbA0KICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVy IF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpDQogICAgew0KDQogICAgIA0KICAg ICANCg0KDQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgICAgIHJldHVybiBmYWxz ZTsNCiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0Ow0KICAgICAgKytfX2k7 DQogICAgICBpZiAoX19pID09IF9fbGFzdCkNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAg X19pID0gX19sYXN0Ow0KICAgICAgLS1fX2k7DQoNCiAgICAgIGZvcig7Oykgew0KICAgICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsNCiAgICAgICAgLS1fX2k7DQogICAgICAgIGlm ICgqX19pIDwgKl9faWkpIHsNCiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19s YXN0Ow0KICAgICAgICAgIHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQ0KICAgICAgICAgICAge30N CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOw0KICAgICAgICAgIHJldmVyc2UoX19paSwg X19sYXN0KTsNCiAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAo X19pID09IF9fZmlyc3QpIHsNCiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7DQog ICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+DQog ICAgYm9vbA0KICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBfQ29tcGFy ZSBfX2NvbXApDQogICAgew0KDQogICAgIA0KICAgICANCg0KDQoNCiAgICAgIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCkNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9faSA9IF9fZmlyc3Q7DQogICAgICArK19faTsNCiAgICAgIGlmIChfX2kgPT0gX19sYXN0 KQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICBfX2kgPSBfX2xhc3Q7DQogICAgICAtLV9f aTsNCg0KICAgICAgZm9yKDs7KSB7DQogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0g X19pOw0KICAgICAgICAtLV9faTsNCiAgICAgICAgaWYgKF9fY29tcCgqX19pLCAqX19paSkpIHsN CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0Ow0KICAgICAgICAgIHdo aWxlICghX19jb21wKCpfX2ksICotLV9faikpDQogICAgICAgICAgICB7fQ0KICAgICAgICAgIGl0 ZXJfc3dhcChfX2ksIF9faik7DQogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOw0KICAg ICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICAgIGlmIChfX2kgPT0gX19maXJz dCkgew0KICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsNCiAgICAgICAgICByZXR1 cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0JpZGlyZWN0aW9uYWxJdGVyPg0KICAgIGJvb2wNCiAgICBwcmV2X3Blcm11dGF0aW9uKF9C aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQ0KICAg IHsNCg0KICAgICANCiAgICAgDQoNCg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAg ICAgICByZXR1cm4gZmFsc2U7DQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJz dDsNCiAgICAgICsrX19pOw0KICAgICAgaWYgKF9faSA9PSBfX2xhc3QpDQogICAgICAgIHJldHVy biBmYWxzZTsNCiAgICAgIF9faSA9IF9fbGFzdDsNCiAgICAgIC0tX19pOw0KDQogICAgICBmb3Io OzspIHsNCiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7DQogICAgICAgIC0t X19pOw0KICAgICAgICBpZiAoKl9faWkgPCAqX19pKSB7DQogICAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9faiA9IF9fbGFzdDsNCiAgICAgICAgICB3aGlsZSAoISgqLS1fX2ogPCAqX19pKSkN CiAgICAgICAgICAgIHt9DQogICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsNCiAgICAgICAg ICByZXZlcnNlKF9faWksIF9fbGFzdCk7DQogICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAg IH0NCiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7DQogICAgICAgICAgcmV2ZXJzZShfX2Zp cnN0LCBfX2xhc3QpOw0KICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAg fQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVu YW1lIF9Db21wYXJlPg0KICAgIGJvb2wNCiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlv bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAg ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCg0KDQog ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0Ow0KICAgICAgKytfX2k7DQogICAgICBp ZiAoX19pID09IF9fbGFzdCkNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgX19pID0gX19s YXN0Ow0KICAgICAgLS1fX2k7DQoNCiAgICAgIGZvcig7Oykgew0KICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIgX19paSA9IF9faTsNCiAgICAgICAgLS1fX2k7DQogICAgICAgIGlmIChfX2NvbXAo Kl9faWksICpfX2kpKSB7DQogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFz dDsNCiAgICAgICAgICB3aGlsZSAoIV9fY29tcCgqLS1fX2osICpfX2kpKQ0KICAgICAgICAgICAg e30NCiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOw0KICAgICAgICAgIHJldmVyc2UoX19p aSwgX19sYXN0KTsNCiAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICBp ZiAoX19pID09IF9fZmlyc3QpIHsNCiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7 DQogICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KDQoN Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+ DQogICAgX0lucHV0SXRlcg0KICAgIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwg X0lucHV0SXRlciBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmly c3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MikNCiAgICB7DQoNCiAgICAgDQogICAgIA0KICAgICAN Cg0KDQoNCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkNCiAg ICAgICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xh c3QyOyArK19faXRlcikNCiAgICAgICAgICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIpDQogICAg ICAgICAgICByZXR1cm4gX19maXJzdDE7DQogICAgICByZXR1cm4gX19sYXN0MTsNCiAgICB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0 eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPg0KICAgIF9JbnB1dEl0ZXINCiAgICBmaW5kX2ZpcnN0 X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwNCiAgICAgICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsDQogICAg ICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkNCiAgICB7DQoNCiAgICAgDQog ICAgIA0KICAgICANCg0KDQogICAgIA0KDQoNCg0KICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBf X2xhc3QxOyArK19fZmlyc3QxKQ0KICAgICAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBf X2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQ0KICAgICAgICAgIGlmIChfX2Nv bXAoKl9fZmlyc3QxLCAqX19pdGVyKSkNCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsNCiAg ICAgIHJldHVybiBfX2xhc3QxOw0KICAgIH0NCiMgNDIwMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5 cGVuYW1lIF9Gb3J3YXJkSXRlcjI+DQogICAgX0ZvcndhcmRJdGVyMQ0KICAgIF9fZmluZF9lbmQo X0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAg ICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLA0KICAg ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQ0K ICAgIHsNCiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQ0KICAgICAgICByZXR1cm4gX19s YXN0MTsNCiAgICAgIGVsc2Ugew0KICAgICAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19s YXN0MTsNCiAgICAgICAgd2hpbGUgKDEpIHsNCiAgICAgICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3 X3Jlc3VsdA0KICAgICAgICAgICAgPSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3Qy LCBfX2xhc3QyKTsNCiAgICAgICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpDQogICAg ICAgICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBf X3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsNCiAgICAgICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVz dWx0Ow0KICAgICAgICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAg ICAgIH0NCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5h bWUgX0ZvcndhcmRJdGVyMiwNCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4N CiAgICBfRm9yd2FyZEl0ZXIxDQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3Qx LCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9f Zmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICBmb3J3YXJkX2l0 ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcsDQogICAgICAgICAgICAgICBfQmluYXJ5 UHJlZGljYXRlIF9fY29tcCkNCiAgICB7DQogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikN CiAgICAgICAgcmV0dXJuIF9fbGFzdDE7DQogICAgICBlbHNlIHsNCiAgICAgICAgX0ZvcndhcmRJ dGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7DQogICAgICAgIHdoaWxlICgxKSB7DQogICAgICAgICAg X0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQNCiAgICAgICAgICAgID0gc2VhcmNoKF9fZmlyc3Qx LCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsNCiAgICAgICAgICBpZiAoX19u ZXdfcmVzdWx0ID09IF9fbGFzdDEpDQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAg ICAgICAgZWxzZSB7DQogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsNCiAgICAg ICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0Ow0KICAgICAgICAgICAgKytfX2ZpcnN0MTsN CiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIy Pg0KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjENCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFs SXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19s YXN0MiwNCiAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVj dGlvbmFsX2l0ZXJhdG9yX3RhZykNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQogICAgICB0eXBl ZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOw0KICAg ICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVy MjsNCg0KICAgICAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsNCiAgICAgIF9SZXZJdGVy MiBfX3JsYXN0MihfX2ZpcnN0Mik7DQogICAgICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNo KF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIpOw0KDQogICAgICBpZiAoX19y cmVzdWx0ID09IF9fcmxhc3QxKQ0KICAgICAgICByZXR1cm4gX19sYXN0MTsNCiAgICAgIGVsc2Ug ew0KICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2Uo KTsNCiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3Qy KSk7DQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgICAgIH0NCiAgICB9DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJ dGVyMiwNCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4NCiAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIxDQogICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3Qx LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsDQogICAgICAg ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRv cl90YWcsDQogICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkNCiAgICB7DQoN CiAgICAgDQogICAgIA0KDQogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0 aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOw0KICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9C aWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsNCg0KICAgICAgX1Jldkl0ZXIxIF9fcmxhc3Qx KF9fZmlyc3QxKTsNCiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7DQogICAgICBf UmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwg X19ybGFzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQoN CiAgICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpDQogICAgICAgIHJldHVybiBfX2xhc3Qx Ow0KICAgICAgZWxzZSB7DQogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBf X3JyZXN1bHQuYmFzZSgpOw0KICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19m aXJzdDIsIF9fbGFzdDIpKTsNCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0Ow0KICAgICAgfQ0KICAg IH0NCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0Zv cndhcmRJdGVyMj4NCiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyMQ0KICAgIGZpbmRfZW5kKF9Gb3J3 YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICBf Rm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpDQogICAgew0KDQog ICAgIA0KICAgICANCiAgICAgDQoNCg0KDQogICAgICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0 MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICBf X2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIF9f aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwNCiAgICAgICAgICAgdHlw ZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4NCiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyMQ0KICAgIGZp bmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwNCiAg ICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIs DQogICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApDQogICAgew0KDQogICAgIA0K ICAgICANCiAgICAgDQoNCg0KDQogICAgICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19s YXN0MSwgX19maXJzdDIsIF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh dG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0 b3JfY2F0ZWdvcnkoX19maXJzdDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsN CiAgICB9DQoNCn0NCiMgNzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2FsZ29yaXRobSIgMiAzDQoj IDU3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDEgMw0KIyA0NSAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ DQogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 DQogICAgX1JlcDo6X1NfbWF4X3NpemUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2Yo X0NoYXJUKSkgLSAxKSAvIDQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgY29uc3QgX0NoYXJUDQogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgX1JlcDo6X1NfdGVybWluYWwg PSBfQ2hhclQoKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBjb25zdCB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjpucG9zOw0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB0eXBlbmFtZSBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfU19lbXB0eV9yZXBfc3RvcmFnZVsNCiAg ICAoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEp L3NpemVvZihzaXplX3R5cGUpXTsNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9Jbkl0ZXI+DQogICAgICBfQ2hhclQqDQogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoNCiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5J dGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwNCiAgICAgICAgICAgICAgICAgICBpbnB1dF9p dGVyYXRvcl90YWcpDQogICAgICB7DQogICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2Eg PT0gX0FsbG9jKCkpDQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHko KTsNCg0KICAgICAgICBfQ2hhclQgX19idWZbMTAwXTsNCiAgICAgICAgc2l6ZV90eXBlIF9faSA9 IDA7DQogICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBzaXplb2YoX19idWYp IC8gc2l6ZW9mKF9DaGFyVCkpDQogICAgICAgICAgew0KICAgICAgICAgICAgX19idWZbX19pKytd ID0gKl9fYmVnOw0KICAgICAgICAgICAgKytfX2JlZzsNCiAgICAgICAgICB9DQogICAgICAgIF9S ZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2ksIF9fYSk7DQogICAgICAgIHRyYWl0c190eXBl Ojpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsNCiAgICAgICAgX19yLT5fTV9s ZW5ndGggPSBfX2k7DQogICAgICAgIHRyeQ0KICAgICAgICAgIHsNCg0KDQoNCiAgICAgICAgICAg IGZvciAoOzspDQogICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fcCA9 IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9sZW5ndGg7DQogICAgICAgICAgICAgICAgX0No YXJUKiBfX2xhc3QgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fY2FwYWNpdHk7DQogICAg ICAgICAgICAgICAgZm9yICg7OykNCiAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg ICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQ0KICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19wIC0gX19yLT5fTV9yZWZkYXRh KCk7DQogICAgICAgICAgICAgICAgICAgICAgICAqX19wID0gX1JlcDo6X1NfdGVybWluYWw7DQog ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7DQogICAgICAg ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoX19wID09IF9fbGFzdCkN CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgKl9fcCsr ID0gKl9fYmVnOw0KICAgICAgICAgICAgICAgICAgICArK19fYmVnOw0KICAgICAgICAgICAgICAg ICAgfQ0KDQogICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19wIC0gX19yLT5fTV9y ZWZkYXRhKCk7DQogICAgICAgICAgICAgICAgX1JlcCogX19hbm90aGVyID0gX1JlcDo6X1NfY3Jl YXRlKF9fbGVuICsgMSwgX19hKTsNCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShf X2Fub3RoZXItPl9NX3JlZmRhdGEoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3ItPl9NX3JlZmRhdGEoKSwgX19sZW4pOw0KICAgICAgICAgICAgICAgIF9fci0+X01fZGVz dHJveShfX2EpOw0KICAgICAgICAgICAgICAgIF9fciA9IF9fYW5vdGhlcjsNCiAgICAgICAgICAg ICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fbGVuOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAg fQ0KICAgICAgICBjYXRjaCguLi4pDQogICAgICAgICAgew0KICAgICAgICAgICAgX19yLT5fTV9k ZXN0cm95KF9fYSk7DQogICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICB9DQogICAgICAgIHJl dHVybiAwOw0KICAgICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5JdGVyPg0K ICAgICAgX0NoYXJUKg0KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6DQogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29u c3QgX0FsbG9jJiBfX2EsDQogICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcp DQogICAgICB7DQogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5 cGU+KGRpc3RhbmNlKF9fYmVnLCBfX2VuZCkpOw0KDQoNCiAgICAgICAgaWYgKF9fYnVpbHRpbl9l eHBlY3QoX19iZWcgPT0gX0luSXRlcigpLCAwKSkNCiAgICAgICAgICBfX3Rocm93X2xvZ2ljX2Vy cm9yKCJhdHRlbXB0IHRvIGNyZWF0ZSBzdHJpbmcgd2l0aCBudWxsIHBvaW50ZXIiKTsNCg0KICAg ICAgICBpZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQ0KICAgICAgICAgIHJl dHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7DQoNCg0KICAgICAgICBfUmVwKiBfX3Ig PSBfUmVwOjpfU19jcmVhdGUoX19kbmV3LCBfX2EpOw0KICAgICAgICB0cnkNCiAgICAgICAgICB7 IF9TX2NvcHlfY2hhcnMoX19yLT5fTV9yZWZkYXRhKCksIF9fYmVnLCBfX2VuZCk7IH0NCiAgICAg ICAgY2F0Y2goLi4uKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShf X2EpOw0KICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgfQ0KICAgICAgICBfX3ItPl9NX2xl bmd0aCA9IF9fZG5ldzsNCg0KICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX2RuZXddID0gX1Jl cDo6X1NfdGVybWluYWw7DQogICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsNCiAgICAg IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4NCiAgICBfQ2hhclQqDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6DQogICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2Ms IGNvbnN0IF9BbGxvYyYgX19hKQ0KICAgIHsNCiAgICAgIGlmIChfX24gPT0gMCAmJiBfX2EgPT0g X0FsbG9jKCkpDQogICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7DQoN Cg0KICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbiwgX19hKTsNCiAgICAgIHRy eQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKF9fbikNCiAgICAgICAgICAgIHRyYWl0c190eXBl Ojphc3NpZ24oX19yLT5fTV9yZWZkYXRhKCksIF9fbiwgX19jKTsNCiAgICAgICAgfQ0KICAgICAg Y2F0Y2goLi4uKQ0KICAgICAgICB7DQogICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7DQog ICAgICAgICAgdGhyb3c7DQogICAgICAgIH0NCiAgICAgIF9fci0+X01fbGVuZ3RoID0gX19uOw0K ICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19uXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOw0KICAgICAg cmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0cikNCiAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3JlcCgpLT5fTV9n cmFiKF9BbGxvYygpLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLA0KICAgICAgICAgICAgICAgICBf X3N0ci5nZXRfYWxsb2NhdG9yKCkpDQogICAgeyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxv YyYgX19hKQ0KICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNpemVfdHlwZSgpLCBfQ2hh clQoKSwgX19hKSwgX19hKQ0KICAgIHsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJp bmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pDQogICAgOiBfTV9kYXRh cGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9BbGxvYygpKSwgX0Fs bG9jKCkpDQogICAgeyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6DQogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs IHNpemVfdHlwZSBfX3BvcywNCiAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3Qg X0FsbG9jJiBfX2EpDQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hl Y2soX19wb3MpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQo X19wb3MsIF9fbiksIF9fYSksIF9fYSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0No YXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQ0KICAgIDogX01fZGF0 YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19zICsgX19uLCBfX2EpLCBfX2EpDQogICAgeyB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAg YmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSkNCiAgICA6 IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyA/IF9fcyArIHRyYWl0c190eXBlOjps ZW5ndGgoX19zKSA6IDAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hKSwgX19h KQ0KICAgIHsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46Og0KICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25z dCBfQWxsb2MmIF9fYSkNCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX24sIF9fYywg X19hKSwgX19hKQ0KICAgIHsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXI+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAg YmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXIgX19iZWcsIF9JbnB1dEl0ZXIgX19lbmQsIGNvbnN0IF9B bGxvYyYgX19hKQ0KICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwg X19hKSwgX19hKQ0KICAgIHsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6YXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpDQogICAgew0KICAgICAgaWYgKF9N X3JlcCgpICE9IF9fc3RyLl9NX3JlcCgpKQ0KICAgICAgICB7DQoNCiAgICAgICAgICBhbGxvY2F0 b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7DQogICAgICAgICAgX0NoYXJUKiBf X3RtcCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9fYSwgX19zdHIuZ2V0X2FsbG9jYXRvcigp KTsNCiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOw0KICAgICAgICAgIF9NX2Rh dGEoX190bXApOw0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j Pg0KICAgIHZvaWQNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpf UmVwOjoNCiAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYgX19hKSB0aHJvdyAoKQ0KICAgIHsN CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkgKyAoX01fY2FwYWNpdHkgKyAx KSAqIHNpemVvZihfQ2hhclQpOw0KICAgICAgX1Jhd19ieXRlc19hbGxvYyhfX2EpLmRlYWxsb2Nh dGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyksIF9fc2l6ZSk7DQogICAgfQ0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j Pg0KICAgIHZvaWQNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpf TV9sZWFrX2hhcmQoKQ0KICAgIHsNCiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkp DQogICAgICAgIF9NX211dGF0ZSgwLCAwLCAwKTsNCiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVh a2VkKCk7DQogICAgfQ0KDQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQNCiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBfTV9tdXRhdGUoc2l6ZV90eXBl IF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5cGUgX19sZW4yKQ0KICAgIHsNCiAgICAg IHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgY29uc3Qgc2l6ZV90 eXBlIF9fbmV3X3NpemUgPSBfX29sZF9zaXplICsgX19sZW4yIC0gX19sZW4xOw0KICAgICAgY29u c3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4xOw0KICAgICAgY29u c3Qgc2l6ZV90eXBlIF9faG93X211Y2ggPSBfX29sZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7DQoN CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFj aXR5KCkpDQogICAgICAgIHsNCg0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9h bGxvY2F0b3IoKTsNCg0KDQogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0 MDk2Ow0KICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQg KiBzaXplb2YgKHZvaWQqKTsNCg0KICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2Fw YWNpdHkgPSAoX19wYWdlc2l6ZSAtIF9fbWFsbG9jX2hlYWRlcl9zaXplDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHNpemVvZihfUmVwKSAtIHNpemVvZihf Q2hhclQpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBz aXplb2YoX0NoYXJUKTsNCiAgICAgICAgICBfUmVwKiBfX3I7DQogICAgICAgICAgaWYgKF9fbmV3 X3NpemUgPiBjYXBhY2l0eSgpICYmIF9fbmV3X3NpemUgPiBfX3BhZ2VfY2FwYWNpdHkpDQoNCiAg ICAgICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplID4gMipjYXBhY2l0eSgp ID8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zaXplIDogMipjYXBh Y2l0eSgpLCBfX2EpOw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIF9fciA9IF9SZXA6Ol9T X2NyZWF0ZShfX25ld19zaXplLCBfX2EpOw0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0K ICAgICAgICAgICAgICBpZiAoX19wb3MpDQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNv cHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX2RhdGEoKSwgX19wb3MpOw0KICAgICAgICAgICAgICBp ZiAoX19ob3dfbXVjaCkNCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9N X3JlZmRhdGEoKSArIF9fcG9zICsgX19sZW4yLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fc3JjLCBfX2hvd19tdWNoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRj aCguLi4pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9fci0+X01fZGlzcG9zZShnZXRf YWxsb2NhdG9yKCkpOw0KICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAg ICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOw0KICAgICAgICAgIF9NX2RhdGEoX19yLT5f TV9yZWZkYXRhKCkpOw0KICAgICAgfQ0KICAgICAgZWxzZSBpZiAoX19ob3dfbXVjaCAmJiBfX2xl bjEgIT0gX19sZW4yKQ0KICAgICAgICB7DQoNCiAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShf TV9kYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwgX19zcmMsIF9faG93X211Y2gpOw0KICAgICAgICB9 DQogICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7DQogICAgICBfTV9yZXAoKS0+X01f bGVuZ3RoID0gX19uZXdfc2l6ZTsNCiAgICAgIF9NX2RhdGEoKVtfX25ld19zaXplXSA9IF9SZXA6 Ol9TX3Rlcm1pbmFsOw0KDQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQNCiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNlcnZlKHNpemVfdHlwZSBfX3JlcykNCiAg ICB7DQogICAgICBpZiAoX19yZXMgPiB0aGlzLT5jYXBhY2l0eSgpIHx8IF9NX3JlcCgpLT5fTV9p c19zaGFyZWQoKSkNCiAgICAgICAgew0KICAgICAgICAgIGlmIChfX3JlcyA+IHRoaXMtPm1heF9z aXplKCkpDQogICAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpy ZXNlcnZlIik7DQoNCiAgICAgICAgICBpZiAoX19yZXMgPCB0aGlzLT5zaXplKCkpDQogICAgICAg ICAgICBfX3JlcyA9IHRoaXMtPnNpemUoKTsNCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2Eg PSBnZXRfYWxsb2NhdG9yKCk7DQogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX3JlcCgpLT5f TV9jbG9uZShfX2EsIF9fcmVzIC0gdGhpcy0+c2l6ZSgpKTsNCiAgICAgICAgICBfTV9yZXAoKS0+ X01fZGlzcG9zZShfX2EpOw0KICAgICAgICAgIF9NX2RhdGEoX190bXApOw0KICAgICAgICB9DQog ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6c3dhcChiYXNpY19zdHJpbmcmIF9fcykNCiAgICB7DQogICAgICBpZiAoX01fcmVwKCkt Pl9NX2lzX2xlYWtlZCgpKQ0KICAgICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7DQog ICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkNCiAgICAgICAgX19zLl9NX3Jl cCgpLT5fTV9zZXRfc2hhcmFibGUoKTsNCiAgICAgIGlmICh0aGlzLT5nZXRfYWxsb2NhdG9yKCkg PT0gX19zLmdldF9hbGxvY2F0b3IoKSkNCiAgICAgICAgew0KICAgICAgICAgIF9DaGFyVCogX190 bXAgPSBfTV9kYXRhKCk7DQogICAgICAgICAgX01fZGF0YShfX3MuX01fZGF0YSgpKTsNCiAgICAg ICAgICBfX3MuX01fZGF0YShfX3RtcCk7DQogICAgICAgIH0NCg0KICAgICAgZWxzZQ0KICAgICAg ICB7DQogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMShfTV9pYmVnaW4oKSwgX01faWVuZCgp LCBfX3MuZ2V0X2FsbG9jYXRvcigpKTsNCiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAyKF9f cy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7DQogICAgICAgICAgKnRoaXMgPSBfX3RtcDI7DQog ICAgICAgICAgX19zID0gX190bXAxOw0KICAgICAgICB9DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHR5 cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXAqDQogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6DQogICAgX1NfY3Jl YXRlKHNpemVfdCBfX2NhcGFjaXR5LCBjb25zdCBfQWxsb2MmIF9fYWxsb2MpDQogICAgew0KICAg ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5n X3R5cGU7DQoNCg0KICAgICAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkNCg0KDQoNCiAg ICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X1NfY3JlYXRlIik7DQoN Cg0KDQoNCiAgICAgIHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9D aGFyVCkgKyBzaXplb2YoX1JlcCk7DQojIDQyMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9i YXNpY19zdHJpbmcudGNjIiAzDQogICAgICBjb25zdCBzaXplX3QgX19wYWdlc2l6ZSA9IDQwOTY7 DQogICAgICBjb25zdCBzaXplX3QgX19zdWJwYWdlc2l6ZSA9IDEyODsNCiAgICAgIGNvbnN0IHNp emVfdCBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsNCiAgICAgIGlm ICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpID4gX19wYWdlc2l6ZSkNCiAgICAgICAg ew0KICAgICAgICAgIHNpemVfdCBfX2V4dHJhID0NCiAgICAgICAgICAgIChfX3BhZ2VzaXplIC0g KChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgJSBfX3BhZ2VzaXplKSkNCiAgICAgICAg ICAgICUgX19wYWdlc2l6ZTsNCiAgICAgICAgICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBzaXpl b2YoX0NoYXJUKTsNCiAgICAgICAgICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9m KF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7DQogICAgICAgIH0NCiAgICAgIGVsc2UgaWYgKF9fc2l6 ZSA+IF9fc3VicGFnZXNpemUpDQogICAgICAgIHsNCiAgICAgICAgICBzaXplX3QgX19leHRyYSA9 DQogICAgICAgICAgICAoX19zdWJwYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVy X3NpemUpICUgX19zdWJwYWdlc2l6ZSkpDQogICAgICAgICAgICAlIF9fc3VicGFnZXNpemU7DQog ICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4dHJhIC8gc2l6ZW9mKF9DaGFyVCk7DQogICAgICAg ICAgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9S ZXApOw0KICAgICAgICB9DQoNCg0KDQogICAgICB2b2lkKiBfX3BsYWNlID0gX1Jhd19ieXRlc19h bGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOw0KICAgICAgX1JlcCAqX19wID0gbmV3IChf X3BsYWNlKSBfUmVwOw0KICAgICAgX19wLT5fTV9jYXBhY2l0eSA9IF9fY2FwYWNpdHk7DQogICAg ICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOw0KICAgICAgX19wLT5fTV9sZW5ndGggPSAwOw0KICAg ICAgcmV0dXJuIF9fcDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgX0NoYXJUKg0KICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6Og0KICAgIF9NX2Nsb25lKGNvbnN0 IF9BbGxvYyYgX19hbGxvYywgc2l6ZV90eXBlIF9fcmVzKQ0KICAgIHsNCg0KICAgICAgY29uc3Qg c2l6ZV90eXBlIF9fcmVxdWVzdGVkX2NhcCA9IF9NX2xlbmd0aCArIF9fcmVzOw0KDQogICAgICBj b25zdCBzaXplX3R5cGUgX19wYWdlc2l6ZSA9IDQwOTY7DQogICAgICBjb25zdCBzaXplX3R5cGUg X19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7DQoNCiAgICAgIGNvbnN0 IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNpdHkgPQ0KICAgICAgICAoX19wYWdlc2l6ZSAtIF9fbWFs bG9jX2hlYWRlcl9zaXplIC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFyVCkpDQogICAgICAg IC8gc2l6ZW9mKF9DaGFyVCk7DQogICAgICBfUmVwKiBfX3I7DQogICAgICBpZiAoX19yZXF1ZXN0 ZWRfY2FwID4gX01fY2FwYWNpdHkgJiYgX19yZXF1ZXN0ZWRfY2FwID4gX19wYWdlX2NhcGFjaXR5 KQ0KDQogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAgPiAyKl9N X2NhcGFjaXR5ID8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVxdWVzdGVkX2Nh cCA6IDIqX01fY2FwYWNpdHksIF9fYWxsb2MpOw0KICAgICAgZWxzZQ0KICAgICAgICBfX3IgPSBf UmVwOjpfU19jcmVhdGUoX19yZXF1ZXN0ZWRfY2FwLCBfX2FsbG9jKTsNCg0KICAgICAgaWYgKF9N X2xlbmd0aCkNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgeyB0cmFpdHNf dHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgpLCBfTV9sZW5ndGgpOyB9 DQogICAgICAgICAgY2F0Y2goLi4uKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfX3It Pl9NX2Rlc3Ryb3koX19hbGxvYyk7DQogICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAg fQ0KICAgICAgICB9DQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9NX2xlbmd0aDsNCiAgICAgIHJl dHVybiBfX3ItPl9NX3JlZmRhdGEoKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdm9pZA0KICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2l6ZShzaXplX3R5cGUgX19u LCBfQ2hhclQgX19jKQ0KICAgIHsNCiAgICAgIGlmIChfX24gPiBtYXhfc2l6ZSgpKQ0KICAgICAg ICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNpemUiKTsNCiAgICAgIHNp emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19zaXplIDwgX19uKQ0K ICAgICAgICB0aGlzLT5hcHBlbmQoX19uIC0gX19zaXplLCBfX2MpOw0KICAgICAgZWxzZSBpZiAo X19uIDwgX19zaXplKQ0KICAgICAgICB0aGlzLT5lcmFzZShfX24pOw0KDQogICAgfQ0KDQoNCg0K DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+DQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4NCiAgICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mDQogICAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwg aXRlcmF0b3IgX19pMiwgX0lucHV0SXRlciBfX2sxLA0KICAgICAgICAgICAgICAgICBfSW5wdXRJ dGVyIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZykNCiAgICAgIHsNCg0KICAgICAgICBiYXNpY19z dHJpbmcgX19zKF9fazEsIF9fazIpOw0KICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9f aTEsIF9faTIsIF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSk7DQogICAgICB9DQoNCg0K DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+DQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPg0KICAgICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYNCiAgICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgICAgX01fcmVwbGFjZV9zYWZlKGl0ZXJhdG9y IF9faTEsIGl0ZXJhdG9yIF9faTIsIF9Gb3J3YXJkSXRlciBfX2sxLA0KICAgICAgICAgICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlciBfX2syKQ0KICAgICAgew0KICAgICAgICBzaXplX3R5cGUgX19k bmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihkaXN0YW5jZShfX2sxLCBfX2syKSk7DQogICAg ICAgIHNpemVfdHlwZSBfX2RvbGQgPSBfX2kyIC0gX19pMTsNCiAgICAgICAgc2l6ZV90eXBlIF9f ZG1heCA9IHRoaXMtPm1heF9zaXplKCk7DQoNCiAgICAgICAgaWYgKF9fZG1heCA8PSBfX2RuZXcp DQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X01fcmVwbGFj ZSIpOw0KICAgICAgICBzaXplX3R5cGUgX19vZmYgPSBfX2kxIC0gX01faWJlZ2luKCk7DQogICAg ICAgIF9NX211dGF0ZShfX29mZiwgX19kb2xkLCBfX2RuZXcpOw0KDQoNCiAgICAgICAgaWYgKF9f ZG5ldykNCiAgICAgICAgICBfU19jb3B5X2NoYXJzKF9NX2RhdGEoKSArIF9fb2ZmLCBfX2sxLCBf X2syKTsNCg0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgICB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYNCiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNp emVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLA0KICAgICAgICAgICAgc2l6 ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpDQogICAgew0KICAgICAgY29uc3Qgc2l6ZV90 eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAgICAgIGlmIChfX3BvczIgPiBfX3N0cnNp emUpDQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2Ui KTsNCiAgICAgIGNvbnN0IGJvb2wgX190ZXN0bjIgPSBfX24yIDwgX19zdHJzaXplIC0gX19wb3My Ow0KICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9sZG4yID0gX190ZXN0bjIgPyBfX24yIDogX19z dHJzaXplIC0gX19wb3MyOw0KICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MxLCBfX24x LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZGF0YSgpICsgX19wb3MyLCBf X2ZvbGRuMik7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 DQogICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpDQogICAgew0KDQoNCg0KICAg ICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAgICAgIHNpemVfdHlwZSBfX2xl biA9IF9fc2l6ZSArIHRoaXMtPnNpemUoKTsNCiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFj aXR5KCkpDQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOw0KICAgICAgcmV0dXJuIF9NX3Jl cGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01faWJlZ2luKCksDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7DQogICAgfQ0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j Pg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mDQogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgYXBwZW5kKGNvbnN0IGJhc2lj X3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikNCiAgICB7DQoN Cg0KDQogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zdHIuc2l6ZSgpIC0gX19wb3MsIF9f bikgKyB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQ0K ICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsNCiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3Nh ZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSk7DQogICAgfQ0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mDQogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgYXBwZW5kKGNvbnN0 IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQ0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX2xl biA9IF9fbiArIHRoaXMtPnNpemUoKTsNCiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5 KCkpDQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOw0KICAgICAgcmV0dXJuIF9NX3JlcGxh Y2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zLCBfX3MgKyBfX24pOw0KICAgIH0NCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Jg0KICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGFwcGVuZChzaXplX3R5 cGUgX19uLCBfQ2hhclQgX19jKQ0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiAr IHRoaXMtPnNpemUoKTsNCiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpDQogICAg ICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOw0KICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9N X2llbmQoKSwgX01faWVuZCgpLCBfX24sIF9fYyk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4NCiAgICBvcGVyYXRvcisoY29uc3QgX0No YXJUKiBfX2xocywNCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7DQogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsNCiAgICAgIF9fc2l6 ZV90eXBlIF9fbGVuID0gX1RyYWl0czo6bGVuZ3RoKF9fbGhzKTsNCiAgICAgIF9fc3RyaW5nX3R5 cGUgX19zdHI7DQogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgX19yaHMuc2l6ZSgpKTsNCiAg ICAgIF9fc3RyLmFwcGVuZChfX2xocywgX19saHMgKyBfX2xlbik7DQogICAgICBfX3N0ci5hcHBl bmQoX19yaHMpOw0KICAgICAgcmV0dXJuIF9fc3RyOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+DQogICAgb3BlcmF0b3IrKF9DaGFyVCBf X2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp DQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+IF9fc3RyaW5nX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6 OnNpemVfdHlwZSBfX3NpemVfdHlwZTsNCiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7DQogICAg ICBfX3NpemVfdHlwZSBfX2xlbiA9IF9fcmhzLnNpemUoKTsNCiAgICAgIF9fc3RyLnJlc2VydmUo X19sZW4gKyAxKTsNCiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwgX19saHMpOw0K ICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsNCiAgICAgIHJldHVybiBfX3N0cjsNCiAgICB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYNCiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICByZXBsYWNlKGl0ZXJh dG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQ0KICAg IHsNCiAgICAgIHNpemVfdHlwZSBfX24xID0gX19pMiAtIF9faTE7DQogICAgICBzaXplX3R5cGUg X19vZmYxID0gX19pMSAtIF9NX2liZWdpbigpOw0KICAgICAgaWYgKG1heF9zaXplKCkgLSAodGhp cy0+c2l6ZSgpIC0gX19uMSkgPD0gX19uMikNCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3Io ImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOw0KICAgICAgX01fbXV0YXRlIChfX29mZjEsIF9fbjEs IF9fbjIpOw0KDQogICAgICBpZiAoX19uMikNCiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihf TV9kYXRhKCkgKyBfX29mZjEsIF9fbjIsIF9fYyk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAg fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPg0KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46Og0KICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3Bv cykgY29uc3QNCiAgICB7DQogICAgICBpZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpDQogICAgICAg IF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsNCg0KICAgICAgaWYg KF9fbiA+IHRoaXMtPnNpemUoKSAtIF9fcG9zKQ0KICAgICAgICBfX24gPSB0aGlzLT5zaXplKCkg LSBfX3BvczsNCg0KICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9kYXRhKCkgKyBfX3Bv cywgX19uKTsNCg0KICAgICAgcmV0dXJuIF9fbjsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdHlwZW5h bWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgZmluZChjb25zdCBf Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdA0KICAgIHsN CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBzaXplX3QgX194 cG9zID0gX19wb3M7DQogICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsNCiAg ICAgIGZvciAoOyBfX3hwb3MgKyBfX24gPD0gX19zaXplOyArK19feHBvcykNCiAgICAgICAgaWYg KHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9feHBvcywgX19zLCBfX24pID09IDApDQog ICAgICAgICAgcmV0dXJuIF9feHBvczsNCiAgICAgIHJldHVybiBucG9zOw0KICAgIH0NCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4NCiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpz aXplX3R5cGUNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAg ICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QNCiAgICB7DQogICAgICBz aXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgc2l6ZV90eXBlIF9fcmV0ID0g bnBvczsNCiAgICAgIGlmIChfX3BvcyA8IF9fc2l6ZSkNCiAgICAgICAgew0KICAgICAgICAgIGNv bnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOw0KICAgICAgICAgIHNpemVfdHlwZSBfX24g PSBfX3NpemUgLSBfX3BvczsNCiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190 eXBlOjpmaW5kKF9fZGF0YSArIF9fcG9zLCBfX24sIF9fYyk7DQogICAgICAgICAgaWYgKF9fcCkN CiAgICAgICAgICAgIF9fcmV0ID0gX19wIC0gX19kYXRhOw0KICAgICAgICB9DQogICAgICByZXR1 cm4gX19yZXQ7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QNCiAgICB7DQogICAgICBzaXplX3R5cGUg X19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgaWYgKF9fbiA8PSBfX3NpemUpDQogICAgICAg IHsNCiAgICAgICAgICBfX3BvcyA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fbiwgX19wb3MpOw0KICAg ICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOw0KICAgICAgICAgIGRvDQog ICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2Rh dGEgKyBfX3BvcywgX19zLCBfX24pID09IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIF9fcG9z Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIHdoaWxlIChfX3Bvcy0tID4gMCk7DQogICAgICAg IH0NCiAgICAgIHJldHVybiBucG9zOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB0eXBlbmFtZSBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICByZmluZChfQ2hhclQgX19jLCBz aXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRo aXMtPnNpemUoKTsNCiAgICAgIGlmIChfX3NpemUpDQogICAgICAgIHsNCiAgICAgICAgICBzaXpl X3QgX194cG9zID0gX19zaXplIC0gMTsNCiAgICAgICAgICBpZiAoX194cG9zID4gX19wb3MpDQog ICAgICAgICAgICBfX3hwb3MgPSBfX3BvczsNCg0KICAgICAgICAgIGZvciAoKytfX3hwb3M7IF9f eHBvcy0tID4gMDsgKQ0KICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcShfTV9kYXRhKClb X194cG9zXSwgX19jKSkNCiAgICAgICAgICAgICAgcmV0dXJuIF9feHBvczsNCiAgICAgICAgfQ0K ICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHR5cGVuYW1lIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0No YXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QNCiAgICB7DQog ICAgICBmb3IgKDsgX19uICYmIF9fcG9zIDwgdGhpcy0+c2l6ZSgpOyArK19fcG9zKQ0KICAgICAg ICB7DQogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX3Ms IF9fbiwgX01fZGF0YSgpW19fcG9zXSk7DQogICAgICAgICAgaWYgKF9fcCkNCiAgICAgICAgICAg IHJldHVybiBfX3BvczsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPg0KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0K ICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXpl X3R5cGUgX19uKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z aXplKCk7DQogICAgICBpZiAoX19zaXplICYmIF9fbikNCiAgICAgICAgew0KICAgICAgICAgIGlm ICgtLV9fc2l6ZSA+IF9fcG9zKQ0KICAgICAgICAgICAgX19zaXplID0gX19wb3M7DQogICAgICAg ICAgZG8NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpmaW5k KF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpDQogICAgICAgICAgICAgICAgcmV0dXJuIF9f c2l6ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB3aGlsZSAoX19zaXplLS0gIT0gMCk7DQog ICAgICAgIH0NCiAgICAgIHJldHVybiBucG9zOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB0eXBlbmFt ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBmaW5kX2ZpcnN0X25v dF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBj b25zdA0KICAgIHsNCiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsNCiAgICAgIGZvciAoOyBf X3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQ0KICAgICAgICBpZiAoIXRyYWl0c190eXBl OjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX194cG9zXSkpDQogICAgICAgICAgcmV0dXJuIF9f eHBvczsNCiAgICAgIHJldHVybiBucG9zOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB0eXBlbmFtZSBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBmaW5kX2ZpcnN0X25vdF9v ZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90 IF9feHBvcyA9IF9fcG9zOw0KICAgICAgZm9yICg7IF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytf X3hwb3MpDQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBf X2MpKQ0KICAgICAgICAgIHJldHVybiBfX3hwb3M7DQogICAgICByZXR1cm4gbnBvczsNCiAgICB9 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+DQogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6DQogICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f cG9zLCBzaXplX3R5cGUgX19uKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX3NpemUg PSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19zaXplKQ0KICAgICAgICB7DQogICAgICAgICAg aWYgKC0tX19zaXplID4gX19wb3MpDQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsNCiAgICAg ICAgICBkbw0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpm aW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpDQogICAgICAgICAgICAgICAgcmV0dXJu IF9fc2l6ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOw0KICAg ICAgICB9DQogICAgICByZXR1cm4gbnBvczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdHlwZW5hbWUg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgZmluZF9sYXN0X25vdF9v ZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90 eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIGlmIChfX3NpemUpDQogICAgICAgIHsN CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykNCiAgICAgICAgICAgIF9fc2l6ZSA9IF9f cG9zOw0KICAgICAgICAgIGRvDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmICghdHJh aXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3NpemVdLCBfX2MpKQ0KICAgICAgICAgICAgICAgIHJl dHVybiBfX3NpemU7DQogICAgICAgICAgICB9DQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsN CiAgICAgICAgfQ0KICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0K ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGNvbXBhcmUo c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry KSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQog ICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAgICAgIGlmIChfX3BvcyA+ IF9fc2l6ZSkNCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29t cGFyZSIpOw0KDQogICAgICBzaXplX3R5cGUgX19yc2l6ZT0gbWluKF9fc2l6ZSAtIF9fcG9zLCBf X24pOw0KICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOw0KICAg ICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3N0 ci5kYXRhKCksIF9fbGVuKTsNCiAgICAgIGlmICghX19yKQ0KICAgICAgICBfX3IgPSBfX3JzaXpl IC0gX19vc2l6ZTsNCiAgICAgIHJldHVybiBfX3I7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0K ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGNvbXBhcmUo c2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z dHIsDQogICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3QN CiAgICB7DQogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgc2l6 ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7DQogICAgICBpZiAoX19wb3MxID4gX19zaXpl IHx8IF9fcG9zMiA+IF9fb3NpemUpDQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNp Y19zdHJpbmc6OmNvbXBhcmUiKTsNCg0KICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19z aXplIC0gX19wb3MxLCBfX24xKTsNCiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29z aXplIC0gX19wb3MyLCBfX24yKTsNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXpl LCBfX3Jvc2l6ZSk7DQogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0 YSgpICsgX19wb3MxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3Ry LmRhdGEoKSArIF9fcG9zMiwgX19sZW4pOw0KICAgICAgaWYgKCFfX3IpDQogICAgICAgIF9fciA9 IF9fcnNpemUgLSBfX3Jvc2l6ZTsNCiAgICAgIHJldHVybiBfX3I7DQogICAgfQ0KDQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ DQogICAgaW50DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQog ICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29uc3QNCiAgICB7DQogICAgICBzaXplX3R5 cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpj b21wYXJlKF9NX2RhdGEoKSwgX19zLCBfX3NpemUpOw0KICAgICAgaWYgKCFfX3IpDQogICAgICAg IF9fciA9IF9fc2l6ZSAtIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsNCiAgICAgIHJldHVybiBf X3I7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW50DQogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5 cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90eXBl IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkNCiAgICAg ICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOw0KDQogICAg ICBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsNCiAgICAgIHNp emVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsNCiAgICAgIHNpemVf dHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsNCiAgICAgIGludCBfX3IgPSB0cmFp dHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7DQogICAgICBp ZiAoIV9fcikNCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7DQogICAgICByZXR1cm4g X19yOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbnQNCiAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6DQogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw ZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywNCiAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBj b25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAg ICBpZiAoX19wb3MgPiBfX3NpemUpDQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNp Y19zdHJpbmc6OmNvbXBhcmUiKTsNCg0KICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBtaW4odHJh aXRzX3R5cGU6Omxlbmd0aChfX3MpLCBfX24yKTsNCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0g bWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihf X3JzaXplLCBfX29zaXplKTsNCiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShf TV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7DQogICAgICBpZiAoIV9fcikNCiAgICAgICAg X19yID0gX19yc2l6ZSAtIF9fb3NpemU7DQogICAgICByZXR1cm4gX19yOw0KICAgIH0NCg0KICB0 ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+DQogICAg dm9pZA0KICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mIF9fc3RyLA0KICAgICAgICAgICAgICAgICAgIF9DaGFyVCogX19idWYsIHR5 cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIF9fYnVmc2l6KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOw0KICAgICAgc2l6ZV90eXBlIF9f c3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAgICAgIHNpemVfdHlwZSBfX2J5dGVzID0gbWluKF9f c3Ryc2l6ZSwgX19idWZzaXogLSAxKTsNCiAgICAgIF9UcmFpdHM6OmNvcHkoX19idWYsIF9fc3Ry LmRhdGEoKSwgX19ieXRlcyk7DQogICAgICBfX2J1ZltfX2J5dGVzXSA9IF9DaGFyVCgpOw0KICAg IH0NCg0KDQoNCg0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nPGNoYXI+Ow0K ICBleHRlcm4gdGVtcGxhdGUNCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+Jg0KICAgIG9wZXJhdG9y Pj4oYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOw0KICBleHRlcm4gdGVtcGxhdGUNCiAg ICBiYXNpY19vc3RyZWFtPGNoYXI+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFy PiYsIGNvbnN0IHN0cmluZyYpOw0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBiYXNpY19pc3RyZWFt PGNoYXI+Jg0KICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYsIGNoYXIp Ow0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+Jg0KICAgIGdldGxp bmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyBiYXNpY19zdHJpbmc8d2NoYXJfdD47DQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJhc2lj X2lzdHJlYW08d2NoYXJfdD4mDQogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPHdjaGFyX3Q+ Jiwgd3N0cmluZyYpOw0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBiYXNpY19vc3RyZWFtPHdjaGFy X3Q+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYsIGNvbnN0IHdzdHJp bmcmKTsNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYNCiAg ICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJiwgd2NoYXJfdCk7DQog IGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mDQogICAgZ2V0bGlu ZShiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYpOw0KfQ0KIyA1OCAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMNCiMgNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv bG9jYWxlZndkLmgiIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhj ZXB0LmgiIDEgMw0KIyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5o IiAzDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMw0K IyAzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMNCg0KbmFt ZXNwYWNlIHN0ZA0Kew0KDQogIHZvaWQNCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOw0K DQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsNCg0KDQogIHZvaWQNCiAgX190 aHJvd19iYWRfY2FzdCh2b2lkKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lk KTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K DQogIHZvaWQNCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2 b2lkDQogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZv aWQNCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQog IF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Ro cm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3df cmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfb3ZlcmZs b3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfdW5kZXJmbG93 X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfaW9zX2ZhaWx1 cmUoY29uc3QgY2hhciogX19zKTsNCn0NCiMgNTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv bG9jYWxlZndkLmgiIDIgMw0KDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICBjbGFzcyBsb2NhbGU7 DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBp c3NwYWNlKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNwcmludChfQ2hhclQsIGNvbnN0IGxvY2FsZSYp Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlz Y250cmwoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNs b3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzYWxwaGEoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsN Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc2Rp Z2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU Pg0KICAgIGlubGluZSBib29sDQogICAgaXNwdW5jdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOw0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzeGRp Z2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU Pg0KICAgIGlubGluZSBib29sDQogICAgaXNhbG51bShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOw0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzZ3Jh cGgoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ DQogICAgaW5saW5lIF9DaGFyVA0KICAgIHRvdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsN Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIF9DaGFyVA0KICAgIHRv bG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KDQoNCiAgY2xhc3MgY3R5cGVfYmFzZTsN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNsYXNzIGN0eXBlOw0KICB0ZW1wbGF0 ZTw+IGNsYXNzIGN0eXBlPGNoYXI+Ow0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ DQogICAgY2xhc3MgY3R5cGVfYnluYW1lOw0KDQoNCiAgY2xhc3MgY29kZWN2dF9iYXNlOw0KICBj bGFzcyBfX2VuY190cmFpdHM7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFt ZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4NCiAgICBjbGFzcyBjb2RlY3Z0Ow0KICB0ZW1w bGF0ZTw+IGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PjsNCg0KDQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3Rh dGVUPg0KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lOw0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4N CiAgICBjbGFzcyBudW1fZ2V0Ow0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4NCiAgICBjbGFzcyBudW1f cHV0Ow0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0Ow0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsNCg0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBjb2xsYXRlOw0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+IGNsYXNzDQogICAgY29sbGF0ZV9ieW5hbWU7DQoNCg0KICBjbGFzcyB0aW1l X2Jhc2U7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlz dHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgdGltZV9nZXQ7DQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0 b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgdGltZV9nZXRfYnluYW1lOw0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh clQ+ID4NCiAgICBjbGFzcyB0aW1lX3B1dDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAgY2xh c3MgdGltZV9wdXRfYnluYW1lOw0KDQoNCiAgY2xhc3MgbW9uZXlfYmFzZTsNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxf Q2hhclQ+ID4NCiAgICBjbGFzcyBtb25leV9nZXQ7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPg0KICAg IGNsYXNzIG1vbmV5X3B1dDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRs ID0gZmFsc2U+DQogICAgY2xhc3MgbW9uZXlwdW5jdDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCBib29sIF9JbnRsID0gZmFsc2U+DQogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU7DQoN Cg0KICBjbGFzcyBtZXNzYWdlc19iYXNlOw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQog ICAgY2xhc3MgbWVzc2FnZXM7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFz cyBtZXNzYWdlc19ieW5hbWU7DQoNCg0KICBjbGFzcyBsb2NhbGUNCiAgew0KICBwdWJsaWM6DQoN CiAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBjYXRlZ29yeTsNCg0KDQogICAgY2xhc3MgZmFjZXQ7 DQogICAgY2xhc3MgaWQ7DQogICAgY2xhc3MgX0ltcGw7DQoNCiAgICBmcmllbmQgY2xhc3MgZmFj ZXQ7DQogICAgZnJpZW5kIGNsYXNzIF9JbXBsOw0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zh Y2V0Pg0KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYNCiAgICAgIHVzZV9mYWNldChjb25zdCBs b2NhbGUmKTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVuZCBi b29sDQogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsNCg0KDQoNCiAgICBz dGF0aWMgY29uc3QgY2F0ZWdvcnkgbm9uZSA9IDA7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5 IGN0eXBlID0gMUwgPDwgMDsNCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbnVtZXJpYyA9IDFM IDw8IDE7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxhdGUgPSAxTCA8PCAyOw0KICAg IHN0YXRpYyBjb25zdCBjYXRlZ29yeSB0aW1lID0gMUwgPDwgMzsNCiAgICBzdGF0aWMgY29uc3Qg Y2F0ZWdvcnkgbW9uZXRhcnkgPSAxTCA8PCA0Ow0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBt ZXNzYWdlcyA9IDFMIDw8IDU7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9IChjb2xs YXRlIHwgY3R5cGUgfCBtb25ldGFyeSB8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnVtZXJpYyB8IHRpbWUgfCBtZXNzYWdlcyk7DQoNCg0KICAgIGxvY2FsZSgp IHRocm93KCk7DQoNCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOw0K DQogICAgZXhwbGljaXQNCiAgICBsb2NhbGUoY29uc3QgY2hhciogX19zKTsNCg0KICAgIGxvY2Fs ZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgY2hhciogX19zLCBjYXRlZ29yeSBfX2NhdCk7 DQoNCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQs IGNhdGVnb3J5IF9fY2F0KTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAg IGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKTsNCg0KICAgIH5sb2Nh bGUoKSB0aHJvdygpOw0KDQogICAgY29uc3QgbG9jYWxlJg0KICAgIG9wZXJhdG9yPShjb25zdCBs b2NhbGUmIF9fb3RoZXIpIHRocm93KCk7DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+ DQogICAgICBsb2NhbGUNCiAgICAgIGNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25z dDsNCg0KDQogICAgc3RyaW5nDQogICAgbmFtZSgpIGNvbnN0Ow0KDQogICAgYm9vbA0KICAgIG9w ZXJhdG9yPT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKTsNCg0KICAgIGlu bGluZSBib29sDQogICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRo cm93ICgpDQogICAgeyByZXR1cm4gISh0aGlzLT5vcGVyYXRvcj09KF9fb3RoZXIpKTsgfQ0KDQog ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4NCiAgICAgIGJvb2wNCiAgICAgIG9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MxLA0KICAgICAgICAgICAgICAgICBjb25zdCBiYXNp Y19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0Ow0KDQoNCiAgICBz dGF0aWMgbG9jYWxlDQogICAgZ2xvYmFsKGNvbnN0IGxvY2FsZSYpOw0KDQogICAgc3RhdGljIGNv bnN0IGxvY2FsZSYNCiAgICBjbGFzc2ljKCk7DQoNCiAgcHJpdmF0ZToNCg0KICAgIF9JbXBsKiBf TV9pbXBsOw0KDQoNCiAgICBzdGF0aWMgX0ltcGwqIF9TX2NsYXNzaWM7DQoNCg0KICAgIHN0YXRp YyBfSW1wbCogX1NfZ2xvYmFsOw0KDQogICAgc3RhdGljIGNvbnN0IHNpemVfdCBfU19udW1fY2F0 ZWdvcmllcyA9IDY7DQoNCiAgICBleHBsaWNpdA0KICAgIGxvY2FsZShfSW1wbCopIHRocm93KCk7 DQoNCiAgICBzdGF0aWMgaW5saW5lIHZvaWQNCiAgICBfU19pbml0aWFsaXplKCkNCiAgICB7DQog ICAgICBpZiAoIV9TX2NsYXNzaWMpDQogICAgICAgIGNsYXNzaWMoKTsNCiAgICB9DQoNCiAgICBz dGF0aWMgY2F0ZWdvcnkNCiAgICBfU19ub3JtYWxpemVfY2F0ZWdvcnkoY2F0ZWdvcnkpOw0KDQog ICAgdm9pZA0KICAgIF9NX2NvYWxlc2NlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2Nh bGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7DQogIH07DQoNCg0KDQogIGNsYXNzIGxvY2FsZTo6 X0ltcGwNCiAgew0KICBwdWJsaWM6DQoNCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOw0KICAgIGZy aWVuZCBjbGFzcyBsb2NhbGU6OmZhY2V0Ow0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0 Pg0KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYNCiAgICAgIHVzZV9mYWNldChjb25zdCBsb2Nh bGUmKTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVuZCBib29s DQogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsNCg0KICBwcml2YXRlOg0K DQogICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7DQogICAgZmFjZXQqKiBfTV9mYWNldHM7 DQogICAgc2l6ZV90IF9NX2ZhY2V0c19zaXplOw0KICAgIGNvbnN0IGNoYXIqIF9NX25hbWVzW19T X251bV9jYXRlZ29yaWVzXTsNCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1Nf aWRfY3R5cGVbXTsNCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbnVt ZXJpY1tdOw0KICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jb2xsYXRl W107DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX3RpbWVbXTsNCiAg ICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbW9uZXRhcnlbXTsNCiAgICBz dGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbWVzc2FnZXNbXTsNCiAgICBzdGF0 aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QqIGNvbnN0IF9TX2ZhY2V0X2NhdGVnb3JpZXNbXTsN Cg0KICAgIGlubGluZSB2b2lkDQogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCkNCiAgICB7 IF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNlcywgMSk7IH0NCg0KICAgIGlubGluZSB2b2lkDQog ICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCkNCiAgICB7DQogICAgICBpZiAoX19leGNo YW5nZV9hbmRfYWRkKCZfTV9yZWZlcmVuY2VzLCAtMSkgPT0gMSkNCiAgICAgICAgew0KICAgICAg ICAgIHRyeQ0KICAgICAgICAgICAgeyBkZWxldGUgdGhpczsgfQ0KICAgICAgICAgIGNhdGNoKC4u LikNCiAgICAgICAgICAgIHsgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgX0ltcGwoY29uc3Qg X0ltcGwmLCBzaXplX3QpOw0KICAgIF9JbXBsKGNvbnN0IGNoYXIqLCBzaXplX3QpOw0KICAgIF9J bXBsKGZhY2V0KiosIHNpemVfdCwgYm9vbCk7DQoNCiAgIH5fSW1wbCgpIHRocm93KCk7DQoNCiAg ICBfSW1wbChjb25zdCBfSW1wbCYpOw0KDQogICAgdm9pZA0KICAgIG9wZXJhdG9yPShjb25zdCBf SW1wbCYpOw0KDQogICAgaW5saW5lIGJvb2wNCiAgICBfTV9jaGVja19zYW1lX25hbWUoKQ0KICAg IHsNCiAgICAgIGJvb2wgX19yZXQgPSB0cnVlOw0KICAgICAgZm9yIChzaXplX3QgaSA9IDA7IF9f cmV0ICYmIGkgPCBfU19udW1fY2F0ZWdvcmllcyAtIDE7ICsraSkNCiAgICAgICAgX19yZXQgJj0g KHN0cmNtcChfTV9uYW1lc1tpXSwgX01fbmFtZXNbaSArIDFdKSA9PSAwKTsNCiAgICAgIHJldHVy biBfX3JldDsNCiAgICB9DQoNCiAgICB2b2lkDQogICAgX01fcmVwbGFjZV9jYXRlZ29yaWVzKGNv bnN0IF9JbXBsKiwgY2F0ZWdvcnkpOw0KDQogICAgdm9pZA0KICAgIF9NX3JlcGxhY2VfY2F0ZWdv cnkoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCopOw0KDQogICAgdm9pZA0K ICAgIF9NX3JlcGxhY2VfZmFjZXQoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKik7DQoN CiAgICB2b2lkDQogICAgX01faW5zdGFsbF9mYWNldChjb25zdCBsb2NhbGU6OmlkKiwgZmFjZXQq KTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGlubGluZSB2b2lkDQog ICAgICBfTV9pbml0X2ZhY2V0KF9GYWNldCogX19mYWNldCkNCiAgICAgIHsgX01faW5zdGFsbF9m YWNldCgmX0ZhY2V0OjppZCwgX19mYWNldCk7IH0NCiAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRmFjZXQ+DQogICAgbG9jYWxlOjpsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFj ZXQqIF9fZikNCiAgICB7DQogICAgICBfTV9pbXBsID0gbmV3IF9JbXBsKCpfX290aGVyLl9NX2lt cGwsIDEpOw0KICAgICAgX01faW1wbC0+X01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19m KTsNCiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9TX251bV9jYXRlZ29yaWVzOyAr K19faSkNCiAgICAgICAgX01faW1wbC0+X01fbmFtZXNbX19pXSA9ICIqIjsNCiAgICB9DQoNCg0K ICBjbGFzcyBsb2NhbGU6OmZhY2V0DQogIHsNCiAgcHJpdmF0ZToNCiAgICBmcmllbmQgY2xhc3Mg bG9jYWxlOw0KICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOw0KDQogICAgX0F0b21pY193 b3JkIF9NX3JlZmVyZW5jZXM7DQoNCiAgcHJvdGVjdGVkOg0KDQoNCiAgICBzdGF0aWMgX19jX2xv Y2FsZSBfU19jX2xvY2FsZTsNCg0KICAgIGV4cGxpY2l0DQogICAgZmFjZXQoc2l6ZV90IF9fcmVm cyA9IDApIHRocm93KCk7DQoNCiAgICB2aXJ0dWFsDQogICAgfmZhY2V0KCk7DQoNCiAgICBzdGF0 aWMgdm9pZA0KICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0 IGNoYXIqIF9fcywNCiAgICAgICAgICAgICAgICAgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IDAp Ow0KDQogICAgc3RhdGljIF9fY19sb2NhbGUNCiAgICBfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9j YWxlJiBfX2Nsb2MpOw0KDQogICAgc3RhdGljIHZvaWQNCiAgICBfU19kZXN0cm95X2NfbG9jYWxl KF9fY19sb2NhbGUmIF9fY2xvYyk7DQoNCiAgcHJpdmF0ZToNCiAgICB2b2lkDQogICAgX01fYWRk X3JlZmVyZW5jZSgpIHRocm93KCk7DQoNCiAgICB2b2lkDQogICAgX01fcmVtb3ZlX3JlZmVyZW5j ZSgpIHRocm93KCk7DQoNCiAgICBmYWNldChjb25zdCBmYWNldCYpOw0KDQogICAgdm9pZA0KICAg IG9wZXJhdG9yPShjb25zdCBmYWNldCYpOw0KICB9Ow0KDQoNCg0KICBjbGFzcyBsb2NhbGU6Omlk DQogIHsNCiAgcHJpdmF0ZToNCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOw0KICAgIGZyaWVuZCBj bGFzcyBsb2NhbGU6Ol9JbXBsOw0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAg IGZyaWVuZCBjb25zdCBfRmFjZXQmDQogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7DQog ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgICAgZnJpZW5kIGJvb2wNCiAgICAgIGhh c19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdyAoKTsNCg0KDQoNCg0KICAgIG11dGFibGUgc2l6 ZV90IF9NX2luZGV4Ow0KDQoNCiAgICBzdGF0aWMgX0F0b21pY193b3JkIF9TX2hpZ2h3YXRlcjsN Cg0KICAgIHZvaWQNCiAgICBvcGVyYXRvcj0oY29uc3QgaWQmKTsNCg0KICAgIGlkKGNvbnN0IGlk Jik7DQoNCiAgcHVibGljOg0KDQoNCiAgICBpZCgpOw0KDQogICAgaW5saW5lIHNpemVfdA0KICAg IF9NX2lkKCkgY29uc3QNCiAgICB7DQogICAgICBpZiAoIV9NX2luZGV4KQ0KICAgICAgICBfTV9p bmRleCA9IDEgKyBfX2V4Y2hhbmdlX2FuZF9hZGQoJl9TX2hpZ2h3YXRlciwgMSk7DQogICAgICBy ZXR1cm4gX01faW5kZXggLSAxOw0KICAgIH0NCiAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf RmFjZXQ+DQogICAgY29uc3QgX0ZhY2V0Jg0KICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmIF9f bG9jKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+DQogICAgYm9vbA0KICAgIGhhc19m YWNldChjb25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpOw0KfQ0KIyA0OSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvaW9zIiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9pb3NfYmFz ZS5oIiAxIDMNCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvaW9zX2Jhc2UuaCIgMw0K DQoNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KDQogIGVudW0gX0lvc19GbXRmbGFncyB7IF9N X2lvc19mbXRmbGFnc19lbmQgPSAxTCA8PCAxNiB9Ow0KDQogIGlubGluZSBfSW9zX0ZtdGZsYWdz DQogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpDQogIHsg cmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8 aW50PihfX2IpKTsgfQ0KDQogIGlubGluZSBfSW9zX0ZtdGZsYWdzDQogIG9wZXJhdG9yfChfSW9z X0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpDQogIHsgcmV0dXJuIF9Jb3NfRm10Zmxh Z3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQ0KDQog IGlubGluZSBfSW9zX0ZtdGZsYWdzDQogIG9wZXJhdG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lv c19GbXRmbGFncyBfX2IpDQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50 PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQ0KDQogIGlubGluZSBfSW9zX0ZtdGZs YWdzDQogIG9wZXJhdG9yfD0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikN CiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MN CiAgb3BlcmF0b3ImPShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQ0KICB7 IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0NCg0KICBpbmxpbmUgX0lvc19GbXRmbGFncw0KICBv cGVyYXRvcl49KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpDQogIHsgcmV0 dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQ0KDQogIGlubGluZSBfSW9zX0ZtdGZsYWdzDQogIG9wZXJh dG9yfihfSW9zX0ZtdGZsYWdzIF9fYSkNCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyh+c3RhdGlj X2Nhc3Q8aW50PihfX2EpKTsgfQ0KDQoNCiAgZW51bSBfSW9zX09wZW5tb2RlIHsgX01faW9zX29w ZW5tb2RlX2VuZCA9IDFMIDw8IDE2IH07DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3Bl cmF0b3ImKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyByZXR1cm4g X0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9f YikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0b3J8KF9Jb3NfT3Blbm1v ZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0 aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9DQoNCiAgaW5saW5l IF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0b3JeKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5t b2RlIF9fYikNCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkg XiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUNCiAg b3BlcmF0b3J8PShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQ0KICB7IHJl dHVybiBfX2EgPSBfX2EgfCBfX2I7IH0NCg0KICBpbmxpbmUgX0lvc19PcGVubW9kZQ0KICBvcGVy YXRvciY9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpDQogIHsgcmV0dXJu IF9fYSA9IF9fYSAmIF9fYjsgfQ0KDQogIGlubGluZSBfSW9zX09wZW5tb2RlDQogIG9wZXJhdG9y Xj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyByZXR1cm4gX19h ID0gX19hIF4gX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0b3J+KF9J b3NfT3Blbm1vZGUgX19hKQ0KICB7IHJldHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNfY2FzdDxp bnQ+KF9fYSkpOyB9DQoNCg0KICBlbnVtIF9Jb3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRlX2Vu ZCA9IDFMIDw8IDE2IH07DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0KICBvcGVyYXRvciYoX0lv c19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikNCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRl KHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0NCg0KICBp bmxpbmUgX0lvc19Jb3N0YXRlDQogIG9wZXJhdG9yfChfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lv c3RhdGUgX19iKQ0KICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2Ep IHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQ0KDQogIGlubGluZSBfSW9zX0lvc3RhdGUNCiAg b3BlcmF0b3JeKF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpDQogIHsgcmV0dXJu IF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9f YikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0KICBvcGVyYXRvcnw9KF9Jb3NfSW9zdGF0 ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQ0KICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0N Cg0KICBpbmxpbmUgX0lvc19Jb3N0YXRlDQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0YXRlJiBfX2Es IF9Jb3NfSW9zdGF0ZSBfX2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQ0KDQogIGlu bGluZSBfSW9zX0lvc3RhdGUNCiAgb3BlcmF0b3JePShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19J b3N0YXRlIF9fYikNCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9DQoNCiAgaW5saW5lIF9J b3NfSW9zdGF0ZQ0KICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRlIF9fYSkNCiAgeyByZXR1cm4gX0lv c19Jb3N0YXRlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9DQoNCiAgZW51bSBfSW9zX1NlZWtk aXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAxTCA8PCAxNiB9Ow0KDQoNCiAgY2xhc3MgaW9zX2Jh c2UNCiAgew0KICBwdWJsaWM6DQoNCg0KICAgIGNsYXNzIGZhaWx1cmUgOiBwdWJsaWMgZXhjZXB0 aW9uDQogICAgew0KICAgIHB1YmxpYzoNCg0KDQogICAgICBleHBsaWNpdA0KICAgICAgZmFpbHVy ZShjb25zdCBzdHJpbmcmIF9fc3RyKSB0aHJvdygpOw0KDQoNCg0KICAgICAgdmlydHVhbA0KICAg ICAgfmZhaWx1cmUoKSB0aHJvdygpOw0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqDQogICAg ICB3aGF0KCkgY29uc3QgdGhyb3coKTsNCg0KICAgIHByaXZhdGU6DQogICAgICBlbnVtIHsgX01f YnVmc2l6ZSA9IDI1NiB9Ow0KICAgICAgY2hhciBfTV9uYW1lW19NX2J1ZnNpemVdOw0KDQogICAg fTsNCg0KDQogICAgdHlwZWRlZiBfSW9zX0ZtdGZsYWdzIGZtdGZsYWdzOw0KDQogICAgc3RhdGlj IGNvbnN0IGZtdGZsYWdzIGJvb2xhbHBoYSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19ib29s YWxwaGEpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBkZWMgPSBmbXRmbGFncyhfX2lvc19m bGFnczo6X1NfZGVjKTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZml4ZWQgPSBmbXRmbGFn cyhfX2lvc19mbGFnczo6X1NfZml4ZWQpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBoZXgg PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaGV4KTsNCiAgICBzdGF0aWMgY29uc3QgZm10Zmxh Z3MgaW50ZXJuYWwgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaW50ZXJuYWwpOw0KICAgIHN0 YXRpYyBjb25zdCBmbXRmbGFncyBsZWZ0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2xlZnQp Ow0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBvY3QgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6 X1Nfb2N0KTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgcmlnaHQgPSBmbXRmbGFncyhfX2lv c19mbGFnczo6X1NfcmlnaHQpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzY2llbnRpZmlj ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NjaWVudGlmaWMpOw0KICAgIHN0YXRpYyBjb25z dCBmbXRmbGFncyBzaG93YmFzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93YmFzZSk7 DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb2ludCA9IGZtdGZsYWdzKF9faW9zX2Zs YWdzOjpfU19zaG93cG9pbnQpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9zID0g Zm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dwb3MpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRm bGFncyBza2lwd3MgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2tpcHdzKTsNCiAgICBzdGF0 aWMgY29uc3QgZm10ZmxhZ3MgdW5pdGJ1ZiA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191bml0 YnVmKTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdXBwZXJjYXNlID0gZm10ZmxhZ3MoX19p b3NfZmxhZ3M6Ol9TX3VwcGVyY2FzZSk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGFkanVz dGZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2FkanVzdGZpZWxkKTsNCiAgICBzdGF0 aWMgY29uc3QgZm10ZmxhZ3MgYmFzZWZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jh c2VmaWVsZCk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZsb2F0ZmllbGQgPSBmbXRmbGFn cyhfX2lvc19mbGFnczo6X1NfZmxvYXRmaWVsZCk7DQoNCg0KICAgIHR5cGVkZWYgX0lvc19Jb3N0 YXRlIGlvc3RhdGU7DQogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgYmFkYml0ID0gaW9zdGF0ZShf X2lvc19mbGFnczo6X1NfYmFkYml0KTsNCiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBlb2ZiaXQg PSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19lb2ZiaXQpOw0KICAgIHN0YXRpYyBjb25zdCBpb3N0 YXRlIGZhaWxiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19mYWlsYml0KTsNCiAgICBzdGF0 aWMgY29uc3QgaW9zdGF0ZSBnb29kYml0ID0gaW9zdGF0ZSgwKTsNCg0KDQogICAgdHlwZWRlZiBf SW9zX09wZW5tb2RlIG9wZW5tb2RlOw0KICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhcHAgPSBv cGVubW9kZShfX2lvc19mbGFnczo6X1NfYXBwKTsNCiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUg YXRlID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2F0ZSk7DQogICAgc3RhdGljIGNvbnN0IG9w ZW5tb2RlIGJpbmFyeSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19iaW4pOw0KICAgIHN0YXRp YyBjb25zdCBvcGVubW9kZSBpbiA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19pbik7DQogICAg c3RhdGljIGNvbnN0IG9wZW5tb2RlIG91dCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19vdXQp Ow0KICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSB0cnVuYyA9IG9wZW5tb2RlKF9faW9zX2ZsYWdz OjpfU190cnVuYyk7DQoNCg0KICAgIHR5cGVkZWYgX0lvc19TZWVrZGlyIHNlZWtkaXI7DQogICAg c3RhdGljIGNvbnN0IHNlZWtkaXIgYmVnID0gc2Vla2RpcigwKTsNCiAgICBzdGF0aWMgY29uc3Qg c2Vla2RpciBjdXIgPSBzZWVrZGlyKDEpOw0KICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGVuZCA9 IHNlZWtkaXIoMik7DQojIDIyNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9pb3NfYmFzZS5o IiAzDQogICAgZW51bSBldmVudA0KICAgIHsNCiAgICAgIGVyYXNlX2V2ZW50LA0KICAgICAgaW1i dWVfZXZlbnQsDQogICAgICBjb3B5Zm10X2V2ZW50DQogICAgfTsNCg0KICAgIHR5cGVkZWYgdm9p ZCAoKmV2ZW50X2NhbGxiYWNrKSAoZXZlbnQsIGlvc19iYXNlJiwgaW50KTsNCg0KICAgIHZvaWQN CiAgICByZWdpc3Rlcl9jYWxsYmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRleCk7 DQoNCiAgcHJvdGVjdGVkOg0KDQogICAgc3RyZWFtc2l6ZSBfTV9wcmVjaXNpb247DQogICAgc3Ry ZWFtc2l6ZSBfTV93aWR0aDsNCiAgICBmbXRmbGFncyBfTV9mbGFnczsNCiAgICBpb3N0YXRlIF9N X2V4Y2VwdGlvbjsNCiAgICBpb3N0YXRlIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsNCg0KDQoNCiAgICBz dHJ1Y3QgX0NhbGxiYWNrX2xpc3QNCiAgICB7DQoNCiAgICAgIF9DYWxsYmFja19saXN0KiBfTV9u ZXh0Ow0KICAgICAgaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9NX2ZuOw0KICAgICAgaW50IF9N X2luZGV4Ow0KICAgICAgX0F0b21pY193b3JkIF9NX3JlZmNvdW50Ow0KDQogICAgICBfQ2FsbGJh Y2tfbGlzdChpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgsDQogICAg ICAgICAgICAgICAgICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYikNCiAgICAgIDogX01fbmV4dChf X2NiKSwgX01fZm4oX19mbiksIF9NX2luZGV4KF9faW5kZXgpLCBfTV9yZWZjb3VudCgwKSB7IH0N Cg0KICAgICAgdm9pZA0KICAgICAgX01fYWRkX3JlZmVyZW5jZSgpIHsgX19hdG9taWNfYWRkKCZf TV9yZWZjb3VudCwgMSk7IH0NCg0KDQogICAgICBpbnQNCiAgICAgIF9NX3JlbW92ZV9yZWZlcmVu Y2UoKSB7IHJldHVybiBfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmNvdW50LCAtMSk7IH0NCiAg ICB9Ow0KDQogICAgIF9DYWxsYmFja19saXN0KiBfTV9jYWxsYmFja3M7DQoNCiAgICB2b2lkDQog ICAgX01fY2FsbF9jYWxsYmFja3MoZXZlbnQgX19ldikgdGhyb3coKTsNCg0KICAgIHZvaWQNCiAg ICBfTV9kaXNwb3NlX2NhbGxiYWNrcyh2b2lkKTsNCg0KDQogICAgc3RydWN0IF9Xb3Jkcw0KICAg IHsNCiAgICAgIHZvaWQqIF9NX3B3b3JkOw0KICAgICAgbG9uZyBfTV9pd29yZDsNCiAgICAgIF9X b3JkcygpIDogX01fcHdvcmQoMCksIF9NX2l3b3JkKDApIHsgfQ0KICAgIH07DQoNCg0KICAgIF9X b3JkcyBfTV93b3JkX3plcm87DQoNCg0KICAgIHN0YXRpYyBjb25zdCBpbnQgX1NfbG9jYWxfd29y ZF9zaXplID0gODsNCiAgICBfV29yZHMgX01fbG9jYWxfd29yZFtfU19sb2NhbF93b3JkX3NpemVd Ow0KDQoNCiAgICBpbnQgX01fd29yZF9zaXplOw0KICAgIF9Xb3JkcyogX01fd29yZDsNCg0KICAg IF9Xb3JkcyYNCiAgICBfTV9ncm93X3dvcmRzKGludCBfX2luZGV4KTsNCg0KDQogICAgbG9jYWxl IF9NX2lvc19sb2NhbGU7DQoNCiAgICB2b2lkDQogICAgX01faW5pdCgpOw0KDQogIHB1YmxpYzoN Cg0KDQoNCg0KDQogICAgY2xhc3MgSW5pdA0KICAgIHsNCiAgICAgIGZyaWVuZCBjbGFzcyBpb3Nf YmFzZTsNCiAgICBwdWJsaWM6DQogICAgICBJbml0KCk7DQogICAgICB+SW5pdCgpOw0KDQogICAg ICBzdGF0aWMgdm9pZA0KICAgICAgX1NfaW9zX2NyZWF0ZShib29sIF9fc3luYyk7DQoNCiAgICAg IHN0YXRpYyB2b2lkDQogICAgICBfU19pb3NfZGVzdHJveSgpOw0KDQogICAgcHJpdmF0ZToNCiAg ICAgIHN0YXRpYyBpbnQgX1NfaW9zX2Jhc2VfaW5pdDsNCiAgICAgIHN0YXRpYyBib29sIF9TX3N5 bmNlZF93aXRoX3N0ZGlvOw0KICAgIH07DQoNCg0KICAgIGlubGluZSBmbXRmbGFncw0KICAgIGZs YWdzKCkgY29uc3QgeyByZXR1cm4gX01fZmxhZ3M7IH0NCg0KICAgIGlubGluZSBmbXRmbGFncw0K ICAgIGZsYWdzKGZtdGZsYWdzIF9fZm10ZmwpDQogICAgew0KICAgICAgZm10ZmxhZ3MgX19vbGQg PSBfTV9mbGFnczsNCiAgICAgIF9NX2ZsYWdzID0gX19mbXRmbDsNCiAgICAgIHJldHVybiBfX29s ZDsNCiAgICB9DQoNCiAgICBpbmxpbmUgZm10ZmxhZ3MNCiAgICBzZXRmKGZtdGZsYWdzIF9fZm10 ZmwpDQogICAgew0KICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsNCiAgICAgIF9NX2Zs YWdzIHw9IF9fZm10Zmw7DQogICAgICByZXR1cm4gX19vbGQ7DQogICAgfQ0KDQogICAgaW5saW5l IGZtdGZsYWdzDQogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsLCBmbXRmbGFncyBfX21hc2spDQog ICAgew0KICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsNCiAgICAgIF9NX2ZsYWdzICY9 IH5fX21hc2s7DQogICAgICBfTV9mbGFncyB8PSAoX19mbXRmbCAmIF9fbWFzayk7DQogICAgICBy ZXR1cm4gX19vbGQ7DQogICAgfQ0KDQogICAgaW5saW5lIHZvaWQNCiAgICB1bnNldGYoZm10Zmxh Z3MgX19tYXNrKSB7IF9NX2ZsYWdzICY9IH5fX21hc2s7IH0NCg0KICAgIGlubGluZSBzdHJlYW1z aXplDQogICAgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9DQoNCiAg ICBpbmxpbmUgc3RyZWFtc2l6ZQ0KICAgIHByZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykNCiAg ICB7DQogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fcHJlY2lzaW9uOw0KICAgICAgX01fcHJl Y2lzaW9uID0gX19wcmVjOw0KICAgICAgcmV0dXJuIF9fb2xkOw0KICAgIH0NCg0KICAgIGlubGlu ZSBzdHJlYW1zaXplDQogICAgd2lkdGgoKSBjb25zdCB7IHJldHVybiBfTV93aWR0aDsgfQ0KDQog ICAgaW5saW5lIHN0cmVhbXNpemUNCiAgICB3aWR0aChzdHJlYW1zaXplIF9fd2lkZSkNCiAgICB7 DQogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fd2lkdGg7DQogICAgICBfTV93aWR0aCA9IF9f d2lkZTsNCiAgICAgIHJldHVybiBfX29sZDsNCiAgICB9DQoNCiAgICBzdGF0aWMgYm9vbA0KICAg IHN5bmNfd2l0aF9zdGRpbyhib29sIF9fc3luYyA9IHRydWUpOw0KDQoNCiAgICBsb2NhbGUNCiAg ICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsNCg0KICAgIGlubGluZSBsb2NhbGUNCiAgICBn ZXRsb2MoKSBjb25zdCB7IHJldHVybiBfTV9pb3NfbG9jYWxlOyB9DQoNCg0KICAgIHN0YXRpYyBp bnQNCiAgICB4YWxsb2MoKSB0aHJvdygpOw0KDQogICAgaW5saW5lIGxvbmcmDQogICAgaXdvcmQo aW50IF9faXgpDQogICAgew0KICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRf c2l6ZSkNCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29yZFtfX2l4XSA6IF9NX2dyb3df d29yZHMoX19peCk7DQogICAgICByZXR1cm4gX193b3JkLl9NX2l3b3JkOw0KICAgIH0NCg0KICAg IGlubGluZSB2b2lkKiYNCiAgICBwd29yZChpbnQgX19peCkNCiAgICB7DQogICAgICBfV29yZHMm IF9fd29yZCA9IChfX2l4IDwgX01fd29yZF9zaXplKQ0KICAgICAgICAgICAgICAgICAgICAgICAg PyBfTV93b3JkW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsNCiAgICAgIHJldHVybiBfX3dv cmQuX01fcHdvcmQ7DQogICAgfQ0KDQoNCiAgICB+aW9zX2Jhc2UoKTsNCg0KICBwcm90ZWN0ZWQ6 DQogICAgaW9zX2Jhc2UoKTsNCg0KDQoNCiAgcHJpdmF0ZToNCiAgICBpb3NfYmFzZShjb25zdCBp b3NfYmFzZSYpOw0KDQogICAgaW9zX2Jhc2UmDQogICAgb3BlcmF0b3I9KGNvbnN0IGlvc19iYXNl Jik7DQoNCiAgfTsNCg0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgYm9vbGFscGhhKGlvc19iYXNl JiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsNCiAg ICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBub2Jvb2xhbHBo YShpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9v bGFscGhhKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0K ICBzaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19iYXNlLnNldGYoaW9zX2Jh c2U6OnNob3diYXNlKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19i YXNlJg0KICBub3Nob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2UudW5z ZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlu bGluZSBpb3NfYmFzZSYNCiAgc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBf X2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9 DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBub3Nob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQ0K ICB7DQogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsNCiAgICByZXR1cm4g X19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBzaG93cG9zKGlvc19iYXNlJiBf X2Jhc2UpDQogIHsNCiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7DQogICAgcmV0 dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgbm9zaG93cG9zKGlvc19i YXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsN CiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBza2lwd3Mo aW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpza2lwd3Mp Ow0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIG5vc2tp cHdzKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpz a2lwd3MpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQog IHVwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19iYXNlLnNldGYoaW9zX2Jh c2U6OnVwcGVyY2FzZSk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3Nf YmFzZSYNCiAgbm91cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS51 bnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQog IGlubGluZSBpb3NfYmFzZSYNCiAgdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAg IF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsNCiAgICAgcmV0dXJuIF9fYmFzZTsNCiAg fQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgbm91bml0YnVmKGlvc19iYXNlJiBfX2Jhc2UpDQog IHsNCiAgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7DQogICAgIHJldHVybiBf X2Jhc2U7DQogIH0NCg0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgaW50ZXJuYWwoaW9zX2Jhc2Um IF9fYmFzZSkNCiAgew0KICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aW50ZXJuYWwsIGlvc19i YXNlOjphZGp1c3RmaWVsZCk7DQogICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUg aW9zX2Jhc2UmDQogIGxlZnQoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS5zZXRm KGlvc19iYXNlOjpsZWZ0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOw0KICAgIHJldHVybiBfX2Jh c2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIHJpZ2h0KGlvc19iYXNlJiBfX2Jhc2Up DQogIHsNCiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6cmlnaHQsIGlvc19iYXNlOjphZGp1c3Rm aWVsZCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQoNCiAgaW5saW5lIGlvc19iYXNlJg0K ICBkZWMoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpk ZWMsIGlvc19iYXNlOjpiYXNlZmllbGQpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBp bmxpbmUgaW9zX2Jhc2UmDQogIGhleChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19iYXNl LnNldGYoaW9zX2Jhc2U6OmhleCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7DQogICAgcmV0dXJuIF9f YmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgb2N0KGlvc19iYXNlJiBfX2Jhc2Up DQogIHsNCiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6b2N0LCBpb3NfYmFzZTo6YmFzZWZpZWxk KTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIGZp eGVkKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Zml4 ZWQsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAg aW5saW5lIGlvc19iYXNlJg0KICBzY2llbnRpZmljKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAg ICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2NpZW50aWZpYywgaW9zX2Jhc2U6OmZsb2F0ZmllbGQp Ow0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KfQ0KIyA1MCAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvaW9zIiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVmIiAxIDMNCiMg NDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMw0KDQoNCg0KDQoNCg0KDQpuYW1l c3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4NCiAgICBzdHJlYW1zaXplDQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFy VCwgX1RyYWl0cz4mIF9pb3MsDQogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVm PF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwNCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19z dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCk7DQoNCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVm DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0K ICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFt ZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1l IHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg dHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYgY3R5cGU8 Y2hhcl90eXBlPiBfX2N0eXBlX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjxj aGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiB0 eXBlbmFtZSB0cmFpdHNfdHlwZTo6c3RhdGVfdHlwZSBfX3N0YXRlX3R5cGU7DQoNCiAgICAgIGZy aWVuZCBjbGFzcyBiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47DQogICAgICBmcmll bmQgY2xhc3MgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsNCiAgICAgIGZy aWVuZCBjbGFzcyBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+Ow0KICAgICAg ZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47 DQogICAgICBmcmllbmQgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0 c190eXBlPjsNCg0KICAgICAgZnJpZW5kIHN0cmVhbXNpemUNCiAgICAgIF9fY29weV9zdHJlYW1i dWZzPD4oYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+JiBfX2lvcywNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYmluLF9fc3RyZWFtYnVmX3R5 cGUqIF9fc2JvdXQpOw0KDQogICAgcHJvdGVjdGVkOg0KDQoNCg0KDQoNCiAgICAgIGNoYXJfdHlw ZSogX01fYnVmOw0KDQoNCiAgICAgIHNpemVfdCBfTV9idWZfc2l6ZTsNCg0KDQogICAgICBzaXpl X3QgX01fYnVmX3NpemVfb3B0Ow0KDQoNCg0KICAgICAgYm9vbCBfTV9idWZfdW5pZmllZDsNCg0K DQoNCg0KDQoNCiAgICAgIGNoYXJfdHlwZSogX01faW5fYmVnOw0KICAgICAgY2hhcl90eXBlKiBf TV9pbl9jdXI7DQogICAgICBjaGFyX3R5cGUqIF9NX2luX2VuZDsNCiAgICAgIGNoYXJfdHlwZSog X01fb3V0X2JlZzsNCiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2N1cjsNCiAgICAgIGNoYXJfdHlw ZSogX01fb3V0X2VuZDsNCg0KDQogICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX01fbW9kZTsNCg0K DQogICAgICBsb2NhbGUgX01fYnVmX2xvY2FsZTsNCg0KDQogICAgICBib29sIF9NX2J1Zl9sb2Nh bGVfaW5pdDsNCg0KDQoNCg0KDQoNCiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfcGJhY2tf c2l6ZSA9IDE7DQogICAgICBjaGFyX3R5cGUgX01fcGJhY2tbX1NfcGJhY2tfc2l6ZV07DQogICAg ICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZlOw0KICAgICAgY2hhcl90eXBlKiBfTV9wYmFj a19lbmRfc2F2ZTsNCiAgICAgIGJvb2wgX01fcGJhY2tfaW5pdDsNCg0KDQogICAgICBmcG9zPF9f c3RhdGVfdHlwZT4gX01fcG9zOw0KDQoNCg0KDQogICAgICB2b2lkDQogICAgICBfTV9wYmFja19j cmVhdGUoKQ0KICAgICAgew0KICAgICAgICBpZiAoIV9NX3BiYWNrX2luaXQpDQogICAgICAgICAg ew0KICAgICAgICAgICAgc2l6ZV90IF9fZGlzdCA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsNCiAg ICAgICAgICAgIHNpemVfdCBfX2xlbiA9IG1pbihfU19wYmFja19zaXplLCBfX2Rpc3QpOw0KICAg ICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fcGJhY2ssIF9NX2luX2N1ciwgX19sZW4pOw0K ICAgICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfTV9pbl9jdXI7DQogICAgICAgICAgICBf TV9wYmFja19lbmRfc2F2ZSA9IF9NX2luX2VuZDsNCiAgICAgICAgICAgIHRoaXMtPnNldGcoX01f cGJhY2ssIF9NX3BiYWNrLCBfTV9wYmFjayArIF9fbGVuKTsNCiAgICAgICAgICAgIF9NX3BiYWNr X2luaXQgPSB0cnVlOw0KICAgICAgICAgIH0NCiAgICAgIH0NCg0KDQoNCg0KICAgICAgdm9pZA0K ICAgICAgX01fcGJhY2tfZGVzdHJveSgpDQogICAgICB7DQogICAgICAgIGlmIChfTV9wYmFja19p bml0KQ0KICAgICAgICAgIHsNCg0KICAgICAgICAgICAgc2l6ZV90IF9fb2ZmX2N1ciA9IF9NX2lu X2N1ciAtIF9NX3BiYWNrOw0KDQoNCiAgICAgICAgICAgIHNpemVfdCBfX29mZl9lbmQgPSAwOw0K ICAgICAgICAgICAgc2l6ZV90IF9fcGJhY2tfbGVuID0gX01faW5fZW5kIC0gX01fcGJhY2s7DQog ICAgICAgICAgICBzaXplX3QgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fYnVm Ow0KICAgICAgICAgICAgaWYgKF9fcGJhY2tfbGVuID4gX19zYXZlX2xlbikNCiAgICAgICAgICAg ICAgX19vZmZfZW5kID0gX19wYmFja19sZW4gLSBfX3NhdmVfbGVuOw0KDQogICAgICAgICAgICB0 aGlzLT5zZXRnKF9NX2J1ZiwgX01fcGJhY2tfY3VyX3NhdmUgKyBfX29mZl9jdXIsDQogICAgICAg ICAgICAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlICsgX19vZmZfZW5kKTsNCiAgICAgICAg ICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gX19udWxsOw0KICAgICAgICAgICAgX01fcGJhY2tfZW5k X3NhdmUgPSBfX251bGw7DQogICAgICAgICAgICBfTV9wYmFja19pbml0ID0gZmFsc2U7DQogICAg ICAgICAgfQ0KICAgICAgfQ0KDQoNCg0KICAgICAgdm9pZA0KICAgICAgX01faW5fY3VyX21vdmUo b2ZmX3R5cGUgX19uKQ0KICAgICAgew0KICAgICAgICBib29sIF9fdGVzdG91dCA9IF9NX291dF9j dXI7DQogICAgICAgIF9NX2luX2N1ciArPSBfX247DQogICAgICAgIGlmIChfX3Rlc3RvdXQgJiYg X01fYnVmX3VuaWZpZWQpDQogICAgICAgICAgX01fb3V0X2N1ciArPSBfX247DQogICAgICB9DQoj IDIwMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVmIiAzDQogICAgICB2b2lkDQogICAg ICBfTV9vdXRfY3VyX21vdmUob2ZmX3R5cGUgX19uKQ0KICAgICAgew0KICAgICAgICBib29sIF9f dGVzdGluID0gX01faW5fY3VyOw0KDQogICAgICAgIF9NX291dF9jdXIgKz0gX19uOw0KICAgICAg ICBpZiAoX190ZXN0aW4gJiYgX01fYnVmX3VuaWZpZWQpDQogICAgICAgICAgX01faW5fY3VyICs9 IF9fbjsNCiAgICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9vdXRfZW5kKQ0KICAgICAgICAgIHsN CiAgICAgICAgICAgIF9NX291dF9lbmQgPSBfTV9vdXRfY3VyOw0KDQogICAgICAgICAgICBpZiAo X190ZXN0aW4pDQogICAgICAgICAgICAgIF9NX2luX2VuZCArPSBfX247DQogICAgICAgICAgfQ0K ICAgICAgfQ0KDQoNCg0KDQogICAgICBvZmZfdHlwZQ0KICAgICAgX01fb3V0X2J1Zl9zaXplKCkN CiAgICAgIHsNCiAgICAgICAgb2ZmX3R5cGUgX19yZXQgPSAwOw0KICAgICAgICBpZiAoX01fb3V0 X2N1cikNCiAgICAgICAgICB7DQoNCiAgICAgICAgICAgIGlmIChfTV9vdXRfYmVnID09IF9NX2J1 ZikNCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnICsgX01fYnVmX3NpemUgLSBfTV9v dXRfY3VyOw0KDQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0 X2VuZCAtIF9NX291dF9jdXI7DQogICAgICAgICAgfQ0KICAgICAgICByZXR1cm4gX19yZXQ7DQog ICAgICB9DQoNCiAgcHVibGljOg0KICAgICAgdmlydHVhbA0KICAgICAgfmJhc2ljX3N0cmVhbWJ1 ZigpDQogICAgICB7DQogICAgICAgIF9NX2J1Zl91bmlmaWVkID0gZmFsc2U7DQogICAgICAgIF9N X2J1Zl9zaXplID0gMDsNCiAgICAgICAgX01fYnVmX3NpemVfb3B0ID0gMDsNCiAgICAgICAgX01f bW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgwKTsNCiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0 ID0gZmFsc2U7DQogICAgICB9DQoNCg0KICAgICAgbG9jYWxlDQogICAgICBwdWJpbWJ1ZShjb25z dCBsb2NhbGUgJl9fbG9jKQ0KICAgICAgew0KICAgICAgICBsb2NhbGUgX190bXAodGhpcy0+Z2V0 bG9jKCkpOw0KICAgICAgICB0aGlzLT5pbWJ1ZShfX2xvYyk7DQogICAgICAgIHJldHVybiBfX3Rt cDsNCiAgICAgIH0NCg0KICAgICAgbG9jYWxlDQogICAgICBnZXRsb2MoKSBjb25zdA0KICAgICAg ew0KICAgICAgICBpZiAoX01fYnVmX2xvY2FsZV9pbml0KQ0KICAgICAgICAgIHJldHVybiBfTV9i dWZfbG9jYWxlOw0KICAgICAgICBlbHNlDQogICAgICAgICAgcmV0dXJuIGxvY2FsZSgpOw0KICAg ICAgfQ0KDQoNCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqDQogICAgICBwdWJzZXRidWYoY2hhcl90 eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+c2V0YnVmKF9f cywgX19uKTsgfQ0KDQogICAgICBwb3NfdHlwZQ0KICAgICAgcHVic2Vla29mZihvZmZfdHlwZSBf X29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksDQogICAgICAgICAgICAgICAgIGlvc19iYXNl OjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAg eyByZXR1cm4gdGhpcy0+c2Vla29mZihfX29mZiwgX193YXksIF9fbW9kZSk7IH0NCg0KICAgICAg cG9zX3R5cGUNCiAgICAgIHB1YnNlZWtwb3MocG9zX3R5cGUgX19zcCwNCiAgICAgICAgICAgICAg ICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpv dXQpDQogICAgICB7IHJldHVybiB0aGlzLT5zZWVrcG9zKF9fc3AsIF9fbW9kZSk7IH0NCg0KICAg ICAgaW50DQogICAgICBwdWJzeW5jKCkgeyByZXR1cm4gdGhpcy0+c3luYygpOyB9DQoNCg0KDQog ICAgICBzdHJlYW1zaXplDQogICAgICBpbl9hdmFpbCgpDQogICAgICB7DQogICAgICAgIHN0cmVh bXNpemUgX19yZXQ7DQogICAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5f ZW5kKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIGlmIChfTV9wYmFja19pbml0KQ0KICAgICAg ICAgICAgICB7DQogICAgICAgICAgICAgICAgc2l6ZV90IF9fc2F2ZV9sZW4gPSBfTV9wYmFja19l bmRfc2F2ZSAtIF9NX3BiYWNrX2N1cl9zYXZlOw0KICAgICAgICAgICAgICAgIHNpemVfdCBfX3Bi YWNrX2xlbiA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOw0KICAgICAgICAgICAgICAgIF9fcmV0ID0g X19zYXZlX2xlbiAtIF9fcGJhY2tfbGVuOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICBl bHNlDQogICAgICAgICAgICAgIF9fcmV0ID0gdGhpcy0+ZWdwdHIoKSAtIHRoaXMtPmdwdHIoKTsN CiAgICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgICBfX3JldCA9IHRoaXMtPnNob3dt YW55YygpOw0KICAgICAgICByZXR1cm4gX19yZXQ7DQogICAgICB9DQoNCiAgICAgIGludF90eXBl DQogICAgICBzbmV4dGMoKQ0KICAgICAgew0KICAgICAgICBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0 c190eXBlOjplb2YoKTsNCiAgICAgICAgcmV0dXJuICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUo dGhpcy0+c2J1bXBjKCksIF9fZW9mKQ0KICAgICAgICAgICAgICAgID8gX19lb2YgOiB0aGlzLT5z Z2V0YygpKTsNCiAgICAgIH0NCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHNidW1wYygpOw0KDQog ICAgICBpbnRfdHlwZQ0KICAgICAgc2dldGMoKQ0KICAgICAgew0KICAgICAgICBpbnRfdHlwZSBf X3JldDsNCiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpDQog ICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKih0aGlzLT5ncHRyKCkp KTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIF9fcmV0ID0gdGhpcy0+dW5kZXJmbG93KCk7DQog ICAgICAgIHJldHVybiBfX3JldDsNCiAgICAgIH0NCg0KICAgICAgc3RyZWFtc2l6ZQ0KICAgICAg c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgICAgeyByZXR1cm4gdGhp cy0+eHNnZXRuKF9fcywgX19uKTsgfQ0KDQoNCiAgICAgIGludF90eXBlDQogICAgICBzcHV0YmFj a2MoY2hhcl90eXBlIF9fYyk7DQoNCiAgICAgIGludF90eXBlDQogICAgICBzdW5nZXRjKCk7DQoN Cg0KICAgICAgaW50X3R5cGUNCiAgICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpOw0KDQogICAgICBz dHJlYW1zaXplDQogICAgICBzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf X24pDQogICAgICB7IHJldHVybiB0aGlzLT54c3B1dG4oX19zLCBfX24pOyB9DQoNCiAgICBwcm90 ZWN0ZWQ6DQogICAgICBiYXNpY19zdHJlYW1idWYoKQ0KICAgICAgOiBfTV9idWYoX19udWxsKSwg X01fYnVmX3NpemUoMCksIF9NX2J1Zl9zaXplX29wdCgxMDI0KSwNCiAgICAgIF9NX2J1Zl91bmlm aWVkKGZhbHNlKSwgX01faW5fYmVnKDApLCBfTV9pbl9jdXIoMCksIF9NX2luX2VuZCgwKSwNCiAg ICAgIF9NX291dF9iZWcoMCksIF9NX291dF9jdXIoMCksIF9NX291dF9lbmQoMCksDQogICAgICBf TV9tb2RlKGlvc19iYXNlOjpvcGVubW9kZSgwKSksIF9NX2J1Zl9sb2NhbGUobG9jYWxlKCkpLA0K ICAgICAgX01fYnVmX2xvY2FsZV9pbml0KGZhbHNlKSwgX01fcGJhY2tfY3VyX3NhdmUoMCksIF9N X3BiYWNrX2VuZF9zYXZlKDApLA0KICAgICAgX01fcGJhY2tfaW5pdChmYWxzZSkNCiAgICAgIHsg fQ0KDQoNCiAgICAgIGNoYXJfdHlwZSoNCiAgICAgIGViYWNrKCkgY29uc3QgeyByZXR1cm4gX01f aW5fYmVnOyB9DQoNCiAgICAgIGNoYXJfdHlwZSoNCiAgICAgIGdwdHIoKSBjb25zdCB7IHJldHVy biBfTV9pbl9jdXI7IH0NCg0KICAgICAgY2hhcl90eXBlKg0KICAgICAgZWdwdHIoKSBjb25zdCB7 IHJldHVybiBfTV9pbl9lbmQ7IH0NCg0KICAgICAgdm9pZA0KICAgICAgZ2J1bXAoaW50IF9fbikg eyBfTV9pbl9jdXIgKz0gX19uOyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHNldGcoY2hhcl90eXBl KiBfX2diZWcsIGNoYXJfdHlwZSogX19nbmV4dCwgY2hhcl90eXBlKiBfX2dlbmQpDQogICAgICB7 DQogICAgICAgIF9NX2luX2JlZyA9IF9fZ2JlZzsNCiAgICAgICAgX01faW5fY3VyID0gX19nbmV4 dDsNCiAgICAgICAgX01faW5fZW5kID0gX19nZW5kOw0KICAgICAgICBpZiAoIShfTV9tb2RlICYg aW9zX2Jhc2U6OmluKSAmJiBfX2diZWcgJiYgX19nbmV4dCAmJiBfX2dlbmQpDQogICAgICAgICAg X01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6aW47DQogICAgICB9DQoNCg0KICAgICAgY2hh cl90eXBlKg0KICAgICAgcGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfYmVnOyB9DQoNCiAg ICAgIGNoYXJfdHlwZSoNCiAgICAgIHBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfY3VyOyB9 DQoNCiAgICAgIGNoYXJfdHlwZSoNCiAgICAgIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0 X2VuZDsgfQ0KDQogICAgICB2b2lkDQogICAgICBwYnVtcChpbnQgX19uKSB7IF9NX291dF9jdXIg Kz0gX19uOyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHNldHAoY2hhcl90eXBlKiBfX3BiZWcsIGNo YXJfdHlwZSogX19wZW5kKQ0KICAgICAgew0KICAgICAgICBfTV9vdXRfYmVnID0gX01fb3V0X2N1 ciA9IF9fcGJlZzsNCiAgICAgICAgX01fb3V0X2VuZCA9IF9fcGVuZDsNCiAgICAgICAgaWYgKCEo X01fbW9kZSAmIGlvc19iYXNlOjpvdXQpICYmIF9fcGJlZyAmJiBfX3BlbmQpDQogICAgICAgICAg X01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6b3V0Ow0KICAgICAgfQ0KDQoNCg0KICAgICAg dmlydHVhbCB2b2lkDQogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgICAgew0K ICAgICAgICBfTV9idWZfbG9jYWxlX2luaXQgPSB0cnVlOw0KICAgICAgICBpZiAoX01fYnVmX2xv Y2FsZSAhPSBfX2xvYykNCiAgICAgICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7DQogICAgICB9 DQoNCg0KICAgICAgdmlydHVhbCBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLF9UcmFpdHM+Kg0K ICAgICAgc2V0YnVmKGNoYXJfdHlwZSosIHN0cmVhbXNpemUpDQogICAgICB7IHJldHVybiB0aGlz OyB9DQoNCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUNCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlv c19iYXNlOjpzZWVrZGlyLA0KICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3Nf YmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5 cGUoLTEpKTsgfQ0KDQogICAgICB2aXJ0dWFsIHBvc190eXBlDQogICAgICBzZWVrcG9zKHBvc190 eXBlLA0KICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBp b3NfYmFzZTo6b3V0KQ0KICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsgfQ0K DQogICAgICB2aXJ0dWFsIGludA0KICAgICAgc3luYygpIHsgcmV0dXJuIDA7IH0NCg0KDQogICAg ICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAgIHNob3dtYW55YygpIHsgcmV0dXJuIDA7IH0NCg0K ICAgICAgdmlydHVhbCBzdHJlYW1zaXplDQogICAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0 cmVhbXNpemUgX19uKTsNCg0KICAgICAgdmlydHVhbCBpbnRfdHlwZQ0KICAgICAgdW5kZXJmbG93 KCkNCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQ0KDQogICAgICB2aXJ0dWFs IGludF90eXBlDQogICAgICB1ZmxvdygpDQogICAgICB7DQogICAgICAgIGludF90eXBlIF9fcmV0 ID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190 eXBlOjplcV9pbnRfdHlwZSh0aGlzLT51bmRlcmZsb3coKSwgX19yZXQpOw0KICAgICAgICBib29s IF9fdGVzdHBlbmRpbmcgPSBfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kOw0KICAg ICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RwZW5kaW5nKQ0KICAgICAgICAgIHsNCiAgICAg ICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOw0KICAg ICAgICAgICAgKytfTV9pbl9jdXI7DQogICAgICAgICAgICBpZiAoX01fYnVmX3VuaWZpZWQgJiYg X01fbW9kZSAmIGlvc19iYXNlOjpvdXQpDQogICAgICAgICAgICAgICsrX01fb3V0X2N1cjsNCiAg ICAgICAgICB9DQogICAgICAgIHJldHVybiBfX3JldDsNCiAgICAgIH0NCg0KDQogICAgICB2aXJ0 dWFsIGludF90eXBlDQogICAgICBwYmFja2ZhaWwoaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9m KCkpDQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0NCg0KDQogICAgICB2aXJ0 dWFsIHN0cmVhbXNpemUNCiAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFt c2l6ZSBfX24pOw0KDQogICAgICB2aXJ0dWFsIGludF90eXBlDQogICAgICBvdmVyZmxvdyhpbnRf dHlwZSA9IHRyYWl0c190eXBlOjplb2YoKSkNCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjpl b2YoKTsgfQ0KIyA0ODUgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMw0KICAgIHBy aXZhdGU6DQogICAgICBiYXNpY19zdHJlYW1idWYoY29uc3QgX19zdHJlYW1idWZfdHlwZSYpIHsg fTsNCg0KICAgICAgX19zdHJlYW1idWZfdHlwZSYNCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX3N0 cmVhbWJ1Zl90eXBlJikgeyByZXR1cm4gKnRoaXM7IH07DQoNCiAgICB9Ow0KfQ0KDQoNCg0KDQoN CiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJlYW1idWYudGNjIiAxIDMNCiMgMzkg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RyZWFtYnVmLnRjYyIgMw0KDQpuYW1lc3BhY2Ug c3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAg ICBjb25zdCBzaXplX3QNCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6X1Nf cGJhY2tfc2l6ZTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+DQogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90 eXBlDQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHNidW1wYygp DQogICAgew0KICAgICAgaW50X3R5cGUgX19yZXQ7DQogICAgICBpZiAoX01faW5fY3VyICYmIF9N X2luX2N1ciA8IF9NX2luX2VuZCkNCiAgICAgICAgew0KICAgICAgICAgIGNoYXJfdHlwZSBfX2Mg PSAqKHRoaXMtPmdwdHIoKSk7DQogICAgICAgICAgX01faW5fY3VyX21vdmUoMSk7DQogICAgICAg ICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsNCiAgICAgICAgfQ0KICAg ICAgZWxzZQ0KICAgICAgICBfX3JldCA9IHRoaXMtPnVmbG93KCk7DQogICAgICByZXR1cm4gX19y ZXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4NCiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5 cGUNCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6DQogICAgc3B1dGJhY2tj KGNoYXJfdHlwZSBfX2MpDQogICAgew0KICAgICAgaW50X3R5cGUgX19yZXQ7DQogICAgICBib29s IF9fdGVzdHBvcyA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7DQogICAgICBi b29sIF9fdGVzdG5lID0gX01faW5fY3VyICYmICF0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlzLT5n cHRyKClbLTFdKTsNCiAgICAgIGlmICghX190ZXN0cG9zIHx8IF9fdGVzdG5lKQ0KICAgICAgICBf X3JldCA9IHBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7DQogICAgICBl bHNlDQogICAgICAgIHsNCiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7DQogICAgICAgICAg X19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7DQogICAgICAg IH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh clQsIF9UcmFpdHM+OjppbnRfdHlwZQ0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp dHM+OjoNCiAgICBzdW5nZXRjKCkNCiAgICB7DQogICAgICBpbnRfdHlwZSBfX3JldDsNCiAgICAg IGlmIChfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyKQ0KICAgICAgICB7DQogICAg ICAgICAgX01faW5fY3VyX21vdmUoLTEpOw0KICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6 OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOw0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAg IF9fcmV0ID0gdGhpcy0+cGJhY2tmYWlsKCk7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0K DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ DQogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBl DQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHNwdXRjKGNoYXJf dHlwZSBfX2MpDQogICAgew0KICAgICAgaW50X3R5cGUgX19yZXQ7DQogICAgICBpZiAoX01fb3V0 X2J1Zl9zaXplKCkpDQogICAgICAgIHsNCiAgICAgICAgICAqX01fb3V0X2N1ciA9IF9fYzsNCiAg ICAgICAgICBfTV9vdXRfY3VyX21vdmUoMSk7DQogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlw ZTo6dG9faW50X3R5cGUoX19jKTsNCiAgICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICBfX3Jl dCA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsNCiAgICAg IHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPg0KICAgIHN0cmVhbXNpemUNCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJU LCBfVHJhaXRzPjo6DQogICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikN CiAgICB7DQogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsNCiAgICAgIHdoaWxlIChfX3JldCA8 IF9fbikNCiAgICAgICAgew0KICAgICAgICAgIHNpemVfdCBfX2J1Zl9sZW4gPSBfTV9pbl9lbmQg LSBfTV9pbl9jdXI7DQogICAgICAgICAgaWYgKF9fYnVmX2xlbiA+IDApDQogICAgICAgICAgICB7 DQogICAgICAgICAgICAgIHNpemVfdCBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0Ow0KICAgICAg ICAgICAgICBzaXplX3QgX19sZW4gPSBtaW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7DQogICAg ICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01faW5fY3VyLCBfX2xlbik7DQogICAg ICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOw0KICAgICAgICAgICAgICBfX3MgKz0gX19sZW47DQog ICAgICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKF9fbGVuKTsNCiAgICAgICAgICAgIH0NCg0KICAg ICAgICAgIGlmIChfX3JldCA8IF9fbikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW50 X3R5cGUgX19jID0gdGhpcy0+dWZsb3coKTsNCiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlw ZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQ0KICAgICAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcysrLCB0cmFpdHNf dHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOw0KICAgICAgICAgICAgICAgICAgKytfX3JldDsNCiAg ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICBicmVh azsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0N Cg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz Pg0KICAgIHN0cmVhbXNpemUNCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6 DQogICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICB7 DQogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsNCiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikN CiAgICAgICAgew0KICAgICAgICAgIG9mZl90eXBlIF9fYnVmX2xlbiA9IF9NX291dF9idWZfc2l6 ZSgpOw0KICAgICAgICAgIGlmIChfX2J1Zl9sZW4gPiAwKQ0KICAgICAgICAgICAgew0KICAgICAg ICAgICAgICBvZmZfdHlwZSBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0Ow0KICAgICAgICAgICAg ICBvZmZfdHlwZSBfX2xlbiA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsNCiAgICAgICAg ICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fb3V0X2N1ciwgX19zLCBfX2xlbik7DQogICAgICAg ICAgICAgIF9fcmV0ICs9IF9fbGVuOw0KICAgICAgICAgICAgICBfX3MgKz0gX19sZW47DQogICAg ICAgICAgICAgIF9NX291dF9jdXJfbW92ZShfX2xlbik7DQogICAgICAgICAgICB9DQoNCiAgICAg ICAgICBpZiAoX19yZXQgPCBfX24pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGludF90 eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX19zKSk7 DQogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgdHJhaXRz X3R5cGU6OmVvZigpKSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICArK19f cmV0Ow0KICAgICAgICAgICAgICAgICAgKytfX3M7DQogICAgICAgICAgICAgICAgfQ0KICAgICAg ICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAg ICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFtc2l6ZQ0KICAgIF9f Y29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfX2lvcywNCiAgICAg ICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmlu LA0KICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+ KiBfX3Nib3V0KQ0KICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBl IGludF90eXBlOw0KDQogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsNCiAgICAgIHN0cmVhbXNp emUgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOw0KICAgICAgc3RyZWFtc2l6ZSBfX3h0 cmN0Ow0KICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfX3Nib3V0LT5fTV9tb2RlICYgaW9zX2Jhc2U6 Om91dDsNCiAgICAgIHRyeQ0KICAgICAgICB7DQogICAgICAgICAgd2hpbGUgKF9fdGVzdHB1dCAm JiBfX2J1ZnNpemUgIT0gLTEpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9feHRyY3Qg PSBfX3Nib3V0LT5zcHV0bihfX3NiaW4tPmdwdHIoKSwgX19idWZzaXplKTsNCiAgICAgICAgICAg ICAgX19yZXQgKz0gX194dHJjdDsNCiAgICAgICAgICAgICAgX19zYmluLT5fTV9pbl9jdXJfbW92 ZShfX3h0cmN0KTsNCiAgICAgICAgICAgICAgaWYgKF9feHRyY3QgPT0gX19idWZzaXplKQ0KICAg ICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlw ZShfX3NiaW4tPnNnZXRjKCksIF9UcmFpdHM6OmVvZigpKSkNCiAgICAgICAgICAgICAgICAgICAg YnJlYWs7DQogICAgICAgICAgICAgICAgICBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7 DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAg YnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg X19mYWlsKQ0KICAgICAgICB7DQogICAgICAgICAgX19pb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmZh aWxiaXQpOw0KICAgICAgICAgIGlmICgoX19pb3MuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmZh aWxiaXQpICE9IDApDQogICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJu IF9fcmV0Ow0KICAgIH0NCg0KDQoNCg0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3Ry ZWFtYnVmPGNoYXI+Ow0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBzdHJlYW1zaXplDQogICAgX19j b3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPGNoYXI+JiwgYmFzaWNfc3RyZWFtYnVmPGNoYXI+KiwN CiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8Y2hhcj4qKTsNCg0KICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+Ow0KICBleHRlcm4gdGVt cGxhdGUNCiAgICBzdHJlYW1zaXplDQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPHdj aGFyX3Q+JiwgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+KiwNCiAgICAgICAgICAgICAgICAgICAg ICBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4qKTsNCn0NCiMgNDk5ICIvdXNyL2luY2x1ZGUvYysr LzMuMi9zdHJlYW1idWYiIDIgMw0KIyA1MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAyIDMN CiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MuaCIgMSAzDQojIDM5ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy5oIiAzDQoNCiMgMSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdHJlYW1idWZfaXRlcmF0b3IuaCIgMSAzDQojIDQyICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oIiAzDQoNCm5hbWVzcGFjZSBz dGQNCnsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQog ICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcg0KICAgIDogcHVibGljIGl0ZXJhdG9yPGlucHV0 X2l0ZXJhdG9yX3RhZywgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSwNCiAgICAg ICAgICAgICAgICAgICAgICBfQ2hhclQqLCBfQ2hhclQmPg0KICAgIHsNCiAgICBwdWJsaWM6DQoN CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0 cmFpdHNfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50 X3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IHN0 cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4gaXN0cmVhbV90eXBlOw0KDQogICAgcHJpdmF0ZToNCg0KDQoNCg0KDQoNCg0KICAgICAgbXV0 YWJsZSBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsNCiAgICAgIGludF90eXBlIF9NX2M7DQoNCiAg ICBwdWJsaWM6DQogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKCkgdGhyb3coKQ0KICAgICAgOiBf TV9zYnVmKDApLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9DQoNCiAgICAgIGlzdHJlYW1i dWZfaXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIHRocm93KCkNCiAgICAgIDogX01fc2J1Zihf X3MucmRidWYoKSksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigpKSB7IH0NCg0KICAgICAgaXN0cmVh bWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdygpDQogICAgICA6IF9NX3Ni dWYoX19zKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsgfQ0KDQoNCiAgICAgIGNoYXJfdHlw ZQ0KICAgICAgb3BlcmF0b3IqKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjp0 b19jaGFyX3R5cGUoX01fZ2V0KCkpOyB9DQoNCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3ImDQog ICAgICBvcGVyYXRvcisrKCkNCiAgICAgIHsNCiAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2Yg PSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgIGlmIChfTV9zYnVmICYmIHRyYWl0c190eXBl OjplcV9pbnRfdHlwZShfTV9zYnVmLT5zYnVtcGMoKSwgX19lb2YpKQ0KICAgICAgICAgIF9NX3Ni dWYgPSAwOw0KICAgICAgICBlbHNlDQogICAgICAgICAgX01fYyA9IF9fZW9mOw0KICAgICAgICBy ZXR1cm4gKnRoaXM7DQogICAgICB9DQoNCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3INCiAgICAg IG9wZXJhdG9yKysoaW50KQ0KICAgICAgew0KICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9 IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvciBfX29sZCA9 ICp0aGlzOw0KICAgICAgICBpZiAoX01fc2J1Zg0KICAgICAgICAgICAgJiYgdHJhaXRzX3R5cGU6 OmVxX2ludF90eXBlKChfX29sZC5fTV9jID0gX01fc2J1Zi0+c2J1bXBjKCkpLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZW9mKSkNCiAgICAgICAgICBfTV9zYnVm ID0gMDsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIF9NX2MgPSBfX2VvZjsNCiAgICAgICAgcmV0 dXJuIF9fb2xkOw0KICAgICAgfQ0KDQoNCg0KDQogICAgICBib29sDQogICAgICBlcXVhbChjb25z dCBpc3RyZWFtYnVmX2l0ZXJhdG9yJiBfX2IpIGNvbnN0DQogICAgICB7DQogICAgICAgIGNvbnN0 IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICBib29sIF9fdGhp c2VvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9nZXQoKSwgX19lb2YpOw0KICAgICAg ICBib29sIF9fYmVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2IuX01fZ2V0KCksIF9f ZW9mKTsNCiAgICAgICAgcmV0dXJuIChfX3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9m ICYmICFfX2Jlb2YpKTsNCiAgICAgIH0NCg0KDQogICAgcHJpdmF0ZToNCiAgICAgIGludF90eXBl DQogICAgICBfTV9nZXQoKSBjb25zdA0KICAgICAgew0KICAgICAgICBjb25zdCBpbnRfdHlwZSBf X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgaW50X3R5cGUgX19yZXQgPSBfX2Vv ZjsNCiAgICAgICAgaWYgKF9NX3NidWYpDQogICAgICAgICAgew0KICAgICAgICAgICAgaWYgKCF0 cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fYywgX19lb2YpKQ0KICAgICAgICAgICAgICBfX3Jl dCA9IF9NX2M7DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlw ZTo6ZXFfaW50X3R5cGUoKF9fcmV0ID0gX01fc2J1Zi0+c2dldGMoKSksIF9fZW9mKSkNCiAgICAg ICAgICAgICAgICBfTV9zYnVmID0gMDsNCiAgICAgICAgICB9DQogICAgICAgIHJldHVybiBfX3Jl dDsNCiAgICAgIH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVh bWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsDQogICAgICAgICAgICAgICBjb25z dCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikNCiAgICB7IHJldHVy biBfX2EuZXF1YWwoX19iKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0cmVh bWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsDQogICAgICAgICAgICAgICBjb25z dCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikNCiAgICB7IHJldHVy biAhX19hLmVxdWFsKF9fYik7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+DQogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcg0KICAgIDogcHVibGlj IGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+DQog ICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAg ICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJl YW1idWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsNCg0KICAgIHByaXZhdGU6 DQogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsNCiAgICAgIGJvb2wgX01fZmFpbGVkOw0K DQogICAgcHVibGljOg0KICAgICAgaW5saW5lDQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9z dHJlYW1fdHlwZSYgX19zKSB0aHJvdyAoKQ0KICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwg X01fZmFpbGVkKCFfTV9zYnVmKSB7IH0NCg0KICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihzdHJl YW1idWZfdHlwZSogX19zKSB0aHJvdyAoKQ0KICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2ZhaWxl ZCghX01fc2J1ZikgeyB9DQoNCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImDQogICAgICBvcGVy YXRvcj0oX0NoYXJUIF9fYyk7DQoNCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImDQogICAgICBv cGVyYXRvciooKSB0aHJvdygpDQogICAgICB7IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBvc3Ry ZWFtYnVmX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3IrKyhpbnQpIHRocm93KCkNCiAgICAgIHsg cmV0dXJuICp0aGlzOyB9DQoNCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImDQogICAgICBvcGVy YXRvcisrKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gKnRoaXM7IH0NCg0KICAgICAgYm9vbA0K ICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gX01fZmFpbGVkOyB9 DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ DQogICAgaW5saW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYNCiAgICBv c3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPShfQ2hhclQgX19j KQ0KICAgIHsNCiAgICAgIGlmICghX01fZmFpbGVkICYmDQogICAgICAgICAgX1RyYWl0czo6ZXFf aW50X3R5cGUoX01fc2J1Zi0+c3B1dGMoX19jKSwgX1RyYWl0czo6ZW9mKCkpKQ0KICAgICAgICBf TV9mYWlsZWQgPSB0cnVlOw0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCn0NCiMgNDEgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLmgiIDIgMw0KIyAxICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMSAzDQojIDQ0ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMw0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvY3djdHlwZSIgMSAzDQojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAz DQoNCg0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAxIDMNCg0KDQoNCg0KDQoNCg0K IyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGRlZi5o IiAxIDMNCiMgOSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMNCg0KDQoNCg0KDQpleHRlcm4g IkMiIHsNCg0KDQoNCnR5cGVkZWYgaW50IHdjdHlwZV90Ow0KDQoNCg0KDQp0eXBlZGVmIGludCB3 Y3RyYW5zX3Q7DQoNCg0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzd2FscGhhICh3 aW50X3QpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzd2FsbnVtICh3aW50X3Qp Ow0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzd2JsYW5rICh3aW50X3QpOw0KaW50 IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzd2NudHJsICh3aW50X3QpOw0KaW50IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIGlzd2N0eXBlICh3aW50X3QsIHdjdHlwZV90KTsNCmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3dkaWdpdCAod2ludF90KTsNCmludCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBpc3dncmFwaCAod2ludF90KTsNCmludCBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBpc3dsb3dlciAod2ludF90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSBpc3dwcmludCAod2ludF90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBpc3dwdW5jdCAod2ludF90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3dz cGFjZSAod2ludF90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3d1cHBlciAo d2ludF90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3d4ZGlnaXQgKHdpbnRf dCk7DQp3aW50X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdG93Y3RyYW5zICh3aW50X3Qs IHdjdHJhbnNfdCk7DQp3aW50X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdG93dXBwZXIg KHdpbnRfdCk7DQp3aW50X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdG93bG93ZXIgKHdp bnRfdCk7DQp3Y3RyYW5zX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2N0cmFucyAoY29u c3QgY2hhciAqKTsNCndjdHlwZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdjdHlwZSAo Y29uc3QgY2hhciAqKTsNCg0KfQ0KIyA1MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djdHlwZSIg MiAzDQojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAz DQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIgMSAzDQojIDQ4ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0K DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ DQogICAgc3RydWN0IF9fcGFkOw0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pNjg2 LXBjLWN5Z3dpbi9iaXRzL2N0eXBlX2Jhc2UuaCIgMSAzDQojIDM4ICIvdXNyL2luY2x1ZGUvYysr LzMuMi9pNjg2LXBjLWN5Z3dpbi9iaXRzL2N0eXBlX2Jhc2UuaCIgMw0KICBzdHJ1Y3QgY3R5cGVf YmFzZQ0KICB7DQoNCiAgICB0eXBlZGVmIGNvbnN0IGludCogX190b190eXBlOw0KDQoNCg0KICAg IHR5cGVkZWYgY2hhciBtYXNrOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIHVwcGVyID0gMDE7DQog ICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSAwMjsNCiAgICBzdGF0aWMgY29uc3QgbWFzayBh bHBoYSA9IDAxIHwgMDI7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgZGlnaXQgPSAwNDsNCiAgICBz dGF0aWMgY29uc3QgbWFzayB4ZGlnaXQgPSAwMTAwIHwgMDQ7DQogICAgc3RhdGljIGNvbnN0IG1h c2sgc3BhY2UgPSAwMTA7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSAwMjAgfCAwMSB8 IDAyIHwgMDQgfCAwMjAwOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIGdyYXBoID0gMDIwIHwgMDEg fCAwMiB8IDA0Ow0KICAgIHN0YXRpYyBjb25zdCBtYXNrIGNudHJsID0gMDQwOw0KICAgIHN0YXRp YyBjb25zdCBtYXNrIHB1bmN0ID0gMDIwOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVtID0g MDEgfCAwMiB8IDA0Ow0KICB9Ow0KIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2Nh bGVfZmFjZXRzLmgiIDIgMw0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNs YXNzIF9fY3R5cGVfYWJzdHJhY3RfYmFzZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMg Y3R5cGVfYmFzZQ0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsNCg0KICAgICAgYm9vbA0KICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2Mp IGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19pcyhfX20sIF9fYyk7IH0NCg0KICAgICAg Y29uc3QgY2hhcl90eXBlKg0KICAgICAgaXMoY29uc3QgY2hhcl90eXBlICpfX2xvLCBjb25zdCBj aGFyX3R5cGUgKl9faGksIG1hc2sgKl9fdmVjKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ ZG9faXMoX19sbywgX19oaSwgX192ZWMpOyB9DQoNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoNCiAg ICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90 eXBlKiBfX2hpKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9f bG8sIF9faGkpOyB9DQoNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIHNjYW5fbm90KG1h c2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29u c3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3NjYW5fbm90KF9fbSwgX19sbywgX19oaSk7IH0N Cg0KICAgICAgY2hhcl90eXBlDQogICAgICB0b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0DQog ICAgICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fYyk7IH0NCg0KICAgICAgY29uc3QgY2hh cl90eXBlKg0KICAgICAgdG91cHBlcihjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSog X19oaSkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19sbywgX19oaSk7 IH0NCg0KICAgICAgY2hhcl90eXBlDQogICAgICB0b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0 DQogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fYyk7IH0NCg0KICAgICAgY29uc3Qg Y2hhcl90eXBlKg0KICAgICAgdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw ZSogX19oaSkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19sbywgX19o aSk7IH0NCg0KICAgICAgY2hhcl90eXBlDQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3QNCiAg ICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7IH0NCg0KICAgICAgY29uc3QgY2hhcioN CiAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlw ZSogX190bykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fbG8sIF9faGks IF9fdG8pOyB9DQoNCiAgICAgIGNoYXINCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFy IF9fZGZhdWx0KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fYywgX19k ZmF1bHQpOyB9DQoNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIG5hcnJvdyhjb25zdCBj aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwNCiAgICAgICAgICAgICAgY2hh ciBfX2RmYXVsdCwgY2hhciAqX190bykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25h cnJvdyhfX2xvLCBfX2hpLCBfX2RmYXVsdCwgX190byk7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAg ICAgIGV4cGxpY2l0DQogICAgICBfX2N0eXBlX2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9 IDApOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9DQoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5f X2N0eXBlX2Fic3RyYWN0X2Jhc2UoKSB7IH0NCg0KICAgICAgdmlydHVhbCBib29sDQogICAgICBk b19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFs IGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29u c3QgY2hhcl90eXBlKiBfX2hpLA0KICAgICAgICAgICAgbWFzayogX192ZWMpIGNvbnN0ID0gMDsN Cg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb19zY2FuX2lzKG1hc2sg X19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sDQogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJf dHlwZSogX19oaSkgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoN CiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sDQogICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsNCg0KICAgICAg dmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7 DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fdG91cHBlcihjaGFy X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOw0KDQogICAgICB2 aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsN Cg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb190b2xvd2VyKGNoYXJf dHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7DQoNCiAgICAgIHZp cnR1YWwgY2hhcl90eXBlDQogICAgICBkb193aWRlbihjaGFyKSBjb25zdCA9IDA7DQoNCiAgICAg IHZpcnR1YWwgY29uc3QgY2hhcioNCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNv bnN0IGNoYXIqIF9faGksDQogICAgICAgICAgICAgICBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Qg PSAwOw0KDQogICAgICB2aXJ0dWFsIGNoYXINCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNo YXIgX19kZmF1bHQpIGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq DQogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq IF9faGksDQogICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29u c3QgPSAwOw0KICAgIH07DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xh c3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4NCiAgICB7DQog ICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGN0eXBlOjptYXNrIG1hc2s7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk IGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgY3R5cGUoc2l6ZV90IF9fcmVmcyA9IDApIDog X19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4oX19yZWZzKSB7IH0NCg0KICAgcHJvdGVjdGVk Og0KICAgICAgdmlydHVhbA0KICAgICAgfmN0eXBlKCk7DQoNCiAgICAgIHZpcnR1YWwgYm9vbA0K ICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0Ow0KDQogICAgICB2aXJ0 dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywg Y29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7DQoNCiAgICAgIHZpcnR1 YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hh cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ow0KDQogICAgICB2aXJ0 dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBj aGFyX3R5cGUqIF9fbG8sDQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkp IGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fdG91cHBlcihjaGFy X3R5cGUgX19jKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAg ICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z dDsNCg0KICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBl IF9fYykgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9f dG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7DQoN CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBkb193aWRlbihjaGFyIF9fYykgY29uc3Q7 DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioNCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIq IF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsNCg0KICAg ICAgdmlydHVhbCBjaGFyDQogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0 KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb19uYXJy b3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksDQogICAgICAg ICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsNCiAgICB9Ow0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBsb2NhbGU6OmlkIGN0eXBlPF9DaGFyVD46 OmlkOw0KDQoNCiAgdGVtcGxhdGU8Pg0KICAgIGNsYXNzIGN0eXBlPGNoYXI+IDogcHVibGljIF9f Y3R5cGVfYWJzdHJhY3RfYmFzZTxjaGFyPg0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5 cGVkZWYgY2hhciBjaGFyX3R5cGU7DQoNCiAgICBwcm90ZWN0ZWQ6DQoNCiAgICAgIF9fY19sb2Nh bGUgX01fY19sb2NhbGVfY3R5cGU7DQogICAgICBib29sIF9NX2RlbDsNCiAgICAgIF9fdG9fdHlw ZSBfTV90b3VwcGVyOw0KICAgICAgX190b190eXBlIF9NX3RvbG93ZXI7DQogICAgICBjb25zdCBt YXNrKiBfTV90YWJsZTsNCg0KICAgIHB1YmxpYzoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk Ow0KICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCB0YWJsZV9zaXplID0gMSArIHN0YXRpY19jYXN0 PHVuc2lnbmVkIGNoYXI+KC0xKTsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGN0eXBlKGNvbnN0 IG1hc2sqIF9fdGFibGUgPSAwLCBib29sIF9fZGVsID0gZmFsc2UsIHNpemVfdCBfX3JlZnMgPSAw KTsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGN0eXBlKF9fY19sb2NhbGUgX19jbG9jLCBjb25z dCBtYXNrKiBfX3RhYmxlID0gMCwgYm9vbCBfX2RlbCA9IGZhbHNlLA0KICAgICAgICAgICAgc2l6 ZV90IF9fcmVmcyA9IDApOw0KDQogICAgICBpbmxpbmUgYm9vbA0KICAgICAgaXMobWFzayBfX20s IGNoYXIgX19jKSBjb25zdDsNCg0KICAgICAgaW5saW5lIGNvbnN0IGNoYXIqDQogICAgICBpcyhj b25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7DQoN CiAgICAgIGlubGluZSBjb25zdCBjaGFyKg0KICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qg Y2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7DQoNCiAgICAgIGlubGluZSBjb25z dCBjaGFyKg0KICAgICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0 IGNoYXIqIF9faGkpIGNvbnN0Ow0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgY29uc3QgbWFzayoN CiAgICAgIHRhYmxlKCkgY29uc3QgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gX01fdGFibGU7IH0N Cg0KICAgICAgc3RhdGljIGNvbnN0IG1hc2sqDQogICAgICBjbGFzc2ljX3RhYmxlKCkgdGhyb3co KTsNCg0KICAgICAgdmlydHVhbA0KICAgICAgfmN0eXBlKCk7DQoNCiAgICAgIHZpcnR1YWwgYm9v bA0KICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0Ow0KDQogICAgICB2 aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19s bywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7DQoNCiAgICAgIHZp cnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qg Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ow0KDQogICAgICB2 aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25z dCBjaGFyX3R5cGUqIF9fbG8sDQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f aGkpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fdG91cHBlcihj aGFyX3R5cGUpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAg IGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0 Ow0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUp IGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3RvbG93 ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ow0KDQogICAg ICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7DQoNCiAgICAg IHZpcnR1YWwgY29uc3QgY2hhcioNCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNv bnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsNCg0KICAgICAgdmlydHVh bCBjaGFyDQogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsN Cg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb19uYXJyb3coY29uc3Qg Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksDQogICAgICAgICAgICAgICAg Y2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsNCiAgICB9Ow0KDQogIHRlbXBsYXRl PD4NCiAgICBjb25zdCBjdHlwZTxjaGFyPiYNCiAgICB1c2VfZmFjZXQ8Y3R5cGU8Y2hhcj4gPihj b25zdCBsb2NhbGUmIF9fbG9jKTsNCiMgNDAwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xv Y2FsZV9mYWNldHMuaCIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWN5Z3dp bi9iaXRzL2N0eXBlX2lubGluZS5oIiAxIDMNCiMgMzcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2k2 ODYtcGMtY3lnd2luL2JpdHMvY3R5cGVfaW5saW5lLmgiIDMNCiAgYm9vbA0KICBjdHlwZTxjaGFy Pjo6DQogIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3QNCiAgeyByZXR1cm4gX01fdGFibGVb c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV0gJiBfX207IH0NCg0KICBjb25zdCBjaGFy Kg0KICBjdHlwZTxjaGFyPjo6DQogIGlzKGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBf X2hpZ2gsIG1hc2sqIF9fdmVjKSBjb25zdA0KICB7DQogICAgd2hpbGUgKF9fbG93IDwgX19oaWdo KQ0KICAgICAgKl9fdmVjKysgPSBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigq X19sb3crKyldOw0KICAgIHJldHVybiBfX2hpZ2g7DQogIH0NCg0KICBjb25zdCBjaGFyKg0KICBj dHlwZTxjaGFyPjo6DQogIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25z dCBjaGFyKiBfX2hpZ2gpIGNvbnN0DQogIHsNCiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2ggJiYg IXRoaXMtPmlzKF9fbSwgKl9fbG93KSkNCiAgICAgICsrX19sb3c7DQogICAgcmV0dXJuIF9fbG93 Ow0KICB9DQoNCiAgY29uc3QgY2hhcioNCiAgY3R5cGU8Y2hhcj46Og0KICBzY2FuX25vdChtYXNr IF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QNCiAgew0K ICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCAmJiB0aGlzLT5pcyhfX20sICpfX2xvdykgIT0gMCkN CiAgICAgICsrX19sb3c7DQogICAgcmV0dXJuIF9fbG93Ow0KICB9DQojIDQwMSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMw0KDQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPg0KICAgIGNsYXNzIGN0eXBlX2J5bmFtZSA6IHB1YmxpYyBjdHlwZTxfQ2hh clQ+DQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsN Cg0KICAgICAgZXhwbGljaXQNCiAgICAgIGN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNp emVfdCBfX3JlZnMgPSAwKTsNCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAg IH5jdHlwZV9ieW5hbWUoKSB7IH07DQogICAgfTsNCg0KDQogIHRlbXBsYXRlPD4NCiAgICBjdHlw ZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IHJlZnMpOw0K DQogIHRlbXBsYXRlPD4NCiAgICBjdHlwZV9ieW5hbWU8d2NoYXJfdD46OmN0eXBlX2J5bmFtZShj b25zdCBjaGFyKiwgc2l6ZV90IHJlZnMpOw0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9jb2RlY3Z0LmgiIDEgMw0KIyA0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jb2Rl Y3Z0LmgiIDMNCg0KDQogIGNsYXNzIGNvZGVjdnRfYmFzZQ0KICB7DQogIHB1YmxpYzoNCiAgICBl bnVtIHJlc3VsdA0KICAgIHsNCiAgICAgIG9rLA0KICAgICAgcGFydGlhbCwNCiAgICAgIGVycm9y LA0KICAgICAgbm9jb252DQogICAgfTsNCiAgfTsNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4NCiAgICBj bGFzcyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZQ0KICAgIDogcHVibGljIGxvY2FsZTo6ZmFjZXQs IHB1YmxpYyBjb2RlY3Z0X2Jhc2UNCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVm IGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsNCiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50 ZXJuX3R5cGU7DQogICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOw0KICAgICAgdHlw ZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7DQoNCg0KICAgICAgcmVzdWx0DQogICAgICBvdXQoc3Rh dGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwNCiAgICAgICAgICBj b25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21f bmV4dCwNCiAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5k LA0KICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdA0KICAgICAgew0KICAg ICAgICByZXR1cm4gdGhpcy0+ZG9fb3V0KF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19m cm9tX25leHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9f dG9fbmV4dCk7DQogICAgICB9DQoNCiAgICAgIHJlc3VsdA0KICAgICAgdW5zaGlmdChzdGF0ZV90 eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLA0K ICAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QNCiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX3Vuc2hpZnQoX19zdGF0ZSwgX190byxfX3RvX2VuZCxfX3RvX25leHQpOyB9 DQoNCiAgICAgIHJlc3VsdA0KICAgICAgaW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0 ZXJuX3R5cGUqIF9fZnJvbSwNCiAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5k LCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LA0KICAgICAgICAgaW50ZXJuX3R5cGUq IF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwNCiAgICAgICAgIGludGVybl90eXBlKiYgX190 b19uZXh0KSBjb25zdA0KICAgICAgew0KICAgICAgICByZXR1cm4gdGhpcy0+ZG9faW4oX19zdGF0 ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQpOw0KICAgICAgfQ0KDQogICAgICBpbnQN CiAgICAgIGVuY29kaW5nKCkgY29uc3QgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f ZW5jb2RpbmcoKTsgfQ0KDQogICAgICBib29sDQogICAgICBhbHdheXNfbm9jb252KCkgY29uc3Qg dGhyb3coKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fYWx3YXlzX25vY29udigpOyB9DQoNCiAg ICAgIGludA0KICAgICAgbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4 dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5k LCBzaXplX3QgX19tYXgpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19sZW5ndGgoX19z dGF0ZSwgX19mcm9tLCBfX2VuZCwgX19tYXgpOyB9DQoNCiAgICAgIGludA0KICAgICAgbWF4X2xl bmd0aCgpIGNvbnN0IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX21heF9sZW5ndGgo KTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgZXhwbGljaXQNCiAgICAgIF9fY29kZWN2dF9h YnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7 IH0NCg0KICAgICAgdmlydHVhbA0KICAgICAgfl9fY29kZWN2dF9hYnN0cmFjdF9iYXNlKCkgeyB9 DQoNCiAgICAgIHZpcnR1YWwgcmVzdWx0DQogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0 ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwNCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5f dHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwNCiAgICAg ICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLA0KICAgICAg ICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1 YWwgcmVzdWx0DQogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90 eXBlKiBfX3RvLA0KICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVy bl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgcmVzdWx0DQog ICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t LA0KICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVy bl90eXBlKiYgX19mcm9tX25leHQsDQogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50 ZXJuX3R5cGUqIF9fdG9fZW5kLA0KICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQp IGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX2VuY29kaW5nKCkgY29u c3QgdGhyb3coKSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgYm9vbA0KICAgICAgZG9fYWx3YXlzX25v Y29udigpIGNvbnN0IHRocm93KCkgPSAwOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgZG9f bGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLA0KICAg ICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25z dCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3Qg dGhyb3coKSA9IDA7DQogICAgfTsNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQs IHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPg0KICAgIGNsYXNzIGNvZGVjdnQN CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCwgX0V4dGVyblQs IF9TdGF0ZVQ+DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jh c2U6OnJlc3VsdCByZXN1bHQ7DQogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOw0K ICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsNCiAgICAgIHR5cGVkZWYgX1N0YXRl VCBzdGF0ZV90eXBlOw0KDQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0KDQogICAgICBl eHBsaWNpdA0KICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkNCiAgICAgIDogX19jb2Rl Y3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsX0V4dGVyblQsX1N0YXRlVD4gKF9fcmVmcykgeyB9 DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+Y29kZWN2dCgpIHsgfQ0K DQogICAgICB2aXJ0dWFsIHJlc3VsdA0KICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUs IGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5 cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsDQogICAgICAg ICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwNCiAgICAgICAg ICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgcmVz dWx0DQogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBf X3RvLA0KICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBl KiYgX190b19uZXh0KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCByZXN1bHQNCiAgICAgIGRvX2lu KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAg ICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBf X2Zyb21fbmV4dCwNCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSog X190b19lbmQsDQogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7DQoN CiAgICAgIHZpcnR1YWwgaW50DQogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7DQoN CiAgICAgIHZpcnR1YWwgYm9vbA0KICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93 KCk7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlw ZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICAgICAgY29uc3QgZXh0 ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGlu dA0KICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7DQogICAgfTsNCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0 ZVQ+DQogICAgbG9jYWxlOjppZCBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD46 OmlkOw0KDQoNCiAgdGVtcGxhdGU8Pg0KICAgIGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJz dGF0ZV90Pg0KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGNoYXIsIGNoYXIs IG1ic3RhdGVfdD4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIGNoYXIgaW50 ZXJuX3R5cGU7DQogICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7DQogICAgICB0eXBlZGVm IG1ic3RhdGVfdCBzdGF0ZV90eXBlOw0KDQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0K DQogICAgICBleHBsaWNpdA0KICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7DQoNCiAg ICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+Y29kZWN2dCgpOw0KDQogICAgICB2 aXJ0dWFsIHJlc3VsdA0KICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGlu dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJv bV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsDQogICAgICAgICAgICAgZXh0 ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwNCiAgICAgICAgICAgICBleHRl cm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgcmVzdWx0DQogICAg ICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLA0KICAg ICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19u ZXh0KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCByZXN1bHQNCiAgICAgIGRvX2luKHN0YXRlX3R5 cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICBjb25z dCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4 dCwNCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQs DQogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7DQoNCiAgICAgIHZp cnR1YWwgaW50DQogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7DQoNCiAgICAgIHZp cnR1YWwgYm9vbA0KICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7DQoNCiAg ICAgIHZpcnR1YWwgaW50DQogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0 IGV4dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUq IF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAg ZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7DQogIH07DQojIDMxOCAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9jb2RlY3Z0LmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQs IHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPg0KICAgIGNsYXNzIGNvZGVjdnRf YnluYW1lIDogcHVibGljIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPg0KICAg IHsNCiAgICBwdWJsaWM6DQogICAgICBleHBsaWNpdA0KICAgICAgY29kZWN2dF9ieW5hbWUoY29u c3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQ0KICAgICAgOiBjb2RlY3Z0PF9JbnRlcm5ULCBf RXh0ZXJuVCwgX1N0YXRlVD4oX19yZWZzKSB7IH0NCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0 dWFsDQogICAgICB+Y29kZWN2dF9ieW5hbWUoKSB7IH0NCiAgICB9Ow0KIyA0MjYgIi91c3IvaW5j bHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMNCg0KDQoNCiAgY2xhc3MgX19u dW1fYmFzZQ0KICB7DQogIHByb3RlY3RlZDoNCg0KDQogICAgc3RhdGljIGNvbnN0IGNoYXIgX1Nf YXRvbXNbXTsNCg0KICAgIGVudW0NCiAgICB7DQogICAgICBfTV96ZXJvLA0KICAgICAgX01fZSA9 IF9NX3plcm8gKyAxMCwNCiAgICAgIF9NX0UgPSBfTV96ZXJvICsgMTEsDQogICAgICBfTV9zaXpl ID0gMjEgKyAxDQogICAgfTsNCg0KDQoNCiAgICBzdGF0aWMgYm9vbA0KICAgIF9TX2Zvcm1hdF9m bG9hdChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9kLA0KICAg ICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7DQoNCg0KICAgIHN0YXRpYyB2b2lk DQogICAgX1NfZm9ybWF0X2ludChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBj aGFyIF9fbW9kLCBjaGFyIF9fbW9kbCk7DQogIH07DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+DQogICAgY2xhc3MgbnVtcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldA0KICAgIHsN CiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5 cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBs b2NhbGU6OmlkIGlkOw0KDQogICAgcHJpdmF0ZToNCiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFs X3BvaW50Ow0KICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7DQogICAgICBjb25zdCBj aGFyKiBfTV9ncm91cGluZzsNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fdHJ1ZW5hbWU7DQog ICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX2ZhbHNlbmFtZTsNCg0KICAgIHB1YmxpYzoNCiAgICAg IGV4cGxpY2l0DQogICAgICBudW1wdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZh Y2V0KF9fcmVmcykNCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdCgpOyB9DQoNCiAgICAg IGV4cGxpY2l0DQogICAgICBudW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVm cyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpDQogICAgICB7IF9NX2luaXRpYWxpemVfbnVt cHVuY3QoX19jbG9jKTsgfQ0KDQogICAgICBjaGFyX3R5cGUNCiAgICAgIGRlY2ltYWxfcG9pbnQo KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGVjaW1hbF9wb2ludCgpOyB9DQoNCiAg ICAgIGNoYXJfdHlwZQ0KICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0DQogICAgICB7IHJldHVy biB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0NCg0KICAgICAgc3RyaW5nDQogICAgICBncm91 cGluZygpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9DQoNCiAg ICAgIHN0cmluZ190eXBlDQogICAgICB0cnVlbmFtZSgpIGNvbnN0DQogICAgICB7IHJldHVybiB0 aGlzLT5kb190cnVlbmFtZSgpOyB9DQoNCiAgICAgIHN0cmluZ190eXBlDQogICAgICBmYWxzZW5h bWUoKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZmFsc2VuYW1lKCk7IH0NCg0KICAg IHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5udW1wdW5jdCgpOw0KDQogICAgICB2 aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0DQogICAgICB7 IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQog ICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5k c19zZXA7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmcNCiAgICAgIGRvX2dyb3VwaW5nKCkgY29u c3QNCiAgICAgIHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9DQoNCiAgICAgIHZpcnR1YWwgc3RyaW5n X3R5cGUNCiAgICAgIGRvX3RydWVuYW1lKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX3RydWVu YW1lOyB9DQoNCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX2ZhbHNlbmFtZSgp IGNvbnN0DQogICAgICB7IHJldHVybiBfTV9mYWxzZW5hbWU7IH0NCg0KDQogICAgICB2b2lkDQog ICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX1NfY19sb2Nh bGUpOw0KICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGxvY2FsZTo6 aWQgbnVtcHVuY3Q8X0NoYXJUPjo6aWQ7DQoNCiAgdGVtcGxhdGU8Pg0KICAgIG51bXB1bmN0PGNo YXI+Ojp+bnVtcHVuY3QoKTsNCg0KICB0ZW1wbGF0ZTw+DQogICAgdm9pZA0KICAgIG51bXB1bmN0 PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsNCiMgNTUw ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMw0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVibGljIG51 bXB1bmN0PF9DaGFyVD4NCiAgICB7DQoNCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbnVt cHVuY3Q7DQoNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQog ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOw0KDQogICAgICBl eHBsaWNpdA0KICAgICAgbnVtcHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9f cmVmcyA9IDApDQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQ0KICAgICAgew0KICAg ICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QsIF9fcyk7DQogICAg ICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX01fY19sb2NhbGVfbnVtcHVuY3QpOw0KICAgICAg fQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfm51bXB1bmN0X2J5bmFt ZSgpDQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QpOyB9 DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+ DQogICAgY2xhc3MgbnVtX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgX19udW1f YmFzZQ0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw ZTsNCiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2Nh bGU6OmlkIGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbnVtX2dldChzaXplX3QgX19yZWZz ID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAg ICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0K ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdA0KICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsg fQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBl IF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIGxvbmcmIF9fdikgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBf X2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXQo aXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdA0K ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192 KTsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90 eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f Z2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQ0KDQogICAgICBpdGVyX3R5cGUN CiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p bywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9f dikgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywg X19lcnIsIF9fdik7IH0NCg0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUg X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgbG9uZyYgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQ0KDQogICAgICBp dGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3Nf YmFzZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVk IGxvbmcgbG9uZyYgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4s IF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQ0KDQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAg Z2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QNCiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0N Cg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCBkb3VibGUmIF9fdikgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBf X2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXQo aXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdA0KICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsg fQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBl IF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIHZvaWQqJiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwg X19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0 dWFsIH5udW1fZ2V0KCkgeyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgX01fZXh0cmFjdF9m bG9hdChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYs DQogICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyYgX194dHJjKSBjb25zdDsNCg0KICAgICAg aXRlcl90eXBlDQogICAgICBfTV9leHRyYWN0X2ludChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9z X2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsDQogICAgICAgICAgICAgICAgICAgICBzdHJpbmcm IF9feHRyYywgaW50JiBfX2Jhc2UpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0K ICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjpp b3N0YXRlJiwgYm9vbCYpIGNvbnN0Ow0KDQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAg ICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3Rh dGUmLCBsb25nJikgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19n ZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLA0KICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCYpIGNvbnN0Ow0KDQogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFz ZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwNCiAgICAgICAgICAgICB1bnNpZ25lZCBpbnQm KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5 cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsDQogICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyYpIGNvbnN0Ow0KDQoNCiAgICAgIHZpcnR1YWwgaXRlcl90 eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLA0KICAgICAgICAgICAgIGxvbmcgbG9uZyYpIGNvbnN0Ow0KDQog ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBl LCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwNCiAgICAgICAgICAgICB1bnNp Z25lZCBsb25nIGxvbmcmKSBjb25zdDsNCg0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAg ICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0 YXRlJiBfX2VyciwNCiAgICAgICAgICAgICBmbG9hdCYpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFs IGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYs IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwNCiAgICAgICAgICAgICBkb3VibGUmKSBjb25zdDsN Cg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJf dHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsDQogICAgICAgICAgICAg bG9uZyBkb3VibGUmKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRv X2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsDQogICAgICAgICAgICAgdm9pZComKSBjb25zdDsNCiAgICB9Ow0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBsb2NhbGU6OmlkIG51bV9n ZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7DQojIDcyMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9sb2NhbGVfZmFjZXRzLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfT3V0SXRlcj4NCiAgICBjbGFzcyBudW1fcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1 YmxpYyBfX251bV9iYXNlDQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hh clQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7DQoNCiAgICAg IHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbnVtX3B1dChz aXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9DQoNCiAgICAgIGl0 ZXJfdHlwZQ0KICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw ZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9f cywgX19mLCBfX2ZpbGwsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBwdXQoaXRl cl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNv bnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsg fQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYg X19mLCBjaGFyX3R5cGUgX19maWxsLA0KICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25z dA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0N Cg0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYg X19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdA0KICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0NCg0KICAgICAgaXRlcl90 eXBlDQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9f ZmlsbCwNCiAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdA0KICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0NCg0KDQogICAgICBp dGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5 cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0 KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBwdXQo aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwNCiAgICAgICAg ICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19z LCBfX2YsIF9fZmlsbCwgX192KTsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVy X3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLA0KICAgICAgICAgIGNv bnN0IHZvaWQqIF9fdikgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9f ZiwgX19maWxsLCBfX3YpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVmFsdWVUPg0KICAgICAgICBpdGVyX3R5cGUNCiAgICAgICAgX01fY29udmVydF9mbG9h dChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLA0KICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgX19tb2QsIF9WYWx1ZVQgX192KSBjb25zdDsNCg0KICAgICAg dGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4NCiAgICAgICAgaXRlcl90eXBlDQogICAgICAgIF9N X2NvbnZlcnRfaW50KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGws DQogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2QsIGNoYXIgX19tb2RsLCBfVmFsdWVU IF9fdikgY29uc3Q7DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgX01fd2lkZW5fZmxvYXQoaXRl cl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY2hhciogX19jcywNCiAg ICAgICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3Q7DQoNCiAgICAgIGl0ZXJfdHlwZQ0K ICAgICAgX01fd2lkZW5faW50KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBf X2ZpbGwsIGNoYXIqIF9fY3MsDQogICAgICAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdDsN Cg0KICAgICAgaXRlcl90eXBlDQogICAgICBfTV9pbnNlcnQoaXRlcl90eXBlLCBpb3NfYmFzZSYg X19pbywgY2hhcl90eXBlIF9fZmlsbCwNCiAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq IF9fd3MsIGludCBfX2xlbikgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5udW1fcHV0 KCkgeyB9Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fcHV0KGl0ZXJfdHlw ZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3Q7DQoNCiAgICAg IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNo YXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5 cGUNCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwg dW5zaWduZWQgbG9uZykgY29uc3Q7DQoNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAg IGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25n IF9fdikgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRl cl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcgbG9uZykg Y29uc3Q7DQoNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX3B1dChpdGVyX3R5 cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3Q7DQoNCiAg ICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYs IGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdikgY29uc3Q7DQoNCiAgICAgIHZpcnR1 YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlw ZSBfX2ZpbGwsIGNvbnN0IHZvaWQqIF9fdikgY29uc3Q7DQogICAgfTsNCg0KICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBsb2NhbGU6OmlkIG51bV9w dXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOw0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU Pg0KICAgIGNsYXNzIGNvbGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpmYWNldA0KICAgIHsNCiAgICBw dWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYg YmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICBwcm90ZWN0ZWQ6DQoNCg0K ICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9jb2xsYXRlOw0KDQogICAgcHVibGljOg0KICAg ICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBjb2xsYXRl KHNpemVfdCBfX3JlZnMgPSAwKQ0KICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykNCiAgICAg IHsgX01fY19sb2NhbGVfY29sbGF0ZSA9IF9TX2NfbG9jYWxlOyB9DQoNCg0KICAgICAgZXhwbGlj aXQNCiAgICAgIGNvbGxhdGUoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKQ0K ICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykNCiAgICAgIHsgX01fY19sb2NhbGVfY29sbGF0 ZSA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7IH0NCg0KICAgICAgaW50DQogICAgICBjb21w YXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNvbnN0IF9DaGFyVCogX19oaTEsDQogICAgICAgICAg ICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0DQogICAg ICB7IHJldHVybiB0aGlzLT5kb19jb21wYXJlKF9fbG8xLCBfX2hpMSwgX19sbzIsIF9faGkyKTsg fQ0KDQogICAgICBzdHJpbmdfdHlwZQ0KICAgICAgdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19s bywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdHJh bnNmb3JtKF9fbG8sIF9faGkpOyB9DQoNCiAgICAgIGxvbmcNCiAgICAgIGhhc2goY29uc3QgX0No YXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlz LT5kb19oYXNoKF9fbG8sIF9faGkpOyB9DQoNCg0KICAgICAgaW50DQogICAgICBfTV9jb21wYXJl KGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0Ow0KDQogICAgICBzaXplX3QNCiAg ICAgIF9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQqLCBzaXplX3QpIGNvbnN0Ow0K DQogIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5jb2xsYXRlKCkNCiAgICAgIHsN CiAgICAgICAgaWYgKF9NX2NfbG9jYWxlX2NvbGxhdGUgIT0gX1NfY19sb2NhbGUpDQogICAgICAg ICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9jb2xsYXRlKTsNCiAgICAgIH0NCg0K ICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwg Y29uc3QgX0NoYXJUKiBfX2hpMSwNCiAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xv MiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5 cGUNCiAgICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCog X19oaSkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgbG9uZw0KICAgICAgZG9faGFzaChjb25zdCBf Q2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7DQogICAgfTsNCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgbG9jYWxlOjppZCBjb2xsYXRlPF9DaGFyVD46Omlk Ow0KDQoNCiAgdGVtcGxhdGU8Pg0KICAgIGludA0KICAgIGNvbGxhdGU8Y2hhcj46Ol9NX2NvbXBh cmUoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSBjb25zdDsNCg0KICB0ZW1wbGF0ZTw+DQogICAg c2l6ZV90DQogICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqLCBjb25zdCBjaGFy Kiwgc2l6ZV90KSBjb25zdDsNCiMgOTE3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2Fs ZV9mYWNldHMuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgY29s bGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0ZTxfQ2hhclQ+DQogICAgew0KICAgIHB1YmxpYzoN CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3Ry aW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBjb2xsYXRl X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQ0KICAgICAgOiBjb2xs YXRlPF9DaGFyVD4oX19yZWZzKQ0KICAgICAgew0KICAgICAgICBpZiAoX01fY19sb2NhbGVfY29s bGF0ZSAhPSBfU19jX2xvY2FsZSkNCiAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2Nf bG9jYWxlX2NvbGxhdGUpOw0KICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVf Y29sbGF0ZSwgX19zKTsNCiAgICAgIH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwN CiAgICAgIH5jb2xsYXRlX2J5bmFtZSgpIHsgfQ0KICAgIH07DQoNCg0KICBjbGFzcyB0aW1lX2Jh c2UNCiAgew0KICBwdWJsaWM6DQogICAgZW51bSBkYXRlb3JkZXIgeyBub19vcmRlciwgZG15LCBt ZHksIHltZCwgeWRtIH07DQogIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAg IGNsYXNzIF9fdGltZXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQNCiAgICB7DQogICAgcHVi bGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBfX2NoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYg YmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsNCg0KICAgICAgc3RhdGljIGxvY2Fs ZTo6aWQgaWQ7DQoNCg0KICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCogX1NfdGltZXpvbmVzWzE0 XTsNCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfdGltZXB1 bmN0Ow0KICAgICAgY29uc3QgY2hhciogX01fbmFtZV90aW1lcHVuY3Q7DQogICAgICBjb25zdCBf Q2hhclQqIF9NX2RhdGVfZm9ybWF0Ow0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX2VyYV9m b3JtYXQ7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX3RpbWVfZm9ybWF0Ow0KICAgICAgY29uc3Qg X0NoYXJUKiBfTV90aW1lX2VyYV9mb3JtYXQ7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVf dGltZV9mb3JtYXQ7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfdGltZV9lcmFfZm9ybWF0 Ow0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbTsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fcG07 DQogICAgICBjb25zdCBfQ2hhclQqIF9NX2FtX3BtX2Zvcm1hdDsNCg0KDQogICAgICBjb25zdCBf Q2hhclQqIF9NX2RheTE7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTI7DQogICAgICBjb25z dCBfQ2hhclQqIF9NX2RheTM7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTQ7DQogICAgICBj b25zdCBfQ2hhclQqIF9NX2RheTU7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTY7DQogICAg ICBjb25zdCBfQ2hhclQqIF9NX2RheTc7DQoNCg0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlf YTE7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hMjsNCiAgICAgIGNvbnN0IF9DaGFyVCog X01fZGF5X2EzOw0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTQ7DQogICAgICBjb25zdCBf Q2hhclQqIF9NX2RheV9hNTsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E2Ow0KICAgICAg Y29uc3QgX0NoYXJUKiBfTV9kYXlfYTc7DQoNCg0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250 aDAxOw0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDAyOw0KICAgICAgY29uc3QgX0NoYXJU KiBfTV9tb250aDAzOw0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA0Ow0KICAgICAgY29u c3QgX0NoYXJUKiBfTV9tb250aDA1Ow0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA2Ow0K ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA3Ow0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9t b250aDA4Ow0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA5Ow0KICAgICAgY29uc3QgX0No YXJUKiBfTV9tb250aDEwOw0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDExOw0KICAgICAg Y29uc3QgX0NoYXJUKiBfTV9tb250aDEyOw0KDQoNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u dGhfYTAxOw0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDI7DQogICAgICBjb25zdCBf Q2hhclQqIF9NX21vbnRoX2EwMzsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA0Ow0K ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDU7DQogICAgICBjb25zdCBfQ2hhclQqIF9N X21vbnRoX2EwNjsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA3Ow0KICAgICAgY29u c3QgX0NoYXJUKiBfTV9tb250aF9hMDg7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2Ew OTsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTEwOw0KICAgICAgY29uc3QgX0NoYXJU KiBfTV9tb250aF9hMTE7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMjsNCg0KICAg IHB1YmxpYzoNCiAgICAgIGV4cGxpY2l0DQogICAgICBfX3RpbWVwdW5jdChzaXplX3QgX19yZWZz ID0gMCkNCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpLCBfTV9uYW1lX3RpbWVwdW5jdCgi QyIpDQogICAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0NCg0KICAgICAgZXhwbGlj aXQNCiAgICAgIF9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3Ms IHNpemVfdCBfX3JlZnMgPSAwKQ0KICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcyksIF9NX25h bWVfdGltZXB1bmN0KF9fcykNCiAgICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9j KTsgfQ0KDQogICAgICB2b2lkDQogICAgICBfTV9wdXQoX0NoYXJUKiBfX3MsIHNpemVfdCBfX21h eGxlbiwgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCwNCiAgICAgICAgICAgICBjb25zdCB0bSogX190 bSkgY29uc3Q7DQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX2RhdGVfZm9ybWF0cyhjb25zdCBfQ2hh clQqKiBfX2RhdGUpIGNvbnN0DQogICAgICB7DQoNCiAgICAgICAgX19kYXRlWzBdID0gX01fZGF0 ZV9mb3JtYXQ7DQogICAgICAgIF9fZGF0ZVsxXSA9IF9NX2RhdGVfZXJhX2Zvcm1hdDsNCiAgICAg IH0NCg0KICAgICAgdm9pZA0KICAgICAgX01fdGltZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoqIF9f dGltZSkgY29uc3QNCiAgICAgIHsNCg0KICAgICAgICBfX3RpbWVbMF0gPSBfTV90aW1lX2Zvcm1h dDsNCiAgICAgICAgX190aW1lWzFdID0gX01fdGltZV9lcmFfZm9ybWF0Ow0KICAgICAgfQ0KDQog ICAgICB2b2lkDQogICAgICBfTV9hbXBtKGNvbnN0IF9DaGFyVCoqIF9fYW1wbSkgY29uc3QNCiAg ICAgIHsNCiAgICAgICAgX19hbXBtWzBdID0gX01fYW07DQogICAgICAgIF9fYW1wbVsxXSA9IF9N X3BtOw0KICAgICAgfQ0KDQogICAgICB2b2lkDQogICAgICBfTV9kYXRlX3RpbWVfZm9ybWF0cyhj b25zdCBfQ2hhclQqKiBfX2R0KSBjb25zdA0KICAgICAgew0KDQogICAgICAgIF9fZHRbMF0gPSBf TV9kYXRlX3RpbWVfZm9ybWF0Ow0KICAgICAgICBfX2R0WzFdID0gX01fZGF0ZV90aW1lX2VyYV9m b3JtYXQ7DQogICAgICB9DQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX2RheXMoY29uc3QgX0NoYXJU KiogX19kYXlzKSBjb25zdA0KICAgICAgew0KICAgICAgICBfX2RheXNbMF0gPSBfTV9kYXkxOw0K ICAgICAgICBfX2RheXNbMV0gPSBfTV9kYXkyOw0KICAgICAgICBfX2RheXNbMl0gPSBfTV9kYXkz Ow0KICAgICAgICBfX2RheXNbM10gPSBfTV9kYXk0Ow0KICAgICAgICBfX2RheXNbNF0gPSBfTV9k YXk1Ow0KICAgICAgICBfX2RheXNbNV0gPSBfTV9kYXk2Ow0KICAgICAgICBfX2RheXNbNl0gPSBf TV9kYXk3Ow0KICAgICAgfQ0KDQogICAgICB2b2lkDQogICAgICBfTV9kYXlzX2FiYnJldmlhdGVk KGNvbnN0IF9DaGFyVCoqIF9fZGF5cykgY29uc3QNCiAgICAgIHsNCiAgICAgICAgX19kYXlzWzBd ID0gX01fZGF5X2ExOw0KICAgICAgICBfX2RheXNbMV0gPSBfTV9kYXlfYTI7DQogICAgICAgIF9f ZGF5c1syXSA9IF9NX2RheV9hMzsNCiAgICAgICAgX19kYXlzWzNdID0gX01fZGF5X2E0Ow0KICAg ICAgICBfX2RheXNbNF0gPSBfTV9kYXlfYTU7DQogICAgICAgIF9fZGF5c1s1XSA9IF9NX2RheV9h NjsNCiAgICAgICAgX19kYXlzWzZdID0gX01fZGF5X2E3Ow0KICAgICAgfQ0KDQogICAgICB2b2lk DQogICAgICBfTV9tb250aHMoY29uc3QgX0NoYXJUKiogX19tb250aHMpIGNvbnN0DQogICAgICB7 DQogICAgICAgIF9fbW9udGhzWzBdID0gX01fbW9udGgwMTsNCiAgICAgICAgX19tb250aHNbMV0g PSBfTV9tb250aDAyOw0KICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRoMDM7DQogICAgICAg IF9fbW9udGhzWzNdID0gX01fbW9udGgwNDsNCiAgICAgICAgX19tb250aHNbNF0gPSBfTV9tb250 aDA1Ow0KICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoMDY7DQogICAgICAgIF9fbW9udGhz WzZdID0gX01fbW9udGgwNzsNCiAgICAgICAgX19tb250aHNbN10gPSBfTV9tb250aDA4Ow0KICAg ICAgICBfX21vbnRoc1s4XSA9IF9NX21vbnRoMDk7DQogICAgICAgIF9fbW9udGhzWzldID0gX01f bW9udGgxMDsNCiAgICAgICAgX19tb250aHNbMTBdID0gX01fbW9udGgxMTsNCiAgICAgICAgX19t b250aHNbMTFdID0gX01fbW9udGgxMjsNCiAgICAgIH0NCg0KICAgICAgdm9pZA0KICAgICAgX01f bW9udGhzX2FiYnJldmlhdGVkKGNvbnN0IF9DaGFyVCoqIF9fbW9udGhzKSBjb25zdA0KICAgICAg ew0KICAgICAgICBfX21vbnRoc1swXSA9IF9NX21vbnRoX2EwMTsNCiAgICAgICAgX19tb250aHNb MV0gPSBfTV9tb250aF9hMDI7DQogICAgICAgIF9fbW9udGhzWzJdID0gX01fbW9udGhfYTAzOw0K ICAgICAgICBfX21vbnRoc1szXSA9IF9NX21vbnRoX2EwNDsNCiAgICAgICAgX19tb250aHNbNF0g PSBfTV9tb250aF9hMDU7DQogICAgICAgIF9fbW9udGhzWzVdID0gX01fbW9udGhfYTA2Ow0KICAg ICAgICBfX21vbnRoc1s2XSA9IF9NX21vbnRoX2EwNzsNCiAgICAgICAgX19tb250aHNbN10gPSBf TV9tb250aF9hMDg7DQogICAgICAgIF9fbW9udGhzWzhdID0gX01fbW9udGhfYTA5Ow0KICAgICAg ICBfX21vbnRoc1s5XSA9IF9NX21vbnRoX2ExMDsNCiAgICAgICAgX19tb250aHNbMTBdID0gX01f bW9udGhfYTExOw0KICAgICAgICBfX21vbnRoc1sxMV0gPSBfTV9tb250aF9hMTI7DQogICAgICB9 DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+X190aW1lcHVuY3QoKTsN Cg0KDQogICAgICB2b2lkDQogICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxl IF9fY2xvYyA9IF9TX2NfbG9jYWxlKTsNCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4NCiAgICBsb2NhbGU6OmlkIF9fdGltZXB1bmN0PF9DaGFyVD46OmlkOw0KDQoNCiAgdGVt cGxhdGU8Pg0KICAgIF9fdGltZXB1bmN0PGNoYXI+Ojp+X190aW1lcHVuY3QoKTsNCg0KICB0ZW1w bGF0ZTw+DQogICAgY29uc3QgY2hhcioNCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X1NfdGltZXpv bmVzWzE0XTsNCg0KICB0ZW1wbGF0ZTw+DQogICAgdm9pZA0KICAgIF9fdGltZXB1bmN0PGNoYXI+ OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7DQoNCiAgdGVtcGxh dGU8Pg0KICAgIHZvaWQNCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01fcHV0KGNoYXIqLCBzaXpl X3QsIGNvbnN0IGNoYXIqLCBjb25zdCB0bSopIGNvbnN0Ow0KIyAxMTY4ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+DQogICAgY29uc3QgX0NoYXJUKiBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfU190aW1lem9uZXNb MTRdOw0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0K ICAgIGNsYXNzIHRpbWVfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jh c2UNCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7 DQogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19z dHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOw0KDQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBp ZDsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIHRpbWVfZ2V0KHNpemVfdCBfX3JlZnMgPSAwKQ0K ICAgICAgOiBsb2NhbGU6OmZhY2V0IChfX3JlZnMpIHsgfQ0KDQogICAgICBkYXRlb3JkZXINCiAg ICAgIGRhdGVfb3JkZXIoKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGF0ZV9vcmRl cigpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVn LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgICAgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX2dldF90aW1lKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9DQoNCiAgICAg IGl0ZXJfdHlwZQ0KICAgICAgZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l bmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCB0bSogX190bSkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF9kYXRlKF9f YmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAg ICAgZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl JiBfX2lvLA0KICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSog X190bSkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF93ZWVrZGF5KF9fYmVnLCBf X2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0 X21vbnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f aW8sDQogICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9f dG0pIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfbW9udGhuYW1lKF9fYmVnLCBf X2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0 X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0K ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QN CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF95ZWFyKF9fYmVnLCBfX2VuZCwgX19pbywgX19l cnIsIF9fdG0pOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+dGlt ZV9nZXQoKSB7IH0NCg0KICAgICAgdmlydHVhbCBkYXRlb3JkZXINCiAgICAgIGRvX2RhdGVfb3Jk ZXIoKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldF90aW1l KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAg ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0Ow0K DQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9f YmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7DQoNCiAgICAgIHZpcnR1 YWwgaXRlcl90eXBlDQogICAgICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJf dHlwZSBfX2VuZCwgaW9zX2Jhc2UmLA0KICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl DQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYsDQogICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwgdG0qIF9fdG0pIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAg ZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf X2lvLA0KICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190 bSkgY29uc3Q7DQoNCg0KICAgICAgdm9pZA0KICAgICAgX01fZXh0cmFjdF9udW0oaXRlcl90eXBl JiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwNCiAgICAgICAgICAgICAg ICAgICAgIGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3QgX19sZW4sDQogICAgICAgICAgICAg ICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlLA0KICAgICAgICAgICAgICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsNCg0KDQoNCiAgICAgIHZvaWQNCiAg ICAgIF9NX2V4dHJhY3RfbmFtZShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBp bnQmIF9fbWVtYmVyLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFt ZXMsIHNpemVfdCBfX2luZGV4bGVuLA0KICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VycikgY29uc3Q7DQoNCg0KICAgICAgdm9pZA0KICAgICAgX01fZXh0cmFjdF92 aWFfZm9ybWF0KGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGlvc19iYXNlJiBf X2lvLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgdG0qIF9fdG0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBf X2Zvcm1hdCkgY29uc3Q7DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9Jbkl0ZXI+DQogICAgbG9jYWxlOjppZCB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+ OjppZDsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQog ICAgY2xhc3MgdGltZV9nZXRfYnluYW1lIDogcHVibGljIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRl cj4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7 DQogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOw0KDQogICAgICBleHBsaWNpdA0KICAg ICAgdGltZV9nZXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkNCiAgICAg IDogdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPihfX3JlZnMpIHsgfQ0KDQogICAgcHJvdGVjdGVk Og0KICAgICAgdmlydHVhbA0KICAgICAgfnRpbWVfZ2V0X2J5bmFtZSgpIHsgfQ0KICAgIH07DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBjbGFz cyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlDQogICAg ew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAg dHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk Ow0KDQogICAgICBleHBsaWNpdA0KICAgICAgdGltZV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApDQog ICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAg ICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNv bnN0IHRtKiBfX3RtLA0KICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFy VCogX19lbmQpIGNvbnN0Ow0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUg X19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwNCiAgICAgICAgICBjb25zdCB0 bSogX190bSwgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCA9IDApIGNvbnN0DQogICAgICB7IHJl dHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdG0sIF9fZm9ybWF0LCBfX21v ZCk7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH50aW1lX3B1dCgp DQogICAgICB7IH0NCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX3B1dChpdGVy X3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY29uc3QgdG0qIF9f dG0sDQogICAgICAgICAgICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29uc3Q7DQogICAg fTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAg IGxvY2FsZTo6aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOw0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgY2xhc3MgdGltZV9wdXRf YnluYW1lIDogcHVibGljIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+DQogICAgew0KICAgIHB1 YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBf T3V0SXRlciBpdGVyX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICB0aW1lX3B1dF9ieW5h bWUoY29uc3QgY2hhciogLCBzaXplX3QgX19yZWZzID0gMCkNCiAgICAgIDogdGltZV9wdXQ8X0No YXJULCBfT3V0SXRlcj4oX19yZWZzKQ0KICAgICAgeyB9Ow0KDQogICAgcHJvdGVjdGVkOg0KICAg ICAgdmlydHVhbA0KICAgICAgfnRpbWVfcHV0X2J5bmFtZSgpIHsgfQ0KICAgIH07DQoNCg0KICBj bGFzcyBtb25leV9iYXNlDQogIHsNCiAgcHVibGljOg0KICAgIGVudW0gcGFydCB7IG5vbmUsIHNw YWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07DQogICAgc3RydWN0IHBhdHRlcm4geyBjaGFyIGZp ZWxkWzRdOyB9Ow0KDQogICAgc3RhdGljIGNvbnN0IHBhdHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJu Ow0KDQoNCg0KICAgIHN0YXRpYyBwYXR0ZXJuDQogICAgX1NfY29uc3RydWN0X3BhdHRlcm4oY2hh ciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKTsNCiAgfTsNCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+DQogICAgY2xhc3MgbW9uZXlwdW5jdCA6 IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFzZQ0KICAgIHsNCiAgICBwdWJs aWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFz aWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGludGwgPSBfSW50bDsNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0KDQogICAgcHJpdmF0 ZToNCiAgICAgIGNvbnN0IGNoYXIqIF9NX2dyb3VwaW5nOw0KICAgICAgY2hhcl90eXBlIF9NX2Rl Y2ltYWxfcG9pbnQ7DQogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsNCiAgICAgIGNv bnN0IGNoYXJfdHlwZSogX01fY3Vycl9zeW1ib2w7DQogICAgICBjb25zdCBjaGFyX3R5cGUqIF9N X3Bvc2l0aXZlX3NpZ247DQogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX25lZ2F0aXZlX3NpZ247 DQogICAgICBpbnQgX01fZnJhY19kaWdpdHM7DQogICAgICBwYXR0ZXJuIF9NX3Bvc19mb3JtYXQ7 DQogICAgICBwYXR0ZXJuIF9NX25lZ19mb3JtYXQ7DQoNCiAgICBwdWJsaWM6DQogICAgICBleHBs aWNpdA0KICAgICAgbW9uZXlwdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0 KF9fcmVmcykNCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7IH0NCg0KICAgICAg ZXhwbGljaXQNCiAgICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIq IF9fcywgc2l6ZV90IF9fcmVmcyA9IDApDQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQ0K ICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jbG9jLCBfX3MpOyB9DQoNCiAgICAg IGNoYXJfdHlwZQ0KICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0DQogICAgICB7IHJldHVybiB0 aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0NCg0KICAgICAgY2hhcl90eXBlDQogICAgICB0aG91 c2FuZHNfc2VwKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAo KTsgfQ0KDQogICAgICBzdHJpbmcNCiAgICAgIGdyb3VwaW5nKCkgY29uc3QNCiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0NCg0KICAgICAgc3RyaW5nX3R5cGUNCiAgICAgIGN1 cnJfc3ltYm9sKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2N1cnJfc3ltYm9sKCk7 IH0NCg0KICAgICAgc3RyaW5nX3R5cGUNCiAgICAgIHBvc2l0aXZlX3NpZ24oKSBjb25zdA0KICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zaXRpdmVfc2lnbigpOyB9DQoNCiAgICAgIHN0cmluZ190 eXBlDQogICAgICBuZWdhdGl2ZV9zaWduKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X25lZ2F0aXZlX3NpZ24oKTsgfQ0KDQogICAgICBpbnQNCiAgICAgIGZyYWNfZGlnaXRzKCkgY29u c3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2ZyYWNfZGlnaXRzKCk7IH0NCg0KICAgICAgcGF0 dGVybg0KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19w b3NfZm9ybWF0KCk7IH0NCg0KICAgICAgcGF0dGVybg0KICAgICAgbmVnX2Zvcm1hdCgpIGNvbnN0 DQogICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdfZm9ybWF0KCk7IH0NCg0KICAgIHByb3RlY3Rl ZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5tb25leXB1bmN0KCk7DQoNCiAgICAgIHZpcnR1YWwg Y2hhcl90eXBlDQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QNCiAgICAgIHsgcmV0dXJu IF9NX2RlY2ltYWxfcG9pbnQ7IH0NCg0KICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRv X3Rob3VzYW5kc19zZXAoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsg fQ0KDQogICAgICB2aXJ0dWFsIHN0cmluZw0KICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdA0KICAg ICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0K ICAgICAgZG9fY3Vycl9zeW1ib2woKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fY3Vycl9zeW1i b2w7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAgICAgZG9fcG9zaXRpdmVfc2ln bigpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9wb3NpdGl2ZV9zaWduOyB9DQoNCiAgICAgIHZp cnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX25lZ2F0aXZlX3NpZ24oKSBjb25zdA0KICAgICAg eyByZXR1cm4gX01fbmVnYXRpdmVfc2lnbjsgfQ0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAg ZG9fZnJhY19kaWdpdHMoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fZnJhY19kaWdpdHM7IH0N Cg0KICAgICAgdmlydHVhbCBwYXR0ZXJuDQogICAgICBkb19wb3NfZm9ybWF0KCkgY29uc3QNCiAg ICAgIHsgcmV0dXJuIF9NX3Bvc19mb3JtYXQ7IH0NCg0KICAgICAgdmlydHVhbCBwYXR0ZXJuDQog ICAgICBkb19uZWdfZm9ybWF0KCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX25lZ19mb3JtYXQ7 IH0NCg0KDQogICAgICAgdm9pZA0KICAgICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2Nf bG9jYWxlIF9fY2xvYyA9IF9TX2NfbG9jYWxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyKiBfX25hbWUgPSBfX251bGwpOw0KICAgIH07DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPg0KICAgIGxvY2FsZTo6aWQgbW9uZXlwdW5jdDxf Q2hhclQsIF9JbnRsPjo6aWQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9J bnRsPg0KICAgIGNvbnN0IGJvb2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aW50bDsNCg0K ICB0ZW1wbGF0ZTw+DQogICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKTsN Cg0KICB0ZW1wbGF0ZTw+DQogICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0 KCk7DQoNCiAgdGVtcGxhdGU8Pg0KICAgIHZvaWQNCiAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+ OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwgY29uc3QgY2hhciopOw0KDQog IHRlbXBsYXRlPD4NCiAgICB2b2lkDQogICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46Ol9NX2lu aXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLCBjb25zdCBjaGFyKik7DQojIDE1MDUgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4NCiAgICBjbGFzcyBtb25leXB1bmN0X2J5bmFtZSA6 IHB1YmxpYyBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+DQogICAgew0KICAgICAgX19jX2xvY2Fs ZSBfTV9jX2xvY2FsZV9tb25leXB1bmN0Ow0KDQogICAgcHVibGljOg0KICAgICAgdHlwZWRlZiBf Q2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJp bmdfdHlwZTsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOw0KDQogICAg ICBleHBsaWNpdA0KICAgICAgbW9uZXlwdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXpl X3QgX19yZWZzID0gMCkNCiAgICAgIDogbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPihfX3JlZnMp DQogICAgICB7DQogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1 bmN0LCBfX3MpOw0KICAgICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX01fY19sb2NhbGVf bW9uZXlwdW5jdCk7DQogICAgICB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQog ICAgICB+bW9uZXlwdW5jdF9ieW5hbWUoKQ0KICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9N X2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIGJvb2wgX0ludGw+DQogICAgY29uc3QgYm9vbCBtb25leXB1bmN0X2J5bmFtZTxfQ2hh clQsIF9JbnRsPjo6aW50bDsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9Jbkl0ZXI+DQogICAgY2xhc3MgbW9uZXlfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQNCiAg ICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAg ICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8 X0NoYXJUPiBzdHJpbmdfdHlwZTsNCg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7DQoNCiAg ICAgIGV4cGxpY2l0DQogICAgICBtb25leV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxl OjpmYWNldChfX3JlZnMpIHsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5 cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywNCiAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBj b25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywgX19lbmQsIF9faW50bCwgX19p bywgX19lcnIsIF9fdW5pdHMpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0KGl0ZXJf dHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLA0K ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRz KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywgX19lbmQsIF9faW50bCwg X19pbywgX19lcnIsIF9fZGlnaXRzKTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVh bA0KICAgICAgfm1vbmV5X2dldCgpIHsgfQ0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAg ICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlv c19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9u ZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAg ICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlv c19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3Ry aW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdDsNCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hh clQsIF9Jbkl0ZXI+OjppZDsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9PdXRJdGVyPg0KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0DQog ICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAg IHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8 X0NoYXJUPiBzdHJpbmdfdHlwZTsNCg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7DQoNCiAg ICAgIGV4cGxpY2l0DQogICAgICBtb25leV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxl OjpmYWNldChfX3JlZnMpIHsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5 cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgY2hhcl90eXBl IF9fZmlsbCwgbG9uZyBkb3VibGUgX191bml0cykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX3VuaXRzKTsgfQ0KDQogICAgICBp dGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2Um IF9faW8sDQogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9f ZGlnaXRzKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBf X2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVh bA0KICAgICAgfm1vbmV5X3B1dCgpIHsgfQ0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAg ICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hh cl90eXBlIF9fZmlsbCwNCiAgICAgICAgICAgICBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdDsN Cg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBi b29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsDQogICAgICAgICAg ICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdDsNCiAgICB9Ow0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgbG9jYWxlOjppZCBt b25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOw0KDQoNCiAgc3RydWN0IG1lc3NhZ2VzX2Jh c2UNCiAgew0KICAgIHR5cGVkZWYgaW50IGNhdGFsb2c7DQogIH07DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPg0KICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6ZmFjZXQs IHB1YmxpYyBtZXNzYWdlc19iYXNlDQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRl ZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBz dHJpbmdfdHlwZTsNCg0KICAgIHByb3RlY3RlZDoNCg0KDQogICAgICBfX2NfbG9jYWxlIF9NX2Nf bG9jYWxlX21lc3NhZ2VzOw0KDQoNCiAgICAgIGNvbnN0IGNoYXIqIF9NX25hbWVfbWVzc2FnZXM7 DQoNCg0KICAgIHB1YmxpYzoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0KDQogICAgICBl eHBsaWNpdA0KICAgICAgbWVzc2FnZXMoc2l6ZV90IF9fcmVmcyA9IDApDQogICAgICA6IGxvY2Fs ZTo6ZmFjZXQoX19yZWZzKSwgX01fbmFtZV9tZXNzYWdlcygiQyIpDQogICAgICB7IF9NX2NfbG9j YWxlX21lc3NhZ2VzID0gX1NfY19sb2NhbGU7IH0NCg0KDQogICAgICBleHBsaWNpdA0KICAgICAg bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fbmFtZSwgc2l6ZV90IF9f cmVmcyA9IDApDQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQ0KICAgICAgew0KICAgICAg ICBfTV9uYW1lX21lc3NhZ2VzID0gX19uYW1lOw0KICAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdl cyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7DQogICAgICB9DQoNCiAgICAgIGNhdGFsb2cN CiAgICAgIG9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYg X19sb2MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOyB9 DQoNCg0KICAgICAgY2F0YWxvZw0KICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4m LCBjb25zdCBsb2NhbGUmLCBjb25zdCBjaGFyKikgY29uc3Q7DQoNCiAgICAgIHN0cmluZ190eXBl DQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQsIGNvbnN0IHN0 cmluZ190eXBlJiBfX3MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19jLCBf X3NldCwgX19tc2dpZCwgX19zKTsgfQ0KDQogICAgICB2b2lkDQogICAgICBjbG9zZShjYXRhbG9n IF9fYykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Nsb3NlKF9fYyk7IH0NCg0KICAg IHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5tZXNzYWdlcygpDQogICAgICAgew0K ICAgICAgICAgaWYgKF9NX2NfbG9jYWxlX21lc3NhZ2VzICE9IF9TX2NfbG9jYWxlKQ0KICAgICAg ICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsNCiAgICAgICB9 DQoNCiAgICAgIHZpcnR1YWwgY2F0YWxvZw0KICAgICAgZG9fb3Blbihjb25zdCBiYXNpY19zdHJp bmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBzdHJpbmdf dHlwZQ0KICAgICAgZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmdfdHlwZSYg X19kZmF1bHQpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIHZvaWQNCiAgICAgIGRvX2Nsb3NlKGNh dGFsb2cpIGNvbnN0Ow0KDQoNCiAgICAgIGNoYXIqDQogICAgICBfTV9jb252ZXJ0X3RvX2NoYXIo Y29uc3Qgc3RyaW5nX3R5cGUmIF9fbXNnKSBjb25zdA0KICAgICAgew0KDQogICAgICAgIHJldHVy biByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdF9jYXN0PF9DaGFyVCo+KF9fbXNnLmNfc3Ry KCkpKTsNCiAgICAgIH0NCg0KDQogICAgICBzdHJpbmdfdHlwZQ0KICAgICAgX01fY29udmVydF9m cm9tX2NoYXIoY2hhciogX19tc2cpIGNvbnN0DQogICAgICB7DQoNCiAgICAgICAgc2l6ZV90IF9f bGVuID0gY2hhcl90cmFpdHM8Y2hhcj46Omxlbmd0aChfX21zZykgLSAxOw0KIyAxNzMwICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMw0KICAgICAgICByZXR1cm4g c3RyaW5nX3R5cGUoKTsNCiAgICAgIH0NCiAgICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+DQogICAgbG9jYWxlOjppZCBtZXNzYWdlczxfQ2hhclQ+OjppZDsNCg0KDQogIHRlbXBs YXRlPD4NCiAgICBzdHJpbmcNCiAgICBtZXNzYWdlczxjaGFyPjo6ZG9fZ2V0KGNhdGFsb2csIGlu dCwgaW50LCBjb25zdCBzdHJpbmcmKSBjb25zdDsNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9jKysv My4yL2k2ODYtcGMtY3lnd2luL2JpdHMvbWVzc2FnZXNfbWVtYmVycy5oIiAxIDMNCiMgMzcgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtY3lnd2luL2JpdHMvbWVzc2FnZXNfbWVtYmVycy5o IiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICB0eXBlbmFtZSBtZXNzYWdlczxf Q2hhclQ+OjpjYXRhbG9nDQogICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19z dHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIqKSBjb25zdA0KICAgIHsgcmV0dXJuIHRoaXMtPmRvX29wZW4o X19zLCBfX2xvYyk7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICB0eXBl bmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nDQogICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9f b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdA0KICAg IHsgcmV0dXJuIDA7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgdHlwZW5h bWUgbWVzc2FnZXM8X0NoYXJUPjo6c3RyaW5nX3R5cGUNCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpk b19nZXQoY2F0YWxvZywgaW50LCBpbnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3QNCiAgICB7IHJldHVybiBfX2RmYXVsdDsg fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICB2b2lkDQogICAgbWVzc2FnZXM8 X0NoYXJUPjo6ZG9fY2xvc2UoY2F0YWxvZykgY29uc3QNCiAgICB7IH0NCiMgMTc0NCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMw0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2Fn ZXM8X0NoYXJUPg0KICAgIHsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy X3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOw0K DQogICAgICBleHBsaWNpdA0KICAgICAgbWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywg c2l6ZV90IF9fcmVmcyA9IDApDQogICAgICA6IG1lc3NhZ2VzPF9DaGFyVD4oX19yZWZzKQ0KICAg ICAgew0KICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX19zOw0KICAgICAgICBpZiAoX01fY19s b2NhbGVfbWVzc2FnZXMgIT0gX1NfY19sb2NhbGUpDQogICAgICAgICAgX1NfZGVzdHJveV9jX2xv Y2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7DQogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShf TV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsNCiAgICAgIH0NCg0KICAgIHByb3RlY3RlZDoNCiAg ICAgIHZpcnR1YWwNCiAgICAgIH5tZXNzYWdlc19ieW5hbWUoKQ0KICAgICAgeyB9DQogICAgfTsN Cg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29s DQogICAgaXNzcGFjZShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0 dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnNwYWNl LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29s DQogICAgaXNwcmludChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0 dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnByaW50 LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29s DQogICAgaXNjbnRybChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0 dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmNudHJs LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29s DQogICAgaXN1cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0 dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVwcGVy LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29s IGlzbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1 c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpsb3dlciwgX19j KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAg IGlzYWxwaGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1 c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbHBoYSwgX19j KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAg IGlzZGlnaXQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1 c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19j KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAg IGlzcHVuY3QoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1 c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwdW5jdCwgX19j KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAg IGlzeGRpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyByZXR1cm4g dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBf X2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQog ICAgaXNhbG51bShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJu IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBf X2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQog ICAgaXNncmFwaChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJu IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmdyYXBoLCBf X2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBfQ2hhclQN CiAgICB0b3VwcGVyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyByZXR1 cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG91cHBlcihfX2MpOyB9DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBfQ2hhclQNCiAgICB0b2xvd2Vy KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyByZXR1cm4gdXNlX2ZhY2V0 PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG9sb3dlcihfX2MpOyB9DQp9DQojIDQyICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFz cyBiYXNpY19pb3MgOiBwdWJsaWMgaW9zX2Jhc2UNCiAgICB7DQogICAgcHVibGljOg0KDQogICAg ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFp dHM6OmludF90eXBlIGludF90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpw b3NfdHlwZSBwb3NfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5 cGUgb2ZmX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQoNCg0KICAg ICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsNCiAgICAgIHR5cGVkZWYgb3N0 cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOw0KICAg ICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5 cGU7DQogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBf X2lzdHJlYW1idWZfaXRlcjsNCiAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVh bWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOw0KDQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3RpZTsNCiAgICAgIG11dGFibGUgY2hhcl90 eXBlIF9NX2ZpbGw7DQogICAgICBtdXRhYmxlIGJvb2wgX01fZmlsbF9pbml0Ow0KICAgICAgYmFz aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3N0cmVhbWJ1ZjsNCg0KDQogICAgICBj b25zdCBfX2N0eXBlX3R5cGUqIF9NX2ZjdHlwZTsNCg0KICAgICAgY29uc3QgX19udW1wdXRfdHlw ZSogX01fZm51bXB1dDsNCg0KICAgICAgY29uc3QgX19udW1nZXRfdHlwZSogX01fZm51bWdldDsN Cg0KICAgIHB1YmxpYzoNCiAgICAgIG9wZXJhdG9yIHZvaWQqKCkgY29uc3QNCiAgICAgIHsgcmV0 dXJuIHRoaXMtPmZhaWwoKSA/IDAgOiBjb25zdF9jYXN0PGJhc2ljX2lvcyo+KHRoaXMpOyB9DQoN CiAgICAgIGJvb2wNCiAgICAgIG9wZXJhdG9yISgpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlz LT5mYWlsKCk7IH0NCg0KICAgICAgaW9zdGF0ZQ0KICAgICAgcmRzdGF0ZSgpIGNvbnN0DQogICAg ICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0NCg0KICAgICAgdm9pZA0KICAgICAgY2xl YXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCk7DQoNCiAgICAgIHZvaWQNCiAgICAgIHNldHN0 YXRlKGlvc3RhdGUgX19zdGF0ZSkNCiAgICAgIHsgdGhpcy0+Y2xlYXIodGhpcy0+cmRzdGF0ZSgp IHwgX19zdGF0ZSk7IH0NCg0KICAgICAgYm9vbA0KICAgICAgZ29vZCgpIGNvbnN0DQogICAgICB7 IHJldHVybiB0aGlzLT5yZHN0YXRlKCkgPT0gMDsgfQ0KDQogICAgICBib29sDQogICAgICBlb2Yo KSBjb25zdA0KICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJpdCkgIT0gMDsg fQ0KDQogICAgICBib29sDQogICAgICBmYWlsKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuICh0aGlz LT5yZHN0YXRlKCkgJiAoYmFkYml0IHwgZmFpbGJpdCkpICE9IDA7IH0NCg0KICAgICAgYm9vbA0K ICAgICAgYmFkKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBiYWRi aXQpICE9IDA7IH0NCg0KICAgICAgaW9zdGF0ZQ0KICAgICAgZXhjZXB0aW9ucygpIGNvbnN0DQog ICAgICB7IHJldHVybiBfTV9leGNlcHRpb247IH0NCg0KICAgICAgdm9pZA0KICAgICAgZXhjZXB0 aW9ucyhpb3N0YXRlIF9fZXhjZXB0KQ0KICAgICAgew0KICAgICAgICBfTV9leGNlcHRpb24gPSBf X2V4Y2VwdDsNCiAgICAgICAgdGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVmX3N0YXRlKTsNCiAgICAg IH0NCg0KDQogICAgICBleHBsaWNpdA0KICAgICAgYmFzaWNfaW9zKGJhc2ljX3N0cmVhbWJ1Zjxf Q2hhclQsIF9UcmFpdHM+KiBfX3NiKSA6IGlvc19iYXNlKCkNCiAgICAgIHsgdGhpcy0+aW5pdChf X3NiKTsgfQ0KDQogICAgICB2aXJ0dWFsDQogICAgICB+YmFzaWNfaW9zKCkgeyB9DQoNCg0KICAg ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Kg0KICAgICAgdGllKCkgY29uc3QNCiAg ICAgIHsgcmV0dXJuIF9NX3RpZTsgfQ0KDQogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4qDQogICAgICB0aWUoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX3RpZXN0 cikNCiAgICAgIHsNCiAgICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX29s ZCA9IF9NX3RpZTsNCiAgICAgICAgX01fdGllID0gX190aWVzdHI7DQogICAgICAgIHJldHVybiBf X29sZDsNCiAgICAgIH0NCg0KICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4q DQogICAgICByZGJ1ZigpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWY7IH0NCg0K ICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qDQogICAgICByZGJ1ZihiYXNp Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7DQoNCiAgICAgIGJhc2ljX2lvcyYN CiAgICAgIGNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3Jocyk7DQoNCiAgICAgIGNoYXJfdHlw ZQ0KICAgICAgZmlsbCgpIGNvbnN0DQogICAgICB7DQogICAgICAgIGlmICghX01fZmlsbF9pbml0 KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRlbignICcpOw0K ICAgICAgICAgICAgX01fZmlsbF9pbml0ID0gdHJ1ZTsNCiAgICAgICAgICB9DQogICAgICAgIHJl dHVybiBfTV9maWxsOw0KICAgICAgfQ0KDQogICAgICBjaGFyX3R5cGUNCiAgICAgIGZpbGwoY2hh cl90eXBlIF9fY2gpDQogICAgICB7DQogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IHRoaXMtPmZp bGwoKTsNCiAgICAgICAgX01fZmlsbCA9IF9fY2g7DQogICAgICAgIHJldHVybiBfX29sZDsNCiAg ICAgIH0NCg0KDQogICAgICBsb2NhbGUNCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2Mp Ow0KDQogICAgICBjaGFyDQogICAgICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVs dCkgY29uc3Q7DQoNCiAgICAgIGNoYXJfdHlwZQ0KICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0 Ow0KDQogICAgcHJvdGVjdGVkOg0KDQogICAgICBiYXNpY19pb3MoKSA6IGlvc19iYXNlKCkNCiAg ICAgIHsgfQ0KDQogICAgICB2b2lkDQogICAgICBpbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs IF9UcmFpdHM+KiBfX3NiKTsNCg0KICAgICAgYm9vbA0KICAgICAgX01fY2hlY2tfZmFjZXQoY29u c3QgbG9jYWxlOjpmYWNldCogX19mKSBjb25zdA0KICAgICAgew0KICAgICAgICBpZiAoIV9fZikN CiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7DQogICAgICAgIHJldHVybiB0cnVlOw0KICAg ICAgfQ0KDQogICAgICB2b2lkDQogICAgICBfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBf X2xvYyk7DQogICAgfTsNCn0NCg0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9i YXNpY19pb3MudGNjIiAxIDMNCiMgMzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNf aW9zLnRjYyIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB2b2lkDQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1Ry YWl0cz46OmNsZWFyKGlvc3RhdGUgX19zdGF0ZSkNCiAgICB7DQogICAgICBpZiAodGhpcy0+cmRi dWYoKSkNCiAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZTsNCiAgICAgIGVsc2UN CiAgICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRlIHwgYmFkYml0Ow0KICAgICAg aWYgKCh0aGlzLT5yZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQ0KICAgICAgICBfX3Ro cm93X2lvc19mYWlsdXJlKCJiYXNpY19pb3M6OmNsZWFyKGlvc3RhdGUpIGNhdXNlZCBleGNlcHRp b24iKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPg0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Kg0KICAgIGJhc2ljX2lv czxfQ2hhclQsIF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz PiogX19zYikNCiAgICB7DQogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiog X19vbGQgPSBfTV9zdHJlYW1idWY7DQogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOw0KICAgICAg dGhpcy0+Y2xlYXIoKTsNCiAgICAgIHJldHVybiBfX29sZDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lvczxfQ2hhclQs IF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpjb3B5Zm10KGNvbnN0 IGJhc2ljX2lvcyYgX19yaHMpDQogICAgew0KDQoNCg0KDQogICAgICBfV29yZHMqIF9fd29yZHMg PSAoX19yaHMuX01fd29yZF9zaXplIDw9IF9TX2xvY2FsX3dvcmRfc2l6ZSkgPw0KICAgICAgICBf TV9sb2NhbF93b3JkIDogbmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX3NpemVdOw0KDQoNCiAgICAg IF9DYWxsYmFja19saXN0KiBfX2NiID0gX19yaHMuX01fY2FsbGJhY2tzOw0KICAgICAgaWYgKF9f Y2IpDQogICAgICAgIF9fY2ItPl9NX2FkZF9yZWZlcmVuY2UoKTsNCiAgICAgIF9NX2NhbGxfY2Fs bGJhY2tzKGVyYXNlX2V2ZW50KTsNCiAgICAgIGlmIChfTV93b3JkICE9IF9NX2xvY2FsX3dvcmQp DQogICAgICAgIHsNCiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsNCiAgICAgICAgICBfTV93 b3JkID0gMDsNCiAgICAgICAgfQ0KICAgICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsNCg0KICAg ICAgX01fY2FsbGJhY2tzID0gX19jYjsNCiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9f cmhzLl9NX3dvcmRfc2l6ZTsgKytfX2kpDQogICAgICAgIF9fd29yZHNbX19pXSA9IF9fcmhzLl9N X3dvcmRbX19pXTsNCiAgICAgIGlmIChfTV93b3JkICE9IF9NX2xvY2FsX3dvcmQpDQogICAgICAg IHsNCiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsNCiAgICAgICAgICBfTV93b3JkID0gMDsN CiAgICAgICAgfQ0KICAgICAgX01fd29yZCA9IF9fd29yZHM7DQogICAgICBfTV93b3JkX3NpemUg PSBfX3Jocy5fTV93b3JkX3NpemU7DQoNCiAgICAgIHRoaXMtPmZsYWdzKF9fcmhzLmZsYWdzKCkp Ow0KICAgICAgdGhpcy0+d2lkdGgoX19yaHMud2lkdGgoKSk7DQogICAgICB0aGlzLT5wcmVjaXNp b24oX19yaHMucHJlY2lzaW9uKCkpOw0KICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgpKTsNCiAg ICAgIHRoaXMtPmZpbGwoX19yaHMuZmlsbCgpKTsNCg0KICAgICAgdGhpcy0+ZXhjZXB0aW9ucyhf X3Jocy5leGNlcHRpb25zKCkpOw0KDQogICAgICBfTV9jYWxsX2NhbGxiYWNrcyhjb3B5Zm10X2V2 ZW50KTsNCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNoYXINCiAgICBiYXNpY19pb3M8X0NoYXJU LCBfVHJhaXRzPjo6bmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0DQog ICAgew0KICAgICAgY2hhciBfX3JldCA9IF9fZGZhdWx0Ow0KICAgICAgaWYgKF9NX2NoZWNrX2Zh Y2V0KF9NX2ZjdHlwZSkpDQogICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT5uYXJyb3coX19jLCBf X2RmYXVsdCk7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBfQ2hhclQNCiAgICBiYXNpY19pb3M8 X0NoYXJULCBfVHJhaXRzPjo6d2lkZW4oY2hhciBfX2MpIGNvbnN0DQogICAgew0KICAgICAgY2hh cl90eXBlIF9fcmV0ID0gY2hhcl90eXBlKCk7DQogICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f ZmN0eXBlKSkNCiAgICAgICAgX19yZXQgPSBfTV9mY3R5cGUtPndpZGVuKF9fYyk7DQogICAgICBy ZXR1cm4gX19yZXQ7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPg0KICAgIGxvY2FsZQ0KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+ OjppbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsNCiAgICAgIGxvY2FsZSBfX29sZCh0 aGlzLT5nZXRsb2MoKSk7DQogICAgICBpb3NfYmFzZTo6aW1idWUoX19sb2MpOw0KICAgICAgX01f Y2FjaGVfZmFjZXRzKF9fbG9jKTsNCiAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICE9IDApDQogICAg ICAgIHRoaXMtPnJkYnVmKCktPnB1YmltYnVlKF9fbG9jKTsNCiAgICAgIHJldHVybiBfX29sZDsN CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0K ICAgIHZvaWQNCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW5pdChiYXNpY19zdHJl YW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikNCiAgICB7DQoNCiAgICAgIGlvc19iYXNlOjpf TV9pbml0KCk7DQogICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9zX2xvY2FsZSk7DQogICAgICBf TV90aWUgPSAwOw0KIyAxNTkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLnRj YyIgMw0KICAgICAgX01fZmlsbCA9IF9DaGFyVCgpOw0KICAgICAgX01fZmlsbF9pbml0ID0gZmFs c2U7DQoNCiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7DQogICAgICBfTV9zdHJlYW1idWYg PSBfX3NiOw0KICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zYiA/IGdvb2RiaXQgOiBiYWRi aXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4NCiAgICB2b2lkDQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Ol9NX2NhY2hlX2Zh Y2V0cyhjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsNCiAgICAgIGlmIChoYXNfZmFjZXQ8X19j dHlwZV90eXBlPihfX2xvYykpDQogICAgICAgIF9NX2ZjdHlwZSA9ICZ1c2VfZmFjZXQ8X19jdHlw ZV90eXBlPihfX2xvYyk7DQogICAgICBlbHNlDQogICAgICAgIF9NX2ZjdHlwZSA9IDA7DQoNCiAg ICAgIGlmIChoYXNfZmFjZXQ8X19udW1wdXRfdHlwZT4oX19sb2MpKQ0KICAgICAgICBfTV9mbnVt cHV0ID0gJnVzZV9mYWNldDxfX251bXB1dF90eXBlPihfX2xvYyk7DQogICAgICBlbHNlDQogICAg ICAgIF9NX2ZudW1wdXQgPSAwOw0KICAgICAgaWYgKGhhc19mYWNldDxfX251bWdldF90eXBlPihf X2xvYykpDQogICAgICAgIF9NX2ZudW1nZXQgPSAmdXNlX2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9f bG9jKTsNCiAgICAgIGVsc2UNCiAgICAgICAgX01fZm51bWdldCA9IDA7DQogICAgfQ0KDQoNCg0K DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3M8Y2hhcj47DQogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBiYXNpY19pb3M8d2NoYXJfdD47DQp9DQojIDIwOCAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9iYXNpY19pb3MuaCIgMiAzDQojIDUyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9p b3MiIDIgMw0KIyA0NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIgMiAzDQoNCm5hbWVz cGFjZSBzdGQNCnsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+DQogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxf Q2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hh clQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBp bnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5 cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOw0K ICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYgYmFz aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5 cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsNCiAgICAgIHR5cGVk ZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOw0KICAgICAg dHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVm X2l0ZXI7DQogICAgICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRlcj4g X19udW1wdXRfdHlwZTsNCiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7 DQoNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGJhc2ljX29zdHJlYW0oX19zdHJlYW1idWZfdHlw ZSogX19zYikNCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQ0KDQogICAgICB2aXJ0dWFsDQog ICAgICB+YmFzaWNfb3N0cmVhbSgpIHsgfQ0KDQoNCiAgICAgIGNsYXNzIHNlbnRyeTsNCiAgICAg IGZyaWVuZCBjbGFzcyBzZW50cnk7DQoNCg0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAg IG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFtX3R5cGUmKSk7DQoN CiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PChfX2lvc190eXBlJiAoKl9f cGYpKF9faW9zX3R5cGUmKSk7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0 b3I8PChpb3NfYmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2UmKSk7DQoNCg0KICAgICAgX19vc3RyZWFt X3R5cGUmDQogICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsNCg0KICAgICAgX19vc3RyZWFtX3R5 cGUmDQogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKTsNCg0KICAgICAgX19vc3Ry ZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KGJvb2wgX19uKTsNCg0KICAgICAgX19vc3RyZWFt X3R5cGUmDQogICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikNCiAgICAgIHsNCiAgICAgICAgaW9z X2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmll bGQ7DQogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFz ZTo6aGV4KQ0KICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVu c2lnbmVkIGxvbmc+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19j YXN0PHVuc2lnbmVkIHNob3J0PihfX24pKSk7DQogICAgICAgIGVsc2UNCiAgICAgICAgICByZXR1 cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsNCiAgICAgIH0NCg0K ICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IF9f bikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQg bG9uZz4oX19uKSk7IH0NCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8 KGludCBfX24pDQogICAgICB7DQogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRo aXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOw0KICAgICAgICBpZiAoX19mbXQgJiBp b3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkNCiAgICAgICAgICByZXR1cm4g dGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikpKTsN CiAgICAgICAgZWxzZQ0KICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19j YXN0PGxvbmc+KF9fbikpOw0KICAgICAgfQ0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAg IG9wZXJhdG9yPDwodW5zaWduZWQgaW50IF9fbikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJh dG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0NCg0KDQogICAgICBfX29z dHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwobG9uZyBsb25nIF9fbik7DQoNCiAgICAgIF9f b3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgX19uKTsN Cg0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwoZG91YmxlIF9fZik7 DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PChmbG9hdCBfX2YpDQog ICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7 IH0NCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KGxvbmcgZG91Ymxl IF9fZik7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PChjb25zdCB2 b2lkKiBfX3ApOw0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwoX19z dHJlYW1idWZfdHlwZSogX19zYik7DQoNCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBw dXQoY2hhcl90eXBlIF9fYyk7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgd3JpdGUo Y29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsNCg0KICAgICAgX19vc3RyZWFt X3R5cGUmDQogICAgICBmbHVzaCgpOw0KDQoNCiAgICAgIHBvc190eXBlDQogICAgICB0ZWxscCgp Ow0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIHNlZWtwKHBvc190eXBlKTsNCg0KICAg ICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtk aXIpOw0KICAgIH07DQoNCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPg0KICAgIGNsYXNzIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5 DQogICAgew0KDQogICAgICBib29sIF9NX29rOw0KICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs X1RyYWl0cz4mIF9NX29zOw0KDQogICAgcHVibGljOg0KICAgICAgZXhwbGljaXQNCiAgICAgIHNl bnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7DQoNCiAgICAgIH5zZW50 cnkoKQ0KICAgICAgew0KDQogICAgICAgIGlmIChfTV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVu aXRidWYgJiYgIXVuY2F1Z2h0X2V4Y2VwdGlvbigpKQ0KICAgICAgICAgIHsNCg0KICAgICAgICAg ICAgaWYgKF9NX29zLnJkYnVmKCkgJiYgX01fb3MucmRidWYoKS0+cHVic3luYygpID09IC0xKQ0K ICAgICAgICAgICAgICBfTV9vcy5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAg ICB9DQogICAgICB9DQoNCiAgICAgIG9wZXJhdG9yIGJvb2woKQ0KICAgICAgeyByZXR1cm4gX01f b2s7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8 PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKTsNCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpDQogICAgeyByZXR1cm4gKF9fb3V0IDw8 IF9fb3V0LndpZGVuKF9fYykpOyB9DQoNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4NCiAg ICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0 cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKTsNCg0KDQogIHRlbXBsYXRlPGNs YXNzIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYNCiAgICBvcGVy YXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBzaWduZWQgY2hhciBf X2MpDQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9DQoN CiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp dHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQs IHVuc2lnbmVkIGNoYXIgX19jKQ0KICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxj aGFyPihfX2MpKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8 PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9f cyk7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAmDQogICAgb3BlcmF0b3I8PChiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOw0KDQoNCiAg dGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNv bnN0IGNoYXIqIF9fcyk7DQoNCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2lj X29zdHJlYW08Y2hhciwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNo YXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3Qgc2lnbmVkIGNoYXIqIF9fcykNCiAgICB7IHJldHVy biAoX19vdXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0NCg0KICB0 ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4g Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNv bnN0IHVuc2lnbmVkIGNoYXIqIF9fcykNCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnBy ZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mDQogICAgZW5kbChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpDQogICAg eyByZXR1cm4gZmx1c2goX19vcy5wdXQoX19vcy53aWRlbignXG4nKSkpOyB9DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYNCiAgICBlbmRzKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19vcykNCiAgICB7IHJldHVybiBfX29zLnB1dChfQ2hhclQoKSk7IH0NCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+Jg0KICAgIGZsdXNoKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19vcykNCiAgICB7IHJldHVybiBfX29zLmZsdXNoKCk7IH0NCg0KfQ0KDQoNCg0KDQoNCiMg MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9vc3RyZWFtLnRjYyIgMSAzDQojIDM2ICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL29zdHJlYW0udGNjIiAzDQoNCiMgMSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvbG9jYWxlIiAxIDMNCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2xvY2FsZSIg Mw0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNj IiAxIDMNCiMgMzcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2Mi IDMNCg0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jZXJybm8iIDEgMw0KIyA0NyAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvY2Vycm5vIiAzDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEg Mw0KDQoNCg0KdHlwZWRlZiBpbnQgZXJyb3JfdDsNCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2Vy cm5vLmgiIDEgMw0KDQoNCg0KDQoNCg0KZXh0ZXJuICJDIiB7DQoNCg0KDQoNCg0KDQoNCmV4dGVy biBpbnQgKl9fZXJybm8gKHZvaWQpOw0KDQoNCg0KDQpleHRlcm4gX19hdHRyaWJ1dGVfXygoZGxs aW1wb3J0KSkgY29uc3QgY2hhciAqIGNvbnN0IF9zeXNfZXJybGlzdFtdOw0KZXh0ZXJuIF9fYXR0 cmlidXRlX18oKGRsbGltcG9ydCkpIGludCBfc3lzX25lcnI7DQoNCmV4dGVybiBfX2F0dHJpYnV0 ZV9fKChkbGxpbXBvcnQpKSBjb25zdCBjaGFyICogY29uc3Qgc3lzX2Vycmxpc3RbXTsNCmV4dGVy biBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBpbnQgc3lzX25lcnI7DQojIDE1OCAiL3Vzci9p bmNsdWRlL3N5cy9lcnJuby5oIiAzDQp9DQojIDcgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAyIDMN CiMgNDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NlcnJubyIgMiAzDQojIDM5ICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCg0KDQoNCg0KIyAxICIvdXNy L2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDEgMw0KIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv bGltaXRzIiAzDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3aW4vYml0 cy9jcHVfbGltaXRzLmgiIDEgMw0KIyA0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAy IDMNCiMgODg3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMNCm5hbWVzcGFjZSBzdGQN CnsNCiAgZW51bSBmbG9hdF9yb3VuZF9zdHlsZQ0KICB7DQogICAgcm91bmRfaW5kZXRlcm1pbmF0 ZSA9IC0xLA0KICAgIHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwNCiAgICByb3VuZF90b19uZWFyZXN0 ID0gMSwNCiAgICByb3VuZF90b3dhcmRfaW5maW5pdHkgPSAyLA0KICAgIHJvdW5kX3Rvd2FyZF9u ZWdfaW5maW5pdHkgPSAzDQogIH07DQoNCiAgZW51bSBmbG9hdF9kZW5vcm1fc3R5bGUNCiAgew0K ICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEsDQogICAgZGVub3JtX2Fic2VudCA9IDAsDQog ICAgZGVub3JtX3ByZXNlbnQgPSAxDQogIH07DQoNCg0KDQoNCiAgc3RydWN0IF9fbnVtZXJpY19s aW1pdHNfYmFzZQ0KICB7DQogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSBm YWxzZTsNCg0KICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMDsNCiAgICBzdGF0aWMgY29u c3QgaW50IGRpZ2l0czEwID0gMDsNCiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBm YWxzZTsNCiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7DQogICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsNCiAgICBzdGF0aWMgY29uc3QgaW50IHJh ZGl4ID0gMDsNCg0KICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICBz dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICBzdGF0aWMgY29uc3QgaW50 IG1heF9leHBvbmVudCA9IDA7DQogICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9 IDA7DQoNCiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsNCiAgICBzdGF0aWMgY29uc3QgZmxvYXRf ZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfaWVjNTU5ID0gZmFsc2U7DQogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IGZh bHNlOw0KICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOw0KDQogICAgc3Rh dGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsNCiAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55 bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg cm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+DQogICAgc3RydWN0IG51bWVyaWNfbGltaXRzIDogcHVibGljIF9fbnVtZXJpY19s aW1pdHNfYmFzZQ0KICAgIHsNCiAgICAgIHN0YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVy biBzdGF0aWNfY2FzdDxfVHA+KDApOyB9DQogICAgICBzdGF0aWMgX1RwIG1heCgpIHRocm93KCkg eyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQ0KICAgICAgc3RhdGljIF9UcCBlcHNpbG9u KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9DQogICAgICBzdGF0aWMg X1RwIHJvdW5kX2Vycm9yKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9 DQogICAgICBzdGF0aWMgX1RwIGluZmluaXR5KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2Fz dDxfVHA+KDApOyB9DQogICAgICBzdGF0aWMgX1RwIHF1aWV0X05hTigpIHRocm93KCkgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQ0KICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFO KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9DQogICAgICBzdGF0aWMg X1RwIGRlbm9ybV9taW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0N CiAgICB9Ow0KDQoNCg0KICB0ZW1wbGF0ZTw+DQogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGJv b2w+DQogICAgew0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl Ow0KDQogICAgICBzdGF0aWMgYm9vbCBtaW4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiBmYWxz ZTsgfQ0KDQogICAgICBzdGF0aWMgYm9vbCBtYXgoKSB0aHJvdygpDQogICAgICB7IHJldHVybiB0 cnVlOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTsNCiAgICAgIHN0YXRp YyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln bmVkID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsN CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBj b25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAgc3RhdGljIGJvb2wgZXBzaWxvbigpIHRocm93KCkN CiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9DQogICAgICBzdGF0aWMgYm9vbCByb3VuZF9lcnJvcigp IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50 MTAgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAg c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X3F1aWV0X05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGlu Z19OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVu b3JtX2xvc3MgPSBmYWxzZTsNCg0KICAgICAgc3RhdGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygp DQogICAgICB7IHJldHVybiBmYWxzZTsgfQ0KICAgICAgc3RhdGljIGJvb2wgcXVpZXRfTmFOKCkg dGhyb3coKQ0KICAgICAgeyByZXR1cm4gZmFsc2U7IH0NCiAgICAgIHN0YXRpYyBib29sIHNpZ25h bGluZ19OYU4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiBmYWxzZTsgfQ0KICAgICAgc3RhdGlj IGJvb2wgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9DQoNCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19t b2R1bG8gPSBmYWxzZTsNCg0KDQoNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0 cnVlDQogICAgICAgICAgICAgICB8fCB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu eW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5 bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQoNCg0KICB0ZW1w bGF0ZTw+DQogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+DQogICAgew0KICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICBzdGF0aWMgY2hh ciBtaW4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiAoY2hhcikoLTEyNyAtIDEpOyB9DQogICAg ICBzdGF0aWMgY2hhciBtYXgoKSB0aHJvdygpDQogICAgICB7IHJldHVybiAoY2hhcikxMjc7IH0N Cg0KICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3Ow0KICAgICAgc3RhdGljIGNvbnN0 IGludCBkaWdpdHMxMCA9IDc7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0 cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgaW50 IHJhZGl4ID0gMjsNCiAgICAgIHN0YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJvdygpDQogICAgICB7 IHJldHVybiBjaGFyKCk7IH0NCiAgICAgIHN0YXRpYyBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3co KQ0KICAgICAgeyByZXR1cm4gY2hhcigpOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu X2V4cG9uZW50ID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAw Ow0KICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAgc3RhdGlj IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0 X05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g PSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y bSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xv c3MgPSBmYWxzZTsNCg0KICAgICAgc3RhdGljIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpDQogICAg ICB7IHJldHVybiBjaGFyKCk7IH0NCiAgICAgIHN0YXRpYyBjaGFyIHF1aWV0X05hTigpIHRocm93 KCkNCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQ0KICAgICAgc3RhdGljIGNoYXIgc2lnbmFsaW5n X05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQ0KICAgICAgc3RhdGljIGNo YXIgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+ KDApOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOw0KICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw cyA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJv dW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07DQojIDEwNzEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2xp bWl0cyIgMw0KICB0ZW1wbGF0ZTw+DQogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNpZ25lZCBj aGFyPg0KICAgIHsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1 ZTsNCg0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkNCiAgICAgIHsgcmV0 dXJuICgtMTI3IC0gMSk7IH0NCiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtYXgoKSB0aHJvdygp DQogICAgICB7IHJldHVybiAxMjc7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMg PSA3Ow0KICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7DQogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf aW50ZWdlciA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7 DQogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgIHN0YXRpYyBzaWduZWQg Y2hhciBlcHNpbG9uKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAgc3RhdGlj IHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMDsgfQ0K DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICBzdGF0aWMg Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4 X2V4cG9uZW50ID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAw Ow0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3Qg ZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgIHN0YXRpYyBz aWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PHNpZ25lZCBjaGFyPigwKTsgfQ0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHF1aWV0X05hTigp IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQ0K ICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICB7 IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0NCiAgICAgIHN0YXRpYyBzaWdu ZWQgY2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 c2lnbmVkIGNoYXI+KDApOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9 IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOw0KDQogICAgICBzdGF0aWMgY29u c3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19i ZWZvcmUgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07DQojIDExMjggIi91c3IvaW5jbHVk ZS9jKysvMy4yL2xpbWl0cyIgMw0KICB0ZW1wbGF0ZTw+DQogICAgc3RydWN0IG51bWVyaWNfbGlt aXRzPHVuc2lnbmVkIGNoYXI+DQogICAgew0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl Y2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW4oKSB0aHJv dygpDQogICAgICB7IHJldHVybiAwOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtYXgo KSB0aHJvdygpDQogICAgICB7IHJldHVybiAoMTI3ICogMiArIDEpOyB9DQoNCiAgICAgIHN0YXRp YyBjb25zdCBpbnQgZGlnaXRzID0gODsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg PSAyOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7DQogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOw0K ICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkNCiAgICAgIHsgcmV0 dXJuIDA7IH0NCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3co KQ0KICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv bmVudCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf aW5maW5pdHkgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g PSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs c2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBk ZW5vcm1fYWJzZW50Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g ZmFsc2U7DQoNCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhyb3coKQ0K ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0NCiAgICAgIHN0 YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0 YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hh ciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z aWduZWQgY2hhcj4oMCk7IH0NCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRlbm9ybV9taW4o KSB0aHJvdygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsg fQ0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsNCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfbW9kdWxvID0gdHJ1ZTsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0 cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQog ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90 b3dhcmRfemVybzsNCiAgICB9Ow0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTw+DQogICAgc3RydWN0 IG51bWVyaWNfbGltaXRzPHdjaGFyX3Q+DQogICAgew0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICBzdGF0aWMgd2NoYXJfdCBtaW4oKSB0aHJv dygpDQogICAgICB7IHJldHVybiAod2NoYXJfdCkoLTIxNDc0ODM2NDdMIC0gMSk7IH0NCiAgICAg IHN0YXRpYyB3Y2hhcl90IG1heCgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuICh3Y2hhcl90KTIx NDc0ODM2NDdMOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7DQogICAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX3NpZ25lZCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0g dHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAgc3RhdGljIHdjaGFyX3QgZXBzaWxvbigp IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgIHN0YXRpYyB3Y2hhcl90IHJvdW5k X2Vycm9yKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICBzdGF0aWMgY29u c3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv bmVudDEwID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu YWxpbmdfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxl IGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgIHN0YXRpYyB3Y2hhcl90IGluZmluaXR5KCkg dGhyb3coKQ0KICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9DQogICAgICBzdGF0aWMgd2NoYXJf dCBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0NCiAgICAg IHN0YXRpYyB3Y2hhcl90IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiB3 Y2hhcl90KCk7IH0NCiAgICAgIHN0YXRpYyB3Y2hhcl90IGRlbm9ybV9taW4oKSB0aHJvdygpDQog ICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf aWVjNTU5ID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1 ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7DQoNCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp bnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0 eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsNCiMgMTI0MSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzDQogIHRlbXBsYXRlPD4NCiAgICBzdHJ1Y3QgbnVt ZXJpY19saW1pdHM8c2hvcnQ+DQogICAgew0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl Y2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICBzdGF0aWMgc2hvcnQgbWluKCkgdGhyb3coKQ0KICAg ICAgeyByZXR1cm4gKC0zMjc2NyAtIDEpOyB9DQogICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhy b3coKQ0KICAgICAgeyByZXR1cm4gMzI3Njc7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGludCBk aWdpdHMgPSAxNTsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0Ow0KICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2ludGVnZXIgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg PSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICBzdGF0aWMg c2hvcnQgZXBzaWxvbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgIHN0YXRp YyBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAg ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0 IGludCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv bmVudCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsNCg0K ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZsb2F0 X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICBzdGF0aWMgc2hvcnQg aW5maW5pdHkoKSB0aHJvdygpDQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9DQogICAgICBzdGF0 aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQ0K ICAgICAgc3RhdGljIHNob3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICB7IHJldHVy biBzaG9ydCgpOyB9DQogICAgICBzdGF0aWMgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkNCiAg ICAgIHsgcmV0dXJuIHNob3J0KCk7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVj NTU5ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0K ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsNCg0KICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l c3NfYmVmb3JlID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg cm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KIyAxMjk4ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9saW1pdHMiIDMNCiAgdGVtcGxhdGU8Pg0KICAgIHN0cnVjdCBudW1lcmlj X2xpbWl0czx1bnNpZ25lZCBzaG9ydD4NCiAgICB7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19zcGVjaWFsaXplZCA9IHRydWU7DQoNCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4o KSB0aHJvdygpDQogICAgICB7IHJldHVybiAwOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hv cnQgbWF4KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gKDMyNzY3ICogMiArIDEpOyB9DQoNCiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTY7DQogICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0czEwID0gNDsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNl Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgaW50IHJh ZGl4ID0gMjsNCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQ0K ICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHJvdW5kX2Vy cm9yKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICBzdGF0aWMgY29uc3Qg aW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu dDEwID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxp bmdfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhh c19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rl bm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmZpbml0 eSgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pigw KTsgfQ0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkNCiAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQ0KICAgICAgc3Rh dGljIHVuc2lnbmVkIHNob3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0NCiAgICAgIHN0YXRpYyB1bnNpZ25l ZCBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 dW5zaWduZWQgc2hvcnQ+KDApOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1 OSA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7DQoNCiAgICAgIHN0YXRpYyBj b25zdCBib29sIHRyYXBzID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNz X2JlZm9yZSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsNCg0KDQoNCg0KDQoNCiAgdGVt cGxhdGU8Pg0KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxpbnQ+DQogICAgew0KICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICBzdGF0aWMgaW50 IG1pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIChpbnQpKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9 DQogICAgICBzdGF0aWMgaW50IG1heCgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIChpbnQpMjE0 NzQ4MzY0N0w7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsNCiAgICAg IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0 cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAgICAgc3Rh dGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICBzdGF0aWMgaW50IGVwc2lsb24oKSB0aHJv dygpDQogICAgICB7IHJldHVybiAwOyB9DQogICAgICBzdGF0aWMgaW50IHJvdW5kX2Vycm9yKCkg dGhyb3coKQ0KICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgaW50IG1p bl9leHBvbmVudCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g MDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll dF9OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFO ID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5v cm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s b3NzID0gZmFsc2U7DQoNCiAgICAgIHN0YXRpYyBpbnQgaW5maW5pdHkoKSB0aHJvdygpDQogICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9DQogICAgICBzdGF0aWMgaW50IHF1aWV0 X05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0NCiAg ICAgIHN0YXRpYyBpbnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0 YXRpY19jYXN0PGludD4oMCk7IH0NCiAgICAgIHN0YXRpYyBpbnQgZGVub3JtX21pbigpIHRocm93 KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0NCg0KICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2JvdW5kZWQgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1 ZTsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3Qg ZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9 Ow0KIyAxNDEwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMNCiAgdGVtcGxhdGU8Pg0K ICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+DQogICAgew0KICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICBzdGF0aWMgdW5z aWduZWQgaW50IG1pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgICAgICBz dGF0aWMgdW5zaWduZWQgaW50IG1heCgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuICh1bnNpZ25l ZCkoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln aXRzID0gMzI7DQogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsNCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9 IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgIHN0YXRpYyB1 bnNpZ25lZCBpbnQgZXBzaWxvbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAg IHN0YXRpYyB1bnNpZ25lZCBpbnQgcm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAgICB7IHJldHVy biAwOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0 IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l bnQxMCA9IDA7DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOw0KICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRp YyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0KICAgICAg c3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0 YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0NCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQg cXVpZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg aW50PigwKTsgfQ0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBzaWduYWxpbmdfTmFOKCkgdGhy b3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQ0KICAg ICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQ0KICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQ0KDQogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19pZWM1NTkgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRl ZCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOw0KDQog ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9y b3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07DQoNCg0K DQoNCg0KDQogIHRlbXBsYXRlPD4NCiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZz4NCiAg ICB7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7DQoNCiAg ICAgIHN0YXRpYyBsb25nIG1pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuICgtMjE0NzQ4MzY0 N0wgLSAxKTsgfQ0KICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhyb3coKQ0KICAgICAgeyByZXR1 cm4gMjE0NzQ4MzY0N0w7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsN CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Ow0KICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVn ZXIgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAg ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICBzdGF0aWMgbG9uZyBlcHNpbG9u KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAgc3RhdGljIGxvbmcgcm91bmRf ZXJyb3IoKSB0aHJvdygpDQogICAgICB7IHJldHVybiAwOyB9DQoNCiAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50MTAgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAg ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX3F1aWV0X05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25h bGluZ19OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUg aGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf ZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0KICAgICAgc3RhdGljIGxvbmcgaW5maW5pdHkoKSB0aHJv dygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQ0KICAgICAgc3RhdGlj IGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9u Zz4oMCk7IH0NCiAgICAgIHN0YXRpYyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQ0KICAgICAgc3RhdGljIGxvbmcgZGVu b3JtX21pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9 DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7DQogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX21vZHVsbyA9IHRydWU7DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1 ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAg ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93 YXJkX3plcm87DQogICAgfTsNCiMgMTUyMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAz DQogIHRlbXBsYXRlPD4NCiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz4N CiAgICB7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7DQoN CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJu IDA7IH0NCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heCgpIHRocm93KCkNCiAgICAgIHsg cmV0dXJuICgyMTQ3NDgzNjQ3TCAqIDJVICsgMSk7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGlu dCBkaWdpdHMgPSAzMjsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Ow0KICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4 YWN0ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAgc3Rh dGljIHVuc2lnbmVkIGxvbmcgZXBzaWxvbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0N CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQ0KICAgICAg eyByZXR1cm4gMDsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7 DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4 X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkg PSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsN CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz ZW50Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoN CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0NCiAgICAgIHN0YXRpYyB1bnNp Z25lZCBsb25nIHF1aWV0X05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PHVuc2lnbmVkIGxvbmc+KDApOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaWduYWxp bmdfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u Zz4oMCk7IH0NCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygp DQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQ0KDQogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1 bG8gPSB0cnVlOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAg ICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAgIHN0YXRp YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv Ow0KICAgIH07DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPD4NCiAgICBzdHJ1Y3QgbnVtZXJpY19s aW1pdHM8bG9uZyBsb25nPg0KICAgIHsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp YWxpemVkID0gdHJ1ZTsNCg0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpDQog ICAgICB7IHJldHVybiAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAtIDEpOyB9DQogICAgICBzdGF0 aWMgbG9uZyBsb25nIG1heCgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDkyMjMzNzIwMzY4NTQ3 NzU4MDdMTDsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDYzOw0KICAgICAg c3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE4Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0 cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAgICAgc3Rh dGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICBzdGF0aWMgbG9uZyBsb25nIGVwc2lsb24o KSB0aHJvdygpDQogICAgICB7IHJldHVybiAwOyB9DQogICAgICBzdGF0aWMgbG9uZyBsb25nIHJv dW5kX2Vycm9yKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICBzdGF0aWMg Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l eHBvbmVudDEwID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsN CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19z aWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0 eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgIHN0YXRpYyBsb25nIGxvbmcgaW5maW5p dHkoKSB0aHJvdygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9 DQogICAgICBzdGF0aWMgbG9uZyBsb25nIHF1aWV0X05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0NCiAgICAgIHN0YXRpYyBsb25nIGxvbmcg c2lnbmFsaW5nX05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcg bG9uZz4oMCk7IH0NCiAgICAgIHN0YXRpYyBsb25nIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkN CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0NCg0KICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0g dHJ1ZTsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29u c3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAg ICB9Ow0KIyAxNjM0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMNCiAgdGVtcGxhdGU8 Pg0KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nIGxvbmc+DQogICAgew0K ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICBz dGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7 IH0NCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQ0KICAgICAg eyByZXR1cm4gKDkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAqIDJVTEwgKyAxKTsgfQ0KDQogICAgICBz dGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0Ow0KICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp dHMxMCA9IDE5Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7DQog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg PSAyOw0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQ0K ICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyByb3Vu ZF9lcnJvcigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAgc3RhdGljIGNv bnN0IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw b25lbnQxMCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7DQog ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsNCg0KICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2ln bmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls ZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25n IGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg bG9uZyBsb25nPigwKTsgfQ0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBxdWlldF9O YU4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxv bmc+KDApOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHNpZ25hbGluZ19OYU4o KSB0aHJvdygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+ KDApOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJv dygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9 DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7DQogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX21vZHVsbyA9IHRydWU7DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1 ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAg ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93 YXJkX3plcm87DQogICAgfTsNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8Pg0KICAgIHN0cnVjdCBu dW1lcmljX2xpbWl0czxmbG9hdD4NCiAgICB7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z cGVjaWFsaXplZCA9IHRydWU7DQoNCiAgICAgIHN0YXRpYyBmbG9hdCBtaW4oKSB0aHJvdygpDQog ICAgICB7IHJldHVybiAxLjE3NTQ5NDM1ZS0zOEY7IH0NCiAgICAgIHN0YXRpYyBmbG9hdCBtYXgo KSB0aHJvdygpDQogICAgICB7IHJldHVybiAzLjQwMjgyMzQ3ZSszOEY7IH0NCg0KICAgICAgc3Rh dGljIGNvbnN0IGludCBkaWdpdHMgPSAyNDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz MTAgPSA2Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2V4YWN0ID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g MjsNCiAgICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4g MS4xOTIwOTI5MGUtMDdGOyB9DQogICAgICBzdGF0aWMgZmxvYXQgcm91bmRfZXJyb3IoKSB0aHJv dygpDQogICAgICB7IHJldHVybiAxLjBGOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu X2V4cG9uZW50ID0gLTEyNTsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAg PSAtMzc7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEyODsNCiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzODsNCg0KICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFs aW5nX05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBo YXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k ZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICBzdGF0aWMgZmxvYXQgaW5maW5pdHkoKSB0aHJv dygpDQogICAgICB7IHJldHVybiAwLjBGOyB9DQogICAgICBzdGF0aWMgZmxvYXQgcXVpZXRfTmFO KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMC4wRjsgfQ0KICAgICAgc3RhdGljIGZsb2F0IHNp Z25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiAwLjBGOyB9DQogICAgICBzdGF0 aWMgZmxvYXQgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0NCg0K ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X21vZHVsbyA9IGZhbHNlOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNl Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh cmRfemVybzsNCiAgICB9Ow0KIyAxNzY1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMN CiAgdGVtcGxhdGU8Pg0KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxkb3VibGU+DQogICAgew0K ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICBz dGF0aWMgZG91YmxlIG1pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDIuMjI1MDczODU4NTA3 MjAxNGUtMzA4OyB9DQogICAgICBzdGF0aWMgZG91YmxlIG1heCgpIHRocm93KCkNCiAgICAgIHsg cmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4OyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBp bnQgZGlnaXRzID0gNTM7DQogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTU7DQog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0KICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf ZXhhY3QgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAg c3RhdGljIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMi4yMjA0NDYw NDkyNTAzMTMxZS0xNjsgfQ0KICAgICAgc3RhdGljIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93 KCkNCiAgICAgIHsgcmV0dXJuIDEuMDsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l eHBvbmVudCA9IC0xMDIxOw0KICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9 IC0zMDc7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEwMjQ7DQogICAg ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMzA4Ow0KDQogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu YWxpbmdfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxl IGhhc19kZW5vcm0gPQ0KICAgICAgICAgICAgICBkZW5vcm1fYWJzZW50Ow0KICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgIHN0YXRpYyBkb3Vi bGUgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICB7IHJldHVybiAwLjA7IH0NCiAgICAgIHN0YXRp YyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMC4wOyB9DQogICAg ICBzdGF0aWMgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiAw LjA7IH0NCiAgICAgIHN0YXRpYyBkb3VibGUgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgIHsg cmV0dXJuIDAuMDsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxz ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7DQoNCiAgICAgIHN0YXRpYyBjb25zdCBi b29sIHRyYXBzID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZv cmUgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z dHlsZSA9DQogICAgICAgICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07DQojIDE4NDQg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMw0KICB0ZW1wbGF0ZTw+DQogICAgc3RydWN0 IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPg0KICAgIHsNCiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1p bigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDMuMzYyMTAzMTQzMTEyMDkzNTA2MjZlLTQ5MzJM OyB9DQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgbWF4KCkgdGhyb3coKQ0KICAgICAgeyByZXR1 cm4gMS4xODk3MzE0OTUzNTcyMzE3NjUwMmUrNDkzMkw7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0 IGludCBkaWdpdHMgPSA2NDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsN CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7DQogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19leGFjdCA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAg ICBzdGF0aWMgbG9uZyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDEu MDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TDsgfQ0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHJv dW5kX2Vycm9yKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMS4wTDsgfQ0KDQogICAgICBzdGF0 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xNjM4MTsNCiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWluX2V4cG9uZW50MTAgPSAtNDkzMTsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4 cG9uZW50ID0gMTYzODQ7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g NDkzMjsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9DQogICAgICAgICAgICAgICAgZmFsc2U7 DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPQ0KICAg ICAgICAgICAgICAgIGRlbm9ybV9hYnNlbnQ7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf ZGVub3JtX2xvc3MgPQ0KICAgICAgICAgICAgICAgIGZhbHNlOw0KDQogICAgICBzdGF0aWMgbG9u ZyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICB7IHJldHVybiAwLjBMOyB9DQogICAg ICBzdGF0aWMgbG9uZyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4g MC4wTDsgfQ0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygp DQogICAgICB7IHJldHVybiAwLjBMOyB9DQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZGVub3Jt X21pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0NCg0KICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19i b3VuZGVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNl Ow0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOw0KICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3Qg ZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPQ0KICAgICAgICByb3VuZF90b3dhcmRfemVy bzsNCiAgICB9Ow0KIyAxOTI0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMNCn0NCiMg NDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMw0KDQoj IDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL3R5cGVpbmZvIiAxIDMNCiMgNDAgIi91c3IvaW5jbHVk ZS9jKysvMy4yL3R5cGVpbmZvIiAzDQpleHRlcm4gIkMrKyIgew0KDQpuYW1lc3BhY2UgX19jeHhh Yml2MQ0Kew0KICBjbGFzcyBfX2NsYXNzX3R5cGVfaW5mbzsNCn0NCiMgNTcgIi91c3IvaW5jbHVk ZS9jKysvMy4yL3R5cGVpbmZvIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQogIGNsYXNzIHR5 cGVfaW5mbw0KICB7DQogIHB1YmxpYzoNCg0KDQoNCg0KICAgIHZpcnR1YWwgfnR5cGVfaW5mbygp Ow0KDQogIHByaXZhdGU6DQoNCiAgICB0eXBlX2luZm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2lu Zm8mKTsNCiAgICB0eXBlX2luZm8oY29uc3QgdHlwZV9pbmZvJik7DQoNCiAgcHJvdGVjdGVkOg0K ICAgIGNvbnN0IGNoYXIgKl9fbmFtZTsNCg0KICBwcm90ZWN0ZWQ6DQogICAgZXhwbGljaXQgdHlw ZV9pbmZvKGNvbnN0IGNoYXIgKl9fbik6IF9fbmFtZShfX24pIHsgfQ0KDQogIHB1YmxpYzoNCg0K DQoNCiAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QNCiAgICB7IHJldHVybiBfX25hbWU7IH0N Cg0KDQogICAgYm9vbCBiZWZvcmUoY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3Q7DQoNCg0K DQogICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0Ow0KIyAx MDUgIi91c3IvaW5jbHVkZS9jKysvMy4yL3R5cGVpbmZvIiAzDQogICAgYm9vbCBvcGVyYXRvciE9 KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0DQogICAgeyByZXR1cm4gIW9wZXJhdG9yPT0o X19hcmcpOyB9DQoNCg0KICBwdWJsaWM6DQoNCiAgICB2aXJ0dWFsIGJvb2wgX19pc19wb2ludGVy X3AoKSBjb25zdDsNCg0KICAgIHZpcnR1YWwgYm9vbCBfX2lzX2Z1bmN0aW9uX3AoKSBjb25zdDsN Cg0KDQoNCg0KDQoNCg0KICAgIHZpcnR1YWwgYm9vbCBfX2RvX2NhdGNoKGNvbnN0IHR5cGVfaW5m byAqX190aHJfdHlwZSwgdm9pZCAqKl9fdGhyX29iaiwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsNCg0KDQogICAgdmlydHVhbCBib29sIF9fZG9f dXBjYXN0KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3NfdHlwZV9pbmZvICpfX3RhcmdldCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKl9fb2JqX3B0cikgY29uc3Q7DQogIH07 DQoNCg0KDQogIGNsYXNzIGJhZF9jYXN0IDogcHVibGljIGV4Y2VwdGlvbg0KICB7DQogIHB1Ymxp YzoNCiAgICBiYWRfY2FzdCgpIHRocm93KCkgeyB9DQoNCg0KICAgIHZpcnR1YWwgfmJhZF9jYXN0 KCkgdGhyb3coKTsNCiAgfTsNCg0KDQogIGNsYXNzIGJhZF90eXBlaWQgOiBwdWJsaWMgZXhjZXB0 aW9uDQogIHsNCiAgcHVibGljOg0KICAgIGJhZF90eXBlaWQgKCkgdGhyb3coKSB7IH0NCg0KDQog ICAgdmlydHVhbCB+YmFkX3R5cGVpZCgpIHRocm93KCk7DQogIH07DQp9DQoNCn0NCiMgNDYgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMw0KDQpuYW1lc3Bh Y2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICBsb2NhbGUNCiAgICBs b2NhbGU6OmNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdA0KICAgIHsNCiAgICAg IF9JbXBsKiBfX3RtcCA9IG5ldyBfSW1wbCgqX01faW1wbCwgMSk7DQogICAgICBfX3RtcC0+X01f cmVwbGFjZV9mYWNldChfX290aGVyLl9NX2ltcGwsICZfRmFjZXQ6OmlkKTsNCiAgICAgIHJldHVy biBsb2NhbGUoX190bXApOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBib29sDQogICAgbG9jYWxlOjpv cGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f czEsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0DQogICAgew0KICAgICAgdHlwZWRlZiBzdGQ6OmNv bGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsNCiAgICAgIGNvbnN0IF9fY29sbGF0ZV90eXBl JiBfX2NvbGxhdGUgPSB1c2VfZmFjZXQ8X19jb2xsYXRlX3R5cGU+KCp0aGlzKTsNCiAgICAgIHJl dHVybiAoX19jb2xsYXRlLmNvbXBhcmUoX19zMS5kYXRhKCksIF9fczEuZGF0YSgpICsgX19zMS5s ZW5ndGgoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zMi5kYXRhKCksIF9f czIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZhY2V0Pg0KICAgIGNvbnN0IF9GYWNldCYNCiAgICB1c2VfZmFjZXQoY29uc3QgbG9j YWxlJiBfX2xvYykNCiAgICB7DQogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgp Ow0KICAgICAgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2MuX01faW1wbC0+X01fZmFj ZXRzOw0KICAgICAgaWYgKCEoX19pIDwgX19sb2MuX01faW1wbC0+X01fZmFjZXRzX3NpemUgJiYg X19mYWNldHNbX19pXSkpDQogICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsNCiAgICAgIHJldHVy biBzdGF0aWNfY2FzdDxjb25zdCBfRmFjZXQmPigqX19mYWNldHNbX19pXSk7DQogICAgfQ0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICBib29sDQogICAgaGFzX2ZhY2V0KGNvbnN0 IGxvY2FsZSYgX19sb2MpIHRocm93KCkNCiAgICB7DQogICAgICBzaXplX3QgX19pID0gX0ZhY2V0 OjppZC5fTV9pZCgpOw0KICAgICAgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2MuX01f aW1wbC0+X01fZmFjZXRzOw0KICAgICAgcmV0dXJuIChfX2kgPCBfX2xvYy5fTV9pbXBsLT5fTV9m YWNldHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKTsNCiAgICB9DQoNCg0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dl dDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBfTV9leHRyYWN0X2Zsb2F0KF9Jbkl0ZXIgX19iZWcs IF9Jbkl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgICAgICAgICAgaW9z X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9feHRyYykgY29uc3QNCiAgICB7DQogICAg ICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsNCiAgICAgIGNvbnN0 IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+ JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7DQogICAgICBjb25z dCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihf X2xvYyk7DQoNCg0KICAgICAgY29uc3QgY2hhcl90eXBlIF9fcGx1cyA9IF9fY3R5cGUud2lkZW4o JysnKTsNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScp Ow0KICAgICAgaW50IF9fcG9zID0gMDsNCiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7DQog ICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKSB8fCBfX3RyYWl0c190eXBl OjplcShfX2MsIF9fbWludXMpKQ0KICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQ0KICAgICAg ICB7DQogICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsNCiAg ICAgICAgICArK19fcG9zOw0KICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7DQogICAgICAgIH0N Cg0KDQogICAgICBjb25zdCBjaGFyX3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbihfU19hdG9t c1tfTV96ZXJvXSk7DQogICAgICBib29sIF9fZm91bmRfemVybyA9IGZhbHNlOw0KICAgICAgd2hp bGUgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkNCiAg ICAgICAgew0KICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7DQogICAgICAgICAgX19mb3VuZF96 ZXJvID0gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgaWYgKF9fZm91bmRfemVybykNCiAgICAgICAg ew0KICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfTV96ZXJvXTsNCiAgICAgICAgICArK19f cG9zOw0KICAgICAgICB9DQoNCg0KICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX01fRSAtIF9N X3plcm8gKyAxOw0KICAgICAgY2hhcl90eXBlIF9fd2F0b21zW19fbGVuXTsNCiAgICAgIF9fY3R5 cGUud2lkZW4oX1NfYXRvbXMsIF9TX2F0b21zICsgX19sZW4sIF9fd2F0b21zKTsNCiAgICAgIGJv b2wgX19mb3VuZF9kZWMgPSBmYWxzZTsNCiAgICAgIGJvb2wgX19mb3VuZF9zY2kgPSBmYWxzZTsN CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX2RlYyA9IF9fbnAuZGVjaW1hbF9wb2ludCgpOw0KDQog ICAgICBzdHJpbmcgX19mb3VuZF9ncm91cGluZzsNCiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3Vw aW5nID0gX19ucC5ncm91cGluZygpOw0KICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5nID0gX19n cm91cGluZy5zaXplKCk7DQogICAgICBpbnQgX19zZXBfcG9zID0gMDsNCiAgICAgIGNvbnN0IGNo YXJfdHlwZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOw0KDQogICAgICB3aGlsZSAoX19i ZWcgIT0gX19lbmQpDQogICAgICAgIHsNCg0KICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19w ID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9tcywgMTAsIF9fYyk7DQoNCg0KICAgICAgICAg IGlmIChfX3AgJiYgIV9fdHJhaXRzX3R5cGU6OmVxKF9fYywgY2hhcl90eXBlKCkpKQ0KICAgICAg ICAgICAgew0KDQogICAgICAgICAgICAgICsrX19wb3M7DQogICAgICAgICAgICAgIF9feHRyYyAr PSBfU19hdG9tc1tfX3AgLSBfX3dhdG9tc107DQogICAgICAgICAgICAgICsrX19zZXBfcG9zOw0K ICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg IGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19zZXApDQogICAgICAgICAgICAgICAg ICAgJiYgX19jaGVja19ncm91cGluZyAmJiAhX19mb3VuZF9kZWMpDQogICAgICAgICAgICB7DQoN Cg0KICAgICAgICAgICAgICBpZiAoX19zZXBfcG9zKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAg ICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBf cG9zKTsNCiAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7DQogICAgICAgICAgICAgICAg ICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZWxz ZQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNl OjpmYWlsYml0Ow0KICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywg X19kZWMpICYmICFfX2ZvdW5kX2RlYykNCiAgICAgICAgICAgIHsNCg0KDQoNCiAgICAgICAgICAg ICAgaWYgKF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQ0KICAgICAgICAgICAgICAgIF9fZm91bmRf Z3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsNCiAgICAgICAgICAgICAg KytfX3BvczsNCiAgICAgICAgICAgICAgX194dHJjICs9ICcuJzsNCiAgICAgICAgICAgICAgX19j ID0gKigrK19fYmVnKTsNCiAgICAgICAgICAgICAgX19mb3VuZF9kZWMgPSB0cnVlOw0KICAgICAg ICAgICAgfQ0KICAgICAgICAgIGVsc2UgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fd2F0 b21zW19NX2VdKQ0KICAgICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0c190eXBlOjplcShfX2Ms IF9fd2F0b21zW19NX0VdKSkNCiAgICAgICAgICAgICAgICAgICAmJiAhX19mb3VuZF9zY2kgJiYg X19wb3MpDQogICAgICAgICAgICB7DQoNCiAgICAgICAgICAgICAgKytfX3BvczsNCiAgICAgICAg ICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsNCiAgICAgICAgICAg ICAgX19jID0gKigrK19fYmVnKTsNCg0KDQogICAgICAgICAgICAgIGlmIChfX3RyYWl0c190eXBl OjplcShfX2MsIF9fcGx1cykNCiAgICAgICAgICAgICAgICAgIHx8IF9fdHJhaXRzX3R5cGU6OmVx KF9fYywgX19taW51cykpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgKytf X3BvczsNCiAgICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNo YXIoKSk7DQogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAgICAgICAg ICAgIH0NCiAgICAgICAgICAgICAgX19mb3VuZF9zY2kgPSB0cnVlOw0KICAgICAgICAgICAgfQ0K ICAgICAgICAgIGVsc2UNCg0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCg0KDQoNCiAg ICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQ0KICAg ICAgICB7DQoNCiAgICAgICAgICBpZiAoIV9fZm91bmRfZGVjKQ0KICAgICAgICAgICAgX19mb3Vu ZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOw0KICAgICAgICAgIGlm ICghX192ZXJpZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19mb3VuZF9ncm91cGluZykpDQogICAg ICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCiAgICAgICAgfQ0KDQoNCiAgICAg IF9feHRyYyArPSBjaGFyKCk7DQogICAgICBpZiAoX19iZWcgPT0gX19lbmQpDQogICAgICAgIF9f ZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7DQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KDQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0 ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIF9NX2V4dHJhY3RfaW50KF9J bkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nJiBfX3h0cmMsIGludCYgX19i YXNlKSBjb25zdA0KICAgIHsNCiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3Ry YWl0c190eXBlOw0KICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsNCiAg ICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU PiA+KF9fbG9jKTsNCiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFj ZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsNCg0KDQogICAgICBpb3NfYmFzZTo6Zm10Zmxh Z3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOw0KICAg ICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpvY3QpDQogICAgICAgIF9fYmFzZSA9IDg7 DQogICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6aGV4KQ0KICAgICAgICBf X2Jhc2UgPSAxNjsNCiAgICAgIGVsc2UNCiAgICAgICAgX19iYXNlID0gMTA7DQoNCg0KICAgICAg aW50IF9fcG9zID0gMDsNCiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7DQogICAgICBjb25z dCBjaGFyX3R5cGUgX19wbHVzID0gX19jdHlwZS53aWRlbignKycpOw0KICAgICAgY29uc3QgY2hh cl90eXBlIF9fbWludXMgPSBfX2N0eXBlLndpZGVuKCctJyk7DQoNCiAgICAgIGlmICgoX190cmFp dHNfdHlwZTo6ZXEoX19jLCBfX3BsdXMpIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19taW51 cykpDQogICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpDQogICAgICAgIHsNCiAgICAgICAgICBf X3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOw0KICAgICAgICAgICsrX19wb3M7 DQogICAgICAgICAgX19jID0gKigrK19fYmVnKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgIGNvbnN0 IGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndpZGVuKF9TX2F0b21zW19NX3plcm9dKTsNCiAg ICAgIGNvbnN0IGNoYXJfdHlwZSBfX3ggPSBfX2N0eXBlLndpZGVuKCd4Jyk7DQogICAgICBjb25z dCBjaGFyX3R5cGUgX19YID0gX19jdHlwZS53aWRlbignWCcpOw0KICAgICAgaWYgKF9fYmFzZSA9 PSAxMCkNCiAgICAgICAgew0KICAgICAgICAgIGJvb2wgX19mb3VuZF96ZXJvID0gZmFsc2U7DQog ICAgICAgICAgd2hpbGUgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAh PSBfX2VuZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsN CiAgICAgICAgICAgICAgX19mb3VuZF96ZXJvID0gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAg ICAgICBpZiAoX19mb3VuZF96ZXJvKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfX3h0 cmMgKz0gX1NfYXRvbXNbX01femVyb107DQogICAgICAgICAgICAgICsrX19wb3M7DQogICAgICAg ICAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSAwKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAg ICAgICAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3gpDQogICAgICAgICAgICAg ICAgICAgICAgIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19YKSkNCiAgICAgICAgICAgICAg ICAgICAgICAmJiBfX2JlZyAhPSBfX2VuZCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAg ICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7DQog ICAgICAgICAgICAgICAgICAgICAgKytfX3BvczsNCiAgICAgICAgICAgICAgICAgICAgICBfX2Mg PSAqKCsrX19iZWcpOw0KICAgICAgICAgICAgICAgICAgICAgIF9fYmFzZSA9IDE2Ow0KICAgICAg ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAg ICAgIF9fYmFzZSA9IDg7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAg ICB9DQogICAgICBlbHNlIGlmIChfX2Jhc2UgPT0gMTYpDQogICAgICAgIHsNCiAgICAgICAgICBp ZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYmIF9fYmVnICE9IF9fZW5kKQ0KICAg ICAgICAgICAgew0KICAgICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVyb107DQog ICAgICAgICAgICAgICsrX19wb3M7DQogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7DQog ICAgICAgICAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3gpIHx8IF9fdHJhaXRz X3R5cGU6OmVxKF9fYywgX19YKSkNCiAgICAgICAgICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5k KQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBl Lm5hcnJvdyhfX2MsIGNoYXIoKSk7DQogICAgICAgICAgICAgICAgICArK19fcG9zOw0KICAgICAg ICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAg ICAgICB9DQogICAgICAgIH0NCg0KDQoNCiAgICAgIHNpemVfdCBfX2xlbjsNCiAgICAgIGlmIChf X2Jhc2UgPT0gMTYpDQogICAgICAgIF9fbGVuID0gX01fc2l6ZTsNCiAgICAgIGVsc2UNCiAgICAg ICAgX19sZW4gPSBfX2Jhc2U7DQoNCg0KICAgICAgY2hhcl90eXBlIF9fd2F0b21zW19NX3NpemVd Ow0KICAgICAgX19jdHlwZS53aWRlbihfU19hdG9tcywgX1NfYXRvbXMgKyBfX2xlbiwgX193YXRv bXMpOw0KICAgICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBpbmc7DQogICAgICBjb25zdCBzdHJpbmcg X19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsNCiAgICAgIGJvb2wgX19jaGVja19ncm91cGlu ZyA9IF9fZ3JvdXBpbmcuc2l6ZSgpOw0KICAgICAgaW50IF9fc2VwX3BvcyA9IDA7DQogICAgICBj b25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX25wLnRob3VzYW5kc19zZXAoKTsNCiAgICAgIHdoaWxl IChfX2JlZyAhPSBfX2VuZCkNCiAgICAgICAgew0KICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog X19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9tcywgX19sZW4sIF9fYyk7DQoNCg0KICAg ICAgICAgIGlmIChfX3AgJiYgIV9fdHJhaXRzX3R5cGU6OmVxKF9fYywgY2hhcl90eXBlKCkpKQ0K ICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfX3AgLSBf X3dhdG9tc107DQogICAgICAgICAgICAgICsrX19wb3M7DQogICAgICAgICAgICAgICsrX19zZXBf cG9zOw0KICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAgICAgICAgfQ0KICAg ICAgICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19zZXApICYmIF9fY2hlY2tf Z3JvdXBpbmcpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICBpZiAoX19zZXBfcG9z KQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcg Kz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsNCiAgICAgICAgICAgICAgICAgIF9fc2Vw X3BvcyA9IDA7DQogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAg ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgICAgICAgICAgICAgICAg YnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UN Cg0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCg0KDQoNCiAgICAgIGlmIChfX2NoZWNr X2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQ0KICAgICAgICB7DQoNCiAgICAg ICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7DQog ICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2ZvdW5kX2dyb3Vw aW5nKSkNCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgICAgICB9 DQoNCg0KICAgICAgX194dHJjICs9IGNoYXIoKTsNCiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkN CiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsNCiAgICAgIHJldHVybiBfX2JlZzsN CiAgICB9DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl cj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19n ZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QNCiAgICB7 DQoNCiAgICAgIGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxwaGEpKQ0KICAg ICAgICB7DQoNCg0KICAgICAgICAgIHN0cmluZyBfX3h0cmM7DQogICAgICAgICAgaW50IF9fYmFz ZTsNCiAgICAgICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywg X19lcnIsIF9feHRyYywgX19iYXNlKTsNCg0KICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsN CiAgICAgICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9T X2NfbG9jYWxlLCBfX2Jhc2UpOw0KICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZh aWxiaXQpICYmIF9fdWwgPD0gMSkNCiAgICAgICAgICAgIF9fdiA9IF9fdWw7DQogICAgICAgICAg ZWxzZQ0KICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7DQogICAgICAgIH0N Cg0KDQogICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICB0eXBlZGVmIGNoYXJfdHJhaXRz PF9DaGFyVD4gX190cmFpdHNfdHlwZTsNCiAgICAgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf Q2hhclQ+IF9fc3RyaW5nX3R5cGU7DQoNCiAgICAgICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdl dGxvYygpOw0KICAgICAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFj ZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsNCiAgICAgICAgICBjb25zdCBfX3N0cmluZ190 eXBlIF9fdHJ1ZSA9IF9fbnAudHJ1ZW5hbWUoKTsNCiAgICAgICAgICBjb25zdCBfX3N0cmluZ190 eXBlIF9fZmFsc2UgPSBfX25wLmZhbHNlbmFtZSgpOw0KICAgICAgICAgIGNvbnN0IGNoYXJfdHlw ZSogX190cnVlcyA9IF9fdHJ1ZS5jX3N0cigpOw0KICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog X19mYWxzZXMgPSBfX2ZhbHNlLmNfc3RyKCk7DQogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdHJ1 ZW4gPSBfX3RydWUuc2l6ZSgpIC0gMTsNCiAgICAgICAgICBjb25zdCBzaXplX3QgX19mYWxzZW4g PSBfX2ZhbHNlLnNpemUoKSAtIDE7DQoNCiAgICAgICAgICBmb3IgKHNpemVfdCBfX24gPSAwOyBf X2JlZyAhPSBfX2VuZDsgKytfX24pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGNoYXJf dHlwZSBfX2MgPSAqX19iZWcrKzsNCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RmID0gX19uIDw9 IF9fZmFsc2VuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX190cmFpdHNfdHlwZTo6 ZXEoX19jLCBfX2ZhbHNlc1tfX25dKSA6IGZhbHNlOw0KICAgICAgICAgICAgICBib29sIF9fdGVz dHQgPSBfX24gPD0gX190cnVlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9fdHJh aXRzX3R5cGU6OmVxKF9fYywgX190cnVlc1tfX25dKSA6IGZhbHNlOw0KICAgICAgICAgICAgICBp ZiAoIShfX3Rlc3RmIHx8IF9fdGVzdHQpKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAg ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgICAgICAgICAgICAgICAgYnJl YWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3RmICYm IF9fbiA9PSBfX2ZhbHNlbikNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICBf X3YgPSAwOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3R0ICYmIF9fbiA9PSBfX3RydWVuKQ0KICAgICAgICAg ICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fdiA9IDE7DQogICAgICAgICAgICAgICAgICBi cmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKF9f YmVnID09IF9fZW5kKQ0KICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsNCiAg ICAgICAgfQ0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxf Q2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg X19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIGxvbmcmIF9fdikgY29uc3QNCiAgICB7DQogICAgICBzdHJpbmcgX194dHJjOw0KICAgICAg aW50IF9fYmFzZTsNCiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBf X2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOw0KICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJj LmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOw0KICAgICAgcmV0dXJu IF9fYmVnOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J bkl0ZXI+DQogICAgX0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAg ZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywN CiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192 KSBjb25zdA0KICAgIHsNCiAgICAgIHN0cmluZyBfX3h0cmM7DQogICAgICBpbnQgX19iYXNlOw0K ICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBf X3h0cmMsIF9fYmFzZSk7DQogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7DQogICAgICBfX2NvbnZl cnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2Up Ow0KICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkNCiAgICAgICAgICAmJiBf X3VsIDw9IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4KCkpDQogICAgICAgIF9f diA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX3VsKTsNCiAgICAgIGVsc2UNCiAgICAg ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7DQogICAgICByZXR1cm4gX19iZWc7DQogICAg fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBf SW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90 eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdA0KICAgIHsN CiAgICAgIHN0cmluZyBfX3h0cmM7DQogICAgICBpbnQgX19iYXNlOw0KICAgICAgX19iZWcgPSBf TV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7 DQogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7DQogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMu Y19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOw0KICAgICAgaWYgKCEo X19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkNCiAgICAgICAgICAmJiBfX3VsIDw9IG51bWVyaWNf bGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpKQ0KICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1 bnNpZ25lZCBpbnQ+KF9fdWwpOw0KICAgICAgZWxzZQ0KICAgICAgICBfX2VyciB8PSBpb3NfYmFz ZTo6ZmFpbGJpdDsNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0ZXINCiAgICBudW1fZ2V0 PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlw ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdA0KICAgIHsNCiAgICAgIHN0cmluZyBfX3h0 cmM7DQogICAgICBpbnQgX19iYXNlOw0KICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2Jl ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7DQogICAgICBfX2NvbnZlcnRf dG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7DQog ICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0lu SXRlcj46Og0KICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z X2Jhc2UmIF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBs b25nJiBfX3YpIGNvbnN0DQogICAgew0KICAgICAgc3RyaW5nIF9feHRyYzsNCiAgICAgIGludCBf X2Jhc2U7DQogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywg X19lcnIsIF9feHRyYywgX19iYXNlKTsNCiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0 cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsNCiAgICAgIHJldHVybiBfX2Jl ZzsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy Pg0KICAgIF9Jbkl0ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dl dChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyBsb25nJiBfX3Yp IGNvbnN0DQogICAgew0KICAgICAgc3RyaW5nIF9feHRyYzsNCiAgICAgIGludCBfX2Jhc2U7DQog ICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f eHRyYywgX19iYXNlKTsNCiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3Ys IF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9 DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAg X0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAgZG9fZ2V0KGl0ZXJf dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdA0KICAgIHsNCiAgICAg IHN0cmluZyBfX3h0cmM7DQogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7DQogICAgICBfX2JlZyA9 IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsNCiAg ICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2Fs ZSk7DQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQs IF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs IGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRv dWJsZSYgX192KSBjb25zdA0KICAgIHsNCiAgICAgIHN0cmluZyBfX3h0cmM7DQogICAgICBfX3h0 cmMucmVzZXJ2ZSgzMik7DQogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9f ZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsNCiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5j X3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSk7DQogICAgICByZXR1cm4gX19iZWc7DQog ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAg ICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRl cl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0DQogICAg ew0KICAgICAgc3RyaW5nIF9feHRyYzsNCiAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsNCiAgICAg IF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0 cmMpOw0KDQoNCg0KDQoNCiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3Ys IF9fZXJyLCBfU19jX2xvY2FsZSk7DQoNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0ZXIN CiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dldChpdGVyX3R5cGUgX19i ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29uc3QNCiAgICB7DQoNCiAgICAgIHR5cGVk ZWYgaW9zX2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdzOw0KICAgICAgZm10ZmxhZ3MgX19mbXQgPSBf X2lvLmZsYWdzKCk7DQogICAgICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93 cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IGlvc19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJuYWwpOw0KICAgICAgX19pby5m bGFncyhfX2ZtdCAmIF9fZm10bWFzayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3di YXNlKSk7DQoNCiAgICAgIHN0cmluZyBfX3h0cmM7DQogICAgICBpbnQgX19iYXNlOw0KICAgICAg X19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMs IF9fYmFzZSk7DQoNCg0KICAgICAgX19pby5mbGFncyhfX2ZtdCk7DQoNCiAgICAgIHVuc2lnbmVk IGxvbmcgX191bDsNCiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBf X2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7DQogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNl OjpmYWlsYml0KSkNCiAgICAgICAgX192ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX191bCk7 DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgICAg cmV0dXJuIF9fYmVnOw0KICAgIH0NCiMgNjI0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xv Y2FsZV9mYWNldHMudGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X091dEl0ZXI+DQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4NCiAgICAgIF9PdXRJdGVy DQogICAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICAgIF9NX2NvbnZlcnRfZmxv YXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciBfX21v ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVCBfX3YpIGNvbnN0DQogICAgICB7DQoN Cg0KICAgICAgICBjb25zdCBpbnQgX19tYXhfZGlnaXRzID0gbnVtZXJpY19saW1pdHM8X1ZhbHVl VD46OmRpZ2l0czEwICsgMTsNCiAgICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMgPSBfX2lvLnByZWNp c2lvbigpOw0KDQogICAgICAgIGlmIChfX3ByZWMgPiBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihf X21heF9kaWdpdHMpKQ0KICAgICAgICAgIF9fcHJlYyA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+ KF9fbWF4X2RpZ2l0cyk7DQoNCg0KICAgICAgICBjaGFyIF9fZmJ1ZlsxNl07DQoNCg0KICAgICAg ICBpbnQgX19sZW47DQojIDY3MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFj ZXRzLnRjYyIgMw0KICAgICAgICBjb25zdCBib29sIF9fZml4ZWQgPSBfX2lvLmZsYWdzKCkgJiBp b3NfYmFzZTo6Zml4ZWQ7DQogICAgICAgIGNvbnN0IGludCBfX21heF9leHAgPSBudW1lcmljX2xp bWl0czxfVmFsdWVUPjo6bWF4X2V4cG9uZW50MTA7DQoNCg0KDQoNCg0KICAgICAgICBjb25zdCBp bnQgX19jc19zaXplID0gX19maXhlZCA/IF9fbWF4X2V4cCArIF9fbWF4X2RpZ2l0cyArIDQNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21heF9kaWdpdHMgKiAzOw0K ICAgICAgICBjaGFyKiBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2Eo X19jc19zaXplKSk7DQoNCiAgICAgICAgaWYgKF9TX2Zvcm1hdF9mbG9hdChfX2lvLCBfX2ZidWYs IF9fbW9kLCBfX3ByZWMpKQ0KICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2Nz LCAwLCBfX2ZidWYsIF9fdiwgX1NfY19sb2NhbGUsIF9fcHJlYyk7DQogICAgICAgIGVsc2UNCiAg ICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgMCwgX19mYnVmLCBfX3YsIF9T X2NfbG9jYWxlKTsNCg0KICAgICAgICByZXR1cm4gX01fd2lkZW5fZmxvYXQoX19zLCBfX2lvLCBf X2ZpbGwsIF9fY3MsIF9fbGVuKTsNCiAgICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+DQog ICAgICBfT3V0SXRlcg0KICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgICBf TV9jb252ZXJ0X2ludChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxs LCBjaGFyIF9fbW9kLA0KICAgICAgICAgICAgICAgICAgICAgY2hhciBfX21vZGwsIF9WYWx1ZVQg X192KSBjb25zdA0KICAgICAgew0KDQoNCg0KICAgICAgICBjaGFyIF9fZmJ1ZlsxNl07DQogICAg ICAgIF9TX2Zvcm1hdF9pbnQoX19pbywgX19mYnVmLCBfX21vZCwgX19tb2RsKTsNCiMgNzE5ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzDQogICAgICAgIGNo YXIgX19jc1sxMjhdOw0KICAgICAgICBpbnQgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3Ms IDAsIF9fZmJ1ZiwgX192LCBfU19jX2xvY2FsZSk7DQoNCiAgICAgICAgcmV0dXJuIF9NX3dpZGVu X2ludChfX3MsIF9faW8sIF9fZmlsbCwgX19jcywgX19sZW4pOw0KICAgICAgfQ0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgX091dEl0ZXINCiAg ICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBfTV93aWRlbl9mbG9hdChfT3V0SXRl ciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyKiBfX2NzLA0KICAgICAg ICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QNCiAgICB7DQogICAgICB0eXBlZGVmIGNoYXJf dHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsNCg0KDQogICAgICBjb25zdCBsb2NhbGUgX19s b2MgPSBfX2lvLmdldGxvYygpOw0KICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9 IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOw0KICAgICAgX0NoYXJUKiBfX3dzID0g c3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQ0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq IF9fbGVuKSk7DQoNCg0KICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+ KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4gKiAyKSk7DQogICAg ICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyBfX2xlbiwgX193cyk7DQoNCg0KICAgICAgY29u c3QgX0NoYXJUKiBfX3A7DQogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNl X2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7DQogICAgICBpZiAoX19wID0gX190cmFp dHNfdHlwZTo6ZmluZChfX3dzLCBfX2xlbiwgX19jdHlwZS53aWRlbignLicpKSkNCiAgICAgICAg X193c1tfX3AgLSBfX3dzXSA9IF9fbnAuZGVjaW1hbF9wb2ludCgpOw0KDQoNCg0KDQogICAgICBj b25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsNCiAgICAgIGlvc19iYXNl OjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmll bGQ7DQogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkpDQogICAgICAgIHsNCiAgICAgICAgICBf Q2hhclQqIF9fcDI7DQogICAgICAgICAgaW50IF9fZGVjbGVuID0gX19wID8gX19wIC0gX193cyA6 IF9fbGVuOw0KICAgICAgICAgIF9fcDIgPSBfX2FkZF9ncm91cGluZyhfX3dzMiwgX19ucC50aG91 c2FuZHNfc2VwKCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcu Y19zdHIoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0 cigpICsgX19ncm91cGluZy5zaXplKCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fd3MsIF9fd3MgKyBfX2RlY2xlbik7DQogICAgICAgICAgaW50IF9fbmV3bGVuID0gX19wMiAt IF9fd3MyOw0KDQoNCiAgICAgICAgICBpZiAoX19wKQ0KICAgICAgICAgICAgew0KICAgICAgICAg ICAgICBfX3RyYWl0c190eXBlOjpjb3B5KF9fcDIsIF9fcCwgX19sZW4gLSBfX2RlY2xlbik7DQog ICAgICAgICAgICAgIF9fbmV3bGVuICs9IF9fbGVuIC0gX19kZWNsZW47DQogICAgICAgICAgICB9 DQoNCg0KICAgICAgICAgIF9fd3MgPSBfX3dzMjsNCiAgICAgICAgICBfX2xlbiA9IF9fbmV3bGVu Ow0KICAgICAgICB9DQoNCiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGws IF9fd3MsIF9fbGVuKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRl cj46Og0KICAgIF9NX3dpZGVuX2ludChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hh clQgX19maWxsLCBjaGFyKiBfX2NzLA0KICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0 DQogICAgew0KDQoNCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQog ICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy VD4gPihfX2xvYyk7DQogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihf X2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4pKTsNCg0KDQogICAgICBf Q2hhclQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXpl b2YoX0NoYXJUKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKiBfX2xlbiAqIDIpKTsNCiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywg X19jcyArIF9fbGVuLCBfX3dzKTsNCg0KDQogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBf X25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7DQogICAgICBjb25zdCBz dHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsNCiAgICAgIGNvbnN0IGlvc19iYXNl OjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmll bGQ7DQogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkpDQogICAgICAgIHsNCg0KDQoNCiAgICAg ICAgICBzdHJlYW1zaXplIF9fb2ZmID0gMDsNCiAgICAgICAgICBpZiAoX19pby5mbGFncygpICYg aW9zX2Jhc2U6OnNob3diYXNlKQ0KICAgICAgICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19i YXNlOjpvY3QpDQogICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBfX29mZiA9IDE7DQog ICAgICAgICAgICAgICAgKl9fd3MyID0gKl9fd3M7DQogICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgIGVsc2UgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgpDQogICAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgICBfX29mZiA9IDI7DQogICAgICAgICAgICAgICAgKl9fd3MyID0g Kl9fd3M7DQogICAgICAgICAgICAgICAgKihfX3dzMiArIDEpID0gKihfX3dzICsgMSk7DQogICAg ICAgICAgICAgIH0NCiAgICAgICAgICBfQ2hhclQqIF9fcDsNCiAgICAgICAgICBfX3AgPSBfX2Fk ZF9ncm91cGluZyhfX3dzMiArIF9fb2ZmLCBfX25wLnRob3VzYW5kc19zZXAoKSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCksDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigpICsgX19ncm91cGluZy5zaXplKCks DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193cyArIF9fb2ZmLCBfX3dzICsgX19s ZW4pOw0KICAgICAgICAgIF9fbGVuID0gX19wIC0gX193czI7DQoNCiAgICAgICAgICBfX3dzID0g X193czI7DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2Zp bGwsIF9fd3MsIF9fbGVuKTsNCiAgICB9DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgX091dEl0ZXINCiAgICBudW1fcHV0PF9DaGFyVCwg X091dEl0ZXI+OjoNCiAgICBfTV9pbnNlcnQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywg X0NoYXJUIF9fZmlsbCwgY29uc3QgX0NoYXJUKiBfX3dzLA0KICAgICAgICAgICAgICBpbnQgX19s ZW4pIGNvbnN0DQogICAgew0KICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJh aXRzX3R5cGU7DQoNCiAgICAgIHN0cmVhbXNpemUgX193ID0gX19pby53aWR0aCgpOw0KICAgICAg X0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6 ZW9mKF9DaGFyVCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICogX193KSk7DQogICAgICBpZiAoX193ID4gc3RhdGljX2Nhc3Q8c3Ry ZWFtc2l6ZT4oX19sZW4pKQ0KICAgICAgICB7DQogICAgICAgICAgX19wYWQ8X0NoYXJULCBfX3Ry YWl0c190eXBlPjo6X1NfcGFkKF9faW8sIF9fZmlsbCwgX193czIsIF9fd3MsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdywgX19sZW4sIHRydWUpOw0K ICAgICAgICAgIF9fbGVuID0gc3RhdGljX2Nhc3Q8aW50PihfX3cpOw0KDQogICAgICAgICAgX193 cyA9IF9fd3MyOw0KICAgICAgICB9DQogICAgICBfX2lvLndpZHRoKDApOw0KDQoNCg0KICAgICAg Zm9yIChpbnQgX19qID0gMDsgX19qIDwgX19sZW47ICsrX19qLCArK19fcykNCiAgICAgICAgKl9f cyA9IF9fd3NbX19qXTsNCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgX091dEl0ZXINCiAgICBudW1f cHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jh c2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdA0KICAgIHsNCiAgICAg IGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOw0KICAgICAgaWYgKChf X2ZsYWdzICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkgPT0gMCkNCiAgICAgICAgew0KICAgICAgICAg IHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsNCiAgICAgICAgICBfX3MgPSBfTV9jb252ZXJ0X2lu dChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCBjaGFyKCksIF9fdXYpOw0KICAgICAgICB9DQogICAg ICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+ IF9fc3RyaW5nX3R5cGU7DQogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsN CiAgICAgICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1 bmN0PF9DaGFyVD4gPihfX2xvYyk7DQogICAgICAgICAgX19zdHJpbmdfdHlwZSBfX25hbWU7DQog ICAgICAgICAgaWYgKF9fdikNCiAgICAgICAgICAgIF9fbmFtZSA9IF9fbnAudHJ1ZW5hbWUoKTsN CiAgICAgICAgICBlbHNlDQogICAgICAgICAgICBfX25hbWUgPSBfX25wLmZhbHNlbmFtZSgpOw0K ICAgICAgICAgIF9fcyA9IF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX19uYW1lLmNfc3Ry KCksIF9fbmFtZS5zaXplKCkpOw0KICAgICAgICB9DQogICAgICByZXR1cm4gX19zOw0KICAgIH0N Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIF9P dXRJdGVyDQogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgZG9fcHV0KGl0ZXJf dHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29u c3QNCiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ2QnLCBj aGFyKCksIF9fdik7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P dXRJdGVyPg0KICAgIF9PdXRJdGVyDQogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQog ICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxs LA0KICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QNCiAgICB7IHJldHVybiBfTV9j b252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCBjaGFyKCksIF9fdik7IH0NCg0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgX091dEl0 ZXINCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBkb19wdXQoaXRlcl90eXBl IF9fcywgaW9zX2Jhc2UmIF9fYiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29u c3QNCiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9fYiwgX19maWxsLCAnZCcsICds JywgX192KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0 ZXI+DQogICAgX091dEl0ZXINCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBk b19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsDQog ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0DQogICAgeyByZXR1cm4gX01f Y29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1JywgJ2wnLCBfX3YpOyB9DQoNCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIF9PdXRJdGVy DQogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgZG9fcHV0KGl0ZXJfdHlwZSBf X3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdA0K ICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIGNoYXIoKSwg X192KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+ DQogICAgX091dEl0ZXINCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBkb19w dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsDQogICAg ICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QNCiAgICB7DQoNCg0KDQoNCiAgICAgIHJldHVy biBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7DQoNCiAgIH0N Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIF9P dXRJdGVyDQogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgZG9fcHV0KGl0ZXJf dHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLA0KICAgICAgICAgICBj b25zdCB2b2lkKiBfX3YpIGNvbnN0DQogICAgew0KICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9f ZmxhZ3MgPSBfX2lvLmZsYWdzKCk7DQogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+ KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IGlvc19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50 ZXJuYWwpOw0KICAgICAgX19pby5mbGFncyhfX2ZsYWdzICYgX19mbXQgfCAoaW9zX2Jhc2U6Omhl eCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOw0KICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAg ICBfX3MgPSBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCBjaGFyKCksDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBs b25nPihfX3YpKTsNCiAgICAgICAgICBfX2lvLmZsYWdzKF9fZmxhZ3MpOw0KICAgICAgICB9DQog ICAgICBjYXRjaCAoLi4uKQ0KICAgICAgICB7DQogICAgICAgICAgX19pby5mbGFncyhfX2ZsYWdz KTsNCiAgICAgICAgICB0aHJvdzsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fczsNCiAgICB9 DQojIDk4MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMw0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgX0luSXRl cg0KICAgIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBl IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywNCiAg ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX191bml0cykg Y29uc3QNCiAgICB7DQogICAgICBzdHJpbmdfdHlwZSBfX3N0cjsNCiAgICAgIF9fYmVnID0gdGhp cy0+ZG9fZ2V0KF9fYmVnLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX19zdHIpOw0KDQog ICAgICBjb25zdCBpbnQgX19uID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjpkaWdpdHMx MDsNCiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9j YShfX24pKTsNCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAg ICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g PihfX2xvYyk7DQogICAgICBjb25zdCBfQ2hhclQqIF9fd2NzID0gX19zdHIuY19zdHIoKTsNCiAg ICAgIF9fY3R5cGUubmFycm93KF9fd2NzLCBfX3djcyArIF9fc3RyLnNpemUoKSArIDEsIGNoYXIo KSwgX19jcyk7DQogICAgICBfX2NvbnZlcnRfdG9fdihfX2NzLCBfX3VuaXRzLCBfX2VyciwgX1Nf Y19sb2NhbGUpOw0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbW9uZXlf Z2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf dHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBfX3VuaXRzKSBjb25zdA0KICAgIHsN Cg0KICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgdHJ1ZT4gX19tb25leV90cnVlOw0K ICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgZmFsc2U+IF9fbW9uZXlfZmFsc2U7DQog ICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsNCiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7DQoNCiAgICAgIGNvbnN0IGxvY2Fs ZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAgICBjb25zdCBfX21vbmV5X3RydWUmIF9fbXB0 ID0gdXNlX2ZhY2V0PF9fbW9uZXlfdHJ1ZT4oX19sb2MpOw0KICAgICAgY29uc3QgX19tb25leV9m YWxzZSYgX19tcGYgPSB1c2VfZmFjZXQ8X19tb25leV9mYWxzZT4oX19sb2MpOw0KICAgICAgY29u c3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s b2MpOw0KDQogICAgICBjb25zdCBtb25leV9iYXNlOjpwYXR0ZXJuIF9fcCA9IF9faW50bCA/IF9f bXB0Lm5lZ19mb3JtYXQoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOiBfX21wZi5uZWdfZm9ybWF0KCk7DQoNCiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9f cG9zX3NpZ24gPV9faW50bCA/IF9fbXB0LnBvc2l0aXZlX3NpZ24oKQ0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYucG9zaXRpdmVfc2lnbigpOw0KICAg ICAgY29uc3Qgc3RyaW5nX3R5cGUgX19uZWdfc2lnbiA9X19pbnRsID8gX19tcHQubmVnYXRpdmVf c2lnbigpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21w Zi5uZWdhdGl2ZV9zaWduKCk7DQogICAgICBjb25zdCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8g X19tcHQuZGVjaW1hbF9wb2ludCgpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDogX19tcGYuZGVjaW1hbF9wb2ludCgpOw0KICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0g X19pbnRsID8gX19tcHQudGhvdXNhbmRzX3NlcCgpDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiBfX21wZi50aG91c2FuZHNfc2VwKCk7DQoNCiAgICAgIGNvbnN0IHN0cmlu ZyBfX2dyb3VwaW5nID0gX19pbnRsID8gX19tcHQuZ3JvdXBpbmcoKSA6IF9fbXBmLmdyb3VwaW5n KCk7DQoNCg0KICAgICAgc3RyaW5nX3R5cGUgX19zaWduOw0KDQogICAgICBzdHJpbmcgX19ncm91 cGluZ190bXA7DQoNCiAgICAgIGludCBfX3NlcF9wb3MgPSAwOw0KDQogICAgICBib29sIF9fdGVz dHZhbGlkID0gdHJ1ZTsNCg0KICAgICAgYm9vbCBfX3Rlc3RkZWNmb3VuZCA9IGZhbHNlOw0KDQoN CiAgICAgIHN0cmluZ190eXBlIF9fdGVtcF91bml0czsNCg0KICAgICAgY2hhcl90eXBlIF9fYyA9 ICpfX2JlZzsNCiAgICAgIGNoYXJfdHlwZSBfX2VvZiA9IHN0YXRpY19jYXN0PGNoYXJfdHlwZT4o Y2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6ZW9mKCkpOw0KICAgICAgZm9yIChpbnQgX19pID0gMDsg X19iZWcgIT0gX19lbmQgJiYgX19pIDwgNCAmJiBfX3Rlc3R2YWxpZDsgKytfX2kpDQogICAgICAg IHsNCiAgICAgICAgICBwYXJ0IF9fd2hpY2ggPSBzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRb X19pXSk7DQogICAgICAgICAgc3dpdGNoIChfX3doaWNoKQ0KICAgICAgICAgICAgICAgIHsNCiAg ICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnN5bWJvbDoNCiAgICAgICAgICAgICAgICAg IGlmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UNCiAgICAgICAgICAgICAgICAg ICAgICB8fCBfX2kgPCAyIHx8IF9fc2lnbi5zaXplKCkgPiAxDQogICAgICAgICAgICAgICAgICAg ICAgfHwgKChzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRbM10pICE9IG1vbmV5X2Jhc2U6Om5v bmUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9faSA9PSAyKSkNCiAgICAgICAgICAg ICAgICAgICAgew0KDQoNCg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdf dHlwZSBfX3N5bWJvbCA9IF9faW50bCA/IF9fbXB0LmN1cnJfc3ltYm9sKCkNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuY3Vy cl9zeW1ib2woKTsNCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3N5 bWJvbC5zaXplKCk7DQogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9faiA9IDA7DQog ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICYmIF9faiA8IF9fbGVuICYmIF9fc3ltYm9sW19fal0gPT0gX19jKQ0K ICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Mg PSAqKCsrX19iZWcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICArK19fajsNCiAgICAgICAg ICAgICAgICAgICAgICAgIH0NCg0KDQogICAgICAgICAgICAgICAgICAgICAgaWYgKF9faiAhPSBf X2xlbiAmJiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSkNCiAgICAgICAgICAg ICAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgIH0N CiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFz ZTo6c2lnbjoNCg0KICAgICAgICAgICAgICAgICAgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9f bmVnX3NpZ24uc2l6ZSgpKQ0KICAgICAgICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgICAg ICAgIGlmIChfX2MgPT0gX19wb3Nfc2lnblswXSkNCiAgICAgICAgICAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgICAgICAgICBfX3NpZ24gPSBfX3Bvc19zaWduOw0KICAgICAgICAgICAg ICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsNCiAgICAgICAgICAgICAgICAgICAgICB9DQog ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9fYyA9PSBfX25lZ19zaWduWzBdKQ0KICAgICAg ICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fbmVn X3NpZ247DQogICAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAg ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAg ICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7DQogICAgICAgICAgICAgICAgICB9DQogICAg ICAgICAgICAgICAgICBlbHNlIGlmIChfX3Bvc19zaWduLnNpemUoKSAmJiBfX2MgPT0gX19wb3Nf c2lnblswXSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgIF9f c2lnbiA9IF9fcG9zX3NpZ247DQogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVn KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19u ZWdfc2lnbi5zaXplKCkgJiYgX19jID09IF9fbmVnX3NpZ25bMF0pDQogICAgICAgICAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICBfX3NpZ24gPSBfX25lZ19zaWduOw0KICAgICAg ICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7DQogICAgICAgICAgICAgICAgICAgIH0N CiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFz ZTo6dmFsdWU6DQoNCg0KICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kDQog ICAgICAgICAgICAgICAgICAgICAgICAgJiYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQs IF9fYykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKF9fYyA9PSBfX2QgJiYgIV9f dGVzdGRlY2ZvdW5kKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19z ZXApKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKF9f YyA9PSBfX2QpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAg ICAgICAgIF9fZ3JvdXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7DQog ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7DQogICAgICAgICAgICAgICAg ICAgICAgICAgIF9fdGVzdGRlY2ZvdW5kID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAg IH0NCiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19zZXApDQogICAgICAg ICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2dyb3Vw aW5nLnNpemUoKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQoNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9f c2VwX3Bvcyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg ZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAg ICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RlbXBfdW5pdHMgKz0gX19j Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICArK19fc2VwX3BvczsNCiAgICAgICAgICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAg ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAg ICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNlOg0KICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlf YmFzZTo6bm9uZToNCg0KICAgICAgICAgICAgICAgICAgaWYgKF9faSAhPSAzKQ0KICAgICAgICAg ICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpDQogICAgICAgICAgICAg ICAgICAgICAgX19jID0gKigrK19fYmVnKTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQoNCiAgICAgIGlmIChfX3NpZ24uc2l6ZSgpID4g MSkNCiAgICAgICAgew0KICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc2lnbi5zaXplKCk7 DQogICAgICAgICAgc2l6ZV90eXBlIF9faSA9IDE7DQogICAgICAgICAgZm9yICg7IF9fYyAhPSBf X2VvZiAmJiBfX2kgPCBfX2xlbjsgKytfX2kpDQogICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0g X19lbmQgJiYgX19jICE9IF9fc2lnbltfX2ldKQ0KICAgICAgICAgICAgICBfX2MgPSAqKCsrX19i ZWcpOw0KDQogICAgICAgICAgaWYgKF9faSAhPSBfX2xlbikNCiAgICAgICAgICAgIF9fdGVzdHZh bGlkID0gZmFsc2U7DQogICAgICAgIH0NCg0KDQogICAgICB3aGlsZSAoX190ZW1wX3VuaXRzWzBd ID09IF9fY3R5cGUud2lkZW4oJzAnKSkNCiAgICAgICAgX190ZW1wX3VuaXRzLmVyYXNlKF9fdGVt cF91bml0cy5iZWdpbigpKTsNCg0KICAgICAgaWYgKF9fc2lnbi5zaXplKCkgJiYgX19zaWduID09 IF9fbmVnX3NpZ24pDQogICAgICAgIF9fdGVtcF91bml0cy5pbnNlcnQoX190ZW1wX3VuaXRzLmJl Z2luKCksIF9fY3R5cGUud2lkZW4oJy0nKSk7DQoNCg0KICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6 ZSgpICYmIF9fZ3JvdXBpbmdfdG1wLnNpemUoKSkNCiAgICAgICAgew0KICAgICAgICAgIGlmICgh X192ZXJpZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19ncm91cGluZ190bXApKQ0KICAgICAgICAg ICAgX190ZXN0dmFsaWQgPSBmYWxzZTsNCiAgICAgICAgfQ0KDQoNCiAgICAgIGlmIChfX2MgPT0g X19lb2YpDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7DQoNCg0KICAgICAgaWYg KCFfX3Rlc3R2YWxpZCB8fCAhX190ZW1wX3VuaXRzLnNpemUoKSkNCiAgICAgICAgX19lcnIgfD0g aW9zX2Jhc2U6OmZhaWxiaXQ7DQogICAgICBlbHNlDQoNCiAgICAgICAgX190ZW1wX3VuaXRzLnN3 YXAoX191bml0cyk7DQoNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQojIDEyMzYgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIG1vbmV5 X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wg X19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwNCiAgICAgICAgICAgbG9u ZyBkb3VibGUgX191bml0cykgY29uc3QNCiAgICB7DQogICAgICBjb25zdCBsb2NhbGUgX19sb2Mg PSBfX2lvLmdldGxvYygpOw0KICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVz ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOw0KIyAxMjYxICIvdXNyL2luY2x1ZGUvYysr LzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzDQogICAgICBjb25zdCBpbnQgX19jc19zaXpl ID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjptYXhfZXhwb25lbnQxMCArIDU7DQogICAg ICBjaGFyKiBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19z aXplKSk7DQogICAgICBpbnQgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIDAsICIlLjAx TGYiLCBfX3VuaXRzLCBfU19jX2xvY2FsZSk7DQoNCiAgICAgIF9DaGFyVCogX193cyA9IHN0YXRp Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2NzX3Np emUpKTsNCiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsNCiAg ICAgIHN0cmluZ190eXBlIF9fZGlnaXRzKF9fd3MpOw0KICAgICAgcmV0dXJuIHRoaXMtPmRvX3B1 dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7DQogICAgfQ0KDQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0K ICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgZG9fcHV0KGl0ZXJfdHlwZSBf X3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwNCiAgICAg ICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdA0KICAgIHsNCiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7DQogICAgICB0 eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsNCg0KICAgICAgY29uc3QgbG9jYWxlIF9fbG9j ID0gX19pby5nZXRsb2MoKTsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3dpZHRoID0gc3RhdGlj X2Nhc3Q8c2l6ZV90eXBlPihfX2lvLndpZHRoKCkpOw0KDQoNCiAgICAgIHR5cGVkZWYgbW9uZXlw dW5jdDxfQ2hhclQsIHRydWU+IF9fbW9uZXlfdHJ1ZTsNCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5j dDxfQ2hhclQsIGZhbHNlPiBfX21vbmV5X2ZhbHNlOw0KICAgICAgY29uc3QgX19tb25leV90cnVl JiBfX21wdCA9IHVzZV9mYWNldDxfX21vbmV5X3RydWU+KF9fbG9jKTsNCiAgICAgIGNvbnN0IF9f bW9uZXlfZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsNCiAg ICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU PiA+KF9fbG9jKTsNCg0KDQoNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19iZWcgPSBfX2RpZ2l0 cy5kYXRhKCk7DQogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZW5kID0gX19iZWcgKyBfX2RpZ2l0 cy5zaXplKCk7DQogICAgICBtb25leV9iYXNlOjpwYXR0ZXJuIF9fcDsNCiAgICAgIHN0cmluZ190 eXBlIF9fc2lnbjsNCiAgICAgIGlmICgqX19iZWcgIT0gX19jdHlwZS53aWRlbignLScpKQ0KICAg ICAgICB7DQogICAgICAgICAgX19wID0gX19pbnRsID8gX19tcHQucG9zX2Zvcm1hdCgpIDogX19t cGYucG9zX2Zvcm1hdCgpOw0KICAgICAgICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQucG9zaXRp dmVfc2lnbigpIDogX19tcGYucG9zaXRpdmVfc2lnbigpOw0KICAgICAgICB9DQogICAgICBlbHNl DQogICAgICAgIHsNCiAgICAgICAgICBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdfZm9ybWF0KCkg OiBfX21wZi5uZWdfZm9ybWF0KCk7DQogICAgICAgICAgX19zaWduID1fX2ludGwgPyBfX21wdC5u ZWdhdGl2ZV9zaWduKCkgOiBfX21wZi5uZWdhdGl2ZV9zaWduKCk7DQogICAgICAgICAgKytfX2Jl ZzsNCiAgICAgICAgfQ0KDQoNCiAgICAgIF9fZW5kID0gX19jdHlwZS5zY2FuX25vdChjdHlwZV9i YXNlOjpkaWdpdCwgX19iZWcsIF9fZW5kKTsNCiAgICAgIGlmIChfX2JlZyAhPSBfX2VuZCkNCiAg ICAgICAgew0KDQoNCg0KICAgICAgICAgIHN0cmluZ190eXBlIF9fcmVzOw0KICAgICAgICAgIHN0 cmluZ190eXBlIF9fdmFsdWU7DQogICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1ib2wg PSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5bWJvbCgpOw0KDQoNCiAgICAgICAg ICBjb25zdCBpbnQgX19mcmFjID0gX19pbnRsID8gX19tcHQuZnJhY19kaWdpdHMoKQ0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5mcmFjX2RpZ2l0cygpOw0KICAg ICAgICAgIGlmIChfX2ZyYWMgPiAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBjb25z dCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9wb2ludCgpDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50 KCk7DQogICAgICAgICAgICAgIGlmIChfX2VuZCAtIF9fYmVnID49IF9fZnJhYykNCiAgICAgICAg ICAgICAgICB7DQogICAgICAgICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19lbmQg LSBfX2ZyYWMsIF9fZW5kKTsNCiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFs dWUuYmVnaW4oKSwgX19kKTsNCiAgICAgICAgICAgICAgICAgIF9fZW5kIC09IF9fZnJhYzsNCiAg ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB7DQoN CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUgPSBzdHJpbmdfdHlwZShfX2JlZywgX19lbmQpOw0K ICAgICAgICAgICAgICAgICAgaW50IF9fcGFkZGVjID0gX19mcmFjIC0gKF9fZW5kIC0gX19iZWcp Ow0KICAgICAgICAgICAgICAgICAgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oJzAn KTsNCiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4oKSwgX19w YWRkZWMsIF9femVybyk7DQogICAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydChfX3ZhbHVl LmJlZ2luKCksIF9fZCk7DQogICAgICAgICAgICAgICAgICBfX2JlZyA9IF9fZW5kOw0KICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KDQoNCiAgICAgICAgICBpZiAoX19iZWcgIT0g X19lbmQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3Vw aW5nID0gX19pbnRsID8gX19tcHQuZ3JvdXBpbmcoKQ0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmdyb3VwaW5nKCk7DQogICAgICAgICAgICAg IGlmIChfX2dyb3VwaW5nLnNpemUoKSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX2ludGwgPyBfX21wdC50aG91c2FuZHNfc2Vw KCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9f bXBmLnRob3VzYW5kc19zZXAoKTsNCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2Jl ZyA9IF9fZ3JvdXBpbmcuY19zdHIoKTsNCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9f Z2VuZCA9IF9fZ2JlZyArIF9fZ3JvdXBpbmcuc2l6ZSgpOw0KICAgICAgICAgICAgICAgICAgY29u c3QgaW50IF9fbiA9IChfX2VuZCAtIF9fYmVnKSAqIDI7DQogICAgICAgICAgICAgICAgICBfQ2hh clQqIF9fd3MyID0NCiAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19i dWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbikpOw0KICAgICAgICAgICAgICAgICAg X0NoYXJUKiBfX3dzX2VuZCA9IF9fYWRkX2dyb3VwaW5nKF9fd3MyLCBfX3NlcCwgX19nYmVnLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ2Vu ZCwgX19iZWcsIF9fZW5kKTsNCiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KDAsIF9f d3MyLCBfX3dzX2VuZCAtIF9fd3MyKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg IGVsc2UNCiAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydCgwLCBzdHJpbmdfdHlwZShfX2Jl ZywgX19lbmQpKTsNCiAgICAgICAgICAgIH0NCg0KDQogICAgICAgICAgaW9zX2Jhc2U6OmZtdGZs YWdzIF9fZiA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsNCiAgICAgICAg ICBzaXplX3R5cGUgX19sZW4gPSBfX3ZhbHVlLnNpemUoKSArIF9fc2lnbi5zaXplKCk7DQogICAg ICAgICAgX19sZW4gKz0gKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkgPyBfX3N5 bWJvbC5zaXplKCkgOiAwOw0KICAgICAgICAgIGJvb2wgX190ZXN0aXBhZCA9IF9fZiA9PSBpb3Nf YmFzZTo6aW50ZXJuYWwgJiYgX19sZW4gPCBfX3dpZHRoOw0KDQoNCiAgICAgICAgICBmb3IgKGlu dCBfX2kgPSAwOyBfX2kgPCA0OyArK19faSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg cGFydCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19faV0pOw0KICAgICAg ICAgICAgICBzd2l0Y2ggKF9fd2hpY2gpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAg ICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOg0KICAgICAgICAgICAgICAgICAgaWYgKF9faW8u ZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkNCiAgICAgICAgICAgICAgICAgICAgX19yZXMg Kz0gX19zeW1ib2w7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBj YXNlIG1vbmV5X2Jhc2U6OnNpZ246DQoNCg0KDQogICAgICAgICAgICAgICAgICBpZiAoX19zaWdu LnNpemUoKSkNCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19zaWduWzBdOw0KICAgICAg ICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjp2YWx1 ZToNCiAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fdmFsdWU7DQogICAgICAgICAgICAgICAg ICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNlOg0KDQoNCg0K ICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlwYWQpDQogICAgICAgICAgICAgICAgICAgIF9f cmVzICs9IHN0cmluZ190eXBlKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsNCiAgICAgICAgICAg ICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19jdHlwZS53aWRlbihf X2ZpbGwpOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBt b25leV9iYXNlOjpub25lOg0KICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlwYWQpDQogICAg ICAgICAgICAgICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBlKF9fd2lkdGggLSBfX2xlbiwgX19m aWxsKTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAg ICAgICAgIH0NCg0KDQogICAgICAgICAgaWYgKF9fc2lnbi5zaXplKCkgPiAxKQ0KICAgICAgICAg ICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX19zaWduLmJlZ2luKCkgKyAxLCBfX3NpZ24uZW5kKCkp Ow0KDQoNCiAgICAgICAgICBfX2xlbiA9IF9fcmVzLnNpemUoKTsNCiAgICAgICAgICBpZiAoX193 aWR0aCA+IF9fbGVuKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoX19mID09IGlv c19iYXNlOjpsZWZ0KQ0KDQogICAgICAgICAgICAgICAgX19yZXMuYXBwZW5kKF9fd2lkdGggLSBf X2xlbiwgX19maWxsKTsNCiAgICAgICAgICAgICAgZWxzZQ0KDQogICAgICAgICAgICAgICAgX19y ZXMuaW5zZXJ0KDAsIHN0cmluZ190eXBlKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKSk7DQogICAg ICAgICAgICAgIF9fbGVuID0gX193aWR0aDsNCiAgICAgICAgICAgIH0NCg0KDQogICAgICAgICAg Zm9yIChzaXplX3R5cGUgX19qID0gMDsgX19qIDwgX19sZW47ICsrX19qLCArK19fcykNCiAgICAg ICAgICAgICpfX3MgPSBfX3Jlc1tfX2pdOw0KICAgICAgICB9DQogICAgICBfX2lvLndpZHRoKDAp Ow0KICAgICAgcmV0dXJuIF9fczsNCiAgICB9DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgdGltZV9iYXNlOjpkYXRlb3JkZXINCiAg ICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+Ojpkb19kYXRlX29yZGVyKCkgY29uc3QNCiAgICB7 IHJldHVybiB0aW1lX2Jhc2U6Om5vX29yZGVyOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIHZvaWQNCiAgICB0aW1lX2dldDxfQ2hhclQsIF9J bkl0ZXI+OjoNCiAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRl cl90eXBlJiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgICAgICAgICAgICAgICAg IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0sDQogICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9DaGFyVCogX19mb3JtYXQpIGNvbnN0DQogICAgew0KICAgICAgbG9jYWxl IF9fbG9jID0gX19pby5nZXRsb2MoKTsNCiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3Qm IF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsNCiAgICAgIGNv bnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f bG9jKTsNCiAgICAgIHNpemVfdCBfX2xlbiA9IGNoYXJfdHJhaXRzPF9DaGFyVD46Omxlbmd0aChf X2Zvcm1hdCk7DQoNCiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9fYmVnICE9IF9fZW5kICYm IF9faSA8IF9fbGVuICYmICFfX2VycjsgKytfX2kpDQogICAgICAgIHsNCiAgICAgICAgICBjaGFy IF9fYyA9IF9fZm9ybWF0W19faV07DQogICAgICAgICAgaWYgKF9fYyA9PSAnJScpDQogICAgICAg ICAgICB7DQoNCiAgICAgICAgICAgICAgX19jID0gX19mb3JtYXRbKytfX2ldOw0KICAgICAgICAg ICAgICBjaGFyIF9fbW9kID0gMDsNCiAgICAgICAgICAgICAgaW50IF9fbWVtID0gMDsNCiAgICAg ICAgICAgICAgaWYgKF9fYyA9PSAnRScgfHwgX19jID09ICdPJykNCiAgICAgICAgICAgICAgICB7 DQogICAgICAgICAgICAgICAgICBfX21vZCA9IF9fYzsNCiAgICAgICAgICAgICAgICAgIF9fYyA9 IF9fZm9ybWF0WysrX19pXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIHN3aXRj aCAoX19jKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq IF9fY3M7DQogICAgICAgICAgICAgICAgICBfQ2hhclQgX193Y3NbMTBdOw0KICAgICAgICAgICAg ICAgIGNhc2UgJ2EnOg0KDQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5 czFbN107DQogICAgICAgICAgICAgICAgICBfX3RwLl9NX2RheXNfYWJicmV2aWF0ZWQoX19kYXlz MSk7DQogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3Rt LT50bV93ZGF5LCBfX2RheXMxLCA3LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fZXJyKTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2Ug J0EnOg0KDQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5czJbN107DQog ICAgICAgICAgICAgICAgICBfX3RwLl9NX2RheXMoX19kYXlzMik7DQogICAgICAgICAgICAgICAg ICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2RheXMyLCA3 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsNCiAgICAgICAgICAg ICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ2gnOg0KICAgICAgICAgICAgICAg IGNhc2UgJ2InOg0KDQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhz MVsxMl07DQogICAgICAgICAgICAgICAgICBfX3RwLl9NX21vbnRoc19hYmJyZXZpYXRlZChfX21v bnRoczEpOw0KICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwg X190bS0+dG1fbW9uLCBfX21vbnRoczEsIDEyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fZXJyKTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAg IGNhc2UgJ0InOg0KDQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhz MlsxMl07DQogICAgICAgICAgICAgICAgICBfX3RwLl9NX21vbnRocyhfX21vbnRoczIpOw0KICAg ICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9u LCBfX21vbnRoczIsIDEyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJy KTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ2MnOg0K DQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZHRbMl07DQogICAgICAgICAg ICAgICAgICBfX3RwLl9NX2RhdGVfdGltZV9mb3JtYXRzKF9fZHQpOw0KICAgICAgICAgICAgICAg ICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0s DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kdFswXSk7DQogICAg ICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdkJzoNCg0KICAgICAg ICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tZGF5LCAx LCAzMSwgMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJy KTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ0QnOg0K DQogICAgICAgICAgICAgICAgICBfX2NzID0gIiVtLyVkLyV5IjsNCiAgICAgICAgICAgICAgICAg IF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDksIF9fd2NzKTsNCiAgICAgICAgICAgICAgICAg IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2NzKTsNCiAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ0gnOg0KDQogICAgICAgICAg ICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDAsIDIz LCAyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOw0K ICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAnSSc6DQoNCiAg ICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1faG91 ciwgMSwgMTIsIDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBf X2Vycik7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdt JzoNCg0KICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX21l bSwgMSwgMTIsIDIsIF9fY3R5cGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2Vycik7DQogICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyKQ0KICAgICAgICAgICAgICAgICAg ICBfX3RtLT50bV9tb24gPSBfX21lbSAtIDE7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAg ICAgICAgICAgICAgICBjYXNlICdNJzoNCg0KICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9u dW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9taW4sIDAsIDU5LCAyLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOw0KICAgICAgICAgICAgICAgICAgYnJl YWs7DQogICAgICAgICAgICAgICAgY2FzZSAnbic6DQogICAgICAgICAgICAgICAgICBpZiAoX19j dHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAnXG4nKQ0KICAgICAgICAgICAgICAgICAgICArK19f YmVnOw0KICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICBfX2VyciB8 PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAg ICAgICAgIGNhc2UgJ1InOg0KDQogICAgICAgICAgICAgICAgICBfX2NzID0gIiVIOiVNIjsNCiAg ICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDYsIF9fd2NzKTsNCiAg ICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8s IF9fZXJyLCBfX3RtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f d2NzKTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ1Mn Og0KDQogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0t PnRtX3NlYywgMCwgNTksIDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0 eXBlLCBfX2Vycik7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBj YXNlICd0JzoNCiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDAp ID09ICdcdCcpDQogICAgICAgICAgICAgICAgICAgICsrX19iZWc7DQogICAgICAgICAgICAgICAg ICBlbHNlDQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7DQogICAg ICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdUJzoNCg0KICAgICAg ICAgICAgICAgICAgX19jcyA9ICIlSDolTTolUyI7DQogICAgICAgICAgICAgICAgICBfX2N0eXBl LndpZGVuKF9fY3MsIF9fY3MgKyA5LCBfX3djcyk7DQogICAgICAgICAgICAgICAgICBfTV9leHRy YWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3djcyk7DQogICAgICAgICAgICAgICAg ICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICd4JzoNCg0KICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhcl90eXBlKiBfX2RhdGVzWzJdOw0KICAgICAgICAgICAgICAgICAgX190cC5fTV9k YXRlX2Zvcm1hdHMoX19kYXRlcyk7DQogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9m b3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2RhdGVzWzBdKTsNCiAgICAgICAgICAgICAgICAgIGJy ZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ1gnOg0KDQogICAgICAgICAgICAgICAgICBjb25z dCBjaGFyX3R5cGUqIF9fdGltZXNbMl07DQogICAgICAgICAgICAgICAgICBfX3RwLl9NX3RpbWVf Zm9ybWF0cyhfX3RpbWVzKTsNCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1h dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fdGltZXNbMF0pOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7 DQogICAgICAgICAgICAgICAgY2FzZSAneSc6DQoNCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJh Y3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1feWVhciwgMCwgOTksIDIsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7DQogICAgICAgICAgICAgICAg ICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdZJzoNCg0KICAgICAgICAgICAgICAgICAg X01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwgMCwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG51bWVyaWNfbGltaXRzPGludD46Om1heCgpLCA0LA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOw0KICAgICAgICAgICAgICAg ICAgaWYgKCFfX2VycikNCiAgICAgICAgICAgICAgICAgICAgX190bS0+dG1feWVhciA9IF9fbWVt IC0gMTkwMDsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2Ug J1onOg0KDQogICAgICAgICAgICAgICAgICBpZiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjp1cHBl ciwgKl9fYmVnKSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAg IGludCBfX3RtcDsNCiAgICAgICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcs IF9fZW5kLCBfX3RtcCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190 aW1lcHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVzLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxNCwgX19lcnIpOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICBjaGFy X3R5cGUgX19jID0gKl9fYmVnOw0KICAgICAgICAgICAgICAgICAgICAgIGlmICghX19lcnIgJiYg X190bXAgPT0gMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jID09IF9fY3R5cGUu d2lkZW4oJy0nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX19jID09IF9fY3R5 cGUud2lkZW4oJysnKSkpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAg ICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAsIDAsIDIzLCAy LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19l cnIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19l bmQsIF9fdG1wLCAwLCA1OSwgMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY3R5cGUsIF9fZXJyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KDQogICAg ICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7DQogICAgICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UNCiAgICAg ICAgICAgICAgICB7DQoNCiAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19jdHlwZS5uYXJy b3coKl9fYmVnLCAwKSkNCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsNCiAgICAgICAgICAg ICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi aXQ7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICB2b2lkDQogICAgdGltZV9nZXQ8 X0NoYXJULCBfSW5JdGVyPjo6DQogICAgX01fZXh0cmFjdF9udW0oaXRlcl90eXBlJiBfX2JlZywg aXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwNCiAgICAgICAgICAgICAgICAgICBpbnQg X19taW4sIGludCBfX21heCwgc2l6ZV90IF9fbGVuLA0KICAgICAgICAgICAgICAgICAgIGNvbnN0 IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsDQogICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdCBfX2kgPSAwOw0KICAgICAg c3RyaW5nIF9fZGlnaXRzOw0KICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7DQogICAgICBj aGFyX3R5cGUgX19jID0gKl9fYmVnOw0KICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9f aSA8IF9fbGVuDQogICAgICAgICAgICAgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwg X19jKSkNCiAgICAgICAgew0KICAgICAgICAgIF9fZGlnaXRzICs9IF9fY3R5cGUubmFycm93KF9f YywgMCk7DQogICAgICAgICAgX19jID0gKigrK19fYmVnKTsNCiAgICAgICAgICArK19faTsNCiAg ICAgICAgfQ0KICAgICAgaWYgKF9faSA9PSBfX2xlbikNCiAgICAgICAgew0KICAgICAgICAgIGlu dCBfX3ZhbHVlID0gYXRvaShfX2RpZ2l0cy5jX3N0cigpKTsNCiAgICAgICAgICBpZiAoX19taW4g PD0gX192YWx1ZSAmJiBfX3ZhbHVlIDw9IF9fbWF4KQ0KICAgICAgICAgICAgX19tZW1iZXIgPSBf X3ZhbHVlOw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7 DQogICAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsNCiAg ICAgIGlmICghX190ZXN0dmFsaWQpDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0 Ow0KICAgIH0NCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J dGVyPg0KICAgIHZvaWQNCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBfTV9l eHRyYWN0X25hbWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21l bWJlciwNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiogX19uYW1lcywgc2l6ZV90 IF9faW5kZXhsZW4sDQogICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy cikgY29uc3QNCiAgICB7DQogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFp dHNfdHlwZTsNCiAgICAgIGludCogX19tYXRjaGVzID0gc3RhdGljX2Nhc3Q8aW50Kj4oX19idWls dGluX2FsbG9jYShzaXplb2YoaW50KSAqIF9faW5kZXhsZW4pKTsNCiAgICAgIHNpemVfdCBfX25t YXRjaGVzID0gMDsNCiAgICAgIHNpemVfdCBfX3BvcyA9IDA7DQogICAgICBib29sIF9fdGVzdHZh bGlkID0gdHJ1ZTsNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lOw0KDQogICAgICBjaGFy X3R5cGUgX19jID0gKl9fYmVnOw0KDQogICAgICBmb3IgKHNpemVfdCBfX2kxID0gMDsgX19pMSA8 IF9faW5kZXhsZW47ICsrX19pMSkNCiAgICAgICAgaWYgKF9fYyA9PSBfX25hbWVzW19faTFdWzBd KQ0KICAgICAgICAgIF9fbWF0Y2hlc1tfX25tYXRjaGVzKytdID0gX19pMTsNCg0KICAgICAgd2hp bGUoX19ubWF0Y2hlcyA+IDEpDQogICAgICAgIHsNCg0KICAgICAgICAgIHNpemVfdCBfX21pbmxl biA9IDEwOw0KICAgICAgICAgIGZvciAoc2l6ZV90IF9faTIgPSAwOyBfX2kyIDwgX19ubWF0Y2hl czsgKytfX2kyKQ0KICAgICAgICAgICAgX19taW5sZW4gPSBtaW4oX19taW5sZW4sDQogICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lc1tfX21hdGNo ZXNbX19pMl1dKSk7DQoNCiAgICAgICAgICBpZiAoX19wb3MgPCBfX21pbmxlbiAmJiBfX2JlZyAh PSBfX2VuZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgKytfX3BvczsNCiAgICAgICAg ICAgICAgX19jID0gKigrK19fYmVnKTsNCiAgICAgICAgICAgICAgZm9yIChzaXplX3QgX19pMyA9 IDA7IF9faTMgPCBfX25tYXRjaGVzOyArK19faTMpDQogICAgICAgICAgICAgICAgew0KICAgICAg ICAgICAgICAgICAgX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNbX19pM11dOw0KICAgICAgICAg ICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gIT0gX19jKQ0KICAgICAgICAgICAgICAgICAgICBf X21hdGNoZXNbX19pM10gPSBfX21hdGNoZXNbLS1fX25tYXRjaGVzXTsNCiAgICAgICAgICAgICAg ICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgYnJlYWs7DQog ICAgICAgIH0NCg0KICAgICAgaWYgKF9fbm1hdGNoZXMgPT0gMSkNCiAgICAgICAgew0KDQogICAg ICAgICAgX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNbMF1dOw0KICAgICAgICAgIGNvbnN0IHNp emVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOw0KICAgICAgICAgIHdo aWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kICYmIF9fbmFtZVtfX3Bvc10gPT0g Kl9fYmVnKQ0KICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsNCg0KICAgICAgICAgIGlmIChf X2xlbiA9PSBfX3BvcykNCiAgICAgICAgICAgIF9fbWVtYmVyID0gX19tYXRjaGVzWzBdOw0KICAg ICAgICAgIGVsc2UNCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7DQogICAgICAgIH0N CiAgICAgIGVsc2UNCiAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsNCiAgICAgIGlmICghX190 ZXN0dmFsaWQpDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgIH0NCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgX0luSXRl cg0KICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dldF90aW1lKGl0ZXJf dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdA0KICAgIHsNCiAg ICAgIF9DaGFyVCBfX3djc1szXTsNCiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJVgiOw0KICAg ICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsNCiAgICAgIGN0eXBlPF9DaGFyVD4gY29u c3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsNCiAgICAgIF9f Y3R5cGUud2lkZW4oX19jcywgX19jcyArIDMsIF9fd2NzKTsNCiAgICAgIF9NX2V4dHJhY3Rfdmlh X2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLCBfX3djcyk7DQogICAgICBp ZiAoX19iZWcgPT0gX19lbmQpDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7DQog ICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5J dGVyPjo6DQogICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs IGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgdG0qIF9fdG0pIGNvbnN0DQogICAgew0KICAgICAgX0NoYXJUIF9fd2NzWzNdOw0KICAgICAg Y29uc3QgY2hhciogX19jcyA9ICIleCI7DQogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxv YygpOw0KICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlw ZTxfQ2hhclQ+ID4oX19sb2MpOw0KICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgMywg X193Y3MpOw0KICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywg X19lcnIsIF9fdG0sIF9fd2NzKTsNCiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkNCiAgICAgICAg X19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0 ZXINCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXRfd2Vla2RheShp dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAg ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QNCiAg ICB7DQogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsNCiAg ICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAgICBfX3RpbWVwdW5jdDxfQ2hh clQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7 DQogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5c1s3XTsNCiAgICAgIF9fdHAuX01fZGF5c19h YmJyZXZpYXRlZChfX2RheXMpOw0KICAgICAgaW50IF9fdG1wd2RheTsNCiAgICAgIF9NX2V4dHJh Y3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG1wd2RheSwgX19kYXlzLCA3LCBfX2Vycik7DQoNCg0K DQoNCg0KDQoNCiAgICAgIGlmICghX19lcnIpDQogICAgICAgIHsNCiAgICAgICAgICBzaXplX3Qg X19wb3MgPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19kYXlzW19fdG1wd2RheV0pOw0KICAgICAg ICAgIF9fdHAuX01fZGF5cyhfX2RheXMpOw0KICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19u YW1lID0gX19kYXlzW19fdG1wd2RheV07DQogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0g Kl9fYmVnKQ0KICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xl biA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOw0KICAgICAgICAgICAgICB3aGlsZSAo X19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZA0KICAgICAgICAgICAgICAgICAgICAgJiYg X19uYW1lW19fcG9zXSA9PSAqX19iZWcpDQogICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3Bv czsNCiAgICAgICAgICAgICAgaWYgKF9fbGVuICE9IF9fcG9zKQ0KICAgICAgICAgICAgICAgIF9f ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGlmICgh X19lcnIpDQogICAgICAgICAgICBfX3RtLT50bV93ZGF5ID0gX190bXB3ZGF5Ow0KICAgICAgICB9 DQogICAgICBpZiAoX19iZWcgPT0gX19lbmQpDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpl b2ZiaXQ7DQogICAgICByZXR1cm4gX19iZWc7DQogICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgX0luSXRlcg0KICAgIHRpbWVfZ2V0PF9D aGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dldF9tb250aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBp dGVyX3R5cGUgX19lbmQsDQogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZSYgX19pbywgaW9z X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QNCiAgICB7DQogICAgICB0eXBl ZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsNCiAgICAgIGxvY2FsZSBfX2xv YyA9IF9faW8uZ2V0bG9jKCk7DQogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3Rw ID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7DQogICAgICBjb25zdCBj aGFyX3R5cGUqIF9fbW9udGhzWzEyXTsNCiAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJldmlhdGVk KF9fbW9udGhzKTsNCiAgICAgIGludCBfX3RtcG1vbjsNCiAgICAgIF9NX2V4dHJhY3RfbmFtZShf X2JlZywgX19lbmQsIF9fdG1wbW9uLCBfX21vbnRocywgMTIsIF9fZXJyKTsNCg0KDQoNCg0KDQoN Cg0KICAgICAgaWYgKCFfX2VycikNCiAgICAgICAgew0KICAgICAgICAgIHNpemVfdCBfX3BvcyA9 IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX21vbnRoc1tfX3RtcG1vbl0pOw0KICAgICAgICAgIF9f dHAuX01fbW9udGhzKF9fbW9udGhzKTsNCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbmFt ZSA9IF9fbW9udGhzW19fdG1wbW9uXTsNCiAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSA9PSAq X19iZWcpDQogICAgICAgICAgICB7DQoNCiAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVu ID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7DQogICAgICAgICAgICAgIHdoaWxlIChf X3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kDQogICAgICAgICAgICAgICAgICAgICAmJiBf X25hbWVbX19wb3NdID09ICpfX2JlZykNCiAgICAgICAgICAgICAgICArK19fYmVnLCArK19fcG9z Ow0KICAgICAgICAgICAgICBpZiAoX19sZW4gIT0gX19wb3MpDQogICAgICAgICAgICAgICAgX19l cnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKCFf X2VycikNCiAgICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fdG1wbW9uOw0KICAgICAgICB9DQoN CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkNCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVv ZmJpdDsNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0ZXINCiAgICB0aW1lX2dldDxfQ2hh clQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlw ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QNCiAgICB7DQogICAgICBsb2NhbGUgX19sb2MgPSBf X2lvLmdldGxvYygpOw0KICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9m YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOw0KDQogICAgICBjaGFyX3R5cGUgX19jID0gKl9f YmVnOw0KICAgICAgc2l6ZV90IF9faSA9IDA7DQogICAgICBzdHJpbmcgX19kaWdpdHM7DQogICAg ICB3aGlsZSAoX19pIDwgNCAmJiBfX2JlZyAhPSBfX2VuZCAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jh c2U6OmRpZ2l0LCBfX2MpKQ0KICAgICAgICB7DQogICAgICAgICAgX19kaWdpdHMgKz0gX19jdHlw ZS5uYXJyb3coX19jLCAwKTsNCiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAgICAg ICsrX19pOw0KICAgICAgICB9DQogICAgICBpZiAoX19pID09IDIgfHwgX19pID09IDQpDQogICAg ICAgIHsNCiAgICAgICAgICBsb25nIF9fbDsNCiAgICAgICAgICBfX2NvbnZlcnRfdG9fdihfX2Rp Z2l0cy5jX3N0cigpLCBfX2wsIF9fZXJyLCBfU19jX2xvY2FsZSk7DQogICAgICAgICAgaWYgKCEo X19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgJiYgX19sIDw9IDIxNDc0ODM2NDcpDQogICAgICAg ICAgICB7DQogICAgICAgICAgICAgIF9fbCA9IF9faSA9PSAyID8gX19sIDogX19sIC0gMTkwMDsN CiAgICAgICAgICAgICAgX190bS0+dG1feWVhciA9IHN0YXRpY19jYXN0PGludD4oX19sKTsNCiAg ICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICBfX2VyciB8PSBpb3Nf YmFzZTo6ZmFpbGJpdDsNCiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkNCiAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmVvZmJpdDsNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0K ICAgIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBwdXQoaXRlcl90eXBlIF9fcywg aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSwgY29uc3QgdG0qIF9fdG0sDQogICAgICAgIGNvbnN0 IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0DQogICAgew0KICAgICAg bG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsNCiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3Qm IF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsNCiAgICAgIHdoaWxl IChfX2JlZyAhPSBfX2VuZCkNCiAgICAgICAgew0KICAgICAgICAgIGNoYXIgX19jID0gX19jdHlw ZS5uYXJyb3coKl9fYmVnLCAwKTsNCiAgICAgICAgICArK19fYmVnOw0KICAgICAgICAgIGlmIChf X2MgPT0gJyUnKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBjaGFyIF9fZm9ybWF0Ow0K ICAgICAgICAgICAgICBjaGFyIF9fbW9kID0gMDsNCiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVu ID0gMTsNCiAgICAgICAgICAgICAgX19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsNCiAg ICAgICAgICAgICAgKytfX2JlZzsNCiAgICAgICAgICAgICAgaWYgKF9fYyA9PSAnRScgfHwgX19j ID09ICdPJykNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICBfX21vZCA9IF9f YzsNCiAgICAgICAgICAgICAgICAgIF9fZm9ybWF0ID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAw KTsNCiAgICAgICAgICAgICAgICAgICsrX19iZWc7DQogICAgICAgICAgICAgICAgfQ0KICAgICAg ICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgX19mb3JtYXQgPSBfX2M7DQogICAgICAgICAg ICAgIF9fcyA9IHRoaXMtPmRvX3B1dChfX3MsIF9faW8sIGNoYXJfdHlwZSgpLCBfX3RtLCBfX2Zv cm1hdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbW9kKTsNCiAgICAgICAg ICAgIH0NCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICpfX3Mg PSBfX2M7DQogICAgICAgICAgICAgICsrX19zOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog ICAgICByZXR1cm4gX19zOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9PdXRJdGVyPg0KICAgIF9PdXRJdGVyDQogICAgdGltZV9wdXQ8X0NoYXJULCBfT3V0 SXRlcj46Og0KICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90 eXBlLCBjb25zdCB0bSogX190bSwNCiAgICAgICAgICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21v ZCkgY29uc3QNCiAgICB7DQogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOw0KICAg ICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ ID4oX19sb2MpOw0KICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9m YWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOw0KDQoNCg0KICAgICAgY29uc3Qgc2l6 ZV90IF9fbWF4bGVuID0gNjQ7DQogICAgICBjaGFyX3R5cGUqIF9fcmVzID0NCiAgICAgICAgc3Rh dGljX2Nhc3Q8Y2hhcl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoY2hhcl90eXBlKSAq IF9fbWF4bGVuKSk7DQoNCg0KDQoNCg0KDQogICAgICBjaGFyX3R5cGUgX19mbXRbNF07DQogICAg ICBfX2ZtdFswXSA9IF9fY3R5cGUud2lkZW4oJyUnKTsNCiAgICAgIGlmICghX19tb2QpDQogICAg ICAgIHsNCiAgICAgICAgICBfX2ZtdFsxXSA9IF9fZm9ybWF0Ow0KICAgICAgICAgIF9fZm10WzJd ID0gY2hhcl90eXBlKCk7DQogICAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAg ICAgIF9fZm10WzFdID0gX19tb2Q7DQogICAgICAgICAgX19mbXRbMl0gPSBfX2Zvcm1hdDsNCiAg ICAgICAgICBfX2ZtdFszXSA9IGNoYXJfdHlwZSgpOw0KICAgICAgICB9DQoNCiAgICAgIF9fdHAu X01fcHV0KF9fcmVzLCBfX21heGxlbiwgX19mbXQsIF9fdG0pOw0KDQoNCiAgICAgIHNpemVfdCBf X2xlbiA9IGNoYXJfdHJhaXRzPGNoYXJfdHlwZT46Omxlbmd0aChfX3Jlcyk7DQogICAgICBmb3Ig KHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX2xlbjsgKytfX2ksICsrX19zKQ0KICAgICAgICAqX19z ID0gX19yZXNbX19pXTsNCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQoNCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW50DQogICAgY29sbGF0ZTxfQ2hhclQ+OjpfTV9jb21w YXJlKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0DQogICAgeyByZXR1cm4gMDsg fQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIHNpemVfdA0KICAgIGNvbGxh dGU8X0NoYXJUPjo6X01fdHJhbnNmb3JtKF9DaGFyVCosIGNvbnN0IF9DaGFyVCosIHNpemVfdCkg Y29uc3QNCiAgICB7IHJldHVybiAwOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0K ICAgIGludA0KICAgIGNvbGxhdGU8X0NoYXJUPjo6DQogICAgZG9fY29tcGFyZShjb25zdCBfQ2hh clQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLA0KICAgICAgICAgICAgICAgY29uc3QgX0No YXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QNCiAgICB7DQogICAgICBjb25z dCBzdHJpbmdfdHlwZSBfX29uZShfX2xvMSwgX19oaTEpOw0KICAgICAgY29uc3Qgc3RyaW5nX3R5 cGUgX190d28oX19sbzIsIF9faGkyKTsNCiAgICAgIHJldHVybiBfTV9jb21wYXJlKF9fb25lLmNf c3RyKCksIF9fdHdvLmNfc3RyKCkpOw0KICAgIH0NCg0KIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4NCiAgICB0eXBlbmFtZSBjb2xsYXRlPF9DaGFyVD46OnN0cmluZ190eXBlDQogICAgY29sbGF0 ZTxfQ2hhclQ+OjoNCiAgICBkb190cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBf Q2hhclQqIF9faGkpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90IF9fbGVuID0gKF9faGkgLSBf X2xvKSAqIDI7DQoNCiAgICAgIF9DaGFyVCogX19jID0NCiAgICAgICAgc3RhdGljX2Nhc3Q8X0No YXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbGVuKSk7DQogICAgICBz aXplX3QgX19yZXMgPSBfTV90cmFuc2Zvcm0oX19jLCBfX2xvLCBfX2xlbik7DQoNCiAgICAgIGlm IChfX3JlcyA+PSBfX2xlbikNCiAgICAgICAgew0KICAgICAgICAgIF9fYyA9DQogICAgICAgICAg ICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICog KF9fcmVzICsgMSkpKTsNCiAgICAgICAgICBfTV90cmFuc2Zvcm0oX19jLCBfX2xvLCBfX3JlcyAr IDEpOw0KICAgICAgICB9DQogICAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19jKTsNCiAgICB9DQoN CiB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgbG9uZw0KICAgIGNvbGxhdGU8X0NoYXJU Pjo6DQogICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkg Y29uc3QNCiAgICB7DQogICAgICB1bnNpZ25lZCBsb25nIF9fdmFsID0gMDsNCiAgICAgIGZvciAo OyBfX2xvIDwgX19oaTsgKytfX2xvKQ0KICAgICAgICBfX3ZhbCA9ICpfX2xvICsgKChfX3ZhbCA8 PCA3KSB8DQogICAgICAgICAgICAgICAgICAgICAgIChfX3ZhbCA+PiAobnVtZXJpY19saW1pdHM8 dW5zaWduZWQgbG9uZz46OmRpZ2l0cyAtIDcpKSk7DQogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8 bG9uZz4oX192YWwpOw0KICAgIH0NCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+DQog ICAgdm9pZA0KICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9faW4sIF9UdiYgX19vdXQs IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwNCiAgICAgICAgICAgICAgICAgICBjb25zdCBfX2Nf bG9jYWxlJiBfX2Nsb2MsIGludCBfX2Jhc2UgPSAxMCk7DQojIDIwNjQgIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2 Pg0KICAgIGludA0KICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsIGNvbnN0IGludCwg Y29uc3QgY2hhciogX19mbXQsIF9UdiBfX3YsDQogICAgICAgICAgICAgICAgICAgICBjb25zdCBf X2NfbG9jYWxlJiwgaW50IF9fcHJlYyA9IC0xKQ0KICAgIHsNCiAgICAgIGludCBfX3JldDsNCiAg ICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZSgwLCBfX251bGwpKTsNCiAgICAgIHNl dGxvY2FsZSgwLCAiQyIpOw0KICAgICAgaWYgKF9fcHJlYyA+PSAwKQ0KICAgICAgICBfX3JldCA9 IHNwcmludGYoX19vdXQsIF9fZm10LCBfX3ByZWMsIF9fdik7DQogICAgICBlbHNlDQogICAgICAg IF9fcmV0ID0gc3ByaW50ZihfX291dCwgX19mbXQsIF9fdik7DQogICAgICBzZXRsb2NhbGUoMCwg X19vbGQpOw0KICAgICAgZnJlZShfX29sZCk7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0K IyAyMDk0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBzdHJ1Y3Qg X19wYWQNCiAgICB7DQogICAgICBzdGF0aWMgdm9pZA0KICAgICAgX1NfcGFkKGlvc19iYXNlJiBf X2lvLCBfQ2hhclQgX19maWxsLCBfQ2hhclQqIF9fbmV3cywNCiAgICAgICAgICAgICBjb25zdCBf Q2hhclQqIF9fb2xkcywgY29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwNCiAgICAgICAgICAgICBj b25zdCBzdHJlYW1zaXplIF9fb2xkbGVuLCBjb25zdCBib29sIF9fbnVtKTsNCiAgICB9Ow0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB2b2lkDQog ICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQg X19maWxsLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fbmV3 cywgY29uc3QgX0NoYXJUKiBfX29sZHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHN0cmVhbXNpemUgX19uZXdsZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4sIGNvbnN0IGJvb2wgX19udW0pDQog ICAgew0KICAgICAgc2l6ZV90IF9fcGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4oX19uZXdsZW4g LSBfX29sZGxlbik7DQogICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+ KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3BsZW4pKTsNCiAgICAgIF9UcmFp dHM6OmFzc2lnbihfX3BhZHMsIF9fcGxlbiwgX19maWxsKTsNCg0KICAgICAgX0NoYXJUKiBfX2Jl ZzsNCiAgICAgIF9DaGFyVCogX19lbmQ7DQogICAgICBzaXplX3QgX19tb2QgPSAwOw0KICAgICAg c2l6ZV90IF9fYmVnbGVuOw0KICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYWRqdXN0ID0gX19p by5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOw0KDQogICAgICBpZiAoX19hZGp1c3Qg PT0gaW9zX2Jhc2U6OmxlZnQpDQogICAgICAgIHsNCg0KICAgICAgICAgIF9fYmVnID0gY29uc3Rf Y2FzdDxfQ2hhclQqPihfX29sZHMpOw0KICAgICAgICAgIF9fYmVnbGVuID0gX19vbGRsZW47DQog ICAgICAgICAgX19lbmQgPSBfX3BhZHM7DQogICAgICAgIH0NCiAgICAgIGVsc2UgaWYgKF9fYWRq dXN0ID09IGlvc19iYXNlOjppbnRlcm5hbCAmJiBfX251bSkNCiAgICAgICAgew0KDQoNCg0KICAg ICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAgICAgICAgY29uc3QgY3R5 cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOw0K ICAgICAgICAgIGNvbnN0IF9DaGFyVCBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScpOw0KICAg ICAgICAgIGNvbnN0IF9DaGFyVCBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7DQogICAgICAg ICAgYm9vbCBfX3Rlc3RzaWduID0gX1RyYWl0czo6ZXEoX19vbGRzWzBdLCBfX21pbnVzKQ0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwgX19wbHVz KTsNCg0KICAgICAgICAgIGJvb2wgX190ZXN0aGV4ID0gX1RyYWl0czo6ZXEoX19jdHlwZS53aWRl bignMCcpLCBfX29sZHNbMF0pDQogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX1RyYWl0 czo6ZXEoX19jdHlwZS53aWRlbigneCcpLCBfX29sZHNbMV0pDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfHwgX1RyYWl0czo6ZXEoX19jdHlwZS53aWRlbignWCcpLCBfX29sZHNbMV0p KTsNCiAgICAgICAgICBpZiAoX190ZXN0aGV4KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg ICBfX25ld3NbMF0gPSBfX29sZHNbMF07DQogICAgICAgICAgICAgIF9fbmV3c1sxXSA9IF9fb2xk c1sxXTsNCiAgICAgICAgICAgICAgX19tb2QgKz0gMjsNCiAgICAgICAgICAgICAgX19uZXdzICs9 IDI7DQogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRzOw0KICAgICAgICAgICAgICBfX2JlZ2xl biA9IF9fcGxlbjsNCiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9f b2xkcyArIF9fbW9kKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIGlmIChfX3Rlc3Rz aWduKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfVHJhaXRzOjplcSgoX19uZXdzWzBd ID0gX19vbGRzWzBdKSwgX19wbHVzKSA/IF9fcGx1cyA6IF9fbWludXM7DQogICAgICAgICAgICAg ICsrX19tb2Q7DQogICAgICAgICAgICAgICsrX19uZXdzOw0KICAgICAgICAgICAgICBfX2JlZyA9 IF9fcGFkczsNCiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47DQogICAgICAgICAgICAg IF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMgKyBfX21vZCk7DQogICAgICAgICAg ICB9DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgIF9fYmVn ID0gX19wYWRzOw0KICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsNCiAgICAgICAgICAg ICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7DQogICAgICAgICAgICB9DQog ICAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgICAgew0KDQogICAgICAgICAgX19iZWcgPSBfX3Bh ZHM7DQogICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47DQogICAgICAgICAgX19lbmQgPSBjb25z dF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7DQogICAgICAgIH0NCiAgICAgIF9UcmFpdHM6OmNvcHko X19uZXdzLCBfX2JlZywgX19iZWdsZW4pOw0KICAgICAgX1RyYWl0czo6Y29weShfX25ld3MgKyBf X2JlZ2xlbiwgX19lbmQsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3bGVuIC0gX19i ZWdsZW4gLSBfX21vZCk7DQogICAgfQ0KIyAyMTg5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz L2xvY2FsZV9mYWNldHMudGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBi b29sDQogICAgX192ZXJpZnlfZ3JvdXBpbmcoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVD4mIF9f Z3JvdXBpbmcsDQogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVD4mIF9f Z3JvdXBpbmdfdG1wKQ0KICAgIHsNCiAgICAgIGludCBfX2kgPSAwOw0KICAgICAgaW50IF9faiA9 IDA7DQogICAgICBjb25zdCBpbnQgX19sZW4gPSBfX2dyb3VwaW5nLnNpemUoKTsNCiAgICAgIGNv bnN0IGludCBfX24gPSBfX2dyb3VwaW5nX3RtcC5zaXplKCk7DQogICAgICBib29sIF9fdGVzdCA9 IHRydWU7DQoNCg0KDQoNCiAgICAgIHdoaWxlIChfX3Rlc3QgJiYgX19pIDwgX19uIC0gMSkNCiAg ICAgICAgZm9yIChfX2ogPSAwOyBfX3Rlc3QgJiYgX19qIDwgX19sZW4gJiYgX19pIDwgX19uIC0g MTsgKytfX2osKytfX2kpDQogICAgICAgICAgX190ZXN0ICY9IF9fZ3JvdXBpbmdbX19qXSA9PSBf X2dyb3VwaW5nX3RtcFtfX24gLSBfX2kgLSAxXTsNCg0KDQogICAgICBfX2ogPT0gX19sZW4gPyBf X2ogPSAwIDogX19qOw0KICAgICAgX190ZXN0ICY9IF9fZ3JvdXBpbmdbX19qXSA+PSBfX2dyb3Vw aW5nX3RtcFtfX24gLSBfX2kgLSAxXTsNCiAgICAgIHJldHVybiBfX3Rlc3Q7DQogICAgfQ0KDQoN Cg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgX0NoYXJUKg0KICAgIF9f YWRkX2dyb3VwaW5nKF9DaGFyVCogX19zLCBfQ2hhclQgX19zZXAsDQogICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciogX19nYmVnLCBjb25zdCBjaGFyKiBfX2dlbmQsDQogICAgICAgICAgICAg ICAgICAgY29uc3QgX0NoYXJUKiBfX2ZpcnN0LCBjb25zdCBfQ2hhclQqIF9fbGFzdCkNCiAgICB7 DQogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+ICpfX2diZWcpDQogICAgICAgIHsNCiAgICAg ICAgICBfX3MgPSBfX2FkZF9ncm91cGluZyhfX3MsIF9fc2VwLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChfX2diZWcgKyAxID09IF9fZ2VuZCA/IF9fZ2JlZyA6IF9fZ2JlZyArIDEp LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ2VuZCwgX19maXJzdCwgX19sYXN0 IC0gKl9fZ2JlZyk7DQogICAgICAgICAgX19maXJzdCA9IF9fbGFzdCAtICpfX2diZWc7DQogICAg ICAgICAgKl9fcysrID0gX19zZXA7DQogICAgICAgIH0NCiAgICAgIGRvDQogICAgICAgICpfX3Mr KyA9ICpfX2ZpcnN0Kys7DQogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpOw0KICAgICAg cmV0dXJuIF9fczsNCiAgICB9DQoNCg0KDQoNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5 cHVuY3Q8Y2hhciwgZmFsc2U+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDxj aGFyLCB0cnVlPjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPGNo YXIsIGZhbHNlPjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPGNo YXIsIHRydWU+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfZ2V0PGNoYXI+Ow0KICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfcHV0PGNoYXI+Ow0KICBleHRlcm4gdGVtcGxhdGUg Y2xhc3MgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz cyBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9u ZXlwdW5jdF9ieW5hbWU8d2NoYXJfdCwgZmFsc2U+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg bW9uZXlwdW5jdF9ieW5hbWU8d2NoYXJfdCwgdHJ1ZT47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz cyBtb25leV9nZXQ8d2NoYXJfdD47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9wdXQ8 d2NoYXJfdD47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdDxjaGFyPjsNCiAgZXh0 ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFtZTxjaGFyPjsNCiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIG51bV9nZXQ8Y2hhcj47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fcHV0 PGNoYXI+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3Q8d2NoYXJfdD47DQogIGV4 dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdF9ieW5hbWU8d2NoYXJfdD47DQogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyBudW1fZ2V0PHdjaGFyX3Q+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg bnVtX3B1dDx3Y2hhcl90PjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PGNo YXI+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXQ8Y2hhcj47DQogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8Y2hhcj47DQogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyB0aW1lX2dldDxjaGFyPjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0X2J5 bmFtZTxjaGFyPjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PHdjaGFyX3Q+ Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXQ8d2NoYXJfdD47DQogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8d2NoYXJfdD47DQogIGV4dGVybiB0ZW1wbGF0 ZSBjbGFzcyB0aW1lX2dldDx3Y2hhcl90PjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVf Z2V0X2J5bmFtZTx3Y2hhcl90PjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzPGNo YXI+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXNfYnluYW1lPGNoYXI+Ow0KICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXM8d2NoYXJfdD47DQogIGV4dGVybiB0ZW1wbGF0 ZSBjbGFzcyBtZXNzYWdlc19ieW5hbWU8d2NoYXJfdD47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz cyBjdHlwZV9ieW5hbWU8Y2hhcj47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjdHlwZV9ieW5h bWU8d2NoYXJfdD47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0X2J5bmFtZTxjaGFy LCBjaGFyLCBtYnN0YXRlX3Q+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5h bWU8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNv bGxhdGU8Y2hhcj47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlX2J5bmFtZTxjaGFy PjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGU8d2NoYXJfdD47DQogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlX2J5bmFtZTx3Y2hhcl90PjsNCg0KICBleHRlcm4gdGVtcGxh dGUNCiAgICBjb25zdCBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4mDQogICAgdXNlX2Zh Y2V0PGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQog IGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGNvbnN0IGNvbGxhdGU8Y2hhcj4mDQogICAgdXNlX2ZhY2V0 PGNvbGxhdGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAg ICBjb25zdCBudW1wdW5jdDxjaGFyPiYNCiAgICB1c2VfZmFjZXQ8bnVtcHVuY3Q8Y2hhcj4gPihj b25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBjb25zdCBudW1fcHV0PGNo YXI+Jg0KICAgIHVzZV9mYWNldDxudW1fcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAg ZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgbnVtX2dldDxjaGFyPiYNCiAgICB1c2VfZmFjZXQ8 bnVtX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAg IGNvbnN0IG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT4mDQogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8 Y2hhciwgdHJ1ZT4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBj b25zdCBtb25leXB1bmN0PGNoYXIsIGZhbHNlPiYNCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxj aGFyLCBmYWxzZT4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBj b25zdCBtb25leV9wdXQ8Y2hhcj4mDQogICAgdXNlX2ZhY2V0PG1vbmV5X3B1dDxjaGFyPiA+KGNv bnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGNvbnN0IG1vbmV5X2dldDxj aGFyPiYNCiAgICB1c2VfZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoN CiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgX190aW1lcHVuY3Q8Y2hhcj4mDQogICAgdXNl X2ZhY2V0PF9fdGltZXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRl bXBsYXRlDQogICAgY29uc3QgdGltZV9wdXQ8Y2hhcj4mDQogICAgdXNlX2ZhY2V0PHRpbWVfcHV0 PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3Qg dGltZV9nZXQ8Y2hhcj4mDQogICAgdXNlX2ZhY2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9j YWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgbWVzc2FnZXM8Y2hhcj4mDQog ICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJu IHRlbXBsYXRlDQogICAgY29uc3QgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+Jg0K ICAgIHVzZV9mYWNldDxjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4gPihsb2NhbGUg Y29uc3QmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBjb25zdCBjb2xsYXRlPHdjaGFyX3Q+ Jg0KICAgIHVzZV9mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAg ZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgbnVtcHVuY3Q8d2NoYXJfdD4mDQogICAgdXNlX2Zh Y2V0PG51bXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBs YXRlDQogICAgY29uc3QgbnVtX3B1dDx3Y2hhcl90PiYNCiAgICB1c2VfZmFjZXQ8bnVtX3B1dDx3 Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGNvbnN0 IG51bV9nZXQ8d2NoYXJfdD4mDQogICAgdXNlX2ZhY2V0PG51bV9nZXQ8d2NoYXJfdD4gPihjb25z dCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBjb25zdCBtb25leXB1bmN0PHdj aGFyX3QsIHRydWU+Jg0KICAgIHVzZV9mYWNldDxtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+ID4o Y29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgbW9uZXlwdW5j dDx3Y2hhcl90LCBmYWxzZT4mDQogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFs c2U+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgbW9u ZXlfcHV0PHdjaGFyX3Q+Jg0KICAgIHVzZV9mYWNldDxtb25leV9wdXQ8d2NoYXJfdD4gPihjb25z dCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBjb25zdCBtb25leV9nZXQ8d2No YXJfdD4mDQogICAgdXNlX2ZhY2V0PG1vbmV5X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYp Ow0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGNvbnN0IF9fdGltZXB1bmN0PHdjaGFyX3Q+Jg0K ICAgIHVzZV9mYWNldDxfX3RpbWVwdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQog IGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGNvbnN0IHRpbWVfcHV0PHdjaGFyX3Q+Jg0KICAgIHVzZV9m YWNldDx0aW1lX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1w bGF0ZQ0KICAgIGNvbnN0IHRpbWVfZ2V0PHdjaGFyX3Q+Jg0KICAgIHVzZV9mYWNldDx0aW1lX2dl dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGNv bnN0IG1lc3NhZ2VzPHdjaGFyX3Q+Jg0KICAgIHVzZV9mYWNldDxtZXNzYWdlczx3Y2hhcl90PiA+ KGNvbnN0IGxvY2FsZSYpOw0KDQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9vbA0KICAgIGhh c19mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0 ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9vbA0KICAgIGhh c19mYWNldDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBs YXRlDQogICAgYm9vbA0KICAgIGhhc19mYWNldDxudW1wdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2Fs ZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8bnVtX3B1 dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJvb2wN CiAgICBoYXNfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVy biB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyPiA+KGNv bnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFj ZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRl DQogICAgYm9vbA0KICAgIGhhc19mYWNldDxtb25leV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUm KTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBib29sDQogICAgaGFzX2ZhY2V0PF9fdGltZXB1 bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9v bA0KICAgIGhhc19mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4 dGVybiB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4gPihj b25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBib29sDQogICAgaGFzX2Zh Y2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoNCiBleHRlcm4gdGVtcGxhdGUN CiAgICBib29sDQogICAgaGFzX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7 DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9vbA0KICAgIGhhc19mYWNldDxjb2RlY3Z0PHdj aGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVt cGxhdGUNCiAgICBib29sDQogICAgaGFzX2ZhY2V0PGNvbGxhdGU8d2NoYXJfdD4gPihjb25zdCBs b2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBib29sDQogICAgaGFzX2ZhY2V0PG51 bXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQog ICAgYm9vbA0KICAgIGhhc19mYWNldDxudW1fcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7 DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9vbA0KICAgIGhhc19mYWNldDxudW1fZ2V0PHdj aGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9vbA0K ICAgIGhhc19mYWNldDxtb25leXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAg ZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9vbA0KICAgIGhhc19mYWNldDxtb25leV9wdXQ8d2NoYXJf dD4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBib29sDQogICAg aGFzX2ZhY2V0PG1vbmV5X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVy biB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8X190aW1lcHVuY3Q8d2NoYXJfdD4g Pihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBib29sDQogICAgaGFz X2ZhY2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRl bXBsYXRlDQogICAgYm9vbA0KICAgIGhhc19mYWNldDx0aW1lX2dldDx3Y2hhcl90PiA+KGNvbnN0 IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8 bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsNCn0NCiMgNDcgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2xvY2FsZSIgMiAzDQojIDM4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL29z dHJlYW0udGNjIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjpzZW50cnk6Og0KICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYg X19vcykNCiAgICA6IF9NX29rKF9fb3MuZ29vZCgpKSwgX01fb3MoX19vcykNCiAgICB7DQoNCiAg ICAgIGlmIChfTV9vayAmJiBfX29zLnRpZSgpKQ0KICAgICAgICBfX29zLnRpZSgpLT5mbHVzaCgp Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3Bm KShfX29zdHJlYW1fdHlwZSYpKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0K ICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAg eyBfX3BmKCp0aGlzKTsgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAg ICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6 OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0 b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkNCiAgICB7DQogICAgICBzZW50 cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAg ICB0cnkNCiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0NCiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7 DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46Og0KICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkNCiAg ICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAg ICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0NCiAgICAg ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBp ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAg ICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAq dGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYmlu KQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fY2VyYiAm JiBfX3NiaW4pDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAg ICAgICAgICAgaWYgKCFfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCB0aGlzLT5yZGJ1 ZigpKSkNCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7 DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAg ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAg ICAgICB9DQogICAgICBlbHNlIGlmICghX19zYmluKQ0KICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsNCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9w ZXJhdG9yPDwoYm9vbCBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQog ICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7 DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkNCiAgICAgICAg ICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBf X24pLmZhaWxlZCgpKQ0KICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh aWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAg ICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVy YXRvcjw8KGxvbmcgX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAg ICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0K ICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOw0KICAgICAgICAgICAg ICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJh c2VmaWVsZDsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQ0K ICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIGJvb2wgX19iID0gZmFsc2U7DQog ICAgICAgICAgICAgICAgICBpZiAoKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCkgfHwgKF9fZm10ICYg aW9zX2Jhc2U6OmhleCkpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIF9fbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbik7 DQogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhp cywgX19jLCBfX2wpLmZhaWxlZCgpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg ICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgq dGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsNCiAgICAgICAgICAgICAgICAgIGlmIChf X2IpDQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7 DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pDQogICAgew0KICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcyk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAg dHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m bnVtcHV0KSkNCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhp cywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQ0KICAgICAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0 Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlz LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAg IHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog ICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBsb25nIF9fbikNCiAgICB7DQogICAgICBz ZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAg ICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9IHRo aXMtPmZpbGwoKTsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhp cy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7DQogICAgICAgICAgICAgIGlmIChfTV9j aGVja19mYWNldChfTV9mbnVtcHV0KSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAg ICAgICBib29sIF9fYiA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgaWYgKChfX2ZtdCAmIGlv c19iYXNlOjpvY3QpIHx8IChfX2ZtdCAmIGlvc19iYXNlOjpoZXgpKQ0KICAgICAgICAgICAgICAg ICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fbDsNCiAg ICAgICAgICAgICAgICAgICAgICBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+ KF9fbik7DQogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlz LCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAg ICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQt PnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsNCiAgICAgICAgICAgICAgICAg IGlmIChfX2IpDQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMt PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAg dGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAg ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9fbikNCiAgICB7DQog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsN CiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr X2ZhY2V0KF9NX2ZudW1wdXQpKQ0KICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQo KnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpDQogICAgICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAg ICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVy biAqdGhpczsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQ0KICAgIHsN CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoX01fY2hl Y2tfZmFjZXQoX01fZm51bXB1dCkpDQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1 dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkNCiAgICAgICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgfQ0K ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAg ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0 dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGRvdWJsZSBfX24pDQog ICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQogICAgICBpZiAoX19jZXJiKQ0KICAg ICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChf TV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkNCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1 dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQ0KICAgICAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAg ICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAg ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw KQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAg ICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAg YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9f bikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIp DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQ0KICAgICAgICAgICAgICAgIGlmIChfTV9m bnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpDQog ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAg ICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAg IHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0K ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0N CiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYN CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnB1dChjaGFyX3R5cGUgX19jKQ0K ICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fY2VyYikNCiAg ICAgICAgew0KICAgICAgICAgIGludF90eXBlIF9fcHV0ID0gcmRidWYoKS0+c3B1dGMoX19jKTsN CiAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fcHV0LCB0cmFpdHNfdHlw ZTo6ZW9mKCkpKQ0KICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OndyaXRlKGNv bnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19j ZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBzdHJl YW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24pOw0KICAgICAgICAg IGlmICggX19wdXQgIT0gX19uKQ0KICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 OmZsdXNoKCkNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChf X2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAodGhpcy0+cmRidWYoKSAmJiB0aGlzLT5y ZGJ1ZigpLT5wdWJzeW5jKCkgPT0gLTEpDQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgdHlwZW5h bWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQ0KICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6dGVsbHAoKQ0KICAgIHsNCiAgICAgIHBvc190eXBlIF9f cmV0ID0gcG9zX3R5cGUoLTEpOw0KICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpDQogICAgICAgIF9f cmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFz ZTo6b3V0KTsNCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2Vla3AocG9z X3R5cGUgX19wb3MpDQogICAgew0KICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpDQogICAgICAgIHsN Cg0KDQogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9z KF9fcG9zLCBpb3NfYmFzZTo6b3V0KTsNCg0KDQogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190 eXBlKG9mZl90eXBlKC0xKSkpDQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 ZmFpbGJpdCk7DQoNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6DQogICAgc2Vla3Aob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZCkNCiAg ICB7DQogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkNCiAgICAgICAgew0KDQoNCiAgICAgICAgICBw b3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jh c2U6Om91dCk7DQoNCg0KICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgt MSkpKQ0KICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KDQog ICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JiBfX291dCwgX0NoYXJUIF9fYykNCiAgICB7DQogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVh bV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAg IHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6 ZSBfX3cgPSBfX291dC53aWR0aCgpOw0KICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0 YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX193 ICsgMSkpKTsNCiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOw0KICAgICAgICAgICAgICBz dHJlYW1zaXplIF9fbGVuID0gMTsNCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQ0KICAg ICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46 Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fYywgX193LCBfX2xlbiwgZmFsc2UpOw0K ICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAg ICAgICAgICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsNCiAgICAgICAgICAgICAgX19vdXQu d2lkdGgoMCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh aWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAg ICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gX19vdXQ7DQogICAgfQ0KDQoNCiAgdGVtcGxh dGUgPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYNCiAg ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9f YykNCiAgICB7DQogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gX19v c3RyZWFtX3R5cGU7DQogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2Vy YihfX291dCk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQog ICAgICAgICAgICB7DQogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgo KTsNCiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVp bHRpbl9hbGxvY2EoX193ICsgMSkpOw0KICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBfX2M7DQog ICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOw0KICAgICAgICAgICAgICBpZiAoX193 ID4gX19sZW4pDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgX19wYWQ8Y2hh ciwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2MsIF9fdywgX19sZW4s IGZhbHNlKTsNCiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193Ow0KICAgICAgICAgICAgICAg IH0NCiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBfX2xlbik7DQogICAgICAgICAg ICAgIF9fb3V0LndpZHRoKDApOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2Vw dGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgX19vdXQuc2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsN CiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fb3V0Ow0KICAgICB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IF9DaGFyVCogX19zKQ0KICAgIHsNCiAgICAg IHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOw0K ICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOw0KICAg ICAgaWYgKF9fY2VyYiAmJiBfX3MpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOw0KICAg ICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRp bl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6 ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsN CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAg ICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQu ZmlsbCgpLCBfX3BhZHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19zLCBfX3csIF9fbGVuLCBmYWxzZSk7DQogICAgICAgICAgICAgICAgICBfX3Mg PSBfX3BhZHM7DQogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsNCiAgICAgICAgICAgICAg ICB9DQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOw0KICAgICAgICAgICAg ICBfX291dC53aWR0aCgwKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRp b24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIF9fb3V0LnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlv bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQog ICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIGVsc2UgaWYgKCFfX3MpDQogICAgICAgIF9f b3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgcmV0dXJuIF9fb3V0Ow0KICAg IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKQ0KICAgIHsNCiAg ICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBl Ow0KDQoNCg0KICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyPiBfX3RyYWl0c190eXBlOw0K DQogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7DQog ICAgICBpZiAoX19jZXJiICYmIF9fcykNCiAgICAgICAgew0KICAgICAgICAgIHNpemVfdCBfX2Ns ZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19zKTsNCiAgICAgICAgICBfQ2hhclQqIF9fd3Mg PSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICog KF9fY2xlbiArIDEpKSk7DQogICAgICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19j bGVuOyArK19faSkNCiAgICAgICAgICAgIF9fd3NbX19pXSA9IF9fb3V0LndpZGVuKF9fc1tfX2ld KTsNCiAgICAgICAgICBfQ2hhclQqIF9fc3RyID0gX193czsNCg0KICAgICAgICAgIHRyeQ0KICAg ICAgICAgICAgew0KICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8 c3RyZWFtc2l6ZT4oX19jbGVuKTsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291 dC53aWR0aCgpOw0KICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9D aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsNCg0KICAgICAg ICAgICAgICBpZiAoX193ID4gX19sZW4pDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAg ICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCks IF9fcGFkcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3dzLCBfX3csIF9fbGVuLCBmYWxzZSk7DQogICAgICAgICAgICAgICAgICBfX3N0ciA9IF9f cGFkczsNCiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193Ow0KICAgICAgICAgICAgICAgIH0N CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVuKTsNCiAgICAgICAgICAgICAg X19vdXQud2lkdGgoMCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u JiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICBfX291dC5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICBlbHNlIGlmICghX19zKQ0KICAgICAgICBfX291 dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgIHJldHVybiBfX291dDsNCiAgICB9 DQoNCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08Y2hhciwg X1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBf X291dCwgY29uc3QgY2hhciogX19zKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVh bTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVh bV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQ0K ICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHN0 cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsNCiAgICAgICAgICAgICAgY2hhciogX19wYWRz ID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193KSk7DQogICAgICAgICAg ICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjps ZW5ndGgoX19zKSk7DQoNCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQ0KICAgICAgICAg ICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fcGFkPGNoYXIsIF9UcmFpdHM+OjpfU19wYWQo X19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fcywgX193LCBfX2xlbiwgZmFsc2UpOw0KICAgICAgICAg ICAgICAgICAgX19zID0gX19wYWRzOw0KICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7DQog ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsN CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7DQogICAgICAgICAgICB9DQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAg ICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKChf X291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAg ICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICBlbHNlIGlmICghX19z KQ0KICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgIHJldHVy biBfX291dDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f b3V0LA0KICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19zdHIpDQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7DQogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlw ZTo6c2VudHJ5IF9fY2VyYihfX291dCk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQog ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5kYXRhKCk7DQogICAgICAgICAgc3Ry ZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOw0KICAgICAgICAgIF9DaGFyVCogX19wYWRzID0g c3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9f dykpOw0KICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXpl PihfX3N0ci5zaXplKCkpOw0KDQoNCg0KICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikNCiAgICAg ICAgICAgIHsNCiAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9f b3V0LCBfX291dC5maWxsKCksIF9fcGFkcywgX19zLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX193LCBfX2xlbiwgZmFsc2UpOw0KICAgICAgICAgICAgICBf X3MgPSBfX3BhZHM7DQogICAgICAgICAgICAgIF9fbGVuID0gX193Ow0KICAgICAgICAgICAgfQ0K ICAgICAgICAgIHN0cmVhbXNpemUgX19yZXMgPSBfX291dC5yZGJ1ZigpLT5zcHV0bihfX3MsIF9f bGVuKTsNCiAgICAgICAgICBfX291dC53aWR0aCgwKTsNCiAgICAgICAgICBpZiAoX19yZXMgIT0g X19sZW4pDQogICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQog ICAgICAgIH0NCiAgICAgIHJldHVybiBfX291dDsNCiAgICB9DQoNCg0KDQoNCiAgZXh0ZXJuIHRl bXBsYXRlIGNsYXNzIGJhc2ljX29zdHJlYW08Y2hhcj47DQogIGV4dGVybiB0ZW1wbGF0ZSBvc3Ry ZWFtJiBlbmRsKG9zdHJlYW0mKTsNCiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIGVuZHMob3N0 cmVhbSYpOw0KICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYpOw0KICBl eHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY2hhcik7DQogIGV4 dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCB1bnNpZ25lZCBjaGFy KTsNCiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIHNpZ25l ZCBjaGFyKTsNCiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYs IGNvbnN0IGNoYXIqKTsNCiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0 cmVhbSYsIGNvbnN0IHVuc2lnbmVkIGNoYXIqKTsNCiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0m IG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHNpZ25lZCBjaGFyKik7DQojIDcxMyAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9vc3RyZWFtLnRjYyIgMw0KfQ0KIyAyNzYgIi91c3IvaW5jbHVk ZS9jKysvMy4yL29zdHJlYW0iIDIgMw0KIyA3MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaXRlcmF0 b3IiIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pc3RyZWFtIiAxIDMNCiMgNDMgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2lzdHJlYW0iIDMNCg0KDQoNCg0KbmFtZXNwYWNlIHN0ZA0Kew0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFz cyBiYXNpY19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0 cz4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7 DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOw0KICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsNCiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7DQogICAgICB0eXBlZGVm IF9UcmFpdHMgdHJhaXRzX3R5cGU7DQoNCg0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8 X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19p b3M8X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7DQogICAgICB0eXBlZGVmIGlzdHJl YW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsNCiAgICAg IHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBl Ow0KICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsNCg0KICAgIHByb3Rl Y3RlZDoNCg0KICAgICAgc3RyZWFtc2l6ZSBfTV9nY291bnQ7DQoNCiAgICBwdWJsaWM6DQoNCiAg ICAgIGV4cGxpY2l0DQogICAgICBiYXNpY19pc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Ip DQogICAgICB7DQogICAgICAgIHRoaXMtPmluaXQoX19zYik7DQogICAgICAgIF9NX2djb3VudCA9 IHN0cmVhbXNpemUoMCk7DQogICAgICB9DQoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5iYXNpY19p c3RyZWFtKCkNCiAgICAgIHsgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsgfQ0KDQoNCiAgICAg IGNsYXNzIHNlbnRyeTsNCiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7DQoNCg0KDQogICAgICBf X2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19wZiko X19pc3RyZWFtX3R5cGUmKSk7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0 b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7DQoNCiAgICAgIF9faXN0cmVh bV90eXBlJg0KICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKTsN Cg0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKTsN Cg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pOw0K DQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQm IF9fbik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I+PihpbnQmIF9f bik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBp bnQmIF9fbik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I+Pihsb25n JiBfX24pOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4odW5zaWdu ZWQgbG9uZyYgX19uKTsNCg0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9y Pj4obG9uZyBsb25nJiBfX24pOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJh dG9yPj4odW5zaWduZWQgbG9uZyBsb25nJiBfX24pOw0KDQoNCiAgICAgIF9faXN0cmVhbV90eXBl Jg0KICAgICAgb3BlcmF0b3I+PihmbG9hdCYgX19mKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUm DQogICAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19mKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUm DQogICAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX2YpOw0KDQogICAgICBfX2lzdHJlYW1f dHlwZSYNCiAgICAgIG9wZXJhdG9yPj4odm9pZComIF9fcCk7DQoNCiAgICAgIF9faXN0cmVhbV90 eXBlJg0KICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsNCg0KDQogICAg ICBpbmxpbmUgc3RyZWFtc2l6ZQ0KICAgICAgZ2NvdW50KHZvaWQpIGNvbnN0DQogICAgICB7IHJl dHVybiBfTV9nY291bnQ7IH0NCg0KICAgICAgaW50X3R5cGUNCiAgICAgIGdldCh2b2lkKTsNCg0K ICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBnZXQoY2hhcl90eXBlJiBfX2MpOw0KDQogICAg ICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf X24sIGNoYXJfdHlwZSBfX2RlbGltKTsNCg0KICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJg0K ICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICAgIHsgcmV0dXJu IHRoaXMtPmdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9DQoNCiAgICAgIF9faXN0 cmVhbV90eXBlJg0KICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBf X2RlbGltKTsNCg0KICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJg0KICAgICAgZ2V0KF9fc3Ry ZWFtYnVmX3R5cGUmIF9fc2IpDQogICAgICB7IHJldHVybiB0aGlzLT5nZXQoX19zYiwgdGhpcy0+ d2lkZW4oJ1xuJykpOyB9DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgZ2V0bGluZShj aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsNCg0KICAg ICAgaW5saW5lIF9faXN0cmVhbV90eXBlJg0KICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywg c3RyZWFtc2l6ZSBfX24pDQogICAgICB7IHJldHVybiB0aGlzLT5nZXRsaW5lKF9fcywgX19uLCB0 aGlzLT53aWRlbignXG4nKSk7IH0NCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBpZ25v cmUoc3RyZWFtc2l6ZSBfX24gPSAxLCBpbnRfdHlwZSBfX2RlbGltID0gdHJhaXRzX3R5cGU6OmVv ZigpKTsNCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHBlZWsodm9pZCk7DQoNCiAgICAgIF9faXN0 cmVhbV90eXBlJg0KICAgICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0K DQogICAgICBzdHJlYW1zaXplDQogICAgICByZWFkc29tZShjaGFyX3R5cGUqIF9fcywgc3RyZWFt c2l6ZSBfX24pOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIHB1dGJhY2soY2hhcl90 eXBlIF9fYyk7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgdW5nZXQodm9pZCk7DQoN CiAgICAgIGludA0KICAgICAgc3luYyh2b2lkKTsNCg0KICAgICAgcG9zX3R5cGUNCiAgICAgIHRl bGxnKHZvaWQpOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIHNlZWtnKHBvc190eXBl KTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBzZWVrZyhvZmZfdHlwZSwgaW9zX2Jh c2U6OnNlZWtkaXIpOw0KICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPg0KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 c2VudHJ5DQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNf dHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19z dHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+IF9faXN0cmVhbV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlw ZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Ry YWl0czo6aW50X3R5cGUgX19pbnRfdHlwZTsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIHNlbnRy eShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIGJvb2wgX19ub3NraXB3cyA9 IGZhbHNlKTsNCg0KICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuIF9NX29rOyB9DQoNCiAg ICBwcml2YXRlOg0KICAgICAgYm9vbCBfTV9vazsNCiAgICB9Ow0KDQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19pbiwgX0NoYXJUJiBfX2MpOw0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAg YmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJl YW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXImIF9fYykNCiAgICB7IHJldHVy biAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQ0KDQogIHRlbXBsYXRl PGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYNCiAgICBv cGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFy JiBfX2MpDQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19j KSk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcyk7DQoNCiAgdGVtcGxh dGU8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mDQogICAg b3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNo YXIqIF9fcykNCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihf X3MpKTsgfQ0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxj aGFyLF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+ JiBfX2luLCBzaWduZWQgY2hhciogX19zKQ0KICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJw cmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+DQogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW0NCiAgICA6IHB1Ymxp YyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4sDQogICAgICBwdWJsaWMgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoNCg0KDQoNCiAgICAgIHR5 cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6 aW50X3R5cGUgaW50X3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190 eXBlIHBvc190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBv ZmZfdHlwZTsNCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsNCg0KDQoNCiAgICAg IHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0K ICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5 cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikNCiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19zYiks IF9fb3N0cmVhbV90eXBlKF9fc2IpDQogICAgICB7IH0NCg0KICAgICAgdmlydHVhbA0KICAgICAg fmJhc2ljX2lvc3RyZWFtKCkgeyB9DQogICAgfTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mDQogICAgd3MoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzKTsNCn0NCg0K DQoNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvaXN0cmVhbS50Y2MiIDEgMw0K IyAzNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9pc3RyZWFtLnRjYyIgMw0KDQoNCg0KDQpu YW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6DQogICAg c2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgYm9vbCBfX25vc2tp cHdzKQ0KICAgIHsNCiAgICAgIGlmIChfX2luLmdvb2QoKSkNCiAgICAgICAgew0KICAgICAgICAg IGlmIChfX2luLnRpZSgpKQ0KICAgICAgICAgICAgX19pbi50aWUoKS0+Zmx1c2goKTsNCiAgICAg ICAgICBpZiAoIV9fbm9za2lwd3MgJiYgKF9faW4uZmxhZ3MoKSAmIGlvc19iYXNlOjpza2lwd3Mp KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0g dHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni ID0gX19pbi5yZGJ1ZigpOw0KICAgICAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNn ZXRjKCk7DQoNCiAgICAgICAgICAgICAgaWYgKF9faW4uX01fY2hlY2tfZmFjZXQoX19pbi5fTV9m Y3R5cGUpKQ0KICAgICAgICAgICAgICAgIHdoaWxlICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBl KF9fYywgX19lb2YpDQogICAgICAgICAgICAgICAgICAgICAgICYmIF9faW4uX01fZmN0eXBlLT5p cyhjdHlwZV9iYXNlOjpzcGFjZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSkpDQogICAgICAgICAgICAg ICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsNCg0KDQoNCiAgICAgICAgICAgICAgaWYgKHRyYWl0 c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkNCiAgICAgICAgICAgICAgICBfX2luLnNl dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0KDQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0K ICAgICAgaWYgKF9faW4uZ29vZCgpKQ0KICAgICAgICBfTV9vayA9IHRydWU7DQogICAgICBlbHNl DQogICAgICAgIHsNCiAgICAgICAgICBfTV9vayA9IGZhbHNlOw0KICAgICAgICAgIF9faW4uc2V0 c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgICB9DQogICAgfQ0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg ICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVhbV90eXBlJikpDQog ICAgew0KICAgICAgX19wZigqdGhpcyk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjoNCiAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQ0K ICAgIHsNCiAgICAgIF9fcGYoKnRoaXMpOw0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPjo6DQogICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQ0KICAg IHsNCiAgICAgIF9fcGYoKnRoaXMpOw0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6DQogICAgb3BlcmF0b3I+Pihib29sJiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAg IHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAg aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1n ZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0 aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0K ICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjoNCiAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9f Y2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAg ICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBf X2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAg ICAgbG9uZyBfX2w7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0 KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vy ciwgX19sKTsNCg0KDQogICAgICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxi aXQpDQogICAgICAgICAgICAgICAgICAmJiAobnVtZXJpY19saW1pdHM8c2hvcnQ+OjptaW4oKSA8 PSBfX2wNCiAgICAgICAgICAgICAgICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8c2hv cnQ+OjptYXgoKSkpDQogICAgICAgICAgICAgICAgX19uID0gX19sOw0KICAgICAgICAgICAgICBl bHNlDQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7DQoNCiAgICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgo dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAg ICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlz Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKQ0K ICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2Nl cmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6 Z29vZGJpdCk7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkN CiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg X19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAg fQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoN CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAg ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkN CiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAg cmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+PihpbnQmIF9fbikN CiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7DQogICAgICBpZiAoX19j ZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6 Omdvb2RiaXQpOw0KICAgICAgICAgICAgICBsb25nIF9fbDsNCiAgICAgICAgICAgICAgaWYgKF9N X2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdl dCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX2wpOw0KDQoNCiAgICAgICAgICAgICAgaWYgKCEo X19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkNCiAgICAgICAgICAgICAgICAgICYmIChudW1lcmlj X2xpbWl0czxpbnQ+OjptaW4oKSA8PSBfX2wNCiAgICAgICAgICAgICAgICAgICAgICAmJiBfX2wg PD0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQ0KICAgICAgICAgICAgICAgIF9fbiA9IF9f bDsNCiAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNl OjpmYWlsYml0Ow0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsNCiAgICAg ICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAg IHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0K ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0N CiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYN CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIG9wZXJhdG9yPj4odW5z aWduZWQgaW50JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2Up Ow0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAg ICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2Zh Y2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywg MCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vy cik7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQog ICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0K ICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVy YXRvcj4+KGxvbmcmIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxz ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAg ICAgICB7DQogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6 Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOw0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf ZmFjZXQoX01fZm51bWdldCkpDQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlz LCAwLCAqdGhpcywgX19lcnIsIF9fbik7DQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9f ZXJyKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkN CiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i YXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9 DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIG9w ZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0 cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIg PSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAgICAgICAgICAgIGlm IChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0 LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv biYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAg ICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjoNCiAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19uKQ0KICAgIHsNCiAgICAgIHNlbnRy eSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAg ICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAgICAg ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAgICAgICBf TV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsNCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgdGhy b3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46Og0KICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyBsb25nJiBfX24pDQogICAg ew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikN CiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29k Yml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAg ICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24p Ow0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAgICB9DQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAg ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAg ICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1 cm4gKnRoaXM7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fbikN CiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7DQogICAgICBpZiAoX19j ZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6 Omdvb2RiaXQpOw0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkp DQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIs IF9fbik7DQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsNCiAgICAgICAgICAg IH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0K DQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAg ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp DQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAg IHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIG9wZXJhdG9yPj4oZG91YmxlJiBf X24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYg KF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19i YXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1n ZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9f ZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAg ICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7 DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh PSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog ICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KGxvbmcg ZG91YmxlJiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0K ICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAg ew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0 YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0 KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwg KnRoaXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7 DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAg ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAg ICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRv cj4+KHZvaWQqJiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2Up Ow0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAg ICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2Zh Y2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywg MCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vy cik7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQog ICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0K ICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVy YXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpDQogICAgew0KICAgICAgIHNlbnRyeSBf X2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgICBpZiAoX19jZXJiKQ0KICAgICAgICAgew0KICAg ICAgICAgICB0cnkNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICBzdHJlYW1zaXplIF9f eHRyY3QgPSAwOw0KICAgICAgICAgICAgICAgaWYgKF9fc2JvdXQpDQogICAgICAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4gPSB0aGlzLT5y ZGJ1ZigpOw0KICAgICAgICAgICAgICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygq dGhpcywgX19zYmluLCBfX3Nib3V0KTsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg ICAgaWYgKCFfX3Nib3V0IHx8ICFfX3h0cmN0KQ0KICAgICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAg ICAgIHRocm93Ow0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgICByZXR1cm4gKnRo aXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4NCiAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBl DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBnZXQodm9pZCkNCiAg ICB7DQogICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAg ICAgIGludF90eXBlIF9fYyA9IF9fZW9mOw0KICAgICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0K ICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfX2MgPSB0aGlzLT5y ZGJ1ZigpLT5zYnVtcGMoKTsNCg0KICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9p bnRfdHlwZShfX2MsIF9fZW9mKSkNCiAgICAgICAgICAgICAgICBfTV9nY291bnQgPSAxOw0KICAg ICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBj YXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAg ICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX2M7DQog ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjoNCiAgICBnZXQoY2hhcl90eXBlJiBfX2MpDQogICAgew0KICAgICAgX01f Z2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYg KF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAg ICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAg ICAgICAgICAgaW50X3R5cGUgX19idWZ2YWwgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsNCg0K ICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2J1ZnZhbCwgX19l b2YpKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7 DQogICAgICAgICAgICAgICAgICBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYnVm dmFsKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQp Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAg ICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6 OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgZ2V0KGNo YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pDQogICAgew0K ICAgICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0K ICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAg ew0KICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0 b19pbnRfdHlwZShfX2RlbGltKTsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2Yg PSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9f c2IgPSB0aGlzLT5yZGJ1ZigpOw0KICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5z Z2V0YygpOw0KDQogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgKyAxIDwgX19uDQogICAg ICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2Yp DQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywg X19pZGVsaW0pKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICpfX3MrKyA9 IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAgICAgICAgIF9fYyA9 IF9fc2ItPnNuZXh0YygpOw0KICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7DQogICAgICAg ICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9f YywgX19lb2YpKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2Zi aXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0N CiAgICAgICAgfQ0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOw0KICAgICAgaWYgKCFfTV9nY291 bnQpDQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJl dHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBf X3NiLCBjaGFyX3R5cGUgX19kZWxpbSkNCiAgICB7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAg ICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGNvbnN0IGlu dF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOw0KICAg ICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAg ICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0gdGhpcy0+cmRidWYoKTsN CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX190aGlzX3NiLT5zZ2V0YygpOw0KICAgICAg ICAgICAgICBjaGFyX3R5cGUgX19jMiA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsN Cg0KICAgICAgICAgICAgICB3aGlsZSAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9f ZW9mKQ0KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShf X2MsIF9faWRlbGltKQ0KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9p bnRfdHlwZShfX3NiLnNwdXRjKF9fYzIpLCBfX2VvZikpDQogICAgICAgICAgICAgICAgew0KICAg ICAgICAgICAgICAgICAgKytfTV9nY291bnQ7DQogICAgICAgICAgICAgICAgICBfX2MgPSBfX3Ro aXNfc2ItPnNuZXh0YygpOw0KICAgICAgICAgICAgICAgICAgX19jMiA9IHRyYWl0c190eXBlOjp0 b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGlmICh0 cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpDQogICAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAg ICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICBpZiAoIV9NX2djb3Vu dCkNCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgcmV0 dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywg c3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQ0KICAgIHsNCiAgICAgIF9NX2djb3Vu dCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAgIGlmIChfX2Nl cmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg ICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19k ZWxpbSk7DQogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6 OmVvZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRi dWYoKTsNCiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsNCg0KICAg ICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50ICsgMSA8IF9fbg0KICAgICAgICAgICAgICAgICAg ICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQ0KICAgICAgICAgICAg ICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkNCiAg ICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6 dG9fY2hhcl90eXBlKF9fYyk7DQogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMo KTsNCiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Ow0KICAgICAgICAgICAgICAgIH0NCiAg ICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkNCiAg ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCiAgICAgICAg ICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIGlmICh0cmFp dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkpDQogICAgICAgICAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgICAgICAgICBfX3NiLT5zYnVtcGMoKTsNCiAgICAgICAgICAgICAg ICAgICAgICArK19NX2djb3VudDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg ICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 ZmFpbGJpdCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNh dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhp cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAg ICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgKl9fcyA9IGNoYXJfdHlw ZSgpOw0KICAgICAgaWYgKCFfTV9nY291bnQpDQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAg IGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19kZWxpbSkNCiAgICB7DQogICAgICBf TV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBp ZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAg ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAg ICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsNCiAgICAg ICAgICAgICAgaW50X3R5cGUgX19jOw0KDQogICAgICAgICAgICAgIF9fbiA9IG1pbihfX24sIG51 bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSk7DQogICAgICAgICAgICAgIHdoaWxlIChf TV9nY291bnQgPCBfX24NCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFf aW50X3R5cGUoX19jID0gX19zYi0+c2J1bXBjKCksIF9fZW9mKSkNCiAgICAgICAgICAgICAgICB7 DQogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsNCiAgICAgICAgICAgICAgICAgIGlmICh0 cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2RlbGltKSkNCiAgICAgICAgICAgICAgICAg ICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5 cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4 Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJv dzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0N Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgdHlw ZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQ0KICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgcGVlayh2b2lkKQ0KICAgIHsNCiAgICAg IGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgIF9NX2djb3VudCA9IDA7 DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAgIGlmIChfX2NlcmIpDQog ICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsgX19jID0gdGhpcy0+cmRidWYo KS0+c2dldGMoKTsgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAg ICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAg ICAgfQ0KICAgICAgcmV0dXJuIF9fYzsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHJlYWQoY2hhcl90 eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgIHsNCiAgICAgIF9NX2djb3VudCA9IDA7DQog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAg ICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX01fZ2Nv dW50ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX24pOw0KICAgICAgICAgICAgICBpZiAo X01fZ2NvdW50ICE9IF9fbikNCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgo dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAg ICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICByZXR1cm4gKnRoaXM7 DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N CiAgICBzdHJlYW1zaXplDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg ICByZWFkc29tZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQogICAgew0KICAgICAg X01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAg aWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAg ICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYoKS0+aW5fYXZhaWwoKTsN CiAgICAgICAgICAgICAgaWYgKF9fbnVtID4gMCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAg ICAgICAgICAgICBfX251bSA9IG1pbihfX251bSwgX19uKTsNCiAgICAgICAgICAgICAgICAgIGlm IChfX251bSkNCiAgICAgICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gdGhpcy0+cmRidWYoKS0+ c2dldG4oX19zLCBfX251bSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBlbHNl DQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQogICAg ICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAg ICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsN CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9 DQogICAgICBlbHNlDQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsN CiAgICAgIHJldHVybiBfTV9nY291bnQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBwdXRiYWNrKGNo YXJfdHlwZSBfX2MpDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQog ICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7 DQogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigp Ow0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsN CiAgICAgICAgICAgICAgaWYgKCFfX3NiDQogICAgICAgICAgICAgICAgICB8fCB0cmFpdHNfdHlw ZTo6ZXFfaW50X3R5cGUoX19zYi0+c3B1dGJhY2tjKF9fYyksIF9fZW9mKSkNCiAgICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAg ICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIGVsc2UN CiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgcmV0dXJu ICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgdW5nZXQodm9pZCkNCiAgICB7DQogICAgICBf TV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBp ZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAg ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAg ICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsNCiAgICAg ICAgICAgICAgaWYgKCFfX3NiDQogICAgICAgICAgICAgICAgICB8fCB0cmFpdHNfdHlwZTo6ZXFf aW50X3R5cGUoX19zYi0+c3VuZ2V0YygpLCBfX2VvZikpDQogICAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0 Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlz LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAg IHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVybiAqdGhpczsNCiAg ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg IGludA0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgc3luYyh2b2lk KQ0KICAgIHsNCiAgICAgIGludCBfX3JldCA9IC0xOw0KICAgICAgX01fZ2NvdW50ID0gMDsNCiAg ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAg ICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfX3N0cmVh bWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsNCiAgICAgICAgICAgICAgaWYgKF9fc2Ip DQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgaWYgKF9fc2ItPnB1YnN5bmMo KSA9PSAtMSkNCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7DQogICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIF9fcmV0 ID0gMDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gX19yZXQ7DQogICAg fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB0 eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlDQogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICB0ZWxsZyh2b2lkKQ0KICAgIHsNCiAg ICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOw0KICAgICAgX01fZ2NvdW50ID0gMDsN CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAg ICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgIF9fcmV0 ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6 aW4pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0N CiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBz ZWVrZyhwb3NfdHlwZSBfX3BvcykNCiAgICB7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAg c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7 DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICBwb3NfdHlw ZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjppbik7 DQoNCg0KICAgICAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkN CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQoNCiAg ICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAg ICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp Ow0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi aXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAg IH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHNlZWtnKG9mZl90 eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikNCiAgICB7DQogICAgICBfTV9nY291 bnQgPSAwOw0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19j ZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQoNCg0KICAgICAg ICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYs IF9fZGlyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW9zX2Jhc2U6OmluKTsNCg0KDQogICAgICAgICAgICAgIGlmIChfX2VyciA9PSBw b3NfdHlwZShvZmZfdHlwZSgtMSkpKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpmYWlsYml0KTsNCg0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2Vw dGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsN CiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKQ0KICAgIHsNCiAgICAgIHR5cGVk ZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAgICAg dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOw0KICAg ICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgeyBf X2luLmdldChfX2MpOyB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAg ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOw0KICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAg ICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0 KTsNCiAgICAgIHJldHVybiBfX2luOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBf Q2hhclQqIF9fcykNCiAgICB7DQogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFt X3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7DQogICAgICB0eXBlZGVmIF9DaGFy VCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOw0K ICAgICAgc3RyZWFtc2l6ZSBfX2V4dHJhY3RlZCA9IDA7DQoNCiAgICAgIHR5cGVuYW1lIF9faXN0 cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIp DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCg0KICAgICAgICAgICAg ICBzdHJlYW1zaXplIF9fbnVtID0gX19pbi53aWR0aCgpOw0KICAgICAgICAgICAgICBpZiAoX19u dW0gPT0gMCkNCiAgICAgICAgICAgICAgICBfX251bSA9IG51bWVyaWNfbGltaXRzPHN0cmVhbXNp emU+OjptYXgoKTsNCg0KICAgICAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3R5cGUg PSB1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsNCiAgICAgICAgICAgICAg Y29uc3QgaW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsNCiAgICAgICAgICAgICAgX19z dHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsNCiAgICAgICAgICAgICAgaW50X3R5 cGUgX19jID0gX19zYi0+c2dldGMoKTsNCg0KICAgICAgICAgICAgICB3aGlsZSAoX19leHRyYWN0 ZWQgPCBfX251bSAtIDENCiAgICAgICAgICAgICAgICAgICAgICYmIF9fYyAhPSBfX2VvZiAmJiAh X19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkNCiAgICAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgICAqX19zKysgPSBfX2M7DQogICAgICAgICAgICAgICAgICArK19fZXh0 cmFjdGVkOw0KICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7DQogICAgICAg ICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQ0KICAgICAgICAgICAg ICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQoNCg0KDQogICAgICAgICAgICAg ICpfX3MgPSBjaGFyX3R5cGUoKTsNCg0KICAgICAgICAgICAgICBfX2luLndpZHRoKDApOw0KICAg ICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAg ICAgew0KDQoNCiAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsN CiAgICAgICAgICAgICAgaWYgKChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0N CiAgICAgIGlmICghX19leHRyYWN0ZWQpDQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6 OmZhaWxiaXQpOw0KICAgICAgcmV0dXJuIF9faW47DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LF9UcmFpdHM+Jg0KICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2luKQ0K ICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0 cmVhbV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJl YW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lz dHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7DQoNCiAgICAgIGNvbnN0 IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0 bG9jKCkpOw0KICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOw0K ICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsNCiAgICAgIF9faW50 X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsNCg0KICAgICAgd2hpbGUgKF9fYyAhPSBfX2VvZiAm JiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQ0KICAgICAgICBfX2MgPSBfX3Ni LT5zbmV4dGMoKTsNCiAgICAgIGlmIChfX2MgPT0gX19lb2YpDQogICAgICAgIF9faW4uc2V0c3Rh dGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQoNCiAgICAgIHJldHVybiBfX2luOw0KICAgIH0NCg0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+ KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwNCiAgICAgICAgICAgICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQ0KICAgIHsNCiAgICAg IHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0K ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlw ZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5 cGUgX19zdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5 cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsNCiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOw0KICAgICAgX19z aXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOw0KDQogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlw ZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg ICB7DQogICAgICAgICAgX19zdHIuZXJhc2UoKTsNCiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9 IF9faW4ud2lkdGgoKTsNCiAgICAgICAgICBfX3NpemVfdHlwZSBfX247DQogICAgICAgICAgX19u ID0gX193ID4gMCA/IHN0YXRpY19jYXN0PF9fc2l6ZV90eXBlPihfX3cpIDogX19zdHIubWF4X3Np emUoKTsNCg0KICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNl dDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOw0KICAgICAgICAgIGNvbnN0IF9faW50X3R5 cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsNCiAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBf X3NiID0gX19pbi5yZGJ1ZigpOw0KICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dl dGMoKTsNCg0KICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8IF9fbg0KICAgICAgICAgICAg ICAgICAmJiBfX2MgIT0gX19lb2YgJiYgIV9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9f YykpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9fc3RyICs9IF9UcmFpdHM6OnRvX2No YXJfdHlwZShfX2MpOw0KICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOw0KICAgICAgICAgICAg ICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoX19j ID09IF9fZW9mKQ0KICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsN CiAgICAgICAgICBfX2luLndpZHRoKDApOw0KICAgICAgICB9DQoNCg0KICAgICAgaWYgKCFfX2V4 dHJhY3RlZCkNCiAgICAgICAgX19pbi5zZXRzdGF0ZSAoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KDQog ICAgICByZXR1cm4gX19pbjsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+Jg0KICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JiBfX2luLA0KICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlw ZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBf X2N0eXBlX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4gX19zdHJpbmdfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdf dHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOw0KDQogICAgICBfX3NpemVfdHlwZSBfX2V4dHJh Y3RlZCA9IDA7DQogICAgICBib29sIF9fdGVzdGRlbGltID0gZmFsc2U7DQogICAgICB0eXBlbmFt ZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCB0cnVlKTsNCiAgICAgIGlmIChf X2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBfX3N0ci5lcmFzZSgpOw0KICAgICAgICAgIF9f c2l6ZV90eXBlIF9fbiA9IF9fc3RyLm1heF9zaXplKCk7DQoNCiAgICAgICAgICBfX2ludF90eXBl IF9faWRlbGltID0gX1RyYWl0czo6dG9faW50X3R5cGUoX19kZWxpbSk7DQogICAgICAgICAgX19z dHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsNCiAgICAgICAgICBfX2ludF90eXBl IF9fYyA9IF9fc2ItPnNidW1wYygpOw0KICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2Yg PSBfVHJhaXRzOjplb2YoKTsNCiAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9UcmFpdHM6OmVxX2lu dF90eXBlKF9fYywgX19pZGVsaW0pOw0KDQogICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDw9 IF9fbg0KICAgICAgICAgICAgICAgICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2Vv ZikNCiAgICAgICAgICAgICAgICAgJiYgIV9fdGVzdGRlbGltKQ0KICAgICAgICAgICAgew0KICAg ICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAg ICAgICAgKytfX2V4dHJhY3RlZDsNCiAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7 DQogICAgICAgICAgICAgIF9fdGVzdGRlbGltID0gX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBf X2lkZWxpbSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90 eXBlKF9fYywgX19lb2YpKQ0KICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m Yml0KTsNCiAgICAgICAgfQ0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCAmJiAhX190ZXN0ZGVsaW0p DQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgcmV0dXJu IF9faW47DQogICAgfQ0KDQogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywg Y2xhc3MgX0FsbG9jPg0KICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYN CiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwNCiAgICAg ICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3N0cikNCiAgICB7 IHJldHVybiBnZXRsaW5lKF9faW4sIF9fc3RyLCBfX2luLndpZGVuKCdcbicpKTsgfQ0KDQoNCg0K DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXI+Ow0KICBleHRlcm4g dGVtcGxhdGUgaXN0cmVhbSYgd3MoaXN0cmVhbSYpOw0KICBleHRlcm4gdGVtcGxhdGUgaXN0cmVh bSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY2hhciYpOw0KICBleHRlcm4gdGVtcGxhdGUgaXN0cmVh bSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY2hhciopOw0KICBleHRlcm4gdGVtcGxhdGUgaXN0cmVh bSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hhciYpOw0KICBleHRlcm4gdGVtcGxh dGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgc2lnbmVkIGNoYXImKTsNCiAgZXh0ZXJu IHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHVuc2lnbmVkIGNoYXIqKTsN CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHNpZ25lZCBj aGFyKik7DQoNCg0KDQoNCg0KDQoNCn0NCiMgMjk4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pc3Ry ZWFtIiAyIDMNCiMgNzIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2l0ZXJhdG9yIiAyIDMNCiMgMSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJlYW1faXRlcmF0b3IuaCIgMSAzDQojIDM5ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmVhbV9pdGVyYXRvci5oIiAzDQoNCm5hbWVzcGFj ZSBzdGQNCnsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2hhclQgPSBjaGFy LA0KICAgICAgICAgICB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwgdHlw ZW5hbWUgX0Rpc3QgPSBwdHJkaWZmX3Q+DQogICAgY2xhc3MgaXN0cmVhbV9pdGVyYXRvcg0KICAg ICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRlcmF0b3JfdGFnLCBfVHAsIF9EaXN0LCBjb25z dCBfVHAqLCBjb25zdCBfVHAmPg0KICAgIHsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9D aGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQogICAg ICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7DQoN CiAgICBwcml2YXRlOg0KICAgICAgaXN0cmVhbV90eXBlKiBfTV9zdHJlYW07DQogICAgICBfVHAg X01fdmFsdWU7DQogICAgICBib29sIF9NX29rOw0KDQogICAgcHVibGljOg0KICAgICAgaXN0cmVh bV9pdGVyYXRvcigpIDogX01fc3RyZWFtKDApLCBfTV9vayhmYWxzZSkge30NCg0KICAgICAgaXN0 cmVhbV9pdGVyYXRvcihpc3RyZWFtX3R5cGUmIF9fcykgOiBfTV9zdHJlYW0oJl9fcykgeyBfTV9y ZWFkKCk7IH0NCg0KICAgICAgaXN0cmVhbV9pdGVyYXRvcihjb25zdCBpc3RyZWFtX2l0ZXJhdG9y JiBfX29iaikNCiAgICAgIDogX01fc3RyZWFtKF9fb2JqLl9NX3N0cmVhbSksIF9NX3ZhbHVlKF9f b2JqLl9NX3ZhbHVlKSwNCiAgICAgICAgX01fb2soX19vYmouX01fb2spDQogICAgICB7IH0NCg0K ICAgICAgY29uc3QgX1RwJg0KICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX01fdmFs dWU7IH0NCg0KICAgICAgY29uc3QgX1RwKg0KICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0 dXJuICYob3BlcmF0b3IqKCkpOyB9DQoNCiAgICAgIGlzdHJlYW1faXRlcmF0b3ImDQogICAgICBv cGVyYXRvcisrKCkNCiAgICAgIHsgX01fcmVhZCgpOyByZXR1cm4gKnRoaXM7IH0NCg0KICAgICAg aXN0cmVhbV9pdGVyYXRvcg0KICAgICAgb3BlcmF0b3IrKyhpbnQpDQogICAgICB7DQogICAgICAg IGlzdHJlYW1faXRlcmF0b3IgX190bXAgPSAqdGhpczsNCiAgICAgICAgX01fcmVhZCgpOw0KICAg ICAgICByZXR1cm4gX190bXA7DQogICAgICB9DQoNCiAgICAgIGJvb2wNCiAgICAgIF9NX2VxdWFs KGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImIF9feCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIChfTV9v ayA9PSBfX3guX01fb2spICYmICghX01fb2sgfHwgX01fc3RyZWFtID09IF9feC5fTV9zdHJlYW0p O30NCg0KICAgIHByaXZhdGU6DQogICAgICB2b2lkDQogICAgICBfTV9yZWFkKCkNCiAgICAgIHsN CiAgICAgICAgX01fb2sgPSAoX01fc3RyZWFtICYmICpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNl Ow0KICAgICAgICBpZiAoX01fb2spDQogICAgICAgICAgew0KICAgICAgICAgICAgKl9NX3N0cmVh bSA+PiBfTV92YWx1ZTsNCiAgICAgICAgICAgIF9NX29rID0gKl9NX3N0cmVhbSA/IHRydWUgOiBm YWxzZTsNCiAgICAgICAgICB9DQogICAgICB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Rpc3Q+ DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8 X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX194LA0KICAgICAgICAgICAgICAgY29uc3Qg aXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpDQogICAg eyByZXR1cm4gX194Ll9NX2VxdWFsKF9feSk7IH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9EaXN0Pg0KICAgIGlubGluZSBib29s DQogICAgb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJh aXRzLCBfRGlzdD4mIF9feCwNCiAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8 X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX195KQ0KICAgIHsgcmV0dXJuICFfX3guX01f ZXF1YWwoX195KTsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2hh clQgPSBjaGFyLA0KICAgICAgICAgICB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No YXJUPiA+DQogICAgY2xhc3Mgb3N0cmVhbV9pdGVyYXRvcg0KICAgICAgOiBwdWJsaWMgaXRlcmF0 b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4NCiAgICB7DQog ICAgcHVibGljOg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRl ZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOw0KDQogICAgcHJpdmF0ZToNCiAgICAgIG9zdHJlYW1f dHlwZSogX01fc3RyZWFtOw0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9zdHJpbmc7DQoNCiAgICBw dWJsaWM6DQogICAgICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zKSA6IF9NX3N0 cmVhbSgmX19zKSwgX01fc3RyaW5nKDApIHt9DQoNCiAgICAgIG9zdHJlYW1faXRlcmF0b3Iob3N0 cmVhbV90eXBlJiBfX3MsIGNvbnN0IF9DaGFyVCogX19jKQ0KICAgICAgOiBfTV9zdHJlYW0oJl9f cyksIF9NX3N0cmluZyhfX2MpIHsgfQ0KDQogICAgICBvc3RyZWFtX2l0ZXJhdG9yKGNvbnN0IG9z dHJlYW1faXRlcmF0b3ImIF9fb2JqKQ0KICAgICAgOiBfTV9zdHJlYW0oX19vYmouX01fc3RyZWFt KSwgX01fc3RyaW5nKF9fb2JqLl9NX3N0cmluZykgeyB9DQoNCiAgICAgIG9zdHJlYW1faXRlcmF0 b3ImDQogICAgICBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3ZhbHVlKQ0KICAgICAgew0KICAgICAg ICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7DQogICAgICAgIGlmIChfTV9zdHJpbmcpICpfTV9zdHJl YW0gPDwgX01fc3RyaW5nOw0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgICB9DQoNCiAgICAg IG9zdHJlYW1faXRlcmF0b3ImDQogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQ0K DQogICAgICBvc3RyZWFtX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0 aGlzOyB9DQoNCiAgICAgIG9zdHJlYW1faXRlcmF0b3ImDQogICAgICBvcGVyYXRvcisrKGludCkg eyByZXR1cm4gKnRoaXM7IH0NCiAgICB9Ow0KfQ0KIyA3MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv aXRlcmF0b3IiIDIgMw0KIyA2OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbnVtZXJpYyIgMiAzDQoN CiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbnVtZXJpYy5oIiAxIDMNCiMgNjQg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX251bWVyaWMuaCIgMw0KbmFtZXNwYWNlIHN0 ZA0Kew0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+ DQogICAgX1RwDQogICAgYWNjdW11bGF0ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ dGVyYXRvciBfX2xhc3QsIF9UcCBfX2luaXQpDQogICAgew0KDQogICAgIA0KDQogICAgICBmb3Ig KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgICAgIF9faW5pdCA9IF9faW5p dCArICpfX2ZpcnN0Ow0KICAgICAgcmV0dXJuIF9faW5pdDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0JpbmFyeU9w ZXJhdGlvbj4NCiAgICBfVHANCiAgICBhY2N1bXVsYXRlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX1RwIF9faW5pdCwNCiAgICAgICAgICAgICAgIF9CaW5h cnlPcGVyYXRpb24gX19iaW5hcnlfb3ApDQogICAgew0KDQogICAgIA0KDQogICAgICBmb3IgKCA7 IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgICAgIF9faW5pdCA9IF9fYmluYXJ5 X29wKF9faW5pdCwgKl9fZmlyc3QpOw0KICAgICAgcmV0dXJuIF9faW5pdDsNCiAgICB9DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IxLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRv cjIsIHR5cGVuYW1lIF9UcD4NCiAgICBfVHANCiAgICBpbm5lcl9wcm9kdWN0KF9JbnB1dEl0ZXJh dG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAg ICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9UcCBfX2luaXQpDQogICAgew0KDQogICAgIA0K ICAgICANCg0KICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCAr K19fZmlyc3QyKQ0KICAgICAgICBfX2luaXQgPSBfX2luaXQgKyAoKl9fZmlyc3QxICogKl9fZmly c3QyKTsNCiAgICAgIHJldHVybiBfX2luaXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLCB0eXBlbmFtZSBfVHAs DQogICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uMSwgdHlwZW5hbWUgX0JpbmFy eU9wZXJhdGlvbjI+DQogICAgX1RwDQogICAgaW5uZXJfcHJvZHVjdChfSW5wdXRJdGVyYXRvcjEg X19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfVHAgX19pbml0LA0KICAgICAgICAgICAgICAgICAgX0Jp bmFyeU9wZXJhdGlvbjEgX19iaW5hcnlfb3AxLA0KICAgICAgICAgICAgICAgICAgX0JpbmFyeU9w ZXJhdGlvbjIgX19iaW5hcnlfb3AyKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCiAgICAgIGZv ciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikNCiAgICAg ICAgX19pbml0ID0gX19iaW5hcnlfb3AxKF9faW5pdCwgX19iaW5hcnlfb3AyKCpfX2ZpcnN0MSwg Kl9fZmlyc3QyKSk7DQogICAgICByZXR1cm4gX19pbml0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPg0KICAgIF9P dXRwdXRJdGVyYXRvcg0KICAgIHBhcnRpYWxfc3VtKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3IgX19y ZXN1bHQpDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu cHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQoNCg0KICAgICANCiAgICAgDQoN CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0Ow0KICAgICAgKl9f cmVzdWx0ID0gKl9fZmlyc3Q7DQogICAgICBfVmFsdWVUeXBlIF9fdmFsdWUgPSAqX19maXJzdDsN CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSB7DQogICAgICAgIF9fdmFsdWUgPSBf X3ZhbHVlICsgKl9fZmlyc3Q7DQogICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsNCiAgICAg IH0NCiAgICAgIHJldHVybiArK19fcmVzdWx0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfQmlu YXJ5T3BlcmF0aW9uPg0KICAgIF9PdXRwdXRJdGVyYXRvcg0KICAgIHBhcnRpYWxfc3VtKF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAg ICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3Ap DQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl cmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQoNCg0KICAgICANCiAgICAgDQoNCiAgICAg IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0Ow0KICAgICAgKl9fcmVzdWx0 ID0gKl9fZmlyc3Q7DQogICAgICBfVmFsdWVUeXBlIF9fdmFsdWUgPSAqX19maXJzdDsNCiAgICAg IHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSB7DQogICAgICAgIF9fdmFsdWUgPSBfX2JpbmFy eV9vcChfX3ZhbHVlLCAqX19maXJzdCk7DQogICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsN CiAgICAgIH0NCiAgICAgIHJldHVybiArK19fcmVzdWx0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPg0KICAgIF9P dXRwdXRJdGVyYXRvcg0KICAgIGFkamFjZW50X2RpZmZlcmVuY2UoX0lucHV0SXRlcmF0b3IgX19m aXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX091 dHB1dEl0ZXJhdG9yIF9fcmVzdWx0KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOw0KDQoN CiAgICAgDQogICAgIA0KDQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jl c3VsdDsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Ow0KICAgICAgX1ZhbHVlVHlwZSBfX3Zh bHVlID0gKl9fZmlyc3Q7DQogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAg ICAgICBfVmFsdWVUeXBlIF9fdG1wID0gKl9fZmlyc3Q7DQogICAgICAgICorK19fcmVzdWx0ID0g X190bXAgLSBfX3ZhbHVlOw0KICAgICAgICBfX3ZhbHVlID0gX190bXA7DQogICAgICB9DQogICAg ICByZXR1cm4gKytfX3Jlc3VsdDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0JpbmFyeU9wZXJh dGlvbj4NCiAgICBfT3V0cHV0SXRlcmF0b3INCiAgICBhZGphY2VudF9kaWZmZXJlbmNlKF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAg ICAgICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0JpbmFyeU9wZXJhdGlvbiBfX2Jp bmFyeV9vcCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsNCg0KDQogICAgIA0KICAgICAN Cg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7DQogICAgICAq X19yZXN1bHQgPSAqX19maXJzdDsNCiAgICAgIF9WYWx1ZVR5cGUgX192YWx1ZSA9ICpfX2ZpcnN0 Ow0KICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpIHsNCiAgICAgICAgX1ZhbHVlVHlw ZSBfX3RtcCA9ICpfX2ZpcnN0Ow0KICAgICAgICAqKytfX3Jlc3VsdCA9IF9fYmluYXJ5X29wKF9f dG1wLCBfX3ZhbHVlKTsNCiAgICAgICAgX192YWx1ZSA9IF9fdG1wOw0KICAgICAgfQ0KICAgICAg cmV0dXJuICsrX19yZXN1bHQ7DQogICAgfQ0KDQp9DQojIDcwICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9udW1lcmljIiAyIDMNCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL3ZhbGFycmF5IiAyIDMN CiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZnVuY3Rpb25hbCIgMSAzDQojIDUzICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9mdW5jdGlvbmFsIiAzDQojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi92 YWxhcnJheSIgMiAzDQoNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICAgIHRlbXBsYXRlPGNsYXNzIF9D bG9zLCB0eXBlbmFtZSBfVHA+IGNsYXNzIF9FeHByOw0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwMSwgdHlwZW5hbWUgX1RwMj4gY2xhc3MgX1ZhbEFycmF5Ow0KDQogICAgdGVtcGxhdGU8dGVt cGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLA0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcywgY2xhc3M+ IGNsYXNzIF9NZXRhLCBjbGFzcyBfRG9tPiBzdHJ1Y3QgX1VuQ2xvczsNCg0KICAgIHRlbXBsYXRl PHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBfT3BlciwNCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MsIGNs YXNzPiBjbGFzcyBfTWV0YTEsDQogICAgICAgIHRlbXBsYXRlPGNsYXNzLCBjbGFzcz4gY2xhc3Mg X01ldGEyLA0KICAgICAgICBjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGNsYXNzIF9CaW5DbG9z Ow0KDQogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3MsIGNsYXNzPiBjbGFzcyBfTWV0YSwgY2xh c3MgX0RvbT4gY2xhc3MgX1NDbG9zOw0KDQogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3MsIGNs YXNzPiBjbGFzcyBfTWV0YSwgY2xhc3MgX0RvbT4gY2xhc3MgX0dDbG9zOw0KDQogICAgdGVtcGxh dGU8dGVtcGxhdGU8Y2xhc3MsIGNsYXNzPiBjbGFzcyBfTWV0YSwgY2xhc3MgX0RvbT4gY2xhc3Mg X0lDbG9zOw0KDQogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3MsIGNsYXNzPiBjbGFzcyBfTWV0 YSwgY2xhc3MgX0RvbT4gY2xhc3MgX1ZhbEZ1bkNsb3M7DQoNCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0 ZTxjbGFzcywgY2xhc3M+IGNsYXNzIF9NZXRhLCBjbGFzcyBfRG9tPiBjbGFzcyBfUmVmRnVuQ2xv czsNCg0KICAgIHRlbXBsYXRlPGNsYXNzIF9UcD4gc3RydWN0IF9VbmFyeV9wbHVzOw0KICAgIHRl bXBsYXRlPGNsYXNzIF9UcD4gc3RydWN0IF9CaXR3aXNlX2FuZDsNCiAgICB0ZW1wbGF0ZTxjbGFz cyBfVHA+IHN0cnVjdCBfQml0d2lzZV9vcjsNCiAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IHN0cnVj dCBfQml0d2lzZV94b3I7DQogICAgdGVtcGxhdGU8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0JpdHdpc2Vf bm90Ow0KICAgIHRlbXBsYXRlPGNsYXNzIF9UcD4gc3RydWN0IF9TaGlmdF9sZWZ0Ow0KICAgIHRl bXBsYXRlPGNsYXNzIF9UcD4gc3RydWN0IF9TaGlmdF9yaWdodDsNCg0KICAgIHRlbXBsYXRlPGNs YXNzIF9UcD4gY2xhc3MgdmFsYXJyYXk7DQogICAgY2xhc3Mgc2xpY2U7DQogICAgdGVtcGxhdGU8 Y2xhc3MgX1RwPiBjbGFzcyBzbGljZV9hcnJheTsNCiAgICBjbGFzcyBnc2xpY2U7DQogICAgdGVt cGxhdGU8Y2xhc3MgX1RwPiBjbGFzcyBnc2xpY2VfYXJyYXk7DQogICAgdGVtcGxhdGU8Y2xhc3Mg X1RwPiBjbGFzcyBtYXNrX2FycmF5Ow0KICAgIHRlbXBsYXRlPGNsYXNzIF9UcD4gY2xhc3MgaW5k aXJlY3RfYXJyYXk7DQoNCn0NCg0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3ZhbGFy cmF5X2FycmF5LmgiIDEgMw0KIyA0MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92YWxhcnJh eV9hcnJheS5oIiAzDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NwcF90eXBl X3RyYWl0cy5oIiAxIDMNCiMgNDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY3BwX3R5cGVf dHJhaXRzLmgiIDMNCiMgNjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY3BwX3R5cGVfdHJh aXRzLmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAg IHN0cnVjdCBfX2lzX3ZvaWQNCiAgICB7DQogICAgICBlbnVtDQogICAgICB7DQogICAgICAgIF9N X3R5cGUgPSAwDQogICAgICB9Ow0KICAgIH07DQoNCiAgdGVtcGxhdGU8Pg0KICAgIHN0cnVjdCBf X2lzX3ZvaWQ8dm9pZD4NCiAgICB7DQogICAgICBlbnVtDQogICAgICB7DQogICAgICAgIF9NX3R5 cGUgPSAxDQogICAgICB9Ow0KICAgIH07DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw Pg0KICAgIHN0cnVjdCBfX2lzX2ludGVnZXINCiAgICB7DQogICAgICBlbnVtDQogICAgICB7DQog ICAgICAgIF9NX3R5cGUgPSAwDQogICAgICB9Ow0KICAgIH07DQoNCg0KDQoNCiAgdGVtcGxhdGU8 Pg0KICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8Ym9vbD4NCiAgICB7DQogICAgICBlbnVtDQogICAg ICB7DQogICAgICAgIF9NX3R5cGUgPSAxDQogICAgICB9Ow0KICAgIH07DQoNCiAgdGVtcGxhdGU8 Pg0KICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8Y2hhcj4NCiAgICB7DQogICAgICBlbnVtDQogICAg ICB7DQogICAgICAgIF9NX3R5cGUgPSAxDQogICAgICB9Ow0KICAgIH07DQoNCiAgdGVtcGxhdGU8 Pg0KICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8c2lnbmVkIGNoYXI+DQogICAgew0KICAgICAgZW51 bQ0KICAgICAgew0KICAgICAgICBfTV90eXBlID0gMQ0KICAgICAgfTsNCiAgICB9Ow0KDQogIHRl bXBsYXRlPD4NCiAgc3RydWN0IF9faXNfaW50ZWdlcjx1bnNpZ25lZCBjaGFyPg0KICB7DQogICAg ZW51bQ0KICAgIHsNCiAgICAgIF9NX3R5cGUgPSAxDQogICAgfTsNCiAgfTsNCiMgMTQ5ICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL2NwcF90eXBlX3RyYWl0cy5oIiAzDQogIHRlbXBsYXRlPD4N CiAgc3RydWN0IF9faXNfaW50ZWdlcjxzaG9ydD4NCiAgew0KICAgIGVudW0NCiAgICB7DQogICAg ICBfTV90eXBlID0gMQ0KICAgIH07DQogIH07DQoNCiAgdGVtcGxhdGU8Pg0KICBzdHJ1Y3QgX19p c19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0Pg0KICB7DQogICAgZW51bQ0KICAgIHsNCiAgICAgIF9N X3R5cGUgPSAxDQogICAgfTsNCiAgfTsNCg0KICB0ZW1wbGF0ZTw+DQogIHN0cnVjdCBfX2lzX2lu dGVnZXI8aW50Pg0KICB7DQogICAgZW51bQ0KICAgIHsNCiAgICAgIF9NX3R5cGUgPSAxDQogICAg fTsNCiAgfTsNCg0KICB0ZW1wbGF0ZTw+DQogIHN0cnVjdCBfX2lzX2ludGVnZXI8dW5zaWduZWQg aW50Pg0KICB7DQogICAgZW51bQ0KICAgIHsNCiAgICAgIF9NX3R5cGUgPSAxDQogICAgfTsNCiAg fTsNCg0KICB0ZW1wbGF0ZTw+DQogIHN0cnVjdCBfX2lzX2ludGVnZXI8bG9uZz4NCiAgew0KICAg IGVudW0NCiAgICB7DQogICAgICBfTV90eXBlID0gMQ0KICAgIH07DQogIH07DQoNCiAgdGVtcGxh dGU8Pg0KICBzdHJ1Y3QgX19pc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmc+DQogIHsNCiAgICBlbnVt DQogICAgew0KICAgICAgX01fdHlwZSA9IDENCiAgICB9Ow0KICB9Ow0KDQogIHRlbXBsYXRlPD4N CiAgc3RydWN0IF9faXNfaW50ZWdlcjxsb25nIGxvbmc+DQogIHsNCiAgICBlbnVtDQogICAgew0K ICAgICAgX01fdHlwZSA9IDENCiAgICB9Ow0KICB9Ow0KDQogIHRlbXBsYXRlPD4NCiAgc3RydWN0 IF9faXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+DQogIHsNCiAgICBlbnVtDQogICAgew0K ICAgICAgX01fdHlwZSA9IDENCiAgICB9Ow0KICB9Ow0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4NCiAgc3RydWN0IF9faXNfZmxvYXRpbmcNCiAgew0KICAgIGVudW0NCiAgICB7DQog ICAgICBfTV90eXBlID0gMA0KICAgIH07DQogIH07DQoNCg0KICB0ZW1wbGF0ZTw+DQogIHN0cnVj dCBfX2lzX2Zsb2F0aW5nPGZsb2F0Pg0KICB7DQogICAgZW51bQ0KICAgIHsNCiAgICAgIF9NX3R5 cGUgPSAxDQogICAgfTsNCiAgfTsNCg0KICB0ZW1wbGF0ZTw+DQogIHN0cnVjdCBfX2lzX2Zsb2F0 aW5nPGRvdWJsZT4NCiAgew0KICAgIGVudW0NCiAgICB7DQogICAgICBfTV90eXBlID0gMQ0KICAg IH07DQogIH07DQoNCiAgdGVtcGxhdGU8Pg0KICBzdHJ1Y3QgX19pc19mbG9hdGluZzxsb25nIGRv dWJsZT4NCiAgew0KICAgIGVudW0NCiAgICB7DQogICAgICBfTV90eXBlID0gMQ0KICAgIH07DQog IH07DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICBzdHJ1Y3QgX19pc19hcml0 aG1ldGljDQogIHsNCiAgICBlbnVtDQogICAgew0KICAgICAgX01fdHlwZSA9IF9faXNfaW50ZWdl cjxfVHA+OjpfTV90eXBlIHx8IF9faXNfZmxvYXRpbmc8X1RwPjo6X01fdHlwZQ0KICAgIH07DQog IH07DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICBzdHJ1Y3QgX19pc19mdW5k YW1lbnRhbA0KICB7DQogICAgZW51bQ0KICAgIHsNCiAgICAgIF9NX3R5cGUgPSBfX2lzX3ZvaWQ8 X1RwPjo6X01fdHlwZSB8fCBfX2lzX2FyaXRobWV0aWM8X1RwPjo6X01fdHlwZQ0KICAgIH07DQog IH07DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICBzdHJ1Y3QgX19pc19wb2QN CiAgew0KICAgIGVudW0NCiAgICB7DQogICAgICBfTV90eXBlID0gX19pc19mdW5kYW1lbnRhbDxf VHA+OjpfTV90eXBlDQogICAgfTsNCiAgfTsNCg0KfQ0KIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy92YWxhcnJheV9hcnJheS5oIiAyIDMNCg0KDQoNCg0KbmFtZXNwYWNlIHN0ZA0Kew0K DQoNCg0KDQoNCiAgaW5saW5lIHZvaWQqDQogIF9fdmFsYXJyYXlfZ2V0X21lbW9yeShzaXplX3Qg X19uKQ0KICB7IHJldHVybiBvcGVyYXRvciBuZXcoX19uKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4NCiAgICAgaW5saW5lIF9UcCpfX3Jlc3RyaWN0X18NCiAgICAgX192YWxhcnJheV9n ZXRfc3RvcmFnZShzaXplX3QgX19uKQ0KICAgICB7DQogICAgICAgcmV0dXJuIHN0YXRpY19jYXN0 PF9UcCpfX3Jlc3RyaWN0X18+DQogICAgICAgICAoX192YWxhcnJheV9nZXRfbWVtb3J5KF9fbiAq IHNpemVvZihfVHApKSk7DQogICAgIH0NCg0KDQogIGlubGluZSB2b2lkDQogIF9fdmFsYXJyYXlf cmVsZWFzZV9tZW1vcnkodm9pZCogX19wKQ0KICB7IG9wZXJhdG9yIGRlbGV0ZShfX3ApOyB9DQoN Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbD4NCiAgICAgc3RydWN0IF9BcnJheV9k ZWZhdWx0X2N0b3INCiAgICAgew0KDQoNCiAgICAgICBpbmxpbmUgc3RhdGljIHZvaWQNCiAgICAg ICBfU19kb19pdChfVHAqIF9fcmVzdHJpY3RfXyBfX2IsIF9UcCogX19yZXN0cmljdF9fIF9fZSkN CiAgICAgICB7IHdoaWxlIChfX2IgIT0gX19lKSBuZXcoX19iKyspIF9UcCgpOyB9DQogICAgIH07 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBzdHJ1Y3QgX0FycmF5X2RlZmF1bHRf Y3RvcjxfVHAsIHRydWU+DQogICAgIHsNCg0KICAgICAgIGlubGluZSBzdGF0aWMgdm9pZA0KICAg ICAgIF9TX2RvX2l0KF9UcCogX19yZXN0cmljdF9fIF9fYiwgX1RwKiBfX3Jlc3RyaWN0X18gX19l KQ0KICAgICAgIHsgbWVtc2V0KF9fYiwgMCwgKF9fZSAtIF9fYikqc2l6ZW9mKF9UcCkpOyB9DQog ICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgdm9pZA0KICAg ICBfX3ZhbGFycmF5X2RlZmF1bHRfY29uc3RydWN0KF9UcCogX19yZXN0cmljdF9fIF9fYiwgX1Rw KiBfX3Jlc3RyaWN0X18gX19lKQ0KICAgICB7DQogICAgICAgX0FycmF5X2RlZmF1bHRfY3Rvcjxf VHAsIF9faXNfZnVuZGFtZW50YWw8X1RwPjo6X01fdHlwZT46Og0KICAgICAgICAgX1NfZG9faXQo X19iLCBfX2UpOw0KICAgICB9DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBib29s Pg0KICAgICBzdHJ1Y3QgX0FycmF5X2luaXRfY3Rvcg0KICAgICB7DQoNCg0KICAgICAgIGlubGlu ZSBzdGF0aWMgdm9pZA0KICAgICAgIF9TX2RvX2l0KF9UcCogX19yZXN0cmljdF9fIF9fYiwgX1Rw KiBfX3Jlc3RyaWN0X18gX19lLCBjb25zdCBfVHAgX190KQ0KICAgICAgIHsgd2hpbGUgKF9fYiAh PSBfX2UpIG5ldyhfX2IrKykgX1RwKF9fdCk7IH0NCiAgICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+DQogICAgIHN0cnVjdCBfQXJyYXlfaW5pdF9jdG9yPF9UcCwgdHJ1ZT4NCiAgICAg ew0KICAgICAgIGlubGluZSBzdGF0aWMgdm9pZA0KICAgICAgIF9TX2RvX2l0KF9UcCogX19yZXN0 cmljdF9fIF9fYiwgX1RwKiBfX3Jlc3RyaWN0X18gX19lLCBjb25zdCBfVHAgX190KQ0KICAgICAg IHsgd2hpbGUgKF9fYiAhPSBfX2UpICpfX2IrKyA9IF9fdDsgfQ0KICAgICB9Ow0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQNCiAgICAgX192YWxhcnJheV9maWxs X2NvbnN0cnVjdChfVHAqIF9fcmVzdHJpY3RfXyBfX2IsIF9UcCogX19yZXN0cmljdF9fIF9fZSwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAgX190KQ0KICAgICB7DQog ICAgICAgX0FycmF5X2luaXRfY3RvcjxfVHAsIF9faXNfZnVuZGFtZW50YWw8X1RwPjo6X01fdHlw ZT46Og0KICAgICAgICAgX1NfZG9faXQoX19iLCBfX2UsIF9fdCk7DQogICAgIH0NCg0KDQoNCg0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbD4NCiAgICAgc3RydWN0IF9BcnJheV9jb3B5 X2N0b3INCiAgICAgew0KDQoNCiAgICAgICBpbmxpbmUgc3RhdGljIHZvaWQNCiAgICAgICBfU19k b19pdChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2IsIGNvbnN0IF9UcCogX19yZXN0cmljdF9f IF9fZSwNCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdHJpY3RfXyBfX28pDQogICAgICAgeyB3 aGlsZSAoX19iICE9IF9fZSkgbmV3KF9fbysrKSBfVHAoKl9fYisrKTsgfQ0KICAgICB9Ow0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgc3RydWN0IF9BcnJheV9jb3B5X2N0b3I8X1Rw LCB0cnVlPg0KICAgICB7DQogICAgICAgaW5saW5lIHN0YXRpYyB2b2lkDQogICAgICAgX1NfZG9f aXQoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19iLCBjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBf X2UsDQogICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3RyaWN0X18gX19vKQ0KICAgICAgIHsgbWVt Y3B5KF9fbywgX19iLCAoX19lIC0gX19iKSpzaXplb2YoX1RwKSk7IH0NCiAgICAgfTsNCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgIGlubGluZSB2b2lkDQogICAgIF9fdmFsYXJyYXlf Y29weV9jb25zdHJ1Y3QoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19iLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fZSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdHJpY3RfXyBfX28pDQogICAgIHsNCiAg ICAgICBfQXJyYXlfY29weV9jdG9yPF9UcCwgX19pc19mdW5kYW1lbnRhbDxfVHA+OjpfTV90eXBl Pjo6DQogICAgICAgICBfU19kb19pdChfX2IsIF9fZSwgX19vKTsNCiAgICAgfQ0KDQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgdm9pZA0KICAgICBfX3ZhbGFycmF5X2Nv cHlfY29uc3RydWN0IChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2EsIHNpemVfdCBfX24sDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3MsIF9UcCogX19yZXN0cmlj dF9fIF9fbykNCiAgICAgew0KICAgICAgIGlmIChfX2lzX2Z1bmRhbWVudGFsPF9UcD46Ol9NX3R5 cGUpDQogICAgICAgICB3aGlsZSAoX19uLS0pIHsgKl9fbysrID0gKl9fYTsgX19hICs9IF9fczsg fQ0KICAgICAgIGVsc2UNCiAgICAgICAgIHdoaWxlIChfX24tLSkgeyBuZXcoX19vKyspIF9UcCgq X19hKTsgX19hICs9IF9fczsgfQ0KICAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ DQogICAgIGlubGluZSB2b2lkDQogICAgIF9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QgKGNvbnN0 IF9UcCogX19yZXN0cmljdF9fIF9fYSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3Qgc2l6ZV90KiBfX3Jlc3RyaWN0X18gX19pLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfVHAqIF9fcmVzdHJpY3RfXyBfX28sIHNpemVfdCBfX24pDQogICAgIHsNCiAgICAg ICBpZiAoX19pc19mdW5kYW1lbnRhbDxfVHA+OjpfTV90eXBlKQ0KICAgICAgICAgd2hpbGUgKF9f bi0tKSAqX19vKysgPSBfX2FbKl9faSsrXTsNCiAgICAgICBlbHNlDQogICAgICAgICB3aGlsZSAo X19uLS0pIG5ldyAoX19vKyspIF9UcChfX2FbKl9faSsrXSk7DQogICAgIH0NCg0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQNCiAgICAgX192YWxhcnJheV9kZXN0 cm95X2VsZW1lbnRzKF9UcCogX19yZXN0cmljdF9fIF9fYiwgX1RwKiBfX3Jlc3RyaWN0X18gX19l KQ0KICAgICB7DQogICAgICAgaWYgKCFfX2lzX2Z1bmRhbWVudGFsPF9UcD46Ol9NX3R5cGUpDQog ICAgICAgICB3aGlsZSAoX19iICE9IF9fZSkgeyBfX2ItPn5fVHAoKTsgKytfX2I7IH0NCiAgICAg fQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgdm9pZA0KICAgICBf X3ZhbGFycmF5X2ZpbGwgKF9UcCogX19yZXN0cmljdF9fIF9fYSwgc2l6ZV90IF9fbiwgY29uc3Qg X1RwJiBfX3QpDQogICAgIHsgd2hpbGUgKF9fbi0tKSAqX19hKysgPSBfX3Q7IH0NCg0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQNCiAgICAgX192YWxhcnJheV9m aWxsIChfVHAqIF9fcmVzdHJpY3RfXyBfX2EsIHNpemVfdCBfX24sDQogICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IF9fcywgY29uc3QgX1RwJiBfX3QpDQogICAgIHsgZm9yIChzaXplX3QgX19p PTA7IF9faTxfX247ICsrX19pLCBfX2ErPV9fcykgKl9fYSA9IF9fdDsgfQ0KDQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgdm9pZA0KICAgICBfX3ZhbGFycmF5X2ZpbGwo X1RwKiBfX3Jlc3RyaWN0X18gX19hLCBjb25zdCBzaXplX3QqIF9fcmVzdHJpY3RfXyBfX2ksDQog ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBjb25zdCBfVHAmIF9fdCkNCiAgICAgeyBm b3IgKHNpemVfdCBfX2o9MDsgX19qPF9fbjsgKytfX2osICsrX19pKSBfX2FbKl9faV0gPSBfX3Q7 IH0NCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBib29sPg0KICAgICBzdHJ1Y3QgX0Fy cmF5X2NvcGllcg0KICAgICB7DQogICAgICAgaW5saW5lIHN0YXRpYyB2b2lkDQogICAgICAgX1Nf ZG9faXQoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBzaXplX3QgX19uLCBfVHAqIF9fcmVz dHJpY3RfXyBfX2IpDQogICAgICAgeyB3aGlsZSAoX19uLS0pICpfX2IrKyA9ICpfX2ErKzsgfQ0K ICAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgc3RydWN0IF9BcnJheV9j b3BpZXI8X1RwLCB0cnVlPg0KICAgICB7DQogICAgICAgaW5saW5lIHN0YXRpYyB2b2lkDQogICAg ICAgX1NfZG9faXQoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBzaXplX3QgX19uLCBfVHAq IF9fcmVzdHJpY3RfXyBfX2IpDQogICAgICAgeyBtZW1jcHkgKF9fYiwgX19hLCBfX24gKiBzaXpl b2YgKF9UcCkpOyB9DQogICAgIH07DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAg IGlubGluZSB2b2lkDQogICAgIF9fdmFsYXJyYXlfY29weShjb25zdCBfVHAqIF9fcmVzdHJpY3Rf XyBfX2EsIHNpemVfdCBfX24sDQogICAgICAgICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3RyaWN0 X18gX19iKQ0KICAgICB7DQogICAgICAgX0FycmF5X2NvcGllcjxfVHAsIF9faXNfZnVuZGFtZW50 YWw8X1RwPjo6X01fdHlwZT46Og0KICAgICAgICAgX1NfZG9faXQoX19hLCBfX24sIF9fYik7DQog ICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQNCiAg ICAgX192YWxhcnJheV9jb3B5KGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fYSwgc2l6ZV90IF9f biwgc2l6ZV90IF9fcywNCiAgICAgICAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdHJpY3RfXyBf X2IpDQogICAgIHsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK19fYiwgX19h ICs9IF9fcykgKl9fYiA9ICpfX2E7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAg ICAgaW5saW5lIHZvaWQNCiAgICAgX192YWxhcnJheV9jb3B5KGNvbnN0IF9UcCogX19yZXN0cmlj dF9fIF9fYSwgX1RwKiBfX3Jlc3RyaWN0X18gX19iLA0KICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBfX24sIHNpemVfdCBfX3MpDQogICAgIHsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247 ICsrX19pLCArK19fYSwgX19iKz1fX3MpICpfX2IgPSAqX19hOyB9DQoNCg0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQNCiAgICAgX192YWxhcnJheV9jb3B5KGNv bnN0IF9UcCogX19yZXN0cmljdF9fIF9fc3JjLCBzaXplX3QgX19uLCBzaXplX3QgX19zMSwNCiAg ICAgICAgICAgICAgICAgICAgIF9UcCogX19yZXN0cmljdF9fIF9fZHN0LCBzaXplX3QgX19zMikN CiAgICAgew0KICAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kpDQog ICAgICAgICBfX2RzdFtfX2kgKiBfX3MyXSA9IF9fc3JjIFsgX19pICogX19zMV07DQogICAgIH0N Cg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgdm9pZA0KICAgICBf X3ZhbGFycmF5X2NvcHkgKGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fYSwNCiAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBzaXplX3QqIF9fcmVzdHJpY3RfXyBfX2ksDQogICAgICAgICAgICAg ICAgICAgICAgX1RwKiBfX3Jlc3RyaWN0X18gX19iLCBzaXplX3QgX19uKQ0KICAgICB7IGZvciAo c2l6ZV90IF9faj0wOyBfX2o8X19uOyArK19faiwgKytfX2IsICsrX19pKSAqX19iID0gX19hWypf X2ldOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgIGlubGluZSB2b2lkDQog ICAgIF9fdmFsYXJyYXlfY29weSAoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBzaXplX3Qg X19uLA0KICAgICAgICAgICAgICAgICAgICAgIF9UcCogX19yZXN0cmljdF9fIF9fYiwgY29uc3Qg c2l6ZV90KiBfX3Jlc3RyaWN0X18gX19pKQ0KICAgICB7IGZvciAoc2l6ZV90IF9faj0wOyBfX2o8 X19uOyArK19faiwgKytfX2EsICsrX19pKSBfX2JbKl9faV0gPSAqX19hOyB9DQoNCg0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQNCiAgICAgX192YWxhcnJheV9j b3B5KGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fc3JjLCBzaXplX3QgX19uLA0KICAgICAgICAg ICAgICAgICAgICAgY29uc3Qgc2l6ZV90KiBfX3Jlc3RyaWN0X18gX19pLA0KICAgICAgICAgICAg ICAgICAgICAgX1RwKiBfX3Jlc3RyaWN0X18gX19kc3QsIGNvbnN0IHNpemVfdCogX19yZXN0cmlj dF9fIF9faikNCiAgICAgew0KICAgICAgIGZvciAoc2l6ZV90IF9fayA9IDA7IF9fayA8IF9fbjsg KytfX2spDQogICAgICAgICBfX2RzdFsqX19qKytdID0gX19zcmNbKl9faSsrXTsNCiAgICAgfQ0K IyAzMDcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvdmFsYXJyYXlfYXJyYXkuaCIgMw0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgIGlubGluZSBfVHANCiAgICAgX192YWxhcnJheV9z dW0oY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19mLCBjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBf X2wpDQogICAgIHsNCiAgICAgICBfVHAgX19yID0gX1RwKCk7DQogICAgICAgd2hpbGUgKF9fZiAh PSBfX2wpIF9fciArPSAqX19mKys7DQogICAgICAgcmV0dXJuIF9fcjsNCiAgICAgfQ0KDQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgX1RwDQogICAgIF9fdmFsYXJyYXlf cHJvZHVjdChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2YsDQogICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2wpDQogICAgIHsNCiAgICAgICBfVHAgX19y ID0gX1RwKDEpOw0KICAgICAgIHdoaWxlIChfX2YgIT0gX19sKSBfX3IgPSBfX3IgKiAqX19mKys7 DQogICAgICAgcmV0dXJuIF9fcjsNCiAgICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rh Pg0KICAgICBpbmxpbmUgdHlwZW5hbWUgX1RhOjp2YWx1ZV90eXBlDQogICAgIF9fdmFsYXJyYXlf bWluKGNvbnN0IF9UYSYgX19hKQ0KICAgICB7DQogICAgICAgc2l6ZV90IF9fcyA9IF9fYS5zaXpl KCk7DQogICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVGE6OnZhbHVlX3R5cGUgX1ZhbHVlX3R5cGU7 DQogICAgICAgX1ZhbHVlX3R5cGUgX19yID0gX19zID09IDAgPyBfVmFsdWVfdHlwZSgpIDogX19h WzBdOw0KICAgICAgIGZvciAoc2l6ZV90IF9faSA9IDE7IF9faSA8IF9fczsgKytfX2kpDQogICAg ICAgICB7DQogICAgICAgICAgIF9WYWx1ZV90eXBlIF9fdCA9IF9fYVtfX2ldOw0KICAgICAgICAg ICBpZiAoX190IDwgX19yKQ0KICAgICAgICAgICAgIF9fciA9IF9fdDsNCiAgICAgICAgIH0NCiAg ICAgICByZXR1cm4gX19yOw0KICAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RhPg0KICAg ICBpbmxpbmUgdHlwZW5hbWUgX1RhOjp2YWx1ZV90eXBlDQogICAgIF9fdmFsYXJyYXlfbWF4KGNv bnN0IF9UYSYgX19hKQ0KICAgICB7DQogICAgICAgc2l6ZV90IF9fcyA9IF9fYS5zaXplKCk7DQog ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVGE6OnZhbHVlX3R5cGUgX1ZhbHVlX3R5cGU7DQogICAg ICAgX1ZhbHVlX3R5cGUgX19yID0gX19zID09IDAgPyBfVmFsdWVfdHlwZSgpIDogX19hWzBdOw0K ICAgICAgIGZvciAoc2l6ZV90IF9faSA9IDE7IF9faSA8IF9fczsgKytfX2kpDQogICAgICAgICB7 DQogICAgICAgICAgIF9WYWx1ZV90eXBlIF9fdCA9IF9fYVtfX2ldOw0KICAgICAgICAgICBpZiAo X190ID4gX19yKQ0KICAgICAgICAgICAgIF9fciA9IF9fdDsNCiAgICAgICAgIH0NCiAgICAgICBy ZXR1cm4gX19yOw0KICAgICB9DQoNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw Pg0KICAgICBzdHJ1Y3QgX0FycmF5DQogICAgIHsNCiAgICAgICBleHBsaWNpdCBfQXJyYXkgKHNp emVfdCk7DQogICAgICAgZXhwbGljaXQgX0FycmF5IChfVHAqIGNvbnN0IF9fcmVzdHJpY3RfXyk7 DQogICAgICAgZXhwbGljaXQgX0FycmF5IChjb25zdCB2YWxhcnJheTxfVHA+Jik7DQogICAgICAg X0FycmF5IChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXywgc2l6ZV90KTsNCg0KICAgICAgIF9UcCog YmVnaW4gKCkgY29uc3Q7DQoNCiAgICAgICBfVHAqIGNvbnN0IF9fcmVzdHJpY3RfXyBfTV9kYXRh Ow0KICAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQN CiAgICAgX192YWxhcnJheV9maWxsIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIGNvbnN0 IF9UcCYgX190KQ0KICAgICB7IF9fdmFsYXJyYXlfZmlsbCAoX19hLl9NX2RhdGEsIF9fbiwgX190 KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQNCiAgICAg X192YWxhcnJheV9maWxsIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3Ms IGNvbnN0IF9UcCYgX190KQ0KICAgICB7IF9fdmFsYXJyYXlfZmlsbCAoX19hLl9NX2RhdGEsIF9f biwgX19zLCBfX3QpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUg dm9pZA0KICAgICBfX3ZhbGFycmF5X2ZpbGwgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVf dD4gX19pLA0KICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190 KQ0KICAgICB7IF9fdmFsYXJyYXlfZmlsbCAoX19hLl9NX2RhdGEsIF9faS5fTV9kYXRhLCBfX24s IF9fdCk7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQN CiAgICAgX192YWxhcnJheV9jb3B5KF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5 PF9UcD4gX19iKQ0KICAgICB7IF9fdmFsYXJyYXlfY29weShfX2EuX01fZGF0YSwgX19uLCBfX2Iu X01fZGF0YSk7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZv aWQNCiAgICAgX192YWxhcnJheV9jb3B5KF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgc2l6 ZV90IF9fcywgX0FycmF5PF9UcD4gX19iKQ0KICAgICB7IF9fdmFsYXJyYXlfY29weShfX2EuX01f ZGF0YSwgX19uLCBfX3MsIF9fYi5fTV9kYXRhKTsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPg0KICAgICBpbmxpbmUgdm9pZA0KICAgICBfX3ZhbGFycmF5X2NvcHkoX0FycmF5PF9UcD4g X19hLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24sIHNpemVfdCBfX3MpDQogICAgIHsgX192 YWxhcnJheV9jb3B5KF9fYS5fTV9kYXRhLCBfX2IuX01fZGF0YSwgX19uLCBfX3MpOyB9DQoNCg0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQNCiAgICAgX192YWxh cnJheV9jb3B5KF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgc2l6ZV90IF9fczEsDQogICAg ICAgICAgICAgICAgICAgICBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX3MyKQ0KICAgICB7IF9f dmFsYXJyYXlfY29weShfX2EuX01fZGF0YSwgX19uLCBfX3MxLCBfX2IuX01fZGF0YSwgX19zMik7 IH0NCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgdm9pZA0KICAg ICBfX3ZhbGFycmF5X2NvcHkoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksDQog ICAgICAgICAgICAgICAgICAgICAgX0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKQ0KICAgICB7 IF9fdmFsYXJyYXlfY29weShfX2EuX01fZGF0YSwgX19pLl9NX2RhdGEsIF9fYi5fTV9kYXRhLCBf X24pOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgIGlubGluZSB2b2lkDQog ICAgIF9fdmFsYXJyYXlfY29weShfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxf VHA+IF9fYiwNCiAgICAgICAgICAgICAgICAgICAgICBfQXJyYXk8c2l6ZV90PiBfX2kpDQogICAg IHsgX192YWxhcnJheV9jb3B5KF9fYS5fTV9kYXRhLCBfX24sIF9fYi5fTV9kYXRhLCBfX2kuX01f ZGF0YSk7IH0NCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgdm9p ZA0KICAgICBfX3ZhbGFycmF5X2NvcHkoX0FycmF5PF9UcD4gX19zcmMsIHNpemVfdCBfX24sIF9B cnJheTxzaXplX3Q+IF9faSwNCiAgICAgICAgICAgICAgICAgICAgIF9BcnJheTxfVHA+IF9fZHN0 LCBfQXJyYXk8c2l6ZV90PiBfX2opDQogICAgIHsNCiAgICAgICBfX3ZhbGFycmF5X2NvcHkoX19z cmMuX01fZGF0YSwgX19uLCBfX2kuX01fZGF0YSwNCiAgICAgICAgICAgICAgICAgICAgICAgX19k c3QuX01fZGF0YSwgX19qLl9NX2RhdGEpOw0KICAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPg0KICAgICBpbmxpbmUNCiAgICAgX0FycmF5PF9UcD46Ol9BcnJheSAoc2l6ZV90IF9fbikN CiAgICAgICA6IF9NX2RhdGEoX192YWxhcnJheV9nZXRfc3RvcmFnZTxfVHA+KF9fbikpDQogICAg IHsgX192YWxhcnJheV9kZWZhdWx0X2NvbnN0cnVjdChfTV9kYXRhLCBfTV9kYXRhICsgX19uKTsg fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lDQogICAgIF9BcnJheTxf VHA+OjpfQXJyYXkgKF9UcCogY29uc3QgX19yZXN0cmljdF9fIF9fcCkgOiBfTV9kYXRhIChfX3Ap IHt9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgX0FycmF5PF9UcD46 Ol9BcnJheSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KQ0KICAgICAgICAgOiBfTV9kYXRhIChf X3YuX01fZGF0YSkge30NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgIGlubGluZQ0K ICAgICBfQXJyYXk8X1RwPjo6X0FycmF5IChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2IsIHNp emVfdCBfX3MpDQogICAgICAgOiBfTV9kYXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihf X3MpKQ0KICAgICB7IF9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX19iLCBfX3MsIF9NX2RhdGEp OyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgX1RwKg0KICAgICBf QXJyYXk8X1RwPjo6YmVnaW4gKCkgY29uc3QNCiAgICAgeyByZXR1cm4gX01fZGF0YTsgfQ0KIyA2 MDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvdmFsYXJyYXlfYXJyYXkuaCIgMw0KICAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX3BsdXMgKF9B cnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgY29uc3QgX1RwJiBfX3QpIHsgZm9yIChfVHAqIF9f cD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3ApICpfX3AgKz0gX190OyB9 IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9wbHVz IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9f cCA9IF9fYS5fTV9kYXRhOyBmb3IgKF9UcCogX19xPV9fYi5fTV9kYXRhOyBfX3E8X19iLl9NX2Rh dGErX19uOyArK19fcCwgKytfX3EpICpfX3AgKz0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9wbHVzIChfQXJyYXk8X1RwPiBf X2EsIGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IF9UcCogX19wIChf X2EuX01fZGF0YSk7IGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19uOyArK19faSwgKytfX3ApICpf X3AgKz0gX19lW19faV07IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJy YXlfYXVnbWVudGVkX3BsdXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgc2l6ZV90IF9f cywgX0FycmF5PF9UcD4gX19iKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoX1RwKiBf X3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX3MqX19uOyBfX3ArPV9fcywgKytfX3Ep ICpfX3AgKz0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJh eV9hdWdtZW50ZWRfcGx1cyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVf dCBfX24sIHNpemVfdCBfX3MpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChfVHAqIF9f cD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3AsIF9fcSs9X19zKSAqX19w ICs9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJh eV9hdWdtZW50ZWRfcGx1cyAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19zLCBjb25zdCBfRXhw cjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBm b3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksIF9fcCs9X19zKSAqX19wICs9IF9fZVtf X2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRl ZF9wbHVzIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSwgX0FycmF5PF9UcD4g X19iLCBzaXplX3QgX19uKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoc2l6ZV90KiBf X2o9X19pLl9NX2RhdGE7IF9fajxfX2kuX01fZGF0YStfX247ICsrX19qLCArK19fcSkgX19hLl9N X2RhdGFbKl9fal0gKz0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lk IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJy YXk8X1RwPiBfX2IsIF9BcnJheTxzaXplX3Q+IF9faSkgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEp OyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19uOyArK19f aiwgKytfX3ApICpfX3AgKz0gX19iLl9NX2RhdGFbKl9fal07IH0gdGVtcGxhdGU8dHlwZW5hbWUg X1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX0FycmF5PF9UcD4g X19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksIGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6 ZV90IF9fbikgeyBzaXplX3QqIF9faiAoX19pLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2s9MDsg X19rPF9fbjsgKytfX2ssICsrX19qKSBfX2EuX01fZGF0YVsqX19qXSArPSBfX2VbX19rXTsgfSB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9wbHVzIChfQXJyYXk8 X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20sIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikg eyBib29sKiBvayAoX19tLl9NX2RhdGEpOyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKF9U cCogX19xPV9fYi5fTV9kYXRhOyBfX3E8X19iLl9NX2RhdGErX19uOyArK19fcSwgKytvaywgKytf X3ApIHsgd2hpbGUgKCEgKm9rKSB7ICsrb2s7ICsrX19wOyB9ICpfX3AgKz0gKl9fcTsgfSB9IHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3BsdXMgKF9BcnJheTxf VHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8Ym9vbD4gX19tKSB7 IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoX1Rw KiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wLCArK29rLCArK19f cSkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3E7IH0gKl9fcCArPSAqX19xOyB9IH0gdGVt cGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfcGx1 cyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBjb25zdCBfRXhwcjxfRG9tLCBf VHA+JiBfX2UsIHNpemVfdCBfX24pIHsgYm9vbCogb2soX19tLl9NX2RhdGEpOyBfVHAqIF9fcCAo X19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksICsrb2ssICsr X19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcDsgfSAqX19wICs9IF9fZVtfX2ldOyB9 IH0NCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRl ZF9taW51cyAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBjb25zdCBfVHAmIF9fdCkgeyBm b3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyArK19fcCkgKl9f cCAtPSBfX3Q7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVn bWVudGVkX21pbnVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9f YikgeyBfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBmb3IgKF9UcCogX19xPV9fYi5fTV9kYXRhOyBf X3E8X19iLl9NX2RhdGErX19uOyArK19fcCwgKytfX3EpICpfX3AgLT0gKl9fcTsgfSB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9taW51cyAo X0FycmF5PF9UcD4gX19hLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikg eyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytf X2ksICsrX19wKSAqX19wIC09IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5s aW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9taW51cyAoX0FycmF5PF9UcD4gX19hLCBzaXplX3Qg X19uLCBzaXplX3QgX19zLCBfQXJyYXk8X1RwPiBfX2IpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRh KTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fcypfX247IF9f cCs9X19zLCArK19fcSkgKl9fcCAtPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5s aW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9taW51cyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8 X1RwPiBfX2IsIHNpemVfdCBfX24sIHNpemVfdCBfX3MpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRh KTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3As IF9fcSs9X19zKSAqX19wIC09ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBf RG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90 IF9fcywgY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3Ag KF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3ArPV9f cykgKl9fcCAtPSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lk IF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4g X19pLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24pIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRh KTsgZm9yIChzaXplX3QqIF9faj1fX2kuX01fZGF0YTsgX19qPF9faS5fTV9kYXRhK19fbjsgKytf X2osICsrX19xKSBfX2EuX01fZGF0YVsqX19qXSAtPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9taW51cyAoX0FycmF5PF9UcD4gX19h LCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxzaXplX3Q+IF9faSkgeyBfVHAq IF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19p Ll9NX2RhdGErX19uOyArK19faiwgKytfX3ApICpfX3AgLT0gX19iLl9NX2RhdGFbKl9fal07IH0g dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRf bWludXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25zdCBfRXhwcjxf RG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsg Zm9yIChzaXplX3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9NX2RhdGFbKl9f al0gLT0gX19lW19fa107IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdt ZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgX0FycmF5PF9U cD4gX19iLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9UcCogX19wIChf X2EuX01fZGF0YSk7IGZvciAoX1RwKiBfX3E9X19iLl9NX2RhdGE7IF9fcTxfX2IuX01fZGF0YStf X247ICsrX19xLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7IH0g Kl9fcCAtPSAqX19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdt ZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19i LCBfQXJyYXk8Ym9vbD4gX19tKSB7IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9UcCogX19xIChf X2IuX01fZGF0YSk7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStf X247ICsrX19wLCArK29rLCArK19fcSkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3E7IH0g Kl9fcCAtPSAqX19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lk IF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9f bSwgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rKF9f bS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9f aTxfX247ICsrX19pLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7 IH0gKl9fcCAtPSBfX2VbX19pXTsgfSB9DQogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGlu ZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX0FycmF5PF9UcD4gX19hLCBzaXpl X3QgX19uLCBjb25zdCBfVHAmIF9fdCkgeyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8 X19hLl9NX2RhdGErX19uOyArK19fcCkgKl9fcCAqPSBfX3Q7IH0gdGVtcGxhdGU8dHlwZW5hbWUg X1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJheTxfVHA+ IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iKSB7IF9UcCogX19wID0gX19hLl9NX2Rh dGE7IGZvciAoX1RwKiBfX3E9X19iLl9NX2RhdGE7IF9fcTxfX2IuX01fZGF0YStfX247ICsrX19w LCArK19fcSkgKl9fcCAqPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0Rv bT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJheTxfVHA+IF9fYSwgY29u c3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3AgKF9fYS5fTV9k YXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK19fcCkgKl9fcCAqPSBf X2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdt ZW50ZWRfbXVsdGlwbGllcyAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBzaXplX3QgX19z LCBfQXJyYXk8X1RwPiBfX2IpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChfVHAqIF9f cD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fcypfX247IF9fcCs9X19zLCArK19fcSkg Kl9fcCAqPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5 X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxfVHA+IF9fYiwg c2l6ZV90IF9fbiwgc2l6ZV90IF9fcykgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKF9U cCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyArK19fcCwgX19xKz1fX3Mp ICpfX3AgKj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQg X0FycmF5X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX3Ms IGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IF9UcCogX19wIChfX2Eu X01fZGF0YSk7IGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19uOyArK19faSwgX19wKz1fX3MpICpf X3AgKj0gX19lW19faV07IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJy YXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4g X19pLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24pIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRh KTsgZm9yIChzaXplX3QqIF9faj1fX2kuX01fZGF0YTsgX19qPF9faS5fTV9kYXRhK19fbjsgKytf X2osICsrX19xKSBfX2EuX01fZGF0YVsqX19qXSAqPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1Rw PiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYiwgX0FycmF5PHNpemVfdD4gX19pKSB7 IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6ZV90KiBfX2o9X19pLl9NX2RhdGE7IF9f ajxfX2kuX01fZGF0YStfX247ICsrX19qLCArK19fcCkgKl9fcCAqPSBfX2IuX01fZGF0YVsqX19q XTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21l bnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSwgY29u c3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IHNpemVfdCogX19qIChfX2ku X01fZGF0YSk7IGZvciAoc2l6ZV90IF9faz0wOyBfX2s8X19uOyArK19faywgKytfX2opIF9fYS5f TV9kYXRhWypfX2pdICo9IF9fZVtfX2tdOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdm9pZCBf QXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+ IF9fbSwgX0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rIChfX20uX01fZGF0 YSk7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoX1RwKiBfX3E9X19iLl9NX2RhdGE7IF9f cTxfX2IuX01fZGF0YStfX247ICsrX19xLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsg KytvazsgKytfX3A7IH0gKl9fcCAqPSAqX19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2 b2lkIF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX0FycmF5PF9UcD4gX19hLCBzaXplX3Qg X19uLCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxib29sPiBfX20pIHsgYm9vbCogb2sgKF9fbS5f TV9kYXRhKTsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0 YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3AsICsrb2ssICsrX19xKSB7IHdoaWxlICghICpv aykgeyArK29rOyArK19fcTsgfSAqX19wICo9ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8 X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20sIGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwg c2l6ZV90IF9fbikgeyBib29sKiBvayhfX20uX01fZGF0YSk7IF9UcCogX19wIChfX2EuX01fZGF0 YSk7IGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19uOyArK19faSwgKytvaywgKytfX3ApIHsgd2hp bGUgKCEgKm9rKSB7ICsrb2s7ICsrX19wOyB9ICpfX3AgKj0gX19lW19faV07IH0gfQ0KICAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX2RpdmlkZXMg KF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgY29uc3QgX1RwJiBfX3QpIHsgZm9yIChfVHAq IF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3ApICpfX3AgLz0gX190 OyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9k aXZpZGVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYikgeyBf VHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBmb3IgKF9UcCogX19xPV9fYi5fTV9kYXRhOyBfX3E8X19i Ll9NX2RhdGErX19uOyArK19fcCwgKytfX3EpICpfX3AgLz0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9kaXZpZGVzIChfQXJy YXk8X1RwPiBfX2EsIGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IF9U cCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19uOyArK19faSwg KytfX3ApICpfX3AgLz0gX19lW19faV07IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUg dm9pZCBfQXJyYXlfYXVnbWVudGVkX2RpdmlkZXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9f biwgc2l6ZV90IF9fcywgX0FycmF5PF9UcD4gX19iKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7 IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX3MqX19uOyBfX3Ar PV9fcywgKytfX3EpICpfX3AgLz0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGlu ZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8 X1RwPiBfX2IsIHNpemVfdCBfX24sIHNpemVfdCBfX3MpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRh KTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3As IF9fcSs9X19zKSAqX19wIC89ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBf RG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX0FycmF5PF9UcD4gX19hLCBzaXpl X3QgX19zLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBfVHAqIF9f cCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksIF9fcCs9 X19zKSAqX19wIC89IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZv aWQgX0FycmF5X2F1Z21lbnRlZF9kaXZpZGVzIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXpl X3Q+IF9faSwgX0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKSB7IF9UcCogX19xIChfX2IuX01f ZGF0YSk7IGZvciAoc2l6ZV90KiBfX2o9X19pLl9NX2RhdGE7IF9fajxfX2kuX01fZGF0YStfX247 ICsrX19qLCArK19fcSkgX19hLl9NX2RhdGFbKl9fal0gLz0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX0FycmF5PF9U cD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxzaXplX3Q+IF9faSkg eyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBf X2o8X19pLl9NX2RhdGErX19uOyArK19faiwgKytfX3ApICpfX3AgLz0gX19iLl9NX2RhdGFbKl9f al07IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdt ZW50ZWRfZGl2aWRlcyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksIGNvbnN0 IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBzaXplX3QqIF9faiAoX19pLl9N X2RhdGEpOyBmb3IgKHNpemVfdCBfX2s9MDsgX19rPF9fbjsgKytfX2ssICsrX19qKSBfX2EuX01f ZGF0YVsqX19qXSAvPSBfX2VbX19rXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQgX0Fy cmF5X2F1Z21lbnRlZF9kaXZpZGVzIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20s IF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikgeyBib29sKiBvayAoX19tLl9NX2RhdGEpOyBf VHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKF9UcCogX19xPV9fYi5fTV9kYXRhOyBfX3E8X19i Ll9NX2RhdGErX19uOyArK19fcSwgKytvaywgKytfX3ApIHsgd2hpbGUgKCEgKm9rKSB7ICsrb2s7 ICsrX19wOyB9ICpfX3AgLz0gKl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdm9pZCBf QXJyYXlfYXVnbWVudGVkX2RpdmlkZXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0Fy cmF5PF9UcD4gX19iLCBfQXJyYXk8Ym9vbD4gX19tKSB7IGJvb2wqIG9rIChfX20uX01fZGF0YSk7 IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxf X2EuX01fZGF0YStfX247ICsrX19wLCArK29rLCArK19fcSkgeyB3aGlsZSAoISAqb2spIHsgKytv azsgKytfX3E7IH0gKl9fcCAvPSAqX19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFz cyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX0FycmF5PF9UcD4gX19hLCBf QXJyYXk8Ym9vbD4gX19tLCBjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24p IHsgYm9vbCogb2soX19tLl9NX2RhdGEpOyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNp emVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykg eyArK29rOyArK19fcDsgfSAqX19wIC89IF9fZVtfX2ldOyB9IH0NCiAgIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9tb2R1bHVzIChfQXJyYXk8X1Rw PiBfX2EsIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KSB7IGZvciAoX1RwKiBfX3A9X19hLl9N X2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wKSAqX19wICU9IF9fdDsgfSB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX0Fy cmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IpIHsgX1RwKiBfX3AgPSBf X2EuX01fZGF0YTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19f bjsgKytfX3AsICsrX19xKSAqX19wICU9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBj bGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX0FycmF5PF9UcD4gX19h LCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcCAoX19h Ll9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksICsrX19wKSAqX19w ICU9IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5 X2F1Z21lbnRlZF9tb2R1bHVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIHNpemVfdCBf X3MsIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKF9UcCog X19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19zKl9fbjsgX19wKz1fX3MsICsrX19x KSAqX19wICU9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJy YXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PF9UcD4gX19iLCBz aXplX3QgX19uLCBzaXplX3QgX19zKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoX1Rw KiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wLCBfX3ErPV9fcykg Kl9fcCAlPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBf QXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fcywgY29u c3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3AgKF9fYS5fTV9k YXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3ArPV9fcykgKl9fcCAl PSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9h dWdtZW50ZWRfbW9kdWx1cyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksIF9B cnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3Ig KHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19uOyArK19faiwgKytf X3EpIF9fYS5fTV9kYXRhWypfX2pdICU9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBp bmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6 ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8c2l6ZV90PiBfX2kpIHsgX1RwKiBfX3Ag KF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QqIF9faj1fX2kuX01fZGF0YTsgX19qPF9faS5fTV9k YXRhK19fbjsgKytfX2osICsrX19wKSAqX19wICU9IF9fYi5fTV9kYXRhWypfX2pdOyB9IHRlbXBs YXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX21vZHVs dXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25zdCBfRXhwcjxfRG9t LCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsgZm9y IChzaXplX3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9NX2RhdGFbKl9fal0g JT0gX19lW19fa107IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50 ZWRfbW9kdWx1cyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBfQXJyYXk8X1Rw PiBfX2IsIHNpemVfdCBfX24pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9f YS5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19f bjsgKytfX3EsICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcDsgfSAq X19wICU9ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQgX0FycmF5X2F1Z21l bnRlZF9tb2R1bHVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9f YiwgX0FycmF5PGJvb2w+IF9fbSkgeyBib29sKiBvayAoX19tLl9NX2RhdGEpOyBfVHAqIF9fcSAo X19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGEr X19uOyArK19fcCwgKytvaywgKytfX3EpIHsgd2hpbGUgKCEgKm9rKSB7ICsrb2s7ICsrX19xOyB9 ICpfX3AgJT0gKl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9p ZCBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+ IF9fbSwgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IGJvb2wqIG9r KF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7 IF9faTxfX247ICsrX19pLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytf X3A7IH0gKl9fcCAlPSBfX2VbX19pXTsgfSB9DQogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlu bGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfeG9yIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBf X24sIGNvbnN0IF9UcCYgX190KSB7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2Eu X01fZGF0YStfX247ICsrX19wKSAqX19wIF49IF9fdDsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfeG9yIChfQXJyYXk8X1RwPiBfX2EsIHNpemVf dCBfX24sIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBmb3IgKF9U cCogX19xPV9fYi5fTV9kYXRhOyBfX3E8X19iLl9NX2RhdGErX19uOyArK19fcCwgKytfX3EpICpf X3AgXj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0Fy cmF5X2F1Z21lbnRlZF94b3IgKF9BcnJheTxfVHA+IF9fYSwgY29uc3QgX0V4cHI8X0RvbSxfVHA+ JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3Qg X19pPTA7IF9faTxfX247ICsrX19pLCArK19fcCkgKl9fcCBePSBfX2VbX19pXTsgfSB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfeG9yIChfQXJyYXk8 X1RwPiBfX2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3MsIF9BcnJheTxfVHA+IF9fYikgeyBfVHAq IF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9N X2RhdGErX19zKl9fbjsgX19wKz1fX3MsICsrX19xKSAqX19wIF49ICpfX3E7IH0gdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX3hvciAoX0FycmF5PF9U cD4gX19hLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24sIHNpemVfdCBfX3MpIHsgX1RwKiBf X3EgKF9fYi5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9k YXRhK19fbjsgKytfX3AsIF9fcSs9X19zKSAqX19wIF49ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5h bWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfeG9yIChfQXJyYXk8X1Rw PiBfX2EsIHNpemVfdCBfX3MsIGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lLCBzaXplX3QgX19u KSB7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19uOyAr K19faSwgX19wKz1fX3MpICpfX3AgXj0gX19lW19faV07IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX3hvciAoX0FycmF5PF9UcD4gX19hLCBfQXJy YXk8c2l6ZV90PiBfX2ksIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcSAo X19iLl9NX2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2Rh dGErX19uOyArK19faiwgKytfX3EpIF9fYS5fTV9kYXRhWypfX2pdIF49ICpfX3E7IH0gdGVtcGxh dGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX3hvciAoX0FycmF5 PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxzaXplX3Q+IF9f aSkgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRh OyBfX2o8X19pLl9NX2RhdGErX19uOyArK19faiwgKytfX3ApICpfX3AgXj0gX19iLl9NX2RhdGFb Kl9fal07IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9h dWdtZW50ZWRfeG9yIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSwgY29uc3Qg X0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IHNpemVfdCogX19qIChfX2kuX01f ZGF0YSk7IGZvciAoc2l6ZV90IF9faz0wOyBfX2s8X19uOyArK19faywgKytfX2opIF9fYS5fTV9k YXRhWypfX2pdIF49IF9fZVtfX2tdOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdm9pZCBfQXJy YXlfYXVnbWVudGVkX3hvciAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBfQXJy YXk8X1RwPiBfX2IsIHNpemVfdCBfX24pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBf X3AgKF9fYS5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9k YXRhK19fbjsgKytfX3EsICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19f cDsgfSAqX19wIF49ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQgX0FycmF5 X2F1Z21lbnRlZF94b3IgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4g X19iLCBfQXJyYXk8Ym9vbD4gX19tKSB7IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9UcCogX19x IChfX2IuX01fZGF0YSk7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0 YStfX247ICsrX19wLCArK29rLCArK19fcSkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3E7 IH0gKl9fcCBePSAqX19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2 b2lkIF9BcnJheV9hdWdtZW50ZWRfeG9yIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxib29sPiBf X20sIGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBib29sKiBvayhf X20uX01fZGF0YSk7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6ZV90IF9faT0wOyBf X2k8X19uOyArK19faSwgKytvaywgKytfX3ApIHsgd2hpbGUgKCEgKm9rKSB7ICsrb2s7ICsrX19w OyB9ICpfX3AgXj0gX19lW19faV07IH0gfQ0KICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxp bmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX29yIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24s IGNvbnN0IF9UcCYgX190KSB7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01f ZGF0YStfX247ICsrX19wKSAqX19wIHw9IF9fdDsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlu bGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfb3IgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9f biwgX0FycmF5PF9UcD4gX19iKSB7IF9UcCogX19wID0gX19hLl9NX2RhdGE7IGZvciAoX1RwKiBf X3E9X19iLl9NX2RhdGE7IF9fcTxfX2IuX01fZGF0YStfX247ICsrX19wLCArK19fcSkgKl9fcCB8 PSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlf YXVnbWVudGVkX29yIChfQXJyYXk8X1RwPiBfX2EsIGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19l LCBzaXplX3QgX19uKSB7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6ZV90IF9faT0w OyBfX2k8X19uOyArK19faSwgKytfX3ApICpfX3AgfD0gX19lW19faV07IH0gdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX29yIChfQXJyYXk8X1RwPiBf X2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3MsIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9fcSAo X19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGEr X19zKl9fbjsgX19wKz1fX3MsICsrX19xKSAqX19wIHw9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5h bWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX29yIChfQXJyYXk8X1RwPiBfX2Es IF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbiwgc2l6ZV90IF9fcykgeyBfVHAqIF9fcSAoX19i Ll9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19u OyArK19fcCwgX19xKz1fX3MpICpfX3AgfD0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs IGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9vciAoX0FycmF5PF9UcD4gX19hLCBz aXplX3QgX19zLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBfVHAq IF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksIF9f cCs9X19zKSAqX19wIHw9IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5l IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9vciAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90 PiBfX2ksIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcSAoX19iLl9NX2Rh dGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19uOyAr K19faiwgKytfX3EpIF9fYS5fTV9kYXRhWypfX2pdIHw9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5h bWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX29yIChfQXJyYXk8X1RwPiBfX2Es IHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYiwgX0FycmF5PHNpemVfdD4gX19pKSB7IF9UcCog X19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6ZV90KiBfX2o9X19pLl9NX2RhdGE7IF9fajxfX2ku X01fZGF0YStfX247ICsrX19qLCArK19fcCkgKl9fcCB8PSBfX2IuX01fZGF0YVsqX19qXTsgfSB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9v ciAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksIGNvbnN0IF9FeHByPF9Eb20s IF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBzaXplX3QqIF9faiAoX19pLl9NX2RhdGEpOyBmb3Ig KHNpemVfdCBfX2s9MDsgX19rPF9fbjsgKytfX2ssICsrX19qKSBfX2EuX01fZGF0YVsqX19qXSB8 PSBfX2VbX19rXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQgX0FycmF5X2F1Z21lbnRl ZF9vciAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBfQXJyYXk8X1RwPiBfX2Is IHNpemVfdCBfX24pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9k YXRhKTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19fbjsgKytf X3EsICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcDsgfSAqX19wIHw9 ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9v ciAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxi b29sPiBfX20pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3EgKF9fYi5fTV9kYXRh KTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3As ICsrb2ssICsrX19xKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcTsgfSAqX19wIHw9ICpf X3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1 Z21lbnRlZF9vciAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBjb25zdCBfRXhw cjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgYm9vbCogb2soX19tLl9NX2RhdGEpOyBf VHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ks ICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcDsgfSAqX19wIHw9IF9f ZVtfX2ldOyB9IH0NCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5 X2F1Z21lbnRlZF9hbmQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgY29uc3QgX1RwJiBf X3QpIHsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytf X3ApICpfX3AgJj0gX190OyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0Fy cmF5X2F1Z21lbnRlZF9hbmQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9U cD4gX19iKSB7IF9UcCogX19wID0gX19hLl9NX2RhdGE7IGZvciAoX1RwKiBfX3E9X19iLl9NX2Rh dGE7IF9fcTxfX2IuX01fZGF0YStfX247ICsrX19wLCArK19fcSkgKl9fcCAmPSAqX19xOyB9IHRl bXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX2Fu ZCAoX0FycmF5PF9UcD4gX19hLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9f bikgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsg KytfX2ksICsrX19wKSAqX19wICY9IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g aW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9hbmQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90 IF9fbiwgc2l6ZV90IF9fcywgX0FycmF5PF9UcD4gX19iKSB7IF9UcCogX19xIChfX2IuX01fZGF0 YSk7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX3MqX19uOyBf X3ArPV9fcywgKytfX3EpICpfX3AgJj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlu bGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfYW5kIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxf VHA+IF9fYiwgc2l6ZV90IF9fbiwgc2l6ZV90IF9fcykgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEp OyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyArK19fcCwg X19xKz1fX3MpICpfX3AgJj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9E b20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9hbmQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9f cywgY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3AgKF9f YS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3ArPV9fcykg Kl9fcCAmPSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9B cnJheV9hdWdtZW50ZWRfYW5kIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSwg X0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZv ciAoc2l6ZV90KiBfX2o9X19pLl9NX2RhdGE7IF9fajxfX2kuX01fZGF0YStfX247ICsrX19qLCAr K19fcSkgX19hLl9NX2RhdGFbKl9fal0gJj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfYW5kIChfQXJyYXk8X1RwPiBfX2EsIHNpemVf dCBfX24sIF9BcnJheTxfVHA+IF9fYiwgX0FycmF5PHNpemVfdD4gX19pKSB7IF9UcCogX19wIChf X2EuX01fZGF0YSk7IGZvciAoc2l6ZV90KiBfX2o9X19pLl9NX2RhdGE7IF9fajxfX2kuX01fZGF0 YStfX247ICsrX19qLCArK19fcCkgKl9fcCAmPSBfX2IuX01fZGF0YVsqX19qXTsgfSB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9hbmQgKF9B cnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25zdCBfRXhwcjxfRG9tLCBfVHA+ JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsgZm9yIChzaXpl X3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9NX2RhdGFbKl9fal0gJj0gX19l W19fa107IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfYW5k IChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20sIF9BcnJheTxfVHA+IF9fYiwgc2l6 ZV90IF9fbikgeyBib29sKiBvayAoX19tLl9NX2RhdGEpOyBfVHAqIF9fcCAoX19hLl9NX2RhdGEp OyBmb3IgKF9UcCogX19xPV9fYi5fTV9kYXRhOyBfX3E8X19iLl9NX2RhdGErX19uOyArK19fcSwg KytvaywgKytfX3ApIHsgd2hpbGUgKCEgKm9rKSB7ICsrb2s7ICsrX19wOyB9ICpfX3AgJj0gKl9f cTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX2FuZCAo X0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxib29s PiBfX20pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsg Zm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3AsICsr b2ssICsrX19xKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcTsgfSAqX19wICY9ICpfX3E7 IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21l bnRlZF9hbmQgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgY29uc3QgX0V4cHI8 X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rKF9fbS5fTV9kYXRhKTsgX1Rw KiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCAr K29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7IH0gKl9fcCAmPSBfX2Vb X19pXTsgfSB9DQogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9h dWdtZW50ZWRfc2hpZnRfbGVmdCAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBjb25zdCBf VHAmIF9fdCkgeyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19u OyArK19fcCkgKl9fcCA8PD0gX190OyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZv aWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBf X24sIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBmb3IgKF9UcCog X19xPV9fYi5fTV9kYXRhOyBfX3E8X19iLl9NX2RhdGErX19uOyArK19fcCwgKytfX3EpICpfX3Ag PDw9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJh eV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAoX0FycmF5PF9UcD4gX19hLCBjb25zdCBfRXhwcjxfRG9t LF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNp emVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksICsrX19wKSAqX19wIDw8PSBfX2VbX19pXTsgfSB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRf bGVmdCAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBzaXplX3QgX19zLCBfQXJyYXk8X1Rw PiBfX2IpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0 YTsgX19wPF9fYS5fTV9kYXRhK19fcypfX247IF9fcCs9X19zLCArK19fcSkgKl9fcCA8PD0gKl9f cTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRf c2hpZnRfbGVmdCAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24s IHNpemVfdCBfX3MpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcD1fX2Eu X01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3AsIF9fcSs9X19zKSAqX19wIDw8PSAq X19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVn bWVudGVkX3NoaWZ0X2xlZnQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fcywgY29uc3QgX0V4 cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsg Zm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3ArPV9fcykgKl9fcCA8PD0gX19l W19faV07IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVu dGVkX3NoaWZ0X2xlZnQgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBfQXJy YXk8X1RwPiBfX2IsIHNpemVfdCBfX24pIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChz aXplX3QqIF9faj1fX2kuX01fZGF0YTsgX19qPF9faS5fTV9kYXRhK19fbjsgKytfX2osICsrX19x KSBfX2EuX01fZGF0YVsqX19qXSA8PD0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlu bGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAoX0FycmF5PF9UcD4gX19hLCBz aXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxzaXplX3Q+IF9faSkgeyBfVHAqIF9f cCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9N X2RhdGErX19uOyArK19faiwgKytfX3ApICpfX3AgPDw9IF9fYi5fTV9kYXRhWypfX2pdOyB9IHRl bXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3No aWZ0X2xlZnQgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25zdCBfRXhw cjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRh KTsgZm9yIChzaXplX3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9NX2RhdGFb Kl9fal0gPDw9IF9fZVtfX2tdOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdm9pZCBfQXJyYXlf YXVnbWVudGVkX3NoaWZ0X2xlZnQgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwg X0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9U cCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoX1RwKiBfX3E9X19iLl9NX2RhdGE7IF9fcTxfX2Iu X01fZGF0YStfX247ICsrX19xLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsg KytfX3A7IH0gKl9fcCA8PD0gKl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdm9pZCBf QXJyYXlfYXVnbWVudGVkX3NoaWZ0X2xlZnQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwg X0FycmF5PF9UcD4gX19iLCBfQXJyYXk8Ym9vbD4gX19tKSB7IGJvb2wqIG9rIChfX20uX01fZGF0 YSk7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9f cDxfX2EuX01fZGF0YStfX247ICsrX19wLCArK29rLCArK19fcSkgeyB3aGlsZSAoISAqb2spIHsg KytvazsgKytfX3E7IH0gKl9fcCA8PD0gKl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg Y2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X2xlZnQgKF9BcnJheTxfVHA+ IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXpl X3QgX19uKSB7IGJvb2wqIG9rKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsg Zm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK29rLCArK19fcCkgeyB3aGlsZSAo ISAqb2spIHsgKytvazsgKytfX3A7IH0gKl9fcCA8PD0gX19lW19faV07IH0gfQ0KICAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3JpZ2h0 IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KSB7IGZvciAoX1Rw KiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wKSAqX19wID4+PSBf X3Q7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVk X3NoaWZ0X3JpZ2h0IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9f YikgeyBfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBmb3IgKF9UcCogX19xPV9fYi5fTV9kYXRhOyBf X3E8X19iLl9NX2RhdGErX19uOyArK19fcCwgKytfX3EpICpfX3AgPj49ICpfX3E7IH0gdGVtcGxh dGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRf cmlnaHQgKF9BcnJheTxfVHA+IF9fYSwgY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVf dCBfX24pIHsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxf X247ICsrX19pLCArK19fcCkgKl9fcCA+Pj0gX19lW19faV07IH0gdGVtcGxhdGU8dHlwZW5hbWUg X1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3JpZ2h0IChfQXJyYXk8X1Rw PiBfX2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3MsIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9f cSAoX19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2Rh dGErX19zKl9fbjsgX19wKz1fX3MsICsrX19xKSAqX19wID4+PSAqX19xOyB9IHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX0Fy cmF5PF9UcD4gX19hLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24sIHNpemVfdCBfX3MpIHsg X1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9f YS5fTV9kYXRhK19fbjsgKytfX3AsIF9fcSs9X19zKSAqX19wID4+PSAqX19xOyB9IHRlbXBsYXRl PHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3Jp Z2h0IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX3MsIGNvbnN0IF9FeHByPF9Eb20sX1RwPiYg X19lLCBzaXplX3QgX19uKSB7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6ZV90IF9f aT0wOyBfX2k8X19uOyArK19faSwgX19wKz1fX3MpICpfX3AgPj49IF9fZVtfX2ldOyB9IHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdo dCAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksIF9BcnJheTxfVHA+IF9fYiwg c2l6ZV90IF9fbikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9f aS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19uOyArK19faiwgKytfX3EpIF9fYS5fTV9kYXRh WypfX2pdID4+PSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0Fy cmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBf QXJyYXk8X1RwPiBfX2IsIF9BcnJheTxzaXplX3Q+IF9faSkgeyBfVHAqIF9fcCAoX19hLl9NX2Rh dGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19uOyAr K19faiwgKytfX3ApICpfX3AgPj49IF9fYi5fTV9kYXRhWypfX2pdOyB9IHRlbXBsYXRlPHR5cGVu YW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3JpZ2h0IChf QXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSwgY29uc3QgX0V4cHI8X0RvbSwgX1Rw PiYgX19lLCBzaXplX3QgX19uKSB7IHNpemVfdCogX19qIChfX2kuX01fZGF0YSk7IGZvciAoc2l6 ZV90IF9faz0wOyBfX2s8X19uOyArK19faywgKytfX2opIF9fYS5fTV9kYXRhWypfX2pdID4+PSBf X2VbX19rXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9z aGlmdF9yaWdodCAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBfQXJyYXk8X1Rw PiBfX2IsIHNpemVfdCBfX24pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9f YS5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19f bjsgKytfX3EsICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcDsgfSAq X19wID4+PSAqX19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdt ZW50ZWRfc2hpZnRfcmlnaHQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9U cD4gX19iLCBfQXJyYXk8Ym9vbD4gX19tKSB7IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9UcCog X19xIChfX2IuX01fZGF0YSk7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01f ZGF0YStfX247ICsrX19wLCArK29rLCArK19fcSkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytf X3E7IH0gKl9fcCA+Pj0gKl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0Rv bT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3JpZ2h0IChfQXJyYXk8X1RwPiBfX2EsIF9B cnJheTxib29sPiBfX20sIGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbikg eyBib29sKiBvayhfX20uX01fZGF0YSk7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6 ZV90IF9faT0wOyBfX2k8X19uOyArK19faSwgKytvaywgKytfX3ApIHsgd2hpbGUgKCEgKm9rKSB7 ICsrb2s7ICsrX19wOyB9ICpfX3AgPj49IF9fZVtfX2ldOyB9IH0NCg0KDQoNCn0NCg0KDQoNCiMg MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92YWxhcnJheV9hcnJheS50Y2MiIDEgMw0KIyAz NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92YWxhcnJheV9hcnJheS50Y2MiIDMNCm5hbWVz cGFjZSBzdGQNCnsNCg0KIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCnZvaWQNCl9fdmFsYXJyYXlf ZmlsbCAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8Ym9vbD4gX19tLCBjb25z dCBfVHAmIF9fdCkNCnsNCiAgICBfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOw0KICAgIGJvb2wqIF9f b2sgKF9fbS5fTV9kYXRhKTsNCiAgICBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ks ICsrX19vaywgKytfX3ApIHsNCiAgICAgICAgd2hpbGUgKCEgKl9fb2spIHsNCiAgICAgICAgICAg ICsrX19vazsNCiAgICAgICAgICAgICsrX19wOw0KICAgICAgICB9DQogICAgICAgICpfX3AgPSBf X3Q7DQogICAgfQ0KfQ0KDQogdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0Kdm9pZA0KX192YWxhcnJh eV9jb3B5IChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20sIF9BcnJheTxfVHA+IF9f Yiwgc2l6ZV90IF9fbikNCnsNCiAgICBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOw0KICAgIGJvb2wq IF9fb2sgKF9fbS5fTV9kYXRhKTsNCiAgICBmb3IgKF9UcCogX19xPV9fYi5fTV9kYXRhOyBfX3E8 X19iLl9NX2RhdGErX19uOyArK19fcSwgKytfX29rLCArK19fcCkgew0KICAgICAgICB3aGlsZSAo ISAqX19vaykgew0KICAgICAgICAgICAgKytfX29rOw0KICAgICAgICAgICAgKytfX3A7DQogICAg ICAgIH0NCiAgICAgICAgKl9fcSA9ICpfX3A7DQogICAgfQ0KfQ0KDQogdGVtcGxhdGU8dHlwZW5h bWUgX1RwPg0Kdm9pZA0KX192YWxhcnJheV9jb3B5IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBf X24sIF9BcnJheTxfVHA+IF9fYiwgX0FycmF5PGJvb2w+IF9fbSkNCnsNCiAgICBfVHAqIF9fcSAo X19iLl9NX2RhdGEpOw0KICAgIGJvb2wqIF9fb2sgKF9fbS5fTV9kYXRhKTsNCiAgICBmb3IgKF9U cCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyArK19fcCwgKytfX29rLCAr K19fcSkgew0KICAgICAgICB3aGlsZSAoISAqX19vaykgew0KICAgICAgICAgICAgKytfX29rOw0K ICAgICAgICAgICAgKytfX3E7DQogICAgICAgIH0NCiAgICAgICAgKl9fcSA9ICpfX3A7DQogICAg fQ0KfQ0KDQogdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPg0Kdm9pZA0KX192YWxh cnJheV9jb3B5IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24sIF9BcnJh eTxfVHA+IF9fYSkNCnsNCiAgICBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOw0KICAgIGZvciAoc2l6 ZV90IF9faT0wOyBfX2k8X19uOyArK19faSwgKytfX3ApICpfX3AgPSBfX2VbX19pXTsNCn0NCg0K IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4NCnZvaWQNCl9fdmFsYXJyYXlfY29w eSAoY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uLA0KICAgICAgICAgICAg ICAgICBfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX3MpDQp7DQogICAgX1RwKiBfX3AgKF9fYS5f TV9kYXRhKTsNCiAgICBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksIF9fcCs9X19z KSAqX19wID0gX19lW19faV07DQp9DQoNCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9E b20+DQp2b2lkDQpfX3ZhbGFycmF5X2NvcHkgKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwg c2l6ZV90IF9fbiwNCiAgICAgICAgICAgICAgICAgX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6 ZV90PiBfX2kpDQp7DQogICAgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsNCiAgICBmb3IgKHNp emVfdCBfX2s9MDsgX19rPF9fbjsgKytfX2ssICsrX19qKSBfX2EuX01fZGF0YVsqX19qXSA9IF9f ZVtfX2tdOw0KfQ0KDQogdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPg0Kdm9pZA0K X192YWxhcnJheV9jb3B5IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24s DQogICAgICAgICAgICAgICAgIF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSkNCnsN CiAgICBib29sKiBfX29rIChfX20uX01fZGF0YSk7DQogICAgX1RwKiBfX3AgKF9fYS5fTV9kYXRh KTsNCiAgICBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksICsrX19vaywgKytfX3Ap IHsNCiAgICAgICAgd2hpbGUgKCEgKl9fb2spIHsNCiAgICAgICAgICAgICsrX19vazsNCiAgICAg ICAgICAgICsrX19wOw0KICAgICAgICB9DQogICAgICAgICpfX3AgPSBfX2VbX19pXTsNCiAgICB9 DQp9DQoNCg0KIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4NCnZvaWQNCl9fdmFs YXJyYXlfY29weV9jb25zdHJ1Y3QgKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90 IF9fbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BcnJheTxfVHA+IF9fYSkNCnsNCiAg ICBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOw0KICAgIGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19u OyArK19faSwgKytfX3ApIG5ldyAoX19wKSBfVHAoX19lW19faV0pOw0KfQ0KDQoNCiB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+DQp2b2lkDQpfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0IChfQXJyYXk8 X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBf QXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24pDQp7DQogICAgX1RwKiBfX3AgKF9fYS5fTV9kYXRh KTsNCiAgICBib29sKiBfX29rIChfX20uX01fZGF0YSk7DQogICAgZm9yIChfVHAqIF9fcT1fX2Iu X01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19fbjsgKytfX3EsICsrX19vaywgKytfX3ApIHsNCiAg ICAgICAgd2hpbGUgKCEgKl9fb2spIHsNCiAgICAgICAgICAgICsrX19vazsNCiAgICAgICAgICAg ICsrX19wOw0KICAgICAgICB9DQogICAgICAgIG5ldyAoX19xKSBfVHAoKl9fcCk7DQogICAgfQ0K fQ0KDQoNCg0KDQp9DQojIDYyNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92YWxhcnJheV9h cnJheS5oIiAyIDMNCiMgOTQgIi91c3IvaW5jbHVkZS9jKysvMy4yL3ZhbGFycmF5IiAyIDMNCiMg MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92YWxhcnJheV9tZXRhLmgiIDEgMw0KIyA0MSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92YWxhcnJheV9tZXRhLmgiIDMNCg0KbmFtZXNwYWNl IHN0ZA0Kew0KIyA1NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92YWxhcnJheV9tZXRhLmgi IDMNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPiBjbGFzcyBfQ29u c3RhbnQ7DQoNCg0KDQoNCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBjbGFzcyBfVW5GdW5CYXNl IHsNCiAgICBwdWJsaWM6DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw ZSB2YWx1ZV90eXBlOw0KICAgICAgICB0eXBlZGVmIHZhbHVlX3R5cGUgX1Z0Ow0KDQogICAgICAg IF9VbkZ1bkJhc2UgKGNvbnN0IF9Eb20mIF9fZSwgX1Z0IF9fZihfVnQpKQ0KICAgICAgICAgICAg ICAgIDogX01fZXhwcihfX2UpLCBfTV9mdW5jKF9fZikge30NCg0KICAgICAgICBfVnQgb3BlcmF0 b3JbXSAoc2l6ZV90IF9faSkgY29uc3QgeyByZXR1cm4gX01fZnVuYyhfTV9leHByW19faV0pOyB9 DQogICAgICAgIHNpemVfdCBzaXplICgpIGNvbnN0IHsgcmV0dXJuIF9NX2V4cHIuc2l6ZSgpOyB9 DQoNCiAgICBwcml2YXRlOg0KICAgICAgICBjb25zdCBfRG9tJiBfTV9leHByOw0KICAgICAgICBf VnQgKCpfTV9mdW5jKShfVnQpOw0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFz cywgY2xhc3M+IGNsYXNzIF9NZXRhLCBjbGFzcyBfRG9tPg0KICAgICAgICBjbGFzcyBfVW5GdW5D bG9zOw0KDQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICBzdHJ1Y3QgX1VuRnVuQ2xvczxf RXhwcixfRG9tPiA6IF9VbkZ1bkJhc2U8X0RvbT4gew0KICAgICAgICB0eXBlZGVmIF9VbkZ1bkJh c2U8X0RvbT4gX0Jhc2U7DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5 cGUgdmFsdWVfdHlwZTsNCg0KICAgICAgICBfVW5GdW5DbG9zIChjb25zdCBfRG9tJiBfX2UsIHZh bHVlX3R5cGUgX19mKHZhbHVlX3R5cGUpKQ0KICAgICAgICAgICAgICAgIDogX0Jhc2UgKF9fZSwg X19mKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgc3RydWN0 IF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4gOiBfVW5GdW5CYXNlPHZhbGFycmF5PF9UcD4gPiB7 DQogICAgICAgIHR5cGVkZWYgX1VuRnVuQmFzZTx2YWxhcnJheTxfVHA+ID4gX0Jhc2U7DQogICAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsNCg0KICAg ICAgICBfVW5GdW5DbG9zIChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIF9UcCBfX2YoX1RwKSkN CiAgICAgICAgICAgICAgICA6IF9CYXNlIChfX3YsIF9fZikge30NCiAgICB9Ow0KDQoNCg0KDQog ICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3MsIGNsYXNzPiBjbGFzcyBfTWV0YTEsDQogICAgICAg IHRlbXBsYXRlPGNsYXNzLCBjbGFzcz4gY2xhc3MgTWV0YTIsDQogICAgICAgIGNsYXNzIF9Eb20x LCBjbGFzcyBfRG9tMj4gY2xhc3MgX0JpbkZ1bkNsb3M7DQoNCiAgICB0ZW1wbGF0ZTxjbGFzcyBf RG9tMSwgY2xhc3MgX0RvbTI+IGNsYXNzIF9CaW5GdW5CYXNlIHsNCiAgICBwdWJsaWM6DQogICAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsNCiAgICAg ICAgdHlwZWRlZiB2YWx1ZV90eXBlIF9WdDsNCg0KICAgICAgICBfQmluRnVuQmFzZSAoY29uc3Qg X0RvbTEmIF9fZTEsIGNvbnN0IF9Eb20yJiBfX2UyLA0KICAgICAgICAgICAgICAgICAgICAgIF9W dCBfX2YgKF9WdCwgX1Z0KSkNCiAgICAgICAgICAgICAgICA6IF9NX2V4cHIxIChfX2UxKSwgX01f ZXhwcjIgKF9fZTIpLCBfTV9mdW5jIChfX2YpIHt9DQoNCiAgICAgICAgdmFsdWVfdHlwZSBvcGVy YXRvcltdIChzaXplX3QgX19pKSBjb25zdA0KICAgICAgICB7IHJldHVybiBfTV9mdW5jIChfTV9l eHByMVtfX2ldLCBfTV9leHByMltfX2ldKTsgfQ0KICAgICAgICBzaXplX3Qgc2l6ZSAoKSBjb25z dCB7IHJldHVybiBfTV9leHByMS5zaXplICgpOyB9DQoNCiAgICBwcml2YXRlOg0KICAgICAgICBj b25zdCBfRG9tMSYgX01fZXhwcjE7DQogICAgICAgIGNvbnN0IF9Eb20yJiBfTV9leHByMjsNCiAg ICAgICAgX1Z0ICgqX01fZnVuYykoX1Z0LCBfVnQpOw0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTxj bGFzcyBfRG9tPiBjbGFzcyBfQmluRnVuQmFzZTEgew0KICAgIHB1YmxpYzoNCiAgICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGUgOw0KICAgICAgICB0eXBl ZGVmIHZhbHVlX3R5cGUgX1Z0Ow0KDQogICAgICAgIF9CaW5GdW5CYXNlMSAoY29uc3QgX1Z0JiBf X2MsIGNvbnN0IF9Eb20mIF9fZSwgX1Z0IF9fZihfVnQsIF9WdCkpDQogICAgICAgICAgICAgICAg OiBfTV9leHByMSAoX19jKSwgX01fZXhwcjIgKF9fZSksIF9NX2Z1bmMgKF9fZikge30NCg0KICAg ICAgICB2YWx1ZV90eXBlIG9wZXJhdG9yW10gKHNpemVfdCBfX2kpIGNvbnN0DQogICAgICAgIHsg cmV0dXJuIF9NX2Z1bmMgKF9NX2V4cHIxLCBfTV9leHByMltfX2ldKTsgfQ0KICAgICAgICBzaXpl X3Qgc2l6ZSAoKSBjb25zdCB7IHJldHVybiBfTV9leHByMi5zaXplICgpOyB9DQoNCiAgICBwcml2 YXRlOg0KICAgICAgICBjb25zdCBfVnQmIF9NX2V4cHIxOw0KICAgICAgICBjb25zdCBfRG9tJiBf TV9leHByMjsNCiAgICAgICAgX1Z0ICgqX01fZnVuYykoX1Z0LCBfVnQpOw0KICAgIH07DQoNCiAg ICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBjbGFzcyBfQmluRnVuQmFzZTIgew0KICAgIHB1YmxpYzoN CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7DQog ICAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSBfVnQ7DQoNCiAgICAgICAgX0JpbkZ1bkJhc2UyIChj b25zdCBfRG9tJiBfX2UsIGNvbnN0IF9WdCYgX19jLCBfVnQgX19mKF9WdCwgX1Z0KSkNCiAgICAg ICAgICAgICAgICA6IF9NX2V4cHIxIChfX2UpLCBfTV9leHByMiAoX19jKSwgX01fZnVuYyAoX19m KSB7fQ0KDQogICAgICAgIHZhbHVlX3R5cGUgb3BlcmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QN CiAgICAgICAgeyByZXR1cm4gX01fZnVuYyAoX01fZXhwcjFbX19pXSwgX01fZXhwcjIpOyB9DQog ICAgICAgIHNpemVfdCBzaXplICgpIGNvbnN0IHsgcmV0dXJuIF9NX2V4cHIxLnNpemUgKCk7IH0N Cg0KICAgIHByaXZhdGU6DQogICAgICAgIGNvbnN0IF9Eb20mIF9NX2V4cHIxOw0KICAgICAgICBj b25zdCBfVnQmIF9NX2V4cHIyOw0KICAgICAgICBfVnQgKCpfTV9mdW5jKShfVnQsIF9WdCk7DQog ICAgfTsNCg0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4NCiAgICBzdHJ1 Y3QgX0JpbkZ1bkNsb3M8X0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+IDogX0JpbkZ1bkJhc2U8X0Rv bTEsX0RvbTI+IHsNCiAgICAgICAgdHlwZWRlZiBfQmluRnVuQmFzZTxfRG9tMSxfRG9tMj4gX0Jh c2U7DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlw ZTsNCiAgICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlIF9UcDsNCg0KICAgICAgICBfQmluRnVuQ2xv cyAoY29uc3QgX0RvbTEmIF9fZTEsIGNvbnN0IF9Eb20yJiBfX2UyLA0KICAgICAgICAgICAgICAg ICAgICAgX1RwIF9fZihfVHAsIF9UcCkpDQogICAgICAgICAgICAgICAgOiBfQmFzZSAoX19lMSwg X19lMiwgX19mKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAg c3RydWN0IF9CaW5GdW5DbG9zPF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4NCiAgICAgICAg OiBfQmluRnVuQmFzZTx2YWxhcnJheTxfVHA+LCB2YWxhcnJheTxfVHA+ID4gew0KICAgICAgICB0 eXBlZGVmIF9CaW5GdW5CYXNlPHZhbGFycmF5PF9UcD4sIHZhbGFycmF5PF9UcD4gPiBfQmFzZTsN CiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCg0KICAgICAgICBfQmluRnVuQ2xvcyAo Y29uc3QgdmFsYXJyYXk8X1RwPiYgX192LCBjb25zdCB2YWxhcnJheTxfVHA+JiBfX3csDQogICAg ICAgICAgICAgICAgICAgICBfVHAgX19mKF9UcCwgX1RwKSkNCiAgICAgICAgICAgICAgICA6IF9C YXNlIChfX3YsIF9fdywgX19mKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9t Pg0KICAgIHN0cnVjdCBfQmluRnVuQ2xvczxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlPg0KICAgICAgICA6IF9CaW5GdW5CYXNlPF9Eb20sdmFsYXJyYXk8dHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gPiB7DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Rv bTo6dmFsdWVfdHlwZSBfVHA7DQogICAgICAgIHR5cGVkZWYgX0JpbkZ1bkJhc2U8X0RvbSx2YWxh cnJheTxfVHA+ID4gX0Jhc2U7DQogICAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQoNCiAg ICAgICAgX0JpbkZ1bkNsb3MgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3QgdmFsYXJyYXk8X1RwPiYg X192LA0KICAgICAgICAgICAgICAgICAgICAgX1RwIF9fZihfVHAsIF9UcCkpDQogICAgICAgICAg ICAgICAgOiBfQmFzZSAoX19lLCBfX3YsIF9fZikge30NCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8 Y2xhc3MgX0RvbT4NCiAgICBzdHJ1Y3QgX0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9FeHByLHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4NCiAgICAgICAgOiBfQmluRnVuQmFzZTx2YWxhcnJh eTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPixfRG9tPiB7DQogICAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7DQogICAgICAgIHR5cGVkZWYgX0JpbkZ1bkJhc2U8 X0RvbSx2YWxhcnJheTxfVHA+ID4gX0Jhc2U7DQogICAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5 cGU7DQoNCiAgICAgICAgX0JpbkZ1bkNsb3MgKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgY29u c3QgX0RvbSYgX19lLA0KICAgICAgICAgICAgICAgICAgICAgX1RwIF9fZihfVHAsIF9UcCkpDQog ICAgICAgICAgICAgICAgOiBfQmFzZSAoX192LCBfX2UsIF9fZikge30NCiAgICB9Ow0KDQogICAg dGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICBzdHJ1Y3QgX0JpbkZ1bkNsb3M8X0V4cHIsX0NvbnN0 YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4NCiAgICAgICAgOiBfQmluRnVuQmFz ZTI8X0RvbT4gew0KICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1Rw Ow0KICAgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KICAgICAgICB0eXBlZGVmIF9CaW5G dW5CYXNlMjxfRG9tPiBfQmFzZTsNCg0KICAgICAgICBfQmluRnVuQ2xvcyAoY29uc3QgX0RvbSYg X19lLCBjb25zdCBfVHAmIF9fdCwgX1RwIF9fZiAoX1RwLCBfVHApKQ0KICAgICAgICAgICAgICAg IDogX0Jhc2UgKF9fZSwgX190LCBfX2YpIHt9DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPGNsYXNz IF9Eb20+DQogICAgc3RydWN0IF9CaW5GdW5DbG9zPF9Db25zdGFudCxfRXhwcixfRG9tLHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGU+DQogICAgICAgIDogX0JpbkZ1bkJhc2UxPF9Eb20+IHsNCiAg ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsNCiAgICAgICAgdHlw ZWRlZiBfVHAgdmFsdWVfdHlwZTsNCiAgICAgICAgdHlwZWRlZiBfQmluRnVuQmFzZTE8X0RvbT4g X0Jhc2U7DQoNCiAgICAgICAgX0JpbkZ1bkNsb3MgKGNvbnN0IF9UcCYgX190LCBjb25zdCBfRG9t JiBfX2UsIF9UcCBfX2YgKF9UcCwgX1RwKSkNCiAgICAgICAgICAgICAgICA6IF9CYXNlIChfX3Qs IF9fZSwgX19mKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAg c3RydWN0IF9CaW5GdW5DbG9zPF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4NCiAgICAgICAg OiBfQmluRnVuQmFzZTI8dmFsYXJyYXk8X1RwPiA+IHsNCiAgICAgICAgdHlwZWRlZiBfQmluRnVu QmFzZTI8dmFsYXJyYXk8X1RwPiA+IF9CYXNlOw0KICAgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90 eXBlOw0KDQogICAgICAgIF9CaW5GdW5DbG9zIChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIGNv bnN0IF9UcCYgX190LA0KICAgICAgICAgICAgICAgICAgICAgX1RwIF9fZihfVHAsIF9UcCkpDQog ICAgICAgICAgICAgICAgOiBfQmFzZSAoX192LCBfX3QsIF9fZikge30NCiAgICB9Ow0KDQogICAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIHN0cnVjdCBfQmluRnVuQ2xvczxfQ29uc3RhbnQs X1ZhbEFycmF5LF9UcCxfVHA+DQogICAgICAgIDogX0JpbkZ1bkJhc2UxPHZhbGFycmF5PF9UcD4g PiB7DQogICAgICAgIHR5cGVkZWYgX0JpbkZ1bkJhc2UxPHZhbGFycmF5PF9UcD4gPiBfQmFzZTsN CiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCg0KICAgICAgICBfQmluRnVuQ2xvcyAo Y29uc3QgX1RwJiBfX3QsIGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwNCiAgICAgICAgICAgICAg ICAgICAgIF9UcCBfX2YgKF9UcCwgX1RwKSkNCiAgICAgICAgICAgICAgICA6IF9CYXNlIChfX3Qs IF9fdiwgX19mKSB7fQ0KICAgIH07DQoNCg0KDQoNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9E b20sIHR5cGVuYW1lIF9Bcmc+IGNsYXNzIF9GdW5CYXNlIHsNCiAgICBwdWJsaWM6DQogICAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOw0KDQogICAgICAg IF9GdW5CYXNlIChjb25zdCBfRG9tJiBfX2UsIHZhbHVlX3R5cGUgX19mKF9BcmcpKQ0KICAgICAg ICAgICAgICAgIDogX01fZXhwciAoX19lKSwgX01fZnVuYyAoX19mKSB7fQ0KDQogICAgICAgIHZh bHVlX3R5cGUgb3BlcmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QNCiAgICAgICAgeyByZXR1cm4g X01fZnVuYyAoX01fZXhwcltfX2ldKTsgfQ0KICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg cmV0dXJuIF9NX2V4cHIuc2l6ZSAoKTt9DQoNCiAgICBwcml2YXRlOg0KICAgICAgICBjb25zdCBf RG9tJiBfTV9leHByOw0KICAgICAgICB2YWx1ZV90eXBlICgqX01fZnVuYykoX0FyZyk7DQogICAg fTsNCg0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+DQogICAgc3RydWN0IF9WYWxGdW5DbG9zPF9F eHByLF9Eb20+DQogICAgICAgIDogX0Z1bkJhc2U8X0RvbSwgdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZT4gew0KICAgICAgICB0eXBlZGVmIF9GdW5CYXNlPF9Eb20sIHR5cGVuYW1lIF9Eb206OnZh bHVlX3R5cGU+IF9CYXNlOw0KICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90 eXBlIHZhbHVlX3R5cGU7DQogICAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSBfVHA7DQoNCiAgICAg ICAgX1ZhbEZ1bkNsb3MgKGNvbnN0IF9Eb20mIF9fZSwgX1RwIF9fZiAoX1RwKSkgOiBfQmFzZSAo X19lLCBfX2YpIHt9DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICBz dHJ1Y3QgX1ZhbEZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4NCiAgICAgICAgOiBfRnVuQmFzZTx2YWxh cnJheTxfVHA+LCBfVHA+IHsNCiAgICAgICAgdHlwZWRlZiBfRnVuQmFzZTx2YWxhcnJheTxfVHA+ LCBfVHA+IF9CYXNlOw0KICAgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KDQogICAgICAg IF9WYWxGdW5DbG9zIChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIF9UcCBfX2YoX1RwKSkNCiAg ICAgICAgICAgICAgICA6IF9CYXNlIChfX3YsIF9fZikge30NCiAgICB9Ow0KDQogICAgdGVtcGxh dGU8Y2xhc3MgX0RvbT4NCiAgICBzdHJ1Y3QgX1JlZkZ1bkNsb3M8X0V4cHIsX0RvbT4gOg0KICAg ICAgICBfRnVuQmFzZTxfRG9tLCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJj4gew0K ICAgICAgICB0eXBlZGVmIF9GdW5CYXNlPF9Eb20sIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVl X3R5cGUmPiBfQmFzZTsNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlw ZSB2YWx1ZV90eXBlOw0KICAgICAgICB0eXBlZGVmIHZhbHVlX3R5cGUgX1RwOw0KDQogICAgICAg IF9SZWZGdW5DbG9zIChjb25zdCBfRG9tJiBfX2UsIF9UcCBfX2YgKGNvbnN0IF9UcCYpKQ0KICAg ICAgICAgICAgICAgIDogX0Jhc2UgKF9fZSwgX19mKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+DQogICAgc3RydWN0IF9SZWZGdW5DbG9zPF9WYWxBcnJheSxfVHA+DQog ICAgICAgIDogX0Z1bkJhc2U8dmFsYXJyYXk8X1RwPiwgY29uc3QgX1RwJj4gew0KICAgICAgICB0 eXBlZGVmIF9GdW5CYXNlPHZhbGFycmF5PF9UcD4sIGNvbnN0IF9UcCY+IF9CYXNlOw0KICAgICAg ICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KDQogICAgICAgIF9SZWZGdW5DbG9zIChjb25zdCB2 YWxhcnJheTxfVHA+JiBfX3YsIF9UcCBfX2YoY29uc3QgX1RwJikpDQogICAgICAgICAgICAgICAg OiBfQmFzZSAoX192LCBfX2YpIHt9DQogICAgfTsNCg0KDQoNCg0KDQogICAgdGVtcGxhdGU8dGVt cGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLCB0eXBlbmFtZSBfQXJnPg0KICAgIGNsYXNzIF9VbkJh c2Ugew0KICAgIHB1YmxpYzoNCiAgICAgICAgdHlwZWRlZiBfT3Blcjx0eXBlbmFtZSBfQXJnOjp2 YWx1ZV90eXBlPiBfT3A7DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX09wOjpyZXN1bHRfdHlw ZSB2YWx1ZV90eXBlOw0KDQogICAgICAgIF9VbkJhc2UgKGNvbnN0IF9BcmcmIF9fZSkgOiBfTV9l eHByKF9fZSkge30NCiAgICAgICAgdmFsdWVfdHlwZSBvcGVyYXRvcltdIChzaXplX3QpIGNvbnN0 Ow0KICAgICAgICBzaXplX3Qgc2l6ZSAoKSBjb25zdCB7IHJldHVybiBfTV9leHByLnNpemUgKCk7 IH0NCg0KICAgIHByaXZhdGU6DQogICAgICAgIGNvbnN0IF9BcmcmIF9NX2V4cHI7DQogICAgfTsN Cg0KICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBfT3BlciwgdHlwZW5hbWUgX0Fy Zz4NCiAgICBpbmxpbmUgdHlwZW5hbWUgX1VuQmFzZTxfT3BlciwgX0FyZz46OnZhbHVlX3R5cGUN CiAgICBfVW5CYXNlPF9PcGVyLCBfQXJnPjo6b3BlcmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QN CiAgICB7IHJldHVybiBfT3AoKSAoX01fZXhwcltfX2ldKTsgfQ0KDQogICAgdGVtcGxhdGU8dGVt cGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLCBjbGFzcyBfRG9tPg0KICAgIHN0cnVjdCBfVW5DbG9z PF9PcGVyLCBfRXhwciwgX0RvbT4gOiBfVW5CYXNlPF9PcGVyLCBfRG9tPiB7DQogICAgICAgIHR5 cGVkZWYgX0RvbSBfQXJnOw0KICAgICAgICB0eXBlZGVmIF9VbkJhc2U8X09wZXIsIF9Eb20+IF9C YXNlOw0KICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5 cGU7DQoNCiAgICAgICAgX1VuQ2xvcyAoY29uc3QgX0FyZyYgX19lKSA6IF9CYXNlKF9fZSkge30N CiAgICB9Ow0KDQogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLCB0eXBl bmFtZSBfVHA+DQogICAgc3RydWN0IF9VbkNsb3M8X09wZXIsIF9WYWxBcnJheSwgX1RwPiA6IF9V bkJhc2U8X09wZXIsIHZhbGFycmF5PF9UcD4gPiB7DQogICAgICAgIHR5cGVkZWYgdmFsYXJyYXk8 X1RwPiBfQXJnOw0KICAgICAgICB0eXBlZGVmIF9VbkJhc2U8X09wZXIsIHZhbGFycmF5PF9UcD4g PiBfQmFzZTsNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1 ZV90eXBlOw0KDQogICAgICAgIF9VbkNsb3MgKGNvbnN0IF9BcmcmIF9fZSkgOiBfQmFzZShfX2Up IHt9DQogICAgfTsNCg0KDQoNCg0KDQoNCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xh c3MgX09wZXIsDQogICAgICAgIHR5cGVuYW1lIF9GaXJzdEFyZywgdHlwZW5hbWUgX1NlY29uZEFy Zz4NCiAgICBjbGFzcyBfQmluQmFzZSB7DQogICAgcHVibGljOg0KICAgICAgICB0eXBlZGVmIF9P cGVyPHR5cGVuYW1lIF9GaXJzdEFyZzo6dmFsdWVfdHlwZT4gX09wOw0KICAgICAgICB0eXBlZGVm IHR5cGVuYW1lIF9PcDo6cmVzdWx0X3R5cGUgdmFsdWVfdHlwZTsNCg0KICAgICAgICBfQmluQmFz ZSAoY29uc3QgX0ZpcnN0QXJnJiBfX2UxLCBjb25zdCBfU2Vjb25kQXJnJiBfX2UyKQ0KICAgICAg ICAgICAgICAgIDogX01fZXhwcjEgKF9fZTEpLCBfTV9leHByMiAoX19lMikge30NCiAgICAgICAg dmFsdWVfdHlwZSBvcGVyYXRvcltdIChzaXplX3QpIGNvbnN0Ow0KICAgICAgICBzaXplX3Qgc2l6 ZSAoKSBjb25zdCB7IHJldHVybiBfTV9leHByMS5zaXplICgpOyB9DQoNCiAgICBwcml2YXRlOg0K ICAgICAgICBjb25zdCBfRmlyc3RBcmcmIF9NX2V4cHIxOw0KICAgICAgICBjb25zdCBfU2Vjb25k QXJnJiBfTV9leHByMjsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNs YXNzIF9PcGVyLA0KICAgICAgICB0eXBlbmFtZSBfRmlyc3RBcmcsIHR5cGVuYW1lIF9TZWNvbmRB cmc+DQogICAgaW5saW5lIHR5cGVuYW1lIF9CaW5CYXNlPF9PcGVyLF9GaXJzdEFyZyxfU2Vjb25k QXJnPjo6dmFsdWVfdHlwZQ0KICAgIF9CaW5CYXNlPF9PcGVyLF9GaXJzdEFyZyxfU2Vjb25kQXJn Pjo6b3BlcmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QNCiAgICB7IHJldHVybiBfT3AoKSAoX01f ZXhwcjFbX19pXSwgX01fZXhwcjJbX19pXSk7IH0NCg0KDQogICAgdGVtcGxhdGU8dGVtcGxhdGU8 Y2xhc3M+IGNsYXNzIF9PcGVyLCBjbGFzcyBfQ2xvcz4NCiAgICBjbGFzcyBfQmluQmFzZTIgew0K ICAgIHB1YmxpYzoNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ2xvczo6dmFsdWVfdHlwZSBf VnQ7DQogICAgICAgIHR5cGVkZWYgX09wZXI8X1Z0PiBfT3A7DQogICAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX09wOjpyZXN1bHRfdHlwZSB2YWx1ZV90eXBlOw0KDQogICAgICAgIF9CaW5CYXNlMiAo Y29uc3QgX0Nsb3MmIF9fZSwgY29uc3QgX1Z0JiBfX3QpDQogICAgICAgICAgICAgICAgOiBfTV9l eHByMSAoX19lKSwgX01fZXhwcjIgKF9fdCkge30NCiAgICAgICAgdmFsdWVfdHlwZSBvcGVyYXRv cltdIChzaXplX3QpIGNvbnN0Ow0KICAgICAgICBzaXplX3Qgc2l6ZSAoKSBjb25zdCB7IHJldHVy biBfTV9leHByMS5zaXplICgpOyB9DQoNCiAgICBwcml2YXRlOg0KICAgICAgICBjb25zdCBfQ2xv cyYgX01fZXhwcjE7DQogICAgICAgIGNvbnN0IF9WdCYgX01fZXhwcjI7DQogICAgfTsNCg0KICAg IHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBfT3BlciwgY2xhc3MgX0Nsb3M+DQogICAg aW5saW5lIHR5cGVuYW1lIF9CaW5CYXNlMjxfT3BlcixfQ2xvcz46OnZhbHVlX3R5cGUNCiAgICBf QmluQmFzZTI8X09wZXIsX0Nsb3M+OjpvcGVyYXRvcltdIChzaXplX3QgX19pKSBjb25zdA0KICAg IHsgcmV0dXJuIF9PcCgpIChfTV9leHByMVtfX2ldLCBfTV9leHByMik7IH0NCg0KDQogICAgdGVt cGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLCBjbGFzcyBfQ2xvcz4NCiAgICBjbGFz cyBfQmluQmFzZTEgew0KICAgIHB1YmxpYzoNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ2xv czo6dmFsdWVfdHlwZSBfVnQ7DQogICAgICAgIHR5cGVkZWYgX09wZXI8X1Z0PiBfT3A7DQogICAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX09wOjpyZXN1bHRfdHlwZSB2YWx1ZV90eXBlOw0KDQogICAg ICAgIF9CaW5CYXNlMSAoY29uc3QgX1Z0JiBfX3QsIGNvbnN0IF9DbG9zJiBfX2UpDQogICAgICAg ICAgICAgICAgOiBfTV9leHByMSAoX190KSwgX01fZXhwcjIgKF9fZSkge30NCiAgICAgICAgdmFs dWVfdHlwZSBvcGVyYXRvcltdIChzaXplX3QpIGNvbnN0Ow0KICAgICAgICBzaXplX3Qgc2l6ZSAo KSBjb25zdCB7IHJldHVybiBfTV9leHByMi5zaXplICgpOyB9DQoNCiAgICBwcml2YXRlOg0KICAg ICAgICBjb25zdCBfVnQmIF9NX2V4cHIxOw0KICAgICAgICBjb25zdCBfQ2xvcyYgX01fZXhwcjI7 DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBfT3BlciwgY2xh c3MgX0Nsb3M+DQogICAgaW5saW5lIHR5cGVuYW1lDQogICAgX0JpbkJhc2UxPF9PcGVyLF9DbG9z Pjo6dmFsdWVfdHlwZQ0KICAgIF9CaW5CYXNlMTxfT3BlcixfQ2xvcz46OiBvcGVyYXRvcltdIChz aXplX3QgX19pKSBjb25zdA0KICAgIHsgcmV0dXJuIF9PcCgpIChfTV9leHByMSwgX01fZXhwcjJb X19pXSk7IH0NCg0KDQogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLCBj bGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+DQogICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLCBfRXhw ciwgX0V4cHIsIF9Eb20xLCBfRG9tMj4NCiAgICAgICAgOiBfQmluQmFzZTxfT3BlcixfRG9tMSxf RG9tMj4gew0KICAgICAgICB0eXBlZGVmIF9CaW5CYXNlPF9PcGVyLF9Eb20xLF9Eb20yPiBfQmFz ZTsNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBl Ow0KDQogICAgICAgIF9CaW5DbG9zKGNvbnN0IF9Eb20xJiBfX2UxLCBjb25zdCBfRG9tMiYgX19l MikgOiBfQmFzZShfX2UxLCBfX2UyKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0 ZTxjbGFzcz4gY2xhc3MgX09wZXIsIHR5cGVuYW1lIF9UcD4NCiAgICBzdHJ1Y3QgX0JpbkNsb3M8 X09wZXIsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPg0KICAgICAgICA6IF9CaW5CYXNlPF9P cGVyLHZhbGFycmF5PF9UcD4sdmFsYXJyYXk8X1RwPiA+IHsNCiAgICAgICAgdHlwZWRlZiBfQmlu QmFzZTxfT3Blcix2YWxhcnJheTxfVHA+LHZhbGFycmF5PF9UcD4gPiBfQmFzZTsNCiAgICAgICAg dHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCg0KICAgICAgICBfQmluQ2xvcyAoY29uc3QgdmFsYXJy YXk8X1RwPiYgX192LCBjb25zdCB2YWxhcnJheTxfVHA+JiBfX3cpDQogICAgICAgICAgICAgICAg OiBfQmFzZSAoX192LCBfX3cpIHt9DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNs YXNzPiBjbGFzcyBfT3BlciwgY2xhc3MgX0RvbT4NCiAgICBzdHJ1Y3QgX0JpbkNsb3M8X09wZXIs X0V4cHIsX1ZhbEFycmF5LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4NCiAgICAgICAg OiBfQmluQmFzZTxfT3BlcixfRG9tLHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+ ID4gew0KICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOw0KICAg ICAgICB0eXBlZGVmIF9CaW5CYXNlPF9PcGVyLF9Eb20sdmFsYXJyYXk8X1RwPiA+IF9CYXNlOw0K ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7DQoN CiAgICAgICAgX0JpbkNsb3MoY29uc3QgX0RvbSYgX19lMSwgY29uc3QgdmFsYXJyYXk8X1RwPiYg X19lMikNCiAgICAgICAgICAgICAgICA6IF9CYXNlIChfX2UxLCBfX2UyKSB7fQ0KICAgIH07DQoN CiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xhc3MgX09wZXIsIGNsYXNzIF9Eb20+DQog ICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlLF9Eb20+DQogICAgICAgIDogX0JpbkJhc2U8X09wZXIsdmFsYXJyYXk8dHlwZW5h bWUgX0RvbTo6dmFsdWVfdHlwZT4sX0RvbT4gew0KICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9E b206OnZhbHVlX3R5cGUgX1RwOw0KICAgICAgICB0eXBlZGVmIF9CaW5CYXNlPF9PcGVyLHZhbGFy cmF5PF9UcD4sX0RvbT4gX0Jhc2U7DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZh bHVlX3R5cGUgdmFsdWVfdHlwZTsNCg0KICAgICAgICBfQmluQ2xvcyAoY29uc3QgdmFsYXJyYXk8 X1RwPiYgX19lMSwgY29uc3QgX0RvbSYgX19lMikNCiAgICAgICAgICAgICAgICA6IF9CYXNlIChf X2UxLCBfX2UyKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xh c3MgX09wZXIsIGNsYXNzIF9Eb20+DQogICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLF9FeHByLF9D b25zdGFudCxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+DQogICAgICAgIDogX0JpbkJh c2UyPF9PcGVyLF9Eb20+IHsNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90 eXBlIF9UcDsNCiAgICAgICAgdHlwZWRlZiBfQmluQmFzZTI8X09wZXIsX0RvbT4gX0Jhc2U7DQog ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsNCg0K ICAgICAgICBfQmluQ2xvcyAoY29uc3QgX0RvbSYgX19lMSwgY29uc3QgX1RwJiBfX2UyKSA6IF9C YXNlIChfX2UxLCBfX2UyKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFz cz4gY2xhc3MgX09wZXIsIGNsYXNzIF9Eb20+DQogICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLF9D b25zdGFudCxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+DQogICAgICAgIDog X0JpbkJhc2UxPF9PcGVyLF9Eb20+IHsNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlIF9UcDsNCiAgICAgICAgdHlwZWRlZiBfQmluQmFzZTE8X09wZXIsX0RvbT4gX0Jh c2U7DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlw ZTsNCg0KICAgICAgICBfQmluQ2xvcyAoY29uc3QgX1RwJiBfX2UxLCBjb25zdCBfRG9tJiBfX2Uy KSA6IF9CYXNlIChfX2UxLCBfX2UyKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0 ZTxjbGFzcz4gY2xhc3MgX09wZXIsIHR5cGVuYW1lIF9UcD4NCiAgICBzdHJ1Y3QgX0JpbkNsb3M8 X09wZXIsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPg0KICAgICAgICA6IF9CaW5CYXNlMjxf T3Blcix2YWxhcnJheTxfVHA+ID4gew0KICAgICAgICB0eXBlZGVmIF9CaW5CYXNlMjxfT3Blcix2 YWxhcnJheTxfVHA+ID4gX0Jhc2U7DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZh bHVlX3R5cGUgdmFsdWVfdHlwZTsNCg0KICAgICAgICBfQmluQ2xvcyAoY29uc3QgdmFsYXJyYXk8 X1RwPiYgX192LCBjb25zdCBfVHAmIF9fdCkNCiAgICAgICAgICAgICAgICA6IF9CYXNlIChfX3Ys IF9fdCkge30NCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9P cGVyLCB0eXBlbmFtZSBfVHA+DQogICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLF9Db25zdGFudCxf VmFsQXJyYXksX1RwLF9UcD4NCiAgICAgICAgOiBfQmluQmFzZTE8X09wZXIsdmFsYXJyYXk8X1Rw PiA+IHsNCiAgICAgICAgdHlwZWRlZiBfQmluQmFzZTE8X09wZXIsdmFsYXJyYXk8X1RwPiA+IF9C YXNlOw0KICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5 cGU7DQoNCiAgICAgICAgX0JpbkNsb3MgKGNvbnN0IF9UcCYgX190LCBjb25zdCB2YWxhcnJheTxf VHA+JiBfX3YpDQogICAgICAgICAgICAgICAgOiBfQmFzZSAoX190LCBfX3YpIHt9DQogICAgfTsN Cg0KDQoNCg0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0RvbT4gY2xhc3MgX1NCYXNlIHsNCiAg ICBwdWJsaWM6DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSB2YWx1 ZV90eXBlOw0KDQogICAgICAgIF9TQmFzZSAoY29uc3QgX0RvbSYgX19lLCBjb25zdCBzbGljZSYg X19zKQ0KICAgICAgICAgICAgICAgIDogX01fZXhwciAoX19lKSwgX01fc2xpY2UgKF9fcykge30N CiAgICAgICAgdmFsdWVfdHlwZSBvcGVyYXRvcltdIChzaXplX3QgX19pKSBjb25zdA0KICAgICAg ICB7IHJldHVybiBfTV9leHByW19NX3NsaWNlLnN0YXJ0ICgpICsgX19pICogX01fc2xpY2Uuc3Ry aWRlICgpXTsgfQ0KICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3NsaWNl LnNpemUgKCk7IH0NCg0KICAgIHByaXZhdGU6DQogICAgICAgIGNvbnN0IF9Eb20mIF9NX2V4cHI7 DQogICAgICAgIGNvbnN0IHNsaWNlJiBfTV9zbGljZTsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPiBjbGFzcyBfU0Jhc2U8X0FycmF5PF9UcD4gPiB7DQogICAgcHVibGljOg0K ICAgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KDQogICAgICAgIF9TQmFzZSAoX0FycmF5 PF9UcD4gX19hLCBjb25zdCBzbGljZSYgX19zKQ0KICAgICAgICAgICAgICAgIDogX01fYXJyYXkg KF9fYS5fTV9kYXRhK19fcy5zdGFydCgpKSwgX01fc2l6ZSAoX19zLnNpemUoKSksDQogICAgICAg ICAgICAgICAgICBfTV9zdHJpZGUgKF9fcy5zdHJpZGUoKSkge30NCiAgICAgICAgdmFsdWVfdHlw ZSBvcGVyYXRvcltdIChzaXplX3QgX19pKSBjb25zdA0KICAgICAgICB7IHJldHVybiBfTV9hcnJh eS5fTV9kYXRhW19faSAqIF9NX3N0cmlkZV07IH0NCiAgICAgICAgc2l6ZV90IHNpemUoKSBjb25z dCB7IHJldHVybiBfTV9zaXplOyB9DQoNCiAgICBwcml2YXRlOg0KICAgICAgICBjb25zdCBfQXJy YXk8X1RwPiBfTV9hcnJheTsNCiAgICAgICAgY29uc3Qgc2l6ZV90IF9NX3NpemU7DQogICAgICAg IGNvbnN0IHNpemVfdCBfTV9zdHJpZGU7DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPGNsYXNzIF9E b20+IHN0cnVjdCBfU0Nsb3M8X0V4cHIsX0RvbT4gOiBfU0Jhc2U8X0RvbT4gew0KICAgICAgICB0 eXBlZGVmIF9TQmFzZTxfRG9tPiBfQmFzZTsNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFz ZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOw0KDQogICAgICAgIF9TQ2xvcyAoY29uc3QgX0RvbSYg X19lLCBjb25zdCBzbGljZSYgX19zKSA6IF9CYXNlIChfX2UsIF9fcykge30NCiAgICB9Ow0KDQog ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIHN0cnVjdCBfU0Nsb3M8X1ZhbEFycmF5LF9U cD4gOiBfU0Jhc2U8X0FycmF5PF9UcD4gPiB7DQogICAgICAgIHR5cGVkZWYgX1NCYXNlPF9BcnJh eTxfVHA+ID4gX0Jhc2U7DQogICAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQoNCiAgICAg ICAgX1NDbG9zIChfQXJyYXk8X1RwPiBfX2EsIGNvbnN0IHNsaWNlJiBfX3MpIDogX0Jhc2UgKF9f YSwgX19zKSB7fQ0KICAgIH07DQoNCg0KDQoNCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBjbGFz cyBfR0Jhc2Ugew0KICAgIHB1YmxpYzoNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlIHZhbHVlX3R5cGU7DQoNCiAgICAgICAgX0dCYXNlIChjb25zdCBfRG9tJiBfX2Us IGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSkNCiAgICAgICAgICAgICAgICA6IF9NX2V4cHIg KF9fZSksIF9NX2luZGV4KF9faSkge30NCiAgICAgICAgdmFsdWVfdHlwZSBvcGVyYXRvcltdIChz aXplX3QgX19pKSBjb25zdA0KICAgICAgICB7IHJldHVybiBfTV9leHByW19NX2luZGV4W19faV1d OyB9DQogICAgICAgIHNpemVfdCBzaXplICgpIGNvbnN0IHsgcmV0dXJuIF9NX2luZGV4LnNpemUo KTsgfQ0KDQogICAgcHJpdmF0ZToNCiAgICAgICAgY29uc3QgX0RvbSYgX01fZXhwcjsNCiAgICAg ICAgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX01faW5kZXg7DQogICAgfTsNCg0KICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4gY2xhc3MgX0dCYXNlPF9BcnJheTxfVHA+ID4gew0KICAgIHB1Ymxp YzoNCiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCg0KICAgICAgICBfR0Jhc2UgKF9B cnJheTxfVHA+IF9fYSwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19pKQ0KICAgICAgICAgICAg ICAgIDogX01fYXJyYXkgKF9fYSksIF9NX2luZGV4KF9faSkge30NCiAgICAgICAgdmFsdWVfdHlw ZSBvcGVyYXRvcltdIChzaXplX3QgX19pKSBjb25zdA0KICAgICAgICB7IHJldHVybiBfTV9hcnJh eS5fTV9kYXRhW19NX2luZGV4W19faV1dOyB9DQogICAgICAgIHNpemVfdCBzaXplICgpIGNvbnN0 IHsgcmV0dXJuIF9NX2luZGV4LnNpemUoKTsgfQ0KDQogICAgcHJpdmF0ZToNCiAgICAgICAgY29u c3QgX0FycmF5PF9UcD4gX01fYXJyYXk7DQogICAgICAgIGNvbnN0IHZhbGFycmF5PHNpemVfdD4m IF9NX2luZGV4Ow0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBzdHJ1Y3QgX0dD bG9zPF9FeHByLF9Eb20+IDogX0dCYXNlPF9Eb20+IHsNCiAgICAgICAgdHlwZWRlZiBfR0Jhc2U8 X0RvbT4gX0Jhc2U7DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUg dmFsdWVfdHlwZTsNCg0KICAgICAgICBfR0Nsb3MgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3QgdmFs YXJyYXk8c2l6ZV90PiYgX19pKQ0KICAgICAgICAgICAgICAgIDogX0Jhc2UgKF9fZSwgX19pKSB7 fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgc3RydWN0IF9HQ2xv czxfVmFsQXJyYXksX1RwPiA6IF9HQmFzZTxfQXJyYXk8X1RwPiA+IHsNCiAgICAgICAgdHlwZWRl ZiBfR0Jhc2U8X0FycmF5PF9UcD4gPiBfQmFzZTsNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf QmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOw0KDQogICAgICAgIF9HQ2xvcyAoX0FycmF5PF9U cD4gX19hLCBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX2kpDQogICAgICAgICAgICAgICAgOiBf QmFzZSAoX19hLCBfX2kpIHt9DQogICAgfTsNCg0KDQoNCg0KDQogICAgdGVtcGxhdGU8Y2xhc3Mg X0RvbT4gY2xhc3MgX0lCYXNlIHsNCiAgICBwdWJsaWM6DQogICAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX0RvbTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOw0KDQogICAgICAgIF9JQmFzZSAoY29uc3Qg X0RvbSYgX19lLCBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX2kpDQogICAgICAgICAgICAgICAg OiBfTV9leHByIChfX2UpLCBfTV9pbmRleCAoX19pKSB7fQ0KICAgICAgICB2YWx1ZV90eXBlIG9w ZXJhdG9yW10gKHNpemVfdCBfX2kpIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIF9NX2V4cHJbX01f aW5kZXhbX19pXV07IH0NCiAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9p bmRleC5zaXplKCk7IH0NCg0KICAgIHByaXZhdGU6DQogICAgICAgIGNvbnN0IF9Eb20mIF9NX2V4 cHI7DQogICAgICAgIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9NX2luZGV4Ow0KICAgIH07DQoN CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBzdHJ1Y3QgX0lDbG9zPF9FeHByLF9Eb20+IDogX0lC YXNlPF9Eb20+IHsNCiAgICAgICAgdHlwZWRlZiBfSUJhc2U8X0RvbT4gX0Jhc2U7DQogICAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsNCg0KICAgICAg ICBfSUNsb3MgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19pKQ0K ICAgICAgICAgICAgICAgIDogX0Jhc2UgKF9fZSwgX19pKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgc3RydWN0IF9JQ2xvczxfVmFsQXJyYXksX1RwPiA6IF9J QmFzZTx2YWxhcnJheTxfVHA+ID4gew0KICAgICAgICB0eXBlZGVmIF9JQmFzZTx2YWxhcnJheTxf VHA+ID4gX0Jhc2U7DQogICAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQoNCiAgICAgICAg X0lDbG9zIChjb25zdCB2YWxhcnJheTxfVHA+JiBfX2EsIGNvbnN0IHZhbGFycmF5PHNpemVfdD4m IF9faSkNCiAgICAgICAgICAgICAgICA6IF9CYXNlIChfX2EsIF9faSkge30NCiAgICB9Ow0KDQoN Cg0KDQogICAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4gY2xhc3MgX0V4cHIg ew0KICAgIHB1YmxpYzoNCiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCg0KICAgICAg ICBfRXhwciAoY29uc3QgX0Nsb3MmKTsNCg0KICAgICAgICBjb25zdCBfQ2xvcyYgb3BlcmF0b3Io KSAoKSBjb25zdDsNCg0KICAgICAgICB2YWx1ZV90eXBlIG9wZXJhdG9yW10gKHNpemVfdCkgY29u c3Q7DQogICAgICAgIHZhbGFycmF5PHZhbHVlX3R5cGU+IG9wZXJhdG9yW10gKHNsaWNlKSBjb25z dDsNCiAgICAgICAgdmFsYXJyYXk8dmFsdWVfdHlwZT4gb3BlcmF0b3JbXSAoY29uc3QgZ3NsaWNl JikgY29uc3Q7DQogICAgICAgIHZhbGFycmF5PHZhbHVlX3R5cGU+IG9wZXJhdG9yW10gKGNvbnN0 IHZhbGFycmF5PGJvb2w+JikgY29uc3Q7DQogICAgICAgIHZhbGFycmF5PHZhbHVlX3R5cGU+IG9w ZXJhdG9yW10gKGNvbnN0IHZhbGFycmF5PHNpemVfdD4mKSBjb25zdDsNCg0KICAgICAgICBfRXhw cjxfVW5DbG9zPF9VbmFyeV9wbHVzLHN0ZDo6X0V4cHIsX0Nsb3M+LCB2YWx1ZV90eXBlPg0KICAg ICAgICBvcGVyYXRvcisgKCkgY29uc3Q7DQoNCiAgICAgICAgX0V4cHI8X1VuQ2xvczxuZWdhdGUs c3RkOjpfRXhwcixfQ2xvcz4sIHZhbHVlX3R5cGU+DQogICAgICAgIG9wZXJhdG9yLSAoKSBjb25z dDsNCg0KICAgICAgICBfRXhwcjxfVW5DbG9zPF9CaXR3aXNlX25vdCxzdGQ6Ol9FeHByLF9DbG9z PiwgdmFsdWVfdHlwZT4NCiAgICAgICAgb3BlcmF0b3J+ICgpIGNvbnN0Ow0KDQogICAgICAgIF9F eHByPF9VbkNsb3M8bG9naWNhbF9ub3Qsc3RkOjpfRXhwcixfQ2xvcz4sIGJvb2w+DQogICAgICAg IG9wZXJhdG9yISAoKSBjb25zdDsNCg0KICAgICAgICBzaXplX3Qgc2l6ZSAoKSBjb25zdDsNCiAg ICAgICAgdmFsdWVfdHlwZSBzdW0gKCkgY29uc3Q7DQoNCiAgICAgICAgdmFsYXJyYXk8dmFsdWVf dHlwZT4gc2hpZnQgKGludCkgY29uc3Q7DQogICAgICAgIHZhbGFycmF5PHZhbHVlX3R5cGU+IGNz aGlmdCAoaW50KSBjb25zdDsNCg0KICAgICAgdmFsdWVfdHlwZSBtaW4oKSBjb25zdDsNCiAgICAg IHZhbHVlX3R5cGUgbWF4KCkgY29uc3Q7DQoNCiAgICAgIHZhbGFycmF5PHZhbHVlX3R5cGU+IGFw cGx5KHZhbHVlX3R5cGUgKCopIChjb25zdCB2YWx1ZV90eXBlJikpIGNvbnN0Ow0KICAgICAgdmFs YXJyYXk8dmFsdWVfdHlwZT4gYXBwbHkodmFsdWVfdHlwZSAoKikgKHZhbHVlX3R5cGUpKSBjb25z dDsNCg0KICAgIHByaXZhdGU6DQogICAgICAgIGNvbnN0IF9DbG9zIF9NX2Nsb3N1cmU7DQogICAg fTsNCg0KICAgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+DQogICAgaW5saW5l DQogICAgX0V4cHI8X0Nsb3MsX1RwPjo6X0V4cHIgKGNvbnN0IF9DbG9zJiBfX2MpIDogX01fY2xv c3VyZShfX2MpIHt9DQoNCiAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPg0K ICAgIGlubGluZSBjb25zdCBfQ2xvcyYNCiAgICBfRXhwcjxfQ2xvcyxfVHA+OjpvcGVyYXRvcigp ICgpIGNvbnN0DQogICAgeyByZXR1cm4gX01fY2xvc3VyZTsgfQ0KDQogICAgdGVtcGxhdGU8Y2xh c3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4NCiAgICBpbmxpbmUgX1RwDQogICAgX0V4cHI8X0Nsb3Ms X1RwPjo6b3BlcmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QNCiAgICB7IHJldHVybiBfTV9jbG9z dXJlW19faV07IH0NCg0KICAgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+DQog ICAgaW5saW5lIHZhbGFycmF5PF9UcD4NCiAgICBfRXhwcjxfQ2xvcyxfVHA+OjpvcGVyYXRvcltd IChzbGljZSBfX3MpIGNvbnN0DQogICAgeyByZXR1cm4gX01fY2xvc3VyZVtfX3NdOyB9DQoNCiAg ICB0ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPg0KICAgIGlubGluZSB2YWxhcnJh eTxfVHA+DQogICAgX0V4cHI8X0Nsb3MsX1RwPjo6b3BlcmF0b3JbXSAoY29uc3QgZ3NsaWNlJiBf X2dzKSBjb25zdA0KICAgIHsgcmV0dXJuIF9NX2Nsb3N1cmVbX19nc107IH0NCg0KICAgIHRlbXBs YXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+DQogICAgaW5saW5lIHZhbGFycmF5PF9UcD4N CiAgICBfRXhwcjxfQ2xvcyxfVHA+OjpvcGVyYXRvcltdIChjb25zdCB2YWxhcnJheTxib29sPiYg X19tKSBjb25zdA0KICAgIHsgcmV0dXJuIF9NX2Nsb3N1cmVbX19tXTsgfQ0KDQogICAgdGVtcGxh dGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4NCiAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPg0K ICAgIF9FeHByPF9DbG9zLF9UcD46Om9wZXJhdG9yW10gKGNvbnN0IHZhbGFycmF5PHNpemVfdD4m IF9faSkgY29uc3QNCiAgICB7IHJldHVybiBfTV9jbG9zdXJlW19faV07IH0NCg0KICAgIHRlbXBs YXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+DQogICAgaW5saW5lIHNpemVfdA0KICAgIF9F eHByPF9DbG9zLF9UcD46OnNpemUgKCkgY29uc3QgeyByZXR1cm4gX01fY2xvc3VyZS5zaXplICgp OyB9DQoNCiAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4NCiAgaW5saW5lIHZh bGFycmF5PF9UcD4NCiAgX0V4cHI8X0Nsb3MsIF9UcD46OnNoaWZ0KGludCBfX24pIGNvbnN0DQog IHsgcmV0dXJuIHZhbGFycmF5PF9UcD4oX01fY2xvc3VyZSkuc2hpZnQoX19uKTsgfQ0KDQogIHRl bXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+DQogIGlubGluZSB2YWxhcnJheTxfVHA+ DQogIF9FeHByPF9DbG9zLCBfVHA+Ojpjc2hpZnQoaW50IF9fbikgY29uc3QNCiAgeyByZXR1cm4g dmFsYXJyYXk8X1RwPihfTV9jbG9zdXJlKS5jc2hpZnQoX19uKTsgfQ0KDQogIHRlbXBsYXRlPGNs YXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+DQogIGlubGluZSB2YWxhcnJheTxfVHA+DQogIF9FeHBy PF9DbG9zLCBfVHA+OjphcHBseShfVHAgX19mKGNvbnN0IF9UcCYpKSBjb25zdA0KICB7IHJldHVy biB2YWxhcnJheTxfVHA+KF9NX2Nsb3N1cmUpLmFwcGx5KF9fZik7IH0NCg0KICB0ZW1wbGF0ZTxj bGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPg0KICBpbmxpbmUgdmFsYXJyYXk8X1RwPg0KICBfRXhw cjxfQ2xvcywgX1RwPjo6YXBwbHkoX1RwIF9fZihfVHApKSBjb25zdA0KICB7IHJldHVybiB2YWxh cnJheTxfVHA+KF9NX2Nsb3N1cmUpLmFwcGx5KF9fZik7IH0NCg0KDQogICAgdGVtcGxhdGU8Y2xh c3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4NCiAgICBpbmxpbmUgX1RwDQogICAgX0V4cHI8X0Nsb3Ms X1RwPjo6c3VtICgpIGNvbnN0DQogICAgew0KICAgICAgICBzaXplX3QgX19uID0gX01fY2xvc3Vy ZS5zaXplKCk7DQogICAgICAgIGlmIChfX24gPT0gMCkgcmV0dXJuIF9UcCgpOw0KICAgICAgICBl bHNlIHsNCiAgICAgICAgICAgIF9UcCBfX3MgPSBfTV9jbG9zdXJlWy0tX19uXTsNCiAgICAgICAg ICAgIHdoaWxlIChfX24gIT0gMCkgX19zICs9IF9NX2Nsb3N1cmVbLS1fX25dOw0KICAgICAgICAg ICAgcmV0dXJuIF9fczsNCiAgICAgICAgfQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTxjbGFzcyBfQ2xv cywgdHlwZW5hbWUgX1RwPg0KICBpbmxpbmUgX1RwDQogIF9FeHByPF9DbG9zLCBfVHA+OjptaW4o KSBjb25zdA0KICB7IHJldHVybiBfX3ZhbGFycmF5X21pbihfTV9jbG9zdXJlKTsgfQ0KDQogIHRl bXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+DQogIGlubGluZSBfVHANCiAgX0V4cHI8 X0Nsb3MsIF9UcD46Om1heCgpIGNvbnN0DQogIHsgcmV0dXJuIF9fdmFsYXJyYXlfbWF4KF9NX2Ns b3N1cmUpOyB9DQoNCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tLCB0eXBlbmFtZSBfVHA+DQogICAg aW5saW5lIF9FeHByPF9VbkNsb3M8bG9naWNhbF9ub3QsX0V4cHIsX0RvbT4sIGJvb2w+DQogICAg X0V4cHI8X0RvbSxfVHA+OjpvcGVyYXRvciEgKCkgY29uc3QNCiAgICB7DQogICAgICAgIHR5cGVk ZWYgX1VuQ2xvczxsb2dpY2FsX25vdCxzdGQ6Ol9FeHByLF9Eb20+IF9DbG9zdXJlOw0KICAgICAg ICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUodGhpcy0+X01fY2xvc3VyZSkp Ow0KICAgIH0NCiMgNzkwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3ZhbGFycmF5X21ldGEu aCIgMw0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20sIHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHBy PF9VbkNsb3M8X1VuYXJ5X3BsdXMsc3RkOjpfRXhwcixfRG9tPixfVHA+IF9FeHByPF9Eb20sX1Rw Pjo6b3BlcmF0b3IgKyAoKSBjb25zdCB7IHR5cGVkZWYgX1VuQ2xvczxfVW5hcnlfcGx1cyxzdGQ6 Ol9FeHByLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1 cmUgKHRoaXMtPl9NX2Nsb3N1cmUpKTsgfQ0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20sIHR5cGVu YW1lIF9UcD4gaW5saW5lIF9FeHByPF9VbkNsb3M8bmVnYXRlLHN0ZDo6X0V4cHIsX0RvbT4sX1Rw PiBfRXhwcjxfRG9tLF9UcD46Om9wZXJhdG9yIC0gKCkgY29uc3QgeyB0eXBlZGVmIF9VbkNsb3M8 bmVnYXRlLHN0ZDo6X0V4cHIsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxf VHA+IChfQ2xvc3VyZSAodGhpcy0+X01fY2xvc3VyZSkpOyB9DQogICAgdGVtcGxhdGU8Y2xhc3Mg X0RvbSwgdHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X1VuQ2xvczxfQml0d2lzZV9ub3Qsc3Rk OjpfRXhwcixfRG9tPixfVHA+IF9FeHByPF9Eb20sX1RwPjo6b3BlcmF0b3IgfiAoKSBjb25zdCB7 IHR5cGVkZWYgX1VuQ2xvczxfQml0d2lzZV9ub3Qsc3RkOjpfRXhwcixfRG9tPiBfQ2xvc3VyZTsg cmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlICh0aGlzLT5fTV9jbG9zdXJlKSk7 IH0NCiMgODU4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3ZhbGFycmF5X21ldGEuaCIgMw0K ICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9CaW5D bG9zPHBsdXMsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+LCB0eXBlbmFtZSBwbHVzPHR5cGVuYW1l IF9Eb20xOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yICsgKGNvbnN0IF9FeHBy PF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9t Mix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fdykgeyB0eXBlZGVmIHR5cGVuYW1lIF9E b20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgcGx1czxfQXJnPjo6cmVzdWx0 X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPHBsdXMsX0V4cHIsX0V4cHIsX0RvbTEsX0Rv bTI+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9f diAoKSwgX193ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5D bG9zPHBsdXMsX0V4cHIsX0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4s IHR5cGVuYW1lIHBsdXM8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBv cGVyYXRvciArIChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBf X3YsIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCkgeyB0eXBlZGVmIHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBwbHVzPF9Bcmc+Ojpy ZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8cGx1cyxfRXhwcixfQ29uc3RhbnQs X0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9z dXJlIChfX3YgKCksIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxf QmluQ2xvczxwbHVzLF9Db25zdGFudCxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9E b20+LCB0eXBlbmFtZSBwbHVzPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlw ZT4gb3BlcmF0b3IgKyAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBjb25z dCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0 eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgcGx1czxfQXJn Pjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPHBsdXMsX0NvbnN0YW50LF9F eHByLF9BcmcsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChf Q2xvc3VyZSAoX190LCBfX3YgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4 cHI8X0JpbkNsb3M8cGx1cyxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1 ZV90eXBlPiwgdHlwZW5hbWUgcGx1czx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0 X3R5cGU+IG9wZXJhdG9yICsgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9f dikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBl bmFtZSBwbHVzPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8cGx1 cyxfRXhwcixfVmFsQXJyYXksX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z dXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX2UgKCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9E b20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxwbHVzLF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlLF9Eb20+LCB0eXBlbmFtZSBwbHVzPHR5cGVuYW1lIF9Eb206OnZhbHVl X3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgKyAoY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7 IHR5cGVkZWYgdHlwZW5hbWUgcGx1czxfVHA+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYg X0JpbkNsb3M8cGx1cyxfVmFsQXJyYXksX0V4cHIsX1RwLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4g X0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiwgX19lICgpKSk7IH0NCiAgICB0 ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGlubGluZSBfRXhwcjxfQmluQ2xvczxt aW51cyxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4sIHR5cGVuYW1lIG1pbnVzPHR5cGVuYW1lIF9E b20xOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yIC0gKGNvbnN0IF9FeHByPF9E b20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tMix0 eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fdykgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb20x Ojp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgbWludXM8X0FyZz46OnJlc3VsdF90 eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxtaW51cyxfRXhwcixfRXhwcixfRG9tMSxfRG9t Mj4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192 ICgpLCBfX3cgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNs b3M8bWludXMsX0V4cHIsX0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4s IHR5cGVuYW1lIG1pbnVzPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4g b3BlcmF0b3IgLSAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYg X192LCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBl bmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgbWludXM8X0FyZz46 OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxtaW51cyxfRXhwcixfQ29uc3Rh bnQsX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9D bG9zdXJlIChfX3YgKCksIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhw cjxfQmluQ2xvczxtaW51cyxfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw ZSxfRG9tPiwgdHlwZW5hbWUgbWludXM8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3Vs dF90eXBlPiBvcGVyYXRvciAtIChjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3Qs IGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0eXBl ZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBtaW51 czxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPG1pbnVzLF9Db25z dGFudCxfRXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1Zh bHVlPiAoX0Nsb3N1cmUgKF9fdCwgX192ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5s aW5lIF9FeHByPF9CaW5DbG9zPG1pbnVzLF9FeHByLF9WYWxBcnJheSxfRG9tLHR5cGVuYW1lIF9E b206OnZhbHVlX3R5cGU+LCB0eXBlbmFtZSBtaW51czx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl Pjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yIC0gKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0Rv bTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlw ZWRlZiB0eXBlbmFtZSBtaW51czxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9C aW5DbG9zPG1pbnVzLF9FeHByLF9WYWxBcnJheSxfRG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4g X0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fZSAoKSwgX192KSk7IH0gdGVtcGxh dGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPG1pbnVzLF9WYWxBcnJheSxfRXhw cix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCB0eXBlbmFtZSBtaW51czx0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yIC0gKGNvbnN0IHZhbGFy cmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20sdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZh bHVlX3R5cGUgX1RwOyB0eXBlZGVmIHR5cGVuYW1lIG1pbnVzPF9UcD46OnJlc3VsdF90eXBlIF9W YWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxtaW51cyxfVmFsQXJyYXksX0V4cHIsX1RwLF9Eb20+IF9D bG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiwgX19l ICgpKSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGlubGluZSBf RXhwcjxfQmluQ2xvczxtdWx0aXBsaWVzLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiwgdHlwZW5h bWUgbXVsdGlwbGllczx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBv cGVyYXRvciAqIChjb25zdCBfRXhwcjxfRG9tMSx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT4m IF9fdiwgY29uc3QgX0V4cHI8X0RvbTIsdHlwZW5hbWUgX0RvbTI6OnZhbHVlX3R5cGU+JiBfX3cp IHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVu YW1lIG11bHRpcGxpZXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xv czxtdWx0aXBsaWVzLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJuIF9F eHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdyAoKSkpOyB9IHRlbXBs YXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtdWx0aXBsaWVzLF9FeHByLF9D b25zdGFudCxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCB0eXBlbmFtZSBtdWx0aXBs aWVzPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgKiAo Y29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCB0 eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgbXVsdGlwbGllczxfQXJnPjo6cmVzdWx0 X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPG11bHRpcGxpZXMsX0V4cHIsX0NvbnN0YW50 LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xv c3VyZSAoX192ICgpLCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8 X0JpbkNsb3M8bXVsdGlwbGllcyxfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZSxfRG9tPiwgdHlwZW5hbWUgbXVsdGlwbGllczx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl Pjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yICogKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5 cGUmIF9fdCwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192 KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVu YW1lIG11bHRpcGxpZXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xv czxtdWx0aXBsaWVzLF9Db25zdGFudCxfRXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4g X0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdCwgX192ICgpKSk7IH0gdGVtcGxh dGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPG11bHRpcGxpZXMsX0V4cHIsX1Zh bEFycmF5LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIHR5cGVuYW1lIG11bHRpcGxp ZXM8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAqIChj b25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UsIGNvbnN0IHZh bGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgbXVsdGlwbGllczxfQXJn Pjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPG11bHRpcGxpZXMsX0V4cHIs X1ZhbEFycmF5LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFs dWU+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxp bmUgX0V4cHI8X0JpbkNsb3M8bXVsdGlwbGllcyxfVmFsQXJyYXksX0V4cHIsdHlwZW5hbWUgX0Rv bTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgbXVsdGlwbGllczx0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yICogKGNvbnN0IHZhbGFycmF5PHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0Rv bTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUg X1RwOyB0eXBlZGVmIHR5cGVuYW1lIG11bHRpcGxpZXM8X1RwPjo6cmVzdWx0X3R5cGUgX1ZhbHVl OyB0eXBlZGVmIF9CaW5DbG9zPG11bHRpcGxpZXMsX1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBf Q2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YsIF9f ZSAoKSkpOyB9DQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20yPiBpbmxpbmUg X0V4cHI8X0JpbkNsb3M8ZGl2aWRlcyxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4sIHR5cGVuYW1l IGRpdmlkZXM8dHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0 b3IgLyAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+JiBfX3Ys IGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193KSB7IHR5 cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBk aXZpZGVzPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8ZGl2aWRl cyxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3Vy ZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBf RG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8ZGl2aWRlcyxfRXhwcixfQ29uc3RhbnQsX0RvbSx0 eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgZGl2aWRlczx0eXBlbmFtZSBfRG9t Ojp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yIC8gKGNvbnN0IF9FeHByPF9Eb20s dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFs dWVfdHlwZSYgX190KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0 eXBlZGVmIHR5cGVuYW1lIGRpdmlkZXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRl ZiBfQmluQ2xvczxkaXZpZGVzLF9FeHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9DbG9zdXJlOyBy ZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX190KSk7IH0g dGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGRpdmlkZXMsX0NvbnN0 YW50LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIGRpdmlk ZXM8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAvIChj b25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QsIGNvbnN0IF9FeHByPF9Eb20sdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZh bHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBkaXZpZGVzPF9Bcmc+OjpyZXN1bHRfdHlw ZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8ZGl2aWRlcyxfQ29uc3RhbnQsX0V4cHIsX0FyZyxf RG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChf X3QsIF9fdiAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xv czxkaXZpZGVzLF9FeHByLF9WYWxBcnJheSxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+ LCB0eXBlbmFtZSBkaXZpZGVzPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlw ZT4gb3BlcmF0b3IgLyAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl PiYgX19lLCBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7 IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1l IGRpdmlkZXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxkaXZp ZGVzLF9FeHByLF9WYWxBcnJheSxfRG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Ns b3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fZSAoKSwgX192KSk7IH0gdGVtcGxhdGU8Y2xhc3Mg X0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGRpdmlkZXMsX1ZhbEFycmF5LF9FeHByLHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIGRpdmlkZXM8dHlwZW5hbWUgX0Rv bTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAvIChjb25zdCB2YWxhcnJheTx0 eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1l IF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90 eXBlIF9UcDsgdHlwZWRlZiB0eXBlbmFtZSBkaXZpZGVzPF9UcD46OnJlc3VsdF90eXBlIF9WYWx1 ZTsgdHlwZWRlZiBfQmluQ2xvczxkaXZpZGVzLF9WYWxBcnJheSxfRXhwcixfVHAsX0RvbT4gX0Ns b3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192LCBfX2Ug KCkpKTsgfQ0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9F eHByPF9CaW5DbG9zPG1vZHVsdXMsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+LCB0eXBlbmFtZSBt b2R1bHVzPHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9y ICUgKGNvbnN0IF9FeHByPF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX192LCBj b25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fdykgeyB0eXBl ZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgbW9k dWx1czxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPG1vZHVsdXMs X0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUs X1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX193ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0Rv bT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPG1vZHVsdXMsX0V4cHIsX0NvbnN0YW50LF9Eb20sdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIHR5cGVuYW1lIG1vZHVsdXM8dHlwZW5hbWUgX0RvbTo6 dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAlIChjb25zdCBfRXhwcjxfRG9tLHR5 cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVl X3R5cGUmIF9fdCkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlw ZWRlZiB0eXBlbmFtZSBtb2R1bHVzPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYg X0JpbkNsb3M8bW9kdWx1cyxfRXhwcixfQ29uc3RhbnQsX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0 dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdCkpOyB9IHRl bXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtb2R1bHVzLF9Db25zdGFu dCxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCB0eXBlbmFtZSBtb2R1bHVz PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgJSAoY29u c3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1 ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgbW9kdWx1czxfQXJnPjo6cmVzdWx0X3R5cGUg X1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPG1vZHVsdXMsX0NvbnN0YW50LF9FeHByLF9BcmcsX0Rv bT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX190 LCBfX3YgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8 bW9kdWx1cyxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwg dHlwZW5hbWUgbW9kdWx1czx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+ IG9wZXJhdG9yICUgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4m IF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0 eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBt b2R1bHVzPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8bW9kdWx1 cyxfRXhwcixfVmFsQXJyYXksX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z dXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX2UgKCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9E b20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtb2R1bHVzLF9WYWxBcnJheSxfRXhwcix0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCB0eXBlbmFtZSBtb2R1bHVzPHR5cGVuYW1lIF9Eb206 OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgJSAoY29uc3QgdmFsYXJyYXk8dHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw ZSBfVHA7IHR5cGVkZWYgdHlwZW5hbWUgbW9kdWx1czxfVHA+OjpyZXN1bHRfdHlwZSBfVmFsdWU7 IHR5cGVkZWYgX0JpbkNsb3M8bW9kdWx1cyxfVmFsQXJyYXksX0V4cHIsX1RwLF9Eb20+IF9DbG9z dXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiwgX19lICgp KSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGlubGluZSBfRXhw cjxfQmluQ2xvczxfQml0d2lzZV94b3IsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+LCB0eXBlbmFt ZSBfQml0d2lzZV94b3I8dHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4g b3BlcmF0b3IgXiAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+ JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193 KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBl bmFtZSBfQml0d2lzZV94b3I8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmlu Q2xvczxfQml0d2lzZV94b3IsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+IF9DbG9zdXJlOyByZXR1 cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX193ICgpKSk7IH0g dGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3aXNlX3hvcixf RXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUg X0JpdHdpc2VfeG9yPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3Bl cmF0b3IgXiAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192 LCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgX0JpdHdpc2VfeG9yPF9B cmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2VfeG9yLF9F eHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUs X1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX190KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4g aW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3aXNlX3hvcixfQ29uc3RhbnQsX0V4cHIsdHlwZW5h bWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgX0JpdHdpc2VfeG9yPHR5cGVuYW1l IF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgXiAoY29uc3QgdHlwZW5h bWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206 OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9B cmc7IHR5cGVkZWYgdHlwZW5hbWUgX0JpdHdpc2VfeG9yPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFs dWU7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2VfeG9yLF9Db25zdGFudCxfRXhwcixfQXJnLF9E b20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9f dCwgX192ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9z PF9CaXR3aXNlX3hvcixfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90 eXBlPiwgdHlwZW5hbWUgX0JpdHdpc2VfeG9yPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+Ojpy ZXN1bHRfdHlwZT4gb3BlcmF0b3IgXiAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl PiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVm IHR5cGVuYW1lIF9CaXR3aXNlX3hvcjxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVm IF9CaW5DbG9zPF9CaXR3aXNlX3hvcixfRXhwcixfVmFsQXJyYXksX0RvbSxfQXJnPiBfQ2xvc3Vy ZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX2UgKCksIF9fdikp OyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfQml0d2lzZV94 b3IsX1ZhbEFycmF5LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVu YW1lIF9CaXR3aXNlX3hvcjx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+ IG9wZXJhdG9yIF4gKGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBf X3YsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0 eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIHR5cGVuYW1lIF9C aXR3aXNlX3hvcjxfVHA+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8X0Jp dHdpc2VfeG9yLF9WYWxBcnJheSxfRXhwcixfVHAsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhw cjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192LCBfX2UgKCkpKTsgfQ0KICAgIHRlbXBs YXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3 aXNlX2FuZCxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4sIHR5cGVuYW1lIF9CaXR3aXNlX2FuZDx0 eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAmIChjb25z dCBfRXhwcjxfRG9tMSx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4 cHI8X0RvbTIsdHlwZW5hbWUgX0RvbTI6OnZhbHVlX3R5cGU+JiBfX3cpIHsgdHlwZWRlZiB0eXBl bmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIF9CaXR3aXNlX2Fu ZDxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX2Fu ZCxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3Vy ZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBf RG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9FeHByLF9Db25zdGFudCxf RG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCB0eXBlbmFtZSBfQml0d2lzZV9hbmQ8dHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAmIChjb25zdCBf RXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IHR5cGVuYW1l IF9Eb206OnZhbHVlX3R5cGUmIF9fdCkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5 cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBfQml0d2lzZV9hbmQ8X0FyZz46OnJlc3VsdF90eXBl IF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfQml0d2lzZV9hbmQsX0V4cHIsX0NvbnN0YW50LF9E b20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3Vy ZSAoX192ICgpLCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0Jp bkNsb3M8X0JpdHdpc2VfYW5kLF9Db25zdGFudCxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90 eXBlLF9Eb20+LCB0eXBlbmFtZSBfQml0d2lzZV9hbmQ8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw ZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAmIChjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90 eXBlJiBfX3QsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9f dikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBl bmFtZSBfQml0d2lzZV9hbmQ8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmlu Q2xvczxfQml0d2lzZV9hbmQsX0NvbnN0YW50LF9FeHByLF9BcmcsX0RvbT4gX0Nsb3N1cmU7IHJl dHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX190LCBfX3YgKCkpKTsgfSB0 ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9F eHByLF9WYWxBcnJheSxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCB0eXBlbmFtZSBf Qml0d2lzZV9hbmQ8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVy YXRvciAmIChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2Us IGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRl ZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgX0JpdHdp c2VfYW5kPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdp c2VfYW5kLF9FeHByLF9WYWxBcnJheSxfRG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8 X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fZSAoKSwgX192KSk7IH0gdGVtcGxhdGU8Y2xh c3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3aXNlX2FuZCxfVmFsQXJyYXksX0V4 cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgX0JpdHdpc2VfYW5k PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgJiAoY29u c3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8 X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgdHlwZW5hbWUgX0JpdHdpc2VfYW5kPF9UcD46 OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfQml0d2lzZV9hbmQsX1ZhbEFy cmF5LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1 ZT4gKF9DbG9zdXJlIChfX3YsIF9fZSAoKSkpOyB9DQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbTEs IGNsYXNzIF9Eb20yPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2Vfb3IsX0V4cHIsX0V4 cHIsX0RvbTEsX0RvbTI+LCB0eXBlbmFtZSBfQml0d2lzZV9vcjx0eXBlbmFtZSBfRG9tMTo6dmFs dWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciB8IChjb25zdCBfRXhwcjxfRG9tMSx0eXBl bmFtZSBfRG9tMTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbTIsdHlwZW5hbWUg X0RvbTI6OnZhbHVlX3R5cGU+JiBfX3cpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVf dHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIF9CaXR3aXNlX29yPF9Bcmc+OjpyZXN1bHRfdHlw ZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2Vfb3IsX0V4cHIsX0V4cHIsX0RvbTEs X0RvbTI+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUg KF9fdiAoKSwgX193ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9C aW5DbG9zPF9CaXR3aXNlX29yLF9FeHByLF9Db25zdGFudCxfRG9tLHR5cGVuYW1lIF9Eb206OnZh bHVlX3R5cGU+LCB0eXBlbmFtZSBfQml0d2lzZV9vcjx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl Pjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yIHwgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0Rv bTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190 KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVu YW1lIF9CaXR3aXNlX29yPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNs b3M8X0JpdHdpc2Vfb3IsX0V4cHIsX0NvbnN0YW50LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVy biBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192ICgpLCBfX3QpKTsgfSB0ZW1w bGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2Vfb3IsX0NvbnN0 YW50LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIF9CaXR3 aXNlX29yPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3Ig fCAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9t LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9t Ojp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgX0JpdHdpc2Vfb3I8X0FyZz46OnJl c3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfQml0d2lzZV9vcixfQ29uc3RhbnQs X0V4cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4g KF9DbG9zdXJlIChfX3QsIF9fdiAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBf RXhwcjxfQmluQ2xvczxfQml0d2lzZV9vcixfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgX0JpdHdpc2Vfb3I8dHlwZW5hbWUgX0RvbTo6dmFs dWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciB8IChjb25zdCBfRXhwcjxfRG9tLHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UsIGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206 OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9B cmc7IHR5cGVkZWYgdHlwZW5hbWUgX0JpdHdpc2Vfb3I8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1 ZTsgdHlwZWRlZiBfQmluQ2xvczxfQml0d2lzZV9vcixfRXhwcixfVmFsQXJyYXksX0RvbSxfQXJn PiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX2Ug KCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxf Qml0d2lzZV9vcixfVmFsQXJyYXksX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9t PiwgdHlwZW5hbWUgX0JpdHdpc2Vfb3I8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3Vs dF90eXBlPiBvcGVyYXRvciB8IChjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90 eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBf X2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiB0eXBl bmFtZSBfQml0d2lzZV9vcjxfVHA+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNs b3M8X0JpdHdpc2Vfb3IsX1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJu IF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YsIF9fZSAoKSkpOyB9DQogICAg dGVtcGxhdGU8Y2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20yPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8 X1NoaWZ0X2xlZnQsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+LCB0eXBlbmFtZSBfU2hpZnRfbGVm dDx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciA8PCAo Y29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0 IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193KSB7IHR5cGVkZWYg dHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBfU2hpZnRf bGVmdDxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPF9TaGlmdF9s ZWZ0LF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z dXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdyAoKSkpOyB9IHRlbXBsYXRlPGNsYXNz IF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRfbGVmdCxfRXhwcixfQ29uc3RhbnQs X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgX1NoaWZ0X2xlZnQ8dHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciA8PCAoY29uc3Qg X0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCB0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90 eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgX1NoaWZ0X2xlZnQ8X0FyZz46OnJlc3VsdF90eXBl IF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfU2hpZnRfbGVmdCxfRXhwcixfQ29uc3RhbnQsX0Rv bSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJl IChfX3YgKCksIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmlu Q2xvczxfU2hpZnRfbGVmdCxfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw ZSxfRG9tPiwgdHlwZW5hbWUgX1NoaWZ0X2xlZnQ8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46 OnJlc3VsdF90eXBlPiBvcGVyYXRvciA8PCAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw ZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3Yp IHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5h bWUgX1NoaWZ0X2xlZnQ8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xv czxfU2hpZnRfbGVmdCxfQ29uc3RhbnQsX0V4cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJu IF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3QsIF9fdiAoKSkpOyB9IHRlbXBs YXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRfbGVmdCxfRXhwcixf VmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgX1NoaWZ0 X2xlZnQ8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciA8 PCAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25z dCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIF9TaGlmdF9sZWZ0 PF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8X1NoaWZ0X2xlZnQs X0V4cHIsX1ZhbEFycmF5LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3Vy ZSxfVmFsdWU+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9t PiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X1NoaWZ0X2xlZnQsX1ZhbEFycmF5LF9FeHByLHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIF9TaGlmdF9sZWZ0PHR5cGVuYW1l IF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgPDwgKGNvbnN0IHZhbGFy cmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20sdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZh bHVlX3R5cGUgX1RwOyB0eXBlZGVmIHR5cGVuYW1lIF9TaGlmdF9sZWZ0PF9UcD46OnJlc3VsdF90 eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfU2hpZnRfbGVmdCxfVmFsQXJyYXksX0V4cHIs X1RwLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1 cmUgKF9fdiwgX19lICgpKSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0Rv bTI+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRfcmlnaHQsX0V4cHIsX0V4cHIsX0RvbTEs X0RvbTI+LCB0eXBlbmFtZSBfU2hpZnRfcmlnaHQ8dHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+ OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgPj4gKGNvbnN0IF9FeHByPF9Eb20xLHR5cGVuYW1lIF9E b20xOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6 dmFsdWVfdHlwZT4mIF9fdykgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9B cmc7IHR5cGVkZWYgdHlwZW5hbWUgX1NoaWZ0X3JpZ2h0PF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFs dWU7IHR5cGVkZWYgX0JpbkNsb3M8X1NoaWZ0X3JpZ2h0LF9FeHByLF9FeHByLF9Eb20xLF9Eb20y PiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3Yg KCksIF9fdyAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xv czxfU2hpZnRfcmlnaHQsX0V4cHIsX0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZT4sIHR5cGVuYW1lIF9TaGlmdF9yaWdodDx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6 cmVzdWx0X3R5cGU+IG9wZXJhdG9yID4+IChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206 OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCkg eyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFt ZSBfU2hpZnRfcmlnaHQ8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xv czxfU2hpZnRfcmlnaHQsX0V4cHIsX0NvbnN0YW50LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVy biBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192ICgpLCBfX3QpKTsgfSB0ZW1w bGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X1NoaWZ0X3JpZ2h0LF9Db25z dGFudCxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCB0eXBlbmFtZSBfU2hp ZnRfcmlnaHQ8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRv ciA+PiAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxf RG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgX1NoaWZ0X3JpZ2h0PF9Bcmc+ OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8X1NoaWZ0X3JpZ2h0LF9Db25z dGFudCxfRXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1Zh bHVlPiAoX0Nsb3N1cmUgKF9fdCwgX192ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5s aW5lIF9FeHByPF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBl bmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgX1NoaWZ0X3JpZ2h0PHR5cGVuYW1lIF9E b206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgPj4gKGNvbnN0IF9FeHByPF9E b20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5h bWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVl X3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBfU2hpZnRfcmlnaHQ8X0FyZz46OnJlc3VsdF90 eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfU2hpZnRfcmlnaHQsX0V4cHIsX1ZhbEFycmF5 LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xv c3VyZSAoX19lICgpLCBfX3YpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8 X0JpbkNsb3M8X1NoaWZ0X3JpZ2h0LF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1 ZV90eXBlLF9Eb20+LCB0eXBlbmFtZSBfU2hpZnRfcmlnaHQ8dHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciA+PiAoY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7 IHR5cGVkZWYgdHlwZW5hbWUgX1NoaWZ0X3JpZ2h0PF9UcD46OnJlc3VsdF90eXBlIF9WYWx1ZTsg dHlwZWRlZiBfQmluQ2xvczxfU2hpZnRfcmlnaHQsX1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBf Q2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YsIF9f ZSAoKSkpOyB9DQojIDkyNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92YWxhcnJheV9tZXRh LmgiIDMNCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGlubGluZSBfRXhw cjxfQmluQ2xvczxsb2dpY2FsX2FuZCxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4sIGJvb2w+IG9w ZXJhdG9yICYmIChjb25zdCBfRXhwcjxfRG9tMSx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT4m IF9fdiwgY29uc3QgX0V4cHI8X0RvbTIsdHlwZW5hbWUgX0RvbTI6OnZhbHVlX3R5cGU+JiBfX3cp IHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5D bG9zPGxvZ2ljYWxfYW5kLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJu IF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cgKCkpKTsgfSB0ZW1w bGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bG9naWNhbF9hbmQsX0V4cHIs X0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIGJvb2w+IG9wZXJhdG9y ICYmIChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNv bnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCkgeyB0eXBlZGVmIHR5cGVuYW1lIF9E b206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiBfQmluQ2xvczxsb2dpY2FsX2FuZCxfRXhwcixf Q29uc3RhbnQsX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+ IChfQ2xvc3VyZSAoX192ICgpLCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUg X0V4cHI8X0JpbkNsb3M8bG9naWNhbF9hbmQsX0NvbnN0YW50LF9FeHByLHR5cGVuYW1lIF9Eb206 OnZhbHVlX3R5cGUsX0RvbT4sIGJvb2w+IG9wZXJhdG9yICYmIChjb25zdCB0eXBlbmFtZSBfRG9t Ojp2YWx1ZV90eXBlJiBfX3QsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlw ZWRlZiBfQmluQ2xvczxsb2dpY2FsX2FuZCxfQ29uc3RhbnQsX0V4cHIsX0FyZyxfRG9tPiBfQ2xv c3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX190LCBfX3YgKCkp KTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bG9naWNhbF9h bmQsX0V4cHIsX1ZhbEFycmF5LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIGJvb2w+ IG9wZXJhdG9yICYmIChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+ JiBfX2UsIGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsg dHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfQmluQ2xvczxs b2dpY2FsX2FuZCxfRXhwcixfVmFsQXJyYXksX0RvbSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4 cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX2UgKCksIF9fdikpOyB9IHRlbXBsYXRlPGNs YXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsb2dpY2FsX2FuZCxfVmFsQXJyYXksX0V4 cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgYm9vbD4gb3BlcmF0b3IgJiYgKGNv bnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHBy PF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1l IF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfYW5kLF9WYWxB cnJheSxfRXhwcixfVHAsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29s PiAoX0Nsb3N1cmUgKF9fdiwgX19lICgpKSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwg Y2xhc3MgX0RvbTI+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsb2dpY2FsX29yLF9FeHByLF9FeHBy LF9Eb20xLF9Eb20yPiwgYm9vbD4gb3BlcmF0b3IgfHwgKGNvbnN0IF9FeHByPF9Eb20xLHR5cGVu YW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBf RG9tMjo6dmFsdWVfdHlwZT4mIF9fdykgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90 eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8bG9naWNhbF9vcixfRXhwcixfRXhwcixfRG9tMSxf RG9tMj4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9f diAoKSwgX193ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5D bG9zPGxvZ2ljYWxfb3IsX0V4cHIsX0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZT4sIGJvb2w+IG9wZXJhdG9yIHx8IChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206 OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCkg eyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiBfQmluQ2xv czxsb2dpY2FsX29yLF9FeHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4g X0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3YgKCksIF9fdCkpOyB9IHRlbXBsYXRl PGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsb2dpY2FsX29yLF9Db25zdGFudCxf RXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCBib29sPiBvcGVyYXRvciB8fCAo Y29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5 cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8bG9naWNhbF9vcixfQ29uc3RhbnQsX0V4 cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xv c3VyZSAoX190LCBfX3YgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8 X0JpbkNsb3M8bG9naWNhbF9vcixfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgfHwgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFs dWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0 eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfb3IsX0V4cHIsX1ZhbEFycmF5LF9Eb20sX1RwPiBfQ2xv c3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX19lICgpLCBfX3Yp KTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bG9naWNhbF9v cixfVmFsQXJyYXksX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgYm9vbD4g b3BlcmF0b3IgfHwgKGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBf X3YsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0 eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIF9CaW5DbG9zPGxv Z2ljYWxfb3IsX1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHBy PF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX2UgKCkpKTsgfQ0KICAgIHRlbXBsYXRl PGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGVxdWFsX3Rv LF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiwgYm9vbD4gb3BlcmF0b3IgPT0gKGNvbnN0IF9FeHBy PF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9t Mix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fdykgeyB0eXBlZGVmIHR5cGVuYW1lIF9E b20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8ZXF1YWxfdG8sX0V4cHIsX0V4 cHIsX0RvbTEsX0RvbTI+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9D bG9zdXJlIChfX3YgKCksIF9fdyAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBf RXhwcjxfQmluQ2xvczxlcXVhbF90byxfRXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFtZSBfRG9t Ojp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPT0gKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5h bWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw ZSYgX190KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVm IF9CaW5DbG9zPGVxdWFsX3RvLF9FeHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9DbG9zdXJlOyBy ZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3YgKCksIF9fdCkpOyB9IHRl bXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxlcXVhbF90byxfQ29uc3Rh bnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgYm9vbD4gb3BlcmF0b3Ig PT0gKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3QgX0V4cHI8X0Rv bSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0Rv bTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPGVxdWFsX3RvLF9Db25zdGFudCxf RXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9D bG9zdXJlIChfX3QsIF9fdiAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhw cjxfQmluQ2xvczxlcXVhbF90byxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPT0gKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFs dWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0 eXBlZGVmIF9CaW5DbG9zPGVxdWFsX3RvLF9FeHByLF9WYWxBcnJheSxfRG9tLF9UcD4gX0Nsb3N1 cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fZSAoKSwgX192KSk7 IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGVxdWFsX3RvLF9W YWxBcnJheSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCBib29sPiBvcGVy YXRvciA9PSAoY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwg Y29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVk ZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkNsb3M8ZXF1YWxf dG8sX1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z dXJlLGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX2UgKCkpKTsgfQ0KICAgIHRlbXBsYXRlPGNsYXNz IF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9CaW5DbG9zPG5vdF9lcXVhbF90byxf RXhwcixfRXhwcixfRG9tMSxfRG9tMj4sIGJvb2w+IG9wZXJhdG9yICE9IChjb25zdCBfRXhwcjxf RG9tMSx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbTIs dHlwZW5hbWUgX0RvbTI6OnZhbHVlX3R5cGU+JiBfX3cpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9t MTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPG5vdF9lcXVhbF90byxfRXhwcixf RXhwcixfRG9tMSxfRG9tMj4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAo X0Nsb3N1cmUgKF9fdiAoKSwgX193ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5l IF9FeHByPF9CaW5DbG9zPG5vdF9lcXVhbF90byxfRXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgIT0gKGNvbnN0IF9FeHByPF9Eb20s dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFs dWVfdHlwZSYgX190KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0 eXBlZGVmIF9CaW5DbG9zPG5vdF9lcXVhbF90byxfRXhwcixfQ29uc3RhbnQsX0RvbSxfQXJnPiBf Q2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192ICgpLCBf X3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bm90X2Vx dWFsX3RvLF9Db25zdGFudCxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCBi b29sPiBvcGVyYXRvciAhPSAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBj b25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRl ZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8bm90X2Vx dWFsX3RvLF9Db25zdGFudCxfRXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8 X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3QsIF9fdiAoKSkpOyB9IHRlbXBsYXRlPGNsYXNz IF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxub3RfZXF1YWxfdG8sX0V4cHIsX1ZhbEFycmF5 LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIGJvb2w+IG9wZXJhdG9yICE9IChjb25z dCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UsIGNvbnN0IHZhbGFy cmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfQmluQ2xvczxub3RfZXF1YWxfdG8sX0V4cHIs X1ZhbEFycmF5LF9Eb20sX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+ IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUg X0V4cHI8X0JpbkNsb3M8bm90X2VxdWFsX3RvLF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBfRG9t Ojp2YWx1ZV90eXBlLF9Eb20+LCBib29sPiBvcGVyYXRvciAhPSAoY29uc3QgdmFsYXJyYXk8dHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw ZSBfVHA7IHR5cGVkZWYgX0JpbkNsb3M8bm90X2VxdWFsX3RvLF9WYWxBcnJheSxfRXhwcixfVHAs X0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9f diwgX19lICgpKSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGlu bGluZSBfRXhwcjxfQmluQ2xvczxsZXNzLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiwgYm9vbD4g b3BlcmF0b3IgPCAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+ JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193 KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiBfQmlu Q2xvczxsZXNzLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHBy PF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cgKCkpKTsgfSB0ZW1wbGF0ZTxj bGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bGVzcyxfRXhwcixfQ29uc3RhbnQsX0Rv bSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPCAoY29uc3QgX0V4 cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCB0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl IF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8bGVzcyxfRXhwcixfQ29uc3RhbnQsX0RvbSxfQXJnPiBf Q2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192ICgpLCBf X3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bGVzcyxf Q29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgYm9vbD4gb3Bl cmF0b3IgPCAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhw cjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8bGVzcyxfQ29uc3RhbnQs X0V4cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChf Q2xvc3VyZSAoX190LCBfX3YgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4 cHI8X0JpbkNsb3M8bGVzcyxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1 ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPCAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9t Ojp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90 eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVk ZWYgX0JpbkNsb3M8bGVzcyxfRXhwcixfVmFsQXJyYXksX0RvbSxfVHA+IF9DbG9zdXJlOyByZXR1 cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX2UgKCksIF9fdikpOyB9IHRlbXBs YXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsZXNzLF9WYWxBcnJheSxfRXhw cix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCBib29sPiBvcGVyYXRvciA8IChjb25z dCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxf RG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfQmluQ2xvczxsZXNzLF9WYWxBcnJheSxfRXhw cixfVHAsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1 cmUgKF9fdiwgX19lICgpKSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0Rv bTI+IGlubGluZSBfRXhwcjxfQmluQ2xvczxncmVhdGVyLF9FeHByLF9FeHByLF9Eb20xLF9Eb20y PiwgYm9vbD4gb3BlcmF0b3IgPiAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZh bHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90 eXBlPiYgX193KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlw ZWRlZiBfQmluQ2xvczxncmVhdGVyLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsg cmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cgKCkpKTsg fSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8Z3JlYXRlcixfRXhw cixfQ29uc3RhbnQsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0 b3IgPiAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBj b25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRlcixfRXhwcixfQ29u c3RhbnQsX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChf Q2xvc3VyZSAoX192ICgpLCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4 cHI8X0JpbkNsb3M8Z3JlYXRlcixfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZSxfRG9tPiwgYm9vbD4gb3BlcmF0b3IgPiAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBf X3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0Jp bkNsb3M8Z3JlYXRlcixfQ29uc3RhbnQsX0V4cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJu IF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX190LCBfX3YgKCkpKTsgfSB0ZW1wbGF0 ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8Z3JlYXRlcixfRXhwcixfVmFsQXJy YXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPiAoY29u c3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxh cnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRlcixfRXhwcixfVmFs QXJyYXksX0RvbSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9D bG9zdXJlIChfX2UgKCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhw cjxfQmluQ2xvczxncmVhdGVyLF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90 eXBlLF9Eb20+LCBib29sPiBvcGVyYXRvciA+IChjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9t Ojp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVl X3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlw ZWRlZiBfQmluQ2xvczxncmVhdGVyLF9WYWxBcnJheSxfRXhwcixfVHAsX0RvbT4gX0Nsb3N1cmU7 IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fdiwgX19lICgpKSk7IH0N CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGlubGluZSBfRXhwcjxfQmlu Q2xvczxsZXNzX2VxdWFsLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiwgYm9vbD4gb3BlcmF0b3Ig PD0gKGNvbnN0IF9FeHByPF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX192LCBj b25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fdykgeyB0eXBl ZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8bGVz c19lcXVhbCxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxf Q2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX193ICgpKSk7IH0gdGVtcGxhdGU8Y2xh c3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGxlc3NfZXF1YWwsX0V4cHIsX0NvbnN0YW50 LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIGJvb2w+IG9wZXJhdG9yIDw9IChjb25z dCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVl X3R5cGUgX0FyZzsgdHlwZWRlZiBfQmluQ2xvczxsZXNzX2VxdWFsLF9FeHByLF9Db25zdGFudCxf RG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJl IChfX3YgKCksIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmlu Q2xvczxsZXNzX2VxdWFsLF9Db25zdGFudCxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl LF9Eb20+LCBib29sPiBvcGVyYXRvciA8PSAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw ZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3Yp IHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNs b3M8bGVzc19lcXVhbCxfQ29uc3RhbnQsX0V4cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJu IF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX190LCBfX3YgKCkpKTsgfSB0ZW1wbGF0 ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bGVzc19lcXVhbCxfRXhwcixfVmFs QXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPD0g KGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3Qg dmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIF9CaW5DbG9zPGxlc3NfZXF1YWwsX0V4 cHIsX1ZhbEFycmF5LF9Eb20sX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJv b2w+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxp bmUgX0V4cHI8X0JpbkNsb3M8bGVzc19lcXVhbCxfVmFsQXJyYXksX0V4cHIsdHlwZW5hbWUgX0Rv bTo6dmFsdWVfdHlwZSxfRG9tPiwgYm9vbD4gb3BlcmF0b3IgPD0gKGNvbnN0IHZhbGFycmF5PHR5 cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5 cGUgX1RwOyB0eXBlZGVmIF9CaW5DbG9zPGxlc3NfZXF1YWwsX1ZhbEFycmF5LF9FeHByLF9UcCxf RG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192 LCBfX2UgKCkpKTsgfQ0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5s aW5lIF9FeHByPF9CaW5DbG9zPGdyZWF0ZXJfZXF1YWwsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+ LCBib29sPiBvcGVyYXRvciA+PSAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZh bHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90 eXBlPiYgX193KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlw ZWRlZiBfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xv c3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cg KCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8Z3JlYXRl cl9lcXVhbCxfRXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwg Ym9vbD4gb3BlcmF0b3IgPj0gKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZT4mIF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190KSB7IHR5cGVk ZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPGdyZWF0 ZXJfZXF1YWwsX0V4cHIsX0NvbnN0YW50LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhw cjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX190KSk7IH0gdGVtcGxhdGU8Y2xh c3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGdyZWF0ZXJfZXF1YWwsX0NvbnN0YW50LF9F eHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIGJvb2w+IG9wZXJhdG9yID49IChj b25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QsIGNvbnN0IF9FeHByPF9Eb20sdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZh bHVlX3R5cGUgX0FyZzsgdHlwZWRlZiBfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9Db25zdGFudCxf RXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9D bG9zdXJlIChfX3QsIF9fdiAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhw cjxfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9FeHByLF9WYWxBcnJheSxfRG9tLHR5cGVuYW1lIF9E b206OnZhbHVlX3R5cGU+LCBib29sPiBvcGVyYXRvciA+PSAoY29uc3QgX0V4cHI8X0RvbSx0eXBl bmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9t Ojp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBf VHA7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRlcl9lcXVhbCxfRXhwcixfVmFsQXJyYXksX0RvbSxf VHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX2Ug KCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxn cmVhdGVyX2VxdWFsLF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9E b20+LCBib29sPiBvcGVyYXRvciA+PSAoY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFs dWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl PiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYg X0JpbkNsb3M8Z3JlYXRlcl9lcXVhbCxfVmFsQXJyYXksX0V4cHIsX1RwLF9Eb20+IF9DbG9zdXJl OyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3YsIF9fZSAoKSkpOyB9 DQojIDk1OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92YWxhcnJheV9tZXRhLmgiIDMNCiAg ICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9t Pix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiBhYnMoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZSBfVHA7IHR5cGVkZWYgX1VuRnVuQ2xvczxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJu IF9FeHByPF9DbG9zdXJlLF9UcD4oX0Nsb3N1cmUoX19lKCksIChfVHAoKikoX1RwKSkoJmFicykp KTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9WYWxB cnJheSxfVHA+LF9UcD4gYWJzKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9V bkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxf VHA+IChfQ2xvc3VyZSAoX192LCAoX1RwKCopKF9UcCkpKCZhYnMpKSk7IH0NCiAgICB0ZW1wbGF0 ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9tPix0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlPiBjb3MoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7 IHR5cGVkZWYgX1VuRnVuQ2xvczxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9D bG9zdXJlLF9UcD4oX0Nsb3N1cmUoX19lKCksIChfVHAoKikoX1RwKSkoJmNvcykpKTsgfSB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+ LF9UcD4gY29zKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNsb3M8 X1ZhbEFycmF5LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xv c3VyZSAoX192LCAoX1RwKCopKF9UcCkpKCZjb3MpKSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBf RG9tPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9tPix0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlPiBhY29zKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw ZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVm IF9VbkZ1bkNsb3M8X0V4cHIsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxf VHA+KF9DbG9zdXJlKF9fZSgpLCAoX1RwKCopKF9UcCkpKCZhY29zKSkpOyB9IHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4sX1RwPiBh Y29zKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNsb3M8X1ZhbEFy cmF5LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAo X192LCAoX1RwKCopKF9UcCkpKCZhY29zKSkpOyB9DQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4g aW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8X0V4cHIsX0RvbT4sdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZT4gY29zaChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBf X2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfVW5G dW5DbG9zPF9FeHByLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPihf Q2xvc3VyZShfX2UoKSwgKF9UcCgqKShfVHApKSgmY29zaCkpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+LF9UcD4gY29zaChj b25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIHsgdHlwZWRlZiBfVW5GdW5DbG9zPF9WYWxBcnJheSxf VHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9fdiwg KF9UcCgqKShfVHApKSgmY29zaCkpKTsgfQ0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGlu ZSBfRXhwcjxfVW5GdW5DbG9zPF9FeHByLF9Eb20+LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+ IHNpbihjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsg dHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfVW5GdW5DbG9z PF9FeHByLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPihfQ2xvc3Vy ZShfX2UoKSwgKF9UcCgqKShfVHApKSgmc2luKSkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g aW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4sX1RwPiBzaW4oY29uc3QgdmFs YXJyYXk8X1RwPiYgX192KSB7IHR5cGVkZWYgX1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xv c3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIChfVHAoKiko X1RwKSkoJnNpbikpKTsgfQ0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxf VW5GdW5DbG9zPF9FeHByLF9Eb20+LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IGFzaW4oY29u c3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYg dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX1VuRnVuQ2xvczxfRXhwcixf RG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4oX0Nsb3N1cmUoX19lKCks IChfVHAoKikoX1RwKSkoJmFzaW4pKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUg X0V4cHI8X1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPixfVHA+IGFzaW4oY29uc3QgdmFsYXJyYXk8 X1RwPiYgX192KSB7IHR5cGVkZWYgX1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsg cmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIChfVHAoKikoX1RwKSko JmFzaW4pKSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X1VuRnVu Q2xvczxfRXhwcixfRG9tPix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiBzaW5oKGNvbnN0IF9F eHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIF9VbkZ1bkNsb3M8X0V4cHIsX0RvbT4g X0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+KF9DbG9zdXJlKF9fZSgpLCAoX1Rw KCopKF9UcCkpKCZzaW5oKSkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHBy PF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4sX1RwPiBzaW5oKGNvbnN0IHZhbGFycmF5PF9UcD4m IF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4gX0Nsb3N1cmU7IHJldHVy biBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX192LCAoX1RwKCopKF9UcCkpKCZzaW5o KSkpOyB9DQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8 X0V4cHIsX0RvbT4sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gdGFuKGNvbnN0IF9FeHByPF9E b20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9E b206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIF9VbkZ1bkNsb3M8X0V4cHIsX0RvbT4gX0Nsb3N1 cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+KF9DbG9zdXJlKF9fZSgpLCAoX1RwKCopKF9U cCkpKCZ0YW4pKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X1VuRnVu Q2xvczxfVmFsQXJyYXksX1RwPixfVHA+IHRhbihjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIHsg dHlwZWRlZiBfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8 X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9fdiwgKF9UcCgqKShfVHApKSgmdGFuKSkpOyB9DQog ICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8X0V4cHIsX0Rv bT4sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gdGFuaChjb25zdCBfRXhwcjxfRG9tLHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1 ZV90eXBlIF9UcDsgdHlwZWRlZiBfVW5GdW5DbG9zPF9FeHByLF9Eb20+IF9DbG9zdXJlOyByZXR1 cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPihfQ2xvc3VyZShfX2UoKSwgKF9UcCgqKShfVHApKSgmdGFu aCkpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9W YWxBcnJheSxfVHA+LF9UcD4gdGFuaChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIHsgdHlwZWRl ZiBfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1 cmUsX1RwPiAoX0Nsb3N1cmUgKF9fdiwgKF9UcCgqKShfVHApKSgmdGFuaCkpKTsgfQ0KICAgIHRl bXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9FeHByLF9Eb20+LHR5 cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IGF0YW4oY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw ZSBfVHA7IHR5cGVkZWYgX1VuRnVuQ2xvczxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9F eHByPF9DbG9zdXJlLF9UcD4oX0Nsb3N1cmUoX19lKCksIChfVHAoKikoX1RwKSkoJmF0YW4pKSk7 IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfVmFsQXJy YXksX1RwPixfVHA+IGF0YW4oY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSB7IHR5cGVkZWYgX1Vu RnVuQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9U cD4gKF9DbG9zdXJlIChfX3YsIChfVHAoKikoX1RwKSkoJmF0YW4pKSk7IH0NCiAgICB0ZW1wbGF0 ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9tPix0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlPiBleHAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7 IHR5cGVkZWYgX1VuRnVuQ2xvczxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9D bG9zdXJlLF9UcD4oX0Nsb3N1cmUoX19lKCksIChfVHAoKikoX1RwKSkoJmV4cCkpKTsgfSB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+ LF9UcD4gZXhwKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNsb3M8 X1ZhbEFycmF5LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xv c3VyZSAoX192LCAoX1RwKCopKF9UcCkpKCZleHApKSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBf RG9tPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9tPix0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlPiBsb2coY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl PiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYg X1VuRnVuQ2xvczxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9U cD4oX0Nsb3N1cmUoX19lKCksIChfVHAoKikoX1RwKSkoJmxvZykpKTsgfSB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+LF9UcD4gbG9n KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNsb3M8X1ZhbEFycmF5 LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX192 LCAoX1RwKCopKF9UcCkpKCZsb2cpKSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxp bmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9tPix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl PiBsb2cxMChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2Up IHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfVW5GdW5D bG9zPF9FeHByLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPihfQ2xv c3VyZShfX2UoKSwgKF9UcCgqKShfVHApKSgmbG9nMTApKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUg X1RwPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPixfVHA+IGxvZzEwKGNv bnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9U cD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX192LCAo X1RwKCopKF9UcCkpKCZsb2cxMCkpKTsgfQ0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGlu ZSBfRXhwcjxfVW5GdW5DbG9zPF9FeHByLF9Eb20+LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+ IHNxcnQoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7 IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX1VuRnVuQ2xv czxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4oX0Nsb3N1 cmUoX19lKCksIChfVHAoKikoX1RwKSkoJnNxcnQpKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPixfVHA+IHNxcnQoY29uc3Qg dmFsYXJyYXk8X1RwPiYgX192KSB7IHR5cGVkZWYgX1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPiBf Q2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIChfVHAo KikoX1RwKSkoJnNxcnQpKSk7IH0NCiMgMTA2MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92 YWxhcnJheV9tZXRhLmgiIDMNCnRlbXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5s aW5lIF9FeHByPF9CaW5GdW5DbG9zPF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPix0eXBlbmFtZSBf RG9tMTo6dmFsdWVfdHlwZT5hdGFuMiAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6 OnZhbHVlX3R5cGU+JiBfX2UxLCBjb25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6dmFs dWVfdHlwZT4mIF9fZTIpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBfVHA7 IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+IF9DbG9zdXJlOyBy ZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9fZTEgKCksIF9fZTIgKCksIChf VHAoKikoX1RwLCBfVHApKSgmYXRhbjIpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5l IF9FeHByPF9CaW5GdW5DbG9zPF9FeHByLF9WYWxBcnJheSxfRG9tLHR5cGVuYW1lIF9Eb206OnZh bHVlX3R5cGU+LCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiBhdGFuMiAoY29uc3QgX0V4cHI8 X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxhcnJheTx0eXBl bmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFs dWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X0V4cHIsX1ZhbEFycmF5LF9Eb20sX1Rw PiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX2UgKCks IF9fdiwgKF9UcCgqKShfVHAsIF9UcCkpKCZhdGFuMikpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9t PiBpbmxpbmUgX0V4cHI8X0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9FeHByLHR5cGVuYW1lIF9Eb206 OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IGF0YW4yIChjb25z dCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWxhcnJheT4mIF9fdiwgY29uc3QgX0V4cHI8X0Rv bSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0Rv bTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9FeHByLF9U cCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChf X3YsIF9fZSAoKSwgKF9UcCgqKShfVHAsIF9UcCkpKCZhdGFuMikpKTsgfSB0ZW1wbGF0ZTxjbGFz cyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkZ1bkNsb3M8X0V4cHIsX0NvbnN0YW50LF9Eb20sdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IGF0YW4y IChjb25zdCBfRXhwcjxfRG9tLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25z dCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9t Ojp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfQmluRnVuQ2xvczxfRXhwcixfQ29uc3RhbnQsX0Rv bSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9f ZSAoKSwgX190LCAoX1RwKCopKF9UcCwgX1RwKSkoJmF0YW4yKSkpOyB9IHRlbXBsYXRlPGNsYXNz IF9Eb20+IGlubGluZSBfRXhwcjxfQmluRnVuQ2xvczxfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gYXRhbjIg KGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3QgX0V4cHI8X0RvbSx0 eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6 dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X0NvbnN0YW50LF9FeHByLF9UcCxf RG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3Qs IF9fZSAoKSwgKF9UcCgqKShfVHAsIF9UcCkpKCZhdGFuMikpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+IGlubGluZSBfRXhwcjxfQmluRnVuQ2xvczxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxf VHA+LCBfVHA+IGF0YW4yIChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIGNvbnN0IHZhbGFycmF5 PF9UcD4mIF9fdykgeyB0eXBlZGVmIF9CaW5GdW5DbG9zPF9WYWxBcnJheSxfVmFsQXJyYXksX1Rw LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX192 LCBfX3csIChfVHAoKikoX1RwLF9UcCkpKCZhdGFuMikpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+IGlubGluZSBfRXhwcjxfQmluRnVuQ2xvczxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+ LF9UcD4gYXRhbjIgKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgY29uc3QgX1RwJiBfX3QpIHsg dHlwZWRlZiBfQmluRnVuQ2xvczxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9zdXJl OyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9fdiwgX190LCAoX1RwKCop KF9UcCxfVHApKSgmYXRhbjIpKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4 cHI8X0JpbkZ1bkNsb3M8X0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPixfVHA+IGF0YW4yIChj b25zdCBfVHAmIF9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSB7IHR5cGVkZWYgX0JpbkZ1 bkNsb3M8X0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHBy PF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3QsIF9fdiwgKF9UcCgqKShfVHAsX1RwKSkoJmF0 YW4yKSkpOyB9DQp0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGlubGluZSBfRXhw cjxfQmluRnVuQ2xvczxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4sdHlwZW5hbWUgX0RvbTE6OnZh bHVlX3R5cGU+cG93IChjb25zdCBfRXhwcjxfRG9tMSx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlw ZT4mIF9fZTEsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYg X19lMikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBf QmluRnVuQ2xvczxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4gX0Nsb3N1cmU7IHJldHVybiBfRXhw cjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX19lMSAoKSwgX19lMiAoKSwgKF9UcCgqKShfVHAs IF9UcCkpKCZwb3cpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5G dW5DbG9zPF9FeHByLF9WYWxBcnJheSxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCB0 eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiBwb3cgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFs dWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0 eXBlZGVmIF9CaW5GdW5DbG9zPF9FeHByLF9WYWxBcnJheSxfRG9tLF9UcD4gX0Nsb3N1cmU7IHJl dHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YsIChfVHAoKiko X1RwLCBfVHApKSgmcG93KSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxf QmluRnVuQ2xvczxfVmFsQXJyYXksX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9t PiwgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gcG93IChjb25zdCB2YWxhcnJheTx0eXBlbmFt ZSBfRG9tOjp2YWxhcnJheT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7 IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsg cmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fZSAoKSwgKF9UcCgq KShfVHAsIF9UcCkpKCZwb3cpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHBy PF9CaW5GdW5DbG9zPF9FeHByLF9Db25zdGFudCxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5 cGU+LCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiBwb3cgKGNvbnN0IF9FeHByPF9Eb20sIHR5 cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UsIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVl X3R5cGUmIF9fdCkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBl ZGVmIF9CaW5GdW5DbG9zPF9FeHByLF9Db25zdGFudCxfRG9tLF9UcD4gX0Nsb3N1cmU7IHJldHVy biBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX19lICgpLCBfX3QsIChfVHAoKikoX1Rw LCBfVHApKSgmcG93KSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmlu RnVuQ2xvczxfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwg dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gcG93IChjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1 ZV90eXBlJiBfX3QsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4m IF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIF9C aW5GdW5DbG9zPF9Db25zdGFudCxfRXhwcixfVHAsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhw cjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX190LCBfX2UgKCksIChfVHAoKikoX1RwLCBfVHAp KSgmcG93KSkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5GdW5D bG9zPF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4sIF9UcD4gcG93IChjb25zdCB2YWxhcnJh eTxfVHA+JiBfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdykgeyB0eXBlZGVmIF9CaW5GdW5D bG9zPF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxf Q2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX192LCBfX3csIChfVHAoKikoX1RwLF9UcCkpKCZwb3cp KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkZ1bkNsb3M8X1Zh bEFycmF5LF9Db25zdGFudCxfVHAsX1RwPixfVHA+IHBvdyAoY29uc3QgdmFsYXJyYXk8X1RwPiYg X192LCBjb25zdCBfVHAmIF9fdCkgeyB0eXBlZGVmIF9CaW5GdW5DbG9zPF9WYWxBcnJheSxfQ29u c3RhbnQsX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xv c3VyZSAoX192LCBfX3QsIChfVHAoKikoX1RwLF9UcCkpKCZwb3cpKSk7IH0gdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkZ1bkNsb3M8X0NvbnN0YW50LF9WYWxBcnJheSxf VHAsX1RwPixfVHA+IHBvdyAoY29uc3QgX1RwJiBfX3QsIGNvbnN0IHZhbGFycmF5PF9UcD4mIF9f dikgeyB0eXBlZGVmIF9CaW5GdW5DbG9zPF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Ns b3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX190LCBfX3YsIChf VHAoKikoX1RwLF9UcCkpKCZwb3cpKSk7IH0NCg0KDQoNCn0NCiMgOTUgIi91c3IvaW5jbHVkZS9j KysvMy4yL3ZhbGFycmF5IiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTxjbGFz cyBfVHA+IGNsYXNzIHZhbGFycmF5DQogIHsNCiAgcHVibGljOg0KICAgICAgdHlwZWRlZiBfVHAg dmFsdWVfdHlwZTsNCg0KDQogICAgICB2YWxhcnJheSgpOw0KICAgICAgZXhwbGljaXQgdmFsYXJy YXkoc2l6ZV90KTsNCiAgICAgIHZhbGFycmF5KGNvbnN0IF9UcCYsIHNpemVfdCk7DQogICAgICB2 YWxhcnJheShjb25zdCBfVHAqIF9fcmVzdHJpY3RfXywgc2l6ZV90KTsNCiAgICAgIHZhbGFycmF5 KGNvbnN0IHZhbGFycmF5Jik7DQogICAgICB2YWxhcnJheShjb25zdCBzbGljZV9hcnJheTxfVHA+ Jik7DQogICAgICB2YWxhcnJheShjb25zdCBnc2xpY2VfYXJyYXk8X1RwPiYpOw0KICAgICAgdmFs YXJyYXkoY29uc3QgbWFza19hcnJheTxfVHA+Jik7DQogICAgICB2YWxhcnJheShjb25zdCBpbmRp cmVjdF9hcnJheTxfVHA+Jik7DQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgdmFs YXJyYXkoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpOw0KICAgICB+dmFsYXJyYXkoKTsNCg0K DQogICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpOw0K ICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IF9UcCYpOw0KICAgICAgdmFsYXJy YXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IHNsaWNlX2FycmF5PF9UcD4mKTsNCiAgICAgIHZhbGFy cmF5PF9UcD4mIG9wZXJhdG9yPShjb25zdCBnc2xpY2VfYXJyYXk8X1RwPiYpOw0KICAgICAgdmFs YXJyYXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IG1hc2tfYXJyYXk8X1RwPiYpOw0KICAgICAgdmFs YXJyYXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IGluZGlyZWN0X2FycmF5PF9UcD4mKTsNCg0KICAg ICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gdmFsYXJyYXk8X1RwPiYNCiAgICAgICAgb3BlcmF0b3I9 IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKTsNCg0KDQoNCiAgICAgIGNvbnN0IF9UcCYgb3BlcmF0 b3JbXShzaXplX3QpIGNvbnN0Ow0KICAgICAgX1RwJiBvcGVyYXRvcltdKHNpemVfdCk7DQoNCiAg ICAgIF9FeHByPF9TQ2xvczxfVmFsQXJyYXksX1RwPiwgX1RwPiBvcGVyYXRvcltdKHNsaWNlKSBj b25zdDsNCiAgICAgIHNsaWNlX2FycmF5PF9UcD4gb3BlcmF0b3JbXShzbGljZSk7DQogICAgICBf RXhwcjxfR0Nsb3M8X1ZhbEFycmF5LF9UcD4sIF9UcD4gb3BlcmF0b3JbXShjb25zdCBnc2xpY2Um KSBjb25zdDsNCiAgICAgIGdzbGljZV9hcnJheTxfVHA+IG9wZXJhdG9yW10oY29uc3QgZ3NsaWNl Jik7DQogICAgICB2YWxhcnJheTxfVHA+IG9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8Ym9vbD4m KSBjb25zdDsNCiAgICAgIG1hc2tfYXJyYXk8X1RwPiBvcGVyYXRvcltdKGNvbnN0IHZhbGFycmF5 PGJvb2w+Jik7DQogICAgICBfRXhwcjxfSUNsb3M8X1ZhbEFycmF5LCBfVHA+LCBfVHA+DQogICAg ICAgIG9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYpIGNvbnN0Ow0KICAgICAgaW5k aXJlY3RfYXJyYXk8X1RwPiBvcGVyYXRvcltdKGNvbnN0IHZhbGFycmF5PHNpemVfdD4mKTsNCg0K DQogICAgICBfRXhwcjxfVW5DbG9zPF9VbmFyeV9wbHVzLF9WYWxBcnJheSxfVHA+LF9UcD4gb3Bl cmF0b3IrICgpIGNvbnN0Ow0KICAgICAgX0V4cHI8X1VuQ2xvczxuZWdhdGUsX1ZhbEFycmF5LF9U cD4sX1RwPiBvcGVyYXRvci0gKCkgY29uc3Q7DQogICAgICBfRXhwcjxfVW5DbG9zPF9CaXR3aXNl X25vdCxfVmFsQXJyYXksX1RwPixfVHA+IG9wZXJhdG9yfiAoKSBjb25zdDsNCiAgICAgIF9FeHBy PF9VbkNsb3M8bG9naWNhbF9ub3QsX1ZhbEFycmF5LF9UcD4sYm9vbD4gb3BlcmF0b3IhICgpIGNv bnN0Ow0KDQoNCiAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yKj0gKGNvbnN0IF9UcCYpOw0K ICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IvPSAoY29uc3QgX1RwJik7DQogICAgICB2YWxh cnJheTxfVHA+JiBvcGVyYXRvciU9IChjb25zdCBfVHAmKTsNCiAgICAgIHZhbGFycmF5PF9UcD4m IG9wZXJhdG9yKz0gKGNvbnN0IF9UcCYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3It PSAoY29uc3QgX1RwJik7DQogICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcl49IChjb25zdCBf VHAmKTsNCiAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yJj0gKGNvbnN0IF9UcCYpOw0KICAg ICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3J8PSAoY29uc3QgX1RwJik7DQogICAgICB2YWxhcnJh eTxfVHA+JiBvcGVyYXRvcjw8PShjb25zdCBfVHAmKTsNCiAgICAgIHZhbGFycmF5PF9UcD4mIG9w ZXJhdG9yPj49KGNvbnN0IF9UcCYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IqPSAo Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IvPSAo Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IlPSAo Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IrPSAo Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3ItPSAo Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3JePSAo Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3J8PSAo Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3ImPSAo Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I8PD0o Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I+Pj0o Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAg ICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcio9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKTsN CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+DQogICAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJh dG9yLz0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpOw0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Rv bT4NCiAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IlPSAoY29uc3QgX0V4cHI8X0RvbSxf VHA+Jik7DQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2YWxhcnJheTxfVHA+ JiBvcGVyYXRvcis9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKTsNCiAgICAgIHRlbXBsYXRlPGNs YXNzIF9Eb20+DQogICAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yLT0gKGNvbnN0IF9FeHBy PF9Eb20sX1RwPiYpOw0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdmFsYXJy YXk8X1RwPiYgb3BlcmF0b3JePSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+Jik7DQogICAgICB0ZW1w bGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcnw9IChjb25z dCBfRXhwcjxfRG9tLF9UcD4mKTsNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+DQogICAgICAg IHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yJj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpOw0KICAg ICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I8 PD0oY29uc3QgX0V4cHI8X0RvbSxfVHA+Jik7DQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0K ICAgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcj4+PShjb25zdCBfRXhwcjxfRG9tLF9UcD4m KTsNCg0KDQoNCiAgICAgIHNpemVfdCBzaXplKCkgY29uc3Q7DQogICAgICBfVHAgc3VtKCkgY29u c3Q7DQogICAgICBfVHAgbWluKCkgY29uc3Q7DQogICAgICBfVHAgbWF4KCkgY29uc3Q7DQoNCg0K DQoNCiAgICAgIHZhbGFycmF5PF9UcD4gc2hpZnQgKGludCkgY29uc3Q7DQogICAgICB2YWxhcnJh eTxfVHA+IGNzaGlmdChpbnQpIGNvbnN0Ow0KICAgICAgX0V4cHI8X1ZhbEZ1bkNsb3M8X1ZhbEFy cmF5LF9UcD4sX1RwPiBhcHBseShfVHAgZnVuYyhfVHApKSBjb25zdDsNCiAgICAgIF9FeHByPF9S ZWZGdW5DbG9zPF9WYWxBcnJheSxfVHA+LF9UcD4gYXBwbHkoX1RwIGZ1bmMoY29uc3QgX1RwJikp IGNvbnN0Ow0KICAgICAgdm9pZCByZXNpemUoc2l6ZV90IF9fc2l6ZSwgX1RwIF9fYyA9IF9UcCgp KTsNCg0KICBwcml2YXRlOg0KICAgICAgc2l6ZV90IF9NX3NpemU7DQogICAgICBfVHAqIF9fcmVz dHJpY3RfXyBfTV9kYXRhOw0KDQogICAgICBmcmllbmQgY2xhc3MgX0FycmF5PF9UcD47DQogIH07 DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBfVW5hcnlfcGx1cyA6IHVuYXJ5 X2Z1bmN0aW9uPF9UcCxfVHA+IHsNCiAgICAgIF9UcCBvcGVyYXRvcigpIChjb25zdCBfVHAmIF9f dCkgY29uc3QgeyByZXR1cm4gX190OyB9DQogIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PiBzdHJ1Y3QgX0JpdHdpc2VfYW5kIDogYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7DQog ICAgICBfVHAgb3BlcmF0b3IoKSAoX1RwIF9feCwgX1RwIF9feSkgY29uc3QgeyByZXR1cm4gX194 ICYgX195OyB9DQogIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0JpdHdp c2Vfb3IgOiBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsNCiAgICAgIF9UcCBvcGVyYXRv cigpIChfVHAgX194LCBfVHAgX195KSBjb25zdCB7IHJldHVybiBfX3ggfCBfX3k7IH0NCiAgfTsN Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBfQml0d2lzZV94b3IgOiBiaW5hcnlf ZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsNCiAgICAgIF9UcCBvcGVyYXRvcigpIChfVHAgX194LCBf VHAgX195KSBjb25zdCB7IHJldHVybiBfX3ggXiBfX3k7IH0NCiAgfTsNCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+IHN0cnVjdCBfQml0d2lzZV9ub3QgOiB1bmFyeV9mdW5jdGlvbjxfVHAsX1Rw PiB7DQogICAgICBfVHAgb3BlcmF0b3IoKSAoX1RwIF9fdCkgY29uc3QgeyByZXR1cm4gfl9fdDsg fQ0KICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9TaGlmdF9sZWZ0IDog dW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gew0KICAgICAgX1RwIG9wZXJhdG9yKCkgKF9UcCBfX3gs IF9UcCBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8PCBfX3k7IH0NCiAgfTsNCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBfU2hpZnRfcmlnaHQgOiB1bmFyeV9mdW5jdGlvbjxfVHAs X1RwPiB7DQogICAgICBfVHAgb3BlcmF0b3IoKSAoX1RwIF9feCwgX1RwIF9feSkgY29uc3QgeyBy ZXR1cm4gX194ID4+IF9feTsgfQ0KICB9Ow0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0K ICBpbmxpbmUgY29uc3QgX1RwJg0KICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcltdIChzaXplX3Qg X19pKSBjb25zdA0KICB7IHJldHVybiBfTV9kYXRhW19faV07IH0NCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+DQogIGlubGluZSBfVHAmDQogIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yW10gKHNp emVfdCBfX2kpDQogIHsgcmV0dXJuIF9NX2RhdGFbX19pXTsgfQ0KDQp9DQoNCiMgMSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9zbGljZS5oIiAxIDMNCiMgNDEgIi91c3IvaW5jbHVkZS9jKysv My4yL2JpdHMvc2xpY2UuaCIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCmNsYXNzIHNsaWNlDQp7 DQpwdWJsaWM6DQogICAgc2xpY2UgKCk7DQogICAgc2xpY2UgKHNpemVfdCwgc2l6ZV90LCBzaXpl X3QpOw0KDQogICAgc2l6ZV90IHN0YXJ0ICgpIGNvbnN0Ow0KICAgIHNpemVfdCBzaXplICgpIGNv bnN0Ow0KICAgIHNpemVfdCBzdHJpZGUgKCkgY29uc3Q7DQoNCnByaXZhdGU6DQogICAgc2l6ZV90 IF9NX29mZjsNCiAgICBzaXplX3QgX01fc3o7DQogICAgc2l6ZV90IF9NX3N0Ow0KfTsNCg0KaW5s aW5lIHNsaWNlOjpzbGljZSAoKSB7fQ0KDQppbmxpbmUgc2xpY2U6OnNsaWNlIChzaXplX3QgX19v LCBzaXplX3QgX19kLCBzaXplX3QgX19zKQ0KICAgICAgICA6IF9NX29mZiAoX19vKSwgX01fc3og KF9fZCksIF9NX3N0IChfX3MpIHt9DQoNCmlubGluZSBzaXplX3QNCnNsaWNlOjpzdGFydCAoKSBj b25zdA0KICB7IHJldHVybiBfTV9vZmY7IH0NCg0KaW5saW5lIHNpemVfdA0Kc2xpY2U6OnNpemUg KCkgY29uc3QNCiAgeyByZXR1cm4gX01fc3o7IH0NCg0KaW5saW5lIHNpemVfdA0Kc2xpY2U6OnN0 cmlkZSAoKSBjb25zdA0KICB7IHJldHVybiBfTV9zdDsgfQ0KDQp9DQojIDI1OCAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvdmFsYXJyYXkiIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz L3NsaWNlX2FycmF5LmgiIDEgMw0KIyA0MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zbGlj ZV9hcnJheS5oIiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4NCiAgICBjbGFzcyBzbGljZV9hcnJheQ0KICAgIHsNCiAgICBwdWJsaWM6DQogICAgICAg IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQoNCg0KICAgICAgc2xpY2VfYXJyYXkgKGNvbnN0IHNs aWNlX2FycmF5Jik7DQoNCg0KICAgICAgc2xpY2VfYXJyYXkmIG9wZXJhdG9yPSAoY29uc3Qgc2xp Y2VfYXJyYXkmKTsNCg0KICAgICAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgdmFsYXJyYXk8X1Rw PiYpIGNvbnN0Ow0KICAgICAgICB2b2lkIG9wZXJhdG9yKj0gKGNvbnN0IHZhbGFycmF5PF9UcD4m KSBjb25zdDsNCiAgICAgICAgdm9pZCBvcGVyYXRvci89IChjb25zdCB2YWxhcnJheTxfVHA+Jikg Y29uc3Q7DQogICAgICAgIHZvaWQgb3BlcmF0b3IlPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNv bnN0Ow0KICAgICAgICB2b2lkIG9wZXJhdG9yKz0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25z dDsNCiAgICAgICAgdm9pZCBvcGVyYXRvci09IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7 DQogICAgICAgIHZvaWQgb3BlcmF0b3JePSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0Ow0K ICAgICAgICB2b2lkIG9wZXJhdG9yJj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsNCiAg ICAgICAgdm9pZCBvcGVyYXRvcnw9IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7DQogICAg ICAgIHZvaWQgb3BlcmF0b3I8PD0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsNCiAgICAg ICAgdm9pZCBvcGVyYXRvcj4+PSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0Ow0KICAgICAg ICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgX1RwICYpOw0KDQoNCiAgICAgICAgdGVtcGxhdGU8Y2xh c3MgX0RvbT4NCiAgICAgICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYp IGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9wZXJh dG9yKj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxj bGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9wZXJhdG9yLz0gKGNvbnN0IF9FeHByPF9Eb20sX1Rw PiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9w ZXJhdG9yJT0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0 ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9wZXJhdG9yKz0gKGNvbnN0IF9FeHByPF9Eb20s X1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lk IG9wZXJhdG9yLT0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1w bGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9wZXJhdG9yXj0gKGNvbnN0IF9FeHByPF9E b20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2 b2lkIG9wZXJhdG9yJj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0 ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9wZXJhdG9yfD0gKGNvbnN0IF9FeHBy PF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAg ICB2b2lkIG9wZXJhdG9yPDw9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsNCiAgICAg ICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9pZCBvcGVyYXRvcj4+PSAoY29uc3Qg X0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7DQoNCiAgICBwcml2YXRlOg0KICAgICAgICBmcmllbmQg Y2xhc3MgdmFsYXJyYXk8X1RwPjsNCiAgICAgICAgc2xpY2VfYXJyYXkoX0FycmF5PF9UcD4sIGNv bnN0IHNsaWNlJik7DQoNCiAgICAgICAgY29uc3Qgc2l6ZV90IF9NX3N6Ow0KICAgICAgICBjb25z dCBzaXplX3QgX01fc3RyaWRlOw0KICAgICAgICBjb25zdCBfQXJyYXk8X1RwPiBfTV9hcnJheTsN Cg0KDQogICAgICAgIHNsaWNlX2FycmF5ICgpOw0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+DQogICAgaW5saW5lIHNsaWNlX2FycmF5PF9UcD46OnNsaWNlX2FycmF5IChfQXJy YXk8X1RwPiBfX2EsIGNvbnN0IHNsaWNlJiBfX3MpDQogICAgICAgICAgICA6IF9NX3N6IChfX3Mu c2l6ZSAoKSksIF9NX3N0cmlkZSAoX19zLnN0cmlkZSAoKSksDQogICAgICAgICAgICAgIF9NX2Fy cmF5IChfX2EuYmVnaW4gKCkgKyBfX3Muc3RhcnQgKCkpIHt9DQoNCg0KICAgIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4NCiAgICBpbmxpbmUgc2xpY2VfYXJyYXk8X1RwPjo6c2xpY2VfYXJyYXkoY29u c3Qgc2xpY2VfYXJyYXk8X1RwPiYgYSkNCiAgICAgICAgICAgIDogX01fc3ooYS5fTV9zeiksIF9N X3N0cmlkZShhLl9NX3N0cmlkZSksIF9NX2FycmF5KGEuX01fYXJyYXkpIHt9DQoNCg0KDQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICBpbmxpbmUgc2xpY2VfYXJyYXk8X1RwPiYNCiAgc2xp Y2VfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IHNsaWNlX2FycmF5PF9UcD4mIF9fYSkNCiAg ew0KICAgIF9fdmFsYXJyYXlfY29weShfTV9hcnJheSwgX01fc3osIF9NX3N0cmlkZSwgX19hLl9N X2FycmF5LCBfX2EuX01fc3RyaWRlKTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCg0KDQogICAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIGlubGluZSB2b2lkDQogICAgc2xpY2VfYXJyYXk8 X1RwPjo6b3BlcmF0b3I9IChjb25zdCBfVHAmIF9fdCkNCiAgICB7IF9fdmFsYXJyYXlfZmlsbCAo X01fYXJyYXksIF9NX3N6LCBfTV9zdHJpZGUsIF9fdCk7IH0NCg0KICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4NCiAgICBpbmxpbmUgdm9pZA0KICAgIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9y PSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdA0KICAgIHsgX192YWxhcnJheV9jb3B5 IChfQXJyYXk8X1RwPiAoX192KSwgX01fYXJyYXksIF9NX3N6LCBfTV9zdHJpZGUpOyB9DQoNCiAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICBp bmxpbmUgdm9pZA0KICAgIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yPSAoY29uc3QgX0V4cHI8 X0RvbSxfVHA+JiBfX2UpIGNvbnN0DQogICAgeyBfX3ZhbGFycmF5X2NvcHkgKF9fZSwgX01fc3os IF9NX2FycmF5LCBfTV9zdHJpZGUpOyB9DQojIDE2MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zbGljZV9hcnJheS5oIiAzDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIHNs aWNlX2FycmF5PF9UcD46Om9wZXJhdG9yICo9IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNv bnN0IHsgX0FycmF5X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfTV9hcnJheSwgX01fc3osIF9NX3N0 cmlkZSwgX0FycmF5PF9UcD4gKF9fdikpO30gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0 ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAqPSAo Y29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9tdWx0 aXBsaWVzIChfTV9hcnJheSwgX01fc3RyaWRlLCBfX2UsIF9NX3N6KTsgfQ0KdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAvPSAoY29u c3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAo X01fYXJyYXksIF9NX3N6LCBfTV9zdHJpZGUsIF9BcnJheTxfVHA+IChfX3YpKTt9IHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZvaWQgc2xpY2VfYXJy YXk8X1RwPjo6b3BlcmF0b3IgLz0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBjb25zdCB7 IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX01fYXJyYXksIF9NX3N0cmlkZSwgX19lLCBfTV9z eik7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgc2xpY2VfYXJyYXk8X1Rw Pjo6b3BlcmF0b3IgJT0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlf YXVnbWVudGVkX21vZHVsdXMgKF9NX2FycmF5LCBfTV9zeiwgX01fc3RyaWRlLCBfQXJyYXk8X1Rw PiAoX192KSk7fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlu bGluZSB2b2lkIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yICU9IChjb25zdCBfRXhwcjxfRG9t LF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9NX2FycmF5LCBf TV9zdHJpZGUsIF9fZSwgX01fc3opOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2 b2lkIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yICs9IChjb25zdCB2YWxhcnJheTxfVHA+JiBf X3YpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9wbHVzIChfTV9hcnJheSwgX01fc3osIF9NX3N0 cmlkZSwgX0FycmF5PF9UcD4gKF9fdikpO30gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0 ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciArPSAo Y29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9wbHVz IChfTV9hcnJheSwgX01fc3RyaWRlLCBfX2UsIF9NX3N6KTsgfQ0KdGVtcGxhdGU8dHlwZW5hbWUg X1RwPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAtPSAoY29uc3QgdmFs YXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9NX2FycmF5 LCBfTV9zeiwgX01fc3RyaWRlLCBfQXJyYXk8X1RwPiAoX192KSk7fSB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSB2b2lkIHNsaWNlX2FycmF5PF9UcD46 Om9wZXJhdG9yIC09IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlf YXVnbWVudGVkX21pbnVzIChfTV9hcnJheSwgX01fc3RyaWRlLCBfX2UsIF9NX3N6KTsgfQ0KdGVt cGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRv ciBePSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRf eG9yIChfTV9hcnJheSwgX01fc3osIF9NX3N0cmlkZSwgX0FycmF5PF9UcD4gKF9fdikpO30gdGVt cGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBzbGlj ZV9hcnJheTxfVHA+OjpvcGVyYXRvciBePSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNv bnN0IHsgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9NX2FycmF5LCBfTV9zdHJpZGUsIF9fZSwgX01f c3opOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIHNsaWNlX2FycmF5PF9U cD46Om9wZXJhdG9yICY9IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0IHsgX0FycmF5 X2F1Z21lbnRlZF9hbmQgKF9NX2FycmF5LCBfTV9zeiwgX01fc3RyaWRlLCBfQXJyYXk8X1RwPiAo X192KSk7fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGlu ZSB2b2lkIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yICY9IChjb25zdCBfRXhwcjxfRG9tLF9U cD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX2FuZCAoX01fYXJyYXksIF9NX3N0cmlk ZSwgX19lLCBfTV9zeik7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgc2xp Y2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgfD0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29u c3QgeyBfQXJyYXlfYXVnbWVudGVkX29yIChfTV9hcnJheSwgX01fc3osIF9NX3N0cmlkZSwgX0Fy cmF5PF9UcD4gKF9fdikpO30gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBf RG9tPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciB8PSAoY29uc3QgX0V4 cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9vciAoX01fYXJyYXks IF9NX3N0cmlkZSwgX19lLCBfTV9zeik7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5l IHZvaWQgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgPDw9IChjb25zdCB2YWxhcnJheTxfVHA+ JiBfX3YpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChfTV9hcnJheSwgX01f c3osIF9NX3N0cmlkZSwgX0FycmF5PF9UcD4gKF9fdikpO30gdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVy YXRvciA8PD0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdt ZW50ZWRfc2hpZnRfbGVmdCAoX01fYXJyYXksIF9NX3N0cmlkZSwgX19lLCBfTV9zeik7IH0NCnRl bXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0 b3IgPj49IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRl ZF9zaGlmdF9yaWdodCAoX01fYXJyYXksIF9NX3N6LCBfTV9zdHJpZGUsIF9BcnJheTxfVHA+IChf X3YpKTt9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5l IHZvaWQgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgPj49IChjb25zdCBfRXhwcjxfRG9tLF9U cD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3JpZ2h0IChfTV9hcnJheSwg X01fc3RyaWRlLCBfX2UsIF9NX3N6KTsgfQ0KDQoNCg0KfQ0KIyAyNTkgIi91c3IvaW5jbHVkZS9j KysvMy4yL3ZhbGFycmF5IiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9nc2xp Y2UuaCIgMSAzDQojIDQxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2dzbGljZS5oIiAzDQoN Cm5hbWVzcGFjZSBzdGQgew0KDQogICAgY2xhc3MgZ3NsaWNlDQogICAgew0KICAgIHB1YmxpYzoN CiAgICAgICAgZ3NsaWNlICgpOw0KICAgICAgICBnc2xpY2UgKHNpemVfdCwgY29uc3QgdmFsYXJy YXk8c2l6ZV90PiYsIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mKTsNCg0KDQoNCiAgICAgICAgZ3Ns aWNlKGNvbnN0IGdzbGljZSYpOw0KICAgICAgICB+Z3NsaWNlKCk7DQoNCg0KICAgICAgICBnc2xp Y2UmIG9wZXJhdG9yPSAoY29uc3QgZ3NsaWNlJik7DQoNCiAgICAgICAgc2l6ZV90IHN0YXJ0ICgp IGNvbnN0Ow0KICAgICAgICB2YWxhcnJheTxzaXplX3Q+IHNpemUgKCkgY29uc3Q7DQogICAgICAg IHZhbGFycmF5PHNpemVfdD4gc3RyaWRlICgpIGNvbnN0Ow0KDQogICAgcHJpdmF0ZToNCiAgICAg ICAgc3RydWN0IF9JbmRleGVyIHsNCiAgICAgICAgICAgIHNpemVfdCBfTV9jb3VudDsNCiAgICAg ICAgICAgIHNpemVfdCBfTV9zdGFydDsNCiAgICAgICAgICAgIHZhbGFycmF5PHNpemVfdD4gX01f c2l6ZTsNCiAgICAgICAgICAgIHZhbGFycmF5PHNpemVfdD4gX01fc3RyaWRlOw0KICAgICAgICAg ICAgdmFsYXJyYXk8c2l6ZV90PiBfTV9pbmRleDsNCiAgICAgICAgICAgIF9JbmRleGVyKHNpemVf dCwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYsDQogICAgICAgICAgICAgICAgICAgICBjb25zdCB2 YWxhcnJheTxzaXplX3Q+Jik7DQogICAgICAgICAgICB2b2lkIF9NX2luY3JlbWVudF91c2UoKSB7 ICsrX01fY291bnQ7IH0NCiAgICAgICAgICAgIHNpemVfdCBfTV9kZWNyZW1lbnRfdXNlKCkgeyBy ZXR1cm4gLS1fTV9jb3VudDsgfQ0KICAgICAgICB9Ow0KDQogICAgICAgIF9JbmRleGVyKiBfTV9p bmRleDsNCg0KICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGZyaWVuZCBjbGFzcyB2YWxh cnJheTsNCiAgICB9Ow0KDQogICAgaW5saW5lIHNpemVfdA0KICAgIGdzbGljZTo6c3RhcnQgKCkg Y29uc3QNCiAgICB7IHJldHVybiBfTV9pbmRleCA/IF9NX2luZGV4LT5fTV9zdGFydCA6IDA7IH0N Cg0KICAgIGlubGluZSB2YWxhcnJheTxzaXplX3Q+DQogICAgZ3NsaWNlOjpzaXplICgpIGNvbnN0 DQogICAgeyByZXR1cm4gX01faW5kZXggPyBfTV9pbmRleC0+X01fc2l6ZSA6IHZhbGFycmF5PHNp emVfdD4oKTsgfQ0KDQogICAgaW5saW5lIHZhbGFycmF5PHNpemVfdD4NCiAgICBnc2xpY2U6OnN0 cmlkZSAoKSBjb25zdA0KICAgIHsgcmV0dXJuIF9NX2luZGV4ID8gX01faW5kZXgtPl9NX3N0cmlk ZSA6IHZhbGFycmF5PHNpemVfdD4oKTsgfQ0KDQogICAgaW5saW5lIGdzbGljZTo6Z3NsaWNlICgp IDogX01faW5kZXgoMCkge30NCg0KICAgIGlubGluZQ0KICAgIGdzbGljZTo6Z3NsaWNlKHNpemVf dCBfX28sIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9fbCwNCiAgICAgICAgICAgICAgICAgICBj b25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX3MpDQogICAgICAgICAgICA6IF9NX2luZGV4KG5ldyBn c2xpY2U6Ol9JbmRleGVyKF9fbywgX19sLCBfX3MpKSB7fQ0KDQogICAgaW5saW5lDQogICAgZ3Ns aWNlOjpnc2xpY2UoY29uc3QgZ3NsaWNlJiBfX2cpIDogX01faW5kZXgoX19nLl9NX2luZGV4KQ0K ICAgIHsgaWYgKF9NX2luZGV4KSBfTV9pbmRleC0+X01faW5jcmVtZW50X3VzZSgpOyB9DQoNCiAg ICBpbmxpbmUNCiAgICBnc2xpY2U6On5nc2xpY2UoKQ0KICAgIHsgaWYgKF9NX2luZGV4ICYmIF9N X2luZGV4LT5fTV9kZWNyZW1lbnRfdXNlKCkgPT0gMCkgZGVsZXRlIF9NX2luZGV4OyB9DQoNCiAg ICBpbmxpbmUgZ3NsaWNlJg0KICAgIGdzbGljZTo6b3BlcmF0b3I9IChjb25zdCBnc2xpY2UmIF9f ZykNCiAgICB7DQogICAgICAgIGlmIChfX2cuX01faW5kZXgpIF9fZy5fTV9pbmRleC0+X01faW5j cmVtZW50X3VzZSgpOw0KICAgICAgICBpZiAoX01faW5kZXggJiYgX01faW5kZXgtPl9NX2RlY3Jl bWVudF91c2UoKSA9PSAwKSBkZWxldGUgX01faW5kZXg7DQogICAgICAgIF9NX2luZGV4ID0gX19n Ll9NX2luZGV4Ow0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQoNCn0NCiMgMjYwICIv dXNyL2luY2x1ZGUvYysrLzMuMi92YWxhcnJheSIgMiAzDQojIDEgIi91c3IvaW5jbHVkZS9jKysv My4yL2JpdHMvZ3NsaWNlX2FycmF5LmgiIDEgMw0KIyA0MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9nc2xpY2VfYXJyYXkuaCIgMw0KDQpuYW1lc3BhY2Ugc3RkIHsNCg0KICAgIHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4gY2xhc3MgZ3NsaWNlX2FycmF5DQogICAgew0KICAgIHB1YmxpYzoNCiAg ICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCg0KICAgICAgICB2b2lkIG9wZXJhdG9yPSAo Y29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0Ow0KICAgICAgICB2b2lkIG9wZXJhdG9yKj0gKGNv bnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsNCiAgICAgICAgdm9pZCBvcGVyYXRvci89IChjb25z dCB2YWxhcnJheTxfVHA+JikgY29uc3Q7DQogICAgICAgIHZvaWQgb3BlcmF0b3IlPSAoY29uc3Qg dmFsYXJyYXk8X1RwPiYpIGNvbnN0Ow0KICAgICAgICB2b2lkIG9wZXJhdG9yKz0gKGNvbnN0IHZh bGFycmF5PF9UcD4mKSBjb25zdDsNCiAgICAgICAgdm9pZCBvcGVyYXRvci09IChjb25zdCB2YWxh cnJheTxfVHA+JikgY29uc3Q7DQogICAgICAgIHZvaWQgb3BlcmF0b3JePSAoY29uc3QgdmFsYXJy YXk8X1RwPiYpIGNvbnN0Ow0KICAgICAgICB2b2lkIG9wZXJhdG9yJj0gKGNvbnN0IHZhbGFycmF5 PF9UcD4mKSBjb25zdDsNCiAgICAgICAgdm9pZCBvcGVyYXRvcnw9IChjb25zdCB2YWxhcnJheTxf VHA+JikgY29uc3Q7DQogICAgICAgIHZvaWQgb3BlcmF0b3I8PD0oY29uc3QgdmFsYXJyYXk8X1Rw PiYpIGNvbnN0Ow0KICAgICAgICB2b2lkIG9wZXJhdG9yPj49KGNvbnN0IHZhbGFycmF5PF9UcD4m KSBjb25zdDsNCiAgICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1RwJik7DQoNCiAgICAgICAg dGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IF9FeHBy PF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAg ICB2b2lkIG9wZXJhdG9yKj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAg ICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9wZXJhdG9yLz0gKGNvbnN0IF9F eHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAg ICAgICB2b2lkIG9wZXJhdG9yJT0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAg ICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9wZXJhdG9yKz0gKGNvbnN0 IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0K ICAgICAgICB2b2lkIG9wZXJhdG9yLT0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0K ICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9wZXJhdG9yXj0gKGNv bnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9t Pg0KICAgICAgICB2b2lkIG9wZXJhdG9yJj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0 Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9wZXJhdG9yfD0g KGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBf RG9tPg0KICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBj b25zdDsNCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9pZCBvcGVyYXRv cj4+PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7DQoNCiAgICBwcml2YXRlOg0KICAg ICAgICBfQXJyYXk8X1RwPiBfTV9hcnJheTsNCiAgICAgICAgY29uc3QgdmFsYXJyYXk8c2l6ZV90 PiYgX01faW5kZXg7DQoNCiAgICAgICAgZnJpZW5kIGNsYXNzIHZhbGFycmF5PF9UcD47DQoNCiAg ICAgICAgZ3NsaWNlX2FycmF5IChfQXJyYXk8X1RwPiwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYp Ow0KDQoNCiAgICAgICAgZ3NsaWNlX2FycmF5IChjb25zdCBnc2xpY2VfYXJyYXkmKTsNCg0KDQog ICAgICAgIGdzbGljZV9hcnJheSgpOw0KICAgICAgICBnc2xpY2VfYXJyYXkmIG9wZXJhdG9yPSAo Y29uc3QgZ3NsaWNlX2FycmF5Jik7DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4NCiAgICBpbmxpbmUNCiAgICBnc2xpY2VfYXJyYXk8X1RwPjo6Z3NsaWNlX2FycmF5IChfQXJy YXk8X1RwPiBfX2EsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg dmFsYXJyYXk8c2l6ZV90PiYgX19pKQ0KICAgICAgICAgICAgOiBfTV9hcnJheSAoX19hKSwgX01f aW5kZXggKF9faSkge30NCg0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIGlubGlu ZQ0KICAgIGdzbGljZV9hcnJheTxfVHA+Ojpnc2xpY2VfYXJyYXkgKGNvbnN0IGdzbGljZV9hcnJh eTxfVHA+JiBfX2EpDQogICAgICAgICAgICA6IF9NX2FycmF5IChfX2EuX01fYXJyYXkpLCBfTV9p bmRleCAoX19hLl9NX2luZGV4KSB7fQ0KDQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQog ICAgaW5saW5lIHZvaWQNCiAgICBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3I9IChjb25zdCBf VHAmIF9fdCkNCiAgICB7DQogICAgICAgIF9fdmFsYXJyYXlfZmlsbCAoX01fYXJyYXksIF9BcnJh eTxzaXplX3Q+KF9NX2luZGV4KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfTV9pbmRleC5z aXplKCksIF9fdCk7DQogICAgfQ0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIGlu bGluZSB2b2lkDQogICAgZ3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yPSAoY29uc3QgdmFsYXJy YXk8X1RwPiYgX192KSBjb25zdA0KICAgIHsNCiAgICAgICAgX192YWxhcnJheV9jb3B5IChfQXJy YXk8X1RwPiAoX192KSwgX192LnNpemUgKCksDQogICAgICAgICAgICAgICAgICAgICAgICAgX01f YXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSk7DQogICAgfQ0KDQogICAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPg0KICAgIHRlbXBsYXRlPGNsYXNzIEU+DQogICAgaW5saW5lIHZvaWQNCiAg ICBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3I9IChjb25zdCBfRXhwcjxFLCBfVHA+JiBfX2Up IGNvbnN0DQogICAgew0KICAgICAgICBfX3ZhbGFycmF5X2NvcHkgKF9fZSwgX01faW5kZXguc2l6 ZSgpLCBfTV9hcnJheSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfQXJyYXk8c2l6ZV90Pihf TV9pbmRleCkpOw0KICAgIH0NCiMgMTU3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2dzbGlj ZV9hcnJheS5oIiAzDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIGdzbGljZV9h cnJheTxfVHA+OjpvcGVyYXRvciAqPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7 IF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9N X2luZGV4KSwgX0FycmF5PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+ OjpvcGVyYXRvciAqPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9h dWdtZW50ZWRfbXVsdGlwbGllcyAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwg X19lLCBfTV9pbmRleC5zaXplKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2 b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAvPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYg X192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX01fYXJyYXksIF9BcnJheTxz aXplX3Q+KF9NX2luZGV4KSwgX0FycmF5PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIGdzbGljZV9h cnJheTxfVHA+OjpvcGVyYXRvciAvPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7 IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2lu ZGV4KSwgX19lLCBfTV9pbmRleC5zaXplKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlu bGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAlPSAoY29uc3QgdmFsYXJyYXk8 X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX01fYXJyYXksIF9B cnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX0FycmF5PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsg fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIGdz bGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAlPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBj b25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+ KF9NX2luZGV4KSwgX19lLCBfTV9pbmRleC5zaXplKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciArPSAoY29uc3QgdmFs YXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX01fYXJyYXks IF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX0FycmF5PF9UcD4gKF9fdiksIF9fdi5zaXplICgp KTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIEU+IGlubGluZSB2b2lk IGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciArPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19l KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+ KF9NX2luZGV4KSwgX19lLCBfTV9pbmRleC5zaXplKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAtPSAoY29uc3QgdmFs YXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9NX2FycmF5 LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9BcnJheTxfVHA+IChfX3YpLCBfX3Yuc2l6ZSAo KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBFPiBpbmxpbmUgdm9p ZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgLT0gKGNvbnN0IF9FeHByPEUsIF9UcD4mIF9f ZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX21pbnVzIChfTV9hcnJheSwgX0FycmF5PHNpemVf dD4oX01faW5kZXgpLCBfX2UsIF9NX2luZGV4LnNpemUoKSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1l IF9UcD4gaW5saW5lIHZvaWQgZ3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yIF49IChjb25zdCB2 YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9NX2FycmF5 LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9BcnJheTxfVHA+IChfX3YpLCBfX3Yuc2l6ZSAo KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBFPiBpbmxpbmUgdm9p ZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgXj0gKGNvbnN0IF9FeHByPEUsIF9UcD4mIF9f ZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3hvciAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+ KF9NX2luZGV4KSwgX19lLCBfTV9pbmRleC5zaXplKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAmPSAoY29uc3QgdmFs YXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfYW5kIChfTV9hcnJheSwg X0FycmF5PHNpemVfdD4oX01faW5kZXgpLCBfQXJyYXk8X1RwPiAoX192KSwgX192LnNpemUgKCkp OyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgRT4gaW5saW5lIHZvaWQg Z3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yICY9IChjb25zdCBfRXhwcjxFLCBfVHA+JiBfX2Up IGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9hbmQgKF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90Pihf TV9pbmRleCksIF9fZSwgX01faW5kZXguc2l6ZSgpKTsgfQ0KdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PiBpbmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgfD0gKGNvbnN0IHZhbGFy cmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX29yIChfTV9hcnJheSwgX0Fy cmF5PHNpemVfdD4oX01faW5kZXgpLCBfQXJyYXk8X1RwPiAoX192KSwgX192LnNpemUgKCkpOyB9 IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgRT4gaW5saW5lIHZvaWQgZ3Ns aWNlX2FycmF5PF9UcD46Om9wZXJhdG9yIHw9IChjb25zdCBfRXhwcjxFLCBfVHA+JiBfX2UpIGNv bnN0IHsgX0FycmF5X2F1Z21lbnRlZF9vciAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2lu ZGV4KSwgX19lLCBfTV9pbmRleC5zaXplKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlu bGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciA8PD0gKGNvbnN0IHZhbGFycmF5 PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X2xlZnQgKF9NX2FycmF5 LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9BcnJheTxfVHA+IChfX3YpLCBfX3Yuc2l6ZSAo KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBFPiBpbmxpbmUgdm9p ZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgPDw9IChjb25zdCBfRXhwcjxFLCBfVHA+JiBf X2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChfTV9hcnJheSwgX0FycmF5 PHNpemVfdD4oX01faW5kZXgpLCBfX2UsIF9NX2luZGV4LnNpemUoKSk7IH0NCnRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgZ3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yID4+PSAo Y29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRf cmlnaHQgKF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9BcnJheTxfVHA+IChf X3YpLCBfX3Yuc2l6ZSAoKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFz cyBFPiBpbmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgPj49IChjb25zdCBf RXhwcjxFLCBfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAo X01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX19lLCBfTV9pbmRleC5zaXplKCkp OyB9DQoNCg0KDQp9DQojIDI2MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvdmFsYXJyYXkiIDIgMw0K IyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL21hc2tfYXJyYXkuaCIgMSAzDQojIDQxICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL21hc2tfYXJyYXkuaCIgMw0KDQpuYW1lc3BhY2Ugc3Rk IHsNCg0KICAgIHRlbXBsYXRlIDxjbGFzcyBfVHA+IGNsYXNzIG1hc2tfYXJyYXkNCiAgICB7DQog ICAgcHVibGljOg0KICAgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KDQogICAgICAgIHZv aWQgb3BlcmF0b3I9IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7DQogICAgICAgIHZvaWQg b3BlcmF0b3IqPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0Ow0KICAgICAgICB2b2lkIG9w ZXJhdG9yLz0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsNCiAgICAgICAgdm9pZCBvcGVy YXRvciU9IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7DQogICAgICAgIHZvaWQgb3BlcmF0 b3IrPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0Ow0KICAgICAgICB2b2lkIG9wZXJhdG9y LT0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsNCiAgICAgICAgdm9pZCBvcGVyYXRvcl49 IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7DQogICAgICAgIHZvaWQgb3BlcmF0b3ImPSAo Y29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0Ow0KICAgICAgICB2b2lkIG9wZXJhdG9yfD0gKGNv bnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsNCiAgICAgICAgdm9pZCBvcGVyYXRvcjw8PShjb25z dCB2YWxhcnJheTxfVHA+JikgY29uc3Q7DQogICAgICAgIHZvaWQgb3BlcmF0b3I+Pj0oY29uc3Qg dmFsYXJyYXk8X1RwPiYpIGNvbnN0Ow0KICAgICAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgX1Rw Jik7DQoNCg0KDQogICAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+DQogICAgICAgIHZvaWQgb3Bl cmF0b3I9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsNCiAgICAgICAgdGVtcGxhdGU8 Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9pZCBvcGVyYXRvcio9IChjb25zdCBfRXhwcjxfRG9tLF9U cD4mKSBjb25zdDsNCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9pZCBv cGVyYXRvci89IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsNCiAgICAgICAgdGVtcGxh dGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9pZCBvcGVyYXRvciU9IChjb25zdCBfRXhwcjxfRG9t LF9UcD4mKSBjb25zdDsNCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9p ZCBvcGVyYXRvcis9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsNCiAgICAgICAgdGVt cGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9pZCBvcGVyYXRvci09IChjb25zdCBfRXhwcjxf RG9tLF9UcD4mKSBjb25zdDsNCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAg dm9pZCBvcGVyYXRvcl49IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsNCiAgICAgICAg dGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9pZCBvcGVyYXRvciY9IChjb25zdCBfRXhw cjxfRG9tLF9UcD4mKSBjb25zdDsNCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAg ICAgdm9pZCBvcGVyYXRvcnw9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsNCiAgICAg ICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9pZCBvcGVyYXRvcjw8PShjb25zdCBf RXhwcjxfRG9tLF9UcD4mKSBjb25zdDsNCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAg ICAgICAgdm9pZCBvcGVyYXRvcj4+PShjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsNCg0K ICAgIHByaXZhdGU6DQogICAgICAgIG1hc2tfYXJyYXkgKF9BcnJheTxfVHA+LCBzaXplX3QsIF9B cnJheTxib29sPik7DQogICAgICAgIGZyaWVuZCBjbGFzcyB2YWxhcnJheTxfVHA+Ow0KDQogICAg ICAgIGNvbnN0IHNpemVfdCBfTV9zejsNCiAgICAgICAgY29uc3QgX0FycmF5PGJvb2w+IF9NX21h c2s7DQogICAgICAgIGNvbnN0IF9BcnJheTxfVHA+IF9NX2FycmF5Ow0KDQogICAgICAgIG1hc2tf YXJyYXkgKGNvbnN0IG1hc2tfYXJyYXkmKTsNCg0KDQogICAgICAgIG1hc2tfYXJyYXkgKCk7DQog ICAgICAgIG1hc2tfYXJyYXkmIG9wZXJhdG9yPSAoY29uc3QgbWFza19hcnJheSYpOw0KICAgIH07 DQoNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICBpbmxpbmUgbWFza19hcnJheTxf VHA+OjptYXNrX2FycmF5IChjb25zdCBtYXNrX2FycmF5PF9UcD4mIGEpDQogICAgICAgICAgICA6 IF9NX3N6IChhLl9NX3N6KSwgX01fbWFzayAoYS5fTV9tYXNrKSwgX01fYXJyYXkgKGEuX01fYXJy YXkpIHt9DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgaW5saW5lDQogICAgbWFz a19hcnJheTxfVHA+OjptYXNrX2FycmF5IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX3MsIF9B cnJheTxib29sPiBfX20pDQogICAgICAgICAgICA6IF9NX3N6IChfX3MpLCBfTV9tYXNrIChfX20p LCBfTV9hcnJheSAoX19hKSB7fQ0KDQoNCg0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0K ICAgIGlubGluZSB2b2lkDQogICAgbWFza19hcnJheTxfVHA+OjpvcGVyYXRvcj0gKGNvbnN0IF9U cCYgX190KQ0KICAgIHsgX192YWxhcnJheV9maWxsIChfTV9hcnJheSwgX01fc3osIF9NX21hc2ss IF9fdCk7IH0NCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICBpbmxpbmUgdm9pZA0K ICAgIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3I9IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3Yp IGNvbnN0DQogICAgeyBfX3ZhbGFycmF5X2NvcHkgKF9BcnJheTxfVHA+IChfX3YpLCBfX3Yuc2l6 ZSAoKSwgX01fYXJyYXksIF9NX21hc2spOyB9DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ DQogICAgdGVtcGxhdGU8Y2xhc3MgRT4NCiAgICBpbmxpbmUgdm9pZA0KICAgIG1hc2tfYXJyYXk8 X1RwPjo6b3BlcmF0b3I9IChjb25zdCBfRXhwcjxFLCBfVHA+JiBfX2UpIGNvbnN0DQogICAgeyBf X3ZhbGFycmF5X2NvcHkgKF9fZSwgX19lLnNpemUgKCksIF9NX2FycmF5LCBfTV9tYXNrKTsgfQ0K IyAxNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbWFza19hcnJheS5oIiAzDQp0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKj0g KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX211bHRp cGxpZXMgKF9NX2FycmF5LCBfTV9tYXNrLCBfQXJyYXk8X1RwPiAoX192KSwgX192LnNpemUgKCkp OyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgRT4gaW5saW5lIHZvaWQg bWFza19hcnJheTxfVHA+OjpvcGVyYXRvciAqPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBj b25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX01fYXJyYXksIF9NX21hc2ssIF9f ZSwgX19lLnNpemUgKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIG1h c2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgLz0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29u c3QgeyBfQXJyYXlfYXVnbWVudGVkX2RpdmlkZXMgKF9NX2FycmF5LCBfTV9tYXNrLCBfQXJyYXk8 X1RwPiAoX192KSwgX192LnNpemUgKCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxh dGU8Y2xhc3MgRT4gaW5saW5lIHZvaWQgbWFza19hcnJheTxfVHA+OjpvcGVyYXRvciAvPSAoY29u c3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAo X01fYXJyYXksIF9NX21hc2ssIF9fZSwgX19lLnNpemUgKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgJT0gKGNvbnN0IHZh bGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9NX2Fy cmF5LCBfTV9tYXNrLCBfQXJyYXk8X1RwPiAoX192KSwgX192LnNpemUgKCkpOyB9IHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgRT4gaW5saW5lIHZvaWQgbWFza19hcnJheTxf VHA+OjpvcGVyYXRvciAlPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7IF9BcnJh eV9hdWdtZW50ZWRfbW9kdWx1cyAoX01fYXJyYXksIF9NX21hc2ssIF9fZSwgX19lLnNpemUgKCkp OyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6 b3BlcmF0b3IgKz0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVn bWVudGVkX3BsdXMgKF9NX2FycmF5LCBfTV9tYXNrLCBfQXJyYXk8X1RwPiAoX192KSwgX192LnNp emUgKCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgRT4gaW5saW5l IHZvaWQgbWFza19hcnJheTxfVHA+OjpvcGVyYXRvciArPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYg X19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX01fYXJyYXksIF9NX21hc2ssIF9f ZSwgX19lLnNpemUgKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIG1h c2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgLT0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29u c3QgeyBfQXJyYXlfYXVnbWVudGVkX21pbnVzIChfTV9hcnJheSwgX01fbWFzaywgX0FycmF5PF9U cD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRl PGNsYXNzIEU+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgLT0gKGNvbnN0 IF9FeHByPEUsIF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX21pbnVzIChfTV9h cnJheSwgX01fbWFzaywgX19lLCBfX2Uuc2l6ZSAoKSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9U cD4gaW5saW5lIHZvaWQgbWFza19hcnJheTxfVHA+OjpvcGVyYXRvciBePSAoY29uc3QgdmFsYXJy YXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfeG9yIChfTV9hcnJheSwgX01f bWFzaywgX0FycmF5PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+IHRlbXBsYXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3Bl cmF0b3IgXj0gKGNvbnN0IF9FeHByPEUsIF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVu dGVkX3hvciAoX01fYXJyYXksIF9NX21hc2ssIF9fZSwgX19lLnNpemUgKCkpOyB9DQp0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgJj0g KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX2FuZCAo X01fYXJyYXksIF9NX21hc2ssIF9BcnJheTxfVHA+IChfX3YpLCBfX3Yuc2l6ZSAoKSk7IH0gdGVt cGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBFPiBpbmxpbmUgdm9pZCBtYXNrX2Fy cmF5PF9UcD46Om9wZXJhdG9yICY9IChjb25zdCBfRXhwcjxFLCBfVHA+JiBfX2UpIGNvbnN0IHsg X0FycmF5X2F1Z21lbnRlZF9hbmQgKF9NX2FycmF5LCBfTV9tYXNrLCBfX2UsIF9fZS5zaXplICgp KTsgfQ0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBtYXNrX2FycmF5PF9UcD46 Om9wZXJhdG9yIHw9IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0IHsgX0FycmF5X2F1 Z21lbnRlZF9vciAoX01fYXJyYXksIF9NX21hc2ssIF9BcnJheTxfVHA+IChfX3YpLCBfX3Yuc2l6 ZSAoKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBFPiBpbmxpbmUg dm9pZCBtYXNrX2FycmF5PF9UcD46Om9wZXJhdG9yIHw9IChjb25zdCBfRXhwcjxFLCBfVHA+JiBf X2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9vciAoX01fYXJyYXksIF9NX21hc2ssIF9fZSwg X19lLnNpemUgKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIG1hc2tf YXJyYXk8X1RwPjo6b3BlcmF0b3IgPDw9IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0 IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChfTV9hcnJheSwgX01fbWFzaywgX0FycmF5 PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBs YXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgPDw9IChj b25zdCBfRXhwcjxFLCBfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9s ZWZ0IChfTV9hcnJheSwgX01fbWFzaywgX19lLCBfX2Uuc2l6ZSAoKSk7IH0NCnRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgbWFza19hcnJheTxfVHA+OjpvcGVyYXRvciA+Pj0gKGNv bnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3Jp Z2h0IChfTV9hcnJheSwgX01fbWFzaywgX0FycmF5PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsg fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIG1h c2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgPj49IChjb25zdCBfRXhwcjxFLCBfVHA+JiBfX2UpIGNv bnN0IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX01fYXJyYXksIF9NX21hc2ssIF9f ZSwgX19lLnNpemUgKCkpOyB9DQoNCg0KDQp9DQojIDI2MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv dmFsYXJyYXkiIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2luZGlyZWN0X2Fy cmF5LmgiIDEgMw0KIyA0MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9pbmRpcmVjdF9hcnJh eS5oIiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGUgPGNsYXNzIF9UcD4NCiAgICAg Y2xhc3MgaW5kaXJlY3RfYXJyYXkNCiAgICAgew0KICAgICBwdWJsaWM6DQogICAgICAgdHlwZWRl ZiBfVHAgdmFsdWVfdHlwZTsNCg0KDQogICAgICAgaW5kaXJlY3RfYXJyYXkmIG9wZXJhdG9yPSAo Y29uc3QgaW5kaXJlY3RfYXJyYXkmKTsNCg0KICAgICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCB2 YWxhcnJheTxfVHA+JikgY29uc3Q7DQogICAgICAgdm9pZCBvcGVyYXRvcio9IChjb25zdCB2YWxh cnJheTxfVHA+JikgY29uc3Q7DQogICAgICAgdm9pZCBvcGVyYXRvci89IChjb25zdCB2YWxhcnJh eTxfVHA+JikgY29uc3Q7DQogICAgICAgdm9pZCBvcGVyYXRvciU9IChjb25zdCB2YWxhcnJheTxf VHA+JikgY29uc3Q7DQogICAgICAgdm9pZCBvcGVyYXRvcis9IChjb25zdCB2YWxhcnJheTxfVHA+ JikgY29uc3Q7DQogICAgICAgdm9pZCBvcGVyYXRvci09IChjb25zdCB2YWxhcnJheTxfVHA+Jikg Y29uc3Q7DQogICAgICAgdm9pZCBvcGVyYXRvcl49IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29u c3Q7DQogICAgICAgdm9pZCBvcGVyYXRvciY9IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7 DQogICAgICAgdm9pZCBvcGVyYXRvcnw9IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7DQog ICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0Ow0KICAg ICAgIHZvaWQgb3BlcmF0b3I+Pj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsNCiAgICAg ICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgX1RwJik7DQoNCg0KICAgICAgIHRlbXBsYXRlPGNsYXNz IF9Eb20+DQogICAgICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBj b25zdDsNCiAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgIHZvaWQgb3BlcmF0b3Iq PSAoY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0Ow0KICAgICAgIHRlbXBsYXRlPGNsYXNz IF9Eb20+DQogICAgICAgdm9pZCBvcGVyYXRvci89IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+Jikg Y29uc3Q7DQogICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICB2b2lkIG9wZXJhdG9y JT0gKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsNCiAgICAgICB0ZW1wbGF0ZTxjbGFz cyBfRG9tPg0KICAgICAgIHZvaWQgb3BlcmF0b3IrPSAoY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYp IGNvbnN0Ow0KICAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+DQogICAgICAgdm9pZCBvcGVyYXRv ci09IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7DQogICAgICAgdGVtcGxhdGU8Y2xh c3MgX0RvbT4NCiAgICAgICB2b2lkIG9wZXJhdG9yXj0gKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4m KSBjb25zdDsNCiAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgIHZvaWQgb3BlcmF0 b3ImPSAoY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0Ow0KICAgICAgIHRlbXBsYXRlPGNs YXNzIF9Eb20+DQogICAgICAgdm9pZCBvcGVyYXRvcnw9IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+ JikgY29uc3Q7DQogICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICB2b2lkIG9wZXJh dG9yPDw9IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7DQogICAgICAgdGVtcGxhdGU8 Y2xhc3MgX0RvbT4NCiAgICAgICB2b2lkIG9wZXJhdG9yPj49IChjb25zdCBfRXhwcjxfRG9tLCBf VHA+JikgY29uc3Q7DQoNCiAgICAgcHJpdmF0ZToNCiAgICAgICBpbmRpcmVjdF9hcnJheSAoY29u c3QgaW5kaXJlY3RfYXJyYXkmKTsNCiAgICAgICBpbmRpcmVjdF9hcnJheSAoX0FycmF5PF9UcD4s IHNpemVfdCwgX0FycmF5PHNpemVfdD4pOw0KDQogICAgICAgZnJpZW5kIGNsYXNzIHZhbGFycmF5 PF9UcD47DQogICAgICAgZnJpZW5kIGNsYXNzIGdzbGljZV9hcnJheTxfVHA+Ow0KDQogICAgICAg Y29uc3Qgc2l6ZV90IF9NX3N6Ow0KICAgICAgIGNvbnN0IF9BcnJheTxzaXplX3Q+IF9NX2luZGV4 Ow0KICAgICAgIGNvbnN0IF9BcnJheTxfVHA+IF9NX2FycmF5Ow0KDQoNCiAgICAgICBpbmRpcmVj dF9hcnJheSAoKTsNCiAgICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogIGlubGlu ZSBpbmRpcmVjdF9hcnJheTxfVHA+OjppbmRpcmVjdF9hcnJheShjb25zdCBpbmRpcmVjdF9hcnJh eTxfVHA+JiBfX2EpDQogICAgICAgICAgOiBfTV9zeiAoX19hLl9NX3N6KSwgX01faW5kZXggKF9f YS5fTV9pbmRleCksDQogICAgICAgICAgICBfTV9hcnJheSAoX19hLl9NX2FycmF5KSB7fQ0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lDQogICAgIGluZGlyZWN0X2FycmF5 PF9UcD46OmluZGlyZWN0X2FycmF5IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX3MsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQXJyYXk8c2l6ZV90PiBfX2kp DQogICAgICAgICAgICAgOiBfTV9zeiAoX19zKSwgX01faW5kZXggKF9faSksIF9NX2FycmF5IChf X2EpIHt9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgaW5kaXJlY3Rf YXJyYXk8X1RwPiYNCiAgICAgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IGlu ZGlyZWN0X2FycmF5PF9UcD4mIF9fYSkNCiAgICAgew0KICAgICAgIF9fdmFsYXJyYXlfY29weShf X2EuX01fYXJyYXksIF9NX3N6LCBfX2EuX01faW5kZXgsIF9NX2FycmF5LCBfTV9pbmRleCk7DQog ICAgICAgcmV0dXJuICp0aGlzOw0KICAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ DQogICAgIGlubGluZSB2b2lkDQogICAgIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yPSAo Y29uc3QgX1RwJiBfX3QpDQogICAgIHsgX192YWxhcnJheV9maWxsKF9NX2FycmF5LCBfTV9pbmRl eCwgX01fc3osIF9fdCk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgIGlubGlu ZSB2b2lkDQogICAgIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yPSAoY29uc3QgdmFsYXJy YXk8X1RwPiYgX192KSBjb25zdA0KICAgICB7IF9fdmFsYXJyYXlfY29weSAoX0FycmF5PF9UcD4g KF9fdiksIF9NX3N6LCBfTV9hcnJheSwgX01faW5kZXgpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPg0KICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICBpbmxpbmUgdm9pZA0KICAg ICBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvcj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYg X19lKSBjb25zdA0KICAgICB7IF9fdmFsYXJyYXlfY29weSAoX19lLCBfTV9zeiwgX01fYXJyYXks IF9NX2luZGV4KTsgfQ0KIyAxNTcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvaW5kaXJlY3Rf YXJyYXkuaCIgMw0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9h cnJheTxfVHA+OjpvcGVyYXRvciAqPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7 IF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX01fYXJyYXksIF9NX2luZGV4LCBfQXJyYXk8 X1RwPiAoX192KSwgX01fc3opOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xh c3MgX0RvbT4gaW5saW5lIHZvaWQgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKj0gKGNv bnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbXVsdGlw bGllcyAoX01fYXJyYXksIF9NX2luZGV4LCBfX2UsIF9NX3N6KTsgfQ0KdGVtcGxhdGU8dHlwZW5h bWUgX1RwPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvciAvPSAoY29u c3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAo X01fYXJyYXksIF9NX2luZGV4LCBfQXJyYXk8X1RwPiAoX192KSwgX01fc3opOyB9IHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZvaWQgaW5kaXJlY3Rf YXJyYXk8X1RwPjo6b3BlcmF0b3IgLz0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBjb25z dCB7IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX01fYXJyYXksIF9NX2luZGV4LCBfX2UsIF9N X3N6KTsgfQ0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJh eTxfVHA+OjpvcGVyYXRvciAlPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9B cnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX01fYXJyYXksIF9NX2luZGV4LCBfQXJyYXk8X1RwPiAo X192KSwgX01fc3opOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0Rv bT4gaW5saW5lIHZvaWQgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3IgJT0gKGNvbnN0IF9F eHByPF9Eb20sX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX01f YXJyYXksIF9NX2luZGV4LCBfX2UsIF9NX3N6KTsgfQ0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBp bmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvciArPSAoY29uc3QgdmFsYXJy YXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX01fYXJyYXksIF9N X2luZGV4LCBfQXJyYXk8X1RwPiAoX192KSwgX01fc3opOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZvaWQgaW5kaXJlY3RfYXJyYXk8X1RwPjo6 b3BlcmF0b3IgKz0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9h dWdtZW50ZWRfcGx1cyAoX01fYXJyYXksIF9NX2luZGV4LCBfX2UsIF9NX3N6KTsgfQ0KdGVtcGxh dGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRv ciAtPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRf bWludXMgKF9NX2FycmF5LCBfTV9pbmRleCwgX0FycmF5PF9UcD4gKF9fdiksIF9NX3N6KTsgfSB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSB2b2lkIGlu ZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yIC09IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9f ZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX21pbnVzIChfTV9hcnJheSwgX01faW5kZXgsIF9f ZSwgX01fc3opOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIGluZGlyZWN0 X2FycmF5PF9UcD46Om9wZXJhdG9yIF49IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0 IHsgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9NX2FycmF5LCBfTV9pbmRleCwgX0FycmF5PF9UcD4g KF9fdiksIF9NX3N6KTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9E b20+IGlubGluZSB2b2lkIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yIF49IChjb25zdCBf RXhwcjxfRG9tLF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3hvciAoX01fYXJy YXksIF9NX2luZGV4LCBfX2UsIF9NX3N6KTsgfQ0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxp bmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvciAmPSAoY29uc3QgdmFsYXJyYXk8 X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfYW5kIChfTV9hcnJheSwgX01faW5k ZXgsIF9BcnJheTxfVHA+IChfX3YpLCBfTV9zeik7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0 ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVy YXRvciAmPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21l bnRlZF9hbmQgKF9NX2FycmF5LCBfTV9pbmRleCwgX19lLCBfTV9zeik7IH0NCnRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3IgfD0g KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX29yIChf TV9hcnJheSwgX01faW5kZXgsIF9BcnJheTxfVHA+IChfX3YpLCBfTV9zeik7IH0gdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9h cnJheTxfVHA+OjpvcGVyYXRvciB8PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0 IHsgX0FycmF5X2F1Z21lbnRlZF9vciAoX01fYXJyYXksIF9NX2luZGV4LCBfX2UsIF9NX3N6KTsg fQ0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+ OjpvcGVyYXRvciA8PD0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlf YXVnbWVudGVkX3NoaWZ0X2xlZnQgKF9NX2FycmF5LCBfTV9pbmRleCwgX0FycmF5PF9UcD4gKF9f diksIF9NX3N6KTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+ IGlubGluZSB2b2lkIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yIDw8PSAoY29uc3QgX0V4 cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChf TV9hcnJheSwgX01faW5kZXgsIF9fZSwgX01fc3opOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ IGlubGluZSB2b2lkIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yID4+PSAoY29uc3QgdmFs YXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfcmlnaHQgKF9N X2FycmF5LCBfTV9pbmRleCwgX0FycmF5PF9UcD4gKF9fdiksIF9NX3N6KTsgfSB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSB2b2lkIGluZGlyZWN0X2Fy cmF5PF9UcD46Om9wZXJhdG9yID4+PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0 IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX01fYXJyYXksIF9NX2luZGV4LCBfX2Us IF9NX3N6KTsgfQ0KDQoNCg0KfQ0KIyAyNjMgIi91c3IvaW5jbHVkZS9jKysvMy4yL3ZhbGFycmF5 IiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogIGlu bGluZSB2YWxhcnJheTxfVHA+Ojp2YWxhcnJheSAoKSA6IF9NX3NpemUgKDApLCBfTV9kYXRhICgw KSB7fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgaW5saW5lIHZhbGFycmF5PF9UcD46 OnZhbGFycmF5IChzaXplX3QgX19uKQ0KICAgICAgOiBfTV9zaXplKF9fbiksIF9NX2RhdGEoX192 YWxhcnJheV9nZXRfc3RvcmFnZTxfVHA+KF9fbikpDQogIHsgX192YWxhcnJheV9kZWZhdWx0X2Nv bnN0cnVjdChfTV9kYXRhLCBfTV9kYXRhICsgX19uKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4NCiAgaW5saW5lIHZhbGFycmF5PF9UcD46OnZhbGFycmF5IChjb25zdCBfVHAmIF9fdCwg c2l6ZV90IF9fbikNCiAgICA6IF9NX3NpemUoX19uKSwgX01fZGF0YShfX3ZhbGFycmF5X2dldF9z dG9yYWdlPF9UcD4oX19uKSkNCiAgeyBfX3ZhbGFycmF5X2ZpbGxfY29uc3RydWN0IChfTV9kYXRh LCBfTV9kYXRhICsgX19uLCBfX3QpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICBp bmxpbmUgdmFsYXJyYXk8X1RwPjo6dmFsYXJyYXkgKGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9f cCwgc2l6ZV90IF9fbikNCiAgICA6IF9NX3NpemUoX19uKSwgX01fZGF0YShfX3ZhbGFycmF5X2dl dF9zdG9yYWdlPF9UcD4oX19uKSkNCiAgeyBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0IChfX3As IF9fcCArIF9fbiwgX01fZGF0YSk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogIGlu bGluZSB2YWxhcnJheTxfVHA+Ojp2YWxhcnJheSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KQ0K ICAgIDogX01fc2l6ZShfX3YuX01fc2l6ZSksIF9NX2RhdGEoX192YWxhcnJheV9nZXRfc3RvcmFn ZTxfVHA+KF9fdi5fTV9zaXplKSkNCiAgeyBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0IChfX3Yu X01fZGF0YSwgX192Ll9NX2RhdGEgKyBfTV9zaXplLCBfTV9kYXRhKTsgfQ0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4NCiAgaW5saW5lIHZhbGFycmF5PF9UcD46OnZhbGFycmF5IChjb25zdCBz bGljZV9hcnJheTxfVHA+JiBfX3NhKQ0KICAgIDogX01fc2l6ZShfX3NhLl9NX3N6KSwgX01fZGF0 YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX19zYS5fTV9zeikpDQogIHsNCiAgICBfX3Zh bGFycmF5X2NvcHkNCiAgICAgIChfX3NhLl9NX2FycmF5LCBfX3NhLl9NX3N6LCBfX3NhLl9NX3N0 cmlkZSwgX0FycmF5PF9UcD4oX01fZGF0YSkpOw0KICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPg0KICBpbmxpbmUgdmFsYXJyYXk8X1RwPjo6dmFsYXJyYXkgKGNvbnN0IGdzbGljZV9hcnJh eTxfVHA+JiBfX2dhKQ0KICAgIDogX01fc2l6ZShfX2dhLl9NX2luZGV4LnNpemUoKSksDQogICAg ICBfTV9kYXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihfTV9zaXplKSkNCiAgew0KICAg IF9fdmFsYXJyYXlfY29weQ0KICAgICAgKF9fZ2EuX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9f Z2EuX01faW5kZXgpLA0KICAgICAgIF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplKTsNCiAg fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgaW5saW5lIHZhbGFycmF5PF9UcD46OnZh bGFycmF5IChjb25zdCBtYXNrX2FycmF5PF9UcD4mIF9fbWEpDQogICAgOiBfTV9zaXplKF9fbWEu X01fc3opLCBfTV9kYXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihfX21hLl9NX3N6KSkN CiAgew0KICAgIF9fdmFsYXJyYXlfY29weQ0KICAgICAgKF9fbWEuX01fYXJyYXksIF9fbWEuX01f bWFzaywgX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUpOw0KICB9DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPg0KICBpbmxpbmUgdmFsYXJyYXk8X1RwPjo6dmFsYXJyYXkgKGNvbnN0IGlu ZGlyZWN0X2FycmF5PF9UcD4mIF9faWEpDQogICAgOiBfTV9zaXplKF9faWEuX01fc3opLCBfTV9k YXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihfX2lhLl9NX3N6KSkNCiAgew0KICAgIF9f dmFsYXJyYXlfY29weQ0KICAgICAgKF9faWEuX01fYXJyYXksIF9faWEuX01faW5kZXgsIF9BcnJh eTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplKTsNCiAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgaW5saW5lIHZhbGFycmF5PF9UcD46OnZhbGFycmF5 IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UpDQogICAgOiBfTV9zaXplKF9fZS5zaXplICgp KSwgX01fZGF0YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX01fc2l6ZSkpDQogIHsgX192 YWxhcnJheV9jb3B5IChfX2UsIF9NX3NpemUsIF9BcnJheTxfVHA+KF9NX2RhdGEpKTsgfQ0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgaW5saW5lIHZhbGFycmF5PF9UcD46On52YWxhcnJh eSAoKQ0KICB7DQogICAgICBfX3ZhbGFycmF5X2Rlc3Ryb3lfZWxlbWVudHMoX01fZGF0YSwgX01f ZGF0YSArIF9NX3NpemUpOw0KICAgICAgX192YWxhcnJheV9yZWxlYXNlX21lbW9yeShfTV9kYXRh KTsNCiAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgaW5saW5lIHZhbGFycmF5PF9U cD4mDQogIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192 KQ0KICB7DQoNCg0KDQogICAgICBfX3ZhbGFycmF5X2NvcHkoX192Ll9NX2RhdGEsIF9NX3NpemUs IF9NX2RhdGEpOw0KICAgICAgcmV0dXJuICp0aGlzOw0KICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPg0KICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYNCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0 b3I9IChjb25zdCBfVHAmIF9fdCkNCiAgew0KICAgICAgX192YWxhcnJheV9maWxsIChfTV9kYXRh LCBfTV9zaXplLCBfX3QpOw0KICAgICAgcmV0dXJuICp0aGlzOw0KICB9DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPg0KICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYNCiAgdmFsYXJyYXk8X1RwPjo6 b3BlcmF0b3I9IChjb25zdCBzbGljZV9hcnJheTxfVHA+JiBfX3NhKQ0KICB7DQogICAgICBfX3Zh bGFycmF5X2NvcHkgKF9fc2EuX01fYXJyYXksIF9fc2EuX01fc3osDQogICAgICAgICAgICAgIF9f c2EuX01fc3RyaWRlLCBfQXJyYXk8X1RwPihfTV9kYXRhKSk7DQogICAgICByZXR1cm4gKnRoaXM7 DQogIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogIGlubGluZSB2YWxhcnJheTxfVHA+ Jg0KICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcj0gKGNvbnN0IGdzbGljZV9hcnJheTxfVHA+JiBf X2dhKQ0KICB7DQogICAgICBfX3ZhbGFycmF5X2NvcHkgKF9fZ2EuX01fYXJyYXksIF9BcnJheTxz aXplX3Q+KF9fZ2EuX01faW5kZXgpLA0KICAgICAgICAgICAgICBfQXJyYXk8X1RwPihfTV9kYXRh KSwgX01fc2l6ZSk7DQogICAgICByZXR1cm4gKnRoaXM7DQogIH0NCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+DQogIGlubGluZSB2YWxhcnJheTxfVHA+Jg0KICB2YWxhcnJheTxfVHA+OjpvcGVy YXRvcj0gKGNvbnN0IG1hc2tfYXJyYXk8X1RwPiYgX19tYSkNCiAgew0KICAgICAgX192YWxhcnJh eV9jb3B5IChfX21hLl9NX2FycmF5LCBfX21hLl9NX21hc2ssDQogICAgICAgICAgICAgIF9BcnJh eTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplKTsNCiAgICAgIHJldHVybiAqdGhpczsNCiAgfQ0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgaW5saW5lIHZhbGFycmF5PF9UcD4mDQogIHZhbGFy cmF5PF9UcD46Om9wZXJhdG9yPSAoY29uc3QgaW5kaXJlY3RfYXJyYXk8X1RwPiYgX19pYSkNCiAg ew0KICAgICAgX192YWxhcnJheV9jb3B5IChfX2lhLl9NX2FycmF5LCBfX2lhLl9NX2luZGV4LA0K ICAgICAgICAgICAgICAgX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUpOw0KICAgICAgcmV0 dXJuICp0aGlzOw0KICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFz cyBfRG9tPg0KICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYNCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0 b3I9IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UpDQogIHsNCiAgICAgIF9fdmFsYXJyYXlf Y29weSAoX19lLCBfTV9zaXplLCBfQXJyYXk8X1RwPihfTV9kYXRhKSk7DQogICAgICByZXR1cm4g KnRoaXM7DQogIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogIGlubGluZSBfRXhwcjxf U0Nsb3M8X1ZhbEFycmF5LF9UcD4sIF9UcD4NCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3JbXSAo c2xpY2UgX19zKSBjb25zdA0KICB7DQogICAgICB0eXBlZGVmIF9TQ2xvczxfVmFsQXJyYXksX1Rw PiBfQ2xvc3VyZTsNCiAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUg KF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX3MpKTsNCiAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4NCiAgaW5saW5lIHNsaWNlX2FycmF5PF9UcD4NCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0 b3JbXSAoc2xpY2UgX19zKQ0KICB7DQogICAgICByZXR1cm4gc2xpY2VfYXJyYXk8X1RwPiAoX0Fy cmF5PF9UcD4oX01fZGF0YSksIF9fcyk7DQogIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ DQogIGlubGluZSBfRXhwcjxfR0Nsb3M8X1ZhbEFycmF5LF9UcD4sIF9UcD4NCiAgdmFsYXJyYXk8 X1RwPjo6b3BlcmF0b3JbXSAoY29uc3QgZ3NsaWNlJiBfX2dzKSBjb25zdA0KICB7DQogICAgICB0 eXBlZGVmIF9HQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsNCiAgICAgIHJldHVybiBfRXhw cjxfQ2xvc3VyZSwgX1RwPg0KICAgICAgICAgIChfQ2xvc3VyZSAoX0FycmF5PF9UcD4oX01fZGF0 YSksIF9fZ3MuX01faW5kZXgtPl9NX2luZGV4KSk7DQogIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+DQogIGlubGluZSBnc2xpY2VfYXJyYXk8X1RwPg0KICB2YWxhcnJheTxfVHA+OjpvcGVy YXRvcltdIChjb25zdCBnc2xpY2UmIF9fZ3MpDQogIHsNCiAgICAgIHJldHVybiBnc2xpY2VfYXJy YXk8X1RwPg0KICAgICAgICAgIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX19ncy5fTV9pbmRleC0+ X01faW5kZXgpOw0KICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICBpbmxpbmUgdmFs YXJyYXk8X1RwPg0KICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcltdIChjb25zdCB2YWxhcnJheTxi b29sPiYgX19tKSBjb25zdA0KICB7DQogICAgICBzaXplX3QgX19zICgwKTsNCiAgICAgIHNpemVf dCBfX2UgKF9fbS5zaXplICgpKTsNCiAgICAgIGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19lOyAr K19faSkNCiAgICAgICAgICBpZiAoX19tW19faV0pICsrX19zOw0KICAgICAgcmV0dXJuIHZhbGFy cmF5PF9UcD4gKG1hc2tfYXJyYXk8X1RwPiAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9fcywNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FycmF5PGJvb2w+IChfX20p KSk7DQogIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogIGlubGluZSBtYXNrX2FycmF5 PF9UcD4NCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3JbXSAoY29uc3QgdmFsYXJyYXk8Ym9vbD4m IF9fbSkNCiAgew0KICAgICAgc2l6ZV90IF9fcyAoMCk7DQogICAgICBzaXplX3QgX19lIChfX20u c2l6ZSAoKSk7DQogICAgICBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fZTsgKytfX2kpDQogICAg ICAgICAgaWYgKF9fbVtfX2ldKSArK19fczsNCiAgICAgIHJldHVybiBtYXNrX2FycmF5PF9UcD4g KF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX3MsIF9BcnJheTxib29sPiAoX19tKSk7DQogIH0NCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogIGlubGluZSBfRXhwcjxfSUNsb3M8X1ZhbEFycmF5 LF9UcD4sIF9UcD4NCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3JbXSAoY29uc3QgdmFsYXJyYXk8 c2l6ZV90PiYgX19pKSBjb25zdA0KICB7DQogICAgICB0eXBlZGVmIF9JQ2xvczxfVmFsQXJyYXks X1RwPiBfQ2xvc3VyZTsNCiAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1 cmUgKCp0aGlzLCBfX2kpKTsNCiAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgaW5s aW5lIGluZGlyZWN0X2FycmF5PF9UcD4NCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3JbXSAoY29u c3QgdmFsYXJyYXk8c2l6ZV90PiYgX19pKQ0KICB7DQogICAgICByZXR1cm4gaW5kaXJlY3RfYXJy YXk8X1RwPiAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9faS5zaXplKCksDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9BcnJheTxzaXplX3Q+IChfX2kpKTsNCiAgfQ0KDQogIHRlbXBs YXRlPGNsYXNzIF9UcD4NCiAgaW5saW5lIHNpemVfdCB2YWxhcnJheTxfVHA+OjpzaXplICgpIGNv bnN0IHsgcmV0dXJuIF9NX3NpemU7IH0NCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHA+DQogIGlubGlu ZSBfVHANCiAgdmFsYXJyYXk8X1RwPjo6c3VtICgpIGNvbnN0DQogIHsNCiAgICAgIHJldHVybiBf X3ZhbGFycmF5X3N1bShfTV9kYXRhLCBfTV9kYXRhICsgX01fc2l6ZSk7DQogIH0NCiMgNDg2ICIv dXNyL2luY2x1ZGUvYysrLzMuMi92YWxhcnJheSIgMw0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0K ICAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPg0KICAgICB2YWxhcnJheTxfVHA+OjpzaGlmdChpbnQg X19uKSBjb25zdA0KICAgICB7DQogICAgICAgX1RwKiBjb25zdCBfX2EgPSBzdGF0aWNfY2FzdDxf VHAqPg0KICAgICAgICAgKF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9UcCkgKiBfTV9zaXplKSk7 DQogICAgICAgaWYgKF9fbiA9PSAwKQ0KICAgICAgICAgX192YWxhcnJheV9jb3B5X2NvbnN0cnVj dChfTV9kYXRhLCBfTV9kYXRhICsgX01fc2l6ZSwgX19hKTsNCiAgICAgICBlbHNlIGlmIChfX24g PiAwKQ0KICAgICAgICAgew0KICAgICAgICAgICBpZiAoc2l6ZV90KF9fbikgPiBfTV9zaXplKQ0K ICAgICAgICAgICAgIF9fdmFsYXJyYXlfZGVmYXVsdF9jb25zdHJ1Y3QoX19hLCBfX2EgKyBfX24p Ow0KICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgX192YWxh cnJheV9jb3B5X2NvbnN0cnVjdChfTV9kYXRhK19fbiwgX01fZGF0YSArIF9NX3NpemUsIF9fYSk7 DQogICAgICAgICAgICAgICBfX3ZhbGFycmF5X2RlZmF1bHRfY29uc3RydWN0KF9fYStfTV9zaXpl LV9fbiwgX19hICsgX01fc2l6ZSk7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAgICAg IGVsc2UNCiAgICAgICAgIHsNCiAgICAgICAgICAgX192YWxhcnJheV9jb3B5X2NvbnN0cnVjdCAo X01fZGF0YSwgX01fZGF0YStfTV9zaXplK19fbiwgX19hLV9fbik7DQogICAgICAgICAgIF9fdmFs YXJyYXlfZGVmYXVsdF9jb25zdHJ1Y3QoX19hLCBfX2EgLSBfX24pOw0KICAgICAgICAgfQ0KICAg ICAgIHJldHVybiB2YWxhcnJheTxfVHA+IChfX2EsIF9NX3NpemUpOw0KICAgICB9DQoNCiAgdGVt cGxhdGUgPGNsYXNzIF9UcD4NCiAgICAgaW5saW5lIHZhbGFycmF5PF9UcD4NCiAgICAgdmFsYXJy YXk8X1RwPjo6Y3NoaWZ0IChpbnQgX19uKSBjb25zdA0KICAgICB7DQogICAgICAgX1RwKiBjb25z dCBfX2EgPSBzdGF0aWNfY2FzdDxfVHAqPg0KICAgICAgICAgKF9fYnVpbHRpbl9hbGxvY2EgKHNp emVvZihfVHApICogX01fc2l6ZSkpOw0KICAgICAgIGlmIChfX24gPT0gMCkNCiAgICAgICAgIF9f dmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX01fZGF0YSwgX01fZGF0YSArIF9NX3NpemUsIF9fYSk7 DQogICAgICAgZWxzZSBpZiAoX19uID4gMCkNCiAgICAgICAgIHsNCiAgICAgICAgICAgX192YWxh cnJheV9jb3B5X2NvbnN0cnVjdChfTV9kYXRhLCBfTV9kYXRhK19fbiwgX19hK19NX3NpemUtX19u KTsNCiAgICAgICAgICAgX192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfTV9kYXRhK19fbiwgX01f ZGF0YSArIF9NX3NpemUsIF9fYSk7DQogICAgICAgICB9DQogICAgICAgZWxzZQ0KICAgICAgICAg ew0KICAgICAgICAgICBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0DQogICAgICAgICAgICAgKF9N X2RhdGEgKyBfTV9zaXplK19fbiwgX01fZGF0YSArIF9NX3NpemUsIF9fYSk7DQogICAgICAgICAg IF9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QNCiAgICAgICAgICAgICAoX01fZGF0YSwgX01fZGF0 YSArIF9NX3NpemUrX19uLCBfX2EgLSBfX24pOw0KICAgICAgICAgfQ0KICAgICAgIHJldHVybiB2 YWxhcnJheTxfVHA+KF9fYSwgX01fc2l6ZSk7DQogICAgIH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPg0KICBpbmxpbmUgdm9pZA0KICB2YWxhcnJheTxfVHA+OjpyZXNpemUgKHNpemVfdCBfX24s IF9UcCBfX2MpDQogIHsNCg0KDQoNCiAgICBfX3ZhbGFycmF5X2Rlc3Ryb3lfZWxlbWVudHMoX01f ZGF0YSwgX01fZGF0YSArIF9NX3NpemUpOw0KICAgIGlmIChfTV9zaXplICE9IF9fbikNCiAgICAg IHsNCiAgICAgICAgX192YWxhcnJheV9yZWxlYXNlX21lbW9yeShfTV9kYXRhKTsNCiAgICAgICAg X01fc2l6ZSA9IF9fbjsNCiAgICAgICAgX01fZGF0YSA9IF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8 X1RwPihfX24pOw0KICAgICAgfQ0KICAgIF9fdmFsYXJyYXlfZmlsbF9jb25zdHJ1Y3QoX01fZGF0 YSwgX01fZGF0YSArIF9fbiwgX19jKTsNCiAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4N CiAgaW5saW5lIF9UcA0KICB2YWxhcnJheTxfVHA+OjptaW4oKSBjb25zdA0KICB7DQogICAgICBy ZXR1cm4gKm1pbl9lbGVtZW50IChfTV9kYXRhLCBfTV9kYXRhK19NX3NpemUpOw0KICB9DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICBpbmxpbmUgX1RwDQogIHZhbGFycmF5PF9UcD46Om1h eCgpIGNvbnN0DQogIHsNCiAgICAgIHJldHVybiAqbWF4X2VsZW1lbnQgKF9NX2RhdGEsIF9NX2Rh dGErX01fc2l6ZSk7DQogIH0NCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHA+DQogIGlubGluZSBfRXhw cjxfVmFsRnVuQ2xvczxfVmFsQXJyYXksX1RwPixfVHA+DQogIHZhbGFycmF5PF9UcD46OmFwcGx5 IChfVHAgZnVuYyAoX1RwKSkgY29uc3QNCiAgew0KICAgICAgdHlwZWRlZiBfVmFsRnVuQ2xvczxf VmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsNCiAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+ IChfQ2xvc3VyZSAoKnRoaXMsIGZ1bmMpKTsNCiAgfQ0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcD4N CiAgaW5saW5lIF9FeHByPF9SZWZGdW5DbG9zPF9WYWxBcnJheSxfVHA+LF9UcD4NCiAgdmFsYXJy YXk8X1RwPjo6YXBwbHkgKF9UcCBmdW5jIChjb25zdCBfVHAgJikpIGNvbnN0DQogIHsNCiAgICAg IHR5cGVkZWYgX1JlZkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4gX0Nsb3N1cmU7DQogICAgICByZXR1 cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKCp0aGlzLCBmdW5jKSk7DQogIH0NCiMg NTkxICIvdXNyL2luY2x1ZGUvYysrLzMuMi92YWxhcnJheSIgMw0KICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4gaW5saW5lIF9FeHByPF9VbkNsb3M8X1VuYXJ5X3BsdXMsX1ZhbEFycmF5LF9UcD4s IF9UcD4gdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgKygpIGNvbnN0IHsgdHlwZWRlZiBfVW5DbG9z PF9VbmFyeV9wbHVzLF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1 cmUsIF9UcD4gKF9DbG9zdXJlICgqdGhpcykpOyB9DQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PiBpbmxpbmUgX0V4cHI8X1VuQ2xvczxuZWdhdGUsX1ZhbEFycmF5LF9UcD4sIF9UcD4gdmFsYXJy YXk8X1RwPjo6b3BlcmF0b3IgLSgpIGNvbnN0IHsgdHlwZWRlZiBfVW5DbG9zPG5lZ2F0ZSxfVmFs QXJyYXksX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+IChfQ2xvc3Vy ZSAoKnRoaXMpKTsgfQ0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9V bkNsb3M8X0JpdHdpc2Vfbm90LF9WYWxBcnJheSxfVHA+LCBfVHA+IHZhbGFycmF5PF9UcD46Om9w ZXJhdG9yIH4oKSBjb25zdCB7IHR5cGVkZWYgX1VuQ2xvczxfQml0d2lzZV9ub3QsX1ZhbEFycmF5 LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKCp0 aGlzKSk7IH0NCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICBpbmxpbmUgX0V4cHI8 X1VuQ2xvczxsb2dpY2FsX25vdCxfVmFsQXJyYXksX1RwPiwgYm9vbD4NCiAgdmFsYXJyYXk8X1Rw Pjo6b3BlcmF0b3IhKCkgY29uc3QNCiAgew0KICAgICAgdHlwZWRlZiBfVW5DbG9zPGxvZ2ljYWxf bm90LF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOw0KICAgICAgcmV0dXJuIF9FeHByPF9DbG9zdXJl LCBib29sPiAoX0Nsb3N1cmUgKCp0aGlzKSk7DQogIH0NCiMgNjIzICIvdXNyL2luY2x1ZGUvYysr LzMuMi92YWxhcnJheSIgMw0KdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFsYXJyYXk8X1Rw PiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yICs9IChjb25zdCBfVHAgJl9fdCkgeyBfQXJyYXlf YXVnbWVudGVkX3BsdXMgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplLCBfX3QpOyByZXR1 cm4gKnRoaXM7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZh bGFycmF5PF9UcD46Om9wZXJhdG9yICs9IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgX0Fy cmF5X2F1Z21lbnRlZF9wbHVzIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX0FycmF5 PF9UcD4oX192Ll9NX2RhdGEpKTsgcmV0dXJuICp0aGlzOyB9DQp0ZW1wbGF0ZTxjbGFzcyBfVHA+ IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgLT0gKGNvbnN0 IF9UcCAmX190KSB7IF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+KF9NX2RhdGEp LCBfTV9zaXplLCBfX3QpOyByZXR1cm4gKnRoaXM7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxp bmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yIC09IChjb25zdCB2YWxh cnJheTxfVHA+ICZfX3YpIHsgX0FycmF5X2F1Z21lbnRlZF9taW51cyAoX0FycmF5PF9UcD4oX01f ZGF0YSksIF9NX3NpemUsIF9BcnJheTxfVHA+KF9fdi5fTV9kYXRhKSk7IHJldHVybiAqdGhpczsg fQ0KdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFycmF5PF9U cD46Om9wZXJhdG9yICo9IChjb25zdCBfVHAgJl9fdCkgeyBfQXJyYXlfYXVnbWVudGVkX211bHRp cGxpZXMgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplLCBfX3QpOyByZXR1cm4gKnRoaXM7 IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFycmF5PF9U cD46Om9wZXJhdG9yICo9IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgX0FycmF5X2F1Z21l bnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX0FycmF5PF9U cD4oX192Ll9NX2RhdGEpKTsgcmV0dXJuICp0aGlzOyB9DQp0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlu bGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgLz0gKGNvbnN0IF9U cCAmX190KSB7IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX0FycmF5PF9UcD4oX01fZGF0YSks IF9NX3NpemUsIF9fdCk7IHJldHVybiAqdGhpczsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGlu ZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgLz0gKGNvbnN0IHZhbGFy cmF5PF9UcD4gJl9fdikgeyBfQXJyYXlfYXVnbWVudGVkX2RpdmlkZXMgKF9BcnJheTxfVHA+KF9N X2RhdGEpLCBfTV9zaXplLCBfQXJyYXk8X1RwPihfX3YuX01fZGF0YSkpOyByZXR1cm4gKnRoaXM7 IH0NCnRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxf VHA+OjpvcGVyYXRvciAlPSAoY29uc3QgX1RwICZfX3QpIHsgX0FycmF5X2F1Z21lbnRlZF9tb2R1 bHVzIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX190KTsgcmV0dXJuICp0aGlzOyB9 IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+ OjpvcGVyYXRvciAlPSAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IF9BcnJheV9hdWdtZW50 ZWRfbW9kdWx1cyAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUsIF9BcnJheTxfVHA+KF9f di5fTV9kYXRhKSk7IHJldHVybiAqdGhpczsgfQ0KdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUg dmFsYXJyYXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yIF49IChjb25zdCBfVHAgJl9f dCkgeyBfQXJyYXlfYXVnbWVudGVkX3hvciAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUs IF9fdCk7IHJldHVybiAqdGhpczsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSB2YWxhcnJh eTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgXj0gKGNvbnN0IHZhbGFycmF5PF9UcD4g Jl9fdikgeyBfQXJyYXlfYXVnbWVudGVkX3hvciAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3Np emUsIF9BcnJheTxfVHA+KF9fdi5fTV9kYXRhKSk7IHJldHVybiAqdGhpczsgfQ0KdGVtcGxhdGU8 Y2xhc3MgX1RwPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9y ICY9IChjb25zdCBfVHAgJl9fdCkgeyBfQXJyYXlfYXVnbWVudGVkX2FuZCAoX0FycmF5PF9UcD4o X01fZGF0YSksIF9NX3NpemUsIF9fdCk7IHJldHVybiAqdGhpczsgfSB0ZW1wbGF0ZTxjbGFzcyBf VHA+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgJj0gKGNv bnN0IHZhbGFycmF5PF9UcD4gJl9fdikgeyBfQXJyYXlfYXVnbWVudGVkX2FuZCAoX0FycmF5PF9U cD4oX01fZGF0YSksIF9NX3NpemUsIF9BcnJheTxfVHA+KF9fdi5fTV9kYXRhKSk7IHJldHVybiAq dGhpczsgfQ0KdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFy cmF5PF9UcD46Om9wZXJhdG9yIHw9IChjb25zdCBfVHAgJl9fdCkgeyBfQXJyYXlfYXVnbWVudGVk X29yIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX190KTsgcmV0dXJuICp0aGlzOyB9 IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+ OjpvcGVyYXRvciB8PSAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IF9BcnJheV9hdWdtZW50 ZWRfb3IgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplLCBfQXJyYXk8X1RwPihfX3YuX01f ZGF0YSkpOyByZXR1cm4gKnRoaXM7IH0NCnRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFy cmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+OjpvcGVyYXRvciA8PD0gKGNvbnN0IF9UcCAmX190KSB7 IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3Np emUsIF9fdCk7IHJldHVybiAqdGhpczsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSB2YWxh cnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgPDw9IChjb25zdCB2YWxhcnJheTxf VHA+ICZfX3YpIHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChfQXJyYXk8X1RwPihfTV9k YXRhKSwgX01fc2l6ZSwgX0FycmF5PF9UcD4oX192Ll9NX2RhdGEpKTsgcmV0dXJuICp0aGlzOyB9 DQp0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1Rw Pjo6b3BlcmF0b3IgPj49IChjb25zdCBfVHAgJl9fdCkgeyBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0 X3JpZ2h0IChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX190KTsgcmV0dXJuICp0aGlz OyB9IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxf VHA+OjpvcGVyYXRvciA+Pj0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdikgeyBfQXJyYXlfYXVn bWVudGVkX3NoaWZ0X3JpZ2h0IChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX0FycmF5 PF9UcD4oX192Ll9NX2RhdGEpKTsgcmV0dXJuICp0aGlzOyB9DQoNCg0KDQoNCn0NCg0KDQpuYW1l c3BhY2Ugc3RkDQp7DQojIDY1MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvdmFsYXJyYXkiIDMNCnRl bXBsYXRlPGNsYXNzIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZhbGFycmF5PF9U cD4gJiB2YWxhcnJheTxfVHA+OjpvcGVyYXRvciArPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+ICZf X2UpIHsgX0FycmF5X2F1Z21lbnRlZF9wbHVzIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX19lLCBf TV9zaXplKTsgcmV0dXJuICp0aGlzOyB9DQp0ZW1wbGF0ZTxjbGFzcyBfVHA+IHRlbXBsYXRlPGNs YXNzIF9Eb20+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3Ig LT0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiAmX19lKSB7IF9BcnJheV9hdWdtZW50ZWRfbWludXMg KF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX2UsIF9NX3NpemUpOyByZXR1cm4gKnRoaXM7IH0NCnRl bXBsYXRlPGNsYXNzIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZhbGFycmF5PF9U cD4gJiB2YWxhcnJheTxfVHA+OjpvcGVyYXRvciAqPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+ICZf X2UpIHsgX0FycmF5X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1RwPihfTV9kYXRhKSwg X19lLCBfTV9zaXplKTsgcmV0dXJuICp0aGlzOyB9DQp0ZW1wbGF0ZTxjbGFzcyBfVHA+IHRlbXBs YXRlPGNsYXNzIF9Eb20+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3Bl cmF0b3IgLz0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiAmX19lKSB7IF9BcnJheV9hdWdtZW50ZWRf ZGl2aWRlcyAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9fZSwgX01fc2l6ZSk7IHJldHVybiAqdGhp czsgfQ0KdGVtcGxhdGU8Y2xhc3MgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdmFs YXJyYXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yICU9IChjb25zdCBfRXhwcjxfRG9t LF9UcD4gJl9fZSkgeyBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+KF9NX2Rh dGEpLCBfX2UsIF9NX3NpemUpOyByZXR1cm4gKnRoaXM7IH0NCnRlbXBsYXRlPGNsYXNzIF9UcD4g dGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+ OjpvcGVyYXRvciBePSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+ICZfX2UpIHsgX0FycmF5X2F1Z21l bnRlZF94b3IgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX2UsIF9NX3NpemUpOyByZXR1cm4gKnRo aXM7IH0NCnRlbXBsYXRlPGNsYXNzIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZh bGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+OjpvcGVyYXRvciAmPSAoY29uc3QgX0V4cHI8X0Rv bSxfVHA+ICZfX2UpIHsgX0FycmF5X2F1Z21lbnRlZF9hbmQgKF9BcnJheTxfVHA+KF9NX2RhdGEp LCBfX2UsIF9NX3NpemUpOyByZXR1cm4gKnRoaXM7IH0NCnRlbXBsYXRlPGNsYXNzIF9UcD4gdGVt cGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+Ojpv cGVyYXRvciB8PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+ICZfX2UpIHsgX0FycmF5X2F1Z21lbnRl ZF9vciAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9fZSwgX01fc2l6ZSk7IHJldHVybiAqdGhpczsg fQ0KdGVtcGxhdGU8Y2xhc3MgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdmFsYXJy YXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yIDw8PSAoY29uc3QgX0V4cHI8X0RvbSxf VHA+ICZfX2UpIHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChfQXJyYXk8X1RwPihfTV9k YXRhKSwgX19lLCBfTV9zaXplKTsgcmV0dXJuICp0aGlzOyB9DQp0ZW1wbGF0ZTxjbGFzcyBfVHA+ IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1Rw Pjo6b3BlcmF0b3IgPj49IChjb25zdCBfRXhwcjxfRG9tLF9UcD4gJl9fZSkgeyBfQXJyYXlfYXVn bWVudGVkX3NoaWZ0X3JpZ2h0IChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX19lLCBfTV9zaXplKTsg cmV0dXJuICp0aGlzOyB9DQojIDY5MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvdmFsYXJyYXkiIDMN CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPHBsdXMsX1ZhbEFy cmF5LF9WYWxBcnJheSxfVHAsX1RwPiwgX1RwPiBvcGVyYXRvciArIChjb25zdCB2YWxhcnJheTxf VHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPHBs dXMsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9D bG9zdXJlLCBfVHA+IChfQ2xvc3VyZSAoX192LCBfX3cpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxwbHVzLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9U cD4sX1RwPiBvcGVyYXRvciArIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAm X190KSB7IHR5cGVkZWYgX0JpbkNsb3M8cGx1cyxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+ IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9f dCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPHBsdXMs X0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPixfVHA+IG9wZXJhdG9yICsgKGNvbnN0IF9UcCAm X190LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xvczxwbHVzLF9D b25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3Vy ZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g aW5saW5lIF9FeHByPF9CaW5DbG9zPG1pbnVzLF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4s IF9UcD4gb3BlcmF0b3IgLSAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192LCBjb25zdCB2YWxhcnJh eTxfVHA+ICZfX3cpIHsgdHlwZWRlZiBfQmluQ2xvczxtaW51cyxfVmFsQXJyYXksX1ZhbEFycmF5 LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJl IChfX3YsIF9fdykpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5D bG9zPG1pbnVzLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4sX1RwPiBvcGVyYXRvciAtIChj b25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNs b3M8bWludXMsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9F eHByPF9DbG9zdXJlLCBfVHA+IChfQ2xvc3VyZSAoX192LCBfX3QpKTsgfSB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtaW51cyxfQ29uc3RhbnQsX1ZhbEFycmF5 LF9UcCxfVHA+LF9UcD4gb3BlcmF0b3IgLSAoY29uc3QgX1RwICZfX3QsIGNvbnN0IHZhbGFycmF5 PF9UcD4gJl9fdikgeyB0eXBlZGVmIF9CaW5DbG9zPG1pbnVzLF9Db25zdGFudCxfVmFsQXJyYXks X1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUg KF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5D bG9zPG11bHRpcGxpZXMsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiwgX1RwPiBvcGVyYXRv ciAqIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykg eyB0eXBlZGVmIF9CaW5DbG9zPG11bHRpcGxpZXMsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1Rw PiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+IChfQ2xvc3VyZSAoX192LCBf X3cpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtdWx0 aXBsaWVzLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4sX1RwPiBvcGVyYXRvciAqIChjb25z dCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8 bXVsdGlwbGllcyxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4g X0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9IHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPG11bHRpcGxpZXMsX0NvbnN0YW50LF9W YWxBcnJheSxfVHAsX1RwPixfVHA+IG9wZXJhdG9yICogKGNvbnN0IF9UcCAmX190LCBjb25zdCB2 YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xvczxtdWx0aXBsaWVzLF9Db25zdGFu dCxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1Rw PiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5l IF9FeHByPF9CaW5DbG9zPGRpdmlkZXMsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiwgX1Rw PiBvcGVyYXRvciAvIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9U cD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPGRpdmlkZXMsX1ZhbEFycmF5LF9WYWxBcnJheSxf VHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+IChfQ2xvc3VyZSAo X192LCBfX3cpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xv czxkaXZpZGVzLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4sX1RwPiBvcGVyYXRvciAvIChj b25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNs b3M8ZGl2aWRlcyxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4g X0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9IHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGRpdmlkZXMsX0NvbnN0YW50LF9WYWxB cnJheSxfVHAsX1RwPixfVHA+IG9wZXJhdG9yIC8gKGNvbnN0IF9UcCAmX190LCBjb25zdCB2YWxh cnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xvczxkaXZpZGVzLF9Db25zdGFudCxfVmFs QXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Ns b3N1cmUgKF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHBy PF9CaW5DbG9zPG1vZHVsdXMsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiwgX1RwPiBvcGVy YXRvciAlIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9f dykgeyB0eXBlZGVmIF9CaW5DbG9zPG1vZHVsdXMsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1Rw PiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+IChfQ2xvc3VyZSAoX192LCBf X3cpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtb2R1 bHVzLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4sX1RwPiBvcGVyYXRvciAlIChjb25zdCB2 YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8bW9k dWx1cyxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8 X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPG1vZHVsdXMsX0NvbnN0YW50LF9WYWxBcnJheSxf VHAsX1RwPixfVHA+IG9wZXJhdG9yICUgKGNvbnN0IF9UcCAmX190LCBjb25zdCB2YWxhcnJheTxf VHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xvczxtb2R1bHVzLF9Db25zdGFudCxfVmFsQXJyYXks X1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUg KF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5D bG9zPF9CaXR3aXNlX3hvcixfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+LCBfVHA+IG9wZXJh dG9yIF4gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX193 KSB7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2VfeG9yLF9WYWxBcnJheSxfVmFsQXJyYXksX1Rw LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9f diwgX193KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8 X0JpdHdpc2VfeG9yLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4sX1RwPiBvcGVyYXRvciBe IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0Jp bkNsb3M8X0JpdHdpc2VfeG9yLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4gX0Nsb3N1cmU7 IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdiwgX190KSk7IH0gdGVt cGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2VfeG9yLF9D b25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4sX1RwPiBvcGVyYXRvciBeIChjb25zdCBfVHAgJl9f dCwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2Vf eG9yLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxf Q2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1l IF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3aXNlX2FuZCxfVmFsQXJyYXksX1ZhbEFy cmF5LF9UcCxfVHA+LCBfVHA+IG9wZXJhdG9yICYgKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwg Y29uc3QgdmFsYXJyYXk8X1RwPiAmX193KSB7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2VfYW5k LF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xv c3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9WYWxBcnJheSxfQ29uc3RhbnQs X1RwLF9UcD4sX1RwPiBvcGVyYXRvciAmIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0 IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9WYWxBcnJheSxfQ29u c3RhbnQsX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Ns b3N1cmUgKF9fdiwgX190KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8 X0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4sX1RwPiBv cGVyYXRvciAmIChjb25zdCBfVHAgJl9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IHR5 cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4g X0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdCwgX192 KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3 aXNlX29yLF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4sIF9UcD4gb3BlcmF0b3IgfCAoY29u c3QgdmFsYXJyYXk8X1RwPiAmX192LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3cpIHsgdHlwZWRl ZiBfQmluQ2xvczxfQml0d2lzZV9vcixfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9z dXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdykpOyB9 IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3aXNlX29y LF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4sX1RwPiBvcGVyYXRvciB8IChjb25zdCB2YWxh cnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdp c2Vfb3IsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHBy PF9DbG9zdXJlLCBfVHA+IChfQ2xvc3VyZSAoX192LCBfX3QpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfQml0d2lzZV9vcixfQ29uc3RhbnQsX1ZhbEFy cmF5LF9UcCxfVHA+LF9UcD4gb3BlcmF0b3IgfCAoY29uc3QgX1RwICZfX3QsIGNvbnN0IHZhbGFy cmF5PF9UcD4gJl9fdikgeyB0eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX29yLF9Db25zdGFudCxf VmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAo X0Nsb3N1cmUgKF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9F eHByPF9CaW5DbG9zPF9TaGlmdF9sZWZ0LF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4sIF9U cD4gb3BlcmF0b3IgPDwgKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgdmFsYXJyYXk8 X1RwPiAmX193KSB7IHR5cGVkZWYgX0JpbkNsb3M8X1NoaWZ0X2xlZnQsX1ZhbEFycmF5LF9WYWxB cnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+IChfQ2xv c3VyZSAoX192LCBfX3cpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxf QmluQ2xvczxfU2hpZnRfbGVmdCxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+LF9UcD4gb3Bl cmF0b3IgPDwgKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgX1RwICZfX3QpIHsgdHlw ZWRlZiBfQmluQ2xvczxfU2hpZnRfbGVmdCxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9D bG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdCkp OyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9TaGlmdF9s ZWZ0LF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4sX1RwPiBvcGVyYXRvciA8PCAoY29uc3Qg X1RwICZfX3QsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdikgeyB0eXBlZGVmIF9CaW5DbG9zPF9T aGlmdF9sZWZ0LF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBf RXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfVmFsQXJyYXks X1ZhbEFycmF5LF9UcCxfVHA+LCBfVHA+IG9wZXJhdG9yID4+IChjb25zdCB2YWxhcnJheTxfVHA+ ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPF9TaGlm dF9yaWdodCxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4 cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdykpOyB9IHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfVmFsQXJyYXksX0Nv bnN0YW50LF9UcCxfVHA+LF9UcD4gb3BlcmF0b3IgPj4gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9f diwgY29uc3QgX1RwICZfX3QpIHsgdHlwZWRlZiBfQmluQ2xvczxfU2hpZnRfcmlnaHQsX1ZhbEFy cmF5LF9Db25zdGFudCxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBf VHA+IChfQ2xvc3VyZSAoX192LCBfX3QpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGlu ZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRfcmlnaHQsX0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1Rw PixfVHA+IG9wZXJhdG9yID4+IChjb25zdCBfVHAgJl9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiAm X192KSB7IHR5cGVkZWYgX0JpbkNsb3M8X1NoaWZ0X3JpZ2h0LF9Db25zdGFudCxfVmFsQXJyYXks X1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUg KF9fdCwgX192KSk7IH0NCiMgNzI5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi92YWxhcnJheSIgMw0K dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bG9naWNhbF9hbmQs X1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPixib29sPiBvcGVyYXRvciAmJiAoY29uc3QgdmFs YXJyYXk8X1RwPiAmX192LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3cpIHsgdHlwZWRlZiBfQmlu Q2xvczxsb2dpY2FsX2FuZCxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyBy ZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX3cpKTsgfSB0ZW1w bGF0ZTxjbGFzcyBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsb2dpY2FsX2FuZCxfVmFsQXJy YXksX0NvbnN0YW50LF9UcCxfVHA+LGJvb2w+IG9wZXJhdG9yICYmIChjb25zdCB2YWxhcnJheTxf VHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8bG9naWNhbF9hbmQs X1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z dXJlLCBib29sPiAoX0Nsb3N1cmUgKF9fdiwgX190KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBp bmxpbmUgX0V4cHI8X0JpbkNsb3M8bG9naWNhbF9hbmQsX0NvbnN0YW50LF9WYWxBcnJheSxfVHAs X1RwPixib29sPiBvcGVyYXRvciAmJiAoY29uc3QgX1RwICZfX3QsIGNvbnN0IHZhbGFycmF5PF9U cD4gJl9fdikgeyB0eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfYW5kLF9Db25zdGFudCxfVmFsQXJy YXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9z dXJlIChfX3QsIF9fdikpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxf QmluQ2xvczxsb2dpY2FsX29yLF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4sYm9vbD4gb3Bl cmF0b3IgfHwgKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgdmFsYXJyYXk8X1RwPiAm X193KSB7IHR5cGVkZWYgX0JpbkNsb3M8bG9naWNhbF9vcixfVmFsQXJyYXksX1ZhbEFycmF5LF9U cCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAo X192LCBfX3cpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxs b2dpY2FsX29yLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgfHwg KGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgX1RwICZfX3QpIHsgdHlwZWRlZiBfQmlu Q2xvczxsb2dpY2FsX29yLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4gX0Nsb3N1cmU7IHJl dHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9IHRlbXBs YXRlPGNsYXNzIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGxvZ2ljYWxfb3IsX0NvbnN0YW50 LF9WYWxBcnJheSxfVHAsX1RwPixib29sPiBvcGVyYXRvciB8fCAoY29uc3QgX1RwICZfX3QsIGNv bnN0IHZhbGFycmF5PF9UcD4gJl9fdikgeyB0eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfb3IsX0Nv bnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJl LCBib29sPiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g aW5saW5lIF9FeHByPF9CaW5DbG9zPGVxdWFsX3RvLF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9U cD4sYm9vbD4gb3BlcmF0b3IgPT0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgdmFs YXJyYXk8X1RwPiAmX193KSB7IHR5cGVkZWYgX0JpbkNsb3M8ZXF1YWxfdG8sX1ZhbEFycmF5LF9W YWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBib29sPiAo X0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgX0V4cHI8 X0JpbkNsb3M8ZXF1YWxfdG8sX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPixib29sPiBvcGVy YXRvciA9PSAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192LCBjb25zdCBfVHAgJl9fdCkgeyB0eXBl ZGVmIF9CaW5DbG9zPGVxdWFsX3RvLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4gX0Nsb3N1 cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9 IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGVxdWFsX3RvLF9Db25z dGFudCxfVmFsQXJyYXksX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPT0gKGNvbnN0IF9UcCAmX190 LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xvczxlcXVhbF90byxf Q29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1 cmUsIGJvb2w+IChfQ2xvc3VyZSAoX190LCBfX3YpKTsgfQ0KdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bm90X2VxdWFsX3RvLF9WYWxBcnJheSxfVmFsQXJyYXks X1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgIT0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29u c3QgdmFsYXJyYXk8X1RwPiAmX193KSB7IHR5cGVkZWYgX0JpbkNsb3M8bm90X2VxdWFsX3RvLF9W YWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3Vy ZSwgYm9vbD4gKF9DbG9zdXJlIChfX3YsIF9fdykpOyB9IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5s aW5lIF9FeHByPF9CaW5DbG9zPG5vdF9lcXVhbF90byxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxf VHA+LGJvb2w+IG9wZXJhdG9yICE9IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9U cCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8bm90X2VxdWFsX3RvLF9WYWxBcnJheSxfQ29uc3Rh bnQsX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9z dXJlIChfX3YsIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIF9FeHByPF9CaW5D bG9zPG5vdF9lcXVhbF90byxfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+LGJvb2w+IG9wZXJh dG9yICE9IChjb25zdCBfVHAgJl9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IHR5cGVk ZWYgX0JpbkNsb3M8bm90X2VxdWFsX3RvLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Ns b3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3QsIF9fdikp OyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsZXNzLF9W YWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPCAoY29uc3QgdmFsYXJy YXk8X1RwPiAmX192LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3cpIHsgdHlwZWRlZiBfQmluQ2xv czxsZXNzLF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhw cjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3YsIF9fdykpOyB9IHRlbXBsYXRlPGNsYXNz IF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGxlc3MsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAs X1RwPixib29sPiBvcGVyYXRvciA8IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9U cCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8bGVzcyxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxf VHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX192 LCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsZXNz LF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPCAoY29uc3QgX1Rw ICZfX3QsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdikgeyB0eXBlZGVmIF9CaW5DbG9zPGxlc3Ms X0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z dXJlLCBib29sPiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9U cD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGdyZWF0ZXIsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAs X1RwPixib29sPiBvcGVyYXRvciA+IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZh bGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPGdyZWF0ZXIsX1ZhbEFycmF5LF9W YWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBib29sPiAo X0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgX0V4cHI8 X0JpbkNsb3M8Z3JlYXRlcixfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+LGJvb2w+IG9wZXJh dG9yID4gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgX1RwICZfX3QpIHsgdHlwZWRl ZiBfQmluQ2xvczxncmVhdGVyLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4gX0Nsb3N1cmU7 IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9IHRl bXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGdyZWF0ZXIsX0NvbnN0YW50 LF9WYWxBcnJheSxfVHAsX1RwPixib29sPiBvcGVyYXRvciA+IChjb25zdCBfVHAgJl9fdCwgY29u c3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRlcixfQ29uc3Rh bnQsX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIGJv b2w+IChfQ2xvc3VyZSAoX190LCBfX3YpKTsgfQ0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxp bmUgX0V4cHI8X0JpbkNsb3M8bGVzc19lcXVhbCxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+ LGJvb2w+IG9wZXJhdG9yIDw9IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFy cmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPGxlc3NfZXF1YWwsX1ZhbEFycmF5LF9W YWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBib29sPiAo X0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgX0V4cHI8 X0JpbkNsb3M8bGVzc19lcXVhbCxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+LGJvb2w+IG9w ZXJhdG9yIDw9IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5 cGVkZWYgX0JpbkNsb3M8bGVzc19lcXVhbCxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9D bG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX3Qp KTsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsZXNzX2VxdWFs LF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPD0gKGNvbnN0IF9U cCAmX190LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xvczxsZXNz X2VxdWFsLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhw cjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3QsIF9fdikpOyB9DQp0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9WYWxBcnJheSxf VmFsQXJyYXksX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPj0gKGNvbnN0IHZhbGFycmF5PF9UcD4g Jl9fdiwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX193KSB7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRl cl9lcXVhbCxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4 cHI8X0Nsb3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX3cpKTsgfSB0ZW1wbGF0ZTxjbGFz cyBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9WYWxBcnJheSxfQ29u c3RhbnQsX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPj0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9f diwgY29uc3QgX1RwICZfX3QpIHsgdHlwZWRlZiBfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9WYWxB cnJheSxfQ29uc3RhbnQsX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwg Ym9vbD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5l IF9FeHByPF9CaW5DbG9zPGdyZWF0ZXJfZXF1YWwsX0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1Rw Pixib29sPiBvcGVyYXRvciA+PSAoY29uc3QgX1RwICZfX3QsIGNvbnN0IHZhbGFycmF5PF9UcD4g Jl9fdikgeyB0eXBlZGVmIF9CaW5DbG9zPGdyZWF0ZXJfZXF1YWwsX0NvbnN0YW50LF9WYWxBcnJh eSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBib29sPiAoX0Nsb3N1 cmUgKF9fdCwgX192KSk7IH0NCg0KDQoNCn0NCiMgMiAidmFsYXJydGVzdC5jcHAiIDINCg0KaW50 IG1haW4oKSB7DQogICAgc3RkOjp2YWxhcnJheTxpbnQ+IHYxOw0KICAgIHN0ZDo6dmFsYXJyYXk8 aW50PiB2MjsNCg0KICAgIHYxLnJlc2l6ZSgxKTsNCiAgICB2MVswXT0xMDsNCiAgICB2Mj12MTsN CiAgICBpbnQgaT12MlswXTsNCn0NCg==