From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24085 invoked by alias); 31 Oct 2002 10:56: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 24038 invoked by uid 71); 31 Oct 2002 10:56:02 -0000 Resent-Date: 31 Oct 2002 10:56:02 -0000 Resent-Message-ID: <20021031105602.24037.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, alexander.puchmayr@jku.at Received: (qmail 30826 invoked by uid 61); 31 Oct 2002 10:47:51 -0000 Message-Id: <20021031104751.30825.qmail@sources.redhat.com> Date: Thu, 31 Oct 2002 02:56:00 -0000 From: alexander.puchmayr@jku.at Reply-To: alexander.puchmayr@jku.at To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: optimization/8412: Code generation problem with -march=k6 X-SW-Source: 2002-10/txt/msg01318.txt.bz2 List-Id: >Number: 8412 >Category: optimization >Synopsis: Code generation problem with -march=k6 >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Thu Oct 31 02:56:01 PST 2002 >Closed-Date: >Last-Modified: >Originator: alexander.puchmayr@jku.at >Release: gcc version 3.2 >Organization: >Environment: i586 >Description: The attached file (from xine-lib-0.9.13-r1), src/libfaad/syntax.i produces an ICE when compiling with -march=k6 and -funroll-loops. The file compiles fine with -march=i586, athlon, athlon-xp, i686, pentium4, this it seems to be a k6 related problem. Error-Message: syntax.c: In function `section_data': syntax.c:804: unrecognizable insn: (insn 863 880 865 (set (reg:SI 280) (zero_extend:SI (reg/v:QI 74))) -1 (nil) (nil)) syntax.c:804: Internal compiler error in extract_insn, at recog.c:2148 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. >How-To-Repeat: invoke gcc3-2 with: gcc -march=k6 -O3 -funroll-loops -c syntax.i >Fix: Use i586 instead of k6 >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: text/x-csrc; name="syntax.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="syntax.i" IyAxICJzeW50YXguYyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+IgojIDEg InN5bnRheC5jIgojIDMwICJzeW50YXguYyIKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEg MwojIDI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVy ZXMuaCIgMSAzCiMgMjgzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAz CiMgMzEyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUv c3R1YnMuaCIgMSAzCiMgMzEzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjYgIi91 c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4 Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDIwMSAiL3Vzci9saWIv Z2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVm IHVuc2lnbmVkIGludCBzaXplX3Q7CiMgMjk0ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu dXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgbG9uZyBpbnQgd2NoYXJfdDsK IyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgojIDk0ICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAg fSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9u ZyBpbnQgcmVtOwogIH0gbGRpdl90OwojIDEzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4 dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkgOwoKCgpleHRlcm4gZG91 YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRy KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9u ZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCiAgICAgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIpIDsKIyAxNjMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gbG9uZyBp bnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxv bmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg X19iYXNlKSA7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0 cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i YXNlKQogICAgIDsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0 b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKX19l eHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIDsK IyAyNTAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gZG91YmxlIF9fc3RydG9kX2lu dGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXAp CiAgICAgOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIDsKZXh0ZXJuIGxvbmcgZG91Ymxl IF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3Vw KSA7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9f c3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxv bmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25l ZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAgICAgOwoK CgoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQpzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKQp7CiAgcmV0dXJuIF9fc3Ry dG9kX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9u ZyBpbnQKc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG9s X2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CmV4dGVybiBfX2lubGlu ZSB1bnNpZ25lZCBsb25nIGludApzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewog IHJldHVybiBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7 Cn0KIyAzMjUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpfX2V4dGVuc2lvbl9fIGV4dGVybiBf X2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkKewog IHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7 Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApz dHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvdWxsX2lu dGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18g ZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBf X2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBf X2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcg bG9uZyBpbnQKc3RydG91bGwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4g X19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4 dGVybiBfX2lubGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpCnsKICByZXR1 cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSk7Cn0KZXh0ZXJuIF9faW5s aW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVybiAoaW50KSBzdHJ0 b2wgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7Cn0KZXh0ZXJuIF9faW5saW5l IGxvbmcgaW50CmF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIHN0cnRvbCAo X19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQoKCl9fZXh0ZW5zaW9uX18gZXh0 ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7 CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7Cn0K IyAzODQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbDY0YSAobG9uZyBp bnQgX19uKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg MSAzCiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoKCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAx ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5o IiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNp Z25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25n OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRf dDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91 c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsK dHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50 IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRl ZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsK Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9f ZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0 eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsK dHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVm IF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3Vf aW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90 IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5 cGVkZWYgX191X2xvbmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0 eXBlZGVmIF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxb Ml07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAq X19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGlu dCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBs b25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVm IGludCBfX2Nsb2NraWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYg aW50IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoK CnR5cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxr Y250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcg X19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRl ZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRf dDsKCgp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19v ZmY2NF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBl ZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv cHRocmVhZHR5cGVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1 ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2No ZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi IDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAg aW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1 Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MK ewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3Nj aGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2Nv cGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAq X19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0 eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9w dGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0 cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5z aWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21f cmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAg aW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhy ZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRo cmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CiMgMTQwICIv dXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg aW50IHB0aHJlYWRfdDsKIyAxNDQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDMx ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hh cjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBl ZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191 X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKCgp0eXBlZGVmIF9f bG9mZl90IGxvZmZfdDsKCgoKCgp0eXBlZGVmIF9faW5vNjRfdCBpbm9fdDsKIyA2MSAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYg X19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBf X25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgoKCnR5cGVk ZWYgX19vZmY2NF90IG9mZl90OwojIDk5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlw ZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYg X19zc2l6ZV90IHNzaXplX3Q7CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRl ZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTMyICIv dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMK IyA3MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKIyA4 MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsK IyA5NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90Owoj IDEzMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKIyAxNDYgIi91c3IvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4y L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAy IDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBz aG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE5MCAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgo X19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgo X19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgo X19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgo X19tb2RlX18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0 dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9p bnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2ln bmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5 cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f RElfXykpKTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f IChfX3dvcmRfXykpKTsKIyAyMTIgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2Vu ZGlhbi5oIiAyIDMKIyAyMTMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIv dXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxl Y3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMKIyAzMiAiL3Vzci9p bmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQu aCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCnR5cGVkZWYgaW50IF9f c2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGlu dCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAgfSBf X3NpZ3NldF90OwojIDM1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgoKdHlwZWRl ZiBfX3NpZ3NldF90IHNpZ3NldF90OwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAz CiMgMTA2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIF9f dGltZV90IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKIyA0NSAiL3Vzci9pbmNs dWRlL3N5cy9zZWxlY3QuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAz CiMgNjcgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXZhbAogIHsKICAg IF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNvbmRzX3QgdHZfdXNlYzsKICB9OwojIDQ3ICIv dXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3Vz ZWNvbmRzX3Q7CgoKCgoKdHlwZWRlZiBsb25nIGludCBfX2ZkX21hc2s7CgoKCgoKCgp0eXBlZGVm IHN0cnVjdAogIHsKCgoKCgoKICAgIF9fZmRfbWFzayBfX2Zkc19iaXRzWzEwMjQgLyAoOCAqIHNp emVvZiAoX19mZF9tYXNrKSldOwoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNr IGZkX21hc2s7CiMgOTUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKCgoKCgoKCmV4dGVy biBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAog ICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAg ICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQpIDsKIyAxMTggIi91c3Iv aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKCiMgMjE2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi IDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMgMjE5ICIvdXNy L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwojIDI0MyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o IiAzCnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtjbnQ2 NF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnRfdDsKIyAy NjIgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoKIyAzOTEgIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMiAzCgoKCgoKCmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQpIDsKCgpleHRlcm4g dm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmlu aXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pIDsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0 YXRlIChjaGFyICpfX3N0YXRlYnVmKSA7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAg ICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwog ICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3NlcDsKICAg IGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5k b21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAq X19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGlu dCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIDsKCmV4dGVybiBpbnQgaW5pdHN0 YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwK ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sCiAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgOwoKZXh0ZXJu IGludCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCgoK ZXh0ZXJuIGludCByYW5kICh2b2lkKSA7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50 IF9fc2VlZCkgOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIDsK CgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgOwpleHRlcm4gZG91YmxlIGVyYW5k NDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGxy YW5kNDggKHZvaWQpIDsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGlu dCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIDsKZXh0ZXJu IGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0 ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSA7CmV4dGVybiB1bnNpZ25lZCBz aG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgOwpleHRl cm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgOwoKCgoKCnN0 cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwogICAg dW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19j OwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBp bnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEg Kl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVz dHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGlu dCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAq X19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0 cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9k YXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQg Kl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNo b3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhf ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50 ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBk cmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBs b25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5z aWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg bG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAo bG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICA7 CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAog ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgOwoKZXh0 ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLAogICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIDsKIyA1MjcgIi91 c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3QgX19zaXpl KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6 ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9j X18pKTsKCgoKCgpleHRlcm4gdm9pZCAqcmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3Np emUpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lk ICpfX3B0cikgOwoKCgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIDsKCgoKIyAxICIv dXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMK IyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCgoKCgoKCmV4dGVybiB2 b2lkICphbGxvY2EgKHNpemVfdCBfX3NpemUpIDsKCgoKCgoKIyA1NDcgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXplX3QgX19zaXplKSBfX2F0 dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDU2MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz CmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7 CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIDsKCgoKCmV4dGVy biBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqX19hcmcp LCB2b2lkICpfX2FyZykKICAgICA7CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVz KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMgNTg3ICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDMKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoK ZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoK CgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIDsKCgoKCgpleHRlcm4gaW50IHNl dGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9f cmVwbGFjZSkKICAgICA7CgoKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFyICpfX25h bWUpIDsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgOwojIDYyMyAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsK IyA2MzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIg Kl9fdGVtcGxhdGUpIF9fYXNtX18gKCIiICJta3N0ZW1wNjQiKTsKIyA2NTAgIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWtkdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgOwoK CgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSA7CiMgNjcyICIv dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVz dHJpY3QgX19yZXNvbHZlZCkgOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChf X2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwojIDY4OSAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAzCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0 IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXpl X3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQg KHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAg ICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBf X3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxv bmcgaW50IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDcxMCAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5v bSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAo bG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CiMgNzI4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIg KmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2Rl Y3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwoKCgoKZXh0 ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0 cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikg OwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNo YXIgKl9fYnVmKSA7CgoKCgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUs IGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNw dCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91 YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz dHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwpleHRlcm4gY2hhciAqcWdj dnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsKCgoK CmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9f cmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3Np Z24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19s ZW4pIDsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGlu dCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0 IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX2xlbikgOwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQg X19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGlu dCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmlj dCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUg X192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj dCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNo YXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgOwoKCgoKCgpleHRlcm4gaW50IG1i bGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWJ0b3dj ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgd2N0b21iIChj aGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgOwoKZXh0ZXJuIHNpemVfdCB3Y3N0 b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pCiAgICAgOwoKCgoKCgoK ZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpIDsKIyA4NTggIi91 c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xv YWRhdmdbXSwgaW50IF9fbmVsZW0pIDsKCgoKCgoKIyAzMSAic3ludGF4LmMiIDIKIyAxICIvdXNy L2luY2x1ZGUvbWVtb3J5LmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvbWVtb3J5LmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgi IDMKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgpleHRl cm4gdm9pZCAqbWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0 ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6 ZV90IF9fbikKICAgICA7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJp Y3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIDsKCgoKCmV4dGVybiB2b2lkICptZW1z ZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWVtY21w IChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAg ICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2Nv bnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CiMgNzcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAq c3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fc3JjKQogICAgIDsKCmV4dGVybiBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9f ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ny Yywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3Qg X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgOwoKZXh0ZXJuIGNo YXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSA7CgoKZXh0ZXJu IGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAg IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0 IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cmNvbGwgKF9fY29uc3QgY2hhciAq X19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf X24pIDsKIyAxMjAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyZHVw IChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNTUg Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNo YXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hh ciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwojIDE2NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBzaXplX3Qg c3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAgICAg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29u c3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBf X2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK ZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNo YXIgKl9fbmVlZGxlKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwojIDE4NyAiL3Vz ci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJp Y3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICA7CgoKCmV4dGVy biBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgOwoKZXh0ZXJuIGNoYXIg KnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZl X3B0cikgOwojIDIxOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBzaXplX3Qgc3Ry bGVuIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CiMgMjI5 ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19l cnJudW0pIDsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAq X19idWYsIHNpemVfdCBfX2J1ZmxlbikgOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAq X19zLCBzaXplX3QgX19uKSA7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9f c3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gdm9pZCBiemVybyAodm9p ZCAqX19zLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCBiY21wIChfX2NvbnN0IHZvaWQgKl9f czEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQg X19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmluZGV4IChf X2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK CmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMg MjcyICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2Nv bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEs IF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKIyAyOTQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3Ry c2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCiAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSA7CiMgMzU3ICIvdXNyL2luY2x1ZGUvc3Ry aW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcuaCIgMSAzCiMgMzU4ICIvdXNy L2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5o IiAxIDMKIyAzNzcgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gdm9pZCAq X19yYXdtZW1jaHIgKGNvbnN0IHZvaWQgKl9fcywgaW50IF9fYyk7CiMgNDA1ICIvdXNyL2luY2x1 ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RyY3B5X3NtYWxs IChjaGFyICosIF9fdWludDE2X3QsIF9fdWludDE2X3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX191aW50MzJfdCwgX191aW50MzJfdCwgc2l6ZV90KTsKZXh0ZXJuIF9f aW5saW5lIGNoYXIgKgpfX3N0cmNweV9zbWFsbCAoY2hhciAqX19kZXN0LAogICAgICAgICAgICAg ICAgX191aW50MTZfdCBfX3NyYzBfMiwgX191aW50MTZfdCBfX3NyYzRfMiwKICAgICAgICAgICAg ICAgIF9fdWludDMyX3QgX19zcmMwXzQsIF9fdWludDMyX3QgX19zcmM0XzQsCiAgICAgICAgICAg ICAgICBzaXplX3QgX19zcmNsZW4pCnsKICB1bmlvbiB7CiAgICBfX3VpbnQzMl90IF9fdWk7CiAg ICBfX3VpbnQxNl90IF9fdXNpOwogICAgdW5zaWduZWQgY2hhciBfX3VjOwogIH0gKl9fdSA9ICh2 b2lkICopIF9fZGVzdDsKICBzd2l0Y2ggKCh1bnNpZ25lZCBpbnQpIF9fc3JjbGVuKQogICAgewog ICAgY2FzZSAxOgogICAgICBfX3UtPl9fdWMgPSAnXDAnOwogICAgICBicmVhazsKICAgIGNhc2Ug MjoKICAgICAgX191LT5fX3VzaSA9IF9fc3JjMF8yOwogICAgICBicmVhazsKICAgIGNhc2UgMzoK ICAgICAgX191LT5fX3VzaSA9IF9fc3JjMF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICh2 b2lkICopKChjaGFyICopIF9fdSArIDIpOwogICAgICBfX3UtPl9fdWMgPSAnXDAnOwogICAgICBi cmVhazsKICAgIGNhc2UgNDoKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIGJyZWFr OwogICAgY2FzZSA1OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19l eHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VjID0g J1wwJzsKICAgICAgYnJlYWs7CiAgICBjYXNlIDY6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80 OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOwog ICAgICBfX3UtPl9fdXNpID0gX19zcmM0XzI7CiAgICAgIGJyZWFrOwogICAgY2FzZSA3OgogICAg ICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAq KSgoY2hhciAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VzaSA9IF9fc3JjNF8yOwogICAgICBf X3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDIpOwogICAgICBfX3Ut Pl9fdWMgPSAnXDAnOwogICAgICBicmVhazsKICAgIGNhc2UgODoKICAgICAgX191LT5fX3VpID0g X19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191 ICsgNCk7CiAgICAgIF9fdS0+X191aSA9IF9fc3JjNF80OwogICAgICBicmVhazsKICAgIH0KICBy ZXR1cm4gX19kZXN0Owp9CiMgODkzICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0 ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQg X19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMSAoX19jb25zdCBj aGFyICpfX3MsIGludCBfX3JlamVjdCkKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7 CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVq ZWN0KQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBfX2lubGlu ZSBzaXplX3QgX19zdHJjc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3JlamVjdDIpOwpleHRl cm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBf X3JlamVjdDEsIGludCBfX3JlamVjdDIpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAw OwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3Jl amVjdDEKICAgICAgICAgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDIpCiAgICArK19fcmVz dWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNz cG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3QxLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9fcmVqZWN0MiwgaW50IF9fcmVqZWN0Myk7CmV4dGVy biBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f cmVqZWN0MSwgaW50IF9fcmVqZWN0MiwKICAgICAgICAgICAgICBpbnQgX19yZWplY3QzKQp7CiAg cmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKICB3aGlsZSAoX19zW19fcmVzdWx0XSAhPSAn XDAnICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QxCiAgICAgICAgICYmIF9fc1tfX3Jlc3Vs dF0gIT0gX19yZWplY3QyICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QzKQogICAgKytfX3Jl c3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KIyA5NTAgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmlu ZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2MxIChfX2NvbnN0IGNoYXIg Kl9fcywgaW50IF9fYWNjZXB0KTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9jMSAo X19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdCkKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jl c3VsdCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0KQogICAgKytfX3Jl c3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJz cG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyKTsKZXh0ZXJuIF9faW5saW5lIHNpemVf dApfX3N0cnNwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2Fj Y2VwdDIpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19f cmVzdWx0XSA9PSBfX2FjY2VwdDEgfHwgX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDIpCiAgICAr K19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBf X3N0cnNwbl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIsIGludCBfX2FjY2VwdDMpOwpl eHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3Ryc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50 IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MiwgaW50IF9fYWNjZXB0MykKewogIHJlZ2lzdGVyIHNp emVfdCBfX3Jlc3VsdCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MSB8 fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MgogICAgICAgICB8fCBfX3NbX19yZXN1bHRdID09 IF9fYWNjZXB0MykKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMgMTAwNyAi L3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0 cnBicmtfYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0Mik7CmV4dGVybiBfX2lubGluZSBj aGFyICoKX19zdHJwYnJrX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwgaW50 IF9fYWNjZXB0MikKewoKICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19hY2NlcHQx ICYmICpfX3MgIT0gX19hY2NlcHQyKQogICAgKytfX3M7CiAgcmV0dXJuICpfX3MgPT0gJ1wwJyA/ ICgodm9pZCAqKTApIDogKGNoYXIgKikgKHNpemVfdCkgX19zOwp9CgpleHRlcm4gX19pbmxpbmUg Y2hhciAqX19zdHJwYnJrX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIsIGludCBfX2Fj Y2VwdDMpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RycGJya19jMyAoX19jb25zdCBjaGFy ICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIsCiAgICAgICAgICAgICAgaW50IF9f YWNjZXB0MykKewoKICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19hY2NlcHQxICYm ICpfX3MgIT0gX19hY2NlcHQyCiAgICAgICAgICYmICpfX3MgIT0gX19hY2NlcHQzKQogICAgKytf X3M7CiAgcmV0dXJuICpfX3MgPT0gJ1wwJyA/ICgodm9pZCAqKTApIDogKGNoYXIgKikgKHNpemVf dCkgX19zOwp9CiMgMTA1OSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBf X2lubGluZSBjaGFyICpfX3N0cnRva19yXzFjIChjaGFyICpfX3MsIGNoYXIgX19zZXAsIGNoYXIg KipfX25leHRwKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnRva19yXzFjIChjaGFyICpf X3MsIGNoYXIgX19zZXAsIGNoYXIgKipfX25leHRwKQp7CiAgY2hhciAqX19yZXN1bHQ7CiAgaWYg KF9fcyA9PSAoKHZvaWQgKikwKSkKICAgIF9fcyA9ICpfX25leHRwOwogIHdoaWxlICgqX19zID09 IF9fc2VwKQogICAgKytfX3M7CiAgX19yZXN1bHQgPSAoKHZvaWQgKikwKTsKICBpZiAoKl9fcyAh PSAnXDAnKQogICAgewogICAgICBfX3Jlc3VsdCA9IF9fcysrOwogICAgICB3aGlsZSAoKl9fcyAh PSAnXDAnKQogICAgICAgIGlmICgqX19zKysgPT0gX19zZXApCiAgICAgICAgICB7CiAgICAgICAg ICAgIF9fc1stMV0gPSAnXDAnOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAg Kl9fbmV4dHAgPSBfX3M7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMgMTA5MSAiL3Vzci9p bmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBjaGFyICpfX3N0cnNlcF9nIChjaGFyICoq X19zdHJpbmdwLCBfX2NvbnN0IGNoYXIgKl9fZGVsaW0pOwojIDExMDkgIi91c3IvaW5jbHVkZS9i aXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfMWMgKGNoYXIg KipfX3MsIGNoYXIgX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3Ryc2VwXzFj IChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0KQp7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwg PSAqX19zOwogIGlmIChfX3JldHZhbCAhPSAoKHZvaWQgKikwKSAmJiAoKl9fcyA9IChfX2V4dGVu c2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19yZWplY3QpICYmIChfX3JlamVjdCkgPT0g J1wwJyA/IChjaGFyICopIF9fcmF3bWVtY2hyIChfX3JldHZhbCwgX19yZWplY3QpIDogc3RyY2hy IChfX3JldHZhbCwgX19yZWplY3QpKSkpICE9ICgodm9pZCAqKTApKQogICAgKigqX19zKSsrID0g J1wwJzsKICByZXR1cm4gX19yZXR2YWw7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnNl cF8yYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyKTsKZXh0ZXJu IF9faW5saW5lIGNoYXIgKgpfX3N0cnNlcF8yYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEs IGNoYXIgX19yZWplY3QyKQp7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwgPSAqX19zOwogIGlm IChfX3JldHZhbCAhPSAoKHZvaWQgKikwKSkKICAgIHsKICAgICAgcmVnaXN0ZXIgY2hhciAqX19j cCA9IF9fcmV0dmFsOwogICAgICB3aGlsZSAoMSkKICAgICAgICB7CiAgICAgICAgICBpZiAoKl9f Y3AgPT0gJ1wwJykKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fY3AgPSAoKHZvaWQgKikw KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoKl9fY3AgPT0g X19yZWplY3QxIHx8ICpfX2NwID09IF9fcmVqZWN0MikKICAgICAgICAgICAgewogICAgICAgICAg ICAgICpfX2NwKysgPSAnXDAnOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAg ICAgICAgICArK19fY3A7CiAgICAgICAgfQogICAgICAqX19zID0gX19jcDsKICAgIH0KICByZXR1 cm4gX19yZXR2YWw7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnNlcF8zYyAoY2hhciAq Kl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgX19yZWplY3QzKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpf X3N0cnNlcF8zYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyLCBj aGFyIF9fcmVqZWN0MykKewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0gKl9fczsKICBpZiAo X19yZXR2YWwgIT0gKCh2b2lkICopMCkpCiAgICB7CiAgICAgIHJlZ2lzdGVyIGNoYXIgKl9fY3Ag PSBfX3JldHZhbDsKICAgICAgd2hpbGUgKDEpCiAgICAgICAgewogICAgICAgICAgaWYgKCpfX2Nw ID09ICdcMCcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2NwID0gKCh2b2lkICopMCk7 CiAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCpfX2NwID09IF9f cmVqZWN0MSB8fCAqX19jcCA9PSBfX3JlamVjdDIgfHwgKl9fY3AgPT0gX19yZWplY3QzKQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgKl9fY3ArKyA9ICdcMCc7CiAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICsrX19jcDsKICAgICAgICB9CiAgICAgICpfX3Mg PSBfX2NwOwogICAgfQogIHJldHVybiBfX3JldHZhbDsKfQojIDExOTAgIi91c3IvaW5jbHVkZS9i aXRzL3N0cmluZzIuaCIgMwpleHRlcm4gY2hhciAqX19zdHJkdXAgKF9fY29uc3QgY2hhciAqX19z dHJpbmcpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMTIwOSAiL3Vzci9pbmNsdWRl L2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBjaGFyICpfX3N0cm5kdXAgKF9fY29uc3QgY2hhciAq X19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsK IyAzNjEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCgojIDMxICIvdXNyL2luY2x1ZGUv bWVtb3J5LmgiIDIgMwojIDMyICJzeW50YXguYyIgMgojIDEgImNvbW1vbi5oIiAxCiMgMTE2ICJj b21tb24uaCIKIyAxICIvdXNyL2luY2x1ZGUvaW50dHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5j bHVkZS9pbnR0eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAxIDMKIyAyNyAi L3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIg MSAzCiMgMjggIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvd29yZHNpemUuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAzCiMgNDkg Ii91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsK dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdWludDE2X3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIGlu dCB1aW50MzJfdDsKCgoKCgpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25n IGludCB1aW50NjRfdDsKCgoKCgoKdHlwZWRlZiBzaWduZWQgY2hhciBpbnRfbGVhc3Q4X3Q7CnR5 cGVkZWYgc2hvcnQgaW50IGludF9sZWFzdDE2X3Q7CnR5cGVkZWYgaW50IGludF9sZWFzdDMyX3Q7 CgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBsb25nIGxvbmcgaW50IGludF9sZWFzdDY0X3Q7CgoK CnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50X2xlYXN0OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNo b3J0IGludCB1aW50X2xlYXN0MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9sZWFzdDMy X3Q7CgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRf bGVhc3Q2NF90OwoKCgoKCgp0eXBlZGVmIHNpZ25lZCBjaGFyIGludF9mYXN0OF90OwoKCgoKCnR5 cGVkZWYgaW50IGludF9mYXN0MTZfdDsKdHlwZWRlZiBpbnQgaW50X2Zhc3QzMl90OwpfX2V4dGVu c2lvbl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRfZmFzdDY0X3Q7CgoKCnR5cGVkZWYgdW5z aWduZWQgY2hhciB1aW50X2Zhc3Q4X3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9m YXN0MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9mYXN0MzJfdDsKX19leHRlbnNpb25f Xwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludF9mYXN0NjRfdDsKIyAxMjYgIi91 c3IvaW5jbHVkZS9zdGRpbnQuaCIgMwp0eXBlZGVmIGludCBpbnRwdHJfdDsKCgp0eXBlZGVmIHVu c2lnbmVkIGludCB1aW50cHRyX3Q7CiMgMTM4ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKX19l eHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50bWF4X3Q7Cl9fZXh0ZW5zaW9uX18K dHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRtYXhfdDsKIyAyOSAiL3Vzci9pbmNs dWRlL2ludHR5cGVzLmgiIDIgMwoKCgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fZ3djaGFyX3Q7CiMg Mjc0ICIvdXNyL2luY2x1ZGUvaW50dHlwZXMuaCIgMwoKIyAyODggIi91c3IvaW5jbHVkZS9pbnR0 eXBlcy5oIiAzCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBsb25nIGludCBxdW90OwogICAg bG9uZyBsb25nIGludCByZW07CiAgfSBpbWF4ZGl2X3Q7CgoKCgoKZXh0ZXJuIGludG1heF90IGlt YXhhYnMgKGludG1heF90IF9fbikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy biBpbWF4ZGl2X3QgaW1heGRpdiAoaW50bWF4X3QgX19udW1lciwgaW50bWF4X3QgX19kZW5vbSkK ICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnRtYXhfdCBzdHJ0 b2ltYXggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSA7CgoKZXh0 ZXJuIHVpbnRtYXhfdCBzdHJ0b3VtYXggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9fcmVzdHJpY3QgX19lbmRwdHIs IGludCBfX2Jhc2UpIDsKCgpleHRlcm4gaW50bWF4X3Qgd2NzdG9pbWF4IChfX2NvbnN0IF9fZ3dj aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2d3 Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoKZXh0ZXJu IHVpbnRtYXhfdCB3Y3N0b3VtYXggKF9fY29uc3QgX19nd2NoYXJfdCAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2d3Y2hhcl90ICoqIF9fcmVzdHJpY3Qg X19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgOwojIDM5NiAiL3Vzci9pbmNsdWRlL2ludHR5cGVz LmgiIDMKZXh0ZXJuIF9faW5saW5lIGludG1heF90CnN0cnRvaW1heCAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IG5wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IGVuZHB0ciwKICAgICAgICAgICBpbnQg YmFzZSkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKG5wdHIsIGVuZHB0ciwgYmFzZSwg MCk7Cn0KIyA0MTQgIi91c3IvaW5jbHVkZS9pbnR0eXBlcy5oIiAzCmV4dGVybiBfX2lubGluZSB1 aW50bWF4X3QKc3RydG91bWF4IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgbnB0ciwgY2hhciAq Kl9fcmVzdHJpY3QgZW5kcHRyLAogICAgICAgICAgIGludCBiYXNlKQp7CiAgcmV0dXJuIF9fc3Ry dG91bGxfaW50ZXJuYWwgKG5wdHIsIGVuZHB0ciwgYmFzZSwgMCk7Cn0KCgoKX19leHRlbnNpb25f XwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfaW50ZXJuYWwgKF9fY29uc3QgX19nd2No YXJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nd2No YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgpleHRlcm4gX19pbmxpbmUg aW50bWF4X3QKd2NzdG9pbWF4IChfX2NvbnN0IF9fZ3djaGFyX3QgKl9fcmVzdHJpY3QgbnB0ciwg X19nd2NoYXJfdCAqKl9fcmVzdHJpY3QgZW5kcHRyLAogICAgICAgICAgIGludCBiYXNlKQp7CiAg cmV0dXJuIF9fd2NzdG9sbF9pbnRlcm5hbCAobnB0ciwgZW5kcHRyLCBiYXNlLCAwKTsKfQoKCgoK X19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3djc3RvdWxsX2lu dGVybmFsIChfX2NvbnN0IF9fZ3djaGFyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nd2NoYXJfdCAqKgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9f ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19ncm91cCkgOwoKCmV4dGVybiBfX2lubGluZSB1aW50bWF4X3QKd2NzdG91 bWF4IChfX2NvbnN0IF9fZ3djaGFyX3QgKl9fcmVzdHJpY3QgbnB0ciwgX19nd2NoYXJfdCAqKl9f cmVzdHJpY3QgZW5kcHRyLAogICAgICAgICAgIGludCBiYXNlKQp7CiAgcmV0dXJuIF9fd2NzdG91 bGxfaW50ZXJuYWwgKG5wdHIsIGVuZHB0ciwgYmFzZSwgMCk7Cn0KCgoKCgojIDExNyAiY29tbW9u LmgiIDIKCgoKCgoKICB0eXBlZGVmIGZsb2F0IHJlYWxfdDsKIyAxNDEgImNvbW1vbi5oIgojIDEg Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCgoK CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1 ZGUvbWF0aC5oIiAyIDMKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDEg MwojIDQxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRlL21hdGgu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9p bmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBhY29zIChkb3VibGUgX194 KSA7IGV4dGVybiBkb3VibGUgX19hY29zIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIGFz aW4gKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2FzaW4gKGRvdWJsZSBfX3gpIDsKCmV4 dGVybiBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYXRhbiAoZG91 YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkg OyBleHRlcm4gZG91YmxlIF9fYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIDsKCgpleHRl cm4gZG91YmxlIGNvcyAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fY29zIChkb3VibGUg X194KSA7CgpleHRlcm4gZG91YmxlIHNpbiAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9f c2luIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIHRhbiAoZG91YmxlIF9feCkgOyBleHRl cm4gZG91YmxlIF9fdGFuIChkb3VibGUgX194KSA7CiMgNzggIi91c3IvaW5jbHVkZS9iaXRzL21h dGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgY29zaCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91 YmxlIF9fY29zaCAoZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUgX194 KSA7IGV4dGVybiBkb3VibGUgX19zaW5oIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIHRh bmggKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIDsKCgoK ZXh0ZXJuIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYWNvc2gg KGRvdWJsZSBfX3gpIDsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIDsgZXh0ZXJu IGRvdWJsZSBfX2FzaW5oIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIGF0YW5oIChkb3Vi bGUgX194KSA7IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCkgOwoKCgoKCmV4dGVy biBkb3VibGUgZXhwIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19leHAgKGRvdWJsZSBf X3gpIDsKIyAxMDYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3Vi bGUgZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgOyBleHRlcm4gZG91YmxlIF9f ZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgOwoKCmV4dGVybiBkb3VibGUgbGRl eHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSA7IGV4dGVybiBkb3VibGUgX19sZGV4cCAo ZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIDsKCgpleHRlcm4gZG91YmxlIGxvZyAoZG91Ymxl IF9feCkgOyBleHRlcm4gZG91YmxlIF9fbG9nIChkb3VibGUgX194KSA7CgoKZXh0ZXJuIGRvdWJs ZSBsb2cxMCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fbG9nMTAgKGRvdWJsZSBfX3gp IDsKCgpleHRlcm4gZG91YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSA7IGV4 dGVybiBkb3VibGUgX19tb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikgOwoKCgpleHRl cm4gZG91YmxlIGV4cG0xIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19leHBtMSAoZG91 YmxlIF9feCkgOwoKCmV4dGVybiBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRv dWJsZSBfX2xvZzFwIChkb3VibGUgX194KSA7CgoKZXh0ZXJuIGRvdWJsZSBsb2diIChkb3VibGUg X194KSA7IGV4dGVybiBkb3VibGUgX19sb2diIChkb3VibGUgX194KSA7CiMgMTQzICIvdXNyL2lu Y2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwg ZG91YmxlIF9feSkgOyBleHRlcm4gZG91YmxlIF9fcG93IChkb3VibGUgX194LCBkb3VibGUgX195 KSA7CgoKZXh0ZXJuIGRvdWJsZSBzcXJ0IChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19z cXJ0IChkb3VibGUgX194KSA7CgoKCmV4dGVybiBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRv dWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJsZSBfX2h5cG90IChkb3VibGUgX194LCBkb3VibGUgX195 KSA7CgoKCgpleHRlcm4gZG91YmxlIGNicnQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBf X2NicnQgKGRvdWJsZSBfX3gpIDsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjZWlsIChkb3VibGUgX194 KSA7IGV4dGVybiBkb3VibGUgX19jZWlsIChkb3VibGUgX194KSA7CgoKZXh0ZXJuIGRvdWJsZSBm YWJzIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3Vi bGUgX19mYWJzIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0 ZXJuIGRvdWJsZSBmbG9vciAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fZmxvb3IgKGRv dWJsZSBfX3gpIDsKCgpleHRlcm4gZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp IDsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsKCgoKCmV4 dGVybiBpbnQgX19pc2luZiAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlIChkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZiAoZG91YmxlIF9fdmFsdWUpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZSAoZG91YmxlIF9f dmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGRyZW0g KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJsZSBfX2RyZW0gKGRvdWJsZSBf X3gsIGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGRvdWJsZSBzaWduaWZpY2FuZCAoZG91YmxlIF9f eCkgOyBleHRlcm4gZG91YmxlIF9fc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpIDsKCgoKCmV4dGVy biBkb3VibGUgY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcHlzaWduIChkb3VibGUgX194LCBkb3Vi bGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMjA5ICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gaW50IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBf X3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAo ZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX19qMCAoZG91YmxlKSA7CmV4dGVybiBkb3VibGUgajEg KGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgOwpleHRlcm4gZG91YmxlIGpu IChpbnQsIGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fam4gKGludCwgZG91YmxlKSA7CmV4dGVy biBkb3VibGUgeTAgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9feTAgKGRvdWJsZSkgOwpleHRl cm4gZG91YmxlIHkxIChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUpIDsKZXh0 ZXJuIGRvdWJsZSB5biAoaW50LCBkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX3luIChpbnQsIGRv dWJsZSkgOwoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBf X2VyZiAoZG91YmxlKSA7CmV4dGVybiBkb3VibGUgZXJmYyAoZG91YmxlKSA7IGV4dGVybiBkb3Vi bGUgX19lcmZjIChkb3VibGUpIDsKZXh0ZXJuIGRvdWJsZSBsZ2FtbWEgKGRvdWJsZSkgOyBleHRl cm4gZG91YmxlIF9fbGdhbW1hIChkb3VibGUpIDsKIyAyMzggIi91c3IvaW5jbHVkZS9iaXRzL21h dGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSkgOyBleHRlcm4gZG91Ymxl IF9fZ2FtbWEgKGRvdWJsZSkgOwoKCgoKCgpleHRlcm4gZG91YmxlIGxnYW1tYV9yIChkb3VibGUs IGludCAqX19zaWduZ2FtcCkgOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hX3IgKGRvdWJsZSwgaW50 ICpfX3NpZ25nYW1wKSA7CgoKCgoKCmV4dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCkgOyBl eHRlcm4gZG91YmxlIF9fcmludCAoZG91YmxlIF9feCkgOwoKCmV4dGVybiBkb3VibGUgbmV4dGFm dGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gZG91YmxlIHJlbWFpbmRlciAoZG91 YmxlIF9feCwgZG91YmxlIF9feSkgOyBleHRlcm4gZG91YmxlIF9fcmVtYWluZGVyIChkb3VibGUg X194LCBkb3VibGUgX195KSA7CgoKCmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRv dWJsZSBfX24pIDsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxiIChkb3VibGUgX194LCBkb3VibGUgX19u KSA7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibiAoZG91YmxlIF9feCwgaW50IF9fbikgOyBleHRl cm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKSA7CgoKCmV4dGVybiBpbnQg aWxvZ2IgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGludCBfX2lsb2diIChkb3VibGUgX194KSA7CiMg NjQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDgyICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1 ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxvYXQgYWNvc2YgKGZsb2F0IF9feCkgOyBl eHRlcm4gZmxvYXQgX19hY29zZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgYXNpbmYgKGZs b2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hc2luZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxv YXQgYXRhbmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hdGFuZiAoZmxvYXQgX194KSA7 CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgOyBleHRlcm4gZmxv YXQgX19hdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IGNvc2Yg KGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19jb3NmIChmbG9hdCBfX3gpIDsKCmV4dGVybiBm bG9hdCBzaW5mIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fc2luZiAoZmxvYXQgX194KSA7 CgpleHRlcm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3RhbmYgKGZs b2F0IF9feCkgOwojIDc4ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4g ZmxvYXQgY29zaGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19jb3NoZiAoZmxvYXQgX194 KSA7CgpleHRlcm4gZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19zaW5o ZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgdGFuaGYgKGZsb2F0IF9feCkgOyBleHRlcm4g ZmxvYXQgX190YW5oZiAoZmxvYXQgX194KSA7CgoKCmV4dGVybiBmbG9hdCBhY29zaGYgKGZsb2F0 IF9feCkgOyBleHRlcm4gZmxvYXQgX19hY29zaGYgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0 IGFzaW5oZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSA7 CgpleHRlcm4gZmxvYXQgYXRhbmhmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXRhbmhm IChmbG9hdCBfX3gpIDsKCgoKCgpleHRlcm4gZmxvYXQgZXhwZiAoZmxvYXQgX194KSA7IGV4dGVy biBmbG9hdCBfX2V4cGYgKGZsb2F0IF9feCkgOwojIDEwNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0 aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25l bnQpIDsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkg OwoKCmV4dGVybiBmbG9hdCBsZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIDsgZXh0 ZXJuIGZsb2F0IF9fbGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSA7CgoKZXh0ZXJu IGZsb2F0IGxvZ2YgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19sb2dmIChmbG9hdCBfX3gp IDsKCgpleHRlcm4gZmxvYXQgbG9nMTBmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fbG9n MTBmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxvYXQgbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQg Kl9faXB0cikgOyBleHRlcm4gZmxvYXQgX19tb2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRy KSA7CgoKCmV4dGVybiBmbG9hdCBleHBtMWYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19l eHBtMWYgKGZsb2F0IF9feCkgOwoKCmV4dGVybiBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkgOyBl eHRlcm4gZmxvYXQgX19sb2cxcGYgKGZsb2F0IF9feCkgOwoKCmV4dGVybiBmbG9hdCBsb2diZiAo ZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2xvZ2JmIChmbG9hdCBfX3gpIDsKIyAxNDMgIi91 c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBwb3dmIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQgX19wb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9f eSkgOwoKCmV4dGVybiBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3Nx cnRmIChmbG9hdCBfX3gpIDsKCgoKZXh0ZXJuIGZsb2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9h dCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9faHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoK CgoKZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fY2JydGYg KGZsb2F0IF9feCkgOwoKCgoKCgpleHRlcm4gZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgOyBleHRl cm4gZmxvYXQgX19jZWlsZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IGZhYnNmIChmbG9h dCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fZmFic2Yg KGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBm bG9vcmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19mbG9vcmYgKGZsb2F0IF9feCkgOwoK CmV4dGVybiBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0 IF9fZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7CgoKCgpleHRlcm4gaW50IF9faXNpbmZm IChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGlu dCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgoKCmV4dGVybiBpbnQgaXNpbmZmIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVmIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGRyZW1mIChmbG9hdCBfX3gsIGZsb2F0 IF9feSkgOyBleHRlcm4gZmxvYXQgX19kcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsKCgoK ZXh0ZXJuIGZsb2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3Np Z25pZmljYW5kZiAoZmxvYXQgX194KSA7CgoKCgpleHRlcm4gZmxvYXQgY29weXNpZ25mIChmbG9h dCBfX3gsIGZsb2F0IF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxv YXQgX19jb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CiMgMjA5ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4g aW50IF9faXNuYW5mIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCmV4dGVybiBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9fajBm IChmbG9hdCkgOwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19qMWYg KGZsb2F0KSA7CmV4dGVybiBmbG9hdCBqbmYgKGludCwgZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9f am5mIChpbnQsIGZsb2F0KSA7CmV4dGVybiBmbG9hdCB5MGYgKGZsb2F0KSA7IGV4dGVybiBmbG9h dCBfX3kwZiAoZmxvYXQpIDsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0 IF9feTFmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgeW5mIChpbnQsIGZsb2F0KSA7IGV4dGVybiBm bG9hdCBfX3luZiAoaW50LCBmbG9hdCkgOwoKCgoKCmV4dGVybiBmbG9hdCBlcmZmIChmbG9hdCkg OyBleHRlcm4gZmxvYXQgX19lcmZmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgZXJmY2YgKGZsb2F0 KSA7IGV4dGVybiBmbG9hdCBfX2VyZmNmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgbGdhbW1hZiAo ZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxvYXQpIDsKIyAyMzggIi91c3IvaW5j bHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBnYW1tYWYgKGZsb2F0KSA7IGV4 dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpIDsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxnYW1tYWZf ciAoZmxvYXQsIGludCAqX19zaWduZ2FtcCkgOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmX3IgKGZs b2F0LCBpbnQgKl9fc2lnbmdhbXApIDsKCgoKCgoKZXh0ZXJuIGZsb2F0IHJpbnRmIChmbG9hdCBf X3gpIDsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCkgOwoKCmV4dGVybiBmbG9hdCBu ZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOyBleHRlcm4gZmxvYXQgX19uZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBmbG9hdCByZW1haW5kZXJmIChm bG9hdCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgOwoKCgpleHRlcm4gZmxvYXQgc2NhbGJmIChmbG9hdCBfX3gsIGZsb2F0 IF9fbikgOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKSA7CgoK CgpleHRlcm4gZmxvYXQgc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSA7IGV4dGVybiBmbG9h dCBfX3NjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbikgOwoKCgpleHRlcm4gaW50IGlsb2diZiAo ZmxvYXQgX194KSA7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0IF9feCkgOwojIDgzICIvdXNy L2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA5OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMv bWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NsIChsb25nIGRvdWJsZSBfX3gp IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJu IGxvbmcgZG91YmxlIGFzaW5sIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5sIChs b25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKGxvbmcgZG91Ymxl IF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25n IGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsIChsb25nIGRvdWJsZSBf X3ksIGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3NsIChsb25nIGRv dWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zbCAobG9uZyBkb3VibGUgX194KSA7 CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25n IGRvdWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRh bmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sIChsb25nIGRv dWJsZSBfX3gpIDsKIyA3OCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJu IGxvbmcgZG91YmxlIGNvc2hsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fY29zaGwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmhsIChs b25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2luaGwgKGxvbmcgZG91Ymxl IF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmhsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgpleHRlcm4gbG9u ZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f YWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2luaGwgKGxv bmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2luaGwgKGxvbmcgZG91Ymxl IF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194KSA7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAobG9uZyBkb3VibGUgX194KSA7CgoKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUg X19leHBsIChsb25nIGRvdWJsZSBfX3gpIDsKIyAxMDYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhj YWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBmcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50 ICpfX2V4cG9uZW50KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZyZXhwbCAobG9uZyBkb3VibGUg X194LCBpbnQgKl9fZXhwb25lbnQpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgbGRleHBsIChsb25n IGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xkZXhw bCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgOwoKCmV4dGVybiBsb25nIGRvdWJs ZSBsb2dsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nbCAobG9u ZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzEwbCAobG9uZyBkb3VibGUg X194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAobG9uZyBkb3VibGUgX194KSA7CgoK ZXh0ZXJuIGxvbmcgZG91YmxlIG1vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpf X2lwdHIpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgKl9faXB0cikgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRv dWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbTFsIChsb25nIGRvdWJsZSBfX3gp IDsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9uZyBk b3VibGUgbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2di bCAobG9uZyBkb3VibGUgX194KSA7CiMgMTQzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMu aCIgMwpleHRlcm4gbG9uZyBkb3VibGUgcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs ZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93bCAobG9uZyBkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3kpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9f eCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zcXJ0bCAobG9uZyBkb3VibGUgX194KSA7CgoKCmV4 dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2h5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpIDsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjYnJ0bCAobG9uZyBkb3VibGUgX194 KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NicnRsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKCgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBm YWJzbCAobG9uZyBkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gp IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRl cm4gbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2Ztb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl IF9feSkgOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVsIChsb25nIGRv dWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50 IGlzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKCmV4dGVybiBpbnQgZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUg X194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWdu aWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaWduaWZp Y2FuZGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvcHlzaWdu bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDIwOSAiL3Vz ci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBk b3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50 IGlzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRv dWJsZSBfX2owbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIGoxbCAobG9uZyBk b3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajFsIChsb25nIGRvdWJsZSkgOwpleHRlcm4g bG9uZyBkb3VibGUgam5sIChpbnQsIGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBf X2pubCAoaW50LCBsb25nIGRvdWJsZSkgOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRv dWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX195MGwgKGxvbmcgZG91YmxlKSA7CmV4dGVybiBs b25nIGRvdWJsZSB5MWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAo bG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkg OyBleHRlcm4gbG9uZyBkb3VibGUgX195bmwgKGludCwgbG9uZyBkb3VibGUpIDsKCgoKCgpleHRl cm4gbG9uZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f ZXJmbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmNsIChsb25nIGRvdWJs ZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxv bmcgZG91YmxlIGxnYW1tYWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xn YW1tYWwgKGxvbmcgZG91YmxlKSA7CiMgMjM4ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMu aCIgMwpleHRlcm4gbG9uZyBkb3VibGUgZ2FtbWFsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gbG9u ZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKSA7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJs ZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIDsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSA7CgoKCgoK CmV4dGVybiBsb25nIGRvdWJsZSByaW50bCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25n IGRvdWJsZSBfX3JpbnRsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUg bmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dGFmdGVybCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibCAo bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f c2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikgOwoKCgoKZXh0ZXJuIGxv bmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgOyBleHRlcm4gbG9u ZyBkb3VibGUgX19zY2FsYm5sIChsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIDsKCgoKZXh0ZXJu IGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25n IGRvdWJsZSBfX3gpIDsKIyAxMDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDExMyAiL3Vz ci9pbmNsdWRlL21hdGguaCIgMwpleHRlcm4gaW50IHNpZ25nYW07CiMgMjQwICIvdXNyL2luY2x1 ZGUvbWF0aC5oIiAzCnR5cGVkZWYgZW51bQp7CiAgX0lFRUVfID0gLTEsCiAgX1NWSURfLAogIF9Y T1BFTl8sCiAgX1BPU0lYXywKICBfSVNPQ18KfSBfTElCX1ZFUlNJT05fVFlQRTsKCgoKCmV4dGVy biBfTElCX1ZFUlNJT05fVFlQRSBfTElCX1ZFUlNJT047CiMgMjY1ICIvdXNyL2luY2x1ZGUvbWF0 aC5oIiAzCnN0cnVjdCBleGNlcHRpb24KCiAgewogICAgaW50IHR5cGU7CiAgICBjaGFyICpuYW1l OwogICAgZG91YmxlIGFyZzE7CiAgICBkb3VibGUgYXJnMjsKICAgIGRvdWJsZSByZXR2YWw7CiAg fTsKCgoKCmV4dGVybiBpbnQgbWF0aGVyciAoc3RydWN0IGV4Y2VwdGlvbiAqX19leGMpOwojIDM1 MCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxp bmUuaCIgMSAzCiMgMjkxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJu IF9faW5saW5lIGRvdWJsZSBfX3NnbiAoZG91YmxlKSA7IGV4dGVybiBfX2lubGluZSBkb3VibGUg X19zZ24gKGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4w ID8gMS4wIDogLTEuMCk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxvYXQpIDsg ZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxvYXQgX194KSB7IHJldHVybiBfX3ggPT0g MC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjApOyB9IGV4dGVybiBfX2lubGluZSBs b25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBfX2lubGluZSBsb25nIGRv dWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6 IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfQoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBf X3BvdzIgKGRvdWJsZSkgOyBleHRlcm4gX19pbmxpbmUgZG91YmxlIF9fcG93MiAoZG91YmxlIF9f eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBf X2V4cG9uZW50OyBfX2V4dGVuc2lvbl9fIGxvbmcgbG9uZyBpbnQgX19wID0gKGxvbmcgbG9uZyBp bnQpIF9feDsgaWYgKF9feCA9PSAobG9uZyBkb3VibGUpIF9fcCkgeyBfX2FzbSBfX3ZvbGF0aWxl X18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKDEuMCksICJ1IiAoX194KSk7IHJl dHVybiBfX3ZhbHVlOyB9IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZAklJXN0KDApXG5cdCIgImZy bmRpbnQJCQkjIGludCh4KVxuXHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4 KVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCkpIC0gMVxuXHQiIDogIj10IiAoX192YWx1ZSks ICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSArPSAxLjA7IF9fYXNtIF9f dm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1 IiAoX19leHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQg X19wb3cyZiAoZmxvYXQpIDsgZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9fcG93MmYgKGZsb2F0IF9f eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBf X2V4cG9uZW50OyBfX2V4dGVuc2lvbl9fIGxvbmcgbG9uZyBpbnQgX19wID0gKGxvbmcgbG9uZyBp bnQpIF9feDsgaWYgKF9feCA9PSAobG9uZyBkb3VibGUpIF9fcCkgeyBfX2FzbSBfX3ZvbGF0aWxl X18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKDEuMCksICJ1IiAoX194KSk7IHJl dHVybiBfX3ZhbHVlOyB9IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZAklJXN0KDApXG5cdCIgImZy bmRpbnQJCQkjIGludCh4KVxuXHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4 KVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCkpIC0gMVxuXHQiIDogIj10IiAoX192YWx1ZSks ICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSArPSAxLjA7IF9fYXNtIF9f dm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1 IiAoX19leHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBk b3VibGUgX19wb3cybCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91Ymxl IF9fcG93MmwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVl OyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBfX2V4dGVuc2lvbl9fIGxvbmcgbG9u ZyBpbnQgX19wID0gKGxvbmcgbG9uZyBpbnQpIF9feDsgaWYgKF9feCA9PSAobG9uZyBkb3VibGUp IF9fcCkgeyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAi MCIgKDEuMCksICJ1IiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9fYXNtIF9fdm9sYXRpbGVf XyAoImZsZAklJXN0KDApXG5cdCIgImZybmRpbnQJCQkjIGludCh4KVxuXHQiICJmeGNoXG5cdCIg ImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4KVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCkpIC0g MVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsg X192YWx1ZSArPSAxLjA7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3Zh bHVlKSA6ICIwIiAoX192YWx1ZSksICJ1IiAoX19leHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsg fQojIDM4NSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGlu ZSBsb25nIGRvdWJsZSBfX2V4cG0xbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IHJlZ2lzdGVy IGxvbmcgZG91YmxlIF9fdGVtcDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbDJlCQkJIyBlXngg LSAxID0gMl4oeCAqIGxvZzIoZSkpIC0gMVxuXHQiICJmbXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIo ZSlcblx0IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMgaW50KHggKiBsb2cyKGUpKVxu XHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9nMihlKSlcblx0IiAi ZjJ4bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgImZzY2FsZQkJCSMgMl4o eCAqIGxvZzIoZSkpIC0gMl4oaW50KHggKiBsb2cyKGUpKSlcblx0IiA6ICI9dCIgKF9fdmFsdWUp LCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZz Y2FsZQkJCSMgMl5pbnQoeCAqIGxvZzIoZSkpXG5cdCIgOiAiPXQiIChfX3RlbXApIDogIjAiICgx LjApLCAidSIgKF9fZXhwb25lbnQpKTsgX190ZW1wIC09IDEuMDsgcmV0dXJuIF9fdGVtcCArIF9f dmFsdWUgPzogX194OyB9CiMgNDA1ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMK ZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBleHAgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBk b3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19hc20gX192 b2xhdGlsZV9fICgiZmxkbDJlCQkJIyBlXnggPSAyXih4ICogbG9nMihlKSlcblx0IiAiZm11bAkl JXN0KDEpCQkjIHggKiBsb2cyKGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkj IGludCh4ICogbG9nMihlKSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3Qo eCAqIGxvZzIoZSkpXG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxu XHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192 YWx1ZSArPSAxLjA7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVl KSA6ICIwIiAoX192YWx1ZSksICJ1IiAoX19leHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfSBl eHRlcm4gX19pbmxpbmUgZmxvYXQgZXhwZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IF9fYXNtIF9fdm9s YXRpbGVfXyAoImZsZGwyZQkJCSMgZV54ID0gMl4oeCAqIGxvZzIoZSkpXG5cdCIgImZtdWwJJSVz dCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBp bnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHgg KiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0 IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fdmFs dWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkg OiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0 ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBf X2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCA9IDJeKHggKiBsb2cyKGUpKVxuXHQi ICJmbXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIoZSlcblx0IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJu ZGludAkJCSMgaW50KHggKiBsb2cyKGUpKVxuXHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJ IyBmcmFjdCh4ICogbG9nMihlKSlcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUp KSkgLSAxXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9f eCkpOyBfX3ZhbHVlICs9IDEuMDsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIg KF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVybiBfX3Zh bHVlOyB9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBfX2V4cGwgKGxvbmcgZG91YmxlIF9f eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBf X2V4cG9uZW50OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCA9IDJeKHggKiBs b2cyKGUpKVxuXHQiICJmbXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIoZSlcblx0IiAiZnN0CSUlc3Qo MSlcblx0IiAiZnJuZGludAkJCSMgaW50KHggKiBsb2cyKGUpKVxuXHQiICJmeGNoXG5cdCIgImZz dWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9nMihlKSlcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0 KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVu dCkgOiAiMCIgKF9feCkpOyBfX3ZhbHVlICs9IDEuMDsgX19hc20gX192b2xhdGlsZV9fICgiZnNj YWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7 IHJldHVybiBfX3ZhbHVlOyB9CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSB0YW4gKGRvdWJsZSBf X3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg X192YWx1ZTIgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsgX19hc20gX192b2xhdGlsZV9f ICgiZnB0YW4iIDogIj10IiAoX192YWx1ZTIpLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7 IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCB0YW5mIChmbG9hdCBfX3gp IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192 YWx1ZTIgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsgX19hc20gX192b2xhdGlsZV9fICgi ZnB0YW4iIDogIj10IiAoX192YWx1ZTIpLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJl dHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRv dWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBk b3VibGUgX192YWx1ZTIgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsgX19hc20gX192b2xh dGlsZV9fICgiZnB0YW4iIDogIj10IiAoX192YWx1ZTIpLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAo X194KSk7IHJldHVybiBfX3ZhbHVlOyB9CiMgNDI1ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5s aW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91Ymxl IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18g KCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgx KSIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgYXRhbjJmIChmbG9h dCBfX3ksIGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBf X3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAo X195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBk b3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10 IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192 YWx1ZTsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91Ymxl IF9feSwgbG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9f YXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwg InUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CgoKZXh0ZXJuIF9faW5saW5l IGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB7IHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3Rzdwkl JWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCks ICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxp bmUgZmxvYXQgZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB7IHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3Rzdwkl JWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCks ICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxp bmUgbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7 IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZw cmVtXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192 YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1 ZTsgfQojIDQ0MCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lu bGluZSBkb3VibGUgc3FydCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7 IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194 KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgc3FydGYgKGZsb2F0 IF9feCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNx cnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4 dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAi PXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KZXh0ZXJuIF9f aW5saW5lIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBs b25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAo X19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgoKZXh0ZXJuIF9faW5s aW5lIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFicyAoX194 KTsgfQpleHRlcm4gX19pbmxpbmUgZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgeyByZXR1cm4gX19i dWlsdGluX2ZhYnNmIChfX3gpOyB9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBmYWJzbCAo bG9uZyBkb3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2wgKF9feCk7IH0KZXh0ZXJu IF9faW5saW5lIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4g X19idWlsdGluX2ZhYnNsIChfX3gpOyB9CgoKCgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIHNp biAoZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRp bGVfXyAoImZzaW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVz dWx0OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBzaW5mIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIg ZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzaW4iIDogIj10IiAoX19yZXN1 bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBfX2lubGluZSBsb25n IGRvdWJsZSBzaW5sIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19y ZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzaW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAi IChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGNvcyAo ZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVf XyAoImZjb3MiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0 OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgZmxv YXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZjb3MiIDogIj10IiAoX19yZXN1bHQp IDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRv dWJsZSBjb3NsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1 bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZjb3MiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChf X3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGxvZyAoZG91 YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAo ImZsZGxuMjsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0 KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgbG9nZiAoZmxv YXQgX194KSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm bGRsbjI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgx KSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGxvZ2wg KGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20g X192b2xhdGlsZV9fICgiZmxkbG4yOyBmeGNoOyBmeWwyeCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAi MCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9CmV4dGVybiBfX2lubGluZSBk b3VibGUgbG9nMTAgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2Fz bSBfX3ZvbGF0aWxlX18gKCJmbGRsZzI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6 ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5l IGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2Fz bSBfX3ZvbGF0aWxlX18gKCJmbGRsZzI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6 ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5l IGxvbmcgZG91YmxlIGxvZzEwbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsZzI7IGZ4Y2g7IGZ5bDJ4IiA6 ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7 IH0KCmV4dGVybiBfX2lubGluZSBkb3VibGUgYXNpbiAoZG91YmxlIF9feCkgeyByZXR1cm4gX19h dGFuMmwgKF9feCwgX19zcXJ0bCAoMS4wIC0gX194ICogX194KSk7IH0gZXh0ZXJuIF9faW5saW5l IGZsb2F0IGFzaW5mIChmbG9hdCBfX3gpIHsgcmV0dXJuIF9fYXRhbjJsIChfX3gsIF9fc3FydGwg KDEuMCAtIF9feCAqIF9feCkpOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhc2lubCAo bG9uZyBkb3VibGUgX194KSB7IHJldHVybiBfX2F0YW4ybCAoX194LCBfX3NxcnRsICgxLjAgLSBf X3ggKiBfX3gpKTsgfQpleHRlcm4gX19pbmxpbmUgZG91YmxlIGFjb3MgKGRvdWJsZSBfX3gpIHsg cmV0dXJuIF9fYXRhbjJsIChfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpLCBfX3gpOyB9IGV4dGVy biBfX2lubGluZSBmbG9hdCBhY29zZiAoZmxvYXQgX194KSB7IHJldHVybiBfX2F0YW4ybCAoX19z cXJ0bCAoMS4wIC0gX194ICogX194KSwgX194KTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3Vi bGUgYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX19hdGFuMmwgKF9fc3FydGwgKDEu MCAtIF9feCAqIF9feCksIF9feCk7IH0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGF0YW4gKGRv dWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18g KCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7 IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgYXRhbmYgKGZsb2F0IF9f eCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsg ZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4g X19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJs ZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVf XyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSki KTsgcmV0dXJuIF9fcmVzdWx0OyB9CgpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ24x bCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxv bmcgZG91YmxlIF9feCkgeyBfX2V4dGVuc2lvbl9fIHVuaW9uIHsgbG9uZyBkb3VibGUgX194bGQ7 IHVuc2lnbmVkIGludCBfX3hpWzNdOyB9IF9fbiA9IHsgX194bGQ6IF9feCB9OyBfX24uX194aVsy XSA9IChfX24uX194aVsyXSAmIDB4ODAwMCkgfCAweDNmZmY7IF9fbi5fX3hpWzFdID0gMHg4MDAw MDAwMDsgX19uLl9feGlbMF0gPSAwOyByZXR1cm4gX19uLl9feGxkOyB9CiMgNDc5ICIvdXNyL2lu Y2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBzaW5oIChk b3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2Zh YnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSArIF9fZXht MSkgKiBfX3NnbjFsIChfX3gpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBzaW5oZiAoZmxvYXQg X194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2ZhYnNsIChf X3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSArIF9fZXhtMSkgKiBf X3NnbjFsIChfX3gpOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBk b3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2Zh YnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSArIF9fZXht MSkgKiBfX3NnbjFsIChfX3gpOyB9CgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgY29zaCAoZG91 YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4ID0gX19leHBsIChfX3gpOyByZXR1 cm4gMC41ICogKF9fZXggKyAxLjAgLyBfX2V4KTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgY29z aGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4ID0gX19leHBsIChfX3gp OyByZXR1cm4gMC41ICogKF9fZXggKyAxLjAgLyBfX2V4KTsgfSBleHRlcm4gX19pbmxpbmUgbG9u ZyBkb3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBf X2V4ID0gX19leHBsIChfX3gpOyByZXR1cm4gMC41ICogKF9fZXggKyAxLjAgLyBfX2V4KTsgfQoK CgpleHRlcm4gX19pbmxpbmUgZG91YmxlIHRhbmggKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKC1fX2ZhYnNsIChfX3ggKyBfX3gpKTsgcmV0dXJu IF9fZXhtMSAvIChfX2V4bTEgKyAyLjApICogX19zZ24xbCAoLV9feCk7IH0gZXh0ZXJuIF9faW5s aW5lIGZsb2F0IHRhbmhmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0x ID0gX19leHBtMWwgKC1fX2ZhYnNsIChfX3ggKyBfX3gpKTsgcmV0dXJuIF9fZXhtMSAvIChfX2V4 bTEgKyAyLjApICogX19zZ24xbCAoLV9feCk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91Ymxl IHRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0g X19leHBtMWwgKC1fX2ZhYnNsIChfX3ggKyBfX3gpKTsgcmV0dXJuIF9fZXhtMSAvIChfX2V4bTEg KyAyLjApICogX19zZ24xbCAoLV9feCk7IH0KCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgZmxv b3IgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGls ZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQg X19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9f Y3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRj dyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAi PXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIg OiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQg Zmxvb3JmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xh dGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBp bnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7 IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJm bGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIg OiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAl MCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9u ZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg X192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1 bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIg OiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9fYXNt IF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0 aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9s YXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfQojIDUw MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBkb3Vi bGUgY2VpbCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3Zv bGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0 IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cp KTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAo ImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50 IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3 ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBm bG9hdCBjZWlsZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9f dm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hv cnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19j dykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxl ICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRp bnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxk Y3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5l IGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGls ZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAl MCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7IF9f YXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3Zv bGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9f dm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfQoj IDUyMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBk b3VibGUKbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX3kpCnsKICByZWdpc3RlciBsb25nIGRvdWJs ZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkg OiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0K CgoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBleHBtMSAoZG91YmxlIF9feCkgeyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBy ZWdpc3RlciBsb25nIGRvdWJsZSBfX3RlbXA7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGwyZQkJ CSMgZV54IC0gMSA9IDJeKHggKiBsb2cyKGUpKSAtIDFcblx0IiAiZm11bAklJXN0KDEpCQkjIHgg KiBsb2cyKGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9n MihlKSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkp XG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiICJmc2NhbGUJ CQkjIDJeKHggKiBsb2cyKGUpKSAtIDJeKGludCh4ICogbG9nMihlKSkpXG5cdCIgOiAiPXQiIChf X3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxl X18gKCJmc2NhbGUJCQkjIDJeaW50KHggKiBsb2cyKGUpKVxuXHQiIDogIj10IiAoX190ZW1wKSA6 ICIwIiAoMS4wKSwgInUiIChfX2V4cG9uZW50KSk7IF9fdGVtcCAtPSAxLjA7IHJldHVybiBfX3Rl bXAgKyBfX3ZhbHVlID86IF9feDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgZXhwbTFmIChmbG9h dCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX19leHBvbmVudDsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1wOyBfX2FzbSBfX3ZvbGF0 aWxlX18gKCJmbGRsMmUJCQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAxXG5cdCIgImZt dWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50 CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZy YWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAt IDFcblx0IiAiZnNjYWxlCQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihpbnQoeCAqIGxvZzIoZSkp KVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsg X19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlCQkJIyAyXmludCh4ICogbG9nMihlKSlcblx0IiA6 ICI9dCIgKF9fdGVtcCkgOiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVudCkpOyBfX3RlbXAgLT0g MS4wOyByZXR1cm4gX190ZW1wICsgX192YWx1ZSA/OiBfX3g7IH0gZXh0ZXJuIF9faW5saW5lIGxv bmcgZG91YmxlIGV4cG0xbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fdGVtcDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbDJlCQkJIyBlXnggLSAxID0g Ml4oeCAqIGxvZzIoZSkpIC0gMVxuXHQiICJmbXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIoZSlcblx0 IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMgaW50KHggKiBsb2cyKGUpKVxuXHQiICJm eGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9nMihlKSlcblx0IiAiZjJ4bTEJ CQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgImZzY2FsZQkJCSMgMl4oeCAqIGxv ZzIoZSkpIC0gMl4oaW50KHggKiBsb2cyKGUpKSlcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUi IChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZQkJ CSMgMl5pbnQoeCAqIGxvZzIoZSkpXG5cdCIgOiAiPXQiIChfX3RlbXApIDogIjAiICgxLjApLCAi dSIgKF9fZXhwb25lbnQpKTsgX190ZW1wIC09IDEuMDsgcmV0dXJuIF9fdGVtcCArIF9fdmFsdWUg PzogX194OyB9CgoKCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gp IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4w IC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBf X3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5 bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9f dmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSB7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAq IDEuNDE0MjEzNTYyMzczMDk1MDQ4ODBMKSBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsgZWxz ZSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjJcblx0IiAiZnhjaFxuXHQiICJmeWwyeHAxIiA6 ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9 IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBsb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgeyBy ZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAw LjUgKiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7 IGVsc2UgX19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhw MSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1 ZTsgfQojIDU1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lu bGluZSBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195 ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChf X3kgKiBfX3kgKyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfSBleHRlcm4g X19pbmxpbmUgZmxvYXQgYXNpbmhmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg X195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRs IChfX3kgKiBfX3kgKyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfSBleHRl cm4gX19pbmxpbmUgbG9uZyBkb3VibGUgYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAq IF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kgKyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFs IChfX3gpKTsgfQoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkg eyByZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCAr IDEuMCkpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgeyByZXR1 cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkp OyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkg eyByZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCAr IDEuMCkpOyB9CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgeyBy ZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxv ZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfSBleHRl cm4gX19pbmxpbmUgZmxvYXQgYXRhbmhmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195ICsgX195 KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcg ZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f eSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAo MS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9CgoKCgpleHRlcm4gX19pbmxpbmUgZG91Ymxl IGh5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBf X3ggKyBfX3kgKiBfX3kpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBoeXBvdGYgKGZsb2F0IF9f eCwgZmxvYXQgX195KSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOyB9 IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195KSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOyB9 CgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3Zv bGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6 ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBsb2di ZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxv bmcgZG91YmxlIF9fanVuazsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10 IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsg fSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgeyBy ZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7 IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVuayksICI9dSIg KF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA2NTIgIi91c3IvaW5j bHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIGRyZW0gKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVy IGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZz dHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIg KF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3Zh bHVlOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp IHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19h c20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxu XHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAo X194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGlu ZSBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsg cmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20g X192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQi ICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194 KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9CiMgNjY1ICIvdXNyL2luY2x1 ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGludApfX2Zpbml0ZSAoZG91 YmxlIF9feCkKewogIHJldHVybiAoX19leHRlbnNpb25fXwogICAgICAgICAgKCgoKCh1bmlvbiB7 IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0pIHtfX2Q6IF9feH0pLl9faVsxXQogICAgICAgICAg ICAgfCAweDgwMGZmZmZmdSkgKyAxKSA+PiAzMSkpOwp9CgoKCmV4dGVybiBfX2lubGluZSBkb3Vi bGUgX19jb3NobTEgKGRvdWJsZSkgOyBleHRlcm4gX19pbmxpbmUgZG91YmxlIF9fY29zaG0xIChk b3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2Zh YnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSkgKiBfX2V4 bTE7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9fY29zaG0xZiAoZmxvYXQpIDsgZXh0ZXJuIF9f aW5saW5lIGZsb2F0IF9fY29zaG0xZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fZXhtMSA9IF9fZXhwbTFsIChfX2ZhYnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEg LyAoX19leG0xICsgMS4wKSkgKiBfX2V4bTE7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91Ymxl IF9fY29zaG0xbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9f Y29zaG0xbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9 IF9fZXhwbTFsIChfX2ZhYnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0x ICsgMS4wKSkgKiBfX2V4bTE7IH0KCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBfX2Fjb3NoMXAg KGRvdWJsZSkgOyBleHRlcm4gX19pbmxpbmUgZG91YmxlIF9fYWNvc2gxcCAoZG91YmxlIF9feCkg eyByZXR1cm4gbG9nMXBsIChfX3ggKyBfX3NxcnRsIChfX3gpICogX19zcXJ0bCAoX194ICsgMi4w KSk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9fYWNvc2gxcGYgKGZsb2F0KSA7IGV4dGVybiBf X2lubGluZSBmbG9hdCBfX2Fjb3NoMXBmIChmbG9hdCBfX3gpIHsgcmV0dXJuIGxvZzFwbCAoX194 ICsgX19zcXJ0bCAoX194KSAqIF9fc3FydGwgKF9feCArIDIuMCkpOyB9IGV4dGVybiBfX2lubGlu ZSBsb25nIGRvdWJsZSBfX2Fjb3NoMXBsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gX19pbmxpbmUg bG9uZyBkb3VibGUgX19hY29zaDFwbCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBsb2cxcGwg KF9feCArIF9fc3FydGwgKF9feCkgKiBfX3NxcnRsIChfX3ggKyAyLjApKTsgfQojIDM1MSAiL3Vz ci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNDExICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCgojIDE0 MiAiY29tbW9uLmgiIDIKIyAxNzYgImNvbW1vbi5oIgp0eXBlZGVmIHN0cnVjdCB7CiAgICByZWFs X3QgcmU7CiAgICByZWFsX3QgaW07Cn0gY29tcGxleF90OwoKCgp1aW50MzJfdCBpbnRfbG9nMih1 aW50MzJfdCB2YWwpOwojIDMzICJzeW50YXguYyIgMgojIDEgInN5bnRheC5oIiAxCiMgMjkgInN5 bnRheC5oIgojIDEgImJpdHMuaCIgMQojIDI5ICJiaXRzLmgiCiMgMSAiYW5hbHlzaXMuaCIgMQoj IDMwICJiaXRzLmgiIDIKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9iaXRmaWxlCnsKCiAgICAgICAg dWludDMyX3QgYnVmYTsKICAgICAgICB1aW50MzJfdCBidWZiOwogICAgICAgIHVpbnQzMl90IHBv czsKICAgICAgICB1aW50MzJfdCAqdGFpbDsKICAgICAgICB1aW50MzJfdCAqc3RhcnQ7Cn0gYml0 ZmlsZTsKIyA1OCAiYml0cy5oIgp2b2lkIGZhYWRfaW5pdGJpdHMoYml0ZmlsZSAqbGQsIHZvaWQg KmJ1ZmZlcik7CnVpbnQ4X3QgZmFhZF9ieXRlX2FsaWduKGJpdGZpbGUgKmxkKTsKdWludDMyX3Qg ZmFhZF9nZXRfcHJvY2Vzc2VkX2JpdHMoYml0ZmlsZSAqbGQpOwoKCnN0YXRpYyB1aW50MzJfdCBm YWFkX3Nob3diaXRzKGJpdGZpbGUgKmxkLCB1aW50OF90IGJpdHMpCnsKICAgIGludDMyX3QgbmJp dCA9IChiaXRzICsgbGQtPnBvcykgLSAzMjsKICAgIGlmIChuYml0ID4gMCkKICAgIHsKICAgICAg ICByZXR1cm4gKChsZC0+YnVmYSAmICgweGZmZmZmZmZmID4+IGxkLT5wb3MpKSA8PCBuYml0KSB8 CiAgICAgICAgICAgIChsZC0+YnVmYiA+PiAoMzIgLSBuYml0KSk7CiAgICB9IGVsc2UgewogICAg ICAgIHJldHVybiAobGQtPmJ1ZmEgJiAoMHhmZmZmZmZmZiA+PiBsZC0+cG9zKSkgPj4gKDMyIC0g bGQtPnBvcyAtIGJpdHMpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBmYWFkX2ZsdXNoYml0cyhiaXRm aWxlICpsZCwgdWludDhfdCBiaXRzKQp7CiAgICAgICAgbGQtPnBvcyArPSBiaXRzOwoKICAgICAg ICBpZiAobGQtPnBvcyA+PSAzMikKICAgICAgICB7CiAgICAgICAgICAgICAgICB1aW50MzJfdCB0 bXA7CgogICAgICAgICAgICAgICAgbGQtPmJ1ZmEgPSBsZC0+YnVmYjsKICAgICAgICAgICAgICAg IHRtcCA9ICoodWludDMyX3QqKWxkLT50YWlsOwoKICAgICAgICAgICAgICAgICgodG1wKSA9ICgg KCh0bXApJjB4ZmYpPDwyNCkgfCAoKCh0bXApJjB4ZmYwMCk8PDgpIHwgKCgodG1wKT4+OCkmMHhm ZjAwKSB8ICgoKHRtcCk+PjI0KSYweGZmKSk7CgogICAgICAgICAgICAgICAgbGQtPmJ1ZmIgPSB0 bXA7CiAgICAgICAgICAgICAgICBsZC0+dGFpbCsrOwogICAgICAgICAgICAgICAgbGQtPnBvcyAt PSAzMjsKICAgICAgICB9Cn0KCgpzdGF0aWMgdWludDMyX3QgZmFhZF9nZXRiaXRzKGJpdGZpbGUg KmxkLCB1aW50OF90IG4gKQp7CiAgICAgICAgdWludDMyX3QgcmV0ID0gZmFhZF9zaG93Yml0cyhs ZCwgbik7CiAgICAgICAgZmFhZF9mbHVzaGJpdHMobGQsIG4pOwoKCgoKCgogICAgICAgIHJldHVy biByZXQ7Cn0KCnN0YXRpYyB1aW50OF90IGZhYWRfZ2V0MWJpdChiaXRmaWxlICpsZCApCnsKICAg IHJldHVybiAodWludDhfdClmYWFkX2dldGJpdHMobGQsIDEgKTsKfQojIDMwICJzeW50YXguaCIg MgojIDg3ICJzeW50YXguaCIKdHlwZWRlZiBzdHJ1Y3QKewogICAgdWludDhfdCBlbGVtZW50X2lu c3RhbmNlX3RhZzsKICAgIHVpbnQ4X3Qgb2JqZWN0X3R5cGU7CiAgICB1aW50OF90IHNmX2luZGV4 OwogICAgdWludDhfdCBudW1fZnJvbnRfY2hhbm5lbF9lbGVtZW50czsKICAgIHVpbnQ4X3QgbnVt X3NpZGVfY2hhbm5lbF9lbGVtZW50czsKICAgIHVpbnQ4X3QgbnVtX2JhY2tfY2hhbm5lbF9lbGVt ZW50czsKICAgIHVpbnQ4X3QgbnVtX2xmZV9jaGFubmVsX2VsZW1lbnRzOwogICAgdWludDhfdCBu dW1fYXNzb2NfZGF0YV9lbGVtZW50czsKICAgIHVpbnQ4X3QgbnVtX3ZhbGlkX2NjX2VsZW1lbnRz OwogICAgdWludDhfdCBtb25vX21peGRvd25fcHJlc2VudDsKICAgIHVpbnQ4X3QgbW9ub19taXhk b3duX2VsZW1lbnRfbnVtYmVyOwogICAgdWludDhfdCBzdGVyZW9fbWl4ZG93bl9wcmVzZW50Owog ICAgdWludDhfdCBzdGVyZW9fbWl4ZG93bl9lbGVtZW50X251bWJlcjsKICAgIHVpbnQ4X3QgbWF0 cml4X21peGRvd25faWR4X3ByZXNlbnQ7CiAgICB1aW50OF90IHBzZXVkb19zdXJyb3VuZF9lbmFi bGU7CiAgICB1aW50OF90IG1hdHJpeF9taXhkb3duX2lkeDsKICAgIHVpbnQ4X3QgZnJvbnRfZWxl bWVudF9pc19jcGVbMTZdOwogICAgdWludDhfdCBmcm9udF9lbGVtZW50X3RhZ19zZWxlY3RbMTZd OwogICAgdWludDhfdCBzaWRlX2VsZW1lbnRfaXNfY3BlWzE2XTsKICAgIHVpbnQ4X3Qgc2lkZV9l bGVtZW50X3RhZ19zZWxlY3RbMTZdOwogICAgdWludDhfdCBiYWNrX2VsZW1lbnRfaXNfY3BlWzE2 XTsKICAgIHVpbnQ4X3QgYmFja19lbGVtZW50X3RhZ19zZWxlY3RbMTZdOwogICAgdWludDhfdCBs ZmVfZWxlbWVudF90YWdfc2VsZWN0WzE2XTsKICAgIHVpbnQ4X3QgYXNzb2NfZGF0YV9lbGVtZW50 X3RhZ19zZWxlY3RbMTZdOwogICAgdWludDhfdCBjY19lbGVtZW50X2lzX2luZF9zd1sxNl07CiAg ICB1aW50OF90IHZhbGlkX2NjX2VsZW1lbnRfdGFnX3NlbGVjdFsxNl07CgogICAgdWludDhfdCBj aGFubmVsczsKCiAgICB1aW50OF90IGNvbW1lbnRfZmllbGRfYnl0ZXM7CiAgICB1aW50OF90IGNv bW1lbnRfZmllbGRfZGF0YVsyNTddOwp9IHByb2dyYW1fY29uZmlnOwoKdHlwZWRlZiBzdHJ1Y3QK ewogICAgdWludDE2X3Qgc3luY3dvcmQ7CiAgICB1aW50OF90IGlkOwogICAgdWludDhfdCBsYXll cjsKICAgIHVpbnQ4X3QgcHJvdGVjdGlvbl9hYnNlbnQ7CiAgICB1aW50OF90IHByb2ZpbGU7CiAg ICB1aW50OF90IHNmX2luZGV4OwogICAgdWludDhfdCBwcml2YXRlX2JpdDsKICAgIHVpbnQ4X3Qg Y2hhbm5lbF9jb25maWd1cmF0aW9uOwogICAgdWludDhfdCBvcmlnaW5hbDsKICAgIHVpbnQ4X3Qg aG9tZTsKICAgIHVpbnQ4X3QgZW1waGFzaXM7CiAgICB1aW50OF90IGNvcHlyaWdodF9pZGVudGlm aWNhdGlvbl9iaXQ7CiAgICB1aW50OF90IGNvcHlyaWdodF9pZGVudGlmaWNhdGlvbl9zdGFydDsK ICAgIHVpbnQxNl90IGFhY19mcmFtZV9sZW5ndGg7CiAgICB1aW50MTZfdCBhZHRzX2J1ZmZlcl9m dWxsbmVzczsKICAgIHVpbnQ4X3Qgbm9fcmF3X2RhdGFfYmxvY2tzX2luX2ZyYW1lOwogICAgdWlu dDE2X3QgY3JjX2NoZWNrOwp9IGFkdHNfaGVhZGVyOwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgdWlu dDhfdCBjb3B5cmlnaHRfaWRfcHJlc2VudDsKICAgIGludDhfdCBjb3B5cmlnaHRfaWRbMTBdOwog ICAgdWludDhfdCBvcmlnaW5hbF9jb3B5OwogICAgdWludDhfdCBob21lOwogICAgdWludDhfdCBi aXRzdHJlYW1fdHlwZTsKICAgIHVpbnQzMl90IGJpdHJhdGU7CiAgICB1aW50OF90IG51bV9wcm9n cmFtX2NvbmZpZ19lbGVtZW50czsKICAgIHVpbnQzMl90IGFkaWZfYnVmZmVyX2Z1bGxuZXNzOwoK ICAgIHByb2dyYW1fY29uZmlnIHBjZTsKfSBhZGlmX2hlYWRlcjsKCnR5cGVkZWYgc3RydWN0CnsK ICAgIHVpbnQ4X3QgbGFzdF9iYW5kOwogICAgdWludDhfdCBkYXRhX3ByZXNlbnQ7CiAgICB1aW50 MTZfdCBsYWc7CiAgICB1aW50OF90IGxhZ191cGRhdGU7CiAgICB1aW50OF90IGNvZWY7CiAgICB1 aW50OF90IGxvbmdfdXNlZFs1MV07CiAgICB1aW50OF90IHNob3J0X3VzZWRbOF07CiAgICB1aW50 OF90IHNob3J0X2xhZ19wcmVzZW50WzhdOwogICAgdWludDhfdCBzaG9ydF9sYWdbOF07Cn0gbHRw X2luZm87Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICB1aW50OF90IGxpbWl0OwogICAgdWludDhfdCBw cmVkaWN0b3JfcmVzZXQ7CiAgICB1aW50OF90IHByZWRpY3Rvcl9yZXNldF9ncm91cF9udW1iZXI7 CiAgICB1aW50OF90IHByZWRpY3Rpb25fdXNlZFs0MV07Cn0gcHJlZF9pbmZvOwoKdHlwZWRlZiBz dHJ1Y3QKewogICAgdWludDhfdCBudW1iZXJfcHVsc2U7CiAgICB1aW50OF90IHB1bHNlX3N0YXJ0 X3NmYjsKICAgIHVpbnQ4X3QgcHVsc2Vfb2Zmc2V0WzRdOwogICAgdWludDhfdCBwdWxzZV9hbXBb NF07Cn0gcHVsc2VfaW5mbzsKCnR5cGVkZWYgc3RydWN0CnsKICAgIHVpbnQ4X3Qgbl9maWx0Wzhd OwogICAgdWludDhfdCBjb2VmX3Jlc1s4XTsKICAgIHVpbnQ4X3QgbGVuZ3RoWzhdWzRdOwogICAg dWludDhfdCBvcmRlcls4XVs0XTsKICAgIHVpbnQ4X3QgZGlyZWN0aW9uWzhdWzRdOwogICAgdWlu dDhfdCBjb2VmX2NvbXByZXNzWzhdWzRdOwogICAgdWludDhfdCBjb2VmWzhdWzRdWzMyXTsKfSB0 bnNfaW5mbzsKCnR5cGVkZWYgc3RydWN0CnsKICAgIHVpbnQ4X3QgcHJlc2VudDsKCiAgICB1aW50 OF90IG51bV9iYW5kczsKICAgIHVpbnQ4X3QgcGNlX2luc3RhbmNlX3RhZzsKICAgIHVpbnQ4X3Qg ZXhjbHVkZWRfY2huc19wcmVzZW50OwogICAgdWludDhfdCBiYW5kX3RvcFsxN107CiAgICB1aW50 OF90IHByb2dfcmVmX2xldmVsOwogICAgdWludDhfdCBkeW5fcm5nX3NnblsxN107CiAgICB1aW50 OF90IGR5bl9ybmdfY3RsWzE3XTsKICAgIHVpbnQ4X3QgZXhjbHVkZV9tYXNrWzY0XTsKICAgIHVp bnQ4X3QgYWRkaXRpb25hbF9leGNsdWRlZF9jaG5zWzY0XTsKCiAgICByZWFsX3QgY3RybDE7CiAg ICByZWFsX3QgY3RybDI7Cn0gZHJjX2luZm87Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICB1aW50OF90 IG1heF9zZmI7CgogICAgdWludDhfdCBudW1fc3diOwogICAgdWludDhfdCBudW1fd2luZG93X2dy b3VwczsKICAgIHVpbnQ4X3QgbnVtX3dpbmRvd3M7CiAgICB1aW50OF90IHdpbmRvd19zZXF1ZW5j ZTsKICAgIHVpbnQ4X3Qgd2luZG93X2dyb3VwX2xlbmd0aFs4XTsKICAgIHVpbnQ4X3Qgd2luZG93 X3NoYXBlOwogICAgdWludDhfdCBzY2FsZV9mYWN0b3JfZ3JvdXBpbmc7CiAgICB1aW50MTZfdCBz ZWN0X3NmYl9vZmZzZXRbOF1bMTUqOF07CiAgICB1aW50MTZfdCBzd2Jfb2Zmc2V0WzUyXTsKCiAg ICB1aW50OF90IHNlY3RfY2JbOF1bMTUqOF07CiAgICB1aW50MTZfdCBzZWN0X3N0YXJ0WzhdWzE1 KjhdOwogICAgdWludDE2X3Qgc2VjdF9lbmRbOF1bMTUqOF07CiAgICB1aW50OF90IHNmYl9jYls4 XVs4KjE1XTsKICAgIHVpbnQ4X3QgbnVtX3NlY1s4XTsKCiAgICB1aW50OF90IGdsb2JhbF9nYWlu OwogICAgdWludDE2X3Qgc2NhbGVfZmFjdG9yc1s4XVs1MV07CgogICAgdWludDhfdCBtc19tYXNr X3ByZXNlbnQ7CiAgICB1aW50OF90IG1zX3VzZWRbOF1bNTFdOwoKICAgIHVpbnQ4X3QgcHVsc2Vf ZGF0YV9wcmVzZW50OwogICAgdWludDhfdCB0bnNfZGF0YV9wcmVzZW50OwogICAgdWludDhfdCBn YWluX2NvbnRyb2xfZGF0YV9wcmVzZW50OwogICAgdWludDhfdCBwcmVkaWN0b3JfZGF0YV9wcmVz ZW50OwoKICAgIHB1bHNlX2luZm8gcHVsOwogICAgdG5zX2luZm8gdG5zOwogICAgcHJlZF9pbmZv IHByZWQ7CiAgICBsdHBfaW5mbyBsdHA7CiAgICBsdHBfaW5mbyBsdHAyOwoKCgogICAgdWludDE2 X3QgbGVuZ3RoX29mX3Jlb3JkZXJlZF9zcGVjdHJhbF9kYXRhOwogICAgdWludDhfdCBsZW5ndGhf b2ZfbG9uZ2VzdF9jb2Rld29yZDsKCn0gaWNfc3RyZWFtOwoKdHlwZWRlZiBzdHJ1Y3QKewogICAg dWludDhfdCBlbGVfaWQ7CgogICAgdWludDhfdCBjaGFubmVsOwogICAgdWludDhfdCBwYWlyZWRf Y2hhbm5lbDsKCiAgICB1aW50OF90IGVsZW1lbnRfaW5zdGFuY2VfdGFnOwogICAgdWludDhfdCBj b21tb25fd2luZG93OwoKICAgIGljX3N0cmVhbSBpY3MxOwogICAgaWNfc3RyZWFtIGljczI7Cn0g ZWxlbWVudDsKCgp1aW50OF90IEdBU3BlY2lmaWNDb25maWcoYml0ZmlsZSAqbGQsIHVpbnQ4X3Qg KmNoYW5uZWxDb25maWd1cmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBv YmplY3RfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFhY1NlY3Rpb25E YXRhUmVzaWxpZW5jZUZsYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphYWNT Y2FsZWZhY3RvckRhdGFSZXNpbGllbmNlRmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQ4X3QgKmFhY1NwZWN0cmFsRGF0YVJlc2lsaWVuY2VGbGFnLAogICAgICAgICAgICAgICAgICAg ICAgICAgdWludDhfdCAqZnJhbWVMZW5ndGhGbGFnKTsKdWludDhfdCByYXdfZGF0YV9ibG9jayhi aXRmaWxlICpsZCwgaW50MTZfdCAqKipzcGVjX2RhdGEsIHJlYWxfdCAqKipzcGVjX2NvZWYsCiAg ICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCAqKipzeW50YXhfZWxlbWVudHMsCiAgICAgICAg ICAgICAgICAgICAgICAgdWludDhfdCAqY2hhbm5lbHMsIHVpbnQ4X3QgKmVsZSwgdWludDhfdCAq Y2hfZWxlLAogICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGZyYW1lX2xlbiwgdWludDhf dCBzZl9pbmRleCwgdWludDhfdCBvYmplY3RfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICBk cmNfaW5mbyAqZHJjKTsKdWludDhfdCBzaW5nbGVfbGZlX2NoYW5uZWxfZWxlbWVudChlbGVtZW50 ICpzY2UsIGJpdGZpbGUgKmxkLCBpbnQxNl90ICpzcGVjX2RhdGEsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDhfdCBzZl9pbmRleCwgdWludDhfdCBvYmplY3RfdHlwZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBmcmFtZV9sZW4KCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLHVpbnQ4X3QgYWFjU2VjdGlvbkRhdGFS ZXNpbGllbmNlRmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90 IGFhY1NjYWxlZmFjdG9yRGF0YVJlc2lsaWVuY2VGbGFnLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVpbnQ4X3QgYWFjU3BlY3RyYWxEYXRhUmVzaWxpZW5jZUZsYWcKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKdWludDhfdCBjaGFubmVsX3BhaXJfZWxl bWVudChlbGVtZW50ICpjcGUsIGJpdGZpbGUgKmxkLCBpbnQxNl90ICpzcGVjX2RhdGExLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QgKnNwZWNfZGF0YTIsIHVpbnQ4X3Qgc2Zf aW5kZXgsIHVpbnQ4X3Qgb2JqZWN0X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDE2X3QgZnJhbWVfbGVuCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICx1aW50OF90 IGFhY1NlY3Rpb25EYXRhUmVzaWxpZW5jZUZsYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDhfdCBhYWNTY2FsZWZhY3RvckRhdGFSZXNpbGllbmNlRmxhZywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50OF90IGFhY1NwZWN0cmFsRGF0YVJlc2lsaWVuY2VGbGFnCgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CnVpbnQxNl90IGRhdGFfc3RyZWFtX2VsZW1l bnQoYml0ZmlsZSAqbGQpOwp1aW50OF90IHByb2dyYW1fY29uZmlnX2VsZW1lbnQocHJvZ3JhbV9j b25maWcgKnBjZSwgYml0ZmlsZSAqbGQpOwp1aW50OF90IGZpbGxfZWxlbWVudChiaXRmaWxlICps ZCwgZHJjX2luZm8gKmRyYwoKCgogICAgICAgICAgICAgICAgICAgICApOwp1aW50OF90IGFkdHNf ZnJhbWUoYWR0c19oZWFkZXIgKmFkdHMsIGJpdGZpbGUgKmxkKTsKdm9pZCBnZXRfYWRpZl9oZWFk ZXIoYWRpZl9oZWFkZXIgKmFkaWYsIGJpdGZpbGUgKmxkKTsKCgoKc3RhdGljIHVpbnQ4X3QgaW5k aXZpZHVhbF9jaGFubmVsX3N0cmVhbShlbGVtZW50ICplbGUsIGJpdGZpbGUgKmxkLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNfc3RyZWFtICppY3MsIHVpbnQ4X3Qgc2Nh bF9mbGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCAqc3Bl Y19kYXRhLCB1aW50OF90IHNmX2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDhfdCBvYmplY3RfdHlwZSwgdWludDE2X3QgZnJhbWVfbGVuCgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLHVpbnQ4X3QgYWFjU2VjdGlvbkRhdGFSZXNpbGll bmNlRmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWFj U2NhbGVmYWN0b3JEYXRhUmVzaWxpZW5jZUZsYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1aW50OF90IGFhY1NwZWN0cmFsRGF0YVJlc2lsaWVuY2VGbGFnCgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKc3RhdGljIHVpbnQ4X3QgaWNzX2luZm8o aWNfc3RyZWFtICppY3MsIGJpdGZpbGUgKmxkLCB1aW50OF90IGNvbW1vbl93aW5kb3csCiAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZnNfaW5kZXgsIHVpbnQ4X3Qgb2JqZWN0X3R5cGUs CiAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGZyYW1lX2xlbik7CnN0YXRpYyB2b2lk IHNlY3Rpb25fZGF0YShpY19zdHJlYW0gKmljcywgYml0ZmlsZSAqbGQKCiAgICAgICAgICAgICAg ICAgICAgICAgICAsdWludDhfdCBhYWNTZWN0aW9uRGF0YVJlc2lsaWVuY2VGbGFnCgogICAgICAg ICAgICAgICAgICAgICAgICAgKTsKc3RhdGljIHVpbnQ4X3Qgc2NhbGVfZmFjdG9yX2RhdGEoaWNf c3RyZWFtICppY3MsIGJpdGZpbGUgKmxkCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAsdWludDhfdCBhYWNTY2FsZWZhY3RvckRhdGFSZXNpbGllbmNlRmxhZwoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKc3RhdGljIHZvaWQgZ2Fpbl9jb250cm9sX2RhdGEoYml0 ZmlsZSAqbGQsIGljX3N0cmVhbSAqaWNzKTsKc3RhdGljIHVpbnQ4X3Qgc3BlY3RyYWxfZGF0YShp Y19zdHJlYW0gKmljcywgYml0ZmlsZSAqbGQsIGludDE2X3QgKnNwZWN0cmFsX2RhdGEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgZnJhbWVfbGVuKTsKc3RhdGljIHVpbnQx Nl90IGV4dGVuc2lvbl9wYXlsb2FkKGJpdGZpbGUgKmxkLCBkcmNfaW5mbyAqZHJjLCB1aW50MTZf dCBjb3VudCk7Cgp1aW50OF90IHJlb3JkZXJlZF9zcGVjdHJhbF9kYXRhKGljX3N0cmVhbSAqaWNz LCBiaXRmaWxlICpsZCwgaW50MTZfdCAqc3BlY3RyYWxfZGF0YSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1aW50MTZfdCBmcmFtZV9sZW4sIHVpbnQ4X3QgYWFjU2VjdGlvbkRhdGFS ZXNpbGllbmNlRmxhZyk7CgpzdGF0aWMgdm9pZCBwdWxzZV9kYXRhKHB1bHNlX2luZm8gKnB1bCwg Yml0ZmlsZSAqbGQpOwpzdGF0aWMgdm9pZCB0bnNfZGF0YShpY19zdHJlYW0gKmljcywgdG5zX2lu Zm8gKnRucywgYml0ZmlsZSAqbGQpOwpzdGF0aWMgdm9pZCBsdHBfZGF0YShpY19zdHJlYW0gKmlj cywgbHRwX2luZm8gKmx0cCwgYml0ZmlsZSAqbGQsCiAgICAgICAgICAgICAgICAgICAgIHVpbnQ4 X3Qgb2JqZWN0X3R5cGUpOwpzdGF0aWMgdWludDhfdCBhZHRzX2ZpeGVkX2hlYWRlcihhZHRzX2hl YWRlciAqYWR0cywgYml0ZmlsZSAqbGQpOwpzdGF0aWMgdm9pZCBhZHRzX3ZhcmlhYmxlX2hlYWRl cihhZHRzX2hlYWRlciAqYWR0cywgYml0ZmlsZSAqbGQpOwpzdGF0aWMgdm9pZCBhZHRzX2Vycm9y X2NoZWNrKGFkdHNfaGVhZGVyICphZHRzLCBiaXRmaWxlICpsZCk7CnN0YXRpYyB1aW50OF90IGR5 bmFtaWNfcmFuZ2VfaW5mbyhiaXRmaWxlICpsZCwgZHJjX2luZm8gKmRyYyk7CnN0YXRpYyB1aW50 OF90IGV4Y2x1ZGVkX2NoYW5uZWxzKGJpdGZpbGUgKmxkLCBkcmNfaW5mbyAqZHJjKTsKIyAzNCAi c3ludGF4LmMiIDIKIyAxICJzcGVjcmVjLmgiIDEKIyAzNyAic3BlY3JlYy5oIgp1aW50OF90IHdp bmRvd19ncm91cGluZ19pbmZvKGljX3N0cmVhbSAqaWNzLCB1aW50OF90IGZzX2luZGV4LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgb2JqZWN0X3R5cGUsIHVpbnQxNl90IGZy YW1lX2xlbik7CnZvaWQgcXVhbnRfdG9fc3BlYyhpY19zdHJlYW0gKmljcywgcmVhbF90ICpzcGVj X2RhdGEsIHVpbnQxNl90IGZyYW1lX2xlbik7CnZvaWQgYnVpbGRfdGFibGVzKHJlYWxfdCAqaXFf dGFibGUsIHJlYWxfdCAqcG93Ml90YWJsZSk7CnZvaWQgaW52ZXJzZV9xdWFudGl6YXRpb24ocmVh bF90ICp4X2ludnF1YW50LCBpbnQxNl90ICp4X3F1YW50LCByZWFsX3QgKmlxX3RhYmxlLAogICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGZyYW1lX2xlbik7CnZvaWQgYXBwbHlfc2Nh bGVmYWN0b3JzKGljX3N0cmVhbSAqaWNzLCByZWFsX3QgKnhfaW52cXVhbnQsIHJlYWxfdCAqcG93 Ml90YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgZnJhbWVfbGVuKTsKIyAz NSAic3ludGF4LmMiIDIKIyAxICJodWZmbWFuLmgiIDEKIyAzNCAiaHVmZm1hbi5oIgojIDEgImNv ZGVib29rL2hjYi5oIiAxCiMgNzQgImNvZGVib29rL2hjYi5oIgp0eXBlZGVmIHN0cnVjdAp7CiAg ICB1aW50OF90IG9mZnNldDsKICAgIHVpbnQ4X3QgZXh0cmFfYml0czsKfSBoY2I7CgoKdHlwZWRl ZiBzdHJ1Y3QKewogICAgdWludDhfdCBiaXRzOwogICAgaW50OF90IHg7CiAgICBpbnQ4X3QgeTsK fSBoY2JfMl9wYWlyOwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgdWludDhfdCBiaXRzOwogICAgaW50 OF90IHg7CiAgICBpbnQ4X3QgeTsKICAgIGludDhfdCB2OwogICAgaW50OF90IHc7Cn0gaGNiXzJf cXVhZDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICB1aW50OF90IGlzX2xlYWY7CiAgICBpbnQ4X3Qg ZGF0YVs0XTsKfSBoY2JfYmluX3F1YWQ7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICB1aW50OF90IGlz X2xlYWY7CiAgICBpbnQ4X3QgZGF0YVsyXTsKfSBoY2JfYmluX3BhaXI7CgpleHRlcm4gaGNiIGhj YjFfMVtdOwpleHRlcm4gaGNiIGhjYjJfMVtdOwpleHRlcm4gaGNiIGhjYjRfMVtdOwpleHRlcm4g aGNiIGhjYjZfMVtdOwpleHRlcm4gaGNiIGhjYjhfMVtdOwpleHRlcm4gaGNiIGhjYjEwXzFbXTsK ZXh0ZXJuIGhjYiBoY2IxMV8xW107CgpleHRlcm4gaGNiXzJfcXVhZCBoY2IxXzJbXTsKZXh0ZXJu IGhjYl8yX3F1YWQgaGNiMl8yW107CmV4dGVybiBoY2JfMl9xdWFkIGhjYjRfMltdOwpleHRlcm4g aGNiXzJfcGFpciBoY2I2XzJbXTsKZXh0ZXJuIGhjYl8yX3BhaXIgaGNiOF8yW107CmV4dGVybiBo Y2JfMl9wYWlyIGhjYjEwXzJbXTsKZXh0ZXJuIGhjYl8yX3BhaXIgaGNiMTFfMltdOwoKZXh0ZXJu IGhjYl9iaW5fcXVhZCBoY2IzW107CmV4dGVybiBoY2JfYmluX3BhaXIgaGNiNVtdOwpleHRlcm4g aGNiX2Jpbl9wYWlyIGhjYjdbXTsKZXh0ZXJuIGhjYl9iaW5fcGFpciBoY2I5W107CgpleHRlcm4g dWludDhfdCBoY2Jfc2ZbXVsyXTsKIyAzNSAiaHVmZm1hbi5oIiAyCgoKc3RhdGljIGludDhfdCBo dWZmbWFuX3NjYWxlX2ZhY3RvcihiaXRmaWxlICpsZCkKewogICAgdWludDE2X3Qgb2Zmc2V0ID0g MDsKCiAgICB3aGlsZSAoaGNiX3NmW29mZnNldF1bMV0pCiAgICB7CiAgICAgICAgdWludDhfdCBi ID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAgICAgICk7CiAgICAgICAgb2Zmc2V0ICs9IGhjYl9z ZltvZmZzZXRdW2JdOwoKICAgICAgICBpZiAob2Zmc2V0ID4gMjQwKQogICAgICAgIHsKCiAgICAg ICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGhjYl9zZltvZmZz ZXRdWzBdOwp9CgoKc3RhdGljIGhjYiAqaGNiX3RhYmxlW10gPSB7CiAgICAwLCBoY2IxXzEsIGhj YjJfMSwgMCwgaGNiNF8xLCAwLCBoY2I2XzEsIDAsIGhjYjhfMSwgMCwgaGNiMTBfMSwgaGNiMTFf MQp9OwoKc3RhdGljIGhjYl8yX3F1YWQgKmhjYl8yX3F1YWRfdGFibGVbXSA9IHsKICAgIDAsIGhj YjFfMiwgaGNiMl8yLCAwLCBoY2I0XzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAKfTsKCnN0YXRpYyBo Y2JfMl9wYWlyICpoY2JfMl9wYWlyX3RhYmxlW10gPSB7CiAgICAwLCAwLCAwLCAwLCAwLCAwLCBo Y2I2XzIsIDAsIGhjYjhfMiwgMCwgaGNiMTBfMiwgaGNiMTFfMgp9OwoKc3RhdGljIGhjYl9iaW5f cGFpciAqaGNiX2Jpbl90YWJsZVtdID0gewogICAgMCwgMCwgMCwgMCwgMCwgaGNiNSwgMCwgaGNi NywgMCwgaGNiOSwgMCwgMAp9OwoKc3RhdGljIHVpbnQ4X3QgaGNiTltdID0geyAwLCA1LCA1LCAw LCA1LCAwLCA1LCAwLCA1LCAwLCA2LCA1IH07CgpzdGF0aWMgaW50IGhjYl8yX3F1YWRfdGFibGVf c2l6ZVtdID0geyAwLCAxMTQsIDg2LCAwLCAxODUsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKc3Rh dGljIGludCBoY2JfMl9wYWlyX3RhYmxlX3NpemVbXSA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMTI2 LCAwLCA4MywgMCwgMjEwLCAzNzMgfTsKc3RhdGljIGludCBoY2JfYmluX3RhYmxlX3NpemVbXSA9 IHsgMCwgMCwgMCwgMTYxLCAwLCAxNjEsIDAsIDEyNywgMCwgMzM3LCAwLCAwIH07CgpzdGF0aWMg dWludDhfdCBodWZmbWFuX3NwZWN0cmFsX2RhdGEodWludDhfdCBjYiwgYml0ZmlsZSAqbGQsIGlu dDE2X3QgKnNwKQp7CiAgICB1aW50MzJfdCBjdzsKICAgIHVpbnQxNl90IG9mZnNldCA9IDA7CiAg ICB1aW50OF90IGV4dHJhX2JpdHM7CgogICAgc3dpdGNoIChjYikKICAgIHsKICAgIGNhc2UgMToK ICAgIGNhc2UgMjoKICAgIGNhc2UgNDoKCiAgICAgICAgY3cgPSBmYWFkX3Nob3diaXRzKGxkLCBo Y2JOW2NiXSk7CiAgICAgICAgb2Zmc2V0ID0gaGNiX3RhYmxlW2NiXVtjd10ub2Zmc2V0OwogICAg ICAgIGV4dHJhX2JpdHMgPSBoY2JfdGFibGVbY2JdW2N3XS5leHRyYV9iaXRzOwoKICAgICAgICBp ZiAoZXh0cmFfYml0cykKICAgICAgICB7CgogICAgICAgICAgICBmYWFkX2ZsdXNoYml0cyhsZCwg aGNiTltjYl0pOwogICAgICAgICAgICBvZmZzZXQgKz0gKHVpbnQxNl90KWZhYWRfc2hvd2JpdHMo bGQsIGV4dHJhX2JpdHMpOwogICAgICAgICAgICBmYWFkX2ZsdXNoYml0cyhsZCwgaGNiXzJfcXVh ZF90YWJsZVtjYl1bb2Zmc2V0XS5iaXRzIC0gaGNiTltjYl0pOwogICAgICAgIH0gZWxzZSB7CiAg ICAgICAgICAgIGZhYWRfZmx1c2hiaXRzKGxkLCBoY2JfMl9xdWFkX3RhYmxlW2NiXVtvZmZzZXRd LmJpdHMpOwogICAgICAgIH0KCiAgICAgICAgaWYgKG9mZnNldCA+IGhjYl8yX3F1YWRfdGFibGVf c2l6ZVtjYl0pCiAgICAgICAgewoKCiAgICAgICAgICAgIHJldHVybiAxMDsKICAgICAgICB9Cgog ICAgICAgIHNwWzBdID0gaGNiXzJfcXVhZF90YWJsZVtjYl1bb2Zmc2V0XS54OwogICAgICAgIHNw WzFdID0gaGNiXzJfcXVhZF90YWJsZVtjYl1bb2Zmc2V0XS55OwogICAgICAgIHNwWzJdID0gaGNi XzJfcXVhZF90YWJsZVtjYl1bb2Zmc2V0XS52OwogICAgICAgIHNwWzNdID0gaGNiXzJfcXVhZF90 YWJsZVtjYl1bb2Zmc2V0XS53OwoKICAgICAgICByZXR1cm4gMDsKCiAgICBjYXNlIDY6CiAgICBj YXNlIDg6CiAgICBjYXNlIDEwOgogICAgY2FzZSAxMToKCgogICAgY2FzZSAxNjogY2FzZSAxNzog Y2FzZSAxODogY2FzZSAxOTogY2FzZSAyMDogY2FzZSAyMTogY2FzZSAyMjogY2FzZSAyMzoKICAg IGNhc2UgMjQ6IGNhc2UgMjU6IGNhc2UgMjY6IGNhc2UgMjc6IGNhc2UgMjg6IGNhc2UgMjk6IGNh c2UgMzA6IGNhc2UgMzE6CgoKICAgICAgICBpZiAoY2IgPj0gMTYpCiAgICAgICAgICAgIGNiID0g MTE7CgogICAgICAgIGN3ID0gZmFhZF9zaG93Yml0cyhsZCwgaGNiTltjYl0pOwogICAgICAgIG9m ZnNldCA9IGhjYl90YWJsZVtjYl1bY3ddLm9mZnNldDsKICAgICAgICBleHRyYV9iaXRzID0gaGNi X3RhYmxlW2NiXVtjd10uZXh0cmFfYml0czsKCiAgICAgICAgaWYgKGV4dHJhX2JpdHMpCiAgICAg ICAgewoKICAgICAgICAgICAgZmFhZF9mbHVzaGJpdHMobGQsIGhjYk5bY2JdKTsKICAgICAgICAg ICAgb2Zmc2V0ICs9ICh1aW50MTZfdClmYWFkX3Nob3diaXRzKGxkLCBleHRyYV9iaXRzKTsKICAg ICAgICAgICAgZmFhZF9mbHVzaGJpdHMobGQsIGhjYl8yX3BhaXJfdGFibGVbY2JdW29mZnNldF0u Yml0cyAtIGhjYk5bY2JdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmYWFkX2ZsdXNo Yml0cyhsZCwgaGNiXzJfcGFpcl90YWJsZVtjYl1bb2Zmc2V0XS5iaXRzKTsKICAgICAgICB9Cgog ICAgICAgIGlmIChvZmZzZXQgPiBoY2JfMl9wYWlyX3RhYmxlX3NpemVbY2JdKQogICAgICAgIHsK CgogICAgICAgICAgICByZXR1cm4gMTA7CiAgICAgICAgfQoKICAgICAgICBzcFswXSA9IGhjYl8y X3BhaXJfdGFibGVbY2JdW29mZnNldF0ueDsKICAgICAgICBzcFsxXSA9IGhjYl8yX3BhaXJfdGFi bGVbY2JdW29mZnNldF0ueTsKCiAgICAgICAgcmV0dXJuIDA7CgogICAgY2FzZSAzOgoKICAgICAg ICB3aGlsZSAoIWhjYjNbb2Zmc2V0XS5pc19sZWFmKQogICAgICAgIHsKICAgICAgICAgICAgdWlu dDhfdCBiID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICBv ZmZzZXQgKz0gaGNiM1tvZmZzZXRdLmRhdGFbYl07CiAgICAgICAgfQoKICAgICAgICBpZiAob2Zm c2V0ID4gaGNiX2Jpbl90YWJsZV9zaXplW2NiXSkKICAgICAgICB7CgoKICAgICAgICAgICAgcmV0 dXJuIDEwOwogICAgICAgIH0KCiAgICAgICAgc3BbMF0gPSBoY2IzW29mZnNldF0uZGF0YVswXTsK ICAgICAgICBzcFsxXSA9IGhjYjNbb2Zmc2V0XS5kYXRhWzFdOwogICAgICAgIHNwWzJdID0gaGNi M1tvZmZzZXRdLmRhdGFbMl07CiAgICAgICAgc3BbM10gPSBoY2IzW29mZnNldF0uZGF0YVszXTsK CiAgICAgICAgcmV0dXJuIDA7CgogICAgY2FzZSA1OgogICAgY2FzZSA3OgogICAgY2FzZSA5OgoK ICAgICAgICB3aGlsZSAoIWhjYl9iaW5fdGFibGVbY2JdW29mZnNldF0uaXNfbGVhZikKICAgICAg ICB7CiAgICAgICAgICAgIHVpbnQ4X3QgYiA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICAgICAg ICAgKTsKICAgICAgICAgICAgb2Zmc2V0ICs9IGhjYl9iaW5fdGFibGVbY2JdW29mZnNldF0uZGF0 YVtiXTsKICAgICAgICB9CgogICAgICAgIGlmIChvZmZzZXQgPiBoY2JfYmluX3RhYmxlX3NpemVb Y2JdKQogICAgICAgIHsKCgogICAgICAgICAgICByZXR1cm4gMTA7CiAgICAgICAgfQoKICAgICAg ICBzcFswXSA9IGhjYl9iaW5fdGFibGVbY2JdW29mZnNldF0uZGF0YVswXTsKICAgICAgICBzcFsx XSA9IGhjYl9iaW5fdGFibGVbY2JdW29mZnNldF0uZGF0YVsxXTsKCiAgICAgICAgcmV0dXJuIDA7 CgogICAgZGVmYXVsdDoKCiAgICAgICAgcmV0dXJuIDExOwogICAgfQoKICAgIHJldHVybiAwOwp9 CgpzdGF0aWMgdm9pZCBodWZmbWFuX3NpZ25fYml0cyhiaXRmaWxlICpsZCwgaW50MTZfdCAqc3As IHVpbnQ4X3QgbGVuKQp7CiAgICB1aW50OF90IGk7CgogICAgZm9yKGkgPSAwOyBpIDwgbGVuOyBp KyspCiAgICB7CiAgICAgICAgaWYoc3BbaV0pCiAgICAgICAgewogICAgICAgICAgICBpZihmYWFk X2dldDFiaXQobGQKICAgICAgICAgICAgICAgICkgJiAxKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICBzcFtpXSA9IC1zcFtpXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoK c3RhdGljIGludDMyX3QgaHVmZm1hbl9nZXRlc2NhcGUoYml0ZmlsZSAqbGQsIGludDE2X3Qgc3Ap CnsKICAgIHVpbnQ4X3QgbmVnLCBpOwogICAgaW50MzJfdCBqLCBvZmY7CgogICAgaWYgKHNwIDwg MCkgewogICAgICAgIGlmKHNwICE9IC0xNikKICAgICAgICAgICAgcmV0dXJuIHNwOwogICAgICAg IG5lZyA9IDE7CiAgICB9IGVsc2UgewogICAgICAgIGlmKHNwICE9IDE2KQogICAgICAgICAgICBy ZXR1cm4gc3A7CiAgICAgICAgbmVnID0gMDsKICAgIH0KCiAgICBmb3IgKGkgPSA0OyA7IGkrKykK ICAgIHsKICAgICAgICBpZiAoZmFhZF9nZXQxYml0KGxkCiAgICAgICAgICAgICkgPT0gMCkKICAg ICAgICB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KIyAyNjMgImh1ZmZtYW4u aCIKICAgICAgICBvZmYgPSBmYWFkX2dldGJpdHMobGQsIGkKICAgICAgICAgICAgKTsKCgoKCiAg ICBqID0gb2ZmICsgKDE8PGkpOwogICAgaWYgKG5lZykKICAgICAgICBqID0gLWo7CgogICAgcmV0 dXJuIGo7Cn0KIyAzNiAic3ludGF4LmMiIDIKCiMgMSAiZGF0YS5oIiAxCiMgMjkgImRhdGEuaCIK ZXh0ZXJuIHVpbnQ4X3QgbnVtX3N3Yl8xMDI0X3dpbmRvd1tdOwoKZXh0ZXJuIHVpbnQ4X3QgbnVt X3N3Yl81MTJfd2luZG93W107CgpleHRlcm4gdWludDhfdCBudW1fc3diXzEyOF93aW5kb3dbXTsK ZXh0ZXJuIHVpbnQxNl90ICpzd2Jfb2Zmc2V0XzEwMjRfd2luZG93W107CgpleHRlcm4gdWludDE2 X3QgKnN3Yl9vZmZzZXRfNTEyX3dpbmRvd1tdOwoKZXh0ZXJuIHVpbnQxNl90ICpzd2Jfb2Zmc2V0 XzEyOF93aW5kb3dbXTsKZXh0ZXJuIHVpbnQ4X3QgcHJlZF9zZmJfbWF4W107CmV4dGVybiB1aW50 MzJfdCBzYW1wbGVfcmF0ZXNbXTsKIyAzOCAic3ludGF4LmMiIDIKIyAxICJwdWxzZS5oIiAxCiMg MjkgInB1bHNlLmgiCnZvaWQgcHVsc2VfZGVjb2RlKGljX3N0cmVhbSAqaWNzLCBpbnQxNl90ICpz cGVjX2NvZWYpOwojIDM5ICJzeW50YXguYyIgMgoKCgoKCgoKdWludDhfdCBHQVNwZWNpZmljQ29u ZmlnKGJpdGZpbGUgKmxkLCB1aW50OF90ICpjaGFubmVsQ29uZmlndXJhdGlvbiwKICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQ4X3Qgb2JqZWN0X3R5cGUsCiAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50OF90ICphYWNTZWN0aW9uRGF0YVJlc2lsaWVuY2VGbGFnLAogICAgICAgICAgICAg ICAgICAgICAgICAgdWludDhfdCAqYWFjU2NhbGVmYWN0b3JEYXRhUmVzaWxpZW5jZUZsYWcsCiAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphYWNTcGVjdHJhbERhdGFSZXNpbGllbmNl RmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmZyYW1lTGVuZ3RoRmxhZykK ewogICAgdWludDhfdCBkZXBlbmRzT25Db3JlQ29kZXIsIGV4dGVuc2lvbkZsYWc7CiAgICB1aW50 MTZfdCBjb3JlQ29kZXJEZWxheTsKICAgIHByb2dyYW1fY29uZmlnIHBjZTsKCgogICAgKmZyYW1l TGVuZ3RoRmxhZyA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICk7CgogICAgZGVwZW5kc09uQ29y ZUNvZGVyID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAgKTsKICAgIGlmIChkZXBlbmRzT25Db3Jl Q29kZXIgPT0gMSkKICAgIHsKICAgICAgICBjb3JlQ29kZXJEZWxheSA9ICh1aW50MTZfdClmYWFk X2dldGJpdHMobGQsIDE0CiAgICAgICAgICAgICk7CiAgICB9CgogICAgZXh0ZW5zaW9uRmxhZyA9 IGZhYWRfZ2V0MWJpdChsZCApOwogICAgaWYgKCpjaGFubmVsQ29uZmlndXJhdGlvbiA9PSAwKQog ICAgewogICAgICAgIHByb2dyYW1fY29uZmlnX2VsZW1lbnQoJnBjZSwgbGQpOwogICAgICAgICpj aGFubmVsQ29uZmlndXJhdGlvbiA9IHBjZS5jaGFubmVsczsKCiAgICAgICAgaWYgKHBjZS5udW1f dmFsaWRfY2NfZWxlbWVudHMpCiAgICAgICAgICAgIHJldHVybiAtMzsKICAgIH0KCiAgICBpZiAo ZXh0ZW5zaW9uRmxhZyA9PSAxKQogICAgewoKICAgICAgICBpZiAob2JqZWN0X3R5cGUgPj0gMTcp CiAgICAgICAgewogICAgICAgICAgICAqYWFjU2VjdGlvbkRhdGFSZXNpbGllbmNlRmxhZyA9IGZh YWRfZ2V0MWJpdChsZAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgKmFhY1NjYWxlZmFj dG9yRGF0YVJlc2lsaWVuY2VGbGFnID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAgICAgICAgICAp OwogICAgICAgICAgICAqYWFjU3BlY3RyYWxEYXRhUmVzaWxpZW5jZUZsYWcgPSBmYWFkX2dldDFi aXQobGQKICAgICAgICAgICAgICAgICk7CgoKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7 Cn0KIyAxMDUgInN5bnRheC5jIgp1aW50OF90IHByb2dyYW1fY29uZmlnX2VsZW1lbnQocHJvZ3Jh bV9jb25maWcgKnBjZSwgYml0ZmlsZSAqbGQpCnsKICAgIHVpbnQ4X3QgaTsKCiAgICBwY2UtPmNo YW5uZWxzID0gMDsKCiAgICBwY2UtPmVsZW1lbnRfaW5zdGFuY2VfdGFnID0gKHVpbnQ4X3QpZmFh ZF9nZXRiaXRzKGxkLCA0CiAgICAgICAgKTsKCiAgICBwY2UtPm9iamVjdF90eXBlID0gKHVpbnQ4 X3QpZmFhZF9nZXRiaXRzKGxkLCAyCiAgICAgICAgKTsKICAgIHBjZS0+c2ZfaW5kZXggPSAodWlu dDhfdClmYWFkX2dldGJpdHMobGQsIDQKICAgICAgICApOwogICAgcGNlLT5udW1fZnJvbnRfY2hh bm5lbF9lbGVtZW50cyA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgNAogICAgICAgICk7CiAg ICBwY2UtPm51bV9zaWRlX2NoYW5uZWxfZWxlbWVudHMgPSAodWludDhfdClmYWFkX2dldGJpdHMo bGQsIDQKICAgICAgICApOwogICAgcGNlLT5udW1fYmFja19jaGFubmVsX2VsZW1lbnRzID0gKHVp bnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCA0CiAgICAgICAgKTsKICAgIHBjZS0+bnVtX2xmZV9jaGFu bmVsX2VsZW1lbnRzID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCAyCiAgICAgICAgKTsKICAg IHBjZS0+bnVtX2Fzc29jX2RhdGFfZWxlbWVudHMgPSAodWludDhfdClmYWFkX2dldGJpdHMobGQs IDMKICAgICAgICApOwogICAgcGNlLT5udW1fdmFsaWRfY2NfZWxlbWVudHMgPSAodWludDhfdClm YWFkX2dldGJpdHMobGQsIDQKICAgICAgICApOwoKICAgIHBjZS0+bW9ub19taXhkb3duX3ByZXNl bnQgPSBmYWFkX2dldDFiaXQobGQKICAgICAgICApOwogICAgaWYgKHBjZS0+bW9ub19taXhkb3du X3ByZXNlbnQgPT0gMSkKICAgIHsKICAgICAgICBwY2UtPm1vbm9fbWl4ZG93bl9lbGVtZW50X251 bWJlciA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgNAogICAgICAgICAgICApOwogICAgfQoK ICAgIHBjZS0+c3RlcmVvX21peGRvd25fcHJlc2VudCA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAg ICk7CiAgICBpZiAocGNlLT5zdGVyZW9fbWl4ZG93bl9wcmVzZW50ID09IDEpCiAgICB7CiAgICAg ICAgcGNlLT5zdGVyZW9fbWl4ZG93bl9lbGVtZW50X251bWJlciA9ICh1aW50OF90KWZhYWRfZ2V0 Yml0cyhsZCwgNAogICAgICAgICAgICApOwogICAgfQoKICAgIHBjZS0+bWF0cml4X21peGRvd25f aWR4X3ByZXNlbnQgPSBmYWFkX2dldDFiaXQobGQKICAgICAgICApOwogICAgaWYgKHBjZS0+bWF0 cml4X21peGRvd25faWR4X3ByZXNlbnQgPT0gMSkKICAgIHsKICAgICAgICBwY2UtPm1hdHJpeF9t aXhkb3duX2lkeCA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgMgogICAgICAgICAgICApOwog ICAgICAgIHBjZS0+cHNldWRvX3N1cnJvdW5kX2VuYWJsZSA9IGZhYWRfZ2V0MWJpdChsZAogICAg ICAgICAgICApOwogICAgfQoKICAgIGZvciAoaSA9IDA7IGkgPCBwY2UtPm51bV9mcm9udF9jaGFu bmVsX2VsZW1lbnRzOyBpKyspCiAgICB7CiAgICAgICAgaWYgKChwY2UtPmZyb250X2VsZW1lbnRf aXNfY3BlW2ldID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAgICAgICkpICYgMSkKICAgICAgICB7 CiAgICAgICAgICAgIHBjZS0+Y2hhbm5lbHMgKz0gMjsKICAgICAgICB9IGVsc2UgewogICAgICAg ICAgICBwY2UtPmNoYW5uZWxzKys7CiAgICAgICAgfQogICAgICAgIHBjZS0+ZnJvbnRfZWxlbWVu dF90YWdfc2VsZWN0W2ldID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCA0CiAgICAgICAgICAg ICk7CiAgICB9CgogICAgZm9yIChpID0gMDsgaSA8IHBjZS0+bnVtX3NpZGVfY2hhbm5lbF9lbGVt ZW50czsgaSsrKQogICAgewogICAgICAgIGlmICgocGNlLT5zaWRlX2VsZW1lbnRfaXNfY3BlW2ld ID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAgICAgICkpICYgMSkKICAgICAgICB7CiAgICAgICAg ICAgIHBjZS0+Y2hhbm5lbHMgKz0gMjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwY2Ut PmNoYW5uZWxzKys7CiAgICAgICAgfQogICAgICAgIHBjZS0+c2lkZV9lbGVtZW50X3RhZ19zZWxl Y3RbaV0gPSAodWludDhfdClmYWFkX2dldGJpdHMobGQsIDQKICAgICAgICAgICAgKTsKICAgIH0K CiAgICBmb3IgKGkgPSAwOyBpIDwgcGNlLT5udW1fYmFja19jaGFubmVsX2VsZW1lbnRzOyBpKysp CiAgICB7CiAgICAgICAgaWYgKChwY2UtPmJhY2tfZWxlbWVudF9pc19jcGVbaV0gPSBmYWFkX2dl dDFiaXQobGQKICAgICAgICAgICAgKSkgJiAxKQogICAgICAgIHsKICAgICAgICAgICAgcGNlLT5j aGFubmVscyArPSAyOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBjZS0+Y2hhbm5lbHMr KzsKICAgICAgICB9CiAgICAgICAgcGNlLT5iYWNrX2VsZW1lbnRfdGFnX3NlbGVjdFtpXSA9ICh1 aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgNAogICAgICAgICAgICApOwogICAgfQoKICAgIGZvciAo aSA9IDA7IGkgPCBwY2UtPm51bV9sZmVfY2hhbm5lbF9lbGVtZW50czsgaSsrKQogICAgewogICAg ICAgIHBjZS0+Y2hhbm5lbHMrKzsKICAgICAgICBwY2UtPmxmZV9lbGVtZW50X3RhZ19zZWxlY3Rb aV0gPSAodWludDhfdClmYWFkX2dldGJpdHMobGQsIDQKICAgICAgICAgICAgKTsKICAgIH0KCiAg ICBmb3IgKGkgPSAwOyBpIDwgcGNlLT5udW1fYXNzb2NfZGF0YV9lbGVtZW50czsgaSsrKQogICAg ICAgIHBjZS0+YXNzb2NfZGF0YV9lbGVtZW50X3RhZ19zZWxlY3RbaV0gPSAodWludDhfdClmYWFk X2dldGJpdHMobGQsIDQKICAgICAgICApOwoKICAgIGZvciAoaSA9IDA7IGkgPCBwY2UtPm51bV92 YWxpZF9jY19lbGVtZW50czsgaSsrKQogICAgewoKICAgICAgICBwY2UtPmNoYW5uZWxzICs9IDI7 CgogICAgICAgIHBjZS0+Y2NfZWxlbWVudF9pc19pbmRfc3dbaV0gPSBmYWFkX2dldDFiaXQobGQK ICAgICAgICAgICAgKTsKICAgICAgICBwY2UtPnZhbGlkX2NjX2VsZW1lbnRfdGFnX3NlbGVjdFtp XSA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgNAogICAgICAgICAgICApOwogICAgfQoKICAg IGZhYWRfYnl0ZV9hbGlnbihsZCk7CgogICAgcGNlLT5jb21tZW50X2ZpZWxkX2J5dGVzID0gKHVp bnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCA4CiAgICAgICAgKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwg cGNlLT5jb21tZW50X2ZpZWxkX2J5dGVzOyBpKyspCiAgICB7CiAgICAgICAgcGNlLT5jb21tZW50 X2ZpZWxkX2RhdGFbaV0gPSAodWludDhfdClmYWFkX2dldGJpdHMobGQsIDgKICAgICAgICAgICAg KTsKICAgIH0KICAgIHBjZS0+Y29tbWVudF9maWVsZF9kYXRhW2ldID0gMDsKCiAgICByZXR1cm4g MDsKfQoKCgp1aW50OF90IHNpbmdsZV9sZmVfY2hhbm5lbF9lbGVtZW50KGVsZW1lbnQgKnNjZSwg Yml0ZmlsZSAqbGQsIGludDE2X3QgKnNwZWNfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1aW50OF90IHNmX2luZGV4LCB1aW50OF90IG9iamVjdF90eXBlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGZyYW1lX2xlbgoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAsdWludDhfdCBhYWNTZWN0aW9uRGF0YVJlc2lsaWVu Y2VGbGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWFjU2Nh bGVmYWN0b3JEYXRhUmVzaWxpZW5jZUZsYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDhfdCBhYWNTcGVjdHJhbERhdGFSZXNpbGllbmNlRmxhZwoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApCnsKICAgIGljX3N0cmVhbSAqaWNzID0gJihzY2UtPmlj czEpOwoKCgoKICAgIHNjZS0+ZWxlbWVudF9pbnN0YW5jZV90YWcgPSAodWludDhfdClmYWFkX2dl dGJpdHMobGQsIDQKICAgICAgICApOwoKICAgIHJldHVybiBpbmRpdmlkdWFsX2NoYW5uZWxfc3Ry ZWFtKHNjZSwgbGQsIGljcywgMCwgc3BlY19kYXRhLCBzZl9pbmRleCwKICAgICAgICBvYmplY3Rf dHlwZSwgZnJhbWVfbGVuCgogICAgICAgICxhYWNTZWN0aW9uRGF0YVJlc2lsaWVuY2VGbGFnLAog ICAgICAgIGFhY1NjYWxlZmFjdG9yRGF0YVJlc2lsaWVuY2VGbGFnLAogICAgICAgIGFhY1NwZWN0 cmFsRGF0YVJlc2lsaWVuY2VGbGFnCgogICAgICAgICk7Cn0KCgp1aW50OF90IGNoYW5uZWxfcGFp cl9lbGVtZW50KGVsZW1lbnQgKmNwZSwgYml0ZmlsZSAqbGQsIGludDE2X3QgKnNwZWNfZGF0YTEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCAqc3BlY19kYXRhMiwgdWludDhf dCBzZl9pbmRleCwgdWludDhfdCBvYmplY3RfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50MTZfdCBmcmFtZV9sZW4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLHVp bnQ4X3QgYWFjU2VjdGlvbkRhdGFSZXNpbGllbmNlRmxhZywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50OF90IGFhY1NjYWxlZmFjdG9yRGF0YVJlc2lsaWVuY2VGbGFnLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWFjU3BlY3RyYWxEYXRhUmVzaWxpZW5jZUZs YWcKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQp7CiAgICB1aW50OF90IHJlc3VsdDsK ICAgIGljX3N0cmVhbSAqaWNzMSA9ICYoY3BlLT5pY3MxKTsKICAgIGljX3N0cmVhbSAqaWNzMiA9 ICYoY3BlLT5pY3MyKTsKCgoKCiAgICBjcGUtPmVsZW1lbnRfaW5zdGFuY2VfdGFnID0gKHVpbnQ4 X3QpZmFhZF9nZXRiaXRzKGxkLCA0CiAgICAgICAgKTsKCiAgICBpZiAoKGNwZS0+Y29tbW9uX3dp bmRvdyA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICkpICYgMSkKICAgIHsKCiAgICAgICAgaWYg KChyZXN1bHQgPSBpY3NfaW5mbyhpY3MxLCBsZCwgY3BlLT5jb21tb25fd2luZG93LCBzZl9pbmRl eCwKICAgICAgICAgICAgb2JqZWN0X3R5cGUsIGZyYW1lX2xlbikpID4gMCkKICAgICAgICAgICAg cmV0dXJuIHJlc3VsdDsKCiAgICAgICAgaWNzMS0+bXNfbWFza19wcmVzZW50ID0gKHVpbnQ4X3Qp ZmFhZF9nZXRiaXRzKGxkLCAyCiAgICAgICAgICAgICk7CiAgICAgICAgaWYgKGljczEtPm1zX21h c2tfcHJlc2VudCA9PSAxKQogICAgICAgIHsKICAgICAgICAgICAgdWludDhfdCBnLCBzZmI7CiAg ICAgICAgICAgIGZvciAoZyA9IDA7IGcgPCBpY3MxLT5udW1fd2luZG93X2dyb3VwczsgZysrKQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKHNmYiA9IDA7IHNmYiA8IGljczEtPm1h eF9zZmI7IHNmYisrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljczEt Pm1zX3VzZWRbZ11bc2ZiXSA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICAgICAgICAgICAgICAg ICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBt ZW1jcHkoaWNzMiwgaWNzMSwgc2l6ZW9mKGljX3N0cmVhbSkpOwogICAgfSBlbHNlIHsKICAgICAg ICBpY3MxLT5tc19tYXNrX3ByZXNlbnQgPSAwOwogICAgfQoKICAgIGlmICgocmVzdWx0ID0gaW5k aXZpZHVhbF9jaGFubmVsX3N0cmVhbShjcGUsIGxkLCBpY3MxLCAwLCBzcGVjX2RhdGExLAogICAg ICAgIHNmX2luZGV4LCBvYmplY3RfdHlwZSwgZnJhbWVfbGVuCgogICAgICAgICxhYWNTZWN0aW9u RGF0YVJlc2lsaWVuY2VGbGFnLAogICAgICAgIGFhY1NjYWxlZmFjdG9yRGF0YVJlc2lsaWVuY2VG bGFnLAogICAgICAgIGFhY1NwZWN0cmFsRGF0YVJlc2lsaWVuY2VGbGFnCgogICAgICAgICkpID4g MCkKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgaWYgKChyZXN1bHQgPSBpbmRpdmlkdWFsX2No YW5uZWxfc3RyZWFtKGNwZSwgbGQsIGljczIsIDAsIHNwZWNfZGF0YTIsCiAgICAgICAgc2ZfaW5k ZXgsIG9iamVjdF90eXBlLCBmcmFtZV9sZW4KCiAgICAgICAgLGFhY1NlY3Rpb25EYXRhUmVzaWxp ZW5jZUZsYWcsCiAgICAgICAgYWFjU2NhbGVmYWN0b3JEYXRhUmVzaWxpZW5jZUZsYWcsCiAgICAg ICAgYWFjU3BlY3RyYWxEYXRhUmVzaWxpZW5jZUZsYWcKCiAgICAgICAgKSkgPiAwKQogICAgICAg IHJldHVybiByZXN1bHQ7CgogICAgcmV0dXJuIDA7Cn0KCgpzdGF0aWMgdWludDhfdCBpY3NfaW5m byhpY19zdHJlYW0gKmljcywgYml0ZmlsZSAqbGQsIHVpbnQ4X3QgY29tbW9uX3dpbmRvdywKICAg ICAgICAgICAgICAgICAgICB1aW50OF90IHNmX2luZGV4LCB1aW50OF90IG9iamVjdF90eXBlLCB1 aW50MTZfdCBmcmFtZV9sZW4pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZh YWRfZ2V0MWJpdChsZAogICAgICAgICk7CiAgICBpY3MtPndpbmRvd19zZXF1ZW5jZSA9ICh1aW50 OF90KWZhYWRfZ2V0Yml0cyhsZCwgMgogICAgICAgICk7CiAgICBpY3MtPndpbmRvd19zaGFwZSA9 IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICk7CgogICAgaWYgKGljcy0+d2luZG93X3NlcXVlbmNl ID09IDB4MikKICAgIHsKICAgICAgICBpY3MtPm1heF9zZmIgPSAodWludDhfdClmYWFkX2dldGJp dHMobGQsIDQKICAgICAgICAgICAgKTsKICAgICAgICBpY3MtPnNjYWxlX2ZhY3Rvcl9ncm91cGlu ZyA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgNwogICAgICAgICAgICApOwogICAgfSBlbHNl IHsKICAgICAgICBpY3MtPm1heF9zZmIgPSAodWludDhfdClmYWFkX2dldGJpdHMobGQsIDYKICAg ICAgICAgICAgKTsKCiAgICAgICAgaWYgKChpY3MtPnByZWRpY3Rvcl9kYXRhX3ByZXNlbnQgPSBm YWFkX2dldDFiaXQobGQKICAgICAgICAgICAgKSkgJiAxKQogICAgICAgIHsKICAgICAgICAgICAg aWYgKG9iamVjdF90eXBlID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHVpbnQ4 X3Qgc2ZiOwoKICAgICAgICAgICAgICAgIGljcy0+cHJlZC5saW1pdCA9ICgoKGljcy0+bWF4X3Nm YikgPCAocHJlZF9zZmJfbWF4W3NmX2luZGV4XSkpID8gKGljcy0+bWF4X3NmYikgOiAocHJlZF9z ZmJfbWF4W3NmX2luZGV4XSkpOwoKICAgICAgICAgICAgICAgIGlmICgoaWNzLT5wcmVkLnByZWRp Y3Rvcl9yZXNldCA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICAgICAgICAgICAgICkpICYgMSkK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY3MtPnByZWQucHJlZGljdG9y X3Jlc2V0X2dyb3VwX251bWJlciA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgNQogICAgICAg ICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZv ciAoc2ZiID0gMDsgc2ZiIDwgaWNzLT5wcmVkLmxpbWl0OyBzZmIrKykKICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICBpY3MtPnByZWQucHJlZGljdGlvbl91c2VkW3NmYl0gPSBm YWFkX2dldDFiaXQobGQKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAo KGljcy0+bHRwLmRhdGFfcHJlc2VudCA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICAgICAgICAg ICAgICkpICYgMSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBsdHBfZGF0 YShpY3MsICYoaWNzLT5sdHApLCBsZCwgb2JqZWN0X3R5cGUpOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgaWYgKGNvbW1vbl93aW5kb3cpCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgaWYgKChpY3MtPmx0cDIuZGF0YV9wcmVzZW50ID0gZmFhZF9nZXQxYml0 KGxkCiAgICAgICAgICAgICAgICAgICAgICAgICkpICYgMSkKICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICAgIGx0cF9kYXRhKGljcywgJihpY3MtPmx0cDIpLCBsZCwg b2JqZWN0X3R5cGUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgfQoKICAgICAgICB9CiAgICB9CgoKICAgIHJldHVybiB3aW5kb3dfZ3JvdXBpbmdf aW5mbyhpY3MsIHNmX2luZGV4LCBvYmplY3RfdHlwZSwgZnJhbWVfbGVuKTsKfQoKCnN0YXRpYyB2 b2lkIHB1bHNlX2RhdGEocHVsc2VfaW5mbyAqcHVsLCBiaXRmaWxlICpsZCkKewogICAgdWludDhf dCBpOwoKICAgIHB1bC0+bnVtYmVyX3B1bHNlID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCAy CiAgICAgICAgKTsKICAgIHB1bC0+cHVsc2Vfc3RhcnRfc2ZiID0gKHVpbnQ4X3QpZmFhZF9nZXRi aXRzKGxkLCA2CiAgICAgICAgKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgcHVsLT5udW1iZXJfcHVs c2UrMTsgaSsrKSB7CiAgICAgICAgcHVsLT5wdWxzZV9vZmZzZXRbaV0gPSAodWludDhfdClmYWFk X2dldGJpdHMobGQsIDUKICAgICAgICAgICAgKTsKICAgICAgICBwdWwtPnB1bHNlX2FtcFtpXSA9 ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgNAogICAgICAgICAgICApOwogICAgfQp9CgoKdWlu dDE2X3QgZGF0YV9zdHJlYW1fZWxlbWVudChiaXRmaWxlICpsZCkKewogICAgdWludDhfdCBieXRl X2FsaWduZWQ7CiAgICB1aW50MTZfdCBpLCBjb3VudDsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZhYWRfZ2V0Yml0cyhsZCwgNAogICAgICAgICk7CiAgICBieXRlX2FsaWduZWQg PSBmYWFkX2dldDFiaXQobGQKICAgICAgICApOwogICAgY291bnQgPSBmYWFkX2dldGJpdHMobGQs IDgKICAgICAgICApOwogICAgaWYgKGNvdW50ID09IDI1NSkKICAgIHsKICAgICAgICBjb3VudCAr PSBmYWFkX2dldGJpdHMobGQsIDgKICAgICAgICAgICAgKTsKICAgIH0KICAgIGlmIChieXRlX2Fs aWduZWQpCiAgICAgICAgZmFhZF9ieXRlX2FsaWduKGxkKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwg Y291bnQ7IGkrKykKICAgIHsKICAgICAgICBmYWFkX2dldGJpdHMobGQsIDgKICAgICAgICAgICAg KTsKICAgIH0KCiAgICByZXR1cm4gY291bnQ7Cn0KCgp1aW50OF90IGZpbGxfZWxlbWVudChiaXRm aWxlICpsZCwgZHJjX2luZm8gKmRyYwoKCgogICAgICAgICAgICAgICAgICAgICApCnsKICAgIHVp bnQxNl90IGNvdW50OwoKCgoKCiAgICBjb3VudCA9ICh1aW50MTZfdClmYWFkX2dldGJpdHMobGQs IDQKICAgICAgICApOwogICAgaWYgKGNvdW50ID09IDE1KQogICAgewogICAgICAgIGNvdW50ICs9 ICh1aW50MTZfdClmYWFkX2dldGJpdHMobGQsIDgKICAgICAgICAgICAgKSAtIDE7CiAgICB9CiMg NDk5ICJzeW50YXguYyIKICAgICAgICB3aGlsZSAoY291bnQgPiAwKQogICAgICAgIHsKICAgICAg ICAgICAgY291bnQgLT0gZXh0ZW5zaW9uX3BheWxvYWQobGQsIGRyYywgY291bnQpOwogICAgICAg IH0KCgoKCiAgICByZXR1cm4gMDsKfQoKCnN0YXRpYyB2b2lkIGdhaW5fY29udHJvbF9kYXRhKGJp dGZpbGUgKmxkLCBpY19zdHJlYW0gKmljcykKewogICAgdWludDhfdCBiZCwgd2QsIGFkOwogICAg dWludDhfdCBhZGp1c3RfbnVtWzRdWzhdOwogICAgdWludDhfdCBhbGV2Y29kZVs0XVs4XVs4XTsK ICAgIHVpbnQ4X3QgYWxvY2NvZGVbNF1bOF1bOF07CgogICAgdWludDhfdCBtYXhfYmFuZCA9ICh1 aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgMgogICAgICAgICk7CgogICAgaWYgKGljcy0+d2luZG93 X3NlcXVlbmNlID09IDB4MCkKICAgIHsKICAgICAgICBmb3IgKGJkID0gMTsgYmQgPD0gbWF4X2Jh bmQ7IGJkKyspCiAgICAgICAgewogICAgICAgICAgICBmb3IgKHdkPTA7IHdkPDE7IHdkKyspCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGFkanVzdF9udW1bYmRdW3dkXSA9ICh1aW50OF90 KWZhYWRfZ2V0Yml0cyhsZCwgMwogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAg ICAgZm9yIChhZCA9IDA7IGFkIDwgYWRqdXN0X251bVtiZF1bd2RdOyBhZCsrKQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgIGFsZXZjb2RlW2JkXVt3ZF1bYWRdID0gKHVpbnQ4 X3QpZmFhZF9nZXRiaXRzKGxkLCA0CiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAg ICAgICAgICAgICAgYWxvY2NvZGVbYmRdW3dkXVthZF0gPSAodWludDhfdClmYWFkX2dldGJpdHMo bGQsIDUKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgfQogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoaWNzLT53aW5kb3dfc2VxdWVuY2UgPT0g MHgxKSB7CiAgICAgICAgZm9yIChiZCA9IDE7IGJkIDw9IG1heF9iYW5kOyBiZCsrKQogICAgICAg IHsKICAgICAgICAgICAgZm9yICh3ZCA9IDA7IHdkIDwgMjsgd2QrKykKICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgYWRqdXN0X251bVtiZF1bd2RdID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRz KGxkLCAzCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBmb3IgKGFkID0g MDsgYWQgPCBhZGp1c3RfbnVtW2JkXVt3ZF07IGFkKyspCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgYWxldmNvZGVbYmRdW3dkXVthZF0gPSAodWludDhfdClmYWFkX2dldGJp dHMobGQsIDQKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBp ZiAod2QgPT0gMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg IGFsb2Njb2RlW2JkXVt3ZF1bYWRdID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCA0CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg ICAgICAgICAgICAgICAgICAgICAgIGFsb2Njb2RlW2JkXVt3ZF1bYWRdID0gKHVpbnQ4X3QpZmFh ZF9nZXRiaXRzKGxkLCAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAg IH0gZWxzZSBpZiAoaWNzLT53aW5kb3dfc2VxdWVuY2UgPT0gMHgyKSB7CiAgICAgICAgZm9yIChi ZCA9IDE7IGJkIDw9IG1heF9iYW5kOyBiZCsrKQogICAgICAgIHsKICAgICAgICAgICAgZm9yKHdk PTA7IHdkPDg7IHdkKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGFkanVzdF9udW1b YmRdW3dkXSA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgMwogICAgICAgICAgICAgICAgICAg ICk7CgogICAgICAgICAgICAgICAgZm9yIChhZCA9IDA7IGFkIDwgYWRqdXN0X251bVtiZF1bd2Rd OyBhZCsrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGFsZXZjb2RlW2Jk XVt3ZF1bYWRdID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCA0CiAgICAgICAgICAgICAgICAg ICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgYWxvY2NvZGVbYmRdW3dkXVthZF0gPSAodWlu dDhfdClmYWFkX2dldGJpdHMobGQsIDIKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoaWNzLT53 aW5kb3dfc2VxdWVuY2UgPT0gMHgzKSB7CiAgICAgICAgZm9yIChiZCA9IDE7IGJkIDw9IG1heF9i YW5kOyBiZCsrKQogICAgICAgIHsKICAgICAgICAgICAgZm9yICh3ZCA9IDA7IHdkIDwgMjsgd2Qr KykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYWRqdXN0X251bVtiZF1bd2RdID0gKHVp bnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCAzCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAg ICAgICAgICBmb3IgKGFkID0gMDsgYWQgPCBhZGp1c3RfbnVtW2JkXVt3ZF07IGFkKyspCiAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgYWxldmNvZGVbYmRdW3dkXVthZF0gPSAo dWludDhfdClmYWFkX2dldGJpdHMobGQsIDQKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAg ICAgICAgICAgICAgICAgICAgaWYgKHdkID09IDApCiAgICAgICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICAgICBhbG9jY29kZVtiZF1bd2RdW2FkXSA9ICh1aW50OF90KWZhYWRf Z2V0Yml0cyhsZCwgNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBhbG9jY29kZVtiZF1bd2Rd W2FkXSA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgNQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICB9Cn0KCgpzdGF0aWMgdWludDhfdCBpbmRpdmlkdWFsX2NoYW5u ZWxfc3RyZWFtKGVsZW1lbnQgKmVsZSwgYml0ZmlsZSAqbGQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpY19zdHJlYW0gKmljcywgdWludDhfdCBzY2FsX2ZsYWcsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90ICpzcGVjX2RhdGEsIHVpbnQ4 X3Qgc2ZfaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90 IG9iamVjdF90eXBlLCB1aW50MTZfdCBmcmFtZV9sZW4KCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAsdWludDhfdCBhYWNTZWN0aW9uRGF0YVJlc2lsaWVuY2VGbGFnLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhYWNTY2FsZWZhY3RvckRh dGFSZXNpbGllbmNlRmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQ4X3QgYWFjU3BlY3RyYWxEYXRhUmVzaWxpZW5jZUZsYWcKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApCnsKICAgIHVpbnQ4X3QgcmVzdWx0OwoKICAgIGljcy0+Z2xvYmFs X2dhaW4gPSAodWludDhfdClmYWFkX2dldGJpdHMobGQsIDgKICAgICAgICApOwoKICAgIGlmICgh ZWxlLT5jb21tb25fd2luZG93ICYmICFzY2FsX2ZsYWcpCiAgICB7CiAgICAgICAgaWYgKChyZXN1 bHQgPSBpY3NfaW5mbyhpY3MsIGxkLCBlbGUtPmNvbW1vbl93aW5kb3csIHNmX2luZGV4LAogICAg ICAgICAgICBvYmplY3RfdHlwZSwgZnJhbWVfbGVuKSkgPiAwKQogICAgICAgICAgICByZXR1cm4g cmVzdWx0OwogICAgfQogICAgc2VjdGlvbl9kYXRhKGljcywgbGQKCiAgICAgICAgLGFhY1NlY3Rp b25EYXRhUmVzaWxpZW5jZUZsYWcKCiAgICAgICAgKTsKICAgIGlmICgocmVzdWx0ID0gc2NhbGVf ZmFjdG9yX2RhdGEoaWNzLCBsZAoKICAgICAgICAsYWFjU2NhbGVmYWN0b3JEYXRhUmVzaWxpZW5j ZUZsYWcKCiAgICAgICAgKSkgPiAwKQogICAgICAgIHJldHVybiByZXN1bHQ7CgogICAgaWYgKCFz Y2FsX2ZsYWcpCiAgICB7CgoKCgoKCiAgICAgICAgaWYgKChpY3MtPnB1bHNlX2RhdGFfcHJlc2Vu dCA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICAgICApKSAmIDEpCiAgICAgICAgewogICAgICAg ICAgICBwdWxzZV9kYXRhKCYoaWNzLT5wdWwpLCBsZCk7CiAgICAgICAgfQoKCiAgICAgICAgaWYg KChpY3MtPnRuc19kYXRhX3ByZXNlbnQgPSBmYWFkX2dldDFiaXQobGQKICAgICAgICAgICAgKSkg JiAxKQogICAgICAgIHsKCgogICAgICAgICAgICBpZiAoKG9iamVjdF90eXBlICE9IDE3KSAmJiAo b2JqZWN0X3R5cGUgIT0gMTkpCgoKCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAg dG5zX2RhdGEoaWNzLCAmKGljcy0+dG5zKSwgbGQpOwogICAgICAgIH0KCgogICAgICAgIGlmICgo aWNzLT5nYWluX2NvbnRyb2xfZGF0YV9wcmVzZW50ID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAg ICAgICkpICYgMSkKICAgICAgICB7CgoKCiAgICAgICAgICAgIGdhaW5fY29udHJvbF9kYXRhKGxk LCBpY3MpOwoKICAgICAgICB9CiAgICB9CgoKICAgIGlmICghYWFjU3BlY3RyYWxEYXRhUmVzaWxp ZW5jZUZsYWcpCiAgICB7CgoKICAgICAgICBpZiAoIChvYmplY3RfdHlwZSA9PSAxNykgfHwgKG9i amVjdF90eXBlID09IDE5KQoKCgogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBp ZiAoaWNzLT50bnNfZGF0YV9wcmVzZW50KQogICAgICAgICAgICAgICAgdG5zX2RhdGEoaWNzLCAm KGljcy0+dG5zKSwgbGQpOwogICAgICAgIH0KCgoKICAgICAgICBpZiAoKHJlc3VsdCA9IHNwZWN0 cmFsX2RhdGEoaWNzLCBsZCwgc3BlY19kYXRhLCBmcmFtZV9sZW4pKSA+IDApCiAgICAgICAgICAg IHJldHVybiByZXN1bHQ7CgogICAgfSBlbHNlIHsKICAgICAgICBpY3MtPmxlbmd0aF9vZl9yZW9y ZGVyZWRfc3BlY3RyYWxfZGF0YSA9ICh1aW50MTZfdClmYWFkX2dldGJpdHMobGQsIDE0CiAgICAg ICAgICAgICk7CgogICAgICAgIGljcy0+bGVuZ3RoX29mX2xvbmdlc3RfY29kZXdvcmQgPSAodWlu dDhfdClmYWFkX2dldGJpdHMobGQsIDYKICAgICAgICAgICAgKTsKICAgICAgICBpZiAoaWNzLT5s ZW5ndGhfb2ZfbG9uZ2VzdF9jb2Rld29yZCA+PSA0OSkKICAgICAgICAgICAgaWNzLT5sZW5ndGhf b2ZfbG9uZ2VzdF9jb2Rld29yZCA9IDQ5OwoKCgoKICAgICAgICBpZiAoaWNzLT50bnNfZGF0YV9w cmVzZW50KQogICAgICAgICAgICB0bnNfZGF0YShpY3MsICYoaWNzLT50bnMpLCBsZCk7CgoKICAg ICAgICBpZiAoKHJlc3VsdCA9IHJlb3JkZXJlZF9zcGVjdHJhbF9kYXRhKGljcywgbGQsIHNwZWNf ZGF0YSwgZnJhbWVfbGVuLAogICAgICAgICAgICBhYWNTZWN0aW9uRGF0YVJlc2lsaWVuY2VGbGFn KSkgPiAwKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAg ICB9CgoKCiAgICBpZiAoaWNzLT5wdWxzZV9kYXRhX3ByZXNlbnQpCiAgICB7CiAgICAgICAgaWYg KGljcy0+d2luZG93X3NlcXVlbmNlICE9IDB4MikKICAgICAgICAgICAgcHVsc2VfZGVjb2RlKGlj cywgc3BlY19kYXRhKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAyOwogICAgfQoK ICAgIHJldHVybiAwOwp9CgoKc3RhdGljIHZvaWQgc2VjdGlvbl9kYXRhKGljX3N0cmVhbSAqaWNz LCBiaXRmaWxlICpsZAoKICAgICAgICAgICAgICAgICAgICAgICAgICx1aW50OF90IGFhY1NlY3Rp b25EYXRhUmVzaWxpZW5jZUZsYWcKCiAgICAgICAgICAgICAgICAgICAgICAgICApCnsKICAgIHVp bnQ4X3QgZzsKICAgIHVpbnQ4X3Qgc2VjdF9lc2NfdmFsLCBzZWN0X2JpdHM7CgogICAgaWYgKGlj cy0+d2luZG93X3NlcXVlbmNlID09IDB4MikKICAgICAgICBzZWN0X2JpdHMgPSAzOwogICAgZWxz ZQogICAgICAgIHNlY3RfYml0cyA9IDU7CiAgICBzZWN0X2VzY192YWwgPSAoMTw8c2VjdF9iaXRz KSAtIDE7CgogICAgZm9yIChnID0gMDsgZyA8IGljcy0+bnVtX3dpbmRvd19ncm91cHM7IGcrKykK ICAgIHsKICAgICAgICB1aW50MTZfdCBrID0gMDsKICAgICAgICB1aW50OF90IGkgPSAwOwoKICAg ICAgICB3aGlsZSAoayA8IGljcy0+bWF4X3NmYikKICAgICAgICB7CiAgICAgICAgICAgIHVpbnQ4 X3Qgc2ZiOwogICAgICAgICAgICB1aW50OF90IHNlY3RfbGVuX2luY3I7CiAgICAgICAgICAgIHVp bnQxNl90IHNlY3RfbGVuID0gMDsKICAgICAgICAgICAgdWludDhfdCBzZWN0X2NiX2JpdHMgPSA0 OwoKCiAgICAgICAgICAgIGlmIChhYWNTZWN0aW9uRGF0YVJlc2lsaWVuY2VGbGFnKQogICAgICAg ICAgICAgICAgc2VjdF9jYl9iaXRzID0gNTsKCgogICAgICAgICAgICBpY3MtPnNlY3RfY2JbZ11b aV0gPSAodWludDhfdClmYWFkX2dldGJpdHMobGQsIHNlY3RfY2JfYml0cwogICAgICAgICAgICAg ICAgKTsKCgogICAgICAgICAgICBpZiAoIWFhY1NlY3Rpb25EYXRhUmVzaWxpZW5jZUZsYWcgfHwK ICAgICAgICAgICAgICAgIChpY3MtPnNlY3RfY2JbZ11baV0gPCAxMSkgfHwKICAgICAgICAgICAg ICAgIChpY3MtPnNlY3RfY2JbZ11baV0gPiAxMSAmJiBpY3MtPnNlY3RfY2JbZ11baV0gPCAxNikp CiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICB3aGlsZSAoKHNlY3RfbGVuX2luY3IgPSAo dWludDhfdClmYWFkX2dldGJpdHMobGQsIHNlY3RfYml0cwogICAgICAgICAgICAgICAgICAgICkp ID09IHNlY3RfZXNjX3ZhbCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBz ZWN0X2xlbiArPSBzZWN0X2VzY192YWw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9 IGVsc2UgewogICAgICAgICAgICAgICAgc2VjdF9sZW5faW5jciA9IDE7CiAgICAgICAgICAgIH0K CgogICAgICAgICAgICBzZWN0X2xlbiArPSBzZWN0X2xlbl9pbmNyOwoKICAgICAgICAgICAgaWNz LT5zZWN0X3N0YXJ0W2ddW2ldID0gazsKICAgICAgICAgICAgaWNzLT5zZWN0X2VuZFtnXVtpXSA9 IGsgKyBzZWN0X2xlbjsKCiAgICAgICAgICAgIGZvciAoc2ZiID0gazsgc2ZiIDwgayArIHNlY3Rf bGVuOyBzZmIrKykKICAgICAgICAgICAgICAgIGljcy0+c2ZiX2NiW2ddW3NmYl0gPSBpY3MtPnNl Y3RfY2JbZ11baV07CgogICAgICAgICAgICBrICs9IHNlY3RfbGVuOwogICAgICAgICAgICBpKys7 CiAgICAgICAgfQogICAgICAgIGljcy0+bnVtX3NlY1tnXSA9IGk7CiAgICB9Cn0KIyA4MTcgInN5 bnRheC5jIgpzdGF0aWMgdWludDhfdCBkZWNvZGVfc2NhbGVfZmFjdG9ycyhpY19zdHJlYW0gKmlj cywgYml0ZmlsZSAqbGQpCnsKICAgIHVpbnQ4X3QgZywgc2ZiOwogICAgaW50OF90IHQ7CiAgICBp bnQ4X3Qgbm9pc2VfcGNtX2ZsYWcgPSAxOwoKICAgIGludDE2X3Qgc2NhbGVfZmFjdG9yID0gaWNz LT5nbG9iYWxfZ2FpbjsKICAgIGludDE2X3QgaXNfcG9zaXRpb24gPSAwOwogICAgaW50MTZfdCBu b2lzZV9lbmVyZ3kgPSBpY3MtPmdsb2JhbF9nYWluIC0gOTA7CgogICAgZm9yIChnID0gMDsgZyA8 IGljcy0+bnVtX3dpbmRvd19ncm91cHM7IGcrKykKICAgIHsKICAgICAgICBmb3IgKHNmYiA9IDA7 IHNmYiA8IGljcy0+bWF4X3NmYjsgc2ZiKyspCiAgICAgICAgewogICAgICAgICAgICBzd2l0Y2gg KGljcy0+c2ZiX2NiW2ddW3NmYl0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgY2FzZSAwOgog ICAgICAgICAgICAgICAgaWNzLT5zY2FsZV9mYWN0b3JzW2ddW3NmYl0gPSAwOwogICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgIGNhc2UgMTQ6CgoK ICAgICAgICAgICAgICAgIHQgPSBodWZmbWFuX3NjYWxlX2ZhY3RvcihsZCk7CiAgICAgICAgICAg ICAgICBpZiAodCA8IDApCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDk7CiAgICAgICAgICAg ICAgICBpc19wb3NpdGlvbiArPSAodCAtIDYwKTsKICAgICAgICAgICAgICAgIGljcy0+c2NhbGVf ZmFjdG9yc1tnXVtzZmJdID0gaXNfcG9zaXRpb247CgogICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgIGNhc2UgMTM6CgoKICAgICAgICAgICAgICAgIGlmIChub2lzZV9wY21fZmxhZykK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBub2lzZV9wY21fZmxhZyA9IDA7 CiAgICAgICAgICAgICAgICAgICAgdCA9IGZhYWRfZ2V0Yml0cyhsZCwgOQogICAgICAgICAgICAg ICAgICAgICAgICApIC0gMjU2OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg ICAgICAgICB0ID0gaHVmZm1hbl9zY2FsZV9mYWN0b3IobGQpOwogICAgICAgICAgICAgICAgICAg IGlmICh0IDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDk7CiAgICAgICAgICAg ICAgICAgICAgdCAtPSA2MDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG5vaXNl X2VuZXJneSArPSB0OwogICAgICAgICAgICAgICAgaWNzLT5zY2FsZV9mYWN0b3JzW2ddW3NmYl0g PSBub2lzZV9lbmVyZ3k7CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2Ug MTI6CiAgICAgICAgICAgICAgICByZXR1cm4gMzsKICAgICAgICAgICAgZGVmYXVsdDoKCgogICAg ICAgICAgICAgICAgdCA9IGh1ZmZtYW5fc2NhbGVfZmFjdG9yKGxkKTsKICAgICAgICAgICAgICAg IGlmICh0IDwgMCkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gOTsKICAgICAgICAgICAgICAg IHNjYWxlX2ZhY3RvciArPSAodCAtIDYwKTsKICAgICAgICAgICAgICAgIGlmIChzY2FsZV9mYWN0 b3IgPCAwKQogICAgICAgICAgICAgICAgICAgIHJldHVybiA0OwogICAgICAgICAgICAgICAgaWNz LT5zY2FsZV9mYWN0b3JzW2ddW3NmYl0gPSBzY2FsZV9mYWN0b3I7CgogICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCgpz dGF0aWMgdWludDhfdCBzY2FsZV9mYWN0b3JfZGF0YShpY19zdHJlYW0gKmljcywgYml0ZmlsZSAq bGQKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICx1aW50OF90IGFhY1NjYWxlZmFj dG9yRGF0YVJlc2lsaWVuY2VGbGFnCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp CnsKCiAgICBpZiAoIWFhY1NjYWxlZmFjdG9yRGF0YVJlc2lsaWVuY2VGbGFnKQogICAgewoKICAg ICAgICByZXR1cm4gZGVjb2RlX3NjYWxlX2ZhY3RvcnMoaWNzLCBsZCk7CgogICAgfSBlbHNlIHsK IyA5NzUgInN5bnRheC5jIgogICAgfQoKfQoKCnN0YXRpYyB2b2lkIHRuc19kYXRhKGljX3N0cmVh bSAqaWNzLCB0bnNfaW5mbyAqdG5zLCBiaXRmaWxlICpsZCkKewogICAgdWludDhfdCB3LCBmaWx0 LCBpLCBzdGFydF9jb2VmX2JpdHMsIGNvZWZfYml0czsKICAgIHVpbnQ4X3Qgbl9maWx0X2JpdHMg PSAyOwogICAgdWludDhfdCBsZW5ndGhfYml0cyA9IDY7CiAgICB1aW50OF90IG9yZGVyX2JpdHMg PSA1OwoKICAgIGlmIChpY3MtPndpbmRvd19zZXF1ZW5jZSA9PSAweDIpCiAgICB7CiAgICAgICAg bl9maWx0X2JpdHMgPSAxOwogICAgICAgIGxlbmd0aF9iaXRzID0gNDsKICAgICAgICBvcmRlcl9i aXRzID0gMzsKICAgIH0KCiAgICBmb3IgKHcgPSAwOyB3IDwgaWNzLT5udW1fd2luZG93czsgdysr KQogICAgewogICAgICAgIHRucy0+bl9maWx0W3ddID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRzKGxk LCBuX2ZpbHRfYml0cwogICAgICAgICAgICApOwoKICAgICAgICBpZiAodG5zLT5uX2ZpbHRbd10p CiAgICAgICAgewogICAgICAgICAgICBpZiAoKHRucy0+Y29lZl9yZXNbd10gPSBmYWFkX2dldDFi aXQobGQKICAgICAgICAgICAgICAgICkpICYgMSkKICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgc3RhcnRfY29lZl9iaXRzID0gNDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg ICAgIHN0YXJ0X2NvZWZfYml0cyA9IDM7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAg IGZvciAoZmlsdCA9IDA7IGZpbHQgPCB0bnMtPm5fZmlsdFt3XTsgZmlsdCsrKQogICAgICAgIHsK ICAgICAgICAgICAgdG5zLT5sZW5ndGhbd11bZmlsdF0gPSAodWludDhfdClmYWFkX2dldGJpdHMo bGQsIGxlbmd0aF9iaXRzCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB0bnMtPm9yZGVy W3ddW2ZpbHRdID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCBvcmRlcl9iaXRzCiAgICAgICAg ICAgICAgICApOwogICAgICAgICAgICBpZiAodG5zLT5vcmRlclt3XVtmaWx0XSkKICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgdG5zLT5kaXJlY3Rpb25bd11bZmlsdF0gPSBmYWFkX2dldDFi aXQobGQKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgdG5zLT5jb2VmX2Nv bXByZXNzW3ddW2ZpbHRdID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAgICAgICAgICAgICAgKTsK CiAgICAgICAgICAgICAgICBjb2VmX2JpdHMgPSBzdGFydF9jb2VmX2JpdHMgLSB0bnMtPmNvZWZf Y29tcHJlc3Nbd11bZmlsdF07CiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG5zLT5v cmRlclt3XVtmaWx0XTsgaSsrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg IHRucy0+Y29lZlt3XVtmaWx0XVtpXSA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgY29lZl9i aXRzCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICB9Cn0KCgoKCgoKCnN0YXRpYyB2b2lkIGx0cF9kYXRhKGljX3N0 cmVhbSAqaWNzLCBsdHBfaW5mbyAqbHRwLCBiaXRmaWxlICpsZCwKICAgICAgICAgICAgICAgICAg ICAgdWludDhfdCBvYmplY3RfdHlwZSkKewogICAgdWludDhfdCBzZmIsIHc7CgoKICAgIGlmIChv YmplY3RfdHlwZSA9PSAyMykKICAgIHsKICAgICAgICBsdHAtPmxhZ191cGRhdGUgPSAodWludDhf dClmYWFkX2dldGJpdHMobGQsIDEKICAgICAgICAgICAgKTsKCiAgICAgICAgaWYgKGx0cC0+bGFn X3VwZGF0ZSkKICAgICAgICB7CiAgICAgICAgICAgIGx0cC0+bGFnID0gKHVpbnQxNl90KWZhYWRf Z2V0Yml0cyhsZCwgMTAKICAgICAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfSBlbHNlIHsK CiAgICAgICAgbHRwLT5sYWcgPSAodWludDE2X3QpZmFhZF9nZXRiaXRzKGxkLCAxMQogICAgICAg ICAgICApOwoKICAgIH0KCiAgICBsdHAtPmNvZWYgPSAodWludDhfdClmYWFkX2dldGJpdHMobGQs IDMKICAgICAgICApOwoKICAgIGlmIChpY3MtPndpbmRvd19zZXF1ZW5jZSA9PSAweDIpCiAgICB7 CiAgICAgICAgZm9yICh3ID0gMDsgdyA8IGljcy0+bnVtX3dpbmRvd3M7IHcrKykKICAgICAgICB7 CiAgICAgICAgICAgIGlmICgobHRwLT5zaG9ydF91c2VkW3ddID0gZmFhZF9nZXQxYml0KGxkCiAg ICAgICAgICAgICAgICApKSAmIDEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGx0cC0+ c2hvcnRfbGFnX3ByZXNlbnRbd10gPSBmYWFkX2dldDFiaXQobGQKICAgICAgICAgICAgICAgICAg ICApOwogICAgICAgICAgICAgICAgaWYgKGx0cC0+c2hvcnRfbGFnX3ByZXNlbnRbd10pCiAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbHRwLT5zaG9ydF9sYWdbd10gPSAodWlu dDhfdClmYWFkX2dldGJpdHMobGQsIDQKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAg bHRwLT5sYXN0X2JhbmQgPSAoaWNzLT5tYXhfc2ZiIDwgNDAgPyBpY3MtPm1heF9zZmIgOiA0MCk7 CgogICAgICAgIGZvciAoc2ZiID0gMDsgc2ZiIDwgbHRwLT5sYXN0X2JhbmQ7IHNmYisrKQogICAg ICAgIHsKICAgICAgICAgICAgbHRwLT5sb25nX3VzZWRbc2ZiXSA9IGZhYWRfZ2V0MWJpdChsZAog ICAgICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9Cn0KCgoKCnN0YXRpYyB1aW50OF90IHVu c2lnbmVkX2NiW10gPSB7IDAsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDAs IDAsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEsIDEsIDEsIDEsIDEs IDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEKfTsKCgpzdGF0aWMgdWludDhfdCBzcGVjdHJh bF9kYXRhKGljX3N0cmVhbSAqaWNzLCBiaXRmaWxlICpsZCwgaW50MTZfdCAqc3BlY3RyYWxfZGF0 YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBmcmFtZV9sZW4pCnsKICAg IGludDhfdCBpOwogICAgdWludDhfdCBnLCBpbmM7CiAgICBpbnQxNl90ICpzcDsKICAgIHVpbnQx Nl90IGssIHAgPSAwOwogICAgdWludDhfdCBncm91cHMgPSAwOwogICAgdWludDhfdCBzZWN0X2Ni OwogICAgdWludDhfdCByZXN1bHQ7CiAgICB1aW50MTZfdCBuc2hvcnQgPSBmcmFtZV9sZW4vODsK CiAgICBzcCA9IHNwZWN0cmFsX2RhdGE7CiAgICBmb3IgKGkgPSBmcmFtZV9sZW4vMTYtMTsgaSA+ PSAwOyAtLWkpCiAgICB7CiAgICAgICAgKnNwKysgPSAwOyAqc3ArKyA9IDA7ICpzcCsrID0gMDsg KnNwKysgPSAwOwogICAgICAgICpzcCsrID0gMDsgKnNwKysgPSAwOyAqc3ArKyA9IDA7ICpzcCsr ID0gMDsKICAgICAgICAqc3ArKyA9IDA7ICpzcCsrID0gMDsgKnNwKysgPSAwOyAqc3ArKyA9IDA7 CiAgICAgICAgKnNwKysgPSAwOyAqc3ArKyA9IDA7ICpzcCsrID0gMDsgKnNwKysgPSAwOwogICAg fQoKICAgIGZvcihnID0gMDsgZyA8IGljcy0+bnVtX3dpbmRvd19ncm91cHM7IGcrKykKICAgIHsK ICAgICAgICBwID0gZ3JvdXBzKm5zaG9ydDsKCiAgICAgICAgZm9yIChpID0gMDsgaSA8IGljcy0+ bnVtX3NlY1tnXTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgc2VjdF9jYiA9IGljcy0+c2Vj dF9jYltnXVtpXTsKCiAgICAgICAgICAgIGlmICgoc2VjdF9jYiA9PSAwKSB8fAogICAgICAgICAg ICAgICAgKHNlY3RfY2IgPT0gMTMpIHx8CiAgICAgICAgICAgICAgICAoc2VjdF9jYiA9PSAxNSkg fHwKICAgICAgICAgICAgICAgIChzZWN0X2NiID09IDE0KSkKICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgcCArPSAoaWNzLT5zZWN0X3NmYl9vZmZzZXRbZ11baWNzLT5zZWN0X2VuZFtnXVtp XV0gLQogICAgICAgICAgICAgICAgICAgIGljcy0+c2VjdF9zZmJfb2Zmc2V0W2ddW2ljcy0+c2Vj dF9zdGFydFtnXVtpXV0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZm9y IChrID0gaWNzLT5zZWN0X3NmYl9vZmZzZXRbZ11baWNzLT5zZWN0X3N0YXJ0W2ddW2ldXTsKICAg ICAgICAgICAgICAgICAgICAgayA8IGljcy0+c2VjdF9zZmJfb2Zmc2V0W2ddW2ljcy0+c2VjdF9l bmRbZ11baV1dOyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3AgPSBz cGVjdHJhbF9kYXRhICsgcDsKCiAgICAgICAgICAgICAgICAgICAgaW5jID0gKHNlY3RfY2IgPCA1 KSA/IDQgOiAyOwoKICAgICAgICAgICAgICAgICAgICBpZiAoKHJlc3VsdCA9IGh1ZmZtYW5fc3Bl Y3RyYWxfZGF0YShzZWN0X2NiLCBsZCwgc3ApKSA+IDApCiAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKHVuc2lnbmVkX2NiW3NlY3Rf Y2JdKQogICAgICAgICAgICAgICAgICAgICAgICBodWZmbWFuX3NpZ25fYml0cyhsZCwgc3AsIGlu Yyk7CiAgICAgICAgICAgICAgICAgICAgayArPSBpbmM7CiAgICAgICAgICAgICAgICAgICAgcCAr PSBpbmM7CiAgICAgICAgICAgICAgICAgICAgaWYgKChzZWN0X2NiID09IDExKSB8fCAoc2VjdF9j YiA+PSAxNikpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBz cFswXSA9IGh1ZmZtYW5fZ2V0ZXNjYXBlKGxkLCBzcFswXSk7CiAgICAgICAgICAgICAgICAgICAg ICAgIHNwWzFdID0gaHVmZm1hbl9nZXRlc2NhcGUobGQsIHNwWzFdKTsKICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAg Z3JvdXBzICs9IGljcy0+d2luZG93X2dyb3VwX2xlbmd0aFtnXTsKICAgIH0KCiAgICByZXR1cm4g MDsKfQoKCnN0YXRpYyB1aW50MTZfdCBleHRlbnNpb25fcGF5bG9hZChiaXRmaWxlICpsZCwgZHJj X2luZm8gKmRyYywgdWludDE2X3QgY291bnQpCnsKICAgIHVpbnQxNl90IGksIG47CiAgICB1aW50 OF90IGV4dGVuc2lvbl90eXBlID0gZmFhZF9nZXRiaXRzKGxkLCA0CiAgICAgICAgKTsKCiAgICBz d2l0Y2ggKGV4dGVuc2lvbl90eXBlKQogICAgewogICAgY2FzZSAxMToKICAgICAgICBkcmMtPnBy ZXNlbnQgPSAxOwogICAgICAgIG4gPSBkeW5hbWljX3JhbmdlX2luZm8obGQsIGRyYyk7CiAgICAg ICAgcmV0dXJuIG47CiAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWFk X2dldGJpdHMobGQsIDQKICAgICAgICAgICAgKTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291 bnQtMTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFh ZF9nZXRiaXRzKGxkLCA4CiAgICAgICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICByZXR1 cm4gY291bnQ7CiAgICBkZWZhdWx0OgogICAgICAgIGZhYWRfZ2V0Yml0cyhsZCwgNAogICAgICAg ICAgICApOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudC0xOyBpKyspCiAgICAgICAgewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFhZF9nZXRiaXRzKGxkLCA4CiAgICAg ICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjb3VudDsKICAgIH0KfQoKCnN0 YXRpYyB1aW50OF90IGR5bmFtaWNfcmFuZ2VfaW5mbyhiaXRmaWxlICpsZCwgZHJjX2luZm8gKmRy YykKewogICAgdWludDhfdCBpLCBuID0gMTsKICAgIHVpbnQ4X3QgYmFuZF9pbmNyOwoKICAgIGRy Yy0+bnVtX2JhbmRzID0gMTsKCiAgICBpZiAoZmFhZF9nZXQxYml0KGxkCiAgICAgICAgKSAmIDEp CiAgICB7CiAgICAgICAgZHJjLT5wY2VfaW5zdGFuY2VfdGFnID0gKHVpbnQ4X3QpZmFhZF9nZXRi aXRzKGxkLCA0CiAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmYWFkX2dldGJpdHMobGQsIDQKICAgICAgICAgICAgKTsKICAgICAgICBuKys7 CiAgICB9CgogICAgZHJjLT5leGNsdWRlZF9jaG5zX3ByZXNlbnQgPSBmYWFkX2dldDFiaXQobGQK ICAgICAgICApOwogICAgaWYgKGRyYy0+ZXhjbHVkZWRfY2huc19wcmVzZW50ID09IDEpCiAgICB7 CiAgICAgICAgbiArPSBleGNsdWRlZF9jaGFubmVscyhsZCwgZHJjKTsKICAgIH0KCiAgICBpZiAo ZmFhZF9nZXQxYml0KGxkCiAgICAgICAgKSAmIDEpCiAgICB7CiAgICAgICAgYmFuZF9pbmNyID0g ZmFhZF9nZXRiaXRzKGxkLCA0CiAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZhYWRfZ2V0Yml0cyhsZCwgNAogICAgICAgICAgICApOwog ICAgICAgIG4rKzsKICAgICAgICBkcmMtPm51bV9iYW5kcyArPSBiYW5kX2luY3I7CgogICAgICAg IGZvciAoaSA9IDA7IGkgPCBkcmMtPm51bV9iYW5kczsgaSsrKTsKICAgICAgICB7CiAgICAgICAg ICAgIGRyYy0+YmFuZF90b3BbaV0gPSAodWludDhfdClmYWFkX2dldGJpdHMobGQsIDgKICAgICAg ICAgICAgICAgICk7CiAgICAgICAgICAgIG4rKzsKICAgICAgICB9CiAgICB9CgogICAgaWYgKGZh YWRfZ2V0MWJpdChsZAogICAgICAgICkgJiAxKQogICAgewogICAgICAgIGRyYy0+cHJvZ19yZWZf bGV2ZWwgPSAodWludDhfdClmYWFkX2dldGJpdHMobGQsIDcKICAgICAgICAgICAgKTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWFkX2dldDFiaXQo bGQKICAgICAgICAgICAgKTsKICAgICAgICBuKys7CiAgICB9CgogICAgZm9yIChpID0gMDsgaSA8 IGRyYy0+bnVtX2JhbmRzOyBpKyspCiAgICB7CiAgICAgICAgZHJjLT5keW5fcm5nX3NnbltpXSA9 IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICAgICApOwogICAgICAgIGRyYy0+ZHluX3JuZ19jdGxb aV0gPSAodWludDhfdClmYWFkX2dldGJpdHMobGQsIDcKICAgICAgICAgICAgKTsKICAgICAgICBu Kys7CiAgICB9CgogICAgcmV0dXJuIG47Cn0KCgpzdGF0aWMgdWludDhfdCBleGNsdWRlZF9jaGFu bmVscyhiaXRmaWxlICpsZCwgZHJjX2luZm8gKmRyYykKewogICAgdWludDhfdCBpLCBuID0gMDsK ICAgIHVpbnQ4X3QgbnVtX2V4Y2xfY2hhbiA9IDc7CgogICAgZm9yIChpID0gMDsgaSA8IDc7IGkr KykKICAgIHsKICAgICAgICBkcmMtPmV4Y2x1ZGVfbWFza1tpXSA9IGZhYWRfZ2V0MWJpdChsZAog ICAgICAgICAgICApOwogICAgfQogICAgbisrOwoKICAgIHdoaWxlICgoZHJjLT5hZGRpdGlvbmFs X2V4Y2x1ZGVkX2NobnNbbi0xXSA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICkpID09IDEpCiAg ICB7CiAgICAgICAgZm9yIChpID0gbnVtX2V4Y2xfY2hhbjsgaSA8IG51bV9leGNsX2NoYW4rNzsg aSsrKQogICAgICAgIHsKICAgICAgICAgICAgZHJjLT5leGNsdWRlX21hc2tbaV0gPSBmYWFkX2dl dDFiaXQobGQKICAgICAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIG4rKzsKICAgICAg ICBudW1fZXhjbF9jaGFuICs9IDc7CiAgICB9CgogICAgcmV0dXJuIG47Cn0KCgoKCnZvaWQgZ2V0 X2FkaWZfaGVhZGVyKGFkaWZfaGVhZGVyICphZGlmLCBiaXRmaWxlICpsZCkKewogICAgdWludDhf dCBpOwoKICAgICAgICAgICAgICAgICAgICAgICBmYWFkX2dldGJpdHMobGQsIDgKICAgICAgICAp OwogICAgICAgICAgICAgICAgICAgICAgIGZhYWRfZ2V0Yml0cyhsZCwgOAogICAgICAgICk7CiAg ICAgICAgICAgICAgICAgICAgICAgZmFhZF9nZXRiaXRzKGxkLCA4CiAgICAgICAgKTsKICAgICAg ICAgICAgICAgICAgICAgICBmYWFkX2dldGJpdHMobGQsIDgKICAgICAgICApOwogICAgYWRpZi0+ Y29weXJpZ2h0X2lkX3ByZXNlbnQgPSBmYWFkX2dldDFiaXQobGQKICAgICAgICApOwogICAgaWYo YWRpZi0+Y29weXJpZ2h0X2lkX3ByZXNlbnQpCiAgICB7CiAgICAgICAgZm9yIChpID0gMDsgaSA8 IDcyLzg7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGFkaWYtPmNvcHlyaWdodF9pZFtpXSA9 IChpbnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCA4CiAgICAgICAgICAgICAgICApOwogICAgICAgIH0K ICAgICAgICBhZGlmLT5jb3B5cmlnaHRfaWRbaV0gPSAwOwogICAgfQogICAgYWRpZi0+b3JpZ2lu YWxfY29weSA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICk7CiAgICBhZGlmLT5ob21lID0gZmFh ZF9nZXQxYml0KGxkCiAgICAgICAgKTsKICAgIGFkaWYtPmJpdHN0cmVhbV90eXBlID0gZmFhZF9n ZXQxYml0KGxkCiAgICAgICAgKTsKICAgIGFkaWYtPmJpdHJhdGUgPSBmYWFkX2dldGJpdHMobGQs IDIzCiAgICAgICAgKTsKICAgIGFkaWYtPm51bV9wcm9ncmFtX2NvbmZpZ19lbGVtZW50cyA9ICh1 aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgNAogICAgICAgICk7CgogICAgZm9yIChpID0gMDsgaSA8 IGFkaWYtPm51bV9wcm9ncmFtX2NvbmZpZ19lbGVtZW50cyArIDE7IGkrKykKICAgIHsKICAgICAg ICBpZihhZGlmLT5iaXRzdHJlYW1fdHlwZSA9PSAwKQogICAgICAgIHsKICAgICAgICAgICAgYWRp Zi0+YWRpZl9idWZmZXJfZnVsbG5lc3MgPSBmYWFkX2dldGJpdHMobGQsIDIwCiAgICAgICAgICAg ICAgICApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFkaWYtPmFkaWZfYnVmZmVyX2Z1 bGxuZXNzID0gMDsKICAgICAgICB9CgogICAgICAgIHByb2dyYW1fY29uZmlnX2VsZW1lbnQoJmFk aWYtPnBjZSwgbGQpOwogICAgfQp9CgoKdWludDhfdCBhZHRzX2ZyYW1lKGFkdHNfaGVhZGVyICph ZHRzLCBiaXRmaWxlICpsZCkKewoKICAgIGlmIChhZHRzX2ZpeGVkX2hlYWRlcihhZHRzLCBsZCkp CiAgICAgICAgcmV0dXJuIDU7CiAgICBhZHRzX3ZhcmlhYmxlX2hlYWRlcihhZHRzLCBsZCk7CiAg ICBhZHRzX2Vycm9yX2NoZWNrKGFkdHMsIGxkKTsKCiAgICByZXR1cm4gMDsKfQoKCnN0YXRpYyB1 aW50OF90IGFkdHNfZml4ZWRfaGVhZGVyKGFkdHNfaGVhZGVyICphZHRzLCBiaXRmaWxlICpsZCkK ewogICAgdWludDE2X3QgaTsKICAgIHVpbnQ4X3Qgc3luY19lcnIgPSAxOwoKCiAgICBmb3IgKGkg PSAwOyBpIDwgNzY4OyBpKyspCiAgICB7CiAgICAgICAgYWR0cy0+c3luY3dvcmQgPSAodWludDE2 X3QpZmFhZF9zaG93Yml0cyhsZCwgMTIpOwogICAgICAgIGlmIChhZHRzLT5zeW5jd29yZCAhPSAw eEZGRikKICAgICAgICB7CiAgICAgICAgICAgIGZhYWRfZ2V0Yml0cyhsZCwgOAogICAgICAgICAg ICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzeW5jX2VyciA9IDA7CiAgICAg ICAgICAgIGZhYWRfZ2V0Yml0cyhsZCwgMTIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAg IGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIGlmIChzeW5jX2VycikKICAgICAgICByZXR1cm4g NTsKCiAgICBhZHRzLT5pZCA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICk7CiAgICBhZHRzLT5s YXllciA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgMgogICAgICAgICk7CiAgICBhZHRzLT5w cm90ZWN0aW9uX2Fic2VudCA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICk7CiAgICBhZHRzLT5w cm9maWxlID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCAyCiAgICAgICAgKTsKICAgIGFkdHMt PnNmX2luZGV4ID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCA0CiAgICAgICAgKTsKICAgIGFk dHMtPnByaXZhdGVfYml0ID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAgKTsKICAgIGFkdHMtPmNo YW5uZWxfY29uZmlndXJhdGlvbiA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgMwogICAgICAg ICk7CiAgICBhZHRzLT5vcmlnaW5hbCA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICk7CiAgICBh ZHRzLT5ob21lID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAgKTsKICAgIGlmIChhZHRzLT5pZCA9 PSAwKQogICAgewogICAgICAgIGFkdHMtPmVtcGhhc2lzID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRz KGxkLCAyCiAgICAgICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCgpzdGF0aWMgdm9p ZCBhZHRzX3ZhcmlhYmxlX2hlYWRlcihhZHRzX2hlYWRlciAqYWR0cywgYml0ZmlsZSAqbGQpCnsK ICAgIGFkdHMtPmNvcHlyaWdodF9pZGVudGlmaWNhdGlvbl9iaXQgPSBmYWFkX2dldDFiaXQobGQK ICAgICAgICApOwogICAgYWR0cy0+Y29weXJpZ2h0X2lkZW50aWZpY2F0aW9uX3N0YXJ0ID0gZmFh ZF9nZXQxYml0KGxkCiAgICAgICAgKTsKICAgIGFkdHMtPmFhY19mcmFtZV9sZW5ndGggPSAodWlu dDE2X3QpZmFhZF9nZXRiaXRzKGxkLCAxMwogICAgICAgICk7CiAgICBhZHRzLT5hZHRzX2J1ZmZl cl9mdWxsbmVzcyA9ICh1aW50MTZfdClmYWFkX2dldGJpdHMobGQsIDExCiAgICAgICAgKTsKICAg IGFkdHMtPm5vX3Jhd19kYXRhX2Jsb2Nrc19pbl9mcmFtZSA9ICh1aW50OF90KWZhYWRfZ2V0Yml0 cyhsZCwgMgogICAgICAgICk7Cn0KCgpzdGF0aWMgdm9pZCBhZHRzX2Vycm9yX2NoZWNrKGFkdHNf aGVhZGVyICphZHRzLCBiaXRmaWxlICpsZCkKewogICAgaWYgKGFkdHMtPnByb3RlY3Rpb25fYWJz ZW50ID09IDApCiAgICB7CiAgICAgICAgYWR0cy0+Y3JjX2NoZWNrID0gKHVpbnQxNl90KWZhYWRf Z2V0Yml0cyhsZCwgMTYKICAgICAgICAgICAgKTsKICAgIH0KfQo=