From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sender4-pp-o90.zoho.com (sender4-pp-o90.zoho.com [136.143.188.90]) by sourceware.org (Postfix) with ESMTPS id 390773858D33; Thu, 23 Nov 2023 22:18:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 390773858D33 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=zoho.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=zoho.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 390773858D33 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=136.143.188.90 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1700777885; cv=pass; b=lBW9DwqAoZFrmrCmlgXw/2fviMB/9wgxv0/YpyOpNd3SFhqiFTmunvZodWVoz1d+CayX+1LeSbUHlX4JM48RMwqbWPMM08YBqu8/b94wnfWMwAORak/9Z4akdxxFoGl5UCOs/JhcfLJmcQjYki+xuuMYa7vI00DxI894/KpHO3s= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1700777885; c=relaxed/simple; bh=NR+eM1r+tt2EuBb/H0W0xsV2Mz+RAJmvfTrB8SQn/OQ=; h=DKIM-Signature:Message-ID:Subject:From:To:Date:MIME-Version; b=u3VYRd63nKE368q4InlzhGxwxiMJyjLFjSm3uDUx8oF80ei+MtFM8GjsNwGLxqGbier/bPwZJQDWvRtFf50I0rx1FHfLZnbE/unBlqOynwZ8Btuy0xWx6WakHSTaXGOOOmdz5zU7ue5n2xK+HijUAgubJG+J0JJ/swOGUVnxh78= ARC-Authentication-Results: i=2; server2.sourceware.org ARC-Seal: i=1; a=rsa-sha256; t=1700777875; cv=none; d=zohomail.com; s=zohoarc; b=LC7GelCmesuapzcT27MaALHcn60rrTGTZKqbGK7fAL2p5kyeJNdU3ELBHKOi8yr7zYfGJkob9TraK49o7rvYzzDz1gpOnHO3SlPmP25/IiACCUPiJbBzz545BCV+Hy1zMQdRGm44zL/m/08MGu7PypCzlaCi+PsD0rrKhmTWYL4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1700777875; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=FWSTVDjxUWn2QixyqdvSzUKLYIgtwIkmUBCy4KbDUgk=; b=OVY6I293HoPQWfCmwxw8tPGjrz1rSxAJkpCJIskgEZjBlorongl6OfVLeGtFlzqwygXQbcT0T2mPiLH14eDe4vVGmgcuYdasdYTbKCUeMgjJks5r0xhvUoVCjc0JCxQkdYKSjHkgUZB4lOq3O48LSKHt9/cCyMgqtOTJ13W+dhc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=zoho.com; spf=pass smtp.mailfrom=bouanto@zoho.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1700777875; s=zm2022; d=zoho.com; i=bouanto@zoho.com; h=Message-ID:Subject:Subject:From:From:To:To:Cc:Cc:Date:Date:In-Reply-To:References:Content-Type:MIME-Version:Feedback-ID:Message-Id:Reply-To; bh=FWSTVDjxUWn2QixyqdvSzUKLYIgtwIkmUBCy4KbDUgk=; b=TF2bmdf2B5Gv+2y21Kc1tmls1FWx0R8CrtFF+eNEoyZmDEHxAOlyr8OjveuirH1l jMe34byO5J23I8cvdHcNl3VnIHEmxHrmH3Ct+HVHj61D9ryD/rmty6hf1eiFdSTvO3t NCVdvZPOcmpcl++kn0sR08xe6ti0LPEpO1T8sVlo= Received: from [192.168.1.172] (38.87.11.6 [38.87.11.6]) by mx.zohomail.com with SMTPS id 1700777873171949.0256008503444; Thu, 23 Nov 2023 14:17:53 -0800 (PST) Message-ID: <9d88efbf2bda979ff0b7291714c0dd7b02a8e7ff.camel@zoho.com> Subject: Re: [PATCH] libgccjit: Add support for machine-dependent builtins From: Antoni Boucher To: Andrew Pinski Cc: jit@gcc.gnu.org, gcc-patches@gcc.gnu.org, David Malcolm Date: Thu, 23 Nov 2023 17:17:51 -0500 In-Reply-To: References: <184790403bd8227db4054b9e672afbfdf879dc0c.camel@zoho.com> Autocrypt: addr=bouanto@zoho.com; prefer-encrypt=mutual; keydata=mQENBFOSMLQBCADO5aw6Ys8thMQUNzrwAnfJX2wbgWiz0pQ01DjYj22eeIpChkoZn6LWdt4dieq30u2rFi/yQzJ02foHwI2+aL9rU6xz/x4TwqyRJQGMOqklNc3R+pdXmH4WDQkQDWmLxvc07vu+zb8Tx5A6pMDh4J2ncCEhLEUcH39Yq/yg4eBnFwUX6N7kakvHrnScGNqhnSFCacoJeMJUAR+1G7VBSBd++jmnHLnx3mj7QkRZVECJUw2zqiv1yReCC6GU4SvqLjdqm5ZGeoWOqD/NHjBRoEeOVjzp6M/qOjjWRbkJVqmvgfcD8UytSSqqboR35YFT4L+rZt2ri3T12MJb3i5syCAXABEBAAG0IUFudG9uaSBCb3VjaGVyIDxib3VhbnRvQHpvaG8uY29tPokBVgQTAQgAQAIbIwcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheAFiEEOELC4Uw1Jeb66YE6RVeGAwR4zcEFAlz4QM4FCRLMEZoACgkQRVeGAwR4zcFBQQf/afttJrA/puADQZhrDfkgr0MFvq6iB+GCy1b8BkXimk1TOXTPt87YLehSeijNu3JkYhl5eRc87BNfU9J87KfI/KIy6hZxqlDXk16FhW9bw/7wYEA0hpb3MUn7xLElXDT0ZHaD+KTe8Oun7qfzgx5RlL6r/WODf3CkSpO085R/rfeBqDEx9mVlhDWgq6Az3CZoD+3CqiCKVqmDuHTWz4kwrd9AM5eVcLvvLKnZIdoIp+G5Ao6BvaGlZyfenN1iOSjLy2NXNt4MnUt0lUYEP5KSIIRhHQ8xkUbj7eWUmaahkxhNb3fH3sAPwGnRZrPpb4rgYzNmSk63wWMh9M2xk+rLb7kBDQRTkjC0AQgAumZzsAV/UFWI+dpzebQfma36kKYZZFuseant5sq/HWP553XQ/U6ttJiKyN5MpCqtxvCAoRplf42YhlHuFqgf73WJxoJ6Y+sdyqoBSwlR+ gzAneAmsa8gmmY0wawH0Z2leazjKuS7mJjVEQZg0ZGsiCVRGeRnDqFGzDEzDc9ngWKSoTq0fKzlGy1X85OrtmUrvEbhSo6HP+FoeunHkIqrxu3w3vDoFEXxVQlKI6V3I4nCz5n6DB8WR3L7nsiiTnOiGirPw1ngvWFLW86kkA4FJpayc8Xl3va3SLY+2y4yuROboX2DVI4AC/Qeug/mDiBicPxkP6YfUartQRMe6obkEQARAQABiQE8BBgBCAAmAhsMFiEEOELC4Uw1Jeb66YE6RVeGAwR4zcEFAlz4QRsFCRLMEecACgkQRVeGAwR4zcE56ggAgTgrJInBKC+7552Dpccuo6Clh3wZfjlNLv9/6r5lKEbaNzaTrfhPiAP4WgnluIUmj8amOFLFJpj+BAVNOXpZ4D2R3o9ch8z7fot+fW4Yw+PKIxH4I2xEys8ndoEB3aiQwHjKcGIhkIU7uyMJFQr2aWjdTY0gmXw0YZueHOSLgo7uX4XKxB8fEO/yto/Tff2YBAAq+AtNwt+Gh5YS9rZw7rwUTWMi84yVOlc+zRE79E9NJkvdTwX7IJYo64VzIRNfgHsn7QNdVzuM1XIFHl+Glk6cIlI8s6BO7nEoCn3hTF104fQTAO3fEs+XXZOKXo2lk8faowEoPq5r58StrV0nyg== Content-Type: multipart/mixed; boundary="=-9TPNybT1zipV+A7XR0W8" User-Agent: Evolution 3.50.1 MIME-Version: 1.0 X-Zoho-Virus-Status: 1 X-Zoho-AV-Stamp: zmail-av-1.1.0/200.768.63 Feedback-ID: rr080112284a04543ea91ac8b0d512cf9200007e0efb74fdc8f441284a07e5560a4a51ce8b71ba3e9add9de9b3:zu080112269760aabe51b0a5aad00e11d60000ecd518a0ba394068139e6bc7abbc0a5f879cac6fbbb95572:rf08011232d6ffb22506b5c7b96e2ca25f0000e2c900f959609c19e2abb638a685d80dc24b4f2e4d29dd82c0f687620ed79465a95bf997:ZohoMail X-ZohoMailClient: External X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,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: --=-9TPNybT1zipV+A7XR0W8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi. I did split the patch and sent one for the bfloat16 support and another one for the vector support. Here's the updated patch for the machine-dependent builtins. Regards. On Sat, 2023-02-11 at 17:37 -0800, Andrew Pinski wrote: > On Sat, Feb 11, 2023 at 4:31 PM Antoni Boucher via Gcc-patches > wrote: > >=20 > > Hi. > > This patch adds support for machine-dependent builtins in libgccjit > > (bug 108762). > >=20 > > There are two things I don't like in this patch: > >=20 > > =C2=A01. There are a few functions copied from the C frontend > > (common_mark_addressable_vec and a few others). > >=20 > > =C2=A02. Getting a target builtin only works from the second compilatio= n > > since the type information is recorded at the first compilation. I > > couldn't find a way to get the builtin data without using the > > langhook. > > It is necessary to get the type information for type checking and > > instrospection. > >=20 > > Any idea how to fix these issues? >=20 > Seems like you should do this patch in a few steps; that is split it > up. > Definitely split out GCC_JIT_TYPE_BFLOAT16 support. > I also think the vector support should be in a different patch too. >=20 > Splitting out these parts would definitely make it easier for review > and make incremental improvements. >=20 > Thanks, > Andrew Pinski >=20 >=20 >=20 > >=20 > > Thanks for the review. --=-9TPNybT1zipV+A7XR0W8 Content-Disposition: attachment; filename*0=0001-libgccjit-Add-support-for-machine-dependent-builtins.pat; filename*1=ch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0001-libgccjit-Add-support-for-machine-dependent-builtins.patch"; charset="UTF-8" RnJvbSBlMDI1Zjk1ZjQ3OTBhZTg2MWU3MDljYWYyM2NiYzA3MjNjMWEzODA0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmkgQm91Y2hlciA8Ym91YW50b0B6b2hvLmNvbT4KRGF0 ZTogTW9uLCAyMyBKYW4gMjAyMyAxNzoyMToxNSAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIGxpYmdj Y2ppdDogQWRkIHN1cHBvcnQgZm9yIG1hY2hpbmUtZGVwZW5kZW50IGJ1aWx0aW5zCgpnY2MvQ2hh bmdlTG9nOgoJUFIgaml0LzEwODc2MgoJKiBjb25maWcvaTM4Ni9pMzg2LWJ1aWx0aW5zLmNjOiBO ZXcgZnVuY3Rpb24gKGNsZWFyX2J1aWx0aW5fdHlwZXMpLgoKZ2NjL2ppdC9DaGFuZ2VMb2c6CglQ UiBqaXQvMTA4NzYyCgkqIGRvY3MvdG9waWNzL2NvbXBhdGliaWxpdHkucnN0IChMSUJHQ0NKSVRf QUJJXzI2KTogTmV3IEFCSSB0YWcuCgkqIGRvY3MvdG9waWNzL2Z1bmN0aW9ucy5yc3Q6IEFkZCBk b2N1bWVudGF0aW9uIGZvciB0aGUgZnVuY3Rpb24KCWdjY19qaXRfY29udGV4dF9nZXRfdGFyZ2V0 X2J1aWx0aW5fZnVuY3Rpb24uCgkqIGR1bW15LWZyb250ZW5kLmNjOiBJbmNsdWRlIGhlYWRlcnMg dGFyZ2V0LmgsIGppdC1yZWNvcmRpbmcuaCwKCXByaW50LXRyZWUuaCwgdW5vcmRlcmVkX21hcCBh bmQgc3RyaW5nLCBuZXcgdmFyaWFibGVzICh0YXJnZXRfYnVpbHRpbnMsCgl0YXJnZXRfZnVuY3Rp b25fdHlwZXMsIGFuZCB0YXJnZXRfYnVpbHRpbnNfY3R4dCksIG5ldyBmdW5jdGlvbgoJKHRyZWVf dHlwZV90b19qaXRfdHlwZSkuCgkqIGppdC1idWlsdGlucy5jYzogU3BlY2lmeSB0aGF0IHRoZSBm dW5jdGlvbiB0eXBlcyBhcmUgbm90IGZyb20KCXRhcmdldCBidWlsdGlucy4KCSogaml0LXBsYXli YWNrLmNjOiBOZXcgYXJndW1lbnQgaXNfdGFyZ2V0X2J1aWx0aW4gdG8gbmV3X2Z1bmN0aW9uLgoJ KiBqaXQtcGxheWJhY2suaDogTmV3IGFyZ3VtZW50IGlzX3RhcmdldF9idWlsdGluIHRvCgluZXdf ZnVuY3Rpb24uCgkqIGppdC1yZWNvcmRpbmcuY2M6IE5ldyBhcmd1bWVudCBpc190YXJnZXRfYnVp bHRpbiB0bwoJbmV3X2Z1bmN0aW9uX3R5cGUsIGZ1bmN0aW9uX3R5cGUgY29uc3RydWN0b3IgYW5k IGZ1bmN0aW9uCgljb25zdHJ1Y3RvciwgbmV3IGZ1bmN0aW9uCgkoZ2V0X3RhcmdldF9idWlsdGlu X2Z1bmN0aW9uKS4KCSogaml0LXJlY29yZGluZy5oOiBJbmNsdWRlIGhlYWRlcnMgc3RyaW5nIGFu ZCB1bm9yZGVyZWRfbWFwLCBuZXcKCXZhcmlhYmxlIHRhcmdldF9mdW5jdGlvbl90eXBlcywgbmV3 IGFyZ3VtZW50IGlzX3RhcmdldF9idWlsdGluCgl0byBuZXdfZnVuY3Rpb25fdHlwZSwgZnVuY3Rp b25fdHlwZSBhbmQgZnVuY3Rpb24sIG5ldyBmdW5jdGlvbnMKCShnZXRfdGFyZ2V0X2J1aWx0aW5f ZnVuY3Rpb24sIGNvcHkpLgoJKiBsaWJnY2NqaXQuY2M6IE5ldyBmdW5jdGlvbgoJKGdjY19qaXRf Y29udGV4dF9nZXRfdGFyZ2V0X2J1aWx0aW5fZnVuY3Rpb24pLgoJKiBsaWJnY2NqaXQuaDogTmV3 IGZ1bmN0aW9uCgkoZ2NjX2ppdF9jb250ZXh0X2dldF90YXJnZXRfYnVpbHRpbl9mdW5jdGlvbiku CgkqIGxpYmdjY2ppdC5tYXA6IE5ldyBmdW5jdGlvbnMKCShnY2Nfaml0X2NvbnRleHRfZ2V0X3Rh cmdldF9idWlsdGluX2Z1bmN0aW9uKS4KCmdjYy90ZXN0c3VpdGU6CglQUiBqaXQvMTA4NzYyCgkq IGppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaDogTmV3IHRlc3QgdGVzdC10YXJnZXQtYnVp bHRpbnMuYy4KCSogaml0LmRnL3Rlc3QtdGFyZ2V0LWJ1aWx0aW5zLmM6IE5ldyB0ZXN0LgotLS0K IGdjYy9jb25maWcvaTM4Ni9pMzg2LWJ1aWx0aW5zLmNjICAgICAgICAgICAgIHwgIDE4ICsrCiBn Y2Mvaml0L2RvY3MvdG9waWNzL2NvbXBhdGliaWxpdHkucnN0ICAgICAgICB8ICAgOSArCiBnY2Mv aml0L2RvY3MvdG9waWNzL2Z1bmN0aW9ucy5yc3QgICAgICAgICAgICB8ICAxOSArKwogZ2NjL2pp dC9kdW1teS1mcm9udGVuZC5jYyAgICAgICAgICAgICAgICAgICAgfCAyMDQgKysrKysrKysrKysr KysrKysrLQogZ2NjL2ppdC9qaXQtYnVpbHRpbnMuY2MgICAgICAgICAgICAgICAgICAgICAgfCAg IDYgKy0KIGdjYy9qaXQvaml0LXBsYXliYWNrLmNjICAgICAgICAgICAgICAgICAgICAgIHwgIDEx ICstCiBnY2Mvaml0L2ppdC1wbGF5YmFjay5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgNSAr LQogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjICAgICAgICAgICAgICAgICAgICAgfCAgNzYgKysr KysrLQogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmggICAgICAgICAgICAgICAgICAgICAgfCAxMTEg KysrKysrKysrLQogZ2NjL2ppdC9saWJnY2NqaXQuY2MgICAgICAgICAgICAgICAgICAgICAgICAg fCAgMTggKysKIGdjYy9qaXQvbGliZ2Njaml0LmggICAgICAgICAgICAgICAgICAgICAgICAgIHwg IDEzICsrCiBnY2Mvaml0L2xpYmdjY2ppdC5tYXAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg NCArCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaCB8ICAgMyAr CiBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXRhcmdldC1idWlsdGlucy5jICB8ICA3NyArKysr KysrCiAxNCBmaWxlcyBjaGFuZ2VkLCA1NTQgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC10YXJnZXQtYnVp bHRpbnMuYwoKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LWJ1aWx0aW5zLmNjIGIv Z2NjL2NvbmZpZy9pMzg2L2kzODYtYnVpbHRpbnMuY2MKaW5kZXggNDJmYzM3NTE2NzYuLjVjYzFk NmY0ZDJlIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2kzODYvaTM4Ni1idWlsdGlucy5jYworKysg Yi9nY2MvY29uZmlnL2kzODYvaTM4Ni1idWlsdGlucy5jYwpAQCAtMjI1LDYgKzIyNSwyMiBAQCBz dGF0aWMgR1RZKCgpKSB0cmVlIGl4ODZfYnVpbHRpbnNbKGludCkgSVg4Nl9CVUlMVElOX01BWF07 CiAKIHN0cnVjdCBidWlsdGluX2lzYSBpeDg2X2J1aWx0aW5zX2lzYVsoaW50KSBJWDg2X0JVSUxU SU5fTUFYXTsKIAorc3RhdGljIHZvaWQKK2NsZWFyX2J1aWx0aW5fdHlwZXMgKHZvaWQpCit7Cisg IGZvciAoaW50IGkgPSAwIDsgaSA8IElYODZfQlRfTEFTVF9DUFRSICsgMSA7IGkrKykKKyAgICBp eDg2X2J1aWx0aW5fdHlwZV90YWJbaV0gPSBOVUxMOworCisgIGZvciAoaW50IGkgPSAwIDsgaSA8 IElYODZfQlVJTFRJTl9NQVggOyBpKyspCisgIHsKKyAgICBpeDg2X2J1aWx0aW5zW2ldID0gTlVM TDsKKyAgICBpeDg2X2J1aWx0aW5zX2lzYVtpXS5zZXRfYW5kX25vdF9idWlsdF9wID0gdHJ1ZTsK KyAgfQorCisgIGZvciAoaW50IGkgPSAwIDsgaSA8IElYODZfQlRfTEFTVF9BTElBUyArIDEgOyBp KyspCisgICAgaXg4Nl9idWlsdGluX2Z1bmNfdHlwZV90YWJbaV0gPSBOVUxMOworfQorCiB0cmVl IGdldF9peDg2X2J1aWx0aW4gKGVudW0gaXg4Nl9idWlsdGlucyBjKQogewogICByZXR1cm4gaXg4 Nl9idWlsdGluc1tjXTsKQEAgLTE0ODMsNiArMTQ5OSw4IEBAIGl4ODZfaW5pdF9idWlsdGlucyAo dm9pZCkKIHsKICAgdHJlZSBmdHlwZSwgZGVjbDsKIAorICBjbGVhcl9idWlsdGluX3R5cGVzICgp OworCiAgIGl4ODZfaW5pdF9idWlsdGluX3R5cGVzICgpOwogCiAgIC8qIEJ1aWx0aW5zIHRvIGdl dCBDUFUgdHlwZSBhbmQgZmVhdHVyZXMuICovCmRpZmYgLS1naXQgYS9nY2Mvaml0L2RvY3MvdG9w aWNzL2NvbXBhdGliaWxpdHkucnN0IGIvZ2NjL2ppdC9kb2NzL3RvcGljcy9jb21wYXRpYmlsaXR5 LnJzdAppbmRleCBlYmVkZTQ0MGVlNC4uNzY0ZGUyMzM0MWUgMTAwNjQ0Ci0tLSBhL2djYy9qaXQv ZG9jcy90b3BpY3MvY29tcGF0aWJpbGl0eS5yc3QKKysrIGIvZ2NjL2ppdC9kb2NzL3RvcGljcy9j b21wYXRpYmlsaXR5LnJzdApAQCAtMzc4LDMgKzM3OCwxMiBAQCBhbGlnbm1lbnQgb2YgYSB2YXJp YWJsZToKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiBgYExJQkdDQ0pJVF9BQklfMjVgYCBjb3ZlcnMg dGhlIGFkZGl0aW9uIG9mCiA6ZnVuYzpgZ2NjX2ppdF90eXBlX2dldF9yZXN0cmljdGAKKworLi4g X0xJQkdDQ0pJVF9BQklfMjY6CisKK2BgTElCR0NDSklUX0FCSV8yNmBgCistLS0tLS0tLS0tLS0t LS0tLS0tLQorCitgYExJQkdDQ0pJVF9BQklfMjZgYCBjb3ZlcnMgdGhlIGFkZGl0aW9uIG9mIGEg ZnVuY3Rpb24gdG8gZ2V0IHRhcmdldCBidWlsdGluczoKKworICAqIDpmdW5jOmBnY2Nfaml0X2Nv bnRleHRfZ2V0X3RhcmdldF9idWlsdGluX2Z1bmN0aW9uYApkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9k b2NzL3RvcGljcy9mdW5jdGlvbnMucnN0IGIvZ2NjL2ppdC9kb2NzL3RvcGljcy9mdW5jdGlvbnMu cnN0CmluZGV4IGNmNWNiNzE2ZGFmLi5lOWI3N2ZkYjg5MiAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9k b2NzL3RvcGljcy9mdW5jdGlvbnMucnN0CisrKyBiL2djYy9qaXQvZG9jcy90b3BpY3MvZnVuY3Rp b25zLnJzdApAQCAtMTQwLDYgKzE0MCwyNSBAQCBGdW5jdGlvbnMKICAgICAgIHVzZXMgc3VjaCBh IHBhcmFtZXRlciB3aWxsIGxlYWQgdG8gYW4gZXJyb3IgYmVpbmcgZW1pdHRlZCB3aXRoaW4KICAg ICAgIHRoZSBjb250ZXh0LgogCisuLiBmdW5jdGlvbjo6ICBnY2Nfaml0X2Z1bmN0aW9uICpcCisg ICAgICAgICAgICAgICBnY2Nfaml0X2NvbnRleHRfZ2V0X3RhcmdldF9idWlsdGluX2Z1bmN0aW9u IChnY2Nfaml0X2NvbnRleHQgKmN0eHQsXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSkKKworICAgR2V0 IHRoZSA6dHlwZTpgZ2NjX2ppdF9mdW5jdGlvbmAgZm9yIHRoZSBidWlsdC1pbiBmdW5jdGlvbiB3 aXRoIHRoZQorICAgZ2l2ZW4gbmFtZS4gIEZvciBleGFtcGxlOgorCisgICAuLiBjb2RlLWJsb2Nr OjogYworCisgICAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbgorICAgICAgICA9IGdjY19qaXRfY29u dGV4dF9nZXRfdGFyZ2V0X2J1aWx0aW5fZnVuY3Rpb24gKGN0eHQsICJfX2J1aWx0aW5faWEzMl9w bXVsZHE1MTJfbWFzayIpOworCisgICAuLiBub3RlOjogRHVlIHRvIHRlY2huaWNhbCBsaW1pdGF0 aW9ucyB3aXRoIGhvdyBsaWJnY2NqaXQgaW50ZXJhY3RzIHdpdGgKKyAgICAgIHRoZSBpbnNpZGVz IG9mIEdDQywgbm90IGFsbCBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIHN1cHBvcnRlZC4gIE1vcmUK KyAgICAgIHByZWNpc2VseSwgbm90IGFsbCB0eXBlcyBhcmUgc3VwcG9ydGVkIGZvciBwYXJhbWV0 ZXJzIG9mIGJ1aWx0LWluCisgICAgICBmdW5jdGlvbnMgZnJvbSBsaWJnY2NqaXQuICBBdHRlbXB0 cyB0byBnZXQgYSBidWlsdC1pbiBmdW5jdGlvbiB0aGF0CisgICAgICB1c2VzIHN1Y2ggYSBwYXJh bWV0ZXIgd2lsbCBsZWFkIHRvIGFuIGVycm9yIGJlaW5nIGVtaXR0ZWQgd2l0aGluCisgICAgICB0 aGUgY29udGV4dC4KKwogLi4gZnVuY3Rpb246OiAgZ2NjX2ppdF9vYmplY3QgKlwKICAgICAgICAg ICAgICAgIGdjY19qaXRfZnVuY3Rpb25fYXNfb2JqZWN0IChnY2Nfaml0X2Z1bmN0aW9uICpmdW5j KQogCmRpZmYgLS1naXQgYS9nY2Mvaml0L2R1bW15LWZyb250ZW5kLmNjIGIvZ2NjL2ppdC9kdW1t eS1mcm9udGVuZC5jYwppbmRleCBhNzI5MDg2YmFmYi4uM2NhOTcwMmQ0MjkgMTAwNjQ0Ci0tLSBh L2djYy9qaXQvZHVtbXktZnJvbnRlbmQuY2MKKysrIGIvZ2NjL2ppdC9kdW1teS1mcm9udGVuZC5j YwpAQCAtMjAsNiArMjAsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcz LiAgSWYgbm90IHNlZQogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgInN5c3RlbS5oIgog I2luY2x1ZGUgImNvcmV0eXBlcy5oIgorI2luY2x1ZGUgInRhcmdldC5oIgogI2luY2x1ZGUgImpp dC1wbGF5YmFjay5oIgogI2luY2x1ZGUgInN0b3ItbGF5b3V0LmgiCiAjaW5jbHVkZSAiZGVidWcu aCIKQEAgLTI5LDggKzMwLDE0IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlO RzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAib3B0aW9ucy5oIgogI2luY2x1ZGUgInN0cmluZ3Bv b2wuaCIKICNpbmNsdWRlICJhdHRyaWJzLmgiCisjaW5jbHVkZSAiaml0LXJlY29yZGluZy5oIgor I2luY2x1ZGUgInByaW50LXRyZWUuaCIKIAogI2luY2x1ZGUgPG1wZnIuaD4KKyNpbmNsdWRlIDx1 bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHN0cmluZz4KKwordXNpbmcgbmFtZXNwYWNlIGdjYzo6 aml0OwogCiAvKiBBdHRyaWJ1dGUgaGFuZGxpbmcuICAqLwogCkBAIC04Niw2ICs5MywxMSBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9zcGVjOjpleGNsdXNpb25zIGF0dHJfY29uc3Rf cHVyZV9leGNsdXNpb25zW10gPQogICBBVFRSX0VYQ0wgKE5VTEwsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCiB9OwogCitoYXNoX21hcDxub2ZyZWVfc3RyaW5nX2hhc2gsIHRyZWU+IHRhcmdldF9idWls dGluc3t9Oworc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCByZWNvcmRpbmc6OmZ1bmN0 aW9uX3R5cGUqPiB0YXJnZXRfZnVuY3Rpb25fdHlwZXMKK3t9OworcmVjb3JkaW5nOjpjb250ZXh0 IHRhcmdldF9idWlsdGluc19jdHh0e05VTEx9OworCiAvKiBUYWJsZSBvZiBtYWNoaW5lLWluZGVw ZW5kZW50IGF0dHJpYnV0ZXMgc3VwcG9ydGVkIGluIGxpYmdjY2ppdC4gICovCiBjb25zdCBzdHJ1 Y3QgYXR0cmlidXRlX3NwZWMgaml0X2F0dHJpYnV0ZV90YWJsZVtdID0KIHsKQEAgLTU5NCw2ICs2 MDYsNyBAQCBqaXRfbGFuZ2hvb2tfaW5pdCAodm9pZCkKIAogICBidWlsZF9jb21tb25fdHJlZV9u b2RlcyAoZmFsc2UpOwogCisgIHRhcmdldF9idWlsdGlucy5lbXB0eSAoKTsKICAgYnVpbGRfY29t bW9uX2J1aWx0aW5fbm9kZXMgKCk7CiAKICAgLyogVGhlIGRlZmF1bHQgcHJlY2lzaW9uIGZvciBm bG9hdGluZyBwb2ludCBudW1iZXJzLiAgVGhpcyBpcyB1c2VkCkBAIC02MDEsNiArNjE0LDggQEAg aml0X2xhbmdob29rX2luaXQgKHZvaWQpCiAgICAgIGV2ZW50dWFsbHkgYmUgY29udHJvbGxhYmxl IGJ5IGEgY29tbWFuZCBsaW5lIG9wdGlvbi4gICovCiAgIG1wZnJfc2V0X2RlZmF1bHRfcHJlYyAo MjU2KTsKIAorICB0YXJnZXRtLmluaXRfYnVpbHRpbnMgKCk7CisKICAgcmV0dXJuIHRydWU7CiB9 CiAKQEAgLTY2OCwxMSArNjgzLDE5OCBAQCBqaXRfbGFuZ2hvb2tfdHlwZV9mb3JfbW9kZSAobWFj aGluZV9tb2RlIG1vZGUsIGludCB1bnNpZ25lZHApCiAgIHJldHVybiBOVUxMOwogfQogCi0vKiBS ZWNvcmQgYSBidWlsdGluIGZ1bmN0aW9uLiAgV2UganVzdCBpZ25vcmUgYnVpbHRpbiBmdW5jdGlv bnMuICAqLworcmVjb3JkaW5nOjp0eXBlKiB0cmVlX3R5cGVfdG9faml0X3R5cGUgKHRyZWUgdHlw ZSkKK3sKKyAgaWYgKFRSRUVfQ09ERSAodHlwZSkgPT0gVkVDVE9SX1RZUEUpCisgIHsKKyAgICB0 cmVlIGlubmVyX3R5cGUgPSBUUkVFX1RZUEUgKHR5cGUpOworICAgIHJlY29yZGluZzo6dHlwZSog ZWxlbWVudF90eXBlID0gdHJlZV90eXBlX3RvX2ppdF90eXBlIChpbm5lcl90eXBlKTsKKyAgICBw b2x5X3VpbnQ2NCBzaXplID0gVFlQRV9WRUNUT1JfU1VCUEFSVFMgKHR5cGUpOworICAgIGxvbmcg Y29uc3RhbnRfc2l6ZSA9IHNpemUudG9fY29uc3RhbnQgKCk7CisgICAgaWYgKGVsZW1lbnRfdHlw ZSAhPSBOVUxMKQorICAgICAgcmV0dXJuIGVsZW1lbnRfdHlwZS0+Z2V0X3ZlY3RvciAoY29uc3Rh bnRfc2l6ZSk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgaWYgKFRSRUVfQ09ERSAodHlwZSkg PT0gUkVGRVJFTkNFX1RZUEUpCisgICAgLy8gRm9yIF9fYnVpbHRpbl9tc192YV9zdGFydC4KKyAg ICAvLyBGSVhNRTogd3JvbmcgdHlwZS4KKyAgICByZXR1cm4gbmV3IHJlY29yZGluZzo6bWVtZW50 b19vZl9nZXRfdHlwZSAoJnRhcmdldF9idWlsdGluc19jdHh0LAorCQkJCQkgICAgICAgR0NDX0pJ VF9UWVBFX1ZPSUQpOworICBpZiAoVFJFRV9DT0RFICh0eXBlKSA9PSBSRUNPUkRfVFlQRSkKKyAg ICAvLyBGb3IgX19idWlsdGluX3N5c3ZfdmFfY29weS4KKyAgICAvLyBGSVhNRTogd3JvbmcgdHlw ZS4KKyAgICByZXR1cm4gbmV3IHJlY29yZGluZzo6bWVtZW50b19vZl9nZXRfdHlwZSAoJnRhcmdl dF9idWlsdGluc19jdHh0LAorCQkJCQkgICAgICAgR0NDX0pJVF9UWVBFX1ZPSUQpOworICBmb3Ig KGludCBpID0gMDsgaSA8IE5VTV9GTE9BVE5fTlhfVFlQRVM7IGkrKykKKyAgICBpZiAodHlwZSA9 PSBGTE9BVE5fTlhfVFlQRV9OT0RFIChpKSkKKyAgICAgIC8vIEZJWE1FOiB3cm9uZyB0eXBlLgor ICAgICAgcmV0dXJuIG5ldyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0X3R5cGUgKCZ0YXJnZXRf YnVpbHRpbnNfY3R4dCwKKwkJCQkJCSBHQ0NfSklUX1RZUEVfVk9JRCk7CisgIGlmICh0eXBlID09 IHZvaWRfdHlwZV9ub2RlKQorICAgIHJldHVybiBuZXcgcmVjb3JkaW5nOjptZW1lbnRvX29mX2dl dF90eXBlICgmdGFyZ2V0X2J1aWx0aW5zX2N0eHQsCisJCQkJCSAgICAgICBHQ0NfSklUX1RZUEVf Vk9JRCk7CisgIGVsc2UgaWYgKHR5cGUgPT0gcHRyX3R5cGVfbm9kZSkKKyAgICByZXR1cm4gbmV3 IHJlY29yZGluZzo6bWVtZW50b19vZl9nZXRfdHlwZSAoJnRhcmdldF9idWlsdGluc19jdHh0LAor CQkJCQkgICAgICAgR0NDX0pJVF9UWVBFX1ZPSURfUFRSKTsKKyAgZWxzZSBpZiAodHlwZSA9PSBj b25zdF9wdHJfdHlwZV9ub2RlKQorICB7CisgICAgLy8gVm9pZCBjb25zdCBwdHIuCisgICAgcmVj b3JkaW5nOjp0eXBlKiByZXN1bHQgPQorICAgICAgbmV3IHJlY29yZGluZzo6bWVtZW50b19vZl9n ZXRfdHlwZSAoJnRhcmdldF9idWlsdGluc19jdHh0LAorCQkJCQkgIEdDQ19KSVRfVFlQRV9WT0lE X1BUUik7CisgICAgcmV0dXJuIG5ldyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0X2NvbnN0IChy ZXN1bHQpOworICB9CisgIGVsc2UgaWYgKHR5cGUgPT0gdW5zaWduZWRfdHlwZV9ub2RlKQorICAg IHJldHVybiBuZXcgcmVjb3JkaW5nOjptZW1lbnRvX29mX2dldF90eXBlICgmdGFyZ2V0X2J1aWx0 aW5zX2N0eHQsCisJCQkJCSAgICAgICBHQ0NfSklUX1RZUEVfVU5TSUdORURfSU5UKTsKKyAgZWxz ZSBpZiAodHlwZSA9PSBsb25nX3Vuc2lnbmVkX3R5cGVfbm9kZSkKKyAgICByZXR1cm4gbmV3IHJl Y29yZGluZzo6bWVtZW50b19vZl9nZXRfdHlwZSAoJnRhcmdldF9idWlsdGluc19jdHh0LAorCQkJ CQkgICAgICAgR0NDX0pJVF9UWVBFX1VOU0lHTkVEX0xPTkcpOworICBlbHNlIGlmICh0eXBlID09 IGludGVnZXJfdHlwZV9ub2RlKQorICAgIHJldHVybiBuZXcgcmVjb3JkaW5nOjptZW1lbnRvX29m X2dldF90eXBlICgmdGFyZ2V0X2J1aWx0aW5zX2N0eHQsCisJCQkJCSAgICAgICBHQ0NfSklUX1RZ UEVfSU5UKTsKKyAgZWxzZSBpZiAodHlwZSA9PSBsb25nX2ludGVnZXJfdHlwZV9ub2RlKQorICAg IHJldHVybiBuZXcgcmVjb3JkaW5nOjptZW1lbnRvX29mX2dldF90eXBlICgmdGFyZ2V0X2J1aWx0 aW5zX2N0eHQsCisJCQkJCSAgICAgICBHQ0NfSklUX1RZUEVfTE9ORyk7CisgIGVsc2UgaWYgKHR5 cGUgPT0gbG9uZ19sb25nX2ludGVnZXJfdHlwZV9ub2RlKQorICAgIHJldHVybiBuZXcgcmVjb3Jk aW5nOjptZW1lbnRvX29mX2dldF90eXBlICgmdGFyZ2V0X2J1aWx0aW5zX2N0eHQsCisJCQkJCSAg ICAgICBHQ0NfSklUX1RZUEVfTE9OR19MT05HKTsKKyAgZWxzZSBpZiAodHlwZSA9PSBzaWduZWRf Y2hhcl90eXBlX25vZGUpCisgICAgcmV0dXJuIG5ldyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0 X3R5cGUgKCZ0YXJnZXRfYnVpbHRpbnNfY3R4dCwKKwkJCQkJICAgICAgIEdDQ19KSVRfVFlQRV9T SUdORURfQ0hBUik7CisgIGVsc2UgaWYgKHR5cGUgPT0gY2hhcl90eXBlX25vZGUpCisgICAgcmV0 dXJuIG5ldyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0X3R5cGUgKCZ0YXJnZXRfYnVpbHRpbnNf Y3R4dCwKKwkJCQkJICAgICAgIEdDQ19KSVRfVFlQRV9DSEFSKTsKKyAgZWxzZSBpZiAodHlwZSA9 PSB1bnNpZ25lZF9pbnRRSV90eXBlX25vZGUpCisgICAgcmV0dXJuIG5ldyByZWNvcmRpbmc6Om1l bWVudG9fb2ZfZ2V0X3R5cGUgKCZ0YXJnZXRfYnVpbHRpbnNfY3R4dCwKKwkJCQkJICAgICAgIEdD Q19KSVRfVFlQRV9VSU5UOF9UKTsKKyAgZWxzZSBpZiAodHlwZSA9PSBzaG9ydF9pbnRlZ2VyX3R5 cGVfbm9kZSkKKyAgICByZXR1cm4gbmV3IHJlY29yZGluZzo6bWVtZW50b19vZl9nZXRfdHlwZSAo JnRhcmdldF9idWlsdGluc19jdHh0LAorCQkJCQkgICAgICAgR0NDX0pJVF9UWVBFX1NIT1JUKTsK KyAgZWxzZSBpZiAodHlwZSA9PSBzaG9ydF91bnNpZ25lZF90eXBlX25vZGUpCisgICAgcmV0dXJu IG5ldyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0X3R5cGUgKCZ0YXJnZXRfYnVpbHRpbnNfY3R4 dCwKKwkJCQkJICAgICAgIEdDQ19KSVRfVFlQRV9VTlNJR05FRF9TSE9SVCk7CisgIGVsc2UgaWYg KHR5cGUgPT0gY29tcGxleF9mbG9hdF90eXBlX25vZGUpCisgICAgcmV0dXJuIG5ldyByZWNvcmRp bmc6Om1lbWVudG9fb2ZfZ2V0X3R5cGUgKCZ0YXJnZXRfYnVpbHRpbnNfY3R4dCwKKwkJCQkJICAg ICAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0ZMT0FUKTsKKyAgZWxzZSBpZiAodHlwZSA9PSBjb21w bGV4X2RvdWJsZV90eXBlX25vZGUpCisgICAgcmV0dXJuIG5ldyByZWNvcmRpbmc6Om1lbWVudG9f b2ZfZ2V0X3R5cGUgKCZ0YXJnZXRfYnVpbHRpbnNfY3R4dCwKKwkJCQkJICAgICAgIEdDQ19KSVRf VFlQRV9DT01QTEVYX0RPVUJMRSk7CisgIGVsc2UgaWYgKHR5cGUgPT0gY29tcGxleF9sb25nX2Rv dWJsZV90eXBlX25vZGUpCisgICAgcmV0dXJuIG5ldyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0 X3R5cGUgKCZ0YXJnZXRfYnVpbHRpbnNfY3R4dCwKKwkJCQkJICAgIEdDQ19KSVRfVFlQRV9DT01Q TEVYX0xPTkdfRE9VQkxFKTsKKyAgZWxzZSBpZiAodHlwZSA9PSBmbG9hdF90eXBlX25vZGUpCisg ICAgcmV0dXJuIG5ldyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0X3R5cGUgKCZ0YXJnZXRfYnVp bHRpbnNfY3R4dCwKKwkJCQkJICAgICAgIEdDQ19KSVRfVFlQRV9GTE9BVCk7CisgIGVsc2UgaWYg KHR5cGUgPT0gZG91YmxlX3R5cGVfbm9kZSkKKyAgICByZXR1cm4gbmV3IHJlY29yZGluZzo6bWVt ZW50b19vZl9nZXRfdHlwZSAoJnRhcmdldF9idWlsdGluc19jdHh0LAorCQkJCQkgICAgICAgR0ND X0pJVF9UWVBFX0RPVUJMRSk7CisgIGVsc2UgaWYgKHR5cGUgPT0gbG9uZ19kb3VibGVfdHlwZV9u b2RlKQorICAgIHJldHVybiBuZXcgcmVjb3JkaW5nOjptZW1lbnRvX29mX2dldF90eXBlICgmdGFy Z2V0X2J1aWx0aW5zX2N0eHQsCisJCQkJCSAgICAgICBHQ0NfSklUX1RZUEVfTE9OR19ET1VCTEUp OworICBlbHNlIGlmICh0eXBlID09IGJmbG9hdDE2X3R5cGVfbm9kZSkKKyAgICAvLyBGSVhNRTog d3JvbmcgdHlwZS4KKyAgICByZXR1cm4gbmV3IHJlY29yZGluZzo6bWVtZW50b19vZl9nZXRfdHlw ZSAoJnRhcmdldF9idWlsdGluc19jdHh0LAorCQkJCQkgICAgICAgR0NDX0pJVF9UWVBFX1ZPSUQp OworICBlbHNlIGlmICh0eXBlID09IGRmbG9hdDEyOF90eXBlX25vZGUpCisgICAgLy8gRklYTUU6 IHdyb25nIHR5cGUuCisgICAgcmV0dXJuIG5ldyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0X3R5 cGUgKCZ0YXJnZXRfYnVpbHRpbnNfY3R4dCwKKwkJCQkJICAgICAgIEdDQ19KSVRfVFlQRV9WT0lE KTsKKyAgZWxzZSBpZiAodHlwZSA9PSBsb25nX2xvbmdfdW5zaWduZWRfdHlwZV9ub2RlKQorICAg IHJldHVybiBuZXcgcmVjb3JkaW5nOjptZW1lbnRvX29mX2dldF90eXBlICgmdGFyZ2V0X2J1aWx0 aW5zX2N0eHQsCisJCQkJCSAgICAgICBHQ0NfSklUX1RZUEVfVU5TSUdORURfTE9OR19MT05HKTsK KyAgZWxzZSBpZiAodHlwZSA9PSBib29sZWFuX3R5cGVfbm9kZSkKKyAgICByZXR1cm4gbmV3IHJl Y29yZGluZzo6bWVtZW50b19vZl9nZXRfdHlwZSAoJnRhcmdldF9idWlsdGluc19jdHh0LAorCQkJ CQkgICAgICAgR0NDX0pJVF9UWVBFX0JPT0wpOworICBlbHNlIGlmICh0eXBlID09IHNpemVfdHlw ZV9ub2RlKQorICAgIHJldHVybiBuZXcgcmVjb3JkaW5nOjptZW1lbnRvX29mX2dldF90eXBlICgm dGFyZ2V0X2J1aWx0aW5zX2N0eHQsCisJCQkJCSAgICAgICBHQ0NfSklUX1RZUEVfU0laRV9UKTsK KyAgZWxzZSBpZiAoVFJFRV9DT0RFICh0eXBlKSA9PSBQT0lOVEVSX1RZUEUpCisgIHsKKyAgICB0 cmVlIGlubmVyX3R5cGUgPSBUUkVFX1RZUEUgKHR5cGUpOworICAgIHJlY29yZGluZzo6dHlwZSog ZWxlbWVudF90eXBlID0gdHJlZV90eXBlX3RvX2ppdF90eXBlIChpbm5lcl90eXBlKTsKKyAgICBy ZXR1cm4gZWxlbWVudF90eXBlLT5nZXRfcG9pbnRlciAoKTsKKyAgfQorICBlbHNlCisgIHsKKyAg ICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gdW5xdWFsaWZpZWQgdHlwZSB3aGVuIHRoZSBjdXJyZW50 IHR5cGUgaGFzIHF1YWxpZmllcnMuCisgICAgdHJlZSB0cCA9IFRZUEVfTUFJTl9WQVJJQU5UICh0 eXBlKTsKKyAgICBmb3IgKCA7IHRwICE9IE5VTEwgOyB0cCA9IFRZUEVfTkVYVF9WQVJJQU5UICh0 cCkpCisgICAgeworICAgICAgaWYgKFRZUEVfUVVBTFMgKHRwKSA9PSAwICYmIHR5cGUgIT0gdHAp CisgICAgICB7CisJcmVjb3JkaW5nOjp0eXBlKiByZXN1bHQgPSB0cmVlX3R5cGVfdG9faml0X3R5 cGUgKHRwKTsKKwlpZiAocmVzdWx0ICE9IE5VTEwpCisJeworCSAgaWYgKFRZUEVfUkVBRE9OTFkg KHRwKSkKKwkgICAgcmVzdWx0ID0gbmV3IHJlY29yZGluZzo6bWVtZW50b19vZl9nZXRfY29uc3Qg KHJlc3VsdCk7CisJICBpZiAoVFlQRV9WT0xBVElMRSAodHApKQorCSAgICByZXN1bHQgPSBuZXcg cmVjb3JkaW5nOjptZW1lbnRvX29mX2dldF92b2xhdGlsZSAocmVzdWx0KTsKKwkgIHJldHVybiBy ZXN1bHQ7CisJfQorICAgICAgfQorICAgIH0KKworICAgIGZwcmludGYgKHN0ZGVyciwgIlVua25v d24gdHlwZTpcbiIpOworICAgIGRlYnVnX3RyZWUgKHR5cGUpOworICAgIGFib3J0ICgpOworICB9 CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFJlY29yZCBhIGJ1aWx0aW4gZnVuY3Rpb24uICBX ZSBzYXZlIHRoZWlyIHR5cGVzIHRvIGJlIGFibGUgdG8gY2hlY2sgdHlwZXMKKyAgIGluIHJlY29y ZGluZyBhbmQgZm9yIHJlZmxlY3Rpb24uICAqLwogCiBzdGF0aWMgdHJlZQogaml0X2xhbmdob29r X2J1aWx0aW5fZnVuY3Rpb24gKHRyZWUgZGVjbCkKIHsKKyAgaWYgKFRSRUVfQ09ERSAoZGVjbCkg PT0gRlVOQ1RJT05fREVDTCkKKyAgeworICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBJREVOVElGSUVS X1BPSU5URVIgKERFQ0xfTkFNRSAoZGVjbCkpOworICAgIHRhcmdldF9idWlsdGlucy5wdXQgKG5h bWUsIGRlY2wpOworCisgICAgc3RkOjpzdHJpbmcgc3RyaW5nX25hbWUgKG5hbWUpOworICAgIGlm ICh0YXJnZXRfZnVuY3Rpb25fdHlwZXMuY291bnQgKHN0cmluZ19uYW1lKSA9PSAwKQorICAgIHsK KyAgICAgIHRyZWUgZnVuY3Rpb25fdHlwZSA9IFRSRUVfVFlQRSAoZGVjbCk7CisgICAgICB0cmVl IGFyZyA9IFRZUEVfQVJHX1RZUEVTIChmdW5jdGlvbl90eXBlKTsKKyAgICAgIGJvb2wgaXNfdmFy aWFkaWMgPSBmYWxzZTsKKworICAgICAgYXV0b192ZWMgPHJlY29yZGluZzo6dHlwZSAqPiBwYXJh bV90eXBlczsKKworICAgICAgd2hpbGUgKGFyZyAhPSB2b2lkX2xpc3Rfbm9kZSkKKyAgICAgIHsK KwlpZiAoYXJnID09IE5VTEwpCisJeworCSAgaXNfdmFyaWFkaWMgPSB0cnVlOworCSAgYnJlYWs7 CisJfQorCWlmIChhcmcgIT0gdm9pZF9saXN0X25vZGUpCisJeworCSAgcmVjb3JkaW5nOjp0eXBl KiBhcmdfdHlwZSA9IHRyZWVfdHlwZV90b19qaXRfdHlwZSAoVFJFRV9WQUxVRSAoYXJnKSk7CisJ ICBpZiAoYXJnX3R5cGUgPT0gTlVMTCkKKwkgICAgcmV0dXJuIGRlY2w7CisJICBwYXJhbV90eXBl cy5zYWZlX3B1c2ggKGFyZ190eXBlKTsKKwl9CisJYXJnID0gVFJFRV9DSEFJTiAoYXJnKTsKKyAg ICAgIH0KKworICAgICAgdHJlZSByZXN1bHRfdHlwZSA9IFRSRUVfVFlQRSAoZnVuY3Rpb25fdHlw ZSk7CisgICAgICByZWNvcmRpbmc6OnR5cGUqIHJldHVybl90eXBlID0gdHJlZV90eXBlX3RvX2pp dF90eXBlIChyZXN1bHRfdHlwZSk7CisKKyAgICAgIGlmIChyZXR1cm5fdHlwZSA9PSBOVUxMKQor CXJldHVybiBkZWNsOworCisgICAgICByZWNvcmRpbmc6OmZ1bmN0aW9uX3R5cGUqIGZ1bmNfdHlw ZSA9CisJbmV3IHJlY29yZGluZzo6ZnVuY3Rpb25fdHlwZSAoJnRhcmdldF9idWlsdGluc19jdHh0 LCByZXR1cm5fdHlwZSwKKwkJCQkgICAgICBwYXJhbV90eXBlcy5sZW5ndGggKCksCisJCQkJICAg ICAgcGFyYW1fdHlwZXMuYWRkcmVzcyAoKSwgaXNfdmFyaWFkaWMsCisJCQkJICAgICAgZmFsc2Up OworCisgICAgICB0YXJnZXRfZnVuY3Rpb25fdHlwZXNbc3RyaW5nX25hbWVdID0gZnVuY190eXBl OworICAgIH0KKyAgfQogICByZXR1cm4gZGVjbDsKIH0KIApkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9q aXQtYnVpbHRpbnMuY2MgYi9nY2Mvaml0L2ppdC1idWlsdGlucy5jYwppbmRleCBmZGQwNzM5Nzg5 ZC4uNjM2MjhiZWFjODEgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LWJ1aWx0aW5zLmNjCisrKyBi L2djYy9qaXQvaml0LWJ1aWx0aW5zLmNjCkBAIC0yMTUsNyArMjE1LDggQEAgYnVpbHRpbnNfbWFu YWdlcjo6bWFrZV9idWlsdGluX2Z1bmN0aW9uIChlbnVtIGJ1aWx0X2luX2Z1bmN0aW9uIGJ1aWx0 aW5faWQpCiAJCQkgICAgIHBhcmFtX3R5cGVzLmxlbmd0aCAoKSwKIAkJCSAgICAgcGFyYW1zLAog CQkJICAgICBmdW5jX3R5cGUtPmlzX3ZhcmlhZGljICgpLAotCQkJICAgICBidWlsdGluX2lkKTsK KwkJCSAgICAgYnVpbHRpbl9pZCwKKwkJCSAgICAgZmFsc2UpOwogICBkZWxldGVbXSBwYXJhbXM7 CiAKICAgLyogUFIvNjQwMjAgLSBJZiB0aGUgY2xpZW50IGNvZGUgaXMgdXNpbmcgYnVpbHRpbiBj b3Mgb3Igc2luLApAQCAtNTgyLDcgKzU4Myw4IEBAIGJ1aWx0aW5zX21hbmFnZXI6Om1ha2VfZm5f dHlwZSAoZW51bSBqaXRfYnVpbHRpbl90eXBlLAogICByZXN1bHQgPSBtX2N0eHQtPm5ld19mdW5j dGlvbl90eXBlIChyZXR1cm5fdHlwZSwKIAkJCQkgICAgICBudW1fYXJncywKIAkJCQkgICAgICBw YXJhbV90eXBlcywKLQkJCQkgICAgICBpc192YXJpYWRpYyk7CisJCQkJICAgICAgaXNfdmFyaWFk aWMsCisJCQkJICAgICAgZmFsc2UpOwogCiAgZXJyb3I6CiAgIGRlbGV0ZVtdIHBhcmFtX3R5cGVz OwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suY2MgYi9nY2Mvaml0L2ppdC1wbGF5 YmFjay5jYwppbmRleCAxOGNjNGRhMjViOC4uZDcxZWUyYjYxYTcgMTAwNjQ0Ci0tLSBhL2djYy9q aXQvaml0LXBsYXliYWNrLmNjCisrKyBiL2djYy9qaXQvaml0LXBsYXliYWNrLmNjCkBAIC01MDks NyArNTA5LDggQEAgbmV3X2Z1bmN0aW9uIChsb2NhdGlvbiAqbG9jLAogCSAgICAgIGNvbnN0IGNo YXIgKm5hbWUsCiAJICAgICAgY29uc3QgYXV0b192ZWM8cGFyYW0gKj4gKnBhcmFtcywKIAkgICAg ICBpbnQgaXNfdmFyaWFkaWMsCi0JICAgICAgZW51bSBidWlsdF9pbl9mdW5jdGlvbiBidWlsdGlu X2lkKQorCSAgICAgIGVudW0gYnVpbHRfaW5fZnVuY3Rpb24gYnVpbHRpbl9pZCwKKwkgICAgICBp bnQgaXNfdGFyZ2V0X2J1aWx0aW4pCiB7CiAgIGludCBpOwogICBwYXJhbSAqcGFyYW07CkBAIC01 NDMsNiArNTQ0LDE0IEBAIG5ld19mdW5jdGlvbiAobG9jYXRpb24gKmxvYywKICAgREVDTF9SRVNV TFQgKGZuZGVjbCkgPSByZXNkZWNsOwogICBERUNMX0NPTlRFWFQgKHJlc2RlY2wpID0gZm5kZWNs OwogCisgIGlmIChpc190YXJnZXRfYnVpbHRpbikKKyAgeworICAgIHRyZWUgKmRlY2wgPSB0YXJn ZXRfYnVpbHRpbnMuZ2V0IChuYW1lKTsKKyAgICBpZiAoZGVjbCAhPSBOVUxMKQorICAgICAgZm5k ZWNsID0gKmRlY2w7CisgICAgZWxzZQorICAgICAgYWRkX2Vycm9yIChsb2MsICJjYW5ub3QgZmlu ZCB0YXJnZXQgYnVpbHRpbiAlcyIsIG5hbWUpOworICB9CiAgIGlmIChidWlsdGluX2lkKQogICAg IHsKICAgICAgIGdjY19hc3NlcnQgKGxvYyA9PSBOVUxMKTsKZGlmZiAtLWdpdCBhL2djYy9qaXQv aml0LXBsYXliYWNrLmggYi9nY2Mvaml0L2ppdC1wbGF5YmFjay5oCmluZGV4IGY5ZTI5ZDBiYWVj Li4wNjEyOGI0ZDY0MCAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suaAorKysgYi9n Y2Mvaml0L2ppdC1wbGF5YmFjay5oCkBAIC0xMDQsNyArMTA0LDggQEAgcHVibGljOgogCQljb25z dCBjaGFyICpuYW1lLAogCQljb25zdCBhdXRvX3ZlYzxwYXJhbSAqPiAqcGFyYW1zLAogCQlpbnQg aXNfdmFyaWFkaWMsCi0JCWVudW0gYnVpbHRfaW5fZnVuY3Rpb24gYnVpbHRpbl9pZCk7CisJCWVu dW0gYnVpbHRfaW5fZnVuY3Rpb24gYnVpbHRpbl9pZCwKKwkJaW50IGlzX3RhcmdldF9idWlsdGlu KTsKIAogICBsdmFsdWUgKgogICBuZXdfZ2xvYmFsIChsb2NhdGlvbiAqbG9jLApAQCAtODE4LDQg KzgxOSw2IEBAIGV4dGVybiBwbGF5YmFjazo6Y29udGV4dCAqYWN0aXZlX3BsYXliYWNrX2N0eHQ7 CiAKIH0gLy8gbmFtZXNwYWNlIGdjYwogCitleHRlcm4gaGFzaF9tYXA8bm9mcmVlX3N0cmluZ19o YXNoLCB0cmVlPiB0YXJnZXRfYnVpbHRpbnM7CisKICNlbmRpZiAvKiBKSVRfUExBWUJBQ0tfSCAq LwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjIGIvZ2NjL2ppdC9qaXQtcmVj b3JkaW5nLmNjCmluZGV4IDliNWI4MDA1ZWJlLi5kNjMyOTNiZDY0MiAxMDA2NDQKLS0tIGEvZ2Nj L2ppdC9qaXQtcmVjb3JkaW5nLmNjCisrKyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5jYwpAQCAt OTMzLDE0ICs5MzMsMTYgQEAgcmVjb3JkaW5nOjpmdW5jdGlvbl90eXBlICoKIHJlY29yZGluZzo6 Y29udGV4dDo6bmV3X2Z1bmN0aW9uX3R5cGUgKHJlY29yZGluZzo6dHlwZSAqcmV0dXJuX3R5cGUs CiAJCQkJICAgICAgIGludCBudW1fcGFyYW1zLAogCQkJCSAgICAgICByZWNvcmRpbmc6OnR5cGUg KipwYXJhbV90eXBlcywKLQkJCQkgICAgICAgaW50IGlzX3ZhcmlhZGljKQorCQkJCSAgICAgICBp bnQgaXNfdmFyaWFkaWMsCisJCQkJICAgICAgIGludCBpc190YXJnZXRfYnVpbHRpbikKIHsKICAg cmVjb3JkaW5nOjpmdW5jdGlvbl90eXBlICpmbl90eXBlCiAgICAgPSBuZXcgZnVuY3Rpb25fdHlw ZSAodGhpcywKIAkJCSByZXR1cm5fdHlwZSwKIAkJCSBudW1fcGFyYW1zLAogCQkJIHBhcmFtX3R5 cGVzLAotCQkJIGlzX3ZhcmlhZGljKTsKKwkJCSBpc192YXJpYWRpYywKKwkJCSBpc190YXJnZXRf YnVpbHRpbik7CiAgIHJlY29yZCAoZm5fdHlwZSk7CiAgIHJldHVybiBmbl90eXBlOwogfQpAQCAt OTYyLDcgKzk2NCw4IEBAIHJlY29yZGluZzo6Y29udGV4dDo6bmV3X2Z1bmN0aW9uX3B0cl90eXBl IChyZWNvcmRpbmc6OmxvY2F0aW9uICosIC8qIHVudXNlZCBsb2MKICAgICA9IG5ld19mdW5jdGlv bl90eXBlIChyZXR1cm5fdHlwZSwKIAkJCSBudW1fcGFyYW1zLAogCQkJIHBhcmFtX3R5cGVzLAot CQkJIGlzX3ZhcmlhZGljKTsKKwkJCSBpc192YXJpYWRpYywKKwkJCSBmYWxzZSk7CiAKICAgLyog UmV0dXJuIGEgcG9pbnRlci10eXBlIHRvIHRoZSBmdW5jdGlvbiB0eXBlLiAgKi8KICAgcmV0dXJu IGZuX3R5cGUtPmdldF9wb2ludGVyICgpOwpAQCAtMTAwNSw3ICsxMDA4LDcgQEAgcmVjb3JkaW5n Ojpjb250ZXh0OjpuZXdfZnVuY3Rpb24gKHJlY29yZGluZzo6bG9jYXRpb24gKmxvYywKIAkJCSAg ICAgbG9jLCBraW5kLCByZXR1cm5fdHlwZSwKIAkJCSAgICAgbmV3X3N0cmluZyAobmFtZSksCiAJ CQkgICAgIG51bV9wYXJhbXMsIHBhcmFtcywgaXNfdmFyaWFkaWMsCi0JCQkgICAgIGJ1aWx0aW5f aWQpOworCQkJICAgICBidWlsdGluX2lkLCBmYWxzZSk7CiAgIHJlY29yZCAocmVzdWx0KTsKICAg bV9mdW5jdGlvbnMuc2FmZV9wdXNoIChyZXN1bHQpOwogCkBAIC0xMDQ0LDYgKzEwNDcsNTMgQEAg cmVjb3JkaW5nOjpjb250ZXh0OjpnZXRfYnVpbHRpbl9mdW5jdGlvbiAoY29uc3QgY2hhciAqbmFt ZSkKICAgcmV0dXJuIGJtLT5nZXRfYnVpbHRpbl9mdW5jdGlvbiAobmFtZSk7CiB9CiAKKy8qIENy ZWF0ZSBhIHJlY29yZGluZzo6ZnVuY3Rpb24gaW5zdGFuY2UgZm9yIGEgdGFyZ2V0LXNwZWNpZmlj IGJ1aWx0aW4uCisKKyAgIEltcGxlbWVudHMgdGhlIHBvc3QtZXJyb3ItY2hlY2tpbmcgcGFydCBv ZgorICAgZ2NjX2ppdF9jb250ZXh0X2dldF90YXJnZXRfYnVpbHRpbl9mdW5jdGlvbi4gICovCisK K3JlY29yZGluZzo6ZnVuY3Rpb24gKgorcmVjb3JkaW5nOjpjb250ZXh0OjpnZXRfdGFyZ2V0X2J1 aWx0aW5fZnVuY3Rpb24gKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIGNvbnN0IGNoYXIgKmFzbV9u YW1lID0gbmFtZTsKKyAgaWYgKHRhcmdldF9mdW5jdGlvbl90eXBlcy5jb3VudCAobmFtZSkgPT0g MCkKKyAgeworICAgIGZwcmludGYgKHN0ZGVyciwgIkNhbm5vdCBmaW5kIHRhcmdldCBidWlsdGlu ICVzXG4iLCBuYW1lKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIHJlY29yZGluZzo6ZnVu Y3Rpb25fdHlwZSogZnVuY190eXBlID0gdGFyZ2V0X2Z1bmN0aW9uX3R5cGVzW25hbWVdCisgICAg LT5jb3B5ICh0aGlzKS0+ZHluX2Nhc3RfZnVuY3Rpb25fdHlwZSAoKTsKKyAgY29uc3QgdmVjPHR5 cGUgKj4mIHBhcmFtX3R5cGVzID0gZnVuY190eXBlLT5nZXRfcGFyYW1fdHlwZXMgKCk7CisgIHJl Y29yZGluZzo6cGFyYW0gKipwYXJhbXMgPSBuZXcgcmVjb3JkaW5nOjpwYXJhbSAqW3BhcmFtX3R5 cGVzLmxlbmd0aCAoKV07CisKKyAgaW50IGk7CisgIHJlY29yZGluZzo6dHlwZSAqcGFyYW1fdHlw ZTsKKyAgRk9SX0VBQ0hfVkVDX0VMVCAocGFyYW1fdHlwZXMsIGksIHBhcmFtX3R5cGUpCisgICAg eworICAgICAgY2hhciBidWZbMTZdOworICAgICAgc25wcmludGYgKGJ1ZiwgMTYsICJhcmclZCIs IGkpOworICAgICAgcGFyYW1zW2ldID0gbmV3X3BhcmFtIChOVUxMLAorCQkJICAgICBwYXJhbV90 eXBlLAorCQkJICAgICBidWYpOworICB9CisKKyAgcmVjb3JkaW5nOjpmdW5jdGlvbiAqcmVzdWx0 ID0KKyAgICBuZXcgcmVjb3JkaW5nOjpmdW5jdGlvbiAodGhpcywKKwkgIE5VTEwsCisJICBHQ0Nf SklUX0ZVTkNUSU9OX0lNUE9SVEVELAorCSAgZnVuY190eXBlLT5nZXRfcmV0dXJuX3R5cGUgKCks CisJICBuZXdfc3RyaW5nIChhc21fbmFtZSksCisJICBwYXJhbV90eXBlcy5sZW5ndGggKCksCisJ ICBwYXJhbXMsCisJICBmdW5jX3R5cGUtPmlzX3ZhcmlhZGljICgpLAorCSAgQlVJTFRfSU5fTk9O RSwKKwkgIHRydWUpOworICByZWNvcmQgKHJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30K KwogLyogQ3JlYXRlIGEgcmVjb3JkaW5nOjpnbG9iYWwgaW5zdGFuY2UgYW5kIGFkZCBpdCB0byB0 aGlzIGNvbnRleHQncyBsaXN0CiAgICBvZiBtZW1lbnRvcy4KIApAQCAtMzE0NSwxMSArMzE5NSwx MyBAQCByZWNvcmRpbmc6OmZ1bmN0aW9uX3R5cGU6OmZ1bmN0aW9uX3R5cGUgKGNvbnRleHQgKmN0 eHQsCiAJCQkJCSB0eXBlICpyZXR1cm5fdHlwZSwKIAkJCQkJIGludCBudW1fcGFyYW1zLAogCQkJ CQkgdHlwZSAqKnBhcmFtX3R5cGVzLAotCQkJCQkgaW50IGlzX3ZhcmlhZGljKQorCQkJCQkgaW50 IGlzX3ZhcmlhZGljLAorCQkJCQkgaW50IGlzX3RhcmdldF9idWlsdGluKQogOiB0eXBlIChjdHh0 KSwKICAgbV9yZXR1cm5fdHlwZSAocmV0dXJuX3R5cGUpLAogICBtX3BhcmFtX3R5cGVzICgpLAot ICBtX2lzX3ZhcmlhZGljIChpc192YXJpYWRpYykKKyAgbV9pc192YXJpYWRpYyAoaXNfdmFyaWFk aWMpLAorICBtX2lzX3RhcmdldF9idWlsdGluIChpc190YXJnZXRfYnVpbHRpbikKIHsKICAgZm9y IChpbnQgaSA9IDA7IGk8IG51bV9wYXJhbXM7IGkrKykKICAgICBtX3BhcmFtX3R5cGVzLnNhZmVf cHVzaCAocGFyYW1fdHlwZXNbaV0pOwpAQCAtNDA5MSw3ICs0MTQzLDggQEAgcmVjb3JkaW5nOjpm dW5jdGlvbjo6ZnVuY3Rpb24gKGNvbnRleHQgKmN0eHQsCiAJCQkgICAgICAgaW50IG51bV9wYXJh bXMsCiAJCQkgICAgICAgcmVjb3JkaW5nOjpwYXJhbSAqKnBhcmFtcywKIAkJCSAgICAgICBpbnQg aXNfdmFyaWFkaWMsCi0JCQkgICAgICAgZW51bSBidWlsdF9pbl9mdW5jdGlvbiBidWlsdGluX2lk KQorCQkJICAgICAgIGVudW0gYnVpbHRfaW5fZnVuY3Rpb24gYnVpbHRpbl9pZCwKKwkJCSAgICAg ICBpbnQgaXNfdGFyZ2V0X2J1aWx0aW4pCiA6IG1lbWVudG8gKGN0eHQpLAogICBtX2xvYyAobG9j KSwKICAgbV9raW5kIChraW5kKSwKQEAgLTQxMDIsNyArNDE1NSw4IEBAIHJlY29yZGluZzo6ZnVu Y3Rpb246OmZ1bmN0aW9uIChjb250ZXh0ICpjdHh0LAogICBtX2J1aWx0aW5faWQgKGJ1aWx0aW5f aWQpLAogICBtX2xvY2FscyAoKSwKICAgbV9ibG9ja3MgKCksCi0gIG1fZm5fcHRyX3R5cGUgKE5V TEwpCisgIG1fZm5fcHRyX3R5cGUgKE5VTEwpLAorICBtX2lzX3RhcmdldF9idWlsdGluIChpc190 YXJnZXRfYnVpbHRpbikKIHsKICAgZm9yIChpbnQgaSA9IDA7IGk8IG51bV9wYXJhbXM7IGkrKykK ICAgICB7CkBAIC00MTYxLDcgKzQyMTUsOCBAQCByZWNvcmRpbmc6OmZ1bmN0aW9uOjpyZXBsYXlf aW50byAocmVwbGF5ZXIgKnIpCiAJCQkJICAgICBtX25hbWUtPmNfc3RyICgpLAogCQkJCSAgICAg JnBhcmFtcywKIAkJCQkgICAgIG1faXNfdmFyaWFkaWMsCi0JCQkJICAgICBtX2J1aWx0aW5faWQp KTsKKwkJCQkgICAgIG1fYnVpbHRpbl9pZCwKKwkJCQkgICAgIG1faXNfdGFyZ2V0X2J1aWx0aW4p KTsKIH0KIAogLyogQ3JlYXRlIGEgcmVjb3JkaW5nOjpsb2NhbCBpbnN0YW5jZSBhbmQgYWRkIGl0 IHRvCkBAIC00Mzk0LDcgKzQ0NDksOCBAQCByZWNvcmRpbmc6OmZ1bmN0aW9uOjpnZXRfYWRkcmVz cyAocmVjb3JkaW5nOjpsb2NhdGlvbiAqbG9jKQogCT0gbV9jdHh0LT5uZXdfZnVuY3Rpb25fdHlw ZSAobV9yZXR1cm5fdHlwZSwKIAkJCQkgICAgIG1fcGFyYW1zLmxlbmd0aCAoKSwKIAkJCQkgICAg IHBhcmFtX3R5cGVzLmFkZHJlc3MgKCksCi0JCQkJICAgICBtX2lzX3ZhcmlhZGljKTsKKwkJCQkg ICAgIG1faXNfdmFyaWFkaWMsCisJCQkJICAgICBtX2lzX3RhcmdldF9idWlsdGluKTsKICAgICAg IG1fZm5fcHRyX3R5cGUgPSBmbl90eXBlLT5nZXRfcG9pbnRlciAoKTsKICAgICB9CiAgIGdjY19h c3NlcnQgKG1fZm5fcHRyX3R5cGUpOwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5n LmggYi9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuaAppbmRleCA0YTgwODI5OTFmYi4uODE1NDRkNmYw MDUgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LXJlY29yZGluZy5oCisrKyBiL2djYy9qaXQvaml0 LXJlY29yZGluZy5oCkBAIC0yNCwxMiArMjQsMTcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUg ZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJqaXQtY29tbW9uLmgiCiAjaW5j bHVkZSAiaml0LWxvZ2dpbmcuaCIKIAorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1bm9y ZGVyZWRfbWFwPgorCiBjbGFzcyB0aW1lcjsKIAorZXh0ZXJuIHN0ZDo6dW5vcmRlcmVkX21hcDxz dGQ6OnN0cmluZywgZ2NjOjpqaXQ6OnJlY29yZGluZzo6ZnVuY3Rpb25fdHlwZSo+CisgIHRhcmdl dF9mdW5jdGlvbl90eXBlczsKKwogbmFtZXNwYWNlIGdjYyB7CiAKIG5hbWVzcGFjZSBqaXQgewot CiBleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IHVuYXJ5X29wX3JlcHJvZHVjZXJfc3RyaW5nc1td OwogZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBiaW5hcnlfb3BfcmVwcm9kdWNlcl9zdHJpbmdz W107CiAKQEAgLTExNiw3ICsxMjEsOCBAQCBwdWJsaWM6CiAgIG5ld19mdW5jdGlvbl90eXBlICh0 eXBlICpyZXR1cm5fdHlwZSwKIAkJICAgICBpbnQgbnVtX3BhcmFtcywKIAkJICAgICB0eXBlICoq cGFyYW1fdHlwZXMsCi0JCSAgICAgaW50IGlzX3ZhcmlhZGljKTsKKwkJICAgICBpbnQgaXNfdmFy aWFkaWMsCisJCSAgICAgaW50IGlzX3RhcmdldF9idWlsdGluKTsKIAogICB0eXBlICoKICAgbmV3 X2Z1bmN0aW9uX3B0cl90eXBlIChsb2NhdGlvbiAqbG9jLApAQCAtMTQzLDYgKzE0OSw5IEBAIHB1 YmxpYzoKICAgZnVuY3Rpb24gKgogICBnZXRfYnVpbHRpbl9mdW5jdGlvbiAoY29uc3QgY2hhciAq bmFtZSk7CiAKKyAgZnVuY3Rpb24gKgorICBnZXRfdGFyZ2V0X2J1aWx0aW5fZnVuY3Rpb24gKGNv bnN0IGNoYXIgKm5hbWUpOworCiAgIGx2YWx1ZSAqCiAgIG5ld19nbG9iYWwgKGxvY2F0aW9uICps b2MsCiAJICAgICAgZW51bSBnY2Nfaml0X2dsb2JhbF9raW5kIGtpbmQsCkBAIC01NDAsNiArNTQ5 LDggQEAgcHVibGljOgogICAgICB0aGVzZSB0eXBlcy4gICovCiAgIHZpcnR1YWwgc2l6ZV90IGdl dF9zaXplICgpIHsgZ2NjX3VucmVhY2hhYmxlICgpOyB9CiAKKyAgdmlydHVhbCB0eXBlKiBjb3B5 IChjb250ZXh0KiBjdHh0KSA9IDA7CisKICAgLyogRHluYW1pYyBjYXN0cy4gICovCiAgIHZpcnR1 YWwgZnVuY3Rpb25fdHlwZSAqZHluX2Nhc3RfZnVuY3Rpb25fdHlwZSAoKSB7IHJldHVybiBOVUxM OyB9CiAgIHZpcnR1YWwgZnVuY3Rpb25fdHlwZSAqYXNfYV9mdW5jdGlvbl90eXBlKCkgeyBnY2Nf dW5yZWFjaGFibGUgKCk7IHJldHVybiBOVUxMOyB9CkBAIC02MTUsNiArNjI2LDExIEBAIHB1Ymxp YzoKIAogICBzaXplX3QgZ2V0X3NpemUgKCkgZmluYWwgb3ZlcnJpZGU7CiAKKyAgdHlwZSogY29w eSAoY29udGV4dCogY3R4dCkgZmluYWwgb3ZlcnJpZGUKKyAgeworICAgIHJldHVybiBjdHh0LT5n ZXRfdHlwZSAobV9raW5kKTsKKyAgfQorCiAgIGJvb2wgYWNjZXB0c193cml0ZXNfZnJvbSAodHlw ZSAqcnR5cGUpIGZpbmFsIG92ZXJyaWRlCiAgIHsKICAgICBpZiAobV9raW5kID09IEdDQ19KSVRf VFlQRV9WT0lEX1BUUikKQEAgLTY2Niw2ICs2ODIsMTMgQEAgcHVibGljOgogCiAgIHR5cGUgKmRl cmVmZXJlbmNlICgpIGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJuIG1fb3RoZXJfdHlwZTsgfQogCisg IHR5cGUqIGNvcHkgKGNvbnRleHQqIGN0eHQpIGZpbmFsIG92ZXJyaWRlCisgIHsKKyAgICB0eXBl KiByZXN1bHQgPSBuZXcgbWVtZW50b19vZl9nZXRfcG9pbnRlciAobV9vdGhlcl90eXBlLT5jb3B5 IChjdHh0KSk7CisgICAgY3R4dC0+cmVjb3JkIChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7 CisgIH0KKwogICBzaXplX3QgZ2V0X3NpemUgKCkgZmluYWwgb3ZlcnJpZGU7CiAKICAgYm9vbCBh Y2NlcHRzX3dyaXRlc19mcm9tICh0eXBlICpydHlwZSkgZmluYWwgb3ZlcnJpZGU7CkBAIC03MjYs NiArNzQ5LDEzIEBAIHB1YmxpYzoKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAorICB0eXBlKiBj b3B5IChjb250ZXh0KiBjdHh0KSBmaW5hbCBvdmVycmlkZQorICB7CisgICAgdHlwZSogcmVzdWx0 ID0gbmV3IG1lbWVudG9fb2ZfZ2V0X2NvbnN0IChtX290aGVyX3R5cGUtPmNvcHkgKGN0eHQpKTsK KyAgICBjdHh0LT5yZWNvcmQgKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCiAg IC8qIFN0cmlwIG9mZiB0aGUgImNvbnN0IiwgZ2l2aW5nIHRoZSB1bmRlcmx5aW5nIHR5cGUuICAq LwogICB0eXBlICp1bnF1YWxpZmllZCAoKSBmaW5hbCBvdmVycmlkZSB7IHJldHVybiBtX290aGVy X3R5cGU7IH0KIApAQCAtNzU5LDYgKzc4OSwxMyBAQCBwdWJsaWM6CiAgICAgcmV0dXJuIG1fb3Ro ZXJfdHlwZS0+aXNfc2FtZV90eXBlX2FzIChvdGhlci0+aXNfdm9sYXRpbGUgKCkpOwogICB9CiAK KyAgdHlwZSogY29weSAoY29udGV4dCogY3R4dCkgZmluYWwgb3ZlcnJpZGUKKyAgeworICAgIHR5 cGUqIHJlc3VsdCA9IG5ldyBtZW1lbnRvX29mX2dldF92b2xhdGlsZSAobV9vdGhlcl90eXBlLT5j b3B5IChjdHh0KSk7CisgICAgY3R4dC0+cmVjb3JkIChyZXN1bHQpOworICAgIHJldHVybiByZXN1 bHQ7CisgIH0KKwogICAvKiBTdHJpcCBvZmYgdGhlICJ2b2xhdGlsZSIsIGdpdmluZyB0aGUgdW5k ZXJseWluZyB0eXBlLiAgKi8KICAgdHlwZSAqdW5xdWFsaWZpZWQgKCkgZmluYWwgb3ZlcnJpZGUg eyByZXR1cm4gbV9vdGhlcl90eXBlOyB9CiAKQEAgLTc4NSw2ICs4MjIsMTMgQEAgcHVibGljOgog ICAgIHJldHVybiBtX290aGVyX3R5cGUtPmlzX3NhbWVfdHlwZV9hcyAob3RoZXItPmlzX3Jlc3Ry aWN0ICgpKTsKICAgfQogCisgIHR5cGUqIGNvcHkgKGNvbnRleHQqIGN0eHQpIGZpbmFsIG92ZXJy aWRlCisgIHsKKyAgICB0eXBlKiByZXN1bHQgPSBuZXcgbWVtZW50b19vZl9nZXRfcmVzdHJpY3Qg KG1fb3RoZXJfdHlwZS0+Y29weSAoY3R4dCkpOworICAgIGN0eHQtPnJlY29yZCAocmVzdWx0KTsK KyAgICByZXR1cm4gcmVzdWx0OworICB9CisKICAgLyogU3RyaXAgb2ZmIHRoZSAicmVzdHJpY3Qi LCBnaXZpbmcgdGhlIHVuZGVybHlpbmcgdHlwZS4gICovCiAgIHR5cGUgKnVucXVhbGlmaWVkICgp IGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJuIG1fb3RoZXJfdHlwZTsgfQogCkBAIC04MDUsNiArODQ5 LDE0IEBAIHB1YmxpYzoKICAgOiBkZWNvcmF0ZWRfdHlwZSAob3RoZXJfdHlwZSksCiAgICAgbV9h bGlnbm1lbnRfaW5fYnl0ZXMgKGFsaWdubWVudF9pbl9ieXRlcykge30KIAorICB0eXBlKiBjb3B5 IChjb250ZXh0KiBjdHh0KSBmaW5hbCBvdmVycmlkZQorICB7CisgICAgdHlwZSogcmVzdWx0ID0g bmV3IG1lbWVudG9fb2ZfZ2V0X2FsaWduZWQgKG1fb3RoZXJfdHlwZS0+Y29weSAoY3R4dCksCisJ CQkJCSAgICAgICBtX2FsaWdubWVudF9pbl9ieXRlcyk7CisgICAgY3R4dC0+cmVjb3JkIChyZXN1 bHQpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKwogICAvKiBTdHJpcCBvZmYgdGhlIGFsaWdu bWVudCwgZ2l2aW5nIHRoZSB1bmRlcmx5aW5nIHR5cGUuICAqLwogICB0eXBlICp1bnF1YWxpZmll ZCAoKSBmaW5hbCBvdmVycmlkZSB7IHJldHVybiBtX290aGVyX3R5cGU7IH0KIApAQCAtODI2LDYg Kzg3OCwxMyBAQCBwdWJsaWM6CiAgIDogZGVjb3JhdGVkX3R5cGUgKG90aGVyX3R5cGUpLAogICAg IG1fbnVtX3VuaXRzIChudW1fdW5pdHMpIHt9CiAKKyAgdHlwZSogY29weSAoY29udGV4dCogY3R4 dCkgZmluYWwgb3ZlcnJpZGUKKyAgeworICAgIHR5cGUqIHJlc3VsdCA9IG5ldyB2ZWN0b3JfdHlw ZSAobV9vdGhlcl90eXBlLT5jb3B5IChjdHh0KSwgbV9udW1fdW5pdHMpOworICAgIGN0eHQtPnJl Y29yZCAocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKICAgc2l6ZV90IGdldF9u dW1fdW5pdHMgKCkgY29uc3QgeyByZXR1cm4gbV9udW1fdW5pdHM7IH0KIAogICB2ZWN0b3JfdHlw ZSAqZHluX2Nhc3RfdmVjdG9yX3R5cGUgKCkgZmluYWwgb3ZlcnJpZGUgeyByZXR1cm4gdGhpczsg fQpAQCAtODY4LDYgKzkyNywxNCBAQCBjbGFzcyBhcnJheV90eXBlIDogcHVibGljIHR5cGUKIAog ICB0eXBlICpkZXJlZmVyZW5jZSAoKSBmaW5hbCBvdmVycmlkZTsKIAorICB0eXBlKiBjb3B5IChj b250ZXh0KiBjdHh0KSBmaW5hbCBvdmVycmlkZQorICB7CisgICAgdHlwZSogcmVzdWx0ID0gbmV3 IGFycmF5X3R5cGUgKGN0eHQsIG1fbG9jLCBtX2VsZW1lbnRfdHlwZS0+Y29weSAoY3R4dCksCisJ CQkJICAgbV9udW1fZWxlbWVudHMpOworICAgIGN0eHQtPnJlY29yZCAocmVzdWx0KTsKKyAgICBy ZXR1cm4gcmVzdWx0OworICB9CisKICAgYm9vbCBpc19pbnQgKCkgY29uc3QgZmluYWwgb3ZlcnJp ZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgYm9vbCBpc19mbG9hdCAoKSBjb25zdCBmaW5hbCBvdmVy cmlkZSB7IHJldHVybiBmYWxzZTsgfQogICBib29sIGlzX2Jvb2wgKCkgY29uc3QgZmluYWwgb3Zl cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTg5NSw3ICs5NjIsOCBAQCBwdWJsaWM6CiAJCSB0 eXBlICpyZXR1cm5fdHlwZSwKIAkJIGludCBudW1fcGFyYW1zLAogCQkgdHlwZSAqKnBhcmFtX3R5 cGVzLAotCQkgaW50IGlzX3ZhcmlhZGljKTsKKwkJIGludCBpc192YXJpYWRpYywKKwkJIGludCBp c190YXJnZXRfYnVpbHRpbik7CiAKICAgdHlwZSAqZGVyZWZlcmVuY2UgKCkgZmluYWwgb3ZlcnJp ZGU7CiAgIGZ1bmN0aW9uX3R5cGUgKmR5bl9jYXN0X2Z1bmN0aW9uX3R5cGUgKCkgZmluYWwgb3Zl cnJpZGUgeyByZXR1cm4gdGhpczsgfQpAQCAtOTAzLDYgKzk3MSwyMCBAQCBwdWJsaWM6CiAKICAg Ym9vbCBpc19zYW1lX3R5cGVfYXMgKHR5cGUgKm90aGVyKSBmaW5hbCBvdmVycmlkZTsKIAorICB0 eXBlKiBjb3B5IChjb250ZXh0KiBjdHh0KSBmaW5hbCBvdmVycmlkZQorICB7CisgICAgYXV0b192 ZWM8dHlwZSAqPiBuZXdfcGFyYW1ze307CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Bh cmFtX3R5cGVzLmxlbmd0aCAoKTsgaSsrKQorICAgICAgbmV3X3BhcmFtcy5zYWZlX3B1c2ggKG1f cGFyYW1fdHlwZXNbaV0tPmNvcHkgKGN0eHQpKTsKKworICAgIHR5cGUqIHJlc3VsdCA9IG5ldyBm dW5jdGlvbl90eXBlIChjdHh0LCBtX3JldHVybl90eXBlLT5jb3B5IChjdHh0KSwKKwkJCQkgICAg ICBtX3BhcmFtX3R5cGVzLmxlbmd0aCAoKSwKKwkJCQkgICAgICBuZXdfcGFyYW1zLmFkZHJlc3Mg KCksCisJCQkJICAgICAgbV9pc192YXJpYWRpYywgbV9pc190YXJnZXRfYnVpbHRpbik7CisgICAg Y3R4dC0+cmVjb3JkIChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKwogICBib29s IGlzX2ludCAoKSBjb25zdCBmaW5hbCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICBib29s IGlzX2Zsb2F0ICgpIGNvbnN0IGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgIGJv b2wgaXNfYm9vbCAoKSBjb25zdCBmaW5hbCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQpAQCAt OTMxLDYgKzEwMTMsNyBAQCBwcml2YXRlOgogICB0eXBlICptX3JldHVybl90eXBlOwogICBhdXRv X3ZlYzx0eXBlICo+IG1fcGFyYW1fdHlwZXM7CiAgIGludCBtX2lzX3ZhcmlhZGljOworICBpbnQg bV9pc190YXJnZXRfYnVpbHRpbjsKIH07CiAKIGNsYXNzIGZpZWxkIDogcHVibGljIG1lbWVudG8K QEAgLTEwMzIsOSArMTExNSwxMSBAQCBwdWJsaWM6CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0IDxw bGF5YmFjazo6Y29tcG91bmRfdHlwZSAqPiAobV9wbGF5YmFja19vYmopOwogICB9CiAKLXByaXZh dGU6Citwcm90ZWN0ZWQ6CiAgIGxvY2F0aW9uICptX2xvYzsKICAgc3RyaW5nICptX25hbWU7CisK K3ByaXZhdGU6CiAgIGZpZWxkcyAqbV9maWVsZHM7CiB9OwogCkBAIC0xMDQ3LDYgKzExMzIsMTMg QEAgcHVibGljOgogCiAgIHN0cnVjdF8gKmR5bl9jYXN0X3N0cnVjdCAoKSBmaW5hbCBvdmVycmlk ZSB7IHJldHVybiB0aGlzOyB9CiAKKyAgdHlwZSogY29weSAoY29udGV4dCogY3R4dCkgZmluYWwg b3ZlcnJpZGUKKyAgeworICAgIHR5cGUqIHJlc3VsdCA9IG5ldyBzdHJ1Y3RfIChjdHh0LCBtX2xv YywgbV9uYW1lKTsKKyAgICBjdHh0LT5yZWNvcmQgKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs dDsKKyAgfQorCiAgIHR5cGUgKgogICBhc190eXBlICgpIHsgcmV0dXJuIHRoaXM7IH0KIApAQCAt MTA5NCw2ICsxMTg2LDEzIEBAIHB1YmxpYzoKIAogICB2b2lkIHJlcGxheV9pbnRvIChyZXBsYXll ciAqcikgZmluYWwgb3ZlcnJpZGU7CiAKKyAgdHlwZSogY29weSAoY29udGV4dCogY3R4dCkgZmlu YWwgb3ZlcnJpZGUKKyAgeworICAgIHR5cGUqIHJlc3VsdCA9IG5ldyB1bmlvbl8gKGN0eHQsIG1f bG9jLCBtX25hbWUpOworICAgIGN0eHQtPnJlY29yZCAocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz dWx0OworICB9CisKICAgYm9vbCBpc191bmlvbiAoKSBjb25zdCBmaW5hbCBvdmVycmlkZSB7IHJl dHVybiB0cnVlOyB9CiAKIHByaXZhdGU6CkBAIC0xMzAyLDcgKzE0MDEsOCBAQCBwdWJsaWM6CiAJ ICAgIGludCBudW1fcGFyYW1zLAogCSAgICBwYXJhbSAqKnBhcmFtcywKIAkgICAgaW50IGlzX3Zh cmlhZGljLAotCSAgICBlbnVtIGJ1aWx0X2luX2Z1bmN0aW9uIGJ1aWx0aW5faWQpOworCSAgICBl bnVtIGJ1aWx0X2luX2Z1bmN0aW9uIGJ1aWx0aW5faWQsCisJICAgIGludCBpc190YXJnZXRfYnVp bHRpbik7CiAKICAgdm9pZCByZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpIGZpbmFsIG92ZXJyaWRl OwogCkBAIC0xMzU3LDYgKzE0NTcsNyBAQCBwcml2YXRlOgogICBhdXRvX3ZlYzxsb2NhbCAqPiBt X2xvY2FsczsKICAgYXV0b192ZWM8YmxvY2sgKj4gbV9ibG9ja3M7CiAgIHR5cGUgKm1fZm5fcHRy X3R5cGU7CisgIGludCBtX2lzX3RhcmdldF9idWlsdGluOwogfTsKIAogY2xhc3MgYmxvY2sgOiBw dWJsaWMgbWVtZW50bwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9saWJnY2NqaXQuY2MgYi9nY2Mvaml0 L2xpYmdjY2ppdC5jYwppbmRleCAwNDUxYjRkZjdmOS4uOWNlNDk0MWU2YjkgMTAwNjQ0Ci0tLSBh L2djYy9qaXQvbGliZ2Njaml0LmNjCisrKyBiL2djYy9qaXQvbGliZ2Njaml0LmNjCkBAIC0xNzYw LDYgKzE3NjAsMjQgQEAgZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3RvciAoZ2Nj X2ppdF9jb250ZXh0ICpjdHh0LAogICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NjOjpqaXQ6OnJlY29y ZGluZzo6cnZhbHVlKio+KHZhbHVlcykpOwogfQogCisvKiBQdWJsaWMgZW50cnlwb2ludC4gIFNl ZSBkZXNjcmlwdGlvbiBpbiBsaWJnY2NqaXQuaC4KKworICAgQWZ0ZXIgZXJyb3ItY2hlY2tpbmcs IHRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSB0aGUKKyAgIGdjYzo6aml0OjpyZWNvcmRpbmc6OmNv bnRleHQ6OmdldF90YXJnZXRfYnVpbHRpbl9mdW5jdGlvbiBtZXRob2QsIGluCisgICBqaXQtcmVj b3JkaW5nLmMuICAqLworCitnY2Nfaml0X2Z1bmN0aW9uICoKK2djY19qaXRfY29udGV4dF9nZXRf dGFyZ2V0X2J1aWx0aW5fZnVuY3Rpb24gKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkJCQkJICAg ICBjb25zdCBjaGFyICpuYW1lKQoreworICBSRVRVUk5fTlVMTF9JRl9GQUlMIChjdHh0LCBOVUxM LCBOVUxMLCAiTlVMTCBjb250ZXh0Iik7CisgIEpJVF9MT0dfRlVOQyAoY3R4dC0+Z2V0X2xvZ2dl ciAoKSk7CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKG5hbWUsIGN0eHQsIE5VTEwsICJOVUxMIG5h bWUiKTsKKworICByZXR1cm4gc3RhdGljX2Nhc3QgPGdjY19qaXRfZnVuY3Rpb24gKj4gKAorICAg IGN0eHQtPmdldF90YXJnZXRfYnVpbHRpbl9mdW5jdGlvbiAobmFtZSkpOworfQorCiAvKiBQdWJs aWMgZW50cnlwb2ludC4gIFNlZSBkZXNjcmlwdGlvbiBpbiBsaWJnY2NqaXQuaC4gICovCiAKIGV4 dGVybiBnY2Nfaml0X2x2YWx1ZSAqCmRpZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdC5oIGIv Z2NjL2ppdC9saWJnY2NqaXQuaAppbmRleCA3NDlmNmMyNDE3Ny4uYjcwNzIzZmQxZjYgMTAwNjQ0 Ci0tLSBhL2djYy9qaXQvbGliZ2Njaml0LmgKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQuaApAQCAt MTAzMCw2ICsxMDMwLDE5IEBAIGV4dGVybiBnY2Nfaml0X2x2YWx1ZSAqCiBnY2Nfaml0X2dsb2Jh bF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChnY2Nfaml0X2x2YWx1ZSAqZ2xvYmFsLAogCQkJCSAg ICAgICBnY2Nfaml0X3J2YWx1ZSAqaW5pdF92YWx1ZSk7CiAKKyNkZWZpbmUgTElCR0NDSklUX0hB VkVfZ2NjX2ppdF9jb250ZXh0X2dldF90YXJnZXRfYnVpbHRpbl9mdW5jdGlvbgorCisvKiBDcmVh dGUgYSByZWZlcmVuY2UgdG8gYSBtYWNoaW5lLXNwZWNpZmljIGJ1aWx0aW4gZnVuY3Rpb24gKHNv bWV0aW1lcyBjYWxsZWQKKyAgIGludHJpbnNpYyBmdW5jdGlvbnMpLgorCisgICBUaGlzIEFQSSBl bnRyeXBvaW50IHdhcyBhZGRlZCBpbiBMSUJHQ0NKSVRfQUJJXzI1OyB5b3UgY2FuIHRlc3QgZm9y IGl0cworICAgcHJlc2VuY2UgdXNpbmcKKyAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX2djY19q aXRfY29udGV4dF9nZXRfdGFyZ2V0X2J1aWx0aW5fZnVuY3Rpb24KKyovCitleHRlcm4gZ2NjX2pp dF9mdW5jdGlvbiAqCitnY2Nfaml0X2NvbnRleHRfZ2V0X3RhcmdldF9idWlsdGluX2Z1bmN0aW9u IChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSk7CisK ICNkZWZpbmUgTElCR0NDSklUX0hBVkVfZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyCiAK IC8qIFNldCBhbiBpbml0aWFsIHZhbHVlIGZvciBhIGdsb2JhbCwgd2hpY2ggbXVzdCBiZSBhbiBh cnJheSBvZgpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9saWJnY2NqaXQubWFwIGIvZ2NjL2ppdC9saWJn Y2NqaXQubWFwCmluZGV4IDhiOTBhMGUyZmYzLi41YmU3YTYzNTU3YiAxMDA2NDQKLS0tIGEvZ2Nj L2ppdC9saWJnY2NqaXQubWFwCisrKyBiL2djYy9qaXQvbGliZ2Njaml0Lm1hcApAQCAtMjc2LDMg KzI3Niw3IEBAIExJQkdDQ0pJVF9BQklfMjUgewogICBnbG9iYWw6CiAgICAgZ2NjX2ppdF90eXBl X2dldF9yZXN0cmljdDsKIH0gTElCR0NDSklUX0FCSV8yNDsKKworTElCR0NDSklUX0FCSV8yNiB7 CisgICAgZ2NjX2ppdF9jb250ZXh0X2dldF90YXJnZXRfYnVpbHRpbl9mdW5jdGlvbjsKK30gTElC R0NDSklUX0FCSV8yNTsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24t ZmFpbGluZy10ZXN0cy5oIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRl c3RzLmgKaW5kZXggZTc2MjU2M2Y5YmQuLjk4NzVjYmU2MjNjIDEwMDY0NAotLS0gYS9nY2MvdGVz dHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaAorKysgYi9nY2MvdGVzdHN1aXRl L2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaApAQCAtMzIyLDYgKzMyMiw5IEBACiAvKiB0 ZXN0LXNldHRpbmctYWxpZ25tZW50LmM6IFRoaXMgY2FuJ3QgYmUgaW4gdGhlIHRlc3RjYXNlcyBh cnJheSBhcyBpdAogICAgaXMgdGFyZ2V0LXNwZWNpZmljLiAgKi8KIAorLyogdGVzdC10YXJnZXQt YnVpbHRpbnMuYzogVGhpcyBjYW4ndCBiZSBpbiB0aGUgdGVzdGNhc2VzIGFycmF5IGFzIGl0Cisg ICBpcyB0YXJnZXQtc3BlY2lmaWMuICAqLworCiAvKiB0ZXN0LXN0cmluZy1saXRlcmFsLmMgKi8K ICNkZWZpbmUgY3JlYXRlX2NvZGUgY3JlYXRlX2NvZGVfc3RyaW5nX2xpdGVyYWwKICNkZWZpbmUg dmVyaWZ5X2NvZGUgdmVyaWZ5X2NvZGVfc3RyaW5nX2xpdGVyYWwKZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvaml0LmRnL3Rlc3QtdGFyZ2V0LWJ1aWx0aW5zLmMgYi9nY2MvdGVzdHN1aXRlL2pp dC5kZy90ZXN0LXRhcmdldC1idWlsdGlucy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi4wZmZiNDhlOTdmNgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv aml0LmRnL3Rlc3QtdGFyZ2V0LWJ1aWx0aW5zLmMKQEAgLTAsMCArMSw3NyBAQAorLyogeyBkZy1k byBjb21waWxlIHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9ICovCisKKyNpbmNsdWRlIDxzdGRsaWIu aD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisKKyNkZWZp bmUgVEVTVF9QUk9WSURFU19NQUlOCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitjcmVh dGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIENI RUNLX05PTl9OVUxMIChnY2Nfaml0X2NvbnRleHRfZ2V0X3RhcmdldF9idWlsdGluX2Z1bmN0aW9u IChjdHh0LCAiX19idWlsdGluX2lhMzJfeGdldGJ2IikpOworICBnY2Nfaml0X2Z1bmN0aW9uICpi dWlsdGluX2VoX3BvaW50ZXIgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3RhcmdldF9idWlsdGluX2Z1 bmN0aW9uIChjdHh0LCAiX19idWlsdGluX2VoX3BvaW50ZXIiKTsKKyAgQ0hFQ0tfTk9OX05VTEwg KGJ1aWx0aW5fZWhfcG9pbnRlcik7CisKKyAgZ2NjX2ppdF90eXBlICppbnRfdHlwZSA9CisgICAg Z2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfSU5UKTsKKyAgZ2Nj X2ppdF90eXBlICp2b2lkX3B0ciA9CisgICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0 LCBHQ0NfSklUX1RZUEVfVk9JRF9QVFIpOworICBnY2Nfaml0X2Z1bmN0aW9uICpmdW5jX21haW4g PQorICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIE5VTEwsCisJCQkJICBH Q0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgaW50X3R5cGUsCisJCQkJICAibWFpbiIs CisJCQkJICAwLCBOVUxMLAorCQkJCSAgMCk7CisgIGdjY19qaXRfcnZhbHVlICp6ZXJvID0gZ2Nj X2ppdF9jb250ZXh0X3plcm8gKGN0eHQsIGludF90eXBlKTsKKyAgZ2NjX2ppdF9ibG9jayAqYmxv Y2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZnVuY19tYWluLCBOVUxMKTsKKyAgZ2Nj X2ppdF9sdmFsdWUgKnZhcmlhYmxlID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfbG9jYWwoZnVuY19t YWluLCBOVUxMLCB2b2lkX3B0ciwgInZhcmlhYmxlIik7CisgIGdjY19qaXRfYmxvY2tfYWRkX2Fz c2lnbm1lbnQgKGJsb2NrLCBOVUxMLCB2YXJpYWJsZSwKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3 X2NhbGwgKGN0eHQsIE5VTEwsIGJ1aWx0aW5fZWhfcG9pbnRlciwgMSwgJnplcm8pKTsKKyAgZ2Nj X2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLCBOVUxMLCB6ZXJvKTsKK30KKwordm9p ZAordmVyaWZ5X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJl c3VsdCkKK3sKKyAgQ0hFQ0tfTk9OX05VTEwgKHJlc3VsdCk7Cit9CisKK2ludAorbWFpbiAoaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAvKiAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgbWFp biBwcm92aWRlZCBieSBoYXJuZXNzLmgsIGJ1dCBpdCBmaXJzdCBjcmVhdGUgYSBkdW1teSBjb250 ZXh0IGFuZCBjb21waWxlCisgICAgICBpbiBvcmRlciB0byBhZGQgdGhlIHRhcmdldCBidWlsdGlu cyB0byBsaWJnY2NqaXQncyBpbnRlcm5hbCBzdGF0ZS4gICovCisgIGdjY19qaXRfY29udGV4dCAq Y3R4dDsKKyAgY3R4dCA9IGdjY19qaXRfY29udGV4dF9hY3F1aXJlICgpOworICBpZiAoIWN0eHQp CisgICAgeworICAgICAgZmFpbCAoImdjY19qaXRfY29udGV4dF9hY3F1aXJlIGZhaWxlZCIpOwor ICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdDsKKyAgcmVz dWx0ID0gZ2NjX2ppdF9jb250ZXh0X2NvbXBpbGUgKGN0eHQpOworICBnY2Nfaml0X3Jlc3VsdF9y ZWxlYXNlIChyZXN1bHQpOworICBnY2Nfaml0X2NvbnRleHRfcmVsZWFzZSAoY3R4dCk7CisKKyAg aW50IGk7CisKKyAgZm9yIChpID0gMTsgaSA8PSA1OyBpKyspCisgICAgeworICAgICAgc25wcmlu dGYgKHRlc3QsIHNpemVvZiAodGVzdCksCisJCSIlcyBpdGVyYXRpb24gJWQgb2YgJWQiLAorICAg ICAgICAgICAgICAgIGV4dHJhY3RfcHJvZ25hbWUgKGFyZ3ZbMF0pLAorICAgICAgICAgICAgICAg IGksIDUpOworCisgICAgICAvL3ByaW50ZiAoIklURVJBVElPTiAlZFxuIiwgaSk7CisgICAgICB0 ZXN0X2ppdCAoYXJndlswXSwgTlVMTCk7CisgICAgICAvL3ByaW50ZiAoIlxuIik7CisgICAgfQor CisgIHRvdGFscyAoKTsKKworICByZXR1cm4gMDsKK30KLS0gCjIuNDIuMQoK --=-9TPNybT1zipV+A7XR0W8--