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 84968CD1284 for ; Tue, 9 Apr 2024 07:38:02 +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=lh4Y6Behgyw76aDqAOlQIalg+oP76SdOgOdxjIiuEqM=; b=zHsRUskDKhzA4J A+z+hhUh+FkyBsr22SFWR8ECoYMKagUXvkGkGWTW7DOLMPLXKRBj6LkKobXnv7fMynnaK7OJ40ipU SndFB+5VGI64YiT54yR/9SLZkd7b0SDQ+D5NNZrBGL48CJttPTkcal0JSqEAUR6QJU0MKDxA9E5Af jinU4TdRPi+DKA8SpoM7MXv8irfvuWWGfph1Cqfi4CE+hdVUxVd/y67miC1mEKx4wOJwNJAEh+yPl BWJHHYsgnniLwh93+DPIfClgg4k3cAurVK21lz+N1xBbX+sVWAt2jaOCX1eIFcLcd3AsBSKXt8Khl FwIb8fDKBbrBornZ2sWQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1ru634-00000000mrq-0Vtd; Tue, 09 Apr 2024 07:37:42 +0000 Received: from out30-119.freemail.mail.aliyun.com ([115.124.30.119]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1ru62x-00000000mo3-0Fb8 for linux-arm-kernel@lists.infradead.org; Tue, 09 Apr 2024 07:37:39 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1712648249; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; bh=NKo6CXLIkLIVtw+21pVbvHK7ZoBisAG2wMcWHGUePkc=; b=jAJyH2foYySWMqKUW6MxoMcotW3kZmMtWRHPxQbmrls9DS/INyer287o4eUUBRh46hTsp3kAK1qceqZg3jSiow80M/MQuhexaMo6R1QKITcoCzl9uINlouqBI8f863B4GNfZP11Z5virOriJTF8YDeOFdgWzQ1IxVc/NCb7EdSk= X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R311e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046051;MF=tianruidong@linux.alibaba.com;NM=1;PH=DS;RN=17;SR=0;TI=SMTPD_---0W4DkXjn_1712648245; Received: from 30.221.132.162(mailfrom:tianruidong@linux.alibaba.com fp:SMTPD_---0W4DkXjn_1712648245) by smtp.aliyun-inc.com; Tue, 09 Apr 2024 15:37:26 +0800 Message-ID: <802c3d08-3941-4f5c-8616-1c7b7717735f@linux.alibaba.com> Date: Tue, 9 Apr 2024 15:37:25 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 1/2] ACPI/AEST: Initial AEST driver To: Baolin Wang , catalin.marinas@arm.com, will@kernel.org, lpieralisi@kernel.org, guohanjun@huawei.com, sudeep.holla@arm.com, xueshuai@linux.alibaba.com, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, rafael@kernel.org, lenb@kernel.org, tony.luck@intel.com, bp@alien8.de, linux-edac@vger.kernel.org Cc: tianruidong@linux.alibaba.com, Tyler Baicar References: <20240321025317.114621-1-tianruidong@linux.alibaba.com> <20240321025317.114621-2-tianruidong@linux.alibaba.com> <0f0e88a3-a617-408f-8f1a-3af7a0f99337@linux.alibaba.com> Content-Language: en-US From: Ruidong Tian In-Reply-To: <0f0e88a3-a617-408f-8f1a-3af7a0f99337@linux.alibaba.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240409_003736_186212_ECE61B33 X-CRM114-Status: GOOD ( 19.89 ) 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 CgrlnKggMjAyNC8zLzIxIDExOjUyLCBCYW9saW4gV2FuZyDlhpnpgZM6Cj4gCj4gCj4gT24gMjAy NC8zLzIxIDEwOjUzLCBSdWlkb25nIFRpYW4gd3JvdGU6Cj4+IEZyb206IFR5bGVyIEJhaWNhciA8 YmFpY2FyQG9zLmFtcGVyZWNvbXB1dGluZy5jb20+Cj4+Cj4+IEFkZCBzdXBwb3J0IGZvciBwYXJz aW5nIHRoZSBBUk0gRXJyb3IgU291cmNlIFRhYmxlIGFuZCBiYXNpYyBoYW5kbGluZyBvZgo+PiBl cnJvcnMgcmVwb3J0ZWQgdGhyb3VnaCBib3RoIG1lbW9yeSBtYXBwZWQgYW5kIHN5c3RlbSByZWdp c3RlciAKPj4gaW50ZXJmYWNlcy4KPj4KPj4gQXNzdW1lIHN5c3RlbSByZWdpc3RlciBpbnRlcmZh Y2VzIGFyZSBvbmx5IHJlZ2lzdGVyZWQgd2l0aCBwcml2YXRlCj4+IHBlcmlwaGVyYWwgaW50ZXJy dXB0cyAoUFBJcyk7IG90aGVyd2lzZSB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhlCj4+IGNvcmUg aGFuZGxpbmcgdGhlIGVycm9yIGlzIHRoZSBjb3JlIHdoaWNoIHRvb2sgdGhlIGVycm9yIGFuZCBo YXMgdGhlCj4+IHN5bmRyb21lIGluZm8gaW4gaXRzIHN5c3RlbSByZWdpc3RlcnMuCj4+Cj4+IElu IGtlcm5lbC1maXJzdCBtb2RlLCBhbGwgY29uZmlndXJhdGlvbiBpcyBjb250cm9sbGVkIGJ5IGtl cm5lbCwgaW5jbHVkZQo+PiBDRSBjZV90aHJlc2hvbGQgYW5kIGludGVycnVwdCBlbmFibGUvZGlz YWJsZS4KPj4KPj4gQWxsIGRldGVjdGVkIGVycm9ycyB3aWxsIGJlIHByb2Nlc3NlZCBhcyBmb2xs b3c6Cj4+IMKgwqAgLSBDRSwgREU6IHVzZSBhIHdvcmtxdWV1ZSB0byBsb2cgdGhpcyBoYXJkd2Fy ZSBlcnJvcnMuCj4+IMKgwqAgLSBVRVIsIFVFTzogbG9nIGl0IGFuZCBjYWxsIG1lbW9yeV9mYWls dXJlIGluIHdvcmtxdWVlLgo+PiDCoMKgIC0gVUMsIFVFVTogcGFuaWMgaW4gaXJxIGNvbnRleHQu Cj4+Cj4+IFNpZ25lZC1vZmYtYnk6IFR5bGVyIEJhaWNhciA8YmFpY2FyQG9zLmFtcGVyZWNvbXB1 dGluZy5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6IFJ1aWRvbmcgVGlhbiA8dGlhbnJ1aWRvbmdAbGlu dXguYWxpYmFiYS5jb20+Cj4+IC0tLQo+PiDCoCBNQUlOVEFJTkVSU8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgfMKgIDExICsKPj4gwqAgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9y YXMuaCB8wqAgNzEgKysrCj4+IMKgIGRyaXZlcnMvYWNwaS9hcm02NC9LY29uZmlnwqDCoCB8wqAg MTAgKwo+PiDCoCBkcml2ZXJzL2FjcGkvYXJtNjQvTWFrZWZpbGXCoCB8wqDCoCAxICsKPj4gwqAg ZHJpdmVycy9hY3BpL2FybTY0L2Flc3QuY8KgwqDCoCB8IDgzNCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+PiDCoCBpbmNsdWRlL2xpbnV4L2FjcGlfYWVzdC5owqDCoMKgIHzC oCA5MiArKysrCj4+IMKgIGluY2x1ZGUvbGludXgvY3B1aG90cGx1Zy5owqDCoCB8wqDCoCAxICsK Pj4gwqAgNyBmaWxlcyBjaGFuZ2VkLCAxMDIwIGluc2VydGlvbnMoKykKPj4gwqAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcmFzLmgKPj4gwqAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvYWNwaS9hcm02NC9hZXN0LmMKPj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGluY2x1ZGUvbGludXgvYWNwaV9hZXN0LmgKPj4KPj4gZGlmZiAtLWdpdCBhL01BSU5UQUlORVJT IGIvTUFJTlRBSU5FUlMKPj4gaW5kZXggZGQ1ZGU1NDBlYzBiLi4zNDkwMGQ0YmI2NzcgMTAwNjQ0 Cj4+IC0tLSBhL01BSU5UQUlORVJTCj4+ICsrKyBiL01BSU5UQUlORVJTCj4+IEBAIC0zMzAsNiAr MzMwLDE3IEBAIEw6wqDCoMKgIGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAK Pj4gKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQo+PiDCoCBTOsKgwqDCoCBNYWludGFp bmVkCj4+IMKgIEY6wqDCoMKgIGRyaXZlcnMvYWNwaS9hcm02NAo+PiArQUNQSSBBRVNUCj4+ICtN OsKgwqDCoCBUeWxlciBCYWljYXIgPGJhaWNhckBvcy5hbXBlcmVjb21wdXRpbmcuY29tPgo+PiAr TTrCoMKgwqAgUnVpZG9uZyBUaWFuIDx0aWFucnVpZG9uZEBsaW51eC5hbGliYWJhLmNvbT4KPj4g K0w6wqDCoMKgIGxpbnV4LWFjcGlAdmdlci5rZXJuZWwub3JnCj4+ICtMOsKgwqDCoCBsaW51eC1h cm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKPj4gK1M6wqDCoMKgIFN1cHBvcnRlZAo+PiAr RjrCoMKgwqAgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9yYXMuaAo+PiArRjrCoMKgwqAgZHJpdmVy cy9hY3BpL2FybTY0L2Flc3QuYwo+PiArRjrCoMKgwqAgaW5jbHVkZS9saW51eC9hY3BpX2Flc3Qu aAo+PiArCj4+ICsKPj4gwqAgQUNQSSBGT1IgUklTQy1WIChBQ1BJL3Jpc2N2KQo+PiDCoCBNOsKg wqDCoCBTdW5pbCBWIEwgPHN1bmlsdmxAdmVudGFuYW1pY3JvLmNvbT4KPj4gwqAgTDrCoMKgwqAg bGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKPj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5j bHVkZS9hc20vcmFzLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Jhcy5oCj4+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uMDQ2NjdmMGRlMzBmCj4+IC0tLSAv ZGV2L251bGwKPj4gKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9yYXMuaAo+PiBAQCAtMCww ICsxLDcxIEBACj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwo+PiAr I2lmbmRlZiBfX0FTTV9SQVNfSAo+PiArI2RlZmluZSBfX0FTTV9SQVNfSAo+PiArCj4+ICsjaW5j bHVkZSA8bGludXgvdHlwZXMuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9iaXRzLmg+Cj4+ICsKPj4g Ky8qIEVSUjxuPkZSICovCj4+ICsjZGVmaW5lIEVSUl9GUl9SUMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoMTUpCj4+ICsjZGVmaW5lIEVSUl9GUl9DRUPCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTk1BU0tfVUxMKDE0LCAxMikK Pj4gKwo+PiArI2RlZmluZSBFUlJfRlJfUlBfU0lOR0xFX0NPVU5URVLCoMKgwqDCoMKgwqAgMAo+ PiArI2RlZmluZSBFUlJfRlJfUlBfRE9VQkxFX0NPVU5URVLCoMKgwqDCoMKgwqAgMQo+PiArCj4+ ICsjZGVmaW5lIEVSUl9GUl9DRUNfMEJfQ09VTlRFUsKgwqDCoMKgwqDCoMKgwqDCoCAwCj4+ICsj ZGVmaW5lIEVSUl9GUl9DRUNfOEJfQ09VTlRFUsKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoMSkKPj4g KyNkZWZpbmUgRVJSX0ZSX0NFQ18xNkJfQ09VTlRFUsKgwqDCoMKgwqDCoMKgwqAgQklUKDIpCj4+ ICsKPj4gKy8qIEVSUjxuPlNUQVRVUyAqLwo+PiArI2RlZmluZSBFUlJfU1RBVFVTX0FWwqDCoMKg wqDCoMKgwqAgQklUKDMxKQo+PiArI2RlZmluZSBFUlJfU1RBVFVTX1bCoMKgwqDCoMKgwqDCoCBC SVQoMzApCj4+ICsjZGVmaW5lIEVSUl9TVEFUVVNfVUXCoMKgwqDCoMKgwqDCoCBCSVQoMjkpCj4+ ICsjZGVmaW5lIEVSUl9TVEFUVVNfRVLCoMKgwqDCoMKgwqDCoCBCSVQoMjgpCj4+ICsjZGVmaW5l IEVSUl9TVEFUVVNfT0bCoMKgwqDCoMKgwqDCoCBCSVQoMjcpCj4+ICsjZGVmaW5lIEVSUl9TVEFU VVNfTVbCoMKgwqDCoMKgwqDCoCBCSVQoMjYpCj4+ICsjZGVmaW5lIEVSUl9TVEFUVVNfQ0XCoMKg wqDCoMKgwqDCoCAoQklUKDI1KSB8IEJJVCgyNCkpCj4+ICsjZGVmaW5lIEVSUl9TVEFUVVNfREXC oMKgwqDCoMKgwqDCoCBCSVQoMjMpCj4+ICsjZGVmaW5lIEVSUl9TVEFUVVNfUE7CoMKgwqDCoMKg wqDCoCBCSVQoMjIpCj4+ICsjZGVmaW5lIEVSUl9TVEFUVVNfVUVUwqDCoMKgwqDCoMKgwqAgKEJJ VCgyMSkgfCBCSVQoMjApKQo+PiArI2RlZmluZSBFUlJfU1RBVFVTX0NJwqDCoMKgwqDCoMKgwqAg QklUKDE5KQo+PiArI2RlZmluZSBFUlJfU1RBVFVTX0lFUlLCoMKgwqDCoMKgwqDCoCBHRU5NQVNL X1VMTCgxNSwgOCkKPj4gKyNkZWZpbmUgRVJSX1NUQVRVU19TRVJSwqDCoMKgwqDCoMKgwqAgR0VO TUFTS19VTEwoNywgMCkKPj4gKwo+PiArLyogVGhlc2UgYml0IGlzIHdyaXRlLW9uZS10by1jbGVh ciAqLwo+PiArI2RlZmluZSBFUlJfU1RBVFVTX1cxVEPCoMKgwqDCoMKgwqDCoCAoRVJSX1NUQVRV U19BViB8IEVSUl9TVEFUVVNfViB8IAo+PiBFUlJfU1RBVFVTX1VFIHwgXAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVSUl9TVEFUVVNfRVIgfCBFUlJfU1RBVFVTX09GIHwgRVJS X1NUQVRVU19NViB8IFwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBFUlJfU1RB VFVTX0NFIHwgRVJSX1NUQVRVU19ERSB8IEVSUl9TVEFUVVNfUE4gfCBcCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgRVJSX1NUQVRVU19VRVQgfCBFUlJfU1RBVFVTX0NJKQo+PiAr Cj4+ICsjZGVmaW5lIEVSUl9TVEFUVVNfVUVUX1VDwqDCoMKgIDAKPj4gKyNkZWZpbmUgRVJSX1NU QVRVU19VRVRfVUVVwqDCoMKgIDEKPj4gKyNkZWZpbmUgRVJSX1NUQVRVU19VRVRfVUVSwqDCoMKg IDIKPj4gKyNkZWZpbmUgRVJSX1NUQVRVU19VRVRfVUVPwqDCoMKgIDMKPj4gKwo+PiArLyogRVJS PG4+Q1RMUiAqLwo+PiArI2RlZmluZSBFUlJfQ1RMUl9GScKgwqDCoMKgwqDCoMKgIEJJVCgzKQo+ PiArI2RlZmluZSBFUlJfQ1RMUl9VScKgwqDCoMKgwqDCoMKgIEJJVCgyKQo+PiArCj4+ICsvKiBF UlI8bj5BRERSICovCj4+ICsjZGVmaW5lIEVSUl9BRERSX0FJwqDCoMKgwqDCoMKgwqAgQklUKDYx KQo+PiArI2RlZmluZSBFUlJfQUREUl9QQUREUsKgwqDCoMKgwqDCoMKgIEdFTk1BU0tfVUxMKDU1 LCAwKQo+PiArCj4+ICsvKiBFUlI8bj5NSVNDMCAqLwo+PiArCj4+ICsvKiBFUlI8bj5GUi5DRUMg PT0gMGIwMTAsIEVSUjxuPkZSLlJQID09IDDCoCAqLwo+PiArI2RlZmluZSBFUlJfTUlTQzBfOEJf T0bCoMKgwqDCoMKgwqDCoCBCSVQoMzkpCj4+ICsjZGVmaW5lIEVSUl9NSVNDMF84Ql9DRUPCoMKg wqAgR0VOTUFTS19VTEwoMzgsIDMyKQo+PiArCj4+ICsvKiBFUlI8bj5GUi5DRUMgPT0gMGIxMDAs IEVSUjxuPkZSLlJQID09IDDCoCAqLwo+PiArI2RlZmluZSBFUlJfTUlTQzBfMTZCX09GwqDCoMKg IEJJVCg0NykKPj4gKyNkZWZpbmUgRVJSX01JU0MwXzE2Ql9DRUPCoMKgwqAgR0VOTUFTS19VTEwo NDYsIDMyKQo+PiArCj4+ICtzdHJ1Y3QgcmFzX2V4dF9yZWdzIHsKPj4gK8KgwqDCoCB1NjQgZXJy X2ZyOwo+PiArwqDCoMKgIHU2NCBlcnJfY3RscjsKPj4gK8KgwqDCoCB1NjQgZXJyX3N0YXR1czsK Pj4gK8KgwqDCoCB1NjQgZXJyX2FkZHI7Cj4+ICvCoMKgwqAgdTY0IGVycl9taXNjWzRdOwo+PiAr fTsKPj4gKwo+PiArI2VuZGlmwqDCoMKgIC8qIF9fQVNNX1JBU19IICovCj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2FjcGkvYXJtNjQvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9hcm02NC9LY29uZmln Cj4+IGluZGV4IGIzZWQ2MjEyMjQ0Yy4uNjM5ZGI2NzFjNWNmIDEwMDY0NAo+PiAtLS0gYS9kcml2 ZXJzL2FjcGkvYXJtNjQvS2NvbmZpZwo+PiArKysgYi9kcml2ZXJzL2FjcGkvYXJtNjQvS2NvbmZp Zwo+PiBAQCAtMjEsMyArMjEsMTMgQEAgY29uZmlnIEFDUElfQUdESQo+PiDCoCBjb25maWcgQUNQ SV9BUE1UCj4+IMKgwqDCoMKgwqAgYm9vbAo+PiArCj4+ICtjb25maWcgQUNQSV9BRVNUCj4+ICvC oMKgwqAgYm9vbCAiQVJNIEVycm9yIFNvdXJjZSBUYWJsZSBTdXBwb3J0Igo+PiArCj4+ICvCoMKg wqAgaGVscAo+PiArwqDCoMKgwqDCoCBUaGUgQXJtIEVycm9yIFNvdXJjZSBUYWJsZSAoQUVTVCkg cHJvdmlkZXMgZGV0YWlscyBvbiBBQ1BJCj4+ICvCoMKgwqDCoMKgIGV4dGVuc2lvbnMgdGhhdCBl bmFibGUga2VybmVsLWZpcnN0IGhhbmRsaW5nIG9mIGVycm9ycyBpbiBhCj4+ICvCoMKgwqDCoMKg IHN5c3RlbSB0aGF0IHN1cHBvcnRzIHRoZSBBcm12OCBSQVMgZXh0ZW5zaW9ucy4KPj4gKwo+PiAr wqDCoMKgwqDCoCBJZiBzZXQsIHRoZSBrZXJuZWwgd2lsbCByZXBvcnQgYW5kIGxvZyBoYXJkd2Fy ZSBlcnJvcnMuCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYXJtNjQvTWFrZWZpbGUgYi9k cml2ZXJzL2FjcGkvYXJtNjQvTWFrZWZpbGUKPj4gaW5kZXggMTQzZGViYzFiYTRhLi5iNWI3NDAw NThjNDYgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvYWNwaS9hcm02NC9NYWtlZmlsZQo+PiArKysg Yi9kcml2ZXJzL2FjcGkvYXJtNjQvTWFrZWZpbGUKPj4gQEAgLTUsMyArNSw0IEBAIG9iai0kKENP TkZJR19BQ1BJX0dURFQpwqDCoMKgwqAgKz0gZ3RkdC5vCj4+IMKgIG9iai0kKENPTkZJR19BQ1BJ X0FQTVQpwqDCoMKgwqAgKz0gYXBtdC5vCj4+IMKgIG9iai0kKENPTkZJR19BUk1fQU1CQSnCoMKg wqDCoMKgwqDCoCArPSBhbWJhLm8KPj4gwqAgb2JqLXnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKz0gZG1hLm8gaW5pdC5vCj4+ICtvYmotJChDT05GSUdfQUNQSV9BRVNUKcKgwqDCoMKg ICs9IGFlc3Qubwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FybTY0L2Flc3QuYyBiL2Ry aXZlcnMvYWNwaS9hcm02NC9hZXN0LmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXgg MDAwMDAwMDAwMDAwLi5hYjE3YWE1ZjU5OTcKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2 ZXJzL2FjcGkvYXJtNjQvYWVzdC5jCj4+IEBAIC0wLDAgKzEsODM0IEBACj4+ICsvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+PiArLyoKPj4gKyAqIEFSTSBFcnJvciBTb3VyY2Ug VGFibGUgU3VwcG9ydAo+PiArICoKPj4gKyAqIENvcHlyaWdodCAoYykgMjAyMSwgQW1wZXJlIENv bXB1dGluZyBMTEMKPj4gKyAqIENvcHlyaWdodCAoYykgMjAyMS0yMDI0LCBBbGliYWJhIEdyb3Vw Lgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+Cj4+ICsjaW5jbHVkZSA8 bGludXgvYWNwaV9hZXN0Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvY3B1aG90cGx1Zy5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2dlbmFsbG9jLmg+ Cj4+ICsjaW5jbHVkZSA8bGludXgvbGxpc3QuaD4KPj4gKyNpbmNsdWRlIDxhY3BpL2FjdGJsLmg+ Cj4+ICsjaW5jbHVkZSA8YXNtL3Jhcy5oPgo+PiArCj4+ICsjdW5kZWYgcHJfZm10Cj4+ICsjZGVm aW5lIHByX2ZtdChmbXQpICJBQ1BJIEFFU1Q6ICIgZm10Cj4+ICsKPj4gKyNkZWZpbmUgQ0FTRV9S RUFEKHJlcywgeCnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFwKPj4gK8KgwqDCoCBjYXNlICh4KToge8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4+ICvCoMKgwqDCoMKgwqDCoCByZXMgPSByZWFkX3N5 c3JlZ19zKFNZU18jI3gjI19FTDEpO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+PiArwqDCoMKg wqDCoMKgwqAgYnJlYWs7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIFwKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gKyNkZWZpbmUgQ0FTRV9XUklURSh2 YWwsIHgpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4+ ICvCoMKgwqAgY2FzZSAoeCk6IHvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgXAo+PiArwqDCoMKgwqDCoMKgwqAgd3JpdGVfc3lzcmVnX3MoKHZh bCksIFNZU18jI3gjI19FTDEpO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+PiArwqDCoMKgwqDC oMKgwqAgYnJlYWs7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIFwKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gKyNkZWZpbmUgZm9yX2VhY2hfaW1wbGVt ZW50ZWRfcmVjb3JkKGluZGV4LCBub2RlKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+PiArwqDC oMKgwqDCoMKgwqAgZm9yICgoaW5kZXgpID0gbm9kZS0+aW50ZXJmYWNlLnJlY29yZF9zdGFydDvC oMKgwqDCoMKgwqDCoCBcCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChpbmRleCkgPCBub2Rl LT5pbnRlcmZhY2UucmVjb3JkX2VuZDvCoMKgwqDCoMKgwqDCoCBcCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIChpbmRleCkrKykKPj4gKwo+PiArI2RlZmluZSBBRVNUX0xPR19QUkVGSVhfQlVG RkVSwqDCoMKgIDY0Cj4+ICsKPj4gKy8qCj4+ICsgKiBUaGlzIG1lbW9yeSBwb29sIGlzIG9ubHkg dG8gYmUgdXNlZCB0byBzYXZlIEFFU1Qgbm9kZSBpbiBBRVNUIGlycSAKPj4gY29udGV4dC4KPj4g KyAqIFRoZXJlIGNhbiBiZSA1MDAgQUVTVCBub2RlIGF0IG1vc3QuCj4+ICsgKi8KPj4gKyNkZWZp bmUgQUVTVF9OT0RFX0FMTE9DRURfTUFYwqDCoMKgIDUwMAo+PiArCj4+ICtzdGF0aWMgc3RydWN0 IGFjcGlfdGFibGVfaGVhZGVyICphZXN0X3RhYmxlOwo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGFl c3Rfbm9kZSBfX3BlcmNwdSAqKmFlc3RfcHBpX2RhdGE7Cj4+ICsKPj4gK3N0YXRpYyBpbnQgKnBw aV9pcnFzOwo+PiArc3RhdGljIHU4IG51bV9wcGk7Cj4+ICtzdGF0aWMgdTggcHBpX2lkeDsKPj4g Kwo+PiArc3RhdGljIHN0cnVjdCB3b3JrX3N0cnVjdCBhZXN0X3dvcms7Cj4+ICsKPj4gK3N0YXRp YyBzdHJ1Y3QgZ2VuX3Bvb2wgKmFlc3Rfbm9kZV9wb29sOwo+PiArc3RhdGljIHN0cnVjdCBsbGlz dF9oZWFkIGFlc3Rfbm9kZV9sbGlzdDsKPj4gKwo+PiArc3RhdGljIHU2NCBhZXN0X3N5c3JlZ19y ZWFkKHU2NCBfX3VudXNlZCwgdTMyIG9mZnNldCkKPj4gK3sKPj4gK8KgwqDCoCB1NjQgcmVzOwo+ PiArCj4+ICvCoMKgwqAgc3dpdGNoIChvZmZzZXQpIHsKPj4gK8KgwqDCoCBDQVNFX1JFQUQocmVz LCBFUlhGUikKPj4gK8KgwqDCoCBDQVNFX1JFQUQocmVzLCBFUlhDVExSKQo+PiArwqDCoMKgIENB U0VfUkVBRChyZXMsIEVSWFNUQVRVUykKPj4gK8KgwqDCoCBDQVNFX1JFQUQocmVzLCBFUlhBRERS KQo+PiArwqDCoMKgIENBU0VfUkVBRChyZXMsIEVSWE1JU0MwKQo+PiArwqDCoMKgIENBU0VfUkVB RChyZXMsIEVSWE1JU0MxKQo+PiArwqDCoMKgIENBU0VfUkVBRChyZXMsIEVSWE1JU0MyKQo+PiAr wqDCoMKgIENBU0VfUkVBRChyZXMsIEVSWE1JU0MzKQo+PiArwqDCoMKgIGRlZmF1bHQgOgo+PiAr wqDCoMKgwqDCoMKgwqAgcmVzID0gMDsKPj4gK8KgwqDCoCB9Cj4+ICvCoMKgwqAgcmV0dXJuIHJl czsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgYWVzdF9zeXNyZWdfd3JpdGUodTY0IGJhc2Us IHUzMiBvZmZzZXQsIHU2NCB2YWwpCj4+ICt7Cj4+ICvCoMKgwqAgc3dpdGNoIChvZmZzZXQpIHsK Pj4gK8KgwqDCoCBDQVNFX1dSSVRFKHZhbCwgRVJYRlIpCj4+ICvCoMKgwqAgQ0FTRV9XUklURSh2 YWwsIEVSWENUTFIpCj4+ICvCoMKgwqAgQ0FTRV9XUklURSh2YWwsIEVSWFNUQVRVUykKPj4gK8Kg wqDCoCBDQVNFX1dSSVRFKHZhbCwgRVJYQUREUikKPj4gK8KgwqDCoCBDQVNFX1dSSVRFKHZhbCwg RVJYTUlTQzApCj4+ICvCoMKgwqAgQ0FTRV9XUklURSh2YWwsIEVSWE1JU0MxKQo+PiArwqDCoMKg IENBU0VfV1JJVEUodmFsLCBFUlhNSVNDMikKPj4gK8KgwqDCoCBDQVNFX1dSSVRFKHZhbCwgRVJY TUlTQzMpCj4+ICvCoMKgwqAgZGVmYXVsdCA6Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ ICvCoMKgwqAgfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdTY0IGFlc3RfaW9tZW1fcmVhZCh1NjQg YmFzZSwgdTMyIG9mZnNldCkKPj4gK3sKPj4gK8KgwqDCoCByZXR1cm4gcmVhZHFfcmVsYXhlZCgo dm9pZCAqKShiYXNlICsgb2Zmc2V0KSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFlc3Rf aW9tZW1fd3JpdGUodTY0IGJhc2UsIHUzMiBvZmZzZXQsIHU2NCB2YWwpCj4+ICt7Cj4+ICvCoMKg wqAgd3JpdGVxX3JlbGF4ZWQodmFsLCAodm9pZCAqKShiYXNlICsgb2Zmc2V0KSk7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB2b2lkIGFlc3RfcHJpbnQoc3RydWN0IGFlc3Rfbm9kZV9sbGlzdCAqbG5v ZGUpCj4+ICt7Cj4+ICvCoMKgwqAgc3RhdGljIGF0b21pY190IHNlcW5vID0geyAwIH07Cj4+ICvC oMKgwqAgdW5zaWduZWQgaW50IGN1cnJfc2Vxbm87Cj4+ICvCoMKgwqAgY2hhciBwZnhfc2VxW0FF U1RfTE9HX1BSRUZJWF9CVUZGRVJdOwo+PiArwqDCoMKgIGludCBpbmRleDsKPj4gK8KgwqDCoCBz dHJ1Y3QgcmFzX2V4dF9yZWdzICpyZWdzOwo+PiArCj4+ICvCoMKgwqAgY3Vycl9zZXFubyA9IGF0 b21pY19pbmNfcmV0dXJuKCZzZXFubyk7Cj4+ICvCoMKgwqAgc25wcmludGYocGZ4X3NlcSwgc2l6 ZW9mKHBmeF9zZXEpLCAieyV1fSIgSFdfRVJSLCBjdXJyX3NlcW5vKTsKPj4gK8KgwqDCoCBwcl9p bmZvKCIlc0hhcmR3YXJlIGVycm9yIGZyb20gJXNcbiIsIHBmeF9zZXEsIGxub2RlLT5ub2RlX25h bWUpOwo+PiArCj4+ICvCoMKgwqAgc3dpdGNoIChsbm9kZS0+dHlwZSkgewo+PiArwqDCoMKgIGNh c2UgQUNQSV9BRVNUX1BST0NFU1NPUl9FUlJPUl9OT0RFOgo+PiArwqDCoMKgwqDCoMKgwqAgcHJf ZXJyKCIlcyBFcnJvciBmcm9tIENQVSVkXG4iLCBwZnhfc2VxLCBsbm9kZS0+aWQwKTsKPj4gK8Kg wqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGNhc2UgQUNQSV9BRVNUX01FTU9SWV9FUlJP Ul9OT0RFOgo+PiArwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCIlcyBFcnJvciBmcm9tIG1lbW9yeSBh dCBTUkFUIHByb3hpbWl0eSBkb21haW4gMHgleFxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcGZ4X3NlcSwgbG5vZGUtPmlkMCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8Kg wqDCoCBjYXNlIEFDUElfQUVTVF9TTU1VX0VSUk9SX05PREU6Cj4+ICvCoMKgwqDCoMKgwqDCoCBw cl9lcnIoIiVzIEVycm9yIGZyb20gU01NVSBJT1JUIG5vZGUgMHgleCBzdWJjb21wb25lbnQgMHgl eFxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGZ4X3NlcSwgbG5vZGUtPmlkMCwgbG5v ZGUtPmlkMSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCBjYXNlIEFDUElf QUVTVF9WRU5ET1JfRVJST1JfTk9ERToKPj4gK8KgwqDCoMKgwqDCoMKgIHByX2VycigiJXMgRXJy b3IgZnJvbSB2ZW5kb3IgaGlkIDB4JXggdWlkIDB4JXhcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHBmeF9zZXEsIGxub2RlLT5pZDAsIGxub2RlLT5pZDEpOwo+PiArwqDCoMKgwqDCoMKg wqAgYnJlYWs7Cj4+ICvCoMKgwqAgY2FzZSBBQ1BJX0FFU1RfR0lDX0VSUk9SX05PREU6Cj4+ICvC oMKgwqDCoMKgwqDCoCBwcl9lcnIoIiVzIEVycm9yIGZyb20gR0lDIHR5cGUgMHgleCBpbnN0YW5j ZSAweCV4XG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwZnhfc2VxLCBsbm9kZS0+aWQw LCBsbm9kZS0+aWQxKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGRlZmF1 bHQ6Cj4+ICvCoMKgwqDCoMKgwqDCoCBwcl9lcnIoIiVzIFVua25vd24gQUVTVCBub2RlIHR5cGVc biIsIHBmeF9zZXEpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArwqDCoMKgIH0KPj4g Kwo+PiArwqDCoMKgIGluZGV4ID0gbG5vZGUtPmluZGV4Owo+PiArwqDCoMKgIHJlZ3MgPSBsbm9k ZS0+cmVnczsKPj4gKwo+PiArwqDCoMKgIHByX2VycigiJXPCoCBFUlIldUZSOiAweCVsbHhcbiIs IHBmeF9zZXEsIGluZGV4LCByZWdzLT5lcnJfZnIpOwo+PiArwqDCoMKgIHByX2VycigiJXPCoCBF UlIldUNUUkw6IDB4JWxseFxuIiwgcGZ4X3NlcSwgaW5kZXgsIHJlZ3MtPmVycl9jdGxyKTsKPj4g K8KgwqDCoCBwcl9lcnIoIiVzwqAgRVJSJXVTVEFUVVM6IDB4JWxseFxuIiwgcGZ4X3NlcSwgaW5k ZXgsIAo+PiByZWdzLT5lcnJfc3RhdHVzKTsKPj4gK8KgwqDCoCBpZiAocmVncy0+ZXJyX3N0YXR1 cyAmIEVSUl9TVEFUVVNfQVYpCj4+ICvCoMKgwqDCoMKgwqDCoCBwcl9lcnIoIiVzwqAgRVJSJXVB RERSOiAweCVsbHhcbiIsIHBmeF9zZXEsIGluZGV4LCAKPj4gcmVncy0+ZXJyX2FkZHIpOwo+PiAr Cj4+ICvCoMKgwqAgaWYgKHJlZ3MtPmVycl9zdGF0dXMgJiBFUlJfU1RBVFVTX01WKSB7Cj4+ICvC oMKgwqDCoMKgwqDCoCBwcl9lcnIoIiVzwqAgRVJSJXVNSVNDMDogMHglbGx4XG4iLCBwZnhfc2Vx LCBpbmRleCwgCj4+IHJlZ3MtPmVycl9taXNjWzBdKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHByX2Vy cigiJXPCoCBFUlIldU1JU0MxOiAweCVsbHhcbiIsIHBmeF9zZXEsIGluZGV4LCAKPj4gcmVncy0+ ZXJyX21pc2NbMV0pOwo+PiArwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCIlc8KgIEVSUiV1TUlTQzI6 IDB4JWxseFxuIiwgcGZ4X3NlcSwgaW5kZXgsIAo+PiByZWdzLT5lcnJfbWlzY1syXSk7Cj4+ICvC oMKgwqDCoMKgwqDCoCBwcl9lcnIoIiVzwqAgRVJSJXVNSVNDMzogMHglbGx4XG4iLCBwZnhfc2Vx LCBpbmRleCwgCj4+IHJlZ3MtPmVycl9taXNjWzNdKTsKPj4gK8KgwqDCoCB9Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyB2b2lkIGFlc3RfaGFuZGxlX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBhZXN0X25v ZGVfbGxpc3QgKmxub2RlKQo+PiArewo+PiArwqDCoMKgIHVuc2lnbmVkIGxvbmcgcGZuOwo+PiAr wqDCoMKgIHU2NCBhZGRyOwo+PiArCj4+ICvCoMKgwqAgaWYgKHRlc3RfYml0KGxub2RlLT5pbmRl eCwgJmxub2RlLT5hZGRyZXNzaW5nX21vZGUpIHx8Cj4+ICvCoMKgwqDCoMKgwqDCoCAobG5vZGUt PnJlZ3MtPmVycl9hZGRyICYgRVJSX0FERFJfQUkpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu Owo+PiArCj4+ICvCoMKgwqAgYWRkciA9IGxub2RlLT5yZWdzLT5lcnJfYWRkciAmICgxVUwgPDwg Q09ORklHX0FSTTY0X1BBX0JJVFMpOwo+PiArwqDCoMKgIHBmbiA9IFBIWVNfUEZOKGFkZHIpOwo+ PiArCj4+ICvCoMKgwqAgaWYgKCFwZm5fdmFsaWQocGZuKSkgewo+PiArwqDCoMKgwqDCoMKgwqAg cHJfd2FybihIV19FUlIgIkludmFsaWQgcGh5c2ljYWwgYWRkcmVzczogJSNsbHhcbiIsIGFkZHIp Owo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKg IG1lbW9yeV9mYWlsdXJlKHBmbiwgMCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFlc3Rf bm9kZV9wb29sX3Byb2Nlc3Moc3RydWN0IHdvcmtfc3RydWN0ICpfX3VudXNlZCkKPj4gK3sKPj4g K8KgwqDCoCBzdHJ1Y3QgbGxpc3Rfbm9kZSAqaGVhZDsKPj4gK8KgwqDCoCBzdHJ1Y3QgYWVzdF9u b2RlX2xsaXN0ICpsbm9kZSwgKnRtcDsKPj4gK8KgwqDCoCB1NjQgc3RhdHVzOwo+PiArCj4+ICvC oMKgwqAgaGVhZCA9IGxsaXN0X2RlbF9hbGwoJmFlc3Rfbm9kZV9sbGlzdCk7Cj4+ICvCoMKgwqAg aWYgKCFoZWFkKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArCj4+ICvCoMKgwqAgaGVh ZCA9IGxsaXN0X3JldmVyc2Vfb3JkZXIoaGVhZCk7Cj4+ICvCoMKgwqAgbGxpc3RfZm9yX2VhY2hf ZW50cnlfc2FmZShsbm9kZSwgdG1wLCBoZWFkLCBsbG5vZGUpIHsKPj4gK8KgwqDCoMKgwqDCoMKg IGFlc3RfcHJpbnQobG5vZGUpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBzdGF0dXMgPSBsbm9k ZS0+cmVncy0+ZXJyX3N0YXR1czsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICgoc3RhdHVzICYgRVJS X1NUQVRVU19VRSkgJiYKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHN0YXR1cyAmIEVSUl9T VEFUVVNfVUVUKSA+IEVSUl9TVEFUVVNfVUVUX1VFVSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgYWVzdF9oYW5kbGVfbWVtb3J5X2ZhaWx1cmUobG5vZGUpOwo+PiArwqDCoMKgwqDCoMKgwqAg Z2VuX3Bvb2xfZnJlZShhZXN0X25vZGVfcG9vbCwgKHVuc2lnbmVkIGxvbmcpbG5vZGUsCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKCpsbm9kZSkpOwo+PiArwqDCoMKg IH0KPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBhZXN0X25vZGVfZ2VuX3Bvb2xfYWRkKHN0cnVj dCBhZXN0X25vZGUgKm5vZGUsIGludCBpbmRleCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzdHJ1Y3QgcmFzX2V4dF9yZWdzICpyZWdzKQo+PiArewo+PiArwqDCoMKgIHN0cnVj dCBhZXN0X25vZGVfbGxpc3QgKmxpc3Q7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIWFlc3Rfbm9kZV9w b29sKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gK8KgwqDCoCBs aXN0ID0gKHZvaWQgKilnZW5fcG9vbF9hbGxvYyhhZXN0X25vZGVfcG9vbCwgc2l6ZW9mKCpsaXN0 KSk7Cj4+ICvCoMKgwqAgaWYgKCFsaXN0KQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9N RU07Cj4+ICsKPj4gK8KgwqDCoCBsaXN0LT50eXBlID0gbm9kZS0+dHlwZTsKPj4gK8KgwqDCoCBs aXN0LT5ub2RlX25hbWUgPSBub2RlLT5uYW1lOwo+PiArwqDCoMKgIHN3aXRjaCAobm9kZS0+dHlw ZSkgewo+PiArwqDCoMKgIGNhc2UgQUNQSV9BRVNUX1BST0NFU1NPUl9FUlJPUl9OT0RFOgo+PiAr wqDCoMKgwqDCoMKgwqAgbGlzdC0+aWQwID0gbm9kZS0+c3BlYy5wcm9jZXNzb3IucHJvY2Vzc29y X2lkOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKG5vZGUtPnNwZWMucHJvY2Vzc29yLmZsYWdzICYg KEFDUElfQUVTVF9QUk9DX0ZMQUdfU0hBUkVEIHwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQUNQSV9BRVNUX1BST0NfRkxBR19HTE9CQUwpKQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsaXN0LT5pZDAgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGxpc3QtPmlkMSA9IG5vZGUtPnNwZWMucHJvY2Vzc29yLnJl c291cmNlX3R5cGU7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCBjYXNlIEFD UElfQUVTVF9NRU1PUllfRVJST1JfTk9ERToKPj4gK8KgwqDCoMKgwqDCoMKgIGxpc3QtPmlkMCA9 IG5vZGUtPnNwZWMubWVtb3J5LnNyYXRfcHJveGltaXR5X2RvbWFpbjsKPj4gK8KgwqDCoMKgwqDC oMKgIGJyZWFrOwo+PiArwqDCoMKgIGNhc2UgQUNQSV9BRVNUX1NNTVVfRVJST1JfTk9ERToKPj4g K8KgwqDCoMKgwqDCoMKgIGxpc3QtPmlkMCA9IG5vZGUtPnNwZWMuc21tdS5pb3J0X25vZGVfcmVm ZXJlbmNlOwo+PiArwqDCoMKgwqDCoMKgwqAgbGlzdC0+aWQxID0gbm9kZS0+c3BlYy5zbW11LnN1 YmNvbXBvbmVudF9yZWZlcmVuY2U7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDC oCBjYXNlIEFDUElfQUVTVF9WRU5ET1JfRVJST1JfTk9ERToKPj4gK8KgwqDCoMKgwqDCoMKgIGxp c3QtPmlkMCA9IG5vZGUtPnNwZWMudmVuZG9yLmFjcGlfaGlkOwo+PiArwqDCoMKgwqDCoMKgwqAg bGlzdC0+aWQxID0gbm9kZS0+c3BlYy52ZW5kb3IuYWNwaV91aWQ7Cj4+ICvCoMKgwqDCoMKgwqDC oCBicmVhazsKPj4gK8KgwqDCoCBjYXNlIEFDUElfQUVTVF9HSUNfRVJST1JfTk9ERToKPj4gK8Kg wqDCoMKgwqDCoMKgIGxpc3QtPmlkMCA9IG5vZGUtPnNwZWMuZ2ljLmludGVyZmFjZV90eXBlOwo+ PiArwqDCoMKgwqDCoMKgwqAgbGlzdC0+aWQxID0gbm9kZS0+c3BlYy5naWMuaW5zdGFuY2VfaWQ7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCBkZWZhdWx0Ogo+PiArwqDCoMKg wqDCoMKgwqAgbGlzdC0+aWQwID0gMDsKPj4gK8KgwqDCoMKgwqDCoMKgIGxpc3QtPmlkMSA9IDA7 Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgbGlzdC0+cmVncyA9wqAgcmVnczsKPj4gK8Kg wqDCoCBsaXN0LT5pbmRleCA9IGluZGV4Owo+PiArwqDCoMKgIGxpc3QtPmFkZHJlc3NpbmdfbW9k ZSA9IG5vZGUtPmludGVyZmFjZS5hZGRyZXNzaW5nX21vZGU7Cj4+ICvCoMKgwqAgbGxpc3RfYWRk KCZsaXN0LT5sbG5vZGUsICZhZXN0X25vZGVfbGxpc3QpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJu IDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYWVzdF9ub2RlX3Bvb2xfaW5pdCh2b2lkKQo+ PiArewo+PiArwqDCoMKgIHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZTsKPj4gK8KgwqDCoCBpbnQg cmM7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoYWVzdF9ub2RlX3Bvb2wpCj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gMDsKPj4gKwo+PiArwqDCoMKgIHNpemUgPSBpbG9nMihzaXplb2Yoc3RydWN0IGFl c3Rfbm9kZV9sbGlzdCkpOwo+PiArwqDCoMKgIGFlc3Rfbm9kZV9wb29sID0gZ2VuX3Bvb2xfY3Jl YXRlKHNpemUsIC0xKTsKPj4gK8KgwqDCoCBpZiAoIWFlc3Rfbm9kZV9wb29sKQo+PiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4gK8KgwqDCoCBhZGRyID0gKHVuc2lnbmVk IGxvbmcpdm1hbGxvYyhQQUdFX0FMSUdOKHNpemUgKiAKPj4gQUVTVF9OT0RFX0FMTE9DRURfTUFY KSk7Cj4+ICvCoMKgwqAgaWYgKCFhZGRyKQo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBlcnJfcG9v bF9hbGxvYzsKPj4gKwo+PiArwqDCoMKgIHJjID0gZ2VuX3Bvb2xfYWRkKGFlc3Rfbm9kZV9wb29s LCBhZGRyLCBzaXplLCAtMSk7Cj4+ICvCoMKgwqAgaWYgKHJjKQo+PiArwqDCoMKgwqDCoMKgwqAg Z290byBlcnJfcG9vbF9hZGQ7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gKwo+PiArZXJy X3Bvb2xfYWRkOgo+PiArwqDCoMKgIHZmcmVlKCh2b2lkICopYWRkcik7Cj4+ICsKPj4gK2Vycl9w b29sX2FsbG9jOgo+PiArwqDCoMKgIGdlbl9wb29sX2Rlc3Ryb3koYWVzdF9ub2RlX3Bvb2wpOwo+ PiArCj4+ICvCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lk IGFlc3RfbG9nKHN0cnVjdCBhZXN0X25vZGUgKm5vZGUsIGludCBpbmRleCwgc3RydWN0IAo+PiBy YXNfZXh0X3JlZ3MgKnJlZ3MpCj4+ICt7Cj4+ICvCoMKgwqAgaWYgKCFhZXN0X25vZGVfZ2VuX3Bv b2xfYWRkKG5vZGUsIGluZGV4LCByZWdzKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHNjaGVkdWxlX3dv cmsoJmFlc3Rfd29yayk7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiBFYWNoIFBFIG1heSBoYXMg bXVsdGkgZXJyb3IgcmVjb3JkLCB5b3UgbXVzdCBzZWxlY3RzIGFuIGVycm9yIAo+PiByZWNvcmQg dG8KPj4gKyAqIGJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlIEVycm9yIFJlY29yZCBTeXN0ZW0gcmVn aXN0ZXJzLgo+PiArICovCj4+ICtzdGF0aWMgaW5saW5lIHZvaWQgYWVzdF9zZWxlY3RfcmVjb3Jk KHN0cnVjdCBhZXN0X25vZGUgKm5vZGUsIGludCBpKQo+PiArewo+PiArwqDCoMKgIGlmIChub2Rl LT5pbnRlcmZhY2UudHlwZSA9PSBBQ1BJX0FFU1RfTk9ERV9TWVNURU1fUkVHSVNURVIpIHsKPj4g K8KgwqDCoMKgwqDCoMKgIHdyaXRlX3N5c3JlZ19zKGksIFNZU19FUlJTRUxSX0VMMSk7Cj4+ICvC oMKgwqDCoMKgwqDCoCBpc2IoKTsKPj4gK8KgwqDCoCB9Cj4+ICt9Cj4+ICsKPj4gKy8qIEVuc3Vy ZSBhbGwgd3JpdGVzIGhhcyB0YWtlbiBlZmZlY3QuICovCj4+ICtzdGF0aWMgaW5saW5lIHZvaWQg YWVzdF9zeW5jKHN0cnVjdCBhZXN0X25vZGUgKm5vZGUpCj4+ICt7Cj4+ICvCoMKgwqAgaWYgKG5v ZGUtPmludGVyZmFjZS50eXBlID09IEFDUElfQUVTVF9OT0RFX1NZU1RFTV9SRUdJU1RFUikKPj4g K8KgwqDCoMKgwqDCoMKgIGlzYigpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGFlc3RfcHJv YyhzdHJ1Y3QgYWVzdF9ub2RlICpub2RlKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCByYXNfZXh0 X3JlZ3MgcmVncyA9IHswfTsKPj4gK8KgwqDCoCBzdHJ1Y3QgYWVzdF9hY2Nlc3MgKmFjY2VzczsK Pj4gK8KgwqDCoCBpbnQgaSwgY291bnQgPSAwOwo+PiArwqDCoMKgIHU2NCByZWdzX3A7Cj4+ICsK Pj4gK8KgwqDCoCBmb3JfZWFjaF9pbXBsZW1lbnRlZF9yZWNvcmQoaSwgbm9kZSkgewo+PiArCj4+ ICvCoMKgwqDCoMKgwqDCoCAvKiAxYjogRXJyb3IgcmVjb3JkIGF0IGkgaW5kZXggaXMgbm90IGlt cGxlbWVudGVkICovCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAodGVzdF9iaXQoaSwgJm5vZGUtPmlu dGVyZmFjZS5yZWNvcmRfaW1wbGVtZW50ZWQpKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj b250aW51ZTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgYWVzdF9zZWxlY3RfcmVjb3JkKG5vZGUs IGkpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBhY2Nlc3MgPSBub2RlLT5hY2Nlc3M7Cj4+ICvC oMKgwqDCoMKgwqDCoCByZWdzX3AgPSAodTY0KSZub2RlLT5pbnRlcmZhY2UucmVnc1tpXTsKPj4g Kwo+PiArwqDCoMKgwqDCoMKgwqAgcmVncy5lcnJfc3RhdHVzID0gYWNjZXNzLT5yZWFkKHJlZ3Nf cCwgRVJYU1RBVFVTKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICghKHJlZ3MuZXJyX3N0YXR1cyAm IEVSUl9TVEFUVVNfVikpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+PiAr Cj4+ICvCoMKgwqDCoMKgwqDCoCBjb3VudCsrOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAo cmVncy5lcnJfc3RhdHVzICYgRVJSX1NUQVRVU19BVikKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmVncy5lcnJfYWRkciA9IGFjY2Vzcy0+cmVhZChyZWdzX3AsIEVSWEFERFIpOwo+PiArCj4+ ICvCoMKgwqDCoMKgwqDCoCByZWdzLmVycl9mciA9IGFjY2Vzcy0+cmVhZChyZWdzX3AsIEVSWEZS KTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJlZ3MuZXJyX2N0bHIgPSBhY2Nlc3MtPnJlYWQocmVnc19w LCBFUlhDVExSKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJlZ3MuZXJyX3N0YXR1cyAm IEVSUl9TVEFUVVNfTVYpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVncy5lcnJfbWlz Y1swXSA9IGFjY2Vzcy0+cmVhZChyZWdzX3AsIEVSWE1JU0MwKTsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmVncy5lcnJfbWlzY1sxXSA9IGFjY2Vzcy0+cmVhZChyZWdzX3AsIEVSWE1JU0Mx KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVncy5lcnJfbWlzY1syXSA9IGFjY2Vzcy0+ cmVhZChyZWdzX3AsIEVSWE1JU0MyKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVncy5l cnJfbWlzY1szXSA9IGFjY2Vzcy0+cmVhZChyZWdzX3AsIEVSWE1JU0MzKTsKPj4gK8KgwqDCoMKg wqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKG5vZGUtPmludGVyZmFjZS5mbGFn cyAmIEFDUElfQUVTVF9JTlRFUkZBQ0VfQ0xFQVJfTUlTQykgewo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBhY2Nlc3MtPndyaXRlKHJlZ3NfcCwgRVJYTUlTQzAsIDApOwo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBhY2Nlc3MtPndyaXRlKHJlZ3NfcCwgRVJYTUlTQzEsIDApOwo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBhY2Nlc3MtPndyaXRlKHJlZ3NfcCwgRVJYTUlTQzIsIDApOwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhY2Nlc3MtPndyaXRlKHJlZ3NfcCwgRVJYTUlTQzMs IDApOwo+PiArwqDCoMKgwqDCoMKgwqAgfSBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGFjY2Vzcy0+d3JpdGUocmVnc19wLCBFUlhNSVNDMCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIG5vZGUtPmludGVyZmFjZS5jZV90aHJlc2hvbGRbaV0pOwo+PiAr Cj4+ICvCoMKgwqDCoMKgwqDCoCBhZXN0X2xvZyhub2RlLCBpLCAmcmVncyk7Cj4+ICsKPj4gK8Kg wqDCoMKgwqDCoMKgIC8qIHBhbmljIGlmIHVucmVjb3ZlcmFibGUgYW5kIHVuY29udGFpbmFibGUg ZXJyb3IgZW5jb3VudGVyZWQgKi8KPj4gK8KgwqDCoMKgwqDCoMKgIGlmICgocmVncy5lcnJfc3Rh dHVzICYgRVJSX1NUQVRVU19VRSkgJiYKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHJlZ3Mu ZXJyX3N0YXR1cyAmIEVSUl9TVEFUVVNfVUVUKSA8IEVSUl9TVEFUVVNfVUVUX1VFUikKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcGFuaWMoIkFFU1Q6IHVucmVjb3ZlcmFibGUgZXJyb3IgZW5j b3VudGVyZWQiKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgLyogV3JpdGUtb25lLXRvLWNsZWFy IHRoZSBiaXRzIHdlJ3ZlIHNlZW4gKi8KPj4gK8KgwqDCoMKgwqDCoMKgIHJlZ3MuZXJyX3N0YXR1 cyAmPSBFUlJfU1RBVFVTX1cxVEM7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qIE11bHRpIGJp dCBmaWxlZCBuZWVkIHRvIHdyaXRlIGFsbC1vbmVzIHRvIGNsZWFyLiAqLwo+PiArwqDCoMKgwqDC oMKgwqAgaWYgKHJlZ3MuZXJyX3N0YXR1cyAmIEVSUl9TVEFUVVNfQ0UpCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJlZ3MuZXJyX3N0YXR1cyB8PSBFUlJfU1RBVFVTX0NFOwo+PiArCj4+ICvC oMKgwqDCoMKgwqDCoCAvKiBNdWx0aSBiaXQgZmlsZWQgbmVlZCB0byB3cml0ZSBhbGwtb25lcyB0 byBjbGVhci4gKi8KPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZWdzLmVycl9zdGF0dXMgJiBFUlJf U1RBVFVTX1VFVCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVncy5lcnJfc3RhdHVzIHw9 IEVSUl9TVEFUVVNfVUVUOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBhY2Nlc3MtPndyaXRlKHJl Z3NfcCwgRVJYU1RBVFVTLCByZWdzLmVycl9zdGF0dXMpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDC oCBhZXN0X3N5bmMobm9kZSk7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIGNv dW50Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaXJxcmV0dXJuX3QgYWVzdF9pcnFfZnVuYyhpbnQg aXJxLCB2b2lkICppbnB1dCkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgYWVzdF9ub2RlICpub2Rl ID0gaW5wdXQ7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoYWVzdF9wcm9jKG5vZGUpKQo+PiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIElSUV9IQU5ETEVEOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIElSUV9O T05FOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IF9faW5pdCBhZXN0X3JlZ2lzdGVyX2dzaSh1 MzIgZ3NpLCBpbnQgdHJpZ2dlciwgdm9pZCAqZGF0YSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlycV9oYW5kbGVyX3QgYWVzdF9pcnFfZnVuYykKPj4gK3sKPj4g K8KgwqDCoCBpbnQgY3B1LCBpcnE7Cj4+ICsKPj4gK8KgwqDCoCBpcnEgPSBhY3BpX3JlZ2lzdGVy X2dzaShOVUxMLCBnc2ksIHRyaWdnZXIsIEFDUElfQUNUSVZFX0hJR0gpOwo+PiArCj4+ICvCoMKg wqAgaWYgKGlycSA9PSAtRUlOVkFMKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBwcl9lcnIoImZhaWxl ZCB0byBtYXAgQUVTVCBHU0kgJWRcbiIsIGdzaSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g LUVJTlZBTDsKPj4gK8KgwqDCoCB9Cj4gCj4gSU1PLCBzaG91bGQgYmU6Cj4gaWYgKGlycSA8IDAp IHsKPiAgwqDCoMKgwqBwcl9lcnIoImZhaWxlZCB0byBtYXAgQUVTVCBHU0kgJWRcbiIsIGdzaSk7 Cj4gIMKgwqDCoMKgcmV0dXJuIGlycTsKPiB9Cj4gCj4+ICsKPj4gK8KgwqDCoCBpZiAoaXJxX2lz X3BlcmNwdV9kZXZpZChpcnEpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBwcGlfaXJxc1twcGlfaWR4 XSA9IGlycTsKPj4gK8KgwqDCoMKgwqDCoMKgIGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtY3B5KHBlcl9jcHVfcHRyKGFlc3RfcHBpX2Rh dGFbcHBpX2lkeF0sIGNwdSksIGRhdGEsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc2l6ZW9mKHN0cnVjdCBhZXN0X25vZGUpKTsKPj4gK8KgwqDCoMKgwqDCoMKgIH0K Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXF1ZXN0X3BlcmNwdV9pcnEoaXJxLCBhZXN0X2lycV9m dW5jLCAiQUVTVCIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBhZXN0X3BwaV9kYXRhW3BwaV9pZHgrK10pKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHByX2VycigiZmFpbGVkIHRvIHJlZ2lzdGVyIEFFU1QgSVJRICVkXG4iLCBpcnEpOwo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPiAKPiBEbyBub3Qgb3ZlcnJp ZGUgdGhlIGVycm9yIG51bWJlci4KPiAKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCB9 IGVsc2Ugewo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJlcXVlc3RfaXJxKGlycSwgYWVzdF9pcnFf ZnVuYywgSVJRRl9TSEFSRUQsICJBRVNUIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBkYXRhKSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcl9lcnIoImZhaWxlZCB0 byByZWdpc3RlciBBRVNUIElSUSAlZFxuIiwgaXJxKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuIC1FSU5WQUw7Cj4gCj4gZGl0dG8uCj4gCj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBpbnQgX19pbml0IGFlc3RfaW5pdF9pbnRlcnJ1cHRzKHN0cnVjdCBhY3BpX2Flc3RfaGRyICpo ZHIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgYWVzdF9ub2RlICpub2RlKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBhY3BpX2Flc3Rfbm9k ZV9pbnRlcnJ1cHQgKmludGVycnVwdDsKPj4gK8KgwqDCoCBpbnQgaSwgdHJpZ2dlciwgcmV0ID0g MCwgZXJyX2N0bHIsIHJlZ3NfcDsKPj4gKwo+PiArwqDCoMKgIGludGVycnVwdCA9IEFDUElfQURE X1BUUihzdHJ1Y3QgYWNwaV9hZXN0X25vZGVfaW50ZXJydXB0LCBoZHIsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoZHItPm5vZGVfaW50ZXJydXB0X29mZnNldCk7Cj4+ICsK Pj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgaGRyLT5ub2RlX2ludGVycnVwdF9jb3VudDsgaSsr LCBpbnRlcnJ1cHQrKykgewo+PiArwqDCoMKgwqDCoMKgwqAgdHJpZ2dlciA9IChpbnRlcnJ1cHQt PmZsYWdzICYgQUVTVF9JTlRFUlJVUFRfTU9ERSkgPwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgQUNQSV9MRVZFTF9TRU5TSVRJVkUgOiBBQ1BJX0VER0VfU0VOU0lUSVZFOwo+PiArwqDC oMKgwqDCoMKgwqAgaWYgKGFlc3RfcmVnaXN0ZXJfZ3NpKGludGVycnVwdC0+Z3NpdiwgdHJpZ2dl ciwgbm9kZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFlc3Rf aXJxX2Z1bmMpKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRUlOVkFMOwo+IAo+ IERvIG5vdCBvdmVycmlkZSB0aGUgZXJyb3IgbnVtYmVyLgo+IAo+PiArwqDCoMKgIH0KPj4gKwo+ PiArwqDCoMKgIC8qIEVuc3VyZSBSQVMgaW50ZXJydXB0IGlzIGVuYWJsZWQgKi8KPj4gK8KgwqDC oCBmb3JfZWFjaF9pbXBsZW1lbnRlZF9yZWNvcmQoaSwgbm9kZSkgewo+PiArwqDCoMKgwqDCoMKg wqAgLyogMWI6IEVycm9yIHJlY29yZCBhdCBpIGluZGV4IGlzIG5vdCBpbXBsZW1lbnRlZCAqLwo+ PiArwqDCoMKgwqDCoMKgwqAgaWYgKHRlc3RfYml0KGksICZub2RlLT5pbnRlcmZhY2UucmVjb3Jk X2ltcGxlbWVudGVkKSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+ICsK Pj4gK8KgwqDCoMKgwqDCoMKgIGFlc3Rfc2VsZWN0X3JlY29yZChub2RlLCBpKTsKPj4gKwo+PiAr wqDCoMKgwqDCoMKgwqAgcmVnc19wID0gKHU2NCkmbm9kZS0+aW50ZXJmYWNlLnJlZ3NbaV07Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGVycl9jdGxyID0gbm9kZS0+YWNjZXNzLT5yZWFkKHJlZ3Nf cCwgRVJYQ1RMUik7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChpbnRlcnJ1cHQtPnR5cGUg PT0gQUNQSV9BRVNUX05PREVfRkFVTFRfSEFORExJTkcpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGVycl9jdGxyIHw9IEVSUl9DVExSX0ZJOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGludGVy cnVwdC0+dHlwZSA9PSBBQ1BJX0FFU1RfTk9ERV9FUlJPUl9SRUNPVkVSWSkKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZXJyX2N0bHIgfD0gRVJSX0NUTFJfVUk7Cj4+ICsKPj4gK8KgwqDCoMKg wqDCoMKgIG5vZGUtPmFjY2Vzcy0+d3JpdGUocmVnc19wLCBFUlhDVExSLCBlcnJfY3Rscik7Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGFlc3Rfc3luYyhub2RlKTsKPj4gK8KgwqDCoCB9Cj4+ICsK Pj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBfX2luaXQg c2V0X2Flc3Rfbm9kZV9uYW1lKHN0cnVjdCBhZXN0X25vZGUgKm5vZGUpCj4+ICt7Cj4+ICvCoMKg wqAgc3dpdGNoIChub2RlLT50eXBlKSB7Cj4+ICvCoMKgwqAgY2FzZSBBQ1BJX0FFU1RfUFJPQ0VT U09SX0VSUk9SX05PREU6Cj4+ICvCoMKgwqDCoMKgwqDCoCBub2RlLT5uYW1lID0ga2FzcHJpbnRm KEdGUF9LRVJORUwsICJBRVNULUNQVSVkIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbm9k ZS0+c3BlYy5wcm9jZXNzb3IucHJvY2Vzc29yX2lkKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFr Owo+PiArwqDCoMKgIGNhc2UgQUNQSV9BRVNUX01FTU9SWV9FUlJPUl9OT0RFOgo+PiArwqDCoMKg IGNhc2UgQUNQSV9BRVNUX1NNTVVfRVJST1JfTk9ERToKPj4gK8KgwqDCoCBjYXNlIEFDUElfQUVT VF9WRU5ET1JfRVJST1JfTk9ERToKPj4gK8KgwqDCoCBjYXNlIEFDUElfQUVTVF9HSUNfRVJST1Jf Tk9ERToKPj4gK8KgwqDCoMKgwqDCoMKgIG5vZGUtPm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5F TCwgIkFFU1QtJWxseCIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5vZGUtPmludGVyZmFj ZS5waHlfYWRkcik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCBkZWZhdWx0 Ogo+PiArwqDCoMKgwqDCoMKgwqAgbm9kZS0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAi QUVTVC1Vbmtvd24tTm9kZSIpOwo+IAo+IElNTywgYmV0dGVyIHRvIGNoZWNrIHRoZSByZXR1cm4g dmFsdWUgZm9yIG1lbW9yeSBhbGxvY2F0aW9uLgo+IAo+PiArwqDCoMKgIH0KPj4gK30KPj4gKwo+ PiArLyogYWNjZXNzIHR5cGUgaXMgZGVjaWRlZCBieSBBRVNUIGludGVyZmFjZSB0eXBlLiAqLwo+ PiArc3RhdGljIHN0cnVjdCBhZXN0X2FjY2VzcyBhZXN0X2FjY2Vzc1tdID0gewo+PiArwqDCoMKg IFtBQ1BJX0FFU1RfTk9ERV9TWVNURU1fUkVHSVNURVJdID0gewo+PiArwqDCoMKgwqDCoMKgwqAg LnJlYWQgPSBhZXN0X3N5c3JlZ19yZWFkLAo+PiArwqDCoMKgwqDCoMKgwqAgLndyaXRlID0gYWVz dF9zeXNyZWdfd3JpdGUsCj4+ICvCoMKgwqAgfSwKPj4gKwo+PiArwqDCoMKgIFtBQ1BJX0FFU1Rf Tk9ERV9NRU1PUllfTUFQUEVEXSA9IHsKPj4gK8KgwqDCoMKgwqDCoMKgIC5yZWFkID0gYWVzdF9p b21lbV9yZWFkLAo+PiArwqDCoMKgwqDCoMKgwqAgLndyaXRlID0gYWVzdF9pb21lbV93cml0ZSwK Pj4gK8KgwqDCoCB9LAo+PiArwqDCoMKgIHsgfQo+PiArfTsKPj4gKwo+PiArLyogSW4ga2VybmVs LWZpcnN0IG1vZGUsIGtlcm5lbCB3aWxsIHJlcG9ydCBldmVyeSBDRSBieSBkZWZhdWx0LiAqLwo+ PiArc3RhdGljIHZvaWQgX19pbml0IGFlc3Rfc2V0X2NlX3RocmVzaG9sZChzdHJ1Y3QgYWVzdF9u b2RlICpub2RlKQo+PiArewo+PiArwqDCoMKgIHU2NCByZWdzX3AsIGVycl9mciwgZXJyX2ZyX2Nl YywgZXJyX2ZyX3JwLCBlcnJfbWlzYzAsIGNlX3RocmVzaG9sZDsKPj4gK8KgwqDCoCBpbnQgaTsK Pj4gKwo+PiArwqDCoMKgIGZvcl9lYWNoX2ltcGxlbWVudGVkX3JlY29yZChpLCBub2RlKSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoCAvKiAxYjogRXJyb3IgcmVjb3JkIGF0IGkgaW5kZXggaXMgbm90IGlt cGxlbWVudGVkICovCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAodGVzdF9iaXQoaSwgJm5vZGUtPmlu dGVyZmFjZS5yZWNvcmRfaW1wbGVtZW50ZWQpKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj b250aW51ZTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgYWVzdF9zZWxlY3RfcmVjb3JkKG5vZGUs IGkpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmVnc19wID0gKHU2NCkmbm9kZS0+aW50ZXJmYWNlLnJl Z3NbaV07Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGVycl9mciA9IG5vZGUtPmFjY2Vzcy0+cmVh ZChyZWdzX3AsIEVSWEZSKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGVycl9mcl9jZWMgPSBGSUVMRF9H RVQoRVJSX0ZSX0NFQywgZXJyX2ZyKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGVycl9mcl9ycCA9IEZJ RUxEX0dFVChFUlJfRlJfUlAsIGVycl9mcik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBlcnJfbWlzYzAg PSBub2RlLT5hY2Nlc3MtPnJlYWQocmVnc19wLCBFUlhNSVNDMCk7Cj4+ICsKPj4gK8KgwqDCoMKg wqDCoMKgIGlmIChlcnJfZnJfY2VjID09IEVSUl9GUl9DRUNfMEJfQ09VTlRFUikKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcHJfZGVidWcoIiVzLSVkIGRvIG5vdCBzdXBwb3J0IENFIHRocmVz aG9sZCFcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBub2Rl LT5uYW1lLCBpKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKGVycl9mcl9jZWMgPT0gRVJS X0ZSX0NFQ184Ql9DT1VOVEVSICYmCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZXJyX2ZyX3JwID09IEVSUl9GUl9SUF9TSU5HTEVfQ09VTlRFUikgewo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBwcl9kZWJ1ZygiJXMtJWQgc3VwcG9ydCA4IGJpdCBDRSB0aHJlc2hvbGQhXG4i LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbm9kZS0+bmFtZSwg aSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNlX3RocmVzaG9sZCA9IGVycl9taXNjMCB8 IEVSUl9NSVNDMF84Ql9DRUM7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2UgaWYgKGVycl9mcl9j ZWMgPT0gRVJSX0ZSX0NFQ18xNkJfQ09VTlRFUiAmJgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGVycl9mcl9ycCA9PSBFUlJfRlJfUlBfU0lOR0xFX0NPVU5URVIpIHsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJfZGVidWcoIiVzLSVkIHN1cHBvcnQgMTYgYml0IENFIHRo cmVzaG9sZCFcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBu b2RlLT5uYW1lLCBpKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2VfdGhyZXNob2xkID0g ZXJyX21pc2MwIHwgRVJSX01JU0MwXzE2Ql9DRUM7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2UK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJfZGVidWcoIiVzLSVkIGRvIG5vdCBzdXBwb3J0 IGRvdWJsZSBjb3VudGVyIHlldCFcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBub2RlLT5uYW1lLCBpKTsKPiAKPiBDaGFuZ2UgdG8gJ3N3aXRjaCcgc3RhdGVt ZW50IHdpbGwgYmUgbW9yZSByZWFkYWJsZS4KPiAKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgbm9k ZS0+YWNjZXNzLT53cml0ZShyZWdzX3AsIEVSWE1JU0MwLCBjZV90aHJlc2hvbGQpOwo+PiArwqDC oMKgwqDCoMKgwqAgbm9kZS0+aW50ZXJmYWNlLmNlX3RocmVzaG9sZFtpXSA9IGNlX3RocmVzaG9s ZDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgYWVzdF9zeW5jKG5vZGUpOwo+PiArwqDCoMKgIH0K Pj4gK30KPj4gKwo+PiArc3RhdGljIGludCBfX2luaXQgYWVzdF9pbml0X2ludGVyZmFjZShzdHJ1 Y3QgYWNwaV9hZXN0X2hkciAqaGRyLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3RydWN0IGFlc3Rfbm9kZSAqbm9kZSkKPj4gK3sKPj4gK8KgwqDCoCBz dHJ1Y3QgYWNwaV9hZXN0X25vZGVfaW50ZXJmYWNlICppbnRlcmZhY2U7Cj4+ICvCoMKgwqAgc3Ry dWN0IHJlc291cmNlICpyZXM7Cj4+ICvCoMKgwqAgaW50IHNpemU7Cj4+ICsKPj4gK8KgwqDCoCBp bnRlcmZhY2UgPSBBQ1BJX0FERF9QVFIoc3RydWN0IGFjcGlfYWVzdF9ub2RlX2ludGVyZmFjZSwg aGRyLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaGRyLT5ub2RlX2ludGVy ZmFjZV9vZmZzZXQpOwo+PiArCj4+ICvCoMKgwqAgaWYgKGludGVyZmFjZS0+dHlwZSA+PSBBQ1BJ X0FFU1RfWEZBQ0VfUkVTRVJWRUQpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHByX2VycigiaW52YWxp ZCBpbnRlcmZhY2UgdHlwZTogJWRcbiIsIGludGVyZmFjZS0+dHlwZSk7Cj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBub2RlLT5p bnRlcmZhY2UudHlwZSA9IGludGVyZmFjZS0+dHlwZTsKPj4gK8KgwqDCoCBub2RlLT5pbnRlcmZh Y2UucGh5X2FkZHIgPSBpbnRlcmZhY2UtPmFkZHJlc3M7Cj4+ICvCoMKgwqAgbm9kZS0+aW50ZXJm YWNlLnJlY29yZF9zdGFydCA9IGludGVyZmFjZS0+ZXJyb3JfcmVjb3JkX2luZGV4Owo+PiArwqDC oMKgIG5vZGUtPmludGVyZmFjZS5yZWNvcmRfZW5kID0gaW50ZXJmYWNlLT5lcnJvcl9yZWNvcmRf aW5kZXggKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50ZXJm YWNlLT5lcnJvcl9yZWNvcmRfY291bnQ7Cj4+ICvCoMKgwqAgbm9kZS0+aW50ZXJmYWNlLmZsYWdz ID0gaW50ZXJmYWNlLT5mbGFnczsKPj4gK8KgwqDCoCBub2RlLT5pbnRlcmZhY2UucmVjb3JkX2lt cGxlbWVudGVkID0gCj4+IGludGVyZmFjZS0+ZXJyb3JfcmVjb3JkX2ltcGxlbWVudGVkOwo+PiAr wqDCoMKgIG5vZGUtPmludGVyZmFjZS5zdGF0dXNfcmVwb3J0aW5nID0gCj4+IGludGVyZmFjZS0+ ZXJyb3Jfc3RhdHVzX3JlcG9ydGluZzsKPj4gK8KgwqDCoCBub2RlLT5pbnRlcmZhY2UuYWRkcmVz c2luZ19tb2RlID0gaW50ZXJmYWNlLT5hZGRyZXNzaW5nX21vZGU7Cj4+ICvCoMKgwqAgbm9kZS0+ YWNjZXNzID0gJmFlc3RfYWNjZXNzW2ludGVyZmFjZS0+dHlwZV07Cj4+ICsKPj4gK8KgwqDCoCAv Kgo+PiArwqDCoMKgwqAgKiBDdXJyZW50bHkgU1IgYmFzZWQgaGFuZGxpbmcgaXMgZG9uZSB0aHJv dWdoIHRoZSBhcmNoaXRlY3RlZAo+PiArwqDCoMKgwqAgKiBkaXNjb3ZlcnkgZXhwb3NlZCB0aHJv dWdoIFNScy4gVGhhdCBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUKPj4gK8KgwqDCoMKgICogaWYg dGhlcmUgaXMgc3VwcGxlbWVudGFsIGluZm9ybWF0aW9uIGluIHRoZSBBRVNUIHRoYXQgaXMKPj4g K8KgwqDCoMKgICogbmVlZGVkLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBpZiAoaW50ZXJm YWNlLT50eXBlID09IEFDUElfQUVTVF9OT0RFX1NZU1RFTV9SRUdJU1RFUikKPj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybiAwOwo+PiArCj4+ICvCoMKgwqAgcmVzID0ga3phbGxvYyhzaXplb2Yoc3Ry dWN0IHJlc291cmNlKSwgR0ZQX0tFUk5FTCk7Cj4+ICvCoMKgwqAgaWYgKCFyZXMpCj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArwqDCoMKgIHNpemUgPSBpbnRlcmZh Y2UtPmVycm9yX3JlY29yZF9jb3VudCAqIHNpemVvZihzdHJ1Y3QgcmFzX2V4dF9yZWdzKTsKPj4g K8KgwqDCoCByZXMtPm5hbWUgPSAiQUVTVCI7Cj4+ICvCoMKgwqAgcmVzLT5zdGFydCA9IGludGVy ZmFjZS0+YWRkcmVzczsKPj4gK8KgwqDCoCByZXMtPmVuZCA9IHJlcy0+c3RhcnQgKyBzaXplOwo+ PiArwqDCoMKgIHJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKPj4gKwo+PiArwqDCoMKgIGlm IChpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCByZXMpKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoCBwcl9ub3RpY2UoInJlcXVlc3QgcmVnaW9uIGNvbmZsaWN0IHdpdGggJXNcbiIsCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlcy0+bmFtZSk7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvC oMKgwqAgbm9kZS0+aW50ZXJmYWNlLnJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHNpemUpOwo+ PiArwqDCoMKgIGlmICghbm9kZS0+aW50ZXJmYWNlLnJlZ3MpIHsKPj4gK8KgwqDCoMKgwqDCoMKg IHByX2VycigiSW9yZW1hcCBmb3IgJXMgZmFpbGVkIVxuIiwgbm9kZS0+bmFtZSk7Cj4+ICvCoMKg wqDCoMKgwqDCoCBrZnJlZShyZXMpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7 Cj4gCj4gcmV0dXJuIC1FTk9NRU07Cj4gCj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgbm9k ZS0+aW50ZXJmYWNlLmNlX3RocmVzaG9sZCA9IGt6YWxsb2Moc2l6ZW9mKHU2NCkgKgo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludGVyZmFjZS0+ZXJyb3JfcmVjb3JkX2NvdW50 LCBHRlBfS0VSTkVMKTsKPj4gK8KgwqDCoCBpZiAoIW5vZGUtPmludGVyZmFjZS5jZV90aHJlc2hv bGQpCj4gCj4ga2ZyZWUocmVzKSBhbmQgaW91bm1hcCgpCj4gCj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArwqDCoMKgIGFlc3Rfc2V0X2NlX3RocmVzaG9sZChub2Rl KTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IF9f aW5pdCBhZXN0X2luaXRfY29tbW9uKHN0cnVjdCBhY3BpX2Flc3RfaGRyICpoZHIsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBhZXN0X25v ZGUgKm5vZGUpCj4+ICt7Cj4+ICvCoMKgwqAgaW50IHJldDsKPj4gKwo+PiArwqDCoMKgIHNldF9h ZXN0X25vZGVfbmFtZShub2RlKTsKPj4gKwo+PiArwqDCoMKgIHJldCA9IGFlc3RfaW5pdF9pbnRl cmZhY2UoaGRyLCBub2RlKTsKPj4gK8KgwqDCoCBpZiAocmV0KSB7Cj4+ICvCoMKgwqDCoMKgwqDC oCBwcl9lcnIoImZhaWxlZCB0byBpbml0IGludGVyZmFjZVxuIik7Cj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gcmV0Owo+IAo+IEkgZGlkIG5vdCBzZWUgeW91IGZyZWUgdGhlIG5vZGUtPm5hbWUg YmVmb3JlIHJldHVybmluZyBhbiBlcnJvci4KPiAKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDC oCByZXR1cm4gYWVzdF9pbml0X2ludGVycnVwdHMoaGRyLCBub2RlKTsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGludCBfX2luaXQgYWVzdF9pbml0X25vZGVfZGVmYXVsdChzdHJ1Y3QgYWNwaV9hZXN0 X2hkciAqaGRyKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBhZXN0X25vZGUgKm5vZGU7Cj4+ICvC oMKgwqAgdW5pb24gYWVzdF9ub2RlX3NwZWMgKm5vZGVfc3BlYzsKPj4gK8KgwqDCoCBpbnQgcmV0 Owo+PiArCj4+ICvCoMKgwqAgbm9kZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZXN0X25vZGUp LCBHRlBfS0VSTkVMKTsKPj4gK8KgwqDCoCBpZiAoIW5vZGUpCj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArwqDCoMKgIG5vZGUtPnR5cGUgPSBoZHItPnR5cGU7Cj4+ ICvCoMKgwqAgbm9kZV9zcGVjID0gQUNQSV9BRERfUFRSKHVuaW9uIGFlc3Rfbm9kZV9zcGVjLCBo ZHIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoZHItPm5vZGVf c3BlY2lmaWNfb2Zmc2V0KTsKPj4gKwo+PiArwqDCoMKgIG1lbWNweSgmbm9kZS0+c3BlYywgbm9k ZV9zcGVjLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoZHItPm5vZGVfaW50ZXJmYWNlX29m ZnNldCAtIGhkci0+bm9kZV9zcGVjaWZpY19vZmZzZXQpOwo+PiArCj4+ICvCoMKgwqAgcmV0ID0g YWVzdF9pbml0X2NvbW1vbihoZHIsIG5vZGUpOwo+PiArwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKg wqDCoMKgwqDCoCBrZnJlZShub2RlKTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBpbnQgX19pbml0IGFlc3RfaW5pdF9wcm9jZXNzb3Jfbm9kZShzdHJ1 Y3QgYWNwaV9hZXN0X2hkciAqaGRyKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBhZXN0X25vZGUg Km5vZGU7Cj4+ICvCoMKgwqAgdW5pb24gYWVzdF9ub2RlX3NwZWMgKm5vZGVfc3BlYzsKPj4gK8Kg wqDCoCB1bmlvbiBhZXN0X25vZGVfcHJvY2Vzc29yICpwcm9jOwo+PiArwqDCoMKgIGludCByZXQ7 Cj4+ICsKPj4gK8KgwqDCoCBub2RlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFlc3Rfbm9kZSks IEdGUF9LRVJORUwpOwo+PiArwqDCoMKgIGlmICghbm9kZSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiAtRU5PTUVNOwo+PiArCj4+ICvCoMKgwqAgbm9kZS0+dHlwZSA9IGhkci0+dHlwZTsKPj4g K8KgwqDCoCBub2RlX3NwZWMgPSBBQ1BJX0FERF9QVFIodW5pb24gYWVzdF9ub2RlX3NwZWMsIGhk ciwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhkci0+bm9kZV9z cGVjaWZpY19vZmZzZXQpOwo+PiArCj4+ICvCoMKgwqAgbWVtY3B5KCZub2RlLT5zcGVjLCBub2Rl X3NwZWMsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhkci0+bm9kZV9pbnRlcmZhY2Vfb2Zm c2V0IC0gaGRyLT5ub2RlX3NwZWNpZmljX29mZnNldCk7Cj4+ICsKPj4gK8KgwqDCoCBwcm9jID0g QUNQSV9BRERfUFRSKHVuaW9uIGFlc3Rfbm9kZV9wcm9jZXNzb3IsIG5vZGVfc3BlYywKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVvZihhY3BpX2Flc3RfcHJv Y2Vzc29yKSk7Cj4+ICsKPj4gK8KgwqDCoCBzd2l0Y2ggKG5vZGUtPnNwZWMucHJvY2Vzc29yLnJl c291cmNlX3R5cGUpIHsKPj4gK8KgwqDCoCBjYXNlIEFDUElfQUVTVF9DQUNIRV9SRVNPVVJDRToK Pj4gK8KgwqDCoMKgwqDCoMKgIG1lbWNweSgmbm9kZS0+cHJvYywgcHJvYywKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2Yoc3RydWN0IGFjcGlfYWVzdF9wcm9jZXNzb3Jf Y2FjaGUpKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGNhc2UgQUNQSV9B RVNUX1RMQl9SRVNPVVJDRToKPj4gK8KgwqDCoMKgwqDCoMKgIG1lbWNweSgmbm9kZS0+cHJvYywg cHJvYywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2Yoc3RydWN0IGFj cGlfYWVzdF9wcm9jZXNzb3JfdGxiKSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8Kg wqDCoCBjYXNlIEFDUElfQUVTVF9HRU5FUklDX1JFU09VUkNFOgo+PiArwqDCoMKgwqDCoMKgwqAg bWVtY3B5KCZub2RlLT5wcm9jLCBwcm9jLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHNpemVvZihzdHJ1Y3QgYWNwaV9hZXN0X3Byb2Nlc3Nvcl9nZW5lcmljKSk7Cj4+ICvCoMKg wqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBhZXN0 X2luaXRfY29tbW9uKGhkciwgbm9kZSk7Cj4+ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKg wqDCoMKgIGtmcmVlKG5vZGUpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4gK30KPj4g Kwo+PiArc3RhdGljIGludCBfX2luaXQgYWVzdF9pbml0X25vZGUoc3RydWN0IGFjcGlfYWVzdF9o ZHIgKm5vZGUpCj4+ICt7Cj4+ICvCoMKgwqAgc3dpdGNoIChub2RlLT50eXBlKSB7Cj4+ICvCoMKg wqAgY2FzZSBBQ1BJX0FFU1RfUFJPQ0VTU09SX0VSUk9SX05PREU6Cj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gYWVzdF9pbml0X3Byb2Nlc3Nvcl9ub2RlKG5vZGUpOwo+PiArwqDCoMKgIGNhc2Ug QUNQSV9BRVNUX01FTU9SWV9FUlJPUl9OT0RFOgo+PiArwqDCoMKgIGNhc2UgQUNQSV9BRVNUX1ZF TkRPUl9FUlJPUl9OT0RFOgo+PiArwqDCoMKgIGNhc2UgQUNQSV9BRVNUX1NNTVVfRVJST1JfTk9E RToKPj4gK8KgwqDCoCBjYXNlIEFDUElfQUVTVF9HSUNfRVJST1JfTk9ERToKPj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybiBhZXN0X2luaXRfbm9kZV9kZWZhdWx0KG5vZGUpOwo+PiArwqDCoMKgIGRl ZmF1bHQ6Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gK8KgwqDCoCB9Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIF9faW5pdCBhZXN0X2NvdW50X3BwaShzdHJ1Y3QgYWNw aV9hZXN0X2hkciAqaGVhZGVyKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBhY3BpX2Flc3Rfbm9k ZV9pbnRlcnJ1cHQgKmludGVycnVwdDsKPj4gK8KgwqDCoCBpbnQgaTsKPj4gKwo+PiArwqDCoMKg IGludGVycnVwdCA9IEFDUElfQUREX1BUUihzdHJ1Y3QgYWNwaV9hZXN0X25vZGVfaW50ZXJydXB0 LCBoZWFkZXIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoZWFkZXItPm5v ZGVfaW50ZXJydXB0X29mZnNldCk7Cj4+ICsKPj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgaGVh ZGVyLT5ub2RlX2ludGVycnVwdF9jb3VudDsgaSsrLCBpbnRlcnJ1cHQrKykgewo+PiArwqDCoMKg wqDCoMKgwqAgaWYgKGludGVycnVwdC0+Z3NpdiA+PSAxNiAmJiBpbnRlcnJ1cHQtPmdzaXYgPCAz MikKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbnVtX3BwaSsrOwo+PiArwqDCoMKgIH0KPj4g K30KPj4gKwo+PiArc3RhdGljIGludCBhZXN0X3N0YXJ0aW5nX2NwdSh1bnNpZ25lZCBpbnQgY3B1 KQo+PiArewo+PiArwqDCoMKgIGludCBpOwo+PiArCj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8 IG51bV9wcGk7IGkrKykKPj4gK8KgwqDCoMKgwqDCoMKgIGVuYWJsZV9wZXJjcHVfaXJxKHBwaV9p cnFzW2ldLCBJUlFfVFlQRV9OT05FKTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IGFlc3RfZHlpbmdfY3B1KHVuc2lnbmVkIGludCBjcHUpCj4+ICt7 Cj4+ICvCoMKgwqAgaW50IGk7Cj4+ICsKPj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgbnVtX3Bw aTsgaSsrKQo+PiArwqDCoMKgwqDCoMKgwqAgZGlzYWJsZV9wZXJjcHVfaXJxKHBwaV9pcnFzW2ld KTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtpbnQgX19pbml0IGFj cGlfYWVzdF9pbml0KHZvaWQpCj4gCj4gU2hvdWxkIGJlICdzdGF0aWMnLgo+IAo+PiArewo+PiAr wqDCoMKgIHN0cnVjdCBhY3BpX2Flc3RfaGRyICphZXN0X25vZGUsICphZXN0X2VuZDsKPj4gK8Kg wqDCoCBzdHJ1Y3QgYWNwaV90YWJsZV9hZXN0ICphZXN0Owo+PiArwqDCoMKgIGludCBpLCByZXQg PSAwOwo+PiArCj4+ICvCoMKgwqAgaWYgKGFjcGlfZGlzYWJsZWQpCj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gMDsKPj4gKwo+PiArwqDCoMKgIGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJNNjRf UkFTX0VYVE4pKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4gCj4gSSB0aGluayB5b3Ug Y2FuIG1vdmUgdGhpcyBpbnRvIEtjb25maWcgZmlsZSwgdGhhdCBtYWtlcyBBQ1BJX0FFU1QgCj4g ZGVwZW5kZW50IG9uIHRoaXMgQ09ORklHX0FSTTY0X1JBU19FWFROPwo+IAo+PiArCj4+ICvCoMKg wqAgaWYgKEFDUElfRkFJTFVSRShhY3BpX2dldF90YWJsZShBQ1BJX1NJR19BRVNULCAwLCAmYWVz dF90YWJsZSkpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gK8Kg wqDCoCByZXQgPSBhZXN0X25vZGVfcG9vbF9pbml0KCk7Cj4+ICvCoMKgwqAgaWYgKHJldCkgewo+ PiArwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCJGYWlsZWQgaW5pdCBhZXN0IG5vZGUgcG9vbC5cbiIp Owo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+IAo+IEp1c3QgcmV0dXJuIHJldDsKPiAK Pj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBJTklUX1dPUksoJmFlc3Rfd29yaywgYWVzdF9u b2RlX3Bvb2xfcHJvY2Vzcyk7Cj4+ICsKPj4gK8KgwqDCoCBhZXN0ID0gKHN0cnVjdCBhY3BpX3Rh YmxlX2Flc3QgKilhZXN0X3RhYmxlOwo+PiArCj4+ICvCoMKgwqAgLyogR2V0IHRoZSBmaXJzdCBB RVNUIG5vZGUgKi8KPj4gK8KgwqDCoCBhZXN0X25vZGUgPSBBQ1BJX0FERF9QVFIoc3RydWN0IGFj cGlfYWVzdF9oZHIsIGFlc3QsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz aXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSk7Cj4+ICvCoMKgwqAgLyogUG9pbnRlciB0 byB0aGUgZW5kIG9mIHRoZSBBRVNUIHRhYmxlICovCj4+ICvCoMKgwqAgYWVzdF9lbmQgPSBBQ1BJ X0FERF9QVFIoc3RydWN0IGFjcGlfYWVzdF9oZHIsIGFlc3QsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYWVzdF90YWJsZS0+bGVuZ3RoKTsKPj4gKwo+PiArwqDCoMKgIHdoaWxl IChhZXN0X25vZGUgPCBhZXN0X2VuZCkgewo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCgodTY0KWFl c3Rfbm9kZSArIGFlc3Rfbm9kZS0+bGVuZ3RoKSA+ICh1NjQpYWVzdF9lbmQpIHsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCJBRVNUIG5vZGUgcG9pbnRlciBvdmVyZmxvdywgYmFk IHRhYmxlLlxuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+ IAo+IFlvdSBzaG91bGQgZGVzdHJveSB0aGUgbm9kZSBwb29sIGJlZm9yZSByZXR1cm5pbmcgZXJy b3JzLgo+IAo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBhZXN0 X2NvdW50X3BwaShhZXN0X25vZGUpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBhZXN0X25vZGUg PSBBQ1BJX0FERF9QVFIoc3RydWN0IGFjcGlfYWVzdF9oZHIsIGFlc3Rfbm9kZSwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWVzdF9ub2RlLT5sZW5ndGgpOwo+ PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGFlc3RfcHBpX2RhdGEgPSBrY2FsbG9jKG51bV9w cGksIHNpemVvZihzdHJ1Y3QgYWVzdF9ub2RlX2RhdGEgKiksCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgR0ZQX0tFUk5FTCk7Cj4+ICvCoMKgwqAgaWYgKCFhZXN0X3BwaV9kYXRh KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSAtRU5PTUVNOwo+PiArwqDCoMKgwqDCoMKgwqAg Z290byBmYWlsOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHBwaV9pcnFzID0ga2NhbGxv YyhudW1fcHBpLCBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7Cj4+ICvCoMKgwqAgaWYgKCFwcGlf aXJxcykgewo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVOT01FTTsKPj4gK8KgwqDCoMKgwqDC oMKgIGdvdG8gZmFpbDsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBp IDwgbnVtX3BwaTsgaSsrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBhZXN0X3BwaV9kYXRhW2ldID0g YWxsb2NfcGVyY3B1KHN0cnVjdCBhZXN0X25vZGUpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFh ZXN0X3BwaV9kYXRhW2ldKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByX2VycigiRmFp bGVkIHBlcmNwdSBhbGxvY2F0aW9uLlxuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dCA9IC1FTk9NRU07Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPj4gK8Kg wqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBhZXN0X25vZGUgPSBB Q1BJX0FERF9QVFIoc3RydWN0IGFjcGlfYWVzdF9oZHIsIGFlc3QsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSk7Cj4+ ICsKPj4gK8KgwqDCoCB3aGlsZSAoYWVzdF9ub2RlIDwgYWVzdF9lbmQpIHsKPj4gK8KgwqDCoMKg wqDCoMKgIHJldCA9IGFlc3RfaW5pdF9ub2RlKGFlc3Rfbm9kZSk7Cj4+ICvCoMKgwqDCoMKgwqDC oCBpZiAocmV0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByX2VycigiZmFpbGVkIHRv IGluaXQgbm9kZTogJWQiLCByZXQpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGZh aWw7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGFlc3Rfbm9k ZSA9IEFDUElfQUREX1BUUihzdHJ1Y3QgYWNwaV9hZXN0X2hkciwgYWVzdF9ub2RlLAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhZXN0X25vZGUtPmxlbmd0aCk7 Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICsKPj4gKwo+PiArwqDCoMKgIHJldHVybiBjcHVocF9zZXR1 cF9zdGF0ZShDUFVIUF9BUF9BUk1fQUVTVF9TVEFSVElORywKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICJkcml2ZXJzL2FjcGkvYXJtNjQvYWVzdDpzdGFydGluZyIsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBhZXN0X3N0YXJ0aW5nX2NwdSwgYWVzdF9keWluZ19jcHUpOwo+ IAo+IE5lZWQgZnJlZSB0aGUgcmVzb3VyY2VzIHlvdSByZXF1ZXN0ZWQgaWYgYW4gZXJyb3Igb2Nj dXJzLgo+IAo+PiArCj4+ICtmYWlsOgo+PiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBudW1fcHBp OyBpKyspCj4+ICvCoMKgwqDCoMKgwqDCoCBmcmVlX3BlcmNwdShhZXN0X3BwaV9kYXRhW2ldKTsK Pj4gK8KgwqDCoCBrZnJlZShhZXN0X3BwaV9kYXRhKTsKPj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+ PiArfQo+PiArc3Vic3lzX2luaXRjYWxsKGFjcGlfYWVzdF9pbml0KTsKPj4gZGlmZiAtLWdpdCBh L2luY2x1ZGUvbGludXgvYWNwaV9hZXN0LmggYi9pbmNsdWRlL2xpbnV4L2FjcGlfYWVzdC5oCj4+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uNjc5MTg3NTA1ZGM2 Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvaW5jbHVkZS9saW51eC9hY3BpX2Flc3QuaAo+PiBA QCAtMCwwICsxLDkyIEBACj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAq Lwo+PiArI2lmbmRlZiBBRVNUX0gKPj4gKyNkZWZpbmUgQUVTVF9ICj4+ICsKPj4gKyNpbmNsdWRl IDxhY3BpL2FjdGJsLmg+Cj4+ICsjaW5jbHVkZSA8YXNtL3Jhcy5oPgo+PiArCj4+ICsjZGVmaW5l IEFFU1RfSU5URVJSVVBUX01PREXCoMKgwqDCoMKgwqDCoCBCSVQoMCkKPj4gKwo+PiArI2RlZmlu ZSBBQ1BJX0FFU1RfUFJPQ19GTEFHX0dMT0JBTMKgwqDCoCAoMTw8MCkKPj4gKyNkZWZpbmUgQUNQ SV9BRVNUX1BST0NfRkxBR19TSEFSRUTCoMKgwqAgKDE8PDEpCj4+ICsKPj4gKyNkZWZpbmUgQUNQ SV9BRVNUX0lOVEVSRkFDRV9DTEVBUl9NSVNDwqDCoMKgICgxPDwwKQo+PiArCj4+ICsjZGVmaW5l IEVSWEZSwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDAKPj4gKyNkZWZpbmUgRVJYQ1RMUsKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgMHg4Cj4+ICsjZGVmaW5lIEVSWFNUQVRVU8KgwqDCoMKgwqDCoMKg IDB4MTAKPj4gKyNkZWZpbmUgRVJYQUREUsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgxOAo+PiAr I2RlZmluZSBFUlhNSVNDMMKgwqDCoMKgwqDCoMKgIDB4MjAKPj4gKyNkZWZpbmUgRVJYTUlTQzHC oMKgwqDCoMKgwqDCoCAweDI4Cj4+ICsjZGVmaW5lIEVSWE1JU0MywqDCoMKgwqDCoMKgwqAgMHgz MAo+PiArI2RlZmluZSBFUlhNSVNDM8KgwqDCoMKgwqDCoMKgIDB4MzgKPj4gKwo+PiArc3RydWN0 IGFlc3Rfbm9kZV9pbnRlcmZhY2Ugewo+PiArwqDCoMKgIHU4IHR5cGU7Cj4+ICvCoMKgwqAgdTY0 IHBoeV9hZGRyOwo+PiArwqDCoMKgIHUxNiByZWNvcmRfc3RhcnQ7Cj4+ICvCoMKgwqAgdTE2IHJl Y29yZF9lbmQ7Cj4+ICvCoMKgwqAgdTMyIGZsYWdzOwo+PiArwqDCoMKgIHVuc2lnbmVkIGxvbmcg cmVjb3JkX2ltcGxlbWVudGVkOwo+PiArwqDCoMKgIHVuc2lnbmVkIGxvbmcgc3RhdHVzX3JlcG9y dGluZzsKPj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nIGFkZHJlc3NpbmdfbW9kZTsKPj4gK8KgwqDC oCBzdHJ1Y3QgcmFzX2V4dF9yZWdzICpyZWdzOwo+PiArwqDCoMKgIHU2NCAqY2VfdGhyZXNob2xk Owo+PiArfTsKPj4gKwo+PiArdW5pb24gYWVzdF9ub2RlX3Byb2Nlc3NvciB7Cj4+ICvCoMKgwqAg c3RydWN0IGFjcGlfYWVzdF9wcm9jZXNzb3JfY2FjaGUgY2FjaGVfZGF0YTsKPj4gK8KgwqDCoCBz dHJ1Y3QgYWNwaV9hZXN0X3Byb2Nlc3Nvcl90bGIgdGxiX2RhdGE7Cj4+ICvCoMKgwqAgc3RydWN0 IGFjcGlfYWVzdF9wcm9jZXNzb3JfZ2VuZXJpYyBnZW5lcmljX2RhdGE7Cj4+ICt9Owo+PiArCj4+ ICt1bmlvbiBhZXN0X25vZGVfc3BlYyB7Cj4+ICvCoMKgwqAgc3RydWN0IGFjcGlfYWVzdF9wcm9j ZXNzb3IgcHJvY2Vzc29yOwo+PiArwqDCoMKgIHN0cnVjdCBhY3BpX2Flc3RfbWVtb3J5IG1lbW9y eTsKPj4gK8KgwqDCoCBzdHJ1Y3QgYWNwaV9hZXN0X3NtbXUgc21tdTsKPj4gK8KgwqDCoCBzdHJ1 Y3QgYWNwaV9hZXN0X3ZlbmRvciB2ZW5kb3I7Cj4+ICvCoMKgwqAgc3RydWN0IGFjcGlfYWVzdF9n aWMgZ2ljOwo+PiArfTsKPj4gKwo+PiArc3RydWN0IGFlc3RfYWNjZXNzIHsKPj4gK8KgwqDCoCB1 NjQgKCpyZWFkKSh1NjQgYmFzZSwgdTMyIG9mZnNldCk7Cj4+ICvCoMKgwqAgdm9pZCAoKndyaXRl KSh1NjQgYmFzZSwgdTMyIG9mZnNldCwgdTY0IHZhbCk7Cj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3Qg YWVzdF9ub2RlIHsKPj4gK8KgwqDCoCBjaGFyICpuYW1lOwo+PiArwqDCoMKgIHU4IHR5cGU7Cj4+ ICvCoMKgwqAgc3RydWN0IGFlc3Rfbm9kZV9pbnRlcmZhY2UgaW50ZXJmYWNlOwo+PiArwqDCoMKg IHVuaW9uIGFlc3Rfbm9kZV9zcGVjIHNwZWM7Cj4+ICvCoMKgwqAgdW5pb24gYWVzdF9ub2RlX3By b2Nlc3NvciBwcm9jOwo+PiArwqDCoMKgIHN0cnVjdCBhZXN0X2FjY2VzcyAqYWNjZXNzOwo+PiAr fTsKPj4gKwo+PiArc3RydWN0IGFlc3Rfbm9kZV9sbGlzdCB7Cj4+ICvCoMKgwqAgc3RydWN0IGxs aXN0X25vZGUgbGxub2RlOwo+PiArwqDCoMKgIGNoYXIgKm5vZGVfbmFtZTsKPj4gK8KgwqDCoCBp bnQgdHlwZTsKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBEaWZmZXJlbnQgbm9kZXMgaGF2 ZSBkaWZmZXJlbnQgbWVhbmluZ3M6Cj4+ICvCoMKgwqDCoCAqwqDCoCAtIFByb2Nlc3NvciBub2Rl wqDCoMKgIDogcHJvY2Vzc29yIG51bWJlci4KPj4gK8KgwqDCoMKgICrCoMKgIC0gTWVtb3J5IG5v ZGXCoMKgwqAgOiBTUkFUIHByb3hpbWl0eSBkb21haW4uCj4+ICvCoMKgwqDCoCAqwqDCoCAtIFNN TVUgbm9kZcKgwqDCoCA6IElPUlQgcHJveGltaXR5IGRvbWFpbi4KPj4gK8KgwqDCoMKgICrCoMKg IC0gVmVuZG9yIG5vZGXCoMKgwqAgOiBoYXJkd2FyZSBJRC4KPj4gK8KgwqDCoMKgICrCoMKgIC0g R0lDIG5vZGXCoMKgwqDCoMKgwqDCoCA6IGludGVyZmFjZSB0eXBlLgo+PiArwqDCoMKgwqAgKi8K Pj4gK8KgwqDCoCB1MzIgaWQwOwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIERpZmZlcmVu dCBub2RlcyBoYXZlIGRpZmZlcmVudCBtZWFuaW5nczoKPj4gK8KgwqDCoMKgICrCoMKgIC0gUHJv Y2Vzc29yIG5vZGXCoMKgwqAgOiBwcm9jZXNzb3IgcmVzb3VyY2UgdHlwZS4KPj4gK8KgwqDCoMKg ICrCoMKgIC0gTWVtb3J5IG5vZGXCoMKgwqAgOiBOb24uCj4+ICvCoMKgwqDCoCAqwqDCoCAtIFNN TVUgbm9kZcKgwqDCoCA6IHN1YmNvbXBvbmVudCByZWZlcmVuY2UuCj4+ICvCoMKgwqDCoCAqwqDC oCAtIFZlbmRvciBub2RlwqDCoMKgIDogVW5pcXVlIElELgo+PiArwqDCoMKgwqAgKsKgwqAgLSBH SUMgbm9kZcKgwqDCoMKgwqDCoMKgIDogaW5zdGFuY2UgaWRlbnRpZmllci4KPj4gK8KgwqDCoMKg ICovCj4+ICvCoMKgwqAgdTMyIGlkMTsKPj4gK8KgwqDCoCBpbnQgaW5kZXg7Cj4+ICvCoMKgwqAg dW5zaWduZWQgbG9uZyBhZGRyZXNzaW5nX21vZGU7Cj4+ICvCoMKgwqAgc3RydWN0IHJhc19leHRf cmVncyAqcmVnczsKPj4gK307Cj4gCj4gVGhlc2UgYXJlIG9ubHkgYWVzdC1yZWxhdGVkIHN0cnVj dHVyZXM/IElmIHNvLCBJIHRoaW5rIHRoZXkgc2hvdWxkIGJlIGluIAo+IGFlc3QuYyBmaWxlLgo+ IAo+PiArCj4+ICsjZW5kaWYgLyogQUVTVF9IICovCj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xp bnV4L2NwdWhvdHBsdWcuaCBiL2luY2x1ZGUvbGludXgvY3B1aG90cGx1Zy5oCj4+IGluZGV4IDYy NGQ0YTM4YzM1OC4uZjBkZGEwOGRiYWQyIDEwMDY0NAo+PiAtLS0gYS9pbmNsdWRlL2xpbnV4L2Nw dWhvdHBsdWcuaAo+PiArKysgYi9pbmNsdWRlL2xpbnV4L2NwdWhvdHBsdWcuaAo+PiBAQCAtMTg2 LDYgKzE4Niw3IEBAIGVudW0gY3B1aHBfc3RhdGUgewo+PiDCoMKgwqDCoMKgIENQVUhQX0FQX0NT S1lfVElNRVJfU1RBUlRJTkcsCj4+IMKgwqDCoMKgwqAgQ1BVSFBfQVBfVElfR1BfVElNRVJfU1RB UlRJTkcsCj4+IMKgwqDCoMKgwqAgQ1BVSFBfQVBfSFlQRVJWX1RJTUVSX1NUQVJUSU5HLAo+PiAr wqDCoMKgIENQVUhQX0FQX0FSTV9BRVNUX1NUQVJUSU5HLAo+PiDCoMKgwqDCoMKgIC8qIE11c3Qg YmUgdGhlIGxhc3QgdGltZXIgY2FsbGJhY2sgKi8KPj4gwqDCoMKgwqDCoCBDUFVIUF9BUF9EVU1N WV9USU1FUl9TVEFSVElORywKPj4gwqDCoMKgwqDCoCBDUFVIUF9BUF9BUk1fWEVOX1NUQVJUSU5H LAoKQWxsIGFjY2VwdCwgdGhhbmtzIGZvciByZXZpZXdpbmcuCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlz dApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==