From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6952 invoked by alias); 31 Jan 2003 14:36:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 6930 invoked by uid 71); 31 Jan 2003 14:36:01 -0000 Resent-Date: 31 Jan 2003 14:36:01 -0000 Resent-Message-ID: <20030131143601.6929.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, smh1008@cus.cam.ac.uk Received: (qmail 6788 invoked by uid 48); 31 Jan 2003 14:34:12 -0000 Message-Id: <20030131143412.6787.qmail@sources.redhat.com> Date: Fri, 31 Jan 2003 14:36:00 -0000 From: smh1008@cus.cam.ac.uk Reply-To: smh1008@cus.cam.ac.uk To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c/9525: incorrect code generation on SSE2 intrinsics X-SW-Source: 2003-01/txt/msg01758.txt.bz2 List-Id: >Number: 9525 >Category: c >Synopsis: incorrect code generation on SSE2 intrinsics >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: wrong-code >Submitter-Id: net >Arrival-Date: Fri Jan 31 14:36:01 UTC 2003 >Closed-Date: >Last-Modified: >Originator: D Huen >Release: gcc version 3.3 20030117 (prerelease) >Organization: >Environment: intel P4 on RH8.1 chandler beta >Description: The test file is a compilable snippet from a large program. Wrong code generation still occurs in this snippet although the error is different. When compiled this wrong code is generated:- main: pushl %ebp movl %esp, %ebp subl $72, %esp movdqa (%eax), %xmm0 andl $-16, %esp movdqa %xmm0, -40(%ebp) movaps %xmm0, %xmm2 movdqa -24(%ebp), %xmm0 pcmpeqd %xmm0, %xmm2 movdqa %xmm0, %xmm1 movdqa %xmm2, %xmm0 pand %xmm2, %xmm1 pandn -40(%ebp), %xmm0 por %xmm0, %xmm1 The _mm_add_epi32 is eliminated and the pandn then picks up the wrong value. In the original program from which this snippet came , the arguments of pandn are correct but swapped. >How-To-Repeat: gcc -O2 -S -march=pentium4 -mmmx -msse -msse2 test.c >Fix: I have worked around with inline assembler. >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="test.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="test.i" IyAxICJ0ZXN0LmMiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIKIyAxICJ0 ZXN0LmMiCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMv aW5jbHVkZS94bW1pbnRyaW4uaCIgMSAzIDQKIyAzOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS94bW1pbnRyaW4uaCIgMyA0CiMgMSAiL3Vzci9s b2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9tbWludHJpbi5o IiAxIDMgNAojIDM3ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu My9pbmNsdWRlL21taW50cmluLmgiIDMgNAp0eXBlZGVmIGludCBfX202NCBfX2F0dHJpYnV0ZV9f ICgoX19tb2RlX18gKF9fVjJTSV9fKSkpOwoKCnR5cGVkZWYgaW50IF9fdjJzaSBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fVjJTSV9fKSkpOwp0eXBlZGVmIGludCBfX3Y0aGkgX19hdHRyaWJ1 dGVfXyAoKF9fbW9kZV9fIChfX1Y0SElfXykpKTsKdHlwZWRlZiBpbnQgX192OHFpIF9fYXR0cmli dXRlX18gKChfX21vZGVfXyAoX19WOFFJX18pKSk7CgoKc3RhdGljIF9faW5saW5lIHZvaWQKX21t X2VtcHR5ICh2b2lkKQp7CiAgX19idWlsdGluX2lhMzJfZW1tcyAoKTsKfQoKCnN0YXRpYyBfX2lu bGluZSBfX202NApfbW1fY3Z0c2kzMl9zaTY0IChpbnQgX19pKQp7CiAgbG9uZyBsb25nIF9fdG1w ID0gKHVuc2lnbmVkIGludClfX2k7CiAgcmV0dXJuIChfX202NCkgX190bXA7Cn0KCgpzdGF0aWMg X19pbmxpbmUgaW50Cl9tbV9jdnRzaTY0X3NpMzIgKF9fbTY0IF9faSkKewogIGxvbmcgbG9uZyBf X3RtcCA9IChsb25nIGxvbmcpX19pOwogIHJldHVybiBfX3RtcDsKfQoKCgoKc3RhdGljIF9faW5s aW5lIF9fbTY0Cl9tbV9wYWNrc19waTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0 dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGFja3Nzd2IgKChfX3Y0aGkpX19tMSwgKF9fdjRo aSlfX20yKTsKfQoKCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9wYWNrc19waTMyIChfX202 NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGFj a3NzZHcgKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKfQoKCgoKc3RhdGljIF9faW5saW5l IF9fbTY0Cl9tbV9wYWNrc19wdTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJu IChfX202NCkgX19idWlsdGluX2lhMzJfcGFja3Vzd2IgKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlf X20yKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX3VucGFja2hpX3BpOCAoX19tNjQg X19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3B1bnBj a2hidyAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOwp9CgoKCnN0YXRpYyBfX2lubGluZSBf X202NApfbW1fdW5wYWNraGlfcGkxNiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVy biAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2h3ZCAoKF9fdjRoaSlfX20xLCAoX192NGhp KV9fbTIpOwp9CgoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fdW5wYWNraGlfcGkzMiAoX19t NjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3B1 bnBja2hkcSAoKF9fdjJzaSlfX20xLCAoX192MnNpKV9fbTIpOwp9CgoKCnN0YXRpYyBfX2lubGlu ZSBfX202NApfbW1fdW5wYWNrbG9fcGk4IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0 dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHVucGNrbGJ3ICgoX192OHFpKV9fbTEsIChfX3Y4 cWkpX19tMik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV91bnBhY2tsb19waTE2IChf X202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJf cHVucGNrbHdkICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cn0KCgoKc3RhdGljIF9faW5s aW5lIF9fbTY0Cl9tbV91bnBhY2tsb19waTMyIChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAg cmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHVucGNrbGRxICgoX192MnNpKV9fbTEsIChf X3Yyc2kpX19tMik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX2FkZF9waTggKF9fbTY0 IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wYWRk YiAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0 Cl9tbV9hZGRfcGkxNiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQp IF9fYnVpbHRpbl9pYTMyX3BhZGR3ICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cn0KCgpz dGF0aWMgX19pbmxpbmUgX19tNjQKX21tX2FkZF9waTMyIChfX202NCBfX20xLCBfX202NCBfX20y KQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGFkZGQgKChfX3Yyc2kpX19tMSwg KF9fdjJzaSlfX20yKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX2FkZHNfcGk4IChf X202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJf cGFkZHNiICgoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Cn0KCgoKc3RhdGljIF9faW5saW5l IF9fbTY0Cl9tbV9hZGRzX3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4g KF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wYWRkc3cgKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20y KTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX2FkZHNfcHU4IChfX202NCBfX20xLCBf X202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGFkZHVzYiAoKF9f djhxaSlfX20xLCAoX192OHFpKV9fbTIpOwp9CgoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1f YWRkc19wdTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19i dWlsdGluX2lhMzJfcGFkZHVzdyAoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOwp9CgoKc3Rh dGljIF9faW5saW5lIF9fbTY0Cl9tbV9zdWJfcGk4IChfX202NCBfX20xLCBfX202NCBfX20yKQp7 CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHN1YmIgKChfX3Y4cWkpX19tMSwgKF9f djhxaSlfX20yKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc3ViX3BpMTYgKF9fbTY0 IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc3Vi dyAoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0 Cl9tbV9zdWJfcGkzMiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQp IF9fYnVpbHRpbl9pYTMyX3BzdWJkICgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cn0KCgoK c3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zdWJzX3BpOCAoX19tNjQgX19tMSwgX19tNjQgX19t MikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzdWJzYiAoKF9fdjhxaSlfX20x LCAoX192OHFpKV9fbTIpOwp9CgoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc3Vic19waTE2 IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lh MzJfcHN1YnN3ICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cn0KCgoKc3RhdGljIF9faW5s aW5lIF9fbTY0Cl9tbV9zdWJzX3B1OCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVy biAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c2IgKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlf X20yKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX3N1YnNfcHUxNiAoX19tNjQgX19t MSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c3cg KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKfQoKCgoKc3RhdGljIF9faW5saW5lIF9fbTY0 Cl9tbV9tYWRkX3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0 KSBfX2J1aWx0aW5faWEzMl9wbWFkZHdkICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cn0K CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9tdWxoaV9waTE2IChfX202NCBfX20xLCBfX202 NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcG11bGh3ICgoX192NGhp KV9fbTEsIChfX3Y0aGkpX19tMik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9tdWxs b19waTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWls dGluX2lhMzJfcG11bGx3ICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cn0KCgpzdGF0aWMg X19pbmxpbmUgX19tNjQKX21tX3NsbF9waTE2IChfX202NCBfX20sIF9fbTY0IF9fY291bnQpCnsK ICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc2xsdyAoKF9fdjRoaSlfX20sIChsb25n IGxvbmcpX19jb3VudCk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc2xsaV9waTE2IChf X202NCBfX20sIGludCBfX2NvdW50KQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJf cHNsbHcgKChfX3Y0aGkpX19tLCBfX2NvdW50KTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApf bW1fc2xsX3BpMzIgKF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkKewogIHJldHVybiAoX19tNjQp IF9fYnVpbHRpbl9pYTMyX3BzbGxkICgoX192MnNpKV9fbSwgKGxvbmcgbG9uZylfX2NvdW50KTsK fQoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zbGxpX3BpMzIgKF9fbTY0IF9fbSwgaW50IF9f Y291bnQpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc2xsZCAoKF9fdjJzaSlf X20sIF9fY291bnQpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zbGxfc2k2NCAoX19t NjQgX19tLCBfX202NCBfX2NvdW50KQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJf cHNsbHEgKChsb25nIGxvbmcpX19tLCAobG9uZyBsb25nKV9fY291bnQpOwp9CgpzdGF0aWMgX19p bmxpbmUgX19tNjQKX21tX3NsbGlfc2k2NCAoX19tNjQgX19tLCBpbnQgX19jb3VudCkKewogIHJl dHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzbGxxICgobG9uZyBsb25nKV9fbSwgKGxvbmcg bG9uZylfX2NvdW50KTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc3JhX3BpMTYgKF9f bTY0IF9fbSwgX19tNjQgX19jb3VudCkKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMy X3BzcmF3ICgoX192NGhpKV9fbSwgKGxvbmcgbG9uZylfX2NvdW50KTsKfQoKc3RhdGljIF9faW5s aW5lIF9fbTY0Cl9tbV9zcmFpX3BpMTYgKF9fbTY0IF9fbSwgaW50IF9fY291bnQpCnsKICByZXR1 cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc3JhdyAoKF9fdjRoaSlfX20sIF9fY291bnQpOwp9 CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zcmFfcGkzMiAoX19tNjQgX19tLCBfX202NCBf X2NvdW50KQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHNyYWQgKChfX3Yyc2kp X19tLCAobG9uZyBsb25nKV9fY291bnQpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX3Ny YWlfcGkzMiAoX19tNjQgX19tLCBpbnQgX19jb3VudCkKewogIHJldHVybiAoX19tNjQpIF9fYnVp bHRpbl9pYTMyX3BzcmFkICgoX192MnNpKV9fbSwgX19jb3VudCk7Cn0KCgpzdGF0aWMgX19pbmxp bmUgX19tNjQKX21tX3NybF9waTE2IChfX202NCBfX20sIF9fbTY0IF9fY291bnQpCnsKICByZXR1 cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc3JsdyAoKF9fdjRoaSlfX20sIChsb25nIGxvbmcp X19jb3VudCk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc3JsaV9waTE2IChfX202NCBf X20sIGludCBfX2NvdW50KQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHNybHcg KChfX3Y0aGkpX19tLCBfX2NvdW50KTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc3Js X3BpMzIgKF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkKewogIHJldHVybiAoX19tNjQpIF9fYnVp bHRpbl9pYTMyX3BzcmxkICgoX192MnNpKV9fbSwgKGxvbmcgbG9uZylfX2NvdW50KTsKfQoKc3Rh dGljIF9faW5saW5lIF9fbTY0Cl9tbV9zcmxpX3BpMzIgKF9fbTY0IF9fbSwgaW50IF9fY291bnQp CnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc3JsZCAoKF9fdjJzaSlfX20sIF9f Y291bnQpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zcmxfc2k2NCAoX19tNjQgX19t LCBfX202NCBfX2NvdW50KQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHNybHEg KChsb25nIGxvbmcpX19tLCAobG9uZyBsb25nKV9fY291bnQpOwp9CgpzdGF0aWMgX19pbmxpbmUg X19tNjQKX21tX3NybGlfc2k2NCAoX19tNjQgX19tLCBpbnQgX19jb3VudCkKewogIHJldHVybiAo X19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzcmxxICgobG9uZyBsb25nKV9fbSwgKGxvbmcgbG9uZylf X2NvdW50KTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fYW5kX3NpNjQgKF9fbTY0IF9f bTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wYW5kICgo bG9uZyBsb25nKV9fbTEsIChsb25nIGxvbmcpX19tMik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9f bTY0Cl9tbV9hbmRub3Rfc2k2NCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAo X19tNjQpIF9fYnVpbHRpbl9pYTMyX3BhbmRuICgobG9uZyBsb25nKV9fbTEsIChsb25nIGxvbmcp X19tMik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX29yX3NpNjQgKF9fbTY0IF9fbTEs IF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BvciAoKGxvbmcg bG9uZylfX20xLCAobG9uZyBsb25nKV9fbTIpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9t bV94b3Jfc2k2NCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpX19i dWlsdGluX2lhMzJfcHhvciAoKGxvbmcgbG9uZylfX20xLCAobG9uZyBsb25nKV9fbTIpOwp9CgoK CnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fY21wZXFfcGk4IChfX202NCBfX20xLCBfX202NCBf X20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGNtcGVxYiAoKF9fdjhxaSlf X20xLCAoX192OHFpKV9fbTIpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX2NtcGd0X3Bp OCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9p YTMyX3BjbXBndGIgKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKfQoKCgpzdGF0aWMgX19p bmxpbmUgX19tNjQKX21tX2NtcGVxX3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCnsKICBy ZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wY21wZXF3ICgoX192NGhpKV9fbTEsIChfX3Y0 aGkpX19tMik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fY21wZ3RfcGkxNiAoX19tNjQg X19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BjbXBn dHcgKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19t NjQKX21tX2NtcGVxX3BpMzIgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9f bTY0KSBfX2J1aWx0aW5faWEzMl9wY21wZXFkICgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7 Cn0KCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fY21wZ3RfcGkzMiAoX19tNjQgX19tMSwgX19t NjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BjbXBndGQgKChfX3Yy c2kpX19tMSwgKF9fdjJzaSlfX20yKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc2V0 emVyb19zaTY0ICh2b2lkKQp7CiAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9tbXhfemVy byAoKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc2V0X3BpMzIgKGludCBfX2kxLCBp bnQgX19pMCkKewogIHVuaW9uIHsKICAgIF9fbTY0IF9fcTsKICAgIHN0cnVjdCB7CiAgICAgIHVu c2lnbmVkIGludCBfX2kwOwogICAgICB1bnNpZ25lZCBpbnQgX19pMTsKICAgIH0gX19zOwogIH0g X191OwoKICBfX3UuX19zLl9faTAgPSBfX2kwOwogIF9fdS5fX3MuX19pMSA9IF9faTE7CgogIHJl dHVybiBfX3UuX19xOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zZXRfcGkxNiAoc2hv cnQgX193Mywgc2hvcnQgX193Miwgc2hvcnQgX193MSwgc2hvcnQgX193MCkKewogIHVuc2lnbmVk IGludCBfX2kxID0gKHVuc2lnbmVkIHNob3J0KV9fdzMgPDwgMTYgfCAodW5zaWduZWQgc2hvcnQp X193MjsKICB1bnNpZ25lZCBpbnQgX19pMCA9ICh1bnNpZ25lZCBzaG9ydClfX3cxIDw8IDE2IHwg KHVuc2lnbmVkIHNob3J0KV9fdzA7CiAgcmV0dXJuIF9tbV9zZXRfcGkzMiAoX19pMSwgX19pMCk7 Cgp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zZXRfcGk4IChjaGFyIF9fYjcsIGNoYXIg X19iNiwgY2hhciBfX2I1LCBjaGFyIF9fYjQsCiAgICAgICAgICAgICBjaGFyIF9fYjMsIGNoYXIg X19iMiwgY2hhciBfX2IxLCBjaGFyIF9fYjApCnsKICB1bnNpZ25lZCBpbnQgX19pMSwgX19pMDsK CiAgX19pMSA9ICh1bnNpZ25lZCBjaGFyKV9fYjc7CiAgX19pMSA9IF9faTEgPDwgOCB8ICh1bnNp Z25lZCBjaGFyKV9fYjY7CiAgX19pMSA9IF9faTEgPDwgOCB8ICh1bnNpZ25lZCBjaGFyKV9fYjU7 CiAgX19pMSA9IF9faTEgPDwgOCB8ICh1bnNpZ25lZCBjaGFyKV9fYjQ7CgogIF9faTAgPSAodW5z aWduZWQgY2hhcilfX2IzOwogIF9faTAgPSBfX2kwIDw8IDggfCAodW5zaWduZWQgY2hhcilfX2Iy OwogIF9faTAgPSBfX2kwIDw8IDggfCAodW5zaWduZWQgY2hhcilfX2IxOwogIF9faTAgPSBfX2kw IDw8IDggfCAodW5zaWduZWQgY2hhcilfX2IwOwoKICByZXR1cm4gX21tX3NldF9waTMyIChfX2kx LCBfX2kwKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc2V0cl9waTMyIChpbnQgX19p MCwgaW50IF9faTEpCnsKICByZXR1cm4gX21tX3NldF9waTMyIChfX2kxLCBfX2kwKTsKfQoKc3Rh dGljIF9faW5saW5lIF9fbTY0Cl9tbV9zZXRyX3BpMTYgKHNob3J0IF9fdzAsIHNob3J0IF9fdzEs IHNob3J0IF9fdzIsIHNob3J0IF9fdzMpCnsKICByZXR1cm4gX21tX3NldF9waTE2IChfX3czLCBf X3cyLCBfX3cxLCBfX3cwKTsKfQoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zZXRyX3BpOCAo Y2hhciBfX2IwLCBjaGFyIF9fYjEsIGNoYXIgX19iMiwgY2hhciBfX2IzLAogICAgICAgICAgICAg IGNoYXIgX19iNCwgY2hhciBfX2I1LCBjaGFyIF9fYjYsIGNoYXIgX19iNykKewogIHJldHVybiBf bW1fc2V0X3BpOCAoX19iNywgX19iNiwgX19iNSwgX19iNCwgX19iMywgX19iMiwgX19iMSwgX19i MCk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX3NldDFfcGkzMiAoaW50IF9faSkKewog IHJldHVybiBfbW1fc2V0X3BpMzIgKF9faSwgX19pKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202 NApfbW1fc2V0MV9waTE2IChzaG9ydCBfX3cpCnsKICB1bnNpZ25lZCBpbnQgX19pID0gKHVuc2ln bmVkIHNob3J0KV9fdyA8PCAxNiB8ICh1bnNpZ25lZCBzaG9ydClfX3c7CiAgcmV0dXJuIF9tbV9z ZXQxX3BpMzIgKF9faSk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX3NldDFfcGk4IChj aGFyIF9fYikKewogIHVuc2lnbmVkIGludCBfX3cgPSAodW5zaWduZWQgY2hhcilfX2IgPDwgOCB8 ICh1bnNpZ25lZCBjaGFyKV9fYjsKICB1bnNpZ25lZCBpbnQgX19pID0gX193IDw8IDE2IHwgX193 OwogIHJldHVybiBfbW1fc2V0MV9waTMyIChfX2kpOwp9CiMgMzkgIi91c3IvbG9jYWwvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUveG1taW50cmluLmgiIDIgMyA0CgoK dHlwZWRlZiBpbnQgX19tMTI4IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyhfX1Y0U0ZfXykpKTsK Cgp0eXBlZGVmIGludCBfX3Y0c2YgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fKF9fVjRTRl9fKSkp Owp0eXBlZGVmIGludCBfX3Y0c2kgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fKF9fVjRTSV9fKSkp OwoKCgoKCgplbnVtIF9tbV9oaW50CnsKICBfTU1fSElOVF9UMCA9IDMsCiAgX01NX0hJTlRfVDEg PSAyLAogIF9NTV9ISU5UX1QyID0gMSwKICBfTU1fSElOVF9OVEEgPSAwCn07CiMgOTEgIi91c3Iv bG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUveG1taW50cmlu LmgiIDMgNApzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9hZGRfc3MgKF9fbTEyOCBfX0EsIF9f bTEyOCBfX0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfYWRkc3MgKChfX3Y0 c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX3N1Yl9z cyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5f aWEzMl9zdWJzcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKfQoKc3RhdGljIF9faW5saW5l IF9fbTEyOApfbW1fbXVsX3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChf X20xMjgpIF9fYnVpbHRpbl9pYTMyX211bHNzICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0IpOwp9 CgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9kaXZfc3MgKF9fbTEyOCBfX0EsIF9fbTEyOCBf X0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZGl2c3MgKChfX3Y0c2YpX19B LCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX3NxcnRfc3MgKF9f bTEyOCBfX0EpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc3FydHNzICgoX192 NHNmKV9fQSk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX3JjcF9zcyAoX19tMTI4IF9f QSkKewogIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9yY3BzcyAoKF9fdjRzZilfX0Ep Owp9CgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9yc3FydF9zcyAoX19tMTI4IF9fQSkKewog IHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9yc3FydHNzICgoX192NHNmKV9fQSk7Cn0K CnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX21pbl9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9f QikKewogIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9taW5zcyAoKF9fdjRzZilfX0Es IChfX3Y0c2YpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fbTEyOApfbW1fbWF4X3NzIChfX20x MjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21h eHNzICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0IpOwp9CgoKCnN0YXRpYyBfX2lubGluZSBfX20x MjgKX21tX2FkZF9wcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiAoX19tMTI4 KSBfX2J1aWx0aW5faWEzMl9hZGRwcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKfQoKc3Rh dGljIF9faW5saW5lIF9fbTEyOApfbW1fc3ViX3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7 CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3N1YnBzICgoX192NHNmKV9fQSwgKF9f djRzZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9tdWxfcHMgKF9fbTEyOCBf X0EsIF9fbTEyOCBfX0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbXVscHMg KChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21t X2Rpdl9wcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiAoX19tMTI4KSBfX2J1 aWx0aW5faWEzMl9kaXZwcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKfQoKc3RhdGljIF9f aW5saW5lIF9fbTEyOApfbW1fc3FydF9wcyAoX19tMTI4IF9fQSkKewogIHJldHVybiAoX19tMTI4 KSBfX2J1aWx0aW5faWEzMl9zcXJ0cHMgKChfX3Y0c2YpX19BKTsKfQoKc3RhdGljIF9faW5saW5l IF9fbTEyOApfbW1fcmNwX3BzIChfX20xMjggX19BKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVp bHRpbl9pYTMyX3JjcHBzICgoX192NHNmKV9fQSk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgK X21tX3JzcXJ0X3BzIChfX20xMjggX19BKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9p YTMyX3JzcXJ0cHMgKChfX3Y0c2YpX19BKTsKfQoKc3RhdGljIF9faW5saW5lIF9fbTEyOApfbW1f bWluX3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVp bHRpbl9pYTMyX21pbnBzICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0IpOwp9CgpzdGF0aWMgX19p bmxpbmUgX19tMTI4Cl9tbV9tYXhfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCnsKICByZXR1 cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbWF4cHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9f Qik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTEyOApfbW1fYW5kX3BzIChfX20xMjggX19BLCBf X20xMjggX19CKQp7CiAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2FuZHBzIChfX0EsIF9fQik7Cn0K CnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2FuZG5vdF9wcyAoX19tMTI4IF9fQSwgX19tMTI4 IF9fQikKewogIHJldHVybiBfX2J1aWx0aW5faWEzMl9hbmRucHMgKF9fQSwgX19CKTsKfQoKc3Rh dGljIF9faW5saW5lIF9fbTEyOApfbW1fb3JfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCnsK ICByZXR1cm4gX19idWlsdGluX2lhMzJfb3JwcyAoX19BLCBfX0IpOwp9CgpzdGF0aWMgX19pbmxp bmUgX19tMTI4Cl9tbV94b3JfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCnsKICByZXR1cm4g X19idWlsdGluX2lhMzJfeG9ycHMgKF9fQSwgX19CKTsKfQoKCgoKCnN0YXRpYyBfX2lubGluZSBf X20xMjgKX21tX2NtcGVxX3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChf X20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcGVxc3MgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7 Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2NtcGx0X3NzIChfX20xMjggX19BLCBfX20x MjggX19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcGx0c3MgKChfX3Y0 c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2NtcGxl X3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRp bl9pYTMyX2NtcGxlc3MgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lu bGluZSBfX20xMjgKX21tX2NtcGd0X3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0 dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21vdnNzICgoX192NHNmKSBfX0EsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19idWlsdGluX2lhMzJfY21wbHRzcyAoKF9fdjRzZikg X19CLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKF9fdjRzZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQSkpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19t MTI4Cl9tbV9jbXBnZV9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiAoX19t MTI4KSBfX2J1aWx0aW5faWEzMl9tb3ZzcyAoKF9fdjRzZikgX19BLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fYnVpbHRpbl9pYTMyX2NtcGxlc3MgKChfX3Y0c2YpIF9fQiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChfX3Y0c2YpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX0EpKTsKfQoKc3RhdGljIF9faW5saW5lIF9fbTEyOApfbW1f Y21wbmVxX3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9f YnVpbHRpbl9pYTMyX2NtcG5lcXNzICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0IpOwp9CgpzdGF0 aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9jbXBubHRfc3MgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0Ip CnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY21wbmx0c3MgKChfX3Y0c2YpX19B LCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2NtcG5sZV9zcyAo X19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEz Ml9jbXBubGVzcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKfQoKc3RhdGljIF9faW5saW5l IF9fbTEyOApfbW1fY21wbmd0X3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJu IChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21vdnNzICgoX192NHNmKSBfX0EsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19idWlsdGluX2lhMzJfY21wbmx0c3MgKChfX3Y0c2YpIF9f QiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoX192NHNmKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQSkpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19t MTI4Cl9tbV9jbXBuZ2Vfc3MgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCnsKICByZXR1cm4gKF9f bTEyOCkgX19idWlsdGluX2lhMzJfbW92c3MgKChfX3Y0c2YpIF9fQSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2J1aWx0aW5faWEzMl9jbXBubGVzcyAoKF9fdjRzZikgX19CLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChfX3Y0c2YpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19BKSk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgK X21tX2NtcG9yZF9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiAoX19tMTI4 KSBfX2J1aWx0aW5faWEzMl9jbXBvcmRzcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKfQoK c3RhdGljIF9faW5saW5lIF9fbTEyOApfbW1fY21wdW5vcmRfc3MgKF9fbTEyOCBfX0EsIF9fbTEy OCBfX0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY21wdW5vcmRzcyAoKF9f djRzZilfX0EsIChfX3Y0c2YpX19CKTsKfQoKCgoKCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21t X2NtcGVxX3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9f YnVpbHRpbl9pYTMyX2NtcGVxcHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRp YyBfX2lubGluZSBfX20xMjgKX21tX2NtcGx0X3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7 CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcGx0cHMgKChfX3Y0c2YpX19BLCAo X192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2NtcGxlX3BzIChfX20x MjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2Nt cGxlcHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20x MjgKX21tX2NtcGd0X3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChfX20x MjgpIF9fYnVpbHRpbl9pYTMyX2NtcGd0cHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0K CnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2NtcGdlX3BzIChfX20xMjggX19BLCBfX20xMjgg X19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcGdlcHMgKChfX3Y0c2Yp X19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2NtcG5lcV9w cyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5f aWEzMl9jbXBuZXFwcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKfQoKc3RhdGljIF9faW5s aW5lIF9fbTEyOApfbW1fY21wbmx0X3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0 dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcG5sdHBzICgoX192NHNmKV9fQSwgKF9fdjRz ZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9jbXBubGVfcHMgKF9fbTEyOCBf X0EsIF9fbTEyOCBfX0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY21wbmxl cHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgK X21tX2NtcG5ndF9wcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiAoX19tMTI4 KSBfX2J1aWx0aW5faWEzMl9jbXBuZ3RwcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKfQoK c3RhdGljIF9faW5saW5lIF9fbTEyOApfbW1fY21wbmdlX3BzIChfX20xMjggX19BLCBfX20xMjgg X19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcG5nZXBzICgoX192NHNm KV9fQSwgKF9fdjRzZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9jbXBvcmRf cHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGlu X2lhMzJfY21wb3JkcHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lu bGluZSBfX20xMjgKX21tX2NtcHVub3JkX3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAg cmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcHVub3JkcHMgKChfX3Y0c2YpX19BLCAo X192NHNmKV9fQik7Cn0KCgoKCnN0YXRpYyBfX2lubGluZSBpbnQKX21tX2NvbWllcV9zcyAoX19t MTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pZXEgKChf X3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBpbnQKX21tX2NvbWls dF9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiBfX2J1aWx0aW5faWEzMl9j b21pbHQgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBpbnQK X21tX2NvbWlsZV9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiBfX2J1aWx0 aW5faWEzMl9jb21pbGUgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lu bGluZSBpbnQKX21tX2NvbWlndF9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVy biBfX2J1aWx0aW5faWEzMl9jb21pZ3QgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0 YXRpYyBfX2lubGluZSBpbnQKX21tX2NvbWlnZV9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikK ewogIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pZ2UgKChfX3Y0c2YpX19BLCAoX192NHNmKV9f Qik7Cn0KCnN0YXRpYyBfX2lubGluZSBpbnQKX21tX2NvbWluZXFfc3MgKF9fbTEyOCBfX0EsIF9f bTEyOCBfX0IpCnsKICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taW5lcSAoKF9fdjRzZilfX0Es IChfX3Y0c2YpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIGludApfbW1fdWNvbWllcV9zcyAoX19t MTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taWVxICgo X192NHNmKV9fQSwgKF9fdjRzZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgaW50Cl9tbV91Y29t aWx0X3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIF9fYnVpbHRpbl9pYTMy X3Vjb21pbHQgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBp bnQKX21tX3Vjb21pbGVfc3MgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCnsKICByZXR1cm4gX19i dWlsdGluX2lhMzJfdWNvbWlsZSAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKfQoKc3RhdGlj IF9faW5saW5lIGludApfbW1fdWNvbWlndF9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewog IHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taWd0ICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0Ip Owp9CgpzdGF0aWMgX19pbmxpbmUgaW50Cl9tbV91Y29taWdlX3NzIChfX20xMjggX19BLCBfX20x MjggX19CKQp7CiAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pZ2UgKChfX3Y0c2YpX19BLCAo X192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBpbnQKX21tX3Vjb21pbmVxX3NzIChfX20x MjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pbmVxICgo X192NHNmKV9fQSwgKF9fdjRzZilfX0IpOwp9CgoKCnN0YXRpYyBfX2lubGluZSBpbnQKX21tX2N2 dHNzX3NpMzIgKF9fbTEyOCBfX0EpCnsKICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0c3Myc2kg KChfX3Y0c2YpIF9fQSk7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9jdnRwc19waTMy IChfX20xMjggX19BKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfY3Z0cHMycGkg KChfX3Y0c2YpIF9fQSk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgaW50Cl9tbV9jdnR0c3Nfc2kzMiAo X19tMTI4IF9fQSkKewogIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnR0c3Myc2kgKChfX3Y0c2Yp IF9fQSk7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9jdnR0cHNfcGkzMiAoX19tMTI4 IF9fQSkKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJwaSAoKF9fdjRz ZikgX19BKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2N2dHNpMzJfc3MgKF9fbTEy OCBfX0EsIGludCBfX0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0c2ky c3MgKChfX3Y0c2YpIF9fQSwgX19CKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9j dnRwaTMyX3BzIChfX20xMjggX19BLCBfX202NCBfX0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19i dWlsdGluX2lhMzJfY3Z0cGkycHMgKChfX3Y0c2YpIF9fQSwgKF9fdjJzaSlfX0IpOwp9CgoKc3Rh dGljIF9faW5saW5lIF9fbTEyOApfbW1fY3Z0cGkxNl9wcyAoX19tNjQgX19BKQp7CiAgX192NGhp IF9fc2lnbjsKICBfX3Yyc2kgX19oaXNpLCBfX2xvc2k7CiAgX192NHNmIF9fcjsKCgoKCiAgX19z aWduID0gKF9fdjRoaSkgX19idWlsdGluX2lhMzJfbW14X3plcm8gKCk7CiAgX19zaWduID0gX19i dWlsdGluX2lhMzJfcGNtcGd0dyAoX19zaWduLCAoX192NGhpKV9fQSk7CgoKICBfX2hpc2kgPSAo X192MnNpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tod2QgKChfX3Y0aGkpX19BLCBfX3NpZ24pOwog IF9fbG9zaSA9IChfX3Yyc2kpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2x3ZCAoKF9fdjRoaSlfX0Es IF9fc2lnbik7CgoKICBfX3IgPSAoX192NHNmKSBfX2J1aWx0aW5faWEzMl9zZXR6ZXJvcHMgKCk7 CiAgX19yID0gX19idWlsdGluX2lhMzJfY3Z0cGkycHMgKF9fciwgX19oaXNpKTsKICBfX3IgPSBf X2J1aWx0aW5faWEzMl9tb3ZsaHBzIChfX3IsIF9fcik7CiAgX19yID0gX19idWlsdGluX2lhMzJf Y3Z0cGkycHMgKF9fciwgX19sb3NpKTsKCiAgcmV0dXJuIChfX20xMjgpIF9fcjsKfQoKCnN0YXRp YyBfX2lubGluZSBfX20xMjgKX21tX2N2dHB1MTZfcHMgKF9fbTY0IF9fQSkKewogIF9fdjRoaSBf X3plcm8gPSAoX192NGhpKSBfX2J1aWx0aW5faWEzMl9tbXhfemVybyAoKTsKICBfX3Yyc2kgX19o aXNpLCBfX2xvc2k7CiAgX192NHNmIF9fcjsKCgogIF9faGlzaSA9IChfX3Yyc2kpIF9fYnVpbHRp bl9pYTMyX3B1bnBja2h3ZCAoKF9fdjRoaSlfX0EsIF9femVybyk7CiAgX19sb3NpID0gKF9fdjJz aSkgX19idWlsdGluX2lhMzJfcHVucGNrbHdkICgoX192NGhpKV9fQSwgX196ZXJvKTsKCgogIF9f ciA9IChfX3Y0c2YpIF9fYnVpbHRpbl9pYTMyX3NldHplcm9wcyAoKTsKICBfX3IgPSBfX2J1aWx0 aW5faWEzMl9jdnRwaTJwcyAoX19yLCBfX2hpc2kpOwogIF9fciA9IF9fYnVpbHRpbl9pYTMyX21v dmxocHMgKF9fciwgX19yKTsKICBfX3IgPSBfX2J1aWx0aW5faWEzMl9jdnRwaTJwcyAoX19yLCBf X2xvc2kpOwoKICByZXR1cm4gKF9fbTEyOCkgX19yOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTEy OApfbW1fY3Z0cGk4X3BzIChfX202NCBfX0EpCnsKICBfX3Y4cWkgX19zaWduOwoKCgoKICBfX3Np Z24gPSAoX192OHFpKSBfX2J1aWx0aW5faWEzMl9tbXhfemVybyAoKTsKICBfX3NpZ24gPSBfX2J1 aWx0aW5faWEzMl9wY21wZ3RiIChfX3NpZ24sIChfX3Y4cWkpX19BKTsKCgogIF9fQSA9IChfX202 NCkgX19idWlsdGluX2lhMzJfcHVucGNrbGJ3ICgoX192OHFpKV9fQSwgX19zaWduKTsKCiAgcmV0 dXJuIF9tbV9jdnRwaTE2X3BzKF9fQSk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9j dnRwdThfcHMoX19tNjQgX19BKQp7CiAgX192OHFpIF9femVybyA9IChfX3Y4cWkpIF9fYnVpbHRp bl9pYTMyX21teF96ZXJvICgpOwogIF9fQSA9IChfX202NCkgX19idWlsdGluX2lhMzJfcHVucGNr bGJ3ICgoX192OHFpKV9fQSwgX196ZXJvKTsKICByZXR1cm4gX21tX2N2dHB1MTZfcHMoX19BKTsK fQoKCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2N2dHBpMzJ4Ml9wcyhfX202NCBfX0EsIF9f bTY0IF9fQikKewogIF9fdjRzZiBfX3plcm8gPSAoX192NHNmKSBfX2J1aWx0aW5faWEzMl9zZXR6 ZXJvcHMgKCk7CiAgX192NHNmIF9fc2ZhID0gX19idWlsdGluX2lhMzJfY3Z0cGkycHMgKF9femVy bywgKF9fdjJzaSlfX0EpOwogIF9fdjRzZiBfX3NmYiA9IF9fYnVpbHRpbl9pYTMyX2N2dHBpMnBz IChfX3plcm8sIChfX3Yyc2kpX19CKTsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJf bW92bGhwcyAoX19zZmEsIF9fc2ZiKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fY3Z0 cHNfcGkxNihfX20xMjggX19BKQp7CiAgX192NHNmIF9faGlzZiA9IChfX3Y0c2YpX19BOwogIF9f djRzZiBfX2xvc2YgPSBfX2J1aWx0aW5faWEzMl9tb3ZobHBzIChfX2hpc2YsIF9faGlzZik7CiAg X192MnNpIF9faGlzaSA9IF9fYnVpbHRpbl9pYTMyX2N2dHBzMnBpIChfX2hpc2YpOwogIF9fdjJz aSBfX2xvc2kgPSBfX2J1aWx0aW5faWEzMl9jdnRwczJwaSAoX19sb3NmKTsKICByZXR1cm4gKF9f bTY0KSBfX2J1aWx0aW5faWEzMl9wYWNrc3NkdyAoX19oaXNpLCBfX2xvc2kpOwp9CgoKc3RhdGlj IF9faW5saW5lIF9fbTY0Cl9tbV9jdnRwc19waTgoX19tMTI4IF9fQSkKewogIF9fdjRoaSBfX3Rt cCA9IChfX3Y0aGkpIF9tbV9jdnRwc19waTE2IChfX0EpOwogIF9fdjRoaSBfX3plcm8gPSAoX192 NGhpKSBfX2J1aWx0aW5faWEzMl9tbXhfemVybyAoKTsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0 aW5faWEzMl9wYWNrc3N3YiAoX190bXAsIF9femVybyk7Cn0KIyA2MzUgIi91c3IvbG9jYWwvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUveG1taW50cmluLmgiIDMgNApz dGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV91bnBhY2toaV9wcyAoX19tMTI4IF9fQSwgX19tMTI4 IF9fQikKewogIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl91bnBja2hwcyAoKF9fdjRz ZilfX0EsIChfX3Y0c2YpX19CKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX3VucGFj a2xvX3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVp bHRpbl9pYTMyX3VucGNrbHBzICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0IpOwp9CgoKCnN0YXRp YyBfX2lubGluZSBfX20xMjgKX21tX2xvYWRoX3BpIChfX20xMjggX19BLCBfX202NCBjb25zdCAq X19QKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2xvYWRocHMgKChfX3Y0c2Yp X19BLCAoX192MnNpICopX19QKTsKfQoKCnN0YXRpYyBfX2lubGluZSB2b2lkCl9tbV9zdG9yZWhf cGkgKF9fbTY0ICpfX1AsIF9fbTEyOCBfX0EpCnsKICBfX2J1aWx0aW5faWEzMl9zdG9yZWhwcyAo KF9fdjJzaSAqKV9fUCwgKF9fdjRzZilfX0EpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTEyOApf bW1fbW92ZWhsX3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChfX20xMjgp IF9fYnVpbHRpbl9pYTMyX21vdmhscHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCgpz dGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9tb3ZlbGhfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBf X0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbW92bGhwcyAoKF9fdjRzZilf X0EsIChfX3Y0c2YpX19CKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9sb2FkbF9w aSAoX19tMTI4IF9fQSwgX19tNjQgY29uc3QgKl9fUCkKewogIHJldHVybiAoX19tMTI4KSBfX2J1 aWx0aW5faWEzMl9sb2FkbHBzICgoX192NHNmKV9fQSwgKF9fdjJzaSAqKV9fUCk7Cn0KCgpzdGF0 aWMgX19pbmxpbmUgdm9pZApfbW1fc3RvcmVsX3BpIChfX202NCAqX19QLCBfX20xMjggX19BKQp7 CiAgX19idWlsdGluX2lhMzJfc3RvcmVscHMgKChfX3Yyc2kgKilfX1AsIChfX3Y0c2YpX19BKTsK fQoKCnN0YXRpYyBfX2lubGluZSBpbnQKX21tX21vdmVtYXNrX3BzIChfX20xMjggX19BKQp7CiAg cmV0dXJuIF9fYnVpbHRpbl9pYTMyX21vdm1za3BzICgoX192NHNmKV9fQSk7Cn0KCgpzdGF0aWMg X19pbmxpbmUgdW5zaWduZWQgaW50Cl9tbV9nZXRjc3IgKHZvaWQpCnsKICByZXR1cm4gX19idWls dGluX2lhMzJfc3RteGNzciAoKTsKfQoKCnN0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKX01N X0dFVF9FWENFUFRJT05fU1RBVEUgKHZvaWQpCnsKICByZXR1cm4gX21tX2dldGNzcigpICYgMHgw MDNmOwp9CgpzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50Cl9NTV9HRVRfRVhDRVBUSU9OX01B U0sgKHZvaWQpCnsKICByZXR1cm4gX21tX2dldGNzcigpICYgMHgxZjgwOwp9CgpzdGF0aWMgX19p bmxpbmUgdW5zaWduZWQgaW50Cl9NTV9HRVRfUk9VTkRJTkdfTU9ERSAodm9pZCkKewogIHJldHVy biBfbW1fZ2V0Y3NyKCkgJiAweDYwMDA7Cn0KCnN0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQK X01NX0dFVF9GTFVTSF9aRVJPX01PREUgKHZvaWQpCnsKICByZXR1cm4gX21tX2dldGNzcigpICYg MHg4MDAwOwp9CgoKc3RhdGljIF9faW5saW5lIHZvaWQKX21tX3NldGNzciAodW5zaWduZWQgaW50 IF9fSSkKewogIF9fYnVpbHRpbl9pYTMyX2xkbXhjc3IgKF9fSSk7Cn0KCgpzdGF0aWMgX19pbmxp bmUgdm9pZApfTU1fU0VUX0VYQ0VQVElPTl9TVEFURSh1bnNpZ25lZCBpbnQgX19tYXNrKQp7CiAg X21tX3NldGNzcigoX21tX2dldGNzcigpICYgfjB4MDAzZikgfCBfX21hc2spOwp9CgpzdGF0aWMg X19pbmxpbmUgdm9pZApfTU1fU0VUX0VYQ0VQVElPTl9NQVNLICh1bnNpZ25lZCBpbnQgX19tYXNr KQp7CiAgX21tX3NldGNzcigoX21tX2dldGNzcigpICYgfjB4MWY4MCkgfCBfX21hc2spOwp9Cgpz dGF0aWMgX19pbmxpbmUgdm9pZApfTU1fU0VUX1JPVU5ESU5HX01PREUgKHVuc2lnbmVkIGludCBf X21vZGUpCnsKICBfbW1fc2V0Y3NyKChfbW1fZ2V0Y3NyKCkgJiB+MHg2MDAwKSB8IF9fbW9kZSk7 Cn0KCnN0YXRpYyBfX2lubGluZSB2b2lkCl9NTV9TRVRfRkxVU0hfWkVST19NT0RFICh1bnNpZ25l ZCBpbnQgX19tb2RlKQp7CiAgX21tX3NldGNzcigoX21tX2dldGNzcigpICYgfjB4ODAwMCkgfCBf X21vZGUpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTEyOApfbW1fbG9hZF9zcyAoZmxvYXQgY29u c3QgKl9fUCkKewogIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9sb2Fkc3MgKF9fUCk7 Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9sb2FkMV9wcyAoZmxvYXQgY29uc3QgKl9f UCkKewogIF9fdjRzZiBfX3RtcCA9IF9fYnVpbHRpbl9pYTMyX2xvYWRzcyAoX19QKTsKICByZXR1 cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc2h1ZnBzIChfX3RtcCwgX190bXAsICgoKDApIDw8 IDYpIHwgKCgwKSA8PCA0KSB8ICgoMCkgPDwgMikgfCAoMCkpKTsKfQoKc3RhdGljIF9faW5saW5l IF9fbTEyOApfbW1fbG9hZF9wczEgKGZsb2F0IGNvbnN0ICpfX1ApCnsKICByZXR1cm4gX21tX2xv YWQxX3BzIChfX1ApOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTEyOApfbW1fbG9hZF9wcyAoZmxv YXQgY29uc3QgKl9fUCkKewogIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9sb2FkYXBz IChfX1ApOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTEyOApfbW1fbG9hZHVfcHMgKGZsb2F0IGNv bnN0ICpfX1ApCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbG9hZHVwcyAoX19Q KTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2xvYWRyX3BzIChmbG9hdCBjb25zdCAq X19QKQp7CiAgX192NHNmIF9fdG1wID0gX19idWlsdGluX2lhMzJfbG9hZGFwcyAoX19QKTsKICBy ZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc2h1ZnBzIChfX3RtcCwgX190bXAsICgoKDAp IDw8IDYpIHwgKCgxKSA8PCA0KSB8ICgoMikgPDwgMikgfCAoMykpKTsKfQoKCnN0YXRpYyBfX2lu bGluZSBfX20xMjgKX21tX3NldF9zcyAoZmxvYXQgX19GKQp7CiAgcmV0dXJuIChfX20xMjgpIF9f YnVpbHRpbl9pYTMyX2xvYWRzcyAoJl9fRik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9t bV9zZXQxX3BzIChmbG9hdCBfX0YpCnsKICBfX3Y0c2YgX190bXAgPSBfX2J1aWx0aW5faWEzMl9s b2Fkc3MgKCZfX0YpOwogIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zaHVmcHMgKF9f dG1wLCBfX3RtcCwgKCgoMCkgPDwgNikgfCAoKDApIDw8IDQpIHwgKCgwKSA8PCAyKSB8ICgwKSkp Owp9CgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9zZXRfcHMxIChmbG9hdCBfX0YpCnsKICBy ZXR1cm4gX21tX3NldDFfcHMgKF9fRik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9z ZXRfcHMgKGZsb2F0IF9fWiwgZmxvYXQgX19ZLCBmbG9hdCBfX1gsIGZsb2F0IF9fVykKewogIHVu aW9uIHsKICAgIGZsb2F0IF9fYVs0XTsKICAgIF9fbTEyOCBfX3Y7CiAgfSBfX3U7CgogIF9fdS5f X2FbMF0gPSBfX1c7CiAgX191Ll9fYVsxXSA9IF9fWDsKICBfX3UuX19hWzJdID0gX19ZOwogIF9f dS5fX2FbM10gPSBfX1o7CgogIHJldHVybiBfX3UuX192Owp9CgoKc3RhdGljIF9faW5saW5lIF9f bTEyOApfbW1fc2V0cl9wcyAoZmxvYXQgX19aLCBmbG9hdCBfX1ksIGZsb2F0IF9fWCwgZmxvYXQg X19XKQp7CiAgcmV0dXJuIF9tbV9zZXRfcHMgKF9fVywgX19YLCBfX1ksIF9fWik7Cn0KCgpzdGF0 aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9zZXR6ZXJvX3BzICh2b2lkKQp7CiAgcmV0dXJuIChfX20x MjgpIF9fYnVpbHRpbl9pYTMyX3NldHplcm9wcyAoKTsKfQoKCnN0YXRpYyBfX2lubGluZSB2b2lk Cl9tbV9zdG9yZV9zcyAoZmxvYXQgKl9fUCwgX19tMTI4IF9fQSkKewogIF9fYnVpbHRpbl9pYTMy X3N0b3Jlc3MgKF9fUCwgKF9fdjRzZilfX0EpOwp9CgoKc3RhdGljIF9faW5saW5lIHZvaWQKX21t X3N0b3JlMV9wcyAoZmxvYXQgKl9fUCwgX19tMTI4IF9fQSkKewogIF9fdjRzZiBfX3ZhID0gKF9f djRzZilfX0E7CiAgX192NHNmIF9fdG1wID0gX19idWlsdGluX2lhMzJfc2h1ZnBzIChfX3ZhLCBf X3ZhLCAoKCgwKSA8PCA2KSB8ICgoMCkgPDwgNCkgfCAoKDApIDw8IDIpIHwgKDApKSk7CiAgX19i dWlsdGluX2lhMzJfc3RvcmVhcHMgKF9fUCwgX190bXApOwp9CgpzdGF0aWMgX19pbmxpbmUgdm9p ZApfbW1fc3RvcmVfcHMxIChmbG9hdCAqX19QLCBfX20xMjggX19BKQp7CiAgX21tX3N0b3JlMV9w cyAoX19QLCBfX0EpOwp9CgoKc3RhdGljIF9faW5saW5lIHZvaWQKX21tX3N0b3JlX3BzIChmbG9h dCAqX19QLCBfX20xMjggX19BKQp7CiAgX19idWlsdGluX2lhMzJfc3RvcmVhcHMgKF9fUCwgKF9f djRzZilfX0EpOwp9CgoKc3RhdGljIF9faW5saW5lIHZvaWQKX21tX3N0b3JldV9wcyAoZmxvYXQg Kl9fUCwgX19tMTI4IF9fQSkKewogIF9fYnVpbHRpbl9pYTMyX3N0b3JldXBzIChfX1AsIChfX3Y0 c2YpX19BKTsKfQoKCnN0YXRpYyBfX2lubGluZSB2b2lkCl9tbV9zdG9yZXJfcHMgKGZsb2F0ICpf X1AsIF9fbTEyOCBfX0EpCnsKICBfX3Y0c2YgX192YSA9IChfX3Y0c2YpX19BOwogIF9fdjRzZiBf X3RtcCA9IF9fYnVpbHRpbl9pYTMyX3NodWZwcyAoX192YSwgX192YSwgKCgoMCkgPDwgNikgfCAo KDEpIDw8IDQpIHwgKCgyKSA8PCAyKSB8ICgzKSkpOwogIF9fYnVpbHRpbl9pYTMyX3N0b3JlYXBz IChfX1AsIF9fdG1wKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX21vdmVfc3MgKF9f bTEyOCBfX0EsIF9fbTEyOCBfX0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJf bW92c3MgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KIyA5MzYgIi91c3IvbG9jYWwvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUveG1taW50cmluLmgiIDMgNApz dGF0aWMgX19pbmxpbmUgX19tNjQKX21tX21heF9waTE2IChfX202NCBfX0EsIF9fbTY0IF9fQikK ewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BtYXhzdyAoKF9fdjRoaSlfX0EsIChf X3Y0aGkpX19CKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fbWF4X3B1OCAoX19tNjQg X19BLCBfX202NCBfX0IpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wbWF4dWIg KChfX3Y4cWkpX19BLCAoX192OHFpKV9fQik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21t X21pbl9waTE2IChfX202NCBfX0EsIF9fbTY0IF9fQikKewogIHJldHVybiAoX19tNjQpIF9fYnVp bHRpbl9pYTMyX3BtaW5zdyAoKF9fdjRoaSlfX0EsIChfX3Y0aGkpX19CKTsKfQoKCnN0YXRpYyBf X2lubGluZSBfX202NApfbW1fbWluX3B1OCAoX19tNjQgX19BLCBfX202NCBfX0IpCnsKICByZXR1 cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wbWludWIgKChfX3Y4cWkpX19BLCAoX192OHFpKV9f Qik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgaW50Cl9tbV9tb3ZlbWFza19waTggKF9fbTY0IF9fQSkK ewogIHJldHVybiBfX2J1aWx0aW5faWEzMl9wbW92bXNrYiAoKF9fdjhxaSlfX0EpOwp9CgoKCnN0 YXRpYyBfX2lubGluZSBfX202NApfbW1fbXVsaGlfcHUxNiAoX19tNjQgX19BLCBfX202NCBfX0Ip CnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wbXVsaHV3ICgoX192NGhpKV9fQSwg KF9fdjRoaSlfX0IpOwp9CiMgOTk0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMy9pbmNsdWRlL3htbWludHJpbi5oIiAzIDQKc3RhdGljIF9faW5saW5lIHZvaWQK X21tX21hc2ttb3ZlX3NpNjQgKF9fbTY0IF9fQSwgX19tNjQgX19OLCBjaGFyICpfX1ApCnsKICBf X2J1aWx0aW5faWEzMl9tYXNrbW92cSAoKF9fdjhxaSlfX0EsIChfX3Y4cWkpX19OLCBfX1ApOwp9 CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9hdmdfcHU4IChfX202NCBfX0EsIF9fbTY0IF9f QikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BhdmdiICgoX192OHFpKV9fQSwg KF9fdjhxaSlfX0IpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9hdmdfcHUxNiAoX19t NjQgX19BLCBfX202NCBfX0IpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wYXZn dyAoKF9fdjRoaSlfX0EsIChfX3Y0aGkpX19CKTsKfQoKCgoKc3RhdGljIF9faW5saW5lIF9fbTY0 Cl9tbV9zYWRfcHU4IChfX202NCBfX0EsIF9fbTY0IF9fQikKewogIHJldHVybiAoX19tNjQpIF9f YnVpbHRpbl9pYTMyX3BzYWRidyAoKF9fdjhxaSlfX0EsIChfX3Y4cWkpX19CKTsKfQojIDEwMzcg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUveG1t aW50cmluLmgiIDMgNApzdGF0aWMgX19pbmxpbmUgdm9pZApfbW1fc3RyZWFtX3BpIChfX202NCAq X19QLCBfX202NCBfX0EpCnsKICBfX2J1aWx0aW5faWEzMl9tb3ZudHEgKCh1bnNpZ25lZCBsb25n IGxvbmcgKilfX1AsICh1bnNpZ25lZCBsb25nIGxvbmcpX19BKTsKfQoKCnN0YXRpYyBfX2lubGlu ZSB2b2lkCl9tbV9zdHJlYW1fcHMgKGZsb2F0ICpfX1AsIF9fbTEyOCBfX0EpCnsKICBfX2J1aWx0 aW5faWEzMl9tb3ZudHBzIChfX1AsIChfX3Y0c2YpX19BKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUg dm9pZApfbW1fc2ZlbmNlICh2b2lkKQp7CiAgX19idWlsdGluX2lhMzJfc2ZlbmNlICgpOwp9CgoK CgpzdGF0aWMgX19pbmxpbmUgdm9pZApfbW1fcGF1c2UgKHZvaWQpCnsKICBfX2FzbV9fIF9fdm9s YXRpbGVfXyAoInJlcDsgbm9wIiA6IDogKTsKfQojIDEwODMgIi91c3IvbG9jYWwvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUveG1taW50cmluLmgiIDMgNAp0eXBlZGVm IGludCBfX3YyZGYgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKFYyREYpKSk7CnR5cGVkZWYgaW50IF9f djJkaSBfX2F0dHJpYnV0ZV9fICgobW9kZSAoVjJESSkpKTsKdHlwZWRlZiBpbnQgX192NHNpIF9f YXR0cmlidXRlX18gKChtb2RlIChWNFNJKSkpOwp0eXBlZGVmIGludCBfX3Y4aGkgX19hdHRyaWJ1 dGVfXyAoKG1vZGUgKFY4SEkpKSk7CnR5cGVkZWYgaW50IF9fdjE2cWkgX19hdHRyaWJ1dGVfXyAo KG1vZGUgKFYxNlFJKSkpOwojIDEwOTcgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4zL2luY2x1ZGUveG1taW50cmluLmgiIDMgNApzdGF0aWMgX19pbmxpbmUgX192 MmRmCl9tbV9sb2FkX3NkIChkb3VibGUgY29uc3QgKl9fUCkKewogIHJldHVybiAoX192MmRmKSBf X2J1aWx0aW5faWEzMl9sb2Fkc2QgKF9fUCk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9t bV9sb2FkMV9wZCAoZG91YmxlIGNvbnN0ICpfX1ApCnsKICBfX3YyZGYgX190bXAgPSBfX2J1aWx0 aW5faWEzMl9sb2Fkc2QgKF9fUCk7CiAgcmV0dXJuIChfX3YyZGYpIF9fYnVpbHRpbl9pYTMyX3No dWZwZCAoX190bXAsIF9fdG1wLCAoKCgwKSA8PCAxKSB8ICgwKSkpOwp9CgpzdGF0aWMgX19pbmxp bmUgX192MmRmCl9tbV9sb2FkX3BkMSAoZG91YmxlIGNvbnN0ICpfX1ApCnsKICByZXR1cm4gX21t X2xvYWQxX3BkIChfX1ApOwp9CgoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fbG9hZF9wZCAo ZG91YmxlIGNvbnN0ICpfX1ApCnsKICByZXR1cm4gKF9fdjJkZikgX19idWlsdGluX2lhMzJfbG9h ZGFwZCAoX19QKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX2xvYWR1X3BkIChkb3Vi bGUgY29uc3QgKl9fUCkKewogIHJldHVybiAoX192MmRmKSBfX2J1aWx0aW5faWEzMl9sb2FkdXBk IChfX1ApOwp9CgoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fbG9hZHJfcGQgKGRvdWJsZSBj b25zdCAqX19QKQp7CiAgX192MmRmIF9fdG1wID0gX19idWlsdGluX2lhMzJfbG9hZGFwZCAoX19Q KTsKICByZXR1cm4gKF9fdjJkZikgX19idWlsdGluX2lhMzJfc2h1ZnBkIChfX3RtcCwgX190bXAs ICgoKDApIDw8IDEpIHwgKDEpKSk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV9zZXRf c2QgKGRvdWJsZSBfX0YpCnsKICByZXR1cm4gKF9fdjJkZikgX19idWlsdGluX2lhMzJfbG9hZHNk ICgmX19GKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX3NldDFfcGQgKGRvdWJsZSBf X0YpCnsKICBfX3YyZGYgX190bXAgPSBfX2J1aWx0aW5faWEzMl9sb2Fkc2QgKCZfX0YpOwogIHJl dHVybiAoX192MmRmKSBfX2J1aWx0aW5faWEzMl9zaHVmcGQgKF9fdG1wLCBfX3RtcCwgKCgoMCkg PDwgMSkgfCAoMCkpKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fc2V0X3BkMSAoZG91 YmxlIF9fRikKewogIHJldHVybiBfbW1fc2V0MV9wZCAoX19GKTsKfQoKCnN0YXRpYyBfX2lubGlu ZSBfX3YyZGYKX21tX3NldF9wZCAoZG91YmxlIF9fWiwgZG91YmxlIF9fWSkKewogIHVuaW9uIHsK ICAgIGRvdWJsZSBfX2FbMl07CiAgICBfX3YyZGYgX192OwogIH0gX191OwoKICBfX3UuX19hWzBd ID0gX19ZOwogIF9fdS5fX2FbMV0gPSBfX1o7CgogIHJldHVybiBfX3UuX192Owp9CgoKc3RhdGlj IF9faW5saW5lIF9fdjJkZgpfbW1fc2V0cl9wZCAoZG91YmxlIF9fWiwgZG91YmxlIF9fWSkKewog IHJldHVybiBfbW1fc2V0X3BkIChfX1ksIF9fWik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX192MmRm Cl9tbV9zZXR6ZXJvX3BkICh2b2lkKQp7CiAgcmV0dXJuIChfX3YyZGYpIF9fYnVpbHRpbl9pYTMy X3NldHplcm9wZCAoKTsKfQoKCnN0YXRpYyBfX2lubGluZSB2b2lkCl9tbV9zdG9yZV9zZCAoZG91 YmxlICpfX1AsIF9fdjJkZiBfX0EpCnsKICBfX2J1aWx0aW5faWEzMl9zdG9yZXNkIChfX1AsIChf X3YyZGYpX19BKTsKfQoKCnN0YXRpYyBfX2lubGluZSB2b2lkCl9tbV9zdG9yZTFfcGQgKGRvdWJs ZSAqX19QLCBfX3YyZGYgX19BKQp7CiAgX192MmRmIF9fdmEgPSAoX192MmRmKV9fQTsKICBfX3Yy ZGYgX190bXAgPSBfX2J1aWx0aW5faWEzMl9zaHVmcGQgKF9fdmEsIF9fdmEsICgoKDApIDw8IDEp IHwgKDApKSk7CiAgX19idWlsdGluX2lhMzJfc3RvcmVhcGQgKF9fUCwgX190bXApOwp9CgpzdGF0 aWMgX19pbmxpbmUgdm9pZApfbW1fc3RvcmVfcGQxIChkb3VibGUgKl9fUCwgX192MmRmIF9fQSkK ewogIF9tbV9zdG9yZTFfcGQgKF9fUCwgX19BKTsKfQoKCnN0YXRpYyBfX2lubGluZSB2b2lkCl9t bV9zdG9yZV9wZCAoZG91YmxlICpfX1AsIF9fdjJkZiBfX0EpCnsKICBfX2J1aWx0aW5faWEzMl9z dG9yZWFwZCAoX19QLCAoX192MmRmKV9fQSk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgdm9pZApfbW1f c3RvcmV1X3BkIChkb3VibGUgKl9fUCwgX192MmRmIF9fQSkKewogIF9fYnVpbHRpbl9pYTMyX3N0 b3JldXBkIChfX1AsIChfX3YyZGYpX19BKTsKfQoKCnN0YXRpYyBfX2lubGluZSB2b2lkCl9tbV9z dG9yZXJfcGQgKGRvdWJsZSAqX19QLCBfX3YyZGYgX19BKQp7CiAgX192MmRmIF9fdmEgPSAoX192 MmRmKV9fQTsKICBfX3YyZGYgX190bXAgPSBfX2J1aWx0aW5faWEzMl9zaHVmcGQgKF9fdmEsIF9f dmEsICgoKDApIDw8IDEpIHwgKDEpKSk7CiAgX19idWlsdGluX2lhMzJfc3RvcmVhcGQgKF9fUCwg X190bXApOwp9CgoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fbW92ZV9zZCAoX192MmRmIF9f QSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKSBfX2J1aWx0aW5faWEzMl9tb3ZzZCAo KF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21t X2FkZF9wZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKV9fYnVp bHRpbl9pYTMyX2FkZHBkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19p bmxpbmUgX192MmRmCl9tbV9hZGRfc2QgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1 cm4gKF9fdjJkZilfX2J1aWx0aW5faWEzMl9hZGRzZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19C KTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fc3ViX3BkIChfX3YyZGYgX19BLCBfX3Yy ZGYgX19CKQp7CiAgcmV0dXJuIChfX3YyZGYpX19idWlsdGluX2lhMzJfc3VicGQgKChfX3YyZGYp X19BLCAoX192MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX3N1Yl9zZCAo X192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMy X3N1YnNkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192 MmRmCl9tbV9tdWxfcGQgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1cm4gKF9fdjJk ZilfX2J1aWx0aW5faWEzMl9tdWxwZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoKc3Rh dGljIF9faW5saW5lIF9fdjJkZgpfbW1fbXVsX3NkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7 CiAgcmV0dXJuIChfX3YyZGYpX19idWlsdGluX2lhMzJfbXVsc2QgKChfX3YyZGYpX19BLCAoX192 MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX2Rpdl9wZCAoX192MmRmIF9f QSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMyX2RpdnBkICgo X192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV9k aXZfc2QgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1cm4gKF9fdjJkZilfX2J1aWx0 aW5faWEzMl9kaXZzZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoKc3RhdGljIF9faW5s aW5lIF9fdjJkZgpfbW1fc3FydF9wZCAoX192MmRmIF9fQSkKewogIHJldHVybiAoX192MmRmKV9f YnVpbHRpbl9pYTMyX3NxcnRwZCAoKF9fdjJkZilfX0EpOwp9CgoKc3RhdGljIF9faW5saW5lIF9f djJkZgpfbW1fc3FydF9zZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIF9fdjJkZiBfX3Rt cCA9IF9fYnVpbHRpbl9pYTMyX21vdnNkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwogIHJl dHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMyX3NxcnRzZCAoKF9fdjJkZilfX3RtcCk7Cn0KCnN0 YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX21pbl9wZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikK ewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMyX21pbnBkICgoX192MmRmKV9fQSwgKF9f djJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV9taW5fc2QgKF9fdjJkZiBf X0EsIF9fdjJkZiBfX0IpCnsKICByZXR1cm4gKF9fdjJkZilfX2J1aWx0aW5faWEzMl9taW5zZCAo KF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1f bWF4X3BkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIChfX3YyZGYpX19idWls dGluX2lhMzJfbWF4cGQgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lu bGluZSBfX3YyZGYKX21tX21heF9zZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVy biAoX192MmRmKV9fYnVpbHRpbl9pYTMyX21heHNkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0Ip Owp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV9hbmRfcGQgKF9fdjJkZiBfX0EsIF9fdjJk ZiBfX0IpCnsKICByZXR1cm4gKF9fdjJkZilfX2J1aWx0aW5faWEzMl9hbmRwZCAoKF9fdjJkZilf X0EsIChfX3YyZGYpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fYW5kbm90X3Bk IChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIChfX3YyZGYpX19idWlsdGluX2lh MzJfYW5kbnBkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUg X192MmRmCl9tbV9vcl9wZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192 MmRmKV9fYnVpbHRpbl9pYTMyX29ycGQgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7Cn0KCnN0 YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX3hvcl9wZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikK ewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMyX3hvcnBkICgoX192MmRmKV9fQSwgKF9f djJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV9jbXBlcV9wZCAoX192MmRm IF9fQSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMyX2NtcGVx cGQgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGYK X21tX2NtcGx0X3BkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIChfX3YyZGYp X19idWlsdGluX2lhMzJfY21wbHRwZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoKc3Rh dGljIF9faW5saW5lIF9fdjJkZgpfbW1fY21wbGVfcGQgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0Ip CnsKICByZXR1cm4gKF9fdjJkZilfX2J1aWx0aW5faWEzMl9jbXBsZXBkICgoX192MmRmKV9fQSwg KF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV9jbXBndF9wZCAoX192 MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMyX2Nt cGd0cGQgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3Yy ZGYKX21tX2NtcGdlX3BkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIChfX3Yy ZGYpX19idWlsdGluX2lhMzJfY21wZ2VwZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoK c3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fY21wbmVxX3BkIChfX3YyZGYgX19BLCBfX3YyZGYg X19CKQp7CiAgcmV0dXJuIChfX3YyZGYpX19idWlsdGluX2lhMzJfY21wbmVxcGQgKChfX3YyZGYp X19BLCAoX192MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX2NtcG5sdF9w ZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9p YTMyX2NtcG5sdHBkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxp bmUgX192MmRmCl9tbV9jbXBubGVfcGQgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1 cm4gKF9fdjJkZilfX2J1aWx0aW5faWEzMl9jbXBubGVwZCAoKF9fdjJkZilfX0EsIChfX3YyZGYp X19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fY21wbmd0X3BkIChfX3YyZGYgX19B LCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIChfX3YyZGYpX19idWlsdGluX2lhMzJfY21wbmd0cGQg KChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21t X2NtcG5nZV9wZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKV9f YnVpbHRpbl9pYTMyX2NtcG5nZXBkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0 aWMgX19pbmxpbmUgX192MmRmCl9tbV9jbXBvcmRfcGQgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0Ip CnsKICByZXR1cm4gKF9fdjJkZilfX2J1aWx0aW5faWEzMl9jbXBvcmRwZCAoKF9fdjJkZilfX0Es IChfX3YyZGYpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fY21wdW5vcmRfcGQg KF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1cm4gKF9fdjJkZilfX2J1aWx0aW5faWEz Ml9jbXB1bm9yZHBkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxp bmUgX192MmRmCl9tbV9jbXBlcV9zZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVy biAoX192MmRmKV9fYnVpbHRpbl9pYTMyX2NtcGVxc2QgKChfX3YyZGYpX19BLCAoX192MmRmKV9f Qik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX2NtcGx0X3NkIChfX3YyZGYgX19BLCBf X3YyZGYgX19CKQp7CiAgcmV0dXJuIChfX3YyZGYpX19idWlsdGluX2lhMzJfY21wbHRzZCAoKF9f djJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fY21w bGVfc2QgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1cm4gKF9fdjJkZilfX2J1aWx0 aW5faWEzMl9jbXBsZXNkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19p bmxpbmUgX192MmRmCl9tbV9jbXBndF9zZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJl dHVybiAoX192MmRmKSBfX2J1aWx0aW5faWEzMl9tb3ZzZCAoKF9fdjJkZikgX19BLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWlsdGluX2lhMzJfY21wbHRzZCAoKF9fdjJk ZikgX19CLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChfX3YyZGYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BKSk7Cn0KCnN0YXRpYyBfX2lubGlu ZSBfX3YyZGYKX21tX2NtcGdlX3NkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJu IChfX3YyZGYpIF9fYnVpbHRpbl9pYTMyX21vdnNkICgoX192MmRmKSBfX0EsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5faWEzMl9jbXBsZXNkICgoX192MmRmKSBf X0IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKF9fdjJkZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0EpKTsKfQoKc3RhdGljIF9faW5saW5lIF9f djJkZgpfbW1fY21wbmVxX3NkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIChf X3YyZGYpX19idWlsdGluX2lhMzJfY21wbmVxc2QgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7 Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX2NtcG5sdF9zZCAoX192MmRmIF9fQSwgX192 MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMyX2NtcG5sdHNkICgoX192 MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV9jbXBu bGVfc2QgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1cm4gKF9fdjJkZilfX2J1aWx0 aW5faWEzMl9jbXBubGVzZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoKc3RhdGljIF9f aW5saW5lIF9fdjJkZgpfbW1fY21wbmd0X3NkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAg cmV0dXJuIChfX3YyZGYpIF9fYnVpbHRpbl9pYTMyX21vdnNkICgoX192MmRmKSBfX0EsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5faWEzMl9jbXBubHRzZCAoKF9f djJkZikgX19CLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoX192MmRmKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0EpKTsKfQoKc3RhdGljIF9f aW5saW5lIF9fdjJkZgpfbW1fY21wbmdlX3NkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAg cmV0dXJuIChfX3YyZGYpIF9fYnVpbHRpbl9pYTMyX21vdnNkICgoX192MmRmKSBfX0EsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5faWEzMl9jbXBubGVzZCAoKF9f djJkZikgX19CLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoX192MmRmKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0EpKTsKfQoKc3RhdGljIF9f aW5saW5lIF9fdjJkZgpfbW1fY21wb3JkX3NkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAg cmV0dXJuIChfX3YyZGYpX19idWlsdGluX2lhMzJfY21wb3Jkc2QgKChfX3YyZGYpX19BLCAoX192 MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX2NtcHVub3JkX3NkIChfX3Yy ZGYgX19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIChfX3YyZGYpX19idWlsdGluX2lhMzJfY21w dW5vcmRzZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIGlu dApfbW1fY29taWVxX3NkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIF9fYnVp bHRpbl9pYTMyX2NvbWlzZGVxICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMg X19pbmxpbmUgaW50Cl9tbV9jb21pbHRfc2QgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICBy ZXR1cm4gX19idWlsdGluX2lhMzJfY29taXNkbHQgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7 Cn0KCnN0YXRpYyBfX2lubGluZSBpbnQKX21tX2NvbWlsZV9zZCAoX192MmRmIF9fQSwgX192MmRm IF9fQikKewogIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pc2RsZSAoKF9fdjJkZilfX0EsIChf X3YyZGYpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIGludApfbW1fY29taWd0X3NkIChfX3YyZGYg X19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWlzZGd0ICgoX192 MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgaW50Cl9tbV9jb21pZ2Vf c2QgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1cm4gX19idWlsdGluX2lhMzJfY29t aXNkZ2UgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBpbnQK X21tX2NvbWluZXFfc2QgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1cm4gX19idWls dGluX2lhMzJfY29taXNkbmVxICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMg X19pbmxpbmUgaW50Cl9tbV91Y29taWVxX3NkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAg cmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RlcSAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19C KTsKfQoKc3RhdGljIF9faW5saW5lIGludApfbW1fdWNvbWlsdF9zZCAoX192MmRmIF9fQSwgX192 MmRmIF9fQikKewogIHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taXNkbHQgKChfX3YyZGYpX19B LCAoX192MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBpbnQKX21tX3Vjb21pbGVfc2QgKF9f djJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWlzZGxl ICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgaW50Cl9tbV91 Y29taWd0X3NkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIF9fYnVpbHRpbl9p YTMyX3Vjb21pc2RndCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoKc3RhdGljIF9faW5s aW5lIGludApfbW1fdWNvbWlnZV9zZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVy biBfX2J1aWx0aW5faWEzMl91Y29taXNkZ2UgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7Cn0K CnN0YXRpYyBfX2lubGluZSBpbnQKX21tX3Vjb21pbmVxX3NkIChfX3YyZGYgX19BLCBfX3YyZGYg X19CKQp7CiAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RuZXEgKChfX3YyZGYpX19BLCAo X192MmRmKV9fQik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fbG9hZF9zaTEyOCAo X192MmRpIGNvbnN0ICpfX1ApCnsKICByZXR1cm4gKF9fdjJkaSkgX19idWlsdGluX2lhMzJfbG9h ZGRxYSAoKGNoYXIgY29uc3QgKilfX1ApOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9s b2FkdV9zaTEyOCAoX192MmRpIGNvbnN0ICpfX1ApCnsKICByZXR1cm4gKF9fdjJkaSkgX19idWls dGluX2lhMzJfbG9hZGRxdSAoKGNoYXIgY29uc3QgKilfX1ApOwp9CgpzdGF0aWMgX19pbmxpbmUg X192MmRpCl9tbV9sb2FkbF9lcGk2NCAoX192MmRpIGNvbnN0ICpfX1ApCnsKICByZXR1cm4gKF9f djJkaSkgX19idWlsdGluX2lhMzJfbW92cTJkcSAoKih1bnNpZ25lZCBsb25nIGxvbmcgKilfX1Ap Owp9CgpzdGF0aWMgX19pbmxpbmUgdm9pZApfbW1fc3RvcmVfc2kxMjggKF9fdjJkaSAqX19QLCBf X3YyZGkgX19CKQp7CiAgX19idWlsdGluX2lhMzJfc3RvcmVkcWEgKChjaGFyICopX19QLCAoX192 MTZxaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgdm9pZApfbW1fc3RvcmV1X3NpMTI4IChfX3Yy ZGkgKl9fUCwgX192MmRpIF9fQikKewogIF9fYnVpbHRpbl9pYTMyX3N0b3JlZHF1ICgoY2hhciAq KV9fUCwgKF9fdjE2cWkpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIHZvaWQKX21tX3N0b3JlbF9l cGk2NCAoX192MmRpICpfX1AsIF9fdjJkaSBfX0IpCnsKICAqKGxvbmcgbG9uZyAqKV9fUCA9IF9f YnVpbHRpbl9pYTMyX21vdmRxMnEgKChfX3YyZGkpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9f djJkaQpfbW1fbW92ZV9lcGk2NCAoX192MmRpIF9fQSkKewogIHJldHVybiAoX192MmRpKSBfX2J1 aWx0aW5faWEzMl9tb3ZxICgoX192MmRpKV9fQSk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX192MmRp Cl9tbV9zZXR6ZXJvX3NpMTI4ICh2b2lkKQp7CiAgcmV0dXJuIChfX3YyZGkpIF9fYnVpbHRpbl9p YTMyX3NldHplcm8xMjggKCk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3NldF9lcGk2 NCAoX19tNjQgX19BLCBfX202NCBfX0IpCnsKICBfX3YyZGkgX190bXAgPSAoX192MmRpKV9fYnVp bHRpbl9pYTMyX21vdnEyZHEgKCh1bnNpZ25lZCBsb25nIGxvbmcpX19BKTsKICBfX3YyZGkgX190 bXAyID0gKF9fdjJkaSlfX2J1aWx0aW5faWEzMl9tb3ZxMmRxICgodW5zaWduZWQgbG9uZyBsb25n KV9fQik7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcHVucGNrbHFkcTEyOCAoX190 bXAyLCBfX3RtcCk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9zZXRfZXBpMzIgKGlu dCBfX1osIGludCBfX1ksIGludCBfX1gsIGludCBfX1cpCnsKICB1bmlvbiB7CiAgICBpbnQgX19h WzRdOwogICAgX192MmRpIF9fdjsKICB9IF9fdTsKCiAgX191Ll9fYVswXSA9IF9fVzsKICBfX3Uu X19hWzFdID0gX19YOwogIF9fdS5fX2FbMl0gPSBfX1k7CiAgX191Ll9fYVszXSA9IF9fWjsKCiAg cmV0dXJuIF9fdS5fX3Y7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3NldF9lcGkxNiAo c2hvcnQgX19aLCBzaG9ydCBfX1ksIHNob3J0IF9fWCwgc2hvcnQgX19XLAogICAgICAgICAgICAg ICBzaG9ydCBfX1YsIHNob3J0IF9fVSwgc2hvcnQgX19ULCBzaG9ydCBfX1MpCnsKICB1bmlvbiB7 CiAgICBzaG9ydCBfX2FbOF07CiAgICBfX3YyZGkgX192OwogIH0gX191OwoKICBfX3UuX19hWzBd ID0gX19TOwogIF9fdS5fX2FbMV0gPSBfX1Q7CiAgX191Ll9fYVsyXSA9IF9fVTsKICBfX3UuX19h WzNdID0gX19WOwogIF9fdS5fX2FbNF0gPSBfX1c7CiAgX191Ll9fYVs1XSA9IF9fWDsKICBfX3Uu X19hWzZdID0gX19ZOwogIF9fdS5fX2FbN10gPSBfX1o7CgogIHJldHVybiBfX3UuX192Owp9CgoK c3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fc2V0X2VwaTggKGNoYXIgX19aLCBjaGFyIF9fWSwg Y2hhciBfX1gsIGNoYXIgX19XLAogICAgICAgICAgICAgIGNoYXIgX19WLCBjaGFyIF9fVSwgY2hh ciBfX1QsIGNoYXIgX19TLAogICAgICAgICAgICAgIGNoYXIgX19aMSwgY2hhciBfX1kxLCBjaGFy IF9fWDEsIGNoYXIgX19XMSwKICAgICAgICAgICAgICBjaGFyIF9fVjEsIGNoYXIgX19VMSwgY2hh ciBfX1QxLCBjaGFyIF9fUzEpCnsKICB1bmlvbiB7CiAgICBjaGFyIF9fYVsxNl07CiAgICBfX3Yy ZGkgX192OwogIH0gX191OwoKICBfX3UuX19hWzBdID0gX19TMTsKICBfX3UuX19hWzFdID0gX19U MTsKICBfX3UuX19hWzJdID0gX19VMTsKICBfX3UuX19hWzNdID0gX19WMTsKICBfX3UuX19hWzRd ID0gX19XMTsKICBfX3UuX19hWzVdID0gX19YMTsKICBfX3UuX19hWzZdID0gX19ZMTsKICBfX3Uu X19hWzddID0gX19aMTsKICBfX3UuX19hWzhdID0gX19TOwogIF9fdS5fX2FbOV0gPSBfX1Q7CiAg X191Ll9fYVsxMF0gPSBfX1U7CiAgX191Ll9fYVsxMV0gPSBfX1Y7CiAgX191Ll9fYVsxMl0gPSBf X1c7CiAgX191Ll9fYVsxM10gPSBfX1g7CiAgX191Ll9fYVsxNF0gPSBfX1k7CiAgX191Ll9fYVsx NV0gPSBfX1o7CgogIHJldHVybiBfX3UuX192Owp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9t bV9zZXQxX2VwaTY0IChfX202NCBfX0EpCnsKICBfX3YyZGkgX190bXAgPSAoX192MmRpKV9fYnVp bHRpbl9pYTMyX21vdnEyZHEgKCh1bnNpZ25lZCBsb25nIGxvbmcpX19BKTsKICByZXR1cm4gKF9f djJkaSlfX2J1aWx0aW5faWEzMl9wdW5wY2tscWRxMTI4IChfX3RtcCwgX190bXApOwp9CgpzdGF0 aWMgX19pbmxpbmUgX192MmRpCl9tbV9zZXQxX2VwaTMyIChpbnQgX19BKQp7CiAgX192NHNpIF9f dG1wID0gKF9fdjRzaSlfX2J1aWx0aW5faWEzMl9sb2FkZCAoJl9fQSk7CiAgcmV0dXJuIChfX3Yy ZGkpIF9fYnVpbHRpbl9pYTMyX3BzaHVmZCAoKF9fdjRzaSlfX3RtcCwgKCgoMCkgPDwgNikgfCAo KDApIDw8IDQpIHwgKCgwKSA8PCAyKSB8ICgwKSkpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRp Cl9tbV9zZXQxX2VwaTE2IChzaG9ydCBfX0EpCnsKICBpbnQgX19BY29weSA9ICh1bnNpZ25lZCBz aG9ydClfX0E7CiAgX192NHNpIF9fdG1wID0gKF9fdjRzaSlfX2J1aWx0aW5faWEzMl9sb2FkZCAo Jl9fQWNvcHkpOwogIF9fdG1wID0gKF9fdjRzaSlfX2J1aWx0aW5faWEzMl9wdW5wY2tsd2QxMjgg KChfX3Y4aGkpX190bXAsIChfX3Y4aGkpX190bXApOwogIHJldHVybiAoX192MmRpKSBfX2J1aWx0 aW5faWEzMl9wc2h1ZmQgKChfX3Y0c2kpX190bXAsICgoKDApIDw8IDYpIHwgKCgwKSA8PCA0KSB8 ICgoMCkgPDwgMikgfCAoMCkpKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fc2V0MV9l cGk4IChjaGFyIF9fQSkKewogIGludCBfX0Fjb3B5ID0gKHVuc2lnbmVkIGNoYXIpX19BOwogIF9f djRzaSBfX3RtcCA9IChfX3Y0c2kpX19idWlsdGluX2lhMzJfbG9hZGQgKCZfX0Fjb3B5KTsKICBf X3RtcCA9IChfX3Y0c2kpX19idWlsdGluX2lhMzJfcHVucGNrbGJ3MTI4ICgoX192MTZxaSlfX3Rt cCwgKF9fdjE2cWkpX190bXApOwogIF9fdG1wID0gKF9fdjRzaSlfX2J1aWx0aW5faWEzMl9wdW5w Y2tsYncxMjggKChfX3YxNnFpKV9fdG1wLCAoX192MTZxaSlfX3RtcCk7CiAgcmV0dXJuIChfX3Yy ZGkpIF9fYnVpbHRpbl9pYTMyX3BzaHVmZCAoKF9fdjRzaSlfX3RtcCwgKCgoMCkgPDwgNikgfCAo KDApIDw8IDQpIHwgKCgwKSA8PCAyKSB8ICgwKSkpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRp Cl9tbV9zZXRyX2VwaTY0IChfX202NCBfX0EsIF9fbTY0IF9fQikKewogIF9fdjJkaSBfX3RtcCA9 IChfX3YyZGkpX19idWlsdGluX2lhMzJfbW92cTJkcSAoKHVuc2lnbmVkIGxvbmcgbG9uZylfX0Ep OwogIF9fdjJkaSBfX3RtcDIgPSAoX192MmRpKV9fYnVpbHRpbl9pYTMyX21vdnEyZHEgKCh1bnNp Z25lZCBsb25nIGxvbmcpX19CKTsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5faWEzMl9wdW5w Y2tscWRxMTI4IChfX3RtcCwgX190bXAyKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21t X3NldHJfZXBpMzIgKGludCBfX1csIGludCBfX1gsIGludCBfX1ksIGludCBfX1opCnsKICB1bmlv biB7CiAgICBpbnQgX19hWzRdOwogICAgX192MmRpIF9fdjsKICB9IF9fdTsKCiAgX191Ll9fYVsw XSA9IF9fVzsKICBfX3UuX19hWzFdID0gX19YOwogIF9fdS5fX2FbMl0gPSBfX1k7CiAgX191Ll9f YVszXSA9IF9fWjsKCiAgcmV0dXJuIF9fdS5fX3Y7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkK X21tX3NldHJfZXBpMTYgKHNob3J0IF9fUywgc2hvcnQgX19ULCBzaG9ydCBfX1UsIHNob3J0IF9f ViwKICAgICAgICAgICAgICAgIHNob3J0IF9fVywgc2hvcnQgX19YLCBzaG9ydCBfX1ksIHNob3J0 IF9fWikKewogIHVuaW9uIHsKICAgIHNob3J0IF9fYVs4XTsKICAgIF9fdjJkaSBfX3Y7CiAgfSBf X3U7CgogIF9fdS5fX2FbMF0gPSBfX1M7CiAgX191Ll9fYVsxXSA9IF9fVDsKICBfX3UuX19hWzJd ID0gX19VOwogIF9fdS5fX2FbM10gPSBfX1Y7CiAgX191Ll9fYVs0XSA9IF9fVzsKICBfX3UuX19h WzVdID0gX19YOwogIF9fdS5fX2FbNl0gPSBfX1k7CiAgX191Ll9fYVs3XSA9IF9fWjsKCiAgcmV0 dXJuIF9fdS5fX3Y7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9zZXRyX2VwaTggKGNo YXIgX19TMSwgY2hhciBfX1QxLCBjaGFyIF9fVTEsIGNoYXIgX19WMSwKICAgICAgICAgICAgICAg Y2hhciBfX1cxLCBjaGFyIF9fWDEsIGNoYXIgX19ZMSwgY2hhciBfX1oxLAogICAgICAgICAgICAg ICBjaGFyIF9fUywgY2hhciBfX1QsIGNoYXIgX19VLCBjaGFyIF9fViwKICAgICAgICAgICAgICAg Y2hhciBfX1csIGNoYXIgX19YLCBjaGFyIF9fWSwgY2hhciBfX1opCnsKICB1bmlvbiB7CiAgICBj aGFyIF9fYVsxNl07CiAgICBfX3YyZGkgX192OwogIH0gX191OwoKICBfX3UuX19hWzBdID0gX19T MTsKICBfX3UuX19hWzFdID0gX19UMTsKICBfX3UuX19hWzJdID0gX19VMTsKICBfX3UuX19hWzNd ID0gX19WMTsKICBfX3UuX19hWzRdID0gX19XMTsKICBfX3UuX19hWzVdID0gX19YMTsKICBfX3Uu X19hWzZdID0gX19ZMTsKICBfX3UuX19hWzddID0gX19aMTsKICBfX3UuX19hWzhdID0gX19TOwog IF9fdS5fX2FbOV0gPSBfX1Q7CiAgX191Ll9fYVsxMF0gPSBfX1U7CiAgX191Ll9fYVsxMV0gPSBf X1Y7CiAgX191Ll9fYVsxMl0gPSBfX1c7CiAgX191Ll9fYVsxM10gPSBfX1g7CiAgX191Ll9fYVsx NF0gPSBfX1k7CiAgX191Ll9fYVsxNV0gPSBfX1o7CgogIHJldHVybiBfX3UuX192Owp9CgpzdGF0 aWMgX19pbmxpbmUgX192MmRmCl9tbV9jdnRlcGkzMl9wZCAoX192MmRpIF9fQSkKewogIHJldHVy biAoX192MmRmKV9fYnVpbHRpbl9pYTMyX2N2dGRxMnBkICgoX192NHNpKSBfX0EpOwp9CgpzdGF0 aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9jdnRlcGkzMl9wcyAoX192MmRpIF9fQSkKewogIHJldHVy biAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2N2dGRxMnBzICgoX192NHNpKSBfX0EpOwp9CgpzdGF0 aWMgX19pbmxpbmUgX192MmRpCl9tbV9jdnRwZF9lcGkzMiAoX192MmRmIF9fQSkKewogIHJldHVy biAoX192MmRpKV9fYnVpbHRpbl9pYTMyX2N2dHBkMmRxICgoX192MmRmKSBfX0EpOwp9CgpzdGF0 aWMgX19pbmxpbmUgX19tNjQKX21tX2N2dHBkX3BpMzIgKF9fdjJkZiBfX0EpCnsKICByZXR1cm4g KF9fbTY0KV9fYnVpbHRpbl9pYTMyX2N2dHBkMnBpICgoX192MmRmKSBfX0EpOwp9CgpzdGF0aWMg X19pbmxpbmUgX19tMTI4Cl9tbV9jdnRwZF9wcyAoX192MmRmIF9fQSkKewogIHJldHVybiAoX19t MTI4KV9fYnVpbHRpbl9pYTMyX2N2dHBkMnBzICgoX192MmRmKSBfX0EpOwp9CgpzdGF0aWMgX19p bmxpbmUgX192MmRpCl9tbV9jdnR0cGRfZXBpMzIgKF9fdjJkZiBfX0EpCnsKICByZXR1cm4gKF9f djJkaSlfX2J1aWx0aW5faWEzMl9jdnR0cGQyZHEgKChfX3YyZGYpIF9fQSk7Cn0KCnN0YXRpYyBf X2lubGluZSBfX202NApfbW1fY3Z0dHBkX3BpMzIgKF9fdjJkZiBfX0EpCnsKICByZXR1cm4gKF9f bTY0KV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJwaSAoKF9fdjJkZikgX19BKTsKfQoKc3RhdGljIF9f aW5saW5lIF9fdjJkZgpfbW1fY3Z0cGkzMl9wZCAoX19tNjQgX19BKQp7CiAgcmV0dXJuIChfX3Yy ZGYpX19idWlsdGluX2lhMzJfY3Z0cGkycGQgKChfX3Yyc2kpIF9fQSk7Cn0KCnN0YXRpYyBfX2lu bGluZSBfX3YyZGkKX21tX2N2dHBzX2VwaTMyIChfX20xMjggX19BKQp7CiAgcmV0dXJuIChfX3Yy ZGkpX19idWlsdGluX2lhMzJfY3Z0cHMyZHEgKChfX3Y0c2YpIF9fQSk7Cn0KCnN0YXRpYyBfX2lu bGluZSBfX3YyZGkKX21tX2N2dHRwc19lcGkzMiAoX19tMTI4IF9fQSkKewogIHJldHVybiAoX192 MmRpKV9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcSAoKF9fdjRzZikgX19BKTsKfQoKc3RhdGljIF9f aW5saW5lIF9fdjJkZgpfbW1fY3Z0cHNfcGQgKF9fbTEyOCBfX0EpCnsKICByZXR1cm4gKF9fdjJk ZilfX2J1aWx0aW5faWEzMl9jdnRwczJwZCAoKF9fdjRzZikgX19BKTsKfQoKc3RhdGljIF9faW5s aW5lIGludApfbW1fY3Z0c2Rfc2kzMiAoX192MmRmIF9fQSkKewogIHJldHVybiBfX2J1aWx0aW5f aWEzMl9jdnRzZDJzaSAoKF9fdjJkZikgX19BKTsKfQoKc3RhdGljIF9faW5saW5lIGludApfbW1f Y3Z0dHNkX3NpMzIgKF9fdjJkZiBfX0EpCnsKICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0dHNk MnNpICgoX192MmRmKSBfX0EpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9jdnRzZF9z cyAoX19tMTI4IF9fQSwgX192MmRmIF9fQikKewogIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9p YTMyX2N2dHNkMnNzICgoX192NHNmKSBfX0EsIChfX3YyZGYpIF9fQik7Cn0KCnN0YXRpYyBfX2lu bGluZSBfX3YyZGYKX21tX2N2dHNpMzJfc2QgKF9fdjJkZiBfX0EsIGludCBfX0IpCnsKICByZXR1 cm4gKF9fdjJkZilfX2J1aWx0aW5faWEzMl9jdnRzaTJzZCAoKF9fdjJkZikgX19BLCBfX0IpOwp9 CgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV9jdnRzc19zZCAoX192MmRmIF9fQSwgX19tMTI4 IF9fQikKewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMyX2N2dHNzMnNkICgoX192MmRm KSBfX0EsIChfX3Y0c2YpX19CKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV91bnBh Y2toaV9wZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKV9fYnVp bHRpbl9pYTMyX3VucGNraHBkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMg X19pbmxpbmUgX192MmRmCl9tbV91bnBhY2tsb19wZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikK ewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMyX3VucGNrbHBkICgoX192MmRmKV9fQSwg KF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV9sb2FkaF9wZCAoX192 MmRmIF9fQSwgZG91YmxlIGNvbnN0ICpfX0IpCnsKICByZXR1cm4gKF9fdjJkZilfX2J1aWx0aW5f aWEzMl9sb2FkaHBkICgoX192MmRmKV9fQSwgKF9fdjJzaSAqKV9fQik7Cn0KCnN0YXRpYyBfX2lu bGluZSB2b2lkCl9tbV9zdG9yZWhfcGQgKGRvdWJsZSAqX19BLCBfX3YyZGYgX19CKQp7CiAgX19i dWlsdGluX2lhMzJfc3RvcmVocGQgKChfX3Yyc2kgKilfX0EsIChfX3YyZGYpX19CKTsKfQoKc3Rh dGljIF9faW5saW5lIF9fdjJkZgpfbW1fbG9hZGxfcGQgKF9fdjJkZiBfX0EsIGRvdWJsZSBjb25z dCAqX19CKQp7CiAgcmV0dXJuIChfX3YyZGYpX19idWlsdGluX2lhMzJfbG9hZGxwZCAoKF9fdjJk ZilfX0EsIChfX3Yyc2kgKilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgdm9pZApfbW1fc3RvcmVs X3BkIChkb3VibGUgKl9fQSwgX192MmRmIF9fQikKewogIF9fYnVpbHRpbl9pYTMyX3N0b3JlbHBk ICgoX192MnNpICopX19BLCAoX192MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBpbnQKX21t X21vdmVtYXNrX3BkIChfX3YyZGYgX19BKQp7CiAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21vdm1z a3BkICgoX192MmRmKV9fQSk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3BhY2tzX2Vw aTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGlu X2lhMzJfcGFja3Nzd2IxMjggKChfX3Y4aGkpX19BLCAoX192OGhpKV9fQik7Cn0KCnN0YXRpYyBf X2lubGluZSBfX3YyZGkKX21tX3BhY2tzX2VwaTMyIChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7 CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcGFja3NzZHcxMjggKChfX3Y0c2kpX19B LCAoX192NHNpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3BhY2t1c19lcGkx NiAoX192MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9p YTMyX3BhY2t1c3diMTI4ICgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOwp9CgpzdGF0aWMgX19p bmxpbmUgX192MmRpCl9tbV91bnBhY2toaV9lcGk4IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7 CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcHVucGNraGJ3MTI4ICgoX192MTZxaSlf X0EsIChfX3YxNnFpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3VucGFja2hp X2VwaTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWls dGluX2lhMzJfcHVucGNraHdkMTI4ICgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOwp9CgpzdGF0 aWMgX19pbmxpbmUgX192MmRpCl9tbV91bnBhY2toaV9lcGkzMiAoX192MmRpIF9fQSwgX192MmRp IF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3B1bnBja2hkcTEyOCAoKF9f djRzaSlfX0EsIChfX3Y0c2kpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fdW5w YWNraGlfZXBpNjQgKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlf X2J1aWx0aW5faWEzMl9wdW5wY2tocWRxMTI4ICgoX192MmRpKV9fQSwgKF9fdjJkaSlfX0IpOwp9 CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV91bnBhY2tsb19lcGk4IChfX3YyZGkgX19BLCBf X3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcHVucGNrbGJ3MTI4 ICgoX192MTZxaSlfX0EsIChfX3YxNnFpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkK X21tX3VucGFja2xvX2VwaTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChf X3YyZGkpX19idWlsdGluX2lhMzJfcHVucGNrbHdkMTI4ICgoX192OGhpKV9fQSwgKF9fdjhoaSlf X0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV91bnBhY2tsb19lcGkzMiAoX192MmRp IF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3B1bnBj a2xkcTEyOCAoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9f djJkaQpfbW1fdW5wYWNrbG9fZXBpNjQgKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1 cm4gKF9fdjJkaSlfX2J1aWx0aW5faWEzMl9wdW5wY2tscWRxMTI4ICgoX192MmRpKV9fQSwgKF9f djJkaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9hZGRfZXBpOCAoX192MmRp IF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3BhZGRi MTI4ICgoX192MTZxaSlfX0EsIChfX3YxNnFpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3Yy ZGkKX21tX2FkZF9lcGkxNiAoX192MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192 MmRpKV9fYnVpbHRpbl9pYTMyX3BhZGR3MTI4ICgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOwp9 CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9hZGRfZXBpMzIgKF9fdjJkaSBfX0EsIF9fdjJk aSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5faWEzMl9wYWRkZDEyOCAoKF9fdjRz aSlfX0EsIChfX3Y0c2kpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fYWRkX2Vw aTY0IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGlu X2lhMzJfcGFkZHExMjggKChfX3Y0c2kpX19BLCAoX192NHNpKV9fQik7Cn0KCnN0YXRpYyBfX2lu bGluZSBfX3YyZGkKX21tX2FkZHNfZXBpOCAoX192MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJl dHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3BhZGRzYjEyOCAoKF9fdjE2cWkpX19BLCAoX192 MTZxaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9hZGRzX2VwaTE2IChfX3Yy ZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcGFk ZHN3MTI4ICgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192 MmRpCl9tbV9hZGRzX2VwdTggKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9f djJkaSlfX2J1aWx0aW5faWEzMl9wYWRkdXNiMTI4ICgoX192MTZxaSlfX0EsIChfX3YxNnFpKV9f Qik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX2FkZHNfZXB1MTYgKF9fdjJkaSBfX0Es IF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5faWEzMl9wYWRkdXN3MTI4 ICgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9t bV9zdWJfZXBpOCAoX192MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9f YnVpbHRpbl9pYTMyX3BzdWJiMTI4ICgoX192MTZxaSlfX0EsIChfX3YxNnFpKV9fQik7Cn0KCnN0 YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3N1Yl9lcGkxNiAoX192MmRpIF9fQSwgX192MmRpIF9f QikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3BzdWJ3MTI4ICgoX192OGhpKV9f QSwgKF9fdjhoaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9zdWJfZXBpMzIg KF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5faWEz Ml9wc3ViZDEyOCAoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CKTsKfQoKc3RhdGljIF9faW5saW5l IF9fdjJkaQpfbW1fc3ViX2VwaTY0IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJu IChfX3YyZGkpX19idWlsdGluX2lhMzJfcHN1YnExMjggKChfX3Y0c2kpX19BLCAoX192NHNpKV9f Qik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3N1YnNfZXBpOCAoX192MmRpIF9fQSwg X192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3BzdWJzYjEyOCAo KF9fdjE2cWkpX19BLCAoX192MTZxaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9t bV9zdWJzX2VwaTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkp X19idWlsdGluX2lhMzJfcHN1YnN3MTI4ICgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOwp9Cgpz dGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9zdWJzX2VwdTggKF9fdjJkaSBfX0EsIF9fdjJkaSBf X0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5faWEzMl9wc3VidXNiMTI4ICgoX192MTZx aSlfX0EsIChfX3YxNnFpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3N1YnNf ZXB1MTYgKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0 aW5faWEzMl9wc3VidXN3MTI4ICgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOwp9CgpzdGF0aWMg X19pbmxpbmUgX192MmRpCl9tbV9tYWRkX2VwaTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7 CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcG1hZGR3ZDEyOCAoKF9fdjhoaSlfX0Es IChfX3Y4aGkpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fbXVsaGlfZXBpMTYg KF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5faWEz Ml9wbXVsaHcxMjggKChfX3Y4aGkpX19BLCAoX192OGhpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGlu ZSBfX3YyZGkKX21tX211bGxvX2VwaTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0 dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcG11bGx3MTI4ICgoX192OGhpKV9fQSwgKF9fdjho aSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX211bF9wdTE2IChfX202NCBfX0Es IF9fbTY0IF9fQikKewogIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG11bHVkcSAoKF9f djJzaSlfX0EsIChfX3Yyc2kpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fbXVs X2VwdTMyIChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWls dGluX2lhMzJfcG11bHVkcTEyOCAoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CKTsKfQoKc3RhdGlj IF9faW5saW5lIF9fdjJkaQpfbW1fc2xsX2VwaTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7 CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcHNsbHcxMjggKChfX3Y4aGkpX19BLCAo X192MmRpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3NsbF9lcGkzMiAoX192 MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3Bz bGxkMTI4ICgoX192NHNpKV9fQSwgKF9fdjJkaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192 MmRpCl9tbV9zbGxfZXBpNjQgKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9f djJkaSlfX2J1aWx0aW5faWEzMl9wc2xscTEyOCAoKF9fdjJkaSlfX0EsIChfX3YyZGkpX19CKTsK fQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fc3JhX2VwaTE2IChfX3YyZGkgX19BLCBfX3Yy ZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcHNyYXcxMjggKChfX3Y4 aGkpX19BLCAoX192MmRpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3NyYV9l cGkzMiAoX192MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRp bl9pYTMyX3BzcmFkMTI4ICgoX192NHNpKV9fQSwgKF9fdjJkaSlfX0IpOwp9CgpzdGF0aWMgX19p bmxpbmUgX192MmRpCl9tbV9zcmxfZXBpMTYgKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICBy ZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5faWEzMl9wc3JsdzEyOCAoKF9fdjhoaSlfX0EsIChfX3Yy ZGkpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fc3JsX2VwaTMyIChfX3YyZGkg X19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcHNybGQx MjggKChfX3Y0c2kpX19BLCAoX192MmRpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkK X21tX3NybF9lcGk2NCAoX192MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRp KV9fYnVpbHRpbl9pYTMyX3BzcmxxMTI4ICgoX192MmRpKV9fQSwgKF9fdjJkaSlfX0IpOwp9Cgpz dGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9zbGxpX2VwaTE2IChfX3YyZGkgX19BLCBpbnQgX19C KQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcHNsbHdpMTI4ICgoX192OGhpKV9f QSwgX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fc2xsaV9lcGkzMiAoX192MmRp IF9fQSwgaW50IF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3BzbGxkaTEy OCAoKF9fdjRzaSlfX0EsIF9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3NsbGlf ZXBpNjQgKF9fdjJkaSBfX0EsIGludCBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5f aWEzMl9wc2xscWkxMjggKChfX3YyZGkpX19BLCBfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192 MmRpCl9tbV9zcmFpX2VwaTE2IChfX3YyZGkgX19BLCBpbnQgX19CKQp7CiAgcmV0dXJuIChfX3Yy ZGkpX19idWlsdGluX2lhMzJfcHNyYXdpMTI4ICgoX192OGhpKV9fQSwgX19CKTsKfQoKc3RhdGlj IF9faW5saW5lIF9fdjJkaQpfbW1fc3JhaV9lcGkzMiAoX192MmRpIF9fQSwgaW50IF9fQikKewog IHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3BzcmFkaTEyOCAoKF9fdjRzaSlfX0EsIF9f Qik7Cn0KIyAyMjUwICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu My9pbmNsdWRlL3htbWludHJpbi5oIiAzIDQKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fc3Js aV9lcGkxNiAoX192MmRpIF9fQSwgaW50IF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRp bl9pYTMyX3Bzcmx3aTEyOCAoKF9fdjhoaSlfX0EsIF9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBf X3YyZGkKX21tX3NybGlfZXBpMzIgKF9fdjJkaSBfX0EsIGludCBfX0IpCnsKICByZXR1cm4gKF9f djJkaSlfX2J1aWx0aW5faWEzMl9wc3JsZGkxMjggKChfX3Y0c2kpX19BLCBfX0IpOwp9CgpzdGF0 aWMgX19pbmxpbmUgX192MmRpCl9tbV9zcmxpX2VwaTY0IChfX3YyZGkgX19BLCBpbnQgX19CKQp7 CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcHNybHFpMTI4ICgoX192MmRpKV9fQSwg X19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fYW5kX3NpMTI4IChfX3YyZGkgX19B LCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcGFuZDEyOCAo KF9fdjJkaSlfX0EsIChfX3YyZGkpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1f YW5kbm90X3NpMTI4IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkp X19idWlsdGluX2lhMzJfcGFuZG4xMjggKChfX3YyZGkpX19BLCAoX192MmRpKV9fQik7Cn0KCnN0 YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX29yX3NpMTI4IChfX3YyZGkgX19BLCBfX3YyZGkgX19C KQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcG9yMTI4ICgoX192MmRpKV9fQSwg KF9fdjJkaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV94b3Jfc2kxMjggKF9f djJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5faWEzMl9w eG9yMTI4ICgoX192MmRpKV9fQSwgKF9fdjJkaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192 MmRpCl9tbV9jbXBlcV9lcGk4IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChf X3YyZGkpX19idWlsdGluX2lhMzJfcGNtcGVxYjEyOCAoKF9fdjE2cWkpX19BLCAoX192MTZxaSlf X0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9jbXBlcV9lcGkxNiAoX192MmRpIF9f QSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3BjbXBlcXcx MjggKChfX3Y4aGkpX19BLCAoX192OGhpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkK X21tX2NtcGVxX2VwaTMyIChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3Yy ZGkpX19idWlsdGluX2lhMzJfcGNtcGVxZDEyOCAoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CKTsK fQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fY21wbHRfZXBpOCAoX192MmRpIF9fQSwgX192 MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3BjbXBndGIxMjggKChf X3YxNnFpKV9fQiwgKF9fdjE2cWkpX19BKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1f Y21wbHRfZXBpMTYgKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlf X2J1aWx0aW5faWEzMl9wY21wZ3R3MTI4ICgoX192OGhpKV9fQiwgKF9fdjhoaSlfX0EpOwp9Cgpz dGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9jbXBsdF9lcGkzMiAoX192MmRpIF9fQSwgX192MmRp IF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3BjbXBndGQxMjggKChfX3Y0 c2kpX19CLCAoX192NHNpKV9fQSk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX2NtcGd0 X2VwaTggKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0 aW5faWEzMl9wY21wZ3RiMTI4ICgoX192MTZxaSlfX0EsIChfX3YxNnFpKV9fQik7Cn0KCnN0YXRp YyBfX2lubGluZSBfX3YyZGkKX21tX2NtcGd0X2VwaTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19C KQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcGNtcGd0dzEyOCAoKF9fdjhoaSlf X0EsIChfX3Y4aGkpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fY21wZ3RfZXBp MzIgKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5f aWEzMl9wY21wZ3RkMTI4ICgoX192NHNpKV9fQSwgKF9fdjRzaSlfX0IpOwp9CgoKCgoKc3RhdGlj IF9faW5saW5lIF9fdjJkaQpfbW1fbWF4X2VwaTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7 CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcG1heHN3MTI4ICgoX192OGhpKV9fQSwg KF9fdjhoaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9tYXhfZXB1OCAoX192 MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3Bt YXh1YjEyOCAoKF9fdjE2cWkpX19BLCAoX192MTZxaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUg X192MmRpCl9tbV9taW5fZXBpMTYgKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4g KF9fdjJkaSlfX2J1aWx0aW5faWEzMl9wbWluc3cxMjggKChfX3Y4aGkpX19BLCAoX192OGhpKV9f Qik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX21pbl9lcHU4IChfX3YyZGkgX19BLCBf X3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcG1pbnViMTI4ICgo X192MTZxaSlfX0EsIChfX3YxNnFpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBpbnQKX21tX21v dmVtYXNrX2VwaTggKF9fdjJkaSBfX0EpCnsKICByZXR1cm4gX19idWlsdGluX2lhMzJfcG1vdm1z a2IxMjggKChfX3YxNnFpKV9fQSk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX211bGhp X2VwdTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWls dGluX2lhMzJfcG11bGh1dzEyOCAoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CKTsKfQoKCgoKCnN0 YXRpYyBfX2lubGluZSB2b2lkCl9tbV9tYXNrbW92ZXVfc2kxMjggKF9fdjJkaSBfX0EsIF9fdjJk aSBfX0IsIGNoYXIgKl9fQykKewogIF9fYnVpbHRpbl9pYTMyX21hc2ttb3ZkcXUgKChfX3YxNnFp KV9fQSwgKF9fdjE2cWkpX19CLCBfX0MpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9h dmdfZXB1OCAoX192MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVp bHRpbl9pYTMyX3BhdmdiMTI4ICgoX192MTZxaSlfX0EsIChfX3YxNnFpKV9fQik7Cn0KCnN0YXRp YyBfX2lubGluZSBfX3YyZGkKX21tX2F2Z19lcHUxNiAoX192MmRpIF9fQSwgX192MmRpIF9fQikK ewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3Bhdmd3MTI4ICgoX192OGhpKV9fQSwg KF9fdjhoaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9zYWRfZXB1OCAoX192 MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3Bz YWRidzEyOCAoKF9fdjE2cWkpX19BLCAoX192MTZxaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUg dm9pZApfbW1fc3RyZWFtX3NpMzIgKGludCAqX19BLCBpbnQgX19CKQp7CiAgX19idWlsdGluX2lh MzJfbW92bnRpIChfX0EsIF9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSB2b2lkCl9tbV9zdHJlYW1f c2kxMjggKF9fdjJkaSAqX19BLCBfX3YyZGkgX19CKQp7CiAgX19idWlsdGluX2lhMzJfbW92bnRk cSAoKF9fdjJkaSAqKV9fQSwgKF9fdjJkaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgdm9pZApf bW1fc3RyZWFtX3BkIChkb3VibGUgKl9fQSwgX192MmRmIF9fQikKewogIF9fYnVpbHRpbl9pYTMy X21vdm50cGQgKF9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9t bV9tb3ZwaTY0X2VwaTY0IChfX202NCBfX0EpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5f aWEzMl9tb3ZxMmRxICgodW5zaWduZWQgbG9uZyBsb25nKV9fQSk7Cn0KCnN0YXRpYyBfX2lubGlu ZSB2b2lkCl9tbV9jbGZsdXNoICh2b2lkIGNvbnN0ICpfX0EpCnsKICByZXR1cm4gX19idWlsdGlu X2lhMzJfY2xmbHVzaCAoX19BKTsKfQoKc3RhdGljIF9faW5saW5lIHZvaWQKX21tX2xmZW5jZSAo dm9pZCkKewogIF9fYnVpbHRpbl9pYTMyX2xmZW5jZSAoKTsKfQoKc3RhdGljIF9faW5saW5lIHZv aWQKX21tX21mZW5jZSAodm9pZCkKewogIF9fYnVpbHRpbl9pYTMyX21mZW5jZSAoKTsKfQoKc3Rh dGljIF9faW5saW5lIF9fdjJkaQpfbW1fY3Z0c2kzMl9zaTEyOCAoaW50IF9fQSkKewogIHJldHVy biAoX192MmRpKSBfX2J1aWx0aW5faWEzMl9sb2FkZCAoJl9fQSk7Cn0KCnN0YXRpYyBfX2lubGlu ZSBpbnQKX21tX2N2dHNpMTI4X3NpMzIgKF9fdjJkaSBfX0EpCnsKICBpbnQgX190bXA7CiAgX19i dWlsdGluX2lhMzJfc3RvcmVkICgmX190bXAsIChfX3Y0c2kpX19BKTsKICByZXR1cm4gX190bXA7 Cn0KIyAyICJ0ZXN0LmMiIDIKCnR5cGVkZWYgdW5pb24gewpfX3YyZGkgdjsKaW50IGlbNF07Cn0g aXZlY3RvcjsKCgp2b2lkIHByaW50dmVjKF9fdjJkaSB6KQp7CiAgICBpdmVjdG9yIHE7CiAgICBx LnY9ejsKCiAgICBwcmludGYoIiVkICAlZCAgJWQgICVkXG4iLHEuaVswXSxxLmlbMV0scS5pWzJd LHEuaVszXSk7Cn0KCmludCBtYWluKHZvaWQpCnsKX192MmRpIHhtbTM7Cl9fdjJkaSB4bW01Owpf X3YyZGkgeG1tNzsKX192MmRpIHZfbG93c2NvcmU7CmludCAqIG1zY2k7CgogICAgICAgICAgICB4 bW0zID0gX21tX2xvYWRfc2kxMjgoKF9fdjJkaSAqKSBtc2NpKTsKICAgICAgICAgICAgeG1tNyA9 IF9tbV9hZGRfZXBpMzIoeG1tNywgeG1tMyk7CiAgICAgICAgICAgIHhtbTUgPSBfbW1fbG9hZF9z aTEyOCgoX192MmRpICopICZ2X2xvd3Njb3JlKTsKICAgICAgICAgICAgeG1tMyA9IF9tbV9jbXBl cV9lcGkzMih4bW0zLCB4bW01KTsKICAgICAgICAgICAgeG1tNSA9IF9tbV9hbmRfc2kxMjgoeG1t NSwgeG1tMyk7CiAgICAgICAgICAgIHhtbTMgPSBfbW1fYW5kbm90X3NpMTI4KHhtbTMsIHhtbTcp OwogICAgICAgICAgICB4bW01ID0gX21tX29yX3NpMTI4KHhtbTUsIHhtbTMpOwogICAgICAgICAg ICBwcmludHZlYyh4bW0zKTsgcHJpbnR2ZWMoeG1tNSk7IHByaW50dmVjKHhtbTcpOwp9Cg==