From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id A010C385B503 for ; Wed, 30 Nov 2022 15:17:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A010C385B503 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.96,206,1665475200"; d="scan'208";a="88186297" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa4.mentor.iphmx.com with ESMTP; 30 Nov 2022 07:17:39 -0800 IronPort-SDR: WBf+wRN1b/FNJvbJ1tr68b7MTvdZOwuk1oJKWzohV6yAn0WjN8prxt7Pj9QIusyvoU3Tdk8xRE 8JzYa//CUlskUlb0NoNRFSdBEm9qMtJcqrE2/D2O712O9P7FllbyU+ZNbHZlhYLbf/9cTOohzc Si0c7kG7dcKib9zDr1zwglvlf4jiW7AOLZf6ATWmss9HHljhV77f3gxYPPJbQVE9kC0jhRhVOQ s1Bl+5Uo8/+AkrHC/FH+nn+q5yD+cOLZA5XZwgjnxeG938PIZqj8wwuGEY0SWQuC8oZE6EIDhj zpM= Content-Type: multipart/mixed; boundary="------------LcgEoD3rFaV4nR2fcbVep7rp" Message-ID: Date: Wed, 30 Nov 2022 15:17:30 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 Subject: Re: [PATCH 3/3] vect: inbranch SIMD clones Content-Language: en-GB To: Jakub Jelinek , Richard Biener CC: References: From: Andrew Stubbs In-Reply-To: X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-15.mgc.mentorg.com (139.181.222.15) To svr-ies-mbx-11.mgc.mentorg.com (139.181.222.11) X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,NICE_REPLY_A,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --------------LcgEoD3rFaV4nR2fcbVep7rp Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit On 09/09/2022 15:31, Jakub Jelinek wrote: >> --- a/gcc/tree-if-conv.cc >> +++ b/gcc/tree-if-conv.cc >> @@ -1074,13 +1076,19 @@ if_convertible_stmt_p (gimple *stmt, vec refs) >> tree fndecl = gimple_call_fndecl (stmt); >> if (fndecl) >> { >> + /* We can vectorize some builtins and functions with SIMD >> + clones. */ >> int flags = gimple_call_flags (stmt); >> + struct cgraph_node *node = cgraph_node::get (fndecl); >> if ((flags & ECF_CONST) >> && !(flags & ECF_LOOPING_CONST_OR_PURE) >> - /* We can only vectorize some builtins at the moment, >> - so restrict if-conversion to those. */ >> && fndecl_built_in_p (fndecl)) >> return true; >> + else if (node && node->simd_clones != NULL) >> + { >> + need_to_predicate = true; > > I think it would be worth it to check that at least one of the > node->simd_clones clones has ->inbranch set, because if all calls > are declare simd notinbranch, then predicating the loop will be just a > wasted effort. > >> + return true; >> + } >> } >> return false; >> } >> @@ -2614,6 +2622,31 @@ predicate_statements (loop_p loop) >> gimple_assign_set_rhs1 (stmt, ifc_temp_var (type, rhs, &gsi)); >> update_stmt (stmt); >> } >> + >> + /* Add a predicate parameter to functions that have a SIMD clone. >> + This will cause the vectorizer to match the "in branch" clone >> + variants because they also have the extra parameter, and serves >> + to build the mask vector in a natural way. */ >> + gcall *call = dyn_cast (gsi_stmt (gsi)); >> + if (call && !gimple_call_internal_p (call)) >> + { >> + tree orig_fndecl = gimple_call_fndecl (call); >> + int orig_nargs = gimple_call_num_args (call); >> + auto_vec args; >> + for (int i=0; i < orig_nargs; i++) >> + args.safe_push (gimple_call_arg (call, i)); >> + args.safe_push (cond); >> + >> + /* Replace the call with a new one that has the extra >> + parameter. The FUNCTION_DECL remains unchanged so that >> + the vectorizer can find the SIMD clones. This call will >> + either be deleted or replaced at that time, so the >> + mismatch is short-lived and we can live with it. */ >> + gcall *new_call = gimple_build_call_vec (orig_fndecl, args); >> + gimple_call_set_lhs (new_call, gimple_call_lhs (call)); >> + gsi_replace (&gsi, new_call, true); > > I think this is way too dangerous to represent conditional calls that way, > there is nothing to distinguish those from non-conditional calls. > I think I'd prefer (but please see what Richi thinks too) to represent > the conditional calls as a call to a new internal function, say > IFN_COND_CALL or IFN_MASK_CALL, which would have the arguments the original > call had, plus 2 extra ones first (or 3?), one that would be saved copy of > original gimple_call_fn (i.e. usually &fndecl), another one that would be the > condition (and dunno about whether we need also something to represent > gimple_call_fntype, or whether we simply should punt during ifcvt > on conditional calls where gimple_call_fntype is incompatible with > the function type of fndecl. Another question is about > gimple_call_chain. Punt or copy it over to the ifn and back. The attached should resolve these issues. OK for mainline? Andrew --------------LcgEoD3rFaV4nR2fcbVep7rp Content-Type: text/plain; charset="UTF-8"; name="221130-inbranch-simd-clones.patch" Content-Disposition: attachment; filename="221130-inbranch-simd-clones.patch" Content-Transfer-Encoding: base64 dmVjdDogaW5icmFuY2ggU0lNRCBjbG9uZXMKClRoZXJlIGhhcyBiZWVuIHN1cHBvcnQgZm9y IGdlbmVyYXRpbmcgImluYnJhbmNoIiBTSU1EIGNsb25lcyBmb3IgYSBsb25nIHRpbWUsCmJ1 dCBub3RoaW5nIGFjdHVhbGx5IHVzZXMgdGhlbSAoYXMgZmFyIGFzIEkgY2FuIHNlZSkuCgpU aGlzIHBhdGNoIGFkZCBzdXBwb3J0cyBmb3IgYSBzdWItc2V0IG9mIHBvc3NpYmxlIGNhc2Vz ICh0aG9zZSB1c2luZwptYXNrX21vZGUgPT0gVk9JRG1vZGUpLiAgVGhlIG90aGVyIGNhc2Vz IGZhaWwgdG8gdmVjdG9yaXplLCBqdXN0IGFzIGJlZm9yZSwKc28gdGhlcmUgc2hvdWxkIGJl IG5vIHJlZ3Jlc3Npb25zLgoKVGhlIHN1Yi1zZXQgb2Ygc3VwcG9ydCBzaG91bGQgY292ZXIg YWxsIGNhc2VzIG5lZWRlZCBieSBhbWRnY24sIGF0IHByZXNlbnQuCgpnY2MvQ2hhbmdlTG9n OgoKCSogaW50ZXJuYWwtZm4uY2MgKGV4cGFuZF9NQVNLX0NBTEwpOiBOZXcuCgkqIGludGVy bmFsLWZuLmRlZiAoTUFTS19DQUxMKTogTmV3LgoJKiBpbnRlcm5hbC1mbi5oIChleHBhbmRf TUFTS19DQUxMKTogTmV3IHByb3RvdHlwZS4KCSogb21wLXNpbWQtY2xvbmUuY2MgKHNpbWRf Y2xvbmVfYWRqdXN0X2FyZ3VtZW50X3R5cGVzKTogU2V0IHZlY3Rvcl90eXBlCglmb3IgbWFz ayBhcmd1bWVudHMgYWxzby4KCSogdHJlZS1pZi1jb252LmNjOiBJbmNsdWRlIGNncmFwaC5o LgoJKGlmX2NvbnZlcnRpYmxlX3N0bXRfcCk6IERvIGlmIGNvbnZlcnNpb25zIGZvciBjYWxs cyB0byBTSU1EIGNhbGxzLgoJKHByZWRpY2F0ZV9zdGF0ZW1lbnRzKTogQ29udmVydCBmdW5j dGlvbnMgdG8gSUZOX01BU0tfQ0FMTC4KCSogdHJlZS12ZWN0LWxvb3AuY2MgKHZlY3RfZ2V0 X2RhdGFyZWZzX2luX2xvb3ApOiBSZWNvZ25pc2UKCUlGTl9NQVNLX0NBTEwgYXMgYSBTSU1E IGZ1bmN0aW9uIGNhbGwuCgkqIHRyZWUtdmVjdC1zdG10cy5jYyAodmVjdG9yaXphYmxlX3Np bWRfY2xvbmVfY2FsbCk6IEhhbmRsZQoJSUZOX01BU0tfQ0FMTCBhcyBhbiBpbmJyYW5jaCBT SU1EIGZ1bmN0aW9uIGNhbGwuCglHZW5lcmF0ZSB0aGUgbWFzayB2ZWN0b3IgYXJndW1lbnRz LgoKZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6CgoJKiBnY2MuZGcvdmVjdC92ZWN0LXNpbWQt Y2xvbmUtMTYuYzogTmV3IHRlc3QuCgkqIGdjYy5kZy92ZWN0L3ZlY3Qtc2ltZC1jbG9uZS0x NmIuYzogTmV3IHRlc3QuCgkqIGdjYy5kZy92ZWN0L3ZlY3Qtc2ltZC1jbG9uZS0xNmMuYzog TmV3IHRlc3QuCgkqIGdjYy5kZy92ZWN0L3ZlY3Qtc2ltZC1jbG9uZS0xNmQuYzogTmV3IHRl c3QuCgkqIGdjYy5kZy92ZWN0L3ZlY3Qtc2ltZC1jbG9uZS0xNmUuYzogTmV3IHRlc3QuCgkq IGdjYy5kZy92ZWN0L3ZlY3Qtc2ltZC1jbG9uZS0xNmYuYzogTmV3IHRlc3QuCgkqIGdjYy5k Zy92ZWN0L3ZlY3Qtc2ltZC1jbG9uZS0xNy5jOiBOZXcgdGVzdC4KCSogZ2NjLmRnL3ZlY3Qv dmVjdC1zaW1kLWNsb25lLTE3Yi5jOiBOZXcgdGVzdC4KCSogZ2NjLmRnL3ZlY3QvdmVjdC1z aW1kLWNsb25lLTE3Yy5jOiBOZXcgdGVzdC4KCSogZ2NjLmRnL3ZlY3QvdmVjdC1zaW1kLWNs b25lLTE3ZC5jOiBOZXcgdGVzdC4KCSogZ2NjLmRnL3ZlY3QvdmVjdC1zaW1kLWNsb25lLTE3 ZS5jOiBOZXcgdGVzdC4KCSogZ2NjLmRnL3ZlY3QvdmVjdC1zaW1kLWNsb25lLTE3Zi5jOiBO ZXcgdGVzdC4KCSogZ2NjLmRnL3ZlY3QvdmVjdC1zaW1kLWNsb25lLTE4LmM6IE5ldyB0ZXN0 LgoJKiBnY2MuZGcvdmVjdC92ZWN0LXNpbWQtY2xvbmUtMThiLmM6IE5ldyB0ZXN0LgoJKiBn Y2MuZGcvdmVjdC92ZWN0LXNpbWQtY2xvbmUtMThjLmM6IE5ldyB0ZXN0LgoJKiBnY2MuZGcv dmVjdC92ZWN0LXNpbWQtY2xvbmUtMThkLmM6IE5ldyB0ZXN0LgoJKiBnY2MuZGcvdmVjdC92 ZWN0LXNpbWQtY2xvbmUtMThlLmM6IE5ldyB0ZXN0LgoJKiBnY2MuZGcvdmVjdC92ZWN0LXNp bWQtY2xvbmUtMThmLmM6IE5ldyB0ZXN0LgoKZGlmZiAtLWdpdCBhL2djYy9pbnRlcm5hbC1m bi5jYyBiL2djYy9pbnRlcm5hbC1mbi5jYwppbmRleCA5NDcxZjU0MzE5MS4uZDllMTFiZmM2 MmEgMTAwNjQ0Ci0tLSBhL2djYy9pbnRlcm5hbC1mbi5jYworKysgYi9nY2MvaW50ZXJuYWwt Zm4uY2MKQEAgLTQ1MjcsMyArNDUyNywxMCBAQCB2b2lkCiBleHBhbmRfQVNTVU1FIChpbnRl cm5hbF9mbiwgZ2NhbGwgKikKIHsKIH0KKwordm9pZAorZXhwYW5kX01BU0tfQ0FMTCAoaW50 ZXJuYWxfZm4sIGdjYWxsICopCit7CisgIC8qIFRoaXMgSUZOIHNob3VsZCBvbmx5IGV4aXN0 IGJldHdlZW4gaWZjdnQgYW5kIHZlY3QgcGFzc2VzLiAgKi8KKyAgZ2NjX3VucmVhY2hhYmxl ICgpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL2ludGVybmFsLWZuLmRlZiBiL2djYy9pbnRlcm5h bC1mbi5kZWYKaW5kZXggNjE1MTZkYWI2NmQuLjMwMWMzNzgwNjU5IDEwMDY0NAotLS0gYS9n Y2MvaW50ZXJuYWwtZm4uZGVmCisrKyBiL2djYy9pbnRlcm5hbC1mbi5kZWYKQEAgLTQ2Niw2 ICs0NjYsOSBAQCBERUZfSU5URVJOQUxfRk4gKFRSQVAsIEVDRl9DT05TVCB8IEVDRl9MRUFG IHwgRUNGX05PUkVUVVJOCiBERUZfSU5URVJOQUxfRk4gKEFTU1VNRSwgRUNGX0NPTlNUIHwg RUNGX0xFQUYgfCBFQ0ZfTk9USFJPVwogCQkJIHwgRUNGX0xPT1BJTkdfQ09OU1RfT1JfUFVS RSwgTlVMTCkKIAorLyogRm9yIGlmLWNvbnZlcnNpb24gb2YgaW5icmFuY2ggU0lNRCBjbG9u ZXMuICAqLworREVGX0lOVEVSTkFMX0ZOIChNQVNLX0NBTEwsIEVDRl9OT1ZPUFMsIE5VTEwp CisKICN1bmRlZiBERUZfSU5URVJOQUxfSU5UX0ZOCiAjdW5kZWYgREVGX0lOVEVSTkFMX0ZM VF9GTgogI3VuZGVmIERFRl9JTlRFUk5BTF9GTFRfRkxPQVROX0ZOCmRpZmYgLS1naXQgYS9n Y2MvaW50ZXJuYWwtZm4uaCBiL2djYy9pbnRlcm5hbC1mbi5oCmluZGV4IDIxYjFjZTQzZGY2 Li5jZWQ5MmMwNDFiYiAxMDA2NDQKLS0tIGEvZ2NjL2ludGVybmFsLWZuLmgKKysrIGIvZ2Nj L2ludGVybmFsLWZuLmgKQEAgLTI0NCw2ICsyNDQsNyBAQCBleHRlcm4gdm9pZCBleHBhbmRf U0hVRkZMRVZFQ1RPUiAoaW50ZXJuYWxfZm4sIGdjYWxsICopOwogZXh0ZXJuIHZvaWQgZXhw YW5kX1NQQUNFU0hJUCAoaW50ZXJuYWxfZm4sIGdjYWxsICopOwogZXh0ZXJuIHZvaWQgZXhw YW5kX1RSQVAgKGludGVybmFsX2ZuLCBnY2FsbCAqKTsKIGV4dGVybiB2b2lkIGV4cGFuZF9B U1NVTUUgKGludGVybmFsX2ZuLCBnY2FsbCAqKTsKK2V4dGVybiB2b2lkIGV4cGFuZF9NQVNL X0NBTEwgKGludGVybmFsX2ZuLCBnY2FsbCAqKTsKIAogZXh0ZXJuIGJvb2wgdmVjdG9yaXpl ZF9pbnRlcm5hbF9mbl9zdXBwb3J0ZWRfcCAoaW50ZXJuYWxfZm4sIHRyZWUpOwogCmRpZmYg LS1naXQgYS9nY2Mvb21wLXNpbWQtY2xvbmUuY2MgYi9nY2Mvb21wLXNpbWQtY2xvbmUuY2MK aW5kZXggMjFkNjlhYTg3NDcuLmFmYjdkOTk3NDdiIDEwMDY0NAotLS0gYS9nY2Mvb21wLXNp bWQtY2xvbmUuY2MKKysrIGIvZ2NjL29tcC1zaW1kLWNsb25lLmNjCkBAIC05MzcsNiArOTM3 LDcgQEAgc2ltZF9jbG9uZV9hZGp1c3RfYXJndW1lbnRfdHlwZXMgKHN0cnVjdCBjZ3JhcGhf bm9kZSAqbm9kZSkKIAl9CiAgICAgICBzYy0+YXJnc1tpXS5vcmlnX3R5cGUgPSBiYXNlX3R5 cGU7CiAgICAgICBzYy0+YXJnc1tpXS5hcmdfdHlwZSA9IFNJTURfQ0xPTkVfQVJHX1RZUEVf TUFTSzsKKyAgICAgIHNjLT5hcmdzW2ldLnZlY3Rvcl90eXBlID0gYWRqLnR5cGU7CiAgICAg fQogCiAgIGlmIChub2RlLT5kZWZpbml0aW9uKQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC92ZWN0LXNpbWQtY2xvbmUtMTYuYyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvdmVjdC1zaW1kLWNsb25lLTE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLmZmYWFiYjMwZDFlCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXNpbWQtY2xvbmUtMTYuYwpAQCAtMCwwICsxLDg5 IEBACisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X3NpbWRfY2xvbmVz IH0gKi8KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZm9wZW5tcC1zaW1kIC1mZHVt cC10cmVlLW9wdGltaXplZCIgfSAqLworLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1t YXZ4IiB7IHRhcmdldCBhdnhfcnVudGltZSB9IH0gKi8KKworLyogVGVzdCB0aGF0IHNpbWQg aW5icmFuY2ggY2xvbmVzIHdvcmsgY29ycmVjdGx5LiAgKi8KKworI2lmbmRlZiBUWVBFCisj ZGVmaW5lIFRZUEUgaW50CisjZW5kaWYKKworLyogQSBzaW1wbGUgZnVuY3Rpb24gdGhhdCB3 aWxsIGJlIGNsb25lZC4gICovCisjcHJhZ21hIG9tcCBkZWNsYXJlIHNpbWQKK1RZUEUgX19h dHRyaWJ1dGVfXygobm9pbmxpbmUpKQorZm9vIChUWVBFIGEpCit7CisgIHJldHVybiBhICsg MTsKK30KKworLyogQ2hlY2sgdGhhdCAiaW5icmFuY2giIGNsb25lcyBhcmUgY2FsbGVkIGNv cnJlY3RseS4gICovCisKK3ZvaWQgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQorbWFza2Vk IChUWVBFICogX19yZXN0cmljdCBhLCBUWVBFICogX19yZXN0cmljdCBiLCBpbnQgc2l6ZSkK K3sKKyAgI3ByYWdtYSBvbXAgc2ltZAorICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkr KykKKyAgICBiW2ldID0gYVtpXTwxID8gZm9vKGFbaV0pIDogYVtpXTsKK30KKworLyogQ2hl Y2sgdGhhdCAiaW5icmFuY2giIHdvcmtzIHdoZW4gdGhlcmUgbWlnaHQgYmUgdW5yb2xsaW5n LiAgKi8KKwordm9pZCBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCittYXNrZWRfZml4ZWQg KFRZUEUgKiBfX3Jlc3RyaWN0IGEsIFRZUEUgKiBfX3Jlc3RyaWN0IGIpCit7CisgICNwcmFn bWEgb21wIHNpbWQKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMjg7IGkrKykKKyAgICBiW2ld ID0gYVtpXTwxID8gZm9vKGFbaV0pIDogYVtpXTsKK30KKworLyogVmFsaWRhdGUgdGhlIG91 dHB1dHMuICAqLworCit2b2lkCitjaGVja19tYXNrZWQgKFRZUEUgKmIsIGludCBzaXplKQor eworICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICBpZiAoKChUWVBFKWkg PCAxICYmIGJbaV0gIT0gKFRZUEUpKGkgKyAxKSkKKwl8fCAoKFRZUEUpaSA+PSAxICYmIGJb aV0gIT0gKFRZUEUpaSkpCisgICAgICB7CisJX19idWlsdGluX3ByaW50ZiAoImVycm9yIGF0 ICVkXG4iLCBpKTsKKwlfX2J1aWx0aW5fZXhpdCAoMSk7CisgICAgICB9Cit9CisKK2ludAor bWFpbiAoKQoreworICBUWVBFIGFbMTAyNF07CisgIFRZUEUgYlsxMDI0XTsKKworICBmb3Ig KGludCBpID0gMDsgaSA8IDEwMjQ7IGkrKykKKyAgICBhW2ldID0gaTsKKworICBtYXNrZWRf Zml4ZWQgKGEsIGIpOworICBjaGVja19tYXNrZWQgKGIsIDEyOCk7CisKKyAgLyogVGVzdCB2 YXJpb3VzIHNpemVzIHRvIGNvdmVyIG1hY2hpbmVzIHdpdGggZGlmZmVyZW50IHZlY3Rvcml6 YXRpb24KKyAgICAgZmFjdG9ycy4gICovCisgIGZvciAoaW50IHNpemUgPSA4OyBzaXplIDw9 IDEwMjQ7IHNpemUgKj0gMikKKyAgICB7CisgICAgICBtYXNrZWQgKGEsIGIsIHNpemUpOwor ICAgICAgY2hlY2tfbWFza2VkIChiLCBzaXplKTsKKyAgICB9CisKKyAgLyogVGVzdCBzaXpl cyB0aGF0IG1pZ2h0IGV4ZXJjaXNlIHRoZSBwYXJ0aWFsIHZlY3RvciBjb2RlLXBhdGguICAq LworICBmb3IgKGludCBzaXplID0gODsgc2l6ZSA8PSAxMDI0OyBzaXplICo9IDIpCisgICAg eworICAgICAgbWFza2VkIChhLCBiLCBzaXplLTQpOworICAgICAgY2hlY2tfbWFza2VkIChi LCBzaXplLTQpOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworLyogRW5zdXJlIHRoZSB0 aGUgaW4tYnJhbmNoIHNpbWQgY2xvbmVzIGFyZSB1c2VkIG9uIHRhcmdldHMgdGhhdCBzdXBw b3J0CisgICB0aGVtLiAgVGhlc2UgY291bnRzIGluY2x1ZGUgYWxsIGNhbGwgYW5kIGRlZmlu aXRpb25zLiAgKi8KKworLyogeyBkZy1za2lwLWlmICIiIHsgeDg2XzY0LSotKiB9IHsgIi1m bHRvIiB9IHsgIiIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgInNpbWRjbG9uZSIgMTggIm9wdGltaXplZCIgeyB0YXJnZXQgeDg2XzY0LSotKiB9IH0g fSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzaW1kY2xvbmUi IDcgIm9wdGltaXplZCIgeyB0YXJnZXQgYW1kZ2NuLSotKiB9IH0gfSAqLworLyogVE9ETzog YWFyY2g2NCAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0 LXNpbWQtY2xvbmUtMTZiLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3Qtc2lt ZC1jbG9uZS0xNmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u YTUwM2VmODUyMzgKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92 ZWN0L3ZlY3Qtc2ltZC1jbG9uZS0xNmIuYwpAQCAtMCwwICsxLDE0IEBACisvKiB7IGRnLXJl cXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X3NpbWRfY2xvbmVzIH0gKi8KKy8qIHsgZGct YWRkaXRpb25hbC1vcHRpb25zICItZm9wZW5tcC1zaW1kIC1mZHVtcC10cmVlLW9wdGltaXpl ZCIgfSAqLworLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1tYXZ4IiB7IHRhcmdldCBh dnhfcnVudGltZSB9IH0gKi8KKworI2RlZmluZSBUWVBFIGZsb2F0CisjaW5jbHVkZSAidmVj dC1zaW1kLWNsb25lLTE2LmMiCisKKy8qIEVuc3VyZSB0aGUgdGhlIGluLWJyYW5jaCBzaW1k IGNsb25lcyBhcmUgdXNlZCBvbiB0YXJnZXRzIHRoYXQgc3VwcG9ydAorICAgdGhlbS4gIFRo ZXNlIGNvdW50cyBpbmNsdWRlIGFsbCBjYWxsIGFuZCBkZWZpbml0aW9ucy4gICovCisKKy8q IHsgZGctc2tpcC1pZiAiIiB7IHg4Nl82NC0qLSogfSB7ICItZmx0byIgfSB7ICIiIH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzaW1kY2xvbmUiIDE5 ICJvcHRpbWl6ZWQiIHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAic2ltZGNsb25lIiA3ICJvcHRpbWl6ZWQiIHsg dGFyZ2V0IGFtZGdjbi0qLSogfSB9IH0gKi8KKy8qIFRPRE86IGFhcmNoNjQgKi8KZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1zaW1kLWNsb25lLTE2Yy5j IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXNpbWQtY2xvbmUtMTZjLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY1NjM4NzlkZjcxCi0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXNpbWQtY2xv bmUtMTZjLmMKQEAgLTAsMCArMSwxNiBAQAorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10 YXJnZXQgdmVjdF9zaW1kX2Nsb25lcyB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9u cyAiLWZvcGVubXAtc2ltZCAtZmR1bXAtdHJlZS1vcHRpbWl6ZWQiIH0gKi8KKy8qIHsgZGct YWRkaXRpb25hbC1vcHRpb25zICItbWF2eCIgeyB0YXJnZXQgYXZ4X3J1bnRpbWUgfSB9ICov CisKKyNkZWZpbmUgVFlQRSBzaG9ydAorI2luY2x1ZGUgInZlY3Qtc2ltZC1jbG9uZS0xNi5j IgorCisvKiBFbnN1cmUgdGhlIHRoZSBpbi1icmFuY2ggc2ltZCBjbG9uZXMgYXJlIHVzZWQg b24gdGFyZ2V0cyB0aGF0IHN1cHBvcnQKKyAgIHRoZW0uICBUaGVzZSBjb3VudHMgaW5jbHVk ZSBhbGwgY2FsbCBhbmQgZGVmaW5pdGlvbnMuICAqLworCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAtdGltZXMgInNpbWRjbG9uZSIgNyAib3B0aW1pemVkIiB7IHRhcmdldCBh bWRnY24tKi0qIH0gfSB9ICovCisvKiBUT0RPOiBhYXJjaDY0ICovCisKKy8qIEZhaWxzIHRv IHVzZSBpbi1icmFuY2ggY2xvbmVzIGZvciBUWVBFPXNob3J0LiAgKi8KKy8qIHsgZGctc2tp cC1pZiAiIiB7IHg4Nl82NC0qLSogfSB7ICItZmx0byIgfSB7ICIiIH0gfSAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzaW1kY2xvbmUiIDE2ICJvcHRpbWl6 ZWQiIHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1zaW1kLWNsb25lLTE2ZC5jIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC92ZWN0LXNpbWQtY2xvbmUtMTZkLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZjNWU2OTQ4MmU1Ci0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXNpbWQtY2xvbmUtMTZkLmMKQEAgLTAs MCArMSwxNiBAQAorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9zaW1k X2Nsb25lcyB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLWZvcGVubXAtc2lt ZCAtZmR1bXAtdHJlZS1vcHRpbWl6ZWQiIH0gKi8KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRp b25zICItbWF2eCIgeyB0YXJnZXQgYXZ4X3J1bnRpbWUgfSB9ICovCisKKyNkZWZpbmUgVFlQ RSBjaGFyCisjaW5jbHVkZSAidmVjdC1zaW1kLWNsb25lLTE2LmMiCisKKy8qIEVuc3VyZSB0 aGUgdGhlIGluLWJyYW5jaCBzaW1kIGNsb25lcyBhcmUgdXNlZCBvbiB0YXJnZXRzIHRoYXQg c3VwcG9ydAorICAgdGhlbS4gIFRoZXNlIGNvdW50cyBpbmNsdWRlIGFsbCBjYWxsIGFuZCBk ZWZpbml0aW9ucy4gICovCisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1l cyAic2ltZGNsb25lIiA3ICJvcHRpbWl6ZWQiIHsgdGFyZ2V0IGFtZGdjbi0qLSogfSB9IH0g Ki8KKy8qIFRPRE86IGFhcmNoNjQgKi8KKworLyogRmFpbHMgdG8gdXNlIGluLWJyYW5jaCBj bG9uZXMgZm9yIFRZUEU9Y2hhci4gICovCisvKiB7IGRnLXNraXAtaWYgIiIgeyB4ODZfNjQt Ki0qIH0geyAiLWZsdG8iIH0geyAiIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcC10aW1lcyAic2ltZGNsb25lIiAxNiAib3B0aW1pemVkIiB7IHRhcmdldCB4ODZf NjQtKi0qIH0gfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3Qtc2ltZC1jbG9uZS0xNmUuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVj dC1zaW1kLWNsb25lLTE2ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi42NjkwODQ0ZGVhZQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvdmVjdC1zaW1kLWNsb25lLTE2ZS5jCkBAIC0wLDAgKzEsMTQgQEAKKy8qIHsg ZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rfc2ltZF9jbG9uZXMgfSAqLworLyog eyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1mb3Blbm1wLXNpbWQgLWZkdW1wLXRyZWUtb3B0 aW1pemVkIiB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLW1hdngiIHsgdGFy Z2V0IGF2eF9ydW50aW1lIH0gfSAqLworCisjZGVmaW5lIFRZUEUgZG91YmxlCisjaW5jbHVk ZSAidmVjdC1zaW1kLWNsb25lLTE2LmMiCisKKy8qIEVuc3VyZSB0aGUgdGhlIGluLWJyYW5j aCBzaW1kIGNsb25lcyBhcmUgdXNlZCBvbiB0YXJnZXRzIHRoYXQgc3VwcG9ydAorICAgdGhl bS4gIFRoZXNlIGNvdW50cyBpbmNsdWRlIGFsbCBjYWxsIGFuZCBkZWZpbml0aW9ucy4gICov CisKKy8qIHsgZGctc2tpcC1pZiAiIiB7IHg4Nl82NC0qLSogfSB7ICItZmx0byIgfSB7ICIi IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzaW1kY2xv bmUiIDE5ICJvcHRpbWl6ZWQiIHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAic2ltZGNsb25lIiA3ICJvcHRpbWl6 ZWQiIHsgdGFyZ2V0IGFtZGdjbi0qLSogfSB9IH0gKi8KKy8qIFRPRE86IGFhcmNoNjQgKi8K ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1zaW1kLWNsb25l LTE2Zi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXNpbWQtY2xvbmUtMTZm LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU3YjM1YTZhMmRj Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXNp bWQtY2xvbmUtMTZmLmMKQEAgLTAsMCArMSwxNiBAQAorLyogeyBkZy1yZXF1aXJlLWVmZmVj dGl2ZS10YXJnZXQgdmVjdF9zaW1kX2Nsb25lcyB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwt b3B0aW9ucyAiLWZvcGVubXAtc2ltZCAtZmR1bXAtdHJlZS1vcHRpbWl6ZWQiIH0gKi8KKy8q IHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItbWF2eCIgeyB0YXJnZXQgYXZ4X3J1bnRpbWUg fSB9ICovCisKKyNkZWZpbmUgVFlQRSBfX0lOVDY0X1RZUEVfXworI2luY2x1ZGUgInZlY3Qt c2ltZC1jbG9uZS0xNi5jIgorCisvKiBFbnN1cmUgdGhlIHRoZSBpbi1icmFuY2ggc2ltZCBj bG9uZXMgYXJlIHVzZWQgb24gdGFyZ2V0cyB0aGF0IHN1cHBvcnQKKyAgIHRoZW0uICBUaGVz ZSBjb3VudHMgaW5jbHVkZSBhbGwgY2FsbCBhbmQgZGVmaW5pdGlvbnMuICAqLworCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInNpbWRjbG9uZSIgNyAib3B0aW1p emVkIiB7IHRhcmdldCBhbWRnY24tKi0qIH0gfSB9ICovCisvKiBUT0RPOiBhYXJjaDY0ICov CisKKy8qIEZhaWxzIHRvIHVzZSBpbi1icmFuY2ggY2xvbmVzIGZvciBUWVBFPWludDY0LiAg Ki8KKy8qIHsgZGctc2tpcC1pZiAiIiB7IHg4Nl82NC0qLSogfSB7ICItZmx0byIgfSB7ICIi IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzaW1kY2xv bmUiIDE4ICJvcHRpbWl6ZWQiIHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9IH0gKi8KZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1zaW1kLWNsb25lLTE3LmMg Yi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3Qtc2ltZC1jbG9uZS0xNy5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42ZjVkMzc0YTQxNwotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1zaW1kLWNsb25l LTE3LmMKQEAgLTAsMCArMSw4OSBAQAorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJn ZXQgdmVjdF9zaW1kX2Nsb25lcyB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAi LWZvcGVubXAtc2ltZCAtZmR1bXAtdHJlZS1vcHRpbWl6ZWQiIH0gKi8KKy8qIHsgZGctYWRk aXRpb25hbC1vcHRpb25zICItbWF2eCIgeyB0YXJnZXQgYXZ4X3J1bnRpbWUgfSB9ICovCisK Ky8qIFRlc3QgdGhhdCBzaW1kIGluYnJhbmNoIGNsb25lcyB3b3JrIGNvcnJlY3RseS4gICov CisKKyNpZm5kZWYgVFlQRQorI2RlZmluZSBUWVBFIGludAorI2VuZGlmCisKKy8qIEEgc2lt cGxlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjbG9uZWQuICAqLworI3ByYWdtYSBvbXAgZGVj bGFyZSBzaW1kIHVuaWZvcm0oYikKK1RZUEUgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQor Zm9vIChUWVBFIGEsIFRZUEUgYikKK3sKKyAgcmV0dXJuIGEgKyBiOworfQorCisvKiBDaGVj ayB0aGF0ICJpbmJyYW5jaCIgY2xvbmVzIGFyZSBjYWxsZWQgY29ycmVjdGx5LiAgKi8KKwor dm9pZCBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCittYXNrZWQgKFRZUEUgKiBfX3Jlc3Ry aWN0IGEsIFRZUEUgKiBfX3Jlc3RyaWN0IGIsIGludCBzaXplKQoreworICAjcHJhZ21hIG9t cCBzaW1kCisgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgIGJbaV0gPSBh W2ldPDEgPyBmb28oYVtpXSwgMSkgOiBhW2ldOworfQorCisvKiBDaGVjayB0aGF0ICJpbmJy YW5jaCIgd29ya3Mgd2hlbiB0aGVyZSBtaWdodCBiZSB1bnJvbGxpbmcuICAqLworCit2b2lk IF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKK21hc2tlZF9maXhlZCAoVFlQRSAqIF9fcmVz dHJpY3QgYSwgVFlQRSAqIF9fcmVzdHJpY3QgYikKK3sKKyAgI3ByYWdtYSBvbXAgc2ltZAor ICBmb3IgKGludCBpID0gMDsgaSA8IDEyODsgaSsrKQorICAgIGJbaV0gPSBhW2ldPDEgPyBm b28oYVtpXSwgMSkgOiBhW2ldOworfQorCisvKiBWYWxpZGF0ZSB0aGUgb3V0cHV0cy4gICov CisKK3ZvaWQKK2NoZWNrX21hc2tlZCAoVFlQRSAqYiwgaW50IHNpemUpCit7CisgIGZvciAo aW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgIGlmICgoKFRZUEUpaSA8IDEgJiYgYltp XSAhPSAoVFlQRSkoaSArIDEpKQorCXx8ICgoVFlQRSlpID49IDEgJiYgYltpXSAhPSAoVFlQ RSlpKSkKKyAgICAgIHsKKwlfX2J1aWx0aW5fcHJpbnRmICgiZXJyb3IgYXQgJWRcbiIsIGkp OworCV9fYnVpbHRpbl9leGl0ICgxKTsKKyAgICAgIH0KK30KKworaW50CittYWluICgpCit7 CisgIFRZUEUgYVsxMDI0XTsKKyAgVFlQRSBiWzEwMjRdOworCisgIGZvciAoaW50IGkgPSAw OyBpIDwgMTAyNDsgaSsrKQorICAgIGFbaV0gPSBpOworCisgIG1hc2tlZF9maXhlZCAoYSwg Yik7CisgIGNoZWNrX21hc2tlZCAoYiwgMTI4KTsKKworICAvKiBUZXN0IHZhcmlvdXMgc2l6 ZXMgdG8gY292ZXIgbWFjaGluZXMgd2l0aCBkaWZmZXJlbnQgdmVjdG9yaXphdGlvbgorICAg ICBmYWN0b3JzLiAgKi8KKyAgZm9yIChpbnQgc2l6ZSA9IDg7IHNpemUgPD0gMTAyNDsgc2l6 ZSAqPSAyKQorICAgIHsKKyAgICAgIG1hc2tlZCAoYSwgYiwgc2l6ZSk7CisgICAgICBjaGVj a19tYXNrZWQgKGIsIHNpemUpOworICAgIH0KKworICAvKiBUZXN0IHNpemVzIHRoYXQgbWln aHQgZXhlcmNpc2UgdGhlIHBhcnRpYWwgdmVjdG9yIGNvZGUtcGF0aC4gICovCisgIGZvciAo aW50IHNpemUgPSA4OyBzaXplIDw9IDEwMjQ7IHNpemUgKj0gMikKKyAgICB7CisgICAgICBt YXNrZWQgKGEsIGIsIHNpemUtNCk7CisgICAgICBjaGVja19tYXNrZWQgKGIsIHNpemUtNCk7 CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBFbnN1cmUgdGhlIHRoZSBpbi1icmFu Y2ggc2ltZCBjbG9uZXMgYXJlIHVzZWQgb24gdGFyZ2V0cyB0aGF0IHN1cHBvcnQKKyAgIHRo ZW0uICBUaGVzZSBjb3VudHMgaW5jbHVkZSBhbGwgY2FsbCBhbmQgZGVmaW5pdGlvbnMuICAq LworCisvKiB7IGRnLXNraXAtaWYgIiIgeyB4ODZfNjQtKi0qIH0geyAiLWZsdG8iIH0geyAi IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAic2ltZGNs b25lIiAxOCAib3B0aW1pemVkIiB7IHRhcmdldCB4ODZfNjQtKi0qIH0gfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInNpbWRjbG9uZSIgNiAib3B0aW1p emVkIiB7IHRhcmdldCBhbWRnY24tKi0qIH0gfSB9ICovCisvKiBUT0RPOiBhYXJjaDY0ICov CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3Qtc2ltZC1jbG9u ZS0xN2IuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1zaW1kLWNsb25lLTE3 Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZTJjM2FiMTFi MwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1z aW1kLWNsb25lLTE3Yi5jCkBAIC0wLDAgKzEsMTQgQEAKKy8qIHsgZGctcmVxdWlyZS1lZmZl Y3RpdmUtdGFyZ2V0IHZlY3Rfc2ltZF9jbG9uZXMgfSAqLworLyogeyBkZy1hZGRpdGlvbmFs LW9wdGlvbnMgIi1mb3Blbm1wLXNpbWQgLWZkdW1wLXRyZWUtb3B0aW1pemVkIiB9ICovCisv KiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLW1hdngiIHsgdGFyZ2V0IGF2eF9ydW50aW1l IH0gfSAqLworCisjZGVmaW5lIFRZUEUgZmxvYXQKKyNpbmNsdWRlICJ2ZWN0LXNpbWQtY2xv bmUtMTcuYyIKKworLyogRW5zdXJlIHRoZSB0aGUgaW4tYnJhbmNoIHNpbWQgY2xvbmVzIGFy ZSB1c2VkIG9uIHRhcmdldHMgdGhhdCBzdXBwb3J0CisgICB0aGVtLiAgVGhlc2UgY291bnRz IGluY2x1ZGUgYWxsIGNhbGwgYW5kIGRlZmluaXRpb25zLiAgKi8KKworLyogeyBkZy1za2lw LWlmICIiIHsgeDg2XzY0LSotKiB9IHsgIi1mbHRvIiB9IHsgIiIgfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInNpbWRjbG9uZSIgMTkgIm9wdGltaXpl ZCIgeyB0YXJnZXQgeDg2XzY0LSotKiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4t dHJlZS1kdW1wLXRpbWVzICJzaW1kY2xvbmUiIDYgIm9wdGltaXplZCIgeyB0YXJnZXQgYW1k Z2NuLSotKiB9IH0gfSAqLworLyogVE9ETzogYWFyY2g2NCAqLwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXNpbWQtY2xvbmUtMTdjLmMgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3Qtc2ltZC1jbG9uZS0xN2MuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDA3MDAxZGU2NjkKLS0tIC9kZXYvbnVsbAor KysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3Qtc2ltZC1jbG9uZS0xN2MuYwpA QCAtMCwwICsxLDE2IEBACisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0 X3NpbWRfY2xvbmVzIH0gKi8KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZm9wZW5t cC1zaW1kIC1mZHVtcC10cmVlLW9wdGltaXplZCIgfSAqLworLyogeyBkZy1hZGRpdGlvbmFs LW9wdGlvbnMgIi1tYXZ4IiB7IHRhcmdldCBhdnhfcnVudGltZSB9IH0gKi8KKworI2RlZmlu ZSBUWVBFIHNob3J0CisjaW5jbHVkZSAidmVjdC1zaW1kLWNsb25lLTE3LmMiCisKKy8qIEVu c3VyZSB0aGUgdGhlIGluLWJyYW5jaCBzaW1kIGNsb25lcyBhcmUgdXNlZCBvbiB0YXJnZXRz IHRoYXQgc3VwcG9ydAorICAgdGhlbS4gIFRoZXNlIGNvdW50cyBpbmNsdWRlIGFsbCBjYWxs IGFuZCBkZWZpbml0aW9ucy4gICovCisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC10aW1lcyAic2ltZGNsb25lIiA2ICJvcHRpbWl6ZWQiIHsgdGFyZ2V0IGFtZGdjbi0qLSog fSB9IH0gKi8KKy8qIFRPRE86IGFhcmNoNjQgKi8KKworLyogRmFpbHMgdG8gdXNlIGluLWJy YW5jaCBjbG9uZXMgZm9yIFRZUEU9c2hvcnQuICAqLworLyogeyBkZy1za2lwLWlmICIiIHsg eDg2XzY0LSotKiB9IHsgIi1mbHRvIiB9IHsgIiIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgInNpbWRjbG9uZSIgMTYgIm9wdGltaXplZCIgeyB0YXJn ZXQgeDg2XzY0LSotKiB9IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdmVjdC92ZWN0LXNpbWQtY2xvbmUtMTdkLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92 ZWN0L3ZlY3Qtc2ltZC1jbG9uZS0xN2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uYWJiODVhNGNlZWUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3Qtc2ltZC1jbG9uZS0xN2QuYwpAQCAtMCwwICsxLDE2IEBA CisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X3NpbWRfY2xvbmVzIH0g Ki8KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZm9wZW5tcC1zaW1kIC1mZHVtcC10 cmVlLW9wdGltaXplZCIgfSAqLworLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1tYXZ4 IiB7IHRhcmdldCBhdnhfcnVudGltZSB9IH0gKi8KKworI2RlZmluZSBUWVBFIGNoYXIKKyNp bmNsdWRlICJ2ZWN0LXNpbWQtY2xvbmUtMTcuYyIKKworLyogRW5zdXJlIHRoZSB0aGUgaW4t YnJhbmNoIHNpbWQgY2xvbmVzIGFyZSB1c2VkIG9uIHRhcmdldHMgdGhhdCBzdXBwb3J0Cisg ICB0aGVtLiAgVGhlc2UgY291bnRzIGluY2x1ZGUgYWxsIGNhbGwgYW5kIGRlZmluaXRpb25z LiAgKi8KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzaW1kY2xv bmUiIDYgIm9wdGltaXplZCIgeyB0YXJnZXQgYW1kZ2NuLSotKiB9IH0gfSAqLworLyogVE9E TzogYWFyY2g2NCAqLworCisvKiBGYWlscyB0byB1c2UgaW4tYnJhbmNoIGNsb25lcyBmb3Ig VFlQRT1jaGFyLiAgKi8KKy8qIHsgZGctc2tpcC1pZiAiIiB7IHg4Nl82NC0qLSogfSB7ICIt Zmx0byIgfSB7ICIiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRp bWVzICJzaW1kY2xvbmUiIDE2ICJvcHRpbWl6ZWQiIHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9 IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1zaW1k LWNsb25lLTE3ZS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXNpbWQtY2xv bmUtMTdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJjMWQ4 YTY1OWJkCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92 ZWN0LXNpbWQtY2xvbmUtMTdlLmMKQEAgLTAsMCArMSwxNCBAQAorLyogeyBkZy1yZXF1aXJl LWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9zaW1kX2Nsb25lcyB9ICovCisvKiB7IGRnLWFkZGl0 aW9uYWwtb3B0aW9ucyAiLWZvcGVubXAtc2ltZCAtZmR1bXAtdHJlZS1vcHRpbWl6ZWQiIH0g Ki8KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItbWF2eCIgeyB0YXJnZXQgYXZ4X3J1 bnRpbWUgfSB9ICovCisKKyNkZWZpbmUgVFlQRSBkb3VibGUKKyNpbmNsdWRlICJ2ZWN0LXNp bWQtY2xvbmUtMTcuYyIKKworLyogRW5zdXJlIHRoZSB0aGUgaW4tYnJhbmNoIHNpbWQgY2xv bmVzIGFyZSB1c2VkIG9uIHRhcmdldHMgdGhhdCBzdXBwb3J0CisgICB0aGVtLiAgVGhlc2Ug Y291bnRzIGluY2x1ZGUgYWxsIGNhbGwgYW5kIGRlZmluaXRpb25zLiAgKi8KKworLyogeyBk Zy1za2lwLWlmICIiIHsgeDg2XzY0LSotKiB9IHsgIi1mbHRvIiB9IHsgIiIgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInNpbWRjbG9uZSIgMTkgIm9w dGltaXplZCIgeyB0YXJnZXQgeDg2XzY0LSotKiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzaW1kY2xvbmUiIDYgIm9wdGltaXplZCIgeyB0YXJn ZXQgYW1kZ2NuLSotKiB9IH0gfSAqLworLyogVE9ETzogYWFyY2g2NCAqLwpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXNpbWQtY2xvbmUtMTdmLmMgYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3Qtc2ltZC1jbG9uZS0xN2YuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTgyZTY5MDMwNGYKLS0tIC9kZXYv bnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3Qtc2ltZC1jbG9uZS0x N2YuYwpAQCAtMCwwICsxLDE2IEBACisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdl dCB2ZWN0X3NpbWRfY2xvbmVzIH0gKi8KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICIt Zm9wZW5tcC1zaW1kIC1mZHVtcC10cmVlLW9wdGltaXplZCIgfSAqLworLyogeyBkZy1hZGRp dGlvbmFsLW9wdGlvbnMgIi1tYXZ4IiB7IHRhcmdldCBhdnhfcnVudGltZSB9IH0gKi8KKwor I2RlZmluZSBUWVBFIF9fSU5UNjRfVFlQRV9fCisjaW5jbHVkZSAidmVjdC1zaW1kLWNsb25l LTE3LmMiCisKKy8qIEVuc3VyZSB0aGUgdGhlIGluLWJyYW5jaCBzaW1kIGNsb25lcyBhcmUg dXNlZCBvbiB0YXJnZXRzIHRoYXQgc3VwcG9ydAorICAgdGhlbS4gIFRoZXNlIGNvdW50cyBp bmNsdWRlIGFsbCBjYWxsIGFuZCBkZWZpbml0aW9ucy4gICovCisKKy8qIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAic2ltZGNsb25lIiA2ICJvcHRpbWl6ZWQiIHsgdGFy Z2V0IGFtZGdjbi0qLSogfSB9IH0gKi8KKy8qIFRPRE86IGFhcmNoNjQgKi8KKworLyogRmFp bHMgdG8gdXNlIGluLWJyYW5jaCBjbG9uZXMgZm9yIFRZUEU9aW50NjQuICAqLworLyogeyBk Zy1za2lwLWlmICIiIHsgeDg2XzY0LSotKiB9IHsgIi1mbHRvIiB9IHsgIiIgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInNpbWRjbG9uZSIgMTggIm9w dGltaXplZCIgeyB0YXJnZXQgeDg2XzY0LSotKiB9IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXNpbWQtY2xvbmUtMTguYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1zaW1kLWNsb25lLTE4LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc1MGEzZjkyYjYyCi0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXNpbWQtY2xvbmUtMTguYwpAQCAt MCwwICsxLDg5IEBACisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X3Np bWRfY2xvbmVzIH0gKi8KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZm9wZW5tcC1z aW1kIC1mZHVtcC10cmVlLW9wdGltaXplZCIgfSAqLworLyogeyBkZy1hZGRpdGlvbmFsLW9w dGlvbnMgIi1tYXZ4IiB7IHRhcmdldCBhdnhfcnVudGltZSB9IH0gKi8KKworLyogVGVzdCB0 aGF0IHNpbWQgaW5icmFuY2ggY2xvbmVzIHdvcmsgY29ycmVjdGx5LiAgKi8KKworI2lmbmRl ZiBUWVBFCisjZGVmaW5lIFRZUEUgaW50CisjZW5kaWYKKworLyogQSBzaW1wbGUgZnVuY3Rp b24gdGhhdCB3aWxsIGJlIGNsb25lZC4gICovCisjcHJhZ21hIG9tcCBkZWNsYXJlIHNpbWQg dW5pZm9ybShiKQorVFlQRSBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCitmb28gKFRZUEUg YiwgVFlQRSBhKQoreworICByZXR1cm4gYSArIGI7Cit9CisKKy8qIENoZWNrIHRoYXQgImlu YnJhbmNoIiBjbG9uZXMgYXJlIGNhbGxlZCBjb3JyZWN0bHkuICAqLworCit2b2lkIF9fYXR0 cmlidXRlX18oKG5vaW5saW5lKSkKK21hc2tlZCAoVFlQRSAqIF9fcmVzdHJpY3QgYSwgVFlQ RSAqIF9fcmVzdHJpY3QgYiwgaW50IHNpemUpCit7CisgICNwcmFnbWEgb21wIHNpbWQKKyAg Zm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgYltpXSA9IGFbaV08MSA/IGZv bygxLCBhW2ldKSA6IGFbaV07Cit9CisKKy8qIENoZWNrIHRoYXQgImluYnJhbmNoIiB3b3Jr cyB3aGVuIHRoZXJlIG1pZ2h0IGJlIHVucm9sbGluZy4gICovCisKK3ZvaWQgX19hdHRyaWJ1 dGVfXygobm9pbmxpbmUpKQorbWFza2VkX2ZpeGVkIChUWVBFICogX19yZXN0cmljdCBhLCBU WVBFICogX19yZXN0cmljdCBiKQoreworICAjcHJhZ21hIG9tcCBzaW1kCisgIGZvciAoaW50 IGkgPSAwOyBpIDwgMTI4OyBpKyspCisgICAgYltpXSA9IGFbaV08MSA/IGZvbygxLCBhW2ld KSA6IGFbaV07Cit9CisKKy8qIFZhbGlkYXRlIHRoZSBvdXRwdXRzLiAgKi8KKwordm9pZAor Y2hlY2tfbWFza2VkIChUWVBFICpiLCBpbnQgc2l6ZSkKK3sKKyAgZm9yIChpbnQgaSA9IDA7 IGkgPCBzaXplOyBpKyspCisgICAgaWYgKCgoVFlQRSlpIDwgMSAmJiBiW2ldICE9IChUWVBF KShpICsgMSkpCisJfHwgKChUWVBFKWkgPj0gMSAmJiBiW2ldICE9IChUWVBFKWkpKQorICAg ICAgeworCV9fYnVpbHRpbl9wcmludGYgKCJlcnJvciBhdCAlZFxuIiwgaSk7CisJX19idWls dGluX2V4aXQgKDEpOworICAgICAgfQorfQorCitpbnQKK21haW4gKCkKK3sKKyAgVFlQRSBh WzEwMjRdOworICBUWVBFIGJbMTAyNF07CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDI0 OyBpKyspCisgICAgYVtpXSA9IGk7CisKKyAgbWFza2VkX2ZpeGVkIChhLCBiKTsKKyAgY2hl Y2tfbWFza2VkIChiLCAxMjgpOworCisgIC8qIFRlc3QgdmFyaW91cyBzaXplcyB0byBjb3Zl ciBtYWNoaW5lcyB3aXRoIGRpZmZlcmVudCB2ZWN0b3JpemF0aW9uCisgICAgIGZhY3RvcnMu ICAqLworICBmb3IgKGludCBzaXplID0gODsgc2l6ZSA8PSAxMDI0OyBzaXplICo9IDIpCisg ICAgeworICAgICAgbWFza2VkIChhLCBiLCBzaXplKTsKKyAgICAgIGNoZWNrX21hc2tlZCAo Yiwgc2l6ZSk7CisgICAgfQorCisgIC8qIFRlc3Qgc2l6ZXMgdGhhdCBtaWdodCBleGVyY2lz ZSB0aGUgcGFydGlhbCB2ZWN0b3IgY29kZS1wYXRoLiAgKi8KKyAgZm9yIChpbnQgc2l6ZSA9 IDg7IHNpemUgPD0gMTAyNDsgc2l6ZSAqPSAyKQorICAgIHsKKyAgICAgIG1hc2tlZCAoYSwg Yiwgc2l6ZS00KTsKKyAgICAgIGNoZWNrX21hc2tlZCAoYiwgc2l6ZS00KTsKKyAgICB9CisK KyAgcmV0dXJuIDA7Cit9CisKKy8qIEVuc3VyZSB0aGUgdGhlIGluLWJyYW5jaCBzaW1kIGNs b25lcyBhcmUgdXNlZCBvbiB0YXJnZXRzIHRoYXQgc3VwcG9ydAorICAgdGhlbS4gIFRoZXNl IGNvdW50cyBpbmNsdWRlIGFsbCBjYWxsIGFuZCBkZWZpbml0aW9ucy4gICovCisKKy8qIHsg ZGctc2tpcC1pZiAiIiB7IHg4Nl82NC0qLSogfSB7ICItZmx0byIgfSB7ICIiIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzaW1kY2xvbmUiIDE4ICJv cHRpbWl6ZWQiIHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9IH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAic2ltZGNsb25lIiA2ICJvcHRpbWl6ZWQiIHsgdGFy Z2V0IGFtZGdjbi0qLSogfSB9IH0gKi8KKy8qIFRPRE86IGFhcmNoNjQgKi8KZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1zaW1kLWNsb25lLTE4Yi5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXNpbWQtY2xvbmUtMThiLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE3N2NjZjNiZmNjCi0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXNpbWQtY2xvbmUt MThiLmMKQEAgLTAsMCArMSwxNCBAQAorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJn ZXQgdmVjdF9zaW1kX2Nsb25lcyB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAi LWZvcGVubXAtc2ltZCAtZmR1bXAtdHJlZS1vcHRpbWl6ZWQiIH0gKi8KKy8qIHsgZGctYWRk aXRpb25hbC1vcHRpb25zICItbWF2eCIgeyB0YXJnZXQgYXZ4X3J1bnRpbWUgfSB9ICovCisK KyNkZWZpbmUgVFlQRSBmbG9hdAorI2luY2x1ZGUgInZlY3Qtc2ltZC1jbG9uZS0xOC5jIgor CisvKiBFbnN1cmUgdGhlIHRoZSBpbi1icmFuY2ggc2ltZCBjbG9uZXMgYXJlIHVzZWQgb24g dGFyZ2V0cyB0aGF0IHN1cHBvcnQKKyAgIHRoZW0uICBUaGVzZSBjb3VudHMgaW5jbHVkZSBh bGwgY2FsbCBhbmQgZGVmaW5pdGlvbnMuICAqLworCisvKiB7IGRnLXNraXAtaWYgIiIgeyB4 ODZfNjQtKi0qIH0geyAiLWZsdG8iIH0geyAiIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAic2ltZGNsb25lIiAxOSAib3B0aW1pemVkIiB7IHRhcmdl dCB4ODZfNjQtKi0qIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAt dGltZXMgInNpbWRjbG9uZSIgNiAib3B0aW1pemVkIiB7IHRhcmdldCBhbWRnY24tKi0qIH0g fSB9ICovCisvKiBUT0RPOiBhYXJjaDY0ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy5kZy92ZWN0L3ZlY3Qtc2ltZC1jbG9uZS0xOGMuYyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvdmVjdC1zaW1kLWNsb25lLTE4Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi5iZWU1ZjMzOGFiZQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1zaW1kLWNsb25lLTE4Yy5jCkBAIC0wLDAgKzEs MTYgQEAKKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rfc2ltZF9jbG9u ZXMgfSAqLworLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1mb3Blbm1wLXNpbWQgLWZk dW1wLXRyZWUtb3B0aW1pemVkIiB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAi LW1hdngiIHsgdGFyZ2V0IGF2eF9ydW50aW1lIH0gfSAqLworCisjZGVmaW5lIFRZUEUgc2hv cnQKKyNpbmNsdWRlICJ2ZWN0LXNpbWQtY2xvbmUtMTguYyIKKworLyogRW5zdXJlIHRoZSB0 aGUgaW4tYnJhbmNoIHNpbWQgY2xvbmVzIGFyZSB1c2VkIG9uIHRhcmdldHMgdGhhdCBzdXBw b3J0CisgICB0aGVtLiAgVGhlc2UgY291bnRzIGluY2x1ZGUgYWxsIGNhbGwgYW5kIGRlZmlu aXRpb25zLiAgKi8KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJz aW1kY2xvbmUiIDYgIm9wdGltaXplZCIgeyB0YXJnZXQgYW1kZ2NuLSotKiB9IH0gfSAqLwor LyogVE9ETzogYWFyY2g2NCAqLworCisvKiBGYWlscyB0byB1c2UgaW4tYnJhbmNoIGNsb25l cyBmb3IgVFlQRT1zaG9ydC4gICovCisvKiB7IGRnLXNraXAtaWYgIiIgeyB4ODZfNjQtKi0q IH0geyAiLWZsdG8iIH0geyAiIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC10aW1lcyAic2ltZGNsb25lIiAxNiAib3B0aW1pemVkIiB7IHRhcmdldCB4ODZfNjQt Ki0qIH0gfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3Zl Y3Qtc2ltZC1jbG9uZS0xOGQuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1z aW1kLWNsb25lLTE4ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li5hNzQ5ZWRlZmRkNwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3ZlY3QvdmVjdC1zaW1kLWNsb25lLTE4ZC5jCkBAIC0wLDAgKzEsMTYgQEAKKy8qIHsgZGct cmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rfc2ltZF9jbG9uZXMgfSAqLworLyogeyBk Zy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1mb3Blbm1wLXNpbWQgLWZkdW1wLXRyZWUtb3B0aW1p emVkIiB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLW1hdngiIHsgdGFyZ2V0 IGF2eF9ydW50aW1lIH0gfSAqLworCisjZGVmaW5lIFRZUEUgY2hhcgorI2luY2x1ZGUgInZl Y3Qtc2ltZC1jbG9uZS0xOC5jIgorCisvKiBFbnN1cmUgdGhlIHRoZSBpbi1icmFuY2ggc2lt ZCBjbG9uZXMgYXJlIHVzZWQgb24gdGFyZ2V0cyB0aGF0IHN1cHBvcnQKKyAgIHRoZW0uICBU aGVzZSBjb3VudHMgaW5jbHVkZSBhbGwgY2FsbCBhbmQgZGVmaW5pdGlvbnMuICAqLworCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInNpbWRjbG9uZSIgNiAib3B0 aW1pemVkIiB7IHRhcmdldCBhbWRnY24tKi0qIH0gfSB9ICovCisvKiBUT0RPOiBhYXJjaDY0 ICovCisKKy8qIEZhaWxzIHRvIHVzZSBpbi1icmFuY2ggY2xvbmVzIGZvciBUWVBFPWNoYXIu ICAqLworLyogeyBkZy1za2lwLWlmICIiIHsgeDg2XzY0LSotKiB9IHsgIi1mbHRvIiB9IHsg IiIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInNpbWRj bG9uZSIgMTYgIm9wdGltaXplZCIgeyB0YXJnZXQgeDg2XzY0LSotKiB9IH0gfSAqLwpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXNpbWQtY2xvbmUtMThl LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3Qtc2ltZC1jbG9uZS0xOGUuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDYxZTBkYzI2MjEKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3Qtc2ltZC1j bG9uZS0xOGUuYwpAQCAtMCwwICsxLDE0IEBACisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZl LXRhcmdldCB2ZWN0X3NpbWRfY2xvbmVzIH0gKi8KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRp b25zICItZm9wZW5tcC1zaW1kIC1mZHVtcC10cmVlLW9wdGltaXplZCIgfSAqLworLyogeyBk Zy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1tYXZ4IiB7IHRhcmdldCBhdnhfcnVudGltZSB9IH0g Ki8KKworI2RlZmluZSBUWVBFIGRvdWJsZQorI2luY2x1ZGUgInZlY3Qtc2ltZC1jbG9uZS0x OC5jIgorCisvKiBFbnN1cmUgdGhlIHRoZSBpbi1icmFuY2ggc2ltZCBjbG9uZXMgYXJlIHVz ZWQgb24gdGFyZ2V0cyB0aGF0IHN1cHBvcnQKKyAgIHRoZW0uICBUaGVzZSBjb3VudHMgaW5j bHVkZSBhbGwgY2FsbCBhbmQgZGVmaW5pdGlvbnMuICAqLworCisvKiB7IGRnLXNraXAtaWYg IiIgeyB4ODZfNjQtKi0qIH0geyAiLWZsdG8iIH0geyAiIiB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAic2ltZGNsb25lIiAxOSAib3B0aW1pemVkIiB7 IHRhcmdldCB4ODZfNjQtKi0qIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAtdGltZXMgInNpbWRjbG9uZSIgNiAib3B0aW1pemVkIiB7IHRhcmdldCBhbWRnY24t Ki0qIH0gfSB9ICovCisvKiBUT0RPOiBhYXJjaDY0ICovCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3Qtc2ltZC1jbG9uZS0xOGYuYyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3QvdmVjdC1zaW1kLWNsb25lLTE4Zi5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMzAzN2Y1ODA5YQotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1zaW1kLWNsb25lLTE4Zi5jCkBAIC0w LDAgKzEsMTYgQEAKKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rfc2lt ZF9jbG9uZXMgfSAqLworLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1mb3Blbm1wLXNp bWQgLWZkdW1wLXRyZWUtb3B0aW1pemVkIiB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0 aW9ucyAiLW1hdngiIHsgdGFyZ2V0IGF2eF9ydW50aW1lIH0gfSAqLworCisjZGVmaW5lIFRZ UEUgX19JTlQ2NF9UWVBFX18KKyNpbmNsdWRlICJ2ZWN0LXNpbWQtY2xvbmUtMTguYyIKKwor LyogRW5zdXJlIHRoZSB0aGUgaW4tYnJhbmNoIHNpbWQgY2xvbmVzIGFyZSB1c2VkIG9uIHRh cmdldHMgdGhhdCBzdXBwb3J0CisgICB0aGVtLiAgVGhlc2UgY291bnRzIGluY2x1ZGUgYWxs IGNhbGwgYW5kIGRlZmluaXRpb25zLiAgKi8KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wLXRpbWVzICJzaW1kY2xvbmUiIDYgIm9wdGltaXplZCIgeyB0YXJnZXQgYW1kZ2Nu LSotKiB9IH0gfSAqLworLyogVE9ETzogYWFyY2g2NCAqLworCisvKiBGYWlscyB0byB1c2Ug aW4tYnJhbmNoIGNsb25lcyBmb3IgVFlQRT1pbnQ2NC4gICovCisvKiB7IGRnLXNraXAtaWYg IiIgeyB4ODZfNjQtKi0qIH0geyAiLWZsdG8iIH0geyAiIiB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAic2ltZGNsb25lIiAxOCAib3B0aW1pemVkIiB7 IHRhcmdldCB4ODZfNjQtKi0qIH0gfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1pZi1j b252LmNjIGIvZ2NjL3RyZWUtaWYtY29udi5jYwppbmRleCA2NGIyMGI0YTllMS4uMTI3ZWU4 NzNkMjUgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLWlmLWNvbnYuY2MKKysrIGIvZ2NjL3RyZWUt aWYtY29udi5jYwpAQCAtMTIzLDYgKzEyMyw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhl IGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAidHJlZS1zc2EtZHNlLmgi CiAjaW5jbHVkZSAidHJlZS12ZWN0b3JpemVyLmgiCiAjaW5jbHVkZSAidHJlZS1laC5oIgor I2luY2x1ZGUgImNncmFwaC5oIgogCiAvKiBGb3IgbGFuZ19ob29rcy50eXBlcy50eXBlX2Zv cl9tb2RlLiAgKi8KICNpbmNsdWRlICJsYW5naG9va3MuaCIKQEAgLTEwNjMsNyArMTA2NCw4 IEBAIGlmX2NvbnZlcnRpYmxlX2dpbXBsZV9hc3NpZ25fc3RtdF9wIChnaW1wbGUgKnN0bXQs CiAgICBBIHN0YXRlbWVudCBpcyBpZi1jb252ZXJ0aWJsZSBpZjoKICAgIC0gaXQgaXMgYW4g aWYtY29udmVydGlibGUgR0lNUExFX0FTU0lHTiwKICAgIC0gaXQgaXMgYSBHSU1QTEVfTEFC RUwgb3IgYSBHSU1QTEVfQ09ORCwKLSAgIC0gaXQgaXMgYnVpbHRpbnMgY2FsbC4gICovCisg ICAtIGl0IGlzIGJ1aWx0aW5zIGNhbGwuCisgICAtIGl0IGlzIGEgY2FsbCB0byBhIGZ1bmN0 aW9uIHdpdGggYSBTSU1EIGNsb25lLiAgKi8KIAogc3RhdGljIGJvb2wKIGlmX2NvbnZlcnRp YmxlX3N0bXRfcCAoZ2ltcGxlICpzdG10LCB2ZWM8ZGF0YV9yZWZlcmVuY2VfcD4gcmVmcykK QEAgLTEwODMsMTMgKzEwODUsMjMgQEAgaWZfY29udmVydGlibGVfc3RtdF9wIChnaW1wbGUg KnN0bXQsIHZlYzxkYXRhX3JlZmVyZW5jZV9wPiByZWZzKQogCXRyZWUgZm5kZWNsID0gZ2lt cGxlX2NhbGxfZm5kZWNsIChzdG10KTsKIAlpZiAoZm5kZWNsKQogCSAgeworCSAgICAvKiBX ZSBjYW4gdmVjdG9yaXplIHNvbWUgYnVpbHRpbnMgYW5kIGZ1bmN0aW9ucyB3aXRoIFNJTUQK KwkgICAgICAgImluYnJhbmNoIiBjbG9uZXMuICAqLwogCSAgICBpbnQgZmxhZ3MgPSBnaW1w bGVfY2FsbF9mbGFncyAoc3RtdCk7CisJICAgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSA9 IGNncmFwaF9ub2RlOjpnZXQgKGZuZGVjbCk7CiAJICAgIGlmICgoZmxhZ3MgJiBFQ0ZfQ09O U1QpCiAJCSYmICEoZmxhZ3MgJiBFQ0ZfTE9PUElOR19DT05TVF9PUl9QVVJFKQotCQkvKiBX ZSBjYW4gb25seSB2ZWN0b3JpemUgc29tZSBidWlsdGlucyBhdCB0aGUgbW9tZW50LAotCQkg ICBzbyByZXN0cmljdCBpZi1jb252ZXJzaW9uIHRvIHRob3NlLiAgKi8KIAkJJiYgZm5kZWNs X2J1aWx0X2luX3AgKGZuZGVjbCkpCiAJICAgICAgcmV0dXJuIHRydWU7CisJICAgIGVsc2Ug aWYgKG5vZGUgJiYgbm9kZS0+c2ltZF9jbG9uZXMgIT0gTlVMTCkKKwkgICAgICAvKiBFbnN1 cmUgdGhhdCBhdCBsZWFzdCBvbmUgY2xvbmUgY2FuIGJlICJpbmJyYW5jaCIuICAqLworCSAg ICAgIGZvciAoc3RydWN0IGNncmFwaF9ub2RlICpuID0gbm9kZS0+c2ltZF9jbG9uZXM7IG4g IT0gTlVMTDsKKwkJICAgbiA9IG4tPnNpbWRjbG9uZS0+bmV4dF9jbG9uZSkKKwkJaWYgKG4t PnNpbWRjbG9uZS0+aW5icmFuY2gpCisJCSAgeworCQkgICAgbmVlZF90b19wcmVkaWNhdGUg PSB0cnVlOworCQkgICAgcmV0dXJuIHRydWU7CisJCSAgfQogCSAgfQogCXJldHVybiBmYWxz ZTsKICAgICAgIH0KQEAgLTI2MDMsNiArMjYxNSwyOSBAQCBwcmVkaWNhdGVfc3RhdGVtZW50 cyAobG9vcF9wIGxvb3ApCiAJICAgICAgZ2ltcGxlX2Fzc2lnbl9zZXRfcmhzMSAoc3RtdCwg aWZjX3RlbXBfdmFyICh0eXBlLCByaHMsICZnc2kpKTsKIAkgICAgICB1cGRhdGVfc3RtdCAo c3RtdCk7CiAJICAgIH0KKworCSAgLyogQ29udmVydCBmdW5jdGlvbnMgdGhhdCBoYXZlIGEg U0lNRCBjbG9uZSB0byBJRk5fTUFTS19DQUxMLiAgVGhpcworCSAgICAgd2lsbCBjYXVzZSB0 aGUgdmVjdG9yaXplciB0byBtYXRjaCB0aGUgImluIGJyYW5jaCIgY2xvbmUgdmFyaWFudHMs CisJICAgICBhbmQgc2VydmVzIHRvIGJ1aWxkIHRoZSBtYXNrIHZlY3RvciBpbiBhIG5hdHVy YWwgd2F5LiAgKi8KKwkgIGdjYWxsICpjYWxsID0gZHluX2Nhc3QgPGdjYWxsICo+IChnc2lf c3RtdCAoZ3NpKSk7CisJICBpZiAoY2FsbCAmJiAhZ2ltcGxlX2NhbGxfaW50ZXJuYWxfcCAo Y2FsbCkpCisJICAgIHsKKwkgICAgICB0cmVlIG9yaWdfZm4gPSBnaW1wbGVfY2FsbF9mbiAo Y2FsbCk7CisJICAgICAgaW50IG9yaWdfbmFyZ3MgPSBnaW1wbGVfY2FsbF9udW1fYXJncyAo Y2FsbCk7CisJICAgICAgYXV0b192ZWM8dHJlZT4gYXJnczsKKwkgICAgICBhcmdzLnNhZmVf cHVzaCAob3JpZ19mbik7CisJICAgICAgZm9yIChpbnQgaT0wOyBpIDwgb3JpZ19uYXJnczsg aSsrKQorCQlhcmdzLnNhZmVfcHVzaCAoZ2ltcGxlX2NhbGxfYXJnIChjYWxsLCBpKSk7CisJ ICAgICAgYXJncy5zYWZlX3B1c2ggKGNvbmQpOworCisJICAgICAgLyogUmVwbGFjZSB0aGUg Y2FsbCB3aXRoIGEgSUZOX01BU0tfQ0FMTCB0aGF0IGhhcyB0aGUgZXh0cmEKKwkJIGNvbmRp dGlvbiBwYXJhbWV0ZXIuICovCisJICAgICAgZ2NhbGwgKm5ld19jYWxsID0gZ2ltcGxlX2J1 aWxkX2NhbGxfaW50ZXJuYWxfdmVjIChJRk5fTUFTS19DQUxMLAorCQkJCQkJCQlhcmdzKTsK KwkgICAgICBnaW1wbGVfY2FsbF9zZXRfbGhzIChuZXdfY2FsbCwgZ2ltcGxlX2NhbGxfbGhz IChjYWxsKSk7CisJICAgICAgZ3NpX3JlcGxhY2UgKCZnc2ksIG5ld19jYWxsLCB0cnVlKTsK KwkgICAgfQorCiAJICBsaHMgPSBnaW1wbGVfZ2V0X2xocyAoZ3NpX3N0bXQgKGdzaSkpOwog CSAgaWYgKGxocyAmJiBUUkVFX0NPREUgKGxocykgPT0gU1NBX05BTUUpCiAJICAgIHNzYV9u YW1lcy5hZGQgKGxocyk7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0LWxvb3AuY2MgYi9n Y2MvdHJlZS12ZWN0LWxvb3AuY2MKaW5kZXggYWFjYmIxMjU4MGMuLjYwZWZkNGQ3NTI1IDEw MDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0LWxvb3AuY2MKKysrIGIvZ2NjL3RyZWUtdmVjdC1s b29wLmNjCkBAIC0yMTIxLDYgKzIxMjEsMTUgQEAgdmVjdF9nZXRfZGF0YXJlZnNfaW5fbG9v cCAobG9vcF9wIGxvb3AsIGJhc2ljX2Jsb2NrICpiYnMsCiAJICAgIGlmIChpc19naW1wbGVf Y2FsbCAoc3RtdCkgJiYgbG9vcC0+c2FmZWxlbikKIAkgICAgICB7CiAJCXRyZWUgZm5kZWNs ID0gZ2ltcGxlX2NhbGxfZm5kZWNsIChzdG10KSwgb3A7CisJCWlmIChmbmRlY2wgPT0gTlVM TF9UUkVFCisJCSAgICAmJiBnaW1wbGVfY2FsbF9pbnRlcm5hbF9wIChzdG10KQorCQkgICAg JiYgZ2ltcGxlX2NhbGxfaW50ZXJuYWxfZm4gKHN0bXQpID09IElGTl9NQVNLX0NBTEwpCisJ CSAgeworCQkgICAgZm5kZWNsID0gZ2ltcGxlX2NhbGxfYXJnIChzdG10LCAwKTsKKwkJICAg IGdjY19jaGVja2luZ19hc3NlcnQgKFRSRUVfQ09ERSAoZm5kZWNsKSA9PSBBRERSX0VYUFIp OworCQkgICAgZm5kZWNsID0gVFJFRV9PUEVSQU5EIChmbmRlY2wsIDApOworCQkgICAgZ2Nj X2NoZWNraW5nX2Fzc2VydCAoVFJFRV9DT0RFIChmbmRlY2wpID09IEZVTkNUSU9OX0RFQ0wp OworCQkgIH0KIAkJaWYgKGZuZGVjbCAhPSBOVUxMX1RSRUUpCiAJCSAgewogCQkgICAgY2dy YXBoX25vZGUgKm5vZGUgPSBjZ3JhcGhfbm9kZTo6Z2V0IChmbmRlY2wpOwpkaWZmIC0tZ2l0 IGEvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYyBiL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MKaW5k ZXggNTQ4NWRhNThiMzguLjAzMTBjODBjNzlkIDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0 LXN0bXRzLmNjCisrKyBiL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MKQEAgLTM5ODcsNiArMzk4 Nyw3IEBAIHZlY3Rvcml6YWJsZV9zaW1kX2Nsb25lX2NhbGwgKHZlY19pbmZvICp2aW5mbywg c3RtdF92ZWNfaW5mbyBzdG10X2luZm8sCiAgIHNpemVfdCBpLCBuYXJnczsKICAgdHJlZSBs aHMsIHJ0eXBlLCByYXR5cGU7CiAgIHZlYzxjb25zdHJ1Y3Rvcl9lbHQsIHZhX2djPiAqcmV0 X2N0b3JfZWx0cyA9IE5VTEw7CisgIGludCBhcmdfb2Zmc2V0ID0gMDsKIAogICAvKiBJcyBT VE1UIGEgdmVjdG9yaXphYmxlIGNhbGw/ICAgKi8KICAgZ2NhbGwgKnN0bXQgPSBkeW5fY2Fz dCA8Z2NhbGwgKj4gKHN0bXRfaW5mby0+c3RtdCk7CkBAIC0zOTk0LDYgKzM5OTUsMTYgQEAg dmVjdG9yaXphYmxlX3NpbWRfY2xvbmVfY2FsbCAodmVjX2luZm8gKnZpbmZvLCBzdG10X3Zl Y19pbmZvIHN0bXRfaW5mbywKICAgICByZXR1cm4gZmFsc2U7CiAKICAgZm5kZWNsID0gZ2lt cGxlX2NhbGxfZm5kZWNsIChzdG10KTsKKyAgaWYgKGZuZGVjbCA9PSBOVUxMX1RSRUUKKyAg ICAgICYmIGdpbXBsZV9jYWxsX2ludGVybmFsX3AgKHN0bXQpCisgICAgICAmJiBnaW1wbGVf Y2FsbF9pbnRlcm5hbF9mbiAoc3RtdCkgPT0gSUZOX01BU0tfQ0FMTCkKKyAgICB7CisgICAg ICBmbmRlY2wgPSBnaW1wbGVfY2FsbF9hcmcgKHN0bXQsIDApOworICAgICAgZ2NjX2NoZWNr aW5nX2Fzc2VydCAoVFJFRV9DT0RFIChmbmRlY2wpID09IEFERFJfRVhQUik7CisgICAgICBm bmRlY2wgPSBUUkVFX09QRVJBTkQgKGZuZGVjbCwgMCk7CisgICAgICBnY2NfY2hlY2tpbmdf YXNzZXJ0IChUUkVFX0NPREUgKGZuZGVjbCkgPT0gRlVOQ1RJT05fREVDTCk7CisgICAgICBh cmdfb2Zmc2V0ID0gMTsKKyAgICB9CiAgIGlmIChmbmRlY2wgPT0gTlVMTF9UUkVFKQogICAg IHJldHVybiBmYWxzZTsKIApAQCAtNDAyNCw3ICs0MDM1LDcgQEAgdmVjdG9yaXphYmxlX3Np bWRfY2xvbmVfY2FsbCAodmVjX2luZm8gKnZpbmZvLCBzdG10X3ZlY19pbmZvIHN0bXRfaW5m bywKICAgICByZXR1cm4gZmFsc2U7CiAKICAgLyogUHJvY2VzcyBmdW5jdGlvbiBhcmd1bWVu dHMuICAqLwotICBuYXJncyA9IGdpbXBsZV9jYWxsX251bV9hcmdzIChzdG10KTsKKyAgbmFy Z3MgPSBnaW1wbGVfY2FsbF9udW1fYXJncyAoc3RtdCkgLSBhcmdfb2Zmc2V0OwogCiAgIC8q IEJhaWwgb3V0IGlmIHRoZSBmdW5jdGlvbiBoYXMgemVybyBhcmd1bWVudHMuICAqLwogICBp ZiAobmFyZ3MgPT0gMCkKQEAgLTQwNDIsNyArNDA1Myw3IEBAIHZlY3Rvcml6YWJsZV9zaW1k X2Nsb25lX2NhbGwgKHZlY19pbmZvICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8s CiAgICAgICB0aGlzYXJnaW5mby5vcCA9IE5VTExfVFJFRTsKICAgICAgIHRoaXNhcmdpbmZv LnNpbWRfbGFuZV9saW5lYXIgPSBmYWxzZTsKIAotICAgICAgb3AgPSBnaW1wbGVfY2FsbF9h cmcgKHN0bXQsIGkpOworICAgICAgb3AgPSBnaW1wbGVfY2FsbF9hcmcgKHN0bXQsIGkgKyBh cmdfb2Zmc2V0KTsKICAgICAgIGlmICghdmVjdF9pc19zaW1wbGVfdXNlIChvcCwgdmluZm8s ICZ0aGlzYXJnaW5mby5kdCwKIAkJCSAgICAgICAmdGhpc2FyZ2luZm8udmVjdHlwZSkKIAkg IHx8IHRoaXNhcmdpbmZvLmR0ID09IHZlY3RfdW5pbml0aWFsaXplZF9kZWYpCkBAIC00MDU3 LDE2ICs0MDY4LDcgQEAgdmVjdG9yaXphYmxlX3NpbWRfY2xvbmVfY2FsbCAodmVjX2luZm8g KnZpbmZvLCBzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywKIAkgIHx8IHRoaXNhcmdpbmZvLmR0 ID09IHZlY3RfZXh0ZXJuYWxfZGVmKQogCWdjY19hc3NlcnQgKHRoaXNhcmdpbmZvLnZlY3R5 cGUgPT0gTlVMTF9UUkVFKTsKICAgICAgIGVsc2UKLQl7Ci0JICBnY2NfYXNzZXJ0ICh0aGlz YXJnaW5mby52ZWN0eXBlICE9IE5VTExfVFJFRSk7Ci0JICBpZiAoVkVDVE9SX0JPT0xFQU5f VFlQRV9QICh0aGlzYXJnaW5mby52ZWN0eXBlKSkKLQkgICAgewotCSAgICAgIGlmIChkdW1w X2VuYWJsZWRfcCAoKSkKLQkJZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpB VElPTiwgdmVjdF9sb2NhdGlvbiwKLQkJCQkgInZlY3RvciBtYXNrIGFyZ3VtZW50cyBhcmUg bm90IHN1cHBvcnRlZFxuIik7Ci0JICAgICAgcmV0dXJuIGZhbHNlOwotCSAgICB9Ci0JfQor CWdjY19hc3NlcnQgKHRoaXNhcmdpbmZvLnZlY3R5cGUgIT0gTlVMTF9UUkVFKTsKIAogICAg ICAgLyogRm9yIGxpbmVhciBhcmd1bWVudHMsIHRoZSBhbmFseXplIHBoYXNlIHNob3VsZCBo YXZlIHNhdmVkCiAJIHRoZSBiYXNlIGFuZCBzdGVwIGluIFNUTVRfVklORk9fU0lNRF9DTE9O RV9JTkZPLiAgKi8KQEAgLTQxNTksOSArNDE2MSw2IEBAIHZlY3Rvcml6YWJsZV9zaW1kX2Ns b25lX2NhbGwgKHZlY19pbmZvICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sCiAJ aWYgKHRhcmdldF9iYWRuZXNzIDwgMCkKIAkgIGNvbnRpbnVlOwogCXRoaXNfYmFkbmVzcyAr PSB0YXJnZXRfYmFkbmVzcyAqIDUxMjsKLQkvKiBGT1JOT1c6IEhhdmUgdG8gYWRkIGNvZGUg dG8gYWRkIHRoZSBtYXNrIGFyZ3VtZW50LiAgKi8KLQlpZiAobi0+c2ltZGNsb25lLT5pbmJy YW5jaCkKLQkgIGNvbnRpbnVlOwogCWZvciAoaSA9IDA7IGkgPCBuYXJnczsgaSsrKQogCSAg ewogCSAgICBzd2l0Y2ggKG4tPnNpbWRjbG9uZS0+YXJnc1tpXS5hcmdfdHlwZSkKQEAgLTQx NjksNyArNDE2OCw3IEBAIHZlY3Rvcml6YWJsZV9zaW1kX2Nsb25lX2NhbGwgKHZlY19pbmZv ICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sCiAJICAgICAgY2FzZSBTSU1EX0NM T05FX0FSR19UWVBFX1ZFQ1RPUjoKIAkJaWYgKCF1c2VsZXNzX3R5cGVfY29udmVyc2lvbl9w CiAJCQkobi0+c2ltZGNsb25lLT5hcmdzW2ldLm9yaWdfdHlwZSwKLQkJCSBUUkVFX1RZUEUg KGdpbXBsZV9jYWxsX2FyZyAoc3RtdCwgaSkpKSkKKwkJCSBUUkVFX1RZUEUgKGdpbXBsZV9j YWxsX2FyZyAoc3RtdCwgaSArIGFyZ19vZmZzZXQpKSkpCiAJCSAgaSA9IC0xOwogCQllbHNl IGlmIChhcmdpbmZvW2ldLmR0ID09IHZlY3RfY29uc3RhbnRfZGVmCiAJCQkgfHwgYXJnaW5m b1tpXS5kdCA9PSB2ZWN0X2V4dGVybmFsX2RlZgpAQCAtNDE5OSw3ICs0MTk4LDcgQEAgdmVj dG9yaXphYmxlX3NpbWRfY2xvbmVfY2FsbCAodmVjX2luZm8gKnZpbmZvLCBzdG10X3ZlY19p bmZvIHN0bXRfaW5mbywKIAkJaSA9IC0xOwogCQlicmVhazsKIAkgICAgICBjYXNlIFNJTURf Q0xPTkVfQVJHX1RZUEVfTUFTSzoKLQkJZ2NjX3VucmVhY2hhYmxlICgpOworCQlicmVhazsK IAkgICAgICB9CiAJICAgIGlmIChpID09IChzaXplX3QpIC0xKQogCSAgICAgIGJyZWFrOwpA QCAtNDIyNSwxOCArNDIyNCw1NSBAQCB2ZWN0b3JpemFibGVfc2ltZF9jbG9uZV9jYWxsICh2 ZWNfaW5mbyAqdmluZm8sIHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLAogICAgIHJldHVybiBm YWxzZTsKIAogICBmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKLSAgICBpZiAoKGFyZ2lu Zm9baV0uZHQgPT0gdmVjdF9jb25zdGFudF9kZWYKLQkgfHwgYXJnaW5mb1tpXS5kdCA9PSB2 ZWN0X2V4dGVybmFsX2RlZikKLQkmJiBiZXN0bi0+c2ltZGNsb25lLT5hcmdzW2ldLmFyZ190 eXBlID09IFNJTURfQ0xPTkVfQVJHX1RZUEVfVkVDVE9SKQotICAgICAgewotCXRyZWUgYXJn X3R5cGUgPSBUUkVFX1RZUEUgKGdpbXBsZV9jYWxsX2FyZyAoc3RtdCwgaSkpOwotCWFyZ2lu Zm9baV0udmVjdHlwZSA9IGdldF92ZWN0eXBlX2Zvcl9zY2FsYXJfdHlwZSAodmluZm8sIGFy Z190eXBlLAotCQkJCQkJCSAgc2xwX25vZGUpOwotCWlmIChhcmdpbmZvW2ldLnZlY3R5cGUg PT0gTlVMTAotCSAgICB8fCAhY29uc3RhbnRfbXVsdGlwbGVfcCAoYmVzdG4tPnNpbWRjbG9u ZS0+c2ltZGxlbiwKLQkJCQkgICAgIHNpbWRfY2xvbmVfc3VicGFydHMgKGFyZ2luZm9baV0u dmVjdHlwZSkpKQorICAgIHsKKyAgICAgIGlmICgoYXJnaW5mb1tpXS5kdCA9PSB2ZWN0X2Nv bnN0YW50X2RlZgorCSAgIHx8IGFyZ2luZm9baV0uZHQgPT0gdmVjdF9leHRlcm5hbF9kZWYp CisJICAmJiBiZXN0bi0+c2ltZGNsb25lLT5hcmdzW2ldLmFyZ190eXBlID09IFNJTURfQ0xP TkVfQVJHX1RZUEVfVkVDVE9SKQorCXsKKwkgIHRyZWUgYXJnX3R5cGUgPSBUUkVFX1RZUEUg KGdpbXBsZV9jYWxsX2FyZyAoc3RtdCwgaSArIGFyZ19vZmZzZXQpKTsKKwkgIGFyZ2luZm9b aV0udmVjdHlwZSA9IGdldF92ZWN0eXBlX2Zvcl9zY2FsYXJfdHlwZSAodmluZm8sIGFyZ190 eXBlLAorCQkJCQkJCSAgICBzbHBfbm9kZSk7CisJICBpZiAoYXJnaW5mb1tpXS52ZWN0eXBl ID09IE5VTEwKKwkgICAgICB8fCAhY29uc3RhbnRfbXVsdGlwbGVfcCAoYmVzdG4tPnNpbWRj bG9uZS0+c2ltZGxlbiwKKwkJCQkgICAgICAgc2ltZF9jbG9uZV9zdWJwYXJ0cyAoYXJnaW5m b1tpXS52ZWN0eXBlKSkpCisJICAgIHJldHVybiBmYWxzZTsKKwl9CisKKyAgICAgIGlmIChi ZXN0bi0+c2ltZGNsb25lLT5hcmdzW2ldLmFyZ190eXBlID09IFNJTURfQ0xPTkVfQVJHX1RZ UEVfVkVDVE9SCisJICAmJiBWRUNUT1JfQk9PTEVBTl9UWVBFX1AgKGJlc3RuLT5zaW1kY2xv bmUtPmFyZ3NbaV0udmVjdG9yX3R5cGUpKQorCXsKKwkgIGlmIChkdW1wX2VuYWJsZWRfcCAo KSkKKwkgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgdmVj dF9sb2NhdGlvbiwKKwkJCSAgICAgInZlY3RvciBtYXNrIGFyZ3VtZW50cyBhcmUgbm90IHN1 cHBvcnRlZC5cbiIpOwogCSAgcmV0dXJuIGZhbHNlOwotICAgICAgfQorCX0KKworICAgICAg aWYgKGJlc3RuLT5zaW1kY2xvbmUtPmFyZ3NbaV0uYXJnX3R5cGUgPT0gU0lNRF9DTE9ORV9B UkdfVFlQRV9NQVNLCisJICAmJiBiZXN0bi0+c2ltZGNsb25lLT5tYXNrX21vZGUgPT0gVk9J RG1vZGUKKwkgICYmIChzaW1kX2Nsb25lX3N1YnBhcnRzIChiZXN0bi0+c2ltZGNsb25lLT5h cmdzW2ldLnZlY3Rvcl90eXBlKQorCSAgICAgICE9IHNpbWRfY2xvbmVfc3VicGFydHMgKGFy Z2luZm9baV0udmVjdHlwZSkpKQorCXsKKwkgIC8qIEZPUk5PVyB3ZSBvbmx5IGhhdmUgcGFy dGlhbCBzdXBwb3J0IGZvciB2ZWN0b3ItdHlwZSBtYXNrcyB0aGF0CisJICAgICBjYW4ndCBo b2xkIGFsbCBvZiBzaW1kbGVuLiAqLworCSAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQorCSAg ICBkdW1wX3ByaW50Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLAorCQkJICAgICB2 ZWN0X2xvY2F0aW9uLAorCQkJICAgICAiaW4tYnJhbmNoIHZlY3RvciBjbG9uZXMgYXJlIG5v dCB5ZXQiCisJCQkgICAgICIgc3VwcG9ydGVkIGZvciBtaXNtYXRjaGVkIHZlY3RvciBzaXpl cy5cbiIpOworCSAgcmV0dXJuIGZhbHNlOworCX0KKyAgICAgIGlmIChiZXN0bi0+c2ltZGNs b25lLT5hcmdzW2ldLmFyZ190eXBlID09IFNJTURfQ0xPTkVfQVJHX1RZUEVfTUFTSworCSAg JiYgYmVzdG4tPnNpbWRjbG9uZS0+bWFza19tb2RlICE9IFZPSURtb2RlKQorCXsKKwkgIC8q IEZPUk5PVyBkb24ndCBzdXBwb3J0IGludGVnZXItdHlwZSBtYXNrcy4gICovCisJICBpZiAo ZHVtcF9lbmFibGVkX3AgKCkpCisJICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NFRF9P UFRJTUlaQVRJT04sCisJCQkgICAgIHZlY3RfbG9jYXRpb24sCisJCQkgICAgICJpbi1icmFu Y2ggdmVjdG9yIGNsb25lcyBhcmUgbm90IHlldCIKKwkJCSAgICAgIiBzdXBwb3J0ZWQgZm9y IGludGVnZXIgbWFzayBtb2Rlcy5cbiIpOworCSAgcmV0dXJuIGZhbHNlOworCX0KKyAgICB9 CiAKICAgZm5kZWNsID0gYmVzdG4tPmRlY2w7CiAgIG51bml0cyA9IGJlc3RuLT5zaW1kY2xv bmUtPnNpbWRsZW47CkBAIC00MzI2LDcgKzQzNjIsNyBAQCB2ZWN0b3JpemFibGVfc2ltZF9j bG9uZV9jYWxsICh2ZWNfaW5mbyAqdmluZm8sIHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLAog CXsKIAkgIHVuc2lnbmVkIGludCBrLCBsLCBtLCBvOwogCSAgdHJlZSBhdHlwZTsKLQkgIG9w ID0gZ2ltcGxlX2NhbGxfYXJnIChzdG10LCBpKTsKKwkgIG9wID0gZ2ltcGxlX2NhbGxfYXJn IChzdG10LCBpICsgYXJnX29mZnNldCk7CiAJICBzd2l0Y2ggKGJlc3RuLT5zaW1kY2xvbmUt PmFyZ3NbaV0uYXJnX3R5cGUpCiAJICAgIHsKIAkgICAgY2FzZSBTSU1EX0NMT05FX0FSR19U WVBFX1ZFQ1RPUjoKQEAgLTQ0MjUsNiArNDQ2MSw2NSBAQCB2ZWN0b3JpemFibGVfc2ltZF9j bG9uZV9jYWxsICh2ZWNfaW5mbyAqdmluZm8sIHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLAog CQkgICAgfQogCQl9CiAJICAgICAgYnJlYWs7CisJICAgIGNhc2UgU0lNRF9DTE9ORV9BUkdf VFlQRV9NQVNLOgorCSAgICAgIGF0eXBlID0gYmVzdG4tPnNpbWRjbG9uZS0+YXJnc1tpXS52 ZWN0b3JfdHlwZTsKKwkgICAgICBpZiAoYmVzdG4tPnNpbWRjbG9uZS0+bWFza19tb2RlICE9 IFZPSURtb2RlKQorCQl7CisJCSAgLyogRk9STk9XOiB0aGlzIGlzIGRpc2FibGVkIGFib3Zl LiAgKi8KKwkJICBnY2NfdW5yZWFjaGFibGUgKCk7CisJCX0KKwkgICAgICBlbHNlCisJCXsK KwkJICB0cmVlIGVsdF90eXBlID0gVFJFRV9UWVBFIChhdHlwZSk7CisJCSAgdHJlZSBvbmUg PSBmb2xkX2NvbnZlcnQgKGVsdF90eXBlLCBpbnRlZ2VyX29uZV9ub2RlKTsKKwkJICB0cmVl IHplcm8gPSBmb2xkX2NvbnZlcnQgKGVsdF90eXBlLCBpbnRlZ2VyX3plcm9fbm9kZSk7CisJ CSAgbyA9IHZlY3Rvcl91bnJvbGxfZmFjdG9yIChudW5pdHMsCisJCQkJCSAgICBzaW1kX2Ns b25lX3N1YnBhcnRzIChhdHlwZSkpOworCQkgIGZvciAobSA9IGogKiBvOyBtIDwgKGogKyAx KSAqIG87IG0rKykKKwkJICAgIHsKKwkJICAgICAgaWYgKHNpbWRfY2xvbmVfc3VicGFydHMg KGF0eXBlKQorCQkJICA8IHNpbWRfY2xvbmVfc3VicGFydHMgKGFyZ2luZm9baV0udmVjdHlw ZSkpCisJCQl7CisJCQkgIC8qIFRoZSBtYXNrIHR5cGUgaGFzIGZld2VyIGVsZW1lbnRzIHRo YW4gc2ltZGxlbi4gICovCisKKwkJCSAgLyogRk9STk9XICovCisJCQkgIGdjY191bnJlYWNo YWJsZSAoKTsKKwkJCX0KKwkJICAgICAgZWxzZSBpZiAoc2ltZF9jbG9uZV9zdWJwYXJ0cyAo YXR5cGUpCisJCQkgICAgICAgPT0gc2ltZF9jbG9uZV9zdWJwYXJ0cyAoYXJnaW5mb1tpXS52 ZWN0eXBlKSkKKwkJCXsKKwkJCSAgLyogVGhlIFNJTUQgY2xvbmUgZnVuY3Rpb24gaGFzIHRo ZSBzYW1lIG51bWJlciBvZgorCQkJICAgICBlbGVtZW50cyBhcyB0aGUgY3VycmVudCBmdW5j dGlvbi4gICovCisJCQkgIGlmIChtID09IDApCisJCQkgICAgeworCQkJICAgICAgdmVjdF9n ZXRfdmVjX2RlZnNfZm9yX29wZXJhbmQgKHZpbmZvLCBzdG10X2luZm8sCisJCQkJCQkJICAg ICBvICogbmNvcGllcywKKwkJCQkJCQkgICAgIG9wLAorCQkJCQkJCSAgICAgJnZlY19vcHJu ZHNbaV0pOworCQkJICAgICAgdmVjX29wcm5kc19pW2ldID0gMDsKKwkJCSAgICB9CisJCQkg IHZlY19vcHJuZDAgPSB2ZWNfb3BybmRzW2ldW3ZlY19vcHJuZHNfaVtpXSsrXTsKKwkJCSAg dmVjX29wcm5kMAorCQkJICAgID0gYnVpbGQzIChWRUNfQ09ORF9FWFBSLCBhdHlwZSwgdmVj X29wcm5kMCwKKwkJCQkgICAgICBidWlsZF92ZWN0b3JfZnJvbV92YWwgKGF0eXBlLCBvbmUp LAorCQkJCSAgICAgIGJ1aWxkX3ZlY3Rvcl9mcm9tX3ZhbCAoYXR5cGUsIHplcm8pKTsKKwkJ CSAgZ2Fzc2lnbiAqbmV3X3N0bXQKKwkJCSAgICA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKG1h a2Vfc3NhX25hbWUgKGF0eXBlKSwKKwkJCQkJCSAgIHZlY19vcHJuZDApOworCQkJICB2ZWN0 X2ZpbmlzaF9zdG10X2dlbmVyYXRpb24gKHZpbmZvLCBzdG10X2luZm8sCisJCQkJCQkgICAg ICAgbmV3X3N0bXQsIGdzaSk7CisJCQkgIHZhcmdzLnNhZmVfcHVzaCAoZ2ltcGxlX2Fzc2ln bl9saHMgKG5ld19zdG10KSk7CisJCQl9CisJCSAgICAgIGVsc2UKKwkJCXsKKwkJCSAgLyog VGhlIG1hc2sgdHlwZSBoYXMgbW9yZSBlbGVtZW50cyB0aGFuIHNpbWRsZW4uICAqLworCisJ CQkgIC8qIEZPUk5PVyAqLworCQkJICBnY2NfdW5yZWFjaGFibGUgKCk7CisJCQl9CisJCSAg ICB9CisJCX0KKwkgICAgICBicmVhazsKIAkgICAgY2FzZSBTSU1EX0NMT05FX0FSR19UWVBF X1VOSUZPUk06CiAJICAgICAgdmFyZ3Muc2FmZV9wdXNoIChvcCk7CiAJICAgICAgYnJlYWs7 Cg== --------------LcgEoD3rFaV4nR2fcbVep7rp--