From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, USER_AGENT_SANE_2 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8D95BC54E4B for ; Mon, 11 May 2020 11:53:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 53B6320735 for ; Mon, 11 May 2020 11:53:49 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="W3mXqI4S" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729758AbgEKLxs (ORCPT ); Mon, 11 May 2020 07:53:48 -0400 Received: from mailgw02.mediatek.com ([1.203.163.81]:35312 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1728531AbgEKLxr (ORCPT ); Mon, 11 May 2020 07:53:47 -0400 X-UUID: 380cd2085c1d4ac39362ffdd73efb7b0-20200511 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=FbA/V4dyBSAbGGvXiE3UERQQK8zRNmGYUq25BBf8ymA=; b=W3mXqI4SHwQ+BU5RP+yRdH4d3+gP5Q4lrCAw+ahIOa8/qj4tdRSygc3TesWBMwZYtEZerytZisUWR/eFa1qGp/N+MFBiChO8zOoYneKthROSYsSbz8TMyG2EJK+okB3Zd//IL8KOL0FjcgodmJf3ktYoCTY94F+U2Ll87PrgUUA=; X-UUID: 380cd2085c1d4ac39362ffdd73efb7b0-20200511 Received: from mtkcas32.mediatek.inc [(172.27.4.253)] by mailgw02.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLS) with ESMTP id 661379726; Mon, 11 May 2020 19:53:31 +0800 Received: from MTKCAS36.mediatek.inc (172.27.4.186) by MTKMBS31DR.mediatek.inc (172.27.6.102) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 11 May 2020 19:53:30 +0800 Received: from [10.17.3.153] (10.17.3.153) by MTKCAS36.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 11 May 2020 19:53:29 +0800 Message-ID: <1589197937.8804.268.camel@mhfsdcap03> Subject: Re: [V8, 2/2] media: i2c: ov02a10: Add OV02A10 image sensor driver From: Dongchun Zhu To: Sakari Ailus CC: , , , , , , , , , , , , , , , , , Date: Mon, 11 May 2020 19:52:17 +0800 In-Reply-To: <20200511085128.GD11272@paasikivi.fi.intel.com> References: <20200509080627.23222-1-dongchun.zhu@mediatek.com> <20200509080627.23222-3-dongchun.zhu@mediatek.com> <20200511085128.GD11272@paasikivi.fi.intel.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: D93C9B5ADBBEBE558C5D974FAC43A03C90009CE4F4DB384BA1514F8A7759BBA92000:8 X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org SGkgU2FrYXJpLA0KDQpUaGFua3MgZm9yIHlvdXIgdGltZWx5IHJldmlldy4NCg0KT24gTW9uLCAy MDIwLTA1LTExIGF0IDExOjUxICswMzAwLCBTYWthcmkgQWlsdXMgd3JvdGU6DQo+IEhpIERvbmdj aHVuLA0KPiANCj4gQSBmZXcgc21hbGwgbWF0dGVycy4gRmVlbCBmcmVlIHRvIGFkZHJlc3MgdGhl c2UgaW4gYSBmb2xsb3ctdXAgcGF0Y2guDQo+IA0KPiBPbiBTYXQsIE1heSAwOSwgMjAyMCBhdCAw NDowNjoyN1BNICswODAwLCBEb25nY2h1biBaaHUgd3JvdGU6DQo+ID4gQWRkIGEgVjRMMiBzdWIt ZGV2aWNlIGRyaXZlciBmb3IgT1YwMkExMCBpbWFnZSBzZW5zb3IuDQo+ID4gDQo+ID4gU2lnbmVk LW9mZi1ieTogRG9uZ2NodW4gWmh1IDxkb25nY2h1bi56aHVAbWVkaWF0ZWsuY29tPg0KPiA+IC0t LQ0KPiA+ICBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgfCAgICAxICsNCj4gPiAgZHJpdmVy cy9tZWRpYS9pMmMvS2NvbmZpZyAgIHwgICAxMyArDQo+ID4gIGRyaXZlcnMvbWVkaWEvaTJjL01h a2VmaWxlICB8ICAgIDEgKw0KPiA+ICBkcml2ZXJzL21lZGlhL2kyYy9vdjAyYTEwLmMgfCAxMDk0 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiAgNCBmaWxl cyBjaGFuZ2VkLCAxMTA5IGluc2VydGlvbnMoKykNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbWVkaWEvaTJjL292MDJhMTAuYw0KPiA+IA0KPiA+IGRpZmYgLS1naXQgYS9NQUlOVEFJ TkVSUyBiL01BSU5UQUlORVJTDQo+ID4gaW5kZXggNjNhMjMzNS4uZTc2NzdjNSAxMDA2NDQNCj4g PiAtLS0gYS9NQUlOVEFJTkVSUw0KPiA+ICsrKyBiL01BSU5UQUlORVJTDQo+ID4gQEAgLTEyMzk1 LDYgKzEyMzk1LDcgQEAgTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnDQo+ID4gIFM6CU1h aW50YWluZWQNCj4gPiAgVDoJZ2l0IGdpdDovL2xpbnV4dHYub3JnL21lZGlhX3RyZWUuZ2l0DQo+ ID4gIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZWRpYS9pMmMvb3Z0aSxv djAyYTEwLnlhbWwNCj4gPiArRjoJZHJpdmVycy9tZWRpYS9pMmMvb3YwMmExMC5jDQo+ID4gIA0K PiA+ICBPTU5JVklTSU9OIE9WMTM4NTggU0VOU09SIERSSVZFUg0KPiA+ICBNOglTYWthcmkgQWls dXMgPHNha2FyaS5haWx1c0BsaW51eC5pbnRlbC5jb20+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvbWVkaWEvaTJjL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2kyYy9LY29uZmlnDQo+ID4gaW5k ZXggMTI1ZDU5Ni4uZDg1NzJjZCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL21lZGlhL2kyYy9L Y29uZmlnDQo+ID4gKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZw0KPiA+IEBAIC02NTUs NiArNjU1LDE5IEBAIGNvbmZpZyBWSURFT19JTVgzNTUNCj4gPiAgCSAgVG8gY29tcGlsZSB0aGlz IGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlDQo+ID4gIAkgIG1vZHVsZSB3 aWxsIGJlIGNhbGxlZCBpbXgzNTUuDQo+ID4gIA0KPiA+ICtjb25maWcgVklERU9fT1YwMkExMA0K PiA+ICsJdHJpc3RhdGUgIk9tbmlWaXNpb24gT1YwMkExMCBzZW5zb3Igc3VwcG9ydCINCj4gPiAr CWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDINCj4gPiArCXNlbGVjdCBNRURJQV9DT05UUk9M TEVSDQo+ID4gKwlzZWxlY3QgVklERU9fVjRMMl9TVUJERVZfQVBJDQo+ID4gKwlzZWxlY3QgVjRM Ml9GV05PREUNCj4gPiArCWhlbHANCj4gPiArCSAgVGhpcyBpcyBhIFZpZGVvNExpbnV4MiBzZW5z b3IgZHJpdmVyIGZvciB0aGUgT21uaVZpc2lvbg0KPiA+ICsJICBPVjAyQTEwIGNhbWVyYS4NCj4g PiArDQo+ID4gKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBN IGhlcmU6IHRoZQ0KPiA+ICsJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgb3YwMmExMC4NCj4gPiAr DQo+ID4gIGNvbmZpZyBWSURFT19PVjI2NDANCj4gPiAgCXRyaXN0YXRlICJPbW5pVmlzaW9uIE9W MjY0MCBzZW5zb3Igc3VwcG9ydCINCj4gPiAgCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMN Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUgYi9kcml2ZXJzL21l ZGlhL2kyYy9NYWtlZmlsZQ0KPiA+IGluZGV4IDc3YmY3ZDAuLjY1NjZkZDkgMTAwNjQ0DQo+ID4g LS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL21lZGlh L2kyYy9NYWtlZmlsZQ0KPiA+IEBAIC02Myw2ICs2Myw3IEBAIG9iai0kKENPTkZJR19WSURFT19W UDI3U01QWCkgKz0gdnAyN3NtcHgubw0KPiA+ICBvYmotJChDT05GSUdfVklERU9fU09OWV9CVEZf TVBYKSArPSBzb255LWJ0Zi1tcHgubw0KPiA+ICBvYmotJChDT05GSUdfVklERU9fVVBENjQwMzFB KSArPSB1cGQ2NDAzMWEubw0KPiA+ICBvYmotJChDT05GSUdfVklERU9fVVBENjQwODMpICs9IHVw ZDY0MDgzLm8NCj4gPiArb2JqLSQoQ09ORklHX1ZJREVPX09WMDJBMTApICs9IG92MDJhMTAubw0K PiA+ICBvYmotJChDT05GSUdfVklERU9fT1YyNjQwKSArPSBvdjI2NDAubw0KPiA+ICBvYmotJChD T05GSUdfVklERU9fT1YyNjgwKSArPSBvdjI2ODAubw0KPiA+ICBvYmotJChDT05GSUdfVklERU9f T1YyNjg1KSArPSBvdjI2ODUubw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy9v djAyYTEwLmMgYi9kcml2ZXJzL21lZGlhL2kyYy9vdjAyYTEwLmMNCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAuLjc3ODYxOWUNCj4gPiAtLS0gL2Rldi9udWxsDQo+ ID4gKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvb3YwMmExMC5jDQo+ID4gQEAgLTAsMCArMSwxMDk0 IEBADQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ID4gKy8vIENv cHlyaWdodCAoYykgMjAyMCBNZWRpYVRlayBJbmMuDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvY2xrLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiA+ICsjaW5jbHVkZSA8 bGludXgvZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS9tZWRpYS1lbnRp dHkuaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItYXN5bmMuaD4NCj4gPiArI2luY2x1ZGUg PG1lZGlhL3Y0bDItY3RybHMuaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItc3ViZGV2Lmg+ DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWZ3bm9kZS5oPg0KPiA+ICsNCj4gPiArI2RlZmlu ZSBDSElQX0lECQkJCQkJMHgyNTA5DQo+ID4gKyNkZWZpbmUgT1YwMkExMF9SRUdfQ0hJUF9JRF9I CQkJCTB4MDINCj4gPiArI2RlZmluZSBPVjAyQTEwX1JFR19DSElQX0lEX0wJCQkJMHgwMw0KPiA+ ICsjZGVmaW5lIE9WMDJBMTBfSUQoX21zYiwgX2xzYikJCQkJKChfbXNiKSA8PCA4IHwgKF9sc2Ip KQ0KPiA+ICsNCj4gPiArLyogQml0WzFdIHZlcnRpY2FsIHVwc2lkZSBkb3duICovDQo+ID4gKy8q IEJpdFswXSBob3Jpem9udGFsIG1pcnJvciAqLw0KPiA+ICsjZGVmaW5lIFJFR19NSVJST1JfRkxJ UF9DT05UUk9MCQkJCTB4M2YNCj4gPiArDQo+ID4gKy8qIE9yaWVudGF0aW9uICovDQo+ID4gKyNk ZWZpbmUgUkVHX01JUlJPUl9GTElQX0VOQUJMRQkJCQkweDAzDQo+ID4gKw0KPiA+ICsvKiBCaXRb N10gY2xvY2sgSFMgbW9kZSBlbmFibGUNCj4gPiArICogMDogQ2xvY2sgY29udGludWUNCj4gPiAr ICogMTogQ2xvY2sgSFMNCj4gPiArICogQml0WzY6Ml0gSFMgVk9EIGFkanVzdA0KPiA+ICsgKiBC aXRbMTowXSBQIFZISSBhZGp1c3QNCj4gPiArICovDQo+ID4gKyNkZWZpbmUgUkVHX0hTX01PREVf QkxDCQkJCQkweDlkDQo+ID4gKw0KPiA+ICsjZGVmaW5lIENMT0NLX0hTX01PREVfRU5BQkxFCQkJ CUJJVCg3KQ0KPiA+ICsNCj4gPiArLyogQml0WzI6MF0gTUlQSSB0cmFuc21pc3Npb24gc3BlZWQg c2VsZWN0ICovDQo+ID4gKyNkZWZpbmUgVFhfU1BFRURfQVJFQV9TRUwJCQkJMHhhMQ0KPiA+ICsN Cj4gPiArI2RlZmluZSBSRUdfUEFHRV9TV0lUQ0gJCQkJCTB4ZmQNCj4gPiArI2RlZmluZSBSRUdf R0xPQkFMX0VGRkVDVElWRQkJCQkweDAxDQo+ID4gKyNkZWZpbmUgUkVHX0VOQUJMRQkJCQkJQklU KDApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFJFR19TQ19DVFJMX01PREUJCQkJMHhhYw0KPiA+ICsj ZGVmaW5lIFNDX0NUUkxfTU9ERV9TVEFOREJZCQkJCTB4MDANCj4gPiArI2RlZmluZSBTQ19DVFJM X01PREVfU1RSRUFNSU5HCQkJCTB4MDENCj4gPiArDQo+ID4gKyNkZWZpbmUgT1YwMkExMF9FWFBf U0hJRlQJCQkJOA0KPiA+ICsjZGVmaW5lIE9WMDJBMTBfUkVHX0VYUE9TVVJFX0gJCQkJMHgwMw0K PiA+ICsjZGVmaW5lIE9WMDJBMTBfUkVHX0VYUE9TVVJFX0wJCQkJMHgwNA0KPiA+ICsjZGVmaW5l CU9WMDJBMTBfRVhQT1NVUkVfTUlOCQkJCTQNCj4gPiArI2RlZmluZSBPVjAyQTEwX0VYUE9TVVJF X01BWF9NQVJHSU4JCQk0DQo+ID4gKyNkZWZpbmUJT1YwMkExMF9FWFBPU1VSRV9TVEVQCQkJCTEN Cj4gPiArDQo+ID4gKyNkZWZpbmUgT1YwMkExMF9WVFNfU0hJRlQJCQkJOA0KPiA+ICsjZGVmaW5l IE9WMDJBMTBfUkVHX1ZUU19ICQkJCTB4MDUNCj4gPiArI2RlZmluZSBPVjAyQTEwX1JFR19WVFNf TAkJCQkweDA2DQo+ID4gKyNkZWZpbmUgT1YwMkExMF9WVFNfTUFYCQkJCQkweDIwOWYNCj4gPiAr I2RlZmluZSBPVjAyQTEwX1ZUU19NSU4JCQkJCTB4MDRjZg0KPiA+ICsjZGVmaW5lIE9WMDJBMTBf QkFTSUNfTElORQkJCQkxMjI0DQo+ID4gKw0KPiA+ICsjZGVmaW5lIE9WMDJBMTBfUkVHX0dBSU4J CQkJMHgyNA0KPiA+ICsjZGVmaW5lIE9WMDJBMTBfR0FJTl9NSU4JCQkJMHgxMA0KPiA+ICsjZGVm aW5lIE9WMDJBMTBfR0FJTl9NQVgJCQkJMHhmOA0KPiA+ICsjZGVmaW5lIE9WMDJBMTBfR0FJTl9T VEVQCQkJCTB4MDENCj4gPiArI2RlZmluZSBPVjAyQTEwX0dBSU5fREVGQVVMVAkJCQkweDQwDQo+ ID4gKw0KPiA+ICsvKiBUZXN0IHBhdHRlcm4gY29udHJvbCAqLw0KPiA+ICsjZGVmaW5lIE9WMDJB MTBfUkVHX1RFU1RfUEFUVEVSTgkJCTB4YjYNCj4gPiArI2RlZmluZSBPVjAyQTEwX1RFU1RfUEFU VEVSTl9FTkFCTEUJCQlCSVQoMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgSFpfUEVSX01IWgkJCQkJ MTAwMDAwMEwNCj4gPiArI2RlZmluZSBPVjAyQTEwX0xJTktfRlJFUV8zOTBNSFoJCQkoMzkwICog SFpfUEVSX01IWikNCj4gPiArI2RlZmluZSBPVjAyQTEwX0VDTEtfRlJFUQkJCQkoMjQgKiBIWl9Q RVJfTUhaKQ0KPiA+ICsjZGVmaW5lIE9WMDJBMTBfREFUQV9MQU5FUwkJCQkxDQo+ID4gKyNkZWZp bmUgT1YwMkExMF9CSVRTX1BFUl9TQU1QTEUJCQkJMTANCj4gPiArDQo+ID4gK3N0YXRpYyBjb25z dCBjaGFyICogY29uc3Qgb3YwMmExMF9zdXBwbHlfbmFtZXNbXSA9IHsNCj4gPiArCSJkb3ZkZCIs CS8qIERpZ2l0YWwgSS9PIHBvd2VyICovDQo+ID4gKwkiYXZkZCIsCQkvKiBBbmFsb2cgcG93ZXIg Ki8NCj4gPiArCSJkdmRkIiwJCS8qIERpZ2l0YWwgY29yZSBwb3dlciAqLw0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiArI2RlZmluZSBPVjAyQTEwX05VTV9TVVBQTElFUyBBUlJBWV9TSVpFKG92MDJhMTBf c3VwcGx5X25hbWVzKQ0KPiANCj4gUGxlYXNlIHVzZSBBUlJBWV9TSVpFKCkgZGlyZWN0bHkuDQo+ IA0KDQpDb3B5IHRoYXQuDQpGaXhlZCBpbiBuZXh0IHJlbGVhc2UuDQoNCj4gPiArDQo+ID4gK3N0 cnVjdCBvdjAyYTEwX3JlZyB7DQo+ID4gKwl1OCBhZGRyOw0KPiA+ICsJdTggdmFsOw0KPiA+ICt9 Ow0KPiA+ICsNCj4gPiArc3RydWN0IG92MDJhMTBfcmVnX2xpc3Qgew0KPiA+ICsJdTMyIG51bV9v Zl9yZWdzOw0KPiA+ICsJY29uc3Qgc3RydWN0IG92MDJhMTBfcmVnICpyZWdzOw0KPiA+ICt9Ow0K PiA+ICsNCj4gPiArc3RydWN0IG92MDJhMTBfbW9kZSB7DQo+ID4gKwl1MzIgd2lkdGg7DQo+ID4g Kwl1MzIgaGVpZ2h0Ow0KPiA+ICsJdTMyIGV4cF9kZWY7DQo+ID4gKwl1MzIgaHRzX2RlZjsNCj4g PiArCXUzMiB2dHNfZGVmOw0KPiA+ICsJY29uc3Qgc3RydWN0IG92MDJhMTBfcmVnX2xpc3QgcmVn X2xpc3Q7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3Qgb3YwMmExMCB7DQo+ID4gKwl1MzIJ CQllY2xrX2ZyZXE7DQo+ID4gKwl1MzIgICAgICAgICAgICAgICAgICAgICBtaXBpX2Nsb2NrX3R4 X3NwZWVkOw0KPiA+ICsNCj4gPiArCXN0cnVjdCBjbGsJCSplY2xrOw0KPiA+ICsJc3RydWN0IGdw aW9fZGVzYwkqcGRfZ3BpbzsNCj4gPiArCXN0cnVjdCBncGlvX2Rlc2MJKm5fcnN0X2dwaW87DQo+ ID4gKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tPVjAyQTEwX05VTV9TVVBQ TElFU107DQo+ID4gKw0KPiA+ICsJYm9vbAkJCXN0cmVhbWluZzsNCj4gPiArCWJvb2wJCQl1cHNp ZGVfZG93bjsNCj4gPiArCWJvb2wJCQltaXBpX2Nsb2NrX3R4X3NwZWVkX3NlbGVjdF9lbmFibGU7 DQo+ID4gKwlib29sCQkJbWlwaV9jbG9ja19oc19tb2RlX2VuYWJsZTsNCj4gPiArDQo+ID4gKwkv Kg0KPiA+ICsJICogU2VyaWFsaXplIGNvbnRyb2wgYWNjZXNzLCBnZXQvc2V0IGZvcm1hdCwgZ2V0 IHNlbGVjdGlvbg0KPiA+ICsJICogYW5kIHN0YXJ0IHN0cmVhbWluZy4NCj4gPiArCSAqLw0KPiA+ ICsJc3RydWN0IG11dGV4CQltdXRleDsNCj4gPiArCXN0cnVjdCB2NGwyX3N1YmRldglzdWJkZXY7 DQo+ID4gKwlzdHJ1Y3QgbWVkaWFfcGFkCXBhZDsNCj4gPiArCXN0cnVjdCB2NGwyX2N0cmwJKmFu YWxfZ2FpbjsNCj4gDQo+IGFnYWluPyBhbmFsb2d1ZV9nYWluPw0KPiANCg0KWWVhaCwgc2Vuc29y IGFuYWxvZ3VlIGdhaW4sIGFzIE9WMjY4NSBkb2VzLg0KDQo+ID4gKwlzdHJ1Y3QgdjRsMl9jdHJs CSpleHBvc3VyZTsNCj4gPiArCXN0cnVjdCB2NGwyX2N0cmwJKmhibGFuazsNCj4gPiArCXN0cnVj dCB2NGwyX2N0cmwJKnZibGFuazsNCj4gPiArCXN0cnVjdCB2NGwyX2N0cmwJKnRlc3RfcGF0dGVy bjsNCj4gPiArCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQJZm10Ow0KPiA+ICsJc3RydWN0IHY0 bDJfY3RybF9oYW5kbGVyIGN0cmxfaGFuZGxlcjsNCj4gPiArDQo+ID4gKwljb25zdCBzdHJ1Y3Qg b3YwMmExMF9tb2RlICpjdXJfbW9kZTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxp bmUgc3RydWN0IG92MDJhMTAgKnRvX292MDJhMTAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkNCj4g PiArew0KPiA+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IG92MDJhMTAsIHN1YmRl dik7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIGVjbGsgMjRNaHoNCj4gPiArICog cGNsayAzOU1oeg0KPiA+ICsgKiBsaW5lbGVuZ3RoIDkzNCgweDNhNikNCj4gPiArICogZnJhbWVs ZW5ndGggMTM5MCgweDU2RSkNCj4gPiArICogZ3JhYndpbmRvd193aWR0aCAxNjAwDQo+ID4gKyAq IGdyYWJ3aW5kb3dfaGVpZ2h0IDEyMDANCj4gPiArICogbWF4X2ZyYW1lcmF0ZSAzMGZwcw0KPiA+ ICsgKiBtaXBpX2RhdGFyYXRlIHBlciBsYW5lIDc4ME1icHMNCj4gPiArICovDQo+ID4gK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgb3YwMmExMF9yZWcgb3YwMmExMF8xNjAweDEyMDBfcmVnc1tdID0gew0K PiA+ICsJezB4ZmQsIDB4MDF9LA0KPiA+ICsJezB4YWMsIDB4MDB9LA0KPiA+ICsJezB4ZmQsIDB4 MDB9LA0KPiA+ICsJezB4MmYsIDB4Mjl9LA0KPiA+ICsJezB4MzQsIDB4MDB9LA0KPiA+ICsJezB4 MzUsIDB4MjF9LA0KPiA+ICsJezB4MzAsIDB4MTV9LA0KPiA+ICsJezB4MzMsIDB4MDF9LA0KPiA+ ICsJezB4ZmQsIDB4MDF9LA0KPiA+ICsJezB4NDQsIDB4MDB9LA0KPiA+ICsJezB4MmEsIDB4NGN9 LA0KPiA+ICsJezB4MmIsIDB4MWV9LA0KPiA+ICsJezB4MmMsIDB4NjB9LA0KPiA+ICsJezB4MjUs IDB4MTF9LA0KPiA+ICsJezB4MDMsIDB4MDF9LA0KPiA+ICsJezB4MDQsIDB4YWV9LA0KPiA+ICsJ ezB4MDksIDB4MDB9LA0KPiA+ICsJezB4MGEsIDB4MDJ9LA0KPiA+ICsJezB4MDYsIDB4YTZ9LA0K PiA+ICsJezB4MzEsIDB4MDB9LA0KPiA+ICsJezB4MjQsIDB4NDB9LA0KPiA+ICsJezB4MDEsIDB4 MDF9LA0KPiA+ICsJezB4ZmIsIDB4NzN9LA0KPiA+ICsJezB4ZmQsIDB4MDF9LA0KPiA+ICsJezB4 MTYsIDB4MDR9LA0KPiA+ICsJezB4MWMsIDB4MDl9LA0KPiA+ICsJezB4MjEsIDB4NDJ9LA0KPiA+ ICsJezB4MTIsIDB4MDR9LA0KPiA+ICsJezB4MTMsIDB4MTB9LA0KPiA+ICsJezB4MTEsIDB4NDB9 LA0KPiA+ICsJezB4MzMsIDB4ODF9LA0KPiA+ICsJezB4ZDAsIDB4MDB9LA0KPiA+ICsJezB4ZDEs IDB4MDF9LA0KPiA+ICsJezB4ZDIsIDB4MDB9LA0KPiA+ICsJezB4NTAsIDB4MTB9LA0KPiA+ICsJ ezB4NTEsIDB4MjN9LA0KPiA+ICsJezB4NTIsIDB4MjB9LA0KPiA+ICsJezB4NTMsIDB4MTB9LA0K PiA+ICsJezB4NTQsIDB4MDJ9LA0KPiA+ICsJezB4NTUsIDB4MjB9LA0KPiA+ICsJezB4NTYsIDB4 MDJ9LA0KPiA+ICsJezB4NTgsIDB4NDh9LA0KPiA+ICsJezB4NWQsIDB4MTV9LA0KPiA+ICsJezB4 NWUsIDB4MDV9LA0KPiA+ICsJezB4NjYsIDB4NjZ9LA0KPiA+ICsJezB4NjgsIDB4Njh9LA0KPiA+ ICsJezB4NmIsIDB4MDB9LA0KPiA+ICsJezB4NmMsIDB4MDB9LA0KPiA+ICsJezB4NmYsIDB4NDB9 LA0KPiA+ICsJezB4NzAsIDB4NDB9LA0KPiA+ICsJezB4NzEsIDB4MGF9LA0KPiA+ICsJezB4NzIs IDB4ZjB9LA0KPiA+ICsJezB4NzMsIDB4MTB9LA0KPiA+ICsJezB4NzUsIDB4ODB9LA0KPiA+ICsJ ezB4NzYsIDB4MTB9LA0KPiA+ICsJezB4ODQsIDB4MDB9LA0KPiA+ICsJezB4ODUsIDB4MTB9LA0K PiA+ICsJezB4ODYsIDB4MTB9LA0KPiA+ICsJezB4ODcsIDB4MDB9LA0KPiA+ICsJezB4OGEsIDB4 MjJ9LA0KPiA+ICsJezB4OGIsIDB4MjJ9LA0KPiA+ICsJezB4MTksIDB4ZjF9LA0KPiA+ICsJezB4 MjksIDB4MDF9LA0KPiA+ICsJezB4ZmQsIDB4MDF9LA0KPiA+ICsJezB4OWQsIDB4MTZ9LA0KPiA+ ICsJezB4YTAsIDB4Mjl9LA0KPiA+ICsJezB4YTEsIDB4MDR9LA0KPiA+ICsJezB4YWQsIDB4NjJ9 LA0KPiA+ICsJezB4YWUsIDB4MDB9LA0KPiA+ICsJezB4YWYsIDB4ODV9LA0KPiA+ICsJezB4YjEs IDB4MDF9LA0KPiA+ICsJezB4OGUsIDB4MDZ9LA0KPiA+ICsJezB4OGYsIDB4NDB9LA0KPiA+ICsJ ezB4OTAsIDB4MDR9LA0KPiA+ICsJezB4OTEsIDB4YjB9LA0KPiA+ICsJezB4NDUsIDB4MDF9LA0K PiA+ICsJezB4NDYsIDB4MDB9LA0KPiA+ICsJezB4NDcsIDB4NmN9LA0KPiA+ICsJezB4NDgsIDB4 MDN9LA0KPiA+ICsJezB4NDksIDB4OGJ9LA0KPiA+ICsJezB4NGEsIDB4MDB9LA0KPiA+ICsJezB4 NGIsIDB4MDd9LA0KPiA+ICsJezB4NGMsIDB4MDR9LA0KPiA+ICsJezB4NGQsIDB4Yjd9LA0KPiA+ ICsJezB4ZjAsIDB4NDB9LA0KPiA+ICsJezB4ZjEsIDB4NDB9LA0KPiA+ICsJezB4ZjIsIDB4NDB9 LA0KPiA+ICsJezB4ZjMsIDB4NDB9LA0KPiA+ICsJezB4M2YsIDB4MDB9LA0KPiA+ICsJezB4ZmQs IDB4MDF9LA0KPiA+ICsJezB4MDUsIDB4MDB9LA0KPiA+ICsJezB4MDYsIDB4YTZ9LA0KPiA+ICsJ ezB4ZmQsIDB4MDF9LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IGNoYXIgKiBj b25zdCBvdjAyYTEwX3Rlc3RfcGF0dGVybl9tZW51W10gPSB7DQo+ID4gKwkiRGlzYWJsZWQiLA0K PiA+ICsJIkNvbG9yIEJhciIsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgczY0 IGxpbmtfZnJlcV9tZW51X2l0ZW1zW10gPSB7DQo+ID4gKwlPVjAyQTEwX0xJTktfRlJFUV8zOTBN SFosDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgdTY0IHRvX3BpeGVsX3JhdGUodTMyIGZf aW5kZXgpDQo+ID4gK3sNCj4gPiArCXU2NCBwaXhlbF9yYXRlID0gbGlua19mcmVxX21lbnVfaXRl bXNbZl9pbmRleF0gKiAyICogT1YwMkExMF9EQVRBX0xBTkVTOw0KPiA+ICsNCj4gPiArCWRvX2Rp dihwaXhlbF9yYXRlLCBPVjAyQTEwX0JJVFNfUEVSX1NBTVBMRSk7DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIHBpeGVsX3JhdGU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b3YwMmExMF9tb2RlIHN1cHBvcnRlZF9tb2Rlc1tdID0gew0KPiA+ICsJew0KPiA+ICsJCS53aWR0 aCA9IDE2MDAsDQo+ID4gKwkJLmhlaWdodCA9IDEyMDAsDQo+ID4gKwkJLmV4cF9kZWYgPSAweDAx YWUsDQo+ID4gKwkJLmh0c19kZWYgPSAweDAzYTYsDQo+ID4gKwkJLnZ0c19kZWYgPSAweDA1NmUs DQo+ID4gKwkJLnJlZ19saXN0ID0gew0KPiA+ICsJCQkubnVtX29mX3JlZ3MgPSBBUlJBWV9TSVpF KG92MDJhMTBfMTYwMHgxMjAwX3JlZ3MpLA0KPiA+ICsJCQkucmVncyA9IG92MDJhMTBfMTYwMHgx MjAwX3JlZ3MsDQo+ID4gKwkJfSwNCj4gPiArCX0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0 aWMgaW50IG92MDJhMTBfd3JpdGVfYXJyYXkoc3RydWN0IG92MDJhMTAgKm92MDJhMTAsDQo+ID4g KwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb3YwMmExMF9yZWdfbGlzdCAqcl9saXN0KQ0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgm b3YwMmExMC0+c3ViZGV2KTsNCj4gPiArCXVuc2lnbmVkIGludCBpOw0KPiA+ICsJaW50IHJldDsN Cj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgcl9saXN0LT5udW1fb2ZfcmVnczsgaSsrKSB7 DQo+ID4gKwkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJfbGlzdC0+ cmVnc1tpXS5hZGRyLA0KPiA+ICsJCQkJCQlyX2xpc3QtPnJlZ3NbaV0udmFsKTsNCj4gPiArCQlp ZiAocmV0IDwgMCkNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwly ZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBvdjAyYTEwX3JlYWRfc21i dXMoc3RydWN0IG92MDJhMTAgKm92MDJhMTAsIHVuc2lnbmVkIGNoYXIgcmVnLA0KPiA+ICsJCQkg ICAgICB1bnNpZ25lZCBjaGFyICp2YWwpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBpMmNfY2xpZW50 ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZvdjAyYTEwLT5zdWJkZXYpOw0KPiA+ICsJ aW50IHJldDsNCj4gPiArDQo+ID4gKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xp ZW50LCByZWcpOw0KPiA+ICsNCj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJCXJldHVybiByZXQ7 DQo+ID4gKw0KPiA+ICsJKnZhbCA9ICh1bnNpZ25lZCBjaGFyKXJldDsNCj4gPiArDQo+ID4gKwly ZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBvdjAyYTEwX21vZF9yZWco c3RydWN0IG92MDJhMTAgKm92MDJhMTAsIHU4IHJlZywgdTggbWFzaywgdTggdmFsKQ0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgm b3YwMmExMC0+c3ViZGV2KTsNCj4gPiArCXU4IHJlYWR2YWw7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ ICsNCj4gPiArCXJldCA9IG92MDJhMTBfcmVhZF9zbWJ1cyhvdjAyYTEwLCByZWcsICZyZWFkdmFs KTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwl2YWwg PSAocmVhZHZhbCAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4g aTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgb3YwMmExMF9maWxsX2ZtdChjb25zdCBzdHJ1Y3Qgb3YwMmEx MF9tb2RlICptb2RlLA0KPiA+ICsJCQkgICAgIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKmZt dCkNCj4gPiArew0KPiA+ICsJZm10LT53aWR0aCA9IG1vZGUtPndpZHRoOw0KPiA+ICsJZm10LT5o ZWlnaHQgPSBtb2RlLT5oZWlnaHQ7DQo+ID4gKwlmbXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05F Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG92MDJhMTBfc2V0X2ZtdChzdHJ1Y3Qg djRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJCQkgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZp ZyAqY2ZnLA0KPiA+ICsJCQkgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmbXQpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBvdjAyYTEwICpvdjAyYTEwID0gdG9fb3YwMmExMChzZCk7DQo+ID4g KwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptYnVzX2ZtdCA9ICZmbXQtPmZvcm1hdDsNCj4g PiArDQo+ID4gKwltdXRleF9sb2NrKCZvdjAyYTEwLT5tdXRleCk7DQo+ID4gKw0KPiA+ICsJaWYg KG92MDJhMTAtPnN0cmVhbWluZykgew0KPiA+ICsJCW11dGV4X3VubG9jaygmb3YwMmExMC0+bXV0 ZXgpOw0KPiA+ICsJCXJldHVybiAtRUJVU1k7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogT25s eSBvbmUgc2Vuc29yIG1vZGUgc3VwcG9ydGVkICovDQo+ID4gKwltYnVzX2ZtdC0+Y29kZSA9IG92 MDJhMTAtPmZtdC5jb2RlOw0KPiA+ICsJb3YwMmExMF9maWxsX2ZtdChvdjAyYTEwLT5jdXJfbW9k ZSwgbWJ1c19mbXQpOw0KPiA+ICsJb3YwMmExMC0+Zm10ID0gZm10LT5mb3JtYXQ7DQo+ID4gKw0K PiA+ICsJbXV0ZXhfdW5sb2NrKCZvdjAyYTEwLT5tdXRleCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgb3YwMmExMF9nZXRfZm10KHN0cnVj dCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKwkJCSAgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29u ZmlnICpjZmcsDQo+ID4gKwkJCSAgIHN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZtdCkNCj4g PiArew0KPiA+ICsJc3RydWN0IG92MDJhMTAgKm92MDJhMTAgPSB0b19vdjAyYTEwKHNkKTsNCj4g PiArCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1idXNfZm10ID0gJmZtdC0+Zm9ybWF0Ow0K PiA+ICsNCj4gPiArCW11dGV4X2xvY2soJm92MDJhMTAtPm11dGV4KTsNCj4gPiArDQo+ID4gKwlm bXQtPmZvcm1hdCA9IG92MDJhMTAtPmZtdDsNCj4gPiArCW1idXNfZm10LT5jb2RlID0gb3YwMmEx MC0+Zm10LmNvZGU7DQo+ID4gKwlvdjAyYTEwX2ZpbGxfZm10KG92MDJhMTAtPmN1cl9tb2RlLCBt YnVzX2ZtdCk7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZvdjAyYTEwLT5tdXRleCk7DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgb3Yw MmExMF9lbnVtX21idXNfY29kZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJCQkJICBz dHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnLA0KPiA+ICsJCQkJICBzdHJ1Y3QgdjRs Ml9zdWJkZXZfbWJ1c19jb2RlX2VudW0gKmNvZGUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBvdjAy YTEwICpvdjAyYTEwID0gdG9fb3YwMmExMChzZCk7DQo+ID4gKw0KPiA+ICsJaWYgKGNvZGUtPmlu ZGV4ID49IEFSUkFZX1NJWkUoc3VwcG9ydGVkX21vZGVzKSkNCj4gPiArCQlyZXR1cm4gLUVJTlZB TDsNCj4gPiArDQo+ID4gKwljb2RlLT5jb2RlID0gb3YwMmExMC0+Zm10LmNvZGU7DQo+ID4gKw0K PiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgb3YwMmExMF9l bnVtX2ZyYW1lX3NpemVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKwkJCQkgICAgc3Ry dWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZywNCj4gPiArCQkJCSAgICBzdHJ1Y3QgdjRs Ml9zdWJkZXZfZnJhbWVfc2l6ZV9lbnVtICpmc2UpDQo+ID4gK3sNCj4gPiArCWlmIChmc2UtPmlu ZGV4ID49IEFSUkFZX1NJWkUoc3VwcG9ydGVkX21vZGVzKSkNCj4gPiArCQlyZXR1cm4gLUVJTlZB TDsNCj4gPiArDQo+ID4gKwlmc2UtPm1pbl93aWR0aCAgPSBzdXBwb3J0ZWRfbW9kZXNbZnNlLT5p bmRleF0ud2lkdGg7DQo+ID4gKwlmc2UtPm1heF93aWR0aCAgPSBzdXBwb3J0ZWRfbW9kZXNbZnNl LT5pbmRleF0ud2lkdGg7DQo+ID4gKwlmc2UtPm1heF9oZWlnaHQgPSBzdXBwb3J0ZWRfbW9kZXNb ZnNlLT5pbmRleF0uaGVpZ2h0Ow0KPiA+ICsJZnNlLT5taW5faGVpZ2h0ID0gc3VwcG9ydGVkX21v ZGVzW2ZzZS0+aW5kZXhdLmhlaWdodDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCBvdjAyYTEwX2NoZWNrX3NlbnNvcl9pZChzdHJ1Y3Qgb3Yw MmExMCAqb3YwMmExMCkNCj4gPiArew0KPiA+ICsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9 IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQo+ID4gKwl1MTYgaWQ7DQo+ ID4gKwl1OCBjaGlwX2lkX2g7DQo+ID4gKwl1OCBjaGlwX2lkX2w7DQo+ID4gKwlpbnQgcmV0Ow0K PiA+ICsNCj4gPiArCS8qIENoZWNrIHNlbnNvciByZXZpc2lvbiAqLw0KPiA+ICsJcmV0ID0gb3Yw MmExMF9yZWFkX3NtYnVzKG92MDJhMTAsIE9WMDJBMTBfUkVHX0NISVBfSURfSCwgJmNoaXBfaWRf aCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0 ID0gb3YwMmExMF9yZWFkX3NtYnVzKG92MDJhMTAsIE9WMDJBMTBfUkVHX0NISVBfSURfTCwgJmNo aXBfaWRfbCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ ICsJaWQgPSBPVjAyQTEwX0lEKGNoaXBfaWRfaCwgY2hpcF9pZF9sKTsNCj4gPiArCWlmIChpZCAh PSBDSElQX0lEKSB7DQo+ID4gKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJVbmV4cGVjdGVkIHNl bnNvciBpZCglMDR4KVxuIiwgaWQpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiRGV0ZWN0ZWQgT1YlMDRYIHNlbnNv clxuIiwgaWQpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIG92MDJhMTBfcG93ZXJfb24oc3RydWN0IGRldmljZSAq ZGV2KQ0KPiANCj4gX19tYXliZV91bnVzZWQgaXMgdW5uZWNlc3NhcnkuIFNhbWUgb24gb3YwMmEx MF9wb3dlcl9vZmYoKSBiZWxvdy4NCj4gDQoNCkdvdCBpdC4NCl9fbWF5YmVfdW51c2VkIHdvdWxk IGJlIHJlbW92ZWQgaW4gbmV4dCByZWxlYXNlLg0KDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBpMmNf Y2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9z dWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7DQo+ID4gKwlzdHJ1Y3Qgb3Yw MmExMCAqb3YwMmExMCA9IHRvX292MDJhMTAoc2QpOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ ID4gKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAob3YwMmExMC0+bl9yc3RfZ3BpbywgMCk7DQo+ ID4gKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAob3YwMmExMC0+cGRfZ3BpbywgMCk7DQo+ID4g Kw0KPiA+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKG92MDJhMTAtPmVjbGspOw0KPiA+ICsJ aWYgKHJldCA8IDApIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgZWNs a1xuIik7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSBy ZWd1bGF0b3JfYnVsa19lbmFibGUoT1YwMkExMF9OVU1fU1VQUExJRVMsIG92MDJhMTAtPnN1cHBs aWVzKTsNCj4gPiArCWlmIChyZXQgPCAwKSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQg dG8gZW5hYmxlIHJlZ3VsYXRvcnNcbiIpOw0KPiA+ICsJCWdvdG8gZGlzYWJsZV9jbGs7DQo+ID4g Kwl9DQo+ID4gKwl1c2xlZXBfcmFuZ2UoNTAwMCwgNjAwMCk7DQo+ID4gKw0KPiA+ICsJZ3Bpb2Rf c2V0X3ZhbHVlX2NhbnNsZWVwKG92MDJhMTAtPnBkX2dwaW8sIDEpOw0KPiA+ICsJdXNsZWVwX3Jh bmdlKDUwMDAsIDYwMDApOw0KPiA+ICsNCj4gPiArCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChv djAyYTEwLT5uX3JzdF9ncGlvLCAxKTsNCj4gPiArCXVzbGVlcF9yYW5nZSg1MDAwLCA2MDAwKTsN Cj4gPiArDQo+ID4gKwlyZXQgPSBvdjAyYTEwX2NoZWNrX3NlbnNvcl9pZChvdjAyYTEwKTsNCj4g PiArCWlmIChyZXQpDQo+ID4gKwkJZ290byBkaXNhYmxlX3JlZ3VsYXRvcjsNCj4gPiArDQo+ID4g KwlyZXR1cm4gMDsNCj4gPiArDQo+ID4gK2Rpc2FibGVfcmVndWxhdG9yOg0KPiA+ICsJcmVndWxh dG9yX2J1bGtfZGlzYWJsZShPVjAyQTEwX05VTV9TVVBQTElFUywgb3YwMmExMC0+c3VwcGxpZXMp Ow0KPiA+ICtkaXNhYmxlX2NsazoNCj4gPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShvdjAyYTEw LT5lY2xrKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIG92MDJhMTBfcG93ZXJfb2ZmKHN0cnVjdCBkZXZpY2Ug KmRldikNCj4gPiArew0KPiA+ICsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19j bGllbnQoZGV2KTsNCj4gPiArCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVu dGRhdGEoY2xpZW50KTsNCj4gPiArCXN0cnVjdCBvdjAyYTEwICpvdjAyYTEwID0gdG9fb3YwMmEx MChzZCk7DQo+ID4gKw0KPiA+ICsJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG92MDJhMTAtPm5f cnN0X2dwaW8sIDApOw0KPiA+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG92MDJhMTAtPmVjbGsp Ow0KPiA+ICsJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG92MDJhMTAtPnBkX2dwaW8sIDApOw0K PiA+ICsJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShPVjAyQTEwX05VTV9TVVBQTElFUywgb3YwMmEx MC0+c3VwcGxpZXMpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaW50IF9fb3YwMmExMF9zdGFydF9zdHJlYW0oc3RydWN0IG92MDJhMTAgKm92MDJh MTApDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9z dWJkZXZkYXRhKCZvdjAyYTEwLT5zdWJkZXYpOw0KPiA+ICsJY29uc3Qgc3RydWN0IG92MDJhMTBf cmVnX2xpc3QgKnJlZ19saXN0Ow0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwkvKiBBcHBs eSBkZWZhdWx0IHZhbHVlcyBvZiBjdXJyZW50IG1vZGUgKi8NCj4gPiArCXJlZ19saXN0ID0gJm92 MDJhMTAtPmN1cl9tb2RlLT5yZWdfbGlzdDsNCj4gPiArCXJldCA9IG92MDJhMTBfd3JpdGVfYXJy YXkob3YwMmExMCwgcmVnX2xpc3QpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0 Ow0KPiA+ICsNCj4gPiArCS8qIEFwcGx5IGN1c3RvbWl6ZWQgdmFsdWVzIGZyb20gdXNlciAqLw0K PiA+ICsJcmV0ID0gX192NGwyX2N0cmxfaGFuZGxlcl9zZXR1cChvdjAyYTEwLT5zdWJkZXYuY3Ry bF9oYW5kbGVyKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ ID4gKwkvKiBTZXQgb3JpZW50YXRpb24gdG8gMTgwIGRlZ3JlZSAqLw0KPiA+ICsJaWYgKG92MDJh MTAtPnVwc2lkZV9kb3duKSB7DQo+ID4gKwkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0 YShjbGllbnQsIFJFR19NSVJST1JfRkxJUF9DT05UUk9MLA0KPiA+ICsJCQkJCQlSRUdfTUlSUk9S X0ZMSVBfRU5BQkxFKTsNCj4gPiArCQlpZiAocmV0KSB7DQo+ID4gKwkJCWRldl9lcnIoJmNsaWVu dC0+ZGV2LCAiZmFpbGVkIHRvIHNldCBvcmllbnRhdGlvblxuIik7DQo+ID4gKwkJCXJldHVybiBy ZXQ7DQo+ID4gKwkJfQ0KPiA+ICsJCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xp ZW50LCBSRUdfR0xPQkFMX0VGRkVDVElWRSwNCj4gPiArCQkJCQkJUkVHX0VOQUJMRSk7DQo+ID4g KwkJaWYgKHJldCA8IDApDQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJLyogU2V0IGNsb2NrIGxhbmUgdHJhbnNtaXNzaW9uIG1vZGUgYWNjb3JkaW5nIHRvIERUIHBy b3BlcnR5ICovDQo+ID4gKwlyZXQgPSBvdjAyYTEwX21vZF9yZWcob3YwMmExMCwgUkVHX0hTX01P REVfQkxDLCBDTE9DS19IU19NT0RFX0VOQUJMRSwNCj4gPiArCQkJICAgICAgb3YwMmExMC0+bWlw aV9jbG9ja19oc19tb2RlX2VuYWJsZSA/DQo+ID4gKwkJCSAgICAgIENMT0NLX0hTX01PREVfRU5B QkxFIDogMCk7DQo+ID4gKwlpZiAocmV0IDwgMCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsN Cj4gPiArCS8qIFNldCBtaXBpIFRYIHNwZWVkIGFjY29yZGluZyB0byBEVCBwcm9wZXJ0eSAqLw0K PiA+ICsJaWYgKG92MDJhMTAtPm1pcGlfY2xvY2tfdHhfc3BlZWRfc2VsZWN0X2VuYWJsZSkgew0K PiA+ICsJCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBUWF9TUEVFRF9B UkVBX1NFTCwNCj4gPiArCQkJCQkJb3YwMmExMC0+bWlwaV9jbG9ja190eF9zcGVlZCk7DQo+ID4g KwkJaWYgKHJldCA8IDApDQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJLyogU2V0IHN0cmVhbSBvbiByZWdpc3RlciAqLw0KPiA+ICsJcmV0dXJuIGkyY19zbWJ1c193 cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBSRUdfU0NfQ1RSTF9NT0RFLA0KPiA+ICsJCQkJCSBTQ19D VFJMX01PREVfU1RSRUFNSU5HKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBfX292 MDJhMTBfc3RvcF9zdHJlYW0oc3RydWN0IG92MDJhMTAgKm92MDJhMTApDQo+ID4gK3sNCj4gPiAr CXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZvdjAyYTEw LT5zdWJkZXYpOw0KPiA+ICsNCj4gPiArCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRh KGNsaWVudCwgUkVHX1NDX0NUUkxfTU9ERSwNCj4gPiArCQkJCQkgU0NfQ1RSTF9NT0RFX1NUQU5E QlkpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG92MDJhMTBfZW50aXR5X2luaXRf Y2ZnKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKwkJCQkgICBzdHJ1Y3QgdjRsMl9zdWJk ZXZfcGFkX2NvbmZpZyAqY2ZnKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9y bWF0IGZtdCA9IHsNCj4gPiArCQkud2hpY2ggPSBjZmcgPyBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZ DQo+ID4gKwkJCSAgICAgOiBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFLA0KPiA+ICsJCS5mb3Jt YXQgPSB7DQo+ID4gKwkJCS53aWR0aCA9IDE2MDAsDQo+ID4gKwkJCS5oZWlnaHQgPSAxMjAwLA0K PiA+ICsJCX0NCj4gPiArCX07DQo+ID4gKw0KPiA+ICsJb3YwMmExMF9zZXRfZm10KHNkLCBjZmcs ICZmbXQpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgaW50IG92MDJhMTBfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IG9uKQ0K PiA+ICt7DQo+ID4gKwlzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCA9IHRvX292MDJhMTAoc2QpOw0K PiA+ICsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm92 MDJhMTAtPnN1YmRldik7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCWRldl9kYmcoJmNs aWVudC0+ZGV2LCAib3YwMmExMCBzX3N0cmVhbSAoJWQpXG4iLCBvbik7DQo+IA0KPiBQbGVhc2Ug cmVtb3ZlLg0KPiANCg0KRml4ZWQgaW4gbmV4dCByZWxlYXNlLg0KDQo+ID4gKwltdXRleF9sb2Nr KCZvdjAyYTEwLT5tdXRleCk7DQo+ID4gKw0KPiA+ICsJaWYgKG92MDJhMTAtPnN0cmVhbWluZyA9 PSBvbikNCj4gPiArCQlnb3RvIHVubG9ja19hbmRfcmV0dXJuOw0KPiA+ICsNCj4gPiArCWlmIChv bikgew0KPiA+ICsJCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoJmNsaWVudC0+ZGV2KTsNCj4g PiArCQlpZiAocmV0IDwgMCkgew0KPiA+ICsJCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJmNsaWVu dC0+ZGV2KTsNCj4gPiArCQkJZ290byB1bmxvY2tfYW5kX3JldHVybjsNCj4gPiArCQl9DQo+ID4g Kw0KPiA+ICsJCXJldCA9IF9fb3YwMmExMF9zdGFydF9zdHJlYW0ob3YwMmExMCk7DQo+ID4gKwkJ aWYgKHJldCkgew0KPiA+ICsJCQlfX292MDJhMTBfc3RvcF9zdHJlYW0ob3YwMmExMCk7DQo+ID4g KwkJCW92MDJhMTAtPnN0cmVhbWluZyA9ICFvbjsNCj4gPiArCQkJZ290byBlcnJfcnBtX3B1dDsN Cj4gPiArCQl9DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCV9fb3YwMmExMF9zdG9wX3N0cmVhbShv djAyYTEwKTsNCj4gPiArCQlwbV9ydW50aW1lX3B1dCgmY2xpZW50LT5kZXYpOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCW92MDJhMTAtPnN0cmVhbWluZyA9IG9uOw0KPiA+ICsJbXV0ZXhfdW5sb2Nr KCZvdjAyYTEwLT5tdXRleCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICtl cnJfcnBtX3B1dDoNCj4gPiArCXBtX3J1bnRpbWVfcHV0KCZjbGllbnQtPmRldik7DQo+ID4gK3Vu bG9ja19hbmRfcmV0dXJuOg0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZvdjAyYTEwLT5tdXRleCk7DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBkZXZfcG1fb3BzIG92MDJhMTBfcG1fb3BzID0gew0KPiA+ICsJU0VUX1NZU1RFTV9T TEVFUF9QTV9PUFMocG1fcnVudGltZV9mb3JjZV9zdXNwZW5kLA0KPiA+ICsJCQkJcG1fcnVudGlt ZV9mb3JjZV9yZXN1bWUpDQo+ID4gKwlTRVRfUlVOVElNRV9QTV9PUFMob3YwMmExMF9wb3dlcl9v ZmYsIG92MDJhMTBfcG93ZXJfb24sIE5VTEwpDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKg0KPiA+ ICsgKiBvdjAyYTEwX3NldF9leHBvc3VyZSAtIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHNldHRpbmcg ZXhwb3N1cmUgdGltZQ0KPiA+ICsgKiBAcHJpdjogUG9pbnRlciB0byBkZXZpY2Ugc3RydWN0dXJl DQo+ID4gKyAqIEB2YWw6IFZhcmlhYmxlIGZvciBleHBvc3VyZSB0aW1lLCBpbiB0aGUgdW5pdCBv ZiBtaWNyby1zZWNvbmQNCj4gPiArICoNCj4gPiArICogU2V0IGV4cG9zdXJlIHRpbWUgYmFzZWQg b24gaW5wdXQgdmFsdWUuDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzDQo+ ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IG92MDJhMTBfc2V0X2V4cG9zdXJlKHN0cnVjdCBvdjAy YTEwICpvdjAyYTEwLCBpbnQgdmFsKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAq Y2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsNCj4gPiArCWlu dCByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGll bnQsIFJFR19QQUdFX1NXSVRDSCwgUkVHX0VOQUJMRSk7DQo+ID4gKwlpZiAocmV0IDwgMCkNCj4g PiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRl X2RhdGEoY2xpZW50LCBPVjAyQTEwX1JFR19FWFBPU1VSRV9ILA0KPiA+ICsJCQkJCXZhbCA+PiBP VjAyQTEwX0VYUF9TSElGVCk7DQo+ID4gKwlpZiAocmV0IDwgMCkNCj4gPiArCQlyZXR1cm4gcmV0 Ow0KPiA+ICsNCj4gPiArCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBP VjAyQTEwX1JFR19FWFBPU1VSRV9MLCB2YWwpOw0KPiA+ICsJaWYgKHJldCA8IDApDQo+ID4gKwkJ cmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0 YShjbGllbnQsIFJFR19HTE9CQUxfRUZGRUNUSVZFLA0KPiA+ICsJCQkJCSBSRUdfRU5BQkxFKTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBvdjAyYTEwX3NldF9nYWluKHN0cnVjdCBv djAyYTEwICpvdjAyYTEwLCBpbnQgdmFsKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgaTJjX2NsaWVu dCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsNCj4gPiAr CWludCByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShj bGllbnQsIFJFR19QQUdFX1NXSVRDSCwgUkVHX0VOQUJMRSk7DQo+ID4gKwlpZiAocmV0IDwgMCkN Cj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9IGkyY19zbWJ1c193cml0ZV9i eXRlX2RhdGEoY2xpZW50LCBPVjAyQTEwX1JFR19HQUlOLCB2YWwpOw0KPiA+ICsJaWYgKHJldCA8 IDApDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gaTJjX3NtYnVzX3dy aXRlX2J5dGVfZGF0YShjbGllbnQsIFJFR19HTE9CQUxfRUZGRUNUSVZFLA0KPiA+ICsJCQkJCSBS RUdfRU5BQkxFKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBvdjAyYTEwX3NldF92 Ymxhbmsoc3RydWN0IG92MDJhMTAgKm92MDJhMTAsIGludCB2YWwpDQo+ID4gK3sNCj4gPiArCXN0 cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZvdjAyYTEwLT5z dWJkZXYpOw0KPiA+ICsJdTMyIHZ0cyA9IHZhbCArIG92MDJhMTAtPmN1cl9tb2RlLT5oZWlnaHQg LSBPVjAyQTEwX0JBU0lDX0xJTkU7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9 IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBSRUdfUEFHRV9TV0lUQ0gsIFJFR19F TkFCTEUpOw0KPiA+ICsJaWYgKHJldCA8IDApDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ ID4gKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgT1YwMkExMF9SRUdf VlRTX0gsDQo+ID4gKwkJCQkJdnRzID4+IE9WMDJBMTBfVlRTX1NISUZUKTsNCj4gPiArCWlmIChy ZXQgPCAwKQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gaTJjX3NtYnVz X3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIE9WMDJBMTBfUkVHX1ZUU19MLCB2dHMpOw0KPiA+ICsJ aWYgKHJldCA8IDApDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gaTJj X3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFJFR19HTE9CQUxfRUZGRUNUSVZFLA0KPiA+ ICsJCQkJCSBSRUdfRU5BQkxFKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBvdjAy YTEwX3NldF90ZXN0X3BhdHRlcm4oc3RydWN0IG92MDJhMTAgKm92MDJhMTAsIGludCBwYXR0ZXJu KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3Vi ZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJ aWYgKHBhdHRlcm4pDQo+ID4gKwkJcGF0dGVybiA9IE9WMDJBMTBfVEVTVF9QQVRURVJOX0VOQUJM RTsNCj4gPiArDQo+ID4gKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwg UkVHX1BBR0VfU1dJVENILCBSRUdfRU5BQkxFKTsNCj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJ CXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0 YShjbGllbnQsIE9WMDJBMTBfUkVHX1RFU1RfUEFUVEVSTiwNCj4gPiArCQkJCQlwYXR0ZXJuKTsN Cj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0 ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFJFR19HTE9CQUxfRUZGRUNUSVZF LA0KPiA+ICsJCQkJCVJFR19FTkFCTEUpOw0KPiA+ICsJaWYgKHJldCA8IDApDQo+ID4gKwkJcmV0 dXJuIHJldDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShj bGllbnQsIFJFR19TQ19DVFJMX01PREUsDQo+ID4gKwkJCQkJIFNDX0NUUkxfTU9ERV9TVFJFQU1J TkcpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG92MDJhMTBfc2V0X2N0cmwoc3Ry dWN0IHY0bDJfY3RybCAqY3RybCkNCj4gPiArew0KPiA+ICsJc3RydWN0IG92MDJhMTAgKm92MDJh MTAgPSBjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwNCj4gPiArCQkJCQkgICAgICAgc3RydWN0 IG92MDJhMTAsIGN0cmxfaGFuZGxlcik7DQo+ID4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50 ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsNCj4gPiArCXM2NCBtYXhf ZXhwbzsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJLyogUHJvcGFnYXRlIGNoYW5nZSBv ZiBjdXJyZW50IGNvbnRyb2wgdG8gYWxsIHJlbGF0ZWQgY29udHJvbHMgKi8NCj4gPiArCWlmIChj dHJsLT5pZCA9PSBWNEwyX0NJRF9WQkxBTkspIHsNCj4gPiArCQkvKiBVcGRhdGUgbWF4IGV4cG9z dXJlIHdoaWxlIG1lZXRpbmcgZXhwZWN0ZWQgdmJsYW5raW5nICovDQo+ID4gKwkJbWF4X2V4cG8g PSBvdjAyYTEwLT5jdXJfbW9kZS0+aGVpZ2h0ICsgY3RybC0+dmFsIC0NCj4gPiArCQkJICAgT1Yw MkExMF9FWFBPU1VSRV9NQVhfTUFSR0lOOw0KPiA+ICsJCV9fdjRsMl9jdHJsX21vZGlmeV9yYW5n ZShvdjAyYTEwLT5leHBvc3VyZSwNCj4gPiArCQkJCQkgb3YwMmExMC0+ZXhwb3N1cmUtPm1pbmlt dW0sIG1heF9leHBvLA0KPiA+ICsJCQkJCSBvdjAyYTEwLT5leHBvc3VyZS0+c3RlcCwNCj4gPiAr CQkJCQkgb3YwMmExMC0+ZXhwb3N1cmUtPmRlZmF1bHRfdmFsdWUpOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCS8qIFY0TDIgY29udHJvbHMgdmFsdWVzIHdpbGwgYmUgYXBwbGllZCBvbmx5IHdoZW4g cG93ZXIgaXMgYWxyZWFkeSB1cCAqLw0KPiA+ICsJaWYgKCFwbV9ydW50aW1lX2dldF9pZl9pbl91 c2UoJmNsaWVudC0+ZGV2KSkNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArDQo+ID4gKwlzd2l0Y2gg KGN0cmwtPmlkKSB7DQo+ID4gKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOg0KPiA+ICsJCXJldCA9 IG92MDJhMTBfc2V0X2V4cG9zdXJlKG92MDJhMTAsIGN0cmwtPnZhbCk7DQo+ID4gKwkJYnJlYWs7 DQo+ID4gKwljYXNlIFY0TDJfQ0lEX0FOQUxPR1VFX0dBSU46DQo+ID4gKwkJcmV0ID0gb3YwMmEx MF9zZXRfZ2FpbihvdjAyYTEwLCBjdHJsLT52YWwpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2Fz ZSBWNEwyX0NJRF9WQkxBTks6DQo+ID4gKwkJcmV0ID0gb3YwMmExMF9zZXRfdmJsYW5rKG92MDJh MTAsIGN0cmwtPnZhbCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFY0TDJfQ0lEX1RFU1Rf UEFUVEVSTjoNCj4gPiArCQlyZXQgPSBvdjAyYTEwX3NldF90ZXN0X3BhdHRlcm4ob3YwMmExMCwg Y3RybC0+dmFsKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJcmV0ID0g LUVJTlZBTDsNCj4gPiArCQlicmVhazsNCj4gPiArCX07DQo+ID4gKw0KPiA+ICsJcG1fcnVudGlt ZV9wdXQoJmNsaWVudC0+ZGV2KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBvdjAy YTEwX3ZpZGVvX29wcyA9IHsNCj4gPiArCS5zX3N0cmVhbSA9IG92MDJhMTBfc19zdHJlYW0sDQo+ ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9v cHMgb3YwMmExMF9wYWRfb3BzID0gew0KPiA+ICsJLmluaXRfY2ZnID0gb3YwMmExMF9lbnRpdHlf aW5pdF9jZmcsDQo+ID4gKwkuZW51bV9tYnVzX2NvZGUgPSBvdjAyYTEwX2VudW1fbWJ1c19jb2Rl LA0KPiA+ICsJLmVudW1fZnJhbWVfc2l6ZSA9IG92MDJhMTBfZW51bV9mcmFtZV9zaXplcywNCj4g PiArCS5nZXRfZm10ID0gb3YwMmExMF9nZXRfZm10LA0KPiA+ICsJLnNldF9mbXQgPSBvdjAyYTEw X3NldF9mbXQsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJf c3ViZGV2X29wcyBvdjAyYTEwX3N1YmRldl9vcHMgPSB7DQo+ID4gKwkudmlkZW8JPSAmb3YwMmEx MF92aWRlb19vcHMsDQo+ID4gKwkucGFkCT0gJm92MDJhMTBfcGFkX29wcywNCj4gPiArfTsNCj4g PiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWVkaWFfZW50aXR5X29wZXJhdGlvbnMgb3Yw MmExMF9zdWJkZXZfZW50aXR5X29wcyA9IHsNCj4gPiArCS5saW5rX3ZhbGlkYXRlID0gdjRsMl9z dWJkZXZfbGlua192YWxpZGF0ZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgdjRsMl9jdHJsX29wcyBvdjAyYTEwX2N0cmxfb3BzID0gew0KPiA+ICsJLnNfY3RybCA9 IG92MDJhMTBfc2V0X2N0cmwsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG92MDJh MTBfaW5pdGlhbGl6ZV9jb250cm9scyhzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCkNCj4gPiArew0K PiA+ICsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm92 MDJhMTAtPnN1YmRldik7DQo+ID4gKwljb25zdCBzdHJ1Y3Qgb3YwMmExMF9tb2RlICptb2RlOw0K PiA+ICsJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoYW5kbGVyOw0KPiA+ICsJc3RydWN0IHY0 bDJfY3RybCAqY3RybDsNCj4gPiArCXU2NCBleHBvc3VyZV9tYXg7DQo+ID4gKwl1MzIgcGl4ZWxf cmF0ZSwgaF9ibGFuazsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJaGFuZGxlciA9ICZv djAyYTEwLT5jdHJsX2hhbmRsZXI7DQo+ID4gKwltb2RlID0gb3YwMmExMC0+Y3VyX21vZGU7DQo+ ID4gKwlyZXQgPSB2NGwyX2N0cmxfaGFuZGxlcl9pbml0KGhhbmRsZXIsIDcpOw0KPiA+ICsJaWYg KHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCWhhbmRsZXItPmxvY2sgPSAm b3YwMmExMC0+bXV0ZXg7DQo+ID4gKw0KPiA+ICsJY3RybCA9IHY0bDJfY3RybF9uZXdfaW50X21l bnUoaGFuZGxlciwgTlVMTCwgVjRMMl9DSURfTElOS19GUkVRLCAwLCAwLA0KPiA+ICsJCQkJICAg ICAgbGlua19mcmVxX21lbnVfaXRlbXMpOw0KPiA+ICsJaWYgKGN0cmwpDQo+ID4gKwkJY3RybC0+ ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZOw0KPiA+ICsNCj4gPiArCXBpeGVsX3Jh dGUgPSB0b19waXhlbF9yYXRlKDApOw0KPiA+ICsJdjRsMl9jdHJsX25ld19zdGQoaGFuZGxlciwg TlVMTCwgVjRMMl9DSURfUElYRUxfUkFURSwgMCwgcGl4ZWxfcmF0ZSwgMSwNCj4gPiArCQkJICBw aXhlbF9yYXRlKTsNCj4gPiArDQo+ID4gKwloX2JsYW5rID0gbW9kZS0+aHRzX2RlZiAtIG1vZGUt PndpZHRoOw0KPiA+ICsJb3YwMmExMC0+aGJsYW5rID0gdjRsMl9jdHJsX25ld19zdGQoaGFuZGxl ciwgTlVMTCwgVjRMMl9DSURfSEJMQU5LLA0KPiA+ICsJCQkJCSAgICBoX2JsYW5rLCBoX2JsYW5r LCAxLCBoX2JsYW5rKTsNCj4gPiArCWlmIChvdjAyYTEwLT5oYmxhbmspDQo+ID4gKwkJb3YwMmEx MC0+aGJsYW5rLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFk7DQo+ID4gKw0KPiA+ ICsJb3YwMmExMC0+dmJsYW5rID0gdjRsMl9jdHJsX25ld19zdGQoaGFuZGxlciwgJm92MDJhMTBf Y3RybF9vcHMsDQo+ID4gKwkJCQkJICAgIFY0TDJfQ0lEX1ZCTEFOSywgbW9kZS0+dnRzX2RlZiAt DQo+ID4gKwkJCQkJICAgIG1vZGUtPmhlaWdodCwNCj4gPiArCQkJCQkgICAgT1YwMkExMF9WVFNf TUFYIC0gbW9kZS0+aGVpZ2h0LCAxLA0KPiA+ICsJCQkJCSAgICBtb2RlLT52dHNfZGVmIC0gbW9k ZS0+aGVpZ2h0KTsNCj4gPiArDQo+ID4gKwlleHBvc3VyZV9tYXggPSBtb2RlLT52dHNfZGVmIC0g NDsNCj4gPiArCW92MDJhMTAtPmV4cG9zdXJlID0gdjRsMl9jdHJsX25ld19zdGQoaGFuZGxlciwg Jm92MDJhMTBfY3RybF9vcHMsDQo+ID4gKwkJCQkJICAgICAgVjRMMl9DSURfRVhQT1NVUkUsDQo+ ID4gKwkJCQkJICAgICAgT1YwMkExMF9FWFBPU1VSRV9NSU4sDQo+ID4gKwkJCQkJICAgICAgZXhw b3N1cmVfbWF4LA0KPiA+ICsJCQkJCSAgICAgIE9WMDJBMTBfRVhQT1NVUkVfU1RFUCwNCj4gPiAr CQkJCQkgICAgICBtb2RlLT5leHBfZGVmKTsNCj4gPiArDQo+ID4gKwlvdjAyYTEwLT5hbmFsX2dh aW4gPSB2NGwyX2N0cmxfbmV3X3N0ZChoYW5kbGVyLCAmb3YwMmExMF9jdHJsX29wcywNCj4gPiAr CQkJCQkgICAgICAgVjRMMl9DSURfQU5BTE9HVUVfR0FJTiwNCj4gPiArCQkJCQkgICAgICAgT1Yw MkExMF9HQUlOX01JTiwNCj4gPiArCQkJCQkgICAgICAgT1YwMkExMF9HQUlOX01BWCwNCj4gPiAr CQkJCQkgICAgICAgT1YwMkExMF9HQUlOX1NURVAsDQo+ID4gKwkJCQkJICAgICAgIE9WMDJBMTBf R0FJTl9ERUZBVUxUKTsNCj4gPiArDQo+ID4gKwlvdjAyYTEwLT50ZXN0X3BhdHRlcm4gPQ0KPiA+ ICsJCXY0bDJfY3RybF9uZXdfc3RkX21lbnVfaXRlbXMoaGFuZGxlciwgJm92MDJhMTBfY3RybF9v cHMsDQo+ID4gKwkJCQkJICAgICBWNEwyX0NJRF9URVNUX1BBVFRFUk4sDQo+ID4gKwkJCQkJICAg ICBBUlJBWV9TSVpFKG92MDJhMTBfdGVzdF9wYXR0ZXJuX21lbnUpIC0NCj4gPiArCQkJCQkgICAg IDEsIDAsIDAsDQo+ID4gKwkJCQkJICAgICBvdjAyYTEwX3Rlc3RfcGF0dGVybl9tZW51KTsNCj4g PiArDQo+ID4gKwlpZiAoaGFuZGxlci0+ZXJyb3IpIHsNCj4gPiArCQlyZXQgPSBoYW5kbGVyLT5l cnJvcjsNCj4gPiArCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byBpbml0IGNvbnRy b2xzKCVkKVxuIiwgcmV0KTsNCj4gPiArCQlnb3RvIGVycl9mcmVlX2hhbmRsZXI7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJb3YwMmExMC0+c3ViZGV2LmN0cmxfaGFuZGxlciA9IGhhbmRsZXI7DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICtlcnJfZnJlZV9oYW5kbGVyOg0KPiA+ ICsJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZShoYW5kbGVyKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4g cmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG92MDJhMTBfY2hlY2tfaHdjZmco c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCkNCj4gPiArew0KPiA+ ICsJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmVwOw0KPiA+ICsJc3RydWN0IGZ3bm9kZV9oYW5kbGUg KmZ3bm9kZSA9IGRldl9md25vZGUoZGV2KTsNCj4gPiArCXN0cnVjdCB2NGwyX2Z3bm9kZV9lbmRw b2ludCBidXNfY2ZnID0gew0KPiA+ICsJCS5idXNfdHlwZSA9IFY0TDJfTUJVU19DU0kyX0RQSFks DQo+ID4gKwl9Ow0KPiA+ICsJdW5zaWduZWQgaW50IGksIGo7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ ICsNCj4gPiArCWlmICghZndub2RlKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4g PiArCWVwID0gZndub2RlX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KGZ3bm9kZSwgTlVMTCk7DQo+ ID4gKwlpZiAoIWVwKQ0KPiA+ICsJCXJldHVybiAtRU5YSU87DQo+ID4gKw0KPiA+ICsJcmV0ID0g djRsMl9md25vZGVfZW5kcG9pbnRfYWxsb2NfcGFyc2UoZXAsICZidXNfY2ZnKTsNCj4gPiArCWZ3 bm9kZV9oYW5kbGVfcHV0KGVwKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsN Cj4gPiArDQo+ID4gKwkvKiBPcHRpb25hbCBpbmRpY2F0aW9uIG9mIG1pcGkgY2xvY2sgbGFuZSBt b2RlICovDQo+ID4gKwlpZiAoYnVzX2NmZy5idXMubWlwaV9jc2kyLmZsYWdzICYgVjRMMl9NQlVT X0NTSTJfTk9OQ09OVElOVU9VU19DTE9DSykNCj4gPiArCQlvdjAyYTEwLT5taXBpX2Nsb2NrX2hz X21vZGVfZW5hYmxlID0gdHJ1ZTsNCj4gPiArDQo+ID4gKwlpZiAoIWJ1c19jZmcubnJfb2ZfbGlu a19mcmVxdWVuY2llcykgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAibm8gbGluayBmcmVxdWVuY2ll cyBkZWZpbmVkIik7DQo+ID4gKwkJcmV0ID0gLUVJTlZBTDsNCj4gPiArCQlnb3RvIGNoZWNrX2h3 Y2ZnX2Vycm9yOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGxpbmtfZnJlcV9tZW51X2l0ZW1zKTsgaSsrKSB7DQo+ID4gKwkJZm9yIChqID0gMDsgaiA8 IGJ1c19jZmcubnJfb2ZfbGlua19mcmVxdWVuY2llczsgaisrKSB7DQo+ID4gKwkJCWlmIChsaW5r X2ZyZXFfbWVudV9pdGVtc1tpXSA9PQ0KPiA+ICsJCQkJYnVzX2NmZy5saW5rX2ZyZXF1ZW5jaWVz W2pdKQ0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlpZiAoaiA9PSBi dXNfY2ZnLm5yX29mX2xpbmtfZnJlcXVlbmNpZXMpIHsNCj4gPiArCQkJZGV2X2VycihkZXYsICJu byBsaW5rIGZyZXF1ZW5jeSAlbGxkIHN1cHBvcnRlZCIsDQo+ID4gKwkJCQlsaW5rX2ZyZXFfbWVu dV9pdGVtc1tpXSk7DQo+ID4gKwkJCXJldCA9IC1FSU5WQUw7DQo+ID4gKwkJCWdvdG8gY2hlY2tf aHdjZmdfZXJyb3I7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArY2hlY2tfaHdjZmdf ZXJyb3I6DQo+ID4gKwl2NGwyX2Z3bm9kZV9lbmRwb2ludF9mcmVlKCZidXNfY2ZnKTsNCj4gPiAr DQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG92MDJh MTBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkNCj4gPiArew0KPiA+ICsJc3RydWN0 IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2Ow0KPiA+ICsJc3RydWN0IG92MDJhMTAgKm92MDJh MTA7DQo+ID4gKwl1bnNpZ25lZCBpbnQgcm90YXRpb247DQo+ID4gKwl1bnNpZ25lZCBpbnQgY2xv Y2tfbGFuZV90eF9zcGVlZDsNCj4gPiArCXVuc2lnbmVkIGludCBpOw0KPiA+ICsJaW50IHJldDsN Cj4gPiArDQo+ID4gKwlvdjAyYTEwID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpvdjAyYTEw KSwgR0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAoIW92MDJhMTApDQo+ID4gKwkJcmV0dXJuIC1FTk9N RU07DQo+ID4gKw0KPiA+ICsJcmV0ID0gb3YwMmExMF9jaGVja19od2NmZyhkZXYsIG92MDJhMTAp Ow0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNoZWNr IEhXIGNvbmZpZ3VyYXRpb246ICVkIiwgcmV0KTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCXY0bDJfaTJjX3N1YmRldl9pbml0KCZvdjAyYTEwLT5zdWJkZXYsIGNs aWVudCwgJm92MDJhMTBfc3ViZGV2X29wcyk7DQo+ID4gKwlvdjAyYTEwLT51cHNpZGVfZG93biA9 IGZhbHNlOw0KPiA+ICsJb3YwMmExMC0+bWlwaV9jbG9ja190eF9zcGVlZF9zZWxlY3RfZW5hYmxl ID0gZmFsc2U7DQo+ID4gKwlvdjAyYTEwLT5mbXQuY29kZSA9IE1FRElBX0JVU19GTVRfU0JHR1Ix MF8xWDEwOw0KPiA+ICsNCj4gPiArCS8qIE9wdGlvbmFsIGluZGljYXRpb24gb2YgcGh5c2ljYWwg cm90YXRpb24gb2Ygc2Vuc29yICovDQo+ID4gKwlyZXQgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91 MzIoZGV2X2Z3bm9kZShkZXYpLCAicm90YXRpb24iLCAmcm90YXRpb24pOw0KPiA+ICsJaWYgKCFy ZXQpIHsNCj4gPiArCQlpZiAocm90YXRpb24gPT0gMTgwKSB7DQo+ID4gKwkJCW92MDJhMTAtPnVw c2lkZV9kb3duID0gdHJ1ZTsNCj4gPiArCQkJb3YwMmExMC0+Zm10LmNvZGUgPSBNRURJQV9CVVNf Rk1UX1NSR0dCMTBfMVgxMDsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogT3B0 aW9uYWwgaW5kaWNhdGlvbiBvZiBtaXBpIFRYIHNwZWVkICovDQo+ID4gKwlyZXQgPSBmd25vZGVf cHJvcGVydHlfcmVhZF91MzIoZGV2X2Z3bm9kZShkZXYpLCAib3Z0aSxtaXBpLXR4LXNwZWVkIiwN Cj4gPiArCQkJCSAgICAgICAmY2xvY2tfbGFuZV90eF9zcGVlZCk7DQo+ID4gKw0KPiA+ICsJaWYg KCFyZXQpIHsNCj4gPiArCQlvdjAyYTEwLT5taXBpX2Nsb2NrX3R4X3NwZWVkX3NlbGVjdF9lbmFi bGUgPSB0cnVlOw0KPiA+ICsJCW92MDJhMTAtPm1pcGlfY2xvY2tfdHhfc3BlZWQgPSBjbG9ja19s YW5lX3R4X3NwZWVkOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIEdldCBzeXN0ZW0gY2xvY2sg KGVjbGspICovDQo+ID4gKwlvdjAyYTEwLT5lY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImVjbGsi KTsNCj4gPiArCWlmIChJU19FUlIob3YwMmExMC0+ZWNsaykpIHsNCj4gPiArCQlyZXQgPSBQVFJf RVJSKG92MDJhMTAtPmVjbGspOw0KPiA+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBl Y2xrICVkXG4iLCByZXQpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJcmV0ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGRldl9md25vZGUoZGV2KSwgImNsb2Nr LWZyZXF1ZW5jeSIsDQo+ID4gKwkJCQkgICAgICAgJm92MDJhMTAtPmVjbGtfZnJlcSk7DQo+ID4g KwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGVjbGsgZnJl cXVlbmN5XG4iKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJl dCA9IGNsa19zZXRfcmF0ZShvdjAyYTEwLT5lY2xrLCBvdjAyYTEwLT5lY2xrX2ZyZXEpOw0KPiA+ ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHNldCBlY2xrIGZy ZXF1ZW5jeSAoMjRNSHopXG4iKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCWlmIChjbGtfZ2V0X3JhdGUob3YwMmExMC0+ZWNsaykgIT0gT1YwMkExMF9FQ0xLX0ZS RVEpIHsNCj4gPiArCQlkZXZfd2FybihkZXYsICJ3cm9uZyBlY2xrIGZyZXF1ZW5jeSAlZCBIeiwg ZXhwZWN0ZWQ6ICVkIEh6XG4iLA0KPiA+ICsJCQkgb3YwMmExMC0+ZWNsa19mcmVxLCBPVjAyQTEw X0VDTEtfRlJFUSk7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJb3YwMmExMC0+cGRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgInBvd2VyZG93biIsIEdQ SU9EX09VVF9ISUdIKTsNCj4gPiArCWlmIChJU19FUlIob3YwMmExMC0+cGRfZ3BpbykpIHsNCj4g PiArCQlyZXQgPSBQVFJfRVJSKG92MDJhMTAtPnBkX2dwaW8pOw0KPiA+ICsJCWRldl9lcnIoZGV2 LCAiZmFpbGVkIHRvIGdldCBwb3dlcmRvd24tZ3Bpb3MgJWRcbiIsIHJldCk7DQo+ID4gKwkJcmV0 dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlvdjAyYTEwLT5uX3JzdF9ncGlvID0gZGV2 bV9ncGlvZF9nZXQoZGV2LCAicmVzZXQiLCBHUElPRF9PVVRfTE9XKTsNCj4gPiArCWlmIChJU19F UlIob3YwMmExMC0+bl9yc3RfZ3BpbykpIHsNCj4gPiArCQlyZXQgPSBQVFJfRVJSKG92MDJhMTAt Pm5fcnN0X2dwaW8pOw0KPiA+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCByZXNldC1n cGlvcyAlZFxuIiwgcmV0KTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCWZvciAoaSA9IDA7IGkgPCBPVjAyQTEwX05VTV9TVVBQTElFUzsgaSsrKQ0KPiA+ICsJCW92 MDJhMTAtPnN1cHBsaWVzW2ldLnN1cHBseSA9IG92MDJhMTBfc3VwcGx5X25hbWVzW2ldOw0KPiA+ ICsNCj4gPiArCXJldCA9IGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0KGRldiwgT1YwMkExMF9OVU1f U1VQUExJRVMsDQo+ID4gKwkJCQkgICAgICBvdjAyYTEwLT5zdXBwbGllcyk7DQo+ID4gKwlpZiAo cmV0KSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHJlZ3VsYXRvcnNcbiIp Ow0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbXV0ZXhfaW5pdCgm b3YwMmExMC0+bXV0ZXgpOw0KPiA+ICsJb3YwMmExMC0+Y3VyX21vZGUgPSAmc3VwcG9ydGVkX21v ZGVzWzBdOw0KPiA+ICsJcmV0ID0gb3YwMmExMF9pbml0aWFsaXplX2NvbnRyb2xzKG92MDJhMTAp Ow0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXRp YWxpemUgY29udHJvbHNcbiIpOw0KPiA+ICsJCWdvdG8gZXJyX2Rlc3Ryb3lfbXV0ZXg7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJb3YwMmExMC0+c3ViZGV2LmZsYWdzIHw9IFY0TDJfU1VCREVWX0ZM X0hBU19ERVZOT0RFOw0KPiA+ICsJb3YwMmExMC0+c3ViZGV2LmVudGl0eS5vcHMgPSAmb3YwMmEx MF9zdWJkZXZfZW50aXR5X29wczsNCj4gPiArCW92MDJhMTAtPnN1YmRldi5lbnRpdHkuZnVuY3Rp b24gPSBNRURJQV9FTlRfRl9DQU1fU0VOU09SOw0KPiA+ICsJb3YwMmExMC0+cGFkLmZsYWdzID0g TUVESUFfUEFEX0ZMX1NPVVJDRTsNCj4gPiArCXJldCA9IG1lZGlhX2VudGl0eV9wYWRzX2luaXQo Jm92MDJhMTAtPnN1YmRldi5lbnRpdHksIDEsICZvdjAyYTEwLT5wYWQpOw0KPiA+ICsJaWYgKHJl dCA8IDApIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0IGVudGl0eSBwYWRz OiAlZCIsIHJldCk7DQo+ID4gKwkJZ290byBlcnJfZnJlZV9oYW5kbGVyOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7DQo+ID4gKwlpZiAoIXBtX3J1bnRpbWVf ZW5hYmxlZChkZXYpKSB7DQo+ID4gKwkJcmV0ID0gb3YwMmExMF9wb3dlcl9vbihkZXYpOw0KPiA+ ICsJCWlmIChyZXQgPCAwKSB7DQo+ID4gKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHBvd2Vy IG9uOiAlZFxuIiwgcmV0KTsNCj4gPiArCQkJZ290byBlcnJfY2xlYW5fZW50aXR5Ow0KPiA+ICsJ CX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSB2NGwyX2FzeW5jX3JlZ2lzdGVyX3N1YmRl digmb3YwMmExMC0+c3ViZGV2KTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGRl diwgImZhaWxlZCB0byByZWdpc3RlciBWNEwyIHN1YmRldjogJWQiLCByZXQpOw0KPiA+ICsJCWdv dG8gZXJyX2NsZWFuX2VudGl0eTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4g PiArDQo+ID4gK2Vycl9jbGVhbl9lbnRpdHk6DQo+ID4gKwltZWRpYV9lbnRpdHlfY2xlYW51cCgm b3YwMmExMC0+c3ViZGV2LmVudGl0eSk7DQo+ID4gK2Vycl9mcmVlX2hhbmRsZXI6DQo+ID4gKwl2 NGwyX2N0cmxfaGFuZGxlcl9mcmVlKG92MDJhMTAtPnN1YmRldi5jdHJsX2hhbmRsZXIpOw0KPiA+ ICtlcnJfZGVzdHJveV9tdXRleDoNCj4gPiArCW11dGV4X2Rlc3Ryb3koJm92MDJhMTAtPm11dGV4 KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IG92MDJhMTBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpDQo+ID4gK3sNCj4g PiArCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsN Cj4gPiArCXN0cnVjdCBvdjAyYTEwICpvdjAyYTEwID0gdG9fb3YwMmExMChzZCk7DQo+ID4gKw0K PiA+ICsJdjRsMl9hc3luY191bnJlZ2lzdGVyX3N1YmRldihzZCk7DQo+ID4gKwltZWRpYV9lbnRp dHlfY2xlYW51cCgmc2QtPmVudGl0eSk7DQo+ID4gKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKHNk LT5jdHJsX2hhbmRsZXIpOw0KPiA+ICsJcG1fcnVudGltZV9kaXNhYmxlKCZjbGllbnQtPmRldik7 DQo+ID4gKwlpZiAoIXBtX3J1bnRpbWVfc3RhdHVzX3N1c3BlbmRlZCgmY2xpZW50LT5kZXYpKQ0K PiA+ICsJCW92MDJhMTBfcG93ZXJfb2ZmKCZjbGllbnQtPmRldik7DQo+ID4gKwlwbV9ydW50aW1l X3NldF9zdXNwZW5kZWQoJmNsaWVudC0+ZGV2KTsNCj4gPiArCW11dGV4X2Rlc3Ryb3koJm92MDJh MTAtPm11dGV4KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3YwMmExMF9vZl9tYXRjaFtdID0gew0K PiA+ICsJeyAuY29tcGF0aWJsZSA9ICJvdnRpLG92MDJhMTAiIH0sDQo+ID4gKwl7fQ0KPiA+ICt9 Ow0KPiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvdjAyYTEwX29mX21hdGNoKTsNCj4gPiAr DQo+ID4gK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBvdjAyYTEwX2kyY19kcml2ZXIgPSB7DQo+ ID4gKwkuZHJpdmVyID0gew0KPiA+ICsJCS5uYW1lID0gIm92MDJhMTAiLA0KPiA+ICsJCS5wbSA9 ICZvdjAyYTEwX3BtX29wcywNCj4gPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBvdjAyYTEwX29mX21h dGNoLA0KPiA+ICsJfSwNCj4gPiArCS5wcm9iZV9uZXcJPSAmb3YwMmExMF9wcm9iZSwNCj4gPiAr CS5yZW1vdmUJCT0gJm92MDJhMTBfcmVtb3ZlLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArbW9kdWxl X2kyY19kcml2ZXIob3YwMmExMF9pMmNfZHJpdmVyKTsNCj4gPiArDQo+ID4gK01PRFVMRV9BVVRI T1IoIkRvbmdjaHVuIFpodSA8ZG9uZ2NodW4uemh1QG1lZGlhdGVrLmNvbT4iKTsNCj4gPiArTU9E VUxFX0RFU0NSSVBUSU9OKCJPbW5pVmlzaW9uIE9WMDJBMTAgc2Vuc29yIGRyaXZlciIpOw0KPiA+ ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7DQo+ID4gKw0KPiANCg0K