Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp7470939rwd; Tue, 20 Jun 2023 01:30:20 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7FCnzpgYcH71rALffgH3VVbV7xb6zvwkGixg+zlIZz/ANw2E8NZ3ZNLF3JvsKLwp2gui+q X-Received: by 2002:a17:90b:d89:b0:25e:8501:6662 with SMTP id bg9-20020a17090b0d8900b0025e85016662mr22804820pjb.7.1687249819973; Tue, 20 Jun 2023 01:30:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687249819; cv=none; d=google.com; s=arc-20160816; b=QYCHQJMwZICqqiER61VW25npphXM44ZpBsoLz2tpRoggLa2IWX7D9RzkPztTrcKJdW Rlxuu2bprAIS8w/tEIfVUPsNOl0QTwQIwpczSzKLlV3H/M9YG6PPy6hc8tJ/B+hYXpAD GVgcALI2X6vFgaVXD3hrCP0D964AJa7IrSOjYVevgX4jvgwmdFAzHXLxR7GhjuoszbEO dGRMxVUA+KoFzCgkW1gg+TmogGyG0N/wADweJdKEzP+IJANrQzqnuu1tWf+5voDfCiF2 DqRaI7VQYipzu7iBPjBbMQ6sqigWBM1bkOA10RaJzcDk8kOXYc4CIbY056+/geyHPErx s3Sg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:authenticated-by; bh=XsBdtVFRV2B9e0oVvlxQHw1qyGvFfUd/WkT+FSkFDvw=; b=1ESy+aF8G7Msn7QRSRwsKbGQHqtzFujz1fWsEExlM2evafX6lA35rkeYOADfiBAqJI zOu+aZrO+LkuX3bVo0eg7k3AJYxPwRIWBAy61pHsr/QQ24G3zeIQ8yi8uLpI0CYuyRCt KmcH9WDwwFo87zTxEV3I257chifeeTJV7H0dmzEgLApRm6ec0nS/f/c7Zp5ojAV8j1CV F7tyyla4Tsmk5lQaA54GCv5JcT2TYOsfTPCW/BMT6REdgACkW7J10SjMfyRe8kFK/pVx cNsC74GFCxVE2sFrwI/iXaInXX8cet5niv99ODi6YkxTeqZ+bAitXZY7C4Z740hTt+bB 7kzg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id y11-20020a17090a474b00b0025bc0c2f013si1429985pjg.96.2023.06.20.01.30.05; Tue, 20 Jun 2023 01:30:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231504AbjFTIFB (ORCPT + 99 others); Tue, 20 Jun 2023 04:05:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59018 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231773AbjFTIEw (ORCPT ); Tue, 20 Jun 2023 04:04:52 -0400 Received: from rtits2.realtek.com.tw (rtits2.realtek.com [211.75.126.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 46EE912C; Tue, 20 Jun 2023 01:04:47 -0700 (PDT) Authenticated-By: X-SpamFilter-By: ArmorX SpamTrap 5.77 with qID 35K844kE4020028, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtexh36505.realtek.com.tw[172.21.6.25]) by rtits2.realtek.com.tw (8.15.2/2.81/5.90) with ESMTPS id 35K844kE4020028 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=OK); Tue, 20 Jun 2023 16:04:04 +0800 Received: from RTEXMBS04.realtek.com.tw (172.21.6.97) by RTEXH36505.realtek.com.tw (172.21.6.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.32; Tue, 20 Jun 2023 16:04:25 +0800 Received: from RTEXMBS04.realtek.com.tw (172.21.6.97) by RTEXMBS04.realtek.com.tw (172.21.6.97) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.7; Tue, 20 Jun 2023 16:04:24 +0800 Received: from RTEXMBS04.realtek.com.tw ([fe80::e138:e7f1:4709:ff4d]) by RTEXMBS04.realtek.com.tw ([fe80::e138:e7f1:4709:ff4d%5]) with mapi id 15.01.2375.007; Tue, 20 Jun 2023 16:04:24 +0800 From: =?utf-8?B?SnlhbiBDaG91IFvlkajoirflrold?= To: Adrian Hunter , "jh80.chung@samsung.com" , "ulf.hansson@linaro.org" CC: "linux-mmc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , =?utf-8?B?SmFtZXMgVGFpIFvmiLTlv5fls7Bd?= Subject: RE: [PATCH] CMDQ feature is introduced to eMMC standard in v5.1, which can be used to improve performance. Thread-Topic: [PATCH] CMDQ feature is introduced to eMMC standard in v5.1, which can be used to improve performance. Thread-Index: AQHZoB0OE0kisP5QcU6J48ueKeCt56+Sv2OAgACVe1A= Date: Tue, 20 Jun 2023 08:04:24 +0000 Message-ID: References: <20230616063731.17591-1-jyanchou@realtek.com> In-Reply-To: Accept-Language: zh-TW, en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.21.190.236] x-kse-serverinfo: RTEXMBS04.realtek.com.tw, 9 x-kse-antispam-interceptor-info: fallback x-kse-antivirus-interceptor-info: fallback Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-KSE-AntiSpam-Interceptor-Info: fallback X-KSE-ServerInfo: RTEXH36505.realtek.com.tw, 9 X-KSE-AntiSpam-Interceptor-Info: fallback X-KSE-Antivirus-Interceptor-Info: fallback X-KSE-AntiSpam-Interceptor-Info: fallback X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGVsbG8gQWRyaWFuLA0KDQo+IFdoeSBub3QgYWRkIENRSENJIHN1cHBvcnQgdG8gZHdfbW1jLmMg Pw0KDQpUaGUgcmVhc29uIHdoeSB3ZSB3b3VsZCBsaWtlIHRvIGNvbW1pdCBkd19tbWNfY3FlLmMg aXMgdGhhdCB3ZSBmb3VuZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHN5bm9wc3lzJyBkYXRhIGJv b2sgYW5kIHVzZXIgZ3VpZGUuDQoNCkl0IHNlZW1zIHRoYXQgZHdfbW1jLmMgaXMgYmFzZWQgb24g Zm9ybWVyIHNwZWMuIEluIG5ldyBzcGVjLCB0aGUgcHJvZ3JhbW1hYmxlIHJlZ2lzdGVycyBvZiB0 aGUgRFdDX21vYmlsZV9zdG9yYWdlIGFyZSBkaWZmZXJlbnQsDQoNCnNvbWUgb3BlcmF0ZSBmbG93 IGhhZCBjaGFuZ2VkLCBhbmQgYWxzbyB0aGV5IGFkZCBjbWRxIGZlYXR1cmUuDQoNClRoYW5rcyBh IGxvdC4NCg0KQmVzdCBSZWdhcmRzLA0KSnlhbg0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t LQ0KRnJvbTogQWRyaWFuIEh1bnRlciA8YWRyaWFuLmh1bnRlckBpbnRlbC5jb20+IA0KU2VudDog VHVlc2RheSwgSnVuZSAyMCwgMjAyMyAyOjQ2IFBNDQpUbzogSnlhbiBDaG91IFvlkajoirflrold IDxqeWFuY2hvdUByZWFsdGVrLmNvbT47IGpoODAuY2h1bmdAc2Ftc3VuZy5jb207IHVsZi5oYW5z c29uQGxpbmFyby5vcmcNCkNjOiBsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnOyBsaW51eC1rZXJu ZWxAdmdlci5rZXJuZWwub3JnOyBKYW1lcyBUYWkgW+aItOW/l+WzsF0gPGphbWVzLnRhaUByZWFs dGVrLmNvbT4NClN1YmplY3Q6IFJlOiBbUEFUQ0hdIENNRFEgZmVhdHVyZSBpcyBpbnRyb2R1Y2Vk IHRvIGVNTUMgc3RhbmRhcmQgaW4gdjUuMSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gaW1wcm92ZSBw ZXJmb3JtYW5jZS4NCg0KDQpFeHRlcm5hbCBtYWlsLg0KDQoNCg0KT24gMTYvMDYvMjMgMDk6Mzcs IEp5YW4gQ2hvdSB3cm90ZToNCj4gV2UgYWRkIHRoZSBtbWMgZHJpdmVyIGZvciB0aGUgU3lub3Bz eXMgRGVzaWduV2FyZSBtbWMgaG9zdCBjb250cm9sbGVyDQo+IHdpdGggY21kcSBzdXBwb3J0IHRo YXQgY2FuIGltcGxlbWVudCB0aGlzIGZlYXR1cmUuDQoNCldoeSBub3QgYWRkIENRSENJIHN1cHBv cnQgdG8gZHdfbW1jLmMgPw0KDQpJdCBkb2VzIG5vdCB1c3VhbGx5IHJlcXVpcmUgdGhhdCBtYW55 IGNoYW5nZXMsIGZvciBleGFtcGxlOg0KDQpjb21taXQgODhiZDY1MmIzYzc0OTk3YmI0MzZhZGY2 MTMxYWNmNDQ1MDY2MjQzZQ0KQXV0aG9yOiBDaHVuLUh1bmcgV3UgPGNodW4taHVuZy53dUBtZWRp YXRlay5jb20+DQpEYXRlOiAgIE1vbiBKdWwgMjAgMDg6NDI6MzggMjAyMCArMDgwMA0KDQogICAg bW1jOiBtZWRpYXRlazogY29tbWFuZCBxdWV1ZSBzdXBwb3J0DQoNCiAgICBTdXBwb3J0IGNvbW1h bmQgcXVldWUgZm9yIG10Njc3OSBwbGF0Zm9ybS4NCiAgICBhLiBBZGQgbXNkY19zZXRfYnVzeV90 aW1lb3V0KCkgdG8gY2FsY3VsYXRlIGVtbWMgd3JpdGUgdGltZW91dC4NCiAgICBiLiBDb25uZWN0 IG10ayBtc2RjIGRyaXZlciB0byBjcWhjaSBkcml2ZXIgdGhyb3VnaA0KICAgICAgIGhvc3QtPmNx X2hvc3QtPm9wcyA9ICZtc2RjX2NtZHFfb3BzOw0KICAgIGMuIG1zZGNfY21kcV9pcnEoKSB3aWxs IGxpbmsgdXAgd2l0aCBjcWNoaV9pcnEoKS4gQmVzaWRlcywgaXQgcHJvdmlkZXMNCiAgICAgICBt b3JlIGlycSBlcnJvciBtZXNzYWdlcyBsaWtlIFJTUENSQ0VSUi9DTURUTy9EQVRBQ1JDRVJSL0RB VFRNTy4NCiAgICBkLiBTZWxlY3Qga2VybmVsIGNvbmZpZyBNTUNfQ1FIQ0kgZm9yIE1NQ19NVEsN Cg0KICAgIFNpZ25lZC1vZmYtYnk6IENodW4tSHVuZyBXdSA8Y2h1bi1odW5nLnd1QG1lZGlhdGVr LmNvbT4NCiAgICBBY2tlZC1ieTogWW9uZyBNYW8gPHlvbmcubWFvQG1lZGlhdGVrLmNvbT4NCiAg ICBMaW5rOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9yLzE1OTUyMDU3NTktNTgyNS00LWdpdC1z ZW5kLWVtYWlsLWNodW4taHVuZy53dUBtZWRpYXRlay5jb20NCiAgICBTaWduZWQtb2ZmLWJ5OiBV bGYgSGFuc3NvbiA8dWxmLmhhbnNzb25AbGluYXJvLm9yZz4NCg0KDQoNCj4NCj4gU2lnbmVkLW9m Zi1ieTogSnlhbiBDaG91IDxqeWFuY2hvdUByZWFsdGVrLmNvbT4NCj4gLS0tDQo+ICBkcml2ZXJz L21tYy9ob3N0L0tjb25maWcgICAgICB8ICAgMTEgKw0KPiAgZHJpdmVycy9tbWMvaG9zdC9NYWtl ZmlsZSAgICAgfCAgICAxICsNCj4gIGRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jX2NxZS5jIHwgMTgy MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIGRyaXZlcnMvbW1jL2hvc3Qv ZHdfbW1jX2NxZS5oIHwgIDQ0NCArKysrKysrKw0KPiAgNCBmaWxlcyBjaGFuZ2VkLCAyMjc5IGlu c2VydGlvbnMoKykNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21tYy9ob3N0L2R3X21t Y19jcWUuYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jX2Nx ZS5oDQo+DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcgYi9kcml2ZXJz L21tYy9ob3N0L0tjb25maWcNCj4gaW5kZXggOWY3OTM4OTIxMjNjLi5iOGM3NzI3YjE4OTcgMTAw NjQ0DQo+IC0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZw0KPiArKysgYi9kcml2ZXJzL21t Yy9ob3N0L0tjb25maWcNCj4gQEAgLTc2Miw2ICs3NjIsMTcgQEAgY29uZmlnIE1NQ19EV19QTFRG TQ0KPg0KPiAgICAgICAgIElmIHVuc3VyZSwgc2F5IFkuDQo+DQo+ICtjb25maWcgTU1DX0RXX0NR RQ0KPiArICAgICB0cmlzdGF0ZSAiU3lub3BzeXMgRGVzaWduV2FyZSBNZW1vcnkgQ2FyZCB3aXRo IENRRSBJbnRlcmZhY2UiDQo+ICsgICAgIGRlcGVuZHMgb24gQVJDIHx8IEFSTSB8fCBBUk02NCB8 fCBNSVBTIHx8IENPTVBJTEVfVEVTVA0KPiArICAgICBzZWxlY3QgTU1DX0NRSENJDQo+ICsgICAg IGhlbHANCj4gKyAgICAgICBUaGlzIHNlbGVjdHMgc3VwcG9ydCBmb3IgdGhlIFN5bm9wc3lzIERl c2lnbldhcmUgTW9iaWxlIFN0b3JhZ2UgSVANCj4gKyAgICAgICBibG9jay4gSXQgcHJvdmlkZXMg aG9zdCBzdXBwb3J0IGZvciBTRCBhbmQgTU1DIGludGVyZmFjZXMsIGFuZCBhZGRzDQo+ICsgICAg ICAgdGhlIHN1cHBvcnQgb2YgY21kcS4NCj4gKw0KPiArICAgICAgIElmIHVuc3VyZSwgc2F5IE4u DQo+ICsNCj4gIGNvbmZpZyBNTUNfRFdfQkxVRUZJRUxEDQo+ICAgICAgIHRyaXN0YXRlICJCbHVl RmllbGQgc3BlY2lmaWMgZXh0ZW5zaW9ucyBmb3IgU3lub3BzeXMgRFcgTWVtb3J5IENhcmQgSW50 ZXJmYWNlIg0KPiAgICAgICBkZXBlbmRzIG9uIE1NQ19EVw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9tbWMvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUNCj4gaW5kZXgg YTY5M2ZhM2QzZjFjLi43ZmExNDExNjkyZTggMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbW1jL2hv c3QvTWFrZWZpbGUNCj4gKysrIGIvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQ0KPiBAQCAtNTUs NiArNTUsNyBAQCBvYmotJChDT05GSUdfTU1DX0RXX0szKSAgICAgICAgICAgICArPSBkd19tbWMt azMubw0KPiAgb2JqLSQoQ09ORklHX01NQ19EV19QQ0kpICAgICArPSBkd19tbWMtcGNpLm8NCj4g IG9iai0kKENPTkZJR19NTUNfRFdfUk9DS0NISVApICAgICAgICArPSBkd19tbWMtcm9ja2NoaXAu bw0KPiAgb2JqLSQoQ09ORklHX01NQ19EV19TVEFSRklWRSkgICAgICAgICs9IGR3X21tYy1zdGFy Zml2ZS5vDQo+ICtvYmotJChDT05GSUdfTU1DX0RXX0NRRSkgICAgICAgICAgICAgICAgKz0gZHdf bW1jX2NxZS5vDQo+ICBvYmotJChDT05GSUdfTU1DX1NIX01NQ0lGKSAgICs9IHNoX21tY2lmLm8N Cj4gIG9iai0kKENPTkZJR19NTUNfSlo0NzQwKSAgICAgKz0gano0NzQwX21tYy5vDQo+ICBvYmot JChDT05GSUdfTU1DX1ZVQjMwMCkgICAgICs9IHZ1YjMwMC5vDQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL21tYy9ob3N0L2R3X21tY19jcWUuYyBiL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jX2NxZS5j DQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYzUwYTZjNzFh MzYyDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9tbWMvaG9zdC9kd19tbWNfY3Fl LmMNCj4gQEAgLTAsMCArMSwxODIzIEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMC1vci1sYXRlcg0KPiArLyoNCj4gKyAqIFN5bm9wc3lzIERlc2lnbldhcmUgTXVsdGlt ZWRpYSBDYXJkIEludGVyZmFjZSBkcml2ZXIgd2l0aCBDTURRIHN1cHBvcnQNCj4gKyAqICAoQmFz ZWQgb24gU3lub3BzeXMgRGVzaWduV2FyZSBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIGRyaXZl cikNCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjMgUmVhbHRlayBTZW1pY29uZHVjdG9y IENvcnANCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+DQo+ICsjaW5j bHVkZSA8bGludXgvYmxrZGV2Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ICsjaW5j bHVkZSA8bGludXgvZGVidWdmcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ICsj aW5jbHVkZSA8bGludXgvZGV2aWNlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+ DQo+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvaW9w b2xsLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgv aXJxLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4NCj4gKyNpbmNsdWRlIDxsaW51 eC9tbWMvaG9zdC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L21tYy9tbWMuaD4NCj4gKyNpbmNsdWRl IDxsaW51eC9tbWMvc2QuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpby5oPg0KPiArI2lu Y2x1ZGUgPGxpbnV4L21tYy9zbG90LWdwaW8uaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvb2Yu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4gKyNpbmNsdWRlIDxs aW51eC9wbV9ydW50aW1lLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVy Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9z aXplcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9z dGF0Lmg+DQo+ICsNCj4gKyNpbmNsdWRlICJkd19tbWNfY3FlLmgiDQo+ICsjaW5jbHVkZSAiY3Fo Y2kuaCINCj4gKw0KPiArI2RlZmluZSBEV19NQ0lfRlJFUV9NQVggICAgICAyMDAwMDAwMDAgICAg ICAgLyogdW5pdDogSFogKi8NCj4gKyNkZWZpbmUgRFdfTUNJX0ZSRVFfTUlOICAgICAgMTAwMDAw ICAgICAgICAgIC8qIHVuaXQ6IEhaICovDQo+ICsjZGVmaW5lIERXX01DSV9DTURRX0RJU0FCTEVE IDB4MzBmMDAwMQ0KPiArI2RlZmluZSBEV19NQ0lfQ01EUV9FTkFCTEVEICAweDMwZjAxMDENCj4g KyNkZWZpbmUgRFdfTUNJX1BPV0VST0ZGICAgICAgICAgICAgICAweDMyMjAzMDENCj4gKyNkZWZp bmUgRFdfTUNJX0RFU0NfTEVOICAgICAgICAgICAgICAweDEwMDAwMA0KPiArI2RlZmluZSBEV19N Q0lfTUFYX1NDUklQVF9CTEsgICAgICAgIDEyOA0KPiArI2RlZmluZSBEV19NQ0lfVElNRU9VVF9N UyAgICAzMDAwDQo+ICsjZGVmaW5lIERXX01DSV9USU1FT1VUX3VzICAgIDMwMDAwMDANCj4gKyNk ZWZpbmUgVFVOSU5HX0VSUiAgICAgICAgICAgNTMxDQo+ICsjZGVmaW5lIERXX01DSV9OT1RfUkVB RFkgICAgIDk5OTkNCj4gKw0KPiArREVDTEFSRV9DT01QTEVUSU9OKGR3X21jaV93YWl0KTsNCj4g Kw0KPiArDQo+ICsjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpDQo+ICtzdGF0aWMgaW50IGR3 X21jaV9jcWVfcmVxX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQ0KPiArew0KPiAr ICAgICBzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3QgPSBzLT5wcml2YXRlOw0KPiArICAgICBzdHJ1 Y3QgbW1jX3JlcXVlc3QgKm1ycTsNCj4gKyAgICAgc3RydWN0IG1tY19jb21tYW5kICpjbWQ7DQo+ ICsgICAgIHN0cnVjdCBtbWNfY29tbWFuZCAqc3RvcDsNCj4gKyAgICAgc3RydWN0IG1tY19kYXRh ICpkYXRhOw0KPiArDQo+ICsgICAgIC8qIE1ha2Ugc3VyZSB3ZSBnZXQgYSBjb25zaXN0ZW50IHNu YXBzaG90ICovDQo+ICsgICAgIHNwaW5fbG9ja19iaCgmc2xvdC0+aG9zdC0+bG9jayk7DQo+ICsg ICAgIG1ycSA9IHNsb3QtPm1ycTsNCj4gKw0KPiArICAgICBpZiAobXJxKSB7DQo+ICsgICAgICAg ICAgICAgY21kID0gbXJxLT5jbWQ7DQo+ICsgICAgICAgICAgICAgZGF0YSA9IG1ycS0+ZGF0YTsN Cj4gKyAgICAgICAgICAgICBzdG9wID0gbXJxLT5zdG9wOw0KPiArDQo+ICsgICAgICAgICAgICAg aWYgKGNtZCkNCj4gKyAgICAgICAgICAgICAgICAgICAgIHNlcV9wcmludGYocywNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNNRCV1KDB4JXgpIGZsZyAleCByc3AgJXggJXgg JXggJXggZXJyICVkXG4iLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQt Pm9wY29kZSwgY21kLT5hcmcsIGNtZC0+ZmxhZ3MsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNtZC0+cmVzcFswXSwgY21kLT5yZXNwWzFdLCBjbWQtPnJlc3BbMl0sDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZC0+cmVzcFsyXSwgY21kLT5lcnJvcik7 DQo+ICsgICAgICAgICAgICAgaWYgKGRhdGEpDQo+ICsgICAgICAgICAgICAgICAgICAgICBzZXFf cHJpbnRmKHMsICJEQVRBICV1IC8gJXUgKiAldSBmbGcgJXggZXJyICVkXG4iLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5ieXRlc194ZmVyZWQsIGRhdGEtPmJsb2Nr cywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+Ymxrc3osIGRhdGEt PmZsYWdzLCBkYXRhLT5lcnJvcik7DQo+ICsgICAgICAgICAgICAgaWYgKHN0b3ApDQo+ICsgICAg ICAgICAgICAgICAgICAgICBzZXFfcHJpbnRmKHMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJDTUQldSgweCV4KSBmbGcgJXggcnNwICV4ICV4ICV4ICV4IGVyciAlZFxuIiwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcC0+b3Bjb2RlLCBzdG9wLT5h cmcsIHN0b3AtPmZsYWdzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9w LT5yZXNwWzBdLCBzdG9wLT5yZXNwWzFdLCBzdG9wLT5yZXNwWzJdLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdG9wLT5yZXNwWzJdLCBzdG9wLT5lcnJvcik7DQo+ICsgICAg IH0NCj4gKw0KPiArICAgICBzcGluX3VubG9ja19iaCgmc2xvdC0+aG9zdC0+bG9jayk7DQo+ICsN Cj4gKyAgICAgcmV0dXJuIDA7DQo+ICt9DQo+ICtERUZJTkVfU0hPV19BVFRSSUJVVEUoZHdfbWNp X2NxZV9yZXEpOw0KPiArI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSAqLw0KPiAr DQo+ICtzdGF0aWMgaW50IGR3X21jaV9jcWVfcmVnc19zaG93KHN0cnVjdCBkd19tY2kgKmhvc3Qs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtbWNfY29tbWFuZCAqY21k LCB1MzIgY21kX2ZsYWdzKQ0KPiArew0KPiArICAgICBkZXZfZXJyKGhvc3QtPmRldiwgIm9wY29k ZSA9ICVkLCBhcmcgPSAweCV4LCBjbWRmbGFncyA9IDB4JXhcbiIsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNtZC0+b3Bjb2RlLCBjbWQtPmFyZywgY21kX2ZsYWdzKTsNCj4gKyAg ICAgZGV2X2Vycihob3N0LT5kZXYsICJzdGF0dXNfaW50ID0gMHgleFxuIiwgaG9zdC0+bm9ybWFs X2ludGVycnVwdCk7DQo+ICsgICAgIGRldl9lcnIoaG9zdC0+ZGV2LCAiZXJyb3JfaW50ID0gMHgl eFxuIiwgaG9zdC0+ZXJyb3JfaW50ZXJydXB0KTsNCj4gKyAgICAgZGV2X2Vycihob3N0LT5kZXYs ICJhdXRvX2Vycm9yX2ludCA9IDB4JXhcbiIsIGhvc3QtPmF1dG9fZXJyb3JfaW50ZXJydXB0KTsN Cj4gKyAgICAgZGV2X2Vycihob3N0LT5kZXYsICJwc3RhdGVfcmVnID0gMHgleFxuIiwgbWNpX3Jl YWRsKGhvc3QsIFBTVEFURV9SRUcpKTsNCj4gKyAgICAgZGV2X2Vycihob3N0LT5kZXYsICJob3N0 X2N0cmxfMSA9IDB4JXhcbiIsIG1jaV9yZWFkYihob3N0LCBIT1NUX0NUUkwxX1IpKTsNCj4gKyAg ICAgZGV2X2Vycihob3N0LT5kZXYsICJ4ZmVyX21vZGVfciA9IDB4JXhcbiIsIG1jaV9yZWFkdyho b3N0LCBYRkVSX01PREVfUikpOw0KPiArDQo+ICsgICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZCBkd19tY2lfY3FlX2R1bXByZWdzKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQ0K PiArew0KPiArICAgICBzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3QgPSBtbWNfcHJpdihtbWMpOw0K PiArICAgICBzdHJ1Y3QgZHdfbWNpICpob3N0ID0gc2xvdC0+aG9zdDsNCj4gKw0KPiArICAgICBk ZXZfaW5mbyhob3N0LT5kZXYsICIlczogY21kIGlkeCAweCUwOHhcbiIsIF9fZnVuY19fLCBtY2lf cmVhZHcoaG9zdCwgQ01EX1IpKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZHdfbWNpX2Nx ZV9zZXRfdHJhbl9kZXNjKHU4ICpkZXNjLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRtYV9hZGRyX3QgYWRkciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgbGVuLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJvb2wgZW5kLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv b2wgZG1hNjQpDQo+ICt7DQo+ICsgICAgIF9fbGUzMiAqYXR0ciA9IChfX2xlMzIgX19mb3JjZSAq KWRlc2M7DQo+ICsNCj4gKyAgICAgKmF0dHIgPSAoQ1FIQ0lfVkFMSUQoMSkgfA0KPiArICAgICAg ICAgICAgICBDUUhDSV9FTkQoZW5kID8gMSA6IDApIHwNCj4gKyAgICAgICAgICAgICAgQ1FIQ0lf SU5UKDApIHwNCj4gKyAgICAgICAgICAgICAgQ1FIQ0lfQUNUKDB4NCkgfA0KPiArICAgICAgICAg ICAgICBDUUhDSV9EQVRfTEVOR1RIKGxlbikpOw0KPiArDQo+ICsgICAgIGlmIChkbWE2NCkgew0K PiArICAgICAgICAgICAgIF9fbGU2NCAqZGF0YWRkciA9IChfX2xlNjQgX19mb3JjZSAqKShkZXNj ICsgNCk7DQo+ICsNCj4gKyAgICAgICAgICAgICBkYXRhZGRyWzBdID0gY3B1X3RvX2xlNjQoYWRk cik7DQo+ICsgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgX19sZTMyICpkYXRhZGRyID0g KF9fbGUzMiBfX2ZvcmNlICopKGRlc2MgKyA0KTsNCj4gKw0KPiArICAgICAgICAgICAgIGRhdGFk ZHJbMF0gPSBjcHVfdG9fbGUzMihhZGRyKTsNCj4gKyAgICAgfQ0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgdm9pZCBkd19tY2lfY3FlX3NldHVwX3RyYW5fZGVzYyhzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjcWhjaV9ob3N0 ICpjcV9ob3N0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCAqZGVz YywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNnX2NvdW50KQ0K PiArew0KPiArICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOw0KPiArICAgICB1MzIgY3VyX2Js a19jbnQsIHJlbWFpbl9ibGtfY250Ow0KPiArICAgICB1bnNpZ25lZCBpbnQgYmVnaW4sIGVuZDsN Cj4gKyAgICAgaW50IGksIGxlbjsNCj4gKyAgICAgYm9vbCBsYXN0ID0gZmFsc2U7DQo+ICsgICAg IGJvb2wgZG1hNjQgPSBjcV9ob3N0LT5kbWE2NDsNCj4gKyAgICAgZG1hX2FkZHJfdCBhZGRyOw0K PiArDQo+ICsgICAgIGZvcl9lYWNoX3NnKGRhdGEtPnNnLCBzZywgc2dfY291bnQsIGkpIHsNCj4g KyAgICAgICAgICAgICBhZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOw0KPiArICAgICAgICAgICAg IGxlbiA9IHNnX2RtYV9sZW4oc2cpOw0KPiArICAgICAgICAgICAgIHJlbWFpbl9ibGtfY250ICA9 IGxlbiA+PiA5Ow0KPiArDQo+ICsgICAgICAgICAgICAgd2hpbGUgKHJlbWFpbl9ibGtfY250KSB7 DQo+ICsgICAgICAgICAgICAgICAgICAgICAvKkRXX01DSV9NQVhfU0NSSVBUX0JMSyBpcyB0aGEg bWF4IGZvciBlYWNoIGRlc2NyaXB0b3IgcmVjb3JkKi8NCj4gKyAgICAgICAgICAgICAgICAgICAg IGlmIChyZW1haW5fYmxrX2NudCA+IERXX01DSV9NQVhfU0NSSVBUX0JMSykNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY3VyX2Jsa19jbnQgPSBEV19NQ0lfTUFYX1NDUklQVF9CTEs7 DQo+ICsgICAgICAgICAgICAgICAgICAgICBlbHNlDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGN1cl9ibGtfY250ID0gcmVtYWluX2Jsa19jbnQ7DQo+ICsNCj4gKyAgICAgICAgICAg ICAgICAgICAgIC8qIEluIFN5bm9wc3lzIERlc2lnbldhcmUgRGF0YWJvb2sgUGFnZSA4NCwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAqIFRoZXkgbWVudGlvbmVkIHRoZSBETUEgMTI4TUIgcmVz dHJpY3Rpb24NCj4gKyAgICAgICAgICAgICAgICAgICAgICAqLw0KPiArICAgICAgICAgICAgICAg ICAgICAgYmVnaW4gPSBhZGRyIC8gU1pfMTI4TTsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGVu ZCA9IChhZGRyICsgY3VyX2Jsa19jbnQgKiBTWl81MTIpIC8gU1pfMTI4TTsNCj4gKw0KPiArICAg ICAgICAgICAgICAgICAgICAgaWYgKGJlZ2luICE9IGVuZCkNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY3VyX2Jsa19jbnQgPSAoZW5kICogU1pfMTI4TSAtIGFkZHIpIC8gU1pfNTEy Ow0KPiArDQo+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoKGkrMSkgPT0gc2dfY291bnQgJiYg KHJlbWFpbl9ibGtfY250ID09IGN1cl9ibGtfY250KSkNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGFzdCA9IHRydWU7DQo+ICsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGR3X21j aV9jcWVfc2V0X3RyYW5fZGVzYyhkZXNjLCBhZGRyLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjdXJfYmxrX2NudCA8PCA5KSwgbGFzdCwgZG1hNjQpOw0KPiArDQo+ ICsgICAgICAgICAgICAgICAgICAgICBhZGRyID0gYWRkciArIChjdXJfYmxrX2NudCA8PCA5KTsN Cj4gKyAgICAgICAgICAgICAgICAgICAgIHJlbWFpbl9ibGtfY250IC09IGN1cl9ibGtfY250Ow0K PiArICAgICAgICAgICAgICAgICAgICAgZGVzYyArPSBjcV9ob3N0LT50cmFuc19kZXNjX2xlbjsN Cj4gKyAgICAgICAgICAgICB9DQo+ICsgICAgIH0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQg ZHdfbWNpX2NxZV9lbmFibGUoc3RydWN0IG1tY19ob3N0ICptbWMpDQo+ICt7DQo+ICsgICAgIHN0 cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9IG1tY19wcml2KG1tYyk7DQo+ICsgICAgIHN0cnVjdCBk d19tY2kgKmhvc3QgPSBzbG90LT5ob3N0Ow0KPiArDQo+ICsgICAgIC8qY2xlYXIgZGF0YSBwYXRo IFNXX1JTVF9SLlNXX1JTVF9EQVQgPSAxKi8NCj4gKyAgICAgbWNpX3dyaXRlYihob3N0LCBTV19S U1RfUiwgU0RNTUNfUlNUX0RBVCk7DQo+ICsgICAgIC8qMHg5ODAxMjAwYyovDQo+ICsgICAgIG1j aV93cml0ZXcoaG9zdCwgWEZFUl9NT0RFX1IsDQo+ICsgICAgICAgICAgICAgKCgxIDw8IFNETU1D X01VTFRJX0JMS19TRUwpIHwgU0RNTUNfQkxPQ0tfQ09VTlRfRU5BQkxFIHwgU0RNTUNfRE1BX0VO QUJMRSkpOw0KPiArDQo+ICsgICAgIC8qU2V0IERNQV9TRUwgdG8gQURNQTIgb25seSBtb2RlIGlu IHRoZSBIT1NUX0NUUkwxX1IqLw0KPiArICAgICBtY2lfd3JpdGViKGhvc3QsIEhPU1RfQ1RSTDFf UiwNCj4gKyAgICAgICAgICAgICAobWNpX3JlYWRiKGhvc3QsIEhPU1RfQ1RSTDFfUikgJiAweGU3 KSB8IChTRE1NQ19BRE1BMl8zMiA8PCBTRE1NQ19ETUFfU0VMKSk7DQo+ICsgICAgIG1jaV93cml0 ZXcoaG9zdCwgQkxPQ0tTSVpFX1IsIDB4MjAwKTsNCj4gKyAgICAgbWNpX3dyaXRldyhob3N0LCBC TE9DS0NPVU5UX1IsIDApOw0KPiArDQo+ICsgICAgIC8qU2V0IFNETUFTQV9SICh3aGlsZSB1c2lu ZyAzMiBiaXRzKSB0byAwKi8NCj4gKyAgICAgbWNpX3dyaXRlbChob3N0LCBTRE1BU0FfUiwgMCk7 DQo+ICsgICAgIC8qd2Ugc2V0IHRoaXMgcmVnaXN0ZXIgYWRkaXRpb25hbGx5IHRvIGVuaGFuY2Ug dGhlIElPIHBlcm9mcm1hbmNlKi8NCj4gKw0KPiArICAgICBjcWhjaV93cml0ZWwoaG9zdC0+Y3Fl LCAweDEwLCBDUUhDSV9TU0MxKTsNCj4gKyAgICAgY3FoY2lfd3JpdGVsKGhvc3QtPmNxZSwgMCwg Q1FIQ0lfQ1RMKTsNCj4gKw0KPiArICAgICBpZiAoY3FoY2lfcmVhZGwoaG9zdC0+Y3FlLCBDUUhD SV9DVEwpICYmIENRSENJX0hBTFQpIHsNCj4gKyAgICAgICAgICAgICBkZXZfZXJyKGhvc3QtPmRl diwgIiVzOiBjcWhjaTogQ1FFIGZhaWxlZCB0byBleGl0IGhhbHQgc3RhdGVcbiIsDQo+ICsgICAg ICAgICAgICAgICAgICAgICBtbWNfaG9zdG5hbWUobW1jKSk7DQo+ICsgICAgIH0NCj4gKw0KPiAr ICAgICAvKmNtZHEgaW50ZXJydXB0IG1vZGUqLw0KPiArICAgICBkd19tY2lfY2xyX3NpZ25hbF9p bnQoaG9zdCk7DQo+ICsgICAgIGR3X21jaV9lbl9jcWVfaW50KGhvc3QpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNxaGNpX2hvc3Rfb3BzIGR3X21jaV9jcWhjaV9ob3N0X29w cyA9IHsNCj4gKyAgICAgLmVuYWJsZSA9IGR3X21jaV9jcWVfZW5hYmxlLA0KPiArICAgICAuZHVt cHJlZ3MgPSBkd19tY2lfY3FlX2R1bXByZWdzLA0KPiArICAgICAuc2V0dXBfdHJhbl9kZXNjID0g ZHdfbWNpX2NxZV9zZXR1cF90cmFuX2Rlc2MsDQo+ICt9Ow0KPiArDQo+ICt2b2lkIGR3X21jaV9j cWVfd2FpdF9kb25lKHN0cnVjdCBkd19tY2kgKmhvc3QsIHUzMiAqYWRkciwNCj4gKyAgICAgICAg ICAgICAgICAgICB1MzIgbWFzaywgdTMyIHZhbHVlKQ0KPiArew0KPiArICAgICBpbnQgbiA9IDA7 DQo+ICsNCj4gKyAgICAgd2hpbGUgKDEpIHsNCj4gKyAgICAgICAgICAgICBpZiAoKCgqYWRkcikg JiBtYXNrKSA9PSB2YWx1ZSkNCj4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiArDQo+ ICsgICAgICAgICAgICAgLyplcnJvciBpbnRlcnJ1cHQgZGV0ZWN0ZWQqLw0KPiArICAgICAgICAg ICAgIGlmICgobWNpX3JlYWR3KGhvc3QsIE5PUk1BTF9JTlRfU1RBVF9SKSAmIFNETU1DX0VSUl9J TlRFUlJVUFQpICE9IDApDQo+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gKw0KPiAr ICAgICAgICAgICAgIGlmIChuKysgPiBEV19NQ0lfVElNRU9VVF91cykgew0KPiArICAgICAgICAg ICAgICAgICAgICAgZGV2X2Vycihob3N0LT5kZXYsICJvcGNvZGUgPSAlZCwgKmFkZHIgPSAweCV4 LCBtYXNrID0gMHgleCwgdmFsdWUgPSAweCV4XG4iLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBob3N0LT5vcGNvZGUsIHJlYWRsKGFkZHIpLCBtYXNrLCB2YWx1ZSk7DQo+ICsgICAg ICAgICAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgICAgICB9DQo+ICsgICAgICAgICAg ICAgdWRlbGF5KDEpOw0KPiArICAgICB9DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGR3X21jaV9j cWVfd2FpdF9kb25lKTsNCj4gKw0KPiArc3RhdGljIHZvaWQgZHdfbWNpX2NxZV9yZXNldChzdHJ1 Y3QgZHdfbWNpICpob3N0KQ0KPiArew0KPiArICAgICAvKmNoZWNrIHRoZSBjbWQgbGluZSovDQo+ ICsgICAgIGlmIChtY2lfcmVhZHcoaG9zdCwgRVJST1JfSU5UX1NUQVRfUikgJiBTRE1NQ19DTURf RVJSKSB7DQo+ICsgICAgICAgICAgICAgLypQZXJmb3JtIGEgc29mdHdhcmUgcmVzZXQqLw0KPiAr ICAgICAgICAgICAgIG1jaV93cml0ZWIoaG9zdCwgU1dfUlNUX1IsIFNETU1DX1JTVF9DTUQpOw0K PiArICAgICAgICAgICAgIGR3X21jaV9jcWVfd2FpdF9kb25lKGhvc3QsICh1MzIgKikoaG9zdC0+ cmVncyArIFNETU1DX0NMS19DVFJMX1IpLCBCSVQoMjUpLCAwKTsNCj4gKyAgICAgfQ0KPiArICAg ICAvKmNoZWNrIGRhdGEgbGluZSovDQo+ICsgICAgIGlmIChtY2lfcmVhZHcoaG9zdCwgRVJST1Jf SU5UX1NUQVRfUikgJiBTRE1NQ19EQVRBX0VSUikgew0KPiArICAgICAgICAgICAgIG1jaV93cml0 ZWIoaG9zdCwgU1dfUlNUX1IsIFNETU1DX1JTVF9EQVQpOw0KPiArICAgICAgICAgICAgIGR3X21j aV9jcWVfd2FpdF9kb25lKGhvc3QsICh1MzIgKikoaG9zdC0+cmVncyArIFNETU1DX0NMS19DVFJM X1IpLCBCSVQoMjYpLCAwKTsNCj4gKyAgICAgfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBk d19tY2lfY3FlX3JlYWRfcnNwKHN0cnVjdCBkd19tY2kgKmhvc3QsIHN0cnVjdCBtbWNfY29tbWFu ZCAqY21kLCB1MzIgKnJzcCkNCj4gK3sNCj4gKyAgICAgY29uc3Qgc3RydWN0IGR3X21jaV9kcnZf ZGF0YSAqZHJ2X2RhdGEgPSBob3N0LT5kcnZfZGF0YTsNCj4gKw0KPiArICAgICBpZiAoY21kLT5m bGFncyAmIE1NQ19SU1BfUFJFU0VOVCkgew0KPiArICAgICAgICAgICAgIGlmIChjbWQtPmZsYWdz ICYgTU1DX1JTUF8xMzYpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChkcnZfZGF0YSAm JiBkcnZfZGF0YS0+c2hpZnRfcnNwKSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRydl9kYXRhLT5zaGlmdF9yc3AoaG9zdCwgY21kLCBjbWQtPnJlc3ApOw0KPiArICAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypS MiBsb25nIHJlc3BvbnNlKi8NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHJz cF90bXBbNF07DQo+ICsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNwX3RtcFsz XSA9IG1jaV9yZWFkbChob3N0LCBSRVNQMDFfUik7DQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJzcF90bXBbMl0gPSBtY2lfcmVhZGwoaG9zdCwgUkVTUDIzX1IpOw0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByc3BfdG1wWzFdID0gbWNpX3JlYWRsKGhvc3QsIFJFU1A0 NV9SKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNwX3RtcFswXSA9IG1jaV9y ZWFkbChob3N0LCBSRVNQNjdfUik7DQo+ICsgICAgICAgICAgICAgICAgICAgICB9DQo+ICsgICAg ICAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgIC8qU2hvcnQgcmVzcG9u c2UqLw0KPiArICAgICAgICAgICAgICAgICAgICAgcnNwWzBdID0gcnNwWzFdID0gcnNwWzJdID0g cnNwWzNdID0gMDsNCj4gKyAgICAgICAgICAgICAgICAgICAgIHJzcFswXSA9IG1jaV9yZWFkbCho b3N0LCBSRVNQMDFfUik7DQo+ICsgICAgICAgICAgICAgfQ0KPiArICAgICB9DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB1MzIgZHdfbWNpX2NxZV9wcmVwYXJlX2NvbW1hbmQoc3RydWN0IG1tY19ob3N0 ICptbWMsIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kKQ0KPiArew0KPiArICAgICBzdHJ1Y3QgZHdf bWNpX3Nsb3QgKnNsb3QgPSBtbWNfcHJpdihtbWMpOw0KPiArICAgICBzdHJ1Y3QgZHdfbWNpICpo b3N0ID0gc2xvdC0+aG9zdDsNCj4gKyAgICAgdTMyIGNtZHI7DQo+ICsNCj4gKyAgICAgY21kLT5l cnJvciA9IC1FSU5QUk9HUkVTUzsNCj4gKw0KPiArICAgIC8qIG91ciBpcCBkZXNpZ24gcHV0cyBy ZXNwIGluIGJpdCA4LTEzNSwgc28gd2UgbmVlZCB0byBzaGlmdCA4IGJpdHMqLw0KPiArICAgICBp ZiAoaG9zdC0+c2hpZnQpDQo+ICsgICAgICAgICAgICAgY21kciA9IChjbWQtPm9wY29kZSA8PCA4 KTsNCj4gKyAgICAgZWxzZQ0KPiArICAgICAgICAgICAgIGNtZHIgPSBjbWQtPm9wY29kZTsNCj4g Kw0KPiArICAgICBpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCkgew0KPiArICAgICAg ICAgICAgIGlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF8xMzYpDQo+ICsgICAgICAgICAgICAgICAg ICAgICBjbWRyIHw9IFNETU1DX1JFU1BfTEVOXzEzNjsNCj4gKyAgICAgICAgICAgICBlbHNlIHsN Cj4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9CVVNZKQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRyIHw9IFNETU1DX1JFU1BfTEVOXzQ4 QjsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGVsc2UNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY21kciB8PSBTRE1NQ19SRVNQX0xFTl80ODsNCj4gKyAgICAgICAgICAgICB9DQo+ ICsgICAgIH0NCj4gKw0KPiArICAgICBjbWRyIHw9IFNETU1DX0NNRF9DSEtfUkVTUF9DUkM7DQo+ ICsgICAgIGlmIChjbWQtPm9wY29kZSA9PSBNTUNfR09fSURMRV9TVEFURSB8fA0KPiArICAgICAg ICBjbWQtPm9wY29kZSA9PSBNTUNfU0VORF9PUF9DT05EIHx8DQo+ICsgICAgICAgIChjbWQtPm9w Y29kZSA9PSBNTUNfU0VMRUNUX0NBUkQgJiYgY21kLT5mbGFncyA9PSAoTU1DX1JTUF9OT05FIHwg TU1DX0NNRF9BQykpKQ0KPiArICAgICAgICAgICAgIGNtZHIgJj0gflNETU1DX0NNRF9DSEtfUkVT UF9DUkM7DQo+ICsNCj4gKyAgICAgY21kciB8PSBTRE1NQ19DTURfSURYX0NIS19FTkFCTEU7DQo+ ICsgICAgIGlmIChjbWQtPm9wY29kZSA9PSBNTUNfR09fSURMRV9TVEFURSB8fA0KPiArICAgICAg ICBjbWQtPm9wY29kZSA9PSBNTUNfU0VORF9PUF9DT05EIHx8DQo+ICsgICAgICAgIGNtZC0+b3Bj b2RlID09IE1NQ19TRU5EX0NTRCB8fA0KPiArICAgICAgICBjbWQtPm9wY29kZSA9PSBNTUNfU0VO RF9DSUQgfHwNCj4gKyAgICAgICAgY21kLT5vcGNvZGUgPT0gTU1DX0FMTF9TRU5EX0NJRCB8fA0K PiArICAgICAgICAoY21kLT5vcGNvZGUgPT0gTU1DX1NFTEVDVF9DQVJEICYmIGNtZC0+ZmxhZ3Mg PT0gKE1NQ19SU1BfTk9ORSB8IE1NQ19DTURfQUMpKSkNCj4gKyAgICAgICAgICAgICBjbWRyICY9 IH5TRE1NQ19DTURfSURYX0NIS19FTkFCTEU7DQo+ICsNCj4gKyAgICAgaWYgKGNtZC0+ZGF0YSkN Cj4gKyAgICAgICAgICAgICBjbWRyIHw9IFNETU1DX0RBVEE7DQo+ICsNCj4gKyAgICAgaWYgKGNt ZC0+b3Bjb2RlID09IE1NQ19TVE9QX1RSQU5TTUlTU0lPTikNCj4gKyAgICAgICAgICAgICBjbWRy IHw9IChTRE1NQ19BQk9SVF9DTUQgPDwgNik7DQo+ICsNCj4gKyAgICAgcmV0dXJuIGNtZHI7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgZHdfbWNpX2NxZV9zdGFydF9jb21tYW5kKHN0cnVjdCBk d19tY2kgKmhvc3QsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbW1j X2NvbW1hbmQgKmNtZCwgdTMyIGNtZF9mbGFncykNCj4gK3sNCj4gKyAgICAgaW50IGVyciA9IDA7 DQo+ICsgICAgIHVuc2lnbmVkIGxvbmcgZW5kID0gMDsNCj4gKyAgICAgdW5zaWduZWQgbG9uZyBm bGFnczsNCj4gKyAgICAgYm9vbCB4ZmVyX2ZsYWcgPSBmYWxzZTsNCj4gKw0KPiArICAgICBob3N0 LT5jbWQgPSBjbWQ7DQo+ICsNCj4gKyAgICAgc3dpdGNoIChjbWQtPm9wY29kZSkgew0KPiArICAg ICBjYXNlIE1NQ19SRUFEX1NJTkdMRV9CTE9DSzoNCj4gKyAgICAgY2FzZSBNTUNfUkVBRF9NVUxU SVBMRV9CTE9DSzoNCj4gKyAgICAgY2FzZSBNTUNfV1JJVEVfQkxPQ0s6DQo+ICsgICAgIGNhc2Ug TU1DX1dSSVRFX01VTFRJUExFX0JMT0NLOg0KPiArICAgICBjYXNlIE1NQ19TRU5EX0VYVF9DU0Q6 DQo+ICsgICAgIGNhc2UgTU1DX0dFTl9DTUQ6DQo+ICsgICAgIGNhc2UgTU1DX1NMRUVQX0FXQUtF Og0KPiArICAgICBjYXNlIE1NQ19TV0lUQ0g6DQo+ICsgICAgIGNhc2UgTU1DX1NFVF9XUklURV9Q Uk9UOg0KPiArICAgICBjYXNlIE1NQ19DTFJfV1JJVEVfUFJPVDoNCj4gKyAgICAgY2FzZSBNTUNf U0VORF9XUklURV9QUk9UOg0KPiArICAgICBjYXNlIE1NQ19FUkFTRToNCj4gKyAgICAgY2FzZSBN TUNfU0VORF9UVU5JTkdfQkxPQ0tfSFMyMDA6DQo+ICsgICAgICAgICAgICAgeGZlcl9mbGFnID0g dHJ1ZTsNCj4gKyAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgZGVmYXVsdDoNCj4gKyAgICAg ICAgICAgICB4ZmVyX2ZsYWcgPSBmYWxzZTsNCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIGhvc3Qt PmludF93YWl0aW5nID0gJmR3X21jaV93YWl0Ow0KPiArICAgICBlbmQgPSBqaWZmaWVzICsgbXNl Y3NfdG9famlmZmllcyhEV19NQ0lfVElNRU9VVF9NUyk7DQo+ICsgICAgIG1vZF90aW1lcigmaG9z dC0+dGltZXIsIGVuZCk7DQo+ICsNCj4gKyAgICAgaWYgKGhvc3QtPmludF93YWl0aW5nKSB7DQo+ ICsgICAgICAgICAgICAgZHdfbWNpX2Nscl9zaWduYWxfaW50KGhvc3QpOw0KPiArICAgICAgICAg ICAgIGR3X21jaV9jbHJfaW50KGhvc3QpOw0KPiArDQo+ICsgICAgICAgICAgICAgLypjb21tYW5k IHdpdGggZGF0YSwgcjFiIGNhc2UqLw0KPiArICAgICAgICAgICAgIGlmICh4ZmVyX2ZsYWcgPT0g MSkNCj4gKyAgICAgICAgICAgICAgICAgICAgIGR3X21jaV9lbl94ZmVyX2ludChob3N0KTsNCj4g KyAgICAgICAgICAgICBlbHNlDQo+ICsgICAgICAgICAgICAgICAgICAgICBkd19tY2lfZW5fY2Rf aW50KGhvc3QpOw0KPiArDQo+ICsgICAgICAgICAgICAgLypJZiB3ZSB1c2UgY21kMjMsIHdlIGNh bm5vdCBzZW5kIGF1dG8gc3RvcCBjb21tYW5kKi8NCj4gKyAgICAgICAgICAgICBpZiAoY21kLT5v cGNvZGUgPT0gTU1DX1dSSVRFX01VTFRJUExFX0JMT0NLIHx8DQo+ICsgICAgICAgICAgICAgICAg IGNtZC0+b3Bjb2RlID09IE1NQ19SRUFEX01VTFRJUExFX0JMT0NLKSB7DQo+ICsgICAgICAgICAg ICAgICAgICAgICBpZiAoaG9zdC0+aXNfc2JjKSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1jaV93cml0ZXcoaG9zdCwgWEZFUl9NT0RFX1IsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbWNpX3JlYWR3KGhvc3QsIFhGRVJfTU9ERV9SKSAmIH5CSVQo U0RNTUNfQVVUT19DTURfRU5BQkxFKSk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaG9zdC0+aXNfc2JjID0gMDsNCj4gKyAgICAgICAgICAgICAgICAgICAgIH0NCj4g KyAgICAgICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgICAgICBob3N0LT5vcGNvZGUgPSBjbWQt Pm9wY29kZTsNCj4gKyAgICAgICAgICAgICBob3N0LT5hcmcgPSBjbWQtPmFyZzsNCj4gKw0KPiAr ICAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5pcnFfbG9jaywgZmxhZ3MpOw0K PiArICAgICAgICAgICAgIG1jaV93cml0ZXcoaG9zdCwgQ01EX1IsIGNtZF9mbGFncyk7DQo+ICsg ICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+aXJxX2xvY2ssIGZsYWdz KTsNCj4gKw0KPiArICAgICAgICAgICAgIHdhaXRfZm9yX2NvbXBsZXRpb24oaG9zdC0+aW50X3dh aXRpbmcpOw0KPiArDQo+ICsgICAgICAgICAgICAgaWYgKHhmZXJfZmxhZyA9PSAxKQ0KPiArICAg ICAgICAgICAgICAgICAgICAgZHdfbWNpX2NxZV93YWl0X2RvbmUoaG9zdCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHUzMiAqKShob3N0LT5yZWdzICsgU0RNTUNfTk9STUFMX0lO VF9TVEFUX1IpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19YRkVSX0NP TVBMRVRFLCBTRE1NQ19YRkVSX0NPTVBMRVRFKTsNCj4gKyAgICAgICAgICAgICBlbHNlDQo+ICsg ICAgICAgICAgICAgICAgICAgICBkd19tY2lfY3FlX3dhaXRfZG9uZShob3N0LA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAodTMyICopKGhvc3QtPnJlZ3MgKyBTRE1NQ19OT1JNQUxf SU5UX1NUQVRfUiksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0NNRF9D T01QTEVURSwgU0RNTUNfQ01EX0NPTVBMRVRFKTsNCj4gKw0KPiArICAgICAgICAgICAgIGlmICho b3N0LT5ub3JtYWxfaW50ZXJydXB0ICYgU0RNTUNfRVJSX0lOVEVSUlVQVCkgew0KPiArICAgICAg ICAgICAgICAgICAgICAgaWYgKGhvc3QtPnR1bmluZyA9PSAxKQ0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkZXZfaW5mbyhob3N0LT5kZXYsICJUdW5pbmcgZXJyb3IgLi4uIGtlZXAg dHVuaW5nXG4iKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGVsc2UNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZHdfbWNpX2NxZV9yZWdzX3Nob3coaG9zdCwgY21kLCBjbWRfZmxh Z3MpOw0KPiArICAgICAgICAgICAgICAgICAgICAgZXJyID0gLTE7DQo+ICsgICAgICAgICAgICAg fQ0KPiArICAgICB9DQo+ICsNCj4gKyAgICAgcmV0dXJuIGVycjsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgZHdfbWNpX2NxZV9wcmVwX3N0b3BfYWJvcnQoc3RydWN0IGR3X21jaSAqaG9zdCwg c3RydWN0IG1tY19jb21tYW5kICpjbWQpDQo+ICt7DQo+ICsNCj4gKyAgICAgc3RydWN0IG1tY19j b21tYW5kIHN0b3A7DQo+ICsgICAgIHUzMiBjbWRyOw0KPiArICAgICAvKlN0b3AgY29tbWFuZCBv bmx5IHVzZSBhZnRlciBkYXRhIGNvbW1hbmQqLw0KPiArICAgICBpZiAoIWNtZC0+ZGF0YSkNCj4g KyAgICAgICAgICAgICByZXR1cm47DQo+ICsNCj4gKyAgICAgbWVtc2V0KCZzdG9wLCAwLCBzaXpl b2Yoc3RydWN0IG1tY19jb21tYW5kKSk7DQo+ICsNCj4gKyAgICAgaWYgKGNtZC0+b3Bjb2RlID09 IE1NQ19SRUFEX1NJTkdMRV9CTE9DSyB8fA0KPiArICAgICAgICAgY21kLT5vcGNvZGUgPT0gTU1D X1JFQURfTVVMVElQTEVfQkxPQ0sgfHwNCj4gKyAgICAgICAgIGNtZC0+b3Bjb2RlID09IE1NQ19X UklURV9CTE9DSyB8fA0KPiArICAgICAgICAgY21kLT5vcGNvZGUgPT0gTU1DX1dSSVRFX01VTFRJ UExFX0JMT0NLIHx8DQo+ICsgICAgICAgICBjbWQtPm9wY29kZSA9PSBNTUNfU0VORF9UVU5JTkdf QkxPQ0sgfHwNCj4gKyAgICAgICAgIGNtZC0+b3Bjb2RlID09IE1NQ19TRU5EX1RVTklOR19CTE9D S19IUzIwMCkgew0KPiArICAgICAgICAgICAgIHN0b3Aub3Bjb2RlID0gTU1DX1NUT1BfVFJBTlNN SVNTSU9OOw0KPiArICAgICAgICAgICAgIHN0b3AuYXJnID0gMDsNCj4gKyAgICAgICAgICAgICBz dG9wLmZsYWdzID0gTU1DX1JTUF9SMSB8IE1NQ19DTURfQUM7DQo+ICsgICAgIH0gZWxzZSBpZiAo Y21kLT5vcGNvZGUgPT0gU0RfSU9fUldfRVhURU5ERUQpIHsNCj4gKyAgICAgICAgICAgICBzdG9w Lm9wY29kZSA9IFNEX0lPX1JXX0RJUkVDVDsNCj4gKyAgICAgICAgICAgICBzdG9wLmFyZyB8PSAo MSA8PCAzMSkgfCAoMCA8PCAyOCkgfCAoU0RJT19DQ0NSX0FCT1JUIDw8IDkpIHwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAoKGNtZC0+YXJnID4+IDI4KSAmIDB4Nyk7DQo+ICsgICAgICAg ICAgICAgc3RvcC5mbGFncyA9IE1NQ19SU1BfU1BJX1I1IHwgTU1DX1JTUF9SNSB8IE1NQ19DTURf QUM7DQo+ICsgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgcmV0dXJuOw0KPiArICAgICB9 DQo+ICsNCj4gKyAgICAgY21kciA9IChzdG9wLm9wY29kZSA8PCA4KSB8IFNETU1DX1JFU1BfTEVO XzQ4IHwNCj4gKyAgICAgICAgICAgICBTRE1NQ19DTURfQ0hLX1JFU1BfQ1JDIHwgU0RNTUNfQ01E X0lEWF9DSEtfRU5BQkxFOw0KPiArICAgICBjbWRyIHw9IChTRE1NQ19BQk9SVF9DTUQgPDwgNik7 DQo+ICsgICAgIG1jaV93cml0ZXcoaG9zdCwgWEZFUl9NT0RFX1IsIDApOw0KPiArICAgICBtY2lf d3JpdGVsKGhvc3QsIEFSR1VNRU5UX1IsIHN0b3AuYXJnKTsNCj4gKyAgICAgZHdfbWNpX2NxZV9z dGFydF9jb21tYW5kKGhvc3QsICZzdG9wLCBjbWRyKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBkd19tY2lfY3FlX3dhaXRfd2hpbGVfYnVzeShzdHJ1Y3QgZHdfbWNpICpob3N0LCB1MzIgKnN0 YXR1cykNCj4gK3sNCj4gKyAgICAgc3RydWN0IG1tY19jb21tYW5kIGNtZDsNCj4gKyAgICAgdTMy IGNtZHI7DQo+ICsgICAgIHUzMiBjdXJfc3RhdGU7DQo+ICsgICAgIHVuc2lnbmVkIGxvbmcgdGlt ZWVuZDsNCj4gKyAgICAgaW50IGVyciA9IDA7DQo+ICsNCj4gKyAgICAgbWVtc2V0KCZjbWQsIDAs IHNpemVvZihzdHJ1Y3QgbW1jX2NvbW1hbmQpKTsNCj4gKw0KPiArICAgICB0aW1lZW5kID0gamlm ZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNjAwKTsNCj4gKw0KPiArICAgICBkbyB7DQo+ICsgICAg ICAgICAgICAgY21kLm9wY29kZSA9IE1NQ19TRU5EX1NUQVRVUzsNCj4gKyAgICAgICAgICAgICBj bWQuYXJnID0gMSA8PCAxNjsNCj4gKyAgICAgICAgICAgICBjbWQuZmxhZ3MgPSBNTUNfUlNQX1NQ SV9SMiB8IE1NQ19SU1BfUjEgfCBNTUNfQ01EX0FDOw0KPiArICAgICAgICAgICAgIGNtZC5kYXRh ID0gTlVMTDsNCj4gKw0KPiArICAgICAgICAgICAgIGNtZHIgPSAoY21kLm9wY29kZSA8PCA4KSB8 IFNETU1DX1JFU1BfTEVOXzQ4IHwNCj4gKyAgICAgICAgICAgICAgICAgICAgIFNETU1DX0NNRF9D SEtfUkVTUF9DUkMgfCBTRE1NQ19DTURfSURYX0NIS19FTkFCTEU7DQo+ICsNCj4gKyAgICAgICAg ICAgICBtY2lfd3JpdGV3KGhvc3QsIFhGRVJfTU9ERV9SLCAwKTsNCj4gKyAgICAgICAgICAgICBt Y2lfd3JpdGVsKGhvc3QsIEFSR1VNRU5UX1IsIGNtZC5hcmcpOw0KPiArDQo+ICsgICAgICAgICAg ICAgZXJyID0gZHdfbWNpX2NxZV9zdGFydF9jb21tYW5kKGhvc3QsICZjbWQsIGNtZHIpOw0KPiAr ICAgICAgICAgICAgIGlmIChlcnIpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGR3X21jaV9j cWVfcmVzZXQoaG9zdCk7DQo+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAg ICAgICAgICB9DQo+ICsgICAgICAgICAgICAgZHdfbWNpX2NxZV9yZWFkX3JzcChob3N0LCAmY21k LCBjbWQucmVzcCk7DQo+ICsNCj4gKyAgICAgICAgICAgICAqc3RhdHVzID0gY21kLnJlc3BbMF07 DQo+ICsgICAgICAgICAgICAgY3VyX3N0YXRlID0gUjFfQ1VSUkVOVF9TVEFURShjbWQucmVzcFsw XSk7DQo+ICsgICAgICAgICAgICAgZXJyID0gLURXX01DSV9OT1RfUkVBRFk7DQo+ICsgICAgICAg ICAgICAgaWYgKGN1cl9zdGF0ZSA9PSBSMV9TVEFURV9UUkFOKSB7DQo+ICsgICAgICAgICAgICAg ICAgICAgICBpZiAoY21kLnJlc3BbMF0gJiBSMV9SRUFEWV9GT1JfREFUQSkgew0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSAwOw0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsNCj4gKyAgICAgICAgICAgICAgICAgICAgIH0NCj4gKyAgICAgICAgICAg ICB9DQo+ICsgICAgIH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVlbmQpKTsNCj4g Kw0KPiArICAgICByZXR1cm4gZXJyOw0KPiArDQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGR3 X21jaV9jcWVfc3RvcF9kbWEoc3RydWN0IGR3X21jaSAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpk YXRhKQ0KPiArew0KPiArICAgICB1MzIgZGlyID0gMDsNCj4gKw0KPiArICAgICBpZiAoZGF0YS0+ ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKQ0KPiArICAgICAgICAgICAgIGRpciA9IERNQV9GUk9NX0RF VklDRTsNCj4gKyAgICAgZWxzZQ0KPiArICAgICAgICAgICAgIGRpciA9IERNQV9UT19ERVZJQ0U7 DQo+ICsNCj4gKyAgICAgZG1hX3VubWFwX3NnKG1tY19kZXYoaG9zdC0+c2xvdC0+bW1jKSwgZGF0 YS0+c2csIGRhdGEtPnNnX2xlbiwgZGlyKTsNCj4gKyAgICAgaG9zdC0+c2cgPSBOVUxMOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBkd19tY2lfY3FlX3ByZXBhcmVfZGVzYzY0KHN0cnVjdCBk d19tY2kgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQ0KPiArew0KPiArICAg ICBkZXZfaW5mbyhob3N0LT5kZXYsICJDdXJyZW50bHksIHRoZSA2NGJpdCBETUEgbW9kZSBpcyBu b3QgaW1wbGVtZW50ZWQgeWV0LlxuIik7DQo+ICt9DQo+ICsNCj4gKw0KPiArc3RhdGljIHZvaWQg ZHdfbWNpX2NxZV9wcmVwYXJlX2Rlc2MzMihzdHJ1Y3QgZHdfbWNpICpob3N0LCBzdHJ1Y3QgbW1j X2RhdGEgKmRhdGEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHNjYXR0ZXJsaXN0ICpzZykNCj4gK3sNCj4gKyAgICAgdTMyICBibGtfY250LCBjdXJfYmxr X2NudCwgcmVtYWluX2Jsa19jbnQ7DQo+ICsgICAgIHUzMiAgdG1wX3ZhbDsNCj4gKyAgICAgdTMy ICpkZXNjX2Jhc2UgPSBob3N0LT5zZ19jcHU7DQo+ICsgICAgIHUzMiAgZG1hX2xlbiA9IDA7DQo+ ICsgICAgIHUzMiAgZG1hX2FkZHI7DQo+ICsgICAgIHUzMiAgaTsNCj4gKyAgICAgdW5zaWduZWQg aW50IGJlZ2luLCBlbmQ7DQo+ICsNCj4gKyAgICAgZm9yIChpID0gMDsgaSA8IGhvc3QtPmRtYV9u ZW50czsgaSsrLCBzZysrKSB7DQo+ICsgICAgICAgICAgICAgZG1hX2xlbiA9IHNnX2RtYV9sZW4o c2cpOw0KPiArDQo+ICsgICAgICAgICAgICAgLypibGtfY250IG11c3QgYmUgdGhlIG11bHRpcGxl IG9mIDUxMigweDIwMCkqLw0KPiArICAgICAgICAgICAgIGlmIChkbWFfbGVuIDwgU1pfNTEyKQ0K PiArICAgICAgICAgICAgICAgICAgICAgYmxrX2NudCA9IDE7DQo+ICsgICAgICAgICAgICAgZWxz ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgYmxrX2NudCAgPSBkbWFfbGVuID4+IDk7DQo+ICsN Cj4gKyAgICAgICAgICAgICByZW1haW5fYmxrX2NudCAgPSBibGtfY250Ow0KPiArICAgICAgICAg ICAgIGRtYV9hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOw0KPiArDQo+ICsgICAgICAgICAgICAg d2hpbGUgKHJlbWFpbl9ibGtfY250KSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAvKkRXX01D SV9NQVhfU0NSSVBUX0JMSyBpcyB0aGUgbWF4DQo+ICsgICAgICAgICAgICAgICAgICAgICAgKiBm b3IgZWFjaCBkZXNjcmlwdG9yIHJlY29yZA0KPiArICAgICAgICAgICAgICAgICAgICAgICovDQo+ ICsgICAgICAgICAgICAgICAgICAgICBpZiAocmVtYWluX2Jsa19jbnQgPiBEV19NQ0lfTUFYX1ND UklQVF9CTEspDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9ibGtfY250ID0g RFdfTUNJX01BWF9TQ1JJUFRfQkxLOw0KPiArICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfYmxrX2NudCA9IHJlbWFpbl9ibGtfY250 Ow0KPiArDQo+ICsgICAgICAgICAgICAgICAgICAgICAvKiBJbiBTeW5vcHN5cyBEZXNpZ25XYXJl IERhdGFib29rIFBhZ2UgODQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgKiBUaGV5IG1lbnRp b25lZCB0aGUgRE1BIDEyOE1CIHJlc3RyaWN0aW9uDQo+ICsgICAgICAgICAgICAgICAgICAgICAg Ki8NCj4gKyAgICAgICAgICAgICAgICAgICAgIGJlZ2luID0gZG1hX2FkZHIgLyBTWl8xMjhNOw0K PiArICAgICAgICAgICAgICAgICAgICAgZW5kID0gKGRtYV9hZGRyICsgY3VyX2Jsa19jbnQgKiBT Wl81MTIpIC8gU1pfMTI4TTsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgLypJZiBiZWdp biBhbmQgZW5kIGluIHRoZSBkaWZmZXJlbnQgMTI4TUIgbWVtb3J5IHpvbmUqLw0KPiArICAgICAg ICAgICAgICAgICAgICAgaWYgKGJlZ2luICE9IGVuZCkNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY3VyX2Jsa19jbnQgPSAoZW5kICogU1pfMTI4TSAtIGRtYV9hZGRyKSAvIFNaXzUx MjsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgaWYgKGRtYV9sZW4gPCBTWl81MTIpDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF92YWwgPSAoKGRtYV9sZW4pIDw8IDE2 KSB8IFZBTElEKDB4MSkgfCBBQ1QoMHg0KTsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGVsc2UN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX3ZhbCA9ICgoY3VyX2Jsa19jbnQg JiAweDdmKSA8PCAyNSkgfCBWQUxJRCgweDEpIHwgQUNUKDB4NCk7DQo+ICsNCj4gKyAgICAgICAg ICAgICAgICAgICAgIC8qTGFzdCBkZXNjcmlwdG9yKi8NCj4gKyAgICAgICAgICAgICAgICAgICAg IGlmIChpID09IGhvc3QtPmRtYV9uZW50cyAtIDEgJiYgcmVtYWluX2Jsa19jbnQgPT0gY3VyX2Js a19jbnQpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF92YWwgfD0gRU5EKDB4 MSk7DQo+ICsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGRlc2NfYmFzZVswXSA9ICB0bXBfdmFs Ow0KPiArICAgICAgICAgICAgICAgICAgICAgZGVzY19iYXNlWzFdID0gIGRtYV9hZGRyOw0KPiAr DQo+ICsgICAgICAgICAgICAgICAgICAgICBkbWFfYWRkciA9IGRtYV9hZGRyICsgKGN1cl9ibGtf Y250IDw8IDkpOw0KPiArICAgICAgICAgICAgICAgICAgICAgcmVtYWluX2Jsa19jbnQgLT0gY3Vy X2Jsa19jbnQ7DQo+ICsgICAgICAgICAgICAgICAgICAgICBkZXNjX2Jhc2UgKz0gMjsNCj4gKyAg ICAgICAgICAgICB9DQo+ICsgICAgIH0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZHdfbWNp X2NxZV9wcmVfcmVxKHN0cnVjdCBtbWNfaG9zdCAqbW1jLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpDQo+ICt7DQo+ICsgICAgIHN0cnVjdCBkd19t Y2lfc2xvdCAqc2xvdCA9IG1tY19wcml2KG1tYyk7DQo+ICsgICAgIHN0cnVjdCBkd19tY2kgKmhv c3QgPSBzbG90LT5ob3N0Ow0KPiArICAgICBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBtcnEtPmRh dGE7DQo+ICsgICAgIHVuc2lnbmVkIGludCBzZ19sZW47DQo+ICsNCj4gKyAgICAgaWYgKCFzbG90 LT5ob3N0LT51c2VfZG1hIHx8ICFkYXRhKQ0KPiArICAgICAgICAgICAgIHJldHVybjsNCj4gKw0K PiArICAgICAvKiBUaGlzIGRhdGEgbWlnaHQgYmUgdW5tYXBwZWQgYXQgdGhpcyB0aW1lICovDQo+ ICsgICAgIGRhdGEtPmhvc3RfY29va2llID0gQ09PS0lFX1VOTUFQUEVEOw0KPiArDQo+ICsgICAg IHNnX2xlbiA9IGRtYV9tYXBfc2coaG9zdC0+ZGV2LA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgIGRhdGEtPnNnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNnX2xlbiwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBtbWNfZ2V0X2RtYV9kaXIoZGF0YSkpOw0KPiAr ICAgICBpZiAoc2dfbGVuIDwgMCkNCj4gKyAgICAgICAgICAgICBkYXRhLT5ob3N0X2Nvb2tpZSA9 IENPT0tJRV9VTk1BUFBFRDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZHdfbWNpX2NxZV9w b3N0X3JlcShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgZXJyKQ0KPiArew0KPiArICAgICBzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3QgPSBtbWNfcHJp dihtbWMpOw0KPiArICAgICBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBtcnEtPmRhdGE7DQo+ICsN Cj4gKyAgICAgaWYgKCFzbG90LT5ob3N0LT51c2VfZG1hIHx8ICFkYXRhKQ0KPiArICAgICAgICAg ICAgIHJldHVybjsNCj4gKw0KPiArICAgICBpZiAoZGF0YS0+aG9zdF9jb29raWUgIT0gQ09PS0lF X1VOTUFQUEVEKQ0KPiArICAgICAgICAgICAgIGRtYV91bm1hcF9zZyhzbG90LT5ob3N0LT5kZXYs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNnLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICBkYXRhLT5zZ19sZW4sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg IG1tY19nZXRfZG1hX2RpcihkYXRhKSk7DQo+ICsgICAgIGRhdGEtPmhvc3RfY29va2llID0gQ09P S0lFX1VOTUFQUEVEOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGR3X21jaV9jcWVfZ2V0X2Nk KHN0cnVjdCBtbWNfaG9zdCAqbW1jKQ0KPiArew0KPiArICAgICBzdHJ1Y3QgZHdfbWNpX3Nsb3Qg KnNsb3QgPSBtbWNfcHJpdihtbWMpOw0KPiArICAgICBzdHJ1Y3QgZHdfbWNpICpob3N0ID0gc2xv dC0+aG9zdDsNCj4gKyAgICAgaW50IGdwaW9fY2QgPSBtbWNfZ3Bpb19nZXRfY2QobW1jKTsNCj4g KyAgICAgaW50IHByZXNlbnQgPSAtMTsNCj4gKw0KPiArICAgICAvKiBVc2UgcGxhdGZvcm0gZ2V0 X2NkIGZ1bmN0aW9uLCBlbHNlIHRyeSBvbmJvYXJkIGNhcmQgZGV0ZWN0ICovDQo+ICsgICAgIGlm ICgoKG1tYy0+Y2FwcyAmIE1NQ19DQVBfTkVFRFNfUE9MTCkNCj4gKyAgICAgICAgICAgICB8fCAh bW1jX2NhcmRfaXNfcmVtb3ZhYmxlKG1tYykpKSB7DQo+ICsgICAgICAgICAgICAgcHJlc2VudCA9 IDE7DQo+ICsNCj4gKyAgICAgICAgICAgICBpZiAoIXRlc3RfYml0KERXX01NQ19DQVJEX1BSRVNF TlQsICZzbG90LT5mbGFncykpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChtbWMtPmNh cHMgJiBNTUNfQ0FQX05FRURTX1BPTEwpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGV2X2luZm8oJm1tYy0+Y2xhc3NfZGV2LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJjYXJkIGlzIHBvbGxpbmcuXG4iKTsNCj4gKyAgICAgICAgICAgICAgICAg ICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9pbmZvKCZt bWMtPmNsYXNzX2RldiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi Y2FyZCBpcyBub24tcmVtb3ZhYmxlLlxuIik7DQo+ICsgICAgICAgICAgICAgICAgICAgICB9DQo+ ICsgICAgICAgICAgICAgICAgICAgICBzZXRfYml0KERXX01NQ19DQVJEX1BSRVNFTlQsICZzbG90 LT5mbGFncyk7DQo+ICsgICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICAgcmV0dXJu IHByZXNlbnQ7DQo+ICsgICAgIH0gZWxzZSBpZiAoZ3Bpb19jZCA+PSAwKSB7DQo+ICsgICAgICAg ICAgICAgcHJlc2VudCA9IGdwaW9fY2Q7DQo+ICsgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAg ICAgLypTRCBjYXJkIGRldGVjdCB1c2luZyBJUCByZWdzIGlzIHRvZG8qLw0KPiArICAgICAgICAg ICAgIGRldl9lcnIoJm1tYy0+Y2xhc3NfZGV2LCAiU0QgY2FyZCBkZXRlY3QgdXNpbmcgSVAgcmVn cyBpcyBUb0RvLlxuIik7DQo+ICsgICAgIH0NCj4gKw0KPiArICAgICBzcGluX2xvY2tfYmgoJmhv c3QtPmxvY2spOw0KPiArDQo+ICsgICAgIGlmIChwcmVzZW50ICYmICF0ZXN0X2FuZF9zZXRfYml0 KERXX01NQ19DQVJEX1BSRVNFTlQsICZzbG90LT5mbGFncykpDQo+ICsgICAgICAgICAgICAgZGV2 X2RiZygmbW1jLT5jbGFzc19kZXYsICJjYXJkIGlzIHByZXNlbnRcbiIpOw0KPiArICAgICBlbHNl IGlmICghcHJlc2VudCAmJg0KPiArICAgICAgICAgICAgICF0ZXN0X2FuZF9jbGVhcl9iaXQoRFdf TU1DX0NBUkRfUFJFU0VOVCwgJnNsb3QtPmZsYWdzKSkNCj4gKyAgICAgICAgICAgICBkZXZfZGJn KCZtbWMtPmNsYXNzX2RldiwgImNhcmQgaXMgbm90IHByZXNlbnRcbiIpOw0KPiArDQo+ICsgICAg IHNwaW5fdW5sb2NrX2JoKCZob3N0LT5sb2NrKTsNCj4gKw0KPiArICAgICByZXR1cm4gcHJlc2Vu dDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZHdfbWNpX2NxZV9zdWJtaXRfZGF0YV9kbWEo c3RydWN0IGR3X21jaSAqaG9zdCkNCj4gK3sNCj4gKyAgICAgaWYgKGhvc3QtPmRtYV82NGJpdF9h ZGRyZXNzID09IDEpDQo+ICsgICAgICAgICAgICAgZHdfbWNpX2NxZV9wcmVwYXJlX2Rlc2M2NCho b3N0LCBob3N0LT5kYXRhLCBob3N0LT5zZyk7DQo+ICsgICAgIGVsc2UNCj4gKyAgICAgICAgICAg ICBkd19tY2lfY3FlX3ByZXBhcmVfZGVzYzMyKGhvc3QsIGhvc3QtPmRhdGEsIGhvc3QtPnNnKTsN Cj4gKw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBkd19tY2lfY3FlX3N1Ym1pdF9kYXRhKHN0 cnVjdCBkd19tY2kgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkNCj4gK3sNCj4gKyAgICAg dTMyIGRpciA9IDA7DQo+ICsNCj4gKyAgICAgaG9zdC0+c2cgPSBOVUxMOw0KPiArICAgICBob3N0 LT5kYXRhID0gZGF0YTsNCj4gKw0KPiArICAgICBpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9S RUFEKQ0KPiArICAgICAgICAgICAgIGRpciA9IERNQV9GUk9NX0RFVklDRTsNCj4gKyAgICAgZWxz ZQ0KPiArICAgICAgICAgICAgIGRpciA9IERNQV9UT19ERVZJQ0U7DQo+ICsNCj4gKyAgICAgaG9z dC0+ZG1hX25lbnRzID0gZG1hX21hcF9zZyhtbWNfZGV2KGhvc3QtPnNsb3QtPm1tYyksDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2csIGRhdGEtPnNnX2xl biwgZGlyKTsNCj4gKyAgICAgaG9zdC0+c2cgPSBkYXRhLT5zZzsNCj4gKw0KPiArICAgICBob3N0 LT51c2luZ19kbWEgPSAxOw0KPiArDQo+ICsgICAgIGR3X21jaV9jcWVfc3VibWl0X2RhdGFfZG1h KGhvc3QpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBkd19tY2lfY3FlX3NldHVwX2J1cyhz dHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3QsIGJvb2wgZm9yY2VfY2xraW5pdCkNCj4gK3sNCj4gKyAg ICAgc3RydWN0IGR3X21jaSAqaG9zdCA9IHNsb3QtPmhvc3Q7DQo+ICsgICAgIGNvbnN0IHN0cnVj dCBkd19tY2lfZHJ2X2RhdGEgKmRydl9kYXRhID0gaG9zdC0+ZHJ2X2RhdGE7DQo+ICsgICAgIHVu c2lnbmVkIGludCBjbG9jayA9IHNsb3QtPmNsb2NrOw0KPiArICAgICB1MzIgZGl2ID0gMDsNCj4g Kw0KPiArICAgICBzbG90LT5tbWMtPmFjdHVhbF9jbG9jayA9IDA7DQo+ICsNCj4gKyAgICAgaWYg KGNsb2NrICE9IGhvc3QtPmN1cnJlbnRfc3BlZWQgfHwgZm9yY2VfY2xraW5pdCkgew0KPiArICAg ICAgICAgICAgIGRpdiA9IGhvc3QtPmJ1c19oeiAvIGNsb2NrOw0KPiArICAgICAgICAgICAgIGlm IChob3N0LT5idXNfaHogJSBjbG9jaykNCj4gKyAgICAgICAgICAgICAgICAgICAgIGRpdiArPSAx Ow0KPiArDQo+ICsgICAgICAgICAgICAgaWYgKGNsb2NrICE9IHNsb3QtPl9fY2xrX29sZCkgew0K PiArICAgICAgICAgICAgICAgICAgICAgLyogU2lsZW50IHRoZSB2ZXJib3NlIGxvZyBpZiBjYWxs aW5nIGZyb20gUE0gY29udGV4dCAqLw0KPiArICAgICAgICAgICAgICAgICAgICAgZGV2X2luZm8o JnNsb3QtPm1tYy0+Y2xhc3NfZGV2LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi QnVzIHNwZWVkIChzbG90ICVkKSA9ICVkSHogKHNsb3QgcmVxICVkSHosIGFjdHVhbCAlZEhaIGRp diA9ICVkKVxuIiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+aWQsIGhv c3QtPmJ1c19oeiwgY2xvY2ssIGhvc3QtPmJ1c19oeiAvIGRpdiwgZGl2KTsNCj4gKyAgICAgICAg ICAgICB9DQo+ICsNCj4gKyAgICAgICAgICAgICBzbG90LT5fX2Nsa19vbGQgPSBjbG9jazsNCj4g KyAgICAgICAgICAgICBzbG90LT5tbWMtPmFjdHVhbF9jbG9jayA9IGhvc3QtPmJ1c19oeiAvIGRp djsNCj4gKw0KPiArICAgICAgICAgICAgIGlmIChkcnZfZGF0YSAmJiBkcnZfZGF0YS0+c2V0X2lv cykNCj4gKyAgICAgICAgICAgICAgICAgICAgIGRydl9kYXRhLT5zZXRfaW9zKHNsb3QsICZzbG90 LT5tbWMtPmlvcyk7DQo+ICsgICAgIH0NCj4gK30NCj4gKw0KPiArDQo+ICtzdGF0aWMgdm9pZCBk d19tY2lfY3FlX2Vycl9oYW5kbGUoc3RydWN0IGR3X21jaSAqaG9zdCwgc3RydWN0IG1tY19jb21t YW5kICpjbWQpDQo+ICt7DQo+ICsgICAgIHUzMiBzdGF0dXMgPSAwOw0KPiArICAgICBpbnQgZXJy ID0gMDsNCj4gKyAgICAgaW50IHJ0eV9jbnQgPSAwOw0KPiArICAgICBpbnQgcHN0YXRfcnR5ID0g MDsNCj4gKw0KPiArICAgICBkbyB7DQo+ICsgICAgICAgICAgICAgbWNpX3dyaXRldyhob3N0LCBF UlJPUl9JTlRfU1RBVF9SLA0KPiArICAgICAgICAgICAgICAgICAgICAgbWNpX3JlYWR3KGhvc3Qs IEVSUk9SX0lOVF9TVEFUX1IpICYgMHhmZmZmKTsNCj4gKyAgICAgICAgICAgICAvKnN5bmNocm9u b3VzIGFib3J0OiBzdG9wIGhvc3QgZG1hKi8NCj4gKyAgICAgICAgICAgICBtY2lfd3JpdGViKGhv c3QsIEJHQVBfQ1RSTF9SLCBTRE1NQ19TVE9QX0JHX1JFUSk7DQo+ICsgICAgICAgICAgICAgZHdf bWNpX2NxZV93YWl0X2RvbmUoaG9zdCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICh1MzIgKiko aG9zdC0+cmVncyArIFNETU1DX05PUk1BTF9JTlRfU1RBVF9SKSwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU0RNTUNfWEZFUl9DT01QTEVURSwgU0RNTUNfWEZFUl9DT01QTEVURSk7 DQo+ICsNCj4gKyAgICAgICAgICAgICBtY2lfd3JpdGV3KGhvc3QsIE5PUk1BTF9JTlRfU1RBVF9S LCBTRE1NQ19YRkVSX0NPTVBMRVRFKTsNCj4gKw0KPiArICAgICAgICAgICAgIGRvIHsNCj4gKyAg ICAgICAgICAgICAgICAgICAgIGlmIChjbWQtPm9wY29kZSAhPSBNTUNfU0VORF9UVU5JTkdfQkxP Q0tfSFMyMDApIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdfbWNpX2NxZV9w cmVwX3N0b3BfYWJvcnQoaG9zdCwgY21kKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWRlbGF5KDEpOw0KPiArDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9 IGR3X21jaV9jcWVfd2FpdF93aGlsZV9idXN5KGhvc3QsICZzdGF0dXMpOw0KPiArDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJ0eV9jbnQrKzsNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHJ0eV9jbnQgPiAxMDApIHsNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoZXJyID09IC1EV19NQ0lfTk9UX1JFQURZKQ0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihob3N0LT5kZXYs ICJzdGF0dXMgY2hlY2sgZmFpbGVkLCBlcnIgPSAlZCwgc3RhdHVzID0gMHgleFxuIiwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLCBz dGF0dXMpOw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCj4gKyAgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr Ow0KPiArICAgICAgICAgICAgICAgICAgICAgfQ0KPiArICAgICAgICAgICAgIH0gd2hpbGUgKGVy cik7DQo+ICsNCj4gKyAgICAgICAgICAgICBtY2lfd3JpdGViKGhvc3QsIFNXX1JTVF9SLCBTRE1N Q19SU1RfQ01EIHwgU0RNTUNfUlNUX0RBVCk7DQo+ICsgICAgICAgICAgICAgZHdfbWNpX2NxZV93 YWl0X2RvbmUoaG9zdCwgKHUzMiAqKShob3N0LT5yZWdzICsgU0RNTUNfQ0xLX0NUUkxfUiksDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCSVQoMjUpfEJJVCgyNikpLCAwKTsNCj4g KyAgICAgICAgICAgICBkd19tY2lfY3FlX3dhaXRfZG9uZShob3N0LCAodTMyICopKGhvc3QtPnJl Z3MgKyBTRE1NQ19QU1RBVEVfUkVHKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KFNETU1DX0NNRF9JTkhJQklUIHwgU0RNTUNfQ01EX0lOSElCSVRfREFUKSwgMCk7DQo+ICsgICAg ICAgICAgICAgdWRlbGF5KDQwKTsNCj4gKw0KPiArICAgICAgICAgICAgIHBzdGF0X3J0eSsrOw0K PiArICAgICAgICAgICAgIGlmIChwc3RhdF9ydHkgPiA1MDAwKSB7DQo+ICsgICAgICAgICAgICAg ICAgICAgICBkZXZfZXJyKGhvc3QtPmRldiwgIndhaXQgcHN0YXRlIHJlZ2lzdGVyIGRhdGEgbGlu ZSByZWFkeSB0aW1lb3V0XG4iKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiAr ICAgICAgICAgICAgIH0NCj4gKyAgICAgfSB3aGlsZSAoKG1jaV9yZWFkbChob3N0LCBQU1RBVEVf UkVHKSAmIDB4ZjAwMDAwKSAhPSAweGYwMDAwMCB8fA0KPiArICAgICAgICAgICAgIChtY2lfcmVh ZGwoaG9zdCwgUFNUQVRFX1JFRykgJiAweGYwKSAhPSAweGYwKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgZHdfbWNpX2NxZV9zZW5kX3N0b3BfYWJvcnQoc3RydWN0IGR3X21jaSAqaG9zdCwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kKQ0K PiArew0KPiArICAgICBkd19tY2lfY3FlX3Jlc2V0KGhvc3QpOw0KPiArDQo+ICsgICAgIGlmIChj bWQtPmRhdGEpDQo+ICsgICAgICAgICAgICAgZHdfbWNpX2NxZV9lcnJfaGFuZGxlKGhvc3QsIGNt ZCk7DQo+ICsgICAgIGVsc2UNCj4gKyAgICAgICAgICAgICByZXR1cm47DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyB1MzIgZHdfbWNpX2NxZV9wcmVwYXJlX2RhdGFfZmxhZ3Moc3RydWN0IG1tY19jb21t YW5kICpjbWQpDQo+ICt7DQo+ICsgICAgIHUzMiBkYXRhZmxhZ3M7DQo+ICsgICAgIGludCByZWFk X2ZsYWcgPSAxOw0KPiArICAgICBpbnQgbXVsX2Jsa19mbGFnID0gMDsNCj4gKyAgICAgaW50IGF1 dG9fc3RvcF9mbGFnID0gMDsNCj4gKw0KPiArICAgICBpZiAoY21kLT5vcGNvZGUgPT0gTU1DX1dS SVRFX0JMT0NLIHx8DQo+ICsgICAgICAgIGNtZC0+b3Bjb2RlID09IE1NQ19XUklURV9NVUxUSVBM RV9CTE9DSyB8fA0KPiArICAgICAgICBjbWQtPm9wY29kZSA9PSBNTUNfTE9DS19VTkxPQ0sgfHwN Cj4gKyAgICAgICAgKGNtZC0+b3Bjb2RlID09IE1NQ19HRU5fQ01EICYmIGNtZC0+YXJnID09IDAp KQ0KPiArICAgICAgICAgICAgIHJlYWRfZmxhZyA9IDA7DQo+ICsNCj4gKyAgICAgaWYgKGNtZC0+ b3Bjb2RlID09IE1NQ19XUklURV9NVUxUSVBMRV9CTE9DSyB8fA0KPiArICAgICAgICBjbWQtPm9w Y29kZSA9PSBNTUNfUkVBRF9NVUxUSVBMRV9CTE9DSykgew0KPiArICAgICAgICAgICAgIG11bF9i bGtfZmxhZyA9IDE7DQo+ICsgICAgICAgICAgICAgYXV0b19zdG9wX2ZsYWcgPSAxOw0KPiArICAg ICB9DQo+ICsNCj4gKyAgICAgZGF0YWZsYWdzID0gKG11bF9ibGtfZmxhZyA8PCBTRE1NQ19NVUxU SV9CTEtfU0VMKSB8DQo+ICsgICAgICAgICAgICAgICAgIChyZWFkX2ZsYWcgPDwgU0RNTUNfREFU QV9YRkVSX0RJUikgfA0KPiArICAgICAgICAgICAgICAgICAoYXV0b19zdG9wX2ZsYWcgPDwgU0RN TUNfQVVUT19DTURfRU5BQkxFKSB8DQo+ICsgICAgICAgICAgICAgICAgIChTRE1NQ19CTE9DS19D T1VOVF9FTkFCTEUpIHwNCj4gKyAgICAgICAgICAgICAgICAgKFNETU1DX0RNQV9FTkFCTEUpOw0K PiArDQo+ICsgICAgIHJldHVybiBkYXRhZmxhZ3M7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQg ZHdfbWNpX2NxZV9jb21tYW5kX2NvbXBsZXRlKHN0cnVjdCBkd19tY2kgKmhvc3QsIHUxNiBpbnRl cnJ1cHQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjbWRf ZXJyb3IpDQo+ICt7DQo+ICsgICAgIGlmIChpbnRlcnJ1cHQgJiAoU0RNTUNfQ01EX0lEWF9FUlIg fCBTRE1NQ19DTURfRU5EX0JJVF9FUlINCj4gKyAgICAgICAgICAgICB8IFNETU1DX0NNRF9DUkNf RVJSKSkgew0KPiArICAgICAgICAgICAgIGlmIChob3N0LT50dW5pbmcpDQo+ICsgICAgICAgICAg ICAgICAgICAgICAqY21kX2Vycm9yID0gLVRVTklOR19FUlI7DQo+ICsgICAgICAgICAgICAgZWxz ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgKmNtZF9lcnJvciA9IC1FSUxTRVE7DQo+ICsgICAg IH0gZWxzZSBpZiAoaW50ZXJydXB0ICYgU0RNTUNfQ01EX1RPVVRfRVJSKSB7DQo+ICsgICAgICAg ICAgICAgaWYgKGhvc3QtPnR1bmluZykNCj4gKyAgICAgICAgICAgICAgICAgICAgICpjbWRfZXJy b3IgPSAtVFVOSU5HX0VSUjsNCj4gKyAgICAgICAgICAgICBlbHNlDQo+ICsgICAgICAgICAgICAg ICAgICAgICAqY21kX2Vycm9yID0gLUVUSU1FRE9VVDsNCj4gKyAgICAgfSBlbHNlIHsNCj4gKyAg ICAgICAgICAgICAqY21kX2Vycm9yID0gMDsNCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIHJldHVy biAqY21kX2Vycm9yOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGR3X21jaV9jcWVfZGF0YV9j b21wbGV0ZShzdHJ1Y3QgZHdfbWNpICpob3N0LCB1MTYgaW50ZXJydXB0LA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZGF0YV9lcnJvcikNCj4gK3sNCj4gKyAg ICAgaWYgKGludGVycnVwdCAmIChTRE1NQ19EQVRBX0VORF9CSVRfRVJSIHwgU0RNTUNfREFUQV9D UkNfRVJSKSkgew0KPiArICAgICAgICAgICAgIGlmIChob3N0LT50dW5pbmcpDQo+ICsgICAgICAg ICAgICAgICAgICAgICAqZGF0YV9lcnJvciA9IC1UVU5JTkdfRVJSOw0KPiArICAgICAgICAgICAg IGVsc2UNCj4gKyAgICAgICAgICAgICAgICAgICAgICpkYXRhX2Vycm9yID0gLUVJTFNFUTsNCj4g KyAgICAgfSBlbHNlIGlmIChpbnRlcnJ1cHQgJiBTRE1NQ19EQVRBX1RPVVRfRVJSKSB7DQo+ICsg ICAgICAgICAgICAgaWYgKGhvc3QtPnR1bmluZykNCj4gKyAgICAgICAgICAgICAgICAgICAgICpk YXRhX2Vycm9yID0gLVRVTklOR19FUlI7DQo+ICsgICAgICAgICAgICAgZWxzZQ0KPiArICAgICAg ICAgICAgICAgICAgICAgKmRhdGFfZXJyb3IgPSAtRVRJTUVET1VUOw0KPiArICAgICB9IGVsc2Ug aWYgKGludGVycnVwdCAmIFNETU1DX0FETUFfRVJSKSB7DQo+ICsgICAgICAgICAgICAgKmRhdGFf ZXJyb3IgPSAtRUlPOw0KPiArICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgICpkYXRhX2Vy cm9yID0gMDsNCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIHJldHVybiAqZGF0YV9lcnJvcjsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgX19kd19tY2lfY3FlX3N0YXJ0X3JlcXVlc3Qoc3RydWN0 IGR3X21jaSAqaG9zdCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGR3X21jaV9zbG90ICpzbG90LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCkNCj4gK3sNCj4gKyAgICAgc3RydWN0IG1tY19kYXRhICpk YXRhOw0KPiArICAgICB1MzIgY21kZmxhZ3M7DQo+ICsgICAgIHUzMiBkYXRhZmxhZ3M7DQo+ICsg ICAgIGludCByZXQgPSAwOw0KPiArDQo+ICsgICAgIGRhdGEgPSBjbWQtPmRhdGE7DQo+ICsNCj4g KyAgICAgaWYgKGRhdGEpIHsNCj4gKyAgICAgICAgICAgICBtY2lfd3JpdGV3KGhvc3QsIEJMT0NL Q09VTlRfUiwgZGF0YS0+YmxvY2tzKTsNCj4gKyAgICAgICAgICAgICBtY2lfd3JpdGVsKGhvc3Qs IEJMT0NLU0laRV9SLCBkYXRhLT5ibGtzeik7DQo+ICsgICAgICAgICAgICAgbWNpX3dyaXRlbCho b3N0LCBBRE1BX1NBX0xPV19SLCBob3N0LT5zZ19kbWEpOw0KPiArDQo+ICsgICAgICAgICAgICAg ZGF0YWZsYWdzID0gZHdfbWNpX2NxZV9wcmVwYXJlX2RhdGFfZmxhZ3MoY21kKTsNCj4gKw0KPiAr ICAgICAgICAgICAgIG1jaV93cml0ZXcoaG9zdCwgWEZFUl9NT0RFX1IsIGRhdGFmbGFncyk7DQo+ ICsgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgaWYgKGNtZC0+b3Bjb2RlID09IE1NQ19T RVRfQkxPQ0tfQ09VTlQpDQo+ICsgICAgICAgICAgICAgICAgICAgICBob3N0LT5pc19zYmMgPSAx Ow0KPiArICAgICAgICAgICAgIGVsc2UNCj4gKyAgICAgICAgICAgICAgICAgICAgIGhvc3QtPmlz X3NiYyA9IDA7DQo+ICsNCj4gKyAgICAgICAgICAgICBtY2lfd3JpdGV3KGhvc3QsIFhGRVJfTU9E RV9SLCAwKTsNCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIG1jaV93cml0ZWwoaG9zdCwgQVJHVU1F TlRfUiwgY21kLT5hcmcpOw0KPiArDQo+ICsgICAgIGNtZGZsYWdzID0gZHdfbWNpX2NxZV9wcmVw YXJlX2NvbW1hbmQoc2xvdC0+bW1jLCBjbWQpOw0KPiArDQo+ICsgICAgIGlmIChkYXRhKSB7DQo+ ICsgICAgICAgICAgICAgZGF0YS0+Ynl0ZXNfeGZlcmVkID0gMDsNCj4gKyAgICAgICAgICAgICBp ZiAoaG9zdC0+dXNlX2RtYSA9PSBUUkFOU19NT0RFX0RNQSkgew0KPiArICAgICAgICAgICAgICAg ICAgICAgZHdfbWNpX2NxZV9zdWJtaXRfZGF0YShob3N0LCBkYXRhKTsNCj4gKyAgICAgICAgICAg ICAgICAgICAgIHdtYigpOyAvKiBkcmFpbiB3cml0ZWJ1ZmZlciAqLw0KPiArICAgICAgICAgICAg IH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAvKlVzaW5nIFBJTyBtb2RlKi8NCj4g KyAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoaG9zdC0+ZGV2LCAicGlvIG1vZGUgaXMgbm90 IHN1cHBvcnRlZCBjdXJyZW50bHlcbiIpOw0KPiArICAgICAgICAgICAgIH0NCj4gKyAgICAgfQ0K PiArDQo+ICsgICAgIHJldCA9IGR3X21jaV9jcWVfc3RhcnRfY29tbWFuZChob3N0LCBjbWQsIGNt ZGZsYWdzKTsNCj4gKw0KPiArICAgICBpZiAocmV0ID09IDApIHsNCj4gKyAgICAgICAgICAgICBk d19tY2lfY3FlX3JlYWRfcnNwKGhvc3QsIGNtZCwgY21kLT5yZXNwKTsNCj4gKw0KPiArICAgICAg ICAgICAgIGlmIChkYXRhKQ0KPiArICAgICAgICAgICAgICAgICAgICAgZGF0YS0+Ynl0ZXNfeGZl cmVkICs9IChkYXRhLT5ibG9ja3MgKiBkYXRhLT5ibGtzeik7DQo+ICsgICAgIH0NCj4gKw0KPiAr ICAgICBkd19tY2lfY3FlX2NvbW1hbmRfY29tcGxldGUoaG9zdCwgaG9zdC0+ZXJyb3JfaW50ZXJy dXB0LCAmY21kLT5lcnJvcik7DQo+ICsgICAgIGlmIChkYXRhKSB7DQo+ICsgICAgICAgICAgICAg ZHdfbWNpX2NxZV9kYXRhX2NvbXBsZXRlKGhvc3QsIGhvc3QtPmVycm9yX2ludGVycnVwdCwgJmRh dGEtPmVycm9yKTsNCj4gKyAgICAgICAgICAgICBpZiAoaG9zdC0+dXNlX2RtYSA9PSBUUkFOU19N T0RFX0RNQSkNCj4gKyAgICAgICAgICAgICAgICAgICAgIGR3X21jaV9jcWVfc3RvcF9kbWEoaG9z dCwgZGF0YSk7DQo+ICsgICAgICAgICAgICAgZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAgICAg ICAvKlVzaW5nIFBJTyBtb2RlKi8NCj4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoaG9z dC0+ZGV2LCAicGlvIG1vZGUgaXMgbm90IHN1cHBvcnRlZCBjdXJyZW50bHlcbiIpOw0KPiArICAg ICAgICAgICAgIH0NCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIGlmIChyZXQgIT0gMCkNCj4gKyAg ICAgICAgICAgICBkd19tY2lfY3FlX3NlbmRfc3RvcF9hYm9ydChob3N0LCBzbG90LCBjbWQpOw0K PiArDQo+ICsgICAgIGlmIChjbWQtPm9wY29kZSA9PSBTRF9TV0lUQ0hfVk9MVEFHRSkgew0KPiAr ICAgICAgICAgICAgIC8qDQo+ICsgICAgICAgICAgICAgICogSWYgY21kMTEgbmVlZHMgdG8gYmUg ZGVhbHQgd2l0aCBzcGVjaWFsbHksIHB1dCBpbiBoZXJlLg0KPiArICAgICAgICAgICAgICAqLw0K PiArICAgICB9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGR3X21jaV9jcWVfc3RhcnRfcmVx dWVzdChzdHJ1Y3QgZHdfbWNpICpob3N0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGR3X21jaV9zbG90ICpzbG90KQ0KPiArew0KPiArICAgICBzdHJ1Y3QgbW1jX3Jl cXVlc3QgKm1ycSA9IHNsb3QtPm1ycTsNCj4gKw0KPiArICAgICBpZiAobXJxLT5zYmMpDQo+ICsg ICAgICAgICAgICAgX19kd19tY2lfY3FlX3N0YXJ0X3JlcXVlc3QoaG9zdCwgc2xvdCwgbXJxLT5z YmMpOw0KPiArDQo+ICsgICAgIGlmIChtcnEtPmNtZCkNCj4gKyAgICAgICAgICAgICBfX2R3X21j aV9jcWVfc3RhcnRfcmVxdWVzdChob3N0LCBzbG90LCBtcnEtPmNtZCk7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgZHdfbWNpX3N3aXRjaChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywNCj4gKyAgICAg ICAgICAgICAgICAgICAgICB1OCBzZXQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgdTggaW5k ZXgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgdTggdmFsdWUsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IHRpbWVvdXRfbXMpDQo+ICt7DQo+ICsgICAgIHN0cnVjdCBk d19tY2lfc2xvdCAqc2xvdCA9IG1tY19wcml2KG1tYyk7DQo+ICsgICAgIHN0cnVjdCBkd19tY2kg Kmhvc3QgPSBzbG90LT5ob3N0Ow0KPiArICAgICBzdHJ1Y3QgbW1jX2NvbW1hbmQgY21kOw0KPiAr ICAgICBpbnQgZXJyID0gMDsNCj4gKyAgICAgdTMyIGNtZHI7DQo+ICsNCj4gKyAgICAgbWVtc2V0 KCZjbWQsIDAsIHNpemVvZihzdHJ1Y3QgbW1jX2NvbW1hbmQpKTsNCj4gKw0KPiArICAgICBjbWQu b3Bjb2RlICAgICAgICAgICAgICA9IE1NQ19TV0lUQ0g7DQo+ICsgICAgIGNtZC5hcmcgICAgICAg ICAgICAgICAgID0gKE1NQ19TV0lUQ0hfTU9ERV9XUklURV9CWVRFIDw8IDI0KSB8DQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChpbmRleCA8PCAxNikgfA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAodmFsdWUgPDwgOCkgfA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzZXQ7DQo+ICsgICAgIGNtZC5mbGFncyAgICAgICAgICAgICAgID0gTU1DX0NNRF9B Q3xNTUNfUlNQX1NQSV9SMUIgfCBNTUNfUlNQX1IxQjsNCj4gKyAgICAgY21kLmRhdGEgICAgICAg ICAgICAgICAgPSBOVUxMOw0KPiArDQo+ICsgICAgIGNtZHIgPSAoY21kLm9wY29kZSA8PCA4KSB8 IFNETU1DX1JFU1BfTEVOXzQ4QiB8DQo+ICsgICAgICAgICAgICAgU0RNTUNfQ01EX0NIS19SRVNQ X0NSQyB8IFNETU1DX0NNRF9JRFhfQ0hLX0VOQUJMRTsNCj4gKw0KPiArICAgICBtY2lfd3JpdGV3 KGhvc3QsIFhGRVJfTU9ERV9SLCAwKTsNCj4gKyAgICAgbWNpX3dyaXRlbChob3N0LCBBUkdVTUVO VF9SLCBjbWQuYXJnKTsNCj4gKw0KPiArICAgICBlcnIgPSBkd19tY2lfY3FlX3N0YXJ0X2NvbW1h bmQoaG9zdCwgJmNtZCwgY21kcik7DQo+ICsNCj4gKyAgICAgaWYgKGVycikgew0KPiArICAgICAg ICAgICAgIGRldl9lcnIoaG9zdC0+ZGV2LCAiaW50ZXJydXB0IHN0YXR1cyByZWcgOjB4JXgsIGVy cm9yIHJlZyA6IDB4JXhcbiIsDQo+ICsgICAgICAgICAgICAgICAgICAgICBob3N0LT5ub3JtYWxf aW50ZXJydXB0LCBob3N0LT5lcnJvcl9pbnRlcnJ1cHQpOw0KPiArICAgICB9DQo+ICsNCj4gKyAg ICAgcmV0dXJuIGVycjsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBkd19tY2lfY3FlX3N3aXRj aChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgYm9vbCBlbmFibGUpDQo+ICt7DQo+ICsgICAgIHN0cnVj dCBtbWNfY2FyZCAqY2FyZCA9IG1tYy0+Y2FyZDsNCj4gKyAgICAgaW50IHJldCA9IDA7DQo+ICsg ICAgIHU4IHZhbCA9IGVuYWJsZSA/IEVYVF9DU0RfQ01EUV9NT0RFX0VOQUJMRUQgOiAwOw0KPiAr DQo+ICsgICAgIGlmICghY2FyZC0+ZXh0X2NzZC5jbWRxX3N1cHBvcnQpIHsNCj4gKyAgICAgICAg ICAgICBkZXZfZXJyKCZtbWMtPmNsYXNzX2RldiwgIlRoZSBkZXZpY2UgY2FyZCBkb2VzIG5vdCBz dXBwb3J0IGNxZSBtb2RlXG4iKTsNCj4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gKyAgICAg fQ0KPiArDQo+ICsgICAgIHJldCA9IGR3X21jaV9zd2l0Y2gobW1jLCBFWFRfQ1NEX0NNRF9TRVRf Tk9STUFMLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIEVYVF9DU0RfQ01EUV9NT0RFX0VO LCB2YWwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+ZXh0X2NzZC5nZW5lcmlj X2NtZDZfdGltZSk7DQo+ICsgICAgIGlmIChyZXQpIHsNCj4gKyAgICAgICAgICAgICBkZXZfZXJy KCZtbWMtPmNsYXNzX2RldiwgImNtZHEgbW9kZSAlc2FibGUgZmFpbGVkICVkXG4iLA0KPiArICAg ICAgICAgICAgICAgICAgICAgZW5hYmxlID8gImVuIiA6ICJkaXMiLCByZXQpOw0KPiArICAgICAg ICAgICAgIGdvdG8gb3V0Ow0KPiArICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgIGNhcmQt PmV4dF9jc2QuY21kcV9lbiA9IGVuYWJsZTsNCj4gKyAgICAgfQ0KPiArDQo+ICtvdXQ6DQo+ICsg ICAgIHJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGR3X21jaV9jcWVfcmVx dWVzdChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpDQo+ICt7 DQo+ICsgICAgIHN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9IG1tY19wcml2KG1tYyk7DQo+ICsg ICAgIHN0cnVjdCBkd19tY2kgKmhvc3QgPSBzbG90LT5ob3N0Ow0KPiArICAgICBpbnQgcmV0Ow0K PiArICAgICB1MzIgc3RhdHVzID0gMDsNCj4gKw0KPiArICAgICBXQVJOX09OKHNsb3QtPm1ycSk7 DQo+ICsNCj4gKyAgICAgLyoNCj4gKyAgICAgICogVGhlIGNoZWNrIGZvciBjYXJkIHByZXNlbmNl IGFuZCBxdWV1ZWluZyBvZiB0aGUgcmVxdWVzdCBtdXN0IGJlDQo+ICsgICAgICAqIGF0b21pYywg b3RoZXJ3aXNlIHRoZSBjYXJkIGNvdWxkIGJlIHJlbW92ZWQgaW4gYmV0d2VlbiBhbmQgdGhlDQo+ ICsgICAgICAqIHJlcXVlc3Qgd291bGRuJ3QgZmFpbCB1bnRpbCBhbm90aGVyIGNhcmQgd2FzIGlu c2VydGVkLg0KPiArICAgICAgKi8NCj4gKw0KPiArICAgICBpZiAoIWR3X21jaV9jcWVfZ2V0X2Nk KG1tYykpIHsNCj4gKyAgICAgICAgICAgICBtcnEtPmNtZC0+ZXJyb3IgPSAtRU5PTUVESVVNOw0K PiArICAgICAgICAgICAgIG1tY19yZXF1ZXN0X2RvbmUobW1jLCBtcnEpOw0KPiArICAgICAgICAg ICAgIHJldHVybjsNCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIGRvd25fd3JpdGUoJmhvc3QtPmNy X3J3X3NlbSk7DQo+ICsNCj4gKyAgICAgLypjbWRxIGNhc2UgbmVlZHMgZXh0cmEgY2hlY2sqLw0K PiArICAgICBpZiAoaG9zdC0+cGRhdGEgJiYgKGhvc3QtPnBkYXRhLT5jYXBzMiAmIE1NQ19DQVAy X0NRRSkpIHsNCj4gKyAgICAgICAgICAgICBpZiAoKGhvc3QtPmNxZSkgPT0gTlVMTCkgew0KPiAr ICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihob3N0LT5kZXYsICJkd19tY2lfcmVxdWVzdF9j cWUgbm90IGRvbmUgeWV0XG4iKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgIG1kZWxheSgyKTsN Cj4gKyAgICAgICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgICAgICBpZiAobW1jLT5jcWVfb24g PT0gZmFsc2UgJiYgaG9zdC0+Y3FlLT5hY3RpdmF0ZWQgPT0gdHJ1ZQ0KPiArICAgICAgICAgICAg ICAgICAgICAgJiYgc2xvdC0+c3dpdGNoX3BhcnRpdGlvbiA9PSAwKQ0KPiArICAgICAgICAgICAg ICAgICAgICAgY3FoY2lfZGVhY3RpdmF0ZShtbWMpOw0KPiArDQo+ICsgICAgICAgICAgICAgaWYg KG1ycS0+Y21kLT5vcGNvZGUgPT0gTU1DX1NXSVRDSCAmJiBtcnEtPmNtZC0+YXJnID09IERXX01D SV9DTURRX0RJU0FCTEVEKQ0KPiArICAgICAgICAgICAgICAgICAgICAgc2xvdC0+c3dpdGNoX3Bh cnRpdGlvbiA9IDE7DQo+ICsNCj4gKyAgICAgICAgICAgICAvKiB3ZSBkbyBub3QgbmVlZCB0byBk aXNhYmxlIGNtZHEgaWYgaXQgaXMgcnBtYiByZXF1ZXN0DQo+ICsgICAgICAgICAgICAgICogYmVj YXVzZSBycG1iIGhhcyBiZWVuIGNoYW5nZWQgdG8gcnBtYiBwYXJ0aXRpb24gaW4gYmxvY2suYw0K PiArICAgICAgICAgICAgICAqIEFsc28sIHdlIGRvIG5vdCBuZWVkIHRvIGRpc2FibGUgY21kcSBp ZiB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZS9lbmFibGUgY21kcQ0KPiArICAgICAgICAgICAgICAq Lw0KPiArICAgICAgICAgICAgIGlmIChtbWMtPmNhcmQgJiYgbW1jLT5jYXJkLT5leHRfY3NkLmNt ZHFfZW4gPT0gMQ0KPiArICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC0+c3dpdGNoX3BhcnRp dGlvbiA9PSAwDQo+ICsgICAgICAgICAgICAgICAgICAgICAmJiBob3N0LT5jbWRfYXRvbWljID09 IGZhbHNlKSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICByZXQgPSBkd19tY2lfY3FlX3N3aXRj aChtbWMsIGZhbHNlKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgaWYgKG1ycS0+Y21k LT5vcGNvZGUgPT0gTU1DX1NMRUVQX0FXQUtFIHx8DQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChtcnEtPmNtZC0+b3Bjb2RlID09IE1NQ19TRUxFQ1RfQ0FSRA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1ycS0+Y21kLT5hcmcgPT0gMCkgfHwgKG1y cS0+Y21kLT5vcGNvZGUgPT0gTU1DX1NXSVRDSA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICYmIG1ycS0+Y21kLT5hcmcgPT0gRFdfTUNJX1BPV0VST0ZGKSkNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdC0+Y3FlX3JlZW5hYmxlID0gMDsNCj4gKyAg ICAgICAgICAgICAgICAgICAgIGVsc2UNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aG9zdC0+Y3FlX3JlZW5hYmxlID0gMTsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgaWYg KHJldCkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihob3N0LT5kZXYs ICJkaXNhYmxlIGNtZHEgZmFpbGVkICFcbiIpOw0KPiArDQo+ICsgICAgICAgICAgICAgICAgICAg ICBkd19tY2lfY3FlX3dhaXRfd2hpbGVfYnVzeShob3N0LCAmc3RhdHVzKTsNCj4gKyAgICAgICAg ICAgICB9DQo+ICsNCj4gKyAgICAgICAgICAgICBpZiAobXJxLT5jbWQtPm9wY29kZSA9PSBNTUNf U1dJVENIDQo+ICsgICAgICAgICAgICAgICAgICAgICAmJiBtcnEtPmNtZC0+YXJnID09IERXX01D SV9DTURRX0VOQUJMRUQpDQo+ICsgICAgICAgICAgICAgICAgICAgICBzbG90LT5zd2l0Y2hfcGFy dGl0aW9uID0gMDsNCj4gKw0KPiArICAgICAgICAgICAgIGlmIChtcnEtPmNtZC0+b3Bjb2RlID09 IE1NQ19FUkFTRV9HUk9VUF9TVEFSVCkgew0KPiArICAgICAgICAgICAgICAgICAgICAgaG9zdC0+ Y21kX2F0b21pYyA9IHRydWU7DQo+ICsgICAgICAgICAgICAgICAgICAgICBob3N0LT5jcWVfcmVl bmFibGUgPSAwOw0KPiArICAgICAgICAgICAgIH0NCj4gKw0KPiArICAgICAgICAgICAgIGlmICho b3N0LT5jbWRfYXRvbWljID09IHRydWUNCj4gKyAgICAgICAgICAgICAgICAgICAgICYmIG1ycS0+ Y21kLT5vcGNvZGUgPT0gTU1DX1NFTkRfU1RBVFVTKSB7DQo+ICsgICAgICAgICAgICAgICAgICAg ICBob3N0LT5jbWRfYXRvbWljID0gZmFsc2U7DQo+ICsgICAgICAgICAgICAgICAgICAgICBob3N0 LT5jcWVfcmVlbmFibGUgPSAxOw0KPiArICAgICAgICAgICAgIH0NCj4gKyAgICAgfQ0KPiArDQo+ ICsgICAgIHNsb3QtPm1ycSA9IG1ycTsNCj4gKyAgICAgaG9zdC0+bXJxID0gbXJxOw0KPiArDQo+ ICsgICAgIGR3X21jaV9jcWVfc3RhcnRfcmVxdWVzdChob3N0LCBzbG90KTsNCj4gKw0KPiArICAg ICB0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT50YXNrbGV0KTsNCj4gKw0KPiArICAgICAvKmNtZHEg Y2FzZSBuZWVkcyBleHRyYSBjaGVjayovDQo+ICsgICAgIGlmIChob3N0LT5wZGF0YSAmJiAoaG9z dC0+cGRhdGEtPmNhcHMyICYgTU1DX0NBUDJfQ1FFKSAmJg0KPiArICAgICAgICAgICAgIGhvc3Qt PmNxZV9yZWVuYWJsZSA9PSAxKSB7DQo+ICsgICAgICAgICAgICAgaWYgKG1tYy0+Y2FyZCAmJiBt bWMtPmNhcmQtPmV4dF9jc2QuY21kcV9lbiA9PSAwKSB7DQo+ICsgICAgICAgICAgICAgICAgICAg ICByZXQgPSBkd19tY2lfY3FlX3N3aXRjaChtbWMsIHRydWUpOw0KPiArICAgICAgICAgICAgICAg ICAgICAgaG9zdC0+Y3FlX3JlZW5hYmxlID0gMDsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGlm IChyZXQpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoaG9zdC0+ZGV2 LCAic3dpdGNoIGNtZHEgZmFpbGVkICFcbiIpOw0KPiArICAgICAgICAgICAgICAgICAgICAgZHdf bWNpX2NxZV93YWl0X3doaWxlX2J1c3koaG9zdCwgJnN0YXR1cyk7DQo+ICsgICAgICAgICAgICAg fQ0KPiArICAgICB9DQo+ICsNCj4gKyAgICAgdXBfd3JpdGUoJmhvc3QtPmNyX3J3X3NlbSk7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGR3X21jaV9jcWVfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hv c3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcykNCj4gK3sNCj4gKyAgICAgc3RydWN0IGR3X21j aV9zbG90ICpzbG90ID0gbW1jX3ByaXYobW1jKTsNCj4gKyAgICAgc3RydWN0IGR3X21jaSAqaG9z dCA9IHNsb3QtPmhvc3Q7DQo+ICsgICAgIGNvbnN0IHN0cnVjdCBkd19tY2lfZHJ2X2RhdGEgKmRy dl9kYXRhID0gc2xvdC0+aG9zdC0+ZHJ2X2RhdGE7DQo+ICsNCj4gKyAgICAgc3dpdGNoIChpb3Mt PnRpbWluZykgew0KPiArICAgICBjYXNlIE1NQ19USU1JTkdfTU1DX0hTNDAwOg0KPiArICAgICAg ICAgICAgIG1jaV93cml0ZXcoaG9zdCwgSE9TVF9DVFJMMl9SLA0KPiArICAgICAgICAgICAgICAg ICAgICAgKG1jaV9yZWFkdyhob3N0LCBIT1NUX0NUUkwyX1IpDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICYgU0RNTUNfVUhTX01PREVfU0VMX01BU0spIHwgU0RNTUNfSFM0MDApOw0K PiArICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICBjYXNlIE1NQ19USU1JTkdfTU1DX0hTMjAw Og0KPiArICAgICAgICAgICAgIG1jaV93cml0ZXcoaG9zdCwgSE9TVF9DVFJMMl9SLA0KPiArICAg ICAgICAgICAgICAgICAgICAgKG1jaV9yZWFkdyhob3N0LCBIT1NUX0NUUkwyX1IpDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICYgU0RNTUNfVUhTX01PREVfU0VMX01BU0spIHwgU0RN TUNfSFMyMDApOw0KPiArICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICBjYXNlIE1NQ19USU1J TkdfTU1DX0hTOg0KPiArICAgICAgICAgICAgIG1jaV93cml0ZXcoaG9zdCwgSE9TVF9DVFJMMl9S LA0KPiArICAgICAgICAgICAgICAgICAgICAgKG1jaV9yZWFkdyhob3N0LCBIT1NUX0NUUkwyX1Ip DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgU0RNTUNfVUhTX01PREVfU0VMX01B U0spIHwgU0RNTUNfU0RSKTsNCj4gKyAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgZGVmYXVs dDoNCj4gKyAgICAgICAgICAgICAvKk1NQ19USU1JTkdfTEVHQUNZIGNhc2UqLw0KPiArICAgICAg ICAgICAgIG1jaV93cml0ZXcoaG9zdCwgSE9TVF9DVFJMMl9SLA0KPiArICAgICAgICAgICAgICAg ICAgICAgKG1jaV9yZWFkdyhob3N0LCBIT1NUX0NUUkwyX1IpDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICYgU0RNTUNfVUhTX01PREVfU0VMX01BU0spIHwgU0RNTUNfTEVHQUNZKTsN Cj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIHNsb3QtPmNsb2NrID0gaW9zLT5jbG9jazsNCj4gKw0K PiArICAgICBpZiAoZHJ2X2RhdGEgJiYgZHJ2X2RhdGEtPnNldF9pb3MpDQo+ICsgICAgICAgICAg ICAgZHJ2X2RhdGEtPnNldF9pb3Moc2xvdCwgaW9zKTsNCj4gKw0KPiArICAgICBzd2l0Y2ggKGlv cy0+YnVzX3dpZHRoKSB7DQo+ICsgICAgIGNhc2UgTU1DX0JVU19XSURUSF80Og0KPiArICAgICAg ICAgICAgIG1jaV93cml0ZWIoaG9zdCwgSE9TVF9DVFJMMV9SLA0KPiArICAgICAgICAgICAgICAg ICAgICAgKG1jaV9yZWFkYihob3N0LCBIT1NUX0NUUkwxX1IpICYNCj4gKyAgICAgICAgICAgICAg ICAgICAgIChTRE1NQ19FWFRfREFUX1hGRVJfTUFTSyAmIFNETU1DX0RBVF9YRkVSX1dJRFRIX01B U0spKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8U0RNTUNfQlVTX1dJRFRIXzQp Ow0KPiArICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICBjYXNlIE1NQ19CVVNfV0lEVEhfODoN Cj4gKyAgICAgICAgICAgICBtY2lfd3JpdGViKGhvc3QsIEhPU1RfQ1RSTDFfUiwNCj4gKyAgICAg ICAgICAgICAgICAgICAgIChtY2lfcmVhZGIoaG9zdCwgSE9TVF9DVFJMMV9SKSAmDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0VYVF9EQVRfWEZFUl9NQVNLKSB8IFNETU1D X0JVU19XSURUSF84KTsNCj4gKyAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgZGVmYXVsdDoN Cj4gKyAgICAgICAgICAgICAvKiBzZXQgZGVmYXVsdCAxIGJpdCBtb2RlICovDQo+ICsgICAgICAg ICAgICAgbWNpX3dyaXRlYihob3N0LCBIT1NUX0NUUkwxX1IsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAobWNpX3JlYWRiKGhvc3QsIEhPU1RfQ1RSTDFfUikgJg0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoU0RNTUNfRVhUX0RBVF9YRkVSX01BU0sgJg0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTRE1NQ19EQVRfWEZFUl9XSURUSF9NQVNLKSkgfCBTRE1NQ19CVVNf V0lEVEhfMSk7DQo+ICsgICAgIH0NCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBkd19tY2lfY3Fl X3N3aXRjaF92b2x0YWdlKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9z KQ0KPiArew0KPiArICAgICBzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3QgPSBtbWNfcHJpdihtbWMp Ow0KPiArICAgICBzdHJ1Y3QgZHdfbWNpICpob3N0ID0gc2xvdC0+aG9zdDsNCj4gKyAgICAgY29u c3Qgc3RydWN0IGR3X21jaV9kcnZfZGF0YSAqZHJ2X2RhdGEgPSBob3N0LT5kcnZfZGF0YTsNCj4g Kw0KPiArICAgICBpZiAoZHJ2X2RhdGEgJiYgZHJ2X2RhdGEtPnN3aXRjaF92b2x0YWdlKQ0KPiAr ICAgICAgICAgICAgIHJldHVybiBkcnZfZGF0YS0+c3dpdGNoX3ZvbHRhZ2UobW1jLCBpb3MpOw0K PiArDQo+ICsgICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGR3X21jaV9j cWVfZ2V0X3JvKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQ0KPiArew0KPiArICAgICBpbnQgcmVhZF9v bmx5Ow0KPiArICAgICBpbnQgZ3Bpb19ybyA9IG1tY19ncGlvX2dldF9ybyhtbWMpOw0KPiArDQo+ ICsgICAgIC8qIFVzZSBwbGF0Zm9ybSBnZXRfcm8gZnVuY3Rpb24sIGVsc2UgdHJ5IG9uIGJvYXJk IHdyaXRlIHByb3RlY3QgKi8NCj4gKyAgICAgaWYgKGdwaW9fcm8gPj0gMCkNCj4gKyAgICAgICAg ICAgICByZWFkX29ubHkgPSBncGlvX3JvOw0KPiArICAgICBlbHNlDQo+ICsgICAgICAgICAgICAg LypOZWVkIHRvIHJlYWQgdGhlIElQIHJlZ2lzdGVyIHRvIGp1ZGdlIGlmIHJvKi8NCj4gKyAgICAg ICAgICAgICBkZXZfZXJyKCZtbWMtPmNsYXNzX2RldiwgIklQIGdldF9ybyBmZWF0dXJlIGlzIG5v dCBpbXBsZW1lbnRlZCBjdXJyZW50bHkuXG4iKTsNCj4gKw0KPiArICAgICBkZXZfZGJnKCZtbWMt PmNsYXNzX2RldiwgImNhcmQgaXMgJXNcbiIsDQo+ICsgICAgICAgICAgICAgcmVhZF9vbmx5ID8g InJlYWQtb25seSIgOiAicmVhZC13cml0ZSIpOw0KPiArDQo+ICsgICAgIHJldHVybiByZWFkX29u bHk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgZHdfbWNpX2NxZV9leGVjdXRlX3R1bmluZyhz dHJ1Y3QgbW1jX2hvc3QgKm1tYywgdTMyIG9wY29kZSkNCj4gK3sNCj4gKyAgICAgc3RydWN0IGR3 X21jaV9zbG90ICpzbG90ID0gbW1jX3ByaXYobW1jKTsNCj4gKyAgICAgc3RydWN0IGR3X21jaSAq aG9zdCA9IHNsb3QtPmhvc3Q7DQo+ICsgICAgIGNvbnN0IHN0cnVjdCBkd19tY2lfZHJ2X2RhdGEg KmRydl9kYXRhID0gaG9zdC0+ZHJ2X2RhdGE7DQo+ICsgICAgIGludCBlcnIgPSAtRUlOVkFMOw0K PiArDQo+ICsgICAgIGlmIChkcnZfZGF0YSAmJiBkcnZfZGF0YS0+ZXhlY3V0ZV90dW5pbmcpDQo+ ICsgICAgICAgICAgICAgZXJyID0gZHJ2X2RhdGEtPmV4ZWN1dGVfdHVuaW5nKHNsb3QsIG9wY29k ZSk7DQo+ICsgICAgIHJldHVybiBlcnI7DQo+ICsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBk d19tY2lfY3FlX3ByZXBhcmVfaHM0MDBfdHVuaW5nKHN0cnVjdCBtbWNfaG9zdCAqbW1jLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1tY19pb3MgKmlvcykN Cj4gK3sNCj4gKyAgICAgc3RydWN0IGR3X21jaV9zbG90ICpzbG90ID0gbW1jX3ByaXYobW1jKTsN Cj4gKyAgICAgc3RydWN0IGR3X21jaSAqaG9zdCA9IHNsb3QtPmhvc3Q7DQo+ICsgICAgIGNvbnN0 IHN0cnVjdCBkd19tY2lfZHJ2X2RhdGEgKmRydl9kYXRhID0gaG9zdC0+ZHJ2X2RhdGE7DQo+ICsN Cj4gKyAgICAgaWYgKGRydl9kYXRhICYmIGRydl9kYXRhLT5wcmVwYXJlX2hzNDAwX3R1bmluZykN Cj4gKyAgICAgICAgICAgICByZXR1cm4gZHJ2X2RhdGEtPnByZXBhcmVfaHM0MDBfdHVuaW5nKGhv c3QsIGlvcyk7DQo+ICsNCj4gKyAgICAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGR3X21jaV9jcWVfaHM0MDBfY29tcGxldGUoc3RydWN0IG1tY19ob3N0ICptbWMpDQo+ICt7 DQo+ICsgICAgIHN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9IG1tY19wcml2KG1tYyk7DQo+ICsg ICAgIHN0cnVjdCBkd19tY2kgKmhvc3QgPSBzbG90LT5ob3N0Ow0KPiArICAgICBjb25zdCBzdHJ1 Y3QgZHdfbWNpX2Rydl9kYXRhICpkcnZfZGF0YSA9IGhvc3QtPmRydl9kYXRhOw0KPiArDQo+ICsg ICAgIGlmIChkcnZfZGF0YSAmJiBkcnZfZGF0YS0+aHM0MDBfY29tcGxldGUpDQo+ICsgICAgICAg ICAgICAgZHJ2X2RhdGEtPmhzNDAwX2NvbXBsZXRlKG1tYyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB2b2lkIGR3X21jaV9jcWVfaW5pdF9jYXJkKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3Qg bW1jX2NhcmQgKmNhcmQpDQo+ICt7DQo+ICsgICAgIHN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9 IG1tY19wcml2KG1tYyk7DQo+ICsgICAgIHN0cnVjdCBkd19tY2kgKmhvc3QgPSBzbG90LT5ob3N0 Ow0KPiArICAgICBjb25zdCBzdHJ1Y3QgZHdfbWNpX2Rydl9kYXRhICpkcnZfZGF0YSA9IGhvc3Qt PmRydl9kYXRhOw0KPiArDQo+ICsgICAgIC8qDQo+ICsgICAgICAqIEFkZCBhbnkgcXVpcmtzIGZv ciB0aGlzIHN5bm9wc3lzIElQIGhlcmUgb3INCj4gKyAgICAgICogZGVhbCB3aXRoIHNvbWV0aGlu ZyBzcGVjaWFsIGZvciBzb21lIHNwZWNpZmljDQo+ICsgICAgICAqIHZlbmRvcnMnIFNPQyBwbGF0 Zm9ybSBieSBjYWxsaW5nIGRydl9kYXRhLT5pbml0X2NhcmQoKS4NCj4gKyAgICAgICovDQo+ICsg ICAgIGlmIChkcnZfZGF0YSAmJiBkcnZfZGF0YS0+aW5pdF9jYXJkKQ0KPiArICAgICAgICAgICAg IGRydl9kYXRhLT5pbml0X2NhcmQobW1jLCBjYXJkKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNv bnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgZHdfbWNpX29wcyA9IHsNCj4gKyAgICAgLnJlcXVlc3Qg ICAgICAgICAgICAgICAgPSBkd19tY2lfY3FlX3JlcXVlc3QsDQo+ICsgICAgIC5wcmVfcmVxICAg ICAgICAgICAgICAgID0gZHdfbWNpX2NxZV9wcmVfcmVxLA0KPiArICAgICAucG9zdF9yZXEgICAg ICAgICAgICAgICA9IGR3X21jaV9jcWVfcG9zdF9yZXEsDQo+ICsgICAgIC5zZXRfaW9zICAgICAg ICAgICAgICAgID0gZHdfbWNpX2NxZV9zZXRfaW9zLA0KPiArICAgICAuZ2V0X3JvICAgICAgICAg ICAgICAgICA9IGR3X21jaV9jcWVfZ2V0X3JvLA0KPiArICAgICAuZ2V0X2NkICAgICAgICAgICAg ICAgICA9IGR3X21jaV9jcWVfZ2V0X2NkLA0KPiArICAgICAuZXhlY3V0ZV90dW5pbmcgICAgICAg ICA9IGR3X21jaV9jcWVfZXhlY3V0ZV90dW5pbmcsDQo+ICsgICAgIC5zdGFydF9zaWduYWxfdm9s dGFnZV9zd2l0Y2ggPSBkd19tY2lfY3FlX3N3aXRjaF92b2x0YWdlLA0KPiArICAgICAuaW5pdF9j YXJkICAgICAgICAgICAgICA9IGR3X21jaV9jcWVfaW5pdF9jYXJkLA0KPiArICAgICAucHJlcGFy ZV9oczQwMF90dW5pbmcgICA9IGR3X21jaV9jcWVfcHJlcGFyZV9oczQwMF90dW5pbmcsDQo+ICsg ICAgIC5oczQwMF9jb21wbGV0ZSAgICAgICAgID0gZHdfbWNpX2NxZV9oczQwMF9jb21wbGV0ZSwN Cj4gK307DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGR3X21jaV9jcWVfdGFza2xldF9mdW5jKHVuc2ln bmVkIGxvbmcgcHJpdikNCj4gK3sNCj4gKyAgICAgc3RydWN0IGR3X21jaSAqaG9zdCA9IChzdHJ1 Y3QgZHdfbWNpICopcHJpdjsNCj4gKyAgICAgc3RydWN0IG1tY19ob3N0ICpwcmV2X21tYyA9IGhv c3QtPnNsb3QtPm1tYzsNCj4gKyAgICAgc3RydWN0IG1tY19yZXF1ZXN0ICptcnE7DQo+ICsgICAg IHVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsNCj4gKyAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmhv c3QtPmlycV9sb2NrLCBmbGFncyk7DQo+ICsNCj4gKyAgICAgaG9zdC0+Y21kID0gTlVMTDsNCj4g KyAgICAgaG9zdC0+ZGF0YSA9IE5VTEw7DQo+ICsgICAgIG1ycSA9IGhvc3QtPm1ycTsNCj4gKyAg ICAgaG9zdC0+c2xvdC0+bXJxID0gTlVMTDsNCj4gKyAgICAgaG9zdC0+bXJxID0gTlVMTDsNCj4g Kw0KPiArICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5pcnFfbG9jaywgZmxhZ3Mp Ow0KPiArDQo+ICsgICAgIG1tY19yZXF1ZXN0X2RvbmUocHJldl9tbWMsIG1ycSk7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBkd19tY2lfY3FlX2ludGVycnVwdChpbnQgaXJxLCB2 b2lkICpkZXZfaWQpDQo+ICt7DQo+ICsgICAgIHN0cnVjdCBkd19tY2kgKmhvc3QgPSBkZXZfaWQ7 DQo+ICsgICAgIHN0cnVjdCBtbWNfaG9zdCAqbW1jID0gaG9zdC0+c2xvdC0+bW1jOw0KPiArICAg ICBzdHJ1Y3QgY3FoY2lfaG9zdCAqY3FfaG9zdCA9IE5VTEw7DQo+ICsgICAgIGludCBjbWRfZXJy b3IgPSAwLCBkYXRhX2Vycm9yID0gMDsNCj4gKw0KPiArICAgICBpZiAoaG9zdC0+cGRhdGEgJiYg KGhvc3QtPnBkYXRhLT5jYXBzMiAmIE1NQ19DQVAyX0NRRSkpDQo+ICsgICAgICAgICAgICAgY3Ff aG9zdCA9IG1tYy0+Y3FlX3ByaXZhdGU7DQo+ICsNCj4gKyAgICAgZHdfbWNpX2dldF9pbnQoaG9z dCk7DQo+ICsNCj4gKyAgICAgaWYgKGhvc3QtPnBkYXRhICYmIChob3N0LT5wZGF0YS0+Y2FwczIg JiBNTUNfQ0FQMl9DUUUpKSB7DQo+ICsgICAgICAgICAgICAgaWYgKG1tYy0+Y3FlX29uID09IGZh bHNlICYmIGNxX2hvc3QtPmFjdGl2YXRlZCA9PSBmYWxzZSkNCj4gKyAgICAgICAgICAgICAgICAg ICAgIGR3X21jaV9jbHJfc2lnbmFsX2ludChob3N0KTsNCj4gKyAgICAgfSBlbHNlIHsNCj4gKyAg ICAgICAgICAgICBkd19tY2lfY2xyX3NpZ25hbF9pbnQoaG9zdCk7DQo+ICsgICAgIH0NCj4gKyAg ICAgLyppZiBydW4gdGhlIGNtZHEgbW9kZSovDQo+ICsgICAgIGlmIChob3N0LT5wZGF0YSAmJiAo aG9zdC0+cGRhdGEtPmNhcHMyICYgTU1DX0NBUDJfQ1FFKSAmJg0KPiArICAgICAgICAgICAgIG1t Yy0+Y3FlX29uID09IHRydWUgJiYgY3FfaG9zdC0+YWN0aXZhdGVkID09IHRydWUpIHsNCj4gKyAg ICAgICAgICAgICBpZiAoaG9zdC0+bm9ybWFsX2ludGVycnVwdCAmIFNETU1DX0VSUl9JTlRFUlJV UFQpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoaG9zdC0+ZGV2LCAiY21kcSBl cnJvcjogaW50ZXJydXB0IHN0YXR1cz0lMDh4LCBlcnJvciBpbnRlcnJ1cHQ9MHglMDh4LCBDUUlT PTB4JXgsIENRVENOPTB4JXhcbiIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhv c3QtPm5vcm1hbF9pbnRlcnJ1cHQsIGhvc3QtPmVycm9yX2ludGVycnVwdCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVhZGwoaG9zdC0+Y3FlLT5tbWlvICsgQ1FIQ0lfSVMpLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkbChob3N0LT5jcWUtPm1taW8gKyBD UUhDSV9UQ04pKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgZHdfbWNpX2NxZV9jb21t YW5kX2NvbXBsZXRlKGhvc3QsIGhvc3QtPmVycm9yX2ludGVycnVwdCwgJmNtZF9lcnJvcik7DQo+ ICsgICAgICAgICAgICAgICAgICAgICBkd19tY2lfY3FlX2RhdGFfY29tcGxldGUoaG9zdCwgaG9z dC0+ZXJyb3JfaW50ZXJydXB0LCAmZGF0YV9lcnJvcik7DQo+ICsgICAgICAgICAgICAgfQ0KPiAr ICAgICAgICAgICAgIGNxaGNpX2lycShtbWMsICh1MzIpKGhvc3QtPm5vcm1hbF9pbnRlcnJ1cHQp LCBjbWRfZXJyb3IsIGRhdGFfZXJyb3IpOw0KPiArICAgICAgICAgICAgIGR3X21jaV9jbHJfaW50 KGhvc3QpOw0KPiArDQo+ICsgICAgICAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOw0KPiArICAg ICB9DQo+ICsNCj4gKyAgICAgaWYgKGhvc3QtPmludF93YWl0aW5nKSB7DQo+ICsgICAgICAgICAg ICAgZGVsX3RpbWVyKCZob3N0LT50aW1lcik7DQo+ICsgICAgICAgICAgICAgY29tcGxldGUoaG9z dC0+aW50X3dhaXRpbmcpOw0KPiArICAgICB9DQo+ICsNCj4gKyAgICAgcmV0dXJuIElSUV9IQU5E TEVEOw0KPiArDQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGR3X21jaV9jcWVfc2V0dXAoc3Ry dWN0IGR3X21jaSAqaG9zdCkNCj4gK3sNCj4gKyAgICAgbWNpX3dyaXRlYihob3N0LCBTV19SU1Rf UiwgKFNETU1DX1JTVF9BTEx8U0RNTUNfUlNUX0NNRHxTRE1NQ19SU1RfREFUKSk7DQo+ICsgICAg IG1jaV93cml0ZWIoaG9zdCwgVE9VVF9DVFJMX1IsIDB4ZSk7DQo+ICsgICAgIG1jaV93cml0ZXco aG9zdCwgSE9TVF9DVFJMMl9SLCBTRE1NQ19IT1NUX1ZFUjRfRU5BQkxFfFNETU1DX1NJR05BTElO R19FTik7DQo+ICsgICAgIG1jaV93cml0ZXcoaG9zdCwgTk9STUFMX0lOVF9TVEFUX0VOX1IsIDB4 ZmZmZik7DQo+ICsgICAgIG1jaV93cml0ZXcoaG9zdCwgRVJST1JfSU5UX1NUQVRfRU5fUiwgU0RN TUNfQUxMX0VSUl9TVEFUX0VOKTsNCj4gKyAgICAgLypDYXJkIGRldGVjdCB3aWxsIGJlIGVuYWJs ZWQgaW4gdGhlIGxhc3QqLw0KPiArICAgICBtY2lfd3JpdGV3KGhvc3QsIE5PUk1BTF9JTlRfU0lH TkFMX0VOX1IsDQo+ICsgICAgICAgICAgICAgKH4oU0RNTUNfQ0FSRF9JTlNFUlRJT05fU0lHTkFM X0VOIHwgU0RNTUNfQ0FSRF9SRU1PVkFMX1NJR05BTF9FTiB8DQo+ICsgICAgICAgICAgICAgICAg ICAgICBTRE1NQ19DQVJEX0lOVEVSUlVQVF9TSUdOQUxfRU4pICYgMHhmZmZmKSk7DQo+ICsgICAg IG1jaV93cml0ZXcoaG9zdCwgRVJST1JfSU5UX1NJR05BTF9FTl9SLCBTRE1NQ19BTExfRVJSX1NJ R05BTF9FTik7DQo+ICsgICAgIG1jaV93cml0ZWIoaG9zdCwgQ1RSTF9SLCBTRE1NQ19SU1RfTl9P RXxTRE1NQ19SU1RfTnxTRE1NQ19DQVJEX0lTX0VNTUMpOw0KPiArICAgICBtY2lfd3JpdGViKGhv c3QsIEhPU1RfQ1RSTDFfUiwNCj4gKyAgICAgICAgICAgICAobWNpX3JlYWRiKGhvc3QsIEhPU1Rf Q1RSTDFfUikmMHhlNykgfCAoU0RNTUNfQURNQTJfMzIgPDwgU0RNTUNfRE1BX1NFTCkpOw0KPiAr ICAgICBtY2lfd3JpdGViKGhvc3QsIE1TSENfQ1RSTF9SLCBtY2lfcmVhZGIoaG9zdCwgTVNIQ19D VFJMX1IpICYgKH5TRE1NQ19DTURfQ09ORkxJQ1RfQ0hFQ0spKTsNCj4gKyAgICAgbWNpX3dyaXRl dyhob3N0LCBDTEtfQ1RSTF9SLCBtY2lfcmVhZHcoaG9zdCwgQ0xLX0NUUkxfUil8U0RNTUNfSU5U RVJOQUxfQ0xLX0VOKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBkd19tY2lfY3FlX2luaXRf c2xvdF9jYXBzKHN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCkNCj4gK3sNCj4gKyAgICAgc3RydWN0 IGR3X21jaSAqaG9zdCA9IHNsb3QtPmhvc3Q7DQo+ICsgICAgIGNvbnN0IHN0cnVjdCBkd19tY2lf ZHJ2X2RhdGEgKmRydl9kYXRhID0gaG9zdC0+ZHJ2X2RhdGE7DQo+ICsgICAgIHN0cnVjdCBtbWNf aG9zdCAqbW1jID0gc2xvdC0+bW1jOw0KPiArICAgICBpbnQgY3RybF9pZDsNCj4gKw0KPiArICAg ICBpZiAoaG9zdC0+cGRhdGEtPmNhcHMpDQo+ICsgICAgICAgICAgICAgbW1jLT5jYXBzID0gaG9z dC0+cGRhdGEtPmNhcHM7DQo+ICsNCj4gKyAgICAgaWYgKGhvc3QtPnBkYXRhLT5wbV9jYXBzKQ0K PiArICAgICAgICAgICAgIG1tYy0+cG1fY2FwcyA9IGhvc3QtPnBkYXRhLT5wbV9jYXBzOw0KPiAr DQo+ICsgICAgIGlmIChob3N0LT5kZXYtPm9mX25vZGUpIHsNCj4gKyAgICAgICAgICAgICBjdHJs X2lkID0gb2ZfYWxpYXNfZ2V0X2lkKGhvc3QtPmRldi0+b2Zfbm9kZSwgIm1zaGMiKTsNCj4gKyAg ICAgICAgICAgICBpZiAoY3RybF9pZCA8IDApDQo+ICsgICAgICAgICAgICAgICAgICAgICBjdHJs X2lkID0gMDsNCj4gKyAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgICBjdHJsX2lkID0gdG9f cGxhdGZvcm1fZGV2aWNlKGhvc3QtPmRldiktPmlkOw0KPiArICAgICB9DQo+ICsNCj4gKyAgICAg aWYgKGRydl9kYXRhICYmIGRydl9kYXRhLT5jYXBzKSB7DQo+ICsgICAgICAgICAgICAgaWYgKGN0 cmxfaWQgPj0gZHJ2X2RhdGEtPm51bV9jYXBzKSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICBk ZXZfZXJyKGhvc3QtPmRldiwgImludmFsaWQgY29udHJvbGxlciBpZCAlZFxuIiwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY3RybF9pZCk7DQo+ICsgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gLUVJTlZBTDsNCj4gKyAgICAgICAgICAgICB9DQo+ICsgICAgICAgICAgICAgbW1j LT5jYXBzIHw9IGRydl9kYXRhLT5jYXBzW2N0cmxfaWRdOw0KPiArICAgICB9DQo+ICsNCj4gKyAg ICAgaWYgKGRydl9kYXRhICYmIGRydl9kYXRhLT5zaGlmdF9yc3ApDQo+ICsgICAgICAgICAgICAg aG9zdC0+c2hpZnQgPSAxOw0KPiArICAgICBlbHNlDQo+ICsgICAgICAgICAgICAgaG9zdC0+c2hp ZnQgPSAwOw0KPiArDQo+ICsgICAgIGlmIChob3N0LT5wZGF0YS0+Y2FwczIpDQo+ICsgICAgICAg ICAgICAgbW1jLT5jYXBzMiA9IGhvc3QtPnBkYXRhLT5jYXBzMjsNCj4gKw0KPiArICAgICBtbWMt PmZfbWluID0gRFdfTUNJX0ZSRVFfTUlOOw0KPiArICAgICBpZiAoIW1tYy0+Zl9tYXgpDQo+ICsg ICAgICAgICAgICAgbW1jLT5mX21heCA9IERXX01DSV9GUkVRX01BWDsNCj4gKw0KPiArICAgICAv KiBQcm9jZXNzIFNESU8gSVJRcyB0aHJvdWdoIHRoZSBzZGlvX2lycV93b3JrLiAqLw0KPiArICAg ICBpZiAobW1jLT5jYXBzICYgTU1DX0NBUF9TRElPX0lSUSkNCj4gKyAgICAgICAgICAgICBtbWMt PmNhcHMyIHw9IE1NQ19DQVAyX1NESU9fSVJRX05PVEhSRUFEOw0KPiArDQo+ICsgICAgIHJldHVy biAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGR3X21jaV9jcWVfaW5pdF9zbG90KHN0cnVj dCBkd19tY2kgKmhvc3QpDQo+ICt7DQo+ICsgICAgIHN0cnVjdCBtbWNfaG9zdCAqbW1jOw0KPiAr ICAgICBzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3Q7DQo+ICsgICAgIGludCByZXQ7DQo+ICsNCj4g KyAgICAgbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBkd19tY2lfc2xvdCksIGhv c3QtPmRldik7DQo+ICsgICAgIGlmICghbW1jKQ0KPiArICAgICAgICAgICAgIHJldHVybiAtRU5P TUVNOw0KPiArDQo+ICsgICAgIHNsb3QgPSBtbWNfcHJpdihtbWMpOw0KPiArICAgICBzbG90LT5p ZCA9IDA7DQo+ICsgICAgIHNsb3QtPnNkaW9faWQgPSBob3N0LT5zZGlvX2lkMCArIHNsb3QtPmlk Ow0KPiArICAgICBzbG90LT5tbWMgPSBtbWM7DQo+ICsgICAgIHNsb3QtPnN3aXRjaF9wYXJ0aXRp b24gPSAwOw0KPiArICAgICBzbG90LT5ob3N0ID0gaG9zdDsNCj4gKyAgICAgaG9zdC0+c2xvdCA9 IHNsb3Q7DQo+ICsNCj4gKyAgICAgbW1jLT5vcHMgPSAmZHdfbWNpX29wczsNCj4gKw0KPiArICAg ICAvKmlmIHRoZXJlIGFyZSBleHRlcm5hbCByZWd1bGF0b3JzLCBnZXQgdGhlbSovDQo+ICsgICAg IHJldCA9IG1tY19yZWd1bGF0b3JfZ2V0X3N1cHBseShtbWMpOw0KPiArICAgICBpZiAocmV0KQ0K PiArICAgICAgICAgICAgIGdvdG8gZXJyX2hvc3RfYWxsb2NhdGVkOw0KPiArDQo+ICsgICAgIGlm ICghbW1jLT5vY3JfYXZhaWwpDQo+ICsgICAgICAgICAgICAgbW1jLT5vY3JfYXZhaWwgPSBNTUNf VkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNDsNCj4gKw0KPiArICAgICBkZXZfaW5mbyhob3N0LT5k ZXYsICJyZWd1bGF0b3Igc3VwcG9ydCB2b2xhZ2Ugb2NyX2F2YWlsPTB4JXhcbiIsDQo+ICsgICAg ICAgICAgICAgICAgICAgICBtbWMtPm9jcl9hdmFpbCk7DQo+ICsNCj4gKyAgICAgcmV0ID0gbW1j X29mX3BhcnNlKG1tYyk7DQo+ICsgICAgIGlmIChyZXQpDQo+ICsgICAgICAgICAgICAgZ290byBl cnJfaG9zdF9hbGxvY2F0ZWQ7DQo+ICsNCj4gKyAgICAgcmV0ID0gZHdfbWNpX2NxZV9pbml0X3Ns b3RfY2FwcyhzbG90KTsNCj4gKyAgICAgaWYgKHJldCkNCj4gKyAgICAgICAgICAgICBnb3RvIGVy cl9ob3N0X2FsbG9jYXRlZDsNCj4gKw0KPiArICAgICAvKiBVc2VmdWwgZGVmYXVsdHMgaWYgcGxh dGZvcm0gZGF0YSBpcyB1bnNldC4gKi8NCj4gKyAgICAgaWYgKGhvc3QtPnVzZV9kbWEgPT0gVFJB TlNfTU9ERV9ETUEpIHsNCj4gKyAgICAgICAgICAgICBtbWMtPm1heF9zZWdzID0gMjU2Ow0KPiAr ICAgICAgICAgICAgIG1tYy0+bWF4X2Jsa19zaXplID0gNTEyOw0KPiArICAgICAgICAgICAgIG1t Yy0+bWF4X3NlZ19zaXplID0gMHgxMDAwOw0KPiArICAgICAgICAgICAgIG1tYy0+bWF4X3JlcV9z aXplID0gbW1jLT5tYXhfc2VnX3NpemUgKiBtbWMtPm1heF9zZWdzOw0KPiArICAgICAgICAgICAg IG1tYy0+bWF4X2Jsa19jb3VudCA9IG1tYy0+bWF4X3JlcV9zaXplIC8gNTEyOw0KPiArICAgICB9 IGVsc2Ugew0KPiArICAgICAgICAgICAgIGRldl9pbmZvKGhvc3QtPmRldiwgImR3LW1tYy1jcWUg cGlvIG1vZGUgaXMgVG9Eby5cbiIpOw0KPiArICAgICAgICAgICAgIC8qIFRvIERPLCBUUkFOU19N T0RFX1BJTyAqLw0KPiArICAgICB9DQo+ICsNCj4gKyAgICAgZHdfbWNpX2NxZV9nZXRfY2QobW1j KTsNCj4gKw0KPiArICAgICByZXQgPSBtbWNfYWRkX2hvc3QobW1jKTsNCj4gKyAgICAgaWYgKHJl dCkNCj4gKyAgICAgICAgICAgICBnb3RvIGVycl9ob3N0X2FsbG9jYXRlZDsNCj4gKw0KPiArICAg ICByZXR1cm4gMDsNCj4gKw0KPiArZXJyX2hvc3RfYWxsb2NhdGVkOg0KPiArICAgICBtbWNfZnJl ZV9ob3N0KG1tYyk7DQo+ICsgICAgIHJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGR3X21jaV9jcWVfY2xlYW51cF9zbG90KHN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCkNCj4g K3sNCj4gKyAgICAgLyogRGVidWdmcyBzdHVmZiBpcyBjbGVhbmVkIHVwIGJ5IG1tYyBjb3JlICov DQo+ICsgICAgIG1tY19yZW1vdmVfaG9zdChzbG90LT5tbWMpOw0KPiArICAgICBzbG90LT5ob3N0 LT5zbG90ID0gTlVMTDsNCj4gKyAgICAgbW1jX2ZyZWVfaG9zdChzbG90LT5tbWMpOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgdm9pZCBkd19tY2lfY3FlX2luaXRfZG1hKHN0cnVjdCBkd19tY2kgKmhv c3QpDQo+ICt7DQo+ICsgICAgIGhvc3QtPnVzZV9kbWEgPSBUUkFOU19NT0RFX0RNQTsNCj4gKw0K PiArICAgICAvKiBEZXRlcm1pbmUgd2hpY2ggRE1BIGludGVyZmFjZSB0byB1c2UgKi8NCj4gKyAg ICAgLyogdXNpbmcgMzJiaXQgRE1BIGJ5IGRlZmF1bHQsDQo+ICsgICAgICAqIHVzZXIgY2FuIG1v ZGlmeSB0aGlzIHNldHRpbmcgYnkgZHJ2X2RhdGEtPmluaXQoKQ0KPiArICAgICAgKi8NCj4gKyAg ICAgaWYgKGhvc3QtPnVzZV9kbWEgPT0gVFJBTlNfTU9ERV9ETUEpIHsNCj4gKyAgICAgICAgICAg ICBob3N0LT5kbWFfNjRiaXRfYWRkcmVzcyA9IDA7DQo+ICsgICAgICAgICAgICAgZGV2X2luZm8o aG9zdC0+ZGV2LCAiSURNQUMgc3VwcG9ydHMgMzItYml0IGFkZHJlc3MgbW9kZS5cbiIpOw0KPiAr ICAgICB9DQo+ICsNCj4gKyAgICAgLyogQWxsb2MgbWVtb3J5IGZvciBzZyB0cmFuc2xhdGlvbiAq Lw0KPiArICAgICBob3N0LT5zZ19jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQoaG9zdC0+ZGV2LA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdfTUNJX0RF U0NfTEVOLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Jmhvc3QtPnNnX2RtYSwgR0ZQX0tFUk5FTCk7DQo+ICsgICAgIGlmICghaG9zdC0+c2dfY3B1KSB7 DQo+ICsgICAgICAgICAgICAgZGV2X2Vycihob3N0LT5kZXYsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAiJXM6IGNvdWxkIG5vdCBhbGxvYyBETUEgbWVtb3J5XG4iLA0KPiArICAgICAgICAgICAg ICAgICAgICAgX19mdW5jX18pOw0KPiArICAgICAgICAgICAgIGdvdG8gbm9fZG1hOw0KPiArICAg ICB9DQo+ICsNCj4gKyAgICAgcmV0dXJuOw0KPiArDQo+ICtub19kbWE6DQo+ICsgICAgIGRldl9p bmZvKGhvc3QtPmRldiwgIlVzaW5nIFBJTyBtb2RlLlxuIik7DQo+ICsgICAgIGhvc3QtPnVzZV9k bWEgPSBUUkFOU19NT0RFX1BJTzsNCj4gK30NCj4gKw0KPiArI2lmZGVmIENPTkZJR19PRg0KPiAr c3RhdGljIHN0cnVjdCBkd19tY2lfYm9hcmQgKmR3X21jaV9jcWVfcGFyc2VfZHQoc3RydWN0IGR3 X21jaSAqaG9zdCkNCj4gK3sNCj4gKyAgICAgc3RydWN0IGR3X21jaV9ib2FyZCAqcGRhdGE7DQo+ ICsgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9IGhvc3QtPmRldjsNCj4gKyAgICAgY29uc3Qgc3Ry dWN0IGR3X21jaV9kcnZfZGF0YSAqZHJ2X2RhdGEgPSBob3N0LT5kcnZfZGF0YTsNCj4gKyAgICAg aW50IHJldDsNCj4gKyAgICAgdTMyIGNsb2NrX2ZyZXF1ZW5jeTsNCj4gKw0KPiArICAgICBwZGF0 YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsNCj4gKyAg ICAgaWYgKCFwZGF0YSkNCj4gKyAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsN Cj4gKw0KPiArICAgICAvKiBmaW5kIHJlc2V0IGNvbnRyb2xsZXIgd2hlbiBleGlzdCAqLw0KPiAr ICAgICBwZGF0YS0+cnN0YyA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfb3B0aW9uYWwoZGV2LCAi cmVzZXQiKTsNCj4gKyAgICAgaWYgKElTX0VSUihwZGF0YS0+cnN0YykpIHsNCj4gKyAgICAgICAg ICAgICBpZiAoUFRSX0VSUihwZGF0YS0+cnN0YykgPT0gLUVQUk9CRV9ERUZFUikNCj4gKyAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOw0KPiArICAgICB9 DQo+ICsNCj4gKyAgICAgZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgImNhcmQtZGV0ZWN0 LWRlbGF5IiwNCj4gKyAgICAgICAgICAgICAmcGRhdGEtPmRldGVjdF9kZWxheV9tcyk7DQo+ICsN Cj4gKyAgICAgaWYgKCFkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAiY2xvY2stZnJlcXVl bmN5IiwgJmNsb2NrX2ZyZXF1ZW5jeSkpDQo+ICsgICAgICAgICAgICAgcGRhdGEtPmJ1c19oeiA9 IGNsb2NrX2ZyZXF1ZW5jeTsNCj4gKw0KPiArICAgICBpZiAoZHJ2X2RhdGEgJiYgZHJ2X2RhdGEt PnBhcnNlX2R0KSB7DQo+ICsgICAgICAgICAgICAgcmV0ID0gZHJ2X2RhdGEtPnBhcnNlX2R0KGhv c3QpOw0KPiArICAgICAgICAgICAgIGlmIChyZXQpDQo+ICsgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gRVJSX1BUUihyZXQpOw0KPiArICAgICB9DQo+ICsNCj4gKyAgICAgcmV0dXJuIHBkYXRh Ow0KPiArfQ0KPiArDQo+ICsjZWxzZSAvKiBDT05GSUdfT0YgKi8NCj4gK3N0YXRpYyBzdHJ1Y3Qg ZHdfbWNpX2JvYXJkICpkd19tY2lfY3FlX3BhcnNlX2R0KHN0cnVjdCBkd19tY2kgKmhvc3QpDQo+ ICt7DQo+ICsgICAgIHJldHVybiBFUlJfUFRSKC1FSU5WQUwpOw0KPiArfQ0KPiArI2VuZGlmIC8q IENPTkZJR19PRiAqLw0KPiArDQo+ICtzdGF0aWMgdm9pZCBkd19tY2lfY3FlX2N0b190aW1lcihz dHJ1Y3QgdGltZXJfbGlzdCAqdCkNCj4gK3sNCj4gKyAgICAgc3RydWN0IGR3X21jaSAqaG9zdCA9 IGZyb21fdGltZXIoaG9zdCwgdCwgdGltZXIpOw0KPiArDQo+ICsgICAgIGlmIChob3N0LT5pbnRf d2FpdGluZykgew0KPiArICAgICAgICAgICAgIGRldl9lcnIoaG9zdC0+ZGV2LCAiZmlyZWQsIG9w Y29kZT0lZCwgYXJnPTB4JXgsIGlycSBzdGF0dXM9MHgleCwgZXJyIGlycT0weCV4LCBhdXRvIGVy ciBpcnE9MHgleFxuIiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdC0+b3Bj b2RlLCBob3N0LT5hcmcsDQo+ICsgICAgICAgICAgICAgICAgICAgICBob3N0LT5ub3JtYWxfaW50 ZXJydXB0LCBob3N0LT5lcnJvcl9pbnRlcnJ1cHQsDQo+ICsgICAgICAgICAgICAgICAgICAgICBo b3N0LT5hdXRvX2Vycm9yX2ludGVycnVwdCk7DQo+ICsNCj4gKyAgICAgICAgICAgICBkd19tY2lf Y2xyX3NpZ25hbF9pbnQoaG9zdCk7DQo+ICsgICAgICAgICAgICAgZHdfbWNpX2dldF9pbnQoaG9z dCk7DQo+ICsNCj4gKyAgICAgICAgICAgICBjb21wbGV0ZShob3N0LT5pbnRfd2FpdGluZyk7DQo+ ICsgICAgIH0NCj4gK30NCj4gKw0KPiArDQo+ICtzdGF0aWMgdm9pZCBkd19tY2lfY3FlX2VuYWJs ZV9jZChzdHJ1Y3QgZHdfbWNpICpob3N0KQ0KPiArew0KPiArICAgICAvKg0KPiArICAgICAgKiBO byBuZWVkIGZvciBDRCBpZiBhbGwgc2xvdHMgaGF2ZSBhIG5vbi1lcnJvciBHUElPDQo+ICsgICAg ICAqIGFzIHdlbGwgYXMgYnJva2VuIGNhcmQgZGV0ZWN0aW9uIGlzIGZvdW5kLg0KPiArICAgICAg Ki8NCj4gKyAgICAgaWYgKGhvc3QtPnNsb3QtPm1tYy0+Y2FwcyAmIE1NQ19DQVBfTkVFRFNfUE9M TA0KPiArICAgICAgICAgICAgIHx8ICFtbWNfY2FyZF9pc19yZW1vdmFibGUoaG9zdC0+c2xvdC0+ bW1jKSkNCj4gKyAgICAgICAgICAgICByZXR1cm47DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IGR3X21jaV9jcWhjaV9pbml0KHN0cnVjdCBkd19tY2kgKmhvc3QpDQo+ICt7DQo+ICsgICAgIGlm IChob3N0LT5wZGF0YSAmJiAoaG9zdC0+cGRhdGEtPmNhcHMyICYgTU1DX0NBUDJfQ1FFKSkgew0K PiArICAgICAgICAgICAgIGhvc3QtPmNxZSA9IGNxaGNpX3BsdGZtX2luaXQoaG9zdC0+cGRldik7 DQo+ICsgICAgICAgICAgICAgaWYgKFBUUl9FUlIoaG9zdC0+Y3FlKSA9PSAtRUlOVkFMIHx8DQo+ ICsgICAgICAgICAgICAgICAgUFRSX0VSUihob3N0LT5jcWUpID09IC1FTk9NRU0gfHwNCj4gKyAg ICAgICAgICAgICAgICBQVFJfRVJSKGhvc3QtPmNxZSkgPT0gLUVCVVNZKSB7DQo+ICsgICAgICAg ICAgICAgICAgICAgICBkZXZfZXJyKGhvc3QtPmRldiwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlVuYWJsZSB0byBnZXQgdGhlIGNtZHEgcmVsYXRlZCBhdHRyaWJ1dGUsZXJyID0g JWxkXG4iLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVFJfRVJSKGhvc3QtPmNx ZSkpOw0KPiArICAgICAgICAgICAgICAgICAgICAgaG9zdC0+Y3FlID0gMDsNCj4gKyAgICAgICAg ICAgICAgICAgICAgIGhvc3QtPnBkYXRhLT5jYXBzMiAmPSB+KE1NQ19DQVAyX0NRRXxNTUNfQ0FQ Ml9DUUVfRENNRCk7DQo+ICsgICAgICAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgICAg ICAgICAgIGhvc3QtPmNxZS0+b3BzID0gJmR3X21jaV9jcWhjaV9ob3N0X29wczsNCj4gKyAgICAg ICAgICAgICAgICAgICAgIGNxaGNpX2luaXQoaG9zdC0+Y3FlLCBob3N0LT5zbG90LT5tbWMsIDAp Ow0KPiArICAgICAgICAgICAgIH0NCj4gKyAgICAgfQ0KPiArfQ0KPiArDQo+ICtpbnQgZHdfbWNp X2NxZV9wcm9iZShzdHJ1Y3QgZHdfbWNpICpob3N0KQ0KPiArew0KPiArICAgICBjb25zdCBzdHJ1 Y3QgZHdfbWNpX2Rydl9kYXRhICpkcnZfZGF0YSA9IGhvc3QtPmRydl9kYXRhOw0KPiArICAgICBp bnQgcmV0ID0gMDsNCj4gKw0KPiArICAgICBpZiAoIWhvc3QtPnBkYXRhKSB7DQo+ICsgICAgICAg ICAgICAgaG9zdC0+cGRhdGEgPSBkd19tY2lfY3FlX3BhcnNlX2R0KGhvc3QpOw0KPiArICAgICAg ICAgICAgIGlmIChQVFJfRVJSKGhvc3QtPnBkYXRhKSA9PSAtRVBST0JFX0RFRkVSKSB7DQo+ICsg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVQUk9CRV9ERUZFUjsNCj4gKyAgICAgICAgICAg ICB9IGVsc2UgaWYgKElTX0VSUihob3N0LT5wZGF0YSkpIHsNCj4gKyAgICAgICAgICAgICAgICAg ICAgIGRldl9lcnIoaG9zdC0+ZGV2LCAicGxhdGZvcm0gZGF0YSBub3QgYXZhaWxhYmxlXG4iKTsN Cj4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiArICAgICAgICAgICAg IH0NCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIGhvc3QtPmJpdV9jbGsgPSBkZXZtX2Nsa19nZXQo aG9zdC0+ZGV2LCAiYml1Iik7DQo+ICsgICAgIGlmIChJU19FUlIoaG9zdC0+Yml1X2NsaykpIHsN Cj4gKyAgICAgICAgICAgICBkZXZfZGJnKGhvc3QtPmRldiwgImJpdSBjbG9jayBub3QgYXZhaWxh YmxlXG4iKTsNCj4gKyAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgICByZXQgPSBjbGtfcHJl cGFyZV9lbmFibGUoaG9zdC0+Yml1X2Nsayk7DQo+ICsgICAgICAgICAgICAgaWYgKHJldCkgew0K PiArICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihob3N0LT5kZXYsICJmYWlsZWQgdG8gZW5h YmxlIGJpdSBjbG9ja1xuIik7DQo+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0K PiArICAgICAgICAgICAgIH0NCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIGhvc3QtPmNpdV9jbGsg PSBkZXZtX2Nsa19nZXQoaG9zdC0+ZGV2LCAiY2l1Iik7DQo+ICsgICAgIGlmIChJU19FUlIoaG9z dC0+Y2l1X2NsaykpIHsNCj4gKyAgICAgICAgICAgICBkZXZfZGJnKGhvc3QtPmRldiwgImNpdSBj bG9jayBub3QgYXZhaWxhYmxlXG4iKTsNCj4gKyAgICAgICAgICAgICBob3N0LT5idXNfaHogPSBo b3N0LT5wZGF0YS0+YnVzX2h6Ow0KPiArICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgIHJl dCA9IGNsa19wcmVwYXJlX2VuYWJsZShob3N0LT5jaXVfY2xrKTsNCj4gKyAgICAgICAgICAgICBp ZiAocmV0KSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKGhvc3QtPmRldiwgImZh aWxlZCB0byBlbmFibGUgY2l1IGNsb2NrXG4iKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGdv dG8gZXJyX2Nsa19iaXU7DQo+ICsgICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICAg aWYgKGhvc3QtPnBkYXRhLT5idXNfaHopIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgIHJldCA9 IGNsa19zZXRfcmF0ZShob3N0LT5jaXVfY2xrLCBob3N0LT5wZGF0YS0+YnVzX2h6KTsNCj4gKyAg ICAgICAgICAgICAgICAgICAgIGlmIChyZXQpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRldl93YXJuKGhvc3QtPmRldiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiVW5hYmxlIHRvIHNldCBidXMgcmF0ZSB0byAldUh6XG4iLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LT5wZGF0YS0+YnVzX2h6KTsNCj4gKyAg ICAgICAgICAgICB9DQo+ICsgICAgICAgICAgICAgaG9zdC0+YnVzX2h6ID0gY2xrX2dldF9yYXRl KGhvc3QtPmNpdV9jbGspOw0KPiArICAgICB9DQo+ICsNCj4gKyAgICAgaWYgKCFob3N0LT5idXNf aHopIHsNCj4gKyAgICAgICAgICAgICBkZXZfZXJyKGhvc3QtPmRldiwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICJQbGF0Zm9ybSBkYXRhIG11c3Qgc3VwcGx5IGJ1cyBzcGVlZFxuIik7DQo+ICsg ICAgICAgICAgICAgcmV0ID0gLUVOT0RFVjsNCj4gKyAgICAgICAgICAgICBnb3RvIGVycl9jbGtf Y2l1Ow0KPiArICAgICB9DQo+ICsNCj4gKyAgICAgaWYgKCFJU19FUlIoaG9zdC0+cGRhdGEtPnJz dGMpKSB7DQo+ICsgICAgICAgICAgICAgcmVzZXRfY29udHJvbF9hc3NlcnQoaG9zdC0+cGRhdGEt PnJzdGMpOw0KPiArICAgICAgICAgICAgIHVzbGVlcF9yYW5nZSgxMCwgNTApOw0KPiArICAgICAg ICAgICAgIHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoaG9zdC0+cGRhdGEtPnJzdGMpOw0KPiArICAg ICB9DQo+ICsNCj4gKyAgICAgdGltZXJfc2V0dXAoJmhvc3QtPnRpbWVyLCBkd19tY2lfY3FlX2N0 b190aW1lciwgMCk7DQo+ICsNCj4gKyAgICAgc3Bpbl9sb2NrX2luaXQoJmhvc3QtPmxvY2spOw0K PiArICAgICBzcGluX2xvY2tfaW5pdCgmaG9zdC0+aXJxX2xvY2spOw0KPiArICAgICBpbml0X3J3 c2VtKCZob3N0LT5jcl9yd19zZW0pOw0KPiArICAgICB0YXNrbGV0X2luaXQoJmhvc3QtPnRhc2ts ZXQsIGR3X21jaV9jcWVfdGFza2xldF9mdW5jLCAodW5zaWduZWQgbG9uZylob3N0KTsNCj4gKw0K PiArICAgICBob3N0LT5jcWVfcmVlbmFibGUgPSAwOw0KPiArICAgICBob3N0LT5jbWRfYXRvbWlj ID0gZmFsc2U7DQo+ICsNCj4gKyAgICAgLypwaW8gbW9kZSdzIHBhcmFtZXRlcnMgc2hvdWxkIGJl IGluaXRpYWxpemVkIGhlcmUqLw0KPiArDQo+ICsgICAgIC8qSW5pdGlhbGl6ZSB0aGUgZU1NQyBJ UCByZWxhdGVkIGF0dHJpYnV0ZSovDQo+ICsgICAgIGR3X21jaV9jcWVfc2V0dXAoaG9zdCk7DQo+ ICsNCj4gKyAgICAgZHdfbWNpX2NxZV9pbml0X2RtYShob3N0KTsNCj4gKw0KPiArICAgICAvKiBU aGlzIGZsYWcgd2lsbCBiZSBzZXQgMSB3aGVuIGRvaW5nIHR1bmluZywNCj4gKyAgICAgICogd2Ug YWRkIHRoaXMgZmxhZyBiZWNhdXNlDQo+ICsgICAgICAqIHNvbWUgdmVuZG9ycyBtaWdodCB1c2Ug b3RoZXIgY21kIGluc3RlYWQgb2YgMjENCj4gKyAgICAgICogdG8gdHVuZSBwaGFzZSB1bmRlciBo aWdoIHNwZWVkIGludGVyZmFjZS4NCj4gKyAgICAgICogd2UgdXNlIHRoaXMgZmxhZyB0byByZWNv Z25pemUgaWYgdGhlIHN5c3RlbSBpcyB1bmRlciB0dW5pbmcgc3RhZ2UuDQo+ICsgICAgICAqLw0K PiArICAgICBob3N0LT50dW5pbmcgPSAwOw0KPiArDQo+ICsgICAgIC8qVGltaW5nX3NldHRpbmcg aXMgdG8gYXZvaWQgc2VuZGluZyBjb21tYW5kDQo+ICsgICAgICAqYmVmb3JlIHNldHRpbmcgcGhh c2UgaW4gaHMyMDAsIGhzNDAwDQo+ICsgICAgICAqLw0KPiArICAgICBob3N0LT5jdXJyZW50X3Nw ZWVkID0gMDsNCj4gKw0KPiArICAgICAvKkRvIHRoZSByZXN0IG9mIGluaXQgZm9yIHNwZWNpZmlj Ki8NCj4gKyAgICAgaWYgKGRydl9kYXRhICYmIGRydl9kYXRhLT5pbml0KSB7DQo+ICsgICAgICAg ICAgICAgcmV0ID0gZHJ2X2RhdGEtPmluaXQoaG9zdCk7DQo+ICsgICAgICAgICAgICAgaWYgKHJl dCkgew0KPiArICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihob3N0LT5kZXYsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBpbml0IGZh aWxlZFxuIik7DQo+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9kbWF1bm1hcDsNCj4g KyAgICAgICAgICAgICB9DQo+ICsgICAgIH0NCj4gKw0KPiArICAgICByZXQgPSBkd19tY2lfY3Fl X2luaXRfc2xvdChob3N0KTsNCj4gKyAgICAgaWYgKHJldCkgew0KPiArICAgICAgICAgICAgIGRl dl9lcnIoaG9zdC0+ZGV2LCAic2xvdCAwIGluaXQgZmFpbGVkXG4iKTsNCj4gKyAgICAgICAgICAg ICBnb3RvIGVycl9kbWF1bm1hcDsNCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIHJldCA9IGRldm1f cmVxdWVzdF9pcnEoaG9zdC0+ZGV2LCBob3N0LT5pcnEsIGR3X21jaV9jcWVfaW50ZXJydXB0LA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LT5pcnFfZmxhZ3MsICJkdy1tY2kt Y3FlIiwgaG9zdCk7DQo+ICsgICAgIGlmIChyZXQpDQo+ICsgICAgICAgICAgICAgZ290byBlcnJf ZG1hdW5tYXA7DQo+ICsNCj4gKyAgICAgLypBZnRlciB0aGUgc2xvdCBpbml0aWFsaXphdGlvbiwN Cj4gKyAgICAgICpub3cgd2UgaGF2ZSBtbWMgZGF0YSBhbmQgY2FuIGluaXRpYWxpemUgY21kcSBp ZiB1c2VyIGVuYWJsZWQNCj4gKyAgICAgICovDQo+ICsgICAgIGR3X21jaV9jcWhjaV9pbml0KGhv c3QpOw0KPiArDQo+ICsgICAgIC8qIE5vdyB0aGF0IHNsb3RzIGFyZSBhbGwgc2V0dXAsIHdlIGNh biBlbmFibGUgY2FyZCBkZXRlY3QgKi8NCj4gKyAgICAgZHdfbWNpX2NxZV9lbmFibGVfY2QoaG9z dCk7DQo+ICsNCj4gKyAgICAgcmV0dXJuIDA7DQo+ICsNCj4gK2Vycl9kbWF1bm1hcDoNCj4gKyAg ICAgaWYgKCFJU19FUlIoaG9zdC0+cGRhdGEtPnJzdGMpKQ0KPiArICAgICAgICAgICAgIHJlc2V0 X2NvbnRyb2xfYXNzZXJ0KGhvc3QtPnBkYXRhLT5yc3RjKTsNCj4gK2Vycl9jbGtfY2l1Og0KPiAr ICAgICBjbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+Y2l1X2Nsayk7DQo+ICsNCj4gK2Vycl9j bGtfYml1Og0KPiArICAgICBjbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+Yml1X2Nsayk7DQo+ ICsNCj4gKyAgICAgcmV0dXJuIHJldDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woZHdfbWNpX2Nx ZV9wcm9iZSk7DQo+ICsNCj4gK3ZvaWQgZHdfbWNpX2NxZV9yZW1vdmUoc3RydWN0IGR3X21jaSAq aG9zdCkNCj4gK3sNCj4gKyAgICAgZGV2X2RiZyhob3N0LT5kZXYsICJyZW1vdmUgc2xvdFxuIik7 DQo+ICsgICAgIGlmIChob3N0LT5zbG90KQ0KPiArICAgICAgICAgICAgIGR3X21jaV9jcWVfY2xl YW51cF9zbG90KGhvc3QtPnNsb3QpOw0KPiArDQo+ICsgICAgIGlmICghSVNfRVJSKGhvc3QtPnBk YXRhLT5yc3RjKSkNCj4gKyAgICAgICAgICAgICByZXNldF9jb250cm9sX2Fzc2VydChob3N0LT5w ZGF0YS0+cnN0Yyk7DQo+ICsNCj4gKyAgICAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhvc3QtPmNp dV9jbGspOw0KPiArICAgICBjbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+Yml1X2Nsayk7DQo+ ICsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woZHdfbWNpX2NxZV9yZW1vdmUpOw0KPiArDQo+ICsj aWZkZWYgQ09ORklHX1BNDQo+ICtpbnQgZHdfbWNpX2NxZV9ydW50aW1lX3N1c3BlbmQoc3RydWN0 IGRldmljZSAqZGV2KQ0KPiArew0KPiArICAgICBzdHJ1Y3QgZHdfbWNpICpob3N0ID0gZGV2X2dl dF9kcnZkYXRhKGRldik7DQo+ICsgICAgIGludCByZXQgPSAwOw0KPiArDQo+ICsgICAgIGlmICho b3N0LT5wZGF0YSAmJiAoaG9zdC0+cGRhdGEtPmNhcHMyICYgTU1DX0NBUDJfQ1FFKSkgew0KPiAr ICAgICAgICAgICAgIGlmIChob3N0LT5zbG90KSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICBk ZXZfaW5mbyhob3N0LT5kZXYsICJjcWUgc3VzcGVuZFxuIik7DQo+ICsgICAgICAgICAgICAgICAg ICAgICByZXQgPSBjcWhjaV9zdXNwZW5kKGhvc3QtPnNsb3QtPm1tYyk7DQo+ICsgICAgICAgICAg ICAgICAgICAgICBpZiAocmV0KSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl dl9lcnIoaG9zdC0+ZGV2LCAiY3FlIHN1c3BlbmQgZmFpbGVkXG4iKTsNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gKyAgICAgICAgICAgICAgICAgICAgIH0N Cj4gKyAgICAgICAgICAgICB9DQo+ICsgICAgIH0NCj4gKw0KPiArICAgICByZXQgPSBwbV9ydW50 aW1lX2ZvcmNlX3N1c3BlbmQoZGV2KTsNCj4gKw0KPiArICAgICByZXR1cm4gcmV0Ow0KPiArfQ0K PiArRVhQT1JUX1NZTUJPTChkd19tY2lfY3FlX3J1bnRpbWVfc3VzcGVuZCk7DQo+ICsNCj4gK2lu dCBkd19tY2lfY3FlX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gK3sNCj4g KyAgICAgc3RydWN0IGR3X21jaSAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiArICAg ICBjb25zdCBzdHJ1Y3QgZHdfbWNpX2Rydl9kYXRhICpkcnZfZGF0YSA9IGhvc3QtPmRydl9kYXRh Ow0KPiArICAgICBpbnQgcmV0ID0gMDsNCj4gKw0KPiArICAgICByZXQgPSBwbV9ydW50aW1lX2Zv cmNlX3Jlc3VtZShkZXYpOw0KPiArICAgICBpZiAocmV0KSB7DQo+ICsgICAgICAgICAgICAgZGV2 X2Vycihob3N0LT5kZXYsICJwbV9ydW50aW1lX2ZvcmNlX3Jlc3VtZSBmYWlsZWRcbiIpOw0KPiAr ICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ICsgICAgIH0NCj4gKw0KPiArICAgICBkd19tY2lf Y3FlX3NldHVwKGhvc3QpOw0KPiArICAgICBpZiAoZHJ2X2RhdGEgJiYgZHJ2X2RhdGEtPmluaXQp IHsNCj4gKyAgICAgICAgICAgICByZXQgPSBkcnZfZGF0YS0+aW5pdChob3N0KTsNCj4gKyAgICAg ICAgICAgICBpZiAocmV0KQ0KPiArICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihob3N0LT5k ZXYsICJpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBpbml0IGZhaWxlZFxuIik7DQo+ICsgICAgIH0N Cj4gKw0KPiArICAgICBpbml0X2NvbXBsZXRpb24oaG9zdC0+aW50X3dhaXRpbmcpOw0KPiArDQo+ ICsgICAgIGlmIChob3N0LT5wZGF0YSAmJiAoaG9zdC0+cGRhdGEtPmNhcHMyICYgTU1DX0NBUDJf Q1FFKSkgew0KPiArICAgICAgICAgICAgIGlmIChob3N0LT5zbG90KSB7DQo+ICsgICAgICAgICAg ICAgICAgICAgICBkZXZfaW5mbyhob3N0LT5kZXYsICJjcWUgcmVzdW1lXG4iKTsNCj4gKyAgICAg ICAgICAgICAgICAgICAgIHJldCA9IGNxaGNpX3Jlc3VtZShob3N0LT5zbG90LT5tbWMpOw0KPiAr ICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGV2X2Vycihob3N0LT5kZXYsICJjcWUgcmVzdW1lIGZhaWxlZFxuIik7DQo+ICsgICAg ICAgICAgICAgfQ0KPiArICAgICB9DQo+ICsNCj4gKyAgICAgZHdfbWNpX2NxZV9zZXR1cF9idXMo aG9zdC0+c2xvdCwgdHJ1ZSk7DQo+ICsgICAgIGR3X21jaV9jcWVfZW5hYmxlX2NkKGhvc3QpOw0K PiArDQo+ICsgICAgIHJldHVybiByZXQ7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGR3X21jaV9j cWVfcnVudGltZV9yZXN1bWUpOw0KPiArI2VuZGlmIC8qIENPTkZJR19QTSAqLw0KPiArDQo+ICtz dGF0aWMgaW50IF9faW5pdCBkd19tY2lfY3FlX2luaXQodm9pZCkNCj4gK3sNCj4gKyAgICAgcHJf aW5mbygiU3lub3BzeXMgRGVzaWdud2FyZSBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIERyaXZl clxuIik7DQo+ICsgICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBfX2V4 aXQgZHdfbWNpX2NxZV9leGl0KHZvaWQpDQo+ICt7DQo+ICt9DQo+ICsNCj4gK21vZHVsZV9pbml0 KGR3X21jaV9jcWVfaW5pdCk7DQo+ICttb2R1bGVfZXhpdChkd19tY2lfY3FlX2V4aXQpOw0KPiAr DQo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkRXIE11bHRpbWVkaWEgQ2FyZCBDTURRIEludGVyZmFj ZSBkcml2ZXIiKTsNCj4gK01PRFVMRV9BVVRIT1IoIjxqeWFuY2hvdUByZWFsdGVrLmNvbT4iKTsN Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hv c3QvZHdfbW1jX2NxZS5oIGIvZHJpdmVycy9tbWMvaG9zdC9kd19tbWNfY3FlLmgNCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lZjUyYjY3YWNlYjYNCj4gLS0t IC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tY19jcWUuaA0KPiBAQCAt MCwwICsxLDQ0NCBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3It bGF0ZXIgKi8NCj4gKy8qDQo+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDIzIFJlYWx0ZWsgU2VtaWNv bmR1Y3RvcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQo+ICsgKg0KPiArICovDQo+ICsNCj4gKyNp Zm5kZWYgX19EV19NTUNfQ1FFX0gNCj4gKyNkZWZpbmUgX19EV19NTUNfQ1FFX0gNCj4gKw0KPiAr I2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVw dC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L21tYy9jb3JlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgv cmVzZXQuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPg0KPiArDQo+ICtzdHJ1 Y3QgZHdfbWNpIHsNCj4gKyAgICAgc3BpbmxvY2tfdCAgICAgICAgICAgICAgbG9jazsNCj4gKyAg ICAgc3BpbmxvY2tfdCAgICAgICAgICAgICAgaXJxX2xvY2s7DQo+ICsgICAgIHN0cnVjdCB0YXNr bGV0X3N0cnVjdCAgIHRhc2tsZXQ7DQo+ICsgICAgIHN0cnVjdCByd19zZW1hcGhvcmUgICAgIGNy X3J3X3NlbTsNCj4gKw0KPiArICAgICB2b2lkIF9faW9tZW0gICAgICAgICAgICAqcmVnczsNCj4g KyAgICAgcmVzb3VyY2Vfc2l6ZV90ICAgICAgICAgcGh5X3JlZ3M7DQo+ICsNCj4gKyAgICAgc3Ry dWN0IG1tY19yZXF1ZXN0ICAgICAgKm1ycTsNCj4gKyAgICAgc3RydWN0IG1tY19jb21tYW5kICAg ICAgKmNtZDsNCj4gKyAgICAgc3RydWN0IG1tY19jb21tYW5kICAgICAgc3RvcF9hYm9ydDsNCj4g KyAgICAgc3RydWN0IG1tY19kYXRhICAgICAgICAgKmRhdGE7DQo+ICsNCj4gKyAgICAgc3RydWN0 IGNsayAgICAgICAgICAgICAgKmJpdV9jbGs7DQo+ICsgICAgIHN0cnVjdCBjbGsgICAgICAgICAg ICAgICpjaXVfY2xrOw0KPiArICAgICBzdHJ1Y3QgZHdfbWNpX3Nsb3QgICAgICAqc2xvdDsNCj4g KyAgICAgc3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7DQo+ICsgICAgIHN0cnVjdCBjb21w bGV0aW9uICAgICAgICppbnRfd2FpdGluZzsNCj4gKw0KPiArICAgICB1bnNpZ25lZCBpbnQgICAg ICAgICAgICAqZGVzY192YWRkcjsNCj4gKyAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgKnNn X2NwdTsNCj4gKyAgICAgZG1hX2FkZHJfdCAgICAgICAgICAgICAgc2dfZG1hOw0KPiArICAgICBp bnQgICAgICAgICAgICAgICAgICAgICB1c2VfZG1hOw0KPiArDQo+ICsgICAgIHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgICpwZGV2Ow0KPiArICAgICBzdHJ1Y3QgZGV2aWNlICAgICAgICAgICAqZGV2 Ow0KPiArICAgICBzdHJ1Y3QgZHdfbWNpX2JvYXJkICAgICAqcGRhdGE7DQo+ICsgICAgIGNvbnN0 IHN0cnVjdCBkd19tY2lfZHJ2X2RhdGEgICAgKmRydl9kYXRhOw0KPiArICAgICB2b2lkICAgICAg ICAgICAgICAgICAgICAqcHJpdjsNCj4gKw0KPiArICAgICB1MzIgICAgICAgICAgICAgICAgICAg ICBvcGNvZGU7DQo+ICsgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgIGFyZzsNCj4gKyAgICAg dTE2ICAgICAgICAgICAgICAgICAgICAgbm9ybWFsX2ludGVycnVwdDsNCj4gKyAgICAgdTE2ICAg ICAgICAgICAgICAgICAgICAgZXJyb3JfaW50ZXJydXB0Ow0KPiArICAgICB1MTYgICAgICAgICAg ICAgICAgICAgICBhdXRvX2Vycm9yX2ludGVycnVwdDsNCj4gKw0KPiArICAgICB1MzIgICAgICAg ICAgICAgICAgICAgICBidXNfaHo7DQo+ICsgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgIGN1 cnJlbnRfc3BlZWQ7DQo+ICsgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgIHN0b3BfY21kcjsN Cj4gKyAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgaXNfc2JjOw0KPiArICAgICBpbnQgICAg ICAgICAgICAgICAgICAgICBkbWFfNjRiaXRfYWRkcmVzczsNCj4gKyAgICAgaW50ICAgICAgICAg ICAgICAgICAgICAgdXNpbmdfZG1hOw0KPiArDQo+ICsgICAgIHVuc2lnbmVkIGxvbmcgICAgICAg ICAgIGlycV9mbGFnczsgLyogSVJRIGZsYWdzICovDQo+ICsgICAgIGludCAgICAgICAgICAgICAg ICAgICAgIGlycTsNCj4gKyAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgc2Rpb19pZDA7DQo+ ICsNCj4gKyAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICAgICAgKnNnOw0KPiArICAgICB1MzIgICAg ICAgICAgICAgICAgICAgICBkbWFfbmVudHM7DQo+ICsNCj4gKyAgICAgdTggICAgICAgICAgICAg ICAgICAgICAgdHVuaW5nOw0KPiArICAgICB1OCAgICAgICAgICAgICAgICAgICAgICBjcWVfcmVl bmFibGU7DQo+ICsgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgIGNtZF9hdG9taWM7DQo+ICsg ICAgIGJvb2wgICAgICAgICAgICAgICAgICAgIHNoaWZ0Ow0KPiArICAgICBzdHJ1Y3QgY3FoY2lf aG9zdCAgICAgICAqY3FlOw0KPiArfTsNCj4gKw0KPiArZW51bSB7DQo+ICsgICAgIFRSQU5TX01P REVfUElPID0gMCwNCj4gKyAgICAgVFJBTlNfTU9ERV9ETUEsDQo+ICt9Ow0KPiArDQo+ICtlbnVt IGR3X21jaV9jb29raWUgew0KPiArICAgICBDT09LSUVfVU5NQVBQRUQsDQo+ICsgICAgIENPT0tJ RV9QUkVfTUFQUEVELCAgICAgIC8qIG1hcHBlZCBieSBwcmVfcmVxKCkgb2YgZHdtbWMgKi8NCj4g KyAgICAgQ09PS0lFX01BUFBFRCwgICAgICAgICAgLyogbWFwcGVkIGJ5IHByZXBhcmVfZGF0YSgp IG9mIGR3bW1jICovDQo+ICt9Ow0KPiArLyogZU1NQyBjb250cm9sIHJlZ2lzdGVyIGRlZmluaXRp b24gKi8NCj4gKyNkZWZpbmUgU0RNTUNfU0RNQVNBX1IgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMHgwMDANCj4gKyNkZWZpbmUgU0RNTUNfQkxPQ0tTSVpFX1IgICAgICAgICAgICAgICAg ICAgIDB4MDA0DQo+ICsjZGVmaW5lIFNETU1DX0JMT0NLQ09VTlRfUiAgICAgICAgICAgICAgICAg ICAweDAwNg0KPiArI2RlZmluZSBTRE1NQ19BUkdVTUVOVF9SICAgICAgICAgICAgICAgICAgICAg MHgwMDgNCj4gKyNkZWZpbmUgU0RNTUNfWEZFUl9NT0RFX1IgICAgICAgICAgICAgICAgICAgIDB4 MDBjDQo+ICsjZGVmaW5lIFNETU1DX0NNRF9SICAgICAgICAgICAgICAgICAgICAgICAgICAweDAw ZQ0KPiArI2RlZmluZSBTRE1NQ19SRVNQMDFfUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAweDAxMA0KPiArI2RlZmluZSBTRE1NQ19SRVNQMjNfUiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAweDAxNA0KPiArI2RlZmluZSBTRE1NQ19SRVNQNDVfUiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAweDAxOA0KPiArI2RlZmluZSBTRE1NQ19SRVNQNjdfUiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAweDAxYw0KPiArI2RlZmluZSBTRE1NQ19CVUZfREFUQV9SICAg ICAgICAgICAgICAgICAgICAgMHgwMjANCj4gKyNkZWZpbmUgU0RNTUNfUFNUQVRFX1JFRyAgICAg ICAgICAgICAgICAgICAgIDB4MDI0DQo+ICsjZGVmaW5lIFNETU1DX0hPU1RfQ1RSTDFfUiAgICAg ICAgICAgICAgICAgICAweDAyOA0KPiArI2RlZmluZSBTRE1NQ19QV1JfQ1RSTF9SICAgICAgICAg ICAgICAgICAgICAgMHgwMjkNCj4gKyNkZWZpbmUgU0RNTUNfQkdBUF9DVFJMX1IgICAgICAgICAg ICAgICAgICAgIDB4MDJhDQo+ICsjZGVmaW5lIFNETU1DX0NMS19DVFJMX1IgICAgICAgICAgICAg ICAgICAgICAweDAyYw0KPiArI2RlZmluZSBTRE1NQ19UT1VUX0NUUkxfUiAgICAgICAgICAgICAg ICAgICAgMHgwMmUNCj4gKyNkZWZpbmUgU0RNTUNfU1dfUlNUX1IgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMmYNCj4gKyNkZWZpbmUgU0RNTUNfTk9STUFMX0lOVF9TVEFUX1IgICAg ICAgICAgICAgICAgICAgICAgMHgwMzANCj4gKyNkZWZpbmUgU0RNTUNfRVJST1JfSU5UX1NUQVRf UiAgICAgICAgICAgICAgICAgICAgICAgMHgwMzINCj4gKyNkZWZpbmUgU0RNTUNfTk9STUFMX0lO VF9TVEFUX0VOX1IgICAgICAgICAgIDB4MDM0DQo+ICsjZGVmaW5lIFNETU1DX0VSUk9SX0lOVF9T VEFUX0VOX1IgICAgICAgICAgICAweDAzNg0KPiArI2RlZmluZSBTRE1NQ19OT1JNQUxfSU5UX1NJ R05BTF9FTl9SICAgICAgICAgMHgwMzgNCj4gKyNkZWZpbmUgU0RNTUNfRVJST1JfSU5UX1NJR05B TF9FTl9SICAgICAgICAgIDB4MDNhDQo+ICsjZGVmaW5lIFNETU1DX0FVVE9fQ01EX1NUQVRfUiAg ICAgICAgICAgICAgICAgICAgICAgIDB4MDNjDQo+ICsjZGVmaW5lIFNETU1DX0hPU1RfQ1RSTDJf UiAgICAgICAgICAgICAgICAgICAweDAzZQ0KPiArI2RlZmluZSBTRE1NQ19BRE1BX0VSUl9TVEFU X1IgICAgICAgICAgICAgICAgICAgICAgICAweDA1NA0KPiArI2RlZmluZSBTRE1NQ19BRE1BX1NB X0xPV19SICAgICAgICAgICAgICAgICAgMHgwNTgNCj4gKw0KPiArI2RlZmluZSBTRE1NQ19NU0hD X0NUUkxfUiAgICAgICAgICAgICAgICAgICAgMHgyMDgNCj4gKyNkZWZpbmUgU0RNTUNfQ1RSTF9S ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjJjDQo+ICsNCj4gKyNkZWZpbmUgU0RNTUNfQ01E X0NPTkZMSUNUX0NIRUNLICAgICAgICAgICAgIEJJVCgwKQ0KPiArI2RlZmluZSBDTURfSURYX01B U0soeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHggPj4gOCkmMHgzZikNCj4gKw0K PiArLyoweGMqLw0KPiArI2RlZmluZSBTRE1NQ19NVUxUSV9CTEtfU0VMICAgICAgICAgICAgICAg ICAgNQ0KPiArI2RlZmluZSBTRE1NQ19EQVRBX1hGRVJfRElSICAgICAgICAgICAgICAgICAgNA0K PiArI2RlZmluZSBTRE1NQ19CTE9DS19DT1VOVF9FTkFCTEUgICAgICAgICAgICAgQklUKDEpDQo+ ICsjZGVmaW5lIFNETU1DX0RNQV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICBCSVQoMCkNCj4g KyNkZWZpbmUgU0RNTUNfQVVUT19DTURfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgMg0K PiArI2RlZmluZSBTRE1NQ19BVVRPX0NNRF9ESVNBQkxFRCAgICAgICAgICAgICAgICAgICAgICAw eDANCj4gKyNkZWZpbmUgU0RNTUNfQVVUT19DTUQxMl9FTkFCTEVEICAgICAgICAgICAgIDB4MQ0K PiArI2RlZmluZSBTRE1NQ19BVVRPX0NNRDIzX0VOQUJMRUQgICAgICAgICAgICAgMHgyDQo+ICsj ZGVmaW5lIFNETU1DX0FVVE9fQ01EX1NFTCAgICAgICAgICAgICAgICAgICAweDMNCj4gKw0KPiAr LyoweGUqLw0KPiArI2RlZmluZSBTRE1NQ19SRVNQX1RZUEVfU0VMRUNUICAgICAgICAgICAgICAg ICAgICAgICAwDQo+ICsjZGVmaW5lIFNETU1DX0NNRF9UWVBFICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDYNCj4gKyNkZWZpbmUgU0RNTUNfTk9fUkVTUCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMHgwDQo+ICsjZGVmaW5lIFNETU1DX1JFU1BfTEVOXzEzNiAgICAgICAgICAg ICAgICAgICAweDENCj4gKyNkZWZpbmUgU0RNTUNfUkVTUF9MRU5fNDggICAgICAgICAgICAgICAg ICAgIDB4Mg0KPiArI2RlZmluZSBTRE1NQ19SRVNQX0xFTl80OEIgICAgICAgICAgICAgICAgICAg MHgzDQo+ICsjZGVmaW5lIFNETU1DX0NNRF9DSEtfUkVTUF9DUkMgICAgICAgICAgICAgICAgICAg ICAgIEJJVCgzKQ0KPiArI2RlZmluZSBTRE1NQ19DTURfSURYX0NIS19FTkFCTEUgICAgICAgICAg ICAgQklUKDQpDQo+ICsjZGVmaW5lIFNETU1DX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAg ICBCSVQoNSkNCj4gKyNkZWZpbmUgU0RNTUNfQUJPUlRfQ01EICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHgzDQo+ICsjZGVmaW5lIFNETU1DX1JFU1VNRV9DTUQgICAgICAgICAgICAgICAg ICAgICAweDINCj4gKyNkZWZpbmUgU0RNTUNfU1VTUEVORF9DTUQgICAgICAgICAgICAgICAgICAg IDB4MQ0KPiArI2RlZmluZSBTRE1NQ19OT1JNQUxfQ01EICAgICAgICAgICAgICAgICAgICAgMHgw DQo+ICsNCj4gKy8qMHgyNCBQU1RBVEUqLw0KPiArI2RlZmluZSBTRE1NQ19DTURfSU5ISUJJVCAg ICAgICAgICAgICAgICAgICAgQklUKDApDQo+ICsjZGVmaW5lIFNETU1DX0NNRF9JTkhJQklUX0RB VCAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgxKQ0KPiArI2RlZmluZSBTRE1NQ19EQVRfM18w ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhmIDw8IDIwKQ0KPiArI2RlZmluZSBT RE1NQ19EQVRfN180ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhmIDw8IDQpDQo+ ICsNCj4gKy8qMHgyOCovDQo+ICsjZGVmaW5lIFNETU1DX0RNQV9TRUwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDMNCj4gKyNkZWZpbmUgU0RNTUNfU0RNQSAgICAgICAgICAgICAgICAg ICAgICAgICAgICgweDApDQo+ICsjZGVmaW5lIFNETU1DX0FETUEyXzMyICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgweDIpDQo+ICsjZGVmaW5lIFNETU1DX0FETUEyXzY0ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgweDMpDQo+ICsjZGVmaW5lIFNETU1DX0VYVF9EQVRfWEZF UiAgICAgICAgICAgICAgICAgICBCSVQoNSkNCj4gKyNkZWZpbmUgU0RNTUNfRVhUX0RBVF9YRkVS X01BU0sgICAgICAgICAgICAgICAgICAgICAgKH5TRE1NQ19FWFRfREFUX1hGRVIgJiAweGZmKQ0K PiArI2RlZmluZSBTRE1NQ19ISUdIX1NQRUVEX0VOICAgICAgICAgICAgICAgICAgQklUKDIpDQo+ ICsjZGVmaW5lIFNETU1DX0hJR0hfU1BFRURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgo fkJJVCgyKSkgJiAweGZmKQ0KPiArI2RlZmluZSBTRE1NQ19VSFNfTU9ERV9TRUxfTUFTSyAgICAg ICAgICAgICAgICAgICAgICAoKH4oQklUKDApfEJJVCgxKXxCSVQoMikpKSAmIDB4ZmZmZikNCj4g KyNkZWZpbmUgU0RNTUNfREFUX1hGRVJfV0lEVEggICAgICAgICAgICAgICAgIEJJVCgxKQ0KPiAr I2RlZmluZSBTRE1NQ19EQVRfWEZFUl9XSURUSF9NQVNLICAgICAgICAgICAgKH5TRE1NQ19EQVRf WEZFUl9XSURUSCAmIDB4ZmYpDQo+ICsjZGVmaW5lIFNETU1DX0JVU19XSURUSF84ICAgICAgICAg ICAgICAgICAgICBTRE1NQ19FWFRfREFUX1hGRVINCj4gKyNkZWZpbmUgU0RNTUNfQlVTX1dJRFRI XzQgICAgICAgICAgICAgICAgICAgIFNETU1DX0RBVF9YRkVSX1dJRFRIDQo+ICsjZGVmaW5lIFNE TU1DX0JVU19XSURUSF8xICAgICAgICAgICAgICAgICAgICAwDQo+ICsjZGVmaW5lIFNETU1DX0RN QV9TRUxfQ0xSICAgICAgICAgICAgICAgICAgICAoMHhmZiAmICh+KDB4Mzw8U0RNTUNfRE1BX1NF TCkpKQ0KPiArI2RlZmluZSBTRE1NQ19EQVRBX1hGRVJfQ0xSICAgICAgICAgICAgICAgICAgKCgw eGZmICYgKH5TRE1NQ19FWFRfREFUX1hGRVIpKSBcDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmICh+U0RNTUNfREFUX1hGRVJfV0lEVEgpKQ0KPiArDQo+ ICsvKjB4MmEqLw0KPiArI2RlZmluZSBTRE1NQ19TVE9QX0JHX1JFUSAgICAgICAgICAgICAgICAg ICAgQklUKDApDQo+ICsNCj4gKy8qMHgyZiBTV19SU1RfUiovDQo+ICsjZGVmaW5lIFNETU1DX1JT VF9EQVQgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMikNCj4gKyNkZWZpbmUgU0RNTUNfUlNU X0NNRCAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgxKQ0KPiArI2RlZmluZSBTRE1NQ19SU1Rf QUxMICAgICAgICAgICAgICAgICAgICAgICAgQklUKDApDQo+ICsNCj4gKy8qMHgzMCBzdGF0dXMg Yml0bWFwKi8NCj4gKyNkZWZpbmUgU0RNTUNfU1RBVFVTX0FMTCAgICAgICAgICAgICAgICAgICAg IDB4ZmZmZg0KPiArI2RlZmluZSBTRE1NQ19FUlJfSU5URVJSVVBUICAgICAgICAgICAgICAgICAg QklUKDE1KQ0KPiArI2RlZmluZSBTRE1NQ19DUUVfRVZFTlQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBCSVQoMTQpDQo+ICsjZGVmaW5lIFNETU1DX0ZYX0VWRU5UICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEJJVCgxMykNCj4gKyNkZWZpbmUgU0RNTUNfUkVfVFVORV9FVkVOVCAg ICAgICAgICAgICAgICAgIEJJVCgxMikNCj4gKyNkZWZpbmUgU0RNTUNfSU5UX0MgICAgICAgICAg ICAgICAgICAgICAgICAgIEJJVCgxMSkNCj4gKyNkZWZpbmUgU0RNTUNfSU5UX0IgICAgICAgICAg ICAgICAgICAgICAgICAgIEJJVCgxMCkNCj4gKyNkZWZpbmUgU0RNTUNfSU5UX0EgICAgICAgICAg ICAgICAgICAgICAgICAgIEJJVCg5KQ0KPiArI2RlZmluZSBTRE1NQ19DQVJEX0lOVEVSUlVQVCAg ICAgICAgICAgICAgICAgQklUKDgpDQo+ICsjZGVmaW5lIFNETU1DX0NBUkRfUkVNT1ZBTCAgICAg ICAgICAgICAgICAgICBCSVQoNykNCj4gKyNkZWZpbmUgU0RNTUNfQ0FSRF9JTlNFUlRJT04gICAg ICAgICAgICAgICAgIEJJVCg2KQ0KPiArI2RlZmluZSBTRE1NQ19CVUZfUkRfUkVBRFkgICAgICAg ICAgICAgICAgICAgQklUKDUpDQo+ICsjZGVmaW5lIFNETU1DX0JVRl9XUl9SRUFEWSAgICAgICAg ICAgICAgICAgICBCSVQoNCkNCj4gKyNkZWZpbmUgU0RNTUNfRE1BX0lOVEVSUlBUICAgICAgICAg ICAgICAgICAgIEJJVCgzKQ0KPiArI2RlZmluZSBTRE1NQ19CR0FQX0VWRU5UICAgICAgICAgICAg ICAgICAgICAgQklUKDIpDQo+ICsjZGVmaW5lIFNETU1DX1hGRVJfQ09NUExFVEUgICAgICAgICAg ICAgICAgICBCSVQoMSkNCj4gKyNkZWZpbmUgU0RNTUNfQ01EX0NPTVBMRVRFICAgICAgICAgICAg ICAgICAgIEJJVCgwKQ0KPiArDQo+ICsvKjB4MzIgZXJyb3IgYml0bWFwKi8NCj4gKyNkZWZpbmUg U0RNTUNfVkVORE9SX0VSUjMgICAgICAgICAgICAgICAgICAgIEJJVCgxNSkNCj4gKyNkZWZpbmUg U0RNTUNfVkVORE9SX0VSUjIgICAgICAgICAgICAgICAgICAgIEJJVCgxNCkNCj4gKyNkZWZpbmUg U0RNTUNfVkVORE9SX0VSUjEgICAgICAgICAgICAgICAgICAgIEJJVCgxMykNCj4gKyNkZWZpbmUg U0RNTUNfQk9PVF9BQ0tfRVJSICAgICAgICAgICAgICAgICAgIEJJVCgxMikNCj4gKyNkZWZpbmUg U0RNTUNfUkVTUF9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDExKQ0KPiAr I2RlZmluZSBTRE1NQ19UVU5JTkdfRVJSICAgICAgICAgICAgICAgICAgICAgQklUKDEwKQ0KPiAr I2RlZmluZSBTRE1NQ19BRE1BX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQo OSkNCj4gKyNkZWZpbmUgU0RNTUNfQVVUT19DTURfRVJSICAgICAgICAgICAgICAgICAgIEJJVCg4 KQ0KPiArI2RlZmluZSBTRE1NQ19DVVJfTE1UX0VSUiAgICAgICAgICAgICAgICAgICAgQklUKDcp DQo+ICsjZGVmaW5lIFNETU1DX0RBVEFfRU5EX0JJVF9FUlIgICAgICAgICAgICAgICAgICAgICAg IEJJVCg2KQ0KPiArI2RlZmluZSBTRE1NQ19EQVRBX0NSQ19FUlIgICAgICAgICAgICAgICAgICAg QklUKDUpDQo+ICsjZGVmaW5lIFNETU1DX0RBVEFfVE9VVF9FUlIgICAgICAgICAgICAgICAgICBC SVQoNCkNCj4gKyNkZWZpbmUgU0RNTUNfQ01EX0lEWF9FUlIgICAgICAgICAgICAgICAgICAgIEJJ VCgzKQ0KPiArI2RlZmluZSBTRE1NQ19DTURfRU5EX0JJVF9FUlIgICAgICAgICAgICAgICAgICAg ICAgICBCSVQoMikNCj4gKyNkZWZpbmUgU0RNTUNfQ01EX0NSQ19FUlIgICAgICAgICAgICAgICAg ICAgIEJJVCgxKQ0KPiArI2RlZmluZSBTRE1NQ19DTURfVE9VVF9FUlIgICAgICAgICAgICAgICAg ICAgQklUKDApDQo+ICsjZGVmaW5lIFNETU1DX0NNRF9FUlIgICAgICAgICAgICAgICAgICAgICAg ICAgICAoU0RNTUNfQVVUT19DTURfRVJSfCBcDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTRE1NQ19DTURfSURYX0VSUnxTRE1NQ19DTURfRU5EX0JJVF9F UlJ8IFwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNE TU1DX0NNRF9DUkNfRVJSfFNETU1DX0NNRF9UT1VUX0VSUikNCj4gKyNkZWZpbmUgU0RNTUNfREFU QV9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNETU1DX0FETUFfRVJSfCBcDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19EQVRB X0VORF9CSVRfRVJSfCBcDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTRE1NQ19EQVRBX0NSQ19FUlJ8U0RNTUNfREFUQV9UT1VUX0VSUikNCj4gKw0KPiAr LyoweDM0IHN0YXR1cyBlbmFibGUgYml0bWFwKi8NCj4gKyNkZWZpbmUgU0RNTUNfQ1FFX0VWRU5U X1NUQVRfRU4gICAgICAgICAgICAgICAgICAgICAgQklUKDE0KQ0KPiArI2RlZmluZSBTRE1NQ19G WF9FVkVOVF9TVEFUX0VOICAgICAgICAgICAgICAgICAgICAgICBCSVQoMTMpDQo+ICsjZGVmaW5l IFNETU1DX1JFX1RVTkVfRVZFTlRfU1RBVF9FTiAgICAgICAgICBCSVQoMTIpDQo+ICsjZGVmaW5l IFNETU1DX0lOVF9DX1NUQVRfRU4gICAgICAgICAgICAgICAgICBCSVQoMTEpDQo+ICsjZGVmaW5l IFNETU1DX0lOVF9CX1NUQVRfRU4gICAgICAgICAgICAgICAgICBCSVQoMTApDQo+ICsjZGVmaW5l IFNETU1DX0lOVF9BX1NUQVRfRU4gICAgICAgICAgICAgICAgICBCSVQoOSkNCj4gKyNkZWZpbmUg U0RNTUNfQ0FSRF9JTlRFUlJVUFRfU1RBVF9FTiAgICAgICAgIEJJVCg4KQ0KPiArI2RlZmluZSBT RE1NQ19DQVJEX1JFTU9WQUxfU1RBVF9FTiAgICAgICAgICAgQklUKDcpDQo+ICsjZGVmaW5lIFNE TU1DX0NBUkRfSU5TRVJUSU9OX1NUQVRfRU4gICAgICAgICBCSVQoNikNCj4gKyNkZWZpbmUgU0RN TUNfQlVGX1JEX1JFQURZX1NUQVRfRU4gICAgICAgICAgIEJJVCg1KQ0KPiArI2RlZmluZSBTRE1N Q19CVUZfV1JfUkVBRFlfU1RBVF9FTiAgICAgICAgICAgQklUKDQpDQo+ICsjZGVmaW5lIFNETU1D X0RNQV9JTlRFUlJQVF9TVEFUX0VOICAgICAgICAgICBCSVQoMykNCj4gKyNkZWZpbmUgU0RNTUNf QkdBUF9FVkVOVF9TVEFUX0VOICAgICAgICAgICAgIEJJVCgyKQ0KPiArI2RlZmluZSBTRE1NQ19Y RkVSX0NPTVBMRVRFX1NUQVRfRU4gICAgICAgICAgQklUKDEpDQo+ICsjZGVmaW5lIFNETU1DX0NN RF9DT01QTEVURV9TVEFUX0VOICAgICAgICAgICBCSVQoMCkNCj4gKw0KPiArLyoweDM2IGVycm9y IHN0YXR1cyBlbmFibGUgYml0bWFwKi8NCj4gKyNkZWZpbmUgU0RNTUNfVkVORE9SX0VSUl9TVEFU X0VOMyAgICAgICAgICAgIEJJVCgxNSkNCj4gKyNkZWZpbmUgU0RNTUNfVkVORE9SX0VSUl9TVEFU X0VOMiAgICAgICAgICAgIEJJVCgxNCkNCj4gKyNkZWZpbmUgU0RNTUNfVkVORE9SX0VSUl9TVEFU X0VOMSAgICAgICAgICAgIEJJVCgxMykNCj4gKyNkZWZpbmUgU0RNTUNfQk9PVF9BQ0tfRVJSX1NU QVRfRU4gICAgICAgICAgIEJJVCgxMikNCj4gKyNkZWZpbmUgU0RNTUNfUkVTUF9FUlJfU1RBVF9F TiAgICAgICAgICAgICAgICAgICAgICAgQklUKDExKQ0KPiArI2RlZmluZSBTRE1NQ19UVU5JTkdf RVJSX1NUQVRfRU4gICAgICAgICAgICAgQklUKDEwKQ0KPiArI2RlZmluZSBTRE1NQ19BRE1BX0VS Ul9TVEFUX0VOICAgICAgICAgICAgICAgICAgICAgICBCSVQoOSkNCj4gKyNkZWZpbmUgU0RNTUNf QVVUT19DTURfRVJSX1NUQVRfRU4gICAgICAgICAgIEJJVCg4KQ0KPiArI2RlZmluZSBTRE1NQ19D VVJfTE1UX0VSUl9TVEFUX0VOICAgICAgICAgICAgQklUKDcpDQo+ICsjZGVmaW5lIFNETU1DX0RB VEFfRU5EX0JJVF9FUlJfU1RBVF9FTiAgICAgICAgICAgICAgIEJJVCg2KQ0KPiArI2RlZmluZSBT RE1NQ19EQVRBX0NSQ19FUlJfU1RBVF9FTiAgICAgICAgICAgQklUKDUpDQo+ICsjZGVmaW5lIFNE TU1DX0RBVEFfVE9VVF9FUlJfU1RBVF9FTiAgICAgICAgICBCSVQoNCkNCj4gKyNkZWZpbmUgU0RN TUNfQ01EX0lEWF9FUlJfU1RBVF9FTiAgICAgICAgICAgIEJJVCgzKQ0KPiArI2RlZmluZSBTRE1N Q19DTURfRU5EX0JJVF9FUlJfU1RBVF9FTiAgICAgICAgICAgICAgICBCSVQoMikNCj4gKyNkZWZp bmUgU0RNTUNfQ01EX0NSQ19FUlJfU1RBVF9FTiAgICAgICAgICAgIEJJVCgxKQ0KPiArI2RlZmlu ZSBTRE1NQ19DTURfVE9VVF9FUlJfU1RBVF9FTiAgICAgICAgICAgQklUKDApDQo+ICsNCj4gKy8q MHgzOCBzaWduYWwgaW50ZXJydXB0IGVuYWJsZSovDQo+ICsjZGVmaW5lIFNETU1DX0NRRV9FVkVO VF9TSUdOQUxfRU4gICAgICAgICAgICBCSVQoMTQpDQo+ICsjZGVmaW5lIFNETU1DX0ZYX0VWRU5U X1NJR05BTF9FTiAgICAgICAgICAgICBCSVQoMTMpDQo+ICsjZGVmaW5lIFNETU1DX1JFX1RVTkVf RVZFTlRfU0lHTkFMX0VOICAgICAgICAgICAgICAgIEJJVCgxMikNCj4gKyNkZWZpbmUgU0RNTUNf SU5UX0NfU0lHTkFMX0VOICAgICAgICAgICAgICAgICAgICAgICAgQklUKDExKQ0KPiArI2RlZmlu ZSBTRE1NQ19JTlRfQl9TSUdOQUxfRU4gICAgICAgICAgICAgICAgICAgICAgICBCSVQoMTApDQo+ ICsjZGVmaW5lIFNETU1DX0lOVF9BX1NJR05BTF9FTiAgICAgICAgICAgICAgICAgICAgICAgIEJJ VCg5KQ0KPiArI2RlZmluZSBTRE1NQ19DQVJEX0lOVEVSUlVQVF9TSUdOQUxfRU4gICAgICAgICAg ICAgICBCSVQoOCkNCj4gKyNkZWZpbmUgU0RNTUNfQ0FSRF9SRU1PVkFMX1NJR05BTF9FTiAgICAg ICAgIEJJVCg3KQ0KPiArI2RlZmluZSBTRE1NQ19DQVJEX0lOU0VSVElPTl9TSUdOQUxfRU4gICAg ICAgICAgICAgICBCSVQoNikNCj4gKyNkZWZpbmUgU0RNTUNfQlVGX1JEX1JFQURZX1NJR05BTF9F TiAgICAgICAgIEJJVCg1KQ0KPiArI2RlZmluZSBTRE1NQ19CVUZfV1JfUkVBRFlfU0lHTkFMX0VO ICAgICAgICAgQklUKDQpDQo+ICsjZGVmaW5lIFNETU1DX0RNQV9JTlRFUlJQVF9TSUdOQUxfRU4g ICAgICAgICBCSVQoMykNCj4gKyNkZWZpbmUgU0RNTUNfQkdBUF9FVkVOVF9TSUdOQUxfRU4gICAg ICAgICAgIEJJVCgyKQ0KPiArI2RlZmluZSBTRE1NQ19YRkVSX0NPTVBMRVRFX1NJR05BTF9FTiAg ICAgICAgICAgICAgICBCSVQoMSkNCj4gKyNkZWZpbmUgU0RNTUNfQ01EX0NPTVBMRVRFX1NJR05B TF9FTiAgICAgICAgIEJJVCgwKQ0KPiArI2RlZmluZSBTRE1NQ19OT1JNQUxfSU5UX1NJR05BTF9D TURfRU5fUiAgICAgKH4oQklUKDYpIHwgQklUKDcpIHwgQklUKDgpIHwgQklUKDEpKSAmIDB4ZmZm ZikNCj4gKyNkZWZpbmUgU0RNTUNfTk9STUFMX0lOVF9TSUdOQUxfREFUX0VOX1IgICAgICh+KEJJ VCg2KSB8IEJJVCg3KSB8IEJJVCg4KSB8IEJJVCgwKSkgJiAweGZmZmYpDQo+ICsjZGVmaW5lIFNE TU1DX05PUk1BTF9JTlRfU0lHTkFMX0NRRV9FTl9SICAgICAofihCSVQoNikgfCBCSVQoNykgfCBC SVQoOCkgfCBcDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBCSVQoMSkgfCBCSVQoMCkpICYgMHhmZmZmKQ0KPiArDQo+ICsvKjB4M2EgZXJyb3Igc3NpZ25h bCBlbmFibGUgYml0bWFwKi8NCj4gKyNkZWZpbmUgU0RNTUNfVkVORE9SX0VSUl9TSUdOQUxfRU4z ICAgICAgICAgIEJJVCgxNSkNCj4gKyNkZWZpbmUgU0RNTUNfVkVORE9SX0VSUl9TSUdOQUxfRU4y ICAgICAgICAgIEJJVCgxNCkNCj4gKyNkZWZpbmUgU0RNTUNfVkVORE9SX0VSUl9TSUdOQUxfRU4x ICAgICAgICAgIEJJVCgxMykNCj4gKyNkZWZpbmUgU0RNTUNfQk9PVF9BQ0tfRVJSX1NJR05BTF9F TiAgICAgICAgIEJJVCgxMikNCj4gKyNkZWZpbmUgU0RNTUNfUkVTUF9FUlJfU0lHTkFMX0VOICAg ICAgICAgICAgIEJJVCgxMSkNCj4gKyNkZWZpbmUgU0RNTUNfVFVOSU5HX0VSUl9TSUdOQUxfRU4g ICAgICAgICAgIEJJVCgxMCkNCj4gKyNkZWZpbmUgU0RNTUNfQURNQV9FUlJfU0lHTkFMX0VOICAg ICAgICAgICAgIEJJVCg5KQ0KPiArI2RlZmluZSBTRE1NQ19BVVRPX0NNRF9FUlJfU0lHTkFMX0VO ICAgICAgICAgQklUKDgpDQo+ICsjZGVmaW5lIFNETU1DX0NVUl9MTVRfRVJSX1NJR05BTF9FTiAg ICAgICAgICBCSVQoNykNCj4gKyNkZWZpbmUgU0RNTUNfREFUQV9FTkRfQklUX0VSUl9TSUdOQUxf RU4gICAgIEJJVCg2KQ0KPiArI2RlZmluZSBTRE1NQ19EQVRBX0NSQ19FUlJfU0lHTkFMX0VOICAg ICAgICAgQklUKDUpDQo+ICsjZGVmaW5lIFNETU1DX0RBVEFfVE9VVF9FUlJfU0lHTkFMX0VOICAg ICAgICAgICAgICAgIEJJVCg0KQ0KPiArI2RlZmluZSBTRE1NQ19DTURfSURYX0VSUl9TSUdOQUxf RU4gICAgICAgICAgQklUKDMpDQo+ICsjZGVmaW5lIFNETU1DX0NNRF9FTkRfQklUX0VSUl9TSUdO QUxfRU4gICAgICAgICAgICAgIEJJVCgyKQ0KPiArI2RlZmluZSBTRE1NQ19DTURfQ1JDX0VSUl9T SUdOQUxfRU4gICAgICAgICAgQklUKDEpDQo+ICsjZGVmaW5lIFNETU1DX0NNRF9UT1VUX0VSUl9T VEFUX0VOICAgICAgICAgICBCSVQoMCkNCj4gKw0KPiArI2RlZmluZSBTRE1NQ19BTExfTk9STUFM X1NUQVRfRU4gICAgICAgICAgICAgKDB4ZmVmZikNCj4gKyNkZWZpbmUgU0RNTUNfQUxMX0VSUl9T VEFUX0VOICAgICAgICAgICAgICAgICAgICAgICAgKDB4ZmZmZikNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKmVuYWJsbGUgYWxsIGVycm9yIGluaXRlcnJ1cHQgaW4g MHgzNiovDQo+ICsjZGVmaW5lIFNETU1DX0FMTF9TSUdOQUxfU1RBVF9FTiAgICAgICAgICAgICAg ICAoMHhmZWZmKQ0KPiArI2RlZmluZSBTRE1NQ19BTExfRVJSX1NJR05BTF9FTiAgICAgICAgICAg ICAgICAgICAgICAoMHhmZmZmKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qZW5hYmxlIGFsbCBzaWduYWwgZXJyb3IgaW50ZXJydXB0IGluIDB4M2EqLw0KPiArDQo+ ICsvKjB4M2UqLw0KPiArI2RlZmluZSBTRE1NQ19MRUdBQ1kgICAgICAgICAgICAgICAgICAgICAg ICAgMHgwDQo+ICsjZGVmaW5lIFNETU1DX1NEUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAw eDENCj4gKyNkZWZpbmUgU0RNTUNfSFMyMDAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mw0K PiArI2RlZmluZSBTRE1NQ19ERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0DQo+ICsj ZGVmaW5lIFNETU1DX0hTNDAwICAgICAgICAgICAgICAgICAgICAgICAgICAweDcNCj4gKyNkZWZp bmUgU0RNTUNfSE9TVF9WRVI0X0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgQklUKDEyKQ0K PiArI2RlZmluZSBTRE1NQ19TSUdOQUxJTkdfRU4gICAgICAgICAgICAgICAgICAgQklUKDMpDQo+ ICsNCj4gKy8qMHgyMmMqLw0KPiArI2RlZmluZSBTRE1NQ19SU1RfTl9PRSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBCSVQoMykNCj4gKyNkZWZpbmUgU0RNTUNfUlNUX04gICAgICAgICAg ICAgICAgICAgICAgICAgIEJJVCgyKQ0KPiArI2RlZmluZSBTRE1NQ19DQVJEX0lTX0VNTUMgICAg ICAgICAgICAgICAgICAgQklUKDApDQo+ICsNCj4gKyNkZWZpbmUgU0RNTUNfSU5URVJOQUxfQ0xL X0VOICAgICAgICAgICAgICAgICAgICAgICAgQklUKDApDQo+ICsjZGVmaW5lIFNETU1DX1BMTF9V U0FCTEUgICAgICAgICAgICAgICAgICAgICBCSVQoMCkNCj4gKw0KPiArI2RlZmluZSBWQUxJRCh4 KSAgICAgICAgICAgICAgICAgICAgICgoeCAmIDEpIDw8IDApDQo+ICsjZGVmaW5lIEVORCh4KSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHggJiAxKSA8PCAxKQ0KPiArI2RlZmluZSBJ TlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4ICYgMSkgPDwgMikNCj4gKyNk ZWZpbmUgQUNUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCAmIDB4NykgPDwg MykNCj4gKyNkZWZpbmUgREFUX0xFTkdUSCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoeCAm IDB4RkZGRikgPDwgMTYpDQo+ICsNCj4gKw0KPiArLyogUmVnaXN0ZXIgYWNjZXNzIG1hY3JvcyAq Lw0KPiArI2RlZmluZSBtY2lfcmVhZGwoZGV2LCByZWcpICAgICAgICAgICAgICAgICAgICAgXA0K PiArICAgICByZWFkbF9yZWxheGVkKChkZXYpLT5yZWdzICsgU0RNTUNfIyNyZWcpDQo+ICsjZGVm aW5lIG1jaV93cml0ZWwoZGV2LCByZWcsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgIFwNCj4g KyAgICAgd3JpdGVsX3JlbGF4ZWQoKHZhbHVlKSwgKGRldiktPnJlZ3MgKyBTRE1NQ18jI3JlZykN Cj4gKw0KPiArI2RlZmluZSBtY2lfcmVhZHcoZGV2LCByZWcpICAgICAgICAgICAgICAgICAgICAg XA0KPiArICAgICByZWFkd19yZWxheGVkKChkZXYpLT5yZWdzICsgU0RNTUNfIyNyZWcpDQo+ICsj ZGVmaW5lIG1jaV93cml0ZXcoZGV2LCByZWcsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgIFwN Cj4gKyAgICAgd3JpdGV3X3JlbGF4ZWQoKHZhbHVlKSwgKGRldiktPnJlZ3MgKyBTRE1NQ18jI3Jl ZykNCj4gKw0KPiArI2RlZmluZSBtY2lfcmVhZGIoZGV2LCByZWcpICAgICAgICAgICAgICAgICAg ICAgXA0KPiArICAgICByZWFkYl9yZWxheGVkKChkZXYpLT5yZWdzICsgU0RNTUNfIyNyZWcpDQo+ ICsjZGVmaW5lIG1jaV93cml0ZWIoZGV2LCByZWcsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAg IFwNCj4gKyAgICAgd3JpdGViX3JlbGF4ZWQoKHZhbHVlKSwgKGRldiktPnJlZ3MgKyBTRE1NQ18j I3JlZykNCj4gKw0KPiArI2RlZmluZSBkd19tY2lfZ2V0X2ludChkZXYpICAgIFwNCj4gKyAgICAg ZG8geyAgICBcDQo+ICsgICAgICAgICAgICAgZGV2LT5ub3JtYWxfaW50ZXJydXB0ID0gbWNpX3Jl YWR3KGRldiwgTk9STUFMX0lOVF9TVEFUX1IpOyAgIFwNCj4gKyAgICAgICAgICAgICBkZXYtPmVy cm9yX2ludGVycnVwdCA9IG1jaV9yZWFkdyhkZXYsIEVSUk9SX0lOVF9TVEFUX1IpOyAgIFwNCj4g KyAgICAgICAgICAgICBkZXYtPmF1dG9fZXJyb3JfaW50ZXJydXB0ID0gbWNpX3JlYWR3KGRldiwg QVVUT19DTURfU1RBVF9SKTsgICAgIFwNCj4gKyAgICAgfSB3aGlsZSAoMCkNCj4gKw0KPiArLypj bGVhciBzdGF0dXMgcmVnaXN0ZXIsIHdlIGFsd2F5cyBrZWVwIHRoZSBjYXJkIGludGVycnVwdCov DQo+ICsjZGVmaW5lIGR3X21jaV9jbHJfaW50KGRldikgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcDQo+ICsgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+ICsgICAgICAgICAgICAg bWNpX3dyaXRldyhkZXYsIEVSUk9SX0lOVF9TVEFUX1IsIG1jaV9yZWFkdyhkZXYsIEVSUk9SX0lO VF9TVEFUX1IpICYgMHhmZmZmKTsgXA0KPiArICAgICAgICAgICAgIG1jaV93cml0ZXcoZGV2LCBO T1JNQUxfSU5UX1NUQVRfUiwgbWNpX3JlYWR3KGRldiwgTk9STUFMX0lOVF9TVEFUX1IpICYgMHhm ZmZmKTsgXA0KPiArICAgICB9IHdoaWxlICgwKQ0KPiArDQo+ICsvKm1hc2sgYWxsIGVtbWMgaW50 ZXJydXB0cyovDQo+ICsjZGVmaW5lIGR3X21jaV9jbHJfc2lnbmFsX2ludChkZXYpICAgIFwNCj4g KyAgICAgZG8geyAgICAgIFwNCj4gKyAgICAgICAgICAgICBtY2lfd3JpdGV3KGRldiwgTk9STUFM X0lOVF9TSUdOQUxfRU5fUiwgXA0KPiArICAgICAgICAgICAgICAgICAgICAgbWNpX3JlYWR3KGRl diwgTk9STUFMX0lOVF9TSUdOQUxfRU5fUikgJiAoQklUKDYpfEJJVCg3KSkpOyBcDQo+ICsgICAg ICAgICAgICAgbWNpX3dyaXRldyhkZXYsIEVSUk9SX0lOVF9TSUdOQUxfRU5fUiwgMCk7IFwNCj4g KyAgICAgfSB3aGlsZSAoMCkNCj4gKw0KPiArLypmb3IgY21kcSwgd2UgZG8gbm90IG5lZWQgY21k IGFuZCB4ZmVyIGRvbmUsIG9ubHkgY3FlIGV2ZW50Ki8NCj4gKyNkZWZpbmUgZHdfbWNpX2VuX2Nx ZV9pbnQoZGV2KSAgXA0KPiArICAgICBkbyB7IFwNCj4gKyAgICAgICAgICAgICBtY2lfd3JpdGV3 KGRldiwgTk9STUFMX0lOVF9TSUdOQUxfRU5fUiwgXA0KPiArICAgICAgICAgICAgICAgICAgICAg bWNpX3JlYWR3KGRldiwgTk9STUFMX0lOVF9TSUdOQUxfRU5fUil8U0RNTUNfTk9STUFMX0lOVF9T SUdOQUxfQ1FFX0VOX1IpOyBcDQo+ICsgICAgICAgICAgICAgbWNpX3dyaXRldyhkZXYsIEVSUk9S X0lOVF9TSUdOQUxfRU5fUiwgU0RNTUNfQUxMX0VSUl9TSUdOQUxfRU4pOyBcDQo+ICsgICAgIH0g d2hpbGUgKDApDQo+ICsNCj4gKy8qdXNlZCBmb3IgZGF0YSwgcjFiIGNhc2UsIHdlIG1hc2sgY21k IGRvbmUgaW50ZXJydXB0Ki8NCj4gKyNkZWZpbmUgZHdfbWNpX2VuX3hmZXJfaW50KGRldikgIFwN Cj4gKyAgICAgZG8geyAgXA0KPiArICAgICAgICAgICAgIG1jaV93cml0ZXcoZGV2LCBOT1JNQUxf SU5UX1NJR05BTF9FTl9SLCBcDQo+ICsgICAgICAgICAgICAgICAgICAgICBtY2lfcmVhZHcoZGV2 LCBOT1JNQUxfSU5UX1NJR05BTF9FTl9SKXxTRE1NQ19OT1JNQUxfSU5UX1NJR05BTF9EQVRfRU5f Uik7IFwNCj4gKyAgICAgICAgICAgICBtY2lfd3JpdGV3KGRldiwgRVJST1JfSU5UX1NJR05BTF9F Tl9SLCBTRE1NQ19BTExfRVJSX1NJR05BTF9FTik7IFwNCj4gKyAgICAgfSB3aGlsZSAoMCkNCj4g Kw0KPiArLyp1c2VkIGZvciBub25lLXN0cmVhbSBjYXNlIChjbWQgdy93by8gcmVzcCkqLw0KPiAr I2RlZmluZSBkd19tY2lfZW5fY2RfaW50KGRldikgIFwNCj4gKyAgICAgZG8geyAgICBcDQo+ICsg ICAgICAgICAgICAgbWNpX3dyaXRldyhkZXYsIE5PUk1BTF9JTlRfU0lHTkFMX0VOX1IsIFwNCj4g KyAgICAgICAgICAgICAgICAgICAgIG1jaV9yZWFkdyhkZXYsIE5PUk1BTF9JTlRfU0lHTkFMX0VO X1IpfFNETU1DX05PUk1BTF9JTlRfU0lHTkFMX0NNRF9FTl9SKTsgXA0KPiArICAgICAgICAgICAg IG1jaV93cml0ZXcoZGV2LCBFUlJPUl9JTlRfU0lHTkFMX0VOX1IsIFNETU1DX0FMTF9FUlJfU0lH TkFMX0VOKTsgXA0KPiArICAgICB9IHdoaWxlICgwKQ0KPiArDQo+ICtleHRlcm4gaW50IGR3X21j aV9jcWVfcHJvYmUoc3RydWN0IGR3X21jaSAqaG9zdCk7DQo+ICtleHRlcm4gdm9pZCBkd19tY2lf Y3FlX3JlbW92ZShzdHJ1Y3QgZHdfbWNpICpob3N0KTsNCj4gKyNpZmRlZiBDT05GSUdfUE0NCj4g K2V4dGVybiBpbnQgZHdfbWNpX2NxZV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2 aWNlKTsNCj4gK2V4dGVybiBpbnQgZHdfbWNpX2NxZV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2 aWNlICpkZXZpY2UpOw0KPiArI2VuZGlmDQo+ICtpcnFyZXR1cm5fdCBjcWhjaV9pcnEoc3RydWN0 IG1tY19ob3N0ICptbWMsIHUzMiBpbnRtYXNrLCBpbnQgY21kX2Vycm9yLCBpbnQgZGF0YV9lcnJv cik7DQo+ICsNCj4gKy8qIEJvYXJkIHBsYXRmb3JtIGRhdGEgKi8NCj4gK3N0cnVjdCBkd19tY2lf Ym9hcmQgew0KPiArICAgICB1bnNpZ25lZCBpbnQgYnVzX2h6OyAvKiBDbG9jayBzcGVlZCBhdCB0 aGUgY2Nsa19pbiBwYWQgKi8NCj4gKyAgICAgdTMyIGNhcHM7ICAgICAgIC8qIENhcGFiaWxpdGll cyAqLw0KPiArICAgICB1MzIgY2FwczI7ICAgICAgLyogTW9yZSBjYXBhYmlsaXRpZXMgKi8NCj4g KyAgICAgdTMyIHBtX2NhcHM7ICAgIC8qIFBNIGNhcGFiaWxpdGllcyAqLw0KPiArDQo+ICsgICAg IC8qIGRlbGF5IGluIG1TIGJlZm9yZSBkZXRlY3RpbmcgY2FyZHMgYWZ0ZXIgaW50ZXJydXB0ICov DQo+ICsgICAgIHUzMiBkZXRlY3RfZGVsYXlfbXM7DQo+ICsNCj4gKyAgICAgc3RydWN0IHJlc2V0 X2NvbnRyb2wgKnJzdGM7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgZHdfbWNpX3Nsb3Qgew0KPiAr ICAgICBzdHJ1Y3QgbW1jX2hvc3QgICAgICAgICAqbW1jOw0KPiArICAgICBzdHJ1Y3QgZHdfbWNp ICAgICAgICAgICAqaG9zdDsNCj4gKw0KPiArICAgICBzdHJ1Y3QgbW1jX3JlcXVlc3QgICAgICAq bXJxOw0KPiArDQo+ICsgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIGNsb2NrOw0KPiArICAg ICB1bnNpZ25lZCBpbnQgICAgICAgICAgICBfX2Nsa19vbGQ7DQo+ICsNCj4gKyAgICAgdW5zaWdu ZWQgbG9uZyAgICAgICAgICAgZmxhZ3M7DQo+ICsjZGVmaW5lIERXX01NQ19DQVJEX1BSRVNFTlQg ICAgIDENCj4gKyAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgaWQ7DQo+ICsgICAgIGludCAg ICAgICAgICAgICAgICAgICAgIHNkaW9faWQ7DQo+ICsgICAgIHU4ICAgICAgICAgICAgICAgICAg ICAgIHN3aXRjaF9wYXJ0aXRpb247DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgZHdfbWNpX2Rydl9k YXRhIHsNCj4gKyAgICAgdW5zaWduZWQgbG9uZyAgICpjYXBzOw0KPiArICAgICB1MzIgICAgICAg ICAgICAgbnVtX2NhcHM7DQo+ICsgICAgIGludCAgICAgICAgICAgICAoKmluaXQpKHN0cnVjdCBk d19tY2kgKmhvc3QpOw0KPiArICAgICB2b2lkICAgICAgICAgICAgKCpzZXRfaW9zKShzdHJ1Y3Qg ZHdfbWNpX3Nsb3QgKnNsb3QsIHN0cnVjdCBtbWNfaW9zICppb3MpOw0KPiArICAgICBpbnQgICAg ICAgICAgICAgKCpwYXJzZV9kdCkoc3RydWN0IGR3X21jaSAqaG9zdCk7DQo+ICsgICAgIGludCAg ICAgICAgICAgICAoKmV4ZWN1dGVfdHVuaW5nKShzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3QsIHUz MiBvcGNvZGUpOw0KPiArICAgICBpbnQgICAgICAgICAgICAgKCpwcmVwYXJlX2hzNDAwX3R1bmlu Zykoc3RydWN0IGR3X21jaSAqaG9zdCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgbW1jX2lvcyAqaW9zKTsNCj4gKyAgICAgaW50ICAgICAgICAgICAgICgq c3dpdGNoX3ZvbHRhZ2UpKHN0cnVjdCBtbWNfaG9zdCAqbW1jLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtbWNfaW9zICppb3MpOw0KPiArICAgICB2b2lk ICAgICAgICAgICAgKCpoczQwMF9jb21wbGV0ZSkoc3RydWN0IG1tY19ob3N0ICptbWMpOw0KPiAr ICAgICB2b2lkICAgICAgICAgICAgKCppbml0X2NhcmQpKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbW1jX2NhcmQg KmNhcmQpOw0KPiArICAgICB2b2lkICAgICAgICAgICAgKCpzaGlmdF9yc3ApKHN0cnVjdCBkd19t Y2kgKmhvc3QsIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kLCB1MzIgKnJzcCk7DQo+ICt9Ow0KPiAr DQo+ICt2b2lkIGR3X21jaV9jcWVfd2FpdF9kb25lKHN0cnVjdCBkd19tY2kgKmhvc3QsIHUzMiAq YWRkciwgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7DQo+ICsjZW5kaWYNCg0KDQotLS0tLS1QbGVhc2Ug Y29uc2lkZXIgdGhlIGVudmlyb25tZW50IGJlZm9yZSBwcmludGluZyB0aGlzIGUtbWFpbC4NCg==