From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH 2/2] drm/vc4: Add DSI driver Date: Mon, 23 Jan 2017 16:38:53 -0800 Message-ID: <20170124003853.16418-3-eric@anholt.net> References: <20170124003853.16418-1-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from anholt.net (anholt.net [50.246.234.109]) by gabe.freedesktop.org (Postfix) with ESMTP id F09326E6B9 for ; Tue, 24 Jan 2017 03:06:06 +0000 (UTC) In-Reply-To: <20170124003853.16418-1-eric@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Florian Fainelli , Michael Turquette , Stephen Boyd , Rob Herring , Mark Rutland , dri-devel@lists.freedesktop.org Cc: Stephen Warren , Lee Jones , linux-kernel@vger.kernel.org, bcm-kernel-feedback-list@broadcom.com, linux-rpi-kernel@lists.infradead.org, linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org VGhlIERTSTAgYW5kIERTSTEgYmxvY2tzIG9uIHRoZSAyODM1IGFyZSByZWxhdGVkIGhhcmR3YXJl IGJsb2Nrcy4KU29tZSByZWdpc3RlcnMgbW92ZSBhcm91bmQsIGFuZCB0aGUgZmVhdHVyZXNldCBp cyBzbGlnaHRseSBkaWZmZXJlbnQsCmFzIERTSTEgKHRoZSA0LWxhbmUgRFNJKSBpcyBhIGxhdGVy IHZlcnNpb24gb2YgdGhlIGhhcmR3YXJlIGJsb2NrLgpUaGlzIGRyaXZlciBkb2Vzbid0IHlldCBl bmFibGUgRFNJMCwgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgaGFyZHdhcmUKdG8gdGVzdCBhZ2Fp bnN0LCBidXQgaXQgZG9lcyBwdXQgYSBsb3Qgb2YgdGhlIHJlZ2lzdGVyIGRlZmluaXRpb25zIGFu ZApjb2RlIGluIHBsYWNlLgoKU2lnbmVkLW9mZi1ieTogRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0 Lm5ldD4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vdmM0L0tjb25maWcgICAgICAgfCAgICAyICsKIGRy aXZlcnMvZ3B1L2RybS92YzQvTWFrZWZpbGUgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfZGVidWdmcy5jIHwgICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYu YyAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oICAgICB8ICAgIDUg KwogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHNpLmMgICAgIHwgMTcyNSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDE3MzUgaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RzaS5jCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJt L3ZjNC9LY29uZmlnCmluZGV4IGU1M2RmNTljYjEzOS4uZTE1MTdkMDdjYjdkIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vdmM0L0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC9L Y29uZmlnCkBAIC0yLDEwICsyLDEyIEBAIGNvbmZpZyBEUk1fVkM0CiAJdHJpc3RhdGUgIkJyb2Fk Y29tIFZDNCBHcmFwaGljcyIKIAlkZXBlbmRzIG9uIEFSQ0hfQkNNMjgzNSB8fCBDT01QSUxFX1RF U1QKIAlkZXBlbmRzIG9uIERSTQorCWRlcGVuZHMgb24gQ09NTU9OX0NMSwogCXNlbGVjdCBEUk1f S01TX0hFTFBFUgogCXNlbGVjdCBEUk1fS01TX0NNQV9IRUxQRVIKIAlzZWxlY3QgRFJNX0dFTV9D TUFfSEVMUEVSCiAJc2VsZWN0IERSTV9QQU5FTAorCXNlbGVjdCBEUk1fTUlQSV9EU0kKIAloZWxw CiAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBzeXN0ZW0gdGhhdCBoYXMgYSBC cm9hZGNvbQogCSAgVkM0IEdQVSwgc3VjaCBhcyB0aGUgUmFzcGJlcnJ5IFBpIG9yIG90aGVyIEJD TTI3MDgvQkNNMjgzNS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vdmM0L01ha2VmaWxlCmluZGV4IDc3NTdmNjlhOGE3Ny4uNjFmNDVk MTIyYmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L01ha2VmaWxlCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS92YzQvTWFrZWZpbGUKQEAgLTgsNiArOCw3IEBAIHZjNC15IDo9IFwKIAl2 YzRfY3J0Yy5vIFwKIAl2YzRfZHJ2Lm8gXAogCXZjNF9kcGkubyBcCisJdmM0X2RzaS5vIFwKIAl2 YzRfa21zLm8gXAogCXZjNF9nZW0ubyBcCiAJdmM0X2hkbWkubyBcCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9k ZWJ1Z2ZzLmMKaW5kZXggY2FmODE3YmFjODg1Li4zY2E0NzZjNmUwNTcgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS92YzQvdmM0X2RlYnVnZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0 L3ZjNF9kZWJ1Z2ZzLmMKQEAgLTE4LDYgKzE4LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X2luZm9fbGlzdCB2YzRfZGVidWdmc19saXN0W10gPSB7CiAJeyJib19zdGF0cyIsIHZjNF9ib19z dGF0c19kZWJ1Z2ZzLCAwfSwKIAl7ImRwaV9yZWdzIiwgdmM0X2RwaV9kZWJ1Z2ZzX3JlZ3MsIDB9 LAorCXsiZHNpMV9yZWdzIiwgdmM0X2RzaV9kZWJ1Z2ZzX3JlZ3MsIDAsICh2b2lkICopKHVpbnRw dHJfdCkxfSwKIAl7ImhkbWlfcmVncyIsIHZjNF9oZG1pX2RlYnVnZnNfcmVncywgMH0sCiAJeyJ2 ZWNfcmVncyIsIHZjNF92ZWNfZGVidWdmc19yZWdzLCAwfSwKIAl7Imh2c19yZWdzIiwgdmM0X2h2 c19kZWJ1Z2ZzX3JlZ3MsIDB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRf ZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuYwppbmRleCBhYzA5Y2E3ZmY0MzAu LjA4NDRjODMyYTRjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmMKQEAgLTI5Niw2ICsyOTYsNyBAQCBz dGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqY29uc3QgY29tcG9uZW50X2RyaXZlcnNbXSA9 IHsKIAkmdmM0X2hkbWlfZHJpdmVyLAogCSZ2YzRfdmVjX2RyaXZlciwKIAkmdmM0X2RwaV9kcml2 ZXIsCisJJnZjNF9kc2lfZHJpdmVyLAogCSZ2YzRfaHZzX2RyaXZlciwKIAkmdmM0X2NydGNfZHJp dmVyLAogCSZ2YzRfdjNkX2RyaXZlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQv dmM0X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgKaW5kZXggYjVjNGJiMTRk MGQxLi43MjNmMGVjOTQwYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Ry di5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oCkBAIC0xNyw2ICsxNyw3IEBA IHN0cnVjdCB2YzRfZGV2IHsKIAlzdHJ1Y3QgdmM0X2NydGMgKmNydGNbM107CiAJc3RydWN0IHZj NF92M2QgKnYzZDsKIAlzdHJ1Y3QgdmM0X2RwaSAqZHBpOworCXN0cnVjdCB2YzRfZHNpICpkc2kx OwogCXN0cnVjdCB2YzRfdmVjICp2ZWM7CiAKIAlzdHJ1Y3QgZHJtX2ZiZGV2X2NtYSAqZmJkZXY7 CkBAIC00NjUsNiArNDY2LDEwIEBAIHZvaWQgX19pb21lbSAqdmM0X2lvcmVtYXBfcmVncyhzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIGludCBpbmRleCk7CiBleHRlcm4gc3RydWN0IHBsYXRm b3JtX2RyaXZlciB2YzRfZHBpX2RyaXZlcjsKIGludCB2YzRfZHBpX2RlYnVnZnNfcmVncyhzdHJ1 Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCk7CiAKKy8qIHZjNF9kc2kuYyAqLworZXh0ZXJu IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmM0X2RzaV9kcml2ZXI7CitpbnQgdmM0X2RzaV9kZWJ1 Z2ZzX3JlZ3Moc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpOworCiAvKiB2YzRfZ2Vt LmMgKi8KIHZvaWQgdmM0X2dlbV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCB2 YzRfZ2VtX2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RzaS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTdmY2FjMzgxZGJiCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHNpLmMKQEAgLTAsMCAr MSwxNzI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEJyb2FkY29tCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFs b25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KKyAqLworCisvKioKKyAqIERPQzogVkM0IERTSTAvRFNJMSBtb2R1bGUK KyAqCisgKiBCQ00yODM1IGNvbnRhaW5zIHR3byBEU0kgbW9kdWxlcywgRFNJMCBhbmQgRFNJMS4g IERTSTAgaXMgYQorICogc2luZ2xlLWxhbmUgRFNJIGNvbnRyb2xsZXIsIHdoaWxlIERTSTEgaXMg YSBtb3JlIG1vZGVybiA0LWxhbmUgRFNJCisgKiBjb250cm9sbGVyLgorICoKKyAqIE1vc3QgUmFz cGJlcnJ5IFBpIGJvYXJkcyBleHBvc2UgRFNJMSBhcyB0aGVpciAiRElTUExBWSIgY29ubmVjdG9y LAorICogd2hpbGUgdGhlIGNvbXB1dGUgbW9kdWxlIGJyaW5ncyBib3RoIERTSTAgYW5kIERTSTEg b3V0LgorICoKKyAqIFRoaXMgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCBmb3IgRFNJMSB2aWRlby1t b2RlIGRpc3BsYXkgb25seQorICogY3VycmVudGx5LCB3aXRoIG1vc3Qgb2YgdGhlIGluZm9ybWF0 aW9uIG5lY2Vzc2FyeSBmb3IgRFNJMAorICogaG9wZWZ1bGx5IHByZXNlbnQuCisgKi8KKworI2lu Y2x1ZGUgImRybV9hdG9taWNfaGVscGVyLmgiCisjaW5jbHVkZSAiZHJtX2NydGNfaGVscGVyLmgi CisjaW5jbHVkZSAiZHJtX2VkaWQuaCIKKyNpbmNsdWRlICJkcm1fbWlwaV9kc2kuaCIKKyNpbmNs dWRlICJkcm1fcGFuZWwuaCIKKyNpbmNsdWRlICJsaW51eC9jbGsuaCIKKyNpbmNsdWRlICJsaW51 eC9jbGstcHJvdmlkZXIuaCIKKyNpbmNsdWRlICJsaW51eC9jb21wbGV0aW9uLmgiCisjaW5jbHVk ZSAibGludXgvY29tcG9uZW50LmgiCisjaW5jbHVkZSAibGludXgvZG1hZW5naW5lLmgiCisjaW5j bHVkZSAibGludXgvaTJjLmgiCisjaW5jbHVkZSAibGludXgvb2ZfYWRkcmVzcy5oIgorI2luY2x1 ZGUgImxpbnV4L29mX3BsYXRmb3JtLmgiCisjaW5jbHVkZSAibGludXgvcG1fcnVudGltZS5oIgor I2luY2x1ZGUgInZjNF9kcnYuaCIKKyNpbmNsdWRlICJ2YzRfcmVncy5oIgorCisjZGVmaW5lIERT SV9DTURfRklGT19ERVBUSCAgMTYKKyNkZWZpbmUgRFNJX1BJWF9GSUZPX0RFUFRIIDI1NgorI2Rl ZmluZSBEU0lfUElYX0ZJRk9fV0lEVEggICA0CisKKyNkZWZpbmUgRFNJMF9DVFJMCQkweDAwCisK Ky8qIENvbW1hbmQgcGFja2V0IGNvbnRyb2wuICovCisjZGVmaW5lIERTSTBfVFhQS1QxQwkJMHgw NCAvKiBBS0EgUEtUQyAqLworI2RlZmluZSBEU0kxX1RYUEtUMUMJCTB4MDQKKyMgZGVmaW5lIERT SV9UWFBLVDFDX1RSSUdfQ01EX01BU0sJVkM0X01BU0soMzEsIDI0KQorIyBkZWZpbmUgRFNJX1RY UEtUMUNfVFJJR19DTURfU0hJRlQJMjQKKyMgZGVmaW5lIERTSV9UWFBLVDFDX0NNRF9SRVBFQVRf TUFTSwlWQzRfTUFTSygyMywgMTApCisjIGRlZmluZSBEU0lfVFhQS1QxQ19DTURfUkVQRUFUX1NI SUZUCTEwCisKKyMgZGVmaW5lIERTSV9UWFBLVDFDX0RJU1BMQVlfTk9fTUFTSwlWQzRfTUFTSyg5 LCA4KQorIyBkZWZpbmUgRFNJX1RYUEtUMUNfRElTUExBWV9OT19TSElGVAk4CisvKiBTaG9ydCwg dHJpZ2dlciwgQlRBLCBvciBhIGxvbmcgcGFja2V0IHRoYXQgZml0cyBhbGwgaW4gQ01ERklGTy4g Ki8KKyMgZGVmaW5lIERTSV9UWFBLVDFDX0RJU1BMQVlfTk9fU0hPUlQJCTAKKy8qIFByaW1hcnkg ZGlzcGxheSB3aGVyZSBjbWRmaWZvIHByb3ZpZGVzIHBhcnQgb2YgdGhlIHBheWxvYWQgYW5kCisg KiBwaXhlbHZhbHZlIHRoZSByZXN0LgorICovCisjIGRlZmluZSBEU0lfVFhQS1QxQ19ESVNQTEFZ X05PX1BSSU1BUlkJCTEKKy8qIFNlY29uZGFyeSBkaXNwbGF5IHdoZXJlIGNtZGZpZm8gcHJvdmlk ZXMgcGFydCBvZiB0aGUgcGF5bG9hZCBhbmQKKyAqIHBpeGZpZm8gdGhlIHJlc3QuCisgKi8KKyMg ZGVmaW5lIERTSV9UWFBLVDFDX0RJU1BMQVlfTk9fU0VDT05EQVJZCTIKKworIyBkZWZpbmUgRFNJ X1RYUEtUMUNfQ01EX1RYX1RJTUVfTUFTSwlWQzRfTUFTSyg3LCA2KQorIyBkZWZpbmUgRFNJX1RY UEtUMUNfQ01EX1RYX1RJTUVfU0hJRlQJNgorCisjIGRlZmluZSBEU0lfVFhQS1QxQ19DTURfQ1RS TF9NQVNLCVZDNF9NQVNLKDUsIDQpCisjIGRlZmluZSBEU0lfVFhQS1QxQ19DTURfQ1RSTF9TSElG VAk0CisvKiBDb21tYW5kIG9ubHkuICBVc2VzIFRYUEtUMUggYW5kIERJU1BMQVlfTk8gKi8KKyMg ZGVmaW5lIERTSV9UWFBLVDFDX0NNRF9DVFJMX1RYCTAKKy8qIENvbW1hbmQgd2l0aCBCVEEgZm9y IGVpdGhlciBhY2sgb3IgcmVhZCBkYXRhLiAqLworIyBkZWZpbmUgRFNJX1RYUEtUMUNfQ01EX0NU UkxfUlgJMQorLyogVHJpZ2dlciBhY2NvcmRpbmcgdG8gVFJJR19DTUQgKi8KKyMgZGVmaW5lIERT SV9UWFBLVDFDX0NNRF9DVFJMX1RSSUcJMgorLyogQlRBIGFsb25lIGZvciBnZXR0aW5nIGVycm9y IHN0YXR1cyBhZnRlciBhIGNvbW1hbmQsIG9yIGEgVEUgdHJpZ2dlcgorICogd2l0aG91dCBhIHBy ZXZpb3VzIGNvbW1hbmQuCisgKi8KKyMgZGVmaW5lIERTSV9UWFBLVDFDX0NNRF9DVFJMX0JUQQkz CisKKyMgZGVmaW5lIERTSV9UWFBLVDFDX0NNRF9NT0RFX0xQCUJJVCgzKQorIyBkZWZpbmUgRFNJ X1RYUEtUMUNfQ01EX1RZUEVfTE9ORwlCSVQoMikKKyMgZGVmaW5lIERTSV9UWFBLVDFDX0NNRF9U RV9FTgkJQklUKDEpCisjIGRlZmluZSBEU0lfVFhQS1QxQ19DTURfRU4JCUJJVCgwKQorCisvKiBD b21tYW5kIHBhY2tldCBoZWFkZXIuICovCisjZGVmaW5lIERTSTBfVFhQS1QxSAkJMHgwOCAvKiBB S0EgUEtUSCAqLworI2RlZmluZSBEU0kxX1RYUEtUMUgJCTB4MDgKKyMgZGVmaW5lIERTSV9UWFBL VDFIX0JDX0NNREZJRk9fTUFTSwlWQzRfTUFTSygzMSwgMjQpCisjIGRlZmluZSBEU0lfVFhQS1Qx SF9CQ19DTURGSUZPX1NISUZUCTI0CisjIGRlZmluZSBEU0lfVFhQS1QxSF9CQ19QQVJBTV9NQVNL CVZDNF9NQVNLKDIzLCA4KQorIyBkZWZpbmUgRFNJX1RYUEtUMUhfQkNfUEFSQU1fU0hJRlQJOAor IyBkZWZpbmUgRFNJX1RYUEtUMUhfQkNfRFRfTUFTSwkJVkM0X01BU0soNywgMCkKKyMgZGVmaW5l IERTSV9UWFBLVDFIX0JDX0RUX1NISUZUCTAKKworI2RlZmluZSBEU0kwX1JYUEtUMUgJCTB4MGMg LyogQUtBIFJYMV9QS1RIICovCisjZGVmaW5lIERTSTFfUlhQS1QxSAkJMHgxNAorIyBkZWZpbmUg RFNJX1JYUEtUMUhfQ1JDX0VSUgkJQklUKDMxKQorIyBkZWZpbmUgRFNJX1JYUEtUMUhfREVUX0VS UgkJQklUKDMwKQorIyBkZWZpbmUgRFNJX1JYUEtUMUhfRUNDX0VSUgkJQklUKDI5KQorIyBkZWZp bmUgRFNJX1JYUEtUMUhfQ09SX0VSUgkJQklUKDI4KQorIyBkZWZpbmUgRFNJX1JYUEtUMUhfSU5D T01QX1BLVAkJQklUKDI1KQorIyBkZWZpbmUgRFNJX1JYUEtUMUhfUEtUX1RZUEVfTE9ORwlCSVQo MjQpCisvKiBCeXRlIGNvdW50IGlmIERTSV9SWFBLVDFIX1BLVF9UWVBFX0xPTkcgKi8KKyMgZGVm aW5lIERTSV9SWFBLVDFIX0JDX1BBUkFNX01BU0sJVkM0X01BU0soMjMsIDgpCisjIGRlZmluZSBE U0lfUlhQS1QxSF9CQ19QQVJBTV9TSElGVAk4CisvKiBTaG9ydCByZXR1cm4gYnl0ZXMgaWYgIURT SV9SWFBLVDFIX1BLVF9UWVBFX0xPTkcgKi8KKyMgZGVmaW5lIERTSV9SWFBLVDFIX1NIT1JUXzFf TUFTSwlWQzRfTUFTSygyMywgMTYpCisjIGRlZmluZSBEU0lfUlhQS1QxSF9TSE9SVF8xX1NISUZU CTE2CisjIGRlZmluZSBEU0lfUlhQS1QxSF9TSE9SVF8wX01BU0sJVkM0X01BU0soMTUsIDgpCisj IGRlZmluZSBEU0lfUlhQS1QxSF9TSE9SVF8wX1NISUZUCTgKKyMgZGVmaW5lIERTSV9SWFBLVDFI X0RUX0xQX0NNRF9NQVNLCVZDNF9NQVNLKDcsIDApCisjIGRlZmluZSBEU0lfUlhQS1QxSF9EVF9M UF9DTURfU0hJRlQJMAorCisjZGVmaW5lIERTSTBfUlhQS1QySAkJMHgxMCAvKiBBS0EgUlgyX1BL VEggKi8KKyNkZWZpbmUgRFNJMV9SWFBLVDJICQkweDE4CisjIGRlZmluZSBEU0lfUlhQS1QxSF9E RVRfRVJSCQlCSVQoMzApCisjIGRlZmluZSBEU0lfUlhQS1QxSF9FQ0NfRVJSCQlCSVQoMjkpCisj IGRlZmluZSBEU0lfUlhQS1QxSF9DT1JfRVJSCQlCSVQoMjgpCisjIGRlZmluZSBEU0lfUlhQS1Qx SF9JTkNPTVBfUEtUCQlCSVQoMjUpCisjIGRlZmluZSBEU0lfUlhQS1QxSF9CQ19QQVJBTV9NQVNL CVZDNF9NQVNLKDIzLCA4KQorIyBkZWZpbmUgRFNJX1JYUEtUMUhfQkNfUEFSQU1fU0hJRlQJOAor IyBkZWZpbmUgRFNJX1JYUEtUMUhfRFRfTUFTSwkJVkM0X01BU0soNywgMCkKKyMgZGVmaW5lIERT SV9SWFBLVDFIX0RUX1NISUZUCQkwCisKKyNkZWZpbmUgRFNJMF9UWFBLVF9DTURfRklGTwkweDE0 IC8qIEFLQSBDTURfREFUQUYgKi8KKyNkZWZpbmUgRFNJMV9UWFBLVF9DTURfRklGTwkweDFjCisK KyNkZWZpbmUgRFNJMF9ESVNQMF9DVFJMCQkweDE4CisjIGRlZmluZSBEU0lfRElTUDBfUElYX0NM S19ESVZfTUFTSwlWQzRfTUFTSygyMSwgMTMpCisjIGRlZmluZSBEU0lfRElTUDBfUElYX0NMS19E SVZfU0hJRlQJMTMKKyMgZGVmaW5lIERTSV9ESVNQMF9MUF9TVE9QX0NUUkxfTUFTSwlWQzRfTUFT SygxMiwgMTEpCisjIGRlZmluZSBEU0lfRElTUDBfTFBfU1RPUF9DVFJMX1NISUZUCTExCisjIGRl ZmluZSBEU0lfRElTUDBfTFBfU1RPUF9ESVNBQkxFCTAKKyMgZGVmaW5lIERTSV9ESVNQMF9MUF9T VE9QX1BFUkxJTkUJMQorIyBkZWZpbmUgRFNJX0RJU1AwX0xQX1NUT1BfUEVSRlJBTUUJMgorCisv KiBUcmFuc21pdCBSR0IgcGl4ZWxzIGFuZCBudWxsIHBhY2tldHMgb25seSBkdXJpbmcgSEFDVElW RSwgaW5zdGVhZAorICogb2YgZ29pbmcgdG8gTFAtU1RPUC4KKyAqLworIyBkZWZpbmUgRFNJX0RJ U1BfSEFDVElWRV9OVUxMCQlCSVQoMTApCisvKiBUcmFuc21pdCBibGFua2luZyBwYWNrZXQgb25s eSBkdXJpbmcgdmJsYW5rLCBpbnN0ZWFkIG9mIGFsbG93aW5nIExQLVNUT1AuICovCisjIGRlZmlu ZSBEU0lfRElTUF9WQkxQX0NUUkwJCUJJVCg5KQorLyogVHJhbnNtaXQgYmxhbmtpbmcgcGFja2V0 IG9ubHkgZHVyaW5nIEhGUCwgaW5zdGVhZCBvZiBhbGxvd2luZyBMUC1TVE9QLiAqLworIyBkZWZp bmUgRFNJX0RJU1BfSEZQX0NUUkwJCUJJVCg4KQorLyogVHJhbnNtaXQgYmxhbmtpbmcgcGFja2V0 IG9ubHkgZHVyaW5nIEhCUCwgaW5zdGVhZCBvZiBhbGxvd2luZyBMUC1TVE9QLiAqLworIyBkZWZp bmUgRFNJX0RJU1BfSEJQX0NUUkwJCUJJVCg3KQorIyBkZWZpbmUgRFNJX0RJU1AwX0NIQU5ORUxf TUFTSwkJVkM0X01BU0soNiwgNSkKKyMgZGVmaW5lIERTSV9ESVNQMF9DSEFOTkVMX1NISUZUCTUK Ky8qIEVuYWJsZXMgZW5kIGV2ZW50cyBmb3IgSFNZTkMvVlNZTkMsIG5vdCBqdXN0IHN0YXJ0IGV2 ZW50cy4gKi8KKyMgZGVmaW5lIERTSV9ESVNQMF9TVF9FTkQJCUJJVCg0KQorIyBkZWZpbmUgRFNJ X0RJU1AwX1BGT1JNQVRfTUFTSwkJVkM0X01BU0soMywgMikKKyMgZGVmaW5lIERTSV9ESVNQMF9Q Rk9STUFUX1NISUZUCTIKKyMgZGVmaW5lIERTSV9QRk9STUFUX1JHQjU2NQkJMAorIyBkZWZpbmUg RFNJX1BGT1JNQVRfUkdCNjY2X1BBQ0tFRAkxCisjIGRlZmluZSBEU0lfUEZPUk1BVF9SR0I2NjYJ CTIKKyMgZGVmaW5lIERTSV9QRk9STUFUX1JHQjg4OAkJMworLyogRGVmYXVsdCBpcyBWSURFTyBt b2RlLiAqLworIyBkZWZpbmUgRFNJX0RJU1AwX0NPTU1BTkRfTU9ERQkJQklUKDEpCisjIGRlZmlu ZSBEU0lfRElTUDBfRU5BQkxFCQlCSVQoMCkKKworI2RlZmluZSBEU0kwX0RJU1AxX0NUUkwJCTB4 MWMKKyNkZWZpbmUgRFNJMV9ESVNQMV9DVFJMCQkweDJjCisvKiBGb3JtYXQgb2YgdGhlIGRhdGEg d3JpdHRlbiB0byBUWFBLVF9QSVhfRklGTy4gKi8KKyMgZGVmaW5lIERTSV9ESVNQMV9QRk9STUFU X01BU0sJCVZDNF9NQVNLKDIsIDEpCisjIGRlZmluZSBEU0lfRElTUDFfUEZPUk1BVF9TSElGVAkx CisjIGRlZmluZSBEU0lfRElTUDFfUEZPUk1BVF8xNkJJVAkwCisjIGRlZmluZSBEU0lfRElTUDFf UEZPUk1BVF8yNEJJVAkxCisjIGRlZmluZSBEU0lfRElTUDFfUEZPUk1BVF8zMkJJVF9MRQkyCisj IGRlZmluZSBEU0lfRElTUDFfUEZPUk1BVF8zMkJJVF9CRQkzCisKKy8qIERJU1AxIGlzIGFsd2F5 cyBjb21tYW5kIG1vZGUuICovCisjIGRlZmluZSBEU0lfRElTUDFfRU5BQkxFCQlCSVQoMCkKKwor I2RlZmluZSBEU0kwX1RYUEtUX1BJWF9GSUZPCQkweDIwIC8qIEFLQSBQSVhfRklGTyAqLworCisj ZGVmaW5lIERTSTBfSU5UX1NUQVQJCTB4MjQKKyNkZWZpbmUgRFNJMF9JTlRfRU4JCTB4MjgKKyMg ZGVmaW5lIERTSTFfSU5UX1BIWV9EM19VTFBTCQlCSVQoMzApCisjIGRlZmluZSBEU0kxX0lOVF9Q SFlfRDNfU1RPUAkJQklUKDI5KQorIyBkZWZpbmUgRFNJMV9JTlRfUEhZX0QyX1VMUFMJCUJJVCgy OCkKKyMgZGVmaW5lIERTSTFfSU5UX1BIWV9EMl9TVE9QCQlCSVQoMjcpCisjIGRlZmluZSBEU0kx X0lOVF9QSFlfRDFfVUxQUwkJQklUKDI2KQorIyBkZWZpbmUgRFNJMV9JTlRfUEhZX0QxX1NUT1AJ CUJJVCgyNSkKKyMgZGVmaW5lIERTSTFfSU5UX1BIWV9EMF9VTFBTCQlCSVQoMjQpCisjIGRlZmlu ZSBEU0kxX0lOVF9QSFlfRDBfU1RPUAkJQklUKDIzKQorIyBkZWZpbmUgRFNJMV9JTlRfRklGT19F UlIJCUJJVCgyMikKKyMgZGVmaW5lIERTSTFfSU5UX1BIWV9ESVJfUlRGCQlCSVQoMjEpCisjIGRl ZmluZSBEU0kxX0lOVF9QSFlfUlhMUERUCQlCSVQoMjApCisjIGRlZmluZSBEU0kxX0lOVF9QSFlf UlhUUklHCQlCSVQoMTkpCisjIGRlZmluZSBEU0kxX0lOVF9QSFlfRDBfTFBEVAkJQklUKDE4KQor IyBkZWZpbmUgRFNJMV9JTlRfUEhZX0RJUl9GVFIJCUJJVCgxNykKKworLyogU2lnbmFsZWQgd2hl biB0aGUgY2xvY2sgbGFuZSBlbnRlcnMgdGhlIGdpdmVuIHN0YXRlLiAqLworIyBkZWZpbmUgRFNJ MV9JTlRfUEhZX0NMT0NLX1VMUFMJQklUKDE2KQorIyBkZWZpbmUgRFNJMV9JTlRfUEhZX0NMT0NL X0hTCQlCSVQoMTUpCisjIGRlZmluZSBEU0kxX0lOVF9QSFlfQ0xPQ0tfU1RPUAlCSVQoMTQpCisK Ky8qIFNpZ25hbGVkIG9uIHRpbWVvdXRzICovCisjIGRlZmluZSBEU0kxX0lOVF9QUl9UTwkJCUJJ VCgxMykKKyMgZGVmaW5lIERTSTFfSU5UX1RBX1RPCQkJQklUKDEyKQorIyBkZWZpbmUgRFNJMV9J TlRfTFBSWF9UTwkJQklUKDExKQorIyBkZWZpbmUgRFNJMV9JTlRfSFNUWF9UTwkJQklUKDEwKQor CisvKiBDb250ZW50aW9uIG9uIGEgbGluZSB3aGVuIHRyeWluZyB0byBkcml2ZSB0aGUgbGluZSBs b3cgKi8KKyMgZGVmaW5lIERTSTFfSU5UX0VSUl9DT05UX0xQMQkJQklUKDkpCisjIGRlZmluZSBE U0kxX0lOVF9FUlJfQ09OVF9MUDAJCUJJVCg4KQorCisvKiBDb250cm9sIGVycm9yOiBpbmNvcnJl Y3QgbGluZSBzdGF0ZSBzZXF1ZW5jZSBvbiBkYXRhIGxhbmUgMC4gKi8KKyMgZGVmaW5lIERTSTFf SU5UX0VSUl9DT05UUk9MCQlCSVQoNykKKy8qIExQRFQgc3luY2hyb25pemF0aW9uIGVycm9yIChi aXRzIHJlY2VpdmVkIG5vdCBhIG11bHRpcGxlIG9mIDguICovCisKKyMgZGVmaW5lIERTSTFfSU5U X0VSUl9TWU5DX0VTQwkJQklUKDYpCisvKiBTaWduYWxlZCBhZnRlciByZWNlaXZpbmcgYW4gZXJy b3IgcGFja2V0IGZyb20gdGhlIGRpc3BsYXkgaW4KKyAqIHJlc3BvbnNlIHRvIGEgcmVhZC4KKyAq LworIyBkZWZpbmUgRFNJMV9JTlRfUlhQS1QyCQlCSVQoNSkKKy8qIFNpZ25hbGVkIGFmdGVyIHJl Y2VpdmluZyBhIHBhY2tldC4gIFRoZSBoZWFkZXIgYW5kIG9wdGlvbmFsIHNob3J0CisgKiByZXNw b25zZSB3aWxsIGJlIGluIFJYUEtUMUgsIGFuZCBhIGxvbmcgcmVzcG9uc2Ugd2lsbCBiZSBpbiB0 aGUKKyAqIFJYUEtUX0ZJRk8uCisgKi8KKyMgZGVmaW5lIERTSTFfSU5UX1JYUEtUMQkJQklUKDQp CisjIGRlZmluZSBEU0kxX0lOVF9UWFBLVDJfRE9ORQkJQklUKDMpCisjIGRlZmluZSBEU0kxX0lO VF9UWFBLVDJfRU5ECQlCSVQoMikKKy8qIFNpZ25hbGVkIGFmdGVyIGFsbCByZXBlYXRzIG9mIFRY UEtUMSBhcmUgdHJhbnNmZXJyZWQuICovCisjIGRlZmluZSBEU0kxX0lOVF9UWFBLVDFfRE9ORQkJ QklUKDEpCisvKiBTaWduYWxlZCBhZnRlciBlYWNoIFRYUEtUMSByZXBlYXQgaXMgc2NoZWR1bGVk LiAqLworIyBkZWZpbmUgRFNJMV9JTlRfVFhQS1QxX0VORAkJQklUKDApCisKKyNkZWZpbmUgRFNJ MV9JTlRFUlJVUFRTX0FMV0FZU19FTkFCTEVECShEU0kxX0lOVF9FUlJfU1lOQ19FU0MgfCBcCisJ CQkJCSBEU0kxX0lOVF9FUlJfQ09OVFJPTCB8CSBcCisJCQkJCSBEU0kxX0lOVF9FUlJfQ09OVF9M UDAgfCBcCisJCQkJCSBEU0kxX0lOVF9FUlJfQ09OVF9MUDEgfCBcCisJCQkJCSBEU0kxX0lOVF9I U1RYX1RPIHwJIFwKKwkJCQkJIERTSTFfSU5UX0xQUlhfVE8gfAkgXAorCQkJCQkgRFNJMV9JTlRf VEFfVE8gfAkgXAorCQkJCQkgRFNJMV9JTlRfUFJfVE8pCisKKyNkZWZpbmUgRFNJMF9TVEFUCQkw eDJjCisjZGVmaW5lIERTSTBfSFNUWF9UT19DTlQJMHgzMAorI2RlZmluZSBEU0kwX0xQUlhfVE9f Q05UCTB4MzQKKyNkZWZpbmUgRFNJMF9UQV9UT19DTlQJCTB4MzgKKyNkZWZpbmUgRFNJMF9QUl9U T19DTlQJCTB4M2MKKyNkZWZpbmUgRFNJMF9QSFlDCQkweDQwCisjIGRlZmluZSBEU0kxX1BIWUNf RVNDX0NMS19MUERUX01BU0sJVkM0X01BU0soMjUsIDIwKQorIyBkZWZpbmUgRFNJMV9QSFlDX0VT Q19DTEtfTFBEVF9TSElGVAkyMAorIyBkZWZpbmUgRFNJMV9QSFlDX0hTX0NMS19DT05USU5VT1VT CUJJVCgxOCkKKyMgZGVmaW5lIERTSTBfUEhZQ19FU0NfQ0xLX0xQRFRfTUFTSwlWQzRfTUFTSygx NywgMTIpCisjIGRlZmluZSBEU0kwX1BIWUNfRVNDX0NMS19MUERUX1NISUZUCTEyCisjIGRlZmlu ZSBEU0kxX1BIWUNfQ0xBTkVfVUxQUwkJQklUKDE3KQorIyBkZWZpbmUgRFNJMV9QSFlDX0NMQU5F X0VOQUJMRQkJQklUKDE2KQorIyBkZWZpbmUgRFNJX1BIWUNfRExBTkUzX1VMUFMJCUJJVCgxMykK KyMgZGVmaW5lIERTSV9QSFlDX0RMQU5FM19FTkFCTEUJCUJJVCgxMikKKyMgZGVmaW5lIERTSTBf UEhZQ19IU19DTEtfQ09OVElOVU9VUwlCSVQoMTApCisjIGRlZmluZSBEU0kwX1BIWUNfQ0xBTkVf VUxQUwkJQklUKDkpCisjIGRlZmluZSBEU0lfUEhZQ19ETEFORTJfVUxQUwkJQklUKDkpCisjIGRl ZmluZSBEU0kwX1BIWUNfQ0xBTkVfRU5BQkxFCQlCSVQoOCkKKyMgZGVmaW5lIERTSV9QSFlDX0RM QU5FMl9FTkFCTEUJCUJJVCg4KQorIyBkZWZpbmUgRFNJX1BIWUNfRExBTkUxX1VMUFMJCUJJVCg1 KQorIyBkZWZpbmUgRFNJX1BIWUNfRExBTkUxX0VOQUJMRQkJQklUKDQpCisjIGRlZmluZSBEU0lf UEhZQ19ETEFORTBfRk9SQ0VfU1RPUAlCSVQoMikKKyMgZGVmaW5lIERTSV9QSFlDX0RMQU5FMF9V TFBTCQlCSVQoMSkKKyMgZGVmaW5lIERTSV9QSFlDX0RMQU5FMF9FTkFCTEUJCUJJVCgwKQorCisj ZGVmaW5lIERTSTBfSFNfQ0xUMAkJMHg0NAorI2RlZmluZSBEU0kwX0hTX0NMVDEJCTB4NDgKKyNk ZWZpbmUgRFNJMF9IU19DTFQyCQkweDRjCisjZGVmaW5lIERTSTBfSFNfRExUMwkJMHg1MAorI2Rl ZmluZSBEU0kwX0hTX0RMVDQJCTB4NTQKKyNkZWZpbmUgRFNJMF9IU19ETFQ1CQkweDU4CisjZGVm aW5lIERTSTBfSFNfRExUNgkJMHg1YworI2RlZmluZSBEU0kwX0hTX0RMVDcJCTB4NjAKKworI2Rl ZmluZSBEU0kwX1BIWV9BRkVDMAkJMHg2NAorIyBkZWZpbmUgRFNJMF9QSFlfQUZFQzBfRERSMkNM S19FTgkJQklUKDI2KQorIyBkZWZpbmUgRFNJMF9QSFlfQUZFQzBfRERSQ0xLX0VOCQlCSVQoMjUp CisjIGRlZmluZSBEU0kwX1BIWV9BRkVDMF9MQVRDSF9VTFBTCQlCSVQoMjQpCisjIGRlZmluZSBE U0kxX1BIWV9BRkVDMF9JRFJfRExBTkUzX01BU0sJCVZDNF9NQVNLKDMxLCAyOSkKKyMgZGVmaW5l IERTSTFfUEhZX0FGRUMwX0lEUl9ETEFORTNfU0hJRlQJMjkKKyMgZGVmaW5lIERTSTFfUEhZX0FG RUMwX0lEUl9ETEFORTJfTUFTSwkJVkM0X01BU0soMjgsIDI2KQorIyBkZWZpbmUgRFNJMV9QSFlf QUZFQzBfSURSX0RMQU5FMl9TSElGVAkyNgorIyBkZWZpbmUgRFNJMV9QSFlfQUZFQzBfSURSX0RM QU5FMV9NQVNLCQlWQzRfTUFTSygyNywgMjMpCisjIGRlZmluZSBEU0kxX1BIWV9BRkVDMF9JRFJf RExBTkUxX1NISUZUCTIzCisjIGRlZmluZSBEU0kxX1BIWV9BRkVDMF9JRFJfRExBTkUwX01BU0sJ CVZDNF9NQVNLKDIyLCAyMCkKKyMgZGVmaW5lIERTSTFfUEhZX0FGRUMwX0lEUl9ETEFORTBfU0hJ RlQJMjAKKyMgZGVmaW5lIERTSTFfUEhZX0FGRUMwX0lEUl9DTEFORV9NQVNLCQlWQzRfTUFTSygx OSwgMTcpCisjIGRlZmluZSBEU0kxX1BIWV9BRkVDMF9JRFJfQ0xBTkVfU0hJRlQJCTE3CisjIGRl ZmluZSBEU0kwX1BIWV9BRkVDMF9BQ1RSTF9ETEFORTFfTUFTSwlWQzRfTUFTSygyMywgMjApCisj IGRlZmluZSBEU0kwX1BIWV9BRkVDMF9BQ1RSTF9ETEFORTFfU0hJRlQJMjAKKyMgZGVmaW5lIERT STBfUEhZX0FGRUMwX0FDVFJMX0RMQU5FMF9NQVNLCVZDNF9NQVNLKDE5LCAxNikKKyMgZGVmaW5l IERTSTBfUEhZX0FGRUMwX0FDVFJMX0RMQU5FMF9TSElGVAkxNgorIyBkZWZpbmUgRFNJMF9QSFlf QUZFQzBfQUNUUkxfQ0xBTkVfTUFTSwlWQzRfTUFTSygxNSwgMTIpCisjIGRlZmluZSBEU0kwX1BI WV9BRkVDMF9BQ1RSTF9DTEFORV9TSElGVAkxMgorIyBkZWZpbmUgRFNJMV9QSFlfQUZFQzBfRERS MkNMS19FTgkJQklUKDE2KQorIyBkZWZpbmUgRFNJMV9QSFlfQUZFQzBfRERSQ0xLX0VOCQlCSVQo MTUpCisjIGRlZmluZSBEU0kxX1BIWV9BRkVDMF9MQVRDSF9VTFBTCQlCSVQoMTQpCisjIGRlZmlu ZSBEU0kxX1BIWV9BRkVDMF9SRVNFVAkJCUJJVCgxMykKKyMgZGVmaW5lIERTSTFfUEhZX0FGRUMw X1BECQkJQklUKDEyKQorIyBkZWZpbmUgRFNJMF9QSFlfQUZFQzBfUkVTRVQJCQlCSVQoMTEpCisj IGRlZmluZSBEU0kxX1BIWV9BRkVDMF9QRF9CRwkJCUJJVCgxMSkKKyMgZGVmaW5lIERTSTBfUEhZ X0FGRUMwX1BECQkJQklUKDEwKQorIyBkZWZpbmUgRFNJMV9QSFlfQUZFQzBfUERfRExBTkUzCQlC SVQoMTApCisjIGRlZmluZSBEU0kwX1BIWV9BRkVDMF9QRF9CRwkJCUJJVCg5KQorIyBkZWZpbmUg RFNJMV9QSFlfQUZFQzBfUERfRExBTkUyCQlCSVQoOSkKKyMgZGVmaW5lIERTSTBfUEhZX0FGRUMw X1BEX0RMQU5FMQkJQklUKDgpCisjIGRlZmluZSBEU0kxX1BIWV9BRkVDMF9QRF9ETEFORTEJCUJJ VCg4KQorIyBkZWZpbmUgRFNJX1BIWV9BRkVDMF9QVEFUQURKX01BU0sJCVZDNF9NQVNLKDcsIDQp CisjIGRlZmluZSBEU0lfUEhZX0FGRUMwX1BUQVRBREpfU0hJRlQJCTQKKyMgZGVmaW5lIERTSV9Q SFlfQUZFQzBfQ1RBVEFESl9NQVNLCQlWQzRfTUFTSygzLCAwKQorIyBkZWZpbmUgRFNJX1BIWV9B RkVDMF9DVEFUQURKX1NISUZUCQkwCisKKyNkZWZpbmUgRFNJMF9QSFlfQUZFQzEJCTB4NjgKKyMg ZGVmaW5lIERTSTBfUEhZX0FGRUMxX0lEUl9ETEFORTFfTUFTSwkJVkM0X01BU0soMTAsIDgpCisj IGRlZmluZSBEU0kwX1BIWV9BRkVDMV9JRFJfRExBTkUxX1NISUZUCTgKKyMgZGVmaW5lIERTSTBf UEhZX0FGRUMxX0lEUl9ETEFORTBfTUFTSwkJVkM0X01BU0soNiwgNCkKKyMgZGVmaW5lIERTSTBf UEhZX0FGRUMxX0lEUl9ETEFORTBfU0hJRlQJNAorIyBkZWZpbmUgRFNJMF9QSFlfQUZFQzFfSURS X0NMQU5FX01BU0sJCVZDNF9NQVNLKDIsIDApCisjIGRlZmluZSBEU0kwX1BIWV9BRkVDMV9JRFJf Q0xBTkVfU0hJRlQJCTAKKworI2RlZmluZSBEU0kwX1RTVF9TRUwJCTB4NmMKKyNkZWZpbmUgRFNJ MF9UU1RfTU9OCQkweDcwCisjZGVmaW5lIERTSTBfSUQJCQkweDc0CisjIGRlZmluZSBEU0lfSURf VkFMVUUJCTB4MDA2NDczNjkKKworI2RlZmluZSBEU0kxX0NUUkwJCTB4MDAKKyMgZGVmaW5lIERT SV9DVFJMX0hTX0NMS0NfTUFTSwkJVkM0X01BU0soMTUsIDE0KQorIyBkZWZpbmUgRFNJX0NUUkxf SFNfQ0xLQ19TSElGVAkJMTQKKyMgZGVmaW5lIERTSV9DVFJMX0hTX0NMS0NfQllURQkJMAorIyBk ZWZpbmUgRFNJX0NUUkxfSFNfQ0xLQ19ERFIyCQkxCisjIGRlZmluZSBEU0lfQ1RSTF9IU19DTEtD X0REUgkJMgorCisjIGRlZmluZSBEU0lfQ1RSTF9SWF9MUERUX0VPVF9ESVNBQkxFCUJJVCgxMykK KyMgZGVmaW5lIERTSV9DVFJMX0xQRFRfRU9UX0RJU0FCTEUJQklUKDEyKQorIyBkZWZpbmUgRFNJ X0NUUkxfSFNEVF9FT1RfRElTQUJMRQlCSVQoMTEpCisjIGRlZmluZSBEU0lfQ1RSTF9TT0ZUX1JF U0VUX0NGRwlCSVQoMTApCisjIGRlZmluZSBEU0lfQ1RSTF9DQUxfQllURQkJQklUKDkpCisjIGRl ZmluZSBEU0lfQ1RSTF9JTlZfQllURQkJQklUKDgpCisjIGRlZmluZSBEU0lfQ1RSTF9DTFJfTERG CQlCSVQoNykKKyMgZGVmaW5lIERTSTBfQ1RSTF9DTFJfUEJDRgkJQklUKDYpCisjIGRlZmluZSBE U0kxX0NUUkxfQ0xSX1JYRgkJQklUKDYpCisjIGRlZmluZSBEU0kwX0NUUkxfQ0xSX0NQQkNGCQlC SVQoNSkKKyMgZGVmaW5lIERTSTFfQ1RSTF9DTFJfUERGCQlCSVQoNSkKKyMgZGVmaW5lIERTSTBf Q1RSTF9DTFJfUERGCQlCSVQoNCkKKyMgZGVmaW5lIERTSTFfQ1RSTF9DTFJfQ0RGCQlCSVQoNCkK KyMgZGVmaW5lIERTSTBfQ1RSTF9DTFJfQ0RGCQlCSVQoMykKKyMgZGVmaW5lIERTSTBfQ1RSTF9D VFJMMgkJQklUKDIpCisjIGRlZmluZSBEU0kxX0NUUkxfRElTQUJMRV9ESVNQX0NSQ0MJQklUKDIp CisjIGRlZmluZSBEU0kwX0NUUkxfQ1RSTDEJCUJJVCgxKQorIyBkZWZpbmUgRFNJMV9DVFJMX0RJ U0FCTEVfRElTUF9FQ0NDCUJJVCgxKQorIyBkZWZpbmUgRFNJMF9DVFJMX0NUUkwwCQlCSVQoMCkK KyMgZGVmaW5lIERTSTFfQ1RSTF9FTgkJCUJJVCgwKQorIyBkZWZpbmUgRFNJMF9DVFJMX1JFU0VU X0ZJRk9TCQkoRFNJX0NUUkxfQ0xSX0xERiB8IFwKKwkJCQkJIERTSTBfQ1RSTF9DTFJfUEJDRiB8 IFwKKwkJCQkJIERTSTBfQ1RSTF9DTFJfQ1BCQ0YgfAlcCisJCQkJCSBEU0kwX0NUUkxfQ0xSX1BE RiB8IFwKKwkJCQkJIERTSTBfQ1RSTF9DTFJfQ0RGKQorIyBkZWZpbmUgRFNJMV9DVFJMX1JFU0VU X0ZJRk9TCQkoRFNJX0NUUkxfQ0xSX0xERiB8IFwKKwkJCQkJIERTSTFfQ1RSTF9DTFJfUlhGIHwg XAorCQkJCQkgRFNJMV9DVFJMX0NMUl9QREYgfCBcCisJCQkJCSBEU0kxX0NUUkxfQ0xSX0NERikK KworI2RlZmluZSBEU0kxX1RYUEtUMkMJCTB4MGMKKyNkZWZpbmUgRFNJMV9UWFBLVDJICQkweDEw CisjZGVmaW5lIERTSTFfVFhQS1RfUElYX0ZJRk8JMHgyMAorI2RlZmluZSBEU0kxX1JYUEtUX0ZJ Rk8JCTB4MjQKKyNkZWZpbmUgRFNJMV9ESVNQMF9DVFJMCQkweDI4CisjZGVmaW5lIERTSTFfSU5U X1NUQVQJCTB4MzAKKyNkZWZpbmUgRFNJMV9JTlRfRU4JCTB4MzQKKy8qIFN0YXRlIHJlcG9ydGlu ZyBiaXRzLiAgVGhlc2UgbW9zdGx5IGJlaGF2ZSBsaWtlIElOVF9TVEFULCB3aGVyZQorICogd3Jp dGluZyBhIDEgY2xlYXJzIHRoZSBiaXQuCisgKi8KKyNkZWZpbmUgRFNJMV9TVEFUCQkweDM4Cisj IGRlZmluZSBEU0kxX1NUQVRfUEhZX0QzX1VMUFMJCUJJVCgzMSkKKyMgZGVmaW5lIERTSTFfU1RB VF9QSFlfRDNfU1RPUAkJQklUKDMwKQorIyBkZWZpbmUgRFNJMV9TVEFUX1BIWV9EMl9VTFBTCQlC SVQoMjkpCisjIGRlZmluZSBEU0kxX1NUQVRfUEhZX0QyX1NUT1AJCUJJVCgyOCkKKyMgZGVmaW5l IERTSTFfU1RBVF9QSFlfRDFfVUxQUwkJQklUKDI3KQorIyBkZWZpbmUgRFNJMV9TVEFUX1BIWV9E MV9TVE9QCQlCSVQoMjYpCisjIGRlZmluZSBEU0kxX1NUQVRfUEhZX0QwX1VMUFMJCUJJVCgyNSkK KyMgZGVmaW5lIERTSTFfU1RBVF9QSFlfRDBfU1RPUAkJQklUKDI0KQorIyBkZWZpbmUgRFNJMV9T VEFUX0ZJRk9fRVJSCQlCSVQoMjMpCisjIGRlZmluZSBEU0kxX1NUQVRfUEhZX1JYTFBEVAkJQklU KDIyKQorIyBkZWZpbmUgRFNJMV9TVEFUX1BIWV9SWFRSSUcJCUJJVCgyMSkKKyMgZGVmaW5lIERT STFfU1RBVF9QSFlfRDBfTFBEVAkJQklUKDIwKQorLyogU2V0IHdoZW4gaW4gZm9yd2FyZCBkaXJl Y3Rpb24gKi8KKyMgZGVmaW5lIERTSTFfU1RBVF9QSFlfRElSCQlCSVQoMTkpCisjIGRlZmluZSBE U0kxX1NUQVRfUEhZX0NMT0NLX1VMUFMJQklUKDE4KQorIyBkZWZpbmUgRFNJMV9TVEFUX1BIWV9D TE9DS19IUwkJQklUKDE3KQorIyBkZWZpbmUgRFNJMV9TVEFUX1BIWV9DTE9DS19TVE9QCUJJVCgx NikKKyMgZGVmaW5lIERTSTFfU1RBVF9QUl9UTwkJQklUKDE1KQorIyBkZWZpbmUgRFNJMV9TVEFU X1RBX1RPCQlCSVQoMTQpCisjIGRlZmluZSBEU0kxX1NUQVRfTFBSWF9UTwkJQklUKDEzKQorIyBk ZWZpbmUgRFNJMV9TVEFUX0hTVFhfVE8JCUJJVCgxMikKKyMgZGVmaW5lIERTSTFfU1RBVF9FUlJf Q09OVF9MUDEJCUJJVCgxMSkKKyMgZGVmaW5lIERTSTFfU1RBVF9FUlJfQ09OVF9MUDAJCUJJVCgx MCkKKyMgZGVmaW5lIERTSTFfU1RBVF9FUlJfQ09OVFJPTAkJQklUKDkpCisjIGRlZmluZSBEU0kx X1NUQVRfRVJSX1NZTkNfRVNDCQlCSVQoOCkKKyMgZGVmaW5lIERTSTFfU1RBVF9SWFBLVDIJCUJJ VCg3KQorIyBkZWZpbmUgRFNJMV9TVEFUX1JYUEtUMQkJQklUKDYpCisjIGRlZmluZSBEU0kxX1NU QVRfVFhQS1QyX0JVU1kJCUJJVCg1KQorIyBkZWZpbmUgRFNJMV9TVEFUX1RYUEtUMl9ET05FCQlC SVQoNCkKKyMgZGVmaW5lIERTSTFfU1RBVF9UWFBLVDJfRU5ECQlCSVQoMykKKyMgZGVmaW5lIERT STFfU1RBVF9UWFBLVDFfQlVTWQkJQklUKDIpCisjIGRlZmluZSBEU0kxX1NUQVRfVFhQS1QxX0RP TkUJCUJJVCgxKQorIyBkZWZpbmUgRFNJMV9TVEFUX1RYUEtUMV9FTkQJCUJJVCgwKQorCisjZGVm aW5lIERTSTFfSFNUWF9UT19DTlQJMHgzYworI2RlZmluZSBEU0kxX0xQUlhfVE9fQ05UCTB4NDAK KyNkZWZpbmUgRFNJMV9UQV9UT19DTlQJCTB4NDQKKyNkZWZpbmUgRFNJMV9QUl9UT19DTlQJCTB4 NDgKKyNkZWZpbmUgRFNJMV9QSFlDCQkweDRjCisKKyNkZWZpbmUgRFNJMV9IU19DTFQwCQkweDUw CisjIGRlZmluZSBEU0lfSFNfQ0xUMF9DWkVST19NQVNLCQlWQzRfTUFTSygyNiwgMTgpCisjIGRl ZmluZSBEU0lfSFNfQ0xUMF9DWkVST19TSElGVAkxOAorIyBkZWZpbmUgRFNJX0hTX0NMVDBfQ1BS RV9NQVNLCQlWQzRfTUFTSygxNywgOSkKKyMgZGVmaW5lIERTSV9IU19DTFQwX0NQUkVfU0hJRlQJ CTkKKyMgZGVmaW5lIERTSV9IU19DTFQwX0NQUkVQX01BU0sJCVZDNF9NQVNLKDgsIDApCisjIGRl ZmluZSBEU0lfSFNfQ0xUMF9DUFJFUF9TSElGVAkwCisKKyNkZWZpbmUgRFNJMV9IU19DTFQxCQkw eDU0CisjIGRlZmluZSBEU0lfSFNfQ0xUMV9DVFJBSUxfTUFTSwlWQzRfTUFTSygxNywgOSkKKyMg ZGVmaW5lIERTSV9IU19DTFQxX0NUUkFJTF9TSElGVAk5CisjIGRlZmluZSBEU0lfSFNfQ0xUMV9D UE9TVF9NQVNLCQlWQzRfTUFTSyg4LCAwKQorIyBkZWZpbmUgRFNJX0hTX0NMVDFfQ1BPU1RfU0hJ RlQJMAorCisjZGVmaW5lIERTSTFfSFNfQ0xUMgkJMHg1OAorIyBkZWZpbmUgRFNJX0hTX0NMVDJf V1VQX01BU0sJCVZDNF9NQVNLKDIzLCAwKQorIyBkZWZpbmUgRFNJX0hTX0NMVDJfV1VQX1NISUZU CQkwCisKKyNkZWZpbmUgRFNJMV9IU19ETFQzCQkweDVjCisjIGRlZmluZSBEU0lfSFNfRExUM19F WElUX01BU0sJCVZDNF9NQVNLKDI2LCAxOCkKKyMgZGVmaW5lIERTSV9IU19ETFQzX0VYSVRfU0hJ RlQJCTE4CisjIGRlZmluZSBEU0lfSFNfRExUM19aRVJPX01BU0sJCVZDNF9NQVNLKDE3LCA5KQor IyBkZWZpbmUgRFNJX0hTX0RMVDNfWkVST19TSElGVAkJOQorIyBkZWZpbmUgRFNJX0hTX0RMVDNf UFJFX01BU0sJCVZDNF9NQVNLKDgsIDApCisjIGRlZmluZSBEU0lfSFNfRExUM19QUkVfU0hJRlQJ CTAKKworI2RlZmluZSBEU0kxX0hTX0RMVDQJCTB4NjAKKyMgZGVmaW5lIERTSV9IU19ETFQ0X0FO TEFUX01BU0sJCVZDNF9NQVNLKDIyLCAxOCkKKyMgZGVmaW5lIERTSV9IU19ETFQ0X0FOTEFUX1NI SUZUCTE4CisjIGRlZmluZSBEU0lfSFNfRExUNF9UUkFJTF9NQVNLCQlWQzRfTUFTSygxNywgOSkK KyMgZGVmaW5lIERTSV9IU19ETFQ0X1RSQUlMX1NISUZUCTkKKyMgZGVmaW5lIERTSV9IU19ETFQ0 X0xQWF9NQVNLCQlWQzRfTUFTSyg4LCAwKQorIyBkZWZpbmUgRFNJX0hTX0RMVDRfTFBYX1NISUZU CQkwCisKKyNkZWZpbmUgRFNJMV9IU19ETFQ1CQkweDY0CisjIGRlZmluZSBEU0lfSFNfRExUNV9J TklUX01BU0sJCVZDNF9NQVNLKDIzLCAwKQorIyBkZWZpbmUgRFNJX0hTX0RMVDVfSU5JVF9TSElG VAkJMAorCisjZGVmaW5lIERTSTFfSFNfRExUNgkJMHg2OAorIyBkZWZpbmUgRFNJX0hTX0RMVDZf VEFfR0VUX01BU0sJVkM0X01BU0soMzEsIDI0KQorIyBkZWZpbmUgRFNJX0hTX0RMVDZfVEFfR0VU X1NISUZUCTI0CisjIGRlZmluZSBEU0lfSFNfRExUNl9UQV9TVVJFX01BU0sJVkM0X01BU0soMjMs IDE2KQorIyBkZWZpbmUgRFNJX0hTX0RMVDZfVEFfU1VSRV9TSElGVAkxNgorIyBkZWZpbmUgRFNJ X0hTX0RMVDZfVEFfR09fTUFTSwkJVkM0X01BU0soMTUsIDgpCisjIGRlZmluZSBEU0lfSFNfRExU Nl9UQV9HT19TSElGVAk4CisjIGRlZmluZSBEU0lfSFNfRExUNl9MUF9MUFhfTUFTSwlWQzRfTUFT Syg3LCAwKQorIyBkZWZpbmUgRFNJX0hTX0RMVDZfTFBfTFBYX1NISUZUCTAKKworI2RlZmluZSBE U0kxX0hTX0RMVDcJCTB4NmMKKyMgZGVmaW5lIERTSV9IU19ETFQ3X0xQX1dVUF9NQVNLCVZDNF9N QVNLKDIzLCAwKQorIyBkZWZpbmUgRFNJX0hTX0RMVDdfTFBfV1VQX1NISUZUCTAKKworI2RlZmlu ZSBEU0kxX1BIWV9BRkVDMAkJMHg3MAorCisjZGVmaW5lIERTSTFfUEhZX0FGRUMxCQkweDc0Cisj IGRlZmluZSBEU0kxX1BIWV9BRkVDMV9BQ1RSTF9ETEFORTNfTUFTSwlWQzRfTUFTSygxOSwgMTYp CisjIGRlZmluZSBEU0kxX1BIWV9BRkVDMV9BQ1RSTF9ETEFORTNfU0hJRlQJMTYKKyMgZGVmaW5l IERTSTFfUEhZX0FGRUMxX0FDVFJMX0RMQU5FMl9NQVNLCVZDNF9NQVNLKDE1LCAxMikKKyMgZGVm aW5lIERTSTFfUEhZX0FGRUMxX0FDVFJMX0RMQU5FMl9TSElGVAkxMgorIyBkZWZpbmUgRFNJMV9Q SFlfQUZFQzFfQUNUUkxfRExBTkUxX01BU0sJVkM0X01BU0soMTEsIDgpCisjIGRlZmluZSBEU0kx X1BIWV9BRkVDMV9BQ1RSTF9ETEFORTFfU0hJRlQJOAorIyBkZWZpbmUgRFNJMV9QSFlfQUZFQzFf QUNUUkxfRExBTkUwX01BU0sJVkM0X01BU0soNywgNCkKKyMgZGVmaW5lIERTSTFfUEhZX0FGRUMx X0FDVFJMX0RMQU5FMF9TSElGVAk0CisjIGRlZmluZSBEU0kxX1BIWV9BRkVDMV9BQ1RSTF9DTEFO RV9NQVNLCVZDNF9NQVNLKDMsIDApCisjIGRlZmluZSBEU0kxX1BIWV9BRkVDMV9BQ1RSTF9DTEFO RV9TSElGVAkwCisKKyNkZWZpbmUgRFNJMV9UU1RfU0VMCQkweDc4CisjZGVmaW5lIERTSTFfVFNU X01PTgkJMHg3YworI2RlZmluZSBEU0kxX1BIWV9UU1QxCQkweDgwCisjZGVmaW5lIERTSTFfUEhZ X1RTVDIJCTB4ODQKKyNkZWZpbmUgRFNJMV9QSFlfRklGT19TVEFUCTB4ODgKKy8qIEFjdHVhbGx5 LCBhbGwgcmVnaXN0ZXJzIGluIHRoZSByYW5nZSB0aGF0IGFyZW4ndCBvdGhlcndpc2UgY2xhaW1l ZAorICogd2lsbCByZXR1cm4gdGhlIElELgorICovCisjZGVmaW5lIERTSTFfSUQJCQkweDhjCisK Ky8qIEdlbmVyYWwgRFNJIGhhcmR3YXJlIHN0YXRlLiAqLworc3RydWN0IHZjNF9kc2kgeworCXN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCBkc2lf aG9zdDsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKKworCXZvaWQgX19pb21l bSAqcmVnczsKKworCXN0cnVjdCBkbWFfY2hhbiAqcmVnX2RtYV9jaGFuOworCWRtYV9hZGRyX3Qg cmVnX2RtYV9wYWRkcjsKKwl1MzIgKnJlZ19kbWFfbWVtOworCWRtYV9hZGRyX3QgcmVnX3BhZGRy OworCisJLyogV2hldGhlciB3ZSdyZSBvbiBiY20yODM1J3MgRFNJMCBvciBEU0kxLiAqLworCWlu dCBwb3J0OworCisJLyogRFNJIGNoYW5uZWwgZm9yIHRoZSBwYW5lbCB3ZSdyZSBjb25uZWN0ZWQg dG8uICovCisJdTMyIGNoYW5uZWw7CisJdTMyIGxhbmVzOworCWVudW0gbWlwaV9kc2lfcGl4ZWxf Zm9ybWF0IGZvcm1hdDsKKwl1MzIgbW9kZV9mbGFnczsKKworCS8qIElucHV0IGNsb2NrIGZyb20g Q1BSTUFOIHRvIHRoZSBkaWdpdGFsIFBIWSwgZm9yIHRoZSBEU0kKKwkgKiBlc2NhcGUgY2xvY2su CisJICovCisJc3RydWN0IGNsayAqZXNjYXBlX2Nsb2NrOworCisJLyogSW5wdXQgY2xvY2sgdG8g dGhlIGFuYWxvZyBQSFksIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIERTSSBiaXQKKwkgKiBjbG9jay4K KwkgKi8KKwlzdHJ1Y3QgY2xrICpwbGxfcGh5X2Nsb2NrOworCisJLyogSFMgQ2xvY2tzIGdlbmVy YXRlZCB3aXRoaW4gdGhlIERTSSBhbmFsb2cgUEhZLiAqLworCXN0cnVjdCBjbGtfZml4ZWRfZmFj dG9yIHBoeV9jbG9ja3NbM107CisKKwlzdHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSBjbGtfb25lY2Vs bDsKKworCS8qIFBpeGVsIGNsb2NrIG91dHB1dCB0byB0aGUgcGl4ZWx2YWx2ZSwgZ2VuZXJhdGVk IGZyb20gdGhlIEhTCisJICogY2xvY2suCisJICovCisJc3RydWN0IGNsayAqcGl4ZWxfY2xvY2s7 CisKKwlzdHJ1Y3QgY29tcGxldGlvbiB4ZmVyX2NvbXBsZXRpb247CisJaW50IHhmZXJfcmVzdWx0 OworfTsKKworI2RlZmluZSBob3N0X3RvX2RzaShob3N0KSBjb250YWluZXJfb2YoaG9zdCwgc3Ry dWN0IHZjNF9kc2ksIGRzaV9ob3N0KQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RzaV9kbWFfd29y a2Fyb3VuZF93cml0ZShzdHJ1Y3QgdmM0X2RzaSAqZHNpLCB1MzIgb2Zmc2V0LCB1MzIgdmFsKQor eworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGRzaS0+cmVnX2RtYV9jaGFuOworCXN0cnVjdCBk bWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHg7CisJZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwlpbnQg cmV0OworCisJLyogRFNJMCBzaG91bGQgYmUgYWJsZSB0byB3cml0ZSBub3JtYWxseS4gKi8KKwlp ZiAoIWNoYW4pIHsKKwkJd3JpdGVsKHZhbCwgZHNpLT5yZWdzICsgb2Zmc2V0KTsKKwkJcmV0dXJu OworCX0KKworCSpkc2ktPnJlZ19kbWFfbWVtID0gdmFsOworCisJdHggPSBjaGFuLT5kZXZpY2Ut PmRldmljZV9wcmVwX2RtYV9tZW1jcHkoY2hhbiwKKwkJCQkJCSAgZHNpLT5yZWdfcGFkZHIgKyBv ZmZzZXQsCisJCQkJCQkgIGRzaS0+cmVnX2RtYV9wYWRkciwKKwkJCQkJCSAgNCwgMCk7CisJaWYg KCF0eCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBzZXQgdXAgRE1BIHJlZ2lzdGVyIHdyaXRl XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWNvb2tpZSA9IHR4LT50eF9zdWJtaXQodHgpOworCXJl dCA9IGRtYV9zdWJtaXRfZXJyb3IoY29va2llKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigi RmFpbGVkIHRvIHN1Ym1pdCBETUE6ICVkXG4iLCByZXQpOworCQlyZXR1cm47CisJfQorCXJldCA9 IGRtYV9zeW5jX3dhaXQoY2hhbiwgY29va2llKTsKKwlpZiAocmV0KQorCQlEUk1fRVJST1IoIkZh aWxlZCB0byB3YWl0IGZvciBETUE6ICVkXG4iLCByZXQpOworfQorCisjZGVmaW5lIERTSV9SRUFE KG9mZnNldCkgcmVhZGwoZHNpLT5yZWdzICsgKG9mZnNldCkpCisjZGVmaW5lIERTSV9XUklURShv ZmZzZXQsIHZhbCkgZHNpX2RtYV93b3JrYXJvdW5kX3dyaXRlKGRzaSwgb2Zmc2V0LCB2YWwpCisj ZGVmaW5lIERTSV9QT1JUX1JFQUQob2Zmc2V0KSBcCisJRFNJX1JFQUQoZHNpLT5wb3J0ID8gRFNJ MV8jI29mZnNldCA6IERTSTBfIyNvZmZzZXQpCisjZGVmaW5lIERTSV9QT1JUX1dSSVRFKG9mZnNl dCwgdmFsKSBcCisJRFNJX1dSSVRFKGRzaS0+cG9ydCA/IERTSTFfIyNvZmZzZXQgOiBEU0kwXyMj b2Zmc2V0LCB2YWwpCisjZGVmaW5lIERTSV9QT1JUX0JJVChiaXQpIChkc2ktPnBvcnQgPyBEU0kx XyMjYml0IDogRFNJMF8jI2JpdCkKKworLyogVkM0IERTSSBlbmNvZGVyIEtNUyBzdHJ1Y3QgKi8K K3N0cnVjdCB2YzRfZHNpX2VuY29kZXIgeworCXN0cnVjdCB2YzRfZW5jb2RlciBiYXNlOworCXN0 cnVjdCB2YzRfZHNpICpkc2k7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2YzRfZHNpX2Vu Y29kZXIgKgordG9fdmM0X2RzaV9lbmNvZGVyKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikK K3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGVuY29kZXIsIHN0cnVjdCB2YzRfZHNpX2VuY29kZXIs IGJhc2UuYmFzZSk7Cit9CisKKy8qIFZDNCBEU0kgY29ubmVjdG9yIEtNUyBzdHJ1Y3QgKi8KK3N0 cnVjdCB2YzRfZHNpX2Nvbm5lY3RvciB7CisJc3RydWN0IGRybV9jb25uZWN0b3IgYmFzZTsKKwlz dHJ1Y3QgdmM0X2RzaSAqZHNpOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmM0X2RzaV9j b25uZWN0b3IgKgordG9fdmM0X2RzaV9jb25uZWN0b3Ioc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvcikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNvbm5lY3Rvciwgc3RydWN0IHZjNF9k c2lfY29ubmVjdG9yLCBiYXNlKTsKK30KKworI2RlZmluZSBEU0lfUkVHKHJlZykgeyByZWcsICNy ZWcgfQorc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJdTMyIHJlZzsKKwljb25zdCBjaGFyICpuYW1l OworfSBkc2kwX3JlZ3NbXSA9IHsKKwlEU0lfUkVHKERTSTBfQ1RSTCksCisJRFNJX1JFRyhEU0kw X1NUQVQpLAorCURTSV9SRUcoRFNJMF9IU1RYX1RPX0NOVCksCisJRFNJX1JFRyhEU0kwX0xQUlhf VE9fQ05UKSwKKwlEU0lfUkVHKERTSTBfVEFfVE9fQ05UKSwKKwlEU0lfUkVHKERTSTBfUFJfVE9f Q05UKSwKKwlEU0lfUkVHKERTSTBfRElTUDBfQ1RSTCksCisJRFNJX1JFRyhEU0kwX0RJU1AxX0NU UkwpLAorCURTSV9SRUcoRFNJMF9JTlRfU1RBVCksCisJRFNJX1JFRyhEU0kwX0lOVF9FTiksCisJ RFNJX1JFRyhEU0kwX1BIWUMpLAorCURTSV9SRUcoRFNJMF9IU19DTFQwKSwKKwlEU0lfUkVHKERT STBfSFNfQ0xUMSksCisJRFNJX1JFRyhEU0kwX0hTX0NMVDIpLAorCURTSV9SRUcoRFNJMF9IU19E TFQzKSwKKwlEU0lfUkVHKERTSTBfSFNfRExUNCksCisJRFNJX1JFRyhEU0kwX0hTX0RMVDUpLAor CURTSV9SRUcoRFNJMF9IU19ETFQ2KSwKKwlEU0lfUkVHKERTSTBfSFNfRExUNyksCisJRFNJX1JF RyhEU0kwX1BIWV9BRkVDMCksCisJRFNJX1JFRyhEU0kwX1BIWV9BRkVDMSksCisJRFNJX1JFRyhE U0kwX0lEKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXUzMiByZWc7CisJY29uc3Qg Y2hhciAqbmFtZTsKK30gZHNpMV9yZWdzW10gPSB7CisJRFNJX1JFRyhEU0kxX0NUUkwpLAorCURT SV9SRUcoRFNJMV9TVEFUKSwKKwlEU0lfUkVHKERTSTFfSFNUWF9UT19DTlQpLAorCURTSV9SRUco RFNJMV9MUFJYX1RPX0NOVCksCisJRFNJX1JFRyhEU0kxX1RBX1RPX0NOVCksCisJRFNJX1JFRyhE U0kxX1BSX1RPX0NOVCksCisJRFNJX1JFRyhEU0kxX0RJU1AwX0NUUkwpLAorCURTSV9SRUcoRFNJ MV9ESVNQMV9DVFJMKSwKKwlEU0lfUkVHKERTSTFfSU5UX1NUQVQpLAorCURTSV9SRUcoRFNJMV9J TlRfRU4pLAorCURTSV9SRUcoRFNJMV9QSFlDKSwKKwlEU0lfUkVHKERTSTFfSFNfQ0xUMCksCisJ RFNJX1JFRyhEU0kxX0hTX0NMVDEpLAorCURTSV9SRUcoRFNJMV9IU19DTFQyKSwKKwlEU0lfUkVH KERTSTFfSFNfRExUMyksCisJRFNJX1JFRyhEU0kxX0hTX0RMVDQpLAorCURTSV9SRUcoRFNJMV9I U19ETFQ1KSwKKwlEU0lfUkVHKERTSTFfSFNfRExUNiksCisJRFNJX1JFRyhEU0kxX0hTX0RMVDcp LAorCURTSV9SRUcoRFNJMV9QSFlfQUZFQzApLAorCURTSV9SRUcoRFNJMV9QSFlfQUZFQzEpLAor CURTSV9SRUcoRFNJMV9JRCksCit9OworCitzdGF0aWMgdm9pZCB2YzRfZHNpX2R1bXBfcmVncyhz dHJ1Y3QgdmM0X2RzaSAqZHNpKQoreworCWludCBpOworCisJaWYgKGRzaS0+cG9ydCA9PSAwKSB7 CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRzaTBfcmVncyk7IGkrKykgeworCQkJRFJN X0lORk8oIjB4JTA0eCAoJXMpOiAweCUwOHhcbiIsCisJCQkJIGRzaTBfcmVnc1tpXS5yZWcsIGRz aTBfcmVnc1tpXS5uYW1lLAorCQkJCSBEU0lfUkVBRChkc2kwX3JlZ3NbaV0ucmVnKSk7CisJCX0K Kwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkc2kxX3JlZ3MpOyBpKysp IHsKKwkJCURSTV9JTkZPKCIweCUwNHggKCVzKTogMHglMDh4XG4iLAorCQkJCSBkc2kxX3JlZ3Nb aV0ucmVnLCBkc2kxX3JlZ3NbaV0ubmFtZSwKKwkJCQkgRFNJX1JFQUQoZHNpMV9yZWdzW2ldLnJl ZykpOworCQl9CisJfQorfQorCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCitpbnQgdmM0X2RzaV9k ZWJ1Z2ZzX3JlZ3Moc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0 IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKiltLT5wcml2YXRl OworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBub2RlLT5taW5vci0+ZGV2OworCXN0cnVjdCB2 YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRybSk7CisJaW50IGRzaV9pbmRleCA9ICh1aW50cHRy X3Qpbm9kZS0+aW5mb19lbnQtPmRhdGE7CisJc3RydWN0IHZjNF9kc2kgKmRzaSA9IChkc2lfaW5k ZXggPT0gMSA/IHZjNC0+ZHNpMSA6IE5VTEwpOworCWludCBpOworCisJaWYgKCFkc2kpCisJCXJl dHVybiAwOworCisJaWYgKGRzaS0+cG9ydCA9PSAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKGRzaTBfcmVncyk7IGkrKykgeworCQkJc2VxX3ByaW50ZihtLCAiMHglMDR4ICglcyk6 IDB4JTA4eFxuIiwKKwkJCQkgICBkc2kwX3JlZ3NbaV0ucmVnLCBkc2kwX3JlZ3NbaV0ubmFtZSwK KwkJCQkgICBEU0lfUkVBRChkc2kwX3JlZ3NbaV0ucmVnKSk7CisJCX0KKwl9IGVsc2UgeworCQlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkc2kxX3JlZ3MpOyBpKyspIHsKKwkJCXNlcV9wcmlu dGYobSwgIjB4JTA0eCAoJXMpOiAweCUwOHhcbiIsCisJCQkJICAgZHNpMV9yZWdzW2ldLnJlZywg ZHNpMV9yZWdzW2ldLm5hbWUsCisJCQkJICAgRFNJX1JFQUQoZHNpMV9yZWdzW2ldLnJlZykpOwor CQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGVudW0gZHJtX2Nvbm5l Y3Rvcl9zdGF0dXMKK3ZjNF9kc2lfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQoreworCXN0cnVjdCB2YzRfZHNpX2Nvbm5lY3RvciAq dmM0X2Nvbm5lY3RvciA9CisJCXRvX3ZjNF9kc2lfY29ubmVjdG9yKGNvbm5lY3Rvcik7CisJc3Ry dWN0IHZjNF9kc2kgKmRzaSA9IHZjNF9jb25uZWN0b3ItPmRzaTsKKworCWlmIChkc2ktPnBhbmVs KQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJZWxzZQorCQlyZXR1cm4g Y29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIHZjNF9kc2lf Y29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlk cm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFu dXAoY29ubmVjdG9yKTsKK30KKworc3RhdGljIGludCB2YzRfZHNpX2Nvbm5lY3Rvcl9nZXRfbW9k ZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgdmM0X2RzaV9j b25uZWN0b3IgKnZjNF9jb25uZWN0b3IgPQorCQl0b192YzRfZHNpX2Nvbm5lY3Rvcihjb25uZWN0 b3IpOworCXN0cnVjdCB2YzRfZHNpICpkc2kgPSB2YzRfY29ubmVjdG9yLT5kc2k7CisKKwlpZiAo ZHNpLT5wYW5lbCkKKwkJcmV0dXJuIGRybV9wYW5lbF9nZXRfbW9kZXMoZHNpLT5wYW5lbCk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNz IHZjNF9kc2lfY29ubmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJf Y29ubmVjdG9yX2RwbXMsCisJLmRldGVjdCA9IHZjNF9kc2lfY29ubmVjdG9yX2RldGVjdCwKKwku ZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwku ZGVzdHJveSA9IHZjNF9kc2lfY29ubmVjdG9yX2Rlc3Ryb3ksCisJLnJlc2V0ID0gZHJtX2F0b21p Y19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJt X2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ry b3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgdmM0X2Rz aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSB2YzRfZHNpX2Nvbm5l Y3Rvcl9nZXRfbW9kZXMsCit9OworCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3IgKnZjNF9k c2lfY29ubmVjdG9yX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCSAgICBzdHJ1 Y3QgdmM0X2RzaSAqZHNpKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBO VUxMOworCXN0cnVjdCB2YzRfZHNpX2Nvbm5lY3RvciAqZHNpX2Nvbm5lY3RvcjsKKwlpbnQgcmV0 ID0gMDsKKworCWRzaV9jb25uZWN0b3IgPSBkZXZtX2t6YWxsb2MoZGV2LT5kZXYsIHNpemVvZigq ZHNpX2Nvbm5lY3RvciksCisJCQkJICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWRzaV9jb25uZWN0 b3IpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwljb25uZWN0b3IgPSAm ZHNpX2Nvbm5lY3Rvci0+YmFzZTsKKworCWRzaV9jb25uZWN0b3ItPmRzaSA9IGRzaTsKKworCWRy bV9jb25uZWN0b3JfaW5pdChkZXYsIGNvbm5lY3RvciwgJnZjNF9kc2lfY29ubmVjdG9yX2Z1bmNz LAorCQkJICAgRFJNX01PREVfQ09OTkVDVE9SX0RTSSk7CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJf YWRkKGNvbm5lY3RvciwgJnZjNF9kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwljb25u ZWN0b3ItPnBvbGxlZCA9IDA7CisJY29ubmVjdG9yLT5pbnRlcmxhY2VfYWxsb3dlZCA9IDA7CisJ Y29ubmVjdG9yLT5kb3VibGVzY2FuX2FsbG93ZWQgPSAwOworCisJZHJtX21vZGVfY29ubmVjdG9y X2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZHNpLT5lbmNvZGVyKTsKKworCXJldHVybiBjb25u ZWN0b3I7CisKK2ZhaWw6CisJaWYgKGNvbm5lY3RvcikKKwkJdmM0X2RzaV9jb25uZWN0b3JfZGVz dHJveShjb25uZWN0b3IpOworCisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKworc3RhdGljIHZv aWQgdmM0X2RzaV9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQor eworCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2VuY29kZXJfZnVuY3MgdmM0X2RzaV9lbmNvZGVyX2Z1bmNzID0geworCS5kZXN0cm95 ID0gdmM0X2RzaV9lbmNvZGVyX2Rlc3Ryb3ksCit9OworCitzdGF0aWMgdm9pZCB2YzRfZHNpX2xh dGNoX3VscHMoc3RydWN0IHZjNF9kc2kgKmRzaSwgYm9vbCBsYXRjaCkKK3sKKwl1MzIgYWZlYzAg PSBEU0lfUE9SVF9SRUFEKFBIWV9BRkVDMCk7CisKKwlpZiAobGF0Y2gpCisJCWFmZWMwIHw9IERT SV9QT1JUX0JJVChQSFlfQUZFQzBfTEFUQ0hfVUxQUyk7CisJZWxzZQorCQlhZmVjMCAmPSB+RFNJ X1BPUlRfQklUKFBIWV9BRkVDMF9MQVRDSF9VTFBTKTsKKworCURTSV9QT1JUX1dSSVRFKFBIWV9B RkVDMCwgYWZlYzApOworfQorCisvKiBFbnRlcnMgb3IgZXhpdHMgVWx0cmEgTG93IFBvd2VyIFN0 YXRlLiAqLworc3RhdGljIHZvaWQgdmM0X2RzaV91bHBzKHN0cnVjdCB2YzRfZHNpICpkc2ksIGJv b2wgdWxwcykKK3sKKwlib29sIGNvbnRpbnVvdXMgPSBkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RT SV9DTE9DS19OT05fQ09OVElOVU9VUzsKKwl1MzIgcGh5Y191bHBzID0gKChjb250aW51b3VzID8g RFNJX1BPUlRfQklUKFBIWUNfQ0xBTkVfVUxQUykgOiAwKSB8CisJCQkgRFNJX1BIWUNfRExBTkUw X1VMUFMgfAorCQkJIChkc2ktPmxhbmVzID4gMSA/IERTSV9QSFlDX0RMQU5FMV9VTFBTIDogMCkg fAorCQkJIChkc2ktPmxhbmVzID4gMiA/IERTSV9QSFlDX0RMQU5FMl9VTFBTIDogMCkgfAorCQkJ IChkc2ktPmxhbmVzID4gMyA/IERTSV9QSFlDX0RMQU5FM19VTFBTIDogMCkpOworCXUzMiBzdGF0 X3VscHMgPSAoKGNvbnRpbnVvdXMgPyBEU0kxX1NUQVRfUEhZX0NMT0NLX1VMUFMgOiAwKSB8CisJ CQkgRFNJMV9TVEFUX1BIWV9EMF9VTFBTIHwKKwkJCSAoZHNpLT5sYW5lcyA+IDEgPyBEU0kxX1NU QVRfUEhZX0QxX1VMUFMgOiAwKSB8CisJCQkgKGRzaS0+bGFuZXMgPiAyID8gRFNJMV9TVEFUX1BI WV9EMl9VTFBTIDogMCkgfAorCQkJIChkc2ktPmxhbmVzID4gMyA/IERTSTFfU1RBVF9QSFlfRDNf VUxQUyA6IDApKTsKKwl1MzIgc3RhdF9zdG9wID0gKChjb250aW51b3VzID8gRFNJMV9TVEFUX1BI WV9DTE9DS19TVE9QIDogMCkgfAorCQkJIERTSTFfU1RBVF9QSFlfRDBfU1RPUCB8CisJCQkgKGRz aS0+bGFuZXMgPiAxID8gRFNJMV9TVEFUX1BIWV9EMV9TVE9QIDogMCkgfAorCQkJIChkc2ktPmxh bmVzID4gMiA/IERTSTFfU1RBVF9QSFlfRDJfU1RPUCA6IDApIHwKKwkJCSAoZHNpLT5sYW5lcyA+ IDMgPyBEU0kxX1NUQVRfUEhZX0QzX1NUT1AgOiAwKSk7CisJaW50IHJldDsKKworCURTSV9QT1JU X1dSSVRFKFNUQVQsIHN0YXRfdWxwcyk7CisJRFNJX1BPUlRfV1JJVEUoUEhZQywgRFNJX1BPUlRf UkVBRChQSFlDKSB8IHBoeWNfdWxwcyk7CisJcmV0ID0gd2FpdF9mb3IoKERTSV9QT1JUX1JFQUQo U1RBVCkgJiBzdGF0X3VscHMpID09IHN0YXRfdWxwcywgMjAwKTsKKwlpZiAocmV0KSB7CisJCWRl dl93YXJuKCZkc2ktPnBkZXYtPmRldiwKKwkJCSAiVGltZW91dCB3YWl0aW5nIGZvciBEU0kgVUxQ UyBlbnRyeTogU1RBVCAweCUwOHgiLAorCQkJIERTSV9QT1JUX1JFQUQoU1RBVCkpOworCQlEU0lf UE9SVF9XUklURShQSFlDLCBEU0lfUE9SVF9SRUFEKFBIWUMpICYgfnBoeWNfdWxwcyk7CisJCXZj NF9kc2lfbGF0Y2hfdWxwcyhkc2ksIGZhbHNlKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFRoZSBE U0kgbW9kdWxlIGNhbid0IGJlIGRpc2FibGVkIHdoaWxlIHRoZSBtb2R1bGUgaXMKKwkgKiBnZW5l cmF0aW5nIFVMUFMgc3RhdGUuICBTbywgdG8gYmUgYWJsZSB0byBkaXNhYmxlIHRoZQorCSAqIG1v ZHVsZSwgd2UgaGF2ZSB0aGUgQUZFIGxhdGNoIHRoZSBVTFBTIHN0YXRlIGFuZCBjb250aW51ZQor CSAqIG9uIHRvIGhhdmluZyB0aGUgbW9kdWxlIGVudGVyIFNUT1AuCisJICovCisJdmM0X2RzaV9s YXRjaF91bHBzKGRzaSwgdWxwcyk7CisKKwlEU0lfUE9SVF9XUklURShTVEFULCBzdGF0X3N0b3Ap OworCURTSV9QT1JUX1dSSVRFKFBIWUMsIERTSV9QT1JUX1JFQUQoUEhZQykgJiB+cGh5Y191bHBz KTsKKwlyZXQgPSB3YWl0X2ZvcigoRFNJX1BPUlRfUkVBRChTVEFUKSAmIHN0YXRfc3RvcCkgPT0g c3RhdF9zdG9wLCAyMDApOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oJmRzaS0+cGRldi0+ZGV2 LAorCQkJICJUaW1lb3V0IHdhaXRpbmcgZm9yIERTSSBTVE9QIGVudHJ5OiBTVEFUIDB4JTA4eCIs CisJCQkgRFNJX1BPUlRfUkVBRChTVEFUKSk7CisJCURTSV9QT1JUX1dSSVRFKFBIWUMsIERTSV9Q T1JUX1JFQUQoUEhZQykgJiB+cGh5Y191bHBzKTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGlj IHUzMgorZHNpX2hzX3RpbWluZyh1MzIgdWlfbnMsIHUzMiBucywgdTMyIHVpKQoreworCS8qIFRo ZSBIUyB0aW1pbmdzIGhhdmUgdG8gYmUgcm91bmRlZCB1cCB0byBhIG11bHRpcGxlIG9mIDgKKwkg KiBiZWNhdXNlIHdlJ3JlIHVzaW5nIHRoZSBieXRlIGNsb2NrLgorCSAqLworCXJldHVybiByb3Vu ZHVwKHVpICsgRElWX1JPVU5EX1VQKG5zLCB1aV9ucyksIDgpOworfQorCisvKiBFU0MgYWx3YXlz IHJ1bnMgYXQgMTAwTWh6LiAqLworI2RlZmluZSBFU0NfVElNRV9OUyAxMAorCitzdGF0aWMgdTMy Citkc2lfZXNjX3RpbWluZyh1MzIgbnMpCit7CisJcmV0dXJuIERJVl9ST1VORF9VUChucywgRVND X1RJTUVfTlMpOworfQorCitzdGF0aWMgdm9pZCB2YzRfZHNpX2VuY29kZXJfZGlzYWJsZShzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IHZjNF9kc2lfZW5jb2RlciAqdmM0 X2VuY29kZXIgPSB0b192YzRfZHNpX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IHZjNF9kc2kg KmRzaSA9IHZjNF9lbmNvZGVyLT5kc2k7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRzaS0+cGRl di0+ZGV2OworCisJZHJtX3BhbmVsX2Rpc2FibGUoZHNpLT5wYW5lbCk7CisKKwl2YzRfZHNpX3Vs cHMoZHNpLCB0cnVlKTsKKworCWRybV9wYW5lbF91bnByZXBhcmUoZHNpLT5wYW5lbCk7CisKKwlj bGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5wbGxfcGh5X2Nsb2NrKTsKKwljbGtfZGlzYWJsZV91 bnByZXBhcmUoZHNpLT5lc2NhcGVfY2xvY2spOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2kt PnBpeGVsX2Nsb2NrKTsKKworCXBtX3J1bnRpbWVfcHV0KGRldik7Cit9CisKK3N0YXRpYyB2b2lk IHZjNF9kc2lfZW5jb2Rlcl9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQorewor CXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJmVuY29kZXItPmNydGMtPm1vZGU7CisJ c3RydWN0IHZjNF9kc2lfZW5jb2RlciAqdmM0X2VuY29kZXIgPSB0b192YzRfZHNpX2VuY29kZXIo ZW5jb2Rlcik7CisJc3RydWN0IHZjNF9kc2kgKmRzaSA9IHZjNF9lbmNvZGVyLT5kc2k7CisJc3Ry dWN0IGRldmljZSAqZGV2ID0gJmRzaS0+cGRldi0+ZGV2OworCXUzMiBmb3JtYXQgPSAwLCBkaXZp ZGVyID0gMDsKKwlib29sIGRlYnVnX2R1bXBfcmVncyA9IGZhbHNlOworCXVuc2lnbmVkIGxvbmcg aHNfY2xvY2s7CisJdTMyIHVpX25zOworCS8qIE1pbmltdW0gTFAgc3RhdGUgZHVyYXRpb24gaW4g ZXNjYXBlIGNsb2NrIGN5Y2xlcy4gKi8KKwl1MzIgbHB4ID0gZHNpX2VzY190aW1pbmcoNjApOwor CXVuc2lnbmVkIGxvbmcgcGl4ZWxfY2xvY2tfaHogPSBtb2RlLT5jbG9jayAqIDEwMDA7CisJdW5z aWduZWQgbG9uZyBkc2lwX2Nsb2NrOworCXVuc2lnbmVkIGxvbmcgcGh5X2Nsb2NrOworCWludCBy ZXQ7CisKKwlyZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKGRldik7CisJaWYgKHJldCkgeworCQlE Uk1fRVJST1IoIkZhaWxlZCB0byBydW50aW1lIFBNIGVuYWJsZSBvbiBEU0klZFxuIiwgZHNpLT5w b3J0KTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IGRybV9wYW5lbF9wcmVwYXJlKGRzaS0+cGFu ZWwpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJQYW5lbCBmYWlsZWQgdG8gcHJlcGFyZVxu Iik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZGVidWdfZHVtcF9yZWdzKSB7CisJCURSTV9JTkZP KCJEU0kgcmVncyBiZWZvcmU6XG4iKTsKKwkJdmM0X2RzaV9kdW1wX3JlZ3MoZHNpKTsKKwl9CisK Kwlzd2l0Y2ggKGRzaS0+Zm9ybWF0KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQlm b3JtYXQgPSBEU0lfUEZPUk1BVF9SR0I4ODg7CisJCWRpdmlkZXIgPSAyNCAvIGRzaS0+bGFuZXM7 CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoKKwkJZm9ybWF0ID0gRFNJX1BG T1JNQVRfUkdCNjY2OworCQlkaXZpZGVyID0gMjQgLyBkc2ktPmxhbmVzOworCQlicmVhazsKKwlj YXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQlmb3JtYXQgPSBEU0lfUEZPUk1BVF9S R0I2NjZfUEFDS0VEOworCQlkaXZpZGVyID0gMTggLyBkc2ktPmxhbmVzOworCQlicmVhazsKKwlj YXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6CisJCWZvcm1hdCA9IERTSV9QRk9STUFUX1JHQjU2NTsK KwkJZGl2aWRlciA9IDE2IC8gZHNpLT5sYW5lczsKKwkJYnJlYWs7CisJfQorCisJcGh5X2Nsb2Nr ID0gcGl4ZWxfY2xvY2tfaHogKiBkaXZpZGVyOworCXJldCA9IGNsa19zZXRfcmF0ZShkc2ktPnBs bF9waHlfY2xvY2ssIHBoeV9jbG9jayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZkc2ktPnBk ZXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gc2V0IHBoeSBjbG9jayB0byAlbGQ6ICVkXG4iLCBwaHlf Y2xvY2ssIHJldCk7CisJfQorCisJLyogUmVzZXQgdGhlIERTSSBhbmQgYWxsIGl0cyBmaWZvcy4g Ki8KKwlEU0lfUE9SVF9XUklURShDVFJMLAorCQkgICAgICAgRFNJX0NUUkxfU09GVF9SRVNFVF9D RkcgfAorCQkgICAgICAgRFNJX1BPUlRfQklUKENUUkxfUkVTRVRfRklGT1MpKTsKKworCURTSV9Q T1JUX1dSSVRFKENUUkwsCisJCSAgICAgICBEU0lfQ1RSTF9IU0RUX0VPVF9ESVNBQkxFIHwKKwkJ ICAgICAgIERTSV9DVFJMX1JYX0xQRFRfRU9UX0RJU0FCTEUpOworCisJLyogQ2xlYXIgYWxsIHN0 YXQgYml0cyBzbyB3ZSBzZWUgd2hhdCBoYXMgaGFwcGVuZWQgZHVyaW5nIGVuYWJsZS4gKi8KKwlE U0lfUE9SVF9XUklURShTVEFULCBEU0lfUE9SVF9SRUFEKFNUQVQpKTsKKworCS8qIFNldCBBRkUg Q1RSMDAvQ1RSMSB0byByZWxlYXNlIHBvd2VyZG93biBvZiBhbmFsb2cuICovCisJaWYgKGRzaS0+ cG9ydCA9PSAwKSB7CisJCXUzMiBhZmVjMCA9IChWQzRfU0VUX0ZJRUxEKDcsIERTSV9QSFlfQUZF QzBfUFRBVEFESikgfAorCQkJICAgICBWQzRfU0VUX0ZJRUxEKDcsIERTSV9QSFlfQUZFQzBfQ1RB VEFESikpOworCisJCWlmIChkc2ktPmxhbmVzIDwgMikKKwkJCWFmZWMwIHw9IERTSTBfUEhZX0FG RUMwX1BEX0RMQU5FMTsKKworCQlpZiAoIShkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RF X1ZJREVPKSkKKwkJCWFmZWMwIHw9IERTSTBfUEhZX0FGRUMwX1JFU0VUOworCisJCURTSV9QT1JU X1dSSVRFKFBIWV9BRkVDMCwgYWZlYzApOworCisJCURTSV9QT1JUX1dSSVRFKFBIWV9BRkVDMSwK KwkJCSAgICAgICBWQzRfU0VUX0ZJRUxEKDYsICBEU0kwX1BIWV9BRkVDMV9JRFJfRExBTkUxKSB8 CisJCQkgICAgICAgVkM0X1NFVF9GSUVMRCg2LCAgRFNJMF9QSFlfQUZFQzFfSURSX0RMQU5FMCkg fAorCQkJICAgICAgIFZDNF9TRVRfRklFTEQoNiwgIERTSTBfUEhZX0FGRUMxX0lEUl9DTEFORSkp OworCX0gZWxzZSB7CisJCXUzMiBhZmVjMCA9IChWQzRfU0VUX0ZJRUxEKDcsIERTSV9QSFlfQUZF QzBfUFRBVEFESikgfAorCQkJICAgICBWQzRfU0VUX0ZJRUxEKDcsIERTSV9QSFlfQUZFQzBfQ1RB VEFESikgfAorCQkJICAgICBWQzRfU0VUX0ZJRUxEKDYsIERTSTFfUEhZX0FGRUMwX0lEUl9DTEFO RSkgfAorCQkJICAgICBWQzRfU0VUX0ZJRUxEKDYsIERTSTFfUEhZX0FGRUMwX0lEUl9ETEFORTAp IHwKKwkJCSAgICAgVkM0X1NFVF9GSUVMRCg2LCBEU0kxX1BIWV9BRkVDMF9JRFJfRExBTkUxKSB8 CisJCQkgICAgIFZDNF9TRVRfRklFTEQoNiwgRFNJMV9QSFlfQUZFQzBfSURSX0RMQU5FMikgfAor CQkJICAgICBWQzRfU0VUX0ZJRUxEKDYsIERTSTFfUEhZX0FGRUMwX0lEUl9ETEFORTMpKTsKKwor CQlpZiAoZHNpLT5sYW5lcyA8IDQpCisJCQlhZmVjMCB8PSBEU0kxX1BIWV9BRkVDMF9QRF9ETEFO RTM7CisJCWlmIChkc2ktPmxhbmVzIDwgMykKKwkJCWFmZWMwIHw9IERTSTFfUEhZX0FGRUMwX1BE X0RMQU5FMjsKKwkJaWYgKGRzaS0+bGFuZXMgPCAyKQorCQkJYWZlYzAgfD0gRFNJMV9QSFlfQUZF QzBfUERfRExBTkUxOworCisJCWFmZWMwIHw9IERTSTFfUEhZX0FGRUMwX1JFU0VUOworCisJCURT SV9QT1JUX1dSSVRFKFBIWV9BRkVDMCwgYWZlYzApOworCisJCURTSV9QT1JUX1dSSVRFKFBIWV9B RkVDMSwgMCk7CisKKwkJLyogQUZFQyByZXNldCBob2xkIHRpbWUgKi8KKwkJbWRlbGF5KDEpOwor CX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmVzY2FwZV9jbG9jayk7CisJaWYg KHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byB0dXJuIG9uIERTSSBlc2NhcGUgY2xvY2s6 ICVkXG4iLCByZXQpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxl KGRzaS0+cGxsX3BoeV9jbG9jayk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0 byB0dXJuIG9uIERTSSBQTEw6ICVkXG4iLCByZXQpOworCQlyZXR1cm47CisJfQorCisJaHNfY2xv Y2sgPSBjbGtfZ2V0X3JhdGUoZHNpLT5wbGxfcGh5X2Nsb2NrKTsKKworCS8qIFllcywgd2Ugc2V0 IHRoZSBEU0kwUC9EU0kxUCBwaXhlbCBjbG9jayB0byB0aGUgYnl0ZSByYXRlLAorCSAqIG5vdCB0 aGUgcGl4ZWwgY2xvY2sgcmF0ZS4gIERTSXhQIHRha2UgZnJvbSB0aGUgQVBIWSdzIGJ5dGUsCisJ ICogRERSMiwgb3IgRERSNCBjbG9jayAod2UgdXNlIGJ5dGUpIGFuZCBmZWVkIGludG8gdGhlIFBW IGF0CisJICogdGhhdCByYXRlLiAgU2VwYXJhdGVseSwgYSB2YWx1ZSBkZXJpdmVkIGZyb20gUElY X0NMS19ESVYKKwkgKiBhbmQgSFNfQ0xLQyBpcyBmZWQgaW50byB0aGUgUFYgdG8gZGl2aWRlIGRv d24gdG8gdGhlIGFjdHVhbAorCSAqIHBpeGVsIGNsb2NrIGZvciBwdXNoaW5nIHBpeGVscyBpbnRv IERTSS4KKwkgKi8KKwlkc2lwX2Nsb2NrID0gcGh5X2Nsb2NrIC8gODsKKwlyZXQgPSBjbGtfc2V0 X3JhdGUoZHNpLT5waXhlbF9jbG9jaywgZHNpcF9jbG9jayk7CisJaWYgKHJldCkgeworCQlkZXZf ZXJyKGRldiwgIkZhaWxlZCB0byBzZXQgcGl4ZWwgY2xvY2sgdG8gJWxkSHo6ICVkXG4iLAorCQkJ ZHNpcF9jbG9jaywgcmV0KTsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5w aXhlbF9jbG9jayk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byB0dXJuIG9u IERTSSBwaXhlbCBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBIb3cg bWFueSBucyBvbmUgRFNJIHVuaXQgaW50ZXJ2YWwgaXMuICBOb3RlIHRoYXQgdGhlIGNsb2NrCisJ ICogaXMgRERSLCBzbyB0aGVyZSdzIGFuIGV4dHJhIGRpdmlkZSBieSAyLgorCSAqLworCXVpX25z ID0gRElWX1JPVU5EX1VQKDUwMDAwMDAwMCwgaHNfY2xvY2spOworCisJRFNJX1BPUlRfV1JJVEUo SFNfQ0xUMCwKKwkJICAgICAgIFZDNF9TRVRfRklFTEQoZHNpX2hzX3RpbWluZyh1aV9ucywgMjYy LCAwKSwKKwkJCQkgICAgIERTSV9IU19DTFQwX0NaRVJPKSB8CisJCSAgICAgICBWQzRfU0VUX0ZJ RUxEKGRzaV9oc190aW1pbmcodWlfbnMsIDAsIDgpLAorCQkJCSAgICAgRFNJX0hTX0NMVDBfQ1BS RSkgfAorCQkgICAgICAgVkM0X1NFVF9GSUVMRChkc2lfaHNfdGltaW5nKHVpX25zLCAzOCwgMCks CisJCQkJICAgICBEU0lfSFNfQ0xUMF9DUFJFUCkpOworCisJRFNJX1BPUlRfV1JJVEUoSFNfQ0xU MSwKKwkJICAgICAgIFZDNF9TRVRfRklFTEQoZHNpX2hzX3RpbWluZyh1aV9ucywgNjAsIDApLAor CQkJCSAgICAgRFNJX0hTX0NMVDFfQ1RSQUlMKSB8CisJCSAgICAgICBWQzRfU0VUX0ZJRUxEKGRz aV9oc190aW1pbmcodWlfbnMsIDYwLCA1MiksCisJCQkJICAgICBEU0lfSFNfQ0xUMV9DUE9TVCkp OworCisJRFNJX1BPUlRfV1JJVEUoSFNfQ0xUMiwKKwkJICAgICAgIFZDNF9TRVRfRklFTEQoZHNp X2hzX3RpbWluZyh1aV9ucywgMTAwMDAwMCwgMCksCisJCQkJICAgICBEU0lfSFNfQ0xUMl9XVVAp KTsKKworCURTSV9QT1JUX1dSSVRFKEhTX0RMVDMsCisJCSAgICAgICBWQzRfU0VUX0ZJRUxEKGRz aV9oc190aW1pbmcodWlfbnMsIDEwMCwgMCksCisJCQkJICAgICBEU0lfSFNfRExUM19FWElUKSB8 CisJCSAgICAgICBWQzRfU0VUX0ZJRUxEKGRzaV9oc190aW1pbmcodWlfbnMsIDEwNSwgNiksCisJ CQkJICAgICBEU0lfSFNfRExUM19aRVJPKSB8CisJCSAgICAgICBWQzRfU0VUX0ZJRUxEKGRzaV9o c190aW1pbmcodWlfbnMsIDQwLCA0KSwKKwkJCQkgICAgIERTSV9IU19ETFQzX1BSRSkpOworCisJ RFNJX1BPUlRfV1JJVEUoSFNfRExUNCwKKwkJICAgICAgIFZDNF9TRVRfRklFTEQoZHNpX2hzX3Rp bWluZyh1aV9ucywgbHB4ICogRVNDX1RJTUVfTlMsIDApLAorCQkJCSAgICAgRFNJX0hTX0RMVDRf TFBYKSB8CisJCSAgICAgICBWQzRfU0VUX0ZJRUxEKG1heChkc2lfaHNfdGltaW5nKHVpX25zLCAw LCA4KSwKKwkJCQkJIGRzaV9oc190aW1pbmcodWlfbnMsIDYwLCA0KSksCisJCQkJICAgICBEU0lf SFNfRExUNF9UUkFJTCkgfAorCQkgICAgICAgVkM0X1NFVF9GSUVMRCgwLCBEU0lfSFNfRExUNF9B TkxBVCkpOworCisJRFNJX1BPUlRfV1JJVEUoSFNfRExUNSwgVkM0X1NFVF9GSUVMRChkc2lfaHNf dGltaW5nKHVpX25zLCAxMDAwLCA1MDAwKSwKKwkJCQkJICAgICAgRFNJX0hTX0RMVDVfSU5JVCkp OworCisJRFNJX1BPUlRfV1JJVEUoSFNfRExUNiwKKwkJICAgICAgIFZDNF9TRVRfRklFTEQobHB4 ICogNSwgRFNJX0hTX0RMVDZfVEFfR0VUKSB8CisJCSAgICAgICBWQzRfU0VUX0ZJRUxEKGxweCwg RFNJX0hTX0RMVDZfVEFfU1VSRSkgfAorCQkgICAgICAgVkM0X1NFVF9GSUVMRChscHggKiA0LCBE U0lfSFNfRExUNl9UQV9HTykgfAorCQkgICAgICAgVkM0X1NFVF9GSUVMRChscHgsIERTSV9IU19E TFQ2X0xQX0xQWCkpOworCisJRFNJX1BPUlRfV1JJVEUoSFNfRExUNywKKwkJICAgICAgIFZDNF9T RVRfRklFTEQoZHNpX2VzY190aW1pbmcoMTAwMDAwMCksCisJCQkJICAgICBEU0lfSFNfRExUN19M UF9XVVApKTsKKworCURTSV9QT1JUX1dSSVRFKFBIWUMsCisJCSAgICAgICBEU0lfUEhZQ19ETEFO RTBfRU5BQkxFIHwKKwkJICAgICAgIChkc2ktPmxhbmVzID49IDIgPyBEU0lfUEhZQ19ETEFORTFf RU5BQkxFIDogMCkgfAorCQkgICAgICAgKGRzaS0+bGFuZXMgPj0gMyA/IERTSV9QSFlDX0RMQU5F Ml9FTkFCTEUgOiAwKSB8CisJCSAgICAgICAoZHNpLT5sYW5lcyA+PSA0ID8gRFNJX1BIWUNfRExB TkUzX0VOQUJMRSA6IDApIHwKKwkJICAgICAgIERTSV9QT1JUX0JJVChQSFlDX0NMQU5FX0VOQUJM RSkgfAorCQkgICAgICAgKChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9DTE9DS19OT05fQ09O VElOVU9VUykgPworCQkJMCA6IERTSV9QT1JUX0JJVChQSFlDX0hTX0NMS19DT05USU5VT1VTKSkg fAorCQkgICAgICAgKGRzaS0+cG9ydCA9PSAwID8KKwkJCVZDNF9TRVRfRklFTEQobHB4IC0gMSwg RFNJMF9QSFlDX0VTQ19DTEtfTFBEVCkgOgorCQkJVkM0X1NFVF9GSUVMRChscHggLSAxLCBEU0kx X1BIWUNfRVNDX0NMS19MUERUKSkpOworCisJRFNJX1BPUlRfV1JJVEUoQ1RSTCwKKwkJICAgICAg IERTSV9QT1JUX1JFQUQoQ1RSTCkgfAorCQkgICAgICAgRFNJX0NUUkxfQ0FMX0JZVEUpOworCisJ LyogSFMgdGltZW91dCBpbiBIUyBjbG9jayBjeWNsZXM6IGRpc2FibGVkLiAqLworCURTSV9QT1JU X1dSSVRFKEhTVFhfVE9fQ05ULCAwKTsKKwkvKiBMUCByZWNlaXZlIHRpbWVvdXQgaW4gSFMgY2xv Y2tzLiAqLworCURTSV9QT1JUX1dSSVRFKExQUlhfVE9fQ05ULCAweGZmZmZmZik7CisJLyogQnVz IHR1cm5hcm91bmQgdGltZW91dCAqLworCURTSV9QT1JUX1dSSVRFKFRBX1RPX0NOVCwgMTAwMDAw KTsKKwkvKiBEaXNwbGF5IHJlc2V0IHNlcXVlbmNlIHRpbWVvdXQgKi8KKwlEU0lfUE9SVF9XUklU RShQUl9UT19DTlQsIDEwMDAwMCk7CisKKwlpZiAoZHNpLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lf TU9ERV9WSURFTykgeworCQlEU0lfUE9SVF9XUklURShESVNQMF9DVFJMLAorCQkJICAgICAgIFZD NF9TRVRfRklFTEQoZGl2aWRlciwgRFNJX0RJU1AwX1BJWF9DTEtfRElWKSB8CisJCQkgICAgICAg VkM0X1NFVF9GSUVMRChmb3JtYXQsIERTSV9ESVNQMF9QRk9STUFUKSB8CisJCQkgICAgICAgVkM0 X1NFVF9GSUVMRChEU0lfRElTUDBfTFBfU1RPUF9QRVJGUkFNRSwKKwkJCQkJICAgICBEU0lfRElT UDBfTFBfU1RPUF9DVFJMKSB8CisJCQkgICAgICAgRFNJX0RJU1AwX1NUX0VORCB8CisJCQkgICAg ICAgRFNJX0RJU1AwX0VOQUJMRSk7CisJfSBlbHNlIHsKKwkJRFNJX1BPUlRfV1JJVEUoRElTUDBf Q1RSTCwKKwkJCSAgICAgICBEU0lfRElTUDBfQ09NTUFORF9NT0RFIHwKKwkJCSAgICAgICBEU0lf RElTUDBfRU5BQkxFKTsKKwl9CisKKwkvKiBTZXQgdXAgRElTUDEgZm9yIHRyYW5zZmVycmluZyBs b25nIGNvbW1hbmQgcGF5bG9hZHMgdGhyb3VnaAorCSAqIHRoZSBwaXhmaWZvLgorCSAqLworCURT SV9QT1JUX1dSSVRFKERJU1AxX0NUUkwsCisJCSAgICAgICBWQzRfU0VUX0ZJRUxEKERTSV9ESVNQ MV9QRk9STUFUXzMyQklUX0xFLAorCQkJCSAgICAgRFNJX0RJU1AxX1BGT1JNQVQpIHwKKwkJICAg ICAgIERTSV9ESVNQMV9FTkFCTEUpOworCisJLyogVW5nYXRlIHRoZSBibG9jay4gKi8KKwlpZiAo ZHNpLT5wb3J0ID09IDApCisJCURTSV9QT1JUX1dSSVRFKENUUkwsIERTSV9QT1JUX1JFQUQoQ1RS TCkgfCBEU0kwX0NUUkxfQ1RSTDApOworCWVsc2UKKwkJRFNJX1BPUlRfV1JJVEUoQ1RSTCwgRFNJ X1BPUlRfUkVBRChDVFJMKSB8IERTSTFfQ1RSTF9FTik7CisKKwkvKiBCcmluZyBBRkUgb3V0IG9m IHJlc2V0LiAqLworCWlmIChkc2ktPnBvcnQgPT0gMCkgeworCX0gZWxzZSB7CisJCURTSV9QT1JU X1dSSVRFKFBIWV9BRkVDMCwKKwkJCSAgICAgICBEU0lfUE9SVF9SRUFEKFBIWV9BRkVDMCkgJgor CQkJICAgICAgIH5EU0kxX1BIWV9BRkVDMF9SRVNFVCk7CisJfQorCisJdmM0X2RzaV91bHBzKGRz aSwgZmFsc2UpOworCisJaWYgKGRlYnVnX2R1bXBfcmVncykgeworCQlEUk1fSU5GTygiRFNJIHJl Z3MgYWZ0ZXI6XG4iKTsKKwkJdmM0X2RzaV9kdW1wX3JlZ3MoZHNpKTsKKwl9CisKKwlyZXQgPSBk cm1fcGFuZWxfZW5hYmxlKGRzaS0+cGFuZWwpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJQ YW5lbCBmYWlsZWQgdG8gZW5hYmxlXG4iKTsKKwkJZHJtX3BhbmVsX3VucHJlcGFyZShkc2ktPnBh bmVsKTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHNzaXplX3QgdmM0X2RzaV9ob3N0X3Ry YW5zZmVyKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJCSAgICAgY29uc3Qgc3RydWN0 IG1pcGlfZHNpX21zZyAqbXNnKQoreworCXN0cnVjdCB2YzRfZHNpICpkc2kgPSBob3N0X3RvX2Rz aShob3N0KTsKKwlzdHJ1Y3QgbWlwaV9kc2lfcGFja2V0IHBhY2tldDsKKwl1MzIgcGt0aCA9IDAs IHBrdGMgPSAwOworCWludCBpLCByZXQ7CisJYm9vbCBpc19sb25nID0gbWlwaV9kc2lfcGFja2V0 X2Zvcm1hdF9pc19sb25nKG1zZy0+dHlwZSk7CisJdTMyIGNtZF9maWZvX2xlbiA9IDAsIHBpeF9m aWZvX2xlbiA9IDA7CisKKwltaXBpX2RzaV9jcmVhdGVfcGFja2V0KCZwYWNrZXQsIG1zZyk7CisK Kwlwa3RoIHw9IFZDNF9TRVRfRklFTEQocGFja2V0LmhlYWRlclswXSwgRFNJX1RYUEtUMUhfQkNf RFQpOworCXBrdGggfD0gVkM0X1NFVF9GSUVMRChwYWNrZXQuaGVhZGVyWzFdIHwKKwkJCSAgICAg IChwYWNrZXQuaGVhZGVyWzJdIDw8IDgpLAorCQkJICAgICAgRFNJX1RYUEtUMUhfQkNfUEFSQU0p OworCWlmIChpc19sb25nKSB7CisJCS8qIERpdmlkZSBkYXRhIGFjcm9zcyB0aGUgdmFyaW91cyBG SUZPcyB3ZSBoYXZlIGF2YWlsYWJsZS4KKwkJICogVGhlIGNvbW1hbmQgRklGTyB0YWtlcyBieXRl LW9yaWVudGVkIGRhdGEsIGJ1dCBpcyBvZgorCQkgKiBsaW1pdGVkIHNpemUuIFRoZSBwaXhlbCBG SUZPIChuZXZlciBhY3R1YWxseSB1c2VkIGZvcgorCQkgKiBwaXhlbCBkYXRhIGluIHJlYWxpdHkp IGlzIHdvcmQgb3JpZW50ZWQsIGFuZCBzdWJzdGFudGlhbGx5CisJCSAqIGxhcmdlci4gU28sIHdl IHVzZSB0aGUgcGl4ZWwgRklGTyBmb3IgbW9zdCBvZiB0aGUgZGF0YSwKKwkJICogc2VuZGluZyB0 aGUgcmVzaWR1YWwgYnl0ZXMgaW4gdGhlIGNvbW1hbmQgRklGTyBhdCB0aGUgc3RhcnQuCisJCSAq CisJCSAqIFdpdGggdGhpcyBhcnJhbmdlbWVudCwgdGhlIGNvbW1hbmQgRklGTyB3aWxsIG5ldmVy IGdldCBmdWxsLgorCQkgKi8KKwkJaWYgKHBhY2tldC5wYXlsb2FkX2xlbmd0aCA8PSAxNikgewor CQkJY21kX2ZpZm9fbGVuID0gcGFja2V0LnBheWxvYWRfbGVuZ3RoOworCQkJcGl4X2ZpZm9fbGVu ID0gMDsKKwkJfSBlbHNlIHsKKwkJCWNtZF9maWZvX2xlbiA9IChwYWNrZXQucGF5bG9hZF9sZW5n dGggJQorCQkJCQlEU0lfUElYX0ZJRk9fV0lEVEgpOworCQkJcGl4X2ZpZm9fbGVuID0gKChwYWNr ZXQucGF5bG9hZF9sZW5ndGggLSBjbWRfZmlmb19sZW4pIC8KKwkJCQkJRFNJX1BJWF9GSUZPX1dJ RFRIKTsKKwkJfQorCisJCVdBUk5fT05fT05DRShwaXhfZmlmb19sZW4gPj0gRFNJX1BJWF9GSUZP X0RFUFRIKTsKKworCQlwa3RoIHw9IFZDNF9TRVRfRklFTEQoY21kX2ZpZm9fbGVuLCBEU0lfVFhQ S1QxSF9CQ19DTURGSUZPKTsKKwl9CisKKwlpZiAobXNnLT5yeF9sZW4pIHsKKwkJcGt0YyB8PSBW QzRfU0VUX0ZJRUxEKERTSV9UWFBLVDFDX0NNRF9DVFJMX1JYLAorCQkJCSAgICAgIERTSV9UWFBL VDFDX0NNRF9DVFJMKTsKKwl9IGVsc2UgeworCQlwa3RjIHw9IFZDNF9TRVRfRklFTEQoRFNJX1RY UEtUMUNfQ01EX0NUUkxfVFgsCisJCQkJICAgICAgRFNJX1RYUEtUMUNfQ01EX0NUUkwpOworCX0K KworCWZvciAoaSA9IDA7IGkgPCBjbWRfZmlmb19sZW47IGkrKykKKwkJRFNJX1BPUlRfV1JJVEUo VFhQS1RfQ01EX0ZJRk8sIHBhY2tldC5wYXlsb2FkW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgcGl4 X2ZpZm9fbGVuOyBpKyspIHsKKwkJY29uc3QgdTggKnBpeCA9IHBhY2tldC5wYXlsb2FkICsgY21k X2ZpZm9fbGVuICsgaSAqIDQ7CisKKwkJRFNJX1BPUlRfV1JJVEUoVFhQS1RfUElYX0ZJRk8sCisJ CQkgICAgICAgcGl4WzBdIHwKKwkJCSAgICAgICBwaXhbMV0gPDwgOCB8CisJCQkgICAgICAgcGl4 WzJdIDw8IDE2IHwKKwkJCSAgICAgICBwaXhbM10gPDwgMjQpOworCX0KKworCWlmIChtc2ctPmZs YWdzICYgTUlQSV9EU0lfTVNHX1VTRV9MUE0pCisJCXBrdGMgfD0gRFNJX1RYUEtUMUNfQ01EX01P REVfTFA7CisJaWYgKGlzX2xvbmcpCisJCXBrdGMgfD0gRFNJX1RYUEtUMUNfQ01EX1RZUEVfTE9O RzsKKworCS8qIFNlbmQgb25lIGNvcHkgb2YgdGhlIHBhY2tldC4gIExhcmdlciByZXBlYXRzIGFy ZSB1c2VkIGZvciBwaXhlbAorCSAqIGRhdGEgaW4gY29tbWFuZCBtb2RlLgorCSAqLworCXBrdGMg fD0gVkM0X1NFVF9GSUVMRCgxLCBEU0lfVFhQS1QxQ19DTURfUkVQRUFUKTsKKworCXBrdGMgfD0g RFNJX1RYUEtUMUNfQ01EX0VOOworCWlmIChwaXhfZmlmb19sZW4pIHsKKwkJcGt0YyB8PSBWQzRf U0VUX0ZJRUxEKERTSV9UWFBLVDFDX0RJU1BMQVlfTk9fU0VDT05EQVJZLAorCQkJCSAgICAgIERT SV9UWFBLVDFDX0RJU1BMQVlfTk8pOworCX0gZWxzZSB7CisJCXBrdGMgfD0gVkM0X1NFVF9GSUVM RChEU0lfVFhQS1QxQ19ESVNQTEFZX05PX1NIT1JULAorCQkJCSAgICAgIERTSV9UWFBLVDFDX0RJ U1BMQVlfTk8pOworCX0KKworCS8qIEVuYWJsZSB0aGUgYXBwcm9wcmlhdGUgaW50ZXJydXB0IGZv ciB0aGUgdHJhbnNmZXIgY29tcGxldGlvbi4gKi8KKwlkc2ktPnhmZXJfcmVzdWx0ID0gMDsKKwly ZWluaXRfY29tcGxldGlvbigmZHNpLT54ZmVyX2NvbXBsZXRpb24pOworCURTSV9QT1JUX1dSSVRF KElOVF9TVEFULCBEU0kxX0lOVF9UWFBLVDFfRE9ORSB8IERTSTFfSU5UX1BIWV9ESVJfUlRGKTsK KwlpZiAobXNnLT5yeF9sZW4pIHsKKwkJRFNJX1BPUlRfV1JJVEUoSU5UX0VOLCAoRFNJMV9JTlRF UlJVUFRTX0FMV0FZU19FTkFCTEVEIHwKKwkJCQkJRFNJMV9JTlRfUEhZX0RJUl9SVEYpKTsKKwl9 IGVsc2UgeworCQlEU0lfUE9SVF9XUklURShJTlRfRU4sIChEU0kxX0lOVEVSUlVQVFNfQUxXQVlT X0VOQUJMRUQgfAorCQkJCQlEU0kxX0lOVF9UWFBLVDFfRE9ORSkpOworCX0KKworCS8qIFNlbmQg dGhlIHBhY2tldC4gKi8KKwlEU0lfUE9SVF9XUklURShUWFBLVDFILCBwa3RoKTsKKwlEU0lfUE9S VF9XUklURShUWFBLVDFDLCBwa3RjKTsKKworCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1l b3V0KCZkc2ktPnhmZXJfY29tcGxldGlvbiwKKwkJCQkJIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkp KSB7CisJCWRldl9lcnIoJmRzaS0+cGRldi0+ZGV2LCAidHJhbnNmZXIgaW50ZXJydXB0IHdhaXQg dGltZW91dCIpOworCQlkZXZfZXJyKCZkc2ktPnBkZXYtPmRldiwgImluc3RhdDogMHglMDh4XG4i LAorCQkJRFNJX1BPUlRfUkVBRChJTlRfU1RBVCkpOworCQlyZXQgPSAtRVRJTUVET1VUOworCX0g ZWxzZSB7CisJCXJldCA9IGRzaS0+eGZlcl9yZXN1bHQ7CisJfQorCisJRFNJX1BPUlRfV1JJVEUo SU5UX0VOLCBEU0kxX0lOVEVSUlVQVFNfQUxXQVlTX0VOQUJMRUQpOworCisJaWYgKHJldCkKKwkJ Z290byByZXNldF9maWZvX2FuZF9yZXR1cm47CisKKwlpZiAocmV0ID09IDAgJiYgbXNnLT5yeF9s ZW4pIHsKKwkJdTMyIHJ4cGt0MWggPSBEU0lfUE9SVF9SRUFEKFJYUEtUMUgpOworCQl1OCAqbXNn X3J4ID0gbXNnLT5yeF9idWY7CisKKwkJaWYgKHJ4cGt0MWggJiBEU0lfUlhQS1QxSF9QS1RfVFlQ RV9MT05HKSB7CisJCQl1MzIgcnhsZW4gPSBWQzRfR0VUX0ZJRUxEKHJ4cGt0MWgsCisJCQkJCQkg IERTSV9SWFBLVDFIX0JDX1BBUkFNKTsKKworCQkJaWYgKHJ4bGVuICE9IG1zZy0+cnhfbGVuKSB7 CisJCQkJRFJNX0VSUk9SKCJEU0kgcmV0dXJuZWQgJWRiLCBleHBlY3RpbmcgJWRiXG4iLAorCQkJ CQkgIHJ4bGVuLCAoaW50KW1zZy0+cnhfbGVuKTsKKwkJCQlyZXQgPSAtRU5YSU87CisJCQkJZ290 byByZXNldF9maWZvX2FuZF9yZXR1cm47CisJCQl9CisKKwkJCWZvciAoaSA9IDA7IGkgPCBtc2ct PnJ4X2xlbjsgaSsrKQorCQkJCW1zZ19yeFtpXSA9IERTSV9SRUFEKERTSTFfUlhQS1RfRklGTyk7 CisJCX0gZWxzZSB7CisJCQkvKiBGSU5JU0hNRTogSGFuZGxlIEFXRVIgKi8KKworCQkJbXNnX3J4 WzBdID0gVkM0X0dFVF9GSUVMRChyeHBrdDFoLAorCQkJCQkJICBEU0lfUlhQS1QxSF9TSE9SVF8w KTsKKwkJCWlmIChtc2ctPnJ4X2xlbiA+IDEpIHsKKwkJCQltc2dfcnhbMV0gPSBWQzRfR0VUX0ZJ RUxEKHJ4cGt0MWgsCisJCQkJCQkJICBEU0lfUlhQS1QxSF9TSE9SVF8xKTsKKwkJCX0KKwkJfQor CX0KKworCXJldHVybiByZXQ7CisKK3Jlc2V0X2ZpZm9fYW5kX3JldHVybjoKKwlEUk1fRVJST1Io IkRTSSB0cmFuc2ZlciBmYWlsZWQsIHJlc2V0dGluZzogJWRcbiIsIHJldCk7CisKKwlEU0lfUE9S VF9XUklURShUWFBLVDFDLCBEU0lfUE9SVF9SRUFEKFRYUEtUMUMpICYgfkRTSV9UWFBLVDFDX0NN RF9FTik7CisJdWRlbGF5KDEpOworCURTSV9QT1JUX1dSSVRFKENUUkwsCisJCSAgICAgICBEU0lf UE9SVF9SRUFEKENUUkwpIHwKKwkJICAgICAgIERTSV9QT1JUX0JJVChDVFJMX1JFU0VUX0ZJRk9T KSk7CisKKwlEU0lfUE9SVF9XUklURShUWFBLVDFDLCAwKTsKKwlEU0lfUE9SVF9XUklURShJTlRf RU4sIERTSTFfSU5URVJSVVBUU19BTFdBWVNfRU5BQkxFRCk7CisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludCB2YzRfZHNpX2hvc3RfYXR0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0 LAorCQkJICAgICAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3Qg dmM0X2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9zdCk7CisJaW50IHJldCA9IDA7CisKKwlkc2kt PmxhbmVzID0gZGV2aWNlLT5sYW5lczsKKwlkc2ktPmNoYW5uZWwgPSBkZXZpY2UtPmNoYW5uZWw7 CisJZHNpLT5mb3JtYXQgPSBkZXZpY2UtPmZvcm1hdDsKKwlkc2ktPm1vZGVfZmxhZ3MgPSBkZXZp Y2UtPm1vZGVfZmxhZ3M7CisKKwlpZiAoIShkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RF X1ZJREVPKSkgeworCQlkZXZfZXJyKCZkc2ktPnBkZXYtPmRldiwKKwkJCSJPbmx5IFZJREVPIG1v ZGUgcGFuZWxzIHN1cHBvcnRlZCBjdXJyZW50bHkuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJ ZHNpLT5wYW5lbCA9IG9mX2RybV9maW5kX3BhbmVsKGRldmljZS0+ZGV2Lm9mX25vZGUpOworCWlm ICghZHNpLT5wYW5lbCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBkcm1fcGFuZWxfYXR0YWNoKGRz aS0+cGFuZWwsIGRzaS0+Y29ubmVjdG9yKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7 CisKKwlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoZHNpLT5jb25uZWN0b3ItPmRldik7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2YzRfZHNpX2hvc3RfZGV0YWNoKHN0cnVjdCBtaXBp X2RzaV9ob3N0ICpob3N0LAorCQkJICAgICAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmlj ZSkKK3sKKwlzdHJ1Y3QgdmM0X2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9zdCk7CisKKwlpZiAo ZHNpLT5wYW5lbCkgeworCQlpbnQgcmV0ID0gZHJtX3BhbmVsX2RldGFjaChkc2ktPnBhbmVsKTsK KworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlkc2ktPnBhbmVsID0gTlVMTDsKKwor CQlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoZHNpLT5jb25uZWN0b3ItPmRldik7CisJfQorCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfaG9zdF9vcHMgdmM0 X2RzaV9ob3N0X29wcyA9IHsKKwkuYXR0YWNoID0gdmM0X2RzaV9ob3N0X2F0dGFjaCwKKwkuZGV0 YWNoID0gdmM0X2RzaV9ob3N0X2RldGFjaCwKKwkudHJhbnNmZXIgPSB2YzRfZHNpX2hvc3RfdHJh bnNmZXIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5j cyB2YzRfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5kaXNhYmxlID0gdmM0X2RzaV9l bmNvZGVyX2Rpc2FibGUsCisJLmVuYWJsZSA9IHZjNF9kc2lfZW5jb2Rlcl9lbmFibGUsCit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB2YzRfZHNpX2R0X21hdGNoW10gPSB7 CisJeyAuY29tcGF0aWJsZSA9ICJicmNtLGJjbTI4MzUtZHNpMSIsICh2b2lkICopKHVpbnRwdHJf dCkxIH0sCisJe30KK307CisKK3N0YXRpYyB2b2lkIGRzaV9oYW5kbGVfZXJyb3Ioc3RydWN0IHZj NF9kc2kgKmRzaSwKKwkJCSAgICAgaXJxcmV0dXJuX3QgKnJldCwgdTMyIHN0YXQsIHUzMiBiaXQs CisJCQkgICAgIGNvbnN0IGNoYXIgKnR5cGUpCit7CisJaWYgKCEoc3RhdCAmIGJpdCkpCisJCXJl dHVybjsKKworCURSTV9FUlJPUigiRFNJJWQ6ICVzIGVycm9yXG4iLCBkc2ktPnBvcnQsIHR5cGUp OworCSpyZXQgPSBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IHZjNF9kc2lf aXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdmM0X2RzaSAqZHNp ID0gZGF0YTsKKwl1MzIgc3RhdCA9IERTSV9QT1JUX1JFQUQoSU5UX1NUQVQpOworCWlycXJldHVy bl90IHJldCA9IElSUV9OT05FOworCisJRFNJX1BPUlRfV1JJVEUoSU5UX1NUQVQsIHN0YXQpOwor CisJZHNpX2hhbmRsZV9lcnJvcihkc2ksICZyZXQsIHN0YXQsCisJCQkgRFNJMV9JTlRfRVJSX1NZ TkNfRVNDLCAiTFBEVCBzeW5jIik7CisJZHNpX2hhbmRsZV9lcnJvcihkc2ksICZyZXQsIHN0YXQs CisJCQkgRFNJMV9JTlRfRVJSX0NPTlRST0wsICJkYXRhIGxhbmUgMCBzZXF1ZW5jZSIpOworCWRz aV9oYW5kbGVfZXJyb3IoZHNpLCAmcmV0LCBzdGF0LAorCQkJIERTSTFfSU5UX0VSUl9DT05UX0xQ MCwgIkxQMCBjb250ZW50aW9uIik7CisJZHNpX2hhbmRsZV9lcnJvcihkc2ksICZyZXQsIHN0YXQs CisJCQkgRFNJMV9JTlRfRVJSX0NPTlRfTFAxLCAiTFAxIGNvbnRlbnRpb24iKTsKKwlkc2lfaGFu ZGxlX2Vycm9yKGRzaSwgJnJldCwgc3RhdCwKKwkJCSBEU0kxX0lOVF9IU1RYX1RPLCAiSFNUWCB0 aW1lb3V0Iik7CisJZHNpX2hhbmRsZV9lcnJvcihkc2ksICZyZXQsIHN0YXQsCisJCQkgRFNJMV9J TlRfTFBSWF9UTywgIkxQUlggdGltZW91dCIpOworCWRzaV9oYW5kbGVfZXJyb3IoZHNpLCAmcmV0 LCBzdGF0LAorCQkJIERTSTFfSU5UX1RBX1RPLCAidHVybmFyb3VuZCB0aW1lb3V0Iik7CisJZHNp X2hhbmRsZV9lcnJvcihkc2ksICZyZXQsIHN0YXQsCisJCQkgRFNJMV9JTlRfUFJfVE8sICJwZXJp cGhlcmFsIHJlc2V0IHRpbWVvdXQiKTsKKworCWlmIChzdGF0ICYgKERTSTFfSU5UX1RYUEtUMV9E T05FIHwgRFNJMV9JTlRfUEhZX0RJUl9SVEYpKSB7CisJCWNvbXBsZXRlKCZkc2ktPnhmZXJfY29t cGxldGlvbik7CisJCXJldCA9IElSUV9IQU5ETEVEOworCX0gZWxzZSBpZiAoc3RhdCAmIERTSTFf SU5UX0hTVFhfVE8pIHsKKwkJY29tcGxldGUoJmRzaS0+eGZlcl9jb21wbGV0aW9uKTsKKwkJZHNp LT54ZmVyX3Jlc3VsdCA9IC1FVElNRURPVVQ7CisJCXJldCA9IElSUV9IQU5ETEVEOworCX0KKwor CXJldHVybiByZXQ7Cit9CisKKy8qKgorICogRXhwb3NlcyBjbG9ja3MgZ2VuZXJhdGVkIGJ5IHRo ZSBhbmFsb2cgUEhZIHRoYXQgYXJlIGNvbnN1bWVkIGJ5CisgKiBDUFJNQU4gKGNsay1iY20yODM1 LmMpLgorICovCitzdGF0aWMgaW50Cit2YzRfZHNpX2luaXRfcGh5X2Nsb2NrcyhzdHJ1Y3QgdmM0 X2RzaSAqZHNpKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkc2ktPnBkZXYtPmRldjsKKwlj b25zdCBjaGFyICpwYXJlbnRfbmFtZSA9IF9fY2xrX2dldF9uYW1lKGRzaS0+cGxsX3BoeV9jbG9j ayk7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJCWNvbnN0IGNoYXIgKmRzaTBfbmFtZSwgKmRz aTFfbmFtZTsKKwkJaW50IGRpdjsKKwl9IHBoeV9jbG9ja3NbXSA9IHsKKwkJeyAiZHNpMF9ieXRl IiwgImRzaTFfYnl0ZSIsIDggfSwKKwkJeyAiZHNpMF9kZHIyIiwgImRzaTFfZGRyMiIsIDQgfSwK KwkJeyAiZHNpMF9kZHIiLCAiZHNpMV9kZHIiLCAyIH0sCisJfTsKKwlpbnQgaTsKKworCWRzaS0+ Y2xrX29uZWNlbGwuY2xrX251bSA9IEFSUkFZX1NJWkUocGh5X2Nsb2Nrcyk7CisJZHNpLT5jbGtf b25lY2VsbC5jbGtzID0gZGV2bV9rY2FsbG9jKGRldiwKKwkJCQkJICAgICBkc2ktPmNsa19vbmVj ZWxsLmNsa19udW0sCisJCQkJCSAgICAgc2l6ZW9mKCpkc2ktPmNsa19vbmVjZWxsLmNsa3MpLAor CQkJCQkgICAgIEdGUF9LRVJORUwpOworCWlmICghZHNpLT5jbGtfb25lY2VsbC5jbGtzKQorCQly ZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBoeV9jbG9ja3Mp OyBpKyspIHsKKwkJc3RydWN0IGNsa19maXhlZF9mYWN0b3IgKmZpeCA9ICZkc2ktPnBoeV9jbG9j a3NbaV07CisJCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CisJCXN0cnVjdCBjbGsgKmNsazsK KworCQkvKiBXZSBqdXN0IHVzZSBjb3JlIGZpeGVkIGZhY3RvciBjbG9jayBvcHMgZm9yIHRoZSBQ SFkKKwkJICogY2xvY2tzLiAgVGhlIGNsb2NrcyBhcmUgYWN0dWFsbHkgZ2F0ZWQgYnkgdGhlCisJ CSAqIFBIWV9BRkVDMF9ERFJDTEtfRU4gYml0cywgd2hpY2ggd2Ugc2hvdWxkIGJlCisJCSAqIHNl dHRpbmcgaWYgd2UgdXNlIHRoZSBERFIvRERSMiBjbG9ja3MuICBIb3dldmVyLAorCQkgKiB2YzRf ZHNpX2VuY29kZXJfZW5hYmxlKCkgaXMgc2V0dGluZyB1cCBib3RoIEFGRUMwLAorCQkgKiBzZXR0 aW5nIGJvdGggb3VyIHBhcmVudCBEU0kgUExMJ3MgcmF0ZSBhbmQgdGhpcworCQkgKiBjbG9jaydz IHJhdGUsIHNvIGl0IGtub3dzIGlmIEREUi9ERFIyIGFyZSBnb2luZyB0bworCQkgKiBiZSB1c2Vk IGFuZCBjb3VsZCBlbmFibGUgdGhlIGdhdGVzIGl0c2VsZi4KKwkJICovCisJCWZpeC0+bXVsdCA9 IDE7CisJCWZpeC0+ZGl2ID0gcGh5X2Nsb2Nrc1tpXS5kaXY7CisJCWZpeC0+aHcuaW5pdCA9ICZp bml0OworCisJCW1lbXNldCgmaW5pdCwgMCwgc2l6ZW9mKGluaXQpKTsKKwkJaW5pdC5wYXJlbnRf bmFtZXMgPSAmcGFyZW50X25hbWU7CisJCWluaXQubnVtX3BhcmVudHMgPSAxOworCQlpZiAoZHNp LT5wb3J0ID09IDEpCisJCQlpbml0Lm5hbWUgPSBwaHlfY2xvY2tzW2ldLmRzaTFfbmFtZTsKKwkJ ZWxzZQorCQkJaW5pdC5uYW1lID0gcGh5X2Nsb2Nrc1tpXS5kc2kwX25hbWU7CisJCWluaXQub3Bz ID0gJmNsa19maXhlZF9mYWN0b3Jfb3BzOworCQlpbml0LmZsYWdzID0gQ0xLX0lTX0JBU0lDOwor CisJCWNsayA9IGRldm1fY2xrX3JlZ2lzdGVyKGRldiwgJmZpeC0+aHcpOworCQlpZiAoSVNfRVJS KGNsaykpCisJCQlyZXR1cm4gUFRSX0VSUihjbGspOworCisJCWRzaS0+Y2xrX29uZWNlbGwuY2xr c1tpXSA9IGNsazsKKwl9CisKKwlyZXR1cm4gb2ZfY2xrX2FkZF9wcm92aWRlcihkZXYtPm9mX25v ZGUsCisJCQkJICAgb2ZfY2xrX3NyY19vbmVjZWxsX2dldCwKKwkJCQkgICAmZHNpLT5jbGtfb25l Y2VsbCk7Cit9CisKK3N0YXRpYyBpbnQgdmM0X2RzaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwg c3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtID0gZGV2X2dldF9kcnZkYXRhKG1hc3Rlcik7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9 IHRvX3ZjNF9kZXYoZHJtKTsKKwlzdHJ1Y3QgdmM0X2RzaSAqZHNpOworCXN0cnVjdCB2YzRfZHNp X2VuY29kZXIgKnZjNF9kc2lfZW5jb2RlcjsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpt YXRjaDsKKwlkbWFfY2FwX21hc2tfdCBkbWFfbWFzazsKKwlpbnQgcmV0OworCisJZHNpID0gZGV2 bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkc2kpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRzaSkKKwkJ cmV0dXJuIC1FTk9NRU07CisKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZSh2YzRfZHNpX2R0X21h dGNoLCBkZXYpOworCWlmICghbWF0Y2gpCisJCXJldHVybiAtRU5PREVWOworCisJZHNpLT5wb3J0 ID0gKHVpbnRwdHJfdCltYXRjaC0+ZGF0YTsKKworCXZjNF9kc2lfZW5jb2RlciA9IGRldm1fa3ph bGxvYyhkZXYsIHNpemVvZigqdmM0X2RzaV9lbmNvZGVyKSwKKwkJCQkgICAgICAgR0ZQX0tFUk5F TCk7CisJaWYgKCF2YzRfZHNpX2VuY29kZXIpCisJCXJldHVybiAtRU5PTUVNOworCXZjNF9kc2lf ZW5jb2Rlci0+YmFzZS50eXBlID0gVkM0X0VOQ09ERVJfVFlQRV9EU0kxOworCXZjNF9kc2lfZW5j b2Rlci0+ZHNpID0gZHNpOworCWRzaS0+ZW5jb2RlciA9ICZ2YzRfZHNpX2VuY29kZXItPmJhc2Uu YmFzZTsKKworCWRzaS0+cGRldiA9IHBkZXY7CisJZHNpLT5yZWdzID0gdmM0X2lvcmVtYXBfcmVn cyhwZGV2LCAwKTsKKwlpZiAoSVNfRVJSKGRzaS0+cmVncykpCisJCXJldHVybiBQVFJfRVJSKGRz aS0+cmVncyk7CisKKwlpZiAoRFNJX1BPUlRfUkVBRChJRCkgIT0gRFNJX0lEX1ZBTFVFKSB7CisJ CWRldl9lcnIoZGV2LCAiUG9ydCByZXR1cm5lZCAweCUwOHggZm9yIElEIGluc3RlYWQgb2YgMHgl MDh4XG4iLAorCQkJRFNJX1BPUlRfUkVBRChJRCksIERTSV9JRF9WQUxVRSk7CisJCXJldHVybiAt RU5PREVWOworCX0KKworCS8qIERTSTEgaGFzIGEgYnJva2VuIEFYSSBzbGF2ZSB0aGF0IGRvZXNu J3QgcmVzcG9uZCB0byB3cml0ZXMKKwkgKiBmcm9tIHRoZSBBUk0uICBJdCBkb2VzIGhhbmRsZSB3 cml0ZXMgZnJvbSB0aGUgRE1BIGVuZ2luZSwKKwkgKiBzbyBzZXQgdXAgYSBjaGFubmVsIGZvciB0 YWxraW5nIHRvIGl0LgorCSAqLworCWlmIChkc2ktPnBvcnQgPT0gMSkgeworCQlkc2ktPnJlZ19k bWFfbWVtID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgNCwKKwkJCQkJCSAgICAgICZkc2ktPnJl Z19kbWFfcGFkZHIsCisJCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkc2ktPnJlZ19k bWFfbWVtKSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBnZXQgRE1BIG1lbW9yeVxuIik7CisJ CQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCWRtYV9jYXBfemVybyhkbWFfbWFzayk7CisJCWRt YV9jYXBfc2V0KERNQV9NRU1DUFksIGRtYV9tYXNrKTsKKwkJZHNpLT5yZWdfZG1hX2NoYW4gPSBk bWFfcmVxdWVzdF9jaGFuX2J5X21hc2soJmRtYV9tYXNrKTsKKwkJaWYgKElTX0VSUihkc2ktPnJl Z19kbWFfY2hhbikpIHsKKwkJCXJldCA9IFBUUl9FUlIoZHNpLT5yZWdfZG1hX2NoYW4pOworCQkJ aWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQorCQkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBE TUEgY2hhbm5lbDogJWRcbiIsCisJCQkJCSAgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwor CQkvKiBHZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGRldmljZSdzIHJlZ2lzdGVycy4g IFRoZQorCQkgKiBzdHJ1Y3QgcmVzb3VyY2UgZm9yIHRoZSByZWdzIGdpdmVzIHVzIHRoZSBidXMg YWRkcmVzcworCQkgKiBpbnN0ZWFkLgorCQkgKi8KKwkJZHNpLT5yZWdfcGFkZHIgPSBiZTMyX3Rv X2NwdXAob2ZfZ2V0X2FkZHJlc3MoZGV2LT5vZl9ub2RlLAorCQkJCQkJCSAgICAgMCwgTlVMTCwg TlVMTCkpOworCX0KKworCWluaXRfY29tcGxldGlvbigmZHNpLT54ZmVyX2NvbXBsZXRpb24pOwor CS8qIEF0IHN0YXJ0dXAgZW5hYmxlIGVycm9yLXJlcG9ydGluZyBpbnRlcnJ1cHRzIGFuZCBub3Ro aW5nIGVsc2UuICovCisJRFNJX1BPUlRfV1JJVEUoSU5UX0VOLCBEU0kxX0lOVEVSUlVQVFNfQUxX QVlTX0VOQUJMRUQpOworCS8qIENsZWFyIGFueSBleGlzdGluZyBpbnRlcnJ1cHQgc3RhdGUuICov CisJRFNJX1BPUlRfV1JJVEUoSU5UX1NUQVQsIERTSV9QT1JUX1JFQUQoSU5UX1NUQVQpKTsKKwor CXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApLAor CQkJICAgICAgIHZjNF9kc2lfaXJxX2hhbmRsZXIsIDAsICJ2YzQgZHNpIiwgZHNpKTsKKwlpZiAo cmV0KSB7CisJCWlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikKKwkJCWRldl9lcnIoZGV2LCAiRmFp bGVkIHRvIGdldCBpbnRlcnJ1cHQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwor CWRzaS0+ZXNjYXBlX2Nsb2NrID0gZGV2bV9jbGtfZ2V0KGRldiwgImVzY2FwZSIpOworCWlmIChJ U19FUlIoZHNpLT5lc2NhcGVfY2xvY2spKSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5lc2NhcGVf Y2xvY2spOworCQlpZiAocmV0ICE9IC1FUFJPQkVfREVGRVIpCisJCQlkZXZfZXJyKGRldiwgIkZh aWxlZCB0byBnZXQgZXNjYXBlIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlkc2ktPnBsbF9waHlfY2xvY2sgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGh5Iik7CisJaWYg KElTX0VSUihkc2ktPnBsbF9waHlfY2xvY2spKSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5wbGxf cGh5X2Nsb2NrKTsKKwkJaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQorCQkJZGV2X2VycihkZXYs ICJGYWlsZWQgdG8gZ2V0IHBoeSBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJ fQorCisJZHNpLT5waXhlbF9jbG9jayA9IGRldm1fY2xrX2dldChkZXYsICJwaXhlbCIpOworCWlm IChJU19FUlIoZHNpLT5waXhlbF9jbG9jaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPnBpeGVs X2Nsb2NrKTsKKwkJaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQorCQkJZGV2X2VycihkZXYsICJG YWlsZWQgdG8gZ2V0IHBpeGVsIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwkvKiBUaGUgZXNjIGNsb2NrIHJhdGUgaXMgc3VwcG9zZWQgdG8gYWx3YXlzIGJlIDEwME1o ei4gKi8KKwlyZXQgPSBjbGtfc2V0X3JhdGUoZHNpLT5lc2NhcGVfY2xvY2ssIDEwMCAqIDEwMDAw MDApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gc2V0IGVzYyBjbG9j azogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gdmM0X2RzaV9pbml0 X3BoeV9jbG9ja3MoZHNpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGRzaS0+ cG9ydCA9PSAxKQorCQl2YzQtPmRzaTEgPSBkc2k7CisKKwlkcm1fZW5jb2Rlcl9pbml0KGRybSwg ZHNpLT5lbmNvZGVyLCAmdmM0X2RzaV9lbmNvZGVyX2Z1bmNzLAorCQkJIERSTV9NT0RFX0VOQ09E RVJfRFNJLCBOVUxMKTsKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGRzaS0+ZW5jb2RlciwgJnZj NF9kc2lfZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOworCisJZHNpLT5jb25uZWN0b3IgPSB2YzRfZHNp X2Nvbm5lY3Rvcl9pbml0KGRybSwgZHNpKTsKKwlpZiAoSVNfRVJSKGRzaS0+Y29ubmVjdG9yKSkg eworCQlyZXQgPSBQVFJfRVJSKGRzaS0+Y29ubmVjdG9yKTsKKwkJZ290byBlcnJfZGVzdHJveV9l bmNvZGVyOworCX0KKworCWRzaS0+ZHNpX2hvc3Qub3BzID0gJnZjNF9kc2lfaG9zdF9vcHM7CisJ ZHNpLT5kc2lfaG9zdC5kZXYgPSBkZXY7CisKKwltaXBpX2RzaV9ob3N0X3JlZ2lzdGVyKCZkc2kt PmRzaV9ob3N0KTsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRzaSk7CisKKwlwbV9ydW50aW1l X2VuYWJsZShkZXYpOworCisJcmV0dXJuIDA7CisKK2Vycl9kZXN0cm95X2VuY29kZXI6CisJdmM0 X2RzaV9lbmNvZGVyX2Rlc3Ryb3koZHNpLT5lbmNvZGVyKTsKKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyB2b2lkIHZjNF9kc2lfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRl dmljZSAqbWFzdGVyLAorCQkJICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtID0gZGV2X2dldF9kcnZkYXRhKG1hc3Rlcik7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRv X3ZjNF9kZXYoZHJtKTsKKwlzdHJ1Y3QgdmM0X2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRl dik7CisKKwlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKKworCXZjNF9kc2lfY29ubmVjdG9yX2Rl c3Ryb3koZHNpLT5jb25uZWN0b3IpOworCXZjNF9kc2lfZW5jb2Rlcl9kZXN0cm95KGRzaS0+ZW5j b2Rlcik7CisKKwltaXBpX2RzaV9ob3N0X3VucmVnaXN0ZXIoJmRzaS0+ZHNpX2hvc3QpOworCisJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGxsX3BoeV9jbG9jayk7CisJY2xrX2Rpc2FibGVf dW5wcmVwYXJlKGRzaS0+ZXNjYXBlX2Nsb2NrKTsKKworCWlmIChkc2ktPnBvcnQgPT0gMSkKKwkJ dmM0LT5kc2kxID0gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3Bz IHZjNF9kc2lfb3BzID0geworCS5iaW5kICAgPSB2YzRfZHNpX2JpbmQsCisJLnVuYmluZCA9IHZj NF9kc2lfdW5iaW5kLAorfTsKKworc3RhdGljIGludCB2YzRfZHNpX2Rldl9wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5k ZXYsICZ2YzRfZHNpX29wcyk7Cit9CisKK3N0YXRpYyBpbnQgdmM0X2RzaV9kZXZfcmVtb3ZlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2 LCAmdmM0X2RzaV9vcHMpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IHZjNF9kc2lfZHJpdmVyID0geworCS5wcm9iZSA9IHZjNF9kc2lfZGV2X3Byb2JlLAorCS5yZW1v dmUgPSB2YzRfZHNpX2Rldl9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidmM0X2Rz aSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHZjNF9kc2lfZHRfbWF0Y2gsCisJfSwKK307Ci0tIAoy LjExLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRy aS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=