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=-16.1 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,MIME_BASE64_TEXT,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_AGENT_GIT 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 573AAC433DF for ; Tue, 13 Oct 2020 13:05:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D911422B47 for ; Tue, 13 Oct 2020 13:05:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="dN2PgxIx" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387605AbgJMNFX (ORCPT ); Tue, 13 Oct 2020 09:05:23 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:37200 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S2387485AbgJMNFW (ORCPT ); Tue, 13 Oct 2020 09:05:22 -0400 X-UUID: 606c2cb803424b6ca8be5264b8de5043-20201013 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=BwY1pHPk0NsxRTe5H7aAvwTb7mu1Ft02rzcKmURWKNA=; b=dN2PgxIxMBwil8gUkl6k4XbrXpY6i2sqqNGdBMavopzOR48GmEfNTtEkX+TJQrFuPhvTasR5W+2SdkoYJMkrMtNjL6vuipM3cAGJt66s4IxZbVO/QL5pS/dzgI0kkf1Isw6Lrt8UwcbnMBOURQzv/B9Gc3fUdno6Sp6uM+923x0=; X-UUID: 606c2cb803424b6ca8be5264b8de5043-20201013 Received: from mtkcas07.mediatek.inc [(172.21.101.84)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.14 Build 0819 with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 319572704; Tue, 13 Oct 2020 21:05:12 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs02n1.mediatek.inc (172.21.101.77) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 13 Oct 2020 21:05:10 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Tue, 13 Oct 2020 21:05:10 +0800 From: Dongchun Zhu To: , , , , , , , , CC: , , , , , , , , Subject: [PATCH v15 2/2] media: i2c: Add OV02A10 image sensor driver Date: Tue, 13 Oct 2020 21:05:03 +0800 Message-ID: <20201013130503.2412-3-dongchun.zhu@mediatek.com> X-Mailer: git-send-email 2.9.2 In-Reply-To: <20201013130503.2412-1-dongchun.zhu@mediatek.com> References: <20201013130503.2412-1-dongchun.zhu@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org QWRkIGEgVjRMMiBzdWItZGV2aWNlIGRyaXZlciBmb3IgT21uaVZpc2lvbiBPVjAyQTEwIGltYWdl IHNlbnNvci4NCg0KUmV2aWV3ZWQtYnk6IEFuZHkgU2hldmNoZW5rbyA8YW5kcml5LnNoZXZjaGVu a29AbGludXguaW50ZWwuY29tPg0KU2lnbmVkLW9mZi1ieTogRG9uZ2NodW4gWmh1IDxkb25nY2h1 bi56aHVAbWVkaWF0ZWsuY29tPg0KLS0tDQogTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgIHwg ICAgMSArDQogZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZyAgIHwgICAxMyArDQogZHJpdmVycy9t ZWRpYS9pMmMvTWFrZWZpbGUgIHwgICAgMSArDQogZHJpdmVycy9tZWRpYS9pMmMvb3YwMmExMC5j IHwgMTA1OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQogNCBm aWxlcyBjaGFuZ2VkLCAxMDczIGluc2VydGlvbnMoKykNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9tZWRpYS9pMmMvb3YwMmExMC5jDQoNCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01B SU5UQUlORVJTDQppbmRleCA0OGFhN2E3Li5jZTdkOGZhIDEwMDY0NA0KLS0tIGEvTUFJTlRBSU5F UlMNCisrKyBiL01BSU5UQUlORVJTDQpAQCAtMTI3MjQsNiArMTI3MjQsNyBAQCBMOglsaW51eC1t ZWRpYUB2Z2VyLmtlcm5lbC5vcmcNCiBTOglNYWludGFpbmVkDQogVDoJZ2l0IGdpdDovL2xpbnV4 dHYub3JnL21lZGlhX3RyZWUuZ2l0DQogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRp bmdzL21lZGlhL2kyYy9vdnRpLG92MDJhMTAueWFtbA0KK0Y6CWRyaXZlcnMvbWVkaWEvaTJjL292 MDJhMTAuYw0KIA0KIE9NTklWSVNJT04gT1YxMzg1OCBTRU5TT1IgRFJJVkVSDQogTToJU2FrYXJp IEFpbHVzIDxzYWthcmkuYWlsdXNAbGludXguaW50ZWwuY29tPg0KZGlmZiAtLWdpdCBhL2RyaXZl cnMvbWVkaWEvaTJjL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2kyYy9LY29uZmlnDQppbmRleCA0 OGFlNjBhLi40ZGE2NjhlIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZw0K KysrIGIvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZw0KQEAgLTgyNSw2ICs4MjUsMTkgQEAgY29u ZmlnIFZJREVPX0lNWDM1NQ0KIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUs IGNob29zZSBNIGhlcmU6IHRoZQ0KIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpbXgzNTUuDQog DQorY29uZmlnIFZJREVPX09WMDJBMTANCisJdHJpc3RhdGUgIk9tbmlWaXNpb24gT1YwMkExMCBz ZW5zb3Igc3VwcG9ydCINCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQw0KKwlzZWxlY3Qg TUVESUFfQ09OVFJPTExFUg0KKwlzZWxlY3QgVklERU9fVjRMMl9TVUJERVZfQVBJDQorCXNlbGVj dCBWNEwyX0ZXTk9ERQ0KKwloZWxwDQorCSAgVGhpcyBpcyBhIFZpZGVvNExpbnV4MiBzZW5zb3Ig ZHJpdmVyIGZvciB0aGUgT21uaVZpc2lvbg0KKwkgIE9WMDJBMTAgY2FtZXJhIHNlbnNvci4NCisN CisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0 aGUNCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgb3YwMmExMC4NCisNCiBjb25maWcgVklERU9f T1YyNjQwDQogCXRyaXN0YXRlICJPbW5pVmlzaW9uIE9WMjY0MCBzZW5zb3Igc3VwcG9ydCINCiAJ ZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEv aTJjL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUNCmluZGV4IGYwYTc3NDcu LmRjMjdlMTQgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL21lZGlhL2kyYy9NYWtlZmlsZQ0KKysrIGIv ZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUNCkBAIC02NCw2ICs2NCw3IEBAIG9iai0kKENPTkZJ R19WSURFT19WUDI3U01QWCkgKz0gdnAyN3NtcHgubw0KIG9iai0kKENPTkZJR19WSURFT19TT05Z X0JURl9NUFgpICs9IHNvbnktYnRmLW1weC5vDQogb2JqLSQoQ09ORklHX1ZJREVPX1VQRDY0MDMx QSkgKz0gdXBkNjQwMzFhLm8NCiBvYmotJChDT05GSUdfVklERU9fVVBENjQwODMpICs9IHVwZDY0 MDgzLm8NCitvYmotJChDT05GSUdfVklERU9fT1YwMkExMCkgKz0gb3YwMmExMC5vDQogb2JqLSQo Q09ORklHX1ZJREVPX09WMjY0MCkgKz0gb3YyNjQwLm8NCiBvYmotJChDT05GSUdfVklERU9fT1Yy NjgwKSArPSBvdjI2ODAubw0KIG9iai0kKENPTkZJR19WSURFT19PVjI2ODUpICs9IG92MjY4NS5v DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvb3YwMmExMC5jIGIvZHJpdmVycy9tZWRp YS9pMmMvb3YwMmExMC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uODNh YzgyMQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvb3YwMmExMC5jDQpA QCAtMCwwICsxLDEwNTggQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0K Ky8vIENvcHlyaWdodCAoYykgMjAyMCBNZWRpYVRlayBJbmMuDQorDQorI2luY2x1ZGUgPGxpbnV4 L2Nsay5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZXZp Y2UuaD4NCisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPg0KKyNpbmNsdWRlIDxsaW51 eC9pMmMuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L3Bt X3J1bnRpbWUuaD4NCisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+DQorI2lu Y2x1ZGUgPG1lZGlhL21lZGlhLWVudGl0eS5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWFzeW5j Lmg+DQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRs Mi1md25vZGUuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4NCisNCisjZGVmaW5l IE9WMDJBMTBfSUQJCQkJCTB4MjUwOQ0KKyNkZWZpbmUgT1YwMkExMF9JRF9NQVNLCQkJCQkweGZm ZmYNCisNCisjZGVmaW5lIE9WMDJBMTBfUkVHX0NISVBfSUQJCQkJMHgwMg0KKw0KKy8qIEJpdFsx XSB2ZXJ0aWNhbCB1cHNpZGUgZG93biAqLw0KKy8qIEJpdFswXSBob3Jpem9udGFsIG1pcnJvciAq Lw0KKyNkZWZpbmUgUkVHX01JUlJPUl9GTElQX0NPTlRST0wJCQkJMHgzZg0KKw0KKy8qIE9yaWVu dGF0aW9uICovDQorI2RlZmluZSBSRUdfTUlSUk9SX0ZMSVBfRU5BQkxFCQkJCTB4MDMNCisNCisv KiBCaXRbMjowXSBNSVBJIHRyYW5zbWlzc2lvbiBzcGVlZCBzZWxlY3QgKi8NCisjZGVmaW5lIFRY X1NQRUVEX0FSRUFfU0VMCQkJCTB4YTENCisjZGVmaW5lIE9WMDJBMTBfTUlQSV9UWF9TUEVFRF9E RUZBVUxUCQkJMHgwNA0KKw0KKyNkZWZpbmUgUkVHX1BBR0VfU1dJVENICQkJCQkweGZkDQorI2Rl ZmluZSBSRUdfR0xPQkFMX0VGRkVDVElWRQkJCQkweDAxDQorI2RlZmluZSBSRUdfRU5BQkxFCQkJ CQlCSVQoMCkNCisNCisjZGVmaW5lIFJFR19TQ19DVFJMX01PREUJCQkJMHhhYw0KKyNkZWZpbmUg U0NfQ1RSTF9NT0RFX1NUQU5EQlkJCQkJMHgwMA0KKyNkZWZpbmUgU0NfQ1RSTF9NT0RFX1NUUkVB TUlORwkJCQkweDAxDQorDQorLyogRXhwb3N1cmUgY29udHJvbCAqLw0KKyNkZWZpbmUgT1YwMkEx MF9FWFBfU0hJRlQJCQkJOA0KKyNkZWZpbmUgT1YwMkExMF9SRUdfRVhQT1NVUkVfSAkJCQkweDAz DQorI2RlZmluZSBPVjAyQTEwX1JFR19FWFBPU1VSRV9MCQkJCTB4MDQNCisjZGVmaW5lCU9WMDJB MTBfRVhQT1NVUkVfTUlOCQkJCTQNCisjZGVmaW5lIE9WMDJBMTBfRVhQT1NVUkVfTUFYX01BUkdJ TgkJCTQNCisjZGVmaW5lCU9WMDJBMTBfRVhQT1NVUkVfU1RFUAkJCQkxDQorDQorLyogVmJsYW5r aW5nIGNvbnRyb2wgKi8NCisjZGVmaW5lIE9WMDJBMTBfVlRTX1NISUZUCQkJCTgNCisjZGVmaW5l IE9WMDJBMTBfUkVHX1ZUU19ICQkJCTB4MDUNCisjZGVmaW5lIE9WMDJBMTBfUkVHX1ZUU19MCQkJ CTB4MDYNCisjZGVmaW5lIE9WMDJBMTBfVlRTX01BWAkJCQkJMHgyMDlmDQorI2RlZmluZSBPVjAy QTEwX0JBU0lDX0xJTkUJCQkJMTIyNA0KKw0KKy8qIEFuYWxvZyBnYWluIGNvbnRyb2wgKi8NCisj ZGVmaW5lIE9WMDJBMTBfUkVHX0dBSU4JCQkJMHgyNA0KKyNkZWZpbmUgT1YwMkExMF9HQUlOX01J TgkJCQkweDEwDQorI2RlZmluZSBPVjAyQTEwX0dBSU5fTUFYCQkJCTB4ZjgNCisjZGVmaW5lIE9W MDJBMTBfR0FJTl9TVEVQCQkJCTB4MDENCisjZGVmaW5lIE9WMDJBMTBfR0FJTl9ERUZBVUxUCQkJ CTB4NDANCisNCisvKiBUZXN0IHBhdHRlcm4gY29udHJvbCAqLw0KKyNkZWZpbmUgT1YwMkExMF9S RUdfVEVTVF9QQVRURVJOCQkJMHhiNg0KKw0KKyNkZWZpbmUgSFpfUEVSX0tIWgkJCQkJMTAwMEwN CisjZGVmaW5lIEhaX1BFUl9NSFoJCQkJCTEwMDAwMDBMDQorI2RlZmluZSBPVjAyQTEwX0xJTktf RlJFUV8zOTBNSFoJCQkoMzkwICogSFpfUEVSX01IWikNCisjZGVmaW5lIE9WMDJBMTBfRUNMS19G UkVRCQkJCSgyNCAqIEhaX1BFUl9NSFopDQorDQorLyogTnVtYmVyIG9mIGxhbmVzIHN1cHBvcnRl ZCBieSB0aGlzIGRyaXZlciAqLw0KKyNkZWZpbmUgT1YwMkExMF9EQVRBX0xBTkVTCQkJCTENCisN CisvKiBCaXRzIHBlciBzYW1wbGUgb2Ygc2Vuc29yIG91dHB1dCAqLw0KKyNkZWZpbmUgT1YwMkEx MF9CSVRTX1BFUl9TQU1QTEUJCQkJMTANCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG92 MDJhMTBfc3VwcGx5X25hbWVzW10gPSB7DQorCSJkb3ZkZCIsCS8qIERpZ2l0YWwgSS9PIHBvd2Vy ICovDQorCSJhdmRkIiwJCS8qIEFuYWxvZyBwb3dlciAqLw0KKwkiZHZkZCIsCQkvKiBEaWdpdGFs IGNvcmUgcG93ZXIgKi8NCit9Ow0KKw0KK3N0cnVjdCBvdjAyYTEwX3JlZyB7DQorCXU4IGFkZHI7 DQorCXU4IHZhbDsNCit9Ow0KKw0KK3N0cnVjdCBvdjAyYTEwX3JlZ19saXN0IHsNCisJdTMyIG51 bV9vZl9yZWdzOw0KKwljb25zdCBzdHJ1Y3Qgb3YwMmExMF9yZWcgKnJlZ3M7DQorfTsNCisNCitz dHJ1Y3Qgb3YwMmExMF9tb2RlIHsNCisJdTMyIHdpZHRoOw0KKwl1MzIgaGVpZ2h0Ow0KKwl1MzIg ZXhwX2RlZjsNCisJdTMyIGh0c19kZWY7DQorCXUzMiB2dHNfZGVmOw0KKwljb25zdCBzdHJ1Y3Qg b3YwMmExMF9yZWdfbGlzdCByZWdfbGlzdDsNCit9Ow0KKw0KK3N0cnVjdCBvdjAyYTEwIHsNCisJ dTMyIGVjbGtfZnJlcTsNCisJLyogSW5kaWNhdGlvbiBvZiBNSVBJIHRyYW5zbWlzc2lvbiBzcGVl ZCBzZWxlY3QgKi8NCisJdTMyIG1pcGlfY2xvY2tfdm9sdGFnZTsNCisJLyogSW5kZXggb2YgbGlu ayBmcmVxdWVuY3kgY29uZmlnIHRvIGJlIHVzZWQgKi8NCisJdTMyIGZyZXFfaW5kZXg7DQorDQor CXN0cnVjdCBjbGsgKmVjbGs7DQorCXN0cnVjdCBncGlvX2Rlc2MgKnBkX2dwaW87DQorCXN0cnVj dCBncGlvX2Rlc2MgKnJzdF9ncGlvOw0KKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBw bGllc1tBUlJBWV9TSVpFKG92MDJhMTBfc3VwcGx5X25hbWVzKV07DQorDQorCWJvb2wgc3RyZWFt aW5nOw0KKwlib29sIHVwc2lkZV9kb3duOw0KKw0KKwkvKg0KKwkgKiBTZXJpYWxpemUgY29udHJv bCBhY2Nlc3MsIGdldC9zZXQgZm9ybWF0LCBnZXQgc2VsZWN0aW9uDQorCSAqIGFuZCBzdGFydCBz dHJlYW1pbmcuDQorCSAqLw0KKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7DQorCXN0cnVjdCB2NGwyX3N1 YmRldiBzdWJkZXY7DQorCXN0cnVjdCBtZWRpYV9wYWQgcGFkOw0KKwlzdHJ1Y3QgdjRsMl9tYnVz X2ZyYW1lZm10IGZtdDsNCisJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGN0cmxfaGFuZGxlcjsN CisJc3RydWN0IHY0bDJfY3RybCAqZXhwb3N1cmU7DQorDQorCWNvbnN0IHN0cnVjdCBvdjAyYTEw X21vZGUgKmN1cl9tb2RlOw0KK307DQorDQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgb3YwMmExMCAq dG9fb3YwMmExMChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQ0KK3sNCisJcmV0dXJuIGNvbnRhaW5l cl9vZihzZCwgc3RydWN0IG92MDJhMTAsIHN1YmRldik7DQorfQ0KKw0KKy8qDQorICogZWNsayAy NE1oeg0KKyAqIHBjbGsgMzlNaHoNCisgKiBsaW5lbGVuZ3RoIDkzNCgweDNhNikNCisgKiBmcmFt ZWxlbmd0aCAxMzkwKDB4NTZlKQ0KKyAqIGdyYWJ3aW5kb3dfd2lkdGggMTYwMA0KKyAqIGdyYWJ3 aW5kb3dfaGVpZ2h0IDEyMDANCisgKiBtYXhfZnJhbWVyYXRlIDMwZnBzDQorICogbWlwaV9kYXRh cmF0ZSBwZXIgbGFuZSA3ODBNYnBzDQorICovDQorc3RhdGljIGNvbnN0IHN0cnVjdCBvdjAyYTEw X3JlZyBvdjAyYTEwXzE2MDB4MTIwMF9yZWdzW10gPSB7DQorCXsweGZkLCAweDAxfSwNCisJezB4 YWMsIDB4MDB9LA0KKwl7MHhmZCwgMHgwMH0sDQorCXsweDJmLCAweDI5fSwNCisJezB4MzQsIDB4 MDB9LA0KKwl7MHgzNSwgMHgyMX0sDQorCXsweDMwLCAweDE1fSwNCisJezB4MzMsIDB4MDF9LA0K Kwl7MHhmZCwgMHgwMX0sDQorCXsweDQ0LCAweDAwfSwNCisJezB4MmEsIDB4NGN9LA0KKwl7MHgy YiwgMHgxZX0sDQorCXsweDJjLCAweDYwfSwNCisJezB4MjUsIDB4MTF9LA0KKwl7MHgwMywgMHgw MX0sDQorCXsweDA0LCAweGFlfSwNCisJezB4MDksIDB4MDB9LA0KKwl7MHgwYSwgMHgwMn0sDQor CXsweDA2LCAweGE2fSwNCisJezB4MzEsIDB4MDB9LA0KKwl7MHgyNCwgMHg0MH0sDQorCXsweDAx LCAweDAxfSwNCisJezB4ZmIsIDB4NzN9LA0KKwl7MHhmZCwgMHgwMX0sDQorCXsweDE2LCAweDA0 fSwNCisJezB4MWMsIDB4MDl9LA0KKwl7MHgyMSwgMHg0Mn0sDQorCXsweDEyLCAweDA0fSwNCisJ ezB4MTMsIDB4MTB9LA0KKwl7MHgxMSwgMHg0MH0sDQorCXsweDMzLCAweDgxfSwNCisJezB4ZDAs IDB4MDB9LA0KKwl7MHhkMSwgMHgwMX0sDQorCXsweGQyLCAweDAwfSwNCisJezB4NTAsIDB4MTB9 LA0KKwl7MHg1MSwgMHgyM30sDQorCXsweDUyLCAweDIwfSwNCisJezB4NTMsIDB4MTB9LA0KKwl7 MHg1NCwgMHgwMn0sDQorCXsweDU1LCAweDIwfSwNCisJezB4NTYsIDB4MDJ9LA0KKwl7MHg1OCwg MHg0OH0sDQorCXsweDVkLCAweDE1fSwNCisJezB4NWUsIDB4MDV9LA0KKwl7MHg2NiwgMHg2Nn0s DQorCXsweDY4LCAweDY4fSwNCisJezB4NmIsIDB4MDB9LA0KKwl7MHg2YywgMHgwMH0sDQorCXsw eDZmLCAweDQwfSwNCisJezB4NzAsIDB4NDB9LA0KKwl7MHg3MSwgMHgwYX0sDQorCXsweDcyLCAw eGYwfSwNCisJezB4NzMsIDB4MTB9LA0KKwl7MHg3NSwgMHg4MH0sDQorCXsweDc2LCAweDEwfSwN CisJezB4ODQsIDB4MDB9LA0KKwl7MHg4NSwgMHgxMH0sDQorCXsweDg2LCAweDEwfSwNCisJezB4 ODcsIDB4MDB9LA0KKwl7MHg4YSwgMHgyMn0sDQorCXsweDhiLCAweDIyfSwNCisJezB4MTksIDB4 ZjF9LA0KKwl7MHgyOSwgMHgwMX0sDQorCXsweGZkLCAweDAxfSwNCisJezB4OWQsIDB4MTZ9LA0K Kwl7MHhhMCwgMHgyOX0sDQorCXsweGExLCAweDA0fSwNCisJezB4YWQsIDB4NjJ9LA0KKwl7MHhh ZSwgMHgwMH0sDQorCXsweGFmLCAweDg1fSwNCisJezB4YjEsIDB4MDF9LA0KKwl7MHg4ZSwgMHgw Nn0sDQorCXsweDhmLCAweDQwfSwNCisJezB4OTAsIDB4MDR9LA0KKwl7MHg5MSwgMHhiMH0sDQor CXsweDQ1LCAweDAxfSwNCisJezB4NDYsIDB4MDB9LA0KKwl7MHg0NywgMHg2Y30sDQorCXsweDQ4 LCAweDAzfSwNCisJezB4NDksIDB4OGJ9LA0KKwl7MHg0YSwgMHgwMH0sDQorCXsweDRiLCAweDA3 fSwNCisJezB4NGMsIDB4MDR9LA0KKwl7MHg0ZCwgMHhiN30sDQorCXsweGYwLCAweDQwfSwNCisJ ezB4ZjEsIDB4NDB9LA0KKwl7MHhmMiwgMHg0MH0sDQorCXsweGYzLCAweDQwfSwNCisJezB4M2Ys IDB4MDB9LA0KKwl7MHhmZCwgMHgwMX0sDQorCXsweDA1LCAweDAwfSwNCisJezB4MDYsIDB4YTZ9 LA0KKwl7MHhmZCwgMHgwMX0sDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG92 MDJhMTBfdGVzdF9wYXR0ZXJuX21lbnVbXSA9IHsNCisJIkRpc2FibGVkIiwNCisJIkVpZ2h0IFZl cnRpY2FsIENvbG91ciBCYXJzIiwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzNjQgbGlua19mcmVx X21lbnVfaXRlbXNbXSA9IHsNCisJT1YwMkExMF9MSU5LX0ZSRVFfMzkwTUhaLA0KK307DQorDQor c3RhdGljIHU2NCB0b19waXhlbF9yYXRlKHUzMiBmX2luZGV4KQ0KK3sNCisJdTY0IHBpeGVsX3Jh dGUgPSBsaW5rX2ZyZXFfbWVudV9pdGVtc1tmX2luZGV4XSAqIDIgKiBPVjAyQTEwX0RBVEFfTEFO RVM7DQorDQorCWRvX2RpdihwaXhlbF9yYXRlLCBPVjAyQTEwX0JJVFNfUEVSX1NBTVBMRSk7DQor DQorCXJldHVybiBwaXhlbF9yYXRlOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG92MDJh MTBfbW9kZSBzdXBwb3J0ZWRfbW9kZXNbXSA9IHsNCisJew0KKwkJLndpZHRoID0gMTYwMCwNCisJ CS5oZWlnaHQgPSAxMjAwLA0KKwkJLmV4cF9kZWYgPSAweDAxYWUsDQorCQkuaHRzX2RlZiA9IDB4 MDNhNiwNCisJCS52dHNfZGVmID0gMHgwNTZlLA0KKwkJLnJlZ19saXN0ID0gew0KKwkJCS5udW1f b2ZfcmVncyA9IEFSUkFZX1NJWkUob3YwMmExMF8xNjAweDEyMDBfcmVncyksDQorCQkJLnJlZ3Mg PSBvdjAyYTEwXzE2MDB4MTIwMF9yZWdzLA0KKwkJfSwNCisJfSwNCit9Ow0KKw0KK3N0YXRpYyBp bnQgb3YwMmExMF93cml0ZV9hcnJheShzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCwNCisJCQkgICAg ICAgY29uc3Qgc3RydWN0IG92MDJhMTBfcmVnX2xpc3QgKnJfbGlzdCkNCit7DQorCXN0cnVjdCBp MmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZvdjAyYTEwLT5zdWJkZXYp Ow0KKwl1bnNpZ25lZCBpbnQgaTsNCisJaW50IHJldDsNCisNCisJZm9yIChpID0gMDsgaSA8IHJf bGlzdC0+bnVtX29mX3JlZ3M7IGkrKykgew0KKwkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVf ZGF0YShjbGllbnQsIHJfbGlzdC0+cmVnc1tpXS5hZGRyLA0KKwkJCQkJCXJfbGlzdC0+cmVnc1tp XS52YWwpOw0KKwkJaWYgKHJldCA8IDApDQorCQkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlyZXR1 cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgb3YwMmExMF9maWxsX2ZtdChjb25zdCBzdHJ1Y3Qg b3YwMmExMF9tb2RlICptb2RlLA0KKwkJCSAgICAgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAq Zm10KQ0KK3sNCisJZm10LT53aWR0aCA9IG1vZGUtPndpZHRoOw0KKwlmbXQtPmhlaWdodCA9IG1v ZGUtPmhlaWdodDsNCisJZm10LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsNCit9DQorDQorc3Rh dGljIGludCBvdjAyYTEwX3NldF9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCisJCQkgICBz dHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnLA0KKwkJCSAgIHN0cnVjdCB2NGwyX3N1 YmRldl9mb3JtYXQgKmZtdCkNCit7DQorCXN0cnVjdCBvdjAyYTEwICpvdjAyYTEwID0gdG9fb3Yw MmExMChzZCk7DQorCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1idXNfZm10ID0gJmZtdC0+ Zm9ybWF0Ow0KKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmcmFtZV9mbXQ7DQorCWludCBy ZXQgPSAwOw0KKw0KKwltdXRleF9sb2NrKCZvdjAyYTEwLT5tdXRleCk7DQorDQorCWlmIChvdjAy YTEwLT5zdHJlYW1pbmcgJiYgZm10LT53aGljaCA9PSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZF KSB7DQorCQlyZXQgPSAtRUJVU1k7DQorCQlnb3RvIG91dF91bmxvY2s7DQorCX0NCisNCisJLyog T25seSBvbmUgc2Vuc29yIG1vZGUgc3VwcG9ydGVkICovDQorCW1idXNfZm10LT5jb2RlID0gb3Yw MmExMC0+Zm10LmNvZGU7DQorCW92MDJhMTBfZmlsbF9mbXQob3YwMmExMC0+Y3VyX21vZGUsIG1i dXNfZm10KTsNCisNCisJaWYgKGZtdC0+d2hpY2ggPT0gVjRMMl9TVUJERVZfRk9STUFUX1RSWSkN CisJCWZyYW1lX2ZtdCA9IHY0bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KHNkLCBjZmcsIDApOw0K KwllbHNlDQorCQlmcmFtZV9mbXQgPSAmb3YwMmExMC0+Zm10Ow0KKw0KKwkqZnJhbWVfZm10ID0g Km1idXNfZm10Ow0KKw0KK291dF91bmxvY2s6DQorCW11dGV4X3VubG9jaygmb3YwMmExMC0+bXV0 ZXgpOw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IG92MDJhMTBfZ2V0X2ZtdChz dHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KKwkJCSAgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29u ZmlnICpjZmcsDQorCQkJICAgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm10KQ0KK3sNCisJ c3RydWN0IG92MDJhMTAgKm92MDJhMTAgPSB0b19vdjAyYTEwKHNkKTsNCisJc3RydWN0IHY0bDJf bWJ1c19mcmFtZWZtdCAqbWJ1c19mbXQgPSAmZm10LT5mb3JtYXQ7DQorDQorCW11dGV4X2xvY2so Jm92MDJhMTAtPm11dGV4KTsNCisNCisJaWYgKGZtdC0+d2hpY2ggPT0gVjRMMl9TVUJERVZfRk9S TUFUX1RSWSkgew0KKwkJZm10LT5mb3JtYXQgPSAqdjRsMl9zdWJkZXZfZ2V0X3RyeV9mb3JtYXQo c2QsIGNmZywgZm10LT5wYWQpOw0KKwl9IGVsc2Ugew0KKwkJZm10LT5mb3JtYXQgPSBvdjAyYTEw LT5mbXQ7DQorCQltYnVzX2ZtdC0+Y29kZSA9IG92MDJhMTAtPmZtdC5jb2RlOw0KKwkJb3YwMmEx MF9maWxsX2ZtdChvdjAyYTEwLT5jdXJfbW9kZSwgbWJ1c19mbXQpOw0KKwl9DQorDQorCW11dGV4 X3VubG9jaygmb3YwMmExMC0+bXV0ZXgpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGlj IGludCBvdjAyYTEwX2VudW1fbWJ1c19jb2RlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQorCQkJ CSAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZywNCisJCQkJICBzdHJ1Y3QgdjRs Ml9zdWJkZXZfbWJ1c19jb2RlX2VudW0gKmNvZGUpDQorew0KKwlzdHJ1Y3Qgb3YwMmExMCAqb3Yw MmExMCA9IHRvX292MDJhMTAoc2QpOw0KKw0KKwlpZiAoY29kZS0+aW5kZXggIT0gMCkNCisJCXJl dHVybiAtRUlOVkFMOw0KKw0KKwljb2RlLT5jb2RlID0gb3YwMmExMC0+Zm10LmNvZGU7DQorDQor CXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IG92MDJhMTBfZW51bV9mcmFtZV9zaXplcyhz dHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KKwkJCQkgICAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9j b25maWcgKmNmZywNCisJCQkJICAgIHN0cnVjdCB2NGwyX3N1YmRldl9mcmFtZV9zaXplX2VudW0g KmZzZSkNCit7DQorCWlmIChmc2UtPmluZGV4ID49IEFSUkFZX1NJWkUoc3VwcG9ydGVkX21vZGVz KSkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlmc2UtPm1pbl93aWR0aCAgPSBzdXBwb3J0ZWRf bW9kZXNbZnNlLT5pbmRleF0ud2lkdGg7DQorCWZzZS0+bWF4X3dpZHRoICA9IHN1cHBvcnRlZF9t b2Rlc1tmc2UtPmluZGV4XS53aWR0aDsNCisJZnNlLT5tYXhfaGVpZ2h0ID0gc3VwcG9ydGVkX21v ZGVzW2ZzZS0+aW5kZXhdLmhlaWdodDsNCisJZnNlLT5taW5faGVpZ2h0ID0gc3VwcG9ydGVkX21v ZGVzW2ZzZS0+aW5kZXhdLmhlaWdodDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBp bnQgb3YwMmExMF9jaGVja19zZW5zb3JfaWQoc3RydWN0IG92MDJhMTAgKm92MDJhMTApDQorew0K KwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3YwMmEx MC0+c3ViZGV2KTsNCisJdTE2IGNoaXBfaWQ7DQorCWludCByZXQ7DQorDQorCS8qIFZhbGlkYXRl IHRoZSBjaGlwIElEICovDQorCXJldCA9IGkyY19zbWJ1c19yZWFkX3dvcmRfc3dhcHBlZChjbGll bnQsIE9WMDJBMTBfUkVHX0NISVBfSUQpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7 DQorDQorCWNoaXBfaWQgPSBsZTE2X3RvX2NwdShyZXQpOw0KKw0KKwlpZiAoKGNoaXBfaWQgJiBP VjAyQTEwX0lEX01BU0spICE9IE9WMDJBMTBfSUQpIHsNCisJCWRldl9lcnIoJmNsaWVudC0+ZGV2 LCAidW5leHBlY3RlZCBzZW5zb3IgaWQoMHglMDR4KVxuIiwgY2hpcF9pZCk7DQorCQlyZXR1cm4g LUVJTlZBTDsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBvdjAyYTEw X3Bvd2VyX29uKHN0cnVjdCBkZXZpY2UgKmRldikNCit7DQorCXN0cnVjdCBpMmNfY2xpZW50ICpj bGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7DQorCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBp MmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsNCisJc3RydWN0IG92MDJhMTAgKm92MDJhMTAgPSB0 b19vdjAyYTEwKHNkKTsNCisJaW50IHJldDsNCisNCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVw KG92MDJhMTAtPnJzdF9ncGlvLCAxKTsNCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG92MDJh MTAtPnBkX2dwaW8sIDEpOw0KKw0KKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUob3YwMmExMC0+ ZWNsayk7DQorCWlmIChyZXQgPCAwKSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFi bGUgZWNsa1xuIik7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJldCA9IHJlZ3VsYXRvcl9i dWxrX2VuYWJsZShBUlJBWV9TSVpFKG92MDJhMTBfc3VwcGx5X25hbWVzKSwNCisJCQkJICAgIG92 MDJhMTAtPnN1cHBsaWVzKTsNCisJaWYgKHJldCA8IDApIHsNCisJCWRldl9lcnIoZGV2LCAiZmFp bGVkIHRvIGVuYWJsZSByZWd1bGF0b3JzXG4iKTsNCisJCWdvdG8gZGlzYWJsZV9jbGs7DQorCX0N CisJdXNsZWVwX3JhbmdlKDUwMDAsIDYwMDApOw0KKw0KKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xl ZXAob3YwMmExMC0+cGRfZ3BpbywgMCk7DQorCXVzbGVlcF9yYW5nZSg1MDAwLCA2MDAwKTsNCisN CisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG92MDJhMTAtPnJzdF9ncGlvLCAwKTsNCisJdXNs ZWVwX3JhbmdlKDUwMDAsIDYwMDApOw0KKw0KKwlyZXQgPSBvdjAyYTEwX2NoZWNrX3NlbnNvcl9p ZChvdjAyYTEwKTsNCisJaWYgKHJldCkNCisJCWdvdG8gZGlzYWJsZV9yZWd1bGF0b3I7DQorDQor CXJldHVybiAwOw0KKw0KK2Rpc2FibGVfcmVndWxhdG9yOg0KKwlyZWd1bGF0b3JfYnVsa19kaXNh YmxlKEFSUkFZX1NJWkUob3YwMmExMF9zdXBwbHlfbmFtZXMpLA0KKwkJCSAgICAgICBvdjAyYTEw LT5zdXBwbGllcyk7DQorZGlzYWJsZV9jbGs6DQorCWNsa19kaXNhYmxlX3VucHJlcGFyZShvdjAy YTEwLT5lY2xrKTsNCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCBvdjAyYTEw X3Bvd2VyX29mZihzdHJ1Y3QgZGV2aWNlICpkZXYpDQorew0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAq Y2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOw0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0g aTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7DQorCXN0cnVjdCBvdjAyYTEwICpvdjAyYTEwID0g dG9fb3YwMmExMChzZCk7DQorDQorCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChvdjAyYTEwLT5y c3RfZ3BpbywgMSk7DQorCWNsa19kaXNhYmxlX3VucHJlcGFyZShvdjAyYTEwLT5lY2xrKTsNCisJ Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG92MDJhMTAtPnBkX2dwaW8sIDEpOw0KKwlyZWd1bGF0 b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUob3YwMmExMF9zdXBwbHlfbmFtZXMpLA0KKwkJCSAg ICAgICBvdjAyYTEwLT5zdXBwbGllcyk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMg aW50IF9fb3YwMmExMF9zdGFydF9zdHJlYW0oc3RydWN0IG92MDJhMTAgKm92MDJhMTApDQorew0K KwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3YwMmEx MC0+c3ViZGV2KTsNCisJY29uc3Qgc3RydWN0IG92MDJhMTBfcmVnX2xpc3QgKnJlZ19saXN0Ow0K KwlpbnQgcmV0Ow0KKw0KKwkvKiBBcHBseSBkZWZhdWx0IHZhbHVlcyBvZiBjdXJyZW50IG1vZGUg Ki8NCisJcmVnX2xpc3QgPSAmb3YwMmExMC0+Y3VyX21vZGUtPnJlZ19saXN0Ow0KKwlyZXQgPSBv djAyYTEwX3dyaXRlX2FycmF5KG92MDJhMTAsIHJlZ19saXN0KTsNCisJaWYgKHJldCkNCisJCXJl dHVybiByZXQ7DQorDQorCS8qIEFwcGx5IGN1c3RvbWl6ZWQgdmFsdWVzIGZyb20gdXNlciAqLw0K KwlyZXQgPSBfX3Y0bDJfY3RybF9oYW5kbGVyX3NldHVwKG92MDJhMTAtPnN1YmRldi5jdHJsX2hh bmRsZXIpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJLyogU2V0IG9yaWVudGF0 aW9uIHRvIDE4MCBkZWdyZWUgKi8NCisJaWYgKG92MDJhMTAtPnVwc2lkZV9kb3duKSB7DQorCQly ZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX01JUlJPUl9GTElQX0NP TlRST0wsDQorCQkJCQkJUkVHX01JUlJPUl9GTElQX0VOQUJMRSk7DQorCQlpZiAocmV0KSB7DQor CQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gc2V0IG9yaWVudGF0aW9uXG4iKTsN CisJCQlyZXR1cm4gcmV0Ow0KKwkJfQ0KKwkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0 YShjbGllbnQsIFJFR19HTE9CQUxfRUZGRUNUSVZFLA0KKwkJCQkJCVJFR19FTkFCTEUpOw0KKwkJ aWYgKHJldCA8IDApDQorCQkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwkvKiBTZXQgTUlQSSBUWCBz cGVlZCBhY2NvcmRpbmcgdG8gRFQgcHJvcGVydHkgKi8NCisJaWYgKG92MDJhMTAtPm1pcGlfY2xv Y2tfdm9sdGFnZSAhPSBPVjAyQTEwX01JUElfVFhfU1BFRURfREVGQVVMVCkgew0KKwkJcmV0ID0g aTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFRYX1NQRUVEX0FSRUFfU0VMLA0KKwkJ CQkJCW92MDJhMTAtPm1pcGlfY2xvY2tfdm9sdGFnZSk7DQorCQlpZiAocmV0IDwgMCkNCisJCQly ZXR1cm4gcmV0Ow0KKwl9DQorDQorCS8qIFNldCBzdHJlYW0gb24gcmVnaXN0ZXIgKi8NCisJcmV0 dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBSRUdfU0NfQ1RSTF9NT0RFLA0K KwkJCQkJIFNDX0NUUkxfTU9ERV9TVFJFQU1JTkcpOw0KK30NCisNCitzdGF0aWMgaW50IF9fb3Yw MmExMF9zdG9wX3N0cmVhbShzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCkNCit7DQorCXN0cnVjdCBp MmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZvdjAyYTEwLT5zdWJkZXYp Ow0KKw0KKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFJFR19TQ19D VFJMX01PREUsDQorCQkJCQkgU0NfQ1RSTF9NT0RFX1NUQU5EQlkpOw0KK30NCisNCitzdGF0aWMg aW50IG92MDJhMTBfZW50aXR5X2luaXRfY2ZnKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQorCQkJ CSAgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcpDQorew0KKwlzdHJ1Y3QgdjRs Ml9zdWJkZXZfZm9ybWF0IGZtdCA9IHsNCisJCS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9U UlksDQorCQkuZm9ybWF0ID0gew0KKwkJCS53aWR0aCA9IDE2MDAsDQorCQkJLmhlaWdodCA9IDEy MDAsDQorCQl9DQorCX07DQorDQorCW92MDJhMTBfc2V0X2ZtdChzZCwgY2ZnLCAmZm10KTsNCisN CisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9zX3N0cmVhbShzdHJ1Y3Qg djRsMl9zdWJkZXYgKnNkLCBpbnQgb24pDQorew0KKwlzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCA9 IHRvX292MDJhMTAoc2QpOw0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRf c3ViZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsNCisJaW50IHJldDsNCisNCisJbXV0ZXhfbG9j aygmb3YwMmExMC0+bXV0ZXgpOw0KKw0KKwlpZiAob3YwMmExMC0+c3RyZWFtaW5nID09IG9uKQ0K KwkJZ290byB1bmxvY2tfYW5kX3JldHVybjsNCisNCisJaWYgKG9uKSB7DQorCQlyZXQgPSBwbV9y dW50aW1lX2dldF9zeW5jKCZjbGllbnQtPmRldik7DQorCQlpZiAocmV0IDwgMCkgew0KKwkJCXBt X3J1bnRpbWVfcHV0X25vaWRsZSgmY2xpZW50LT5kZXYpOw0KKwkJCWdvdG8gdW5sb2NrX2FuZF9y ZXR1cm47DQorCQl9DQorDQorCQlyZXQgPSBfX292MDJhMTBfc3RhcnRfc3RyZWFtKG92MDJhMTAp Ow0KKwkJaWYgKHJldCkgew0KKwkJCV9fb3YwMmExMF9zdG9wX3N0cmVhbShvdjAyYTEwKTsNCisJ CQlvdjAyYTEwLT5zdHJlYW1pbmcgPSAhb247DQorCQkJZ290byBlcnJfcnBtX3B1dDsNCisJCX0N CisJfSBlbHNlIHsNCisJCV9fb3YwMmExMF9zdG9wX3N0cmVhbShvdjAyYTEwKTsNCisJCXBtX3J1 bnRpbWVfcHV0KCZjbGllbnQtPmRldik7DQorCX0NCisNCisJb3YwMmExMC0+c3RyZWFtaW5nID0g b247DQorCW11dGV4X3VubG9jaygmb3YwMmExMC0+bXV0ZXgpOw0KKw0KKwlyZXR1cm4gMDsNCisN CitlcnJfcnBtX3B1dDoNCisJcG1fcnVudGltZV9wdXQoJmNsaWVudC0+ZGV2KTsNCit1bmxvY2tf YW5kX3JldHVybjoNCisJbXV0ZXhfdW5sb2NrKCZvdjAyYTEwLT5tdXRleCk7DQorDQorCXJldHVy biByZXQ7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBvdjAyYTEwX3Bt X29wcyA9IHsNCisJU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMocG1fcnVudGltZV9mb3JjZV9zdXNw ZW5kLA0KKwkJCQlwbV9ydW50aW1lX2ZvcmNlX3Jlc3VtZSkNCisJU0VUX1JVTlRJTUVfUE1fT1BT KG92MDJhMTBfcG93ZXJfb2ZmLCBvdjAyYTEwX3Bvd2VyX29uLCBOVUxMKQ0KK307DQorDQorLyoN CisgKiBvdjAyYTEwX3NldF9leHBvc3VyZSAtIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHNldHRpbmcg ZXhwb3N1cmUgdGltZQ0KKyAqIEBwcml2OiBQb2ludGVyIHRvIGRldmljZSBzdHJ1Y3R1cmUNCisg KiBAdmFsOiBWYXJpYWJsZSBmb3IgZXhwb3N1cmUgdGltZSwgaW4gdGhlIHVuaXQgb2YgbWljcm8t c2Vjb25kDQorICoNCisgKiBTZXQgZXhwb3N1cmUgdGltZSBiYXNlZCBvbiBpbnB1dCB2YWx1ZS4N CisgKg0KKyAqIFJldHVybjogMCBvbiBzdWNjZXNzDQorICovDQorc3RhdGljIGludCBvdjAyYTEw X3NldF9leHBvc3VyZShzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCwgaW50IHZhbCkNCit7DQorCXN0 cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZvdjAyYTEwLT5z dWJkZXYpOw0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRh KGNsaWVudCwgUkVHX1BBR0VfU1dJVENILCBSRUdfRU5BQkxFKTsNCisJaWYgKHJldCA8IDApDQor CQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVu dCwgT1YwMkExMF9SRUdfRVhQT1NVUkVfSCwNCisJCQkJCXZhbCA+PiBPVjAyQTEwX0VYUF9TSElG VCk7DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0ID0gaTJjX3NtYnVz X3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIE9WMDJBMTBfUkVHX0VYUE9TVVJFX0wsIHZhbCk7DQor CWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0dXJuIGkyY19zbWJ1c193cml0 ZV9ieXRlX2RhdGEoY2xpZW50LCBSRUdfR0xPQkFMX0VGRkVDVElWRSwNCisJCQkJCSBSRUdfRU5B QkxFKTsNCit9DQorDQorc3RhdGljIGludCBvdjAyYTEwX3NldF9nYWluKHN0cnVjdCBvdjAyYTEw ICpvdjAyYTEwLCBpbnQgdmFsKQ0KK3sNCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0 bDJfZ2V0X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQorCWludCByZXQ7DQorDQorCXJl dCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBSRUdfUEFHRV9TV0lUQ0gsIFJF R19FTkFCTEUpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldCA9IGky Y19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBPVjAyQTEwX1JFR19HQUlOLCB2YWwpOw0K KwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldHVybiBpMmNfc21idXNfd3Jp dGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX0dMT0JBTF9FRkZFQ1RJVkUsDQorCQkJCQkgUkVHX0VO QUJMRSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9zZXRfdmJsYW5rKHN0cnVjdCBvdjAy YTEwICpvdjAyYTEwLCBpbnQgdmFsKQ0KK3sNCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9 IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQorCXUzMiB2dHMgPSB2YWwg KyBvdjAyYTEwLT5jdXJfbW9kZS0+aGVpZ2h0IC0gT1YwMkExMF9CQVNJQ19MSU5FOw0KKwlpbnQg cmV0Ow0KKw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX1BB R0VfU1dJVENILCBSRUdfRU5BQkxFKTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0K Kw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgT1YwMkExMF9SRUdf VlRTX0gsDQorCQkJCQl2dHMgPj4gT1YwMkExMF9WVFNfU0hJRlQpOw0KKwlpZiAocmV0IDwgMCkN CisJCXJldHVybiByZXQ7DQorDQorCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xp ZW50LCBPVjAyQTEwX1JFR19WVFNfTCwgdnRzKTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4g cmV0Ow0KKw0KKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFJFR19H TE9CQUxfRUZGRUNUSVZFLA0KKwkJCQkJIFJFR19FTkFCTEUpOw0KK30NCisNCitzdGF0aWMgaW50 IG92MDJhMTBfc2V0X3Rlc3RfcGF0dGVybihzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCwgaW50IHBh dHRlcm4pDQorew0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2 ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsNCisJaW50IHJldDsNCisNCisJcmV0ID0gaTJjX3NtYnVz X3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFJFR19QQUdFX1NXSVRDSCwgUkVHX0VOQUJMRSk7DQor CWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRl X2J5dGVfZGF0YShjbGllbnQsIE9WMDJBMTBfUkVHX1RFU1RfUEFUVEVSTiwNCisJCQkJCXBhdHRl cm4pOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldCA9IGkyY19zbWJ1 c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBSRUdfR0xPQkFMX0VGRkVDVElWRSwNCisJCQkJCVJF R19FTkFCTEUpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldHVybiBp MmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX1NDX0NUUkxfTU9ERSwNCisJCQkJ CSBTQ19DVFJMX01PREVfU1RSRUFNSU5HKTsNCit9DQorDQorc3RhdGljIGludCBvdjAyYTEwX3Nl dF9jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpDQorew0KKwlzdHJ1Y3Qgb3YwMmExMCAqb3Yw MmExMCA9IGNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLA0KKwkJCQkJICAgICAgIHN0cnVjdCBv djAyYTEwLCBjdHJsX2hhbmRsZXIpOw0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRs Ml9nZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsNCisJczY0IG1heF9leHBvOw0KKwlp bnQgcmV0Ow0KKw0KKwkvKiBQcm9wYWdhdGUgY2hhbmdlIG9mIGN1cnJlbnQgY29udHJvbCB0byBh bGwgcmVsYXRlZCBjb250cm9scyAqLw0KKwlpZiAoY3RybC0+aWQgPT0gVjRMMl9DSURfVkJMQU5L KSB7DQorCQkvKiBVcGRhdGUgbWF4IGV4cG9zdXJlIHdoaWxlIG1lZXRpbmcgZXhwZWN0ZWQgdmJs YW5raW5nICovDQorCQltYXhfZXhwbyA9IG92MDJhMTAtPmN1cl9tb2RlLT5oZWlnaHQgKyBjdHJs LT52YWwgLQ0KKwkJCSAgIE9WMDJBMTBfRVhQT1NVUkVfTUFYX01BUkdJTjsNCisJCV9fdjRsMl9j dHJsX21vZGlmeV9yYW5nZShvdjAyYTEwLT5leHBvc3VyZSwNCisJCQkJCSBvdjAyYTEwLT5leHBv c3VyZS0+bWluaW11bSwgbWF4X2V4cG8sDQorCQkJCQkgb3YwMmExMC0+ZXhwb3N1cmUtPnN0ZXAs DQorCQkJCQkgb3YwMmExMC0+ZXhwb3N1cmUtPmRlZmF1bHRfdmFsdWUpOw0KKwl9DQorDQorCS8q IFY0TDIgY29udHJvbHMgdmFsdWVzIHdpbGwgYmUgYXBwbGllZCBvbmx5IHdoZW4gcG93ZXIgaXMg YWxyZWFkeSB1cCAqLw0KKwlpZiAoIXBtX3J1bnRpbWVfZ2V0X2lmX2luX3VzZSgmY2xpZW50LT5k ZXYpKQ0KKwkJcmV0dXJuIDA7DQorDQorCXN3aXRjaCAoY3RybC0+aWQpIHsNCisJY2FzZSBWNEwy X0NJRF9FWFBPU1VSRToNCisJCXJldCA9IG92MDJhMTBfc2V0X2V4cG9zdXJlKG92MDJhMTAsIGN0 cmwtPnZhbCk7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX0NJRF9BTkFMT0dVRV9HQUlOOg0KKwkJ cmV0ID0gb3YwMmExMF9zZXRfZ2FpbihvdjAyYTEwLCBjdHJsLT52YWwpOw0KKwkJYnJlYWs7DQor CWNhc2UgVjRMMl9DSURfVkJMQU5LOg0KKwkJcmV0ID0gb3YwMmExMF9zZXRfdmJsYW5rKG92MDJh MTAsIGN0cmwtPnZhbCk7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX0NJRF9URVNUX1BBVFRFUk46 DQorCQlyZXQgPSBvdjAyYTEwX3NldF90ZXN0X3BhdHRlcm4ob3YwMmExMCwgY3RybC0+dmFsKTsN CisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJcmV0ID0gLUVJTlZBTDsNCisJCWJyZWFrOw0KKwl9 Ow0KKw0KKwlwbV9ydW50aW1lX3B1dCgmY2xpZW50LT5kZXYpOw0KKw0KKwlyZXR1cm4gcmV0Ow0K K30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBvdjAyYTEw X3ZpZGVvX29wcyA9IHsNCisJLnNfc3RyZWFtID0gb3YwMmExMF9zX3N0cmVhbSwNCit9Ow0KKw0K K3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX29wcyBvdjAyYTEwX3BhZF9vcHMg PSB7DQorCS5pbml0X2NmZyA9IG92MDJhMTBfZW50aXR5X2luaXRfY2ZnLA0KKwkuZW51bV9tYnVz X2NvZGUgPSBvdjAyYTEwX2VudW1fbWJ1c19jb2RlLA0KKwkuZW51bV9mcmFtZV9zaXplID0gb3Yw MmExMF9lbnVtX2ZyYW1lX3NpemVzLA0KKwkuZ2V0X2ZtdCA9IG92MDJhMTBfZ2V0X2ZtdCwNCisJ LnNldF9mbXQgPSBvdjAyYTEwX3NldF9mbXQsDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0 IHY0bDJfc3ViZGV2X29wcyBvdjAyYTEwX3N1YmRldl9vcHMgPSB7DQorCS52aWRlbwk9ICZvdjAy YTEwX3ZpZGVvX29wcywNCisJLnBhZAk9ICZvdjAyYTEwX3BhZF9vcHMsDQorfTsNCisNCitzdGF0 aWMgY29uc3Qgc3RydWN0IG1lZGlhX2VudGl0eV9vcGVyYXRpb25zIG92MDJhMTBfc3ViZGV2X2Vu dGl0eV9vcHMgPSB7DQorCS5saW5rX3ZhbGlkYXRlID0gdjRsMl9zdWJkZXZfbGlua192YWxpZGF0 ZSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyBvdjAyYTEwX2N0 cmxfb3BzID0gew0KKwkuc19jdHJsID0gb3YwMmExMF9zZXRfY3RybCwNCit9Ow0KKw0KK3N0YXRp YyBpbnQgb3YwMmExMF9pbml0aWFsaXplX2NvbnRyb2xzKHN0cnVjdCBvdjAyYTEwICpvdjAyYTEw KQ0KK3sNCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEo Jm92MDJhMTAtPnN1YmRldik7DQorCWNvbnN0IHN0cnVjdCBvdjAyYTEwX21vZGUgKm1vZGU7DQor CXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGFuZGxlcjsNCisJc3RydWN0IHY0bDJfY3RybCAq Y3RybDsNCisJczY0IGV4cG9zdXJlX21heDsNCisJczY0IHZibGFua19kZWY7DQorCXM2NCBwaXhl bF9yYXRlOw0KKwlzNjQgaF9ibGFuazsNCisJaW50IHJldDsNCisNCisJaGFuZGxlciA9ICZvdjAy YTEwLT5jdHJsX2hhbmRsZXI7DQorCW1vZGUgPSBvdjAyYTEwLT5jdXJfbW9kZTsNCisJcmV0ID0g djRsMl9jdHJsX2hhbmRsZXJfaW5pdChoYW5kbGVyLCA3KTsNCisJaWYgKHJldCkNCisJCXJldHVy biByZXQ7DQorDQorCWhhbmRsZXItPmxvY2sgPSAmb3YwMmExMC0+bXV0ZXg7DQorDQorCWN0cmwg PSB2NGwyX2N0cmxfbmV3X2ludF9tZW51KGhhbmRsZXIsIE5VTEwsIFY0TDJfQ0lEX0xJTktfRlJF USwgMCwgMCwNCisJCQkJICAgICAgbGlua19mcmVxX21lbnVfaXRlbXMpOw0KKwlpZiAoY3RybCkN CisJCWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWTsNCisNCisJcGl4ZWxf cmF0ZSA9IHRvX3BpeGVsX3JhdGUoMCk7DQorCXY0bDJfY3RybF9uZXdfc3RkKGhhbmRsZXIsIE5V TEwsIFY0TDJfQ0lEX1BJWEVMX1JBVEUsIDAsIHBpeGVsX3JhdGUsIDEsDQorCQkJICBwaXhlbF9y YXRlKTsNCisNCisJaF9ibGFuayA9IG1vZGUtPmh0c19kZWYgLSBtb2RlLT53aWR0aDsNCisJdjRs Ml9jdHJsX25ld19zdGQoaGFuZGxlciwgTlVMTCwgVjRMMl9DSURfSEJMQU5LLCBoX2JsYW5rLCBo X2JsYW5rLCAxLA0KKwkJCSAgaF9ibGFuayk7DQorDQorCXZibGFua19kZWYgPSBtb2RlLT52dHNf ZGVmIC0gbW9kZS0+aGVpZ2h0Ow0KKwl2NGwyX2N0cmxfbmV3X3N0ZChoYW5kbGVyLCAmb3YwMmEx MF9jdHJsX29wcywgVjRMMl9DSURfVkJMQU5LLA0KKwkJCSAgdmJsYW5rX2RlZiwgT1YwMkExMF9W VFNfTUFYIC0gbW9kZS0+aGVpZ2h0LCAxLA0KKwkJCSAgdmJsYW5rX2RlZik7DQorDQorCWV4cG9z dXJlX21heCA9IG1vZGUtPnZ0c19kZWYgLSA0Ow0KKwlvdjAyYTEwLT5leHBvc3VyZSA9IHY0bDJf Y3RybF9uZXdfc3RkKGhhbmRsZXIsICZvdjAyYTEwX2N0cmxfb3BzLA0KKwkJCQkJICAgICAgVjRM Ml9DSURfRVhQT1NVUkUsDQorCQkJCQkgICAgICBPVjAyQTEwX0VYUE9TVVJFX01JTiwNCisJCQkJ CSAgICAgIGV4cG9zdXJlX21heCwNCisJCQkJCSAgICAgIE9WMDJBMTBfRVhQT1NVUkVfU1RFUCwN CisJCQkJCSAgICAgIG1vZGUtPmV4cF9kZWYpOw0KKw0KKwl2NGwyX2N0cmxfbmV3X3N0ZChoYW5k bGVyLCAmb3YwMmExMF9jdHJsX29wcywNCisJCQkgIFY0TDJfQ0lEX0FOQUxPR1VFX0dBSU4sIE9W MDJBMTBfR0FJTl9NSU4sDQorCQkJICBPVjAyQTEwX0dBSU5fTUFYLCBPVjAyQTEwX0dBSU5fU1RF UCwNCisJCQkgIE9WMDJBMTBfR0FJTl9ERUZBVUxUKTsNCisNCisJdjRsMl9jdHJsX25ld19zdGRf bWVudV9pdGVtcyhoYW5kbGVyLCAmb3YwMmExMF9jdHJsX29wcywNCisJCQkJICAgICBWNEwyX0NJ RF9URVNUX1BBVFRFUk4sDQorCQkJCSAgICAgQVJSQVlfU0laRShvdjAyYTEwX3Rlc3RfcGF0dGVy bl9tZW51KSAtIDEsDQorCQkJCSAgICAgMCwgMCwgb3YwMmExMF90ZXN0X3BhdHRlcm5fbWVudSk7 DQorDQorCWlmIChoYW5kbGVyLT5lcnJvcikgew0KKwkJcmV0ID0gaGFuZGxlci0+ZXJyb3I7DQor CQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byBpbml0IGNvbnRyb2xzKCVkKVxuIiwg cmV0KTsNCisJCWdvdG8gZXJyX2ZyZWVfaGFuZGxlcjsNCisJfQ0KKw0KKwlvdjAyYTEwLT5zdWJk ZXYuY3RybF9oYW5kbGVyID0gaGFuZGxlcjsNCisNCisJcmV0dXJuIDA7DQorDQorZXJyX2ZyZWVf aGFuZGxlcjoNCisJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZShoYW5kbGVyKTsNCisNCisJcmV0dXJu IHJldDsNCit9DQorDQorc3RhdGljIGludCBvdjAyYTEwX2NoZWNrX2h3Y2ZnKHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IG92MDJhMTAgKm92MDJhMTApDQorew0KKwlzdHJ1Y3QgZndub2RlX2hh bmRsZSAqZXA7DQorCXN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUgPSBkZXZfZndub2RlKGRl dik7DQorCXN0cnVjdCB2NGwyX2Z3bm9kZV9lbmRwb2ludCBidXNfY2ZnID0gew0KKwkJLmJ1c190 eXBlID0gVjRMMl9NQlVTX0NTSTJfRFBIWSwNCisJfTsNCisJdW5zaWduZWQgaW50IGksIGo7DQor CWludCByZXQ7DQorDQorCWlmICghZndub2RlKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWVw ID0gZndub2RlX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KGZ3bm9kZSwgTlVMTCk7DQorCWlmICgh ZXApDQorCQlyZXR1cm4gLUVOWElPOw0KKw0KKwlyZXQgPSB2NGwyX2Z3bm9kZV9lbmRwb2ludF9h bGxvY19wYXJzZShlcCwgJmJ1c19jZmcpOw0KKwlmd25vZGVfaGFuZGxlX3B1dChlcCk7DQorCWlm IChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShs aW5rX2ZyZXFfbWVudV9pdGVtcyk7IGkrKykgew0KKwkJZm9yIChqID0gMDsgaiA8IGJ1c19jZmcu bnJfb2ZfbGlua19mcmVxdWVuY2llczsgaisrKSB7DQorCQkJaWYgKGxpbmtfZnJlcV9tZW51X2l0 ZW1zW2ldID09DQorCQkJCWJ1c19jZmcubGlua19mcmVxdWVuY2llc1tqXSkgew0KKwkJCQlvdjAy YTEwLT5mcmVxX2luZGV4ID0gaTsNCisJCQkJYnJlYWs7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJaWYg KGogPT0gYnVzX2NmZy5ucl9vZl9saW5rX2ZyZXF1ZW5jaWVzKSB7DQorCQkJZGV2X2VycihkZXYs ICJubyBsaW5rIGZyZXF1ZW5jeSAlbGxkIHN1cHBvcnRlZFxuIiwNCisJCQkJbGlua19mcmVxX21l bnVfaXRlbXNbaV0pOw0KKwkJCXJldCA9IC1FSU5WQUw7DQorCQkJYnJlYWs7DQorCQl9DQorCX0N CisNCisJdjRsMl9md25vZGVfZW5kcG9pbnRfZnJlZSgmYnVzX2NmZyk7DQorDQorCXJldHVybiBy ZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAq Y2xpZW50KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2Ow0KKwlzdHJ1 Y3Qgb3YwMmExMCAqb3YwMmExMDsNCisJdW5zaWduZWQgaW50IGNudDsNCisJdW5zaWduZWQgaW50 IGk7DQorCXVuc2lnbmVkIGludCBudW1fZnJlcV9jbGtfdm9sdDsNCisJdW5zaWduZWQgaW50IHJv dGF0aW9uOw0KKwlpbnQgcmV0Ow0KKw0KKwlvdjAyYTEwID0gZGV2bV9remFsbG9jKGRldiwgc2l6 ZW9mKCpvdjAyYTEwKSwgR0ZQX0tFUk5FTCk7DQorCWlmICghb3YwMmExMCkNCisJCXJldHVybiAt RU5PTUVNOw0KKw0KKwlyZXQgPSBvdjAyYTEwX2NoZWNrX2h3Y2ZnKGRldiwgb3YwMmExMCk7DQor CWlmIChyZXQpDQorCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwNCisJCQkJICAgICAi ZmFpbGVkIHRvIGNoZWNrIEhXIGNvbmZpZ3VyYXRpb25cbiIpOw0KKw0KKwkvKiBJbml0aWFsaXpl IHN1YmRldiAqLw0KKwl2NGwyX2kyY19zdWJkZXZfaW5pdCgmb3YwMmExMC0+c3ViZGV2LCBjbGll bnQsICZvdjAyYTEwX3N1YmRldl9vcHMpOw0KKw0KKwlvdjAyYTEwLT5taXBpX2Nsb2NrX3ZvbHRh Z2UgPSBPVjAyQTEwX01JUElfVFhfU1BFRURfREVGQVVMVDsNCisJb3YwMmExMC0+Zm10LmNvZGUg PSBNRURJQV9CVVNfRk1UX1NCR0dSMTBfMVgxMDsNCisNCisJLyogT3B0aW9uYWwgaW5kaWNhdGlv biBvZiBwaHlzaWNhbCByb3RhdGlvbiBvZiBzZW5zb3IgKi8NCisJcm90YXRpb24gPSAwOw0KKwlm d25vZGVfcHJvcGVydHlfcmVhZF91MzIoZGV2X2Z3bm9kZShkZXYpLCAicm90YXRpb24iLCAmcm90 YXRpb24pOw0KKwlpZiAocm90YXRpb24gPT0gMTgwKSB7DQorCQlvdjAyYTEwLT51cHNpZGVfZG93 biA9IHRydWU7DQorCQlvdjAyYTEwLT5mbXQuY29kZSA9IE1FRElBX0JVU19GTVRfU1JHR0IxMF8x WDEwOw0KKwl9DQorDQorCS8qIE9wdGlvbmFsIGluZGljYXRpb24gb2YgTUlQSSBjbG9jayB2b2x0 YWdlIHVuaXQgKi8NCisJY250ID0gMDsNCisJbnVtX2ZyZXFfY2xrX3ZvbHQgPSAyICogQVJSQVlf U0laRShsaW5rX2ZyZXFfbWVudV9pdGVtcyk7DQorCXJldCA9IGZ3bm9kZV9wcm9wZXJ0eV9jb3Vu dF91MzIoZGV2X2Z3bm9kZShkZXYpLA0KKwkJCQkJIm92dGksbWlwaS1jbG9jay12b2x0YWdlIik7 DQorCWlmIChyZXQgPiAwICYmIHJldCAlIDIgPT0gMCkgew0KKwkJdTMyIGZyZXFfY2xrX3ZvbHRb cmV0XTsNCisNCisJCWZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShkZXZfZndub2RlKGRl diksDQorCQkJCQkgICAgICAgIm92dGksbWlwaS1jbG9jay12b2x0YWdlIiwNCisJCQkJCSAgICAg ICBmcmVxX2Nsa192b2x0LA0KKwkJCQkJICAgICAgIEFSUkFZX1NJWkUoZnJlcV9jbGtfdm9sdCkp Ow0KKw0KKwkJd2hpbGUgKG51bV9mcmVxX2Nsa192b2x0KSB7DQorCQkJdW5zaWduZWQgbG9uZyBm cmVxOw0KKwkJCXVuc2lnbmVkIGxvbmcgdm9sdDsNCisNCisJCQlpZiAoY250ID49IEFSUkFZX1NJ WkUoZnJlcV9jbGtfdm9sdCkpIHsNCisJCQkJZGV2X3dhcm4oZGV2LCAibWlzbWF0Y2hlZCBsaW5r IGZyZXF1ZW5jeVxuIik7DQorCQkJCWJyZWFrOw0KKwkJCX0NCisNCisJCQlmcmVxID0gZnJlcV9j bGtfdm9sdFtjbnQrK10gKiBIWl9QRVJfS0haOw0KKwkJCXZvbHQgPSBmcmVxX2Nsa192b2x0W2Nu dCsrXTsNCisNCisJCQkvKiBHZXQgY2xvY2sgdm9sdGFnZSB1bml0IHZhbHVlIGZyb20gRFQgKi8N CisJCQlpZiAoZnJlcSA9PSBsaW5rX2ZyZXFfbWVudV9pdGVtc1tvdjAyYTEwLT5mcmVxX2luZGV4 XSkgew0KKwkJCQlvdjAyYTEwLT5taXBpX2Nsb2NrX3ZvbHRhZ2UgPSB2b2x0Ow0KKwkJCQlicmVh azsNCisJCQl9DQorDQorCQkJbnVtX2ZyZXFfY2xrX3ZvbHQgLT0gMjsNCisJCX0NCisJfQ0KKw0K KwkvKiBHZXQgc3lzdGVtIGNsb2NrIChlY2xrKSAqLw0KKwlvdjAyYTEwLT5lY2xrID0gZGV2bV9j bGtfZ2V0KGRldiwgImVjbGsiKTsNCisJaWYgKElTX0VSUihvdjAyYTEwLT5lY2xrKSkNCisJCXJl dHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihvdjAyYTEwLT5lY2xrKSwNCisJCQkJICAg ICAiZmFpbGVkIHRvIGdldCBlY2xrXG4iKTsNCisNCisJcmV0ID0gZndub2RlX3Byb3BlcnR5X3Jl YWRfdTMyKGRldl9md25vZGUoZGV2KSwgImNsb2NrLWZyZXF1ZW5jeSIsDQorCQkJCSAgICAgICAm b3YwMmExMC0+ZWNsa19mcmVxKTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gZGV2X2Vycl9w cm9iZShkZXYsIHJldCwNCisJCQkJICAgICAiZmFpbGVkIHRvIGdldCBlY2xrIGZyZXF1ZW5jeVxu Iik7DQorDQorCXJldCA9IGNsa19zZXRfcmF0ZShvdjAyYTEwLT5lY2xrLCBvdjAyYTEwLT5lY2xr X2ZyZXEpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0 LA0KKwkJCQkgICAgICJmYWlsZWQgdG8gc2V0IGVjbGsgZnJlcXVlbmN5ICgyNE1IeilcbiIpOw0K Kw0KKwlpZiAoY2xrX2dldF9yYXRlKG92MDJhMTAtPmVjbGspICE9IE9WMDJBMTBfRUNMS19GUkVR KQ0KKwkJZGV2X3dhcm4oZGV2LCAiZWNsayBtaXNtYXRjaGVkLCBtb2RlIGlzIGJhc2VkIG9uIDI0 TUh6XG4iKTsNCisNCisJb3YwMmExMC0+cGRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgInBv d2VyZG93biIsIEdQSU9EX09VVF9ISUdIKTsNCisJaWYgKElTX0VSUihvdjAyYTEwLT5wZF9ncGlv KSkNCisJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihvdjAyYTEwLT5wZF9ncGlv KSwNCisJCQkJICAgICAiZmFpbGVkIHRvIGdldCBwb3dlcmRvd24tZ3Bpb3NcbiIpOw0KKw0KKwlv djAyYTEwLT5yc3RfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgInJlc2V0IiwgR1BJT0RfT1VU X0hJR0gpOw0KKwlpZiAoSVNfRVJSKG92MDJhMTAtPnJzdF9ncGlvKSkNCisJCXJldHVybiBkZXZf ZXJyX3Byb2JlKGRldiwgUFRSX0VSUihvdjAyYTEwLT5yc3RfZ3BpbyksDQorCQkJCSAgICAgImZh aWxlZCB0byBnZXQgcmVzZXQtZ3Bpb3NcbiIpOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShvdjAyYTEwX3N1cHBseV9uYW1lcyk7IGkrKykNCisJCW92MDJhMTAtPnN1cHBsaWVzW2ld LnN1cHBseSA9IG92MDJhMTBfc3VwcGx5X25hbWVzW2ldOw0KKw0KKwlyZXQgPSBkZXZtX3JlZ3Vs YXRvcl9idWxrX2dldChkZXYsIEFSUkFZX1NJWkUob3YwMmExMF9zdXBwbHlfbmFtZXMpLA0KKwkJ CQkgICAgICBvdjAyYTEwLT5zdXBwbGllcyk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gZGV2X2Vy cl9wcm9iZShkZXYsIHJldCwgImZhaWxlZCB0byBnZXQgcmVndWxhdG9yc1xuIik7DQorDQorCW11 dGV4X2luaXQoJm92MDJhMTAtPm11dGV4KTsNCisNCisJLyogU2V0IGRlZmF1bHQgbW9kZSAqLw0K KwlvdjAyYTEwLT5jdXJfbW9kZSA9ICZzdXBwb3J0ZWRfbW9kZXNbMF07DQorDQorCXJldCA9IG92 MDJhMTBfaW5pdGlhbGl6ZV9jb250cm9scyhvdjAyYTEwKTsNCisJaWYgKHJldCkgew0KKwkJZGV2 X2Vycl9wcm9iZShkZXYsIHJldCwgImZhaWxlZCB0byBpbml0aWFsaXplIGNvbnRyb2xzXG4iKTsN CisJCWdvdG8gZXJyX2Rlc3Ryb3lfbXV0ZXg7DQorCX0NCisNCisJLyogSW5pdGlhbGl6ZSBzdWJk ZXYgKi8NCisJb3YwMmExMC0+c3ViZGV2LmZsYWdzIHw9IFY0TDJfU1VCREVWX0ZMX0hBU19ERVZO T0RFOw0KKwlvdjAyYTEwLT5zdWJkZXYuZW50aXR5Lm9wcyA9ICZvdjAyYTEwX3N1YmRldl9lbnRp dHlfb3BzOw0KKwlvdjAyYTEwLT5zdWJkZXYuZW50aXR5LmZ1bmN0aW9uID0gTUVESUFfRU5UX0Zf Q0FNX1NFTlNPUjsNCisJb3YwMmExMC0+cGFkLmZsYWdzID0gTUVESUFfUEFEX0ZMX1NPVVJDRTsN CisNCisJcmV0ID0gbWVkaWFfZW50aXR5X3BhZHNfaW5pdCgmb3YwMmExMC0+c3ViZGV2LmVudGl0 eSwgMSwgJm92MDJhMTAtPnBhZCk7DQorCWlmIChyZXQgPCAwKSB7DQorCQlkZXZfZXJyX3Byb2Jl KGRldiwgcmV0LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgZW50aXR5IHBhZHNcbiIpOw0KKwkJZ290 byBlcnJfZnJlZV9oYW5kbGVyOw0KKwl9DQorDQorCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7DQor CWlmICghcG1fcnVudGltZV9lbmFibGVkKGRldikpIHsNCisJCXJldCA9IG92MDJhMTBfcG93ZXJf b24oZGV2KTsNCisJCWlmIChyZXQgPCAwKSB7DQorCQkJZGV2X2Vycl9wcm9iZShkZXYsIHJldCwg ImZhaWxlZCB0byBwb3dlciBvblxuIik7DQorCQkJZ290byBlcnJfY2xlYW5fZW50aXR5Ow0KKwkJ fQ0KKwl9DQorDQorCXJldCA9IHY0bDJfYXN5bmNfcmVnaXN0ZXJfc3ViZGV2KCZvdjAyYTEwLT5z dWJkZXYpOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAiZmFpbGVk IHRvIHJlZ2lzdGVyIFY0TDIgc3ViZGV2XG4iKTsNCisJCWdvdG8gZXJyX3Bvd2VyX29mZjsNCisJ fQ0KKw0KKwlyZXR1cm4gMDsNCisNCitlcnJfcG93ZXJfb2ZmOg0KKwlpZiAocG1fcnVudGltZV9l bmFibGVkKGRldikpDQorCQlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsNCisJZWxzZQ0KKwkJb3Yw MmExMF9wb3dlcl9vZmYoZGV2KTsNCitlcnJfY2xlYW5fZW50aXR5Og0KKwltZWRpYV9lbnRpdHlf Y2xlYW51cCgmb3YwMmExMC0+c3ViZGV2LmVudGl0eSk7DQorZXJyX2ZyZWVfaGFuZGxlcjoNCisJ djRsMl9jdHJsX2hhbmRsZXJfZnJlZShvdjAyYTEwLT5zdWJkZXYuY3RybF9oYW5kbGVyKTsNCitl cnJfZGVzdHJveV9tdXRleDoNCisJbXV0ZXhfZGVzdHJveSgmb3YwMmExMC0+bXV0ZXgpOw0KKw0K KwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IG92MDJhMTBfcmVtb3ZlKHN0cnVjdCBp MmNfY2xpZW50ICpjbGllbnQpDQorew0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dl dF9jbGllbnRkYXRhKGNsaWVudCk7DQorCXN0cnVjdCBvdjAyYTEwICpvdjAyYTEwID0gdG9fb3Yw MmExMChzZCk7DQorDQorCXY0bDJfYXN5bmNfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOw0KKwltZWRp YV9lbnRpdHlfY2xlYW51cCgmc2QtPmVudGl0eSk7DQorCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUo c2QtPmN0cmxfaGFuZGxlcik7DQorCXBtX3J1bnRpbWVfZGlzYWJsZSgmY2xpZW50LT5kZXYpOw0K KwlpZiAoIXBtX3J1bnRpbWVfc3RhdHVzX3N1c3BlbmRlZCgmY2xpZW50LT5kZXYpKQ0KKwkJb3Yw MmExMF9wb3dlcl9vZmYoJmNsaWVudC0+ZGV2KTsNCisJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVk KCZjbGllbnQtPmRldik7DQorCW11dGV4X2Rlc3Ryb3koJm92MDJhMTAtPm11dGV4KTsNCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG92MDJh MTBfb2ZfbWF0Y2hbXSA9IHsNCisJeyAuY29tcGF0aWJsZSA9ICJvdnRpLG92MDJhMTAiIH0sDQor CXt9DQorfTsNCitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvdjAyYTEwX29mX21hdGNoKTsNCisN CitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgb3YwMmExMF9pMmNfZHJpdmVyID0gew0KKwkuZHJp dmVyID0gew0KKwkJLm5hbWUgPSAib3YwMmExMCIsDQorCQkucG0gPSAmb3YwMmExMF9wbV9vcHMs DQorCQkub2ZfbWF0Y2hfdGFibGUgPSBvdjAyYTEwX29mX21hdGNoLA0KKwl9LA0KKwkucHJvYmVf bmV3CT0gJm92MDJhMTBfcHJvYmUsDQorCS5yZW1vdmUJCT0gJm92MDJhMTBfcmVtb3ZlLA0KK307 DQorbW9kdWxlX2kyY19kcml2ZXIob3YwMmExMF9pMmNfZHJpdmVyKTsNCisNCitNT0RVTEVfQVVU SE9SKCJEb25nY2h1biBaaHUgPGRvbmdjaHVuLnpodUBtZWRpYXRlay5jb20+Iik7DQorTU9EVUxF X0RFU0NSSVBUSU9OKCJPbW5pVmlzaW9uIE9WMDJBMTAgc2Vuc29yIGRyaXZlciIpOw0KK01PRFVM RV9MSUNFTlNFKCJHUEwgdjIiKTsNCi0tIA0KMi45LjINCg==