From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9211 invoked by alias); 3 Apr 2008 23:11:05 -0000 Received: (qmail 9194 invoked by uid 22791); 3 Apr 2008 23:11:00 -0000 X-Spam-Check-By: sourceware.org Received: from nf-out-0910.google.com (HELO nf-out-0910.google.com) (64.233.182.188) by sourceware.org (qpsmtpd/0.31) with ESMTP; Thu, 03 Apr 2008 23:10:40 +0000 Received: by nf-out-0910.google.com with SMTP id h3so3123358nfh.6 for ; Thu, 03 Apr 2008 16:10:37 -0700 (PDT) Received: by 10.78.20.13 with SMTP id 13mr1206535hut.47.1207264236746; Thu, 03 Apr 2008 16:10:36 -0700 (PDT) Received: by 10.78.163.20 with HTTP; Thu, 3 Apr 2008 16:10:36 -0700 (PDT) Message-ID: <6dc9ffc80804031610s35e378c2r1c42dc6c0bdce6b7@mail.gmail.com> Date: Thu, 03 Apr 2008 23:17:00 -0000 From: "H.J. Lu" To: "Uros Bizjak" Subject: Re: PATCH: Enable Intel AES/CLMUL Cc: "GCC Patches" In-Reply-To: <20080403215117.GA15854@lucon.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_3214_23656278.1207264236734" References: <47F516DD.7000704@gmail.com> <20080403215117.GA15854@lucon.org> X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2008-04/txt/msg00334.txt.bz2 ------=_Part_3214_23656278.1207264236734 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 5031 Hi, I should use def_builtin_const instead of def_builtin. Here is the updated patch. H..J. On Thu, Apr 3, 2008 at 2:51 PM, H.J. Lu wrote: > > On Thu, Apr 03, 2008 at 07:41:49PM +0200, Uros Bizjak wrote: > > Hello! > > > >> * config/i386/i386.c (OPTION_MASK_ISA_AES_SET): New. > >> (OPTION_MASK_ISA_CLMUL_SET): Likewise. > >> (OPTION_MASK_ISA_AES_UNSET): Likewise. > >> (OPTION_MASK_ISA_CLMUL_UNSET): Likewise. > >> (OPTION_MASK_ISA_SSE4_2_UNSET): Add OPTION_MASK_ISA_AES_UNSET > >> and OPTION_MASK_ISA_CLMUL_UNSET. > > > > I don't think that MASK_ISA is correct approach here, since MASK_ISA is > > reserved for different SSE levels that siwtch on or off whole pack of > > instructions. Perhaps we should do with: > > > > i386.h: > > #define TARGET_CLMUL x86_aes > > > > where > > > > i386.opt: > > maes > > Target Report RejectNegative Var(x86_aes) > > > > We can even #define TARGET_CLMUL (TARGET_SSE4_2 && x86_aes), depending on > > how we want to enable generation of AES instructions. Please also note, > > that we will use PTA_* flags in future for certain targets and we can > > switch this flag depending on target features. So: > > > > gcc -msse -maes > > > > or > > > > gcc -mfancy_future_target > > > > will both switch AES instruction supports on. > > > > Regarding the tests, all new *intrin.h should also be added to > > gcc.target/i386/sse-[13,14] to check that intrinsics compile with and > > without optimization (I would also recommend to add the header to > > g++.dg/other/i386-3.C) > > > > > > Here is the updated patch. OK to install? > > > Thanks. > > > H.J. > ----- > gcc/ > > 2008-04-03 H.J. Lu > > * config.gcc (extra_headers): Add wmmintrin.h for x86 and x86-64. > > * config/i386/cpuid.h (bit_AES): New. > (bit_CLMUL): Likewise. > > * config/i386/i386.c (pta_flags): Add PTA_AES and PTA_CLMUL. > (override_options): Handle PTA_AES and PTA_CLMUL. Enable > SSE 4.2 if AES or CLMUL is enabled. > > (ix86_builtins): Add IX86_BUILTIN_AESENC128, > IX86_BUILTIN_AESENCLAST128, IX86_BUILTIN_AESDEC128, > IX86_BUILTIN_AESDECLAST128, IX86_BUILTIN_AESIMC128, > IX86_BUILTIN_AESKEYGENASSIST128 and IX86_BUILTIN_PCLMULQDQ128. > (bdesc_sse_3arg): Add IX86_BUILTIN_PCLMULQDQ128. > (bdesc_2arg): Add IX86_BUILTIN_AESENC128, > > IX86_BUILTIN_AESENCLAST128, IX86_BUILTIN_AESDEC128, > IX86_BUILTIN_AESDECLAST128 and IX86_BUILTIN_AESKEYGENASSIST128. > (bdesc_1arg): Add IX86_BUILTIN_AESIMC128. > (ix86_init_mmx_sse_builtins): Define __builtin_ia32_aesenc128, > > __builtin_ia32_aesenclast128, __builtin_ia32_aesdec128, > __builtin_ia32_aesdeclast128,__builtin_ia32_aesimc128, > __builtin_ia32_aeskeygenassist128 and > __builtin_ia32_pclmulqdq128. > > > * config/i386/i386.c (ix86_expand_binop_imm_builtin): New. > (ix86_expand_builtin): Use it for IX86_BUILTIN_PSLLDQI128 and > IX86_BUILTIN_PSRLDQI128. Handle IX86_BUILTIN_AESKEYGENASSIST128. > > * config/i386/i386.h (TARGET_AES): New. > (TARGET_CLMUL): Likewise. > (TARGET_CPU_CPP_BUILTINS): Handle TARGET_AES and TARGET_CLMUL. > > * config/i386/i386.md (UNSPEC_AESENC): New. > (UNSPEC_AESENCLAST): Likewise. > (UNSPEC_AESDEC): Likewise. > (UNSPEC_AESDECLAST): Likewise. > (UNSPEC_AESIMC): Likewise. > (UNSPEC_AESKEYGENASSIST): Likewise. > (UNSPEC_PCLMULQDQ): Likewise. > > * config/i386/i386.opt (maes): New. > (mclmul): Likewise. > > * config/i386/sse.md (aesenc): New pattern. > (aesenclast): Likewise. > (aesdec): Likewise. > (aesdeclast): Likewise. > (aesimc): Likewise. > (aeskeygenassist): Likewise. > (pclmulqdq): Likewise. > > * config/i386/wmmintrin.h: New. > > * doc/extend.texi: Document AES and CLMUL built-in function. > > * doc/invoke.texi: Document -maes and -mclmul. > > gcc/testsuite/ > > 2008-04-03 H.J. Lu > > * g++.dg/other/i386-2.C: Include instead of > . > * g++.dg/other/i386-3.C: Likewise. > * gcc.target/i386/sse-13.c: Likewise. > * gcc.target/i386/sse-14.c: Likewise. > > > * gcc.target/i386/aes-check.h: New. > * gcc.target/i386/aesdec.c: Likewise. > * gcc.target/i386/aesdeclast.c: Likewise. > * gcc.target/i386/aesenc.c: Likewise. > * gcc.target/i386/aesenclast.c: Likewise. > * gcc.target/i386/aesimc.c: Likewise. > * gcc.target/i386/aeskeygenassist.c: Likewise. > * gcc.target/i386/pclmulqdq.c: Likewise. > * gcc.target/i386/clmul-check.h: Likewise. > > * gcc.target/i386/i386.exp (check_effective_target_aes): New. > (check_effective_target_clmul): Likewise. > ------=_Part_3214_23656278.1207264236734 Content-Type: text/x-patch; name=gcc-aes-6.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_felxx6py0 Content-Disposition: attachment; filename=gcc-aes-6.patch Content-length: 60403 LS0tIGdjYy9jb25maWcuZ2NjLmFlcwkyMDA4LTA0LTAzIDEyOjIwOjQ1LjAw MDAwMDAwMCAtMDcwMAorKysgZ2NjL2NvbmZpZy5nY2MJMjAwOC0wNC0wMyAx MjoyMDo0NS4wMDAwMDAwMDAgLTA3MDAKQEAgLTMwOSwxMyArMzA5LDE1IEBA IGlbMzQ1NjddODYtKi0qKQogCWNwdV90eXBlPWkzODYKIAlleHRyYV9oZWFk ZXJzPSJjcHVpZC5oIG1taW50cmluLmggbW0zZG5vdy5oIHhtbWludHJpbi5o IGVtbWludHJpbi5oCiAJCSAgICAgICBwbW1pbnRyaW4uaCB0bW1pbnRyaW4u aCBhbW1pbnRyaW4uaCBzbW1pbnRyaW4uaAotCQkgICAgICAgbm1taW50cmlu LmggYm1taW50cmluLmggbW1pbnRyaW4tY29tbW9uLmgiCisJCSAgICAgICBu bW1pbnRyaW4uaCBibW1pbnRyaW4uaCBtbWludHJpbi1jb21tb24uaAorCQkg ICAgICAgd21taW50cmluLmgiCiAJOzsKIHg4Nl82NC0qLSopCiAJY3B1X3R5 cGU9aTM4NgogCWV4dHJhX2hlYWRlcnM9ImNwdWlkLmggbW1pbnRyaW4uaCBt bTNkbm93LmggeG1taW50cmluLmggZW1taW50cmluLmgKIAkJICAgICAgIHBt bWludHJpbi5oIHRtbWludHJpbi5oIGFtbWludHJpbi5oIHNtbWludHJpbi5o Ci0JCSAgICAgICBubW1pbnRyaW4uaCBibW1pbnRyaW4uaCBtbWludHJpbi1j b21tb24uaCIKKwkJICAgICAgIG5tbWludHJpbi5oIGJtbWludHJpbi5oIG1t aW50cmluLWNvbW1vbi5oCisJCSAgICAgICB3bW1pbnRyaW4uaCIKIAluZWVk XzY0Yml0X2h3aW50PXllcwogCTs7CiBpYTY0LSotKikKLS0tIGdjYy9jb25m aWcvaTM4Ni9jcHVpZC5oLmFlcwkyMDA4LTAyLTI1IDA5OjU3OjM3LjAwMDAw MDAwMCAtMDgwMAorKysgZ2NjL2NvbmZpZy9pMzg2L2NwdWlkLmgJMjAwOC0w NC0wMyAxMjoyMDo0NS4wMDAwMDAwMDAgLTA3MDAKQEAgLTMzLDExICszMywx MyBAQAogCiAvKiAlZWN4ICovCiAjZGVmaW5lIGJpdF9TU0UzCSgxIDw8IDAp CisjZGVmaW5lIGJpdF9DTE1VTAkoMSA8PCAxKQogI2RlZmluZSBiaXRfU1NT RTMJKDEgPDwgOSkKICNkZWZpbmUgYml0X0NNUFhDSEcxNkIJKDEgPDwgMTMp CiAjZGVmaW5lIGJpdF9TU0U0XzEJKDEgPDwgMTkpCiAjZGVmaW5lIGJpdF9T U0U0XzIJKDEgPDwgMjApCiAjZGVmaW5lIGJpdF9QT1BDTlQJKDEgPDwgMjMp CisjZGVmaW5lIGJpdF9BRVMJCSgxIDw8IDI1KQogCiAvKiAlZWR4ICovCiAj ZGVmaW5lIGJpdF9DTVBYQ0hHOEIJKDEgPDwgOCkKLS0tIGdjYy9jb25maWcv aTM4Ni9pMzg2LmMuYWVzCTIwMDgtMDQtMDMgMTI6MjA6NDUuMDAwMDAwMDAw IC0wNzAwCisrKyBnY2MvY29uZmlnL2kzODYvaTM4Ni5jCTIwMDgtMDQtMDMg MTY6MDc6MzguMDAwMDAwMDAwIC0wNzAwCkBAIC0yMDc4LDcgKzIwNzgsOSBA QCBvdmVycmlkZV9vcHRpb25zICh2b2lkKQogICAgICAgUFRBX05PX1NBSEYg PSAxIDw8IDEzLAogICAgICAgUFRBX1NTRTRfMSA9IDEgPDwgMTQsCiAgICAg ICBQVEFfU1NFNF8yID0gMSA8PCAxNSwKLSAgICAgIFBUQV9TU0U1ID0gMSA8 PCAxNgorICAgICAgUFRBX1NTRTUgPSAxIDw8IDE2LAorICAgICAgUFRBX0FF UyA9IDEgPDwgMTcsCisgICAgICBQVEFfQ0xNVUwgPSAxIDw8IDE4CiAgICAg fTsKIAogICBzdGF0aWMgc3RydWN0IHB0YQpAQCAtMjM4NSw2ICsyMzg3LDEw IEBAIG92ZXJyaWRlX29wdGlvbnMgKHZvaWQpCiAJICB4ODZfcHJlZmV0Y2hf c3NlID0gdHJ1ZTsKIAlpZiAoIShUQVJHRVRfNjRCSVQgJiYgKHByb2Nlc3Nv cl9hbGlhc190YWJsZVtpXS5mbGFncyAmIFBUQV9OT19TQUhGKSkpCiAJICB4 ODZfc2FoZiA9IHRydWU7CisJaWYgKHByb2Nlc3Nvcl9hbGlhc190YWJsZVtp XS5mbGFncyAmIFBUQV9BRVMpCisJICB4ODZfYWVzID0gdHJ1ZTsKKwlpZiAo cHJvY2Vzc29yX2FsaWFzX3RhYmxlW2ldLmZsYWdzICYgUFRBX0NMTVVMKQor CSAgeDg2X2NsbXVsID0gdHJ1ZTsKIAogCWJyZWFrOwogICAgICAgfQpAQCAt MjQyOCw2ICsyNDM0LDE0IEBAIG92ZXJyaWRlX29wdGlvbnMgKHZvaWQpCiAg IGlmIChpID09IHB0YV9zaXplKQogICAgIGVycm9yICgiYmFkIHZhbHVlICgl cykgZm9yIC1tdHVuZT0gc3dpdGNoIiwgaXg4Nl90dW5lX3N0cmluZyk7CiAK KyAgLyogRW5hYmxlIFNTRSA0LjIgaWYgQUVTIG9yIENMTVVMIGlzIGVuYWJs ZWQuICAqLworICBpZiAoKHg4Nl9hZXMgfHwgeDg2X2NsbXVsKQorICAgICAg JiYgIShpeDg2X2lzYV9mbGFnc19leHBsaWNpdCAmIE9QVElPTl9NQVNLX0lT QV9TU0U0XzIpKQorICAgIHsKKyAgICAgIGl4ODZfaXNhX2ZsYWdzIHw9IE9Q VElPTl9NQVNLX0lTQV9TU0U0XzJfU0VUOworICAgICAgaXg4Nl9pc2FfZmxh Z3NfZXhwbGljaXQgfD0gT1BUSU9OX01BU0tfSVNBX1NTRTRfMl9TRVQ7Cisg ICAgfQorCiAgIGl4ODZfdHVuZV9tYXNrID0gMXUgPDwgaXg4Nl90dW5lOwog ICBmb3IgKGkgPSAwOyBpIDwgWDg2X1RVTkVfTEFTVDsgKytpKQogICAgIGl4 ODZfdHVuZV9mZWF0dXJlc1tpXSAmPSBpeDg2X3R1bmVfbWFzazsKQEAgLTE3 NjI2LDYgKzE3NjQwLDE3IEBAIGVudW0gaXg4Nl9idWlsdGlucwogCiAgIElY ODZfQlVJTFRJTl9QQ01QR1RRLAogCisgIC8qIEFFUyBpbnN0cnVjdGlvbnMg Ki8KKyAgSVg4Nl9CVUlMVElOX0FFU0VOQzEyOCwKKyAgSVg4Nl9CVUlMVElO X0FFU0VOQ0xBU1QxMjgsCisgIElYODZfQlVJTFRJTl9BRVNERUMxMjgsCisg IElYODZfQlVJTFRJTl9BRVNERUNMQVNUMTI4LAorICBJWDg2X0JVSUxUSU5f QUVTSU1DMTI4LAorICBJWDg2X0JVSUxUSU5fQUVTS0VZR0VOQVNTSVNUMTI4 LAorCisgIC8qIENMTVVMIGluc3RydWN0aW9uICovCisgIElYODZfQlVJTFRJ Tl9QQ0xNVUxRRFExMjgsCisKICAgLyogVEZtb2RlIHN1cHBvcnQgYnVpbHRp bnMuICAqLwogICBJWDg2X0JVSUxUSU5fSU5GUSwKICAgSVg4Nl9CVUlMVElO X0ZBQlNRLApAQCAtMTc5ODcsNiArMTgwMTIsOSBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IGJ1aWx0aW5fZGVzY3JpcHRpb24gCiAgIHsgT1BUSU9OX01BU0tf SVNBX1NTRTRfMSwgQ09ERV9GT1Jfc3NlNF8xX3BibGVuZHcsICJfX2J1aWx0 aW5faWEzMl9wYmxlbmR3MTI4IiwgSVg4Nl9CVUlMVElOX1BCTEVORFcxMjgs IFVOS05PV04sIDAgfSwKICAgeyBPUFRJT05fTUFTS19JU0FfUk9VTkQsIENP REVfRk9SX3NzZTRfMV9yb3VuZHNkLCAiX19idWlsdGluX2lhMzJfcm91bmRz ZCIsIElYODZfQlVJTFRJTl9ST1VORFNELCBVTktOT1dOLCAwIH0sCiAgIHsg T1BUSU9OX01BU0tfSVNBX1JPVU5ELCBDT0RFX0ZPUl9zc2U0XzFfcm91bmRz cywgIl9fYnVpbHRpbl9pYTMyX3JvdW5kc3MiLCBJWDg2X0JVSUxUSU5fUk9V TkRTUywgVU5LTk9XTiwgMCB9LAorCisgIC8qIENMTVVMICovCisgIHsgT1BU SU9OX01BU0tfSVNBX1NTRTRfMiwgQ09ERV9GT1JfcGNsbXVscWRxLCAwLCBJ WDg2X0JVSUxUSU5fUENMTVVMUURRMTI4LCBVTktOT1dOLCAwIH0sCiB9Owog CiBzdGF0aWMgY29uc3Qgc3RydWN0IGJ1aWx0aW5fZGVzY3JpcHRpb24gYmRl c2NfMmFyZ1tdID0KQEAgLTE4MjY3LDYgKzE4Mjk1LDEzIEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3QgYnVpbHRpbl9kZXNjcmlwdGlvbiAKIAogICAvKiBTU0U0 LjIgKi8KICAgeyBPUFRJT05fTUFTS19JU0FfU1NFNF8yLCBDT0RFX0ZPUl9z c2U0XzJfZ3R2MmRpMywgIl9fYnVpbHRpbl9pYTMyX3BjbXBndHEiLCBJWDg2 X0JVSUxUSU5fUENNUEdUUSwgVU5LTk9XTiwgMCB9LAorCisgIC8qIEFFUyAq LworICB7IE9QVElPTl9NQVNLX0lTQV9TU0U0XzIsIENPREVfRk9SX2Flc2Vu YywgMCwgSVg4Nl9CVUlMVElOX0FFU0VOQzEyOCwgVU5LTk9XTiwgMCB9LAor ICB7IE9QVElPTl9NQVNLX0lTQV9TU0U0XzIsIENPREVfRk9SX2Flc2VuY2xh c3QsIDAsIElYODZfQlVJTFRJTl9BRVNFTkNMQVNUMTI4LCBVTktOT1dOLCAw IH0sCisgIHsgT1BUSU9OX01BU0tfSVNBX1NTRTRfMiwgQ09ERV9GT1JfYWVz ZGVjLCAwLCBJWDg2X0JVSUxUSU5fQUVTREVDMTI4LCBVTktOT1dOLCAwIH0s CisgIHsgT1BUSU9OX01BU0tfSVNBX1NTRTRfMiwgQ09ERV9GT1JfYWVzZGVj bGFzdCwgMCwgSVg4Nl9CVUlMVElOX0FFU0RFQ0xBU1QxMjgsIFVOS05PV04s IDAgfSwKKyAgeyBPUFRJT05fTUFTS19JU0FfU1NFNF8yLCBDT0RFX0ZPUl9h ZXNrZXlnZW5hc3Npc3QsIDAsIElYODZfQlVJTFRJTl9BRVNLRVlHRU5BU1NJ U1QxMjgsIFVOS05PV04sIDAgfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgYnVpbHRpbl9kZXNjcmlwdGlvbiBiZGVzY18xYXJnW10gPQpAQCAtMTgz NDQsNiArMTgzNzksOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJ1aWx0aW5f ZGVzY3JpcHRpb24gCiAgIC8qIEZha2UgMSBhcmcgYnVpbHRpbnMgd2l0aCBh IGNvbnN0YW50IHNtYWxsZXIgdGhhbiA4IGJpdHMgYXMgdGhlIDJuZCBhcmcu ICAqLwogICB7IE9QVElPTl9NQVNLX0lTQV9TU0U0XzEsIENPREVfRk9SX3Nz ZTRfMV9yb3VuZHBkLCAwLCBJWDg2X0JVSUxUSU5fUk9VTkRQRCwgVU5LTk9X TiwgMCB9LAogICB7IE9QVElPTl9NQVNLX0lTQV9TU0U0XzEsIENPREVfRk9S X3NzZTRfMV9yb3VuZHBzLCAwLCBJWDg2X0JVSUxUSU5fUk9VTkRQUywgVU5L Tk9XTiwgMCB9LAorCisgIC8qIEFFUyAqLworICB7IE9QVElPTl9NQVNLX0lT QV9TU0U0XzIsIENPREVfRk9SX2Flc2ltYywgMCwgSVg4Nl9CVUlMVElOX0FF U0lNQzEyOCwgVU5LTk9XTiwgMCB9LAogfTsKIAogLyogU1NFNSAqLwpAQCAt MTk1ODAsNiArMTk2MTgsMjUgQEAgaXg4Nl9pbml0X21teF9zc2VfYnVpbHRp bnMgKHZvaWQpCiAJCQkJICAgIE5VTExfVFJFRSk7CiAgIGRlZl9idWlsdGlu X2NvbnN0IChPUFRJT05fTUFTS19JU0FfU1NFNF8yLCAiX19idWlsdGluX2lh MzJfY3JjMzJkaSIsIGZ0eXBlLCBJWDg2X0JVSUxUSU5fQ1JDMzJESSk7CiAK KyAgLyogQUVTICovCisgIGlmIChUQVJHRVRfQUVTKQorICAgIHsKKyAgICAg IC8qIERlZmluZSBBRVMgYnVpbHQtaW4gZnVuY3Rpb25zIG9ubHkgaWYgQUVT IGlzIGVuYWJsZWQuICAqLworICAgICAgZGVmX2J1aWx0aW5fY29uc3QgKE9Q VElPTl9NQVNLX0lTQV9TU0U0XzIsICJfX2J1aWx0aW5faWEzMl9hZXNlbmMx MjgiLCB2MmRpX2Z0eXBlX3YyZGlfdjJkaSwgSVg4Nl9CVUlMVElOX0FFU0VO QzEyOCk7CisgICAgICBkZWZfYnVpbHRpbl9jb25zdCAoT1BUSU9OX01BU0tf SVNBX1NTRTRfMiwgIl9fYnVpbHRpbl9pYTMyX2Flc2VuY2xhc3QxMjgiLCB2 MmRpX2Z0eXBlX3YyZGlfdjJkaSwgSVg4Nl9CVUlMVElOX0FFU0VOQ0xBU1Qx MjgpOworICAgICAgZGVmX2J1aWx0aW5fY29uc3QgKE9QVElPTl9NQVNLX0lT QV9TU0U0XzIsICJfX2J1aWx0aW5faWEzMl9hZXNkZWMxMjgiLCB2MmRpX2Z0 eXBlX3YyZGlfdjJkaSwgSVg4Nl9CVUlMVElOX0FFU0RFQzEyOCk7CisgICAg ICBkZWZfYnVpbHRpbl9jb25zdCAoT1BUSU9OX01BU0tfSVNBX1NTRTRfMiwg Il9fYnVpbHRpbl9pYTMyX2Flc2RlY2xhc3QxMjgiLCB2MmRpX2Z0eXBlX3Yy ZGlfdjJkaSwgSVg4Nl9CVUlMVElOX0FFU0RFQ0xBU1QxMjgpOworICAgICAg ZGVmX2J1aWx0aW5fY29uc3QgKE9QVElPTl9NQVNLX0lTQV9TU0U0XzIsICJf X2J1aWx0aW5faWEzMl9hZXNpbWMxMjgiLCB2MmRpX2Z0eXBlX3YyZGksIElY ODZfQlVJTFRJTl9BRVNJTUMxMjgpOworICAgICAgZGVmX2J1aWx0aW5fY29u c3QgKE9QVElPTl9NQVNLX0lTQV9TU0UyLCAiX19idWlsdGluX2lhMzJfYWVz a2V5Z2VuYXNzaXN0MTI4IiwgdjJkaV9mdHlwZV92MmRpX2ludCwgSVg4Nl9C VUlMVElOX0FFU0tFWUdFTkFTU0lTVDEyOCk7CisgICAgfQorCisgIC8qIENM TVVMICovCisgIGlmIChUQVJHRVRfQ0xNVUwpCisgICAgeworICAgICAgLyog RGVmaW5lIENMTVVMIGJ1aWx0LWluIGZ1bmN0aW9uIG9ubHkgaWYgQ0xNVUwg aXMgZW5hYmxlZC4gICovCisgICAgICBkZWZfYnVpbHRpbl9jb25zdCAoT1BU SU9OX01BU0tfSVNBX1NTRTRfMiwgIl9fYnVpbHRpbl9pYTMyX3BjbG11bHFk cTEyOCIsIHYyZGlfZnR5cGVfdjJkaV92MmRpX2ludCwgSVg4Nl9CVUlMVElO X1BDTE1VTFFEUTEyOCk7CisgICAgfQorCiAgIC8qIEFNREZBTTEwIFNTRTRB IE5ldyBidWlsdC1pbnMgICovCiAgIGRlZl9idWlsdGluIChPUFRJT05fTUFT S19JU0FfU1NFNEEsICJfX2J1aWx0aW5faWEzMl9tb3ZudHNkIiwgdm9pZF9m dHlwZV9wZG91YmxlX3YyZGYsIElYODZfQlVJTFRJTl9NT1ZOVFNEKTsKICAg ZGVmX2J1aWx0aW4gKE9QVElPTl9NQVNLX0lTQV9TU0U0QSwgIl9fYnVpbHRp bl9pYTMyX21vdm50c3MiLCB2b2lkX2Z0eXBlX3BmbG9hdF92NHNmLCBJWDg2 X0JVSUxUSU5fTU9WTlRTUyk7CkBAIC0xOTg2MCw2ICsxOTkxNyw0NCBAQCBp eDg2X2V4cGFuZF9jcmMzMiAoZW51bSBpbnNuX2NvZGUgaWNvZGUsCiAgIHJl dHVybiB0YXJnZXQ7CiB9CiAKKy8qIFN1YnJvdXRpbmUgb2YgaXg4Nl9leHBh bmRfYnVpbHRpbiB0byB0YWtlIGNhcmUgb2YgYmlub3AgaW5zbnMKKyAgIHdp dGggYW4gaW1tZWRpYXRlLiAgKi8KKworc3RhdGljIHJ0eAoraXg4Nl9leHBh bmRfYmlub3BfaW1tX2J1aWx0aW4gKGVudW0gaW5zbl9jb2RlIGljb2RlLCB0 cmVlIGV4cCwKKwkJCQlydHggdGFyZ2V0KQoreworICBydHggcGF0OworICB0 cmVlIGFyZzAgPSBDQUxMX0VYUFJfQVJHIChleHAsIDApOworICB0cmVlIGFy ZzEgPSBDQUxMX0VYUFJfQVJHIChleHAsIDEpOworICBydHggb3AwID0gZXhw YW5kX25vcm1hbCAoYXJnMCk7CisgIHJ0eCBvcDEgPSBleHBhbmRfbm9ybWFs IChhcmcxKTsKKyAgZW51bSBtYWNoaW5lX21vZGUgdG1vZGUgPSBpbnNuX2Rh dGFbaWNvZGVdLm9wZXJhbmRbMF0ubW9kZTsKKyAgZW51bSBtYWNoaW5lX21v ZGUgbW9kZTAgPSBpbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMV0ubW9kZTsK KyAgZW51bSBtYWNoaW5lX21vZGUgbW9kZTEgPSBpbnNuX2RhdGFbaWNvZGVd Lm9wZXJhbmRbMl0ubW9kZTsKKworICBpZiAoISAoKmluc25fZGF0YVtpY29k ZV0ub3BlcmFuZFsxXS5wcmVkaWNhdGUpIChvcDAsIG1vZGUxKSkKKyAgICB7 CisgICAgICBvcDAgPSBjb3B5X3RvX3JlZyAob3AwKTsKKyAgICAgIG9wMCA9 IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKG1vZGUwLCBvcDAsIEdFVF9NT0RFIChv cDApLCAwKTsKKyAgICB9CisKKyAgaWYgKCEgKCppbnNuX2RhdGFbaWNvZGVd Lm9wZXJhbmRbMl0ucHJlZGljYXRlKSAob3AxLCBtb2RlMSkpCisgICAgewor ICAgICAgZXJyb3IgKCJ0aGUgbGFzdCBvcGVyYW5kIG11c3QgYmUgYW4gaW1t ZWRpYXRlIik7CisgICAgICByZXR1cm4gY29uc3QwX3J0eDsKKyAgICB9CisK KyAgdGFyZ2V0ID0gZ2VuX3JlZ19ydHggKFYyREltb2RlKTsKKyAgcGF0ID0g R0VOX0ZDTiAoaWNvZGUpIChzaW1wbGlmeV9nZW5fc3VicmVnICh0bW9kZSwg dGFyZ2V0LAorCQkJCQkgICAgICBWMkRJbW9kZSwgMCksCisJCQkgb3AwLCBv cDEpOworICBpZiAoISBwYXQpCisgICAgcmV0dXJuIDA7CisgIGVtaXRfaW5z biAocGF0KTsKKyAgcmV0dXJuIHRhcmdldDsKK30KKwogLyogU3Vicm91dGlu ZSBvZiBpeDg2X2V4cGFuZF9idWlsdGluIHRvIHRha2UgY2FyZSBvZiBiaW5v cCBpbnNucy4gICovCiAKIHN0YXRpYyBydHgKQEAgLTIwOTUyLDM0ICsyMTA0 NywxOCBAQCBpeDg2X2V4cGFuZF9idWlsdGluICh0cmVlIGV4cCwgcnR4IHRh cmdlCiAgICAgICByZXR1cm4gdGFyZ2V0OwogCiAgICAgY2FzZSBJWDg2X0JV SUxUSU5fUFNMTERRSTEyODoKKyAgICAgIHJldHVybiBpeDg2X2V4cGFuZF9i aW5vcF9pbW1fYnVpbHRpbiAoQ09ERV9GT1Jfc3NlMl9hc2hsdGkzLAorCQkJ CQkgICAgIGV4cCwgdGFyZ2V0KTsKKyAgICAgIGJyZWFrOworCiAgICAgY2Fz ZSBJWDg2X0JVSUxUSU5fUFNSTERRSTEyODoKLSAgICAgIGljb2RlID0gKGZj b2RlID09IElYODZfQlVJTFRJTl9QU0xMRFFJMTI4ID8gQ09ERV9GT1Jfc3Nl Ml9hc2hsdGkzCi0JICAgICAgIDogQ09ERV9GT1Jfc3NlMl9sc2hydGkzKTsK LSAgICAgIGFyZzAgPSBDQUxMX0VYUFJfQVJHIChleHAsIDApOwotICAgICAg YXJnMSA9IENBTExfRVhQUl9BUkcgKGV4cCwgMSk7Ci0gICAgICBvcDAgPSBl eHBhbmRfbm9ybWFsIChhcmcwKTsKLSAgICAgIG9wMSA9IGV4cGFuZF9ub3Jt YWwgKGFyZzEpOwotICAgICAgdG1vZGUgPSBpbnNuX2RhdGFbaWNvZGVdLm9w ZXJhbmRbMF0ubW9kZTsKLSAgICAgIG1vZGUxID0gaW5zbl9kYXRhW2ljb2Rl XS5vcGVyYW5kWzFdLm1vZGU7Ci0gICAgICBtb2RlMiA9IGluc25fZGF0YVtp Y29kZV0ub3BlcmFuZFsyXS5tb2RlOworICAgICAgcmV0dXJuIGl4ODZfZXhw YW5kX2Jpbm9wX2ltbV9idWlsdGluIChDT0RFX0ZPUl9zc2UyX2xzaHJ0aTMs CisJCQkJCSAgICAgZXhwLCB0YXJnZXQpOworICAgICAgYnJlYWs7CiAKLSAg ICAgIGlmICghICgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLnByZWRp Y2F0ZSkgKG9wMCwgbW9kZTEpKQotCXsKLQkgIG9wMCA9IGNvcHlfdG9fcmVn IChvcDApOwotCSAgb3AwID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAobW9kZTEs IG9wMCwgR0VUX01PREUgKG9wMCksIDApOwotCX0KLSAgICAgIGlmICghICgq aW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzJdLnByZWRpY2F0ZSkgKG9wMSwg bW9kZTIpKQotCXsKLQkgIGVycm9yICgic2hpZnQgbXVzdCBiZSBhbiBpbW1l ZGlhdGUiKTsKLQkgIHJldHVybiBjb25zdDBfcnR4OwotCX0KLSAgICAgIHRh cmdldCA9IGdlbl9yZWdfcnR4IChWMkRJbW9kZSk7Ci0gICAgICBwYXQgPSBH RU5fRkNOIChpY29kZSkgKHNpbXBsaWZ5X2dlbl9zdWJyZWcgKHRtb2RlLCB0 YXJnZXQsIFYyREltb2RlLCAwKSwKLQkJCSAgICAgb3AwLCBvcDEpOwotICAg ICAgaWYgKCEgcGF0KQotCXJldHVybiAwOwotICAgICAgZW1pdF9pbnNuIChw YXQpOwotICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICBjYXNlIElYODZfQlVJ TFRJTl9BRVNLRVlHRU5BU1NJU1QxMjg6CisgICAgICByZXR1cm4gaXg4Nl9l eHBhbmRfYmlub3BfaW1tX2J1aWx0aW4gKENPREVfRk9SX2Flc2tleWdlbmFz c2lzdCwKKwkJCQkJICAgICBleHAsIHRhcmdldCk7CiAKICAgICBjYXNlIElY ODZfQlVJTFRJTl9GRU1NUzoKICAgICAgIGVtaXRfaW5zbiAoZ2VuX21teF9m ZW1tcyAoKSk7Ci0tLSBnY2MvY29uZmlnL2kzODYvaTM4Ni5oLmFlcwkyMDA4 LTA0LTAzIDEyOjIwOjQ1LjAwMDAwMDAwMCAtMDcwMAorKysgZ2NjL2NvbmZp Zy9pMzg2L2kzODYuaAkyMDA4LTA0LTAzIDEzOjEzOjI4LjAwMDAwMDAwMCAt MDcwMApAQCAtMzk1LDYgKzM5NSw4IEBAIGV4dGVybiBpbnQgeDg2X3ByZWZl dGNoX3NzZTsKICNkZWZpbmUgVEFSR0VUX1NBSEYJCXg4Nl9zYWhmCiAjZGVm aW5lIFRBUkdFVF9SRUNJUAkJeDg2X3JlY2lwCiAjZGVmaW5lIFRBUkdFVF9G VVNFRF9NQURECXg4Nl9mdXNlZF9tdWxhZGQKKyNkZWZpbmUgVEFSR0VUX0FF UwkJKFRBUkdFVF9TU0U0XzIgJiYgeDg2X2FlcykKKyNkZWZpbmUgVEFSR0VU X0NMTVVMCQkoVEFSR0VUX1NTRTRfMiAmJiB4ODZfY2xtdWwpCiAKICNkZWZp bmUgQVNTRU1CTEVSX0RJQUxFQ1QJKGl4ODZfYXNtX2RpYWxlY3QpCiAKQEAg LTY4Myw2ICs2ODUsMTAgQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKmhvc3RfZGV0 ZWN0X2xvY2FsX2NwdQogCWJ1aWx0aW5fZGVmaW5lICgiX19TU0U0XzFfXyIp OwkJCQlcCiAgICAgICBpZiAoVEFSR0VUX1NTRTRfMikJCQkJCVwKIAlidWls dGluX2RlZmluZSAoIl9fU1NFNF8yX18iKTsJCQkJXAorICAgICAgaWYgKFRB UkdFVF9BRVMpCQkJCQkJXAorCWJ1aWx0aW5fZGVmaW5lICgiX19BRVNfXyIp OwkJCQlcCisgICAgICBpZiAoVEFSR0VUX0NMTVVMKQkJCQkJCVwKKwlidWls dGluX2RlZmluZSAoIl9fQ0xNVUxfXyIpOwkJCQlcCiAgICAgICBpZiAoVEFS R0VUX1NTRTRBKQkJCQkJCVwKICAJYnVpbHRpbl9kZWZpbmUgKCJfX1NTRTRB X18iKTsJCSAgICAgICAgICAgICAgICBcCiAgICAgICBpZiAoVEFSR0VUX1NT RTUpCQkJCQkJXAotLS0gZ2NjL2NvbmZpZy9pMzg2L2kzODYubWQuYWVzCTIw MDgtMDQtMDMgMTI6MjA6NDUuMDAwMDAwMDAwIC0wNzAwCisrKyBnY2MvY29u ZmlnL2kzODYvaTM4Ni5tZAkyMDA4LTA0LTAzIDEyOjIwOjQ1LjAwMDAwMDAw MCAtMDcwMApAQCAtMTg2LDYgKzE4NiwxNyBAQAogICAgKFVOU1BFQ19GUkNa CQkJMTU2KQogICAgKFVOU1BFQ19DVlRQSDJQUwkJMTU3KQogICAgKFVOU1BF Q19DVlRQUzJQSAkJMTU4KQorCisgICA7IEZvciBBRVMgc3VwcG9ydAorICAg KFVOU1BFQ19BRVNFTkMJCTE1OSkKKyAgIChVTlNQRUNfQUVTRU5DTEFTVAkJ MTYwKQorICAgKFVOU1BFQ19BRVNERUMJCTE2MSkKKyAgIChVTlNQRUNfQUVT REVDTEFTVAkJMTYyKQorICAgKFVOU1BFQ19BRVNJTUMJCTE2MykKKyAgIChV TlNQRUNfQUVTS0VZR0VOQVNTSVNUCTE2NCkKKworICAgOyBGb3IgQ0xNVUwg c3VwcG9ydAorICAgKFVOU1BFQ19DTE1VTAkJMTY1KQogICBdKQogCiAoZGVm aW5lX2NvbnN0YW50cwotLS0gZ2NjL2NvbmZpZy9pMzg2L2kzODYub3B0LmFl cwkyMDA3LTA5LTEyIDIxOjQ0OjMyLjAwMDAwMDAwMCAtMDcwMAorKysgZ2Nj L2NvbmZpZy9pMzg2L2kzODYub3B0CTIwMDgtMDQtMDMgMTM6MTQ6MDkuMDAw MDAwMDAwIC0wNzAwCkBAIC0yNzUsMyArMjc1LDExIEBAIFRhcmdldCBSZXBv cnQgVmFyKHg4Nl9mdXNlZF9tdWxhZGQpIEluaXQKIEVuYWJsZSBhdXRvbWF0 aWMgZ2VuZXJhdGlvbiBvZiBmdXNlZCBmbG9hdGluZyBwb2ludCBtdWx0aXBs eS1hZGQgaW5zdHJ1Y3Rpb25zCiBpZiB0aGUgSVNBIHN1cHBvcnRzIHN1Y2gg aW5zdHJ1Y3Rpb25zLiAgVGhlIC1tZnVzZWQtbWFkZCBvcHRpb24gaXMgb24g YnkKIGRlZmF1bHQuCisKK21hZXMKK1RhcmdldCBSZXBvcnQgUmVqZWN0TmVn YXRpdmUgVmFyKHg4Nl9hZXMpCitTdXBwb3J0IE1NWCwgU1NFLCBTU0UyLCBT U0UzLCBTU1NFMywgU1NFNC4xLCBTU0U0LjIgYW5kIEFFUyBidWlsdC1pbiBm dW5jdGlvbnMgYW5kIGNvZGUgZ2VuZXJhdGlvbgorCittY2xtdWwKK1Rhcmdl dCBSZXBvcnQgUmVqZWN0TmVnYXRpdmUgVmFyKHg4Nl9jbG11bCkKK1N1cHBv cnQgTU1YLCBTU0UsIFNTRTIsIFNTRTMsIFNTU0UzLCBTU0U0LjEsIFNTRTQu MiBhbmQgQ0xNVUwgYnVpbHQtaW4gZnVuY3Rpb25zIGFuZCBjb2RlIGdlbmVy YXRpb24KLS0tIGdjYy9jb25maWcvaTM4Ni9zc2UubWQuYWVzCTIwMDgtMDQt MDMgMTE6NDk6MDkuMDAwMDAwMDAwIC0wNzAwCisrKyBnY2MvY29uZmlnL2kz ODYvc3NlLm1kCTIwMDgtMDQtMDMgMTI6MjA6NDUuMDAwMDAwMDAwIC0wNzAw CkBAIC03ODk3LDMgKzc4OTcsODAgQEAKIH0KICAgWyhzZXRfYXR0ciAidHlw ZSIgInNzZWNtcCIpCiAgICAoc2V0X2F0dHIgIm1vZGUiICJUSSIpXSkKKwor KGRlZmluZV9pbnNuICJhZXNlbmMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5k OlYyREkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj14IikKKwkodW5zcGVjOlYy REkgWyhtYXRjaF9vcGVyYW5kOlYyREkgMSAicmVnaXN0ZXJfb3BlcmFuZCIg IjAiKQorCQkgICAgICAgKG1hdGNoX29wZXJhbmQ6VjJESSAyICJub25pbW1l ZGlhdGVfb3BlcmFuZCIgInhtIildCisJCSAgICAgIFVOU1BFQ19BRVNFTkMp KV0KKyAgIlRBUkdFVF9BRVMiCisgICJhZXNlbmNcdHslMiwgJTB8JTAsICUy fSIKKyAgWyhzZXRfYXR0ciAidHlwZSIgInNzZWxvZzEiKQorICAgKHNldF9h dHRyICJwcmVmaXhfZXh0cmEiICIxIikKKyAgIChzZXRfYXR0ciAibW9kZSIg IlRJIildKQorCisoZGVmaW5lX2luc24gImFlc2VuY2xhc3QiCisgIFsoc2V0 IChtYXRjaF9vcGVyYW5kOlYyREkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj14 IikKKwkodW5zcGVjOlYyREkgWyhtYXRjaF9vcGVyYW5kOlYyREkgMSAicmVn aXN0ZXJfb3BlcmFuZCIgIjAiKQorCQkgICAgICAgKG1hdGNoX29wZXJhbmQ6 VjJESSAyICJub25pbW1lZGlhdGVfb3BlcmFuZCIgInhtIildCisJCSAgICAg IFVOU1BFQ19BRVNFTkNMQVNUKSldCisgICJUQVJHRVRfQUVTIgorICAiYWVz ZW5jbGFzdFx0eyUyLCAlMHwlMCwgJTJ9IgorICBbKHNldF9hdHRyICJ0eXBl IiAic3NlbG9nMSIpCisgICAoc2V0X2F0dHIgInByZWZpeF9leHRyYSIgIjEi KQorICAgKHNldF9hdHRyICJtb2RlIiAiVEkiKV0pCisKKyhkZWZpbmVfaW5z biAiYWVzZGVjIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMkRJIDAgInJl Z2lzdGVyX29wZXJhbmQiICI9eCIpCisJKHVuc3BlYzpWMkRJIFsobWF0Y2hf b3BlcmFuZDpWMkRJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwIikKKwkJICAg ICAgIChtYXRjaF9vcGVyYW5kOlYyREkgMiAibm9uaW1tZWRpYXRlX29wZXJh bmQiICJ4bSIpXQorCQkgICAgICBVTlNQRUNfQUVTREVDKSldCisgICJUQVJH RVRfQUVTIgorICAiYWVzZGVjXHR7JTIsICUwfCUwLCAlMn0iCisgIFsoc2V0 X2F0dHIgInR5cGUiICJzc2Vsb2cxIikKKyAgIChzZXRfYXR0ciAicHJlZml4 X2V4dHJhIiAiMSIpCisgICAoc2V0X2F0dHIgIm1vZGUiICJUSSIpXSkKKwor KGRlZmluZV9pbnNuICJhZXNkZWNsYXN0IgorICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpWMkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9eCIpCisJKHVuc3Bl YzpWMkRJIFsobWF0Y2hfb3BlcmFuZDpWMkRJIDEgInJlZ2lzdGVyX29wZXJh bmQiICIwIikKKwkJICAgICAgIChtYXRjaF9vcGVyYW5kOlYyREkgMiAibm9u aW1tZWRpYXRlX29wZXJhbmQiICJ4bSIpXQorCQkgICAgICBVTlNQRUNfQUVT REVDTEFTVCkpXQorICAiVEFSR0VUX0FFUyIKKyAgImFlc2RlY2xhc3RcdHsl MiwgJTB8JTAsICUyfSIKKyAgWyhzZXRfYXR0ciAidHlwZSIgInNzZWxvZzEi KQorICAgKHNldF9hdHRyICJwcmVmaXhfZXh0cmEiICIxIikKKyAgIChzZXRf YXR0ciAibW9kZSIgIlRJIildKQorCisoZGVmaW5lX2luc24gImFlc2ltYyIK KyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJESSAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiPXgiKQorCSh1bnNwZWM6VjJESSBbKG1hdGNoX29wZXJhbmQ6VjJE SSAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIgInhtIildCisJCSAgICAgIFVO U1BFQ19BRVNJTUMpKV0KKyAgIlRBUkdFVF9BRVMiCisgICJhZXNpbWNcdHsl MSwgJTB8JTAsICUxfSIKKyAgWyhzZXRfYXR0ciAidHlwZSIgInNzZWxvZzEi KQorICAgKHNldF9hdHRyICJwcmVmaXhfZXh0cmEiICIxIikKKyAgIChzZXRf YXR0ciAibW9kZSIgIlRJIildKQorCisoZGVmaW5lX2luc24gImFlc2tleWdl bmFzc2lzdCIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJESSAwICJyZWdp c3Rlcl9vcGVyYW5kIiAiPXgiKQorCSh1bnNwZWM6VjJESSBbKG1hdGNoX29w ZXJhbmQ6VjJESSAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIgInhtIikKKwkJ ICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAiY29uc3RfMF90b18yNTVfb3Bl cmFuZCIgIm4iKV0KKwkJICAgICBVTlNQRUNfQUVTS0VZR0VOQVNTSVNUKSld CisgICJUQVJHRVRfQUVTIgorICAiYWVza2V5Z2VuYXNzaXN0XHR7JTIsICUx LCAlMHwlMCwgJTEsICUyfSIKKyAgWyhzZXRfYXR0ciAidHlwZSIgInNzZWxv ZzEiKQorICAgKHNldF9hdHRyICJwcmVmaXhfZXh0cmEiICIxIikKKyAgIChz ZXRfYXR0ciAibW9kZSIgIlRJIildKQorCisoZGVmaW5lX2luc24gInBjbG11 bHFkcSIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJESSAwICJyZWdpc3Rl cl9vcGVyYW5kIiAiPXgiKQorCSh1bnNwZWM6VjJESSBbKG1hdGNoX29wZXJh bmQ6VjJESSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpCisJCSAgICAgICht YXRjaF9vcGVyYW5kOlYyREkgMiAibm9uaW1tZWRpYXRlX29wZXJhbmQiICJ4 bSIpCisJCSAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDMgImNvbnN0XzBfdG9f MjU1X29wZXJhbmQiICJuIildCisJCSAgICAgVU5TUEVDX0NMTVVMKSldCisg ICJUQVJHRVRfQ0xNVUwiCisgICJwY2xtdWxxZHFcdHslMywgJTIsICUwfCUw LCAlMiwgJTN9IgorICBbKHNldF9hdHRyICJ0eXBlIiAic3NlbG9nMSIpCisg ICAoc2V0X2F0dHIgInByZWZpeF9leHRyYSIgIjEiKQorICAgKHNldF9hdHRy ICJtb2RlIiAiVEkiKV0pCi0tLSBnY2MvY29uZmlnL2kzODYvd21taW50cmlu LmguYWVzCTIwMDgtMDQtMDMgMTI6MjA6NDUuMDAwMDAwMDAwIC0wNzAwCisr KyBnY2MvY29uZmlnL2kzODYvd21taW50cmluLmgJMjAwOC0wNC0wMyAxNDoz OTozMS4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSwxMjQgQEAKKy8qIENv cHlyaWdodCAoQykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0Mg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIs IG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgor CisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor ICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYg bm90LCB3cml0ZSB0bworICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgQm9zdG9uLCBN QSAwMjExMS0xMzA3LCBVU0EuICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhj ZXB0aW9uLCBpZiB5b3UgaW5jbHVkZSB0aGlzIGhlYWRlciBmaWxlIGludG8g c291cmNlCisgICBmaWxlcyBjb21waWxlZCBieSBHQ0MsIHRoaXMgaGVhZGVy IGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlCisgICB0aGUgcmVzdWx0 aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVy YWwgUHVibGljCisgICBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBu b3QgaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlcgorICAgcmVhc29ucyB3 aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRo ZSBHTlUgR2VuZXJhbAorICAgUHVibGljIExpY2Vuc2UuICAqLworCisvKiBJ bXBsZW1lbnRlZCBmcm9tIHRoZSBzcGVjaWZpY2F0aW9uIGluY2x1ZGVkIGlu IHRoZSBJbnRlbCBDKysgQ29tcGlsZXIKKyAgIFVzZXIgR3VpZGUgYW5kIFJl ZmVyZW5jZSwgdmVyc2lvbiAxMC4xLiAgKi8KKworI2lmbmRlZiBfV01NSU5U UklOX0hfSU5DTFVERUQKKyNkZWZpbmUgX1dNTUlOVFJJTl9IX0lOQ0xVREVE CisKKyNpZiAhZGVmaW5lZCAoX19BRVNfXykgJiYgIWRlZmluZWQgKF9fQ0xN VUxfXykKKyMgZXJyb3IgIkFFUy9DTE1VTCBpbnN0cnVjdGlvbiBzZXQgbm90 IGVuYWJsZWQiCisjZWxzZQorCisvKiBXZSBuZWVkIGRlZmluaXRpb25zIGZy b20gdGhlIFNTRTQsIFNTU0UzLCBTU0UzLCBTU0UyIGFuZCBTU0UgaGVhZGVy CisgICBmaWxlcy4gICovCisjaW5jbHVkZSA8c21taW50cmluLmg+CisKKy8q IEFFUyAqLworCisjaWZkZWYgX19BRVNfXworLyogUGVyZm9ybXMgMSByb3Vu ZCBvZiBBRVMgZGVjcnlwdGlvbiBvZiB0aGUgZmlyc3QgbTEyOGkgdXNpbmcg CisgICB0aGUgc2Vjb25kIG0xMjhpIGFzIGEgcm91bmQga2V5LiAgKi8KK2V4 dGVybiBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fZ251X2lu bGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQor X21tX2Flc2RlY19zaTEyOCAoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQor eworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2Flc2RlYzEy OCAoKF9fdjJkaSlfX1gsIChfX3YyZGkpX19ZKTsKK30KKworLyogUGVyZm9y bXMgdGhlIGxhc3Qgcm91bmQgb2YgQUVTIGRlY3J5cHRpb24gb2YgdGhlIGZp cnN0IG0xMjhpIAorICAgdXNpbmcgdGhlIHNlY29uZCBtMTI4aSBhcyBhIHJv dW5kIGtleS4gICovCitleHRlcm4gX19pbmxpbmUgX19tMTI4aSBfX2F0dHJp YnV0ZV9fKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9f YXJ0aWZpY2lhbF9fKSkKK19tbV9hZXNkZWNsYXN0X3NpMTI4IChfX20xMjhp IF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19i dWlsdGluX2lhMzJfYWVzZGVjbGFzdDEyOCAoKF9fdjJkaSlfX1gsCisJCQkJ CQkgKF9fdjJkaSlfX1kpOworfQorCisvKiBQZXJmb3JtcyAxIHJvdW5kIG9m IEFFUyBlbmNyeXB0aW9uIG9mIHRoZSBmaXJzdCBtMTI4aSB1c2luZyAKKyAg IHRoZSBzZWNvbmQgbTEyOGkgYXMgYSByb3VuZCBrZXkuICAqLworZXh0ZXJu IF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5l X18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfbW1f YWVzZW5jX3NpMTI4IChfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7Cisg IHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfYWVzZW5jMTI4ICgo X192MmRpKV9fWCwgKF9fdjJkaSlfX1kpOworfQorCisvKiBQZXJmb3JtcyB0 aGUgbGFzdCByb3VuZCBvZiBBRVMgZW5jcnlwdGlvbiBvZiB0aGUgZmlyc3Qg bTEyOGkKKyAgIHVzaW5nIHRoZSBzZWNvbmQgbTEyOGkgYXMgYSByb3VuZCBr ZXkuICAqLworZXh0ZXJuIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVf XygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCitfbW1fYWVzZW5jbGFzdF9zaTEyOCAoX19tMTI4aSBfX1gs IF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRp bl9pYTMyX2Flc2VuY2xhc3QxMjggKChfX3YyZGkpX19YLCAoX192MmRpKV9f WSk7Cit9CisKKy8qIFBlcmZvcm1zIHRoZSBJbnZlcnNlTWl4Q29sdW1uIG9w ZXJhdGlvbiBvbiB0aGUgc291cmNlIG0xMjhpIAorICAgYW5kIHN0b3JlcyB0 aGUgcmVzdWx0IGludG8gbTEyOGkgZGVzdGluYXRpb24uICAqLworZXh0ZXJu IF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5l X18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfbW1f YWVzaW1jX3NpMTI4IChfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20x MjhpKSBfX2J1aWx0aW5faWEzMl9hZXNpbWMxMjggKChfX3YyZGkpX19YKTsK K30KKworLyogR2VuZXJhdGVzIGEgbTEyOGkgcm91bmQga2V5IGZvciB0aGUg aW5wdXQgbTEyOGkgQUVTIGNpcGhlciBrZXkgYW5kCisgICBieXRlIHJvdW5k IGNvbnN0YW50LiAgVGhlIHNlY29uZCBwYXJhbWV0ZXIgbXVzdCBiZSBhIGNv bXBpbGUgdGltZQorICAgY29uc3RhbnQuICAqLworI2lmZGVmIF9fT1BUSU1J WkVfXworZXh0ZXJuIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygo X19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCitfbW1fYWVza2V5Z2VuYXNzaXN0X3NpMTI4IChfX20xMjhpIF9f WCwgY29uc3QgaW50IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1 aWx0aW5faWEzMl9hZXNrZXlnZW5hc3Npc3QxMjggKChfX3YyZGkpX19YLCBf X0MpOworfQorI2Vsc2UKKyNkZWZpbmUgX21tX2Flc2tleWdlbmFzc2lzdF9z aTEyOChYLCBDKQkJCQkJXAorICAoKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMy X2Flc2tleWdlbmFzc2lzdDEyOCAoKF9fdjJkaSkoX19tMTI4aSkoWCksCVwK KwkJCQkJCShpbnQpKEMpKSkKKyNlbmRpZgorI2VuZGlmICAvKiBfX0FFU19f ICovCisKKy8qIENMTVVMICovCisKKyNpZmRlZiBfX0NMTVVMX18KKy8qIFBl cmZvcm1zIGNhcnJ5LWxlc3MgaW50ZWdlciBtdWx0aXBsaWNhdGlvbiBvZiA2 NC1iaXQgaGFsdmVzIG9mCisgICAxMjgtYml0IGlucHV0IG9wZXJhbmRzLiAg VGhlIHRoaXJkIHBhcmFtZXRlciBpbmR1Y2F0ZXMgd2hpY2ggNjQtYml0Cisg ICBoYXZlcyBvZiB0aGUgaW5wdXQgcGFyYW1ldGVycyB2MSBhbmQgdjIgc2hv dWxkIGJlIHVzZWQuIEl0IG11c3QgYmUKKyAgIGEgY29tcGlsZSB0aW1lIGNv bnN0YW50LiAgKi8KKyNpZmRlZiBfX09QVElNSVpFX18KK2V4dGVybiBfX2lu bGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fLCBf X2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX21tX2NsbXVs ZXBpNjRfc2kxMjggKF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSwgY29uc3Qg aW50IF9fSSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEz Ml9wY2xtdWxxZHExMjggKChfX3YyZGkpX19YLAorCQkJCQkJKF9fdjJkaSlf X1ksIF9fSSk7Cit9CisjZWxzZQorI2RlZmluZSBfbW1fY2xtdWxlcGk2NF9z aTEyOChYLCBZLCBJKQkJCQkJXAorICAoKF9fbTEyOGkpIF9fYnVpbHRpbl9p YTMyX3BjbG11bHFkcTEyOCAoKF9fdjJkaSkoX19tMTI4aSkoWCksCQlcCisJ CQkJCSAgKF9fdjJkaSkoX19tMTI4aSkoWSksIChpbnQpKEkpKSkKKyNlbmRp ZgorI2VuZGlmICAvKiBfX0NMTVVMX18gICovCisKKyNlbmRpZiAvKiBfX0FF U19fL19fQ0xNVUxfXyAqLworCisjZW5kaWYgLyogX1dNTUlOVFJJTl9IX0lO Q0xVREVEICovCi0tLSBnY2MvZG9jL2V4dGVuZC50ZXhpLmFlcwkyMDA4LTAz LTI4IDEzOjAzOjE3LjAwMDAwMDAwMCAtMDcwMAorKysgZ2NjL2RvYy9leHRl bmQudGV4aQkyMDA4LTA0LTAzIDEyOjIwOjQ1LjAwMDAwMDAwMCAtMDcwMApA QCAtODAxMyw2ICs4MDEzLDI3IEBAIGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBv ZiBAY29kZXt1bnNpZ25lZCAKIEdlbmVyYXRlcyB0aGUgQGNvZGV7cG9wY250 cX0gbWFjaGluZSBpbnN0cnVjdGlvbi4KIEBlbmQgdGFibGUKIAorVGhlIGZv bGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVu IEBvcHRpb257LW1hZXN9IGlzCit1c2VkLiAgQWxsIG9mIHRoZW0gZ2VuZXJh dGUgdGhlIG1hY2hpbmUgaW5zdHJ1Y3Rpb24gdGhhdCBpcyBwYXJ0IG9mIHRo ZQorbmFtZS4KKworQHNtYWxsZXhhbXBsZQordjJkaSBfX2J1aWx0aW5faWEz Ml9hZXNlbmMxMjggKHYyZGksIHYyZGkpCit2MmRpIF9fYnVpbHRpbl9pYTMy X2Flc2VuY2xhc3QxMjggKHYyZGksIHYyZGkpCit2MmRpIF9fYnVpbHRpbl9p YTMyX2Flc2RlYzEyOCAodjJkaSwgdjJkaSkKK3YyZGkgX19idWlsdGluX2lh MzJfYWVzZGVjbGFzdDEyOCAodjJkaSwgdjJkaSkKK3YyZGkgX19idWlsdGlu X2lhMzJfYWVza2V5Z2VuYXNzaXN0MTI4ICh2MmRpLCBjb25zdCBpbnQpCit2 MmRpIF9fYnVpbHRpbl9pYTMyX2Flc2ltYzEyOCAodjJkaSkKK0BlbmQgc21h bGxleGFtcGxlCisKK1RoZSBmb2xsb3dpbmcgYnVpbHQtaW4gZnVuY3Rpb24g aXMgYXZhaWxhYmxlIHdoZW4gQG9wdGlvbnstbWNsbXVsfSBpcwordXNlZC4K KworQHRhYmxlIEBjb2RlCitAaXRlbSB2MmRpIF9fYnVpbHRpbl9pYTMyX3Bj bG11bHFkcTEyOCAodjJkaSwgdjJkaSwgY29uc3QgaW50KQorR2VuZXJhdGVz IHRoZSBAY29kZXtwY2xtdWxxZHF9IG1hY2hpbmUgaW5zdHJ1Y3Rpb24uCitA ZW5kIHRhYmxlCisKIFRoZSBmb2xsb3dpbmcgYnVpbHQtaW4gZnVuY3Rpb25z IGFyZSBhdmFpbGFibGUgd2hlbiBAb3B0aW9uey1tc3NlNGF9IGlzIHVzZWQu CiBBbGwgb2YgdGhlbSBnZW5lcmF0ZSB0aGUgbWFjaGluZSBpbnN0cnVjdGlv biB0aGF0IGlzIHBhcnQgb2YgdGhlIG5hbWUuCiAKLS0tIGdjYy9kb2MvaW52 b2tlLnRleGkuYWVzCTIwMDgtMDQtMDMgMTI6MjA6NDUuMDAwMDAwMDAwIC0w NzAwCisrKyBnY2MvZG9jL2ludm9rZS50ZXhpCTIwMDgtMDQtMDMgMTI6MjA6 NDUuMDAwMDAwMDAwIC0wNzAwCkBAIC01NTUsNiArNTU1LDcgQEAgT2JqZWN0 aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdHN9LgogLW1uby13aWRl LW11bHRpcGx5ICAtbXJ0ZCAgLW1hbGlnbi1kb3VibGUgQGdvbAogLW1wcmVm ZXJyZWQtc3RhY2stYm91bmRhcnk9QHZhcntudW19IC1tY3gxNiAtbXNhaGYg LW1yZWNpcCBAZ29sCiAtbW1teCAgLW1zc2UgIC1tc3NlMiAtbXNzZTMgLW1z c3NlMyAtbXNzZTQuMSAtbXNzZTQuMiAtbXNzZTQgQGdvbAorLW1hZXMgLW1j bG11bCBAZ29sCiAtbXNzZTRhIC1tM2Rub3cgLW1wb3BjbnQgLW1hYm0gLW1z c2U1IEBnb2wKIC1tdGhyZWFkcyAgLW1uby1hbGlnbi1zdHJpbmdvcHMgIC1t aW5saW5lLWFsbC1zdHJpbmdvcHMgQGdvbAogLW1wdXNoLWFyZ3MgIC1tYWNj dW11bGF0ZS1vdXRnb2luZy1hcmdzICAtbTEyOGJpdC1sb25nLWRvdWJsZSBA Z29sCkBAIC0xMDcyMCw2ICsxMDcyMSwxMCBAQCBwcmVmZXJyZWQgYWxpZ25t ZW50IHRvIEBvcHRpb257LW1wcmVmZXJyCiBAaXRlbXggLW1uby1zc2U0LjIK IEBpdGVteCAtbXNzZTQKIEBpdGVteCAtbW5vLXNzZTQKK0BpdGVteCAtbWFl cworQGl0ZW14IC1tbm8tYWVzCitAaXRlbXggLW1jbG11bAorQGl0ZW14IC1t bm8tY2xtdWwKIEBpdGVteCAtbXNzZTRhCiBAaXRlbXggLW1uby1zc2U0YQog QGl0ZW14IC1tc3NlNQpAQCAtMTA3MzcsOCArMTA3NDIsOCBAQCBwcmVmZXJy ZWQgYWxpZ25tZW50IHRvIEBvcHRpb257LW1wcmVmZXJyCiBAb3BpbmRleCBt M2Rub3cKIEBvcGluZGV4IG1uby0zZG5vdwogVGhlc2Ugc3dpdGNoZXMgZW5h YmxlIG9yIGRpc2FibGUgdGhlIHVzZSBvZiBpbnN0cnVjdGlvbnMgaW4gdGhl IE1NWCwKLVNTRSwgU1NFMiwgU1NFMywgU1NTRTMsIFNTRTQuMSwgU1NFNEEs IFNTRTUsIEFCTSBvciAzRE5vdyFAOiBleHRlbmRlZAotaW5zdHJ1Y3Rpb24g c2V0cy4KK1NTRSwgU1NFMiwgU1NFMywgU1NTRTMsIFNTRTQuMSwgQUVTLCBD TE1VTCwgU1NFNEEsIFNTRTUsIEFCTSBvcgorM0ROb3chQDogZXh0ZW5kZWQg aW5zdHJ1Y3Rpb24gc2V0cy4KIFRoZXNlIGV4dGVuc2lvbnMgYXJlIGFsc28g YXZhaWxhYmxlIGFzIGJ1aWx0LWluIGZ1bmN0aW9uczogc2VlCiBAcmVme1g4 NiBCdWlsdC1pbiBGdW5jdGlvbnN9LCBmb3IgZGV0YWlscyBvZiB0aGUgZnVu Y3Rpb25zIGVuYWJsZWQgYW5kCiBkaXNhYmxlZCBieSB0aGVzZSBzd2l0Y2hl cy4KLS0tIGdjYy90ZXN0c3VpdGUvZysrLmRnL290aGVyL2kzODYtMi5DLmFl cwkyMDA3LTEyLTE1IDE0OjUwOjA4LjAwMDAwMDAwMCAtMDgwMAorKysgZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvb3RoZXIvaTM4Ni0yLkMJMjAwOC0wNC0wMyAx NDoyMTowNi4wMDAwMDAwMDAgLTA3MDAKQEAgLTEsMTAgKzEsMTAgQEAKLS8q IFRlc3QgdGhhdCB7LHgsZSxwLHQscyxhLGJ9bW1pbnRyaW4uaCwgbW0zZG5v dy5oIGFuZCBtbV9tYWxsb2MuaCBhcmUKKy8qIFRlc3QgdGhhdCB7LHgsZSxw LHQscyx3LGEsYn1tbWludHJpbi5oLCBtbTNkbm93LmggYW5kIG1tX21hbGxv Yy5oIGFyZQogICAgdXNhYmxlIHdpdGggLU8gLXBlZGFudGljLWVycm9ycy4g ICovCiAvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgaT84Ni0qLSogeDg2 XzY0LSotKiB9IH0gKi8KLS8qIHsgZGctb3B0aW9ucyAiLU8gLXBlZGFudGlj LWVycm9ycyAtbWFyY2g9azggLW0zZG5vdyAtbXNzZTQgLW1zc2U1IiB9ICov CisvKiB7IGRnLW9wdGlvbnMgIi1PIC1wZWRhbnRpYy1lcnJvcnMgLW1hcmNo PWs4IC1tM2Rub3cgLW1zc2U1IC1tYWVzIC1tY2xtdWwiIH0gKi8KIAogI2lu Y2x1ZGUgPGJtbWludHJpbi5oPgotI2luY2x1ZGUgPHNtbWludHJpbi5oPgor I2luY2x1ZGUgPHdtbWludHJpbi5oPgogI2luY2x1ZGUgPG1tM2Rub3cuaD4K IAogaW50IGR1bW15OwotLS0gZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvb3RoZXIv aTM4Ni0zLkMuYWVzCTIwMDgtMDMtMTcgMDY6NDQ6MzkuMDAwMDAwMDAwIC0w NzAwCisrKyBnY2MvdGVzdHN1aXRlL2crKy5kZy9vdGhlci9pMzg2LTMuQwky MDA4LTA0LTAzIDE0OjIxOjE5LjAwMDAwMDAwMCAtMDcwMApAQCAtMSw4ICsx LDggQEAKLS8qIFRlc3QgdGhhdCB7LHgsZSxwLHQscyxhLGJ9bW1pbnRyaW4u aCwgbW0zZG5vdy5oIGFuZCBtbV9tYWxsb2MuaCBhcmUKKy8qIFRlc3QgdGhh dCB7LHgsZSxwLHQscyx3LGEsYn1tbWludHJpbi5oLCBtbTNkbm93LmggYW5k IG1tX21hbGxvYy5oIGFyZQogICAgdXNhYmxlIHdpdGggLU8gLWZrZWVwLWlu bGluZS1mdW5jdGlvbnMuICAqLwogLyogeyBkZy1kbyBjb21waWxlIHsgdGFy Z2V0IGk/ODYtKi0qIHg4Nl82NC0qLSogfSB9ICovCi0vKiB7IGRnLW9wdGlv bnMgIi1PIC1ma2VlcC1pbmxpbmUtZnVuY3Rpb25zIC1tYXJjaD1rOCAtbTNk bm93IC1tc3NlNCAtbXNzZTUiIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8g LWZrZWVwLWlubGluZS1mdW5jdGlvbnMgLW1hcmNoPWs4IC1tM2Rub3cgLW1h ZXMgLW1jbG11bCAtbXNzZTUiIH0gKi8KIAogI2luY2x1ZGUgPGJtbWludHJp bi5oPgotI2luY2x1ZGUgPHNtbWludHJpbi5oPgorI2luY2x1ZGUgPHdtbWlu dHJpbi5oPgogI2luY2x1ZGUgPG1tM2Rub3cuaD4KLS0tIGdjYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9pMzg2L2Flcy1jaGVjay5oLmFlcwkyMDA4LTA0LTAz IDEyOjIwOjQ1LjAwMDAwMDAwMCAtMDcwMAorKysgZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvYWVzLWNoZWNrLmgJMjAwOC0wNC0wMyAxMjoyMDo0 NS4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSwzMCBAQAorI2luY2x1ZGUg PHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJj cHVpZC5oIgorCitzdGF0aWMgdm9pZCBhZXNfdGVzdCAodm9pZCk7CisKK2lu dAorbWFpbiAoKQoreworICB1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwg ZWR4OworIAorICBpZiAoIV9fZ2V0X2NwdWlkICgxLCAmZWF4LCAmZWJ4LCAm ZWN4LCAmZWR4KSkKKyAgICByZXR1cm4gMDsKKworICAvKiBSdW4gQUVTIHRl c3Qgb25seSBpZiBob3N0IGhhcyBBRVMgc3VwcG9ydC4gICovCisgIGlmIChl Y3ggJiBiaXRfQUVTKQorICAgIHsKKyAgICAgIGFlc190ZXN0ICgpOworI2lm ZGVmIERFQlVHCisgICAgcHJpbnRmICgiUEFTU0VEXG4iKTsKKyNlbmRpZgor ICAgIH0KKyNpZmRlZiBERUJVRworICBlbHNlCisgICAgcHJpbnRmICgiU0tJ UFBFRFxuIik7CisjZW5kaWYKKworICByZXR1cm4gMDsKK30KLS0tIGdjYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2Flc2RlYy5jLmFlcwkyMDA4LTA0 LTAzIDEyOjIwOjQ1LjAwMDAwMDAwMCAtMDcwMAorKysgZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2kzODYvYWVzZGVjLmMJMjAwOC0wNC0wMyAxMjoyMDo0 NS4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSw2NyBAQAorLyogeyBkZy1k byBydW4gfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQg YWVzIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYWVzIiB9ICovCisK KyNpbmNsdWRlIDx3bW1pbnRyaW4uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4K KworI2luY2x1ZGUgImFlcy1jaGVjay5oIgorCitleHRlcm4gdm9pZCBhYm9y dCAodm9pZCk7CisKKyNkZWZpbmUgTlVNIDEwMjQKKworc3RhdGljIF9fbTEy OGkgc3JjMVtOVU1dOworc3RhdGljIF9fbTEyOGkgc3JjMltOVU1dOworc3Rh dGljIF9fbTEyOGkgZWRzdFtOVU1dOworCitzdGF0aWMgX19tMTI4aSByZXNk c3RbTlVNXTsKKworLyogSW5pdGlhbGl6ZSBpbnB1dC9vdXRwdXQgdmVjdG9y cy4gIChDdXJyZW50bHksIHRoZXJlIGlzIG9ubHkgb25lIHNldAorICAgb2Yg aW5wdXQvb3V0cHV0IHZlY3RvcnMpLiAgKi8KK3N0YXRpYyB2b2lkCitpbml0 X2RhdGEgKF9fbTEyOGkgKnMxLCBfX20xMjhpICpzMiwgX19tMTI4aSAqZCkK K3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCBOVU07IGkrKykKKyAg ICB7CisgICAgICBzMVtpXSA9IF9tbV9zZXRyX2VwaTMyICgweDVkNTM0NzVk LCAweDYzNzQ2ZjcyLAorCQkJICAgICAgMHg3Mzc0NTY2NSwgMHg3YjViNTQ2 NSk7CisgICAgICBzMltpXSA9IF9tbV9zZXRyX2VwaTMyICgweDcyNmY2ZTVk LCAweDViNDc3NTY1LAorCQkJICAgICAgMHg2ODYxNzkyOSwgMHg0ODY5Mjg1 Myk7CisgICAgICBkW2ldICA9IF9tbV9zZXRyX2VwaTMyICgweGI3MzAzOTJh LCAweGI1OGViOTVlLAorCQkJICAgICAgMHhmYWVhMjc4NywgMHgxMzhhYzM0 Mik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorYWVzX3Rlc3QgKHZvaWQp Cit7CisgIGludCBpOworCisgIGluaXRfZGF0YSAoc3JjMSwgc3JjMiwgZWRz dCk7CisKKyAgZm9yIChpID0gMDsgaSA8IE5VTTsgaSArPSAxNikKKyAgICB7 CisgICAgICByZXNkc3RbaV0gPSBfbW1fYWVzZGVjX3NpMTI4IChzcmMxW2ld LCBzcmMyW2ldKTsKKyAgICAgIHJlc2RzdFtpICsgMV0gPSBfbW1fYWVzZGVj X3NpMTI4IChzcmMxW2kgKyAxXSwgc3JjMltpICsgMV0pOworICAgICAgcmVz ZHN0W2kgKyAyXSA9IF9tbV9hZXNkZWNfc2kxMjggKHNyYzFbaSArIDJdLCBz cmMyW2kgKyAyXSk7CisgICAgICByZXNkc3RbaSArIDNdID0gX21tX2Flc2Rl Y19zaTEyOCAoc3JjMVtpICsgM10sIHNyYzJbaSArIDNdKTsKKyAgICAgIHJl c2RzdFtpICsgNF0gPSBfbW1fYWVzZGVjX3NpMTI4IChzcmMxW2kgKyA0XSwg c3JjMltpICsgNF0pOworICAgICAgcmVzZHN0W2kgKyA1XSA9IF9tbV9hZXNk ZWNfc2kxMjggKHNyYzFbaSArIDVdLCBzcmMyW2kgKyA1XSk7CisgICAgICBy ZXNkc3RbaSArIDZdID0gX21tX2Flc2RlY19zaTEyOCAoc3JjMVtpICsgNl0s IHNyYzJbaSArIDZdKTsKKyAgICAgIHJlc2RzdFtpICsgN10gPSBfbW1fYWVz ZGVjX3NpMTI4IChzcmMxW2kgKyA3XSwgc3JjMltpICsgN10pOworICAgICAg cmVzZHN0W2kgKyA4XSA9IF9tbV9hZXNkZWNfc2kxMjggKHNyYzFbaSArIDhd LCBzcmMyW2kgKyA4XSk7CisgICAgICByZXNkc3RbaSArIDldID0gX21tX2Fl c2RlY19zaTEyOCAoc3JjMVtpICsgOV0sIHNyYzJbaSArIDldKTsKKyAgICAg IHJlc2RzdFtpICsgMTBdID0gX21tX2Flc2RlY19zaTEyOCAoc3JjMVtpICsg MTBdLCBzcmMyW2kgKyAxMF0pOworICAgICAgcmVzZHN0W2kgKyAxMV0gPSBf bW1fYWVzZGVjX3NpMTI4IChzcmMxW2kgKyAxMV0sIHNyYzJbaSArIDExXSk7 CisgICAgICByZXNkc3RbaSArIDEyXSA9IF9tbV9hZXNkZWNfc2kxMjggKHNy YzFbaSArIDEyXSwgc3JjMltpICsgMTJdKTsKKyAgICAgIHJlc2RzdFtpICsg MTNdID0gX21tX2Flc2RlY19zaTEyOCAoc3JjMVtpICsgMTNdLCBzcmMyW2kg KyAxM10pOworICAgICAgcmVzZHN0W2kgKyAxNF0gPSBfbW1fYWVzZGVjX3Np MTI4IChzcmMxW2kgKyAxNF0sIHNyYzJbaSArIDE0XSk7CisgICAgICByZXNk c3RbaSArIDE1XSA9IF9tbV9hZXNkZWNfc2kxMjggKHNyYzFbaSArIDE1XSwg c3JjMltpICsgMTVdKTsKKyAgICB9CisKKyAgZm9yIChpID0gMDsgaSA8IE5V TTsgaSsrKQorICAgIGlmIChtZW1jbXAgKGVkc3QgKyBpLCByZXNkc3QgKyBp LCBzaXplb2YgKF9fbTEyOGkpKSkKKyAgICAgIGFib3J0ICgpOworfQotLS0g Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYWVzZGVjbGFzdC5jLmFl cwkyMDA4LTA0LTAzIDEyOjIwOjQ1LjAwMDAwMDAwMCAtMDcwMAorKysgZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYWVzZGVjbGFzdC5jCTIwMDgt MDQtMDMgMTI6MjA6NDUuMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsNjkg QEAKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZl Y3RpdmUtdGFyZ2V0IGFlcyB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAt bWFlcyIgfSAqLworCisjaW5jbHVkZSA8d21taW50cmluLmg+CisjaW5jbHVk ZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJhZXMtY2hlY2suaCIKKworZXh0 ZXJuIHZvaWQgYWJvcnQgKHZvaWQpOworCisjZGVmaW5lIE5VTSAxMDI0CisK K3N0YXRpYyBfX20xMjhpIHNyYzFbTlVNXTsKK3N0YXRpYyBfX20xMjhpIHNy YzJbTlVNXTsKK3N0YXRpYyBfX20xMjhpIGVkc3RbTlVNXTsKKworc3RhdGlj IF9fbTEyOGkgcmVzZHN0W05VTV07CisKKy8qIEluaXRpYWxpemUgaW5wdXQv b3V0cHV0IHZlY3RvcnMuICAoQ3VycmVudGx5LCB0aGVyZSBpcyBvbmx5IG9u ZSBzZXQgb2YKKyAgIGlucHV0L291dHB1dCB2ZWN0b3JzKS4gICovCisKK3N0 YXRpYyB2b2lkCitpbml0X2RhdGEgKF9fbTEyOGkgKnMxLCBfX20xMjhpICpz MiwgX19tMTI4aSAqZCkKK3sKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsg aSA8IE5VTTsgaSsrKQorICAgIHsKKyAgICAgIHMxW2ldID0gX21tX3NldHJf ZXBpMzIgKDB4NWQ1MzQ3NWQsIDB4NjM3NDZmNzIsCisJCQkgICAgICAweDcz NzQ1NjY1LCAweDdiNWI1NDY1KTsKKyAgICAgIHMyW2ldID0gX21tX3NldHJf ZXBpMzIgKDB4NzI2ZjZlNWQsIDB4NWI0Nzc1NjUsCisJCQkgICAgICAweDY4 NjE3OTI5LCAweDQ4NjkyODUzKTsKKyAgICAgIGRbaV0gPSBfbW1fc2V0cl9l cGkzMiAoMHg3MmE1OTNkMCwgMHhkNDEwNjM3YiwKKwkJCSAgICAgMHg2YjMx N2Y5NSwgMHhjNWEzOTFlZik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAor YWVzX3Rlc3QgKHZvaWQpCit7CisgIGludCBpOworCisgIGluaXRfZGF0YSAo c3JjMSwgc3JjMiwgZWRzdCk7CisKKyAgZm9yIChpID0gMDsgaSA8IE5VTTsg aSArPSAxNikKKyAgICB7CisgICAgICByZXNkc3RbaV0gPSBfbW1fYWVzZGVj bGFzdF9zaTEyOCAoc3JjMVtpXSwgc3JjMltpXSk7CisgICAgICByZXNkc3Rb aSArIDFdID0gX21tX2Flc2RlY2xhc3Rfc2kxMjggKHNyYzFbaSArIDFdLCBz cmMyW2kgKyAxXSk7CisgICAgICByZXNkc3RbaSArIDJdID0gX21tX2Flc2Rl Y2xhc3Rfc2kxMjggKHNyYzFbaSArIDJdLCBzcmMyW2kgKyAyXSk7CisgICAg ICByZXNkc3RbaSArIDNdID0gX21tX2Flc2RlY2xhc3Rfc2kxMjggKHNyYzFb aSArIDNdLCBzcmMyW2kgKyAzXSk7CisgICAgICByZXNkc3RbaSArIDRdID0g X21tX2Flc2RlY2xhc3Rfc2kxMjggKHNyYzFbaSArIDRdLCBzcmMyW2kgKyA0 XSk7CisgICAgICByZXNkc3RbaSArIDVdID0gX21tX2Flc2RlY2xhc3Rfc2kx MjggKHNyYzFbaSArIDVdLCBzcmMyW2kgKyA1XSk7CisgICAgICByZXNkc3Rb aSArIDZdID0gX21tX2Flc2RlY2xhc3Rfc2kxMjggKHNyYzFbaSArIDZdLCBz cmMyW2kgKyA2XSk7CisgICAgICByZXNkc3RbaSArIDddID0gX21tX2Flc2Rl Y2xhc3Rfc2kxMjggKHNyYzFbaSArIDddLCBzcmMyW2kgKyA3XSk7CisgICAg ICByZXNkc3RbaSArIDhdID0gX21tX2Flc2RlY2xhc3Rfc2kxMjggKHNyYzFb aSArIDhdLCBzcmMyW2kgKyA4XSk7CisgICAgICByZXNkc3RbaSArIDldID0g X21tX2Flc2RlY2xhc3Rfc2kxMjggKHNyYzFbaSArIDldLCBzcmMyW2kgKyA5 XSk7CisgICAgICByZXNkc3RbaSArIDEwXSA9IF9tbV9hZXNkZWNsYXN0X3Np MTI4IChzcmMxW2kgKyAxMF0sIHNyYzJbaSArIDEwXSk7CisgICAgICByZXNk c3RbaSArIDExXSA9IF9tbV9hZXNkZWNsYXN0X3NpMTI4IChzcmMxW2kgKyAx MV0sIHNyYzJbaSArIDExXSk7CisgICAgICByZXNkc3RbaSArIDEyXSA9IF9t bV9hZXNkZWNsYXN0X3NpMTI4IChzcmMxW2kgKyAxMl0sIHNyYzJbaSArIDEy XSk7CisgICAgICByZXNkc3RbaSArIDEzXSA9IF9tbV9hZXNkZWNsYXN0X3Np MTI4IChzcmMxW2kgKyAxM10sIHNyYzJbaSArIDEzXSk7CisgICAgICByZXNk c3RbaSArIDE0XSA9IF9tbV9hZXNkZWNsYXN0X3NpMTI4IChzcmMxW2kgKyAx NF0sIHNyYzJbaSArIDE0XSk7CisgICAgICByZXNkc3RbaSArIDE1XSA9IF9t bV9hZXNkZWNsYXN0X3NpMTI4IChzcmMxW2kgKyAxNV0sIHNyYzJbaSArIDE1 XSk7CisgICAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBOVU07IGkrKykKKyAg ICBpZiAobWVtY21wIChlZHN0ICsgaSwgcmVzZHN0ICsgaSwgc2l6ZW9mIChf X20xMjhpKSkpCisgICAgICBhYm9ydCAoKTsKK30KLS0tIGdjYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9pMzg2L2Flc2VuYy5jLmFlcwkyMDA4LTA0LTAzIDEy OjIwOjQ1LjAwMDAwMDAwMCAtMDcwMAorKysgZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvYWVzZW5jLmMJMjAwOC0wNC0wMyAxMjoyMDo0NS4wMDAw MDAwMDAgLTA3MDAKQEAgLTAsMCArMSw2OCBAQAorLyogeyBkZy1kbyBydW4g fSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYWVzIH0g Ki8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYWVzIiB9ICovCisKKyNpbmNs dWRlIDx3bW1pbnRyaW4uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lu Y2x1ZGUgImFlcy1jaGVjay5oIgorCitleHRlcm4gdm9pZCBhYm9ydCAodm9p ZCk7CisKKyNkZWZpbmUgTlVNIDEwMjQKKworc3RhdGljIF9fbTEyOGkgc3Jj MVtOVU1dOworc3RhdGljIF9fbTEyOGkgc3JjMltOVU1dOworc3RhdGljIF9f bTEyOGkgZWRzdFtOVU1dOworCitzdGF0aWMgX19tMTI4aSByZXNkc3RbTlVN XTsKKworLyogSW5pdGlhbGl6ZSBpbnB1dC9vdXRwdXQgdmVjdG9ycy4gIChD dXJyZW50bHksIHRoZXJlIGlzIG9ubHkgb25lIHNldAorICAgb2YgaW5wdXQv b3V0cHV0IHZlY3RvcnMpLiAgKi8KKworc3RhdGljIHZvaWQKK2luaXRfZGF0 YSAoX19tMTI4aSAqczEsIF9fbTEyOGkgKnMyLCBfX20xMjhpICpkKQorewor ICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IE5VTTsgaSsrKQorICAgIHsK KyAgICAgIHMxW2ldID0gX21tX3NldHJfZXBpMzIgKDB4NWQ1MzQ3NWQsIDB4 NjM3NDZmNzIsCisJCQkgICAgICAweDczNzQ1NjY1LCAweDdiNWI1NDY1KTsK KyAgICAgIHMyW2ldID0gX21tX3NldHJfZXBpMzIgKDB4NzI2ZjZlNWQsIDB4 NWI0Nzc1NjUsCisJCQkgICAgICAweDY4NjE3OTI5LCAweDQ4NjkyODUzKTsK KyAgICAgIGRbaV0gPSBfbW1fc2V0cl9lcGkzMiAoMHhkZWQ3ZTU5NSwgMHg4 YjEwNGI1OCwKKwkJCSAgICAgMHg5ZmRiYTNjNSwgMHhhODMxMWMyZik7Cisg ICAgfQorfQorCitzdGF0aWMgdm9pZAorYWVzX3Rlc3QgKHZvaWQpCit7Cisg IGludCBpOworCisgIGluaXRfZGF0YSAoc3JjMSwgc3JjMiwgZWRzdCk7CisK KyAgZm9yIChpID0gMDsgaSA8IE5VTTsgaSArPSAxNikKKyAgICB7CisgICAg ICByZXNkc3RbaV0gPSBfbW1fYWVzZW5jX3NpMTI4IChzcmMxW2ldLCBzcmMy W2ldKTsKKyAgICAgIHJlc2RzdFtpICsgMV0gPSBfbW1fYWVzZW5jX3NpMTI4 IChzcmMxW2kgKyAxXSwgc3JjMltpICsgMV0pOworICAgICAgcmVzZHN0W2kg KyAyXSA9IF9tbV9hZXNlbmNfc2kxMjggKHNyYzFbaSArIDJdLCBzcmMyW2kg KyAyXSk7CisgICAgICByZXNkc3RbaSArIDNdID0gX21tX2Flc2VuY19zaTEy OCAoc3JjMVtpICsgM10sIHNyYzJbaSArIDNdKTsKKyAgICAgIHJlc2RzdFtp ICsgNF0gPSBfbW1fYWVzZW5jX3NpMTI4IChzcmMxW2kgKyA0XSwgc3JjMltp ICsgNF0pOworICAgICAgcmVzZHN0W2kgKyA1XSA9IF9tbV9hZXNlbmNfc2kx MjggKHNyYzFbaSArIDVdLCBzcmMyW2kgKyA1XSk7CisgICAgICByZXNkc3Rb aSArIDZdID0gX21tX2Flc2VuY19zaTEyOCAoc3JjMVtpICsgNl0sIHNyYzJb aSArIDZdKTsKKyAgICAgIHJlc2RzdFtpICsgN10gPSBfbW1fYWVzZW5jX3Np MTI4IChzcmMxW2kgKyA3XSwgc3JjMltpICsgN10pOworICAgICAgcmVzZHN0 W2kgKyA4XSA9IF9tbV9hZXNlbmNfc2kxMjggKHNyYzFbaSArIDhdLCBzcmMy W2kgKyA4XSk7CisgICAgICByZXNkc3RbaSArIDldID0gX21tX2Flc2VuY19z aTEyOCAoc3JjMVtpICsgOV0sIHNyYzJbaSArIDldKTsKKyAgICAgIHJlc2Rz dFtpICsgMTBdID0gX21tX2Flc2VuY19zaTEyOCAoc3JjMVtpICsgMTBdLCBz cmMyW2kgKyAxMF0pOworICAgICAgcmVzZHN0W2kgKyAxMV0gPSBfbW1fYWVz ZW5jX3NpMTI4IChzcmMxW2kgKyAxMV0sIHNyYzJbaSArIDExXSk7CisgICAg ICByZXNkc3RbaSArIDEyXSA9IF9tbV9hZXNlbmNfc2kxMjggKHNyYzFbaSAr IDEyXSwgc3JjMltpICsgMTJdKTsKKyAgICAgIHJlc2RzdFtpICsgMTNdID0g X21tX2Flc2VuY19zaTEyOCAoc3JjMVtpICsgMTNdLCBzcmMyW2kgKyAxM10p OworICAgICAgcmVzZHN0W2kgKyAxNF0gPSBfbW1fYWVzZW5jX3NpMTI4IChz cmMxW2kgKyAxNF0sIHNyYzJbaSArIDE0XSk7CisgICAgICByZXNkc3RbaSAr IDE1XSA9IF9tbV9hZXNlbmNfc2kxMjggKHNyYzFbaSArIDE1XSwgc3JjMltp ICsgMTVdKTsKKyAgICB9CisKKyAgZm9yIChpID0gMDsgaSA8IE5VTTsgaSsr KQorICAgIGlmIChtZW1jbXAgKGVkc3QgKyBpLCByZXNkc3QgKyBpLCBzaXpl b2YgKF9fbTEyOGkpKSkKKyAgICAgIGFib3J0ICgpOworfQotLS0gZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYWVzZW5jbGFzdC5jLmFlcwkyMDA4 LTA0LTAzIDEyOjIwOjQ1LjAwMDAwMDAwMCAtMDcwMAorKysgZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2kzODYvYWVzZW5jbGFzdC5jCTIwMDgtMDQtMDMg MTI6MjA6NDUuMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsNjggQEAKKy8q IHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUt dGFyZ2V0IGFlcyB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbWFlcyIg fSAqLworCisjaW5jbHVkZSA8d21taW50cmluLmg+CisjaW5jbHVkZSA8c3Ry aW5nLmg+CisKKyNpbmNsdWRlICJhZXMtY2hlY2suaCIKKworZXh0ZXJuIHZv aWQgYWJvcnQgKHZvaWQpOworCisjZGVmaW5lIE5VTSAxMDI0CisKK3N0YXRp YyBfX20xMjhpIHNyYzFbTlVNXTsKK3N0YXRpYyBfX20xMjhpIHNyYzJbTlVN XTsKK3N0YXRpYyBfX20xMjhpIGVkc3RbTlVNXTsKKworc3RhdGljIF9fbTEy OGkgcmVzZHN0W05VTV07CisKKy8qIEluaXRpYWxpemUgaW5wdXQvb3V0cHV0 IHZlY3RvcnMuICAoQ3VycmVudGx5LCB0aGVyZSBpcyBvbmx5IG9uZQorICAg c2V0IG9mIGlucHV0L291dHB1dCB2ZWN0b3JzKS4gICovCisKK3N0YXRpYyB2 b2lkCitpbml0X2RhdGEgKF9fbTEyOGkgKnMxLCBfX20xMjhpICpzMiwgX19t MTI4aSAqZCkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCBOVU07 IGkrKykKKyAgICB7CisgICAgICBzMVtpXSA9IF9tbV9zZXRyX2VwaTMyICgw eDVkNTM0NzVkLCAweDYzNzQ2ZjcyLAorCQkJICAgICAgMHg3Mzc0NTY2NSwg MHg3YjViNTQ2NSk7CisgICAgICBzMltpXSA9IF9tbV9zZXRyX2VwaTMyICgw eDcyNmY2ZTVkLCAweDViNDc3NTY1LAorCQkJICAgICAgMHg2ODYxNzkyOSwg MHg0ODY5Mjg1Myk7CisgICAgICBkW2ldID0gX21tX3NldHJfZXBpMzIgKDB4 NTNmZGM2MTEsIDB4MTc3ZWM0MjUsCisJCQkgICAgIDB4OTM4YzU5NjQsIDB4 YzdmYjg4MWUpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2Flc190ZXN0 ICh2b2lkKQoreworICBpbnQgaTsKKworICBpbml0X2RhdGEgKHNyYzEsIHNy YzIsIGVkc3QpOworCisgIGZvciAoaSA9IDA7IGkgPCBOVU07IGkgKz0gMTYp CisgICAgeworICAgICAgcmVzZHN0W2ldID0gX21tX2Flc2VuY2xhc3Rfc2kx MjggKHNyYzFbaV0sIHNyYzJbaV0pOworICAgICAgcmVzZHN0W2kgKyAxXSA9 IF9tbV9hZXNlbmNsYXN0X3NpMTI4IChzcmMxW2kgKyAxXSwgc3JjMltpICsg MV0pOworICAgICAgcmVzZHN0W2kgKyAyXSA9IF9tbV9hZXNlbmNsYXN0X3Np MTI4IChzcmMxW2kgKyAyXSwgc3JjMltpICsgMl0pOworICAgICAgcmVzZHN0 W2kgKyAzXSA9IF9tbV9hZXNlbmNsYXN0X3NpMTI4IChzcmMxW2kgKyAzXSwg c3JjMltpICsgM10pOworICAgICAgcmVzZHN0W2kgKyA0XSA9IF9tbV9hZXNl bmNsYXN0X3NpMTI4IChzcmMxW2kgKyA0XSwgc3JjMltpICsgNF0pOworICAg ICAgcmVzZHN0W2kgKyA1XSA9IF9tbV9hZXNlbmNsYXN0X3NpMTI4IChzcmMx W2kgKyA1XSwgc3JjMltpICsgNV0pOworICAgICAgcmVzZHN0W2kgKyA2XSA9 IF9tbV9hZXNlbmNsYXN0X3NpMTI4IChzcmMxW2kgKyA2XSwgc3JjMltpICsg Nl0pOworICAgICAgcmVzZHN0W2kgKyA3XSA9IF9tbV9hZXNlbmNsYXN0X3Np MTI4IChzcmMxW2kgKyA3XSwgc3JjMltpICsgN10pOworICAgICAgcmVzZHN0 W2kgKyA4XSA9IF9tbV9hZXNlbmNsYXN0X3NpMTI4IChzcmMxW2kgKyA4XSwg c3JjMltpICsgOF0pOworICAgICAgcmVzZHN0W2kgKyA5XSA9IF9tbV9hZXNl bmNsYXN0X3NpMTI4IChzcmMxW2kgKyA5XSwgc3JjMltpICsgOV0pOworICAg ICAgcmVzZHN0W2kgKyAxMF0gPSBfbW1fYWVzZW5jbGFzdF9zaTEyOCAoc3Jj MVtpICsgMTBdLCBzcmMyW2kgKyAxMF0pOworICAgICAgcmVzZHN0W2kgKyAx MV0gPSBfbW1fYWVzZW5jbGFzdF9zaTEyOCAoc3JjMVtpICsgMTFdLCBzcmMy W2kgKyAxMV0pOworICAgICAgcmVzZHN0W2kgKyAxMl0gPSBfbW1fYWVzZW5j bGFzdF9zaTEyOCAoc3JjMVtpICsgMTJdLCBzcmMyW2kgKyAxMl0pOworICAg ICAgcmVzZHN0W2kgKyAxM10gPSBfbW1fYWVzZW5jbGFzdF9zaTEyOCAoc3Jj MVtpICsgMTNdLCBzcmMyW2kgKyAxM10pOworICAgICAgcmVzZHN0W2kgKyAx NF0gPSBfbW1fYWVzZW5jbGFzdF9zaTEyOCAoc3JjMVtpICsgMTRdLCBzcmMy W2kgKyAxNF0pOworICAgICAgcmVzZHN0W2kgKyAxNV0gPSBfbW1fYWVzZW5j bGFzdF9zaTEyOCAoc3JjMVtpICsgMTVdLCBzcmMyW2kgKyAxNV0pOworICAg IH0KKworICBmb3IgKGkgPSAwOyBpIDwgTlVNOyBpKyspCisgICAgaWYgKG1l bWNtcChlZHN0ICsgaSwgcmVzZHN0ICsgaSwgc2l6ZW9mIChfX20xMjhpKSkp CisgICAgICBhYm9ydCAoKTsKK30KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L2Flc2ltYy5jLmFlcwkyMDA4LTA0LTAzIDEyOjIwOjQ1LjAw MDAwMDAwMCAtMDcwMAorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvYWVzaW1jLmMJMjAwOC0wNC0wMyAxMjoyMDo0NS4wMDAwMDAwMDAgLTA3 MDAKQEAgLTAsMCArMSw2NiBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyog eyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYWVzIH0gKi8KKy8qIHsg ZGctb3B0aW9ucyAiLU8yIC1tYWVzIiB9ICovCisKKyNpbmNsdWRlIDx3bW1p bnRyaW4uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImFl cy1jaGVjay5oIgorCitleHRlcm4gdm9pZCBhYm9ydCAodm9pZCk7CisKKyNk ZWZpbmUgTlVNIDEwMjQKKworc3RhdGljIF9fbTEyOGkgc3JjMVtOVU1dOwor c3RhdGljIF9fbTEyOGkgZWRzdFtOVU1dOworCitzdGF0aWMgX19tMTI4aSBy ZXNkc3RbTlVNXTsKKworLyogSW5pdGlhbGl6ZSBpbnB1dC9vdXRwdXQgdmVj dG9ycy4gIChDdXJyZW50bHksIHRoZXJlIGlzIG9ubHkgb25lIHNldAorICAg b2YgaW5wdXQvb3V0cHV0IHZlY3RvcnMpLiAgICovCisKK3N0YXRpYyB2b2lk Citpbml0X2RhdGEgKF9fbTEyOGkgKnMxLCBfX20xMjhpICpkKQoreworICBp bnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgTlVNOyBpKyspCisgICAgewor ICAgICAgczFbaV0gPSBfbW1fc2V0cl9lcGkzMiAoMHg1ZDUzNDc1ZCwgMHg2 Mzc0NmY3MiwKKwkJCSAgICAgIDB4NzM3NDU2NjUsIDB4N2I1YjU0NjUpOwor ICAgICAgZFtpXSA9IF9tbV9zZXRyX2VwaTMyICgweDgxYzNiM2U1LCAweDJi MTgzMzBhLAorCQkJICAgICAweDQ0YjEwOWM4LCAweDYyN2E2ZjY2KTsKKyAg ICB9Cit9CisKK3N0YXRpYyB2b2lkCithZXNfdGVzdCAodm9pZCkKK3sKKyAg aW50IGk7CisKKyAgaW5pdF9kYXRhIChzcmMxLCBlZHN0KTsKKworICBmb3Ig KGkgPSAwOyBpIDwgTlVNOyBpICs9IDE2KQorICAgIHsKKyAgICAgIHJlc2Rz dFtpXSA9IF9tbV9hZXNpbWNfc2kxMjggKHNyYzFbaV0pOworICAgICAgcmVz ZHN0W2kgKyAxXSA9IF9tbV9hZXNpbWNfc2kxMjggKHNyYzFbaSArIDFdKTsK KyAgICAgIHJlc2RzdFtpICsgMl0gPSBfbW1fYWVzaW1jX3NpMTI4IChzcmMx W2kgKyAyXSk7CisgICAgICByZXNkc3RbaSArIDNdID0gX21tX2Flc2ltY19z aTEyOCAoc3JjMVtpICsgM10pOworICAgICAgcmVzZHN0W2kgKyA0XSA9IF9t bV9hZXNpbWNfc2kxMjggKHNyYzFbaSArIDRdKTsKKyAgICAgIHJlc2RzdFtp ICsgNV0gPSBfbW1fYWVzaW1jX3NpMTI4IChzcmMxW2kgKyA1XSk7CisgICAg ICByZXNkc3RbaSArIDZdID0gX21tX2Flc2ltY19zaTEyOCAoc3JjMVtpICsg Nl0pOworICAgICAgcmVzZHN0W2kgKyA3XSA9IF9tbV9hZXNpbWNfc2kxMjgg KHNyYzFbaSArIDddKTsKKyAgICAgIHJlc2RzdFtpICsgOF0gPSBfbW1fYWVz aW1jX3NpMTI4IChzcmMxW2kgKyA4XSk7CisgICAgICByZXNkc3RbaSArIDld ID0gX21tX2Flc2ltY19zaTEyOCAoc3JjMVtpICsgOV0pOworICAgICAgcmVz ZHN0W2kgKyAxMF0gPSBfbW1fYWVzaW1jX3NpMTI4IChzcmMxW2kgKyAxMF0p OworICAgICAgcmVzZHN0W2kgKyAxMV0gPSBfbW1fYWVzaW1jX3NpMTI4IChz cmMxW2kgKyAxMV0pOworICAgICAgcmVzZHN0W2kgKyAxMl0gPSBfbW1fYWVz aW1jX3NpMTI4IChzcmMxW2kgKyAxMl0pOworICAgICAgcmVzZHN0W2kgKyAx M10gPSBfbW1fYWVzaW1jX3NpMTI4IChzcmMxW2kgKyAxM10pOworICAgICAg cmVzZHN0W2kgKyAxNF0gPSBfbW1fYWVzaW1jX3NpMTI4IChzcmMxW2kgKyAx NF0pOworICAgICAgcmVzZHN0W2kgKyAxNV0gPSBfbW1fYWVzaW1jX3NpMTI4 IChzcmMxW2kgKyAxNV0pOworICAgIH0KKworICBmb3IgKGkgPSAwOyBpIDwg TlVNOyBpKyspCisgICAgaWYgKG1lbWNtcChlZHN0ICsgaSwgcmVzZHN0ICsg aSwgc2l6ZW9mIChfX20xMjhpKSkpCisgICAgICBhYm9ydCAoKTsKK30KLS0t IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2Flc2tleWdlbmFzc2lz dC5jLmFlcwkyMDA4LTA0LTAzIDEyOjIwOjQ1LjAwMDAwMDAwMCAtMDcwMAor KysgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYWVza2V5Z2VuYXNz aXN0LmMJMjAwOC0wNC0wMyAxMjoyMDo0NS4wMDAwMDAwMDAgLTA3MDAKQEAg LTAsMCArMSw2NiBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1y ZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYWVzIH0gKi8KKy8qIHsgZGctb3B0 aW9ucyAiLU8yIC1tYWVzIiB9ICovCisKKyNpbmNsdWRlIDx3bW1pbnRyaW4u aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImFlcy1jaGVj ay5oIgorCitleHRlcm4gdm9pZCBhYm9ydCAodm9pZCk7CisKKyNkZWZpbmUg TlVNIDEwMjQKKyNkZWZpbmUgSU1NOCAxCisKK3N0YXRpYyBfX20xMjhpIHNy YzFbTlVNXTsKK3N0YXRpYyBfX20xMjhpIGVkc3RbTlVNXTsKKworc3RhdGlj IF9fbTEyOGkgcmVzZHN0W05VTV07CisKKy8qIEluaXRpYWxpemUgaW5wdXQv b3V0cHV0IHZlY3RvcnMuICAoQ3VycmVudGx5LCB0aGVyZSBpcyBvbmx5IG9u ZSBzZXQKKyAgIG9mIGlucHV0L291dHB1dCB2ZWN0b3JzKS4gICovCisKK3N0 YXRpYyB2b2lkCitpbml0X2RhdGEgKF9fbTEyOGkgKnMxLCBfX20xMjhpICpk KQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IE5VTTsgaSsrKQor ICAgIHsKKyAgICAgIHMxW2ldID0gX21tX3NldHJfZXBpMzIgKDB4MTYxNTdl MmIsIDB4YTZkMmFlMjgsCisJCQkgICAgICAweDg4MTVmN2FiLCAweDNjNGZj ZjA5KTsKKyAgICAgIGRbaV0gPSBfbW1fc2V0cl9lcGkzMiAoMHgyNGI1ZTQz NCwgMHgzNDI0YjVlNSwKKwkJCSAgICAgMHhlYjg0OGEwMSwgMHgwMWViODQ4 Yik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorYWVzX3Rlc3QgKHZvaWQp Cit7CisgIGludCBpOworCisgIGluaXRfZGF0YSAoc3JjMSwgZWRzdCk7CisK KyAgZm9yIChpID0gMDsgaSA8IE5VTTsgaSArPSAxNikKKyAgICB7CisgICAg ICByZXNkc3RbaV0gID0gX21tX2Flc2tleWdlbmFzc2lzdF9zaTEyOCAoc3Jj MVtpXSwgSU1NOCk7CisgICAgICByZXNkc3RbaSArIDFdID0gX21tX2Flc2tl eWdlbmFzc2lzdF9zaTEyOCAoc3JjMVtpICsgMV0sIElNTTgpOworICAgICAg cmVzZHN0W2kgKyAyXSA9IF9tbV9hZXNrZXlnZW5hc3Npc3Rfc2kxMjggKHNy YzFbaSArIDJdLCBJTU04KTsKKyAgICAgIHJlc2RzdFtpICsgM10gPSBfbW1f YWVza2V5Z2VuYXNzaXN0X3NpMTI4IChzcmMxW2kgKyAzXSwgSU1NOCk7Cisg ICAgICByZXNkc3RbaSArIDRdID0gX21tX2Flc2tleWdlbmFzc2lzdF9zaTEy OCAoc3JjMVtpICsgNF0sIElNTTgpOworICAgICAgcmVzZHN0W2kgKyA1XSA9 IF9tbV9hZXNrZXlnZW5hc3Npc3Rfc2kxMjggKHNyYzFbaSArIDVdLCBJTU04 KTsKKyAgICAgIHJlc2RzdFtpICsgNl0gPSBfbW1fYWVza2V5Z2VuYXNzaXN0 X3NpMTI4IChzcmMxW2kgKyA2XSwgSU1NOCk7CisgICAgICByZXNkc3RbaSAr IDddID0gX21tX2Flc2tleWdlbmFzc2lzdF9zaTEyOCAoc3JjMVtpICsgN10s IElNTTgpOworICAgICAgcmVzZHN0W2kgKyA4XSA9IF9tbV9hZXNrZXlnZW5h c3Npc3Rfc2kxMjggKHNyYzFbaSArIDhdLCBJTU04KTsKKyAgICAgIHJlc2Rz dFtpICsgOV0gPSBfbW1fYWVza2V5Z2VuYXNzaXN0X3NpMTI4IChzcmMxW2kg KyA5XSwgSU1NOCk7CisgICAgICByZXNkc3RbaSArIDEwXSA9IF9tbV9hZXNr ZXlnZW5hc3Npc3Rfc2kxMjggKHNyYzFbaSArIDEwXSwgSU1NOCk7CisgICAg ICByZXNkc3RbaSArIDExXSA9IF9tbV9hZXNrZXlnZW5hc3Npc3Rfc2kxMjgg KHNyYzFbaSArIDExXSwgSU1NOCk7CisgICAgICByZXNkc3RbaSArIDEyXSA9 IF9tbV9hZXNrZXlnZW5hc3Npc3Rfc2kxMjggKHNyYzFbaSArIDEyXSwgSU1N OCk7CisgICAgICByZXNkc3RbaSArIDEzXSA9IF9tbV9hZXNrZXlnZW5hc3Np c3Rfc2kxMjggKHNyYzFbaSArIDEzXSwgSU1NOCk7CisgICAgICByZXNkc3Rb aSArIDE0XSA9IF9tbV9hZXNrZXlnZW5hc3Npc3Rfc2kxMjggKHNyYzFbaSAr IDE0XSwgSU1NOCk7CisgICAgICByZXNkc3RbaSArIDE1XSA9IF9tbV9hZXNr ZXlnZW5hc3Npc3Rfc2kxMjggKHNyYzFbaSArIDE1XSwgSU1NOCk7CisgICAg fQorCisgIGZvciAoaSA9IDA7IGkgPCBOVU07IGkrKykKKyAgICBpZiAobWVt Y21wKGVkc3QgKyBpLCByZXNkc3QgKyBpLCBzaXplb2YgKF9fbTEyOGkpKSkK KyAgICAgIGFib3J0ICgpOworfQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvY2xtdWwtY2hlY2suaC5hZXMJMjAwOC0wNC0wMyAxMjoyMDo0 NS4wMDAwMDAwMDAgLTA3MDAKKysrIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L2NsbXVsLWNoZWNrLmgJMjAwOC0wNC0wMyAxMjoyMDo0NS4wMDAw MDAwMDAgLTA3MDAKQEAgLTAsMCArMSwzMCBAQAorI2luY2x1ZGUgPHN0ZGlv Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJjcHVpZC5o IgorCitzdGF0aWMgdm9pZCBjbG11bF90ZXN0ICh2b2lkKTsKKworaW50Citt YWluICgpCit7CisgIHVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHg7 CisgCisgIGlmICghX19nZXRfY3B1aWQgKDEsICZlYXgsICZlYngsICZlY3gs ICZlZHgpKQorICAgIHJldHVybiAwOworCisgIC8qIFJ1biBQQ0xNVUxRRFEg dGVzdCBvbmx5IGlmIGhvc3QgaGFzIFBDTE1VTFFEUSBzdXBwb3J0LiAgKi8K KyAgaWYgKGVjeCAmIGJpdF9DTE1VTCkKKyAgICB7CisgICAgICBjbG11bF90 ZXN0ICgpOworI2lmZGVmIERFQlVHCisgICAgICBwcmludGYgKCJQQVNTRURc biIpOworI2VuZGlmCisgICAgfQorI2lmZGVmIERFQlVHCisgIGVsc2UKKyAg ICBwcmludGYgKCJTS0lQUEVEXG4iKTsKKyNlbmRpZgorCisgIHJldHVybiAw OworfQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaTM4Ni5l eHAuYWVzCTIwMDgtMDEtMDcgMTc6MzE6MzIuMDAwMDAwMDAwIC0wODAwCisr KyBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pMzg2LmV4cAkyMDA4 LTA0LTAzIDEyOjIwOjQ1LjAwMDAwMDAwMCAtMDcwMApAQCAtNTEsNiArNTEs MzQgQEAgcHJvYyBjaGVja19lZmZlY3RpdmVfdGFyZ2V0X3NzZTQgeyB9IHsK ICAgICB9ICItTzIgLW1zc2U0LjEiIF0KIH0KIAorIyBSZXR1cm4gMSBpZiBh ZXMgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBjb21waWxlZC4KK3Byb2MgY2hlY2tf ZWZmZWN0aXZlX3RhcmdldF9hZXMgeyB9IHsKKyAgICByZXR1cm4gW2NoZWNr X25vX2NvbXBpbGVyX21lc3NhZ2VzIGFlcyBvYmplY3QgeworCXR5cGVkZWYg bG9uZyBsb25nIF9fbTEyOGkgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3Np emVfXyAoMTYpKSk7CisJdHlwZWRlZiBsb25nIGxvbmcgX192MmRpIF9fYXR0 cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOworCisJX19tMTI4 aSBfbW1fYWVzaW1jX3NpMTI4IChfX20xMjhpIF9fWCkKKwl7CisJICAgIHJl dHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfYWVzaW1jMTI4ICgoX192 MmRpKV9fWCk7CisJfQorICAgIH0gIi1PMiAtbWFlcyIgXQorfQorCisjIFJl dHVybiAxIGlmIGNsbXVsIGluc3RydWN0aW9ucyBjYW4gYmUgY29tcGlsZWQu Citwcm9jIGNoZWNrX2VmZmVjdGl2ZV90YXJnZXRfY2xtdWwgeyB9IHsKKyAg ICByZXR1cm4gW2NoZWNrX25vX2NvbXBpbGVyX21lc3NhZ2VzIGNsbXVsIG9i amVjdCB7CisJdHlwZWRlZiBsb25nIGxvbmcgX19tMTI4aSBfX2F0dHJpYnV0 ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgxNikpKTsKKwl0eXBlZGVmIGxvbmcg bG9uZyBfX3YyZGkgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAo MTYpKSk7CisKKwlfX20xMjhpIHBjbG11bHFkcV90ZXN0IChfX20xMjhpIF9f WCwgX19tMTI4aSBfX1kpCisJeworCSAgICByZXR1cm4gKF9fbTEyOGkpIF9f YnVpbHRpbl9pYTMyX3BjbG11bHFkcTEyOCAoKF9fdjJkaSlfX1gsCisJCQkJ CQkJICAoX192MmRpKV9fWSwKKwkJCQkJCQkgIDEpOworCX0KKyAgICB9ICIt TzIgLW1jbG11bCIgXQorfQorCiAjIFJldHVybiAxIGlmIHNzZTRhIGluc3Ry dWN0aW9ucyBjYW4gYmUgY29tcGlsZWQuCiBwcm9jIGNoZWNrX2VmZmVjdGl2 ZV90YXJnZXRfc3NlNGEgeyB9IHsKICAgICByZXR1cm4gW2NoZWNrX25vX2Nv bXBpbGVyX21lc3NhZ2VzIHNzZTRhIG9iamVjdCB7Ci0tLSBnY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9wY2xtdWxxZHEuYy5hZXMJMjAwOC0wNC0w MyAxMjoyMDo0NS4wMDAwMDAwMDAgLTA3MDAKKysrIGdjYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L3BjbG11bHFkcS5jCTIwMDgtMDQtMDMgMTI6MjA6 NDUuMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsODcgQEAKKy8qIHsgZGct ZG8gcnVuIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0 IGNsbXVsIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tY2xtdWwiIH0g Ki8KKworI2luY2x1ZGUgPHdtbWludHJpbi5oPgorI2luY2x1ZGUgPHN0cmlu Zy5oPgorCisjaW5jbHVkZSAiY2xtdWwtY2hlY2suaCIKKworZXh0ZXJuIHZv aWQgYWJvcnQgKHZvaWQpOworCisjZGVmaW5lIE5VTSAxMDI0CisKK3N0YXRp YyBfX20xMjhpIHMxW05VTV07CitzdGF0aWMgX19tMTI4aSBzMltOVU1dOwor LyogV2UgbmVlZCB0aGlzIGFycmF5IHRvIGdlbmVyYXRlIG1lbSBmb3JtIG9m IGluc3QgKi8KK3N0YXRpYyBfX20xMjhpIHMybVtOVU1dOworCitzdGF0aWMg X19tMTI4aSBlXzAwW05VTV07CitzdGF0aWMgX19tMTI4aSBlXzAxW05VTV07 CitzdGF0aWMgX19tMTI4aSBlXzEwW05VTV07CitzdGF0aWMgX19tMTI4aSBl XzExW05VTV07CisKK3N0YXRpYyBfX20xMjhpIGRfMDBbTlVNXTsKK3N0YXRp YyBfX20xMjhpIGRfMDFbTlVNXTsKK3N0YXRpYyBfX20xMjhpIGRfMTBbTlVN XTsKK3N0YXRpYyBfX20xMjhpIGRfMTFbTlVNXTsKKworLyogSW5pdGlhbGl6 ZSBpbnB1dC9vdXRwdXQgdmVjdG9ycy4gIChDdXJyZW50bHksIHRoZXJlIGlz IG9ubHkgb25lIHNldAorICAgb2YgaW5wdXQvb3V0cHV0IHZlY3RvcnMpLiAg Ki8KK3N0YXRpYyB2b2lkCitpbml0X2RhdGEgKF9fbTEyOGkgKmxzMSwgICBf X20xMjhpICpsczIsIF9fbTEyOGkgKmxlXzAwLCBfX20xMjhpICpsZV8wMSwK KwkgICBfX20xMjhpICpsZV8xMCwgX19tMTI4aSAqbGVfMTEpCit7CisgIGlu dCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBOVU07IGkrKykKKyAgICB7Cisg ICAgICBsczFbaV0gPSBfbW1fc2V0X2VwaTMyICgweDdCNUI1NDY1LCAweDcz NzQ1NjY1LAorCQkJICAgICAgMHg2Mzc0NkY3MiwgMHg1RDUzNDc1RCk7Cisg ICAgICBsczJbaV0gPSBfbW1fc2V0X2VwaTMyICgweDQ4NjkyODUzLCAweDY4 NjE3OTI5LAorCQkJICAgICAgMHg1QjQ3NzU2NSwgMHg3MjZGNkU1RCk7Cisg ICAgICBzMm1baV0gPSBfbW1fc2V0X2VwaTMyICgweDQ4NjkyODUzLCAweDY4 NjE3OTI5LAorCQkJICAgICAgMHg1QjQ3NzU2NSwgMHg3MjZGNkU1RCk7Cisg ICAgICBsZV8wMFtpXSA9IF9tbV9zZXRfZXBpMzIgKDB4MUQ0RDg0QzgsIDB4 NUMzNDQwQzAsCisJCQkJMHg5Mjk2MzNENSwgMHhEMzZGMDQ1MSk7CisgICAg ICBsZV8wMVtpXSA9IF9tbV9zZXRfZXBpMzIgKDB4MUEyQkY2REIsIDB4M0Ez MDg2MkYsCisJCQkJMHhCQUJGMjYyRCwgMHhGNEI3RDVDOSk7CisgICAgICBs ZV8xMFtpXSA9IF9tbV9zZXRfZXBpMzIgKDB4MUJEMTdDOEQsIDB4NTU2QUI1 QTEsCisJCQkJMHg3RkE1NDBBQywgMHgyQTI4MTMxNSk7CisgICAgICBsZV8x MVtpXSA9IF9tbV9zZXRfZXBpMzIgKDB4MUQxRTFGMkMsIDB4NTkyRTdDNDUs CisJCQkJMHhENjZFRTAzRSwgMHg0MTBGRDRFRCk7CisgICAgfQorfQorCitz dGF0aWMgdm9pZAorY2xtdWxfdGVzdCAodm9pZCkKK3sKKyAgaW50IGk7CisK KyAgaW5pdF9kYXRhIChzMSwgczIsIGVfMDAsIGVfMDEsIGVfMTAsIGVfMTEp OworCisgIGZvciAoaSA9IDA7IGkgPCBOVU07IGkgKz0gMikKKyAgICB7Cisg ICAgICBkXzAwW2ldID0gX21tX2NsbXVsZXBpNjRfc2kxMjggKHMxW2ldLCBz Mm1baV0sIDB4MDApOworICAgICAgZF8wMVtpXSA9IF9tbV9jbG11bGVwaTY0 X3NpMTI4IChzMVtpXSwgczJbaV0sIDB4MDEpOworICAgICAgZF8xMFtpXSA9 IF9tbV9jbG11bGVwaTY0X3NpMTI4IChzMVtpXSwgczJbaV0sIDB4MTApOwor ICAgICAgZF8xMVtpXSA9IF9tbV9jbG11bGVwaTY0X3NpMTI4IChzMVtpXSwg czJbaV0sIDB4MTEpOworCisgICAgICBkXzExW2kgKyAxXSA9IF9tbV9jbG11 bGVwaTY0X3NpMTI4IChzMVtpICsgMV0sIHMyW2kgKyAxXSwgMHgxMSk7Cisg ICAgICBkXzAwW2kgKyAxXSA9IF9tbV9jbG11bGVwaTY0X3NpMTI4IChzMVtp ICsgMV0sIHMyW2kgKyAxXSwgMHgwMCk7CisgICAgICBkXzEwW2kgKyAxXSA9 IF9tbV9jbG11bGVwaTY0X3NpMTI4IChzMVtpICsgMV0sIHMybVtpICsgMV0s IDB4MTApOworICAgICAgZF8wMVtpICsgMV0gPSBfbW1fY2xtdWxlcGk2NF9z aTEyOCAoczFbaSArIDFdLCBzMltpICsgMV0sIDB4MDEpOworICAgIH0KKwor ICBmb3IgKGkgPSAwOyBpIDwgTlVNOyBpKyspCisgICAgeworICAgICAgaWYg KG1lbWNtcCAoZF8wMCArIGksIGVfMDAgKyBpLCBzaXplb2YgKF9fbTEyOGkp KSkKKwlhYm9ydCAoKTsKKyAgICAgIGlmIChtZW1jbXAgKGRfMDEgKyBpLCBl XzAxICsgaSwgc2l6ZW9mIChfX20xMjhpKSkpCisJYWJvcnQgKCk7CisgICAg ICBpZiAobWVtY21wIChkXzEwICsgaSwgZV8xMCArIGksIHNpemVvZiAoX19t MTI4aSkpKQorCWFib3J0ICgpOworICAgICAgaWYgKG1lbWNtcChkXzExICsg aSwgZV8xMSArIGksIHNpemVvZiAoX19tMTI4aSkpKQorCWFib3J0ICgpOwor ICAgIH0KK30KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3Nz ZS0xMy5jLmFlcwkyMDA4LTAzLTI4IDEzOjAzOjE4LjAwMDAwMDAwMCAtMDcw MAorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvc3NlLTEzLmMJ MjAwOC0wNC0wMyAxNDoyMTo0Mi4wMDAwMDAwMDAgLTA3MDAKQEAgLTEsMTAg KzEsMTAgQEAKIC8qIHsgZGctZG8gY29tcGlsZSB9ICovCi0vKiB7IGRnLW9w dGlvbnMgIi1PMiAtV2Vycm9yLWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0 aW9uIC1tYXJjaD1rOCAtbTNkbm93IC1tc3NlNCAtbXNzZTUiIH0gKi8KKy8q IHsgZGctb3B0aW9ucyAiLU8yIC1XZXJyb3ItaW1wbGljaXQtZnVuY3Rpb24t ZGVjbGFyYXRpb24gLW1hcmNoPWs4IC1tM2Rub3cgLW1zc2U1IC1tYWVzIC1t Y2xtdWwiIH0gKi8KIAogI2luY2x1ZGUgPG1tX21hbGxvYy5oPgogCiAvKiBU ZXN0IHRoYXQgdGhlIGludHJpbnNpY3MgY29tcGlsZSB3aXRoIG9wdGltaXph dGlvbi4gIEFsbCBvZiB0aGVtIGFyZQotICAgZGVmaW5lZCBhcyBpbmxpbmUg ZnVuY3Rpb25zIGluIHsseCxlLHAsdCxzLGEsYn1tbWludHJpbi5oIGFuZCBt bTNkbm93LmgKKyAgIGRlZmluZWQgYXMgaW5saW5lIGZ1bmN0aW9ucyBpbiB7 LHgsZSxwLHQscyx3LGEsYn1tbWludHJpbi5oIGFuZCBtbTNkbm93LmgKICAg IHRoYXQgcmVmZXJlbmNlIHRoZSBwcm9wZXIgYnVpbHRpbiBmdW5jdGlvbnMu ICBEZWZpbmluZyBhd2F5ICJleHRlcm4iIGFuZAogICAgIl9faW5saW5lIiBy ZXN1bHRzIGluIGFsbCBvZiB0aGVtIGJlaW5nIGNvbXBpbGVkIGFzIHByb3Bl ciBmdW5jdGlvbnMuICAqLwogCkBAIC0xNyw2ICsxNywxMCBAQAogI2RlZmlu ZSBfX2J1aWx0aW5faWEzMl9leHRycWkoWCwgSSwgTCkgIF9fYnVpbHRpbl9p YTMyX2V4dHJxaShYLCAxLCAxKQogI2RlZmluZSBfX2J1aWx0aW5faWEzMl9p bnNlcnRxaShYLCBZLCBJLCBMKSBfX2J1aWx0aW5faWEzMl9pbnNlcnRxaShY LCBZLCAxLCAxKQogCisvKiB3bW1pbnRyaW4uaCAqLworI2RlZmluZSBfX2J1 aWx0aW5faWEzMl9hZXNrZXlnZW5hc3Npc3QxMjgoWCwgQykgX19idWlsdGlu X2lhMzJfYWVza2V5Z2VuYXNzaXN0MTI4KFgsIDEpCisjZGVmaW5lIF9fYnVp bHRpbl9pYTMyX3BjbG11bHFkcTEyOChYLCBZLCBJKSBfX2J1aWx0aW5faWEz Ml9wY2xtdWxxZHExMjgoWCwgWSwgMSkKKwogLyogc21taW50cmluLmggKi8K ICNkZWZpbmUgX19idWlsdGluX2lhMzJfcGJsZW5kdzEyOChYLCBZLCBNKSBf X2J1aWx0aW5faWEzMl9wYmxlbmR3MTI4IChYLCBZLCAxKQogI2RlZmluZSBf X2J1aWx0aW5faWEzMl9ibGVuZHBzKFgsIFksIE0pIF9fYnVpbHRpbl9pYTMy X2JsZW5kcHMoWCwgWSwgMSkKQEAgLTk1LDUgKzk5LDUgQEAKICNkZWZpbmUg X19idWlsdGluX2lhMzJfcHJvdHFpKEEsIEIpIF9fYnVpbHRpbl9pYTMyX3By b3RxaShBLDEpCiAKICNpbmNsdWRlIDxibW1pbnRyaW4uaD4KLSNpbmNsdWRl IDxzbW1pbnRyaW4uaD4KKyNpbmNsdWRlIDx3bW1pbnRyaW4uaD4KICNpbmNs dWRlIDxtbTNkbm93Lmg+Ci0tLSBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9zc2UtMTQuYy5hZXMJMjAwOC0wMy0yOCAxMzowMzoxOC4wMDAwMDAw MDAgLTA3MDAKKysrIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3Nz ZS0xNC5jCTIwMDgtMDQtMDMgMTQ6MjE6NTMuMDAwMDAwMDAwIC0wNzAwCkBA IC0xLDEwICsxLDEwIEBACiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwotLyog eyBkZy1vcHRpb25zICItTzAgLVdlcnJvci1pbXBsaWNpdC1mdW5jdGlvbi1k ZWNsYXJhdGlvbiAtbWFyY2g9azggLW0zZG5vdyAtbXNzZTQgLW1zc2U1IiB9 ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMCAtV2Vycm9yLWltcGxpY2l0LWZ1 bmN0aW9uLWRlY2xhcmF0aW9uIC1tYXJjaD1rOCAtbTNkbm93IC1tc3NlNSAt bWFlcyAtbWNsbXVsIiB9ICovCiAKICNpbmNsdWRlIDxtbV9tYWxsb2MuaD4K IAogLyogVGVzdCB0aGF0IHRoZSBpbnRyaW5zaWNzIGNvbXBpbGUgd2l0aG91 dCBvcHRpbWl6YXRpb24uICBBbGwgb2YgdGhlbSBhcmUKLSAgIGRlZmluZWQg YXMgaW5saW5lIGZ1bmN0aW9ucyBpbiB7LHgsZSxwLHQscyxhLGJ9bW1pbnRy aW4uaCAgYW5kIG1tM2Rub3cuaAorICAgZGVmaW5lZCBhcyBpbmxpbmUgZnVu Y3Rpb25zIGluIHsseCxlLHAsdCxzLHcsYSxifW1taW50cmluLmggIGFuZCBt bTNkbm93LmgKICAgIHRoYXQgcmVmZXJlbmNlIHRoZSBwcm9wZXIgYnVpbHRp biBmdW5jdGlvbnMuICBEZWZpbmluZyBhd2F5ICJleHRlcm4iIGFuZAogICAg Il9faW5saW5lIiByZXN1bHRzIGluIGFsbCBvZiB0aGVtIGJlaW5nIGNvbXBp bGVkIGFzIHByb3BlciBmdW5jdGlvbnMuICAqLwogCkBAIC0xMiw3ICsxMiw3 IEBACiAjZGVmaW5lIF9faW5saW5lCiAKICNpbmNsdWRlIDxibW1pbnRyaW4u aD4KLSNpbmNsdWRlIDxzbW1pbnRyaW4uaD4KKyNpbmNsdWRlIDx3bW1pbnRy aW4uaD4KICNpbmNsdWRlIDxtbTNkbm93Lmg+CiAKICNkZWZpbmUgX0NPTkNB VCh4LHkpIHggIyMgeQpAQCAtNDYsNiArNDYsMTAgQEAKIHRlc3RfMXggKF9t bV9leHRyYWN0aV9zaTY0LCBfX20xMjhpLCBfX20xMjhpLCAxLCAxKQogdGVz dF8yeCAoX21tX2luc2VydGlfc2k2NCwgX19tMTI4aSwgX19tMTI4aSwgX19t MTI4aSwgMSwgMSkKIAorLyogd21taW50cmluLmggKi8KK3Rlc3RfMSAoX21t X2Flc2tleWdlbmFzc2lzdF9zaTEyOCwgX19tMTI4aSwgX19tMTI4aSwgMSkK K3Rlc3RfMiAoX21tX2NsbXVsZXBpNjRfc2kxMjgsIF9fbTEyOGksIF9fbTEy OGksIF9fbTEyOGksIDEpCisKIC8qIHNtbWludHJpbi5oICovCiB0ZXN0XzIg KF9tbV9ibGVuZF9lcGkxNiwgX19tMTI4aSwgX19tMTI4aSwgX19tMTI4aSwg MSkKIHRlc3RfMiAoX21tX2JsZW5kX3BzLCBfX20xMjgsIF9fbTEyOCwgX19t MTI4LCAxKQo= ------=_Part_3214_23656278.1207264236734--