From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id 482ED3858C54 for ; Fri, 12 May 2023 12:14:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 482ED3858C54 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 51D2BFEC; Fri, 12 May 2023 05:15:39 -0700 (PDT) Received: from [10.57.73.43] (unknown [10.57.73.43]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E504C3F67D; Fri, 12 May 2023 05:14:53 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------XYk65tlc4oBxah29mn8gCog5" Message-ID: <0cc7543a-f72c-80b6-2e4d-eca984dd9075@arm.com> Date: Fri, 12 May 2023 13:14:43 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: [PATCH 1/3] Refactor to allow internal_fn's Content-Language: en-US To: Richard Biener Cc: Richard Biener , Richard Sandiford , "gcc-patches@gcc.gnu.org" References: <51ce8969-3130-452e-092e-f9d91eff2dad@arm.com> <2d38873e-bd4d-394c-6e8a-e4b1e75678d4@arm.com> From: "Andre Vieira (lists)" In-Reply-To: X-Spam-Status: No, score=-15.7 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_NONE,KAM_DMARC_STATUS,KAM_LAZY_DOMAIN_SECURITY,KAM_LOTSOFHASH,NICE_REPLY_A,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE 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: This is a multi-part message in MIME format. --------------XYk65tlc4oBxah29mn8gCog5 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, I think I tackled all of your comments, let me know if I missed something. gcc/ChangeLog: 2023-05-12 Andre Vieira Joel Hutton * tree-vect-patterns.cc (vect_gimple_build): New Function. (vect_recog_widen_op_pattern): Refactor to use code_helper. * tree-vect-stmts.cc (vect_gen_widened_results_half): Likewise. (vect_create_vectorized_demotion_stmts): Likewise. (vect_create_vectorized_promotion_stmts): Likewise. (vect_create_half_widening_stmts): Likewise. (vectorizable_conversion): Likewise. (vectorizable_call): Likewise. (supportable_widening_operation): Likewise. (supportable_narrowing_operation): Likewise. (simple_integer_narrowing): Likewise. * tree-vectorizer.h (supportable_widening_operation): Likewise. (supportable_narrowing_operation): Likewise. (vect_gimple_build): New function prototype. * tree.h (code_helper::safe_as_tree_code): New function. (code_helper::safe_as_fn_code): New function. --------------XYk65tlc4oBxah29mn8gCog5 Content-Type: text/plain; charset=UTF-8; name="ifn0v3.patch" Content-Disposition: attachment; filename="ifn0v3.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3QtcGF0dGVybnMuY2MgYi9nY2MvdHJlZS12ZWN0 LXBhdHRlcm5zLmNjCmluZGV4IDMzYThiMmJiNjA2MDFkYzFhNjdkZTYyYTU2YmJmM2MzNTVl MTJkYmQuLjE3NzhhZjAyNDI4OThlM2RjNzNkOTRkMjJhNWI4NTA1NjI4YTUzYjUgMTAwNjQ0 Ci0tLSBhL2djYy90cmVlLXZlY3QtcGF0dGVybnMuY2MKKysrIGIvZ2NjL3RyZWUtdmVjdC1w YXR0ZXJucy5jYwpAQCAtMjUsNiArMjUsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBm aWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2luY2x1ZGUgInJ0bC5oIgogI2luY2x1ZGUg InRyZWUuaCIKICNpbmNsdWRlICJnaW1wbGUuaCIKKyNpbmNsdWRlICJnaW1wbGUtaXRlcmF0 b3IuaCIKKyNpbmNsdWRlICJnaW1wbGUtZm9sZC5oIgogI2luY2x1ZGUgInNzYS5oIgogI2lu Y2x1ZGUgImV4cG1lZC5oIgogI2luY2x1ZGUgIm9wdGFicy10cmVlLmgiCkBAIC0xMzkyLDcg KzEzOTQsNyBAQCB2ZWN0X3JlY29nX3NhZF9wYXR0ZXJuICh2ZWNfaW5mbyAqdmluZm8sCiBz dGF0aWMgZ2ltcGxlICoKIHZlY3RfcmVjb2dfd2lkZW5fb3BfcGF0dGVybiAodmVjX2luZm8g KnZpbmZvLAogCQkJICAgICBzdG10X3ZlY19pbmZvIGxhc3Rfc3RtdF9pbmZvLCB0cmVlICp0 eXBlX291dCwKLQkJCSAgICAgdHJlZV9jb2RlIG9yaWdfY29kZSwgdHJlZV9jb2RlIHdpZGVf Y29kZSwKKwkJCSAgICAgdHJlZV9jb2RlIG9yaWdfY29kZSwgY29kZV9oZWxwZXIgd2lkZV9j b2RlLAogCQkJICAgICBib29sIHNoaWZ0X3AsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAgIGdp bXBsZSAqbGFzdF9zdG10ID0gbGFzdF9zdG10X2luZm8tPnN0bXQ7CkBAIC0xNDM1LDcgKzE0 MzcsNyBAQCB2ZWN0X3JlY29nX3dpZGVuX29wX3BhdHRlcm4gKHZlY19pbmZvICp2aW5mbywK ICAgICAgIHZlY2N0eXBlID0gZ2V0X3ZlY3R5cGVfZm9yX3NjYWxhcl90eXBlICh2aW5mbywg Y3R5cGUpOwogICAgIH0KIAotICBlbnVtIHRyZWVfY29kZSBkdW1teV9jb2RlOworICBjb2Rl X2hlbHBlciBkdW1teV9jb2RlOwogICBpbnQgZHVtbXlfaW50OwogICBhdXRvX3ZlYzx0cmVl PiBkdW1teV92ZWM7CiAgIGlmICghdmVjdHlwZQpAQCAtMTQ1Niw4ICsxNDU4LDcgQEAgdmVj dF9yZWNvZ193aWRlbl9vcF9wYXR0ZXJuICh2ZWNfaW5mbyAqdmluZm8sCiAJCSAgICAgICAy LCBvcHJuZCwgaGFsZl90eXBlLCB1bnByb20sIHZlY3R5cGUpOwogCiAgIHRyZWUgdmFyID0g dmVjdF9yZWNvZ190ZW1wX3NzYV92YXIgKGl0eXBlLCBOVUxMKTsKLSAgZ2ltcGxlICpwYXR0 ZXJuX3N0bXQgPSBnaW1wbGVfYnVpbGRfYXNzaWduICh2YXIsIHdpZGVfY29kZSwKLQkJCQkJ ICAgICAgb3BybmRbMF0sIG9wcm5kWzFdKTsKKyAgZ2ltcGxlICpwYXR0ZXJuX3N0bXQgPSB2 ZWN0X2dpbXBsZV9idWlsZCAodmFyLCB3aWRlX2NvZGUsIG9wcm5kWzBdLCBvcHJuZFsxXSk7 CiAKICAgaWYgKHZlY2N0eXBlICE9IHZlY2l0eXBlKQogICAgIHBhdHRlcm5fc3RtdCA9IHZl Y3RfY29udmVydF9vdXRwdXQgKHZpbmZvLCBsYXN0X3N0bXRfaW5mbywgY3R5cGUsCkBAIC02 ODA4LDMgKzY4MDksMjAgQEAgdmVjdF9wYXR0ZXJuX3JlY29nICh2ZWNfaW5mbyAqdmluZm8p CiAgIC8qIEFmdGVyIHRoaXMgbm8gbW9yZSBhZGRfc3RtdCBjYWxscyBhcmUgYWxsb3dlZC4g ICovCiAgIHZpbmZvLT5zdG10X3ZlY19pbmZvX3JvID0gdHJ1ZTsKIH0KKworLyogQnVpbGQg YSBHSU1QTEVfQVNTSUdOIG9yIEdJTVBMRV9DQUxMIHdpdGggdGhlIHRyZWVfY29kZSwKKyAg IG9yIGludGVybmFsX2ZuIGNvbnRhaW5lZCBpbiBjaCwgcmVzcGVjdGl2ZWx5LiAgKi8KK2dp bXBsZSAqCit2ZWN0X2dpbXBsZV9idWlsZCAodHJlZSBsaHMsIGNvZGVfaGVscGVyIGNoLCB0 cmVlIG9wMCwgdHJlZSBvcDEpCit7CisgIGdjY19hc3NlcnQgKG9wMCAhPSBOVUxMX1RSRUUp OworICBpZiAoY2guaXNfdHJlZV9jb2RlICgpKQorICAgIHJldHVybiBnaW1wbGVfYnVpbGRf YXNzaWduIChsaHMsICh0cmVlX2NvZGUpIGNoLCBvcDAsIG9wMSk7CisKKyAgZ2NjX2Fzc2Vy dCAoY2guaXNfaW50ZXJuYWxfZm4gKCkpOworICBnaW1wbGUqIHN0bXQgPSBnaW1wbGVfYnVp bGRfY2FsbF9pbnRlcm5hbCAoYXNfaW50ZXJuYWxfZm4gKChjb21iaW5lZF9mbikgY2gpLAor CQkJCQkgICAgIG9wMSA9PSBOVUxMX1RSRUUgPyAxIDogMiwKKwkJCQkJICAgICBvcDAsIG9w MSk7CisgIGdpbXBsZV9jYWxsX3NldF9saHMgKHN0bXQsIGxocyk7CisgIHJldHVybiBzdG10 OworfQpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYyBiL2djYy90cmVlLXZl Y3Qtc3RtdHMuY2MKaW5kZXggNjFhMmRhNGVjZWU5YzQ0OWMxNDY5Y2FiM2M0Y2ZhMWE3ODI0 NzFkNS4uZDE1MmFlOWFiMTBiMzYxYjg4YzBmODM5ZDY5NTFjNDNiOTU0NzUwYSAxMDA2NDQK LS0tIGEvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYworKysgYi9nY2MvdHJlZS12ZWN0LXN0bXRz LmNjCkBAIC0zMjYxLDEzICszMjYxLDEzIEBAIHZlY3Rvcml6YWJsZV9ic3dhcCAodmVjX2lu Zm8gKnZpbmZvLAogCiBzdGF0aWMgYm9vbAogc2ltcGxlX2ludGVnZXJfbmFycm93aW5nICh0 cmVlIHZlY3R5cGVfb3V0LCB0cmVlIHZlY3R5cGVfaW4sCi0JCQkgIHRyZWVfY29kZSAqY29u dmVydF9jb2RlKQorCQkJICBjb2RlX2hlbHBlciAqY29udmVydF9jb2RlKQogewogICBpZiAo IUlOVEVHUkFMX1RZUEVfUCAoVFJFRV9UWVBFICh2ZWN0eXBlX291dCkpCiAgICAgICB8fCAh SU5URUdSQUxfVFlQRV9QIChUUkVFX1RZUEUgKHZlY3R5cGVfaW4pKSkKICAgICByZXR1cm4g ZmFsc2U7CiAKLSAgdHJlZV9jb2RlIGNvZGU7CisgIGNvZGVfaGVscGVyIGNvZGU7CiAgIGlu dCBtdWx0aV9zdGVwX2N2dCA9IDA7CiAgIGF1dG9fdmVjIDx0cmVlLCA4PiBpbnRlcm1fdHlw ZXM7CiAgIGlmICghc3VwcG9ydGFibGVfbmFycm93aW5nX29wZXJhdGlvbiAoTk9QX0VYUFIs IHZlY3R5cGVfb3V0LCB2ZWN0eXBlX2luLApAQCAtMzQ4MSw3ICszNDgxLDcgQEAgdmVjdG9y aXphYmxlX2NhbGwgKHZlY19pbmZvICp2aW5mbywKICAgdHJlZSBjYWxsZWUgPSBnaW1wbGVf Y2FsbF9mbmRlY2wgKHN0bXQpOwogCiAgIC8qIEZpcnN0IHRyeSB1c2luZyBhbiBpbnRlcm5h bCBmdW5jdGlvbi4gICovCi0gIHRyZWVfY29kZSBjb252ZXJ0X2NvZGUgPSBFUlJPUl9NQVJL OworICBjb2RlX2hlbHBlciBjb252ZXJ0X2NvZGUgPSBNQVhfVFJFRV9DT0RFUzsKICAgaWYg KGNmbiAhPSBDRk5fTEFTVAogICAgICAgJiYgKG1vZGlmaWVyID09IE5PTkUKIAkgIHx8ICht b2RpZmllciA9PSBOQVJST1cKQEAgLTM2NjcsOCArMzY2Nyw4IEBAIHZlY3Rvcml6YWJsZV9j YWxsICh2ZWNfaW5mbyAqdmluZm8sCiAJCQkgIGNvbnRpbnVlOwogCQkJfQogCQkgICAgICBu ZXdfdGVtcCA9IG1ha2Vfc3NhX25hbWUgKHZlY19kZXN0KTsKLQkJICAgICAgbmV3X3N0bXQg PSBnaW1wbGVfYnVpbGRfYXNzaWduIChuZXdfdGVtcCwgY29udmVydF9jb2RlLAotCQkJCQkJ ICAgICAgcHJldl9yZXMsIGhhbGZfcmVzKTsKKwkJICAgICAgbmV3X3N0bXQgPSB2ZWN0X2dp bXBsZV9idWlsZCAobmV3X3RlbXAsIGNvbnZlcnRfY29kZSwKKwkJCQkJCSAgICBwcmV2X3Jl cywgaGFsZl9yZXMpOwogCQkgICAgICB2ZWN0X2ZpbmlzaF9zdG10X2dlbmVyYXRpb24gKHZp bmZvLCBzdG10X2luZm8sCiAJCQkJCQkgICBuZXdfc3RtdCwgZ3NpKTsKIAkJICAgIH0KQEAg LTM3NTgsOCArMzc1OCw4IEBAIHZlY3Rvcml6YWJsZV9jYWxsICh2ZWNfaW5mbyAqdmluZm8s CiAJCSAgY29udGludWU7CiAJCX0KIAkgICAgICBuZXdfdGVtcCA9IG1ha2Vfc3NhX25hbWUg KHZlY19kZXN0KTsKLQkgICAgICBuZXdfc3RtdCA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKG5l d190ZW1wLCBjb252ZXJ0X2NvZGUsCi0JCQkJCSAgICAgIHByZXZfcmVzLCBoYWxmX3Jlcyk7 CisJICAgICAgbmV3X3N0bXQgPSB2ZWN0X2dpbXBsZV9idWlsZCAobmV3X3RlbXAsIGNvbnZl cnRfY29kZSwgcHJldl9yZXMsCisJCQkJCSAgICBoYWxmX3Jlcyk7CiAJICAgICAgdmVjdF9m aW5pc2hfc3RtdF9nZW5lcmF0aW9uICh2aW5mbywgc3RtdF9pbmZvLCBuZXdfc3RtdCwgZ3Np KTsKIAkgICAgfQogCSAgZWxzZQpAQCAtNDc3MSw3ICs0NzcxLDcgQEAgdmVjdG9yaXphYmxl X3NpbWRfY2xvbmVfY2FsbCAodmVjX2luZm8gKnZpbmZvLCBzdG10X3ZlY19pbmZvIHN0bXRf aW5mbywKICAgIFNUTVRfSU5GTyBpcyB0aGUgb3JpZ2luYWwgc2NhbGFyIHN0bXQgdGhhdCB3 ZSBhcmUgdmVjdG9yaXppbmcuICAqLwogCiBzdGF0aWMgZ2ltcGxlICoKLXZlY3RfZ2VuX3dp ZGVuZWRfcmVzdWx0c19oYWxmICh2ZWNfaW5mbyAqdmluZm8sIGVudW0gdHJlZV9jb2RlIGNv ZGUsCit2ZWN0X2dlbl93aWRlbmVkX3Jlc3VsdHNfaGFsZiAodmVjX2luZm8gKnZpbmZvLCBj b2RlX2hlbHBlciBjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlIHZl Y19vcHJuZDAsIHRyZWUgdmVjX29wcm5kMSwgaW50IG9wX3R5cGUsCiAJCQkgICAgICAgdHJl ZSB2ZWNfZGVzdCwgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwKIAkJCSAgICAgICBzdG10 X3ZlY19pbmZvIHN0bXRfaW5mbykKQEAgLTQ3ODAsMTIgKzQ3ODAsMTEgQEAgdmVjdF9nZW5f d2lkZW5lZF9yZXN1bHRzX2hhbGYgKHZlY19pbmZvICp2aW5mbywgZW51bSB0cmVlX2NvZGUg Y29kZSwKICAgdHJlZSBuZXdfdGVtcDsKIAogICAvKiBHZW5lcmF0ZSBoYWxmIG9mIHRoZSB3 aWRlbmVkIHJlc3VsdDogICovCi0gIGdjY19hc3NlcnQgKG9wX3R5cGUgPT0gVFJFRV9DT0RF X0xFTkdUSCAoY29kZSkpOwogICBpZiAob3BfdHlwZSAhPSBiaW5hcnlfb3ApCiAgICAgdmVj X29wcm5kMSA9IE5VTEw7Ci0gIG5ld19zdG10ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodmVj X2Rlc3QsIGNvZGUsIHZlY19vcHJuZDAsIHZlY19vcHJuZDEpOworICBuZXdfc3RtdCA9IHZl Y3RfZ2ltcGxlX2J1aWxkICh2ZWNfZGVzdCwgY2gsIHZlY19vcHJuZDAsIHZlY19vcHJuZDEp OwogICBuZXdfdGVtcCA9IG1ha2Vfc3NhX25hbWUgKHZlY19kZXN0LCBuZXdfc3RtdCk7Ci0g IGdpbXBsZV9hc3NpZ25fc2V0X2xocyAobmV3X3N0bXQsIG5ld190ZW1wKTsKKyAgZ2ltcGxl X3NldF9saHMgKG5ld19zdG10LCBuZXdfdGVtcCk7CiAgIHZlY3RfZmluaXNoX3N0bXRfZ2Vu ZXJhdGlvbiAodmluZm8sIHN0bXRfaW5mbywgbmV3X3N0bXQsIGdzaSk7CiAKICAgcmV0dXJu IG5ld19zdG10OwpAQCAtNDgwMiw3ICs0ODAxLDcgQEAgdmVjdF9jcmVhdGVfdmVjdG9yaXpl ZF9kZW1vdGlvbl9zdG10cyAodmVjX2luZm8gKnZpbmZvLCB2ZWM8dHJlZT4gKnZlY19vcHJu ZHMsCiAJCQkJICAgICAgIHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLAogCQkJCSAgICAgICB2 ZWM8dHJlZT4gJnZlY19kc3RzLAogCQkJCSAgICAgICBnaW1wbGVfc3RtdF9pdGVyYXRvciAq Z3NpLAotCQkJCSAgICAgICBzbHBfdHJlZSBzbHBfbm9kZSwgZW51bSB0cmVlX2NvZGUgY29k ZSkKKwkJCQkgICAgICAgc2xwX3RyZWUgc2xwX25vZGUsIGNvZGVfaGVscGVyIGNvZGUpCiB7 CiAgIHVuc2lnbmVkIGludCBpOwogICB0cmVlIHZvcDAsIHZvcDEsIG5ld190bXAsIHZlY19k ZXN0OwpAQCAtNDgxNCw5ICs0ODEzLDkgQEAgdmVjdF9jcmVhdGVfdmVjdG9yaXplZF9kZW1v dGlvbl9zdG10cyAodmVjX2luZm8gKnZpbmZvLCB2ZWM8dHJlZT4gKnZlY19vcHJuZHMsCiAg ICAgICAvKiBDcmVhdGUgZGVtb3Rpb24gb3BlcmF0aW9uLiAgKi8KICAgICAgIHZvcDAgPSAo KnZlY19vcHJuZHMpW2ldOwogICAgICAgdm9wMSA9ICgqdmVjX29wcm5kcylbaSArIDFdOwot ICAgICAgZ2Fzc2lnbiAqbmV3X3N0bXQgPSBnaW1wbGVfYnVpbGRfYXNzaWduICh2ZWNfZGVz dCwgY29kZSwgdm9wMCwgdm9wMSk7CisgICAgICBnaW1wbGUgKm5ld19zdG10ID0gdmVjdF9n aW1wbGVfYnVpbGQgKHZlY19kZXN0LCBjb2RlLCB2b3AwLCB2b3AxKTsKICAgICAgIG5ld190 bXAgPSBtYWtlX3NzYV9uYW1lICh2ZWNfZGVzdCwgbmV3X3N0bXQpOwotICAgICAgZ2ltcGxl X2Fzc2lnbl9zZXRfbGhzIChuZXdfc3RtdCwgbmV3X3RtcCk7CisgICAgICBnaW1wbGVfc2V0 X2xocyAobmV3X3N0bXQsIG5ld190bXApOwogICAgICAgdmVjdF9maW5pc2hfc3RtdF9nZW5l cmF0aW9uICh2aW5mbywgc3RtdF9pbmZvLCBuZXdfc3RtdCwgZ3NpKTsKIAogICAgICAgaWYg KG11bHRpX3N0ZXBfY3Z0KQpAQCAtNDg2NCw4ICs0ODYzLDggQEAgdmVjdF9jcmVhdGVfdmVj dG9yaXplZF9wcm9tb3Rpb25fc3RtdHMgKHZlY19pbmZvICp2aW5mbywKIAkJCQkJdmVjPHRy ZWU+ICp2ZWNfb3BybmRzMSwKIAkJCQkJc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sIHRyZWUg dmVjX2Rlc3QsCiAJCQkJCWdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksCi0JCQkJCWVudW0g dHJlZV9jb2RlIGNvZGUxLAotCQkJCQllbnVtIHRyZWVfY29kZSBjb2RlMiwgaW50IG9wX3R5 cGUpCisJCQkJCWNvZGVfaGVscGVyIGNoMSwKKwkJCQkJY29kZV9oZWxwZXIgY2gyLCBpbnQg b3BfdHlwZSkKIHsKICAgaW50IGk7CiAgIHRyZWUgdm9wMCwgdm9wMSwgbmV3X3RtcDEsIG5l d190bXAyOwpAQCAtNDg4MSwxMCArNDg4MCwxMCBAQCB2ZWN0X2NyZWF0ZV92ZWN0b3JpemVk X3Byb21vdGlvbl9zdG10cyAodmVjX2luZm8gKnZpbmZvLAogCXZvcDEgPSBOVUxMX1RSRUU7 CiAKICAgICAgIC8qIEdlbmVyYXRlIHRoZSB0d28gaGFsdmVzIG9mIHByb21vdGlvbiBvcGVy YXRpb24uICAqLwotICAgICAgbmV3X3N0bXQxID0gdmVjdF9nZW5fd2lkZW5lZF9yZXN1bHRz X2hhbGYgKHZpbmZvLCBjb2RlMSwgdm9wMCwgdm9wMSwKKyAgICAgIG5ld19zdG10MSA9IHZl Y3RfZ2VuX3dpZGVuZWRfcmVzdWx0c19oYWxmICh2aW5mbywgY2gxLCB2b3AwLCB2b3AxLAog CQkJCQkJIG9wX3R5cGUsIHZlY19kZXN0LCBnc2ksCiAJCQkJCQkgc3RtdF9pbmZvKTsKLSAg ICAgIG5ld19zdG10MiA9IHZlY3RfZ2VuX3dpZGVuZWRfcmVzdWx0c19oYWxmICh2aW5mbywg Y29kZTIsIHZvcDAsIHZvcDEsCisgICAgICBuZXdfc3RtdDIgPSB2ZWN0X2dlbl93aWRlbmVk X3Jlc3VsdHNfaGFsZiAodmluZm8sIGNoMiwgdm9wMCwgdm9wMSwKIAkJCQkJCSBvcF90eXBl LCB2ZWNfZGVzdCwgZ3NpLAogCQkJCQkJIHN0bXRfaW5mbyk7CiAgICAgICBpZiAoaXNfZ2lt cGxlX2NhbGwgKG5ld19zdG10MSkpCkBAIC00OTE1LDcgKzQ5MTQsNyBAQCB2ZWN0X2NyZWF0 ZV9oYWxmX3dpZGVuaW5nX3N0bXRzICh2ZWNfaW5mbyAqdmluZm8sCiAJCQkJCXZlYzx0cmVl PiAqdmVjX29wcm5kczEsCiAJCQkJCXN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLCB0cmVlIHZl Y19kZXN0LAogCQkJCQlnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpLAotCQkJCQllbnVtIHRy ZWVfY29kZSBjb2RlMSwKKwkJCQkJY29kZV9oZWxwZXIgY29kZTEsCiAJCQkJCWludCBvcF90 eXBlKQogewogICBpbnQgaTsKQEAgLTQ5NDUsMTMgKzQ5NDQsMTMgQEAgdmVjdF9jcmVhdGVf aGFsZl93aWRlbmluZ19zdG10cyAodmVjX2luZm8gKnZpbmZvLAogCSAgbmV3X3N0bXQyID0g Z2ltcGxlX2J1aWxkX2Fzc2lnbiAobmV3X3RtcDIsIE5PUF9FWFBSLCB2b3AxKTsKIAkgIHZl Y3RfZmluaXNoX3N0bXRfZ2VuZXJhdGlvbiAodmluZm8sIHN0bXRfaW5mbywgbmV3X3N0bXQy LCBnc2kpOwogCSAgLyogUGVyZm9ybSB0aGUgb3BlcmF0aW9uLiAgV2l0aCBib3RoIHZlY3Rv ciBpbnB1dHMgd2lkZW5lZC4gICovCi0JICBuZXdfc3RtdDMgPSBnaW1wbGVfYnVpbGRfYXNz aWduICh2ZWNfZGVzdCwgY29kZTEsIG5ld190bXAxLCBuZXdfdG1wMik7CisJICBuZXdfc3Rt dDMgPSB2ZWN0X2dpbXBsZV9idWlsZCAodmVjX2Rlc3QsIGNvZGUxLCBuZXdfdG1wMSwgbmV3 X3RtcDIpOwogCX0KICAgICAgIGVsc2UKIAl7CiAJICAvKiBQZXJmb3JtIHRoZSBvcGVyYXRp b24uICBXaXRoIHRoZSBzaW5nbGUgdmVjdG9yIGlucHV0IHdpZGVuZWQuICAqLwotCSAgbmV3 X3N0bXQzID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodmVjX2Rlc3QsIGNvZGUxLCBuZXdfdG1w MSwgdm9wMSk7Ci0gICAgICB9CisJICBuZXdfc3RtdDMgPSB2ZWN0X2dpbXBsZV9idWlsZCAo dmVjX2Rlc3QsIGNvZGUxLCBuZXdfdG1wMSwgdm9wMSk7CisJfQogCiAgICAgICBuZXdfdG1w MyA9IG1ha2Vfc3NhX25hbWUgKHZlY19kZXN0LCBuZXdfc3RtdDMpOwogICAgICAgZ2ltcGxl X2Fzc2lnbl9zZXRfbGhzIChuZXdfc3RtdDMsIG5ld190bXAzKTsKQEAgLTQ5ODEsOCArNDk4 MCw5IEBAIHZlY3Rvcml6YWJsZV9jb252ZXJzaW9uICh2ZWNfaW5mbyAqdmluZm8sCiAgIHRy ZWUgc2NhbGFyX2Rlc3Q7CiAgIHRyZWUgb3AwLCBvcDEgPSBOVUxMX1RSRUU7CiAgIGxvb3Bf dmVjX2luZm8gbG9vcF92aW5mbyA9IGR5bl9jYXN0IDxsb29wX3ZlY19pbmZvPiAodmluZm8p OwotICBlbnVtIHRyZWVfY29kZSBjb2RlLCBjb2RlMSA9IEVSUk9SX01BUkssIGNvZGUyID0g RVJST1JfTUFSSzsKLSAgZW51bSB0cmVlX2NvZGUgY29kZWN2dDEgPSBFUlJPUl9NQVJLLCBj b2RlY3Z0MiA9IEVSUk9SX01BUks7CisgIHRyZWVfY29kZSB0YzE7CisgIGNvZGVfaGVscGVy IGNvZGUsIGNvZGUxLCBjb2RlMjsKKyAgY29kZV9oZWxwZXIgY29kZWN2dDEgPSBFUlJPUl9N QVJLLCBjb2RlY3Z0MiA9IEVSUk9SX01BUks7CiAgIHRyZWUgbmV3X3RlbXA7CiAgIGVudW0g dmVjdF9kZWZfdHlwZSBkdFsyXSA9IHt2ZWN0X3Vua25vd25fZGVmX3R5cGUsIHZlY3RfdW5r bm93bl9kZWZfdHlwZX07CiAgIGludCBuZHRzID0gMjsKQEAgLTUwMTEsMzEgKzUwMTEsNDMg QEAgdmVjdG9yaXphYmxlX2NvbnZlcnNpb24gKHZlY19pbmZvICp2aW5mbywKICAgICAgICYm ICEgdmVjX3N0bXQpCiAgICAgcmV0dXJuIGZhbHNlOwogCi0gIGdhc3NpZ24gKnN0bXQgPSBk eW5fY2FzdCA8Z2Fzc2lnbiAqPiAoc3RtdF9pbmZvLT5zdG10KTsKLSAgaWYgKCFzdG10KQor ICBnaW1wbGUqIHN0bXQgPSBzdG10X2luZm8tPnN0bXQ7CisgIGlmICghKGlzX2dpbXBsZV9h c3NpZ24gKHN0bXQpIHx8IGlzX2dpbXBsZV9jYWxsIChzdG10KSkpCiAgICAgcmV0dXJuIGZh bHNlOwogCi0gIGlmIChUUkVFX0NPREUgKGdpbXBsZV9hc3NpZ25fbGhzIChzdG10KSkgIT0g U1NBX05BTUUpCisgIGlmIChnaW1wbGVfZ2V0X2xocyAoc3RtdCkgPT0gTlVMTF9UUkVFCisg ICAgICB8fCBUUkVFX0NPREUgKGdpbXBsZV9nZXRfbGhzIChzdG10KSkgIT0gU1NBX05BTUUp CiAgICAgcmV0dXJuIGZhbHNlOwogCi0gIGNvZGUgPSBnaW1wbGVfYXNzaWduX3Joc19jb2Rl IChzdG10KTsKLSAgaWYgKCFDT05WRVJUX0VYUFJfQ09ERV9QIChjb2RlKQotICAgICAgJiYg Y29kZSAhPSBGSVhfVFJVTkNfRVhQUgotICAgICAgJiYgY29kZSAhPSBGTE9BVF9FWFBSCi0g ICAgICAmJiBjb2RlICE9IFdJREVOX1BMVVNfRVhQUgotICAgICAgJiYgY29kZSAhPSBXSURF Tl9NSU5VU19FWFBSCi0gICAgICAmJiBjb2RlICE9IFdJREVOX01VTFRfRVhQUgotICAgICAg JiYgY29kZSAhPSBXSURFTl9MU0hJRlRfRVhQUikKKyAgaWYgKFRSRUVfQ09ERSAoZ2ltcGxl X2dldF9saHMgKHN0bXQpKSAhPSBTU0FfTkFNRSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAg aWYgKGlzX2dpbXBsZV9hc3NpZ24gKHN0bXQpKQorICAgIHsKKyAgICAgIGNvZGUgPSBnaW1w bGVfYXNzaWduX3Joc19jb2RlIChzdG10KTsKKyAgICAgIG9wX3R5cGUgPSBUUkVFX0NPREVf TEVOR1RIICgodHJlZV9jb2RlKSBjb2RlKTsKKyAgICB9CisgIGVsc2UgaWYgKGdpbXBsZV9j YWxsX2ludGVybmFsX3AgKHN0bXQpKQorICAgIHsKKyAgICAgIGNvZGUgPSBnaW1wbGVfY2Fs bF9pbnRlcm5hbF9mbiAoc3RtdCk7CisgICAgICBvcF90eXBlID0gZ2ltcGxlX2NhbGxfbnVt X2FyZ3MgKHN0bXQpOworICAgIH0KKyAgZWxzZQogICAgIHJldHVybiBmYWxzZTsKIAogICBi b29sIHdpZGVuX2FyaXRoID0gKGNvZGUgPT0gV0lERU5fUExVU19FWFBSCi0JCSAgICAgIHx8 IGNvZGUgPT0gV0lERU5fTUlOVVNfRVhQUgotCQkgICAgICB8fCBjb2RlID09IFdJREVOX01V TFRfRVhQUgotCQkgICAgICB8fCBjb2RlID09IFdJREVOX0xTSElGVF9FWFBSKTsKLSAgb3Bf dHlwZSA9IFRSRUVfQ09ERV9MRU5HVEggKGNvZGUpOworCQkgfHwgY29kZSA9PSBXSURFTl9N SU5VU19FWFBSCisJCSB8fCBjb2RlID09IFdJREVOX01VTFRfRVhQUgorCQkgfHwgY29kZSA9 PSBXSURFTl9MU0hJRlRfRVhQUik7CisKKyAgaWYgKCF3aWRlbl9hcml0aAorICAgICAgJiYg IUNPTlZFUlRfRVhQUl9DT0RFX1AgKGNvZGUpCisgICAgICAmJiBjb2RlICE9IEZJWF9UUlVO Q19FWFBSCisgICAgICAmJiBjb2RlICE9IEZMT0FUX0VYUFIpCisgICAgcmV0dXJuIGZhbHNl OwogCiAgIC8qIENoZWNrIHR5cGVzIG9mIGxocyBhbmQgcmhzLiAgKi8KLSAgc2NhbGFyX2Rl c3QgPSBnaW1wbGVfYXNzaWduX2xocyAoc3RtdCk7CisgIHNjYWxhcl9kZXN0ID0gZ2ltcGxl X2dldF9saHMgKHN0bXQpOwogICBsaHNfdHlwZSA9IFRSRUVfVFlQRSAoc2NhbGFyX2Rlc3Qp OwogICB2ZWN0eXBlX291dCA9IFNUTVRfVklORk9fVkVDVFlQRSAoc3RtdF9pbmZvKTsKIApA QCAtNTA3MywxMCArNTA4NSwxNCBAQCB2ZWN0b3JpemFibGVfY29udmVyc2lvbiAodmVjX2lu Zm8gKnZpbmZvLAogCiAgIGlmIChvcF90eXBlID09IGJpbmFyeV9vcCkKICAgICB7Ci0gICAg ICBnY2NfYXNzZXJ0IChjb2RlID09IFdJREVOX01VTFRfRVhQUiB8fCBjb2RlID09IFdJREVO X0xTSElGVF9FWFBSCi0JCSAgfHwgY29kZSA9PSBXSURFTl9QTFVTX0VYUFIgfHwgY29kZSA9 PSBXSURFTl9NSU5VU19FWFBSKTsKKyAgICAgIGdjY19hc3NlcnQgKGNvZGUgPT0gV0lERU5f TVVMVF9FWFBSCisJCSAgfHwgY29kZSA9PSBXSURFTl9MU0hJRlRfRVhQUgorCQkgIHx8IGNv ZGUgPT0gV0lERU5fUExVU19FWFBSCisJCSAgfHwgY29kZSA9PSBXSURFTl9NSU5VU19FWFBS KTsKKwogCi0gICAgICBvcDEgPSBnaW1wbGVfYXNzaWduX3JoczIgKHN0bXQpOworICAgICAg b3AxID0gaXNfZ2ltcGxlX2Fzc2lnbiAoc3RtdCkgPyBnaW1wbGVfYXNzaWduX3JoczIgKHN0 bXQpIDoKKwkJCQkgICAgIGdpbXBsZV9jYWxsX2FyZyAoc3RtdCwgMCk7CiAgICAgICB0cmVl IHZlY3R5cGUxX2luOwogICAgICAgaWYgKCF2ZWN0X2lzX3NpbXBsZV91c2UgKHZpbmZvLCBz dG10X2luZm8sIHNscF9ub2RlLCAxLAogCQkJICAgICAgICZvcDEsICZzbHBfb3AxLCAmZHRb MV0sICZ2ZWN0eXBlMV9pbikpCkBAIC01MTYwLDggKzUxNzYsMTMgQEAgdmVjdG9yaXphYmxl X2NvbnZlcnNpb24gKHZlY19pbmZvICp2aW5mbywKIAkgICYmIGNvZGUgIT0gRkxPQVRfRVhQ UgogCSAgJiYgIUNPTlZFUlRfRVhQUl9DT0RFX1AgKGNvZGUpKQogCXJldHVybiBmYWxzZTsK LSAgICAgIGlmIChzdXBwb3J0YWJsZV9jb252ZXJ0X29wZXJhdGlvbiAoY29kZSwgdmVjdHlw ZV9vdXQsIHZlY3R5cGVfaW4sICZjb2RlMSkpCisgICAgICBnY2NfYXNzZXJ0IChjb2RlLmlz X3RyZWVfY29kZSAoKSk7CisgICAgICBpZiAoc3VwcG9ydGFibGVfY29udmVydF9vcGVyYXRp b24gKCh0cmVlX2NvZGUpIGNvZGUsIHZlY3R5cGVfb3V0LAorCQkJCQkgdmVjdHlwZV9pbiwg JnRjMSkpCisgICAgICB7CisJY29kZTEgPSB0YzE7CiAJYnJlYWs7CisgICAgICB9CiAgICAg ICAvKiBGQUxMVEhSVSAqLwogICAgIHVuc3VwcG9ydGVkOgogICAgICAgaWYgKGR1bXBfZW5h YmxlZF9wICgpKQpAQCAtNTE3Miw5ICs1MTkzLDEyIEBAIHZlY3Rvcml6YWJsZV9jb252ZXJz aW9uICh2ZWNfaW5mbyAqdmluZm8sCiAgICAgY2FzZSBXSURFTjoKICAgICAgIGlmIChrbm93 bl9lcSAobnVuaXRzX2luLCBudW5pdHNfb3V0KSkKIAl7Ci0JICBpZiAoIXN1cHBvcnRhYmxl X2hhbGZfd2lkZW5pbmdfb3BlcmF0aW9uIChjb2RlLCB2ZWN0eXBlX291dCwKLQkJCQkJCSAg IHZlY3R5cGVfaW4sICZjb2RlMSkpCisJICBpZiAoIShjb2RlLmlzX3RyZWVfY29kZSAoKQor CQkmJiBzdXBwb3J0YWJsZV9oYWxmX3dpZGVuaW5nX29wZXJhdGlvbiAoKHRyZWVfY29kZSkg Y29kZSwKKwkJCQkJCQl2ZWN0eXBlX291dCwgdmVjdHlwZV9pbiwKKwkJCQkJCQkmdGMxKSkp CiAJICAgIGdvdG8gdW5zdXBwb3J0ZWQ7CisJICBjb2RlMSA9IHRjMTsKIAkgIGdjY19hc3Nl cnQgKCEobXVsdGlfc3RlcF9jdnQgJiYgb3BfdHlwZSA9PSBiaW5hcnlfb3ApKTsKIAkgIGJy ZWFrOwogCX0KQEAgLTUyMDgsMTQgKzUyMzIsMTcgQEAgdmVjdG9yaXphYmxlX2NvbnZlcnNp b24gKHZlY19pbmZvICp2aW5mbywKIAogCSAgaWYgKEdFVF9NT0RFX1NJWkUgKHJoc19tb2Rl KSA9PSBmbHRzeikKIAkgICAgewotCSAgICAgIGlmICghc3VwcG9ydGFibGVfY29udmVydF9v cGVyYXRpb24gKGNvZGUsIHZlY3R5cGVfb3V0LAotCQkJCQkJICBjdnRfdHlwZSwgJmNvZGVj dnQxKSkKKwkgICAgICB0YzEgPSBFUlJPUl9NQVJLOworCSAgICAgIGdjY19hc3NlcnQgKGNv ZGUuaXNfdHJlZV9jb2RlICgpKTsKKwkgICAgICBpZiAoIXN1cHBvcnRhYmxlX2NvbnZlcnRf b3BlcmF0aW9uICgodHJlZV9jb2RlKSBjb2RlLCB2ZWN0eXBlX291dCwKKwkJCQkJCSAgY3Z0 X3R5cGUsICZ0YzEpKQogCQlnb3RvIHVuc3VwcG9ydGVkOworCSAgICAgIGNvZGVjdnQxID0g dGMxOwogCSAgICB9Ci0JICBlbHNlIGlmICghc3VwcG9ydGFibGVfd2lkZW5pbmdfb3BlcmF0 aW9uICh2aW5mbywgY29kZSwgc3RtdF9pbmZvLAotCQkJCQkJICAgIHZlY3R5cGVfb3V0LCBj dnRfdHlwZSwKLQkJCQkJCSAgICAmY29kZWN2dDEsICZjb2RlY3Z0MiwKLQkJCQkJCSAgICAm bXVsdGlfc3RlcF9jdnQsCisJICBlbHNlIGlmICghc3VwcG9ydGFibGVfd2lkZW5pbmdfb3Bl cmF0aW9uICh2aW5mbywgY29kZSwKKwkJCQkJCSAgICBzdG10X2luZm8sIHZlY3R5cGVfb3V0 LAorCQkJCQkJICAgIGN2dF90eXBlLCAmY29kZWN2dDEsCisJCQkJCQkgICAgJmNvZGVjdnQy LCAmbXVsdGlfc3RlcF9jdnQsCiAJCQkJCQkgICAgJmludGVybV90eXBlcykpCiAJICAgIGNv bnRpbnVlOwogCSAgZWxzZQpAQCAtNTIyMyw4ICs1MjUwLDkgQEAgdmVjdG9yaXphYmxlX2Nv bnZlcnNpb24gKHZlY19pbmZvICp2aW5mbywKIAogCSAgaWYgKHN1cHBvcnRhYmxlX3dpZGVu aW5nX29wZXJhdGlvbiAodmluZm8sIE5PUF9FWFBSLCBzdG10X2luZm8sCiAJCQkJCSAgICAg IGN2dF90eXBlLAotCQkJCQkgICAgICB2ZWN0eXBlX2luLCAmY29kZTEsICZjb2RlMiwKLQkJ CQkJICAgICAgJm11bHRpX3N0ZXBfY3Z0LCAmaW50ZXJtX3R5cGVzKSkKKwkJCQkJICAgICAg dmVjdHlwZV9pbiwgJmNvZGUxLAorCQkJCQkgICAgICAmY29kZTIsICZtdWx0aV9zdGVwX2N2 dCwKKwkJCQkJICAgICAgJmludGVybV90eXBlcykpCiAJICAgIHsKIAkgICAgICBmb3VuZF9t b2RlID0gdHJ1ZTsKIAkgICAgICBicmVhazsKQEAgLTUyNjAsOSArNTI4OCwxMSBAQCB2ZWN0 b3JpemFibGVfY29udmVyc2lvbiAodmVjX2luZm8gKnZpbmZvLAogICAgICAgY3Z0X3R5cGUg PSBnZXRfc2FtZV9zaXplZF92ZWN0eXBlIChjdnRfdHlwZSwgdmVjdHlwZV9pbik7CiAgICAg ICBpZiAoY3Z0X3R5cGUgPT0gTlVMTF9UUkVFKQogCWdvdG8gdW5zdXBwb3J0ZWQ7Ci0gICAg ICBpZiAoIXN1cHBvcnRhYmxlX2NvbnZlcnRfb3BlcmF0aW9uIChjb2RlLCBjdnRfdHlwZSwg dmVjdHlwZV9pbiwKLQkJCQkJICAmY29kZWN2dDEpKQorICAgICAgaWYgKCFjb2RlLmlzX3Ry ZWVfY29kZSAoKQorCSAgfHwgIXN1cHBvcnRhYmxlX2NvbnZlcnRfb3BlcmF0aW9uICgodHJl ZV9jb2RlKSBjb2RlLCBjdnRfdHlwZSwKKwkJCQkJICAgICB2ZWN0eXBlX2luLCAmdGMxKSkK IAlnb3RvIHVuc3VwcG9ydGVkOworICAgICAgY29kZWN2dDEgPSB0YzE7CiAgICAgICBpZiAo c3VwcG9ydGFibGVfbmFycm93aW5nX29wZXJhdGlvbiAoTk9QX0VYUFIsIHZlY3R5cGVfb3V0 LCBjdnRfdHlwZSwKIAkJCQkJICAgJmNvZGUxLCAmbXVsdGlfc3RlcF9jdnQsCiAJCQkJCSAg ICZpbnRlcm1fdHlwZXMpKQpAQCAtNTM4MCwxMCArNTQxMCw5IEBAIHZlY3Rvcml6YWJsZV9j b252ZXJzaW9uICh2ZWNfaW5mbyAqdmluZm8sCiAgICAgICBGT1JfRUFDSF9WRUNfRUxUICh2 ZWNfb3BybmRzMCwgaSwgdm9wMCkKIAl7CiAJICAvKiBBcmd1bWVudHMgYXJlIHJlYWR5LCBj cmVhdGUgdGhlIG5ldyB2ZWN0b3Igc3RtdC4gICovCi0JICBnY2NfYXNzZXJ0IChUUkVFX0NP REVfTEVOR1RIIChjb2RlMSkgPT0gdW5hcnlfb3ApOwotCSAgZ2Fzc2lnbiAqbmV3X3N0bXQg PSBnaW1wbGVfYnVpbGRfYXNzaWduICh2ZWNfZGVzdCwgY29kZTEsIHZvcDApOworCSAgZ2lt cGxlICpuZXdfc3RtdCA9IHZlY3RfZ2ltcGxlX2J1aWxkICh2ZWNfZGVzdCwgY29kZTEsIHZv cDApOwogCSAgbmV3X3RlbXAgPSBtYWtlX3NzYV9uYW1lICh2ZWNfZGVzdCwgbmV3X3N0bXQp OwotCSAgZ2ltcGxlX2Fzc2lnbl9zZXRfbGhzIChuZXdfc3RtdCwgbmV3X3RlbXApOworCSAg Z2ltcGxlX3NldF9saHMgKG5ld19zdG10LCBuZXdfdGVtcCk7CiAJICB2ZWN0X2ZpbmlzaF9z dG10X2dlbmVyYXRpb24gKHZpbmZvLCBzdG10X2luZm8sIG5ld19zdG10LCBnc2kpOwogCiAJ ICBpZiAoc2xwX25vZGUpCkBAIC01NDEzLDE3ICs1NDQyLDE2IEBAIHZlY3Rvcml6YWJsZV9j b252ZXJzaW9uICh2ZWNfaW5mbyAqdmluZm8sCiAgICAgICBmb3IgKGkgPSBtdWx0aV9zdGVw X2N2dDsgaSA+PSAwOyBpLS0pCiAJewogCSAgdHJlZSB0aGlzX2Rlc3QgPSB2ZWNfZHN0c1tp XTsKLQkgIGVudW0gdHJlZV9jb2RlIGMxID0gY29kZTEsIGMyID0gY29kZTI7CisJICBjb2Rl X2hlbHBlciBjMSA9IGNvZGUxLCBjMiA9IGNvZGUyOwogCSAgaWYgKGkgPT0gMCAmJiBjb2Rl Y3Z0MiAhPSBFUlJPUl9NQVJLKQogCSAgICB7CiAJICAgICAgYzEgPSBjb2RlY3Z0MTsKIAkg ICAgICBjMiA9IGNvZGVjdnQyOwogCSAgICB9CiAJICBpZiAoa25vd25fZXEgKG51bml0c19v dXQsIG51bml0c19pbikpCi0JICAgIHZlY3RfY3JlYXRlX2hhbGZfd2lkZW5pbmdfc3RtdHMg KHZpbmZvLCAmdmVjX29wcm5kczAsCi0JCQkJCQkgICAgJnZlY19vcHJuZHMxLCBzdG10X2lu Zm8sCi0JCQkJCQkgICAgdGhpc19kZXN0LCBnc2ksCi0JCQkJCQkgICAgYzEsIG9wX3R5cGUp OworCSAgICB2ZWN0X2NyZWF0ZV9oYWxmX3dpZGVuaW5nX3N0bXRzICh2aW5mbywgJnZlY19v cHJuZHMwLCAmdmVjX29wcm5kczEsCisJCQkJCSAgICAgc3RtdF9pbmZvLCB0aGlzX2Rlc3Qs IGdzaSwgYzEsCisJCQkJCSAgICAgb3BfdHlwZSk7CiAJICBlbHNlCiAJICAgIHZlY3RfY3Jl YXRlX3ZlY3Rvcml6ZWRfcHJvbW90aW9uX3N0bXRzICh2aW5mbywgJnZlY19vcHJuZHMwLAog CQkJCQkJICAgICZ2ZWNfb3BybmRzMSwgc3RtdF9pbmZvLApAQCAtNTQzNiw5ICs1NDY0LDgg QEAgdmVjdG9yaXphYmxlX2NvbnZlcnNpb24gKHZlY19pbmZvICp2aW5mbywKIAkgIGdpbXBs ZSAqbmV3X3N0bXQ7CiAJICBpZiAoY3Z0X3R5cGUpCiAJICAgIHsKLQkgICAgICBnY2NfYXNz ZXJ0IChUUkVFX0NPREVfTEVOR1RIIChjb2RlY3Z0MSkgPT0gdW5hcnlfb3ApOwogCSAgICAg IG5ld190ZW1wID0gbWFrZV9zc2FfbmFtZSAodmVjX2Rlc3QpOwotCSAgICAgIG5ld19zdG10 ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAobmV3X3RlbXAsIGNvZGVjdnQxLCB2b3AwKTsKKwkg ICAgICBuZXdfc3RtdCA9IHZlY3RfZ2ltcGxlX2J1aWxkIChuZXdfdGVtcCwgY29kZWN2dDEs IHZvcDApOwogCSAgICAgIHZlY3RfZmluaXNoX3N0bXRfZ2VuZXJhdGlvbiAodmluZm8sIHN0 bXRfaW5mbywgbmV3X3N0bXQsIGdzaSk7CiAJICAgIH0KIAkgIGVsc2UKQEAgLTU0NjIsMTAg KzU0ODksOCBAQCB2ZWN0b3JpemFibGVfY29udmVyc2lvbiAodmVjX2luZm8gKnZpbmZvLAog ICAgICAgaWYgKGN2dF90eXBlKQogCUZPUl9FQUNIX1ZFQ19FTFQgKHZlY19vcHJuZHMwLCBp LCB2b3AwKQogCSAgewotCSAgICBnY2NfYXNzZXJ0IChUUkVFX0NPREVfTEVOR1RIIChjb2Rl Y3Z0MSkgPT0gdW5hcnlfb3ApOwogCSAgICBuZXdfdGVtcCA9IG1ha2Vfc3NhX25hbWUgKHZl Y19kZXN0KTsKLQkgICAgZ2Fzc2lnbiAqbmV3X3N0bXQKLQkgICAgICA9IGdpbXBsZV9idWls ZF9hc3NpZ24gKG5ld190ZW1wLCBjb2RlY3Z0MSwgdm9wMCk7CisJICAgIGdpbXBsZSAqbmV3 X3N0bXQgPSB2ZWN0X2dpbXBsZV9idWlsZCAobmV3X3RlbXAsIGNvZGVjdnQxLCB2b3AwKTsK IAkgICAgdmVjdF9maW5pc2hfc3RtdF9nZW5lcmF0aW9uICh2aW5mbywgc3RtdF9pbmZvLCBu ZXdfc3RtdCwgZ3NpKTsKIAkgICAgdmVjX29wcm5kczBbaV0gPSBuZXdfdGVtcDsKIAkgIH0K QEAgLTEyMjk0LDkgKzEyMzE5LDExIEBAIHZlY3RfbWF5YmVfdXBkYXRlX3NscF9vcF92ZWN0 eXBlIChzbHBfdHJlZSBvcCwgdHJlZSB2ZWN0eXBlKQogCiBib29sCiBzdXBwb3J0YWJsZV93 aWRlbmluZ19vcGVyYXRpb24gKHZlY19pbmZvICp2aW5mbywKLQkJCQllbnVtIHRyZWVfY29k ZSBjb2RlLCBzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywKKwkJCQljb2RlX2hlbHBlciBjb2Rl LAorCQkJCXN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLAogCQkJCXRyZWUgdmVjdHlwZV9vdXQs IHRyZWUgdmVjdHlwZV9pbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51 bSB0cmVlX2NvZGUgKmNvZGUxLCBlbnVtIHRyZWVfY29kZSAqY29kZTIsCisJCQkJY29kZV9o ZWxwZXIgKmNvZGUxLAorCQkJCWNvZGVfaGVscGVyICpjb2RlMiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICptdWx0aV9zdGVwX2N2dCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdmVjPHRyZWU+ICppbnRlcm1fdHlwZXMpCiB7CkBAIC0xMjMw Nyw3ICsxMjMzNCw3IEBAIHN1cHBvcnRhYmxlX3dpZGVuaW5nX29wZXJhdGlvbiAodmVjX2lu Zm8gKnZpbmZvLAogICBvcHRhYiBvcHRhYjEsIG9wdGFiMjsKICAgdHJlZSB2ZWN0eXBlID0g dmVjdHlwZV9pbjsKICAgdHJlZSB3aWRlX3ZlY3R5cGUgPSB2ZWN0eXBlX291dDsKLSAgZW51 bSB0cmVlX2NvZGUgYzEsIGMyOworICB0cmVlX2NvZGUgYzEgPSBNQVhfVFJFRV9DT0RFUywg YzIgPSBNQVhfVFJFRV9DT0RFUzsKICAgaW50IGk7CiAgIHRyZWUgcHJldl90eXBlLCBpbnRl cm1lZGlhdGVfdHlwZTsKICAgbWFjaGluZV9tb2RlIGludGVybWVkaWF0ZV9tb2RlLCBwcmV2 X21vZGU7CkBAIC0xMjMxNyw4ICsxMjM0NCwxMiBAQCBzdXBwb3J0YWJsZV93aWRlbmluZ19v cGVyYXRpb24gKHZlY19pbmZvICp2aW5mbywKICAgaWYgKGxvb3BfaW5mbykKICAgICB2ZWN0 X2xvb3AgPSBMT09QX1ZJTkZPX0xPT1AgKGxvb3BfaW5mbyk7CiAKLSAgc3dpdGNoIChjb2Rl KQorICBzd2l0Y2ggKGNvZGUuc2FmZV9hc190cmVlX2NvZGUgKCkpCiAgICAgeworICAgIGNh c2UgTUFYX1RSRUVfQ09ERVM6CisgICAgICAvKiBEb24ndCBzZXQgYzEgYW5kIGMyIGlmIGNv ZGUgaXMgbm90IGEgdHJlZV9jb2RlLiAgKi8KKyAgICAgIGJyZWFrOworCiAgICAgY2FzZSBX SURFTl9NVUxUX0VYUFI6CiAgICAgICAvKiBUaGUgcmVzdWx0IG9mIGEgdmVjdG9yaXplZCB3 aWRlbmluZyBvcGVyYXRpb24gdXN1YWxseSByZXF1aXJlcwogCSB0d28gdmVjdG9ycyAoYmVj YXVzZSB0aGUgd2lkZW5lZCByZXN1bHRzIGRvIG5vdCBmaXQgaW50byBvbmUgdmVjdG9yKS4K QEAgLTEyMzU4LDggKzEyMzg5LDkgQEAgc3VwcG9ydGFibGVfd2lkZW5pbmdfb3BlcmF0aW9u ICh2ZWNfaW5mbyAqdmluZm8sCiAJICAmJiAhbmVzdGVkX2luX3ZlY3RfbG9vcF9wICh2ZWN0 X2xvb3AsIHN0bXRfaW5mbykKIAkgICYmIHN1cHBvcnRhYmxlX3dpZGVuaW5nX29wZXJhdGlv biAodmluZm8sIFZFQ19XSURFTl9NVUxUX0VWRU5fRVhQUiwKIAkJCQkJICAgICBzdG10X2lu Zm8sIHZlY3R5cGVfb3V0LAotCQkJCQkgICAgIHZlY3R5cGVfaW4sIGNvZGUxLCBjb2RlMiwK LQkJCQkJICAgICBtdWx0aV9zdGVwX2N2dCwgaW50ZXJtX3R5cGVzKSkKKwkJCQkJICAgICB2 ZWN0eXBlX2luLCBjb2RlMSwKKwkJCQkJICAgICBjb2RlMiwgbXVsdGlfc3RlcF9jdnQsCisJ CQkJCSAgICAgaW50ZXJtX3R5cGVzKSkKICAgICAgICAgewogICAgICAgICAgIC8qIEVsZW1l bnRzIGluIGEgdmVjdG9yIHdpdGggdmVjdF91c2VkX2J5X3JlZHVjdGlvbiBwcm9wZXJ0eSBj YW5ub3QKICAgICAgICAgICAgICBiZSByZW9yZGVyZWQgaWYgdGhlIHVzZSBjaGFpbiB3aXRo IHRoaXMgcHJvcGVydHkgZG9lcyBub3QgaGF2ZSB0aGUKQEAgLTEyNDM1LDcgKzEyNDY3LDcg QEAgc3VwcG9ydGFibGVfd2lkZW5pbmdfb3BlcmF0aW9uICh2ZWNfaW5mbyAqdmluZm8sCiAg ICAgICBvcHRhYjEgPSBvcHRhYl9mb3JfdHJlZV9jb2RlIChjMSwgdmVjdHlwZV9vdXQsIG9w dGFiX2RlZmF1bHQpOwogICAgICAgb3B0YWIyID0gb3B0YWJfZm9yX3RyZWVfY29kZSAoYzIs IHZlY3R5cGVfb3V0LCBvcHRhYl9kZWZhdWx0KTsKICAgICB9Ci0gIGVsc2UgaWYgKENPTlZF UlRfRVhQUl9DT0RFX1AgKGNvZGUpCisgIGVsc2UgaWYgKENPTlZFUlRfRVhQUl9DT0RFX1Ag KGNvZGUuc2FmZV9hc190cmVlX2NvZGUgKCkpCiAJICAgJiYgVkVDVE9SX0JPT0xFQU5fVFlQ RV9QICh3aWRlX3ZlY3R5cGUpCiAJICAgJiYgVkVDVE9SX0JPT0xFQU5fVFlQRV9QICh2ZWN0 eXBlKQogCSAgICYmIFRZUEVfTU9ERSAod2lkZV92ZWN0eXBlKSA9PSBUWVBFX01PREUgKHZl Y3R5cGUpCkBAIC0xMjQ2MCw4ICsxMjQ5MiwxMiBAQCBzdXBwb3J0YWJsZV93aWRlbmluZ19v cGVyYXRpb24gKHZlY19pbmZvICp2aW5mbywKICAgICAgICB8fCAoaWNvZGUyID0gb3B0YWJf aGFuZGxlciAob3B0YWIyLCB2ZWNfbW9kZSkpID09IENPREVfRk9SX25vdGhpbmcpCiAgICAg cmV0dXJuIGZhbHNlOwogCi0gICpjb2RlMSA9IGMxOwotICAqY29kZTIgPSBjMjsKKyAgaWYg KGNvZGUuaXNfdHJlZV9jb2RlICgpKQorICB7CisgICAgKmNvZGUxID0gYzE7CisgICAgKmNv ZGUyID0gYzI7CisgIH0KKwogCiAgIGlmIChpbnNuX2RhdGFbaWNvZGUxXS5vcGVyYW5kWzBd Lm1vZGUgPT0gVFlQRV9NT0RFICh3aWRlX3ZlY3R5cGUpCiAgICAgICAmJiBpbnNuX2RhdGFb aWNvZGUyXS5vcGVyYW5kWzBdLm1vZGUgPT0gVFlQRV9NT0RFICh3aWRlX3ZlY3R5cGUpKQpA QCAtMTI0ODIsNyArMTI1MTgsNyBAQCBzdXBwb3J0YWJsZV93aWRlbmluZ19vcGVyYXRpb24g KHZlY19pbmZvICp2aW5mbywKICAgcHJldl90eXBlID0gdmVjdHlwZTsKICAgcHJldl9tb2Rl ID0gdmVjX21vZGU7CiAKLSAgaWYgKCFDT05WRVJUX0VYUFJfQ09ERV9QIChjb2RlKSkKKyAg aWYgKCFDT05WRVJUX0VYUFJfQ09ERV9QIChjb2RlLnNhZmVfYXNfdHJlZV9jb2RlICgpKSkK ICAgICByZXR1cm4gZmFsc2U7CiAKICAgLyogV2UgYXNzdW1lIGhlcmUgdGhhdCB0aGVyZSB3 aWxsIG5vdCBiZSBtb3JlIHRoYW4gTUFYX0lOVEVSTV9DVlRfU1RFUFMKQEAgLTEyNTgwLDkg KzEyNjE2LDkgQEAgc3VwcG9ydGFibGVfd2lkZW5pbmdfb3BlcmF0aW9uICh2ZWNfaW5mbyAq dmluZm8sCiAgICBuYXJyb3dpbmcgb3BlcmF0aW9uIChzaG9ydCBpbiB0aGUgYWJvdmUgZXhh bXBsZSkuICAgKi8KIAogYm9vbAotc3VwcG9ydGFibGVfbmFycm93aW5nX29wZXJhdGlvbiAo ZW51bSB0cmVlX2NvZGUgY29kZSwKK3N1cHBvcnRhYmxlX25hcnJvd2luZ19vcGVyYXRpb24g KGNvZGVfaGVscGVyIGNvZGUsCiAJCQkJIHRyZWUgdmVjdHlwZV9vdXQsIHRyZWUgdmVjdHlw ZV9pbiwKLQkJCQkgZW51bSB0cmVlX2NvZGUgKmNvZGUxLCBpbnQgKm11bHRpX3N0ZXBfY3Z0 LAorCQkJCSBjb2RlX2hlbHBlciAqY29kZTEsIGludCAqbXVsdGlfc3RlcF9jdnQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWM8dHJlZT4gKmludGVybV90eXBlcykK IHsKICAgbWFjaGluZV9tb2RlIHZlY19tb2RlOwpAQCAtMTI1OTcsOCArMTI2MzMsMTEgQEAg c3VwcG9ydGFibGVfbmFycm93aW5nX29wZXJhdGlvbiAoZW51bSB0cmVlX2NvZGUgY29kZSwK ICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBuX2VsdHM7CiAgIGJvb2wgdW5zOwogCisgIGlm ICghY29kZS5pc190cmVlX2NvZGUgKCkpCisgICAgcmV0dXJuIGZhbHNlOworCiAgICptdWx0 aV9zdGVwX2N2dCA9IDA7Ci0gIHN3aXRjaCAoY29kZSkKKyAgc3dpdGNoICgodHJlZV9jb2Rl KSBjb2RlKQogICAgIHsKICAgICBDQVNFX0NPTlZFUlQ6CiAgICAgICBjMSA9IFZFQ19QQUNL X1RSVU5DX0VYUFI7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0b3JpemVyLmggYi9nY2Mv dHJlZS12ZWN0b3JpemVyLmgKaW5kZXggOWNmMmZiMjNmZTM5N2I0NjdkODlhYTdjYzVlYmVh YTI5M2VkNGNjZS4uZjIxNWNkMDYzOWJjZjgwM2M5ZDA1NTRjZmRjNTc4MjM0MzE5OTFkNSAx MDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVjdG9yaXplci5oCisrKyBiL2djYy90cmVlLXZlY3Rv cml6ZXIuaApAQCAtMjEzOSwxMyArMjEzOSwxMiBAQCBleHRlcm4gYm9vbCB2ZWN0X2lzX3Np bXBsZV91c2UgKHZlY19pbmZvICosIHN0bXRfdmVjX2luZm8sIHNscF90cmVlLAogCQkJCWVu dW0gdmVjdF9kZWZfdHlwZSAqLAogCQkJCXRyZWUgKiwgc3RtdF92ZWNfaW5mbyAqID0gTlVM TCk7CiBleHRlcm4gYm9vbCB2ZWN0X21heWJlX3VwZGF0ZV9zbHBfb3BfdmVjdHlwZSAoc2xw X3RyZWUsIHRyZWUpOwotZXh0ZXJuIGJvb2wgc3VwcG9ydGFibGVfd2lkZW5pbmdfb3BlcmF0 aW9uICh2ZWNfaW5mbyAqLAotCQkJCQkgICAgZW51bSB0cmVlX2NvZGUsIHN0bXRfdmVjX2lu Zm8sCi0JCQkJCSAgICB0cmVlLCB0cmVlLCBlbnVtIHRyZWVfY29kZSAqLAotCQkJCQkgICAg ZW51bSB0cmVlX2NvZGUgKiwgaW50ICosCi0JCQkJCSAgICB2ZWM8dHJlZT4gKik7Ci1leHRl cm4gYm9vbCBzdXBwb3J0YWJsZV9uYXJyb3dpbmdfb3BlcmF0aW9uIChlbnVtIHRyZWVfY29k ZSwgdHJlZSwgdHJlZSwKLQkJCQkJICAgICBlbnVtIHRyZWVfY29kZSAqLCBpbnQgKiwKK2V4 dGVybiBib29sIHN1cHBvcnRhYmxlX3dpZGVuaW5nX29wZXJhdGlvbiAodmVjX2luZm8qLCBj b2RlX2hlbHBlciwKKwkJCQkJICAgIHN0bXRfdmVjX2luZm8sIHRyZWUsIHRyZWUsCisJCQkJ CSAgICBjb2RlX2hlbHBlciosIGNvZGVfaGVscGVyKiwKKwkJCQkJICAgIGludCosIHZlYzx0 cmVlPiAqKTsKK2V4dGVybiBib29sIHN1cHBvcnRhYmxlX25hcnJvd2luZ19vcGVyYXRpb24g KGNvZGVfaGVscGVyLCB0cmVlLCB0cmVlLAorCQkJCQkgICAgIGNvZGVfaGVscGVyICosIGlu dCAqLAogCQkJCQkgICAgIHZlYzx0cmVlPiAqKTsKIAogZXh0ZXJuIHVuc2lnbmVkIHJlY29y ZF9zdG10X2Nvc3QgKHN0bXRfdmVjdG9yX2Zvcl9jb3N0ICosIGludCwKQEAgLTI1ODMsNCAr MjU4Miw3IEBAIHZlY3RfaXNfaW50ZWdlcl90cnVuY2F0aW9uIChzdG10X3ZlY19pbmZvIHN0 bXRfaW5mbykKIAkgICYmIFRZUEVfUFJFQ0lTSU9OIChsaHNfdHlwZSkgPCBUWVBFX1BSRUNJ U0lPTiAocmhzX3R5cGUpKTsKIH0KIAorLyogQnVpbGQgYSBHSU1QTEVfQVNTSUdOIG9yIEdJ TVBMRV9DQUxMIHdpdGggdGhlIHRyZWVfY29kZSwKKyAgIG9yIGludGVybmFsX2ZuIGNvbnRh aW5lZCBpbiBjaCwgcmVzcGVjdGl2ZWx5LiAgKi8KK2dpbXBsZSAqIHZlY3RfZ2ltcGxlX2J1 aWxkICh0cmVlLCBjb2RlX2hlbHBlciwgdHJlZSwgdHJlZSA9IE5VTExfVFJFRSk7CiAjZW5k aWYgIC8qIEdDQ19UUkVFX1ZFQ1RPUklaRVJfSCAgKi8KZGlmZiAtLWdpdCBhL2djYy90cmVl LmggYi9nY2MvdHJlZS5oCmluZGV4IDBiNzI2NjNlNmExYTk0NDA2MTI3ZjYyNTM0NjBmNDk4 YjdhM2VhOWMuLjZkY2IyOGViYzFkZjQ1NmUzNzk4YjhmMGI0M2JhZTQyYzE0NWQ0M2QgMTAw NjQ0Ci0tLSBhL2djYy90cmVlLmgKKysrIGIvZ2NjL3RyZWUuaApAQCAtOTMsNiArOTMsOCBA QCBwdWJsaWM6CiAgIGJvb2wgaXNfaW50ZXJuYWxfZm4gKCkgY29uc3Q7CiAgIGJvb2wgaXNf YnVpbHRpbl9mbiAoKSBjb25zdDsKICAgaW50IGdldF9yZXAgKCkgY29uc3QgeyByZXR1cm4g cmVwOyB9CisgIHRyZWVfY29kZSBzYWZlX2FzX3RyZWVfY29kZSAoKSBjb25zdDsKKyAgY29t YmluZWRfZm4gc2FmZV9hc19mbl9jb2RlICgpIGNvbnN0OwogICBib29sIG9wZXJhdG9yPT0g KGNvbnN0IGNvZGVfaGVscGVyICZvdGhlcikgeyByZXR1cm4gcmVwID09IG90aGVyLnJlcDsg fQogICBib29sIG9wZXJhdG9yIT0gKGNvbnN0IGNvZGVfaGVscGVyICZvdGhlcikgeyByZXR1 cm4gcmVwICE9IG90aGVyLnJlcDsgfQogICBib29sIG9wZXJhdG9yPT0gKHRyZWVfY29kZSBj KSB7IHJldHVybiByZXAgPT0gY29kZV9oZWxwZXIgKGMpLnJlcDsgfQpAQCAtMTAyLDYgKzEw NCwyNSBAQCBwcml2YXRlOgogICBpbnQgcmVwOwogfTsKIAorLyogSGVscGVyIGZ1bmN0aW9u IHRoYXQgcmV0dXJucyB0aGUgdHJlZV9jb2RlIHJlcHJlc2VudGF0aW9uIG9mIFRISVMKKyAg IGNvZGVfaGVscGVyIGlmIGl0IGlzIGEgdHJlZV9jb2RlIGFuZCBNQVhfVFJFRV9DT0RFUyBv dGhlcndpc2UuICBUaGlzIGlzCisgICB1c2VmdWwgd2hlbiBwYXNzaW5nIGEgY29kZV9oZWxw ZXIgdG8gYSB0cmVlX2NvZGUgb25seSBjaGVjay4gICovCisKK2lubGluZSB0cmVlX2NvZGUK K2NvZGVfaGVscGVyOjpzYWZlX2FzX3RyZWVfY29kZSAoKSBjb25zdAoreworICByZXR1cm4g aXNfdHJlZV9jb2RlICgpID8gKHRyZWVfY29kZSkgKnRoaXMgOiBNQVhfVFJFRV9DT0RFUzsK K30KKworLyogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY29tYmluZWRfZm4g cmVwcmVzZW50YXRpb24gb2YgVEhJUworICAgY29kZV9oZWxwZXIgaWYgaXQgaXMgYSBmbl9j b2RlIGFuZCBDRk5fTEFTVCBvdGhlcndpc2UuICBUaGlzIGlzIHVzZWZ1bCB3aGVuCisgICBw YXNzaW5nIGEgY29kZV9oZWxwZXIgdG8gYSBjb21iaW5lZF9mbiBvbmx5IGNoZWNrLiAgKi8K KworaW5saW5lIGNvbWJpbmVkX2ZuCitjb2RlX2hlbHBlcjo6c2FmZV9hc19mbl9jb2RlICgp IGNvbnN0IHsKKyAgcmV0dXJuIGlzX2ZuX2NvZGUgKCkgPyAoY29tYmluZWRfZm4pICp0aGlz IDogQ0ZOX0xBU1Q7Cit9CisKIGlubGluZSBjb2RlX2hlbHBlcjo6b3BlcmF0b3IgaW50ZXJu YWxfZm4gKCkgY29uc3QKIHsKICAgcmV0dXJuIGFzX2ludGVybmFsX2ZuIChjb21iaW5lZF9m biAoKnRoaXMpKTsK --------------XYk65tlc4oBxah29mn8gCog5--