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 7AAC738582BF for ; Mon, 8 Aug 2022 14:07:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7AAC738582BF 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 D300B1596; Mon, 8 Aug 2022 07:07:03 -0700 (PDT) Received: from [10.1.35.127] (E121495.arm.com [10.1.35.127]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 4D43A3F5A1; Mon, 8 Aug 2022 07:07:02 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------05gJsynyansKBraapcLVjddB" Message-ID: <8f805fb1-d4ae-b0e3-ff26-57fd2c1fc1f7@arm.com> Date: Mon, 8 Aug 2022 15:06:56 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: [PATCH] Teach vectorizer to deal with bitfield accesses (was: [RFC] Teach vectorizer to deal with bitfield reads) Content-Language: en-US To: Richard Biener Cc: Jakub Jelinek , Richard Sandiford , "gcc-patches@gcc.gnu.org" References: <4a6f2350-f070-1473-63a5-3232968d3a89@arm.com> <4ea91767-de43-9d30-5bd2-a9a0759760c7@arm.com> <69abe824-94f5-95b5-fb7f-6fa076973e05@arm.com> From: "Andre Vieira (lists)" In-Reply-To: X-Spam-Status: No, score=-21.4 required=5.0 tests=BAYES_00, BODY_8BITS, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, KAM_LOTSOFHASH, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Aug 2022 14:07:08 -0000 This is a multi-part message in MIME format. --------------05gJsynyansKBraapcLVjddB Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi, So I've changed the approach from the RFC as suggested, moving the bitfield lowering to the if-convert pass. So to reiterate, ifcvt will lower COMPONENT_REF's with DECL_BIT_FIELD field's to either BIT_FIELD_REF if they are reads or BIT_INSERT_EXPR if they are writes, using loads and writes of 'representatives' that are big enough to contain the bitfield value. In vect_recog I added two patterns to replace these BIT_FIELD_REF and BIT_INSERT_EXPR with shift's and masks as appropriate. I'd like to see if it was possible to remove the 'load' part of a BIT_INSERT_EXPR if the representative write didn't change any relevant bits.  For example: struct s{ int dont_care; char a : 3; }; s.a = ; Should not require a load & write cycle, in fact it wouldn't even require any masking either. Though to achieve this we'd need to make sure the representative didn't overlap with any other field. Any suggestions on how to do this would be great, though I don't think we need to wait for that, as that's merely a nice-to-have optimization I guess? I am not sure where I should 'document' this change of behavior to ifcvt, and/or we should change the name of the pass, since it's doing more than if-conversion now? Bootstrapped and regression tested this patch on aarch64-none-linux-gnu. gcc/ChangeLog: 2022-08-08  Andre Vieira          * tree-if-conv.cc (includes): Add expr.h and langhooks.h to list of includes.         (need_to_lower_bitfields): New static bool.         (need_to_ifcvt): Likewise.         (version_loop_for_if_conversion): Adapt to work for bitfield lowering-only path.         (bitfield_data_t): New typedef.         (get_bitfield_data): New function.         (lower_bitfield): New function.         (bitfields_to_lower_p): New function.         (tree_if_conversion): Change to lower-bitfields too.         * tree-vect-data-refs.cc (vect_find_stmt_data_reference): Modify dump message to be more accurate.         * tree-vect-patterns.cc (includes): Add gimplify-me.h include.         (vect_recog_bitfield_ref_pattern): New function.         (vect_recog_bit_insert_pattern): New function.         (vect_vect_recog_func_ptrs): Add two new patterns. gcc/testsuite/ChangeLog: 2022-08-08  Andre Vieira          * gcc.dg/vect/vect-bitfield-read-1.c: New test.         * gcc.dg/vect/vect-bitfield-read-2.c: New test.         * gcc.dg/vect/vect-bitfield-read-3.c: New test.         * gcc.dg/vect/vect-bitfield-read-4.c: New test.         * gcc.dg/vect/vect-bitfield-write-1.c: New test.         * gcc.dg/vect/vect-bitfield-write-2.c: New test.         * gcc.dg/vect/vect-bitfield-write-3.c: New test. Kind regards, Andre --------------05gJsynyansKBraapcLVjddB Content-Type: text/plain; charset=UTF-8; name="vect_bitfield.patch" Content-Disposition: attachment; filename="vect_bitfield.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1iaXRmaWVsZC1y ZWFkLTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1iaXRmaWVsZC1yZWFk LTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi4wMWNmMzRmYjQ0NDg0Y2E5MjZjYTVkZTk5ZWVmNzZkZDk5 YjY5ZTkyCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92 ZWN0LWJpdGZpZWxkLXJlYWQtMS5jCkBAIC0wLDAgKzEsNDAgQEAKKy8qIHsgZGctcmVxdWly ZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5o PgorI2luY2x1ZGUgInRyZWUtdmVjdC5oIgorCitleHRlcm4gdm9pZCBhYm9ydCh2b2lkKTsK Kworc3RydWN0IHMgeyBpbnQgaSA6IDMxOyB9OworCisjZGVmaW5lIEVMVDAgezB9CisjZGVm aW5lIEVMVDEgezF9CisjZGVmaW5lIEVMVDIgezJ9CisjZGVmaW5lIEVMVDMgezN9CisjZGVm aW5lIE4gMzIKKyNkZWZpbmUgUkVTIDQ4CitzdHJ1Y3QgcyBBW05dCisgID0geyBFTFQwLCBF TFQxLCBFTFQyLCBFTFQzLCBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzLAorICAgICAgRUxUMCwg RUxUMSwgRUxUMiwgRUxUMywgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywKKyAgICAgIEVMVDAs IEVMVDEsIEVMVDIsIEVMVDMsIEVMVDAsIEVMVDEsIEVMVDIsIEVMVDMsCisgICAgICBFTFQw LCBFTFQxLCBFTFQyLCBFTFQzLCBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzfTsKKworaW50IF9f YXR0cmlidXRlX18gKChub2lwYSkpCitmKHN0cnVjdCBzICpwdHIsIHVuc2lnbmVkIG4pIHsK KyAgICBpbnQgcmVzID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKKyAg ICAgIHJlcyArPSBwdHJbaV0uaTsKKyAgICByZXR1cm4gcmVzOworfQorCitpbnQgbWFpbiAo dm9pZCkKK3sKKyAgY2hlY2tfdmVjdCAoKTsKKworICBpZiAoZigmQVswXSwgTikgIT0gUkVT KQorICAgIGFib3J0ICgpOworCisgIHJldHVybiAwOworfQorCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6ZWQgMSBsb29wcyIgMSAidmVjdCIgfSB9 ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0Zmll bGQtcmVhZC0yLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQt cmVhZC0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWE0YTE1NzljMTQ3OGI5NDA3YWQyMWIxOWU4ZmJk Y2E5ZjY3NGI0MgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3QvdmVjdC1iaXRmaWVsZC1yZWFkLTIuYwpAQCAtMCwwICsxLDQzIEBACisvKiB7IGRnLXJl cXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovCisKKyNpbmNsdWRlIDxzdGRh cmcuaD4KKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCIKKworZXh0ZXJuIHZvaWQgYWJvcnQodm9p ZCk7CisKK3N0cnVjdCBzIHsKKyAgICB1bnNpZ25lZCBpIDogMzE7CisgICAgY2hhciBhIDog NDsKK307CisKKyNkZWZpbmUgTiAzMgorI2RlZmluZSBFTFQwIHsweDdGRkZGRkZGVUwsIDB9 CisjZGVmaW5lIEVMVDEgezB4N0ZGRkZGRkZVTCwgMX0KKyNkZWZpbmUgRUxUMiB7MHg3RkZG RkZGRlVMLCAyfQorI2RlZmluZSBFTFQzIHsweDdGRkZGRkZGVUwsIDN9CisjZGVmaW5lIFJF UyA0OAorc3RydWN0IHMgQVtOXQorICA9IHsgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywgRUxU MCwgRUxUMSwgRUxUMiwgRUxUMywKKyAgICAgIEVMVDAsIEVMVDEsIEVMVDIsIEVMVDMsIEVM VDAsIEVMVDEsIEVMVDIsIEVMVDMsCisgICAgICBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzLCBF TFQwLCBFTFQxLCBFTFQyLCBFTFQzLAorICAgICAgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywg RUxUMCwgRUxUMSwgRUxUMiwgRUxUM307CisKK2ludCBfX2F0dHJpYnV0ZV9fICgobm9pcGEp KQorZihzdHJ1Y3QgcyAqcHRyLCB1bnNpZ25lZCBuKSB7CisgICAgaW50IHJlcyA9IDA7Cisg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICByZXMgKz0gcHRyW2ldLmE7 CisgICAgcmV0dXJuIHJlczsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGNoZWNrX3Zl Y3QgKCk7CisKKyAgaWYgKGYoJkFbMF0sIE4pICE9IFJFUykKKyAgICBhYm9ydCAoKTsKKwor ICByZXR1cm4gMDsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3QiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJpdGZpZWxkLXJlYWQtMy5jIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJpdGZpZWxkLXJlYWQtMy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAuLjIxNjYxMWEyOWZkOGJiZmJhZmRiZGI3OWQ3OTBlNTIwZjQ0YmE2NzIKLS0tIC9kZXYv bnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQtcmVh ZC0zLmMKQEAgLTAsMCArMSw0MyBAQAorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJn ZXQgdmVjdF9pbnQgfSAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSAidHJl ZS12ZWN0LmgiCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCitleHRlcm4gdm9pZCBhYm9ydCh2 b2lkKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCAgYzsKKyAgICBpbnQgIGI7Cisg ICAgYm9vbCBhIDogMTsKK30gc3RydWN0X3Q7CisKKyNkZWZpbmUgTiAxNgorI2RlZmluZSBF TFRfRiB7IDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDAgfQorI2RlZmluZSBFTFRfVCB7IDB4 RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDEgfQorCitzdHJ1Y3RfdCB2ZWN0X2ZhbHNlW05dID0g eyBFTFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiwgRUxU X0YsCisJCQkgICBFTFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiwgRUxUX0YsIEVMVF9GLCBF TFRfRiwgRUxUX0YgIH07CitzdHJ1Y3RfdCB2ZWN0X3RydWVbTl0gID0geyBFTFRfRiwgRUxU X0YsIEVMVF9ULCBFTFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiwgRUxUX0YsCisJCQkgICBF TFRfRiwgRUxUX0YsIEVMVF9ULCBFTFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiwgRUxUX0Yg IH07CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgdW5zaWduZWQgcmV0ID0gMDsKKyAgZm9yICh1 bnNpZ25lZCBpID0gMDsgaSA8IE47IGkrKykKKyAgeworICAgICAgcmV0IHw9IHZlY3RfZmFs c2VbaV0uYTsKKyAgfQorICBpZiAocmV0KQorICAgIGFib3J0ICgpOworCisgIGZvciAodW5z aWduZWQgaSA9IDA7IGkgPCBOOyBpKyspCisgIHsKKyAgICAgIHJldCB8PSB2ZWN0X3RydWVb aV0uYTsKKyAgfQorICBpZiAoIXJldCkKKyAgICBhYm9ydCAoKTsKKworICByZXR1cm4gMDsK K30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVk IDIgbG9vcHMiIDEgInZlY3QiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdmVjdC92ZWN0LWJpdGZpZWxkLXJlYWQtNC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdmVjdC92ZWN0LWJpdGZpZWxkLXJlYWQtNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViYzljNDEy ZTk2MTZhZWZjYmY0OWE0NTE4ZjE2MDMzODBhNTRiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQtcmVhZC00LmMKQEAgLTAs MCArMSw0NSBAQAorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQg fSAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSAidHJlZS12ZWN0LmgiCisK K2V4dGVybiB2b2lkIGFib3J0KHZvaWQpOworCitzdHJ1Y3QgcyB7CisgICAgdW5zaWduZWQg aSA6IDMxOworICAgIGNoYXIgeCA6IDI7CisgICAgY2hhciBhIDogNDsKK307CisKKyNkZWZp bmUgTiAzMgorI2RlZmluZSBFTFQwIHsweDdGRkZGRkZGVUwsIDMsIDB9CisjZGVmaW5lIEVM VDEgezB4N0ZGRkZGRkZVTCwgMywgMX0KKyNkZWZpbmUgRUxUMiB7MHg3RkZGRkZGRlVMLCAz LCAyfQorI2RlZmluZSBFTFQzIHsweDdGRkZGRkZGVUwsIDMsIDN9CisjZGVmaW5lIFJFUyA0 OAorc3RydWN0IHMgQVtOXQorICA9IHsgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywgRUxUMCwg RUxUMSwgRUxUMiwgRUxUMywKKyAgICAgIEVMVDAsIEVMVDEsIEVMVDIsIEVMVDMsIEVMVDAs IEVMVDEsIEVMVDIsIEVMVDMsCisgICAgICBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzLCBFTFQw LCBFTFQxLCBFTFQyLCBFTFQzLAorICAgICAgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywgRUxU MCwgRUxUMSwgRUxUMiwgRUxUM307CisKK2ludCBfX2F0dHJpYnV0ZV9fICgobm9pcGEpKQor ZihzdHJ1Y3QgcyAqcHRyLCB1bnNpZ25lZCBuKSB7CisgICAgaW50IHJlcyA9IDA7CisgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICByZXMgKz0gcHRyW2ldLmE7Cisg ICAgcmV0dXJuIHJlczsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGNoZWNrX3ZlY3Qg KCk7CisKKyAgaWYgKGYoJkFbMF0sIE4pICE9IFJFUykKKyAgICBhYm9ydCAoKTsKKworICBy ZXR1cm4gMDsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2 ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3QiIH0gfSAqLworCmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQtd3JpdGUtMS5jIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJpdGZpZWxkLXdyaXRlLTEuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwLi4xOTY4M2QyNzdiMWFkZTEwMzQ0OTYxMzZmMWQwM2JiMmI0NDY5MDBmCi0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJpdGZpZWxkLXdy aXRlLTEuYwpAQCAtMCwwICsxLDM5IEBACisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRh cmdldCB2ZWN0X2ludCB9ICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJ0 cmVlLXZlY3QuaCIKKworZXh0ZXJuIHZvaWQgYWJvcnQodm9pZCk7CisKK3N0cnVjdCBzIHsg aW50IGkgOiAzMTsgfTsKKworI2RlZmluZSBOIDMyCisjZGVmaW5lIFYgNQorc3RydWN0IHMg QVtOXTsKKwordm9pZCBfX2F0dHJpYnV0ZV9fICgobm9pcGEpKQorZihzdHJ1Y3QgcyAqcHRy LCB1bnNpZ25lZCBuKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCisgICAg ICBwdHJbaV0uaSA9IFY7Cit9CisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKG5vaXBhKSkKK2No ZWNrX2Yoc3RydWN0IHMgKnB0cikgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBO OyArK2kpCisgICAgICBpZiAocHRyW2ldLmkgIT0gVikKKwlhYm9ydCAoKTsKK30KKworaW50 IG1haW4gKHZvaWQpCit7CisgIGNoZWNrX3ZlY3QgKCk7CisgIF9fYnVpbHRpbl9tZW1zZXQg KCZBWzBdLCAwLCBzaXplb2Yoc3RydWN0IHMpICogTik7CisKKyAgZigmQVswXSwgTik7Cisg IGNoZWNrX2YgKCZBWzBdKTsKKworICByZXR1cm4gMDsKK30KKworLyogeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3QiIH0g fSAqLworCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0 ZmllbGQtd3JpdGUtMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJpdGZp ZWxkLXdyaXRlLTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNTUwZGQzNWFiNzVlYjY3ZjZlNTNmODlm YmY1NWI3MzE1ZTUwYmM5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdmVjdC92ZWN0LWJpdGZpZWxkLXdyaXRlLTIuYwpAQCAtMCwwICsxLDQyIEBACisvKiB7 IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovCisKKyNpbmNsdWRl IDxzdGRhcmcuaD4KKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCIKKworZXh0ZXJuIHZvaWQgYWJv cnQodm9pZCk7CisKK3N0cnVjdCBzIHsKKyAgICB1bnNpZ25lZCBpIDogMzE7CisgICAgY2hh ciBhIDogNDsKK307CisKKyNkZWZpbmUgTiAzMgorI2RlZmluZSBWIDUKK3N0cnVjdCBzIEFb Tl07CisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKG5vaXBhKSkKK2Yoc3RydWN0IHMgKnB0ciwg dW5zaWduZWQgbikgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQorICAgICAg cHRyW2ldLmEgPSBWOworfQorCit2b2lkIF9fYXR0cmlidXRlX18gKChub2lwYSkpCitjaGVj a19mKHN0cnVjdCBzICpwdHIpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTjsg KytpKQorICAgICAgaWYgKHB0cltpXS5hICE9IFYpCisJYWJvcnQgKCk7Cit9CisKK2ludCBt YWluICh2b2lkKQoreworICBjaGVja192ZWN0ICgpOworICBfX2J1aWx0aW5fbWVtc2V0ICgm QVswXSwgMCwgc2l6ZW9mKHN0cnVjdCBzKSAqIE4pOworCisgIGYoJkFbMF0sIE4pOworICBj aGVja19mICgmQVswXSk7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAxIGxvb3BzIiAxICJ2ZWN0IiB9IH0g Ki8KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJpdGZp ZWxkLXdyaXRlLTMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1iaXRmaWVs ZC13cml0ZS0zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzMwM2QyNjEwZmY5NzJkOTg2YmUxNzI5NjJj MTI5NjM0ZWU2NDI1NAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3ZlY3QvdmVjdC1iaXRmaWVsZC13cml0ZS0zLmMKQEAgLTAsMCArMSw0MyBAQAorLyogeyBk Zy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLworCisjaW5jbHVkZSA8 c3RkYXJnLmg+CisjaW5jbHVkZSAidHJlZS12ZWN0LmgiCisKK2V4dGVybiB2b2lkIGFib3J0 KHZvaWQpOworCitzdHJ1Y3QgcyB7CisgICAgdW5zaWduZWQgaSA6IDMxOworICAgIGNoYXIg eCA6IDI7CisgICAgY2hhciBhIDogNDsKK307CisKKyNkZWZpbmUgTiAzMgorI2RlZmluZSBW IDUKK3N0cnVjdCBzIEFbTl07CisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKG5vaXBhKSkKK2Yo c3RydWN0IHMgKnB0ciwgdW5zaWduZWQgbikgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg bjsgKytpKQorICAgICAgcHRyW2ldLmEgPSBWOworfQorCit2b2lkIF9fYXR0cmlidXRlX18g KChub2lwYSkpCitjaGVja19mKHN0cnVjdCBzICpwdHIpIHsKKyAgICBmb3IgKHVuc2lnbmVk IGkgPSAwOyBpIDwgTjsgKytpKQorICAgICAgaWYgKHB0cltpXS5hICE9IFYpCisJYWJvcnQg KCk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBjaGVja192ZWN0ICgpOworICBfX2J1 aWx0aW5fbWVtc2V0ICgmQVswXSwgMCwgc2l6ZW9mKHN0cnVjdCBzKSAqIE4pOworCisgIGYo JkFbMF0sIE4pOworICBjaGVja19mICgmQVswXSk7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8q IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAxIGxvb3Bz IiAxICJ2ZWN0IiB9IH0gKi8KKwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtaWYtY29udi5jYyBi L2djYy90cmVlLWlmLWNvbnYuY2MKaW5kZXggMWM4ZTFhNDUyMzRiOGMzNTY1ZWRhYWNkNTVh YmJlZTIzZDhlYTI0MC4uNDA3MGZhMmY0NTk3MGU1NjRmMTNkZTc5NDcwNzYxMzM1NmNiNTA0 NSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtaWYtY29udi5jYworKysgYi9nY2MvdHJlZS1pZi1j b252LmNjCkBAIC05MSw2ICs5MSw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUg Q09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAidHJlZS1wYXNzLmgiCiAjaW5jbHVk ZSAic3NhLmgiCiAjaW5jbHVkZSAiZXhwbWVkLmgiCisjaW5jbHVkZSAiZXhwci5oIgogI2lu Y2x1ZGUgIm9wdGFicy1xdWVyeS5oIgogI2luY2x1ZGUgImdpbXBsZS1wcmV0dHktcHJpbnQu aCIKICNpbmNsdWRlICJhbGlhcy5oIgpAQCAtMTIzLDYgKzEyNCw5IEBAIGFsb25nIHdpdGgg R0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAidHJl ZS12ZWN0b3JpemVyLmgiCiAjaW5jbHVkZSAidHJlZS1laC5oIgogCisvKiBGb3IgbGFuZ19o b29rcy50eXBlcy50eXBlX2Zvcl9tb2RlLiAgKi8KKyNpbmNsdWRlICJsYW5naG9va3MuaCIK KwogLyogT25seSBoYW5kbGUgUEhJcyB3aXRoIG5vIG1vcmUgYXJndW1lbnRzIHVubGVzcyB3 ZSBhcmUgYXNrZWQgdG8gYnkKICAgIHNpbWQgcHJhZ21hLiAgKi8KICNkZWZpbmUgTUFYX1BI SV9BUkdfTlVNIFwKQEAgLTE0NSw2ICsxNDksMTIgQEAgc3RhdGljIGJvb2wgbmVlZF90b19y ZXdyaXRlX3VuZGVmaW5lZDsKICAgIGJlZm9yZSBwaGlfY29udmVydGlibGVfYnlfZGVnZW5l cmF0aW5nX2FyZ3MuICAqLwogc3RhdGljIGJvb2wgYW55X2NvbXBsaWNhdGVkX3BoaTsKIAor LyogVHJ1ZSBpZiB3ZSBoYXZlIGJpdGZpZWxkIGFjY2Vzc2VzIHdlIGNhbiBsb3dlci4gICov CitzdGF0aWMgYm9vbCBuZWVkX3RvX2xvd2VyX2JpdGZpZWxkczsKKworLyogVHJ1ZSBpZiB0 aGVyZSBpcyBhbnkgaWZjdnRpbmcgdG8gYmUgZG9uZS4gICovCitzdGF0aWMgYm9vbCBuZWVk X3RvX2lmY3Z0OworCiAvKiBIYXNoIGZvciBzdHJ1Y3QgaW5uZXJtb3N0X2xvb3BfYmVoYXZp b3IuICBJdCBkZXBlbmRzIG9uIHRoZSB1c2VyIHRvCiAgICBmcmVlIHRoZSBtZW1vcnkuICAq LwogCkBAIC0yODk4LDE4ICsyOTA4LDIyIEBAIHZlcnNpb25fbG9vcF9mb3JfaWZfY29udmVy c2lvbiAoY2xhc3MgbG9vcCAqbG9vcCwgdmVjPGdpbXBsZSAqPiAqcHJlZHMpCiAgIGNsYXNz IGxvb3AgKm5ld19sb29wOwogICBnaW1wbGUgKmc7CiAgIGdpbXBsZV9zdG10X2l0ZXJhdG9y IGdzaTsKLSAgdW5zaWduZWQgaW50IHNhdmVfbGVuZ3RoOworICB1bnNpZ25lZCBpbnQgc2F2 ZV9sZW5ndGggPSAwOwogCiAgIGcgPSBnaW1wbGVfYnVpbGRfY2FsbF9pbnRlcm5hbCAoSUZO X0xPT1BfVkVDVE9SSVpFRCwgMiwKIAkJCQkgIGJ1aWxkX2ludF9jc3QgKGludGVnZXJfdHlw ZV9ub2RlLCBsb29wLT5udW0pLAogCQkJCSAgaW50ZWdlcl96ZXJvX25vZGUpOwogICBnaW1w bGVfY2FsbF9zZXRfbGhzIChnLCBjb25kKTsKIAotICAvKiBTYXZlIEJCLT5hdXggYXJvdW5k IGxvb3BfdmVyc2lvbiBhcyB0aGF0IHVzZXMgdGhlIHNhbWUgZmllbGQuICAqLwotICBzYXZl X2xlbmd0aCA9IGxvb3AtPmlubmVyID8gbG9vcC0+aW5uZXItPm51bV9ub2RlcyA6IGxvb3At Pm51bV9ub2RlczsKLSAgdm9pZCAqKnNhdmVkX3ByZWRzID0gWEFMTE9DQVZFQyAodm9pZCAq LCBzYXZlX2xlbmd0aCk7Ci0gIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzYXZlX2xlbmd0 aDsgaSsrKQotICAgIHNhdmVkX3ByZWRzW2ldID0gaWZjX2Jic1tpXS0+YXV4OworICB2b2lk ICoqc2F2ZWRfcHJlZHMgPSBOVUxMOworICBpZiAoYW55X2NvbXBsaWNhdGVkX3BoaSB8fCBu ZWVkX3RvX3ByZWRpY2F0ZSkKKyAgICB7CisgICAgICAvKiBTYXZlIEJCLT5hdXggYXJvdW5k IGxvb3BfdmVyc2lvbiBhcyB0aGF0IHVzZXMgdGhlIHNhbWUgZmllbGQuICAqLworICAgICAg c2F2ZV9sZW5ndGggPSBsb29wLT5pbm5lciA/IGxvb3AtPmlubmVyLT5udW1fbm9kZXMgOiBs b29wLT5udW1fbm9kZXM7CisgICAgICBzYXZlZF9wcmVkcyA9IFhBTExPQ0FWRUMgKHZvaWQg Kiwgc2F2ZV9sZW5ndGgpOworICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNhdmVf bGVuZ3RoOyBpKyspCisJc2F2ZWRfcHJlZHNbaV0gPSBpZmNfYmJzW2ldLT5hdXg7CisgICAg fQogCiAgIGluaXRpYWxpemVfb3JpZ2luYWxfY29weV90YWJsZXMgKCk7CiAgIC8qIEF0IHRo aXMgcG9pbnQgd2UgaW52YWxpZGF0ZSBwb3JmaWxlIGNvbmZpc3RlbmN5IHVudGlsIElGTl9M T09QX1ZFQ1RPUklaRUQKQEAgLTI5MjEsOCArMjkzNSw5IEBAIHZlcnNpb25fbG9vcF9mb3Jf aWZfY29udmVyc2lvbiAoY2xhc3MgbG9vcCAqbG9vcCwgdmVjPGdpbXBsZSAqPiAqcHJlZHMp CiAJCQkgICBwcm9maWxlX3Byb2JhYmlsaXR5OjphbHdheXMgKCksIHRydWUpOwogICBmcmVl X29yaWdpbmFsX2NvcHlfdGFibGVzICgpOwogCi0gIGZvciAodW5zaWduZWQgaSA9IDA7IGkg PCBzYXZlX2xlbmd0aDsgaSsrKQotICAgIGlmY19iYnNbaV0tPmF1eCA9IHNhdmVkX3ByZWRz W2ldOworICBpZiAoYW55X2NvbXBsaWNhdGVkX3BoaSB8fCBuZWVkX3RvX3ByZWRpY2F0ZSkK KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2F2ZV9sZW5ndGg7IGkrKykKKyAgICAg IGlmY19iYnNbaV0tPmF1eCA9IHNhdmVkX3ByZWRzW2ldOwogCiAgIGlmIChuZXdfbG9vcCA9 PSBOVUxMKQogICAgIHJldHVybiBOVUxMOwpAQCAtMjk5OCw3ICszMDEzLDcgQEAgaWZjdnRf c3BsaXRfY3JpdGljYWxfZWRnZXMgKGNsYXNzIGxvb3AgKmxvb3AsIGJvb2wgYWdncmVzc2l2 ZV9pZl9jb252KQogICBhdXRvX3ZlYzxlZGdlPiBjcml0aWNhbF9lZGdlczsKIAogICAvKiBM b29wIGlzIG5vdCB3ZWxsIGZvcm1lZC4gICovCi0gIGlmIChudW0gPD0gMiB8fCBsb29wLT5p bm5lciB8fCAhc2luZ2xlX2V4aXQgKGxvb3ApKQorICBpZiAobnVtIDw9IDIgfHwgbG9vcC0+ aW5uZXIpCiAgICAgcmV0dXJuIGZhbHNlOwogCiAgIGJvZHkgPSBnZXRfbG9vcF9ib2R5IChs b29wKTsKQEAgLTMyNTksNiArMzI3NCwyMjUgQEAgaWZjdnRfaG9pc3RfaW52YXJpYW50cyAo Y2xhc3MgbG9vcCAqbG9vcCwgZWRnZSBwZSkKICAgZnJlZSAoYm9keSk7CiB9CiAKK3R5cGVk ZWYgc3RydWN0Cit7CisgIHNjYWxhcl9pbnRfbW9kZSBiZXN0X21vZGU7CisgIHRyZWUgc3Ry dWN0X2V4cHI7CisgIHRyZWUgYmZfdHlwZTsKKyAgdHJlZSBvZmZzZXQ7CisgIHBvbHlfaW50 NjQgYml0cG9zOworICBib29sIHdyaXRlOworICBnYXNzaWduICpzdG10OworfSBiaXRmaWVs ZF9kYXRhX3Q7CisKKy8qIFJldHVybiBUUlVFIGlmIHdlIGNhbiBsb3dlciB0aGUgYml0Zmll bGQgaW4gU1RNVC4gIEZpbGwgREFUQSB3aXRoIHRoZQorICAgcmVsZXZhbnQgaW5mb3JtYXRp b24gcmVxdWlyZWQgdG8gbG93ZXIgdGhpcyBiaXRmaWVsZC4gICovCisKK3N0YXRpYyBib29s CitnZXRfYml0ZmllbGRfZGF0YSAoZ2Fzc2lnbiAqc3RtdCwgYm9vbCB3cml0ZSwgYml0Zmll bGRfZGF0YV90ICpkYXRhKQoreworICBwb2x5X3VpbnQ2NCBiaXRzdGFydCwgYml0ZW5kOwor ICBzY2FsYXJfaW50X21vZGUgYmVzdF9tb2RlOworICB0cmVlIGNvbXBfcmVmID0gd3JpdGUg PyBnaW1wbGVfZ2V0X2xocyAoc3RtdCkKKwkJCTogZ2ltcGxlX2Fzc2lnbl9yaHMxIChzdG10 KTsKKyAgdHJlZSBzdHJ1Y3RfZXhwciA9IFRSRUVfT1BFUkFORCAoY29tcF9yZWYsIDApOwor ICB0cmVlIGZpZWxkX2RlY2wgPSBUUkVFX09QRVJBTkQgKGNvbXBfcmVmLCAxKTsKKyAgdHJl ZSBiZl90eXBlID0gVFJFRV9UWVBFIChmaWVsZF9kZWNsKTsKKyAgcG9seV9pbnQ2NCBiaXRw b3MKKyAgICA9IHRyZWVfdG9fcG9seV9pbnQ2NCAoREVDTF9GSUVMRF9CSVRfT0ZGU0VUIChm aWVsZF9kZWNsKSk7CisgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgYml0c2l6ZSA9IFRZUEVf UFJFQ0lTSU9OIChiZl90eXBlKTsKKyAgdHJlZSBvZmZzZXQgPSBERUNMX0ZJRUxEX09GRlNF VCAoZmllbGRfZGVjbCk7CisgIC8qIEJJVFNUQVJUIGFuZCBCSVRFTkQgZGVzY3JpYmUgdGhl IHJlZ2lvbiB3ZSBjYW4gc2FmZWx5IGxvYWQgZnJvbSBpbnNpZGUgdGhlCisgICAgIHN0cnVj dHVyZS4gIEJJVFBPUyBpcyB0aGUgYml0IHBvc2l0aW9uIG9mIHRoZSB2YWx1ZSBpbnNpZGUg dGhlCisgICAgIHJlcHJlc2VudGF0aXZlIHRoYXQgd2Ugd2lsbCBlbmQgdXAgbG9hZGluZyBP RkZTRVQgYnl0ZXMgZnJvbSB0aGUgc3RhcnQKKyAgICAgb2YgdGhlIHN0cnVjdC4gIEJFU1Rf TU9ERSBpcyB0aGUgbW9kZSBkZXNjcmliaW5nIHRoZSBvcHRpbWFsIHNpemUgb2YgdGhlCisg ICAgIHJlcHJlc2VudGF0aXZlIGNodW5rIHdlIGxvYWQuICBJZiB0aGlzIGlzIGEgd3JpdGUg d2Ugd2lsbCBzdG9yZSB0aGUgc2FtZQorICAgICBzaXplZCByZXByZXNlbnRhdGl2ZSBiYWNr LCBhZnRlciB3ZSBoYXZlIGNoYW5nZWQgdGhlIGFwcHJvcHJpYXRlIGJpdHMuICAqLworICBn ZXRfYml0X3JhbmdlICgmYml0c3RhcnQsICZiaXRlbmQsIGNvbXBfcmVmLCAmYml0cG9zLCAm b2Zmc2V0KTsKKyAgaWYgKGdldF9iZXN0X21vZGUgKGJpdHNpemUsIGJpdHBvcy50b19jb25z dGFudCAoKSwgYml0c3RhcnQsIGJpdGVuZCwKKwkJICAgICBUWVBFX0FMSUdOIChUUkVFX1RZ UEUgKHN0cnVjdF9leHByKSksCisJCSAgICAgSU5UX01BWCwgZmFsc2UsICZiZXN0X21vZGUp KQorICAgIHsKKyAgICAgIGRhdGEtPmJlc3RfbW9kZSA9IGJlc3RfbW9kZTsKKyAgICAgIGRh dGEtPnN0cnVjdF9leHByID0gc3RydWN0X2V4cHI7CisgICAgICBkYXRhLT5iZl90eXBlID0g YmZfdHlwZTsKKyAgICAgIGRhdGEtPm9mZnNldCA9IG9mZnNldDsKKyAgICAgIGRhdGEtPmJp dHBvcyA9IGJpdHBvczsKKyAgICAgIGRhdGEtPndyaXRlID0gd3JpdGU7CisgICAgICBkYXRh LT5zdG10ID0gc3RtdDsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgaWYgKGR1bXBf ZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKyAgICB7CisgICAgICBmcHJp bnRmIChkdW1wX2ZpbGUsICJcdFx0Q2FuIG5vdCBsb3dlciBCaXRmaWVsZCwgY291bGQgbm90 IGRldGVybWluZSIKKwkJCSAgIiBiZXN0IG1vZGUuXG4iKTsKKyAgICB9CisgIHJldHVybiBm YWxzZTsKK30KKworLyogTG93ZXJzIHRoZSBiaXRmaWVsZCBkZXNjcmliZWQgYnkgREFUQS4K KyAgIEZvciBhIHdyaXRlIGxpa2U6CisKKyAgIHN0cnVjdC5iZiA9IF8xOworCisgICBsb3dl ciB0bzoKKworICAgX19pZmNfMSA9IHN0cnVjdC48cmVwcmVzZW50YXRpdmU+OworICAgX19p ZmNfMiA9IEJJVF9JTlNFUlRfRVhQUiAoX19pZmNfMSwgXzEsIGJpdHBvcyk7CisgICBzdHJ1 Y3QuPHJlcHJlc2VudGF0aXZlPiA9IF9faWZjXzI7CisKKyAgIEZvciBhIHJlYWQ6CisKKyAg IF8xID0gc3RydWN0LmJmOworCisgICAgbG93ZXIgdG86CisKKyAgICBfX2lmY18xID0gc3Ry dWN0LjxyZXByZXNlbnRhdGl2ZT47CisgICAgXzEgPSAgQklUX0ZJRUxEX1JFRiAoX19pZmNf MSwgYml0c2l6ZSwgYml0cG9zKTsKKworICAgIHdoZXJlIHJlcHJlc2VudGF0aXZlIGlzIGEg bGVnYWwgbG9hZCB0aGF0IGNvbnRhaW5zIHRoZSBiaXRmaWVsZCB2YWx1ZSwKKyAgICBiaXRz aXplIGlzIHRoZSBzaXplIG9mIHRoZSBiaXRmaWVsZCBhbmQgYml0cG9zIHRoZSBvZmZzZXQg dG8gdGhlIHN0YXJ0IG9mCisgICAgdGhlIGJpdGZpZWxkIHdpdGhpbiB0aGUgcmVwcmVzZW50 YXRpdmUuICAqLworCitzdGF0aWMgdm9pZAorbG93ZXJfYml0ZmllbGQgKGJpdGZpZWxkX2Rh dGFfdCAqZGF0YSkKK3sKKyAgc2NhbGFyX2ludF9tb2RlIGJlc3RfbW9kZSA9IGRhdGEtPmJl c3RfbW9kZTsKKyAgdHJlZSBzdHJ1Y3RfZXhwciA9IGRhdGEtPnN0cnVjdF9leHByOworICB0 cmVlIGJmX3R5cGUgPSBkYXRhLT5iZl90eXBlOworICB0cmVlIG9mZnNldCA9IGRhdGEtPm9m ZnNldDsKKyAgcG9seV9pbnQ2NCBiaXRwb3MgPSBkYXRhLT5iaXRwb3M7CisgIGJvb2wgd3Jp dGUgPSBkYXRhLT53cml0ZTsKKyAgZ2Fzc2lnbiAqc3RtdCA9IGRhdGEtPnN0bXQ7CisgIGdp bXBsZV9zdG10X2l0ZXJhdG9yIGdzaSA9IGdzaV9mb3Jfc3RtdCAoc3RtdCk7CisgIC8qIFR5 cGUgb2YgdGhlIHJlcHJlc2VudGF0aXZlLiAgKi8KKyAgdHJlZSByZXBfdHlwZQorICAgID0g bGFuZ19ob29rcy50eXBlcy50eXBlX2Zvcl9tb2RlIChiZXN0X21vZGUsIFRZUEVfVU5TSUdO RUQgKGJmX3R5cGUpKTsKKworICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERG X0RFVEFJTFMpKQorICAgIHsKKyAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIkxvd2VyaW5n OlxuIik7CisgICAgICBwcmludF9naW1wbGVfc3RtdCAoZHVtcF9maWxlLCBzdG10LCAwLCBU REZfU0xJTSk7CisgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJ0bzpcbiIpOworICAgIH0K KworICB0cmVlIHJlcF9kZWNsID0gYnVpbGRfZGVjbCAoVU5LTk9XTl9MT0NBVElPTiwgRklF TERfREVDTCwKKwkJCSAgICAgIE5VTExfVFJFRSwgcmVwX3R5cGUpOworICAvKiBMb2FkIGZy b20gdGhlIHN0YXJ0IG9mICdvZmZzZXQgKyBiaXRwb3MgJSBhbGlnbm1lbnQnLiAgKi8KKyAg dWludDY0X3QgZXh0cmFfb2Zmc2V0ID0gYml0cG9zLnRvX2NvbnN0YW50ICgpOworICBleHRy YV9vZmZzZXQgLz0gVFlQRV9BTElHTiAoYmZfdHlwZSk7CisgIGV4dHJhX29mZnNldCAqPSBU WVBFX0FMSUdOIChiZl90eXBlKTsKKyAgb2Zmc2V0ID0gZm9sZF9idWlsZDIgKFBMVVNfRVhQ UiwgVFJFRV9UWVBFIChvZmZzZXQpLCBvZmZzZXQsCisJCQlidWlsZF9pbnRfY3N0IChUUkVF X1RZUEUgKG9mZnNldCksCisJCQkJICAgICAgIGV4dHJhX29mZnNldCAvIEJJVFNfUEVSX1VO SVQpKTsKKyAgLyogQWRhcHQgdGhlIEJJVFBPUyB0byByZWZsZWN0IHRoZSBudW1iZXIgb2Yg Yml0cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiB0aGUKKyAgICAgbG9hZCBhbmQgdGhlIHN0YXJ0 IG9mIHRoZSBiaXRmaWVsZCB2YWx1ZS4gICovCisgIGJpdHBvcyAtPSBleHRyYV9vZmZzZXQ7 CisgIERFQ0xfRklFTERfQklUX09GRlNFVCAocmVwX2RlY2wpID0gYnVpbGRfemVyb19jc3Qg KGJpdHNpemV0eXBlKTsKKyAgREVDTF9GSUVMRF9PRkZTRVQgKHJlcF9kZWNsKSA9IG9mZnNl dDsKKyAgREVDTF9TSVpFIChyZXBfZGVjbCkgPSBUWVBFX1NJWkUgKHJlcF90eXBlKTsKKyAg REVDTF9DT05URVhUIChyZXBfZGVjbCkgPSBUUkVFX1RZUEUgKHN0cnVjdF9leHByKTsKKyAg dHJlZSBiaXRwb3NfdHJlZSA9IGJ1aWxkX2ludF9jc3QgKGJpdHNpemV0eXBlLCBiaXRwb3Mp OworICAvKiBSRVBfQ09NUF9SRUYgaXMgYSBDT01QT05FTlRfUkVGIGZvciB0aGUgcmVwcmVz ZW50YXRpdmUuICAqLworICB0cmVlIHJlcF9jb21wX3JlZiA9IGJ1aWxkMyAoQ09NUE9ORU5U X1JFRiwgcmVwX3R5cGUsIHN0cnVjdF9leHByLCByZXBfZGVjbCwKKwkJCSAgICAgIE5VTExf VFJFRSk7CisgIHRyZWUgbmV3X3ZhbCA9IGlmY190ZW1wX3ZhciAocmVwX3R5cGUsIHJlcF9j b21wX3JlZiwgJmdzaSk7CisKKyAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRE Rl9ERVRBSUxTKSkKKyAgICBwcmludF9naW1wbGVfc3RtdCAoZHVtcF9maWxlLCBTU0FfTkFN RV9ERUZfU1RNVCAobmV3X3ZhbCksIDAsIFRERl9TTElNKTsKKworICBpZiAod3JpdGUpCisg ICAgeworICAgICAgbmV3X3ZhbCA9IGlmY190ZW1wX3ZhciAocmVwX3R5cGUsCisJCQkgICAg ICBidWlsZDMgKEJJVF9JTlNFUlRfRVhQUiwgcmVwX3R5cGUsIG5ld192YWwsCisJCQkJICAg ICAgdW5zaGFyZV9leHByIChnaW1wbGVfYXNzaWduX3JoczEgKHN0bXQpKSwKKwkJCQkgICAg ICBiaXRwb3NfdHJlZSksICZnc2kpOworCisgICAgICBpZiAoZHVtcF9maWxlICYmIChkdW1w X2ZsYWdzICYgVERGX0RFVEFJTFMpKQorCXByaW50X2dpbXBsZV9zdG10IChkdW1wX2ZpbGUs IFNTQV9OQU1FX0RFRl9TVE1UIChuZXdfdmFsKSwgMCwgVERGX1NMSU0pOworCisgICAgICBn aW1wbGUgKm5ld19zdG10ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodW5zaGFyZV9leHByIChy ZXBfY29tcF9yZWYpLAorCQkJCQkgICAgICBuZXdfdmFsKTsKKyAgICAgIGdpbXBsZV9zZXRf dnVzZSAobmV3X3N0bXQsIGdpbXBsZV92dXNlIChzdG10KSk7CisgICAgICB0cmVlIHZkZWYg PSBnaW1wbGVfdmRlZiAoc3RtdCk7CisgICAgICBnaW1wbGVfc2V0X3ZkZWYgKG5ld19zdG10 LCB2ZGVmKTsKKyAgICAgIFNTQV9OQU1FX0RFRl9TVE1UICh2ZGVmKSA9IG5ld19zdG10Owor ICAgICAgZ3NpX2luc2VydF9iZWZvcmUgKCZnc2ksIG5ld19zdG10LCBHU0lfU0FNRV9TVE1U KTsKKworICAgICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxT KSkKKwlwcmludF9naW1wbGVfc3RtdCAoZHVtcF9maWxlLCBuZXdfc3RtdCwgMCwgVERGX1NM SU0pOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHRyZWUgYmZyID0gYnVpbGQzIChC SVRfRklFTERfUkVGLCBiZl90eXBlLCBuZXdfdmFsLAorCQkJIGJ1aWxkX2ludF9jc3QgKGJp dHNpemV0eXBlLCBUWVBFX1BSRUNJU0lPTiAoYmZfdHlwZSkpLAorCQkJIGJpdHBvc190cmVl KTsKKyAgICAgIG5ld192YWwgPSBpZmNfdGVtcF92YXIgKGJmX3R5cGUsIGJmciwgJmdzaSk7 CisgICAgICByZWR1bmRhbnRfc3NhX25hbWVzLnNhZmVfcHVzaCAoc3RkOjptYWtlX3BhaXIg KGdpbXBsZV9nZXRfbGhzIChzdG10KSwKKwkJCQkJCSAgICAgbmV3X3ZhbCkpOworCisgICAg ICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJTFMpKQorCXByaW50 X2dpbXBsZV9zdG10IChkdW1wX2ZpbGUsIFNTQV9OQU1FX0RFRl9TVE1UIChuZXdfdmFsKSwg MCwgVERGX1NMSU0pOworICAgIH0KKworICBnc2lfcmVtb3ZlICgmZ3NpLCB0cnVlKTsKK30K KworLyogUmV0dXJuIFRSVUUgaWYgdGhlcmUgYXJlIGJpdGZpZWxkcyB0byBsb3dlciBpbiB0 aGlzIExPT1AuICBGaWxsIFRPX0xPV0VSCisgICB3aXRoIGRhdGEgc3RydWN0dXJlcyByZXBy ZXNlbnRpbmcgdGhlc2UgYml0ZmllbGRzLiAgKi8KKworc3RhdGljIGJvb2wKK2JpdGZpZWxk c190b19sb3dlcl9wIChjbGFzcyBsb29wICpsb29wLCBhdXRvX3ZlYyA8Yml0ZmllbGRfZGF0 YV90ICosIDQ+ICp0b19sb3dlcikKK3sKKyAgYmFzaWNfYmxvY2sgKmJicyA9IGdldF9sb29w X2JvZHkgKGxvb3ApOworICBnaW1wbGVfc3RtdF9pdGVyYXRvciBnc2k7CisKKyAgaWYgKGR1 bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKyAgICB7CisgICAgICBm cHJpbnRmIChkdW1wX2ZpbGUsICJBbmFseXppbmcgbG9vcCAlZCBmb3IgYml0ZmllbGRzOlxu IiwgbG9vcC0+bnVtKTsKKyAgICB9CisKKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxv b3AtPm51bV9ub2RlczsgKytpKQorICAgIHsKKyAgICAgIGJhc2ljX2Jsb2NrIGJiID0gYmJz W2ldOworICAgICAgZm9yIChnc2kgPSBnc2lfc3RhcnRfYmIgKGJiKTsgIWdzaV9lbmRfcCAo Z3NpKTsgZ3NpX25leHQgKCZnc2kpKQorCXsKKwkgIGdhc3NpZ24gKnN0bXQgPSBkeW5fY2Fz dDxnYXNzaWduKj4gKGdzaV9zdG10IChnc2kpKTsKKwkgIGlmICghc3RtdCkKKwkgICAgY29u dGludWU7CisKKwkgIHRyZWUgb3AgPSBnaW1wbGVfZ2V0X2xocyAoc3RtdCk7CisJICBib29s IHdyaXRlID0gVFJFRV9DT0RFIChvcCkgPT0gQ09NUE9ORU5UX1JFRjsKKworCSAgaWYgKCF3 cml0ZSkKKwkgICAgb3AgPSBnaW1wbGVfYXNzaWduX3JoczEgKHN0bXQpOworCisJICBpZiAo VFJFRV9DT0RFIChvcCkgIT0gQ09NUE9ORU5UX1JFRikKKwkgICAgY29udGludWU7CisKKwkg IGlmIChERUNMX0JJVF9GSUVMRCAoVFJFRV9PUEVSQU5EIChvcCwgMSkpKQorCSAgICB7CisJ ICAgICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKwkJ cHJpbnRfZ2ltcGxlX3N0bXQgKGR1bXBfZmlsZSwgc3RtdCwgMCwgVERGX1NMSU0pOworCisJ ICAgICAgYml0ZmllbGRfZGF0YV90ICpkYXRhID0gbmV3IGJpdGZpZWxkX2RhdGFfdCAoKTsK KwkgICAgICBpZiAoZ2V0X2JpdGZpZWxkX2RhdGEgKHN0bXQsIHdyaXRlLCBkYXRhKSkKKwkJ eworCQkgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpCisJ CSAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJcdEJpdGZpZWxkIE9LIHRvIGxvd2VyLlxuIik7 CisJCSAgdG9fbG93ZXItPnNhZmVfcHVzaCAoZGF0YSk7CisJCX0KKwkgICAgICBlbHNlCisJ CXsKKwkJICBkZWxldGUgZGF0YTsKKwkJICByZXR1cm4gZmFsc2U7CisJCX0KKwkgICAgfQor CX0KKyAgICB9CisgIHJldHVybiAhdG9fbG93ZXItPmlzX2VtcHR5ICgpOworfQorCisKIC8q IElmLWNvbnZlcnQgTE9PUCB3aGVuIGl0IGlzIGxlZ2FsLiAgRm9yIHRoZSBtb21lbnQgdGhp cyBwYXNzIGhhcyBubwogICAgcHJvZml0YWJpbGl0eSBhbmFseXNpcy4gIFJldHVybnMgbm9u LXplcm8gdG9kbyBmbGFncyB3aGVuIHNvbWV0aGluZwogICAgY2hhbmdlZC4gICovCkBAIC0z MjY5LDEyICszNTAzLDE1IEBAIHRyZWVfaWZfY29udmVyc2lvbiAoY2xhc3MgbG9vcCAqbG9v cCwgdmVjPGdpbXBsZSAqPiAqcHJlZHMpCiAgIHVuc2lnbmVkIGludCB0b2RvID0gMDsKICAg Ym9vbCBhZ2dyZXNzaXZlX2lmX2NvbnY7CiAgIGNsYXNzIGxvb3AgKnJsb29wOworICBhdXRv X3ZlYyA8Yml0ZmllbGRfZGF0YV90ICosIDQ+IGJpdGZpZWxkc190b19sb3dlcjsKICAgYml0 bWFwIGV4aXRfYmJzOwogICBlZGdlIHBlOwogCiAgYWdhaW46CiAgIHJsb29wID0gTlVMTDsK ICAgaWZjX2JicyA9IE5VTEw7CisgIG5lZWRfdG9fbG93ZXJfYml0ZmllbGRzID0gZmFsc2U7 CisgIG5lZWRfdG9faWZjdnQgPSBmYWxzZTsKICAgbmVlZF90b19wcmVkaWNhdGUgPSBmYWxz ZTsKICAgbmVlZF90b19yZXdyaXRlX3VuZGVmaW5lZCA9IGZhbHNlOwogICBhbnlfY29tcGxp Y2F0ZWRfcGhpID0gZmFsc2U7CkBAIC0zMjkwLDExICszNTI3LDE3IEBAIHRyZWVfaWZfY29u dmVyc2lvbiAoY2xhc3MgbG9vcCAqbG9vcCwgdmVjPGdpbXBsZSAqPiAqcHJlZHMpCiAJYWdn cmVzc2l2ZV9pZl9jb252ID0gdHJ1ZTsKICAgICB9CiAKLSAgaWYgKCFpZmN2dF9zcGxpdF9j cml0aWNhbF9lZGdlcyAobG9vcCwgYWdncmVzc2l2ZV9pZl9jb252KSkKKyAgaWYgKCFzaW5n bGVfZXhpdCAobG9vcCkpCisgICAgZ290byBjbGVhbnVwOworCisgIG5lZWRfdG9fbG93ZXJf Yml0ZmllbGRzID0gYml0ZmllbGRzX3RvX2xvd2VyX3AgKGxvb3AsICZiaXRmaWVsZHNfdG9f bG93ZXIpOworICBpZiAoIWlmY3Z0X3NwbGl0X2NyaXRpY2FsX2VkZ2VzIChsb29wLCBhZ2dy ZXNzaXZlX2lmX2NvbnYpCisgICAgICAmJiAhbmVlZF90b19sb3dlcl9iaXRmaWVsZHMpCiAg ICAgZ290byBjbGVhbnVwOwogCi0gIGlmICghaWZfY29udmVydGlibGVfbG9vcF9wIChsb29w KQotICAgICAgfHwgIWRiZ19jbnQgKGlmX2NvbnZlcnNpb25fdHJlZSkpCisgIG5lZWRfdG9f aWZjdnQKKyAgICA9IGlmX2NvbnZlcnRpYmxlX2xvb3BfcCAobG9vcCkgJiYgZGJnX2NudCAo aWZfY29udmVyc2lvbl90cmVlKTsKKyAgaWYgKCFuZWVkX3RvX2lmY3Z0ICYmICFuZWVkX3Rv X2xvd2VyX2JpdGZpZWxkcykKICAgICBnb3RvIGNsZWFudXA7CiAKICAgaWYgKChuZWVkX3Rv X3ByZWRpY2F0ZSB8fCBhbnlfY29tcGxpY2F0ZWRfcGhpKQpAQCAtMzMxMCw3ICszNTUzLDgg QEAgdHJlZV9pZl9jb252ZXJzaW9uIChjbGFzcyBsb29wICpsb29wLCB2ZWM8Z2ltcGxlICo+ ICpwcmVkcykKICAgICAgRWl0aGVyIHZlcnNpb24gdGhpcyBsb29wLCBvciBpZiB0aGUgcGF0 dGVybiBpcyByaWdodCBmb3Igb3V0ZXItbG9vcAogICAgICB2ZWN0b3JpemF0aW9uLCB2ZXJz aW9uIHRoZSBvdXRlciBsb29wLiAgSW4gdGhlIGxhdHRlciBjYXNlIHdlIHdpbGwKICAgICAg c3RpbGwgaWYtY29udmVydCB0aGUgb3JpZ2luYWwgaW5uZXIgbG9vcC4gICovCi0gIGlmIChu ZWVkX3RvX3ByZWRpY2F0ZQorICBpZiAobmVlZF90b19sb3dlcl9iaXRmaWVsZHMKKyAgICAg IHx8IG5lZWRfdG9fcHJlZGljYXRlCiAgICAgICB8fCBhbnlfY29tcGxpY2F0ZWRfcGhpCiAg ICAgICB8fCBmbGFnX3RyZWVfbG9vcF9pZl9jb252ZXJ0ICE9IDEpCiAgICAgewpAQCAtMzM1 MCwxMCArMzU5NCwzMiBAQCB0cmVlX2lmX2NvbnZlcnNpb24gKGNsYXNzIGxvb3AgKmxvb3As IHZlYzxnaW1wbGUgKj4gKnByZWRzKQogCXBlID0gc2luZ2xlX3ByZWRfZWRnZSAoZ2ltcGxl X2JiIChwcmVkcy0+bGFzdCAoKSkpOwogICAgIH0KIAotICAvKiBOb3cgYWxsIHN0YXRlbWVu dHMgYXJlIGlmLWNvbnZlcnRpYmxlLiAgQ29tYmluZSBhbGwgdGhlIGJhc2ljCi0gICAgIGJs b2NrcyBpbnRvIG9uZSBodWdlIGJhc2ljIGJsb2NrIGRvaW5nIHRoZSBpZi1jb252ZXJzaW9u Ci0gICAgIG9uLXRoZS1mbHkuICAqLwotICBjb21iaW5lX2Jsb2NrcyAobG9vcCk7CisgIGlm IChuZWVkX3RvX2xvd2VyX2JpdGZpZWxkcykKKyAgICB7CisgICAgICBpZiAoZHVtcF9maWxl ICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJTFMpKQorCXsKKwkgIGZwcmludGYgKGR1bXBf ZmlsZSwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCSAgZnByaW50ZiAoZHVt cF9maWxlLCAiU3RhcnQgbG93ZXJpbmcgYml0ZmllbGRzXG4iKTsKKwl9CisgICAgICB3aGls ZSAoIWJpdGZpZWxkc190b19sb3dlci5pc19lbXB0eSAoKSkKKwl7CisJICBiaXRmaWVsZF9k YXRhX3QgKmRhdGEgPSBiaXRmaWVsZHNfdG9fbG93ZXIucG9wICgpOworCSAgbG93ZXJfYml0 ZmllbGQgKGRhdGEpOworCSAgZGVsZXRlIGRhdGE7CisJfQorICAgICAgaWYgKGR1bXBfZmls ZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKwl7CisJICBmcHJpbnRmIChkdW1w X2ZpbGUsICJEb25lIGxvd2VyaW5nIGJpdGZpZWxkc1xuIik7CisJICBmcHJpbnRmIChkdW1w X2ZpbGUsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwl9CisgICAgfQorICBp ZiAobmVlZF90b19pZmN2dCkKKyAgICB7CisgICAgICAvKiBOb3cgYWxsIHN0YXRlbWVudHMg YXJlIGlmLWNvbnZlcnRpYmxlLiAgQ29tYmluZSBhbGwgdGhlIGJhc2ljCisJIGJsb2NrcyBp bnRvIG9uZSBodWdlIGJhc2ljIGJsb2NrIGRvaW5nIHRoZSBpZi1jb252ZXJzaW9uCisJIG9u LXRoZS1mbHkuICAqLworICAgICAgY29tYmluZV9ibG9ja3MgKGxvb3ApOworICAgIH0KIAog ICAvKiBQZXJmb3JtIGxvY2FsIENTRSwgdGhpcyBlc3AuIGhlbHBzIHRoZSB2ZWN0b3JpemVy IGFuYWx5c2lzIGlmIGxvYWRzCiAgICAgIGFuZCBzdG9yZXMgYXJlIGludm9sdmVkLiAgQ1NF IG9ubHkgdGhlIGxvb3AgYm9keSwgbm90IHRoZSBlbnRyeQpAQCAtMzM5NSw2ICszNjYxLDEx IEBAIHRyZWVfaWZfY29udmVyc2lvbiAoY2xhc3MgbG9vcCAqbG9vcCwgdmVjPGdpbXBsZSAq PiAqcHJlZHMpCiAgICAgICBsb29wID0gcmxvb3A7CiAgICAgICBnb3RvIGFnYWluOwogICAg IH0KKyAgd2hpbGUgKCFiaXRmaWVsZHNfdG9fbG93ZXIuaXNfZW1wdHkgKCkpCisgICAgewor ICAgICAgYml0ZmllbGRfZGF0YV90ICpkYXRhID0gYml0ZmllbGRzX3RvX2xvd2VyLnBvcCAo KTsKKyAgICAgIGRlbGV0ZSBkYXRhOworICAgIH0KIAogICByZXR1cm4gdG9kbzsKIH0KZGlm ZiAtLWdpdCBhL2djYy90cmVlLXZlY3QtZGF0YS1yZWZzLmNjIGIvZ2NjL3RyZWUtdmVjdC1k YXRhLXJlZnMuY2MKaW5kZXggYjI3OWE4MjU1MWViNzAzNzk4MDRkNDA1OTgzYWU1ZGM0NGI2 NmJmNS4uZTkzY2RjNzI3ZGE0YmI3ODYzYjJhZDEzZjI5ZjdkNTUwNDkyYWRlYSAxMDA2NDQK LS0tIGEvZ2NjL3RyZWUtdmVjdC1kYXRhLXJlZnMuY2MKKysrIGIvZ2NjL3RyZWUtdmVjdC1k YXRhLXJlZnMuY2MKQEAgLTQzMDEsNyArNDMwMSw4IEBAIHZlY3RfZmluZF9zdG10X2RhdGFf cmVmZXJlbmNlIChsb29wX3AgbG9vcCwgZ2ltcGxlICpzdG10LAogICAgICAgZnJlZV9kYXRh X3JlZiAoZHIpOwogICAgICAgcmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHN0bXQs CiAJCQkJICAgICAibm90IHZlY3Rvcml6ZWQ6IgotCQkJCSAgICAgIiBzdGF0ZW1lbnQgaXMg Yml0ZmllbGQgYWNjZXNzICVHIiwgc3RtdCk7CisJCQkJICAgICAiIHN0YXRlbWVudCBpcyBh biB1bnN1cHBvcnRlZCIKKwkJCQkgICAgICIgYml0ZmllbGQgYWNjZXNzICVHIiwgc3RtdCk7 CiAgICAgfQogCiAgIGlmIChEUl9CQVNFX0FERFJFU1MgKGRyKQpkaWZmIC0tZ2l0IGEvZ2Nj L3RyZWUtdmVjdC1wYXR0ZXJucy5jYyBiL2djYy90cmVlLXZlY3QtcGF0dGVybnMuY2MKaW5k ZXggZGZiZmI3MWIzYzY5YTAyMDVjY2MxYjI4N2NiNTBmYTAyYTcwOTQyZS4uNDM1Yjc1Zjg2 MDc4NGE5MjkwNDFkNTIxNGQzOWM4NzZjNWJhNzkwYSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUt dmVjdC1wYXR0ZXJucy5jYworKysgYi9nY2MvdHJlZS12ZWN0LXBhdHRlcm5zLmNjCkBAIC0z NSw2ICszNSw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJ ZiBub3Qgc2VlCiAjaW5jbHVkZSAidHJlZS1laC5oIgogI2luY2x1ZGUgImdpbXBsaWZ5Lmgi CiAjaW5jbHVkZSAiZ2ltcGxlLWl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiZ2ltcGxpZnktbWUu aCIKICNpbmNsdWRlICJjZmdsb29wLmgiCiAjaW5jbHVkZSAidHJlZS12ZWN0b3JpemVyLmgi CiAjaW5jbHVkZSAiZHVtcGZpbGUuaCIKQEAgLTE4MjgsNiArMTgyOSwyMDQgQEAgdmVjdF9y ZWNvZ193aWRlbl9zdW1fcGF0dGVybiAodmVjX2luZm8gKnZpbmZvLAogICByZXR1cm4gcGF0 dGVybl9zdG10OwogfQogCisvKiBGdW5jdGlvbiB2ZWN0X3JlY29nX2JpdGZpZWxkX3JlZl9w YXR0ZXJuCisKKyAgIFRyeSB0byBmaW5kIHRoZSBmb2xsb3dpbmcgcGF0dGVybjoKKworICAg XzIgPSBCSVRfRklFTERfUkVGIChfMSwgYml0c2l6ZSwgYml0cG9zKTsKKyAgIF8zID0gKHR5 cGUpIF8yOworCisgICB3aGVyZSB0eXBlIGlzIGEgbm9uLWJpdGZpZWxkIHR5cGUsIHRoYXQg aXMgdG8gc2F5LCBpdCdzIHByZWNpc2lvbiBtYXRjaGVzCisgICAyXihUWVBFX1NJWkUodHlw ZSkgLSAoVFlQRV9VTlNJR05FRCAodHlwZSkgPyAxIDogMikpLgorCisgICBJbnB1dDoKKwor ICAgKiBTVE1UX1ZJTkZPOiBUaGUgc3RtdCBmcm9tIHdoaWNoIHRoZSBwYXR0ZXJuIHNlYXJj aCBiZWdpbnMuCisgICBoZXJlIGl0IHN0YXJ0cyB3aXRoOgorICAgXzMgPSAodHlwZSkgXzI7 CisKKyAgIE91dHB1dDoKKworICAgKiBUWVBFX09VVDogVGhlIHZlY3RvciB0eXBlIG9mIHRo ZSBvdXRwdXQgb2YgdGhpcyBwYXR0ZXJuLgorCisgICAqIFJldHVybiB2YWx1ZTogQSBuZXcg c3RtdCB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXBsYWNlIHRoZSBzZXF1ZW5jZSBvZgorICAg c3RtdHMgdGhhdCBjb25zdGl0dXRlIHRoZSBwYXR0ZXJuLiBJbiB0aGlzIGNhc2UgaXQgd2ls bCBiZToKKyAgIHBhdHQxID0gKHR5cGUpIF8xOworICAgcGF0dDIgPSBwYXR0MSA+PiBiaXRw b3M7CisgICBfMyA9IHBhdHQyICYgKCgxIDw8IGJpdHNpemUpIC0gMSk7CisKKyovCisKK3N0 YXRpYyBnaW1wbGUgKgordmVjdF9yZWNvZ19iaXRmaWVsZF9yZWZfcGF0dGVybiAodmVjX2lu Zm8gKnZpbmZvLCBzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywKKwkJCQkgdHJlZSAqdHlwZV9v dXQpCit7CisgIGdhc3NpZ24gKm5vcF9zdG10ID0gZHluX2Nhc3QgPGdhc3NpZ24gKj4gKHN0 bXRfaW5mby0+c3RtdCk7CisgIGlmICghbm9wX3N0bXQKKyAgICAgIHx8IGdpbXBsZV9hc3Np Z25fcmhzX2NvZGUgKG5vcF9zdG10KSAhPSBOT1BfRVhQUgorICAgICAgfHwgVFJFRV9DT0RF IChnaW1wbGVfYXNzaWduX3JoczEgKG5vcF9zdG10KSkgIT0gU1NBX05BTUUpCisgICAgcmV0 dXJuIE5VTEw7CisKKyAgZ2Fzc2lnbiAqYmZfc3RtdAorICAgID0gZHluX2Nhc3QgPGdhc3Np Z24gKj4gKFNTQV9OQU1FX0RFRl9TVE1UIChnaW1wbGVfYXNzaWduX3JoczEgKG5vcF9zdG10 KSkpOworCisgIGlmICghYmZfc3RtdCB8fCBnaW1wbGVfYXNzaWduX3Joc19jb2RlIChiZl9z dG10KSAhPSBCSVRfRklFTERfUkVGKQorICAgIHJldHVybiBOVUxMOworCisgIHRyZWUgYmZf cmVmID0gZ2ltcGxlX2Fzc2lnbl9yaHMxIChiZl9zdG10KTsKKworICB0cmVlIGxvYWQgPSBU UkVFX09QRVJBTkQgKGJmX3JlZiwgMCk7CisgIHRyZWUgc2l6ZSA9IFRSRUVfT1BFUkFORCAo YmZfcmVmLCAxKTsKKyAgdHJlZSBvZmZzZXQgPSBUUkVFX09QRVJBTkQgKGJmX3JlZiwgMik7 CisKKyAgLyogQmFpbCBvdXQgaWYgdGhlIGxvYWQgaXMgYWxyZWFkeSBhIHZlY3RvciB0eXBl LiAgKi8KKyAgaWYgKFZFQ1RPUl9UWVBFX1AgKFRSRUVfVFlQRSAobG9hZCkpKQorICAgIHJl dHVybiBOVUxMOworCisKKyAgZ2ltcGxlICpwYXR0ZXJuX3N0bXQ7CisgIHRyZWUgbGhzID0g bG9hZDsKKyAgdHJlZSByZXRfdHlwZSA9IFRSRUVfVFlQRSAoZ2ltcGxlX2dldF9saHMgKG5v cF9zdG10KSk7CisKKyAgaWYgKCF1c2VsZXNzX3R5cGVfY29udmVyc2lvbl9wIChUUkVFX1RZ UEUgKGxocyksIHJldF90eXBlKSkKKyAgICB7CisgICAgICBwYXR0ZXJuX3N0bXQKKwk9IGdp bXBsZV9idWlsZF9hc3NpZ24gKHZlY3RfcmVjb2dfdGVtcF9zc2FfdmFyIChyZXRfdHlwZSwg TlVMTCksCisJCQkgICAgICAgTk9QX0VYUFIsIGxocyk7CisgICAgICBsaHMgPSBnaW1wbGVf Z2V0X2xocyAocGF0dGVybl9zdG10KTsKKyAgICAgIGFwcGVuZF9wYXR0ZXJuX2RlZl9zZXEg KHZpbmZvLCBzdG10X2luZm8sIHBhdHRlcm5fc3RtdCk7CisgICAgfQorCisgIHVuc2lnbmVk IEhPU1RfV0lERV9JTlQgc2hpZnRfbiA9IHRyZWVfdG9fdWh3aSAob2Zmc2V0KTsKKyAgaWYg KHNoaWZ0X24pCisgICAgeworICAgICAgcGF0dGVybl9zdG10CisJPSBnaW1wbGVfYnVpbGRf YXNzaWduICh2ZWN0X3JlY29nX3RlbXBfc3NhX3ZhciAoVFJFRV9UWVBFIChsaHMpLCBOVUxM KSwKKwkJCSAgICAgICBSU0hJRlRfRVhQUiwgbGhzLCBvZmZzZXQpOworICAgICAgbGhzID0g Z2ltcGxlX2dldF9saHMgKHBhdHRlcm5fc3RtdCk7CisgICAgICBhcHBlbmRfcGF0dGVybl9k ZWZfc2VxICh2aW5mbywgc3RtdF9pbmZvLCBwYXR0ZXJuX3N0bXQpOworICAgIH0KKworICB1 bnNpZ25lZCBIT1NUX1dJREVfSU5UIG1hc2tfaSA9IHRyZWVfdG9fdWh3aSAoc2l6ZSk7Cisg IHRyZWUgbWFzayA9IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobGhzKSwgKDFVTEwgPDwg bWFza19pKSAtIDEpOworICBwYXR0ZXJuX3N0bXQKKyAgICA9IGdpbXBsZV9idWlsZF9hc3Np Z24gKHZlY3RfcmVjb2dfdGVtcF9zc2FfdmFyIChUUkVFX1RZUEUgKGxocyksIE5VTEwpLAor CQkJICAgQklUX0FORF9FWFBSLCBsaHMsIG1hc2spOworCisgICp0eXBlX291dCA9IFNUTVRf VklORk9fVkVDVFlQRSAoc3RtdF9pbmZvKTsKKyAgdmVjdF9wYXR0ZXJuX2RldGVjdGVkICgi Yml0X2ZpZWxkX3JlZiBwYXR0ZXJuIiwgc3RtdF9pbmZvLT5zdG10KTsKKworICByZXR1cm4g cGF0dGVybl9zdG10OworfQorCisvKiBGdW5jdGlvbiB2ZWN0X3JlY29nX2JpdF9pbnNlcnRf cGF0dGVybgorCisgICBUcnkgdG8gZmluZCB0aGUgZm9sbG93aW5nIHBhdHRlcm46CisKKyAg IF8zID0gQklUX0lOU0VSVF9FWFBSIChfMSwgXzIsIGJpdHBvcyk7CisKKyAgIElucHV0Ogor CisgICAqIFNUTVRfVklORk86IFRoZSBzdG10IHdlIHdhbnQgdG8gcmVwbGFjZS4KKworICAg T3V0cHV0OgorCisgICAqIFRZUEVfT1VUOiBUaGUgdmVjdG9yIHR5cGUgb2YgdGhlIG91dHB1 dCBvZiB0aGlzIHBhdHRlcm4uCisKKyAgICogUmV0dXJuIHZhbHVlOiBBIG5ldyBzdG10IHRo YXQgd2lsbCBiZSB1c2VkIHRvIHJlcGxhY2UgdGhlIHNlcXVlbmNlIG9mCisgICBzdG10cyB0 aGF0IGNvbnN0aXR1dGUgdGhlIHBhdHRlcm4uIEluIHRoaXMgY2FzZSBpdCB3aWxsIGJlOgor ICAgcGF0dDEgPSBfMiAmIG1hc2s7CQkgICAgLy8gQ2xlYXJpbmcgb2YgdGhlIG5vbi1yZWxl dmFudCBiaXRzIGluIHRoZQorCQkJCSAgICAvLyAndG8td3JpdGUgdmFsdWUnLgorICAgcGF0 dDIgPSBwYXR0MSA8PCBiaXRwb3M7CSAgICAvLyBTaGlmdCB0aGUgY2xlYW5lZCB2YWx1ZSBp biB0byBwbGFjZS4KKyAgIHBhdHQzID0gXzEgJiB+KG1hc2sgPDwgYml0cG9zKTsgIC8vIENs ZWFyaW5nIHRoZSBiaXRzIHdlIHdhbnQgdG8gd3JpdGUgdG8sCisJCQkJICAgIC8vIGZyb20g dGhlIHZhbHVlIHdlIHdhbnQgdG8gd3JpdGUgdG8uCisgICBfMyA9IHBhdHQzIHwgcGF0dDI7 CQkgICAgLy8gV3JpdGUgYml0cy4KKworCisgICB3aGVyZSBtYXNrID0gKCgxIDw8IFRZUEVf UFJFQ0lTSU9OIChfMikpIC0gMSksIGEgbWFzayB0byBrZWVwIHRoZSBudW1iZXIgb2YKKyAg IGJpdHMgY29ycmVzcG9uZGluZyB0byB0aGUgcmVhbCBzaXplIG9mIHRoZSBiaXRmaWVsZCB2 YWx1ZSB3ZSBhcmUgd3JpdGluZyB0by4KKworKi8KKworc3RhdGljIGdpbXBsZSAqCit2ZWN0 X3JlY29nX2JpdF9pbnNlcnRfcGF0dGVybiAodmVjX2luZm8gKnZpbmZvLCBzdG10X3ZlY19p bmZvIHN0bXRfaW5mbywKKwkJCSAgICAgICB0cmVlICp0eXBlX291dCkKK3sKKyAgZ2Fzc2ln biAqYmZfc3RtdCA9IGR5bl9jYXN0IDxnYXNzaWduICo+IChzdG10X2luZm8tPnN0bXQpOwor ICBpZiAoIWJmX3N0bXQgfHwgZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoYmZfc3RtdCkgIT0g QklUX0lOU0VSVF9FWFBSKQorICAgIHJldHVybiBOVUxMOworCisgIHRyZWUgbG9hZCA9IGdp bXBsZV9hc3NpZ25fcmhzMSAoYmZfc3RtdCk7CisgIHRyZWUgdmFsdWUgPSBnaW1wbGVfYXNz aWduX3JoczIgKGJmX3N0bXQpOworICB0cmVlIG9mZnNldCA9IGdpbXBsZV9hc3NpZ25fcmhz MyAoYmZfc3RtdCk7CisKKyAgdHJlZSBiZl90eXBlID0gVFJFRV9UWVBFICh2YWx1ZSk7Cisg IHRyZWUgbG9hZF90eXBlID0gVFJFRV9UWVBFIChsb2FkKTsKKworICAvKiBCYWlsIG91dCBp ZiB0aGUgbG9hZCBpcyBhbHJlYWR5IG9mIHZlY3RvciB0eXBlLiAgKi8KKyAgaWYgKFZFQ1RP Ul9UWVBFX1AgKGxvYWRfdHlwZSkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgZ2ltcGxlICpw YXR0ZXJuX3N0bXQ7CisKKyAgaWYgKENPTlNUQU5UX0NMQVNTX1AgKHZhbHVlKSkKKyAgICB2 YWx1ZSA9IGZvbGRfYnVpbGQxIChOT1BfRVhQUiwgbG9hZF90eXBlLCB2YWx1ZSk7CisgIGVs c2UKKyAgICB7CisgICAgICBpZiAoVFJFRV9DT0RFICh2YWx1ZSkgIT0gU1NBX05BTUUpCisJ cmV0dXJuIE5VTEw7CisgICAgICBnYXNzaWduICpub3Bfc3RtdCA9IGR5bl9jYXN0IDxnYXNz aWduICo+IChTU0FfTkFNRV9ERUZfU1RNVCAodmFsdWUpKTsKKyAgICAgIGlmICghbm9wX3N0 bXQgfHwgZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAobm9wX3N0bXQpICE9IE5PUF9FWFBSKQor CXJldHVybiBOVUxMOworICAgICAgaWYgKCF1c2VsZXNzX3R5cGVfY29udmVyc2lvbl9wIChU UkVFX1RZUEUgKHZhbHVlKSwgbG9hZF90eXBlKSkKKwl7CisJICB2YWx1ZSA9IGZvbGRfYnVp bGQxIChOT1BfRVhQUiwgbG9hZF90eXBlLCBnaW1wbGVfYXNzaWduX3JoczEgKG5vcF9zdG10 KSk7CisJICBwYXR0ZXJuX3N0bXQKKwkgICAgPSBnaW1wbGVfYnVpbGRfYXNzaWduICh2ZWN0 X3JlY29nX3RlbXBfc3NhX3ZhciAobG9hZF90eXBlLCBOVUxMKSwKKwkJCQkgICB2YWx1ZSk7 CisJICB2YWx1ZSA9IGdpbXBsZV9nZXRfbGhzIChwYXR0ZXJuX3N0bXQpOworCSAgYXBwZW5k X3BhdHRlcm5fZGVmX3NlcSAodmluZm8sIHN0bXRfaW5mbywgcGF0dGVybl9zdG10KTsKKwl9 CisgICAgfQorCisgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgbWFza19pID0gKDFVTEwgPDwg VFlQRV9QUkVDSVNJT04gKGJmX3R5cGUpKSAtIDE7CisgIHRyZWUgbWFza190ID0gYnVpbGRf aW50X2NzdCAobG9hZF90eXBlLCBtYXNrX2kpOworICAvKiBDbGVhciBiaXRzIHdlIGRvbid0 IHdhbnQgdG8gd3JpdGUgYmFjayBmcm9tIHZhbHVlIGFuZCBzaGlmdCBpdCBpbiBwbGFjZS4g ICovCisgIHBhdHRlcm5fc3RtdAorICAgID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodmVjdF9y ZWNvZ190ZW1wX3NzYV92YXIgKGxvYWRfdHlwZSwgTlVMTCksCisJCQkgICBmb2xkX2J1aWxk MiAoQklUX0FORF9FWFBSLCBsb2FkX3R5cGUsIHZhbHVlLAorCQkJCQltYXNrX3QpKTsKKyAg YXBwZW5kX3BhdHRlcm5fZGVmX3NlcSAodmluZm8sIHN0bXRfaW5mbywgcGF0dGVybl9zdG10 KTsKKyAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBzaGlmdF9uID0gdHJlZV90b191aHdpIChv ZmZzZXQpOworICBpZiAoc2hpZnRfbikKKyAgICB7CisgICAgICBwYXR0ZXJuX3N0bXQKKwk9 IGdpbXBsZV9idWlsZF9hc3NpZ24gKHZlY3RfcmVjb2dfdGVtcF9zc2FfdmFyIChsb2FkX3R5 cGUsIE5VTEwpLAorCQkJICAgICAgIExTSElGVF9FWFBSLCB2YWx1ZSwgb2Zmc2V0KTsKKyAg ICAgIGFwcGVuZF9wYXR0ZXJuX2RlZl9zZXEgKHZpbmZvLCBzdG10X2luZm8sIHBhdHRlcm5f c3RtdCk7CisgICAgICB2YWx1ZSA9IGdpbXBsZV9nZXRfbGhzIChwYXR0ZXJuX3N0bXQpOwor ICAgIH0KKyAgLyogTWFzayBvZmYgdGhlIGJpdHMgaW4gdGhlIGxvYWRlZCB2YWx1ZS4gICov CisgIG1hc2tfaSA8PD0gc2hpZnRfbjsKKyAgbWFza19pID0gfm1hc2tfaTsKKyAgbWFza190 ID0gYnVpbGRfaW50X2NzdCAobG9hZF90eXBlLCBtYXNrX2kpOworCisgIHRyZWUgbGhzID0g dmVjdF9yZWNvZ190ZW1wX3NzYV92YXIgKGxvYWRfdHlwZSwgTlVMTCk7CisgIHBhdHRlcm5f c3RtdCA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKGxocywgQklUX0FORF9FWFBSLGxvYWQsIG1h c2tfdCk7CisgIGFwcGVuZF9wYXR0ZXJuX2RlZl9zZXEgKHZpbmZvLCBzdG10X2luZm8sIHBh dHRlcm5fc3RtdCk7CisKKyAgLyogQ29tcG9zZSB0aGUgdmFsdWUgdG8gd3JpdGUgYmFjay4g ICovCisgIHBhdHRlcm5fc3RtdAorICAgID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodmVjdF9y ZWNvZ190ZW1wX3NzYV92YXIgKGxvYWRfdHlwZSwgTlVMTCksCisJCQkgICBCSVRfSU9SX0VY UFIsIGxocywgdmFsdWUpOworCisgICp0eXBlX291dCA9IFNUTVRfVklORk9fVkVDVFlQRSAo c3RtdF9pbmZvKTsKKyAgdmVjdF9wYXR0ZXJuX2RldGVjdGVkICgiYml0X2ZpZWxkX3JlZiBw YXR0ZXJuIiwgc3RtdF9pbmZvLT5zdG10KTsKKworICByZXR1cm4gcGF0dGVybl9zdG10Owor fQorCisKIC8qIFJlY29nbml6ZSBjYXNlcyBpbiB3aGljaCBhbiBvcGVyYXRpb24gaXMgcGVy Zm9ybWVkIGluIG9uZSB0eXBlIFdUWVBFCiAgICBidXQgY291bGQgYmUgZG9uZSBtb3JlIGVm ZmljaWVudGx5IGluIGEgbmFycm93ZXIgdHlwZSBOVFlQRS4gIEZvciBleGFtcGxlLAogICAg aWYgd2UgaGF2ZToKQEAgLTU2MjMsNiArNTgyMiw4IEBAIHN0cnVjdCB2ZWN0X3JlY29nX2Z1 bmMKICAgIHRha2VuIHdoaWNoIG1lYW5zIHVzdWFsbHkgdGhlIG1vcmUgY29tcGxleCBvbmUg bmVlZHMgdG8gcHJlY2VlZCB0aGUKICAgIGxlc3MgY29tcGxlcyBvbmV4ICh3aWRlbl9zdW0g b25seSBhZnRlciBkb3RfcHJvZCBvciBzYWQgZm9yIGV4YW1wbGUpLiAgKi8KIHN0YXRpYyB2 ZWN0X3JlY29nX2Z1bmMgdmVjdF92ZWN0X3JlY29nX2Z1bmNfcHRyc1tdID0geworICB7IHZl Y3RfcmVjb2dfYml0ZmllbGRfcmVmX3BhdHRlcm4sICJiaXRmaWVsZF9yZWYiIH0sCisgIHsg dmVjdF9yZWNvZ19iaXRfaW5zZXJ0X3BhdHRlcm4sICJiaXRfaW5zZXJ0IiB9LAogICB7IHZl Y3RfcmVjb2dfb3Zlcl93aWRlbmluZ19wYXR0ZXJuLCAib3Zlcl93aWRlbmluZyIgfSwKICAg LyogTXVzdCBjb21lIGFmdGVyIG92ZXJfd2lkZW5pbmcsIHdoaWNoIG5hcnJvd3MgdGhlIHNo aWZ0IGFzIG11Y2ggYXMKICAgICAgcG9zc2libGUgYmVmb3JlaGFuZC4gICovCg== --------------05gJsynyansKBraapcLVjddB--