Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp1245144ybt; Thu, 9 Jul 2020 02:13:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwB+2HMnw1lWODNWXSLEjSPF1376EU9bziZEL10wAMcqhQuNI0yy8sMZdUsAyHbb6kT7a8T X-Received: by 2002:a17:906:69d3:: with SMTP id g19mr36364912ejs.402.1594286032441; Thu, 09 Jul 2020 02:13:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594286032; cv=none; d=google.com; s=arc-20160816; b=rP8c47Os8PVcuVpCLhuUF0VSayCEEeuHrpTjj59FDtZDu/TraJ656EZ2pl9o+8M2i8 qO6uXzTv8lPZ9vOYYF6LNboXaRdevTUOnpaEEs3fCLD/OkwR8gWLg5MCQaNmYw+0XgWo FzRMPm2gny0HLAWRRgYa5M1OTBL6gBTK/cPjUkzNLbTXoefrEWSHot+NNpFVMf1nUYYF LbfVEDvmyp1ABfdPpNAu455WUMIdf+BYJd1zKvXqhoJO7HQZeFmZQLgt5eLXUc+wBD+L sG9ijubE4jXhu27L11+wAwPmUdmRWirK/PhAEz3sO2/amfb8q6oR/fjQOAApK2SNCsNP waWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=uEIodGb+H0SrBqh8VNgfTXkSpyd8DbLFMTrEpDE4eVA=; b=aIGhH8eqdBtB+0wA+zKUu9TuaT5vvUoTyix/ZFgdtef0EaUr66O4+HQ4QJhBrZ7tBW gwT2ZuOSCDzuTY7HUoYnRu9iwSJ0ib+1f1iOYc/N7LAgkuxXbKYkHJxm6MzXRWpTy6gE pq6S2ig1myF6dMwVMp1HTjGi9ApKDUeJVxBBNHHxJ0nHgu6g0svEui+TeIAtQBR5+Jll DwedspdTbGmQkR8WcNQSlJ5xFYZqKDr6xm5sp40bLMLB33PU3FPl9rVNbrRNGKC58ADV IG7LPCBNG4s077MdB1WmzlZHhJCBI6mjALQGwmQ5PrL0mACYktgzR7JXGMzHvZoj9lw9 SFCw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=Cb85n6SR; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id sd17si1677547ejb.306.2020.07.09.02.13.29; Thu, 09 Jul 2020 02:13:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=Cb85n6SR; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726688AbgGIJMh (ORCPT + 99 others); Thu, 9 Jul 2020 05:12:37 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:21191 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726645AbgGIJMh (ORCPT ); Thu, 9 Jul 2020 05:12:37 -0400 X-UUID: 00b0cf0c18be46b1a1254038fcd68468-20200709 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=uEIodGb+H0SrBqh8VNgfTXkSpyd8DbLFMTrEpDE4eVA=; b=Cb85n6SRfM7l5AP9Kod9cb4gFsFaQaQQk+7QKqmUkVd/txieafbi6bgT+wLNSWO05k4UB5YXGGRaY0eczPcvdYH3C09Te/DQodM2Nx2oq6AQxkPBexoMPyVjCD+yjyMyuuO/N6I9LCuprPNh1xTL+LUwIN1srLq0z0da6+hPy3c=; X-UUID: 00b0cf0c18be46b1a1254038fcd68468-20200709 Received: from mtkcas10.mediatek.inc [(172.21.101.39)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1822507380; Thu, 09 Jul 2020 17:12:26 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs01n1.mediatek.inc (172.21.101.68) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 9 Jul 2020 17:12:16 +0800 Received: from mtkswgap22.mediatek.inc (172.21.77.33) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 9 Jul 2020 17:12:18 +0800 From: Neal Liu To: Rob Herring , Matthias Brugger CC: Neal Liu , , , , lkml , Subject: [PATCH v2 2/2] soc: mediatek: add mtk-devapc driver Date: Thu, 9 Jul 2020 17:12:07 +0800 Message-ID: <1594285927-1840-3-git-send-email-neal.liu@mediatek.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1594285927-1840-1-git-send-email-neal.liu@mediatek.com> References: <1594285927-1840-1-git-send-email-neal.liu@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org TWVkaWFUZWsgYnVzIGZhYnJpYyBwcm92aWRlcyBUcnVzdFpvbmUgc2VjdXJpdHkgc3VwcG9ydCBh bmQgZGF0YQ0KcHJvdGVjdGlvbiB0byBwcmV2ZW50IHNsYXZlcyBmcm9tIGJlaW5nIGFjY2Vzc2Vk IGJ5IHVuZXhwZWN0ZWQNCm1hc3RlcnMuDQpUaGUgc2VjdXJpdHkgdmlvbGF0aW9uIGlzIGxvZ2dl ZCBhbmQgc2VudCB0byB0aGUgcHJvY2Vzc29yIGZvcg0KZnVydGhlciBhbmFseXNpcyBvciBjb3Vu dGVybWVhc3VyZXMuDQoNCkFueSBvY2N1cnJlbmNlIG9mIHNlY3VyaXR5IHZpb2xhdGlvbiB3b3Vs ZCByYWlzZSBhbiBpbnRlcnJ1cHQsIGFuZA0KaXQgd2lsbCBiZSBoYW5kbGVkIGJ5IG10ay1kZXZh cGMgZHJpdmVyLiBUaGUgdmlvbGF0aW9uDQppbmZvcm1hdGlvbiBpcyBwcmludGVkIGluIG9yZGVy IHRvIGZpbmQgdGhlIG11cmRlcmVyLg0KDQpTaWduZWQtb2ZmLWJ5OiBOZWFsIExpdSA8bmVhbC5s aXVAbWVkaWF0ZWsuY29tPg0KLS0tDQogZHJpdmVycy9zb2MvbWVkaWF0ZWsvS2NvbmZpZyAgICAg IHwgICAgOSArDQogZHJpdmVycy9zb2MvbWVkaWF0ZWsvTWFrZWZpbGUgICAgIHwgICAgMSArDQog ZHJpdmVycy9zb2MvbWVkaWF0ZWsvbXRrLWRldmFwYy5jIHwgIDQ2NiArKysrKysrKysrKysrKysr KysrKysrKysrKw0KIGRyaXZlcnMvc29jL21lZGlhdGVrL210ay1kZXZhcGMuaCB8ICA2NzAgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KIDQgZmlsZXMgY2hhbmdlZCwgMTE0 NiBpbnNlcnRpb25zKCspDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc29jL21lZGlhdGVr L210ay1kZXZhcGMuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3NvYy9tZWRpYXRlay9t dGstZGV2YXBjLmgNCg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL21lZGlhdGVrL0tjb25maWcg Yi9kcml2ZXJzL3NvYy9tZWRpYXRlay9LY29uZmlnDQppbmRleCA1OWE1NmNkLi4xMTc3Yzk4IDEw MDY0NA0KLS0tIGEvZHJpdmVycy9zb2MvbWVkaWF0ZWsvS2NvbmZpZw0KKysrIGIvZHJpdmVycy9z b2MvbWVkaWF0ZWsvS2NvbmZpZw0KQEAgLTE3LDYgKzE3LDE1IEBAIGNvbmZpZyBNVEtfQ01EUQ0K IAkgIHRpbWUgbGltaXRhdGlvbiwgc3VjaCBhcyB1cGRhdGluZyBkaXNwbGF5IGNvbmZpZ3VyYXRp b24gZHVyaW5nIHRoZQ0KIAkgIHZibGFuay4NCiANCitjb25maWcgTVRLX0RFVkFQQw0KKwl0cmlz dGF0ZSAiTWVkaWF0ZWsgRGV2aWNlIEFQQyBTdXBwb3J0Ig0KKwloZWxwDQorCSAgU2F5IHllcyBo ZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBNZWRpYXRlayBEZXZpY2UgQVBDIGRyaXZlci4NCisJ ICBUaGlzIGRyaXZlciBpcyBtYWlubHkgdXNlZCB0byBoYW5kbGUgdGhlIHZpb2xhdGlvbiB3aGlj aCBjYXRjaGVzDQorCSAgdW5leHBlY3RlZCB0cmFuc2FjdGlvbi4NCisJICBUaGUgdmlvbGF0aW9u IGluZm9ybWF0aW9uIGlzIGxvZ2dlZCBmb3IgZnVydGhlciBhbmFseXNpcyBvcg0KKwkgIGNvdW50 ZXJtZWFzdXJlcy4NCisNCiBjb25maWcgTVRLX0lORlJBQ0ZHDQogCWJvb2wgIk1lZGlhVGVrIElO RlJBQ0ZHIFN1cHBvcnQiDQogCXNlbGVjdCBSRUdNQVANCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Nv Yy9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvc29jL21lZGlhdGVrL01ha2VmaWxlDQppbmRl eCAwMWY5Zjg3Li5hYmZkNGJhIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9zb2MvbWVkaWF0ZWsvTWFr ZWZpbGUNCisrKyBiL2RyaXZlcnMvc29jL21lZGlhdGVrL01ha2VmaWxlDQpAQCAtMSw1ICsxLDYg QEANCiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkNCiBvYmotJChDT05G SUdfTVRLX0NNRFEpICs9IG10ay1jbWRxLWhlbHBlci5vDQorb2JqLSQoQ09ORklHX01US19ERVZB UEMpICs9IG10ay1kZXZhcGMubw0KIG9iai0kKENPTkZJR19NVEtfSU5GUkFDRkcpICs9IG10ay1p bmZyYWNmZy5vDQogb2JqLSQoQ09ORklHX01US19QTUlDX1dSQVApICs9IG10ay1wbWljLXdyYXAu bw0KIG9iai0kKENPTkZJR19NVEtfU0NQU1lTKSArPSBtdGstc2Nwc3lzLm8NCmRpZmYgLS1naXQg YS9kcml2ZXJzL3NvYy9tZWRpYXRlay9tdGstZGV2YXBjLmMgYi9kcml2ZXJzL3NvYy9tZWRpYXRl ay9tdGstZGV2YXBjLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi4xMWZh MzY2DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL3NvYy9tZWRpYXRlay9tdGstZGV2YXBj LmMNCkBAIC0wLDAgKzEsNDY2IEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjANCisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuDQorICovDQorDQor I2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCisj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rldmlj ZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4NCisjaW5jbHVkZSA8bGludXgvb2ZfYWRk cmVzcy5oPg0KKyNpbmNsdWRlICJtdGstZGV2YXBjLmgiDQorDQorLyoNCisgKiBtdGtfZGV2YXBj X3BkX2dldCAtIGdldCBkZXZhcGMgcGRfdHlwZXMgb2YgcmVnaXN0ZXIgYWRkcmVzcy4NCisgKg0K KyAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHJlZyBhZGRyDQorICovDQorc3RhdGljIHZvaWQgX19p b21lbSAqbXRrX2RldmFwY19wZF9nZXQoc3RydWN0IG10a19kZXZhcGNfY29udGV4dCAqZGV2YXBj X2N0eCwNCisJCQkJICAgICAgIGludCBzbGF2ZV90eXBlLA0KKwkJCQkgICAgICAgZW51bSBERVZB UENfUERfUkVHX1RZUEUgcGRfcmVnX3R5cGUsDQorCQkJCSAgICAgICB1MzIgcmVnX2lkeCkNCit7 DQorCXZvaWQgX19pb21lbSAqcmVnOw0KKw0KKwlyZWcgPSBkZXZhcGNfY3R4LT5kZXZhcGNfcGRf YmFzZVtzbGF2ZV90eXBlXSArDQorCQlkZXZhcGNfY3R4LT5wZHNfb2Zmc2V0W3BkX3JlZ190eXBl XTsNCisNCisJaWYgKHBkX3JlZ190eXBlID09IFZJT19NQVNLIHx8IHBkX3JlZ190eXBlID09IFZJ T19TVEEpDQorCQlyZWcgKz0gMHg0ICogcmVnX2lkeDsNCisNCisJcmV0dXJuIHJlZzsNCit9DQor DQorc3RhdGljIGludCBnZXRfdmlvX3NsYXZlX251bShpbnQgc2xhdmVfdHlwZSkNCit7DQorCWlm IChzbGF2ZV90eXBlID09IDApDQorCQlyZXR1cm4gQVJSQVlfU0laRShtdGtfZGV2aWNlc19pbmZy YSk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdTMyIGdldF9zaGlmdF9ncm91cChz dHJ1Y3QgbXRrX2RldmFwY19jb250ZXh0ICpkZXZhcGNfY3R4LA0KKwkJCSAgIGludCBzbGF2ZV90 eXBlLCBpbnQgdmlvX2lkeCkNCit7DQorCXUzMiB2aW9fc2hpZnRfc3RhOw0KKwl2b2lkIF9faW9t ZW0gKnJlZzsNCisJaW50IGJpdDsNCisNCisJcmVnID0gbXRrX2RldmFwY19wZF9nZXQoZGV2YXBj X2N0eCwgc2xhdmVfdHlwZSwgVklPX1NISUZUX1NUQSwgMCk7DQorCXZpb19zaGlmdF9zdGEgPSBy ZWFkbChyZWcpOw0KKw0KKwlmb3IgKGJpdCA9IDA7IGJpdCA8IDMyOyBiaXQrKykgew0KKwkJaWYg KCh2aW9fc2hpZnRfc3RhID4+IGJpdCkgJiAweDEpDQorCQkJYnJlYWs7DQorCX0NCisNCisJcmV0 dXJuIGJpdDsNCit9DQorDQorc3RhdGljIGludCBjaGVja192aW9fbWFza19zdGEoc3RydWN0IG10 a19kZXZhcGNfY29udGV4dCAqZGV2YXBjX2N0eCwNCisJCQkgICAgICBpbnQgc2xhdmVfdHlwZSwg dTMyIG1vZHVsZSwgaW50IHBkX3JlZ190eXBlKQ0KK3sNCisJdTMyIHJlZ19pbmRleCwgcmVnX29m ZnNldDsNCisJdm9pZCBfX2lvbWVtICpyZWc7DQorCXUzMiB2YWx1ZTsNCisNCisJVklPX01BU0tf U1RBX1JFR19HRVQobW9kdWxlKTsNCisNCisJcmVnID0gbXRrX2RldmFwY19wZF9nZXQoZGV2YXBj X2N0eCwgc2xhdmVfdHlwZSwgcGRfcmVnX3R5cGUsIHJlZ19pbmRleCk7DQorCXZhbHVlID0gcmVh ZGwocmVnKTsNCisNCisJcmV0dXJuICgodmFsdWUgPj4gcmVnX29mZnNldCkgJiAweDEpOw0KK30N CisNCitzdGF0aWMgaW50IGNoZWNrX3Zpb19tYXNrKHN0cnVjdCBtdGtfZGV2YXBjX2NvbnRleHQg KmRldmFwY19jdHgsIGludCBzbGF2ZV90eXBlLA0KKwkJCSAgdTMyIG1vZHVsZSkNCit7DQorCXJl dHVybiBjaGVja192aW9fbWFza19zdGEoZGV2YXBjX2N0eCwgc2xhdmVfdHlwZSwgbW9kdWxlLCBW SU9fTUFTSyk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgY2hlY2tfdmlvX3N0YXR1cyhzdHJ1Y3QgbXRr X2RldmFwY19jb250ZXh0ICpkZXZhcGNfY3R4LA0KKwkJCSAgICBpbnQgc2xhdmVfdHlwZSwgdTMy IG1vZHVsZSkNCit7DQorCXJldHVybiBjaGVja192aW9fbWFza19zdGEoZGV2YXBjX2N0eCwgc2xh dmVfdHlwZSwgbW9kdWxlLCBWSU9fU1RBKTsNCit9DQorDQorc3RhdGljIHZvaWQgY2xlYXJfdmlv X3N0YXR1cyhzdHJ1Y3QgbXRrX2RldmFwY19jb250ZXh0ICpkZXZhcGNfY3R4LA0KKwkJCSAgICAg aW50IHNsYXZlX3R5cGUsIHUzMiBtb2R1bGUpDQorew0KKwl1MzIgcmVnX2luZGV4LCByZWdfb2Zm c2V0Ow0KKwl2b2lkIF9faW9tZW0gKnJlZzsNCisNCisJVklPX01BU0tfU1RBX1JFR19HRVQobW9k dWxlKTsNCisNCisJcmVnID0gbXRrX2RldmFwY19wZF9nZXQoZGV2YXBjX2N0eCwgc2xhdmVfdHlw ZSwgVklPX1NUQSwgcmVnX2luZGV4KTsNCisJd3JpdGVsKDB4MSA8PCByZWdfb2Zmc2V0LCByZWcp Ow0KKw0KKwlpZiAoY2hlY2tfdmlvX3N0YXR1cyhkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLCBtb2R1 bGUpKQ0KKwkJcHJfZXJyKFBGWCAiJXM6IENsZWFyIGZhaWxlZCwgc2xhdmVfdHlwZToweCV4LCBt b2R1bGVfaW5kZXg6MHgleFxuIiwNCisJCSAgICAgICBfX2Z1bmNfXywgc2xhdmVfdHlwZSwgbW9k dWxlKTsNCit9DQorDQorc3RhdGljIHZvaWQgbWFza19tb2R1bGVfaXJxKHN0cnVjdCBtdGtfZGV2 YXBjX2NvbnRleHQgKmRldmFwY19jdHgsDQorCQkJICAgIGludCBzbGF2ZV90eXBlLCB1MzIgbW9k dWxlLCBib29sIG1hc2spDQorew0KKwl1MzIgcmVnX2luZGV4LCByZWdfb2Zmc2V0Ow0KKwl2b2lk IF9faW9tZW0gKnJlZzsNCisJdTMyIHZhbHVlOw0KKw0KKwlWSU9fTUFTS19TVEFfUkVHX0dFVCht b2R1bGUpOw0KKw0KKwlyZWcgPSBtdGtfZGV2YXBjX3BkX2dldChkZXZhcGNfY3R4LCBzbGF2ZV90 eXBlLCBWSU9fTUFTSywgcmVnX2luZGV4KTsNCisNCisJdmFsdWUgPSByZWFkbChyZWcpOw0KKwlp ZiAobWFzaykNCisJCXZhbHVlIHw9ICgweDEgPDwgcmVnX29mZnNldCk7DQorCWVsc2UNCisJCXZh bHVlICY9IH4oMHgxIDw8IHJlZ19vZmZzZXQpOw0KKw0KKwl3cml0ZWwodmFsdWUsIHJlZyk7DQor fQ0KKw0KKyNkZWZpbmUgVElNRU9VVF9NUwkJMTAwMDANCisNCitzdGF0aWMgaW50IHJlYWRfcG9s bF90aW1lb3V0KHZvaWQgX19pb21lbSAqYWRkciwgdTMyIG1hc2spDQorew0KKwl1bnNpZ25lZCBs b25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhUSU1FT1VUX01TKTsNCisN CisJZG8gew0KKwkJaWYgKHJlYWRsX3JlbGF4ZWQoYWRkcikgJiBtYXNrKQ0KKwkJCXJldHVybiAw Ow0KKw0KKwl9IHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSk7DQorDQorCXJl dHVybiAocmVhZGxfcmVsYXhlZChhZGRyKSAmIG1hc2spID8gMCA6IC1FVElNRURPVVQ7DQorfQ0K Kw0KKy8qDQorICogc3luY192aW9fZGJnIC0gc3RhcnQgdG8gZ2V0IHZpb2xhdGlvbiBpbmZvcm1h dGlvbiBieSBzZWxlY3RpbmcgdmlvbGF0aW9uDQorICoJCSAgZ3JvdXAgYW5kIGVuYWJsZSB2aW9s YXRpb24gc2hpZnQuDQorICoNCisgKiBSZXR1cm5zIHN5bmMgZG9uZSBvciBub3QNCisgKi8NCitz dGF0aWMgdTMyIHN5bmNfdmlvX2RiZyhzdHJ1Y3QgbXRrX2RldmFwY19jb250ZXh0ICpkZXZhcGNf Y3R4LCBpbnQgc2xhdmVfdHlwZSwNCisJCQl1MzIgc2hpZnRfYml0KQ0KK3sNCisJdm9pZCBfX2lv bWVtICpwZF92aW9fc2hpZnRfc3RhX3JlZzsNCisJdm9pZCBfX2lvbWVtICpwZF92aW9fc2hpZnRf c2VsX3JlZzsNCisJdm9pZCBfX2lvbWVtICpwZF92aW9fc2hpZnRfY29uX3JlZzsNCisJdTMyIHN5 bmNfZG9uZSA9IDA7DQorDQorCXBkX3Zpb19zaGlmdF9zdGFfcmVnID0gbXRrX2RldmFwY19wZF9n ZXQoZGV2YXBjX2N0eCwgc2xhdmVfdHlwZSwNCisJCQkJCQkgVklPX1NISUZUX1NUQSwgMCk7DQor CXBkX3Zpb19zaGlmdF9zZWxfcmVnID0gbXRrX2RldmFwY19wZF9nZXQoZGV2YXBjX2N0eCwgc2xh dmVfdHlwZSwNCisJCQkJCQkgVklPX1NISUZUX1NFTCwgMCk7DQorCXBkX3Zpb19zaGlmdF9jb25f cmVnID0gbXRrX2RldmFwY19wZF9nZXQoZGV2YXBjX2N0eCwgc2xhdmVfdHlwZSwNCisJCQkJCQkg VklPX1NISUZUX0NPTiwgMCk7DQorDQorCXdyaXRlbCgweDEgPDwgc2hpZnRfYml0LCBwZF92aW9f c2hpZnRfc2VsX3JlZyk7DQorCXdyaXRlbCgweDEsIHBkX3Zpb19zaGlmdF9jb25fcmVnKTsNCisN CisJaWYgKCFyZWFkX3BvbGxfdGltZW91dChwZF92aW9fc2hpZnRfY29uX3JlZywgMHgyKSkNCisJ CXN5bmNfZG9uZSA9IDE7DQorCWVsc2UNCisJCXByX2VycihQRlggIiVzOiBTaGlmdCB2aW9sYXRp b24gaW5mbyBmYWlsZWRcbiIsIF9fZnVuY19fKTsNCisNCisJLyogRGlzYWJsZSBzaGlmdCBtZWNo YW5pc20gKi8NCisJd3JpdGVsKDB4MCwgcGRfdmlvX3NoaWZ0X2Nvbl9yZWcpOw0KKwl3cml0ZWwo MHgwLCBwZF92aW9fc2hpZnRfc2VsX3JlZyk7DQorCXdyaXRlbCgweDEgPDwgc2hpZnRfYml0LCBw ZF92aW9fc2hpZnRfc3RhX3JlZyk7DQorDQorCXJldHVybiBzeW5jX2RvbmU7DQorfQ0KKw0KK3N0 YXRpYyB2b2lkIGRldmFwY192aW9faW5mb19wcmludChzdHJ1Y3QgbXRrX2RldmFwY19jb250ZXh0 ICpkZXZhcGNfY3R4KQ0KK3sNCisJc3RydWN0IG10a19kZXZhcGNfdmlvX2luZm8gKnZpb19pbmZv ID0gZGV2YXBjX2N0eC0+dmlvX2luZm87DQorDQorCS8qIFByaW50IHZpb2xhdGlvbiBpbmZvcm1h dGlvbiAqLw0KKwlpZiAodmlvX2luZm8tPndyaXRlKQ0KKwkJcHJfaW5mbyhQRlggIldyaXRlIFZp b2xhdGlvblxuIik7DQorCWVsc2UgaWYgKHZpb19pbmZvLT5yZWFkKQ0KKwkJcHJfaW5mbyhQRlgg IlJlYWQgVmlvbGF0aW9uXG4iKTsNCisNCisJcHJfaW5mbyhQRlggIiVzJXgsICVzJXgsICVzJXgs ICVzJXhcbiIsDQorCQkiVmlvIEFkZHI6MHgiLCB2aW9faW5mby0+dmlvX2FkZHIsDQorCQkiSGln aDoweCIsIHZpb19pbmZvLT52aW9fYWRkcl9oaWdoLA0KKwkJIkJ1cyBJRDoweCIsIHZpb19pbmZv LT5tYXN0ZXJfaWQsDQorCQkiRG9tIElEOjB4IiwgdmlvX2luZm8tPmRvbWFpbl9pZCk7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkIGRldmFwY19leHRyYWN0X3Zpb19kYmcoc3RydWN0IG10a19kZXZhcGNf Y29udGV4dCAqZGV2YXBjX2N0eCwNCisJCQkJICAgaW50IHNsYXZlX3R5cGUpDQorew0KKwl2b2lk IF9faW9tZW0gKnZpb19kYmcwX3JlZywgKnZpb19kYmcxX3JlZzsNCisJc3RydWN0IG10a19kZXZh cGNfdmlvX2RiZ3NfZGVzYyAqdmlvX2RiZ3M7DQorCXN0cnVjdCBtdGtfZGV2YXBjX3Zpb19pbmZv ICp2aW9faW5mbzsNCisJdTMyIGRiZzA7DQorDQorCXZpb19kYmcwX3JlZyA9IG10a19kZXZhcGNf cGRfZ2V0KGRldmFwY19jdHgsIHNsYXZlX3R5cGUsIFZJT19EQkcwLCAwKTsNCisJdmlvX2RiZzFf cmVnID0gbXRrX2RldmFwY19wZF9nZXQoZGV2YXBjX2N0eCwgc2xhdmVfdHlwZSwgVklPX0RCRzEs IDApOw0KKw0KKwl2aW9fZGJncyA9IGRldmFwY19jdHgtPnZpb19kYmdzX2Rlc2M7DQorCXZpb19p bmZvID0gZGV2YXBjX2N0eC0+dmlvX2luZm87DQorDQorCS8qIEV4dHJhY3QgdmlvbGF0aW9uIGlu Zm9ybWF0aW9uICovDQorCWRiZzAgPSByZWFkbCh2aW9fZGJnMF9yZWcpOw0KKwl2aW9faW5mby0+ dmlvX2FkZHIgPSByZWFkbCh2aW9fZGJnMV9yZWcpOw0KKw0KKwl2aW9faW5mby0+bWFzdGVyX2lk ID0gKGRiZzAgJiB2aW9fZGJnc1tNU1RJRF0ubWFzaykgPj4NCisJCQkgICAgICB2aW9fZGJnc1tN U1RJRF0uc3RhcnRfYml0Ow0KKwl2aW9faW5mby0+ZG9tYWluX2lkID0gKGRiZzAgJiB2aW9fZGJn c1tETU5JRF0ubWFzaykgPj4NCisJCQkgICAgICB2aW9fZGJnc1tETU5JRF0uc3RhcnRfYml0Ow0K Kwl2aW9faW5mby0+d3JpdGUgPSAoKGRiZzAgJiB2aW9fZGJnc1tWSU9fV10ubWFzaykgPj4NCisJ CQkgICB2aW9fZGJnc1tWSU9fV10uc3RhcnRfYml0KSA9PSAxOw0KKwl2aW9faW5mby0+cmVhZCA9 ICgoZGJnMCAmIHZpb19kYmdzW1ZJT19SXS5tYXNrKSA+Pg0KKwkJCSAgdmlvX2RiZ3NbVklPX1Jd LnN0YXJ0X2JpdCkgPT0gMTsNCisJdmlvX2luZm8tPnZpb19hZGRyX2hpZ2ggPSAoZGJnMCAmIHZp b19kYmdzW0FERFJfSF0ubWFzaykgPj4NCisJCQkJICB2aW9fZGJnc1tBRERSX0hdLnN0YXJ0X2Jp dDsNCisNCisJZGV2YXBjX3Zpb19pbmZvX3ByaW50KGRldmFwY19jdHgpOw0KK30NCisNCisvKg0K KyAqIG10a19kZXZhcGNfZHVtcF92aW9fZGJnIC0gc2hpZnQgJiBkdW1wIHRoZSB2aW9sYXRpb24g ZGVidWcgaW5mb3JtYXRpb24uDQorICovDQorc3RhdGljIGJvb2wgbXRrX2RldmFwY19kdW1wX3Zp b19kYmcoc3RydWN0IG10a19kZXZhcGNfY29udGV4dCAqZGV2YXBjX2N0eCwNCisJCQkJICAgIGlu dCBzbGF2ZV90eXBlLCBpbnQgKnZpb19pZHgpDQorew0KKwljb25zdCBzdHJ1Y3QgbXRrX2Rldmlj ZV9pbmZvICoqZGV2aWNlX2luZm87DQorCXUzMiBzaGlmdF9iaXQ7DQorCWludCBpOw0KKw0KKwlk ZXZpY2VfaW5mbyA9IGRldmFwY19jdHgtPmRldmljZV9pbmZvOw0KKw0KKwlmb3IgKGkgPSAwOyBp IDwgZ2V0X3Zpb19zbGF2ZV9udW0oc2xhdmVfdHlwZSk7IGkrKykgew0KKwkJKnZpb19pZHggPSBk ZXZpY2VfaW5mb1tzbGF2ZV90eXBlXVtpXS52aW9faW5kZXg7DQorDQorCQlpZiAoY2hlY2tfdmlv X21hc2soZGV2YXBjX2N0eCwgc2xhdmVfdHlwZSwgKnZpb19pZHgpKQ0KKwkJCWNvbnRpbnVlOw0K Kw0KKwkJaWYgKCFjaGVja192aW9fc3RhdHVzKGRldmFwY19jdHgsIHNsYXZlX3R5cGUsICp2aW9f aWR4KSkNCisJCQljb250aW51ZTsNCisNCisJCXNoaWZ0X2JpdCA9IGdldF9zaGlmdF9ncm91cChk ZXZhcGNfY3R4LCBzbGF2ZV90eXBlLCAqdmlvX2lkeCk7DQorDQorCQlpZiAoIXN5bmNfdmlvX2Ri ZyhkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLCBzaGlmdF9iaXQpKQ0KKwkJCWNvbnRpbnVlOw0KKw0K KwkJZGV2YXBjX2V4dHJhY3RfdmlvX2RiZyhkZXZhcGNfY3R4LCBzbGF2ZV90eXBlKTsNCisNCisJ CXJldHVybiB0cnVlOw0KKwl9DQorDQorCXJldHVybiBmYWxzZTsNCit9DQorDQorLyoNCisgKiBk ZXZhcGNfdmlvbGF0aW9uX2lycSAtIHRoZSBkZXZhcGMgSW50ZXJydXB0IFNlcnZpY2UgUm91dGlu ZSAoSVNSKSB3aWxsIGR1bXANCisgKgkJCSAgdmlvbGF0aW9uIGluZm9ybWF0aW9uIGluY2x1ZGlu ZyB3aGljaCBtYXN0ZXIgdmlvbGF0ZXMNCisgKgkJCSAgYWNjZXNzIHNsYXZlLg0KKyAqLw0KK3N0 YXRpYyBpcnFyZXR1cm5fdCBkZXZhcGNfdmlvbGF0aW9uX2lycShpbnQgaXJxX251bWJlciwNCisJ CQkJCXN0cnVjdCBtdGtfZGV2YXBjX2NvbnRleHQgKmRldmFwY19jdHgpDQorew0KKwljb25zdCBz dHJ1Y3QgbXRrX2RldmljZV9pbmZvICoqZGV2aWNlX2luZm87DQorCWludCBzbGF2ZV90eXBlX251 bTsNCisJaW50IHZpb19pZHggPSAtMTsNCisJaW50IHNsYXZlX3R5cGU7DQorDQorCXNsYXZlX3R5 cGVfbnVtID0gZGV2YXBjX2N0eC0+c2xhdmVfdHlwZV9udW07DQorCWRldmljZV9pbmZvID0gZGV2 YXBjX2N0eC0+ZGV2aWNlX2luZm87DQorDQorCWZvciAoc2xhdmVfdHlwZSA9IDA7IHNsYXZlX3R5 cGUgPCBzbGF2ZV90eXBlX251bTsgc2xhdmVfdHlwZSsrKSB7DQorCQlpZiAoIW10a19kZXZhcGNf ZHVtcF92aW9fZGJnKGRldmFwY19jdHgsIHNsYXZlX3R5cGUsICZ2aW9faWR4KSkNCisJCQljb250 aW51ZTsNCisNCisJCS8qIEVuc3VyZSB0aGF0IHZpb2xhdGlvbiBpbmZvIGFyZSB3cml0dGVuIGJl Zm9yZQ0KKwkJICogZnVydGhlciBvcGVyYXRpb25zDQorCQkgKi8NCisJCXNtcF9tYigpOw0KKw0K KwkJbWFza19tb2R1bGVfaXJxKGRldmFwY19jdHgsIHNsYXZlX3R5cGUsIHZpb19pZHgsIHRydWUp Ow0KKw0KKwkJY2xlYXJfdmlvX3N0YXR1cyhkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLCB2aW9faWR4 KTsNCisNCisJCW1hc2tfbW9kdWxlX2lycShkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLCB2aW9faWR4 LCBmYWxzZSk7DQorCX0NCisNCisJcmV0dXJuIElSUV9IQU5ETEVEOw0KK30NCisNCisvKg0KKyAq IHN0YXJ0X2RldmFwYyAtIGluaXRpYWxpemUgZGV2YXBjIHN0YXR1cyBhbmQgc3RhcnQgcmVjZWl2 aW5nIGludGVycnVwdA0KKyAqCQkgIHdoaWxlIGRldmFwYyB2aW9sYXRpb24gaXMgdHJpZ2dlcmVk Lg0KKyAqLw0KK3N0YXRpYyB2b2lkIHN0YXJ0X2RldmFwYyhzdHJ1Y3QgbXRrX2RldmFwY19jb250 ZXh0ICpkZXZhcGNfY3R4KQ0KK3sNCisJY29uc3Qgc3RydWN0IG10a19kZXZpY2VfaW5mbyAqKmRl dmljZV9pbmZvOw0KKwl2b2lkIF9faW9tZW0gKnBkX3Zpb19zaGlmdF9zdGFfcmVnOw0KKwl2b2lk IF9faW9tZW0gKnBkX2FwY19jb25fcmVnOw0KKwl1MzIgdmlvX3NoaWZ0X3N0YTsNCisJaW50IHNs YXZlX3R5cGUsIHNsYXZlX3R5cGVfbnVtOw0KKwlpbnQgaSwgdmlvX2lkeDsNCisNCisJZGV2aWNl X2luZm8gPSBkZXZhcGNfY3R4LT5kZXZpY2VfaW5mbzsNCisJc2xhdmVfdHlwZV9udW0gPSBkZXZh cGNfY3R4LT5zbGF2ZV90eXBlX251bTsNCisNCisJZm9yIChzbGF2ZV90eXBlID0gMDsgc2xhdmVf dHlwZSA8IHNsYXZlX3R5cGVfbnVtOyBzbGF2ZV90eXBlKyspIHsNCisJCXBkX2FwY19jb25fcmVn ID0gbXRrX2RldmFwY19wZF9nZXQoZGV2YXBjX2N0eCwgc2xhdmVfdHlwZSwNCisJCQkJCQkgICBB UENfQ09OLCAwKTsNCisJCXBkX3Zpb19zaGlmdF9zdGFfcmVnID0gbXRrX2RldmFwY19wZF9nZXQo ZGV2YXBjX2N0eCwgc2xhdmVfdHlwZSwNCisJCQkJCQkJIFZJT19TSElGVF9TVEEsIDApOw0KKwkJ aWYgKCFwZF9hcGNfY29uX3JlZyB8fCAhcGRfdmlvX3NoaWZ0X3N0YV9yZWcpDQorCQkJcmV0dXJu Ow0KKw0KKwkJLyogQ2xlYXIgZGV2YXBjIHZpb2xhdGlvbiBzdGF0dXMgKi8NCisJCXdyaXRlbChC SVQoMzEpLCBwZF9hcGNfY29uX3JlZyk7DQorDQorCQkvKiBDbGVhciB2aW9sYXRpb24gc2hpZnQg c3RhdHVzICovDQorCQl2aW9fc2hpZnRfc3RhID0gcmVhZGwocGRfdmlvX3NoaWZ0X3N0YV9yZWcp Ow0KKwkJaWYgKHZpb19zaGlmdF9zdGEpDQorCQkJd3JpdGVsKHZpb19zaGlmdF9zdGEsIHBkX3Zp b19zaGlmdF9zdGFfcmVnKTsNCisNCisJCS8qIENsZWFyIHNsYXZlIHZpb2xhdGlvbiBzdGF0dXMg Ki8NCisJCWZvciAoaSA9IDA7IGkgPCBnZXRfdmlvX3NsYXZlX251bShzbGF2ZV90eXBlKTsgaSsr KSB7DQorCQkJdmlvX2lkeCA9IGRldmljZV9pbmZvW3NsYXZlX3R5cGVdW2ldLnZpb19pbmRleDsN CisNCisJCQljbGVhcl92aW9fc3RhdHVzKGRldmFwY19jdHgsIHNsYXZlX3R5cGUsIHZpb19pZHgp Ow0KKw0KKwkJCW1hc2tfbW9kdWxlX2lycShkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLCB2aW9faWR4 LCBmYWxzZSk7DQorCQl9DQorCX0NCit9DQorDQorc3RhdGljIGludCBtdGtfZGV2YXBjX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQorew0KKwlzdHJ1Y3QgZGV2aWNlX25vZGUg Km5vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsNCisJc3RydWN0IG10a19kZXZhcGNfY29udGV4dCAq ZGV2YXBjX2N0eDsNCisJc3RydWN0IGNsayAqZGV2YXBjX2luZnJhX2NsazsNCisJdTMyIHZpb19k YmdzX251bSwgcGRzX251bTsNCisJdTggc2xhdmVfdHlwZV9udW07DQorCXUzMiBkZXZhcGNfaXJx Ow0KKwlzaXplX3Qgc2l6ZTsNCisJaW50IGksIHJldDsNCisNCisJaWYgKElTX0VSUihub2RlKSkN CisJCXJldHVybiAtRU5PREVWOw0KKw0KKwlkZXZhcGNfY3R4ID0gZGV2bV9remFsbG9jKCZwZGV2 LT5kZXYsIHNpemVvZihzdHJ1Y3QgbXRrX2RldmFwY19jb250ZXh0KSwNCisJCQkJICBHRlBfS0VS TkVMKTsNCisJaWYgKCFkZXZhcGNfY3R4KQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCWlmIChv Zl9wcm9wZXJ0eV9yZWFkX3U4KG5vZGUsICJtZWRpYXRlay1zbHZfdHlwZV9udW0iLCAmc2xhdmVf dHlwZV9udW0pKQ0KKwkJcmV0dXJuIC1FTlhJTzsNCisNCisJZGV2YXBjX2N0eC0+c2xhdmVfdHlw ZV9udW0gPSBzbGF2ZV90eXBlX251bTsNCisNCisJc2l6ZSA9IHNsYXZlX3R5cGVfbnVtICogc2l6 ZW9mKHZvaWQgKik7DQorCWRldmFwY19jdHgtPmRldmFwY19wZF9iYXNlID0gZGV2bV9remFsbG9j KCZwZGV2LT5kZXYsIHNpemUsIEdGUF9LRVJORUwpOw0KKwlpZiAoIWRldmFwY19jdHgtPmRldmFw Y19wZF9iYXNlKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCXNpemUgPSBzbGF2ZV90eXBlX251 bSAqIHNpemVvZihzdHJ1Y3QgbXRrX2RldmljZV9pbmZvICopOw0KKwlkZXZhcGNfY3R4LT5kZXZp Y2VfaW5mbyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplLCBHRlBfS0VSTkVMKTsNCisJ aWYgKCFkZXZhcGNfY3R4LT5kZXZpY2VfaW5mbykNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwlm b3IgKGkgPSAwOyBpIDwgc2xhdmVfdHlwZV9udW07IGkrKykgew0KKwkJZGV2YXBjX2N0eC0+ZGV2 YXBjX3BkX2Jhc2VbaV0gPSBvZl9pb21hcChub2RlLCBpKTsNCisJCWlmICghZGV2YXBjX2N0eC0+ ZGV2YXBjX3BkX2Jhc2VbaV0pDQorCQkJcmV0dXJuIC1FSU5WQUw7DQorDQorCQlpZiAoaSA9PSAw KQ0KKwkJCWRldmFwY19jdHgtPmRldmljZV9pbmZvW2ldID0gbXRrX2RldmljZXNfaW5mcmE7DQor CX0NCisNCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXRrX2RldmFwY192aW9faW5mbyk7DQorCWRl dmFwY19jdHgtPnZpb19pbmZvID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemUsIEdGUF9L RVJORUwpOw0KKwlpZiAoIWRldmFwY19jdHgtPnZpb19pbmZvKQ0KKwkJcmV0dXJuIC1FTk9NRU07 DQorDQorCXZpb19kYmdzX251bSA9IG9mX3Byb3BlcnR5X2NvdW50X3UzMl9lbGVtcyhub2RlLCAi bWVkaWF0ZWstdmlvX2RiZ3MiKTsNCisJaWYgKHZpb19kYmdzX251bSA8PSAwKQ0KKwkJcmV0dXJu IC1FTlhJTzsNCisNCisJc2l6ZSA9ICh2aW9fZGJnc19udW0gLyAyKSAqIHNpemVvZihzdHJ1Y3Qg bXRrX2RldmFwY192aW9fZGJnc19kZXNjKTsNCisJZGV2YXBjX2N0eC0+dmlvX2RiZ3NfZGVzYyA9 IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFkZXZh cGNfY3R4LT52aW9fZGJnc19kZXNjKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCWZvciAoaSA9 IDA7IGkgPCB2aW9fZGJnc19udW0gLyAyOyBpKyspIHsNCisJCWlmIChvZl9wcm9wZXJ0eV9yZWFk X3UzMl9pbmRleChub2RlLCAibWVkaWF0ZWstdmlvX2RiZ3MiLA0KKwkJCQkJICAgICAgIGkgKiAy LA0KKwkJCQkJICAgICAgICZkZXZhcGNfY3R4LT52aW9fZGJnc19kZXNjW2ldLm1hc2spKQ0KKwkJ CXJldHVybiAtRU5YSU87DQorDQorCQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgobm9k ZSwgIm1lZGlhdGVrLXZpb19kYmdzIiwNCisJCQkJCSAgICAgICAoaSAqIDIpICsgMSwNCisJCQkJ CSAgICAgICAmZGV2YXBjX2N0eC0+dmlvX2RiZ3NfZGVzY1tpXS5zdGFydF9iaXQpKQ0KKwkJCXJl dHVybiAtRU5YSU87DQorCX0NCisNCisJcGRzX251bSA9IG9mX3Byb3BlcnR5X2NvdW50X3UzMl9l bGVtcyhub2RlLCAibWVkaWF0ZWstcGRzX29mZnNldCIpOw0KKwlpZiAocGRzX251bSA8PSAwKQ0K KwkJcmV0dXJuIC1FTlhJTzsNCisNCisJc2l6ZSA9IHBkc19udW0gKiBzaXplb2YodTMyKTsNCisJ ZGV2YXBjX2N0eC0+cGRzX29mZnNldCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplLCBH RlBfS0VSTkVMKTsNCisJaWYgKCFkZXZhcGNfY3R4LT5wZHNfb2Zmc2V0KQ0KKwkJcmV0dXJuIC1F Tk9NRU07DQorDQorCWZvciAoaSA9IDA7IGkgPCBwZHNfbnVtOyBpKyspIHsNCisJCWlmIChvZl9w cm9wZXJ0eV9yZWFkX3UzMl9pbmRleChub2RlLCAibWVkaWF0ZWstcGRzX29mZnNldCIsIGksDQor CQkJCQkgICAgICAgJmRldmFwY19jdHgtPnBkc19vZmZzZXRbaV0pKQ0KKwkJCXJldHVybiAtRU5Y SU87DQorCX0NCisNCisJZGV2YXBjX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5vZGUsIDAp Ow0KKwlpZiAoIWRldmFwY19pcnEpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJZGV2YXBjX2lu ZnJhX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAiZGV2YXBjLWluZnJhLWNsb2NrIik7 DQorCWlmIChJU19FUlIoZGV2YXBjX2luZnJhX2NsaykpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisN CisJaWYgKGNsa19wcmVwYXJlX2VuYWJsZShkZXZhcGNfaW5mcmFfY2xrKSkNCisJCXJldHVybiAt RUlOVkFMOw0KKw0KKwlzdGFydF9kZXZhcGMoZGV2YXBjX2N0eCk7DQorDQorCXJldCA9IGRldm1f cmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgZGV2YXBjX2lycSwNCisJCQkgICAgICAgKGlycV9oYW5k bGVyX3QpZGV2YXBjX3Zpb2xhdGlvbl9pcnEsDQorCQkJICAgICAgIElSUUZfVFJJR0dFUl9OT05F LCAiZGV2YXBjIiwgZGV2YXBjX2N0eCk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0K KwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBtdGtfZGV2YXBjX3JlbW92ZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpkZXYpDQorew0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGNv bnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2RldmFwY19kdF9tYXRjaFtdID0gew0KKwl7IC5j b21wYXRpYmxlID0gIm1lZGlhdGVrLG10Njc3OS1kZXZhcGMiIH0sDQorCXt9LA0KK307DQorDQor c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RldmFwY19kcml2ZXIgPSB7DQorCS5w cm9iZSA9IG10a19kZXZhcGNfcHJvYmUsDQorCS5yZW1vdmUgPSBtdGtfZGV2YXBjX3JlbW92ZSwN CisJLmRyaXZlciA9IHsNCisJCS5uYW1lID0gS0JVSUxEX01PRE5BTUUsDQorCQkub2ZfbWF0Y2hf dGFibGUgPSBtdGtfZGV2YXBjX2R0X21hdGNoLA0KKwl9LA0KK307DQorDQorbW9kdWxlX3BsYXRm b3JtX2RyaXZlcihtdGtfZGV2YXBjX2RyaXZlcik7DQorDQorTU9EVUxFX0RFU0NSSVBUSU9OKCJN ZWRpYXRlayBEZXZpY2UgQVBDIERyaXZlciIpOw0KK01PRFVMRV9BVVRIT1IoIk5lYWwgTGl1IDxu ZWFsLmxpdUBtZWRpYXRlay5jb20+Iik7DQorTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvc29jL21lZGlhdGVrL210ay1kZXZhcGMuaCBiL2RyaXZlcnMvc29jL21l ZGlhdGVrL210ay1kZXZhcGMuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAu LmFiMmNiMTQNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvc29jL21lZGlhdGVrL210ay1k ZXZhcGMuaA0KQEAgLTAsMCArMSw2NzAgQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMCAqLw0KKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDIwIE1lZGlhVGVrIEluYy4NCisg Ki8NCisNCisjaWZuZGVmIF9fTVRLX0RFVkFQQ19IX18NCisjZGVmaW5lIF9fTVRLX0RFVkFQQ19I X18NCisNCisjZGVmaW5lIFBGWAkJCSJbREVWQVBDXTogIg0KKw0KKyNkZWZpbmUgVklPX01BU0tf U1RBX1JFR19HRVQobSkgXA0KKyh7IFwNCisJdHlwZW9mKG0pIChfbSkgPSAobSk7IFwNCisJcmVn X2luZGV4ID0gX20gLyAzMjsgXA0KKwlyZWdfb2Zmc2V0ID0gX20gJSAzMjsgXA0KK30pDQorDQor ZW51bSBERVZBUENfUERfUkVHX1RZUEUgew0KKwlWSU9fTUFTSyA9IDAsDQorCVZJT19TVEEsDQor CVZJT19EQkcwLA0KKwlWSU9fREJHMSwNCisJQVBDX0NPTiwNCisJVklPX1NISUZUX1NUQSwNCisJ VklPX1NISUZUX1NFTCwNCisJVklPX1NISUZUX0NPTiwNCisJUERfUkVHX1RZUEVfTlVNLA0KK307 DQorDQorZW51bSBERVZBUENfVklPX0RCR1NfVFlQRSB7DQorCU1TVElEID0gMCwNCisJRE1OSUQs DQorCVZJT19XLA0KKwlWSU9fUiwNCisJQUREUl9ILA0KK307DQorDQorc3RydWN0IG10a19kZXZp Y2VfaW5mbyB7DQorCWludCBzeXNfaW5kZXg7DQorCWludCBjdHJsX2luZGV4Ow0KKwlpbnQgdmlv X2luZGV4Ow0KK307DQorDQorc3RhdGljIHN0cnVjdCBtdGtfZGV2aWNlX2luZm8gbXRrX2Rldmlj ZXNfaW5mcmFbXSA9IHsNCisJLyogc3lzX2lkeCwgY3RybF9pZHgsIHZpb19pZHggKi8NCisJLyog MCAqLw0KKwl7MCwgMCwgMH0sDQorCXswLCAxLCAxfSwNCisJezAsIDIsIDJ9LA0KKwl7MCwgMywg M30sDQorCXswLCA0LCA0fSwNCisJezAsIDUsIDV9LA0KKwl7MCwgNiwgNn0sDQorCXswLCA3LCA3 fSwNCisJezAsIDgsIDh9LA0KKwl7MCwgOSwgOX0sDQorDQorCS8qIDEwICovDQorCXswLCAxMCwg MTB9LA0KKwl7MCwgMTEsIDExfSwNCisJezAsIDEyLCAxMn0sDQorCXswLCAxMywgMTN9LA0KKwl7 MCwgMTQsIDE0fSwNCisJezAsIDE1LCAxNX0sDQorCXswLCAxNiwgMTZ9LA0KKwl7MCwgMTcsIDE3 fSwNCisJezAsIDE4LCAxOH0sDQorCXswLCAxOSwgMTl9LA0KKw0KKwkvKiAyMCAqLw0KKwl7MCwg MjAsIDIwfSwNCisJezAsIDIxLCAyMX0sDQorCXswLCAyMiwgMjJ9LA0KKwl7MCwgMjMsIDIzfSwN CisJezAsIDI0LCAyNH0sDQorCXswLCAyNSwgMjV9LA0KKwl7MCwgMjYsIDI2fSwNCisJezAsIDI3 LCAyN30sDQorCXswLCAyOCwgMjh9LA0KKwl7MCwgMjksIDI5fSwNCisNCisJLyogMzAgKi8NCisJ ezAsIDMwLCAzMH0sDQorCXswLCAzMSwgMzF9LA0KKwl7MCwgMzIsIDMyfSwNCisJezAsIDMzLCA3 N30sDQorCXswLCAzNCwgNzh9LA0KKwl7MCwgMzUsIDc5fSwNCisJezAsIDM1LCA4MH0sDQorCXsw LCAzNywgMzd9LA0KKwl7MCwgMzgsIDM4fSwNCisJezAsIDM5LCAzOX0sDQorDQorCS8qIDQwICov DQorCXswLCA0MCwgNDB9LA0KKwl7MCwgNDEsIDQxfSwNCisJezAsIDQyLCA0Mn0sDQorCXswLCA0 MywgNDN9LA0KKwl7MCwgNDQsIDQ0fSwNCisJezAsIDQ1LCA0NX0sDQorCXswLCA0NiwgNDZ9LA0K Kwl7MCwgNDcsIDQ3fSwNCisJezAsIDQ4LCA0OH0sDQorCXswLCA0OSwgNDl9LA0KKw0KKwkvKiA1 MCAqLw0KKwl7MCwgNTAsIDUwfSwNCisJezAsIDUxLCA1MX0sDQorCXswLCA1MiwgNTJ9LA0KKwl7 MCwgNTMsIDUzfSwNCisJezAsIDU0LCA1NH0sDQorCXswLCA1NSwgNTV9LA0KKwl7MCwgNTYsIDU2 fSwNCisJezAsIDU3LCA1N30sDQorCXswLCA1OCwgNTh9LA0KKwl7MCwgNTksIDU5fSwNCisNCisJ LyogNjAgKi8NCisJezAsIDYwLCA2MH0sDQorCXswLCA2MSwgNjF9LA0KKwl7MCwgNjIsIDYyfSwN CisJezAsIDYzLCA2M30sDQorCXswLCA2NCwgNjR9LA0KKwl7MCwgNjUsIDcwfSwNCisJezAsIDY2 LCA3MX0sDQorCXswLCA2NywgNzJ9LA0KKwl7MCwgNjgsIDczfSwNCisJezAsIDcwLCA4MX0sDQor DQorCS8qIDcwICovDQorCXswLCA3MSwgODJ9LA0KKwl7MCwgNzIsIDgzfSwNCisJezAsIDczLCA4 NH0sDQorCXswLCA3NCwgODV9LA0KKwl7MCwgNzUsIDg2fSwNCisJezAsIDc2LCA4N30sDQorCXsw LCA3NywgODh9LA0KKwl7MCwgNzgsIDg5fSwNCisJezAsIDc5LCA5MH0sDQorCXswLCA4MCwgOTF9 LA0KKw0KKwkvKiA4MCAqLw0KKwl7MCwgODEsIDkyfSwNCisJezAsIDgyLCA5M30sDQorCXswLCA4 MywgOTR9LA0KKwl7MCwgODQsIDk1fSwNCisJezAsIDg1LCA5Nn0sDQorCXswLCA4NiwgOTd9LA0K Kwl7MCwgODcsIDk4fSwNCisJezAsIDg4LCA5OX0sDQorCXswLCA4OSwgMTAwfSwNCisJezAsIDkw LCAxMDF9LA0KKw0KKwkvKiA5MCAqLw0KKwl7MCwgOTEsIDEwMn0sDQorCXswLCA5MiwgMTAzfSwN CisJezAsIDkzLCAxMDR9LA0KKwl7MCwgOTQsIDEwNX0sDQorCXswLCA5NSwgMTA2fSwNCisJezAs IDk2LCAxMDd9LA0KKwl7MCwgOTcsIDEwOH0sDQorCXswLCA5OCwgMTA5fSwNCisJezAsIDExMCwg MTEwfSwNCisJezAsIDExMSwgMTExfSwNCisNCisJLyogMTAwICovDQorCXswLCAxMTIsIDExMn0s DQorCXswLCAxMTMsIDExM30sDQorCXswLCAxMTQsIDExNH0sDQorCXswLCAxMTUsIDExNX0sDQor CXswLCAxMTYsIDExNn0sDQorCXswLCAxMTcsIDExN30sDQorCXswLCAxMTgsIDExOH0sDQorCXsw LCAxMTksIDExOX0sDQorCXswLCAxMjAsIDEyMH0sDQorCXswLCAxMjEsIDEyMX0sDQorDQorCS8q IDExMCAqLw0KKwl7MCwgMTIyLCAxMjJ9LA0KKwl7MCwgMTIzLCAxMjN9LA0KKwl7MCwgMTI0LCAx MjR9LA0KKwl7MCwgMTI1LCAxMjV9LA0KKwl7MCwgMTI2LCAxMjZ9LA0KKwl7MCwgMTI3LCAxMjd9 LA0KKwl7MCwgMTI4LCAxMjh9LA0KKwl7MCwgMTI5LCAxMjl9LA0KKwl7MCwgMTMwLCAxMzB9LA0K Kwl7MCwgMTMxLCAxMzF9LA0KKw0KKwkvKiAxMjAgKi8NCisJezAsIDEzMiwgMTMyfSwNCisJezAs IDEzMywgMTMzfSwNCisJezAsIDEzNCwgMTM0fSwNCisJezAsIDEzNSwgMTM1fSwNCisJezAsIDEz NiwgMTM2fSwNCisJezAsIDEzNywgMTM3fSwNCisJezAsIDEzOCwgMTM4fSwNCisJezAsIDEzOSwg MTM5fSwNCisJezAsIDE0MCwgMTQwfSwNCisJezAsIDE0MSwgMTQxfSwNCisNCisJLyogMTMwICov DQorCXswLCAxNDIsIDE0Mn0sDQorCXswLCAxNDMsIDE0M30sDQorCXswLCAxNDQsIDE0NH0sDQor CXswLCAxNDUsIDE0NX0sDQorCXswLCAxNDYsIDE0Nn0sDQorCXswLCAxNDcsIDE0N30sDQorCXsw LCAxNDgsIDE0OH0sDQorCXswLCAxNDksIDE0OX0sDQorCXswLCAxNTAsIDE1MH0sDQorCXswLCAx NTEsIDE1MX0sDQorDQorCS8qIDE0MCAqLw0KKwl7MCwgMTUyLCAxNTJ9LA0KKwl7MCwgMTUzLCAx NTN9LA0KKwl7MCwgMTU0LCAxNTR9LA0KKwl7MCwgMTU1LCAxNTV9LA0KKwl7MCwgMTU2LCAxNTZ9 LA0KKwl7MCwgMTU3LCAxNTd9LA0KKwl7MCwgMTU4LCAxNTh9LA0KKwl7MCwgMTU5LCAxNTl9LA0K Kwl7MCwgMTYwLCAxNjB9LA0KKwl7MCwgMTYxLCAxNjF9LA0KKw0KKwkvKiAxNTAgKi8NCisJezAs IDE2MiwgMTYyfSwNCisJezAsIDE2MywgMTYzfSwNCisJezAsIDE2NCwgMTY0fSwNCisJezAsIDE2 NSwgMTY1fSwNCisJezAsIDE2NiwgMTY2fSwNCisJezAsIDE2NywgMTY3fSwNCisJezAsIDE2OCwg MTY4fSwNCisJezAsIDE2OSwgMTY5fSwNCisJezAsIDE3MCwgMTcwfSwNCisJezAsIDE3MSwgMTcx fSwNCisNCisJLyogMTYwICovDQorCXswLCAxNzIsIDE3Mn0sDQorCXswLCAxNzMsIDE3M30sDQor CXswLCAxNzQsIDE3NH0sDQorCXswLCAxNzUsIDE3NX0sDQorCXswLCAxNzYsIDE3Nn0sDQorCXsw LCAxNzcsIDE3N30sDQorCXswLCAxNzgsIDE3OH0sDQorCXswLCAxNzksIDE3OX0sDQorCXswLCAx ODAsIDE4MH0sDQorCXswLCAxODEsIDE4MX0sDQorDQorCS8qIDE3MCAqLw0KKwl7MCwgMTgyLCAx ODJ9LA0KKwl7MCwgMTgzLCAxODN9LA0KKwl7MCwgMTg0LCAxODR9LA0KKwl7MCwgMTg1LCAxODV9 LA0KKwl7MCwgMTg2LCAxODZ9LA0KKwl7MCwgMTg3LCAxODd9LA0KKwl7MCwgMTg4LCAxODh9LA0K Kwl7MCwgMTg5LCAxODl9LA0KKwl7MCwgMTkwLCAxOTB9LA0KKwl7MCwgMTkxLCAxOTF9LA0KKw0K KwkvKiAxODAgKi8NCisJezAsIDE5MiwgMTkyfSwNCisJezAsIDE5MywgMTkzfSwNCisJezAsIDE5 NCwgMTk0fSwNCisJezAsIDE5NSwgMTk1fSwNCisJezAsIDE5NiwgMTk2fSwNCisJezAsIDE5Nywg MTk3fSwNCisJezAsIDE5OCwgMTk4fSwNCisJezAsIDE5OSwgMTk5fSwNCisJezAsIDIwMCwgMjAw fSwNCisJezAsIDIwMSwgMjAxfSwNCisNCisJLyogMTkwICovDQorCXswLCAyMDIsIDIwMn0sDQor CXswLCAyMDMsIDIwM30sDQorCXswLCAyMDQsIDIwNH0sDQorCXswLCAyMDUsIDIwNX0sDQorCXsw LCAyMDYsIDIwNn0sDQorCXswLCAyMDcsIDIwN30sDQorCXswLCAyMDgsIDIwOH0sDQorCXswLCAy MDksIDIwOX0sDQorCXswLCAyMTAsIDIxMH0sDQorCXswLCAyMTEsIDIxMX0sDQorDQorCS8qIDIw MCAqLw0KKwl7MCwgMjEyLCAyMTJ9LA0KKwl7MCwgMjEzLCAyMTN9LA0KKwl7MCwgMjE0LCAyMTR9 LA0KKwl7MCwgMjE1LCAyMTV9LA0KKwl7MCwgMjE2LCAyMTZ9LA0KKwl7MCwgMjE3LCAyMTd9LA0K Kwl7MCwgMjE4LCAyMTh9LA0KKwl7MCwgMjE5LCAyMTl9LA0KKwl7MCwgMjIwLCAyMjB9LA0KKwl7 MCwgMjIxLCAyMjF9LA0KKw0KKwkvKiAyMTAgKi8NCisJezAsIDIyMiwgMjIyfSwNCisJezAsIDIy MywgMjIzfSwNCisJezAsIDIyNCwgMjI0fSwNCisJezAsIDIyNSwgMjI1fSwNCisJezAsIDIyNiwg MjI2fSwNCisJezAsIDIyNywgMjI3fSwNCisJezAsIDIyOCwgMjI4fSwNCisJezAsIDIyOSwgMjI5 fSwNCisJezAsIDIzMCwgMjMwfSwNCisJezAsIDIzMSwgMjMxfSwNCisNCisJLyogMjIwICovDQor CXsxLCAwLCAyMzJ9LA0KKwl7MSwgMSwgMjMzfSwNCisJezEsIDIsIDIzNH0sDQorCXsxLCAzLCAy MzV9LA0KKwl7MSwgNCwgMjM2fSwNCisJezEsIDUsIDIzN30sDQorCXsxLCA2LCAyMzh9LA0KKwl7 MSwgNywgMjM5fSwNCisJezEsIDgsIDI0MH0sDQorCXsxLCA5LCAyNDF9LA0KKw0KKwkvKiAyMzAg Ki8NCisJezEsIDEwLCAyNDJ9LA0KKwl7MSwgMTEsIDI0M30sDQorCXsxLCAxMiwgMjQ0fSwNCisJ ezEsIDEzLCAyNDV9LA0KKwl7MSwgMTQsIDI0Nn0sDQorCXsxLCAxNSwgMjQ3fSwNCisJezEsIDE2 LCAyNDh9LA0KKwl7MSwgMTcsIDI0OX0sDQorCXsxLCAxOCwgMjUwfSwNCisJezEsIDE5LCAyNTF9 LA0KKw0KKwkvKiAyNDAgKi8NCisJezEsIDIwLCAyNTJ9LA0KKwl7MSwgMjEsIDI1M30sDQorCXsx LCAyMiwgMjU0fSwNCisJezEsIDIzLCAyNTV9LA0KKwl7MSwgMjQsIDI1Nn0sDQorCXsxLCAyNSwg MjU3fSwNCisJezEsIDI2LCAyNTh9LA0KKwl7MSwgMjcsIDI1OX0sDQorCXsxLCAyOCwgMjYwfSwN CisJezEsIDI5LCAyNjF9LA0KKw0KKwkvKiAyNTAgKi8NCisJezEsIDMwLCAyNjJ9LA0KKwl7MSwg MzEsIDI2M30sDQorCXsxLCAzMiwgMjY0fSwNCisJezEsIDMzLCAyNjV9LA0KKwl7MSwgMzQsIDI2 Nn0sDQorCXsxLCAzNSwgMjY3fSwNCisJezEsIDM2LCAyNjh9LA0KKwl7MSwgMzcsIDI2OX0sDQor CXsxLCAzOCwgMjcwfSwNCisJezEsIDM5LCAyNzF9LA0KKw0KKwkvKiAyNjAgKi8NCisJezEsIDQw LCAyNzJ9LA0KKwl7MSwgNDEsIDI3M30sDQorCXsxLCA0MiwgMjc0fSwNCisJezEsIDQzLCAyNzV9 LA0KKwl7MSwgNDQsIDI3Nn0sDQorCXsxLCA0NSwgMjc3fSwNCisJezEsIDQ2LCAyNzh9LA0KKwl7 MSwgNDcsIDI3OX0sDQorCXsxLCA0OCwgMjgwfSwNCisJezEsIDQ5LCAyODF9LA0KKw0KKwkvKiAy NzAgKi8NCisJezEsIDUwLCAyODJ9LA0KKwl7MSwgNTEsIDI4M30sDQorCXsxLCA1MiwgMjg0fSwN CisJezEsIDUzLCAyODV9LA0KKwl7MSwgNTQsIDI4Nn0sDQorCXsxLCA1NSwgMjg3fSwNCisJezEs IDU2LCAyODh9LA0KKwl7MSwgNTcsIDI4OX0sDQorCXsxLCA1OCwgMjkwfSwNCisJezEsIDU5LCAy OTF9LA0KKw0KKwkvKiAyODAgKi8NCisJezEsIDYwLCAyOTJ9LA0KKwl7MSwgNjEsIDI5M30sDQor CXsxLCA2MiwgMjk0fSwNCisJezEsIDYzLCAyOTV9LA0KKwl7MSwgNjQsIDI5Nn0sDQorCXsxLCA2 NSwgMjk3fSwNCisJezEsIDY2LCAyOTh9LA0KKwl7MSwgNjcsIDI5OX0sDQorCXsxLCA2OCwgMzAw fSwNCisJezEsIDY5LCAzMDF9LA0KKw0KKwkvKiAyOTAgKi8NCisJezEsIDcwLCAzMDJ9LA0KKwl7 MSwgNzEsIDMwM30sDQorCXsxLCA3MiwgMzA0fSwNCisJezEsIDczLCAzMDV9LA0KKwl7MSwgNzQs IDMwNn0sDQorCXsxLCA3NSwgMzA3fSwNCisJezEsIDc2LCAzMDh9LA0KKwl7MSwgNzcsIDMwOX0s DQorCXsxLCA3OCwgMzEwfSwNCisJezEsIDc5LCAzMTF9LA0KKw0KKwkvKiAzMDAgKi8NCisJezEs IDgwLCAzMTJ9LA0KKwl7MSwgODEsIDMxM30sDQorCXsxLCA4MiwgMzE0fSwNCisJezEsIDgzLCAz MTV9LA0KKwl7MSwgODQsIDMxNn0sDQorCXsxLCA4NSwgMzE3fSwNCisJezEsIDg2LCAzMTh9LA0K Kwl7MSwgODcsIDMxOX0sDQorCXsxLCA4OCwgMzIwfSwNCisJezEsIDg5LCAzMjF9LA0KKw0KKwkv KiAzMTAgKi8NCisJezEsIDkwLCAzMjJ9LA0KKwl7MSwgOTEsIDMyM30sDQorCXsxLCA5MiwgMzI0 fSwNCisJezEsIDkzLCAzMjV9LA0KKwl7MSwgOTQsIDMyNn0sDQorCXsxLCA5NSwgMzI3fSwNCisJ ezEsIDk2LCAzMjh9LA0KKwl7MSwgOTcsIDMyOX0sDQorCXsxLCA5OCwgMzMwfSwNCisJezEsIDk5 LCAzMzF9LA0KKw0KKwkvKiAzMjAgKi8NCisJezEsIDEwMCwgMzMyfSwNCisJezEsIDEwMSwgMzMz fSwNCisJezEsIDEwMiwgMzM0fSwNCisJezEsIDEwMywgMzM1fSwNCisJezEsIDEwNCwgMzM2fSwN CisJezEsIDEwNSwgMzM3fSwNCisJezEsIDEwNiwgMzM4fSwNCisJezEsIDEwNywgMzM5fSwNCisJ ezEsIDEwOCwgMzQwfSwNCisJezEsIDEwOSwgMzQxfSwNCisNCisJLyogMzMwICovDQorCXsxLCAx MTAsIDM0Mn0sDQorCXsxLCAxMTEsIDM0M30sDQorCXsxLCAxMTIsIDM0NH0sDQorCXsxLCAxMTMs IDM0NX0sDQorCXsxLCAxMTQsIDM0Nn0sDQorCXsxLCAxMTUsIDM0N30sDQorCXsxLCAxMTYsIDM0 OH0sDQorCXsxLCAxMTcsIDM0OX0sDQorCXsxLCAxMTgsIDM1MH0sDQorCXsxLCAxMTksIDM1MX0s DQorDQorCS8qIDM0MCAqLw0KKwl7MSwgMTIwLCAzNTJ9LA0KKwl7MSwgMTIxLCAzNTN9LA0KKwl7 MSwgMTIyLCAzNTR9LA0KKwl7MSwgMTIzLCAzNTV9LA0KKwl7MSwgMTI0LCAzNTZ9LA0KKwl7MSwg MTI1LCAzNTd9LA0KKwl7MSwgMTI2LCAzNTh9LA0KKwl7MSwgMTI3LCAzNTl9LA0KKwl7MSwgMTI4 LCAzNjB9LA0KKwl7MSwgMTI5LCAzNjF9LA0KKw0KKwkvKiAzNTAgKi8NCisJezEsIDEzMCwgMzYy fSwNCisJezEsIDEzMSwgMzYzfSwNCisJezEsIDEzMiwgMzY0fSwNCisJezEsIDEzMywgMzY1fSwN CisJezEsIDEzNCwgMzY2fSwNCisJezEsIDEzNSwgMzY3fSwNCisJezEsIDEzNiwgMzY4fSwNCisJ ezEsIDEzNywgMzY5fSwNCisJezEsIDEzOCwgMzcwfSwNCisJezEsIDEzOSwgMzcxfSwNCisNCisJ LyogMzYwICovDQorCXsxLCAxNDAsIDM3Mn0sDQorCXsxLCAxNDEsIDM3M30sDQorCXsxLCAxNDIs IDM3NH0sDQorCXsxLCAxNDMsIDM3NX0sDQorCXsxLCAxNDQsIDM3Nn0sDQorCXsxLCAxNDUsIDM3 N30sDQorCXsxLCAxNDYsIDM3OH0sDQorCXsxLCAxNDcsIDM3OX0sDQorCXsxLCAxNDgsIDM4MH0s DQorCXsxLCAxNDksIDM4MX0sDQorDQorCS8qIDM3MCAqLw0KKwl7MSwgMTUwLCAzODJ9LA0KKwl7 MSwgMTUxLCAzODN9LA0KKwl7MSwgMTUyLCAzODR9LA0KKwl7MSwgMTUzLCAzODV9LA0KKwl7MSwg MTU0LCAzODZ9LA0KKwl7MSwgMTU1LCAzODd9LA0KKwl7MSwgMTU2LCAzODh9LA0KKwl7MSwgMTU3 LCAzODl9LA0KKwl7MSwgMTU4LCAzOTB9LA0KKwl7MSwgMTU5LCAzOTF9LA0KKw0KKwkvKiAzODAg Ki8NCisJezEsIDE2MCwgMzkyfSwNCisJezEsIDE2MSwgMzkzfSwNCisJezEsIDE2MiwgMzk0fSwN CisJezEsIDE2MywgMzk1fSwNCisJezEsIDE2NCwgMzk2fSwNCisJezEsIDE2NSwgMzk3fSwNCisJ ezEsIDE2NiwgMzk4fSwNCisJezEsIDE2NywgMzk5fSwNCisJezEsIDE2OCwgNDAwfSwNCisJezEs IDE2OSwgNDAxfSwNCisNCisJLyogMzkwICovDQorCXsxLCAxNzAsIDQwMn0sDQorCXsxLCAxNzEs IDQwM30sDQorCXsxLCAxNzIsIDQwNH0sDQorCXsxLCAxNzMsIDQwNX0sDQorCXsxLCAxNzQsIDQw Nn0sDQorCXsxLCAxNzUsIDQwN30sDQorCXsxLCAxNzYsIDQwOH0sDQorCXsxLCAxNzcsIDQwOX0s DQorCXsxLCAxNzgsIDQxMH0sDQorCXsxLCAxNzksIDQxMX0sDQorDQorCS8qIDQwMCAqLw0KKwl7 MSwgMTgwLCA0MTJ9LA0KKwl7MSwgMTgxLCA0MTN9LA0KKwl7MSwgMTgyLCA0MTR9LA0KKwl7MSwg MTgzLCA0MTV9LA0KKwl7MSwgMTg0LCA0MTZ9LA0KKwl7MSwgMTg1LCA0MTd9LA0KKwl7MSwgMTg2 LCA0MTh9LA0KKwl7MSwgMTg3LCA0MTl9LA0KKwl7MSwgMTg4LCA0MjB9LA0KKwl7MSwgMTg5LCA0 MjF9LA0KKw0KKwkvKiA0MTAgKi8NCisJezEsIDE5MCwgNDIyfSwNCisJezEsIDE5MSwgNDIzfSwN CisJezEsIDE5MiwgNDI0fSwNCisJezEsIDE5MywgNDI1fSwNCisJezEsIDE5NCwgNDI2fSwNCisJ ezEsIDE5NSwgNDI3fSwNCisJezEsIDE5NiwgNDI4fSwNCisJezEsIDE5NywgNDI5fSwNCisJezEs IDE5OCwgNDMwfSwNCisJezEsIDE5OSwgNDMxfSwNCisNCisJLyogNDIwICovDQorCXsxLCAyMDAs IDQzMn0sDQorCXsxLCAyMDEsIDQzM30sDQorCXsxLCAyMDIsIDQzNH0sDQorCXsxLCAyMDMsIDQz NX0sDQorCXsxLCAyMDQsIDQzNn0sDQorCXsxLCAyMDUsIDQzN30sDQorCXsxLCAyMDYsIDQzOH0s DQorCXsxLCAyMDcsIDQzOX0sDQorCXsxLCAyMDgsIDQ0MH0sDQorCXsxLCAyMDksIDQ0MX0sDQor DQorCS8qIDQzMCAqLw0KKwl7MSwgMjEwLCA0NDJ9LA0KKwl7MSwgMjExLCA0NDN9LA0KKwl7MSwg MjEyLCA0NDR9LA0KKwl7MSwgMjEzLCA0NDV9LA0KKwl7MSwgMjE0LCA0NDZ9LA0KKwl7MSwgMjE1 LCA0NDd9LA0KKwl7MSwgMjE2LCA0NDh9LA0KKwl7MSwgMjE3LCA0NDl9LA0KKwl7MSwgMjE4LCA0 NTB9LA0KKwl7MSwgMjE5LCA0NTF9LA0KKw0KKwkvKiA0NDAgKi8NCisJezEsIDIyMCwgNDUyfSwN CisJezEsIDIyMSwgNDUzfSwNCisJezEsIDIyMiwgNDU0fSwNCisJezEsIDIyMywgNDU1fSwNCisJ ezEsIDIyNCwgNDU2fSwNCisJezEsIDIyNSwgNDU3fSwNCisJezEsIDIyNiwgNDU4fSwNCisJezEs IDIyNywgNDU5fSwNCisJezEsIDIyOCwgNDYwfSwNCisJezEsIDIyOSwgNDYxfSwNCisNCisJLyog NDUwICovDQorCXsxLCAyMzAsIDQ2Mn0sDQorCXsxLCAyMzEsIDQ2M30sDQorCXsxLCAyMzIsIDQ2 NH0sDQorCXsxLCAyMzMsIDQ2NX0sDQorCXsxLCAyMzQsIDQ2Nn0sDQorCXsxLCAyMzUsIDQ2N30s DQorCXsxLCAyMzYsIDQ2OH0sDQorCXsxLCAyMzcsIDQ2OX0sDQorCXsxLCAyMzgsIDQ3MH0sDQor CXsxLCAyMzksIDQ3MX0sDQorDQorCS8qIDQ2MCAqLw0KKwl7MSwgMjQwLCA0NzJ9LA0KKwl7MSwg MjQxLCA0NzN9LA0KKwl7MSwgMjQyLCA0NzR9LA0KKwl7MSwgMjQzLCA0NzV9LA0KKwl7MSwgMjQ0 LCA0NzZ9LA0KKwl7MSwgMjQ1LCA0Nzd9LA0KKwl7MSwgMjQ2LCA0Nzh9LA0KKwl7LTEsIC0xLCA0 Nzl9LA0KKwl7LTEsIC0xLCA0ODB9LA0KKwl7LTEsIC0xLCA0ODF9LA0KKw0KKwkvKiA0NzAgKi8N CisJey0xLCAtMSwgNDgyfSwNCisJey0xLCAtMSwgNDgzfSwNCisJey0xLCAtMSwgNDg0fSwNCisJ ey0xLCAtMSwgNDg1fSwNCisJey0xLCAtMSwgNDg2fSwNCisJey0xLCAtMSwgNDg3fSwNCisJey0x LCAtMSwgNDg4fSwNCisJey0xLCAtMSwgNDg5fSwNCisJey0xLCAtMSwgNDkwfSwNCisJey0xLCAt MSwgNDkxfSwNCisNCisJLyogNDgwICovDQorCXstMSwgLTEsIDQ5Mn0sDQorCXstMSwgLTEsIDQ5 M30sDQorCXstMSwgLTEsIDQ5NH0sDQorCXstMSwgLTEsIDQ5NX0sDQorCXstMSwgLTEsIDQ5Nn0s DQorCXstMSwgLTEsIDQ5N30sDQorCXstMSwgLTEsIDQ5OH0sDQorCXstMSwgLTEsIDQ5OX0sDQor CXstMSwgLTEsIDUwMH0sDQorCXstMSwgLTEsIDUwMX0sDQorDQorCS8qIDQ5MCAqLw0KKwl7LTEs IC0xLCA1MDJ9LA0KKwl7LTEsIC0xLCA1MDN9LA0KKwl7LTEsIC0xLCA1MDR9LA0KKwl7LTEsIC0x LCA1MDV9LA0KKwl7LTEsIC0xLCA1MDZ9LA0KKwl7LTEsIC0xLCA1MDd9LA0KKwl7LTEsIC0xLCA1 MDh9LA0KKwl7LTEsIC0xLCA1MDl9LA0KKwl7LTEsIC0xLCA1MTB9LA0KKw0KK307DQorDQorc3Ry dWN0IG10a19kZXZhcGNfdmlvX2luZm8gew0KKwlib29sIHJlYWQ7DQorCWJvb2wgd3JpdGU7DQor CXUzMiB2aW9fYWRkcjsNCisJdTMyIHZpb19hZGRyX2hpZ2g7DQorCXUzMiBtYXN0ZXJfaWQ7DQor CXUzMiBkb21haW5faWQ7DQorfTsNCisNCitzdHJ1Y3QgbXRrX2RldmFwY192aW9fZGJnc19kZXNj IHsNCisJdTMyIG1hc2s7DQorCXUzMiBzdGFydF9iaXQ7DQorfTsNCisNCitzdHJ1Y3QgbXRrX2Rl dmFwY19jb250ZXh0IHsNCisJdTggc2xhdmVfdHlwZV9udW07DQorCXZvaWQgX19pb21lbSAqKmRl dmFwY19wZF9iYXNlOw0KKwljb25zdCBzdHJ1Y3QgbXRrX2RldmljZV9pbmZvICoqZGV2aWNlX2lu Zm87DQorCXN0cnVjdCBtdGtfZGV2YXBjX3Zpb19pbmZvICp2aW9faW5mbzsNCisJc3RydWN0IG10 a19kZXZhcGNfdmlvX2RiZ3NfZGVzYyAqdmlvX2RiZ3NfZGVzYzsNCisJdTMyICpwZHNfb2Zmc2V0 Ow0KK307DQorDQorI2VuZGlmIC8qIF9fTVRLX0RFVkFQQ19IX18gKi8NCi0tIA0KMS43LjkuNQ0K