From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3369 invoked by alias); 10 Sep 2002 09:56:04 -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 3343 invoked by uid 71); 10 Sep 2002 09:56:03 -0000 Resent-Date: 10 Sep 2002 09:56:03 -0000 Resent-Message-ID: <20020910095603.3342.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, claude.boulade@bull.net Received: (qmail 29302 invoked by uid 61); 10 Sep 2002 09:47:18 -0000 Message-Id: <20020910094718.29301.qmail@sources.redhat.com> Date: Tue, 10 Sep 2002 02:56:00 -0000 From: claude.boulade@bull.net Reply-To: claude.boulade@bull.net To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: optimization/7878: GCC 3.2 Internal compiler error in simplify_subreg X-SW-Source: 2002-09/txt/msg00168.txt.bz2 List-Id: >Number: 7878 >Category: optimization >Synopsis: GCC 3.2 Internal compiler error in simplify_subreg >Confidential: no >Severity: serious >Priority: low >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Tue Sep 10 02:56:02 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Claude Boulade - BULL S.A. >Release: 3.1.1 / 3.2 >Organization: >Environment: cygwin 1.3.12.4 under Windows 98 SE GCC (GCC) 3.2 20020818 (prerelease) >Description: GCC issues the message Internal compiler error in simplify_subreg, at simplify-rtx.c:2452 while compiling tc-ppc.c with -O2 Compilation is OK with -O0 gcc --version GCC (GCC) 3.2 20020818 (prerelease) Copyright (C) 2002 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gcc -v Reading specs from /usr/lib/gcc-lib/i686-pc-cygwin/3.2/specs Configured with: /netrel/src/gcc-3.2-1/configure --enable-languages=c,c++,f77,java --enable-libgcj --enable-threads=posix --with-system-zlib --enable-nls --without-included-gettext --enable-interpreter --disable-sjlj-exceptions --disable-version-specific-runtime-libs --enable-shared --build=i686-pc-linux --host=i686-pc-cygwin --target=i686-pc-cygwin --enable-haifa --prefix=/usr --exec-prefix=/usr--sysconfdir=/etc --libdir=/usr/lib --includedir=/nonexistent/include --libexecdir=/usr/sbin Thread model: posix >How-To-Repeat: Compile the attached file with -O2 >Fix: Compile the attached file with -O0 >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="tc-ppc.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="tc-ppc.c" IyAxICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2NvbmZpZy90Yy1wcGMuYyIKIyAxICI8YnVpbHQt aW4+IgojIDEgIjxjb21tYW5kIGxpbmU+IgojIDEgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvY29u ZmlnL3RjLXBwYy5jIgojIDIzICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2NvbmZpZy90Yy1wcGMu YyIKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zdGRp by5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL19hbnNpLmgiIDEgMwojIDE1ICIvdXNyL2luY2x1ZGUv X2Fuc2kuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9uZXdsaWIuaCIgMSAzCiMgMTYgIi91c3IvaW5j bHVkZS9fYW5zaS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NvbmZpZy5oIiAxIDMKCgoK IyAxICIvdXNyL2luY2x1ZGUvbWFjaGluZS9pZWVlZnAuaCIgMSAzCiMgNSAiL3Vzci9pbmNsdWRl L3N5cy9jb25maWcuaCIgMiAzCiMgMTcgIi91c3IvaW5jbHVkZS9fYW5zaS5oIiAyIDMKIyAzMCAi L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYt cGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDMgIi91c3IvbGliL2djYy1s aWIvaTY4Ni1wYy1jeWd3aW4vMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgc2l6ZV90OwojIDM1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKIyAxICIvdXNy L2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0 NCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRhcmcuaCIg Mwp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDM4ICIvdXNyL2lu Y2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIg MSAzCiMgMTQgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9z eXMvX3R5cGVzLmgiIDEgMwojIDEyICIvdXNyL2luY2x1ZGUvc3lzL190eXBlcy5oIiAzCnR5cGVk ZWYgbG9uZyBfb2ZmX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgX29mZjY0X3Q7 CgoKdHlwZWRlZiBpbnQgX3NzaXplX3Q7CgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYt cGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMjMgIi91c3IvbGliL2djYy1s aWIvaTY4Ni1wYy1jeWd3aW4vMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgd2ludF90OwojIDIzICIvdXNyL2luY2x1ZGUvc3lzL190eXBlcy5oIiAyIDMKCgoKCnR5 cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBfX3dj aDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1ZTsKfSBfbWJzdGF0ZV90OwoKCgoKCnR5 cGVkZWYgX21ic3RhdGVfdCBtYnN0YXRlX3Q7CgoKCgp0eXBlZGVmIGludCBfZmxvY2tfdDsKIyAx NSAiL3Vzci9pbmNsdWRlL3N5cy9yZWVudC5oIiAyIDMKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9u ZyBfX1VMb25nOwojIDQwICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMKc3RydWN0IF9CaWdp bnQKewogIHN0cnVjdCBfQmlnaW50ICpfbmV4dDsKICBpbnQgX2ssIF9tYXh3ZHMsIF9zaWduLCBf d2RzOwogIF9fVUxvbmcgX3hbMV07Cn07CgoKc3RydWN0IF9fdG0KewogIGludCBfX3RtX3NlYzsK ICBpbnQgX190bV9taW47CiAgaW50IF9fdG1faG91cjsKICBpbnQgX190bV9tZGF5OwogIGludCBf X3RtX21vbjsKICBpbnQgX190bV95ZWFyOwogIGludCBfX3RtX3dkYXk7CiAgaW50IF9fdG1feWRh eTsKICBpbnQgX190bV9pc2RzdDsKfTsKIyA2OCAiL3Vzci9pbmNsdWRlL3N5cy9yZWVudC5oIiAz CnN0cnVjdCBfYXRleGl0IHsKICAgICAgICBzdHJ1Y3QgX2F0ZXhpdCAqX25leHQ7CiAgICAgICAg aW50IF9pbmQ7CiAgICAgICAgdm9pZCAoKl9mbnNbMzJdKSh2b2lkKTsKICAgICAgICB2b2lkICpf Zm5hcmdzWzMyXTsKICAgICAgICBfX1VMb25nIF9mbnR5cGVzOwp9OwojIDkxICIvdXNyL2luY2x1 ZGUvc3lzL3JlZW50LmgiIDMKc3RydWN0IF9fc2J1ZiB7CiAgICAgICAgdW5zaWduZWQgY2hhciAq X2Jhc2U7CiAgICAgICAgaW50IF9zaXplOwp9OwoKCgoKCgp0eXBlZGVmIGxvbmcgX2Zwb3NfdDsK IyAxNTYgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMwpzdHJ1Y3QgX19zRklMRSB7CiAgdW5z aWduZWQgY2hhciAqX3A7CiAgaW50IF9yOwogIGludCBfdzsKICBzaG9ydCBfZmxhZ3M7CiAgc2hv cnQgX2ZpbGU7CiAgc3RydWN0IF9fc2J1ZiBfYmY7CiAgaW50IF9sYmZzaXplOwoKCgoKCgogIHZv aWQgKiBfY29va2llOwoKICBfc3NpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSAoKl9y ZWFkKSAodm9pZCAqIF9jb29raWUsIGNoYXIgKl9idWYsIGludCBfbik7CiAgX3NzaXplX3QgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgKCpfd3JpdGUpICh2b2lkICogX2Nvb2tpZSwgY29uc3Qg Y2hhciAqX2J1ZiwgaW50IF9uKTsKCiAgX2Zwb3NfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSAoKl9zZWVrKSAodm9pZCAqIF9jb29raWUsIF9mcG9zX3QgX29mZnNldCwgaW50IF93aGVuY2Up OwogIGludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSAoKl9jbG9zZSkgKHZvaWQgKiBfY29v a2llKTsKCgogIHN0cnVjdCBfX3NidWYgX3ViOwogIHVuc2lnbmVkIGNoYXIgKl91cDsKICBpbnQg X3VyOwoKCiAgdW5zaWduZWQgY2hhciBfdWJ1ZlszXTsKICB1bnNpZ25lZCBjaGFyIF9uYnVmWzFd OwoKCiAgc3RydWN0IF9fc2J1ZiBfbGI7CgoKICBpbnQgX2Jsa3NpemU7CiAgaW50IF9vZmZzZXQ7 CgoKICBzdHJ1Y3QgX3JlZW50ICpfZGF0YTsKCgoKICBfZmxvY2tfdCBfbG9jazsKCn07CiMgMjQ5 ICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX19zRklMRSBfX0ZJ TEU7CgoKc3RydWN0IF9nbHVlCnsKICBzdHJ1Y3QgX2dsdWUgKl9uZXh0OwogIGludCBfbmlvYnM7 CiAgX19GSUxFICpfaW9iczsKfTsKIyAyODAgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMwpz dHJ1Y3QgX3JhbmQ0OCB7CiAgdW5zaWduZWQgc2hvcnQgX3NlZWRbM107CiAgdW5zaWduZWQgc2hv cnQgX211bHRbM107CiAgdW5zaWduZWQgc2hvcnQgX2FkZDsKCgoKCn07CiMgNTEyICIvdXNyL2lu Y2x1ZGUvc3lzL3JlZW50LmgiIDMKc3RydWN0IF9yZWVudAp7CiAgaW50IF9lcnJubzsKCgoKCiAg X19GSUxFICpfc3RkaW4sICpfc3Rkb3V0LCAqX3N0ZGVycjsKCiAgaW50IF9pbmM7CiAgY2hhciBf ZW1lcmdlbmN5WzI1XTsKCiAgaW50IF9jdXJyZW50X2NhdGVnb3J5OwogIGNvbnN0IGNoYXIgKl9j dXJyZW50X2xvY2FsZTsKCiAgaW50IF9fc2RpZGluaXQ7CgogIHZvaWQgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgKCpfX2NsZWFudXApIChzdHJ1Y3QgX3JlZW50ICopOwoKCiAgc3RydWN0IF9C aWdpbnQgKl9yZXN1bHQ7CiAgaW50IF9yZXN1bHRfazsKICBzdHJ1Y3QgX0JpZ2ludCAqX3A1czsK ICBzdHJ1Y3QgX0JpZ2ludCAqKl9mcmVlbGlzdDsKCgogIGludCBfY3Z0bGVuOwogIGNoYXIgKl9j dnRidWY7CgogIHVuaW9uCiAgICB7CiAgICAgIHN0cnVjdAogICAgICAgIHsKICAgICAgICAgIHVu c2lnbmVkIGludCBfdW51c2VkX3JhbmQ7CiAgICAgICAgICBjaGFyICogX3N0cnRva19sYXN0Owog ICAgICAgICAgY2hhciBfYXNjdGltZV9idWZbMjZdOwogICAgICAgICAgc3RydWN0IF9fdG0gX2xv Y2FsdGltZV9idWY7CiAgICAgICAgICBpbnQgX2dhbW1hX3NpZ25nYW07CiAgICAgICAgICBfX2V4 dGVuc2lvbl9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfcmFuZF9uZXh0OwogICAgICAgICAgc3RydWN0 IF9yYW5kNDggX3I0ODsKICAgICAgICAgIF9tYnN0YXRlX3QgX21ibGVuX3N0YXRlOwogICAgICAg ICAgX21ic3RhdGVfdCBfbWJ0b3djX3N0YXRlOwogICAgICAgICAgX21ic3RhdGVfdCBfd2N0b21i X3N0YXRlOwogICAgICAgICAgY2hhciBfbDY0YV9idWZbOF07CiAgICAgICAgICBjaGFyIF9zaWdu YWxfYnVmWzI0XTsKICAgICAgICAgIGludCBfZ2V0ZGF0ZV9lcnI7CiAgICAgICAgfSBfcmVlbnQ7 CgoKCiAgICAgIHN0cnVjdAogICAgICAgIHsKCiAgICAgICAgICB1bnNpZ25lZCBjaGFyICogX25l eHRmWzMwXTsKICAgICAgICAgIHVuc2lnbmVkIGludCBfbm1hbGxvY1szMF07CiAgICAgICAgfSBf dW51c2VkOwogICAgfSBfbmV3OwoKCiAgc3RydWN0IF9hdGV4aXQgKl9hdGV4aXQ7CiAgc3RydWN0 IF9hdGV4aXQgX2F0ZXhpdDA7CgoKICB2b2lkICgqKihfc2lnX2Z1bmMpKShpbnQpOwoKCgoKICBz dHJ1Y3QgX2dsdWUgX19zZ2x1ZTsKICBfX0ZJTEUgX19zZlszXTsKfTsKIyA2ODggIi91c3IvaW5j bHVkZS9zeXMvcmVlbnQuaCIgMwpleHRlcm4gc3RydWN0IF9yZWVudCAqX2ltcHVyZV9wdHIgOwoK dm9pZCBfcmVjbGFpbV9yZWVudCAoc3RydWN0IF9yZWVudCAqKTsKIyA0NiAiL3Vzci9pbmNsdWRl L3N0ZGlvLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjQgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIHNob3J0IGludCBfX2ludDE2X3Q7CnR5 cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CgoKCgoKdHlwZWRlZiBpbnQgX19p bnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKCgoKCgpfX2V4dGVuc2lv bl9fIHR5cGVkZWYgbG9uZyBsb25nIF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVu c2lnbmVkIGxvbmcgbG9uZyBfX3VpbnQ2NF90OwojIDU5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKIyAxNDkgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy4yL2lu Y2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDI5NiAiL3Vzci9saWIv Z2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHNo b3J0IHVuc2lnbmVkIGludCB3Y2hhcl90OwojIDYwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi IDIgMwojIDEgIi91c3IvaW5jbHVkZS9tYWNoaW5lL3R5cGVzLmgiIDEgMwojIDEwICIvdXNyL2lu Y2x1ZGUvbWFjaGluZS90eXBlcy5oIiAzCnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRl ZiBpbnQgX19waWRfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fbG9m Zl90OwojIDYxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwojIDgyICIvdXNyL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVfY2hhcjsKdHlwZWRlZiB1 bnNpZ25lZCBzaG9ydCB1X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDsKdHlwZWRl ZiB1bnNpZ25lZCBsb25nIHVfbG9uZzsKCgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2hvcnQ7 CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBjbG9j a190OwoKCgoKdHlwZWRlZiBsb25nIHRpbWVfdDsKCgoKCnN0cnVjdCB0aW1lc3BlYyB7CiAgdGlt ZV90IHR2X3NlYzsKICBsb25nIHR2X25zZWM7Cn07CgpzdHJ1Y3QgaXRpbWVyc3BlYyB7CiAgc3Ry dWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwogIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsKfTsK Cgp0eXBlZGVmIGxvbmcgZGFkZHJfdDsKdHlwZWRlZiBjaGFyICogY2FkZHJfdDsKCgp0eXBlZGVm IHVuc2lnbmVkIGxvbmcgaW5vX3Q7CiMgMTMwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMK dHlwZWRlZiB1bnNpZ25lZCBsb25nIHZtX29mZnNldF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg dm1fc2l6ZV90OwoKCgp0eXBlZGVmIGNoYXIgaW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIg dV9pbnQ4X3Q7CnR5cGVkZWYgc2hvcnQgaW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1 X2ludDE2X3Q7CnR5cGVkZWYgaW50IGludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50 MzJfdDsKdHlwZWRlZiBsb25nIGxvbmcgaW50NjRfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxv bmcgdV9pbnQ2NF90Owp0eXBlZGVmIGludDMyX3QgcmVnaXN0ZXJfdDsKIyAxNjkgIi91c3IvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIGludCBwaWRfdDsKdHlwZWRlZiBsb25nIGtleV90 Owp0eXBlZGVmIF9zc2l6ZV90IHNzaXplX3Q7CgoKdHlwZWRlZiBjaGFyICogYWRkcl90Owp0eXBl ZGVmIGludCBtb2RlX3Q7CiMgMTg4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRl ZiB1bnNpZ25lZCBzaG9ydCBubGlua190OwojIDIxMCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o IiAzCnR5cGVkZWYgbG9uZyBmZF9tYXNrOwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3R5cGVzX2Zk X3NldCB7CiAgICAgICAgZmRfbWFzayBmZHNfYml0c1soKCg2NCkrKCgoc2l6ZW9mIChmZF9tYXNr KSAqIDgpKS0xKSkvKChzaXplb2YgKGZkX21hc2spICogOCkpKV07Cn0gX3R5cGVzX2ZkX3NldDsK IyAyNDYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg Y2xvY2tpZF90OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHRpbWVyX3Q7CgoKCgp0eXBlZGVm IGxvbmcgdXNlY29uZHNfdDsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZXMuaCIgMSAz CiMgMjYwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwojIDM2NCAiL3Vzci9pbmNsdWRl L3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2N5Z3dpbi90eXBlcy5oIiAxIDMKIyAy MCAiL3Vzci9pbmNsdWRlL2N5Z3dpbi90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9z eXNtYWNyb3MuaCIgMSAzCiMgMjEgIi91c3IvaW5jbHVkZS9jeWd3aW4vdHlwZXMuaCIgMiAzCgp0 eXBlZGVmIHN0cnVjdCB0aW1lc3BlYyB0aW1lc3BlY190LCB0aW1lc3RydWNfdDsKCnR5cGVkZWYg bG9uZyBfX29mZjMyX3Q7CnR5cGVkZWYgbG9uZyBsb25nIF9fb2ZmNjRfdDsKCgoKdHlwZWRlZiBf X29mZjMyX3Qgb2ZmX3Q7CgoKdHlwZWRlZiBzaG9ydCBfX2RldjE2X3Q7CnR5cGVkZWYgdW5zaWdu ZWQgbG9uZyBfX2RldjMyX3Q7CgoKCnR5cGVkZWYgX19kZXYxNl90IGRldl90OwoKCnR5cGVkZWYg bG9uZyBibGtzaXplX3Q7Cgp0eXBlZGVmIGxvbmcgX19ibGtjbnQzMl90Owp0eXBlZGVmIGxvbmcg bG9uZyBfX2Jsa2NudDY0X3Q7CgoKCnR5cGVkZWYgX19ibGtjbnQzMl90IGJsa2NudF90OwoKCnR5 cGVkZWYgdW5zaWduZWQgc2hvcnQgX191aWQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9f Z2lkMTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdWlkMzJfdDsKdHlwZWRlZiB1bnNpZ25l ZCBsb25nIF9fZ2lkMzJfdDsKCgoKCnR5cGVkZWYgX191aWQxNl90IHVpZF90Owp0eXBlZGVmIF9f Z2lkMTZfdCBnaWRfdDsKCgoKCnR5cGVkZWYgdm9pZCAqcHRocmVhZF90Owp0eXBlZGVmIHZvaWQg KnB0aHJlYWRfbXV0ZXhfdDsKCnR5cGVkZWYgdm9pZCAqcHRocmVhZF9rZXlfdDsKdHlwZWRlZiB2 b2lkICpwdGhyZWFkX2F0dHJfdDsKdHlwZWRlZiB2b2lkICpwdGhyZWFkX211dGV4YXR0cl90Owp0 eXBlZGVmIHZvaWQgKnB0aHJlYWRfY29uZGF0dHJfdDsKdHlwZWRlZiB2b2lkICpwdGhyZWFkX2Nv bmRfdDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgcHRocmVhZF9tdXRleF90IG11dGV4OwogIGludCBz dGF0ZTsKfQpwdGhyZWFkX29uY2VfdDsKdHlwZWRlZiB2b2lkICpwdGhyZWFkX3J3bG9ja190Owp0 eXBlZGVmIHZvaWQgKnB0aHJlYWRfcndsb2NrYXR0cl90OwojIDM2NSAiL3Vzci9pbmNsdWRlL3N5 cy90eXBlcy5oIiAyIDMKIyA0NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgp0eXBlZGVm IF9mcG9zX3QgZnBvc190Owp0eXBlZGVmIF9fRklMRSBGSUxFOwoKCgoKCiMgMSAiL3Vzci9pbmNs dWRlL3N5cy9zdGRpby5oIiAxIDMKIyA1OCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDE2 MiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKRklMRSAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIHRtcGZpbGUgKHZvaWQpOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdG1w bmFtIChjaGFyICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmNsb3NlIChGSUxF ICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmZsdXNoIChGSUxFICopOwpGSUxF ICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnJlb3BlbiAoY29uc3QgY2hhciAqLCBjb25z dCBjaGFyICosIEZJTEUgKik7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0YnVm IChGSUxFICosIGNoYXIgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXR2YnVm IChGSUxFICosIGNoYXIgKiwgaW50LCBzaXplX3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgZnByaW50ZiAoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBmc2NhbmYgKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOwppbnQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcHJpbnRmIChjb25zdCBjaGFyICosIC4uLik7Cmlu dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzY2FuZiAoY29uc3QgY2hhciAqLCAuLi4pOwpp bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3NjYW5mIChjb25zdCBjaGFyICosIGNvbnN0 IGNoYXIgKiwgLi4uKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHZmcHJpbnRmIChG SUxFICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgdnByaW50ZiAoY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB2c3ByaW50ZiAoY2hhciAqLCBjb25zdCBjaGFyICos IF9fZ251Y192YV9saXN0KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZnZXRjIChG SUxFICopOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmdldHMgKGNoYXIgKiwg aW50LCBGSUxFICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnB1dGMgKGludCwg RklMRSAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZwdXRzIChjb25zdCBjaGFy ICosIEZJTEUgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXRjIChGSUxFICop OwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0Y2hhciAodm9pZCk7CmNoYXIgKiBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXRzIChjaGFyICopOwppbnQgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgcHV0YyAoaW50LCBGSUxFICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgcHV0Y2hhciAoaW50KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHB1 dHMgKGNvbnN0IGNoYXIgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB1bmdldGMg KGludCwgRklMRSAqKTsKc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZyZWFkICh2 b2lkICosIHNpemVfdCBfc2l6ZSwgc2l6ZV90IF9uLCBGSUxFICopOwpzaXplX3QgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgZndyaXRlIChjb25zdCB2b2lkICogLCBzaXplX3QgX3NpemUsIHNp emVfdCBfbiwgRklMRSAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZnZXRwb3Mg KEZJTEUgKiwgZnBvc190ICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnNlZWsg KEZJTEUgKiwgbG9uZywgaW50KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZzZXRw b3MgKEZJTEUgKiwgY29uc3QgZnBvc190ICopOwpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIGZ0ZWxsICggRklMRSAqKTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSByZXdp bmQgKEZJTEUgKik7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgY2xlYXJlcnIgKEZJ TEUgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmZW9mIChGSUxFICopOwppbnQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmVycm9yIChGSUxFICopOwp2b2lkIF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIHBlcnJvciAoY29uc3QgY2hhciAqKTsKCkZJTEUgKiBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBmb3BlbiAoY29uc3QgY2hhciAqX25hbWUsIGNvbnN0IGNoYXIg Kl90eXBlKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNwcmludGYgKGNoYXIgKiwg Y29uc3QgY2hhciAqLCAuLi4pOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcmVtb3Zl IChjb25zdCBjaGFyICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcmVuYW1lIChj b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIGFzcHJpbnRmIChjaGFyICoqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBmc2Vla28gKEZJTEUgKiwgb2ZmX3QsIGludCk7Cm9mZl90IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIGZ0ZWxsbyAoIEZJTEUgKik7CmludCBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSB2ZmlwcmludGYgKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFf bGlzdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpcHJpbnRmIChjb25zdCBjaGFy ICosIC4uLik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmaXByaW50ZiAoRklMRSAq LCBjb25zdCBjaGFyICosIC4uLik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzaXBy aW50ZiAoY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSB0ZW1wbmFtIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmludCBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB2YXNwcmludGYgKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwg X19nbnVjX3ZhX2xpc3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdnNucHJpbnRm IChjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB2ZnNjYW5mIChGSUxFICosIGNvbnN0IGNoYXIgKiwgX19n bnVjX3ZhX2xpc3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdnNjYW5mIChjb25z dCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IHZzc2NhbmYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7Cgpp bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmNsb3NlYWxsICh2b2lkKTsKaW50IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIHNucHJpbnRmIChjaGFyICosIHNpemVfdCwgY29uc3QgY2hh ciAqLCAuLi4pOwojIDIzMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKRklMRSAqIF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIGZkb3BlbiAoaW50LCBjb25zdCBjaGFyICopOwoKaW50IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIGZpbGVubyAoRklMRSAqKTsKaW50IF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIGdldHcgKEZJTEUgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBwY2xvc2UgKEZJTEUgKik7CkZJTEUgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwb3Bl biAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgcHV0dyAoaW50LCBGSUxFICopOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IHNldGJ1ZmZlciAoRklMRSAqLCBjaGFyICosIGludCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSBzZXRsaW5lYnVmIChGSUxFICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgZ2V0Y191bmxvY2tlZCAoRklMRSAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IGZsb2NrZmlsZSAoRklMRSAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZ0cnls b2NrZmlsZSAoRklMRSAqKTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmdW5sb2Nr ZmlsZSAoRklMRSAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHB1dGNfdW5sb2Nr ZWQgKGludCwgRklMRSAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHB1dGNoYXJf dW5sb2NrZWQgKGludCk7CgoKCgoKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfYXNw cmludGZfciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICoqLCBjb25zdCBjaGFyICosIC4uLik7Cmlu dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZmNsb3NlYWxsX3IgKHN0cnVjdCBfcmVlbnQg Kik7CkZJTEUgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZmRvcGVuX3IgKHN0cnVjdCBf cmVlbnQgKiwgaW50LCBjb25zdCBjaGFyICopOwpGSUxFICogX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgX2ZvcGVuX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2ZzY2FuZl9yIChzdHJ1Y3QgX3Jl ZW50ICosIEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOwppbnQgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgX2dldGNoYXJfciAoc3RydWN0IF9yZWVudCAqKTsKY2hhciAqIF9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIF9nZXRzX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqKTsKaW50IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9pcHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29u c3QgY2hhciAqLCAuLi4pOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX21rc3RlbXBf ciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICopOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgX21rdGVtcF9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKik7CnZvaWQgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgX3BlcnJvcl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIg Kik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfcHJpbnRmX3IgKHN0cnVjdCBfcmVl bnQgKiwgY29uc3QgY2hhciAqLCAuLi4pOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg X3B1dGNoYXJfciAoc3RydWN0IF9yZWVudCAqLCBpbnQpOwppbnQgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgX3B1dHNfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICopOwppbnQgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3JlbW92ZV9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0 IGNoYXIgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfcmVuYW1lX3IgKHN0cnVj dCBfcmVlbnQgKiwgY29uc3QgY2hhciAqX29sZCwgY29uc3QgY2hhciAqX25ldyk7CgppbnQgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3NjYW5mX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3Qg Y2hhciAqLCAuLi4pOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3NwcmludGZfciAo c3RydWN0IF9yZWVudCAqLCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIF9zbnByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKiwg c2l6ZV90LCBjb25zdCBjaGFyICosIC4uLik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBfc3NjYW5mX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICos IC4uLik7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdGVtcG5hbV9yIChzdHJ1 Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKRklMRSAqIF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIF90bXBmaWxlX3IgKHN0cnVjdCBfcmVlbnQgKik7CmNoYXIgKiBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdG1wbmFtX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hh ciAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF92YXNwcmludGZfciAoc3RydWN0 IF9yZWVudCAqLCBjaGFyICoqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF92ZnByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIEZJ TEUgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBfdnByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgX19n bnVjX3ZhX2xpc3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3ZzcHJpbnRmX3Ig KHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsK aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF92c25wcmludGZfciAoc3RydWN0IF9yZWVu dCAqLCBjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdmZzY2FuZl9yIChzdHJ1Y3QgX3JlZW50ICosIEZJ TEUgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBfdnNjYW5mX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBfX2du dWNfdmFfbGlzdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdnNzY2FuZl9yIChz dHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlz dCk7Cgpzc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9fZ2V0ZGVsaW0gKGNoYXIg KiosIHNpemVfdCAqLCBpbnQsIEZJTEUgKik7CnNzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgX19nZXRsaW5lIChjaGFyICoqLCBzaXplX3QgKiwgRklMRSAqKTsKIyAzMDkgIi91c3Iv aW5jbHVkZS9zdGRpby5oIiAzCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfX3NyZ2V0 IChGSUxFICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX19zd2J1ZiAoaW50LCBG SUxFICopOwoKCgoKCgpGSUxFICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmdW5vcGVuIChj b25zdCB2b2lkICogX2Nvb2tpZSwgaW50ICgqcmVhZGZuKSh2b2lkICogX2Nvb2tpZSwgY2hhciAq X2J1ZiwgaW50IF9uKSwgaW50ICgqd3JpdGVmbikodm9pZCAqIF9jb29raWUsIGNvbnN0IGNoYXIg Kl9idWYsIGludCBfbiksIGZwb3NfdCAoKnNlZWtmbikodm9pZCAqIF9jb29raWUsIGZwb3NfdCBf b2ZmLCBpbnQgX3doZW5jZSksIGludCAoKmNsb3NlZm4pKHZvaWQgKiBfY29va2llKSk7CiMgMzM0 ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19zZ2V0YyhG SUxFICpfX3ApCiAgewogICAgaW50IF9fYyA9ICgtLShfX3ApLT5fciA8IDAgPyBfX3NyZ2V0KF9f cCkgOiAoaW50KSgqKF9fcCktPl9wKyspKTsKICAgIGlmICgoX19wLT5fZmxhZ3MgJiAweDQwMDAp ICYmIChfX2MgPT0gJ1xyJykpCiAgICAgIHsKICAgICAgaW50IF9fYzIgPSAoLS0oX19wKS0+X3Ig PCAwID8gX19zcmdldChfX3ApIDogKGludCkoKihfX3ApLT5fcCsrKSk7CiAgICAgIGlmIChfX2My ID09ICdcbicpCiAgICAgICAgX19jID0gX19jMjsKICAgICAgZWxzZQogICAgICAgIHVuZ2V0Yyhf X2MyLCBfX3ApOwogICAgICB9CiAgICByZXR1cm4gX19jOwogIH0KIyA0MTYgIi91c3IvaW5jbHVk ZS9zdGRpby5oIiAzCgojIDI0ICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2NvbmZpZy90Yy1wcGMu YyIgMgojIDEgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvYXMuaCIgMQojIDQwICIvc3JjL2JpbnV0 aWxzLTIuMTMvZ2FzL2FzLmgiCiMgMSAiY29uZmlnLmgiIDEKIyA0MSAiL3NyYy9iaW51dGlscy0y LjEzL2dhcy9hcy5oIiAyCiMgMSAiL3NyYy9iaW51dGlscy0yLjEzL2luY2x1ZGUvYmluLWJ1Z3Mu aCIgMQojIDQyICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2FzLmgiIDIKIyA3NyAiL3NyYy9iaW51 dGlscy0yLjEzL2dhcy9hcy5oIgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMTQg Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1j eWd3aW4vMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE1ICIvdXNyL2luY2x1ZGUvc3RyaW5n LmgiIDIgMwoKCgoKCgoKdm9pZCAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1lbWNociAo Y29uc3Qgdm9pZCAqLCBpbnQsIHNpemVfdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBtZW1jbXAgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwp2b2lkICogX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWVtY3B5ICh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6 ZV90KTsKdm9pZCAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1lbW1vdmUgKHZvaWQgKiwg Y29uc3Qgdm9pZCAqLCBzaXplX3QpOwp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg bWVtc2V0ICh2b2lkICosIGludCwgc2l6ZV90KTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgc3RyY2F0IChjaGFyICosIGNvbnN0IGNoYXIgKik7CmNoYXIgKl9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIHN0cmNociAoY29uc3QgY2hhciAqLCBpbnQpOwppbnQgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgc3RyY21wIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJjb2xsIChjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKik7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cmNweSAoY2hhciAqLCBj b25zdCBjaGFyICopOwpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RyY3NwbiAo Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBzdHJlcnJvciAoaW50KTsKc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0 cmxlbiAoY29uc3QgY2hhciAqKTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3Ry bmNhdCAoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmludCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBzdHJuY21wIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsK Y2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RybmNweSAoY2hhciAqLCBjb25zdCBj aGFyICosIHNpemVfdCk7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnBicmsg KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgc3RycmNociAoY29uc3QgY2hhciAqLCBpbnQpOwpzaXplX3QgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgc3Ryc3BuIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmNoYXIgKl9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnN0ciAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICopOwoKCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnRvayAoY2hhciAqLCBj b25zdCBjaGFyICopOwoKCnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJ4ZnJt IChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKCgpjaGFyICpfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBzdHJ0b2tfciAoY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiopOwoKaW50 IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGJjbXAgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9p ZCAqLCBzaXplX3QpOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGJjb3B5IChjb25z dCB2b2lkICosIHZvaWQgKiwgc2l6ZV90KTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBiemVybyAodm9pZCAqLCBzaXplX3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg ZmZzIChpbnQpOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpbmRleCAoY29uc3Qg Y2hhciAqLCBpbnQpOwp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWVtY2NweSAo dm9pZCAqLCBjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsKdm9pZCAqIF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIG1lbXBjcHkgKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwpjaGFy ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSByaW5kZXggKGNvbnN0IGNoYXIgKiwgaW50KTsK aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cmNhc2VjbXAgKGNvbnN0IGNoYXIgKiwg Y29uc3QgY2hhciAqKTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RyZHVwIChj b25zdCBjaGFyICopOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc3RyZHVwX3Ig KHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqKTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgc3RybmR1cCAoY29uc3QgY2hhciAqLCBzaXplX3QpOwpjaGFyICpfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBfc3RybmR1cF9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIg Kiwgc2l6ZV90KTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RyZXJyb3JfciAo aW50LCBjaGFyICosIHNpemVfdCk7CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBz dHJsY2F0IChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKc2l6ZV90IF9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIHN0cmxjcHkgKGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpp bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RybmNhc2VjbXAgKGNvbnN0IGNoYXIgKiwg Y29uc3QgY2hhciAqLCBzaXplX3QpOwpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg c3RybmxlbiAoY29uc3QgY2hhciAqLCBzaXplX3QpOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSBzdHJzZXAgKGNoYXIgKiosIGNvbnN0IGNoYXIgKik7CmNoYXIgKl9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIHN0cmx3ciAoY2hhciAqKTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgc3RydXByIChjaGFyICopOwoKCmNvbnN0IGNoYXIgKl9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIHN0cnNpZ25hbCAoaW50IF9fc2lnbm8pOwoKaW50IF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIHN0cnRvc2lnbm8gKGNvbnN0IGNoYXIgKl9fbmFtZSk7CiMgOTggIi91c3IvaW5j bHVkZS9zdHJpbmcuaCIgMwoKIyA3OCAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9hcy5oIiAyCgoK CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAxNCAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzCiMgMTUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKIyAxICIv dXNyL2luY2x1ZGUvbWFjaGluZS9zdGRsaWIuaCIgMSAzCiMgMTggIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiMgMjAgIi91c3IvaW5j bHVkZS9zdGRsaWIuaCIgMiAzCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IHF1b3Q7CiAgaW50 IHJlbTsKfSBkaXZfdDsKCnR5cGVkZWYgc3RydWN0CnsKICBsb25nIHF1b3Q7CiAgbG9uZyByZW07 Cn0gbGRpdl90OwojIDQ1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIF9fYXR0cmli dXRlX18oKGRsbGltcG9ydCkpIGludCBfX21iX2N1cl9tYXg7CgoKCnZvaWQgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgYWJvcnQgKHZvaWQpIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwpp bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYWJzIChpbnQpOwppbnQgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgYXRleGl0ICh2b2lkICgqX19mdW5jKSh2b2lkKSk7CmRvdWJsZSBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBhdG9mIChjb25zdCBjaGFyICpfX25wdHIpOwoKZmxvYXQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYXRvZmYgKGNvbnN0IGNoYXIgKl9fbnB0cik7Cgpp bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYXRvaSAoY29uc3QgY2hhciAqX19ucHRyKTsK bG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBhdG9sIChjb25zdCBjaGFyICpfX25wdHIp Owp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYnNlYXJjaCAoY29uc3Qgdm9pZCAq IF9fa2V5LCBjb25zdCB2b2lkICogX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6 ZSwgaW50ICgqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9jb21wYXIpIChjb25zdCB2b2lk ICosIGNvbnN0IHZvaWQgKikpOwoKCgoKdm9pZCAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IGNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpOwpkaXZfdCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSk7CnZvaWQgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9f ICgobm9yZXR1cm4pKTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmcmVlICh2b2lk ICopOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0ZW52IChjb25zdCBjaGFy ICpfX3N0cmluZyk7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZ2V0ZW52X3Ig KHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqX19zdHJpbmcpOwpjaGFyICogX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgX2ZpbmRlbnYgKGNvbnN0IGNoYXIgKiwgaW50ICopOwpjaGFyICog X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2ZpbmRlbnZfciAoc3RydWN0IF9yZWVudCAqLCBj b25zdCBjaGFyICosIGludCAqKTsKbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBsYWJz IChsb25nKTsKbGRpdl90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGxkaXYgKGxvbmcgX19u dW1lciwgbG9uZyBfX2Rlbm9tKTsKdm9pZCAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1h bGxvYyAoc2l6ZV90IF9fc2l6ZSk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtYmxl biAoY29uc3QgY2hhciAqLCBzaXplX3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg X21ibGVuX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIF9tYnN0YXRl X3QgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtYnRvd2MgKHdjaGFyX3QgKiwg Y29uc3QgY2hhciAqLCBzaXplX3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX21i dG93Y19yIChzdHJ1Y3QgX3JlZW50ICosIHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3Qs IF9tYnN0YXRlX3QgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3RvbWIgKGNo YXIgKiwgd2NoYXJfdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfd2N0b21iX3Ig KHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCB3Y2hhcl90LCBfbWJzdGF0ZV90ICopOwpzaXplX3Qg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWJzdG93Y3MgKHdjaGFyX3QgKiwgY29uc3QgY2hh ciAqLCBzaXplX3QpOwpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX21ic3Rvd2Nz X3IgKHN0cnVjdCBfcmVlbnQgKiwgd2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgX21i c3RhdGVfdCAqKTsKc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdjc3RvbWJzIChj aGFyICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKc2l6ZV90IF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIF93Y3N0b21ic19yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKiwgY29uc3Qgd2No YXJfdCAqLCBzaXplX3QsIF9tYnN0YXRlX3QgKik7CgoKaW50IF9fYXR0cmlidXRlX18oKF9fY2Rl Y2xfXykpIG1rc3RlbXAgKGNoYXIgKik7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBta3RlbXAgKGNoYXIgKik7CgoKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBxc29y dCAodm9pZCAqIF9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIGludCgqX2Nv bXBhcikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKaW50IF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIHJhbmQgKHZvaWQpOwp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg cmVhbGxvYyAodm9pZCAqIF9fciwgc2l6ZV90IF9fc2l6ZSk7CnZvaWQgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgc3JhbmQgKHVuc2lnbmVkIF9fc2VlZCk7CmRvdWJsZSBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBzdHJ0b2QgKGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUik7 CmRvdWJsZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc3RydG9kX3IgKHN0cnVjdCBfcmVl bnQgKixjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIpOwoKZmxvYXQgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgc3RydG9kZiAoY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRf UFRSKTsKCmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydG9sIChjb25zdCBjaGFy ICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBfX2Jhc2UpOwpsb25nIF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIF9zdHJ0b2xfciAoc3RydWN0IF9yZWVudCAqLGNvbnN0IGNoYXIgKl9fbiwg Y2hhciAqKl9fZW5kX1BUUiwgaW50IF9fYmFzZSk7CnVuc2lnbmVkIGxvbmcgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgc3RydG91bCAoY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRS LCBpbnQgX19iYXNlKTsKdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBf c3RydG91bF9yIChzdHJ1Y3QgX3JlZW50ICosY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRf UFRSLCBpbnQgX19iYXNlKTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzeXN0ZW0g KGNvbnN0IGNoYXIgKl9fc3RyaW5nKTsKCgpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IGE2NGwgKGNvbnN0IGNoYXIgKl9faW5wdXQpOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgbDY0YSAobG9uZyBfX2lucHV0KTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIF9sNjRhX3IgKHN0cnVjdCBfcmVlbnQgKixsb25nIF9faW5wdXQpOwppbnQgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgb25fZXhpdCAodm9pZCAoKl9fZnVuYykoaW50LCB2b2lkICopLHZv aWQgKiBfX2FyZyk7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX0V4aXQgKGludCBf X3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CmludCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBwdXRlbnYgKGNvbnN0IGNoYXIgKl9fc3RyaW5nKTsKaW50IF9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIF9wdXRlbnZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICpf X3N0cmluZyk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXRlbnYgKGNvbnN0IGNo YXIgKl9fc3RyaW5nLCBjb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19vdmVyd3JpdGUpOwppbnQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3NldGVudl9yIChzdHJ1Y3QgX3JlZW50ICosIGNv bnN0IGNoYXIgKl9fc3RyaW5nLCBjb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19vdmVyd3JpdGUp OwoKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdjdnQgKGRvdWJsZSxpbnQsY2hh ciAqKTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdjdnRmIChmbG9hdCxpbnQs Y2hhciAqKTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZjdnQgKGRvdWJsZSxp bnQsaW50ICosaW50ICopOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmN2dGYg KGZsb2F0LGludCxpbnQgKixpbnQgKik7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBlY3Z0IChkb3VibGUsaW50LGludCAqLGludCAqKTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIGVjdnRidWYgKGRvdWJsZSwgaW50LCBpbnQqLCBpbnQqLCBjaGFyICopOwpjaGFy ICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmN2dGJ1ZiAoZG91YmxlLCBpbnQsIGludCos IGludCosIGNoYXIgKik7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBlY3Z0ZiAo ZmxvYXQsaW50LGludCAqLGludCAqKTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IGR0b2EgKGRvdWJsZSwgaW50LCBpbnQsIGludCAqLCBpbnQqLCBjaGFyKiopOwppbnQgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgcmFuZF9yICh1bnNpZ25lZCAqX19zZWVkKTsKCmRvdWJsZSBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBkcmFuZDQ4ICh2b2lkKTsKZG91YmxlIF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIF9kcmFuZDQ4X3IgKHN0cnVjdCBfcmVlbnQgKik7CmRvdWJsZSBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBbM10pOwpk b3VibGUgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2VyYW5kNDhfciAoc3RydWN0IF9yZWVu dCAqLCB1bnNpZ25lZCBzaG9ydCBbM10pOwpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IFszXSk7CmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgX2pyYW5kNDhfciAoc3RydWN0IF9yZWVudCAqLCB1bnNpZ25lZCBzaG9ydCBbM10pOwp2 b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGxjb25nNDggKHVuc2lnbmVkIHNob3J0IFs3 XSk7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2xjb25nNDhfciAoc3RydWN0IF9y ZWVudCAqLCB1bnNpZ25lZCBzaG9ydCBbN10pOwpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIGxyYW5kNDggKHZvaWQpOwpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9scmFu ZDQ4X3IgKHN0cnVjdCBfcmVlbnQgKik7CmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg bXJhbmQ0OCAodm9pZCk7CmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX21yYW5kNDhf ciAoc3RydWN0IF9yZWVudCAqKTsKbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBucmFu ZDQ4ICh1bnNpZ25lZCBzaG9ydCBbM10pOwpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IF9ucmFuZDQ4X3IgKHN0cnVjdCBfcmVlbnQgKiwgdW5zaWduZWQgc2hvcnQgWzNdKTsKdW5zaWdu ZWQgc2hvcnQgKgogICAgICAgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2VlZDQ4ICh1bnNp Z25lZCBzaG9ydCBbM10pOwp1bnNpZ25lZCBzaG9ydCAqCiAgICAgICBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBfc2VlZDQ4X3IgKHN0cnVjdCBfcmVlbnQgKiwgdW5zaWduZWQgc2hvcnQgWzNd KTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzcmFuZDQ4IChsb25nKTsKdm9pZCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc3JhbmQ0OF9yIChzdHJ1Y3QgX3JlZW50ICosIGxv bmcpOwpsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydG9sbCAoY29uc3Qg Y2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSLCBpbnQgX19iYXNlKTsKbG9uZyBsb25nIF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIF9zdHJ0b2xsX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3Qg Y2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSLCBpbnQgX19iYXNlKTsKdW5zaWduZWQgbG9uZyBs b25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnRvdWxsIChjb25zdCBjaGFyICpfX24s IGNoYXIgKipfX2VuZF9QVFIsIGludCBfX2Jhc2UpOwp1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgX3N0cnRvdWxsX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3Qg Y2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSLCBpbnQgX19iYXNlKTsKCgoKCmNoYXIgKiBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSByZWFscGF0aCAoY29uc3QgY2hhciAqLCBjaGFyICopOwp2 b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHVuc2V0ZW52IChjb25zdCBjaGFyICpfX3N0 cmluZyk7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3Vuc2V0ZW52X3IgKHN0cnVj dCBfcmVlbnQgKiwgY29uc3QgY2hhciAqX19zdHJpbmcpOwppbnQgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgcmFuZG9tICh2b2lkKTsKbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBz cmFuZG9tICh1bnNpZ25lZCBfX3NlZWQpOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgcHRzbmFtZSAoaW50KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdyYW50cHQg KGludCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB1bmxvY2twdCAoaW50KTsKCgoK CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZHRvYV9yIChzdHJ1Y3QgX3JlZW50 ICosIGRvdWJsZSwgaW50LCBpbnQsIGludCAqLCBpbnQqLCBjaGFyKiopOwoKCgoKCgoKaW50IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9zeXN0ZW1fciAoc3RydWN0IF9yZWVudCAqLCBjb25z dCBjaGFyICopOwoKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfX2VwcmludGYgKGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKik7CiMg MjA5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCiMgODUgIi9zcmMvYmludXRpbHMtMi4xMy9n YXMvYXMuaCIgMgoKCiMgMSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAxIDMKCgoKCgojIDEgIi91 c3IvaW5jbHVkZS9zeXMvdW5pc3RkLmgiIDEgMwojIDEzICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0 ZC5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgMTQgIi91c3IvaW5jbHVkZS9zeXMvdW5pc3RkLmgiIDIgMwoKZXh0ZXJu IGNoYXIgKiplbnZpcm9uOwoKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZXhpdCAo aW50IF9fc3RhdHVzICkgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CgppbnQgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgYWNjZXNzIChjb25zdCBjaGFyICpfX3BhdGgsIGludCBfX2Ftb2Rl ICk7CnVuc2lnbmVkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGFsYXJtICh1bnNpZ25lZCBf X3NlY3MgKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGNoZGlyIChjb25zdCBjaGFy ICpfX3BhdGggKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGNobW9kIChjb25zdCBj aGFyICpfX3BhdGgsIG1vZGVfdCBfX21vZGUgKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIGNob3duIChjb25zdCBjaGFyICpfX3BhdGgsIHVpZF90IF9fb3duZXIsIGdpZF90IF9fZ3Jv dXAgKTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBjaHJvb3QgKGNvbnN0IGNoYXIg Kl9fcGF0aCApOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGNsb3NlIChpbnQgX19m aWxkZXMgKTsKY2hhciBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSAqY3Rlcm1pZCAoY2hhciAq X19zICk7CmNoYXIgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgKmN1c2VyaWQgKGNoYXIgKl9f cyApOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZHVwIChpbnQgX19maWxkZXMgKTsK aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGR1cDIgKGludCBfX2ZpbGRlcywgaW50IF9f ZmlsZGVzMiApOwoKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBlbmR1c2Vyc2hlbGwg KHZvaWQpOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGV4ZWNsIChjb25zdCBjaGFy ICpfX3BhdGgsIGNvbnN0IGNoYXIgKiwgLi4uICk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBleGVjbGUgKGNvbnN0IGNoYXIgKl9fcGF0aCwgY29uc3QgY2hhciAqLCAuLi4gKTsKaW50 IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGV4ZWNscCAoY29uc3QgY2hhciAqX19maWxlLCBj b25zdCBjaGFyICosIC4uLiApOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZXhlY3Yg KGNvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqIGNvbnN0IF9fYXJndltdICk7CmludCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBleGVjdmUgKGNvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqIGNv bnN0IF9fYXJndltdLCBjaGFyICogY29uc3QgX19lbnZwW10gKTsKaW50IF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIGV4ZWN2cCAoY29uc3QgY2hhciAqX19maWxlLCBjaGFyICogY29uc3QgX19h cmd2W10gKTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmY2hkaXIgKGludCBfX2Zp bGRlcyk7CgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmNobW9kIChpbnQgX19maWxk ZXMsIG1vZGVfdCBfX21vZGUgKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZjaG93 biAoaW50IF9fZmlsZGVzLCB1aWRfdCBfX293bmVyLCBnaWRfdCBfX2dyb3VwICk7CnBpZF90IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZvcmsgKHZvaWQgKTsKbG9uZyBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBmcGF0aGNvbmYgKGludCBfX2ZkLCBpbnQgX19uYW1lICk7CmludCBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmc3luYyAoaW50IF9fZmQpOwpjaGFyIF9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpICpnZXRjd2QgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19zaXplICk7Cgpp bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0ZG9tYWlubmFtZSAoY2hhciAqX19uYW1l LCBzaXplX3QgX19sZW4pOwoKZ2lkX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0ZWdp ZCAodm9pZCApOwp1aWRfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXRldWlkICh2b2lk ICk7CmdpZF90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldGdpZCAodm9pZCApOwppbnQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0Z3JvdXBzIChpbnQgX19naWRzZXRzaXplLCBn aWRfdCBfX2dyb3VwbGlzdFtdICk7CmNoYXIgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgKmdl dGxvZ2luICh2b2lkICk7CgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0bG9naW5f ciAoY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVzaXplKTsKCmNoYXIgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgKmdldHBhc3MgKF9fY29uc3QgY2hhciAqX19wcm9tcHQpOwpzaXplX3QgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0cGFnZXNpemUgKHZvaWQpOwpwaWRfdCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBnZXRwZ2lkIChwaWRfdCk7CnBpZF90IF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIGdldHBncnAgKHZvaWQgKTsKcGlkX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgZ2V0cGlkICh2b2lkICk7CnBpZF90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldHBw aWQgKHZvaWQgKTsKCnBpZF90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldHNpZCAocGlk X3QpOwoKdWlkX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0dWlkICh2b2lkICk7Cgpj aGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0dXNlcnNoZWxsICh2b2lkKTsKY2hh ciBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSAqZ2V0d2QgKGNoYXIgKl9fYnVmICk7CmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpcnVzZXJvayAodW5zaWduZWQgbG9uZyByYWRkciwg aW50IHN1cGVydXNlciwgY29uc3QgY2hhciAqcnVzZXIsIGNvbnN0IGNoYXIgKmx1c2VyKTsKCmlu dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc2F0dHkgKGludCBfX2ZpbGRlcyApOwppbnQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbGNob3duIChjb25zdCBjaGFyICpfX3BhdGgsIHVp ZF90IF9fb3duZXIsIGdpZF90IF9fZ3JvdXAgKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIGxpbmsgKGNvbnN0IGNoYXIgKl9fcGF0aDEsIGNvbnN0IGNoYXIgKl9fcGF0aDIgKTsKaW50 IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG5pY2UgKGludCBfX25pY2VfdmFsdWUgKTsKb2Zm X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbHNlZWsgKGludCBfX2ZpbGRlcywgb2ZmX3Qg X19vZmZzZXQsIGludCBfX3doZW5jZSApOwpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IHBhdGhjb25mIChjb25zdCBjaGFyICpfX3BhdGgsIGludCBfX25hbWUgKTsKaW50IF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIHBhdXNlICh2b2lkICk7CgppbnQgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCopKHZvaWQpLCB2b2lkICgqKSh2b2lkKSwg dm9pZCAoKikodm9pZCkpOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHBpcGUgKGlu dCBfX2ZpbGRlc1syXSApOwpzc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHByZWFk IChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywgb2ZmX3QgX19vZmZzZXQp Owpzc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHB3cml0ZSAoaW50IF9fZmQsIGNv bnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsIG9mZl90IF9fb2Zmc2V0KTsKX3NzaXpl X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVm LCBzaXplX3QgX19uYnl0ZSApOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJldm9r ZSAoY2hhciAqcGF0aCk7CgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcm1kaXIgKGNv bnN0IGNoYXIgKl9fcGF0aCApOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJ1c2Vy b2sgKGNvbnN0IGNoYXIgKnJob3N0LCBpbnQgc3VwZXJ1c2VyLCBjb25zdCBjaGFyICpydXNlciwg Y29uc3QgY2hhciAqbHVzZXIpOwoKdm9pZCAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNi cmsgKHB0cmRpZmZfdCBfX2luY3IpOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNl dGVnaWQgKGdpZF90IF9fZ2lkICk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXRl dWlkICh1aWRfdCBfX3VpZCApOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNldGdp ZCAoZ2lkX3QgX19naWQgKTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXRncm91 cHMgKGludCBuZ3JvdXBzLCBjb25zdCBnaWRfdCAqZ3JvdXBsaXN0ICk7CgppbnQgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgc2V0cGdpZCAocGlkX3QgX19waWQsIHBpZF90IF9fcGdpZCApOwpp bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0cGdycCAodm9pZCApOwpwaWRfdCBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXRzaWQgKHZvaWQgKTsKaW50IF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIHNldHVpZCAodWlkX3QgX191aWQgKTsKCnZvaWQgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgc2V0dXNlcnNoZWxsICh2b2lkKTsKCnVuc2lnbmVkIF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIHNsZWVwICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzICk7CnZvaWQgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgc3dhYiAoY29uc3Qgdm9pZCAqLCB2b2lkICosIHNzaXplX3Qp Owpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN5c2NvbmYgKGludCBfX25hbWUgKTsK cGlkX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdGNnZXRwZ3JwIChpbnQgX19maWxkZXMg KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHRjc2V0cGdycCAoaW50IF9fZmlsZGVz LCBwaWRfdCBfX3BncnBfaWQgKTsKY2hhciBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSAqdHR5 bmFtZSAoaW50IF9fZmlsZGVzICk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB1bmxp bmsgKGNvbnN0IGNoYXIgKl9fcGF0aCApOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg dmhhbmd1cCAodm9pZCApOwpfc3NpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3cml0 ZSAoaW50IF9fZmQsIGNvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZSApOwoKZXh0ZXJu IGNoYXIgKm9wdGFyZzsKZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0OwppbnQgZ2V0 b3B0KGludCwgY2hhciAqIGNvbnN0IFtdLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IG9wdHJl c2V0OwoKCnBpZF90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHZmb3JrICh2b2lkICk7Cgpl eHRlcm4gY2hhciAqc3Vib3B0YXJnOwppbnQgZ2V0c3Vib3B0KGNoYXIgKiosIGNoYXIgKiBjb25z dCAqLCBjaGFyICoqKTsKCgoKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfY2xvc2Ug KGludCBfX2ZpbGRlcyApOwpwaWRfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZm9yayAo dm9pZCApOwpwaWRfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZ2V0cGlkICh2b2lkICk7 CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfbGluayAoY29uc3QgY2hhciAqX19wYXRo MSwgY29uc3QgY2hhciAqX19wYXRoMiApOwpvZmZfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBfbHNlZWsgKGludCBfX2ZpbGRlcywgb2ZmX3QgX19vZmZzZXQsIGludCBfX3doZW5jZSApOwpf c3NpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfcmVhZCAoaW50IF9fZmQsIHZvaWQg Kl9fYnVmLCBzaXplX3QgX19uYnl0ZSApOwp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgX3NicmsgKHB0cmRpZmZfdCBfX2luY3IpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgX3VubGluayAoY29uc3QgY2hhciAqX19wYXRoICk7Cl9zc2l6ZV90IF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIF93cml0ZSAoaW50IF9fZmQsIGNvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3Qg X19uYnl0ZSApOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2V4ZWN2ZSAoY29uc3Qg Y2hhciAqX19wYXRoLCBjaGFyICogY29uc3QgX19hcmd2W10sIGNoYXIgKiBjb25zdCBfX2VudnBb XSApOwoKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXRkdGFibGVzaXplICh2b2lk KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNldGR0YWJsZXNpemUgKGludCk7CnVz ZWNvbmRzX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdWFsYXJtICh1c2Vjb25kc190IF9f dXNlY29uZHMsIHVzZWNvbmRzX3QgX19pbnRlcnZhbCk7CnVuc2lnbmVkIF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIHVzbGVlcCAodW5zaWduZWQgaW50IF9fdXNlY29uZHMpOwppbnQgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgZnRydW5jYXRlIChpbnQgX19mZCwgb2ZmX3QgX19sZW5ndGgp OwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdHJ1bmNhdGUgKGNvbnN0IGNoYXIgKiwg b2ZmX3QgX19sZW5ndGgpOwoKCiBpbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0aG9z dG5hbWUgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKTsKCmNoYXIgKiBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBta3RlbXAgKGNoYXIgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBzeW5jICh2b2lkKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJlYWRsaW5r IChjb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fYnVmLCBpbnQgX19idWZsZW4pOwppbnQgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3ltbGluayAoY29uc3QgY2hhciAqX19uYW1lMSwgY29u c3QgY2hhciAqX19uYW1lMik7CiMgNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCiMgMSAi L3NyYy9iaW51dGlscy0yLjEzL2luY2x1ZGUvZ2V0b3B0LmgiIDEgMwojIDM2ICIvc3JjL2JpbnV0 aWxzLTIuMTMvaW5jbHVkZS9nZXRvcHQuaCIgMwpleHRlcm4gY2hhciAqb3B0YXJnOwojIDUwICIv c3JjL2JpbnV0aWxzLTIuMTMvaW5jbHVkZS9nZXRvcHQuaCIgMwpleHRlcm4gaW50IG9wdGluZDsK CgoKCmV4dGVybiBpbnQgb3B0ZXJyOwoKCgpleHRlcm4gaW50IG9wdG9wdDsKIyA4MiAiL3NyYy9i aW51dGlscy0yLjEzL2luY2x1ZGUvZ2V0b3B0LmgiIDMKc3RydWN0IG9wdGlvbgp7CgogIGNvbnN0 IGNoYXIgKm5hbWU7CgoKCgoKICBpbnQgaGFzX2FyZzsKICBpbnQgKmZsYWc7CiAgaW50IHZhbDsK fTsKIyAxMTUgIi9zcmMvYmludXRpbHMtMi4xMy9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBp bnQgZ2V0b3B0ICgpOwoKCgpleHRlcm4gaW50IGdldG9wdF9sb25nIChpbnQgYXJnYywgY2hhciAq Y29uc3QgKmFyZ3YsIGNvbnN0IGNoYXIgKnNob3J0b3B0cywKICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ29wdHMsIGludCAqbG9uZ2luZCk7CmV4dGVybiBp bnQgZ2V0b3B0X2xvbmdfb25seSAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNob3J0b3B0cywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpsb25nb3B0cywgaW50ICpsb25n aW5kKTsKCgpleHRlcm4gaW50IF9nZXRvcHRfaW50ZXJuYWwgKGludCBhcmdjLCBjaGFyICpjb25z dCAqYXJndiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzaG9ydG9w dHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9u Z29wdHMsIGludCAqbG9uZ2luZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbG9u Z19vbmx5KTsKIyA5ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwojIDg4ICIvc3JjL2JpbnV0 aWxzLTIuMTMvZ2FzL2FzLmgiIDIKIyAxMzAgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvYXMuaCIK IyAxICIvc3JjL2JpbnV0aWxzLTIuMTMvaW5jbHVkZS9hbnNpZGVjbC5oIiAxCiMgMTMxICIvc3Jj L2JpbnV0aWxzLTIuMTMvZ2FzL2FzLmgiIDIKCiMgMSAiLi4vYmZkL2JmZC5oIiAxCiMgMzcgIi4u L2JmZC9iZmQuaCIKIyAxICIvc3JjL2JpbnV0aWxzLTIuMTMvaW5jbHVkZS9zeW1jYXQuaCIgMQoj IDM4ICIuLi9iZmQvYmZkLmgiIDIKIyA4MSAiLi4vYmZkL2JmZC5oIgp0eXBlZGVmIHN0cnVjdCBf YmZkIGJmZDsKIyAxMTQgIi4uL2JmZC9iZmQuaCIKdHlwZWRlZiBlbnVtIGJmZF9ib29sZWFuIHtm YWxzZSwgdHJ1ZX0gYm9vbGVhbjsKIyAxNzEgIi4uL2JmZC9iZmQuaCIKdHlwZWRlZiB1bnNpZ25l ZCBsb25nIGJmZF92bWE7CgoKCgoKdHlwZWRlZiBsb25nIGJmZF9zaWduZWRfdm1hOwoKdHlwZWRl ZiB1bnNpZ25lZCBsb25nIHN5bXZhbHVlOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgYmZkX3NpemVf dHlwZTsKIyAxOTYgIi4uL2JmZC9iZmQuaCIKdHlwZWRlZiBiZmRfc2lnbmVkX3ZtYSBmaWxlX3B0 cjsKdHlwZWRlZiBiZmRfdm1hIHVmaWxlX3B0cjsKCmV4dGVybiB2b2lkIGJmZF9zcHJpbnRmX3Zt YSAoYmZkICosIGNoYXIgKiwgYmZkX3ZtYSk7CmV4dGVybiB2b2lkIGJmZF9mcHJpbnRmX3ZtYSAo YmZkICosIHZvaWQgKiwgYmZkX3ZtYSk7CgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBmbGFnd29y ZDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGJmZF9ieXRlOwoKCgp0eXBlZGVmIGVudW0gYmZkX2Zv cm1hdAp7CiAgYmZkX3Vua25vd24gPSAwLAogIGJmZF9vYmplY3QsCiAgYmZkX2FyY2hpdmUsCiAg YmZkX2NvcmUsCiAgYmZkX3R5cGVfZW5kCn0KYmZkX2Zvcm1hdDsKIyAyODAgIi4uL2JmZC9iZmQu aCIKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHN5bWluZGV4OwoKCnR5cGVkZWYgY29uc3Qgc3RydWN0 IHJlbG9jX2hvd3RvX3N0cnVjdCByZWxvY19ob3d0b190eXBlOwojIDMwMiAiLi4vYmZkL2JmZC5o Igp0eXBlZGVmIHN0cnVjdCBjYXJzeW0KewogIGNoYXIgKm5hbWU7CiAgZmlsZV9wdHIgZmlsZV9v ZmZzZXQ7Cn0KY2Fyc3ltOwoKCgpzdHJ1Y3Qgb3JsCnsKICBjaGFyICoqbmFtZTsKICB1bmlvbgog IHsKICAgIGZpbGVfcHRyIHBvczsKICAgIGJmZCAqYWJmZDsKICB9IHU7CiAgaW50IG5hbWlkeDsK fTsKCgp0eXBlZGVmIHN0cnVjdCBsaW5lbm9fY2FjaGVfZW50cnkKewogIHVuc2lnbmVkIGludCBs aW5lX251bWJlcjsKICB1bmlvbgogIHsKICAgIHN0cnVjdCBzeW1ib2xfY2FjaGVfZW50cnkgKnN5 bTsKICAgIGJmZF92bWEgb2Zmc2V0OwogIH0gdTsKfQphbGVudDsKCgoKCgoKdHlwZWRlZiBzdHJ1 Y3Qgc2VjICpzZWNfcHRyOwojIDM1OSAiLi4vYmZkL2JmZC5oIgp0eXBlZGVmIHN0cnVjdCBzdGF0 IHN0YXRfdHlwZTsKCnR5cGVkZWYgZW51bSBiZmRfcHJpbnRfc3ltYm9sCnsKICBiZmRfcHJpbnRf c3ltYm9sX25hbWUsCiAgYmZkX3ByaW50X3N5bWJvbF9tb3JlLAogIGJmZF9wcmludF9zeW1ib2xf YWxsCn0gYmZkX3ByaW50X3N5bWJvbF90eXBlOwoKCgp0eXBlZGVmIHN0cnVjdCBfc3ltYm9sX2lu Zm8KewogIHN5bXZhbHVlIHZhbHVlOwogIGNoYXIgdHlwZTsKICBjb25zdCBjaGFyICpuYW1lOwog IHVuc2lnbmVkIGNoYXIgc3RhYl90eXBlOwogIGNoYXIgc3RhYl9vdGhlcjsKICBzaG9ydCBzdGFi X2Rlc2M7CiAgY29uc3QgY2hhciAqc3RhYl9uYW1lOwp9IHN5bWJvbF9pbmZvOwoKCgpleHRlcm4g Y29uc3QgY2hhciAqYmZkX2dldF9zdGFiX25hbWUgKGludCk7CgoKCgoKCnN0cnVjdCBiZmRfaGFz aF9lbnRyeQp7CgogIHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAqbmV4dDsKCiAgY29uc3QgY2hhciAq c3RyaW5nOwoKCiAgdW5zaWduZWQgbG9uZyBoYXNoOwp9OwoKCgpzdHJ1Y3QgYmZkX2hhc2hfdGFi bGUKewoKICBzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKip0YWJsZTsKCiAgdW5zaWduZWQgaW50IHNp emU7CgoKCgoKCgogIHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAqKCpuZXdmdW5jKSAoc3RydWN0IGJm ZF9oYXNoX2VudHJ5ICosIHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqLCBjb25zdCBjaGFyICopOwoK CgoKICB2b2lkICogbWVtb3J5Owp9OwoKCmV4dGVybiBib29sZWFuIGJmZF9oYXNoX3RhYmxlX2lu aXQKICAoc3RydWN0IGJmZF9oYXNoX3RhYmxlICosIHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAqKCop IChzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKiwgc3RydWN0IGJmZF9oYXNoX3RhYmxlICosIGNvbnN0 IGNoYXIgKikpOwoKCgoKCmV4dGVybiBib29sZWFuIGJmZF9oYXNoX3RhYmxlX2luaXRfbgogIChz dHJ1Y3QgYmZkX2hhc2hfdGFibGUgKiwgc3RydWN0IGJmZF9oYXNoX2VudHJ5ICooKikgKHN0cnVj dCBiZmRfaGFzaF9lbnRyeSAqLCBzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKiwgY29uc3QgY2hhciAq KSwgdW5zaWduZWQgaW50IHNpemUpOwoKCgoKCgpleHRlcm4gdm9pZCBiZmRfaGFzaF90YWJsZV9m cmVlIChzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKik7CgoKCgoKZXh0ZXJuIHN0cnVjdCBiZmRfaGFz aF9lbnRyeSAqYmZkX2hhc2hfbG9va3VwCiAgKHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqLCBjb25z dCBjaGFyICosIGJvb2xlYW4gY3JlYXRlLCBib29sZWFuIGNvcHkpOwoKCgpleHRlcm4gdm9pZCBi ZmRfaGFzaF9yZXBsYWNlCiAgKHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqLCBzdHJ1Y3QgYmZkX2hh c2hfZW50cnkgKm9sZCwgc3RydWN0IGJmZF9oYXNoX2VudHJ5ICpudyk7CgoKCmV4dGVybiBzdHJ1 Y3QgYmZkX2hhc2hfZW50cnkgKmJmZF9oYXNoX25ld2Z1bmMKICAoc3RydWN0IGJmZF9oYXNoX2Vu dHJ5ICosIHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqLCBjb25zdCBjaGFyICopOwoKCgpleHRlcm4g dm9pZCAqIGJmZF9oYXNoX2FsbG9jYXRlIChzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKiwgdW5zaWdu ZWQgaW50KTsKCgoKCgpleHRlcm4gdm9pZCBiZmRfaGFzaF90cmF2ZXJzZSAoc3RydWN0IGJmZF9o YXNoX3RhYmxlICosIGJvb2xlYW4gKCopIChzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKiwgdm9pZCAq KSwgdm9pZCAqIGluZm8pOwojIDQ3OSAiLi4vYmZkL2JmZC5oIgpleHRlcm4gYmZkX3NpemVfdHlw ZSBiZmRfYnJlYWQgKHZvaWQgKiwgYmZkX3NpemVfdHlwZSwgYmZkICopOwpleHRlcm4gYmZkX3Np emVfdHlwZSBiZmRfYndyaXRlIChjb25zdCB2b2lkICosIGJmZF9zaXplX3R5cGUsIGJmZCAqKTsK ZXh0ZXJuIGludCBiZmRfc2VlayAoYmZkICosIGZpbGVfcHRyLCBpbnQpOwpleHRlcm4gdWZpbGVf cHRyIGJmZF90ZWxsIChiZmQgKik7CmV4dGVybiBpbnQgYmZkX2ZsdXNoIChiZmQgKik7CmV4dGVy biBpbnQgYmZkX3N0YXQgKGJmZCAqLCBzdHJ1Y3Qgc3RhdCAqKTsKIyA1MDIgIi4uL2JmZC9iZmQu aCIKZXh0ZXJuIHZvaWQgd2Fybl9kZXByZWNhdGVkCiAgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh ciAqLCBpbnQsIGNvbnN0IGNoYXIgKik7CiMgNTM5ICIuLi9iZmQvYmZkLmgiCmV4dGVybiBib29s ZWFuIGJmZF9jYWNoZV9jbG9zZSAoYmZkICphYmZkKTsKCgpleHRlcm4gYm9vbGVhbiBiZmRfcmVj b3JkX3BoZHIKICAoYmZkICosIHVuc2lnbmVkIGxvbmcsIGJvb2xlYW4sIGZsYWd3b3JkLCBib29s ZWFuLCBiZmRfdm1hLCBib29sZWFuLCBib29sZWFuLCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBzZWMg KiopOwoKCgoKYmZkX3ZtYSBiZmRfZ2V0YjY0IChjb25zdCB1bnNpZ25lZCBjaGFyICopOwpiZmRf dm1hIGJmZF9nZXRsNjQgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKik7CmJmZF9zaWduZWRfdm1hIGJm ZF9nZXRiX3NpZ25lZF82NCAoY29uc3QgdW5zaWduZWQgY2hhciAqKTsKYmZkX3NpZ25lZF92bWEg YmZkX2dldGxfc2lnbmVkXzY0IChjb25zdCB1bnNpZ25lZCBjaGFyICopOwpiZmRfdm1hIGJmZF9n ZXRiMzIgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKik7CmJmZF92bWEgYmZkX2dldGwzMiAoY29uc3Qg dW5zaWduZWQgY2hhciAqKTsKYmZkX3NpZ25lZF92bWEgYmZkX2dldGJfc2lnbmVkXzMyIChjb25z dCB1bnNpZ25lZCBjaGFyICopOwpiZmRfc2lnbmVkX3ZtYSBiZmRfZ2V0bF9zaWduZWRfMzIgKGNv bnN0IHVuc2lnbmVkIGNoYXIgKik7CmJmZF92bWEgYmZkX2dldGIxNiAoY29uc3QgdW5zaWduZWQg Y2hhciAqKTsKYmZkX3ZtYSBiZmRfZ2V0bDE2IChjb25zdCB1bnNpZ25lZCBjaGFyICopOwpiZmRf c2lnbmVkX3ZtYSBiZmRfZ2V0Yl9zaWduZWRfMTYgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKik7CmJm ZF9zaWduZWRfdm1hIGJmZF9nZXRsX3NpZ25lZF8xNiAoY29uc3QgdW5zaWduZWQgY2hhciAqKTsK dm9pZCBiZmRfcHV0YjY0IChiZmRfdm1hLCB1bnNpZ25lZCBjaGFyICopOwp2b2lkIGJmZF9wdXRs NjQgKGJmZF92bWEsIHVuc2lnbmVkIGNoYXIgKik7CnZvaWQgYmZkX3B1dGIzMiAoYmZkX3ZtYSwg dW5zaWduZWQgY2hhciAqKTsKdm9pZCBiZmRfcHV0bDMyIChiZmRfdm1hLCB1bnNpZ25lZCBjaGFy ICopOwp2b2lkIGJmZF9wdXRiMTYgKGJmZF92bWEsIHVuc2lnbmVkIGNoYXIgKik7CnZvaWQgYmZk X3B1dGwxNiAoYmZkX3ZtYSwgdW5zaWduZWQgY2hhciAqKTsKCgoKYmZkX3ZtYSBiZmRfZ2V0X2Jp dHMgKGJmZF9ieXRlICosIGludCwgYm9vbGVhbik7CnZvaWQgYmZkX3B1dF9iaXRzIChiZmRfdm1h LCBiZmRfYnl0ZSAqLCBpbnQsIGJvb2xlYW4pOwoKCgoKc3RydWN0IGVjb2ZmX2RlYnVnX2luZm87 CnN0cnVjdCBlY29mZl9kZWJ1Z19zd2FwOwpzdHJ1Y3QgZWNvZmZfZXh0cjsKc3RydWN0IHN5bWJv bF9jYWNoZV9lbnRyeTsKc3RydWN0IGJmZF9saW5rX2luZm87CnN0cnVjdCBiZmRfbGlua19oYXNo X2VudHJ5OwpzdHJ1Y3QgYmZkX2VsZl92ZXJzaW9uX3RyZWU7CgpleHRlcm4gYmZkX3ZtYSBiZmRf ZWNvZmZfZ2V0X2dwX3ZhbHVlIChiZmQgKiBhYmZkKTsKZXh0ZXJuIGJvb2xlYW4gYmZkX2Vjb2Zm X3NldF9ncF92YWx1ZSAoYmZkICphYmZkLCBiZmRfdm1hIGdwX3ZhbHVlKTsKZXh0ZXJuIGJvb2xl YW4gYmZkX2Vjb2ZmX3NldF9yZWdtYXNrcwogIChiZmQgKmFiZmQsIHVuc2lnbmVkIGxvbmcgZ3By bWFzaywgdW5zaWduZWQgbG9uZyBmcHJtYXNrLCB1bnNpZ25lZCBsb25nICpjcHJtYXNrKTsKCmV4 dGVybiB2b2lkICogYmZkX2Vjb2ZmX2RlYnVnX2luaXQKICAoYmZkICpvdXRwdXRfYmZkLCBzdHJ1 Y3QgZWNvZmZfZGVidWdfaW5mbyAqb3V0cHV0X2RlYnVnLCBjb25zdCBzdHJ1Y3QgZWNvZmZfZGVi dWdfc3dhcCAqb3V0cHV0X3N3YXAsIHN0cnVjdCBiZmRfbGlua19pbmZvICopOwoKCmV4dGVybiB2 b2lkIGJmZF9lY29mZl9kZWJ1Z19mcmVlCiAgKHZvaWQgKiBoYW5kbGUsIGJmZCAqb3V0cHV0X2Jm ZCwgc3RydWN0IGVjb2ZmX2RlYnVnX2luZm8gKm91dHB1dF9kZWJ1ZywgY29uc3Qgc3RydWN0IGVj b2ZmX2RlYnVnX3N3YXAgKm91dHB1dF9zd2FwLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKCgpl eHRlcm4gYm9vbGVhbiBiZmRfZWNvZmZfZGVidWdfYWNjdW11bGF0ZQogICh2b2lkICogaGFuZGxl LCBiZmQgKm91dHB1dF9iZmQsIHN0cnVjdCBlY29mZl9kZWJ1Z19pbmZvICpvdXRwdXRfZGVidWcs IGNvbnN0IHN0cnVjdCBlY29mZl9kZWJ1Z19zd2FwICpvdXRwdXRfc3dhcCwgYmZkICppbnB1dF9i ZmQsIHN0cnVjdCBlY29mZl9kZWJ1Z19pbmZvICppbnB1dF9kZWJ1ZywgY29uc3Qgc3RydWN0IGVj b2ZmX2RlYnVnX3N3YXAgKmlucHV0X3N3YXAsIHN0cnVjdCBiZmRfbGlua19pbmZvICopOwoKCgoK ZXh0ZXJuIGJvb2xlYW4gYmZkX2Vjb2ZmX2RlYnVnX2FjY3VtdWxhdGVfb3RoZXIKICAodm9pZCAq IGhhbmRsZSwgYmZkICpvdXRwdXRfYmZkLCBzdHJ1Y3QgZWNvZmZfZGVidWdfaW5mbyAqb3V0cHV0 X2RlYnVnLCBjb25zdCBzdHJ1Y3QgZWNvZmZfZGVidWdfc3dhcCAqb3V0cHV0X3N3YXAsIGJmZCAq aW5wdXRfYmZkLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKCgpleHRlcm4gYm9vbGVhbiBiZmRf ZWNvZmZfZGVidWdfZXh0ZXJuYWxzCiAgKGJmZCAqYWJmZCwgc3RydWN0IGVjb2ZmX2RlYnVnX2lu Zm8gKmRlYnVnLCBjb25zdCBzdHJ1Y3QgZWNvZmZfZGVidWdfc3dhcCAqc3dhcCwgYm9vbGVhbiBy ZWxvY2F0ZWFibGUsIGJvb2xlYW4gKCpnZXRfZXh0cikgKHN0cnVjdCBzeW1ib2xfY2FjaGVfZW50 cnkgKiwgc3RydWN0IGVjb2ZmX2V4dHIgKiksIHZvaWQgKCpzZXRfaW5kZXgpIChzdHJ1Y3Qgc3lt Ym9sX2NhY2hlX2VudHJ5ICosIGJmZF9zaXplX3R5cGUpKTsKCgoKCgoKZXh0ZXJuIGJvb2xlYW4g YmZkX2Vjb2ZmX2RlYnVnX29uZV9leHRlcm5hbAogIChiZmQgKmFiZmQsIHN0cnVjdCBlY29mZl9k ZWJ1Z19pbmZvICpkZWJ1ZywgY29uc3Qgc3RydWN0IGVjb2ZmX2RlYnVnX3N3YXAgKnN3YXAsIGNv bnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBlY29mZl9leHRyICplc3ltKTsKCgpleHRlcm4gYmZkX3Np emVfdHlwZSBiZmRfZWNvZmZfZGVidWdfc2l6ZQogIChiZmQgKmFiZmQsIHN0cnVjdCBlY29mZl9k ZWJ1Z19pbmZvICpkZWJ1ZywgY29uc3Qgc3RydWN0IGVjb2ZmX2RlYnVnX3N3YXAgKnN3YXApOwoK ZXh0ZXJuIGJvb2xlYW4gYmZkX2Vjb2ZmX3dyaXRlX2RlYnVnCiAgKGJmZCAqYWJmZCwgc3RydWN0 IGVjb2ZmX2RlYnVnX2luZm8gKmRlYnVnLCBjb25zdCBzdHJ1Y3QgZWNvZmZfZGVidWdfc3dhcCAq c3dhcCwgZmlsZV9wdHIgd2hlcmUpOwoKZXh0ZXJuIGJvb2xlYW4gYmZkX2Vjb2ZmX3dyaXRlX2Fj Y3VtdWxhdGVkX2RlYnVnCiAgKHZvaWQgKiBoYW5kbGUsIGJmZCAqYWJmZCwgc3RydWN0IGVjb2Zm X2RlYnVnX2luZm8gKmRlYnVnLCBjb25zdCBzdHJ1Y3QgZWNvZmZfZGVidWdfc3dhcCAqc3dhcCwg c3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8sIGZpbGVfcHRyIHdoZXJlKTsKCgpleHRlcm4gYm9v bGVhbiBiZmRfbWlwc19lY29mZl9jcmVhdGVfZW1iZWRkZWRfcmVsb2NzCiAgKGJmZCAqLCBzdHJ1 Y3QgYmZkX2xpbmtfaW5mbyAqLCBzdHJ1Y3Qgc2VjICosIHN0cnVjdCBzZWMgKiwgY2hhciAqKik7 CgoKCgpzdHJ1Y3QgYmZkX2xpbmtfbmVlZGVkX2xpc3QKewogIHN0cnVjdCBiZmRfbGlua19uZWVk ZWRfbGlzdCAqbmV4dDsKICBiZmQgKmJ5OwogIGNvbnN0IGNoYXIgKm5hbWU7Cn07CgpleHRlcm4g Ym9vbGVhbiBiZmRfZWxmMzJfcmVjb3JkX2xpbmtfYXNzaWdubWVudAogIChiZmQgKiwgc3RydWN0 IGJmZF9saW5rX2luZm8gKiwgY29uc3QgY2hhciAqLCBib29sZWFuKTsKZXh0ZXJuIGJvb2xlYW4g YmZkX2VsZjY0X3JlY29yZF9saW5rX2Fzc2lnbm1lbnQKICAoYmZkICosIHN0cnVjdCBiZmRfbGlu a19pbmZvICosIGNvbnN0IGNoYXIgKiwgYm9vbGVhbik7CmV4dGVybiBzdHJ1Y3QgYmZkX2xpbmtf bmVlZGVkX2xpc3QgKmJmZF9lbGZfZ2V0X25lZWRlZF9saXN0CiAgKGJmZCAqLCBzdHJ1Y3QgYmZk X2xpbmtfaW5mbyAqKTsKZXh0ZXJuIGJvb2xlYW4gYmZkX2VsZl9nZXRfYmZkX25lZWRlZF9saXN0 CiAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfbmVlZGVkX2xpc3QgKiopOwpleHRlcm4gYm9vbGVh biBiZmRfZWxmMzJfc2l6ZV9keW5hbWljX3NlY3Rpb25zCiAgKGJmZCAqLCBjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogY29uc3QgKiwgc3RydWN0 IGJmZF9saW5rX2luZm8gKiwgc3RydWN0IHNlYyAqKiwgc3RydWN0IGJmZF9lbGZfdmVyc2lvbl90 cmVlICopOwoKCmV4dGVybiBib29sZWFuIGJmZF9lbGY2NF9zaXplX2R5bmFtaWNfc2VjdGlvbnMK ICAoYmZkICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0 IGNoYXIgKiBjb25zdCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBzdHJ1Y3Qgc2VjICoqLCBz dHJ1Y3QgYmZkX2VsZl92ZXJzaW9uX3RyZWUgKik7CgoKZXh0ZXJuIHZvaWQgYmZkX2VsZl9zZXRf ZHRfbmVlZGVkX25hbWUgKGJmZCAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBiZmRfZWxm X3NldF9kdF9uZWVkZWRfc29uYW1lIChiZmQgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNvbnN0 IGNoYXIgKmJmZF9lbGZfZ2V0X2R0X3NvbmFtZSAoYmZkICopOwpleHRlcm4gc3RydWN0IGJmZF9s aW5rX25lZWRlZF9saXN0ICpiZmRfZWxmX2dldF9ydW5wYXRoX2xpc3QKICAoYmZkICosIHN0cnVj dCBiZmRfbGlua19pbmZvICopOwpleHRlcm4gYm9vbGVhbiBiZmRfZWxmMzJfZGlzY2FyZF9pbmZv CiAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKZXh0ZXJuIGJvb2xlYW4gYmZkX2Vs ZjY0X2Rpc2NhcmRfaW5mbwogIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CgoKCgpl eHRlcm4gbG9uZyBiZmRfZ2V0X2VsZl9waGRyX3VwcGVyX2JvdW5kIChiZmQgKmFiZmQpOwojIDY3 OSAiLi4vYmZkL2JmZC5oIgpleHRlcm4gaW50IGJmZF9nZXRfZWxmX3BoZHJzIChiZmQgKmFiZmQs IHZvaWQgKnBoZHJzKTsKCgpleHRlcm4gaW50IGJmZF9nZXRfYXJjaF9zaXplIChiZmQgKik7CgoK ZXh0ZXJuIGludCBiZmRfZ2V0X3NpZ25fZXh0ZW5kX3ZtYSAoYmZkICopOwoKZXh0ZXJuIGJvb2xl YW4gYmZkX202OGtfZWxmMzJfY3JlYXRlX2VtYmVkZGVkX3JlbG9jcwogIChiZmQgKiwgc3RydWN0 IGJmZF9saW5rX2luZm8gKiwgc3RydWN0IHNlYyAqLCBzdHJ1Y3Qgc2VjICosIGNoYXIgKiopOwoK ZXh0ZXJuIGJvb2xlYW4gYmZkX21pcHNfZWxmMzJfY3JlYXRlX2VtYmVkZGVkX3JlbG9jcwogIChi ZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgc3RydWN0IHNlYyAqLCBzdHJ1Y3Qgc2VjICos IGNoYXIgKiopOwoKCgoKZXh0ZXJuIHN0cnVjdCBiZmRfbGlua19uZWVkZWRfbGlzdCAqYmZkX3N1 bm9zX2dldF9uZWVkZWRfbGlzdAogIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CmV4 dGVybiBib29sZWFuIGJmZF9zdW5vc19yZWNvcmRfbGlua19hc3NpZ25tZW50CiAgKGJmZCAqLCBz dHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gYm9vbGVhbiBiZmRf c3Vub3Nfc2l6ZV9keW5hbWljX3NlY3Rpb25zCiAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5m byAqLCBzdHJ1Y3Qgc2VjICoqLCBzdHJ1Y3Qgc2VjICoqLCBzdHJ1Y3Qgc2VjICoqKTsKCgoKCmV4 dGVybiBib29sZWFuIGJmZF9pMzg2bGludXhfc2l6ZV9keW5hbWljX3NlY3Rpb25zCiAgKGJmZCAq LCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKZXh0ZXJuIGJvb2xlYW4gYmZkX202OGtsaW51eF9z aXplX2R5bmFtaWNfc2VjdGlvbnMKICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOwpl eHRlcm4gYm9vbGVhbiBiZmRfc3BhcmNsaW51eF9zaXplX2R5bmFtaWNfc2VjdGlvbnMKICAoYmZk ICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOwoKCgpzdHJ1Y3QgX2JmZF93aW5kb3dfaW50ZXJu YWw7CnR5cGVkZWYgc3RydWN0IF9iZmRfd2luZG93X2ludGVybmFsIGJmZF93aW5kb3dfaW50ZXJu YWw7Cgp0eXBlZGVmIHN0cnVjdCBfYmZkX3dpbmRvdwp7CgogIHZvaWQgKiBkYXRhOwogIGJmZF9z aXplX3R5cGUgc2l6ZTsKCgoKCgoKICBzdHJ1Y3QgX2JmZF93aW5kb3dfaW50ZXJuYWwgKmk7Cn0K YmZkX3dpbmRvdzsKCmV4dGVybiB2b2lkIGJmZF9pbml0X3dpbmRvdyAoYmZkX3dpbmRvdyAqKTsK ZXh0ZXJuIHZvaWQgYmZkX2ZyZWVfd2luZG93IChiZmRfd2luZG93ICopOwpleHRlcm4gYm9vbGVh biBiZmRfZ2V0X2ZpbGVfd2luZG93CiAgKGJmZCAqLCBmaWxlX3B0ciwgYmZkX3NpemVfdHlwZSwg YmZkX3dpbmRvdyAqLCBib29sZWFuKTsKCgoKZXh0ZXJuIGJvb2xlYW4gYmZkX3hjb2ZmX2xpbmtf cmVjb3JkX3NldAogIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgc3RydWN0IGJmZF9s aW5rX2hhc2hfZW50cnkgKiwgYmZkX3NpemVfdHlwZSk7CgpleHRlcm4gYm9vbGVhbiBiZmRfeGNv ZmZfaW1wb3J0X3N5bWJvbAogIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgc3RydWN0 IGJmZF9saW5rX2hhc2hfZW50cnkgKiwgYmZkX3ZtYSwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50KTsKCmV4dGVybiBib29sZWFuIGJmZF94Y29m Zl9leHBvcnRfc3ltYm9sCiAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBzdHJ1Y3Qg YmZkX2xpbmtfaGFzaF9lbnRyeSAqKTsKZXh0ZXJuIGJvb2xlYW4gYmZkX3hjb2ZmX2xpbmtfY291 bnRfcmVsb2MKICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGNvbnN0IGNoYXIgKik7 CmV4dGVybiBib29sZWFuIGJmZF94Y29mZl9yZWNvcmRfbGlua19hc3NpZ25tZW50CiAgKGJmZCAq LCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gYm9vbGVhbiBi ZmRfeGNvZmZfc2l6ZV9keW5hbWljX3NlY3Rpb25zCiAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtf aW5mbyAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZywgdW5zaWdu ZWQgbG9uZywgdW5zaWduZWQgbG9uZywgYm9vbGVhbiwgaW50LCBib29sZWFuLCBib29sZWFuLCBz dHJ1Y3Qgc2VjICoqLCBib29sZWFuKTsKCgpleHRlcm4gYm9vbGVhbiBiZmRfeGNvZmZfbGlua19n ZW5lcmF0ZV9ydGluaXQKICAoYmZkICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBib29s ZWFuKTsKCgpleHRlcm4gYm9vbGVhbiBiZmRfeGNvZmZfYXJfYXJjaGl2ZV9zZXRfbWFnaWMgKGJm ZCAqLCBjaGFyICopOwoKCgoKc3RydWN0IGludGVybmFsX3N5bWVudDsKdW5pb24gaW50ZXJuYWxf YXV4ZW50OwoKCmV4dGVybiBib29sZWFuIGJmZF9jb2ZmX2dldF9zeW1lbnQKICAoYmZkICosIHN0 cnVjdCBzeW1ib2xfY2FjaGVfZW50cnkgKiwgc3RydWN0IGludGVybmFsX3N5bWVudCAqKTsKCmV4 dGVybiBib29sZWFuIGJmZF9jb2ZmX2dldF9hdXhlbnQKICAoYmZkICosIHN0cnVjdCBzeW1ib2xf Y2FjaGVfZW50cnkgKiwgaW50LCB1bmlvbiBpbnRlcm5hbF9hdXhlbnQgKik7CgpleHRlcm4gYm9v bGVhbiBiZmRfY29mZl9zZXRfc3ltYm9sX2NsYXNzCiAgKGJmZCAqLCBzdHJ1Y3Qgc3ltYm9sX2Nh Y2hlX2VudHJ5ICosIHVuc2lnbmVkIGludCk7CgpleHRlcm4gYm9vbGVhbiBiZmRfbTY4a19jb2Zm X2NyZWF0ZV9lbWJlZGRlZF9yZWxvY3MKICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICos IHN0cnVjdCBzZWMgKiwgc3RydWN0IHNlYyAqLCBjaGFyICoqKTsKCgoKZXh0ZXJuIGJvb2xlYW4g YmZkX2FybV9hbGxvY2F0ZV9pbnRlcndvcmtpbmdfc2VjdGlvbnMKICAoc3RydWN0IGJmZF9saW5r X2luZm8gKik7CgpleHRlcm4gYm9vbGVhbiBiZmRfYXJtX3Byb2Nlc3NfYmVmb3JlX2FsbG9jYXRp b24KICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGludCk7CgpleHRlcm4gYm9vbGVh biBiZmRfYXJtX2dldF9iZmRfZm9yX2ludGVyd29ya2luZwogIChiZmQgKiwgc3RydWN0IGJmZF9s aW5rX2luZm8gKik7CgoKZXh0ZXJuIGJvb2xlYW4gYmZkX2FybV9wZV9hbGxvY2F0ZV9pbnRlcndv cmtpbmdfc2VjdGlvbnMKICAoc3RydWN0IGJmZF9saW5rX2luZm8gKik7CgpleHRlcm4gYm9vbGVh biBiZmRfYXJtX3BlX3Byb2Nlc3NfYmVmb3JlX2FsbG9jYXRpb24KICAoYmZkICosIHN0cnVjdCBi ZmRfbGlua19pbmZvICosIGludCk7CgpleHRlcm4gYm9vbGVhbiBiZmRfYXJtX3BlX2dldF9iZmRf Zm9yX2ludGVyd29ya2luZwogIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CgoKZXh0 ZXJuIGJvb2xlYW4gYmZkX2VsZjMyX2FybV9hbGxvY2F0ZV9pbnRlcndvcmtpbmdfc2VjdGlvbnMK ICAoc3RydWN0IGJmZF9saW5rX2luZm8gKik7CgpleHRlcm4gYm9vbGVhbiBiZmRfZWxmMzJfYXJt X3Byb2Nlc3NfYmVmb3JlX2FsbG9jYXRpb24KICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZv ICosIGludCk7CgpleHRlcm4gYm9vbGVhbiBiZmRfZWxmMzJfYXJtX2dldF9iZmRfZm9yX2ludGVy d29ya2luZwogIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CgpleHRlcm4gYm9vbGVh biBiZmRfZWxmMzJfYXJtX2FkZF9nbHVlX3NlY3Rpb25zX3RvX2JmZAogIChiZmQgKiwgc3RydWN0 IGJmZF9saW5rX2luZm8gKik7CgoKZXh0ZXJuIHZvaWQgYmZkX3RpY29mZl9zZXRfc2VjdGlvbl9s b2FkX3BhZ2UKICAoc3RydWN0IHNlYyAqLCBpbnQpOwoKZXh0ZXJuIGludCBiZmRfdGljb2ZmX2dl dF9zZWN0aW9uX2xvYWRfcGFnZQogIChzdHJ1Y3Qgc2VjICopOwoKCnZvaWQKYmZkX2luaXQgKHZv aWQpOwoKCmJmZCAqCmJmZF9vcGVuciAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIg KnRhcmdldCk7CgpiZmQgKgpiZmRfZmRvcGVuciAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0 IGNoYXIgKnRhcmdldCwgaW50IGZkKTsKCmJmZCAqCmJmZF9vcGVuc3RyZWFtciAoY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7CgpiZmQgKgpiZmRfb3BlbncgKGNvbnN0IGNoYXIg KmZpbGVuYW1lLCBjb25zdCBjaGFyICp0YXJnZXQpOwoKYm9vbGVhbgpiZmRfY2xvc2UgKGJmZCAq YWJmZCk7Cgpib29sZWFuCmJmZF9jbG9zZV9hbGxfZG9uZSAoYmZkICopOwoKYmZkICoKYmZkX2Ny ZWF0ZSAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGJmZCAqdGVtcGwpOwoKYm9vbGVhbgpiZmRfbWFr ZV93cml0YWJsZSAoYmZkICphYmZkKTsKCmJvb2xlYW4KYmZkX21ha2VfcmVhZGFibGUgKGJmZCAq YWJmZCk7CiMgMTAwMSAiLi4vYmZkL2JmZC5oIgpzdHJ1Y3QgYmZkX2NvbWRhdF9pbmZvCnsKCiAg Y29uc3QgY2hhciAqbmFtZTsKCgoKCgogIGxvbmcgc3ltYm9sOwp9OwoKdHlwZWRlZiBzdHJ1Y3Qg c2VjCnsKCgogIGNvbnN0IGNoYXIgKm5hbWU7CgoKICBpbnQgaWQ7CgoKICBpbnQgaW5kZXg7CgoK ICBzdHJ1Y3Qgc2VjICpuZXh0OwoKCgoKICBmbGFnd29yZCBmbGFnczsKIyAxMjA5ICIuLi9iZmQv YmZkLmgiCiAgdW5zaWduZWQgaW50IHVzZXJfc2V0X3ZtYSA6IDE7CgoKICB1bnNpZ25lZCBpbnQg cmVsb2NfZG9uZSA6IDE7CgoKICB1bnNpZ25lZCBpbnQgbGlua2VyX21hcmsgOiAxOwoKCgogIHVu c2lnbmVkIGludCBsaW5rZXJfaGFzX2lucHV0IDogMTsKCgogIHVuc2lnbmVkIGludCBnY19tYXJr IDogMTsKCgoKICB1bnNpZ25lZCBpbnQgc2VnbWVudF9tYXJrIDogMTsKIyAxMjM2ICIuLi9iZmQv YmZkLmgiCiAgYmZkX3ZtYSB2bWE7CgoKCgogIGJmZF92bWEgbG1hOwoKCgoKICBiZmRfc2l6ZV90 eXBlIF9jb29rZWRfc2l6ZTsKCgoKCiAgYmZkX3NpemVfdHlwZSBfcmF3X3NpemU7CiMgMTI2MCAi Li4vYmZkL2JmZC5oIgogIGJmZF92bWEgb3V0cHV0X29mZnNldDsKCgogIHN0cnVjdCBzZWMgKm91 dHB1dF9zZWN0aW9uOwoKCgogIHVuc2lnbmVkIGludCBhbGlnbm1lbnRfcG93ZXI7CgoKCiAgc3Ry dWN0IHJlbG9jX2NhY2hlX2VudHJ5ICpyZWxvY2F0aW9uOwoKCgogIHN0cnVjdCByZWxvY19jYWNo ZV9lbnRyeSAqKm9yZWxvY2F0aW9uOwoKCiAgdW5zaWduZWQgcmVsb2NfY291bnQ7CgoKCgoKICBm aWxlX3B0ciBmaWxlcG9zOwoKCiAgZmlsZV9wdHIgcmVsX2ZpbGVwb3M7CgoKICBmaWxlX3B0ciBs aW5lX2ZpbGVwb3M7CgoKICB2b2lkICogdXNlcmRhdGE7CgoKCiAgdW5zaWduZWQgY2hhciAqY29u dGVudHM7CgoKICBhbGVudCAqbGluZW5vOwoKCiAgdW5zaWduZWQgaW50IGxpbmVub19jb3VudDsK CgogIHVuc2lnbmVkIGludCBlbnRzaXplOwoKCiAgc3RydWN0IGJmZF9jb21kYXRfaW5mbyAqY29t ZGF0OwoKCgogIGZpbGVfcHRyIG1vdmluZ19saW5lX2ZpbGVwb3M7CgoKICBpbnQgdGFyZ2V0X2lu ZGV4OwoKICB2b2lkICogdXNlZF9ieV9iZmQ7CgoKCiAgc3RydWN0IHJlbGVudF9jaGFpbiAqY29u c3RydWN0b3JfY2hhaW47CgoKICBiZmQgKm93bmVyOwoKCiAgc3RydWN0IHN5bWJvbF9jYWNoZV9l bnRyeSAqc3ltYm9sOwogIHN0cnVjdCBzeW1ib2xfY2FjaGVfZW50cnkgKipzeW1ib2xfcHRyX3B0 cjsKCiAgc3RydWN0IGJmZF9saW5rX29yZGVyICpsaW5rX29yZGVyX2hlYWQ7CiAgc3RydWN0IGJm ZF9saW5rX29yZGVyICpsaW5rX29yZGVyX3RhaWw7Cn0gYXNlY3Rpb247CiMgMTM0NiAiLi4vYmZk L2JmZC5oIgpleHRlcm4gY29uc3QgYXNlY3Rpb24gYmZkX2Fic19zZWN0aW9uOwoKCgpleHRlcm4g Y29uc3QgYXNlY3Rpb24gYmZkX3VuZF9zZWN0aW9uOwoKCgpleHRlcm4gY29uc3QgYXNlY3Rpb24g YmZkX2NvbV9zZWN0aW9uOwoKCmV4dGVybiBjb25zdCBhc2VjdGlvbiBiZmRfaW5kX3NlY3Rpb247 CiMgMTM2NyAiLi4vYmZkL2JmZC5oIgpleHRlcm4gY29uc3Qgc3RydWN0IHN5bWJvbF9jYWNoZV9l bnRyeSAqIGNvbnN0IGJmZF9hYnNfc3ltYm9sOwpleHRlcm4gY29uc3Qgc3RydWN0IHN5bWJvbF9j YWNoZV9lbnRyeSAqIGNvbnN0IGJmZF9jb21fc3ltYm9sOwpleHRlcm4gY29uc3Qgc3RydWN0IHN5 bWJvbF9jYWNoZV9lbnRyeSAqIGNvbnN0IGJmZF91bmRfc3ltYm9sOwpleHRlcm4gY29uc3Qgc3Ry dWN0IHN5bWJvbF9jYWNoZV9lbnRyeSAqIGNvbnN0IGJmZF9pbmRfc3ltYm9sOwojIDE0MDMgIi4u L2JmZC9iZmQuaCIKdm9pZApiZmRfc2VjdGlvbl9saXN0X2NsZWFyIChiZmQgKik7Cgphc2VjdGlv biAqCmJmZF9nZXRfc2VjdGlvbl9ieV9uYW1lIChiZmQgKmFiZmQsIGNvbnN0IGNoYXIgKm5hbWUp OwoKY2hhciAqCmJmZF9nZXRfdW5pcXVlX3NlY3Rpb25fbmFtZSAoYmZkICphYmZkLCBjb25zdCBj aGFyICp0ZW1wbGF0LCBpbnQgKmNvdW50KTsKCgoKYXNlY3Rpb24gKgpiZmRfbWFrZV9zZWN0aW9u X29sZF93YXkgKGJmZCAqYWJmZCwgY29uc3QgY2hhciAqbmFtZSk7Cgphc2VjdGlvbiAqCmJmZF9t YWtlX3NlY3Rpb25fYW55d2F5IChiZmQgKmFiZmQsIGNvbnN0IGNoYXIgKm5hbWUpOwoKYXNlY3Rp b24gKgpiZmRfbWFrZV9zZWN0aW9uIChiZmQgKiwgY29uc3QgY2hhciAqbmFtZSk7Cgpib29sZWFu CmJmZF9zZXRfc2VjdGlvbl9mbGFncyAoYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjLCBmbGFnd29y ZCBmbGFncyk7Cgp2b2lkCmJmZF9tYXBfb3Zlcl9zZWN0aW9ucyAoYmZkICphYmZkLCB2b2lkICgq ZnVuYykgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlY3QsIHZvaWQgKiBvYmopLCB2b2lkICogb2Jq KTsKCgoKCgpib29sZWFuCmJmZF9zZXRfc2VjdGlvbl9zaXplIChiZmQgKmFiZmQsIGFzZWN0aW9u ICpzZWMsIGJmZF9zaXplX3R5cGUgdmFsKTsKCmJvb2xlYW4KYmZkX3NldF9zZWN0aW9uX2NvbnRl bnRzIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWN0aW9uLCB2b2lkICogZGF0YSwgZmlsZV9wdHIg b2Zmc2V0LCBiZmRfc2l6ZV90eXBlIGNvdW50KTsKCgoKYm9vbGVhbgpiZmRfZ2V0X3NlY3Rpb25f Y29udGVudHMgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlY3Rpb24sIHZvaWQgKiBsb2NhdGlvbiwg ZmlsZV9wdHIgb2Zmc2V0LCBiZmRfc2l6ZV90eXBlIGNvdW50KTsKCgoKYm9vbGVhbgpiZmRfY29w eV9wcml2YXRlX3NlY3Rpb25fZGF0YSAoYmZkICppYmZkLCBhc2VjdGlvbiAqaXNlYywgYmZkICpv YmZkLCBhc2VjdGlvbiAqb3NlYyk7CgoKCgoKdm9pZApfYmZkX3N0cmlwX3NlY3Rpb25fZnJvbV9v dXRwdXQgKHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvLCBhc2VjdGlvbiAqc2VjdGlvbik7Cgpi b29sZWFuCmJmZF9nZW5lcmljX2Rpc2NhcmRfZ3JvdXAgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKmdy b3VwKTsKCgplbnVtIGJmZF9hcmNoaXRlY3R1cmUKewogIGJmZF9hcmNoX3Vua25vd24sCiAgYmZk X2FyY2hfb2JzY3VyZSwKICBiZmRfYXJjaF9tNjhrLAojIDE0NzcgIi4uL2JmZC9iZmQuaCIKICBi ZmRfYXJjaF92YXgsCiAgYmZkX2FyY2hfaTk2MCwKIyAxNDk2ICIuLi9iZmQvYmZkLmgiCiAgYmZk X2FyY2hfb3IzMiwKCiAgYmZkX2FyY2hfYTI5aywKICBiZmRfYXJjaF9zcGFyYywKIyAxNTE1ICIu Li9iZmQvYmZkLmgiCiAgYmZkX2FyY2hfbWlwcywKIyAxNTM2ICIuLi9iZmQvYmZkLmgiCiAgYmZk X2FyY2hfaTM4NiwKCgoKCgogIGJmZF9hcmNoX3dlMzJrLAogIGJmZF9hcmNoX3RhaG9lLAogIGJm ZF9hcmNoX2k4NjAsCiAgYmZkX2FyY2hfaTM3MCwKICBiZmRfYXJjaF9yb21wLAogIGJmZF9hcmNo X2FsbGlhbnQsCiAgYmZkX2FyY2hfY29udmV4LAogIGJmZF9hcmNoX204OGssCiAgYmZkX2FyY2hf cHlyYW1pZCwKICBiZmRfYXJjaF9oODMwMCwKCgoKICBiZmRfYXJjaF9wZHAxMSwKICBiZmRfYXJj aF9wb3dlcnBjLAojIDE1NzUgIi4uL2JmZC9iZmQuaCIKICBiZmRfYXJjaF9yczYwMDAsCgoKCgog IGJmZF9hcmNoX2hwcGEsCiAgYmZkX2FyY2hfZDEwdiwKCgoKICBiZmRfYXJjaF9kMzB2LAogIGJm ZF9hcmNoX2RseCwKICBiZmRfYXJjaF9tNjhoYzExLAogIGJmZF9hcmNoX202OGhjMTIsCiAgYmZk X2FyY2hfejhrLAoKCiAgYmZkX2FyY2hfaDg1MDAsCiAgYmZkX2FyY2hfc2gsCiMgMTYwMiAiLi4v YmZkL2JmZC5oIgogIGJmZF9hcmNoX2FscGhhLAoKCgogIGJmZF9hcmNoX2FybSwKIyAxNjE3ICIu Li9iZmQvYmZkLmgiCiAgYmZkX2FyY2hfbnMzMmssCiAgYmZkX2FyY2hfdzY1LAogIGJmZF9hcmNo X3RpYzMwLAogIGJmZF9hcmNoX3RpYzU0eCwKICBiZmRfYXJjaF90aWM4MCwKICBiZmRfYXJjaF92 ODUwLAoKCgogIGJmZF9hcmNoX2FyYywKCgoKCiAgYmZkX2FyY2hfbTMyciwKCgogIGJmZF9hcmNo X21uMTAyMDAsCiAgYmZkX2FyY2hfbW4xMDMwMCwKCgogIGJmZF9hcmNoX2ZyMzAsCgogIGJmZF9h cmNoX2ZydiwKCgoKCgoKICBiZmRfYXJjaF9tY29yZSwKICBiZmRfYXJjaF9pYTY0LAoKCiAgYmZk X2FyY2hfcGosCiAgYmZkX2FyY2hfYXZyLAoKCgoKCiAgYmZkX2FyY2hfY3JpcywKICBiZmRfYXJj aF9zMzkwLAoKCiAgYmZkX2FyY2hfb3BlbnJpc2MsCiAgYmZkX2FyY2hfbW1peCwKICBiZmRfYXJj aF94c3Rvcm15MTYsCgogIGJmZF9hcmNoX2xhc3QKICB9OwoKdHlwZWRlZiBzdHJ1Y3QgYmZkX2Fy Y2hfaW5mbwp7CiAgaW50IGJpdHNfcGVyX3dvcmQ7CiAgaW50IGJpdHNfcGVyX2FkZHJlc3M7CiAg aW50IGJpdHNfcGVyX2J5dGU7CiAgZW51bSBiZmRfYXJjaGl0ZWN0dXJlIGFyY2g7CiAgdW5zaWdu ZWQgbG9uZyBtYWNoOwogIGNvbnN0IGNoYXIgKmFyY2hfbmFtZTsKICBjb25zdCBjaGFyICpwcmlu dGFibGVfbmFtZTsKICB1bnNpZ25lZCBpbnQgc2VjdGlvbl9hbGlnbl9wb3dlcjsKCgoKICBib29s ZWFuIHRoZV9kZWZhdWx0OwogIGNvbnN0IHN0cnVjdCBiZmRfYXJjaF9pbmZvICogKCpjb21wYXRp YmxlKQogICAgICAgKGNvbnN0IHN0cnVjdCBiZmRfYXJjaF9pbmZvICphLCBjb25zdCBzdHJ1Y3Qg YmZkX2FyY2hfaW5mbyAqYik7CgoKICBib29sZWFuICgqc2NhbikgKGNvbnN0IHN0cnVjdCBiZmRf YXJjaF9pbmZvICosIGNvbnN0IGNoYXIgKik7CgogIGNvbnN0IHN0cnVjdCBiZmRfYXJjaF9pbmZv ICpuZXh0Owp9CmJmZF9hcmNoX2luZm9fdHlwZTsKCmNvbnN0IGNoYXIgKgpiZmRfcHJpbnRhYmxl X25hbWUgKGJmZCAqYWJmZCk7Cgpjb25zdCBiZmRfYXJjaF9pbmZvX3R5cGUgKgpiZmRfc2Nhbl9h cmNoIChjb25zdCBjaGFyICpzdHJpbmcpOwoKY29uc3QgY2hhciAqKgpiZmRfYXJjaF9saXN0ICh2 b2lkKTsKCmNvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSAqCmJmZF9hcmNoX2dldF9jb21wYXRpYmxl ICggY29uc3QgYmZkICphYmZkLCBjb25zdCBiZmQgKmJiZmQpOwoKCgp2b2lkCmJmZF9zZXRfYXJj aF9pbmZvIChiZmQgKmFiZmQsIGNvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSAqYXJnKTsKCmVudW0g YmZkX2FyY2hpdGVjdHVyZQpiZmRfZ2V0X2FyY2ggKGJmZCAqYWJmZCk7Cgp1bnNpZ25lZCBsb25n CmJmZF9nZXRfbWFjaCAoYmZkICphYmZkKTsKCnVuc2lnbmVkIGludApiZmRfYXJjaF9iaXRzX3Bl cl9ieXRlIChiZmQgKmFiZmQpOwoKdW5zaWduZWQgaW50CmJmZF9hcmNoX2JpdHNfcGVyX2FkZHJl c3MgKGJmZCAqYWJmZCk7Cgpjb25zdCBiZmRfYXJjaF9pbmZvX3R5cGUgKgpiZmRfZ2V0X2FyY2hf aW5mbyAoYmZkICphYmZkKTsKCmNvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSAqCmJmZF9sb29rdXBf YXJjaCAoZW51bSBiZmRfYXJjaGl0ZWN0dXJlIGFyY2gsIHVuc2lnbmVkIGxvbmcgbWFjaGluZSk7 CgoKCmNvbnN0IGNoYXIgKgpiZmRfcHJpbnRhYmxlX2FyY2hfbWFjaCAoZW51bSBiZmRfYXJjaGl0 ZWN0dXJlIGFyY2gsIHVuc2lnbmVkIGxvbmcgbWFjaGluZSk7Cgp1bnNpZ25lZCBpbnQKYmZkX29j dGV0c19wZXJfYnl0ZSAoYmZkICphYmZkKTsKCnVuc2lnbmVkIGludApiZmRfYXJjaF9tYWNoX29j dGV0c19wZXJfYnl0ZSAoZW51bSBiZmRfYXJjaGl0ZWN0dXJlIGFyY2gsIHVuc2lnbmVkIGxvbmcg bWFjaGluZSk7CgoKCnR5cGVkZWYgZW51bSBiZmRfcmVsb2Nfc3RhdHVzCnsKCiAgYmZkX3JlbG9j X29rLAoKCiAgYmZkX3JlbG9jX292ZXJmbG93LAoKCiAgYmZkX3JlbG9jX291dG9mcmFuZ2UsCgoK ICBiZmRfcmVsb2NfY29udGludWUsCgoKICBiZmRfcmVsb2Nfbm90c3VwcG9ydGVkLAoKCiAgYmZk X3JlbG9jX290aGVyLAoKCiAgYmZkX3JlbG9jX3VuZGVmaW5lZCwKCgoKCgogIGJmZF9yZWxvY19k YW5nZXJvdXMKIH0KIGJmZF9yZWxvY19zdGF0dXNfdHlwZTsKCgp0eXBlZGVmIHN0cnVjdCByZWxv Y19jYWNoZV9lbnRyeQp7CgogIHN0cnVjdCBzeW1ib2xfY2FjaGVfZW50cnkgKipzeW1fcHRyX3B0 cjsKCgogIGJmZF9zaXplX3R5cGUgYWRkcmVzczsKCgogIGJmZF92bWEgYWRkZW5kOwoKCiAgcmVs b2NfaG93dG9fdHlwZSAqaG93dG87Cgp9CmFyZWxlbnQ7CgplbnVtIGNvbXBsYWluX292ZXJmbG93 CnsKCiAgY29tcGxhaW5fb3ZlcmZsb3dfZG9udCwKCgoKICBjb21wbGFpbl9vdmVyZmxvd19iaXRm aWVsZCwKCgoKICBjb21wbGFpbl9vdmVyZmxvd19zaWduZWQsCgoKCiAgY29tcGxhaW5fb3ZlcmZs b3dfdW5zaWduZWQKfTsKCnN0cnVjdCByZWxvY19ob3d0b19zdHJ1Y3QKewoKCgoKCgogIHVuc2ln bmVkIGludCB0eXBlOwoKCgogIHVuc2lnbmVkIGludCByaWdodHNoaWZ0OwoKCgoKICBpbnQgc2l6 ZTsKCgoKICB1bnNpZ25lZCBpbnQgYml0c2l6ZTsKCgoKCgogIGJvb2xlYW4gcGNfcmVsYXRpdmU7 CgoKCiAgdW5zaWduZWQgaW50IGJpdHBvczsKCgoKICBlbnVtIGNvbXBsYWluX292ZXJmbG93IGNv bXBsYWluX29uX292ZXJmbG93OwoKCgoKCiAgYmZkX3JlbG9jX3N0YXR1c190eXBlICgqc3BlY2lh bF9mdW5jdGlvbikKICAgIChiZmQgKiwgYXJlbGVudCAqLCBzdHJ1Y3Qgc3ltYm9sX2NhY2hlX2Vu dHJ5ICosIHZvaWQgKiwgYXNlY3Rpb24gKiwgYmZkICosIGNoYXIgKiopOwoKCgogIGNoYXIgKm5h bWU7CiMgMTg3MSAiLi4vYmZkL2JmZC5oIgogIGJvb2xlYW4gcGFydGlhbF9pbnBsYWNlOwojIDE4 ODAgIi4uL2JmZC9iZmQuaCIKICBiZmRfdm1hIHNyY19tYXNrOwoKCgoKCiAgYmZkX3ZtYSBkc3Rf bWFzazsKCgoKCgoKCiAgYm9vbGVhbiBwY3JlbF9vZmZzZXQ7Cn07CiMgMTkyMiAiLi4vYmZkL2Jm ZC5oIgp1bnNpZ25lZCBpbnQKYmZkX2dldF9yZWxvY19zaXplIChyZWxvY19ob3d0b190eXBlICop OwoKdHlwZWRlZiBzdHJ1Y3QgcmVsZW50X2NoYWluCnsKICBhcmVsZW50IHJlbGVudDsKICBzdHJ1 Y3QgcmVsZW50X2NoYWluICpuZXh0Owp9CmFyZWxlbnRfY2hhaW47CgpiZmRfcmVsb2Nfc3RhdHVz X3R5cGUKYmZkX2NoZWNrX292ZXJmbG93IChlbnVtIGNvbXBsYWluX292ZXJmbG93IGhvdywgdW5z aWduZWQgaW50IGJpdHNpemUsIHVuc2lnbmVkIGludCByaWdodHNoaWZ0LCB1bnNpZ25lZCBpbnQg YWRkcnNpemUsIGJmZF92bWEgcmVsb2NhdGlvbik7CgoKCgoKYmZkX3JlbG9jX3N0YXR1c190eXBl CmJmZF9wZXJmb3JtX3JlbG9jYXRpb24gKGJmZCAqYWJmZCwgYXJlbGVudCAqcmVsb2NfZW50cnks IHZvaWQgKiBkYXRhLCBhc2VjdGlvbiAqaW5wdXRfc2VjdGlvbiwgYmZkICpvdXRwdXRfYmZkLCBj aGFyICoqZXJyb3JfbWVzc2FnZSk7CgoKCgoKCmJmZF9yZWxvY19zdGF0dXNfdHlwZQpiZmRfaW5z dGFsbF9yZWxvY2F0aW9uIChiZmQgKmFiZmQsIGFyZWxlbnQgKnJlbG9jX2VudHJ5LCB2b2lkICog ZGF0YSwgYmZkX3ZtYSBkYXRhX3N0YXJ0LCBhc2VjdGlvbiAqaW5wdXRfc2VjdGlvbiwgY2hhciAq KmVycm9yX21lc3NhZ2UpOwoKCgoKCmVudW0gYmZkX3JlbG9jX2NvZGVfcmVhbCB7CiAgX2R1bW15 X2ZpcnN0X2JmZF9yZWxvY19jb2RlX3JlYWwsCgoKCiAgQkZEX1JFTE9DXzY0LAogIEJGRF9SRUxP Q18zMiwKICBCRkRfUkVMT0NfMjYsCiAgQkZEX1JFTE9DXzI0LAogIEJGRF9SRUxPQ18xNiwKICBC RkRfUkVMT0NfMTQsCiAgQkZEX1JFTE9DXzgsCgoKCgoKCiAgQkZEX1JFTE9DXzY0X1BDUkVMLAog IEJGRF9SRUxPQ18zMl9QQ1JFTCwKICBCRkRfUkVMT0NfMjRfUENSRUwsCiAgQkZEX1JFTE9DXzE2 X1BDUkVMLAogIEJGRF9SRUxPQ18xMl9QQ1JFTCwKICBCRkRfUkVMT0NfOF9QQ1JFTCwKCgogIEJG RF9SRUxPQ18zMl9HT1RfUENSRUwsCiAgQkZEX1JFTE9DXzE2X0dPVF9QQ1JFTCwKICBCRkRfUkVM T0NfOF9HT1RfUENSRUwsCiAgQkZEX1JFTE9DXzMyX0dPVE9GRiwKICBCRkRfUkVMT0NfMTZfR09U T0ZGLAogIEJGRF9SRUxPQ19MTzE2X0dPVE9GRiwKICBCRkRfUkVMT0NfSEkxNl9HT1RPRkYsCiAg QkZEX1JFTE9DX0hJMTZfU19HT1RPRkYsCiAgQkZEX1JFTE9DXzhfR09UT0ZGLAogIEJGRF9SRUxP Q182NF9QTFRfUENSRUwsCiAgQkZEX1JFTE9DXzMyX1BMVF9QQ1JFTCwKICBCRkRfUkVMT0NfMjRf UExUX1BDUkVMLAogIEJGRF9SRUxPQ18xNl9QTFRfUENSRUwsCiAgQkZEX1JFTE9DXzhfUExUX1BD UkVMLAogIEJGRF9SRUxPQ182NF9QTFRPRkYsCiAgQkZEX1JFTE9DXzMyX1BMVE9GRiwKICBCRkRf UkVMT0NfMTZfUExUT0ZGLAogIEJGRF9SRUxPQ19MTzE2X1BMVE9GRiwKICBCRkRfUkVMT0NfSEkx Nl9QTFRPRkYsCiAgQkZEX1JFTE9DX0hJMTZfU19QTFRPRkYsCiAgQkZEX1JFTE9DXzhfUExUT0ZG LAoKCiAgQkZEX1JFTE9DXzY4S19HTE9CX0RBVCwKICBCRkRfUkVMT0NfNjhLX0pNUF9TTE9ULAog IEJGRF9SRUxPQ182OEtfUkVMQVRJVkUsCgoKICBCRkRfUkVMT0NfMzJfQkFTRVJFTCwKICBCRkRf UkVMT0NfMTZfQkFTRVJFTCwKICBCRkRfUkVMT0NfTE8xNl9CQVNFUkVMLAogIEJGRF9SRUxPQ19I STE2X0JBU0VSRUwsCiAgQkZEX1JFTE9DX0hJMTZfU19CQVNFUkVMLAogIEJGRF9SRUxPQ184X0JB U0VSRUwsCiAgQkZEX1JFTE9DX1JWQSwKCgogIEJGRF9SRUxPQ184X0ZGbm4sCgoKCgoKCgogIEJG RF9SRUxPQ18zMl9QQ1JFTF9TMiwKICBCRkRfUkVMT0NfMTZfUENSRUxfUzIsCiAgQkZEX1JFTE9D XzIzX1BDUkVMX1MyLAoKCgogIEJGRF9SRUxPQ19ISTIyLAogIEJGRF9SRUxPQ19MTzEwLAoKCgoK CiAgQkZEX1JFTE9DX0dQUkVMMTYsCiAgQkZEX1JFTE9DX0dQUkVMMzIsCgoKICBCRkRfUkVMT0Nf STk2MF9DQUxMSiwKCgoKICBCRkRfUkVMT0NfTk9ORSwKICBCRkRfUkVMT0NfU1BBUkNfV0RJU1Ay MiwKICBCRkRfUkVMT0NfU1BBUkMyMiwKICBCRkRfUkVMT0NfU1BBUkMxMywKICBCRkRfUkVMT0Nf U1BBUkNfR09UMTAsCiAgQkZEX1JFTE9DX1NQQVJDX0dPVDEzLAogIEJGRF9SRUxPQ19TUEFSQ19H T1QyMiwKICBCRkRfUkVMT0NfU1BBUkNfUEMxMCwKICBCRkRfUkVMT0NfU1BBUkNfUEMyMiwKICBC RkRfUkVMT0NfU1BBUkNfV1BMVDMwLAogIEJGRF9SRUxPQ19TUEFSQ19DT1BZLAogIEJGRF9SRUxP Q19TUEFSQ19HTE9CX0RBVCwKICBCRkRfUkVMT0NfU1BBUkNfSk1QX1NMT1QsCiAgQkZEX1JFTE9D X1NQQVJDX1JFTEFUSVZFLAogIEJGRF9SRUxPQ19TUEFSQ19VQTE2LAogIEJGRF9SRUxPQ19TUEFS Q19VQTMyLAogIEJGRF9SRUxPQ19TUEFSQ19VQTY0LAoKCiAgQkZEX1JFTE9DX1NQQVJDX0JBU0Ux MywKICBCRkRfUkVMT0NfU1BBUkNfQkFTRTIyLAoKCgogIEJGRF9SRUxPQ19TUEFSQ18xMCwKICBC RkRfUkVMT0NfU1BBUkNfMTEsCiAgQkZEX1JFTE9DX1NQQVJDX09MTzEwLAogIEJGRF9SRUxPQ19T UEFSQ19ISDIyLAogIEJGRF9SRUxPQ19TUEFSQ19ITTEwLAogIEJGRF9SRUxPQ19TUEFSQ19MTTIy LAogIEJGRF9SRUxPQ19TUEFSQ19QQ19ISDIyLAogIEJGRF9SRUxPQ19TUEFSQ19QQ19ITTEwLAog IEJGRF9SRUxPQ19TUEFSQ19QQ19MTTIyLAogIEJGRF9SRUxPQ19TUEFSQ19XRElTUDE2LAogIEJG RF9SRUxPQ19TUEFSQ19XRElTUDE5LAogIEJGRF9SRUxPQ19TUEFSQ183LAogIEJGRF9SRUxPQ19T UEFSQ182LAogIEJGRF9SRUxPQ19TUEFSQ181LAoKICBCRkRfUkVMT0NfU1BBUkNfUExUMzIsCiAg QkZEX1JFTE9DX1NQQVJDX1BMVDY0LAogIEJGRF9SRUxPQ19TUEFSQ19ISVgyMiwKICBCRkRfUkVM T0NfU1BBUkNfTE9YMTAsCiAgQkZEX1JFTE9DX1NQQVJDX0g0NCwKICBCRkRfUkVMT0NfU1BBUkNf TTQ0LAogIEJGRF9SRUxPQ19TUEFSQ19MNDQsCiAgQkZEX1JFTE9DX1NQQVJDX1JFR0lTVEVSLAoK CiAgQkZEX1JFTE9DX1NQQVJDX1JFVjMyLAoKCgoKCgoKICBCRkRfUkVMT0NfQUxQSEFfR1BESVNQ X0hJMTYsCgoKCgoKICBCRkRfUkVMT0NfQUxQSEFfR1BESVNQX0xPMTYsCgoKCgogIEJGRF9SRUxP Q19BTFBIQV9HUERJU1AsCiMgMjEzOSAiLi4vYmZkL2JmZC5oIgogIEJGRF9SRUxPQ19BTFBIQV9M SVRFUkFMLAogIEJGRF9SRUxPQ19BTFBIQV9FTEZfTElURVJBTCwKICBCRkRfUkVMT0NfQUxQSEFf TElUVVNFLAoKCgoKICBCRkRfUkVMT0NfQUxQSEFfSElOVCwKCgoKICBCRkRfUkVMT0NfQUxQSEFf TElOS0FHRSwKCgoKICBCRkRfUkVMT0NfQUxQSEFfQ09ERUFERFIsCgoKCiAgQkZEX1JFTE9DX0FM UEhBX0dQUkVMX0hJMTYsCiAgQkZEX1JFTE9DX0FMUEhBX0dQUkVMX0xPMTYsCgoKCgogIEJGRF9S RUxPQ19BTFBIQV9CUlNHUCwKCgogIEJGRF9SRUxPQ19BTFBIQV9UTFNHRCwKICBCRkRfUkVMT0Nf QUxQSEFfVExTTERNLAogIEJGRF9SRUxPQ19BTFBIQV9EVFBNT0Q2NCwKICBCRkRfUkVMT0NfQUxQ SEFfR09URFRQUkVMMTYsCiAgQkZEX1JFTE9DX0FMUEhBX0RUUFJFTDY0LAogIEJGRF9SRUxPQ19B TFBIQV9EVFBSRUxfSEkxNiwKICBCRkRfUkVMT0NfQUxQSEFfRFRQUkVMX0xPMTYsCiAgQkZEX1JF TE9DX0FMUEhBX0RUUFJFTDE2LAogIEJGRF9SRUxPQ19BTFBIQV9HT1RUUFJFTDE2LAogIEJGRF9S RUxPQ19BTFBIQV9UUFJFTDY0LAogIEJGRF9SRUxPQ19BTFBIQV9UUFJFTF9ISTE2LAogIEJGRF9S RUxPQ19BTFBIQV9UUFJFTF9MTzE2LAogIEJGRF9SRUxPQ19BTFBIQV9UUFJFTDE2LAoKCgogIEJG RF9SRUxPQ19NSVBTX0pNUCwKCgogIEJGRF9SRUxPQ19NSVBTMTZfSk1QLAoKCiAgQkZEX1JFTE9D X01JUFMxNl9HUFJFTCwKCgogIEJGRF9SRUxPQ19ISTE2LAoKCgoKCiAgQkZEX1JFTE9DX0hJMTZf UywKCgogIEJGRF9SRUxPQ19MTzE2LAoKCiAgQkZEX1JFTE9DX1BDUkVMX0hJMTZfUywKCgogIEJG RF9SRUxPQ19QQ1JFTF9MTzE2LAoKCiAgQkZEX1JFTE9DX01JUFNfTElURVJBTCwKCgogIEJGRF9S RUxPQ19NSVBTX0dPVDE2LAogIEJGRF9SRUxPQ19NSVBTX0NBTEwxNiwKICBCRkRfUkVMT0NfTUlQ U19HT1RfSEkxNiwKICBCRkRfUkVMT0NfTUlQU19HT1RfTE8xNiwKICBCRkRfUkVMT0NfTUlQU19D QUxMX0hJMTYsCiAgQkZEX1JFTE9DX01JUFNfQ0FMTF9MTzE2LAogIEJGRF9SRUxPQ19NSVBTX1NV QiwKICBCRkRfUkVMT0NfTUlQU19HT1RfUEFHRSwKICBCRkRfUkVMT0NfTUlQU19HT1RfT0ZTVCwK ICBCRkRfUkVMT0NfTUlQU19HT1RfRElTUCwKICBCRkRfUkVMT0NfTUlQU19TSElGVDUsCiAgQkZE X1JFTE9DX01JUFNfU0hJRlQ2LAogIEJGRF9SRUxPQ19NSVBTX0lOU0VSVF9BLAogIEJGRF9SRUxP Q19NSVBTX0lOU0VSVF9CLAogIEJGRF9SRUxPQ19NSVBTX0RFTEVURSwKICBCRkRfUkVMT0NfTUlQ U19ISUdIRVNULAogIEJGRF9SRUxPQ19NSVBTX0hJR0hFUiwKICBCRkRfUkVMT0NfTUlQU19TQ05f RElTUCwKICBCRkRfUkVMT0NfTUlQU19SRUwxNiwKICBCRkRfUkVMT0NfTUlQU19SRUxHT1QsCiAg QkZEX1JFTE9DX01JUFNfSkFMUiwKCgogIEJGRF9SRUxPQ19GUlZfTEFCRUwxNiwKICBCRkRfUkVM T0NfRlJWX0xBQkVMMjQsCiAgQkZEX1JFTE9DX0ZSVl9MTzE2LAogIEJGRF9SRUxPQ19GUlZfSEkx NiwKICBCRkRfUkVMT0NfRlJWX0dQUkVMMTIsCiAgQkZEX1JFTE9DX0ZSVl9HUFJFTFUxMiwKICBC RkRfUkVMT0NfRlJWX0dQUkVMMzIsCiAgQkZEX1JFTE9DX0ZSVl9HUFJFTEhJLAogIEJGRF9SRUxP Q19GUlZfR1BSRUxMTywKCgoKICBCRkRfUkVMT0NfMzg2X0dPVDMyLAogIEJGRF9SRUxPQ18zODZf UExUMzIsCiAgQkZEX1JFTE9DXzM4Nl9DT1BZLAogIEJGRF9SRUxPQ18zODZfR0xPQl9EQVQsCiAg QkZEX1JFTE9DXzM4Nl9KVU1QX1NMT1QsCiAgQkZEX1JFTE9DXzM4Nl9SRUxBVElWRSwKICBCRkRf UkVMT0NfMzg2X0dPVE9GRiwKICBCRkRfUkVMT0NfMzg2X0dPVFBDLAogIEJGRF9SRUxPQ18zODZf VExTX0xFLAogIEJGRF9SRUxPQ18zODZfVExTX0dELAogIEJGRF9SRUxPQ18zODZfVExTX0xETSwK ICBCRkRfUkVMT0NfMzg2X1RMU19MRE9fMzIsCiAgQkZEX1JFTE9DXzM4Nl9UTFNfSUVfMzIsCiAg QkZEX1JFTE9DXzM4Nl9UTFNfTEVfMzIsCiAgQkZEX1JFTE9DXzM4Nl9UTFNfRFRQTU9EMzIsCiAg QkZEX1JFTE9DXzM4Nl9UTFNfRFRQT0ZGMzIsCiAgQkZEX1JFTE9DXzM4Nl9UTFNfVFBPRkYzMiwK CgogIEJGRF9SRUxPQ19YODZfNjRfR09UMzIsCiAgQkZEX1JFTE9DX1g4Nl82NF9QTFQzMiwKICBC RkRfUkVMT0NfWDg2XzY0X0NPUFksCiAgQkZEX1JFTE9DX1g4Nl82NF9HTE9CX0RBVCwKICBCRkRf UkVMT0NfWDg2XzY0X0pVTVBfU0xPVCwKICBCRkRfUkVMT0NfWDg2XzY0X1JFTEFUSVZFLAogIEJG RF9SRUxPQ19YODZfNjRfR09UUENSRUwsCiAgQkZEX1JFTE9DX1g4Nl82NF8zMlMsCgoKICBCRkRf UkVMT0NfTlMzMktfSU1NXzgsCiAgQkZEX1JFTE9DX05TMzJLX0lNTV8xNiwKICBCRkRfUkVMT0Nf TlMzMktfSU1NXzMyLAogIEJGRF9SRUxPQ19OUzMyS19JTU1fOF9QQ1JFTCwKICBCRkRfUkVMT0Nf TlMzMktfSU1NXzE2X1BDUkVMLAogIEJGRF9SRUxPQ19OUzMyS19JTU1fMzJfUENSRUwsCiAgQkZE X1JFTE9DX05TMzJLX0RJU1BfOCwKICBCRkRfUkVMT0NfTlMzMktfRElTUF8xNiwKICBCRkRfUkVM T0NfTlMzMktfRElTUF8zMiwKICBCRkRfUkVMT0NfTlMzMktfRElTUF84X1BDUkVMLAogIEJGRF9S RUxPQ19OUzMyS19ESVNQXzE2X1BDUkVMLAogIEJGRF9SRUxPQ19OUzMyS19ESVNQXzMyX1BDUkVM LAoKCiAgQkZEX1JFTE9DX1BEUDExX0RJU1BfOF9QQ1JFTCwKICBCRkRfUkVMT0NfUERQMTFfRElT UF82X1BDUkVMLAoKCiAgQkZEX1JFTE9DX1BKX0NPREVfSEkxNiwKICBCRkRfUkVMT0NfUEpfQ09E RV9MTzE2LAogIEJGRF9SRUxPQ19QSl9DT0RFX0RJUjE2LAogIEJGRF9SRUxPQ19QSl9DT0RFX0RJ UjMyLAogIEJGRF9SRUxPQ19QSl9DT0RFX1JFTDE2LAogIEJGRF9SRUxPQ19QSl9DT0RFX1JFTDMy LAoKCiAgQkZEX1JFTE9DX1BQQ19CMjYsCiAgQkZEX1JFTE9DX1BQQ19CQTI2LAogIEJGRF9SRUxP Q19QUENfVE9DMTYsCiAgQkZEX1JFTE9DX1BQQ19CMTYsCiAgQkZEX1JFTE9DX1BQQ19CMTZfQlJU QUtFTiwKICBCRkRfUkVMT0NfUFBDX0IxNl9CUk5UQUtFTiwKICBCRkRfUkVMT0NfUFBDX0JBMTYs CiAgQkZEX1JFTE9DX1BQQ19CQTE2X0JSVEFLRU4sCiAgQkZEX1JFTE9DX1BQQ19CQTE2X0JSTlRB S0VOLAogIEJGRF9SRUxPQ19QUENfQ09QWSwKICBCRkRfUkVMT0NfUFBDX0dMT0JfREFULAogIEJG RF9SRUxPQ19QUENfSk1QX1NMT1QsCiAgQkZEX1JFTE9DX1BQQ19SRUxBVElWRSwKICBCRkRfUkVM T0NfUFBDX0xPQ0FMMjRQQywKICBCRkRfUkVMT0NfUFBDX0VNQl9OQUREUjMyLAogIEJGRF9SRUxP Q19QUENfRU1CX05BRERSMTYsCiAgQkZEX1JFTE9DX1BQQ19FTUJfTkFERFIxNl9MTywKICBCRkRf UkVMT0NfUFBDX0VNQl9OQUREUjE2X0hJLAogIEJGRF9SRUxPQ19QUENfRU1CX05BRERSMTZfSEEs CiAgQkZEX1JFTE9DX1BQQ19FTUJfU0RBSTE2LAogIEJGRF9SRUxPQ19QUENfRU1CX1NEQTJJMTYs CiAgQkZEX1JFTE9DX1BQQ19FTUJfU0RBMlJFTCwKICBCRkRfUkVMT0NfUFBDX0VNQl9TREEyMSwK ICBCRkRfUkVMT0NfUFBDX0VNQl9NUktSRUYsCiAgQkZEX1JFTE9DX1BQQ19FTUJfUkVMU0VDMTYs CiAgQkZEX1JFTE9DX1BQQ19FTUJfUkVMU1RfTE8sCiAgQkZEX1JFTE9DX1BQQ19FTUJfUkVMU1Rf SEksCiAgQkZEX1JFTE9DX1BQQ19FTUJfUkVMU1RfSEEsCiAgQkZEX1JFTE9DX1BQQ19FTUJfQklU X0ZMRCwKICBCRkRfUkVMT0NfUFBDX0VNQl9SRUxTREEsCiAgQkZEX1JFTE9DX1BQQzY0X0hJR0hF UiwKICBCRkRfUkVMT0NfUFBDNjRfSElHSEVSX1MsCiAgQkZEX1JFTE9DX1BQQzY0X0hJR0hFU1Qs CiAgQkZEX1JFTE9DX1BQQzY0X0hJR0hFU1RfUywKICBCRkRfUkVMT0NfUFBDNjRfVE9DMTZfTE8s CiAgQkZEX1JFTE9DX1BQQzY0X1RPQzE2X0hJLAogIEJGRF9SRUxPQ19QUEM2NF9UT0MxNl9IQSwK ICBCRkRfUkVMT0NfUFBDNjRfVE9DLAogIEJGRF9SRUxPQ19QUEM2NF9QTFRHT1QxNiwKICBCRkRf UkVMT0NfUFBDNjRfUExUR09UMTZfTE8sCiAgQkZEX1JFTE9DX1BQQzY0X1BMVEdPVDE2X0hJLAog IEJGRF9SRUxPQ19QUEM2NF9QTFRHT1QxNl9IQSwKICBCRkRfUkVMT0NfUFBDNjRfQUREUjE2X0RT LAogIEJGRF9SRUxPQ19QUEM2NF9BRERSMTZfTE9fRFMsCiAgQkZEX1JFTE9DX1BQQzY0X0dPVDE2 X0RTLAogIEJGRF9SRUxPQ19QUEM2NF9HT1QxNl9MT19EUywKICBCRkRfUkVMT0NfUFBDNjRfUExU MTZfTE9fRFMsCiAgQkZEX1JFTE9DX1BQQzY0X1NFQ1RPRkZfRFMsCiAgQkZEX1JFTE9DX1BQQzY0 X1NFQ1RPRkZfTE9fRFMsCiAgQkZEX1JFTE9DX1BQQzY0X1RPQzE2X0RTLAogIEJGRF9SRUxPQ19Q UEM2NF9UT0MxNl9MT19EUywKICBCRkRfUkVMT0NfUFBDNjRfUExUR09UMTZfRFMsCiAgQkZEX1JF TE9DX1BQQzY0X1BMVEdPVDE2X0xPX0RTLAoKCiAgQkZEX1JFTE9DX0kzNzBfRDEyLAoKCgoKICBC RkRfUkVMT0NfQ1RPUiwKCgoKICBCRkRfUkVMT0NfQVJNX1BDUkVMX0JSQU5DSCwKCgoKCiAgQkZE X1JFTE9DX0FSTV9QQ1JFTF9CTFgsCgoKCgogIEJGRF9SRUxPQ19USFVNQl9QQ1JFTF9CTFgsCgoK CiAgQkZEX1JFTE9DX0FSTV9JTU1FRElBVEUsCiAgQkZEX1JFTE9DX0FSTV9BRFJMX0lNTUVESUFU RSwKICBCRkRfUkVMT0NfQVJNX09GRlNFVF9JTU0sCiAgQkZEX1JFTE9DX0FSTV9TSElGVF9JTU0s CiAgQkZEX1JFTE9DX0FSTV9TV0ksCiAgQkZEX1JFTE9DX0FSTV9NVUxUSSwKICBCRkRfUkVMT0Nf QVJNX0NQX09GRl9JTU0sCiAgQkZEX1JFTE9DX0FSTV9BRFJfSU1NLAogIEJGRF9SRUxPQ19BUk1f TERSX0lNTSwKICBCRkRfUkVMT0NfQVJNX0xJVEVSQUwsCiAgQkZEX1JFTE9DX0FSTV9JTl9QT09M LAogIEJGRF9SRUxPQ19BUk1fT0ZGU0VUX0lNTTgsCiAgQkZEX1JFTE9DX0FSTV9IV0xJVEVSQUws CiAgQkZEX1JFTE9DX0FSTV9USFVNQl9BREQsCiAgQkZEX1JFTE9DX0FSTV9USFVNQl9JTU0sCiAg QkZEX1JFTE9DX0FSTV9USFVNQl9TSElGVCwKICBCRkRfUkVMT0NfQVJNX1RIVU1CX09GRlNFVCwK ICBCRkRfUkVMT0NfQVJNX0dPVDEyLAogIEJGRF9SRUxPQ19BUk1fR09UMzIsCiAgQkZEX1JFTE9D X0FSTV9KVU1QX1NMT1QsCiAgQkZEX1JFTE9DX0FSTV9DT1BZLAogIEJGRF9SRUxPQ19BUk1fR0xP Ql9EQVQsCiAgQkZEX1JFTE9DX0FSTV9QTFQzMiwKICBCRkRfUkVMT0NfQVJNX1JFTEFUSVZFLAog IEJGRF9SRUxPQ19BUk1fR09UT0ZGLAogIEJGRF9SRUxPQ19BUk1fR09UUEMsCgoKICBCRkRfUkVM T0NfU0hfUENESVNQOEJZMiwKICBCRkRfUkVMT0NfU0hfUENESVNQMTJCWTIsCiAgQkZEX1JFTE9D X1NIX0lNTTQsCiAgQkZEX1JFTE9DX1NIX0lNTTRCWTIsCiAgQkZEX1JFTE9DX1NIX0lNTTRCWTQs CiAgQkZEX1JFTE9DX1NIX0lNTTgsCiAgQkZEX1JFTE9DX1NIX0lNTThCWTIsCiAgQkZEX1JFTE9D X1NIX0lNTThCWTQsCiAgQkZEX1JFTE9DX1NIX1BDUkVMSU1NOEJZMiwKICBCRkRfUkVMT0NfU0hf UENSRUxJTU04Qlk0LAogIEJGRF9SRUxPQ19TSF9TV0lUQ0gxNiwKICBCRkRfUkVMT0NfU0hfU1dJ VENIMzIsCiAgQkZEX1JFTE9DX1NIX1VTRVMsCiAgQkZEX1JFTE9DX1NIX0NPVU5ULAogIEJGRF9S RUxPQ19TSF9BTElHTiwKICBCRkRfUkVMT0NfU0hfQ09ERSwKICBCRkRfUkVMT0NfU0hfREFUQSwK ICBCRkRfUkVMT0NfU0hfTEFCRUwsCiAgQkZEX1JFTE9DX1NIX0xPT1BfU1RBUlQsCiAgQkZEX1JF TE9DX1NIX0xPT1BfRU5ELAogIEJGRF9SRUxPQ19TSF9DT1BZLAogIEJGRF9SRUxPQ19TSF9HTE9C X0RBVCwKICBCRkRfUkVMT0NfU0hfSk1QX1NMT1QsCiAgQkZEX1JFTE9DX1NIX1JFTEFUSVZFLAog IEJGRF9SRUxPQ19TSF9HT1RQQywKICBCRkRfUkVMT0NfU0hfR09UX0xPVzE2LAogIEJGRF9SRUxP Q19TSF9HT1RfTUVETE9XMTYsCiAgQkZEX1JFTE9DX1NIX0dPVF9NRURISTE2LAogIEJGRF9SRUxP Q19TSF9HT1RfSEkxNiwKICBCRkRfUkVMT0NfU0hfR09UUExUX0xPVzE2LAogIEJGRF9SRUxPQ19T SF9HT1RQTFRfTUVETE9XMTYsCiAgQkZEX1JFTE9DX1NIX0dPVFBMVF9NRURISTE2LAogIEJGRF9S RUxPQ19TSF9HT1RQTFRfSEkxNiwKICBCRkRfUkVMT0NfU0hfUExUX0xPVzE2LAogIEJGRF9SRUxP Q19TSF9QTFRfTUVETE9XMTYsCiAgQkZEX1JFTE9DX1NIX1BMVF9NRURISTE2LAogIEJGRF9SRUxP Q19TSF9QTFRfSEkxNiwKICBCRkRfUkVMT0NfU0hfR09UT0ZGX0xPVzE2LAogIEJGRF9SRUxPQ19T SF9HT1RPRkZfTUVETE9XMTYsCiAgQkZEX1JFTE9DX1NIX0dPVE9GRl9NRURISTE2LAogIEJGRF9S RUxPQ19TSF9HT1RPRkZfSEkxNiwKICBCRkRfUkVMT0NfU0hfR09UUENfTE9XMTYsCiAgQkZEX1JF TE9DX1NIX0dPVFBDX01FRExPVzE2LAogIEJGRF9SRUxPQ19TSF9HT1RQQ19NRURISTE2LAogIEJG RF9SRUxPQ19TSF9HT1RQQ19ISTE2LAogIEJGRF9SRUxPQ19TSF9DT1BZNjQsCiAgQkZEX1JFTE9D X1NIX0dMT0JfREFUNjQsCiAgQkZEX1JFTE9DX1NIX0pNUF9TTE9UNjQsCiAgQkZEX1JFTE9DX1NI X1JFTEFUSVZFNjQsCiAgQkZEX1JFTE9DX1NIX0dPVDEwQlk0LAogIEJGRF9SRUxPQ19TSF9HT1Qx MEJZOCwKICBCRkRfUkVMT0NfU0hfR09UUExUMTBCWTQsCiAgQkZEX1JFTE9DX1NIX0dPVFBMVDEw Qlk4LAogIEJGRF9SRUxPQ19TSF9HT1RQTFQzMiwKICBCRkRfUkVMT0NfU0hfU0hNRURJQV9DT0RF LAogIEJGRF9SRUxPQ19TSF9JTU1VNSwKICBCRkRfUkVMT0NfU0hfSU1NUzYsCiAgQkZEX1JFTE9D X1NIX0lNTVM2QlkzMiwKICBCRkRfUkVMT0NfU0hfSU1NVTYsCiAgQkZEX1JFTE9DX1NIX0lNTVMx MCwKICBCRkRfUkVMT0NfU0hfSU1NUzEwQlkyLAogIEJGRF9SRUxPQ19TSF9JTU1TMTBCWTQsCiAg QkZEX1JFTE9DX1NIX0lNTVMxMEJZOCwKICBCRkRfUkVMT0NfU0hfSU1NUzE2LAogIEJGRF9SRUxP Q19TSF9JTU1VMTYsCiAgQkZEX1JFTE9DX1NIX0lNTV9MT1cxNiwKICBCRkRfUkVMT0NfU0hfSU1N X0xPVzE2X1BDUkVMLAogIEJGRF9SRUxPQ19TSF9JTU1fTUVETE9XMTYsCiAgQkZEX1JFTE9DX1NI X0lNTV9NRURMT1cxNl9QQ1JFTCwKICBCRkRfUkVMT0NfU0hfSU1NX01FREhJMTYsCiAgQkZEX1JF TE9DX1NIX0lNTV9NRURISTE2X1BDUkVMLAogIEJGRF9SRUxPQ19TSF9JTU1fSEkxNiwKICBCRkRf UkVMT0NfU0hfSU1NX0hJMTZfUENSRUwsCiAgQkZEX1JFTE9DX1NIX1BUXzE2LAoKCgogIEJGRF9S RUxPQ19USFVNQl9QQ1JFTF9CUkFOQ0g5LAogIEJGRF9SRUxPQ19USFVNQl9QQ1JFTF9CUkFOQ0gx MiwKICBCRkRfUkVMT0NfVEhVTUJfUENSRUxfQlJBTkNIMjMsCgoKCgoKICBCRkRfUkVMT0NfQVJD X0IyMl9QQ1JFTCwKCgoKCiAgQkZEX1JFTE9DX0FSQ19CMjYsCgoKCgogIEJGRF9SRUxPQ19EMTBW XzEwX1BDUkVMX1IsCgoKCgoKCiAgQkZEX1JFTE9DX0QxMFZfMTBfUENSRUxfTCwKCgoKICBCRkRf UkVMT0NfRDEwVl8xOCwKCgoKICBCRkRfUkVMT0NfRDEwVl8xOF9QQ1JFTCwKCgoKICBCRkRfUkVM T0NfRDMwVl82LAoKCgogIEJGRF9SRUxPQ19EMzBWXzlfUENSRUwsCgoKCgoKICBCRkRfUkVMT0Nf RDMwVl85X1BDUkVMX1IsCgoKCiAgQkZEX1JFTE9DX0QzMFZfMTUsCgoKCiAgQkZEX1JFTE9DX0Qz MFZfMTVfUENSRUwsCgoKCgoKICBCRkRfUkVMT0NfRDMwVl8xNV9QQ1JFTF9SLAoKCgogIEJGRF9S RUxPQ19EMzBWXzIxLAoKCgogIEJGRF9SRUxPQ19EMzBWXzIxX1BDUkVMLAoKCgoKCiAgQkZEX1JF TE9DX0QzMFZfMjFfUENSRUxfUiwKCgogIEJGRF9SRUxPQ19EMzBWXzMyLAoKCiAgQkZEX1JFTE9D X0QzMFZfMzJfUENSRUwsCgoKICBCRkRfUkVMT0NfRExYX0hJMTZfUywKCgogIEJGRF9SRUxPQ19E TFhfTE8xNiwKCgogIEJGRF9SRUxPQ19ETFhfSk1QMjYsCgoKCiAgQkZEX1JFTE9DX00zMlJfMjQs CgoKICBCRkRfUkVMT0NfTTMyUl8xMF9QQ1JFTCwKCgogIEJGRF9SRUxPQ19NMzJSXzE4X1BDUkVM LAoKCiAgQkZEX1JFTE9DX00zMlJfMjZfUENSRUwsCgoKCiAgQkZEX1JFTE9DX00zMlJfSEkxNl9V TE8sCgoKCiAgQkZEX1JFTE9DX00zMlJfSEkxNl9TTE8sCgoKICBCRkRfUkVMT0NfTTMyUl9MTzE2 LAoKCgogIEJGRF9SRUxPQ19NMzJSX1NEQTE2LAoKCiAgQkZEX1JFTE9DX1Y4NTBfOV9QQ1JFTCwK CgogIEJGRF9SRUxPQ19WODUwXzIyX1BDUkVMLAoKCiAgQkZEX1JFTE9DX1Y4NTBfU0RBXzE2XzE2 X09GRlNFVCwKCgoKICBCRkRfUkVMT0NfVjg1MF9TREFfMTVfMTZfT0ZGU0VULAoKCiAgQkZEX1JF TE9DX1Y4NTBfWkRBXzE2XzE2X09GRlNFVCwKCgoKICBCRkRfUkVMT0NfVjg1MF9aREFfMTVfMTZf T0ZGU0VULAoKCgogIEJGRF9SRUxPQ19WODUwX1REQV82XzhfT0ZGU0VULAoKCgogIEJGRF9SRUxP Q19WODUwX1REQV83XzhfT0ZGU0VULAoKCiAgQkZEX1JFTE9DX1Y4NTBfVERBXzdfN19PRkZTRVQs CgoKICBCRkRfUkVMT0NfVjg1MF9UREFfMTZfMTZfT0ZGU0VULAoKCgogIEJGRF9SRUxPQ19WODUw X1REQV80XzVfT0ZGU0VULAoKCiAgQkZEX1JFTE9DX1Y4NTBfVERBXzRfNF9PRkZTRVQsCgoKCiAg QkZEX1JFTE9DX1Y4NTBfU0RBXzE2XzE2X1NQTElUX09GRlNFVCwKCgoKICBCRkRfUkVMT0NfVjg1 MF9aREFfMTZfMTZfU1BMSVRfT0ZGU0VULAoKCiAgQkZEX1JFTE9DX1Y4NTBfQ0FMTFRfNl83X09G RlNFVCwKCgogIEJGRF9SRUxPQ19WODUwX0NBTExUXzE2XzE2X09GRlNFVCwKCgoKCiAgQkZEX1JF TE9DX01OMTAzMDBfMzJfUENSRUwsCgoKCiAgQkZEX1JFTE9DX01OMTAzMDBfMTZfUENSRUwsCgoK CgogIEJGRF9SRUxPQ19USUMzMF9MRFAsCgoKCgogIEJGRF9SRUxPQ19USUM1NFhfUEFSVExTNywK CgoKCiAgQkZEX1JFTE9DX1RJQzU0WF9QQVJUTVM5LAoKCiAgQkZEX1JFTE9DX1RJQzU0WF8yMywK CgoKCiAgQkZEX1JFTE9DX1RJQzU0WF8xNl9PRl8yMywKCgoKCiAgQkZEX1JFTE9DX1RJQzU0WF9N UzdfT0ZfMjMsCgoKICBCRkRfUkVMT0NfRlIzMF80OCwKCgoKICBCRkRfUkVMT0NfRlIzMF8yMCwK CgoKICBCRkRfUkVMT0NfRlIzMF82X0lOXzQsCgoKCiAgQkZEX1JFTE9DX0ZSMzBfOF9JTl84LAoK CgogIEJGRF9SRUxPQ19GUjMwXzlfSU5fOCwKCgoKICBCRkRfUkVMT0NfRlIzMF8xMF9JTl84LAoK CgogIEJGRF9SRUxPQ19GUjMwXzlfUENSRUwsCgoKCiAgQkZEX1JFTE9DX0ZSMzBfMTJfUENSRUws CgoKICBCRkRfUkVMT0NfTUNPUkVfUENSRUxfSU1NOEJZNCwKICBCRkRfUkVMT0NfTUNPUkVfUENS RUxfSU1NMTFCWTIsCiAgQkZEX1JFTE9DX01DT1JFX1BDUkVMX0lNTTRCWTIsCiAgQkZEX1JFTE9D X01DT1JFX1BDUkVMXzMyLAogIEJGRF9SRUxPQ19NQ09SRV9QQ1JFTF9KU1JfSU1NMTFCWTIsCiAg QkZEX1JFTE9DX01DT1JFX1JWQSwKCgogIEJGRF9SRUxPQ19NTUlYX0dFVEEsCiAgQkZEX1JFTE9D X01NSVhfR0VUQV8xLAogIEJGRF9SRUxPQ19NTUlYX0dFVEFfMiwKICBCRkRfUkVMT0NfTU1JWF9H RVRBXzMsCgoKICBCRkRfUkVMT0NfTU1JWF9DQlJBTkNILAogIEJGRF9SRUxPQ19NTUlYX0NCUkFO Q0hfSiwKICBCRkRfUkVMT0NfTU1JWF9DQlJBTkNIXzEsCiAgQkZEX1JFTE9DX01NSVhfQ0JSQU5D SF8yLAogIEJGRF9SRUxPQ19NTUlYX0NCUkFOQ0hfMywKCgogIEJGRF9SRUxPQ19NTUlYX1BVU0hK LAogIEJGRF9SRUxPQ19NTUlYX1BVU0hKXzEsCiAgQkZEX1JFTE9DX01NSVhfUFVTSEpfMiwKICBC RkRfUkVMT0NfTU1JWF9QVVNISl8zLAoKCiAgQkZEX1JFTE9DX01NSVhfSk1QLAogIEJGRF9SRUxP Q19NTUlYX0pNUF8xLAogIEJGRF9SRUxPQ19NTUlYX0pNUF8yLAogIEJGRF9SRUxPQ19NTUlYX0pN UF8zLAoKCgogIEJGRF9SRUxPQ19NTUlYX0FERFIxOSwKCgogIEJGRF9SRUxPQ19NTUlYX0FERFIy NywKCgoKICBCRkRfUkVMT0NfTU1JWF9SRUdfT1JfQllURSwKCgoKICBCRkRfUkVMT0NfTU1JWF9S RUcsCgoKCiAgQkZEX1JFTE9DX01NSVhfQkFTRV9QTFVTX09GRlNFVCwKCgoKICBCRkRfUkVMT0Nf TU1JWF9MT0NBTCwKCgoKICBCRkRfUkVMT0NfQVZSXzdfUENSRUwsCgoKCiAgQkZEX1JFTE9DX0FW Ul8xM19QQ1JFTCwKCgoKICBCRkRfUkVMT0NfQVZSXzE2X1BNLAoKCgogIEJGRF9SRUxPQ19BVlJf TE84X0xESSwKCgoKICBCRkRfUkVMT0NfQVZSX0hJOF9MREksCgoKCiAgQkZEX1JFTE9DX0FWUl9I SDhfTERJLAoKCgogIEJGRF9SRUxPQ19BVlJfTE84X0xESV9ORUcsCgoKCgogIEJGRF9SRUxPQ19B VlJfSEk4X0xESV9ORUcsCgoKCgogIEJGRF9SRUxPQ19BVlJfSEg4X0xESV9ORUcsCgoKCiAgQkZE X1JFTE9DX0FWUl9MTzhfTERJX1BNLAoKCgogIEJGRF9SRUxPQ19BVlJfSEk4X0xESV9QTSwKCgoK ICBCRkRfUkVMT0NfQVZSX0hIOF9MRElfUE0sCgoKCiAgQkZEX1JFTE9DX0FWUl9MTzhfTERJX1BN X05FRywKCgoKCiAgQkZEX1JFTE9DX0FWUl9ISThfTERJX1BNX05FRywKCgoKCiAgQkZEX1JFTE9D X0FWUl9ISDhfTERJX1BNX05FRywKCgoKICBCRkRfUkVMT0NfQVZSX0NBTEwsCgoKICBCRkRfUkVM T0NfMzkwXzEyLAoKCiAgQkZEX1JFTE9DXzM5MF9HT1QxMiwKCgogIEJGRF9SRUxPQ18zOTBfUExU MzIsCgoKICBCRkRfUkVMT0NfMzkwX0NPUFksCgoKICBCRkRfUkVMT0NfMzkwX0dMT0JfREFULAoK CiAgQkZEX1JFTE9DXzM5MF9KTVBfU0xPVCwKCgogIEJGRF9SRUxPQ18zOTBfUkVMQVRJVkUsCgoK ICBCRkRfUkVMT0NfMzkwX0dPVFBDLAoKCiAgQkZEX1JFTE9DXzM5MF9HT1QxNiwKCgogIEJGRF9S RUxPQ18zOTBfUEMxNkRCTCwKCgogIEJGRF9SRUxPQ18zOTBfUExUMTZEQkwsCgoKICBCRkRfUkVM T0NfMzkwX1BDMzJEQkwsCgoKICBCRkRfUkVMT0NfMzkwX1BMVDMyREJMLAoKCiAgQkZEX1JFTE9D XzM5MF9HT1RQQ0RCTCwKCgogIEJGRF9SRUxPQ18zOTBfR09UNjQsCgoKICBCRkRfUkVMT0NfMzkw X1BMVDY0LAoKCiAgQkZEX1JFTE9DXzM5MF9HT1RFTlQsCiMgMjkyMSAiLi4vYmZkL2JmZC5oIgog IEJGRF9SRUxPQ19WVEFCTEVfSU5IRVJJVCwKICBCRkRfUkVMT0NfVlRBQkxFX0VOVFJZLAoKCiAg QkZEX1JFTE9DX0lBNjRfSU1NMTQsCiAgQkZEX1JFTE9DX0lBNjRfSU1NMjIsCiAgQkZEX1JFTE9D X0lBNjRfSU1NNjQsCiAgQkZEX1JFTE9DX0lBNjRfRElSMzJNU0IsCiAgQkZEX1JFTE9DX0lBNjRf RElSMzJMU0IsCiAgQkZEX1JFTE9DX0lBNjRfRElSNjRNU0IsCiAgQkZEX1JFTE9DX0lBNjRfRElS NjRMU0IsCiAgQkZEX1JFTE9DX0lBNjRfR1BSRUwyMiwKICBCRkRfUkVMT0NfSUE2NF9HUFJFTDY0 SSwKICBCRkRfUkVMT0NfSUE2NF9HUFJFTDMyTVNCLAogIEJGRF9SRUxPQ19JQTY0X0dQUkVMMzJM U0IsCiAgQkZEX1JFTE9DX0lBNjRfR1BSRUw2NE1TQiwKICBCRkRfUkVMT0NfSUE2NF9HUFJFTDY0 TFNCLAogIEJGRF9SRUxPQ19JQTY0X0xUT0ZGMjIsCiAgQkZEX1JFTE9DX0lBNjRfTFRPRkY2NEks CiAgQkZEX1JFTE9DX0lBNjRfUExUT0ZGMjIsCiAgQkZEX1JFTE9DX0lBNjRfUExUT0ZGNjRJLAog IEJGRF9SRUxPQ19JQTY0X1BMVE9GRjY0TVNCLAogIEJGRF9SRUxPQ19JQTY0X1BMVE9GRjY0TFNC LAogIEJGRF9SRUxPQ19JQTY0X0ZQVFI2NEksCiAgQkZEX1JFTE9DX0lBNjRfRlBUUjMyTVNCLAog IEJGRF9SRUxPQ19JQTY0X0ZQVFIzMkxTQiwKICBCRkRfUkVMT0NfSUE2NF9GUFRSNjRNU0IsCiAg QkZEX1JFTE9DX0lBNjRfRlBUUjY0TFNCLAogIEJGRF9SRUxPQ19JQTY0X1BDUkVMMjFCLAogIEJG RF9SRUxPQ19JQTY0X1BDUkVMMjFCSSwKICBCRkRfUkVMT0NfSUE2NF9QQ1JFTDIxTSwKICBCRkRf UkVMT0NfSUE2NF9QQ1JFTDIxRiwKICBCRkRfUkVMT0NfSUE2NF9QQ1JFTDIyLAogIEJGRF9SRUxP Q19JQTY0X1BDUkVMNjBCLAogIEJGRF9SRUxPQ19JQTY0X1BDUkVMNjRJLAogIEJGRF9SRUxPQ19J QTY0X1BDUkVMMzJNU0IsCiAgQkZEX1JFTE9DX0lBNjRfUENSRUwzMkxTQiwKICBCRkRfUkVMT0Nf SUE2NF9QQ1JFTDY0TVNCLAogIEJGRF9SRUxPQ19JQTY0X1BDUkVMNjRMU0IsCiAgQkZEX1JFTE9D X0lBNjRfTFRPRkZfRlBUUjIyLAogIEJGRF9SRUxPQ19JQTY0X0xUT0ZGX0ZQVFI2NEksCiAgQkZE X1JFTE9DX0lBNjRfTFRPRkZfRlBUUjMyTVNCLAogIEJGRF9SRUxPQ19JQTY0X0xUT0ZGX0ZQVFIz MkxTQiwKICBCRkRfUkVMT0NfSUE2NF9MVE9GRl9GUFRSNjRNU0IsCiAgQkZEX1JFTE9DX0lBNjRf TFRPRkZfRlBUUjY0TFNCLAogIEJGRF9SRUxPQ19JQTY0X1NFR1JFTDMyTVNCLAogIEJGRF9SRUxP Q19JQTY0X1NFR1JFTDMyTFNCLAogIEJGRF9SRUxPQ19JQTY0X1NFR1JFTDY0TVNCLAogIEJGRF9S RUxPQ19JQTY0X1NFR1JFTDY0TFNCLAogIEJGRF9SRUxPQ19JQTY0X1NFQ1JFTDMyTVNCLAogIEJG RF9SRUxPQ19JQTY0X1NFQ1JFTDMyTFNCLAogIEJGRF9SRUxPQ19JQTY0X1NFQ1JFTDY0TVNCLAog IEJGRF9SRUxPQ19JQTY0X1NFQ1JFTDY0TFNCLAogIEJGRF9SRUxPQ19JQTY0X1JFTDMyTVNCLAog IEJGRF9SRUxPQ19JQTY0X1JFTDMyTFNCLAogIEJGRF9SRUxPQ19JQTY0X1JFTDY0TVNCLAogIEJG RF9SRUxPQ19JQTY0X1JFTDY0TFNCLAogIEJGRF9SRUxPQ19JQTY0X0xUVjMyTVNCLAogIEJGRF9S RUxPQ19JQTY0X0xUVjMyTFNCLAogIEJGRF9SRUxPQ19JQTY0X0xUVjY0TVNCLAogIEJGRF9SRUxP Q19JQTY0X0xUVjY0TFNCLAogIEJGRF9SRUxPQ19JQTY0X0lQTFRNU0IsCiAgQkZEX1JFTE9DX0lB NjRfSVBMVExTQiwKICBCRkRfUkVMT0NfSUE2NF9DT1BZLAogIEJGRF9SRUxPQ19JQTY0X0xUT0ZG MjJYLAogIEJGRF9SRUxPQ19JQTY0X0xEWE1PViwKICBCRkRfUkVMT0NfSUE2NF9UUFJFTDE0LAog IEJGRF9SRUxPQ19JQTY0X1RQUkVMMjIsCiAgQkZEX1JFTE9DX0lBNjRfVFBSRUw2NEksCiAgQkZE X1JFTE9DX0lBNjRfVFBSRUw2NE1TQiwKICBCRkRfUkVMT0NfSUE2NF9UUFJFTDY0TFNCLAogIEJG RF9SRUxPQ19JQTY0X0xUT0ZGX1RQUkVMMjIsCiAgQkZEX1JFTE9DX0lBNjRfRFRQTU9ENjRNU0Is CiAgQkZEX1JFTE9DX0lBNjRfRFRQTU9ENjRMU0IsCiAgQkZEX1JFTE9DX0lBNjRfTFRPRkZfRFRQ TU9EMjIsCiAgQkZEX1JFTE9DX0lBNjRfRFRQUkVMMTQsCiAgQkZEX1JFTE9DX0lBNjRfRFRQUkVM MjIsCiAgQkZEX1JFTE9DX0lBNjRfRFRQUkVMNjRJLAogIEJGRF9SRUxPQ19JQTY0X0RUUFJFTDMy TVNCLAogIEJGRF9SRUxPQ19JQTY0X0RUUFJFTDMyTFNCLAogIEJGRF9SRUxPQ19JQTY0X0RUUFJF TDY0TVNCLAogIEJGRF9SRUxPQ19JQTY0X0RUUFJFTDY0TFNCLAogIEJGRF9SRUxPQ19JQTY0X0xU T0ZGX0RUUFJFTDIyLAoKCgogIEJGRF9SRUxPQ19NNjhIQzExX0hJOCwKCgoKICBCRkRfUkVMT0Nf TTY4SEMxMV9MTzgsCgoKCiAgQkZEX1JFTE9DX002OEhDMTFfM0IsCgoKCiAgQkZEX1JFTE9DX0NS SVNfQkRJU1A4LAogIEJGRF9SRUxPQ19DUklTX1VOU0lHTkVEXzUsCiAgQkZEX1JFTE9DX0NSSVNf U0lHTkVEXzYsCiAgQkZEX1JFTE9DX0NSSVNfVU5TSUdORURfNiwKICBCRkRfUkVMT0NfQ1JJU19V TlNJR05FRF80LAoKCiAgQkZEX1JFTE9DX0NSSVNfQ09QWSwKICBCRkRfUkVMT0NfQ1JJU19HTE9C X0RBVCwKICBCRkRfUkVMT0NfQ1JJU19KVU1QX1NMT1QsCiAgQkZEX1JFTE9DX0NSSVNfUkVMQVRJ VkUsCgoKICBCRkRfUkVMT0NfQ1JJU18zMl9HT1QsCgoKICBCRkRfUkVMT0NfQ1JJU18xNl9HT1Qs CgoKICBCRkRfUkVMT0NfQ1JJU18zMl9HT1RQTFQsCgoKICBCRkRfUkVMT0NfQ1JJU18xNl9HT1RQ TFQsCgoKICBCRkRfUkVMT0NfQ1JJU18zMl9HT1RSRUwsCgoKICBCRkRfUkVMT0NfQ1JJU18zMl9Q TFRfR09UUkVMLAoKCiAgQkZEX1JFTE9DX0NSSVNfMzJfUExUX1BDUkVMLAoKCiAgQkZEX1JFTE9D Xzg2MF9DT1BZLAogIEJGRF9SRUxPQ184NjBfR0xPQl9EQVQsCiAgQkZEX1JFTE9DXzg2MF9KVU1Q X1NMT1QsCiAgQkZEX1JFTE9DXzg2MF9SRUxBVElWRSwKICBCRkRfUkVMT0NfODYwX1BDMjYsCiAg QkZEX1JFTE9DXzg2MF9QTFQyNiwKICBCRkRfUkVMT0NfODYwX1BDMTYsCiAgQkZEX1JFTE9DXzg2 MF9MT1cwLAogIEJGRF9SRUxPQ184NjBfU1BMSVQwLAogIEJGRF9SRUxPQ184NjBfTE9XMSwKICBC RkRfUkVMT0NfODYwX1NQTElUMSwKICBCRkRfUkVMT0NfODYwX0xPVzIsCiAgQkZEX1JFTE9DXzg2 MF9TUExJVDIsCiAgQkZEX1JFTE9DXzg2MF9MT1czLAogIEJGRF9SRUxPQ184NjBfTE9HT1QwLAog IEJGRF9SRUxPQ184NjBfU1BHT1QwLAogIEJGRF9SRUxPQ184NjBfTE9HT1QxLAogIEJGRF9SRUxP Q184NjBfU1BHT1QxLAogIEJGRF9SRUxPQ184NjBfTE9HT1RPRkYwLAogIEJGRF9SRUxPQ184NjBf U1BHT1RPRkYwLAogIEJGRF9SRUxPQ184NjBfTE9HT1RPRkYxLAogIEJGRF9SRUxPQ184NjBfU1BH T1RPRkYxLAogIEJGRF9SRUxPQ184NjBfTE9HT1RPRkYyLAogIEJGRF9SRUxPQ184NjBfTE9HT1RP RkYzLAogIEJGRF9SRUxPQ184NjBfTE9QQywKICBCRkRfUkVMT0NfODYwX0hJR0hBREosCiAgQkZE X1JFTE9DXzg2MF9IQUdPVCwKICBCRkRfUkVMT0NfODYwX0hBR09UT0ZGLAogIEJGRF9SRUxPQ184 NjBfSEFQQywKICBCRkRfUkVMT0NfODYwX0hJR0gsCiAgQkZEX1JFTE9DXzg2MF9ISUdPVCwKICBC RkRfUkVMT0NfODYwX0hJR09UT0ZGLAoKCiAgQkZEX1JFTE9DX09QRU5SSVNDX0FCU18yNiwKICBC RkRfUkVMT0NfT1BFTlJJU0NfUkVMXzI2LAoKCiAgQkZEX1JFTE9DX0g4X0RJUjE2QTgsCiAgQkZE X1JFTE9DX0g4X0RJUjE2UjgsCiAgQkZEX1JFTE9DX0g4X0RJUjI0QTgsCiAgQkZEX1JFTE9DX0g4 X0RJUjI0UjgsCiAgQkZEX1JFTE9DX0g4X0RJUjMyQTE2LAoKCiAgQkZEX1JFTE9DX1hTVE9STVkx Nl9SRUxfMTIsCiAgQkZEX1JFTE9DX1hTVE9STVkxNl8yNCwKICBCRkRfUkVMT0NfWFNUT1JNWTE2 X0ZQVFIxNiwKCgogIEJGRF9SRUxPQ19WQVhfR0xPQl9EQVQsCiAgQkZEX1JFTE9DX1ZBWF9KTVBf U0xPVCwKICBCRkRfUkVMT0NfVkFYX1JFTEFUSVZFLAogIEJGRF9SRUxPQ19VTlVTRUQgfTsKdHlw ZWRlZiBlbnVtIGJmZF9yZWxvY19jb2RlX3JlYWwgYmZkX3JlbG9jX2NvZGVfcmVhbF90eXBlOwpy ZWxvY19ob3d0b190eXBlICoKYmZkX3JlbG9jX3R5cGVfbG9va3VwIChiZmQgKmFiZmQsIGJmZF9y ZWxvY19jb2RlX3JlYWxfdHlwZSBjb2RlKTsKCmNvbnN0IGNoYXIgKgpiZmRfZ2V0X3JlbG9jX2Nv ZGVfbmFtZSAoYmZkX3JlbG9jX2NvZGVfcmVhbF90eXBlIGNvZGUpOwoKCgp0eXBlZGVmIHN0cnVj dCBzeW1ib2xfY2FjaGVfZW50cnkKewojIDMxMjcgIi4uL2JmZC9iZmQuaCIKICBzdHJ1Y3QgX2Jm ZCAqdGhlX2JmZDsKCgoKICBjb25zdCBjaGFyICpuYW1lOwoKCgoKICBzeW12YWx1ZSB2YWx1ZTsK IyAzMjIzICIuLi9iZmQvYmZkLmgiCiAgZmxhZ3dvcmQgZmxhZ3M7CgoKCgogIHN0cnVjdCBzZWMg KnNlY3Rpb247CgoKICB1bmlvbgogICAgewogICAgICB2b2lkICogcDsKICAgICAgYmZkX3ZtYSBp OwogICAgfQogIHVkYXRhOwp9CmFzeW1ib2w7CgoKCgpib29sZWFuCmJmZF9pc19sb2NhbF9sYWJl bCAoYmZkICphYmZkLCBhc3ltYm9sICpzeW0pOwoKYm9vbGVhbgpiZmRfaXNfbG9jYWxfbGFiZWxf bmFtZSAoYmZkICphYmZkLCBjb25zdCBjaGFyICpuYW1lKTsKIyAzMjU2ICIuLi9iZmQvYmZkLmgi CmJvb2xlYW4KYmZkX3NldF9zeW10YWIgKGJmZCAqYWJmZCwgYXN5bWJvbCAqKmxvY2F0aW9uLCB1 bnNpZ25lZCBpbnQgY291bnQpOwoKdm9pZApiZmRfcHJpbnRfc3ltYm9sX3ZhbmRmIChiZmQgKmFi ZmQsIHZvaWQgKiBmaWxlLCBhc3ltYm9sICpzeW1ib2wpOwoKCgoKYXN5bWJvbCAqCl9iZmRfZ2Vu ZXJpY19tYWtlX2VtcHR5X3N5bWJvbCAoYmZkICopOwoKCgoKaW50CmJmZF9kZWNvZGVfc3ltY2xh c3MgKGFzeW1ib2wgKnN5bWJvbCk7Cgpib29sZWFuCmJmZF9pc191bmRlZmluZWRfc3ltY2xhc3Mg KGludCBzeW1jbGFzcyk7Cgp2b2lkCmJmZF9zeW1ib2xfaW5mbyAoYXN5bWJvbCAqc3ltYm9sLCBz eW1ib2xfaW5mbyAqcmV0KTsKCmJvb2xlYW4KYmZkX2NvcHlfcHJpdmF0ZV9zeW1ib2xfZGF0YSAo YmZkICppYmZkLCBhc3ltYm9sICppc3ltLCBiZmQgKm9iZmQsIGFzeW1ib2wgKm9zeW0pOwoKCgoK CgpzdHJ1Y3QgX2JmZAp7CgogIGNvbnN0IGNoYXIgKmZpbGVuYW1lOwoKCiAgY29uc3Qgc3RydWN0 IGJmZF90YXJnZXQgKnh2ZWM7CiMgMzMwMyAiLi4vYmZkL2JmZC5oIgogIHZvaWQgKiBpb3N0cmVh bTsKCgoKICBib29sZWFuIGNhY2hlYWJsZTsKCgoKCiAgYm9vbGVhbiB0YXJnZXRfZGVmYXVsdGVk OwoKCgogIHN0cnVjdCBfYmZkICpscnVfcHJldiwgKmxydV9uZXh0OwoKCgogIHVmaWxlX3B0ciB3 aGVyZTsKCgogIGJvb2xlYW4gb3BlbmVkX29uY2U7CgoKCiAgYm9vbGVhbiBtdGltZV9zZXQ7CgoK ICBsb25nIG10aW1lOwoKCiAgaW50IGlmZDsKCgogIGJmZF9mb3JtYXQgZm9ybWF0OwoKCiAgZW51 bSBiZmRfZGlyZWN0aW9uCiAgICB7CiAgICAgIG5vX2RpcmVjdGlvbiA9IDAsCiAgICAgIHJlYWRf ZGlyZWN0aW9uID0gMSwKICAgICAgd3JpdGVfZGlyZWN0aW9uID0gMiwKICAgICAgYm90aF9kaXJl Y3Rpb24gPSAzCiAgICB9CiAgZGlyZWN0aW9uOwoKCiAgZmxhZ3dvcmQgZmxhZ3M7CgoKCgogIHVm aWxlX3B0ciBvcmlnaW47CgoKCiAgYm9vbGVhbiBvdXRwdXRfaGFzX2JlZ3VuOwoKCiAgc3RydWN0 IGJmZF9oYXNoX3RhYmxlIHNlY3Rpb25faHRhYjsKCgogIHN0cnVjdCBzZWMgKnNlY3Rpb25zOwoK CiAgc3RydWN0IHNlYyAqKnNlY3Rpb25fdGFpbDsKCgogIHVuc2lnbmVkIGludCBzZWN0aW9uX2Nv dW50OwoKCgogIGJmZF92bWEgc3RhcnRfYWRkcmVzczsKCgogIHVuc2lnbmVkIGludCBzeW1jb3Vu dDsKCgogIHN0cnVjdCBzeW1ib2xfY2FjaGVfZW50cnkgKipvdXRzeW1ib2xzOwoKCiAgY29uc3Qg c3RydWN0IGJmZF9hcmNoX2luZm8gKmFyY2hfaW5mbzsKCgogIHZvaWQgKiBhcmVsdF9kYXRhOwog IHN0cnVjdCBfYmZkICpteV9hcmNoaXZlOwogIHN0cnVjdCBfYmZkICpuZXh0OwogIHN0cnVjdCBf YmZkICphcmNoaXZlX2hlYWQ7CiAgYm9vbGVhbiBoYXNfYXJtYXA7CgoKICBzdHJ1Y3QgX2JmZCAq bGlua19uZXh0OwoKCgogIGludCBhcmNoaXZlX3Bhc3M7CgoKICB1bmlvbgogICAgewogICAgICBz dHJ1Y3QgYW91dF9kYXRhX3N0cnVjdCAqYW91dF9kYXRhOwogICAgICBzdHJ1Y3QgYXJ0ZGF0YSAq YW91dF9hcl9kYXRhOwogICAgICBzdHJ1Y3QgX29hc3lzX2RhdGEgKm9hc3lzX29ial9kYXRhOwog ICAgICBzdHJ1Y3QgX29hc3lzX2FyX2RhdGEgKm9hc3lzX2FyX2RhdGE7CiAgICAgIHN0cnVjdCBj b2ZmX3RkYXRhICpjb2ZmX29ial9kYXRhOwogICAgICBzdHJ1Y3QgcGVfdGRhdGEgKnBlX29ial9k YXRhOwogICAgICBzdHJ1Y3QgeGNvZmZfdGRhdGEgKnhjb2ZmX29ial9kYXRhOwogICAgICBzdHJ1 Y3QgZWNvZmZfdGRhdGEgKmVjb2ZmX29ial9kYXRhOwogICAgICBzdHJ1Y3QgaWVlZV9kYXRhX3N0 cnVjdCAqaWVlZV9kYXRhOwogICAgICBzdHJ1Y3QgaWVlZV9hcl9kYXRhX3N0cnVjdCAqaWVlZV9h cl9kYXRhOwogICAgICBzdHJ1Y3Qgc3JlY19kYXRhX3N0cnVjdCAqc3JlY19kYXRhOwogICAgICBz dHJ1Y3QgaWhleF9kYXRhX3N0cnVjdCAqaWhleF9kYXRhOwogICAgICBzdHJ1Y3QgdGVraGV4X2Rh dGFfc3RydWN0ICp0ZWtoZXhfZGF0YTsKICAgICAgc3RydWN0IGVsZl9vYmpfdGRhdGEgKmVsZl9v YmpfZGF0YTsKICAgICAgc3RydWN0IG5sbV9vYmpfdGRhdGEgKm5sbV9vYmpfZGF0YTsKICAgICAg c3RydWN0IGJvdXRfZGF0YV9zdHJ1Y3QgKmJvdXRfZGF0YTsKICAgICAgc3RydWN0IG1tb19kYXRh X3N0cnVjdCAqbW1vX2RhdGE7CiAgICAgIHN0cnVjdCBzdW5fY29yZV9zdHJ1Y3QgKnN1bl9jb3Jl X2RhdGE7CiAgICAgIHN0cnVjdCBzY281X2NvcmVfc3RydWN0ICpzY281X2NvcmVfZGF0YTsKICAg ICAgc3RydWN0IHRyYWRfY29yZV9zdHJ1Y3QgKnRyYWRfY29yZV9kYXRhOwogICAgICBzdHJ1Y3Qg c29tX2RhdGFfc3RydWN0ICpzb21fZGF0YTsKICAgICAgc3RydWN0IGhwdXhfY29yZV9zdHJ1Y3Qg KmhwdXhfY29yZV9kYXRhOwogICAgICBzdHJ1Y3QgaHBwYWJzZF9jb3JlX3N0cnVjdCAqaHBwYWJz ZF9jb3JlX2RhdGE7CiAgICAgIHN0cnVjdCBzZ2lfY29yZV9zdHJ1Y3QgKnNnaV9jb3JlX2RhdGE7 CiAgICAgIHN0cnVjdCBseW54X2NvcmVfc3RydWN0ICpseW54X2NvcmVfZGF0YTsKICAgICAgc3Ry dWN0IG9zZl9jb3JlX3N0cnVjdCAqb3NmX2NvcmVfZGF0YTsKICAgICAgc3RydWN0IGNpc2NvX2Nv cmVfc3RydWN0ICpjaXNjb19jb3JlX2RhdGE7CiAgICAgIHN0cnVjdCB2ZXJzYWRvc19kYXRhX3N0 cnVjdCAqdmVyc2Fkb3NfZGF0YTsKICAgICAgc3RydWN0IG5ldGJzZF9jb3JlX3N0cnVjdCAqbmV0 YnNkX2NvcmVfZGF0YTsKICAgICAgdm9pZCAqIGFueTsKICAgIH0KICB0ZGF0YTsKCgogIHZvaWQg KiB1c3JkYXRhOwoKCgoKICB2b2lkICogbWVtb3J5Owp9OwoKdHlwZWRlZiBlbnVtIGJmZF9lcnJv cgp7CiAgYmZkX2Vycm9yX25vX2Vycm9yID0gMCwKICBiZmRfZXJyb3Jfc3lzdGVtX2NhbGwsCiAg YmZkX2Vycm9yX2ludmFsaWRfdGFyZ2V0LAogIGJmZF9lcnJvcl93cm9uZ19mb3JtYXQsCiAgYmZk X2Vycm9yX3dyb25nX29iamVjdF9mb3JtYXQsCiAgYmZkX2Vycm9yX2ludmFsaWRfb3BlcmF0aW9u LAogIGJmZF9lcnJvcl9ub19tZW1vcnksCiAgYmZkX2Vycm9yX25vX3N5bWJvbHMsCiAgYmZkX2Vy cm9yX25vX2FybWFwLAogIGJmZF9lcnJvcl9ub19tb3JlX2FyY2hpdmVkX2ZpbGVzLAogIGJmZF9l cnJvcl9tYWxmb3JtZWRfYXJjaGl2ZSwKICBiZmRfZXJyb3JfZmlsZV9ub3RfcmVjb2duaXplZCwK ICBiZmRfZXJyb3JfZmlsZV9hbWJpZ3VvdXNseV9yZWNvZ25pemVkLAogIGJmZF9lcnJvcl9ub19j b250ZW50cywKICBiZmRfZXJyb3Jfbm9ucmVwcmVzZW50YWJsZV9zZWN0aW9uLAogIGJmZF9lcnJv cl9ub19kZWJ1Z19zZWN0aW9uLAogIGJmZF9lcnJvcl9iYWRfdmFsdWUsCiAgYmZkX2Vycm9yX2Zp bGVfdHJ1bmNhdGVkLAogIGJmZF9lcnJvcl9maWxlX3Rvb19iaWcsCiAgYmZkX2Vycm9yX2ludmFs aWRfZXJyb3JfY29kZQp9CmJmZF9lcnJvcl90eXBlOwoKYmZkX2Vycm9yX3R5cGUKYmZkX2dldF9l cnJvciAodm9pZCk7Cgp2b2lkCmJmZF9zZXRfZXJyb3IgKGJmZF9lcnJvcl90eXBlIGVycm9yX3Rh Zyk7Cgpjb25zdCBjaGFyICoKYmZkX2Vycm1zZyAoYmZkX2Vycm9yX3R5cGUgZXJyb3JfdGFnKTsK CnZvaWQKYmZkX3BlcnJvciAoY29uc3QgY2hhciAqbWVzc2FnZSk7Cgp0eXBlZGVmIHZvaWQgKCpi ZmRfZXJyb3JfaGFuZGxlcl90eXBlKSAoY29uc3QgY2hhciAqLCAuLi4pOwoKYmZkX2Vycm9yX2hh bmRsZXJfdHlwZQpiZmRfc2V0X2Vycm9yX2hhbmRsZXIgKGJmZF9lcnJvcl9oYW5kbGVyX3R5cGUp OwoKdm9pZApiZmRfc2V0X2Vycm9yX3Byb2dyYW1fbmFtZSAoY29uc3QgY2hhciAqKTsKCmJmZF9l cnJvcl9oYW5kbGVyX3R5cGUKYmZkX2dldF9lcnJvcl9oYW5kbGVyICh2b2lkKTsKCmNvbnN0IGNo YXIgKgpiZmRfYXJjaGl2ZV9maWxlbmFtZSAoYmZkICopOwoKbG9uZwpiZmRfZ2V0X3JlbG9jX3Vw cGVyX2JvdW5kIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWN0KTsKCmxvbmcKYmZkX2Nhbm9uaWNh bGl6ZV9yZWxvYyAoYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjLCBhcmVsZW50ICoqbG9jLCBhc3lt Ym9sICoqc3ltcyk7CgoKCgp2b2lkCmJmZF9zZXRfcmVsb2MgKGJmZCAqYWJmZCwgYXNlY3Rpb24g KnNlYywgYXJlbGVudCAqKnJlbCwgdW5zaWduZWQgaW50IGNvdW50KTsKCmJvb2xlYW4KYmZkX3Nl dF9maWxlX2ZsYWdzIChiZmQgKmFiZmQsIGZsYWd3b3JkIGZsYWdzKTsKCmludApiZmRfZ2V0X2Fy Y2hfc2l6ZSAoYmZkICphYmZkKTsKCmludApiZmRfZ2V0X3NpZ25fZXh0ZW5kX3ZtYSAoYmZkICph YmZkKTsKCmJvb2xlYW4KYmZkX3NldF9zdGFydF9hZGRyZXNzIChiZmQgKmFiZmQsIGJmZF92bWEg dm1hKTsKCmxvbmcKYmZkX2dldF9tdGltZSAoYmZkICphYmZkKTsKCmxvbmcKYmZkX2dldF9zaXpl IChiZmQgKmFiZmQpOwoKdW5zaWduZWQgaW50CmJmZF9nZXRfZ3Bfc2l6ZSAoYmZkICphYmZkKTsK CnZvaWQKYmZkX3NldF9ncF9zaXplIChiZmQgKmFiZmQsIHVuc2lnbmVkIGludCBpKTsKCmJmZF92 bWEKYmZkX3NjYW5fdm1hIChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKiplbmQsIGlu dCBiYXNlKTsKCmJvb2xlYW4KYmZkX2NvcHlfcHJpdmF0ZV9iZmRfZGF0YSAoYmZkICppYmZkLCBi ZmQgKm9iZmQpOwoKCgoKYm9vbGVhbgpiZmRfbWVyZ2VfcHJpdmF0ZV9iZmRfZGF0YSAoYmZkICpp YmZkLCBiZmQgKm9iZmQpOwoKCgoKYm9vbGVhbgpiZmRfc2V0X3ByaXZhdGVfZmxhZ3MgKGJmZCAq YWJmZCwgZmxhZ3dvcmQgZmxhZ3MpOwojIDM2MjMgIi4uL2JmZC9iZmQuaCIKZXh0ZXJuIGJmZF9i eXRlICpiZmRfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzCiAgICAgICAoYmZkICosIHN0 cnVjdCBiZmRfbGlua19pbmZvICosIHN0cnVjdCBiZmRfbGlua19vcmRlciAqLCBiZmRfYnl0ZSAq LCBib29sZWFuLCBhc3ltYm9sICoqKTsKCgoKYm9vbGVhbgpiZmRfYWx0X21hY2hfY29kZSAoYmZk ICphYmZkLCBpbnQgaW5kZXgpOwoKCnN5bWluZGV4CmJmZF9nZXRfbmV4dF9tYXBlbnQgKGJmZCAq YWJmZCwgc3ltaW5kZXggcHJldmlvdXMsIGNhcnN5bSAqKnN5bSk7Cgpib29sZWFuCmJmZF9zZXRf YXJjaGl2ZV9oZWFkIChiZmQgKm91dHB1dCwgYmZkICpuZXdfaGVhZCk7CgpiZmQgKgpiZmRfb3Bl bnJfbmV4dF9hcmNoaXZlZF9maWxlIChiZmQgKmFyY2hpdmUsIGJmZCAqcHJldmlvdXMpOwoKCmNv bnN0IGNoYXIgKgpiZmRfY29yZV9maWxlX2ZhaWxpbmdfY29tbWFuZCAoYmZkICphYmZkKTsKCmlu dApiZmRfY29yZV9maWxlX2ZhaWxpbmdfc2lnbmFsIChiZmQgKmFiZmQpOwoKYm9vbGVhbgpjb3Jl X2ZpbGVfbWF0Y2hlc19leGVjdXRhYmxlX3AgKGJmZCAqY29yZV9iZmQsIGJmZCAqZXhlY19iZmQp OwojIDM2NzMgIi4uL2JmZC9iZmQuaCIKZW51bSBiZmRfZmxhdm91cgp7CiAgYmZkX3RhcmdldF91 bmtub3duX2ZsYXZvdXIsCiAgYmZkX3RhcmdldF9hb3V0X2ZsYXZvdXIsCiAgYmZkX3RhcmdldF9j b2ZmX2ZsYXZvdXIsCiAgYmZkX3RhcmdldF9lY29mZl9mbGF2b3VyLAogIGJmZF90YXJnZXRfeGNv ZmZfZmxhdm91ciwKICBiZmRfdGFyZ2V0X2VsZl9mbGF2b3VyLAogIGJmZF90YXJnZXRfaWVlZV9m bGF2b3VyLAogIGJmZF90YXJnZXRfbmxtX2ZsYXZvdXIsCiAgYmZkX3RhcmdldF9vYXN5c19mbGF2 b3VyLAogIGJmZF90YXJnZXRfdGVraGV4X2ZsYXZvdXIsCiAgYmZkX3RhcmdldF9zcmVjX2ZsYXZv dXIsCiAgYmZkX3RhcmdldF9paGV4X2ZsYXZvdXIsCiAgYmZkX3RhcmdldF9zb21fZmxhdm91ciwK ICBiZmRfdGFyZ2V0X29zOWtfZmxhdm91ciwKICBiZmRfdGFyZ2V0X3ZlcnNhZG9zX2ZsYXZvdXIs CiAgYmZkX3RhcmdldF9tc2Rvc19mbGF2b3VyLAogIGJmZF90YXJnZXRfb3ZheF9mbGF2b3VyLAog IGJmZF90YXJnZXRfZXZheF9mbGF2b3VyLAogIGJmZF90YXJnZXRfbW1vX2ZsYXZvdXIKfTsKCmVu dW0gYmZkX2VuZGlhbiB7IEJGRF9FTkRJQU5fQklHLCBCRkRfRU5ESUFOX0xJVFRMRSwgQkZEX0VO RElBTl9VTktOT1dOIH07CgoKdHlwZWRlZiBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyBfYmZkX2xpbmtf aW5mbzsKCnR5cGVkZWYgc3RydWN0IGJmZF90YXJnZXQKewoKICBjaGFyICpuYW1lOwoKCgogIGVu dW0gYmZkX2ZsYXZvdXIgZmxhdm91cjsKCgogIGVudW0gYmZkX2VuZGlhbiBieXRlb3JkZXI7CgoK ICBlbnVtIGJmZF9lbmRpYW4gaGVhZGVyX2J5dGVvcmRlcjsKCgoKICBmbGFnd29yZCBvYmplY3Rf ZmxhZ3M7CgoKCiAgZmxhZ3dvcmQgc2VjdGlvbl9mbGFnczsKCgoKICBjaGFyIHN5bWJvbF9sZWFk aW5nX2NoYXI7CgoKICBjaGFyIGFyX3BhZF9jaGFyOwoKCiAgdW5zaWduZWQgc2hvcnQgYXJfbWF4 X25hbWVsZW47CgoKCgogIGJmZF92bWEgKCpiZmRfZ2V0eDY0KSAoY29uc3QgYmZkX2J5dGUgKik7 CiAgYmZkX3NpZ25lZF92bWEgKCpiZmRfZ2V0eF9zaWduZWRfNjQpIChjb25zdCBiZmRfYnl0ZSAq KTsKICB2b2lkICgqYmZkX3B1dHg2NCkgKGJmZF92bWEsIGJmZF9ieXRlICopOwogIGJmZF92bWEg KCpiZmRfZ2V0eDMyKSAoY29uc3QgYmZkX2J5dGUgKik7CiAgYmZkX3NpZ25lZF92bWEgKCpiZmRf Z2V0eF9zaWduZWRfMzIpIChjb25zdCBiZmRfYnl0ZSAqKTsKICB2b2lkICgqYmZkX3B1dHgzMikg KGJmZF92bWEsIGJmZF9ieXRlICopOwogIGJmZF92bWEgKCpiZmRfZ2V0eDE2KSAoY29uc3QgYmZk X2J5dGUgKik7CiAgYmZkX3NpZ25lZF92bWEgKCpiZmRfZ2V0eF9zaWduZWRfMTYpIChjb25zdCBi ZmRfYnl0ZSAqKTsKICB2b2lkICgqYmZkX3B1dHgxNikgKGJmZF92bWEsIGJmZF9ieXRlICopOwoK CiAgYmZkX3ZtYSAoKmJmZF9oX2dldHg2NCkgKGNvbnN0IGJmZF9ieXRlICopOwogIGJmZF9zaWdu ZWRfdm1hICgqYmZkX2hfZ2V0eF9zaWduZWRfNjQpIChjb25zdCBiZmRfYnl0ZSAqKTsKICB2b2lk ICgqYmZkX2hfcHV0eDY0KSAoYmZkX3ZtYSwgYmZkX2J5dGUgKik7CiAgYmZkX3ZtYSAoKmJmZF9o X2dldHgzMikgKGNvbnN0IGJmZF9ieXRlICopOwogIGJmZF9zaWduZWRfdm1hICgqYmZkX2hfZ2V0 eF9zaWduZWRfMzIpIChjb25zdCBiZmRfYnl0ZSAqKTsKICB2b2lkICgqYmZkX2hfcHV0eDMyKSAo YmZkX3ZtYSwgYmZkX2J5dGUgKik7CiAgYmZkX3ZtYSAoKmJmZF9oX2dldHgxNikgKGNvbnN0IGJm ZF9ieXRlICopOwogIGJmZF9zaWduZWRfdm1hICgqYmZkX2hfZ2V0eF9zaWduZWRfMTYpIChjb25z dCBiZmRfYnl0ZSAqKTsKICB2b2lkICgqYmZkX2hfcHV0eDE2KSAoYmZkX3ZtYSwgYmZkX2J5dGUg Kik7CgoKCgoKICBjb25zdCBzdHJ1Y3QgYmZkX3RhcmdldCAqKCpfYmZkX2NoZWNrX2Zvcm1hdFti ZmRfdHlwZV9lbmRdKSAoYmZkICopOwoKCiAgYm9vbGVhbiAoKl9iZmRfc2V0X2Zvcm1hdFtiZmRf dHlwZV9lbmRdKSAoYmZkICopOwoKCiAgYm9vbGVhbiAoKl9iZmRfd3JpdGVfY29udGVudHNbYmZk X3R5cGVfZW5kXSkgKGJmZCAqKTsKIyAzNzgwICIuLi9iZmQvYmZkLmgiCiAgYm9vbGVhbiAoKl9j bG9zZV9hbmRfY2xlYW51cCkgKGJmZCAqKTsKCiAgYm9vbGVhbiAoKl9iZmRfZnJlZV9jYWNoZWRf aW5mbykgKGJmZCAqKTsKCiAgYm9vbGVhbiAoKl9uZXdfc2VjdGlvbl9ob29rKSAoYmZkICosIHNl Y19wdHIpOwoKICBib29sZWFuICgqX2JmZF9nZXRfc2VjdGlvbl9jb250ZW50cykgKGJmZCAqLCBz ZWNfcHRyLCB2b2lkICosIGZpbGVfcHRyLCBiZmRfc2l6ZV90eXBlKTsKCiAgYm9vbGVhbiAoKl9i ZmRfZ2V0X3NlY3Rpb25fY29udGVudHNfaW5fd2luZG93KQogICAgKGJmZCAqLCBzZWNfcHRyLCBi ZmRfd2luZG93ICosIGZpbGVfcHRyLCBiZmRfc2l6ZV90eXBlKTsKIyAzODAxICIuLi9iZmQvYmZk LmgiCiAgYm9vbGVhbiAoKl9iZmRfY29weV9wcml2YXRlX2JmZF9kYXRhKSAoYmZkICosIGJmZCAq KTsKCgogIGJvb2xlYW4gKCpfYmZkX21lcmdlX3ByaXZhdGVfYmZkX2RhdGEpIChiZmQgKiwgYmZk ICopOwoKCiAgYm9vbGVhbiAoKl9iZmRfY29weV9wcml2YXRlX3NlY3Rpb25fZGF0YSkgKGJmZCAq LCBzZWNfcHRyLCBiZmQgKiwgc2VjX3B0cik7CgoKCiAgYm9vbGVhbiAoKl9iZmRfY29weV9wcml2 YXRlX3N5bWJvbF9kYXRhKSAoYmZkICosIGFzeW1ib2wgKiwgYmZkICosIGFzeW1ib2wgKik7CgoK ICBib29sZWFuICgqX2JmZF9zZXRfcHJpdmF0ZV9mbGFncykgKGJmZCAqLCBmbGFnd29yZCk7CgoK ICBib29sZWFuICgqX2JmZF9wcmludF9wcml2YXRlX2JmZF9kYXRhKSAoYmZkICosIHZvaWQgKik7 CgoKCgoKCiAgY2hhciAqICgqX2NvcmVfZmlsZV9mYWlsaW5nX2NvbW1hbmQpIChiZmQgKik7CiAg aW50ICgqX2NvcmVfZmlsZV9mYWlsaW5nX3NpZ25hbCkgKGJmZCAqKTsKICBib29sZWFuICgqX2Nv cmVfZmlsZV9tYXRjaGVzX2V4ZWN1dGFibGVfcCkgKGJmZCAqLCBiZmQgKik7CiMgMzg0MCAiLi4v YmZkL2JmZC5oIgogIGJvb2xlYW4gKCpfYmZkX3NsdXJwX2FybWFwKSAoYmZkICopOwogIGJvb2xl YW4gKCpfYmZkX3NsdXJwX2V4dGVuZGVkX25hbWVfdGFibGUpIChiZmQgKik7CiAgYm9vbGVhbiAo Kl9iZmRfY29uc3RydWN0X2V4dGVuZGVkX25hbWVfdGFibGUpCiAgICAoYmZkICosIGNoYXIgKios IGJmZF9zaXplX3R5cGUgKiwgY29uc3QgY2hhciAqKik7CiAgdm9pZCAoKl9iZmRfdHJ1bmNhdGVf YXJuYW1lKSAoYmZkICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKICBib29sZWFuICgqd3JpdGVf YXJtYXApCiAgICAoYmZkICosIHVuc2lnbmVkIGludCwgc3RydWN0IG9ybCAqLCB1bnNpZ25lZCBp bnQsIGludCk7CiAgdm9pZCAqICgqX2JmZF9yZWFkX2FyX2hkcl9mbikgKGJmZCAqKTsKICBiZmQg KiAoKm9wZW5yX25leHRfYXJjaGl2ZWRfZmlsZSkgKGJmZCAqLCBiZmQgKik7CgogIGJmZCAqICgq X2JmZF9nZXRfZWx0X2F0X2luZGV4KSAoYmZkICosIHN5bWluZGV4KTsKICBpbnQgKCpfYmZkX3N0 YXRfYXJjaF9lbHQpIChiZmQgKiwgc3RydWN0IHN0YXQgKik7CiAgYm9vbGVhbiAoKl9iZmRfdXBk YXRlX2FybWFwX3RpbWVzdGFtcCkgKGJmZCAqKTsKIyAzODY3ICIuLi9iZmQvYmZkLmgiCiAgbG9u ZyAoKl9iZmRfZ2V0X3N5bXRhYl91cHBlcl9ib3VuZCkgKGJmZCAqKTsKICBsb25nICgqX2JmZF9j YW5vbmljYWxpemVfc3ltdGFiKSAoYmZkICosIHN0cnVjdCBzeW1ib2xfY2FjaGVfZW50cnkgKiop OwoKICBzdHJ1Y3Qgc3ltYm9sX2NhY2hlX2VudHJ5ICoKICAgICAgICAgICAoKl9iZmRfbWFrZV9l bXB0eV9zeW1ib2wpIChiZmQgKik7CiAgdm9pZCAoKl9iZmRfcHJpbnRfc3ltYm9sKSAoYmZkICos IHZvaWQgKiwgc3RydWN0IHN5bWJvbF9jYWNoZV9lbnRyeSAqLCBiZmRfcHJpbnRfc3ltYm9sX3R5 cGUpOwoKCgogIHZvaWQgKCpfYmZkX2dldF9zeW1ib2xfaW5mbykgKGJmZCAqLCBzdHJ1Y3Qgc3lt Ym9sX2NhY2hlX2VudHJ5ICosIHN5bWJvbF9pbmZvICopOwoKCgogIGJvb2xlYW4gKCpfYmZkX2lz X2xvY2FsX2xhYmVsX25hbWUpIChiZmQgKiwgY29uc3QgY2hhciAqKTsKCiAgYWxlbnQgKiAoKl9n ZXRfbGluZW5vKSAoYmZkICosIHN0cnVjdCBzeW1ib2xfY2FjaGVfZW50cnkgKik7CiAgYm9vbGVh biAoKl9iZmRfZmluZF9uZWFyZXN0X2xpbmUpCiAgICAoYmZkICosIHN0cnVjdCBzZWMgKiwgc3Ry dWN0IHN5bWJvbF9jYWNoZV9lbnRyeSAqKiwgYmZkX3ZtYSwgY29uc3QgY2hhciAqKiwgY29uc3Qg Y2hhciAqKiwgdW5zaWduZWQgaW50ICopOwoKCgoKICBhc3ltYm9sICooKl9iZmRfbWFrZV9kZWJ1 Z19zeW1ib2wpIChiZmQgKiwgdm9pZCAqLCB1bnNpZ25lZCBsb25nIHNpemUpOwoKCgogIGxvbmcg KCpfcmVhZF9taW5pc3ltYm9scykgKGJmZCAqLCBib29sZWFuLCB2b2lkICogKiwgdW5zaWduZWQg aW50ICopOwoKCgogIGFzeW1ib2wgKigqX21pbmlzeW1ib2xfdG9fc3ltYm9sKSAoYmZkICosIGJv b2xlYW4sIGNvbnN0IHZvaWQgKiwgYXN5bWJvbCAqKTsKCgoKCgoKCiAgbG9uZyAoKl9nZXRfcmVs b2NfdXBwZXJfYm91bmQpIChiZmQgKiwgc2VjX3B0cik7CiAgbG9uZyAoKl9iZmRfY2Fub25pY2Fs aXplX3JlbG9jKSAoYmZkICosIHNlY19wdHIsIGFyZWxlbnQgKiosIHN0cnVjdCBzeW1ib2xfY2Fj aGVfZW50cnkgKiopOwoKCiAgcmVsb2NfaG93dG9fdHlwZSAqCiAgICAgICAgICAgKCpyZWxvY190 eXBlX2xvb2t1cCkgKGJmZCAqLCBiZmRfcmVsb2NfY29kZV9yZWFsX3R5cGUpOwoKCgoKCiAgYm9v bGVhbiAoKl9iZmRfc2V0X2FyY2hfbWFjaCkgKGJmZCAqLCBlbnVtIGJmZF9hcmNoaXRlY3R1cmUs IHVuc2lnbmVkIGxvbmcpOwoKICBib29sZWFuICgqX2JmZF9zZXRfc2VjdGlvbl9jb250ZW50cykg KGJmZCAqLCBzZWNfcHRyLCB2b2lkICosIGZpbGVfcHRyLCBiZmRfc2l6ZV90eXBlKTsKIyAzOTM1 ICIuLi9iZmQvYmZkLmgiCiAgaW50ICgqX2JmZF9zaXplb2ZfaGVhZGVycykgKGJmZCAqLCBib29s ZWFuKTsKICBiZmRfYnl0ZSAqKCpfYmZkX2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cykK ICAgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgc3RydWN0IGJmZF9saW5rX29yZGVy ICosIGJmZF9ieXRlICosIGJvb2xlYW4sIHN0cnVjdCBzeW1ib2xfY2FjaGVfZW50cnkgKiopOwoK CiAgYm9vbGVhbiAoKl9iZmRfcmVsYXhfc2VjdGlvbikKICAgIChiZmQgKiwgc3RydWN0IHNlYyAq LCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBib29sZWFuICopOwoKCgogIHN0cnVjdCBiZmRfbGlu a19oYXNoX3RhYmxlICooKl9iZmRfbGlua19oYXNoX3RhYmxlX2NyZWF0ZSkgKGJmZCAqKTsKCgog IHZvaWQgKCpfYmZkX2xpbmtfaGFzaF90YWJsZV9mcmVlKSAoc3RydWN0IGJmZF9saW5rX2hhc2hf dGFibGUgKik7CgoKICBib29sZWFuICgqX2JmZF9saW5rX2FkZF9zeW1ib2xzKSAoYmZkICosIHN0 cnVjdCBiZmRfbGlua19pbmZvICopOwoKCiAgdm9pZCAoKl9iZmRfbGlua19qdXN0X3N5bXMpIChh c2VjdGlvbiAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKCgoKICBib29sZWFuICgqX2JmZF9m aW5hbF9saW5rKSAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOwoKCiAgYm9vbGVhbiAo Kl9iZmRfbGlua19zcGxpdF9zZWN0aW9uKSAoYmZkICosIHN0cnVjdCBzZWMgKik7CgoKICBib29s ZWFuICgqX2JmZF9nY19zZWN0aW9ucykgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsK CgogIGJvb2xlYW4gKCpfYmZkX21lcmdlX3NlY3Rpb25zKSAoYmZkICosIHN0cnVjdCBiZmRfbGlu a19pbmZvICopOwoKCiAgYm9vbGVhbiAoKl9iZmRfZGlzY2FyZF9ncm91cCkgKGJmZCAqLCBzdHJ1 Y3Qgc2VjICopOwojIDM5NzkgIi4uL2JmZC9iZmQuaCIKICBsb25nICgqX2JmZF9nZXRfZHluYW1p Y19zeW10YWJfdXBwZXJfYm91bmQpIChiZmQgKik7CgogIGxvbmcgKCpfYmZkX2Nhbm9uaWNhbGl6 ZV9keW5hbWljX3N5bXRhYikKICAgIChiZmQgKiwgc3RydWN0IHN5bWJvbF9jYWNoZV9lbnRyeSAq Kik7CgogIGxvbmcgKCpfYmZkX2dldF9keW5hbWljX3JlbG9jX3VwcGVyX2JvdW5kKSAoYmZkICop OwoKICBsb25nICgqX2JmZF9jYW5vbmljYWxpemVfZHluYW1pY19yZWxvYykKICAgIChiZmQgKiwg YXJlbGVudCAqKiwgc3RydWN0IHN5bWJvbF9jYWNoZV9lbnRyeSAqKik7CgoKICBjb25zdCBzdHJ1 Y3QgYmZkX3RhcmdldCAqIGFsdGVybmF0aXZlX3RhcmdldDsKCgoKICB2b2lkICogYmFja2VuZF9k YXRhOwoKfSBiZmRfdGFyZ2V0OwoKYm9vbGVhbgpiZmRfc2V0X2RlZmF1bHRfdGFyZ2V0IChjb25z dCBjaGFyICpuYW1lKTsKCmNvbnN0IGJmZF90YXJnZXQgKgpiZmRfZmluZF90YXJnZXQgKGNvbnN0 IGNoYXIgKnRhcmdldF9uYW1lLCBiZmQgKmFiZmQpOwoKY29uc3QgY2hhciAqKgpiZmRfdGFyZ2V0 X2xpc3QgKHZvaWQpOwoKY29uc3QgYmZkX3RhcmdldCAqCmJmZF9zZWFyY2hfZm9yX3RhcmdldCAo aW50ICgqIHNlYXJjaF9mdW5jKSAoY29uc3QgYmZkX3RhcmdldCAqLCB2b2lkICopLCB2b2lkICop OwoKCmJvb2xlYW4KYmZkX2NoZWNrX2Zvcm1hdCAoYmZkICphYmZkLCBiZmRfZm9ybWF0IGZvcm1h dCk7Cgpib29sZWFuCmJmZF9jaGVja19mb3JtYXRfbWF0Y2hlcyAoYmZkICphYmZkLCBiZmRfZm9y bWF0IGZvcm1hdCwgY2hhciAqKiptYXRjaGluZyk7Cgpib29sZWFuCmJmZF9zZXRfZm9ybWF0IChi ZmQgKmFiZmQsIGJmZF9mb3JtYXQgZm9ybWF0KTsKCmNvbnN0IGNoYXIgKgpiZmRfZm9ybWF0X3N0 cmluZyAoYmZkX2Zvcm1hdCBmb3JtYXQpOwojIDEzMyAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9h cy5oIiAyCgojIDEgIi9zcmMvYmludXRpbHMtMi4xMy9pbmNsdWRlL2xpYmliZXJ0eS5oIiAxCiMg NDYgIi9zcmMvYmludXRpbHMtMi4xMy9pbmNsdWRlL2xpYmliZXJ0eS5oIgojIDEgIi91c3IvbGli L2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ3ICIv c3JjL2JpbnV0aWxzLTIuMTMvaW5jbHVkZS9saWJpYmVydHkuaCIgMgoKIyAxICIvdXNyL2xpYi9n Y2MtbGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyAxMTEgIi91 c3IvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy4yL2luY2x1ZGUvc3RkYXJnLmgiIDMKdHlw ZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwojIDQ5ICIvc3JjL2JpbnV0aWxzLTIuMTMvaW5j bHVkZS9saWJpYmVydHkuaCIgMgoKCgoKCmV4dGVybiBjaGFyICoqYnVpbGRhcmd2IChjb25zdCBj aGFyICopIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB2b2lkIGZyZWVh cmd2IChjaGFyICoqKTsKCgoKCmV4dGVybiBjaGFyICoqZHVwYXJndiAoY2hhciAqKikgX19hdHRy aWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyA3OCAiL3NyYy9iaW51dGlscy0yLjEzL2luY2x1ZGUv bGliaWJlcnR5LmgiCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoY29uc3QgY2hhciAqKTsKCgoKCgoK CmV4dGVybiBjb25zdCBjaGFyICpsYmFzZW5hbWUgKGNvbnN0IGNoYXIgKik7CgoKCgoKZXh0ZXJu IGNoYXIgKmNvbmNhdCAoY29uc3QgY2hhciAqLCAuLi4pIF9fYXR0cmlidXRlX18gKChfX21hbGxv Y19fKSk7CiMgMTAxICIvc3JjL2JpbnV0aWxzLTIuMTMvaW5jbHVkZS9saWJpYmVydHkuaCIKZXh0 ZXJuIGNoYXIgKnJlY29uY2F0IChjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKSBfX2F0dHJpYnV0 ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGNvbmNhdF9sZW5n dGggKGNvbnN0IGNoYXIgKiwgLi4uKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmNvbmNhdF9jb3B5IChj aGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmNvbmNhdF9jb3B5 MiAoY29uc3QgY2hhciAqLCAuLi4pOwoKCgpleHRlcm4gY2hhciAqbGliaWJlcnR5X2NvbmNhdF9w dHI7CiMgMTM3ICIvc3JjL2JpbnV0aWxzLTIuMTMvaW5jbHVkZS9saWJpYmVydHkuaCIKZXh0ZXJu IGludCBmZG1hdGNoIChpbnQgZmQxLCBpbnQgZmQyKTsKCgoKCmV4dGVybiBjaGFyICogZ2V0cHdk ICh2b2lkKTsKCgoKZXh0ZXJuIGxvbmcgZ2V0X3J1bl90aW1lICh2b2lkKTsKCgoKZXh0ZXJuIGNo YXIgKmNob29zZV90ZW1wX2Jhc2UgKHZvaWQpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7 CgoKCmV4dGVybiBjaGFyICptYWtlX3RlbXBfZmlsZSAoY29uc3QgY2hhciAqKSBfX2F0dHJpYnV0 ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4gY29uc3QgY2hhciAqc3BhY2VzIChpbnQgY291 bnQpOwoKCgoKZXh0ZXJuIGludCBlcnJub19tYXggKHZvaWQpOwoKCgoKZXh0ZXJuIGNvbnN0IGNo YXIgKnN0cmVycm5vIChpbnQpOwoKCgpleHRlcm4gaW50IHN0cnRvZXJybm8gKGNvbnN0IGNoYXIg Kik7CgoKCmV4dGVybiBjaGFyICp4c3RyZXJyb3IgKGludCk7CgoKCgpleHRlcm4gaW50IHNpZ25v X21heCAodm9pZCk7CiMgMTkzICIvc3JjL2JpbnV0aWxzLTIuMTMvaW5jbHVkZS9saWJpYmVydHku aCIKZXh0ZXJuIGNvbnN0IGNoYXIgKnN0cnNpZ25vIChpbnQpOwoKCgpleHRlcm4gaW50IHN0cnRv c2lnbm8gKGNvbnN0IGNoYXIgKik7CgoKCmV4dGVybiBpbnQgeGF0ZXhpdCAodm9pZCAoKmZuKSAo dm9pZCkpOwoKCgpleHRlcm4gdm9pZCB4ZXhpdCAoaW50IHN0YXR1cykgX19hdHRyaWJ1dGVfXyAo KF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gdm9pZCB4bWFsbG9jX3NldF9wcm9ncmFtX25hbWUg KGNvbnN0IGNoYXIgKik7CgoKZXh0ZXJuIHZvaWQgeG1hbGxvY19mYWlsZWQgKHNpemVfdCkgX19h dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCmV4dGVybiB2b2lkICogeG1hbGxvYyAo c2l6ZV90KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiB2b2lkICog eHJlYWxsb2MgKHZvaWQgKiwgc2l6ZV90KTsKCgoKCmV4dGVybiB2b2lkICogeGNhbGxvYyAoc2l6 ZV90LCBzaXplX3QpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiBjaGFy ICp4c3RyZHVwIChjb25zdCBjaGFyICopIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoK CmV4dGVybiB2b2lkICogeG1lbWR1cCAoY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCkgX19h dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gY29uc3QgY2hhciBfaGV4X3Zh bHVlWzI1Nl07CmV4dGVybiB2b2lkIGhleF9pbml0ICh2b2lkKTsKIyAyNjAgIi9zcmMvYmludXRp bHMtMi4xMy9pbmNsdWRlL2xpYmliZXJ0eS5oIgpleHRlcm4gaW50IHBleGVjdXRlIChjb25zdCBj aGFyICosIGNoYXIgKiBjb25zdCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAq KiwgY2hhciAqKiwgaW50KTsKCgoKCmV4dGVybiBpbnQgcHdhaXQgKGludCwgaW50ICosIGludCk7 CgoKCgpleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqLCBjb25zdCBjaGFyICosIC4uLikgX19h dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgpleHRlcm4g aW50IHZhc3ByaW50ZiAoY2hhciAqKiwgY29uc3QgY2hhciAqLCB2YV9saXN0KQogIF9fYXR0cmli dXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwojIDI4NiAiL3NyYy9iaW51 dGlscy0yLjEzL2luY2x1ZGUvbGliaWJlcnR5LmgiCmV4dGVybiB2b2lkICogQ19hbGxvY2EgKHNp emVfdCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxMzUgIi9zcmMvYmludXRpbHMt Mi4xMy9nYXMvYXMuaCIgMgoKCiMgMSAiL3NyYy9iaW51dGlscy0yLjEzL2luY2x1ZGUvcHJvZ3Jl c3MuaCIgMQojIDEzOCAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9hcy5oIiAyCiMgMTk0ICIvc3Jj L2JpbnV0aWxzLTIuMTMvZ2FzL2FzLmgiCiMgMSAiL3NyYy9iaW51dGlscy0yLjEzL2luY2x1ZGUv Zm9wZW4tc2FtZS5oIiAxCiMgMTk1ICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2FzLmgiIDIKIyAy MTIgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvYXMuaCIKIyAxICIvc3JjL2JpbnV0aWxzLTIuMTMv Z2FzL2FzaW50bC5oIiAxCiMgMjQgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvYXNpbnRsLmgiCiMg MSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2xvY2FsZS5o IiAzCgoKc3RydWN0IGxjb252CnsKICBjaGFyICpkZWNpbWFsX3BvaW50OwogIGNoYXIgKnRob3Vz YW5kc19zZXA7CiAgY2hhciAqZ3JvdXBpbmc7CiAgY2hhciAqaW50X2N1cnJfc3ltYm9sOwogIGNo YXIgKmN1cnJlbmN5X3N5bWJvbDsKICBjaGFyICptb25fZGVjaW1hbF9wb2ludDsKICBjaGFyICpt b25fdGhvdXNhbmRzX3NlcDsKICBjaGFyICptb25fZ3JvdXBpbmc7CiAgY2hhciAqcG9zaXRpdmVf c2lnbjsKICBjaGFyICpuZWdhdGl2ZV9zaWduOwogIGNoYXIgaW50X2ZyYWNfZGlnaXRzOwogIGNo YXIgZnJhY19kaWdpdHM7CiAgY2hhciBwX2NzX3ByZWNlZGVzOwogIGNoYXIgcF9zZXBfYnlfc3Bh Y2U7CiAgY2hhciBuX2NzX3ByZWNlZGVzOwogIGNoYXIgbl9zZXBfYnlfc3BhY2U7CiAgY2hhciBw X3NpZ25fcG9zbjsKICBjaGFyIG5fc2lnbl9wb3NuOwp9OwoKCmNoYXIgKl9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIHNldGxvY2FsZSAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUp OwpzdHJ1Y3QgbGNvbnYgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGxvY2FsZWNvbnYgKHZv aWQpOwoKCnN0cnVjdCBfcmVlbnQ7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9z ZXRsb2NhbGVfciAoc3RydWN0IF9yZWVudCAqLCBpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxv Y2FsZSk7CnN0cnVjdCBsY29udiAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2xvY2FsZWNv bnZfciAoc3RydWN0IF9yZWVudCAqKTsKCgojIDI1ICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2Fz aW50bC5oIiAyCgoKCiMgMSAiLi4vaW50bC9saWJpbnRsLmgiIDEKIyA3MiAiLi4vaW50bC9saWJp bnRsLmgiCnN0cnVjdCBfbXNnX2VudAp7CiAgY29uc3QgY2hhciAqX21zZzsKICBpbnQgX21zZ19u dW1iZXI7Cn07CiMgOTQgIi4uL2ludGwvbGliaW50bC5oIgpleHRlcm4gY2hhciAqZ2V0dGV4dCAo Y29uc3QgY2hhciAqX19tc2dpZCk7CmV4dGVybiBjaGFyICpnZXR0ZXh0X18gKGNvbnN0IGNoYXIg Kl9fbXNnaWQpOwoKCgpleHRlcm4gY2hhciAqZGdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlu bmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCk7CmV4dGVybiBjaGFyICpkZ2V0dGV4dF9fIChjb25z dCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQpOwoKCgoKZXh0ZXJuIGNo YXIgKmRjZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21z Z2lkLCBpbnQgX19jYXRlZ29yeSk7CgpleHRlcm4gY2hhciAqZGNnZXR0ZXh0X18gKGNvbnN0IGNo YXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCwgaW50IF9fY2F0ZWdvcnkpOwoK CgoKCgpleHRlcm4gY2hhciAqdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lKTsK ZXh0ZXJuIGNoYXIgKnRleHRkb21haW5fXyAoY29uc3QgY2hhciAqX19kb21haW5uYW1lKTsKCgoK ZXh0ZXJuIGNoYXIgKmJpbmR0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNv bnN0IGNoYXIgKl9fZGlybmFtZSk7CgpleHRlcm4gY2hhciAqYmluZHRleHRkb21haW5fXyAoY29u c3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX2Rpcm5hbWUpOwojIDI5ICIvc3Jj L2JpbnV0aWxzLTIuMTMvZ2FzL2FzaW50bC5oIiAyCiMgMjEzICIvc3JjL2JpbnV0aWxzLTIuMTMv Z2FzL2FzLmgiIDIKCgoKCgoKCiMgMSAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9mbG9udW0uaCIg MQojIDM1ICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2Zsb251bS5oIgojIDEgIi9zcmMvYmludXRp bHMtMi4xMy9nYXMvYmlnbnVtLmgiIDEKIyA0MSAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9iaWdu dW0uaCIKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBMSVRUTEVOVU1fVFlQRTsKCgoKCgoKCmludCBi aWdudW1fY29weSAoTElUVExFTlVNX1RZUEUgKiBpbiwgaW50IGluX2xlbmd0aCwgTElUVExFTlVN X1RZUEUgKiBvdXQsIGludCBvdXRfbGVuZ3RoKTsKIyAzNiAiL3NyYy9iaW51dGlscy0yLjEzL2dh cy9mbG9udW0uaCIgMgojIDUyICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2Zsb251bS5oIgpzdHJ1 Y3QgRkxPTlVNX1NUUlVDVCB7CiAgTElUVExFTlVNX1RZUEUgKmxvdzsKICBMSVRUTEVOVU1fVFlQ RSAqaGlnaDsKICBMSVRUTEVOVU1fVFlQRSAqbGVhZGVyOwoKICBsb25nIGV4cG9uZW50OwogIGNo YXIgc2lnbjsKfTsKCnR5cGVkZWYgc3RydWN0IEZMT05VTV9TVFJVQ1QgRkxPTlVNX1RZUEU7CiMg NzUgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvZmxvbnVtLmgiCmV4dGVybiBjb25zdCBGTE9OVU1f VFlQRSBmbG9udW1fcG9zaXRpdmVfcG93ZXJzX29mX3RlbltdOwpleHRlcm4gY29uc3QgRkxPTlVN X1RZUEUgZmxvbnVtX25lZ2F0aXZlX3Bvd2Vyc19vZl90ZW5bXTsKZXh0ZXJuIGNvbnN0IGludCB0 YWJsZV9zaXplX29mX2Zsb251bV9wb3dlcnNfb2ZfdGVuOwojIDg3ICIvc3JjL2JpbnV0aWxzLTIu MTMvZ2FzL2Zsb251bS5oIgppbnQgYXRvZl9nZW5lcmljIChjaGFyICoqYWRkcmVzc19vZl9zdHJp bmdfcG9pbnRlciwgY29uc3QgY2hhciAqc3RyaW5nX29mX2RlY2ltYWxfbWFya3MsIGNvbnN0IGNo YXIgKnN0cmluZ19vZl9kZWNpbWFsX2V4cG9uZW50X21hcmtzLCBGTE9OVU1fVFlQRSAqIGFkZHJl c3Nfb2ZfZ2VuZXJpY19mbG9hdGluZ19wb2ludF9udW1iZXIpOwoKCgoKdm9pZCBmbG9udW1fY29w eSAoRkxPTlVNX1RZUEUgKiBpbiwgRkxPTlVNX1RZUEUgKiBvdXQpOwp2b2lkIGZsb251bV9tdWx0 aXAgKGNvbnN0IEZMT05VTV9UWVBFICogYSwgY29uc3QgRkxPTlVNX1RZUEUgKiBiLCBGTE9OVU1f VFlQRSAqIHByb2R1Y3QpOwojIDIyMSAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9hcy5oIiAyCgoK CgpleHRlcm4gYmZkICpzdGRvdXRwdXQ7CnR5cGVkZWYgYmZkX3ZtYSBhZGRyZXNzVDsKdHlwZWRl ZiBiZmRfc2lnbmVkX3ZtYSBvZmZzZXRUOwoKCgoKCgp0eXBlZGVmIGFkZHJlc3NUIHZhbHVlVDsK IyAyOTYgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvYXMuaCIKdHlwZWRlZiBhc2VjdGlvbiAqc2Vn VDsKCgoKCgp0eXBlZGVmIGludCBzdWJzZWdUOwoKCmV4dGVybiBzdWJzZWdUIG5vd19zdWJzZWc7 CgoKZXh0ZXJuIHNlZ1Qgbm93X3NlZzsKIyAzMjIgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvYXMu aCIKZXh0ZXJuIHNlZ1QgcmVnX3NlY3Rpb24sIGV4cHJfc2VjdGlvbjsKCmV4dGVybiBzZWdUIHRl eHRfc2VjdGlvbiwgZGF0YV9zZWN0aW9uLCBic3Nfc2VjdGlvbjsKIyAzMzkgIi9zcmMvYmludXRp bHMtMi4xMy9nYXMvYXMuaCIKZW51bSBfcmVsYXhfc3RhdGUgewoKCgogIHJzX2ZpbGwgPSAxLAoK CgoKCiAgcnNfYWxpZ24sCgoKCgoKCiAgcnNfYWxpZ25fY29kZSwKCgoKICByc19hbGlnbl90ZXN0 LAoKCgogIHJzX29yZywKCgoKICByc19icm9rZW5fd29yZCwKCgoKICByc19tYWNoaW5lX2RlcGVu ZGVudCwKCgoKCgogIHJzX3NwYWNlLAoKCgogIHJzX2xlYjEyOCwKCgogIHJzX2NmYSwKCgogIHJz X2R3YXJmMmRiZwp9OwoKdHlwZWRlZiBlbnVtIF9yZWxheF9zdGF0ZSByZWxheF9zdGF0ZVQ7CgoK CnR5cGVkZWYgdW5zaWduZWQgaW50IHJlbGF4X3N1YnN0YXRlVDsKCgoKdHlwZWRlZiBhZGRyZXNz VCByZWxheF9hZGRyZXNzVDsKCgoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIgZmxhZ19ub19jb21tZW50 czsKZXh0ZXJuIHVuc2lnbmVkIGNoYXIgZmxhZ19kZWJ1ZzsKZXh0ZXJuIHVuc2lnbmVkIGNoYXIg ZmxhZ19zaWduZWRfb3ZlcmZsb3dfb2s7CgpleHRlcm4gdW5zaWduZWQgY2hhciBmbGFnX3dhcm5f ZGlzcGxhY2VtZW50OwoKCgpleHRlcm4gaW50IGZsYWdfa2VlcF9sb2NhbHM7CgoKZXh0ZXJuIGlu dCBmbGFnX21yaTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIgZmxhZ19yZWFkb25seV9kYXRhX2lu X3RleHQ7CgoKZXh0ZXJuIGludCBmbGFnX25vX3dhcm5pbmdzOwoKCmV4dGVybiBpbnQgZmxhZ19m YXRhbF93YXJuaW5nczsKCgoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIgZmxhZ19hbHdheXNfZ2VuZXJh dGVfb3V0cHV0OwoKCmV4dGVybiB1bnNpZ25lZCBjaGFyIGZsYWdfcHJpbnRfc3RhdGlzdGljczsK CgpleHRlcm4gaW50IGZsYWdfc3RyaXBfbG9jYWxfYWJzb2x1dGU7CgoKZXh0ZXJuIGludCBmbGFn X3RyYWRpdGlvbmFsX2Zvcm1hdDsKCgpleHRlcm4gY2hhciAqb3V0X2ZpbGVfbmFtZTsKCgpleHRl cm4gY2hhciAqaW5zdHRibF9maWxlX25hbWU7CgoKZXh0ZXJuIGludCBuZWVkX3Bhc3NfMjsKCgoK ZXh0ZXJuIGludCBsaW5rcmVsYXg7CgoKZXh0ZXJuIGludCBsaXN0aW5nOwojIDQ2MyAiL3NyYy9i aW51dGlscy0yLjEzL2dhcy9hcy5oIgplbnVtIGRlYnVnX2luZm9fdHlwZSB7CiAgREVCVUdfVU5T UEVDSUZJRUQsCiAgREVCVUdfTk9ORSwKICBERUJVR19TVEFCUywKICBERUJVR19FQ09GRiwKICBE RUJVR19EV0FSRiwKICBERUJVR19EV0FSRjIKfTsKCmV4dGVybiBlbnVtIGRlYnVnX2luZm9fdHlw ZSBkZWJ1Z190eXBlOwoKCmV4dGVybiBpbnQgbWF4X21hY3JvX25lc3Q7CgoKCmV4dGVybiBpbnQg Y2h1bmtzaXplOwoKc3RydWN0IF9wc2V1ZG9fdHlwZSB7CgogIGNvbnN0IGNoYXIgKnBvY19uYW1l OwoKICB2b2lkICgqcG9jX2hhbmRsZXIpIChpbnQpOwoKICBpbnQgcG9jX3ZhbDsKfTsKCnR5cGVk ZWYgc3RydWN0IF9wc2V1ZG9fdHlwZSBwc2V1ZG9fdHlwZVM7CiMgNTM5ICIvc3JjL2JpbnV0aWxz LTIuMTMvZ2FzL2FzLmgiCnZvaWQgYXNfYmFkIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgX19h dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDEsIDIpKSk7CnZvaWQgYXNfZmF0 YWwgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAo X19wcmludGZfXywgMSwgMikpKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CnZvaWQg YXNfdHNrdHNrIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgX19hdHRyaWJ1dGVfXyAoKF9fZm9y bWF0X18gKF9fcHJpbnRmX18sIDEsIDIpKSk7CnZvaWQgYXNfd2FybiAoY29uc3QgY2hhciAqZm9y bWF0LCAuLi4pIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAxLCAyKSkp Owp2b2lkIGFzX2JhZF93aGVyZSAoY2hhciAqZmlsZSwgdW5zaWduZWQgaW50IGxpbmUsIGNvbnN0 IGNoYXIgKmZvcm1hdCwgLi4uKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZf XywgMywgNCkpKTsKdm9pZCBhc193YXJuX3doZXJlIChjaGFyICpmaWxlLCB1bnNpZ25lZCBpbnQg bGluZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9f IChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKdm9pZCBhc19hc3NlcnQgKGNvbnN0IGNoYXIgKiwgaW50 LCBjb25zdCBjaGFyICopOwp2b2lkIGFzX2Fib3J0IChjb25zdCBjaGFyICosIGludCwgY29uc3Qg Y2hhciAqKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7Cgp2b2lkIGZwcmludF92YWx1 ZSAoRklMRSAqZmlsZSwgYWRkcmVzc1QgdmFsdWUpOwp2b2lkIHNwcmludF92YWx1ZSAoY2hhciAq YnVmLCBhZGRyZXNzVCB2YWx1ZSk7CgppbnQgaGFkX2Vycm9ycyAodm9pZCk7CmludCBoYWRfd2Fy bmluZ3MgKHZvaWQpOwoKdm9pZCBwcmludF92ZXJzaW9uX2lkICh2b2lkKTsKY2hhciAqYXBwX3B1 c2ggKHZvaWQpOwpjaGFyICphdG9mX2llZWUgKGNoYXIgKnN0ciwgaW50IHdoYXRfa2luZCwgTElU VExFTlVNX1RZUEUgKiB3b3Jkcyk7CmNoYXIgKmlucHV0X3NjcnViX2luY2x1ZGVfZmlsZSAoY2hh ciAqZmlsZW5hbWUsIGNoYXIgKnBvc2l0aW9uKTsKZXh0ZXJuIHZvaWQgaW5wdXRfc2NydWJfaW5z ZXJ0X2xpbmUgKGNvbnN0IGNoYXIgKmxpbmUpOwpleHRlcm4gdm9pZCBpbnB1dF9zY3J1Yl9pbnNl cnRfZmlsZSAoY2hhciAqcGF0aCk7CmNoYXIgKmlucHV0X3NjcnViX25ld19maWxlIChjaGFyICpm aWxlbmFtZSk7CmNoYXIgKmlucHV0X3NjcnViX25leHRfYnVmZmVyIChjaGFyICoqYnVmcCk7Cmlu dCBkb19zY3J1Yl9jaGFycyAoaW50ICgqZ2V0KSAoY2hhciAqLCBpbnQpLCBjaGFyICp0bywgaW50 IHRvbGVuKTsKaW50IGdlbl90b193b3JkcyAoTElUVExFTlVNX1RZUEUgKiB3b3JkcywgaW50IHBy ZWNpc2lvbiwgbG9uZyBleHBvbmVudF9iaXRzKTsKCmludCBoYWRfZXJyICh2b2lkKTsKaW50IGln bm9yZV9pbnB1dCAodm9pZCk7CnZvaWQgY29uZF9maW5pc2hfY2hlY2sgKGludCk7CnZvaWQgY29u ZF9leGl0X21hY3JvIChpbnQpOwppbnQgc2Vlbl9hdF9sZWFzdF8xX2ZpbGUgKHZvaWQpOwp2b2lk IGFwcF9wb3AgKGNoYXIgKmFyZyk7CnZvaWQgYXNfaG93bXVjaCAoRklMRSAqIHN0cmVhbSk7CnZv aWQgYXNfcGVycm9yIChjb25zdCBjaGFyICpncmlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpOwp2 b2lkIGFzX3doZXJlIChjaGFyICoqbmFtZXAsIHVuc2lnbmVkIGludCAqbGluZXApOwp2b2lkIGJ1 bXBfbGluZV9jb3VudGVycyAodm9pZCk7CnZvaWQgZG9fc2NydWJfYmVnaW4gKGludCk7CnZvaWQg aW5wdXRfc2NydWJfYmVnaW4gKHZvaWQpOwp2b2lkIGlucHV0X3NjcnViX2Nsb3NlICh2b2lkKTsK dm9pZCBpbnB1dF9zY3J1Yl9lbmQgKHZvaWQpOwppbnQgbmV3X2xvZ2ljYWxfbGluZSAoY2hhciAq Zm5hbWUsIGludCBsaW5lX251bWJlcik7CnZvaWQgc3Vic2Vnc19iZWdpbiAodm9pZCk7CnZvaWQg c3Vic2VnX2NoYW5nZSAoc2VnVCBzZWcsIGludCBzdWJzZWcpOwpzZWdUIHN1YnNlZ19uZXcgKGNv bnN0IGNoYXIgKm5hbWUsIHN1YnNlZ1Qgc3Vic2VnKTsKc2VnVCBzdWJzZWdfZm9yY2VfbmV3IChj b25zdCBjaGFyICpuYW1lLCBzdWJzZWdUIHN1YnNlZyk7CnZvaWQgc3Vic2VnX3NldCAoc2VnVCBz ZWcsIHN1YnNlZ1Qgc3Vic2VnKTsKCnNlZ1Qgc3Vic2VnX2dldCAoY29uc3QgY2hhciAqLCBpbnQp OwoKaW50IHN1YnNlZ190ZXh0X3AgKHNlZ1QpOwoKdm9pZCBzdGFydF9kZXBlbmRlbmNpZXMgKGNo YXIgKik7CnZvaWQgcmVnaXN0ZXJfZGVwZW5kZW5jeSAoY2hhciAqKTsKdm9pZCBwcmludF9kZXBl bmRlbmNpZXMgKHZvaWQpOwoKc3RydWN0IGV4cHJlc3Npb25TOwpzdHJ1Y3QgZml4Owp0eXBlZGVm IHN0cnVjdCBzeW1ib2wgc3ltYm9sUzsKc3RydWN0IHJlbGF4X3R5cGU7CnR5cGVkZWYgc3RydWN0 IGZyYWcgZnJhZ1M7CgoKCnZhbHVlVCBhZGRfdG9fbGl0ZXJhbF9wb29sIChzeW1ib2xTICosIHZh bHVlVCwgc2VnVCwgaW50KTsKCgppbnQgY2hlY2tfZWhfZnJhbWUgKHN0cnVjdCBleHByZXNzaW9u UyAqLCB1bnNpZ25lZCBpbnQgKik7CmludCBlaF9mcmFtZV9lc3RpbWF0ZV9zaXplX2JlZm9yZV9y ZWxheCAoZnJhZ1MgKik7CmludCBlaF9mcmFtZV9yZWxheF9mcmFnIChmcmFnUyAqKTsKdm9pZCBl aF9mcmFtZV9jb252ZXJ0X2ZyYWcgKGZyYWdTICopOwoKIyAxICIvc3JjL2JpbnV0aWxzLTIuMTMv Z2FzL2V4cHIuaCIgMQojIDQzICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2V4cHIuaCIKdHlwZWRl ZiBlbnVtIHsKCiAgT19pbGxlZ2FsLAoKICBPX2Fic2VudCwKCiAgT19jb25zdGFudCwKCiAgT19z eW1ib2wsCgogIE9fc3ltYm9sX3J2YSwKCiAgT19yZWdpc3RlciwKCgoKCiAgT19iaWcsCgogIE9f dW1pbnVzLAoKICBPX2JpdF9ub3QsCgogIE9fbG9naWNhbF9ub3QsCgogIE9fbXVsdGlwbHksCgog IE9fZGl2aWRlLAoKICBPX21vZHVsdXMsCgogIE9fbGVmdF9zaGlmdCwKCiAgT19yaWdodF9zaGlm dCwKCiAgT19iaXRfaW5jbHVzaXZlX29yLAoKICBPX2JpdF9vcl9ub3QsCgogIE9fYml0X2V4Y2x1 c2l2ZV9vciwKCiAgT19iaXRfYW5kLAoKICBPX2FkZCwKCiAgT19zdWJ0cmFjdCwKCiAgT19lcSwK CiAgT19uZSwKCiAgT19sdCwKCiAgT19sZSwKCiAgT19nZSwKCiAgT19ndCwKCiAgT19sb2dpY2Fs X2FuZCwKCiAgT19sb2dpY2FsX29yLAoKICBPX2luZGV4LAoKICBPX21kMSwgT19tZDIsIE9fbWQz LCBPX21kNCwgT19tZDUsIE9fbWQ2LCBPX21kNywgT19tZDgsCiAgT19tZDksIE9fbWQxMCwgT19t ZDExLCBPX21kMTIsIE9fbWQxMywgT19tZDE0LCBPX21kMTUsIE9fbWQxNiwKICBPX21kMTcsIE9f bWQxOCwgT19tZDE5LCBPX21kMjAsIE9fbWQyMSwgT19tZDIyLCBPX21kMjMsIE9fbWQyNCwKICBP X21kMjUsIE9fbWQyNiwgT19tZDI3LCBPX21kMjgsIE9fbWQyOSwgT19tZDMwLCBPX21kMzEsIE9f bWQzMiwKCiAgT19tYXgKfSBvcGVyYXRvclQ7Cgp0eXBlZGVmIHN0cnVjdCBleHByZXNzaW9uUyB7 CgogIHN5bWJvbFMgKlhfYWRkX3N5bWJvbDsKCiAgc3ltYm9sUyAqWF9vcF9zeW1ib2w7CgogIG9m ZnNldFQgWF9hZGRfbnVtYmVyOwoKCgoKCiAgb3BlcmF0b3JUIFhfb3AgOiA4OwojIDEzOCAiL3Ny Yy9iaW51dGlscy0yLjEzL2dhcy9leHByLmgiCiAgdW5zaWduZWQgaW50IFhfdW5zaWduZWQgOiAx OwoKCgoKICB1bnNpZ25lZCBzaG9ydCBYX21kOwp9IGV4cHJlc3Npb25TOwoKCgoKCgoKZXh0ZXJu IEZMT05VTV9UWVBFIGdlbmVyaWNfZmxvYXRpbmdfcG9pbnRfbnVtYmVyOwoKZXh0ZXJuIExJVFRM RU5VTV9UWVBFIGdlbmVyaWNfYmlnbnVtW107CgoKCnR5cGVkZWYgY2hhciBvcGVyYXRvcl9yYW5r VDsKCmV4dGVybiBjaGFyIGdldF9zeW1ib2xfZW5kICh2b2lkKTsKZXh0ZXJuIHZvaWQgZXhwcl9i ZWdpbiAodm9pZCk7CmV4dGVybiB2b2lkIGV4cHJfc2V0X3ByZWNlZGVuY2UgKHZvaWQpOwpleHRl cm4gc2VnVCBleHByIChpbnQgcmFuaywgZXhwcmVzc2lvblMgKiByZXN1bHRQKTsKZXh0ZXJuIHVu c2lnbmVkIGludCBnZXRfc2luZ2xlX251bWJlciAodm9pZCk7CmV4dGVybiBzeW1ib2xTICptYWtl X2V4cHJfc3ltYm9sIChleHByZXNzaW9uUyAqIGV4cHJlc3Npb25QKTsKZXh0ZXJuIGludCBleHBy X3N5bWJvbF93aGVyZQogIChzeW1ib2xTICosIGNoYXIgKiosIHVuc2lnbmVkIGludCAqKTsKCmV4 dGVybiBzeW1ib2xTICpleHByX2J1aWxkX3Vjb25zdGFudCAob2Zmc2V0VCk7CmV4dGVybiBzeW1i b2xTICpleHByX2J1aWxkX3VuYXJ5IChvcGVyYXRvclQsIHN5bWJvbFMgKik7CmV4dGVybiBzeW1i b2xTICpleHByX2J1aWxkX2JpbmFyeSAob3BlcmF0b3JULCBzeW1ib2xTICosIHN5bWJvbFMgKik7 CmV4dGVybiBzeW1ib2xTICpleHByX2J1aWxkX2RvdCAodm9pZCk7CiMgNjEyICIvc3JjL2JpbnV0 aWxzLTIuMTMvZ2FzL2FzLmgiIDIKCgojIDEgInRhcmctZW52LmgiIDEKIyAxICIvc3JjL2JpbnV0 aWxzLTIuMTMvZ2FzL2NvbmZpZy90ZS1nZW5lcmljLmgiIDEKIyAxOSAiL3NyYy9iaW51dGlscy0y LjEzL2dhcy9jb25maWcvdGUtZ2VuZXJpYy5oIgojIDEgIm9iai1mb3JtYXQuaCIgMQojIDEgIi9z cmMvYmludXRpbHMtMi4xMy9nYXMvY29uZmlnL29iai1lbGYuaCIgMQojIDQwICIvc3JjL2JpbnV0 aWxzLTIuMTMvZ2FzL2NvbmZpZy9vYmotZWxmLmgiCiMgMSAiL3NyYy9iaW51dGlscy0yLjEzL2Jm ZC9lbGYtYmZkLmgiIDEKIyAyNSAiL3NyYy9iaW51dGlscy0yLjEzL2JmZC9lbGYtYmZkLmgiCiMg MSAiL3NyYy9iaW51dGlscy0yLjEzL2luY2x1ZGUvZWxmL2NvbW1vbi5oIiAxCiMgMjYgIi9zcmMv YmludXRpbHMtMi4xMy9iZmQvZWxmLWJmZC5oIiAyCiMgMSAiL3NyYy9iaW51dGlscy0yLjEzL2lu Y2x1ZGUvZWxmL2ludGVybmFsLmgiIDEKIyA0NCAiL3NyYy9iaW51dGlscy0yLjEzL2luY2x1ZGUv ZWxmL2ludGVybmFsLmgiCnR5cGVkZWYgc3RydWN0IGVsZl9pbnRlcm5hbF9laGRyIHsKICB1bnNp Z25lZCBjaGFyIGVfaWRlbnRbMTZdOwogIGJmZF92bWEgZV9lbnRyeTsKICBiZmRfc2l6ZV90eXBl IGVfcGhvZmY7CiAgYmZkX3NpemVfdHlwZSBlX3Nob2ZmOwogIHVuc2lnbmVkIGxvbmcgZV92ZXJz aW9uOwogIHVuc2lnbmVkIGxvbmcgZV9mbGFnczsKICB1bnNpZ25lZCBzaG9ydCBlX3R5cGU7CiAg dW5zaWduZWQgc2hvcnQgZV9tYWNoaW5lOwogIHVuc2lnbmVkIGludCBlX2Voc2l6ZTsKICB1bnNp Z25lZCBpbnQgZV9waGVudHNpemU7CiAgdW5zaWduZWQgaW50IGVfcGhudW07CiAgdW5zaWduZWQg aW50IGVfc2hlbnRzaXplOwogIHVuc2lnbmVkIGludCBlX3NobnVtOwogIHVuc2lnbmVkIGludCBl X3Noc3RybmR4Owp9IEVsZl9JbnRlcm5hbF9FaGRyOwojIDY4ICIvc3JjL2JpbnV0aWxzLTIuMTMv aW5jbHVkZS9lbGYvaW50ZXJuYWwuaCIKc3RydWN0IGVsZl9pbnRlcm5hbF9waGRyIHsKICB1bnNp Z25lZCBsb25nIHBfdHlwZTsKICB1bnNpZ25lZCBsb25nIHBfZmxhZ3M7CiAgYmZkX3ZtYSBwX29m ZnNldDsKICBiZmRfdm1hIHBfdmFkZHI7CiAgYmZkX3ZtYSBwX3BhZGRyOwogIGJmZF92bWEgcF9m aWxlc3o7CiAgYmZkX3ZtYSBwX21lbXN6OwogIGJmZF92bWEgcF9hbGlnbjsKfTsKCnR5cGVkZWYg c3RydWN0IGVsZl9pbnRlcm5hbF9waGRyIEVsZl9JbnRlcm5hbF9QaGRyOwoKCgoKCgoKdHlwZWRl ZiBzdHJ1Y3QgZWxmX2ludGVybmFsX3NoZHIgewogIHVuc2lnbmVkIGludCBzaF9uYW1lOwogIHVu c2lnbmVkIGludCBzaF90eXBlOwogIGJmZF92bWEgc2hfZmxhZ3M7CiAgYmZkX3ZtYSBzaF9hZGRy OwogIGJmZF9zaXplX3R5cGUgc2hfc2l6ZTsKICBiZmRfc2l6ZV90eXBlIHNoX2VudHNpemU7CiAg dW5zaWduZWQgbG9uZyBzaF9saW5rOwogIHVuc2lnbmVkIGxvbmcgc2hfaW5mbzsKICBmaWxlX3B0 ciBzaF9vZmZzZXQ7CiAgdW5zaWduZWQgaW50IHNoX2FkZHJhbGlnbjsKCgogIGFzZWN0aW9uICog YmZkX3NlY3Rpb247CiAgdW5zaWduZWQgY2hhciAqY29udGVudHM7Cn0gRWxmX0ludGVybmFsX1No ZHI7CiMgMTExICIvc3JjL2JpbnV0aWxzLTIuMTMvaW5jbHVkZS9lbGYvaW50ZXJuYWwuaCIKc3Ry dWN0IGVsZl9pbnRlcm5hbF9zeW0gewogIGJmZF92bWEgc3RfdmFsdWU7CiAgYmZkX3ZtYSBzdF9z aXplOwogIHVuc2lnbmVkIGxvbmcgc3RfbmFtZTsKICB1bnNpZ25lZCBjaGFyIHN0X2luZm87CiAg dW5zaWduZWQgY2hhciBzdF9vdGhlcjsKICB1bnNpZ25lZCBpbnQgc3Rfc2huZHg7Cn07Cgp0eXBl ZGVmIHN0cnVjdCBlbGZfaW50ZXJuYWxfc3ltIEVsZl9JbnRlcm5hbF9TeW07CiMgMTI5ICIvc3Jj L2JpbnV0aWxzLTIuMTMvaW5jbHVkZS9lbGYvaW50ZXJuYWwuaCIKdHlwZWRlZiBzdHJ1Y3QgZWxm X2ludGVybmFsX25vdGUgewogIHVuc2lnbmVkIGxvbmcgbmFtZXN6OwogIHVuc2lnbmVkIGxvbmcg ZGVzY3N6OwogIHVuc2lnbmVkIGxvbmcgdHlwZTsKICBjaGFyICogbmFtZWRhdGE7CiAgY2hhciAq IGRlc2NkYXRhOwogIGJmZF92bWEgZGVzY3BvczsKfSBFbGZfSW50ZXJuYWxfTm90ZTsKCgoKCgp0 eXBlZGVmIHN0cnVjdCBlbGZfaW50ZXJuYWxfcmVsIHsKICBiZmRfdm1hIHJfb2Zmc2V0OwoKICBi ZmRfdm1hIHJfaW5mbzsKfSBFbGZfSW50ZXJuYWxfUmVsOwoKCgoKCgp0eXBlZGVmIHN0cnVjdCBl bGZfaW50ZXJuYWxfcmVsYSB7CiAgYmZkX3ZtYSByX29mZnNldDsKICBiZmRfdm1hIHJfaW5mbzsK ICBiZmRfdm1hIHJfYWRkZW5kOwp9IEVsZl9JbnRlcm5hbF9SZWxhOwojIDE2NiAiL3NyYy9iaW51 dGlscy0yLjEzL2luY2x1ZGUvZWxmL2ludGVybmFsLmgiCnR5cGVkZWYgc3RydWN0IGVsZl9pbnRl cm5hbF9keW4gewoKICBiZmRfdm1hIGRfdGFnOwogIHVuaW9uIHsKCiAgICBiZmRfdm1hIGRfdmFs OwogICAgYmZkX3ZtYSBkX3B0cjsKICB9IGRfdW47Cn0gRWxmX0ludGVybmFsX0R5bjsKIyAxODMg Ii9zcmMvYmludXRpbHMtMi4xMy9pbmNsdWRlL2VsZi9pbnRlcm5hbC5oIgp0eXBlZGVmIHN0cnVj dCBlbGZfaW50ZXJuYWxfdmVyZGVmIHsKICB1bnNpZ25lZCBzaG9ydCB2ZF92ZXJzaW9uOwogIHVu c2lnbmVkIHNob3J0IHZkX2ZsYWdzOwogIHVuc2lnbmVkIHNob3J0IHZkX25keDsKICB1bnNpZ25l ZCBzaG9ydCB2ZF9jbnQ7CiAgdW5zaWduZWQgbG9uZyB2ZF9oYXNoOwogIHVuc2lnbmVkIGxvbmcg dmRfYXV4OwogIHVuc2lnbmVkIGxvbmcgdmRfbmV4dDsKCgoKICBiZmQgKnZkX2JmZDsKICBjb25z dCBjaGFyICp2ZF9ub2RlbmFtZTsKICBzdHJ1Y3QgZWxmX2ludGVybmFsX3ZlcmRlZiAqdmRfbmV4 dGRlZjsKICBzdHJ1Y3QgZWxmX2ludGVybmFsX3ZlcmRhdXggKnZkX2F1eHB0cjsKICB1bnNpZ25l ZCBpbnQgdmRfZXhwX3JlZm5vOwp9IEVsZl9JbnRlcm5hbF9WZXJkZWY7CgoKCnR5cGVkZWYgc3Ry dWN0IGVsZl9pbnRlcm5hbF92ZXJkYXV4IHsKICB1bnNpZ25lZCBsb25nIHZkYV9uYW1lOwogIHVu c2lnbmVkIGxvbmcgdmRhX25leHQ7CgoKCiAgY29uc3QgY2hhciAqdmRhX25vZGVuYW1lOwogIHN0 cnVjdCBlbGZfaW50ZXJuYWxfdmVyZGF1eCAqdmRhX25leHRwdHI7Cn0gRWxmX0ludGVybmFsX1Zl cmRhdXg7CgoKCnR5cGVkZWYgc3RydWN0IGVsZl9pbnRlcm5hbF92ZXJuZWVkIHsKICB1bnNpZ25l ZCBzaG9ydCB2bl92ZXJzaW9uOwogIHVuc2lnbmVkIHNob3J0IHZuX2NudDsKICB1bnNpZ25lZCBs b25nIHZuX2ZpbGU7CiAgdW5zaWduZWQgbG9uZyB2bl9hdXg7CiAgdW5zaWduZWQgbG9uZyB2bl9u ZXh0OwoKCgogIGJmZCAqdm5fYmZkOwogIGNvbnN0IGNoYXIgKnZuX2ZpbGVuYW1lOwogIHN0cnVj dCBlbGZfaW50ZXJuYWxfdmVybmF1eCAqdm5fYXV4cHRyOwogIHN0cnVjdCBlbGZfaW50ZXJuYWxf dmVybmVlZCAqdm5fbmV4dHJlZjsKfSBFbGZfSW50ZXJuYWxfVmVybmVlZDsKCgoKdHlwZWRlZiBz dHJ1Y3QgZWxmX2ludGVybmFsX3Zlcm5hdXggewogIHVuc2lnbmVkIGxvbmcgdm5hX2hhc2g7CiAg dW5zaWduZWQgc2hvcnQgdm5hX2ZsYWdzOwogIHVuc2lnbmVkIHNob3J0IHZuYV9vdGhlcjsKICB1 bnNpZ25lZCBsb25nIHZuYV9uYW1lOwogIHVuc2lnbmVkIGxvbmcgdm5hX25leHQ7CgoKCiAgY29u c3QgY2hhciAqdm5hX25vZGVuYW1lOwogIHN0cnVjdCBlbGZfaW50ZXJuYWxfdmVybmF1eCAqdm5h X25leHRwdHI7Cn0gRWxmX0ludGVybmFsX1Zlcm5hdXg7CgoKCgp0eXBlZGVmIHN0cnVjdCBlbGZf aW50ZXJuYWxfdmVyc3ltIHsKICB1bnNpZ25lZCBzaG9ydCB2c192ZXJzOwp9IEVsZl9JbnRlcm5h bF9WZXJzeW07CgoKdHlwZWRlZiBzdHJ1Y3QKewogIHVuc2lnbmVkIHNob3J0IGludCBzaV9ib3Vu ZHRvOwogIHVuc2lnbmVkIHNob3J0IGludCBzaV9mbGFnczsKfSBFbGZfSW50ZXJuYWxfU3ltaW5m bzsKIyAyODcgIi9zcmMvYmludXRpbHMtMi4xMy9pbmNsdWRlL2VsZi9pbnRlcm5hbC5oIgpzdHJ1 Y3QgZWxmX3NlZ21lbnRfbWFwCnsKCiAgc3RydWN0IGVsZl9zZWdtZW50X21hcCAqbmV4dDsKCiAg dW5zaWduZWQgbG9uZyBwX3R5cGU7CgogIHVuc2lnbmVkIGxvbmcgcF9mbGFnczsKCiAgYmZkX3Zt YSBwX3BhZGRyOwoKCiAgdW5zaWduZWQgaW50IHBfZmxhZ3NfdmFsaWQgOiAxOwoKCiAgdW5zaWdu ZWQgaW50IHBfcGFkZHJfdmFsaWQgOiAxOwoKICB1bnNpZ25lZCBpbnQgaW5jbHVkZXNfZmlsZWhk ciA6IDE7CgogIHVuc2lnbmVkIGludCBpbmNsdWRlc19waGRycyA6IDE7CgogIHVuc2lnbmVkIGlu dCBjb3VudDsKCiAgYXNlY3Rpb24gKnNlY3Rpb25zWzFdOwp9OwojIDI3ICIvc3JjL2JpbnV0aWxz LTIuMTMvYmZkL2VsZi1iZmQuaCIgMgojIDEgIi9zcmMvYmludXRpbHMtMi4xMy9pbmNsdWRlL2Vs Zi9leHRlcm5hbC5oIiAxCiMgNDAgIi9zcmMvYmludXRpbHMtMi4xMy9pbmNsdWRlL2VsZi9leHRl cm5hbC5oIgp0eXBlZGVmIHN0cnVjdCB7CiAgdW5zaWduZWQgY2hhciBlX2lkZW50WzE2XTsKICB1 bnNpZ25lZCBjaGFyIGVfdHlwZVsyXTsKICB1bnNpZ25lZCBjaGFyIGVfbWFjaGluZVsyXTsKICB1 bnNpZ25lZCBjaGFyIGVfdmVyc2lvbls0XTsKICB1bnNpZ25lZCBjaGFyIGVfZW50cnlbNF07CiAg dW5zaWduZWQgY2hhciBlX3Bob2ZmWzRdOwogIHVuc2lnbmVkIGNoYXIgZV9zaG9mZls0XTsKICB1 bnNpZ25lZCBjaGFyIGVfZmxhZ3NbNF07CiAgdW5zaWduZWQgY2hhciBlX2Voc2l6ZVsyXTsKICB1 bnNpZ25lZCBjaGFyIGVfcGhlbnRzaXplWzJdOwogIHVuc2lnbmVkIGNoYXIgZV9waG51bVsyXTsK ICB1bnNpZ25lZCBjaGFyIGVfc2hlbnRzaXplWzJdOwogIHVuc2lnbmVkIGNoYXIgZV9zaG51bVsy XTsKICB1bnNpZ25lZCBjaGFyIGVfc2hzdHJuZHhbMl07Cn0gRWxmMzJfRXh0ZXJuYWxfRWhkcjsK CnR5cGVkZWYgc3RydWN0IHsKICB1bnNpZ25lZCBjaGFyIGVfaWRlbnRbMTZdOwogIHVuc2lnbmVk IGNoYXIgZV90eXBlWzJdOwogIHVuc2lnbmVkIGNoYXIgZV9tYWNoaW5lWzJdOwogIHVuc2lnbmVk IGNoYXIgZV92ZXJzaW9uWzRdOwogIHVuc2lnbmVkIGNoYXIgZV9lbnRyeVs4XTsKICB1bnNpZ25l ZCBjaGFyIGVfcGhvZmZbOF07CiAgdW5zaWduZWQgY2hhciBlX3Nob2ZmWzhdOwogIHVuc2lnbmVk IGNoYXIgZV9mbGFnc1s0XTsKICB1bnNpZ25lZCBjaGFyIGVfZWhzaXplWzJdOwogIHVuc2lnbmVk IGNoYXIgZV9waGVudHNpemVbMl07CiAgdW5zaWduZWQgY2hhciBlX3BobnVtWzJdOwogIHVuc2ln bmVkIGNoYXIgZV9zaGVudHNpemVbMl07CiAgdW5zaWduZWQgY2hhciBlX3NobnVtWzJdOwogIHVu c2lnbmVkIGNoYXIgZV9zaHN0cm5keFsyXTsKfSBFbGY2NF9FeHRlcm5hbF9FaGRyOwoKCgp0eXBl ZGVmIHN0cnVjdCB7CiAgdW5zaWduZWQgY2hhciBwX3R5cGVbNF07CiAgdW5zaWduZWQgY2hhciBw X29mZnNldFs0XTsKICB1bnNpZ25lZCBjaGFyIHBfdmFkZHJbNF07CiAgdW5zaWduZWQgY2hhciBw X3BhZGRyWzRdOwogIHVuc2lnbmVkIGNoYXIgcF9maWxlc3pbNF07CiAgdW5zaWduZWQgY2hhciBw X21lbXN6WzRdOwogIHVuc2lnbmVkIGNoYXIgcF9mbGFnc1s0XTsKICB1bnNpZ25lZCBjaGFyIHBf YWxpZ25bNF07Cn0gRWxmMzJfRXh0ZXJuYWxfUGhkcjsKCnR5cGVkZWYgc3RydWN0IHsKICB1bnNp Z25lZCBjaGFyIHBfdHlwZVs0XTsKICB1bnNpZ25lZCBjaGFyIHBfZmxhZ3NbNF07CiAgdW5zaWdu ZWQgY2hhciBwX29mZnNldFs4XTsKICB1bnNpZ25lZCBjaGFyIHBfdmFkZHJbOF07CiAgdW5zaWdu ZWQgY2hhciBwX3BhZGRyWzhdOwogIHVuc2lnbmVkIGNoYXIgcF9maWxlc3pbOF07CiAgdW5zaWdu ZWQgY2hhciBwX21lbXN6WzhdOwogIHVuc2lnbmVkIGNoYXIgcF9hbGlnbls4XTsKfSBFbGY2NF9F eHRlcm5hbF9QaGRyOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgdW5zaWduZWQgY2hhciBzaF9uYW1l WzRdOwogIHVuc2lnbmVkIGNoYXIgc2hfdHlwZVs0XTsKICB1bnNpZ25lZCBjaGFyIHNoX2ZsYWdz WzRdOwogIHVuc2lnbmVkIGNoYXIgc2hfYWRkcls0XTsKICB1bnNpZ25lZCBjaGFyIHNoX29mZnNl dFs0XTsKICB1bnNpZ25lZCBjaGFyIHNoX3NpemVbNF07CiAgdW5zaWduZWQgY2hhciBzaF9saW5r WzRdOwogIHVuc2lnbmVkIGNoYXIgc2hfaW5mb1s0XTsKICB1bnNpZ25lZCBjaGFyIHNoX2FkZHJh bGlnbls0XTsKICB1bnNpZ25lZCBjaGFyIHNoX2VudHNpemVbNF07Cn0gRWxmMzJfRXh0ZXJuYWxf U2hkcjsKCnR5cGVkZWYgc3RydWN0IHsKICB1bnNpZ25lZCBjaGFyIHNoX25hbWVbNF07CiAgdW5z aWduZWQgY2hhciBzaF90eXBlWzRdOwogIHVuc2lnbmVkIGNoYXIgc2hfZmxhZ3NbOF07CiAgdW5z aWduZWQgY2hhciBzaF9hZGRyWzhdOwogIHVuc2lnbmVkIGNoYXIgc2hfb2Zmc2V0WzhdOwogIHVu c2lnbmVkIGNoYXIgc2hfc2l6ZVs4XTsKICB1bnNpZ25lZCBjaGFyIHNoX2xpbmtbNF07CiAgdW5z aWduZWQgY2hhciBzaF9pbmZvWzRdOwogIHVuc2lnbmVkIGNoYXIgc2hfYWRkcmFsaWduWzhdOwog IHVuc2lnbmVkIGNoYXIgc2hfZW50c2l6ZVs4XTsKfSBFbGY2NF9FeHRlcm5hbF9TaGRyOwoKCgp0 eXBlZGVmIHN0cnVjdCB7CiAgdW5zaWduZWQgY2hhciBzdF9uYW1lWzRdOwogIHVuc2lnbmVkIGNo YXIgc3RfdmFsdWVbNF07CiAgdW5zaWduZWQgY2hhciBzdF9zaXplWzRdOwogIHVuc2lnbmVkIGNo YXIgc3RfaW5mb1sxXTsKICB1bnNpZ25lZCBjaGFyIHN0X290aGVyWzFdOwogIHVuc2lnbmVkIGNo YXIgc3Rfc2huZHhbMl07Cn0gRWxmMzJfRXh0ZXJuYWxfU3ltOwoKdHlwZWRlZiBzdHJ1Y3Qgewog IHVuc2lnbmVkIGNoYXIgc3RfbmFtZVs0XTsKICB1bnNpZ25lZCBjaGFyIHN0X2luZm9bMV07CiAg dW5zaWduZWQgY2hhciBzdF9vdGhlclsxXTsKICB1bnNpZ25lZCBjaGFyIHN0X3NobmR4WzJdOwog IHVuc2lnbmVkIGNoYXIgc3RfdmFsdWVbOF07CiAgdW5zaWduZWQgY2hhciBzdF9zaXplWzhdOwp9 IEVsZjY0X0V4dGVybmFsX1N5bTsKCnR5cGVkZWYgc3RydWN0IHsKICB1bnNpZ25lZCBjaGFyIGVz dF9zaG5keFs0XTsKfSBFbGZfRXh0ZXJuYWxfU3ltX1NobmR4OwoKCgp0eXBlZGVmIHN0cnVjdCB7 CiAgdW5zaWduZWQgY2hhciBuYW1lc3pbNF07CiAgdW5zaWduZWQgY2hhciBkZXNjc3pbNF07CiAg dW5zaWduZWQgY2hhciB0eXBlWzRdOwogIGNoYXIgbmFtZVsxXTsKfSBFbGZfRXh0ZXJuYWxfTm90 ZTsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgdW5zaWduZWQgY2hhciByX29mZnNldFs0XTsKICB1bnNp Z25lZCBjaGFyIHJfaW5mb1s0XTsKfSBFbGYzMl9FeHRlcm5hbF9SZWw7Cgp0eXBlZGVmIHN0cnVj dCB7CiAgdW5zaWduZWQgY2hhciByX29mZnNldFs0XTsKICB1bnNpZ25lZCBjaGFyIHJfaW5mb1s0 XTsKICB1bnNpZ25lZCBjaGFyIHJfYWRkZW5kWzRdOwp9IEVsZjMyX0V4dGVybmFsX1JlbGE7Cgp0 eXBlZGVmIHN0cnVjdCB7CiAgdW5zaWduZWQgY2hhciByX29mZnNldFs4XTsKICB1bnNpZ25lZCBj aGFyIHJfaW5mb1s4XTsKfSBFbGY2NF9FeHRlcm5hbF9SZWw7Cgp0eXBlZGVmIHN0cnVjdCB7CiAg dW5zaWduZWQgY2hhciByX29mZnNldFs4XTsKICB1bnNpZ25lZCBjaGFyIHJfaW5mb1s4XTsKICB1 bnNpZ25lZCBjaGFyIHJfYWRkZW5kWzhdOwp9IEVsZjY0X0V4dGVybmFsX1JlbGE7CgoKCnR5cGVk ZWYgc3RydWN0IHsKICB1bnNpZ25lZCBjaGFyIGRfdGFnWzRdOwogIHVuaW9uIHsKICAgIHVuc2ln bmVkIGNoYXIgZF92YWxbNF07CiAgICB1bnNpZ25lZCBjaGFyIGRfcHRyWzRdOwogIH0gZF91bjsK fSBFbGYzMl9FeHRlcm5hbF9EeW47Cgp0eXBlZGVmIHN0cnVjdCB7CiAgdW5zaWduZWQgY2hhciBk X3RhZ1s4XTsKICB1bmlvbiB7CiAgICB1bnNpZ25lZCBjaGFyIGRfdmFsWzhdOwogICAgdW5zaWdu ZWQgY2hhciBkX3B0cls4XTsKICB9IGRfdW47Cn0gRWxmNjRfRXh0ZXJuYWxfRHluOwoKCgoKCgoK dHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVkIGNoYXIgdmRfdmVyc2lvblsyXTsKICB1bnNpZ25l ZCBjaGFyIHZkX2ZsYWdzWzJdOwogIHVuc2lnbmVkIGNoYXIgdmRfbmR4WzJdOwogIHVuc2lnbmVk IGNoYXIgdmRfY250WzJdOwogIHVuc2lnbmVkIGNoYXIgdmRfaGFzaFs0XTsKICB1bnNpZ25lZCBj aGFyIHZkX2F1eFs0XTsKICB1bnNpZ25lZCBjaGFyIHZkX25leHRbNF07Cn0gRWxmX0V4dGVybmFs X1ZlcmRlZjsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVkIGNoYXIgdmRhX25hbWVbNF07 CiAgdW5zaWduZWQgY2hhciB2ZGFfbmV4dFs0XTsKfSBFbGZfRXh0ZXJuYWxfVmVyZGF1eDsKCgoK dHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVkIGNoYXIgdm5fdmVyc2lvblsyXTsKICB1bnNpZ25l ZCBjaGFyIHZuX2NudFsyXTsKICB1bnNpZ25lZCBjaGFyIHZuX2ZpbGVbNF07CiAgdW5zaWduZWQg Y2hhciB2bl9hdXhbNF07CiAgdW5zaWduZWQgY2hhciB2bl9uZXh0WzRdOwp9IEVsZl9FeHRlcm5h bF9WZXJuZWVkOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgdW5zaWduZWQgY2hhciB2bmFfaGFzaFs0 XTsKICB1bnNpZ25lZCBjaGFyIHZuYV9mbGFnc1syXTsKICB1bnNpZ25lZCBjaGFyIHZuYV9vdGhl clsyXTsKICB1bnNpZ25lZCBjaGFyIHZuYV9uYW1lWzRdOwogIHVuc2lnbmVkIGNoYXIgdm5hX25l eHRbNF07Cn0gRWxmX0V4dGVybmFsX1Zlcm5hdXg7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgdW5z aWduZWQgY2hhciB2c192ZXJzWzJdOwp9CgogIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQoKICBF bGZfRXh0ZXJuYWxfVmVyc3ltOwoKCnR5cGVkZWYgc3RydWN0CnsKICB1bnNpZ25lZCBjaGFyIHNp X2JvdW5kdG9bMl07CiAgdW5zaWduZWQgY2hhciBzaV9mbGFnc1syXTsKfSBFbGZfRXh0ZXJuYWxf U3ltaW5mbzsKIyAyOCAiL3NyYy9iaW51dGlscy0yLjEzL2JmZC9lbGYtYmZkLmgiIDIKIyAxICIv c3JjL2JpbnV0aWxzLTIuMTMvaW5jbHVkZS9iZmRsaW5rLmgiIDEKIyAyNiAiL3NyYy9iaW51dGls cy0yLjEzL2luY2x1ZGUvYmZkbGluay5oIgplbnVtIGJmZF9saW5rX3N0cmlwCnsKICBzdHJpcF9u b25lLAogIHN0cmlwX2RlYnVnZ2VyLAogIHN0cmlwX3NvbWUsCiAgc3RyaXBfYWxsCn07CgoKCmVu dW0gYmZkX2xpbmtfZGlzY2FyZAp7CiAgZGlzY2FyZF9zZWNfbWVyZ2UsCgogIGRpc2NhcmRfbm9u ZSwKICBkaXNjYXJkX2wsCiAgZGlzY2FyZF9hbGwKfTsKCgoKCmVudW0gYmZkX2xpbmtfaGFzaF90 YWJsZV90eXBlCiAgewogICAgYmZkX2xpbmtfZ2VuZXJpY19oYXNoX3RhYmxlLAogICAgYmZkX2xp bmtfZWxmX2hhc2hfdGFibGUKICB9OwoKCgoKZW51bSBiZmRfbGlua19oYXNoX3R5cGUKewogIGJm ZF9saW5rX2hhc2hfbmV3LAogIGJmZF9saW5rX2hhc2hfdW5kZWZpbmVkLAogIGJmZF9saW5rX2hh c2hfdW5kZWZ3ZWFrLAogIGJmZF9saW5rX2hhc2hfZGVmaW5lZCwKICBiZmRfbGlua19oYXNoX2Rl ZndlYWssCiAgYmZkX2xpbmtfaGFzaF9jb21tb24sCiAgYmZkX2xpbmtfaGFzaF9pbmRpcmVjdCwK ICBiZmRfbGlua19oYXNoX3dhcm5pbmcKfTsKCgoKCnN0cnVjdCBiZmRfbGlua19oYXNoX2VudHJ5 CnsKCiAgc3RydWN0IGJmZF9oYXNoX2VudHJ5IHJvb3Q7CgogIGVudW0gYmZkX2xpbmtfaGFzaF90 eXBlIHR5cGU7CiMgOTcgIi9zcmMvYmludXRpbHMtMi4xMy9pbmNsdWRlL2JmZGxpbmsuaCIKICBz dHJ1Y3QgYmZkX2xpbmtfaGFzaF9lbnRyeSAqbmV4dDsKCiAgdW5pb24KICAgIHsKCgogICAgICBz dHJ1Y3QKICAgICAgICB7CiAgICAgICAgICBiZmQgKmFiZmQ7CiAgICAgICAgfSB1bmRlZjsKCiAg ICAgIHN0cnVjdAogICAgICAgIHsKICAgICAgICAgIGJmZF92bWEgdmFsdWU7CiAgICAgICAgICBh c2VjdGlvbiAqc2VjdGlvbjsKICAgICAgICB9IGRlZjsKCiAgICAgIHN0cnVjdAogICAgICAgIHsK ICAgICAgICAgIHN0cnVjdCBiZmRfbGlua19oYXNoX2VudHJ5ICpsaW5rOwogICAgICAgICAgY29u c3QgY2hhciAqd2FybmluZzsKICAgICAgICB9IGk7CgogICAgICBzdHJ1Y3QKICAgICAgICB7CiMg MTMxICIvc3JjL2JpbnV0aWxzLTIuMTMvaW5jbHVkZS9iZmRsaW5rLmgiCiAgICAgICAgICBiZmRf c2l6ZV90eXBlIHNpemU7CiAgICAgICAgICBzdHJ1Y3QgYmZkX2xpbmtfaGFzaF9jb21tb25fZW50 cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhbGlnbm1lbnRfcG93 ZXI7CiAgICAgICAgICAgICAgYXNlY3Rpb24gKnNlY3Rpb247CiAgICAgICAgICAgIH0gKnA7CiAg ICAgICAgfSBjOwogICAgfSB1Owp9OwoKCgoKc3RydWN0IGJmZF9saW5rX2hhc2hfdGFibGUKewoK ICBzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgdGFibGU7CgoKCgogIGNvbnN0IGJmZF90YXJnZXQgKmNy ZWF0b3I7CgoKICBzdHJ1Y3QgYmZkX2xpbmtfaGFzaF9lbnRyeSAqdW5kZWZzOwoKICBzdHJ1Y3Qg YmZkX2xpbmtfaGFzaF9lbnRyeSAqdW5kZWZzX3RhaWw7CgogIGVudW0gYmZkX2xpbmtfaGFzaF90 YWJsZV90eXBlIHR5cGU7Cn07CgoKCgpleHRlcm4gc3RydWN0IGJmZF9saW5rX2hhc2hfZW50cnkg KmJmZF9saW5rX2hhc2hfbG9va3VwCiAgKHN0cnVjdCBiZmRfbGlua19oYXNoX3RhYmxlICosIGNv bnN0IGNoYXIgKiwgYm9vbGVhbiBjcmVhdGUsIGJvb2xlYW4gY29weSwgYm9vbGVhbiBmb2xsb3cp OwoKCgoKCgpleHRlcm4gc3RydWN0IGJmZF9saW5rX2hhc2hfZW50cnkgKmJmZF93cmFwcGVkX2xp bmtfaGFzaF9sb29rdXAKICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGNvbnN0IGNo YXIgKiwgYm9vbGVhbiwgYm9vbGVhbiwgYm9vbGVhbik7CgoKCmV4dGVybiB2b2lkIGJmZF9saW5r X2hhc2hfdHJhdmVyc2UKICAoc3RydWN0IGJmZF9saW5rX2hhc2hfdGFibGUgKiwgYm9vbGVhbiAo KikgKHN0cnVjdCBiZmRfbGlua19oYXNoX2VudHJ5ICosIHZvaWQgKiksIHZvaWQgKik7CgoKCgpl eHRlcm4gdm9pZCBiZmRfbGlua19hZGRfdW5kZWYKICAoc3RydWN0IGJmZF9saW5rX2hhc2hfdGFi bGUgKiwgc3RydWN0IGJmZF9saW5rX2hhc2hfZW50cnkgKik7CgpzdHJ1Y3QgYmZkX3N5bV9jaGFp bgp7CiAgc3RydWN0IGJmZF9zeW1fY2hhaW4gKm5leHQ7CiAgY29uc3QgY2hhciAqbmFtZTsKfTsK CgoKCnN0cnVjdCBiZmRfbGlua19pbmZvCnsKCiAgY29uc3Qgc3RydWN0IGJmZF9saW5rX2NhbGxi YWNrcyAqY2FsbGJhY2tzOwoKCiAgYm9vbGVhbiByZWxvY2F0ZWFibGU7CgoKCiAgYm9vbGVhbiBl bWl0cmVsb2NhdGlvbnM7CgoKCgogIGJvb2xlYW4gdGFza19saW5rOwoKCiAgYm9vbGVhbiBzaGFy ZWQ7CgoKICBib29sZWFuIHN5bWJvbGljOwoKCgogIGJvb2xlYW4gZXhwb3J0X2R5bmFtaWM7CgoK ICBib29sZWFuIHN0YXRpY19saW5rOwoKCgoKCiAgYm9vbGVhbiB0cmFkaXRpb25hbF9mb3JtYXQ7 CgoKCiAgYm9vbGVhbiBvcHRpbWl6ZTsKCgoKICBib29sZWFuIG5vX3VuZGVmaW5lZDsKIyAyNTIg Ii9zcmMvYmludXRpbHMtMi4xMy9pbmNsdWRlL2JmZGxpbmsuaCIKICBib29sZWFuIGFsbG93X3No bGliX3VuZGVmaW5lZDsKCgogIGJvb2xlYW4gYWxsb3dfbXVsdGlwbGVfZGVmaW5pdGlvbjsKCgog IGVudW0gYmZkX2xpbmtfc3RyaXAgc3RyaXA7CgoKICBlbnVtIGJmZF9saW5rX2Rpc2NhcmQgZGlz Y2FyZDsKCgoKICBib29sZWFuIGtlZXBfbWVtb3J5OwoKCgogIGJmZCAqaW5wdXRfYmZkczsKCgoK CgoKICBhc2VjdGlvbiAqY3JlYXRlX29iamVjdF9zeW1ib2xzX3NlY3Rpb247CgoKCiAgc3RydWN0 IGJmZF9zeW1fY2hhaW4gKmdjX3N5bV9saXN0OwoKCiAgc3RydWN0IGJmZF9saW5rX2hhc2hfdGFi bGUgKmhhc2g7CgoKCiAgc3RydWN0IGJmZF9oYXNoX3RhYmxlICprZWVwX2hhc2g7CgoKCiAgYm9v bGVhbiBub3RpY2VfYWxsOwoKCgoKICBzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKm5vdGljZV9oYXNo OwoKCgogIHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqd3JhcF9oYXNoOwoKCiAgdm9pZCAqIGJhc2Vf ZmlsZTsKCgoKCiAgaW50IG1wYzg2MGMwOwoKCgogIGNvbnN0IGNoYXIgKmluaXRfZnVuY3Rpb247 CgoKCiAgY29uc3QgY2hhciAqZmluaV9mdW5jdGlvbjsKCgogIGJvb2xlYW4gbmV3X2R0YWdzOwoK CiAgYmZkX3ZtYSBmbGFnczsKCgogIGJmZF92bWEgZmxhZ3NfMTsKCgoKCiAgaW50IHBlaTM4Nl9h dXRvX2ltcG9ydDsKCgoKICBib29sZWFuIGNvbWJyZWxvYzsKCgoKICBib29sZWFuIG5vY29weXJl bG9jOwoKCgogIGJvb2xlYW4gZWhfZnJhbWVfaGRyOwoKCiAgdW5zaWduZWQgaW50IHNwYXJlX2R5 bmFtaWNfdGFnczsKfTsKIyAzNTUgIi9zcmMvYmludXRpbHMtMi4xMy9pbmNsdWRlL2JmZGxpbmsu aCIKc3RydWN0IGJmZF9saW5rX2NhbGxiYWNrcwp7CgoKCgogIGJvb2xlYW4gKCphZGRfYXJjaGl2 ZV9lbGVtZW50KSAoc3RydWN0IGJmZF9saW5rX2luZm8gKiwgYmZkICphYmZkLCBjb25zdCBjaGFy ICpuYW1lKTsKIyAzNzAgIi9zcmMvYmludXRpbHMtMi4xMy9pbmNsdWRlL2JmZGxpbmsuaCIKICBi b29sZWFuICgqbXVsdGlwbGVfZGVmaW5pdGlvbikgKHN0cnVjdCBiZmRfbGlua19pbmZvICosIGNv bnN0IGNoYXIgKm5hbWUsIGJmZCAqb2JmZCwgYXNlY3Rpb24gKm9zZWMsIGJmZF92bWEgb3ZhbCwg YmZkICpuYmZkLCBhc2VjdGlvbiAqbnNlYywgYmZkX3ZtYSBudmFsKTsKIyAzODkgIi9zcmMvYmlu dXRpbHMtMi4xMy9pbmNsdWRlL2JmZGxpbmsuaCIKICBib29sZWFuICgqbXVsdGlwbGVfY29tbW9u KSAoc3RydWN0IGJmZF9saW5rX2luZm8gKiwgY29uc3QgY2hhciAqbmFtZSwgYmZkICpvYmZkLCBl bnVtIGJmZF9saW5rX2hhc2hfdHlwZSBvdHlwZSwgYmZkX3ZtYSBvc2l6ZSwgYmZkICpuYmZkLCBl bnVtIGJmZF9saW5rX2hhc2hfdHlwZSBudHlwZSwgYmZkX3ZtYSBuc2l6ZSk7CiMgNDAzICIvc3Jj L2JpbnV0aWxzLTIuMTMvaW5jbHVkZS9iZmRsaW5rLmgiCiAgYm9vbGVhbiAoKmFkZF90b19zZXQp IChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBzdHJ1Y3QgYmZkX2xpbmtfaGFzaF9lbnRyeSAqZW50 cnksIGJmZF9yZWxvY19jb2RlX3JlYWxfdHlwZSByZWxvYywgYmZkICphYmZkLCBhc2VjdGlvbiAq c2VjLCBiZmRfdm1hIHZhbHVlKTsKIyA0MTMgIi9zcmMvYmludXRpbHMtMi4xMy9pbmNsdWRlL2Jm ZGxpbmsuaCIKICBib29sZWFuICgqY29uc3RydWN0b3IpIChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAq LCBib29sZWFuIGNvbnN0cnVjdG9yLCBjb25zdCBjaGFyICpuYW1lLCBiZmQgKmFiZmQsIGFzZWN0 aW9uICpzZWMsIGJmZF92bWEgdmFsdWUpOwojIDQyNCAiL3NyYy9iaW51dGlscy0yLjEzL2luY2x1 ZGUvYmZkbGluay5oIgogIGJvb2xlYW4gKCp3YXJuaW5nKSAoc3RydWN0IGJmZF9saW5rX2luZm8g KiwgY29uc3QgY2hhciAqd2FybmluZywgY29uc3QgY2hhciAqc3ltYm9sLCBiZmQgKmFiZmQsIGFz ZWN0aW9uICpzZWN0aW9uLCBiZmRfdm1hIGFkZHJlc3MpOwojIDQzMyAiL3NyYy9iaW51dGlscy0y LjEzL2luY2x1ZGUvYmZkbGluay5oIgogIGJvb2xlYW4gKCp1bmRlZmluZWRfc3ltYm9sKSAoc3Ry dWN0IGJmZF9saW5rX2luZm8gKiwgY29uc3QgY2hhciAqbmFtZSwgYmZkICphYmZkLCBhc2VjdGlv biAqc2VjdGlvbiwgYmZkX3ZtYSBhZGRyZXNzLCBib29sZWFuIGZhdGFsKTsKIyA0NDUgIi9zcmMv YmludXRpbHMtMi4xMy9pbmNsdWRlL2JmZGxpbmsuaCIKICBib29sZWFuICgqcmVsb2Nfb3ZlcmZs b3cpIChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFy ICpyZWxvY19uYW1lLCBiZmRfdm1hIGFkZGVuZCwgYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjdGlv biwgYmZkX3ZtYSBhZGRyZXNzKTsKIyA0NTcgIi9zcmMvYmludXRpbHMtMi4xMy9pbmNsdWRlL2Jm ZGxpbmsuaCIKICBib29sZWFuICgqcmVsb2NfZGFuZ2Vyb3VzKSAoc3RydWN0IGJmZF9saW5rX2lu Zm8gKiwgY29uc3QgY2hhciAqbWVzc2FnZSwgYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjdGlvbiwg YmZkX3ZtYSBhZGRyZXNzKTsKIyA0NjcgIi9zcmMvYmludXRpbHMtMi4xMy9pbmNsdWRlL2JmZGxp bmsuaCIKICBib29sZWFuICgqdW5hdHRhY2hlZF9yZWxvYykgKHN0cnVjdCBiZmRfbGlua19pbmZv ICosIGNvbnN0IGNoYXIgKm5hbWUsIGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlY3Rpb24sIGJmZF92 bWEgYWRkcmVzcyk7CgoKCgoKCgogIGJvb2xlYW4gKCpub3RpY2UpIChzdHJ1Y3QgYmZkX2xpbmtf aW5mbyAqLCBjb25zdCBjaGFyICpuYW1lLCBiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWN0aW9uLCBi ZmRfdm1hIGFkZHJlc3MpOwoKfTsKCgoKCgoKZW51bSBiZmRfbGlua19vcmRlcl90eXBlCnsKICBi ZmRfdW5kZWZpbmVkX2xpbmtfb3JkZXIsCiAgYmZkX2luZGlyZWN0X2xpbmtfb3JkZXIsCiAgYmZk X2RhdGFfbGlua19vcmRlciwKICBiZmRfc2VjdGlvbl9yZWxvY19saW5rX29yZGVyLAogIGJmZF9z eW1ib2xfcmVsb2NfbGlua19vcmRlcgp9OwoKCgoKc3RydWN0IGJmZF9saW5rX29yZGVyCnsKCiAg c3RydWN0IGJmZF9saW5rX29yZGVyICpuZXh0OwoKICBlbnVtIGJmZF9saW5rX29yZGVyX3R5cGUg dHlwZTsKCiAgYmZkX3ZtYSBvZmZzZXQ7CgogIGJmZF9zaXplX3R5cGUgc2l6ZTsKCiAgdW5pb24K ICAgIHsKICAgICAgc3RydWN0CiAgICAgICAgewoKCgoKCgogICAgICAgICAgYXNlY3Rpb24gKnNl Y3Rpb247CiAgICAgICAgfSBpbmRpcmVjdDsKICAgICAgc3RydWN0CiAgICAgICAgewoKCgoKICAg ICAgICAgIHVuc2lnbmVkIGludCBzaXplOwoKICAgICAgICAgIGJmZF9ieXRlICpjb250ZW50czsK ICAgICAgICB9IGRhdGE7CiAgICAgIHN0cnVjdAogICAgICAgIHsKCgoKICAgICAgICAgIHN0cnVj dCBiZmRfbGlua19vcmRlcl9yZWxvYyAqcDsKICAgICAgICB9IHJlbG9jOwogICAgfSB1Owp9Owoj IDU1MSAiL3NyYy9iaW51dGlscy0yLjEzL2luY2x1ZGUvYmZkbGluay5oIgpzdHJ1Y3QgYmZkX2xp bmtfb3JkZXJfcmVsb2MKewoKICBiZmRfcmVsb2NfY29kZV9yZWFsX3R5cGUgcmVsb2M7CgogIHVu aW9uCiAgICB7CgoKCiAgICAgIGFzZWN0aW9uICpzZWN0aW9uOwoKCiAgICAgIGNvbnN0IGNoYXIg Km5hbWU7CiAgICB9IHU7CgoKCgoKCiAgYmZkX3ZtYSBhZGRlbmQ7Cn07CgoKZXh0ZXJuIHN0cnVj dCBiZmRfbGlua19vcmRlciAqYmZkX25ld19saW5rX29yZGVyIChiZmQgKiwgYXNlY3Rpb24gKik7 CiMgNTg1ICIvc3JjL2JpbnV0aWxzLTIuMTMvaW5jbHVkZS9iZmRsaW5rLmgiCnN0cnVjdCBiZmRf ZWxmX3ZlcnNpb25fZXhwcgp7CgogIHN0cnVjdCBiZmRfZWxmX3ZlcnNpb25fZXhwciAqbmV4dDsK CiAgY29uc3QgY2hhciAqcGF0dGVybjsKCiAgaW50ICgqbWF0Y2gpIChzdHJ1Y3QgYmZkX2VsZl92 ZXJzaW9uX2V4cHIgKiwgY29uc3QgY2hhciAqKTsKfTsKCgoKc3RydWN0IGJmZF9lbGZfdmVyc2lv bl9kZXBzCnsKCiAgc3RydWN0IGJmZF9lbGZfdmVyc2lvbl9kZXBzICpuZXh0OwoKICBzdHJ1Y3Qg YmZkX2VsZl92ZXJzaW9uX3RyZWUgKnZlcnNpb25fbmVlZGVkOwp9OwoKCgpzdHJ1Y3QgYmZkX2Vs Zl92ZXJzaW9uX3RyZWUKewoKICBzdHJ1Y3QgYmZkX2VsZl92ZXJzaW9uX3RyZWUgKm5leHQ7Cgog IGNvbnN0IGNoYXIgKm5hbWU7CgogIHVuc2lnbmVkIGludCB2ZXJudW07CgogIHN0cnVjdCBiZmRf ZWxmX3ZlcnNpb25fZXhwciAqZ2xvYmFsczsKCiAgc3RydWN0IGJmZF9lbGZfdmVyc2lvbl9leHBy ICpsb2NhbHM7CgogIHN0cnVjdCBiZmRfZWxmX3ZlcnNpb25fZGVwcyAqZGVwczsKCiAgdW5zaWdu ZWQgaW50IG5hbWVfaW5keDsKCiAgaW50IHVzZWQ7Cn07CiMgMjkgIi9zcmMvYmludXRpbHMtMi4x My9iZmQvZWxmLWJmZC5oIiAyCiMgNjAgIi9zcmMvYmludXRpbHMtMi4xMy9iZmQvZWxmLWJmZC5o Igp0eXBlZGVmIHN0cnVjdAp7CgogIGFzeW1ib2wgc3ltYm9sOwoKICBFbGZfSW50ZXJuYWxfU3lt IGludGVybmFsX2VsZl9zeW07CgogIHVuaW9uCiAgICB7CiAgICAgIHVuc2lnbmVkIGludCBocHBh X2FyZ19yZWxvYzsKICAgICAgdm9pZCAqIG1pcHNfZXh0cjsKICAgICAgdm9pZCAqIGFueTsKICAg IH0KICB0Y19kYXRhOwoKCgoKICB1bnNpZ25lZCBzaG9ydCB2ZXJzaW9uOwoKfSBlbGZfc3ltYm9s X3R5cGU7CgpzdHJ1Y3QgZWxmX3N0cnRhYl9oYXNoOwoKCgpzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9l bnRyeQp7CiAgc3RydWN0IGJmZF9saW5rX2hhc2hfZW50cnkgcm9vdDsKCgoKICBsb25nIGluZHg7 CiMgMTA2ICIvc3JjL2JpbnV0aWxzLTIuMTMvYmZkL2VsZi1iZmQuaCIKICBsb25nIGR5bmluZHg7 CgoKICB1bnNpZ25lZCBsb25nIGR5bnN0cl9pbmRleDsKCgogIHVuc2lnbmVkIGxvbmcgZWxmX2hh c2hfdmFsdWU7CgoKCgogIHN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICp3ZWFrZGVmOwoKCgoK ICBzdHJ1Y3QgZWxmX2xpbmtlcl9zZWN0aW9uX3BvaW50ZXJzICpsaW5rZXJfc2VjdGlvbl9wb2lu dGVyOwoKCiAgdW5pb24KICB7CgoKCiAgICBFbGZfSW50ZXJuYWxfVmVyZGVmICp2ZXJkZWY7CgoK CiAgICBzdHJ1Y3QgYmZkX2VsZl92ZXJzaW9uX3RyZWUgKnZlcnRyZWU7CiAgfSB2ZXJpbmZvOwoK CgoKCiAgc2l6ZV90IHZ0YWJsZV9lbnRyaWVzX3NpemU7CiAgYm9vbGVhbiAqdnRhYmxlX2VudHJp ZXNfdXNlZDsKCgogIHN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICp2dGFibGVfcGFyZW50Owoj IDE1NCAiL3NyYy9iaW51dGlscy0yLjEzL2JmZC9lbGYtYmZkLmgiCiAgdW5pb24KICAgIHsKICAg ICAgYmZkX3NpZ25lZF92bWEgcmVmY291bnQ7CiAgICAgIGJmZF92bWEgb2Zmc2V0OwogICAgfSBn b3Q7CgoKICB1bmlvbgogICAgewogICAgICBiZmRfc2lnbmVkX3ZtYSByZWZjb3VudDsKICAgICAg YmZkX3ZtYSBvZmZzZXQ7CiAgICB9IHBsdDsKCgogIGJmZF9zaXplX3R5cGUgc2l6ZTsKCgogIGNo YXIgdHlwZTsKCgogIHVuc2lnbmVkIGNoYXIgb3RoZXI7CgoKICB1bnNpZ25lZCBzaG9ydCBlbGZf bGlua19oYXNoX2ZsYWdzOwojIDIwNSAiL3NyYy9iaW51dGlscy0yLjEzL2JmZC9lbGYtYmZkLmgi Cn07CgoKCnN0cnVjdCBlbGZfbGlua19sb2NhbF9keW5hbWljX2VudHJ5CnsKICBzdHJ1Y3QgZWxm X2xpbmtfbG9jYWxfZHluYW1pY19lbnRyeSAqbmV4dDsKCgogIGJmZCAqaW5wdXRfYmZkOwoKCiAg bG9uZyBpbnB1dF9pbmR4OwoKCiAgbG9uZyBkeW5pbmR4OwoKCiAgRWxmX0ludGVybmFsX1N5bSBp c3ltOwp9OwoKc3RydWN0IGVsZl9saW5rX2xvYWRlZF9saXN0CnsKICBzdHJ1Y3QgZWxmX2xpbmtf bG9hZGVkX2xpc3QgKm5leHQ7CiAgYmZkICphYmZkOwp9OwoKZW51bSBlbGZfbGlua19pbmZvX3R5 cGUKewogIEVMRl9JTkZPX1RZUEVfTk9ORSwKICBFTEZfSU5GT19UWVBFX1NUQUJTLAogIEVMRl9J TkZPX1RZUEVfTUVSR0UsCiAgRUxGX0lORk9fVFlQRV9FSF9GUkFNRSwKICBFTEZfSU5GT19UWVBF X0VIX0ZSQU1FX0hEUiwKICBFTEZfSU5GT19UWVBFX0pVU1RfU1lNUywKICBFTEZfSU5GT19UWVBF X0xBU1QKfTsKCgpzdHJ1Y3QgZWxmX2xpbmtfdGxzX3NlZ21lbnQKewogIGJmZF92bWEgc3RhcnQ7 CiAgYmZkX3NpemVfdHlwZSBzaXplOwogIHVuc2lnbmVkIGludCBhbGlnbjsKfTsKCgoKc3RydWN0 IGVsZl9saW5rX2hhc2hfdGFibGUKewogIHN0cnVjdCBiZmRfbGlua19oYXNoX3RhYmxlIHJvb3Q7 CgoKCiAgYm9vbGVhbiBkeW5hbWljX3NlY3Rpb25zX2NyZWF0ZWQ7CgoKCgogIGJmZCAqZHlub2Jq OwoKCgoKCiAgYmZkX3NpZ25lZF92bWEgaW5pdF9yZWZjb3VudDsKCgoKICBiZmRfc2l6ZV90eXBl IGR5bnN5bWNvdW50OwoKCgogIHN0cnVjdCBlbGZfc3RydGFiX2hhc2ggKmR5bnN0cjsKCgoKICBi ZmRfc2l6ZV90eXBlIGJ1Y2tldGNvdW50OwoKCgogIHN0cnVjdCBiZmRfbGlua19uZWVkZWRfbGlz dCAqbmVlZGVkOwoKCiAgc3RydWN0IGVsZl9saW5rX2hhc2hfZW50cnkgKmhnb3Q7CgoKICB2b2lk ICogc3RhYl9pbmZvOwoKCiAgdm9pZCAqIG1lcmdlX2luZm87CgoKICBzdHJ1Y3QgZWxmX2xpbmtf bG9jYWxfZHluYW1pY19lbnRyeSAqZHlubG9jYWw7CgoKCiAgc3RydWN0IGJmZF9saW5rX25lZWRl ZF9saXN0ICpydW5wYXRoOwoKCiAgc3RydWN0IGVsZl9saW5rX3Rsc19zZWdtZW50ICp0bHNfc2Vn bWVudDsKCgogIHN0cnVjdCBlbGZfbGlua19sb2FkZWRfbGlzdCAqbG9hZGVkOwp9OwojIDMzNyAi L3NyYy9iaW51dGlscy0yLjEzL2JmZC9lbGYtYmZkLmgiCnN0cnVjdCBzeW1fc2VjX2NhY2hlCnsK ICBiZmQgKmFiZmQ7CiAgdW5zaWduZWQgbG9uZyBpbmR4WzMyXTsKICBhc2VjdGlvbiAqc2VjWzMy XTsKfTsKCgoKc3RydWN0IGVsZl9zaXplX2luZm8gewogIHVuc2lnbmVkIGNoYXIgc2l6ZW9mX2Vo ZHIsIHNpemVvZl9waGRyLCBzaXplb2Zfc2hkcjsKICB1bnNpZ25lZCBjaGFyIHNpemVvZl9yZWws IHNpemVvZl9yZWxhLCBzaXplb2Zfc3ltLCBzaXplb2ZfZHluLCBzaXplb2Zfbm90ZTsKCgogIHVu c2lnbmVkIGNoYXIgc2l6ZW9mX2hhc2hfZW50cnk7CgoKCiAgdW5zaWduZWQgY2hhciBpbnRfcmVs c19wZXJfZXh0X3JlbDsKCiAgdW5zaWduZWQgY2hhciBhcmNoX3NpemUsIGZpbGVfYWxpZ247CiAg dW5zaWduZWQgY2hhciBlbGZjbGFzcywgZXZfY3VycmVudDsKICBpbnQgKCp3cml0ZV9vdXRfcGhk cnMpCiAgICAoYmZkICosIGNvbnN0IEVsZl9JbnRlcm5hbF9QaGRyICosIHVuc2lnbmVkIGludCk7 CiAgYm9vbGVhbiAoKndyaXRlX3NoZHJzX2FuZF9laGRyKQogICAgKGJmZCAqKTsKICB2b2lkICgq d3JpdGVfcmVsb2NzKQogICAgKGJmZCAqLCBhc2VjdGlvbiAqLCB2b2lkICopOwogIHZvaWQgKCpz d2FwX3N5bWJvbF9pbikKICAgIChiZmQgKiwgY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIEVs Zl9JbnRlcm5hbF9TeW0gKik7CiAgdm9pZCAoKnN3YXBfc3ltYm9sX291dCkKICAgIChiZmQgKiwg Y29uc3QgRWxmX0ludGVybmFsX1N5bSAqLCB2b2lkICosIHZvaWQgKik7CiAgYm9vbGVhbiAoKnNs dXJwX3JlbG9jX3RhYmxlKQogICAgKGJmZCAqLCBhc2VjdGlvbiAqLCBhc3ltYm9sICoqLCBib29s ZWFuKTsKICBsb25nICgqc2x1cnBfc3ltYm9sX3RhYmxlKQogICAgKGJmZCAqLCBhc3ltYm9sICoq LCBib29sZWFuKTsKICB2b2lkICgqc3dhcF9keW5faW4pCiAgICAoYmZkICosIGNvbnN0IHZvaWQg KiwgRWxmX0ludGVybmFsX0R5biAqKTsKICB2b2lkICgqc3dhcF9keW5fb3V0KQogICAgKGJmZCAq LCBjb25zdCBFbGZfSW50ZXJuYWxfRHluICosIHZvaWQgKik7CgoKCgoKICB2b2lkICgqc3dhcF9y ZWxvY19pbikKICAgIChiZmQgKiwgY29uc3QgYmZkX2J5dGUgKiwgRWxmX0ludGVybmFsX1JlbCAq KTsKCgoKICB2b2lkICgqc3dhcF9yZWxvY19vdXQpCiAgICAoYmZkICosIGNvbnN0IEVsZl9JbnRl cm5hbF9SZWwgKiwgYmZkX2J5dGUgKik7CgoKCgoKICB2b2lkICgqc3dhcF9yZWxvY2FfaW4pCiAg ICAoYmZkICosIGNvbnN0IGJmZF9ieXRlICosIEVsZl9JbnRlcm5hbF9SZWxhICopOwoKCgogIHZv aWQgKCpzd2FwX3JlbG9jYV9vdXQpCiAgICAoYmZkICosIGNvbnN0IEVsZl9JbnRlcm5hbF9SZWxh ICosIGJmZF9ieXRlICopOwoKfTsKCgoKCgoKCmVudW0gZWxmX3JlbG9jX3R5cGVfY2xhc3Mgewog IHJlbG9jX2NsYXNzX25vcm1hbCwKICByZWxvY19jbGFzc19yZWxhdGl2ZSwKICByZWxvY19jbGFz c19wbHQsCiAgcmVsb2NfY2xhc3NfY29weQp9OwoKc3RydWN0IGVsZl9yZWxvY19jb29raWUKewog IEVsZl9JbnRlcm5hbF9SZWxhICpyZWxzLCAqcmVsLCAqcmVsZW5kOwogIEVsZl9JbnRlcm5hbF9T eW0gKmxvY3N5bXM7CiAgYmZkICphYmZkOwogIHNpemVfdCBsb2NzeW1jb3VudDsKICBzaXplX3Qg ZXh0c3ltb2ZmOwogIHN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICoqc3ltX2hhc2hlczsKICBi b29sZWFuIGJhZF9zeW10YWI7Cn07CgoKCnR5cGVkZWYgZW51bSB7CiAgaWN0X25vbmUsCiAgaWN0 X2lyaXg1LAogIGljdF9pcml4Ngp9IGlyaXhfY29tcGF0X3Q7CgpzdHJ1Y3QgZWxmX2JhY2tlbmRf ZGF0YQp7CgogIGVudW0gYmZkX2FyY2hpdGVjdHVyZSBhcmNoOwoKCiAgaW50IGVsZl9tYWNoaW5l X2NvZGU7CgoKICBiZmRfdm1hIG1heHBhZ2VzaXplOwoKCgogIHZvaWQgKCplbGZfaW5mb190b19o b3d0bykKICAgIChiZmQgKiwgYXJlbGVudCAqLCBFbGZfSW50ZXJuYWxfUmVsYSAqKTsKCgoKICB2 b2lkICgqZWxmX2luZm9fdG9faG93dG9fcmVsKQogICAgKGJmZCAqLCBhcmVsZW50ICosIEVsZl9J bnRlcm5hbF9SZWwgKik7CgoKCgoKCiAgYm9vbGVhbiAoKmVsZl9iYWNrZW5kX3N5bV9pc19nbG9i YWwpCiAgICAoYmZkICosIGFzeW1ib2wgKik7CiMgNDc0ICIvc3JjL2JpbnV0aWxzLTIuMTMvYmZk L2VsZi1iZmQuaCIKICBib29sZWFuICgqZWxmX2JhY2tlbmRfb2JqZWN0X3ApCiAgICAoYmZkICop OwoKCgoKICB2b2lkICgqZWxmX2JhY2tlbmRfc3ltYm9sX3Byb2Nlc3NpbmcpCiAgICAoYmZkICos IGFzeW1ib2wgKik7CgoKCiAgYm9vbGVhbiAoKmVsZl9iYWNrZW5kX3N5bWJvbF90YWJsZV9wcm9j ZXNzaW5nKQogICAgKGJmZCAqLCBlbGZfc3ltYm9sX3R5cGUgKiwgdW5zaWduZWQgaW50KTsKCgoK ICBpbnQgKCplbGZfYmFja2VuZF9nZXRfc3ltYm9sX3R5cGUpCiAgICAoIEVsZl9JbnRlcm5hbF9T eW0gKiwgaW50KTsKCgoKCgogIGJvb2xlYW4gKCplbGZfYmFja2VuZF9zZWN0aW9uX3Byb2Nlc3Np bmcpCiAgICAoYmZkICosIEVsZl9JbnRlcm5hbF9TaGRyICopOwoKCgogIGJvb2xlYW4gKCplbGZf YmFja2VuZF9zZWN0aW9uX2Zyb21fc2hkcikKICAgIChiZmQgKiwgRWxmX0ludGVybmFsX1NoZHIg KiwgY29uc3QgY2hhciAqKTsKCgoKICBib29sZWFuICgqZWxmX2JhY2tlbmRfc2VjdGlvbl9mbGFn cykKICAgIChmbGFnd29yZCAqLCBFbGZfSW50ZXJuYWxfU2hkciAqKTsKCgoKICBib29sZWFuICgq ZWxmX2JhY2tlbmRfc2VjdGlvbl9mcm9tX3BoZHIpCiAgICAoYmZkICosIEVsZl9JbnRlcm5hbF9Q aGRyICosIGludCk7CgoKCgogIGJvb2xlYW4gKCplbGZfYmFja2VuZF9mYWtlX3NlY3Rpb25zKQog ICAgKGJmZCAqLCBFbGZfSW50ZXJuYWxfU2hkciAqLCBhc2VjdGlvbiAqKTsKCgoKCgogIGJvb2xl YW4gKCplbGZfYmFja2VuZF9zZWN0aW9uX2Zyb21fYmZkX3NlY3Rpb24pCiAgICAoYmZkICosIGFz ZWN0aW9uICosIGludCAqcmV0dmFsKTsKIyA1MzYgIi9zcmMvYmludXRpbHMtMi4xMy9iZmQvZWxm LWJmZC5oIgogIGJvb2xlYW4gKCplbGZfYWRkX3N5bWJvbF9ob29rKQogICAgKGJmZCAqYWJmZCwg c3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8sIGNvbnN0IEVsZl9JbnRlcm5hbF9TeW0gKiwgY29u c3QgY2hhciAqKm5hbWUsIGZsYWd3b3JkICpmbGFncywgYXNlY3Rpb24gKipzZWMsIGJmZF92bWEg KnZhbHVlKTsKCgoKCgogIGJvb2xlYW4gKCplbGZfYmFja2VuZF9saW5rX291dHB1dF9zeW1ib2xf aG9vaykKICAgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8sIGNvbnN0IGNoYXIg KiwgRWxmX0ludGVybmFsX1N5bSAqLCBhc2VjdGlvbiAqKTsKIyA1NTUgIi9zcmMvYmludXRpbHMt Mi4xMy9iZmQvZWxmLWJmZC5oIgogIGJvb2xlYW4gKCplbGZfYmFja2VuZF9jcmVhdGVfZHluYW1p Y19zZWN0aW9ucykKICAgIChiZmQgKmFiZmQsIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvKTsK IyA1NjggIi9zcmMvYmludXRpbHMtMi4xMy9iZmQvZWxmLWJmZC5oIgogIGJvb2xlYW4gKCpjaGVj a19yZWxvY3MpCiAgICAoYmZkICphYmZkLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbywgYXNl Y3Rpb24gKm8sIGNvbnN0IEVsZl9JbnRlcm5hbF9SZWxhICpyZWxvY3MpOwojIDU4NCAiL3NyYy9i aW51dGlscy0yLjEzL2JmZC9lbGYtYmZkLmgiCiAgYm9vbGVhbiAoKmVsZl9iYWNrZW5kX2FkanVz dF9keW5hbWljX3N5bWJvbCkKICAgIChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbywgc3RydWN0 IGVsZl9saW5rX2hhc2hfZW50cnkgKmgpOwoKCgoKCiAgYm9vbGVhbiAoKmVsZl9iYWNrZW5kX2Fs d2F5c19zaXplX3NlY3Rpb25zKQogICAgKGJmZCAqb3V0cHV0X2JmZCwgc3RydWN0IGJmZF9saW5r X2luZm8gKmluZm8pOwojIDYwNCAiL3NyYy9iaW51dGlscy0yLjEzL2JmZC9lbGYtYmZkLmgiCiAg Ym9vbGVhbiAoKmVsZl9iYWNrZW5kX3NpemVfZHluYW1pY19zZWN0aW9ucykKICAgIChiZmQgKm91 dHB1dF9iZmQsIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvKTsKIyA2MzUgIi9zcmMvYmludXRp bHMtMi4xMy9iZmQvZWxmLWJmZC5oIgogIGJvb2xlYW4gKCplbGZfYmFja2VuZF9yZWxvY2F0ZV9z ZWN0aW9uKQogICAgKGJmZCAqb3V0cHV0X2JmZCwgc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8s IGJmZCAqaW5wdXRfYmZkLCBhc2VjdGlvbiAqaW5wdXRfc2VjdGlvbiwgYmZkX2J5dGUgKmNvbnRl bnRzLCBFbGZfSW50ZXJuYWxfUmVsYSAqcmVsb2NzLCBFbGZfSW50ZXJuYWxfU3ltICpsb2NhbF9z eW1zLCBhc2VjdGlvbiAqKmxvY2FsX3NlY3Rpb25zKTsKIyA2NDggIi9zcmMvYmludXRpbHMtMi4x My9iZmQvZWxmLWJmZC5oIgogIGJvb2xlYW4gKCplbGZfYmFja2VuZF9maW5pc2hfZHluYW1pY19z eW1ib2wpCiAgICAoYmZkICpvdXRwdXRfYmZkLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbywg c3RydWN0IGVsZl9saW5rX2hhc2hfZW50cnkgKmgsIEVsZl9JbnRlcm5hbF9TeW0gKnN5bSk7CgoK CgoKCiAgYm9vbGVhbiAoKmVsZl9iYWNrZW5kX2ZpbmlzaF9keW5hbWljX3NlY3Rpb25zKQogICAg KGJmZCAqb3V0cHV0X2JmZCwgc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8pOwoKCgogIHZvaWQg KCplbGZfYmFja2VuZF9iZWdpbl93cml0ZV9wcm9jZXNzaW5nKQogICAgKGJmZCAqLCBzdHJ1Y3Qg YmZkX2xpbmtfaW5mbyAqKTsKCgoKCiAgdm9pZCAoKmVsZl9iYWNrZW5kX2ZpbmFsX3dyaXRlX3By b2Nlc3NpbmcpCiAgICAoYmZkICosIGJvb2xlYW4gbGlua2VyKTsKCgoKCiAgaW50ICgqZWxmX2Jh Y2tlbmRfYWRkaXRpb25hbF9wcm9ncmFtX2hlYWRlcnMpCiAgICAoYmZkICopOwoKCgogIGJvb2xl YW4gKCplbGZfYmFja2VuZF9tb2RpZnlfc2VnbWVudF9tYXApCiAgICAoYmZkICopOwoKCgogIGFz ZWN0aW9uICogKCpnY19tYXJrX2hvb2spCiAgICAoYXNlY3Rpb24gKnNlYywgc3RydWN0IGJmZF9s aW5rX2luZm8gKiwgRWxmX0ludGVybmFsX1JlbGEgKiwgc3RydWN0IGVsZl9saW5rX2hhc2hfZW50 cnkgKmgsIEVsZl9JbnRlcm5hbF9TeW0gKik7CgoKCgoKICBib29sZWFuICgqZ2Nfc3dlZXBfaG9v aykKICAgIChiZmQgKmFiZmQsIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvLCBhc2VjdGlvbiAq bywgY29uc3QgRWxmX0ludGVybmFsX1JlbGEgKnJlbG9jcyk7CgoKCgoKICB2b2lkICgqZWxmX2Jh Y2tlbmRfcG9zdF9wcm9jZXNzX2hlYWRlcnMpCiAgICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19p bmZvICopOwoKCgoKICBjb25zdCBjaGFyICooKmVsZl9iYWNrZW5kX3ByaW50X3N5bWJvbF9hbGwp CiAgICAoYmZkICosIHZvaWQgKiwgYXN5bWJvbCAqKTsKCgoKCgogIGJvb2xlYW4gKCplbGZfYmFj a2VuZF9vdXRwdXRfYXJjaF9zeW1zKQogICAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAq LCB2b2lkICosIGJvb2xlYW4gKCopICh2b2lkICosIGNvbnN0IGNoYXIgKiwgRWxmX0ludGVybmFs X1N5bSAqLCBhc2VjdGlvbiAqKSk7CgoKCgoKCgogIHZvaWQgKCplbGZfYmFja2VuZF9jb3B5X2lu ZGlyZWN0X3N5bWJvbCkKICAgIChzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqLCBzdHJ1Y3Qg ZWxmX2xpbmtfaGFzaF9lbnRyeSAqKTsKCgoKICB2b2lkICgqZWxmX2JhY2tlbmRfaGlkZV9zeW1i b2wpCiAgICAoc3RydWN0IGJmZF9saW5rX2luZm8gKiwgc3RydWN0IGVsZl9saW5rX2hhc2hfZW50 cnkgKiwgYm9vbGVhbik7CgoKCiAgYm9vbGVhbiAoKmVsZl9iYWNrZW5kX2VtaXRfcmVsb2NzKQog ICAgKGJmZCAqLCBhc2VjdGlvbiAqLCBFbGZfSW50ZXJuYWxfU2hkciAqLCBFbGZfSW50ZXJuYWxf UmVsYSAqKTsKCgoKICB1bnNpZ25lZCBpbnQgKCplbGZfYmFja2VuZF9jb3VudF9yZWxvY3MpCiAg ICAoYXNlY3Rpb24gKiwgRWxmX0ludGVybmFsX1JlbGEgKik7CgoKCiAgYm9vbGVhbiAoKmVsZl9i YWNrZW5kX2dyb2tfcHJzdGF0dXMpCiAgICAoYmZkICosIEVsZl9JbnRlcm5hbF9Ob3RlICopOwoK CgogIGJvb2xlYW4gKCplbGZfYmFja2VuZF9ncm9rX3BzaW5mbykKICAgIChiZmQgKiwgRWxmX0lu dGVybmFsX05vdGUgKik7CgoKICB2b2lkICgqIGVsZl9iYWNrZW5kX3NwcmludGZfdm1hKQogICAg KGJmZCAqLCBjaGFyICosIGJmZF92bWEpOwogIHZvaWQgKCogZWxmX2JhY2tlbmRfZnByaW50Zl92 bWEpCiAgICAoYmZkICosIHZvaWQgKiwgYmZkX3ZtYSk7CgoKICBlbnVtIGVsZl9yZWxvY190eXBl X2NsYXNzICgqZWxmX2JhY2tlbmRfcmVsb2NfdHlwZV9jbGFzcykKICAgIChjb25zdCBFbGZfSW50 ZXJuYWxfUmVsYSAqKTsKCgoKICBib29sZWFuICgqZWxmX2JhY2tlbmRfZGlzY2FyZF9pbmZvKQog ICAgKGJmZCAqLCBzdHJ1Y3QgZWxmX3JlbG9jX2Nvb2tpZSAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5m byAqKTsKCgoKICBib29sZWFuICgqZWxmX2JhY2tlbmRfaWdub3JlX2Rpc2NhcmRlZF9yZWxvY3Mp CiAgICAoYXNlY3Rpb24gKik7CgoKCiAgYm9vbGVhbiAoKmVsZl9iYWNrZW5kX3dyaXRlX3NlY3Rp b24pCiAgICAoYmZkICosIGFzZWN0aW9uICosIGJmZF9ieXRlICopOwoKCgogIHZvaWQgKCpzZXRf bm9ubG9hZGFibGVfZmlsZXBvcykKICAgIChiZmQgKiwgRWxmX0ludGVybmFsX1BoZHIgKik7CgoK CiAgYm9vbGVhbiAoKmlzX2NvbnRhaW5lZF9ieV9maWxlcG9zKQogICAgKGFzZWN0aW9uICosIEVs Zl9JbnRlcm5hbF9QaGRyICopOwoKCgoKICBib29sZWFuICgqY29weV9wcml2YXRlX2JmZF9kYXRh X3ApCiAgICAoYmZkICosIGFzZWN0aW9uICosIGJmZCAqLCBhc2VjdGlvbiAqKTsKCgoKICBpcml4 X2NvbXBhdF90ICgqZWxmX2JhY2tlbmRfbWlwc19pcml4X2NvbXBhdCkKICAgIChiZmQgKik7Cgog IHJlbG9jX2hvd3RvX3R5cGUgKigqZWxmX2JhY2tlbmRfbWlwc19ydHlwZV90b19ob3d0bykKICAg ICh1bnNpZ25lZCBpbnQsIGJvb2xlYW4pOwoKCgogIGNvbnN0IHN0cnVjdCBlY29mZl9kZWJ1Z19z d2FwICplbGZfYmFja2VuZF9lY29mZl9kZWJ1Z19zd2FwOwoKCiAgaW50IGVsZl9tYWNoaW5lX2Fs dDE7CiAgaW50IGVsZl9tYWNoaW5lX2FsdDI7CgogIGNvbnN0IHN0cnVjdCBlbGZfc2l6ZV9pbmZv ICpzOwoKCgogIGJmZF92bWEgZ290X3N5bWJvbF9vZmZzZXQ7CgoKCiAgYmZkX3ZtYSBnb3RfaGVh ZGVyX3NpemU7CiAgYmZkX3ZtYSBwbHRfaGVhZGVyX3NpemU7CgoKCgoKICB1bnNpZ25lZCBjb2xs ZWN0IDogMTsKCgoKCgogIHVuc2lnbmVkIHR5cGVfY2hhbmdlX29rIDogMTsKCgoKCiAgdW5zaWdu ZWQgbWF5X3VzZV9yZWxfcCA6IDE7CgoKCgogIHVuc2lnbmVkIG1heV91c2VfcmVsYV9wIDogMTsK CgoKCgoKICB1bnNpZ25lZCBkZWZhdWx0X3VzZV9yZWxhX3AgOiAxOwoKCgoKICB1bnNpZ25lZCBy ZWxhX25vcm1hbCA6IDE7CgoKCiAgdW5zaWduZWQgc2lnbl9leHRlbmRfdm1hIDogMTsKCiAgdW5z aWduZWQgd2FudF9nb3RfcGx0IDogMTsKICB1bnNpZ25lZCBwbHRfcmVhZG9ubHkgOiAxOwogIHVu c2lnbmVkIHdhbnRfcGx0X3N5bSA6IDE7CiAgdW5zaWduZWQgcGx0X25vdF9sb2FkZWQgOiAxOwog IHVuc2lnbmVkIHBsdF9hbGlnbm1lbnQgOiA0OwogIHVuc2lnbmVkIGNhbl9nY19zZWN0aW9ucyA6 IDE7CiAgdW5zaWduZWQgY2FuX3JlZmNvdW50IDogMTsKICB1bnNpZ25lZCB3YW50X2dvdF9zeW0g OiAxOwogIHVuc2lnbmVkIHdhbnRfZHluYnNzIDogMTsKCgoKICB1bnNpZ25lZCB3YW50X3BfcGFk ZHJfc2V0X3RvX3plcm8gOiAxOwp9OwoKCgoKc3RydWN0IGJmZF9lbGZfc2VjdGlvbl9kYXRhCnsK CiAgRWxmX0ludGVybmFsX1NoZHIgdGhpc19oZHI7CgoKCiAgRWxmX0ludGVybmFsX1NoZHIgcmVs X2hkcjsKCgoKICBFbGZfSW50ZXJuYWxfU2hkciAqcmVsX2hkcjI7CgoKICB1bnNpZ25lZCBpbnQg cmVsX2NvdW50OwoKCiAgdW5zaWduZWQgaW50IHJlbF9jb3VudDI7CgoKCiAgdm9pZCAqIGxvY2Fs X2R5bnJlbDsKCgogIGFzZWN0aW9uICpzcmVsb2M7CgoKCiAgaW50IHRoaXNfaWR4OwoKCgogIGlu dCByZWxfaWR4OwoKCgogIGludCByZWxfaWR4MjsKCgoKICBzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9l bnRyeSAqKnJlbF9oYXNoZXM7CgoKCgogIEVsZl9JbnRlcm5hbF9SZWxhICpyZWxvY3M7CgoKCgoK ICBsb25nIGR5bmluZHg7CgoKICB2b2lkICogc2VjX2luZm87CgoKICBlbnVtIGVsZl9saW5rX2lu Zm9fdHlwZSBzZWNfaW5mb190eXBlOwoKICB1bmlvbiB7CgogICAgY29uc3QgY2hhciAqbmFtZTsK CgogICAgc3RydWN0IHN5bWJvbF9jYWNoZV9lbnRyeSAqaWQ7CiAgfSBncm91cDsKCgoKICBhc2Vj dGlvbiAqbmV4dF9pbl9ncm91cDsKCgogIHZvaWQgKiB0ZGF0YTsKCgogIHVuc2lnbmVkIGludCB1 c2VfcmVsYV9wOjE7CgoKICB1bnNpZ25lZCBpbnQgbGlua29uY2VfcDoxOwp9OwojIDk2OSAiL3Ny Yy9iaW51dGlscy0yLjEzL2JmZC9lbGYtYmZkLmgiCnR5cGVkZWYgZW51bSBlbGZfbGlua2VyX3Nl Y3Rpb25fZW51bQp7CiAgTElOS0VSX1NFQ1RJT05fVU5LTk9XTiwKICBMSU5LRVJfU0VDVElPTl9H T1QsCiAgTElOS0VSX1NFQ1RJT05fUExULAogIExJTktFUl9TRUNUSU9OX1NEQVRBLAogIExJTktF Ul9TRUNUSU9OX1NEQVRBMiwKICBMSU5LRVJfU0VDVElPTl9NQVgKfSBlbGZfbGlua2VyX3NlY3Rp b25fZW51bV90OwoKCgp0eXBlZGVmIHN0cnVjdCBlbGZfbGlua2VyX3NlY3Rpb24KewogIGNoYXIg Km5hbWU7CiAgY2hhciAqcmVsX25hbWU7CiAgY2hhciAqYnNzX25hbWU7CiAgY2hhciAqc3ltX25h bWU7CiAgYXNlY3Rpb24gKnNlY3Rpb247CiAgYXNlY3Rpb24gKmJzc19zZWN0aW9uOwogIGFzZWN0 aW9uICpyZWxfc2VjdGlvbjsKICBzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqc3ltX2hhc2g7 CiAgYmZkX3ZtYSBpbml0aWFsX3NpemU7CiAgYmZkX3ZtYSBzeW1fb2Zmc2V0OwogIGJmZF92bWEg aG9sZV9zaXplOwogIGJmZF92bWEgaG9sZV9vZmZzZXQ7CiAgYmZkX3ZtYSBtYXhfaG9sZV9vZmZz ZXQ7CiAgZWxmX2xpbmtlcl9zZWN0aW9uX2VudW1fdCB3aGljaDsKICBib29sZWFuIGhvbGVfd3Jp dHRlbl9wOwogIHVuc2lnbmVkIGludCBhbGlnbm1lbnQ7CiAgZmxhZ3dvcmQgZmxhZ3M7Cn0gZWxm X2xpbmtlcl9zZWN0aW9uX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBlbGZfbGlua2VyX3NlY3Rpb25f cG9pbnRlcnMKewogIHN0cnVjdCBlbGZfbGlua2VyX3NlY3Rpb25fcG9pbnRlcnMgKm5leHQ7CiAg YmZkX3ZtYSBvZmZzZXQ7CiAgYmZkX3ZtYSBhZGRlbmQ7CiAgZWxmX2xpbmtlcl9zZWN0aW9uX2Vu dW1fdCB3aGljaDsKICBib29sZWFuIHdyaXR0ZW5fYWRkcmVzc19wOwp9IGVsZl9saW5rZXJfc2Vj dGlvbl9wb2ludGVyc190OwoKCgoKc3RydWN0IGVsZl9vYmpfdGRhdGEKewogIEVsZl9JbnRlcm5h bF9FaGRyIGVsZl9oZWFkZXJbMV07CiAgRWxmX0ludGVybmFsX1NoZHIgKiplbGZfc2VjdF9wdHI7 CiAgRWxmX0ludGVybmFsX1BoZHIgKnBoZHI7CiAgc3RydWN0IGVsZl9zZWdtZW50X21hcCAqc2Vn bWVudF9tYXA7CiAgc3RydWN0IGVsZl9zdHJ0YWJfaGFzaCAqc3RydGFiX3B0cjsKICBpbnQgbnVt X2xvY2FsczsKICBpbnQgbnVtX2dsb2JhbHM7CiAgdW5zaWduZWQgaW50IG51bV9lbGZfc2VjdGlv bnM7CiAgaW50IG51bV9zZWN0aW9uX3N5bXM7CiAgYXN5bWJvbCAqKnNlY3Rpb25fc3ltczsKICBF bGZfSW50ZXJuYWxfU2hkciBzeW10YWJfaGRyOwogIEVsZl9JbnRlcm5hbF9TaGRyIHNoc3RydGFi X2hkcjsKICBFbGZfSW50ZXJuYWxfU2hkciBzdHJ0YWJfaGRyOwogIEVsZl9JbnRlcm5hbF9TaGRy IGR5bnN5bXRhYl9oZHI7CiAgRWxmX0ludGVybmFsX1NoZHIgZHluc3RydGFiX2hkcjsKICBFbGZf SW50ZXJuYWxfU2hkciBkeW52ZXJzeW1faGRyOwogIEVsZl9JbnRlcm5hbF9TaGRyIGR5bnZlcnJl Zl9oZHI7CiAgRWxmX0ludGVybmFsX1NoZHIgZHludmVyZGVmX2hkcjsKICBFbGZfSW50ZXJuYWxf U2hkciBzeW10YWJfc2huZHhfaGRyOwogIHVuc2lnbmVkIGludCBzeW10YWJfc2VjdGlvbiwgc2hz dHJ0YWJfc2VjdGlvbjsKICB1bnNpZ25lZCBpbnQgc3RydGFiX3NlY3Rpb24sIGR5bnN5bXRhYl9z ZWN0aW9uOwogIHVuc2lnbmVkIGludCBzeW10YWJfc2huZHhfc2VjdGlvbjsKICB1bnNpZ25lZCBp bnQgZHludmVyc3ltX3NlY3Rpb24sIGR5bnZlcmRlZl9zZWN0aW9uLCBkeW52ZXJyZWZfc2VjdGlv bjsKICBmaWxlX3B0ciBuZXh0X2ZpbGVfcG9zOwoKCgoKCgogIGJmZF92bWEgZ3A7CiAgdW5zaWdu ZWQgaW50IGdwX3NpemU7CgogIEVsZl9JbnRlcm5hbF9TaGRyICoqZ3JvdXBfc2VjdF9wdHI7CiAg aW50IG51bV9ncm91cDsKCgogIGludCBjb3JlX3NpZ25hbDsKICBpbnQgY29yZV9waWQ7CiAgaW50 IGNvcmVfbHdwaWQ7CiAgY2hhciogY29yZV9wcm9ncmFtOwogIGNoYXIqIGNvcmVfY29tbWFuZDsK CgoKICBib29sZWFuIGxpbmtlcjsKCgoKCiAgc3RydWN0IGVsZl9saW5rX2hhc2hfZW50cnkgKipz eW1faGFzaGVzOwojIDEwNzggIi9zcmMvYmludXRpbHMtMi4xMy9iZmQvZWxmLWJmZC5oIgogIHVu aW9uCiAgICB7CiAgICAgIGJmZF9zaWduZWRfdm1hICpyZWZjb3VudHM7CiAgICAgIGJmZF92bWEg Km9mZnNldHM7CiAgICB9IGxvY2FsX2dvdDsKCgoKICBlbGZfbGlua2VyX3NlY3Rpb25fcG9pbnRl cnNfdCAqKmxpbmtlcl9zZWN0aW9uX3BvaW50ZXJzOwojIDEwOTYgIi9zcmMvYmludXRpbHMtMi4x My9iZmQvZWxmLWJmZC5oIgogIGNvbnN0IGNoYXIgKmR0X25hbWU7CgoKCgoKCgogIGNvbnN0IGNo YXIgKmR0X3NvbmFtZTsKCgoKCgoKICBib29sZWFuIGJhZF9zeW10YWI7CgoKICBiZmRfc2l6ZV90 eXBlIHByb2dyYW1faGVhZGVyX3NpemU7CgoKICB2b2lkICogbGluZV9pbmZvOwoKCgoKCiAgc3Ry dWN0IG1pcHNfZWxmX2ZpbmRfbGluZSAqZmluZF9saW5lX2luZm87CgoKICBzdHJ1Y3QgZHdhcmYx X2RlYnVnICpkd2FyZjFfZmluZF9saW5lX2luZm87CgoKICB2b2lkICogZHdhcmYyX2ZpbmRfbGlu ZV9pbmZvOwoKCgoKICBhc2VjdGlvbiAqKmxvY2FsX3N0dWJzOwoKCiAgYm9vbGVhbiBmbGFnc19p bml0OwoKCgogIGJvb2xlYW4gZWhfZnJhbWVfaGRyOwoKCiAgdW5zaWduZWQgaW50IGN2ZXJkZWZz OwoKCiAgdW5zaWduZWQgaW50IGN2ZXJyZWZzOwoKCiAgRWxmX0ludGVybmFsX1ZlcmRlZiAqdmVy ZGVmOwoKCiAgRWxmX0ludGVybmFsX1Zlcm5lZWQgKnZlcnJlZjsKCgogIHN0cnVjdCBlbGZfbGlu a2VyX3NlY3Rpb24gKmxpbmtlcl9zZWN0aW9uWyAoaW50KUxJTktFUl9TRUNUSU9OX01BWCBdOwoK CgogIGFzeW1ib2wgKmVsZl9kYXRhX3N5bWJvbDsKICBhc3ltYm9sICplbGZfdGV4dF9zeW1ib2w7 CiAgYXNlY3Rpb24gKmVsZl9kYXRhX3NlY3Rpb247CiAgYXNlY3Rpb24gKmVsZl90ZXh0X3NlY3Rp b247Cn07CiMgMTE5NSAiL3NyYy9iaW51dGlscy0yLjEzL2JmZC9lbGYtYmZkLmgiCmV4dGVybiB2 b2lkIF9iZmRfZWxmX3N3YXBfdmVyZGVmX2luCiAgKGJmZCAqLCBjb25zdCBFbGZfRXh0ZXJuYWxf VmVyZGVmICosIEVsZl9JbnRlcm5hbF9WZXJkZWYgKik7CmV4dGVybiB2b2lkIF9iZmRfZWxmX3N3 YXBfdmVyZGVmX291dAogIChiZmQgKiwgY29uc3QgRWxmX0ludGVybmFsX1ZlcmRlZiAqLCBFbGZf RXh0ZXJuYWxfVmVyZGVmICopOwpleHRlcm4gdm9pZCBfYmZkX2VsZl9zd2FwX3ZlcmRhdXhfaW4K ICAoYmZkICosIGNvbnN0IEVsZl9FeHRlcm5hbF9WZXJkYXV4ICosIEVsZl9JbnRlcm5hbF9WZXJk YXV4ICopOwpleHRlcm4gdm9pZCBfYmZkX2VsZl9zd2FwX3ZlcmRhdXhfb3V0CiAgKGJmZCAqLCBj b25zdCBFbGZfSW50ZXJuYWxfVmVyZGF1eCAqLCBFbGZfRXh0ZXJuYWxfVmVyZGF1eCAqKTsKZXh0 ZXJuIHZvaWQgX2JmZF9lbGZfc3dhcF92ZXJuZWVkX2luCiAgKGJmZCAqLCBjb25zdCBFbGZfRXh0 ZXJuYWxfVmVybmVlZCAqLCBFbGZfSW50ZXJuYWxfVmVybmVlZCAqKTsKZXh0ZXJuIHZvaWQgX2Jm ZF9lbGZfc3dhcF92ZXJuZWVkX291dAogIChiZmQgKiwgY29uc3QgRWxmX0ludGVybmFsX1Zlcm5l ZWQgKiwgRWxmX0V4dGVybmFsX1Zlcm5lZWQgKik7CmV4dGVybiB2b2lkIF9iZmRfZWxmX3N3YXBf dmVybmF1eF9pbgogIChiZmQgKiwgY29uc3QgRWxmX0V4dGVybmFsX1Zlcm5hdXggKiwgRWxmX0lu dGVybmFsX1Zlcm5hdXggKik7CmV4dGVybiB2b2lkIF9iZmRfZWxmX3N3YXBfdmVybmF1eF9vdXQK ICAoYmZkICosIGNvbnN0IEVsZl9JbnRlcm5hbF9WZXJuYXV4ICosIEVsZl9FeHRlcm5hbF9WZXJu YXV4ICopOwpleHRlcm4gdm9pZCBfYmZkX2VsZl9zd2FwX3ZlcnN5bV9pbgogIChiZmQgKiwgY29u c3QgRWxmX0V4dGVybmFsX1ZlcnN5bSAqLCBFbGZfSW50ZXJuYWxfVmVyc3ltICopOwpleHRlcm4g dm9pZCBfYmZkX2VsZl9zd2FwX3ZlcnN5bV9vdXQKICAoYmZkICosIGNvbnN0IEVsZl9JbnRlcm5h bF9WZXJzeW0gKiwgRWxmX0V4dGVybmFsX1ZlcnN5bSAqKTsKCmV4dGVybiBpbnQgX2JmZF9lbGZf c2VjdGlvbl9mcm9tX2JmZF9zZWN0aW9uCiAgKGJmZCAqLCBhc2VjdGlvbiAqKTsKZXh0ZXJuIGNo YXIgKmJmZF9lbGZfc3RyaW5nX2Zyb21fZWxmX3NlY3Rpb24KICAoYmZkICosIHVuc2lnbmVkLCB1 bnNpZ25lZCk7CmV4dGVybiBjaGFyICpiZmRfZWxmX2dldF9zdHJfc2VjdGlvbgogIChiZmQgKiwg dW5zaWduZWQpOwpleHRlcm4gRWxmX0ludGVybmFsX1N5bSAqYmZkX2VsZl9nZXRfZWxmX3N5bXMK ICAoYmZkICosIEVsZl9JbnRlcm5hbF9TaGRyICosIHNpemVfdCwgc2l6ZV90LCBFbGZfSW50ZXJu YWxfU3ltICosIHZvaWQgKiwgRWxmX0V4dGVybmFsX1N5bV9TaG5keCAqKTsKCgpleHRlcm4gYm9v bGVhbiBfYmZkX2VsZl9jb3B5X3ByaXZhdGVfYmZkX2RhdGEKICAoYmZkICosIGJmZCAqKTsKZXh0 ZXJuIGJvb2xlYW4gX2JmZF9lbGZfcHJpbnRfcHJpdmF0ZV9iZmRfZGF0YQogIChiZmQgKiwgdm9p ZCAqKTsKZXh0ZXJuIHZvaWQgYmZkX2VsZl9wcmludF9zeW1ib2wKICAoYmZkICosIHZvaWQgKiwg YXN5bWJvbCAqLCBiZmRfcHJpbnRfc3ltYm9sX3R5cGUpOwojIDEyNDAgIi9zcmMvYmludXRpbHMt Mi4xMy9iZmQvZWxmLWJmZC5oIgpleHRlcm4gdm9pZCBfYmZkX2VsZl9zcHJpbnRmX3ZtYQogIChi ZmQgKiwgY2hhciAqLCBiZmRfdm1hKTsKZXh0ZXJuIHZvaWQgX2JmZF9lbGZfZnByaW50Zl92bWEK ICAoYmZkICosIHZvaWQgKiwgYmZkX3ZtYSk7CgpleHRlcm4gZW51bSBlbGZfcmVsb2NfdHlwZV9j bGFzcyBfYmZkX2VsZl9yZWxvY190eXBlX2NsYXNzCiAgKGNvbnN0IEVsZl9JbnRlcm5hbF9SZWxh ICopOwpleHRlcm4gYmZkX3ZtYSBfYmZkX2VsZl9yZWxhX2xvY2FsX3N5bQogIChiZmQgKiwgRWxm X0ludGVybmFsX1N5bSAqLCBhc2VjdGlvbiAqLCBFbGZfSW50ZXJuYWxfUmVsYSAqKTsKZXh0ZXJu IGJmZF92bWEgX2JmZF9lbGZfcmVsX2xvY2FsX3N5bQogIChiZmQgKiwgRWxmX0ludGVybmFsX1N5 bSAqLCBhc2VjdGlvbiAqKiwgYmZkX3ZtYSk7CmV4dGVybiBiZmRfdm1hIF9iZmRfZWxmX3NlY3Rp b25fb2Zmc2V0CiAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBhc2VjdGlvbiAqLCBi ZmRfdm1hKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGJmZF9lbGZfaGFzaAogIChjb25zdCBjaGFy ICopOwoKZXh0ZXJuIGJmZF9yZWxvY19zdGF0dXNfdHlwZSBiZmRfZWxmX2dlbmVyaWNfcmVsb2MK ICAoYmZkICosIGFyZWxlbnQgKiwgYXN5bWJvbCAqLCB2b2lkICosIGFzZWN0aW9uICosIGJmZCAq LCBjaGFyICoqKTsKZXh0ZXJuIGJvb2xlYW4gYmZkX2VsZl9ta29iamVjdAogIChiZmQgKik7CmV4 dGVybiBib29sZWFuIGJmZF9lbGZfbWtjb3JlZmlsZQogIChiZmQgKik7CmV4dGVybiBFbGZfSW50 ZXJuYWxfU2hkciAqYmZkX2VsZl9maW5kX3NlY3Rpb24KICAoYmZkICosIGNoYXIgKik7CmV4dGVy biBib29sZWFuIF9iZmRfZWxmX21ha2Vfc2VjdGlvbl9mcm9tX3NoZHIKICAoYmZkICosIEVsZl9J bnRlcm5hbF9TaGRyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBib29sZWFuIF9iZmRfZWxmX21h a2Vfc2VjdGlvbl9mcm9tX3BoZHIKICAoYmZkICosIEVsZl9JbnRlcm5hbF9QaGRyICosIGludCwg Y29uc3QgY2hhciAqKTsKZXh0ZXJuIHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAqX2JmZF9lbGZfbGlu a19oYXNoX25ld2Z1bmMKICAoc3RydWN0IGJmZF9oYXNoX2VudHJ5ICosIHN0cnVjdCBiZmRfaGFz aF90YWJsZSAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gc3RydWN0IGJmZF9saW5rX2hhc2hfdGFi bGUgKl9iZmRfZWxmX2xpbmtfaGFzaF90YWJsZV9jcmVhdGUKICAoYmZkICopOwpleHRlcm4gdm9p ZCBfYmZkX2VsZl9saW5rX2hhc2hfY29weV9pbmRpcmVjdAogIChzdHJ1Y3QgZWxmX2xpbmtfaGFz aF9lbnRyeSAqLCBzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqKTsKZXh0ZXJuIHZvaWQgX2Jm ZF9lbGZfbGlua19oYXNoX2hpZGVfc3ltYm9sCiAgKHN0cnVjdCBiZmRfbGlua19pbmZvICosIHN0 cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICosIGJvb2xlYW4pOwpleHRlcm4gYm9vbGVhbiBfYmZk X2VsZl9saW5rX2hhc2hfdGFibGVfaW5pdAogIChzdHJ1Y3QgZWxmX2xpbmtfaGFzaF90YWJsZSAq LCBiZmQgKiwgc3RydWN0IGJmZF9oYXNoX2VudHJ5ICooKikgKHN0cnVjdCBiZmRfaGFzaF9lbnRy eSAqLCBzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKiwgY29uc3QgY2hhciAqKSk7CgoKCmV4dGVybiBi b29sZWFuIF9iZmRfZWxmX3NsdXJwX3ZlcnNpb25fdGFibGVzCiAgKGJmZCAqKTsKZXh0ZXJuIGJv b2xlYW4gX2JmZF9lbGZfbWVyZ2Vfc2VjdGlvbnMKICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19p bmZvICopOwpleHRlcm4gYm9vbGVhbiBiZmRfZWxmX2Rpc2NhcmRfZ3JvdXAKICAoYmZkICosIHN0 cnVjdCBzZWMgKik7CmV4dGVybiB2b2lkIGJmZF9lbGZfc2V0X2dyb3VwX2NvbnRlbnRzCiAgKGJm ZCAqLCBhc2VjdGlvbiAqLCB2b2lkICopOwpleHRlcm4gdm9pZCBfYmZkX2VsZl9saW5rX2p1c3Rf c3ltcwogIChhc2VjdGlvbiAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKZXh0ZXJuIGJvb2xl YW4gX2JmZF9lbGZfY29weV9wcml2YXRlX3N5bWJvbF9kYXRhCiAgKGJmZCAqLCBhc3ltYm9sICos IGJmZCAqLCBhc3ltYm9sICopOwpleHRlcm4gYm9vbGVhbiBfYmZkX2VsZl9jb3B5X3ByaXZhdGVf c2VjdGlvbl9kYXRhCiAgKGJmZCAqLCBhc2VjdGlvbiAqLCBiZmQgKiwgYXNlY3Rpb24gKik7CmV4 dGVybiBib29sZWFuIF9iZmRfZWxmX3dyaXRlX29iamVjdF9jb250ZW50cwogIChiZmQgKik7CmV4 dGVybiBib29sZWFuIF9iZmRfZWxmX3dyaXRlX2NvcmVmaWxlX2NvbnRlbnRzCiAgKGJmZCAqKTsK ZXh0ZXJuIGJvb2xlYW4gX2JmZF9lbGZfc2V0X3NlY3Rpb25fY29udGVudHMKICAoYmZkICosIHNl Y19wdHIsIHZvaWQgKiwgZmlsZV9wdHIsIGJmZF9zaXplX3R5cGUpOwpleHRlcm4gbG9uZyBfYmZk X2VsZl9nZXRfc3ltdGFiX3VwcGVyX2JvdW5kCiAgKGJmZCAqKTsKZXh0ZXJuIGxvbmcgX2JmZF9l bGZfZ2V0X3N5bXRhYgogIChiZmQgKiwgYXN5bWJvbCAqKik7CmV4dGVybiBsb25nIF9iZmRfZWxm X2dldF9keW5hbWljX3N5bXRhYl91cHBlcl9ib3VuZAogIChiZmQgKik7CmV4dGVybiBsb25nIF9i ZmRfZWxmX2Nhbm9uaWNhbGl6ZV9keW5hbWljX3N5bXRhYgogIChiZmQgKiwgYXN5bWJvbCAqKik7 CmV4dGVybiBsb25nIF9iZmRfZWxmX2dldF9yZWxvY191cHBlcl9ib3VuZAogIChiZmQgKiwgc2Vj X3B0cik7CmV4dGVybiBsb25nIF9iZmRfZWxmX2Nhbm9uaWNhbGl6ZV9yZWxvYwogIChiZmQgKiwg c2VjX3B0ciwgYXJlbGVudCAqKiwgYXN5bWJvbCAqKik7CmV4dGVybiBsb25nIF9iZmRfZWxmX2dl dF9keW5hbWljX3JlbG9jX3VwcGVyX2JvdW5kCiAgKGJmZCAqKTsKZXh0ZXJuIGxvbmcgX2JmZF9l bGZfY2Fub25pY2FsaXplX2R5bmFtaWNfcmVsb2MKICAoYmZkICosIGFyZWxlbnQgKiosIGFzeW1i b2wgKiopOwpleHRlcm4gYXN5bWJvbCAqX2JmZF9lbGZfbWFrZV9lbXB0eV9zeW1ib2wKICAoYmZk ICopOwpleHRlcm4gdm9pZCBfYmZkX2VsZl9nZXRfc3ltYm9sX2luZm8KICAoYmZkICosIGFzeW1i b2wgKiwgc3ltYm9sX2luZm8gKik7CmV4dGVybiBib29sZWFuIF9iZmRfZWxmX2lzX2xvY2FsX2xh YmVsX25hbWUKICAoYmZkICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBhbGVudCAqX2JmZF9lbGZf Z2V0X2xpbmVubwogIChiZmQgKiwgYXN5bWJvbCAqKTsKZXh0ZXJuIGJvb2xlYW4gX2JmZF9lbGZf c2V0X2FyY2hfbWFjaAogIChiZmQgKiwgZW51bSBiZmRfYXJjaGl0ZWN0dXJlLCB1bnNpZ25lZCBs b25nKTsKZXh0ZXJuIGJvb2xlYW4gX2JmZF9lbGZfZmluZF9uZWFyZXN0X2xpbmUKICAoYmZkICos IGFzZWN0aW9uICosIGFzeW1ib2wgKiosIGJmZF92bWEsIGNvbnN0IGNoYXIgKiosIGNvbnN0IGNo YXIgKiosIHVuc2lnbmVkIGludCAqKTsKCgoKZXh0ZXJuIGludCBfYmZkX2VsZl9zaXplb2ZfaGVh ZGVycwogIChiZmQgKiwgYm9vbGVhbik7CmV4dGVybiBib29sZWFuIF9iZmRfZWxmX25ld19zZWN0 aW9uX2hvb2sKICAoYmZkICosIGFzZWN0aW9uICopOwpleHRlcm4gYm9vbGVhbiBfYmZkX2VsZl9p bml0X3JlbG9jX3NoZHIKICAoYmZkICosIEVsZl9JbnRlcm5hbF9TaGRyICosIGFzZWN0aW9uICos IGJvb2xlYW4pOwoKCmV4dGVybiB2b2lkIF9iZmRfZWxmX25vX2luZm9fdG9faG93dG8KICAoYmZk ICosIGFyZWxlbnQgKiwgRWxmX0ludGVybmFsX1JlbGEgKik7CgpleHRlcm4gYm9vbGVhbiBiZmRf c2VjdGlvbl9mcm9tX3NoZHIKICAoYmZkICosIHVuc2lnbmVkIGludCBzaGluZGV4KTsKZXh0ZXJu IGJvb2xlYW4gYmZkX3NlY3Rpb25fZnJvbV9waGRyCiAgKGJmZCAqLCBFbGZfSW50ZXJuYWxfUGhk ciAqLCBpbnQpOwoKZXh0ZXJuIGludCBfYmZkX2VsZl9zeW1ib2xfZnJvbV9iZmRfc3ltYm9sCiAg KGJmZCAqLCBhc3ltYm9sICoqKTsKCmV4dGVybiBhc2VjdGlvbiAqYmZkX3NlY3Rpb25fZnJvbV9y X3N5bW5keAogIChiZmQgKiwgc3RydWN0IHN5bV9zZWNfY2FjaGUgKiwgYXNlY3Rpb24gKiwgdW5z aWduZWQgbG9uZyk7CmV4dGVybiBhc2VjdGlvbiAqYmZkX3NlY3Rpb25fZnJvbV9lbGZfaW5kZXgK ICAoYmZkICosIHVuc2lnbmVkIGludCk7CmV4dGVybiBib29sZWFuIF9iZmRfZWxmX2NyZWF0ZV9k eW5hbWljX3NlY3Rpb25zCiAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKZXh0ZXJu IHN0cnVjdCBiZmRfc3RydGFiX2hhc2ggKl9iZmRfZWxmX3N0cmluZ3RhYl9pbml0CiAgKHZvaWQp OwoKZXh0ZXJuIHN0cnVjdCBlbGZfc3RydGFiX2hhc2ggKiBfYmZkX2VsZl9zdHJ0YWJfaW5pdAog ICh2b2lkKTsKZXh0ZXJuIHZvaWQgX2JmZF9lbGZfc3RydGFiX2ZyZWUKICAoc3RydWN0IGVsZl9z dHJ0YWJfaGFzaCAqKTsKZXh0ZXJuIGJmZF9zaXplX3R5cGUgX2JmZF9lbGZfc3RydGFiX2FkZAog IChzdHJ1Y3QgZWxmX3N0cnRhYl9oYXNoICosIGNvbnN0IGNoYXIgKiwgYm9vbGVhbik7CmV4dGVy biB2b2lkIF9iZmRfZWxmX3N0cnRhYl9hZGRyZWYKICAoc3RydWN0IGVsZl9zdHJ0YWJfaGFzaCAq LCBiZmRfc2l6ZV90eXBlKTsKZXh0ZXJuIHZvaWQgX2JmZF9lbGZfc3RydGFiX2RlbHJlZgogIChz dHJ1Y3QgZWxmX3N0cnRhYl9oYXNoICosIGJmZF9zaXplX3R5cGUpOwpleHRlcm4gdm9pZCBfYmZk X2VsZl9zdHJ0YWJfY2xlYXJfYWxsX3JlZnMKICAoc3RydWN0IGVsZl9zdHJ0YWJfaGFzaCAqKTsK ZXh0ZXJuIGJmZF9zaXplX3R5cGUgX2JmZF9lbGZfc3RydGFiX3NpemUKICAoc3RydWN0IGVsZl9z dHJ0YWJfaGFzaCAqKTsKZXh0ZXJuIGJmZF9zaXplX3R5cGUgX2JmZF9lbGZfc3RydGFiX29mZnNl dAogIChzdHJ1Y3QgZWxmX3N0cnRhYl9oYXNoICosIGJmZF9zaXplX3R5cGUpOwpleHRlcm4gYm9v bGVhbiBfYmZkX2VsZl9zdHJ0YWJfZW1pdAogIChiZmQgKiwgc3RydWN0IGVsZl9zdHJ0YWJfaGFz aCAqKTsKZXh0ZXJuIHZvaWQgX2JmZF9lbGZfc3RydGFiX2ZpbmFsaXplCiAgKHN0cnVjdCBlbGZf c3RydGFiX2hhc2ggKik7CgpleHRlcm4gYm9vbGVhbiBfYmZkX2VsZl9kaXNjYXJkX3NlY3Rpb25f ZWhfZnJhbWUKICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGFzZWN0aW9uICosIGFz ZWN0aW9uICosIGJvb2xlYW4gKCopIChiZmRfdm1hLCB2b2lkICopLCBzdHJ1Y3QgZWxmX3JlbG9j X2Nvb2tpZSAqKTsKCmV4dGVybiBib29sZWFuIF9iZmRfZWxmX2Rpc2NhcmRfc2VjdGlvbl9laF9m cmFtZV9oZHIKICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGFzZWN0aW9uICopOwpl eHRlcm4gYmZkX3ZtYSBfYmZkX2VsZl9laF9mcmFtZV9zZWN0aW9uX29mZnNldAogIChiZmQgKiwg YXNlY3Rpb24gKiwgYmZkX3ZtYSk7CmV4dGVybiBib29sZWFuIF9iZmRfZWxmX3dyaXRlX3NlY3Rp b25fZWhfZnJhbWUKICAoYmZkICosIGFzZWN0aW9uICosIGFzZWN0aW9uICosIGJmZF9ieXRlICop OwpleHRlcm4gYm9vbGVhbiBfYmZkX2VsZl93cml0ZV9zZWN0aW9uX2VoX2ZyYW1lX2hkcgogIChi ZmQgKiwgYXNlY3Rpb24gKik7CmV4dGVybiBib29sZWFuIF9iZmRfZWxmX21heWJlX3N0cmlwX2Vo X2ZyYW1lX2hkcgogIChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKCmV4dGVybiBib29sZWFuIF9i ZmRfZWxmX2xpbmtfcmVjb3JkX2R5bmFtaWNfc3ltYm9sCiAgKHN0cnVjdCBiZmRfbGlua19pbmZv ICosIHN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICopOwpleHRlcm4gbG9uZyBfYmZkX2VsZl9s aW5rX2xvb2t1cF9sb2NhbF9keW5pbmR4CiAgKHN0cnVjdCBiZmRfbGlua19pbmZvICosIGJmZCAq LCBsb25nKTsKZXh0ZXJuIGJvb2xlYW4gX2JmZF9lbGZfY29tcHV0ZV9zZWN0aW9uX2ZpbGVfcG9z aXRpb25zCiAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKZXh0ZXJuIHZvaWQgX2Jm ZF9lbGZfYXNzaWduX2ZpbGVfcG9zaXRpb25zX2Zvcl9yZWxvY3MKICAoYmZkICopOwpleHRlcm4g ZmlsZV9wdHIgX2JmZF9lbGZfYXNzaWduX2ZpbGVfcG9zaXRpb25fZm9yX3NlY3Rpb24KICAoRWxm X0ludGVybmFsX1NoZHIgKiwgZmlsZV9wdHIsIGJvb2xlYW4pOwoKZXh0ZXJuIGJvb2xlYW4gX2Jm ZF9lbGZfdmFsaWRhdGVfcmVsb2MKICAoYmZkICosIGFyZWxlbnQgKik7CgpleHRlcm4gYm9vbGVh biBfYmZkX2VsZl9jcmVhdGVfZHluYW1pY19zZWN0aW9ucwogIChiZmQgKiwgc3RydWN0IGJmZF9s aW5rX2luZm8gKik7CmV4dGVybiBib29sZWFuIF9iZmRfZWxmX2NyZWF0ZV9nb3Rfc2VjdGlvbgog IChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CmV4dGVybiB1bnNpZ25lZCBsb25nIF9i ZmRfZWxmX2xpbmtfcmVudW1iZXJfZHluc3ltcwogIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2lu Zm8gKik7CgpleHRlcm4gYm9vbGVhbiBfYmZkX2VsZmNvcmVfbWFrZV9wc2V1ZG9zZWN0aW9uCiAg KGJmZCAqLCBjaGFyICosIHNpemVfdCwgdWZpbGVfcHRyKTsKZXh0ZXJuIGNoYXIgKl9iZmRfZWxm Y29yZV9zdHJuZHVwCiAgKGJmZCAqLCBjaGFyICosIHNpemVfdCk7CgpleHRlcm4gZWxmX2xpbmtl cl9zZWN0aW9uX3QgKl9iZmRfZWxmX2NyZWF0ZV9saW5rZXJfc2VjdGlvbgogIChiZmQgKiwgc3Ry dWN0IGJmZF9saW5rX2luZm8gKiwgZW51bSBlbGZfbGlua2VyX3NlY3Rpb25fZW51bSwgZWxmX2xp bmtlcl9zZWN0aW9uX3QgKik7CgoKZXh0ZXJuIGVsZl9saW5rZXJfc2VjdGlvbl9wb2ludGVyc190 ICpfYmZkX2VsZl9maW5kX3BvaW50ZXJfbGlua2VyX3NlY3Rpb24KICAoZWxmX2xpbmtlcl9zZWN0 aW9uX3BvaW50ZXJzX3QgKiwgYmZkX3ZtYSwgZWxmX2xpbmtlcl9zZWN0aW9uX2VudW1fdCk7CgoK ZXh0ZXJuIGJvb2xlYW4gYmZkX2VsZjMyX2NyZWF0ZV9wb2ludGVyX2xpbmtlcl9zZWN0aW9uCiAg KGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBlbGZfbGlua2VyX3NlY3Rpb25fdCAqLCBz dHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqLCBjb25zdCBFbGZfSW50ZXJuYWxfUmVsYSAqKTsK CgpleHRlcm4gYmZkX3ZtYSBiZmRfZWxmMzJfZmluaXNoX3BvaW50ZXJfbGlua2VyX3NlY3Rpb24K ICAoYmZkICosIGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBlbGZfbGlua2VyX3NlY3Rp b25fdCAqLCBzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqLCBiZmRfdm1hLCBjb25zdCBFbGZf SW50ZXJuYWxfUmVsYSAqLCBpbnQpOwoKCgpleHRlcm4gYm9vbGVhbiBiZmRfZWxmNjRfY3JlYXRl X3BvaW50ZXJfbGlua2VyX3NlY3Rpb24KICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICos IGVsZl9saW5rZXJfc2VjdGlvbl90ICosIHN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICosIGNv bnN0IEVsZl9JbnRlcm5hbF9SZWxhICopOwoKCmV4dGVybiBiZmRfdm1hIGJmZF9lbGY2NF9maW5p c2hfcG9pbnRlcl9saW5rZXJfc2VjdGlvbgogIChiZmQgKiwgYmZkICosIHN0cnVjdCBiZmRfbGlu a19pbmZvICosIGVsZl9saW5rZXJfc2VjdGlvbl90ICosIHN0cnVjdCBlbGZfbGlua19oYXNoX2Vu dHJ5ICosIGJmZF92bWEsIGNvbnN0IEVsZl9JbnRlcm5hbF9SZWxhICosIGludCk7CgoKCmV4dGVy biBib29sZWFuIF9iZmRfZWxmX21ha2VfbGlua2VyX3NlY3Rpb25fcmVsYQogIChiZmQgKiwgZWxm X2xpbmtlcl9zZWN0aW9uX3QgKiwgaW50KTsKCmV4dGVybiBjb25zdCBiZmRfdGFyZ2V0ICpiZmRf ZWxmMzJfb2JqZWN0X3AKICAoYmZkICopOwpleHRlcm4gY29uc3QgYmZkX3RhcmdldCAqYmZkX2Vs ZjMyX2NvcmVfZmlsZV9wCiAgKGJmZCAqKTsKZXh0ZXJuIGNoYXIgKmJmZF9lbGYzMl9jb3JlX2Zp bGVfZmFpbGluZ19jb21tYW5kCiAgKGJmZCAqKTsKZXh0ZXJuIGludCBiZmRfZWxmMzJfY29yZV9m aWxlX2ZhaWxpbmdfc2lnbmFsCiAgKGJmZCAqKTsKZXh0ZXJuIGJvb2xlYW4gYmZkX2VsZjMyX2Nv cmVfZmlsZV9tYXRjaGVzX2V4ZWN1dGFibGVfcAogIChiZmQgKiwgYmZkICopOwoKZXh0ZXJuIGJv b2xlYW4gYmZkX2VsZjMyX2JmZF9saW5rX2FkZF9zeW1ib2xzCiAgKGJmZCAqLCBzdHJ1Y3QgYmZk X2xpbmtfaW5mbyAqKTsKZXh0ZXJuIGJvb2xlYW4gYmZkX2VsZjMyX2JmZF9maW5hbF9saW5rCiAg KGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKCmV4dGVybiB2b2lkIGJmZF9lbGYzMl9z d2FwX3N5bWJvbF9pbgogIChiZmQgKiwgY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIEVsZl9J bnRlcm5hbF9TeW0gKik7CmV4dGVybiB2b2lkIGJmZF9lbGYzMl9zd2FwX3N5bWJvbF9vdXQKICAo YmZkICosIGNvbnN0IEVsZl9JbnRlcm5hbF9TeW0gKiwgdm9pZCAqLCB2b2lkICopOwpleHRlcm4g dm9pZCBiZmRfZWxmMzJfc3dhcF9yZWxvY19pbgogIChiZmQgKiwgY29uc3QgRWxmMzJfRXh0ZXJu YWxfUmVsICosIEVsZl9JbnRlcm5hbF9SZWwgKik7CmV4dGVybiB2b2lkIGJmZF9lbGYzMl9zd2Fw X3JlbG9jX291dAogIChiZmQgKiwgY29uc3QgRWxmX0ludGVybmFsX1JlbCAqLCBFbGYzMl9FeHRl cm5hbF9SZWwgKik7CmV4dGVybiB2b2lkIGJmZF9lbGYzMl9zd2FwX3JlbG9jYV9pbgogIChiZmQg KiwgY29uc3QgRWxmMzJfRXh0ZXJuYWxfUmVsYSAqLCBFbGZfSW50ZXJuYWxfUmVsYSAqKTsKZXh0 ZXJuIHZvaWQgYmZkX2VsZjMyX3N3YXBfcmVsb2NhX291dAogIChiZmQgKiwgY29uc3QgRWxmX0lu dGVybmFsX1JlbGEgKiwgRWxmMzJfRXh0ZXJuYWxfUmVsYSAqKTsKZXh0ZXJuIHZvaWQgYmZkX2Vs ZjMyX3N3YXBfcGhkcl9pbgogIChiZmQgKiwgY29uc3QgRWxmMzJfRXh0ZXJuYWxfUGhkciAqLCBF bGZfSW50ZXJuYWxfUGhkciAqKTsKZXh0ZXJuIHZvaWQgYmZkX2VsZjMyX3N3YXBfcGhkcl9vdXQK ICAoYmZkICosIGNvbnN0IEVsZl9JbnRlcm5hbF9QaGRyICosIEVsZjMyX0V4dGVybmFsX1BoZHIg Kik7CmV4dGVybiB2b2lkIGJmZF9lbGYzMl9zd2FwX2R5bl9pbgogIChiZmQgKiwgY29uc3Qgdm9p ZCAqLCBFbGZfSW50ZXJuYWxfRHluICopOwpleHRlcm4gdm9pZCBiZmRfZWxmMzJfc3dhcF9keW5f b3V0CiAgKGJmZCAqLCBjb25zdCBFbGZfSW50ZXJuYWxfRHluICosIHZvaWQgKik7CmV4dGVybiBs b25nIGJmZF9lbGYzMl9zbHVycF9zeW1ib2xfdGFibGUKICAoYmZkICosIGFzeW1ib2wgKiosIGJv b2xlYW4pOwpleHRlcm4gYm9vbGVhbiBiZmRfZWxmMzJfd3JpdGVfc2hkcnNfYW5kX2VoZHIKICAo YmZkICopOwpleHRlcm4gaW50IGJmZF9lbGYzMl93cml0ZV9vdXRfcGhkcnMKICAoYmZkICosIGNv bnN0IEVsZl9JbnRlcm5hbF9QaGRyICosIHVuc2lnbmVkIGludCk7CmV4dGVybiB2b2lkIGJmZF9l bGYzMl93cml0ZV9yZWxvY3MKICAoYmZkICosIGFzZWN0aW9uICosIHZvaWQgKik7CmV4dGVybiBi b29sZWFuIGJmZF9lbGYzMl9zbHVycF9yZWxvY190YWJsZQogIChiZmQgKiwgYXNlY3Rpb24gKiwg YXN5bWJvbCAqKiwgYm9vbGVhbik7CmV4dGVybiBib29sZWFuIGJmZF9lbGYzMl9hZGRfZHluYW1p Y19lbnRyeQogIChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBiZmRfdm1hLCBiZmRfdm1hKTsKZXh0 ZXJuIGJvb2xlYW4gYmZkX2VsZjMyX2xpbmtfY3JlYXRlX2R5bmFtaWNfc2VjdGlvbnMKICAoYmZk ICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOwpleHRlcm4gRWxmX0ludGVybmFsX1JlbGEgKl9i ZmRfZWxmMzJfbGlua19yZWFkX3JlbG9jcwogIChiZmQgKiwgYXNlY3Rpb24gKiwgdm9pZCAqLCBF bGZfSW50ZXJuYWxfUmVsYSAqLCBib29sZWFuKTsKCmV4dGVybiBjb25zdCBiZmRfdGFyZ2V0ICpi ZmRfZWxmNjRfb2JqZWN0X3AKICAoYmZkICopOwpleHRlcm4gY29uc3QgYmZkX3RhcmdldCAqYmZk X2VsZjY0X2NvcmVfZmlsZV9wCiAgKGJmZCAqKTsKZXh0ZXJuIGNoYXIgKmJmZF9lbGY2NF9jb3Jl X2ZpbGVfZmFpbGluZ19jb21tYW5kCiAgKGJmZCAqKTsKZXh0ZXJuIGludCBiZmRfZWxmNjRfY29y ZV9maWxlX2ZhaWxpbmdfc2lnbmFsCiAgKGJmZCAqKTsKZXh0ZXJuIGJvb2xlYW4gYmZkX2VsZjY0 X2NvcmVfZmlsZV9tYXRjaGVzX2V4ZWN1dGFibGVfcAogIChiZmQgKiwgYmZkICopOwpleHRlcm4g Ym9vbGVhbiBiZmRfZWxmNjRfYmZkX2xpbmtfYWRkX3N5bWJvbHMKICAoYmZkICosIHN0cnVjdCBi ZmRfbGlua19pbmZvICopOwpleHRlcm4gYm9vbGVhbiBiZmRfZWxmNjRfYmZkX2ZpbmFsX2xpbmsK ICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOwoKZXh0ZXJuIHZvaWQgYmZkX2VsZjY0 X3N3YXBfc3ltYm9sX2luCiAgKGJmZCAqLCBjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgRWxm X0ludGVybmFsX1N5bSAqKTsKZXh0ZXJuIHZvaWQgYmZkX2VsZjY0X3N3YXBfc3ltYm9sX291dAog IChiZmQgKiwgY29uc3QgRWxmX0ludGVybmFsX1N5bSAqLCB2b2lkICosIHZvaWQgKik7CmV4dGVy biB2b2lkIGJmZF9lbGY2NF9zd2FwX3JlbG9jX2luCiAgKGJmZCAqLCBjb25zdCBFbGY2NF9FeHRl cm5hbF9SZWwgKiwgRWxmX0ludGVybmFsX1JlbCAqKTsKZXh0ZXJuIHZvaWQgYmZkX2VsZjY0X3N3 YXBfcmVsb2Nfb3V0CiAgKGJmZCAqLCBjb25zdCBFbGZfSW50ZXJuYWxfUmVsICosIEVsZjY0X0V4 dGVybmFsX1JlbCAqKTsKZXh0ZXJuIHZvaWQgYmZkX2VsZjY0X3N3YXBfcmVsb2NhX2luCiAgKGJm ZCAqLCBjb25zdCBFbGY2NF9FeHRlcm5hbF9SZWxhICosIEVsZl9JbnRlcm5hbF9SZWxhICopOwpl eHRlcm4gdm9pZCBiZmRfZWxmNjRfc3dhcF9yZWxvY2Ffb3V0CiAgKGJmZCAqLCBjb25zdCBFbGZf SW50ZXJuYWxfUmVsYSAqLCBFbGY2NF9FeHRlcm5hbF9SZWxhICopOwpleHRlcm4gdm9pZCBiZmRf ZWxmNjRfc3dhcF9waGRyX2luCiAgKGJmZCAqLCBjb25zdCBFbGY2NF9FeHRlcm5hbF9QaGRyICos IEVsZl9JbnRlcm5hbF9QaGRyICopOwpleHRlcm4gdm9pZCBiZmRfZWxmNjRfc3dhcF9waGRyX291 dAogIChiZmQgKiwgY29uc3QgRWxmX0ludGVybmFsX1BoZHIgKiwgRWxmNjRfRXh0ZXJuYWxfUGhk ciAqKTsKZXh0ZXJuIHZvaWQgYmZkX2VsZjY0X3N3YXBfZHluX2luCiAgKGJmZCAqLCBjb25zdCB2 b2lkICosIEVsZl9JbnRlcm5hbF9EeW4gKik7CmV4dGVybiB2b2lkIGJmZF9lbGY2NF9zd2FwX2R5 bl9vdXQKICAoYmZkICosIGNvbnN0IEVsZl9JbnRlcm5hbF9EeW4gKiwgdm9pZCAqKTsKZXh0ZXJu IGxvbmcgYmZkX2VsZjY0X3NsdXJwX3N5bWJvbF90YWJsZQogIChiZmQgKiwgYXN5bWJvbCAqKiwg Ym9vbGVhbik7CmV4dGVybiBib29sZWFuIGJmZF9lbGY2NF93cml0ZV9zaGRyc19hbmRfZWhkcgog IChiZmQgKik7CmV4dGVybiBpbnQgYmZkX2VsZjY0X3dyaXRlX291dF9waGRycwogIChiZmQgKiwg Y29uc3QgRWxmX0ludGVybmFsX1BoZHIgKiwgdW5zaWduZWQgaW50KTsKZXh0ZXJuIHZvaWQgYmZk X2VsZjY0X3dyaXRlX3JlbG9jcwogIChiZmQgKiwgYXNlY3Rpb24gKiwgdm9pZCAqKTsKZXh0ZXJu IGJvb2xlYW4gYmZkX2VsZjY0X3NsdXJwX3JlbG9jX3RhYmxlCiAgKGJmZCAqLCBhc2VjdGlvbiAq LCBhc3ltYm9sICoqLCBib29sZWFuKTsKZXh0ZXJuIGJvb2xlYW4gYmZkX2VsZjY0X2FkZF9keW5h bWljX2VudHJ5CiAgKHN0cnVjdCBiZmRfbGlua19pbmZvICosIGJmZF92bWEsIGJmZF92bWEpOwpl eHRlcm4gYm9vbGVhbiBiZmRfZWxmNjRfbGlua19jcmVhdGVfZHluYW1pY19zZWN0aW9ucwogIChi ZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CmV4dGVybiBFbGZfSW50ZXJuYWxfUmVsYSAq X2JmZF9lbGY2NF9saW5rX3JlYWRfcmVsb2NzCiAgKGJmZCAqLCBhc2VjdGlvbiAqLCB2b2lkICos IEVsZl9JbnRlcm5hbF9SZWxhICosIGJvb2xlYW4pOwoKCgoKCgpleHRlcm4gaW50IGVsZl9saW5r X3JlY29yZF9sb2NhbF9keW5hbWljX3N5bWJvbAogIChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBi ZmQgKiwgbG9uZyk7CgoKCgoKZXh0ZXJuIGJvb2xlYW4gX2JmZF9lbGZfY2xvc2VfYW5kX2NsZWFu dXAKICAoYmZkICopOwpleHRlcm4gYmZkX3JlbG9jX3N0YXR1c190eXBlIF9iZmRfZWxmX3JlbF92 dGFibGVfcmVsb2NfZm4KICAoYmZkICosIGFyZWxlbnQgKiwgc3RydWN0IHN5bWJvbF9jYWNoZV9l bnRyeSAqLCB2b2lkICosIGFzZWN0aW9uICosIGJmZCAqLCBjaGFyICoqKTsKCgpleHRlcm4gYm9v bGVhbiBfYmZkX2VsZjMyX2djX3NlY3Rpb25zCiAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5m byAqKTsKZXh0ZXJuIGJvb2xlYW4gX2JmZF9lbGYzMl9nY19jb21tb25fZmluYWxpemVfZ290X29m ZnNldHMKICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOwpleHRlcm4gYm9vbGVhbiBf YmZkX2VsZjMyX2djX2NvbW1vbl9maW5hbF9saW5rCiAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtf aW5mbyAqKTsKZXh0ZXJuIGJvb2xlYW4gX2JmZF9lbGYzMl9nY19yZWNvcmRfdnRpbmhlcml0CiAg KGJmZCAqLCBhc2VjdGlvbiAqLCBzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqLCBiZmRfdm1h KTsKZXh0ZXJuIGJvb2xlYW4gX2JmZF9lbGYzMl9nY19yZWNvcmRfdnRlbnRyeQogIChiZmQgKiwg YXNlY3Rpb24gKiwgc3RydWN0IGVsZl9saW5rX2hhc2hfZW50cnkgKiwgYmZkX3ZtYSk7CgpleHRl cm4gYm9vbGVhbiBfYmZkX2VsZjY0X2djX3NlY3Rpb25zCiAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xp bmtfaW5mbyAqKTsKZXh0ZXJuIGJvb2xlYW4gX2JmZF9lbGY2NF9nY19jb21tb25fZmluYWxpemVf Z290X29mZnNldHMKICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOwpleHRlcm4gYm9v bGVhbiBfYmZkX2VsZjY0X2djX2NvbW1vbl9maW5hbF9saW5rCiAgKGJmZCAqLCBzdHJ1Y3QgYmZk X2xpbmtfaW5mbyAqKTsKZXh0ZXJuIGJvb2xlYW4gX2JmZF9lbGY2NF9nY19yZWNvcmRfdnRpbmhl cml0CiAgKGJmZCAqLCBhc2VjdGlvbiAqLCBzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqLCBi ZmRfdm1hKTsKZXh0ZXJuIGJvb2xlYW4gX2JmZF9lbGY2NF9nY19yZWNvcmRfdnRlbnRyeQogIChi ZmQgKiwgYXNlY3Rpb24gKiwgc3RydWN0IGVsZl9saW5rX2hhc2hfZW50cnkgKiwgYmZkX3ZtYSk7 CgpleHRlcm4gYm9vbGVhbiBfYmZkX2VsZjMyX3JlbG9jX3N5bWJvbF9kZWxldGVkX3AKICAoYmZk X3ZtYSwgdm9pZCAqKTsKZXh0ZXJuIGJvb2xlYW4gX2JmZF9lbGY2NF9yZWxvY19zeW1ib2xfZGVs ZXRlZF9wCiAgKGJmZF92bWEsIHZvaWQgKik7CgoKZXh0ZXJuIGNoYXIgKmVsZmNvcmVfd3JpdGVf bm90ZQogIChiZmQgKiwgY2hhciAqLCBpbnQgKiwgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IHZv aWQgKiwgaW50KTsKZXh0ZXJuIGNoYXIgKmVsZmNvcmVfd3JpdGVfcHJwc2luZm8KICAoYmZkICos IGNoYXIgKiwgaW50ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIg KmVsZmNvcmVfd3JpdGVfcHJzdGF0dXMKICAoYmZkICosIGNoYXIgKiwgaW50ICosIGxvbmcsIGlu dCwgY29uc3Qgdm9pZCAqKTsKZXh0ZXJuIGNoYXIgKiBlbGZjb3JlX3dyaXRlX3BzdGF0dXMKICAo YmZkICosIGNoYXIgKiwgaW50ICosIGxvbmcsIGludCwgY29uc3Qgdm9pZCAqKTsKZXh0ZXJuIGNo YXIgKmVsZmNvcmVfd3JpdGVfcHJmcHJlZwogIChiZmQgKiwgY2hhciAqLCBpbnQgKiwgY29uc3Qg dm9pZCAqLCBpbnQpOwpleHRlcm4gY2hhciAqZWxmY29yZV93cml0ZV9wcnhmcHJlZwogIChiZmQg KiwgY2hhciAqLCBpbnQgKiwgY29uc3Qgdm9pZCAqLCBpbnQpOwpleHRlcm4gY2hhciAqZWxmY29y ZV93cml0ZV9sd3BzdGF0dXMKICAoYmZkICosIGNoYXIgKiwgaW50ICosIGxvbmcsIGludCwgY29u c3Qgdm9pZCAqKTsKCgoKZXh0ZXJuIGJvb2xlYW4gX3NoX2VsZl9zZXRfbWFjaF9mcm9tX2ZsYWdz CiAgKGJmZCAqKTsKIyA0MSAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9jb25maWcvb2JqLWVsZi5o IiAyCgojIDEgInRhcmctY3B1LmgiIDEKIyAxICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2NvbmZp Zy90Yy1wcGMuaCIgMQojIDI2ICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2NvbmZpZy90Yy1wcGMu aCIKc3RydWN0IGZpeDsKIyA1MSAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9jb25maWcvdGMtcHBj LmgiCmV4dGVybiBlbnVtIGJmZF9hcmNoaXRlY3R1cmUgcHBjX2FyY2ggKHZvaWQpOwpleHRlcm4g dW5zaWduZWQgbG9uZyBwcGNfbWFjaCAodm9pZCk7CgoKZXh0ZXJuIGludCB0YXJnZXRfYmlnX2Vu ZGlhbjsKCgoKZXh0ZXJuIGNoYXIgKnBwY190YXJnZXRfZm9ybWF0ICh2b2lkKTsKIyAyMzIgIi9z cmMvYmludXRpbHMtMi4xMy9nYXMvY29uZmlnL3RjLXBwYy5oIgpleHRlcm4gaW50IHBwY19zZWN0 aW9uX2xldHRlciAoaW50LCBjaGFyICoqKTsKZXh0ZXJuIGludCBwcGNfc2VjdGlvbl90eXBlIChj aGFyICosIHNpemVfdCk7CmV4dGVybiBpbnQgcHBjX3NlY3Rpb25fd29yZCAoY2hhciAqLCBzaXpl X3QpOwpleHRlcm4gaW50IHBwY19zZWN0aW9uX2ZsYWdzIChpbnQsIGludCwgaW50KTsKIyAyNTgg Ii9zcmMvYmludXRpbHMtMi4xMy9nYXMvY29uZmlnL3RjLXBwYy5oIgpleHRlcm4gY29uc3QgY2hh ciAqcHBjX2NvbW1lbnRfY2hhcnM7CgoKCmV4dGVybiBpbnQgcHBjX2ZpeF9hZGp1c3RhYmxlIChz dHJ1Y3QgZml4ICopOwojIDI3NSAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9jb25maWcvdGMtcHBj LmgiCmV4dGVybiB2b2lkIHBwY19mcm9iX2ZpbGVfYmVmb3JlX2FkanVzdCAodm9pZCk7CgoKCgoK CmV4dGVybiBsb25nIG1kX3BjcmVsX2Zyb21fc2VjdGlvbiAoc3RydWN0IGZpeCAqLCBzZWdUKTsK CgpleHRlcm4gaW50IHBwY19wYXJzZV9uYW1lIChjb25zdCBjaGFyICosIHN0cnVjdCBleHByZXNz aW9uUyAqKTsKIyAyICJ0YXJnLWNwdS5oIiAyCiMgNDMgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMv Y29uZmlnL29iai1lbGYuaCIgMgojIDYyICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2NvbmZpZy9v YmotZWxmLmgiCnN0cnVjdCBlbGZfb2JqX3N5CnsKCiAgaW50IGxvY2FsOwoKCgogIGV4cHJlc3Np b25TICpzaXplOwoKCiAgY2hhciAqdmVyc2lvbmVkX25hbWU7CiMgODEgIi9zcmMvYmludXRpbHMt Mi4xMy9nYXMvY29uZmlnL29iai1lbGYuaCIKfTsKIyAxMDMgIi9zcmMvYmludXRpbHMtMi4xMy9n YXMvY29uZmlnL29iai1lbGYuaCIKZXh0ZXJuIHZvaWQgZWxmX2JlZ2luICh2b2lkKTsKIyAxMjYg Ii9zcmMvYmludXRpbHMtMi4xMy9nYXMvY29uZmlnL29iai1lbGYuaCIKaW50IGVsZl9zX2dldF9v dGhlciAoc3ltYm9sUyAqKTsKIyAxMzUgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvY29uZmlnL29i ai1lbGYuaCIKZXh0ZXJuIGFzZWN0aW9uICpnZGJfc2VjdGlvbjsKCgoKCmV4dGVybiB2b2lkIGVs Zl9mcm9iX2ZpbGUgKHZvaWQpOwoKCgoKZXh0ZXJuIHZvaWQgZWxmX2Zyb2JfZmlsZV9iZWZvcmVf YWRqdXN0ICh2b2lkKTsKCgoKCmV4dGVybiB2b2lkIGVsZl9mcm9iX2ZpbGVfYWZ0ZXJfcmVsb2Nz ICh2b2lkKTsKCgoKCmV4dGVybiB2b2lkIGVsZl9maWxlX3N5bWJvbCAoY29uc3QgY2hhciAqKTsK CmV4dGVybiB2b2lkIG9ial9lbGZfc2VjdGlvbl9jaGFuZ2VfaG9vayAodm9pZCk7CgpleHRlcm4g dm9pZCBvYmpfZWxmX3NlY3Rpb24gKGludCk7CmV4dGVybiB2b2lkIG9ial9lbGZfcHJldmlvdXMg KGludCk7CmV4dGVybiB2b2lkIG9ial9lbGZfdmVyc2lvbiAoaW50KTsKZXh0ZXJuIHZvaWQgb2Jq X2VsZl9jb21tb24gKGludCk7CmV4dGVybiB2b2lkIG9ial9lbGZfZGF0YSAoaW50KTsKZXh0ZXJu IHZvaWQgb2JqX2VsZl90ZXh0IChpbnQpOwpleHRlcm4gc3RydWN0IGZpeCAqb2JqX2VsZl92dGFi bGVfaW5oZXJpdCAoaW50KTsKZXh0ZXJuIHN0cnVjdCBmaXggKm9ial9lbGZfdnRhYmxlX2VudHJ5 IChpbnQpOwoKCgoKCgoKdm9pZCBlbGZfb2JqX3JlYWRfYmVnaW5faG9vayAodm9pZCk7CgoKCgp2 b2lkIGVsZl9vYmpfc3ltYm9sX25ld19ob29rIChzeW1ib2xTICopOwoKCgoKdm9pZCBlbGZfY29w eV9zeW1ib2xfYXR0cmlidXRlcyAoc3ltYm9sUyAqLCBzeW1ib2xTICopOwojIDIwMSAiL3NyYy9i aW51dGlscy0yLjEzL2dhcy9jb25maWcvb2JqLWVsZi5oIgpleHRlcm4gdm9pZCBvYmpfZWxmX2lu aXRfc3RhYl9zZWN0aW9uIChzZWdUKTsKIyAyMjMgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvY29u ZmlnL29iai1lbGYuaCIKZXh0ZXJuIHZvaWQgZWxmX2Zyb2Jfc3ltYm9sIChzeW1ib2xTICosIGlu dCAqKTsKCgoKCmV4dGVybiB2b2lkIGVsZl9wb3BfaW5zZXJ0ICh2b2lkKTsKCgoKCgoKCnN0cnVj dCBlY29mZl9leHRyOwoKZXh0ZXJuIHZvaWQgZWxmX2Vjb2ZmX3NldF9leHQgKHN5bWJvbFMgKiwg c3RydWN0IGVjb2ZmX2V4dHIgKik7CiMgMiAib2JqLWZvcm1hdC5oIiAyCiMgMjAgIi9zcmMvYmlu dXRpbHMtMi4xMy9nYXMvY29uZmlnL3RlLWdlbmVyaWMuaCIgMgojIDIgInRhcmctZW52LmgiIDIK IyA2MTUgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvYXMuaCIgMgoKCgoKCiMgMSAiL3NyYy9iaW51 dGlscy0yLjEzL2dhcy93cml0ZS5oIiAxCiMgNDUgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvd3Jp dGUuaCIKIyAxICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2JpdF9maXguaCIgMQojIDM2ICIvc3Jj L2JpbnV0aWxzLTIuMTMvZ2FzL2JpdF9maXguaCIKc3RydWN0IGJpdF9maXggewogIGludCBmeF9i aXRfc2l6ZTsKICBpbnQgZnhfYml0X29mZnNldDsKICBsb25nIGZ4X2JpdF9iYXNlOwoKICBsb25n IGZ4X2JpdF9iYXNlX2FkajsKICBsb25nIGZ4X2JpdF9tYXg7CiAgbG9uZyBmeF9iaXRfbWluOwog IGxvbmcgZnhfYml0X2FkZDsKfTsKdHlwZWRlZiBzdHJ1Y3QgYml0X2ZpeCBiaXRfZml4UzsKIyA0 NiAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy93cml0ZS5oIiAyCgoKCgoKc3RydWN0IGZpeAp7CgoK CgogIGNoYXIgZnhfcGNyZWxfYWRqdXN0OwoKCiAgdW5zaWduZWQgY2hhciBmeF9zaXplOwoKCiAg dW5zaWduZWQgZnhfcGNyZWwgOiAxOwoKCgoKCgogIHVuc2lnbmVkIGZ4X3BsdCA6IDE7CgoKCiAg dW5zaWduZWQgZnhfaW1fZGlzcCA6IDI7CgoKCiAgdW5zaWduZWQgZnhfdGNiaXQgOiAxOwoKCiAg dW5zaWduZWQgZnhfZG9uZSA6IDE7CgoKCgoKCiAgdW5zaWduZWQgZnhfbm9fb3ZlcmZsb3cgOiAx OwoKCiAgdW5zaWduZWQgZnhfc2lnbmVkIDogMTsKCgogIGZyYWdTICpmeF9mcmFnOwoKCiAgbG9u ZyBmeF93aGVyZTsKCgogIHN5bWJvbFMgKmZ4X2FkZHN5OwoKCiAgc3ltYm9sUyAqZnhfc3Vic3k7 CgoKICB2YWx1ZVQgZnhfb2Zmc2V0OwoKCiAgc3RydWN0IGZpeCAqZnhfbmV4dDsKCgoKCgoKICBi aXRfZml4UyAqZnhfYml0X2ZpeFA7CgoKICBiZmRfcmVsb2NfY29kZV9yZWFsX3R5cGUgZnhfcl90 eXBlOwojIDEzNSAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy93cml0ZS5oIgogIHZhbHVlVCBmeF9h ZGRudW1iZXI7CgoKCiAgY2hhciAqZnhfZmlsZTsKICB1bnNpZ25lZCBmeF9saW5lOwojIDE1NiAi L3NyYy9iaW51dGlscy0yLjEzL2dhcy93cml0ZS5oIgp9OwoKdHlwZWRlZiBzdHJ1Y3QgZml4IGZp eFM7CgpleHRlcm4gaW50IGZpbmFsaXplX3N5bXM7CiMgMTc1ICIvc3JjL2JpbnV0aWxzLTIuMTMv Z2FzL3dyaXRlLmgiCmV4dGVybiBsb25nIHN0cmluZ19ieXRlX2NvdW50OwpleHRlcm4gaW50IHNl Y3Rpb25fYWxpZ25tZW50W107CgpleHRlcm4gYml0X2ZpeFMgKmJpdF9maXhfbmV3CiAgKGludCBz aXplLCBpbnQgb2Zmc2V0LCBsb25nIGJhc2VfdHlwZSwgbG9uZyBiYXNlX2FkaiwgbG9uZyBtaW4s IGxvbmcgbWF4LCBsb25nIGFkZCk7CgpleHRlcm4gdm9pZCBhcHBlbmQgKGNoYXIgKipjaGFyUFAs IGNoYXIgKmZyb21QLCB1bnNpZ25lZCBsb25nIGxlbmd0aCk7CmV4dGVybiB2b2lkIHJlY29yZF9h bGlnbm1lbnQgKHNlZ1Qgc2VnLCBpbnQgYWxpZ24pOwpleHRlcm4gaW50IGdldF9yZWNvcmRlZF9h bGlnbm1lbnQgKHNlZ1Qgc2VnKTsKZXh0ZXJuIHZvaWQgc3Vic2Vnc19maW5pc2ggKHZvaWQpOwpl eHRlcm4gdm9pZCB3cml0ZV9vYmplY3RfZmlsZSAodm9pZCk7CmV4dGVybiBsb25nIHJlbGF4X2Zy YWcgKHNlZ1QsIGZyYWdTICosIGxvbmcpOwpleHRlcm4gaW50IHJlbGF4X3NlZ21lbnQKICAoc3Ry dWN0IGZyYWcgKiBzZWdfZnJhZ19yb290LCBzZWdUIHNlZ190eXBlKTsKCmV4dGVybiB2b2lkIG51 bWJlcl90b19jaGFyc19saXR0bGVlbmRpYW4gKGNoYXIgKiwgdmFsdWVULCBpbnQpOwpleHRlcm4g dm9pZCBudW1iZXJfdG9fY2hhcnNfYmlnZW5kaWFuIChjaGFyICosIHZhbHVlVCwgaW50KTsKCgpl eHRlcm4gZml4UyAqZml4X25ldwogIChmcmFnUyAqIGZyYWcsIGludCB3aGVyZSwgaW50IHNpemUs IHN5bWJvbFMgKiBhZGRfc3ltYm9sLCBvZmZzZXRUIG9mZnNldCwgaW50IHBjcmVsLCBiZmRfcmVs b2NfY29kZV9yZWFsX3R5cGUgcl90eXBlKTsKCmV4dGVybiBmaXhTICpmaXhfbmV3X2V4cAogIChm cmFnUyAqIGZyYWcsIGludCB3aGVyZSwgaW50IHNpemUsIGV4cHJlc3Npb25TICpleHAsIGludCBw Y3JlbCwgYmZkX3JlbG9jX2NvZGVfcmVhbF90eXBlIHJfdHlwZSk7CiMgMjA5ICIvc3JjL2JpbnV0 aWxzLTIuMTMvZ2FzL3dyaXRlLmgiCmV4dGVybiB2b2lkIHdyaXRlX3ByaW50X3N0YXRpc3RpY3Mg KEZJTEUgKik7CiMgNjIxICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2FzLmgiIDIKIyAxICIvc3Jj L2JpbnV0aWxzLTIuMTMvZ2FzL2ZyYWdzLmgiIDEKIyAyNiAiL3NyYy9iaW51dGlscy0yLjEzL2dh cy9mcmFncy5oIgpzdHJ1Y3Qgb2JzdGFjazsKIyA0MyAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9m cmFncy5oIgpzdHJ1Y3QgZnJhZyB7CgogIGFkZHJlc3NUIGZyX2FkZHJlc3M7CgoKICBhZGRyZXNz VCBsYXN0X2ZyX2FkZHJlc3M7CgoKICBvZmZzZXRUIGZyX2ZpeDsKCgogIG9mZnNldFQgZnJfdmFy OwoKICBvZmZzZXRUIGZyX29mZnNldDsKCiAgc3ltYm9sUyAqZnJfc3ltYm9sOwoKICBjaGFyICpm cl9vcGNvZGU7CgoKICBzdHJ1Y3QgZnJhZyAqZnJfbmV4dDsKCgogIGNoYXIgKmZyX2ZpbGU7CiAg dW5zaWduZWQgaW50IGZyX2xpbmU7CgoKICBzdHJ1Y3QgbGlzdF9pbmZvX3N0cnVjdCAqbGluZTsK CgoKCiAgdW5zaWduZWQgaW50IHJlbGF4X21hcmtlcjoxOwoKCiAgcmVsYXhfc3RhdGVUIGZyX3R5 cGU7CiAgcmVsYXhfc3Vic3RhdGVUIGZyX3N1YnR5cGU7CiMgOTggIi9zcmMvYmludXRpbHMtMi4x My9nYXMvZnJhZ3MuaCIKICBjaGFyIGZyX2xpdGVyYWxbMV07Cn07CiMgMTA4ICIvc3JjL2JpbnV0 aWxzLTIuMTMvZ2FzL2ZyYWdzLmgiCmV4dGVybiBmcmFnUyAqZnJhZ19ub3c7CmV4dGVybiBhZGRy ZXNzVCBmcmFnX25vd19maXggKHZvaWQpOwpleHRlcm4gYWRkcmVzc1QgZnJhZ19ub3dfZml4X29j dGV0cyAodm9pZCk7CgoKZXh0ZXJuIGZyYWdTIHplcm9fYWRkcmVzc19mcmFnOwoKZXh0ZXJuIGZy YWdTIGJzc19hZGRyZXNzX2ZyYWc7CiMgMTMwICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2ZyYWdz LmgiCmV4dGVybiB2b2lkIGZyYWdfYXBwZW5kXzFfY2hhciAoaW50KTsKCgoKdm9pZCBmcmFnX2lu aXQgKHZvaWQpOwpmcmFnUyAqZnJhZ19hbGxvYyAoc3RydWN0IG9ic3RhY2sgKik7CnZvaWQgZnJh Z19ncm93ICh1bnNpZ25lZCBpbnQgbmNoYXJzKTsKY2hhciAqZnJhZ19tb3JlIChpbnQgbmNoYXJz KTsKdm9pZCBmcmFnX2FsaWduIChpbnQgYWxpZ25tZW50LCBpbnQgZmlsbF9jaGFyYWN0ZXIsIGlu dCBtYXgpOwp2b2lkIGZyYWdfYWxpZ25fcGF0dGVybiAoaW50IGFsaWdubWVudCwgY29uc3QgY2hh ciAqZmlsbF9wYXR0ZXJuLCBpbnQgbl9maWxsLCBpbnQgbWF4KTsKCgoKdm9pZCBmcmFnX2FsaWdu X2NvZGUgKGludCBhbGlnbm1lbnQsIGludCBtYXgpOwp2b2lkIGZyYWdfbmV3IChpbnQgb2xkX2Zy YWdzX3Zhcl9tYXhfc2l6ZSk7CnZvaWQgZnJhZ193YW5lIChmcmFnUyAqIGZyYWdQKTsKCmNoYXIg KmZyYWdfdmFyaWFudCAocmVsYXhfc3RhdGVUIHR5cGUsIGludCBtYXhfY2hhcnMsIGludCB2YXIs IHJlbGF4X3N1YnN0YXRlVCBzdWJ0eXBlLCBzeW1ib2xTICogc3ltYm9sLCBvZmZzZXRUIG9mZnNl dCwgY2hhciAqb3Bjb2RlKTsKCgoKCgoKCmNoYXIgKmZyYWdfdmFyIChyZWxheF9zdGF0ZVQgdHlw ZSwgaW50IG1heF9jaGFycywgaW50IHZhciwgcmVsYXhfc3Vic3RhdGVUIHN1YnR5cGUsIHN5bWJv bFMgKiBzeW1ib2wsIG9mZnNldFQgb2Zmc2V0LCBjaGFyICpvcGNvZGUpOwojIDYyMiAiL3NyYy9i aW51dGlscy0yLjEzL2dhcy9hcy5oIiAyCiMgMSAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9oYXNo LmgiIDEKIyAyNCAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9oYXNoLmgiCnN0cnVjdCBoYXNoX2Nv bnRyb2w7CgoKCmV4dGVybiBzdHJ1Y3QgaGFzaF9jb250cm9sICpoYXNoX25ldyAodm9pZCk7CgoK CmV4dGVybiB2b2lkIGhhc2hfZGllIChzdHJ1Y3QgaGFzaF9jb250cm9sICopOwoKCgoKCgpleHRl cm4gY29uc3QgY2hhciAqaGFzaF9pbnNlcnQgKHN0cnVjdCBoYXNoX2NvbnRyb2wgKiwgY29uc3Qg Y2hhciAqa2V5LCB2b2lkICogdmFsdWUpOwoKCgoKCgpleHRlcm4gY29uc3QgY2hhciAqaGFzaF9q YW0gKHN0cnVjdCBoYXNoX2NvbnRyb2wgKiwgY29uc3QgY2hhciAqa2V5LCB2b2lkICogdmFsdWUp OwoKCgoKCgpleHRlcm4gdm9pZCAqIGhhc2hfcmVwbGFjZSAoc3RydWN0IGhhc2hfY29udHJvbCAq LCBjb25zdCBjaGFyICprZXksIHZvaWQgKiB2YWx1ZSk7CgoKCgoKZXh0ZXJuIHZvaWQgKiBoYXNo X2ZpbmQgKHN0cnVjdCBoYXNoX2NvbnRyb2wgKiwgY29uc3QgY2hhciAqa2V5KTsKCgoKCmV4dGVy biB2b2lkICogaGFzaF9kZWxldGUgKHN0cnVjdCBoYXNoX2NvbnRyb2wgKiwgY29uc3QgY2hhciAq a2V5KTsKCgoKCmV4dGVybiB2b2lkIGhhc2hfdHJhdmVyc2UgKHN0cnVjdCBoYXNoX2NvbnRyb2wg Kiwgdm9pZCAoKnBmbikgKGNvbnN0IGNoYXIgKmtleSwgdm9pZCAqIHZhbHVlKSk7CgoKCgoKZXh0 ZXJuIHZvaWQgaGFzaF9wcmludF9zdGF0aXN0aWNzIChGSUxFICosIGNvbnN0IGNoYXIgKm5hbWUs IHN0cnVjdCBoYXNoX2NvbnRyb2wgKik7CiMgNjIzICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2Fz LmgiIDIKIyAxICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL3JlYWQuaCIgMQojIDIzICIvc3JjL2Jp bnV0aWxzLTIuMTMvZ2FzL3JlYWQuaCIKZXh0ZXJuIGNoYXIgKmlucHV0X2xpbmVfcG9pbnRlcjsK IyA1OCAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9yZWFkLmgiCmV4dGVybiBjaGFyIGxleF90eXBl W107CmV4dGVybiBjaGFyIGlzX2VuZF9vZl9saW5lW107CgpleHRlcm4gaW50IGlzX2l0X2VuZF9v Zl9zdGF0ZW1lbnQgKHZvaWQpOwoKZXh0ZXJuIGludCB0YXJnZXRfYmlnX2VuZGlhbjsKCgpleHRl cm4gY29uc3QgY2hhciBjb21tZW50X2NoYXJzW107CmV4dGVybiBjb25zdCBjaGFyIGxpbmVfY29t bWVudF9jaGFyc1tdOwpleHRlcm4gY29uc3QgY2hhciBsaW5lX3NlcGFyYXRvcl9jaGFyc1tdOwoK CmV4dGVybiBjaGFyICoqaW5jbHVkZV9kaXJzOwpleHRlcm4gaW50IGluY2x1ZGVfZGlyX2NvdW50 OwpleHRlcm4gaW50IGluY2x1ZGVfZGlyX21heGxlbjsKCgpleHRlcm4gYWRkcmVzc1QgYWJzX3Nl Y3Rpb25fb2Zmc2V0OwoKCmV4dGVybiBzeW1ib2xTICpsaW5lX2xhYmVsOwoKCmV4dGVybiBzeW1i b2xTICptcmlfY29tbW9uX3N5bWJvbDsKCgpleHRlcm4gaW50IG91dHB1dHRpbmdfc3RhYnNfbGlu ZV9kZWJ1ZzsKCgplbnVtIGxpbmtvbmNlX3R5cGUgewogIExJTktPTkNFX1VOU0VUID0gMCwKICBM SU5LT05DRV9ESVNDQVJELAogIExJTktPTkNFX09ORV9PTkxZLAogIExJTktPTkNFX1NBTUVfU0la RSwKICBMSU5LT05DRV9TQU1FX0NPTlRFTlRTCn07CgoKCmV4dGVybiBjaGFyIG9yaWdpbmFsX2Nh c2Vfc3RyaW5nW107CgoKZXh0ZXJuIHZvaWQgcG9wX2luc2VydCAoY29uc3QgcHNldWRvX3R5cGVT ICopOwpleHRlcm4gdW5zaWduZWQgaW50IGdldF9zdGFiX3N0cmluZ19vZmZzZXQKICAoY29uc3Qg Y2hhciAqc3RyaW5nLCBjb25zdCBjaGFyICpzdGFic3RyX3NlY25hbWUpOwpleHRlcm4gdm9pZCBh b3V0X3Byb2Nlc3Nfc3RhYiAoaW50LCBjb25zdCBjaGFyICosIGludCwgaW50LCBpbnQpOwpleHRl cm4gY2hhciAqZGVtYW5kX2NvcHlfQ19zdHJpbmcgKGludCAqbGVuX3BvaW50ZXIpOwpleHRlcm4g Y2hhciBnZXRfYWJzb2x1dGVfZXhwcmVzc2lvbl9hbmRfdGVybWluYXRvcgogIChsb25nICp2YWxf cG9pbnRlcik7CmV4dGVybiBvZmZzZXRUIGdldF9hYnNvbHV0ZV9leHByZXNzaW9uICh2b2lkKTsK ZXh0ZXJuIHVuc2lnbmVkIGludCBuZXh0X2NoYXJfb2Zfc3RyaW5nICh2b2lkKTsKZXh0ZXJuIHZv aWQgc19tcmlfc2VjdCAoY2hhciAqKTsKZXh0ZXJuIGNoYXIgKm1yaV9jb21tZW50X2ZpZWxkIChj aGFyICopOwpleHRlcm4gdm9pZCBtcmlfY29tbWVudF9lbmQgKGNoYXIgKiwgaW50KTsKZXh0ZXJu IHZvaWQgYWRkX2luY2x1ZGVfZGlyIChjaGFyICpwYXRoKTsKZXh0ZXJuIHZvaWQgY29ucyAoaW50 IG5ieXRlcyk7CmV4dGVybiB2b2lkIGRlbWFuZF9lbXB0eV9yZXN0X29mX2xpbmUgKHZvaWQpOwpl eHRlcm4gdm9pZCBlbWl0X2V4cHIgKGV4cHJlc3Npb25TICpleHAsIHVuc2lnbmVkIGludCBuYnl0 ZXMpOwpleHRlcm4gdm9pZCBlbWl0X2xlYjEyOF9leHByIChleHByZXNzaW9uUyAqLCBpbnQpOwpl eHRlcm4gdm9pZCBlcXVhbHMgKGNoYXIgKnN5bV9uYW1lLCBpbnQgcmVhc3NpZ24pOwpleHRlcm4g dm9pZCBmbG9hdF9jb25zIChpbnQgZmxvYXRfdHlwZSk7CmV4dGVybiB2b2lkIGlnbm9yZV9yZXN0 X29mX2xpbmUgKHZvaWQpOwpleHRlcm4gdm9pZCBkaXNjYXJkX3Jlc3Rfb2ZfbGluZSAodm9pZCk7 CmV4dGVybiBpbnQgb3V0cHV0X2xlYjEyOCAoY2hhciAqLCB2YWx1ZVQsIGludCBzaWduKTsKZXh0 ZXJuIHZvaWQgcHNldWRvX3NldCAoc3ltYm9sUyAqIHN5bWJvbFApOwpleHRlcm4gdm9pZCByZWFk X2Ffc291cmNlX2ZpbGUgKGNoYXIgKm5hbWUpOwpleHRlcm4gdm9pZCByZWFkX2JlZ2luICh2b2lk KTsKZXh0ZXJuIHZvaWQgcmVhZF9wcmludF9zdGF0aXN0aWNzIChGSUxFICopOwpleHRlcm4gaW50 IHNpemVvZl9sZWIxMjggKHZhbHVlVCwgaW50IHNpZ24pOwpleHRlcm4gdm9pZCBzdGFic19nZW5l cmF0ZV9hc21fZmlsZSAodm9pZCk7CmV4dGVybiB2b2lkIHN0YWJzX2dlbmVyYXRlX2FzbV9saW5l bm8gKHZvaWQpOwpleHRlcm4gdm9pZCBzdGFic19nZW5lcmF0ZV9hc21fZnVuYyAoY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBzdGFic19nZW5lcmF0ZV9hc21fZW5kZnVu YyAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBkb19yZXBlYXQgKGlu dCxjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgZW5kX3JlcGVhdCAoaW50 KTsKCmV4dGVybiB2b2lkIGdlbmVyYXRlX2xpbmVub19kZWJ1ZyAodm9pZCk7CgpleHRlcm4gdm9p ZCBzX2Fib3J0IChpbnQpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKZXh0ZXJuIHZv aWQgc19hbGlnbl9ieXRlcyAoaW50IGFyZyk7CmV4dGVybiB2b2lkIHNfYWxpZ25fcHR3byAoaW50 KTsKZXh0ZXJuIHZvaWQgc19hcHBfZmlsZV9zdHJpbmcgKGNoYXIgKik7CmV4dGVybiB2b2lkIHNf YXBwX2ZpbGUgKGludCk7CmV4dGVybiB2b2lkIHNfYXBwX2xpbmUgKGludCk7CmV4dGVybiB2b2lk IHNfYmFkX2VuZHIgKGludCk7CmV4dGVybiB2b2lkIHNfY29tbSAoaW50KTsKZXh0ZXJuIHZvaWQg c19kYXRhIChpbnQpOwpleHRlcm4gdm9pZCBzX2Rlc2MgKGludCk7CmV4dGVybiB2b2lkIHNfZWxz ZSAoaW50IGFyZyk7CmV4dGVybiB2b2lkIHNfZWxzZWlmIChpbnQgYXJnKTsKZXh0ZXJuIHZvaWQg c19lbmQgKGludCBhcmcpOwpleHRlcm4gdm9pZCBzX2VuZGlmIChpbnQgYXJnKTsKZXh0ZXJuIHZv aWQgc19lcnIgKGludCk7CmV4dGVybiB2b2lkIHNfZmFpbCAoaW50KTsKZXh0ZXJuIHZvaWQgc19m aWxsIChpbnQpOwpleHRlcm4gdm9pZCBzX2Zsb2F0X3NwYWNlIChpbnQgbXVsdCk7CmV4dGVybiB2 b2lkIHNfZnVuYyAoaW50KTsKZXh0ZXJuIHZvaWQgZG9fc19mdW5jIChpbnQsIGNvbnN0IGNoYXIg Kik7CmV4dGVybiB2b2lkIHNfZ2xvYmwgKGludCBhcmcpOwpleHRlcm4gdm9pZCBzX2lmIChpbnQg YXJnKTsKZXh0ZXJuIHZvaWQgc19pZmMgKGludCBhcmcpOwpleHRlcm4gdm9pZCBzX2lmZGVmIChp bnQgYXJnKTsKZXh0ZXJuIHZvaWQgc19pZmVxcyAoaW50IGFyZyk7CmV4dGVybiB2b2lkIHNfaWdu b3JlIChpbnQgYXJnKTsKZXh0ZXJuIHZvaWQgc19pbmNsdWRlIChpbnQgYXJnKTsKZXh0ZXJuIHZv aWQgc19pcnAgKGludCBhcmcpOwpleHRlcm4gdm9pZCBzX2xjb21tIChpbnQgbmVlZHNfYWxpZ24p OwpleHRlcm4gdm9pZCBzX2xjb21tX2J5dGVzIChpbnQgbmVlZHNfYWxpZ24pOwpleHRlcm4gdm9p ZCBzX2xlYjEyOCAoaW50IHNpZ24pOwpleHRlcm4gdm9pZCBzX2xpbmtvbmNlIChpbnQpOwpleHRl cm4gdm9pZCBzX2xzeW0gKGludCk7CmV4dGVybiB2b2lkIHNfbWFjcm8gKGludCk7CmV4dGVybiB2 b2lkIHNfbWV4aXQgKGludCk7CmV4dGVybiB2b2lkIHNfbXJpIChpbnQpOwpleHRlcm4gdm9pZCBz X21yaV9jb21tb24gKGludCk7CmV4dGVybiB2b2lkIHNfb3JnIChpbnQpOwpleHRlcm4gdm9pZCBz X3ByaW50IChpbnQpOwpleHRlcm4gdm9pZCBzX3B1cmdlbSAoaW50KTsKZXh0ZXJuIHZvaWQgc19y ZXB0IChpbnQpOwpleHRlcm4gdm9pZCBzX3NldCAoaW50KTsKZXh0ZXJuIHZvaWQgc19zcGFjZSAo aW50IG11bHQpOwpleHRlcm4gdm9pZCBzX3N0YWIgKGludCB3aGF0KTsKZXh0ZXJuIHZvaWQgc19z dHJ1Y3QgKGludCk7CmV4dGVybiB2b2lkIHNfdGV4dCAoaW50KTsKZXh0ZXJuIHZvaWQgc3RyaW5n ZXIgKGludCBhcHBlbmRfemVybyk7CmV4dGVybiB2b2lkIHNfeHN0YWIgKGludCB3aGF0KTsKZXh0 ZXJuIHZvaWQgc19ydmEgKGludCk7CmV4dGVybiB2b2lkIHNfaW5jYmluIChpbnQpOwojIDYyNCAi L3NyYy9iaW51dGlscy0yLjEzL2dhcy9hcy5oIiAyCiMgMSAiL3NyYy9iaW51dGlscy0yLjEzL2dh cy9zeW1ib2xzLmgiIDEKIyAzNCAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9zeW1ib2xzLmgiCmV4 dGVybiBzdHJ1Y3Qgb2JzdGFjayBub3RlczsKCmV4dGVybiBzdHJ1Y3Qgb2JzdGFjayBjb25kX29i c3RhY2s7CgoKZXh0ZXJuIHN5bWJvbFMgKnN5bWJvbF9yb290UDsKZXh0ZXJuIHN5bWJvbFMgKnN5 bWJvbF9sYXN0UDsKCmV4dGVybiBzeW1ib2xTIGFic19zeW1ib2w7CgpleHRlcm4gaW50IHN5bWJv bF90YWJsZV9mcm96ZW47CgoKCmV4dGVybiBpbnQgc3ltYm9sc19jYXNlX3NlbnNpdGl2ZTsKCmNo YXIgKmRlY29kZV9sb2NhbF9sYWJlbF9uYW1lIChjaGFyICpzKTsKc3ltYm9sUyAqc3ltYm9sX2Zp bmQgKGNvbnN0IGNoYXIgKm5hbWUpOwpzeW1ib2xTICpzeW1ib2xfZmluZF9leGFjdCAoY29uc3Qg Y2hhciAqbmFtZSk7CnN5bWJvbFMgKnN5bWJvbF9maW5kX2Jhc2UgKGNvbnN0IGNoYXIgKm5hbWUs IGludCBzdHJpcF91bmRlcnNjb3JlKTsKc3ltYm9sUyAqc3ltYm9sX2ZpbmRfb3JfbWFrZSAoY29u c3QgY2hhciAqbmFtZSk7CnN5bWJvbFMgKnN5bWJvbF9tYWtlIChjb25zdCBjaGFyICpuYW1lKTsK c3ltYm9sUyAqc3ltYm9sX25ldyAoY29uc3QgY2hhciAqbmFtZSwgc2VnVCBzZWdtZW50LCB2YWx1 ZVQgdmFsdWUsIGZyYWdTICogZnJhZyk7CgpzeW1ib2xTICpzeW1ib2xfY3JlYXRlIChjb25zdCBj aGFyICpuYW1lLCBzZWdUIHNlZ21lbnQsIHZhbHVlVCB2YWx1ZSwgZnJhZ1MgKiBmcmFnKTsKCnN5 bWJvbFMgKmNvbG9uIChjb25zdCBjaGFyICpzeW1fbmFtZSk7CnZvaWQgbG9jYWxfY29sb24gKGlu dCBuKTsKdm9pZCBzeW1ib2xfYmVnaW4gKHZvaWQpOwp2b2lkIHN5bWJvbF9wcmludF9zdGF0aXN0 aWNzIChGSUxFICopOwp2b2lkIHN5bWJvbF90YWJsZV9pbnNlcnQgKHN5bWJvbFMgKiBzeW1ib2xQ KTsKdmFsdWVUIHJlc29sdmVfc3ltYm9sX3ZhbHVlIChzeW1ib2xTICopOwp2b2lkIHJlc29sdmVf bG9jYWxfc3ltYm9sX3ZhbHVlcyAodm9pZCk7Cgp2b2lkIHByaW50X3N5bWJvbF92YWx1ZSAoc3lt Ym9sUyAqKTsKdm9pZCBwcmludF9leHByIChleHByZXNzaW9uUyAqKTsKdm9pZCBwcmludF9leHBy XzEgKEZJTEUgKiwgZXhwcmVzc2lvblMgKik7CnZvaWQgcHJpbnRfc3ltYm9sX3ZhbHVlXzEgKEZJ TEUgKiwgc3ltYm9sUyAqKTsKCmludCBkb2xsYXJfbGFiZWxfZGVmaW5lZCAobG9uZyBsKTsKdm9p ZCBkb2xsYXJfbGFiZWxfY2xlYXIgKHZvaWQpOwp2b2lkIGRlZmluZV9kb2xsYXJfbGFiZWwgKGxv bmcgbCk7CmNoYXIgKmRvbGxhcl9sYWJlbF9uYW1lIChsb25nIGwsIGludCBhdWdlbmQpOwoKdm9p ZCBmYl9sYWJlbF9pbnN0YW5jZV9pbmMgKGxvbmcgbGFiZWwpOwpjaGFyICpmYl9sYWJlbF9uYW1l IChsb25nIG4sIGxvbmcgYXVnZW5kKTsKCmV4dGVybiB2b2lkIGNvcHlfc3ltYm9sX2F0dHJpYnV0 ZXMgKHN5bWJvbFMgKiwgc3ltYm9sUyAqKTsKCgpleHRlcm4gdmFsdWVUIFNfR0VUX1ZBTFVFIChz eW1ib2xTICopOwpleHRlcm4gdm9pZCBTX1NFVF9WQUxVRSAoc3ltYm9sUyAqLCB2YWx1ZVQpOwoK CmV4dGVybiBpbnQgU19JU19GVU5DVElPTiAoc3ltYm9sUyAqKTsKZXh0ZXJuIGludCBTX0lTX0VY VEVSTkFMIChzeW1ib2xTICopOwpleHRlcm4gaW50IFNfSVNfV0VBSyAoc3ltYm9sUyAqKTsKZXh0 ZXJuIGludCBTX0lTX0NPTU1PTiAoc3ltYm9sUyAqKTsKZXh0ZXJuIGludCBTX0lTX0RFRklORUQg KHN5bWJvbFMgKik7CmV4dGVybiBpbnQgU19JU19ERUJVRyAoc3ltYm9sUyAqKTsKZXh0ZXJuIGlu dCBTX0lTX0xPQ0FMIChzeW1ib2xTICopOwpleHRlcm4gaW50IFNfSVNfRVhURVJOIChzeW1ib2xT ICopOwpleHRlcm4gaW50IFNfSVNfU1RBQkQgKHN5bWJvbFMgKik7CmV4dGVybiBjb25zdCBjaGFy ICpTX0dFVF9OQU1FIChzeW1ib2xTICopOwpleHRlcm4gc2VnVCBTX0dFVF9TRUdNRU5UIChzeW1i b2xTICopOwpleHRlcm4gdm9pZCBTX1NFVF9TRUdNRU5UIChzeW1ib2xTICosIHNlZ1QpOwpleHRl cm4gdm9pZCBTX1NFVF9FWFRFUk5BTCAoc3ltYm9sUyAqKTsKZXh0ZXJuIHZvaWQgU19TRVRfTkFN RSAoc3ltYm9sUyAqLCBjaGFyICopOwpleHRlcm4gdm9pZCBTX0NMRUFSX0VYVEVSTkFMIChzeW1i b2xTICopOwpleHRlcm4gdm9pZCBTX1NFVF9XRUFLIChzeW1ib2xTICopOwojIDE0MCAiL3NyYy9i aW51dGlscy0yLjEzL2dhcy9zeW1ib2xzLmgiCmV4dGVybiBjb25zdCBzZWdUIE5fVFlQRV9zZWdb XTsKCgpleHRlcm4gY29uc3Qgc2hvcnQgc2VnX05fVFlQRVtdOwoKCgp2b2lkIHN5bWJvbF9jbGVh cl9saXN0X3BvaW50ZXJzIChzeW1ib2xTICogc3ltYm9sUCk7CgoKCnZvaWQgc3ltYm9sX2luc2Vy dCAoc3ltYm9sUyAqIGFkZG1lLCBzeW1ib2xTICogdGFyZ2V0LCBzeW1ib2xTICoqIHJvb3RQLCBz eW1ib2xTICoqIGxhc3RQKTsKCnZvaWQgc3ltYm9sX3JlbW92ZSAoc3ltYm9sUyAqIHN5bWJvbFAs IHN5bWJvbFMgKiogcm9vdFAsIHN5bWJvbFMgKiogbGFzdFApOwoKCmV4dGVybiBzeW1ib2xTICpz eW1ib2xfcHJldmlvdXMgKHN5bWJvbFMgKik7CgoKCnZvaWQgdmVyaWZ5X3N5bWJvbF9jaGFpbiAo c3ltYm9sUyAqIHJvb3RQLCBzeW1ib2xTICogbGFzdFApOwp2b2lkIHZlcmlmeV9zeW1ib2xfY2hh aW5fMiAoc3ltYm9sUyAqIHN5bVApOwoKdm9pZCBzeW1ib2xfYXBwZW5kIChzeW1ib2xTICogYWRk bWUsIHN5bWJvbFMgKiB0YXJnZXQsIHN5bWJvbFMgKiogcm9vdFAsIHN5bWJvbFMgKiogbGFzdFAp OwoKCmV4dGVybiBzeW1ib2xTICpzeW1ib2xfbmV4dCAoc3ltYm9sUyAqKTsKCmV4dGVybiBleHBy ZXNzaW9uUyAqc3ltYm9sX2dldF92YWx1ZV9leHByZXNzaW9uIChzeW1ib2xTICopOwpleHRlcm4g dm9pZCBzeW1ib2xfc2V0X3ZhbHVlX2V4cHJlc3Npb24gKHN5bWJvbFMgKiwgY29uc3QgZXhwcmVz c2lvblMgKik7CgpleHRlcm4gdm9pZCBzeW1ib2xfc2V0X2ZyYWcgKHN5bWJvbFMgKiwgZnJhZ1Mg Kik7CmV4dGVybiBmcmFnUyAqc3ltYm9sX2dldF9mcmFnIChzeW1ib2xTICopOwpleHRlcm4gdm9p ZCBzeW1ib2xfbWFya191c2VkIChzeW1ib2xTICopOwpleHRlcm4gdm9pZCBzeW1ib2xfY2xlYXJf dXNlZCAoc3ltYm9sUyAqKTsKZXh0ZXJuIGludCBzeW1ib2xfdXNlZF9wIChzeW1ib2xTICopOwpl eHRlcm4gdm9pZCBzeW1ib2xfbWFya191c2VkX2luX3JlbG9jIChzeW1ib2xTICopOwpleHRlcm4g dm9pZCBzeW1ib2xfY2xlYXJfdXNlZF9pbl9yZWxvYyAoc3ltYm9sUyAqKTsKZXh0ZXJuIGludCBz eW1ib2xfdXNlZF9pbl9yZWxvY19wIChzeW1ib2xTICopOwpleHRlcm4gdm9pZCBzeW1ib2xfbWFy a19tcmlfY29tbW9uIChzeW1ib2xTICopOwpleHRlcm4gdm9pZCBzeW1ib2xfY2xlYXJfbXJpX2Nv bW1vbiAoc3ltYm9sUyAqKTsKZXh0ZXJuIGludCBzeW1ib2xfbXJpX2NvbW1vbl9wIChzeW1ib2xT ICopOwpleHRlcm4gdm9pZCBzeW1ib2xfbWFya193cml0dGVuIChzeW1ib2xTICopOwpleHRlcm4g dm9pZCBzeW1ib2xfY2xlYXJfd3JpdHRlbiAoc3ltYm9sUyAqKTsKZXh0ZXJuIGludCBzeW1ib2xf d3JpdHRlbl9wIChzeW1ib2xTICopOwpleHRlcm4gdm9pZCBzeW1ib2xfbWFya19yZXNvbHZlZCAo c3ltYm9sUyAqKTsKZXh0ZXJuIGludCBzeW1ib2xfcmVzb2x2ZWRfcCAoc3ltYm9sUyAqKTsKZXh0 ZXJuIGludCBzeW1ib2xfc2VjdGlvbl9wIChzeW1ib2xTICopOwpleHRlcm4gaW50IHN5bWJvbF9l cXVhdGVkX3AgKHN5bWJvbFMgKik7CmV4dGVybiBpbnQgc3ltYm9sX2VxdWF0ZWRfcmVsb2NfcCAo c3ltYm9sUyAqKTsKZXh0ZXJuIGludCBzeW1ib2xfY29uc3RhbnRfcCAoc3ltYm9sUyAqKTsKCgpl eHRlcm4gYXN5bWJvbCAqc3ltYm9sX2dldF9iZmRzeW0gKHN5bWJvbFMgKik7CmV4dGVybiB2b2lk IHN5bWJvbF9zZXRfYmZkc3ltIChzeW1ib2xTICosIGFzeW1ib2wgKik7CgoKCnN0cnVjdCBlbGZf b2JqX3N5ICpzeW1ib2xfZ2V0X29iaiAoc3ltYm9sUyAqKTsKdm9pZCBzeW1ib2xfc2V0X29iaiAo c3ltYm9sUyAqLCBzdHJ1Y3QgZWxmX29ial9zeSAqKTsKIyA2MjUgIi9zcmMvYmludXRpbHMtMi4x My9nYXMvYXMuaCIgMgoKIyAxICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL3RjLmgiIDEKIyAyNSAi L3NyYy9iaW51dGlscy0yLjEzL2dhcy90Yy5oIgpleHRlcm4gY29uc3QgcHNldWRvX3R5cGVTIG1k X3BzZXVkb190YWJsZVtdOwoKCgoKc3RydWN0IHJlbGF4X3R5cGUKewoKICBsb25nIHJseF9mb3J3 YXJkOwoKICBsb25nIHJseF9iYWNrd2FyZDsKCgogIHVuc2lnbmVkIGNoYXIgcmx4X2xlbmd0aDsK CgogIHJlbGF4X3N1YnN0YXRlVCBybHhfbW9yZTsKfTsKCnR5cGVkZWYgc3RydWN0IHJlbGF4X3R5 cGUgcmVsYXhfdHlwZVM7CgpleHRlcm4gY29uc3QgaW50IG1kX3JlbG9jX3NpemU7CgpjaGFyICpt ZF9hdG9mIChpbnQgd2hhdF9zdGF0ZW1lbnRfdHlwZSwgY2hhciAqbGl0ZXJhbFAsIGludCAqc2l6 ZVApOwoKaW50IG1kX2VzdGltYXRlX3NpemVfYmVmb3JlX3JlbGF4IChmcmFnUyAqIGZyYWdQLCBz ZWdUIHNlZ21lbnQpOwoKaW50IG1kX3BhcnNlX29wdGlvbiAoaW50IGMsIGNoYXIgKmFyZyk7CnZv aWQgbWRfc2hvd191c2FnZSAoRklMRSAqKTsKbG9uZyBtZF9wY3JlbF9mcm9tIChmaXhTICogZml4 UCk7CnNob3J0IHRjX2NvZmZfZml4MnJ0eXBlIChmaXhTICogZml4UCk7CnZvaWQgbWRfYXNzZW1i bGUgKGNoYXIgKnN0cik7CnZvaWQgbWRfYmVnaW4gKHZvaWQpOwoKdm9pZCBtZF9jcmVhdGVfbG9u Z19qdW1wIChjaGFyICpwdHIsIGFkZHJlc3NUIGZyb21fYWRkciwgYWRkcmVzc1QgdG9fYWRkciwg ZnJhZ1MgKiBmcmFnLCBzeW1ib2xTICogdG9fc3ltYm9sKTsKCgoKCnZvaWQgbWRfY3JlYXRlX3No b3J0X2p1bXAgKGNoYXIgKnB0ciwgYWRkcmVzc1QgZnJvbV9hZGRyLCBhZGRyZXNzVCB0b19hZGRy LCBmcmFnUyAqIGZyYWcsIHN5bWJvbFMgKiB0b19zeW1ib2wpOwoKCgp2b2lkIG1kX251bWJlcl90 b19jaGFycyAoY2hhciAqYnVmLCB2YWx1ZVQgdmFsLCBpbnQgbik7CgoKCgoKdm9pZCBtZF9hcHBs eV9maXgzIChmaXhTICosIHZhbHVlVCAqLCBzZWdUKTsKCgoKdm9pZCBtZF9jb252ZXJ0X2ZyYWcg KGJmZCAqIGhlYWRlcnMsIHNlZ1Qgc2VjLCBmcmFnUyAqIGZyYWdQKTsKCgp2b2lkIHRjX2hlYWRl cnNfaG9vayAoc2VnVCAqLCBmaXhTICopOwoKCmV4dGVybiBhcmVsZW50ICp0Y19nZW5fcmVsb2Mg KGFzZWN0aW9uICosIGZpeFMgKik7CiMgMTAzICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL3RjLmgi CnZhbHVlVCBtZF9zZWN0aW9uX2FsaWduIChzZWdUIHNlZywgdmFsdWVUIHNpemUpOwoKCgpzeW1i b2xTICptZF91bmRlZmluZWRfc3ltYm9sIChjaGFyICpuYW1lKTsKIyA2MjcgIi9zcmMvYmludXRp bHMtMi4xMy9nYXMvYXMuaCIgMgojIDEgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvb2JqLmgiIDEK IyAyNCAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9vYmouaCIKY2hhciAqb2JqX2RlZmF1bHRfb3V0 cHV0X2ZpbGVfbmFtZSAodm9pZCk7CnZvaWQgb2JqX2VtaXRfcmVsb2NhdGlvbnMgKGNoYXIgKip3 aGVyZSwgZml4UyAqIGZpeFAsIHJlbGF4X2FkZHJlc3NUIHNlZ21lbnRfYWRkcmVzc19pbl9maWxl KTsKCnZvaWQgb2JqX2VtaXRfc3RyaW5ncyAoY2hhciAqKndoZXJlKTsKdm9pZCBvYmpfZW1pdF9z eW1ib2xzIChjaGFyICoqd2hlcmUsIHN5bWJvbFMgKiBzeW1ib2xzKTsKIyA0NCAiL3NyYy9iaW51 dGlscy0yLjEzL2dhcy9vYmouaCIKdm9pZCBvYmpfc3ltYm9sX3RvX2NoYXJzIChjaGFyICoqd2hl cmUsIHN5bWJvbFMgKiBzeW1ib2xQKTsKCmV4dGVybiBjb25zdCBwc2V1ZG9fdHlwZVMgb2JqX3Bz ZXVkb190YWJsZVtdOwoKCnN0cnVjdCBmb3JtYXRfb3BzIHsKICBpbnQgZmxhdm9yOwogIHVuc2ln bmVkIGRmbF9sZWFkaW5nX3VuZGVyc2NvcmUgOiAxOwogIHVuc2lnbmVkIGVtaXRfc2VjdGlvbl9z eW1ib2xzIDogMTsKICB2b2lkICgqYmVnaW4pICh2b2lkKTsKICB2b2lkICgqYXBwX2ZpbGUpIChj b25zdCBjaGFyICopOwogIHZvaWQgKCpmcm9iX3N5bWJvbCkgKHN5bWJvbFMgKiwgaW50ICopOwog IHZvaWQgKCpmcm9iX2ZpbGUpICh2b2lkKTsKICB2b2lkICgqZnJvYl9maWxlX2JlZm9yZV9hZGp1 c3QpICh2b2lkKTsKICB2b2lkICgqZnJvYl9maWxlX2FmdGVyX3JlbG9jcykgKHZvaWQpOwogIGJm ZF92bWEgKCpzX2dldF9zaXplKSAoc3ltYm9sUyAqKTsKICB2b2lkICgqc19zZXRfc2l6ZSkgKHN5 bWJvbFMgKiwgYmZkX3ZtYSk7CiAgYmZkX3ZtYSAoKnNfZ2V0X2FsaWduKSAoc3ltYm9sUyAqKTsK ICB2b2lkICgqc19zZXRfYWxpZ24pIChzeW1ib2xTICosIGJmZF92bWEpOwogIGludCAoKnNfZ2V0 X290aGVyKSAoc3ltYm9sUyAqKTsKICB2b2lkICgqc19zZXRfb3RoZXIpIChzeW1ib2xTICosIGlu dCk7CiAgaW50ICgqc19nZXRfZGVzYykgKHN5bWJvbFMgKik7CiAgdm9pZCAoKnNfc2V0X2Rlc2Mp IChzeW1ib2xTICosIGludCk7CiAgaW50ICgqc19nZXRfdHlwZSkgKHN5bWJvbFMgKik7CiAgdm9p ZCAoKnNfc2V0X3R5cGUpIChzeW1ib2xTICosIGludCk7CiAgdm9pZCAoKmNvcHlfc3ltYm9sX2F0 dHJpYnV0ZXMpIChzeW1ib2xTICosIHN5bWJvbFMgKik7CiAgdm9pZCAoKmdlbmVyYXRlX2FzbV9s aW5lbm8pICh2b2lkKTsKICB2b2lkICgqcHJvY2Vzc19zdGFiKSAoc2VnVCwgaW50LCBjb25zdCBj aGFyICosIGludCwgaW50LCBpbnQpOwogIGludCAoKnNlcGFyYXRlX3N0YWJfc2VjdGlvbnMpICh2 b2lkKTsKICB2b2lkICgqaW5pdF9zdGFiX3NlY3Rpb24pIChzZWdUKTsKICBpbnQgKCpzZWNfc3lt X29rX2Zvcl9yZWxvYykgKGFzZWN0aW9uICopOwogIHZvaWQgKCpwb3BfaW5zZXJ0KSAodm9pZCk7 CgogIHZvaWQgKCplY29mZl9zZXRfZXh0KSAoc3ltYm9sUyAqLCBzdHJ1Y3QgZWNvZmZfZXh0ciAq KTsKCiAgdm9pZCAoKnJlYWRfYmVnaW5faG9vaykgKHZvaWQpOwogIHZvaWQgKCpzeW1ib2xfbmV3 X2hvb2spIChzeW1ib2xTICopOwp9OwoKZXh0ZXJuIGNvbnN0IHN0cnVjdCBmb3JtYXRfb3BzIGVs Zl9mb3JtYXRfb3BzOwpleHRlcm4gY29uc3Qgc3RydWN0IGZvcm1hdF9vcHMgZWNvZmZfZm9ybWF0 X29wczsKZXh0ZXJuIGNvbnN0IHN0cnVjdCBmb3JtYXRfb3BzIGNvZmZfZm9ybWF0X29wczsKZXh0 ZXJuIGNvbnN0IHN0cnVjdCBmb3JtYXRfb3BzIGFvdXRfZm9ybWF0X29wczsKCgpleHRlcm4gY29u c3Qgc3RydWN0IGZvcm1hdF9vcHMgKnRoaXNfZm9ybWF0OwojIDYyOCAiL3NyYy9iaW51dGlscy0y LjEzL2dhcy9hcy5oIiAyCgoKCgojIDEgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvbGlzdGluZy5o IiAxCiMgNDQgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvbGlzdGluZy5oIgp2b2lkIGxpc3Rpbmdf ZWplY3QgKGludCk7CnZvaWQgbGlzdGluZ19lcnJvciAoY29uc3QgY2hhciAqbWVzc2FnZSk7CnZv aWQgbGlzdGluZ19maWxlIChjb25zdCBjaGFyICpuYW1lKTsKdm9pZCBsaXN0aW5nX2ZsYWdzIChp bnQpOwp2b2lkIGxpc3RpbmdfbGlzdCAoaW50IG9uKTsKdm9pZCBsaXN0aW5nX25ld2xpbmUgKGNo YXIgKnBzKTsKdm9pZCBsaXN0aW5nX3ByZXZfbGluZSAodm9pZCk7CnZvaWQgbGlzdGluZ19wcmlu dCAoY2hhciAqbmFtZSk7CnZvaWQgbGlzdGluZ19wc2l6ZSAoaW50KTsKdm9pZCBsaXN0aW5nX25v cGFnZSAoaW50KTsKdm9pZCBsaXN0aW5nX3NvdXJjZV9maWxlIChjb25zdCBjaGFyICopOwp2b2lk IGxpc3Rpbmdfc291cmNlX2xpbmUgKHVuc2lnbmVkIGludCk7CnZvaWQgbGlzdGluZ190aXRsZSAo aW50IGRlcHRoKTsKdm9pZCBsaXN0aW5nX3dhcm5pbmcgKGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwp2 b2lkIGxpc3Rpbmdfd2lkdGggKHVuc2lnbmVkIGludCB4KTsKCmV4dGVybiBpbnQgbGlzdGluZ19s aHNfd2lkdGg7CmV4dGVybiBpbnQgbGlzdGluZ19saHNfd2lkdGhfc2Vjb25kOwpleHRlcm4gaW50 IGxpc3RpbmdfbGhzX2NvbnRfbGluZXM7CmV4dGVybiBpbnQgbGlzdGluZ19yaHNfd2lkdGg7CiMg NjMzICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2FzLmgiIDIKIyAyNSAiL3NyYy9iaW51dGlscy0y LjEzL2dhcy9jb25maWcvdGMtcHBjLmMiIDIKIyAxICIvc3JjL2JpbnV0aWxzLTIuMTMvaW5jbHVk ZS9zYWZlLWN0eXBlLmgiIDEKIyA0NCAiL3NyYy9iaW51dGlscy0yLjEzL2luY2x1ZGUvc2FmZS1j dHlwZS5oIgplbnVtIHsKCiAgX3NjaF9pc2JsYW5rID0gMHgwMDAxLAogIF9zY2hfaXNjbnRybCA9 IDB4MDAwMiwKICBfc2NoX2lzZGlnaXQgPSAweDAwMDQsCiAgX3NjaF9pc2xvd2VyID0gMHgwMDA4 LAogIF9zY2hfaXNwcmludCA9IDB4MDAxMCwKICBfc2NoX2lzcHVuY3QgPSAweDAwMjAsCiAgX3Nj aF9pc3NwYWNlID0gMHgwMDQwLAogIF9zY2hfaXN1cHBlciA9IDB4MDA4MCwKICBfc2NoX2lzeGRp Z2l0ID0gMHgwMTAwLAoKCiAgX3NjaF9pc2lkc3QgPSAweDAyMDAsCiAgX3NjaF9pc3ZzcCA9IDB4 MDQwMCwKICBfc2NoX2lzbnZzcCA9IDB4MDgwMCwKCgogIF9zY2hfaXNhbHBoYSA9IF9zY2hfaXN1 cHBlcnxfc2NoX2lzbG93ZXIsCiAgX3NjaF9pc2FsbnVtID0gX3NjaF9pc2FscGhhfF9zY2hfaXNk aWdpdCwKICBfc2NoX2lzaWRudW0gPSBfc2NoX2lzaWRzdHxfc2NoX2lzZGlnaXQsCiAgX3NjaF9p c2dyYXBoID0gX3NjaF9pc2FsbnVtfF9zY2hfaXNwdW5jdCwKICBfc2NoX2lzY3Bwc3AgPSBfc2No X2lzdnNwfF9zY2hfaXNudnNwLAogIF9zY2hfaXNiYXNpYyA9IF9zY2hfaXNwcmludHxfc2NoX2lz Y3Bwc3AKCn07CgoKZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IF9zY2hfaXN0YWJsZVsyNTZd OwojIDk3ICIvc3JjL2JpbnV0aWxzLTIuMTMvaW5jbHVkZS9zYWZlLWN0eXBlLmgiCmV4dGVybiBj b25zdCB1bnNpZ25lZCBjaGFyIF9zY2hfdG91cHBlclsyNTZdOwpleHRlcm4gY29uc3QgdW5zaWdu ZWQgY2hhciBfc2NoX3RvbG93ZXJbMjU2XTsKIyAyNiAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9j b25maWcvdGMtcHBjLmMiIDIKIyAxICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL3N1YnNlZ3MuaCIg MQojIDQxICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL3N1YnNlZ3MuaCIKIyAxICIvc3JjL2JpbnV0 aWxzLTIuMTMvaW5jbHVkZS9vYnN0YWNrLmgiIDEKIyAxNjEgIi9zcmMvYmludXRpbHMtMi4xMy9p bmNsdWRlL29ic3RhY2suaCIKc3RydWN0IF9vYnN0YWNrX2NodW5rCnsKICBjaGFyICpsaW1pdDsK ICBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKnByZXY7CiAgY2hhciBjb250ZW50c1s0XTsKfTsKCnN0 cnVjdCBvYnN0YWNrCnsKICBsb25nIGNodW5rX3NpemU7CiAgc3RydWN0IF9vYnN0YWNrX2NodW5r ICpjaHVuazsKICBjaGFyICpvYmplY3RfYmFzZTsKICBjaGFyICpuZXh0X2ZyZWU7CiAgY2hhciAq Y2h1bmtfbGltaXQ7CiAgaW50IHRlbXA7CiAgaW50IGFsaWdubWVudF9tYXNrOwoKCgoKICBzdHJ1 Y3QgX29ic3RhY2tfY2h1bmsgKigqY2h1bmtmdW4pICh2b2lkICosIGxvbmcpOwogIHZvaWQgKCpm cmVlZnVuKSAodm9pZCAqLCBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKik7CiAgdm9pZCAqZXh0cmFf YXJnOwoKCgoKCiAgdW5zaWduZWQgdXNlX2V4dHJhX2FyZzoxOwogIHVuc2lnbmVkIG1heWJlX2Vt cHR5X29iamVjdDoxOwoKCgogIHVuc2lnbmVkIGFsbG9jX2ZhaWxlZDoxOwoKCn07CgoKCgpleHRl cm4gdm9pZCBfb2JzdGFja19uZXdjaHVuayAoc3RydWN0IG9ic3RhY2sgKiwgaW50KTsKZXh0ZXJu IHZvaWQgX29ic3RhY2tfZnJlZSAoc3RydWN0IG9ic3RhY2sgKiwgdm9pZCAqKTsKZXh0ZXJuIGlu dCBfb2JzdGFja19iZWdpbiAoc3RydWN0IG9ic3RhY2sgKiwgaW50LCBpbnQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2b2lkICooKikgKGxvbmcpLCB2b2lkICgqKSAodm9pZCAqKSk7CmV4 dGVybiBpbnQgX29ic3RhY2tfYmVnaW5fMSAoc3RydWN0IG9ic3RhY2sgKiwgaW50LCBpbnQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKCopICh2b2lkICosIGxvbmcpLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCopICh2b2lkICosIHZvaWQgKiksIHZvaWQg Kik7CmV4dGVybiBpbnQgX29ic3RhY2tfbWVtb3J5X3VzZWQgKHN0cnVjdCBvYnN0YWNrICopOwoj IDIyMyAiL3NyYy9iaW51dGlscy0yLjEzL2luY2x1ZGUvb2JzdGFjay5oIgp2b2lkIG9ic3RhY2tf aW5pdCAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2spOwoKdm9pZCAqIG9ic3RhY2tfYWxsb2MgKHN0 cnVjdCBvYnN0YWNrICpvYnN0YWNrLCBpbnQgc2l6ZSk7Cgp2b2lkICogb2JzdGFja19jb3B5IChz dHJ1Y3Qgb2JzdGFjayAqb2JzdGFjaywgdm9pZCAqYWRkcmVzcywgaW50IHNpemUpOwp2b2lkICog b2JzdGFja19jb3B5MCAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2ssIHZvaWQgKmFkZHJlc3MsIGlu dCBzaXplKTsKCnZvaWQgb2JzdGFja19mcmVlIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjaywgdm9p ZCAqYmxvY2spOwoKdm9pZCBvYnN0YWNrX2JsYW5rIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjaywg aW50IHNpemUpOwoKdm9pZCBvYnN0YWNrX2dyb3cgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCB2 b2lkICpkYXRhLCBpbnQgc2l6ZSk7CnZvaWQgb2JzdGFja19ncm93MCAoc3RydWN0IG9ic3RhY2sg Km9ic3RhY2ssIHZvaWQgKmRhdGEsIGludCBzaXplKTsKCnZvaWQgb2JzdGFja18xZ3JvdyAoc3Ry dWN0IG9ic3RhY2sgKm9ic3RhY2ssIGludCBkYXRhX2NoYXIpOwp2b2lkIG9ic3RhY2tfcHRyX2dy b3cgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCB2b2lkICpkYXRhKTsKdm9pZCBvYnN0YWNrX2lu dF9ncm93IChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjaywgaW50IGRhdGEpOwoKdm9pZCAqIG9ic3Rh Y2tfZmluaXNoIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjayk7CgppbnQgb2JzdGFja19vYmplY3Rf c2l6ZSAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2spOwoKaW50IG9ic3RhY2tfcm9vbSAoc3RydWN0 IG9ic3RhY2sgKm9ic3RhY2spOwp2b2lkIG9ic3RhY2tfbWFrZV9yb29tIChzdHJ1Y3Qgb2JzdGFj ayAqb2JzdGFjaywgaW50IHNpemUpOwp2b2lkIG9ic3RhY2tfMWdyb3dfZmFzdCAoc3RydWN0IG9i c3RhY2sgKm9ic3RhY2ssIGludCBkYXRhX2NoYXIpOwp2b2lkIG9ic3RhY2tfcHRyX2dyb3dfZmFz dCAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2ssIHZvaWQgKmRhdGEpOwp2b2lkIG9ic3RhY2tfaW50 X2dyb3dfZmFzdCAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2ssIGludCBkYXRhKTsKdm9pZCBvYnN0 YWNrX2JsYW5rX2Zhc3QgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCBpbnQgc2l6ZSk7Cgp2b2lk ICogb2JzdGFja19iYXNlIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjayk7CnZvaWQgKiBvYnN0YWNr X25leHRfZnJlZSAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2spOwppbnQgb2JzdGFja19hbGlnbm1l bnRfbWFzayAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2spOwppbnQgb2JzdGFja19jaHVua19zaXpl IChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjayk7CmludCBvYnN0YWNrX21lbW9yeV91c2VkIChzdHJ1 Y3Qgb2JzdGFjayAqb2JzdGFjayk7CiMgMjY3ICIvc3JjL2JpbnV0aWxzLTIuMTMvaW5jbHVkZS9v YnN0YWNrLmgiCmV4dGVybiB2b2lkICgqb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlcikgKHZv aWQpOwoKCgoKCmV4dGVybiBpbnQgb2JzdGFja19leGl0X2ZhaWx1cmU7CiMgNDIgIi9zcmMvYmlu dXRpbHMtMi4xMy9nYXMvc3Vic2Vncy5oIiAyCgpzdHJ1Y3QgZnJjaGFpbgp7CiAgc3RydWN0IGZy YWcgKmZyY2hfcm9vdDsKICBzdHJ1Y3QgZnJhZyAqZnJjaF9sYXN0OwogIHN0cnVjdCBmcmNoYWlu ICpmcmNoX25leHQ7CiAgc2VnVCBmcmNoX3NlZzsKICBzdWJzZWdUIGZyY2hfc3Vic2VnOwoKICBm aXhTICpmaXhfcm9vdDsKICBmaXhTICpmaXhfdGFpbDsKCiAgc3RydWN0IG9ic3RhY2sgZnJjaF9v YnN0YWNrOwogIGZyYWdTICpmcmNoX2ZyYWdfbm93Owp9OwoKdHlwZWRlZiBzdHJ1Y3QgZnJjaGFp biBmcmNoYWluUzsKCgpleHRlcm4gZnJjaGFpblMgKmZyY2hhaW5fcm9vdDsKCgoKZXh0ZXJuIGZy Y2hhaW5TICpmcmNoYWluX25vdzsKCnR5cGVkZWYgc3RydWN0IHNlZ21lbnRfaW5mb19zdHJ1Y3Qg ewogIGZyY2hhaW5TICpmcmNoYWluUDsKICB1bnNpZ25lZCBpbnQgaGFkb25lIDogMTsKCgoKCgoK ICB1bnNpZ25lZCBpbnQgYnNzIDogMTsKCiAgaW50IHVzZXJfc3R1ZmY7CgoKCiAgZml4UyAqZml4 X3Jvb3Q7CiAgZml4UyAqZml4X3RhaWw7CgoKCgoKCgogIHN5bWJvbFMgKmRvdDsKCiAgc3RydWN0 IGxpbmVub19saXN0ICpsaW5lbm9fbGlzdF9oZWFkOwogIHN0cnVjdCBsaW5lbm9fbGlzdCAqbGlu ZW5vX2xpc3RfdGFpbDsKCgoKICBhc2VjdGlvbiAqYmZkX3NlY3Rpb247CgoKCiAgc3ltYm9sUyAq c3ltOwoKCiAgdW5pb24gewoKICAgIHVuc2lnbmVkIGxvbmcgc3RhYl9zdHJpbmdfc2l6ZTsKCiAg ICBjaGFyICpwOwogIH0KICBzdGFidTsKIyAxMjAgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvc3Vi c2Vncy5oIgp9IHNlZ21lbnRfaW5mb190eXBlOwoKCgpleHRlcm4gc2VnbWVudF9pbmZvX3R5cGUg KnNlZ19pbmZvIChzZWdUKTsKZXh0ZXJuIHN5bWJvbFMgKnNlY3Rpb25fc3ltYm9sIChzZWdUKTsK IyAxNTUgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvc3Vic2Vncy5oIgpleHRlcm4gdm9pZCBzdWJz ZWdzX3ByaW50X3N0YXRpc3RpY3MgKEZJTEUgKik7CiMgMjcgIi9zcmMvYmludXRpbHMtMi4xMy9n YXMvY29uZmlnL3RjLXBwYy5jIiAyCgojIDEgIi9zcmMvYmludXRpbHMtMi4xMy9pbmNsdWRlL29w Y29kZS9wcGMuaCIgMQojIDI3ICIvc3JjL2JpbnV0aWxzLTIuMTMvaW5jbHVkZS9vcGNvZGUvcHBj LmgiCnN0cnVjdCBwb3dlcnBjX29wY29kZQp7CgogIGNvbnN0IGNoYXIgKm5hbWU7CgoKCiAgdW5z aWduZWQgbG9uZyBvcGNvZGU7CgoKCgoKICB1bnNpZ25lZCBsb25nIG1hc2s7CgoKCgogIHVuc2ln bmVkIGxvbmcgZmxhZ3M7CgoKCgogIHVuc2lnbmVkIGNoYXIgb3BlcmFuZHNbOF07Cn07CgoKCgpl eHRlcm4gY29uc3Qgc3RydWN0IHBvd2VycGNfb3Bjb2RlIHBvd2VycGNfb3Bjb2Rlc1tdOwpleHRl cm4gY29uc3QgaW50IHBvd2VycGNfbnVtX29wY29kZXM7CiMgMTE1ICIvc3JjL2JpbnV0aWxzLTIu MTMvaW5jbHVkZS9vcGNvZGUvcHBjLmgiCnN0cnVjdCBwb3dlcnBjX29wZXJhbmQKewoKICBpbnQg Yml0czsKCgogIGludCBzaGlmdDsKIyAxMzkgIi9zcmMvYmludXRpbHMtMi4xMy9pbmNsdWRlL29w Y29kZS9wcGMuaCIKICB1bnNpZ25lZCBsb25nICgqaW5zZXJ0KSAodW5zaWduZWQgbG9uZyBpbnN0 cnVjdGlvbiwgbG9uZyBvcCwgaW50IGRpYWxlY3QsIGNvbnN0IGNoYXIgKiplcnJtc2cpOwojIDE2 MCAiL3NyYy9iaW51dGlscy0yLjEzL2luY2x1ZGUvb3Bjb2RlL3BwYy5oIgogIGxvbmcgKCpleHRy YWN0KSAodW5zaWduZWQgbG9uZyBpbnN0cnVjdGlvbiwgaW50IGRpYWxlY3QsIGludCAqaW52YWxp ZCk7CgoKCiAgdW5zaWduZWQgbG9uZyBmbGFnczsKfTsKCgoKCmV4dGVybiBjb25zdCBzdHJ1Y3Qg cG93ZXJwY19vcGVyYW5kIHBvd2VycGNfb3BlcmFuZHNbXTsKIyAyNTcgIi9zcmMvYmludXRpbHMt Mi4xMy9pbmNsdWRlL29wY29kZS9wcGMuaCIKc3RydWN0IHBvd2VycGNfbWFjcm8KewoKICBjb25z dCBjaGFyICpuYW1lOwoKCiAgdW5zaWduZWQgaW50IG9wZXJhbmRzOwoKCgoKICB1bnNpZ25lZCBs b25nIGZsYWdzOwoKCgoKICBjb25zdCBjaGFyICpmb3JtYXQ7Cn07CgpleHRlcm4gY29uc3Qgc3Ry dWN0IHBvd2VycGNfbWFjcm8gcG93ZXJwY19tYWNyb3NbXTsKZXh0ZXJuIGNvbnN0IGludCBwb3dl cnBjX251bV9tYWNyb3M7CiMgMjkgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvY29uZmlnL3RjLXBw Yy5jIiAyCgoKIyAxICIvc3JjL2JpbnV0aWxzLTIuMTMvaW5jbHVkZS9lbGYvcHBjLmgiIDEKIyAz MCAiL3NyYy9iaW51dGlscy0yLjEzL2luY2x1ZGUvZWxmL3BwYy5oIgojIDEgIi9zcmMvYmludXRp bHMtMi4xMy9pbmNsdWRlL2VsZi9yZWxvYy1tYWNyb3MuaCIgMQojIDMxICIvc3JjL2JpbnV0aWxz LTIuMTMvaW5jbHVkZS9lbGYvcHBjLmgiIDIKCgplbnVtIGVsZl9wcGNfcmVsb2NfdHlwZSB7CiAg Ul9QUENfTk9ORSA9IDAsCiAgUl9QUENfQUREUjMyID0gMSwKICBSX1BQQ19BRERSMjQgPSAyLAog IFJfUFBDX0FERFIxNiA9IDMsCiAgUl9QUENfQUREUjE2X0xPID0gNCwKICBSX1BQQ19BRERSMTZf SEkgPSA1LAogIFJfUFBDX0FERFIxNl9IQSA9IDYsCiAgUl9QUENfQUREUjE0ID0gNywKICBSX1BQ Q19BRERSMTRfQlJUQUtFTiA9IDgsCiAgUl9QUENfQUREUjE0X0JSTlRBS0VOID0gOSwKICBSX1BQ Q19SRUwyNCA9IDEwLAogIFJfUFBDX1JFTDE0ID0gMTEsCiAgUl9QUENfUkVMMTRfQlJUQUtFTiA9 IDEyLAogIFJfUFBDX1JFTDE0X0JSTlRBS0VOID0gMTMsCiAgUl9QUENfR09UMTYgPSAxNCwKICBS X1BQQ19HT1QxNl9MTyA9IDE1LAogIFJfUFBDX0dPVDE2X0hJID0gMTYsCiAgUl9QUENfR09UMTZf SEEgPSAxNywKICBSX1BQQ19QTFRSRUwyNCA9IDE4LAogIFJfUFBDX0NPUFkgPSAxOSwKICBSX1BQ Q19HTE9CX0RBVCA9IDIwLAogIFJfUFBDX0pNUF9TTE9UID0gMjEsCiAgUl9QUENfUkVMQVRJVkUg PSAyMiwKICBSX1BQQ19MT0NBTDI0UEMgPSAyMywKICBSX1BQQ19VQUREUjMyID0gMjQsCiAgUl9Q UENfVUFERFIxNiA9IDI1LAogIFJfUFBDX1JFTDMyID0gMjYsCiAgUl9QUENfUExUMzIgPSAyNywK ICBSX1BQQ19QTFRSRUwzMiA9IDI4LAogIFJfUFBDX1BMVDE2X0xPID0gMjksCiAgUl9QUENfUExU MTZfSEkgPSAzMCwKICBSX1BQQ19QTFQxNl9IQSA9IDMxLAogIFJfUFBDX1NEQVJFTDE2ID0gMzIs CiAgUl9QUENfU0VDVE9GRiA9IDMzLAogIFJfUFBDX1NFQ1RPRkZfTE8gPSAzNCwKICBSX1BQQ19T RUNUT0ZGX0hJID0gMzUsCiAgUl9QUENfU0VDVE9GRl9IQSA9IDM2LAogIFJfUFBDX0FERFIzMCA9 IDM3LAoKCiAgUl9QUEM2NF9BRERSNjQgPSAzOCwKICBSX1BQQzY0X0FERFIxNl9ISUdIRVIgPSAz OSwKICBSX1BQQzY0X0FERFIxNl9ISUdIRVJBID0gNDAsCiAgUl9QUEM2NF9BRERSMTZfSElHSEVT VCA9IDQxLAogIFJfUFBDNjRfQUREUjE2X0hJR0hFU1RBID0gNDIsCiAgUl9QUEM2NF9VQUREUjY0 ID0gNDMsCiAgUl9QUEM2NF9SRUw2NCA9IDQ0LAogIFJfUFBDNjRfUExUNjQgPSA0NSwKICBSX1BQ QzY0X1BMVFJFTDY0ID0gNDYsCiAgUl9QUEM2NF9UT0MxNiA9IDQ3LAogIFJfUFBDNjRfVE9DMTZf TE8gPSA0OCwKICBSX1BQQzY0X1RPQzE2X0hJID0gNDksCiAgUl9QUEM2NF9UT0MxNl9IQSA9IDUw LAogIFJfUFBDNjRfVE9DID0gNTEsCiAgUl9QUEM2NF9QTFRHT1QxNiA9IDUyLAogIFJfUFBDNjRf UExUR09UMTZfTE8gPSA1MywKICBSX1BQQzY0X1BMVEdPVDE2X0hJID0gNTQsCiAgUl9QUEM2NF9Q TFRHT1QxNl9IQSA9IDU1LAoKCiAgUl9QUEM2NF9BRERSMTZfRFMgPSA1NiwKICBSX1BQQzY0X0FE RFIxNl9MT19EUyA9IDU3LAogIFJfUFBDNjRfR09UMTZfRFMgPSA1OCwKICBSX1BQQzY0X0dPVDE2 X0xPX0RTID0gNTksCiAgUl9QUEM2NF9QTFQxNl9MT19EUyA9IDYwLAogIFJfUFBDNjRfU0VDVE9G Rl9EUyA9IDYxLAogIFJfUFBDNjRfU0VDVE9GRl9MT19EUyA9IDYyLAogIFJfUFBDNjRfVE9DMTZf RFMgPSA2MywKICBSX1BQQzY0X1RPQzE2X0xPX0RTID0gNjQsCiAgUl9QUEM2NF9QTFRHT1QxNl9E UyA9IDY1LAogIFJfUFBDNjRfUExUR09UMTZfTE9fRFMgPSA2NiwKCgoKICBSX1BQQ19FTUJfTkFE RFIzMiA9IDEwMSwKICBSX1BQQ19FTUJfTkFERFIxNiA9IDEwMiwKICBSX1BQQ19FTUJfTkFERFIx Nl9MTyA9IDEwMywKICBSX1BQQ19FTUJfTkFERFIxNl9ISSA9IDEwNCwKICBSX1BQQ19FTUJfTkFE RFIxNl9IQSA9IDEwNSwKICBSX1BQQ19FTUJfU0RBSTE2ID0gMTA2LAogIFJfUFBDX0VNQl9TREEy STE2ID0gMTA3LAogIFJfUFBDX0VNQl9TREEyUkVMID0gMTA4LAogIFJfUFBDX0VNQl9TREEyMSA9 IDEwOSwKICBSX1BQQ19FTUJfTVJLUkVGID0gMTEwLAogIFJfUFBDX0VNQl9SRUxTRUMxNiA9IDEx MSwKICBSX1BQQ19FTUJfUkVMU1RfTE8gPSAxMTIsCiAgUl9QUENfRU1CX1JFTFNUX0hJID0gMTEz LAogIFJfUFBDX0VNQl9SRUxTVF9IQSA9IDExNCwKICBSX1BQQ19FTUJfQklUX0ZMRCA9IDExNSwK ICBSX1BQQ19FTUJfUkVMU0RBID0gMTE2LAoKCiAgUl9QUENfR05VX1ZUSU5IRVJJVCA9IDI1MywK ICBSX1BQQ19HTlVfVlRFTlRSWSA9IDI1NCwKCgoKICBSX1BQQ19UT0MxNiA9IDI1NSwKClJfUFBD X21heCB9OwojIDMyICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2NvbmZpZy90Yy1wcGMuYyIgMgoj IDEgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvZHdhcmYyZGJnLmgiIDEKIyAyOSAiL3NyYy9iaW51 dGlscy0yLjEzL2dhcy9kd2FyZjJkYmcuaCIKc3RydWN0IGR3YXJmMl9saW5lX2luZm8gewogIHVu c2lnbmVkIGludCBmaWxlbnVtOwogIHVuc2lnbmVkIGludCBsaW5lOwogIHVuc2lnbmVkIGludCBj b2x1bW47CiAgdW5zaWduZWQgaW50IGZsYWdzOwp9OwoKCgoKZXh0ZXJuIGNoYXIgKmR3YXJmMl9k aXJlY3RpdmVfZmlsZSAoaW50IGR1bW15KTsKCgoKCgoKCmV4dGVybiB2b2lkIGR3YXJmMl9kaXJl Y3RpdmVfbG9jIChpbnQgZHVtbXkpOwoKCgoKCmV4dGVybiB2b2lkIGR3YXJmMl93aGVyZSAoc3Ry dWN0IGR3YXJmMl9saW5lX2luZm8gKmwpOwoKCgoKCgpleHRlcm4gdm9pZCBkd2FyZjJfZ2VuX2xp bmVfaW5mbyAoYWRkcmVzc1QgYWRkciwgc3RydWN0IGR3YXJmMl9saW5lX2luZm8gKmwpOwoKCgpl eHRlcm4gdm9pZCBkd2FyZjJfZW1pdF9pbnNuIChpbnQpOwoKZXh0ZXJuIHZvaWQgZHdhcmYyX2Zp bmlzaCAodm9pZCk7CgpleHRlcm4gaW50IGR3YXJmMmRiZ19lc3RpbWF0ZV9zaXplX2JlZm9yZV9y ZWxheCAoZnJhZ1MgKik7CmV4dGVybiBpbnQgZHdhcmYyZGJnX3JlbGF4X2ZyYWcgKGZyYWdTICop OwpleHRlcm4gdm9pZCBkd2FyZjJkYmdfY29udmVydF9mcmFnIChmcmFnUyAqKTsKIyAzMyAiL3Ny Yy9iaW51dGlscy0yLjEzL2dhcy9jb25maWcvdGMtcHBjLmMiIDIKIyA0MiAiL3NyYy9iaW51dGls cy0yLjEzL2dhcy9jb25maWcvdGMtcHBjLmMiCmV4dGVybiBpbnQgdGFyZ2V0X2JpZ19lbmRpYW47 CgoKc3RhdGljIGludCBzZXRfdGFyZ2V0X2VuZGlhbiA9IDA7CiMgODYgIi9zcmMvYmludXRpbHMt Mi4xMy9nYXMvY29uZmlnL3RjLXBwYy5jIgpzdGF0aWMgYm9vbGVhbiByZWdfbmFtZXNfcCA9IGZh bHNlOwoKc3RhdGljIGJvb2xlYW4gcmVnaXN0ZXJfbmFtZSAoZXhwcmVzc2lvblMgKik7CnN0YXRp YyB2b2lkIHBwY19zZXRfY3B1ICh2b2lkKTsKc3RhdGljIHVuc2lnbmVkIGxvbmcgcHBjX2luc2Vy dF9vcGVyYW5kCiAgKHVuc2lnbmVkIGxvbmcgaW5zbiwgY29uc3Qgc3RydWN0IHBvd2VycGNfb3Bl cmFuZCAqb3BlcmFuZCwgb2Zmc2V0VCB2YWwsIGNoYXIgKmZpbGUsIHVuc2lnbmVkIGludCBsaW5l KTsKCnN0YXRpYyB2b2lkIHBwY19tYWNybyAoY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3QgcG93ZXJw Y19tYWNybyAqbWFjcm8pOwpzdGF0aWMgdm9pZCBwcGNfYnl0ZSAoaW50KTsKCgpzdGF0aWMgaW50 IHBwY19pc190b2Nfc3ltIChzeW1ib2xTICpzeW0pOwpzdGF0aWMgdm9pZCBwcGNfdGMgKGludCk7 CnN0YXRpYyB2b2lkIHBwY19tYWNoaW5lIChpbnQpOwojIDEyOCAiL3NyYy9iaW51dGlscy0yLjEz L2dhcy9jb25maWcvdGMtcHBjLmMiCnN0YXRpYyBiZmRfcmVsb2NfY29kZV9yZWFsX3R5cGUgcHBj X2VsZl9zdWZmaXggKGNoYXIgKiosIGV4cHJlc3Npb25TICopOwpzdGF0aWMgdm9pZCBwcGNfZWxm X2NvbnMgKGludCk7CnN0YXRpYyB2b2lkIHBwY19lbGZfcmRhdGEgKGludCk7CnN0YXRpYyB2b2lk IHBwY19lbGZfbGNvbW0gKGludCk7CnN0YXRpYyB2b2lkIHBwY19lbGZfdmFsaWRhdGVfZml4IChm aXhTICosIHNlZ1QpOwojIDE1OCAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9jb25maWcvdGMtcHBj LmMiCnN0YXRpYyBjb25zdCBjaGFyIHBwY19zb2xhcmlzX2NvbW1lbnRfY2hhcnNbXSA9ICIjISI7 CnN0YXRpYyBjb25zdCBjaGFyIHBwY19lYWJpX2NvbW1lbnRfY2hhcnNbXSA9ICIjIjsKCgoKCmNv bnN0IGNoYXIgKnBwY19jb21tZW50X2NoYXJzID0gcHBjX2VhYmlfY29tbWVudF9jaGFyczsKCgoK CgoKY29uc3QgY2hhciBsaW5lX2NvbW1lbnRfY2hhcnNbXSA9ICIjIjsKCgoKY29uc3QgY2hhciBs aW5lX3NlcGFyYXRvcl9jaGFyc1tdID0gIjsiOwoKCgpjb25zdCBjaGFyIEVYUF9DSEFSU1tdID0g ImVFIjsKCgoKY29uc3QgY2hhciBGTFRfQ0hBUlNbXSA9ICJkRCI7CgoKCmNvbnN0IHBzZXVkb190 eXBlUyBtZF9wc2V1ZG9fdGFibGVbXSA9CnsKCiAgeyAiYnl0ZSIsIHBwY19ieXRlLCAwIH0sCiMg MjI3ICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2NvbmZpZy90Yy1wcGMuYyIKICB7ICJsbG9uZyIs IHBwY19lbGZfY29ucywgOCB9LAogIHsgInF1YWQiLCBwcGNfZWxmX2NvbnMsIDggfSwKICB7ICJs b25nIiwgcHBjX2VsZl9jb25zLCA0IH0sCiAgeyAid29yZCIsIHBwY19lbGZfY29ucywgMiB9LAog IHsgInNob3J0IiwgcHBjX2VsZl9jb25zLCAyIH0sCiAgeyAicmRhdGEiLCBwcGNfZWxmX3JkYXRh LCAwIH0sCiAgeyAicm9kYXRhIiwgcHBjX2VsZl9yZGF0YSwgMCB9LAogIHsgImxjb21tIiwgcHBj X2VsZl9sY29tbSwgMCB9LAogIHsgImZpbGUiLCAodm9pZCAoKikgKGludCkpIGR3YXJmMl9kaXJl Y3RpdmVfZmlsZSwgMCB9LAogIHsgImxvYyIsIGR3YXJmMl9kaXJlY3RpdmVfbG9jLCAwIH0sCiMg MjU2ICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2NvbmZpZy90Yy1wcGMuYyIKICB7ICJ0YyIsIHBw Y190YywgMCB9LAogIHsgIm1hY2hpbmUiLCBwcGNfbWFjaGluZSwgMCB9LAoKCiAgeyAoKHZvaWQg KikwKSwgKCh2b2lkICopMCksIDAgfQp9OwoKCgoKCgoKc3RydWN0IHBkX3JlZwogIHsKICAgIGNo YXIgKm5hbWU7CiAgICBpbnQgdmFsdWU7CiAgfTsKIyAzMTAgIi9zcmMvYmludXRpbHMtMi4xMy9n YXMvY29uZmlnL3RjLXBwYy5jIgpzdGF0aWMgY29uc3Qgc3RydWN0IHBkX3JlZyBwcmVfZGVmaW5l ZF9yZWdpc3RlcnNbXSA9CnsKICB7ICJjci4wIiwgMCB9LAogIHsgImNyLjEiLCAxIH0sCiAgeyAi Y3IuMiIsIDIgfSwKICB7ICJjci4zIiwgMyB9LAogIHsgImNyLjQiLCA0IH0sCiAgeyAiY3IuNSIs IDUgfSwKICB7ICJjci42IiwgNiB9LAogIHsgImNyLjciLCA3IH0sCgogIHsgImNyMCIsIDAgfSwK ICB7ICJjcjEiLCAxIH0sCiAgeyAiY3IyIiwgMiB9LAogIHsgImNyMyIsIDMgfSwKICB7ICJjcjQi LCA0IH0sCiAgeyAiY3I1IiwgNSB9LAogIHsgImNyNiIsIDYgfSwKICB7ICJjcjciLCA3IH0sCgog IHsgImN0ciIsIDkgfSwKCiAgeyAiZGFyIiwgMTkgfSwKICB7ICJkZWMiLCAyMiB9LAogIHsgImRz aXNyIiwgMTggfSwKCiAgeyAiZi4wIiwgMCB9LAogIHsgImYuMSIsIDEgfSwKICB7ICJmLjEwIiwg MTAgfSwKICB7ICJmLjExIiwgMTEgfSwKICB7ICJmLjEyIiwgMTIgfSwKICB7ICJmLjEzIiwgMTMg fSwKICB7ICJmLjE0IiwgMTQgfSwKICB7ICJmLjE1IiwgMTUgfSwKICB7ICJmLjE2IiwgMTYgfSwK ICB7ICJmLjE3IiwgMTcgfSwKICB7ICJmLjE4IiwgMTggfSwKICB7ICJmLjE5IiwgMTkgfSwKICB7 ICJmLjIiLCAyIH0sCiAgeyAiZi4yMCIsIDIwIH0sCiAgeyAiZi4yMSIsIDIxIH0sCiAgeyAiZi4y MiIsIDIyIH0sCiAgeyAiZi4yMyIsIDIzIH0sCiAgeyAiZi4yNCIsIDI0IH0sCiAgeyAiZi4yNSIs IDI1IH0sCiAgeyAiZi4yNiIsIDI2IH0sCiAgeyAiZi4yNyIsIDI3IH0sCiAgeyAiZi4yOCIsIDI4 IH0sCiAgeyAiZi4yOSIsIDI5IH0sCiAgeyAiZi4zIiwgMyB9LAogIHsgImYuMzAiLCAzMCB9LAog IHsgImYuMzEiLCAzMSB9LAogIHsgImYuNCIsIDQgfSwKICB7ICJmLjUiLCA1IH0sCiAgeyAiZi42 IiwgNiB9LAogIHsgImYuNyIsIDcgfSwKICB7ICJmLjgiLCA4IH0sCiAgeyAiZi45IiwgOSB9LAoK ICB7ICJmMCIsIDAgfSwKICB7ICJmMSIsIDEgfSwKICB7ICJmMTAiLCAxMCB9LAogIHsgImYxMSIs IDExIH0sCiAgeyAiZjEyIiwgMTIgfSwKICB7ICJmMTMiLCAxMyB9LAogIHsgImYxNCIsIDE0IH0s CiAgeyAiZjE1IiwgMTUgfSwKICB7ICJmMTYiLCAxNiB9LAogIHsgImYxNyIsIDE3IH0sCiAgeyAi ZjE4IiwgMTggfSwKICB7ICJmMTkiLCAxOSB9LAogIHsgImYyIiwgMiB9LAogIHsgImYyMCIsIDIw IH0sCiAgeyAiZjIxIiwgMjEgfSwKICB7ICJmMjIiLCAyMiB9LAogIHsgImYyMyIsIDIzIH0sCiAg eyAiZjI0IiwgMjQgfSwKICB7ICJmMjUiLCAyNSB9LAogIHsgImYyNiIsIDI2IH0sCiAgeyAiZjI3 IiwgMjcgfSwKICB7ICJmMjgiLCAyOCB9LAogIHsgImYyOSIsIDI5IH0sCiAgeyAiZjMiLCAzIH0s CiAgeyAiZjMwIiwgMzAgfSwKICB7ICJmMzEiLCAzMSB9LAogIHsgImY0IiwgNCB9LAogIHsgImY1 IiwgNSB9LAogIHsgImY2IiwgNiB9LAogIHsgImY3IiwgNyB9LAogIHsgImY4IiwgOCB9LAogIHsg ImY5IiwgOSB9LAoKICB7ICJmcHNjciIsIDAgfSwKCiAgeyAibHIiLCA4IH0sCgogIHsgInBtciIs IDAgfSwKCiAgeyAici4wIiwgMCB9LAogIHsgInIuMSIsIDEgfSwKICB7ICJyLjEwIiwgMTAgfSwK ICB7ICJyLjExIiwgMTEgfSwKICB7ICJyLjEyIiwgMTIgfSwKICB7ICJyLjEzIiwgMTMgfSwKICB7 ICJyLjE0IiwgMTQgfSwKICB7ICJyLjE1IiwgMTUgfSwKICB7ICJyLjE2IiwgMTYgfSwKICB7ICJy LjE3IiwgMTcgfSwKICB7ICJyLjE4IiwgMTggfSwKICB7ICJyLjE5IiwgMTkgfSwKICB7ICJyLjIi LCAyIH0sCiAgeyAici4yMCIsIDIwIH0sCiAgeyAici4yMSIsIDIxIH0sCiAgeyAici4yMiIsIDIy IH0sCiAgeyAici4yMyIsIDIzIH0sCiAgeyAici4yNCIsIDI0IH0sCiAgeyAici4yNSIsIDI1IH0s CiAgeyAici4yNiIsIDI2IH0sCiAgeyAici4yNyIsIDI3IH0sCiAgeyAici4yOCIsIDI4IH0sCiAg eyAici4yOSIsIDI5IH0sCiAgeyAici4zIiwgMyB9LAogIHsgInIuMzAiLCAzMCB9LAogIHsgInIu MzEiLCAzMSB9LAogIHsgInIuNCIsIDQgfSwKICB7ICJyLjUiLCA1IH0sCiAgeyAici42IiwgNiB9 LAogIHsgInIuNyIsIDcgfSwKICB7ICJyLjgiLCA4IH0sCiAgeyAici45IiwgOSB9LAoKICB7ICJy LnNwIiwgMSB9LAoKICB7ICJyLnRvYyIsIDIgfSwKCiAgeyAicjAiLCAwIH0sCiAgeyAicjEiLCAx IH0sCiAgeyAicjEwIiwgMTAgfSwKICB7ICJyMTEiLCAxMSB9LAogIHsgInIxMiIsIDEyIH0sCiAg eyAicjEzIiwgMTMgfSwKICB7ICJyMTQiLCAxNCB9LAogIHsgInIxNSIsIDE1IH0sCiAgeyAicjE2 IiwgMTYgfSwKICB7ICJyMTciLCAxNyB9LAogIHsgInIxOCIsIDE4IH0sCiAgeyAicjE5IiwgMTkg fSwKICB7ICJyMiIsIDIgfSwKICB7ICJyMjAiLCAyMCB9LAogIHsgInIyMSIsIDIxIH0sCiAgeyAi cjIyIiwgMjIgfSwKICB7ICJyMjMiLCAyMyB9LAogIHsgInIyNCIsIDI0IH0sCiAgeyAicjI1Iiwg MjUgfSwKICB7ICJyMjYiLCAyNiB9LAogIHsgInIyNyIsIDI3IH0sCiAgeyAicjI4IiwgMjggfSwK ICB7ICJyMjkiLCAyOSB9LAogIHsgInIzIiwgMyB9LAogIHsgInIzMCIsIDMwIH0sCiAgeyAicjMx IiwgMzEgfSwKICB7ICJyNCIsIDQgfSwKICB7ICJyNSIsIDUgfSwKICB7ICJyNiIsIDYgfSwKICB7 ICJyNyIsIDcgfSwKICB7ICJyOCIsIDggfSwKICB7ICJyOSIsIDkgfSwKCiAgeyAicnRvYyIsIDIg fSwKCiAgeyAic2RyMSIsIDI1IH0sCgogIHsgInNwIiwgMSB9LAoKICB7ICJzcnIwIiwgMjYgfSwK ICB7ICJzcnIxIiwgMjcgfSwKCiAgeyAidi4wIiwgMCB9LAogIHsgInYuMSIsIDEgfSwKICB7ICJ2 LjEwIiwgMTAgfSwKICB7ICJ2LjExIiwgMTEgfSwKICB7ICJ2LjEyIiwgMTIgfSwKICB7ICJ2LjEz IiwgMTMgfSwKICB7ICJ2LjE0IiwgMTQgfSwKICB7ICJ2LjE1IiwgMTUgfSwKICB7ICJ2LjE2Iiwg MTYgfSwKICB7ICJ2LjE3IiwgMTcgfSwKICB7ICJ2LjE4IiwgMTggfSwKICB7ICJ2LjE5IiwgMTkg fSwKICB7ICJ2LjIiLCAyIH0sCiAgeyAidi4yMCIsIDIwIH0sCiAgeyAidi4yMSIsIDIxIH0sCiAg eyAidi4yMiIsIDIyIH0sCiAgeyAidi4yMyIsIDIzIH0sCiAgeyAidi4yNCIsIDI0IH0sCiAgeyAi di4yNSIsIDI1IH0sCiAgeyAidi4yNiIsIDI2IH0sCiAgeyAidi4yNyIsIDI3IH0sCiAgeyAidi4y OCIsIDI4IH0sCiAgeyAidi4yOSIsIDI5IH0sCiAgeyAidi4zIiwgMyB9LAogIHsgInYuMzAiLCAz MCB9LAogIHsgInYuMzEiLCAzMSB9LAogIHsgInYuNCIsIDQgfSwKICB7ICJ2LjUiLCA1IH0sCiAg eyAidi42IiwgNiB9LAogIHsgInYuNyIsIDcgfSwKICB7ICJ2LjgiLCA4IH0sCiAgeyAidi45Iiwg OSB9LAoKICB7ICJ2MCIsIDAgfSwKICB7ICJ2MSIsIDEgfSwKICB7ICJ2MTAiLCAxMCB9LAogIHsg InYxMSIsIDExIH0sCiAgeyAidjEyIiwgMTIgfSwKICB7ICJ2MTMiLCAxMyB9LAogIHsgInYxNCIs IDE0IH0sCiAgeyAidjE1IiwgMTUgfSwKICB7ICJ2MTYiLCAxNiB9LAogIHsgInYxNyIsIDE3IH0s CiAgeyAidjE4IiwgMTggfSwKICB7ICJ2MTkiLCAxOSB9LAogIHsgInYyIiwgMiB9LAogIHsgInYy MCIsIDIwIH0sCiAgeyAidjIxIiwgMjEgfSwKICB7ICJ2MjIiLCAyMiB9LAogIHsgInYyMyIsIDIz IH0sCiAgeyAidjI0IiwgMjQgfSwKICB7ICJ2MjUiLCAyNSB9LAogIHsgInYyNiIsIDI2IH0sCiAg eyAidjI3IiwgMjcgfSwKICB7ICJ2MjgiLCAyOCB9LAogIHsgInYyOSIsIDI5IH0sCiAgeyAidjMi LCAzIH0sCiAgeyAidjMwIiwgMzAgfSwKICB7ICJ2MzEiLCAzMSB9LAogIHsgInY0IiwgNCB9LAog IHsgInY1IiwgNSB9LAogIHsgInY2IiwgNiB9LAogIHsgInY3IiwgNyB9LAogIHsgInY4IiwgOCB9 LAogIHsgInY5IiwgOSB9LAoKICB7ICJ4ZXIiLCAxIH0sCgp9OwoKCgoKCgpzdGF0aWMgaW50IHJl Z19uYW1lX3NlYXJjaAogIChjb25zdCBzdHJ1Y3QgcGRfcmVnICosIGludCwgY29uc3QgY2hhciAq IG5hbWUpOwoKc3RhdGljIGludApyZWdfbmFtZV9zZWFyY2ggKHJlZ3MsIHJlZ2NvdW50LCBuYW1l KQogICAgIGNvbnN0IHN0cnVjdCBwZF9yZWcgKnJlZ3M7CiAgICAgaW50IHJlZ2NvdW50OwogICAg IGNvbnN0IGNoYXIgKm5hbWU7CnsKICBpbnQgbWlkZGxlLCBsb3csIGhpZ2g7CiAgaW50IGNtcDsK CiAgbG93ID0gMDsKICBoaWdoID0gcmVnY291bnQgLSAxOwoKICBkbwogICAgewogICAgICBtaWRk bGUgPSAobG93ICsgaGlnaCkgLyAyOwogICAgICBjbXAgPSBzdHJjYXNlY21wIChuYW1lLCByZWdz W21pZGRsZV0ubmFtZSk7CiAgICAgIGlmIChjbXAgPCAwKQogICAgICAgIGhpZ2ggPSBtaWRkbGUg LSAxOwogICAgICBlbHNlIGlmIChjbXAgPiAwKQogICAgICAgIGxvdyA9IG1pZGRsZSArIDE7CiAg ICAgIGVsc2UKICAgICAgICByZXR1cm4gcmVnc1ttaWRkbGVdLnZhbHVlOwogICAgfQogIHdoaWxl IChsb3cgPD0gaGlnaCk7CgogIHJldHVybiAtMTsKfQojIDYwNSAiL3NyYy9iaW51dGlscy0yLjEz L2dhcy9jb25maWcvdGMtcHBjLmMiCnN0YXRpYyBib29sZWFuCnJlZ2lzdGVyX25hbWUgKGV4cHJl c3Npb25QKQogICAgIGV4cHJlc3Npb25TICpleHByZXNzaW9uUDsKewogIGludCByZWdfbnVtYmVy OwogIGNoYXIgKm5hbWU7CiAgY2hhciAqc3RhcnQ7CiAgY2hhciBjOwoKCiAgc3RhcnQgPSBuYW1l ID0gaW5wdXRfbGluZV9wb2ludGVyOwogIGlmIChuYW1lWzBdID09ICclJyAmJiAoX3NjaF9pc3Rh YmxlWyhuYW1lWzFdKSAmIDB4ZmZdICYgKHVuc2lnbmVkIHNob3J0KShfc2NoX2lzYWxwaGEpKSkK ICAgIG5hbWUgPSArK2lucHV0X2xpbmVfcG9pbnRlcjsKCiAgZWxzZSBpZiAoIXJlZ19uYW1lc19w IHx8ICEoX3NjaF9pc3RhYmxlWyhuYW1lWzBdKSAmIDB4ZmZdICYgKHVuc2lnbmVkIHNob3J0KShf c2NoX2lzYWxwaGEpKSkKICAgIHJldHVybiBmYWxzZTsKCiAgYyA9IGdldF9zeW1ib2xfZW5kICgp OwogIHJlZ19udW1iZXIgPSByZWdfbmFtZV9zZWFyY2ggKHByZV9kZWZpbmVkX3JlZ2lzdGVycywg KHNpemVvZiAocHJlX2RlZmluZWRfcmVnaXN0ZXJzKSAvIHNpemVvZiAoc3RydWN0IHBkX3JlZykp LCBuYW1lKTsKCgogICppbnB1dF9saW5lX3BvaW50ZXIgPSBjOwoKCiAgaWYgKHJlZ19udW1iZXIg Pj0gMCkKICAgIHsKICAgICAgZXhwcmVzc2lvblAtPlhfb3AgPSBPX3JlZ2lzdGVyOwogICAgICBl eHByZXNzaW9uUC0+WF9hZGRfbnVtYmVyID0gcmVnX251bWJlcjsKCgogICAgICBleHByZXNzaW9u UC0+WF9hZGRfc3ltYm9sID0gKCh2b2lkICopMCk7CiAgICAgIGV4cHJlc3Npb25QLT5YX29wX3N5 bWJvbCA9ICgodm9pZCAqKTApOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCgogIGlucHV0X2xp bmVfcG9pbnRlciA9IHN0YXJ0OwogIHJldHVybiBmYWxzZTsKfQoKCgoKCgpzdGF0aWMgYm9vbGVh biBjcl9vcGVyYW5kOwoKCnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGRfcmVnIGNyX25hbWVzW10gPQp7 CiAgeyAiY3IwIiwgMCB9LAogIHsgImNyMSIsIDEgfSwKICB7ICJjcjIiLCAyIH0sCiAgeyAiY3Iz IiwgMyB9LAogIHsgImNyNCIsIDQgfSwKICB7ICJjcjUiLCA1IH0sCiAgeyAiY3I2IiwgNiB9LAog IHsgImNyNyIsIDcgfSwKICB7ICJlcSIsIDIgfSwKICB7ICJndCIsIDEgfSwKICB7ICJsdCIsIDAg fSwKICB7ICJzbyIsIDMgfSwKICB7ICJ1biIsIDMgfQp9OwoKCgoKaW50CnBwY19wYXJzZV9uYW1l IChuYW1lLCBleHByKQogICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICAgZXhwcmVzc2lvblMgKmV4 cHI7CnsKICBpbnQgdmFsOwoKICBpZiAoISBjcl9vcGVyYW5kKQogICAgcmV0dXJuIDA7CgogIHZh bCA9IHJlZ19uYW1lX3NlYXJjaCAoY3JfbmFtZXMsIHNpemVvZiBjcl9uYW1lcyAvIHNpemVvZiBj cl9uYW1lc1swXSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOwogIGlmICh2YWwgPCAw KQogICAgcmV0dXJuIDA7CgogIGV4cHItPlhfb3AgPSBPX2NvbnN0YW50OwogIGV4cHItPlhfYWRk X251bWJlciA9IHZhbDsKCiAgcmV0dXJuIDE7Cn0KCgoKCgpzdGF0aWMgdW5zaWduZWQgbG9uZyBw cGNfY3B1ID0gMDsKCgpzdGF0aWMgdW5zaWduZWQgaW50IHBwY19vYmo2NCA9IDMyID09IDY0OwoK CnN0YXRpYyBzdHJ1Y3QgaGFzaF9jb250cm9sICpwcGNfaGFzaDsKCgpzdGF0aWMgc3RydWN0IGhh c2hfY29udHJvbCAqcHBjX21hY3JvX2hhc2g7CgoKCnN0YXRpYyBlbnVtIHsgU0hMSUJfTk9ORSwg U0hMSUJfUElDLCBTSExJQl9NUkVMT0NBVEFCTEUgfSBzaGxpYiA9IFNITElCX05PTkU7CgoKc3Rh dGljIGZsYWd3b3JkIHBwY19mbGFncyA9IDA7CiMgNzIzICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2Fz L2NvbmZpZy90Yy1wcGMuYyIKc3RhdGljIGJvb2xlYW4gbXNvbGFyaXMgPSBmYWxzZTsKIyA3ODkg Ii9zcmMvYmludXRpbHMtMi4xMy9nYXMvY29uZmlnL3RjLXBwYy5jIgpzeW1ib2xTICpHT1Rfc3lt Ym9sOwoKCgpjb25zdCBjaGFyICpjb25zdCBtZF9zaG9ydG9wdHMgPSAiYjpsOnVzbTpLOlZROiI7 CgoKCmNvbnN0IHN0cnVjdCBvcHRpb24gbWRfbG9uZ29wdHNbXSA9IHsKICB7KCh2b2lkICopMCks IDAsICgodm9pZCAqKTApLCAwfQp9Owpjb25zdCBzaXplX3QgbWRfbG9uZ29wdHNfc2l6ZSA9IHNp emVvZiAobWRfbG9uZ29wdHMpOwoKaW50Cm1kX3BhcnNlX29wdGlvbiAoYywgYXJnKQogICAgIGlu dCBjOwogICAgIGNoYXIgKmFyZzsKewogIHN3aXRjaCAoYykKICAgIHsKICAgIGNhc2UgJ3UnOgoK CiAgICAgIGJyZWFrOwoKCiAgICBjYXNlICdsJzoKCgogICAgICBpZiAoc3RyY21wIChhcmcsICJl IikgPT0gMCkKICAgICAgICB7CiAgICAgICAgICB0YXJnZXRfYmlnX2VuZGlhbiA9IDA7CiAgICAg ICAgICBzZXRfdGFyZ2V0X2VuZGlhbiA9IDE7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg cmV0dXJuIDA7CgogICAgICBicmVhazsKCiAgICBjYXNlICdiJzoKICAgICAgaWYgKHN0cmNtcCAo YXJnLCAiZSIpID09IDApCiAgICAgICAgewogICAgICAgICAgdGFyZ2V0X2JpZ19lbmRpYW4gPSAx OwogICAgICAgICAgc2V0X3RhcmdldF9lbmRpYW4gPSAxOwogICAgICAgIH0KICAgICAgZWxzZQog ICAgICAgIHJldHVybiAwOwoKICAgICAgYnJlYWs7CgogICAgY2FzZSAnSyc6CgogICAgICBpZiAo c3RyY21wIChhcmcsICJQSUMiKSA9PSAwIHx8IHN0cmNtcCAoYXJnLCAicGljIikgPT0gMCkKICAg ICAgICB7CiAgICAgICAgICBzaGxpYiA9IFNITElCX1BJQzsKICAgICAgICAgIHBwY19mbGFncyB8 PSAweDAwMDA4MDAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHJldHVybiAwOwoKICAg ICAgYnJlYWs7CgoKCiAgICBjYXNlICdhJzoKICAgICAgaWYgKHN0cmNtcCAoYXJnLCAiNjQiKSA9 PSAwKQogICAgICAgIHBwY19vYmo2NCA9IDE7CiAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXJnLCAi MzIiKSA9PSAwKQogICAgICAgIHBwY19vYmo2NCA9IDA7CiAgICAgIGVsc2UKICAgICAgICByZXR1 cm4gMDsKICAgICAgYnJlYWs7CgogICAgY2FzZSAnbSc6CgoKICAgICAgaWYgKHN0cmNtcCAoYXJn LCAicHdyeCIpID09IDAgfHwgc3RyY21wIChhcmcsICJwd3IyIikgPT0gMCkKICAgICAgICBwcGNf Y3B1ID0gKDAyKSB8ICgwNCkgfCAoMDEwKTsKCiAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXJnLCAi cHdyIikgPT0gMCkKICAgICAgICBwcGNfY3B1ID0gKDAyKSB8ICgwMTApOwoKCiAgICAgIGVsc2Ug aWYgKHN0cmNtcCAoYXJnLCAiNjAxIikgPT0gMCkKICAgICAgICBwcGNfY3B1ID0gKDAxKSB8ICgw NDApIHwgKDAxMCk7CgoKICAgICAgZWxzZSBpZiAoc3RyY21wIChhcmcsICJwcGMiKSA9PSAwCiAg ICAgICAgICAgICAgIHx8IHN0cmNtcCAoYXJnLCAicHBjMzIiKSA9PSAwCiAgICAgICAgICAgICAg IHx8IHN0cmNtcCAoYXJnLCAiNjAzIikgPT0gMAogICAgICAgICAgICAgICB8fCBzdHJjbXAgKGFy ZywgIjYwNCIpID09IDApCiAgICAgICAgcHBjX2NwdSA9ICgwMSkgfCAoMDEwKTsKCiAgICAgIGVs c2UgaWYgKHN0cmNtcCAoYXJnLCAiNDAzIikgPT0gMAogICAgICAgICAgICAgICB8fCBzdHJjbXAg KGFyZywgIjQwNSIpID09IDApCiAgICAgICAgcHBjX2NwdSA9ICgwMSkgfCAoMDIwMDApIHwgKDAx MCk7CiAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXJnLCAiNzQwMCIpID09IDAKICAgICAgICAgICAg ICAgfHwgc3RyY21wIChhcmcsICI3NDEwIikgPT0gMAogICAgICAgICAgICAgICB8fCBzdHJjbXAg KGFyZywgIjc0NTAiKSA9PSAwCiAgICAgICAgICAgICAgIHx8IHN0cmNtcCAoYXJnLCAiNzQ1NSIp ID09IDApCiAgICAgICAgcHBjX2NwdSA9ICgwMSkgfCAoMDEwMDApIHwgKDAxMCk7CiAgICAgIGVs c2UgaWYgKHN0cmNtcCAoYXJnLCAiYWx0aXZlYyIpID09IDApCiAgICAgICAgewogICAgICAgICAg aWYgKHBwY19jcHUgPT0gMCkKICAgICAgICAgICAgcHBjX2NwdSA9ICgwMSkgfCAoMDEwMDApOwog ICAgICAgICAgZWxzZQogICAgICAgICAgICBwcGNfY3B1IHw9ICgwMTAwMCk7CiAgICAgICAgfQoK CiAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXJnLCAicHBjNjQiKSA9PSAwIHx8IHN0cmNtcCAoYXJn LCAiNjIwIikgPT0gMCkKICAgICAgICB7CiAgICAgICAgICBwcGNfY3B1ID0gKDAxKSB8ICgwMjAp OwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoc3RyY21wIChhcmcsICJwcGM2NGJyaWRnZSIpID09 IDApCiAgICAgICAgewogICAgICAgICAgcHBjX2NwdSA9ICgwMSkgfCAoMDQwMCkgfCAoMDIwKTsK ICAgICAgICB9CgogICAgICBlbHNlIGlmIChzdHJjbXAgKGFyZywgImJvb2tlIikgPT0gMCB8fCBz dHJjbXAgKGFyZywgImJvb2tlMzIiKSA9PSAwKQogICAgICAgIHBwY19jcHUgPSAoMDEpIHwgKDA0 MDAwKSB8ICgwMTApOwoKICAgICAgZWxzZSBpZiAoc3RyY21wIChhcmcsICJib29rZTY0IikgPT0g MCkKICAgICAgICB7CiAgICAgICAgICBwcGNfY3B1ID0gKDAxKSB8ICgwNDAwMCkgfAogICAgICAg ICAgICAgICAgICAgICgwMTAwMDApIHwgKDAyMCk7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChz dHJjbXAgKGFyZywgInBvd2VyNCIpID09IDApCiAgICAgICAgewogICAgICAgICAgcHBjX2NwdSA9 ICgwMSkgfCAoMDIwKSB8ICgwMjAwMDApOwogICAgICAgIH0KCgoKICAgICAgZWxzZSBpZiAoc3Ry Y21wIChhcmcsICJjb20iKSA9PSAwKQogICAgICAgIHBwY19jcHUgPSAoMDEwMCkgfCAoMDEwKTsK CiAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXJnLCAiYW55IikgPT0gMCkKICAgICAgICBwcGNfY3B1 ID0gKDAyMDApIHwgKDAxMCk7CgogICAgICBlbHNlIGlmIChzdHJjbXAgKGFyZywgInJlZ25hbWVz IikgPT0gMCkKICAgICAgICByZWdfbmFtZXNfcCA9IHRydWU7CgogICAgICBlbHNlIGlmIChzdHJj bXAgKGFyZywgIm5vLXJlZ25hbWVzIikgPT0gMCkKICAgICAgICByZWdfbmFtZXNfcCA9IGZhbHNl OwoKCgoKICAgICAgZWxzZSBpZiAoc3RyY21wIChhcmcsICJyZWxvY2F0YWJsZSIpID09IDApCiAg ICAgICAgewogICAgICAgICAgc2hsaWIgPSBTSExJQl9NUkVMT0NBVEFCTEU7CiAgICAgICAgICBw cGNfZmxhZ3MgfD0gMHgwMDAxMDAwMDsKICAgICAgICB9CgogICAgICBlbHNlIGlmIChzdHJjbXAg KGFyZywgInJlbG9jYXRhYmxlLWxpYiIpID09IDApCiAgICAgICAgewogICAgICAgICAgc2hsaWIg PSBTSExJQl9NUkVMT0NBVEFCTEU7CiAgICAgICAgICBwcGNfZmxhZ3MgfD0gMHgwMDAwODAwMDsK ICAgICAgICB9CgoKICAgICAgZWxzZSBpZiAoc3RyY21wIChhcmcsICJlbWIiKSA9PSAwKQogICAg ICAgIHBwY19mbGFncyB8PSAweDgwMDAwMDAwOwoKCiAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXJn LCAibGl0dGxlIikgPT0gMAogICAgICAgICAgICAgICB8fCBzdHJjbXAgKGFyZywgImxpdHRsZS1l bmRpYW4iKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHRhcmdldF9iaWdfZW5kaWFuID0gMDsK ICAgICAgICAgIHNldF90YXJnZXRfZW5kaWFuID0gMTsKICAgICAgICB9CgogICAgICBlbHNlIGlm IChzdHJjbXAgKGFyZywgImJpZyIpID09IDAgfHwgc3RyY21wIChhcmcsICJiaWctZW5kaWFuIikg PT0gMCkKICAgICAgICB7CiAgICAgICAgICB0YXJnZXRfYmlnX2VuZGlhbiA9IDE7CiAgICAgICAg ICBzZXRfdGFyZ2V0X2VuZGlhbiA9IDE7CiAgICAgICAgfQoKICAgICAgZWxzZSBpZiAoc3RyY21w IChhcmcsICJzb2xhcmlzIikgPT0gMCkKICAgICAgICB7CiAgICAgICAgICBtc29sYXJpcyA9IHRy dWU7CiAgICAgICAgICBwcGNfY29tbWVudF9jaGFycyA9IHBwY19zb2xhcmlzX2NvbW1lbnRfY2hh cnM7CiAgICAgICAgfQoKICAgICAgZWxzZSBpZiAoc3RyY21wIChhcmcsICJuby1zb2xhcmlzIikg PT0gMCkKICAgICAgICB7CiAgICAgICAgICBtc29sYXJpcyA9IGZhbHNlOwogICAgICAgICAgcHBj X2NvbW1lbnRfY2hhcnMgPSBwcGNfZWFiaV9jb21tZW50X2NoYXJzOwogICAgICAgIH0KCiAgICAg IGVsc2UKICAgICAgICB7CiAgICAgICAgICBhc19iYWQgKGRjZ2V0dGV4dCAoKCh2b2lkICopMCks ICJpbnZhbGlkIHN3aXRjaCAtbSVzIiwgNiksIGFyZyk7CiAgICAgICAgICByZXR1cm4gMDsKICAg ICAgICB9CiAgICAgIGJyZWFrOwoKCgogICAgY2FzZSAnVic6CiAgICAgIHByaW50X3ZlcnNpb25f aWQgKCk7CiAgICAgIGJyZWFrOwoKCgogICAgY2FzZSAnUSc6CiAgICAgIGJyZWFrOwoKCgoKICAg IGNhc2UgJ3MnOgogICAgICBpZiAoYXJnKQogICAgICAgIHJldHVybiAwOwoKICAgICAgYnJlYWs7 CgoKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiAwOwogICAgfQoKICByZXR1cm4gMTsKfQoKdm9p ZAptZF9zaG93X3VzYWdlIChzdHJlYW0pCiAgICAgRklMRSAqc3RyZWFtOwp7CiAgZnByaW50ZiAo c3RyZWFtLCBkY2dldHRleHQgKCgodm9pZCAqKTApLCAiUG93ZXJQQyBvcHRpb25zOlxuLXUJCQlp Z25vcmVkXG4tbXB3cngsIC1tcHdyMgkJZ2VuZXJhdGUgY29kZSBmb3IgUE9XRVIvMiAoUklPUzIp XG4tbXB3cgkJCWdlbmVyYXRlIGNvZGUgZm9yIFBPV0VSIChSSU9TMSlcbi1tNjAxCQkJZ2VuZXJh dGUgY29kZSBmb3IgUG93ZXJQQyA2MDFcbi1tcHBjLCAtbXBwYzMyLCAtbTYwMywgLW02MDRcbgkJ CWdlbmVyYXRlIGNvZGUgZm9yIFBvd2VyUEMgNjAzLzYwNFxuLW00MDMsIC1tNDA1ICAgICAgICAg ICAgZ2VuZXJhdGUgY29kZSBmb3IgUG93ZXJQQyA0MDMvNDA1XG4tbTc0MDAsIC1tNzQxMCwgLW03 NDUwLCAtbTc0NTVcbgkJCWdlbmVyYXRlIGNvZGUgRm9yIFBvd2VyUEMgNzQwMC83NDEwLzc0NTAv NzQ1NVxuLW1wcGM2NCwgLW02MjAJCWdlbmVyYXRlIGNvZGUgZm9yIFBvd2VyUEMgNjIwLzYyNS82 MzBcbi1tcHBjNjRicmlkZ2UJCWdlbmVyYXRlIGNvZGUgZm9yIFBvd2VyUEMgNjQsIGluY2x1ZGlu ZyBicmlkZ2UgaW5zbnNcbi1tYm9va2U2NAkJZ2VuZXJhdGUgY29kZSBmb3IgNjQtYml0IFBvd2Vy UEMgQm9va0Vcbi1tYm9va2UsIG1ib29rZTMyCWdlbmVyYXRlIGNvZGUgZm9yIDMyLWJpdCBQb3dl clBDIEJvb2tFXG4tbXBvd2VyNAkJZ2VuZXJhdGUgY29kZSBmb3IgUG93ZXI0IGFyY2hpdGVjdHVy ZVxuLW1hbHRpdmVjCQlnZW5lcmF0ZSBjb2RlIGZvciBBbHRpVmVjXG4tbWNvbQkJCWdlbmVyYXRl IGNvZGUgUG93ZXIvUG93ZXJQQyBjb21tb24gaW5zdHJ1Y3Rpb25zXG4tbWFueQkJCWdlbmVyYXRl IGNvZGUgZm9yIGFueSBhcmNoaXRlY3R1cmUgKFBXUi9QV1JYL1BQQylcbi1tcmVnbmFtZXMJCUFs bG93IHN5bWJvbGljIG5hbWVzIGZvciByZWdpc3RlcnNcbi1tbm8tcmVnbmFtZXMJCURvIG5vdCBh bGxvdyBzeW1ib2xpYyBuYW1lcyBmb3IgcmVnaXN0ZXJzXG4iLCA2KSk7CiMgMTA0MSAiL3NyYy9i aW51dGlscy0yLjEzL2dhcy9jb25maWcvdGMtcHBjLmMiCiAgZnByaW50ZiAoc3RyZWFtLCBkY2dl dHRleHQgKCgodm9pZCAqKTApLCAiLW1yZWxvY2F0YWJsZQkJc3VwcG9ydCBmb3IgR0NDJ3MgLW1y ZWxvY2F0YmxlIG9wdGlvblxuLW1yZWxvY2F0YWJsZS1saWIJc3VwcG9ydCBmb3IgR0NDJ3MgLW1y ZWxvY2F0YmxlLWxpYiBvcHRpb25cbi1tZW1iCQkJc2V0IFBQQ19FTUIgYml0IGluIEVMRiBmbGFn c1xuLW1saXR0bGUsIC1tbGl0dGxlLWVuZGlhblxuCQkJZ2VuZXJhdGUgY29kZSBmb3IgYSBsaXR0 bGUgZW5kaWFuIG1hY2hpbmVcbi1tYmlnLCAtbWJpZy1lbmRpYW4JZ2VuZXJhdGUgY29kZSBmb3Ig YSBiaWcgZW5kaWFuIG1hY2hpbmVcbi1tc29sYXJpcwkJZ2VuZXJhdGUgY29kZSBmb3IgU29sYXJp c1xuLW1uby1zb2xhcmlzCQlkbyBub3QgZ2VuZXJhdGUgY29kZSBmb3IgU29sYXJpc1xuLVYJCQlw cmludCBhc3NlbWJsZXIgdmVyc2lvbiBudW1iZXJcbi1ReSwgLVFuCQlpZ25vcmVkXG4iLCA2KSk7 CiMgMTA1MyAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9jb25maWcvdGMtcHBjLmMiCn0KCgoKc3Rh dGljIHZvaWQKcHBjX3NldF9jcHUgKCkKewogIGNvbnN0IGNoYXIgKmRlZmF1bHRfb3MgPSAiZWFi aSI7CiAgY29uc3QgY2hhciAqZGVmYXVsdF9jcHUgPSAicG93ZXJwYyI7CgogIGlmIChwcGNfY3B1 ID09IDApCiAgICB7CiAgICAgIGlmIChzdHJuY21wIChkZWZhdWx0X29zLCAiYWl4IiwgMykgPT0g MAogICAgICAgICAgJiYgZGVmYXVsdF9vc1szXSA+PSAnNCcgJiYgZGVmYXVsdF9vc1szXSA8PSAn OScpCiAgICAgICAgcHBjX2NwdSA9ICgwMTAwKSB8ICgwMTApOwogICAgICBlbHNlIGlmIChzdHJu Y21wIChkZWZhdWx0X29zLCAiYWl4MyIsIDQpID09IDApCiAgICAgICAgcHBjX2NwdSA9ICgwMikg fCAoMDEwKTsKICAgICAgZWxzZSBpZiAoc3RyY21wIChkZWZhdWx0X2NwdSwgInJzNjAwMCIpID09 IDApCiAgICAgICAgcHBjX2NwdSA9ICgwMikgfCAoMDEwKTsKICAgICAgZWxzZSBpZiAoc3RybmNt cCAoZGVmYXVsdF9jcHUsICJwb3dlcnBjIiwgNykgPT0gMCkKICAgICAgICB7CiAgICAgICAgICBp ZiAoZGVmYXVsdF9jcHVbN10gPT0gJzYnICYmIGRlZmF1bHRfY3B1WzhdID09ICc0JykKICAgICAg ICAgICAgcHBjX2NwdSA9ICgwMSkgfCAoMDIwKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAg cHBjX2NwdSA9ICgwMSkgfCAoMDEwKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBhc19m YXRhbCAoZGNnZXR0ZXh0ICgoKHZvaWQgKikwKSwgIlVua25vd24gZGVmYXVsdCBjcHUgPSAlcywg b3MgPSAlcyIsIDYpLAogICAgICAgICAgICAgICAgICBkZWZhdWx0X2NwdSwgZGVmYXVsdF9vcyk7 CiAgICB9Cn0KCgoKZW51bSBiZmRfYXJjaGl0ZWN0dXJlCnBwY19hcmNoICgpCnsKICBjb25zdCBj aGFyICpkZWZhdWx0X2NwdSA9ICJwb3dlcnBjIjsKICBwcGNfc2V0X2NwdSAoKTsKCiAgaWYgKChw cGNfY3B1ICYgKDAxKSkgIT0gMCkKICAgIHJldHVybiBiZmRfYXJjaF9wb3dlcnBjOwogIGVsc2Ug aWYgKChwcGNfY3B1ICYgKDAyKSkgIT0gMCkKICAgIHJldHVybiBiZmRfYXJjaF9yczYwMDA7CiAg ZWxzZSBpZiAoKHBwY19jcHUgJiAoKDAxMDApIHwgKDAyMDApKSkgIT0gMCkKICAgIHsKICAgICAg aWYgKHN0cmNtcCAoZGVmYXVsdF9jcHUsICJyczYwMDAiKSA9PSAwKQogICAgICAgIHJldHVybiBi ZmRfYXJjaF9yczYwMDA7CiAgICAgIGVsc2UgaWYgKHN0cm5jbXAgKGRlZmF1bHRfY3B1LCAicG93 ZXJwYyIsIDcpID09IDApCiAgICAgICAgcmV0dXJuIGJmZF9hcmNoX3Bvd2VycGM7CiAgICB9Cgog IGFzX2ZhdGFsIChkY2dldHRleHQgKCgodm9pZCAqKTApLCAiTmVpdGhlciBQb3dlciBub3IgUG93 ZXJQQyBvcGNvZGVzIHdlcmUgc2VsZWN0ZWQuIiwgNikpOwogIHJldHVybiBiZmRfYXJjaF91bmtu b3duOwp9Cgp1bnNpZ25lZCBsb25nCnBwY19tYWNoICgpCnsKICByZXR1cm4gcHBjX29iajY0ID8g MSA6IDA7Cn0KCmV4dGVybiBjaGFyKgpwcGNfdGFyZ2V0X2Zvcm1hdCAoKQp7CiMgMTEzMiAiL3Ny Yy9iaW51dGlscy0yLjEzL2dhcy9jb25maWcvdGMtcHBjLmMiCiAgcmV0dXJuICh0YXJnZXRfYmln X2VuZGlhbgogICAgICAgICAgPyAocHBjX29iajY0ID8gImVsZjY0LXBvd2VycGMiIDogImVsZjMy LXBvd2VycGMiKQogICAgICAgICAgOiAocHBjX29iajY0ID8gImVsZjY0LXBvd2VycGNsZSIgOiAi ZWxmMzItcG93ZXJwY2xlIikpOwoKfQoKCgoKCnZvaWQKbWRfYmVnaW4gKCkKewogIHJlZ2lzdGVy IGNvbnN0IHN0cnVjdCBwb3dlcnBjX29wY29kZSAqb3A7CiAgY29uc3Qgc3RydWN0IHBvd2VycGNf b3Bjb2RlICpvcF9lbmQ7CiAgY29uc3Qgc3RydWN0IHBvd2VycGNfbWFjcm8gKm1hY3JvOwogIGNv bnN0IHN0cnVjdCBwb3dlcnBjX21hY3JvICptYWNyb19lbmQ7CiAgYm9vbGVhbiBkdXBfaW5zbiA9 IGZhbHNlOwoKICBwcGNfc2V0X2NwdSAoKTsKCgoKICBpZiAocHBjX2ZsYWdzICYmICFtc29sYXJp cykKICAgICgoKigoc3Rkb3V0cHV0KS0+eHZlYy0+X2JmZF9zZXRfcHJpdmF0ZV9mbGFncykpIChz dGRvdXRwdXQsIHBwY19mbGFncykpOwoKCgogIHBwY19oYXNoID0gaGFzaF9uZXcgKCk7CgogIG9w X2VuZCA9IHBvd2VycGNfb3Bjb2RlcyArIHBvd2VycGNfbnVtX29wY29kZXM7CiAgZm9yIChvcCA9 IHBvd2VycGNfb3Bjb2Rlczsgb3AgPCBvcF9lbmQ7IG9wKyspCiAgICB7CiAgICAgIDsKCiAgICAg IGlmICgob3AtPmZsYWdzICYgcHBjX2NwdSAmIH4oKDAxMCkgfCAoMDIwKSkpICE9IDAKICAgICAg ICAgICYmICgob3AtPmZsYWdzICYgKCgwMTApIHwgKDAyMCkpKSA9PSAwCiAgICAgICAgICAgICAg fHwgKChvcC0+ZmxhZ3MgJiAoKDAxMCkgfCAoMDIwKSkpCiAgICAgICAgICAgICAgICAgID09IChw cGNfY3B1ICYgKCgwMTApIHwgKDAyMCkpKSkKICAgICAgICAgICAgICB8fCAocHBjX2NwdSAmICgw NDAwKSkgIT0gMCkKICAgICAgICAgICYmICgob3AtPmZsYWdzICYgKCgwMjAwMDApIHwgKDA0MDAw MCkpKSA9PSAwCiAgICAgICAgICAgICAgfHwgKChvcC0+ZmxhZ3MgJiAoMDIwMDAwKSkKICAgICAg ICAgICAgICAgICAgPT0gKHBwY19jcHUgJiAoMDIwMDAwKSkpKSkKICAgICAgICB7CiAgICAgICAg ICBjb25zdCBjaGFyICpyZXR2YWw7CgogICAgICAgICAgcmV0dmFsID0gaGFzaF9pbnNlcnQgKHBw Y19oYXNoLCBvcC0+bmFtZSwgKHZvaWQgKikgb3ApOwogICAgICAgICAgaWYgKHJldHZhbCAhPSAo Y29uc3QgY2hhciAqKSAoKHZvaWQgKikwKSkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBp ZiAoKHBwY19jcHUgJiAoMDQwKSkgIT0gMAogICAgICAgICAgICAgICAgICAmJiAob3AtPmZsYWdz ICYgKDAyKSkgIT0gMCkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICBh c19iYWQgKGRjZ2V0dGV4dCAoKCh2b2lkICopMCksICJJbnRlcm5hbCBhc3NlbWJsZXIgZXJyb3Ig Zm9yIGluc3RydWN0aW9uICVzIiwgNiksCiAgICAgICAgICAgICAgICAgICAgICBvcC0+bmFtZSk7 CiAgICAgICAgICAgICAgZHVwX2luc24gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgfQoKCiAgcHBjX21hY3JvX2hhc2ggPSBoYXNoX25ldyAoKTsKCiAgbWFjcm9fZW5kID0gcG93 ZXJwY19tYWNyb3MgKyBwb3dlcnBjX251bV9tYWNyb3M7CiAgZm9yIChtYWNybyA9IHBvd2VycGNf bWFjcm9zOyBtYWNybyA8IG1hY3JvX2VuZDsgbWFjcm8rKykKICAgIHsKICAgICAgaWYgKChtYWNy by0+ZmxhZ3MgJiBwcGNfY3B1KSAhPSAwKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IGNoYXIg KnJldHZhbDsKCiAgICAgICAgICByZXR2YWwgPSBoYXNoX2luc2VydCAocHBjX21hY3JvX2hhc2gs IG1hY3JvLT5uYW1lLCAodm9pZCAqKSBtYWNybyk7CiAgICAgICAgICBpZiAocmV0dmFsICE9IChj b25zdCBjaGFyICopICgodm9pZCAqKTApKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgYXNf YmFkIChkY2dldHRleHQgKCgodm9pZCAqKTApLCAiSW50ZXJuYWwgYXNzZW1ibGVyIGVycm9yIGZv ciBtYWNybyAlcyIsIDYpLCBtYWNyby0+bmFtZSk7CiAgICAgICAgICAgICAgZHVwX2luc24gPSB0 cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICBpZiAoZHVwX2luc24pCiAgICBh c19hYm9ydCAoIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvY29uZmlnL3RjLXBwYy5jIiwgMTIxMywg X19QUkVUVFlfRlVOQ1RJT05fXyk7CgoKCiAgaWYgKCFzZXRfdGFyZ2V0X2VuZGlhbikKICAgIHsK ICAgICAgc2V0X3RhcmdldF9lbmRpYW4gPSAxOwogICAgICB0YXJnZXRfYmlnX2VuZGlhbiA9IDE7 CiAgICB9CiMgMTI0MSAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9jb25maWcvdGMtcHBjLmMiCn0K CgoKc3RhdGljIHVuc2lnbmVkIGxvbmcKcHBjX2luc2VydF9vcGVyYW5kIChpbnNuLCBvcGVyYW5k LCB2YWwsIGZpbGUsIGxpbmUpCiAgICAgdW5zaWduZWQgbG9uZyBpbnNuOwogICAgIGNvbnN0IHN0 cnVjdCBwb3dlcnBjX29wZXJhbmQgKm9wZXJhbmQ7CiAgICAgb2Zmc2V0VCB2YWw7CiAgICAgY2hh ciAqZmlsZTsKICAgICB1bnNpZ25lZCBpbnQgbGluZTsKewogIGlmIChvcGVyYW5kLT5iaXRzICE9 IDMyKQogICAgewogICAgICBsb25nIG1pbiwgbWF4OwogICAgICBvZmZzZXRUIHRlc3Q7CgogICAg ICBpZiAoKG9wZXJhbmQtPmZsYWdzICYgKDAxKSkgIT0gMCkKICAgICAgICB7CiAgICAgICAgICBp ZiAoKG9wZXJhbmQtPmZsYWdzICYgKDAyKSkgIT0gMCkKICAgICAgICAgICAgbWF4ID0gKDEgPDwg b3BlcmFuZC0+Yml0cykgLSAxOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBtYXggPSAoMSA8 PCAob3BlcmFuZC0+Yml0cyAtIDEpKSAtIDE7CiAgICAgICAgICBtaW4gPSAtICgxIDw8IChvcGVy YW5kLT5iaXRzIC0gMSkpOwoKICAgICAgICAgIGlmICghcHBjX29iajY0KQogICAgICAgICAgICB7 CgoKCgogICAgICAgICAgICAgIGlmICh2YWwgPiAwCiAgICAgICAgICAgICAgICAgICYmICh2YWwg JiAob2Zmc2V0VCkgMHg4MDAwMDAwMCkgIT0gMAogICAgICAgICAgICAgICAgICAmJiAodmFsICYg KG9mZnNldFQpIDB4ZmZmZmZmZmYpID09IHZhbCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgdmFsIC09IDB4ODAwMDAwMDA7CiAgICAgICAgICAgICAgICAgIHZhbCAtPSAweDgw MDAwMDAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBl bHNlCiAgICAgICAgewogICAgICAgICAgbWF4ID0gKDEgPDwgb3BlcmFuZC0+Yml0cykgLSAxOwog ICAgICAgICAgbWluID0gMDsKICAgICAgICB9CgogICAgICBpZiAoKG9wZXJhbmQtPmZsYWdzICYg KDA0MDAwKSkgIT0gMCkKICAgICAgICB0ZXN0ID0gLSB2YWw7CiAgICAgIGVsc2UKICAgICAgICB0 ZXN0ID0gdmFsOwoKICAgICAgaWYgKHRlc3QgPCAob2Zmc2V0VCkgbWluIHx8IHRlc3QgPiAob2Zm c2V0VCkgbWF4KQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IGNoYXIgKmVyciA9CiAgICAgICAg ICAgIGRjZ2V0dGV4dCAoKCh2b2lkICopMCksICJvcGVyYW5kIG91dCBvZiByYW5nZSAoJXMgbm90 IGJldHdlZW4gJWxkIGFuZCAlbGQpIiwgNik7CiAgICAgICAgICBjaGFyIGJ1ZlsxMDBdOwoKICAg ICAgICAgIHNwcmludF92YWx1ZSAoYnVmLCB0ZXN0KTsKICAgICAgICAgIGFzX2JhZF93aGVyZSAo ZmlsZSwgbGluZSwgZXJyLCBidWYsIG1pbiwgbWF4KTsKICAgICAgICB9CiAgICB9CgogIGlmIChv cGVyYW5kLT5pbnNlcnQpCiAgICB7CiAgICAgIGNvbnN0IGNoYXIgKmVycm1zZzsKCiAgICAgIGVy cm1zZyA9ICgodm9pZCAqKTApOwogICAgICBpbnNuID0gKCpvcGVyYW5kLT5pbnNlcnQpIChpbnNu LCAobG9uZykgdmFsLCBwcGNfY3B1LCAmZXJybXNnKTsKICAgICAgaWYgKGVycm1zZyAhPSAoY29u c3QgY2hhciAqKSAoKHZvaWQgKikwKSkKICAgICAgICBhc19iYWRfd2hlcmUgKGZpbGUsIGxpbmUs IGVycm1zZyk7CiAgICB9CiAgZWxzZQogICAgaW5zbiB8PSAoKChsb25nKSB2YWwgJiAoKDEgPDwg b3BlcmFuZC0+Yml0cykgLSAxKSkKICAgICAgICAgICAgIDw8IG9wZXJhbmQtPnNoaWZ0KTsKCiAg cmV0dXJuIGluc247Cn0KCgoKCnN0YXRpYyBiZmRfcmVsb2NfY29kZV9yZWFsX3R5cGUKcHBjX2Vs Zl9zdWZmaXggKHN0cl9wLCBleHBfcCkKICAgICBjaGFyICoqc3RyX3A7CiAgICAgZXhwcmVzc2lv blMgKmV4cF9wOwp7CiAgc3RydWN0IG1hcF9iZmQgewogICAgY2hhciAqc3RyaW5nOwogICAgaW50 IGxlbmd0aDsKICAgIGludCByZWxvYzsKICB9OwoKICBjaGFyIGlkZW50WzIwXTsKICBjaGFyICpz dHIgPSAqc3RyX3A7CiAgY2hhciAqc3RyMjsKICBpbnQgY2g7CiAgaW50IGxlbjsKICBjb25zdCBz dHJ1Y3QgbWFwX2JmZCAqcHRyOwoKCgogIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFwX2JmZCBtYXBw aW5nW10gPSB7CiAgICB7ICJsIiwgc2l6ZW9mICgibCIpLTEsIChpbnQpIEJGRF9SRUxPQ19MTzE2 IH0sCiAgICB7ICJoIiwgc2l6ZW9mICgiaCIpLTEsIChpbnQpIEJGRF9SRUxPQ19ISTE2IH0sCiAg ICB7ICJoYSIsIHNpemVvZiAoImhhIiktMSwgKGludCkgQkZEX1JFTE9DX0hJMTZfUyB9LAogICAg eyAiYnJ0YWtlbiIsIHNpemVvZiAoImJydGFrZW4iKS0xLCAoaW50KSBCRkRfUkVMT0NfUFBDX0Ix Nl9CUlRBS0VOIH0sCiAgICB7ICJicm50YWtlbiIsIHNpemVvZiAoImJybnRha2VuIiktMSwgKGlu dCkgQkZEX1JFTE9DX1BQQ19CMTZfQlJOVEFLRU4gfSwKICAgIHsgImdvdCIsIHNpemVvZiAoImdv dCIpLTEsIChpbnQpIEJGRF9SRUxPQ18xNl9HT1RPRkYgfSwKICAgIHsgImdvdEBsIiwgc2l6ZW9m ICgiZ290QGwiKS0xLCAoaW50KSBCRkRfUkVMT0NfTE8xNl9HT1RPRkYgfSwKICAgIHsgImdvdEBo Iiwgc2l6ZW9mICgiZ290QGgiKS0xLCAoaW50KSBCRkRfUkVMT0NfSEkxNl9HT1RPRkYgfSwKICAg IHsgImdvdEBoYSIsIHNpemVvZiAoImdvdEBoYSIpLTEsIChpbnQpIEJGRF9SRUxPQ19ISTE2X1Nf R09UT0ZGIH0sCiAgICB7ICJmaXh1cCIsIHNpemVvZiAoImZpeHVwIiktMSwgKGludCkgQkZEX1JF TE9DX0NUT1IgfSwKICAgIHsgInBsdCIsIHNpemVvZiAoInBsdCIpLTEsIChpbnQpIEJGRF9SRUxP Q18yNF9QTFRfUENSRUwgfSwKICAgIHsgInBsdHJlbDI0Iiwgc2l6ZW9mICgicGx0cmVsMjQiKS0x LCAoaW50KSBCRkRfUkVMT0NfMjRfUExUX1BDUkVMIH0sCiAgICB7ICJjb3B5Iiwgc2l6ZW9mICgi Y29weSIpLTEsIChpbnQpIEJGRF9SRUxPQ19QUENfQ09QWSB9LAogICAgeyAiZ2xvYmRhdCIsIHNp emVvZiAoImdsb2JkYXQiKS0xLCAoaW50KSBCRkRfUkVMT0NfUFBDX0dMT0JfREFUIH0sCiAgICB7 ICJsb2NhbDI0cGMiLCBzaXplb2YgKCJsb2NhbDI0cGMiKS0xLCAoaW50KSBCRkRfUkVMT0NfUFBD X0xPQ0FMMjRQQyB9LAogICAgeyAibG9jYWwiLCBzaXplb2YgKCJsb2NhbCIpLTEsIChpbnQpIEJG RF9SRUxPQ19QUENfTE9DQUwyNFBDIH0sCiAgICB7ICJwbHRyZWwiLCBzaXplb2YgKCJwbHRyZWwi KS0xLCAoaW50KSBCRkRfUkVMT0NfMzJfUExUX1BDUkVMIH0sCiAgICB7ICJwbHRAbCIsIHNpemVv ZiAoInBsdEBsIiktMSwgKGludCkgQkZEX1JFTE9DX0xPMTZfUExUT0ZGIH0sCiAgICB7ICJwbHRA aCIsIHNpemVvZiAoInBsdEBoIiktMSwgKGludCkgQkZEX1JFTE9DX0hJMTZfUExUT0ZGIH0sCiAg ICB7ICJwbHRAaGEiLCBzaXplb2YgKCJwbHRAaGEiKS0xLCAoaW50KSBCRkRfUkVMT0NfSEkxNl9T X1BMVE9GRiB9LAogICAgeyAic2RhcmVsIiwgc2l6ZW9mICgic2RhcmVsIiktMSwgKGludCkgQkZE X1JFTE9DX0dQUkVMMTYgfSwKICAgIHsgInNlY3RvZmYiLCBzaXplb2YgKCJzZWN0b2ZmIiktMSwg KGludCkgQkZEX1JFTE9DXzE2X0JBU0VSRUwgfSwKICAgIHsgInNlY3RvZmZAbCIsIHNpemVvZiAo InNlY3RvZmZAbCIpLTEsIChpbnQpIEJGRF9SRUxPQ19MTzE2X0JBU0VSRUwgfSwKICAgIHsgInNl Y3RvZmZAaCIsIHNpemVvZiAoInNlY3RvZmZAaCIpLTEsIChpbnQpIEJGRF9SRUxPQ19ISTE2X0JB U0VSRUwgfSwKICAgIHsgInNlY3RvZmZAaGEiLCBzaXplb2YgKCJzZWN0b2ZmQGhhIiktMSwgKGlu dCkgQkZEX1JFTE9DX0hJMTZfU19CQVNFUkVMIH0sCiAgICB7ICJuYWRkciIsIHNpemVvZiAoIm5h ZGRyIiktMSwgKGludCkgQkZEX1JFTE9DX1BQQ19FTUJfTkFERFIzMiB9LAogICAgeyAibmFkZHIx NiIsIHNpemVvZiAoIm5hZGRyMTYiKS0xLCAoaW50KSBCRkRfUkVMT0NfUFBDX0VNQl9OQUREUjE2 IH0sCiAgICB7ICJuYWRkckBsIiwgc2l6ZW9mICgibmFkZHJAbCIpLTEsIChpbnQpIEJGRF9SRUxP Q19QUENfRU1CX05BRERSMTZfTE8gfSwKICAgIHsgIm5hZGRyQGgiLCBzaXplb2YgKCJuYWRkckBo IiktMSwgKGludCkgQkZEX1JFTE9DX1BQQ19FTUJfTkFERFIxNl9ISSB9LAogICAgeyAibmFkZHJA aGEiLCBzaXplb2YgKCJuYWRkckBoYSIpLTEsIChpbnQpIEJGRF9SRUxPQ19QUENfRU1CX05BRERS MTZfSEEgfSwKICAgIHsgInNkYWkxNiIsIHNpemVvZiAoInNkYWkxNiIpLTEsIChpbnQpIEJGRF9S RUxPQ19QUENfRU1CX1NEQUkxNiB9LAogICAgeyAic2RhMnJlbCIsIHNpemVvZiAoInNkYTJyZWwi KS0xLCAoaW50KSBCRkRfUkVMT0NfUFBDX0VNQl9TREEyUkVMIH0sCiAgICB7ICJzZGEyaTE2Iiwg c2l6ZW9mICgic2RhMmkxNiIpLTEsIChpbnQpIEJGRF9SRUxPQ19QUENfRU1CX1NEQTJJMTYgfSwK ICAgIHsgInNkYTIxIiwgc2l6ZW9mICgic2RhMjEiKS0xLCAoaW50KSBCRkRfUkVMT0NfUFBDX0VN Ql9TREEyMSB9LAogICAgeyAibXJrcmVmIiwgc2l6ZW9mICgibXJrcmVmIiktMSwgKGludCkgQkZE X1JFTE9DX1BQQ19FTUJfTVJLUkVGIH0sCiAgICB7ICJyZWxzZWN0Iiwgc2l6ZW9mICgicmVsc2Vj dCIpLTEsIChpbnQpIEJGRF9SRUxPQ19QUENfRU1CX1JFTFNFQzE2IH0sCiAgICB7ICJyZWxzZWN0 QGwiLCBzaXplb2YgKCJyZWxzZWN0QGwiKS0xLCAoaW50KSBCRkRfUkVMT0NfUFBDX0VNQl9SRUxT VF9MTyB9LAogICAgeyAicmVsc2VjdEBoIiwgc2l6ZW9mICgicmVsc2VjdEBoIiktMSwgKGludCkg QkZEX1JFTE9DX1BQQ19FTUJfUkVMU1RfSEkgfSwKICAgIHsgInJlbHNlY3RAaGEiLCBzaXplb2Yg KCJyZWxzZWN0QGhhIiktMSwgKGludCkgQkZEX1JFTE9DX1BQQ19FTUJfUkVMU1RfSEEgfSwKICAg IHsgImJpdGZsZCIsIHNpemVvZiAoImJpdGZsZCIpLTEsIChpbnQpIEJGRF9SRUxPQ19QUENfRU1C X0JJVF9GTEQgfSwKICAgIHsgInJlbHNkYSIsIHNpemVvZiAoInJlbHNkYSIpLTEsIChpbnQpIEJG RF9SRUxPQ19QUENfRU1CX1JFTFNEQSB9LAogICAgeyAieGdvdCIsIHNpemVvZiAoInhnb3QiKS0x LCAoaW50KSBCRkRfUkVMT0NfUFBDX1RPQzE2IH0sCgoKICAgIHsgImhpZ2hlciIsIHNpemVvZiAo ImhpZ2hlciIpLTEsIC0gKGludCkgQkZEX1JFTE9DX1BQQzY0X0hJR0hFUiB9LAogICAgeyAiaGln aGVyYSIsIHNpemVvZiAoImhpZ2hlcmEiKS0xLCAtIChpbnQpIEJGRF9SRUxPQ19QUEM2NF9ISUdI RVJfUyB9LAogICAgeyAiaGlnaGVzdCIsIHNpemVvZiAoImhpZ2hlc3QiKS0xLCAtIChpbnQpIEJG RF9SRUxPQ19QUEM2NF9ISUdIRVNUIH0sCiAgICB7ICJoaWdoZXN0YSIsIHNpemVvZiAoImhpZ2hl c3RhIiktMSwgLSAoaW50KSBCRkRfUkVMT0NfUFBDNjRfSElHSEVTVF9TIH0sCiAgICB7ICJ0b2Ni YXNlIiwgc2l6ZW9mICgidG9jYmFzZSIpLTEsIC0gKGludCkgQkZEX1JFTE9DX1BQQzY0X1RPQyB9 LAogICAgeyAidG9jIiwgc2l6ZW9mICgidG9jIiktMSwgLSAoaW50KSBCRkRfUkVMT0NfUFBDX1RP QzE2IH0sCiAgICB7ICJ0b2NAbCIsIHNpemVvZiAoInRvY0BsIiktMSwgLSAoaW50KSBCRkRfUkVM T0NfUFBDNjRfVE9DMTZfTE8gfSwKICAgIHsgInRvY0BoIiwgc2l6ZW9mICgidG9jQGgiKS0xLCAt IChpbnQpIEJGRF9SRUxPQ19QUEM2NF9UT0MxNl9ISSB9LAogICAgeyAidG9jQGhhIiwgc2l6ZW9m ICgidG9jQGhhIiktMSwgLSAoaW50KSBCRkRfUkVMT0NfUFBDNjRfVE9DMTZfSEEgfSwKICAgIHsg KGNoYXIgKikgMCwgMCwgKGludCkgQkZEX1JFTE9DX1VOVVNFRCB9CiAgfTsKCiAgaWYgKCpzdHIr KyAhPSAnQCcpCiAgICByZXR1cm4gQkZEX1JFTE9DX1VOVVNFRDsKCiAgZm9yIChjaCA9ICpzdHIs IHN0cjIgPSBpZGVudDsKICAgICAgIChzdHIyIDwgaWRlbnQgKyBzaXplb2YgKGlkZW50KSAtIDEK ICAgICAgICAmJiAoKF9zY2hfaXN0YWJsZVsoY2gpICYgMHhmZl0gJiAodW5zaWduZWQgc2hvcnQp KF9zY2hfaXNhbG51bSkpIHx8IGNoID09ICdAJykpOwogICAgICAgY2ggPSAqKytzdHIpCiAgICB7 CiAgICAgICpzdHIyKysgPSBfc2NoX3RvbG93ZXJbKGNoKSAmIDB4ZmZdOwogICAgfQoKICAqc3Ry MiA9ICdcMCc7CiAgbGVuID0gc3RyMiAtIGlkZW50OwoKICBjaCA9IGlkZW50WzBdOwogIGZvciAo cHRyID0gJm1hcHBpbmdbMF07IHB0ci0+bGVuZ3RoID4gMDsgcHRyKyspCiAgICBpZiAoY2ggPT0g cHRyLT5zdHJpbmdbMF0KICAgICAgICAmJiBsZW4gPT0gcHRyLT5sZW5ndGgKICAgICAgICAmJiBt ZW1jbXAgKGlkZW50LCBwdHItPnN0cmluZywgcHRyLT5sZW5ndGgpID09IDApCiAgICAgIHsKICAg ICAgICBpbnQgcmVsb2MgPSBwdHItPnJlbG9jOwoKICAgICAgICBpZiAocmVsb2MgPCAwKQogICAg ICAgICAgewogICAgICAgICAgICBpZiAoIXBwY19vYmo2NCkKICAgICAgICAgICAgICByZXR1cm4g QkZEX1JFTE9DX1VOVVNFRDsKICAgICAgICAgICAgcmVsb2MgPSAtcmVsb2M7CiAgICAgICAgICB9 CgogICAgICAgIGlmIChleHBfcC0+WF9hZGRfbnVtYmVyICE9IDAKICAgICAgICAgICAgJiYgKHJl bG9jID09IChpbnQpIEJGRF9SRUxPQ18xNl9HT1RPRkYKICAgICAgICAgICAgICAgIHx8IHJlbG9j ID09IChpbnQpIEJGRF9SRUxPQ19MTzE2X0dPVE9GRgogICAgICAgICAgICAgICAgfHwgcmVsb2Mg PT0gKGludCkgQkZEX1JFTE9DX0hJMTZfR09UT0ZGCiAgICAgICAgICAgICAgICB8fCByZWxvYyA9 PSAoaW50KSBCRkRfUkVMT0NfSEkxNl9TX0dPVE9GRikpCiAgICAgICAgICBhc193YXJuIChkY2dl dHRleHQgKCgodm9pZCAqKTApLCAiaWRlbnRpZmllcitjb25zdGFudEBnb3QgbWVhbnMgaWRlbnRp ZmllckBnb3QrY29uc3RhbnQiLCA2KSk7CgoKICAgICAgICBpZiAoKnN0ciA9PSAnLScgfHwgKnN0 ciA9PSAnKycpCiAgICAgICAgICB7CiAgICAgICAgICAgIGNoYXIgKm9yaWdfbGluZSA9IGlucHV0 X2xpbmVfcG9pbnRlcjsKICAgICAgICAgICAgZXhwcmVzc2lvblMgbmV3X2V4cDsKCiAgICAgICAg ICAgIGlucHV0X2xpbmVfcG9pbnRlciA9IHN0cjsKICAgICAgICAgICAgZXhwciAoMCwgJm5ld19l eHApOwogICAgICAgICAgICBpZiAobmV3X2V4cC5YX29wID09IE9fY29uc3RhbnQpCiAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgZXhwX3AtPlhfYWRkX251bWJlciArPSBuZXdfZXhwLlhf YWRkX251bWJlcjsKICAgICAgICAgICAgICAgIHN0ciA9IGlucHV0X2xpbmVfcG9pbnRlcjsKICAg ICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJmlucHV0X2xpbmVfcG9pbnRlciAhPSBzdHJf cCkKICAgICAgICAgICAgICBpbnB1dF9saW5lX3BvaW50ZXIgPSBvcmlnX2xpbmU7CiAgICAgICAg ICB9CiAgICAgICAgKnN0cl9wID0gc3RyOwoKICAgICAgICBpZiAocmVsb2MgPT0gKGludCkgQkZE X1JFTE9DX1BQQzY0X1RPQwogICAgICAgICAgICAmJiBleHBfcC0+WF9vcCA9PSBPX3N5bWJvbCkK ICAgICAgICAgIHsKCgoKICAgICAgICAgICAgZXhwX3AtPlhfYWRkX3N5bWJvbCA9ICZhYnNfc3lt Ym9sOwogICAgICAgICAgfQoKICAgICAgICByZXR1cm4gKGJmZF9yZWxvY19jb2RlX3JlYWxfdHlw ZSkgcmVsb2M7CiAgICAgIH0KCiAgcmV0dXJuIEJGRF9SRUxPQ19VTlVTRUQ7Cn0KCgoKc3RhdGlj IHZvaWQKcHBjX2VsZl9jb25zIChuYnl0ZXMpCiAgICAgcmVnaXN0ZXIgaW50IG5ieXRlczsKewog IGV4cHJlc3Npb25TIGV4cDsKICBiZmRfcmVsb2NfY29kZV9yZWFsX3R5cGUgcmVsb2M7CgogIGlm IChpc19pdF9lbmRfb2Zfc3RhdGVtZW50ICgpKQogICAgewogICAgICBkZW1hbmRfZW1wdHlfcmVz dF9vZl9saW5lICgpOwogICAgICByZXR1cm47CiAgICB9CgogIGRvCiAgICB7CiAgICAgIGV4cHIg KDAsICZleHApOwogICAgICBpZiAoZXhwLlhfb3AgPT0gT19zeW1ib2wKICAgICAgICAgICYmICpp bnB1dF9saW5lX3BvaW50ZXIgPT0gJ0AnCiAgICAgICAgICAmJiAocmVsb2MgPSBwcGNfZWxmX3N1 ZmZpeCAoJmlucHV0X2xpbmVfcG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmZXhwKSkgIT0gQkZEX1JFTE9DX1VOVVNFRCkKICAgICAgICB7CiAgICAgICAgICBy ZWxvY19ob3d0b190eXBlICpyZWxvY19ob3d0bzsKICAgICAgICAgIGludCBzaXplOwoKICAgICAg ICAgIHJlbG9jX2hvd3RvID0gYmZkX3JlbG9jX3R5cGVfbG9va3VwIChzdGRvdXRwdXQsIHJlbG9j KTsKICAgICAgICAgIHNpemUgPSBiZmRfZ2V0X3JlbG9jX3NpemUgKHJlbG9jX2hvd3RvKTsKCiAg ICAgICAgICBpZiAoc2l6ZSA+IG5ieXRlcykKICAgICAgICAgICAgewogICAgICAgICAgICAgIGFz X2JhZCAoZGNnZXR0ZXh0ICgoKHZvaWQgKikwKSwgIiVzIHJlbG9jYXRpb25zIGRvIG5vdCBmaXQg aW4gJWQgYnl0ZXNcbiIsIDYpLAogICAgICAgICAgICAgICAgICAgICAgcmVsb2NfaG93dG8tPm5h bWUsIG5ieXRlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGNoYXIgKnA7CiAgICAgICAgICAgICAgaW50IG9mZnNldDsKCiAgICAgICAg ICAgICAgcCA9IGZyYWdfbW9yZSAobmJ5dGVzKTsKICAgICAgICAgICAgICBvZmZzZXQgPSAwOwog ICAgICAgICAgICAgIGlmICh0YXJnZXRfYmlnX2VuZGlhbikKICAgICAgICAgICAgICAgIG9mZnNl dCA9IG5ieXRlcyAtIHNpemU7CiAgICAgICAgICAgICAgZml4X25ld19leHAgKGZyYWdfbm93LCBw IC0gZnJhZ19ub3ctPmZyX2xpdGVyYWwgKyBvZmZzZXQsIHNpemUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICZleHAsIDAsIHJlbG9jKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg ZWxzZQogICAgICAgIGVtaXRfZXhwciAoJmV4cCwgKHVuc2lnbmVkIGludCkgbmJ5dGVzKTsKICAg IH0KICB3aGlsZSAoKmlucHV0X2xpbmVfcG9pbnRlcisrID09ICcsJyk7CgoKICBpbnB1dF9saW5l X3BvaW50ZXItLTsKICBkZW1hbmRfZW1wdHlfcmVzdF9vZl9saW5lICgpOwp9CgoKc3RhdGljIHZv aWQKcHBjX2VsZl9yZGF0YSAoeHh4KQogICAgIGludCB4eHg7CnsKICBjaGFyICpzYXZlX2xpbmUg PSBpbnB1dF9saW5lX3BvaW50ZXI7CiAgc3RhdGljIGNoYXIgc2VjdGlvbltdID0gIi5yb2RhdGFc biI7CgoKICBpbnB1dF9saW5lX3BvaW50ZXIgPSBzZWN0aW9uOwogIG9ial9lbGZfc2VjdGlvbiAo eHh4KTsKCiAgaW5wdXRfbGluZV9wb2ludGVyID0gc2F2ZV9saW5lOwp9CgoKc3RhdGljIHZvaWQK cHBjX2VsZl9sY29tbSAoeHh4KQogICAgIGludCB4eHggX19hdHRyaWJ1dGVfXyAoKF9fdW51c2Vk X18pKTsKewogIHJlZ2lzdGVyIGNoYXIgKm5hbWU7CiAgcmVnaXN0ZXIgY2hhciBjOwogIHJlZ2lz dGVyIGNoYXIgKnA7CiAgb2Zmc2V0VCBzaXplOwogIHJlZ2lzdGVyIHN5bWJvbFMgKnN5bWJvbFA7 CiAgb2Zmc2V0VCBhbGlnbjsKICBzZWdUIG9sZF9zZWM7CiAgaW50IG9sZF9zdWJzZWM7CiAgY2hh ciAqcGZyYWc7CiAgaW50IGFsaWduMjsKCiAgbmFtZSA9IGlucHV0X2xpbmVfcG9pbnRlcjsKICBj ID0gZ2V0X3N5bWJvbF9lbmQgKCk7CgoKICBwID0gaW5wdXRfbGluZV9wb2ludGVyOwogICpwID0g YzsKICB7IGlmICgqIGlucHV0X2xpbmVfcG9pbnRlciA9PSAnICcpICsrIGlucHV0X2xpbmVfcG9p bnRlcjsgfTsKICBpZiAoKmlucHV0X2xpbmVfcG9pbnRlciAhPSAnLCcpCiAgICB7CiAgICAgIGFz X2JhZCAoZGNnZXR0ZXh0ICgoKHZvaWQgKikwKSwgIkV4cGVjdGVkIGNvbW1hIGFmdGVyIHN5bWJv bC1uYW1lOiByZXN0IG9mIGxpbmUgaWdub3JlZC4iLCA2KSk7CiAgICAgIGlnbm9yZV9yZXN0X29m X2xpbmUgKCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgaW5wdXRfbGluZV9wb2ludGVyKys7CiAg aWYgKChzaXplID0gZ2V0X2Fic29sdXRlX2V4cHJlc3Npb24gKCkpIDwgMCkKICAgIHsKICAgICAg YXNfd2FybiAoZGNnZXR0ZXh0ICgoKHZvaWQgKikwKSwgIi5DT01Nb24gbGVuZ3RoICglbGQuKSA8 MCEgSWdub3JlZC4iLCA2KSwgKGxvbmcpIHNpemUpOwogICAgICBpZ25vcmVfcmVzdF9vZl9saW5l ICgpOwogICAgICByZXR1cm47CiAgICB9CgoKICBpZiAoKmlucHV0X2xpbmVfcG9pbnRlciAhPSAn LCcpCiAgICBhbGlnbiA9IDg7CiAgZWxzZQogICAgewogICAgICArK2lucHV0X2xpbmVfcG9pbnRl cjsKICAgICAgYWxpZ24gPSBnZXRfYWJzb2x1dGVfZXhwcmVzc2lvbiAoKTsKICAgICAgaWYgKGFs aWduIDw9IDApCiAgICAgICAgewogICAgICAgICAgYXNfd2FybiAoZGNnZXR0ZXh0ICgoKHZvaWQg KikwKSwgImlnbm9yaW5nIGJhZCBhbGlnbm1lbnQiLCA2KSk7CiAgICAgICAgICBhbGlnbiA9IDg7 CiAgICAgICAgfQogICAgfQoKICAqcCA9IDA7CiAgc3ltYm9sUCA9IHN5bWJvbF9maW5kX29yX21h a2UgKG5hbWUpOwogICpwID0gYzsKCiAgaWYgKFNfSVNfREVGSU5FRCAoc3ltYm9sUCkgJiYgISBT X0lTX0NPTU1PTiAoc3ltYm9sUCkpCiAgICB7CiAgICAgIGFzX2JhZCAoZGNnZXR0ZXh0ICgoKHZv aWQgKikwKSwgIklnbm9yaW5nIGF0dGVtcHQgdG8gcmUtZGVmaW5lIHN5bWJvbCBgJXMnLiIsIDYp LAogICAgICAgICAgICAgIFNfR0VUX05BTUUgKHN5bWJvbFApKTsKICAgICAgaWdub3JlX3Jlc3Rf b2ZfbGluZSAoKTsKICAgICAgcmV0dXJuOwogICAgfQoKICBpZiAoU19HRVRfVkFMVUUgKHN5bWJv bFApICYmIFNfR0VUX1ZBTFVFIChzeW1ib2xQKSAhPSAodmFsdWVUKSBzaXplKQogICAgewogICAg ICBhc19iYWQgKGRjZ2V0dGV4dCAoKCh2b2lkICopMCksICJMZW5ndGggb2YgLmxjb21tIFwiJXNc IiBpcyBhbHJlYWR5ICVsZC4gTm90IGNoYW5nZWQgdG8gJWxkLiIsIDYpLAogICAgICAgICAgICAg IFNfR0VUX05BTUUgKHN5bWJvbFApLAogICAgICAgICAgICAgIChsb25nKSBTX0dFVF9WQUxVRSAo c3ltYm9sUCksCiAgICAgICAgICAgICAgKGxvbmcpIHNpemUpOwoKICAgICAgaWdub3JlX3Jlc3Rf b2ZfbGluZSAoKTsKICAgICAgcmV0dXJuOwogICAgfQoKCiAgb2xkX3NlYyA9IG5vd19zZWc7CiAg b2xkX3N1YnNlYyA9IG5vd19zdWJzZWc7CiAgaWYgKGFsaWduKQogICAgewoKICAgICAgZm9yIChh bGlnbjIgPSAwOyAoYWxpZ24gJiAxKSA9PSAwOyBhbGlnbiA+Pj0gMSwgKythbGlnbjIpOwogICAg ICBpZiAoYWxpZ24gIT0gMSkKICAgICAgICB7CiAgICAgICAgICBhc19iYWQgKGRjZ2V0dGV4dCAo KCh2b2lkICopMCksICJDb21tb24gYWxpZ25tZW50IG5vdCBhIHBvd2VyIG9mIDIiLCA2KSk7CiAg ICAgICAgICBpZ25vcmVfcmVzdF9vZl9saW5lICgpOwogICAgICAgICAgcmV0dXJuOwogICAgICAg IH0KICAgIH0KICBlbHNlCiAgICBhbGlnbjIgPSAwOwoKICByZWNvcmRfYWxpZ25tZW50IChic3Nf c2VjdGlvbiwgYWxpZ24yKTsKICBzdWJzZWdfc2V0IChic3Nfc2VjdGlvbiwgMCk7CiAgaWYgKGFs aWduMikKICAgIGZyYWdfYWxpZ24gKGFsaWduMiwgMCwgMCk7CiAgaWYgKFNfR0VUX1NFR01FTlQg KHN5bWJvbFApID09IGJzc19zZWN0aW9uKQogICAgc3ltYm9sX2dldF9mcmFnIChzeW1ib2xQKS0+ ZnJfc3ltYm9sID0gMDsKICBzeW1ib2xfc2V0X2ZyYWcgKHN5bWJvbFAsIGZyYWdfbm93KTsKICBw ZnJhZyA9IGZyYWdfdmFyIChyc19vcmcsIDEsIDEsIChyZWxheF9zdWJzdGF0ZVQpIDAsIHN5bWJv bFAsIHNpemUsCiAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgMCk7CiAgKnBmcmFnID0gMDsK ICAoKChlbGZfc3ltYm9sX3R5cGUgKikgKCYoc3ltYm9sX2dldF9iZmRzeW0gKHN5bWJvbFApKS0+ dGhlX2JmZCkpLT5pbnRlcm5hbF9lbGZfc3ltLnN0X3NpemUgPSAoc2l6ZSkpOwogIFNfU0VUX1NF R01FTlQgKHN5bWJvbFAsIGJzc19zZWN0aW9uKTsKICBzdWJzZWdfc2V0IChvbGRfc2VjLCBvbGRf c3Vic2VjKTsKICBkZW1hbmRfZW1wdHlfcmVzdF9vZl9saW5lICgpOwp9CgoKCgpzdGF0aWMgdm9p ZApwcGNfZWxmX3ZhbGlkYXRlX2ZpeCAoZml4cCwgc2VnKQogICAgIGZpeFMgKmZpeHA7CiAgICAg c2VnVCBzZWc7CnsKICBpZiAoZml4cC0+ZnhfZG9uZSB8fCBmaXhwLT5meF9wY3JlbCkKICAgIHJl dHVybjsKCiAgc3dpdGNoIChzaGxpYikKICAgIHsKICAgIGNhc2UgU0hMSUJfTk9ORToKICAgIGNh c2UgU0hMSUJfUElDOgogICAgICByZXR1cm47CgogICAgY2FzZSBTSExJQl9NUkVMT0NBVEFCTEU6 CiAgICAgIGlmIChmaXhwLT5meF9yX3R5cGUgPD0gQkZEX1JFTE9DX1VOVVNFRAogICAgICAgICAg JiYgZml4cC0+Znhfcl90eXBlICE9IEJGRF9SRUxPQ18xNl9HT1RPRkYKICAgICAgICAgICYmIGZp eHAtPmZ4X3JfdHlwZSAhPSBCRkRfUkVMT0NfSEkxNl9HT1RPRkYKICAgICAgICAgICYmIGZpeHAt PmZ4X3JfdHlwZSAhPSBCRkRfUkVMT0NfTE8xNl9HT1RPRkYKICAgICAgICAgICYmIGZpeHAtPmZ4 X3JfdHlwZSAhPSBCRkRfUkVMT0NfSEkxNl9TX0dPVE9GRgogICAgICAgICAgJiYgZml4cC0+Znhf cl90eXBlICE9IEJGRF9SRUxPQ18xNl9CQVNFUkVMCiAgICAgICAgICAmJiBmaXhwLT5meF9yX3R5 cGUgIT0gQkZEX1JFTE9DX0xPMTZfQkFTRVJFTAogICAgICAgICAgJiYgZml4cC0+Znhfcl90eXBl ICE9IEJGRF9SRUxPQ19ISTE2X0JBU0VSRUwKICAgICAgICAgICYmIGZpeHAtPmZ4X3JfdHlwZSAh PSBCRkRfUkVMT0NfSEkxNl9TX0JBU0VSRUwKICAgICAgICAgICYmIChzZWctPmZsYWdzICYgMHgw MDIpICE9IDAKICAgICAgICAgICYmIHN0cmNtcCAoKChzZWcpLT5uYW1lICsgMCksICIuZ290MiIp ICE9IDAKICAgICAgICAgICYmIHN0cmNtcCAoKChzZWcpLT5uYW1lICsgMCksICIuZHRvcnMiKSAh PSAwCiAgICAgICAgICAmJiBzdHJjbXAgKCgoc2VnKS0+bmFtZSArIDApLCAiLmN0b3JzIikgIT0g MAogICAgICAgICAgJiYgc3RyY21wICgoKHNlZyktPm5hbWUgKyAwKSwgIi5maXh1cCIpICE9IDAK ICAgICAgICAgICYmIHN0cmNtcCAoKChzZWcpLT5uYW1lICsgMCksICIuZ2NjX2V4Y2VwdF90YWJs ZSIpICE9IDAKICAgICAgICAgICYmIHN0cmNtcCAoKChzZWcpLT5uYW1lICsgMCksICIuZWhfZnJh bWUiKSAhPSAwCiAgICAgICAgICAmJiBzdHJjbXAgKCgoc2VnKS0+bmFtZSArIDApLCAiLmV4X3No YXJlZCIpICE9IDApCiAgICAgICAgewogICAgICAgICAgaWYgKChzZWctPmZsYWdzICYgKDB4MDEw IHwgMHgwMjApKSAhPSAwCiAgICAgICAgICAgICAgfHwgZml4cC0+Znhfcl90eXBlICE9IEJGRF9S RUxPQ19DVE9SKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgYXNfYmFkX3doZXJlIChmaXhw LT5meF9maWxlLCBmaXhwLT5meF9saW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGNn ZXR0ZXh0ICgoKHZvaWQgKikwKSwgIlJlbG9jYXRpb24gY2Fubm90IGJlIGRvbmUgd2hlbiB1c2lu ZyAtbXJlbG9jYXRhYmxlIiwgNikpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1 cm47CiAgICB9Cn0KCgoKCnZvaWQKcHBjX2Zyb2JfZmlsZV9iZWZvcmVfYWRqdXN0ICgpCnsKICBz eW1ib2xTICpzeW1wOwoKICBpZiAoIXBwY19vYmo2NCkKICAgIHJldHVybjsKCiAgZm9yIChzeW1w ID0gc3ltYm9sX3Jvb3RQOyBzeW1wOyBzeW1wID0gc3ltYm9sX25leHQgKHN5bXApKQogICAgewog ICAgICBjb25zdCBjaGFyICpuYW1lOwogICAgICBjaGFyICpkb3RuYW1lOwogICAgICBzeW1ib2xT ICpkb3RzeW07CiAgICAgIHNpemVfdCBsZW47CgogICAgICBuYW1lID0gU19HRVRfTkFNRSAoc3lt cCk7CiAgICAgIGlmIChuYW1lWzBdID09ICcuJykKICAgICAgICBjb250aW51ZTsKCiAgICAgIGlm ICghIFNfSVNfV0VBSyAoc3ltcCkKICAgICAgICAgIHx8IFNfSVNfREVGSU5FRCAoc3ltcCkpCiAg ICAgICAgY29udGludWU7CgogICAgICBsZW4gPSBzdHJsZW4gKG5hbWUpICsgMTsKICAgICAgZG90 bmFtZSA9IHhtYWxsb2MgKGxlbiArIDEpOwogICAgICBkb3RuYW1lWzBdID0gJy4nOwogICAgICBt ZW1jcHkgKGRvdG5hbWUgKyAxLCBuYW1lLCBsZW4pOwogICAgICBkb3RzeW0gPSBzeW1ib2xfZmlu ZCAoZG90bmFtZSk7CiAgICAgIGZyZWUgKGRvdG5hbWUpOwogICAgICBpZiAoZG90c3ltICE9ICgo dm9pZCAqKTApICYmIChzeW1ib2xfdXNlZF9wIChkb3RzeW0pCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfHwgc3ltYm9sX3VzZWRfaW5fcmVsb2NfcCAoZG90c3ltKSkpCiAgICAgICAgewog ICAgICAgICAgc3ltYm9sX21hcmtfdXNlZCAoc3ltcCk7CiAgICAgICAgfQogICAgfQoKCiAgc3lt cCA9IHN5bWJvbF9maW5kICgiLlRPQy4iKTsKICBpZiAoc3ltcCAhPSAoKHZvaWQgKikwKSkKICAg IHN5bWJvbF9yZW1vdmUgKHN5bXAsICZzeW1ib2xfcm9vdFAsICZzeW1ib2xfbGFzdFApOwp9CiMg MTg0NCAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9jb25maWcvdGMtcHBjLmMiCnN0cnVjdCBwcGNf Zml4dXAKewogIGV4cHJlc3Npb25TIGV4cDsKICBpbnQgb3BpbmRleDsKICBiZmRfcmVsb2NfY29k ZV9yZWFsX3R5cGUgcmVsb2M7Cn07CgoKCgoKdm9pZAptZF9hc3NlbWJsZSAoc3RyKQogICAgIGNo YXIgKnN0cjsKewogIGNoYXIgKnM7CiAgY29uc3Qgc3RydWN0IHBvd2VycGNfb3Bjb2RlICpvcGNv ZGU7CiAgdW5zaWduZWQgbG9uZyBpbnNuOwogIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9waW5kZXhf cHRyOwogIGludCBza2lwX29wdGlvbmFsOwogIGludCBuZWVkX3BhcmVuOwogIGludCBuZXh0X29w aW5kZXg7CiAgc3RydWN0IHBwY19maXh1cCBmaXh1cHNbKDUpXTsKICBpbnQgZmM7CiAgY2hhciAq ZjsKICBpbnQgaTsKCiAgYmZkX3JlbG9jX2NvZGVfcmVhbF90eXBlIHJlbG9jOwoKCgogIGZvciAo cyA9IHN0cjsgKnMgIT0gJ1wwJyAmJiAhIChfc2NoX2lzdGFibGVbKCpzKSAmIDB4ZmZdICYgKHVu c2lnbmVkIHNob3J0KShfc2NoX2lzc3BhY2UpKTsgcysrKQogICAgOwogIGlmICgqcyAhPSAnXDAn KQogICAgKnMrKyA9ICdcMCc7CgoKICBvcGNvZGUgPSAoY29uc3Qgc3RydWN0IHBvd2VycGNfb3Bj b2RlICopIGhhc2hfZmluZCAocHBjX2hhc2gsIHN0cik7CiAgaWYgKG9wY29kZSA9PSAoY29uc3Qg c3RydWN0IHBvd2VycGNfb3Bjb2RlICopICgodm9pZCAqKTApKQogICAgewogICAgICBjb25zdCBz dHJ1Y3QgcG93ZXJwY19tYWNybyAqbWFjcm87CgogICAgICBtYWNybyA9IChjb25zdCBzdHJ1Y3Qg cG93ZXJwY19tYWNybyAqKSBoYXNoX2ZpbmQgKHBwY19tYWNyb19oYXNoLCBzdHIpOwogICAgICBp ZiAobWFjcm8gPT0gKGNvbnN0IHN0cnVjdCBwb3dlcnBjX21hY3JvICopICgodm9pZCAqKTApKQog ICAgICAgIGFzX2JhZCAoZGNnZXR0ZXh0ICgoKHZvaWQgKikwKSwgIlVucmVjb2duaXplZCBvcGNv ZGU6IGAlcyciLCA2KSwgc3RyKTsKICAgICAgZWxzZQogICAgICAgIHBwY19tYWNybyAocywgbWFj cm8pOwoKICAgICAgcmV0dXJuOwogICAgfQoKICBpbnNuID0gb3Bjb2RlLT5vcGNvZGU7CgogIHN0 ciA9IHM7CiAgd2hpbGUgKChfc2NoX2lzdGFibGVbKCpzdHIpICYgMHhmZl0gJiAodW5zaWduZWQg c2hvcnQpKF9zY2hfaXNzcGFjZSkpKQogICAgKytzdHI7CiMgMTkxMCAiL3NyYy9iaW51dGlscy0y LjEzL2dhcy9jb25maWcvdGMtcHBjLmMiCiAgc2tpcF9vcHRpb25hbCA9IDA7CiAgZm9yIChvcGlu ZGV4X3B0ciA9IG9wY29kZS0+b3BlcmFuZHM7ICpvcGluZGV4X3B0ciAhPSAwOyBvcGluZGV4X3B0 cisrKQogICAgewogICAgICBjb25zdCBzdHJ1Y3QgcG93ZXJwY19vcGVyYW5kICpvcGVyYW5kOwoK ICAgICAgb3BlcmFuZCA9ICZwb3dlcnBjX29wZXJhbmRzWypvcGluZGV4X3B0cl07CiAgICAgIGlm ICgob3BlcmFuZC0+ZmxhZ3MgJiAoMDEwMDApKSAhPSAwKQogICAgICAgIHsKICAgICAgICAgIHVu c2lnbmVkIGludCBvcGNvdW50OwoKCgogICAgICAgICAgaWYgKCpzdHIgPT0gJ1wwJykKICAgICAg ICAgICAgb3Bjb3VudCA9IDA7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBvcGNvdW50ID0gMTsKICAgICAgICAgICAgICBzID0gc3RyOwogICAgICAgICAgICAgIHdo aWxlICgocyA9IHN0cmNociAocywgJywnKSkgIT0gKGNoYXIgKikgKCh2b2lkICopMCkpCiAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrb3Bjb3VudDsKICAgICAgICAgICAgICAg ICAgKytzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgoKCgogICAgICAgICAgaWYg KG9wY291bnQgPCBzdHJsZW4gKG9wY29kZS0+b3BlcmFuZHMpKQogICAgICAgICAgICBza2lwX29w dGlvbmFsID0gMTsKCiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgoKICBuZWVkX3Bh cmVuID0gMDsKICBuZXh0X29waW5kZXggPSAwOwogIGZjID0gMDsKICBmb3IgKG9waW5kZXhfcHRy ID0gb3Bjb2RlLT5vcGVyYW5kczsgKm9waW5kZXhfcHRyICE9IDA7IG9waW5kZXhfcHRyKyspCiAg ICB7CiAgICAgIGNvbnN0IHN0cnVjdCBwb3dlcnBjX29wZXJhbmQgKm9wZXJhbmQ7CiAgICAgIGNv bnN0IGNoYXIgKmVycm1zZzsKICAgICAgY2hhciAqaG9sZDsKICAgICAgZXhwcmVzc2lvblMgZXg7 CiAgICAgIGNoYXIgZW5kYzsKCiAgICAgIGlmIChuZXh0X29waW5kZXggPT0gMCkKICAgICAgICBv cGVyYW5kID0gJnBvd2VycGNfb3BlcmFuZHNbKm9waW5kZXhfcHRyXTsKICAgICAgZWxzZQogICAg ICAgIHsKICAgICAgICAgIG9wZXJhbmQgPSAmcG93ZXJwY19vcGVyYW5kc1tuZXh0X29waW5kZXhd OwogICAgICAgICAgbmV4dF9vcGluZGV4ID0gMDsKICAgICAgICB9CgogICAgICBlcnJtc2cgPSAo KHZvaWQgKikwKTsKCgoKICAgICAgaWYgKChvcGVyYW5kLT5mbGFncyAmICgwNCkpICE9IDApCiAg ICAgICAgewogICAgICAgICAgaW5zbiA9ICgqb3BlcmFuZC0+aW5zZXJ0KSAoaW5zbiwgMEwsIHBw Y19jcHUsICZlcnJtc2cpOwogICAgICAgICAgaWYgKGVycm1zZyAhPSAoY29uc3QgY2hhciAqKSAo KHZvaWQgKikwKSkKICAgICAgICAgICAgYXNfYmFkIChlcnJtc2cpOwogICAgICAgICAgY29udGlu dWU7CiAgICAgICAgfQoKCgogICAgICBpZiAoKG9wZXJhbmQtPmZsYWdzICYgKDAxMDAwKSkgIT0g MAogICAgICAgICAgJiYgc2tpcF9vcHRpb25hbCkKICAgICAgICB7CiAgICAgICAgICBpZiAob3Bl cmFuZC0+aW5zZXJ0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5zbiA9ICgqb3BlcmFu ZC0+aW5zZXJ0KSAoaW5zbiwgMEwsIHBwY19jcHUsICZlcnJtc2cpOwogICAgICAgICAgICAgIGlm IChlcnJtc2cgIT0gKGNvbnN0IGNoYXIgKikgKCh2b2lkICopMCkpCiAgICAgICAgICAgICAgICBh c19iYWQgKGVycm1zZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICgob3BlcmFuZC0+Zmxh Z3MgJiAoMDIwMDApKSAhPSAwKQogICAgICAgICAgICBuZXh0X29waW5kZXggPSAqb3BpbmRleF9w dHIgKyAxOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKCiAgICAgIGhvbGQgPSBpbnB1 dF9saW5lX3BvaW50ZXI7CiAgICAgIGlucHV0X2xpbmVfcG9pbnRlciA9IHN0cjsKIyAyMTExICIv c3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2NvbmZpZy90Yy1wcGMuYyIKICAgICAgICB7CiAgICAgICAg ICBpZiAoISByZWdpc3Rlcl9uYW1lICgmZXgpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg aWYgKChvcGVyYW5kLT5mbGFncyAmICgwMjApKSAhPSAwKQogICAgICAgICAgICAgICAgY3Jfb3Bl cmFuZCA9IHRydWU7CiAgICAgICAgICAgICAgZXhwciAoMCwgJmV4KTsKICAgICAgICAgICAgICBj cl9vcGVyYW5kID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBzdHIgPSBp bnB1dF9saW5lX3BvaW50ZXI7CiAgICAgIGlucHV0X2xpbmVfcG9pbnRlciA9IGhvbGQ7CgogICAg ICBpZiAoZXguWF9vcCA9PSBPX2lsbGVnYWwpCiAgICAgICAgYXNfYmFkIChkY2dldHRleHQgKCgo dm9pZCAqKTApLCAiaWxsZWdhbCBvcGVyYW5kIiwgNikpOwogICAgICBlbHNlIGlmIChleC5YX29w ID09IE9fYWJzZW50KQogICAgICAgIGFzX2JhZCAoZGNnZXR0ZXh0ICgoKHZvaWQgKikwKSwgIm1p c3Npbmcgb3BlcmFuZCIsIDYpKTsKICAgICAgZWxzZSBpZiAoZXguWF9vcCA9PSBPX3JlZ2lzdGVy KQogICAgICAgIHsKICAgICAgICAgIGluc24gPSBwcGNfaW5zZXJ0X29wZXJhbmQgKGluc24sIG9w ZXJhbmQsIGV4LlhfYWRkX251bWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjaGFyICopICgodm9pZCAqKTApLCAwKTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKGV4 Llhfb3AgPT0gT19jb25zdGFudCkKICAgICAgICB7CgoKICAgICAgICAgIGNoYXIgKm9yaWdfc3Ry ID0gc3RyOwoKICAgICAgICAgIGlmICgocmVsb2MgPSBwcGNfZWxmX3N1ZmZpeCAoJnN0ciwgJmV4 KSkgIT0gQkZEX1JFTE9DX1VOVVNFRCkKICAgICAgICAgICAgc3dpdGNoIChyZWxvYykKICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHN0ciA9IG9y aWdfc3RyOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgIGNhc2UgQkZEX1JF TE9DX0xPMTY6CgoKCiAgICAgICAgICAgICAgICBpZiAoZXguWF91bnNpZ25lZCAmJiAhIChvcGVy YW5kLT5mbGFncyAmICgwMSkpKQogICAgICAgICAgICAgICAgICBleC5YX2FkZF9udW1iZXIgJj0g MHhmZmZmOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICBleC5YX2FkZF9u dW1iZXIgPSAoKCgoZXguWF9hZGRfbnVtYmVyKSAmIDB4ZmZmZikgXiAweDgwMDApIC0gMHg4MDAw KTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICBjYXNlIEJGRF9SRUxPQ19I STE2OgogICAgICAgICAgICAgICAgaWYgKGV4LlhfdW5zaWduZWQgJiYgISAob3BlcmFuZC0+Zmxh Z3MgJiAoMDEpKSkKICAgICAgICAgICAgICAgICAgZXguWF9hZGRfbnVtYmVyID0gKCgoZXguWF9h ZGRfbnVtYmVyKSA+PiAxNikgJiAweGZmZmYpOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgICBleC5YX2FkZF9udW1iZXIgPSAoKCgoKCgoZXguWF9hZGRfbnVtYmVyKSA+PiAx NikgJiAweGZmZmYpKSAmIDB4ZmZmZikgXiAweDgwMDApIC0gMHg4MDAwKTsKICAgICAgICAgICAg ICAgIGJyZWFrOwoKICAgICAgICAgICAgICBjYXNlIEJGRF9SRUxPQ19ISTE2X1M6CiAgICAgICAg ICAgICAgICBpZiAoZXguWF91bnNpZ25lZCAmJiAhIChvcGVyYW5kLT5mbGFncyAmICgwMSkpKQog ICAgICAgICAgICAgICAgICBleC5YX2FkZF9udW1iZXIgPSAoKCgoZXguWF9hZGRfbnVtYmVyKSAr IDB4ODAwMCkgPj4gMTYpICYgMHhmZmZmKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICAgICAgZXguWF9hZGRfbnVtYmVyID0gKCgoKCgoKChleC5YX2FkZF9udW1iZXIpICsgMHg4 MDAwKSA+PiAxNikgJiAweGZmZmYpKSAmIDB4ZmZmZikgXiAweDgwMDApIC0gMHg4MDAwKTsKICAg ICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICBjYXNlIEJGRF9SRUxPQ19QUEM2NF9I SUdIRVI6CiAgICAgICAgICAgICAgICBpZiAoZXguWF91bnNpZ25lZCAmJiAhIChvcGVyYW5kLT5m bGFncyAmICgwMSkpKQogICAgICAgICAgICAgICAgICBleC5YX2FkZF9udW1iZXIgPSAoKChleC5Y X2FkZF9udW1iZXIpID4+IDMyKSAmIDB4ZmZmZik7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgICAgIGV4LlhfYWRkX251bWJlciA9ICgoKCgoKChleC5YX2FkZF9udW1iZXIpID4+ IDMyKSAmIDB4ZmZmZikpICYgMHhmZmZmKSBeIDB4ODAwMCkgLSAweDgwMDApOwogICAgICAgICAg ICAgICAgYnJlYWs7CgogICAgICAgICAgICAgIGNhc2UgQkZEX1JFTE9DX1BQQzY0X0hJR0hFUl9T OgogICAgICAgICAgICAgICAgaWYgKGV4LlhfdW5zaWduZWQgJiYgISAob3BlcmFuZC0+ZmxhZ3Mg JiAoMDEpKSkKICAgICAgICAgICAgICAgICAgZXguWF9hZGRfbnVtYmVyID0gKCgoKGV4LlhfYWRk X251bWJlcikgKyAweDgwMDApID4+IDMyKSAmIDB4ZmZmZik7CiAgICAgICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICAgIGV4LlhfYWRkX251bWJlciA9ICgoKCgoKCgoZXguWF9hZGRfbnVt YmVyKSArIDB4ODAwMCkgPj4gMzIpICYgMHhmZmZmKSkgJiAweGZmZmYpIF4gMHg4MDAwKSAtIDB4 ODAwMCk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgY2FzZSBCRkRfUkVM T0NfUFBDNjRfSElHSEVTVDoKICAgICAgICAgICAgICAgIGlmIChleC5YX3Vuc2lnbmVkICYmICEg KG9wZXJhbmQtPmZsYWdzICYgKDAxKSkpCiAgICAgICAgICAgICAgICAgIGV4LlhfYWRkX251bWJl ciA9ICgoKGV4LlhfYWRkX251bWJlcikgPj4gNDgpICYgMHhmZmZmKTsKICAgICAgICAgICAgICAg IGVsc2UKICAgICAgICAgICAgICAgICAgZXguWF9hZGRfbnVtYmVyID0gKCgoKCgoKGV4LlhfYWRk X251bWJlcikgPj4gNDgpICYgMHhmZmZmKSkgJiAweGZmZmYpIF4gMHg4MDAwKSAtIDB4ODAwMCk7 CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgY2FzZSBCRkRfUkVMT0NfUFBD NjRfSElHSEVTVF9TOgogICAgICAgICAgICAgICAgaWYgKGV4LlhfdW5zaWduZWQgJiYgISAob3Bl cmFuZC0+ZmxhZ3MgJiAoMDEpKSkKICAgICAgICAgICAgICAgICAgZXguWF9hZGRfbnVtYmVyID0g KCgoKGV4LlhfYWRkX251bWJlcikgKyAweDgwMDApID4+IDQ4KSAmIDB4ZmZmZik7CiAgICAgICAg ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIGV4LlhfYWRkX251bWJlciA9ICgoKCgoKCgo ZXguWF9hZGRfbnVtYmVyKSArIDB4ODAwMCkgPj4gNDgpICYgMHhmZmZmKSkgJiAweGZmZmYpIF4g MHg4MDAwKSAtIDB4ODAwMCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9 CgogICAgICAgICAgaW5zbiA9IHBwY19pbnNlcnRfb3BlcmFuZCAoaW5zbiwgb3BlcmFuZCwgZXgu WF9hZGRfbnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIg KikgKCh2b2lkICopMCksIDApOwogICAgICAgIH0KCiAgICAgIGVsc2UgaWYgKChyZWxvYyA9IHBw Y19lbGZfc3VmZml4ICgmc3RyLCAmZXgpKSAhPSBCRkRfUkVMT0NfVU5VU0VEKQogICAgICAgIHsK CgogICAgICAgICAgaWYgKChvcGVyYW5kLT5mbGFncyAmICgwNDAwKSkgIT0gMCkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIHN3aXRjaCAocmVsb2MpCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICBjYXNlIEJGRF9SRUxPQ19QUENfQjI2OgogICAgICAgICAgICAgICAgICByZWxv YyA9IEJGRF9SRUxPQ19QUENfQkEyNjsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgICBjYXNlIEJGRF9SRUxPQ19QUENfQjE2OgogICAgICAgICAgICAgICAgICByZWxvYyA9 IEJGRF9SRUxPQ19QUENfQkExNjsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICBjYXNlIEJGRF9SRUxPQ19QUENfQjE2X0JSVEFLRU46CiAgICAgICAgICAgICAgICAgIHJl bG9jID0gQkZEX1JFTE9DX1BQQ19CQTE2X0JSVEFLRU47CiAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgY2FzZSBCRkRfUkVMT0NfUFBDX0IxNl9CUk5UQUtFTjoKICAgICAg ICAgICAgICAgICAgcmVsb2MgPSBCRkRfUkVMT0NfUFBDX0JBMTZfQlJOVEFLRU47CiAgICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAo cHBjX29iajY0CiAgICAgICAgICAgICAgJiYgKG9wZXJhbmQtPmZsYWdzICYgKDAyMDAwMCkpICE9 IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzd2l0Y2ggKHJlbG9jKQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgY2FzZSBCRkRfUkVMT0NfMTY6CiAgICAgICAgICAgICAg ICAgIHJlbG9jID0gQkZEX1JFTE9DX1BQQzY0X0FERFIxNl9EUzsKICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIEJGRF9SRUxPQ19MTzE2OgogICAgICAgICAgICAg ICAgICByZWxvYyA9IEJGRF9SRUxPQ19QUEM2NF9BRERSMTZfTE9fRFM7CiAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBCRkRfUkVMT0NfMTZfR09UT0ZGOgogICAg ICAgICAgICAgICAgICByZWxvYyA9IEJGRF9SRUxPQ19QUEM2NF9HT1QxNl9EUzsKICAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIEJGRF9SRUxPQ19MTzE2X0dPVE9G RjoKICAgICAgICAgICAgICAgICAgcmVsb2MgPSBCRkRfUkVMT0NfUFBDNjRfR09UMTZfTE9fRFM7 CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBCRkRfUkVMT0Nf TE8xNl9QTFRPRkY6CiAgICAgICAgICAgICAgICAgIHJlbG9jID0gQkZEX1JFTE9DX1BQQzY0X1BM VDE2X0xPX0RTOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug QkZEX1JFTE9DXzE2X0JBU0VSRUw6CiAgICAgICAgICAgICAgICAgIHJlbG9jID0gQkZEX1JFTE9D X1BQQzY0X1NFQ1RPRkZfRFM7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgY2FzZSBCRkRfUkVMT0NfTE8xNl9CQVNFUkVMOgogICAgICAgICAgICAgICAgICByZWxvYyA9 IEJGRF9SRUxPQ19QUEM2NF9TRUNUT0ZGX0xPX0RTOwogICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgIGNhc2UgQkZEX1JFTE9DX1BQQ19UT0MxNjoKICAgICAgICAgICAgICAg ICAgcmVsb2MgPSBCRkRfUkVMT0NfUFBDNjRfVE9DMTZfRFM7CiAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgY2FzZSBCRkRfUkVMT0NfUFBDNjRfVE9DMTZfTE86CiAgICAg ICAgICAgICAgICAgIHJlbG9jID0gQkZEX1JFTE9DX1BQQzY0X1RPQzE2X0xPX0RTOwogICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgQkZEX1JFTE9DX1BQQzY0X1BM VEdPVDE2OgogICAgICAgICAgICAgICAgICByZWxvYyA9IEJGRF9SRUxPQ19QUEM2NF9QTFRHT1Qx Nl9EUzsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIEJGRF9S RUxPQ19QUEM2NF9QTFRHT1QxNl9MTzoKICAgICAgICAgICAgICAgICAgcmVsb2MgPSBCRkRfUkVM T0NfUFBDNjRfUExUR09UMTZfTE9fRFM7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgYXNfYmFkIChkY2dldHRleHQgKCgo dm9pZCAqKTApLCAidW5zdXBwb3J0ZWQgcmVsb2NhdGlvbiBmb3IgRFMgb2Zmc2V0IGZpZWxkIiwg NikpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgfQoKCiAgICAgICAgICBpZiAoZmMgPj0gKDUpKQogICAgICAgICAgICBhc19mYXRhbCAoZGNn ZXR0ZXh0ICgoKHZvaWQgKikwKSwgInRvbyBtYW55IGZpeHVwcyIsIDYpKTsKICAgICAgICAgIGZp eHVwc1tmY10uZXhwID0gZXg7CiAgICAgICAgICBmaXh1cHNbZmNdLm9waW5kZXggPSAwOwogICAg ICAgICAgZml4dXBzW2ZjXS5yZWxvYyA9IHJlbG9jOwogICAgICAgICAgKytmYzsKICAgICAgICB9 CgoKICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBpZiAoZmMgPj0gKDUpKQogICAgICAg ICAgICBhc19mYXRhbCAoZGNnZXR0ZXh0ICgoKHZvaWQgKikwKSwgInRvbyBtYW55IGZpeHVwcyIs IDYpKTsKICAgICAgICAgIGZpeHVwc1tmY10uZXhwID0gZXg7CiAgICAgICAgICBmaXh1cHNbZmNd Lm9waW5kZXggPSAqb3BpbmRleF9wdHI7CiAgICAgICAgICBmaXh1cHNbZmNdLnJlbG9jID0gQkZE X1JFTE9DX1VOVVNFRDsKICAgICAgICAgICsrZmM7CiAgICAgICAgfQoKICAgICAgaWYgKG5lZWRf cGFyZW4pCiAgICAgICAgewogICAgICAgICAgZW5kYyA9ICcpJzsKICAgICAgICAgIG5lZWRfcGFy ZW4gPSAwOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoKG9wZXJhbmQtPmZsYWdzICYgKDAxMCkp ICE9IDApCiAgICAgICAgewogICAgICAgICAgZW5kYyA9ICcoJzsKICAgICAgICAgIG5lZWRfcGFy ZW4gPSAxOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIGVuZGMgPSAnLCc7CgoKCiAgICAg IGlmICgqc3RyICE9IGVuZGMKICAgICAgICAgICYmIChlbmRjICE9ICcsJyB8fCAqc3RyICE9ICdc MCcpKQogICAgICAgIHsKICAgICAgICAgIGFzX2JhZCAoZGNnZXR0ZXh0ICgoKHZvaWQgKikwKSwg InN5bnRheCBlcnJvcjsgZm91bmQgYCVjJyBidXQgZXhwZWN0ZWQgYCVjJyIsIDYpLCAqc3RyLCBl bmRjKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgIGlmICgqc3RyICE9ICdcMCcp CiAgICAgICAgKytzdHI7CiAgICB9CgogIHdoaWxlICgoX3NjaF9pc3RhYmxlWygqc3RyKSAmIDB4 ZmZdICYgKHVuc2lnbmVkIHNob3J0KShfc2NoX2lzc3BhY2UpKSkKICAgICsrc3RyOwoKICBpZiAo KnN0ciAhPSAnXDAnKQogICAgYXNfYmFkIChkY2dldHRleHQgKCgodm9pZCAqKTApLCAianVuayBh dCBlbmQgb2YgbGluZTogYCVzJyIsIDYpLCBzdHIpOwoKCiAgZiA9IGZyYWdfbW9yZSAoNCk7CiAg bWRfbnVtYmVyX3RvX2NoYXJzIChmLCBpbnNuLCA0KTsKCgogIGR3YXJmMl9lbWl0X2luc24gKDQp OwojIDIzMzkgIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvY29uZmlnL3RjLXBwYy5jIgogIGZvciAo aSA9IDA7IGkgPCBmYzsgaSsrKQogICAgewogICAgICBjb25zdCBzdHJ1Y3QgcG93ZXJwY19vcGVy YW5kICpvcGVyYW5kOwoKICAgICAgb3BlcmFuZCA9ICZwb3dlcnBjX29wZXJhbmRzW2ZpeHVwc1tp XS5vcGluZGV4XTsKICAgICAgaWYgKGZpeHVwc1tpXS5yZWxvYyAhPSBCRkRfUkVMT0NfVU5VU0VE KQogICAgICAgIHsKICAgICAgICAgIHJlbG9jX2hvd3RvX3R5cGUgKnJlbG9jX2hvd3RvOwogICAg ICAgICAgaW50IHNpemU7CiAgICAgICAgICBpbnQgb2Zmc2V0OwogICAgICAgICAgZml4UyAqZml4 UDsKCiAgICAgICAgICByZWxvY19ob3d0byA9IGJmZF9yZWxvY190eXBlX2xvb2t1cCAoc3Rkb3V0 cHV0LCBmaXh1cHNbaV0ucmVsb2MpOwogICAgICAgICAgaWYgKCFyZWxvY19ob3d0bykKICAgICAg ICAgICAgYXNfYWJvcnQgKCIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2NvbmZpZy90Yy1wcGMuYyIs IDIzNTMsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOwoKICAgICAgICAgIHNpemUgPSBiZmRfZ2V0X3Jl bG9jX3NpemUgKHJlbG9jX2hvd3RvKTsKICAgICAgICAgIG9mZnNldCA9IHRhcmdldF9iaWdfZW5k aWFuID8gKDQgLSBzaXplKSA6IDA7CgogICAgICAgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiA0 KQogICAgICAgICAgICBhc19hYm9ydCAoIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvY29uZmlnL3Rj LXBwYy5jIiwgMjM1OSwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CgogICAgICAgICAgZml4UCA9IGZp eF9uZXdfZXhwIChmcmFnX25vdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiAtIGZy YWdfbm93LT5mcl9saXRlcmFsICsgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZml4dXBzW2ldLmV4cCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsb2NfaG93dG8tPnBjX3JlbGF0aXZlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmaXh1cHNbaV0ucmVsb2MpOwoKCgogICAgICAgICAg c3dpdGNoIChmaXh1cHNbaV0ucmVsb2MpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgY2FzZSBC RkRfUkVMT0NfMTZfR09UT0ZGOgogICAgICAgICAgICBjYXNlIEJGRF9SRUxPQ19QUENfVE9DMTY6 CiAgICAgICAgICAgIGNhc2UgQkZEX1JFTE9DX0xPMTY6CiAgICAgICAgICAgIGNhc2UgQkZEX1JF TE9DX0hJMTY6CiAgICAgICAgICAgIGNhc2UgQkZEX1JFTE9DX0hJMTZfUzoKCiAgICAgICAgICAg IGNhc2UgQkZEX1JFTE9DX1BQQzY0X0hJR0hFUjoKICAgICAgICAgICAgY2FzZSBCRkRfUkVMT0Nf UFBDNjRfSElHSEVSX1M6CiAgICAgICAgICAgIGNhc2UgQkZEX1JFTE9DX1BQQzY0X0hJR0hFU1Q6 CiAgICAgICAgICAgIGNhc2UgQkZEX1JFTE9DX1BQQzY0X0hJR0hFU1RfUzoKCiAgICAgICAgICAg ICAgZml4UC0+Znhfbm9fb3ZlcmZsb3cgPSAxOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICBlbHNlCiAgICAgICAgZml4X25ld19leHAgKGZyYWdfbm93LAogICAgICAgICAgICAg ICAgICAgICBmIC0gZnJhZ19ub3ctPmZyX2xpdGVyYWwsCiAgICAgICAgICAgICAgICAgICAgIDQs CiAgICAgICAgICAgICAgICAgICAgICZmaXh1cHNbaV0uZXhwLAogICAgICAgICAgICAgICAgICAg ICAob3BlcmFuZC0+ZmxhZ3MgJiAoMDIwMCkpICE9IDAsCiAgICAgICAgICAgICAgICAgICAgICgo YmZkX3JlbG9jX2NvZGVfcmVhbF90eXBlKQogICAgICAgICAgICAgICAgICAgICAgKGZpeHVwc1tp XS5vcGluZGV4ICsgKGludCkgQkZEX1JFTE9DX1VOVVNFRCkpKTsKICAgIH0KfQoKCgoKCgpzdGF0 aWMgdm9pZApwcGNfbWFjcm8gKHN0ciwgbWFjcm8pCiAgICAgY2hhciAqc3RyOwogICAgIGNvbnN0 IHN0cnVjdCBwb3dlcnBjX21hY3JvICptYWNybzsKewogIGNoYXIgKm9wZXJhbmRzWzEwXTsKICB1 bnNpZ25lZCBpbnQgY291bnQ7CiAgY2hhciAqczsKICB1bnNpZ25lZCBpbnQgbGVuOwogIGNvbnN0 IGNoYXIgKmZvcm1hdDsKICBpbnQgYXJnOwogIGNoYXIgKnNlbmQ7CiAgY2hhciAqY29tcGxldGU7 CgoKICBjb3VudCA9IDA7CiAgcyA9IHN0cjsKICB3aGlsZSAoMSkKICAgIHsKICAgICAgaWYgKGNv dW50ID49IHNpemVvZiBvcGVyYW5kcyAvIHNpemVvZiBvcGVyYW5kc1swXSkKICAgICAgICBicmVh azsKICAgICAgb3BlcmFuZHNbY291bnQrK10gPSBzOwogICAgICBzID0gc3RyY2hyIChzLCAnLCcp OwogICAgICBpZiAocyA9PSAoY2hhciAqKSAoKHZvaWQgKikwKSkKICAgICAgICBicmVhazsKICAg ICAgKnMrKyA9ICdcMCc7CiAgICB9CgogIGlmIChjb3VudCAhPSBtYWNyby0+b3BlcmFuZHMpCiAg ICB7CiAgICAgIGFzX2JhZCAoZGNnZXR0ZXh0ICgoKHZvaWQgKikwKSwgIndyb25nIG51bWJlciBv ZiBvcGVyYW5kcyIsIDYpKTsKICAgICAgcmV0dXJuOwogICAgfQoKCgogIGxlbiA9IDA7CiAgZm9y bWF0ID0gbWFjcm8tPmZvcm1hdDsKICB3aGlsZSAoKmZvcm1hdCAhPSAnXDAnKQogICAgewogICAg ICBpZiAoKmZvcm1hdCAhPSAnJScpCiAgICAgICAgewogICAgICAgICAgKytsZW47CiAgICAgICAg ICArK2Zvcm1hdDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBhcmcg PSBzdHJ0b2wgKGZvcm1hdCArIDEsICZzZW5kLCAxMCk7CiAgICAgICAgICA7CiAgICAgICAgICBs ZW4gKz0gc3RybGVuIChvcGVyYW5kc1thcmddKTsKICAgICAgICAgIGZvcm1hdCA9IHNlbmQ7CiAg ICAgICAgfQogICAgfQoKCiAgY29tcGxldGUgPSBzID0gKGNoYXIgKikgX19idWlsdGluX2FsbG9j YShsZW4gKyAxKTsKICBmb3JtYXQgPSBtYWNyby0+Zm9ybWF0OwogIHdoaWxlICgqZm9ybWF0ICE9 ICdcMCcpCiAgICB7CiAgICAgIGlmICgqZm9ybWF0ICE9ICclJykKICAgICAgICAqcysrID0gKmZv cm1hdCsrOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgYXJnID0gc3RydG9sIChmb3Jt YXQgKyAxLCAmc2VuZCwgMTApOwogICAgICAgICAgc3RyY3B5IChzLCBvcGVyYW5kc1thcmddKTsK ICAgICAgICAgIHMgKz0gc3RybGVuIChzKTsKICAgICAgICAgIGZvcm1hdCA9IHNlbmQ7CiAgICAg ICAgfQogICAgfQogICpzID0gJ1wwJzsKCgogIG1kX2Fzc2VtYmxlIChjb21wbGV0ZSk7Cn0KCgoK CmludApwcGNfc2VjdGlvbl9sZXR0ZXIgKGxldHRlciwgcHRyX21zZykKICAgICBpbnQgbGV0dGVy OwogICAgIGNoYXIgKipwdHJfbXNnOwp7CiAgaWYgKGxldHRlciA9PSAnZScpCiAgICByZXR1cm4g MHg4MDAwMDAwMDsKCiAgKnB0cl9tc2cgPSBkY2dldHRleHQgKCgodm9pZCAqKTApLCAiQmFkIC5z ZWN0aW9uIGRpcmVjdGl2ZTogd2FudCBhLGUsdyx4LE0sUyxHLFQgaW4gc3RyaW5nIiwgNik7CiAg cmV0dXJuIDA7Cn0KCmludApwcGNfc2VjdGlvbl93b3JkIChzdHIsIGxlbikKICAgICBjaGFyICpz dHI7CiAgICAgc2l6ZV90IGxlbjsKewogIGlmIChsZW4gPT0gNyAmJiBzdHJuY21wIChzdHIsICJl eGNsdWRlIiwgNykgPT0gMCkKICAgIHJldHVybiAweDgwMDAwMDAwOwoKICByZXR1cm4gLTE7Cn0K CmludApwcGNfc2VjdGlvbl90eXBlIChzdHIsIGxlbikKICAgICBjaGFyICpzdHI7CiAgICAgc2l6 ZV90IGxlbjsKewogIGlmIChsZW4gPT0gNyAmJiBzdHJuY21wIChzdHIsICJvcmRlcmVkIiwgNykg PT0gMCkKICAgIHJldHVybiAweDdGRkZGRkZGOwoKICByZXR1cm4gLTE7Cn0KCmludApwcGNfc2Vj dGlvbl9mbGFncyAoZmxhZ3MsIGF0dHIsIHR5cGUpCiAgICAgaW50IGZsYWdzOwogICAgIGludCBh dHRyOwogICAgIGludCB0eXBlOwp7CiAgaWYgKHR5cGUgPT0gMHg3RkZGRkZGRikKICAgIGZsYWdz IHw9IDB4MDAxIHwgMHgwMDIgfCAweDgwMDAwOwoKICBpZiAoYXR0ciAmIDB4ODAwMDAwMDApCiAg ICBmbGFncyB8PSAweDQwMDAwOwoKICByZXR1cm4gZmxhZ3M7Cn0KIyAyNTM5ICIvc3JjL2JpbnV0 aWxzLTIuMTMvZ2FzL2NvbmZpZy90Yy1wcGMuYyIKc3RhdGljIHZvaWQKcHBjX2J5dGUgKGlnbm9y ZSkKICAgICBpbnQgaWdub3JlIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CnsKICBpZiAo KmlucHV0X2xpbmVfcG9pbnRlciAhPSAnXCInKQogICAgewogICAgICBjb25zICgxKTsKICAgICAg cmV0dXJuOwogICAgfQoKCgogICsraW5wdXRfbGluZV9wb2ludGVyOwogIHdoaWxlICgxKQogICAg ewogICAgICBjaGFyIGM7CgogICAgICBjID0gKmlucHV0X2xpbmVfcG9pbnRlcisrOwoKICAgICAg aWYgKGMgPT0gJ1wiJykKICAgICAgICB7CiAgICAgICAgICBpZiAoKmlucHV0X2xpbmVfcG9pbnRl ciAhPSAnXCInKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgICsraW5wdXRfbGluZV9wb2lu dGVyOwogICAgICAgIH0KCiAgICAgIGZyYWdfYXBwZW5kXzFfY2hhciAoYyk7CiAgICB9CgogIGRl bWFuZF9lbXB0eV9yZXN0X29mX2xpbmUgKCk7Cn0KIyAzNTk1ICIvc3JjL2JpbnV0aWxzLTIuMTMv Z2FzL2NvbmZpZy90Yy1wcGMuYyIKc3RhdGljIHZvaWQKcHBjX3RjIChpZ25vcmUpCiAgICAgaW50 IGlnbm9yZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwp7CiMgMzY1NSAiL3NyYy9iaW51 dGlscy0yLjEzL2dhcy9jb25maWcvdGMtcHBjLmMiCiAgaW50IGFsaWduOwoKCiAgd2hpbGUgKCgg bGV4X3R5cGVbKHVuc2lnbmVkIGNoYXIpICgqaW5wdXRfbGluZV9wb2ludGVyKV0gJiAoMSkgKQog ICAgICAgICB8fCAqaW5wdXRfbGluZV9wb2ludGVyID09ICdbJwogICAgICAgICB8fCAqaW5wdXRf bGluZV9wb2ludGVyID09ICddJwogICAgICAgICB8fCAqaW5wdXRfbGluZV9wb2ludGVyID09ICd7 JwogICAgICAgICB8fCAqaW5wdXRfbGluZV9wb2ludGVyID09ICd9JykKICAgICsraW5wdXRfbGlu ZV9wb2ludGVyOwoKCiAgYWxpZ24gPSBwcGNfb2JqNjQgPyAzIDogMjsKICBmcmFnX2FsaWduIChh bGlnbiwgMCwgMCk7CiAgcmVjb3JkX2FsaWdubWVudCAobm93X3NlZywgYWxpZ24pOwoKCiAgaWYg KCppbnB1dF9saW5lX3BvaW50ZXIgIT0gJywnKQogICAgZGVtYW5kX2VtcHR5X3Jlc3Rfb2ZfbGlu ZSAoKTsKICBlbHNlCiAgICB7CiAgICAgICsraW5wdXRfbGluZV9wb2ludGVyOwogICAgICBjb25z IChwcGNfb2JqNjQgPyA4IDogNCk7CiAgICB9Cn0KIyAzNjg4ICIvc3JjL2JpbnV0aWxzLTIuMTMv Z2FzL2NvbmZpZy90Yy1wcGMuYyIKc3RhdGljIHZvaWQKcHBjX21hY2hpbmUgKGlnbm9yZSkKICAg ICBpbnQgaWdub3JlIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CnsKICBkaXNjYXJkX3Jl c3Rfb2ZfbGluZSAoKTsKfQoKCgpzdGF0aWMgaW50CnBwY19pc190b2Nfc3ltIChzeW0pCiAgICAg c3ltYm9sUyAqc3ltOwp7CgoKCgogIGNvbnN0IGNoYXIgKnNuYW1lID0gKChTX0dFVF9TRUdNRU5U IChzeW0pKS0+bmFtZSArIDApOwogIGlmIChwcGNfb2JqNjQpCiAgICByZXR1cm4gc3RyY21wIChz bmFtZSwgIi50b2MiKSA9PSAwOwogIGVsc2UKICAgIHJldHVybiBzdHJjbXAgKHNuYW1lLCAiLmdv dCIpID09IDA7Cgp9CiMgNDc5NiAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9jb25maWcvdGMtcHBj LmMiCmNoYXIgKgptZF9hdG9mICh0eXBlLCBsaXRwLCBzaXplcCkKICAgICBpbnQgdHlwZTsKICAg ICBjaGFyICpsaXRwOwogICAgIGludCAqc2l6ZXA7CnsKICBpbnQgcHJlYzsKICBMSVRUTEVOVU1f VFlQRSB3b3Jkc1s0XTsKICBjaGFyICp0OwogIGludCBpOwoKICBzd2l0Y2ggKHR5cGUpCiAgICB7 CiAgICBjYXNlICdmJzoKICAgICAgcHJlYyA9IDI7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgJ2Qn OgogICAgICBwcmVjID0gNDsKICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgKnNpemVw ID0gMDsKICAgICAgcmV0dXJuIGRjZ2V0dGV4dCAoKCh2b2lkICopMCksICJiYWQgY2FsbCB0byBt ZF9hdG9mIiwgNik7CiAgICB9CgogIHQgPSBhdG9mX2llZWUgKGlucHV0X2xpbmVfcG9pbnRlciwg dHlwZSwgd29yZHMpOwogIGlmICh0KQogICAgaW5wdXRfbGluZV9wb2ludGVyID0gdDsKCiAgKnNp emVwID0gcHJlYyAqIDI7CgogIGlmICh0YXJnZXRfYmlnX2VuZGlhbikKICAgIHsKICAgICAgZm9y IChpID0gMDsgaSA8IHByZWM7IGkrKykKICAgICAgICB7CiAgICAgICAgICBtZF9udW1iZXJfdG9f Y2hhcnMgKGxpdHAsICh2YWx1ZVQpIHdvcmRzW2ldLCAyKTsKICAgICAgICAgIGxpdHAgKz0gMjsK ICAgICAgICB9CiAgICB9CiAgZWxzZQogICAgewogICAgICBmb3IgKGkgPSBwcmVjIC0gMTsgaSA+ PSAwOyBpLS0pCiAgICAgICAgewogICAgICAgICAgbWRfbnVtYmVyX3RvX2NoYXJzIChsaXRwLCAo dmFsdWVUKSB3b3Jkc1tpXSwgMik7CiAgICAgICAgICBsaXRwICs9IDI7CiAgICAgICAgfQogICAg fQoKICByZXR1cm4gKCh2b2lkICopMCk7Cn0KCgoKCnZvaWQKbWRfbnVtYmVyX3RvX2NoYXJzIChi dWYsIHZhbCwgbikKICAgICBjaGFyICpidWY7CiAgICAgdmFsdWVUIHZhbDsKICAgICBpbnQgbjsK ewogIGlmICh0YXJnZXRfYmlnX2VuZGlhbikKICAgIG51bWJlcl90b19jaGFyc19iaWdlbmRpYW4g KGJ1ZiwgdmFsLCBuKTsKICBlbHNlCiAgICBudW1iZXJfdG9fY2hhcnNfbGl0dGxlZW5kaWFuIChi dWYsIHZhbCwgbik7Cn0KCgoKdmFsdWVUCm1kX3NlY3Rpb25fYWxpZ24gKHNlZywgYWRkcikKICAg ICBhc2VjdGlvbiAqc2VnOwogICAgIHZhbHVlVCBhZGRyOwp7CiAgaW50IGFsaWduID0gKChzZWcp LT5hbGlnbm1lbnRfcG93ZXIgKyAwKTsKCiAgcmV0dXJuICgoYWRkciArICgxIDw8IGFsaWduKSAt IDEpICYgKC0xIDw8IGFsaWduKSk7Cn0KCgoKaW50Cm1kX2VzdGltYXRlX3NpemVfYmVmb3JlX3Jl bGF4IChmcmFncCwgc2VnKQogICAgIGZyYWdTICpmcmFncCBfX2F0dHJpYnV0ZV9fICgoX191bnVz ZWRfXykpOwogICAgIGFzZWN0aW9uICpzZWcgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsK ewogIGFzX2Fib3J0ICgiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9jb25maWcvdGMtcHBjLmMiLCA0 ODgyLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKICByZXR1cm4gMDsKfQoKCgp2b2lkCm1kX2NvbnZl cnRfZnJhZyAoYWJmZCwgc2VjLCBmcmFncCkKICAgICBiZmQgKmFiZmQgX19hdHRyaWJ1dGVfXyAo KF9fdW51c2VkX18pKTsKICAgICBhc2VjdGlvbiAqc2VjIF9fYXR0cmlidXRlX18gKChfX3VudXNl ZF9fKSk7CiAgICAgZnJhZ1MgKmZyYWdwIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CnsK ICBhc19hYm9ydCAoIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvY29uZmlnL3RjLXBwYy5jIiwgNDg5 NCwgX19QUkVUVFlfRlVOQ1RJT05fXyk7Cn0KCgoKc3ltYm9sUyAqCm1kX3VuZGVmaW5lZF9zeW1i b2wgKG5hbWUpCiAgICAgY2hhciAqbmFtZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwp7 CiAgcmV0dXJuIDA7Cn0KCgoKCgoKbG9uZwptZF9wY3JlbF9mcm9tX3NlY3Rpb24gKGZpeHAsIHNl YykKICAgICBmaXhTICpmaXhwOwogICAgIHNlZ1Qgc2VjIF9fYXR0cmlidXRlX18gKChfX3VudXNl ZF9fKSk7CnsKICByZXR1cm4gZml4cC0+ZnhfZnJhZy0+ZnJfYWRkcmVzcyArIGZpeHAtPmZ4X3do ZXJlOwp9CiMgNTA3NCAiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9jb25maWcvdGMtcHBjLmMiCmlu dApwcGNfZml4X2FkanVzdGFibGUgKGZpeCkKICAgICBmaXhTICpmaXg7CnsKICByZXR1cm4gKGZp eC0+Znhfcl90eXBlICE9IEJGRF9SRUxPQ18xNl9HT1RPRkYKICAgICAgICAgICYmIGZpeC0+Znhf cl90eXBlICE9IEJGRF9SRUxPQ19MTzE2X0dPVE9GRgogICAgICAgICAgJiYgZml4LT5meF9yX3R5 cGUgIT0gQkZEX1JFTE9DX0hJMTZfR09UT0ZGCiAgICAgICAgICAmJiBmaXgtPmZ4X3JfdHlwZSAh PSBCRkRfUkVMT0NfSEkxNl9TX0dPVE9GRgogICAgICAgICAgJiYgZml4LT5meF9yX3R5cGUgIT0g QkZEX1JFTE9DX0dQUkVMMTYKICAgICAgICAgICYmIGZpeC0+Znhfcl90eXBlICE9IEJGRF9SRUxP Q19WVEFCTEVfSU5IRVJJVAogICAgICAgICAgJiYgZml4LT5meF9yX3R5cGUgIT0gQkZEX1JFTE9D X1ZUQUJMRV9FTlRSWQogICAgICAgICAgJiYgISBTX0lTX0VYVEVSTkFMIChmaXgtPmZ4X2FkZHN5 KQogICAgICAgICAgJiYgISBTX0lTX1dFQUsgKGZpeC0+ZnhfYWRkc3kpCiAgICAgICAgICAmJiAo Zml4LT5meF9wY3JlbAogICAgICAgICAgICAgIHx8IChmaXgtPmZ4X3N1YnN5ICE9ICgodm9pZCAq KTApCiAgICAgICAgICAgICAgICAgICYmIChTX0dFVF9TRUdNRU5UIChmaXgtPmZ4X3N1YnN5KQog ICAgICAgICAgICAgICAgICAgICAgPT0gU19HRVRfU0VHTUVOVCAoZml4LT5meF9hZGRzeSkpKQog ICAgICAgICAgICAgIHx8IFNfSVNfTE9DQUwgKGZpeC0+ZnhfYWRkc3kpKSk7Cn0KIyA1MTA0ICIv c3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2NvbmZpZy90Yy1wcGMuYyIKdm9pZAptZF9hcHBseV9maXgz IChmaXhQLCB2YWxQLCBzZWcpCiAgICAgZml4UyAqZml4UDsKICAgICB2YWx1ZVQgKiB2YWxQOwog ICAgIHNlZ1Qgc2VnIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CnsKICB2YWx1ZVQgdmFs dWUgPSAqIHZhbFA7CgoKICBpZiAoZml4UC0+ZnhfYWRkc3kgIT0gKCh2b2lkICopMCkpCiAgICB7 CgoKICAgICAgaWYgKHN5bWJvbF91c2VkX2luX3JlbG9jX3AgKGZpeFAtPmZ4X2FkZHN5KQogICAg ICAgICAgJiYgU19HRVRfU0VHTUVOVCAoZml4UC0+ZnhfYWRkc3kpICE9ICgoYXNlY3Rpb24gKikg JmJmZF9hYnNfc2VjdGlvbikKICAgICAgICAgICYmIFNfR0VUX1NFR01FTlQgKGZpeFAtPmZ4X2Fk ZHN5KSAhPSAoKGFzZWN0aW9uICopICZiZmRfdW5kX3NlY3Rpb24pCiAgICAgICAgICAmJiAhICgo KFNfR0VUX1NFR01FTlQgKGZpeFAtPmZ4X2FkZHN5KSktPmZsYWdzICYgMHg4MDAwKSAhPSAwKSkK ICAgICAgICB2YWx1ZSAtPSBTX0dFVF9WQUxVRSAoZml4UC0+ZnhfYWRkc3kpOwoKCgoKICAgICAg aWYgKGZpeFAtPmZ4X3BjcmVsKQogICAgICAgIHZhbHVlICs9IGZpeFAtPmZ4X2ZyYWctPmZyX2Fk ZHJlc3MgKyBmaXhQLT5meF93aGVyZTsKICAgIH0KICBlbHNlCiAgICBmaXhQLT5meF9kb25lID0g MTsKIyA1MTY1ICIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2NvbmZpZy90Yy1wcGMuYyIKICBpZiAo KGludCkgZml4UC0+Znhfcl90eXBlID49IChpbnQpIEJGRF9SRUxPQ19VTlVTRUQpCiAgICB7CiAg ICAgIGludCBvcGluZGV4OwogICAgICBjb25zdCBzdHJ1Y3QgcG93ZXJwY19vcGVyYW5kICpvcGVy YW5kOwogICAgICBjaGFyICp3aGVyZTsKICAgICAgdW5zaWduZWQgbG9uZyBpbnNuOwoKICAgICAg b3BpbmRleCA9IChpbnQpIGZpeFAtPmZ4X3JfdHlwZSAtIChpbnQpIEJGRF9SRUxPQ19VTlVTRUQ7 CgogICAgICBvcGVyYW5kID0gJnBvd2VycGNfb3BlcmFuZHNbb3BpbmRleF07CiMgNTE5OCAiL3Ny Yy9iaW51dGlscy0yLjEzL2dhcy9jb25maWcvdGMtcHBjLmMiCiAgICAgIHdoZXJlID0gZml4UC0+ ZnhfZnJhZy0+ZnJfbGl0ZXJhbCArIGZpeFAtPmZ4X3doZXJlOwogICAgICBpZiAodGFyZ2V0X2Jp Z19lbmRpYW4pCiAgICAgICAgaW5zbiA9IGJmZF9nZXRiMzIgKCh1bnNpZ25lZCBjaGFyICopIHdo ZXJlKTsKICAgICAgZWxzZQogICAgICAgIGluc24gPSBiZmRfZ2V0bDMyICgodW5zaWduZWQgY2hh ciAqKSB3aGVyZSk7CiAgICAgIGluc24gPSBwcGNfaW5zZXJ0X29wZXJhbmQgKGluc24sIG9wZXJh bmQsIChvZmZzZXRUKSB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4 UC0+ZnhfZmlsZSwgZml4UC0+ZnhfbGluZSk7CiAgICAgIGlmICh0YXJnZXRfYmlnX2VuZGlhbikK ICAgICAgICBiZmRfcHV0YjMyICgoYmZkX3ZtYSkgaW5zbiwgKHVuc2lnbmVkIGNoYXIgKikgd2hl cmUpOwogICAgICBlbHNlCiAgICAgICAgYmZkX3B1dGwzMiAoKGJmZF92bWEpIGluc24sICh1bnNp Z25lZCBjaGFyICopIHdoZXJlKTsKCiAgICAgIGlmIChmaXhQLT5meF9kb25lKQoKICAgICAgICBy ZXR1cm47CgogICAgICAoKGZpeFAtPmZ4X2FkZHN5ICE9ICgodm9pZCAqKTApKSA/IDAgOiAoYXNf YXNzZXJ0ICgiL3NyYy9iaW51dGlscy0yLjEzL2dhcy9jb25maWcvdGMtcHBjLmMiLCA1MjE0LCBf X1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpOwoKCgoKICAgICAgaWYgKChvcGVyYW5kLT5mbGFncyAm ICgwMjAwKSkgIT0gMAogICAgICAgICAgJiYgb3BlcmFuZC0+Yml0cyA9PSAyNgogICAgICAgICAg JiYgb3BlcmFuZC0+c2hpZnQgPT0gMCkKICAgICAgICBmaXhQLT5meF9yX3R5cGUgPSBCRkRfUkVM T0NfUFBDX0IyNjsKICAgICAgZWxzZSBpZiAoKG9wZXJhbmQtPmZsYWdzICYgKDAyMDApKSAhPSAw CiAgICAgICAgICAmJiBvcGVyYW5kLT5iaXRzID09IDE2CiAgICAgICAgICAmJiBvcGVyYW5kLT5z aGlmdCA9PSAwKQogICAgICAgIGZpeFAtPmZ4X3JfdHlwZSA9IEJGRF9SRUxPQ19QUENfQjE2Owog ICAgICBlbHNlIGlmICgob3BlcmFuZC0+ZmxhZ3MgJiAoMDQwMCkpICE9IDAKICAgICAgICAgICAg ICAgJiYgb3BlcmFuZC0+Yml0cyA9PSAyNgogICAgICAgICAgICAgICAmJiBvcGVyYW5kLT5zaGlm dCA9PSAwKQogICAgICAgIGZpeFAtPmZ4X3JfdHlwZSA9IEJGRF9SRUxPQ19QUENfQkEyNjsKICAg ICAgZWxzZSBpZiAoKG9wZXJhbmQtPmZsYWdzICYgKDA0MDApKSAhPSAwCiAgICAgICAgICAgICAg ICYmIG9wZXJhbmQtPmJpdHMgPT0gMTYKICAgICAgICAgICAgICAgJiYgb3BlcmFuZC0+c2hpZnQg PT0gMCkKICAgICAgICBmaXhQLT5meF9yX3R5cGUgPSBCRkRfUkVMT0NfUFBDX0JBMTY7CgogICAg ICBlbHNlIGlmICgob3BlcmFuZC0+ZmxhZ3MgJiAoMDEwKSkgIT0gMAogICAgICAgICAgICAgICAm JiBvcGVyYW5kLT5iaXRzID09IDE2CiAgICAgICAgICAgICAgICYmIG9wZXJhbmQtPnNoaWZ0ID09 IDAKICAgICAgICAgICAgICAgJiYgcHBjX2lzX3RvY19zeW0gKGZpeFAtPmZ4X2FkZHN5KSkKICAg ICAgICB7CiAgICAgICAgICBmaXhQLT5meF9yX3R5cGUgPSBCRkRfUkVMT0NfUFBDX1RPQzE2OwoK ICAgICAgICAgIGlmIChwcGNfb2JqNjQKICAgICAgICAgICAgICAmJiAob3BlcmFuZC0+ZmxhZ3Mg JiAoMDIwMDAwKSkgIT0gMCkKICAgICAgICAgICAgZml4UC0+Znhfcl90eXBlID0gQkZEX1JFTE9D X1BQQzY0X1RPQzE2X0RTOwoKICAgICAgICAgIGZpeFAtPmZ4X3NpemUgPSAyOwogICAgICAgICAg aWYgKHRhcmdldF9iaWdfZW5kaWFuKQogICAgICAgICAgICBmaXhQLT5meF93aGVyZSArPSAyOwog ICAgICAgIH0KCiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBjaGFyICpzZmlsZTsKICAg ICAgICAgIHVuc2lnbmVkIGludCBzbGluZTsKCgoKICAgICAgICAgIGlmIChleHByX3N5bWJvbF93 aGVyZSAoZml4UC0+ZnhfYWRkc3ksICZzZmlsZSwgJnNsaW5lKSkKICAgICAgICAgICAgYXNfYmFk X3doZXJlIChmaXhQLT5meF9maWxlLCBmaXhQLT5meF9saW5lLAogICAgICAgICAgICAgICAgICAg ICAgICAgIGRjZ2V0dGV4dCAoKCh2b2lkICopMCksICJ1bnJlc29sdmVkIGV4cHJlc3Npb24gdGhh dCBtdXN0IGJlIHJlc29sdmVkIiwgNikpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBhc19i YWRfd2hlcmUgKGZpeFAtPmZ4X2ZpbGUsIGZpeFAtPmZ4X2xpbmUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgZGNnZXR0ZXh0ICgoKHZvaWQgKikwKSwgInVuc3VwcG9ydGVkIHJlbG9jYXRpb24g YWdhaW5zdCAlcyIsIDYpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFNfR0VUX05BTUUgKGZp eFAtPmZ4X2FkZHN5KSk7CiAgICAgICAgICBmaXhQLT5meF9kb25lID0gMTsKICAgICAgICAgIHJl dHVybjsKICAgICAgICB9CiAgICB9CiAgZWxzZQogICAgewoKICAgICAgcHBjX2VsZl92YWxpZGF0 ZV9maXggKGZpeFAsIHNlZyk7CgogICAgICBzd2l0Y2ggKGZpeFAtPmZ4X3JfdHlwZSkKICAgICAg ICB7CiAgICAgICAgY2FzZSBCRkRfUkVMT0NfQ1RPUjoKICAgICAgICAgIGlmIChwcGNfb2JqNjQp CiAgICAgICAgICAgIGdvdG8gY3RvcjY0OwoKCiAgICAgICAgY2FzZSBCRkRfUkVMT0NfMzI6CiAg ICAgICAgICBpZiAoZml4UC0+ZnhfcGNyZWwpCiAgICAgICAgICAgIGZpeFAtPmZ4X3JfdHlwZSA9 IEJGRF9SRUxPQ18zMl9QQ1JFTDsKCgogICAgICAgIGNhc2UgQkZEX1JFTE9DX1JWQToKICAgICAg ICBjYXNlIEJGRF9SRUxPQ18zMl9QQ1JFTDoKICAgICAgICBjYXNlIEJGRF9SRUxPQ19QUENfRU1C X05BRERSMzI6CiAgICAgICAgICBtZF9udW1iZXJfdG9fY2hhcnMgKGZpeFAtPmZ4X2ZyYWctPmZy X2xpdGVyYWwgKyBmaXhQLT5meF93aGVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dmFsdWUsIDQpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgQkZEX1JFTE9DXzY0Ogog ICAgICAgIGN0b3I2NDoKICAgICAgICAgIGlmIChmaXhQLT5meF9wY3JlbCkKICAgICAgICAgICAg Zml4UC0+Znhfcl90eXBlID0gQkZEX1JFTE9DXzY0X1BDUkVMOwoKCiAgICAgICAgY2FzZSBCRkRf UkVMT0NfNjRfUENSRUw6CiAgICAgICAgICBtZF9udW1iZXJfdG9fY2hhcnMgKGZpeFAtPmZ4X2Zy YWctPmZyX2xpdGVyYWwgKyBmaXhQLT5meF93aGVyZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdmFsdWUsIDgpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgQkZEX1JFTE9D X0xPMTY6CiAgICAgICAgY2FzZSBCRkRfUkVMT0NfMTY6CiAgICAgICAgY2FzZSBCRkRfUkVMT0Nf R1BSRUwxNjoKICAgICAgICBjYXNlIEJGRF9SRUxPQ18xNl9HT1RfUENSRUw6CiAgICAgICAgY2Fz ZSBCRkRfUkVMT0NfMTZfR09UT0ZGOgogICAgICAgIGNhc2UgQkZEX1JFTE9DX0xPMTZfR09UT0ZG OgogICAgICAgIGNhc2UgQkZEX1JFTE9DX0hJMTZfR09UT0ZGOgogICAgICAgIGNhc2UgQkZEX1JF TE9DX0hJMTZfU19HT1RPRkY6CiAgICAgICAgY2FzZSBCRkRfUkVMT0NfMTZfQkFTRVJFTDoKICAg ICAgICBjYXNlIEJGRF9SRUxPQ19MTzE2X0JBU0VSRUw6CiAgICAgICAgY2FzZSBCRkRfUkVMT0Nf SEkxNl9CQVNFUkVMOgogICAgICAgIGNhc2UgQkZEX1JFTE9DX0hJMTZfU19CQVNFUkVMOgogICAg ICAgIGNhc2UgQkZEX1JFTE9DX1BQQ19FTUJfTkFERFIxNjoKICAgICAgICBjYXNlIEJGRF9SRUxP Q19QUENfRU1CX05BRERSMTZfTE86CiAgICAgICAgY2FzZSBCRkRfUkVMT0NfUFBDX0VNQl9OQURE UjE2X0hJOgogICAgICAgIGNhc2UgQkZEX1JFTE9DX1BQQ19FTUJfTkFERFIxNl9IQToKICAgICAg ICBjYXNlIEJGRF9SRUxPQ19QUENfRU1CX1NEQUkxNjoKICAgICAgICBjYXNlIEJGRF9SRUxPQ19Q UENfRU1CX1NEQTJSRUw6CiAgICAgICAgY2FzZSBCRkRfUkVMT0NfUFBDX0VNQl9TREEySTE2Ogog ICAgICAgIGNhc2UgQkZEX1JFTE9DX1BQQ19FTUJfUkVMU0VDMTY6CiAgICAgICAgY2FzZSBCRkRf UkVMT0NfUFBDX0VNQl9SRUxTVF9MTzoKICAgICAgICBjYXNlIEJGRF9SRUxPQ19QUENfRU1CX1JF TFNUX0hJOgogICAgICAgIGNhc2UgQkZEX1JFTE9DX1BQQ19FTUJfUkVMU1RfSEE6CiAgICAgICAg Y2FzZSBCRkRfUkVMT0NfUFBDX0VNQl9SRUxTREE6CiAgICAgICAgY2FzZSBCRkRfUkVMT0NfUFBD X1RPQzE2OgoKICAgICAgICBjYXNlIEJGRF9SRUxPQ19QUEM2NF9UT0MxNl9MTzoKICAgICAgICBj YXNlIEJGRF9SRUxPQ19QUEM2NF9UT0MxNl9ISToKICAgICAgICBjYXNlIEJGRF9SRUxPQ19QUEM2 NF9UT0MxNl9IQToKCiAgICAgICAgICBpZiAoZml4UC0+ZnhfcGNyZWwpCiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBpZiAoZml4UC0+ZnhfYWRkc3kgIT0gKCh2b2lkICopMCkpCiAgICAgICAg ICAgICAgICBhc19iYWRfd2hlcmUgKGZpeFAtPmZ4X2ZpbGUsIGZpeFAtPmZ4X2xpbmUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRjZ2V0dGV4dCAoKCh2b2lkICopMCksICJjYW5ub3Qg ZW1pdCBQQyByZWxhdGl2ZSAlcyByZWxvY2F0aW9uIGFnYWluc3QgJXMiLCA2KSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYmZkX2dldF9yZWxvY19jb2RlX25hbWUgKGZpeFAtPmZ4X3Jf dHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNfR0VUX05BTUUgKGZpeFAtPmZ4 X2FkZHN5KSk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgYXNfYmFkX3doZXJl IChmaXhQLT5meF9maWxlLCBmaXhQLT5meF9saW5lLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkY2dldHRleHQgKCgodm9pZCAqKTApLCAiY2Fubm90IGVtaXQgUEMgcmVsYXRpdmUgJXMg cmVsb2NhdGlvbiIsIDYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZmRfZ2V0X3Jl bG9jX2NvZGVfbmFtZSAoZml4UC0+Znhfcl90eXBlKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAg ICBtZF9udW1iZXJfdG9fY2hhcnMgKGZpeFAtPmZ4X2ZyYWctPmZyX2xpdGVyYWwgKyBmaXhQLT5m eF93aGVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIDIpOwogICAgICAg ICAgYnJlYWs7CgoKCgogICAgICAgIGNhc2UgQkZEX1JFTE9DX0hJMTY6CiAgICAgICAgICBpZiAo Zml4UC0+ZnhfcGNyZWwpCiAgICAgICAgICAgIGFzX2Fib3J0ICgiL3NyYy9iaW51dGlscy0yLjEz L2dhcy9jb25maWcvdGMtcHBjLmMiLCA1MzU3LCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKICAgICAg ICAgIG1kX251bWJlcl90b19jaGFycyAoZml4UC0+ZnhfZnJhZy0+ZnJfbGl0ZXJhbCArIGZpeFAt PmZ4X3doZXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh2YWx1ZSkgPj4gMTYp ICYgMHhmZmZmKSwgMik7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBCRkRfUkVMT0Nf SEkxNl9TOgogICAgICAgICAgaWYgKGZpeFAtPmZ4X3BjcmVsKQogICAgICAgICAgICBhc19hYm9y dCAoIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvY29uZmlnL3RjLXBwYy5jIiwgNTM2NCwgX19QUkVU VFlfRlVOQ1RJT05fXyk7CiAgICAgICAgICBtZF9udW1iZXJfdG9fY2hhcnMgKGZpeFAtPmZ4X2Zy YWctPmZyX2xpdGVyYWwgKyBmaXhQLT5meF93aGVyZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCgoKHZhbHVlKSArIDB4ODAwMCkgPj4gMTYpICYgMHhmZmZmKSwgMik7CiAgICAgICAg ICBicmVhazsKCgogICAgICAgIGNhc2UgQkZEX1JFTE9DX1BQQzY0X0hJR0hFUjoKICAgICAgICAg IGlmIChmaXhQLT5meF9wY3JlbCkKICAgICAgICAgICAgYXNfYWJvcnQgKCIvc3JjL2JpbnV0aWxz LTIuMTMvZ2FzL2NvbmZpZy90Yy1wcGMuYyIsIDUzNzIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOwog ICAgICAgICAgbWRfbnVtYmVyX3RvX2NoYXJzIChmaXhQLT5meF9mcmFnLT5mcl9saXRlcmFsICsg Zml4UC0+Znhfd2hlcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHZhbHVlKSA+ PiAzMikgJiAweGZmZmYpLCAyKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIEJGRF9S RUxPQ19QUEM2NF9ISUdIRVJfUzoKICAgICAgICAgIGlmIChmaXhQLT5meF9wY3JlbCkKICAgICAg ICAgICAgYXNfYWJvcnQgKCIvc3JjL2JpbnV0aWxzLTIuMTMvZ2FzL2NvbmZpZy90Yy1wcGMuYyIs IDUzNzksIF9fUFJFVFRZX0ZVTkNUSU9OX18pOwogICAgICAgICAgbWRfbnVtYmVyX3RvX2NoYXJz IChmaXhQLT5meF9mcmFnLT5mcl9saXRlcmFsICsgZml4UC0+Znhfd2hlcmUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgoKCh2YWx1ZSkgKyAweDgwMDApID4+IDMyKSAmIDB4ZmZmZiks IDIpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgQkZEX1JFTE9DX1BQQzY0X0hJR0hF U1Q6CiAgICAgICAgICBpZiAoZml4UC0+ZnhfcGNyZWwpCiAgICAgICAgICAgIGFzX2Fib3J0ICgi L3NyYy9iaW51dGlscy0yLjEzL2dhcy9jb25maWcvdGMtcHBjLmMiLCA1Mzg2LCBfX1BSRVRUWV9G VU5DVElPTl9fKTsKICAgICAgICAgIG1kX251bWJlcl90b19jaGFycyAoZml4UC0+ZnhfZnJhZy0+ ZnJfbGl0ZXJhbCArIGZpeFAtPmZ4X3doZXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoKCh2YWx1ZSkgPj4gNDgpICYgMHhmZmZmKSwgMik7CiAgICAgICAgICBicmVhazsKCiAgICAg ICAgY2FzZSBCRkRfUkVMT0NfUFBDNjRfSElHSEVTVF9TOgogICAgICAgICAgaWYgKGZpeFAtPmZ4 X3BjcmVsKQogICAgICAgICAgICBhc19hYm9ydCAoIi9zcmMvYmludXRpbHMtMi4xMy9nYXMvY29u ZmlnL3RjLXBwYy5jIiwgNTM5MywgX19QUkVUVFlfRlVOQ1RJT05fXyk7CiAgICAgICAgICBtZF9u dW1iZXJfdG9fY2hhcnMgKGZpeFAtPmZ4X2ZyYWctPmZyX2xpdGVyYWwgKyBmaXhQLT5meF93aGVy ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKHZhbHVlKSArIDB4ODAwMCkgPj4g NDgpICYgMHhmZmZmKSwgMik7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBCRkRfUkVM T0NfUFBDNjRfQUREUjE2X0RTOgogICAgICAgIGNhc2UgQkZEX1JFTE9DX1BQQzY0X0FERFIxNl9M T19EUzoKICAgICAgICBjYXNlIEJGRF9SRUxPQ19QUEM2NF9HT1QxNl9EUzoKICAgICAgICBjYXNl IEJGRF9SRUxPQ19QUEM2NF9HT1QxNl9MT19EUzoKICAgICAgICBjYXNlIEJGRF9SRUxPQ19QUEM2 NF9QTFQxNl9MT19EUzoKICAgICAgICBjYXNlIEJGRF9SRUxPQ19QUEM2NF9TRUNUT0ZGX0RTOgog ICAgICAgIGNhc2UgQkZEX1JFTE9DX1BQQzY0X1NFQ1RPRkZfTE9fRFM6CiAgICAgICAgY2FzZSBC RkRfUkVMT0NfUFBDNjRfVE9DMTZfRFM6CiAgICAgICAgY2FzZSBCRkRfUkVMT0NfUFBDNjRfVE9D MTZfTE9fRFM6CiAgICAgICAgY2FzZSBCRkRfUkVMT0NfUFBDNjRfUExUR09UMTZfRFM6CiAgICAg ICAgY2FzZSBCRkRfUkVMT0NfUFBDNjRfUExUR09UMTZfTE9fRFM6CiAgICAgICAgICBpZiAoZml4 UC0+ZnhfcGNyZWwpCiAgICAgICAgICAgIGFzX2Fib3J0ICgiL3NyYy9iaW51dGlscy0yLjEzL2dh cy9jb25maWcvdGMtcHBjLmMiLCA1NDEwLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKICAgICAgICAg IHsKICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqd2hlcmUgPSBmaXhQLT5meF9mcmFnLT5mcl9s aXRlcmFsICsgZml4UC0+Znhfd2hlcmU7CiAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsOwoK ICAgICAgICAgICAgaWYgKHRhcmdldF9iaWdfZW5kaWFuKQogICAgICAgICAgICAgIHZhbCA9IGJm ZF9nZXRiMTYgKHdoZXJlKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHZhbCA9IGJm ZF9nZXRsMTYgKHdoZXJlKTsKICAgICAgICAgICAgdmFsIHw9ICh2YWx1ZSAmIDB4ZmZmYyk7CiAg ICAgICAgICAgIGlmICh0YXJnZXRfYmlnX2VuZGlhbikKICAgICAgICAgICAgICBiZmRfcHV0YjE2 ICgoYmZkX3ZtYSkgdmFsLCB3aGVyZSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBi ZmRfcHV0bDE2ICgoYmZkX3ZtYSkgdmFsLCB3aGVyZSk7CiAgICAgICAgICB9CiAgICAgICAgICBi cmVhazsKCgoKICAgICAgICBjYXNlIEJGRF9SRUxPQ19QUENfRU1CX1NEQTIxOgogICAgICAgICAg aWYgKGZpeFAtPmZ4X3BjcmVsKQogICAgICAgICAgICBhc19hYm9ydCAoIi9zcmMvYmludXRpbHMt Mi4xMy9nYXMvY29uZmlnL3RjLXBwYy5jIiwgNTQzMSwgX19QUkVUVFlfRlVOQ1RJT05fXyk7Cgog ICAgICAgICAgbWRfbnVtYmVyX3RvX2NoYXJzIChmaXhQLT5meF9mcmFnLT5mcl9saXRlcmFsICsg Zml4UC0+Znhfd2hlcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoKHRhcmdldF9i aWdfZW5kaWFuKSA/IDIgOiAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUs IDIpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgQkZEX1JFTE9DXzg6CiAgICAgICAg ICBpZiAoZml4UC0+ZnhfcGNyZWwpCiAgICAgICAgICAgIGFzX2Fib3J0ICgiL3NyYy9iaW51dGls cy0yLjEzL2dhcy9jb25maWcvdGMtcHBjLmMiLCA1NDQwLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsK CiAgICAgICAgICBtZF9udW1iZXJfdG9fY2hhcnMgKGZpeFAtPmZ4X2ZyYWctPmZyX2xpdGVyYWwg KyBmaXhQLT5meF93aGVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIDEp OwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgQkZEX1JFTE9DXzI0X1BMVF9QQ1JFTDoK ICAgICAgICBjYXNlIEJGRF9SRUxPQ19QUENfTE9DQUwyNFBDOgogICAgICAgICAgaWYgKCFmaXhQ LT5meF9wY3JlbCAmJiAhZml4UC0+ZnhfZG9uZSkKICAgICAgICAgICAgYXNfYWJvcnQgKCIvc3Jj L2JpbnV0aWxzLTIuMTMvZ2FzL2NvbmZpZy90Yy1wcGMuYyIsIDU0NDksIF9fUFJFVFRZX0ZVTkNU SU9OX18pOwoKICAgICAgICAgIGlmIChmaXhQLT5meF9kb25lKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgY2hhciAqd2hlcmU7CiAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnNuOwoK CgogICAgICAgICAgICAgIHdoZXJlID0gZml4UC0+ZnhfZnJhZy0+ZnJfbGl0ZXJhbCArIGZpeFAt PmZ4X3doZXJlOwogICAgICAgICAgICAgIGlmICh0YXJnZXRfYmlnX2VuZGlhbikKICAgICAgICAg ICAgICAgIGluc24gPSBiZmRfZ2V0YjMyICgodW5zaWduZWQgY2hhciAqKSB3aGVyZSk7CiAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgaW5zbiA9IGJmZF9nZXRsMzIgKCh1bnNpZ25l ZCBjaGFyICopIHdoZXJlKTsKICAgICAgICAgICAgICBpZiAoKHZhbHVlICYgMykgIT0gMCkKICAg ICAgICAgICAgICAgIGFzX2JhZF93aGVyZSAoZml4UC0+ZnhfZmlsZSwgZml4UC0+ZnhfbGluZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGNnZXR0ZXh0ICgoKHZvaWQgKikwKSwgIm11 c3QgYnJhbmNoIHRvIGFuIGFkZHJlc3MgYSBtdWx0aXBsZSBvZiA0IiwgNikpOwogICAgICAgICAg ICAgIGlmICgob2Zmc2V0VCkgdmFsdWUgPCAtMHg0MDAwMDAwMAogICAgICAgICAgICAgICAgICB8 fCAob2Zmc2V0VCkgdmFsdWUgPj0gMHg0MDAwMDAwMCkKICAgICAgICAgICAgICAgIGFzX2JhZF93 aGVyZSAoZml4UC0+ZnhfZmlsZSwgZml4UC0+ZnhfbGluZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGNnZXR0ZXh0ICgoKHZvaWQgKikwKSwgIkBsb2NhbCBvciBAcGx0IGJyYW5jaCBk ZXN0aW5hdGlvbiBpcyB0b28gZmFyIGF3YXksICVsZCBieXRlcyIsIDYpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAobG9uZykgdmFsdWUpOwogICAgICAgICAgICAgIGluc24gPSBpbnNu IHwgKHZhbHVlICYgMHgwM2ZmZmZmYyk7CiAgICAgICAgICAgICAgaWYgKHRhcmdldF9iaWdfZW5k aWFuKQogICAgICAgICAgICAgICAgYmZkX3B1dGIzMiAoKGJmZF92bWEpIGluc24sICh1bnNpZ25l ZCBjaGFyICopIHdoZXJlKTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBiZmRf cHV0bDMyICgoYmZkX3ZtYSkgaW5zbiwgKHVuc2lnbmVkIGNoYXIgKikgd2hlcmUpOwogICAgICAg ICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBCRkRfUkVMT0NfVlRBQkxFX0lO SEVSSVQ6CiAgICAgICAgICBmaXhQLT5meF9kb25lID0gMDsKICAgICAgICAgIGlmIChmaXhQLT5m eF9hZGRzeQogICAgICAgICAgICAgICYmICFTX0lTX0RFRklORUQgKGZpeFAtPmZ4X2FkZHN5KQog ICAgICAgICAgICAgICYmICFTX0lTX1dFQUsgKGZpeFAtPmZ4X2FkZHN5KSkKICAgICAgICAgICAg U19TRVRfV0VBSyAoZml4UC0+ZnhfYWRkc3kpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNh c2UgQkZEX1JFTE9DX1ZUQUJMRV9FTlRSWToKICAgICAgICAgIGZpeFAtPmZ4X2RvbmUgPSAwOwog ICAgICAgICAgYnJlYWs7CgoKCgogICAgICAgIGNhc2UgQkZEX1JFTE9DX1BQQzY0X1RPQzoKICAg ICAgICAgIGZpeFAtPmZ4X2RvbmUgPSAwOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGRlZmF1 bHQ6CiAgICAgICAgICBmcHJpbnRmICgoX2ltcHVyZV9wdHItPl9zdGRlcnIpLAogICAgICAgICAg ICAgICAgICAgZGNnZXR0ZXh0ICgoKHZvaWQgKikwKSwgIkdhcyBmYWlsdXJlLCByZWxvYyB2YWx1 ZSAlZFxuIiwgNiksIGZpeFAtPmZ4X3JfdHlwZSk7CiAgICAgICAgICBmZmx1c2ggKChfaW1wdXJl X3B0ci0+X3N0ZGVycikpOwogICAgICAgICAgYXNfYWJvcnQgKCIvc3JjL2JpbnV0aWxzLTIuMTMv Z2FzL2NvbmZpZy90Yy1wcGMuYyIsIDU1MDIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOwogICAgICAg IH0KICAgIH0KCgogIGZpeFAtPmZ4X2FkZG51bWJlciA9IHZhbHVlOwojIDU1MjMgIi9zcmMvYmlu dXRpbHMtMi4xMy9nYXMvY29uZmlnL3RjLXBwYy5jIgp9CgoKCmFyZWxlbnQgKgp0Y19nZW5fcmVs b2MgKHNlZywgZml4cCkKICAgICBhc2VjdGlvbiAqc2VnIF9fYXR0cmlidXRlX18gKChfX3VudXNl ZF9fKSk7CiAgICAgZml4UyAqZml4cDsKewogIGFyZWxlbnQgKnJlbG9jOwoKICByZWxvYyA9IChh cmVsZW50ICopIHhtYWxsb2MgKHNpemVvZiAoYXJlbGVudCkpOwoKICByZWxvYy0+c3ltX3B0cl9w dHIgPSAoYXN5bWJvbCAqKikgeG1hbGxvYyAoc2l6ZW9mIChhc3ltYm9sICopKTsKICAqcmVsb2Mt PnN5bV9wdHJfcHRyID0gc3ltYm9sX2dldF9iZmRzeW0gKGZpeHAtPmZ4X2FkZHN5KTsKICByZWxv Yy0+YWRkcmVzcyA9IGZpeHAtPmZ4X2ZyYWctPmZyX2FkZHJlc3MgKyBmaXhwLT5meF93aGVyZTsK ICByZWxvYy0+aG93dG8gPSBiZmRfcmVsb2NfdHlwZV9sb29rdXAgKHN0ZG91dHB1dCwgZml4cC0+ Znhfcl90eXBlKTsKICBpZiAocmVsb2MtPmhvd3RvID09IChyZWxvY19ob3d0b190eXBlICopICgo dm9pZCAqKTApKQogICAgewogICAgICBhc19iYWRfd2hlcmUgKGZpeHAtPmZ4X2ZpbGUsIGZpeHAt PmZ4X2xpbmUsCiAgICAgICAgICAgICAgICAgICAgZGNnZXR0ZXh0ICgoKHZvaWQgKikwKSwgInJl bG9jICVkIG5vdCBzdXBwb3J0ZWQgYnkgb2JqZWN0IGZpbGUgZm9ybWF0IiwgNiksCiAgICAgICAg ICAgICAgICAgICAgKGludCkgZml4cC0+Znhfcl90eXBlKTsKICAgICAgcmV0dXJuICgodm9pZCAq KTApOwogICAgfQogIHJlbG9jLT5hZGRlbmQgPSBmaXhwLT5meF9hZGRudW1iZXI7CgogIHJldHVy biByZWxvYzsKfQo=