From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EF85CC43458 for ; Fri, 10 Jul 2026 09:46:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:References:Cc:To:Subject:From: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=uwAJPy/gcdRTGlFRAMpEne5hjom8ob877JoQ+3yEy48=; b=1sn6tlRKWrgONm ceJzxWQyFaOI7bXFpNFAwVSq1Md8QDzfdOEW0TqRZfjv0Ksbfj5qUEAstobk0cQesAKwdIWwANv9T KgYOTtsiYfQeQAu0l3Ifeny2kbo2Rmku9Ho9QetUF7bE1rKkI1EuOAKzUx6XPeCiPnv0wYqbQ/Exm HVrvNb/O0oTuIpXJm4J3D/f41bb5hDK0joAdGVYsshxF8SXd/ijwm3CcULPatD/AwryLwiQXp+t6K PTvAv+V3VZMZXQ1nESmmSS2TbGEmEkPF4pAMPgOs0slzzMIFiZJs1OcEVrTcOcjrt0dLF8jL7q14G oYzK3HnWls1akGe1h8GQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wi7o8-00000004cqI-2n3R; Fri, 10 Jul 2026 09:46:08 +0000 Received: from sender4-op-o11.zoho.com ([136.143.188.11]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wi7o5-00000004cpc-2OP3; Fri, 10 Jul 2026 09:46:07 +0000 ARC-Seal: i=1; a=rsa-sha256; t=1783676753; cv=none; d=zohomail.com; s=zohoarc; b=Icrt1ew1x3BApqHzFbXlHJf4Fdl4B4Uqq9PtdvDwf8vJ/d81ubvY13XRQuXGLeibrId4e//ojUjPjaXZGSfHdH2wZdmDzP1Sz7xge9L7/xI8XM7WdXWf3rECpYiKrWO90n8c2VoppZDSclngAqvt/kqJ8xMmuqjGjRKVkJ3AGqw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783676753; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=cmfgvEW7jfEW6mImOxnr/y9IV0Ihu38AY5rqD8U+Xy0=; b=oKNwtBT4FHxvZpSbWduwAI3Rpbw06qSUVCt0s/W79NcXxriI18exPBb3ADxw8mSFMrBuSFr6mHeanm7doARE92af9BOiwgyTP3viQc1ibj2I5clFf47BcJsZUExruTTWbQ4SKQdHMooSVifptDaeRUaoeYge27GPkV9q5qDsXi0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=benjamin.gaignard@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1783676753; s=zohomail; d=collabora.com; i=benjamin.gaignard@collabora.com; h=Message-ID:Date:Date:MIME-Version:From:From:Subject:Subject:To:To:Cc:Cc:References:In-Reply-To:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=cmfgvEW7jfEW6mImOxnr/y9IV0Ihu38AY5rqD8U+Xy0=; b=k6MT33v7G4tDh+dwFbFFhh+EM0I6lPcn23HSt/xxEFlHpwlVLLA0ksZa5Ia+s1cM 9JYNeMLe7qVjQQ3sDqZrcHf7VKMlcVrOevEDVehhQwXA/2e8/l+XngHF1hTHfUE1a23 dlZrMfeZi6BRzJteZgqyp1AWo1APKWf/0rpH0ttE= Received: by mx.zohomail.com with SMTPS id 1783676750632669.6659330680105; Fri, 10 Jul 2026 02:45:50 -0700 (PDT) Message-ID: <6eb8768e-e46c-47f4-966d-bfc05c8a6fe4@collabora.com> Date: Fri, 10 Jul 2026 11:45:39 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Benjamin Gaignard Subject: Re: [PATCH v5] media: verisilicon: Create AV1 helper library To: nicolas.dufresne@collabora.com, p.zabel@pengutronix.de, mchehab@kernel.org, heiko@sntech.de Cc: linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, kernel@collabora.com References: <20260512075949.87441-1-benjamin.gaignard@collabora.com> Content-Language: en-US In-Reply-To: <20260512075949.87441-1-benjamin.gaignard@collabora.com> X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org R2VudGxlIHBpbmcgb24gdGhpcyBvbmUuCgpSZWdhcmRzLApCZW5qYW1pbgoKTGUgMTIvMDUvMjAy NiDDoCAwOTo1OSwgQmVuamFtaW4gR2FpZ25hcmQgYSDDqWNyaXTCoDoKPiBSZWdyb3VwIGFsbCBu b25lIGhhcmR3YXJlIHJlbGF0ZWQgQVYxIGZ1bmN0aW9ucyBpbnRvIGEgaGVscGVyIGxpYnJhcnku Cj4gVGhlIGdvYWwgaXMgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvbiBmb3IgZnV0dXJlIEFWMSBj b2RlY3MuCj4KPiBUZXN0ZWQgb24gcm9jayA1YiBib2FyZCBGbHVzdGVyIHNjb3JlIHJlbWFpbnMg dGhlIHNhbWUgMjA0LzI0MS4KPgo+IFNpZ25lZC1vZmYtYnk6IEJlbmphbWluIEdhaWduYXJkIDxi ZW5qYW1pbi5nYWlnbmFyZEBjb2xsYWJvcmEuY29tPgo+IFJldmlld2VkLWJ5OiBOaWNvbGFzIER1 ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Cj4gLS0tCj4gdmVyc2lvbiA1 Ogo+IC0gYmUgbW9yZSBzdHJpY3QgYWJvdXQgY2hlY2tpbmcgYXJyYXlzIHJhbmdlIGFuZCB0aGUg dmFsdWUgcmV0dXJuZWQKPiAgICBieSBoYW50cm9fYXYxX2dldF9mcmFtZV9pbmRleCgpCj4gLSBy ZWJhc2VkIG9uIHY3LjEtcmMzIHRhZwo+Cj4gdmVyc2lvbiA0Ogo+IC0gY2hhbmdlIGZ1bmN0aW9u cyBwcm90b3R5cGVzIHRvIHVzZSBhIHN0cnVjdHVyZS4KPiAtIHJlYmFzZWQgb24gdjcuMS1yYzIg dGFnLgo+Cj4gICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZlcmlzaWxpY29uL01ha2VmaWxlICAg fCAgICA3ICstCj4gICAuLi4vbWVkaWEvcGxhdGZvcm0vdmVyaXNpbGljb24vaGFudHJvX2F2MS5j ICAgfCAgNzkwICsrKysrKysrKysrKysKPiAgIC4uLi9tZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNv bi9oYW50cm9fYXYxLmggICB8ICAgNjQgKysKPiAgIC4uLmVudHJvcHltb2RlLmMgPT4gaGFudHJv X2F2MV9lbnRyb3B5bW9kZS5jfSB8ICAgMTggKy0KPiAgIC4uLmVudHJvcHltb2RlLmggPT4gaGFu dHJvX2F2MV9lbnRyb3B5bW9kZS5ofSB8ICAgMTggKy0KPiAgIC4uLmF2MV9maWxtZ3JhaW4uYyA9 PiBoYW50cm9fYXYxX2ZpbG1ncmFpbi5jfSB8ICAxMjUgKy0KPiAgIC4uLi92ZXJpc2lsaWNvbi9o YW50cm9fYXYxX2ZpbG1ncmFpbi5oICAgICAgICB8ICAgNDggKwo+ICAgLi4uL21lZGlhL3BsYXRm b3JtL3ZlcmlzaWxpY29uL2hhbnRyb19ody5oICAgIHwgICAgNyArLQo+ICAgLi4uL3ZlcmlzaWxp Y29uL3JvY2tjaGlwX2F2MV9maWxtZ3JhaW4uaCAgICAgIHwgICAzNiAtCj4gICAuLi4vdmVyaXNp bGljb24vcm9ja2NoaXBfdnB1OTgxX2h3X2F2MV9kZWMuYyAgfCAxMDE0ICsrLS0tLS0tLS0tLS0t LS0tCj4gICAuLi4vcGxhdGZvcm0vdmVyaXNpbGljb24vcm9ja2NoaXBfdnB1X2h3LmMgICAgfCAg ICA3ICstCj4gICAxMSBmaWxlcyBjaGFuZ2VkLCAxMTE1IGluc2VydGlvbnMoKyksIDEwMTkgZGVs ZXRpb25zKC0pCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92 ZXJpc2lsaWNvbi9oYW50cm9fYXYxLmMKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21l ZGlhL3BsYXRmb3JtL3ZlcmlzaWxpY29uL2hhbnRyb19hdjEuaAo+ICAgcmVuYW1lIGRyaXZlcnMv bWVkaWEvcGxhdGZvcm0vdmVyaXNpbGljb24ve3JvY2tjaGlwX2F2MV9lbnRyb3B5bW9kZS5jID0+ IGhhbnRyb19hdjFfZW50cm9weW1vZGUuY30gKDk5JSkKPiAgIHJlbmFtZSBkcml2ZXJzL21lZGlh L3BsYXRmb3JtL3ZlcmlzaWxpY29uL3tyb2NrY2hpcF9hdjFfZW50cm9weW1vZGUuaCA9PiBoYW50 cm9fYXYxX2VudHJvcHltb2RlLmh9ICg5NSUpCj4gICByZW5hbWUgZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS92ZXJpc2lsaWNvbi97cm9ja2NoaXBfYXYxX2ZpbG1ncmFpbi5jID0+IGhhbnRyb19hdjFf ZmlsbWdyYWluLmN9ICg4NSUpCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS92ZXJpc2lsaWNvbi9oYW50cm9fYXYxX2ZpbG1ncmFpbi5oCj4gICBkZWxldGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9yb2NrY2hpcF9hdjFf ZmlsbWdyYWluLmgKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Zlcmlz aWxpY29uL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9NYWtl ZmlsZQo+IGluZGV4IGY2ZjAxOWQwNGZmMC4uYTFkZDZjMmQyOWJlIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vdmVyaXNpbGljb24vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL3ZlcmlzaWxpY29uL01ha2VmaWxlCj4gQEAgLTE5LDcgKzE5LDEwIEBA IGhhbnRyby12cHUteSArPSBcCj4gICAJCWhhbnRyb19oZXZjLm8gXAo+ICAgCQloYW50cm9fbXBl ZzIubyBcCj4gICAJCWhhbnRyb192cDgubyBcCj4gLQkJaGFudHJvX3ZwOS5vCj4gKwkJaGFudHJv X3ZwOS5vIFwKPiArCQloYW50cm9fYXYxLm8gXAo+ICsJCWhhbnRyb19hdjFfZmlsbWdyYWluLm8g XAo+ICsJCWhhbnRyb19hdjFfZW50cm9weW1vZGUubwo+ICAgCj4gICBoYW50cm8tdnB1LSQoQ09O RklHX1ZJREVPX0hBTlRST19JTVg4TSkgKz0gXAo+ICAgCQlpbXg4bV92cHVfaHcubwo+IEBAIC0z Myw4ICszNiw2IEBAIGhhbnRyby12cHUtJChDT05GSUdfVklERU9fSEFOVFJPX1JPQ0tDSElQKSAr PSBcCj4gICAJCXJvY2tjaGlwX3ZwdTJfaHdfbXBlZzJfZGVjLm8gXAo+ICAgCQlyb2NrY2hpcF92 cHUyX2h3X3ZwOF9kZWMubyBcCj4gICAJCXJvY2tjaGlwX3ZwdTk4MV9od19hdjFfZGVjLm8gXAo+ IC0JCXJvY2tjaGlwX2F2MV9maWxtZ3JhaW4ubyBcCj4gLQkJcm9ja2NoaXBfYXYxX2VudHJvcHlt b2RlLm8gXAo+ICAgCQlyb2NrY2hpcF92cHVfaHcubwo+ICAgCj4gICBoYW50cm8tdnB1LSQoQ09O RklHX1ZJREVPX0hBTlRST19TVU5YSSkgKz0gXAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlh L3BsYXRmb3JtL3ZlcmlzaWxpY29uL2hhbnRyb19hdjEuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZv cm0vdmVyaXNpbGljb24vaGFudHJvX2F2MS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwMDAuLmFjN2FlOGU4N2Y1MAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3ZlcmlzaWxpY29uL2hhbnRyb19hdjEuYwo+IEBAIC0wLDAgKzEs NzkwIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPiArLyoK PiArICogQ29weXJpZ2h0IChjKSAyMDI2LCBDb2xsYWJvcmEKPiArICoKPiArICogQXV0aG9yOiBC ZW5qYW1pbiBHYWlnbmFyZCA8YmVuamFtaW4uZ2FpZ25hcmRAY29sbGFib3JhLmNvbT4KPiArICov Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDIt aDI2NC5oPgo+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1tZW0ybWVtLmg+Cj4gKwo+ICsjaW5jbHVk ZSAiaGFudHJvLmgiCj4gKyNpbmNsdWRlICJoYW50cm9fYXYxLmgiCj4gKyNpbmNsdWRlICJoYW50 cm9faHcuaCIKPiArCj4gKyNkZWZpbmUgR01fR0xPQkFMX01PREVMU19QRVJfRlJBTUUJNwo+ICsj ZGVmaW5lIEdMT0JBTF9NT0RFTF9UT1RBTF9TSVpFCSg2ICogNCArIDQgKiAyKQo+ICsjZGVmaW5l IEdMT0JBTF9NT0RFTF9TSVpFCUFMSUdOKEdNX0dMT0JBTF9NT0RFTFNfUEVSX0ZSQU1FICogR0xP QkFMX01PREVMX1RPVEFMX1NJWkUsIDIwNDgpCj4gKyNkZWZpbmUgQVYxX01BWF9USUxFUwkJMTI4 Cj4gKyNkZWZpbmUgQVYxX1RJTEVfSU5GT19TSVpFCShBVjFfTUFYX1RJTEVTICogMTYpCj4gKyNk ZWZpbmUgQVYxX1RJTEVfU0laRQkJQUxJR04oMzIgKiAxMjgsIDQwOTYpCj4gKwo+ICsjZGVmaW5l IFNVUEVSUkVTX1NDQUxFX0JJVFMgMwo+ICsKPiArI2RlZmluZSBESVZfTFVUX1BSRUNfQklUUyAx NAo+ICsjZGVmaW5lIERJVl9MVVRfQklUUyA4Cj4gKyNkZWZpbmUgRElWX0xVVF9OVU0gQklUKERJ Vl9MVVRfQklUUykKPiArI2RlZmluZSBXQVJQX1BBUkFNX1JFRFVDRV9CSVRTIDYKPiArI2RlZmlu ZSBXQVJQRURNT0RFTF9QUkVDX0JJVFMgMTYKPiArCj4gKyNkZWZpbmUgQVYxX0RJVl9ST1VORF9V UF9QT1cyKHZhbHVlLCBuKQkJCVwKPiArKHsJCQkJCQkJXAo+ICsJdHlwZW9mKG4pIF9uICA9IG47 CQkJCVwKPiArCXR5cGVvZih2YWx1ZSkgX3ZhbHVlID0gdmFsdWU7CQkJXAo+ICsJKF92YWx1ZSAr IChCSVQoX24pID4+IDEpKSA+PiBfbjsJCVwKPiArfSkKPiArCj4gKyNkZWZpbmUgQVYxX0RJVl9S T1VORF9VUF9QT1cyX1NJR05FRCh2YWx1ZSwgbikJCQkJXAo+ICsoewkJCQkJCQkJCVwKPiArCXR5 cGVvZihuKSBfbl8gID0gbjsJCQkJCQlcCj4gKwl0eXBlb2YodmFsdWUpIF92YWx1ZV8gPSB2YWx1 ZTsJCQkJCVwKPiArCSgoKF92YWx1ZV8pIDwgMCkgPyAtQVYxX0RJVl9ST1VORF9VUF9QT1cyKC0o X3ZhbHVlXyksIChfbl8pKQlcCj4gKwkJOiBBVjFfRElWX1JPVU5EX1VQX1BPVzIoKF92YWx1ZV8p LCAoX25fKSkpOwkJXAo+ICt9KQo+ICsKPiArc3RhdGljIGNvbnN0IHNob3J0IGRpdl9sdXRbRElW X0xVVF9OVU0gKyAxXSA9IHsKPiArCTE2Mzg0LCAxNjMyMCwgMTYyNTcsIDE2MTk0LCAxNjEzMiwg MTYwNzAsIDE2MDA5LCAxNTk0OCwgMTU4ODgsIDE1ODI4LCAxNTc2OCwKPiArCTE1NzA5LCAxNTY1 MCwgMTU1OTIsIDE1NTM0LCAxNTQ3NywgMTU0MjAsIDE1MzY0LCAxNTMwOCwgMTUyNTIsIDE1MTk3 LCAxNTE0MiwKPiArCTE1MDg3LCAxNTAzMywgMTQ5ODAsIDE0OTI2LCAxNDg3MywgMTQ4MjEsIDE0 NzY5LCAxNDcxNywgMTQ2NjUsIDE0NjE0LCAxNDU2NCwKPiArCTE0NTEzLCAxNDQ2MywgMTQ0MTMs IDE0MzY0LCAxNDMxNSwgMTQyNjYsIDE0MjE4LCAxNDE3MCwgMTQxMjIsIDE0MDc1LCAxNDAyOCwK PiArCTEzOTgxLCAxMzkzNSwgMTM4ODgsIDEzODQzLCAxMzc5NywgMTM3NTIsIDEzNzA3LCAxMzY2 MiwgMTM2MTgsIDEzNTc0LCAxMzUzMCwKPiArCTEzNDg3LCAxMzQ0MywgMTM0MDAsIDEzMzU4LCAx MzMxNSwgMTMyNzMsIDEzMjMxLCAxMzE5MCwgMTMxNDgsIDEzMTA3LCAxMzA2NiwKPiArCTEzMDI2 LCAxMjk4NSwgMTI5NDUsIDEyOTA2LCAxMjg2NiwgMTI4MjcsIDEyNzg4LCAxMjc0OSwgMTI3MTAs IDEyNjcyLCAxMjYzMywKPiArCTEyNTk2LCAxMjU1OCwgMTI1MjAsIDEyNDgzLCAxMjQ0NiwgMTI0 MDksIDEyMzczLCAxMjMzNiwgMTIzMDAsIDEyMjY0LCAxMjIyOCwKPiArCTEyMTkzLCAxMjE1Nywg MTIxMjIsIDEyMDg3LCAxMjA1MywgMTIwMTgsIDExOTg0LCAxMTk1MCwgMTE5MTYsIDExODgyLCAx MTg0OCwKPiArCTExODE1LCAxMTc4MiwgMTE3NDksIDExNzE2LCAxMTY4MywgMTE2NTEsIDExNjE5 LCAxMTU4NiwgMTE1NTUsIDExNTIzLCAxMTQ5MSwKPiArCTExNDYwLCAxMTQyOSwgMTEzOTgsIDEx MzY3LCAxMTMzNiwgMTEzMDUsIDExMjc1LCAxMTI0NSwgMTEyMTUsIDExMTg1LCAxMTE1NSwKPiAr CTExMTI1LCAxMTA5NiwgMTEwNjcsIDExMDM4LCAxMTAwOSwgMTA5ODAsIDEwOTUxLCAxMDkyMywg MTA4OTQsIDEwODY2LCAxMDgzOCwKPiArCTEwODEwLCAxMDc4MiwgMTA3NTUsIDEwNzI3LCAxMDcw MCwgMTA2NzMsIDEwNjQ1LCAxMDYxOCwgMTA1OTIsIDEwNTY1LCAxMDUzOCwKPiArCTEwNTEyLCAx MDQ4NiwgMTA0NjAsIDEwNDM0LCAxMDQwOCwgMTAzODIsIDEwMzU2LCAxMDMzMSwgMTAzMDUsIDEw MjgwLCAxMDI1NSwKPiArCTEwMjMwLCAxMDIwNSwgMTAxODAsIDEwMTU2LCAxMDEzMSwgMTAxMDcs IDEwMDgyLCAxMDA1OCwgMTAwMzQsIDEwMDEwLCA5OTg2LAo+ICsJOTk2MywgIDk5MzksICA5OTE2 LCAgOTg5MiwgIDk4NjksICA5ODQ2LCAgOTgyMywgIDk4MDAsICA5Nzc3LCAgOTc1NCwgIDk3MzIs Cj4gKwk5NzA5LCAgOTY4NywgIDk2NjQsICA5NjQyLCAgOTYyMCwgIDk1OTgsICA5NTc2LCAgOTU1 NCwgIDk1MzMsICA5NTExLCAgOTQ4OSwKPiArCTk0NjgsICA5NDQ3LCAgOTQyNSwgIDk0MDQsICA5 MzgzLCAgOTM2MiwgIDkzNDEsICA5MzIxLCAgOTMwMCwgIDkyNzksICA5MjU5LAo+ICsJOTIzOSwg IDkyMTgsICA5MTk4LCAgOTE3OCwgIDkxNTgsICA5MTM4LCAgOTExOCwgIDkwOTgsICA5MDc5LCAg OTA1OSwgIDkwMzksCj4gKwk5MDIwLCAgOTAwMSwgIDg5ODEsICA4OTYyLCAgODk0MywgIDg5MjQs ICA4OTA1LCAgODg4NiwgIDg4NjcsICA4ODQ5LCAgODgzMCwKPiArCTg4MTIsICA4NzkzLCAgODc3 NSwgIDg3NTYsICA4NzM4LCAgODcyMCwgIDg3MDIsICA4Njg0LCAgODY2NiwgIDg2NDgsICA4NjMw LAo+ICsJODYxMywgIDg1OTUsICA4NTc3LCAgODU2MCwgIDg1NDIsICA4NTI1LCAgODUwOCwgIDg0 OTAsICA4NDczLCAgODQ1NiwgIDg0MzksCj4gKwk4NDIyLCAgODQwNSwgIDgzODksICA4MzcyLCAg ODM1NSwgIDgzMzksICA4MzIyLCAgODMwNiwgIDgyODksICA4MjczLCAgODI1NywKPiArCTgyNDAs ICA4MjI0LCAgODIwOCwgIDgxOTIsCj4gK307Cj4gKwo+ICtlbnVtIGhhbnRyb19hdjFfdHhfbW9k ZSB7Cj4gKwlIQU5UUk9fQVYxX1RYX01PREVfT05MWV80WDQJPSAwLAo+ICsJSEFOVFJPX0FWMV9U WF9NT0RFXzhYOAkJPSAxLAo+ICsJSEFOVFJPX0FWMV9UWF9NT0RFXzE2eDE2CT0gMiwKPiArCUhB TlRST19BVjFfVFhfTU9ERV8zMngzMgk9IDMsCj4gKwlIQU5UUk9fQVYxX1RYX01PREVfU0VMRUNU CT0gNCwKPiArfTsKPiArCj4gK2VudW0gaGFudHJvX2F2MV9pbnRlcl9wcmVkaWN0aW9uX2ZpbHRl cl90eXBlIHsKPiArCUhBTlRST19BVjFfRUlHSFRfVEFQX1NNT09USAk9IDAsCj4gKwlIQU5UUk9f QVYxX0VJR0hUX1RBUAkJPSAxLAo+ICsJSEFOVFJPX0FWMV9FSUdIVF9UQVBfU0hBUlAJPSAyLAo+ ICsJSEFOVFJPX0FWMV9CSUxJTkVBUgkJPSAzLAo+ICsJSEFOVFJPX0FWMV9TV0lUQ0hBQkxFCQk9 IDQsCj4gK307Cj4gKwo+ICtpbnQgaGFudHJvX2F2MV9nZXRfaGFyZHdhcmVfdHhfbW9kZShlbnVt IHY0bDJfYXYxX3R4X21vZGUgdHhfbW9kZSkKPiArewo+ICsJc3dpdGNoICh0eF9tb2RlKSB7Cj4g KwljYXNlIFY0TDJfQVYxX1RYX01PREVfT05MWV80WDQ6Cj4gKwkJcmV0dXJuIEhBTlRST19BVjFf VFhfTU9ERV9PTkxZXzRYNDsKPiArCWNhc2UgVjRMMl9BVjFfVFhfTU9ERV9MQVJHRVNUOgo+ICsJ CXJldHVybiBIQU5UUk9fQVYxX1RYX01PREVfMzJ4MzI7Cj4gKwljYXNlIFY0TDJfQVYxX1RYX01P REVfU0VMRUNUOgo+ICsJCXJldHVybiBIQU5UUk9fQVYxX1RYX01PREVfU0VMRUNUOwo+ICsJfQo+ ICsKPiArCXJldHVybiBIQU5UUk9fQVYxX1RYX01PREVfMzJ4MzI7Cj4gK30KPiArCj4gK2ludCBo YW50cm9fYXYxX2dldF9oYXJkd2FyZV9tY29tcF9maWx0X3R5cGUoaW50IGludGVycG9sYXRpb25f ZmlsdGVyKQo+ICt7Cj4gKwlzd2l0Y2ggKGludGVycG9sYXRpb25fZmlsdGVyKSB7Cj4gKwljYXNl IFY0TDJfQVYxX0lOVEVSUE9MQVRJT05fRklMVEVSX0VJR0hUVEFQOgo+ICsJCXJldHVybiBIQU5U Uk9fQVYxX0VJR0hUX1RBUDsKPiArCWNhc2UgVjRMMl9BVjFfSU5URVJQT0xBVElPTl9GSUxURVJf RUlHSFRUQVBfU01PT1RIOgo+ICsJCXJldHVybiBIQU5UUk9fQVYxX0VJR0hUX1RBUF9TTU9PVEg7 Cj4gKwljYXNlIFY0TDJfQVYxX0lOVEVSUE9MQVRJT05fRklMVEVSX0VJR0hUVEFQX1NIQVJQOgo+ ICsJCXJldHVybiBIQU5UUk9fQVYxX0VJR0hUX1RBUF9TSEFSUDsKPiArCWNhc2UgVjRMMl9BVjFf SU5URVJQT0xBVElPTl9GSUxURVJfQklMSU5FQVI6Cj4gKwkJcmV0dXJuIEhBTlRST19BVjFfQklM SU5FQVI7Cj4gKwljYXNlIFY0TDJfQVYxX0lOVEVSUE9MQVRJT05fRklMVEVSX1NXSVRDSEFCTEU6 Cj4gKwkJcmV0dXJuIEhBTlRST19BVjFfU1dJVENIQUJMRTsKPiArCX0KPiArCj4gKwlyZXR1cm4g SEFOVFJPX0FWMV9FSUdIVF9UQVBfU01PT1RIOwo+ICt9Cj4gKwo+ICtpbnQgaGFudHJvX2F2MV9n ZXRfZnJhbWVfaW5kZXgoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgaW50IHJlZikKPiArewo+ICsJ c3RydWN0IGhhbnRyb19hdjFfZGVjX2h3X2N0eCAqYXYxX2RlYyA9ICZjdHgtPmF2MV9kZWM7Cj4g KwlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfY3RybHMgKmN0cmxzID0gJmF2MV9kZWMtPmN0cmxzOwo+ ICsJY29uc3Qgc3RydWN0IHY0bDJfY3RybF9hdjFfZnJhbWUgKmZyYW1lID0gY3RybHMtPmZyYW1l Owo+ICsJdTY0IHRpbWVzdGFtcDsKPiArCWludCBpLCBpZHg7Cj4gKwo+ICsJaWYgKHJlZiA8IDAg fHwgcmVmID49IFY0TDJfQVYxX1JFRlNfUEVSX0ZSQU1FKQo+ICsJCXJldHVybiBBVjFfSU5WQUxJ RF9JRFg7Cj4gKwo+ICsJaWR4ID0gZnJhbWUtPnJlZl9mcmFtZV9pZHhbcmVmXTsKPiArCj4gKwlp ZiAoaWR4ID49IFY0TDJfQVYxX1RPVEFMX1JFRlNfUEVSX0ZSQU1FIHx8IGlkeCA8IDApCj4gKwkJ cmV0dXJuIEFWMV9JTlZBTElEX0lEWDsKPiArCj4gKwl0aW1lc3RhbXAgPSBmcmFtZS0+cmVmZXJl bmNlX2ZyYW1lX3RzW2lkeF07Cj4gKwlmb3IgKGkgPSAwOyBpIDwgQVYxX01BWF9GUkFNRV9CVUZf Q09VTlQ7IGkrKykgewo+ICsJCWlmICghYXYxX2RlYy0+ZnJhbWVfcmVmc1tpXS51c2VkKQo+ICsJ CQljb250aW51ZTsKPiArCQlpZiAoYXYxX2RlYy0+ZnJhbWVfcmVmc1tpXS50aW1lc3RhbXAgPT0g dGltZXN0YW1wKQo+ICsJCQlyZXR1cm4gaTsKPiArCX0KPiArCj4gKwlyZXR1cm4gQVYxX0lOVkFM SURfSURYOwo+ICt9Cj4gKwo+ICtpbnQgaGFudHJvX2F2MV9nZXRfb3JkZXJfaGludChzdHJ1Y3Qg aGFudHJvX2N0eCAqY3R4LCBpbnQgcmVmKQo+ICt7Cj4gKwlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNf aHdfY3R4ICphdjFfZGVjID0gJmN0eC0+YXYxX2RlYzsKPiArCWludCBpZHggPSBoYW50cm9fYXYx X2dldF9mcmFtZV9pbmRleChjdHgsIHJlZik7Cj4gKwo+ICsJaWYgKGlkeCAhPSBBVjFfSU5WQUxJ RF9JRFgpCj4gKwkJcmV0dXJuIGF2MV9kZWMtPmZyYW1lX3JlZnNbaWR4XS5vcmRlcl9oaW50Owo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgaGFudHJvX2F2MV9mcmFtZV9yZWYoc3Ry dWN0IGhhbnRyb19jdHggKmN0eCwgdTY0IHRpbWVzdGFtcCkKPiArewo+ICsJc3RydWN0IGhhbnRy b19hdjFfZGVjX2h3X2N0eCAqYXYxX2RlYyA9ICZjdHgtPmF2MV9kZWM7Cj4gKwlzdHJ1Y3QgaGFu dHJvX2F2MV9kZWNfY3RybHMgKmN0cmxzID0gJmF2MV9kZWMtPmN0cmxzOwo+ICsJY29uc3Qgc3Ry dWN0IHY0bDJfY3RybF9hdjFfZnJhbWUgKmZyYW1lID0gY3RybHMtPmZyYW1lOwo+ICsJaW50IGk7 Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFWMV9NQVhfRlJBTUVfQlVGX0NPVU5UOyBpKyspIHsK PiArCQlpbnQgajsKPiArCj4gKwkJaWYgKGF2MV9kZWMtPmZyYW1lX3JlZnNbaV0udXNlZCkKPiAr CQkJY29udGludWU7Cj4gKwo+ICsJCWF2MV9kZWMtPmZyYW1lX3JlZnNbaV0ud2lkdGggPSBmcmFt ZS0+ZnJhbWVfd2lkdGhfbWludXNfMSArIDE7Cj4gKwkJYXYxX2RlYy0+ZnJhbWVfcmVmc1tpXS5o ZWlnaHQgPSBmcmFtZS0+ZnJhbWVfaGVpZ2h0X21pbnVzXzEgKyAxOwo+ICsJCWF2MV9kZWMtPmZy YW1lX3JlZnNbaV0ubWlfY29scyA9IERJVl9ST1VORF9VUChmcmFtZS0+ZnJhbWVfd2lkdGhfbWlu dXNfMSArIDEsIDgpOwo+ICsJCWF2MV9kZWMtPmZyYW1lX3JlZnNbaV0ubWlfcm93cyA9IERJVl9S T1VORF9VUChmcmFtZS0+ZnJhbWVfaGVpZ2h0X21pbnVzXzEgKyAxLCA4KTsKPiArCQlhdjFfZGVj LT5mcmFtZV9yZWZzW2ldLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKPiArCQlhdjFfZGVjLT5mcmFt ZV9yZWZzW2ldLmZyYW1lX3R5cGUgPSBmcmFtZS0+ZnJhbWVfdHlwZTsKPiArCQlhdjFfZGVjLT5m cmFtZV9yZWZzW2ldLm9yZGVyX2hpbnQgPSBmcmFtZS0+b3JkZXJfaGludDsKPiArCQlhdjFfZGVj LT5mcmFtZV9yZWZzW2ldLnZiMl9yZWYgPSBoYW50cm9fZ2V0X2RzdF9idWYoY3R4KTsKPiArCj4g KwkJZm9yIChqID0gMDsgaiA8IFY0TDJfQVYxX1RPVEFMX1JFRlNfUEVSX0ZSQU1FOyBqKyspCj4g KwkJCWF2MV9kZWMtPmZyYW1lX3JlZnNbaV0ub3JkZXJfaGludHNbal0gPSBmcmFtZS0+b3JkZXJf aGludHNbal07Cj4gKwkJYXYxX2RlYy0+ZnJhbWVfcmVmc1tpXS51c2VkID0gdHJ1ZTsKPiArCQlh djFfZGVjLT5jdXJyZW50X2ZyYW1lX2luZGV4ID0gaTsKPiArCj4gKwkJcmV0dXJuIGk7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIEFWMV9JTlZBTElEX0lEWDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg aGFudHJvX2F2MV9mcmFtZV91bnJlZihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LCBpbnQgaWR4KQo+ ICt7Cj4gKwlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfaHdfY3R4ICphdjFfZGVjID0gJmN0eC0+YXYx X2RlYzsKPiArCj4gKwlpZiAoaWR4ID49IDApCj4gKwkJYXYxX2RlYy0+ZnJhbWVfcmVmc1tpZHhd LnVzZWQgPSBmYWxzZTsKPiArfQo+ICsKPiArdm9pZCBoYW50cm9fYXYxX2NsZWFuX3JlZnMoc3Ry dWN0IGhhbnRyb19jdHggKmN0eCkKPiArewo+ICsJc3RydWN0IGhhbnRyb19hdjFfZGVjX2h3X2N0 eCAqYXYxX2RlYyA9ICZjdHgtPmF2MV9kZWM7Cj4gKwlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfY3Ry bHMgKmN0cmxzID0gJmF2MV9kZWMtPmN0cmxzOwo+ICsKPiArCWludCByZWYsIGlkeDsKPiArCj4g Kwlmb3IgKGlkeCA9IDA7IGlkeCA8IEFWMV9NQVhfRlJBTUVfQlVGX0NPVU5UOyBpZHgrKykgewo+ ICsJCXU2NCB0aW1lc3RhbXAgPSBhdjFfZGVjLT5mcmFtZV9yZWZzW2lkeF0udGltZXN0YW1wOwo+ ICsJCWJvb2wgdXNlZCA9IGZhbHNlOwo+ICsKPiArCQlpZiAoIWF2MV9kZWMtPmZyYW1lX3JlZnNb aWR4XS51c2VkKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJZm9yIChyZWYgPSAwOyByZWYgPCBW NEwyX0FWMV9UT1RBTF9SRUZTX1BFUl9GUkFNRTsgcmVmKyspIHsKPiArCQkJaWYgKGN0cmxzLT5m cmFtZS0+cmVmZXJlbmNlX2ZyYW1lX3RzW3JlZl0gPT0gdGltZXN0YW1wKQo+ICsJCQkJdXNlZCA9 IHRydWU7Cj4gKwkJfQo+ICsKPiArCQlpZiAoIXVzZWQpCj4gKwkJCWhhbnRyb19hdjFfZnJhbWVf dW5yZWYoY3R4LCBpZHgpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzaXplX3QgaGFudHJvX2F2MV9sdW1h X3NpemUoc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPiArewo+ICsJcmV0dXJuIGN0eC0+cmVmX2Zt dC5wbGFuZV9mbXRbMF0uYnl0ZXNwZXJsaW5lICogY3R4LT5yZWZfZm10LmhlaWdodDsKPiArfQo+ ICsKPiArc2l6ZV90IGhhbnRyb19hdjFfY2hyb21hX3NpemUoc3RydWN0IGhhbnRyb19jdHggKmN0 eCkKPiArewo+ICsJc2l6ZV90IGNyX29mZnNldCA9IGhhbnRyb19hdjFfbHVtYV9zaXplKGN0eCk7 Cj4gKwo+ICsJcmV0dXJuIEFMSUdOKChjcl9vZmZzZXQgKiAzKSAvIDIsIDY0KTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgaGFudHJvX2F2MV90aWxlc19mcmVlKHN0cnVjdCBoYW50cm9fY3R4ICpj dHgpCj4gK3sKPiArCXN0cnVjdCBoYW50cm9fZGV2ICp2cHUgPSBjdHgtPmRldjsKPiArCXN0cnVj dCBoYW50cm9fYXYxX2RlY19od19jdHggKmF2MV9kZWMgPSAmY3R4LT5hdjFfZGVjOwo+ICsKPiAr CWlmIChhdjFfZGVjLT5kYl9kYXRhX2NvbC5jcHUpCj4gKwkJZG1hX2ZyZWVfY29oZXJlbnQodnB1 LT5kZXYsIGF2MV9kZWMtPmRiX2RhdGFfY29sLnNpemUsCj4gKwkJCQkgIGF2MV9kZWMtPmRiX2Rh dGFfY29sLmNwdSwKPiArCQkJCSAgYXYxX2RlYy0+ZGJfZGF0YV9jb2wuZG1hKTsKPiArCWF2MV9k ZWMtPmRiX2RhdGFfY29sLmNwdSA9IE5VTEw7Cj4gKwo+ICsJaWYgKGF2MV9kZWMtPmRiX2N0cmxf Y29sLmNwdSkKPiArCQlkbWFfZnJlZV9jb2hlcmVudCh2cHUtPmRldiwgYXYxX2RlYy0+ZGJfY3Ry bF9jb2wuc2l6ZSwKPiArCQkJCSAgYXYxX2RlYy0+ZGJfY3RybF9jb2wuY3B1LAo+ICsJCQkJICBh djFfZGVjLT5kYl9jdHJsX2NvbC5kbWEpOwo+ICsJYXYxX2RlYy0+ZGJfY3RybF9jb2wuY3B1ID0g TlVMTDsKPiArCj4gKwlpZiAoYXYxX2RlYy0+Y2RlZl9jb2wuY3B1KQo+ICsJCWRtYV9mcmVlX2Nv aGVyZW50KHZwdS0+ZGV2LCBhdjFfZGVjLT5jZGVmX2NvbC5zaXplLAo+ICsJCQkJICBhdjFfZGVj LT5jZGVmX2NvbC5jcHUsIGF2MV9kZWMtPmNkZWZfY29sLmRtYSk7Cj4gKwlhdjFfZGVjLT5jZGVm X2NvbC5jcHUgPSBOVUxMOwo+ICsKPiArCWlmIChhdjFfZGVjLT5zcl9jb2wuY3B1KQo+ICsJCWRt YV9mcmVlX2NvaGVyZW50KHZwdS0+ZGV2LCBhdjFfZGVjLT5zcl9jb2wuc2l6ZSwKPiArCQkJCSAg YXYxX2RlYy0+c3JfY29sLmNwdSwgYXYxX2RlYy0+c3JfY29sLmRtYSk7Cj4gKwlhdjFfZGVjLT5z cl9jb2wuY3B1ID0gTlVMTDsKPiArCj4gKwlpZiAoYXYxX2RlYy0+bHJfY29sLmNwdSkKPiArCQlk bWFfZnJlZV9jb2hlcmVudCh2cHUtPmRldiwgYXYxX2RlYy0+bHJfY29sLnNpemUsCj4gKwkJCQkg IGF2MV9kZWMtPmxyX2NvbC5jcHUsIGF2MV9kZWMtPmxyX2NvbC5kbWEpOwo+ICsJYXYxX2RlYy0+ bHJfY29sLmNwdSA9IE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaGFudHJvX2F2MV90aWxl c19yZWFsbG9jYXRlKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gK3sKPiArCXN0cnVjdCBoYW50 cm9fZGV2ICp2cHUgPSBjdHgtPmRldjsKPiArCXN0cnVjdCBoYW50cm9fYXYxX2RlY19od19jdHgg KmF2MV9kZWMgPSAmY3R4LT5hdjFfZGVjOwo+ICsJc3RydWN0IGhhbnRyb19hdjFfZGVjX2N0cmxz ICpjdHJscyA9ICZhdjFfZGVjLT5jdHJsczsKPiArCWNvbnN0IHN0cnVjdCB2NGwyX2F2MV90aWxl X2luZm8gKnRpbGVfaW5mbyA9ICZjdHJscy0+ZnJhbWUtPnRpbGVfaW5mbzsKPiArCXVuc2lnbmVk IGludCBudW1fdGlsZV9jb2xzID0gdGlsZV9pbmZvLT50aWxlX2NvbHM7Cj4gKwl1bnNpZ25lZCBp bnQgaGVpZ2h0ID0gQUxJR04oY3RybHMtPmZyYW1lLT5mcmFtZV9oZWlnaHRfbWludXNfMSArIDEs IDY0KTsKPiArCXVuc2lnbmVkIGludCBoZWlnaHRfaW5fc2IgPSBoZWlnaHQgLyA2NDsKPiArCXVu c2lnbmVkIGludCBzdHJpcGVfbnVtID0gKChoZWlnaHQgKyA4KSArIDYzKSAvIDY0Owo+ICsJc2l6 ZV90IHNpemU7Cj4gKwo+ICsJaWYgKGF2MV9kZWMtPmRiX2RhdGFfY29sLnNpemUgPj0KPiArCSAg ICBBTElHTihoZWlnaHQgKiAxMiAqIGN0eC0+Yml0X2RlcHRoIC8gOCwgMTI4KSAqIG51bV90aWxl X2NvbHMpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaGFudHJvX2F2MV90aWxlc19mcmVlKGN0eCk7 Cj4gKwo+ICsJc2l6ZSA9IEFMSUdOKGhlaWdodCAqIDEyICogY3R4LT5iaXRfZGVwdGggLyA4LCAx MjgpICogbnVtX3RpbGVfY29sczsKPiArCWF2MV9kZWMtPmRiX2RhdGFfY29sLmNwdSA9IGRtYV9h bGxvY19jb2hlcmVudCh2cHUtPmRldiwgc2l6ZSwKPiArCQkJCQkJICAgICAgJmF2MV9kZWMtPmRi X2RhdGFfY29sLmRtYSwKPiArCQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWF2MV9k ZWMtPmRiX2RhdGFfY29sLmNwdSkKPiArCQlnb3RvIGJ1ZmZlcl9hbGxvY2F0aW9uX2Vycm9yOwo+ ICsJYXYxX2RlYy0+ZGJfZGF0YV9jb2wuc2l6ZSA9IHNpemU7Cj4gKwo+ICsJc2l6ZSA9IEFMSUdO KGhlaWdodCAqIDIgKiAxNiAvIDQsIDEyOCkgKiBudW1fdGlsZV9jb2xzOwo+ICsJYXYxX2RlYy0+ ZGJfY3RybF9jb2wuY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KHZwdS0+ZGV2LCBzaXplLAo+ICsJ CQkJCQkgICAgICAmYXYxX2RlYy0+ZGJfY3RybF9jb2wuZG1hLAo+ICsJCQkJCQkgICAgICBHRlBf S0VSTkVMKTsKPiArCWlmICghYXYxX2RlYy0+ZGJfY3RybF9jb2wuY3B1KQo+ICsJCWdvdG8gYnVm ZmVyX2FsbG9jYXRpb25fZXJyb3I7Cj4gKwlhdjFfZGVjLT5kYl9jdHJsX2NvbC5zaXplID0gc2l6 ZTsKPiArCj4gKwlzaXplID0gQUxJR04oaGVpZ2h0X2luX3NiICogNDQgKiBjdHgtPmJpdF9kZXB0 aCAqIDE2IC8gOCwgMTI4KSAqIG51bV90aWxlX2NvbHM7Cj4gKwlhdjFfZGVjLT5jZGVmX2NvbC5j cHUgPSBkbWFfYWxsb2NfY29oZXJlbnQodnB1LT5kZXYsIHNpemUsCj4gKwkJCQkJCSAgICZhdjFf ZGVjLT5jZGVmX2NvbC5kbWEsCj4gKwkJCQkJCSAgIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFhdjFf ZGVjLT5jZGVmX2NvbC5jcHUpCj4gKwkJZ290byBidWZmZXJfYWxsb2NhdGlvbl9lcnJvcjsKPiAr CWF2MV9kZWMtPmNkZWZfY29sLnNpemUgPSBzaXplOwo+ICsKPiArCXNpemUgPSBBTElHTihoZWln aHRfaW5fc2IgKiAoMzA0MCArIDEyODApLCAxMjgpICogbnVtX3RpbGVfY29sczsKPiArCWF2MV9k ZWMtPnNyX2NvbC5jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQodnB1LT5kZXYsIHNpemUsCj4gKwkJ CQkJCSAmYXYxX2RlYy0+c3JfY29sLmRtYSwKPiArCQkJCQkJIEdGUF9LRVJORUwpOwo+ICsJaWYg KCFhdjFfZGVjLT5zcl9jb2wuY3B1KQo+ICsJCWdvdG8gYnVmZmVyX2FsbG9jYXRpb25fZXJyb3I7 Cj4gKwlhdjFfZGVjLT5zcl9jb2wuc2l6ZSA9IHNpemU7Cj4gKwo+ICsJc2l6ZSA9IEFMSUdOKHN0 cmlwZV9udW0gKiAxNTM2ICogY3R4LT5iaXRfZGVwdGggLyA4LCAxMjgpICogbnVtX3RpbGVfY29s czsKPiArCWF2MV9kZWMtPmxyX2NvbC5jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQodnB1LT5kZXYs IHNpemUsCj4gKwkJCQkJCSAmYXYxX2RlYy0+bHJfY29sLmRtYSwKPiArCQkJCQkJIEdGUF9LRVJO RUwpOwo+ICsJaWYgKCFhdjFfZGVjLT5scl9jb2wuY3B1KQo+ICsJCWdvdG8gYnVmZmVyX2FsbG9j YXRpb25fZXJyb3I7Cj4gKwlhdjFfZGVjLT5scl9jb2wuc2l6ZSA9IHNpemU7Cj4gKwo+ICsJYXYx X2RlYy0+bnVtX3RpbGVfY29sc19hbGxvY2F0ZWQgPSBudW1fdGlsZV9jb2xzOwo+ICsJcmV0dXJu IDA7Cj4gKwo+ICtidWZmZXJfYWxsb2NhdGlvbl9lcnJvcjoKPiArCWhhbnRyb19hdjFfdGlsZXNf ZnJlZShjdHgpOwo+ICsJcmV0dXJuIC1FTk9NRU07Cj4gK30KPiArCj4gK3ZvaWQgaGFudHJvX2F2 MV9leGl0KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gK3sKPiArCXN0cnVjdCBoYW50cm9fZGV2 ICp2cHUgPSBjdHgtPmRldjsKPiArCXN0cnVjdCBoYW50cm9fYXYxX2RlY19od19jdHggKmF2MV9k ZWMgPSAmY3R4LT5hdjFfZGVjOwo+ICsKPiArCWlmIChhdjFfZGVjLT5nbG9iYWxfbW9kZWwuY3B1 KQo+ICsJCWRtYV9mcmVlX2NvaGVyZW50KHZwdS0+ZGV2LCBhdjFfZGVjLT5nbG9iYWxfbW9kZWwu c2l6ZSwKPiArCQkJCSAgYXYxX2RlYy0+Z2xvYmFsX21vZGVsLmNwdSwKPiArCQkJCSAgYXYxX2Rl Yy0+Z2xvYmFsX21vZGVsLmRtYSk7Cj4gKwlhdjFfZGVjLT5nbG9iYWxfbW9kZWwuY3B1ID0gTlVM TDsKPiArCj4gKwlpZiAoYXYxX2RlYy0+dGlsZV9pbmZvLmNwdSkKPiArCQlkbWFfZnJlZV9jb2hl cmVudCh2cHUtPmRldiwgYXYxX2RlYy0+dGlsZV9pbmZvLnNpemUsCj4gKwkJCQkgIGF2MV9kZWMt PnRpbGVfaW5mby5jcHUsCj4gKwkJCQkgIGF2MV9kZWMtPnRpbGVfaW5mby5kbWEpOwo+ICsJYXYx X2RlYy0+dGlsZV9pbmZvLmNwdSA9IE5VTEw7Cj4gKwo+ICsJaWYgKGF2MV9kZWMtPmZpbG1fZ3Jh aW4uY3B1KQo+ICsJCWRtYV9mcmVlX2NvaGVyZW50KHZwdS0+ZGV2LCBhdjFfZGVjLT5maWxtX2dy YWluLnNpemUsCj4gKwkJCQkgIGF2MV9kZWMtPmZpbG1fZ3JhaW4uY3B1LAo+ICsJCQkJICBhdjFf ZGVjLT5maWxtX2dyYWluLmRtYSk7Cj4gKwlhdjFfZGVjLT5maWxtX2dyYWluLmNwdSA9IE5VTEw7 Cj4gKwo+ICsJaWYgKGF2MV9kZWMtPnByb2JfdGJsLmNwdSkKPiArCQlkbWFfZnJlZV9jb2hlcmVu dCh2cHUtPmRldiwgYXYxX2RlYy0+cHJvYl90Ymwuc2l6ZSwKPiArCQkJCSAgYXYxX2RlYy0+cHJv Yl90YmwuY3B1LCBhdjFfZGVjLT5wcm9iX3RibC5kbWEpOwo+ICsJYXYxX2RlYy0+cHJvYl90Ymwu Y3B1ID0gTlVMTDsKPiArCj4gKwlpZiAoYXYxX2RlYy0+cHJvYl90Ymxfb3V0LmNwdSkKPiArCQlk bWFfZnJlZV9jb2hlcmVudCh2cHUtPmRldiwgYXYxX2RlYy0+cHJvYl90Ymxfb3V0LnNpemUsCj4g KwkJCQkgIGF2MV9kZWMtPnByb2JfdGJsX291dC5jcHUsCj4gKwkJCQkgIGF2MV9kZWMtPnByb2Jf dGJsX291dC5kbWEpOwo+ICsJYXYxX2RlYy0+cHJvYl90Ymxfb3V0LmNwdSA9IE5VTEw7Cj4gKwo+ ICsJaWYgKGF2MV9kZWMtPnRpbGVfYnVmLmNwdSkKPiArCQlkbWFfZnJlZV9jb2hlcmVudCh2cHUt PmRldiwgYXYxX2RlYy0+dGlsZV9idWYuc2l6ZSwKPiArCQkJCSAgYXYxX2RlYy0+dGlsZV9idWYu Y3B1LCBhdjFfZGVjLT50aWxlX2J1Zi5kbWEpOwo+ICsJYXYxX2RlYy0+dGlsZV9idWYuY3B1ID0g TlVMTDsKPiArCj4gKwloYW50cm9fYXYxX3RpbGVzX2ZyZWUoY3R4KTsKPiArfQo+ICsKPiAraW50 IGhhbnRyb19hdjFfaW5pdChzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+ICt7Cj4gKwlzdHJ1Y3Qg aGFudHJvX2RldiAqdnB1ID0gY3R4LT5kZXY7Cj4gKwlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfaHdf Y3R4ICphdjFfZGVjID0gJmN0eC0+YXYxX2RlYzsKPiArCj4gKwltZW1zZXQoYXYxX2RlYywgMCwg c2l6ZW9mKCphdjFfZGVjKSk7Cj4gKwo+ICsJYXYxX2RlYy0+Z2xvYmFsX21vZGVsLmNwdSA9IGRt YV9hbGxvY19jb2hlcmVudCh2cHUtPmRldiwgR0xPQkFMX01PREVMX1NJWkUsCj4gKwkJCQkJCSAg ICAgICAmYXYxX2RlYy0+Z2xvYmFsX21vZGVsLmRtYSwKPiArCQkJCQkJICAgICAgIEdGUF9LRVJO RUwpOwo+ICsJaWYgKCFhdjFfZGVjLT5nbG9iYWxfbW9kZWwuY3B1KQo+ICsJCXJldHVybiAtRU5P TUVNOwo+ICsJYXYxX2RlYy0+Z2xvYmFsX21vZGVsLnNpemUgPSBHTE9CQUxfTU9ERUxfU0laRTsK PiArCj4gKwlhdjFfZGVjLT50aWxlX2luZm8uY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KHZwdS0+ ZGV2LCBBVjFfVElMRV9JTkZPX1NJWkUsCj4gKwkJCQkJCSAgICAmYXYxX2RlYy0+dGlsZV9pbmZv LmRtYSwKPiArCQkJCQkJICAgIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFhdjFfZGVjLT50aWxlX2lu Zm8uY3B1KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJYXYxX2RlYy0+dGlsZV9pbmZvLnNpemUg PSBBVjFfVElMRV9JTkZPX1NJWkU7Cj4gKwo+ICsJYXYxX2RlYy0+ZmlsbV9ncmFpbi5jcHUgPSBk bWFfYWxsb2NfY29oZXJlbnQodnB1LT5kZXYsCj4gKwkJCQkJCSAgICAgQUxJR04oc2l6ZW9mKHN0 cnVjdCBoYW50cm9fYXYxX2ZpbG1fZ3JhaW4pLAo+ICsJCQkJCQkJICAgMjA0OCksCj4gKwkJCQkJ CSAgICAgJmF2MV9kZWMtPmZpbG1fZ3JhaW4uZG1hLAo+ICsJCQkJCQkgICAgIEdGUF9LRVJORUwp Owo+ICsJaWYgKCFhdjFfZGVjLT5maWxtX2dyYWluLmNwdSkKPiArCQlyZXR1cm4gLUVOT01FTTsK PiArCWF2MV9kZWMtPmZpbG1fZ3JhaW4uc2l6ZSA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgaGFudHJv X2F2MV9maWxtX2dyYWluKSwgMjA0OCk7Cj4gKwo+ICsJYXYxX2RlYy0+cHJvYl90YmwuY3B1ID0g ZG1hX2FsbG9jX2NvaGVyZW50KHZwdS0+ZGV2LAo+ICsJCQkJCQkgICBBTElHTihzaXplb2Yoc3Ry dWN0IGF2MWNkZnMpLCAyMDQ4KSwKPiArCQkJCQkJICAgJmF2MV9kZWMtPnByb2JfdGJsLmRtYSwK PiArCQkJCQkJICAgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWF2MV9kZWMtPnByb2JfdGJsLmNwdSkK PiArCQlyZXR1cm4gLUVOT01FTTsKPiArCWF2MV9kZWMtPnByb2JfdGJsLnNpemUgPSBBTElHTihz aXplb2Yoc3RydWN0IGF2MWNkZnMpLCAyMDQ4KTsKPiArCj4gKwlhdjFfZGVjLT5wcm9iX3RibF9v dXQuY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KHZwdS0+ZGV2LAo+ICsJCQkJCQkgICAgICAgQUxJ R04oc2l6ZW9mKHN0cnVjdCBhdjFjZGZzKSwgMjA0OCksCj4gKwkJCQkJCSAgICAgICAmYXYxX2Rl Yy0+cHJvYl90Ymxfb3V0LmRtYSwKPiArCQkJCQkJICAgICAgIEdGUF9LRVJORUwpOwo+ICsJaWYg KCFhdjFfZGVjLT5wcm9iX3RibF9vdXQuY3B1KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJYXYx X2RlYy0+cHJvYl90Ymxfb3V0LnNpemUgPSBBTElHTihzaXplb2Yoc3RydWN0IGF2MWNkZnMpLCAy MDQ4KTsKPiArCWF2MV9kZWMtPmNkZnMgPSAmYXYxX2RlYy0+ZGVmYXVsdF9jZGZzOwo+ICsJYXYx X2RlYy0+Y2Rmc19uZHZjID0gJmF2MV9kZWMtPmRlZmF1bHRfY2Rmc19uZHZjOwo+ICsKPiArCWhh bnRyb19hdjFfc2V0X2RlZmF1bHRfY2RmcyhhdjFfZGVjLT5jZGZzLCBhdjFfZGVjLT5jZGZzX25k dmMpOwo+ICsKPiArCWF2MV9kZWMtPnRpbGVfYnVmLmNwdSA9IGRtYV9hbGxvY19jb2hlcmVudCh2 cHUtPmRldiwKPiArCQkJCQkJICAgQVYxX1RJTEVfU0laRSwKPiArCQkJCQkJICAgJmF2MV9kZWMt PnRpbGVfYnVmLmRtYSwKPiArCQkJCQkJICAgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWF2MV9kZWMt PnRpbGVfYnVmLmNwdSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCWF2MV9kZWMtPnRpbGVfYnVm LnNpemUgPSBBVjFfVElMRV9TSVpFOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQg aGFudHJvX2F2MV9wcmVwYXJlX3J1bihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+ICt7Cj4gKwlz dHJ1Y3QgaGFudHJvX2F2MV9kZWNfaHdfY3R4ICphdjFfZGVjID0gJmN0eC0+YXYxX2RlYzsKPiAr CXN0cnVjdCBoYW50cm9fYXYxX2RlY19jdHJscyAqY3RybHMgPSAmYXYxX2RlYy0+Y3RybHM7Cj4g Kwo+ICsJY3RybHMtPnNlcXVlbmNlID0gaGFudHJvX2dldF9jdHJsKGN0eCwgVjRMMl9DSURfU1RB VEVMRVNTX0FWMV9TRVFVRU5DRSk7Cj4gKwlpZiAoV0FSTl9PTighY3RybHMtPnNlcXVlbmNlKSkK PiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwljdHJscy0+dGlsZV9ncm91cF9lbnRyeSA9Cj4g KwkgICAgaGFudHJvX2dldF9jdHJsKGN0eCwgVjRMMl9DSURfU1RBVEVMRVNTX0FWMV9USUxFX0dS T1VQX0VOVFJZKTsKPiArCWlmIChXQVJOX09OKCFjdHJscy0+dGlsZV9ncm91cF9lbnRyeSkpCj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJY3RybHMtPmZyYW1lID0gaGFudHJvX2dldF9jdHJs KGN0eCwgVjRMMl9DSURfU1RBVEVMRVNTX0FWMV9GUkFNRSk7Cj4gKwlpZiAoV0FSTl9PTighY3Ry bHMtPmZyYW1lKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwljdHJscy0+ZmlsbV9ncmFp biA9Cj4gKwkgICAgaGFudHJvX2dldF9jdHJsKGN0eCwgVjRMMl9DSURfU1RBVEVMRVNTX0FWMV9G SUxNX0dSQUlOKTsKPiArCj4gKwlyZXR1cm4gaGFudHJvX2F2MV90aWxlc19yZWFsbG9jYXRlKGN0 eCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaGFudHJvX2F2MV9nZXRfbXNiKHUzMiBuKQo+ICt7 Cj4gKwlpZiAobiA9PSAwKQo+ICsJCXJldHVybiAwOwo+ICsJcmV0dXJuIDMxIF4gX19idWlsdGlu X2NseihuKTsKPiArfQo+ICsKPiArc3RhdGljIHNob3J0IGhhbnRyb19hdjFfcmVzb2x2ZV9kaXZp c29yXzMyKHUzMiBkLCBzaG9ydCAqc2hpZnQpCj4gK3sKPiArCWludCBmOwo+ICsJdTY0IGU7Cj4g Kwo+ICsJKnNoaWZ0ID0gaGFudHJvX2F2MV9nZXRfbXNiKGQpOwo+ICsJLyogZSBpcyBvYnRhaW5l ZCBmcm9tIEQgYWZ0ZXIgcmVzZXR0aW5nIHRoZSBtb3N0IHNpZ25pZmljYW50IDEgYml0LiAqLwo+ ICsJZSA9IGQgLSAoKHUzMikxIDw8ICpzaGlmdCk7Cj4gKwkvKiBHZXQgdGhlIG1vc3Qgc2lnbmlm aWNhbnQgRElWX0xVVF9CSVRTICg4KSBiaXRzIG9mIGUgaW50byBmICovCj4gKwlpZiAoKnNoaWZ0 ID4gRElWX0xVVF9CSVRTKQo+ICsJCWYgPSBBVjFfRElWX1JPVU5EX1VQX1BPVzIoZSwgKnNoaWZ0 IC0gRElWX0xVVF9CSVRTKTsKPiArCWVsc2UKPiArCQlmID0gZSA8PCAoRElWX0xVVF9CSVRTIC0g KnNoaWZ0KTsKPiArCWlmIChmID4gRElWX0xVVF9OVU0pCj4gKwkJcmV0dXJuIC0xOwo+ICsJKnNo aWZ0ICs9IERJVl9MVVRfUFJFQ19CSVRTOwo+ICsJLyogVXNlIGYgYXMgbG9va3VwIGludG8gdGhl IHByZWNvbXB1dGVkIHRhYmxlIG9mIG11bHRpcGxpZXJzICovCj4gKwlyZXR1cm4gZGl2X2x1dFtm XTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaGFudHJvX2F2MV9nZXRfc2hlYXJfcGFyYW1zKGNv bnN0IHUzMiAqcGFyYW1zLCBzNjQgKmFscGhhLAo+ICsJCQkJCXM2NCAqYmV0YSwgczY0ICpnYW1t YSwgczY0ICpkZWx0YSkKPiArewo+ICsJY29uc3QgaW50ICptYXQgPSBwYXJhbXM7Cj4gKwlzaG9y dCBzaGlmdDsKPiArCXNob3J0IHk7Cj4gKwlsb25nIGxvbmcgZ3YsIGR2Owo+ICsKPiArCWlmICht YXRbMl0gPD0gMCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJKmFscGhhID0gY2xhbXBfdmFsKG1hdFsy XSAtICgxIDw8IFdBUlBFRE1PREVMX1BSRUNfQklUUyksIFMxNl9NSU4sIFMxNl9NQVgpOwo+ICsJ KmJldGEgPSBjbGFtcF92YWwobWF0WzNdLCBTMTZfTUlOLCBTMTZfTUFYKTsKPiArCj4gKwl5ID0g aGFudHJvX2F2MV9yZXNvbHZlX2Rpdmlzb3JfMzIoYWJzKG1hdFsyXSksICZzaGlmdCkgKiAobWF0 WzJdIDwgMCA/IC0xIDogMSk7Cj4gKwo+ICsJZ3YgPSAoKGxvbmcgbG9uZyltYXRbNF0gKiAoMSA8 PCBXQVJQRURNT0RFTF9QUkVDX0JJVFMpKSAqIHk7Cj4gKwo+ICsJKmdhbW1hID0gY2xhbXBfdmFs KChpbnQpQVYxX0RJVl9ST1VORF9VUF9QT1cyX1NJR05FRChndiwgc2hpZnQpLCBTMTZfTUlOLCBT MTZfTUFYKTsKPiArCj4gKwlkdiA9ICgobG9uZyBsb25nKW1hdFszXSAqIG1hdFs0XSkgKiB5Owo+ ICsJKmRlbHRhID0gY2xhbXBfdmFsKG1hdFs1XSAtCj4gKwkJKGludClBVjFfRElWX1JPVU5EX1VQ X1BPVzJfU0lHTkVEKGR2LCBzaGlmdCkgLSAoMSA8PCBXQVJQRURNT0RFTF9QUkVDX0JJVFMpLAo+ ICsJCVMxNl9NSU4sIFMxNl9NQVgpOwo+ICsKPiArCSphbHBoYSA9IEFWMV9ESVZfUk9VTkRfVVBf UE9XMl9TSUdORUQoKmFscGhhLCBXQVJQX1BBUkFNX1JFRFVDRV9CSVRTKQo+ICsJCSAqICgxIDw8 IFdBUlBfUEFSQU1fUkVEVUNFX0JJVFMpOwo+ICsJKmJldGEgPSBBVjFfRElWX1JPVU5EX1VQX1BP VzJfU0lHTkVEKCpiZXRhLCBXQVJQX1BBUkFNX1JFRFVDRV9CSVRTKQo+ICsJCSogKDEgPDwgV0FS UF9QQVJBTV9SRURVQ0VfQklUUyk7Cj4gKwkqZ2FtbWEgPSBBVjFfRElWX1JPVU5EX1VQX1BPVzJf U0lHTkVEKCpnYW1tYSwgV0FSUF9QQVJBTV9SRURVQ0VfQklUUykKPiArCQkgKiAoMSA8PCBXQVJQ X1BBUkFNX1JFRFVDRV9CSVRTKTsKPiArCSpkZWx0YSA9IEFWMV9ESVZfUk9VTkRfVVBfUE9XMl9T SUdORUQoKmRlbHRhLCBXQVJQX1BBUkFNX1JFRFVDRV9CSVRTKQo+ICsJCSogKDEgPDwgV0FSUF9Q QVJBTV9SRURVQ0VfQklUUyk7Cj4gK30KPiArCj4gK3ZvaWQgaGFudHJvX2F2MV9zZXRfZ2xvYmFs X21vZGVsKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gK3sKPiArCXN0cnVjdCBoYW50cm9fYXYx X2RlY19od19jdHggKmF2MV9kZWMgPSAmY3R4LT5hdjFfZGVjOwo+ICsJc3RydWN0IGhhbnRyb19h djFfZGVjX2N0cmxzICpjdHJscyA9ICZhdjFfZGVjLT5jdHJsczsKPiArCWNvbnN0IHN0cnVjdCB2 NGwyX2N0cmxfYXYxX2ZyYW1lICpmcmFtZSA9IGN0cmxzLT5mcmFtZTsKPiArCWNvbnN0IHN0cnVj dCB2NGwyX2F2MV9nbG9iYWxfbW90aW9uICpnbSA9ICZmcmFtZS0+Z2xvYmFsX21vdGlvbjsKPiAr CXU4ICpkc3QgPSBhdjFfZGVjLT5nbG9iYWxfbW9kZWwuY3B1Owo+ICsJaW50IHJlZl9mcmFtZSwg aTsKPiArCj4gKwltZW1zZXQoZHN0LCAwLCBHTE9CQUxfTU9ERUxfU0laRSk7Cj4gKwlmb3IgKHJl Zl9mcmFtZSA9IDA7IHJlZl9mcmFtZSA8IFY0TDJfQVYxX1JFRlNfUEVSX0ZSQU1FOyArK3JlZl9m cmFtZSkgewo+ICsJCXM2NCBhbHBoYSA9IDAsIGJldGEgPSAwLCBnYW1tYSA9IDAsIGRlbHRhID0g MDsKPiArCj4gKwkJZm9yIChpID0gMDsgaSA8IDY7ICsraSkgewo+ICsJCQlpZiAoaSA9PSAyKQo+ ICsJCQkJKihzMzIgKilkc3QgPQo+ICsJCQkJCWdtLT5wYXJhbXNbVjRMMl9BVjFfUkVGX0xBU1Rf RlJBTUUgKyByZWZfZnJhbWVdWzNdOwo+ICsJCQllbHNlIGlmIChpID09IDMpCj4gKwkJCQkqKHMz MiAqKWRzdCA9Cj4gKwkJCQkJZ20tPnBhcmFtc1tWNEwyX0FWMV9SRUZfTEFTVF9GUkFNRSArIHJl Zl9mcmFtZV1bMl07Cj4gKwkJCWVsc2UKPiArCQkJCSooczMyICopZHN0ID0KPiArCQkJCQlnbS0+ cGFyYW1zW1Y0TDJfQVYxX1JFRl9MQVNUX0ZSQU1FICsgcmVmX2ZyYW1lXVtpXTsKPiArCQkJZHN0 ICs9IDQ7Cj4gKwkJfQo+ICsKPiArCQlpZiAoZ20tPnR5cGVbVjRMMl9BVjFfUkVGX0xBU1RfRlJB TUUgKyByZWZfZnJhbWVdIDw9IFY0TDJfQVYxX1dBUlBfTU9ERUxfQUZGSU5FKQo+ICsJCQloYW50 cm9fYXYxX2dldF9zaGVhcl9wYXJhbXMoJmdtLT5wYXJhbXNbVjRMMl9BVjFfUkVGX0xBU1RfRlJB TUUgKyByZWZfZnJhbWVdWzBdLAo+ICsJCQkJCQkgICAgJmFscGhhLCAmYmV0YSwgJmdhbW1hLCAm ZGVsdGEpOwo+ICsKPiArCQkqKHMxNiAqKWRzdCA9IGFscGhhOwo+ICsJCWRzdCArPSAyOwo+ICsJ CSooczE2ICopZHN0ID0gYmV0YTsKPiArCQlkc3QgKz0gMjsKPiArCQkqKHMxNiAqKWRzdCA9IGdh bW1hOwo+ICsJCWRzdCArPSAyOwo+ICsJCSooczE2ICopZHN0ID0gZGVsdGE7Cj4gKwkJZHN0ICs9 IDI7Cj4gKwl9Cj4gK30KPiArCj4gK2ludCBoYW50cm9fYXYxX3RpbGVfbG9nMihpbnQgdGFyZ2V0 KQo+ICt7Cj4gKwlpbnQgazsKPiArCj4gKwkvKgo+ICsJICogcmV0dXJucyB0aGUgc21hbGxlc3Qg dmFsdWUgZm9yIGsgc3VjaCB0aGF0IDEgPDwgayBpcyBncmVhdGVyCj4gKwkgKiB0aGFuIG9yIGVx dWFsIHRvIHRhcmdldAo+ICsJICovCj4gKwlmb3IgKGsgPSAwOyAoMSA8PCBrKSA8IHRhcmdldDsg aysrKQo+ICsJCTsKPiArCj4gKwlyZXR1cm4gazsKPiArfQo+ICsKPiAraW50IGhhbnRyb19hdjFf Z2V0X2Rpc3Qoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgaW50IGEsIGludCBiKQo+ICt7Cj4gKwlz dHJ1Y3QgaGFudHJvX2F2MV9kZWNfaHdfY3R4ICphdjFfZGVjID0gJmN0eC0+YXYxX2RlYzsKPiAr CXN0cnVjdCBoYW50cm9fYXYxX2RlY19jdHJscyAqY3RybHMgPSAmYXYxX2RlYy0+Y3RybHM7Cj4g KwlpbnQgYml0cyA9IGN0cmxzLT5zZXF1ZW5jZS0+b3JkZXJfaGludF9iaXRzIC0gMTsKPiArCWlu dCBkaWZmLCBtOwo+ICsKPiArCWlmICghY3RybHMtPnNlcXVlbmNlLT5vcmRlcl9oaW50X2JpdHMp Cj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJZGlmZiA9IGEgLSBiOwo+ICsJbSA9IDEgPDwgYml0czsK PiArCWRpZmYgPSAoZGlmZiAmIChtIC0gMSkpIC0gKGRpZmYgJiBtKTsKPiArCj4gKwlyZXR1cm4g ZGlmZjsKPiArfQo+ICsKPiArdm9pZCBoYW50cm9fYXYxX3NldF9mcmFtZV9zaWduX2JpYXMoc3Ry dWN0IGhhbnRyb19jdHggKmN0eCkKPiArewo+ICsJc3RydWN0IGhhbnRyb19hdjFfZGVjX2h3X2N0 eCAqYXYxX2RlYyA9ICZjdHgtPmF2MV9kZWM7Cj4gKwlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfY3Ry bHMgKmN0cmxzID0gJmF2MV9kZWMtPmN0cmxzOwo+ICsJY29uc3Qgc3RydWN0IHY0bDJfY3RybF9h djFfZnJhbWUgKmZyYW1lID0gY3RybHMtPmZyYW1lOwo+ICsJY29uc3Qgc3RydWN0IHY0bDJfY3Ry bF9hdjFfc2VxdWVuY2UgKnNlcXVlbmNlID0gY3RybHMtPnNlcXVlbmNlOwo+ICsJaW50IGk7Cj4g Kwo+ICsJaWYgKCFzZXF1ZW5jZS0+b3JkZXJfaGludF9iaXRzIHx8IElTX0lOVFJBKGZyYW1lLT5m cmFtZV90eXBlKSkgewo+ICsJCWZvciAoaSA9IDA7IGkgPCBWNEwyX0FWMV9UT1RBTF9SRUZTX1BF Ul9GUkFNRTsgaSsrKQo+ICsJCQlhdjFfZGVjLT5yZWZfZnJhbWVfc2lnbl9iaWFzW2ldID0gMDsK PiArCj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsJLy8gSWRlbnRpZnkgdGhlIG5lYXJlc3QgZm9yd2Fy ZCBhbmQgYmFja3dhcmQgcmVmZXJlbmNlcy4KPiArCWZvciAoaSA9IDA7IGkgPCBWNEwyX0FWMV9U T1RBTF9SRUZTX1BFUl9GUkFNRSAtIDE7IGkrKykgewo+ICsJCWlmIChoYW50cm9fYXYxX2dldF9m cmFtZV9pbmRleChjdHgsIGkpID49IDApIHsKPiArCQkJaW50IHJlbF9vZmYgPQo+ICsJCQkgICAg aGFudHJvX2F2MV9nZXRfZGlzdChjdHgsCj4gKwkJCQkJCWhhbnRyb19hdjFfZ2V0X29yZGVyX2hp bnQoY3R4LCBpKSwKPiArCQkJCQkJZnJhbWUtPm9yZGVyX2hpbnQpOwo+ICsJCQlhdjFfZGVjLT5y ZWZfZnJhbWVfc2lnbl9iaWFzW2kgKyAxXSA9IChyZWxfb2ZmIDw9IDApID8gMCA6IDE7Cj4gKwkJ fQo+ICsJfQo+ICt9Cj4gKwo+ICt2b2lkIGhhbnRyb19hdjFfaW5pdF9zY2FsaW5nX2Z1bmN0aW9u KGNvbnN0IHU4ICp2YWx1ZXMsIGNvbnN0IHU4ICpzY2FsaW5nLAo+ICsJCQkJICAgICAgdTggbnVt X3BvaW50cywgdTggKnNjYWxpbmdfbHV0KQo+ICt7Cj4gKwlpbnQgaSwgcG9pbnQ7Cj4gKwo+ICsJ aWYgKG51bV9wb2ludHMgPT0gMCkgewo+ICsJCW1lbXNldChzY2FsaW5nX2x1dCwgMCwgMjU2KTsK PiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZm9yIChwb2ludCA9IDA7IHBvaW50IDwgbnVtX3Bv aW50cyAtIDE7IHBvaW50KyspIHsKPiArCQlpbnQgeDsKPiArCQlzMzIgZGVsdGFfeSA9IHNjYWxp bmdbcG9pbnQgKyAxXSAtIHNjYWxpbmdbcG9pbnRdOwo+ICsJCXMzMiBkZWx0YV94ID0gdmFsdWVz W3BvaW50ICsgMV0gLSB2YWx1ZXNbcG9pbnRdOwo+ICsJCXM2NCBkZWx0YSA9Cj4gKwkJICAgIGRl bHRhX3ggPyBkZWx0YV95ICogKCg2NTUzNiArIChkZWx0YV94ID4+IDEpKSAvCj4gKwkJCQkJIGRl bHRhX3gpIDogMDsKPiArCj4gKwkJZm9yICh4ID0gMDsgeCA8IGRlbHRhX3g7IHgrKykgewo+ICsJ CQlzY2FsaW5nX2x1dFt2YWx1ZXNbcG9pbnRdICsgeF0gPQo+ICsJCQkgICAgc2NhbGluZ1twb2lu dF0gKwo+ICsJCQkgICAgKHMzMikoKHggKiBkZWx0YSArIDMyNzY4KSA+PiAxNik7Cj4gKwkJfQo+ ICsJfQo+ICsKPiArCWZvciAoaSA9IHZhbHVlc1tudW1fcG9pbnRzIC0gMV07IGkgPCAyNTY7IGkr KykKPiArCQlzY2FsaW5nX2x1dFtpXSA9IHNjYWxpbmdbbnVtX3BvaW50cyAtIDFdOwo+ICt9Cj4g Kwo+ICt2b2lkIGhhbnRyb19hdjFfc2V0X3RpbGVfaW5mbyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4 KQo+ICt7Cj4gKwlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfaHdfY3R4ICphdjFfZGVjID0gJmN0eC0+ YXYxX2RlYzsKPiArCXN0cnVjdCBoYW50cm9fYXYxX2RlY19jdHJscyAqY3RybHMgPSAmYXYxX2Rl Yy0+Y3RybHM7Cj4gKwljb25zdCBzdHJ1Y3QgdjRsMl9hdjFfdGlsZV9pbmZvICp0aWxlX2luZm8g PSAmY3RybHMtPmZyYW1lLT50aWxlX2luZm87Cj4gKwljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2F2 MV90aWxlX2dyb3VwX2VudHJ5ICpncm91cF9lbnRyeSA9Cj4gKwkgICAgY3RybHMtPnRpbGVfZ3Jv dXBfZW50cnk7Cj4gKwl1OCAqZHN0ID0gYXYxX2RlYy0+dGlsZV9pbmZvLmNwdTsKPiArCWludCB0 aWxlMCwgdGlsZTE7Cj4gKwo+ICsJbWVtc2V0KGRzdCwgMCwgYXYxX2RlYy0+dGlsZV9pbmZvLnNp emUpOwo+ICsKPiArCWZvciAodGlsZTAgPSAwOyB0aWxlMCA8IHRpbGVfaW5mby0+dGlsZV9jb2xz OyB0aWxlMCsrKSB7Cj4gKwkJZm9yICh0aWxlMSA9IDA7IHRpbGUxIDwgdGlsZV9pbmZvLT50aWxl X3Jvd3M7IHRpbGUxKyspIHsKPiArCQkJaW50IHRpbGVfaWQgPSB0aWxlMSAqIHRpbGVfaW5mby0+ dGlsZV9jb2xzICsgdGlsZTA7Cj4gKwkJCXUzMiBzdGFydCwgZW5kOwo+ICsJCQl1MzIgeTAgPQo+ ICsJCQkgICAgdGlsZV9pbmZvLT5oZWlnaHRfaW5fc2JzX21pbnVzXzFbdGlsZTFdICsgMTsKPiAr CQkJdTMyIHgwID0gdGlsZV9pbmZvLT53aWR0aF9pbl9zYnNfbWludXNfMVt0aWxlMF0gKyAxOwo+ ICsKPiArCQkJLyogdGlsZSBzaXplIGluIFNCIHVuaXRzICh3aWR0aCxoZWlnaHQpICovCj4gKwkJ CSpkc3QrKyA9IHgwOwo+ICsJCQkqZHN0KysgPSAwOwo+ICsJCQkqZHN0KysgPSAwOwo+ICsJCQkq ZHN0KysgPSAwOwo+ICsJCQkqZHN0KysgPSB5MDsKPiArCQkJKmRzdCsrID0gMDsKPiArCQkJKmRz dCsrID0gMDsKPiArCQkJKmRzdCsrID0gMDsKPiArCj4gKwkJCS8qIHRpbGUgc3RhcnQgcG9zaXRp b24gKi8KPiArCQkJc3RhcnQgPSBncm91cF9lbnRyeVt0aWxlX2lkXS50aWxlX29mZnNldCAtIGdy b3VwX2VudHJ5WzBdLnRpbGVfb2Zmc2V0Owo+ICsJCQkqZHN0KysgPSBzdGFydCAmIDI1NTsKPiAr CQkJKmRzdCsrID0gKHN0YXJ0ID4+IDgpICYgMjU1Owo+ICsJCQkqZHN0KysgPSAoc3RhcnQgPj4g MTYpICYgMjU1Owo+ICsJCQkqZHN0KysgPSAoc3RhcnQgPj4gMjQpICYgMjU1Owo+ICsKPiArCQkJ LyogbnVtYmVyIG9mIGJ5dGVzIGluIHRpbGUgZGF0YSAqLwo+ICsJCQllbmQgPSBzdGFydCArIGdy b3VwX2VudHJ5W3RpbGVfaWRdLnRpbGVfc2l6ZTsKPiArCQkJKmRzdCsrID0gZW5kICYgMjU1Owo+ ICsJCQkqZHN0KysgPSAoZW5kID4+IDgpICYgMjU1Owo+ICsJCQkqZHN0KysgPSAoZW5kID4+IDE2 KSAmIDI1NTsKPiArCQkJKmRzdCsrID0gKGVuZCA+PiAyNCkgJiAyNTU7Cj4gKwkJfQo+ICsJfQo+ ICt9Cj4gKwo+ICtib29sIGhhbnRyb19hdjFfaXNfbG9zc2xlc3Moc3RydWN0IGhhbnRyb19jdHgg KmN0eCkKPiArewo+ICsJc3RydWN0IGhhbnRyb19hdjFfZGVjX2h3X2N0eCAqYXYxX2RlYyA9ICZj dHgtPmF2MV9kZWM7Cj4gKwlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfY3RybHMgKmN0cmxzID0gJmF2 MV9kZWMtPmN0cmxzOwo+ICsJY29uc3Qgc3RydWN0IHY0bDJfY3RybF9hdjFfZnJhbWUgKmZyYW1l ID0gY3RybHMtPmZyYW1lOwo+ICsJY29uc3Qgc3RydWN0IHY0bDJfYXYxX3NlZ21lbnRhdGlvbiAq c2VnbWVudGF0aW9uID0gJmZyYW1lLT5zZWdtZW50YXRpb247Cj4gKwljb25zdCBzdHJ1Y3QgdjRs Ml9hdjFfcXVhbnRpemF0aW9uICpxdWFudGl6YXRpb24gPSAmZnJhbWUtPnF1YW50aXphdGlvbjsK PiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBWNEwyX0FWMV9NQVhfU0VHTUVOVFM7 IGkrKykgewo+ICsJCWludCBxaW5kZXggPSBxdWFudGl6YXRpb24tPmJhc2VfcV9pZHg7Cj4gKwo+ ICsJCWlmIChzZWdtZW50YXRpb24tPmZlYXR1cmVfZW5hYmxlZFtpXSAmCj4gKwkJICAgIFY0TDJf QVYxX1NFR01FTlRfRkVBVFVSRV9FTkFCTEVEKFY0TDJfQVYxX1NFR19MVkxfQUxUX1EpKSB7Cj4g KwkJCXFpbmRleCArPSBzZWdtZW50YXRpb24tPmZlYXR1cmVfZGF0YVtpXVtWNEwyX0FWMV9TRUdf TFZMX0FMVF9RXTsKPiArCQl9Cj4gKwkJcWluZGV4ID0gY2xhbXAocWluZGV4LCAwLCAyNTUpOwo+ ICsKPiArCQlpZiAocWluZGV4IHx8Cj4gKwkJICAgIHF1YW50aXphdGlvbi0+ZGVsdGFfcV95X2Rj IHx8Cj4gKwkJICAgIHF1YW50aXphdGlvbi0+ZGVsdGFfcV91X2RjIHx8Cj4gKwkJICAgIHF1YW50 aXphdGlvbi0+ZGVsdGFfcV91X2FjIHx8Cj4gKwkJICAgIHF1YW50aXphdGlvbi0+ZGVsdGFfcV92 X2RjIHx8Cj4gKwkJICAgIHF1YW50aXphdGlvbi0+ZGVsdGFfcV92X2FjKQo+ICsJCQlyZXR1cm4g ZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3ZvaWQgaGFudHJv X2F2MV91cGRhdGVfcHJvYihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+ICt7Cj4gKwlzdHJ1Y3Qg aGFudHJvX2F2MV9kZWNfaHdfY3R4ICphdjFfZGVjID0gJmN0eC0+YXYxX2RlYzsKPiArCXN0cnVj dCBoYW50cm9fYXYxX2RlY19jdHJscyAqY3RybHMgPSAmYXYxX2RlYy0+Y3RybHM7Cj4gKwljb25z dCBzdHJ1Y3QgdjRsMl9jdHJsX2F2MV9mcmFtZSAqZnJhbWUgPSBjdHJscy0+ZnJhbWU7Cj4gKwli b29sIGZyYW1lX2lzX2ludHJhID0gSVNfSU5UUkEoZnJhbWUtPmZyYW1lX3R5cGUpOwo+ICsJc3Ry dWN0IGF2MWNkZnMgKm91dF9jZGZzID0gKHN0cnVjdCBhdjFjZGZzICopYXYxX2RlYy0+cHJvYl90 Ymxfb3V0LmNwdTsKPiArCWludCBpOwo+ICsKPiArCWlmIChmcmFtZS0+ZmxhZ3MgJiBWNEwyX0FW MV9GUkFNRV9GTEFHX0RJU0FCTEVfRlJBTUVfRU5EX1VQREFURV9DREYpCj4gKwkJcmV0dXJuOwo+ ICsKPiArCWZvciAoaSA9IDA7IGkgPCBOVU1fUkVGX0ZSQU1FUzsgaSsrKSB7Cj4gKwkJaWYgKGZy YW1lLT5yZWZyZXNoX2ZyYW1lX2ZsYWdzICYgQklUKGkpKSB7Cj4gKwkJCXN0cnVjdCBtdmNkZnMg c3RvcmVkX212X2NkZjsKPiArCj4gKwkJCWhhbnRyb19hdjFfZ2V0X2NkZnMoY3R4LCBpKTsKPiAr CQkJc3RvcmVkX212X2NkZiA9IGF2MV9kZWMtPmNkZnMtPm12X2NkZjsKPiArCQkJKmF2MV9kZWMt PmNkZnMgPSAqb3V0X2NkZnM7Cj4gKwkJCWlmIChmcmFtZV9pc19pbnRyYSkgewo+ICsJCQkJYXYx X2RlYy0+Y2Rmcy0+bXZfY2RmID0gc3RvcmVkX212X2NkZjsKPiArCQkJCSphdjFfZGVjLT5jZGZz X25kdmMgPSBvdXRfY2Rmcy0+bXZfY2RmOwo+ICsJCQl9Cj4gKwkJCWhhbnRyb19hdjFfc3RvcmVf Y2RmcyhjdHgsIGZyYW1lLT5yZWZyZXNoX2ZyYW1lX2ZsYWdzKTsKPiArCQkJYnJlYWs7Cj4gKwkJ fQo+ICsJfQo+ICt9Cj4gKwo+ICt2b2lkIGhhbnRyb19hdjFfc2V0X3Byb2Ioc3RydWN0IGhhbnRy b19jdHggKmN0eCkKPiArewo+ICsJc3RydWN0IGhhbnRyb19hdjFfZGVjX2h3X2N0eCAqYXYxX2Rl YyA9ICZjdHgtPmF2MV9kZWM7Cj4gKwlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfY3RybHMgKmN0cmxz ID0gJmF2MV9kZWMtPmN0cmxzOwo+ICsJY29uc3Qgc3RydWN0IHY0bDJfY3RybF9hdjFfZnJhbWUg KmZyYW1lID0gY3RybHMtPmZyYW1lOwo+ICsJY29uc3Qgc3RydWN0IHY0bDJfYXYxX3F1YW50aXph dGlvbiAqcXVhbnRpemF0aW9uID0gJmZyYW1lLT5xdWFudGl6YXRpb247Cj4gKwlib29sIGVycm9y X3Jlc2lsaWVudF9tb2RlID0KPiArCSAgICAhIShmcmFtZS0+ZmxhZ3MgJiBWNEwyX0FWMV9GUkFN RV9GTEFHX0VSUk9SX1JFU0lMSUVOVF9NT0RFKTsKPiArCWJvb2wgZnJhbWVfaXNfaW50cmEgPSBJ U19JTlRSQShmcmFtZS0+ZnJhbWVfdHlwZSk7Cj4gKwo+ICsJaWYgKGVycm9yX3Jlc2lsaWVudF9t b2RlIHx8IGZyYW1lX2lzX2ludHJhIHx8Cj4gKwkgICAgZnJhbWUtPnByaW1hcnlfcmVmX2ZyYW1l ID09IEFWMV9QUklNQVJZX1JFRl9OT05FKSB7Cj4gKwkJYXYxX2RlYy0+Y2RmcyA9ICZhdjFfZGVj LT5kZWZhdWx0X2NkZnM7Cj4gKwkJYXYxX2RlYy0+Y2Rmc19uZHZjID0gJmF2MV9kZWMtPmRlZmF1 bHRfY2Rmc19uZHZjOwo+ICsJCWhhbnRyb19hdjFfZGVmYXVsdF9jb2VmZl9wcm9icyhxdWFudGl6 YXRpb24tPmJhc2VfcV9pZHgsCj4gKwkJCQkJICAgICAgIGF2MV9kZWMtPmNkZnMpOwo+ICsJfSBl bHNlIHsKPiArCQlpZiAoZnJhbWUtPnByaW1hcnlfcmVmX2ZyYW1lIDwgMCB8fAo+ICsJCSAgICBm cmFtZS0+cHJpbWFyeV9yZWZfZnJhbWUgPj0gVjRMMl9BVjFfUkVGU19QRVJfRlJBTUUpCj4gKwkJ CXJldHVybjsKPiArCj4gKwkJaGFudHJvX2F2MV9nZXRfY2RmcyhjdHgsIGZyYW1lLT5yZWZfZnJh bWVfaWR4W2ZyYW1lLT5wcmltYXJ5X3JlZl9mcmFtZV0pOwo+ICsJfQo+ICsJaGFudHJvX2F2MV9z dG9yZV9jZGZzKGN0eCwgZnJhbWUtPnJlZnJlc2hfZnJhbWVfZmxhZ3MpOwo+ICsKPiArCW1lbWNw eShhdjFfZGVjLT5wcm9iX3RibC5jcHUsIGF2MV9kZWMtPmNkZnMsIHNpemVvZihzdHJ1Y3QgYXYx Y2RmcykpOwo+ICsKPiArCWlmIChmcmFtZV9pc19pbnRyYSkgewo+ICsJCWludCBtdl9vZmZzZXQg PSBvZmZzZXRvZihzdHJ1Y3QgYXYxY2RmcywgbXZfY2RmKTsKPiArCQkvKiBPdmVyd3JpdGUgTVYg Y29udGV4dCBhcmVhIHdpdGggaW50cmFiYyBNViBjb250ZXh0ICovCj4gKwkJbWVtY3B5KGF2MV9k ZWMtPnByb2JfdGJsLmNwdSArIG12X29mZnNldCwgYXYxX2RlYy0+Y2Rmc19uZHZjLAo+ICsJCSAg ICAgICBzaXplb2Yoc3RydWN0IG12Y2RmcykpOwo+ICsJfQo+ICt9Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vdmVyaXNpbGljb24vaGFudHJvX2F2MS5oIGIvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9oYW50cm9fYXYxLmgKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZDkxYzgxNGVlZmNiCj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmVyaXNpbGljb24vaGFudHJvX2F2MS5oCj4g QEAgLTAsMCArMSw2NCBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v bmx5ICovCj4gKwo+ICsjaWZuZGVmIF9IQU5UUk9fQVYxX0hfCj4gKyNkZWZpbmUgX0hBTlRST19B VjFfSF8KPiArCj4gKyNkZWZpbmUgQVYxX1BSSU1BUllfUkVGX05PTkUJNwo+ICsjZGVmaW5lIEFW MV9SRUZfU0NBTEVfU0hJRlQJMTQKPiArI2RlZmluZSBNQVhfRlJBTUVfRElTVEFOQ0UJMzEKPiAr I2RlZmluZSBBVjFERUNfTUFYX1BJQ19CVUZGRVJTCTI0Cj4gKwo+ICsjZGVmaW5lIFNDQUxFX05V TUVSQVRPUiA4Cj4gKyNkZWZpbmUgU1VQRVJSRVNfU0NBTEVfREVOT01JTkFUT1JfTUlOIChTQ0FM RV9OVU1FUkFUT1IgKyAxKQo+ICsKPiArI2RlZmluZSBSU19TQ0FMRV9TVUJQRUxfQklUUyAxNAo+ ICsjZGVmaW5lIFJTX1NDQUxFX1NVQlBFTF9NQVNLICgoMSA8PCBSU19TQ0FMRV9TVUJQRUxfQklU UykgLSAxKQo+ICsjZGVmaW5lIFJTX1NVQlBFTF9CSVRTIDYKPiArI2RlZmluZSBSU19TVUJQRUxf TUFTSyAoKDEgPDwgUlNfU1VCUEVMX0JJVFMpIC0gMSkKPiArI2RlZmluZSBSU19TQ0FMRV9FWFRS QV9CSVRTIChSU19TQ0FMRV9TVUJQRUxfQklUUyAtIFJTX1NVQlBFTF9CSVRTKQo+ICsjZGVmaW5l IFJTX1NDQUxFX0VYVFJBX09GRiAoMSA8PCAoUlNfU0NBTEVfRVhUUkFfQklUUyAtIDEpKQo+ICsK PiArLyoKPiArICogVGhlc2UgMyB2YWx1ZXMgYXJlbid0IGRlZmluZWQgZW51bSB2NGwyX2F2MV9z ZWdtZW50X2ZlYXR1cmUgYmVjYXVzZQo+ICsgKiB0aGV5IGFyZSBub3QgcGFydCBvZiB0aGUgc3Bl Y2lmaWNhdGlvbgo+ICsgKi8KPiArI2RlZmluZSBWNEwyX0FWMV9TRUdfTFZMX0FMVF9MRl9ZX0gJ Mgo+ICsjZGVmaW5lIFY0TDJfQVYxX1NFR19MVkxfQUxUX0xGX1UJMwo+ICsjZGVmaW5lIFY0TDJf QVYxX1NFR19MVkxfQUxUX0xGX1YJNAo+ICsKPiArI2RlZmluZSBJU19JTlRSQSh0eXBlKSAoKHR5 cGUgPT0gVjRMMl9BVjFfS0VZX0ZSQU1FKSB8fCAodHlwZSA9PSBWNEwyX0FWMV9JTlRSQV9PTkxZ X0ZSQU1FKSkKPiArCj4gKyNkZWZpbmUgTFNUX0JVRl9JRFggKFY0TDJfQVYxX1JFRl9MQVNUX0ZS QU1FIC0gVjRMMl9BVjFfUkVGX0xBU1RfRlJBTUUpCj4gKyNkZWZpbmUgTFNUMl9CVUZfSURYIChW NEwyX0FWMV9SRUZfTEFTVDJfRlJBTUUgLSBWNEwyX0FWMV9SRUZfTEFTVF9GUkFNRSkKPiArI2Rl ZmluZSBMU1QzX0JVRl9JRFggKFY0TDJfQVYxX1JFRl9MQVNUM19GUkFNRSAtIFY0TDJfQVYxX1JF Rl9MQVNUX0ZSQU1FKQo+ICsjZGVmaW5lIEdMRF9CVUZfSURYIChWNEwyX0FWMV9SRUZfR09MREVO X0ZSQU1FIC0gVjRMMl9BVjFfUkVGX0xBU1RfRlJBTUUpCj4gKyNkZWZpbmUgQldEX0JVRl9JRFgg KFY0TDJfQVYxX1JFRl9CV0RSRUZfRlJBTUUgLSBWNEwyX0FWMV9SRUZfTEFTVF9GUkFNRSkKPiAr I2RlZmluZSBBTFQyX0JVRl9JRFggKFY0TDJfQVYxX1JFRl9BTFRSRUYyX0ZSQU1FIC0gVjRMMl9B VjFfUkVGX0xBU1RfRlJBTUUpCj4gKyNkZWZpbmUgQUxUX0JVRl9JRFggKFY0TDJfQVYxX1JFRl9B TFRSRUZfRlJBTUUgLSBWNEwyX0FWMV9SRUZfTEFTVF9GUkFNRSkKPiArCj4gKyNkZWZpbmUgQVYx X0lOVkFMSURfSURYCQktMQo+ICsKPiAraW50IGhhbnRyb19hdjFfZ2V0X2ZyYW1lX2luZGV4KHN0 cnVjdCBoYW50cm9fY3R4ICpjdHgsIGludCByZWYpOwo+ICtpbnQgaGFudHJvX2F2MV9nZXRfb3Jk ZXJfaGludChzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LCBpbnQgcmVmKTsKPiAraW50IGhhbnRyb19h djFfZnJhbWVfcmVmKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIHU2NCB0aW1lc3RhbXApOwo+ICt2 b2lkIGhhbnRyb19hdjFfY2xlYW5fcmVmcyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KTsKPiArc2l6 ZV90IGhhbnRyb19hdjFfbHVtYV9zaXplKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpOwo+ICtzaXpl X3QgaGFudHJvX2F2MV9jaHJvbWFfc2l6ZShzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KTsKPiArdm9p ZCBoYW50cm9fYXYxX2V4aXQoc3RydWN0IGhhbnRyb19jdHggKmN0eCk7Cj4gK2ludCBoYW50cm9f YXYxX2luaXQoc3RydWN0IGhhbnRyb19jdHggKmN0eCk7Cj4gK2ludCBoYW50cm9fYXYxX3ByZXBh cmVfcnVuKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpOwo+ICt2b2lkIGhhbnRyb19hdjFfc2V0X2ds b2JhbF9tb2RlbChzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KTsKPiAraW50IGhhbnRyb19hdjFfdGls ZV9sb2cyKGludCB0YXJnZXQpOwo+ICtpbnQgaGFudHJvX2F2MV9nZXRfZGlzdChzdHJ1Y3QgaGFu dHJvX2N0eCAqY3R4LCBpbnQgYSwgaW50IGIpOwo+ICt2b2lkIGhhbnRyb19hdjFfc2V0X2ZyYW1l X3NpZ25fYmlhcyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KTsKPiArdm9pZCBoYW50cm9fYXYxX2lu aXRfc2NhbGluZ19mdW5jdGlvbihjb25zdCB1OCAqdmFsdWVzLCBjb25zdCB1OCAqc2NhbGluZywK PiArCQkJCSAgICAgIHU4IG51bV9wb2ludHMsIHU4ICpzY2FsaW5nX2x1dCk7Cj4gK3ZvaWQgaGFu dHJvX2F2MV9zZXRfdGlsZV9pbmZvKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpOwo+ICtib29sIGhh bnRyb19hdjFfaXNfbG9zc2xlc3Moc3RydWN0IGhhbnRyb19jdHggKmN0eCk7Cj4gK3ZvaWQgaGFu dHJvX2F2MV91cGRhdGVfcHJvYihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KTsKPiArdm9pZCBoYW50 cm9fYXYxX3NldF9wcm9iKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpOwo+ICsKPiAraW50IGhhbnRy b19hdjFfZ2V0X2hhcmR3YXJlX21jb21wX2ZpbHRfdHlwZShpbnQgaW50ZXJwb2xhdGlvbl9maWx0 ZXIpOwo+ICtpbnQgaGFudHJvX2F2MV9nZXRfaGFyZHdhcmVfdHhfbW9kZShlbnVtIHY0bDJfYXYx X3R4X21vZGUgdHhfbW9kZSk7Cj4gKwo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9yb2NrY2hpcF9hdjFfZW50cm9weW1vZGUuYyBiL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vdmVyaXNpbGljb24vaGFudHJvX2F2MV9lbnRyb3B5bW9kZS5j Cj4gc2ltaWxhcml0eSBpbmRleCA5OSUKPiByZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3BsYXRm b3JtL3ZlcmlzaWxpY29uL3JvY2tjaGlwX2F2MV9lbnRyb3B5bW9kZS5jCj4gcmVuYW1lIHRvIGRy aXZlcnMvbWVkaWEvcGxhdGZvcm0vdmVyaXNpbGljb24vaGFudHJvX2F2MV9lbnRyb3B5bW9kZS5j Cj4gaW5kZXggYjFhZTcyYWQ2NzVlLi40ZjdiZmVjNzM2NjggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9yb2NrY2hpcF9hdjFfZW50cm9weW1vZGUuYwo+ ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmVyaXNpbGljb24vaGFudHJvX2F2MV9lbnRy b3B5bW9kZS5jCj4gQEAgLTExLDcgKzExLDcgQEAKPiAgICAqLwo+ICAgCj4gICAjaW5jbHVkZSAi aGFudHJvLmgiCj4gLSNpbmNsdWRlICJyb2NrY2hpcF9hdjFfZW50cm9weW1vZGUuaCIKPiArI2lu Y2x1ZGUgImhhbnRyb19hdjFfZW50cm9weW1vZGUuaCIKPiAgIAo+ICAgI2RlZmluZSBBT01fSUNE RiBJQ0RGCj4gICAjZGVmaW5lIEFPTV9DREYyKGEwKSBBT01fSUNERihhMCkKPiBAQCAtNDE5NSw3 ICs0MTk1LDcgQEAgc3RhdGljIGNvbnN0IHUxNiBkZWZhdWx0X2JpdHNfY2RmW11bMTBdID0gewo+ ICAgCX0KPiAgIH07Cj4gICAKPiAtc3RhdGljIGludCByb2NrY2hpcF9hdjFfZ2V0X3FfY3R4KGlu dCBxKQo+ICtzdGF0aWMgaW50IGhhbnRyb19hdjFfZ2V0X3FfY3R4KGludCBxKQo+ICAgewo+ICAg CWlmIChxIDw9IDIwKQo+ICAgCQlyZXR1cm4gMDsKPiBAQCAtNDIwNiwxMCArNDIwNiwxMCBAQCBz dGF0aWMgaW50IHJvY2tjaGlwX2F2MV9nZXRfcV9jdHgoaW50IHEpCj4gICAJcmV0dXJuIDM7Cj4g ICB9Cj4gICAKPiAtdm9pZCByb2NrY2hpcF9hdjFfZGVmYXVsdF9jb2VmZl9wcm9icyh1MzIgYmFz ZV9xaW5kZXgsIHZvaWQgKnB0cikKPiArdm9pZCBoYW50cm9fYXYxX2RlZmF1bHRfY29lZmZfcHJv YnModTMyIGJhc2VfcWluZGV4LCB2b2lkICpwdHIpCj4gICB7Cj4gICAJc3RydWN0IGF2MWNkZnMg KmNkZnMgPSAoc3RydWN0IGF2MWNkZnMgKilwdHI7Cj4gLQljb25zdCBpbnQgaW5kZXggPSByb2Nr Y2hpcF9hdjFfZ2V0X3FfY3R4KGJhc2VfcWluZGV4KTsKPiArCWNvbnN0IGludCBpbmRleCA9IGhh bnRyb19hdjFfZ2V0X3FfY3R4KGJhc2VfcWluZGV4KTsKPiAgIAo+ICAgCW1lbWNweShjZGZzLT50 eGJfc2tpcF9jZGYsIGF2MV9kZWZhdWx0X3R4Yl9za2lwX2NkZnNbaW5kZXhdLAo+ICAgCSAgICAg ICBzaXplb2YoYXYxX2RlZmF1bHRfdHhiX3NraXBfY2Rmc1swXSkpOwo+IEBAIC00MjQwLDggKzQy NDAsOCBAQCB2b2lkIHJvY2tjaGlwX2F2MV9kZWZhdWx0X2NvZWZmX3Byb2JzKHUzMiBiYXNlX3Fp bmRleCwgdm9pZCAqcHRyKQo+ICAgCSAgICAgICBzaXplb2YoYXYxX2RlZmF1bHRfZW9iX211bHRp MTAyNF9jZGZzWzBdKSk7Cj4gICB9Cj4gICAKPiAtdm9pZCByb2NrY2hpcF9hdjFfc2V0X2RlZmF1 bHRfY2RmcyhzdHJ1Y3QgYXYxY2RmcyAqY2RmcywKPiAtCQkJCSAgIHN0cnVjdCBtdmNkZnMgKmNk ZnNfbmR2YykKPiArdm9pZCBoYW50cm9fYXYxX3NldF9kZWZhdWx0X2NkZnMoc3RydWN0IGF2MWNk ZnMgKmNkZnMsCj4gKwkJCQkgc3RydWN0IG12Y2RmcyAqY2Rmc19uZHZjKQo+ICAgewo+ICAgCW1l bWNweShjZGZzLT5wYXJ0aXRpb25fY2RmLCBkZWZhdWx0X3BhcnRpdGlvbl9jZGYsCj4gICAJICAg ICAgIHNpemVvZihjZGZzLT5wYXJ0aXRpb25fY2RmKSk7Cj4gQEAgLTQzOTgsNyArNDM5OCw3IEBA IHZvaWQgcm9ja2NoaXBfYXYxX3NldF9kZWZhdWx0X2NkZnMoc3RydWN0IGF2MWNkZnMgKmNkZnMs Cj4gICAJICAgICAgIHNpemVvZihjZGZzLT5jb21wb3VuZF9pZHhfY2RmKSk7Cj4gICB9Cj4gICAK PiAtdm9pZCByb2NrY2hpcF9hdjFfZ2V0X2NkZnMoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgdTMy IHJlZl9pZHgpCj4gK3ZvaWQgaGFudHJvX2F2MV9nZXRfY2RmcyhzdHJ1Y3QgaGFudHJvX2N0eCAq Y3R4LCB1MzIgcmVmX2lkeCkKPiAgIHsKPiAgIAlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfaHdfY3R4 ICphdjFfZGVjID0gJmN0eC0+YXYxX2RlYzsKPiAgIAo+IEBAIC00NDA2LDggKzQ0MDYsOCBAQCB2 b2lkIHJvY2tjaGlwX2F2MV9nZXRfY2RmcyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LCB1MzIgcmVm X2lkeCkKPiAgIAlhdjFfZGVjLT5jZGZzX25kdmMgPSAmYXYxX2RlYy0+Y2Rmc19sYXN0X25kdmNb cmVmX2lkeF07Cj4gICB9Cj4gICAKPiAtdm9pZCByb2NrY2hpcF9hdjFfc3RvcmVfY2RmcyhzdHJ1 Y3QgaGFudHJvX2N0eCAqY3R4LAo+IC0JCQkgICAgIHUzMiByZWZyZXNoX2ZyYW1lX2ZsYWdzKQo+ ICt2b2lkIGhhbnRyb19hdjFfc3RvcmVfY2RmcyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+ICsJ CQkgICB1MzIgcmVmcmVzaF9mcmFtZV9mbGFncykKPiAgIHsKPiAgIAlzdHJ1Y3QgaGFudHJvX2F2 MV9kZWNfaHdfY3R4ICphdjFfZGVjID0gJmN0eC0+YXYxX2RlYzsKPiAgIAlpbnQgaTsKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9yb2NrY2hpcF9hdjFf ZW50cm9weW1vZGUuaCBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmVyaXNpbGljb24vaGFudHJv X2F2MV9lbnRyb3B5bW9kZS5oCj4gc2ltaWxhcml0eSBpbmRleCA5NSUKPiByZW5hbWUgZnJvbSBk cml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZlcmlzaWxpY29uL3JvY2tjaGlwX2F2MV9lbnRyb3B5bW9k ZS5oCj4gcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmVyaXNpbGljb24vaGFudHJv X2F2MV9lbnRyb3B5bW9kZS5oCj4gaW5kZXggYmJmODQyNGM3ZDJjLi5hYmJjNjYwZWNjZTMgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9yb2NrY2hpcF9h djFfZW50cm9weW1vZGUuaAo+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmVyaXNpbGlj b24vaGFudHJvX2F2MV9lbnRyb3B5bW9kZS5oCj4gQEAgLTEsNyArMSw3IEBACj4gICAvKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCj4gICAKPiAtI2lmbmRlZiBfUk9D S0NISVBfQVYxX0VOVFJPUFlNT0RFX0hfCj4gLSNkZWZpbmUgX1JPQ0tDSElQX0FWMV9FTlRST1BZ TU9ERV9IXwo+ICsjaWZuZGVmIF9IQU5UUk9fQVYxX0VOVFJPUFlNT0RFX0hfCj4gKyNkZWZpbmUg X0hBTlRST19BVjFfRU5UUk9QWU1PREVfSF8KPiAgIAo+ICAgI2luY2x1ZGUgPGxpbnV4L3R5cGVz Lmg+Cj4gICAKPiBAQCAtMjYyLDExICsyNjIsMTEgQEAgc3RydWN0IGF2MWNkZnMgewo+ICAgCXUx NiBkdW1teTNbMTZdOwo+ICAgfTsKPiAgIAo+IC12b2lkIHJvY2tjaGlwX2F2MV9zdG9yZV9jZGZz KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsCj4gLQkJCSAgICAgdTMyIHJlZnJlc2hfZnJhbWVfZmxh Z3MpOwo+IC12b2lkIHJvY2tjaGlwX2F2MV9nZXRfY2RmcyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4 LCB1MzIgcmVmX2lkeCk7Cj4gLXZvaWQgcm9ja2NoaXBfYXYxX3NldF9kZWZhdWx0X2NkZnMoc3Ry dWN0IGF2MWNkZnMgKmNkZnMsCj4gLQkJCQkgICBzdHJ1Y3QgbXZjZGZzICpjZGZzX25kdmMpOwo+ IC12b2lkIHJvY2tjaGlwX2F2MV9kZWZhdWx0X2NvZWZmX3Byb2JzKHUzMiBiYXNlX3FpbmRleCwg dm9pZCAqcHRyKTsKPiArdm9pZCBoYW50cm9fYXYxX3N0b3JlX2NkZnMoc3RydWN0IGhhbnRyb19j dHggKmN0eCwKPiArCQkJICAgdTMyIHJlZnJlc2hfZnJhbWVfZmxhZ3MpOwo+ICt2b2lkIGhhbnRy b19hdjFfZ2V0X2NkZnMoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgdTMyIHJlZl9pZHgpOwo+ICt2 b2lkIGhhbnRyb19hdjFfc2V0X2RlZmF1bHRfY2RmcyhzdHJ1Y3QgYXYxY2RmcyAqY2RmcywKPiAr CQkJCSBzdHJ1Y3QgbXZjZGZzICpjZGZzX25kdmMpOwo+ICt2b2lkIGhhbnRyb19hdjFfZGVmYXVs dF9jb2VmZl9wcm9icyh1MzIgYmFzZV9xaW5kZXgsIHZvaWQgKnB0cik7Cj4gICAKPiAtI2VuZGlm IC8qIF9ST0NLQ0hJUF9BVjFfRU5UUk9QWU1PREVfSF8gKi8KPiArI2VuZGlmIC8qIF9IQU5UUk9f QVYxX0VOVFJPUFlNT0RFX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZv cm0vdmVyaXNpbGljb24vcm9ja2NoaXBfYXYxX2ZpbG1ncmFpbi5jIGIvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS92ZXJpc2lsaWNvbi9oYW50cm9fYXYxX2ZpbG1ncmFpbi5jCj4gc2ltaWxhcml0eSBp bmRleCA4NSUKPiByZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZlcmlzaWxpY29u L3JvY2tjaGlwX2F2MV9maWxtZ3JhaW4uYwo+IHJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3BsYXRm b3JtL3ZlcmlzaWxpY29uL2hhbnRyb19hdjFfZmlsbWdyYWluLmMKPiBpbmRleCBmNjRkZWE3OTdl ZmYuLmExZmM0MGUwMjE4YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Zl cmlzaWxpY29uL3JvY2tjaGlwX2F2MV9maWxtZ3JhaW4uYwo+ICsrKyBiL2RyaXZlcnMvbWVkaWEv cGxhdGZvcm0vdmVyaXNpbGljb24vaGFudHJvX2F2MV9maWxtZ3JhaW4uYwo+IEBAIC0xLDYgKzEs NiBAQAo+ICAgLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSBPUiBBcGFj aGUtMi4wCj4gICAKPiAtI2luY2x1ZGUgInJvY2tjaGlwX2F2MV9maWxtZ3JhaW4uaCIKPiArI2lu Y2x1ZGUgImhhbnRyb19hdjFfZmlsbWdyYWluLmgiCj4gICAKPiAgIHN0YXRpYyBjb25zdCBzMzIg Z2F1c3NpYW5fc2VxdWVuY2VbMjA0OF0gPSB7Cj4gICAJNTYsIDU2OCwgLTE4MCwgMTcyLCAxMjQs IC04NCwgMTcyLCAtNjQsIC05MDAsIDI0LCA4MjAsCj4gQEAgLTIwNCw4ICsyMDQsOCBAQCBzdGF0 aWMgaW5saW5lIHMzMiByb3VuZF9wb3dlcl9vZl90d28oY29uc3QgczMyIHZhbCwgczMyIG4pCj4g ICAJcmV0dXJuICh2YWwgKyBhKSA+PiBuOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lkIHJvY2tj aGlwX2F2MV9pbml0X3JhbmRvbV9nZW5lcmF0b3IodTggbHVtYV9udW0sIHUxNiBzZWVkLAo+IC0J CQkJCSAgICAgICB1MTYgKnJhbmRvbV9yZWdpc3RlcikKPiArc3RhdGljIHZvaWQgaGFudHJvX2F2 MV9pbml0X3JhbmRvbV9nZW5lcmF0b3IodTggbHVtYV9udW0sIHUxNiBzZWVkLAo+ICsJCQkJCSAg ICAgdTE2ICpyYW5kb21fcmVnaXN0ZXIpCj4gICB7Cj4gICAJdTE2IHJhbmRvbV9yZWcgPSBzZWVk Owo+ICAgCj4gQEAgLTIxNCw3ICsyMTQsNyBAQCBzdGF0aWMgdm9pZCByb2NrY2hpcF9hdjFfaW5p dF9yYW5kb21fZ2VuZXJhdG9yKHU4IGx1bWFfbnVtLCB1MTYgc2VlZCwKPiAgIAkqcmFuZG9tX3Jl Z2lzdGVyID0gcmFuZG9tX3JlZzsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW5saW5lIHZvaWQgcm9j a2NoaXBfYXYxX3VwZGF0ZV9yYW5kb21fcmVnaXN0ZXIodTE2ICpyYW5kb21fcmVnaXN0ZXIpCj4g K3N0YXRpYyBpbmxpbmUgdm9pZCBoYW50cm9fYXYxX3VwZGF0ZV9yYW5kb21fcmVnaXN0ZXIodTE2 ICpyYW5kb21fcmVnaXN0ZXIpCj4gICB7Cj4gICAJdTE2IGJpdDsKPiAgIAl1MTYgcmFuZG9tX3Jl ZyA9ICpyYW5kb21fcmVnaXN0ZXI7Cj4gQEAgLTIyNCwyMSArMjI0LDIwIEBAIHN0YXRpYyBpbmxp bmUgdm9pZCByb2NrY2hpcF9hdjFfdXBkYXRlX3JhbmRvbV9yZWdpc3Rlcih1MTYgKnJhbmRvbV9y ZWdpc3RlcikKPiAgIAkqcmFuZG9tX3JlZ2lzdGVyID0gKHJhbmRvbV9yZWcgPj4gMSkgfCAoYml0 IDw8IDE1KTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW5saW5lIHMzMiByb2NrY2hpcF9hdjFfZ2V0 X3JhbmRvbV9udW1iZXIodTE2IHJhbmRvbV9yZWdpc3RlcikKPiArc3RhdGljIGlubGluZSBzMzIg aGFudHJvX2F2MV9nZXRfcmFuZG9tX251bWJlcih1MTYgcmFuZG9tX3JlZ2lzdGVyKQo+ICAgewo+ ICAgCXJldHVybiAocmFuZG9tX3JlZ2lzdGVyID4+IDUpICYgKCgxIDw8IDExKSAtIDEpOwo+ICAg fQo+ICAgCj4gLXZvaWQgcm9ja2NoaXBfYXYxX2dlbmVyYXRlX2x1bWFfZ3JhaW5fYmxvY2soczMy ICgqbHVtYV9ncmFpbl9ibG9jaylbNzNdWzgyXSwKPiAtCQkJCQkgICAgczMyIGJpdGRlcHRoLAo+ IC0JCQkJCSAgICB1OCBudW1feV9wb2ludHMsCj4gLQkJCQkJICAgIHMzMiBncmFpbl9zY2FsZV9z aGlmdCwKPiAtCQkJCQkgICAgczMyIGFyX2NvZWZmX2xhZywKPiAtCQkJCQkgICAgczMyICgqYXJf Y29lZmZzX3kpWzI0XSwKPiAtCQkJCQkgICAgczMyIGFyX2NvZWZmX3NoaWZ0LAo+IC0JCQkJCSAg ICBzMzIgZ3JhaW5fbWluLAo+IC0JCQkJCSAgICBzMzIgZ3JhaW5fbWF4LAo+IC0JCQkJCSAgICB1 MTYgcmFuZG9tX3NlZWQpCj4gK3ZvaWQgaGFudHJvX2F2MV9nZW5lcmF0ZV9sdW1hX2dyYWluX2Js b2NrKHN0cnVjdCBoYW50cm9fYXYxX2NvZWZmc19ncmFpbl9ibG9jayAqY29lZmZzLAo+ICsJCQkJ CSAgczMyIGJpdGRlcHRoLAo+ICsJCQkJCSAgdTggbnVtX3lfcG9pbnRzLAo+ICsJCQkJCSAgczMy IGdyYWluX3NjYWxlX3NoaWZ0LAo+ICsJCQkJCSAgczMyIGFyX2NvZWZmX2xhZywKPiArCQkJCQkg IHMzMiBhcl9jb2VmZl9zaGlmdCwKPiArCQkJCQkgIHMzMiBncmFpbl9taW4sCj4gKwkJCQkJICBz MzIgZ3JhaW5fbWF4LAo+ICsJCQkJCSAgdTE2IHJhbmRvbV9zZWVkKQo+ICAgewo+ICAgCXMzMiBn YXVzc19zZWNfc2hpZnQgPSAxMiAtIGJpdGRlcHRoICsgZ3JhaW5fc2NhbGVfc2hpZnQ7Cj4gICAJ dTE2IGdyYWluX3JhbmRvbV9yZWdpc3RlciA9IHJhbmRvbV9zZWVkOwo+IEBAIC0yNDcsMTUgKzI0 NiwxNSBAQCB2b2lkIHJvY2tjaGlwX2F2MV9nZW5lcmF0ZV9sdW1hX2dyYWluX2Jsb2NrKHMzMiAo Kmx1bWFfZ3JhaW5fYmxvY2spWzczXVs4Ml0sCj4gICAJZm9yIChpID0gMDsgaSA8IDczOyBpKysp IHsKPiAgIAkJZm9yIChqID0gMDsgaiA8IDgyOyBqKyspIHsKPiAgIAkJCWlmIChudW1feV9wb2lu dHMgPiAwKSB7Cj4gLQkJCQlyb2NrY2hpcF9hdjFfdXBkYXRlX3JhbmRvbV9yZWdpc3Rlcgo+ICsJ CQkJaGFudHJvX2F2MV91cGRhdGVfcmFuZG9tX3JlZ2lzdGVyCj4gICAJCQkJICAgICgmZ3JhaW5f cmFuZG9tX3JlZ2lzdGVyKTsKPiAtCQkJCSgqbHVtYV9ncmFpbl9ibG9jaylbaV1bal0gPQo+ICsJ CQkJY29lZmZzLT5sdW1hX2dyYWluX2Jsb2NrW2ldW2pdID0KPiAgIAkJCQkgICAgcm91bmRfcG93 ZXJfb2ZfdHdvKGdhdXNzaWFuX3NlcXVlbmNlCj4gLQkJCQkJICAgICBbcm9ja2NoaXBfYXYxX2dl dF9yYW5kb21fbnVtYmVyCj4gKwkJCQkJICAgICBbaGFudHJvX2F2MV9nZXRfcmFuZG9tX251bWJl cgo+ICAgCQkJCQkgICAgICAoZ3JhaW5fcmFuZG9tX3JlZ2lzdGVyKV0sCj4gICAJCQkJCSAgICAg Z2F1c3Nfc2VjX3NoaWZ0KTsKPiAgIAkJCX0gZWxzZSB7Cj4gLQkJCQkoKmx1bWFfZ3JhaW5fYmxv Y2spW2ldW2pdID0gMDsKPiArCQkJCWNvZWZmcy0+bHVtYV9ncmFpbl9ibG9ja1tpXVtqXSA9IDA7 Cj4gICAJCQl9Cj4gICAJCX0KPiAgIAl9Cj4gQEAgLTI3Miw3MiArMjcxLDY4IEBAIHZvaWQgcm9j a2NoaXBfYXYxX2dlbmVyYXRlX2x1bWFfZ3JhaW5fYmxvY2soczMyICgqbHVtYV9ncmFpbl9ibG9j aylbNzNdWzgyXSwKPiAgIAkJCQkgICAgIGRlbHRhY29sIDw9IGFyX2NvZWZmX2xhZzsgZGVsdGFj b2wrKykgewo+ICAgCQkJCQlpZiAoZGVsdGFyb3cgPT0gMCAmJiBkZWx0YWNvbCA9PSAwKQo+ICAg CQkJCQkJYnJlYWs7Cj4gLQkJCQkJd3N1bSA9IHdzdW0gKyAoKmFyX2NvZWZmc195KVtwb3NdICoK PiAtCQkJCQkgICAgKCpsdW1hX2dyYWluX2Jsb2NrKVtpICsgZGVsdGFyb3ddW2ogKyBkZWx0YWNv bF07Cj4gKwkJCQkJd3N1bSA9IHdzdW0gKyBjb2VmZnMtPmFyX2NvZWZmc195W3Bvc10gKgo+ICsJ CQkJCSAgICBjb2VmZnMtPmx1bWFfZ3JhaW5fYmxvY2tbaSArIGRlbHRhcm93XVtqICsgZGVsdGFj b2xdOwo+ICAgCQkJCQkrK3BvczsKPiAgIAkJCQl9Cj4gICAJCQl9Cj4gLQkJCSgqbHVtYV9ncmFp bl9ibG9jaylbaV1bal0gPQo+IC0JCQkJY2xhbXAoKCpsdW1hX2dyYWluX2Jsb2NrKVtpXVtqXSAr Cj4gKwkJCWNvZWZmcy0+bHVtYV9ncmFpbl9ibG9ja1tpXVtqXSA9Cj4gKwkJCQljbGFtcChjb2Vm ZnMtPmx1bWFfZ3JhaW5fYmxvY2tbaV1bal0gKwo+ICAgCQkJCSAgICAgIHJvdW5kX3Bvd2VyX29m X3R3byh3c3VtLCBhcl9jb2VmZl9zaGlmdCksCj4gICAJCQkJICAgICAgZ3JhaW5fbWluLCBncmFp bl9tYXgpOwo+ICAgCQl9Cj4gICB9Cj4gICAKPiAgIC8vIENhbGN1bGF0ZSBjaHJvbWEgZ3JhaW4g bm9pc2Ugb25jZSBwZXIgZnJhbWUKPiAtdm9pZCByb2NrY2hpcF9hdjFfZ2VuZXJhdGVfY2hyb21h X2dyYWluX2Jsb2NrKHMzMiAoKmx1bWFfZ3JhaW5fYmxvY2spWzczXVs4Ml0sCj4gLQkJCQkJICAg ICAgczMyICgqY2JfZ3JhaW5fYmxvY2spWzM4XVs0NF0sCj4gLQkJCQkJICAgICAgczMyICgqY3Jf Z3JhaW5fYmxvY2spWzM4XVs0NF0sCj4gLQkJCQkJICAgICAgczMyIGJpdGRlcHRoLAo+IC0JCQkJ CSAgICAgIHU4IG51bV95X3BvaW50cywKPiAtCQkJCQkgICAgICB1OCBudW1fY2JfcG9pbnRzLAo+ IC0JCQkJCSAgICAgIHU4IG51bV9jcl9wb2ludHMsCj4gLQkJCQkJICAgICAgczMyIGdyYWluX3Nj YWxlX3NoaWZ0LAo+IC0JCQkJCSAgICAgIHMzMiBhcl9jb2VmZl9sYWcsCj4gLQkJCQkJICAgICAg czMyICgqYXJfY29lZmZzX2NiKVsyNV0sCj4gLQkJCQkJICAgICAgczMyICgqYXJfY29lZmZzX2Ny KVsyNV0sCj4gLQkJCQkJICAgICAgczMyIGFyX2NvZWZmX3NoaWZ0LAo+IC0JCQkJCSAgICAgIHMz MiBncmFpbl9taW4sCj4gLQkJCQkJICAgICAgczMyIGdyYWluX21heCwKPiAtCQkJCQkgICAgICB1 OCBjaHJvbWFfc2NhbGluZ19mcm9tX2x1bWEsCj4gLQkJCQkJICAgICAgdTE2IHJhbmRvbV9zZWVk KQo+ICt2b2lkIGhhbnRyb19hdjFfZ2VuZXJhdGVfY2hyb21hX2dyYWluX2Jsb2NrKHN0cnVjdCBo YW50cm9fYXYxX2NvZWZmc19ncmFpbl9ibG9jayAqY29lZmZzLAo+ICsJCQkJCSAgICBzMzIgYml0 ZGVwdGgsCj4gKwkJCQkJICAgIHU4IG51bV95X3BvaW50cywKPiArCQkJCQkgICAgdTggbnVtX2Ni X3BvaW50cywKPiArCQkJCQkgICAgdTggbnVtX2NyX3BvaW50cywKPiArCQkJCQkgICAgczMyIGdy YWluX3NjYWxlX3NoaWZ0LAo+ICsJCQkJCSAgICBzMzIgYXJfY29lZmZfbGFnLAo+ICsJCQkJCSAg ICBzMzIgYXJfY29lZmZfc2hpZnQsCj4gKwkJCQkJICAgIHMzMiBncmFpbl9taW4sCj4gKwkJCQkJ ICAgIHMzMiBncmFpbl9tYXgsCj4gKwkJCQkJICAgIHU4IGNocm9tYV9zY2FsaW5nX2Zyb21fbHVt YSwKPiArCQkJCQkgICAgdTE2IHJhbmRvbV9zZWVkKQo+ICAgewo+ICAgCXMzMiBnYXVzc19zZWNf c2hpZnQgPSAxMiAtIGJpdGRlcHRoICsgZ3JhaW5fc2NhbGVfc2hpZnQ7Cj4gICAJdTE2IGdyYWlu X3JhbmRvbV9yZWdpc3RlciA9IDA7Cj4gICAJczMyIGksIGo7Cj4gICAKPiAtCXJvY2tjaGlwX2F2 MV9pbml0X3JhbmRvbV9nZW5lcmF0b3IoNywgcmFuZG9tX3NlZWQsCj4gLQkJCQkJICAgJmdyYWlu X3JhbmRvbV9yZWdpc3Rlcik7Cj4gKwloYW50cm9fYXYxX2luaXRfcmFuZG9tX2dlbmVyYXRvcig3 LCByYW5kb21fc2VlZCwKPiArCQkJCQkgJmdyYWluX3JhbmRvbV9yZWdpc3Rlcik7Cj4gICAJZm9y IChpID0gMDsgaSA8IDM4OyBpKyspIHsKPiAgIAkJZm9yIChqID0gMDsgaiA8IDQ0OyBqKyspIHsK PiAgIAkJCWlmIChudW1fY2JfcG9pbnRzIHx8IGNocm9tYV9zY2FsaW5nX2Zyb21fbHVtYSkgewo+ IC0JCQkJcm9ja2NoaXBfYXYxX3VwZGF0ZV9yYW5kb21fcmVnaXN0ZXIKPiArCQkJCWhhbnRyb19h djFfdXBkYXRlX3JhbmRvbV9yZWdpc3Rlcgo+ICAgCQkJCSAgICAoJmdyYWluX3JhbmRvbV9yZWdp c3Rlcik7Cj4gLQkJCQkoKmNiX2dyYWluX2Jsb2NrKVtpXVtqXSA9Cj4gKwkJCQljb2VmZnMtPmNi X2dyYWluX2Jsb2NrW2ldW2pdID0KPiAgIAkJCQkgICAgcm91bmRfcG93ZXJfb2ZfdHdvKGdhdXNz aWFuX3NlcXVlbmNlCj4gLQkJCQkJICAgICBbcm9ja2NoaXBfYXYxX2dldF9yYW5kb21fbnVtYmVy Cj4gKwkJCQkJICAgICBbaGFudHJvX2F2MV9nZXRfcmFuZG9tX251bWJlcgo+ICAgCQkJCQkgICAg ICAoZ3JhaW5fcmFuZG9tX3JlZ2lzdGVyKV0sCj4gICAJCQkJCSAgICAgZ2F1c3Nfc2VjX3NoaWZ0 KTsKPiAgIAkJCX0gZWxzZSB7Cj4gLQkJCQkoKmNiX2dyYWluX2Jsb2NrKVtpXVtqXSA9IDA7Cj4g KwkJCQljb2VmZnMtPmNiX2dyYWluX2Jsb2NrW2ldW2pdID0gMDsKPiAgIAkJCX0KPiAgIAkJfQo+ ICAgCX0KPiAgIAo+IC0Jcm9ja2NoaXBfYXYxX2luaXRfcmFuZG9tX2dlbmVyYXRvcigxMSwgcmFu ZG9tX3NlZWQsCj4gLQkJCQkJICAgJmdyYWluX3JhbmRvbV9yZWdpc3Rlcik7Cj4gKwloYW50cm9f YXYxX2luaXRfcmFuZG9tX2dlbmVyYXRvcigxMSwgcmFuZG9tX3NlZWQsCj4gKwkJCQkJICZncmFp bl9yYW5kb21fcmVnaXN0ZXIpOwo+ICAgCWZvciAoaSA9IDA7IGkgPCAzODsgaSsrKSB7Cj4gICAJ CWZvciAoaiA9IDA7IGogPCA0NDsgaisrKSB7Cj4gICAJCQlpZiAobnVtX2NyX3BvaW50cyB8fCBj aHJvbWFfc2NhbGluZ19mcm9tX2x1bWEpIHsKPiAtCQkJCXJvY2tjaGlwX2F2MV91cGRhdGVfcmFu ZG9tX3JlZ2lzdGVyCj4gKwkJCQloYW50cm9fYXYxX3VwZGF0ZV9yYW5kb21fcmVnaXN0ZXIKPiAg IAkJCQkgICAgKCZncmFpbl9yYW5kb21fcmVnaXN0ZXIpOwo+IC0JCQkJKCpjcl9ncmFpbl9ibG9j aylbaV1bal0gPQo+ICsJCQkJY29lZmZzLT5jcl9ncmFpbl9ibG9ja1tpXVtqXSA9Cj4gICAJCQkJ ICAgIHJvdW5kX3Bvd2VyX29mX3R3byhnYXVzc2lhbl9zZXF1ZW5jZQo+IC0JCQkJCSAgICAgW3Jv Y2tjaGlwX2F2MV9nZXRfcmFuZG9tX251bWJlcgo+ICsJCQkJCSAgICAgW2hhbnRyb19hdjFfZ2V0 X3JhbmRvbV9udW1iZXIKPiAgIAkJCQkJICAgICAgKGdyYWluX3JhbmRvbV9yZWdpc3RlcildLAo+ ICAgCQkJCQkgICAgIGdhdXNzX3NlY19zaGlmdCk7Cj4gICAJCQl9IGVsc2Ugewo+IC0JCQkJKCpj cl9ncmFpbl9ibG9jaylbaV1bal0gPSAwOwo+ICsJCQkJY29lZmZzLT5jcl9ncmFpbl9ibG9ja1tp XVtqXSA9IDA7Cj4gICAJCQl9Cj4gICAJCX0KPiAgIAl9Cj4gQEAgLTM1NSwxMiArMzUwLDEyIEBA IHZvaWQgcm9ja2NoaXBfYXYxX2dlbmVyYXRlX2Nocm9tYV9ncmFpbl9ibG9jayhzMzIgKCpsdW1h X2dyYWluX2Jsb2NrKVs3M11bODJdLAo+ICAgCQkJCSAgICAgZGVsdGFjb2wgPD0gYXJfY29lZmZf bGFnOyBkZWx0YWNvbCsrKSB7Cj4gICAJCQkJCWlmIChkZWx0YXJvdyA9PSAwICYmIGRlbHRhY29s ID09IDApCj4gICAJCQkJCQlicmVhazsKPiAtCQkJCQl3c3VtX2NiID0gd3N1bV9jYiArICgqYXJf Y29lZmZzX2NiKVtwb3NdICoKPiAtCQkJCQkgICAgKCpjYl9ncmFpbl9ibG9jaylbaSArIGRlbHRh cm93XVtqICsgZGVsdGFjb2xdOwo+ICsJCQkJCXdzdW1fY2IgPSB3c3VtX2NiICsgY29lZmZzLT5h cl9jb2VmZnNfY2JbcG9zXSAqCj4gKwkJCQkJICAgIGNvZWZmcy0+Y2JfZ3JhaW5fYmxvY2tbaSAr IGRlbHRhcm93XVtqICsgZGVsdGFjb2xdOwo+ICAgCQkJCQl3c3VtX2NyID0KPiAgIAkJCQkJICAg IHdzdW1fY3IgKwo+IC0JCQkJCSAgICAoKmFyX2NvZWZmc19jcilbcG9zXSAqCj4gLQkJCQkJICAg ICgqY3JfZ3JhaW5fYmxvY2spW2kgKyBkZWx0YXJvd11baiArIGRlbHRhY29sXTsKPiArCQkJCQkg ICAgY29lZmZzLT5hcl9jb2VmZnNfY3JbcG9zXSAqCj4gKwkJCQkJICAgIGNvZWZmcy0+Y3JfZ3Jh aW5fYmxvY2tbaSArIGRlbHRhcm93XVtqICsgZGVsdGFjb2xdOwo+ICAgCQkJCQkrK3BvczsKPiAg IAkJCQl9Cj4gICAJCQl9Cj4gQEAgLTM3MSwyOCArMzY2LDI4IEBAIHZvaWQgcm9ja2NoaXBfYXYx X2dlbmVyYXRlX2Nocm9tYV9ncmFpbl9ibG9jayhzMzIgKCpsdW1hX2dyYWluX2Jsb2NrKVs3M11b ODJdLAo+ICAgCQkJCXMzMiBsdW1hX2Nvb3JkX3ggPSAoaiA8PCAxKSAtIDM7Cj4gICAKPiAgIAkJ CQlhdl9sdW1hICs9Cj4gLQkJCQkgICAgKCpsdW1hX2dyYWluX2Jsb2NrKVtsdW1hX2Nvb3JkX3ld W2x1bWFfY29vcmRfeF07Cj4gKwkJCQkgICAgY29lZmZzLT5sdW1hX2dyYWluX2Jsb2NrW2x1bWFf Y29vcmRfeV1bbHVtYV9jb29yZF94XTsKPiAgIAkJCQlhdl9sdW1hICs9Cj4gLQkJCQkgICAgKCps dW1hX2dyYWluX2Jsb2NrKVtsdW1hX2Nvb3JkX3ldW2x1bWFfY29vcmRfeCArIDFdOwo+ICsJCQkJ ICAgIGNvZWZmcy0+bHVtYV9ncmFpbl9ibG9ja1tsdW1hX2Nvb3JkX3ldW2x1bWFfY29vcmRfeCAr IDFdOwo+ICAgCQkJCWF2X2x1bWEgKz0KPiAtCQkJCSAgICAoKmx1bWFfZ3JhaW5fYmxvY2spW2x1 bWFfY29vcmRfeSArIDFdW2x1bWFfY29vcmRfeF07Cj4gKwkJCQkgICAgY29lZmZzLT5sdW1hX2dy YWluX2Jsb2NrW2x1bWFfY29vcmRfeSArIDFdW2x1bWFfY29vcmRfeF07Cj4gICAJCQkJYXZfbHVt YSArPQo+IC0JCQkJICAgICgqbHVtYV9ncmFpbl9ibG9jaylbKGx1bWFfY29vcmRfeSArIDEpXVts dW1hX2Nvb3JkX3ggKyAxXTsKPiArCQkJCSAgICBjb2VmZnMtPmx1bWFfZ3JhaW5fYmxvY2tbKGx1 bWFfY29vcmRfeSArIDEpXVtsdW1hX2Nvb3JkX3ggKyAxXTsKPiAgIAkJCQlhdl9sdW1hID0gcm91 bmRfcG93ZXJfb2ZfdHdvKGF2X2x1bWEsIDIpOwo+ICAgCj4gLQkJCQl3c3VtX2NiID0gd3N1bV9j YiArICgqYXJfY29lZmZzX2NiKVtwb3NdICogYXZfbHVtYTsKPiAtCQkJCXdzdW1fY3IgPSB3c3Vt X2NyICsgKCphcl9jb2VmZnNfY3IpW3Bvc10gKiBhdl9sdW1hOwo+ICsJCQkJd3N1bV9jYiA9IHdz dW1fY2IgKyBjb2VmZnMtPmFyX2NvZWZmc19jYltwb3NdICogYXZfbHVtYTsKPiArCQkJCXdzdW1f Y3IgPSB3c3VtX2NyICsgY29lZmZzLT5hcl9jb2VmZnNfY3JbcG9zXSAqIGF2X2x1bWE7Cj4gICAJ CQl9Cj4gICAKPiAgIAkJCWlmIChudW1fY2JfcG9pbnRzIHx8IGNocm9tYV9zY2FsaW5nX2Zyb21f bHVtYSkgewo+IC0JCQkJKCpjYl9ncmFpbl9ibG9jaylbaV1bal0gPQo+IC0JCQkJICAgIGNsYW1w KCgqY2JfZ3JhaW5fYmxvY2spW2ldW2pdICsKPiArCQkJCWNvZWZmcy0+Y2JfZ3JhaW5fYmxvY2tb aV1bal0gPQo+ICsJCQkJICAgIGNsYW1wKGNvZWZmcy0+Y2JfZ3JhaW5fYmxvY2tbaV1bal0gKwo+ ICAgCQkJCQkgIHJvdW5kX3Bvd2VyX29mX3R3byh3c3VtX2NiLCBhcl9jb2VmZl9zaGlmdCksCj4g ICAJCQkJCSAgZ3JhaW5fbWluLCBncmFpbl9tYXgpOwo+ICAgCQkJfQo+ICAgCQkJaWYgKG51bV9j cl9wb2ludHMgfHwgY2hyb21hX3NjYWxpbmdfZnJvbV9sdW1hKSB7Cj4gLQkJCQkoKmNyX2dyYWlu X2Jsb2NrKVtpXVtqXSA9Cj4gLQkJCQkgICAgY2xhbXAoKCpjcl9ncmFpbl9ibG9jaylbaV1bal0g Kwo+ICsJCQkJY29lZmZzLT5jcl9ncmFpbl9ibG9ja1tpXVtqXSA9Cj4gKwkJCQkgICAgY2xhbXAo Y29lZmZzLT5jcl9ncmFpbl9ibG9ja1tpXVtqXSArCj4gICAJCQkJCSAgcm91bmRfcG93ZXJfb2Zf dHdvKHdzdW1fY3IsIGFyX2NvZWZmX3NoaWZ0KSwKPiAgIAkJCQkJICBncmFpbl9taW4sIGdyYWlu X21heCk7Cj4gICAJCQl9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmVy aXNpbGljb24vaGFudHJvX2F2MV9maWxtZ3JhaW4uaCBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0v dmVyaXNpbGljb24vaGFudHJvX2F2MV9maWxtZ3JhaW4uaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5kODBiZTdjMDExYTAKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9oYW50cm9fYXYxX2ZpbG1ncmFp bi5oCj4gQEAgLTAsMCArMSw0OCBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMC1vbmx5ICovCj4gKwo+ICsjaWZuZGVmIF9IQU5UUk9fQVYxX0ZJTE1HUkFJTl9IXwo+ICsj ZGVmaW5lIF9IQU5UUk9fQVYxX0ZJTE1HUkFJTl9IXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+Cj4gKwo+ICtzdHJ1Y3QgaGFudHJvX2F2MV9maWxtX2dyYWluIHsKPiArCXU4IHNjYWxp bmdfbHV0X3lbMjU2XTsKPiArCXU4IHNjYWxpbmdfbHV0X2NiWzI1Nl07Cj4gKwl1OCBzY2FsaW5n X2x1dF9jclsyNTZdOwo+ICsJczE2IGNyb3BwZWRfbHVtYV9ncmFpbl9ibG9ja1s0MDk2XTsKPiAr CXMxNiBjcm9wcGVkX2Nocm9tYV9ncmFpbl9ibG9ja1sxMDI0ICogMl07Cj4gK307Cj4gKwo+ICtz dHJ1Y3QgaGFudHJvX2F2MV9jb2VmZnNfZ3JhaW5fYmxvY2sgewo+ICsJczMyIGFyX2NvZWZmc195 WzI0XTsKPiArCXMzMiBhcl9jb2VmZnNfY2JbMjVdOwo+ICsJczMyIGFyX2NvZWZmc19jclsyNV07 Cj4gKwlzMzIgbHVtYV9ncmFpbl9ibG9ja1s3M11bODJdOwo+ICsJczMyIGNiX2dyYWluX2Jsb2Nr WzM4XVs0NF07Cj4gKwlzMzIgY3JfZ3JhaW5fYmxvY2tbMzhdWzQ0XTsKPiArfTsKPiArCj4gK3Zv aWQgaGFudHJvX2F2MV9nZW5lcmF0ZV9sdW1hX2dyYWluX2Jsb2NrKHN0cnVjdCBoYW50cm9fYXYx X2NvZWZmc19ncmFpbl9ibG9jayAqY29lZmZzLAo+ICsJCQkJCSAgczMyIGJpdGRlcHRoLAo+ICsJ CQkJCSAgdTggbnVtX3lfcG9pbnRzLAo+ICsJCQkJCSAgczMyIGdyYWluX3NjYWxlX3NoaWZ0LAo+ ICsJCQkJCSAgczMyIGFyX2NvZWZmX2xhZywKPiArCQkJCQkgIHMzMiBhcl9jb2VmZl9zaGlmdCwK PiArCQkJCQkgIHMzMiBncmFpbl9taW4sCj4gKwkJCQkJICBzMzIgZ3JhaW5fbWF4LAo+ICsJCQkJ CSAgdTE2IHJhbmRvbV9zZWVkKTsKPiArCj4gK3ZvaWQgaGFudHJvX2F2MV9nZW5lcmF0ZV9jaHJv bWFfZ3JhaW5fYmxvY2soc3RydWN0IGhhbnRyb19hdjFfY29lZmZzX2dyYWluX2Jsb2NrICpjb2Vm ZnMsCj4gKwkJCQkJICAgIHMzMiBiaXRkZXB0aCwKPiArCQkJCQkgICAgdTggbnVtX3lfcG9pbnRz LAo+ICsJCQkJCSAgICB1OCBudW1fY2JfcG9pbnRzLAo+ICsJCQkJCSAgICB1OCBudW1fY3JfcG9p bnRzLAo+ICsJCQkJCSAgICBzMzIgZ3JhaW5fc2NhbGVfc2hpZnQsCj4gKwkJCQkJICAgIHMzMiBh cl9jb2VmZl9sYWcsCj4gKwkJCQkJICAgIHMzMiBhcl9jb2VmZl9zaGlmdCwKPiArCQkJCQkgICAg czMyIGdyYWluX21pbiwKPiArCQkJCQkgICAgczMyIGdyYWluX21heCwKPiArCQkJCQkgICAgdTgg Y2hyb21hX3NjYWxpbmdfZnJvbV9sdW1hLAo+ICsJCQkJCSAgICB1MTYgcmFuZG9tX3NlZWQpOwo+ ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmVyaXNp bGljb24vaGFudHJvX2h3LmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZlcmlzaWxpY29uL2hh bnRyb19ody5oCj4gaW5kZXggNWYyMDExNTI5ZjAyLi5kMWQzOWQxZGY1ZDIgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9oYW50cm9faHcuaAo+ICsrKyBi L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmVyaXNpbGljb24vaGFudHJvX2h3LmgKPiBAQCAtMTUs OCArMTUsOCBAQAo+ICAgI2luY2x1ZGUgPG1lZGlhL3Y0bDItdnA5Lmg+Cj4gICAjaW5jbHVkZSA8 bWVkaWEvdmlkZW9idWYyLWNvcmUuaD4KPiAgIAo+IC0jaW5jbHVkZSAicm9ja2NoaXBfYXYxX2Vu dHJvcHltb2RlLmgiCj4gLSNpbmNsdWRlICJyb2NrY2hpcF9hdjFfZmlsbWdyYWluLmgiCj4gKyNp bmNsdWRlICJoYW50cm9fYXYxX2VudHJvcHltb2RlLmgiCj4gKyNpbmNsdWRlICJoYW50cm9fYXYx X2ZpbG1ncmFpbi5oIgo+ICAgCj4gICAjZGVmaW5lIERFQ184MTkwX0FMSUdOX01BU0sJMHgwN1UK PiAgIAo+IEBAIC00NTksMTAgKzQ1OSw3IEBAIHZvaWQgaGFudHJvX2hldmNfcmVmX2luaXQoc3Ry dWN0IGhhbnRyb19jdHggKmN0eCk7Cj4gICBkbWFfYWRkcl90IGhhbnRyb19oZXZjX2dldF9yZWZf YnVmKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIHMzMiBwb2MpOwo+ICAgaW50IGhhbnRyb19oZXZj X2FkZF9yZWZfYnVmKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIGludCBwb2MsIGRtYV9hZGRyX3Qg YWRkcik7Cj4gICAKPiAtaW50IHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX2luaXQoc3RydWN0IGhh bnRyb19jdHggKmN0eCk7Cj4gLXZvaWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfZXhpdChzdHJ1 Y3QgaGFudHJvX2N0eCAqY3R4KTsKPiAgIGludCByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19ydW4o c3RydWN0IGhhbnRyb19jdHggKmN0eCk7Cj4gLXZvaWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNf ZG9uZShzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KTsKPiAgIAo+ICAgc3RhdGljIGlubGluZSB1bnNp Z25lZCBzaG9ydCBoYW50cm9fdnA5X251bV9zYnModW5zaWduZWQgc2hvcnQgZGltZW5zaW9uKQo+ ICAgewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZlcmlzaWxpY29uL3Jv Y2tjaGlwX2F2MV9maWxtZ3JhaW4uaCBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmVyaXNpbGlj b24vcm9ja2NoaXBfYXYxX2ZpbG1ncmFpbi5oCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMzFhOGI3OTIwYzMxLi4wMDAwMDAwMDAwMDAKPiAtLS0gYS9kcml2ZXJzL21lZGlhL3Bs YXRmb3JtL3ZlcmlzaWxpY29uL3JvY2tjaGlwX2F2MV9maWxtZ3JhaW4uaAo+ICsrKyAvZGV2L251 bGwKPiBAQCAtMSwzNiArMCwwIEBACj4gLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wLW9ubHkgKi8KPiAtCj4gLSNpZm5kZWYgX1JPQ0tDSElQX0FWMV9GSUxNR1JBSU5fSF8KPiAt I2RlZmluZSBfUk9DS0NISVBfQVYxX0ZJTE1HUkFJTl9IXwo+IC0KPiAtI2luY2x1ZGUgPGxpbnV4 L3R5cGVzLmg+Cj4gLQo+IC12b2lkIHJvY2tjaGlwX2F2MV9nZW5lcmF0ZV9sdW1hX2dyYWluX2Js b2NrKHMzMiAoKmx1bWFfZ3JhaW5fYmxvY2spWzczXVs4Ml0sCj4gLQkJCQkJICAgIHMzMiBiaXRk ZXB0aCwKPiAtCQkJCQkgICAgdTggbnVtX3lfcG9pbnRzLAo+IC0JCQkJCSAgICBzMzIgZ3JhaW5f c2NhbGVfc2hpZnQsCj4gLQkJCQkJICAgIHMzMiBhcl9jb2VmZl9sYWcsCj4gLQkJCQkJICAgIHMz MiAoKmFyX2NvZWZmc195KVsyNF0sCj4gLQkJCQkJICAgIHMzMiBhcl9jb2VmZl9zaGlmdCwKPiAt CQkJCQkgICAgczMyIGdyYWluX21pbiwKPiAtCQkJCQkgICAgczMyIGdyYWluX21heCwKPiAtCQkJ CQkgICAgdTE2IHJhbmRvbV9zZWVkKTsKPiAtCj4gLXZvaWQgcm9ja2NoaXBfYXYxX2dlbmVyYXRl X2Nocm9tYV9ncmFpbl9ibG9jayhzMzIgKCpsdW1hX2dyYWluX2Jsb2NrKVs3M11bODJdLAo+IC0J CQkJCSAgICAgIHMzMiAoKmNiX2dyYWluX2Jsb2NrKVszOF1bNDRdLAo+IC0JCQkJCSAgICAgIHMz MiAoKmNyX2dyYWluX2Jsb2NrKVszOF1bNDRdLAo+IC0JCQkJCSAgICAgIHMzMiBiaXRkZXB0aCwK PiAtCQkJCQkgICAgICB1OCBudW1feV9wb2ludHMsCj4gLQkJCQkJICAgICAgdTggbnVtX2NiX3Bv aW50cywKPiAtCQkJCQkgICAgICB1OCBudW1fY3JfcG9pbnRzLAo+IC0JCQkJCSAgICAgIHMzMiBn cmFpbl9zY2FsZV9zaGlmdCwKPiAtCQkJCQkgICAgICBzMzIgYXJfY29lZmZfbGFnLAo+IC0JCQkJ CSAgICAgIHMzMiAoKmFyX2NvZWZmc19jYilbMjVdLAo+IC0JCQkJCSAgICAgIHMzMiAoKmFyX2Nv ZWZmc19jcilbMjVdLAo+IC0JCQkJCSAgICAgIHMzMiBhcl9jb2VmZl9zaGlmdCwKPiAtCQkJCQkg ICAgICBzMzIgZ3JhaW5fbWluLAo+IC0JCQkJCSAgICAgIHMzMiBncmFpbl9tYXgsCj4gLQkJCQkJ ICAgICAgdTggY2hyb21hX3NjYWxpbmdfZnJvbV9sdW1hLAo+IC0JCQkJCSAgICAgIHUxNiByYW5k b21fc2VlZCk7Cj4gLQo+IC0jZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS92ZXJpc2lsaWNvbi9yb2NrY2hpcF92cHU5ODFfaHdfYXYxX2RlYy5jIGIvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9yb2NrY2hpcF92cHU5ODFfaHdfYXYxX2RlYy5jCj4g aW5kZXggZTRlMjFhZDM3MzIzLi42MWUzMDMzODQyMmQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9yb2NrY2hpcF92cHU5ODFfaHdfYXYxX2RlYy5jCj4g KysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9yb2NrY2hpcF92cHU5ODFf aHdfYXYxX2RlYy5jCj4gQEAgLTcsNjIyICs3LDM1IEBACj4gICAKPiAgICNpbmNsdWRlIDxtZWRp YS92NGwyLW1lbTJtZW0uaD4KPiAgICNpbmNsdWRlICJoYW50cm8uaCIKPiArI2luY2x1ZGUgImhh bnRyb19hdjEuaCIKPiAgICNpbmNsdWRlICJoYW50cm9fdjRsMi5oIgo+ICAgI2luY2x1ZGUgInJv Y2tjaGlwX3ZwdTk4MV9yZWdzLmgiCj4gICAKPiAgICNkZWZpbmUgQVYxX0RFQ19NT0RFCQkxNwo+ IC0jZGVmaW5lIEdNX0dMT0JBTF9NT0RFTFNfUEVSX0ZSQU1FCTcKPiAtI2RlZmluZSBHTE9CQUxf TU9ERUxfVE9UQUxfU0laRQkoNiAqIDQgKyA0ICogMikKPiAtI2RlZmluZSBHTE9CQUxfTU9ERUxf U0laRQlBTElHTihHTV9HTE9CQUxfTU9ERUxTX1BFUl9GUkFNRSAqIEdMT0JBTF9NT0RFTF9UT1RB TF9TSVpFLCAyMDQ4KQo+IC0jZGVmaW5lIEFWMV9NQVhfVElMRVMJCTEyOAo+IC0jZGVmaW5lIEFW MV9USUxFX0lORk9fU0laRQkoQVYxX01BWF9USUxFUyAqIDE2KQo+IC0jZGVmaW5lIEFWMURFQ19N QVhfUElDX0JVRkZFUlMJMjQKPiAtI2RlZmluZSBBVjFfUkVGX1NDQUxFX1NISUZUCTE0Cj4gLSNk ZWZpbmUgQVYxX0lOVkFMSURfSURYCQktMQo+IC0jZGVmaW5lIE1BWF9GUkFNRV9ESVNUQU5DRQkz MQo+IC0jZGVmaW5lIEFWMV9QUklNQVJZX1JFRl9OT05FCTcKPiAtI2RlZmluZSBBVjFfVElMRV9T SVpFCQlBTElHTigzMiAqIDEyOCwgNDA5NikKPiAtLyoKPiAtICogVGhlc2UgMyB2YWx1ZXMgYXJl bid0IGRlZmluZWQgZW51bSB2NGwyX2F2MV9zZWdtZW50X2ZlYXR1cmUgYmVjYXVzZQo+IC0gKiB0 aGV5IGFyZSBub3QgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbgo+IC0gKi8KPiAtI2RlZmluZSBW NEwyX0FWMV9TRUdfTFZMX0FMVF9MRl9ZX0gJMgo+IC0jZGVmaW5lIFY0TDJfQVYxX1NFR19MVkxf QUxUX0xGX1UJMwo+IC0jZGVmaW5lIFY0TDJfQVYxX1NFR19MVkxfQUxUX0xGX1YJNAo+IC0KPiAt I2RlZmluZSBTVVBFUlJFU19TQ0FMRV9CSVRTIDMKPiAtI2RlZmluZSBTQ0FMRV9OVU1FUkFUT1Ig OAo+IC0jZGVmaW5lIFNVUEVSUkVTX1NDQUxFX0RFTk9NSU5BVE9SX01JTiAoU0NBTEVfTlVNRVJB VE9SICsgMSkKPiAtCj4gLSNkZWZpbmUgUlNfU1VCUEVMX0JJVFMgNgo+IC0jZGVmaW5lIFJTX1NV QlBFTF9NQVNLICgoMSA8PCBSU19TVUJQRUxfQklUUykgLSAxKQo+IC0jZGVmaW5lIFJTX1NDQUxF X1NVQlBFTF9CSVRTIDE0Cj4gLSNkZWZpbmUgUlNfU0NBTEVfU1VCUEVMX01BU0sgKCgxIDw8IFJT X1NDQUxFX1NVQlBFTF9CSVRTKSAtIDEpCj4gLSNkZWZpbmUgUlNfU0NBTEVfRVhUUkFfQklUUyAo UlNfU0NBTEVfU1VCUEVMX0JJVFMgLSBSU19TVUJQRUxfQklUUykKPiAtI2RlZmluZSBSU19TQ0FM RV9FWFRSQV9PRkYgKDEgPDwgKFJTX1NDQUxFX0VYVFJBX0JJVFMgLSAxKSkKPiAtCj4gLSNkZWZp bmUgSVNfSU5UUkEodHlwZSkgKCh0eXBlID09IFY0TDJfQVYxX0tFWV9GUkFNRSkgfHwgKHR5cGUg PT0gVjRMMl9BVjFfSU5UUkFfT05MWV9GUkFNRSkpCj4gLQo+IC0jZGVmaW5lIExTVF9CVUZfSURY IChWNEwyX0FWMV9SRUZfTEFTVF9GUkFNRSAtIFY0TDJfQVYxX1JFRl9MQVNUX0ZSQU1FKQo+IC0j ZGVmaW5lIExTVDJfQlVGX0lEWCAoVjRMMl9BVjFfUkVGX0xBU1QyX0ZSQU1FIC0gVjRMMl9BVjFf UkVGX0xBU1RfRlJBTUUpCj4gLSNkZWZpbmUgTFNUM19CVUZfSURYIChWNEwyX0FWMV9SRUZfTEFT VDNfRlJBTUUgLSBWNEwyX0FWMV9SRUZfTEFTVF9GUkFNRSkKPiAtI2RlZmluZSBHTERfQlVGX0lE WCAoVjRMMl9BVjFfUkVGX0dPTERFTl9GUkFNRSAtIFY0TDJfQVYxX1JFRl9MQVNUX0ZSQU1FKQo+ IC0jZGVmaW5lIEJXRF9CVUZfSURYIChWNEwyX0FWMV9SRUZfQldEUkVGX0ZSQU1FIC0gVjRMMl9B VjFfUkVGX0xBU1RfRlJBTUUpCj4gLSNkZWZpbmUgQUxUMl9CVUZfSURYIChWNEwyX0FWMV9SRUZf QUxUUkVGMl9GUkFNRSAtIFY0TDJfQVYxX1JFRl9MQVNUX0ZSQU1FKQo+IC0jZGVmaW5lIEFMVF9C VUZfSURYIChWNEwyX0FWMV9SRUZfQUxUUkVGX0ZSQU1FIC0gVjRMMl9BVjFfUkVGX0xBU1RfRlJB TUUpCj4gLQo+IC0jZGVmaW5lIERJVl9MVVRfUFJFQ19CSVRTIDE0Cj4gLSNkZWZpbmUgRElWX0xV VF9CSVRTIDgKPiAtI2RlZmluZSBESVZfTFVUX05VTSBCSVQoRElWX0xVVF9CSVRTKQo+IC0jZGVm aW5lIFdBUlBfUEFSQU1fUkVEVUNFX0JJVFMgNgo+IC0jZGVmaW5lIFdBUlBFRE1PREVMX1BSRUNf QklUUyAxNgo+IC0KPiAtI2RlZmluZSBBVjFfRElWX1JPVU5EX1VQX1BPVzIodmFsdWUsIG4pCQkJ XAo+IC0oewkJCQkJCQlcCj4gLQl0eXBlb2YobikgX24gID0gbjsJCQkJXAo+IC0JdHlwZW9mKHZh bHVlKSBfdmFsdWUgPSB2YWx1ZTsJCQlcCj4gLQkoX3ZhbHVlICsgKEJJVChfbikgPj4gMSkpID4+ IF9uOwkJXAo+IC19KQo+IC0KPiAtI2RlZmluZSBBVjFfRElWX1JPVU5EX1VQX1BPVzJfU0lHTkVE KHZhbHVlLCBuKQkJCQlcCj4gLSh7CQkJCQkJCQkJXAo+IC0JdHlwZW9mKG4pIF9uXyAgPSBuOwkJ CQkJCVwKPiAtCXR5cGVvZih2YWx1ZSkgX3ZhbHVlXyA9IHZhbHVlOwkJCQkJXAo+IC0JKCgoX3Zh bHVlXykgPCAwKSA/IC1BVjFfRElWX1JPVU5EX1VQX1BPVzIoLShfdmFsdWVfKSwgKF9uXykpCVwK PiAtCQk6IEFWMV9ESVZfUk9VTkRfVVBfUE9XMigoX3ZhbHVlXyksIChfbl8pKSk7CQlcCj4gLX0p Cj4gLQo+IC1lbnVtIHJvY2tjaGlwX2F2MV90eF9tb2RlIHsKPiAtCVJPQ0tDSElQX0FWMV9UWF9N T0RFX09OTFlfNFg0CT0gMCwKPiAtCVJPQ0tDSElQX0FWMV9UWF9NT0RFXzhYOAk9IDEsCj4gLQlS T0NLQ0hJUF9BVjFfVFhfTU9ERV8xNngxNgk9IDIsCj4gLQlST0NLQ0hJUF9BVjFfVFhfTU9ERV8z MngzMgk9IDMsCj4gLQlST0NLQ0hJUF9BVjFfVFhfTU9ERV9TRUxFQ1QJPSA0LAo+IC19Owo+IC0K PiAtc3RydWN0IHJvY2tjaGlwX2F2MV9maWxtX2dyYWluIHsKPiAtCXU4IHNjYWxpbmdfbHV0X3lb MjU2XTsKPiAtCXU4IHNjYWxpbmdfbHV0X2NiWzI1Nl07Cj4gLQl1OCBzY2FsaW5nX2x1dF9jclsy NTZdOwo+IC0JczE2IGNyb3BwZWRfbHVtYV9ncmFpbl9ibG9ja1s0MDk2XTsKPiAtCXMxNiBjcm9w cGVkX2Nocm9tYV9ncmFpbl9ibG9ja1sxMDI0ICogMl07Cj4gLX07Cj4gLQo+IC1zdGF0aWMgY29u c3Qgc2hvcnQgZGl2X2x1dFtESVZfTFVUX05VTSArIDFdID0gewo+IC0JMTYzODQsIDE2MzIwLCAx NjI1NywgMTYxOTQsIDE2MTMyLCAxNjA3MCwgMTYwMDksIDE1OTQ4LCAxNTg4OCwgMTU4MjgsIDE1 NzY4LAo+IC0JMTU3MDksIDE1NjUwLCAxNTU5MiwgMTU1MzQsIDE1NDc3LCAxNTQyMCwgMTUzNjQs IDE1MzA4LCAxNTI1MiwgMTUxOTcsIDE1MTQyLAo+IC0JMTUwODcsIDE1MDMzLCAxNDk4MCwgMTQ5 MjYsIDE0ODczLCAxNDgyMSwgMTQ3NjksIDE0NzE3LCAxNDY2NSwgMTQ2MTQsIDE0NTY0LAo+IC0J MTQ1MTMsIDE0NDYzLCAxNDQxMywgMTQzNjQsIDE0MzE1LCAxNDI2NiwgMTQyMTgsIDE0MTcwLCAx NDEyMiwgMTQwNzUsIDE0MDI4LAo+IC0JMTM5ODEsIDEzOTM1LCAxMzg4OCwgMTM4NDMsIDEzNzk3 LCAxMzc1MiwgMTM3MDcsIDEzNjYyLCAxMzYxOCwgMTM1NzQsIDEzNTMwLAo+IC0JMTM0ODcsIDEz NDQzLCAxMzQwMCwgMTMzNTgsIDEzMzE1LCAxMzI3MywgMTMyMzEsIDEzMTkwLCAxMzE0OCwgMTMx MDcsIDEzMDY2LAo+IC0JMTMwMjYsIDEyOTg1LCAxMjk0NSwgMTI5MDYsIDEyODY2LCAxMjgyNywg MTI3ODgsIDEyNzQ5LCAxMjcxMCwgMTI2NzIsIDEyNjMzLAo+IC0JMTI1OTYsIDEyNTU4LCAxMjUy MCwgMTI0ODMsIDEyNDQ2LCAxMjQwOSwgMTIzNzMsIDEyMzM2LCAxMjMwMCwgMTIyNjQsIDEyMjI4 LAo+IC0JMTIxOTMsIDEyMTU3LCAxMjEyMiwgMTIwODcsIDEyMDUzLCAxMjAxOCwgMTE5ODQsIDEx OTUwLCAxMTkxNiwgMTE4ODIsIDExODQ4LAo+IC0JMTE4MTUsIDExNzgyLCAxMTc0OSwgMTE3MTYs IDExNjgzLCAxMTY1MSwgMTE2MTksIDExNTg2LCAxMTU1NSwgMTE1MjMsIDExNDkxLAo+IC0JMTE0 NjAsIDExNDI5LCAxMTM5OCwgMTEzNjcsIDExMzM2LCAxMTMwNSwgMTEyNzUsIDExMjQ1LCAxMTIx NSwgMTExODUsIDExMTU1LAo+IC0JMTExMjUsIDExMDk2LCAxMTA2NywgMTEwMzgsIDExMDA5LCAx MDk4MCwgMTA5NTEsIDEwOTIzLCAxMDg5NCwgMTA4NjYsIDEwODM4LAo+IC0JMTA4MTAsIDEwNzgy LCAxMDc1NSwgMTA3MjcsIDEwNzAwLCAxMDY3MywgMTA2NDUsIDEwNjE4LCAxMDU5MiwgMTA1NjUs IDEwNTM4LAo+IC0JMTA1MTIsIDEwNDg2LCAxMDQ2MCwgMTA0MzQsIDEwNDA4LCAxMDM4MiwgMTAz NTYsIDEwMzMxLCAxMDMwNSwgMTAyODAsIDEwMjU1LAo+IC0JMTAyMzAsIDEwMjA1LCAxMDE4MCwg MTAxNTYsIDEwMTMxLCAxMDEwNywgMTAwODIsIDEwMDU4LCAxMDAzNCwgMTAwMTAsIDk5ODYsCj4g LQk5OTYzLCAgOTkzOSwgIDk5MTYsICA5ODkyLCAgOTg2OSwgIDk4NDYsICA5ODIzLCAgOTgwMCwg IDk3NzcsICA5NzU0LCAgOTczMiwKPiAtCTk3MDksICA5Njg3LCAgOTY2NCwgIDk2NDIsICA5NjIw LCAgOTU5OCwgIDk1NzYsICA5NTU0LCAgOTUzMywgIDk1MTEsICA5NDg5LAo+IC0JOTQ2OCwgIDk0 NDcsICA5NDI1LCAgOTQwNCwgIDkzODMsICA5MzYyLCAgOTM0MSwgIDkzMjEsICA5MzAwLCAgOTI3 OSwgIDkyNTksCj4gLQk5MjM5LCAgOTIxOCwgIDkxOTgsICA5MTc4LCAgOTE1OCwgIDkxMzgsICA5 MTE4LCAgOTA5OCwgIDkwNzksICA5MDU5LCAgOTAzOSwKPiAtCTkwMjAsICA5MDAxLCAgODk4MSwg IDg5NjIsICA4OTQzLCAgODkyNCwgIDg5MDUsICA4ODg2LCAgODg2NywgIDg4NDksICA4ODMwLAo+ IC0JODgxMiwgIDg3OTMsICA4Nzc1LCAgODc1NiwgIDg3MzgsICA4NzIwLCAgODcwMiwgIDg2ODQs ICA4NjY2LCAgODY0OCwgIDg2MzAsCj4gLQk4NjEzLCAgODU5NSwgIDg1NzcsICA4NTYwLCAgODU0 MiwgIDg1MjUsICA4NTA4LCAgODQ5MCwgIDg0NzMsICA4NDU2LCAgODQzOSwKPiAtCTg0MjIsICA4 NDA1LCAgODM4OSwgIDgzNzIsICA4MzU1LCAgODMzOSwgIDgzMjIsICA4MzA2LCAgODI4OSwgIDgy NzMsICA4MjU3LAo+IC0JODI0MCwgIDgyMjQsICA4MjA4LCAgODE5MiwKPiAtfTsKPiAtCj4gLXN0 YXRpYyBpbnQgcm9ja2NoaXBfdnB1OTgxX2dldF9mcmFtZV9pbmRleChzdHJ1Y3QgaGFudHJvX2N0 eCAqY3R4LCBpbnQgcmVmKQo+IC17Cj4gLQlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfaHdfY3R4ICph djFfZGVjID0gJmN0eC0+YXYxX2RlYzsKPiAtCXN0cnVjdCBoYW50cm9fYXYxX2RlY19jdHJscyAq Y3RybHMgPSAmYXYxX2RlYy0+Y3RybHM7Cj4gLQljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2F2MV9m cmFtZSAqZnJhbWUgPSBjdHJscy0+ZnJhbWU7Cj4gLQl1NjQgdGltZXN0YW1wOwo+IC0JaW50IGks IGlkeCA9IGZyYW1lLT5yZWZfZnJhbWVfaWR4W3JlZl07Cj4gLQo+IC0JaWYgKGlkeCA+PSBWNEwy X0FWMV9UT1RBTF9SRUZTX1BFUl9GUkFNRSB8fCBpZHggPCAwKQo+IC0JCXJldHVybiBBVjFfSU5W QUxJRF9JRFg7Cj4gLQo+IC0JdGltZXN0YW1wID0gZnJhbWUtPnJlZmVyZW5jZV9mcmFtZV90c1tp ZHhdOwo+IC0JZm9yIChpID0gMDsgaSA8IEFWMV9NQVhfRlJBTUVfQlVGX0NPVU5UOyBpKyspIHsK PiAtCQlpZiAoIWF2MV9kZWMtPmZyYW1lX3JlZnNbaV0udXNlZCkKPiAtCQkJY29udGludWU7Cj4g LQkJaWYgKGF2MV9kZWMtPmZyYW1lX3JlZnNbaV0udGltZXN0YW1wID09IHRpbWVzdGFtcCkKPiAt CQkJcmV0dXJuIGk7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIEFWMV9JTlZBTElEX0lEWDsKPiAtfQo+ IC0KPiAtc3RhdGljIGludCByb2NrY2hpcF92cHU5ODFfZ2V0X29yZGVyX2hpbnQoc3RydWN0IGhh bnRyb19jdHggKmN0eCwgaW50IHJlZikKPiAtewo+IC0Jc3RydWN0IGhhbnRyb19hdjFfZGVjX2h3 X2N0eCAqYXYxX2RlYyA9ICZjdHgtPmF2MV9kZWM7Cj4gLQlpbnQgaWR4ID0gcm9ja2NoaXBfdnB1 OTgxX2dldF9mcmFtZV9pbmRleChjdHgsIHJlZik7Cj4gLQo+IC0JaWYgKGlkeCAhPSBBVjFfSU5W QUxJRF9JRFgpCj4gLQkJcmV0dXJuIGF2MV9kZWMtPmZyYW1lX3JlZnNbaWR4XS5vcmRlcl9oaW50 Owo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHJvY2tjaGlwX3ZwdTk4 MV9hdjFfZGVjX2ZyYW1lX3JlZihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+IC0JCQkJCSAgICAg dTY0IHRpbWVzdGFtcCkKPiAtewo+IC0Jc3RydWN0IGhhbnRyb19hdjFfZGVjX2h3X2N0eCAqYXYx X2RlYyA9ICZjdHgtPmF2MV9kZWM7Cj4gLQlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfY3RybHMgKmN0 cmxzID0gJmF2MV9kZWMtPmN0cmxzOwo+IC0JY29uc3Qgc3RydWN0IHY0bDJfY3RybF9hdjFfZnJh bWUgKmZyYW1lID0gY3RybHMtPmZyYW1lOwo+IC0JaW50IGk7Cj4gLQo+IC0JZm9yIChpID0gMDsg aSA8IEFWMV9NQVhfRlJBTUVfQlVGX0NPVU5UOyBpKyspIHsKPiAtCQlpbnQgajsKPiAtCj4gLQkJ aWYgKGF2MV9kZWMtPmZyYW1lX3JlZnNbaV0udXNlZCkKPiAtCQkJY29udGludWU7Cj4gLQo+IC0J CWF2MV9kZWMtPmZyYW1lX3JlZnNbaV0ud2lkdGggPSBmcmFtZS0+ZnJhbWVfd2lkdGhfbWludXNf MSArIDE7Cj4gLQkJYXYxX2RlYy0+ZnJhbWVfcmVmc1tpXS5oZWlnaHQgPSBmcmFtZS0+ZnJhbWVf aGVpZ2h0X21pbnVzXzEgKyAxOwo+IC0JCWF2MV9kZWMtPmZyYW1lX3JlZnNbaV0ubWlfY29scyA9 IERJVl9ST1VORF9VUChmcmFtZS0+ZnJhbWVfd2lkdGhfbWludXNfMSArIDEsIDgpOwo+IC0JCWF2 MV9kZWMtPmZyYW1lX3JlZnNbaV0ubWlfcm93cyA9IERJVl9ST1VORF9VUChmcmFtZS0+ZnJhbWVf aGVpZ2h0X21pbnVzXzEgKyAxLCA4KTsKPiAtCQlhdjFfZGVjLT5mcmFtZV9yZWZzW2ldLnRpbWVz dGFtcCA9IHRpbWVzdGFtcDsKPiAtCQlhdjFfZGVjLT5mcmFtZV9yZWZzW2ldLmZyYW1lX3R5cGUg PSBmcmFtZS0+ZnJhbWVfdHlwZTsKPiAtCQlhdjFfZGVjLT5mcmFtZV9yZWZzW2ldLm9yZGVyX2hp bnQgPSBmcmFtZS0+b3JkZXJfaGludDsKPiAtCQlhdjFfZGVjLT5mcmFtZV9yZWZzW2ldLnZiMl9y ZWYgPSBoYW50cm9fZ2V0X2RzdF9idWYoY3R4KTsKPiAtCj4gLQkJZm9yIChqID0gMDsgaiA8IFY0 TDJfQVYxX1RPVEFMX1JFRlNfUEVSX0ZSQU1FOyBqKyspCj4gLQkJCWF2MV9kZWMtPmZyYW1lX3Jl ZnNbaV0ub3JkZXJfaGludHNbal0gPSBmcmFtZS0+b3JkZXJfaGludHNbal07Cj4gLQkJYXYxX2Rl Yy0+ZnJhbWVfcmVmc1tpXS51c2VkID0gdHJ1ZTsKPiAtCQlhdjFfZGVjLT5jdXJyZW50X2ZyYW1l X2luZGV4ID0gaTsKPiAtCj4gLQkJcmV0dXJuIGk7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIEFWMV9J TlZBTElEX0lEWDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9k ZWNfZnJhbWVfdW5yZWYoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgaW50IGlkeCkKPiAtewo+IC0J c3RydWN0IGhhbnRyb19hdjFfZGVjX2h3X2N0eCAqYXYxX2RlYyA9ICZjdHgtPmF2MV9kZWM7Cj4g LQo+IC0JaWYgKGlkeCA+PSAwKQo+IC0JCWF2MV9kZWMtPmZyYW1lX3JlZnNbaWR4XS51c2VkID0g ZmFsc2U7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX2Ns ZWFuX3JlZnMoc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPiAtewo+IC0Jc3RydWN0IGhhbnRyb19h djFfZGVjX2h3X2N0eCAqYXYxX2RlYyA9ICZjdHgtPmF2MV9kZWM7Cj4gLQlzdHJ1Y3QgaGFudHJv X2F2MV9kZWNfY3RybHMgKmN0cmxzID0gJmF2MV9kZWMtPmN0cmxzOwo+IC0KPiAtCWludCByZWYs IGlkeDsKPiAtCj4gLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFWMV9NQVhfRlJBTUVfQlVGX0NPVU5U OyBpZHgrKykgewo+IC0JCXU2NCB0aW1lc3RhbXAgPSBhdjFfZGVjLT5mcmFtZV9yZWZzW2lkeF0u dGltZXN0YW1wOwo+IC0JCWJvb2wgdXNlZCA9IGZhbHNlOwo+IC0KPiAtCQlpZiAoIWF2MV9kZWMt PmZyYW1lX3JlZnNbaWR4XS51c2VkKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJZm9yIChyZWYg PSAwOyByZWYgPCBWNEwyX0FWMV9UT1RBTF9SRUZTX1BFUl9GUkFNRTsgcmVmKyspIHsKPiAtCQkJ aWYgKGN0cmxzLT5mcmFtZS0+cmVmZXJlbmNlX2ZyYW1lX3RzW3JlZl0gPT0gdGltZXN0YW1wKQo+ IC0JCQkJdXNlZCA9IHRydWU7Cj4gLQkJfQo+IC0KPiAtCQlpZiAoIXVzZWQpCj4gLQkJCXJvY2tj aGlwX3ZwdTk4MV9hdjFfZGVjX2ZyYW1lX3VucmVmKGN0eCwgaWR4KTsKPiAtCX0KPiAtfQo+IC0K PiAtc3RhdGljIHNpemVfdCByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19sdW1hX3NpemUoc3RydWN0 IGhhbnRyb19jdHggKmN0eCkKPiAtewo+IC0JcmV0dXJuIGN0eC0+ZHN0X2ZtdC53aWR0aCAqIGN0 eC0+ZHN0X2ZtdC5oZWlnaHQgKiBjdHgtPmJpdF9kZXB0aCAvIDg7Cj4gLX0KPiAtCj4gLXN0YXRp YyBzaXplX3Qgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfY2hyb21hX3NpemUoc3RydWN0IGhhbnRy b19jdHggKmN0eCkKPiAtewo+IC0Jc2l6ZV90IGNyX29mZnNldCA9IHJvY2tjaGlwX3ZwdTk4MV9h djFfZGVjX2x1bWFfc2l6ZShjdHgpOwo+IC0KPiAtCXJldHVybiBBTElHTigoY3Jfb2Zmc2V0ICog MykgLyAyLCA2NCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHJvY2tjaGlwX3ZwdTk4MV9hdjFf ZGVjX3RpbGVzX2ZyZWUoc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPiAtewo+IC0Jc3RydWN0IGhh bnRyb19kZXYgKnZwdSA9IGN0eC0+ZGV2Owo+IC0Jc3RydWN0IGhhbnRyb19hdjFfZGVjX2h3X2N0 eCAqYXYxX2RlYyA9ICZjdHgtPmF2MV9kZWM7Cj4gLQo+IC0JaWYgKGF2MV9kZWMtPmRiX2RhdGFf Y29sLmNwdSkKPiAtCQlkbWFfZnJlZV9jb2hlcmVudCh2cHUtPmRldiwgYXYxX2RlYy0+ZGJfZGF0 YV9jb2wuc2l6ZSwKPiAtCQkJCSAgYXYxX2RlYy0+ZGJfZGF0YV9jb2wuY3B1LAo+IC0JCQkJICBh djFfZGVjLT5kYl9kYXRhX2NvbC5kbWEpOwo+IC0JYXYxX2RlYy0+ZGJfZGF0YV9jb2wuY3B1ID0g TlVMTDsKPiAtCj4gLQlpZiAoYXYxX2RlYy0+ZGJfY3RybF9jb2wuY3B1KQo+IC0JCWRtYV9mcmVl X2NvaGVyZW50KHZwdS0+ZGV2LCBhdjFfZGVjLT5kYl9jdHJsX2NvbC5zaXplLAo+IC0JCQkJICBh djFfZGVjLT5kYl9jdHJsX2NvbC5jcHUsCj4gLQkJCQkgIGF2MV9kZWMtPmRiX2N0cmxfY29sLmRt YSk7Cj4gLQlhdjFfZGVjLT5kYl9jdHJsX2NvbC5jcHUgPSBOVUxMOwo+IC0KPiAtCWlmIChhdjFf ZGVjLT5jZGVmX2NvbC5jcHUpCj4gLQkJZG1hX2ZyZWVfY29oZXJlbnQodnB1LT5kZXYsIGF2MV9k ZWMtPmNkZWZfY29sLnNpemUsCj4gLQkJCQkgIGF2MV9kZWMtPmNkZWZfY29sLmNwdSwgYXYxX2Rl Yy0+Y2RlZl9jb2wuZG1hKTsKPiAtCWF2MV9kZWMtPmNkZWZfY29sLmNwdSA9IE5VTEw7Cj4gLQo+ IC0JaWYgKGF2MV9kZWMtPnNyX2NvbC5jcHUpCj4gLQkJZG1hX2ZyZWVfY29oZXJlbnQodnB1LT5k ZXYsIGF2MV9kZWMtPnNyX2NvbC5zaXplLAo+IC0JCQkJICBhdjFfZGVjLT5zcl9jb2wuY3B1LCBh djFfZGVjLT5zcl9jb2wuZG1hKTsKPiAtCWF2MV9kZWMtPnNyX2NvbC5jcHUgPSBOVUxMOwo+IC0K PiAtCWlmIChhdjFfZGVjLT5scl9jb2wuY3B1KQo+IC0JCWRtYV9mcmVlX2NvaGVyZW50KHZwdS0+ ZGV2LCBhdjFfZGVjLT5scl9jb2wuc2l6ZSwKPiAtCQkJCSAgYXYxX2RlYy0+bHJfY29sLmNwdSwg YXYxX2RlYy0+bHJfY29sLmRtYSk7Cj4gLQlhdjFfZGVjLT5scl9jb2wuY3B1ID0gTlVMTDsKPiAt fQo+IC0KPiAtc3RhdGljIGludCByb2NrY2hpcF92cHU5ODFfYXYxX2RlY190aWxlc19yZWFsbG9j YXRlKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gLXsKPiAtCXN0cnVjdCBoYW50cm9fZGV2ICp2 cHUgPSBjdHgtPmRldjsKPiAtCXN0cnVjdCBoYW50cm9fYXYxX2RlY19od19jdHggKmF2MV9kZWMg PSAmY3R4LT5hdjFfZGVjOwo+IC0Jc3RydWN0IGhhbnRyb19hdjFfZGVjX2N0cmxzICpjdHJscyA9 ICZhdjFfZGVjLT5jdHJsczsKPiAtCWNvbnN0IHN0cnVjdCB2NGwyX2F2MV90aWxlX2luZm8gKnRp bGVfaW5mbyA9ICZjdHJscy0+ZnJhbWUtPnRpbGVfaW5mbzsKPiAtCXVuc2lnbmVkIGludCBudW1f dGlsZV9jb2xzID0gdGlsZV9pbmZvLT50aWxlX2NvbHM7Cj4gLQl1bnNpZ25lZCBpbnQgaGVpZ2h0 ID0gQUxJR04oY3RybHMtPmZyYW1lLT5mcmFtZV9oZWlnaHRfbWludXNfMSArIDEsIDY0KTsKPiAt CXVuc2lnbmVkIGludCBoZWlnaHRfaW5fc2IgPSBoZWlnaHQgLyA2NDsKPiAtCXVuc2lnbmVkIGlu dCBzdHJpcGVfbnVtID0gKChoZWlnaHQgKyA4KSArIDYzKSAvIDY0Owo+IC0Jc2l6ZV90IHNpemU7 Cj4gLQo+IC0JaWYgKGF2MV9kZWMtPmRiX2RhdGFfY29sLnNpemUgPj0KPiAtCSAgICBBTElHTiho ZWlnaHQgKiAxMiAqIGN0eC0+Yml0X2RlcHRoIC8gOCwgMTI4KSAqIG51bV90aWxlX2NvbHMpCj4g LQkJcmV0dXJuIDA7Cj4gLQo+IC0Jcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfdGlsZXNfZnJlZShj dHgpOwo+IC0KPiAtCXNpemUgPSBBTElHTihoZWlnaHQgKiAxMiAqIGN0eC0+Yml0X2RlcHRoIC8g OCwgMTI4KSAqIG51bV90aWxlX2NvbHM7Cj4gLQlhdjFfZGVjLT5kYl9kYXRhX2NvbC5jcHUgPSBk bWFfYWxsb2NfY29oZXJlbnQodnB1LT5kZXYsIHNpemUsCj4gLQkJCQkJCSAgICAgICZhdjFfZGVj LT5kYl9kYXRhX2NvbC5kbWEsCj4gLQkJCQkJCSAgICAgIEdGUF9LRVJORUwpOwo+IC0JaWYgKCFh djFfZGVjLT5kYl9kYXRhX2NvbC5jcHUpCj4gLQkJZ290byBidWZmZXJfYWxsb2NhdGlvbl9lcnJv cjsKPiAtCWF2MV9kZWMtPmRiX2RhdGFfY29sLnNpemUgPSBzaXplOwo+IC0KPiAtCXNpemUgPSBB TElHTihoZWlnaHQgKiAyICogMTYgLyA0LCAxMjgpICogbnVtX3RpbGVfY29sczsKPiAtCWF2MV9k ZWMtPmRiX2N0cmxfY29sLmNwdSA9IGRtYV9hbGxvY19jb2hlcmVudCh2cHUtPmRldiwgc2l6ZSwK PiAtCQkJCQkJICAgICAgJmF2MV9kZWMtPmRiX2N0cmxfY29sLmRtYSwKPiAtCQkJCQkJICAgICAg R0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWF2MV9kZWMtPmRiX2N0cmxfY29sLmNwdSkKPiAtCQlnb3Rv IGJ1ZmZlcl9hbGxvY2F0aW9uX2Vycm9yOwo+IC0JYXYxX2RlYy0+ZGJfY3RybF9jb2wuc2l6ZSA9 IHNpemU7Cj4gLQo+IC0Jc2l6ZSA9IEFMSUdOKGhlaWdodF9pbl9zYiAqIDQ0ICogY3R4LT5iaXRf ZGVwdGggKiAxNiAvIDgsIDEyOCkgKiBudW1fdGlsZV9jb2xzOwo+IC0JYXYxX2RlYy0+Y2RlZl9j b2wuY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KHZwdS0+ZGV2LCBzaXplLAo+IC0JCQkJCQkgICAm YXYxX2RlYy0+Y2RlZl9jb2wuZG1hLAo+IC0JCQkJCQkgICBHRlBfS0VSTkVMKTsKPiAtCWlmICgh YXYxX2RlYy0+Y2RlZl9jb2wuY3B1KQo+IC0JCWdvdG8gYnVmZmVyX2FsbG9jYXRpb25fZXJyb3I7 Cj4gLQlhdjFfZGVjLT5jZGVmX2NvbC5zaXplID0gc2l6ZTsKPiAtCj4gLQlzaXplID0gQUxJR04o aGVpZ2h0X2luX3NiICogKDMwNDAgKyAxMjgwKSwgMTI4KSAqIG51bV90aWxlX2NvbHM7Cj4gLQlh djFfZGVjLT5zcl9jb2wuY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KHZwdS0+ZGV2LCBzaXplLAo+ IC0JCQkJCQkgJmF2MV9kZWMtPnNyX2NvbC5kbWEsCj4gLQkJCQkJCSBHRlBfS0VSTkVMKTsKPiAt CWlmICghYXYxX2RlYy0+c3JfY29sLmNwdSkKPiAtCQlnb3RvIGJ1ZmZlcl9hbGxvY2F0aW9uX2Vy cm9yOwo+IC0JYXYxX2RlYy0+c3JfY29sLnNpemUgPSBzaXplOwo+IC0KPiAtCXNpemUgPSBBTElH TihzdHJpcGVfbnVtICogMTUzNiAqIGN0eC0+Yml0X2RlcHRoIC8gOCwgMTI4KSAqIG51bV90aWxl X2NvbHM7Cj4gLQlhdjFfZGVjLT5scl9jb2wuY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KHZwdS0+ ZGV2LCBzaXplLAo+IC0JCQkJCQkgJmF2MV9kZWMtPmxyX2NvbC5kbWEsCj4gLQkJCQkJCSBHRlBf S0VSTkVMKTsKPiAtCWlmICghYXYxX2RlYy0+bHJfY29sLmNwdSkKPiAtCQlnb3RvIGJ1ZmZlcl9h bGxvY2F0aW9uX2Vycm9yOwo+IC0JYXYxX2RlYy0+bHJfY29sLnNpemUgPSBzaXplOwo+IC0KPiAt CWF2MV9kZWMtPm51bV90aWxlX2NvbHNfYWxsb2NhdGVkID0gbnVtX3RpbGVfY29sczsKPiAtCXJl dHVybiAwOwo+IC0KPiAtYnVmZmVyX2FsbG9jYXRpb25fZXJyb3I6Cj4gLQlyb2NrY2hpcF92cHU5 ODFfYXYxX2RlY190aWxlc19mcmVlKGN0eCk7Cj4gLQlyZXR1cm4gLUVOT01FTTsKPiAtfQo+IC0K PiAtdm9pZCByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19leGl0KHN0cnVjdCBoYW50cm9fY3R4ICpj dHgpCj4gLXsKPiAtCXN0cnVjdCBoYW50cm9fZGV2ICp2cHUgPSBjdHgtPmRldjsKPiAtCXN0cnVj dCBoYW50cm9fYXYxX2RlY19od19jdHggKmF2MV9kZWMgPSAmY3R4LT5hdjFfZGVjOwo+IC0KPiAt CWlmIChhdjFfZGVjLT5nbG9iYWxfbW9kZWwuY3B1KQo+IC0JCWRtYV9mcmVlX2NvaGVyZW50KHZw dS0+ZGV2LCBhdjFfZGVjLT5nbG9iYWxfbW9kZWwuc2l6ZSwKPiAtCQkJCSAgYXYxX2RlYy0+Z2xv YmFsX21vZGVsLmNwdSwKPiAtCQkJCSAgYXYxX2RlYy0+Z2xvYmFsX21vZGVsLmRtYSk7Cj4gLQlh djFfZGVjLT5nbG9iYWxfbW9kZWwuY3B1ID0gTlVMTDsKPiAtCj4gLQlpZiAoYXYxX2RlYy0+dGls ZV9pbmZvLmNwdSkKPiAtCQlkbWFfZnJlZV9jb2hlcmVudCh2cHUtPmRldiwgYXYxX2RlYy0+dGls ZV9pbmZvLnNpemUsCj4gLQkJCQkgIGF2MV9kZWMtPnRpbGVfaW5mby5jcHUsCj4gLQkJCQkgIGF2 MV9kZWMtPnRpbGVfaW5mby5kbWEpOwo+IC0JYXYxX2RlYy0+dGlsZV9pbmZvLmNwdSA9IE5VTEw7 Cj4gLQo+IC0JaWYgKGF2MV9kZWMtPmZpbG1fZ3JhaW4uY3B1KQo+IC0JCWRtYV9mcmVlX2NvaGVy ZW50KHZwdS0+ZGV2LCBhdjFfZGVjLT5maWxtX2dyYWluLnNpemUsCj4gLQkJCQkgIGF2MV9kZWMt PmZpbG1fZ3JhaW4uY3B1LAo+IC0JCQkJICBhdjFfZGVjLT5maWxtX2dyYWluLmRtYSk7Cj4gLQlh djFfZGVjLT5maWxtX2dyYWluLmNwdSA9IE5VTEw7Cj4gLQo+IC0JaWYgKGF2MV9kZWMtPnByb2Jf dGJsLmNwdSkKPiAtCQlkbWFfZnJlZV9jb2hlcmVudCh2cHUtPmRldiwgYXYxX2RlYy0+cHJvYl90 Ymwuc2l6ZSwKPiAtCQkJCSAgYXYxX2RlYy0+cHJvYl90YmwuY3B1LCBhdjFfZGVjLT5wcm9iX3Ri bC5kbWEpOwo+IC0JYXYxX2RlYy0+cHJvYl90YmwuY3B1ID0gTlVMTDsKPiAtCj4gLQlpZiAoYXYx X2RlYy0+cHJvYl90Ymxfb3V0LmNwdSkKPiAtCQlkbWFfZnJlZV9jb2hlcmVudCh2cHUtPmRldiwg YXYxX2RlYy0+cHJvYl90Ymxfb3V0LnNpemUsCj4gLQkJCQkgIGF2MV9kZWMtPnByb2JfdGJsX291 dC5jcHUsCj4gLQkJCQkgIGF2MV9kZWMtPnByb2JfdGJsX291dC5kbWEpOwo+IC0JYXYxX2RlYy0+ cHJvYl90Ymxfb3V0LmNwdSA9IE5VTEw7Cj4gLQo+IC0JaWYgKGF2MV9kZWMtPnRpbGVfYnVmLmNw dSkKPiAtCQlkbWFfZnJlZV9jb2hlcmVudCh2cHUtPmRldiwgYXYxX2RlYy0+dGlsZV9idWYuc2l6 ZSwKPiAtCQkJCSAgYXYxX2RlYy0+dGlsZV9idWYuY3B1LCBhdjFfZGVjLT50aWxlX2J1Zi5kbWEp Owo+IC0JYXYxX2RlYy0+dGlsZV9idWYuY3B1ID0gTlVMTDsKPiAtCj4gLQlyb2NrY2hpcF92cHU5 ODFfYXYxX2RlY190aWxlc19mcmVlKGN0eCk7Cj4gLX0KPiAtCj4gLWludCByb2NrY2hpcF92cHU5 ODFfYXYxX2RlY19pbml0KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gLXsKPiAtCXN0cnVjdCBo YW50cm9fZGV2ICp2cHUgPSBjdHgtPmRldjsKPiAtCXN0cnVjdCBoYW50cm9fYXYxX2RlY19od19j dHggKmF2MV9kZWMgPSAmY3R4LT5hdjFfZGVjOwo+IC0KPiAtCW1lbXNldChhdjFfZGVjLCAwLCBz aXplb2YoKmF2MV9kZWMpKTsKPiAtCj4gLQlhdjFfZGVjLT5nbG9iYWxfbW9kZWwuY3B1ID0gZG1h X2FsbG9jX2NvaGVyZW50KHZwdS0+ZGV2LCBHTE9CQUxfTU9ERUxfU0laRSwKPiAtCQkJCQkJICAg ICAgICZhdjFfZGVjLT5nbG9iYWxfbW9kZWwuZG1hLAo+IC0JCQkJCQkgICAgICAgR0ZQX0tFUk5F TCk7Cj4gLQlpZiAoIWF2MV9kZWMtPmdsb2JhbF9tb2RlbC5jcHUpCj4gLQkJcmV0dXJuIC1FTk9N RU07Cj4gLQlhdjFfZGVjLT5nbG9iYWxfbW9kZWwuc2l6ZSA9IEdMT0JBTF9NT0RFTF9TSVpFOwo+ IC0KPiAtCWF2MV9kZWMtPnRpbGVfaW5mby5jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQodnB1LT5k ZXYsIEFWMV9USUxFX0lORk9fU0laRSwKPiAtCQkJCQkJICAgICZhdjFfZGVjLT50aWxlX2luZm8u ZG1hLAo+IC0JCQkJCQkgICAgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWF2MV9kZWMtPnRpbGVfaW5m by5jcHUpCj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gLQlhdjFfZGVjLT50aWxlX2luZm8uc2l6ZSA9 IEFWMV9USUxFX0lORk9fU0laRTsKPiAtCj4gLQlhdjFfZGVjLT5maWxtX2dyYWluLmNwdSA9IGRt YV9hbGxvY19jb2hlcmVudCh2cHUtPmRldiwKPiAtCQkJCQkJICAgICBBTElHTihzaXplb2Yoc3Ry dWN0IHJvY2tjaGlwX2F2MV9maWxtX2dyYWluKSwgMjA0OCksCj4gLQkJCQkJCSAgICAgJmF2MV9k ZWMtPmZpbG1fZ3JhaW4uZG1hLAo+IC0JCQkJCQkgICAgIEdGUF9LRVJORUwpOwo+IC0JaWYgKCFh djFfZGVjLT5maWxtX2dyYWluLmNwdSkKPiAtCQlyZXR1cm4gLUVOT01FTTsKPiAtCWF2MV9kZWMt PmZpbG1fZ3JhaW4uc2l6ZSA9IEFMSUdOKHNpemVvZihzdHJ1Y3Qgcm9ja2NoaXBfYXYxX2ZpbG1f Z3JhaW4pLCAyMDQ4KTsKPiAtCj4gLQlhdjFfZGVjLT5wcm9iX3RibC5jcHUgPSBkbWFfYWxsb2Nf Y29oZXJlbnQodnB1LT5kZXYsCj4gLQkJCQkJCSAgIEFMSUdOKHNpemVvZihzdHJ1Y3QgYXYxY2Rm cyksIDIwNDgpLAo+IC0JCQkJCQkgICAmYXYxX2RlYy0+cHJvYl90YmwuZG1hLAo+IC0JCQkJCQkg ICBHRlBfS0VSTkVMKTsKPiAtCWlmICghYXYxX2RlYy0+cHJvYl90YmwuY3B1KQo+IC0JCXJldHVy biAtRU5PTUVNOwo+IC0JYXYxX2RlYy0+cHJvYl90Ymwuc2l6ZSA9IEFMSUdOKHNpemVvZihzdHJ1 Y3QgYXYxY2RmcyksIDIwNDgpOwo+IC0KPiAtCWF2MV9kZWMtPnByb2JfdGJsX291dC5jcHUgPSBk bWFfYWxsb2NfY29oZXJlbnQodnB1LT5kZXYsCj4gLQkJCQkJCSAgICAgICBBTElHTihzaXplb2Yo c3RydWN0IGF2MWNkZnMpLCAyMDQ4KSwKPiAtCQkJCQkJICAgICAgICZhdjFfZGVjLT5wcm9iX3Ri bF9vdXQuZG1hLAo+IC0JCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWF2MV9kZWMt PnByb2JfdGJsX291dC5jcHUpCj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gLQlhdjFfZGVjLT5wcm9i X3RibF9vdXQuc2l6ZSA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgYXYxY2RmcyksIDIwNDgpOwo+IC0J YXYxX2RlYy0+Y2RmcyA9ICZhdjFfZGVjLT5kZWZhdWx0X2NkZnM7Cj4gLQlhdjFfZGVjLT5jZGZz X25kdmMgPSAmYXYxX2RlYy0+ZGVmYXVsdF9jZGZzX25kdmM7Cj4gLQo+IC0Jcm9ja2NoaXBfYXYx X3NldF9kZWZhdWx0X2NkZnMoYXYxX2RlYy0+Y2RmcywgYXYxX2RlYy0+Y2Rmc19uZHZjKTsKPiAt Cj4gLQlhdjFfZGVjLT50aWxlX2J1Zi5jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQodnB1LT5kZXYs Cj4gLQkJCQkJCSAgIEFWMV9USUxFX1NJWkUsCj4gLQkJCQkJCSAgICZhdjFfZGVjLT50aWxlX2J1 Zi5kbWEsCj4gLQkJCQkJCSAgIEdGUF9LRVJORUwpOwo+IC0JaWYgKCFhdjFfZGVjLT50aWxlX2J1 Zi5jcHUpCj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gLQlhdjFfZGVjLT50aWxlX2J1Zi5zaXplID0g QVYxX1RJTEVfU0laRTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBy b2NrY2hpcF92cHU5ODFfYXYxX2RlY19wcmVwYXJlX3J1bihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4 KQo+IC17Cj4gLQlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfaHdfY3R4ICphdjFfZGVjID0gJmN0eC0+ YXYxX2RlYzsKPiAtCXN0cnVjdCBoYW50cm9fYXYxX2RlY19jdHJscyAqY3RybHMgPSAmYXYxX2Rl Yy0+Y3RybHM7Cj4gLQo+IC0JY3RybHMtPnNlcXVlbmNlID0gaGFudHJvX2dldF9jdHJsKGN0eCwg VjRMMl9DSURfU1RBVEVMRVNTX0FWMV9TRVFVRU5DRSk7Cj4gLQlpZiAoV0FSTl9PTighY3RybHMt PnNlcXVlbmNlKSkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQljdHJscy0+dGlsZV9ncm91 cF9lbnRyeSA9Cj4gLQkgICAgaGFudHJvX2dldF9jdHJsKGN0eCwgVjRMMl9DSURfU1RBVEVMRVNT X0FWMV9USUxFX0dST1VQX0VOVFJZKTsKPiAtCWlmIChXQVJOX09OKCFjdHJscy0+dGlsZV9ncm91 cF9lbnRyeSkpCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+IC0JY3RybHMtPmZyYW1lID0gaGFu dHJvX2dldF9jdHJsKGN0eCwgVjRMMl9DSURfU1RBVEVMRVNTX0FWMV9GUkFNRSk7Cj4gLQlpZiAo V0FSTl9PTighY3RybHMtPmZyYW1lKSkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQljdHJs cy0+ZmlsbV9ncmFpbiA9Cj4gLQkgICAgaGFudHJvX2dldF9jdHJsKGN0eCwgVjRMMl9DSURfU1RB VEVMRVNTX0FWMV9GSUxNX0dSQUlOKTsKPiAtCj4gLQlyZXR1cm4gcm9ja2NoaXBfdnB1OTgxX2F2 MV9kZWNfdGlsZXNfcmVhbGxvY2F0ZShjdHgpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIGlu dCByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19nZXRfbXNiKHUzMiBuKQo+IC17Cj4gLQlpZiAobiA9 PSAwKQo+IC0JCXJldHVybiAwOwo+IC0JcmV0dXJuIDMxIF4gX19idWlsdGluX2NseihuKTsKPiAt fQo+IC0KPiAtc3RhdGljIHNob3J0IHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX3Jlc29sdmVfZGl2 aXNvcl8zMih1MzIgZCwgc2hvcnQgKnNoaWZ0KQo+IC17Cj4gLQlpbnQgZjsKPiAtCXU2NCBlOwo+ IC0KPiAtCSpzaGlmdCA9IHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX2dldF9tc2IoZCk7Cj4gLQkv KiBlIGlzIG9idGFpbmVkIGZyb20gRCBhZnRlciByZXNldHRpbmcgdGhlIG1vc3Qgc2lnbmlmaWNh bnQgMSBiaXQuICovCj4gLQllID0gZCAtICgodTMyKTEgPDwgKnNoaWZ0KTsKPiAtCS8qIEdldCB0 aGUgbW9zdCBzaWduaWZpY2FudCBESVZfTFVUX0JJVFMgKDgpIGJpdHMgb2YgZSBpbnRvIGYgKi8K PiAtCWlmICgqc2hpZnQgPiBESVZfTFVUX0JJVFMpCj4gLQkJZiA9IEFWMV9ESVZfUk9VTkRfVVBf UE9XMihlLCAqc2hpZnQgLSBESVZfTFVUX0JJVFMpOwo+IC0JZWxzZQo+IC0JCWYgPSBlIDw8IChE SVZfTFVUX0JJVFMgLSAqc2hpZnQpOwo+IC0JaWYgKGYgPiBESVZfTFVUX05VTSkKPiAtCQlyZXR1 cm4gLTE7Cj4gLQkqc2hpZnQgKz0gRElWX0xVVF9QUkVDX0JJVFM7Cj4gLQkvKiBVc2UgZiBhcyBs b29rdXAgaW50byB0aGUgcHJlY29tcHV0ZWQgdGFibGUgb2YgbXVsdGlwbGllcnMgKi8KPiAtCXJl dHVybiBkaXZfbHV0W2ZdOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZAo+IC1yb2NrY2hpcF92cHU5 ODFfYXYxX2RlY19nZXRfc2hlYXJfcGFyYW1zKGNvbnN0IHUzMiAqcGFyYW1zLCBzNjQgKmFscGhh LAo+IC0JCQkJCSBzNjQgKmJldGEsIHM2NCAqZ2FtbWEsIHM2NCAqZGVsdGEpCj4gLXsKPiAtCWNv bnN0IGludCAqbWF0ID0gcGFyYW1zOwo+IC0Jc2hvcnQgc2hpZnQ7Cj4gLQlzaG9ydCB5Owo+IC0J bG9uZyBsb25nIGd2LCBkdjsKPiAtCj4gLQlpZiAobWF0WzJdIDw9IDApCj4gLQkJcmV0dXJuOwo+ IC0KPiAtCSphbHBoYSA9IGNsYW1wX3ZhbChtYXRbMl0gLSAoMSA8PCBXQVJQRURNT0RFTF9QUkVD X0JJVFMpLCBTMTZfTUlOLCBTMTZfTUFYKTsKPiAtCSpiZXRhID0gY2xhbXBfdmFsKG1hdFszXSwg UzE2X01JTiwgUzE2X01BWCk7Cj4gLQo+IC0JeSA9IHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX3Jl c29sdmVfZGl2aXNvcl8zMihhYnMobWF0WzJdKSwgJnNoaWZ0KSAqIChtYXRbMl0gPCAwID8gLTEg OiAxKTsKPiAtCj4gLQlndiA9ICgobG9uZyBsb25nKW1hdFs0XSAqICgxIDw8IFdBUlBFRE1PREVM X1BSRUNfQklUUykpICogeTsKPiAtCj4gLQkqZ2FtbWEgPSBjbGFtcF92YWwoKGludClBVjFfRElW X1JPVU5EX1VQX1BPVzJfU0lHTkVEKGd2LCBzaGlmdCksIFMxNl9NSU4sIFMxNl9NQVgpOwo+IC0K PiAtCWR2ID0gKChsb25nIGxvbmcpbWF0WzNdICogbWF0WzRdKSAqIHk7Cj4gLQkqZGVsdGEgPSBj bGFtcF92YWwobWF0WzVdIC0KPiAtCQkoaW50KUFWMV9ESVZfUk9VTkRfVVBfUE9XMl9TSUdORUQo ZHYsIHNoaWZ0KSAtICgxIDw8IFdBUlBFRE1PREVMX1BSRUNfQklUUyksCj4gLQkJUzE2X01JTiwg UzE2X01BWCk7Cj4gLQo+IC0JKmFscGhhID0gQVYxX0RJVl9ST1VORF9VUF9QT1cyX1NJR05FRCgq YWxwaGEsIFdBUlBfUEFSQU1fUkVEVUNFX0JJVFMpCj4gLQkJICogKDEgPDwgV0FSUF9QQVJBTV9S RURVQ0VfQklUUyk7Cj4gLQkqYmV0YSA9IEFWMV9ESVZfUk9VTkRfVVBfUE9XMl9TSUdORUQoKmJl dGEsIFdBUlBfUEFSQU1fUkVEVUNFX0JJVFMpCj4gLQkJKiAoMSA8PCBXQVJQX1BBUkFNX1JFRFVD RV9CSVRTKTsKPiAtCSpnYW1tYSA9IEFWMV9ESVZfUk9VTkRfVVBfUE9XMl9TSUdORUQoKmdhbW1h LCBXQVJQX1BBUkFNX1JFRFVDRV9CSVRTKQo+IC0JCSAqICgxIDw8IFdBUlBfUEFSQU1fUkVEVUNF X0JJVFMpOwo+IC0JKmRlbHRhID0gQVYxX0RJVl9ST1VORF9VUF9QT1cyX1NJR05FRCgqZGVsdGEs IFdBUlBfUEFSQU1fUkVEVUNFX0JJVFMpCj4gLQkJKiAoMSA8PCBXQVJQX1BBUkFNX1JFRFVDRV9C SVRTKTsKPiAtfQo+ICAgCj4gICBzdGF0aWMgdm9pZCByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19z ZXRfZ2xvYmFsX21vZGVsKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gICB7Cj4gICAJc3RydWN0 IGhhbnRyb19hdjFfZGVjX2h3X2N0eCAqYXYxX2RlYyA9ICZjdHgtPmF2MV9kZWM7Cj4gLQlzdHJ1 Y3QgaGFudHJvX2F2MV9kZWNfY3RybHMgKmN0cmxzID0gJmF2MV9kZWMtPmN0cmxzOwo+IC0JY29u c3Qgc3RydWN0IHY0bDJfY3RybF9hdjFfZnJhbWUgKmZyYW1lID0gY3RybHMtPmZyYW1lOwo+IC0J Y29uc3Qgc3RydWN0IHY0bDJfYXYxX2dsb2JhbF9tb3Rpb24gKmdtID0gJmZyYW1lLT5nbG9iYWxf bW90aW9uOwo+IC0JdTggKmRzdCA9IGF2MV9kZWMtPmdsb2JhbF9tb2RlbC5jcHU7Cj4gICAJc3Ry dWN0IGhhbnRyb19kZXYgKnZwdSA9IGN0eC0+ZGV2Owo+IC0JaW50IHJlZl9mcmFtZSwgaTsKPiAt Cj4gLQltZW1zZXQoZHN0LCAwLCBHTE9CQUxfTU9ERUxfU0laRSk7Cj4gLQlmb3IgKHJlZl9mcmFt ZSA9IDA7IHJlZl9mcmFtZSA8IFY0TDJfQVYxX1JFRlNfUEVSX0ZSQU1FOyArK3JlZl9mcmFtZSkg ewo+IC0JCXM2NCBhbHBoYSA9IDAsIGJldGEgPSAwLCBnYW1tYSA9IDAsIGRlbHRhID0gMDsKPiAt Cj4gLQkJZm9yIChpID0gMDsgaSA8IDY7ICsraSkgewo+IC0JCQlpZiAoaSA9PSAyKQo+IC0JCQkJ KihzMzIgKilkc3QgPQo+IC0JCQkJCWdtLT5wYXJhbXNbVjRMMl9BVjFfUkVGX0xBU1RfRlJBTUUg KyByZWZfZnJhbWVdWzNdOwo+IC0JCQllbHNlIGlmIChpID09IDMpCj4gLQkJCQkqKHMzMiAqKWRz dCA9Cj4gLQkJCQkJZ20tPnBhcmFtc1tWNEwyX0FWMV9SRUZfTEFTVF9GUkFNRSArIHJlZl9mcmFt ZV1bMl07Cj4gLQkJCWVsc2UKPiAtCQkJCSooczMyICopZHN0ID0KPiAtCQkJCQlnbS0+cGFyYW1z W1Y0TDJfQVYxX1JFRl9MQVNUX0ZSQU1FICsgcmVmX2ZyYW1lXVtpXTsKPiAtCQkJZHN0ICs9IDQ7 Cj4gLQkJfQo+IC0KPiAtCQlpZiAoZ20tPnR5cGVbVjRMMl9BVjFfUkVGX0xBU1RfRlJBTUUgKyBy ZWZfZnJhbWVdIDw9IFY0TDJfQVYxX1dBUlBfTU9ERUxfQUZGSU5FKQo+IC0JCQlyb2NrY2hpcF92 cHU5ODFfYXYxX2RlY19nZXRfc2hlYXJfcGFyYW1zKCZnbS0+cGFyYW1zW1Y0TDJfQVYxX1JFRl9M QVNUX0ZSQU1FICsgcmVmX2ZyYW1lXVswXSwKPiAtCQkJCQkJCQkgJmFscGhhLCAmYmV0YSwgJmdh bW1hLCAmZGVsdGEpOwo+IC0KPiAtCQkqKHMxNiAqKWRzdCA9IGFscGhhOwo+IC0JCWRzdCArPSAy Owo+IC0JCSooczE2ICopZHN0ID0gYmV0YTsKPiAtCQlkc3QgKz0gMjsKPiAtCQkqKHMxNiAqKWRz dCA9IGdhbW1hOwo+IC0JCWRzdCArPSAyOwo+IC0JCSooczE2ICopZHN0ID0gZGVsdGE7Cj4gLQkJ ZHN0ICs9IDI7Cj4gLQl9Cj4gICAKPiArCWhhbnRyb19hdjFfc2V0X2dsb2JhbF9tb2RlbChjdHgp Owo+ICAgCWhhbnRyb193cml0ZV9hZGRyKHZwdSwgQVYxX0dMT0JBTF9NT0RFTCwgYXYxX2RlYy0+ Z2xvYmFsX21vZGVsLmRtYSk7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGludCByb2NrY2hpcF92cHU5 ODFfYXYxX3RpbGVfbG9nMihpbnQgdGFyZ2V0KQo+IC17Cj4gLQlpbnQgazsKPiAtCj4gLQkvKgo+ IC0JICogcmV0dXJucyB0aGUgc21hbGxlc3QgdmFsdWUgZm9yIGsgc3VjaCB0aGF0IDEgPDwgayBp cyBncmVhdGVyCj4gLQkgKiB0aGFuIG9yIGVxdWFsIHRvIHRhcmdldAo+IC0JICovCj4gLQlmb3Ig KGsgPSAwOyAoMSA8PCBrKSA8IHRhcmdldDsgaysrKTsKPiAtCj4gLQlyZXR1cm4gazsKPiAtfQo+ IC0KPiAgIHN0YXRpYyB2b2lkIHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX3NldF90aWxlX2luZm8o c3RydWN0IGhhbnRyb19jdHggKmN0eCkKPiAgIHsKPiAgIAlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNf aHdfY3R4ICphdjFfZGVjID0gJmN0eC0+YXYxX2RlYzsKPiAgIAlzdHJ1Y3QgaGFudHJvX2F2MV9k ZWNfY3RybHMgKmN0cmxzID0gJmF2MV9kZWMtPmN0cmxzOwo+ICAgCWNvbnN0IHN0cnVjdCB2NGwy X2F2MV90aWxlX2luZm8gKnRpbGVfaW5mbyA9ICZjdHJscy0+ZnJhbWUtPnRpbGVfaW5mbzsKPiAt CWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfYXYxX3RpbGVfZ3JvdXBfZW50cnkgKmdyb3VwX2VudHJ5 ID0KPiAtCSAgICBjdHJscy0+dGlsZV9ncm91cF9lbnRyeTsKPiAgIAlpbnQgY29udGV4dF91cGRh dGVfeSA9Cj4gICAJICAgIHRpbGVfaW5mby0+Y29udGV4dF91cGRhdGVfdGlsZV9pZCAvIHRpbGVf aW5mby0+dGlsZV9jb2xzOwo+ICAgCWludCBjb250ZXh0X3VwZGF0ZV94ID0KPiAgIAkgICAgdGls ZV9pbmZvLT5jb250ZXh0X3VwZGF0ZV90aWxlX2lkICUgdGlsZV9pbmZvLT50aWxlX2NvbHM7Cj4g ICAJaW50IGNvbnRleHRfdXBkYXRlX3RpbGVfaWQgPQo+ICAgCSAgICBjb250ZXh0X3VwZGF0ZV94 ICogdGlsZV9pbmZvLT50aWxlX3Jvd3MgKyBjb250ZXh0X3VwZGF0ZV95Owo+IC0JdTggKmRzdCA9 IGF2MV9kZWMtPnRpbGVfaW5mby5jcHU7Cj4gICAJc3RydWN0IGhhbnRyb19kZXYgKnZwdSA9IGN0 eC0+ZGV2Owo+IC0JaW50IHRpbGUwLCB0aWxlMTsKPiAtCj4gLQltZW1zZXQoZHN0LCAwLCBhdjFf ZGVjLT50aWxlX2luZm8uc2l6ZSk7Cj4gLQo+IC0JZm9yICh0aWxlMCA9IDA7IHRpbGUwIDwgdGls ZV9pbmZvLT50aWxlX2NvbHM7IHRpbGUwKyspIHsKPiAtCQlmb3IgKHRpbGUxID0gMDsgdGlsZTEg PCB0aWxlX2luZm8tPnRpbGVfcm93czsgdGlsZTErKykgewo+IC0JCQlpbnQgdGlsZV9pZCA9IHRp bGUxICogdGlsZV9pbmZvLT50aWxlX2NvbHMgKyB0aWxlMDsKPiAtCQkJdTMyIHN0YXJ0LCBlbmQ7 Cj4gLQkJCXUzMiB5MCA9Cj4gLQkJCSAgICB0aWxlX2luZm8tPmhlaWdodF9pbl9zYnNfbWludXNf MVt0aWxlMV0gKyAxOwo+IC0JCQl1MzIgeDAgPSB0aWxlX2luZm8tPndpZHRoX2luX3Nic19taW51 c18xW3RpbGUwXSArIDE7Cj4gLQo+IC0JCQkvKiB0aWxlIHNpemUgaW4gU0IgdW5pdHMgKHdpZHRo LGhlaWdodCkgKi8KPiAtCQkJKmRzdCsrID0geDA7Cj4gLQkJCSpkc3QrKyA9IDA7Cj4gLQkJCSpk c3QrKyA9IDA7Cj4gLQkJCSpkc3QrKyA9IDA7Cj4gLQkJCSpkc3QrKyA9IHkwOwo+IC0JCQkqZHN0 KysgPSAwOwo+IC0JCQkqZHN0KysgPSAwOwo+IC0JCQkqZHN0KysgPSAwOwo+IC0KPiAtCQkJLyog dGlsZSBzdGFydCBwb3NpdGlvbiAqLwo+IC0JCQlzdGFydCA9IGdyb3VwX2VudHJ5W3RpbGVfaWRd LnRpbGVfb2Zmc2V0IC0gZ3JvdXBfZW50cnlbMF0udGlsZV9vZmZzZXQ7Cj4gLQkJCSpkc3QrKyA9 IHN0YXJ0ICYgMjU1Owo+IC0JCQkqZHN0KysgPSAoc3RhcnQgPj4gOCkgJiAyNTU7Cj4gLQkJCSpk c3QrKyA9IChzdGFydCA+PiAxNikgJiAyNTU7Cj4gLQkJCSpkc3QrKyA9IChzdGFydCA+PiAyNCkg JiAyNTU7Cj4gLQo+IC0JCQkvKiBudW1iZXIgb2YgYnl0ZXMgaW4gdGlsZSBkYXRhICovCj4gLQkJ CWVuZCA9IHN0YXJ0ICsgZ3JvdXBfZW50cnlbdGlsZV9pZF0udGlsZV9zaXplOwo+IC0JCQkqZHN0 KysgPSBlbmQgJiAyNTU7Cj4gLQkJCSpkc3QrKyA9IChlbmQgPj4gOCkgJiAyNTU7Cj4gLQkJCSpk c3QrKyA9IChlbmQgPj4gMTYpICYgMjU1Owo+IC0JCQkqZHN0KysgPSAoZW5kID4+IDI0KSAmIDI1 NTsKPiAtCQl9Cj4gLQl9Cj4gKwo+ICsJaGFudHJvX2F2MV9zZXRfdGlsZV9pbmZvKGN0eCk7Cj4g ICAKPiAgIAloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9tdWx0aWNvcmVfZXhwZWN0X2NvbnRl eHRfdXBkYXRlLCAhIShjb250ZXh0X3VwZGF0ZV94ID09IDApKTsKPiAgIAloYW50cm9fcmVnX3dy aXRlKHZwdSwgJmF2MV90aWxlX2VuYWJsZSwKPiBAQCAtNjMxLDggKzQ0LDggQEAgc3RhdGljIHZv aWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfc2V0X3RpbGVfaW5mbyhzdHJ1Y3QgaGFudHJvX2N0 eCAqY3R4KQo+ICAgCWhhbnRyb19yZWdfd3JpdGUodnB1LCAmYXYxX251bV90aWxlX3Jvd3NfOGss IHRpbGVfaW5mby0+dGlsZV9yb3dzKTsKPiAgIAloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9j b250ZXh0X3VwZGF0ZV90aWxlX2lkLCBjb250ZXh0X3VwZGF0ZV90aWxlX2lkKTsKPiAgIAloYW50 cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV90aWxlX3RyYW5zcG9zZSwgMSk7Cj4gLQlpZiAocm9ja2No aXBfdnB1OTgxX2F2MV90aWxlX2xvZzIodGlsZV9pbmZvLT50aWxlX2NvbHMpIHx8Cj4gLQkgICAg cm9ja2NoaXBfdnB1OTgxX2F2MV90aWxlX2xvZzIodGlsZV9pbmZvLT50aWxlX3Jvd3MpKQo+ICsJ aWYgKGhhbnRyb19hdjFfdGlsZV9sb2cyKHRpbGVfaW5mby0+dGlsZV9jb2xzKSB8fAo+ICsJICAg IGhhbnRyb19hdjFfdGlsZV9sb2cyKHRpbGVfaW5mby0+dGlsZV9yb3dzKSkKPiAgIAkJaGFudHJv X3JlZ193cml0ZSh2cHUsICZhdjFfZGVjX3RpbGVfc2l6ZV9tYWcsIHRpbGVfaW5mby0+dGlsZV9z aXplX2J5dGVzIC0gMSk7Cj4gICAJZWxzZQo+ICAgCQloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2 MV9kZWNfdGlsZV9zaXplX21hZywgMyk7Cj4gQEAgLTY0MCw1MCArNTMsNiBAQCBzdGF0aWMgdm9p ZCByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19zZXRfdGlsZV9pbmZvKHN0cnVjdCBoYW50cm9fY3R4 ICpjdHgpCj4gICAJaGFudHJvX3dyaXRlX2FkZHIodnB1LCBBVjFfVElMRV9CQVNFLCBhdjFfZGVj LT50aWxlX2luZm8uZG1hKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50IHJvY2tjaGlwX3ZwdTk4 MV9hdjFfZGVjX2dldF9kaXN0KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsCj4gLQkJCQkJICAgIGlu dCBhLCBpbnQgYikKPiAtewo+IC0Jc3RydWN0IGhhbnRyb19hdjFfZGVjX2h3X2N0eCAqYXYxX2Rl YyA9ICZjdHgtPmF2MV9kZWM7Cj4gLQlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfY3RybHMgKmN0cmxz ID0gJmF2MV9kZWMtPmN0cmxzOwo+IC0JaW50IGJpdHMgPSBjdHJscy0+c2VxdWVuY2UtPm9yZGVy X2hpbnRfYml0cyAtIDE7Cj4gLQlpbnQgZGlmZiwgbTsKPiAtCj4gLQlpZiAoIWN0cmxzLT5zZXF1 ZW5jZS0+b3JkZXJfaGludF9iaXRzKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCWRpZmYgPSBhIC0g YjsKPiAtCW0gPSAxIDw8IGJpdHM7Cj4gLQlkaWZmID0gKGRpZmYgJiAobSAtIDEpKSAtIChkaWZm ICYgbSk7Cj4gLQo+IC0JcmV0dXJuIGRpZmY7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHJvY2tj aGlwX3ZwdTk4MV9hdjFfZGVjX3NldF9mcmFtZV9zaWduX2JpYXMoc3RydWN0IGhhbnRyb19jdHgg KmN0eCkKPiAtewo+IC0Jc3RydWN0IGhhbnRyb19hdjFfZGVjX2h3X2N0eCAqYXYxX2RlYyA9ICZj dHgtPmF2MV9kZWM7Cj4gLQlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfY3RybHMgKmN0cmxzID0gJmF2 MV9kZWMtPmN0cmxzOwo+IC0JY29uc3Qgc3RydWN0IHY0bDJfY3RybF9hdjFfZnJhbWUgKmZyYW1l ID0gY3RybHMtPmZyYW1lOwo+IC0JY29uc3Qgc3RydWN0IHY0bDJfY3RybF9hdjFfc2VxdWVuY2Ug KnNlcXVlbmNlID0gY3RybHMtPnNlcXVlbmNlOwo+IC0JaW50IGk7Cj4gLQo+IC0JaWYgKCFzZXF1 ZW5jZS0+b3JkZXJfaGludF9iaXRzIHx8IElTX0lOVFJBKGZyYW1lLT5mcmFtZV90eXBlKSkgewo+ IC0JCWZvciAoaSA9IDA7IGkgPCBWNEwyX0FWMV9UT1RBTF9SRUZTX1BFUl9GUkFNRTsgaSsrKQo+ IC0JCQlhdjFfZGVjLT5yZWZfZnJhbWVfc2lnbl9iaWFzW2ldID0gMDsKPiAtCj4gLQkJcmV0dXJu Owo+IC0JfQo+IC0JLy8gSWRlbnRpZnkgdGhlIG5lYXJlc3QgZm9yd2FyZCBhbmQgYmFja3dhcmQg cmVmZXJlbmNlcy4KPiAtCWZvciAoaSA9IDA7IGkgPCBWNEwyX0FWMV9UT1RBTF9SRUZTX1BFUl9G UkFNRSAtIDE7IGkrKykgewo+IC0JCWlmIChyb2NrY2hpcF92cHU5ODFfZ2V0X2ZyYW1lX2luZGV4 KGN0eCwgaSkgPj0gMCkgewo+IC0JCQlpbnQgcmVsX29mZiA9Cj4gLQkJCSAgICByb2NrY2hpcF92 cHU5ODFfYXYxX2RlY19nZXRfZGlzdChjdHgsCj4gLQkJCQkJCQkgICAgIHJvY2tjaGlwX3ZwdTk4 MV9nZXRfb3JkZXJfaGludChjdHgsIGkpLAo+IC0JCQkJCQkJICAgICBmcmFtZS0+b3JkZXJfaGlu dCk7Cj4gLQkJCWF2MV9kZWMtPnJlZl9mcmFtZV9zaWduX2JpYXNbaSArIDFdID0gKHJlbF9vZmYg PD0gMCkgPyAwIDogMTsKPiAtCQl9Cj4gLQl9Cj4gLX0KPiAtCj4gICBzdGF0aWMgYm9vbAo+ICAg cm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfc2V0X3JlZihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LCBp bnQgcmVmLCBpbnQgaWR4LAo+ICAgCQkJCWludCB3aWR0aCwgaW50IGhlaWdodCkKPiBAQCAtODA2 LDEyICsxNzUsMTIgQEAgc3RhdGljIHZvaWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfc2V0X3Nl Z21lbnRhdGlvbihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+ICAgCj4gICAJaWYgKCEhKHNlZy0+ ZmxhZ3MgJiBWNEwyX0FWMV9TRUdNRU5UQVRJT05fRkxBR19FTkFCTEVEKSAmJgo+ICAgCSAgICBm cmFtZS0+cHJpbWFyeV9yZWZfZnJhbWUgPCBWNEwyX0FWMV9SRUZTX1BFUl9GUkFNRSkgewo+IC0J CWludCBpZHggPSByb2NrY2hpcF92cHU5ODFfZ2V0X2ZyYW1lX2luZGV4KGN0eCwgZnJhbWUtPnBy aW1hcnlfcmVmX2ZyYW1lKTsKPiArCQlpbnQgaWR4ID0gaGFudHJvX2F2MV9nZXRfZnJhbWVfaW5k ZXgoY3R4LCBmcmFtZS0+cHJpbWFyeV9yZWZfZnJhbWUpOwo+ICAgCj4gLQkJaWYgKGlkeCA+PSAw KSB7Cj4gKwkJaWYgKGlkeCAhPSBBVjFfSU5WQUxJRF9JRFgpIHsKPiAgIAkJCWRtYV9hZGRyX3Qg bHVtYV9hZGRyLCBtdl9hZGRyID0gMDsKPiAgIAkJCXN0cnVjdCBoYW50cm9fZGVjb2RlZF9idWZm ZXIgKnNlZzsKPiAtCQkJc2l6ZV90IG12X29mZnNldCA9IHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVj X2Nocm9tYV9zaXplKGN0eCk7Cj4gKwkJCXNpemVfdCBtdl9vZmZzZXQgPSBoYW50cm9fYXYxX2No cm9tYV9zaXplKGN0eCk7Cj4gICAKPiAgIAkJCXNlZyA9IHZiMl90b19oYW50cm9fZGVjb2RlZF9i dWYoJmF2MV9kZWMtPmZyYW1lX3JlZnNbaWR4XS52YjJfcmVmLT52YjJfYnVmKTsKPiAgIAkJCWx1 bWFfYWRkciA9IGhhbnRyb19nZXRfZGVjX2J1Zl9hZGRyKGN0eCwgJnNlZy0+YmFzZS52Yi52YjJf YnVmKTsKPiBAQCAtMTA0MSwzNSArNDEwLDYgQEAgc3RhdGljIHZvaWQgcm9ja2NoaXBfdnB1OTgx X2F2MV9kZWNfc2V0X3NlZ21lbnRhdGlvbihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+ICAgCQkJ IHNlZ3ZhbFs3XVtWNEwyX0FWMV9TRUdfTFZMX1JFRl9HTE9CQUxNVl0pOwo+ICAgfQo+ICAgCj4g LXN0YXRpYyBib29sIHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX2lzX2xvc3NsZXNzKHN0cnVjdCBo YW50cm9fY3R4ICpjdHgpCj4gLXsKPiAtCXN0cnVjdCBoYW50cm9fYXYxX2RlY19od19jdHggKmF2 MV9kZWMgPSAmY3R4LT5hdjFfZGVjOwo+IC0Jc3RydWN0IGhhbnRyb19hdjFfZGVjX2N0cmxzICpj dHJscyA9ICZhdjFfZGVjLT5jdHJsczsKPiAtCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfYXYxX2Zy YW1lICpmcmFtZSA9IGN0cmxzLT5mcmFtZTsKPiAtCWNvbnN0IHN0cnVjdCB2NGwyX2F2MV9zZWdt ZW50YXRpb24gKnNlZ21lbnRhdGlvbiA9ICZmcmFtZS0+c2VnbWVudGF0aW9uOwo+IC0JY29uc3Qg c3RydWN0IHY0bDJfYXYxX3F1YW50aXphdGlvbiAqcXVhbnRpemF0aW9uID0gJmZyYW1lLT5xdWFu dGl6YXRpb247Cj4gLQlpbnQgaTsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgVjRMMl9BVjFfTUFY X1NFR01FTlRTOyBpKyspIHsKPiAtCQlpbnQgcWluZGV4ID0gcXVhbnRpemF0aW9uLT5iYXNlX3Ff aWR4Owo+IC0KPiAtCQlpZiAoc2VnbWVudGF0aW9uLT5mZWF0dXJlX2VuYWJsZWRbaV0gJgo+IC0J CSAgICBWNEwyX0FWMV9TRUdNRU5UX0ZFQVRVUkVfRU5BQkxFRChWNEwyX0FWMV9TRUdfTFZMX0FM VF9RKSkgewo+IC0JCQlxaW5kZXggKz0gc2VnbWVudGF0aW9uLT5mZWF0dXJlX2RhdGFbaV1bVjRM Ml9BVjFfU0VHX0xWTF9BTFRfUV07Cj4gLQkJfQo+IC0JCXFpbmRleCA9IGNsYW1wKHFpbmRleCwg MCwgMjU1KTsKPiAtCj4gLQkJaWYgKHFpbmRleCB8fAo+IC0JCSAgICBxdWFudGl6YXRpb24tPmRl bHRhX3FfeV9kYyB8fAo+IC0JCSAgICBxdWFudGl6YXRpb24tPmRlbHRhX3FfdV9kYyB8fAo+IC0J CSAgICBxdWFudGl6YXRpb24tPmRlbHRhX3FfdV9hYyB8fAo+IC0JCSAgICBxdWFudGl6YXRpb24t PmRlbHRhX3Ffdl9kYyB8fAo+IC0JCSAgICBxdWFudGl6YXRpb24tPmRlbHRhX3Ffdl9hYykKPiAt CQkJcmV0dXJuIGZhbHNlOwo+IC0JfQo+IC0JcmV0dXJuIHRydWU7Cj4gLX0KPiAtCj4gICBzdGF0 aWMgdm9pZCByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19zZXRfbG9vcGZpbHRlcihzdHJ1Y3QgaGFu dHJvX2N0eCAqY3R4KQo+ICAgewo+ICAgCXN0cnVjdCBoYW50cm9fYXYxX2RlY19od19jdHggKmF2 MV9kZWMgPSAmY3R4LT5hdjFfZGVjOwo+IEBAIC0xMDg5LDcgKzQyOSw3IEBAIHN0YXRpYyB2b2lk IHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX3NldF9sb29wZmlsdGVyKHN0cnVjdCBoYW50cm9fY3R4 ICpjdHgpCj4gICAJaGFudHJvX3JlZ193cml0ZSh2cHUsICZhdjFfZmlsdF9sZXZlbDMsIGxvb3Bf ZmlsdGVyLT5sZXZlbFszXSk7Cj4gICAKPiAgIAlpZiAobG9vcF9maWx0ZXItPmZsYWdzICYgVjRM Ml9BVjFfTE9PUF9GSUxURVJfRkxBR19ERUxUQV9FTkFCTEVEICYmCj4gLQkgICAgIXJvY2tjaGlw X3ZwdTk4MV9hdjFfZGVjX2lzX2xvc3NsZXNzKGN0eCkgJiYKPiArCSAgICAhaGFudHJvX2F2MV9p c19sb3NzbGVzcyhjdHgpICYmCj4gICAJICAgICEoZnJhbWUtPmZsYWdzICYgVjRMMl9BVjFfRlJB TUVfRkxBR19BTExPV19JTlRSQUJDKSkgewo+ICAgCQloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2 MV9maWx0X3JlZl9hZGpfMCwKPiAgIAkJCQkgbG9vcF9maWx0ZXItPnJlZl9kZWx0YXNbMF0pOwo+ IEBAIC0xMTI4LDEyMSArNDY4LDI3IEBAIHN0YXRpYyB2b2lkIHJvY2tjaGlwX3ZwdTk4MV9hdjFf ZGVjX3NldF9sb29wZmlsdGVyKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gICAJaGFudHJvX3dy aXRlX2FkZHIodnB1LCBBVjFfREJfQ1RSTF9DT0wsIGF2MV9kZWMtPmRiX2N0cmxfY29sLmRtYSk7 Cj4gICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfdXBkYXRl X3Byb2Ioc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPiAtewo+IC0Jc3RydWN0IGhhbnRyb19hdjFf ZGVjX2h3X2N0eCAqYXYxX2RlYyA9ICZjdHgtPmF2MV9kZWM7Cj4gLQlzdHJ1Y3QgaGFudHJvX2F2 MV9kZWNfY3RybHMgKmN0cmxzID0gJmF2MV9kZWMtPmN0cmxzOwo+IC0JY29uc3Qgc3RydWN0IHY0 bDJfY3RybF9hdjFfZnJhbWUgKmZyYW1lID0gY3RybHMtPmZyYW1lOwo+IC0JYm9vbCBmcmFtZV9p c19pbnRyYSA9IElTX0lOVFJBKGZyYW1lLT5mcmFtZV90eXBlKTsKPiAtCXN0cnVjdCBhdjFjZGZz ICpvdXRfY2RmcyA9IChzdHJ1Y3QgYXYxY2RmcyAqKWF2MV9kZWMtPnByb2JfdGJsX291dC5jcHU7 Cj4gLQlpbnQgaTsKPiAtCj4gLQlpZiAoZnJhbWUtPmZsYWdzICYgVjRMMl9BVjFfRlJBTUVfRkxB R19ESVNBQkxFX0ZSQU1FX0VORF9VUERBVEVfQ0RGKQo+IC0JCXJldHVybjsKPiAtCj4gLQlmb3Ig KGkgPSAwOyBpIDwgTlVNX1JFRl9GUkFNRVM7IGkrKykgewo+IC0JCWlmIChmcmFtZS0+cmVmcmVz aF9mcmFtZV9mbGFncyAmIEJJVChpKSkgewo+IC0JCQlzdHJ1Y3QgbXZjZGZzIHN0b3JlZF9tdl9j ZGY7Cj4gLQo+IC0JCQlyb2NrY2hpcF9hdjFfZ2V0X2NkZnMoY3R4LCBpKTsKPiAtCQkJc3RvcmVk X212X2NkZiA9IGF2MV9kZWMtPmNkZnMtPm12X2NkZjsKPiAtCQkJKmF2MV9kZWMtPmNkZnMgPSAq b3V0X2NkZnM7Cj4gLQkJCWlmIChmcmFtZV9pc19pbnRyYSkgewo+IC0JCQkJYXYxX2RlYy0+Y2Rm cy0+bXZfY2RmID0gc3RvcmVkX212X2NkZjsKPiAtCQkJCSphdjFfZGVjLT5jZGZzX25kdmMgPSBv dXRfY2Rmcy0+bXZfY2RmOwo+IC0JCQl9Cj4gLQkJCXJvY2tjaGlwX2F2MV9zdG9yZV9jZGZzKGN0 eCwKPiAtCQkJCQkJZnJhbWUtPnJlZnJlc2hfZnJhbWVfZmxhZ3MpOwo+IC0JCQlicmVhazsKPiAt CQl9Cj4gLQl9Cj4gLX0KPiAtCj4gLXZvaWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfZG9uZShz dHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+IC17Cj4gLQlyb2NrY2hpcF92cHU5ODFfYXYxX2RlY191 cGRhdGVfcHJvYihjdHgpOwo+IC19Cj4gLQo+ICAgc3RhdGljIHZvaWQgcm9ja2NoaXBfdnB1OTgx X2F2MV9kZWNfc2V0X3Byb2Ioc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPiAgIHsKPiAgIAlzdHJ1 Y3QgaGFudHJvX2F2MV9kZWNfaHdfY3R4ICphdjFfZGVjID0gJmN0eC0+YXYxX2RlYzsKPiAtCXN0 cnVjdCBoYW50cm9fYXYxX2RlY19jdHJscyAqY3RybHMgPSAmYXYxX2RlYy0+Y3RybHM7Cj4gLQlj b25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2F2MV9mcmFtZSAqZnJhbWUgPSBjdHJscy0+ZnJhbWU7Cj4g LQljb25zdCBzdHJ1Y3QgdjRsMl9hdjFfcXVhbnRpemF0aW9uICpxdWFudGl6YXRpb24gPSAmZnJh bWUtPnF1YW50aXphdGlvbjsKPiAgIAlzdHJ1Y3QgaGFudHJvX2RldiAqdnB1ID0gY3R4LT5kZXY7 Cj4gLQlib29sIGVycm9yX3Jlc2lsaWVudF9tb2RlID0KPiAtCSAgICAhIShmcmFtZS0+ZmxhZ3Mg JiBWNEwyX0FWMV9GUkFNRV9GTEFHX0VSUk9SX1JFU0lMSUVOVF9NT0RFKTsKPiAtCWJvb2wgZnJh bWVfaXNfaW50cmEgPSBJU19JTlRSQShmcmFtZS0+ZnJhbWVfdHlwZSk7Cj4gLQo+IC0JaWYgKGVy cm9yX3Jlc2lsaWVudF9tb2RlIHx8IGZyYW1lX2lzX2ludHJhIHx8Cj4gLQkgICAgZnJhbWUtPnBy aW1hcnlfcmVmX2ZyYW1lID09IEFWMV9QUklNQVJZX1JFRl9OT05FKSB7Cj4gLQkJYXYxX2RlYy0+ Y2RmcyA9ICZhdjFfZGVjLT5kZWZhdWx0X2NkZnM7Cj4gLQkJYXYxX2RlYy0+Y2Rmc19uZHZjID0g JmF2MV9kZWMtPmRlZmF1bHRfY2Rmc19uZHZjOwo+IC0JCXJvY2tjaGlwX2F2MV9kZWZhdWx0X2Nv ZWZmX3Byb2JzKHF1YW50aXphdGlvbi0+YmFzZV9xX2lkeCwKPiAtCQkJCQkJIGF2MV9kZWMtPmNk ZnMpOwo+IC0JfSBlbHNlIHsKPiAtCQlyb2NrY2hpcF9hdjFfZ2V0X2NkZnMoY3R4LCBmcmFtZS0+ cmVmX2ZyYW1lX2lkeFtmcmFtZS0+cHJpbWFyeV9yZWZfZnJhbWVdKTsKPiAtCX0KPiAtCXJvY2tj aGlwX2F2MV9zdG9yZV9jZGZzKGN0eCwgZnJhbWUtPnJlZnJlc2hfZnJhbWVfZmxhZ3MpOwo+IC0K PiAtCW1lbWNweShhdjFfZGVjLT5wcm9iX3RibC5jcHUsIGF2MV9kZWMtPmNkZnMsIHNpemVvZihz dHJ1Y3QgYXYxY2RmcykpOwo+IC0KPiAtCWlmIChmcmFtZV9pc19pbnRyYSkgewo+IC0JCWludCBt dl9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgYXYxY2RmcywgbXZfY2RmKTsKPiAtCQkvKiBPdmVy d3JpdGUgTVYgY29udGV4dCBhcmVhIHdpdGggaW50cmFiYyBNViBjb250ZXh0ICovCj4gLQkJbWVt Y3B5KGF2MV9kZWMtPnByb2JfdGJsLmNwdSArIG12X29mZnNldCwgYXYxX2RlYy0+Y2Rmc19uZHZj LAo+IC0JCSAgICAgICBzaXplb2Yoc3RydWN0IG12Y2RmcykpOwo+IC0JfQo+ICAgCj4gKwloYW50 cm9fYXYxX3NldF9wcm9iKGN0eCk7Cj4gICAJaGFudHJvX3dyaXRlX2FkZHIodnB1LCBBVjFfUFJP UF9UQUJMRV9PVVQsIGF2MV9kZWMtPnByb2JfdGJsX291dC5kbWEpOwo+ICAgCWhhbnRyb193cml0 ZV9hZGRyKHZwdSwgQVYxX1BST1BfVEFCTEUsIGF2MV9kZWMtPnByb2JfdGJsLmRtYSk7Cj4gICB9 Cj4gICAKPiAtc3RhdGljIHZvaWQKPiAtcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfaW5pdF9zY2Fs aW5nX2Z1bmN0aW9uKGNvbnN0IHU4ICp2YWx1ZXMsIGNvbnN0IHU4ICpzY2FsaW5nLAo+IC0JCQkJ CSAgICAgIHU4IG51bV9wb2ludHMsIHU4ICpzY2FsaW5nX2x1dCkKPiAtewo+IC0JaW50IGksIHBv aW50Owo+IC0KPiAtCWlmIChudW1fcG9pbnRzID09IDApIHsKPiAtCQltZW1zZXQoc2NhbGluZ19s dXQsIDAsIDI1Nik7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCWZvciAocG9pbnQgPSAwOyBw b2ludCA8IG51bV9wb2ludHMgLSAxOyBwb2ludCsrKSB7Cj4gLQkJaW50IHg7Cj4gLQkJczMyIGRl bHRhX3kgPSBzY2FsaW5nW3BvaW50ICsgMV0gLSBzY2FsaW5nW3BvaW50XTsKPiAtCQlzMzIgZGVs dGFfeCA9IHZhbHVlc1twb2ludCArIDFdIC0gdmFsdWVzW3BvaW50XTsKPiAtCQlzNjQgZGVsdGEg PQo+IC0JCSAgICBkZWx0YV94ID8gZGVsdGFfeSAqICgoNjU1MzYgKyAoZGVsdGFfeCA+PiAxKSkg Lwo+IC0JCQkJCSBkZWx0YV94KSA6IDA7Cj4gLQo+IC0JCWZvciAoeCA9IDA7IHggPCBkZWx0YV94 OyB4KyspIHsKPiAtCQkJc2NhbGluZ19sdXRbdmFsdWVzW3BvaW50XSArIHhdID0KPiAtCQkJICAg IHNjYWxpbmdbcG9pbnRdICsKPiAtCQkJICAgIChzMzIpKCh4ICogZGVsdGEgKyAzMjc2OCkgPj4g MTYpOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlmb3IgKGkgPSB2YWx1ZXNbbnVtX3BvaW50cyAtIDFd OyBpIDwgMjU2OyBpKyspCj4gLQkJc2NhbGluZ19sdXRbaV0gPSBzY2FsaW5nW251bV9wb2ludHMg LSAxXTsKPiAtfQo+ICAgCj4gICBzdGF0aWMgdm9pZCByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19z ZXRfZmdzKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gICB7Cj4gICAJc3RydWN0IGhhbnRyb19h djFfZGVjX2h3X2N0eCAqYXYxX2RlYyA9ICZjdHgtPmF2MV9kZWM7Cj4gICAJc3RydWN0IGhhbnRy b19hdjFfZGVjX2N0cmxzICpjdHJscyA9ICZhdjFfZGVjLT5jdHJsczsKPiAgIAljb25zdCBzdHJ1 Y3QgdjRsMl9jdHJsX2F2MV9maWxtX2dyYWluICpmaWxtX2dyYWluID0gY3RybHMtPmZpbG1fZ3Jh aW47Cj4gLQlzdHJ1Y3Qgcm9ja2NoaXBfYXYxX2ZpbG1fZ3JhaW4gKmZnbWVtID0gYXYxX2RlYy0+ ZmlsbV9ncmFpbi5jcHU7Cj4gKwlzdHJ1Y3QgaGFudHJvX2F2MV9maWxtX2dyYWluICpmZ21lbSA9 IGF2MV9kZWMtPmZpbG1fZ3JhaW4uY3B1Owo+ICAgCXN0cnVjdCBoYW50cm9fZGV2ICp2cHUgPSBj dHgtPmRldjsKPiAgIAlib29sIHNjYWxpbmdfZnJvbV9sdW1hID0KPiAgIAkJISEoZmlsbV9ncmFp bi0+ZmxhZ3MgJiBWNEwyX0FWMV9GSUxNX0dSQUlOX0ZMQUdfQ0hST01BX1NDQUxJTkdfRlJPTV9M VU1BKTsKPiAtCXMzMiAoKmFyX2NvZWZmc195KVsyNF07Cj4gLQlzMzIgKCphcl9jb2VmZnNfY2Ip WzI1XTsKPiAtCXMzMiAoKmFyX2NvZWZmc19jcilbMjVdOwo+IC0JczMyICgqbHVtYV9ncmFpbl9i bG9jaylbNzNdWzgyXTsKPiAtCXMzMiAoKmNiX2dyYWluX2Jsb2NrKVszOF1bNDRdOwo+IC0JczMy ICgqY3JfZ3JhaW5fYmxvY2spWzM4XVs0NF07Cj4gKwlzdHJ1Y3QgaGFudHJvX2F2MV9jb2VmZnNf Z3JhaW5fYmxvY2sgKmNvZWZmczsKPiAgIAlzMzIgYXJfY29lZmZfbGFnLCBhcl9jb2VmZl9zaGlm dDsKPiAgIAlzMzIgZ3JhaW5fc2NhbGVfc2hpZnQsIGJpdGRlcHRoOwo+ICAgCXMzMiBncmFpbl9j ZW50ZXIsIGdyYWluX21pbiwgZ3JhaW5fbWF4Owo+IEBAIC0xMjY5LDE4ICs1MTUsOSBAQCBzdGF0 aWMgdm9pZCByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19zZXRfZmdzKHN0cnVjdCBoYW50cm9fY3R4 ICpjdHgpCj4gICAJCXJldHVybjsKPiAgIAl9Cj4gICAKPiAtCWFyX2NvZWZmc195ID0ga3phbGxv YyhzaXplb2YoaW50MzJfdCkgKiAyNCwgR0ZQX0tFUk5FTCk7Cj4gLQlhcl9jb2VmZnNfY2IgPSBr emFsbG9jKHNpemVvZihpbnQzMl90KSAqIDI1LCBHRlBfS0VSTkVMKTsKPiAtCWFyX2NvZWZmc19j ciA9IGt6YWxsb2Moc2l6ZW9mKGludDMyX3QpICogMjUsIEdGUF9LRVJORUwpOwo+IC0JbHVtYV9n cmFpbl9ibG9jayA9IGt6YWxsb2Moc2l6ZW9mKGludDMyX3QpICogNzMgKiA4MiwgR0ZQX0tFUk5F TCk7Cj4gLQljYl9ncmFpbl9ibG9jayA9IGt6YWxsb2Moc2l6ZW9mKGludDMyX3QpICogMzggKiA0 NCwgR0ZQX0tFUk5FTCk7Cj4gLQljcl9ncmFpbl9ibG9jayA9IGt6YWxsb2Moc2l6ZW9mKGludDMy X3QpICogMzggKiA0NCwgR0ZQX0tFUk5FTCk7Cj4gLQo+IC0JaWYgKCFhcl9jb2VmZnNfeSB8fCAh YXJfY29lZmZzX2NiIHx8ICFhcl9jb2VmZnNfY3IgfHwKPiAtCSAgICAhbHVtYV9ncmFpbl9ibG9j ayB8fCAhY2JfZ3JhaW5fYmxvY2sgfHwgIWNyX2dyYWluX2Jsb2NrKSB7Cj4gLQkJcHJfd2Fybigi RmFpbCBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgZmlsbSBncmFpbiBwYXJhbWV0ZXJzXG4iKTsKPiAt CQlnb3RvIGFsbG9jX2ZhaWw7Cj4gLQl9Cj4gKwljb2VmZnMgPSBremFsbG9jKHNpemVvZigqY29l ZmZzKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWNvZWZmcykKPiArCQlyZXR1cm47Cj4gICAKPiAg IAloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9hcHBseV9ncmFpbiwgMSk7Cj4gICAKPiBAQCAt MTMxNiwxMCArNTUzLDEwIEBAIHN0YXRpYyB2b2lkIHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX3Nl dF9mZ3Moc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPiAgIAloYW50cm9fcmVnX3dyaXRlKHZwdSwg JmF2MV9jaHJvbWFfc2NhbGluZ19mcm9tX2x1bWEsIHNjYWxpbmdfZnJvbV9sdW1hKTsKPiAgIAlo YW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9yYW5kb21fc2VlZCwgZmlsbV9ncmFpbi0+Z3JhaW5f c2VlZCk7Cj4gICAKPiAtCXJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX2luaXRfc2NhbGluZ19mdW5j dGlvbihmaWxtX2dyYWluLT5wb2ludF95X3ZhbHVlLAo+IC0JCQkJCQkgICAgICBmaWxtX2dyYWlu LT5wb2ludF95X3NjYWxpbmcsCj4gLQkJCQkJCSAgICAgIGZpbG1fZ3JhaW4tPm51bV95X3BvaW50 cywKPiAtCQkJCQkJICAgICAgZmdtZW0tPnNjYWxpbmdfbHV0X3kpOwo+ICsJaGFudHJvX2F2MV9p bml0X3NjYWxpbmdfZnVuY3Rpb24oZmlsbV9ncmFpbi0+cG9pbnRfeV92YWx1ZSwKPiArCQkJCQkg ZmlsbV9ncmFpbi0+cG9pbnRfeV9zY2FsaW5nLAo+ICsJCQkJCSBmaWxtX2dyYWluLT5udW1feV9w b2ludHMsCj4gKwkJCQkJIGZnbWVtLT5zY2FsaW5nX2x1dF95KTsKPiAgIAo+ICAgCWlmIChmaWxt X2dyYWluLT5mbGFncyAmCj4gICAJICAgIFY0TDJfQVYxX0ZJTE1fR1JBSU5fRkxBR19DSFJPTUFf U0NBTElOR19GUk9NX0xVTUEpIHsKPiBAQCAtMTMyOCwxOSArNTY1LDE5IEBAIHN0YXRpYyB2b2lk IHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX3NldF9mZ3Moc3RydWN0IGhhbnRyb19jdHggKmN0eCkK PiAgIAkJbWVtY3B5KGZnbWVtLT5zY2FsaW5nX2x1dF9jciwgZmdtZW0tPnNjYWxpbmdfbHV0X3ks Cj4gICAJCSAgICAgICBzaXplb2YoKmZnbWVtLT5zY2FsaW5nX2x1dF95KSAqIDI1Nik7Cj4gICAJ fSBlbHNlIHsKPiAtCQlyb2NrY2hpcF92cHU5ODFfYXYxX2RlY19pbml0X3NjYWxpbmdfZnVuY3Rp b24KPiArCQloYW50cm9fYXYxX2luaXRfc2NhbGluZ19mdW5jdGlvbgo+ICAgCQkgICAgKGZpbG1f Z3JhaW4tPnBvaW50X2NiX3ZhbHVlLCBmaWxtX2dyYWluLT5wb2ludF9jYl9zY2FsaW5nLAo+ICAg CQkgICAgIGZpbG1fZ3JhaW4tPm51bV9jYl9wb2ludHMsIGZnbWVtLT5zY2FsaW5nX2x1dF9jYik7 Cj4gLQkJcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfaW5pdF9zY2FsaW5nX2Z1bmN0aW9uCj4gKwkJ aGFudHJvX2F2MV9pbml0X3NjYWxpbmdfZnVuY3Rpb24KPiAgIAkJICAgIChmaWxtX2dyYWluLT5w b2ludF9jcl92YWx1ZSwgZmlsbV9ncmFpbi0+cG9pbnRfY3Jfc2NhbGluZywKPiAgIAkJICAgICBm aWxtX2dyYWluLT5udW1fY3JfcG9pbnRzLCBmZ21lbS0+c2NhbGluZ19sdXRfY3IpOwo+ICAgCX0K PiAgIAo+ICAgCWZvciAoaSA9IDA7IGkgPCBWNEwyX0FWMV9BUl9DT0VGRlNfU0laRTsgaSsrKSB7 Cj4gICAJCWlmIChpIDwgMjQpCj4gLQkJCSgqYXJfY29lZmZzX3kpW2ldID0gZmlsbV9ncmFpbi0+ YXJfY29lZmZzX3lfcGx1c18xMjhbaV0gLSAxMjg7Cj4gLQkJKCphcl9jb2VmZnNfY2IpW2ldID0g ZmlsbV9ncmFpbi0+YXJfY29lZmZzX2NiX3BsdXNfMTI4W2ldIC0gMTI4Owo+IC0JCSgqYXJfY29l ZmZzX2NyKVtpXSA9IGZpbG1fZ3JhaW4tPmFyX2NvZWZmc19jcl9wbHVzXzEyOFtpXSAtIDEyODsK PiArCQkJY29lZmZzLT5hcl9jb2VmZnNfeVtpXSA9IGZpbG1fZ3JhaW4tPmFyX2NvZWZmc195X3Bs dXNfMTI4W2ldIC0gMTI4Owo+ICsJCWNvZWZmcy0+YXJfY29lZmZzX2NiW2ldID0gZmlsbV9ncmFp bi0+YXJfY29lZmZzX2NiX3BsdXNfMTI4W2ldIC0gMTI4Owo+ICsJCWNvZWZmcy0+YXJfY29lZmZz X2NyW2ldID0gZmlsbV9ncmFpbi0+YXJfY29lZmZzX2NyX3BsdXNfMTI4W2ldIC0gMTI4Owo+ICAg CX0KPiAgIAo+ICAgCWFyX2NvZWZmX2xhZyA9IGZpbG1fZ3JhaW4tPmFyX2NvZWZmX2xhZzsKPiBA QCAtMTM1MSw0NiArNTg4LDM4IEBAIHN0YXRpYyB2b2lkIHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVj X3NldF9mZ3Moc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPiAgIAlncmFpbl9taW4gPSAwIC0gZ3Jh aW5fY2VudGVyOwo+ICAgCWdyYWluX21heCA9ICgyNTYgPDwgKGJpdGRlcHRoIC0gOCkpIC0gMSAt IGdyYWluX2NlbnRlcjsKPiAgIAo+IC0Jcm9ja2NoaXBfYXYxX2dlbmVyYXRlX2x1bWFfZ3JhaW5f YmxvY2sobHVtYV9ncmFpbl9ibG9jaywgYml0ZGVwdGgsCj4gLQkJCQkJICAgICAgIGZpbG1fZ3Jh aW4tPm51bV95X3BvaW50cywgZ3JhaW5fc2NhbGVfc2hpZnQsCj4gLQkJCQkJICAgICAgIGFyX2Nv ZWZmX2xhZywgYXJfY29lZmZzX3ksIGFyX2NvZWZmX3NoaWZ0LAo+IC0JCQkJCSAgICAgICBncmFp bl9taW4sIGdyYWluX21heCwgZmlsbV9ncmFpbi0+Z3JhaW5fc2VlZCk7Cj4gLQo+IC0Jcm9ja2No aXBfYXYxX2dlbmVyYXRlX2Nocm9tYV9ncmFpbl9ibG9jayhsdW1hX2dyYWluX2Jsb2NrLCBjYl9n cmFpbl9ibG9jaywKPiAtCQkJCQkJIGNyX2dyYWluX2Jsb2NrLCBiaXRkZXB0aCwKPiAtCQkJCQkJ IGZpbG1fZ3JhaW4tPm51bV95X3BvaW50cywKPiAtCQkJCQkJIGZpbG1fZ3JhaW4tPm51bV9jYl9w b2ludHMsCj4gLQkJCQkJCSBmaWxtX2dyYWluLT5udW1fY3JfcG9pbnRzLAo+IC0JCQkJCQkgZ3Jh aW5fc2NhbGVfc2hpZnQsIGFyX2NvZWZmX2xhZywgYXJfY29lZmZzX2NiLAo+IC0JCQkJCQkgYXJf Y29lZmZzX2NyLCBhcl9jb2VmZl9zaGlmdCwgZ3JhaW5fbWluLAo+IC0JCQkJCQkgZ3JhaW5fbWF4 LAo+IC0JCQkJCQkgc2NhbGluZ19mcm9tX2x1bWEsCj4gLQkJCQkJCSBmaWxtX2dyYWluLT5ncmFp bl9zZWVkKTsKPiArCWhhbnRyb19hdjFfZ2VuZXJhdGVfbHVtYV9ncmFpbl9ibG9jayhjb2VmZnMs IGJpdGRlcHRoLAo+ICsJCQkJCSAgICAgZmlsbV9ncmFpbi0+bnVtX3lfcG9pbnRzLCBncmFpbl9z Y2FsZV9zaGlmdCwKPiArCQkJCQkgICAgIGFyX2NvZWZmX2xhZywgYXJfY29lZmZfc2hpZnQsCj4g KwkJCQkJICAgICBncmFpbl9taW4sIGdyYWluX21heCwgZmlsbV9ncmFpbi0+Z3JhaW5fc2VlZCk7 Cj4gKwo+ICsJaGFudHJvX2F2MV9nZW5lcmF0ZV9jaHJvbWFfZ3JhaW5fYmxvY2soY29lZmZzLCBi aXRkZXB0aCwKPiArCQkJCQkgICAgICAgZmlsbV9ncmFpbi0+bnVtX3lfcG9pbnRzLAo+ICsJCQkJ CSAgICAgICBmaWxtX2dyYWluLT5udW1fY2JfcG9pbnRzLAo+ICsJCQkJCSAgICAgICBmaWxtX2dy YWluLT5udW1fY3JfcG9pbnRzLAo+ICsJCQkJCSAgICAgICBncmFpbl9zY2FsZV9zaGlmdCwgYXJf Y29lZmZfbGFnLAo+ICsJCQkJCSAgICAgICBhcl9jb2VmZl9zaGlmdCwgZ3JhaW5fbWluLAo+ICsJ CQkJCSAgICAgICBncmFpbl9tYXgsCj4gKwkJCQkJICAgICAgIHNjYWxpbmdfZnJvbV9sdW1hLAo+ ICsJCQkJCSAgICAgICBmaWxtX2dyYWluLT5ncmFpbl9zZWVkKTsKPiAgIAo+ICAgCWZvciAoaSA9 IDA7IGkgPCA2NDsgaSsrKSB7Cj4gICAJCWZvciAoaiA9IDA7IGogPCA2NDsgaisrKQo+ICAgCQkJ ZmdtZW0tPmNyb3BwZWRfbHVtYV9ncmFpbl9ibG9ja1tpICogNjQgKyBqXSA9Cj4gLQkJCQkoKmx1 bWFfZ3JhaW5fYmxvY2spW2kgKyA5XVtqICsgOV07Cj4gKwkJCQljb2VmZnMtPmx1bWFfZ3JhaW5f YmxvY2tbaSArIDldW2ogKyA5XTsKPiAgIAl9Cj4gICAKPiAgIAlmb3IgKGkgPSAwOyBpIDwgMzI7 IGkrKykgewo+ICAgCQlmb3IgKGogPSAwOyBqIDwgMzI7IGorKykgewo+ICAgCQkJZmdtZW0tPmNy b3BwZWRfY2hyb21hX2dyYWluX2Jsb2NrW2kgKiA2NCArIDIgKiBqXSA9Cj4gLQkJCQkoKmNiX2dy YWluX2Jsb2NrKVtpICsgNl1baiArIDZdOwo+ICsJCQkJY29lZmZzLT5jYl9ncmFpbl9ibG9ja1tp ICsgNl1baiArIDZdOwo+ICAgCQkJZmdtZW0tPmNyb3BwZWRfY2hyb21hX2dyYWluX2Jsb2NrW2kg KiA2NCArIDIgKiBqICsgMV0gPQo+IC0JCQkJKCpjcl9ncmFpbl9ibG9jaylbaSArIDZdW2ogKyA2 XTsKPiArCQkJCWNvZWZmcy0+Y3JfZ3JhaW5fYmxvY2tbaSArIDZdW2ogKyA2XTsKPiAgIAkJfQo+ ICAgCX0KPiAgIAo+ICsJa2ZyZWUoY29lZmZzKTsKPiAgIAloYW50cm9fd3JpdGVfYWRkcih2cHUs IEFWMV9GSUxNX0dSQUlOLCBhdjFfZGVjLT5maWxtX2dyYWluLmRtYSk7Cj4gLQo+IC1hbGxvY19m YWlsOgo+IC0Ja2ZyZWUoYXJfY29lZmZzX3kpOwo+IC0Ja2ZyZWUoYXJfY29lZmZzX2NiKTsKPiAt CWtmcmVlKGFyX2NvZWZmc19jcik7Cj4gLQlrZnJlZShsdW1hX2dyYWluX2Jsb2NrKTsKPiAtCWtm cmVlKGNiX2dyYWluX2Jsb2NrKTsKPiAtCWtmcmVlKGNyX2dyYWluX2Jsb2NrKTsKPiAgIH0KPiAg IAo+ICAgc3RhdGljIHZvaWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfc2V0X2NkZWYoc3RydWN0 IGhhbnRyb19jdHggKmN0eCkKPiBAQCAtMTYxNywxMyArODQ2LDEzIEBAIHN0YXRpYyB2b2lkIHJv Y2tjaGlwX3ZwdTk4MV9hdjFfZGVjX3NldF9vdGhlcl9mcmFtZXMoc3RydWN0IGhhbnRyb19jdHgg KmN0eCkKPiAgIAlpbnQgcmVmX2luZCA9IDA7Cj4gICAJaW50IHJmLCBpZHg7Cj4gICAKPiAtCWFs dF9mcmFtZV9vZmZzZXQgPSByb2NrY2hpcF92cHU5ODFfZ2V0X29yZGVyX2hpbnQoY3R4LCBBTFRf QlVGX0lEWCk7Cj4gLQlnbGRfZnJhbWVfb2Zmc2V0ID0gcm9ja2NoaXBfdnB1OTgxX2dldF9vcmRl cl9oaW50KGN0eCwgR0xEX0JVRl9JRFgpOwo+IC0JYndkX2ZyYW1lX29mZnNldCA9IHJvY2tjaGlw X3ZwdTk4MV9nZXRfb3JkZXJfaGludChjdHgsIEJXRF9CVUZfSURYKTsKPiAtCWFsdDJfZnJhbWVf b2Zmc2V0ID0gcm9ja2NoaXBfdnB1OTgxX2dldF9vcmRlcl9oaW50KGN0eCwgQUxUMl9CVUZfSURY KTsKPiArCWFsdF9mcmFtZV9vZmZzZXQgPSBoYW50cm9fYXYxX2dldF9vcmRlcl9oaW50KGN0eCwg QUxUX0JVRl9JRFgpOwo+ICsJZ2xkX2ZyYW1lX29mZnNldCA9IGhhbnRyb19hdjFfZ2V0X29yZGVy X2hpbnQoY3R4LCBHTERfQlVGX0lEWCk7Cj4gKwlid2RfZnJhbWVfb2Zmc2V0ID0gaGFudHJvX2F2 MV9nZXRfb3JkZXJfaGludChjdHgsIEJXRF9CVUZfSURYKTsKPiArCWFsdDJfZnJhbWVfb2Zmc2V0 ID0gaGFudHJvX2F2MV9nZXRfb3JkZXJfaGludChjdHgsIEFMVDJfQlVGX0lEWCk7Cj4gICAKPiAt CWlkeCA9IHJvY2tjaGlwX3ZwdTk4MV9nZXRfZnJhbWVfaW5kZXgoY3R4LCBMU1RfQlVGX0lEWCk7 Cj4gLQlpZiAoaWR4ID49IDApIHsKPiArCWlkeCA9IGhhbnRyb19hdjFfZ2V0X2ZyYW1lX2luZGV4 KGN0eCwgTFNUX0JVRl9JRFgpOwo+ICsJaWYgKGlkeCAhPSBBVjFfSU5WQUxJRF9JRFgpIHsKPiAg IAkJaW50IGFsdF9mcmFtZV9vZmZzZXRfaW5fbHN0ID0KPiAgIAkJCWF2MV9kZWMtPmZyYW1lX3Jl ZnNbaWR4XS5vcmRlcl9oaW50c1tWNEwyX0FWMV9SRUZfQUxUUkVGX0ZSQU1FXTsKPiAgIAkJYm9v bCBpc19sc3Rfb3ZlcmxheSA9Cj4gQEAgLTE2NDQsOCArODczLDkgQEAgc3RhdGljIHZvaWQgcm9j a2NoaXBfdnB1OTgxX2F2MV9kZWNfc2V0X290aGVyX2ZyYW1lcyhzdHJ1Y3QgaGFudHJvX2N0eCAq Y3R4KQo+ICAgCQlyZWZfc3RhbXAtLTsKPiAgIAl9Cj4gICAKPiAtCWlkeCA9IHJvY2tjaGlwX3Zw dTk4MV9nZXRfZnJhbWVfaW5kZXgoY3R4LCBCV0RfQlVGX0lEWCk7Cj4gLQlpZiAocm9ja2NoaXBf dnB1OTgxX2F2MV9kZWNfZ2V0X2Rpc3QoY3R4LCBid2RfZnJhbWVfb2Zmc2V0LCBjdXJfZnJhbWVf b2Zmc2V0KSA+IDApIHsKPiArCWlkeCA9IGhhbnRyb19hdjFfZ2V0X2ZyYW1lX2luZGV4KGN0eCwg QldEX0JVRl9JRFgpOwo+ICsJaWYgKGlkeCAhPSBBVjFfSU5WQUxJRF9JRFggJiYKPiArCSAgICBo YW50cm9fYXYxX2dldF9kaXN0KGN0eCwgYndkX2ZyYW1lX29mZnNldCwgY3VyX2ZyYW1lX29mZnNl dCkgPiAwKSB7Cj4gICAJCWludCBid2RfbWlfY29scyA9IGF2MV9kZWMtPmZyYW1lX3JlZnNbaWR4 XS5taV9jb2xzOwo+ICAgCQlpbnQgYndkX21pX3Jvd3MgPSBhdjFfZGVjLT5mcmFtZV9yZWZzW2lk eF0ubWlfcm93czsKPiAgIAkJYm9vbCBid2RfaW50cmFfb25seSA9Cj4gQEAgLTE2NTksOCArODg5 LDkgQEAgc3RhdGljIHZvaWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfc2V0X290aGVyX2ZyYW1l cyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+ICAgCQl9Cj4gICAJfQo+ICAgCj4gLQlpZHggPSBy b2NrY2hpcF92cHU5ODFfZ2V0X2ZyYW1lX2luZGV4KGN0eCwgQUxUMl9CVUZfSURYKTsKPiAtCWlm IChyb2NrY2hpcF92cHU5ODFfYXYxX2RlY19nZXRfZGlzdChjdHgsIGFsdDJfZnJhbWVfb2Zmc2V0 LCBjdXJfZnJhbWVfb2Zmc2V0KSA+IDApIHsKPiArCWlkeCA9IGhhbnRyb19hdjFfZ2V0X2ZyYW1l X2luZGV4KGN0eCwgQUxUMl9CVUZfSURYKTsKPiArCWlmIChpZHggIT0gQVYxX0lOVkFMSURfSURY ICYmCj4gKwkgICAgaGFudHJvX2F2MV9nZXRfZGlzdChjdHgsIGFsdDJfZnJhbWVfb2Zmc2V0LCBj dXJfZnJhbWVfb2Zmc2V0KSA+IDApIHsKPiAgIAkJaW50IGFsdDJfbWlfY29scyA9IGF2MV9kZWMt PmZyYW1lX3JlZnNbaWR4XS5taV9jb2xzOwo+ICAgCQlpbnQgYWx0Ml9taV9yb3dzID0gYXYxX2Rl Yy0+ZnJhbWVfcmVmc1tpZHhdLm1pX3Jvd3M7Cj4gICAJCWJvb2wgYWx0Ml9pbnRyYV9vbmx5ID0K PiBAQCAtMTY3NCw4ICs5MDUsOSBAQCBzdGF0aWMgdm9pZCByb2NrY2hpcF92cHU5ODFfYXYxX2Rl Y19zZXRfb3RoZXJfZnJhbWVzKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gICAJCX0KPiAgIAl9 Cj4gICAKPiAtCWlkeCA9IHJvY2tjaGlwX3ZwdTk4MV9nZXRfZnJhbWVfaW5kZXgoY3R4LCBBTFRf QlVGX0lEWCk7Cj4gLQlpZiAocm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfZ2V0X2Rpc3QoY3R4LCBh bHRfZnJhbWVfb2Zmc2V0LCBjdXJfZnJhbWVfb2Zmc2V0KSA+IDAgJiYKPiArCWlkeCA9IGhhbnRy b19hdjFfZ2V0X2ZyYW1lX2luZGV4KGN0eCwgQUxUX0JVRl9JRFgpOwo+ICsJaWYgKGlkeCAhPSBB VjFfSU5WQUxJRF9JRFggJiYKPiArCSAgICBoYW50cm9fYXYxX2dldF9kaXN0KGN0eCwgYWx0X2Zy YW1lX29mZnNldCwgY3VyX2ZyYW1lX29mZnNldCkgPiAwICYmCj4gICAJICAgIHJlZl9zdGFtcCA+ PSAwKSB7Cj4gICAJCWludCBhbHRfbWlfY29scyA9IGF2MV9kZWMtPmZyYW1lX3JlZnNbaWR4XS5t aV9jb2xzOwo+ICAgCQlpbnQgYWx0X21pX3Jvd3MgPSBhdjFfZGVjLT5mcmFtZV9yZWZzW2lkeF0u bWlfcm93czsKPiBAQCAtMTY5MCw4ICs5MjIsOCBAQCBzdGF0aWMgdm9pZCByb2NrY2hpcF92cHU5 ODFfYXYxX2RlY19zZXRfb3RoZXJfZnJhbWVzKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gICAJ CX0KPiAgIAl9Cj4gICAKPiAtCWlkeCA9IHJvY2tjaGlwX3ZwdTk4MV9nZXRfZnJhbWVfaW5kZXgo Y3R4LCBMU1QyX0JVRl9JRFgpOwo+IC0JaWYgKGlkeCA+PSAwICYmIHJlZl9zdGFtcCA+PSAwKSB7 Cj4gKwlpZHggPSBoYW50cm9fYXYxX2dldF9mcmFtZV9pbmRleChjdHgsIExTVDJfQlVGX0lEWCk7 Cj4gKwlpZiAoaWR4ICE9IEFWMV9JTlZBTElEX0lEWCAmJiByZWZfc3RhbXAgPj0gMCkgewo+ICAg CQlpbnQgbHN0Ml9taV9jb2xzID0gYXYxX2RlYy0+ZnJhbWVfcmVmc1tpZHhdLm1pX2NvbHM7Cj4g ICAJCWludCBsc3QyX21pX3Jvd3MgPSBhdjFfZGVjLT5mcmFtZV9yZWZzW2lkeF0ubWlfcm93czsK PiAgIAkJYm9vbCBsc3QyX2ludHJhX29ubHkgPQo+IEBAIC0xNzA2LDE0ICs5MzgsMTQgQEAgc3Rh dGljIHZvaWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfc2V0X290aGVyX2ZyYW1lcyhzdHJ1Y3Qg aGFudHJvX2N0eCAqY3R4KQo+ICAgCX0KPiAgIAo+ICAgCWZvciAocmYgPSAwOyByZiA8IFY0TDJf QVYxX1RPVEFMX1JFRlNfUEVSX0ZSQU1FIC0gMTsgKytyZikgewo+IC0JCWlkeCA9IHJvY2tjaGlw X3ZwdTk4MV9nZXRfZnJhbWVfaW5kZXgoY3R4LCByZik7Cj4gLQkJaWYgKGlkeCA+PSAwKSB7Cj4g LQkJCWludCByZl9vcmRlcl9oaW50ID0gcm9ja2NoaXBfdnB1OTgxX2dldF9vcmRlcl9oaW50KGN0 eCwgcmYpOwo+ICsJCWlkeCA9IGhhbnRyb19hdjFfZ2V0X2ZyYW1lX2luZGV4KGN0eCwgcmYpOwo+ ICsJCWlmIChpZHggIT0gQVYxX0lOVkFMSURfSURYKSB7Cj4gKwkJCWludCByZl9vcmRlcl9oaW50 ID0gaGFudHJvX2F2MV9nZXRfb3JkZXJfaGludChjdHgsIHJmKTsKPiAgIAo+ICAgCQkJY3VyX29m ZnNldFtyZl0gPQo+IC0JCQkgICAgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfZ2V0X2Rpc3QoY3R4 LCBjdXJfZnJhbWVfb2Zmc2V0LCByZl9vcmRlcl9oaW50KTsKPiArCQkJICAgIGhhbnRyb19hdjFf Z2V0X2Rpc3QoY3R4LCBjdXJfZnJhbWVfb2Zmc2V0LCByZl9vcmRlcl9oaW50KTsKPiAgIAkJCWN1 cl9yb2Zmc2V0W3JmXSA9Cj4gLQkJCSAgICByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19nZXRfZGlz dChjdHgsIHJmX29yZGVyX2hpbnQsIGN1cl9mcmFtZV9vZmZzZXQpOwo+ICsJCQkgICAgaGFudHJv X2F2MV9nZXRfZGlzdChjdHgsIHJmX29yZGVyX2hpbnQsIGN1cl9mcmFtZV9vZmZzZXQpOwo+ICAg CQl9IGVsc2Ugewo+ICAgCQkJY3VyX29mZnNldFtyZl0gPSAwOwo+ICAgCQkJY3VyX3JvZmZzZXRb cmZdID0gMDsKPiBAQCAtMTczNiwzNSArOTY4LDQxIEBAIHN0YXRpYyB2b2lkIHJvY2tjaGlwX3Zw dTk4MV9hdjFfZGVjX3NldF9vdGhlcl9mcmFtZXMoc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPiAg IAlpZiAodXNlX3JlZl9mcmFtZV9tdnMgJiYgcmVmX2luZCA+IDAgJiYKPiAgIAkgICAgY3VyX29m ZnNldFttZl90eXBlc1swXSAtIFY0TDJfQVYxX1JFRl9MQVNUX0ZSQU1FXSA8PSBNQVhfRlJBTUVf RElTVEFOQ0UgJiYKPiAgIAkgICAgY3VyX29mZnNldFttZl90eXBlc1swXSAtIFY0TDJfQVYxX1JF Rl9MQVNUX0ZSQU1FXSA+PSAtTUFYX0ZSQU1FX0RJU1RBTkNFKSB7Cj4gLQkJaW50IHJmID0gcm9j a2NoaXBfdnB1OTgxX2dldF9vcmRlcl9oaW50KGN0eCwgcmVmc19zZWxlY3RlZFswXSk7Cj4gLQkJ aW50IGlkeCA9IHJvY2tjaGlwX3ZwdTk4MV9nZXRfZnJhbWVfaW5kZXgoY3R4LCByZWZzX3NlbGVj dGVkWzBdKTsKPiAtCQl1MzIgKm9oID0gYXYxX2RlYy0+ZnJhbWVfcmVmc1tpZHhdLm9yZGVyX2hp bnRzOwo+ICsJCWludCByZiA9IGhhbnRyb19hdjFfZ2V0X29yZGVyX2hpbnQoY3R4LCByZWZzX3Nl bGVjdGVkWzBdKTsKPiArCQlpbnQgaWR4ID0gaGFudHJvX2F2MV9nZXRfZnJhbWVfaW5kZXgoY3R4 LCByZWZzX3NlbGVjdGVkWzBdKTsKPiArCQl1MzIgKm9oOwo+ICAgCQlpbnQgdmFsOwo+ICAgCj4g KwkJaWYgKGlkeCA9PSBBVjFfSU5WQUxJRF9JRFgpCj4gKwkJCWdvdG8gc2Vjb25kX3JlZjsKPiAr Cj4gKwkJb2ggPSBhdjFfZGVjLT5mcmFtZV9yZWZzW2lkeF0ub3JkZXJfaGludHM7Cj4gKwo+ICAg CQloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV91c2VfdGVtcG9yYWwwX212cywgMSk7Cj4gICAK PiAtCQl2YWwgPSByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19nZXRfZGlzdChjdHgsIHJmLCBvaFtW NEwyX0FWMV9SRUZfTEFTVF9GUkFNRV0pOwo+ICsJCXZhbCA9IGhhbnRyb19hdjFfZ2V0X2Rpc3Qo Y3R4LCByZiwgb2hbVjRMMl9BVjFfUkVGX0xBU1RfRlJBTUVdKTsKPiAgIAkJaGFudHJvX3JlZ193 cml0ZSh2cHUsICZhdjFfbWYxX2xhc3Rfb2Zmc2V0LCB2YWwpOwo+ICAgCj4gLQkJdmFsID0gcm9j a2NoaXBfdnB1OTgxX2F2MV9kZWNfZ2V0X2Rpc3QoY3R4LCByZiwgb2hbVjRMMl9BVjFfUkVGX0xB U1QyX0ZSQU1FXSk7Cj4gKwkJdmFsID0gaGFudHJvX2F2MV9nZXRfZGlzdChjdHgsIHJmLCBvaFtW NEwyX0FWMV9SRUZfTEFTVDJfRlJBTUVdKTsKPiAgIAkJaGFudHJvX3JlZ193cml0ZSh2cHUsICZh djFfbWYxX2xhc3QyX29mZnNldCwgdmFsKTsKPiAgIAo+IC0JCXZhbCA9IHJvY2tjaGlwX3ZwdTk4 MV9hdjFfZGVjX2dldF9kaXN0KGN0eCwgcmYsIG9oW1Y0TDJfQVYxX1JFRl9MQVNUM19GUkFNRV0p Owo+ICsJCXZhbCA9IGhhbnRyb19hdjFfZ2V0X2Rpc3QoY3R4LCByZiwgb2hbVjRMMl9BVjFfUkVG X0xBU1QzX0ZSQU1FXSk7Cj4gICAJCWhhbnRyb19yZWdfd3JpdGUodnB1LCAmYXYxX21mMV9sYXN0 M19vZmZzZXQsIHZhbCk7Cj4gICAKPiAtCQl2YWwgPSByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19n ZXRfZGlzdChjdHgsIHJmLCBvaFtWNEwyX0FWMV9SRUZfR09MREVOX0ZSQU1FXSk7Cj4gKwkJdmFs ID0gaGFudHJvX2F2MV9nZXRfZGlzdChjdHgsIHJmLCBvaFtWNEwyX0FWMV9SRUZfR09MREVOX0ZS QU1FXSk7Cj4gICAJCWhhbnRyb19yZWdfd3JpdGUodnB1LCAmYXYxX21mMV9nb2xkZW5fb2Zmc2V0 LCB2YWwpOwo+ICAgCj4gLQkJdmFsID0gcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfZ2V0X2Rpc3Qo Y3R4LCByZiwgb2hbVjRMMl9BVjFfUkVGX0JXRFJFRl9GUkFNRV0pOwo+ICsJCXZhbCA9IGhhbnRy b19hdjFfZ2V0X2Rpc3QoY3R4LCByZiwgb2hbVjRMMl9BVjFfUkVGX0JXRFJFRl9GUkFNRV0pOwo+ ICAgCQloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9tZjFfYndkcmVmX29mZnNldCwgdmFsKTsK PiAgIAo+IC0JCXZhbCA9IHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX2dldF9kaXN0KGN0eCwgcmYs IG9oW1Y0TDJfQVYxX1JFRl9BTFRSRUYyX0ZSQU1FXSk7Cj4gKwkJdmFsID0gaGFudHJvX2F2MV9n ZXRfZGlzdChjdHgsIHJmLCBvaFtWNEwyX0FWMV9SRUZfQUxUUkVGMl9GUkFNRV0pOwo+ICAgCQlo YW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9tZjFfYWx0cmVmMl9vZmZzZXQsIHZhbCk7Cj4gICAK PiAtCQl2YWwgPSByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19nZXRfZGlzdChjdHgsIHJmLCBvaFtW NEwyX0FWMV9SRUZfQUxUUkVGX0ZSQU1FXSk7Cj4gKwkJdmFsID0gaGFudHJvX2F2MV9nZXRfZGlz dChjdHgsIHJmLCBvaFtWNEwyX0FWMV9SRUZfQUxUUkVGX0ZSQU1FXSk7Cj4gICAJCWhhbnRyb19y ZWdfd3JpdGUodnB1LCAmYXYxX21mMV9hbHRyZWZfb2Zmc2V0LCB2YWwpOwo+ICAgCX0KPiAgIAo+ ICtzZWNvbmRfcmVmOgo+ICAgCWhhbnRyb19yZWdfd3JpdGUodnB1LCAmYXYxX21mMl9sYXN0X29m ZnNldCwgMCk7Cj4gICAJaGFudHJvX3JlZ193cml0ZSh2cHUsICZhdjFfbWYyX2xhc3QyX29mZnNl dCwgMCk7Cj4gICAJaGFudHJvX3JlZ193cml0ZSh2cHUsICZhdjFfbWYyX2xhc3QzX29mZnNldCwg MCk7Cj4gQEAgLTE3NzYsMzUgKzEwMTQsNDEgQEAgc3RhdGljIHZvaWQgcm9ja2NoaXBfdnB1OTgx X2F2MV9kZWNfc2V0X290aGVyX2ZyYW1lcyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+ICAgCWlm ICh1c2VfcmVmX2ZyYW1lX212cyAmJiByZWZfaW5kID4gMSAmJgo+ICAgCSAgICBjdXJfb2Zmc2V0 W21mX3R5cGVzWzFdIC0gVjRMMl9BVjFfUkVGX0xBU1RfRlJBTUVdIDw9IE1BWF9GUkFNRV9ESVNU QU5DRSAmJgo+ICAgCSAgICBjdXJfb2Zmc2V0W21mX3R5cGVzWzFdIC0gVjRMMl9BVjFfUkVGX0xB U1RfRlJBTUVdID49IC1NQVhfRlJBTUVfRElTVEFOQ0UpIHsKPiAtCQlpbnQgcmYgPSByb2NrY2hp cF92cHU5ODFfZ2V0X29yZGVyX2hpbnQoY3R4LCByZWZzX3NlbGVjdGVkWzFdKTsKPiAtCQlpbnQg aWR4ID0gcm9ja2NoaXBfdnB1OTgxX2dldF9mcmFtZV9pbmRleChjdHgsIHJlZnNfc2VsZWN0ZWRb MV0pOwo+IC0JCXUzMiAqb2ggPSBhdjFfZGVjLT5mcmFtZV9yZWZzW2lkeF0ub3JkZXJfaGludHM7 Cj4gKwkJaW50IHJmID0gaGFudHJvX2F2MV9nZXRfb3JkZXJfaGludChjdHgsIHJlZnNfc2VsZWN0 ZWRbMV0pOwo+ICsJCWludCBpZHggPSBoYW50cm9fYXYxX2dldF9mcmFtZV9pbmRleChjdHgsIHJl ZnNfc2VsZWN0ZWRbMV0pOwo+ICsJCXUzMiAqb2g7Cj4gICAJCWludCB2YWw7Cj4gICAKPiArCQlp ZiAoaWR4ID09IEFWMV9JTlZBTElEX0lEWCkKPiArCQkJZ290byB0aGlyZF9yZWY7Cj4gKwo+ICsJ CW9oID0gYXYxX2RlYy0+ZnJhbWVfcmVmc1tpZHhdLm9yZGVyX2hpbnRzOwo+ICsKPiAgIAkJaGFu dHJvX3JlZ193cml0ZSh2cHUsICZhdjFfdXNlX3RlbXBvcmFsMV9tdnMsIDEpOwo+ICAgCj4gLQkJ dmFsID0gcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfZ2V0X2Rpc3QoY3R4LCByZiwgb2hbVjRMMl9B VjFfUkVGX0xBU1RfRlJBTUVdKTsKPiArCQl2YWwgPSBoYW50cm9fYXYxX2dldF9kaXN0KGN0eCwg cmYsIG9oW1Y0TDJfQVYxX1JFRl9MQVNUX0ZSQU1FXSk7Cj4gICAJCWhhbnRyb19yZWdfd3JpdGUo dnB1LCAmYXYxX21mMl9sYXN0X29mZnNldCwgdmFsKTsKPiAgIAo+IC0JCXZhbCA9IHJvY2tjaGlw X3ZwdTk4MV9hdjFfZGVjX2dldF9kaXN0KGN0eCwgcmYsIG9oW1Y0TDJfQVYxX1JFRl9MQVNUMl9G UkFNRV0pOwo+ICsJCXZhbCA9IGhhbnRyb19hdjFfZ2V0X2Rpc3QoY3R4LCByZiwgb2hbVjRMMl9B VjFfUkVGX0xBU1QyX0ZSQU1FXSk7Cj4gICAJCWhhbnRyb19yZWdfd3JpdGUodnB1LCAmYXYxX21m Ml9sYXN0Ml9vZmZzZXQsIHZhbCk7Cj4gICAKPiAtCQl2YWwgPSByb2NrY2hpcF92cHU5ODFfYXYx X2RlY19nZXRfZGlzdChjdHgsIHJmLCBvaFtWNEwyX0FWMV9SRUZfTEFTVDNfRlJBTUVdKTsKPiAr CQl2YWwgPSBoYW50cm9fYXYxX2dldF9kaXN0KGN0eCwgcmYsIG9oW1Y0TDJfQVYxX1JFRl9MQVNU M19GUkFNRV0pOwo+ICAgCQloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9tZjJfbGFzdDNfb2Zm c2V0LCB2YWwpOwo+ICAgCj4gLQkJdmFsID0gcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfZ2V0X2Rp c3QoY3R4LCByZiwgb2hbVjRMMl9BVjFfUkVGX0dPTERFTl9GUkFNRV0pOwo+ICsJCXZhbCA9IGhh bnRyb19hdjFfZ2V0X2Rpc3QoY3R4LCByZiwgb2hbVjRMMl9BVjFfUkVGX0dPTERFTl9GUkFNRV0p Owo+ICAgCQloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9tZjJfZ29sZGVuX29mZnNldCwgdmFs KTsKPiAgIAo+IC0JCXZhbCA9IHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX2dldF9kaXN0KGN0eCwg cmYsIG9oW1Y0TDJfQVYxX1JFRl9CV0RSRUZfRlJBTUVdKTsKPiArCQl2YWwgPSBoYW50cm9fYXYx X2dldF9kaXN0KGN0eCwgcmYsIG9oW1Y0TDJfQVYxX1JFRl9CV0RSRUZfRlJBTUVdKTsKPiAgIAkJ aGFudHJvX3JlZ193cml0ZSh2cHUsICZhdjFfbWYyX2J3ZHJlZl9vZmZzZXQsIHZhbCk7Cj4gICAK PiAtCQl2YWwgPSByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19nZXRfZGlzdChjdHgsIHJmLCBvaFtW NEwyX0FWMV9SRUZfQUxUUkVGMl9GUkFNRV0pOwo+ICsJCXZhbCA9IGhhbnRyb19hdjFfZ2V0X2Rp c3QoY3R4LCByZiwgb2hbVjRMMl9BVjFfUkVGX0FMVFJFRjJfRlJBTUVdKTsKPiAgIAkJaGFudHJv X3JlZ193cml0ZSh2cHUsICZhdjFfbWYyX2FsdHJlZjJfb2Zmc2V0LCB2YWwpOwo+ICAgCj4gLQkJ dmFsID0gcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfZ2V0X2Rpc3QoY3R4LCByZiwgb2hbVjRMMl9B VjFfUkVGX0FMVFJFRl9GUkFNRV0pOwo+ICsJCXZhbCA9IGhhbnRyb19hdjFfZ2V0X2Rpc3QoY3R4 LCByZiwgb2hbVjRMMl9BVjFfUkVGX0FMVFJFRl9GUkFNRV0pOwo+ICAgCQloYW50cm9fcmVnX3dy aXRlKHZwdSwgJmF2MV9tZjJfYWx0cmVmX29mZnNldCwgdmFsKTsKPiAgIAl9Cj4gICAKPiArdGhp cmRfcmVmOgo+ICAgCWhhbnRyb19yZWdfd3JpdGUodnB1LCAmYXYxX21mM19sYXN0X29mZnNldCwg MCk7Cj4gICAJaGFudHJvX3JlZ193cml0ZSh2cHUsICZhdjFfbWYzX2xhc3QyX29mZnNldCwgMCk7 Cj4gICAJaGFudHJvX3JlZ193cml0ZSh2cHUsICZhdjFfbWYzX2xhc3QzX29mZnNldCwgMCk7Cj4g QEAgLTE4MTYsMzUgKzEwNjAsNDEgQEAgc3RhdGljIHZvaWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9k ZWNfc2V0X290aGVyX2ZyYW1lcyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+ICAgCWlmICh1c2Vf cmVmX2ZyYW1lX212cyAmJiByZWZfaW5kID4gMiAmJgo+ICAgCSAgICBjdXJfb2Zmc2V0W21mX3R5 cGVzWzJdIC0gVjRMMl9BVjFfUkVGX0xBU1RfRlJBTUVdIDw9IE1BWF9GUkFNRV9ESVNUQU5DRSAm Jgo+ICAgCSAgICBjdXJfb2Zmc2V0W21mX3R5cGVzWzJdIC0gVjRMMl9BVjFfUkVGX0xBU1RfRlJB TUVdID49IC1NQVhfRlJBTUVfRElTVEFOQ0UpIHsKPiAtCQlpbnQgcmYgPSByb2NrY2hpcF92cHU5 ODFfZ2V0X29yZGVyX2hpbnQoY3R4LCByZWZzX3NlbGVjdGVkWzJdKTsKPiAtCQlpbnQgaWR4ID0g cm9ja2NoaXBfdnB1OTgxX2dldF9mcmFtZV9pbmRleChjdHgsIHJlZnNfc2VsZWN0ZWRbMl0pOwo+ IC0JCXUzMiAqb2ggPSBhdjFfZGVjLT5mcmFtZV9yZWZzW2lkeF0ub3JkZXJfaGludHM7Cj4gKwkJ aW50IHJmID0gaGFudHJvX2F2MV9nZXRfb3JkZXJfaGludChjdHgsIHJlZnNfc2VsZWN0ZWRbMl0p Owo+ICsJCWludCBpZHggPSBoYW50cm9fYXYxX2dldF9mcmFtZV9pbmRleChjdHgsIHJlZnNfc2Vs ZWN0ZWRbMl0pOwo+ICsJCXUzMiAqb2g7Cj4gICAJCWludCB2YWw7Cj4gICAKPiArCQlpZiAoaWR4 ID09IEFWMV9JTlZBTElEX0lEWCkKPiArCQkJZ290byBvZmZzZXRzOwo+ICsKPiArCQlvaCA9IGF2 MV9kZWMtPmZyYW1lX3JlZnNbaWR4XS5vcmRlcl9oaW50czsKPiArCj4gICAJCWhhbnRyb19yZWdf d3JpdGUodnB1LCAmYXYxX3VzZV90ZW1wb3JhbDJfbXZzLCAxKTsKPiAgIAo+IC0JCXZhbCA9IHJv Y2tjaGlwX3ZwdTk4MV9hdjFfZGVjX2dldF9kaXN0KGN0eCwgcmYsIG9oW1Y0TDJfQVYxX1JFRl9M QVNUX0ZSQU1FXSk7Cj4gKwkJdmFsID0gaGFudHJvX2F2MV9nZXRfZGlzdChjdHgsIHJmLCBvaFtW NEwyX0FWMV9SRUZfTEFTVF9GUkFNRV0pOwo+ICAgCQloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2 MV9tZjNfbGFzdF9vZmZzZXQsIHZhbCk7Cj4gICAKPiAtCQl2YWwgPSByb2NrY2hpcF92cHU5ODFf YXYxX2RlY19nZXRfZGlzdChjdHgsIHJmLCBvaFtWNEwyX0FWMV9SRUZfTEFTVDJfRlJBTUVdKTsK PiArCQl2YWwgPSBoYW50cm9fYXYxX2dldF9kaXN0KGN0eCwgcmYsIG9oW1Y0TDJfQVYxX1JFRl9M QVNUMl9GUkFNRV0pOwo+ICAgCQloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9tZjNfbGFzdDJf b2Zmc2V0LCB2YWwpOwo+ICAgCj4gLQkJdmFsID0gcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfZ2V0 X2Rpc3QoY3R4LCByZiwgb2hbVjRMMl9BVjFfUkVGX0xBU1QzX0ZSQU1FXSk7Cj4gKwkJdmFsID0g aGFudHJvX2F2MV9nZXRfZGlzdChjdHgsIHJmLCBvaFtWNEwyX0FWMV9SRUZfTEFTVDNfRlJBTUVd KTsKPiAgIAkJaGFudHJvX3JlZ193cml0ZSh2cHUsICZhdjFfbWYzX2xhc3QzX29mZnNldCwgdmFs KTsKPiAgIAo+IC0JCXZhbCA9IHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX2dldF9kaXN0KGN0eCwg cmYsIG9oW1Y0TDJfQVYxX1JFRl9HT0xERU5fRlJBTUVdKTsKPiArCQl2YWwgPSBoYW50cm9fYXYx X2dldF9kaXN0KGN0eCwgcmYsIG9oW1Y0TDJfQVYxX1JFRl9HT0xERU5fRlJBTUVdKTsKPiAgIAkJ aGFudHJvX3JlZ193cml0ZSh2cHUsICZhdjFfbWYzX2dvbGRlbl9vZmZzZXQsIHZhbCk7Cj4gICAK PiAtCQl2YWwgPSByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19nZXRfZGlzdChjdHgsIHJmLCBvaFtW NEwyX0FWMV9SRUZfQldEUkVGX0ZSQU1FXSk7Cj4gKwkJdmFsID0gaGFudHJvX2F2MV9nZXRfZGlz dChjdHgsIHJmLCBvaFtWNEwyX0FWMV9SRUZfQldEUkVGX0ZSQU1FXSk7Cj4gICAJCWhhbnRyb19y ZWdfd3JpdGUodnB1LCAmYXYxX21mM19id2RyZWZfb2Zmc2V0LCB2YWwpOwo+ICAgCj4gLQkJdmFs ID0gcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfZ2V0X2Rpc3QoY3R4LCByZiwgb2hbVjRMMl9BVjFf UkVGX0FMVFJFRjJfRlJBTUVdKTsKPiArCQl2YWwgPSBoYW50cm9fYXYxX2dldF9kaXN0KGN0eCwg cmYsIG9oW1Y0TDJfQVYxX1JFRl9BTFRSRUYyX0ZSQU1FXSk7Cj4gICAJCWhhbnRyb19yZWdfd3Jp dGUodnB1LCAmYXYxX21mM19hbHRyZWYyX29mZnNldCwgdmFsKTsKPiAgIAo+IC0JCXZhbCA9IHJv Y2tjaGlwX3ZwdTk4MV9hdjFfZGVjX2dldF9kaXN0KGN0eCwgcmYsIG9oW1Y0TDJfQVYxX1JFRl9B TFRSRUZfRlJBTUVdKTsKPiArCQl2YWwgPSBoYW50cm9fYXYxX2dldF9kaXN0KGN0eCwgcmYsIG9o W1Y0TDJfQVYxX1JFRl9BTFRSRUZfRlJBTUVdKTsKPiAgIAkJaGFudHJvX3JlZ193cml0ZSh2cHUs ICZhdjFfbWYzX2FsdHJlZl9vZmZzZXQsIHZhbCk7Cj4gICAJfQo+ICAgCj4gK29mZnNldHM6Cj4g ICAJaGFudHJvX3JlZ193cml0ZSh2cHUsICZhdjFfY3VyX2xhc3Rfb2Zmc2V0LCBjdXJfb2Zmc2V0 WzBdKTsKPiAgIAloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9jdXJfbGFzdDJfb2Zmc2V0LCBj dXJfb2Zmc2V0WzFdKTsKPiAgIAloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9jdXJfbGFzdDNf b2Zmc2V0LCBjdXJfb2Zmc2V0WzJdKTsKPiBAQCAtMTg4Myw5ICsxMTMzLDkgQEAgc3RhdGljIHZv aWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfc2V0X3JlZmVyZW5jZV9mcmFtZXMoc3RydWN0IGhh bnRyb19jdHggKmN0eCkKPiAgIAo+ICAgCWlmICghYWxsb3dfaW50cmFiYykgewo+ICAgCQlmb3Ig KGkgPSAwOyBpIDwgVjRMMl9BVjFfUkVGU19QRVJfRlJBTUU7IGkrKykgewo+IC0JCQlpbnQgaWR4 ID0gcm9ja2NoaXBfdnB1OTgxX2dldF9mcmFtZV9pbmRleChjdHgsIGkpOwo+ICsJCQlpbnQgaWR4 ID0gaGFudHJvX2F2MV9nZXRfZnJhbWVfaW5kZXgoY3R4LCBpKTsKPiAgIAo+IC0JCQlpZiAoaWR4 ID49IDApCj4gKwkJCWlmIChpZHggIT0gQVYxX0lOVkFMSURfSURYKQo+ICAgCQkJCXJlZl9jb3Vu dFtpZHhdKys7Cj4gICAJCX0KPiAgIAo+IEBAIC0xODk4LDcgKzExNDgsNyBAQCBzdGF0aWMgdm9p ZCByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19zZXRfcmVmZXJlbmNlX2ZyYW1lcyhzdHJ1Y3QgaGFu dHJvX2N0eCAqY3R4KQo+ICAgCX0KPiAgIAloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9yZWZf ZnJhbWVzLCByZWZfZnJhbWVzKTsKPiAgIAo+IC0Jcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfc2V0 X2ZyYW1lX3NpZ25fYmlhcyhjdHgpOwo+ICsJaGFudHJvX2F2MV9zZXRfZnJhbWVfc2lnbl9iaWFz KGN0eCk7Cj4gICAKPiAgIAlmb3IgKGkgPSBWNEwyX0FWMV9SRUZfTEFTVF9GUkFNRTsgaSA8IFY0 TDJfQVYxX1RPVEFMX1JFRlNfUEVSX0ZSQU1FOyBpKyspIHsKPiAgIAkJdTMyIHJlZiA9IGkgLSAx Owo+IEBAIC0xOTEwLDggKzExNjAsOCBAQCBzdGF0aWMgdm9pZCByb2NrY2hpcF92cHU5ODFfYXYx X2RlY19zZXRfcmVmZXJlbmNlX2ZyYW1lcyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+ICAgCQkJ d2lkdGggPSBmcmFtZS0+ZnJhbWVfd2lkdGhfbWludXNfMSArIDE7Cj4gICAJCQloZWlnaHQgPSBm cmFtZS0+ZnJhbWVfaGVpZ2h0X21pbnVzXzEgKyAxOwo+ICAgCQl9IGVsc2Ugewo+IC0JCQlpZiAo cm9ja2NoaXBfdnB1OTgxX2dldF9mcmFtZV9pbmRleChjdHgsIHJlZikgPiAwKQo+IC0JCQkJaWR4 ID0gcm9ja2NoaXBfdnB1OTgxX2dldF9mcmFtZV9pbmRleChjdHgsIHJlZik7Cj4gKwkJCWlmICho YW50cm9fYXYxX2dldF9mcmFtZV9pbmRleChjdHgsIHJlZikgIT0gQVYxX0lOVkFMSURfSURYKQo+ ICsJCQkJaWR4ID0gaGFudHJvX2F2MV9nZXRfZnJhbWVfaW5kZXgoY3R4LCByZWYpOwo+ICAgCQkJ d2lkdGggPSBhdjFfZGVjLT5mcmFtZV9yZWZzW2lkeF0ud2lkdGg7Cj4gICAJCQloZWlnaHQgPSBh djFfZGVjLT5mcmFtZV9yZWZzW2lkeF0uaGVpZ2h0Owo+ICAgCQl9Cj4gQEAgLTE5NDMsMjAgKzEx OTMsNiBAQCBzdGF0aWMgdm9pZCByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19zZXRfcmVmZXJlbmNl X2ZyYW1lcyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+ICAgCXJvY2tjaGlwX3ZwdTk4MV9hdjFf ZGVjX3NldF9vdGhlcl9mcmFtZXMoY3R4KTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50IHJvY2tj aGlwX3ZwdTk4MV9hdjFfZ2V0X2hhcmR3YXJlX3R4X21vZGUoZW51bSB2NGwyX2F2MV90eF9tb2Rl IHR4X21vZGUpCj4gLXsKPiAtCXN3aXRjaCAodHhfbW9kZSkgewo+IC0JY2FzZSBWNEwyX0FWMV9U WF9NT0RFX09OTFlfNFg0Ogo+IC0JCXJldHVybiBST0NLQ0hJUF9BVjFfVFhfTU9ERV9PTkxZXzRY NDsKPiAtCWNhc2UgVjRMMl9BVjFfVFhfTU9ERV9MQVJHRVNUOgo+IC0JCXJldHVybiBST0NLQ0hJ UF9BVjFfVFhfTU9ERV8zMngzMjsKPiAtCWNhc2UgVjRMMl9BVjFfVFhfTU9ERV9TRUxFQ1Q6Cj4g LQkJcmV0dXJuIFJPQ0tDSElQX0FWMV9UWF9NT0RFX1NFTEVDVDsKPiAtCX0KPiAtCj4gLQlyZXR1 cm4gUk9DS0NISVBfQVYxX1RYX01PREVfMzJ4MzI7Cj4gLX0KPiAtCj4gICBzdGF0aWMgdm9pZCBy b2NrY2hpcF92cHU5ODFfYXYxX2RlY19zZXRfcGFyYW1ldGVycyhzdHJ1Y3QgaGFudHJvX2N0eCAq Y3R4KQo+ICAgewo+ICAgCXN0cnVjdCBoYW50cm9fZGV2ICp2cHUgPSBjdHgtPmRldjsKPiBAQCAt MjAyOSw3ICsxMjY1LDcgQEAgc3RhdGljIHZvaWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfc2V0 X3BhcmFtZXRlcnMoc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPiAgIAloYW50cm9fcmVnX3dyaXRl KHZwdSwgJmF2MV9jb21wX3ByZWRfbW9kZSwKPiAgIAkJCSAoY3RybHMtPmZyYW1lLT5mbGFncyAm IFY0TDJfQVYxX0ZSQU1FX0ZMQUdfUkVGRVJFTkNFX1NFTEVDVCkgPyAyIDogMCk7Cj4gICAKPiAt CXR4X21vZGUgPSByb2NrY2hpcF92cHU5ODFfYXYxX2dldF9oYXJkd2FyZV90eF9tb2RlKGN0cmxz LT5mcmFtZS0+dHhfbW9kZSk7Cj4gKwl0eF9tb2RlID0gaGFudHJvX2F2MV9nZXRfaGFyZHdhcmVf dHhfbW9kZShjdHJscy0+ZnJhbWUtPnR4X21vZGUpOwo+ICAgCWhhbnRyb19yZWdfd3JpdGUodnB1 LCAmYXYxX3RyYW5zZm9ybV9tb2RlLCB0eF9tb2RlKTsKPiAgIAloYW50cm9fcmVnX3dyaXRlKHZw dSwgJmF2MV9tYXhfY2Jfc2l6ZSwKPiAgIAkJCSAoY3RybHMtPnNlcXVlbmNlLT5mbGFncwo+IEBA IC0yMDYxLDcgKzEyOTcsNyBAQCBzdGF0aWMgdm9pZCByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19z ZXRfcGFyYW1ldGVycyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+ICAgCQloYW50cm9fcmVnX3dy aXRlKHZwdSwgJmF2MV9xbWxldmVsX3YsIDB4ZmYpOwo+ICAgCX0KPiAgIAo+IC0JaGFudHJvX3Jl Z193cml0ZSh2cHUsICZhdjFfbG9zc2xlc3NfZSwgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfaXNf bG9zc2xlc3MoY3R4KSk7Cj4gKwloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9sb3NzbGVzc19l LCBoYW50cm9fYXYxX2lzX2xvc3NsZXNzKGN0eCkpOwo+ICAgCWhhbnRyb19yZWdfd3JpdGUodnB1 LCAmYXYxX3F1YW50X2RlbHRhX3ZfZGMsIGN0cmxzLT5mcmFtZS0+cXVhbnRpemF0aW9uLmRlbHRh X3Ffdl9kYyk7Cj4gICAJaGFudHJvX3JlZ193cml0ZSh2cHUsICZhdjFfcXVhbnRfZGVsdGFfdl9h YywgY3RybHMtPmZyYW1lLT5xdWFudGl6YXRpb24uZGVsdGFfcV92X2FjKTsKPiAgIAo+IEBAIC0y MTA5LDggKzEzNDUsOCBAQCByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19zZXRfb3V0cHV0X2J1ZmZl cihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+ICAgCXN0cnVjdCBoYW50cm9fZGVjb2RlZF9idWZm ZXIgKmRzdDsKPiAgIAlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICp2YjJfZHN0Owo+ICAgCWRtYV9h ZGRyX3QgbHVtYV9hZGRyLCBjaHJvbWFfYWRkciwgbXZfYWRkciA9IDA7Cj4gLQlzaXplX3QgY3Jf b2Zmc2V0ID0gcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfbHVtYV9zaXplKGN0eCk7Cj4gLQlzaXpl X3QgbXZfb2Zmc2V0ID0gcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfY2hyb21hX3NpemUoY3R4KTsK PiArCXNpemVfdCBjcl9vZmZzZXQgPSBoYW50cm9fYXYxX2x1bWFfc2l6ZShjdHgpOwo+ICsJc2l6 ZV90IG12X29mZnNldCA9IGhhbnRyb19hdjFfY2hyb21hX3NpemUoY3R4KTsKPiAgIAo+ICAgCXZi Ml9kc3QgPSBhdjFfZGVjLT5mcmFtZV9yZWZzW2F2MV9kZWMtPmN1cnJlbnRfZnJhbWVfaW5kZXhd LnZiMl9yZWY7Cj4gICAJZHN0ID0gdmIyX3RvX2hhbnRyb19kZWNvZGVkX2J1ZigmdmIyX2RzdC0+ dmIyX2J1Zik7Cj4gQEAgLTIxMzQsNyArMTM3MCw3IEBAIGludCByb2NrY2hpcF92cHU5ODFfYXYx X2RlY19ydW4oc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPiAgIAo+ICAgCWhhbnRyb19zdGFydF9w cmVwYXJlX3J1bihjdHgpOwo+ICAgCj4gLQlyZXQgPSByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19w cmVwYXJlX3J1bihjdHgpOwo+ICsJcmV0ID0gaGFudHJvX2F2MV9wcmVwYXJlX3J1bihjdHgpOwo+ ICAgCWlmIChyZXQpCj4gICAJCWdvdG8gcHJlcGFyZV9lcnJvcjsKPiAgIAo+IEBAIC0yMTQ0LDgg KzEzODAsOCBAQCBpbnQgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfcnVuKHN0cnVjdCBoYW50cm9f Y3R4ICpjdHgpCj4gICAJCWdvdG8gcHJlcGFyZV9lcnJvcjsKPiAgIAl9Cj4gICAKPiAtCXJvY2tj aGlwX3ZwdTk4MV9hdjFfZGVjX2NsZWFuX3JlZnMoY3R4KTsKPiAtCXJvY2tjaGlwX3ZwdTk4MV9h djFfZGVjX2ZyYW1lX3JlZihjdHgsIHZiMl9zcmMtPnZiMl9idWYudGltZXN0YW1wKTsKPiArCWhh bnRyb19hdjFfY2xlYW5fcmVmcyhjdHgpOwo+ICsJaGFudHJvX2F2MV9mcmFtZV9yZWYoY3R4LCB2 YjJfc3JjLT52YjJfYnVmLnRpbWVzdGFtcCk7Cj4gICAKPiAgIAlyb2NrY2hpcF92cHU5ODFfYXYx X2RlY19zZXRfcGFyYW1ldGVycyhjdHgpOwo+ICAgCXJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX3Nl dF9nbG9iYWxfbW9kZWwoY3R4KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS92ZXJpc2lsaWNvbi9yb2NrY2hpcF92cHVfaHcuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0v dmVyaXNpbGljb24vcm9ja2NoaXBfdnB1X2h3LmMKPiBpbmRleCAwMjY3M2JlOTg3OGUuLmY1MGEz ZTM4MDk3ZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZlcmlzaWxpY29u L3JvY2tjaGlwX3ZwdV9ody5jCj4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92ZXJpc2ls aWNvbi9yb2NrY2hpcF92cHVfaHcuYwo+IEBAIC05LDYgKzksNyBAQAo+ICAgI2luY2x1ZGUgPGxp bnV4L2Nsay5oPgo+ICAgCj4gICAjaW5jbHVkZSAiaGFudHJvLmgiCj4gKyNpbmNsdWRlICJoYW50 cm9fYXYxLmgiCj4gICAjaW5jbHVkZSAiaGFudHJvX2pwZWcuaCIKPiAgICNpbmNsdWRlICJoYW50 cm9fZzFfcmVncy5oIgo+ICAgI2luY2x1ZGUgImhhbnRyb19oMV9yZWdzLmgiCj4gQEAgLTYwOCw5 ICs2MDksOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGhhbnRyb19jb2RlY19vcHMgcmszNTY4X3Zl cHVfY29kZWNfb3BzW10gPSB7Cj4gICBzdGF0aWMgY29uc3Qgc3RydWN0IGhhbnRyb19jb2RlY19v cHMgcmszNTg4X3ZwdTk4MV9jb2RlY19vcHNbXSA9IHsKPiAgIAlbSEFOVFJPX01PREVfQVYxX0RF Q10gPSB7Cj4gICAJCS5ydW4gPSByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19ydW4sCj4gLQkJLmlu aXQgPSByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19pbml0LAo+IC0JCS5leGl0ID0gcm9ja2NoaXBf dnB1OTgxX2F2MV9kZWNfZXhpdCwKPiAtCQkuZG9uZSA9IHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVj X2RvbmUsCj4gKwkJLmluaXQgPSBoYW50cm9fYXYxX2luaXQsCj4gKwkJLmV4aXQgPSBoYW50cm9f YXYxX2V4aXQsCj4gKwkJLmRvbmUgPSBoYW50cm9fYXYxX3VwZGF0ZV9wcm9iLAo+ICAgCX0sCj4g ICB9Owo+ICAgLyoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkxpbnV4LXJvY2tjaGlwIG1haWxpbmcgbGlzdApMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtcm9ja2NoaXAK