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=-11.1 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable 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 8AE9BC43467 for ; Fri, 16 Oct 2020 16:10:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 18A39207BC for ; Fri, 16 Oct 2020 16:10:57 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="OQLUw+iH" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2410651AbgJPQK4 (ORCPT ); Fri, 16 Oct 2020 12:10:56 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:55556 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S2407002AbgJPQKt (ORCPT ); Fri, 16 Oct 2020 12:10:49 -0400 X-UUID: 7989d98123c44b36bf9da14939c4cd38-20201017 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=Bd4cOm6nba9vj9FOq5X/HuM+ys5jh1SwolDb7zY+PLY=; b=OQLUw+iH4xJo2EzvMJBvk+DwZ25arNe+TIZQFONtBXmwCwkUzfojCJ/xIbSet2EFes3geHwaR355VhVD4TP5qln3uo+ebBoq3f3MQK/cAruvMjzaDP61lgq/lA7WsFqF+acDRHJrFEZLF7ZZes0w55DI72BiQGnGGf2Sl8hSd6A=; X-UUID: 7989d98123c44b36bf9da14939c4cd38-20201017 Received: from mtkexhb01.mediatek.inc [(172.21.101.102)] 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 867349524; Sat, 17 Oct 2020 00:10:44 +0800 Received: from MTKCAS06.mediatek.inc (172.21.101.30) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sat, 17 Oct 2020 00:10:42 +0800 Received: from mtksdaap41.mediatek.inc (172.21.77.4) by MTKCAS06.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Sat, 17 Oct 2020 00:10:42 +0800 From: Hsin-Hsiung Wang To: Stephen Boyd , Rob Herring , Matthias Brugger CC: Hsin-Hsiung Wang , , , , , , Subject: [PATCH v4 2/2] spmi: mediatek: Add support for MT6873/8192 Date: Sat, 17 Oct 2020 00:10:34 +0800 Message-ID: <1602864634-23489-3-git-send-email-hsin-hsiung.wang@mediatek.com> X-Mailer: git-send-email 2.6.4 In-Reply-To: <1602864634-23489-1-git-send-email-hsin-hsiung.wang@mediatek.com> References: <1602864634-23489-1-git-send-email-hsin-hsiung.wang@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org YWRkIHNwbWkgc3VwcG9ydCBmb3IgTVQ2ODczLzgxOTIuDQoNClNpZ25lZC1vZmYtYnk6IEhzaW4t SHNpdW5nIFdhbmcgPGhzaW4taHNpdW5nLndhbmdAbWVkaWF0ZWsuY29tPg0KLS0tDQogZHJpdmVy cy9zcG1pL0tjb25maWcgICAgICAgICB8ICAgOSArDQogZHJpdmVycy9zcG1pL01ha2VmaWxlICAg ICAgICB8ICAgMSArDQogZHJpdmVycy9zcG1pL3NwbWktbXRrLXBtaWYuYyB8IDQ5MCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KIDMgZmlsZXMgY2hhbmdlZCwgNTAwIGluc2Vy dGlvbnMoKykNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zcG1pL3NwbWktbXRrLXBtaWYu Yw0KDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcG1pL0tjb25maWcgYi9kcml2ZXJzL3NwbWkvS2Nv bmZpZw0KaW5kZXggYTUzYmFkNTQxZjFhLi40MTg4NDg4NDA5OTkgMTAwNjQ0DQotLS0gYS9kcml2 ZXJzL3NwbWkvS2NvbmZpZw0KKysrIGIvZHJpdmVycy9zcG1pL0tjb25maWcNCkBAIC0yNSw0ICsy NSwxMyBAQCBjb25maWcgU1BNSV9NU01fUE1JQ19BUkINCiAJICBUaGlzIGlzIHJlcXVpcmVkIGZv ciBjb21tdW5pY2F0aW5nIHdpdGggUXVhbGNvbW0gUE1JQ3MgYW5kDQogCSAgb3RoZXIgZGV2aWNl cyB0aGF0IGhhdmUgdGhlIFNQTUkgaW50ZXJmYWNlLg0KIA0KK2NvbmZpZyBTUE1JX01US19QTUlG DQorCXRyaXN0YXRlICJNZWRpYXRlayBTUE1JIENvbnRyb2xsZXIgKFBNSUMgQXJiaXRlcikiDQor CWhlbHANCisJICBJZiB5b3Ugc2F5IHllcyB0byB0aGlzIG9wdGlvbiwgc3VwcG9ydCB3aWxsIGJl IGluY2x1ZGVkIGZvciB0aGUNCisJICBidWlsdC1pbiBTUE1JIFBNSUMgQXJiaXRlciBpbnRlcmZh Y2Ugb24gTWVkaWF0ZWsgZmFtaWx5DQorCSAgcHJvY2Vzc29ycy4NCisNCisJICBUaGlzIGlzIHJl cXVpcmVkIGZvciBjb21tdW5pY2F0aW5nIHdpdGggTWVkaWF0ZWsgUE1JQ3MgYW5kDQorCSAgb3Ro ZXIgZGV2aWNlcyB0aGF0IGhhdmUgdGhlIFNQTUkgaW50ZXJmYWNlLg0KIGVuZGlmDQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9zcG1pL01ha2VmaWxlIGIvZHJpdmVycy9zcG1pL01ha2VmaWxlDQppbmRl eCA1NWE5NGNhZGVmZmUuLjkxZjMwM2I5NjkyNSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvc3BtaS9N YWtlZmlsZQ0KKysrIGIvZHJpdmVycy9zcG1pL01ha2VmaWxlDQpAQCAtNSwzICs1LDQgQEANCiBv YmotJChDT05GSUdfU1BNSSkJKz0gc3BtaS5vDQogDQogb2JqLSQoQ09ORklHX1NQTUlfTVNNX1BN SUNfQVJCKQkrPSBzcG1pLXBtaWMtYXJiLm8NCitvYmotJChDT05GSUdfU1BNSV9NVEtfUE1JRikJ Kz0gc3BtaS1tdGstcG1pZi5vDQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUNCmRpZmYgLS1n aXQgYS9kcml2ZXJzL3NwbWkvc3BtaS1tdGstcG1pZi5jIGIvZHJpdmVycy9zcG1pL3NwbWktbXRr LXBtaWYuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uMWI4YjYy OGZjOWI2DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL3NwbWkvc3BtaS1tdGstcG1pZi5j DQpAQCAtMCwwICsxLDQ5MCBAQA0KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w DQorLy8NCisvLyBDb3B5cmlnaHQgKGMpIDIwMjAgTWVkaWFUZWsgSW5jLg0KKw0KKyNpbmNsdWRl IDxsaW51eC9jbGsuaD4NCisjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+DQorI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+DQorI2luY2x1ZGUg PGxpbnV4L29mX2RldmljZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9zcG1pLmg+DQorDQorI2RlZmlu ZSBTV0lORl9JRExFCTB4MDANCisjZGVmaW5lIFNXSU5GX1dGVkxEQ0xSCTB4MDYNCisNCisjZGVm aW5lIEdFVF9TV0lORih4KQkoKCh4KSA+PiAxKSAmIDB4NykNCisNCisjZGVmaW5lIFBNSUZfQ01E X1JFR18wCQkwDQorI2RlZmluZSBQTUlGX0NNRF9SRUcJCTENCisjZGVmaW5lIFBNSUZfQ01EX0VY VF9SRUcJMg0KKyNkZWZpbmUgUE1JRl9DTURfRVhUX1JFR19MT05HCTMNCisNCisjZGVmaW5lIFBN SUZfREVMQVlfVVMgICAxMA0KKyNkZWZpbmUgUE1JRl9USU1FT1VUICAgICgxMCAqIDEwMDApDQor DQorI2RlZmluZSBQTUlGX0NIQU5fT0ZGU0VUIDB4NQ0KKw0KKyNkZWZpbmUgU1BNSV9PUF9TVF9C VVNZIDENCisNCitzdHJ1Y3QgY2hfcmVnIHsNCisJdTMyIGNoX3N0YTsNCisJdTMyIHdkYXRhOw0K Kwl1MzIgcmRhdGE7DQorCXUzMiBjaF9zZW5kOw0KKwl1MzIgY2hfcmR5Ow0KK307DQorDQorc3Ry dWN0IHBtaWYgew0KKwl2b2lkIF9faW9tZW0JKmJhc2U7DQorCWNvbnN0IHUzMgkqcmVnczsNCisJ dm9pZCBfX2lvbWVtCSpzcG1pbXN0X2Jhc2U7DQorCWNvbnN0IHUzMgkqc3BtaW1zdF9yZWdzOw0K Kwl1MzIJCXNvY19jaGFuOw0KKwlpbnQJCWdycGlkOw0KKwlyYXdfc3BpbmxvY2tfdAlsb2NrOw0K KwlzdHJ1Y3QgY2xrCSpwbWlmX3N5c19jazsNCisJc3RydWN0IGNsawkqcG1pZl90bXJfY2s7DQor CXN0cnVjdCBjbGsJKnNwbWltc3RfY2xrX211eDsNCisJc3RydWN0IGNoX3JlZyBjaGFuOw0KK307 DQorDQorZW51bSBwbWlmX3JlZ3Mgew0KKwlQTUlGX0lOSVRfRE9ORSwNCisJUE1JRl9JTkZfRU4s DQorCVBNSUZfQVJCX0VOLA0KKwlQTUlGX0NNRElTU1VFX0VOLA0KKwlQTUlGX1RJTUVSX0NUUkws DQorCVBNSUZfU1BJX01PREVfQ1RSTCwNCisJUE1JRl9JUlFfRVZFTlRfRU5fMCwNCisJUE1JRl9J UlFfRkxBR18wLA0KKwlQTUlGX0lSUV9DTFJfMCwNCisJUE1JRl9JUlFfRVZFTlRfRU5fMSwNCisJ UE1JRl9JUlFfRkxBR18xLA0KKwlQTUlGX0lSUV9DTFJfMSwNCisJUE1JRl9JUlFfRVZFTlRfRU5f MiwNCisJUE1JRl9JUlFfRkxBR18yLA0KKwlQTUlGX0lSUV9DTFJfMiwNCisJUE1JRl9JUlFfRVZF TlRfRU5fMywNCisJUE1JRl9JUlFfRkxBR18zLA0KKwlQTUlGX0lSUV9DTFJfMywNCisJUE1JRl9J UlFfRVZFTlRfRU5fNCwNCisJUE1JRl9JUlFfRkxBR180LA0KKwlQTUlGX0lSUV9DTFJfNCwNCisJ UE1JRl9XRFRfRVZFTlRfRU5fMCwNCisJUE1JRl9XRFRfRkxBR18wLA0KKwlQTUlGX1dEVF9FVkVO VF9FTl8xLA0KKwlQTUlGX1dEVF9GTEFHXzEsDQorCVBNSUZfU1dJTkZfMF9TVEEsDQorCVBNSUZf U1dJTkZfMF9XREFUQV8zMV8wLA0KKwlQTUlGX1NXSU5GXzBfUkRBVEFfMzFfMCwNCisJUE1JRl9T V0lORl8wX0FDQywNCisJUE1JRl9TV0lORl8wX1ZMRF9DTFIsDQorCVBNSUZfU1dJTkZfMV9TVEEs DQorCVBNSUZfU1dJTkZfMV9XREFUQV8zMV8wLA0KKwlQTUlGX1NXSU5GXzFfUkRBVEFfMzFfMCwN CisJUE1JRl9TV0lORl8xX0FDQywNCisJUE1JRl9TV0lORl8xX1ZMRF9DTFIsDQorCVBNSUZfU1dJ TkZfMl9TVEEsDQorCVBNSUZfU1dJTkZfMl9XREFUQV8zMV8wLA0KKwlQTUlGX1NXSU5GXzJfUkRB VEFfMzFfMCwNCisJUE1JRl9TV0lORl8yX0FDQywNCisJUE1JRl9TV0lORl8yX1ZMRF9DTFIsDQor CVBNSUZfU1dJTkZfM19TVEEsDQorCVBNSUZfU1dJTkZfM19XREFUQV8zMV8wLA0KKwlQTUlGX1NX SU5GXzNfUkRBVEFfMzFfMCwNCisJUE1JRl9TV0lORl8zX0FDQywNCisJUE1JRl9TV0lORl8zX1ZM RF9DTFIsDQorfTsNCisNCitzdGF0aWMgY29uc3QgdTMyIG10Njg3M19yZWdzW10gPSB7DQorCVtQ TUlGX0lOSVRfRE9ORV0gPQkweDAwMDAsDQorCVtQTUlGX0lORl9FTl0gPQkJMHgwMDI0LA0KKwlb UE1JRl9BUkJfRU5dID0JCTB4MDE1MCwNCisJW1BNSUZfQ01ESVNTVUVfRU5dID0JMHgwM0I0LA0K KwlbUE1JRl9USU1FUl9DVFJMXSA9CTB4MDNFMCwNCisJW1BNSUZfU1BJX01PREVfQ1RSTF0gPQkw eDA0MDAsDQorCVtQTUlGX0lSUV9FVkVOVF9FTl8wXSA9CTB4MDQxOCwNCisJW1BNSUZfSVJRX0ZM QUdfMF0gPQkweDA0MjAsDQorCVtQTUlGX0lSUV9DTFJfMF0gPQkweDA0MjQsDQorCVtQTUlGX0lS UV9FVkVOVF9FTl8xXSA9CTB4MDQyOCwNCisJW1BNSUZfSVJRX0ZMQUdfMV0gPQkweDA0MzAsDQor CVtQTUlGX0lSUV9DTFJfMV0gPQkweDA0MzQsDQorCVtQTUlGX0lSUV9FVkVOVF9FTl8yXSA9CTB4 MDQzOCwNCisJW1BNSUZfSVJRX0ZMQUdfMl0gPQkweDA0NDAsDQorCVtQTUlGX0lSUV9DTFJfMl0g PQkweDA0NDQsDQorCVtQTUlGX0lSUV9FVkVOVF9FTl8zXSA9CTB4MDQ0OCwNCisJW1BNSUZfSVJR X0ZMQUdfM10gPQkweDA0NTAsDQorCVtQTUlGX0lSUV9DTFJfM10gPQkweDA0NTQsDQorCVtQTUlG X0lSUV9FVkVOVF9FTl80XSA9CTB4MDQ1OCwNCisJW1BNSUZfSVJRX0ZMQUdfNF0gPQkweDA0NjAs DQorCVtQTUlGX0lSUV9DTFJfNF0gPQkweDA0NjQsDQorCVtQTUlGX1dEVF9FVkVOVF9FTl8wXSA9 CTB4MDQ2QywNCisJW1BNSUZfV0RUX0ZMQUdfMF0gPQkweDA0NzAsDQorCVtQTUlGX1dEVF9FVkVO VF9FTl8xXSA9CTB4MDQ3NCwNCisJW1BNSUZfV0RUX0ZMQUdfMV0gPQkweDA0NzgsDQorCVtQTUlG X1NXSU5GXzBfQUNDXSA9CTB4MEMwMCwNCisJW1BNSUZfU1dJTkZfMF9XREFUQV8zMV8wXSA9CTB4 MEMwNCwNCisJW1BNSUZfU1dJTkZfMF9SREFUQV8zMV8wXSA9CTB4MEMxNCwNCisJW1BNSUZfU1dJ TkZfMF9WTERfQ0xSXSA9CTB4MEMyNCwNCisJW1BNSUZfU1dJTkZfMF9TVEFdID0JMHgwQzI4LA0K KwlbUE1JRl9TV0lORl8xX0FDQ10gPQkweDBDNDAsDQorCVtQTUlGX1NXSU5GXzFfV0RBVEFfMzFf MF0gPQkweDBDNDQsDQorCVtQTUlGX1NXSU5GXzFfUkRBVEFfMzFfMF0gPQkweDBDNTQsDQorCVtQ TUlGX1NXSU5GXzFfVkxEX0NMUl0gPQkweDBDNjQsDQorCVtQTUlGX1NXSU5GXzFfU1RBXSA9CTB4 MEM2OCwNCisJW1BNSUZfU1dJTkZfMl9BQ0NdID0JMHgwQzgwLA0KKwlbUE1JRl9TV0lORl8yX1dE QVRBXzMxXzBdID0JMHgwQzg0LA0KKwlbUE1JRl9TV0lORl8yX1JEQVRBXzMxXzBdID0JMHgwQzk0 LA0KKwlbUE1JRl9TV0lORl8yX1ZMRF9DTFJdID0JMHgwQ0E0LA0KKwlbUE1JRl9TV0lORl8yX1NU QV0gPQkweDBDQTgsDQorCVtQTUlGX1NXSU5GXzNfQUNDXSA9CTB4MENDMCwNCisJW1BNSUZfU1dJ TkZfM19XREFUQV8zMV8wXSA9CTB4MENDNCwNCisJW1BNSUZfU1dJTkZfM19SREFUQV8zMV8wXSA9 CTB4MENENCwNCisJW1BNSUZfU1dJTkZfM19WTERfQ0xSXSA9CTB4MENFNCwNCisJW1BNSUZfU1dJ TkZfM19TVEFdID0JMHgwQ0U4LA0KK307DQorDQorZW51bSBzcG1pX3JlZ3Mgew0KKwlTUE1JX09Q X1NUX0NUUkwsDQorCVNQTUlfR1JQX0lEX0VOLA0KKwlTUE1JX09QX1NUX1NUQSwNCisJU1BNSV9N U1RfU0FNUEwsDQorCVNQTUlfTVNUX1JFUV9FTiwNCisJU1BNSV9SRUNfQ1RSTCwNCisJU1BNSV9S RUMwLA0KKwlTUE1JX1JFQzEsDQorCVNQTUlfUkVDMiwNCisJU1BNSV9SRUMzLA0KKwlTUE1JX1JF QzQsDQorCVNQTUlfTVNUX0RCRywNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCB1MzIgbXQ2ODczX3Nw bWlfcmVnc1tdID0gew0KKwlbU1BNSV9PUF9TVF9DVFJMXSA9CTB4MDAwMCwNCisJW1NQTUlfR1JQ X0lEX0VOXSA9CTB4MDAwNCwNCisJW1NQTUlfT1BfU1RfU1RBXSA9CTB4MDAwOCwNCisJW1NQTUlf TVNUX1NBTVBMXSA9CTB4MDAwYywNCisJW1NQTUlfTVNUX1JFUV9FTl0gPQkweDAwMTAsDQorCVtT UE1JX1JFQ19DVFJMXSA9CTB4MDA0MCwNCisJW1NQTUlfUkVDMF0gPQkJMHgwMDQ0LA0KKwlbU1BN SV9SRUMxXSA9CQkweDAwNDgsDQorCVtTUE1JX1JFQzJdID0JCTB4MDA0YywNCisJW1NQTUlfUkVD M10gPQkJMHgwMDUwLA0KKwlbU1BNSV9SRUM0XSA9CQkweDAwNTQsDQorCVtTUE1JX01TVF9EQkdd ID0JMHgwMGZjLA0KK307DQorDQorc3RhdGljIHUzMiBwbWlmX3JlYWRsKHN0cnVjdCBwbWlmICph cmIsIGVudW0gcG1pZl9yZWdzIHJlZykNCit7DQorCXJldHVybiByZWFkbChhcmItPmJhc2UgKyBh cmItPnJlZ3NbcmVnXSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHBtaWZfd3JpdGVsKHN0cnVjdCBw bWlmICphcmIsIHUzMiB2YWwsIGVudW0gcG1pZl9yZWdzIHJlZykNCit7DQorCXdyaXRlbCh2YWws IGFyYi0+YmFzZSArIGFyYi0+cmVnc1tyZWddKTsNCit9DQorDQorc3RhdGljIHZvaWQgbXRrX3Nw bWlfd3JpdGVsKHN0cnVjdCBwbWlmICphcmIsIHUzMiB2YWwsIGVudW0gc3BtaV9yZWdzIHJlZykN Cit7DQorCXdyaXRlbCh2YWwsIGFyYi0+c3BtaW1zdF9iYXNlICsgYXJiLT5zcG1pbXN0X3JlZ3Nb cmVnXSk7DQorfQ0KKw0KK3N0YXRpYyBib29sIHBtaWZfaXNfZnNtX3ZsZGNscihzdHJ1Y3QgcG1p ZiAqYXJiKQ0KK3sNCisJdTMyIHJlZ19yZGF0YTsNCisNCisJcmVnX3JkYXRhID0gcG1pZl9yZWFk bChhcmIsIGFyYi0+Y2hhbi5jaF9zdGEpOw0KKwlyZXR1cm4gR0VUX1NXSU5GKHJlZ19yZGF0YSkg PT0gU1dJTkZfV0ZWTERDTFI7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcG1pZl9hcmJfY21kKHN0cnVj dCBzcG1pX2NvbnRyb2xsZXIgKmN0cmwsIHU4IG9wYywgdTggc2lkKQ0KK3sNCisJc3RydWN0IHBt aWYgKmFyYiA9IHNwbWlfY29udHJvbGxlcl9nZXRfZHJ2ZGF0YShjdHJsKTsNCisJdTMyIHJkYXRh Ow0KKwl1OCBjbWQ7DQorCWludCByZXQ7DQorDQorCS8qIENoZWNrIHRoZSBvcGNvZGUgKi8NCisJ aWYgKG9wYyA9PSBTUE1JX0NNRF9SRVNFVCkNCisJCWNtZCA9IDA7DQorCWVsc2UgaWYgKG9wYyA9 PSBTUE1JX0NNRF9TTEVFUCkNCisJCWNtZCA9IDE7DQorCWVsc2UgaWYgKG9wYyA9PSBTUE1JX0NN RF9TSFVURE9XTikNCisJCWNtZCA9IDI7DQorCWVsc2UgaWYgKG9wYyA9PSBTUE1JX0NNRF9XQUtF VVApDQorCQljbWQgPSAzOw0KKwllbHNlDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJbXRrX3Nw bWlfd3JpdGVsKGFyYiwgKGNtZCA8PCAweDQpIHwgc2lkLCBTUE1JX09QX1NUX0NUUkwpOw0KKwly ZXQgPSByZWFkbF9wb2xsX3RpbWVvdXRfYXRvbWljKGFyYi0+c3BtaW1zdF9iYXNlICsgYXJiLT5z cG1pbXN0X3JlZ3NbU1BNSV9PUF9TVF9TVEFdLA0KKwkJCQkJcmRhdGEsIChyZGF0YSAmIFNQTUlf T1BfU1RfQlVTWSkgPT0gU1BNSV9PUF9TVF9CVVNZLA0KKwkJCQkJUE1JRl9ERUxBWV9VUywgUE1J Rl9USU1FT1VUKTsNCisJaWYgKHJldCA8IDApDQorCQlkZXZfZXJyKCZjdHJsLT5kZXYsICJ0aW1l b3V0LCBlcnIgPSAlZFxyXG4iLCByZXQpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0 aWMgaW50IHBtaWZfc3BtaV9yZWFkX2NtZChzdHJ1Y3Qgc3BtaV9jb250cm9sbGVyICpjdHJsLCB1 OCBvcGMsIHU4IHNpZCwNCisJCQkgICAgICB1MTYgYWRkciwgdTggKmJ1Ziwgc2l6ZV90IGxlbikN Cit7DQorCXN0cnVjdCBwbWlmICphcmIgPSBzcG1pX2NvbnRyb2xsZXJfZ2V0X2RydmRhdGEoY3Ry bCk7DQorCXN0cnVjdCBjaF9yZWcgKmluZl9yZWcgPSBOVUxMOw0KKwlpbnQgcmV0Ow0KKwl1MzIg ZGF0YSA9IDA7DQorCXU4IGJjID0gbGVuIC0gMTsNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisN CisJLyogQ2hlY2sgZm9yIGFyZ3VtZW50IHZhbGlkYXRpb24uICovDQorCWlmIChzaWQgJiB+KDB4 ZikpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJaWYgKCFhcmIpDQorCQlyZXR1cm4gLUVJTlZB TDsNCisNCisJaW5mX3JlZyA9ICZhcmItPmNoYW47DQorCS8qIENoZWNrIHRoZSBvcGNvZGUgKi8N CisJaWYgKG9wYyA+PSAweDYwICYmIG9wYyA8PSAweDdmKQ0KKwkJb3BjID0gUE1JRl9DTURfUkVH Ow0KKwllbHNlIGlmIChvcGMgPj0gMHgyMCAmJiBvcGMgPD0gMHgyZikNCisJCW9wYyA9IFBNSUZf Q01EX0VYVF9SRUdfTE9ORzsNCisJZWxzZSBpZiAob3BjID49IDB4MzggJiYgb3BjIDw9IDB4M2Yp DQorCQlvcGMgPSBQTUlGX0NNRF9FWFRfUkVHX0xPTkc7DQorCWVsc2UNCisJCXJldHVybiAtRUlO VkFMOw0KKw0KKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFyYi0+bG9jaywgZmxhZ3MpOw0KKwkv KiBXYWl0IGZvciBTb2Z0d2FyZSBJbnRlcmZhY2UgRlNNIHN0YXRlIHRvIGJlIElETEUuICovDQor CXJldCA9IHJlYWRsX3BvbGxfdGltZW91dF9hdG9taWMoYXJiLT5iYXNlICsgYXJiLT5yZWdzW2lu Zl9yZWctPmNoX3N0YV0sDQorCQkJCQlkYXRhLCBHRVRfU1dJTkYoZGF0YSkgPT0gU1dJTkZfSURM RSwNCisJCQkJCVBNSUZfREVMQVlfVVMsIFBNSUZfVElNRU9VVCk7DQorCWlmIChyZXQgPCAwKSB7 DQorCQkvKiBzZXQgY2hhbm5lbCByZWFkeSBpZiB0aGUgZGF0YSBoYXMgdHJhbnNmZXJyZWQgKi8N CisJCWlmIChwbWlmX2lzX2ZzbV92bGRjbHIoYXJiKSkNCisJCQlwbWlmX3dyaXRlbChhcmIsIDEs IGluZl9yZWctPmNoX3JkeSk7DQorCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXJiLT5s b2NrLCBmbGFncyk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCS8qIFNlbmQgdGhlIGNvbW1h bmQuICovDQorCXBtaWZfd3JpdGVsKGFyYiwNCisJCSAgICAob3BjIDw8IDMwKSB8IChzaWQgPDwg MjQpIHwgKGJjIDw8IDE2KSB8IGFkZHIsDQorCQkgICAgaW5mX3JlZy0+Y2hfc2VuZCk7DQorDQor CS8qIFdhaXQgZm9yIFNvZnR3YXJlIEludGVyZmFjZSBGU00gc3RhdGUgdG8gYmUgV0ZWTERDTFIs DQorCSAqDQorCSAqIHJlYWQgdGhlIGRhdGEgYW5kIGNsZWFyIHRoZSB2YWxpZCBmbGFnLg0KKwkg Ki8NCisJcmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0X2F0b21pYyhhcmItPmJhc2UgKyBhcmItPnJl Z3NbaW5mX3JlZy0+Y2hfc3RhXSwNCisJCQkJCWRhdGEsIEdFVF9TV0lORihkYXRhKSA9PSBTV0lO Rl9XRlZMRENMUiwNCisJCQkJCVBNSUZfREVMQVlfVVMsIFBNSUZfVElNRU9VVCk7DQorCWlmIChy ZXQgPCAwKSB7DQorCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXJiLT5sb2NrLCBmbGFn cyk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCWRhdGEgPSBwbWlmX3JlYWRsKGFyYiwgaW5m X3JlZy0+cmRhdGEpOw0KKwltZW1jcHkoYnVmLCAmZGF0YSwgKGJjICYgMykgKyAxKTsNCisJcG1p Zl93cml0ZWwoYXJiLCAxLCBpbmZfcmVnLT5jaF9yZHkpOw0KKwlyYXdfc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmYXJiLT5sb2NrLCBmbGFncyk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0 aWMgaW50IHBtaWZfc3BtaV93cml0ZV9jbWQoc3RydWN0IHNwbWlfY29udHJvbGxlciAqY3RybCwg dTggb3BjLCB1OCBzaWQsDQorCQkJICAgICAgIHUxNiBhZGRyLCBjb25zdCB1OCAqYnVmLCBzaXpl X3QgbGVuKQ0KK3sNCisJc3RydWN0IHBtaWYgKmFyYiA9IHNwbWlfY29udHJvbGxlcl9nZXRfZHJ2 ZGF0YShjdHJsKTsNCisJc3RydWN0IGNoX3JlZyAqaW5mX3JlZyA9IE5VTEw7DQorCWludCByZXQ7 DQorCXUzMiBkYXRhID0gMDsNCisJdTggYmMgPSBsZW4gLSAxOw0KKwl1bnNpZ25lZCBsb25nIGZs YWdzID0gMDsNCisNCisJLyogQ2hlY2sgZm9yIGFyZ3VtZW50IHZhbGlkYXRpb24uICovDQorCWlm IChzaWQgJiB+KDB4ZikpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJaWYgKCFhcmIpDQorCQly ZXR1cm4gLUVJTlZBTDsNCisNCisJaW5mX3JlZyA9ICZhcmItPmNoYW47DQorDQorCS8qIENoZWNr IHRoZSBvcGNvZGUgKi8NCisJaWYgKG9wYyA+PSAweDQwICYmIG9wYyA8PSAweDVGKQ0KKwkJb3Bj ID0gUE1JRl9DTURfUkVHOw0KKwllbHNlIGlmIChvcGMgPD0gMHgwRikNCisJCW9wYyA9IFBNSUZf Q01EX0VYVF9SRUdfTE9ORzsNCisJZWxzZSBpZiAob3BjID49IDB4MzAgJiYgb3BjIDw9IDB4Mzcp DQorCQlvcGMgPSBQTUlGX0NNRF9FWFRfUkVHX0xPTkc7DQorCWVsc2UgaWYgKG9wYyA+PSAweDgw KQ0KKwkJb3BjID0gUE1JRl9DTURfUkVHXzA7DQorCWVsc2UNCisJCXJldHVybiAtRUlOVkFMOw0K Kw0KKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFyYi0+bG9jaywgZmxhZ3MpOw0KKwkvKiBXYWl0 IGZvciBTb2Z0d2FyZSBJbnRlcmZhY2UgRlNNIHN0YXRlIHRvIGJlIElETEUuICovDQorCXJldCA9 IHJlYWRsX3BvbGxfdGltZW91dF9hdG9taWMoYXJiLT5iYXNlICsgYXJiLT5yZWdzW2luZl9yZWct PmNoX3N0YV0sDQorCQkJCQlkYXRhLCBHRVRfU1dJTkYoZGF0YSkgPT0gU1dJTkZfSURMRSwNCisJ CQkJCVBNSUZfREVMQVlfVVMsIFBNSUZfVElNRU9VVCk7DQorCWlmIChyZXQgPCAwKSB7DQorCQkv KiBzZXQgY2hhbm5lbCByZWFkeSBpZiB0aGUgZGF0YSBoYXMgdHJhbnNmZXJyZWQgKi8NCisJCWlm IChwbWlmX2lzX2ZzbV92bGRjbHIoYXJiKSkNCisJCQlwbWlmX3dyaXRlbChhcmIsIDEsIGluZl9y ZWctPmNoX3JkeSk7DQorCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXJiLT5sb2NrLCBm bGFncyk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCS8qIFNldCB0aGUgd3JpdGUgZGF0YS4g Ki8NCisJbWVtY3B5KCZkYXRhLCBidWYsIChiYyAmIDMpICsgMSk7DQorCXBtaWZfd3JpdGVsKGFy YiwgZGF0YSwgaW5mX3JlZy0+d2RhdGEpOw0KKw0KKwkvKiBTZW5kIHRoZSBjb21tYW5kLiAqLw0K KwlwbWlmX3dyaXRlbChhcmIsDQorCQkgICAgKG9wYyA8PCAzMCkgfCBCSVQoMjkpIHwgKHNpZCA8 PCAyNCkgfCAoYmMgPDwgMTYpIHwgYWRkciwNCisJCSAgICBpbmZfcmVnLT5jaF9zZW5kKTsNCisJ cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyYi0+bG9jaywgZmxhZ3MpOw0KKw0KKwlyZXR1 cm4gMDsNCit9DQorDQorc3RhdGljIHN0cnVjdCBwbWlmIG10Njg3M19wbWlmX2FyYltdID0gew0K Kwl7DQorCQkucmVncyA9IG10Njg3M19yZWdzLA0KKwkJLnNwbWltc3RfcmVncyA9IG10Njg3M19z cG1pX3JlZ3MsDQorCQkuc29jX2NoYW4gPSAyLA0KKwl9LA0KK307DQorDQorc3RhdGljIGludCBt dGtfc3BtaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KK3sNCisJc3RydWN0 IHBtaWYgKmFyYjsNCisJc3RydWN0IHJlc291cmNlICpyZXM7DQorCXN0cnVjdCBzcG1pX2NvbnRy b2xsZXIgKmN0cmw7DQorCWludCBlcnIgPSAwOw0KKw0KKwljdHJsID0gc3BtaV9jb250cm9sbGVy X2FsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqYXJiKSk7DQorCWlmICghY3RybCkNCisJCXJldHVy biAtRU5PTUVNOw0KKw0KKwljdHJsLT5jbWQgPSBwbWlmX2FyYl9jbWQ7DQorCWN0cmwtPnJlYWRf Y21kID0gcG1pZl9zcG1pX3JlYWRfY21kOw0KKwljdHJsLT53cml0ZV9jbWQgPSBwbWlmX3NwbWlf d3JpdGVfY21kOw0KKw0KKwkvKiByZS1hc3NpZ24gb2ZfaWQtPmRhdGEgKi8NCisJc3BtaV9jb250 cm9sbGVyX3NldF9kcnZkYXRhKGN0cmwsICh2b2lkICopb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRh KCZwZGV2LT5kZXYpKTsNCisJYXJiID0gc3BtaV9jb250cm9sbGVyX2dldF9kcnZkYXRhKGN0cmwp Ow0KKw0KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VS Q0VfTUVNLCAicG1pZiIpOw0KKwlhcmItPmJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBk ZXYtPmRldiwgcmVzKTsNCisJaWYgKElTX0VSUihhcmItPmJhc2UpKSB7DQorCQllcnIgPSBQVFJf RVJSKGFyYi0+YmFzZSk7DQorCQlnb3RvIGVycl9wdXRfY3RybDsNCisJfQ0KKw0KKwlyZXMgPSBw bGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAic3BtaW1z dCIpOw0KKwlhcmItPnNwbWltc3RfYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ ZGV2LCByZXMpOw0KKwlpZiAoSVNfRVJSKGFyYi0+c3BtaW1zdF9iYXNlKSkgew0KKwkJZXJyID0g UFRSX0VSUihhcmItPnNwbWltc3RfYmFzZSk7DQorCQlnb3RvIGVycl9wdXRfY3RybDsNCisJfQ0K Kw0KKwlhcmItPnBtaWZfc3lzX2NrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJwbWlmX3N5 c19jayIpOw0KKwlpZiAoSVNfRVJSKGFyYi0+cG1pZl9zeXNfY2spKSB7DQorCQlkZXZfZXJyKCZw ZGV2LT5kZXYsICJbJXNdIEZhaWxlZCB0byBnZXQgYXAgY2xvY2s6ICVsZFxuIiwNCisJCQlfX2Z1 bmNfXywgUFRSX0VSUihhcmItPnBtaWZfc3lzX2NrKSk7DQorCQlnb3RvIGVycl9wdXRfY3RybDsN CisJfQ0KKw0KKwlhcmItPnBtaWZfdG1yX2NrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJw bWlmX3Rtcl9jayIpOw0KKwlpZiAoSVNfRVJSKGFyYi0+cG1pZl90bXJfY2spKSB7DQorCQlkZXZf ZXJyKCZwZGV2LT5kZXYsICJbJXNdIEZhaWxlZCB0byBnZXQgdG1yIGNsb2NrOiAlbGRcbiIsDQor CQkJX19mdW5jX18sIFBUUl9FUlIoYXJiLT5wbWlmX3Rtcl9jaykpOw0KKwkJZ290byBlcnJfcHV0 X2N0cmw7DQorCX0NCisNCisJYXJiLT5zcG1pbXN0X2Nsa19tdXggPSBkZXZtX2Nsa19nZXQoJnBk ZXYtPmRldiwgInNwbWltc3RfY2xrX211eCIpOw0KKwlpZiAoSVNfRVJSKGFyYi0+c3BtaW1zdF9j bGtfbXV4KSkgew0KKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiWyVzXSBGYWlsZWQgdG8gZ2V0IGNs b2NrOiAlbGRcbiIsDQorCQkJX19mdW5jX18sIFBUUl9FUlIoYXJiLT5zcG1pbXN0X2Nsa19tdXgp KTsNCisJCWdvdG8gZXJyX3B1dF9jdHJsOw0KKwl9DQorDQorCWVyciA9IGNsa19wcmVwYXJlX2Vu YWJsZShhcmItPnBtaWZfc3lzX2NrKTsNCisJaWYgKGVycikgew0KKwkJZGV2X2VycigmcGRldi0+ ZGV2LCAiWyVzXSBGYWlsZWQgdG8gZW5hYmxlIGFwIGNsay5cbiIsIF9fZnVuY19fKTsNCisJCWdv dG8gZXJyX3B1dF9jdHJsOw0KKwl9DQorDQorCWVyciA9IGNsa19wcmVwYXJlX2VuYWJsZShhcmIt PnBtaWZfdG1yX2NrKTsNCisJaWYgKGVycikgew0KKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiWyVz XSBGYWlsZWQgdG8gZW5hYmxlIHRtciBjbGsuXG4iLCBfX2Z1bmNfXyk7DQorCQlnb3RvIGVycl9j bGtfMTsNCisJfQ0KKw0KKwllcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUoYXJiLT5zcG1pbXN0X2Ns a19tdXgpOw0KKwlpZiAoZXJyKSB7DQorCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJbJXNdIEZhaWxl ZCB0byBlbmFibGUgc3BtaSBtYXN0ZXIgY2xrLlxuIiwgX19mdW5jX18pOw0KKwkJZ290byBlcnJf Y2xrXzI7DQorCX0NCisNCisJYXJiLT5jaGFuLmNoX3N0YSA9IFBNSUZfU1dJTkZfMF9TVEEgKyAo UE1JRl9DSEFOX09GRlNFVCAqIGFyYi0+c29jX2NoYW4pOw0KKwlhcmItPmNoYW4ud2RhdGEgPSBQ TUlGX1NXSU5GXzBfV0RBVEFfMzFfMCArIChQTUlGX0NIQU5fT0ZGU0VUICogYXJiLT5zb2NfY2hh bik7DQorCWFyYi0+Y2hhbi5yZGF0YSA9IFBNSUZfU1dJTkZfMF9SREFUQV8zMV8wICsgKFBNSUZf Q0hBTl9PRkZTRVQgKiBhcmItPnNvY19jaGFuKTsNCisJYXJiLT5jaGFuLmNoX3NlbmQgPSBQTUlG X1NXSU5GXzBfQUNDICsgKFBNSUZfQ0hBTl9PRkZTRVQgKiBhcmItPnNvY19jaGFuKTsNCisJYXJi LT5jaGFuLmNoX3JkeSA9IFBNSUZfU1dJTkZfMF9WTERfQ0xSICsgKFBNSUZfQ0hBTl9PRkZTRVQg KiBhcmItPnNvY19jaGFuKTsNCisNCisJcmF3X3NwaW5fbG9ja19pbml0KCZhcmItPmxvY2spOw0K Kw0KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjdHJsKTsNCisNCisJZXJyID0gc3BtaV9j b250cm9sbGVyX2FkZChjdHJsKTsNCisJaWYgKGVycikNCisJCWdvdG8gZXJyX2RvbWFpbl9yZW1v dmU7DQorDQorCXJldHVybiAwOw0KKw0KK2Vycl9kb21haW5fcmVtb3ZlOg0KKwljbGtfZGlzYWJs ZV91bnByZXBhcmUoYXJiLT5zcG1pbXN0X2Nsa19tdXgpOw0KK2Vycl9jbGtfMjoNCisJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKGFyYi0+cG1pZl90bXJfY2spOw0KK2Vycl9jbGtfMToNCisJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKGFyYi0+cG1pZl9zeXNfY2spOw0KK2Vycl9wdXRfY3RybDoNCisJc3Bt aV9jb250cm9sbGVyX3B1dChjdHJsKTsNCisJcmV0dXJuIGVycjsNCit9DQorDQorc3RhdGljIGlu dCBtdGtfc3BtaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCit7DQorCXN0 cnVjdCBzcG1pX2NvbnRyb2xsZXIgKmN0cmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsN CisNCisJc3BtaV9jb250cm9sbGVyX3JlbW92ZShjdHJsKTsNCisJc3BtaV9jb250cm9sbGVyX3B1 dChjdHJsKTsNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIG10a19zcG1pX21hdGNoX3RhYmxlW10gPSB7DQorCXsNCisJCS5jb21wYXRpYmxlID0g Im1lZGlhdGVrLG10Njg3My1zcG1pIiwNCisJCS5kYXRhID0gJm10Njg3M19wbWlmX2FyYiwNCisJ fSwgew0KKwkJLyogc2VudGluZWwgKi8NCisJfSwNCit9Ow0KK01PRFVMRV9ERVZJQ0VfVEFCTEUo b2YsIG10a19zcG1pX21hdGNoX3RhYmxlKTsNCisNCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Ry aXZlciBtdGtfc3BtaV9kcml2ZXIgPSB7DQorCS5kcml2ZXIJCT0gew0KKwkJLm5hbWUJPSAic3Bt aS1tdGsiLA0KKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKG10a19zcG1pX21hdGNo X3RhYmxlKSwNCisJfSwNCisJLnByb2JlCQk9IG10a19zcG1pX3Byb2JlLA0KKwkucmVtb3ZlCQk9 IG10a19zcG1pX3JlbW92ZSwNCit9Ow0KK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobXRrX3NwbWlf ZHJpdmVyKTsNCisNCitNT0RVTEVfQVVUSE9SKCJIc2luLUhzaXVuZyBXYW5nIDxoc2luLWhzaXVu Zy53YW5nQG1lZGlhdGVrLmNvbT4iKTsNCitNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhVGVrIFNQ TUkgRHJpdmVyIik7DQorTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0KLS0gDQoyLjE4LjANCg==