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 116EEC43334 for ; Thu, 9 Jun 2022 12:36:38 +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:From:References:Cc:To:Subject: 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=fJesLf6ylJXNliFi9VkbwB0Qv/Yeij6lgadLAzqHeDU=; b=SObBh9fQMMlUla 1l4jVkE0cMLFp2iwTO4GmOVcLq0K1rsK5AVuomM8qYSJra2ie75ZA5TCrvYGa6WAz9IgIqjB5c0MA E3mpGXrc5qv2cViI+D9osxc8iRKdwMhePv8RkUEBT7hiRZbTu1ewiVH83x5lop+ncryRrf86yvvLE FwLh4bpnJ0b/qJ0qF0Tpusk8FalYlL48SicNMC7sIk/nnFCVkJsvbORgt8LoxRvzcoWbZVisDTH8J 4npTDBmxzDas6wTcb5WT2d6uhU15nA4iEAm455eAzl+BYVLB4zs+gS8QYPk6ScJmngi5HHuUxy70l M2sMm22/Htlc+OvPcqYg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nzHNW-001njQ-4C; Thu, 09 Jun 2022 12:35:10 +0000 Received: from out30-57.freemail.mail.aliyun.com ([115.124.30.57]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nzHNJ-001ndl-HO for linux-arm-kernel@lists.infradead.org; Thu, 09 Jun 2022 12:35:05 +0000 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R171e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046051;MF=zhongjiang-ali@linux.alibaba.com;NM=1;PH=DS;RN=38;SR=0;TI=SMTPD_---0VFtsKPr_1654778085; Received: from 30.225.24.138(mailfrom:zhongjiang-ali@linux.alibaba.com fp:SMTPD_---0VFtsKPr_1654778085) by smtp.aliyun-inc.com; Thu, 09 Jun 2022 20:34:48 +0800 Message-ID: Date: Thu, 9 Jun 2022 20:34:45 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:101.0) Gecko/20100101 Thunderbird/101.0 Subject: Re: [PATCH v11 06/14] mm: multi-gen LRU: minimal implementation Content-Language: en-US To: Yu Zhao , Andrew Morton , linux-mm@kvack.org Cc: Andi Kleen , Aneesh Kumar , Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Johannes Weiner , Jonathan Corbet , Linus Torvalds , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Peter Zijlstra , Tejun Heo , Vlastimil Babka , Will Deacon , linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, x86@kernel.org, page-reclaim@google.com, Brian Geffon , Jan Alexander Steffens , Oleksandr Natalenko , Steven Barrett , Suleiman Souhlal , Daniel Byrne , Donald Carr , =?UTF-8?Q?Holger_Hoffst=c3=a4tte?= , Konstantin Kharlamov , Shuang Zhai , Sofia Trinh , Vaibhav Jain References: <20220518014632.922072-1-yuzhao@google.com> <20220518014632.922072-7-yuzhao@google.com> From: zhong jiang In-Reply-To: <20220518014632.922072-7-yuzhao@google.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220609_053458_210473_710B6222 X-CRM114-Status: GOOD ( 39.64 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: 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-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Ck9uIDIwMjIvNS8xOCA5OjQ2IOS4iuWNiCwgWXUgWmhhbyB3cm90ZToKPiBUbyBhdm9pZCBjb25m dXNpb24sIHRoZSB0ZXJtcyAicHJvbW90aW9uIiBhbmQgImRlbW90aW9uIiB3aWxsIGJlCj4gYXBw bGllZCB0byB0aGUgbXVsdGktZ2VuIExSVSwgYXMgYSBuZXcgY29udmVudGlvbjsgdGhlIHRlcm1z Cj4gImFjdGl2YXRpb24iIGFuZCAiZGVhY3RpdmF0aW9uIiB3aWxsIGJlIGFwcGxpZWQgdG8gdGhl IGFjdGl2ZS9pbmFjdGl2ZQo+IExSVSwgYXMgdXN1YWwuCj4KPiBUaGUgYWdpbmcgcHJvZHVjZXMg eW91bmcgZ2VuZXJhdGlvbnMuIEdpdmVuIGFuIGxydXZlYywgaXQgaW5jcmVtZW50cwo+IG1heF9z ZXEgd2hlbiBtYXhfc2VxLW1pbl9zZXErMSBhcHByb2FjaGVzIE1JTl9OUl9HRU5TLiBUaGUgYWdp bmcKPiBwcm9tb3RlcyBob3QgcGFnZXMgdG8gdGhlIHlvdW5nZXN0IGdlbmVyYXRpb24gd2hlbiBp dCBmaW5kcyB0aGVtCj4gYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlczsgdGhlIGRlbW90aW9u IG9mIGNvbGQgcGFnZXMgaGFwcGVucwo+IGNvbnNlcXVlbnRseSB3aGVuIGl0IGluY3JlbWVudHMg bWF4X3NlcS4gVGhlIGFnaW5nIGhhcyB0aGUgY29tcGxleGl0eQo+IE8obnJfaG90X3BhZ2VzKSwg c2luY2UgaXQgaXMgb25seSBpbnRlcmVzdGVkIGluIGhvdCBwYWdlcy4gUHJvbW90aW9uCj4gaW4g dGhlIGFnaW5nIHBhdGggZG9lcyBub3QgaW52b2x2ZSBhbnkgTFJVIGxpc3Qgb3BlcmF0aW9ucywg b25seSB0aGUKPiB1cGRhdGVzIG9mIHRoZSBnZW4gY291bnRlciBhbmQgbHJ1Z2VuLT5ucl9wYWdl c1tdOyBkZW1vdGlvbiwgdW5sZXNzIGFzCj4gdGhlIHJlc3VsdCBvZiB0aGUgaW5jcmVtZW50IG9m IG1heF9zZXEsIHJlcXVpcmVzIExSVSBsaXN0IG9wZXJhdGlvbnMsCj4gZS5nLiwgbHJ1X2RlYWN0 aXZhdGVfZm4oKS4KPgo+IFRoZSBldmljdGlvbiBjb25zdW1lcyBvbGQgZ2VuZXJhdGlvbnMuIEdp dmVuIGFuIGxydXZlYywgaXQgaW5jcmVtZW50cwo+IG1pbl9zZXEgd2hlbiB0aGUgbGlzdHMgaW5k ZXhlZCBieSBtaW5fc2VxJU1BWF9OUl9HRU5TIGJlY29tZSBlbXB0eS4gQQo+IGZlZWRiYWNrIGxv b3AgbW9kZWxlZCBhZnRlciB0aGUgUElEIGNvbnRyb2xsZXIgbW9uaXRvcnMgcmVmYXVsdHMgb3Zl cgo+IGFub24gYW5kIGZpbGUgdHlwZXMgYW5kIGRlY2lkZXMgd2hpY2ggdHlwZSB0byBldmljdCB3 aGVuIGJvdGggdHlwZXMKPiBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIHNhbWUgZ2VuZXJhdGlvbi4K Pgo+IEVhY2ggZ2VuZXJhdGlvbiBpcyBkaXZpZGVkIGludG8gbXVsdGlwbGUgdGllcnMuIFRpZXJz IHJlcHJlc2VudAo+IGRpZmZlcmVudCByYW5nZXMgb2YgbnVtYmVycyBvZiBhY2Nlc3NlcyB0aHJv dWdoIGZpbGUgZGVzY3JpcHRvcnMuIEEKPiBwYWdlIGFjY2Vzc2VkIE4gdGltZXMgdGhyb3VnaCBm aWxlIGRlc2NyaXB0b3JzIGlzIGluIHRpZXIKPiBvcmRlcl9iYXNlXzIoTikuIFRpZXJzIGRvIG5v dCBoYXZlIGRlZGljYXRlZCBscnVnZW4tPmxpc3RzW10sIG9ubHkKPiBiaXRzIGluIGZvbGlvLT5m bGFncy4gSW4gY29udHJhc3QgdG8gbW92aW5nIGFjcm9zcyBnZW5lcmF0aW9ucywgd2hpY2gKPiBy ZXF1aXJlcyB0aGUgTFJVIGxvY2ssIG1vdmluZyBhY3Jvc3MgdGllcnMgb25seSBpbnZvbHZlcyBv cGVyYXRpb25zIG9uCj4gZm9saW8tPmZsYWdzLiBUaGUgZmVlZGJhY2sgbG9vcCBhbHNvIG1vbml0 b3JzIHJlZmF1bHRzIG92ZXIgYWxsIHRpZXJzCj4gYW5kIGRlY2lkZXMgd2hlbiB0byBwcm90ZWN0 IHBhZ2VzIGluIHdoaWNoIHRpZXJzIChOPjEpLCB1c2luZyB0aGUKPiBmaXJzdCB0aWVyIChOPTAs MSkgYXMgYSBiYXNlbGluZS4gVGhlIGZpcnN0IHRpZXIgY29udGFpbnMgc2luZ2xlLXVzZQo+IHVu bWFwcGVkIGNsZWFuIHBhZ2VzLCB3aGljaCBhcmUgbW9zdCBsaWtlbHkgdGhlIGJlc3QgY2hvaWNl cy4gVGhlCj4gZXZpY3Rpb24gbW92ZXMgYSBwYWdlIHRvIHRoZSBuZXh0IGdlbmVyYXRpb24sIGku ZS4sIG1pbl9zZXErMSwgaWYgdGhlCj4gZmVlZGJhY2sgbG9vcCBkZWNpZGVzIHNvLiBUaGlzIGFw cHJvYWNoIGhhcyB0aGUgZm9sbG93aW5nIGFkdmFudGFnZXM6Cj4gMS4gSXQgcmVtb3ZlcyB0aGUg Y29zdCBvZiBhY3RpdmF0aW9uIGluIHRoZSBidWZmZXJlZCBhY2Nlc3MgcGF0aCBieQo+ICAgICBp bmZlcnJpbmcgd2hldGhlciBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZp bGUKPiAgICAgZGVzY3JpcHRvcnMgYXJlIHN0YXRpc3RpY2FsbHkgaG90IGFuZCB0aHVzIHdvcnRo IHByb3RlY3RpbmcgaW4gdGhlCj4gICAgIGV2aWN0aW9uIHBhdGguCj4gMi4gSXQgdGFrZXMgcGFn ZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyBpbnRvIGFjY291bnQgYW5kIGF2b2lkcwo+ ICAgICBvdmVycHJvdGVjdGluZyBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdo IGZpbGUKPiAgICAgZGVzY3JpcHRvcnMuIChQYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFi bGVzIGFyZSBpbiB0aGUgZmlyc3QKPiAgICAgdGllciwgc2luY2UgTj0wLikKPiAzLiBNb3JlIHRp ZXJzIHByb3ZpZGUgYmV0dGVyIHByb3RlY3Rpb24gZm9yIHBhZ2VzIGFjY2Vzc2VkIG1vcmUgdGhh bgo+ICAgICB0d2ljZSB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsIHdoZW4gdW5kZXIgaGVhdnkg YnVmZmVyZWQgSS9PCj4gICAgIHdvcmtsb2Fkcy4KPgo+IFNlcnZlciBiZW5jaG1hcmsgcmVzdWx0 czoKPiAgICBTaW5nbGUgd29ya2xvYWQ6Cj4gICAgICBmaW8gKGJ1ZmZlcmVkIEkvTyk6ICtbNDAs IDQyXSUKPiAgICAgICAgICAgICAgICAgIElPUFMgICAgICAgICBCVwo+ICAgICAgICA1LjE4LXJj MTogMjQ2M2sgICAgICAgIDk2MjFNaUIvcwo+ICAgICAgICBwYXRjaDEtNjogMzQ4NGsgICAgICAg IDEzLjNHaUIvcwo+Cj4gICAgU2luZ2xlIHdvcmtsb2FkOgo+ICAgICAgbWVtY2FjaGVkIChhbm9u KTogK1s0NCwgNDZdJQo+ICAgICAgICAgICAgICAgICAgT3BzL3NlYyAgICAgIEtCL3NlYwo+ICAg ICAgICA1LjE4LXJjMTogNzcxNDAzLjI3ICAgIDMwMDA0LjE3Cj4gICAgICAgIHBhdGNoMS02OiAx MTIwNjQzLjcwICAgNDM1ODguMDYKPgo+ICAgIENvbmZpZ3VyYXRpb25zOgo+ICAgICAgQ1BVOiB0 d28gWGVvbiA2MTU0Cj4gICAgICBNZW06IHRvdGFsIDI1NkcKPgo+ICAgICAgTm9kZSAxIHdhcyBv bmx5IHVzZWQgYXMgYSByYW0gZGlzayB0byByZWR1Y2UgdGhlIHZhcmlhbmNlIGluIHRoZQo+ICAg ICAgcmVzdWx0cy4KPgo+ICAgICAgcGF0Y2ggZHJpdmVycy9ibG9jay9icmQuYyA8PEVPRgo+ICAg ICAgOTksMTAwYzk5LDEwMAo+ICAgICAgPCAJZ2ZwX2ZsYWdzID0gR0ZQX05PSU8gfCBfX0dGUF9a RVJPIHwgX19HRlBfSElHSE1FTTsKPiAgICAgIDwgCXBhZ2UgPSBhbGxvY19wYWdlKGdmcF9mbGFn cyk7Cj4gICAgICAtLS0KPiAgICAgID4gCWdmcF9mbGFncyA9IEdGUF9OT0lPIHwgX19HRlBfWkVS TyB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9USElTTk9ERTsKPiAgICAgID4gCXBhZ2UgPSBhbGxv Y19wYWdlc19ub2RlKDEsIGdmcF9mbGFncywgMCk7Cj4gICAgICBFT0YKPgo+ICAgICAgY2F0ID4+ L2V0Yy9zeXN0ZW1kL3N5c3RlbS5jb25mIDw8RU9GCj4gICAgICBDUFVBZmZpbml0eT1udW1hCj4g ICAgICBOVU1BUG9saWN5PWJpbmQKPiAgICAgIE5VTUFNYXNrPTAKPiAgICAgIEVPRgo+Cj4gICAg ICBjYXQgPj4vZXRjL21lbWNhY2hlZC5jb25mIDw8RU9GCj4gICAgICAtbSAxODQzMjAKPiAgICAg IC1zIC92YXIvcnVuL21lbWNhY2hlZC9tZW1jYWNoZWQuc29jawo+ICAgICAgLWEgMDc2Ngo+ICAg ICAgLXQgMzYKPiAgICAgIC1CIGJpbmFyeQo+ICAgICAgRU9GCj4KPiAgICAgIGNhdCBmaW8uc2gK PiAgICAgIG1vZHByb2JlIGJyZCByZF9ucj0xIHJkX3NpemU9MTEzMjQ2MjA4Cj4gICAgICBzd2Fw b2ZmIC1hCj4gICAgICBta2ZzLmV4dDQgL2Rldi9yYW0wCj4gICAgICBtb3VudCAtdCBleHQ0IC9k ZXYvcmFtMCAvbW50Cj4KPiAgICAgIG1rZGlyIC9zeXMvZnMvY2dyb3VwL3VzZXIuc2xpY2UvdGVz dAo+ICAgICAgZWNobyAzODY1NDcwNTY2NCA+L3N5cy9mcy9jZ3JvdXAvdXNlci5zbGljZS90ZXN0 L21lbW9yeS5tYXgKPiAgICAgIGVjaG8gJCQgPi9zeXMvZnMvY2dyb3VwL3VzZXIuc2xpY2UvdGVz dC9jZ3JvdXAucHJvY3MKPiAgICAgIGZpbyAtbmFtZT1tZ2xydSAtLW51bWpvYnM9NzIgLS1kaXJl Y3Rvcnk9L21udCAtLXNpemU9MTQwOG0gXAo+ICAgICAgICAtLWJ1ZmZlcmVkPTEgLS1pb2VuZ2lu ZT1pb191cmluZyAtLWlvZGVwdGg9MTI4IFwKPiAgICAgICAgLS1pb2RlcHRoX2JhdGNoX3N1Ym1p dD0zMiAtLWlvZGVwdGhfYmF0Y2hfY29tcGxldGU9MzIgXAo+ICAgICAgICAtLXJ3PXJhbmRyZWFk IC0tcmFuZG9tX2Rpc3RyaWJ1dGlvbj1yYW5kb20gLS1ub3JhbmRvbW1hcCBcCj4gICAgICAgIC0t dGltZV9iYXNlZCAtLXJhbXBfdGltZT0xMG0gLS1ydW50aW1lPTVtIC0tZ3JvdXBfcmVwb3J0aW5n Cj4KPiAgICAgIGNhdCBtZW1jYWNoZWQuc2gKPiAgICAgIG1vZHByb2JlIGJyZCByZF9ucj0xIHJk X3NpemU9MTEzMjQ2MjA4Cj4gICAgICBzd2Fwb2ZmIC1hCj4gICAgICBta3N3YXAgL2Rldi9yYW0w Cj4gICAgICBzd2Fwb24gL2Rldi9yYW0wCj4KPiAgICAgIG1lbXRpZXJfYmVuY2htYXJrIC1TIC92 YXIvcnVuL21lbWNhY2hlZC9tZW1jYWNoZWQuc29jayBcCj4gICAgICAgIC1QIG1lbWNhY2hlX2Jp bmFyeSAtbiBhbGxrZXlzIC0ta2V5LW1pbmltdW09MSBcCj4gICAgICAgIC0ta2V5LW1heGltdW09 NjUwMDAwMDAgLS1rZXktcGF0dGVybj1QOlAgLWMgMSAtdCAzNiBcCj4gICAgICAgIC0tcmF0aW8g MTowIC0tcGlwZWxpbmUgOCAtZCAyMDAwCj4KPiAgICAgIG1lbXRpZXJfYmVuY2htYXJrIC1TIC92 YXIvcnVuL21lbWNhY2hlZC9tZW1jYWNoZWQuc29jayBcCj4gICAgICAgIC1QIG1lbWNhY2hlX2Jp bmFyeSAtbiBhbGxrZXlzIC0ta2V5LW1pbmltdW09MSBcCj4gICAgICAgIC0ta2V5LW1heGltdW09 NjUwMDAwMDAgLS1rZXktcGF0dGVybj1SOlIgLWMgMSAtdCAzNiBcCj4gICAgICAgIC0tcmF0aW8g MDoxIC0tcGlwZWxpbmUgOCAtLXJhbmRvbWl6ZSAtLWRpc3RpbmN0LWNsaWVudC1zZWVkCj4KPiBD bGllbnQgYmVuY2htYXJrIHJlc3VsdHM6Cj4gICAga3N3YXBkIHByb2ZpbGVzOgo+ICAgICAgNS4x OC1yYzEKPiAgICAgICAgNDAuNTMlICBwYWdlX3ZtYV9tYXBwZWRfd2Fsawo+ICAgICAgICAyMC4z NyUgIGx6bzF4XzFfZG9fY29tcHJlc3MgKHJlYWwgd29yaykKPiAgICAgICAgIDYuOTklICBkb19y YXdfc3Bpbl9sb2NrCj4gICAgICAgICAzLjkzJSAgX3Jhd19zcGluX3VubG9ja19pcnEKPiAgICAg ICAgIDIuMDglICB2bWFfaW50ZXJ2YWxfdHJlZV9zdWJ0cmVlX3NlYXJjaAo+ICAgICAgICAgMi4w NiUgIHZtYV9pbnRlcnZhbF90cmVlX2l0ZXJfbmV4dAo+ICAgICAgICAgMS45NSUgIGZvbGlvX3Jl ZmVyZW5jZWRfb25lCj4gICAgICAgICAxLjkzJSAgYW5vbl92bWFfaW50ZXJ2YWxfdHJlZV9pdGVy X2ZpcnN0Cj4gICAgICAgICAxLjUxJSAgcHRlcF9jbGVhcl9mbHVzaAo+ICAgICAgICAgMS4zNSUg IF9fYW5vbl92bWFfaW50ZXJ2YWxfdHJlZV9zdWJ0cmVlX3NlYXJjaAo+Cj4gICAgICBwYXRjaDEt Ngo+ICAgICAgICAzNS45OSUgIGx6bzF4XzFfZG9fY29tcHJlc3MgKHJlYWwgd29yaykKPiAgICAg ICAgMTkuNDAlICBwYWdlX3ZtYV9tYXBwZWRfd2Fsawo+ICAgICAgICAgNi4zMSUgIF9yYXdfc3Bp bl91bmxvY2tfaXJxCj4gICAgICAgICAzLjk1JSAgZG9fcmF3X3NwaW5fbG9jawo+ICAgICAgICAg Mi4zOSUgIGFub25fdm1hX2ludGVydmFsX3RyZWVfaXRlcl9maXJzdAo+ICAgICAgICAgMi4yNSUg IHB0ZXBfY2xlYXJfZmx1c2gKPiAgICAgICAgIDEuOTIlICBfX2Fub25fdm1hX2ludGVydmFsX3Ry ZWVfc3VidHJlZV9zZWFyY2gKPiAgICAgICAgIDEuNzAlICBmb2xpb19yZWZlcmVuY2VkX29uZQo+ ICAgICAgICAgMS42OCUgIF9fenJhbV9idmVjX3dyaXRlCj4gICAgICAgICAxLjQzJSAgYW5vbl92 bWFfaW50ZXJ2YWxfdHJlZV9pdGVyX25leHQKPgo+ICAgIENvbmZpZ3VyYXRpb25zOgo+ICAgICAg Q1BVOiBzaW5nbGUgU25hcGRyYWdvbiA3Ywo+ICAgICAgTWVtOiB0b3RhbCA0Rwo+Cj4gICAgICBD aHJvbWUgT1MgTWVtb3J5UHJlc3N1cmUgWzFdCj4KPiBbMV0gaHR0cHM6Ly9jaHJvbWl1bS5nb29n bGVzb3VyY2UuY29tL2Nocm9taXVtb3MvcGxhdGZvcm0vdGFzdC10ZXN0cy8KPgo+IFNpZ25lZC1v ZmYtYnk6IFl1IFpoYW8gPHl1emhhb0Bnb29nbGUuY29tPgo+IEFja2VkLWJ5OiBCcmlhbiBHZWZm b24gPGJnZWZmb25AZ29vZ2xlLmNvbT4KPiBBY2tlZC1ieTogSmFuIEFsZXhhbmRlciBTdGVmZmVu cyAoaGVmdGlnKSA8aGVmdGlnQGFyY2hsaW51eC5vcmc+Cj4gQWNrZWQtYnk6IE9sZWtzYW5kciBO YXRhbGVua28gPG9sZWtzYW5kckBuYXRhbGVua28ubmFtZT4KPiBBY2tlZC1ieTogU3RldmVuIEJh cnJldHQgPHN0ZXZlbkBsaXF1b3JpeC5uZXQ+Cj4gQWNrZWQtYnk6IFN1bGVpbWFuIFNvdWhsYWwg PHN1bGVpbWFuQGdvb2dsZS5jb20+Cj4gVGVzdGVkLWJ5OiBEYW5pZWwgQnlybmUgPGRqYnlybmVA bXR1LmVkdT4KPiBUZXN0ZWQtYnk6IERvbmFsZCBDYXJyIDxkQGNoYW9zLXJlaW5zLmNvbT4KPiBU ZXN0ZWQtYnk6IEhvbGdlciBIb2Zmc3TDpHR0ZSA8aG9sZ2VyQGFwcGxpZWQtYXN5bmNocm9ueS5j b20+Cj4gVGVzdGVkLWJ5OiBLb25zdGFudGluIEtoYXJsYW1vdiA8SGktQW5nZWxAeWFuZGV4LnJ1 Pgo+IFRlc3RlZC1ieTogU2h1YW5nIFpoYWkgPHN6aGFpMkBjcy5yb2NoZXN0ZXIuZWR1Pgo+IFRl c3RlZC1ieTogU29maWEgVHJpbmggPHNvZmlhLnRyaW5oQGVkaS53b3Jrcz4KPiBUZXN0ZWQtYnk6 IFZhaWJoYXYgSmFpbiA8dmFpYmhhdkBsaW51eC5pYm0uY29tPgo+IC0tLQo+ICAgaW5jbHVkZS9s aW51eC9tbV9pbmxpbmUuaCAgICAgICAgIHwgIDM2ICsrCj4gICBpbmNsdWRlL2xpbnV4L21tem9u ZS5oICAgICAgICAgICAgfCAgNDIgKysKPiAgIGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy1sYXlv dXQuaCB8ICAgNSArLQo+ICAga2VybmVsL2JvdW5kcy5jICAgICAgICAgICAgICAgICAgIHwgICAy ICsKPiAgIG1tL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMSArCj4gICBtbS9z d2FwLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzkgKysKPiAgIG1tL3Ztc2Nhbi5jICAg ICAgICAgICAgICAgICAgICAgICB8IDc5OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0K PiAgIG1tL3dvcmtpbmdzZXQuYyAgICAgICAgICAgICAgICAgICB8IDExMCArKystCj4gICA4IGZp bGVzIGNoYW5nZWQsIDEwMzQgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCj4KPiBkaWZm IC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5s aW5lLmgKPiBpbmRleCA5OGFlMjJiZmFmMTIuLjg1ZmU3ODgzMjQzNiAxMDA2NDQKPiAtLS0gYS9p bmNsdWRlL2xpbnV4L21tX2lubGluZS5oCj4gKysrIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUu aAo+IEBAIC0xMTksNiArMTE5LDMzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV9nZW5fZnJvbV9z ZXEodW5zaWduZWQgbG9uZyBzZXEpCj4gICAJcmV0dXJuIHNlcSAlIE1BWF9OUl9HRU5TOwo+ICAg fQo+ICAgCj4gK3N0YXRpYyBpbmxpbmUgaW50IGxydV9oaXN0X2Zyb21fc2VxKHVuc2lnbmVkIGxv bmcgc2VxKQo+ICt7Cj4gKwlyZXR1cm4gc2VxICUgTlJfSElTVF9HRU5TOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW5saW5lIGludCBscnVfdGllcl9mcm9tX3JlZnMoaW50IHJlZnMpCj4gK3sKPiArCVZN X1dBUk5fT05fT05DRShyZWZzID4gQklUKExSVV9SRUZTX1dJRFRIKSk7Cj4gKwo+ICsJLyogc2Vl IHRoZSBjb21tZW50IGluIGZvbGlvX2xydV9yZWZzKCkgKi8KPiArCXJldHVybiBvcmRlcl9iYXNl XzIocmVmcyArIDEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVm cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVB RF9PTkNFKGZvbGlvLT5mbGFncyk7Cj4gKwlib29sIHdvcmtpbmdzZXQgPSBmbGFncyAmIEJJVChQ R193b3JraW5nc2V0KTsKPiArCj4gKwkvKgo+ICsJICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYWNj ZXNzZXMgYmV5b25kIFBHX3JlZmVyZW5jZWQsIGkuZS4sIE4tMSBpZiB0aGUKPiArCSAqIHRvdGFs IG51bWJlciBvZiBhY2Nlc3NlcyBpcyBOPjEsIHNpbmNlIE49MCwxIGJvdGggbWFwIHRvIHRoZSBm aXJzdAo+ICsJICogdGllci4gbHJ1X3RpZXJfZnJvbV9yZWZzKCkgd2lsbCBhY2NvdW50IGZvciB0 aGlzIG9mZi1ieS1vbmUuIEFsc28gc2VlCj4gKwkgKiB0aGUgY29tbWVudCBvbiBNQVhfTlJfVElF UlMuCj4gKwkgKi8KPiArCXJldHVybiAoKGZsYWdzICYgTFJVX1JFRlNfTUFTSykgPj4gTFJVX1JF RlNfUEdPRkYpICsgd29ya2luZ3NldDsKPiArfQo+ICsKPiAgIHN0YXRpYyBpbmxpbmUgaW50IGZv bGlvX2xydV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbykKPiAgIHsKPiAgIAl1bnNpZ25lZCBsb25n IGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLT5mbGFncyk7Cj4gQEAgLTE3MSw2ICsxOTgsMTUgQEAg c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fdXBkYXRlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1 dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGkKPiAgIAkJX191cGRhdGVfbHJ1X3NpemUobHJ1dmVjLCBs cnUsIHpvbmUsIC1kZWx0YSk7Cj4gICAJCXJldHVybjsKPiAgIAl9Cj4gKwo+ICsJLyogcHJvbW90 aW9uICovCj4gKwlpZiAoIWxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgb2xkX2dlbikgJiYgbHJ1 X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBuZXdfZ2VuKSkgewo+ICsJCV9fdXBkYXRlX2xydV9zaXpl KGxydXZlYywgbHJ1LCB6b25lLCAtZGVsdGEpOwo+ICsJCV9fdXBkYXRlX2xydV9zaXplKGxydXZl YywgbHJ1ICsgTFJVX0FDVElWRSwgem9uZSwgZGVsdGEpOwo+ICsJfQo+ICsKPiArCS8qIGRlbW90 aW9uIHJlcXVpcmVzIGlzb2xhdGlvbiwgZS5nLiwgbHJ1X2RlYWN0aXZhdGVfZm4oKSAqLwo+ICsJ Vk1fV0FSTl9PTl9PTkNFKGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgb2xkX2dlbikgJiYgIWxy dV9nZW5faXNfYWN0aXZlKGxydXZlYywgbmV3X2dlbikpOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMg aW5saW5lIGJvb2wgbHJ1X2dlbl9hZGRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1 Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1pbmcpCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUv bGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCj4gaW5kZXggNjk5NGFjZWY2 M2NiLi4yZDAyM2QyNDNlNzMgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAo+ ICsrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKPiBAQCAtMzQ4LDYgKzM0OCwyOSBAQCBlbnVt IGxydXZlY19mbGFncyB7Cj4gICAjZGVmaW5lIE1JTl9OUl9HRU5TCQkyVQo+ICAgI2RlZmluZSBN QVhfTlJfR0VOUwkJNFUKPiAgIAo+ICsvKgo+ICsgKiBFYWNoIGdlbmVyYXRpb24gaXMgZGl2aWRl ZCBpbnRvIG11bHRpcGxlIHRpZXJzLiBUaWVycyByZXByZXNlbnQgZGlmZmVyZW50Cj4gKyAqIHJh bmdlcyBvZiBudW1iZXJzIG9mIGFjY2Vzc2VzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycy4gQSBw YWdlIGFjY2Vzc2VkIE4KPiArICogdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzIGlzIGlu IHRpZXIgb3JkZXJfYmFzZV8yKE4pLiBBIHBhZ2UgaW4gdGhlCj4gKyAqIGZpcnN0IHRpZXIgKE49 MCwxKSBpcyBtYXJrZWQgYnkgUEdfcmVmZXJlbmNlZCB1bmxlc3MgaXQgd2FzIGZhdWx0ZWQgaW4K PiArICogdGhvdWdoIHBhZ2UgdGFibGVzIG9yIHJlYWQgYWhlYWQuIEEgcGFnZSBpbiBhbnkgb3Ro ZXIgdGllciAoTj4xKSBpcyBtYXJrZWQKPiArICogYnkgUEdfcmVmZXJlbmNlZCBhbmQgUEdfd29y a2luZ3NldC4gVGhpcyBpbXBsaWVzIGEgbWluaW11bSBvZiB0d28gdGllcnMgaXMKPiArICogc3Vw cG9ydGVkIHdpdGhvdXQgdXNpbmcgYWRkaXRpb25hbCBiaXRzIGluIGZvbGlvLT5mbGFncy4KPiAr ICoKPiArICogSW4gY29udHJhc3QgdG8gbW92aW5nIGFjcm9zcyBnZW5lcmF0aW9ucyB3aGljaCBy ZXF1aXJlcyB0aGUgTFJVIGxvY2ssIG1vdmluZwo+ICsgKiBhY3Jvc3MgdGllcnMgb25seSBpbnZv bHZlcyBhdG9taWMgb3BlcmF0aW9ucyBvbiBmb2xpby0+ZmxhZ3MgYW5kIHRoZXJlZm9yZQo+ICsg KiBoYXMgYSBuZWdsaWdpYmxlIGNvc3QgaW4gdGhlIGJ1ZmZlcmVkIGFjY2VzcyBwYXRoLiBJbiB0 aGUgZXZpY3Rpb24gcGF0aCwKPiArICogY29tcGFyaXNvbnMgb2YgcmVmYXVsdGVkLyhldmljdGVk K3Byb3RlY3RlZCkgZnJvbSB0aGUgZmlyc3QgdGllciBhbmQgdGhlCj4gKyAqIHJlc3QgaW5mZXIg d2hldGhlciBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3Jp cHRvcnMKPiArICogYXJlIHN0YXRpc3RpY2FsbHkgaG90IGFuZCB0aHVzIHdvcnRoIHByb3RlY3Rp bmcuCj4gKyAqCj4gKyAqIE1BWF9OUl9USUVSUyBpcyBzZXQgdG8gNCBzbyB0aGF0IHRoZSBtdWx0 aS1nZW4gTFJVIGNhbiBzdXBwb3J0IHR3aWNlIHRoZQo+ICsgKiBudW1iZXIgb2YgY2F0ZWdvcmll cyBvZiB0aGUgYWN0aXZlL2luYWN0aXZlIExSVSB3aGVuIGtlZXBpbmcgdHJhY2sgb2YKPiArICog YWNjZXNzZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLiBJdCB1c2VzIE1BWF9OUl9USUVSUy0y IHNwYXJlIGJpdHMgaW4KPiArICogZm9saW8tPmZsYWdzIChMUlVfUkVGU19NQVNLKS4KPiArICov Cj4gKyNkZWZpbmUgTUFYX05SX1RJRVJTCQk0VQo+ICsKPiAgICNpZm5kZWYgX19HRU5FUkFUSU5H X0JPVU5EU19ICj4gICAKPiAgIHN0cnVjdCBscnV2ZWM7Cj4gQEAgLTM2Miw2ICszODUsMTYgQEAg ZW51bSB7Cj4gICAJTFJVX0dFTl9GSUxFLAo+ICAgfTsKPiAgIAo+ICsjZGVmaW5lIE1JTl9MUlVf QkFUQ0gJCUJJVFNfUEVSX0xPTkcKPiArI2RlZmluZSBNQVhfTFJVX0JBVENICQkoTUlOX0xSVV9C QVRDSCAqIDEyOCkKPiArCj4gKy8qIHdoZXRoZXIgdG8ga2VlcCBoaXN0b3JpY2FsIHN0YXRzIGZy b20gZXZpY3RlZCBnZW5lcmF0aW9ucyAqLwo+ICsjaWZkZWYgQ09ORklHX0xSVV9HRU5fU1RBVFMK PiArI2RlZmluZSBOUl9ISVNUX0dFTlMJCU1BWF9OUl9HRU5TCj4gKyNlbHNlCj4gKyNkZWZpbmUg TlJfSElTVF9HRU5TCQkxVQo+ICsjZW5kaWYKPiArCj4gICAvKgo+ICAgICogVGhlIHlvdW5nZXN0 IGdlbmVyYXRpb24gbnVtYmVyIGlzIHN0b3JlZCBpbiBtYXhfc2VxIGZvciBib3RoIGFub24gYW5k IGZpbGUKPiAgICAqIHR5cGVzIGFzIHRoZXkgYXJlIGFnZWQgb24gYW4gZXF1YWwgZm9vdGluZy4g VGhlIG9sZGVzdCBnZW5lcmF0aW9uIG51bWJlcnMgYXJlCj4gQEAgLTM4NCw2ICs0MTcsMTUgQEAg c3RydWN0IGxydV9nZW5fc3RydWN0IHsKPiAgIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RzW01BWF9O Ul9HRU5TXVtBTk9OX0FORF9GSUxFXVtNQVhfTlJfWk9ORVNdOwo+ICAgCS8qIHRoZSBzaXplcyBv ZiB0aGUgYWJvdmUgbGlzdHMgKi8KPiAgIAlsb25nIG5yX3BhZ2VzW01BWF9OUl9HRU5TXVtBTk9O X0FORF9GSUxFXVtNQVhfTlJfWk9ORVNdOwo+ICsJLyogdGhlIGV4cG9uZW50aWFsIG1vdmluZyBh dmVyYWdlIG9mIHJlZmF1bHRlZCAqLwo+ICsJdW5zaWduZWQgbG9uZyBhdmdfcmVmYXVsdGVkW0FO T05fQU5EX0ZJTEVdW01BWF9OUl9USUVSU107Cj4gKwkvKiB0aGUgZXhwb25lbnRpYWwgbW92aW5n IGF2ZXJhZ2Ugb2YgZXZpY3RlZCtwcm90ZWN0ZWQgKi8KPiArCXVuc2lnbmVkIGxvbmcgYXZnX3Rv dGFsW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9USUVSU107Cj4gKwkvKiB0aGUgZmlyc3QgdGllciBk b2Vzbid0IG5lZWQgcHJvdGVjdGlvbiwgaGVuY2UgdGhlIG1pbnVzIG9uZSAqLwo+ICsJdW5zaWdu ZWQgbG9uZyBwcm90ZWN0ZWRbTlJfSElTVF9HRU5TXVtBTk9OX0FORF9GSUxFXVtNQVhfTlJfVElF UlMgLSAxXTsKPiArCS8qIGNhbiBiZSBtb2RpZmllZCB3aXRob3V0IGhvbGRpbmcgdGhlIExSVSBs b2NrICovCj4gKwlhdG9taWNfbG9uZ190IGV2aWN0ZWRbTlJfSElTVF9HRU5TXVtBTk9OX0FORF9G SUxFXVtNQVhfTlJfVElFUlNdOwo+ICsJYXRvbWljX2xvbmdfdCByZWZhdWx0ZWRbTlJfSElTVF9H RU5TXVtBTk9OX0FORF9GSUxFXVtNQVhfTlJfVElFUlNdOwo+ICAgfTsKPiAgIAo+ICAgdm9pZCBs cnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7Cj4gZGlmZiAtLWdpdCBh L2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy1sYXlvdXQuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1m bGFncy1sYXlvdXQuaAo+IGluZGV4IDI0MDkwNTQwN2ExOC4uN2Q3OTgxOGRjMDY1IDEwMDY0NAo+ IC0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy1sYXlvdXQuaAo+ICsrKyBiL2luY2x1ZGUv bGludXgvcGFnZS1mbGFncy1sYXlvdXQuaAo+IEBAIC0xMDYsNyArMTA2LDEwIEBACj4gICAjZXJy b3IgIk5vdCBlbm91Z2ggYml0cyBpbiBwYWdlIGZsYWdzIgo+ICAgI2VuZGlmCj4gICAKPiAtI2Rl ZmluZSBMUlVfUkVGU19XSURUSAkwCj4gKy8qIHNlZSB0aGUgY29tbWVudCBvbiBNQVhfTlJfVElF UlMgKi8KPiArI2RlZmluZSBMUlVfUkVGU19XSURUSAltaW4oX19MUlVfUkVGU19XSURUSCwgQklU U19QRVJfTE9ORyAtIE5SX1BBR0VGTEFHUyAtIFwKPiArCQkJICAgIFpPTkVTX1dJRFRIIC0gTFJV X0dFTl9XSURUSCAtIFNFQ1RJT05TX1dJRFRIIC0gXAo+ICsJCQkgICAgTk9ERVNfV0lEVEggLSBL QVNBTl9UQUdfV0lEVEggLSBMQVNUX0NQVVBJRF9XSURUSCkKPiAgIAo+ICAgI2VuZGlmCj4gICAj ZW5kaWYgLyogX0xJTlVYX1BBR0VfRkxBR1NfTEFZT1VUICovCj4gZGlmZiAtLWdpdCBhL2tlcm5l bC9ib3VuZHMuYyBiL2tlcm5lbC9ib3VuZHMuYwo+IGluZGV4IDVlZTYwNzc3ZDhlNC4uYjUyOTE4 MmU4YjA0IDEwMDY0NAo+IC0tLSBhL2tlcm5lbC9ib3VuZHMuYwo+ICsrKyBiL2tlcm5lbC9ib3Vu ZHMuYwo+IEBAIC0yNCw4ICsyNCwxMCBAQCBpbnQgbWFpbih2b2lkKQo+ICAgCURFRklORShTUElO TE9DS19TSVpFLCBzaXplb2Yoc3BpbmxvY2tfdCkpOwo+ICAgI2lmZGVmIENPTkZJR19MUlVfR0VO Cj4gICAJREVGSU5FKExSVV9HRU5fV0lEVEgsIG9yZGVyX2Jhc2VfMihNQVhfTlJfR0VOUyArIDEp KTsKPiArCURFRklORShfX0xSVV9SRUZTX1dJRFRILCBNQVhfTlJfVElFUlMgLSAyKTsKPiAgICNl bHNlCj4gICAJREVGSU5FKExSVV9HRU5fV0lEVEgsIDApOwo+ICsJREVGSU5FKF9fTFJVX1JFRlNf V0lEVEgsIDApOwo+ICAgI2VuZGlmCj4gICAJLyogRW5kIG9mIGNvbnN0YW50cyAqLwo+ICAgCj4g ZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCj4gaW5kZXggZTYyYmQ1MDEwODJi Li4wYWVhY2JkMzM2MWMgMTAwNjQ0Cj4gLS0tIGEvbW0vS2NvbmZpZwo+ICsrKyBiL21tL0tjb25m aWcKPiBAQCAtOTA5LDYgKzkwOSw3IEBAIGNvbmZpZyBBTk9OX1ZNQV9OQU1FCj4gICAJICBhcmVh IGZyb20gYmVpbmcgbWVyZ2VkIHdpdGggYWRqYWNlbnQgdmlydHVhbCBtZW1vcnkgYXJlYXMgZHVl IHRvIHRoZQo+ICAgCSAgZGlmZmVyZW5jZSBpbiB0aGVpciBuYW1lLgo+ICAgCj4gKyMgbXVsdGkt Z2VuIExSVSB7Cj4gICBjb25maWcgTFJVX0dFTgo+ICAgCWJvb2wgIk11bHRpLUdlbiBMUlUiCj4g ICAJZGVwZW5kcyBvbiBNTVUKPiBAQCAtOTE3LDYgKzkxOCwxNiBAQCBjb25maWcgTFJVX0dFTgo+ ICAgCWhlbHAKPiAgIAkgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8g b3ZlcmNvbW1pdCBtZW1vcnkuCj4gICAKPiArY29uZmlnIExSVV9HRU5fU1RBVFMKPiArCWJvb2wg IkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZyIKPiArCWRlcGVuZHMgb24gTFJVX0dFTgo+ICsJaGVs cAo+ICsJICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29r IGF0IGhpc3RvcmljYWwgc3RhdHMKPiArCSAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBk ZWJ1Z2dpbmcgcHVycG9zZS4KPiArCj4gKwkgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBh bmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLgo+ICsjIH0KPiArCj4gICBzb3VyY2UgIm1tL2Rh bW9uL0tjb25maWciCj4gICAKPiAgIGVuZG1lbnUKPiBkaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIv bW0vc3dhcC5jCj4gaW5kZXggYTY4NzBiYTBiZDgzLi5hOTlkMjIzMDhmMjggMTAwNjQ0Cj4gLS0t IGEvbW0vc3dhcC5jCj4gKysrIGIvbW0vc3dhcC5jCj4gQEAgLTQwNSw2ICs0MDUsNDAgQEAgc3Rh dGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykK PiAgIAlsb2NhbF91bmxvY2soJmxydV9wdmVjcy5sb2NrKTsKPiAgIH0KPiAgIAo+ICsjaWZkZWYg Q09ORklHX0xSVV9HRU4KPiArc3RhdGljIHZvaWQgZm9saW9faW5jX3JlZnMoc3RydWN0IGZvbGlv ICpmb2xpbykKPiArewo+ICsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJF QURfT05DRShmb2xpby0+ZmxhZ3MpOwo+ICsKPiArCWlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxl KGZvbGlvKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQo Zm9saW8pKSB7Cj4gKwkJZm9saW9fc2V0X3JlZmVyZW5jZWQoZm9saW8pOwo+ICsJCXJldHVybjsK PiArCX0KPiArCj4gKwlpZiAoIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHsKPiArCQlm b2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCS8q IHNlZSB0aGUgY29tbWVudCBvbiBNQVhfTlJfVElFUlMgKi8KPiArCWRvIHsKPiArCQluZXdfZmxh Z3MgPSBvbGRfZmxhZ3MgJiBMUlVfUkVGU19NQVNLOwo+ICsJCWlmIChuZXdfZmxhZ3MgPT0gTFJV X1JFRlNfTUFTSykKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCW5ld19mbGFncyArPSBCSVQoTFJVX1JF RlNfUEdPRkYpOwo+ICsJCW5ld19mbGFncyB8PSBvbGRfZmxhZ3MgJiB+TFJVX1JFRlNfTUFTSzsK PiArCX0gd2hpbGUgKCF0cnlfY21weGNoZygmZm9saW8tPmZsYWdzLCAmb2xkX2ZsYWdzLCBuZXdf ZmxhZ3MpKTsKPiArfQo+ICsjZWxzZQo+ICtzdGF0aWMgdm9pZCBmb2xpb19pbmNfcmVmcyhzdHJ1 Y3QgZm9saW8gKmZvbGlvKQo+ICt7Cj4gK30KPiArI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICov Cj4gKwo+ICAgLyoKPiAgICAqIE1hcmsgYSBwYWdlIGFzIGhhdmluZyBzZWVuIGFjdGl2aXR5Lgo+ ICAgICoKPiBAQCAtNDE3LDYgKzQ1MSwxMSBAQCBzdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3Rp dmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQo+ICAgICovCj4gICB2b2lkIGZvbGlvX21h cmtfYWNjZXNzZWQoc3RydWN0IGZvbGlvICpmb2xpbykKPiAgIHsKPiArCWlmIChscnVfZ2VuX2Vu YWJsZWQoKSkgewo+ICsJCWZvbGlvX2luY19yZWZzKGZvbGlvKTsKPiArCQlyZXR1cm47Cj4gKwl9 Cj4gKwo+ICAgCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkgewo+ICAgCQlmb2xp b19zZXRfcmVmZXJlbmNlZChmb2xpbyk7Cj4gICAJfSBlbHNlIGlmIChmb2xpb190ZXN0X3VuZXZp Y3RhYmxlKGZvbGlvKSkgewo+IGRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5j Cj4gaW5kZXggYjQxZmY5NzY1Y2M3Li44OTFmMGFiNjliM2EgMTAwNjQ0Cj4gLS0tIGEvbW0vdm1z Y2FuLmMKPiArKysgYi9tbS92bXNjYW4uYwo+IEBAIC0xMjc1LDkgKzEyNzUsMTEgQEAgc3RhdGlj IGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1 Y3QgZm9saW8gKmZvbGlvLAo+ICAgCj4gICAJaWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlv KSkgewo+ICAgCQlzd3BfZW50cnlfdCBzd2FwID0gZm9saW9fc3dhcF9lbnRyeShmb2xpbyk7Cj4g LQkJbWVtX2Nncm91cF9zd2Fwb3V0KGZvbGlvLCBzd2FwKTsKPiArCj4gKwkJLyogZ2V0IGEgc2hh ZG93IGVudHJ5IGJlZm9yZSBtZW1fY2dyb3VwX3N3YXBvdXQoKSBjbGVhcnMgZm9saW9fbWVtY2co KSAqLwo+ICAgCQlpZiAocmVjbGFpbWVkICYmICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpCj4g ICAJCQlzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpOwo+ ICsJCW1lbV9jZ3JvdXBfc3dhcG91dChmb2xpbywgc3dhcCk7Cj4gICAJCV9fZGVsZXRlX2Zyb21f c3dhcF9jYWNoZSgmZm9saW8tPnBhZ2UsIHN3YXAsIHNoYWRvdyk7Cj4gICAJCXhhX3VubG9ja19p cnEoJm1hcHBpbmctPmlfcGFnZXMpOwo+ICAgCQlwdXRfc3dhcF9wYWdlKCZmb2xpby0+cGFnZSwg c3dhcCk7Cj4gQEAgLTI2NDksNiArMjY1MSw5IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9j b3VudChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKPiAgIAl1bnNp Z25lZCBsb25nIGZpbGU7Cj4gICAJc3RydWN0IGxydXZlYyAqdGFyZ2V0X2xydXZlYzsKPiAgIAo+ ICsJaWYgKGxydV9nZW5fZW5hYmxlZCgpKQo+ICsJCXJldHVybjsKPiArCj4gICAJdGFyZ2V0X2xy dXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLT50YXJnZXRfbWVtX2Nncm91cCwgcGdkYXQpOwo+ ICAgCj4gICAJLyoKPiBAQCAtMjk3NCw2ICsyOTc5LDE3IEBAIHN0YXRpYyBib29sIGNhbl9hZ2Vf YW5vbl9wYWdlcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAo+ICAgICogICAgICAgICAgICAg ICAgICAgICAgICAgIHNob3J0aGFuZCBoZWxwZXJzCj4gICAgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Lwo+ICAgCj4gKyNkZWZpbmUgTFJVX1JFRlNfRkxBR1MJKEJJVChQR19yZWZlcmVuY2VkKSB8IEJJ VChQR193b3JraW5nc2V0KSkKPiArCj4gKyNkZWZpbmUgREVGSU5FX01BWF9TRVEobHJ1dmVjKQkJ CQkJCVwKPiArCXVuc2lnbmVkIGxvbmcgbWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS0+bHJ1 Z2VuLm1heF9zZXEpCj4gKwo+ICsjZGVmaW5lIERFRklORV9NSU5fU0VRKGxydXZlYykJCQkJCQlc Cj4gKwl1bnNpZ25lZCBsb25nIG1pbl9zZXFbQU5PTl9BTkRfRklMRV0gPSB7CQkJXAo+ICsJCVJF QURfT05DRSgobHJ1dmVjKS0+bHJ1Z2VuLm1pbl9zZXFbTFJVX0dFTl9BTk9OXSksCVwKPiArCQlS RUFEX09OQ0UoKGxydXZlYyktPmxydWdlbi5taW5fc2VxW0xSVV9HRU5fRklMRV0pLAlcCj4gKwl9 Cj4gKwo+ICAgI2RlZmluZSBmb3JfZWFjaF9nZW5fdHlwZV96b25lKGdlbiwgdHlwZSwgem9uZSkJ CQkJXAo+ICAgCWZvciAoKGdlbikgPSAwOyAoZ2VuKSA8IE1BWF9OUl9HRU5TOyAoZ2VuKSsrKQkJ CVwKPiAgIAkJZm9yICgodHlwZSkgPSAwOyAodHlwZSkgPCBBTk9OX0FORF9GSUxFOyAodHlwZSkr KykJXAo+IEBAIC0yOTk5LDYgKzMwMTUsNzUzIEBAIHN0YXRpYyBzdHJ1Y3QgbHJ1dmVjIF9fbWF5 YmVfdW51c2VkICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pCj4g ICAJcmV0dXJuIHBnZGF0ID8gJnBnZGF0LT5fX2xydXZlYyA6IE5VTEw7Cj4gICB9Cj4gICAKPiAr c3RhdGljIGludCBnZXRfc3dhcHBpbmVzcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBz Y2FuX2NvbnRyb2wgKnNjKQo+ICt7Cj4gKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2 ZWNfbWVtY2cobHJ1dmVjKTsKPiArCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNf cGdkYXQobHJ1dmVjKTsKPiArCj4gKwlpZiAoIWNhbl9kZW1vdGUocGdkYXQtPm5vZGVfaWQsIHNj KSAmJgo+ICsJICAgIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIDwgTUlOX0xS VV9CQVRDSCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlyZXR1cm4gbWVtX2Nncm91cF9zd2FwcGlu ZXNzKG1lbWNnKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBnZXRfbnJfZ2VucyhzdHJ1Y3QgbHJ1 dmVjICpscnV2ZWMsIGludCB0eXBlKQo+ICt7Cj4gKwlyZXR1cm4gbHJ1dmVjLT5scnVnZW4ubWF4 X3NlcSAtIGxydXZlYy0+bHJ1Z2VuLm1pbl9zZXFbdHlwZV0gKyAxOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVj KQo+ICt7Cj4gKwkvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9zdHJ1Y3QgKi8KPiArCXJl dHVybiBnZXRfbnJfZ2VucyhscnV2ZWMsIExSVV9HRU5fRklMRSkgPj0gTUlOX05SX0dFTlMgJiYK PiArCSAgICAgICBnZXRfbnJfZ2VucyhscnV2ZWMsIExSVV9HRU5fRklMRSkgPD0gZ2V0X25yX2dl bnMobHJ1dmVjLCBMUlVfR0VOX0FOT04pICYmCj4gKwkgICAgICAgZ2V0X25yX2dlbnMobHJ1dmVj LCBMUlVfR0VOX0FOT04pIDw9IE1BWF9OUl9HRU5TOwo+ICt9Cj4gKwo+ICsvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCj4gKyAqICAgICAgICAgICAgICAgICAgICAgICAgICByZWZhdWx0IGZlZWRiYWNr IGxvb3AKPiArICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPiArCj4gKy8qCj4gKyAqIEEgZmVlZGJh Y2sgbG9vcCBiYXNlZCBvbiBQcm9wb3J0aW9uYWwtSW50ZWdyYWwtRGVyaXZhdGl2ZSAoUElEKSBj b250cm9sbGVyLgo+ICsgKgo+ICsgKiBUaGUgUCB0ZXJtIGlzIHJlZmF1bHRlZC8oZXZpY3RlZCtw cm90ZWN0ZWQpIGZyb20gYSB0aWVyIGluIHRoZSBnZW5lcmF0aW9uCj4gKyAqIGN1cnJlbnRseSBi ZWluZyBldmljdGVkOyB0aGUgSSB0ZXJtIGlzIHRoZSBleHBvbmVudGlhbCBtb3ZpbmcgYXZlcmFn ZSBvZiB0aGUKPiArICogUCB0ZXJtIG92ZXIgdGhlIGdlbmVyYXRpb25zIHByZXZpb3VzbHkgZXZp Y3RlZCwgdXNpbmcgdGhlIHNtb290aGluZyBmYWN0b3IKPiArICogMS8yOyB0aGUgRCB0ZXJtIGlz bid0IHN1cHBvcnRlZC4KPiArICoKPiArICogVGhlIHNldHBvaW50IChTUCkgaXMgYWx3YXlzIHRo ZSBmaXJzdCB0aWVyIG9mIG9uZSB0eXBlOyB0aGUgcHJvY2VzcyB2YXJpYWJsZQo+ICsgKiAoUFYp IGlzIGVpdGhlciBhbnkgdGllciBvZiB0aGUgb3RoZXIgdHlwZSBvciBhbnkgb3RoZXIgdGllciBv ZiB0aGUgc2FtZQo+ICsgKiB0eXBlLgo+ICsgKgo+ICsgKiBUaGUgZXJyb3IgaXMgdGhlIGRpZmZl cmVuY2UgYmV0d2VlbiB0aGUgU1AgYW5kIHRoZSBQVjsgdGhlIGNvcnJlY3Rpb24gaXMKPiArICog dHVybiBvZmYgcHJvdGVjdGlvbiB3aGVuIFNQPlBWIG9yIHR1cm4gb24gcHJvdGVjdGlvbiB3aGVu IFNQPFBWLgo+ICsgKgo+ICsgKiBGb3IgZnV0dXJlIG9wdGltaXphdGlvbnM6Cj4gKyAqIDEuIFRo ZSBEIHRlcm0gbWF5IGRpc2NvdW50IHRoZSBvdGhlciB0d28gdGVybXMgb3ZlciB0aW1lIHNvIHRo YXQgbG9uZy1saXZlZAo+ICsgKiAgICBnZW5lcmF0aW9ucyBjYW4gcmVzaXN0IHN0YWxlIGluZm9y bWF0aW9uLgo+ICsgKi8KPiArc3RydWN0IGN0cmxfcG9zIHsKPiArCXVuc2lnbmVkIGxvbmcgcmVm YXVsdGVkOwo+ICsJdW5zaWduZWQgbG9uZyB0b3RhbDsKPiArCWludCBnYWluOwo+ICt9Owo+ICsK PiArc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0 eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCj4gKwkJCSAgc3RydWN0IGN0cmxfcG9zICpwb3MpCj4g K3sKPiArCXN0cnVjdCBscnVfZ2VuX3N0cnVjdCAqbHJ1Z2VuID0gJmxydXZlYy0+bHJ1Z2VuOwo+ ICsJaW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tPm1pbl9zZXFbdHlwZV0pOwo+ ICsKPiArCXBvcy0+cmVmYXVsdGVkID0gbHJ1Z2VuLT5hdmdfcmVmYXVsdGVkW3R5cGVdW3RpZXJd ICsKPiArCQkJIGF0b21pY19sb25nX3JlYWQoJmxydWdlbi0+cmVmYXVsdGVkW2hpc3RdW3R5cGVd W3RpZXJdKTsKPiArCXBvcy0+dG90YWwgPSBscnVnZW4tPmF2Z190b3RhbFt0eXBlXVt0aWVyXSAr Cj4gKwkJICAgICBhdG9taWNfbG9uZ19yZWFkKCZscnVnZW4tPmV2aWN0ZWRbaGlzdF1bdHlwZV1b dGllcl0pOwo+ICsJaWYgKHRpZXIpCj4gKwkJcG9zLT50b3RhbCArPSBscnVnZW4tPnByb3RlY3Rl ZFtoaXN0XVt0eXBlXVt0aWVyIC0gMV07Cj4gKwlwb3MtPmdhaW4gPSBnYWluOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCByZXNldF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0 eXBlLCBib29sIGNhcnJ5b3ZlcikKPiArewo+ICsJaW50IGhpc3QsIHRpZXI7Cj4gKwlzdHJ1Y3Qg bHJ1X2dlbl9zdHJ1Y3QgKmxydWdlbiA9ICZscnV2ZWMtPmxydWdlbjsKPiArCWJvb2wgY2xlYXIg PSBjYXJyeW92ZXIgPyBOUl9ISVNUX0dFTlMgPT0gMSA6IE5SX0hJU1RfR0VOUyA+IDE7Cj4gKwl1 bnNpZ25lZCBsb25nIHNlcSA9IGNhcnJ5b3ZlciA/IGxydWdlbi0+bWluX3NlcVt0eXBlXSA6IGxy dWdlbi0+bWF4X3NlcSArIDE7Cj4gKwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbHJ1dmVjLT5s cnVfbG9jayk7Cj4gKwo+ICsJaWYgKCFjYXJyeW92ZXIgJiYgIWNsZWFyKQo+ICsJCXJldHVybjsK PiArCj4gKwloaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEoc2VxKTsKPiArCj4gKwlmb3IgKHRpZXIg PSAwOyB0aWVyIDwgTUFYX05SX1RJRVJTOyB0aWVyKyspIHsKPiArCQlpZiAoY2FycnlvdmVyKSB7 Cj4gKwkJCXVuc2lnbmVkIGxvbmcgc3VtOwo+ICsKPiArCQkJc3VtID0gbHJ1Z2VuLT5hdmdfcmVm YXVsdGVkW3R5cGVdW3RpZXJdICsKPiArCQkJICAgICAgYXRvbWljX2xvbmdfcmVhZCgmbHJ1Z2Vu LT5yZWZhdWx0ZWRbaGlzdF1bdHlwZV1bdGllcl0pOwo+ICsJCQlXUklURV9PTkNFKGxydWdlbi0+ YXZnX3JlZmF1bHRlZFt0eXBlXVt0aWVyXSwgc3VtIC8gMik7Cj4gKwo+ICsJCQlzdW0gPSBscnVn ZW4tPmF2Z190b3RhbFt0eXBlXVt0aWVyXSArCj4gKwkJCSAgICAgIGF0b21pY19sb25nX3JlYWQo JmxydWdlbi0+ZXZpY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSk7Cj4gKwkJCWlmICh0aWVyKQo+ICsJ CQkJc3VtICs9IGxydWdlbi0+cHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXIgLSAxXTsKPiArCQkJ V1JJVEVfT05DRShscnVnZW4tPmF2Z190b3RhbFt0eXBlXVt0aWVyXSwgc3VtIC8gMik7Cj4gKwkJ fQo+ICsKPiArCQlpZiAoY2xlYXIpIHsKPiArCQkJYXRvbWljX2xvbmdfc2V0KCZscnVnZW4tPnJl ZmF1bHRlZFtoaXN0XVt0eXBlXVt0aWVyXSwgMCk7Cj4gKwkJCWF0b21pY19sb25nX3NldCgmbHJ1 Z2VuLT5ldmljdGVkW2hpc3RdW3R5cGVdW3RpZXJdLCAwKTsKPiArCQkJaWYgKHRpZXIpCj4gKwkJ CQlXUklURV9PTkNFKGxydWdlbi0+cHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXIgLSAxXSwgMCk7 Cj4gKwkJfQo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2Vycihz dHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KQo+ICt7Cj4gKwkvKgo+ICsJ ICogUmV0dXJuIHRydWUgaWYgdGhlIFBWIGhhcyBhIGxpbWl0ZWQgbnVtYmVyIG9mIHJlZmF1bHRz IG9yIGEgbG93ZXIKPiArCSAqIHJlZmF1bHRlZC90b3RhbCB0aGFuIHRoZSBTUC4KPiArCSAqLwo+ ICsJcmV0dXJuIHB2LT5yZWZhdWx0ZWQgPCBNSU5fTFJVX0JBVENIIHx8Cj4gKwkgICAgICAgcHYt PnJlZmF1bHRlZCAqIChzcC0+dG90YWwgKyBNSU5fTFJVX0JBVENIKSAqIHNwLT5nYWluIDw9Cj4g KwkgICAgICAgKHNwLT5yZWZhdWx0ZWQgKyAxKSAqIHB2LT50b3RhbCAqIHB2LT5nYWluOwo+ICt9 Cj4gKwo+ICsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4gKyAqICAgICAgICAgICAgICAgICAgICAg ICAgICB0aGUgYWdpbmcKPiArICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPiArCj4gK3N0YXRpYyBp bnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9s aW8sIGJvb2wgcmVjbGFpbWluZykKPiArewo+ICsJaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xy dShmb2xpbyk7Cj4gKwlzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgKmxydWdlbiA9ICZscnV2ZWMtPmxy dWdlbjsKPiArCWludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4t Pm1pbl9zZXFbdHlwZV0pOwo+ICsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9 IFJFQURfT05DRShmb2xpby0+ZmxhZ3MpOwo+ICsKPiArCVZNX1dBUk5fT05fT05DRV9GT0xJTygh KG9sZF9mbGFncyAmIExSVV9HRU5fTUFTSyksIGZvbGlvKTsKPiArCj4gKwlkbyB7Cj4gKwkJbmV3 X2dlbiA9IChvbGRfZ2VuICsgMSkgJSBNQVhfTlJfR0VOUzsKPiArCj4gKwkJbmV3X2ZsYWdzID0g b2xkX2ZsYWdzICYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19NQVNLIHwgTFJVX1JFRlNfRkxB R1MpOwo+ICsJCW5ld19mbGFncyB8PSAobmV3X2dlbiArIDFVTCkgPDwgTFJVX0dFTl9QR09GRjsK PiArCQkvKiBmb3IgZm9saW9fZW5kX3dyaXRlYmFjaygpICovCj4gKwkJaWYgKHJlY2xhaW1pbmcp Cj4gKwkJCW5ld19mbGFncyB8PSBCSVQoUEdfcmVjbGFpbSk7Cj4gKwl9IHdoaWxlICghdHJ5X2Nt cHhjaGcoJmZvbGlvLT5mbGFncywgJm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7Cj4gKwo+ICsJbHJ1 X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKPiArCj4g KwlyZXR1cm4gbmV3X2dlbjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW5jX21pbl9zZXEoc3Ry dWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSkKPiArewo+ICsJc3RydWN0IGxydV9nZW5fc3Ry dWN0ICpscnVnZW4gPSAmbHJ1dmVjLT5scnVnZW47Cj4gKwo+ICsJcmVzZXRfY3RybF9wb3MobHJ1 dmVjLCB0eXBlLCB0cnVlKTsKPiArCVdSSVRFX09OQ0UobHJ1Z2VuLT5taW5fc2VxW3R5cGVdLCBs cnVnZW4tPm1pbl9zZXFbdHlwZV0gKyAxKTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgdHJ5X3Rv X2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBjYW5fc3dhcCkKPiArewo+ ICsJaW50IGdlbiwgdHlwZSwgem9uZTsKPiArCWJvb2wgc3VjY2VzcyA9IGZhbHNlOwo+ICsJc3Ry dWN0IGxydV9nZW5fc3RydWN0ICpscnVnZW4gPSAmbHJ1dmVjLT5scnVnZW47Cj4gKwlERUZJTkVf TUlOX1NFUShscnV2ZWMpOwo+ICsKPiArCVZNX1dBUk5fT05fT05DRSghc2VxX2lzX3ZhbGlkKGxy dXZlYykpOwo+ICsKPiArCS8qIGZpbmQgdGhlIG9sZGVzdCBwb3B1bGF0ZWQgZ2VuZXJhdGlvbiAq Lwo+ICsJZm9yICh0eXBlID0gIWNhbl9zd2FwOyB0eXBlIDwgQU5PTl9BTkRfRklMRTsgdHlwZSsr KSB7Cj4gKwkJd2hpbGUgKG1pbl9zZXFbdHlwZV0gKyBNSU5fTlJfR0VOUyA8PSBscnVnZW4tPm1h eF9zZXEpIHsKPiArCQkJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtaW5fc2VxW3R5cGVdKTsKPiAr Cj4gKwkJCWZvciAoem9uZSA9IDA7IHpvbmUgPCBNQVhfTlJfWk9ORVM7IHpvbmUrKykgewo+ICsJ CQkJaWYgKCFsaXN0X2VtcHR5KCZscnVnZW4tPmxpc3RzW2dlbl1bdHlwZV1bem9uZV0pKQo+ICsJ CQkJCWdvdG8gbmV4dDsKPiArCQkJfQo+ICsKPiArCQkJbWluX3NlcVt0eXBlXSsrOwo+ICsJCX0K PiArbmV4dDoKPiArCQk7Cj4gKwl9Cj4gKwo+ICsJLyogc2VlIHRoZSBjb21tZW50IG9uIGxydV9n ZW5fc3RydWN0ICovCj4gKwlpZiAoY2FuX3N3YXApIHsKPiArCQltaW5fc2VxW0xSVV9HRU5fQU5P Tl0gPSBtaW4obWluX3NlcVtMUlVfR0VOX0FOT05dLCBtaW5fc2VxW0xSVV9HRU5fRklMRV0pOwo+ ICsJCW1pbl9zZXFbTFJVX0dFTl9GSUxFXSA9IG1heChtaW5fc2VxW0xSVV9HRU5fQU5PTl0sIGxy dWdlbi0+bWluX3NlcVtMUlVfR0VOX0ZJTEVdKTsKPiArCX0KPiArCj4gKwlmb3IgKHR5cGUgPSAh Y2FuX3N3YXA7IHR5cGUgPCBBTk9OX0FORF9GSUxFOyB0eXBlKyspIHsKPiArCQlpZiAobWluX3Nl cVt0eXBlXSA9PSBscnVnZW4tPm1pbl9zZXFbdHlwZV0pCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiAr CQlyZXNldF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRydWUpOwo+ICsJCVdSSVRFX09OQ0UobHJ1 Z2VuLT5taW5fc2VxW3R5cGVdLCBtaW5fc2VxW3R5cGVdKTsKPiArCQlzdWNjZXNzID0gdHJ1ZTsK PiArCX0KPiArCj4gKwlyZXR1cm4gc3VjY2VzczsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW5j X21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsIGJv b2wgY2FuX3N3YXApCj4gK3sKPiArCWludCBwcmV2LCBuZXh0Owo+ICsJaW50IHR5cGUsIHpvbmU7 Cj4gKwlzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgKmxydWdlbiA9ICZscnV2ZWMtPmxydWdlbjsKPiAr Cj4gKwlzcGluX2xvY2tfaXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKPiArCj4gKwlWTV9XQVJOX09O X09OQ0UoIXNlcV9pc192YWxpZChscnV2ZWMpKTsKPiArCj4gKwlpZiAobWF4X3NlcSAhPSBscnVn ZW4tPm1heF9zZXEpCj4gKwkJZ290byB1bmxvY2s7Cj4gKwo+ICsJZm9yICh0eXBlID0gMDsgdHlw ZSA8IEFOT05fQU5EX0ZJTEU7IHR5cGUrKykgewo+ICsJCWlmIChnZXRfbnJfZ2VucyhscnV2ZWMs IHR5cGUpICE9IE1BWF9OUl9HRU5TKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJVk1fV0FSTl9P Tl9PTkNFKHR5cGUgPT0gTFJVX0dFTl9GSUxFIHx8IGNhbl9zd2FwKTsKPiArCj4gKwkJaW5jX21p bl9zZXEobHJ1dmVjLCB0eXBlKTsKPiArCX0KPiArCj4gKwkvKgo+ICsJICogVXBkYXRlIHRoZSBh Y3RpdmUvaW5hY3RpdmUgTFJVIHNpemVzIGZvciBjb21wYXRpYmlsaXR5LiBCb3RoIHNpZGVzIG9m Cj4gKwkgKiB0aGUgY3VycmVudCBtYXhfc2VxIG5lZWQgdG8gYmUgY292ZXJlZCwgc2luY2UgbWF4 X3NlcSsxIGNhbiBvdmVybGFwCj4gKwkgKiB3aXRoIG1pbl9zZXFbTFJVX0dFTl9BTk9OXSBpZiBz d2FwcGluZyBpcyBjb25zdHJhaW5lZC4gQW5kIGlmIHRoZXkgZG8KPiArCSAqIG92ZXJsYXAsIGNv bGQvaG90IGludmVyc2lvbiBoYXBwZW5zLgo+ICsJICovCj4gKwlwcmV2ID0gbHJ1X2dlbl9mcm9t X3NlcShscnVnZW4tPm1heF9zZXEgLSAxKTsKPiArCW5leHQgPSBscnVfZ2VuX2Zyb21fc2VxKGxy dWdlbi0+bWF4X3NlcSArIDEpOwo+ICsKPiArCWZvciAodHlwZSA9IDA7IHR5cGUgPCBBTk9OX0FO RF9GSUxFOyB0eXBlKyspIHsKPiArCQlmb3IgKHpvbmUgPSAwOyB6b25lIDwgTUFYX05SX1pPTkVT OyB6b25lKyspIHsKPiArCQkJZW51bSBscnVfbGlzdCBscnUgPSB0eXBlICogTFJVX0lOQUNUSVZF X0ZJTEU7Cj4gKwkJCWxvbmcgZGVsdGEgPSBscnVnZW4tPm5yX3BhZ2VzW3ByZXZdW3R5cGVdW3pv bmVdIC0KPiArCQkJCSAgICAgbHJ1Z2VuLT5ucl9wYWdlc1tuZXh0XVt0eXBlXVt6b25lXTsKPiAr Cj4gKwkJCWlmICghZGVsdGEpCj4gKwkJCQljb250aW51ZTsKPiArCj4gKwkJCV9fdXBkYXRlX2xy dV9zaXplKGxydXZlYywgbHJ1LCB6b25lLCBkZWx0YSk7Cj4gKwkJCV9fdXBkYXRlX2xydV9zaXpl KGxydXZlYywgbHJ1ICsgTFJVX0FDVElWRSwgem9uZSwgLWRlbHRhKTsKPiArCQl9Cj4gKwl9Cj4g Kwo+ICsJZm9yICh0eXBlID0gMDsgdHlwZSA8IEFOT05fQU5EX0ZJTEU7IHR5cGUrKykKPiArCQly ZXNldF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIGZhbHNlKTsKPiArCj4gKwkvKiBtYWtlIHN1cmUg cHJlY2VkaW5nIG1vZGlmaWNhdGlvbnMgYXBwZWFyICovCj4gKwlzbXBfc3RvcmVfcmVsZWFzZSgm bHJ1Z2VuLT5tYXhfc2VxLCBscnVnZW4tPm1heF9zZXEgKyAxKTsKPiArdW5sb2NrOgo+ICsJc3Bp bl91bmxvY2tfaXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKPiArfQo+ICsKPiArc3RhdGljIGxvbmcg Z2V0X25yX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4 X3NlcSwKPiArCQkJICAgICB1bnNpZ25lZCBsb25nICptaW5fc2VxLCBib29sIGNhbl9zd2FwLCBi b29sICpuZWVkX2FnaW5nKQo+ICt7Cj4gKwlpbnQgZ2VuLCB0eXBlLCB6b25lOwo+ICsJbG9uZyBv bGQgPSAwOwo+ICsJbG9uZyB5b3VuZyA9IDA7Cj4gKwlsb25nIHRvdGFsID0gMDsKPiArCXN0cnVj dCBscnVfZ2VuX3N0cnVjdCAqbHJ1Z2VuID0gJmxydXZlYy0+bHJ1Z2VuOwo+ICsKPiArCWZvciAo dHlwZSA9ICFjYW5fc3dhcDsgdHlwZSA8IEFOT05fQU5EX0ZJTEU7IHR5cGUrKykgewo+ICsJCXVu c2lnbmVkIGxvbmcgc2VxOwo+ICsKPiArCQlmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSA8 PSBtYXhfc2VxOyBzZXErKykgewo+ICsJCQlsb25nIHNpemUgPSAwOwo+ICsKPiArCQkJZ2VuID0g bHJ1X2dlbl9mcm9tX3NlcShzZXEpOwo+ICsKPiArCQkJZm9yICh6b25lID0gMDsgem9uZSA8IE1B WF9OUl9aT05FUzsgem9uZSsrKQo+ICsJCQkJc2l6ZSArPSBSRUFEX09OQ0UobHJ1Z2VuLT5ucl9w YWdlc1tnZW5dW3R5cGVdW3pvbmVdKTsKPiArCj4gKwkJCXRvdGFsICs9IHNpemU7Cj4gKwkJCWlm IChzZXEgPT0gbWF4X3NlcSkKPiArCQkJCXlvdW5nICs9IHNpemU7Cj4gKwkJCWlmIChzZXEgKyBN SU5fTlJfR0VOUyA9PSBtYXhfc2VxKQo+ICsJCQkJb2xkICs9IHNpemU7Cj4gKwkJfQo+ICsJfQo+ ICsKPiArCS8qCj4gKwkgKiBUaGUgYWdpbmcgdHJpZXMgdG8gYmUgbGF6eSB0byByZWR1Y2UgdGhl IG92ZXJoZWFkLiBPbiB0aGUgb3RoZXIgaGFuZCwKPiArCSAqIHRoZSBldmljdGlvbiBzdGFsbHMg d2hlbiB0aGUgbnVtYmVyIG9mIGdlbmVyYXRpb25zIHJlYWNoZXMKPiArCSAqIE1JTl9OUl9HRU5T LiBTbyBpZGVhbGx5LCB0aGVyZSBzaG91bGQgYmUgTUlOX05SX0dFTlMrMSBnZW5lcmF0aW9ucywK PiArCSAqIGhlbmNlIHRoZSBmaXJzdCB0d28gaWYncy4KPiArCSAqCj4gKwkgKiBBbHNvIGl0J3Mg aWRlYWwgdG8gc3ByZWFkIHBhZ2VzIG91dCBldmVubHksIG1lYW5pbmcgMS8oTUlOX05SX0dFTlMr MSkKPiArCSAqIG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMgZm9yIGVhY2ggZ2VuZXJhdGlv bi4gQSByZWFzb25hYmxlIHJhbmdlCj4gKwkgKiBmb3IgdGhpcyBhdmVyYWdlIHBvcnRpb24gaXMg WzEvTUlOX05SX0dFTlMsIDEvKE1JTl9OUl9HRU5TKzIpXS4gVGhlCj4gKwkgKiBldmljdGlvbiBj YXJlcyBhYm91dCB0aGUgbG93ZXIgYm91bmQgb2YgY29sZCBwYWdlcywgd2hlcmVhcyB0aGUgYWdp bmcKPiArCSAqIGNhcmVzIGFib3V0IHRoZSB1cHBlciBib3VuZCBvZiBob3QgcGFnZXMuCj4gKwkg Ki8KPiArCWlmIChtaW5fc2VxWyFjYW5fc3dhcF0gKyBNSU5fTlJfR0VOUyA+IG1heF9zZXEpCj4g KwkJKm5lZWRfYWdpbmcgPSB0cnVlOwo+ICsJZWxzZSBpZiAobWluX3NlcVshY2FuX3N3YXBdICsg TUlOX05SX0dFTlMgPCBtYXhfc2VxKQo+ICsJCSpuZWVkX2FnaW5nID0gZmFsc2U7Cj4gKwllbHNl IGlmICh5b3VuZyAqIE1JTl9OUl9HRU5TID4gdG90YWwpCj4gKwkJKm5lZWRfYWdpbmcgPSB0cnVl Owo+ICsJZWxzZSBpZiAob2xkICogKE1JTl9OUl9HRU5TICsgMikgPCB0b3RhbCkKPiArCQkqbmVl ZF9hZ2luZyA9IHRydWU7Cj4gKwllbHNlCj4gKwkJKm5lZWRfYWdpbmcgPSBmYWxzZTsKPiArCj4g KwlyZXR1cm4gdG90YWwgPiAwID8gdG90YWwgOiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBh Z2VfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2Mp Cj4gK3sKPiArCWJvb2wgbmVlZF9hZ2luZzsKPiArCWxvbmcgbnJfdG9fc2NhbjsKPiArCWludCBz d2FwcGluZXNzID0gZ2V0X3N3YXBwaW5lc3MobHJ1dmVjLCBzYyk7Cj4gKwlzdHJ1Y3QgbWVtX2Nn cm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKPiArCURFRklORV9NQVhfU0VRKGxy dXZlYyk7Cj4gKwlERUZJTkVfTUlOX1NFUShscnV2ZWMpOwo+ICsKPiArCVZNX1dBUk5fT05fT05D RShzYy0+bWVtY2dfbG93X3JlY2xhaW0pOwo+ICsKPiArCW1lbV9jZ3JvdXBfY2FsY3VsYXRlX3By b3RlY3Rpb24oTlVMTCwgbWVtY2cpOwo+ICsKPiArCWlmIChtZW1fY2dyb3VwX2JlbG93X21pbiht ZW1jZykpCj4gKwkJcmV0dXJuOwo+ICsKPiArCW5yX3RvX3NjYW4gPSBnZXRfbnJfZXZpY3RhYmxl KGxydXZlYywgbWF4X3NlcSwgbWluX3NlcSwgc3dhcHBpbmVzcywgJm5lZWRfYWdpbmcpOwo+ICsJ aWYgKCFucl90b19zY2FuKQo+ICsJCXJldHVybjsKPiArCj4gKwlucl90b19zY2FuID4+PSBzYy0+ cHJpb3JpdHk7Cj4gKwo+ICsJaWYgKCFtZW1fY2dyb3VwX29ubGluZShtZW1jZykpCj4gKwkJbnJf dG9fc2NhbisrOwo+ICsKPiArCWlmIChucl90b19zY2FuICYmIG5lZWRfYWdpbmcpCj4gKwkJaW5j X21heF9zZXEobHJ1dmVjLCBtYXhfc2VxLCBzd2FwcGluZXNzKTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qg c2Nhbl9jb250cm9sICpzYykKPiArewo+ICsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwo+ICsK PiArCVZNX1dBUk5fT05fT05DRSghY3VycmVudF9pc19rc3dhcGQoKSk7Cj4gKwo+ICsJbWVtY2cg PSBtZW1fY2dyb3VwX2l0ZXIoTlVMTCwgTlVMTCwgTlVMTCk7Cj4gKwlkbyB7Cj4gKwkJc3RydWN0 IGxydXZlYyAqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKPiArCj4g KwkJYWdlX2xydXZlYyhscnV2ZWMsIHNjKTsKPiArCj4gKwkJY29uZF9yZXNjaGVkKCk7Cj4gKwl9 IHdoaWxlICgobWVtY2cgPSBtZW1fY2dyb3VwX2l0ZXIoTlVMTCwgbWVtY2csIE5VTEwpKSk7Cj4g K30KPiArCj4gKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKPiArICogICAgICAgICAgICAgICAgICAg ICAgICAgIHRoZSBldmljdGlvbgo+ICsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo+ICsKPiArc3Rh dGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAq Zm9saW8sIGludCB0aWVyX2lkeCkKPiArewo+ICsJYm9vbCBzdWNjZXNzOwo+ICsJaW50IGdlbiA9 IGZvbGlvX2xydV9nZW4oZm9saW8pOwo+ICsJaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShm b2xpbyk7Cj4gKwlpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pOwo+ICsJaW50IGRlbHRh ID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwo+ICsJaW50IHJlZnMgPSBmb2xpb19scnVfcmVmcyhm b2xpbyk7Cj4gKwlpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzKTsKPiArCXN0cnVj dCBscnVfZ2VuX3N0cnVjdCAqbHJ1Z2VuID0gJmxydXZlYy0+bHJ1Z2VuOwo+ICsKPiArCVZNX1dB Uk5fT05fT05DRV9GT0xJTyhnZW4gPj0gTUFYX05SX0dFTlMsIGZvbGlvKTsKPiArCj4gKwkvKiB1 bmV2aWN0YWJsZSAqLwo+ICsJaWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKSB7Cj4gKwkJc3Vj Y2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpOwo+ICsJCVZNX1dB Uk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pOwo+ICsJCWZvbGlvX3NldF91bmV2aWN0 YWJsZShmb2xpbyk7Cj4gKwkJbHJ1dmVjX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvKTsKPiArCQlf X2NvdW50X3ZtX2V2ZW50cyhVTkVWSUNUQUJMRV9QR0NVTExFRCwgZGVsdGEpOwo+ICsJCXJldHVy biB0cnVlOwo+ICsJfQo+ICsKPiArCS8qIGRpcnRpZWQgbGF6eWZyZWUgKi8KPiArCWlmICh0eXBl ID09IExSVV9HRU5fRklMRSAmJiBmb2xpb190ZXN0X2Fub24oZm9saW8pICYmIGZvbGlvX3Rlc3Rf ZGlydHkoZm9saW8pKSB7Cj4gKwkJc3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywg Zm9saW8sIHRydWUpOwo+ICsJCVZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8p Owo+ICsJCWZvbGlvX3NldF9zd2FwYmFja2VkKGZvbGlvKTsKPiArCQlscnV2ZWNfYWRkX2ZvbGlv X3RhaWwobHJ1dmVjLCBmb2xpbyk7Cj4gKwkJcmV0dXJuIHRydWU7Cj4gKwl9Cj4gKwo+ICsJLyog cHJvdGVjdGVkICovCj4gKwlpZiAodGllciA+IHRpZXJfaWR4KSB7Cj4gKwkJaW50IGhpc3QgPSBs cnVfaGlzdF9mcm9tX3NlcShscnVnZW4tPm1pbl9zZXFbdHlwZV0pOwo+ICsKPiArCQlnZW4gPSBm b2xpb19pbmNfZ2VuKGxydXZlYywgZm9saW8sIGZhbHNlKTsKPiArCQlsaXN0X21vdmVfdGFpbCgm Zm9saW8tPmxydSwgJmxydWdlbi0+bGlzdHNbZ2VuXVt0eXBlXVt6b25lXSk7Cj4gKwo+ICsJCVdS SVRFX09OQ0UobHJ1Z2VuLT5wcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllciAtIDFdLAo+ICsJCQkg ICBscnVnZW4tPnByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyIC0gMV0gKyBkZWx0YSk7Cj4gKwkJ X19tb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9CQVNFICsgdHlw ZSwgZGVsdGEpOwo+ICsJCXJldHVybiB0cnVlOwo+ICsJfQo+ICsKPiArCS8qIHdhaXRpbmcgZm9y IHdyaXRlYmFjayAqLwo+ICsJaWYgKGZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSB8fCBmb2xpb190 ZXN0X3dyaXRlYmFjayhmb2xpbykgfHwKPiArCSAgICAodHlwZSA9PSBMUlVfR0VOX0ZJTEUgJiYg Zm9saW9fdGVzdF9kaXJ0eShmb2xpbykpKSB7Cj4gKwkJZ2VuID0gZm9saW9faW5jX2dlbihscnV2 ZWMsIGZvbGlvLCB0cnVlKTsKPiArCQlsaXN0X21vdmUoJmZvbGlvLT5scnUsICZscnVnZW4tPmxp c3RzW2dlbl1bdHlwZV1bem9uZV0pOwo+ICsJCXJldHVybiB0cnVlOwo+ICsJfQo+ICsKPiArCXJl dHVybiBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3Qg bHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wg KnNjKQo+ICt7Cj4gKwlib29sIHN1Y2Nlc3M7Cj4gKwo+ICsJaWYgKCFzYy0+bWF5X3VubWFwICYm IGZvbGlvX21hcHBlZChmb2xpbykpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWlmICghKHNj LT5tYXlfd3JpdGVwYWdlICYmIChzYy0+Z2ZwX21hc2sgJiBfX0dGUF9JTykpICYmCj4gKwkgICAg KGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIHx8Cj4gKwkgICAgIChmb2xpb190ZXN0X2Fub24oZm9s aW8pICYmICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKSkKPiArCQlyZXR1cm4gZmFsc2U7 Cj4gKwo+ICsJaWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvKSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4g Kwo+ICsJaWYgKCFmb2xpb190ZXN0X2NsZWFyX2xydShmb2xpbykpIHsKPiArCQlmb2xpb19wdXQo Zm9saW8pOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwlzdWNjZXNzID0gbHJ1X2dl bl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7Cj4gKwlWTV9XQVJOX09OX09OQ0VfRk9M SU8oIXN1Y2Nlc3MsIGZvbGlvKTsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3Rh dGljIGludCBzY2FuX2ZvbGlvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2Nv bnRyb2wgKnNjLAo+ICsJCSAgICAgICBpbnQgdHlwZSwgaW50IHRpZXIsIHN0cnVjdCBsaXN0X2hl YWQgKmxpc3QpCj4gK3sKPiArCWludCBnZW4sIHpvbmU7Cj4gKwllbnVtIHZtX2V2ZW50X2l0ZW0g aXRlbTsKPiArCWludCBzb3J0ZWQgPSAwOwo+ICsJaW50IHNjYW5uZWQgPSAwOwo+ICsJaW50IGlz b2xhdGVkID0gMDsKPiArCWludCByZW1haW5pbmcgPSBNQVhfTFJVX0JBVENIOwo+ICsJc3RydWN0 IGxydV9nZW5fc3RydWN0ICpscnVnZW4gPSAmbHJ1dmVjLT5scnVnZW47Cj4gKwlzdHJ1Y3QgbWVt X2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKPiArCj4gKwlWTV9XQVJOX09O X09OQ0UoIWxpc3RfZW1wdHkobGlzdCkpOwo+ICsKPiArCWlmIChnZXRfbnJfZ2VucyhscnV2ZWMs IHR5cGUpID09IE1JTl9OUl9HRU5TKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWdlbiA9IGxydV9n ZW5fZnJvbV9zZXEobHJ1Z2VuLT5taW5fc2VxW3R5cGVdKTsKPiArCj4gKwlmb3IgKHpvbmUgPSBz Yy0+cmVjbGFpbV9pZHg7IHpvbmUgPj0gMDsgem9uZS0tKSB7Cj4gKwkJTElTVF9IRUFEKG1vdmVk KTsKPiArCQlpbnQgc2tpcHBlZCA9IDA7Cj4gKwkJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZs cnVnZW4tPmxpc3RzW2dlbl1bdHlwZV1bem9uZV07Cj4gKwo+ICsJCXdoaWxlICghbGlzdF9lbXB0 eShoZWFkKSkgewo+ICsJCQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQp Owo+ICsJCQlpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7Cj4gKwo+ICsJCQlWTV9X QVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTsK PiArCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSwgZm9s aW8pOwo+ICsJCQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfZmlsZV9scnUoZm9saW8p ICE9IHR5cGUsIGZvbGlvKTsKPiArCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3pvbmVu dW0oZm9saW8pICE9IHpvbmUsIGZvbGlvKTsKPiArCj4gKwkJCXNjYW5uZWQgKz0gZGVsdGE7Cj4g Kwo+ICsJCQlpZiAoc29ydF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0aWVyKSkKPiArCQkJCXNvcnRl ZCArPSBkZWx0YTsKPiArCQkJZWxzZSBpZiAoaXNvbGF0ZV9mb2xpbyhscnV2ZWMsIGZvbGlvLCBz YykpIHsKPiArCQkJCWxpc3RfYWRkKCZmb2xpby0+bHJ1LCBsaXN0KTsKPiArCQkJCWlzb2xhdGVk ICs9IGRlbHRhOwo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJbGlzdF9tb3ZlKCZmb2xpby0+bHJ1LCAm bW92ZWQpOwo+ICsJCQkJc2tpcHBlZCArPSBkZWx0YTsKPiArCQkJfQo+ICsKPiArCQkJaWYgKCEt LXJlbWFpbmluZyB8fCBtYXgoaXNvbGF0ZWQsIHNraXBwZWQpID49IE1JTl9MUlVfQkFUQ0gpCj4g KwkJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCWlmIChza2lwcGVkKSB7Cj4gKwkJCWxpc3Rfc3Bs aWNlKCZtb3ZlZCwgaGVhZCk7Cj4gKwkJCV9fY291bnRfemlkX3ZtX2V2ZW50cyhQR1NDQU5fU0tJ UCwgem9uZSwgc2tpcHBlZCk7Cj4gKwkJfQo+ICsKPiArCQlpZiAoIXJlbWFpbmluZyB8fCBpc29s YXRlZCA+PSBNSU5fTFJVX0JBVENIKQo+ICsJCQlicmVhazsKPiArCX0KPiArCj4gKwlpdGVtID0g Y3VycmVudF9pc19rc3dhcGQoKSA/IFBHU0NBTl9LU1dBUEQgOiBQR1NDQU5fRElSRUNUOwo+ICsJ aWYgKCFjZ3JvdXBfcmVjbGFpbShzYykpIHsKPiArCQlfX2NvdW50X3ZtX2V2ZW50cyhpdGVtLCBp c29sYXRlZCk7Cj4gKwkJX19jb3VudF92bV9ldmVudHMoUEdSRUZJTEwsIHNvcnRlZCk7Cj4gKwl9 Cj4gKwlfX2NvdW50X21lbWNnX2V2ZW50cyhtZW1jZywgaXRlbSwgaXNvbGF0ZWQpOwo+ICsJX19j b3VudF9tZW1jZ19ldmVudHMobWVtY2csIFBHUkVGSUxMLCBzb3J0ZWQpOwo+ICsJX19jb3VudF92 bV9ldmVudHMoUEdTQ0FOX0FOT04gKyB0eXBlLCBpc29sYXRlZCk7Cj4gKwo+ICsJLyoKPiArCSAq IFRoZXJlIG1pZ2h0IG5vdCBiZSBlbGlnaWJsZSBwYWdlcyBkdWUgdG8gcmVjbGFpbV9pZHgsIG1h eV91bm1hcCBhbmQKPiArCSAqIG1heV93cml0ZXBhZ2UuIENoZWNrIHRoZSByZW1haW5pbmcgdG8g cHJldmVudCBsaXZlbG9jayBpZiB0aGVyZSBpcyBubwo+ICsJICogcHJvZ3Jlc3MuCj4gKwkgKi8K PiArCXJldHVybiBpc29sYXRlZCB8fCAhcmVtYWluaW5nID8gc2Nhbm5lZCA6IDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5 cGUpCj4gK3sKPiArCWludCB0aWVyOwo+ICsJc3RydWN0IGN0cmxfcG9zIHNwLCBwdjsKPiArCj4g KwkvKgo+ICsJICogVG8gbGVhdmUgYSBtYXJnaW4gZm9yIGZsdWN0dWF0aW9ucywgdXNlIGEgbGFy Z2VyIGdhaW4gZmFjdG9yICgxOjIpLgo+ICsJICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVz ZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlCj4gKwkgKiBhcyBtYW55 IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLgo+ICsJICovCj4gKwlyZWFkX2N0cmxfcG9zKGxy dXZlYywgdHlwZSwgMCwgMSwgJnNwKTsKPiArCWZvciAodGllciA9IDE7IHRpZXIgPCBNQVhfTlJf VElFUlM7IHRpZXIrKykgewo+ICsJCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCAy LCAmcHYpOwo+ICsJCWlmICghcG9zaXRpdmVfY3RybF9lcnIoJnNwLCAmcHYpKQo+ICsJCQlicmVh azsKPiArCX0KPiArCj4gKwlyZXR1cm4gdGllciAtIDE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg Z2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzLCBp bnQgKnRpZXJfaWR4KQo+ICt7Cj4gKwlpbnQgdHlwZSwgdGllcjsKPiArCXN0cnVjdCBjdHJsX3Bv cyBzcCwgcHY7Cj4gKwlpbnQgZ2FpbltBTk9OX0FORF9GSUxFXSA9IHsgc3dhcHBpbmVzcywgMjAw IC0gc3dhcHBpbmVzcyB9Owo+ICsKPiArCS8qCj4gKwkgKiBDb21wYXJlIHRoZSBmaXJzdCB0aWVy IG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lIHdoaWNoCj4gKwkgKiB0eXBl IHRvIHNjYW4uIEFsc28gbmVlZCB0byBjb21wYXJlIG90aGVyIHRpZXJzIG9mIHRoZSBzZWxlY3Rl ZCB0eXBlCj4gKwkgKiB3aXRoIHRoZSBmaXJzdCB0aWVyIG9mIHRoZSBvdGhlciB0eXBlIHRvIGRl dGVybWluZSB0aGUgbGFzdCB0aWVyIChvZgo+ICsJICogdGhlIHNlbGVjdGVkIHR5cGUpIHRvIGV2 aWN0Lgo+ICsJICovCj4gKwlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCAwLCBn YWluW0xSVV9HRU5fQU5PTl0sICZzcCk7Cj4gKwlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dF Tl9GSUxFLCAwLCBnYWluW0xSVV9HRU5fRklMRV0sICZwdik7Cj4gKwl0eXBlID0gcG9zaXRpdmVf Y3RybF9lcnIoJnNwLCAmcHYpOwo+ICsKPiArCXJlYWRfY3RybF9wb3MobHJ1dmVjLCAhdHlwZSwg MCwgZ2FpblshdHlwZV0sICZzcCk7Cj4gKwlmb3IgKHRpZXIgPSAxOyB0aWVyIDwgTUFYX05SX1RJ RVJTOyB0aWVyKyspIHsKPiArCQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgZ2Fp blt0eXBlXSwgJnB2KTsKPiArCQlpZiAoIXBvc2l0aXZlX2N0cmxfZXJyKCZzcCwgJnB2KSkKPiAr CQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJKnRpZXJfaWR4ID0gdGllciAtIDE7Cj4gKwo+ICsJcmV0 dXJuIHR5cGU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3Moc3RydWN0IGxy dXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MsCj4g KwkJCSAgaW50ICp0eXBlX3NjYW5uZWQsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCj4gK3sKPiAr CWludCBpOwo+ICsJaW50IHR5cGU7Cj4gKwlpbnQgc2Nhbm5lZDsKPiArCWludCB0aWVyID0gLTE7 Cj4gKwlERUZJTkVfTUlOX1NFUShscnV2ZWMpOwo+ICsKPiArCS8qCj4gKwkgKiBUcnkgdG8gbWFr ZSB0aGUgb2J2aW91cyBjaG9pY2UgZmlyc3QuIFdoZW4gYW5vbiBhbmQgZmlsZSBhcmUgYm90aAo+ ICsJICogYXZhaWxhYmxlIGZyb20gdGhlIHNhbWUgZ2VuZXJhdGlvbiwgaW50ZXJwcmV0IHN3YXBw aW5lc3MgMSBhcyBmaWxlCj4gKwkgKiBmaXJzdCBhbmQgMjAwIGFzIGFub24gZmlyc3QuCj4gKwkg Ki8KPiArCWlmICghc3dhcHBpbmVzcykKPiArCQl0eXBlID0gTFJVX0dFTl9GSUxFOwo+ICsJZWxz ZSBpZiAobWluX3NlcVtMUlVfR0VOX0FOT05dIDwgbWluX3NlcVtMUlVfR0VOX0ZJTEVdKQo+ICsJ CXR5cGUgPSBMUlVfR0VOX0FOT047Cj4gKwllbHNlIGlmIChzd2FwcGluZXNzID09IDEpCj4gKwkJ dHlwZSA9IExSVV9HRU5fRklMRTsKPiArCWVsc2UgaWYgKHN3YXBwaW5lc3MgPT0gMjAwKQo+ICsJ CXR5cGUgPSBMUlVfR0VOX0FOT047Cj4gKwllbHNlCj4gKwkJdHlwZSA9IGdldF90eXBlX3RvX3Nj YW4obHJ1dmVjLCBzd2FwcGluZXNzLCAmdGllcik7Cj4gKwo+ICsJZm9yIChpID0gIXN3YXBwaW5l c3M7IGkgPCBBTk9OX0FORF9GSUxFOyBpKyspIHsKPiArCQlpZiAodGllciA8IDApCj4gKwkJCXRp ZXIgPSBnZXRfdGllcl9pZHgobHJ1dmVjLCB0eXBlKTsKPiArCj4gKwkJc2Nhbm5lZCA9IHNjYW5f Zm9saW9zKGxydXZlYywgc2MsIHR5cGUsIHRpZXIsIGxpc3QpOwo+ICsJCWlmIChzY2FubmVkKQo+ ICsJCQlicmVhazsKPiArCj4gKwkJdHlwZSA9ICF0eXBlOwo+ICsJCXRpZXIgPSAtMTsKPiArCX0K PiArCj4gKwkqdHlwZV9zY2FubmVkID0gdHlwZTsKPiArCj4gKwlyZXR1cm4gc2Nhbm5lZDsKPiAr fQo+ICsKPiArc3RhdGljIGludCBldmljdF9mb2xpb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBz dHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MpCj4gK3sKPiArCWludCB0eXBl Owo+ICsJaW50IHNjYW5uZWQ7Cj4gKwlpbnQgcmVjbGFpbWVkOwo+ICsJTElTVF9IRUFEKGxpc3Qp Owo+ICsJc3RydWN0IGZvbGlvICpmb2xpbzsKPiArCWVudW0gdm1fZXZlbnRfaXRlbSBpdGVtOwo+ ICsJc3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0Owo+ICsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNn ID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7Cj4gKwlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0g bHJ1dmVjX3BnZGF0KGxydXZlYyk7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycSgmbHJ1dmVjLT5scnVf bG9jayk7Cj4gKwo+ICsJc2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKGxydXZlYywgc2MsIHN3YXBw aW5lc3MsICZ0eXBlLCAmbGlzdCk7Cj4gKwo+ICsJaWYgKHRyeV90b19pbmNfbWluX3NlcShscnV2 ZWMsIHN3YXBwaW5lc3MpKQo+ICsJCXNjYW5uZWQrKzsKPiArCj4gKwlpZiAoZ2V0X25yX2dlbnMo bHJ1dmVjLCAhc3dhcHBpbmVzcykgPT0gTUlOX05SX0dFTlMpCj4gKwkJc2Nhbm5lZCA9IDA7Cj4g Kwo+ICsJc3Bpbl91bmxvY2tfaXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKPiArCj4gKwlpZiAobGlz dF9lbXB0eSgmbGlzdCkpCj4gKwkJcmV0dXJuIHNjYW5uZWQ7Cj4gKwo+ICsJcmVjbGFpbWVkID0g c2hyaW5rX3BhZ2VfbGlzdCgmbGlzdCwgcGdkYXQsIHNjLCAmc3RhdCwgZmFsc2UpOwo+ICsKPiAr CS8qCj4gKwkgKiBUbyBhdm9pZCBsaXZlbG9jaywgZG9uJ3QgYWRkIHJlamVjdGVkIHBhZ2VzIGJh Y2sgdG8gdGhlIHNhbWUgbGlzdHMKPiArCSAqIHRoZXkgd2VyZSBpc29sYXRlZCBmcm9tLiBTZWUg bHJ1X2dlbl9hZGRfZm9saW8oKS4KPiArCSAqLwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShmb2xp bywgJmxpc3QsIGxydSkgewo+ICsJCWZvbGlvX2NsZWFyX3JlZmVyZW5jZWQoZm9saW8pOwo+ICsJ CWZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pOwo+ICsKPiArCQlpZiAoZm9saW9fdGVzdF9y ZWNsYWltKGZvbGlvKSAmJgo+ICsJCSAgICAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgfHwgZm9s aW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSkKPiArCQkJZm9saW9fY2xlYXJfYWN0aXZlKGZvbGlv KTsKPiArCQllbHNlCj4gKwkJCWZvbGlvX3NldF9hY3RpdmUoZm9saW8pOwo+ICsJfQo+ICsKPiAr CXNwaW5fbG9ja19pcnEoJmxydXZlYy0+bHJ1X2xvY2spOwo+ICsKPiArCW1vdmVfcGFnZXNfdG9f bHJ1KGxydXZlYywgJmxpc3QpOwo+ICsKPiArCWl0ZW0gPSBjdXJyZW50X2lzX2tzd2FwZCgpID8g UEdTVEVBTF9LU1dBUEQgOiBQR1NURUFMX0RJUkVDVDsKPiArCWlmICghY2dyb3VwX3JlY2xhaW0o c2MpKQo+ICsJCV9fY291bnRfdm1fZXZlbnRzKGl0ZW0sIHJlY2xhaW1lZCk7Cj4gKwlfX2NvdW50 X21lbWNnX2V2ZW50cyhtZW1jZywgaXRlbSwgcmVjbGFpbWVkKTsKPiArCV9fY291bnRfdm1fZXZl bnRzKFBHU1RFQUxfQU5PTiArIHR5cGUsIHJlY2xhaW1lZCk7Cj4gKwo+ICsJc3Bpbl91bmxvY2tf aXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKPiArCj4gKwltZW1fY2dyb3VwX3VuY2hhcmdlX2xpc3Qo Jmxpc3QpOwo+ICsJZnJlZV91bnJlZl9wYWdlX2xpc3QoJmxpc3QpOwo+ICsKPiArCXNjLT5ucl9y ZWNsYWltZWQgKz0gcmVjbGFpbWVkOwo+ICsKPiArCXJldHVybiBzY2FubmVkOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVj dCBzY2FuX2NvbnRyb2wgKnNjLCBib29sIGNhbl9zd2FwKQo+ICt7Cj4gKwlib29sIG5lZWRfYWdp bmc7Cj4gKwlsb25nIG5yX3RvX3NjYW47Cj4gKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBs cnV2ZWNfbWVtY2cobHJ1dmVjKTsKPiArCURFRklORV9NQVhfU0VRKGxydXZlYyk7Cj4gKwlERUZJ TkVfTUlOX1NFUShscnV2ZWMpOwo+ICsKPiArCWlmIChtZW1fY2dyb3VwX2JlbG93X21pbihtZW1j ZykgfHwKPiArCSAgICAobWVtX2Nncm91cF9iZWxvd19sb3cobWVtY2cpICYmICFzYy0+bWVtY2df bG93X3JlY2xhaW0pKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCW5yX3RvX3NjYW4gPSBnZXRfbnJf ZXZpY3RhYmxlKGxydXZlYywgbWF4X3NlcSwgbWluX3NlcSwgY2FuX3N3YXAsICZuZWVkX2FnaW5n KTsKPiArCWlmICghbnJfdG9fc2NhbikKPiArCQlyZXR1cm4gMDsKPiArCj4gKwkvKiByZXNldCB0 aGUgcHJpb3JpdHkgaWYgdGhlIHRhcmdldCBoYXMgYmVlbiBtZXQgKi8KPiArCW5yX3RvX3NjYW4g Pj49IHNjLT5ucl9yZWNsYWltZWQgPCBzYy0+bnJfdG9fcmVjbGFpbSA/IHNjLT5wcmlvcml0eSA6 IERFRl9QUklPUklUWTsKPiArCj4gKwlpZiAoIW1lbV9jZ3JvdXBfb25saW5lKG1lbWNnKSkKPiAr CQlucl90b19zY2FuKys7Cj4gKwo+ICsJaWYgKCFucl90b19zY2FuKQo+ICsJCXJldHVybiAwOwo+ ICsKPiArCWlmICghbmVlZF9hZ2luZykKPiArCQlyZXR1cm4gbnJfdG9fc2NhbjsKPiArCj4gKwkv KiBsZWF2ZSB0aGUgd29yayB0byBscnVfZ2VuX2FnZV9ub2RlKCkgKi8KPiArCWlmIChjdXJyZW50 X2lzX2tzd2FwZCgpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCS8qIHRyeSBvdGhlciBtZW1jZ3Mg YmVmb3JlIGdvaW5nIHRvIHRoZSBhZ2luZyBwYXRoICovCj4gKwlpZiAoIWNncm91cF9yZWNsYWlt KHNjKSAmJiAhc2MtPmZvcmNlX2RlYWN0aXZhdGUpIHsKPiArCQlzYy0+c2tpcHBlZF9kZWFjdGl2 YXRlID0gdHJ1ZTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlpbmNfbWF4X3NlcShscnV2 ZWMsIG1heF9zZXEsIGNhbl9zd2FwKTsKPiArCj4gKwlyZXR1cm4gbnJfdG9fc2NhbjsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxy dXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCj4gK3sKPiArCXN0cnVjdCBibGtfcGx1ZyBw bHVnOwo+ICsJbG9uZyBzY2FubmVkID0gMDsKPiArCj4gKwlscnVfYWRkX2RyYWluKCk7Cj4gKwo+ ICsJYmxrX3N0YXJ0X3BsdWcoJnBsdWcpOwo+ICsKPiArCXdoaWxlICh0cnVlKSB7Cj4gKwkJaW50 IGRlbHRhOwo+ICsJCWludCBzd2FwcGluZXNzOwo+ICsJCWxvbmcgbnJfdG9fc2NhbjsKPiArCj4g KwkJaWYgKHNjLT5tYXlfc3dhcCkKPiArCQkJc3dhcHBpbmVzcyA9IGdldF9zd2FwcGluZXNzKGxy dXZlYywgc2MpOwo+ICsJCWVsc2UgaWYgKCFjZ3JvdXBfcmVjbGFpbShzYykgJiYgZ2V0X3N3YXBw aW5lc3MobHJ1dmVjLCBzYykpCj4gKwkJCXN3YXBwaW5lc3MgPSAxOwo+ICsJCWVsc2UKPiArCQkJ c3dhcHBpbmVzcyA9IDA7Cj4gKwo+ICsJCW5yX3RvX3NjYW4gPSBnZXRfbnJfdG9fc2NhbihscnV2 ZWMsIHNjLCBzd2FwcGluZXNzKTsKPiArCQlpZiAoIW5yX3RvX3NjYW4pCj4gKwkJCWJyZWFrOwo+ ICsKPiArCQlkZWx0YSA9IGV2aWN0X2ZvbGlvcyhscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTsKPiAr CQlpZiAoIWRlbHRhKQo+ICsJCQlicmVhazsKPiArCj4gKwkJc2Nhbm5lZCArPSBkZWx0YTsKPiAr CQlpZiAoc2Nhbm5lZCA+PSBucl90b19zY2FuKQo+ICsJCQlicmVhazsKPiArCj4gKwkJY29uZF9y ZXNjaGVkKCk7Cj4gKwl9Cj4gKwo+ICsJYmxrX2ZpbmlzaF9wbHVnKCZwbHVnKTsKPiArfQo+ICsK PiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKPiAgICAqICAgICAgICAgICAgICAgICAgICAgICAg ICBpbml0aWFsaXphdGlvbgo+ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPiBAQCAtMzA0MSw2 ICszODA0LDE2IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfbHJ1X2dlbih2b2lkKQo+ICAgfTsK PiAgIGxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTsKPiAgIAo+ICsjZWxzZQo+ICsKPiArc3Rh dGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1 Y3Qgc2Nhbl9jb250cm9sICpzYykKPiArewo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBscnVfZ2Vu X3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9s ICpzYykKPiArewo+ICt9Cj4gKwo+ICAgI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovCj4gICAK PiAgIHN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1 Y3Qgc2Nhbl9jb250cm9sICpzYykKPiBAQCAtMzA1NCw2ICszODI3LDExIEBAIHN0YXRpYyB2b2lk IHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9s ICpzYykKPiAgIAlzdHJ1Y3QgYmxrX3BsdWcgcGx1ZzsKPiAgIAlib29sIHNjYW5fYWRqdXN0ZWQ7 Cj4gICAKPiArCWlmIChscnVfZ2VuX2VuYWJsZWQoKSkgewo+ICsJCWxydV9nZW5fc2hyaW5rX2xy dXZlYyhscnV2ZWMsIHNjKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICAgCWdldF9zY2FuX2Nv dW50KGxydXZlYywgc2MsIG5yKTsKPiAgIAo+ICAgCS8qIFJlY29yZCB0aGUgb3JpZ2luYWwgc2Nh biB0YXJnZXQgZm9yIHByb3BvcnRpb25hbCBhZGp1c3RtZW50cyBsYXRlciAqLwo+IEBAIC0zNTU4 LDYgKzQzMzYsOSBAQCBzdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nn cm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KQo+ICAgCXN0cnVjdCBscnV2ZWMg KnRhcmdldF9scnV2ZWM7Cj4gICAJdW5zaWduZWQgbG9uZyByZWZhdWx0czsKPiAgIAo+ICsJaWYg KGxydV9nZW5fZW5hYmxlZCgpKQo+ICsJCXJldHVybjsKPiArCj4gICAJdGFyZ2V0X2xydXZlYyA9 IG1lbV9jZ3JvdXBfbHJ1dmVjKHRhcmdldF9tZW1jZywgcGdkYXQpOwo+ICAgCXJlZmF1bHRzID0g bHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9BTk9O KTsKPiAgIAl0YXJnZXRfbHJ1dmVjLT5yZWZhdWx0c1swXSA9IHJlZmF1bHRzOwo+IEBAIC0zOTIy LDEyICs0NzAzLDE3IEBAIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdl cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCj4gICB9Cj4gICAjZW5kaWYKPiAgIAo+IC1zdGF0 aWMgdm9pZCBhZ2VfYWN0aXZlX2Fub24oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKPiArc3Rh dGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsCj4gICAJ CQkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCj4gICB7Cj4gICAJc3RydWN0IG1lbV9jZ3JvdXAg Km1lbWNnOwo+ICAgCXN0cnVjdCBscnV2ZWMgKmxydXZlYzsKPiAgIAo+ICsJaWYgKGxydV9nZW5f ZW5hYmxlZCgpKSB7Cj4gKwkJbHJ1X2dlbl9hZ2Vfbm9kZShwZ2RhdCwgc2MpOwo+ICsJCXJldHVy bjsKPiArCX0KPiArCj4gICAJaWYgKCFjYW5fYWdlX2Fub25fcGFnZXMocGdkYXQsIHNjKSkKPiAg IAkJcmV0dXJuOwo+ICAgCj4gQEAgLTQyNDcsMTIgKzUwMzMsMTEgQEAgc3RhdGljIGludCBiYWxh bmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlk eCkKPiAgIAkJc2MubWF5X3N3YXAgPSAhbnJfYm9vc3RfcmVjbGFpbTsKPiAgIAo+ICAgCQkvKgo+ IC0JCSAqIERvIHNvbWUgYmFja2dyb3VuZCBhZ2luZyBvZiB0aGUgYW5vbiBsaXN0LCB0byBnaXZl Cj4gLQkJICogcGFnZXMgYSBjaGFuY2UgdG8gYmUgcmVmZXJlbmNlZCBiZWZvcmUgcmVjbGFpbWlu Zy4gQWxsCj4gLQkJICogcGFnZXMgYXJlIHJvdGF0ZWQgcmVnYXJkbGVzcyBvZiBjbGFzc3pvbmUg YXMgdGhpcyBpcwo+IC0JCSAqIGFib3V0IGNvbnNpc3RlbnQgYWdpbmcuCj4gKwkJICogRG8gc29t ZSBiYWNrZ3JvdW5kIGFnaW5nLCB0byBnaXZlIHBhZ2VzIGEgY2hhbmNlIHRvIGJlCj4gKwkJICog cmVmZXJlbmNlZCBiZWZvcmUgcmVjbGFpbWluZy4gQWxsIHBhZ2VzIGFyZSByb3RhdGVkCj4gKwkJ ICogcmVnYXJkbGVzcyBvZiBjbGFzc3pvbmUgYXMgdGhpcyBpcyBhYm91dCBjb25zaXN0ZW50IGFn aW5nLgo+ICAgCQkgKi8KPiAtCQlhZ2VfYWN0aXZlX2Fub24ocGdkYXQsICZzYyk7Cj4gKwkJa3N3 YXBkX2FnZV9ub2RlKHBnZGF0LCAmc2MpOwo+ICAgCj4gICAJCS8qCj4gICAJCSAqIElmIHdlJ3Jl IGdldHRpbmcgdHJvdWJsZSByZWNsYWltaW5nLCBzdGFydCBkb2luZyB3cml0ZXBhZ2UKPiBkaWZm IC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jCj4gaW5kZXggNTkyNTY5 YTg5NzRjLi5kYjZmMGM4YTk4YzIgMTAwNjQ0Cj4gLS0tIGEvbW0vd29ya2luZ3NldC5jCj4gKysr IGIvbW0vd29ya2luZ3NldC5jCj4gQEAgLTE4Nyw3ICsxODcsNiBAQCBzdGF0aWMgdW5zaWduZWQg aW50IGJ1Y2tldF9vcmRlciBfX3JlYWRfbW9zdGx5Owo+ICAgc3RhdGljIHZvaWQgKnBhY2tfc2hh ZG93KGludCBtZW1jZ2lkLCBwZ19kYXRhX3QgKnBnZGF0LCB1bnNpZ25lZCBsb25nIGV2aWN0aW9u LAo+ICAgCQkJIGJvb2wgd29ya2luZ3NldCkKPiAgIHsKPiAtCWV2aWN0aW9uID4+PSBidWNrZXRf b3JkZXI7Cj4gICAJZXZpY3Rpb24gJj0gRVZJQ1RJT05fTUFTSzsKPiAgIAlldmljdGlvbiA9IChl dmljdGlvbiA8PCBNRU1fQ0dST1VQX0lEX1NISUZUKSB8IG1lbWNnaWQ7Cj4gICAJZXZpY3Rpb24g PSAoZXZpY3Rpb24gPDwgTk9ERVNfU0hJRlQpIHwgcGdkYXQtPm5vZGVfaWQ7Cj4gQEAgLTIxMiwx MCArMjExLDEwNyBAQCBzdGF0aWMgdm9pZCB1bnBhY2tfc2hhZG93KHZvaWQgKnNoYWRvdywgaW50 ICptZW1jZ2lkcCwgcGdfZGF0YV90ICoqcGdkYXQsCj4gICAKPiAgIAkqbWVtY2dpZHAgPSBtZW1j Z2lkOwo+ICAgCSpwZ2RhdCA9IE5PREVfREFUQShuaWQpOwo+IC0JKmV2aWN0aW9ucCA9IGVudHJ5 IDw8IGJ1Y2tldF9vcmRlcjsKPiArCSpldmljdGlvbnAgPSBlbnRyeTsKPiAgIAkqd29ya2luZ3Nl dHAgPSB3b3JraW5nc2V0Owo+ICAgfQo+ICAgCj4gKyNpZmRlZiBDT05GSUdfTFJVX0dFTgo+ICsK PiArc3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbykKPiAr ewo+ICsJaW50IGhpc3Q7Cj4gKwl1bnNpZ25lZCBsb25nIHRva2VuOwo+ICsJdW5zaWduZWQgbG9u ZyBtaW5fc2VxOwo+ICsJc3RydWN0IGxydXZlYyAqbHJ1dmVjOwo+ICsJc3RydWN0IGxydV9nZW5f c3RydWN0ICpscnVnZW47Cj4gKwlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsK PiArCWludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKPiArCWludCByZWZzID0gZm9s aW9fbHJ1X3JlZnMoZm9saW8pOwo+ICsJaW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVm cyk7Cj4gKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7Cj4g KwlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pOwo+ICsKPiAr CUJVSUxEX0JVR19PTihMUlVfR0VOX1dJRFRIICsgTFJVX1JFRlNfV0lEVEggPiBCSVRTX1BFUl9M T05HIC0gRVZJQ1RJT05fU0hJRlQpOwo+ICsKPiArCWxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVj KG1lbWNnLCBwZ2RhdCk7Cj4gKwlscnVnZW4gPSAmbHJ1dmVjLT5scnVnZW47Cj4gKwltaW5fc2Vx ID0gUkVBRF9PTkNFKGxydWdlbi0+bWluX3NlcVt0eXBlXSk7Cj4gKwl0b2tlbiA9IChtaW5fc2Vx IDw8IExSVV9SRUZTX1dJRFRIKSB8IG1heChyZWZzIC0gMSwgMCk7Cj4gKwo+ICsJaGlzdCA9IGxy dV9oaXN0X2Zyb21fc2VxKG1pbl9zZXEpOwo+ICsJYXRvbWljX2xvbmdfYWRkKGRlbHRhLCAmbHJ1 Z2VuLT5ldmljdGVkW2hpc3RdW3R5cGVdW3RpZXJdKTsKPiArCj4gKwlyZXR1cm4gcGFja19zaGFk b3cobWVtX2Nncm91cF9pZChtZW1jZyksIHBnZGF0LCB0b2tlbiwgcmVmcyk7CgpwYWNrX3NoYWRv dyBwYXNzIHJlZnMgcmF0aGVyIHRoYW4gUGFnZVdvcmtpbmdzZXQocGFnZSksIGlzIGl0IGRvbmUg b24gCnB1cnBvc2U/CgpJbiBteSBvcGluaW9uLMKgIFBhZ2VXb3JraW5nc2V0IGNhbiBiZSByZW1v dmVkIGR1ZSB0byBmYWlsZWQgdG8gcmVjbGFpbQoKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbHJ1 X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKPiArewo+ICsJ aW50IGhpc3QsIHRpZXIsIHJlZnM7Cj4gKwlpbnQgbWVtY2dfaWQ7Cj4gKwlib29sIHdvcmtpbmdz ZXQ7Cj4gKwl1bnNpZ25lZCBsb25nIHRva2VuOwo+ICsJdW5zaWduZWQgbG9uZyBtaW5fc2VxOwo+ ICsJc3RydWN0IGxydXZlYyAqbHJ1dmVjOwo+ICsJc3RydWN0IGxydV9nZW5fc3RydWN0ICpscnVn ZW47Cj4gKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7Cj4gKwlzdHJ1Y3QgcGdsaXN0X2RhdGEg KnBnZGF0Owo+ICsJaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7Cj4gKwlpbnQg ZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7Cj4gKwo+ICsJdW5wYWNrX3NoYWRvdyhzaGFk b3csICZtZW1jZ19pZCwgJnBnZGF0LCAmdG9rZW4sICZ3b3JraW5nc2V0KTsKPiArCj4gKwlpZiAo Zm9saW9fcGdkYXQoZm9saW8pICE9IHBnZGF0KQo+ICsJCXJldHVybjsKPiArCj4gKwkvKiBzZWUg dGhlIGNvbW1lbnQgaW4gZm9saW9fbHJ1X3JlZnMoKSAqLwo+ICsJcmVmcyA9ICh0b2tlbiAmIChC SVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkpICsgd29ya2luZ3NldDsKPiArCXRpZXIgPSBscnVfdGll cl9mcm9tX3JlZnMocmVmcyk7Cj4gKwo+ICsJcmN1X3JlYWRfbG9jaygpOwo+ICsJbWVtY2cgPSBm b2xpb19tZW1jZ19yY3UoZm9saW8pOwo+ICsJaWYgKG1lbV9jZ3JvdXBfaWQobWVtY2cpICE9IG1l bWNnX2lkKQo+ICsJCWdvdG8gdW5sb2NrOwo+ICsKPiArCWxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1 dmVjKG1lbWNnLCBwZ2RhdCk7Cj4gKwlscnVnZW4gPSAmbHJ1dmVjLT5scnVnZW47Cj4gKwltaW5f c2VxID0gUkVBRF9PTkNFKGxydWdlbi0+bWluX3NlcVt0eXBlXSk7Cj4gKwo+ICsJdG9rZW4gPj49 IExSVV9SRUZTX1dJRFRIOwo+ICsJaWYgKHRva2VuICE9IChtaW5fc2VxICYgKEVWSUNUSU9OX01B U0sgPj4gTFJVX1JFRlNfV0lEVEgpKSkKPiArCQlnb3RvIHVubG9jazsKPiArCj4gKwloaXN0ID0g bHJ1X2hpc3RfZnJvbV9zZXEobWluX3NlcSk7Cj4gKwlhdG9taWNfbG9uZ19hZGQoZGVsdGEsICZs cnVnZW4tPnJlZmF1bHRlZFtoaXN0XVt0eXBlXVt0aWVyXSk7Cj4gKwltb2RfbHJ1dmVjX3N0YXRl KGxydXZlYywgV09SS0lOR1NFVF9SRUZBVUxUX0JBU0UgKyB0eXBlLCBkZWx0YSk7Cj4gKwo+ICsJ LyoKPiArCSAqIENvdW50IHRoZSBmb2xsb3dpbmcgdHdvIGNhc2VzIGFzIHN0YWxsczoKPiArCSAq IDEuIEZvciBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzLCBob3R0ZXIgcGFnZXMg cHVzaGVkIG91dAo+ICsJICogICAgaG90IHBhZ2VzIHdoaWNoIHJlZmF1bHRlZCBpbW1lZGlhdGVs eS4KPiArCSAqIDIuIEZvciBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMs IG51bWJlcnMgb2YgYWNjZXNzZXMKPiArCSAqICAgIG1pZ2h0IGhhdmUgYmVlbiBiZXlvbmQgdGhl IGxpbWl0Lgo+ICsJICovCj4gKwlpZiAobHJ1X2dlbl9pbl9mYXVsdCgpIHx8IHJlZnMgPT0gQklU KExSVV9SRUZTX1dJRFRIKSkgewo+ICsJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKPiAr CQltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9SRVNUT1JFX0JBU0UgKyB0eXBl LCBkZWx0YSk7Cj4gKwl9Cj4gK3VubG9jazoKPiArCXJjdV9yZWFkX3VubG9jaygpOwo+ICt9Cj4g Kwo+ICsjZWxzZQo+ICsKPiArc3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZv bGlvICpmb2xpbykKPiArewo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCj4gK3sK PiArfQo+ICsKPiArI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovCj4gKwo+ICAgLyoqCj4gICAg KiB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudCAtIGFnZSBub24tcmVzaWRlbnQgZW50cmllcyBh cyBMUlUgYWdlcwo+ICAgICogQGxydXZlYzogdGhlIGxydXZlYyB0aGF0IHdhcyBhZ2VkCj4gQEAg LTI2NCwxMCArMzYwLDE0IEBAIHZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlv ICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZykKPiAgIAlWTV9CVUdfT05f Rk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pOwo+ICAgCVZNX0JVR19PTl9GT0xJ TyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7Cj4gICAKPiArCWlmIChscnVfZ2Vu X2VuYWJsZWQoKSkKPiArCQlyZXR1cm4gbHJ1X2dlbl9ldmljdGlvbihmb2xpbyk7Cj4gKwo+ICAg CWxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHRhcmdldF9tZW1jZywgcGdkYXQpOwo+ICAgCS8q IFhYWDogdGFyZ2V0X21lbWNnIGNhbiBiZSBOVUxMLCBnbyB0aHJvdWdoIGxydXZlYyAqLwo+ICAg CW1lbWNnaWQgPSBtZW1fY2dyb3VwX2lkKGxydXZlY19tZW1jZyhscnV2ZWMpKTsKPiAgIAlldmlj dGlvbiA9IGF0b21pY19sb25nX3JlYWQoJmxydXZlYy0+bm9ucmVzaWRlbnRfYWdlKTsKPiArCWV2 aWN0aW9uID4+PSBidWNrZXRfb3JkZXI7Cj4gICAJd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQo bHJ1dmVjLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpOwo+ICAgCXJldHVybiBwYWNrX3NoYWRvdyht ZW1jZ2lkLCBwZ2RhdCwgZXZpY3Rpb24sCj4gICAJCQkJZm9saW9fdGVzdF93b3JraW5nc2V0KGZv bGlvKSk7Cj4gQEAgLTI5OCw3ICszOTgsMTMgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3Ry dWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQo+ICAgCWludCBtZW1jZ2lkOwo+ICAgCWxv bmcgbnI7Cj4gICAKPiArCWlmIChscnVfZ2VuX2VuYWJsZWQoKSkgewo+ICsJCWxydV9nZW5fcmVm YXVsdChmb2xpbywgc2hhZG93KTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICAgCXVucGFja19z aGFkb3coc2hhZG93LCAmbWVtY2dpZCwgJnBnZGF0LCAmZXZpY3Rpb24sICZ3b3JraW5nc2V0KTsK PiArCWV2aWN0aW9uIDw8PSBidWNrZXRfb3JkZXI7Cj4gICAKPiAgIAlyY3VfcmVhZF9sb2NrKCk7 Cj4gICAJLyoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LWFybS1rZXJuZWwK