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 E2192C5475B for ; Fri, 8 Mar 2024 04:50:01 +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=hwABtXgyap3XKcpXEQI5NMgIT1gvBWRc5qonZOOPYRs=; b=M9Ai+pKYcBTArp AjWp9ktj8+xwsPUIQuPKH7SM3ExIR2TQQhs9Tp0xt5XlhAsdPmRUyne579CqJjgopib9zbEn7JuUL ub8HZPl0rzGNK3Ms8Er6nXhnmt6bMApgs/f8KDu3h8s19jSMedXNLHl97gY9Uz2x1QBnIc2fbPGfG yUIxoRwuep49LQG/F3vxtQqsbujtqrlvn+CFCxxLUszvchf+0wZKpFgMGiWhos2E2LNPTKxAewsOD sys/cbZ4LjuHas5dPmOXHCT9NMc8QPaoG/pj+/owsEt2rKBVs9cUDoqCZNBuM8SCDR+Tm4SBra7dn JXvJVXjiPa1fjitwbkpA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1riSB2-00000007ldw-3dqG; Fri, 08 Mar 2024 04:49:48 +0000 Received: from out30-112.freemail.mail.aliyun.com ([115.124.30.112]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1riSAy-00000007lb2-0OLt for linux-arm-kernel@lists.infradead.org; Fri, 08 Mar 2024 04:49:46 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1709873380; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; bh=cTn5awRb+yOa5Pwccwuxc60eJ89VlixI2n5TbpC45PI=; b=LbPeWHPLk1oAyxxTSMypWV7ut7NtwVhVjY7QkoxP4MH7EH9hB4TVUMZ3NiNXKZ2xRPIkC+W00ItuMN/ukUS+2Dbr3nHi5Pd36QXxYzJqXrE2jLHlks2f9MNDOhXBWyT36roiZ2AJoDR+Ml9tBv5+hFOWz7jp2/TJaEErjikHpRw= X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R801e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018045170;MF=tianruidong@linux.alibaba.com;NM=1;PH=DS;RN=12;SR=0;TI=SMTPD_---0W21SW6f_1709873377; Received: from 30.221.132.183(mailfrom:tianruidong@linux.alibaba.com fp:SMTPD_---0W21SW6f_1709873377) by smtp.aliyun-inc.com; Fri, 08 Mar 2024 12:49:38 +0800 Message-ID: <7b804a97-3fa7-42af-8d15-30c99febc200@linux.alibaba.com> Date: Fri, 8 Mar 2024 12:49:35 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 1/2] ACPI/AEST: Initial AEST driver Content-Language: en-US To: Marc Zyngier Cc: catalin.marinas@arm.com, will@kernel.org, lpieralisi@kernel.org, guohanjun@huawei.com, sudeep.holla@arm.com, xueshuai@linux.alibaba.com, baolin.wang@linux.alibaba.com, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Tyler Baicar References: <20240304111517.33001-1-tianruidong@linux.alibaba.com> <20240304111517.33001-2-tianruidong@linux.alibaba.com> <86wmqi19pg.wl-maz@kernel.org> From: Ruidong Tian In-Reply-To: <86wmqi19pg.wl-maz@kernel.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240307_204944_699089_F9151302 X-CRM114-Status: GOOD ( 34.18 ) 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 CgrlnKggMjAyNC8zLzQgMjA6MDcsIE1hcmMgWnluZ2llciDlhpnpgZM6Cj4gT24gTW9uLCAwNCBN YXIgMjAyNCAxMToxNToxNiArMDAwMCwKPiBSdWlkb25nIFRpYW4gPHRpYW5ydWlkb25nQGxpbnV4 LmFsaWJhYmEuY29tPiB3cm90ZToKPj4KPj4gRnJvbTogVHlsZXIgQmFpY2FyIDxiYWljYXJAb3Mu YW1wZXJlY29tcHV0aW5nLmNvbT4KPj4KPj4gQWRkIHN1cHBvcnQgZm9yIHBhcnNpbmcgdGhlIEFS TSBFcnJvciBTb3VyY2UgVGFibGUgYW5kIGJhc2ljIGhhbmRsaW5nIG9mCj4+IGVycm9ycyByZXBv cnRlZCB0aHJvdWdoIGJvdGggbWVtb3J5IG1hcHBlZCBhbmQgc3lzdGVtIHJlZ2lzdGVyIGludGVy ZmFjZXMuCj4+Cj4+IEFzc3VtZSBzeXN0ZW0gcmVnaXN0ZXIgaW50ZXJmYWNlcyBhcmUgb25seSBy ZWdpc3RlcmVkIHdpdGggcHJpdmF0ZQo+PiBwZXJpcGhlcmFsIGludGVycnVwdHMgKFBQSXMpOyBv dGhlcndpc2UgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoZQo+PiBjb3JlIGhhbmRsaW5nIHRoZSBl cnJvciBpcyB0aGUgY29yZSB3aGljaCB0b29rIHRoZSBlcnJvciBhbmQgaGFzIHRoZQo+PiBzeW5k cm9tZSBpbmZvIGluIGl0cyBzeXN0ZW0gcmVnaXN0ZXJzLgo+Pgo+PiBBbGwgZGV0ZWN0ZWQgZXJy b3JzIHdpbGwgYmUgY29sbGVjdGVkIHRvIGEgd29ya3F1ZXVlIGluIGlycSBjb250ZXh0IGFuZAo+ PiBwcmludCBlcnJvciBpbmZvcm1hdGlvbiBsYXRlci4KPj4KPj4gU2lnbmVkLW9mZi1ieTogVHls ZXIgQmFpY2FyIDxiYWljYXJAb3MuYW1wZXJlY29tcHV0aW5nLmNvbT4KPj4gU2lnbmVkLW9mZi1i eTogUnVpZG9uZyBUaWFuIDx0aWFucnVpZG9uZ0BsaW51eC5hbGliYWJhLmNvbT4KPj4gLS0tCj4+ ICAgTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICB8ICAxMSArCj4+ICAgYXJjaC9hcm02NC9p bmNsdWRlL2FzbS9yYXMuaCB8ICAzOCArKwo+PiAgIGRyaXZlcnMvYWNwaS9hcm02NC9LY29uZmln ICAgfCAgMTAgKwo+PiAgIGRyaXZlcnMvYWNwaS9hcm02NC9NYWtlZmlsZSAgfCAgIDEgKwo+PiAg IGRyaXZlcnMvYWNwaS9hcm02NC9hZXN0LmMgICAgfCA3MjMgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKPj4gICBpbmNsdWRlL2xpbnV4L2FjcGlfYWVzdC5oICAgIHwgIDkxICsr KysrCj4+ICAgaW5jbHVkZS9saW51eC9jcHVob3RwbHVnLmggICB8ICAgMSArCj4+ICAgNyBmaWxl cyBjaGFuZ2VkLCA4NzUgaW5zZXJ0aW9ucygrKQo+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNo L2FybTY0L2luY2x1ZGUvYXNtL3Jhcy5oCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv YWNwaS9hcm02NC9hZXN0LmMKPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9h Y3BpX2Flc3QuaAo+Pgo+PiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwo+ PiBpbmRleCAyYTdhOTBlZWVjNDkuLjVkZjg0NTc2M2E5YyAxMDA2NDQKPj4gLS0tIGEvTUFJTlRB SU5FUlMKPj4gKysrIGIvTUFJTlRBSU5FUlMKPj4gQEAgLTMyOSw2ICszMjksMTcgQEAgTDoJbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJz Y3JpYmVycykKPj4gICBTOglNYWludGFpbmVkCj4+ICAgRjoJZHJpdmVycy9hY3BpL2FybTY0Cj4+ ICAgCj4+ICtBQ1BJIEFFU1QKPj4gK006CVR5bGVyIEJhaWNhciA8YmFpY2FyQG9zLmFtcGVyZWNv bXB1dGluZy5jb20+Cj4+ICtNOglSdWlkb25nIFRpYW4gPHRpYW5ydWlkb25kQGxpbnV4LmFsaWJh YmEuY29tPgo+PiArTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKPj4gK0w6CWxpbnV4LWFy bS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwo+PiArUzoJU3VwcG9ydGVkCj4+ICtGOglhcmNo L2FybTY0L2luY2x1ZGUvYXNtL3Jhcy5oCj4+ICtGOglkcml2ZXJzL2FjcGkvYXJtNjQvYWVzdC5j Cj4+ICtGOglpbmNsdWRlL2xpbnV4L2FjcGlfYWVzdC5oCj4+ICsKPj4gKwo+PiAgIEFDUEkgRk9S IFJJU0MtViAoQUNQSS9yaXNjdikKPj4gICBNOglTdW5pbCBWIEwgPHN1bmlsdmxAdmVudGFuYW1p Y3JvLmNvbT4KPj4gICBMOglsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZwo+PiBkaWZmIC0tZ2l0 IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9yYXMuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20v cmFzLmgKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAwLi4yZmIw ZDk3NDE1NjcKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNt L3Jhcy5oCj4+IEBAIC0wLDAgKzEsMzggQEAKPj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wICovCj4+ICsjaWZuZGVmIF9fQVNNX1JBU19ICj4+ICsjZGVmaW5lIF9fQVNNX1JB U19ICj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4 L2JpdHMuaD4KPj4gKwo+PiArI2RlZmluZSBFUlJfU1RBVFVTX0FWCQlCSVQoMzEpCj4+ICsjZGVm aW5lIEVSUl9TVEFUVVNfVgkJQklUKDMwKQo+PiArI2RlZmluZSBFUlJfU1RBVFVTX1VFCQlCSVQo MjkpCj4+ICsjZGVmaW5lIEVSUl9TVEFUVVNfRVIJCUJJVCgyOCkKPj4gKyNkZWZpbmUgRVJSX1NU QVRVU19PRgkJQklUKDI3KQo+PiArI2RlZmluZSBFUlJfU1RBVFVTX01WCQlCSVQoMjYpCj4+ICsj ZGVmaW5lIEVSUl9TVEFUVVNfQ0UJCShCSVQoMjUpIHwgQklUKDI0KSkKPj4gKyNkZWZpbmUgRVJS X1NUQVRVU19ERQkJQklUKDIzKQo+PiArI2RlZmluZSBFUlJfU1RBVFVTX1BOCQlCSVQoMjIpCj4+ ICsjZGVmaW5lIEVSUl9TVEFUVVNfVUVUCQkoQklUKDIxKSB8IEJJVCgyMCkpCj4+ICsjZGVmaW5l IEVSUl9TVEFUVVNfQ0kJCUJJVCgxOSkKPj4gKyNkZWZpbmUgRVJSX1NUQVRVU19JRVJSIAlHRU5N QVNLX1VMTCgxNSwgOCkKPj4gKyNkZWZpbmUgRVJSX1NUQVRVU19TRVJSIAlHRU5NQVNLX1VMTCg3 LCAwKQo+IAo+IEFsbCB0aGVzZSBiaXRzIG5lZWQgdG8gYmUgZGVmaW5lZCBpbiBhcmNoL2FybTY0 L3Rvb2xzL3N5c3JlZyBhcwo+IEVSWFNUQVRVU19FTDEgZmllbGRzLgoKVGhpcyBmaWxlIG9ubHkg ZGVzY3JpYmVzIHRoZSBzeXN0ZW0gcmVnaXN0ZXIsIGJ1dCBSQVMgTU1JTyByZWdpc3RlcnMKdXNl IHRoZXNlIGJpdHMgdG9vLiBXb3VsZCBpdCBiZSBhcHByb3ByaWF0ZSB0byBkZWZpbmUgdGhlbSBp bgphcmNoL2FybTY0L3Rvb2xzL3N5c3JlZz8KCj4gCj4+ICsKPj4gKy8qIFRoZXNlIGJpdCBpcyB3 cml0ZS1vbmUtdG8tY2xlYXIgKi8KPj4gKyNkZWZpbmUgRVJSX1NUQVRVU19XMVRDIAkoRVJSX1NU QVRVU19BViB8IEVSUl9TVEFUVVNfViB8IEVSUl9TVEFUVVNfVUUgfCBcCj4+ICsJCQkJRVJSX1NU QVRVU19FUiB8IEVSUl9TVEFUVVNfT0YgfCBFUlJfU1RBVFVTX01WIHwgXAo+PiArCQkJCUVSUl9T VEFUVVNfQ0UgfCBFUlJfU1RBVFVTX0RFIHwgRVJSX1NUQVRVU19QTiB8IFwKPj4gKwkJCQlFUlJf U1RBVFVTX1VFVCB8IEVSUl9TVEFUVVNfQ0kpCj4+ICsKPj4gKyNkZWZpbmUgUkFTX1JFVl92MV8x CQkweDEKPiAKPiBXaGF0IGlzIHRoaXM/IFdlIGFscmVhZHkgaGF2ZSBJRF9BQTY0UEZSMV9FTDEu UkFTX2ZyYWMuCgpJIHdpbGwgZGVsZXRlIGl0IGluIHYyLgoKPiAKPj4gKwo+PiArc3RydWN0IHJh c19leHRfcmVncyB7Cj4+ICsJdTY0IGVycl9mcjsKPj4gKwl1NjQgZXJyX2N0bHI7Cj4+ICsJdTY0 IGVycl9zdGF0dXM7Cj4+ICsJdTY0IGVycl9hZGRyOwo+PiArCXU2NCBlcnJfbWlzY1s0XTsKPj4g K307Cj4+ICsKPj4gKyNlbmRpZgkvKiBfX0FTTV9SQVNfSCAqLwo+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9hY3BpL2FybTY0L0tjb25maWcgYi9kcml2ZXJzL2FjcGkvYXJtNjQvS2NvbmZpZwo+PiBp bmRleCBiM2VkNjIxMjI0NGMuLjYzOWRiNjcxYzVjZiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9h Y3BpL2FybTY0L0tjb25maWcKPj4gKysrIGIvZHJpdmVycy9hY3BpL2FybTY0L0tjb25maWcKPj4g QEAgLTIxLDMgKzIxLDEzIEBAIGNvbmZpZyBBQ1BJX0FHREkKPj4gICAKPj4gICBjb25maWcgQUNQ SV9BUE1UCj4+ICAgCWJvb2wKPj4gKwo+PiArY29uZmlnIEFDUElfQUVTVAo+PiArCWJvb2wgIkFS TSBFcnJvciBTb3VyY2UgVGFibGUgU3VwcG9ydCIKPj4gKwo+PiArCWhlbHAKPj4gKwkgIFRoZSBB cm0gRXJyb3IgU291cmNlIFRhYmxlIChBRVNUKSBwcm92aWRlcyBkZXRhaWxzIG9uIEFDUEkKPj4g KwkgIGV4dGVuc2lvbnMgdGhhdCBlbmFibGUga2VybmVsLWZpcnN0IGhhbmRsaW5nIG9mIGVycm9y cyBpbiBhCj4+ICsJICBzeXN0ZW0gdGhhdCBzdXBwb3J0cyB0aGUgQXJtdjggUkFTIGV4dGVuc2lv bnMuCj4+ICsKPj4gKwkgIElmIHNldCwgdGhlIGtlcm5lbCB3aWxsIHJlcG9ydCBhbmQgbG9nIGhh cmR3YXJlIGVycm9ycy4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hcm02NC9NYWtlZmls ZSBiL2RyaXZlcnMvYWNwaS9hcm02NC9NYWtlZmlsZQo+PiBpbmRleCA3MjY5NDQ2NDhjOWIuLjVl YTgyYjE5NmI5MCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9hY3BpL2FybTY0L01ha2VmaWxlCj4+ ICsrKyBiL2RyaXZlcnMvYWNwaS9hcm02NC9NYWtlZmlsZQo+PiBAQCAtNiwzICs2LDQgQEAgb2Jq LSQoQ09ORklHX0FDUElfQVBNVCkgCSs9IGFwbXQubwo+PiAgIG9iai0kKENPTkZJR19BUk1fQU1C QSkJCSs9IGFtYmEubwo+PiAgIG9iai15CQkJCSs9IGRtYS5vIGluaXQubwo+PiAgIG9iai15CQkJ CSs9IHRoZXJtYWxfY3B1ZnJlcS5vCj4+ICtvYmotJChDT05GSUdfQUNQSV9BRVNUKSAJKz0gYWVz dC5vCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYXJtNjQvYWVzdC5jIGIvZHJpdmVycy9h Y3BpL2FybTY0L2Flc3QuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAw MDAwMDAuLmJlMDg4MzMxNjQ0OQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvYWNw aS9hcm02NC9hZXN0LmMKPj4gQEAgLTAsMCArMSw3MjMgQEAKPj4gKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCj4+ICsvKgo+PiArICogQVJNIEVycm9yIFNvdXJjZSBUYWJsZSBT dXBwb3J0Cj4+ICsgKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDIxLCBBbXBlcmUgQ29tcHV0aW5n IExMQwo+PiArICogQ29weXJpZ2h0IChjKSAyMDIxLTIwMjQsIEFsaWJhYmEgR3JvdXAuCj4+ICsg Ki8KPj4gKwo+PiArI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9h Y3BpX2Flc3QuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9jcHVob3RwbHVnLmg+Cj4+ICsjaW5jbHVk ZSA8bGludXgva2VybmVsLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZ2VuYWxsb2MuaD4KPj4gKyNp bmNsdWRlIDxsaW51eC9sbGlzdC5oPgo+PiArI2luY2x1ZGUgPGFjcGkvYWN0YmwuaD4KPj4gKyNp bmNsdWRlIDxhc20vcmFzLmg+Cj4+ICsKPj4gKyN1bmRlZiBwcl9mbXQKPj4gKyNkZWZpbmUgcHJf Zm10KGZtdCkgIkFDUEkgQUVTVDogIiBmbXQKPj4gKwo+PiArI2RlZmluZSBDQVNFX1JFQURfQ0xF QVIoeCwgY2xlYXIpCQkJCQlcCj4+ICsJY2FzZSAoeCk6IHsJCQkJCQkJXAo+PiArCQlyZXMgPSBy ZWFkX3N5c3JlZ19zKFNZU18jI3gjI19FTDEpOwkJCVwKPj4gKwkJaWYgKGNsZWFyKQkJCQkJCVwK Pj4gKwkJCXdyaXRlX3N5c3JlZ19zKDAsIFNZU18jI3gjI19FTDEpOwkJXAo+PiArCQlicmVhazsJ CQkJCQkJXAo+PiArCX0KPiAKPiBQbGVhc2UgZG9uJ3QgdXNlIG1hY3JvcyB3aXRoIHNpZGUgZWZm ZWN0cy4gVGhpcyBpcyBob3JyaWJsZSB0byBkZWJ1Zy4KPiBJbnN0ZWFkLCAqcmV0dXJuKiB0aGUg dmFsdWUgZnJvbSB0aGUgbWFjcm8sIG9yIHBhc3MgdGhlIHZhcmlhYmxlIHlvdQo+IHdhbnQgdG8g YWZmZWN0IGFzIGEgcGFyYW1ldGVyLgoKT0ssIEkgd2lsbCBwYXNzICoqcmVzKiogYXMgYSBwYXJh bWV0ZXIgbGlrZSB0aGlzOgoKICAgI2RlZmluZSBDQVNFX1JFQURfQ0xFQVIocmVzLCB4LCBjbGVh cikgICAgICAgIFwKICAgICAgIGNhc2UgKHgpOiB7ICAgICAgICAgICAgICAgICAgICAgICAgCVwK ICAgICAgICAgICByZXMgPSByZWFkX3N5c3JlZ19zKFNZU18jI3gjI19FTDEpOyAgIFwKICAgICAg ICAgICBpZiAoY2xlYXIpICAgICAgICAgICAgICAgICAgICAgICAJXAogICAgICAgICAgICAgICB3 cml0ZV9zeXNyZWdfcygwLCBTWVNfIyN4IyNfRUwxKTsgXAogICAgICAgICAgIGJyZWFrOyAgICAg ICAgICAgICAgICAgICAgCQlcCiAgICAgICB9Cgo+IAo+IEFsc28sIHdoYXQgZW5zdXJlcyB0aGUg c3luY2hyb25pc2F0aW9uIG9mIHRoaXMgd3JpdGU/IEhvdyBpcyB0aGUgVzFUQwo+IGFzcGVjdCBl bmZvcmNlZD8KCmFlc3RfcHJvYyBpcyBqdXN0IGNhbGwgaW4gaXJxIGNvbnRleHQsIG9uZSByYXMg ZXJyb3IgaXMganVzdCByb3V0ZWQgdG8Kb25lIGNvcmUsIHNvIGl0IGlzIHRocmVhZCBzYWZlLiBB bmQgdGhpcyBpcyBhIFdyaXRlLUFmdGVyLVJlYWQgKFdBUikKSGF6YXJkcyB3aXRoIGRlcGVuZGVu Y2XvvIxjYW4gaSBhc3N1bWUgdGhhdCBwaXBlbGluZSB3b3VsZCBndWFyYW50ZWUKdGhlIG9yZGVy IG9mIHdyaXRpbmcgYW5kIHJlYWRpbmc/Cgo+IAo+PiArCj4+ICsjZGVmaW5lIENBU0VfV1JJVEUo dmFsLCB4KQkJCQkJCVwKPj4gKwljYXNlICh4KTogewkJCQkJCQlcCj4+ICsJCXdyaXRlX3N5c3Jl Z19zKCh2YWwpLCBTWVNfIyN4IyNfRUwxKTsJCQlcCj4+ICsJCWJyZWFrOwkJCQkJCQlcCj4+ICsJ fQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICphZXN0X3RhYmxlOwo+ PiArCj4+ICtzdGF0aWMgc3RydWN0IGFlc3Rfbm9kZSBfX3BlcmNwdSAqKnBwaV9kYXRhOwo+PiAr Cj4+ICtzdGF0aWMgaW50ICpwcGlfaXJxczsKPj4gK3N0YXRpYyB1OCBudW1fcHBpOwo+PiArc3Rh dGljIHU4IHBwaV9pZHg7Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgYWVzdF93 b3JrOwo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGdlbl9wb29sICphZXN0X25vZGVfcG9vbDsKPj4g K3N0YXRpYyBzdHJ1Y3QgbGxpc3RfaGVhZCBhZXN0X25vZGVfbGxpc3Q7Cj4+ICsKPj4gKy8qCj4+ ICsgKiBUaGlzIG1lbW9yeSBwb29sIGlzIG9ubHkgdG8gYmUgdXNlZCB0byBzYXZlIEFFU1Qgbm9k ZSBpbiBBRVNUIGlycSBjb250ZXh0Lgo+PiArICogVXNlIDggcGFnZXMgdG8gc2F2ZSBBRVNUIG5v ZGUgZm9yIG5vdyAofjUwMCBBRVNUIG5vZGUgYXQgbW9zdCkuCj4+ICsgKi8KPj4gKyNkZWZpbmUg QUVTVF9OT0RFX1BPT0xTWgkoOCAqIFBBR0VfU0laRSkKPiAKPiBUaGlzIGRvZXNuJ3QgbWFrZSBz ZW5zZS4gUEFHRV9TSVpFIGlzIGEgdmFyaWFibGUgY29uY2VwdCAocmFuZ2luZyBmcm9tCj4gNCB0 byA2NGtCKS4gV2hhdCBpcyB0aGlzICJ+NTAwIiBudW1iZXIgY29taW5nIGZyb20/IElmIHlvdSB3 YW50IHRvCj4gc3RvcmUgYSBnaXZlbiBudW1iZXIgb2YgcmVjb3JkcywgYWxsb2NhdGUgdGhlIHNp emUgeW91IGFjdHVhbGx5IHdhbnQuCgpVc2UgQUVTVF9OT0RFX01BWF9OVU0gYXMgdGhlIG1heCBu dW1iZXIgQUVTVCBub2RlcyBjYW4gYmUgYWxsb2NhdGVkIGluCmdlbnBvb2wgaW5zdGVhZCBvZiBB RVNUX05PREVfUE9PTFNaIGluIHYyLgoKPiAKPj4gKwo+PiArc3RhdGljIHU2NCBhZXN0X3N5c3Jl Z19yZWFkX2NsZWFyKHU2NCBiYXNlLCB1MzIgb2Zmc2V0LCBib29sIGNsZWFyKQo+PiArewo+PiAr CXU2NCByZXM7Cj4+ICsKPj4gKwlzd2l0Y2ggKG9mZnNldCkgewo+PiArCUNBU0VfUkVBRF9DTEVB UihFUlhGUiwgY2xlYXIpCj4+ICsJQ0FTRV9SRUFEX0NMRUFSKEVSWENUTFIsIGNsZWFyKQo+PiAr CUNBU0VfUkVBRF9DTEVBUihFUlhTVEFUVVMsIGNsZWFyKQo+PiArCUNBU0VfUkVBRF9DTEVBUihF UlhBRERSLCBjbGVhcikKPj4gKwlDQVNFX1JFQURfQ0xFQVIoRVJYTUlTQzAsIGNsZWFyKQo+PiAr CUNBU0VfUkVBRF9DTEVBUihFUlhNSVNDMSwgY2xlYXIpCj4+ICsJQ0FTRV9SRUFEX0NMRUFSKEVS WE1JU0MyLCBjbGVhcikKPj4gKwlDQVNFX1JFQURfQ0xFQVIoRVJYTUlTQzMsIGNsZWFyKQo+PiAr CWRlZmF1bHQgOgo+PiArCQlyZXMgPSAwOwo+PiArCX0KPj4gKwlyZXR1cm4gcmVzOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgdm9pZCBhZXN0X3N5c3JlZ193cml0ZSh1NjQgYmFzZSwgdTMyIG9mZnNl dCwgdTY0IHZhbCkKPj4gK3sKPj4gKwlzd2l0Y2ggKG9mZnNldCkgewo+PiArCUNBU0VfV1JJVEUo dmFsLCBFUlhGUikKPj4gKwlDQVNFX1dSSVRFKHZhbCwgRVJYQ1RMUikKPj4gKwlDQVNFX1dSSVRF KHZhbCwgRVJYU1RBVFVTKQo+PiArCUNBU0VfV1JJVEUodmFsLCBFUlhBRERSKQo+PiArCUNBU0Vf V1JJVEUodmFsLCBFUlhNSVNDMCkKPj4gKwlDQVNFX1dSSVRFKHZhbCwgRVJYTUlTQzEpCj4+ICsJ Q0FTRV9XUklURSh2YWwsIEVSWE1JU0MyKQo+PiArCUNBU0VfV1JJVEUodmFsLCBFUlhNSVNDMykK Pj4gKwlkZWZhdWx0IDoKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gK30KPj4gKwo+PiArc3RhdGlj IHU2NCBhZXN0X2lvbWVtX3JlYWRfY2xlYXIodTY0IGJhc2UsIHUzMiBvZmZzZXQsIGJvb2wgY2xl YXIpCj4+ICt7Cj4+ICsJdTY0IHJlczsKPj4gKwo+PiArCXJlcyA9IHJlYWRxKCh2b2lkICopKGJh c2UgKyBvZmZzZXQpKTsKPj4gKwlpZiAoY2xlYXIpCj4+ICsJCXdyaXRlcSgwLCAodm9pZCAqKShi YXNlICsgb2Zmc2V0KSk7Cj4gCj4gRG8geW91IG5lZWQgdGhlIGV4cGxpY2l0IHN5bmNocm9uaXNh dGlvbj8gV2hhdCBvcmRlcmluZyBhcmUgeW91IHRyeWluZwo+IHRvIGd1YXJhbnRlZT8KClRoaXMg cmVhZCBhbmQgd3JpdGUgdXNlIHRoZSBzYW1lIGFkZHJlc3MsIHBpcGVsaW5lIHdvdWxkIGd1YXJh bnRlZQp0aGUgb3JkZXIgb2Ygd3JpdGluZyBhbmQgcmVhZGluZy4KCj4gCj4+ICsJcmV0dXJuIHJl czsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgYWVzdF9pb21lbV93cml0ZSh1NjQgYmFzZSwg dTMyIG9mZnNldCwgdTY0IHZhbCkKPj4gK3sKPj4gKwl3cml0ZXEodmFsLCAodm9pZCAqKShiYXNl ICsgb2Zmc2V0KSk7Cj4gCj4gU2FtZSBxdWVzdGlvbi4KClRoaXMgZnVuY3Rpb24ganVzdCBwcml2 aWRlcyBhZXN0IGFjY2VzcyBtZXRob2QsIGNhbGxlciBuZWVkIGV4cGxpY3QgCnN5bmNocm9uaXNh dGlvbiBpZiBuZWVkZWQuCgo+IAo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBhZXN0X3ByaW50 KHN0cnVjdCBhZXN0X25vZGVfbGxpc3QgKmxub2RlKQo+PiArewo+PiArCXN0YXRpYyBhdG9taWNf dCBzZXFubzsKPiAKPiBVbmluaXRpYWxpc2VkIGF0b21pYz8KCkZpeCBpdCBuZXh0IHZlcnNpb24u Cgo+IAo+PiArCXVuc2lnbmVkIGludCBjdXJyX3NlcW5vOwo+PiArCWNoYXIgcGZ4X3NlcVs2NF07 Cj4gCj4gTWFnaWMgbnVtYmVyPwoKRml4IGl0IG5leHQgdmVyc2lvbi4KCj4gCj4+ICsJaW50IGlu ZGV4Owo+PiArCXN0cnVjdCByYXNfZXh0X3JlZ3MgKnJlZ3M7Cj4+ICsKPj4gKwljdXJyX3NlcW5v ID0gYXRvbWljX2luY19yZXR1cm4oJnNlcW5vKTsKPj4gKwlzbnByaW50ZihwZnhfc2VxLCBzaXpl b2YocGZ4X3NlcSksICJ7JXV9IiBIV19FUlIsIGN1cnJfc2Vxbm8pOwo+PiArCXByX2luZm8oIiVz SGFyZHdhcmUgZXJyb3IgZnJvbSAlc1xuIiwgcGZ4X3NlcSwgbG5vZGUtPm5vZGVfbmFtZSk7Cj4+ ICsKPj4gKwlzd2l0Y2ggKGxub2RlLT50eXBlKSB7Cj4+ICsJY2FzZSBBQ1BJX0FFU1RfUFJPQ0VT U09SX0VSUk9SX05PREU6Cj4+ICsJCXByX2VycigiJXMgRXJyb3IgZnJvbSBDUFUlZFxuIiwgcGZ4 X3NlcSwgbG5vZGUtPmlkMCk7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgQUNQSV9BRVNUX01FTU9S WV9FUlJPUl9OT0RFOgo+PiArCQlwcl9lcnIoIiVzIEVycm9yIGZyb20gbWVtb3J5IGF0IFNSQVQg cHJveGltaXR5IGRvbWFpbiAweCV4XG4iLAo+PiArCQkJcGZ4X3NlcSwgbG5vZGUtPmlkMCk7Cj4+ ICsJCWJyZWFrOwo+PiArCWNhc2UgQUNQSV9BRVNUX1NNTVVfRVJST1JfTk9ERToKPj4gKwkJcHJf ZXJyKCIlcyBFcnJvciBmcm9tIFNNTVUgSU9SVCBub2RlIDB4JXggc3ViY29tcG9uZW50IDB4JXhc biIsCj4+ICsJCQlwZnhfc2VxLCBsbm9kZS0+aWQwLCBsbm9kZS0+aWQxKTsKPj4gKwkJYnJlYWs7 Cj4+ICsJY2FzZSBBQ1BJX0FFU1RfVkVORE9SX0VSUk9SX05PREU6Cj4+ICsJCXByX2VycigiJXMg RXJyb3IgZnJvbSB2ZW5kb3IgaGlkIDB4JXggdWlkIDB4JXhcbiIsCj4+ICsJCQlwZnhfc2VxLCBs bm9kZS0+aWQwLCBsbm9kZS0+aWQxKTsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBBQ1BJX0FFU1Rf R0lDX0VSUk9SX05PREU6Cj4+ICsJCXByX2VycigiJXMgRXJyb3IgZnJvbSBHSUMgdHlwZSAweCV4 IGluc3RhbmNlIDB4JXhcbiIsCj4+ICsJCQlwZnhfc2VxLCBsbm9kZS0+aWQwLCBsbm9kZS0+aWQx KTsKPj4gKwkJYnJlYWs7Cj4+ICsJZGVmYXVsdDoKPj4gKwkJcHJfZXJyKCIlcyBVbmtub3duIEFF U1Qgbm9kZSB0eXBlXG4iLCBwZnhfc2VxKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiAr CWluZGV4ID0gbG5vZGUtPmluZGV4Owo+PiArCXJlZ3MgPSAmbG5vZGUtPnJlZ3M7Cj4+ICsKPj4g Kwlwcl9lcnIoIiVzICBFUlIldUZSOiAweCVsbHhcbiIsIHBmeF9zZXEsIGluZGV4LCByZWdzLT5l cnJfZnIpOwo+PiArCXByX2VycigiJXMgIEVSUiV1Q1RSTDogMHglbGx4XG4iLCBwZnhfc2VxLCBp bmRleCwgcmVncy0+ZXJyX2N0bHIpOwo+PiArCXByX2VycigiJXMgIEVSUiV1U1RBVFVTOiAweCVs bHhcbiIsIHBmeF9zZXEsIGluZGV4LCByZWdzLT5lcnJfc3RhdHVzKTsKPj4gKwlpZiAocmVncy0+ ZXJyX3N0YXR1cyAmIEVSUl9TVEFUVVNfQVYpCj4+ICsJCXByX2VycigiJXMgIEVSUiV1QUREUjog MHglbGx4XG4iLCBwZnhfc2VxLCBpbmRleCwgcmVncy0+ZXJyX2FkZHIpOwo+PiArCj4+ICsJaWYg KHJlZ3MtPmVycl9zdGF0dXMgJiBFUlJfU1RBVFVTX01WKSB7Cj4+ICsJCXByX2VycigiJXMgIEVS UiV1TUlTQzA6IDB4JWxseFxuIiwgcGZ4X3NlcSwgaW5kZXgsIHJlZ3MtPmVycl9taXNjWzBdKTsK Pj4gKwkJcHJfZXJyKCIlcyAgRVJSJXVNSVNDMTogMHglbGx4XG4iLCBwZnhfc2VxLCBpbmRleCwg cmVncy0+ZXJyX21pc2NbMV0pOwo+PiArCQlwcl9lcnIoIiVzICBFUlIldU1JU0MyOiAweCVsbHhc biIsIHBmeF9zZXEsIGluZGV4LCByZWdzLT5lcnJfbWlzY1syXSk7Cj4+ICsJCXByX2VycigiJXMg IEVSUiV1TUlTQzM6IDB4JWxseFxuIiwgcGZ4X3NlcSwgaW5kZXgsIHJlZ3MtPmVycl9taXNjWzNd KTsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gKwo+PiArc3RhdGljIHZvaWQgYWVzdF9ub2RlX3Bvb2xf cHJvY2VzcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKl9fdW51c2VkKQo+PiArewo+PiArCXN0cnVjdCBs bGlzdF9ub2RlICpoZWFkOwo+PiArCXN0cnVjdCBhZXN0X25vZGVfbGxpc3QgKmxub2RlLCAqdG1w Owo+PiArCj4+ICsJaGVhZCA9IGxsaXN0X2RlbF9hbGwoJmFlc3Rfbm9kZV9sbGlzdCk7Cj4+ICsJ aWYgKCFoZWFkKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwloZWFkID0gbGxpc3RfcmV2ZXJzZV9v cmRlcihoZWFkKTsKPj4gKwlsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxub2RlLCB0bXAsIGhl YWQsIGxsbm9kZSkgewo+PiArCQlhZXN0X3ByaW50KGxub2RlKTsKPj4gKwkJZ2VuX3Bvb2xfZnJl ZShhZXN0X25vZGVfcG9vbCwgKHVuc2lnbmVkIGxvbmcpbG5vZGUsCj4+ICsJCQkJc2l6ZW9mKCps bm9kZSkpOwo+PiArCX0KPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBhZXN0X25vZGVfZ2VuX3Bv b2xfYWRkKHN0cnVjdCBhZXN0X25vZGUgKm5vZGUsIGludCBpbmRleCwKPj4gKwkJCQlzdHJ1Y3Qg cmFzX2V4dF9yZWdzICpyZWdzKQo+PiArewo+PiArCXN0cnVjdCBhZXN0X25vZGVfbGxpc3QgKmxp c3Q7Cj4+ICsKPj4gKwlpZiAoIWFlc3Rfbm9kZV9wb29sKQo+PiArCQlyZXR1cm4gLUVJTlZBTDsK Pj4gKwo+PiArCWxpc3QgPSAodm9pZCAqKWdlbl9wb29sX2FsbG9jKGFlc3Rfbm9kZV9wb29sLCBz aXplb2YoKmxpc3QpKTsKPj4gKwlpZiAoIWxpc3QpCj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiAr Cj4+ICsJbGlzdC0+dHlwZSA9IG5vZGUtPnR5cGU7Cj4+ICsJbGlzdC0+bm9kZV9uYW1lID0gbm9k ZS0+bmFtZTsKPj4gKwlzd2l0Y2ggKG5vZGUtPnR5cGUpIHsKPj4gKwljYXNlIEFDUElfQUVTVF9Q Uk9DRVNTT1JfRVJST1JfTk9ERToKPj4gKwkJbGlzdC0+aWQwID0gbm9kZS0+c3BlYy5wcm9jZXNz b3IucHJvY2Vzc29yX2lkOwo+PiArCQlpZiAobm9kZS0+c3BlYy5wcm9jZXNzb3IuZmxhZ3MgJiAo QUNQSV9BRVNUX1BST0NfRkxBR19TSEFSRUQgfAo+PiArCQkJCQkJQUNQSV9BRVNUX1BST0NfRkxB R19HTE9CQUwpKQo+PiArCQkJbGlzdC0+aWQwID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwo+PiArCj4+ ICsJCWxpc3QtPmlkMSA9IG5vZGUtPnNwZWMucHJvY2Vzc29yLnJlc291cmNlX3R5cGU7Cj4+ICsJ CWJyZWFrOwo+PiArCWNhc2UgQUNQSV9BRVNUX01FTU9SWV9FUlJPUl9OT0RFOgo+PiArCQlsaXN0 LT5pZDAgPSBub2RlLT5zcGVjLm1lbW9yeS5zcmF0X3Byb3hpbWl0eV9kb21haW47Cj4+ICsJCWJy ZWFrOwo+PiArCWNhc2UgQUNQSV9BRVNUX1NNTVVfRVJST1JfTk9ERToKPj4gKwkJbGlzdC0+aWQw ID0gbm9kZS0+c3BlYy5zbW11LmlvcnRfbm9kZV9yZWZlcmVuY2U7Cj4+ICsJCWxpc3QtPmlkMSA9 IG5vZGUtPnNwZWMuc21tdS5zdWJjb21wb25lbnRfcmVmZXJlbmNlOwo+PiArCQlicmVhazsKPj4g KwljYXNlIEFDUElfQUVTVF9WRU5ET1JfRVJST1JfTk9ERToKPj4gKwkJbGlzdC0+aWQwID0gbm9k ZS0+c3BlYy52ZW5kb3IuYWNwaV9oaWQ7Cj4+ICsJCWxpc3QtPmlkMSA9IG5vZGUtPnNwZWMudmVu ZG9yLmFjcGlfdWlkOwo+PiArCQlicmVhazsKPj4gKwljYXNlIEFDUElfQUVTVF9HSUNfRVJST1Jf Tk9ERToKPj4gKwkJbGlzdC0+aWQwID0gbm9kZS0+c3BlYy5naWMuaW50ZXJmYWNlX3R5cGU7Cj4+ ICsJCWxpc3QtPmlkMSA9IG5vZGUtPnNwZWMuZ2ljLmluc3RhbmNlX2lkOwo+PiArCQlicmVhazsK Pj4gKwlkZWZhdWx0Ogo+PiArCQlsaXN0LT5pZDAgPSAwOwo+PiArCQlsaXN0LT5pZDEgPSAwOwo+ PiArCX0KPj4gKwo+PiArCW1lbWNweSgmbGlzdC0+cmVncywgcmVncywgc2l6ZW9mKCpyZWdzKSk7 Cj4gCj4gWW91IGhhdmUgdm1hbGxvY2VkIHRoZSByZWNvcmQuIFdoeSBkbyB5b3UgbmVlZCB0byBj b3B5IGl0IGluc3RlYWQgb2YKPiBzaW1wbHkgcG9pbnRpbmcgdG8gaXQ/CgpZZXMgeW91IGFyZSBy aWdodCwgaXQgd2lsbCBiZSBmaXhlZCBuZXh0IHZlcnNpb24uCgo+IAo+PiArCWxpc3QtPmluZGV4 ID0gaW5kZXg7Cj4+ICsJbGxpc3RfYWRkKCZsaXN0LT5sbG5vZGUsICZhZXN0X25vZGVfbGxpc3Qp Owo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYWVzdF9ub2Rl X3Bvb2xfaW5pdCh2b2lkKQo+PiArewo+PiArCXVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZTsKPj4g KwlpbnQgcmM7Cj4+ICsKPj4gKwlpZiAoYWVzdF9ub2RlX3Bvb2wpCj4+ICsJCXJldHVybiAwOwo+ PiArCj4+ICsJYWVzdF9ub2RlX3Bvb2wgPSBnZW5fcG9vbF9jcmVhdGUoaWxvZzIoc2l6ZW9mKHN0 cnVjdCBhZXN0X25vZGVfbGxpc3QpKSwgLTEpOwo+PiArCWlmICghYWVzdF9ub2RlX3Bvb2wpCj4+ ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCj4+ICsJc2l6ZSA9IFBBR0VfQUxJR04oQUVTVF9OT0RF X1BPT0xTWik7Cj4+ICsJYWRkciA9ICh1bnNpZ25lZCBsb25nKXZtYWxsb2Moc2l6ZSk7Cj4+ICsJ aWYgKCFhZGRyKQo+PiArCQlnb3RvIGVycl9wb29sX2FsbG9jOwo+PiArCj4+ICsJcmMgPSBnZW5f cG9vbF9hZGQoYWVzdF9ub2RlX3Bvb2wsIGFkZHIsIHNpemUsIC0xKTsKPj4gKwlpZiAocmMpCj4+ ICsJCWdvdG8gZXJyX3Bvb2xfYWRkOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICsKPj4gK2Vycl9w b29sX2FkZDoKPj4gKwl2ZnJlZSgodm9pZCAqKWFkZHIpOwo+PiArCj4+ICtlcnJfcG9vbF9hbGxv YzoKPj4gKwlnZW5fcG9vbF9kZXN0cm95KGFlc3Rfbm9kZV9wb29sKTsKPj4gKwo+PiArCXJldHVy biAtRU5PTUVNOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBhZXN0X2xvZyhzdHJ1Y3QgYWVz dF9ub2RlICpub2RlLCBpbnQgaW5kZXgsIHN0cnVjdCByYXNfZXh0X3JlZ3MgKnJlZ3MpCj4+ICt7 Cj4+ICsJaWYgKCFhZXN0X25vZGVfZ2VuX3Bvb2xfYWRkKG5vZGUsIGluZGV4LCByZWdzKSkKPj4g KwkJc2NoZWR1bGVfd29yaygmYWVzdF93b3JrKTsKPj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIHlv dSBtdXN0IHNlbGVjdCBjcHUgbnVtYmVyIGZpcnN0IGluIG9yZGVyIHRvIG9wZXJhdGUgUkFTIHJl Z2lzdGVyIGJlbG9uZ2VkCj4+ICsgKiB0aGF0IGNwdS4KPj4gKyAqLwo+PiArc3RhdGljIHZvaWQg YWVzdF9zZWxlY3RfY3B1KHN0cnVjdCBhZXN0X25vZGUgKm5vZGUsIGludCBpKQo+PiArewo+PiAr CWlmIChub2RlLT5pbnRlcmZhY2UudHlwZSA9PSBBQ1BJX0FFU1RfTk9ERV9TWVNURU1fUkVHSVNU RVIpIHsKPj4gKwkJd3JpdGVfc3lzcmVnX3MoaSwgU1lTX0VSUlNFTFJfRUwxKTsKPiAKPiBFUlJT RUxSX0VMMSBkb2Vzbid0IHNlbGVjdCBhIENQVS4gSXQgc2VsZWN0cyBhIFJBUyByZWNvcmQuIEhv dyByZWNvcmRzCj4gYW5kIENQVXMgYXJlIG1hcHBlZCBpc24ndCBzcGVjaWZpZWQgaW4gdGhlIGFy Y2hpdGVjdHVyZS4KPiAKClllcywgSSdtIHdyb25nLCBhbmQgY2hhbmdlIGFlc3Rfc2VsZWN0X2Nw dSB0byBhZXN0X3NlbGVjdF9yZWNvcmQgaW4gdjIuCgo+PiArCQlpc2IoKTsKPj4gKwl9Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFlc3RfcHJvYyhzdHJ1Y3QgYWVzdF9ub2RlICpub2RlKQo+ PiArewo+PiArCXN0cnVjdCByYXNfZXh0X3JlZ3MgcmVncyA9IHswfTsKPj4gKwlzdHJ1Y3QgYWVz dF9hY2Nlc3MgKmFjY2VzczsKPj4gKwlpbnQgaTsKPj4gKwl1NjQgcmVnc19wOwo+PiArCj4+ICsK Pj4gKwlmb3IgKGkgPSBub2RlLT5pbnRlcmZhY2UucmVjb3JkX3N0YXJ0OyBpIDwgbm9kZS0+aW50 ZXJmYWNlLnJlY29yZF9lbmQ7IGkrKykgewo+PiArCQkvKiAxYjogRXJyb3IgcmVjb3JkIGF0IGkg aW5kZXggaXMgbm90IGltcGxlbWVudGVkICovCj4+ICsJCWlmICh0ZXN0X2JpdChpLCAmbm9kZS0+ aW50ZXJmYWNlLnJlY29yZF9pbXBsZW1lbnRlZCkpCj4+ICsJCQljb250aW51ZTsKPj4gKwo+PiAr CQlhZXN0X3NlbGVjdF9jcHUobm9kZSwgaSk7Cj4+ICsKPj4gKwkJYWNjZXNzID0gbm9kZS0+YWNj ZXNzOwo+PiArCQlyZWdzX3AgPSAodTY0KSZub2RlLT5pbnRlcmZhY2UucmVnc1tpXTsKPj4gKwo+ PiArCQlyZWdzLmVycl9zdGF0dXMgPSBhY2Nlc3MtPnJlYWRfY2xlYXIocmVnc19wLCBFUlhTVEFU VVMsIGZhbHNlKTsKPj4gKwkJaWYgKCEocmVncy5lcnJfc3RhdHVzICYgRVJSX1NUQVRVU19WKSkK Pj4gKwkJCWNvbnRpbnVlOwo+PiArCj4+ICsJCWlmIChyZWdzLmVycl9zdGF0dXMgJiBFUlJfU1RB VFVTX0FWKQo+PiArCQkJcmVncy5lcnJfYWRkciA9IGFjY2Vzcy0+cmVhZF9jbGVhcihyZWdzX3As IEVSWEFERFIsIGZhbHNlKTsKPj4gKwo+PiArCQlyZWdzLmVycl9mciA9IGFjY2Vzcy0+cmVhZF9j bGVhcihyZWdzX3AsIEVSWEZSLCBmYWxzZSk7Cj4+ICsJCXJlZ3MuZXJyX2N0bHIgPSBhY2Nlc3Mt PnJlYWRfY2xlYXIocmVnc19wLCBFUlhDVExSLCBmYWxzZSk7Cj4+ICsKPj4gKwkJaWYgKHJlZ3Mu ZXJyX3N0YXR1cyAmIEVSUl9TVEFUVVNfTVYpIHsKPj4gKwkJCWJvb2wgY2xlYXIgPSBub2RlLT5p bnRlcmZhY2UuZmxhZ3MgJiBBQ1BJX0FFU1RfSU5URVJGQUNFX0NMRUFSX01JU0M7Cj4+ICsKPj4g KwkJCXJlZ3MuZXJyX21pc2NbMF0gPSBhY2Nlc3MtPnJlYWRfY2xlYXIocmVnc19wLCBFUlhNSVND MCwgY2xlYXIpOwo+PiArCQkJcmVncy5lcnJfbWlzY1sxXSA9IGFjY2Vzcy0+cmVhZF9jbGVhcihy ZWdzX3AsIEVSWE1JU0MxLCBjbGVhcik7Cj4+ICsJCQlyZWdzLmVycl9taXNjWzJdID0gYWNjZXNz LT5yZWFkX2NsZWFyKHJlZ3NfcCwgRVJYTUlTQzIsIGNsZWFyKTsKPj4gKwkJCXJlZ3MuZXJyX21p c2NbM10gPSBhY2Nlc3MtPnJlYWRfY2xlYXIocmVnc19wLCBFUlhNSVNDMywgY2xlYXIpOwo+PiAr CQl9Cj4+ICsKPj4gKwkJYWVzdF9sb2cobm9kZSwgaSwgJnJlZ3MpOwo+PiArCj4+ICsJCWlmIChy ZWdzLmVycl9zdGF0dXMgJiBFUlJfU1RBVFVTX1VFKQo+PiArCQkJcGFuaWMoIkFFU1Q6IHVuY29y cmVjdGFibGUgZXJyb3IgZW5jb3VudGVyZWQiKTsKPj4gKwo+PiArCQkvKiBXcml0ZS1vbmUtdG8t Y2xlYXIgdGhlIGJpdHMgd2UndmUgc2VlbiAqLwo+PiArCQlyZWdzLmVycl9zdGF0dXMgJj0gRVJS X1NUQVRVU19XMVRDOwo+PiArCj4+ICsJCS8qIE11bHRpIGJpdCBmaWxlZCBuZWVkIHRvIHdyaXRl IGFsbC1vbmVzIHRvIGNsZWFyLiAqLwo+PiArCQlpZiAocmVncy5lcnJfc3RhdHVzICYgRVJSX1NU QVRVU19DRSkKPj4gKwkJCXJlZ3MuZXJyX3N0YXR1cyB8PSBFUlJfU1RBVFVTX0NFOwo+PiArCj4+ ICsJCS8qIE11bHRpIGJpdCBmaWxlZCBuZWVkIHRvIHdyaXRlIGFsbC1vbmVzIHRvIGNsZWFyLiAq Lwo+PiArCQlpZiAocmVncy5lcnJfc3RhdHVzICYgRVJSX1NUQVRVU19VRVQpCj4+ICsJCQlyZWdz LmVycl9zdGF0dXMgfD0gRVJSX1NUQVRVU19VRVQ7Cj4+ICsKPj4gKwkJYWNjZXNzLT53cml0ZShy ZWdzX3AsIEVSWFNUQVRVUywgcmVncy5lcnJfc3RhdHVzKTsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpcnFyZXR1cm5fdCBhZXN0X2lycV9mdW5jKGludCBpcnEsIHZvaWQgKmlucHV0KQo+ PiArewo+PiArCXN0cnVjdCBhZXN0X25vZGUgKm5vZGUgPSBpbnB1dDsKPj4gKwo+PiArCWFlc3Rf cHJvYyhub2RlKTsKPj4gKwo+PiArCXJldHVybiBJUlFfSEFORExFRDsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGludCBfX2luaXQgYWVzdF9yZWdpc3Rlcl9nc2kodTMyIGdzaSwgaW50IHRyaWdnZXIs IHZvaWQgKmRhdGEsCj4+ICsJCQkJCWlycV9oYW5kbGVyX3QgYWVzdF9pcnFfZnVuYykKPj4gK3sK Pj4gKwlpbnQgY3B1LCBpcnE7Cj4+ICsKPj4gKwlpcnEgPSBhY3BpX3JlZ2lzdGVyX2dzaShOVUxM LCBnc2ksIHRyaWdnZXIsIEFDUElfQUNUSVZFX0hJR0gpOwo+PiArCj4+ICsJaWYgKGlycSA9PSAt RUlOVkFMKSB7Cj4+ICsJCXByX2VycigiZmFpbGVkIHRvIG1hcCBBRVNUIEdTSSAlZFxuIiwgZ3Np KTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJaWYgKGdzaSA8IDE2KSB7 Cj4+ICsJCXByX2VycigiaW52YWxpZCBHU0kgJWRcbiIsIGdzaSk7Cj4+ICsJCXJldHVybiAtRUlO VkFMOwo+PiArCX0gZWxzZSBpZiAoZ3NpIDwgMzIpIHsKPj4gKwkJaWYgKHBwaV9pZHggPj0gQUVT VF9NQVhfUFBJKSB7Cj4+ICsJCQlwcl9lcnIoIlVuYWJsZSB0byByZWdpc3RlciBQUEkgJWRcbiIs IGdzaSk7Cj4+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwkJfQo+PiArCQlwcGlfaXJxc1twcGlf aWR4XSA9IGlycTsKPj4gKwkJZW5hYmxlX3BlcmNwdV9pcnEoaXJxLCBJUlFfVFlQRV9OT05FKTsK PiAKPiBFbmFibGluZyB0aGUgUFBJIGJlZm9yZSByZXF1ZXN0aW5nIGl0PyBMb29rcy4uLiBncmVh dC4gQW5kIGhvdyBkb2VzCj4gdGhpcyB3b3JrIG9uIGEgc3lzdGVtIHRoYXQgc3VwcG9ydHMgRVBQ SXMsIHdoaWNoIGFyZSBpbiB0aGUKPiBbMTExOToxMDU2XSByYW5nZT8KCkl0IGlzIGJldHRlciB0 byBlbmFibGUgaXQgYWZ0ZXIgcmVxdWVzdCBpdCwgaSB3aWxsIGZpeCBpdCBuZXh0IHZlcnNpb24u Ck15IG1hY2hpbmUgZG8gbm90IHVzZSBFUFBJIGFzIFJBUyBpbnRlcnJ1cHQsIGkgY2FuIG5vdCB0 ZXN0IGl0IG5vdy4gQ2FuCndlIHN1cHBvcnQgRVBQSSBpbiBsYXRlciBwYXRjaD8KCj4gCj4gQWxz bywgaWYgeW91IGdldCBhIHRyaWdnZXIgYXMgYSBwYXJhbWV0ZXIsIHdoeSB0aGUgSVJRX1RZUEVf Tk9ORT8KClNvcnJ577yMSSBkbyBub3QgcmVhbGx5IHVuZGVyc3RhbmQgdGhpcyBjb21tZW50LCBz aG91bGQgSSB1c2UKKElSUV9MRVZFTCB8IElSUV9QRVJfQ1BVKT8KCj4gCj4gCj4+ICsJCWZvcl9l YWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKPj4gKwkJCW1lbWNweShwZXJfY3B1X3B0cihwcGlfZGF0 YVtwcGlfaWR4XSwgY3B1KSwgZGF0YSwKPj4gKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGFlc3Rf bm9kZSkpOwo+PiArCQl9Cj4+ICsJCWlmIChyZXF1ZXN0X3BlcmNwdV9pcnEoaXJxLCBhZXN0X2ly cV9mdW5jLCAiQUVTVCIsCj4+ICsJCQkJICAgICAgIHBwaV9kYXRhW3BwaV9pZHgrK10pKSB7Cj4+ ICsJCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciBBRVNUIElSUSAlZFxuIiwgaXJxKTsKPj4g KwkJCXJldHVybiAtRUlOVkFMOwo+PiArCQl9Cj4+ICsJfSBlbHNlIGlmIChnc2kgPCAxMDIwKSB7 Cj4+ICsJCWlmIChyZXF1ZXN0X2lycShpcnEsIGFlc3RfaXJxX2Z1bmMsIElSUUZfU0hBUkVELCAi QUVTVCIsCj4+ICsJCQkJZGF0YSkpIHsKPiAKPiBXaHkgU0hBUkVEPyBXaG8gd291bGQgc2hhcmUg YSBSQVMgaW50ZXJydXB0Pz8/Pz8KCk11bHRpIEFFU1Qgbm9kZXMgbWF5IHVzZSB0aGUgc2FtZSBp bnRlcnJ1cHQsIGZvciBleGFtcGxlLCBvbmUgRERSQyB3aXRoCmEgUkFTIGludGVycnVwdCBoYXMg dHdvIHN1YiBjaGFubmVscywgdGhlc2UgdHdvIHN1YiBjaGFubmVsIGlzIGRlc2NyaWJlZAphcyB0 d28gQUVTVCBub2RlIGluIEFFU1QgdGFibGUsIHNvIHRoZXkgc2hhcmUgdGhlIHNhbWUgb25lLiBJ biBhbm90aGVyCmNhc2UsIFNNTVUgaGFzIHR3byBSQVMgbm9kZSwgVENVIGFuZCBUQlUsIHRoZXkg bWF5IGFsc28gc2hhcmUgdGhlIHNhbWUKaW50ZXJydXB0LgoKPiAKPj4gKwkJCXByX2VycigiZmFp bGVkIHRvIHJlZ2lzdGVyIEFFU1QgSVJRICVkXG4iLCBpcnEpOwo+PiArCQkJcmV0dXJuIC1FSU5W QUw7Cj4gCj4gU2FtZSBxdWVzdGlvbiBhYm91dCBleHRlbmRlZCBTUElzLgo+IAo+IEFsbCBpbiBh bGwsIHRoaXMgd2hvbGUgbG9naWMgaXMgdG90YWxseSB1c2VsZXNzLiBJdCBpc24ndCB0aGUgZHJp dmVyJ3MKPiBqb2IgdG8gY2xhc3NpZnkgdGhlIEdJQyBJTlRJRHMuLi4KCkFFU1QgdXNlIGJvdGgg UFBJIGFuZCBTUEksIGl0IHNlZW1zIHRoYXQgQUVTVCBkcml2ZXIgbXVzdCByZWNvZ25pemUKSU5U SUQgaW4gb3JkZXIgdG8gcmVxdWVzdCBpcnEgbnVtYmVyIHdpdGggZGlmZmVyZW50IGZ1bmN0aW9u LCBkbyB5b3UKaGF2ZSBiZXR0ZXIgc29sdXRpb24gaGVyZT8KCj4gCj4gCU0uCj4gCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVs IG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==