From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26891 invoked by alias); 9 Apr 2011 12:56:11 -0000 Received: (qmail 26875 invoked by uid 22791); 9 Apr 2011 12:56:08 -0000 X-SWARE-Spam-Status: No, hits=-1.0 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,RFC_ABUSE_POST,TW_FN X-Spam-Check-By: sourceware.org Received: from mail-qy0-f175.google.com (HELO mail-qy0-f175.google.com) (209.85.216.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 09 Apr 2011 12:55:59 +0000 Received: by qyk35 with SMTP id 35so410985qyk.20 for ; Sat, 09 Apr 2011 05:55:58 -0700 (PDT) MIME-Version: 1.0 Received: by 10.229.114.80 with SMTP id d16mr2769491qcq.18.1302353758747; Sat, 09 Apr 2011 05:55:58 -0700 (PDT) Received: by 10.229.97.206 with HTTP; Sat, 9 Apr 2011 05:55:58 -0700 (PDT) In-Reply-To: <4D9F79B0.5010900@redhat.com> References: <4D9F79B0.5010900@redhat.com> Date: Sat, 09 Apr 2011 12:56:00 -0000 Message-ID: Subject: Re: [patch i386]: Cleanup calling convention handling in i386.c and fix PR target/9601 and PR target/11772 From: Kai Tietz To: Richard Henderson Cc: GCC Patches Content-Type: multipart/mixed; boundary=000e0cd6b216297cea04a07bddbf 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: 2011-04/txt/msg00685.txt.bz2 --000e0cd6b216297cea04a07bddbf Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 3575 2011/4/8 Richard Henderson : >> + =A0/* Special case regparm/sseregparm, which are either cdecl or stdca= ll. =A0*/ >> + =A0if ((ret & (IX86_CALLCVT_REGPARM | IX86_CALLCVT_SSEREGPARM)) !=3D 0) >> + =A0 =A0return (ret | ((TARGET_RTD && !stdarg_p (type)) ? IX86_CALLCVT_= STDCALL >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : IX86_CALLCVT_CDECL)); >> + >> + =A0/* We don't have found a default call-convention specifier, >> + =A0 =A0 so apply default. =A0*/ >> + =A0if (TARGET_RTD && !stdarg_p (type)) >> + =A0 =A0return IX86_CALLCVT_STDCALL; >> + =A0else if (TREE_CODE (type) !=3D METHOD_TYPE || stdarg_p (type) >> + =A0 =A0 =A0 =A0 =A0|| ix86_function_type_abi (type) !=3D MS_ABI) >> + =A0 =A0return IX86_CALLCVT_CDECL; >> + =A0return IX86_CALLCVT_THISCALL; > > Perhaps clearer as > > =A0bool stdarg =3D stdarg_p (type); > > =A0if (TARGET_RTD && !stdarg) > =A0 =A0return IX86_CALLCVT_STDCALL | ret; > > =A0if (ret !=3D 0 > =A0 =A0 =A0|| stdarg > =A0 =A0 =A0|| TREE_CODE (type) !=3D METHOD_TYPE > =A0 =A0 =A0|| ix86_function_type_abi (type) !=3D MS_ABI) > =A0 =A0return IX86_CALLCVT_CDECL | ret; > > =A0return IX86_CALLCVT_THISCALL; Yes, patch adjusted for this. >> + =A0 =A0case IX86_CALLCVT_STDCALL: >> + =A0 =A0case IX86_CALLCVT_FASTCALL: >> + =A0 =A0case IX86_CALLCVT_THISCALL: >> + =A0 =A0 =A0rtd =3D 1; >> + =A0 =A0 =A0break; >> =A0 =A0 =A0} >> >> + =A0if (rtd && ! stdarg_p (funtype)) >> + =A0 =A0return size; > > You can move the stdarg_p test into the switch and drop the rtd variable. Rewrote switch so that just an if is used and the rtd variable isn't necessary anymore. >> + =A0if ((ccvt & IX86_CALLCVT_STDCALL) !=3D 0) >> =A0 =A0 =A0new_id =3D gen_stdcall_or_fastcall_decoration (decl, id, '_'); >> + =A0else if (ccvt =3D=3D IX86_CALLCVT_FASTCALL) >> =A0 =A0 =A0new_id =3D gen_stdcall_or_fastcall_decoration (decl, id, FAST= CALL_PREFIX); > > I think perhaps it would be cleaner to consistently test bits, > rather than sometimes test bits and sometimes test equality. > I know that FASTCALL isn't supposed to have any other bits set, > but we shouldn't have to constantly think about which is which. > > Not just here in netware.c, where I noticed, but elsewhere as well. Ok, changed comparison by bit-tests. 2011-04-09 Kai Tietz PR target/9601 PR target/11772 * config/i386/i386-protos.h (ix86_get_callcvt): New prototype. * config/i386/i386.c (ix86_handle_cconv_attribute): Adjust comment. (ix86_is_msabi_thiscall): Removed. (ix86_is_type_thiscall): Likewise. (ix86_get_callcvt): New function. (ix86_comp_type_attributes): Simplify check. (ix86_function_regparm): Use ix86_get_callcvt for calling convention attribute checks. (ix86_return_pops_args): Likewise. (ix86_static_chain): Likewise. (x86_this_parameter): Likewise. (x86_output_mi_thunk): Likewise. (ix86_function_type_abi): Optimize check for types without attributes. * config/i386/i386.h (IX86_CALLCVT_CDECL, IX86_CALLCVT_STDCALL, IX86_CALLCVT_FASTCALL, IX86_CALLCVT_THISCALL, IX86_CALLCVT_REGPARM, IX86_CALLCVT_SSEREGPARM): New macros to represent calling convention by flag-values. (IX86_BASE_CALLCVT): Helper macro. * config/i386/netware.c (i386_nlm_maybe_mangle_decl_assembler_name): Use ix86_get_callcvt for calling convention attribute checks and avoid symbol-decoration for stdcall in TARGET_RTD case. * config/i386/winnt.c (i386_pe_maybe_mangle_decl_assembler_name): Likewise. (gen_stdcall_or_fastcall_suffix): Adjust ident and use DECL_ORIGIN for declaration. Regards, Kai --000e0cd6b216297cea04a07bddbf Content-Type: text/plain; charset=US-ASCII; name="cleanup_i386_cvt.txt" Content-Disposition: attachment; filename="cleanup_i386_cvt.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gmajsm4b0 Content-length: 20545 SW5kZXg6IGdjYy9nY2MvY29uZmlnL2kzODYvaTM4Ni1wcm90b3MuaAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBnY2Mub3JpZy9nY2MvY29uZmlnL2kz ODYvaTM4Ni1wcm90b3MuaAkyMDExLTA0LTA4IDE2OjAwOjE2LjI2NDQxMTUw MCArMDIwMAorKysgZ2NjL2djYy9jb25maWcvaTM4Ni9pMzg2LXByb3Rvcy5o CTIwMTEtMDQtMDkgMTI6Mzg6MTUuMzYwODA1MzAwICswMjAwCkBAIC0xOTEs NiArMTkxLDggQEAgZXh0ZXJuIHRyZWUgaXg4Nl9oYW5kbGVfc2hhcmVkX2F0 dHJpYnV0ZQogZXh0ZXJuIHRyZWUgaXg4Nl9oYW5kbGVfc2VsZWN0YW55X2F0 dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CiBl eHRlcm4gaW50IHg4Nl9maWVsZF9hbGlnbm1lbnQgKHRyZWUsIGludCk7CiBl eHRlcm4gdHJlZSBpeDg2X3ZhbGlkX3RhcmdldF9hdHRyaWJ1dGVfdHJlZSAo dHJlZSk7CitleHRlcm4gdW5zaWduZWQgaW50IGl4ODZfZ2V0X2NhbGxjdnQg KGNvbnN0X3RyZWUpOworCiAjZW5kaWYKIAogZXh0ZXJuIHJ0eCBpeDg2X3Rs c19nZXRfYWRkciAodm9pZCk7CkluZGV4OiBnY2MvZ2NjL2NvbmZpZy9pMzg2 L2kzODYuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2Mub3JpZy9n Y2MvY29uZmlnL2kzODYvaTM4Ni5jCTIwMTEtMDQtMDggMTY6MDA6MTYuMjcy NDExNTAwICswMjAwCisrKyBnY2MvZ2NjL2NvbmZpZy9pMzg2L2kzODYuYwky MDExLTA0LTA5IDE0OjAxOjMyLjIzOTYxMDQwMCArMDIwMApAQCAtNTMxMiw3 ICs1MzEyLDcgQEAgaXg4Nl9oYW5kbGVfY2NvbnZfYXR0cmlidXRlICh0cmVl ICpub2RlLAogICAgICAgcmV0dXJuIE5VTExfVFJFRTsKICAgICB9CiAKLSAg LyogQ2FuIGNvbWJpbmUgcmVncGFybSB3aXRoIGFsbCBhdHRyaWJ1dGVzIGJ1 dCBmYXN0Y2FsbC4gICovCisgIC8qIENhbiBjb21iaW5lIHJlZ3Bhcm0gd2l0 aCBhbGwgYXR0cmlidXRlcyBidXQgZmFzdGNhbGwsIGFuZCB0aGlzY2FsbC4g ICovCiAgIGlmIChpc19hdHRyaWJ1dGVfcCAoInJlZ3Bhcm0iLCBuYW1lKSkK ICAgICB7CiAgICAgICB0cmVlIGNzdDsKQEAgLTU0MzYsMzggKzU0MzYsNTQg QEAgaXg4Nl9oYW5kbGVfY2NvbnZfYXR0cmlidXRlICh0cmVlICpub2RlLAog ICByZXR1cm4gTlVMTF9UUkVFOwogfQogCi0vKiBUaGlzIGZ1bmN0aW9uIGNo ZWNrcyBpZiB0aGUgbWV0aG9kLWZ1bmN0aW9uIGhhcyBkZWZhdWx0IF9fdGhp c2NhbGwKLSAgIGNhbGxpbmctY29udmVudGlvbiBmb3IgMzItYml0IG1zYWJp LgotICAgSXQgcmV0dXJucyB0cnVlIGlmIFRZUEUgaXMgb2Yga2luZCBNRVRI T0RfVFlQRSwgbm8gc3RkYXJnIGZ1bmN0aW9uLAotICAgYW5kIHRoZSBNU19B QkkgMzItYml0IGlzIHVzZWQuICBPdGhlcndpc2UgaXQgcmV0dXJucyBmYWxz ZS4gICovCisvKiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgZnJvbSBUWVBF IHRoZSBjYWxsaW5nLWNvbnZlbnRpb24uICAqLwogCi1zdGF0aWMgYm9vbAot aXg4Nl9pc19tc2FiaV90aGlzY2FsbCAoY29uc3RfdHJlZSB0eXBlKQordW5z aWduZWQgaW50CitpeDg2X2dldF9jYWxsY3Z0IChjb25zdF90cmVlIHR5cGUp CiB7Ci0gIGlmIChUQVJHRVRfNjRCSVQgfHwgaXg4Nl9mdW5jdGlvbl90eXBl X2FiaSAodHlwZSkgIT0gTVNfQUJJCi0gICAgICB8fCBUUkVFX0NPREUgKHR5 cGUpICE9IE1FVEhPRF9UWVBFIHx8IHN0ZGFyZ19wICh0eXBlKSkKLSAgICBy ZXR1cm4gZmFsc2U7Ci0gIC8qIENoZWNrIGZvciBkaWZmZXJlbnQgY2FsbGlu Zy1jb252ZW50aW9ucy4gICovCi0gIGlmIChsb29rdXBfYXR0cmlidXRlICgi Y2RlY2wiLCBUWVBFX0FUVFJJQlVURVMgKHR5cGUpKQotICAgICAgfHwgbG9v a3VwX2F0dHJpYnV0ZSAoInN0ZGNhbGwiLCBUWVBFX0FUVFJJQlVURVMgKHR5 cGUpKQotICAgICAgfHwgbG9va3VwX2F0dHJpYnV0ZSAoImZhc3RjYWxsIiwg VFlQRV9BVFRSSUJVVEVTICh0eXBlKSkKLSAgICAgIHx8IGxvb2t1cF9hdHRy aWJ1dGUgKCJyZWdwYXJtIiwgVFlQRV9BVFRSSUJVVEVTICh0eXBlKSkKLSAg ICAgIHx8IGxvb2t1cF9hdHRyaWJ1dGUgKCJzc2VyZWdwYXJtIiwgVFlQRV9B VFRSSUJVVEVTICh0eXBlKSkpCi0gICAgcmV0dXJuIGZhbHNlOwotICByZXR1 cm4gdHJ1ZTsKLX0KKyAgdW5zaWduZWQgaW50IHJldCA9IDA7CisgIGJvb2wg aXNfc3RkYXJnOworICBjb25zdF90cmVlIGF0dHJzOwogCi0vKiBUaGlzIGZ1 bmN0aW9uIGNoZWNrcyBpZiB0aGUgdGhpc2NhbGwgYXR0cmlidXRlIGlzIHNl dCBmb3IgdGhlIFRZUEUsCi0gICBvciBpZiBpdCBpcyBhbiBtZXRob2QtdHlw ZSB3aXRoIGRlZmF1bHQgdGhpc2NhbGwgY29udmVudGlvbi4KLSAgIEl0IHJl dHVybnMgdHJ1ZSBpZiBmdW5jdGlvbiBtYXRjaCwgb3RoZXJ3aXNlIGZhbHNl IGlzIHJldHVybmVkLiAgKi8KKyAgaWYgKFRBUkdFVF82NEJJVCkKKyAgICBy ZXR1cm4gSVg4Nl9DQUxMQ1ZUX0NERUNMOwogCi1zdGF0aWMgYm9vbAotaXg4 Nl9pc190eXBlX3RoaXNjYWxsIChjb25zdF90cmVlIHR5cGUpCi17Ci0gIGlm IChsb29rdXBfYXR0cmlidXRlICgidGhpc2NhbGwiLCBUWVBFX0FUVFJJQlVU RVMgKHR5cGUpKQotICAgICAgfHwgaXg4Nl9pc19tc2FiaV90aGlzY2FsbCAo dHlwZSkpCi0gICAgcmV0dXJuIHRydWU7Ci0gIHJldHVybiBmYWxzZTsKKyAg YXR0cnMgPSBUWVBFX0FUVFJJQlVURVMgKHR5cGUpOworICBpZiAoYXR0cnMg IT0gTlVMTF9UUkVFKQorICAgIHsKKyAgICAgIGlmIChsb29rdXBfYXR0cmli dXRlICgiY2RlY2wiLCBhdHRycykpCisJcmV0IHw9IElYODZfQ0FMTENWVF9D REVDTDsKKyAgICAgIGVsc2UgaWYgKGxvb2t1cF9hdHRyaWJ1dGUgKCJzdGRj YWxsIiwgYXR0cnMpKQorCXJldCB8PSBJWDg2X0NBTExDVlRfU1REQ0FMTDsK KyAgICAgIGVsc2UgaWYgKGxvb2t1cF9hdHRyaWJ1dGUgKCJmYXN0Y2FsbCIs IGF0dHJzKSkKKwlyZXQgfD0gSVg4Nl9DQUxMQ1ZUX0ZBU1RDQUxMOworICAg ICAgZWxzZSBpZiAobG9va3VwX2F0dHJpYnV0ZSAoInRoaXNjYWxsIiwgYXR0 cnMpKQorCXJldCB8PSBJWDg2X0NBTExDVlRfVEhJU0NBTEw7CisKKyAgICAg IC8qIFJlZ3BhcmFtIGlzbid0IGFsbG93ZWQgZm9yIHRoaXNjYWxsIGFuZCBm YXN0Y2FsbC4gICovCisgICAgICBpZiAoKHJldCAmIChJWDg2X0NBTExDVlRf VEhJU0NBTEwgfCBJWDg2X0NBTExDVlRfRkFTVENBTEwpKSA9PSAwKQorCXsK KwkgIGlmIChsb29rdXBfYXR0cmlidXRlICgicmVncGFybSIsIGF0dHJzKSkK KwkgICAgcmV0IHw9IElYODZfQ0FMTENWVF9SRUdQQVJNOworCSAgaWYgKGxv b2t1cF9hdHRyaWJ1dGUgKCJzc2VyZWdwYXJtIiwgYXR0cnMpKQorCSAgICBy ZXQgfD0gSVg4Nl9DQUxMQ1ZUX1NTRVJFR1BBUk07CisJfQorCisgICAgICBp ZiAoSVg4Nl9CQVNFX0NBTExDVlQocmV0KSAhPSAwKQorCXJldHVybiByZXQ7 CisgICAgfQorCisgIGlzX3N0ZGFyZyA9IHN0ZGFyZ19wICh0eXBlKTsKKyAg aWYgKFRBUkdFVF9SVEQgJiYgIWlzX3N0ZGFyZykKKyAgICByZXR1cm4gSVg4 Nl9DQUxMQ1ZUX1NURENBTEwgfCByZXQ7CisKKyAgaWYgKHJldCAhPSAwCisg ICAgICB8fCBpc19zdGRhcmcKKyAgICAgIHx8IFRSRUVfQ09ERSAodHlwZSkg IT0gTUVUSE9EX1RZUEUKKyAgICAgIHx8IGl4ODZfZnVuY3Rpb25fdHlwZV9h YmkgKHR5cGUpICE9IE1TX0FCSSkKKyAgICByZXR1cm4gSVg4Nl9DQUxMQ1ZU X0NERUNMIHwgcmV0OworCisgIHJldHVybiBJWDg2X0NBTExDVlRfVEhJU0NB TEw7CiB9CiAKIC8qIFJldHVybiAwIGlmIHRoZSBhdHRyaWJ1dGVzIGZvciB0 d28gdHlwZXMgYXJlIGluY29tcGF0aWJsZSwgMSBpZiB0aGV5CkBAIC01NDc3 LDQzICs1NDkzLDE4IEBAIGl4ODZfaXNfdHlwZV90aGlzY2FsbCAoY29uc3Rf dHJlZSB0eXBlKQogc3RhdGljIGludAogaXg4Nl9jb21wX3R5cGVfYXR0cmli dXRlcyAoY29uc3RfdHJlZSB0eXBlMSwgY29uc3RfdHJlZSB0eXBlMikKIHsK LSAgLyogQ2hlY2sgZm9yIG1pc21hdGNoIG9mIG5vbi1kZWZhdWx0IGNhbGxp bmcgY29udmVudGlvbi4gICovCi0gIGJvb2wgaXNfdGhpc2NhbGwgPSBpeDg2 X2lzX21zYWJpX3RoaXNjYWxsICh0eXBlMSk7Ci0gIGNvbnN0IGNoYXIgKmNv bnN0IHJ0ZHN0ciA9IFRBUkdFVF9SVEQgPyAoaXNfdGhpc2NhbGwgPyAidGhp c2NhbGwiIDogImNkZWNsIikgOiAic3RkY2FsbCI7CisgIHVuc2lnbmVkIGlu dCBjY3Z0MSwgY2N2dDI7CiAKICAgaWYgKFRSRUVfQ09ERSAodHlwZTEpICE9 IEZVTkNUSU9OX1RZUEUKICAgICAgICYmIFRSRUVfQ09ERSAodHlwZTEpICE9 IE1FVEhPRF9UWVBFKQogICAgIHJldHVybiAxOwogCi0gIC8qIENoZWNrIGZv ciBtaXNtYXRjaGVkIGZhc3RjYWxsL3JlZ3Bhcm0gdHlwZXMuICAqLwotICBp ZiAoKCFsb29rdXBfYXR0cmlidXRlICgiZmFzdGNhbGwiLCBUWVBFX0FUVFJJ QlVURVMgKHR5cGUxKSkKLSAgICAgICAhPSAhbG9va3VwX2F0dHJpYnV0ZSAo ImZhc3RjYWxsIiwgVFlQRV9BVFRSSUJVVEVTICh0eXBlMikpKQotICAgICAg fHwgKGl4ODZfZnVuY3Rpb25fcmVncGFybSAodHlwZTEsIE5VTEwpCi0JICAh PSBpeDg2X2Z1bmN0aW9uX3JlZ3Bhcm0gKHR5cGUyLCBOVUxMKSkpCi0gICAg cmV0dXJuIDA7Ci0KLSAgLyogQ2hlY2sgZm9yIG1pc21hdGNoZWQgc3NlcmVn cGFybSB0eXBlcy4gICovCi0gIGlmICghbG9va3VwX2F0dHJpYnV0ZSAoInNz ZXJlZ3Bhcm0iLCBUWVBFX0FUVFJJQlVURVMgKHR5cGUxKSkKLSAgICAgICE9 ICFsb29rdXBfYXR0cmlidXRlICgic3NlcmVncGFybSIsIFRZUEVfQVRUUklC VVRFUyAodHlwZTIpKSkKKyAgY2N2dDEgPSBpeDg2X2dldF9jYWxsY3Z0ICh0 eXBlMSk7CisgIGNjdnQyID0gaXg4Nl9nZXRfY2FsbGN2dCAodHlwZTIpOwor ICBpZiAoY2N2dDEgIT0gY2N2dDIpCiAgICAgcmV0dXJuIDA7Ci0KLSAgLyog Q2hlY2sgZm9yIG1pc21hdGNoZWQgdGhpc2NhbGwgdHlwZXMuICAqLwotICBp ZiAoaXNfdGhpc2NhbGwgJiYgIVRBUkdFVF9SVEQpCi0gICAgewotICAgICAg aWYgKCFsb29rdXBfYXR0cmlidXRlICgiY2RlY2wiLCBUWVBFX0FUVFJJQlVU RVMgKHR5cGUxKSkKLQkgICE9ICFsb29rdXBfYXR0cmlidXRlICgiY2RlY2wi LCBUWVBFX0FUVFJJQlVURVMgKHR5cGUyKSkpCi0JcmV0dXJuIDA7Ci0gICAg fQotICBlbHNlIGlmICghaXNfdGhpc2NhbGwgfHwgVEFSR0VUX1JURCkKLSAg ICB7Ci0gICAgICBpZiAoIWxvb2t1cF9hdHRyaWJ1dGUgKCJ0aGlzY2FsbCIs IFRZUEVfQVRUUklCVVRFUyAodHlwZTEpKQotCSAgIT0gIWxvb2t1cF9hdHRy aWJ1dGUgKCJ0aGlzY2FsbCIsIFRZUEVfQVRUUklCVVRFUyAodHlwZTIpKSkK LQlyZXR1cm4gMDsKLSAgICB9Ci0KLSAgLyogQ2hlY2sgZm9yIG1pc21hdGNo ZWQgcmV0dXJuIHR5cGVzIChjZGVjbCB2cyBzdGRjYWxsKS4gICovCi0gIGlm ICghbG9va3VwX2F0dHJpYnV0ZSAocnRkc3RyLCBUWVBFX0FUVFJJQlVURVMg KHR5cGUxKSkKLSAgICAgICE9ICFsb29rdXBfYXR0cmlidXRlIChydGRzdHIs IFRZUEVfQVRUUklCVVRFUyAodHlwZTIpKSkKKyAgaWYgKGl4ODZfZnVuY3Rp b25fcmVncGFybSAodHlwZTEsIE5VTEwpCisgICAgICAhPSBpeDg2X2Z1bmN0 aW9uX3JlZ3Bhcm0gKHR5cGUyLCBOVUxMKSkKICAgICByZXR1cm4gMDsKIAog ICByZXR1cm4gMTsKQEAgLTU1MjgsMjMgKzU1MTksMjYgQEAgaXg4Nl9mdW5j dGlvbl9yZWdwYXJtIChjb25zdF90cmVlIHR5cGUsCiB7CiAgIHRyZWUgYXR0 cjsKICAgaW50IHJlZ3Bhcm07CisgIHVuc2lnbmVkIGludCBjY3Z0OwogCiAg IGlmIChUQVJHRVRfNjRCSVQpCiAgICAgcmV0dXJuIChpeDg2X2Z1bmN0aW9u X3R5cGVfYWJpICh0eXBlKSA9PSBTWVNWX0FCSQogCSAgICA/IFg4Nl82NF9S RUdQQVJNX01BWCA6IFg4Nl82NF9NU19SRUdQQVJNX01BWCk7Ci0KKyAgY2N2 dCA9IGl4ODZfZ2V0X2NhbGxjdnQgKHR5cGUpOwogICByZWdwYXJtID0gaXg4 Nl9yZWdwYXJtOwotICBhdHRyID0gbG9va3VwX2F0dHJpYnV0ZSAoInJlZ3Bh cm0iLCBUWVBFX0FUVFJJQlVURVMgKHR5cGUpKTsKLSAgaWYgKGF0dHIpCisK KyAgaWYgKChjY3Z0ICYgSVg4Nl9DQUxMQ1ZUX1JFR1BBUk0pICE9IDApCiAg ICAgewotICAgICAgcmVncGFybSA9IFRSRUVfSU5UX0NTVF9MT1cgKFRSRUVf VkFMVUUgKFRSRUVfVkFMVUUgKGF0dHIpKSk7Ci0gICAgICByZXR1cm4gcmVn cGFybTsKKyAgICAgIGF0dHIgPSBsb29rdXBfYXR0cmlidXRlICgicmVncGFy bSIsIFRZUEVfQVRUUklCVVRFUyAodHlwZSkpOworICAgICAgaWYgKGF0dHIp CisJeworCSAgcmVncGFybSA9IFRSRUVfSU5UX0NTVF9MT1cgKFRSRUVfVkFM VUUgKFRSRUVfVkFMVUUgKGF0dHIpKSk7CisJICByZXR1cm4gcmVncGFybTsK Kwl9CiAgICAgfQotCi0gIGlmIChsb29rdXBfYXR0cmlidXRlICgiZmFzdGNh bGwiLCBUWVBFX0FUVFJJQlVURVMgKHR5cGUpKSkKKyAgZWxzZSBpZiAoKGNj dnQgJiBJWDg2X0NBTExDVlRfRkFTVENBTEwpICE9IDApCiAgICAgcmV0dXJu IDI7Ci0KLSAgaWYgKGl4ODZfaXNfdHlwZV90aGlzY2FsbCAodHlwZSkpCisg IGVsc2UgaWYgKChjY3Z0ICYgSVg4Nl9DQUxMQ1ZUX1RISVNDQUxMKSAhPSAw KQogICAgIHJldHVybiAxOwogCiAgIC8qIFVzZSByZWdpc3RlciBjYWxsaW5n IGNvbnZlbnRpb24gZm9yIGxvY2FsIGZ1bmN0aW9ucyB3aGVuIHBvc3NpYmxl LiAgKi8KQEAgLTU2OTUsMjcgKzU2ODksMTggQEAgaXg4Nl9rZWVwX2FnZ3Jl Z2F0ZV9yZXR1cm5fcG9pbnRlciAodHJlZQogc3RhdGljIGludAogaXg4Nl9y ZXR1cm5fcG9wc19hcmdzICh0cmVlIGZ1bmRlY2wsIHRyZWUgZnVudHlwZSwg aW50IHNpemUpCiB7Ci0gIGludCBydGQ7CisgIHVuc2lnbmVkIGludCBjY3Z0 OwogCiAgIC8qIE5vbmUgb2YgdGhlIDY0LWJpdCBBQklzIHBvcCBhcmd1bWVu dHMuICAqLwogICBpZiAoVEFSR0VUXzY0QklUKQogICAgIHJldHVybiAwOwog Ci0gIHJ0ZCA9IFRBUkdFVF9SVEQgJiYgKCFmdW5kZWNsIHx8IFRSRUVfQ09E RSAoZnVuZGVjbCkgIT0gSURFTlRJRklFUl9OT0RFKTsKKyAgY2N2dCA9IGl4 ODZfZ2V0X2NhbGxjdnQgKGZ1bnR5cGUpOwogCi0gIC8qIENkZWNsIGZ1bmN0 aW9ucyBvdmVycmlkZSAtbXJ0ZCwgYW5kIG5ldmVyIHBvcCB0aGUgc3RhY2su ICAqLwotICBpZiAoISBsb29rdXBfYXR0cmlidXRlICgiY2RlY2wiLCBUWVBF X0FUVFJJQlVURVMgKGZ1bnR5cGUpKSkKLSAgICB7Ci0gICAgICAvKiBTdGRj YWxsIGFuZCBmYXN0Y2FsbCBmdW5jdGlvbnMgd2lsbCBwb3AgdGhlIHN0YWNr IGlmIG5vdAotICAgICAgICAgdmFyaWFibGUgYXJncy4gICovCi0gICAgICBp ZiAobG9va3VwX2F0dHJpYnV0ZSAoInN0ZGNhbGwiLCBUWVBFX0FUVFJJQlVU RVMgKGZ1bnR5cGUpKQotCSAgfHwgbG9va3VwX2F0dHJpYnV0ZSAoImZhc3Rj YWxsIiwgVFlQRV9BVFRSSUJVVEVTIChmdW50eXBlKSkKLSAgICAgICAgICB8 fCBpeDg2X2lzX3R5cGVfdGhpc2NhbGwgKGZ1bnR5cGUpKQotCXJ0ZCA9IDE7 Ci0KLSAgICAgIGlmIChydGQgJiYgISBzdGRhcmdfcCAoZnVudHlwZSkpCi0J cmV0dXJuIHNpemU7Ci0gICAgfQorICBpZiAoKGNjdnQgJiAoSVg4Nl9DQUxM Q1ZUX1NURENBTEwgfCBJWDg2X0NBTExDVlRfRkFTVENBTEwKKwkgICAgICAg fCBJWDg2X0NBTExDVlRfVEhJU0NBTEwpKSAhPSAwCisgICAgICAmJiAhIHN0 ZGFyZ19wIChmdW50eXBlKSkKKyAgICByZXR1cm4gc2l6ZTsKIAogICAvKiBM b3NlIGFueSBmYWtlIHN0cnVjdHVyZSByZXR1cm4gYXJndW1lbnQgaWYgaXQg aXMgcGFzc2VkIG9uIHRoZSBzdGFjay4gICovCiAgIGlmIChhZ2dyZWdhdGVf dmFsdWVfcCAoVFJFRV9UWVBFIChmdW50eXBlKSwgZnVuZGVjbCkKQEAgLTU4 MTgsNyArNTgwMyw3IEBAIGl4ODZfcmVnX3Bhcm1fc3RhY2tfc3BhY2UgKGNv bnN0X3RyZWUgZm4KIGVudW0gY2FsbGluZ19hYmkKIGl4ODZfZnVuY3Rpb25f dHlwZV9hYmkgKGNvbnN0X3RyZWUgZm50eXBlKQogewotICBpZiAoZm50eXBl ICE9IE5VTEwpCisgIGlmIChmbnR5cGUgIT0gTlVMTF9UUkVFICYmIFRZUEVf QVRUUklCVVRFUyAoZm50eXBlKSAhPSBOVUxMX1RSRUUpCiAgICAgewogICAg ICAgZW51bSBjYWxsaW5nX2FiaSBhYmkgPSBpeDg2X2FiaTsKICAgICAgIGlm IChhYmkgPT0gU1lTVl9BQkkpCkBAIC02MDQ4LDEyICs2MDMzLDEzIEBAIGlu aXRfY3VtdWxhdGl2ZV9hcmdzIChDVU1VTEFUSVZFX0FSR1MgKmMKIAkgZWxz ZSBsb29rIGZvciByZWdwYXJtIGluZm9ybWF0aW9uLiAgKi8KICAgICAgIGlm IChmbnR5cGUpCiAJewotCSAgaWYgKGl4ODZfaXNfdHlwZV90aGlzY2FsbCAo Zm50eXBlKSkKKwkgIHVuc2lnbmVkIGludCBjY3Z0ID0gaXg4Nl9nZXRfY2Fs bGN2dCAoZm50eXBlKTsKKwkgIGlmICgoY2N2dCAmIElYODZfQ0FMTENWVF9U SElTQ0FMTCkgIT0gMCkKIAkgICAgewogCSAgICAgIGN1bS0+bnJlZ3MgPSAx OwogCSAgICAgIGN1bS0+ZmFzdGNhbGwgPSAxOyAvKiBTYW1lIGZpcnN0IHJl Z2lzdGVyIGFzIGluIGZhc3RjYWxsLiAgKi8KIAkgICAgfQotCSAgZWxzZSBp ZiAobG9va3VwX2F0dHJpYnV0ZSAoImZhc3RjYWxsIiwgVFlQRV9BVFRSSUJV VEVTIChmbnR5cGUpKSkKKwkgIGVsc2UgaWYgKChjY3Z0ICYgSVg4Nl9DQUxM Q1ZUX0ZBU1RDQUxMKSAhPSAwKQogCSAgICB7CiAJICAgICAgY3VtLT5ucmVn cyA9IDI7CiAJICAgICAgY3VtLT5mYXN0Y2FsbCA9IDE7CkBAIC05ODM5LDEz ICs5ODI1LDEzIEBAIGZpbmRfZHJhcF9yZWcgKHZvaWQpCiAKICAgICAgIC8q IFJldXNlIHN0YXRpYyBjaGFpbiByZWdpc3RlciBpZiBpdCBpc24ndCB1c2Vk IGZvciBwYXJhbWV0ZXIKICAgICAgICAgIHBhc3NpbmcuICAqLwotICAgICAg aWYgKGl4ODZfZnVuY3Rpb25fcmVncGFybSAoVFJFRV9UWVBFIChkZWNsKSwg ZGVjbCkgPD0gMgotCSAgJiYgIWxvb2t1cF9hdHRyaWJ1dGUgKCJmYXN0Y2Fs bCIsCi0gICAgCQkJCVRZUEVfQVRUUklCVVRFUyAoVFJFRV9UWVBFIChkZWNs KSkpCi0JICAmJiAhaXg4Nl9pc190eXBlX3RoaXNjYWxsIChUUkVFX1RZUEUg KGRlY2wpKSkKLQlyZXR1cm4gQ1hfUkVHOwotICAgICAgZWxzZQotCXJldHVy biBESV9SRUc7CisgICAgICBpZiAoaXg4Nl9mdW5jdGlvbl9yZWdwYXJtIChU UkVFX1RZUEUgKGRlY2wpLCBkZWNsKSA8PSAyKQorCXsKKwkgIHVuc2lnbmVk IGludCBjY3Z0ID0gaXg4Nl9nZXRfY2FsbGN2dCAoVFJFRV9UWVBFIChkZWNs KSk7CisJICBpZiAoKGNjdnQgJiAoSVg4Nl9DQUxMQ1ZUX0ZBU1RDQUxMIHwg SVg4Nl9DQUxMQ1ZUX1RISVNDQUxMKSkgPT0gMCkKKwkgICAgcmV0dXJuIENY X1JFRzsKKwl9CisgICAgICByZXR1cm4gRElfUkVHOwogICAgIH0KIH0KIApA QCAtMjMyODIsMjAgKzIzMjY4LDE5IEBAIGl4ODZfc3RhdGljX2NoYWluIChj b25zdF90cmVlIGZuZGVjbCwgYm8KICAgZWxzZQogICAgIHsKICAgICAgIHRy ZWUgZm50eXBlOworICAgICAgdW5zaWduZWQgaW50IGNjdnQ7CisKICAgICAg IC8qIEJ5IGRlZmF1bHQgaW4gMzItYml0IG1vZGUgd2UgdXNlIEVDWCB0byBw YXNzIHRoZSBzdGF0aWMgY2hhaW4uICAqLwogICAgICAgcmVnbm8gPSBDWF9S RUc7CiAKICAgICAgIGZudHlwZSA9IFRSRUVfVFlQRSAoZm5kZWNsKTsKLSAg ICAgIGlmIChsb29rdXBfYXR0cmlidXRlICgiZmFzdGNhbGwiLCBUWVBFX0FU VFJJQlVURVMgKGZudHlwZSkpKQorICAgICAgY2N2dCA9IGl4ODZfZ2V0X2Nh bGxjdnQgKGZudHlwZSk7CisgICAgICBpZiAoKGNjdnQgJiAoSVg4Nl9DQUxM Q1ZUX0ZBU1RDQUxMIHwgSVg4Nl9DQUxMQ1ZUX1RISVNDQUxMKSkgIT0gMCkK IAl7CiAJICAvKiBGYXN0Y2FsbCBmdW5jdGlvbnMgdXNlIGVjeC9lZHggZm9y IGFyZ3VtZW50cywgd2hpY2ggbGVhdmVzCi0JICAgICB1cyB3aXRoIEVBWCBm b3IgdGhlIHN0YXRpYyBjaGFpbi4gICovCi0JICByZWdubyA9IEFYX1JFRzsK LQl9Ci0gICAgICBlbHNlIGlmIChpeDg2X2lzX3R5cGVfdGhpc2NhbGwgKGZu dHlwZSkpCi0JewotCSAgLyogVGhpc2NhbGwgZnVuY3Rpb25zIHVzZSBlY3gg Zm9yIGFyZ3VtZW50cywgd2hpY2ggbGVhdmVzCi0JICAgICB1cyB3aXRoIEVB WCBmb3IgdGhlIHN0YXRpYyBjaGFpbi4gICovCisJICAgICB1cyB3aXRoIEVB WCBmb3IgdGhlIHN0YXRpYyBjaGFpbi4KKwkgICAgIFRoaXNjYWxsIGZ1bmN0 aW9ucyB1c2UgZWN4IGZvciBhcmd1bWVudHMsIHdoaWNoIGFsc28KKwkgICAg IGxlYXZlcyB1cyB3aXRoIEVBWCBmb3IgdGhlIHN0YXRpYyBjaGFpbi4gICov CiAJICByZWdubyA9IEFYX1JFRzsKIAl9CiAgICAgICBlbHNlIGlmIChpeDg2 X2Z1bmN0aW9uX3JlZ3Bhcm0gKGZudHlwZSwgZm5kZWNsKSA9PSAzKQpAQCAt Mjk4NDYsMTAgKzI5ODMxLDExIEBAIHg4Nl90aGlzX3BhcmFtZXRlciAodHJl ZSBmdW5jdGlvbikKICAgaWYgKG5yZWdzID4gMCAmJiAhc3RkYXJnX3AgKHR5 cGUpKQogICAgIHsKICAgICAgIGludCByZWdubzsKKyAgICAgIHVuc2lnbmVk IGludCBjY3Z0ID0gaXg4Nl9nZXRfY2FsbGN2dCAodHlwZSk7CiAKLSAgICAg IGlmIChsb29rdXBfYXR0cmlidXRlICgiZmFzdGNhbGwiLCBUWVBFX0FUVFJJ QlVURVMgKHR5cGUpKSkKKyAgICAgIGlmICgoY2N2dCAmIElYODZfQ0FMTENW VF9GQVNUQ0FMTCkgIT0gMCkKIAlyZWdubyA9IGFnZ3IgPyBEWF9SRUcgOiBD WF9SRUc7Ci0gICAgICBlbHNlIGlmIChpeDg2X2lzX3R5cGVfdGhpc2NhbGwg KHR5cGUpKQorICAgICAgZWxzZSBpZiAoKGNjdnQgJiBJWDg2X0NBTExDVlRf VEhJU0NBTEwpICE9IDApCiAgICAgICAgIHsKIAkgIHJlZ25vID0gQ1hfUkVH OwogCSAgaWYgKGFnZ3IpCkBAIC0yOTk2Niw5ICsyOTk1Miw4IEBAIHg4Nl9v dXRwdXRfbWlfdGh1bmsgKEZJTEUgKmZpbGUsCiAgICAgICBlbHNlCiAJewog CSAgaW50IHRtcF9yZWdubyA9IENYX1JFRzsKLQkgIGlmIChsb29rdXBfYXR0 cmlidXRlICgiZmFzdGNhbGwiLAotCQkJCVRZUEVfQVRUUklCVVRFUyAoVFJF RV9UWVBFIChmdW5jdGlvbikpKQotCSAgICAgIHx8IGl4ODZfaXNfdHlwZV90 aGlzY2FsbCAoVFJFRV9UWVBFIChmdW5jdGlvbikpKQorCSAgdW5zaWduZWQg aW50IGNjdnQgPSBpeDg2X2dldF9jYWxsY3Z0IChUUkVFX1RZUEUgKGZ1bmN0 aW9uKSk7CisJICBpZiAoKGNjdnQgJiAoSVg4Nl9DQUxMQ1ZUX0ZBU1RDQUxM IHwgSVg4Nl9DQUxMQ1ZUX1RISVNDQUxMKSkgIT0gMCkKIAkgICAgdG1wX3Jl Z25vID0gQVhfUkVHOwogCSAgdG1wID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwg dG1wX3JlZ25vKTsKIAl9CkluZGV4OiBnY2MvZ2NjL2NvbmZpZy9pMzg2L2kz ODYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2Mub3JpZy9nY2Mv Y29uZmlnL2kzODYvaTM4Ni5oCTIwMTEtMDQtMDggMTY6MDA6MTYuMjc0NDEx NTAwICswMjAwCisrKyBnY2MvZ2NjL2NvbmZpZy9pMzg2L2kzODYuaAkyMDEx LTA0LTA5IDEyOjM4OjE1LjQ0NDgxMDEwMCArMDIwMApAQCAtMjM2OCw2ICsy MzY4LDE4IEBAIGV4dGVybiB2b2lkIGRlYnVnX2Rpc3BhdGNoX3dpbmRvdyAo aW50KTsKIAkoKFZBTFVFKSA9IEdFVF9NT0RFX0JJVFNJWkUgKE1PREUpLCBU QVJHRVRfQk1JKQogCiAKKy8qIEZsYWdzIHJldHVybmVkIGJ5IGl4ODZfZ2V0 X2NhbGxjdnQgKCkuICAqLworI2RlZmluZSBJWDg2X0NBTExDVlRfQ0RFQ0wJ MHgxCisjZGVmaW5lIElYODZfQ0FMTENWVF9TVERDQUxMCTB4MgorI2RlZmlu ZSBJWDg2X0NBTExDVlRfRkFTVENBTEwJMHg0CisjZGVmaW5lIElYODZfQ0FM TENWVF9USElTQ0FMTAkweDgKKyNkZWZpbmUgSVg4Nl9DQUxMQ1ZUX1JFR1BB Uk0JMHgxMAorI2RlZmluZSBJWDg2X0NBTExDVlRfU1NFUkVHUEFSTQkweDIw CisKKyNkZWZpbmUgSVg4Nl9CQVNFX0NBTExDVlQoRkxBR1MpIFwKKwkoKEZM QUdTKSAmIChJWDg2X0NBTExDVlRfQ0RFQ0wgfCBJWDg2X0NBTExDVlRfU1RE Q0FMTCBcCisJCSAgICB8IElYODZfQ0FMTENWVF9GQVNUQ0FMTCB8IElYODZf Q0FMTENWVF9USElTQ0FMTCkpCisKIC8qCiBMb2NhbCB2YXJpYWJsZXM6CiB2 ZXJzaW9uLWNvbnRyb2w6IHQKSW5kZXg6IGdjYy9nY2MvY29uZmlnL2kzODYv bmV0d2FyZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy5vcmln L2djYy9jb25maWcvaTM4Ni9uZXR3YXJlLmMJMjAxMS0wNC0wOCAxNjowMDox Ni4yNzk0MTE1MDAgKzAyMDAKKysrIGdjYy9nY2MvY29uZmlnL2kzODYvbmV0 d2FyZS5jCTIwMTEtMDQtMDkgMTI6NDY6NTIuNTc4Mzg4NTAwICswMjAwCkBA IC0xNDgsMTIgKzE0OCwyMCBAQCBpMzg2X25sbV9tYXliZV9tYW5nbGVfZGVj bF9hc3NlbWJsZXJfbmFtCiB7CiAgIHRyZWUgdHlwZV9hdHRyaWJ1dGVzID0g VFlQRV9BVFRSSUJVVEVTIChUUkVFX1RZUEUgKGRlY2wpKTsKICAgdHJlZSBu ZXdfaWQ7CisgIHVuc2lnbmVkIGludCBjY3Z0ID0gaXg4Nl9nZXRfY2FsbGN2 dCAoVFJFRV9UWVBFIChkZWNsKSk7CiAKLSAgaWYgKGxvb2t1cF9hdHRyaWJ1 dGUgKCJzdGRjYWxsIiwgdHlwZV9hdHRyaWJ1dGVzKSkKLSAgICBuZXdfaWQg PSBnZW5fc3RkY2FsbF9vcl9mYXN0Y2FsbF9kZWNvcmF0aW9uIChkZWNsLCBp ZCwgJ18nKTsKLSAgZWxzZSBpZiAobG9va3VwX2F0dHJpYnV0ZSAoImZhc3Rj YWxsIiwgdHlwZV9hdHRyaWJ1dGVzKSkKKyAgaWYgKChjY3Z0ICYgSVg4Nl9D QUxMQ1ZUX1NURENBTEwpICE9IDApCisgICAgeworICAgICAgaWYgKFRBUkdF VF9SVEQpCisJLyogSWYgd2UgYXJlIHVzaW5nIC1tcnRkIGVtaXQgdW5kZWNv cmF0ZWQgc3ltYm9sIGFuZCBsZXQgbGlua2VyCisJICAgZG8gdGhlIHByb3Bl ciByZXNvbHZpbmcuICAqLworCXJldHVybiBOVUxMX1RSRUU7CisgICAgICBu ZXdfaWQgPSBnZW5fc3RkY2FsbF9vcl9mYXN0Y2FsbF9kZWNvcmF0aW9uIChk ZWNsLCBpZCwgJ18nKTsKKyAgICB9CisgIGVsc2UgaWYgKChjY3Z0ICYgSVg4 Nl9DQUxMQ1ZUX0ZBU1RDQUxMKSAhPSAwKQogICAgIG5ld19pZCA9IGdlbl9z dGRjYWxsX29yX2Zhc3RjYWxsX2RlY29yYXRpb24gKGRlY2wsIGlkLCBGQVNU Q0FMTF9QUkVGSVgpOwotICBlbHNlIGlmICgobmV3X2lkID0gbG9va3VwX2F0 dHJpYnV0ZSAoInJlZ3Bhcm0iLCB0eXBlX2F0dHJpYnV0ZXMpKSkKKyAgZWxz ZSBpZiAoKGN2dCAmIElYODZfQ0FMTENWVF9SRUdQQVJNKSAhPSAwCisJICAg JiYgKG5ld19pZCA9IGxvb2t1cF9hdHRyaWJ1dGUgKCJyZWdwYXJtIiwgdHlw ZV9hdHRyaWJ1dGVzKSkpCiAgICAgbmV3X2lkID0gZ2VuX3JlZ3Bhcm1fcHJl Zml4IChkZWNsLCBpZCwKIAkJICBUUkVFX0lOVF9DU1RfTE9XIChUUkVFX1ZB TFVFIChUUkVFX1ZBTFVFIChuZXdfaWQpKSkpOwogICBlbHNlCkluZGV4OiBn Y2MvZ2NjL2NvbmZpZy9pMzg2L3dpbm50LmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gZ2NjLm9yaWcvZ2NjL2NvbmZpZy9pMzg2L3dpbm50LmMJMjAx MS0wNC0wOCAxNjowMDoxNi4zMjg0MTE1MDAgKzAyMDAKKysrIGdjYy9nY2Mv Y29uZmlnL2kzODYvd2lubnQuYwkyMDExLTA0LTA5IDEyOjQ4OjMyLjk4MjEz MTIwMCArMDIwMApAQCAtMTcwLDcgKzE3MCw3IEBAIGdlbl9zdGRjYWxsX29y X2Zhc3RjYWxsX3N1ZmZpeCAodHJlZSBkZWMKICAgSE9TVF9XSURFX0lOVCB0 b3RhbCA9IDA7CiAgIGNvbnN0IGNoYXIgKm9sZF9zdHIgPSBJREVOVElGSUVS X1BPSU5URVIgKGlkICE9IE5VTExfVFJFRSA/IGlkIDogREVDTF9OQU1FIChk ZWNsKSk7CiAgIGNoYXIgKm5ld19zdHIsICpwOwotICB0cmVlIHR5cGUgPSBU UkVFX1RZUEUgKGRlY2wpOworICB0cmVlIHR5cGUgPSBUUkVFX1RZUEUgKERF Q0xfT1JJR0lOIChkZWNsKSk7CiAgIHRyZWUgYXJnOwogICBmdW5jdGlvbl9h cmdzX2l0ZXJhdG9yIGFyZ3NfaXRlcjsKIApAQCAtMjAyLDcgKzIwMiw4IEBA IGdlbl9zdGRjYWxsX29yX2Zhc3RjYWxsX3N1ZmZpeCAodHJlZSBkZWMKIAkJ ICAgICAgIC8gcGFybV9ib3VuZGFyeV9ieXRlcyAqIHBhcm1fYm91bmRhcnlf Ynl0ZXMpOwogCSAgdG90YWwgKz0gcGFybV9zaXplOwogCX0KLSAgICAgIH0K KyAgICB9CisKICAgLyogQXNzdW1lIG1heCBvZiA4IGJhc2UgMTAgZGlnaXRz IGluIHRoZSBzdWZmaXguICAqLwogICBwID0gbmV3X3N0ciA9IFhBTExPQ0FW RUMgKGNoYXIsIDEgKyBzdHJsZW4gKG9sZF9zdHIpICsgMSArIDggKyAxKTsK ICAgaWYgKGZhc3RjYWxsKQpAQCAtMjIyLDEwICsyMjMsMTYgQEAgaTM4Nl9w ZV9tYXliZV9tYW5nbGVfZGVjbF9hc3NlbWJsZXJfbmFtZQogCiAgIGlmIChU UkVFX0NPREUgKGRlY2wpID09IEZVTkNUSU9OX0RFQ0wpCiAgICAgeyAKLSAg ICAgIHRyZWUgdHlwZV9hdHRyaWJ1dGVzID0gVFlQRV9BVFRSSUJVVEVTIChU UkVFX1RZUEUgKGRlY2wpKTsKLSAgICAgIGlmIChsb29rdXBfYXR0cmlidXRl ICgic3RkY2FsbCIsIHR5cGVfYXR0cmlidXRlcykpCi0JbmV3X2lkID0gZ2Vu X3N0ZGNhbGxfb3JfZmFzdGNhbGxfc3VmZml4IChkZWNsLCBpZCwgZmFsc2Up OwotICAgICAgZWxzZSBpZiAobG9va3VwX2F0dHJpYnV0ZSAoImZhc3RjYWxs IiwgdHlwZV9hdHRyaWJ1dGVzKSkKKyAgICAgIHVuc2lnbmVkIGludCBjY3Z0 ID0gaXg4Nl9nZXRfY2FsbGN2dCAoVFJFRV9UWVBFIChkZWNsKSk7CisgICAg ICBpZiAoKGNjdnQgJiBJWDg2X0NBTExDVlRfU1REQ0FMTCkgIT0gMCkKKyAg ICAgICAgeworCSAgaWYgKFRBUkdFVF9SVEQpCisJICAgIC8qIElmIHdlIGFy ZSB1c2luZyAtbXJ0ZCBlbWl0IHVuZGVjb3JhdGVkIHN5bWJvbCBhbmQgbGV0 IGxpbmtlcgorCSAgICAgICBkbyB0aGUgcHJvcGVyIHJlc29sdmluZy4gICov CisJICAgIHJldHVybiBOVUxMX1RSRUU7CisJICBuZXdfaWQgPSBnZW5fc3Rk Y2FsbF9vcl9mYXN0Y2FsbF9zdWZmaXggKGRlY2wsIGlkLCBmYWxzZSk7CisJ fQorICAgICAgZWxzZSBpZiAoKGNjdnQgJiBJWDg2X0NBTExDVlRfRkFTVENB TEwpICE9IDApCiAJbmV3X2lkID0gZ2VuX3N0ZGNhbGxfb3JfZmFzdGNhbGxf c3VmZml4IChkZWNsLCBpZCwgdHJ1ZSk7CiAgICAgfQogCg== --000e0cd6b216297cea04a07bddbf--