From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7236 invoked by alias); 11 Apr 2003 14:46:03 -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 7208 invoked by uid 71); 11 Apr 2003 14:46:02 -0000 Resent-Date: 11 Apr 2003 14:46:02 -0000 Resent-Message-ID: <20030411144602.7207.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, Uwe_Reimann@gmx.net Received: (qmail 2205 invoked by uid 48); 11 Apr 2003 14:39:10 -0000 Message-Id: <20030411143910.2204.qmail@sources.redhat.com> Date: Fri, 11 Apr 2003 14:46:00 -0000 From: Uwe_Reimann@gmx.net Reply-To: Uwe_Reimann@gmx.net To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: target/10377: gcc-3.2.2 creates bad assembler for cris X-SW-Source: 2003-04/txt/msg00503.txt.bz2 List-Id: >Number: 10377 >Category: target >Synopsis: gcc-3.2.2 creates bad assembler for cris >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: wrong-code >Submitter-Id: net >Arrival-Date: Fri Apr 11 14:46:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Uwe_Reimann@gmx.net >Release: gcc version 3.2.2 >Organization: >Environment: cris-axis-linux-gnu (but reproduceable on i686 with cris-axis-linux-gnu-cross-compiler) >Description: infocmp.s: Assembler messages: infocmp.s:2058: Error: Illegal operands >How-To-Repeat: gcc -O2 -fPIC -c infocmp.i >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="infocmp.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="infocmp.i" IyAxICIuLi9wcm9ncy9pbmZvY21wLmMiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBs aW5lPiIKIyAxICIuLi9wcm9ncy9pbmZvY21wLmMiCiMgMzkgIi4uL3Byb2dzL2luZm9jbXAuYyIK IyAxICIuLi9wcm9ncy9wcm9ncy5wcml2LmgiIDEKIyA0MCAiLi4vcHJvZ3MvcHJvZ3MucHJpdi5o IgojIDEgIi4uL2luY2x1ZGUvbmN1cnNlc19jZmcuaCIgMQojIDE0NiAiLi4vaW5jbHVkZS9uY3Vy c2VzX2NmZy5oIgojIDEgIi4uL2luY2x1ZGUvbmN1cnNlc19kZWYuaCIgMQojIDE0NyAiLi4vaW5j bHVkZS9uY3Vyc2VzX2NmZy5oIiAyCiMgNDEgIi4uL3Byb2dzL3Byb2dzLnByaXYuaCIgMgoKCgoK CgoKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjgzICIvdXNyL2lu Y2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMg Mjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzExICIvdXNyL2luY2x1ZGUvZmVh dHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiMgMzEyICIvdXNy L2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAz CgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvY3Jpcy1heGlzLWxpbnV4LWdudS8zLjIuMi9p bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMTMgIi91c3IvbGliL2djYy1saWIvY3Jpcy1heGlzLWxp bnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNp emVfdDsKIyAzMjUgIi91c3IvbGliL2djYy1saWIvY3Jpcy1heGlzLWxpbnV4LWdudS8zLjIuMi9p bmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgbG9uZyBpbnQgd2NoYXJfdDsKIyAzNCAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRm bGFncy5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvYml0cy93YWl0 c3RhdHVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDM3ICIvdXNyL2lu Y2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMg MzggIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgNjQgIi91c3IvaW5jbHVkZS9iaXRzL3dh aXRzdGF0dXMuaCIgMiAzCgp1bmlvbiB3YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3Ry dWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAgICAg dW5zaWduZWQgaW50IF9fd19jb3JlZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfcmV0 Y29kZTo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0gX193YWl0X3Rl cm1pbmF0ZWQ7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0 b3B2YWw6ODsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAgICAgICB1bnNp Z25lZCBpbnQ6MTY7CgoKCgoKCiAgICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsKIyA0NCAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyA2OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCnR5 cGVkZWYgdW5pb24KICB7CiAgICB1bmlvbiB3YWl0ICpfX3VwdHI7CiAgICBpbnQgKl9faXB0cjsK ICB9IF9fV0FJVF9TVEFUVVMgX19hdHRyaWJ1dGVfXyAoKF9fdHJhbnNwYXJlbnRfdW5pb25fXykp OwojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBp bnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAg ICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKCgoKCl9fZXh0 ZW5zaW9uX18gdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICBs b25nIGxvbmcgaW50IHJlbTsKICB9IGxsZGl2X3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3RkbGli LmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSA7CgoKCmV4 dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFy ICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4 dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0cikgOwoKCgpleHRlcm4gZmxvYXQgc3RydG9mIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0cikgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0cikgOwoKCgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50 IHN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFz ZSkKICAgICA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSA7CgpfX2V4dGVuc2lv bl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIDsKCgoKCgoKX19l eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5z aWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIDsKIyAyMTEgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2lu Y2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0 cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0 IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGlu dCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xvY2FsZV90OwojIDIxMiAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAyIDMKCgoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2wgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fbG9jYWxlX3QgX19sb2MpIDsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxf bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSA7 CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9sIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSA7CgpfX2V4dGVuc2lvbl9fCmV4 dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIDsK CmV4dGVybiBkb3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg X19sb2NhbGVfdCBfX2xvYykKICAgICA7CgpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKSA7CgpleHRlcm4gbG9uZyBk b3VibGUgX19zdHJ0b2xkX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgOwoKCgoKCgpl eHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50 ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQog ICAgIDsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBfX2dyb3VwKSA7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50 ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgoKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCgpfX2V4 dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpfX2V4 dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJu YWwgKF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFz ZSwgaW50IF9fZ3JvdXApCiAgICAgOwojIDI5NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4 dGVybiBfX2lubGluZSBkb3VibGUKc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikKewogIHJldHVybiBfX3N0cnRvZF9pbnRl cm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CnN0 cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvbF9pbnRlcm5h bCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgdW5zaWdu ZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4g X19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0 ZXJuIF9faW5saW5lIGZsb2F0CnN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpCnsKICByZXR1cm4gX19zdHJ0b2ZfaW50ZXJu YWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZQpz dHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0cikKewogIHJldHVybiBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw dHIsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQK c3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRl cm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVy biBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdXEgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBp bnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw dHIsIF9fYmFzZSwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBs b25nIGludApzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoq X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0 cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNp b25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VsbCAoX19j b25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LAogICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChf X25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQph dG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVybiBzdHJ0b2QgKF9fbnB0ciwgKGNo YXIgKiopICgodm9pZCAqKTApKTsKfQpleHRlcm4gX19pbmxpbmUgaW50CmF0b2kgKF9fY29uc3Qg Y2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIChpbnQpIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikg KCh2b2lkICopMCksIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKYXRvbCAoX19jb25z dCBjaGFyICpfX25wdHIpCnsKICByZXR1cm4gc3RydG9sIChfX25wdHIsIChjaGFyICoqKSAoKHZv aWQgKikwKSwgMTApOwp9CgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25n IGludAphdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCnsKICByZXR1cm4gc3RydG9sbCAoX19u cHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQojIDM4NSAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpsNjRhIChsb25nIGludCBfX24pIDsKCgpleHRlcm4gbG9u ZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRl L3N5cy90eXBlcy5oIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAy OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvY3Jp cy1heGlzLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9p bmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFy Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg X191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0 eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5 cGVzLmgiIDMKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBj aGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRl ZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50 MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlw ZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRl ZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpf X3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3VfaW50IF9f dWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7 CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsKdHlw ZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0eXBlZGVm IGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgX191X2xvbmcgX19y bGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0eXBlZGVmIF9fdV9pbnQgX19p ZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsK Cgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVm IGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7CnR5 cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7 Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVmIGludCBfX2Nsb2NraWRfdDsK Cgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoKdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKCnR5cGVkZWYgbG9uZyBpbnQg X19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7CnR5cGVkZWYgX19x dWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90Owp0eXBl ZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzZmls Y250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsKCgp0eXBlZGVmIF9fdV9x dWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKCnR5cGVkZWYg bG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdF91c2Nh bGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBf X3NvY2tsZW5fdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEg MwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAz CnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsK IyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIgMwoKCnN0cnVjdCBfcHRo cmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAgaW50IF9fc3BpbmxvY2s7Cgp9 OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2Ny OwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0 YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRw YXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3Vh cmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6 ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAg c3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9fY193 YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZHVt bXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRf a2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50IF9f bV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9fbV9raW5kOwogIHN0 cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211dGV4X3Q7CgoKCnR5 cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsK CgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVh ZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fcndfbG9jazsKICBpbnQg X19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVyOwogIF9wdGhyZWFkX2Rl c2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2FpdGlu ZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2tf dDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5kOwogIGludCBfX3BzaGFyZWQ7 Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHZvbGF0aWxlIGludCBwdGhyZWFk X3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9j ayBfX2JhX2xvY2s7CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAgaW50IF9fYmFfcHJlc2VudDsKICBf cHRocmVhZF9kZXNjciBfX2JhX3dhaXRpbmc7Cn0gcHRocmVhZF9iYXJyaWVyX3Q7CgoKdHlwZWRl ZiBzdHJ1Y3QgewogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9iYXJyaWVyYXR0cl90OwoKCgoK CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDE0NCAiL3Vzci9pbmNsdWRl L2JpdHMvdHlwZXMuaCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoK dHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVk ZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFk X3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3Qg ZnNpZF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5v X3Q7CgoKCgoKCnR5cGVkZWYgX19pbm82NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3Qg ZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1v ZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3Qg dWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRf dCBvZmY2NF90OwoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3Qg aWRfdDsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJf dCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qg a2V5X3Q7CiMgMTI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvdGltZS5oIiAxIDMKIyA1OSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fY2xv Y2tfdCBjbG9ja190OwojIDcwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX190aW1l X3QgdGltZV90OwojIDgyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX19jbG9ja2lk X3QgY2xvY2tpZF90OwojIDk0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX190aW1l cl90IHRpbWVyX3Q7CiMgMTI3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBl ZGVmIF9fdXNlY29uZHNfdCB1c2Vjb25kc190OwoKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3Vz ZWNvbmRzX3Q7CgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2NyaXMtYXhpcy1saW51eC1nbnUv My4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2ln bmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTg0ICIv dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu dCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYg dW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykp KTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVf XyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fd29yZF9fKSkpOwojIDIwOSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMv c2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91 c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2ln c2V0LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGlu dCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9u ZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwog IH0gX19zaWdzZXRfdDsKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5 cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg MSAzCiMgMTA2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAg IGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKIyA0NCAiL3Vzci9p bmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIg MSAzCiMgNjMgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXZhbAogIHsK ICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNvbmRzX3QgdHZfdXNlYzsKICB9OwojIDQ2 ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgoKdHlwZWRlZiBsb25nIGludCBfX2Zk X21hc2s7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKCgoKICAgIF9fZmRfbWFzayBmZHNfYml0 c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsKCgoKCgogIH0gZmRfc2V0OwoKCgoK Cgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwojIDg5ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVj dC5oIiAzCgoKCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jl c3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBf X3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0 ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1l b3V0KSA7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVz dHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBf X3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2Vw dGZkcywKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJp Y3QgX190aW1lb3V0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVz dHJpY3QgX19zaWdtYXNrKSA7CgoKCiMgMjEwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIg MwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMgMjEzICIvdXNyL2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKdHlwZWRlZiBfX2Jsa3NpemVfdCBibGtzaXplX3Q7 CgoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250 X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTEg Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2 NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmls Y250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKCiMgMzkyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIg MwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSA7CgoKZXh0ZXJuIHZvaWQgc3Jh bmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgOwoKCgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUg KHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSA7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hh ciAqX19zdGF0ZWJ1ZikgOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJf dCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAgIGludCBy YW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBpbnQzMl90 ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEg Kl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9fcmVzdHJp Y3QgX19yZXN1bHQpIDsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVk LCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSA7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1 bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIDsKCmV4dGVybiBpbnQgc2V0 c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgoKCmV4dGVybiBp bnQgcmFuZCAodm9pZCkgOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQp IDsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSA7CgoKCgoKCgpl eHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNp Z25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2 b2lkKSA7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3Vi aVszXSkgOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSA7CmV4dGVybiBsb25nIGlu dCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiB2b2lk IHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50 ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIDsKZXh0ZXJuIHZvaWQg bGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIDsKCgoKCgpzdHJ1Y3QgZHJh bmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVuc2lnbmVk IHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsKICAgIHVu c2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fYTsK ICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3Ry aWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9f cmVzdWx0KSA7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3Vi aVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJp Y3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19y ZXN1bHQpIDsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19y ZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3Ry aWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQg X194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f cmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0 cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9k YXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQg Kl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNo b3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhf ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50 ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50 IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgOwoKZXh0ZXJu IGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwKICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIDsKCmV4dGVybiBpbnQg bGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CiMgNTI4ICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgX19hdHRy aWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25t ZW1iLCBzaXplX3QgX19zaXplKQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoK CgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSBfX2F0 dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIp IDsKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSA7CgoKCiMgMSAiL3Vzci9pbmNs dWRlL2FsbG9jYS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMgMSAiL3Vz ci9saWIvZ2NjLWxpYi9jcmlzLWF4aXMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgi IDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKCgoKCgoKZXh0ZXJuIHZvaWQg KmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgOwoKCgoKCgojIDU0OCAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIF9fYXR0cmli dXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IHBvc2l4X21lbWFsaWduICh2b2lk ICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkKICAgICBfX2F0 dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgX19h dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAo Kl9fZnVuYykgKHZvaWQpKSA7CgoKCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMp IChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgOwoKCgoKCmV4 dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f XykpOwoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAo KF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpf X25hbWUpIDsKCgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpf X25hbWUpIDsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIDsKCgoKCgpl eHRlcm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192 YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAgICA7CgoKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25z dCBjaGFyICpfX25hbWUpIDsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgOwojIDYy NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9f dGVtcGxhdGUpIDsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkg OwojIDY0MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgbWtzdGVtcDY0IChj aGFyICpfX3RlbXBsYXRlKSA7CiMgNjUxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJu IGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKCgoKCmV4dGVybiBpbnQgc3lzdGVt IChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgOwoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2Fs aXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKIyA2NzMgIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX3Jl c29sdmVkKSA7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9p ZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBhcl9mbl90IGNvbXBhcmlzb25f Zm5fdDsKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19j b25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwg c2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFz b3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAg ICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChp bnQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJz IChsb25nIGludCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9u X18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KQogICAgIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9f bnVtZXIsIGludCBfX2Rlbm9tKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0 ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAg IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxsZGl2 X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKIyA3MjkgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAq ZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVj cHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CgoKCgpleHRl cm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3Ry aWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7 CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hh ciAqX19idWYpIDsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwg aW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0 LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3Vi bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0 cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CmV4dGVybiBjaGFyICpxZ2N2 dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgOwoKCgoK ZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19y ZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2ln biwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xl bikgOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50 ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg X19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fbGVuKSA7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBf X25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50 ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0 IF9fYnVmLCBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0 IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hh ciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CgoKCgoKCmV4dGVybiBpbnQgbWJs ZW4gKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCBtYnRvd2Mg KHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCB3Y3RvbWIgKGNo YXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSA7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93Y3MgKHdj aGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSA7CgpleHRlcm4gc2l6ZV90IHdjc3Rv bWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikKICAgICA7CgoKCgoKCgpl eHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkgOwojIDgwOSAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0 cmljdCBfX29wdGlvbnAsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0ICpfX3Jl c3RyaWN0IF9fdG9rZW5zLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X192YWx1ZXApIDsKCgoKCgpleHRlcm4gdm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkp IDsKCgoKCgoKCmV4dGVybiBpbnQgcG9zaXhfb3BlbnB0IChpbnQgX19vZmxhZykgOwoKCgoKCgoK ZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkgOwoKCgpleHRlcm4gaW50IHVubG9ja3B0IChp bnQgX19mZCkgOwoKCgoKZXh0ZXJuIGNoYXIgKnB0c25hbWUgKGludCBfX2ZkKSA7CgoKCgoKCmV4 dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxl bikgOwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIDsKCgoKCgoKZXh0ZXJuIGludCBnZXRsb2Fk YXZnIChkb3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSA7CgoKCgoKCiMgNDkgIi4uL3By b2dzL3Byb2dzLnByaXYuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKIyAyOSAi L3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKCiMgNDcgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmVu dW0KewogIF9JU3VwcGVyID0gKCgwKSA8IDggPyAoKDEgPDwgKDApKSA8PCA4KSA6ICgoMSA8PCAo MCkpID4+IDgpKSwKICBfSVNsb3dlciA9ICgoMSkgPCA4ID8gKCgxIDw8ICgxKSkgPDwgOCkgOiAo KDEgPDwgKDEpKSA+PiA4KSksCiAgX0lTYWxwaGEgPSAoKDIpIDwgOCA/ICgoMSA8PCAoMikpIDw8 IDgpIDogKCgxIDw8ICgyKSkgPj4gOCkpLAogIF9JU2RpZ2l0ID0gKCgzKSA8IDggPyAoKDEgPDwg KDMpKSA8PCA4KSA6ICgoMSA8PCAoMykpID4+IDgpKSwKICBfSVN4ZGlnaXQgPSAoKDQpIDwgOCA/ ICgoMSA8PCAoNCkpIDw8IDgpIDogKCgxIDw8ICg0KSkgPj4gOCkpLAogIF9JU3NwYWNlID0gKCg1 KSA8IDggPyAoKDEgPDwgKDUpKSA8PCA4KSA6ICgoMSA8PCAoNSkpID4+IDgpKSwKICBfSVNwcmlu dCA9ICgoNikgPCA4ID8gKCgxIDw8ICg2KSkgPDwgOCkgOiAoKDEgPDwgKDYpKSA+PiA4KSksCiAg X0lTZ3JhcGggPSAoKDcpIDwgOCA/ICgoMSA8PCAoNykpIDw8IDgpIDogKCgxIDw8ICg3KSkgPj4g OCkpLAogIF9JU2JsYW5rID0gKCg4KSA8IDggPyAoKDEgPDwgKDgpKSA8PCA4KSA6ICgoMSA8PCAo OCkpID4+IDgpKSwKICBfSVNjbnRybCA9ICgoOSkgPCA4ID8gKCgxIDw8ICg5KSkgPDwgOCkgOiAo KDEgPDwgKDkpKSA+PiA4KSksCiAgX0lTcHVuY3QgPSAoKDEwKSA8IDggPyAoKDEgPDwgKDEwKSkg PDwgOCkgOiAoKDEgPDwgKDEwKSkgPj4gOCkpLAogIF9JU2FsbnVtID0gKCgxMSkgPCA4ID8gKCgx IDw8ICgxMSkpIDw8IDgpIDogKCgxIDw8ICgxMSkpID4+IDgpKQp9OwojIDc1ICIvdXNyL2luY2x1 ZGUvY3R5cGUuaCIgMwpleHRlcm4gX19jb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVf YjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvbG93ZXI7CmV4dGVybiBfX2Nv bnN0IF9faW50MzJfdCAqX19jdHlwZV90b3VwcGVyOwojIDkxICIvdXNyL2luY2x1ZGUvY3R5cGUu aCIgMwpleHRlcm4gaW50IGlzYWxudW0gKGludCkgOwpleHRlcm4gaW50IGlzYWxwaGEgKGludCkg OwpleHRlcm4gaW50IGlzY250cmwgKGludCkgOwpleHRlcm4gaW50IGlzZGlnaXQgKGludCkgOwpl eHRlcm4gaW50IGlzbG93ZXIgKGludCkgOwpleHRlcm4gaW50IGlzZ3JhcGggKGludCkgOwpleHRl cm4gaW50IGlzcHJpbnQgKGludCkgOwpleHRlcm4gaW50IGlzcHVuY3QgKGludCkgOwpleHRlcm4g aW50IGlzc3BhY2UgKGludCkgOwpleHRlcm4gaW50IGlzdXBwZXIgKGludCkgOwpleHRlcm4gaW50 IGlzeGRpZ2l0IChpbnQpIDsKCgpleHRlcm4gaW50IGlzYmxhbmsgKGludCkgOwoKCgoKZXh0ZXJu IGludCB0b2xvd2VyIChpbnQgX19jKSA7CgoKZXh0ZXJuIGludCB0b3VwcGVyIChpbnQgX19jKSA7 CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaSAoaW50IF9fYykgOwoKCgpleHRlcm4gaW50IHRvYXNj aWkgKGludCBfX2MpIDsKCgoKZXh0ZXJuIGludCBfdG91cHBlciAoaW50KSA7CmV4dGVybiBpbnQg X3RvbG93ZXIgKGludCkgOwojIDE2OCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9f aW5saW5lIGludAp0b2xvd2VyIChpbnQgX19jKQp7CiAgcmV0dXJuIF9fYyA+PSAtMTI4ICYmIF9f YyA8IDI1NiA/IF9fY3R5cGVfdG9sb3dlcltfX2NdIDogX19jOwp9CgpleHRlcm4gX19pbmxpbmUg aW50CnRvdXBwZXIgKGludCBfX2MpCnsKICByZXR1cm4gX19jID49IC0xMjggJiYgX19jIDwgMjU2 ID8gX19jdHlwZV90b3VwcGVyW19fY10gOiBfX2M7Cn0KIyAyMjQgIi91c3IvaW5jbHVkZS9jdHlw ZS5oIiAzCmV4dGVybiBpbnQgX19pc2FsbnVtX2wgKGludCwgX19sb2NhbGVfdCkgOwpleHRlcm4g aW50IF9faXNhbHBoYV9sIChpbnQsIF9fbG9jYWxlX3QpIDsKZXh0ZXJuIGludCBfX2lzY250cmxf bCAoaW50LCBfX2xvY2FsZV90KSA7CmV4dGVybiBpbnQgX19pc2RpZ2l0X2wgKGludCwgX19sb2Nh bGVfdCkgOwpleHRlcm4gaW50IF9faXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIDsKZXh0ZXJu IGludCBfX2lzZ3JhcGhfbCAoaW50LCBfX2xvY2FsZV90KSA7CmV4dGVybiBpbnQgX19pc3ByaW50 X2wgKGludCwgX19sb2NhbGVfdCkgOwpleHRlcm4gaW50IF9faXNwdW5jdF9sIChpbnQsIF9fbG9j YWxlX3QpIDsKZXh0ZXJuIGludCBfX2lzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSA7CmV4dGVy biBpbnQgX19pc3VwcGVyX2wgKGludCwgX19sb2NhbGVfdCkgOwpleHRlcm4gaW50IF9faXN4ZGln aXRfbCAoaW50LCBfX2xvY2FsZV90KSA7CgpleHRlcm4gaW50IF9faXNibGFua19sIChpbnQsIF9f bG9jYWxlX3QpIDsKCgoKZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVf dCBfX2wpIDsKCgpleHRlcm4gaW50IF9fdG91cHBlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9f bCkgOwojIDI3NyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKCiMgNTAgIi4uL3Byb2dzL3Byb2dz LnByaXYuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjggIi91c3IvaW5j bHVkZS9zdHJpbmcuaCIgMwoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9jcmlzLWF4aXMtbGlu dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3Ry aW5nLmgiIDIgMwoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVz dCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBz aXplX3QgX19uKSA7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25z dCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICA7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNj cHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19z cmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIDsKCgoK CmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgOwoK CmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19z Miwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4g dm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAg ICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hy IChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXpl X3QgX19uKQogICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFy ICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19zcmMpCiAgICAgOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3Qg X19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f c3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmlj dCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CgpleHRlcm4g Y2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIDsKCgpleHRl cm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAg ICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29u c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFy ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90 IF9fbikgOwojIDExMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBpbnQgX19zdHJj b2xsX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90 IF9fbCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3QgX19z dHJ4ZnJtX2wgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2wpIDsKCgoKCmV4dGVybiBj aGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2Nf XykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywg c2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAiL3Vz ci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAq X19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpz dHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50 IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmNz cG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAgIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNo YXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25z dCBjaGFyICpfX2FjY2VwdCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy biBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpf X25lZWRsZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIg KnN0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25l ZWRsZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0 cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Rl bGltKQogICAgIDsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3Qg X19zLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f ZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVf cHRyKSA7CgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSA7CgoKCgoKCmV4dGVybiB2b2lkICptZW1tZW0gKF9f Y29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3RhY2tsZW4sCiAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikKICAg ICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAo dm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg dm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwpleHRlcm4gdm9pZCAqbWVtcGNw eSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgoKCmV4dGVybiBzaXplX3Qg c3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK CgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBf X21heGxlbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFy ICpzdHJlcnJvciAoaW50IF9fZXJybnVtKSA7CgoKCmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChp bnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIDsKCgoKCmV4dGVybiB2 b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgOwoKCgpleHRlcm4gdm9pZCBiY29w eSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSA7CgoKZXh0 ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgYmNt cCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAg ICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2Nv bnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0 ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IGZmcyAoaW50IF9faSkgX19hdHRyaWJ1dGVf XyAoKGNvbnN0KSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcgaW50IF9fbCkgX19hdHRyaWJ1 dGVfXyAoKGNvbnN0KSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9u ZyBpbnQgX19sbCkKICAgICBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4dGVybiBpbnQg c3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19j b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX3N0cmNhc2VjbXBfbCAo X19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK ZXh0ZXJuIGludCBfX3N0cm5jYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj aGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2Nh bGVfdCBfX2xvYykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4g Y2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCiAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSA7CgoKCgpleHRlcm4gaW50 IHN0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAg IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGlu dCBfX3NpZykgOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rl c3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CmV4dGVybiBjaGFyICpz dHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19zcmMpCiAgICAgOwoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0 IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fc3JjLCBzaXplX3QgX19uKSA7CmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3Ry aWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3NyYywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBjaGFyICpzdHJmcnkgKGNoYXIgKl9fc3Ry aW5nKSA7CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgOwoK CgoKCgpleHRlcm4gY2hhciAqYmFzZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgOwoj IDM1NiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3Ry aW5nLmgiIDEgMwojIDM1NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMSAzCiMgMzYwICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgi IDIgMwoKCgoKIyA1MSAiLi4vcHJvZ3MvcHJvZ3MucHJpdi5oIiAyCgoKCiMgMSAiL3Vzci9pbmNs dWRlL3VuaXN0ZC5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCgojIDE3NSAi L3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXhfb3B0 LmgiIDEgMwojIDE3NiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgoKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy9lbnZpcm9ubWVudHMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL2Vu dmlyb25tZW50cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMg MjQgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50cy5oIiAyIDMKIyAxODAgIi91c3IvaW5j bHVkZS91bmlzdGQuaCIgMiAzCiMgMTk5ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKIyAxICIv dXNyL2xpYi9nY2MtbGliL2NyaXMtYXhpcy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYu aCIgMSAzCiMgMjAwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwojIDI0MCAiL3Vzci9pbmNs dWRlL3VuaXN0ZC5oIiAzCnR5cGVkZWYgX19pbnRwdHJfdCBpbnRwdHJfdDsKCgoKCgoKdHlwZWRl ZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CiMgMjYwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMK ZXh0ZXJuIGludCBhY2Nlc3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSA7CgoK CgpleHRlcm4gaW50IGV1aWRhY2Nlc3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBl KSA7CiMgMjkwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fb2ZmX3QgbHNlZWsg KGludCBfX2ZkLCBfX29mZl90IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpIDsKIyAzMDIgIi91c3Iv aW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmY2NF90IGxzZWVrNjQgKGludCBfX2ZkLCBf X29mZjY0X3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgOwoKCgpleHRlcm4gaW50IGNsb3NlIChp bnQgX19mZCkgOwoKCgpleHRlcm4gc3NpemVfdCByZWFkIChpbnQgX19mZCwgdm9pZCAqX19idWYs IHNpemVfdCBfX25ieXRlcykgOwoKCmV4dGVybiBzc2l6ZV90IHdyaXRlIChpbnQgX19mZCwgX19j b25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbikgOwoKCgpleHRlcm4gc3NpemVfdCBwcmVhZCAo aW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsIF9fb2ZmX3QgX19vZmZzZXQp CiAgICAgOwpleHRlcm4gc3NpemVfdCBwd3JpdGUgKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKl9f YnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmX3QgX19vZmZzZXQp IDsKIyAzNDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gc3NpemVfdCBwcmVhZDY0 IChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKICAgICAgICAgICAgICAg ICAgICAgICAgX19vZmY2NF90IF9fb2Zmc2V0KSA7CgoKZXh0ZXJuIHNzaXplX3QgcHdyaXRlNjQg KGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAg ICAgICAgICAgICAgX19vZmY2NF90IF9fb2Zmc2V0KSA7CgoKCgoKCgpleHRlcm4gaW50IHBpcGUg KGludCBfX3BpcGVkZXNbMl0pIDsKIyAzNjIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRl cm4gdW5zaWduZWQgaW50IGFsYXJtICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzKSA7CiMgMzcxICIv dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHVuc2lnbmVkIGludCBzbGVlcCAodW5zaWdu ZWQgaW50IF9fc2Vjb25kcykgOwoKCgoKCgpleHRlcm4gX191c2Vjb25kc190IHVhbGFybSAoX191 c2Vjb25kc190IF9fdmFsdWUsIF9fdXNlY29uZHNfdCBfX2ludGVydmFsKQogICAgIDsKCgoKZXh0 ZXJuIGludCB1c2xlZXAgKF9fdXNlY29uZHNfdCBfX3VzZWNvbmRzKSA7CgoKCgoKZXh0ZXJuIGlu dCBwYXVzZSAodm9pZCkgOwoKCgpleHRlcm4gaW50IGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmls ZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApCiAgICAgOwoKCgpleHRlcm4gaW50 IGZjaG93biAoaW50IF9fZmQsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKSA7CgoK CgpleHRlcm4gaW50IGxjaG93biAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25l ciwgX19naWRfdCBfX2dyb3VwKQogICAgIDsKCgoKCmV4dGVybiBpbnQgY2hkaXIgKF9fY29uc3Qg Y2hhciAqX19wYXRoKSA7CgoKCmV4dGVybiBpbnQgZmNoZGlyIChpbnQgX19mZCkgOwojIDQyMyAi L3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBjaGFyICpnZXRjd2QgKGNoYXIgKl9fYnVm LCBzaXplX3QgX19zaXplKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmdldF9jdXJyZW50X2Rpcl9uYW1l ICh2b2lkKSA7CgoKCgoKCmV4dGVybiBjaGFyICpnZXR3ZCAoY2hhciAqX19idWYpIDsKCgoKCmV4 dGVybiBpbnQgZHVwIChpbnQgX19mZCkgOwoKCmV4dGVybiBpbnQgZHVwMiAoaW50IF9fZmQsIGlu dCBfX2ZkMikgOwoKCmV4dGVybiBjaGFyICoqX19lbnZpcm9uOwoKZXh0ZXJuIGNoYXIgKiplbnZp cm9uOwoKCgoKCmV4dGVybiBpbnQgZXhlY3ZlIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAq X19jb25zdCBfX2FyZ3ZbXSwKICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29uc3QgX19lbnZw W10pIDsKCgoKCmV4dGVybiBpbnQgZmV4ZWN2ZSAoaW50IF9fZmQsIGNoYXIgKl9fY29uc3QgX19h cmd2W10sIGNoYXIgKl9fY29uc3QgX19lbnZwW10pCiAgICAgOwoKCgoKZXh0ZXJuIGludCBleGVj diAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2W10pIDsKCgoKZXh0 ZXJuIGludCBleGVjbGUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJn LCAuLi4pIDsKCgoKZXh0ZXJuIGludCBleGVjbCAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29u c3QgY2hhciAqX19hcmcsIC4uLikgOwoKCgpleHRlcm4gaW50IGV4ZWN2cCAoX19jb25zdCBjaGFy ICpfX2ZpbGUsIGNoYXIgKl9fY29uc3QgX19hcmd2W10pIDsKCgoKCmV4dGVybiBpbnQgZXhlY2xw IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSA7CgoKCgpl eHRlcm4gaW50IG5pY2UgKGludCBfX2luYykgOwoKCgoKZXh0ZXJuIHZvaWQgX2V4aXQgKGludCBf X3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2NvbmZu YW1lLmgiIDMKZW51bQogIHsKICAgIF9QQ19MSU5LX01BWCwKCiAgICBfUENfTUFYX0NBTk9OLAoK ICAgIF9QQ19NQVhfSU5QVVQsCgogICAgX1BDX05BTUVfTUFYLAoKICAgIF9QQ19QQVRIX01BWCwK CiAgICBfUENfUElQRV9CVUYsCgogICAgX1BDX0NIT1dOX1JFU1RSSUNURUQsCgogICAgX1BDX05P X1RSVU5DLAoKICAgIF9QQ19WRElTQUJMRSwKCiAgICBfUENfU1lOQ19JTywKCiAgICBfUENfQVNZ TkNfSU8sCgogICAgX1BDX1BSSU9fSU8sCgogICAgX1BDX1NPQ0tfTUFYQlVGLAoKICAgIF9QQ19G SUxFU0laRUJJVFMsCgogICAgX1BDX1JFQ19JTkNSX1hGRVJfU0laRSwKCiAgICBfUENfUkVDX01B WF9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19NSU5fWEZFUl9TSVpFLAoKICAgIF9QQ19SRUNfWEZF Ul9BTElHTgoKICB9OwoKCmVudW0KICB7CiAgICBfU0NfQVJHX01BWCwKCiAgICBfU0NfQ0hJTERf TUFYLAoKICAgIF9TQ19DTEtfVENLLAoKICAgIF9TQ19OR1JPVVBTX01BWCwKCiAgICBfU0NfT1BF Tl9NQVgsCgogICAgX1NDX1NUUkVBTV9NQVgsCgogICAgX1NDX1RaTkFNRV9NQVgsCgogICAgX1ND X0pPQl9DT05UUk9MLAoKICAgIF9TQ19TQVZFRF9JRFMsCgogICAgX1NDX1JFQUxUSU1FX1NJR05B TFMsCgogICAgX1NDX1BSSU9SSVRZX1NDSEVEVUxJTkcsCgogICAgX1NDX1RJTUVSUywKCiAgICBf U0NfQVNZTkNIUk9OT1VTX0lPLAoKICAgIF9TQ19QUklPUklUSVpFRF9JTywKCiAgICBfU0NfU1lO Q0hST05JWkVEX0lPLAoKICAgIF9TQ19GU1lOQywKCiAgICBfU0NfTUFQUEVEX0ZJTEVTLAoKICAg IF9TQ19NRU1MT0NLLAoKICAgIF9TQ19NRU1MT0NLX1JBTkdFLAoKICAgIF9TQ19NRU1PUllfUFJP VEVDVElPTiwKCiAgICBfU0NfTUVTU0FHRV9QQVNTSU5HLAoKICAgIF9TQ19TRU1BUEhPUkVTLAoK ICAgIF9TQ19TSEFSRURfTUVNT1JZX09CSkVDVFMsCgogICAgX1NDX0FJT19MSVNUSU9fTUFYLAoK ICAgIF9TQ19BSU9fTUFYLAoKICAgIF9TQ19BSU9fUFJJT19ERUxUQV9NQVgsCgogICAgX1NDX0RF TEFZVElNRVJfTUFYLAoKICAgIF9TQ19NUV9PUEVOX01BWCwKCiAgICBfU0NfTVFfUFJJT19NQVgs CgogICAgX1NDX1ZFUlNJT04sCgogICAgX1NDX1BBR0VTSVpFLAoKCiAgICBfU0NfUlRTSUdfTUFY LAoKICAgIF9TQ19TRU1fTlNFTVNfTUFYLAoKICAgIF9TQ19TRU1fVkFMVUVfTUFYLAoKICAgIF9T Q19TSUdRVUVVRV9NQVgsCgogICAgX1NDX1RJTUVSX01BWCwKCgoKCiAgICBfU0NfQkNfQkFTRV9N QVgsCgogICAgX1NDX0JDX0RJTV9NQVgsCgogICAgX1NDX0JDX1NDQUxFX01BWCwKCiAgICBfU0Nf QkNfU1RSSU5HX01BWCwKCiAgICBfU0NfQ09MTF9XRUlHSFRTX01BWCwKCiAgICBfU0NfRVFVSVZf Q0xBU1NfTUFYLAoKICAgIF9TQ19FWFBSX05FU1RfTUFYLAoKICAgIF9TQ19MSU5FX01BWCwKCiAg ICBfU0NfUkVfRFVQX01BWCwKCiAgICBfU0NfQ0hBUkNMQVNTX05BTUVfTUFYLAoKCiAgICBfU0Nf Ml9WRVJTSU9OLAoKICAgIF9TQ18yX0NfQklORCwKCiAgICBfU0NfMl9DX0RFViwKCiAgICBfU0Nf Ml9GT1JUX0RFViwKCiAgICBfU0NfMl9GT1JUX1JVTiwKCiAgICBfU0NfMl9TV19ERVYsCgogICAg X1NDXzJfTE9DQUxFREVGLAoKCiAgICBfU0NfUElJLAoKICAgIF9TQ19QSUlfWFRJLAoKICAgIF9T Q19QSUlfU09DS0VULAoKICAgIF9TQ19QSUlfSU5URVJORVQsCgogICAgX1NDX1BJSV9PU0ksCgog ICAgX1NDX1BPTEwsCgogICAgX1NDX1NFTEVDVCwKCiAgICBfU0NfVUlPX01BWElPViwKCiAgICBf U0NfSU9WX01BWCA9IF9TQ19VSU9fTUFYSU9WLAoKICAgIF9TQ19QSUlfSU5URVJORVRfU1RSRUFN LAoKICAgIF9TQ19QSUlfSU5URVJORVRfREdSQU0sCgogICAgX1NDX1BJSV9PU0lfQ09UUywKCiAg ICBfU0NfUElJX09TSV9DTFRTLAoKICAgIF9TQ19QSUlfT1NJX00sCgogICAgX1NDX1RfSU9WX01B WCwKCgoKICAgIF9TQ19USFJFQURTLAoKICAgIF9TQ19USFJFQURfU0FGRV9GVU5DVElPTlMsCgog ICAgX1NDX0dFVEdSX1JfU0laRV9NQVgsCgogICAgX1NDX0dFVFBXX1JfU0laRV9NQVgsCgogICAg X1NDX0xPR0lOX05BTUVfTUFYLAoKICAgIF9TQ19UVFlfTkFNRV9NQVgsCgogICAgX1NDX1RIUkVB RF9ERVNUUlVDVE9SX0lURVJBVElPTlMsCgogICAgX1NDX1RIUkVBRF9LRVlTX01BWCwKCiAgICBf U0NfVEhSRUFEX1NUQUNLX01JTiwKCiAgICBfU0NfVEhSRUFEX1RIUkVBRFNfTUFYLAoKICAgIF9T Q19USFJFQURfQVRUUl9TVEFDS0FERFIsCgogICAgX1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRSwK CiAgICBfU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcsCgogICAgX1NDX1RIUkVBRF9QUklP X0lOSEVSSVQsCgogICAgX1NDX1RIUkVBRF9QUklPX1BST1RFQ1QsCgogICAgX1NDX1RIUkVBRF9Q Uk9DRVNTX1NIQVJFRCwKCgogICAgX1NDX05QUk9DRVNTT1JTX0NPTkYsCgogICAgX1NDX05QUk9D RVNTT1JTX09OTE4sCgogICAgX1NDX1BIWVNfUEFHRVMsCgogICAgX1NDX0FWUEhZU19QQUdFUywK CiAgICBfU0NfQVRFWElUX01BWCwKCiAgICBfU0NfUEFTU19NQVgsCgoKICAgIF9TQ19YT1BFTl9W RVJTSU9OLAoKICAgIF9TQ19YT1BFTl9YQ1VfVkVSU0lPTiwKCiAgICBfU0NfWE9QRU5fVU5JWCwK CiAgICBfU0NfWE9QRU5fQ1JZUFQsCgogICAgX1NDX1hPUEVOX0VOSF9JMThOLAoKICAgIF9TQ19Y T1BFTl9TSE0sCgoKICAgIF9TQ18yX0NIQVJfVEVSTSwKCiAgICBfU0NfMl9DX1ZFUlNJT04sCgog ICAgX1NDXzJfVVBFLAoKCiAgICBfU0NfWE9QRU5fWFBHMiwKCiAgICBfU0NfWE9QRU5fWFBHMywK CiAgICBfU0NfWE9QRU5fWFBHNCwKCgogICAgX1NDX0NIQVJfQklULAoKICAgIF9TQ19DSEFSX01B WCwKCiAgICBfU0NfQ0hBUl9NSU4sCgogICAgX1NDX0lOVF9NQVgsCgogICAgX1NDX0lOVF9NSU4s CgogICAgX1NDX0xPTkdfQklULAoKICAgIF9TQ19XT1JEX0JJVCwKCiAgICBfU0NfTUJfTEVOX01B WCwKCiAgICBfU0NfTlpFUk8sCgogICAgX1NDX1NTSVpFX01BWCwKCiAgICBfU0NfU0NIQVJfTUFY LAoKICAgIF9TQ19TQ0hBUl9NSU4sCgogICAgX1NDX1NIUlRfTUFYLAoKICAgIF9TQ19TSFJUX01J TiwKCiAgICBfU0NfVUNIQVJfTUFYLAoKICAgIF9TQ19VSU5UX01BWCwKCiAgICBfU0NfVUxPTkdf TUFYLAoKICAgIF9TQ19VU0hSVF9NQVgsCgoKICAgIF9TQ19OTF9BUkdNQVgsCgogICAgX1NDX05M X0xBTkdNQVgsCgogICAgX1NDX05MX01TR01BWCwKCiAgICBfU0NfTkxfTk1BWCwKCiAgICBfU0Nf TkxfU0VUTUFYLAoKICAgIF9TQ19OTF9URVhUTUFYLAoKCiAgICBfU0NfWEJTNV9JTFAzMl9PRkYz MiwKCiAgICBfU0NfWEJTNV9JTFAzMl9PRkZCSUcsCgogICAgX1NDX1hCUzVfTFA2NF9PRkY2NCwK CiAgICBfU0NfWEJTNV9MUEJJR19PRkZCSUcsCgoKICAgIF9TQ19YT1BFTl9MRUdBQ1ksCgogICAg X1NDX1hPUEVOX1JFQUxUSU1FLAoKICAgIF9TQ19YT1BFTl9SRUFMVElNRV9USFJFQURTLAoKCiAg ICBfU0NfQURWSVNPUllfSU5GTywKCiAgICBfU0NfQkFSUklFUlMsCgogICAgX1NDX0JBU0UsCgog ICAgX1NDX0NfTEFOR19TVVBQT1JULAoKICAgIF9TQ19DX0xBTkdfU1VQUE9SVF9SLAoKICAgIF9T Q19DTE9DS19TRUxFQ1RJT04sCgogICAgX1NDX0NQVVRJTUUsCgogICAgX1NDX1RIUkVBRF9DUFVU SU1FLAoKICAgIF9TQ19ERVZJQ0VfSU8sCgogICAgX1NDX0RFVklDRV9TUEVDSUZJQywKCiAgICBf U0NfREVWSUNFX1NQRUNJRklDX1IsCgogICAgX1NDX0ZEX01HTVQsCgogICAgX1NDX0ZJRk8sCgog ICAgX1NDX1BJUEUsCgogICAgX1NDX0ZJTEVfQVRUUklCVVRFUywKCiAgICBfU0NfRklMRV9MT0NL SU5HLAoKICAgIF9TQ19GSUxFX1NZU1RFTSwKCiAgICBfU0NfTU9OT1RPTklDX0NMT0NLLAoKICAg IF9TQ19NVUxUSVBMRV9QUk9DRVNTLAoKICAgIF9TQ19TSU5HTEVfUFJPQ0VTUywKCiAgICBfU0Nf TkVUV09SS0lORywKCiAgICBfU0NfUkVBREVSX1dSSVRFUl9MT0NLUywKCiAgICBfU0NfU1BJTl9M T0NLUywKCiAgICBfU0NfUkVHRVhQLAoKICAgIF9TQ19SRUdFWF9WRVJTSU9OLAoKICAgIF9TQ19T SEVMTCwKCiAgICBfU0NfU0lHTkFMUywKCiAgICBfU0NfU1BBV04sCgogICAgX1NDX1NQT1JBRElD X1NFUlZFUiwKCiAgICBfU0NfVEhSRUFEX1NQT1JBRElDX1NFUlZFUiwKCiAgICBfU0NfU1lTVEVN X0RBVEFCQVNFLAoKICAgIF9TQ19TWVNURU1fREFUQUJBU0VfUiwKCiAgICBfU0NfVElNRU9VVFMs CgogICAgX1NDX1RZUEVEX01FTU9SWV9PQkpFQ1RTLAoKICAgIF9TQ19VU0VSX0dST1VQUywKCiAg ICBfU0NfVVNFUl9HUk9VUFNfUiwKCiAgICBfU0NfMl9QQlMsCgogICAgX1NDXzJfUEJTX0FDQ09V TlRJTkcsCgogICAgX1NDXzJfUEJTX0xPQ0FURSwKCiAgICBfU0NfMl9QQlNfTUVTU0FHRSwKCiAg ICBfU0NfMl9QQlNfVFJBQ0ssCgogICAgX1NDX1NZTUxPT1AsCgogICAgX1NDX1NUUkVBTVMsCgog ICAgX1NDXzJfUEJTX0NIRUNLUE9JTlQKCiAgfTsKCgoKCgplbnVtCiAgewogICAgX0NTX1BBVEgK CgoKCiAgICAsCiAgICBfQ1NfTEZTX0NGTEFHUyA9IDEwMDAsCgogICAgX0NTX0xGU19MREZMQUdT LAoKICAgIF9DU19MRlNfTElCUywKCiAgICBfQ1NfTEZTX0xJTlRGTEFHUywKCiAgICBfQ1NfTEZT NjRfQ0ZMQUdTLAoKICAgIF9DU19MRlM2NF9MREZMQUdTLAoKICAgIF9DU19MRlM2NF9MSUJTLAoK ICAgIF9DU19MRlM2NF9MSU5URkxBR1MKCgoKCiAgICAsCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYz Ml9DRkxBR1MgPSAxMTAwLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xERkxBR1MsCgogICAg X0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElCUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MSU5U RkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9J TFAzMl9PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElCUywKCiAg ICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZG NjRfQ0ZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTERGTEFHUywKCiAgICBfQ1NfWEJT NV9MUDY0X09GRjY0X0xJQlMsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9MSU5URkxBR1MsCgog ICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZC SUdfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElCUywKCiAgICBfQ1NfWEJT NV9MUEJJR19PRkZCSUdfTElOVEZMQUdTCgoKICB9OwojIDUwMSAiL3Vzci9pbmNsdWRlL3VuaXN0 ZC5oIiAyIDMKCgpleHRlcm4gbG9uZyBpbnQgcGF0aGNvbmYgKF9fY29uc3QgY2hhciAqX19wYXRo LCBpbnQgX19uYW1lKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGZwYXRoY29uZiAoaW50IF9fZmQsIGlu dCBfX25hbWUpIDsKCgpleHRlcm4gbG9uZyBpbnQgc3lzY29uZiAoaW50IF9fbmFtZSkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gc2l6ZV90IGNvbmZzdHIgKGludCBfX25h bWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4pIDsKCgoKCmV4dGVybiBfX3BpZF90IGdldHBp ZCAodm9pZCkgOwoKCmV4dGVybiBfX3BpZF90IGdldHBwaWQgKHZvaWQpIDsKCgoKCmV4dGVybiBf X3BpZF90IGdldHBncnAgKHZvaWQpIDsKIyA1MzYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpl eHRlcm4gX19waWRfdCBfX2dldHBnaWQgKF9fcGlkX3QgX19waWQpIDsKCmV4dGVybiBfX3BpZF90 IGdldHBnaWQgKF9fcGlkX3QgX19waWQpIDsKCgoKCgoKZXh0ZXJuIGludCBzZXRwZ2lkIChfX3Bp ZF90IF9fcGlkLCBfX3BpZF90IF9fcGdpZCkgOwojIDU2MiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o IiAzCmV4dGVybiBpbnQgc2V0cGdycCAodm9pZCkgOwojIDU4MCAiL3Vzci9pbmNsdWRlL3VuaXN0 ZC5oIiAzCmV4dGVybiBfX3BpZF90IHNldHNpZCAodm9pZCkgOwoKCgpleHRlcm4gX19waWRfdCBn ZXRzaWQgKF9fcGlkX3QgX19waWQpIDsKCgoKZXh0ZXJuIF9fdWlkX3QgZ2V0dWlkICh2b2lkKSA7 CgoKZXh0ZXJuIF9fdWlkX3QgZ2V0ZXVpZCAodm9pZCkgOwoKCmV4dGVybiBfX2dpZF90IGdldGdp ZCAodm9pZCkgOwoKCmV4dGVybiBfX2dpZF90IGdldGVnaWQgKHZvaWQpIDsKCgoKCmV4dGVybiBp bnQgZ2V0Z3JvdXBzIChpbnQgX19zaXplLCBfX2dpZF90IF9fbGlzdFtdKSA7CgoKCmV4dGVybiBp bnQgZ3JvdXBfbWVtYmVyIChfX2dpZF90IF9fZ2lkKSA7CgoKCgoKCmV4dGVybiBpbnQgc2V0dWlk IChfX3VpZF90IF9fdWlkKSA7CgoKCgpleHRlcm4gaW50IHNldHJldWlkIChfX3VpZF90IF9fcnVp ZCwgX191aWRfdCBfX2V1aWQpIDsKCgoKCmV4dGVybiBpbnQgc2V0ZXVpZCAoX191aWRfdCBfX3Vp ZCkgOwoKCgoKCgpleHRlcm4gaW50IHNldGdpZCAoX19naWRfdCBfX2dpZCkgOwoKCgoKZXh0ZXJu IGludCBzZXRyZWdpZCAoX19naWRfdCBfX3JnaWQsIF9fZ2lkX3QgX19lZ2lkKSA7CgoKCgpleHRl cm4gaW50IHNldGVnaWQgKF9fZ2lkX3QgX19naWQpIDsKCgoKCgoKZXh0ZXJuIF9fcGlkX3QgZm9y ayAodm9pZCkgOwoKCgoKCgpleHRlcm4gX19waWRfdCB2Zm9yayAodm9pZCkgOwoKCgoKCmV4dGVy biBjaGFyICp0dHluYW1lIChpbnQgX19mZCkgOwoKCgpleHRlcm4gaW50IHR0eW5hbWVfciAoaW50 IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIDsKCgoKZXh0ZXJuIGludCBpc2F0 dHkgKGludCBfX2ZkKSA7CgoKCgoKZXh0ZXJuIGludCB0dHlzbG90ICh2b2lkKSA7CgoKCgpleHRl cm4gaW50IGxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8pIDsK CgoKZXh0ZXJuIGludCBzeW1saW5rIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFy ICpfX3RvKSA7CgoKCgpleHRlcm4gaW50IHJlYWRsaW5rIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19wYXRoLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBz aXplX3QgX19sZW4pIDsKCgoKZXh0ZXJuIGludCB1bmxpbmsgKF9fY29uc3QgY2hhciAqX19uYW1l KSA7CgoKZXh0ZXJuIGludCBybWRpciAoX19jb25zdCBjaGFyICpfX3BhdGgpIDsKCgoKZXh0ZXJu IF9fcGlkX3QgdGNnZXRwZ3JwIChpbnQgX19mZCkgOwoKCmV4dGVybiBpbnQgdGNzZXRwZ3JwIChp bnQgX19mZCwgX19waWRfdCBfX3BncnBfaWQpIDsKCgoKZXh0ZXJuIGNoYXIgKmdldGxvZ2luICh2 b2lkKSA7CgoKCgpleHRlcm4gaW50IGdldGxvZ2luX3IgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9f bmFtZV9sZW4pIDsKCgoKCmV4dGVybiBpbnQgc2V0bG9naW4gKF9fY29uc3QgY2hhciAqX19uYW1l KSA7CiMgNzI2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ2V0 b3B0LmgiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGNoYXIgKm9w dGFyZzsKIyA2MSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBpbnQgb3B0aW5kOwoK CgoKZXh0ZXJuIGludCBvcHRlcnI7CgoKCmV4dGVybiBpbnQgb3B0b3B0OwojIDE0NSAiL3Vzci9p bmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBpbnQgZ2V0b3B0IChpbnQgX19hcmdjLCBjaGFyICpj b25zdCAqX19hcmd2LCBjb25zdCBjaGFyICpfX3Nob3J0b3B0cyk7CiMgNzI3ICIvdXNyL2luY2x1 ZGUvdW5pc3RkLmgiIDIgMwoKCgoKCgoKZXh0ZXJuIGludCBnZXRob3N0bmFtZSAoY2hhciAqX19u YW1lLCBzaXplX3QgX19sZW4pIDsKCgoKCgoKZXh0ZXJuIGludCBzZXRob3N0bmFtZSAoX19jb25z dCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgOwoKCgpleHRlcm4gaW50IHNldGhvc3RpZCAo bG9uZyBpbnQgX19pZCkgOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFtZSAoY2hhciAqX19u YW1lLCBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBzZXRkb21haW5uYW1lIChfX2NvbnN0IGNo YXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSA7CgoKCgoKZXh0ZXJuIGludCB2aGFuZ3VwICh2b2lk KSA7CgoKZXh0ZXJuIGludCByZXZva2UgKF9fY29uc3QgY2hhciAqX19maWxlKSA7CgoKCgoKCgpl eHRlcm4gaW50IHByb2ZpbCAodW5zaWduZWQgc2hvcnQgaW50ICpfX3NhbXBsZV9idWZmZXIsIHNp emVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vZmZzZXQsIHVuc2lnbmVk IGludCBfX3NjYWxlKSA7CgoKCgoKZXh0ZXJuIGludCBhY2N0IChfX2NvbnN0IGNoYXIgKl9fbmFt ZSkgOwoKCgpleHRlcm4gY2hhciAqZ2V0dXNlcnNoZWxsICh2b2lkKSA7CmV4dGVybiB2b2lkIGVu ZHVzZXJzaGVsbCAodm9pZCkgOwpleHRlcm4gdm9pZCBzZXR1c2Vyc2hlbGwgKHZvaWQpIDsKCgoK CgpleHRlcm4gaW50IGRhZW1vbiAoaW50IF9fbm9jaGRpciwgaW50IF9fbm9jbG9zZSkgOwoKCgoK CgpleHRlcm4gaW50IGNocm9vdCAoX19jb25zdCBjaGFyICpfX3BhdGgpIDsKCgoKZXh0ZXJuIGNo YXIgKmdldHBhc3MgKF9fY29uc3QgY2hhciAqX19wcm9tcHQpIDsKCgoKCgpleHRlcm4gaW50IGZz eW5jIChpbnQgX19mZCkgOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgZ2V0aG9zdGlkICh2b2lkKSA7 CgoKZXh0ZXJuIHZvaWQgc3luYyAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBnZXRwYWdlc2l6ZSAo dm9pZCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCB0cnVuY2F0 ZSAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmX3QgX19sZW5ndGgpIDsKIyA4MzYgIi91c3Iv aW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHRydW5jYXRlNjQgKF9fY29uc3QgY2hhciAq X19maWxlLCBfX29mZjY0X3QgX19sZW5ndGgpIDsKCgoKCmV4dGVybiBpbnQgZnRydW5jYXRlIChp bnQgX19mZCwgX19vZmZfdCBfX2xlbmd0aCkgOwojIDg1MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o IiAzCmV4dGVybiBpbnQgZnRydW5jYXRlNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19sZW5ndGgp IDsKCgoKCgpleHRlcm4gaW50IGdldGR0YWJsZXNpemUgKHZvaWQpIDsKIyA4NjYgIi91c3IvaW5j bHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGJyayAodm9pZCAqX19hZGRyKSA7CgoKCgoKZXh0 ZXJuIHZvaWQgKnNicmsgKGludHB0cl90IF9fZGVsdGEpIDsKIyA4ODcgIi91c3IvaW5jbHVkZS91 bmlzdGQuaCIgMwpleHRlcm4gbG9uZyBpbnQgc3lzY2FsbCAobG9uZyBpbnQgX19zeXNubywgLi4u KSA7CiMgOTA3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBsb2NrZiAoaW50 IF9fZmQsIGludCBfX2NtZCwgX19vZmZfdCBfX2xlbikgOwojIDkxNyAiL3Vzci9pbmNsdWRlL3Vu aXN0ZC5oIiAzCmV4dGVybiBpbnQgbG9ja2Y2NCAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmY2 NF90IF9fbGVuKSA7CiMgOTM4ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBm ZGF0YXN5bmMgKGludCBfX2ZpbGRlcykgOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKmNyeXB0IChfX2Nv bnN0IGNoYXIgKl9fa2V5LCBfX2NvbnN0IGNoYXIgKl9fc2FsdCkgOwoKCgpleHRlcm4gdm9pZCBl bmNyeXB0IChjaGFyICpfX2Jsb2NrLCBpbnQgX19lZGZsYWcpIDsKCgoKCgoKZXh0ZXJuIHZvaWQg c3dhYiAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fZnJvbSwgdm9pZCAqX19yZXN0cmljdCBf X3RvLAogICAgICAgICAgICAgICAgICBzc2l6ZV90IF9fbikgOwoKCgoKCgoKZXh0ZXJuIGNoYXIg KmN0ZXJtaWQgKGNoYXIgKl9fcykgOwojIDk4MyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4 dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIDsKCgoKIyA1NSAiLi4vcHJv Z3MvcHJvZ3MucHJpdi5oIiAyCiMgNjYgIi4uL3Byb2dzL3Byb2dzLnByaXYuaCIKIyAxICIvdXNy L2xpYi9nY2MtbGliL2NyaXMtYXhpcy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9saW1pdHMuaCIg MSAzCiMgMTEgIi91c3IvbGliL2djYy1saWIvY3Jpcy1heGlzLWxpbnV4LWdudS8zLjIuMi9pbmNs dWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9jcmlzLWF4aXMtbGludXgtZ251 LzMuMi4yL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbGliL2djYy1s aWIvY3Jpcy1heGlzLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMzIg Ii91c3IvbGliL2djYy1saWIvY3Jpcy1heGlzLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL2xpbWl0 cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxNDQgIi91c3IvaW5jbHVk ZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzCiMg MTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9sb2NhbF9saW0uaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNs dWRlL2JpdHMvbG9jYWxfbGltLmgiIDIgMwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgx X2xpbS5oIiAyIDMKIyAxNDUgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMKIyAxNDkgIi91c3IvaW5jbHVkZS9saW1p dHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDEgMwojIDM0 ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3N0ZGlvX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIg MwojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAxMzcgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xp bS5oIiAyIDMKIyAxNTMgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTMzICIvdXNyL2xp Yi9nY2MtbGliL2NyaXMtYXhpcy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAz CiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9jcmlzLWF4aXMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUv c3lzbGltaXRzLmgiIDIgMwojIDEyICIvdXNyL2xpYi9nY2MtbGliL2NyaXMtYXhpcy1saW51eC1n bnUvMy4yLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgNjcgIi4uL3Byb2dzL3Byb2dzLnByaXYu aCIgMgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAxIDMKIyAyOCAiL3Vzci9pbmNs dWRlL2RpcmVudC5oIiAzCgojIDYyICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvYml0cy9kaXJlbnQuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL2RpcmVu dC5oIiAzCnN0cnVjdCBkaXJlbnQKICB7CgogICAgX19pbm9fdCBkX2lubzsKICAgIF9fb2ZmX3Qg ZF9vZmY7CgoKCgogICAgdW5zaWduZWQgc2hvcnQgaW50IGRfcmVjbGVuOwogICAgdW5zaWduZWQg Y2hhciBkX3R5cGU7CiAgICBjaGFyIGRfbmFtZVsyNTZdOwogIH07CgoKc3RydWN0IGRpcmVudDY0 CiAgewogICAgX19pbm82NF90IGRfaW5vOwogICAgX19vZmY2NF90IGRfb2ZmOwogICAgdW5zaWdu ZWQgc2hvcnQgaW50IGRfcmVjbGVuOwogICAgdW5zaWduZWQgY2hhciBkX3R5cGU7CiAgICBjaGFy IGRfbmFtZVsyNTZdOwogIH07CiMgNjMgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMiAzCiMgOTgg Ii91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwplbnVtCiAgewogICAgRFRfVU5LTk9XTiA9IDAsCgog ICAgRFRfRklGTyA9IDEsCgogICAgRFRfQ0hSID0gMiwKCiAgICBEVF9ESVIgPSA0LAoKICAgIERU X0JMSyA9IDYsCgogICAgRFRfUkVHID0gOCwKCiAgICBEVF9MTksgPSAxMCwKCiAgICBEVF9TT0NL ID0gMTIsCgogICAgRFRfV0hUID0gMTQKCiAgfTsKIyAxMjggIi91c3IvaW5jbHVkZS9kaXJlbnQu aCIgMwp0eXBlZGVmIHN0cnVjdCBfX2RpcnN0cmVhbSBESVI7CgoKCmV4dGVybiBESVIgKm9wZW5k aXIgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCmV4dGVybiBpbnQgY2xvc2VkaXIgKERJUiAq X19kaXJwKSA7CiMgMTQ2ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKZXh0ZXJuIHN0cnVjdCBk aXJlbnQgKnJlYWRkaXIgKERJUiAqX19kaXJwKSA7CiMgMTU2ICIvdXNyL2luY2x1ZGUvZGlyZW50 LmgiIDMKZXh0ZXJuIHN0cnVjdCBkaXJlbnQ2NCAqcmVhZGRpcjY0IChESVIgKl9fZGlycCkgOwoK CgoKCgpleHRlcm4gaW50IHJlYWRkaXJfciAoRElSICpfX3Jlc3RyaWN0IF9fZGlycCwKICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQgKl9fcmVzdHJpY3QgX19lbnRyeSwKICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CiMg MTc5ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKZXh0ZXJuIGludCByZWFkZGlyNjRfciAoRElS ICpfX3Jlc3RyaWN0IF9fZGlycCwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVu dDY0ICpfX3Jlc3RyaWN0IF9fZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBk aXJlbnQ2NCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCgoKCmV4dGVybiB2b2lkIHJld2luZGRp ciAoRElSICpfX2RpcnApIDsKCgoKCgpleHRlcm4gdm9pZCBzZWVrZGlyIChESVIgKl9fZGlycCwg bG9uZyBpbnQgX19wb3MpIDsKCgpleHRlcm4gbG9uZyBpbnQgdGVsbGRpciAoRElSICpfX2RpcnAp IDsKCgoKCgpleHRlcm4gaW50IGRpcmZkIChESVIgKl9fZGlycCkgOwojIDIyMCAiL3Vzci9pbmNs dWRlL2RpcmVudC5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9jcmlzLWF4aXMtbGludXgtZ251 LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDIyMSAiL3Vzci9pbmNsdWRlL2RpcmVudC5o IiAyIDMKCgoKCgoKZXh0ZXJuIGludCBzY2FuZGlyIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19kaXIsCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudCAqKipfX3Jlc3RyaWN0IF9f bmFtZWxpc3QsCiAgICAgICAgICAgICAgICAgICAgaW50ICgqX19zZWxlY3RvcikgKF9fY29uc3Qg c3RydWN0IGRpcmVudCAqKSwKICAgICAgICAgICAgICAgICAgICBpbnQgKCpfX2NtcCkgKF9fY29u c3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKikpIDsKIyAyNDcgIi91c3IvaW5jbHVkZS9kaXJlbnQu aCIgMwpleHRlcm4gaW50IHNjYW5kaXI2NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGly LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudDY0ICoqKl9fcmVzdHJpY3QgX19u YW1lbGlzdCwKICAgICAgICAgICAgICAgICAgICAgIGludCAoKl9fc2VsZWN0b3IpIChfX2NvbnN0 IHN0cnVjdCBkaXJlbnQ2NCAqKSwKICAgICAgICAgICAgICAgICAgICAgIGludCAoKl9fY21wKSAo X19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKSkgOwoKCgoKZXh0ZXJuIGludCBhbHBoYXNv cnQgKF9fY29uc3Qgdm9pZCAqX19lMSwgX19jb25zdCB2b2lkICpfX2UyKQogICAgIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwojIDI2OSAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAzCmV4dGVy biBpbnQgYWxwaGFzb3J0NjQgKF9fY29uc3Qgdm9pZCAqX19lMSwgX19jb25zdCB2b2lkICpfX2Uy KQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgdmVyc2lv bnNvcnQgKF9fY29uc3Qgdm9pZCAqX19lMSwgX19jb25zdCB2b2lkICpfX2UyKQogICAgIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwojIDI5MCAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAzCmV4 dGVybiBpbnQgdmVyc2lvbnNvcnQ2NCAoX19jb25zdCB2b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQg Kl9fZTIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CiMgMzAwICIvdXNyL2luY2x1 ZGUvZGlyZW50LmgiIDMKZXh0ZXJuIF9fc3NpemVfdCBnZXRkaXJlbnRyaWVzIChpbnQgX19mZCwg Y2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgX19uYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vZmZfdCAq X19yZXN0cmljdCBfX2Jhc2VwKSA7CiMgMzE2ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKZXh0 ZXJuIF9fc3NpemVfdCBnZXRkaXJlbnRyaWVzNjQgKGludCBfX2ZkLCBjaGFyICpfX3Jlc3RyaWN0 IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmJ5dGVz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vZmY2NF90ICpfX3Jlc3RyaWN0 IF9fYmFzZXApIDsKCgoKCgojIDczICIuLi9wcm9ncy9wcm9ncy5wcml2LmgiIDIKIyA4OCAiLi4v cHJvZ3MvcHJvZ3MucHJpdi5oIgojIDEgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAxIDMKIyAzMiAi L3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8u aCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvbGludXgvZXJybm8uaCIgMSAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FzbS9lcnJuby5oIiAx IDMKIyA1ICIvdXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMiAzCiMgMjYgIi91c3IvaW5jbHVk ZS9iaXRzL2Vycm5vLmgiIDIgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCmV4 dGVybiBpbnQgZXJybm87CgoKZXh0ZXJuIGludCAqX19lcnJub19sb2NhdGlvbiAodm9pZCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDM3ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMiAz CiMgNTUgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVybiBjaGFyICpwcm9ncmFtX2ludm9j YXRpb25fbmFtZSwgKnByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lOwoKCgoKIyA2OSAiL3Vz ci9pbmNsdWRlL2Vycm5vLmgiIDMKdHlwZWRlZiBpbnQgZXJyb3JfdDsKIyA4OSAiLi4vcHJvZ3Mv cHJvZ3MucHJpdi5oIiAyCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAxIDMKIyA0 NyAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBjaGFyICpvcHRhcmc7CiMgNjEgIi91 c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwpleHRlcm4gaW50IG9wdGluZDsKCgoKCmV4dGVybiBpbnQg b3B0ZXJyOwoKCgpleHRlcm4gaW50IG9wdG9wdDsKIyA5NCAiL3Vzci9pbmNsdWRlL2dldG9wdC5o IiAzCnN0cnVjdCBvcHRpb24KewoKICBjb25zdCBjaGFyICpuYW1lOwoKCgoKCiAgaW50IGhhc19h cmc7CiAgaW50ICpmbGFnOwogIGludCB2YWw7Cn07CiMgMTQ1ICIvdXNyL2luY2x1ZGUvZ2V0b3B0 LmgiIDMKZXh0ZXJuIGludCBnZXRvcHQgKGludCBfX2FyZ2MsIGNoYXIgKmNvbnN0ICpfX2FyZ3Ys IGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzKTsKCgoKCgpleHRlcm4gaW50IGdldG9wdF9sb25nIChp bnQgX19hcmdjLCBjaGFyICpjb25zdCAqX19hcmd2LCBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywK ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqX19sb25nb3B0cywg aW50ICpfX2xvbmdpbmQpOwpleHRlcm4gaW50IGdldG9wdF9sb25nX29ubHkgKGludCBfX2FyZ2Ms IGNoYXIgKmNvbnN0ICpfX2FyZ3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqX19zaG9ydG9wdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Ry dWN0IG9wdGlvbiAqX19sb25nb3B0cywgaW50ICpfX2xvbmdpbmQpOwoKCmV4dGVybiBpbnQgX2dl dG9wdF9pbnRlcm5hbCAoaW50IF9fYXJnYywgY2hhciAqY29uc3QgKl9fYXJndiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLCBpbnQgKl9f bG9uZ2luZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19sb25nX29ubHkpOwoj IDk2ICIuLi9wcm9ncy9wcm9ncy5wcml2LmgiIDIKIyAxMDQgIi4uL3Byb2dzL3Byb2dzLnByaXYu aCIKIyAxICIuLi9pbmNsdWRlL2N1cnNlcy5oIiAxCiMgNTggIi4uL2luY2x1ZGUvY3Vyc2VzLmgi CiMgMSAiLi4vaW5jbHVkZS9uY3Vyc2VzX2RsbC5oIiAxCiMgNTkgIi4uL2luY2x1ZGUvY3Vyc2Vz LmgiIDIKIyA5OSAiLi4vaW5jbHVkZS9jdXJzZXMuaCIKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGNo dHlwZTsKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9jcmlzLWF4aXMtbGludXgtZ251LzMuMi4yL2lu Y2x1ZGUvc3RkaW8uaCIgMSAzCiMgMzggIi91c3IvbGliL2djYy1saWIvY3Jpcy1heGlzLWxpbnV4 LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9j cmlzLWF4aXMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQzICIvdXNy L2xpYi9nY2MtbGliL2NyaXMtYXhpcy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAy IDMKIyA1MyAiL3Vzci9saWIvZ2NjLWxpYi9jcmlzLWF4aXMtbGludXgtZ251LzMuMi4yL2luY2x1 ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwojIDYzICIvdXNyL2xp Yi9nY2MtbGliL2NyaXMtYXhpcy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCnR5 cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklMRTsKIyA3MyAiL3Vzci9saWIvZ2NjLWxpYi9jcmlz LWF4aXMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9saWJpby5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDE4ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMK IyAxICIvdXNyL2xpYi9nY2MtbGliL2NyaXMtYXhpcy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgMzU0ICIvdXNyL2xpYi9nY2MtbGliL2NyaXMtYXhpcy1saW51eC1nbnUv My4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7CiMg MTkgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCiMgMjggIi91c3IvaW5jbHVkZS9fR19j b25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9pbmNs dWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2NyaXMtYXhpcy1saW51eC1nbnUv My4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAy IDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVk ZS93Y2hhci5oIiAyIDMKIyA2NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1 Y3QKewogIGludCBfX2NvdW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hh ciBfX3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI5ICIvdXNyL2luY2x1 ZGUvX0dfY29uZmlnLmgiIDIgMwoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAg X19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29m ZjY0X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0OCAi L3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEg MwojIDI4ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5o IiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGli L2NyaXMtYXhpcy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91 c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoK IyAxICIvdXNyL2xpYi9nY2MtbGliL2NyaXMtYXhpcy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoKCgplbnVtCnsK ICBfX0dDT05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIsCiAgX19H Q09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExfT1VUUFVU LAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQsCgog IF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJST1IKfTsK CgoKZW51bQp7CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdOT1JFX0VS Uk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19nY29udl9z dGVwX2RhdGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2djb252X3Ry YW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19nY29udl9z dGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAqLCBp bnQsIGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0IF9fZ2Nv bnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9fZ2Nv bnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVjdCBf X2djb252X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBf X2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgq X19nY29udl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBjaGFy ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5z aWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252 X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYg aW50ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7CnR5 cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3QgX19n Y29udl90cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7CiAgX19n Y29udl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2NvbnZfdHJh bnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVjdCBfX2dj b252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAgc3Ry dWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25zdCBjaGFy ICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1lOwogIGNo YXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2ZjdCBf X2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9fbWluX25l ZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVlZGVkX3Rv OwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAqX19k YXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIgKl9f b3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2ZsYWdzOwoK CgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91c2U7Cgog IF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0cnVj dCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9fZ2Nv bnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9fc3Rl cHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhIFtdOwp9 ICpfX2djb252X3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5cGVkZWYg dW5pb24KewogIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1 Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRh OwogIH0gX19jb21iaW5lZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBf X2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJf dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBp bnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVk ZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19T SV9fKSkpOwojIDMxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNTEgIi91c3IvaW5jbHVk ZS9saWJpby5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9jcmlzLWF4aXMtbGludXgtZ251LzMu Mi4yL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvdXNyL2xpYi9nY2MtbGliL2NyaXMtYXhp cy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92 YV9saXN0IF9fZ251Y192YV9saXN0OwojIDUyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMg MTU4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9J T19GSUxFOwojIDE2OCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19s b2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4 dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5MSAiL3Vzci9p bmNsdWRlL2xpYmlvLmgiIDMKfTsKCgplbnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2 dF9vaywKICBfX2NvZGVjdnRfcGFydGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0 X25vY29udgp9OwojIDI1OSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19GSUxF IHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3Jl YWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAg Y2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19i dWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBj aGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lP X21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2Zp bGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25l ZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFy IF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9jazsKIyAzMDMgIi91c3IvaW5jbHVk ZS9saWJpby5oIiAzCiAgX19vZmY2NF90IF9vZmZzZXQ7CgoKCgoKICB2b2lkICpfX3BhZDE7CiAg dm9pZCAqX19wYWQyOwoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBzaXplb2Yg KGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJ TEUgX0lPX0ZJTEU7CgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19G SUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9f Ml8xX3N0ZG91dF87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87 CiMgMzQyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3Jl YWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoK CgoKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2Nv bnN0IGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19uKTsKCgoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9f b2ZmNjRfdCAqX19wb3MsIGludCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZv aWQgKl9fY29va2llKTsKCgoKCnR5cGVkZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0 aW9uX3Q7CnR5cGVkZWYgX19pb193cml0ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlw ZWRlZiBfX2lvX3NlZWtfZm4gY29va2llX3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Ns b3NlX2ZuIGNvb2tpZV9jbG9zZV9mdW5jdGlvbl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lv X3JlYWRfZm4gKnJlYWQ7CiAgX19pb193cml0ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpz ZWVrOwogIF9faW9fY2xvc2VfZm4gKmNsb3NlOwp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7 CnR5cGVkZWYgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7 CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlOwoKCmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAo c3RydWN0IF9JT19jb29raWVfZmlsZSAqX19jZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5j dGlvbnNfdCBfX2Zucyk7CgoKCgoKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAq KSA7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9fb3ZlcmZs b3cgKF9JT19GSUxFICosIGludCkgOwpleHRlcm4gd2ludF90IF9fd3VuZGVyZmxvdyAoX0lPX0ZJ TEUgKikgOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiB3aW50 X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgOwojIDQyNCAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJu IGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9f ZmVvZiAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAq X19mcCkgOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgOwoK CgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIDsKZXh0ZXJuIHZvaWQg X0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmls ZSAoX0lPX0ZJTEUgKikgOwojIDQ1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGlu dCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0 cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0 cmljdCkgOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNv bnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf bGlzdCkgOwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3Np emVfdCkgOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXpl X3QpIDsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2ZmNjRf dCwgaW50LCBpbnQpIDsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwg X19vZmY2NF90LCBpbnQpIDsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9f RklMRSAqKSA7CiMgNzQgIi91c3IvbGliL2djYy1saWIvY3Jpcy1heGlzLWxpbnV4LWdudS8zLjIu Mi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCBfX25vdF92 YV9saXN0X187CiMgODggIi91c3IvbGliL2djYy1saWIvY3Jpcy1heGlzLWxpbnV4LWdudS8zLjIu Mi9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBfR19mcG9zX3QgZnBvc190OwoKCgoKdHlwZWRl ZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxMzcgIi91c3IvbGliL2djYy1saWIvY3Jpcy1heGlz LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9zdGRpb19saW0uaCIgMSAzCiMgMTM4ICIvdXNyL2xpYi9nY2MtbGliL2NyaXMtYXhpcy1saW51 eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpl eHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwoKCgoKCgpleHRlcm4gaW50 IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSA7CgpleHRlcm4gaW50IHJlbmFtZSAo X19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgOwoKCgoKZXh0ZXJuIEZJ TEUgKnRtcGZpbGUgKHZvaWQpIDsKIyAxNjYgIi91c3IvbGliL2djYy1saWIvY3Jpcy1heGlzLWxp bnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCAo dm9pZCkgOwoKCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgOwoKCgoKZXh0ZXJuIGNo YXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIDsKIyAxODYgIi91c3IvbGliL2djYy1saWIvY3Jpcy1h eGlzLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBu YW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngpCiAgICAgX19hdHRy aWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlIChGSUxFICpfX3N0 cmVhbSkgOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBp bnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmY2xv c2VhbGwgKHZvaWQpIDsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX21vZGVzKSA7CgpleHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJp Y3QgX19zdHJlYW0pIDsKIyAyMzAgIi91c3IvbGliL2djYy1saWIvY3Jpcy1heGlzLWxpbnV4LWdu dS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIDsKZXh0ZXJuIEZJTEUgKmZyZW9wZW42NCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAg ICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoKCgpleHRlcm4gRklMRSAqZmRvcGVuIChp bnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSA7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVu Y29va2llICh2b2lkICpfX3Jlc3RyaWN0IF9fbWFnaWNfY29va2llLAogICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAg ICAgICAgICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jcykgOwoKCmV4 dGVybiBGSUxFICpmbWVtb3BlbiAodm9pZCAqX19zLCBzaXplX3QgX19sZW4sIF9fY29uc3QgY2hh ciAqX19tb2RlcykgOwoKCgoKZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19y ZXN0cmljdCBfX2J1ZmxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9f cmVzdHJpY3QgX19zaXplbG9jKSA7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jl c3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCmV4dGVybiBpbnQg c2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1 ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgOwoKCgoKZXh0 ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jl c3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIDsKCgpl eHRlcm4gdm9pZCBzZXRsaW5lYnVmIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBm cHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHByaW50 ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQg c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCgpleHRlcm4gaW50IHZmcHJpbnRm IChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0 LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgOwoKZXh0ZXJuIGlu dCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9s aXN0IF9fYXJnKQogICAgIDsKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3Qg X19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg ICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSA7CgoKCmV4dGVybiBpbnQgc25wcmludGYgKGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIF9fYXR0cmlidXRlX18g KChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0ZXJuIGludCB2c25wcmludGYg KGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9f YXJnKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkp OwoKCgoKCmV4dGVybiBpbnQgdmFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZiwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192 YV9saXN0IF9fYXJnKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9f LCAyLCAwKSkpOwpleHRlcm4gaW50IF9fYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRy LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwg Li4uKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkp OwpleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgX19h dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKZXh0ZXJuIGlu dCB2ZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwKICAg ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgX19hdHRyaWJ1dGVf XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgZHByaW50ZiAo aW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIF9fYXR0 cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCgoKZXh0ZXJuIGlu dCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGludCBzY2Fu ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQg c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCgoKZXh0ZXJuIGludCB2 ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f Zm9ybWF0LAogICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIF9f YXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0ZXJuIGlu dCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xp c3QgX19hcmcpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMSwg MCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ms CiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBf X2dudWNfdmFfbGlzdCBfX2FyZykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19z Y2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0pIDsK ZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgZ2V0Y2hhciAo dm9pZCkgOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkg OwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIDsKCgoKCmV4dGVybiBpbnQgZmdl dGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQg X19jLCBGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUgKl9f c3RyZWFtKSA7CgoKZXh0ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSA7CgoKCgoKCgpleHRlcm4g aW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJu IGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50 IHB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIDsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUg Kl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkg OwoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwg RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICA7CgoKCmV4dGVybiBjaGFyICpmZ2V0c191 bmxvY2tlZCAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGNoYXIg KmdldHMgKGNoYXIgKl9fcykgOwojIDQzNCAiL3Vzci9saWIvZ2NjLWxpYi9jcmlzLWF4aXMtbGlu dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gX19zc2l6ZV90IF9fZ2V0ZGVs aW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKZXh0ZXJu IF9fc3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGlt aXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry ZWFtKSA7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0cmljdCBfX2xp bmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19u LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkg OwoKCgoKZXh0ZXJuIGludCBmcHV0cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklM RSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICA7CgoKCmV4dGVybiBpbnQgZnB1dHNfdW5sb2Nr ZWQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgoKZXh0ZXJuIGludCBwdXRzIChfX2Nv bnN0IGNoYXIgKl9fcykgOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50IF9fYywgRklMRSAqX19z dHJlYW0pIDsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwg c2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSkgOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAq X19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSA7CgoKCmV4dGVybiBzaXplX3QgZnJlYWRf dW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0pIDsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0 cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQg ZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9fd2hlbmNlKSA7Cgpl eHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gdm9pZCByZXdp bmQgKEZJTEUgKl9fc3RyZWFtKSA7CiMgNDk3ICIvdXNyL2xpYi9nY2MtbGliL2NyaXMtYXhpcy1s aW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvIChGSUxF ICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSA7CgpleHRlcm4gX19vZmZf dCBmdGVsbG8gKEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIDsKCmV4 dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3Bvcykg OwojIDUzMSAiL3Vzci9saWIvZ2NjLWxpYi9jcmlzLWF4aXMtbGludXgtZ251LzMuMi4yL2luY2x1 ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbzY0IChGSUxFICpfX3N0cmVhbSwgX19vZmY2 NF90IF9fb2ZmLCBpbnQgX193aGVuY2UpIDsKZXh0ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklM RSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIDsKZXh0ZXJuIGludCBmc2V0 cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3M2NF90ICpfX3BvcykgOwoKCgpleHRl cm4gdm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmVvZiAoRklM RSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkgOwoKCgpl eHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGlu dCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGZlcnJvcl91bmxv Y2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBj aGFyICpfX3MpIDsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIg Kl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9f Y29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVu byAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxF ICpfX3N0cmVhbSkgOwoKCgoKCgpleHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19j b21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIDsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklM RSAqX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSA7CgoK CgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNoYXIgKl9fcykgOwoKCgoKc3RydWN0IG9ic3RhY2s7 CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3Qg X19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikgOwpleHRlcm4gaW50IG9ic3RhY2tfdnByaW50ZiAoc3RydWN0 IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmdzKSA7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9j a2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxF ICpfX3N0cmVhbSkgOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkg OwojIDYzOCAiL3Vzci9saWIvZ2NjLWxpYi9jcmlzLWF4aXMtbGludXgtZ251LzMuMi4yL2luY2x1 ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDEgMwojIDM5ICIv dXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAzCmV4dGVybiBfX2lubGluZSBpbnQKdnByaW50ZiAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKewog IHJldHVybiB2ZnByaW50ZiAoc3Rkb3V0LCBfX2ZtdCwgX19hcmcpOwp9CgoKZXh0ZXJuIF9faW5s aW5lIGludApnZXRjaGFyICh2b2lkKQp7CiAgcmV0dXJuIF9JT19nZXRjIChzdGRpbik7Cn0KCgoK CmV4dGVybiBfX2lubGluZSBpbnQKZ2V0Y191bmxvY2tlZCAoRklMRSAqX19mcCkKewogIHJldHVy biAoKF9fZnApLT5fSU9fcmVhZF9wdHIgPj0gKF9fZnApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93 IChfX2ZwKSA6ICoodW5zaWduZWQgY2hhciAqKSAoX19mcCktPl9JT19yZWFkX3B0cisrKTsKfQoK CmV4dGVybiBfX2lubGluZSBpbnQKZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkKewogIHJldHVybiAo KHN0ZGluKS0+X0lPX3JlYWRfcHRyID49IChzdGRpbiktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cg KHN0ZGluKSA6ICoodW5zaWduZWQgY2hhciAqKSAoc3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0K CgoKCmV4dGVybiBfX2lubGluZSBpbnQKcHV0Y2hhciAoaW50IF9fYykKewogIHJldHVybiBfSU9f cHV0YyAoX19jLCBzdGRvdXQpOwp9CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CmZwdXRjX3VubG9j a2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9J T193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChf X3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0 cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmUg aW50CnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgo KF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/ IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVk IGNoYXIpICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCmV4dGVy biBfX2lubGluZSBpbnQKcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykKewogIHJldHVybiAoKChz dGRvdXQpLT5fSU9fd3JpdGVfcHRyID49IChzdGRvdXQpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3Zl cmZsb3cgKHN0ZG91dCwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAo KihzdGRvdXQpLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKCgoKZXh0ZXJuIF9faW5s aW5lIF9fc3NpemVfdApnZXRsaW5lIChjaGFyICoqX19saW5lcHRyLCBzaXplX3QgKl9fbiwgRklM RSAqX19zdHJlYW0pCnsKICByZXR1cm4gX19nZXRkZWxpbSAoX19saW5lcHRyLCBfX24sICdcbics IF9fc3RyZWFtKTsKfQoKCgoKCmV4dGVybiBfX2lubGluZSBpbnQKZmVvZl91bmxvY2tlZCAoRklM RSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAw KTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQKZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVh bSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MjApICE9IDApOwp9CiMgNjM5 ICIvdXNyL2xpYi9nY2MtbGliL2NyaXMtYXhpcy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRp by5oIiAyIDMKCgoKIyAxMDIgIi4uL2luY2x1ZGUvY3Vyc2VzLmgiIDIKIyAxICIuLi9pbmNsdWRl L3VuY3RybC5oIiAxCiMgNTQgIi4uL2luY2x1ZGUvdW5jdHJsLmgiCiMgMSAiLi4vaW5jbHVkZS9j dXJzZXMuaCIgMQojIDU1ICIuLi9pbmNsdWRlL3VuY3RybC5oIiAyCgoKIGNoYXIgKiB1bmN0cmwg KGNodHlwZSk7CiMgMTAzICIuLi9pbmNsdWRlL2N1cnNlcy5oIiAyCiMgMSAiL3Vzci9saWIvZ2Nj LWxpYi9jcmlzLWF4aXMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDEx MCAiL3Vzci9saWIvZ2NjLWxpYi9jcmlzLWF4aXMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3Rk YXJnLmgiIDMKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwojIDEwNCAiLi4vaW5jbHVk ZS9jdXJzZXMuaCIgMgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2NyaXMtYXhpcy1saW51eC1nbnUv My4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTUxICIvdXNyL2xpYi9nY2MtbGliL2NyaXMt YXhpcy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIGludCBwdHJk aWZmX3Q7CiMgMTA2ICIuLi9pbmNsdWRlL2N1cnNlcy5oIiAyCiMgMTI2ICIuLi9pbmNsdWRlL2N1 cnNlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgTkNVUlNFU19CT09MOwoKCgoKIyAxICIvdXNy L2xpYi9nY2MtbGliL2NyaXMtYXhpcy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRib29sLmgi IDEgMwojIDEzMiAiLi4vaW5jbHVkZS9jdXJzZXMuaCIgMgojIDE3MSAiLi4vaW5jbHVkZS9jdXJz ZXMuaCIKZXh0ZXJuIGludCBDT0xPUlM7CmV4dGVybiBpbnQgQ09MT1JfUEFJUlM7CiMgMTg5ICIu Li9pbmNsdWRlL2N1cnNlcy5oIgpleHRlcm4gY2h0eXBlIGFjc19tYXBbXTsKIyAyNzcgIi4uL2lu Y2x1ZGUvY3Vyc2VzLmgiCnR5cGVkZWYgc3RydWN0IHNjcmVlbiBTQ1JFRU47CnR5cGVkZWYgc3Ry dWN0IF93aW5fc3QgV0lORE9XOwoKdHlwZWRlZiBjaHR5cGUgYXR0cl90OwojIDMwNSAiLi4vaW5j bHVkZS9jdXJzZXMuaCIKdHlwZWRlZiBzdHJ1Y3QKewogICAgYXR0cl90IGF0dHI7CiAgICB3Y2hh cl90IGNoYXJzWzVdOwp9CmNjaGFyX3Q7CgoKCnN0cnVjdCBsZGF0OwoKc3RydWN0IF93aW5fc3QK ewogICAgICAgIHNob3J0IF9jdXJ5LCBfY3VyeDsKCgogICAgICAgIHNob3J0IF9tYXh5LCBfbWF4 eDsKICAgICAgICBzaG9ydCBfYmVneSwgX2JlZ3g7CgogICAgICAgIHNob3J0IF9mbGFnczsKCgog ICAgICAgIGF0dHJfdCBfYXR0cnM7CiAgICAgICAgY2h0eXBlIF9ia2dkOwoKCiAgICAgICAgTkNV UlNFU19CT09MIF9ub3RpbWVvdXQ7CiAgICAgICAgTkNVUlNFU19CT09MIF9jbGVhcjsKICAgICAg ICBOQ1VSU0VTX0JPT0wgX2xlYXZlb2s7CiAgICAgICAgTkNVUlNFU19CT09MIF9zY3JvbGw7CiAg ICAgICAgTkNVUlNFU19CT09MIF9pZGxvazsKICAgICAgICBOQ1VSU0VTX0JPT0wgX2lkY29rOwog ICAgICAgIE5DVVJTRVNfQk9PTCBfaW1tZWQ7CiAgICAgICAgTkNVUlNFU19CT09MIF9zeW5jOwog ICAgICAgIE5DVVJTRVNfQk9PTCBfdXNlX2tleXBhZDsKICAgICAgICBpbnQgX2RlbGF5OwoKICAg ICAgICBzdHJ1Y3QgbGRhdCAqX2xpbmU7CgoKICAgICAgICBzaG9ydCBfcmVndG9wOwogICAgICAg IHNob3J0IF9yZWdib3R0b207CgoKICAgICAgICBpbnQgX3Bhcng7CiAgICAgICAgaW50IF9wYXJ5 OwogICAgICAgIFdJTkRPVyAqX3BhcmVudDsKCgogICAgICAgIHN0cnVjdCBwZGF0CiAgICAgICAg ewogICAgICAgICAgICBzaG9ydCBfcGFkX3ksIF9wYWRfeDsKICAgICAgICAgICAgc2hvcnQgX3Bh ZF90b3AsIF9wYWRfbGVmdDsKICAgICAgICAgICAgc2hvcnQgX3BhZF9ib3R0b20sIF9wYWRfcmln aHQ7CiAgICAgICAgfSBfcGFkOwoKICAgICAgICBzaG9ydCBfeW9mZnNldDsKCgogICAgICAgIGNj aGFyX3QgX2JrZ3JuZDsKCn07CgpleHRlcm4gV0lORE9XICogc3Rkc2NyOwpleHRlcm4gV0lORE9X ICogY3Vyc2NyOwpleHRlcm4gV0lORE9XICogbmV3c2NyOwoKZXh0ZXJuIGludCBMSU5FUzsKZXh0 ZXJuIGludCBDT0xTOwpleHRlcm4gaW50IFRBQlNJWkU7CgoKCgpleHRlcm4gaW50IEVTQ0RFTEFZ OwoKZXh0ZXJuIGNoYXIgdHR5dHlwZVtdOwoKCgoKCmV4dGVybiBOQ1VSU0VTX0JPT0wgaXNfdGVy bV9yZXNpemVkIChpbnQsIGludCk7CmV4dGVybiBjaGFyICoga2V5Ym91bmQgKGludCwgaW50KTsK ZXh0ZXJuIGNvbnN0IGNoYXIgKiBjdXJzZXNfdmVyc2lvbiAodm9pZCk7CmV4dGVybiBpbnQgYXNz dW1lX2RlZmF1bHRfY29sb3JzIChpbnQsIGludCk7CmV4dGVybiBpbnQgZGVmaW5lX2tleSAoY2hh ciAqLCBpbnQpOwpleHRlcm4gaW50IGtleW9rIChpbnQsIE5DVVJTRVNfQk9PTCk7CmV4dGVybiBp bnQgcmVzaXplX3Rlcm0gKGludCwgaW50KTsKZXh0ZXJuIGludCByZXNpemV0ZXJtIChpbnQsIGlu dCk7CmV4dGVybiBpbnQgdXNlX2RlZmF1bHRfY29sb3JzICh2b2lkKTsKZXh0ZXJuIGludCB1c2Vf ZXh0ZW5kZWRfbmFtZXMgKE5DVVJTRVNfQk9PTCk7CmV4dGVybiBpbnQgd3Jlc2l6ZSAoV0lORE9X ICosIGludCwgaW50KTsKIyA1MDYgIi4uL2luY2x1ZGUvY3Vyc2VzLmgiCmV4dGVybiBpbnQgYWRk Y2ggKGNvbnN0IGNodHlwZSk7CmV4dGVybiBpbnQgYWRkY2huc3RyIChjb25zdCBjaHR5cGUgKiwg aW50KTsKZXh0ZXJuIGludCBhZGRjaHN0ciAoY29uc3QgY2h0eXBlICopOwpleHRlcm4gaW50IGFk ZG5zdHIgKGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJuIGludCBhZGRzdHIgKGNvbnN0IGNoYXIg Kik7CmV4dGVybiBpbnQgYXR0cm9mZiAoYXR0cl90KTsKZXh0ZXJuIGludCBhdHRyb24gKGF0dHJf dCk7CmV4dGVybiBpbnQgYXR0cnNldCAoYXR0cl90KTsKZXh0ZXJuIGludCBhdHRyX2dldCAoYXR0 cl90ICosIHNob3J0ICosIHZvaWQgKik7CmV4dGVybiBpbnQgYXR0cl9vZmYgKGF0dHJfdCwgdm9p ZCAqKTsKZXh0ZXJuIGludCBhdHRyX29uIChhdHRyX3QsIHZvaWQgKik7CmV4dGVybiBpbnQgYXR0 cl9zZXQgKGF0dHJfdCwgc2hvcnQsIHZvaWQgKik7CmV4dGVybiBpbnQgYmF1ZHJhdGUgKHZvaWQp OwpleHRlcm4gaW50IGJlZXAgKHZvaWQpOwpleHRlcm4gaW50IGJrZ2QgKGNodHlwZSk7CmV4dGVy biB2b2lkIGJrZ2RzZXQgKGNodHlwZSk7CmV4dGVybiBpbnQgYm9yZGVyIChjaHR5cGUsY2h0eXBl LGNodHlwZSxjaHR5cGUsY2h0eXBlLGNodHlwZSxjaHR5cGUsY2h0eXBlKTsKZXh0ZXJuIGludCBi b3ggKFdJTkRPVyAqLCBjaHR5cGUsIGNodHlwZSk7CmV4dGVybiBOQ1VSU0VTX0JPT0wgY2FuX2No YW5nZV9jb2xvciAodm9pZCk7CmV4dGVybiBpbnQgY2JyZWFrICh2b2lkKTsKZXh0ZXJuIGludCBj aGdhdCAoaW50LCBhdHRyX3QsIHNob3J0LCBjb25zdCB2b2lkICopOwpleHRlcm4gaW50IGNsZWFy ICh2b2lkKTsKZXh0ZXJuIGludCBjbGVhcm9rIChXSU5ET1cgKixOQ1VSU0VTX0JPT0wpOwpleHRl cm4gaW50IGNscnRvYm90ICh2b2lkKTsKZXh0ZXJuIGludCBjbHJ0b2VvbCAodm9pZCk7CmV4dGVy biBpbnQgY29sb3JfY29udGVudCAoc2hvcnQsc2hvcnQqLHNob3J0KixzaG9ydCopOwpleHRlcm4g aW50IGNvbG9yX3NldCAoc2hvcnQsdm9pZCopOwpleHRlcm4gaW50IENPTE9SX1BBSVIgKGludCk7 CmV4dGVybiBpbnQgY29weXdpbiAoY29uc3QgV0lORE9XKixXSU5ET1cqLGludCxpbnQsaW50LGlu dCxpbnQsaW50LGludCk7CmV4dGVybiBpbnQgY3Vyc19zZXQgKGludCk7CmV4dGVybiBpbnQgZGVm X3Byb2dfbW9kZSAodm9pZCk7CmV4dGVybiBpbnQgZGVmX3NoZWxsX21vZGUgKHZvaWQpOwpleHRl cm4gaW50IGRlbGF5X291dHB1dCAoaW50KTsKZXh0ZXJuIGludCBkZWxjaCAodm9pZCk7CmV4dGVy biB2b2lkIGRlbHNjcmVlbiAoU0NSRUVOICopOwpleHRlcm4gaW50IGRlbHdpbiAoV0lORE9XICop OwpleHRlcm4gaW50IGRlbGV0ZWxuICh2b2lkKTsKZXh0ZXJuIFdJTkRPVyAqIGRlcndpbiAoV0lO RE9XICosaW50LGludCxpbnQsaW50KTsKZXh0ZXJuIGludCBkb3VwZGF0ZSAodm9pZCk7CmV4dGVy biBXSU5ET1cgKiBkdXB3aW4gKFdJTkRPVyAqKTsKZXh0ZXJuIGludCBlY2hvICh2b2lkKTsKZXh0 ZXJuIGludCBlY2hvY2hhciAoY29uc3QgY2h0eXBlKTsKZXh0ZXJuIGludCBlcmFzZSAodm9pZCk7 CmV4dGVybiBpbnQgZW5kd2luICh2b2lkKTsKZXh0ZXJuIGNoYXIgZXJhc2VjaGFyICh2b2lkKTsK ZXh0ZXJuIHZvaWQgZmlsdGVyICh2b2lkKTsKZXh0ZXJuIGludCBmbGFzaCAodm9pZCk7CmV4dGVy biBpbnQgZmx1c2hpbnAgKHZvaWQpOwpleHRlcm4gY2h0eXBlIGdldGJrZ2QgKFdJTkRPVyAqKTsK ZXh0ZXJuIGludCBnZXRjaCAodm9pZCk7CmV4dGVybiBpbnQgZ2V0bnN0ciAoY2hhciAqLCBpbnQp OwpleHRlcm4gaW50IGdldHN0ciAoY2hhciAqKTsKZXh0ZXJuIFdJTkRPVyAqIGdldHdpbiAoRklM RSAqKTsKZXh0ZXJuIGludCBoYWxmZGVsYXkgKGludCk7CmV4dGVybiBOQ1VSU0VTX0JPT0wgaGFz X2NvbG9ycyAodm9pZCk7CmV4dGVybiBOQ1VSU0VTX0JPT0wgaGFzX2ljICh2b2lkKTsKZXh0ZXJu IE5DVVJTRVNfQk9PTCBoYXNfaWwgKHZvaWQpOwpleHRlcm4gaW50IGhsaW5lIChjaHR5cGUsIGlu dCk7CmV4dGVybiB2b2lkIGlkY29rIChXSU5ET1cgKiwgTkNVUlNFU19CT09MKTsKZXh0ZXJuIGlu dCBpZGxvayAoV0lORE9XICosIE5DVVJTRVNfQk9PTCk7CmV4dGVybiB2b2lkIGltbWVkb2sgKFdJ TkRPVyAqLCBOQ1VSU0VTX0JPT0wpOwpleHRlcm4gY2h0eXBlIGluY2ggKHZvaWQpOwpleHRlcm4g aW50IGluY2huc3RyIChjaHR5cGUgKiwgaW50KTsKZXh0ZXJuIGludCBpbmNoc3RyIChjaHR5cGUg Kik7CmV4dGVybiBXSU5ET1cgKiBpbml0c2NyICh2b2lkKTsKZXh0ZXJuIGludCBpbml0X2NvbG9y IChzaG9ydCxzaG9ydCxzaG9ydCxzaG9ydCk7CmV4dGVybiBpbnQgaW5pdF9wYWlyIChzaG9ydCxz aG9ydCxzaG9ydCk7CmV4dGVybiBpbnQgaW5uc3RyIChjaGFyICosIGludCk7CmV4dGVybiBpbnQg aW5zY2ggKGNodHlwZSk7CmV4dGVybiBpbnQgaW5zZGVsbG4gKGludCk7CmV4dGVybiBpbnQgaW5z ZXJ0bG4gKHZvaWQpOwpleHRlcm4gaW50IGluc25zdHIgKGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0 ZXJuIGludCBpbnNzdHIgKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgaW5zdHIgKGNoYXIgKik7 CmV4dGVybiBpbnQgaW50cmZsdXNoIChXSU5ET1cgKixOQ1VSU0VTX0JPT0wpOwpleHRlcm4gTkNV UlNFU19CT09MIGlzZW5kd2luICh2b2lkKTsKZXh0ZXJuIE5DVVJTRVNfQk9PTCBpc19saW5ldG91 Y2hlZCAoV0lORE9XICosaW50KTsKZXh0ZXJuIE5DVVJTRVNfQk9PTCBpc193aW50b3VjaGVkIChX SU5ET1cgKik7CmV4dGVybiBjaGFyICoga2V5bmFtZSAoaW50KTsKZXh0ZXJuIGludCBrZXlwYWQg KFdJTkRPVyAqLE5DVVJTRVNfQk9PTCk7CmV4dGVybiBjaGFyIGtpbGxjaGFyICh2b2lkKTsKZXh0 ZXJuIGludCBsZWF2ZW9rIChXSU5ET1cgKixOQ1VSU0VTX0JPT0wpOwpleHRlcm4gY2hhciAqIGxv bmduYW1lICh2b2lkKTsKZXh0ZXJuIGludCBtZXRhIChXSU5ET1cgKixOQ1VSU0VTX0JPT0wpOwpl eHRlcm4gaW50IG1vdmUgKGludCwgaW50KTsKZXh0ZXJuIGludCBtdmFkZGNoIChpbnQsIGludCwg Y29uc3QgY2h0eXBlKTsKZXh0ZXJuIGludCBtdmFkZGNobnN0ciAoaW50LCBpbnQsIGNvbnN0IGNo dHlwZSAqLCBpbnQpOwpleHRlcm4gaW50IG12YWRkY2hzdHIgKGludCwgaW50LCBjb25zdCBjaHR5 cGUgKik7CmV4dGVybiBpbnQgbXZhZGRuc3RyIChpbnQsIGludCwgY29uc3QgY2hhciAqLCBpbnQp OwpleHRlcm4gaW50IG12YWRkc3RyIChpbnQsIGludCwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGlu dCBtdmNoZ2F0IChpbnQsIGludCwgaW50LCBhdHRyX3QsIHNob3J0LCBjb25zdCB2b2lkICopOwpl eHRlcm4gaW50IG12Y3VyIChpbnQsaW50LGludCxpbnQpOwpleHRlcm4gaW50IG12ZGVsY2ggKGlu dCwgaW50KTsKZXh0ZXJuIGludCBtdmRlcndpbiAoV0lORE9XICosIGludCwgaW50KTsKZXh0ZXJu IGludCBtdmdldGNoIChpbnQsIGludCk7CmV4dGVybiBpbnQgbXZnZXRuc3RyIChpbnQsIGludCwg Y2hhciAqLCBpbnQpOwpleHRlcm4gaW50IG12Z2V0c3RyIChpbnQsIGludCwgY2hhciAqKTsKZXh0 ZXJuIGludCBtdmhsaW5lIChpbnQsIGludCwgY2h0eXBlLCBpbnQpOwpleHRlcm4gY2h0eXBlIG12 aW5jaCAoaW50LCBpbnQpOwpleHRlcm4gaW50IG12aW5jaG5zdHIgKGludCwgaW50LCBjaHR5cGUg KiwgaW50KTsKZXh0ZXJuIGludCBtdmluY2hzdHIgKGludCwgaW50LCBjaHR5cGUgKik7CmV4dGVy biBpbnQgbXZpbm5zdHIgKGludCwgaW50LCBjaGFyICosIGludCk7CmV4dGVybiBpbnQgbXZpbnNj aCAoaW50LCBpbnQsIGNodHlwZSk7CmV4dGVybiBpbnQgbXZpbnNuc3RyIChpbnQsIGludCwgY29u c3QgY2hhciAqLCBpbnQpOwpleHRlcm4gaW50IG12aW5zc3RyIChpbnQsIGludCwgY29uc3QgY2hh ciAqKTsKZXh0ZXJuIGludCBtdmluc3RyIChpbnQsIGludCwgY2hhciAqKTsKZXh0ZXJuIGludCBt dnByaW50dyAoaW50LGludCwgY2hhciAqLC4uLikKICAgICAgICAgICAgICAgIDsKZXh0ZXJuIGlu dCBtdnNjYW53IChpbnQsaW50LCBjaGFyICosLi4uKQogICAgICAgICAgICAgICAgX19hdHRyaWJ1 dGVfXygoZm9ybWF0KHNjYW5mLDMsNCkpKTsKZXh0ZXJuIGludCBtdnZsaW5lIChpbnQsIGludCwg Y2h0eXBlLCBpbnQpOwpleHRlcm4gaW50IG12d2FkZGNoIChXSU5ET1cgKiwgaW50LCBpbnQsIGNv bnN0IGNodHlwZSk7CmV4dGVybiBpbnQgbXZ3YWRkY2huc3RyIChXSU5ET1cgKiwgaW50LCBpbnQs IGNvbnN0IGNodHlwZSAqLCBpbnQpOwpleHRlcm4gaW50IG12d2FkZGNoc3RyIChXSU5ET1cgKiwg aW50LCBpbnQsIGNvbnN0IGNodHlwZSAqKTsKZXh0ZXJuIGludCBtdndhZGRuc3RyIChXSU5ET1cg KiwgaW50LCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJuIGludCBtdndhZGRzdHIgKFdJ TkRPVyAqLCBpbnQsIGludCwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBtdndjaGdhdCAoV0lO RE9XICosIGludCwgaW50LCBpbnQsIGF0dHJfdCwgc2hvcnQsIGNvbnN0IHZvaWQgKik7CmV4dGVy biBpbnQgbXZ3ZGVsY2ggKFdJTkRPVyAqLCBpbnQsIGludCk7CmV4dGVybiBpbnQgbXZ3Z2V0Y2gg KFdJTkRPVyAqLCBpbnQsIGludCk7CmV4dGVybiBpbnQgbXZ3Z2V0bnN0ciAoV0lORE9XICosIGlu dCwgaW50LCBjaGFyICosIGludCk7CmV4dGVybiBpbnQgbXZ3Z2V0c3RyIChXSU5ET1cgKiwgaW50 LCBpbnQsIGNoYXIgKik7CmV4dGVybiBpbnQgbXZ3aGxpbmUgKFdJTkRPVyAqLCBpbnQsIGludCwg Y2h0eXBlLCBpbnQpOwpleHRlcm4gaW50IG12d2luIChXSU5ET1cgKixpbnQsaW50KTsKZXh0ZXJu IGNodHlwZSBtdndpbmNoIChXSU5ET1cgKiwgaW50LCBpbnQpOwpleHRlcm4gaW50IG12d2luY2hu c3RyIChXSU5ET1cgKiwgaW50LCBpbnQsIGNodHlwZSAqLCBpbnQpOwpleHRlcm4gaW50IG12d2lu Y2hzdHIgKFdJTkRPVyAqLCBpbnQsIGludCwgY2h0eXBlICopOwpleHRlcm4gaW50IG12d2lubnN0 ciAoV0lORE9XICosIGludCwgaW50LCBjaGFyICosIGludCk7CmV4dGVybiBpbnQgbXZ3aW5zY2gg KFdJTkRPVyAqLCBpbnQsIGludCwgY2h0eXBlKTsKZXh0ZXJuIGludCBtdndpbnNuc3RyIChXSU5E T1cgKiwgaW50LCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJuIGludCBtdndpbnNzdHIg KFdJTkRPVyAqLCBpbnQsIGludCwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBtdndpbnN0ciAo V0lORE9XICosIGludCwgaW50LCBjaGFyICopOwpleHRlcm4gaW50IG12d3ByaW50dyAoV0lORE9X KixpbnQsaW50LCBjaGFyICosLi4uKQogICAgICAgICAgICAgICAgOwpleHRlcm4gaW50IG12d3Nj YW53IChXSU5ET1cgKixpbnQsaW50LCBjaGFyICosLi4uKQogICAgICAgICAgICAgICAgX19hdHRy aWJ1dGVfXygoZm9ybWF0KHNjYW5mLDQsNSkpKTsKZXh0ZXJuIGludCBtdnd2bGluZSAoV0lORE9X ICosaW50LCBpbnQsIGNodHlwZSwgaW50KTsKZXh0ZXJuIGludCBuYXBtcyAoaW50KTsKZXh0ZXJu IFdJTkRPVyAqIG5ld3BhZCAoaW50LGludCk7CmV4dGVybiBTQ1JFRU4gKiBuZXd0ZXJtICggY2hh ciAqLEZJTEUgKixGSUxFICopOwpleHRlcm4gV0lORE9XICogbmV3d2luIChpbnQsaW50LGludCxp bnQpOwpleHRlcm4gaW50IG5sICh2b2lkKTsKZXh0ZXJuIGludCBub2NicmVhayAodm9pZCk7CmV4 dGVybiBpbnQgbm9kZWxheSAoV0lORE9XICosTkNVUlNFU19CT09MKTsKZXh0ZXJuIGludCBub2Vj aG8gKHZvaWQpOwpleHRlcm4gaW50IG5vbmwgKHZvaWQpOwpleHRlcm4gdm9pZCBub3FpZmx1c2gg KHZvaWQpOwpleHRlcm4gaW50IG5vcmF3ICh2b2lkKTsKZXh0ZXJuIGludCBub3RpbWVvdXQgKFdJ TkRPVyAqLE5DVVJTRVNfQk9PTCk7CmV4dGVybiBpbnQgb3ZlcmxheSAoY29uc3QgV0lORE9XKixX SU5ET1cgKik7CmV4dGVybiBpbnQgb3ZlcndyaXRlIChjb25zdCBXSU5ET1cqLFdJTkRPVyAqKTsK ZXh0ZXJuIGludCBwYWlyX2NvbnRlbnQgKHNob3J0LHNob3J0KixzaG9ydCopOwpleHRlcm4gaW50 IFBBSVJfTlVNQkVSIChpbnQpOwpleHRlcm4gaW50IHBlY2hvY2hhciAoV0lORE9XICosIGNvbnN0 IGNodHlwZSk7CmV4dGVybiBpbnQgcG5vdXRyZWZyZXNoIChXSU5ET1cqLGludCxpbnQsaW50LGlu dCxpbnQsaW50KTsKZXh0ZXJuIGludCBwcmVmcmVzaCAoV0lORE9XICosaW50LGludCxpbnQsaW50 LGludCxpbnQpOwpleHRlcm4gaW50IHByaW50dyAoIGNoYXIgKiwuLi4pCiAgICAgICAgICAgICAg ICA7CmV4dGVybiBpbnQgcHV0cCAoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBwdXR3aW4gKFdJ TkRPVyAqLCBGSUxFICopOwpleHRlcm4gdm9pZCBxaWZsdXNoICh2b2lkKTsKZXh0ZXJuIGludCBy YXcgKHZvaWQpOwpleHRlcm4gaW50IHJlZHJhd3dpbiAoV0lORE9XICopOwpleHRlcm4gaW50IHJl ZnJlc2ggKHZvaWQpOwpleHRlcm4gaW50IHJlc2V0dHkgKHZvaWQpOwpleHRlcm4gaW50IHJlc2V0 X3Byb2dfbW9kZSAodm9pZCk7CmV4dGVybiBpbnQgcmVzZXRfc2hlbGxfbW9kZSAodm9pZCk7CmV4 dGVybiBpbnQgcmlwb2ZmbGluZSAoaW50LCBpbnQgKCopKFdJTkRPVyAqLCBpbnQpKTsKZXh0ZXJu IGludCBzYXZldHR5ICh2b2lkKTsKZXh0ZXJuIGludCBzY2FudyAoIGNoYXIgKiwuLi4pCiAgICAg ICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoc2NhbmYsMSwyKSkpOwpleHRlcm4gaW50 IHNjcl9kdW1wIChjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHNjcl9pbml0IChjb25zdCBjaGFy ICopOwpleHRlcm4gaW50IHNjcmwgKGludCk7CmV4dGVybiBpbnQgc2Nyb2xsIChXSU5ET1cgKik7 CmV4dGVybiBpbnQgc2Nyb2xsb2sgKFdJTkRPVyAqLE5DVVJTRVNfQk9PTCk7CmV4dGVybiBpbnQg c2NyX3Jlc3RvcmUgKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgc2NyX3NldCAoY29uc3QgY2hh ciAqKTsKZXh0ZXJuIGludCBzZXRzY3JyZWcgKGludCxpbnQpOwpleHRlcm4gU0NSRUVOICogc2V0 X3Rlcm0gKFNDUkVFTiAqKTsKZXh0ZXJuIGludCBzbGtfYXR0cm9mZiAoY29uc3QgY2h0eXBlKTsK ZXh0ZXJuIGludCBzbGtfYXR0cl9vZmYgKGNvbnN0IGF0dHJfdCwgdm9pZCAqKTsKZXh0ZXJuIGlu dCBzbGtfYXR0cm9uIChjb25zdCBjaHR5cGUpOwpleHRlcm4gaW50IHNsa19hdHRyX29uIChhdHRy X3Qsdm9pZCopOwpleHRlcm4gaW50IHNsa19hdHRyc2V0IChjb25zdCBjaHR5cGUpOwpleHRlcm4g YXR0cl90IHNsa19hdHRyICh2b2lkKTsKZXh0ZXJuIGludCBzbGtfYXR0cl9zZXQgKGNvbnN0IGF0 dHJfdCxzaG9ydCx2b2lkKik7CmV4dGVybiBpbnQgc2xrX2NsZWFyICh2b2lkKTsKZXh0ZXJuIGlu dCBzbGtfY29sb3IgKHNob3J0KTsKZXh0ZXJuIGludCBzbGtfaW5pdCAoaW50KTsKZXh0ZXJuIGNo YXIgKiBzbGtfbGFiZWwgKGludCk7CmV4dGVybiBpbnQgc2xrX25vdXRyZWZyZXNoICh2b2lkKTsK ZXh0ZXJuIGludCBzbGtfcmVmcmVzaCAodm9pZCk7CmV4dGVybiBpbnQgc2xrX3Jlc3RvcmUgKHZv aWQpOwpleHRlcm4gaW50IHNsa19zZXQgKGludCxjb25zdCBjaGFyICosaW50KTsKZXh0ZXJuIGlu dCBzbGtfdG91Y2ggKHZvaWQpOwpleHRlcm4gaW50IHN0YW5kb3V0ICh2b2lkKTsKZXh0ZXJuIGlu dCBzdGFuZGVuZCAodm9pZCk7CmV4dGVybiBpbnQgc3RhcnRfY29sb3IgKHZvaWQpOwpleHRlcm4g V0lORE9XICogc3VicGFkIChXSU5ET1cgKiwgaW50LCBpbnQsIGludCwgaW50KTsKZXh0ZXJuIFdJ TkRPVyAqIHN1YndpbiAoV0lORE9XICosaW50LGludCxpbnQsaW50KTsKZXh0ZXJuIGludCBzeW5j b2sgKFdJTkRPVyAqLCBOQ1VSU0VTX0JPT0wpOwpleHRlcm4gY2h0eXBlIHRlcm1hdHRycyAodm9p ZCk7CmV4dGVybiBjaGFyICogdGVybW5hbWUgKHZvaWQpOwpleHRlcm4gaW50IHRpZ2V0ZmxhZyAo IGNoYXIgKik7CmV4dGVybiBpbnQgdGlnZXRudW0gKCBjaGFyICopOwpleHRlcm4gY2hhciAqIHRp Z2V0c3RyICggY2hhciAqKTsKZXh0ZXJuIHZvaWQgdGltZW91dCAoaW50KTsKZXh0ZXJuIGludCB0 b3VjaGxpbmUgKFdJTkRPVyAqLCBpbnQsIGludCk7CmV4dGVybiBpbnQgdG91Y2h3aW4gKFdJTkRP VyAqKTsKZXh0ZXJuIGNoYXIgKiB0cGFybSAoIGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGludCB0eXBl YWhlYWQgKGludCk7CmV4dGVybiBpbnQgdW5nZXRjaCAoaW50KTsKZXh0ZXJuIGludCB1bnRvdWNo d2luIChXSU5ET1cgKik7CmV4dGVybiB2b2lkIHVzZV9lbnYgKE5DVVJTRVNfQk9PTCk7CmV4dGVy biBpbnQgdmlkYXR0ciAoY2h0eXBlKTsKZXh0ZXJuIGludCB2aWRwdXRzIChjaHR5cGUsIGludCAo KikoaW50KSk7CmV4dGVybiBpbnQgdmxpbmUgKGNodHlwZSwgaW50KTsKZXh0ZXJuIGludCB2d3By aW50dyAoV0lORE9XICosIGNoYXIgKix2YV9saXN0KTsKZXh0ZXJuIGludCB2d19wcmludHcgKFdJ TkRPVyAqLCBjaGFyICosdmFfbGlzdCk7CmV4dGVybiBpbnQgdndzY2FudyAoV0lORE9XICosIGNo YXIgKix2YV9saXN0KTsKZXh0ZXJuIGludCB2d19zY2FudyAoV0lORE9XICosIGNoYXIgKix2YV9s aXN0KTsKZXh0ZXJuIGludCB3YWRkY2ggKFdJTkRPVyAqLCBjb25zdCBjaHR5cGUpOwpleHRlcm4g aW50IHdhZGRjaG5zdHIgKFdJTkRPVyAqLGNvbnN0IGNodHlwZSAqLGludCk7CmV4dGVybiBpbnQg d2FkZGNoc3RyIChXSU5ET1cgKixjb25zdCBjaHR5cGUgKik7CmV4dGVybiBpbnQgd2FkZG5zdHIg KFdJTkRPVyAqLGNvbnN0IGNoYXIgKixpbnQpOwpleHRlcm4gaW50IHdhZGRzdHIgKFdJTkRPVyAq LGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgd2F0dHJvbiAoV0lORE9XICosIGludCk7CmV4dGVy biBpbnQgd2F0dHJvZmYgKFdJTkRPVyAqLCBpbnQpOwpleHRlcm4gaW50IHdhdHRyc2V0IChXSU5E T1cgKiwgaW50KTsKZXh0ZXJuIGludCB3YXR0cl9nZXQgKFdJTkRPVyAqLCBhdHRyX3QgKiwgc2hv cnQgKiwgdm9pZCAqKTsKZXh0ZXJuIGludCB3YXR0cl9vbiAoV0lORE9XICosIGF0dHJfdCwgdm9p ZCAqKTsKZXh0ZXJuIGludCB3YXR0cl9vZmYgKFdJTkRPVyAqLCBhdHRyX3QsIHZvaWQgKik7CmV4 dGVybiBpbnQgd2F0dHJfc2V0IChXSU5ET1cgKiwgYXR0cl90LCBzaG9ydCwgdm9pZCAqKTsKZXh0 ZXJuIGludCB3YmtnZCAoV0lORE9XICosIGNodHlwZSk7CmV4dGVybiB2b2lkIHdia2dkc2V0IChX SU5ET1cgKixjaHR5cGUpOwpleHRlcm4gaW50IHdib3JkZXIgKFdJTkRPVyAqLGNodHlwZSxjaHR5 cGUsY2h0eXBlLGNodHlwZSxjaHR5cGUsY2h0eXBlLGNodHlwZSxjaHR5cGUpOwpleHRlcm4gaW50 IHdjaGdhdCAoV0lORE9XICosIGludCwgYXR0cl90LCBzaG9ydCwgY29uc3Qgdm9pZCAqKTsKZXh0 ZXJuIGludCB3Y2xlYXIgKFdJTkRPVyAqKTsKZXh0ZXJuIGludCB3Y2xydG9ib3QgKFdJTkRPVyAq KTsKZXh0ZXJuIGludCB3Y2xydG9lb2wgKFdJTkRPVyAqKTsKZXh0ZXJuIGludCB3Y29sb3Jfc2V0 IChXSU5ET1cqLHNob3J0LHZvaWQqKTsKZXh0ZXJuIHZvaWQgd2N1cnN5bmN1cCAoV0lORE9XICop OwpleHRlcm4gaW50IHdkZWxjaCAoV0lORE9XICopOwpleHRlcm4gaW50IHdkZWxldGVsbiAoV0lO RE9XICopOwpleHRlcm4gaW50IHdlY2hvY2hhciAoV0lORE9XICosIGNvbnN0IGNodHlwZSk7CmV4 dGVybiBpbnQgd2VyYXNlIChXSU5ET1cgKik7CmV4dGVybiBpbnQgd2dldGNoIChXSU5ET1cgKik7 CmV4dGVybiBpbnQgd2dldG5zdHIgKFdJTkRPVyAqLGNoYXIgKixpbnQpOwpleHRlcm4gaW50IHdn ZXRzdHIgKFdJTkRPVyAqLCBjaGFyICopOwpleHRlcm4gaW50IHdobGluZSAoV0lORE9XICosIGNo dHlwZSwgaW50KTsKZXh0ZXJuIGNodHlwZSB3aW5jaCAoV0lORE9XICopOwpleHRlcm4gaW50IHdp bmNobnN0ciAoV0lORE9XICosIGNodHlwZSAqLCBpbnQpOwpleHRlcm4gaW50IHdpbmNoc3RyIChX SU5ET1cgKiwgY2h0eXBlICopOwpleHRlcm4gaW50IHdpbm5zdHIgKFdJTkRPVyAqLCBjaGFyICos IGludCk7CmV4dGVybiBpbnQgd2luc2NoIChXSU5ET1cgKiwgY2h0eXBlKTsKZXh0ZXJuIGludCB3 aW5zZGVsbG4gKFdJTkRPVyAqLGludCk7CmV4dGVybiBpbnQgd2luc2VydGxuIChXSU5ET1cgKik7 CmV4dGVybiBpbnQgd2luc25zdHIgKFdJTkRPVyAqLCBjb25zdCBjaGFyICosaW50KTsKZXh0ZXJu IGludCB3aW5zc3RyIChXSU5ET1cgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCB3aW5zdHIg KFdJTkRPVyAqLCBjaGFyICopOwpleHRlcm4gaW50IHdtb3ZlIChXSU5ET1cgKixpbnQsaW50KTsK ZXh0ZXJuIGludCB3bm91dHJlZnJlc2ggKFdJTkRPVyAqKTsKZXh0ZXJuIGludCB3cHJpbnR3IChX SU5ET1cgKiwgY2hhciAqLC4uLikKICAgICAgICAgICAgICAgIDsKZXh0ZXJuIGludCB3cmVkcmF3 bG4gKFdJTkRPVyAqLGludCxpbnQpOwpleHRlcm4gaW50IHdyZWZyZXNoIChXSU5ET1cgKik7CmV4 dGVybiBpbnQgd3NjYW53IChXSU5ET1cgKiwgY2hhciAqLC4uLikKICAgICAgICAgICAgICAgIF9f YXR0cmlidXRlX18oKGZvcm1hdChzY2FuZiwyLDMpKSk7CmV4dGVybiBpbnQgd3NjcmwgKFdJTkRP VyAqLGludCk7CmV4dGVybiBpbnQgd3NldHNjcnJlZyAoV0lORE9XICosaW50LGludCk7CmV4dGVy biBpbnQgd3N0YW5kb3V0IChXSU5ET1cgKik7CmV4dGVybiBpbnQgd3N0YW5kZW5kIChXSU5ET1cg Kik7CmV4dGVybiB2b2lkIHdzeW5jZG93biAoV0lORE9XICopOwpleHRlcm4gdm9pZCB3c3luY3Vw IChXSU5ET1cgKik7CmV4dGVybiB2b2lkIHd0aW1lb3V0IChXSU5ET1cgKixpbnQpOwpleHRlcm4g aW50IHd0b3VjaGxuIChXSU5ET1cgKixpbnQsaW50LGludCk7CmV4dGVybiBpbnQgd3ZsaW5lIChX SU5ET1cgKixjaHR5cGUsaW50KTsKIyAxMTYzICIuLi9pbmNsdWRlL2N1cnNlcy5oIgp0eXBlZGVm IHVuc2lnbmVkIGxvbmcgbW1hc2tfdDsKCnR5cGVkZWYgc3RydWN0CnsKICAgIHNob3J0IGlkOwog ICAgaW50IHgsIHksIHo7CiAgICBtbWFza190IGJzdGF0ZTsKfQpNRVZFTlQ7CgpleHRlcm4gaW50 IGdldG1vdXNlIChNRVZFTlQgKik7CmV4dGVybiBpbnQgdW5nZXRtb3VzZSAoTUVWRU5UICopOwpl eHRlcm4gbW1hc2tfdCBtb3VzZW1hc2sgKG1tYXNrX3QsIG1tYXNrX3QgKik7CmV4dGVybiBOQ1VS U0VTX0JPT0wgd2VuY2xvc2UgKGNvbnN0IFdJTkRPVyAqLCBpbnQsIGludCk7CmV4dGVybiBpbnQg bW91c2VpbnRlcnZhbCAoaW50KTsKZXh0ZXJuIE5DVVJTRVNfQk9PTCB3bW91c2VfdHJhZm8gKGNv bnN0IFdJTkRPVyogd2luLGludCogeSwgaW50KiB4LCBOQ1VSU0VTX0JPT0wgdG9fc2NyZWVuKTsK ZXh0ZXJuIE5DVVJTRVNfQk9PTCBtb3VzZV90cmFmbyAoaW50KiwgaW50KiwgTkNVUlNFU19CT09M KTsKCgoKCgpleHRlcm4gaW50IG1jcHJpbnQgKGNoYXIgKiwgaW50KTsKZXh0ZXJuIGludCBoYXNf a2V5IChpbnQpOwoKCgpleHRlcm4gdm9pZCBfdHJhY2VmIChjb25zdCBjaGFyICosIC4uLikgOwpl eHRlcm4gdm9pZCBfdHJhY2VkdW1wIChjb25zdCBjaGFyICosIFdJTkRPVyAqKTsKZXh0ZXJuIGNo YXIgKiBfdHJhY2VhdHRyIChhdHRyX3QpOwpleHRlcm4gY2hhciAqIF90cmFjZWF0dHIyIChpbnQs IGNodHlwZSk7CmV4dGVybiBjaGFyICogX25jX3RyYWNlYml0cyAodm9pZCk7CmV4dGVybiBjaGFy ICogX3RyYWNlY2hhciAoaW50KTsKZXh0ZXJuIGNoYXIgKiBfdHJhY2VjaHR5cGUgKGNodHlwZSk7 CmV4dGVybiBjaGFyICogX3RyYWNlY2h0eXBlMiAoaW50LCBjaHR5cGUpOwoKCmV4dGVybiBjaGFy ICogX3RyYWNlY2NoYXJfdCAoY29uc3QgY2NoYXJfdCAqKTsKCmV4dGVybiBjaGFyICogX3RyYWNl Y2NoYXJfdDIgKGludCwgY29uc3QgY2NoYXJfdCAqKTsKCgoKCmV4dGVybiBjaGFyICogX3RyYWNl bW91c2UgKGNvbnN0IE1FVkVOVCAqKTsKZXh0ZXJuIHZvaWQgdHJhY2UgKGNvbnN0IHVuc2lnbmVk IGludCk7CiMgMTA1ICIuLi9wcm9ncy9wcm9ncy5wcml2LmgiIDIKIyAxICIuLi9pbmNsdWRlL3Rl cm1fZW50cnkuaCIgMQojIDQ3ICIuLi9pbmNsdWRlL3Rlcm1fZW50cnkuaCIKIyAxICIuLi9pbmNs dWRlL3Rlcm0uaCIgMQojIDgxICIuLi9pbmNsdWRlL3Rlcm0uaCIKIyAxICIvdXNyL2luY2x1ZGUv dGVybWlvcy5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL3Rlcm1pb3MuaCIgMwoKCgoKIyAxICIv dXNyL2luY2x1ZGUvYml0cy90ZXJtaW9zLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy90 ZXJtaW9zLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGNjX3Q7CnR5cGVkZWYgdW5zaWduZWQg aW50IHNwZWVkX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHRjZmxhZ190OwoKCnN0cnVjdCB0ZXJt aW9zCiAgewogICAgdGNmbGFnX3QgY19pZmxhZzsKICAgIHRjZmxhZ190IGNfb2ZsYWc7CiAgICB0 Y2ZsYWdfdCBjX2NmbGFnOwogICAgdGNmbGFnX3QgY19sZmxhZzsKICAgIGNjX3QgY19saW5lOwog ICAgY2NfdCBjX2NjWzMyXTsKICAgIHNwZWVkX3QgY19pc3BlZWQ7CiAgICBzcGVlZF90IGNfb3Nw ZWVkOwogIH07CiMgNDEgIi91c3IvaW5jbHVkZS90ZXJtaW9zLmgiIDIgMwojIDQ5ICIvdXNyL2lu Y2x1ZGUvdGVybWlvcy5oIiAzCmV4dGVybiBzcGVlZF90IGNmZ2V0b3NwZWVkIChfX2NvbnN0IHN0 cnVjdCB0ZXJtaW9zICpfX3Rlcm1pb3NfcCkgOwoKCmV4dGVybiBzcGVlZF90IGNmZ2V0aXNwZWVk IChfX2NvbnN0IHN0cnVjdCB0ZXJtaW9zICpfX3Rlcm1pb3NfcCkgOwoKCmV4dGVybiBpbnQgY2Zz ZXRvc3BlZWQgKHN0cnVjdCB0ZXJtaW9zICpfX3Rlcm1pb3NfcCwgc3BlZWRfdCBfX3NwZWVkKSA7 CgoKZXh0ZXJuIGludCBjZnNldGlzcGVlZCAoc3RydWN0IHRlcm1pb3MgKl9fdGVybWlvc19wLCBz cGVlZF90IF9fc3BlZWQpIDsKCgoKZXh0ZXJuIGludCBjZnNldHNwZWVkIChzdHJ1Y3QgdGVybWlv cyAqX190ZXJtaW9zX3AsIHNwZWVkX3QgX19zcGVlZCkgOwoKCgoKZXh0ZXJuIGludCB0Y2dldGF0 dHIgKGludCBfX2ZkLCBzdHJ1Y3QgdGVybWlvcyAqX190ZXJtaW9zX3ApIDsKCgoKZXh0ZXJuIGlu dCB0Y3NldGF0dHIgKGludCBfX2ZkLCBpbnQgX19vcHRpb25hbF9hY3Rpb25zLAogICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGVybWlvcyAqX190ZXJtaW9zX3ApIDsKCgoKCmV4 dGVybiB2b2lkIGNmbWFrZXJhdyAoc3RydWN0IHRlcm1pb3MgKl9fdGVybWlvc19wKSA7CgoKCmV4 dGVybiBpbnQgdGNzZW5kYnJlYWsgKGludCBfX2ZkLCBpbnQgX19kdXJhdGlvbikgOwoKCmV4dGVy biBpbnQgdGNkcmFpbiAoaW50IF9fZmQpIDsKCgoKZXh0ZXJuIGludCB0Y2ZsdXNoIChpbnQgX19m ZCwgaW50IF9fcXVldWVfc2VsZWN0b3IpIDsKCgoKZXh0ZXJuIGludCB0Y2Zsb3cgKGludCBfX2Zk LCBpbnQgX19hY3Rpb24pIDsKCgoKCmV4dGVybiBfX3BpZF90IHRjZ2V0c2lkIChpbnQgX19mZCkg OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R0eWRlZmF1bHRzLmgiIDEgMwojIDEwMyAiL3Vz ci9pbmNsdWRlL3Rlcm1pb3MuaCIgMiAzCgoKCiMgODIgIi4uL2luY2x1ZGUvdGVybS5oIiAyCiMg NjczICIuLi9pbmNsdWRlL3Rlcm0uaCIKdHlwZWRlZiBzdHJ1Y3QgdGVybXR5cGUgewogICAgY2hh ciAqdGVybV9uYW1lczsKICAgIGNoYXIgKnN0cl90YWJsZTsKICAgIGNoYXIgKkJvb2xlYW5zOwog ICAgc2hvcnQgKk51bWJlcnM7CiAgICBjaGFyICoqU3RyaW5nczsKCgogICAgY2hhciAqZXh0X3N0 cl90YWJsZTsKICAgIGNoYXIgKipleHRfTmFtZXM7CgogICAgdW5zaWduZWQgc2hvcnQgbnVtX0Jv b2xlYW5zOwogICAgdW5zaWduZWQgc2hvcnQgbnVtX051bWJlcnM7CiAgICB1bnNpZ25lZCBzaG9y dCBudW1fU3RyaW5nczsKCiAgICB1bnNpZ25lZCBzaG9ydCBleHRfQm9vbGVhbnM7CiAgICB1bnNp Z25lZCBzaG9ydCBleHRfTnVtYmVyczsKICAgIHVuc2lnbmVkIHNob3J0IGV4dF9TdHJpbmdzOwoK Cn0gVEVSTVRZUEU7Cgp0eXBlZGVmIHN0cnVjdCB0ZXJtIHsKICAgIFRFUk1UWVBFIHR5cGU7CiAg ICBzaG9ydCBGaWxlZGVzOwogICAgc3RydWN0IHRlcm1pb3MgT3R0eWIsCiAgICAgICAgICAgICAg ICBOdHR5YjsKICAgIGludCBfYmF1ZHJhdGU7Cn0gVEVSTUlOQUw7CgpleHRlcm4gVEVSTUlOQUwg KiBjdXJfdGVybTsKIyA3MjggIi4uL2luY2x1ZGUvdGVybS5oIgpleHRlcm4gY2hhciAqIGNvbnN0 IGJvb2xuYW1lc1tdOwpleHRlcm4gY2hhciAqIGNvbnN0IGJvb2xjb2Rlc1tdOwpleHRlcm4gY2hh ciAqIGNvbnN0IGJvb2xmbmFtZXNbXTsKZXh0ZXJuIGNoYXIgKiBjb25zdCBudW1uYW1lc1tdOwpl eHRlcm4gY2hhciAqIGNvbnN0IG51bWNvZGVzW107CmV4dGVybiBjaGFyICogY29uc3QgbnVtZm5h bWVzW107CmV4dGVybiBjaGFyICogY29uc3Qgc3RybmFtZXNbXTsKZXh0ZXJuIGNoYXIgKiBjb25z dCBzdHJjb2Rlc1tdOwpleHRlcm4gY2hhciAqIGNvbnN0IHN0cmZuYW1lc1tdOwoKCgoKZXh0ZXJu IGludCBfbmNfc2V0X3R0eV9tb2RlIChzdHJ1Y3QgdGVybWlvcyAqYnVmKTsKZXh0ZXJuIGludCBf bmNfZ2V0X3R0eV9tb2RlIChzdHJ1Y3QgdGVybWlvcyAqYnVmKTsKZXh0ZXJuIGludCBfbmNfcmVh ZF9lbnRyeSAoY29uc3QgY2hhciAqIGNvbnN0LCBjaGFyICogY29uc3QsIFRFUk1UWVBFICpjb25z dCk7CmV4dGVybiBpbnQgX25jX3JlYWRfZmlsZV9lbnRyeSAoY29uc3QgY2hhciAqY29uc3QsIFRF Uk1UWVBFICopOwpleHRlcm4gY2hhciAqIF9uY19maXJzdF9uYW1lIChjb25zdCBjaGFyICpjb25z dCk7CmV4dGVybiBpbnQgX25jX25hbWVfbWF0Y2ggKGNvbnN0IGNoYXIgKmNvbnN0LCBjb25zdCBj aGFyICpjb25zdCwgY29uc3QgY2hhciAqY29uc3QpOwpleHRlcm4gaW50IF9uY19yZWFkX3Rlcm1j YXBfZW50cnkgKGNvbnN0IGNoYXIgKmNvbnN0LCBURVJNVFlQRSAqY29uc3QpOwpleHRlcm4gY29u c3QgVEVSTVRZUEUgKiBfbmNfZmFsbGJhY2sgKGNvbnN0IGNoYXIgKik7CgoKZXh0ZXJuIFRFUk1J TkFMICogc2V0X2N1cnRlcm0gKFRFUk1JTkFMICopOwpleHRlcm4gaW50IGRlbF9jdXJ0ZXJtIChU RVJNSU5BTCAqKTsKCgpleHRlcm4gaW50IHJlc3RhcnR0ZXJtICggY2hhciAqLCBpbnQsIGludCAq KTsKZXh0ZXJuIGludCBzZXR1cHRlcm0gKCBjaGFyICosaW50LGludCAqKTsKIyA3NzAgIi4uL2lu Y2x1ZGUvdGVybS5oIgpleHRlcm4gY2hhciAqIHRnZXRzdHIgKCBjaGFyICosIGNoYXIgKiopOwpl eHRlcm4gY2hhciAqIHRnb3RvIChjb25zdCBjaGFyICosIGludCwgaW50KTsKZXh0ZXJuIGludCB0 Z2V0ZW50IChjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgdGdldGZsYWcgKCBjaGFy ICopOwpleHRlcm4gaW50IHRnZXRudW0gKCBjaGFyICopOwpleHRlcm4gaW50IHRwdXRzIChjb25z dCBjaGFyICosIGludCwgaW50ICgqKShpbnQpKTsKIyA0OCAiLi4vaW5jbHVkZS90ZXJtX2VudHJ5 LmgiIDIKCgoKCnR5cGVkZWYgc3RydWN0IGVudHJ5IHsKICAgICAgICBURVJNVFlQRSB0dGVybTsK ICAgICAgICBpbnQgbnVzZXM7CiAgICAgICAgc3RydWN0CiAgICAgICAgewogICAgICAgICAgICBj aGFyICpuYW1lOwogICAgICAgICAgICBzdHJ1Y3QgZW50cnkgKmxpbms7CiAgICAgICAgICAgIGxv bmcgbGluZTsKICAgICAgICB9CiAgICAgICAgdXNlc1szMl07CiAgICAgICAgaW50IG5jcm9zc2xp bmtzOwogICAgICAgIHN0cnVjdCBlbnRyeSAqY3Jvc3NsaW5rc1sxNl07CiAgICAgICAgbG9uZyBj c3RhcnQsIGNlbmQ7CiAgICAgICAgbG9uZyBzdGFydGxpbmU7CiAgICAgICAgc3RydWN0IGVudHJ5 ICpuZXh0OwogICAgICAgIHN0cnVjdCBlbnRyeSAqbGFzdDsKfQpFTlRSWTsKIyA5MyAiLi4vaW5j bHVkZS90ZXJtX2VudHJ5LmgiCmV4dGVybiBFTlRSWSAqIF9uY19oZWFkOwpleHRlcm4gRU5UUlkg KiBfbmNfdGFpbDsKIyAxMjAgIi4uL2luY2x1ZGUvdGVybV9lbnRyeS5oIgpleHRlcm4gRU5UUlkg KiBfbmNfY29weV9lbnRyeSAoRU5UUlkgKm9sZHApOwpleHRlcm4gY2hhciAqIF9uY19zYXZlX3N0 ciAoY29uc3QgY2hhciAqY29uc3QpOwpleHRlcm4gdm9pZCBfbmNfaW5pdF9lbnRyeSAoVEVSTVRZ UEUgKmNvbnN0KTsKZXh0ZXJuIHZvaWQgX25jX21lcmdlX2VudHJ5IChURVJNVFlQRSAqY29uc3Qs IFRFUk1UWVBFICpjb25zdCk7CmV4dGVybiB2b2lkIF9uY193cmFwX2VudHJ5IChFTlRSWSAqY29u c3QsIE5DVVJTRVNfQk9PTCk7CgoKZXh0ZXJuIHZvaWQgX25jX2FsaWduX3Rlcm10eXBlIChURVJN VFlQRSAqLCBURVJNVFlQRSAqKTsKZXh0ZXJuIHZvaWQgX25jX2NvcHlfdGVybXR5cGUgKFRFUk1U WVBFICosIFRFUk1UWVBFICopOwoKCmV4dGVybiB2b2lkIF9uY19mcmVlX3Rlcm10eXBlIChURVJN VFlQRSAqKTsKCgpleHRlcm4gdm9pZCBfbmNfaW5pdF9hY3MgKHZvaWQpOwoKCgpleHRlcm4gTkNV UlNFU19CT09MIF9uY191c2VyX2RlZmluYWJsZTsKZXh0ZXJuIE5DVVJTRVNfQk9PTCBfbmNfZGlz YWJsZV9wZXJpb2Q7CgpleHRlcm4gaW50IF9uY19wYXJzZV9lbnRyeSAoRU5UUlkgKiwgaW50LCBO Q1VSU0VTX0JPT0wpOwpleHRlcm4gaW50IF9uY19jYXBjbXAgKGNvbnN0IGNoYXIgKiwgY29uc3Qg Y2hhciAqKTsKCgpleHRlcm4gdm9pZCBfbmNfc2V0X3dyaXRlZGlyIChjaGFyICopOwpleHRlcm4g dm9pZCBfbmNfd3JpdGVfZW50cnkgKFRFUk1UWVBFICpjb25zdCk7CgoKZXh0ZXJuIHZvaWQgX25j X3JlYWRfZW50cnlfc291cmNlIChGSUxFKiwgY2hhciosIGludCwgTkNVUlNFU19CT09MLCBOQ1VS U0VTX0JPT0wgKCopKEVOVFJZKikpOwpleHRlcm4gTkNVUlNFU19CT09MIF9uY19lbnRyeV9tYXRj aCAoY2hhciAqLCBjaGFyICopOwpleHRlcm4gaW50IF9uY19yZXNvbHZlX3VzZXMgKE5DVVJTRVNf Qk9PTCk7CmV4dGVybiB2b2lkIF9uY19mcmVlX2VudHJpZXMgKEVOVFJZICopOwpleHRlcm4gdm9p ZCAoKl9uY19jaGVja190ZXJtdHlwZSkoVEVSTVRZUEUgKik7CgoKZXh0ZXJuIHZvaWQgX25jX3Ry YWNlX3huYW1lcyAoVEVSTVRZUEUgKik7CiMgMTA2ICIuLi9wcm9ncy9wcm9ncy5wcml2LmgiIDIK IyAxICIuLi9pbmNsdWRlL3RpYy5oIiAxCiMgMTE5ICIuLi9pbmNsdWRlL3RpYy5oIgpleHRlcm4g dW5zaWduZWQgX25jX3RyYWNpbmc7CmV4dGVybiB2b2lkIF9uY190cmFjZWYgKGNoYXIgKiwgLi4u KSA7CmV4dGVybiBjb25zdCBjaGFyICogX25jX3Zpc2J1ZiAoY29uc3QgY2hhciAqKTsKZXh0ZXJu IGNvbnN0IGNoYXIgKiBfbmNfdmlzYnVmMiAoaW50LCBjb25zdCBjaGFyICopOwojIDE0NiAiLi4v aW5jbHVkZS90aWMuaCIKc3RydWN0IHRva2VuCnsKICAgICAgICBjaGFyICp0a19uYW1lOwogICAg ICAgIGludCB0a192YWxudW1iZXI7CiAgICAgICAgY2hhciAqdGtfdmFsc3RyaW5nOwp9OwoKZXh0 ZXJuIHN0cnVjdCB0b2tlbiBfbmNfY3Vycl90b2tlbjsKCgoKCnN0cnVjdCBrbiB7CiAgICAgICAg Y29uc3QgY2hhciAqbmFtZTsKICAgICAgICBpbnQgY29kZTsKfTsKCmV4dGVybiBjb25zdCBzdHJ1 Y3Qga24gX25jX2tleV9uYW1lc1tdOwoKCgoKCnN0cnVjdCB0aW5mb19ma2V5cyB7CiAgICAgICAg dW5zaWduZWQgb2Zmc2V0OwogICAgICAgIGNodHlwZSBjb2RlOwogICAgICAgIH07CiMgMTgxICIu Li9pbmNsdWRlL3RpYy5oIgpleHRlcm4gc3RydWN0IHRpbmZvX2ZrZXlzIF9uY190aW5mb19ma2V5 c1tdOwojIDE5MSAiLi4vaW5jbHVkZS90aWMuaCIKc3RydWN0IG5hbWVfdGFibGVfZW50cnkKewog ICAgICAgIGNvbnN0IGNoYXIgKm50ZV9uYW1lOwogICAgICAgIGludCBudGVfdHlwZTsKICAgICAg ICBzaG9ydCBudGVfaW5kZXg7CiAgICAgICAgc2hvcnQgbnRlX2xpbms7Cn07CgpzdHJ1Y3QgYWxp YXMKewogICAgICAgIGNvbnN0IGNoYXIgKmZyb207CiAgICAgICAgY29uc3QgY2hhciAqdG87CiAg ICAgICAgY29uc3QgY2hhciAqc291cmNlOwp9OwoKZXh0ZXJuIGludCBfbmNfdHBhcm1fZXJyOwoK ZXh0ZXJuIGNvbnN0IHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICogY29uc3QgX25jX2luZm9faGFz aF90YWJsZVtdOwpleHRlcm4gY29uc3Qgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgKiBjb25zdCBf bmNfY2FwX2hhc2hfdGFibGVbXTsKCmV4dGVybiBjb25zdCBzdHJ1Y3QgYWxpYXMgX25jX2NhcGFs aWFzX3RhYmxlW107CmV4dGVybiBjb25zdCBzdHJ1Y3QgYWxpYXMgX25jX2luZm9hbGlhc190YWJs ZVtdOwoKZXh0ZXJuIGNvbnN0IHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICogX25jX2dldF90YWJs ZSAoTkNVUlNFU19CT09MKTsKZXh0ZXJuIGNvbnN0IHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICog Y29uc3QgKiBfbmNfZ2V0X2hhc2hfdGFibGUgKE5DVVJTRVNfQk9PTCk7CiMgMjQ0ICIuLi9pbmNs dWRlL3RpYy5oIgpleHRlcm4gY2hhciAqIF9uY19iYXNlbmFtZSAoY2hhciAqKTsKZXh0ZXJuIGNo YXIgKiBfbmNfcm9vdG5hbWUgKGNoYXIgKik7CgoKZXh0ZXJuIHN0cnVjdCBuYW1lX3RhYmxlX2Vu dHJ5IGNvbnN0ICogX25jX2ZpbmRfZW50cnkKICAgICAgICAoY29uc3QgY2hhciAqLCBjb25zdCBz dHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSAqY29uc3QgKik7CmV4dGVybiBzdHJ1Y3QgbmFtZV90YWJs ZV9lbnRyeSBjb25zdCAqIF9uY19maW5kX3R5cGVfZW50cnkKICAgICAgICAoY29uc3QgY2hhciAq LCBpbnQsIGNvbnN0IHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICopOwoKCmV4dGVybiBpbnQgX25j X2dldF90b2tlbiAoTkNVUlNFU19CT09MKTsKZXh0ZXJuIHZvaWQgX25jX3BhbmljX21vZGUgKGNo YXIpOwpleHRlcm4gdm9pZCBfbmNfcHVzaF90b2tlbiAoaW50KTsKZXh0ZXJuIHZvaWQgX25jX3Jl c2V0X2lucHV0IChGSUxFICosIGNoYXIgKik7CmV4dGVybiBpbnQgX25jX2N1cnJfY29sOwpleHRl cm4gaW50IF9uY19jdXJyX2xpbmU7CmV4dGVybiBpbnQgX25jX3N5bnRheDsKZXh0ZXJuIGxvbmcg X25jX2NvbW1lbnRfZW5kOwpleHRlcm4gbG9uZyBfbmNfY29tbWVudF9zdGFydDsKZXh0ZXJuIGxv bmcgX25jX2N1cnJfZmlsZV9wb3M7CmV4dGVybiBsb25nIF9uY19zdGFydF9saW5lOwoKCgoKZXh0 ZXJuIHZvaWQgX25jX3NldF9zb3VyY2UgKGNvbnN0IGNoYXIgKmNvbnN0IG5hbWUpOwpleHRlcm4g dm9pZCBfbmNfZ2V0X3R5cGUgKGNoYXIgKm5hbWUpOwpleHRlcm4gdm9pZCBfbmNfc2V0X3R5cGUg KGNvbnN0IGNoYXIgKmNvbnN0IG5hbWUpOwpleHRlcm4gdm9pZCBfbmNfc3lzZXJyX2Fib3J0IChj b25zdCBjaGFyICpjb25zdCwuLi4pIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CmV4dGVybiB2 b2lkIF9uY19lcnJfYWJvcnQgKGNvbnN0IGNoYXIgKmNvbnN0LC4uLikgX19hdHRyaWJ1dGVfXygo bm9yZXR1cm4pKTsKZXh0ZXJuIHZvaWQgX25jX3dhcm5pbmcgKGNvbnN0IGNoYXIgKmNvbnN0LC4u LikgOwpleHRlcm4gTkNVUlNFU19CT09MIF9uY19zdXBwcmVzc193YXJuaW5nczsKCgpleHRlcm4g Y2hhciAqIF9uY190aWNfZXhwYW5kIChjb25zdCBjaGFyICosIE5DVVJTRVNfQk9PTCwgaW50KTsK CgpleHRlcm4gY2hhciBfbmNfdHJhbnNfc3RyaW5nIChjaGFyICosIGNoYXIgKik7CgoKZXh0ZXJu IGNoYXIgKiBfbmNfY2FwdG9pbmZvIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50IGNv bnN0KTsKZXh0ZXJuIGNoYXIgKiBfbmNfaW5mb3RvY2FwIChjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKiwgaW50IGNvbnN0KTsKCgpleHRlcm4gaW50IF9uY19udWxsc19zZW50OwoKCmV4dGVybiBj b25zdCBjaGFyICogX25jX3Byb2duYW1lOwoKCmV4dGVybiBjb25zdCBjaGFyICogX25jX3RpY19k aXIgKGNvbnN0IGNoYXIgKik7CgoKZXh0ZXJuIGludCBfbmNfdGljX3dyaXR0ZW4gKHZvaWQpOwoj IDEwNyAiLi4vcHJvZ3MvcHJvZ3MucHJpdi5oIiAyCiMgMSAiLi4vaW5jbHVkZS9uY19hbGxvYy5o IiAxCiMgNzcgIi4uL2luY2x1ZGUvbmNfYWxsb2MuaCIKZXh0ZXJuIHZvaWQgKiBfbmNfZG9hbGxv Yyh2b2lkICosIHNpemVfdCk7CiMgMTA4ICIuLi9wcm9ncy9wcm9ncy5wcml2LmgiIDIKIyA0MCAi Li4vcHJvZ3MvaW5mb2NtcC5jIiAyCgoKIyAxICIuLi9wcm9ncy9kdW1wX2VudHJ5LmgiIDEKIyA1 OSAiLi4vcHJvZ3MvZHVtcF9lbnRyeS5oIgpleHRlcm4gY2hhciAqbmFtZXRyYW5zKGNvbnN0IGNo YXIgKik7CmV4dGVybiB2b2lkIGR1bXBfaW5pdChjb25zdCBjaGFyICosIGludCwgaW50LCBpbnQs IGludCwgTkNVUlNFU19CT09MKTsKZXh0ZXJuIGludCBmbXRfZW50cnkoVEVSTVRZUEUgKiwgaW50 ICgqKShpbnQsIGludCksIE5DVVJTRVNfQk9PTCwgTkNVUlNFU19CT09MLCBOQ1VSU0VTX0JPT0ws IGludCk7CmV4dGVybiBpbnQgZHVtcF9lbnRyeShURVJNVFlQRSAqLCBOQ1VSU0VTX0JPT0wsIE5D VVJTRVNfQk9PTCwgaW50LCBpbnQsIGludCAoKikoaW50LCBpbnQpKTsKZXh0ZXJuIGludCBkdW1w X3VzZXMoY29uc3QgY2hhciAqLCBOQ1VSU0VTX0JPT0wpOwpleHRlcm4gdm9pZCBjb21wYXJlX2Vu dHJ5KHZvaWQgKCopKGludCwgaW50LCBjb25zdCBjaGFyICopLCBURVJNVFlQRSAqLCBOQ1VSU0VT X0JPT0wpOwpleHRlcm4gdm9pZCByZXBhaXJfYWNzYyhURVJNVFlQRSAqIHRwKTsKIyA0MyAiLi4v cHJvZ3MvaW5mb2NtcC5jIiAyCgpzdGF0aWMgY29uc3QgY2hhciBJZGVudFtdID0gIiRJZDogaW5m b2NtcC5jLHYgMS42OCAyMDAyLzEwLzA2IDAxOjEzOjA0IHRvbSBFeHAgJCI7CgoKCgoKCgpjb25z dCBjaGFyICpfbmNfcHJvZ25hbWUgPSAiaW5mb2NtcCI7Cgp0eXBlZGVmIGNoYXIgcGF0aFs0MDk2 XTsKIyA2MyAiLi4vcHJvZ3MvaW5mb2NtcC5jIgpzdGF0aWMgY2hhciAqdG5hbWVbMzJdOwpzdGF0 aWMgRU5UUlkgZW50cmllc1szMl07CnN0YXRpYyBpbnQgdGVybWNvdW50OwoKc3RhdGljIE5DVVJT RVNfQk9PTCBsaW1pdGVkID0gMTsKc3RhdGljIE5DVVJTRVNfQk9PTCBxdWlldCA9IDA7CnN0YXRp YyBjb25zdCBjaGFyICpib29sX3NlcCA9ICI6IjsKc3RhdGljIGNvbnN0IGNoYXIgKnNfYWJzZW50 ID0gIk5VTEwiOwpzdGF0aWMgY29uc3QgY2hhciAqc19jYW5jZWwgPSAiTlVMTCI7CnN0YXRpYyBj b25zdCBjaGFyICp0dmVyc2lvbjsKc3RhdGljIGludCBpdHJhY2U7CnN0YXRpYyBpbnQgbXdpZHRo ID0gNjA7CnN0YXRpYyBpbnQgbnVtYmVycyA9IDA7CnN0YXRpYyBpbnQgb3V0Zm9ybSA9IDA7CnN0 YXRpYyBpbnQgc29ydG1vZGU7CgoKc3RhdGljIGludCBjb21wYXJlOwoKCgoKCnN0YXRpYyBOQ1VS U0VTX0JPT0wgaWdub3JlcGFkczsKIyAxMDMgIi4uL3Byb2dzL2luZm9jbXAuYyIKc3RhdGljIGNo YXIgKgpjYW5vbmljYWxfbmFtZShjaGFyICpwdHIsIGNoYXIgKmJ1ZikKCnsKICAgIGNoYXIgKmJw OwoKICAgICh2b2lkKSBzdHJjcHkoYnVmLCBwdHIpOwogICAgaWYgKChicCA9IHN0cmNocihidWYs ICd8JykpICE9IDApCiAgICAgICAgKmJwID0gJ1wwJzsKCiAgICByZXR1cm4gKGJ1Zik7Cn0KCgoK CgoKCnN0YXRpYyBpbnQKY2FwY21wKGludCBpZHgsIGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIg KnQpCgp7CiAgICBpZiAoISgocykgIT0gKGNoYXIgKikoLTEpICYmIChzKSAhPSAoY2hhciAqKTAp ICYmICEoKHQpICE9IChjaGFyICopKC0xKSAmJiAodCkgIT0gKGNoYXIgKikwKSkKICAgICAgICBy ZXR1cm4gKHMgIT0gdCk7CiAgICBlbHNlIGlmICghKChzKSAhPSAoY2hhciAqKSgtMSkgJiYgKHMp ICE9IChjaGFyICopMCkgfHwgISgodCkgIT0gKGNoYXIgKikoLTEpICYmICh0KSAhPSAoY2hhciAq KTApKQogICAgICAgIHJldHVybiAoMSk7CgogICAgaWYgKChpZHggPT0gMTQ2KSB8fCAhaWdub3Jl cGFkcykKICAgICAgICByZXR1cm4gKHN0cmNtcChzLCB0KSk7CiAgICBlbHNlCiAgICAgICAgcmV0 dXJuIChfbmNfY2FwY21wKHMsIHQpKTsKfQoKc3RhdGljIGludAp1c2VfcHJlZGljYXRlKGludCB0 eXBlLCBpbnQgaWR4KQoKewogICAgRU5UUlkgKmVwOwoKICAgIHN3aXRjaCAodHlwZSkgewogICAg Y2FzZSAwOgogICAgICAgIHsKICAgICAgICAgICAgaW50IGlzX3NldCA9IDA7CiMgMTU5ICIuLi9w cm9ncy9pbmZvY21wLmMiCiAgICAgICAgICAgIGZvciAoZXAgPSAmZW50cmllc1sxXTsgZXAgPCBl bnRyaWVzICsgdGVybWNvdW50OyBlcCsrKQogICAgICAgICAgICAgICAgaWYgKGVwLT50dGVybS5C b29sZWFuc1tpZHhdID09IDEpIHsKICAgICAgICAgICAgICAgICAgICBpc19zZXQgPSBlbnRyaWVz WzBdLnR0ZXJtLkJvb2xlYW5zW2lkeF07CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpc19zZXQgIT0gZW50cmllc1swXS50dGVybS5C b29sZWFuc1tpZHhdKQogICAgICAgICAgICAgICAgcmV0dXJuICghaXNfc2V0KTsKICAgICAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CiAgICAgICAgfQoKICAgIGNhc2Ug MToKICAgICAgICB7CiAgICAgICAgICAgIGludCB2YWx1ZSA9ICgtMSk7CgoKCgoKCiAgICAgICAg ICAgIGZvciAoZXAgPSAmZW50cmllc1sxXTsgZXAgPCBlbnRyaWVzICsgdGVybWNvdW50OyBlcCsr KQogICAgICAgICAgICAgICAgaWYgKCgoZXAtPnR0ZXJtLk51bWJlcnNbaWR4XSkgPj0gMCkpIHsK ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGVwLT50dGVybS5OdW1iZXJzW2lkeF07CiAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAo dmFsdWUgIT0gZW50cmllc1swXS50dGVybS5OdW1iZXJzW2lkeF0pCiAgICAgICAgICAgICAgICBy ZXR1cm4gKHZhbHVlICE9ICgtMSkpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBy ZXR1cm4gKC0xKTsKICAgICAgICB9CgogICAgY2FzZSAyOgogICAgICAgIHsKICAgICAgICAgICAg Y2hhciAqdGVybXN0ciwgKnVzZXN0ciA9IChjaGFyICopMDsKCiAgICAgICAgICAgIHRlcm1zdHIg PSBlbnRyaWVzWzBdLnR0ZXJtLlN0cmluZ3NbaWR4XTsKCgoKCgoKICAgICAgICAgICAgZm9yIChl cCA9ICZlbnRyaWVzWzFdOyBlcCA8IGVudHJpZXMgKyB0ZXJtY291bnQ7IGVwKyspCiAgICAgICAg ICAgICAgICBpZiAoZXAtPnR0ZXJtLlN0cmluZ3NbaWR4XSkgewogICAgICAgICAgICAgICAgICAg IHVzZXN0ciA9IGVwLT50dGVybS5TdHJpbmdzW2lkeF07CiAgICAgICAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAodXNlc3RyID09IChjaGFyICop MCAmJiB0ZXJtc3RyID09IChjaGFyICopMCkKICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOwog ICAgICAgICAgICBlbHNlIGlmICghdXNlc3RyIHx8ICF0ZXJtc3RyIHx8IGNhcGNtcChpZHgsIHVz ZXN0ciwgdGVybXN0cikpCiAgICAgICAgICAgICAgICByZXR1cm4gKDEpOwogICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0 dXJuICgwKTsKfQoKc3RhdGljIE5DVVJTRVNfQk9PTAp1c2VlcShFTlRSWSAqIGUxLCBFTlRSWSAq IGUyKQoKewogICAgaW50IGksIGo7CgogICAgaWYgKGUxLT5udXNlcyAhPSBlMi0+bnVzZXMpCiAg ICAgICAgcmV0dXJuICgwKTsKCgogICAgZm9yIChpID0gMDsgaSA8IGUxLT5udXNlczsgaSsrKSB7 CiAgICAgICAgTkNVUlNFU19CT09MIGZvdW5kbWF0Y2ggPSAwOwoKCiAgICAgICAgZm9yIChqID0g MDsgaiA8IGUyLT5udXNlczsgaisrKQogICAgICAgICAgICBpZiAoIXN0cmNtcChlMS0+dXNlc1tp XS5uYW1lLCBlMi0+dXNlc1tqXS5uYW1lKSkgewogICAgICAgICAgICAgICAgZm91bmRtYXRjaCA9 IDE7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICBpZiAoIWZv dW5kbWF0Y2gpCiAgICAgICAgICAgIHJldHVybiAoMCk7CiAgICB9CgogICAgcmV0dXJuICgxKTsK fQoKc3RhdGljIE5DVVJTRVNfQk9PTAplbnRyeWVxKFRFUk1UWVBFICogdDEsIFRFUk1UWVBFICog dDIpCgp7CiAgICBpbnQgaTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgKHQxKS0+bnVtX0Jvb2xlYW5z OyBpKyspCiAgICAgICAgaWYgKHQxLT5Cb29sZWFuc1tpXSAhPSB0Mi0+Qm9vbGVhbnNbaV0pCiAg ICAgICAgICAgIHJldHVybiAoMCk7CgogICAgZm9yIChpID0gMDsgaSA8ICh0MSktPm51bV9OdW1i ZXJzOyBpKyspCiAgICAgICAgaWYgKHQxLT5OdW1iZXJzW2ldICE9IHQyLT5OdW1iZXJzW2ldKQog ICAgICAgICAgICByZXR1cm4gKDApOwoKICAgIGZvciAoaSA9IDA7IGkgPCAodDEpLT5udW1fU3Ry aW5nczsgaSsrKQogICAgICAgIGlmIChjYXBjbXAoaSwgdDEtPlN0cmluZ3NbaV0sIHQyLT5TdHJp bmdzW2ldKSkKICAgICAgICAgICAgcmV0dXJuICgwKTsKCiAgICByZXR1cm4gKDEpOwp9CgoKCnN0 YXRpYyB2b2lkCnByaW50X3VzZXMoRU5UUlkgKiBlcCwgRklMRSAqIGZwKQoKewogICAgaW50IGk7 CgogICAgaWYgKCFlcC0+bnVzZXMpCiAgICAgICAgZnB1dHMoIk5VTEwiLCBmcCk7CiAgICBlbHNl CiAgICAgICAgZm9yIChpID0gMDsgaSA8IGVwLT5udXNlczsgaSsrKSB7CiAgICAgICAgICAgIGZw dXRzKGVwLT51c2VzW2ldLm5hbWUsIGZwKTsKICAgICAgICAgICAgaWYgKGkgPCBlcC0+bnVzZXMg LSAxKQogICAgICAgICAgICAgICAgZnB1dHMoIiAiLCBmcCk7CiAgICAgICAgfQp9CgpzdGF0aWMg Y29uc3QgY2hhciAqCmR1bXBfYm9vbGVhbihpbnQgdmFsKQoKewogICAgc3dpdGNoICh2YWwpIHsK ICAgIGNhc2UgKC0xKToKICAgICAgICByZXR1cm4gKHNfYWJzZW50KTsKICAgIGNhc2UgKGNoYXIp KC0yKToKICAgICAgICByZXR1cm4gKHNfY2FuY2VsKTsKICAgIGNhc2UgMDoKICAgICAgICByZXR1 cm4gKCJGIik7CiAgICBjYXNlIDE6CiAgICAgICAgcmV0dXJuICgiVCIpOwogICAgZGVmYXVsdDoK ICAgICAgICByZXR1cm4gKCI/Iik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkCmR1bXBfbnVtZXJpYyhp bnQgdmFsLCBjaGFyICpidWYpCgp7CiAgICBzd2l0Y2ggKHZhbCkgewogICAgY2FzZSAoLTEpOgog ICAgICAgIHN0cmNweShidWYsIHNfYWJzZW50KTsKICAgICAgICBicmVhazsKICAgIGNhc2UgKC0y KToKICAgICAgICBzdHJjcHkoYnVmLCBzX2NhbmNlbCk7CiAgICAgICAgYnJlYWs7CiAgICBkZWZh dWx0OgogICAgICAgIHNwcmludGYoYnVmLCAiJWQiLCB2YWwpOwogICAgICAgIGJyZWFrOwogICAg fQp9CgpzdGF0aWMgdm9pZApkdW1wX3N0cmluZyhjaGFyICp2YWwsIGNoYXIgKmJ1ZikKCnsKICAg IGlmICh2YWwgPT0gKGNoYXIgKikwKQogICAgICAgIHN0cmNweShidWYsIHNfYWJzZW50KTsKICAg IGVsc2UgaWYgKHZhbCA9PSAoY2hhciAqKSgtMSkpCiAgICAgICAgc3RyY3B5KGJ1Ziwgc19jYW5j ZWwpOwogICAgZWxzZSB7CiAgICAgICAgc3ByaW50ZihidWYsICInJS4qcyciLCAxMDI0IC0gMywg X25jX3RpY19leHBhbmQodmFsLCBvdXRmb3JtPT0wLCBudW1iZXJzKSk7CiAgICB9Cn0KCnN0YXRp YyB2b2lkCmNvbXBhcmVfcHJlZGljYXRlKGludCB0eXBlLCBpbnQgaWR4LCBjb25zdCBjaGFyICpu YW1lKQoKewogICAgcmVnaXN0ZXIgRU5UUlkgKmUxID0gJmVudHJpZXNbMF07CiAgICByZWdpc3Rl ciBFTlRSWSAqZTIgPSAmZW50cmllc1sxXTsKICAgIGNoYXIgYnVmMVsxMDI0XSwgYnVmMlsxMDI0 XTsKICAgIGludCBiMSwgYjI7CiAgICBpbnQgbjEsIG4yOwogICAgY2hhciAqczEsICpzMjsKCiAg ICBzd2l0Y2ggKHR5cGUpIHsKICAgIGNhc2UgMDoKICAgICAgICBiMSA9IGUxLT50dGVybS5Cb29s ZWFuc1tpZHhdOwogICAgICAgIGIyID0gZTItPnR0ZXJtLkJvb2xlYW5zW2lkeF07CiAgICAgICAg c3dpdGNoIChjb21wYXJlKSB7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgICBpZiAoIShiMSA9 PSAoLTEpICYmIGIyID09ICgtMSkpICYmIGIxICE9IGIyKQogICAgICAgICAgICAgICAgKHZvaWQp IGZwcmludGYgKHN0ZG91dCwgIlx0JXM6ICVzJXMlcy5cbiIsIG5hbWUsIGR1bXBfYm9vbGVhbihi MSksIGJvb2xfc2VwLCBkdW1wX2Jvb2xlYW4oYjIpKTsKCgoKCiAgICAgICAgICAgIGJyZWFrOwoK ICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgIGlmIChiMSA9PSBiMiAmJiBiMSAhPSAoLTEpKQog ICAgICAgICAgICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZG91dCwgIlx0JXM9ICVzLlxuIiwgbmFt ZSwgZHVtcF9ib29sZWFuKGIxKSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDM6 CiAgICAgICAgICAgIGlmIChiMSA9PSAoLTEpICYmIGIyID09ICgtMSkpCiAgICAgICAgICAgICAg ICAodm9pZCkgZnByaW50ZiAoc3Rkb3V0LCAiXHQhJXMuXG4iLCBuYW1lKTsKICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwoKICAgIGNhc2UgMToKICAgICAgICBuMSA9 IGUxLT50dGVybS5OdW1iZXJzW2lkeF07CiAgICAgICAgbjIgPSBlMi0+dHRlcm0uTnVtYmVyc1tp ZHhdOwogICAgICAgIGR1bXBfbnVtZXJpYyhuMSwgYnVmMSk7CiAgICAgICAgZHVtcF9udW1lcmlj KG4yLCBidWYyKTsKICAgICAgICBzd2l0Y2ggKGNvbXBhcmUpIHsKICAgICAgICBjYXNlIDE6CiAg ICAgICAgICAgIGlmICghKChuMSA9PSAoLTEpICYmIG4yID09ICgtMSkpKSAmJiBuMSAhPSBuMikK ICAgICAgICAgICAgICAgICh2b2lkKSBmcHJpbnRmIChzdGRvdXQsICJcdCVzOiAlcywgJXMuXG4i LCBuYW1lLCBidWYxLCBidWYyKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMjoK ICAgICAgICAgICAgaWYgKG4xICE9ICgtMSkgJiYgbjIgIT0gKC0xKSAmJiBuMSA9PSBuMikKICAg ICAgICAgICAgICAgICh2b2lkKSBmcHJpbnRmIChzdGRvdXQsICJcdCVzPSAlcy5cbiIsIG5hbWUs IGJ1ZjEpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAzOgogICAgICAgICAgICBp ZiAobjEgPT0gKC0xKSAmJiBuMiA9PSAoLTEpKQogICAgICAgICAgICAgICAgKHZvaWQpIGZwcmlu dGYgKHN0ZG91dCwgIlx0ISVzLlxuIiwgbmFtZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAg IH0KICAgICAgICBicmVhazsKCiAgICBjYXNlIDI6CiAgICAgICAgczEgPSBlMS0+dHRlcm0uU3Ry aW5nc1tpZHhdOwogICAgICAgIHMyID0gZTItPnR0ZXJtLlN0cmluZ3NbaWR4XTsKICAgICAgICBz d2l0Y2ggKGNvbXBhcmUpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIGlmIChjYXBjbXAo aWR4LCBzMSwgczIpKSB7CiAgICAgICAgICAgICAgICBkdW1wX3N0cmluZyhzMSwgYnVmMSk7CiAg ICAgICAgICAgICAgICBkdW1wX3N0cmluZyhzMiwgYnVmMik7CiAgICAgICAgICAgICAgICBpZiAo c3RyY21wKGJ1ZjEsIGJ1ZjIpKQogICAgICAgICAgICAgICAgICAgICh2b2lkKSBmcHJpbnRmIChz dGRvdXQsICJcdCVzOiAlcywgJXMuXG4iLCBuYW1lLCBidWYxLCBidWYyKTsKICAgICAgICAgICAg fQogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAyOgogICAgICAgICAgICBpZiAoczEg JiYgczIgJiYgIWNhcGNtcChpZHgsIHMxLCBzMikpCiAgICAgICAgICAgICAgICAodm9pZCkgZnBy aW50ZiAoc3Rkb3V0LCAiXHQlcz0gJyVzJy5cbiIsIG5hbWUsIF9uY190aWNfZXhwYW5kKHMxLCBv dXRmb3JtPT0wLCBudW1iZXJzKSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDM6 CiAgICAgICAgICAgIGlmICghczEgJiYgIXMyKQogICAgICAgICAgICAgICAgKHZvaWQpIGZwcmlu dGYgKHN0ZG91dCwgIlx0ISVzLlxuIiwgbmFtZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAg IH0KICAgICAgICBicmVhazsKCiAgICBjYXNlIDM6CgogICAgICAgIHN3aXRjaCAoY29tcGFyZSkg ewogICAgICAgIGNhc2UgMToKICAgICAgICAgICAgaWYgKCF1c2VlcShlMSwgZTIpKSB7CiAgICAg ICAgICAgICAgICAodm9pZCkgZnB1dHMoIlx0dXNlOiAiLCBzdGRvdXQpOwogICAgICAgICAgICAg ICAgcHJpbnRfdXNlcyhlMSwgc3Rkb3V0KTsKICAgICAgICAgICAgICAgIGZwdXRzKCIsICIsIHN0 ZG91dCk7CiAgICAgICAgICAgICAgICBwcmludF91c2VzKGUyLCBzdGRvdXQpOwogICAgICAgICAg ICAgICAgZnB1dHMoIi5cbiIsIHN0ZG91dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJl YWs7CgogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgaWYgKGUxLT5udXNlcyAmJiBlMi0+bnVz ZXMgJiYgdXNlZXEoZTEsIGUyKSkgewogICAgICAgICAgICAgICAgKHZvaWQpIGZwdXRzKCJcdHVz ZTogIiwgc3Rkb3V0KTsKICAgICAgICAgICAgICAgIHByaW50X3VzZXMoZTEsIHN0ZG91dCk7CiAg ICAgICAgICAgICAgICBmcHV0cygiLlxuIiwgc3Rkb3V0KTsKICAgICAgICAgICAgfQogICAgICAg ICAgICBicmVhazsKCiAgICAgICAgY2FzZSAzOgogICAgICAgICAgICBpZiAoIWUxLT5udXNlcyAm JiAhZTItPm51c2VzKQogICAgICAgICAgICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZG91dCwgIlx0 IXVzZS5cbiIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9Cn0KCgoKCgoKCnR5 cGVkZWYgc3RydWN0IHsKICAgIGNvbnN0IGNoYXIgKmZyb207CiAgICBjb25zdCBjaGFyICp0bzsK fSBhc3NvYzsKCnN0YXRpYyBjb25zdCBhc3NvYyBzdGRfY2Fwc1tdID0KewoKICAgIHsiXDAzM2Mi LCAiUklTIn0sCiAgICB7IlwwMzM3IiwgIlNDIn0sCiAgICB7IlwwMzM4IiwgIlJDIn0sCiAgICB7 IlwwMzNbciIsICJSU1IifSwKICAgIHsiXDAzM1ttIiwgIlNHUjAifSwKICAgIHsiXDAzM1sySiIs ICJFRDIifSwKCgogICAgeyJcMDMzKDAiLCAiSVNPIERFQyBHMCJ9LAogICAgeyJcMDMzKEEiLCAi SVNPIFVLIEcwIn0sCiAgICB7IlwwMzMoQiIsICJJU08gVVMgRzAifSwKICAgIHsiXDAzMykwIiwg IklTTyBERUMgRzEifSwKICAgIHsiXDAzMylBIiwgIklTTyBVSyBHMSJ9LAogICAgeyJcMDMzKUIi LCAiSVNPIFVTIEcxIn0sCgoKICAgIHsiXDAzMz0iLCAiREVDUEFNIn0sCiAgICB7IlwwMzM+Iiwg IkRFQ1BOTSJ9LAogICAgeyJcMDMzPCIsICJERUNBTlNJIn0sCgogICAgeyhjaGFyICopIDAsIChj aGFyICopIDB9Cn07CgpzdGF0aWMgY29uc3QgYXNzb2MgcHJpdmF0ZV9tb2Rlc1tdID0KCnsKICAg IHsiMSIsICJDS00ifSwKICAgIHsiMiIsICJBTk0ifSwKICAgIHsiMyIsICJDT0xNIn0sCiAgICB7 IjQiLCAiU0NMTSJ9LAogICAgeyI1IiwgIlNDTk0ifSwKICAgIHsiNiIsICJPTSJ9LAogICAgeyI3 IiwgIkFXTSJ9LAogICAgeyI4IiwgIkFSTSJ9LAogICAgeyhjaGFyICopIDAsIChjaGFyICopIDB9 Cn07CgpzdGF0aWMgY29uc3QgYXNzb2MgZWNtYV9oaWdobGlnaHRzW10gPQoKewogICAgeyIwIiwg Ik5PUk1BTCJ9LAogICAgeyIxIiwgIitCT0xEIn0sCiAgICB7IjIiLCAiK0RJTSJ9LAogICAgeyIz IiwgIitJVEFMSUMifSwKICAgIHsiNCIsICIrVU5ERVJMSU5FIn0sCiAgICB7IjUiLCAiK0JMSU5L In0sCiAgICB7IjYiLCAiK0ZBU1RCTElOSyJ9LAogICAgeyI3IiwgIitSRVZFUlNFIn0sCiAgICB7 IjgiLCAiK0lOVklTSUJMRSJ9LAogICAgeyI5IiwgIitERUxFVEVEIn0sCiAgICB7IjEwIiwgIk1B SU4tRk9OVCJ9LAogICAgeyIxMSIsICJBTFQtRk9OVC0xIn0sCiAgICB7IjEyIiwgIkFMVC1GT05U LTIifSwKICAgIHsiMTMiLCAiQUxULUZPTlQtMyJ9LAogICAgeyIxNCIsICJBTFQtRk9OVC00In0s CiAgICB7IjE1IiwgIkFMVC1GT05ULTUifSwKICAgIHsiMTYiLCAiQUxULUZPTlQtNiJ9LAogICAg eyIxNyIsICJBTFQtRk9OVC03In0sCiAgICB7IjE4IiwgIkFMVC1GT05ULTEifSwKICAgIHsiMTki LCAiQUxULUZPTlQtMSJ9LAogICAgeyIyMCIsICJGUkFLVFVSIn0sCiAgICB7IjIxIiwgIkRPVUJM RVVOREVSIn0sCiAgICB7IjIyIiwgIi1ESU0ifSwKICAgIHsiMjMiLCAiLUlUQUxJQyJ9LAogICAg eyIyNCIsICItVU5ERVJMSU5FIn0sCiAgICB7IjI1IiwgIi1CTElOSyJ9LAogICAgeyIyNiIsICIt RkFTVEJMSU5LIn0sCiAgICB7IjI3IiwgIi1SRVZFUlNFIn0sCiAgICB7IjI4IiwgIi1JTlZJU0lC TEUifSwKICAgIHsiMjkiLCAiLURFTEVURUQifSwKICAgIHsoY2hhciAqKSAwLCAoY2hhciAqKSAw fQp9OwoKc3RhdGljIHZvaWQKYW5hbHl6ZV9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qg Y2hhciAqY2FwLCBURVJNVFlQRSAqIHRwKQp7CiAgICBjaGFyIGJ1Zls0MDk2XTsKICAgIGNoYXIg YnVmMls0MDk2XTsKICAgIGNvbnN0IGNoYXIgKnNwLCAqZXA7CiAgICBjb25zdCBhc3NvYyAqYXA7 CgogICAgaWYgKGNhcCA9PSAoY2hhciAqKTAgfHwgY2FwID09IChjaGFyICopKC0xKSkKICAgICAg ICByZXR1cm47CiAgICAodm9pZCkgZnByaW50ZiAoc3Rkb3V0LCAiJXM6ICIsIG5hbWUpOwoKICAg IGJ1ZlswXSA9ICdcMCc7CiAgICBmb3IgKHNwID0gY2FwOyAqc3A7IHNwKyspIHsKICAgICAgICBp bnQgaTsKICAgICAgICBzaXplX3QgbGVuID0gMDsKICAgICAgICBjb25zdCBjaGFyICpleHBhbnNp b24gPSAwOwoKCiAgICAgICAgZm9yIChpID0gMDsgaSA8IDQxNDsgaSsrKSB7CiAgICAgICAgICAg IGNoYXIgKmNwID0gdHAtPlN0cmluZ3NbaV07CgoKICAgICAgICAgICAgaWYgKHN0cm5hbWVzW2ld WzBdID09ICdrJyAmJiBzdHJuYW1lc1tpXVswXSA9PSAnZicpCiAgICAgICAgICAgICAgICBjb250 aW51ZTsKCiAgICAgICAgICAgIGlmIChjcCAhPSAoY2hhciAqKTAgJiYgY3AgIT0gKGNoYXIgKiko LTEpICYmIGNwWzBdICYmIGNwCiAgICAgICAgICAgICAgICAhPSBjYXApIHsKICAgICAgICAgICAg ICAgIGxlbiA9IHN0cmxlbihjcCk7CiAgICAgICAgICAgICAgICAodm9pZCkgc3RybmNweShidWYy LCBzcCwgbGVuKTsKICAgICAgICAgICAgICAgIGJ1ZjJbbGVuXSA9ICdcMCc7CgogICAgICAgICAg ICAgICAgaWYgKF9uY19jYXBjbXAoY3AsIGJ1ZjIpKQogICAgICAgICAgICAgICAgICAgIGNvbnRp bnVlOwojIDU3OCAiLi4vcHJvZ3MvaW5mb2NtcC5jIgogICAgICAgICAgICAgICAgaWYgKCghc3Ry bmNtcCgobmFtZSksICJpcyIsIDIpIHx8ICFzdHJuY21wKChuYW1lKSwgInJzIiwgMikpIHx8ICgh c3RybmNtcCgoc3RybmFtZXNbaV0pLCAiaXMiLCAyKSB8fCAhc3RybmNtcCgoc3RybmFtZXNbaV0p LCAicnMiLCAyKSkpCiAgICAgICAgICAgICAgICAgICAgaWYgKGNhcCA8IGNwKQogICAgICAgICAg ICAgICAgICAgICAgICBjb250aW51ZTsKCgogICAgICAgICAgICAgICAgZXhwYW5zaW9uID0gc3Ry bmFtZXNbaV07CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0K CgogICAgICAgIGlmICghZXhwYW5zaW9uKQogICAgICAgICAgICBmb3IgKGFwID0gc3RkX2NhcHM7 IGFwLT5mcm9tOyBhcCsrKSB7CiAgICAgICAgICAgICAgICBsZW4gPSBzdHJsZW4oYXAtPmZyb20p OwoKICAgICAgICAgICAgICAgIGlmIChzdHJuY21wKGFwLT5mcm9tLCBzcCwgbGVuKSA9PSAwKSB7 CiAgICAgICAgICAgICAgICAgICAgZXhwYW5zaW9uID0gYXAtPnRvOwogICAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgoKICAgICAgICBpZiAo IWV4cGFuc2lvbgogICAgICAgICAgICAmJiBzcFswXSA9PSAnXDAzMycgJiYgc3BbMV0gPT0gJ1sn ICYmIHNwWzJdID09ICc/JwogICAgICAgICAgICAmJiAobGVuID0gc3Ryc3BuKHNwICsgMywgIjAx MjM0NTY3ODk7IikpCiAgICAgICAgICAgICYmICgoc3BbMyArIGxlbl0gPT0gJ2gnKSB8fCAoc3Bb MyArIGxlbl0gPT0gJ2wnKSkpIHsKICAgICAgICAgICAgY2hhciBidWYzWzQwOTZdOwoKICAgICAg ICAgICAgKHZvaWQpIHN0cmNweShidWYyLCAoc3BbMyArIGxlbl0gPT0gJ2gnKSA/ICJERUMrIiA6 ICJERUMtIik7CiAgICAgICAgICAgICh2b2lkKSBzdHJuY3B5KGJ1ZjMsIHNwICsgMywgbGVuKTsK ICAgICAgICAgICAgbGVuICs9IDQ7CiAgICAgICAgICAgIGJ1ZjNbbGVuXSA9ICdcMCc7CgogICAg ICAgICAgICBlcCA9IHN0cnRvayhidWYzLCAiOyIpOwogICAgICAgICAgICBkbyB7CiAgICAgICAg ICAgICAgICBOQ1VSU0VTX0JPT0wgZm91bmQgPSAwOwoKICAgICAgICAgICAgICAgIGZvciAoYXAg PSBwcml2YXRlX21vZGVzOyBhcC0+ZnJvbTsgYXArKykgewogICAgICAgICAgICAgICAgICAgIHNp emVfdCB0bGVuID0gc3RybGVuKGFwLT5mcm9tKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHN0 cm5jbXAoYXAtPmZyb20sIGVwLCB0bGVuKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICh2b2lkKSBzdHJjYXQoYnVmMiwgYXAtPnRvKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm91 bmQgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkKICAgICAg ICAgICAgICAgICAgICAodm9pZCkgc3RyY2F0KGJ1ZjIsIGVwKTsKICAgICAgICAgICAgICAgICh2 b2lkKSBzdHJjYXQoYnVmMiwgIjsiKTsKICAgICAgICAgICAgfSB3aGlsZQogICAgICAgICAgICAg ICAgKChlcCA9IHN0cnRvaygoY2hhciAqKSAwLCAiOyIpKSk7CiAgICAgICAgICAgIGJ1ZjJbc3Ry bGVuKGJ1ZjIpIC0gMV0gPSAnXDAnOwogICAgICAgICAgICBleHBhbnNpb24gPSBidWYyOwogICAg ICAgIH0KCgogICAgICAgIGlmICghZXhwYW5zaW9uCiAgICAgICAgICAgICYmIHNwWzBdID09ICdc MDMzJyAmJiBzcFsxXSA9PSAnWycKICAgICAgICAgICAgJiYgKGxlbiA9IHN0cnNwbihzcCArIDIs ICIwMTIzNDU2Nzg5OyIpKQogICAgICAgICAgICAmJiBzcFsyICsgbGVuXSA9PSAnbScpIHsKICAg ICAgICAgICAgY2hhciBidWYzWzQwOTZdOwoKICAgICAgICAgICAgKHZvaWQpIHN0cmNweShidWYy LCAiU0dSOiIpOwogICAgICAgICAgICAodm9pZCkgc3RybmNweShidWYzLCBzcCArIDIsIGxlbik7 CiAgICAgICAgICAgIGxlbiArPSAzOwogICAgICAgICAgICBidWYzW2xlbl0gPSAnXDAnOwoKICAg ICAgICAgICAgZXAgPSBzdHJ0b2soYnVmMywgIjsiKTsKICAgICAgICAgICAgZG8gewogICAgICAg ICAgICAgICAgTkNVUlNFU19CT09MIGZvdW5kID0gMDsKCiAgICAgICAgICAgICAgICBmb3IgKGFw ID0gZWNtYV9oaWdobGlnaHRzOyBhcC0+ZnJvbTsgYXArKykgewogICAgICAgICAgICAgICAgICAg IHNpemVfdCB0bGVuID0gc3RybGVuKGFwLT5mcm9tKTsKCiAgICAgICAgICAgICAgICAgICAgaWYg KHN0cm5jbXAoYXAtPmZyb20sIGVwLCB0bGVuKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgICh2b2lkKSBzdHJjYXQoYnVmMiwgYXAtPnRvKTsKICAgICAgICAgICAgICAgICAgICAgICAg Zm91bmQgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkKICAg ICAgICAgICAgICAgICAgICAodm9pZCkgc3RyY2F0KGJ1ZjIsIGVwKTsKICAgICAgICAgICAgICAg ICh2b2lkKSBzdHJjYXQoYnVmMiwgIjsiKTsKICAgICAgICAgICAgfSB3aGlsZQogICAgICAgICAg ICAgICAgKChlcCA9IHN0cnRvaygoY2hhciAqKSAwLCAiOyIpKSk7CgogICAgICAgICAgICBidWYy W3N0cmxlbihidWYyKSAtIDFdID0gJ1wwJzsKICAgICAgICAgICAgZXhwYW5zaW9uID0gYnVmMjsK ICAgICAgICB9CgogICAgICAgIGlmICghZXhwYW5zaW9uKSB7CiAgICAgICAgICAgICh2b2lkKSBz cHJpbnRmKGJ1ZjIsICJcMDMzWzE7JWRyIiwgdHAtPk51bWJlcnNbMl0pOwogICAgICAgICAgICBs ZW4gPSBzdHJsZW4oYnVmMik7CiAgICAgICAgICAgIGlmIChzdHJuY21wKGJ1ZjIsIHNwLCBsZW4p ID09IDApCiAgICAgICAgICAgICAgICBleHBhbnNpb24gPSAiUlNSIjsKICAgICAgICB9CgoKICAg ICAgICBpZiAoIWV4cGFuc2lvbikgewogICAgICAgICAgICAodm9pZCkgc3ByaW50ZihidWYyLCAi XDAzM1slZDsxSCIsIHRwLT5OdW1iZXJzWzJdKTsKICAgICAgICAgICAgbGVuID0gc3RybGVuKGJ1 ZjIpOwogICAgICAgICAgICBpZiAoc3RybmNtcChidWYyLCBzcCwgbGVuKSA9PSAwKQogICAgICAg ICAgICAgICAgZXhwYW5zaW9uID0gIkxMIjsKICAgICAgICB9CgoKICAgICAgICBpZiAoZXhwYW5z aW9uKSB7CiAgICAgICAgICAgICh2b2lkKSBzcHJpbnRmKGJ1ZiArIHN0cmxlbihidWYpLCAieyVz fSIsIGV4cGFuc2lvbik7CiAgICAgICAgICAgIHNwICs9IGxlbiAtIDE7CiAgICAgICAgICAgIGNv bnRpbnVlOwogICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICBidWYyWzBdID0gKnNwOwogICAg ICAgICAgICBidWYyWzFdID0gJ1wwJzsKICAgICAgICAgICAgKHZvaWQpIHN0cmNhdChidWYsIF9u Y190aWNfZXhwYW5kKGJ1ZjIsIG91dGZvcm09PTAsIG51bWJlcnMpKTsKICAgICAgICB9CiAgICB9 CiAgICAodm9pZCkgZnByaW50ZiAoc3Rkb3V0LCAiJXNcbiIsIGJ1Zik7Cn0KCgoKCgoKCnN0YXRp YyB2b2lkCmZpbGVfY29tcGFyaXNvbihpbnQgYXJnYywgY2hhciAqYXJndltdKQp7CgoKICAgIGlu dCBmaWxlY291bnQgPSAwOwogICAgRU5UUlkgKmhlYWRzWzJdOwogICAgRU5UUlkgKnFwLCAqcnA7 CiAgICBpbnQgaSwgbjsKCiAgICBkdW1wX2luaXQoKGNoYXIgKikgMCwgNCwgMiwgMCwgaXRyYWNl LCAwKTsKCiAgICBmb3IgKG4gPSAwOyBuIDwgYXJnYyAmJiBuIDwgMjsgbisrKSB7CiAgICAgICAg aWYgKGZyZW9wZW4oYXJndltuXSwgInIiLCBzdGRpbikgPT0gMCkKICAgICAgICAgICAgX25jX2Vy cl9hYm9ydCgiQ2FuJ3Qgb3BlbiAlcyIsIGFyZ3Zbbl0pOwoKICAgICAgICBfbmNfaGVhZCA9IF9u Y190YWlsID0gMDsKCgogICAgICAgIF9uY19zZXRfc291cmNlKGFyZ3Zbbl0pOwogICAgICAgIF9u Y19yZWFkX2VudHJ5X3NvdXJjZShzdGRpbiwgKCh2b2lkICopMCksIDEsIDAsIChOQ1VSU0VTX0JP T0woKikoRU5UUlkgKikpMCk7CgogICAgICAgIGlmIChpdHJhY2UpCiAgICAgICAgICAgICh2b2lk KSBmcHJpbnRmKHN0ZGVyciwgIlJlc29sdmluZyBmaWxlICVkLi4uXG4iLCBuIC0gMCk7CgoKICAg ICAgICBpZiAoIV9uY19yZXNvbHZlX3VzZXMoIWxpbWl0ZWQpKSB7CiAgICAgICAgICAgICh2b2lk KSBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZXJlIGFyZSB1 bnJlc29sdmVkIHVzZSBlbnRyaWVzIGluICVzOlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXJndltuXSk7CiAgICAgICAgICAgIGZvciAocXAgPSBfbmNfaGVhZDsgcXA7IHFwID0gcXAt Pm5leHQpIHsKICAgICAgICAgICAgICAgIGlmIChxcC0+bnVzZXMpIHsKICAgICAgICAgICAgICAg ICAgICAodm9pZCkgZnB1dHMocXAtPnR0ZXJtLnRlcm1fbmFtZXMsIHN0ZGVycik7CiAgICAgICAg ICAgICAgICAgICAgKHZvaWQpIGZwdXRjKCdcbicsIHN0ZGVycik7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICB9CgogICAgICAgIGhl YWRzW2ZpbGVjb3VudF0gPSBfbmNfaGVhZDsKICAgICAgICBmaWxlY291bnQrKzsKICAgIH0KCgog ICAgaWYgKGl0cmFjZSkKICAgICAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJFbnRyaWVzIGFy ZSBub3cgaW4gY29yZS4uLlxuIik7CgoKICAgIGZvciAocXAgPSBoZWFkc1swXTsgcXA7IHFwID0g cXAtPm5leHQpIHsKICAgICAgICBmb3IgKHJwID0gaGVhZHNbMV07IHJwOyBycCA9IHJwLT5uZXh0 KQogICAgICAgICAgICBpZiAoX25jX2VudHJ5X21hdGNoKHFwLT50dGVybS50ZXJtX25hbWVzLCBy cC0+dHRlcm0udGVybV9uYW1lcykpIHsKICAgICAgICAgICAgICAgIGlmIChxcC0+bmNyb3NzbGlu a3MgPCAxNikKICAgICAgICAgICAgICAgICAgICBxcC0+Y3Jvc3NsaW5rc1txcC0+bmNyb3NzbGlu a3NdID0gcnA7CiAgICAgICAgICAgICAgICBxcC0+bmNyb3NzbGlua3MrKzsKCiAgICAgICAgICAg ICAgICBpZiAocnAtPm5jcm9zc2xpbmtzIDwgMTYpCiAgICAgICAgICAgICAgICAgICAgcnAtPmNy b3NzbGlua3NbcnAtPm5jcm9zc2xpbmtzXSA9IHFwOwogICAgICAgICAgICAgICAgcnAtPm5jcm9z c2xpbmtzKys7CiAgICAgICAgICAgIH0KICAgIH0KCgogICAgaWYgKGl0cmFjZSkKICAgICAgICAo dm9pZCkgZnByaW50ZihzdGRlcnIsICJOYW1lIG1hdGNoZXMgYXJlIGRvbmUuLi5cbiIpOwoKICAg IGZvciAocXAgPSBoZWFkc1swXTsgcXA7IHFwID0gcXAtPm5leHQpIHsKICAgICAgICBpZiAocXAt Pm5jcm9zc2xpbmtzID4gMSkgewogICAgICAgICAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICIlcyBpbiBmaWxlIDEgKCVzKSBoYXMgJWQgbWF0Y2hl cyBpbiBmaWxlIDIgKCVzKTpcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9uY19maXJz dF9uYW1lKHFwLT50dGVybS50ZXJtX25hbWVzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg YXJndlswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgcXAtPm5jcm9zc2xpbmtzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBhcmd2WzFdKTsKICAgICAgICAgICAgZm9yIChpID0gMDsg aSA8IHFwLT5uY3Jvc3NsaW5rczsgaSsrKQogICAgICAgICAgICAgICAgKHZvaWQpIGZwcmludGYo c3RkZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx0JXNcbiIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfbmNfZmlyc3RfbmFtZSgocXAtPmNyb3NzbGlua3NbaV0p LT50dGVybS50ZXJtX25hbWVzKSk7CiAgICAgICAgfQogICAgfQoKICAgIGZvciAocnAgPSBoZWFk c1sxXTsgcnA7IHJwID0gcnAtPm5leHQpIHsKICAgICAgICBpZiAocnAtPm5jcm9zc2xpbmtzID4g MSkgewogICAgICAgICAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICIlcyBpbiBmaWxlIDIgKCVzKSBoYXMgJWQgbWF0Y2hlcyBpbiBmaWxlIDEgKCVz KTpcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9uY19maXJzdF9uYW1lKHJwLT50dGVy bS50ZXJtX25hbWVzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndlsxXSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgcnAtPm5jcm9zc2xpbmtzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICBhcmd2WzBdKTsKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJwLT5uY3Jvc3Ns aW5rczsgaSsrKQogICAgICAgICAgICAgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlx0JXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfbmNfZmlyc3RfbmFtZSgocnAtPmNyb3NzbGlua3NbaV0pLT50dGVybS50ZXJtX25h bWVzKSk7CiAgICAgICAgfQogICAgfQoKICAgICh2b2lkKSBmcHJpbnRmIChzdGRvdXQsICJJbiBm aWxlIDEgKCVzKSBvbmx5OlxuIiwgYXJndlswXSk7CiAgICBmb3IgKHFwID0gaGVhZHNbMF07IHFw OyBxcCA9IHFwLT5uZXh0KQogICAgICAgIGlmIChxcC0+bmNyb3NzbGlua3MgPT0gMCkKICAgICAg ICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZG91dCwgIlx0JXNcbiIsIF9uY19maXJzdF9uYW1lKHFw LT50dGVybS50ZXJtX25hbWVzKSk7CgoKICAgICh2b2lkKSBmcHJpbnRmIChzdGRvdXQsICJJbiBm aWxlIDIgKCVzKSBvbmx5OlxuIiwgYXJndlsxXSk7CiAgICBmb3IgKHJwID0gaGVhZHNbMV07IHJw OyBycCA9IHJwLT5uZXh0KQogICAgICAgIGlmIChycC0+bmNyb3NzbGlua3MgPT0gMCkKICAgICAg ICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZG91dCwgIlx0JXNcbiIsIF9uY19maXJzdF9uYW1lKHJw LT50dGVybS50ZXJtX25hbWVzKSk7CgoKICAgICh2b2lkKSBmcHJpbnRmIChzdGRvdXQsICJUaGUg Zm9sbG93aW5nIGVudHJpZXMgYXJlIGVxdWl2YWxlbnQ6XG4iKTsKICAgIGZvciAocXAgPSBoZWFk c1swXTsgcXA7IHFwID0gcXAtPm5leHQpIHsKICAgICAgICBycCA9IHFwLT5jcm9zc2xpbmtzWzBd OwoKICAgICAgICBpZiAocXAtPm5jcm9zc2xpbmtzID09IDEpIHsKICAgICAgICAgICAgcnAgPSBx cC0+Y3Jvc3NsaW5rc1swXTsKCiAgICAgICAgICAgIHJlcGFpcl9hY3NjKCZxcC0+dHRlcm0pOwog ICAgICAgICAgICByZXBhaXJfYWNzYygmcnAtPnR0ZXJtKTsKCiAgICAgICAgICAgIF9uY19hbGln bl90ZXJtdHlwZSgmcXAtPnR0ZXJtLCAmcnAtPnR0ZXJtKTsKCiAgICAgICAgICAgIGlmIChlbnRy eWVxKCZxcC0+dHRlcm0sICZycC0+dHRlcm0pICYmIHVzZWVxKHFwLCBycCkpIHsKICAgICAgICAg ICAgICAgIGNoYXIgbmFtZTFbMjU2XSwgbmFtZTJbMjU2XTsKCiAgICAgICAgICAgICAgICAodm9p ZCkgY2Fub25pY2FsX25hbWUocXAtPnR0ZXJtLnRlcm1fbmFtZXMsIG5hbWUxKTsKICAgICAgICAg ICAgICAgICh2b2lkKSBjYW5vbmljYWxfbmFtZShycC0+dHRlcm0udGVybV9uYW1lcywgbmFtZTIp OwoKICAgICAgICAgICAgICAgICh2b2lkKSBmcHJpbnRmIChzdGRvdXQsICIlcyA9ICVzXG4iLCBu YW1lMSwgbmFtZTIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICh2b2lkKSBm cHJpbnRmIChzdGRvdXQsICJEaWZmZXJpbmcgZW50cmllczpcbiIpOwogICAgdGVybWNvdW50ID0g MjsKICAgIGZvciAocXAgPSBoZWFkc1swXTsgcXA7IHFwID0gcXAtPm5leHQpIHsKCiAgICAgICAg aWYgKHFwLT5uY3Jvc3NsaW5rcyA9PSAxKSB7CiAgICAgICAgICAgIHJwID0gcXAtPmNyb3NzbGlu a3NbMF07CgoKICAgICAgICAgICAgX25jX2FsaWduX3Rlcm10eXBlKCZxcC0+dHRlcm0sICZycC0+ dHRlcm0pOwoKICAgICAgICAgICAgaWYgKCEoZW50cnllcSgmcXAtPnR0ZXJtLCAmcnAtPnR0ZXJt KSAmJiB1c2VlcShxcCwgcnApKSkgewogICAgICAgICAgICAgICAgY2hhciBuYW1lMVsyNTZdLCBu YW1lMlsyNTZdOwoKICAgICAgICAgICAgICAgIGVudHJpZXNbMF0gPSAqcXA7CiAgICAgICAgICAg ICAgICBlbnRyaWVzWzFdID0gKnJwOwoKICAgICAgICAgICAgICAgICh2b2lkKSBjYW5vbmljYWxf bmFtZShxcC0+dHRlcm0udGVybV9uYW1lcywgbmFtZTEpOwogICAgICAgICAgICAgICAgKHZvaWQp IGNhbm9uaWNhbF9uYW1lKHJwLT50dGVybS50ZXJtX25hbWVzLCBuYW1lMik7CgogICAgICAgICAg ICAgICAgc3dpdGNoIChjb21wYXJlKSB7CiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAg ICAgICAgICAgICAgaWYgKGl0cmFjZSkKICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpIGZw cmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5m b2NtcDogZHVtcGluZyBkaWZmZXJlbmNlc1xuIik7CiAgICAgICAgICAgICAgICAgICAgKHZvaWQp IGZwcmludGYgKHN0ZG91dCwgImNvbXBhcmluZyAlcyB0byAlcy5cbiIsIG5hbWUxLCBuYW1lMik7 CiAgICAgICAgICAgICAgICAgICAgY29tcGFyZV9lbnRyeShjb21wYXJlX3ByZWRpY2F0ZSwgJmVu dHJpZXMtPnR0ZXJtLCBxdWlldCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAg ICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgIGlmIChpdHJhY2UpCiAgICAgICAg ICAgICAgICAgICAgICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImluZm9jbXA6IGR1bXBpbmcgY29tbW9uIGNhcGFiaWxpdGll c1xuIik7CiAgICAgICAgICAgICAgICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZG91dCwgImNvbXBh cmluZyAlcyB0byAlcy5cbiIsIG5hbWUxLCBuYW1lMik7CiAgICAgICAgICAgICAgICAgICAgY29t cGFyZV9lbnRyeShjb21wYXJlX3ByZWRpY2F0ZSwgJmVudHJpZXMtPnR0ZXJtLCBxdWlldCk7CiAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAg ICAgICAgICAgICAgIGlmIChpdHJhY2UpCiAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKSBm cHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlu Zm9jbXA6IGR1bXBpbmcgZGlmZmVyZW5jZXNcbiIpOwogICAgICAgICAgICAgICAgICAgICh2b2lk KSBmcHJpbnRmIChzdGRvdXQsICJjb21wYXJpbmcgJXMgdG8gJXMuXG4iLCBuYW1lMSwgbmFtZTIp OwogICAgICAgICAgICAgICAgICAgIGNvbXBhcmVfZW50cnkoY29tcGFyZV9wcmVkaWNhdGUsICZl bnRyaWVzLT50dGVybSwgcXVpZXQpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKc3RhdGljIHZvaWQK dXNhZ2Uodm9pZCkKewogICAgc3RhdGljIGNvbnN0IGNoYXIgKnRibFtdID0KICAgIHsKICAgICAg ICAiVXNhZ2U6IGluZm9jbXAgW29wdGlvbnNdIFstQSBkaXJlY3RvcnldIFstQiBkaXJlY3Rvcnld IFt0ZXJtbmFtZS4uLl0iCiAgICAgICAgLCIiCiAgICAgICAgLCJPcHRpb25zOiIKICAgICAgICAs IiAgLTEgICAgcHJpbnQgc2luZ2xlLWNvbHVtbiIKICAgICAgICAsIiAgLUMgICAgdXNlIHRlcm1j YXAtbmFtZXMiCiAgICAgICAgLCIgIC1GICAgIGNvbXBhcmUgdGVybWluZm8tZmlsZXMiCiAgICAg ICAgLCIgIC1JICAgIHVzZSB0ZXJtaW5mby1uYW1lcyIKICAgICAgICAsIiAgLUwgICAgdXNlIGxv bmcgbmFtZXMiCiAgICAgICAgLCIgIC1SIHN1YnNldCAoc2VlIG1hbnBhZ2UpIgogICAgICAgICwi ICAtVCAgICBlbGltaW5hdGUgc2l6ZSBsaW1pdHMgKHRlc3QpIgogICAgICAgICwiICAtViAgICBw cmludCB2ZXJzaW9uIgoKICAgICAgICAsIiAgLWEgICAgd2l0aCAtRiwgbGlzdCBjb21tZW50ZWQt b3V0IGNhcHMiCgogICAgICAgICwiICAtYyAgICBsaXN0IGNvbW1vbiBjYXBhYmlsaXRpZXMiCiAg ICAgICAgLCIgIC1kICAgIGxpc3QgZGlmZmVyZW50IGNhcGFiaWxpdGllcyIKICAgICAgICAsIiAg LWUgICAgZm9ybWF0IG91dHB1dCBmb3IgQyBpbml0aWFsaXplciIKICAgICAgICAsIiAgLUUgICAg Zm9ybWF0IG91dHB1dCBhcyBDIHRhYmxlcyIKICAgICAgICAsIiAgLWYgICAgd2l0aCAtMSwgZm9y bWF0IGNvbXBsZXggc3RyaW5ncyIKICAgICAgICAsIiAgLUcgICAgZm9ybWF0ICV7bnVtYmVyfSB0 byAlJ2NoYXInIgogICAgICAgICwiICAtZyAgICBmb3JtYXQgJSdjaGFyJyB0byAle251bWJlcn0i CiAgICAgICAgLCIgIC1pICAgIGFuYWx5emUgaW5pdGlhbGl6YXRpb24vcmVzZXQiCiAgICAgICAg LCIgIC1sICAgIG91dHB1dCB0ZXJtaW5mbyBuYW1lcyIKICAgICAgICAsIiAgLW4gICAgbGlzdCBj YXBhYmlsaXRpZXMgaW4gbmVpdGhlciIKICAgICAgICAsIiAgLXAgICAgaWdub3JlIHBhZGRpbmcg c3BlY2lmaWVycyIKICAgICAgICAsIiAgLXEgICAgYnJpZWYgbGlzdGluZywgcmVtb3ZlcyBoZWFk ZXJzIgogICAgICAgICwiICAtciAgICB3aXRoIC1DLCBvdXRwdXQgaW4gdGVybWNhcCBmb3JtIgog ICAgICAgICwiICAtciAgICB3aXRoIC1GLCByZXNvbHZlIHVzZS1yZWZlcmVuY2VzIgogICAgICAg ICwiICAtcyBbZHxpfGx8Y10gc29ydCBmaWVsZHMiCgogICAgICAgICwiICAtdCAgICBzdXBwcmVz cyBjb21tZW50ZWQtb3V0IGNhcGFiaWxpdGllcyIKCiAgICAgICAgLCIgIC11ICAgIHByb2R1Y2Ug c291cmNlIHdpdGggJ3VzZT0nIgogICAgICAgICwiICAtdiBudW1iZXIgICh2ZXJib3NlKSIKICAg ICAgICAsIiAgLXcgbnVtYmVyICAod2lkdGgpIgogICAgfTsKICAgIGNvbnN0IHNpemVfdCBmaXJz dCA9IDM7CiAgICBjb25zdCBzaXplX3QgbGFzdCA9IChzaXplb2YodGJsKS9zaXplb2YodGJsWzBd KSk7CiAgICBjb25zdCBzaXplX3QgbGVmdCA9IChsYXN0IC0gZmlyc3QgKyAxKSAvIDIgKyBmaXJz dDsKICAgIHNpemVfdCBuOwoKICAgIGZvciAobiA9IDA7IG4gPCBsZWZ0OyBuKyspIHsKICAgICAg ICBzaXplX3QgbSA9IChuIDwgZmlyc3QpID8gbGFzdCA6IG4gKyBsZWZ0IC0gZmlyc3Q7CiAgICAg ICAgaWYgKG0gPCBsYXN0KQogICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiUtNDAuNDBzJXNc biIsIHRibFtuXSwgdGJsW21dKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiJXNcbiIsIHRibFtuXSk7CiAgICB9CiAgICBleGl0KDEpOwp9CgpzdGF0aWMgY2hhciAq CmFueV9pbml0aWFsaXplcihjb25zdCBjaGFyICpmbXQsIGNvbnN0IGNoYXIgKnR5cGUpCnsKICAg IHN0YXRpYyBjaGFyICppbml0aWFsaXplcjsKICAgIGNoYXIgKnM7CgogICAgaWYgKGluaXRpYWxp emVyID09IDApCiAgICAgICAgaW5pdGlhbGl6ZXIgPSAoY2hhciAqKSBtYWxsb2Moc3RybGVuKGVu dHJpZXMtPnR0ZXJtLnRlcm1fbmFtZXMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJsZW4odHlwZSkgKyBzdHJsZW4oZm10KSk7CgogICAgKHZvaWQpIHN0cmNweShp bml0aWFsaXplciwgZW50cmllcy0+dHRlcm0udGVybV9uYW1lcyk7CiAgICBmb3IgKHMgPSBpbml0 aWFsaXplcjsgKnMgIT0gMCAmJiAqcyAhPSAnfCc7IHMrKykgewogICAgICAgIGlmICghKF9fY3R5 cGVfYlsoaW50KSAoKCgodW5zaWduZWQgY2hhcikoKnMpKSkpXSAmICh1bnNpZ25lZCBzaG9ydCBp bnQpIF9JU2FsbnVtKSkKICAgICAgICAgICAgKnMgPSAnXyc7CiAgICB9CiAgICAqcyA9IDA7CiAg ICAodm9pZCkgc3ByaW50ZihzLCBmbXQsIHR5cGUpOwogICAgcmV0dXJuIGluaXRpYWxpemVyOwp9 CgpzdGF0aWMgY2hhciAqCm5hbWVfaW5pdGlhbGl6ZXIoY29uc3QgY2hhciAqdHlwZSkKewogICAg cmV0dXJuIGFueV9pbml0aWFsaXplcigiXyVzX2RhdGEiLCB0eXBlKTsKfQoKc3RhdGljIGNoYXIg KgpzdHJpbmdfdmFyaWFibGUoY29uc3QgY2hhciAqdHlwZSkKewogICAgcmV0dXJuIGFueV9pbml0 aWFsaXplcigiX3NfJXMiLCB0eXBlKTsKfQoKCnN0YXRpYyB2b2lkCmR1bXBfaW5pdGlhbGl6ZXJz KFRFUk1UWVBFICogdGVybSkKewogICAgaW50IG47CiAgICBpbnQgc2l6ZTsKICAgIGNvbnN0IGNo YXIgKnN0ciA9IDA7CgogICAgZnByaW50ZiAoc3Rkb3V0LCAiXG5zdGF0aWMgY2hhciAlc1tdID0g XCIlc1wiO1xuXG4iLCBuYW1lX2luaXRpYWxpemVyKCJhbGlhcyIpLCBlbnRyaWVzLT50dGVybS50 ZXJtX25hbWVzKTsKCgogICAgZm9yKG4gPSAwOyBuIDwgKHRlcm0pLT5udW1fU3RyaW5nczsgbisr KSB7CiAgICAgICAgY2hhciBidWZbMTAyNF0sICpzcCwgKnRwOwoKICAgICAgICBpZiAoKCh0ZXJt LT5TdHJpbmdzW25dKSAhPSAoY2hhciAqKSgtMSkgJiYgKHRlcm0tPlN0cmluZ3Nbbl0pICE9IChj aGFyICopMCkpIHsKICAgICAgICAgICAgdHAgPSBidWY7CiAgICAgICAgICAgICp0cCsrID0gJyIn OwogICAgICAgICAgICBmb3IgKHNwID0gdGVybS0+U3RyaW5nc1tuXTsKICAgICAgICAgICAgICAg ICAqc3AgIT0gMCAmJiAodHAgLSBidWYpIDwgMTAyNCAtIDY7CiAgICAgICAgICAgICAgICAgc3Ar KykgewogICAgICAgICAgICAgICAgaWYgKCgoKCgodW5zaWduZWQgY2hhcikoKnNwKSkpICYgfjB4 N2YpID09IDApCiAgICAgICAgICAgICAgICAgICAgJiYgKF9fY3R5cGVfYlsoaW50KSAoKCgodW5z aWduZWQgY2hhcikoKnNwKSkpKV0gJiAodW5zaWduZWQgc2hvcnQgaW50KSBfSVNwcmludCkKICAg ICAgICAgICAgICAgICAgICAmJiAqc3AgIT0gJ1xcJwogICAgICAgICAgICAgICAgICAgICYmICpz cCAhPSAnIicpCiAgICAgICAgICAgICAgICAgICAgKnRwKysgPSAqc3A7CiAgICAgICAgICAgICAg ICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAodm9pZCkgc3ByaW50Zih0cCwgIlxcJTAzbyIs ICgodW5zaWduZWQgY2hhcikoKnNwKSkpOwogICAgICAgICAgICAgICAgICAgIHRwICs9IDQ7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgKnRwKysgPSAnIic7CiAg ICAgICAgICAgICp0cCA9ICdcMCc7CiAgICAgICAgICAgIHNpemUgKz0gKHN0cmxlbih0ZXJtLT5T dHJpbmdzW25dKSArIDEpOwogICAgICAgICAgICAodm9pZCkgZnByaW50ZiAoc3Rkb3V0LCAic3Rh dGljIGNoYXIgJS0yMHNbXSA9ICVzO1xuIiwgc3RyaW5nX3ZhcmlhYmxlKChuID49IDQxNCkgPyB0 ZXJtLT5leHRfTmFtZXNbKG4gLSAodGVybS0+bnVtX1N0cmluZ3MgLSB0ZXJtLT5leHRfU3RyaW5n cykpICsgKHRlcm0tPmV4dF9OdW1iZXJzICsgdGVybS0+ZXh0X0Jvb2xlYW5zKV0gOiBzdHJuYW1l c1tuXSksIGJ1Zik7CgogICAgICAgIH0KICAgIH0KICAgIGZwcmludGYgKHN0ZG91dCwgIlxuIik7 CgogICAgKHZvaWQpIGZwcmludGYgKHN0ZG91dCwgInN0YXRpYyBjaGFyICVzW10gPSAlc1xuIiwg bmFtZV9pbml0aWFsaXplcigiYm9vbCIpLCAieyIpOwoKICAgIGZvcihuID0gMDsgbiA8ICh0ZXJt KS0+bnVtX0Jvb2xlYW5zOyBuKyspIHsKICAgICAgICBzd2l0Y2ggKChpbnQpICh0ZXJtLT5Cb29s ZWFuc1tuXSkpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIHN0ciA9ICJUUlVFIjsKICAg ICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgc3RyID0gIkZBTFNF IjsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgKC0xKToKICAgICAgICAgICAgc3Ry ID0gIkFCU0VOVF9CT09MRUFOIjsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgKGNo YXIpKC0yKToKICAgICAgICAgICAgc3RyID0gIkNBTkNFTExFRF9CT09MRUFOIjsKICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgICh2b2lkKSBmcHJpbnRmIChzdGRvdXQsICJcdC8q ICUzZDogJS04cyAqL1x0JXMsXG4iLCBuLCAobiA+PSA0NCkgPyB0ZXJtLT5leHRfTmFtZXNbKG4g LSAodGVybS0+bnVtX0Jvb2xlYW5zIC0gdGVybS0+ZXh0X0Jvb2xlYW5zKSldIDogYm9vbG5hbWVz W25dLCBzdHIpOwoKICAgIH0KICAgICh2b2lkKSBmcHJpbnRmIChzdGRvdXQsICIlcztcbiIsICJ9 Iik7CgogICAgKHZvaWQpIGZwcmludGYgKHN0ZG91dCwgInN0YXRpYyBzaG9ydCAlc1tdID0gJXNc biIsIG5hbWVfaW5pdGlhbGl6ZXIoIm51bWJlciIpLCAieyIpOwoKICAgIGZvcihuID0gMDsgbiA8 ICh0ZXJtKS0+bnVtX051bWJlcnM7IG4rKykgewogICAgICAgIGNoYXIgYnVmWzgxOTJdOwogICAg ICAgIHN3aXRjaCAodGVybS0+TnVtYmVyc1tuXSkgewogICAgICAgIGNhc2UgKC0xKToKICAgICAg ICAgICAgc3RyID0gIkFCU0VOVF9OVU1FUklDIjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg Y2FzZSAoLTIpOgogICAgICAgICAgICBzdHIgPSAiQ0FOQ0VMTEVEX05VTUVSSUMiOwogICAgICAg ICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIiVk IiwgdGVybS0+TnVtYmVyc1tuXSk7CiAgICAgICAgICAgIHN0ciA9IGJ1ZjsKICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgfQogICAgICAgICh2b2lkKSBmcHJpbnRmIChzdGRvdXQsICJcdC8qICUz ZDogJS04cyAqL1x0JXMsXG4iLCBuLCAobiA+PSAzOSkgPyB0ZXJtLT5leHRfTmFtZXNbKG4gLSAo dGVybS0+bnVtX051bWJlcnMgLSB0ZXJtLT5leHRfTnVtYmVycykpICsgdGVybS0+ZXh0X0Jvb2xl YW5zXSA6IG51bW5hbWVzW25dLCBzdHIpOwoKICAgIH0KICAgICh2b2lkKSBmcHJpbnRmIChzdGRv dXQsICIlcztcbiIsICJ9Iik7CgogICAgc2l6ZSA9IHNpemVvZihURVJNVFlQRSkKICAgICAgICAr ICgodGVybSktPm51bV9Cb29sZWFucyAqIHNpemVvZih0ZXJtLT5Cb29sZWFuc1swXSkpCiAgICAg ICAgKyAoKHRlcm0pLT5udW1fTnVtYmVycyAqIHNpemVvZih0ZXJtLT5OdW1iZXJzWzBdKSk7Cgog ICAgKHZvaWQpIGZwcmludGYgKHN0ZG91dCwgInN0YXRpYyBjaGFyICogJXNbXSA9ICVzXG4iLCBu YW1lX2luaXRpYWxpemVyKCJzdHJpbmciKSwgInsiKTsKCiAgICBmb3IobiA9IDA7IG4gPCAodGVy bSktPm51bV9TdHJpbmdzOyBuKyspIHsKCiAgICAgICAgaWYgKHRlcm0tPlN0cmluZ3Nbbl0gPT0g KGNoYXIgKikwKQogICAgICAgICAgICBzdHIgPSAiQUJTRU5UX1NUUklORyI7CiAgICAgICAgZWxz ZSBpZiAodGVybS0+U3RyaW5nc1tuXSA9PSAoY2hhciAqKSgtMSkpCiAgICAgICAgICAgIHN0ciA9 ICJDQU5DRUxMRURfU1RSSU5HIjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgc3RyID0gc3Ry aW5nX3ZhcmlhYmxlKChuID49IDQxNCkgPyB0ZXJtLT5leHRfTmFtZXNbKG4gLSAodGVybS0+bnVt X1N0cmluZ3MgLSB0ZXJtLT5leHRfU3RyaW5ncykpICsgKHRlcm0tPmV4dF9OdW1iZXJzICsgdGVy bS0+ZXh0X0Jvb2xlYW5zKV0gOiBzdHJuYW1lc1tuXSk7CiAgICAgICAgfQogICAgICAgICh2b2lk KSBmcHJpbnRmIChzdGRvdXQsICJcdC8qICUzZDogJS04cyAqL1x0JXMsXG4iLCBuLCAobiA+PSA0 MTQpID8gdGVybS0+ZXh0X05hbWVzWyhuIC0gKHRlcm0tPm51bV9TdHJpbmdzIC0gdGVybS0+ZXh0 X1N0cmluZ3MpKSArICh0ZXJtLT5leHRfTnVtYmVycyArIHRlcm0tPmV4dF9Cb29sZWFucyldIDog c3RybmFtZXNbbl0sIHN0cik7CgogICAgfQogICAgKHZvaWQpIGZwcmludGYgKHN0ZG91dCwgIiVz O1xuIiwgIn0iKTsKCgogICAgaWYgKCgodGVybSktPm51bV9Cb29sZWFucyAhPSA0NCkKICAgICAg ICB8fCAoKHRlcm0pLT5udW1fTnVtYmVycyAhPSAzOSkKICAgICAgICB8fCAoKHRlcm0pLT5udW1f U3RyaW5ncyAhPSA0MTQpKSB7CiAgICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZG91dCwgInN0YXRp YyBjaGFyICogJXNbXSA9ICVzXG4iLCBuYW1lX2luaXRpYWxpemVyKCJzdHJpbmdfZXh0IiksICJ7 Iik7CgogICAgICAgIGZvciAobiA9IDQ0OyBuIDwgKHRlcm0pLT5udW1fQm9vbGVhbnM7ICsrbikg ewogICAgICAgICAgICAodm9pZCkgZnByaW50ZiAoc3Rkb3V0LCAiXHQvKiAlM2Q6IGJvb2wgKi9c dFwiJXNcIixcbiIsIG4sIChuID49IDQ0KSA/IHRlcm0tPmV4dF9OYW1lc1sobiAtICh0ZXJtLT5u dW1fQm9vbGVhbnMgLSB0ZXJtLT5leHRfQm9vbGVhbnMpKV0gOiBib29sbmFtZXNbbl0pOwoKICAg ICAgICB9CiAgICAgICAgZm9yIChuID0gMzk7IG4gPCAodGVybSktPm51bV9OdW1iZXJzOyArK24p IHsKICAgICAgICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZG91dCwgIlx0LyogJTNkOiBudW0gKi9c dFwiJXNcIixcbiIsIG4sIChuID49IDM5KSA/IHRlcm0tPmV4dF9OYW1lc1sobiAtICh0ZXJtLT5u dW1fTnVtYmVycyAtIHRlcm0tPmV4dF9OdW1iZXJzKSkgKyB0ZXJtLT5leHRfQm9vbGVhbnNdIDog bnVtbmFtZXNbbl0pOwoKICAgICAgICB9CiAgICAgICAgZm9yIChuID0gNDE0OyBuIDwgKHRlcm0p LT5udW1fU3RyaW5nczsgKytuKSB7CiAgICAgICAgICAgICh2b2lkKSBmcHJpbnRmIChzdGRvdXQs ICJcdC8qICUzZDogc3RyICovXHRcIiVzXCIsXG4iLCBuLCAobiA+PSA0MTQpID8gdGVybS0+ZXh0 X05hbWVzWyhuIC0gKHRlcm0tPm51bV9TdHJpbmdzIC0gdGVybS0+ZXh0X1N0cmluZ3MpKSArICh0 ZXJtLT5leHRfTnVtYmVycyArIHRlcm0tPmV4dF9Cb29sZWFucyldIDogc3RybmFtZXNbbl0pOwoK ICAgICAgICB9CiAgICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZG91dCwgIiVzO1xuIiwgIn0iKTsK ICAgIH0KCn0KCgpzdGF0aWMgdm9pZApkdW1wX3Rlcm10eXBlKFRFUk1UWVBFICogdGVybSkKewog ICAgKHZvaWQpIGZwcmludGYgKHN0ZG91dCwgIlx0JXNcblx0XHQlcyxcbiIsICJ7IiwgbmFtZV9p bml0aWFsaXplcigiYWxpYXMiKSk7CiAgICAodm9pZCkgZnByaW50ZiAoc3Rkb3V0LCAiXHRcdChj aGFyICopMCxcdC8qIHBvaW50ZXIgdG8gc3RyaW5nIHRhYmxlICovXG4iKTsKCiAgICAodm9pZCkg ZnByaW50ZiAoc3Rkb3V0LCAiXHRcdCVzLFxuIiwgbmFtZV9pbml0aWFsaXplcigiYm9vbCIpKTsK ICAgICh2b2lkKSBmcHJpbnRmIChzdGRvdXQsICJcdFx0JXMsXG4iLCBuYW1lX2luaXRpYWxpemVy KCJudW1iZXIiKSk7CgogICAgKHZvaWQpIGZwcmludGYgKHN0ZG91dCwgIlx0XHQlcyxcbiIsIG5h bWVfaW5pdGlhbGl6ZXIoInN0cmluZyIpKTsKCgogICAgKHZvaWQpIGZwcmludGYgKHN0ZG91dCwg IiNpZiBOQ1VSU0VTX1hOQU1FU1xuIik7CiAgICAodm9pZCkgZnByaW50ZiAoc3Rkb3V0LCAiXHRc dChjaGFyICopMCxcdC8qIHBvaW50ZXIgdG8gZXh0ZW5kZWQgc3RyaW5nIHRhYmxlICovXG4iKTsK ICAgICh2b2lkKSBmcHJpbnRmIChzdGRvdXQsICJcdFx0JXMsXHQvKiAuLi5jb3JyZXNwb25kaW5n IG5hbWVzICovXG4iLCAoKCh0ZXJtKS0+bnVtX0Jvb2xlYW5zICE9IDQ0KSB8fCAoKHRlcm0pLT5u dW1fTnVtYmVycyAhPSAzOSkgfHwgKCh0ZXJtKS0+bnVtX1N0cmluZ3MgIT0gNDE0KSkgPyBuYW1l X2luaXRpYWxpemVyKCJzdHJpbmdfZXh0IikgOiAiKGNoYXIgKiopMCIpOwoKCgoKCgogICAgKHZv aWQpIGZwcmludGYgKHN0ZG91dCwgIlx0XHQlZCxcdFx0LyogY291bnQgdG90YWwgQm9vbGVhbnMg Ki9cbiIsICh0ZXJtKS0+bnVtX0Jvb2xlYW5zKTsKICAgICh2b2lkKSBmcHJpbnRmIChzdGRvdXQs ICJcdFx0JWQsXHRcdC8qIGNvdW50IHRvdGFsIE51bWJlcnMgKi9cbiIsICh0ZXJtKS0+bnVtX051 bWJlcnMpOwogICAgKHZvaWQpIGZwcmludGYgKHN0ZG91dCwgIlx0XHQlZCxcdFx0LyogY291bnQg dG90YWwgU3RyaW5ncyAqL1xuIiwgKHRlcm0pLT5udW1fU3RyaW5ncyk7CgogICAgKHZvaWQpIGZw cmludGYgKHN0ZG91dCwgIlx0XHQlZCxcdFx0LyogY291bnQgZXh0ZW5zaW9ucyB0byBCb29sZWFu cyAqL1xuIiwgKHRlcm0pLT5udW1fQm9vbGVhbnMgLSA0NCk7CgogICAgKHZvaWQpIGZwcmludGYg KHN0ZG91dCwgIlx0XHQlZCxcdFx0LyogY291bnQgZXh0ZW5zaW9ucyB0byBOdW1iZXJzICovXG4i LCAodGVybSktPm51bV9OdW1iZXJzIC0gMzkpOwoKICAgICh2b2lkKSBmcHJpbnRmIChzdGRvdXQs ICJcdFx0JWQsXHRcdC8qIGNvdW50IGV4dGVuc2lvbnMgdG8gU3RyaW5ncyAqL1xuIiwgKHRlcm0p LT5udW1fU3RyaW5ncyAtIDQxNCk7CgoKICAgICh2b2lkKSBmcHJpbnRmIChzdGRvdXQsICIjZW5k aWYgLyogTkNVUlNFU19YTkFNRVMgKi9cbiIpOwoKICAgICh2b2lkKSBmcHJpbnRmIChzdGRvdXQs ICJcdCVzXG4iLCAifSIpOwp9CgpzdGF0aWMgaW50Cm9wdGFyZ190b19udW1iZXIodm9pZCkKewog ICAgY2hhciAqdGVtcCA9IDA7CiAgICBsb25nIHZhbHVlID0gc3RydG9sKG9wdGFyZywgJnRlbXAs IDApOwoKICAgIGlmICh0ZW1wID09IDAgfHwgdGVtcCA9PSBvcHRhcmcgfHwgKnRlbXAgIT0gMCkg ewogICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXhwZWN0ZWQgYSBudW1iZXIsIG5vdCBcIiVzXCJc biIsIG9wdGFyZyk7CiAgICAgICAgZXhpdCgxKTsKICAgIH0KICAgIHJldHVybiAoaW50KSB2YWx1 ZTsKfQoKCgoKCgoKaW50Cm1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogICAgY2hhciAq dGVybWluYWwsICpmaXJzdGRpciwgKnJlc3RkaXI7CgoKICAgIHBhdGggKnRmaWxlID0gKHBhdGgg KikgbWFsbG9jKHNpemVvZihwYXRoKSAqIDMyKTsKICAgIGludCBjLCBpLCBsZW47CiAgICBOQ1VS U0VTX0JPT0wgZm9ybWF0dGVkID0gMDsKICAgIE5DVVJTRVNfQk9PTCBmaWxlY29tcGFyZSA9IDA7 CiAgICBpbnQgaW5pdGR1bXAgPSAwOwogICAgTkNVUlNFU19CT09MIGluaXRfYW5hbHl6ZSA9IDA7 CiAgICBOQ1VSU0VTX0JPT0wgc3VwcHJlc3NfdW50cmFuc2xhdGFibGUgPSAwOwoKICAgIGlmICgo dGVybWluYWwgPSBnZXRlbnYoIlRFUk0iKSkgPT0gMCkgewogICAgICAgICh2b2lkKSBmcHJpbnRm KHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgICAiaW5mb2NtcDogZW52aXJvbm1lbnQgdmFy aWFibGUgVEVSTSBub3Qgc2V0XG4iKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCgogICAgcmVz dGRpciA9IGZpcnN0ZGlyID0gMDsKCiAgICB3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywKICAgICAg ICAgICAgICAgICAgICAgICBhcmd2LAogICAgICAgICAgICAgICAgICAgICAgICIxQTphQjpDY2RF ZUZmR2dJaUxsbnBxUjpyczpUdHVWdjp3OiIpKSAhPSAoLTEpKQogICAgICAgIHN3aXRjaCAoYykg ewogICAgICAgIGNhc2UgJzEnOgogICAgICAgICAgICBtd2lkdGggPSAwOwogICAgICAgICAgICBi cmVhazsKCiAgICAgICAgY2FzZSAnQSc6CiAgICAgICAgICAgIGZpcnN0ZGlyID0gb3B0YXJnOwog ICAgICAgICAgICBicmVhazsKCgogICAgICAgIGNhc2UgJ2EnOgogICAgICAgICAgICBfbmNfZGlz YWJsZV9wZXJpb2QgPSAxOwogICAgICAgICAgICB1c2VfZXh0ZW5kZWRfbmFtZXMoMSk7CiAgICAg ICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdCJzoKICAgICAgICAgICAgcmVzdGRpciA9IG9w dGFyZzsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ0MnOgogICAgICAgICAgICBv dXRmb3JtID0gMjsKICAgICAgICAgICAgdHZlcnNpb24gPSAiQlNEIjsKICAgICAgICAgICAgaWYg KHNvcnRtb2RlID09IDApCiAgICAgICAgICAgICAgICBzb3J0bW9kZSA9IDQ7CiAgICAgICAgICAg IGJyZWFrOwoKICAgICAgICBjYXNlICdjJzoKICAgICAgICAgICAgY29tcGFyZSA9IDI7CiAgICAg ICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdkJzoKICAgICAgICAgICAgY29tcGFyZSA9IDE7 CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdFJzoKICAgICAgICAgICAgaW5pdGR1 bXAgfD0gMjsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2UnOgogICAgICAgICAg ICBpbml0ZHVtcCB8PSAxOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnRic6CiAg ICAgICAgICAgIGZpbGVjb21wYXJlID0gMTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNh c2UgJ2YnOgogICAgICAgICAgICBmb3JtYXR0ZWQgPSAxOwogICAgICAgICAgICBicmVhazsKCiAg ICAgICAgY2FzZSAnRyc6CiAgICAgICAgICAgIG51bWJlcnMgPSAxOwogICAgICAgICAgICBicmVh azsKCiAgICAgICAgY2FzZSAnZyc6CiAgICAgICAgICAgIG51bWJlcnMgPSAtMTsKICAgICAgICAg ICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ0knOgogICAgICAgICAgICBvdXRmb3JtID0gMDsKICAg ICAgICAgICAgaWYgKHNvcnRtb2RlID09IDApCiAgICAgICAgICAgICAgICBzb3J0bW9kZSA9IDM7 CiAgICAgICAgICAgIHR2ZXJzaW9uID0gMDsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNh c2UgJ2knOgogICAgICAgICAgICBpbml0X2FuYWx5emUgPSAxOwogICAgICAgICAgICBicmVhazsK CiAgICAgICAgY2FzZSAnTCc6CiAgICAgICAgICAgIG91dGZvcm0gPSAxOwogICAgICAgICAgICBp ZiAoc29ydG1vZGUgPT0gMCkKICAgICAgICAgICAgICAgIHNvcnRtb2RlID0gMzsKICAgICAgICAg ICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2wnOgogICAgICAgICAgICBvdXRmb3JtID0gMDsKICAg ICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICBjb21wYXJlID0g MzsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ3AnOgogICAgICAgICAgICBpZ25v cmVwYWRzID0gMTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ3EnOgogICAgICAg ICAgICBxdWlldCA9IDE7CiAgICAgICAgICAgIHNfYWJzZW50ID0gIi0iOwogICAgICAgICAgICBz X2NhbmNlbCA9ICJAIjsKICAgICAgICAgICAgYm9vbF9zZXAgPSAiLCAiOwogICAgICAgICAgICBi cmVhazsKCiAgICAgICAgY2FzZSAnUic6CiAgICAgICAgICAgIHR2ZXJzaW9uID0gb3B0YXJnOwog ICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAncic6CiAgICAgICAgICAgIHR2ZXJzaW9u ID0gMDsKICAgICAgICAgICAgbGltaXRlZCA9IDA7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAg ICBjYXNlICdzJzoKICAgICAgICAgICAgaWYgKCpvcHRhcmcgPT0gJ2QnKQogICAgICAgICAgICAg ICAgc29ydG1vZGUgPSAxOwogICAgICAgICAgICBlbHNlIGlmICgqb3B0YXJnID09ICdpJykKICAg ICAgICAgICAgICAgIHNvcnRtb2RlID0gMjsKICAgICAgICAgICAgZWxzZSBpZiAoKm9wdGFyZyA9 PSAnbCcpCiAgICAgICAgICAgICAgICBzb3J0bW9kZSA9IDM7CiAgICAgICAgICAgIGVsc2UgaWYg KCpvcHRhcmcgPT0gJ2MnKQogICAgICAgICAgICAgICAgc29ydG1vZGUgPSA0OwogICAgICAgICAg ICBlbHNlIHsKICAgICAgICAgICAgICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJpbmZvY21wOiB1bmtub3duIHNvcnQgbW9kZVxuIik7CiAg ICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsK CiAgICAgICAgY2FzZSAnVCc6CiAgICAgICAgICAgIGxpbWl0ZWQgPSAwOwogICAgICAgICAgICBi cmVhazsKCgogICAgICAgIGNhc2UgJ3QnOgogICAgICAgICAgICBfbmNfZGlzYWJsZV9wZXJpb2Qg PSAwOwogICAgICAgICAgICBzdXBwcmVzc191bnRyYW5zbGF0YWJsZSA9IDE7CiAgICAgICAgICAg IGJyZWFrOwoKCiAgICAgICAgY2FzZSAndSc6CiAgICAgICAgICAgIGNvbXBhcmUgPSA0OwogICAg ICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnVic6CiAgICAgICAgICAgIHB1dHMoY3Vyc2Vz X3ZlcnNpb24oKSk7CiAgICAgICAgICAgIGV4aXQoMCk7CgogICAgICAgIGNhc2UgJ3YnOgogICAg ICAgICAgICBpdHJhY2UgPSBvcHRhcmdfdG9fbnVtYmVyKCk7CiAgICAgICAgICAgIF9uY190cmFj aW5nICY9ICgoMTUpIDw8IDEzKSwgX25jX3RyYWNpbmcgfD0gKChpdHJhY2UpIDw8IDEzKTsKICAg ICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ3cnOgogICAgICAgICAgICBtd2lkdGggPSBv cHRhcmdfdG9fbnVtYmVyKCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0Ogog ICAgICAgICAgICB1c2FnZSgpOwogICAgICAgIH0KCgogICAgaWYgKHNvcnRtb2RlID09IDApCiAg ICAgICAgc29ydG1vZGUgPSAyOwoKCiAgICBkdW1wX2luaXQodHZlcnNpb24sIG91dGZvcm0sIHNv cnRtb2RlLCBtd2lkdGgsIGl0cmFjZSwgZm9ybWF0dGVkKTsKCgogICAgaWYgKG9wdGluZCA+PSBh cmdjKQogICAgICAgIGFyZ3ZbYXJnYysrXSA9IHRlcm1pbmFsOwoKCiAgICBpZiAoY29tcGFyZSAh PSAwICYmIG9wdGluZCA+PSBhcmdjIC0gMSkKICAgICAgICBhcmd2W2FyZ2MrK10gPSB0ZXJtaW5h bDsKCgogICAgaWYgKGFyZ2MgLSBvcHRpbmQgPT0gMiAmJiBjb21wYXJlID09IDApCiAgICAgICAg Y29tcGFyZSA9IDE7CgogICAgaWYgKCFmaWxlY29tcGFyZSkgewoKICAgICAgICB0ZXJtY291bnQg PSAwOwogICAgICAgIGZvciAoOyBvcHRpbmQgPCBhcmdjOyBvcHRpbmQrKykgewogICAgICAgICAg ICBpZiAodGVybWNvdW50ID49IDMyKSB7CiAgICAgICAgICAgICAgICAodm9pZCkgZnByaW50Zihz dGRlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5mb2NtcDogdG9vIG1hbnkg dGVybWluYWwgdHlwZSBhcmd1bWVudHNcbiIpOwogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAg ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkaXJlY3Rvcnkg PSB0ZXJtY291bnQgPyByZXN0ZGlyIDogZmlyc3RkaXI7CiAgICAgICAgICAgICAgICBpbnQgc3Rh dHVzOwoKICAgICAgICAgICAgICAgIHRuYW1lW3Rlcm1jb3VudF0gPSBhcmd2W29wdGluZF07Cgog ICAgICAgICAgICAgICAgaWYgKGRpcmVjdG9yeSkgewogICAgICAgICAgICAgICAgICAgICh2b2lk KSBzcHJpbnRmKHRmaWxlW3Rlcm1jb3VudF0sICIlcy8lYy8lcyIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICphcmd2W29wdGluZF0sIGFyZ3Zbb3B0aW5kXSk7CiAgICAgICAgICAgICAgICAgICAg aWYgKGl0cmFjZSkKICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpIGZwcmludGYoc3RkZXJy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5mb2NtcDogcmVhZGlu ZyBlbnRyeSAlcyBmcm9tIGZpbGUgJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFyZ3Zbb3B0aW5kXSwgdGZpbGVbdGVybWNvdW50XSk7CgogICAgICAgICAgICAg ICAgICAgIHN0YXR1cyA9IF9uY19yZWFkX2ZpbGVfZW50cnkodGZpbGVbdGVybWNvdW50XSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbnRyaWVzW3Rl cm1jb3VudF0udHRlcm0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg ICAgICBpZiAoaXRyYWNlKQogICAgICAgICAgICAgICAgICAgICAgICAodm9pZCkgZnByaW50Zihz dGRlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmZvY21wOiBy ZWFkaW5nIGVudHJ5ICVzIGZyb20gc3lzdGVtIGRpcmVjdG9yaWVzICVzXG4iLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd2W29wdGluZF0sIHRuYW1lW3Rlcm1jb3Vu dF0pOwoKICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBfbmNfcmVhZF9lbnRyeSh0bmFtZVt0 ZXJtY291bnRdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRm aWxlW3Rlcm1jb3VudF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmVudHJpZXNbdGVybWNvdW50XS50dGVybSk7CiAgICAgICAgICAgICAgICAgICAgZGlyZWN0 b3J5ID0gIi91c3Ivc2hhcmUvdGVybWluZm8iOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg ICAgICAgIGlmIChzdGF0dXMgPD0gMCkgewogICAgICAgICAgICAgICAgICAgICh2b2lkKSBmcHJp bnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5mb2NtcDog Y291bGRuJ3Qgb3BlbiB0ZXJtaW5mbyBmaWxlICVzLlxuIiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0ZmlsZVt0ZXJtY291bnRdKTsKICAgICAgICAgICAgICAgICAgICByZXR1 cm4gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJlcGFpcl9hY3NjKCZlbnRy aWVzW3Rlcm1jb3VudF0udHRlcm0pOwogICAgICAgICAgICAgICAgdGVybWNvdW50Kys7CiAgICAg ICAgICAgIH0KICAgICAgICB9CgoKICAgICAgICBpZiAodGVybWNvdW50ID4gMSkKICAgICAgICAg ICAgX25jX2FsaWduX3Rlcm10eXBlKCZlbnRyaWVzWzBdLnR0ZXJtLCAmZW50cmllc1sxXS50dGVy bSk7CgoKCiAgICAgICAgaWYgKGluaXRkdW1wKSB7CiAgICAgICAgICAgIGlmIChpbml0ZHVtcCAm IDEpCiAgICAgICAgICAgICAgICBkdW1wX3Rlcm10eXBlKCZlbnRyaWVzWzBdLnR0ZXJtKTsKICAg ICAgICAgICAgaWYgKGluaXRkdW1wICYgMikKICAgICAgICAgICAgICAgIGR1bXBfaW5pdGlhbGl6 ZXJzKCZlbnRyaWVzWzBdLnR0ZXJtKTsKICAgICAgICAgICAgZXhpdCgwKTsKICAgICAgICB9CgoK ICAgICAgICBpZiAoaW5pdF9hbmFseXplKSB7CgoKICAgICAgICAgICAgYW5hbHl6ZV9zdHJpbmco ImlzMSIsIGVudHJpZXNbMF0udHRlcm0uIFN0cmluZ3NbNDhdLCAmZW50cmllc1swXS50dGVybSk7 CiAgICAgICAgICAgIGFuYWx5emVfc3RyaW5nKCJpczIiLCBlbnRyaWVzWzBdLnR0ZXJtLiBTdHJp bmdzWzQ5XSwgJmVudHJpZXNbMF0udHRlcm0pOwogICAgICAgICAgICBhbmFseXplX3N0cmluZygi aXMzIiwgZW50cmllc1swXS50dGVybS4gU3RyaW5nc1s1MF0sICZlbnRyaWVzWzBdLnR0ZXJtKTsK ICAgICAgICAgICAgYW5hbHl6ZV9zdHJpbmcoInJzMSIsIGVudHJpZXNbMF0udHRlcm0uIFN0cmlu Z3NbMTIyXSwgJmVudHJpZXNbMF0udHRlcm0pOwogICAgICAgICAgICBhbmFseXplX3N0cmluZygi cnMyIiwgZW50cmllc1swXS50dGVybS4gU3RyaW5nc1sxMjNdLCAmZW50cmllc1swXS50dGVybSk7 CiAgICAgICAgICAgIGFuYWx5emVfc3RyaW5nKCJyczMiLCBlbnRyaWVzWzBdLnR0ZXJtLiBTdHJp bmdzWzEyNF0sICZlbnRyaWVzWzBdLnR0ZXJtKTsKICAgICAgICAgICAgYW5hbHl6ZV9zdHJpbmco InNtY3VwIiwgZW50cmllc1swXS50dGVybS4gU3RyaW5nc1syOF0sICZlbnRyaWVzWzBdLnR0ZXJt KTsKICAgICAgICAgICAgYW5hbHl6ZV9zdHJpbmcoInJtY3VwIiwgZW50cmllc1swXS50dGVybS4g U3RyaW5nc1s0MF0sICZlbnRyaWVzWzBdLnR0ZXJtKTsKCiAgICAgICAgICAgIGV4aXQoMCk7CiAg ICAgICAgfQoKCgoKICAgICAgICBzd2l0Y2ggKGNvbXBhcmUpIHsKICAgICAgICBjYXNlIDA6CiAg ICAgICAgICAgIGlmIChpdHJhY2UpCiAgICAgICAgICAgICAgICAodm9pZCkgZnByaW50ZihzdGRl cnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5mb2NtcDogYWJvdXQgdG8gZHVt cCAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRuYW1lWzBdKTsKICAgICAg ICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZG91dCwgIiNcdFJlY29uc3RydWN0ZWQgdmlhIGluZm9j bXAgZnJvbSBmaWxlOiAlc1xuIiwgdGZpbGVbMF0pOwoKICAgICAgICAgICAgbGVuID0gZHVtcF9l bnRyeSgmZW50cmllc1swXS50dGVybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBw cmVzc191bnRyYW5zbGF0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdGVk LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnVtYmVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQgKikwKSk7 CiAgICAgICAgICAgIHB1dGNoYXIoJ1xuJyk7CiAgICAgICAgICAgIGlmIChpdHJhY2UpCiAgICAg ICAgICAgICAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJpbmZvY21wOiBsZW5ndGggJWRcbiIs IGxlbik7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIGlm IChpdHJhY2UpCiAgICAgICAgICAgICAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJpbmZvY21w OiBkdW1waW5nIGRpZmZlcmVuY2VzXG4iKTsKICAgICAgICAgICAgKHZvaWQpIGZwcmludGYgKHN0 ZG91dCwgImNvbXBhcmluZyAlcyB0byAlcy5cbiIsIHRuYW1lWzBdLCB0bmFtZVsxXSk7CiAgICAg ICAgICAgIGNvbXBhcmVfZW50cnkoY29tcGFyZV9wcmVkaWNhdGUsICZlbnRyaWVzLT50dGVybSwg cXVpZXQpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAyOgogICAgICAgICAgICBp ZiAoaXRyYWNlKQogICAgICAgICAgICAgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgImluZm9jbXA6IGR1bXBpbmcgY29tbW9uIGNhcGFiaWxp dGllc1xuIik7CiAgICAgICAgICAgICh2b2lkKSBmcHJpbnRmIChzdGRvdXQsICJjb21wYXJpbmcg JXMgdG8gJXMuXG4iLCB0bmFtZVswXSwgdG5hbWVbMV0pOwogICAgICAgICAgICBjb21wYXJlX2Vu dHJ5KGNvbXBhcmVfcHJlZGljYXRlLCAmZW50cmllcy0+dHRlcm0sIHF1aWV0KTsKICAgICAgICAg ICAgYnJlYWs7CgogICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgaWYgKGl0cmFjZSkKICAgICAg ICAgICAgICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJpbmZvY21wOiBkdW1waW5nIGRpZmZlcmVuY2VzXG4iKTsKICAgICAgICAgICAgKHZv aWQpIGZwcmludGYgKHN0ZG91dCwgImNvbXBhcmluZyAlcyB0byAlcy5cbiIsIHRuYW1lWzBdLCB0 bmFtZVsxXSk7CiAgICAgICAgICAgIGNvbXBhcmVfZW50cnkoY29tcGFyZV9wcmVkaWNhdGUsICZl bnRyaWVzLT50dGVybSwgcXVpZXQpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSA0 OgogICAgICAgICAgICBpZiAoaXRyYWNlKQogICAgICAgICAgICAgICAgKHZvaWQpIGZwcmludGYo c3RkZXJyLCAiaW5mb2NtcDogZHVtcGluZyB1c2UgZW50cnlcbiIpOwogICAgICAgICAgICBsZW4g PSBkdW1wX2VudHJ5KCZlbnRyaWVzWzBdLnR0ZXJtLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN1cHByZXNzX3VudHJhbnNsYXRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpbWl0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBudW1iZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9w cmVkaWNhdGUpOwogICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgdGVybWNvdW50OyBpKyspCiAg ICAgICAgICAgICAgICBsZW4gKz0gZHVtcF91c2VzKHRuYW1lW2ldLCAhKG91dGZvcm0gPT0gMgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBvdXRmb3JtID09 IDMpKTsKICAgICAgICAgICAgcHV0Y2hhcignXG4nKTsKICAgICAgICAgICAgaWYgKGl0cmFjZSkK ICAgICAgICAgICAgICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgImluZm9jbXA6IGxlbmd0aCAl ZFxuIiwgbGVuKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfSBlbHNlIGlmIChj b21wYXJlID09IDQpCiAgICAgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiU29ycnksIC11IGRv ZXNuJ3Qgd29yayB3aXRoIC1GXG4iKTsKICAgIGVsc2UgaWYgKGNvbXBhcmUgPT0gMCkKICAgICAg ICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJVc2UgYHRpYyAtW0NJXSA8ZmlsZT4nIGZvciB0aGlz LlxuIik7CiAgICBlbHNlIGlmIChhcmdjIC0gb3B0aW5kICE9IDIpCiAgICAgICAgKHZvaWQpIGZw cmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICAgICAgICJGaWxlIGNvbXBhcmlzb24gbmVl ZHMgZXhhY3RseSB0d28gZmlsZSBhcmd1bWVudHMuXG4iKTsKICAgIGVsc2UKICAgICAgICBmaWxl X2NvbXBhcmlzb24oYXJnYyAtIG9wdGluZCwgYXJndiArIG9wdGluZCk7CgogICAgZXhpdCgwKTsK fQo=