From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhi Wang Subject: [RFC 14/29] drm/i915: gvt: vGPU interrupt emulation framework Date: Thu, 28 Jan 2016 18:21:36 +0800 Message-ID: <1453976511-27322-15-git-send-email-zhi.a.wang@intel.com> References: <1453976511-27322-1-git-send-email-zhi.a.wang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 7FB0D6E7EC for ; Thu, 28 Jan 2016 02:24:42 -0800 (PST) In-Reply-To: <1453976511-27322-1-git-send-email-zhi.a.wang@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, igvt-g@lists.01.org Cc: daniel.vetter@ffwll.ch, david.j.cowperthwaite@intel.com List-Id: intel-gfx@lists.freedesktop.org VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHZHUFUgaW50ZXJydXB0IGVtdWxhdGlvbiBmcmFtZXdvcmsu CgpUaGUgdkdQVSBpbnRyZXJydXB0IGVtdWxhdGlvbiBmcmFtZXdvcmsgaXMgYW4gZXZlbnQtYmFz ZWQgaW50ZXJydXB0IGVtdWxhdGlvbgpmcmFtZXdvcmsuIEl0J3MgcmVzcG9uc2libGUgZm9yIGVt dWxhdGluZyBHRU4gaGFyZHdhcmUgaW50ZXJydXB0cyBkZW1hbmRlZApieSBvdGhlciBHVlQtZyBl bXVsYXRpb24gY29yZSBjb21wb25lbnQuCgpJdCBjb25zaXN0cyBzZXJ2ZXJhbCBjb21wb25lbnRz OgoKLSBEZXNjcmlwdGlvbnMgb2YgaW50ZXJydXB0IHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9uCi0g VXBwZXIgbGV2ZWwgPC0+IGxvd2VyIGxldmVsIGludGVycnVwdCBtYXBwaW5nCi0gR0VOIEhXIElF Ui9JTVIvSUlSIHJlZ2lzdGVyIGVtdWxhdGlvbiByb3V0aW5lcwotIEV2ZW50LWJhc2VkIGludGVy cnVwdCBwcm9wYWdhdGlvbiBpbnRlcmZhY2UKClRoZSBzcGVjaWZpYyBHVlQtZyBjb21wb25lbnQg d2FudHMgdG8gZW11bGF0ZSBhbiBpbnRlcnJ1cHQgdG8gYSBWTSBqdXN0IG5lZWQKdG8gc3BlY2lm eSBhbiBldmVudDogZS5nIFJDU19NSV9VU0VSX0lOVEVSUlVQVCB0byB0aGUgZnJhbWV3b3JrLiBU aGUgZnJhbWV3b3JrCndpbGw6CgotIEdlbmVyYXRlIHJlbGF0ZWQgdmlydHVhbCBJSVIgYml0IGFj Y29yZGluZyB0byBndWVzdCB2aXJ0dWFsIElFUiBhbmQgSU1ScywKLSBHZW5lcmF0ZSByZWxhdGVk IHVwcGVyIGxldmVsIGludGVycnVwdCB2aXJ0dWFsIElJUiBiaXQgYWNjb2RyaW5nIHRvIHRoZQpj YXNjYWRlIGludGVycnVwdCBtYXBwaW5nCi0gSW5qZWN0IGEgTVNJIHRvIGd1ZXN0CgpUaGVuIGd1 ZXN0IEdFTiBkcml2ZXIgd2lsbCBzZWUgYSB2aXJ0dWFsIEdFTiBpbnRlcnJ1cHQgaXMgYXNzZXJ0 ZWQuCgpTaWduZWQtb2ZmLWJ5OiBaaGkgV2FuZyA8emhpLmEud2FuZ0BpbnRlbC5jb20+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L01ha2VmaWxlICAgIHwgICAyICstCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9ndnQvZ3Z0LmMgICAgICAgfCAgIDQgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3Z0L2d2dC5oICAgICAgIHwgICA2ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9pbnRlcnJ1 cHQuYyB8IDY0OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L2ludGVycnVwdC5oIHwgMjMyICsrKysrKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9wZXJmLmggICAgICB8ICAzOSArKysKIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2d2dC9yZWcuaCAgICAgICB8ICAzMSArKwogNyBmaWxlcyBjaGFuZ2VkLCA5NjEgaW5zZXJ0 aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d2dC9pbnRlcnJ1cHQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d2dC9pbnRlcnJ1cHQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d2dC9wZXJmLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQv TWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvTWFrZWZpbGUKaW5kZXggMjg1ZWI4 NC4uNzhkZWVmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L01ha2VmaWxl CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAK IEdWVF9TT1VSQ0UgOj0gZ3Z0Lm8gcGFyYW1zLm8gYXBlcnR1cmVfZ20ubyBtbWlvLm8gaGFuZGxl cnMubyBpbnN0YW5jZS5vIFwKLQkJdHJhY2VfcG9pbnRzLm8gZmJfZGVjb2Rlci5vCisJCXRyYWNl X3BvaW50cy5vIGludGVycnVwdC5vIGZiX2RlY29kZXIubwogCiBjY2ZsYWdzLXkJCQkrPSAtSSQo c3JjKSAtSSQoc3JjKS8uLiAtV2FsbCAtV2Vycm9yIC1Xbm8tdW51c2VkLWZ1bmN0aW9uCiBpOTE1 X2d2dC15CQkJOj0gJChHVlRfU09VUkNFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Z0L2d2dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5jCmluZGV4IGY1MDY2 YmMuLmEwYTk2NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMKQEAgLTIzOCw2ICsyMzgsNyBAQCBz dGF0aWMgYm9vbCBpbml0X3NlcnZpY2VfdGhyZWFkKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2KQog c3RhdGljIHZvaWQgY2xlYW5fcGd0X2RldmljZShzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikKIHsK IAljbGVhbl9zZXJ2aWNlX3RocmVhZChwZGV2KTsKKwlndnRfaXJxX2V4aXQocGRldik7CiAJZ3Z0 X2NsZWFuX21taW9fZW11bGF0aW9uX3N0YXRlKHBkZXYpOwogCWNsZWFuX2luaXRpYWxfbW1pb19z dGF0ZShwZGV2KTsKIAlndnRfY2xlYW5fcmVzb3VyY2VfYWxsb2NhdG9yKHBkZXYpOwpAQCAtMjU4 LDYgKzI1OSw5IEBAIHN0YXRpYyBib29sIGluaXRfcGd0X2RldmljZShzdHJ1Y3QgcGd0X2Rldmlj ZSAqcGRldiwgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRlCiAJaWYgKCFndnRfc2V0dXBfbW1p b19lbXVsYXRpb25fc3RhdGUocGRldikpCiAJCWdvdG8gZXJyOwogCisJaWYgKCFndnRfaXJxX2lu aXQocGRldikpCisJCWdvdG8gZXJyOworCiAJaWYgKCFpbml0X3NlcnZpY2VfdGhyZWFkKHBkZXYp KQogCQlnb3RvIGVycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2 dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5oCmluZGV4IGM1ODMwNWYuLmZhZDU2 YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRlICJt cHQuaCIKICNpbmNsdWRlICJmYl9kZWNvZGVyLmgiCiAjaW5jbHVkZSAibW1pby5oIgorI2luY2x1 ZGUgImludGVycnVwdC5oIgorI2luY2x1ZGUgInBlcmYuaCIKIAogI2RlZmluZSBHVlRfTUFYX1ZH UFUgOAogCkBAIC0xMTEsNiArMTEzLDcgQEAgc3RydWN0IHZndF9kZXZpY2UgewogCWJvb2wgd2Fy bl91bnRyYWNrOwogCWF0b21pY190IGFjdGl2ZTsKIAlzdHJ1Y3QgZ3Z0X3ZpcnR1YWxfZGV2aWNl X3N0YXRlIHN0YXRlOworCXN0cnVjdCBndnRfc3RhdGlzdGljcyBzdGF0OwogfTsKIAogc3RydWN0 IGd2dF9nbV9hbGxvY2F0b3IgewpAQCAtMTYwLDYgKzE2Myw5IEBAIHN0cnVjdCBwZ3RfZGV2aWNl IHsKIAl1MzIgYXV4X3RhYmxlX2luZGV4OwogCiAJREVDTEFSRV9IQVNIVEFCTEUobW1pb190YWJs ZSwgR1ZUX0hBU0hfQklUUyk7CisKKwlzdHJ1Y3QgZ3Z0X2lycV9zdGF0ZSBpcnFfc3RhdGU7CisJ c3RydWN0IHBndF9zdGF0aXN0aWNzIHN0YXQ7CiB9OwogCiAvKiBkZWZpbml0aW9ucyBmb3IgcGh5 c2ljYWwgYXBlcnR1cmUvR00gc3BhY2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d2dC9pbnRlcnJ1cHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9pbnRlcnJ1cHQu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2Q0MGNlCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2ludGVycnVwdC5jCkBAIC0wLDAgKzEs NjQ4IEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1Ig Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RI RVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICog U09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImd2dC5oIgorI2luY2x1ZGUgImludGVycnVwdC5o IgorCitzdGF0aWMgdm9pZCB1cGRhdGVfdXBzdHJlYW1faXJxKHN0cnVjdCB2Z3RfZGV2aWNlICp2 Z3QsCisJCXN0cnVjdCBndnRfaXJxX2luZm8gKmluZm8pOworCitzdGF0aWMgaW50IGd2dF9pcnFf d2Fybl9vbmNlW0dWVF9NQVhfVkdQVSsxXVtHVlRfRVZFTlRfTUFYXTsKKworY2hhciAqZ3Z0X2ly cV9uYW1lW0dWVF9FVkVOVF9NQVhdID0geworCS8vIEdUCisJW1JDU19NSV9VU0VSX0lOVEVSUlVQ VF0gPSAiUmVuZGVyIENvbW1hbmQgU3RyZWFtZXIgTUkgVVNFUiBJTlRFUlJVUFQiLAorCVtSQ1Nf REVCVUddID0gIlJlbmRlciBFVSBkZWJ1ZyBmcm9tIFNWRyIsCisJW1JDU19NTUlPX1NZTkNfRkxV U0hdID0gIlJlbmRlciBNTUlPIHN5bmMgZmx1c2ggc3RhdHVzIiwKKwlbUkNTX0NNRF9TVFJFQU1F Ul9FUlJdID0gIlJlbmRlciBDb21tYW5kIFN0cmVhbWVyIGVycm9yIGludGVycnVwdCIsCisJW1JD U19QSVBFX0NPTlRST0xdID0gIlJlbmRlciBQSVBFIENPTlRST0wgbm90aWZ5IiwKKwlbUkNTX1dB VENIRE9HX0VYQ0VFREVEXSA9ICJSZW5kZXIgQ29tbWFuZCBTdHJlYW1lciBXYXRjaGRvZyBjb3Vu dGVyIGV4Y2VlZGVkIiwKKwlbUkNTX1BBR0VfRElSRUNUT1JZX0ZBVUxUXSA9ICJSZW5kZXIgcGFn ZSBkaXJlY3RvcnkgZmF1bHRzIiwKKwlbUkNTX0FTX0NPTlRFWFRfU1dJVENIXSA9ICJSZW5kZXIg QVMgQ29udGV4dCBTd2l0Y2ggSW50ZXJydXB0IiwKKworCVtWQ1NfTUlfVVNFUl9JTlRFUlJVUFRd ID0gIlZpZGVvIENvbW1hbmQgU3RyZWFtZXIgTUkgVVNFUiBJTlRFUlJVUFQiLAorCVtWQ1NfTU1J T19TWU5DX0ZMVVNIXSA9ICJWaWRlbyBNTUlPIHN5bmMgZmx1c2ggc3RhdHVzIiwKKwlbVkNTX0NN RF9TVFJFQU1FUl9FUlJdID0gIlZpZGVvIENvbW1hbmQgU3RyZWFtZXIgZXJyb3IgaW50ZXJydXB0 IiwKKwlbVkNTX01JX0ZMVVNIX0RXXSA9ICJWaWRlbyBNSSBGTFVTSCBEVyBub3RpZnkiLAorCVtW Q1NfV0FUQ0hET0dfRVhDRUVERURdID0gIlZpZGVvIENvbW1hbmQgU3RyZWFtZXIgV2F0Y2hkb2cg Y291bnRlciBleGNlZWRlZCIsCisJW1ZDU19QQUdFX0RJUkVDVE9SWV9GQVVMVF0gPSAiVmlkZW8g cGFnZSBkaXJlY3RvcnkgZmF1bHRzIiwKKwlbVkNTX0FTX0NPTlRFWFRfU1dJVENIXSA9ICJWaWRl byBBUyBDb250ZXh0IFN3aXRjaCBJbnRlcnJ1cHQiLAorCVtWQ1MyX01JX1VTRVJfSU5URVJSVVBU XSA9ICJWQ1MyIFZpZGVvIENvbW1hbmQgU3RyZWFtZXIgTUkgVVNFUiBJTlRFUlJVUFQiLAorCVtW Q1MyX01JX0ZMVVNIX0RXXSA9ICJWQ1MyIFZpZGVvIE1JIEZMVVNIIERXIG5vdGlmeSIsCisJW1ZD UzJfQVNfQ09OVEVYVF9TV0lUQ0hdID0gIlZDUzIgQ29udGV4dCBTd2l0Y2ggSW50ZXJydXB0IiwK KworCVtCQ1NfTUlfVVNFUl9JTlRFUlJVUFRdID0gIkJsaXR0ZXIgQ29tbWFuZCBTdHJlYW1lciBN SSBVU0VSIElOVEVSUlVQVCIsCisJW0JDU19NTUlPX1NZTkNfRkxVU0hdID0gIkJpbGx0ZXIgTU1J TyBzeW5jIGZsdXNoIHN0YXR1cyIsCisJW0JDU19DTURfU1RSRUFNRVJfRVJSXSA9ICJCbGl0dGVy IENvbW1hbmQgU3RyZWFtZXIgZXJyb3IgaW50ZXJydXB0IiwKKwlbQkNTX01JX0ZMVVNIX0RXXSA9 ICJCbGl0dGVyIE1JIEZMVVNIIERXIG5vdGlmeSIsCisJW0JDU19QQUdFX0RJUkVDVE9SWV9GQVVM VF0gPSAiQmxpdHRlciBwYWdlIGRpcmVjdG9yeSBmYXVsdHMiLAorCVtCQ1NfQVNfQ09OVEVYVF9T V0lUQ0hdID0gIkJsaXR0ZXIgQVMgQ29udGV4dCBTd2l0Y2ggSW50ZXJydXB0IiwKKworCVtWRUNT X01JX0ZMVVNIX0RXXSA9ICJWaWRlbyBFbmhhbmNlZCBTdHJlYW1lciBNSSBGTFVTSCBEVyBub3Rp ZnkiLAorCVtWRUNTX0FTX0NPTlRFWFRfU1dJVENIXSA9ICJWRUNTIENvbnRleHQgU3dpdGNoIElu dGVycnVwdCIsCisKKwkvLyBESVNQTEFZCisJW1BJUEVfQV9GSUZPX1VOREVSUlVOXSA9ICJQaXBl IEEgRklGTyB1bmRlcnJ1biIsCisJW1BJUEVfQV9DUkNfRVJSXSA9ICJQaXBlIEEgQ1JDIGVycm9y IiwKKwlbUElQRV9BX0NSQ19ET05FXSA9ICJQaXBlIEEgQ1JDIGRvbmUiLAorCVtQSVBFX0FfVlNZ TkNdID0gIlBpcGUgQSB2c3luYyIsCisJW1BJUEVfQV9MSU5FX0NPTVBBUkVdID0gIlBpcGUgQSBs aW5lIGNvbXBhcmUiLAorCVtQSVBFX0FfT0REX0ZJRUxEXSA9ICJQaXBlIEEgb2RkIGZpZWxkIiwK KwlbUElQRV9BX0VWRU5fRklFTERdID0gIlBpcGUgQSBldmVuIGZpZWxkIiwKKwlbUElQRV9BX1ZC TEFOS10gPSAiUGlwZSBBIHZibGFuayIsCisJW1BJUEVfQl9GSUZPX1VOREVSUlVOXSA9ICJQaXBl IEIgRklGTyB1bmRlcnJ1biIsCisJW1BJUEVfQl9DUkNfRVJSXSA9ICJQaXBlIEIgQ1JDIGVycm9y IiwKKwlbUElQRV9CX0NSQ19ET05FXSA9ICJQaXBlIEIgQ1JDIGRvbmUiLAorCVtQSVBFX0JfVlNZ TkNdID0gIlBpcGUgQiB2c3luYyIsCisJW1BJUEVfQl9MSU5FX0NPTVBBUkVdID0gIlBpcGUgQiBs aW5lIGNvbXBhcmUiLAorCVtQSVBFX0JfT0REX0ZJRUxEXSA9ICJQaXBlIEIgb2RkIGZpZWxkIiwK KwlbUElQRV9CX0VWRU5fRklFTERdID0gIlBpcGUgQiBldmVuIGZpZWxkIiwKKwlbUElQRV9CX1ZC TEFOS10gPSAiUGlwZSBCIHZibGFuayIsCisJW1BJUEVfQ19WQkxBTktdID0gIlBpcGUgQyB2Ymxh bmsiLAorCVtEUFNUX1BIQVNFX0lOXSA9ICJEUFNUIHBoYXNlIGluIGV2ZW50IiwKKwlbRFBTVF9I SVNUT0dSQU1dID0gIkRQU1QgaGlzdG9ncmFtIGV2ZW50IiwKKwlbR1NFXSA9ICJHU0UiLAorCVtE UF9BX0hPVFBMVUddID0gIkRQIEEgSG90cGx1ZyIsCisJW0FVWF9DSEFOTkVMX0FdID0gIkFVWCBD aGFubmVsIEEiLAorCVtQRVJGX0NPVU5URVJdID0gIlBlcmZvcm1hbmNlIGNvdW50ZXIiLAorCVtQ T0lTT05dID0gIlBvaXNvbiIsCisJW0dUVF9GQVVMVF0gPSAiR1RUIGZhdWx0IiwKKwlbUFJJTUFS WV9BX0ZMSVBfRE9ORV0gPSAiUHJpbWFyeSBQbGFuZSBBIGZsaXAgZG9uZSIsCisJW1BSSU1BUllf Ql9GTElQX0RPTkVdID0gIlByaW1hcnkgUGxhbmUgQiBmbGlwIGRvbmUiLAorCVtQUklNQVJZX0Nf RkxJUF9ET05FXSA9ICJQcmltYXJ5IFBsYW5lIEMgZmxpcCBkb25lIiwKKwlbU1BSSVRFX0FfRkxJ UF9ET05FXSA9ICJTcHJpdGUgUGxhbmUgQSBmbGlwIGRvbmUiLAorCVtTUFJJVEVfQl9GTElQX0RP TkVdID0gIlNwcml0ZSBQbGFuZSBCIGZsaXAgZG9uZSIsCisJW1NQUklURV9DX0ZMSVBfRE9ORV0g PSAiU3ByaXRlIFBsYW5lIEMgZmxpcCBkb25lIiwKKworCVtQQ1VfVEhFUk1BTF0gPSAiUENVIFRo ZXJtYWwgRXZlbnQiLAorCVtQQ1VfUENPREUyRFJJVkVSX01BSUxCT1hdID0gIlBDVSBwY29kZTJk cml2ZXIgbWFpbGJveCBldmVudCIsCisKKwkvLyBQQ0gKKwlbRkRJX1JYX0lOVEVSUlVQVFNfVFJB TlNDT0RFUl9BXSA9ICJGREkgUlggSW50ZXJydXB0cyBDb21iaW5lZCBBIiwKKwlbQVVESU9fQ1Bf Q0hBTkdFX1RSQU5TQ09ERVJfQV0gPSAiQXVkaW8gQ1AgQ2hhbmdlIFRyYW5zY29kZXIgQSIsCisJ W0FVRElPX0NQX1JFUVVFU1RfVFJBTlNDT0RFUl9BXSA9ICJBdWRpbyBDUCBSZXF1ZXN0IFRyYW5z Y29kZXIgQSIsCisJW0ZESV9SWF9JTlRFUlJVUFRTX1RSQU5TQ09ERVJfQl0gPSAiRkRJIFJYIElu dGVycnVwdHMgQ29tYmluZWQgQiIsCisJW0FVRElPX0NQX0NIQU5HRV9UUkFOU0NPREVSX0JdID0g IkF1ZGlvIENQIENoYW5nZSBUcmFuc2NvZGVyIEIiLAorCVtBVURJT19DUF9SRVFVRVNUX1RSQU5T Q09ERVJfQl0gPSAiQXVkaW8gQ1AgUmVxdWVzdCBUcmFuc2NvZGVyIEIiLAorCVtGRElfUlhfSU5U RVJSVVBUU19UUkFOU0NPREVSX0NdID0gIkZESSBSWCBJbnRlcnJ1cHRzIENvbWJpbmVkIEMiLAor CVtBVURJT19DUF9DSEFOR0VfVFJBTlNDT0RFUl9DXSA9ICJBdWRpbyBDUCBDaGFuZ2UgVHJhbnNj b2RlciBDIiwKKwlbQVVESU9fQ1BfUkVRVUVTVF9UUkFOU0NPREVSX0NdID0gIkF1ZGlvIENQIFJl cXVlc3QgVHJhbnNjb2RlciBDIiwKKwlbRVJSX0FORF9EQkddID0gIlNvdXRoIEVycm9yIGFuZCBE ZWJ1ZyBJbnRlcnVwdHMgQ29tYmluZWQiLAorCVtHTUJVU10gPSAiR21idXMiLAorCVtTRFZPX0Jf SE9UUExVR10gPSAiU0RWTyBCIGhvdHBsdWciLAorCVtDUlRfSE9UUExVR10gPSAiQ1JUIEhvdHBs dWciLAorCVtEUF9CX0hPVFBMVUddID0gIkRpc3BsYXlQb3J0L0hETUkvRFZJIEIgSG90cGx1ZyIs CisJW0RQX0NfSE9UUExVR10gPSAiRGlzcGxheVBvcnQvSERNSS9EVkkgQyBIb3RwbHVnIiwKKwlb RFBfRF9IT1RQTFVHXSA9ICJEaXNwbGF5UG9ydC9IRE1JL0RWSSBEIEhvdHBsdWciLAorCVtBVVhf Q0hFTk5FTF9CXSA9ICJBVVggQ2hhbm5lbCBCIiwKKwlbQVVYX0NIRU5ORUxfQ10gPSAiQVVYIENo YW5uZWwgQyIsCisJW0FVWF9DSEVOTkVMX0RdID0gIkFVWCBDaGFubmVsIEQiLAorCVtBVURJT19Q T1dFUl9TVEFURV9DSEFOR0VfQl0gPSAiQXVkaW8gUG93ZXIgU3RhdGUgY2hhbmdlIFBvcnQgQiIs CisJW0FVRElPX1BPV0VSX1NUQVRFX0NIQU5HRV9DXSA9ICJBdWRpbyBQb3dlciBTdGF0ZSBjaGFu Z2UgUG9ydCBDIiwKKwlbQVVESU9fUE9XRVJfU1RBVEVfQ0hBTkdFX0RdID0gIkF1ZGlvIFBvd2Vy IFN0YXRlIGNoYW5nZSBQb3J0IEQiLAorCisJW0dWVF9FVkVOVF9SRVNFUlZFRF0gPSAiUkVTRVJW RUQgRVZFTlRTISEhIiwKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGd2dF9pcnFfaW5mbyAq cmVnYmFzZV90b19pcnFfaW5mbyhzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiwKKwkJdW5zaWduZWQg aW50IHJlZykKK3sKKwlzdHJ1Y3QgZ3Z0X2lycV9zdGF0ZSAqc3RhdGUgPSAmcGRldi0+aXJxX3N0 YXRlOworCWludCBpOworCisJZm9yX2VhY2hfc2V0X2JpdChpLCBzdGF0ZS0+aXJxX2luZm9fYml0 bWFwLCBHVlRfSVJRX0lORk9fTUFYKSB7CisJCWlmIChzdGF0ZS0+aW5mb1tpXS0+cmVnX2Jhc2Ug PT0gcmVnKQorCQkJcmV0dXJuIHN0YXRlLT5pbmZvW2ldOworCX0KKworCXJldHVybiBOVUxMOwor fQorCitib29sIGd2dF9yZWdfaW1yX2hhbmRsZXIoc3RydWN0IHZndF9kZXZpY2UgKnZndCwKKwl1 bnNpZ25lZCBpbnQgcmVnLCB2b2lkICpwX2RhdGEsIHVuc2lnbmVkIGludCBieXRlcykKK3sKKwl1 aW50MzJfdCBjaGFuZ2VkLCBtYXNrZWQsIHVubWFza2VkOworCXVpbnQzMl90IGltciA9ICoodTMy ICopcF9kYXRhOworCXN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2ID0gdmd0LT5wZGV2OworCXN0cnVj dCBndnRfaXJxX29wcyAqb3BzID0gZ3Z0X2dldF9pcnFfb3BzKHBkZXYpOworCisJZ3Z0X2RiZ19p cnEoIklSUTogY2FwdHVyZSBJTVIgd3JpdGUgb24gcmVnICgleCkgd2l0aCB2YWwgKCV4KSIsCisJ CXJlZywgaW1yKTsKKworCWd2dF9kYmdfaXJxKCJJUlE6IG9sZCB2SU1SKCV4KSwgcElNUigleCki LAorCQkgX192cmVnKHZndCwgcmVnKSwgZ3Z0X21taW9fcmVhZChwZGV2LCByZWcpKTsKKworCS8q IGZpZ3VyZSBvdXQgbmV3bHkgbWFza2VkL3VubWFza2VkIGJpdHMgKi8KKwljaGFuZ2VkID0gX192 cmVnKHZndCwgcmVnKSBeIGltcjsKKwltYXNrZWQgPSAoX192cmVnKHZndCwgcmVnKSAmIGNoYW5n ZWQpIF4gY2hhbmdlZDsKKwl1bm1hc2tlZCA9IG1hc2tlZCBeIGNoYW5nZWQ7CisKKwlndnRfZGJn X2lycSgiSVJROiBjaGFuZ2VkICgleCksIG1hc2tlZCgleCksIHVubWFza2VkICgleCkiLAorCQlj aGFuZ2VkLCBtYXNrZWQsIHVubWFza2VkKTsKKworCV9fdnJlZyh2Z3QsIHJlZykgPSBpbXI7CisK KwlvcHMtPmNoZWNrX3BlbmRpbmdfaXJxKHZndCk7CisJZ3Z0X2RiZ19pcnEoIklSUTogbmV3IHZJ TVIoJXgpLCBwSU1SKCV4KSIsCisJCSBfX3ZyZWcodmd0LCByZWcpLCBndnRfbW1pb19yZWFkKHBk ZXYsIHJlZykpOworCXJldHVybiB0cnVlOworfQorCitib29sIGd2dF9yZWdfbWFzdGVyX2lycV9o YW5kbGVyKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsCisJdW5zaWduZWQgaW50IHJlZywgdm9pZCAq cF9kYXRhLCB1bnNpZ25lZCBpbnQgYnl0ZXMpCit7CisJdWludDMyX3QgY2hhbmdlZCwgZW5hYmxl ZCwgZGlzYWJsZWQ7CisJdWludDMyX3QgaWVyID0gKih1MzIgKilwX2RhdGE7CisJdWludDMyX3Qg dmlydHVhbF9pZXIgPSBfX3ZyZWcodmd0LCByZWcpOworCXN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2 ID0gdmd0LT5wZGV2OworCXN0cnVjdCBndnRfaXJxX29wcyAqb3BzID0gZ3Z0X2dldF9pcnFfb3Bz KHBkZXYpOworCisJZ3Z0X2RiZ19pcnEoIklSUTogY2FwdHVyZSBtYXN0ZXIgaXJxIHdyaXRlIG9u IHJlZyAoJXgpIHdpdGggdmFsICgleCkiLAorCQlyZWcsIGllcik7CisKKwlndnRfZGJnX2lycSgi SVJROiBvbGQgdnJlZygleCksIHByZWcoJXgpIiwKKwkJIF9fdnJlZyh2Z3QsIHJlZyksIGd2dF9t bWlvX3JlYWQocGRldiwgcmVnKSk7CisKKwkvKgorCSAqIEdFTjhfTUFTVEVSX0lSUSBpcyBhIHNw ZWNpYWwgaXJxIHJlZ2lzdGVyLAorCSAqIG9ubHkgYml0IDMxIGlzIGFsbG93ZWQgdG8gYmUgbW9k aWZpZWQKKwkgKiBhbmQgdHJlYXRlZCBhcyBhbiBJRVIgYml0LgorCSAqLworCWllciAmPSBHRU44 X01BU1RFUl9JUlFfQ09OVFJPTDsKKwl2aXJ0dWFsX2llciAmPSBHRU44X01BU1RFUl9JUlFfQ09O VFJPTDsKKwlfX3ZyZWcodmd0LCByZWcpICY9IH5HRU44X01BU1RFUl9JUlFfQ09OVFJPTDsKKwlf X3ZyZWcodmd0LCByZWcpIHw9IGllcjsKKworCS8qIGZpZ3VyZSBvdXQgbmV3bHkgZW5hYmxlZC9k aXNhYmxlIGJpdHMgKi8KKwljaGFuZ2VkID0gdmlydHVhbF9pZXIgXiBpZXI7CisJZW5hYmxlZCA9 ICh2aXJ0dWFsX2llciAmIGNoYW5nZWQpIF4gY2hhbmdlZDsKKwlkaXNhYmxlZCA9IGVuYWJsZWQg XiBjaGFuZ2VkOworCisJZ3Z0X2RiZ19pcnEoInZHVF9JUlE6IGNoYW5nZWQgKCV4KSwgZW5hYmxl ZCgleCksIGRpc2FibGVkKCV4KSIsCisJCQljaGFuZ2VkLCBlbmFibGVkLCBkaXNhYmxlZCk7CisK KwlvcHMtPmNoZWNrX3BlbmRpbmdfaXJxKHZndCk7CisJZ3Z0X2RiZ19pcnEoIklSUTogbmV3IHZy ZWcoJXgpLCBwcmVnKCV4KSIsCisJCSBfX3ZyZWcodmd0LCByZWcpLCBndnRfbW1pb19yZWFkKHBk ZXYsIHJlZykpOworCXJldHVybiB0cnVlOworfQorCitib29sIGd2dF9yZWdfaWVyX2hhbmRsZXIo c3RydWN0IHZndF9kZXZpY2UgKnZndCwKKwl1bnNpZ25lZCBpbnQgcmVnLCB2b2lkICpwX2RhdGEs IHVuc2lnbmVkIGludCBieXRlcykKK3sKKwl1aW50MzJfdCBjaGFuZ2VkLCBlbmFibGVkLCBkaXNh YmxlZDsKKwl1aW50MzJfdCBpZXIgPSAqKHUzMiAqKXBfZGF0YTsKKwlzdHJ1Y3QgcGd0X2Rldmlj ZSAqcGRldiA9IHZndC0+cGRldjsKKwlzdHJ1Y3QgZ3Z0X2lycV9vcHMgKm9wcyA9IGd2dF9nZXRf aXJxX29wcyhwZGV2KTsKKwlzdHJ1Y3QgZ3Z0X2lycV9pbmZvICppbmZvOworCisJZ3Z0X2RiZ19p cnEoIklSUTogY2FwdHVyZSBJRVIgd3JpdGUgb24gcmVnICgleCkgd2l0aCB2YWwgKCV4KSIsCisJ CXJlZywgaWVyKTsKKworCWd2dF9kYmdfaXJxKCJJUlE6IG9sZCB2SUVSKCV4KSwgcElFUigleCki LAorCQkgX192cmVnKHZndCwgcmVnKSwgZ3Z0X21taW9fcmVhZChwZGV2LCByZWcpKTsKKworCS8q IGZpZ3VyZSBvdXQgbmV3bHkgZW5hYmxlZC9kaXNhYmxlIGJpdHMgKi8KKwljaGFuZ2VkID0gX192 cmVnKHZndCwgcmVnKSBeIGllcjsKKwllbmFibGVkID0gKF9fdnJlZyh2Z3QsIHJlZykgJiBjaGFu Z2VkKSBeIGNoYW5nZWQ7CisJZGlzYWJsZWQgPSBlbmFibGVkIF4gY2hhbmdlZDsKKworCWd2dF9k YmdfaXJxKCJ2R1RfSVJROiBjaGFuZ2VkICgleCksIGVuYWJsZWQoJXgpLCBkaXNhYmxlZCgleCki LAorCQkJY2hhbmdlZCwgZW5hYmxlZCwgZGlzYWJsZWQpOworCV9fdnJlZyh2Z3QsIHJlZykgPSBp ZXI7CisKKwlpbmZvID0gcmVnYmFzZV90b19pcnFfaW5mbyhwZGV2LCBpZXJfdG9fcmVnYmFzZShy ZWcpKTsKKwlpZiAoIWluZm8pCisJCXJldHVybiBmYWxzZTsKKworCWlmIChpbmZvLT5oYXNfdXBz dHJlYW1faXJxKQorCQl1cGRhdGVfdXBzdHJlYW1faXJxKHZndCwgaW5mbyk7CisKKwlvcHMtPmNo ZWNrX3BlbmRpbmdfaXJxKHZndCk7CisJZ3Z0X2RiZ19pcnEoIklSUTogbmV3IHZJRVIoJXgpLCBw SUVSKCV4KSIsCisJCSBfX3ZyZWcodmd0LCByZWcpLCBndnRfbW1pb19yZWFkKHBkZXYsIHJlZykp OworCXJldHVybiB0cnVlOworfQorCitib29sIGd2dF9yZWdfaWlyX2hhbmRsZXIoc3RydWN0IHZn dF9kZXZpY2UgKnZndCwgdW5zaWduZWQgaW50IHJlZywKKwl2b2lkICpwX2RhdGEsIHVuc2lnbmVk IGludCBieXRlcykKK3sKKwlzdHJ1Y3QgZ3Z0X2lycV9pbmZvICppbmZvID0gcmVnYmFzZV90b19p cnFfaW5mbyh2Z3QtPnBkZXYsIGlpcl90b19yZWdiYXNlKHJlZykpOworCXUzMiBpaXIgPSAqKHUz MiAqKXBfZGF0YTsKKworCWd2dF9kYmdfaXJxKCJJUlE6IGNhcHR1cmUgSUlSIHdyaXRlIG9uIHJl ZyAoJXgpIHdpdGggdmFsICgleCkiLAorCQlyZWcsIGlpcik7CisKKwlpZiAoIWluZm8pCisJCXJl dHVybiBmYWxzZTsKKworCS8qIFRPRE86IG5lZWQgdXNlIGFuIGF0b21pYyBvcGVyYXRpb24uIE5v dyBpdCdzIHNhZmUgZHVlIHRvIGJpZyBsb2NrICovCisJX192cmVnKHZndCwgcmVnKSAmPSB+aWly OworCisJaWYgKGluZm8tPmhhc191cHN0cmVhbV9pcnEpCisJCXVwZGF0ZV91cHN0cmVhbV9pcnEo dmd0LCBpbmZvKTsKKworCXJldHVybiB0cnVlOworfQorCitib29sIGd2dF9yZWdfaXNyX3dyaXRl KHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHVuc2lnbmVkIGludCByZWcsCisJdm9pZCAqcF9kYXRh LCB1bnNpZ25lZCBpbnQgYnl0ZXMpCit7CisJZ3Z0X2RiZ19pcnEoIklSUTogY2FwdHVyZSBJU1Ig d3JpdGUgb24gcmVnICgleCkgd2l0aCB2YWwgKCV4KS4iIFwKKwkJIiBXaWxsIGJlIGlnbm9yZWQh IiwgcmVnLCAqKHUzMiAqKXBfZGF0YSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RydWN0IGd2 dF9pcnFfbWFwIGdlbjhfaXJxX21hcFtdID0geworCXsgR1ZUX0lSUV9JTkZPX01BU1RFUiwgMCwg R1ZUX0lSUV9JTkZPX0dUMCwgMHhmZmZmIH0sCisJeyBHVlRfSVJRX0lORk9fTUFTVEVSLCAxLCBH VlRfSVJRX0lORk9fR1QwLCAweGZmZmYwMDAwIH0sCisJeyBHVlRfSVJRX0lORk9fTUFTVEVSLCAy LCBHVlRfSVJRX0lORk9fR1QxLCAweGZmZmYgfSwKKwl7IEdWVF9JUlFfSU5GT19NQVNURVIsIDMs IEdWVF9JUlFfSU5GT19HVDEsIDB4ZmZmZjAwMDAgfSwKKwl7IEdWVF9JUlFfSU5GT19NQVNURVIs IDQsIEdWVF9JUlFfSU5GT19HVDIsIDB4ZmZmZiB9LAorCXsgR1ZUX0lSUV9JTkZPX01BU1RFUiwg NiwgR1ZUX0lSUV9JTkZPX0dUMywgMHhmZmZmIH0sCisJeyBHVlRfSVJRX0lORk9fTUFTVEVSLCAx NiwgR1ZUX0lSUV9JTkZPX0RFX1BJUEVfQSwgfjAgfSwKKwl7IEdWVF9JUlFfSU5GT19NQVNURVIs IDE3LCBHVlRfSVJRX0lORk9fREVfUElQRV9CLCB+MCB9LAorCXsgR1ZUX0lSUV9JTkZPX01BU1RF UiwgMTgsIEdWVF9JUlFfSU5GT19ERV9QSVBFX0MsIH4wIH0sCisJeyBHVlRfSVJRX0lORk9fTUFT VEVSLCAyMCwgR1ZUX0lSUV9JTkZPX0RFX1BPUlQsIH4wIH0sCisJeyBHVlRfSVJRX0lORk9fTUFT VEVSLCAyMiwgR1ZUX0lSUV9JTkZPX0RFX01JU0MsIH4wIH0sCisJeyBHVlRfSVJRX0lORk9fTUFT VEVSLCAyMywgR1ZUX0lSUV9JTkZPX1BDSCwgfjAgfSwKKwl7IEdWVF9JUlFfSU5GT19NQVNURVIs IDMwLCBHVlRfSVJRX0lORk9fUENVLCB+MCB9LAorCXsgLTEsIC0xLCB+MCB9LAorfTsKKworc3Rh dGljIHZvaWQgdXBkYXRlX3Vwc3RyZWFtX2lycShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LAorCQlz dHJ1Y3QgZ3Z0X2lycV9pbmZvICppbmZvKQoreworCXN0cnVjdCBndnRfaXJxX3N0YXRlICpzdGF0 ZSA9ICZ2Z3QtPnBkZXYtPmlycV9zdGF0ZTsKKwlzdHJ1Y3QgZ3Z0X2lycV9tYXAgKm1hcCA9IHN0 YXRlLT5pcnFfbWFwOworCXN0cnVjdCBndnRfaXJxX2luZm8gKnVwX2lycV9pbmZvID0gTlVMTDsK Kwl1MzIgc2V0X2JpdHMgPSAwOworCXUzMiBjbGVhcl9iaXRzID0gMDsKKwlpbnQgYml0OworCXUz MiB2YWwgPSBfX3ZyZWcodmd0LCByZWdiYXNlX3RvX2lpcihpbmZvLT5yZWdfYmFzZSkpCisJCQkm IF9fdnJlZyh2Z3QsIHJlZ2Jhc2VfdG9faWVyKGluZm8tPnJlZ19iYXNlKSk7CisKKwlpZiAoIWlu Zm8tPmhhc191cHN0cmVhbV9pcnEpCisJCXJldHVybjsKKworCWZvciAobWFwID0gc3RhdGUtPmly cV9tYXA7IG1hcC0+dXBfaXJxX2JpdCAhPSAtMTsgbWFwKyspIHsKKwkJaWYgKGluZm8tPmdyb3Vw ICE9IG1hcC0+ZG93bl9pcnFfZ3JvdXApCisJCQljb250aW51ZTsKKworCQlpZiAoIXVwX2lycV9p bmZvKQorCQkJdXBfaXJxX2luZm8gPSBzdGF0ZS0+aW5mb1ttYXAtPnVwX2lycV9ncm91cF07CisJ CWVsc2UKKwkJCUFTU0VSVCh1cF9pcnFfaW5mbyA9PSBzdGF0ZS0+aW5mb1ttYXAtPnVwX2lycV9n cm91cF0pOworCisJCWJpdCA9IG1hcC0+dXBfaXJxX2JpdDsKKworCQlpZiAodmFsICYgbWFwLT5k b3duX2lycV9iaXRtYXNrKQorCQkJc2V0X2JpdHMgfD0gKDEgPDwgYml0KTsKKwkJZWxzZQorCQkJ Y2xlYXJfYml0cyB8PSAoMSA8PCBiaXQpOworCX0KKworCUFTU0VSVCh1cF9pcnFfaW5mbyk7CisK KwlpZiAodXBfaXJxX2luZm8tPmdyb3VwID09IEdWVF9JUlFfSU5GT19NQVNURVIpIHsKKwkJdTMy IGlzciA9IHVwX2lycV9pbmZvLT5yZWdfYmFzZTsKKwkJX192cmVnKHZndCwgaXNyKSAmPSB+Y2xl YXJfYml0czsKKwkJX192cmVnKHZndCwgaXNyKSB8PSBzZXRfYml0czsKKwl9IGVsc2UgeworCQl1 MzIgaWlyID0gcmVnYmFzZV90b19paXIodXBfaXJxX2luZm8tPnJlZ19iYXNlKTsKKwkJdTMyIGlt ciA9IHJlZ2Jhc2VfdG9faW1yKHVwX2lycV9pbmZvLT5yZWdfYmFzZSk7CisJCV9fdnJlZyh2Z3Qs IGlpcikgfD0gKHNldF9iaXRzICYgfl9fdnJlZyh2Z3QsIGltcikpOworCX0KKworCWlmICh1cF9p cnFfaW5mby0+aGFzX3Vwc3RyZWFtX2lycSkKKwkJdXBkYXRlX3Vwc3RyZWFtX2lycSh2Z3QsIHVw X2lycV9pbmZvKTsKK30KKworc3RhdGljIHZvaWQgZ3Z0X2lycV9tYXBfaW5pdChzdHJ1Y3QgZ3Z0 X2lycV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGd2dF9pcnFfbWFwICptYXA7CisJc3RydWN0 IGd2dF9pcnFfaW5mbyAqdXBfaW5mbywgKmRvd25faW5mbzsKKwlpbnQgdXBfYml0OworCisJZm9y IChtYXAgPSBzdGF0ZS0+aXJxX21hcDsgbWFwLT51cF9pcnFfYml0ICE9IC0xOyBtYXArKykgewor CQl1cF9pbmZvID0gc3RhdGUtPmluZm9bbWFwLT51cF9pcnFfZ3JvdXBdOworCQl1cF9iaXQgPSBt YXAtPnVwX2lycV9iaXQ7CisJCWRvd25faW5mbyA9IHN0YXRlLT5pbmZvW21hcC0+ZG93bl9pcnFf Z3JvdXBdOworCisJCXNldF9iaXQodXBfYml0LCB1cF9pbmZvLT5kb3duc3RyZWFtX2lycV9iaXRt YXApOworCQlkb3duX2luZm8tPmhhc191cHN0cmVhbV9pcnEgPSB0cnVlOworCisJCWd2dF9kYmdf aXJxKCJpcnEgbWFwIFt1cHN0cmVhbV0gZ3JvdXA6ICVkLCBiaXQ6ICVkIC0+IFtkb3duc3RyZWFt XSBncm91cDogJWQsIGJpdG1hc2s6IDB4JXgiLAorCQkJdXBfaW5mby0+Z3JvdXAsIHVwX2JpdCwg ZG93bl9pbmZvLT5ncm91cCwgbWFwLT5kb3duX2lycV9iaXRtYXNrKTsKKwl9Cit9CisKKy8qID09 PT09PT09PT09PT09PT09PT09PT09dkV2ZW50IGluamVjdGlvbj09PT09PT09PT09PT09PT09PT09 PSAqLworc3RhdGljIGludCBndnRfaW5qZWN0X3ZpcnR1YWxfaW50ZXJydXB0KHN0cnVjdCB2Z3Rf ZGV2aWNlICp2Z3QpCit7CisJaHlwZXJ2aXNvcl9pbmplY3RfbXNpKHZndCk7CisKKwl2Z3QtPnN0 YXQuaXJxX251bSsrOworCXZndC0+c3RhdC5sYXN0X2luamVjdGlvbiA9IGdldF9jeWNsZXMoKTsK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHJvcGFnYXRlX2V2ZW50KHN0cnVjdCBndnRf aXJxX3N0YXRlICpzdGF0ZSwKKwllbnVtIGd2dF9ldmVudF90eXBlIGV2ZW50LCBzdHJ1Y3Qgdmd0 X2RldmljZSAqdmd0KQoreworCWludCBiaXQ7CisJc3RydWN0IGd2dF9pcnFfaW5mbyAqaW5mbzsK Kwl1bnNpZ25lZCBpbnQgcmVnX2Jhc2U7CisKKwlpbmZvID0gZ3Z0X2dldF9pcnFfaW5mbyhzdGF0 ZSwgZXZlbnQpOworCWlmICghaW5mbykgeworCQlndnRfZXJyKCJJUlEoJWQpOiB2aXJ0LWluamVj dDogbm8gaXJxIHJlZyBpbmZvISEhIiwKKwkJCXZndC0+dm1faWQpOworCQlyZXR1cm47CisJfQor CisJcmVnX2Jhc2UgPSBpbmZvLT5yZWdfYmFzZTsKKwliaXQgPSBzdGF0ZS0+ZXZlbnRzW2V2ZW50 XS5iaXQ7CisKKwlpZiAoIXRlc3RfYml0KGJpdCwgKHZvaWQqKSZfX3ZyZWcodmd0LCByZWdiYXNl X3RvX2ltcihyZWdfYmFzZSkpKSkgeworCQlndnRfZGJnX2lycSgiSVJROiBzZXQgYml0ICglZCkg Zm9yICglcykgZm9yIFZNICglZCkiLAorCQkJYml0LCBndnRfaXJxX25hbWVbZXZlbnRdLCB2Z3Qt PnZtX2lkKTsKKwkJc2V0X2JpdChiaXQsICh2b2lkKikmX192cmVnKHZndCwgcmVnYmFzZV90b19p aXIocmVnX2Jhc2UpKSk7CisJfQorfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PXZFdmVu dCBIYW5kbGVycz09PT09PT09PT09PT09PT09PT09PSAqLworc3RhdGljIHZvaWQgaGFuZGxlX2Rl ZmF1bHRfZXZlbnRfdmlydChzdHJ1Y3QgZ3Z0X2lycV9zdGF0ZSAqc3RhdGUsCisJZW51bSBndnRf ZXZlbnRfdHlwZSBldmVudCwgc3RydWN0IHZndF9kZXZpY2UgKnZndCkKK3sKKwlpZiAoIWd2dF9p cnFfd2Fybl9vbmNlW3ZndC0+aWRdW2V2ZW50XSkgeworCQlndnRfaW5mbygiSVJROiBWTSglZCkg cmVjZWl2ZSBldmVudCAlZCAoJXMpIiwKKwkJCXZndC0+dm1faWQsIGV2ZW50LCBndnRfaXJxX25h bWVbZXZlbnRdKTsKKwkJZ3Z0X2lycV93YXJuX29uY2Vbdmd0LT5pZF1bZXZlbnRdID0gMTsKKwl9 CisJcHJvcGFnYXRlX2V2ZW50KHN0YXRlLCBldmVudCwgdmd0KTsKKwl2Z3QtPnN0YXQuZXZlbnRz W2V2ZW50XSsrOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT1HRU4gc3BlY2lmaWMgbG9n aWM9PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogR0VOOCBpbnRlcnJ1cHQgcm91dGluZXMu ICovCisKKyNkZWZpbmUgREVGSU5FX0dWVF9HRU44X0dWVF9JUlFfSU5GTyhyZWduYW1lLCByZWdi YXNlKSBcCisgICAgICAgc3RhdGljIHN0cnVjdCBndnRfaXJxX2luZm8gZ2VuOF8jI3JlZ25hbWUj I19pbmZvID0geyBcCisgICAgICAgICAgICAgICAubmFtZSA9ICNyZWduYW1lIi1JUlEiLCBcCisg ICAgICAgICAgICAgICAucmVnX2Jhc2UgPSByZWdiYXNlLCBcCisgICAgICAgICAgICAgICAuYml0 X3RvX2V2ZW50ID0ge1swIC4uLiBHVlRfSVJRX0JJVFdJRFRILTFdID0gR1ZUX0VWRU5UX1JFU0VS VkVEfSwgXAorICAgICAgIH07CisKK0RFRklORV9HVlRfR0VOOF9HVlRfSVJRX0lORk8oZ3QwLCBf R0VOOF9HVF9JU1IoMCkpOworREVGSU5FX0dWVF9HRU44X0dWVF9JUlFfSU5GTyhndDEsIF9HRU44 X0dUX0lTUigxKSk7CitERUZJTkVfR1ZUX0dFTjhfR1ZUX0lSUV9JTkZPKGd0MiwgX0dFTjhfR1Rf SVNSKDIpKTsKK0RFRklORV9HVlRfR0VOOF9HVlRfSVJRX0lORk8oZ3QzLCBfR0VOOF9HVF9JU1Io MykpOworREVGSU5FX0dWVF9HRU44X0dWVF9JUlFfSU5GTyhkZV9waXBlX2EsIF9HRU44X0RFX1BJ UEVfSVNSKFBJUEVfQSkpOworREVGSU5FX0dWVF9HRU44X0dWVF9JUlFfSU5GTyhkZV9waXBlX2Is IF9HRU44X0RFX1BJUEVfSVNSKFBJUEVfQikpOworREVGSU5FX0dWVF9HRU44X0dWVF9JUlFfSU5G TyhkZV9waXBlX2MsIF9HRU44X0RFX1BJUEVfSVNSKFBJUEVfQykpOworREVGSU5FX0dWVF9HRU44 X0dWVF9JUlFfSU5GTyhkZV9wb3J0LCBfR0VOOF9ERV9QT1JUX0lTUik7CitERUZJTkVfR1ZUX0dF TjhfR1ZUX0lSUV9JTkZPKGRlX21pc2MsIF9HRU44X0RFX01JU0NfSVNSKTsKK0RFRklORV9HVlRf R0VOOF9HVlRfSVJRX0lORk8ocGN1LCBfR0VOOF9QQ1VfSVNSKTsKK0RFRklORV9HVlRfR0VOOF9H VlRfSVJRX0lORk8obWFzdGVyLCBfR0VOOF9NQVNURVJfSVJRKTsKKworc3RhdGljIHN0cnVjdCBn dnRfaXJxX2luZm8gZ3Z0X2Jhc2VfcGNoX2luZm8gPSB7CisgICAgICAgIC5uYW1lID0gIlBDSC1J UlEiLAorICAgICAgICAucmVnX2Jhc2UgPSBfU0RFSVNSLAorICAgICAgICAuYml0X3RvX2V2ZW50 ID0ge1swIC4uLiBHVlRfSVJRX0JJVFdJRFRILTFdID0gR1ZUX0VWRU5UX1JFU0VSVkVEfSwKK307 CisKK3N0YXRpYyB2b2lkIGdlbjhfY2hlY2tfcGVuZGluZ19pcnEoc3RydWN0IHZndF9kZXZpY2Ug KnZndCkKK3sKKwlzdHJ1Y3QgZ3Z0X2lycV9zdGF0ZSAqc3RhdGUgPSAmdmd0LT5wZGV2LT5pcnFf c3RhdGU7CisJaW50IGk7CisKKwlpZiAoIShfX3ZyZWcodmd0LCBfR0VOOF9NQVNURVJfSVJRKSAm CisJCQkJR0VOOF9NQVNURVJfSVJRX0NPTlRST0wpKQorCQlyZXR1cm47CisKKwlmb3JfZWFjaF9z ZXRfYml0KGksIHN0YXRlLT5pcnFfaW5mb19iaXRtYXAsIEdWVF9JUlFfSU5GT19NQVgpIHsKKwkJ c3RydWN0IGd2dF9pcnFfaW5mbyAqaW5mbyA9IHN0YXRlLT5pbmZvW2ldOworCisJCWlmICghaW5m by0+aGFzX3Vwc3RyZWFtX2lycSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoX192cmVnKHZndCwg cmVnYmFzZV90b19paXIoaW5mby0+cmVnX2Jhc2UpKQorCQkJCQkmIF9fdnJlZyh2Z3QsIHJlZ2Jh c2VfdG9faWVyKGluZm8tPnJlZ19iYXNlKSkpKQorCQkJdXBkYXRlX3Vwc3RyZWFtX2lycSh2Z3Qs IGluZm8pOworCX0KKworCWlmIChfX3ZyZWcodmd0LCBfR0VOOF9NQVNURVJfSVJRKSAmIH5HRU44 X01BU1RFUl9JUlFfQ09OVFJPTCkKKwkJZ3Z0X2luamVjdF92aXJ0dWFsX2ludGVycnVwdCh2Z3Qp OworfQorCitzdGF0aWMgdm9pZCBnZW44X2luaXRfaXJxKAorCQlzdHJ1Y3QgZ3Z0X2lycV9zdGF0 ZSAqc3RhdGUpCit7CisJc3RydWN0IHBndF9kZXZpY2UgKnBkZXYgPSBndnRfaXJxX3N0YXRlX3Rv X3BkZXYoc3RhdGUpOworCisjZGVmaW5lIFNFVF9CSVRfSU5GTyhzLCBiLCBlLCBpKQkJXAorCWRv IHsJCQkJCVwKKwkJcy0+ZXZlbnRzW2VdLmJpdCA9IGI7CQlcCisJCXMtPmV2ZW50c1tlXS5pbmZv ID0gcy0+aW5mb1tpXTsJXAorCQlzLT5pbmZvW2ldLT5iaXRfdG9fZXZlbnRbYl0gPSBlO1wKKwl9 IHdoaWxlICgwKTsKKworI2RlZmluZSBTRVRfSVJRX0dST1VQKHMsIGcsIGkpIFwKKwlkbyB7IFwK KwkJcy0+aW5mb1tnXSA9IGk7IFwKKwkJKGkpLT5ncm91cCA9IGc7IFwKKwkJc2V0X2JpdChnLCBz LT5pcnFfaW5mb19iaXRtYXApOyBcCisJfSB3aGlsZSAoMCk7CisKKwlTRVRfSVJRX0dST1VQKHN0 YXRlLCBHVlRfSVJRX0lORk9fTUFTVEVSLCAmZ2VuOF9tYXN0ZXJfaW5mbyk7CisJU0VUX0lSUV9H Uk9VUChzdGF0ZSwgR1ZUX0lSUV9JTkZPX0dUMCwgJmdlbjhfZ3QwX2luZm8pOworCVNFVF9JUlFf R1JPVVAoc3RhdGUsIEdWVF9JUlFfSU5GT19HVDEsICZnZW44X2d0MV9pbmZvKTsKKwlTRVRfSVJR X0dST1VQKHN0YXRlLCBHVlRfSVJRX0lORk9fR1QyLCAmZ2VuOF9ndDJfaW5mbyk7CisJU0VUX0lS UV9HUk9VUChzdGF0ZSwgR1ZUX0lSUV9JTkZPX0dUMywgJmdlbjhfZ3QzX2luZm8pOworCVNFVF9J UlFfR1JPVVAoc3RhdGUsIEdWVF9JUlFfSU5GT19ERV9QSVBFX0EsICZnZW44X2RlX3BpcGVfYV9p bmZvKTsKKwlTRVRfSVJRX0dST1VQKHN0YXRlLCBHVlRfSVJRX0lORk9fREVfUElQRV9CLCAmZ2Vu OF9kZV9waXBlX2JfaW5mbyk7CisJU0VUX0lSUV9HUk9VUChzdGF0ZSwgR1ZUX0lSUV9JTkZPX0RF X1BJUEVfQywgJmdlbjhfZGVfcGlwZV9jX2luZm8pOworCVNFVF9JUlFfR1JPVVAoc3RhdGUsIEdW VF9JUlFfSU5GT19ERV9QT1JULCAmZ2VuOF9kZV9wb3J0X2luZm8pOworCVNFVF9JUlFfR1JPVVAo c3RhdGUsIEdWVF9JUlFfSU5GT19ERV9NSVNDLCAmZ2VuOF9kZV9taXNjX2luZm8pOworCVNFVF9J UlFfR1JPVVAoc3RhdGUsIEdWVF9JUlFfSU5GT19QQ1UsICZnZW44X3BjdV9pbmZvKTsKKwlTRVRf SVJRX0dST1VQKHN0YXRlLCBHVlRfSVJRX0lORk9fUENILCAmZ3Z0X2Jhc2VfcGNoX2luZm8pOwor CisJLyogR0VOOCBsZXZlbCAyIGludGVycnVwdHMuICovCisKKwkvKiBHRU44IGludGVycnVwdCBH VDAgZXZlbnRzICovCisJU0VUX0JJVF9JTkZPKHN0YXRlLCAwLCBSQ1NfTUlfVVNFUl9JTlRFUlJV UFQsIEdWVF9JUlFfSU5GT19HVDApOworCVNFVF9CSVRfSU5GTyhzdGF0ZSwgNCwgUkNTX1BJUEVf Q09OVFJPTCwgR1ZUX0lSUV9JTkZPX0dUMCk7CisJU0VUX0JJVF9JTkZPKHN0YXRlLCA4LCBSQ1Nf QVNfQ09OVEVYVF9TV0lUQ0gsIEdWVF9JUlFfSU5GT19HVDApOworCisJU0VUX0JJVF9JTkZPKHN0 YXRlLCAxNiwgQkNTX01JX1VTRVJfSU5URVJSVVBULCBHVlRfSVJRX0lORk9fR1QwKTsKKwlTRVRf QklUX0lORk8oc3RhdGUsIDIwLCBCQ1NfTUlfRkxVU0hfRFcsIEdWVF9JUlFfSU5GT19HVDApOwor CVNFVF9CSVRfSU5GTyhzdGF0ZSwgMjQsIEJDU19BU19DT05URVhUX1NXSVRDSCwgR1ZUX0lSUV9J TkZPX0dUMCk7CisKKwkvKiBHRU44IGludGVycnVwdCBHVDEgZXZlbnRzICovCisJU0VUX0JJVF9J TkZPKHN0YXRlLCAwLCBWQ1NfTUlfVVNFUl9JTlRFUlJVUFQsIEdWVF9JUlFfSU5GT19HVDEpOwor CVNFVF9CSVRfSU5GTyhzdGF0ZSwgNCwgVkNTX01JX0ZMVVNIX0RXLCBHVlRfSVJRX0lORk9fR1Qx KTsKKwlTRVRfQklUX0lORk8oc3RhdGUsIDgsIFZDU19BU19DT05URVhUX1NXSVRDSCwgR1ZUX0lS UV9JTkZPX0dUMSk7CisKKwlpZiAoSVNfQkRXX0dUMyhwZGV2LT5kZXZfcHJpdikpIHsKKwkJU0VU X0JJVF9JTkZPKHN0YXRlLCAxNiwgVkNTMl9NSV9VU0VSX0lOVEVSUlVQVCwgR1ZUX0lSUV9JTkZP X0dUMSk7CisJCVNFVF9CSVRfSU5GTyhzdGF0ZSwgMjAsIFZDUzJfTUlfRkxVU0hfRFcsIEdWVF9J UlFfSU5GT19HVDEpOworCQlTRVRfQklUX0lORk8oc3RhdGUsIDI0LCBWQ1MyX0FTX0NPTlRFWFRf U1dJVENILCBHVlRfSVJRX0lORk9fR1QxKTsKKwl9CisKKwkvKiBHRU44IGludGVycnVwdCBHVDMg ZXZlbnRzICovCisJU0VUX0JJVF9JTkZPKHN0YXRlLCAwLCBWRUNTX01JX1VTRVJfSU5URVJSVVBU LCBHVlRfSVJRX0lORk9fR1QzKTsKKwlTRVRfQklUX0lORk8oc3RhdGUsIDQsIFZFQ1NfTUlfRkxV U0hfRFcsIEdWVF9JUlFfSU5GT19HVDMpOworCVNFVF9CSVRfSU5GTyhzdGF0ZSwgOCwgVkVDU19B U19DT05URVhUX1NXSVRDSCwgR1ZUX0lSUV9JTkZPX0dUMyk7CisKKwlTRVRfQklUX0lORk8oc3Rh dGUsIDAsIFBJUEVfQV9WQkxBTkssIEdWVF9JUlFfSU5GT19ERV9QSVBFX0EpOworCVNFVF9CSVRf SU5GTyhzdGF0ZSwgNCwgUFJJTUFSWV9BX0ZMSVBfRE9ORSwgR1ZUX0lSUV9JTkZPX0RFX1BJUEVf QSk7CisJU0VUX0JJVF9JTkZPKHN0YXRlLCA1LCBTUFJJVEVfQV9GTElQX0RPTkUsIEdWVF9JUlFf SU5GT19ERV9QSVBFX0EpOworCisJU0VUX0JJVF9JTkZPKHN0YXRlLCAwLCBQSVBFX0JfVkJMQU5L LCBHVlRfSVJRX0lORk9fREVfUElQRV9CKTsKKwlTRVRfQklUX0lORk8oc3RhdGUsIDQsIFBSSU1B UllfQl9GTElQX0RPTkUsIEdWVF9JUlFfSU5GT19ERV9QSVBFX0IpOworCVNFVF9CSVRfSU5GTyhz dGF0ZSwgNSwgU1BSSVRFX0JfRkxJUF9ET05FLCBHVlRfSVJRX0lORk9fREVfUElQRV9CKTsKKwor CVNFVF9CSVRfSU5GTyhzdGF0ZSwgMCwgUElQRV9DX1ZCTEFOSywgR1ZUX0lSUV9JTkZPX0RFX1BJ UEVfQyk7CisJU0VUX0JJVF9JTkZPKHN0YXRlLCA0LCBQUklNQVJZX0NfRkxJUF9ET05FLCBHVlRf SVJRX0lORk9fREVfUElQRV9DKTsKKwlTRVRfQklUX0lORk8oc3RhdGUsIDUsIFNQUklURV9DX0ZM SVBfRE9ORSwgR1ZUX0lSUV9JTkZPX0RFX1BJUEVfQyk7CisKKwkvKiBHRU44IGludGVycnVwdCBE RSBQT1JUIGV2ZW50cyAqLworCVNFVF9CSVRfSU5GTyhzdGF0ZSwgMCwgQVVYX0NIQU5ORUxfQSwg R1ZUX0lSUV9JTkZPX0RFX1BPUlQpOworCVNFVF9CSVRfSU5GTyhzdGF0ZSwgMywgRFBfQV9IT1RQ TFVHLCBHVlRfSVJRX0lORk9fREVfUE9SVCk7CisKKwkvKiBHRU44IGludGVycnVwdCBERSBNSVND IGV2ZW50cyAqLworCVNFVF9CSVRfSU5GTyhzdGF0ZSwgMCwgR1NFLCBHVlRfSVJRX0lORk9fREVf TUlTQyk7CisKKwkvKiBQQ0ggZXZlbnRzICovCisJU0VUX0JJVF9JTkZPKHN0YXRlLCAxNywgR01C VVMsIEdWVF9JUlFfSU5GT19QQ0gpOworCVNFVF9CSVRfSU5GTyhzdGF0ZSwgMTksIENSVF9IT1RQ TFVHLCBHVlRfSVJRX0lORk9fUENIKTsKKwlTRVRfQklUX0lORk8oc3RhdGUsIDIxLCBEUF9CX0hP VFBMVUcsIEdWVF9JUlFfSU5GT19QQ0gpOworCVNFVF9CSVRfSU5GTyhzdGF0ZSwgMjIsIERQX0Nf SE9UUExVRywgR1ZUX0lSUV9JTkZPX1BDSCk7CisJU0VUX0JJVF9JTkZPKHN0YXRlLCAyMywgRFBf RF9IT1RQTFVHLCBHVlRfSVJRX0lORk9fUENIKTsKKwlTRVRfQklUX0lORk8oc3RhdGUsIDI1LCBB VVhfQ0hFTk5FTF9CLCBHVlRfSVJRX0lORk9fUENIKTsKKwlTRVRfQklUX0lORk8oc3RhdGUsIDI2 LCBBVVhfQ0hFTk5FTF9DLCBHVlRfSVJRX0lORk9fUENIKTsKKwlTRVRfQklUX0lORk8oc3RhdGUs IDI3LCBBVVhfQ0hFTk5FTF9ELCBHVlRfSVJRX0lORk9fUENIKTsKKworCS8qIEdFTjggaW50ZXJy dXB0IFBDVSBldmVudHMgKi8KKwlTRVRfQklUX0lORk8oc3RhdGUsIDI0LCBQQ1VfVEhFUk1BTCwg R1ZUX0lSUV9JTkZPX1BDVSk7CisJU0VUX0JJVF9JTkZPKHN0YXRlLCAyNSwgUENVX1BDT0RFMkRS SVZFUl9NQUlMQk9YLCBHVlRfSVJRX0lORk9fUENVKTsKK30KKworc3RydWN0IGd2dF9pcnFfb3Bz IGdlbjhfaXJxX29wcyA9IHsKKwkuaW5pdF9pcnEgPSBnZW44X2luaXRfaXJxLAorCS5jaGVja19w ZW5kaW5nX2lycSA9IGdlbjhfY2hlY2tfcGVuZGluZ19pcnEsCit9OworCisvKiA9PT09PT09PT09 PT09PT09PT09PT09Y29tbW9uIGV2ZW50IGxvZ2ljPT09PT09PT09PT09PT09PT09PT09PSAqLwor CisvKgorICogVHJpZ2dlciBhIHZpcnR1YWwgZXZlbnQgd2hpY2ggY29tZXMgZnJvbSBvdGhlciBy ZXF1ZXN0cyBsaWtlIGhvdHBsdWcgYWdlbnQKKyAqIGluc3RlYWQgb2YgZnJvbSBwaXJxLgorICov Cit2b2lkIGd2dF90cmlnZ2VyX3ZpcnR1YWxfZXZlbnQoc3RydWN0IHZndF9kZXZpY2UgKnZndCwK KwllbnVtIGd2dF9ldmVudF90eXBlIGV2ZW50KQoreworCXN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2 ID0gdmd0LT5wZGV2OworCXN0cnVjdCBndnRfaXJxX3N0YXRlICpzdGF0ZSA9ICZwZGV2LT5pcnFf c3RhdGU7CisJZ3Z0X2V2ZW50X3ZpcnRfaGFuZGxlcl90IGhhbmRsZXI7CisJc3RydWN0IGd2dF9p cnFfb3BzICpvcHMgPSBndnRfZ2V0X2lycV9vcHMocGRldik7CisKKwloYW5kbGVyID0gZ3Z0X2dl dF9ldmVudF92aXJ0X2hhbmRsZXIoc3RhdGUsIGV2ZW50KTsKKwlBU1NFUlQoaGFuZGxlcik7CisK KwloYW5kbGVyKHN0YXRlLCBldmVudCwgdmd0KTsKKworCW9wcy0+Y2hlY2tfcGVuZGluZ19pcnEo dmd0KTsKK30KKworLyogZGVmYXVsdCBoYW5kbGVyIHdpbGwgYmUgaW52b2tlZCwgaWYgbm90IGV4 cGxpY2l0bHkgc3BlY2lmaWVkIGhlcmUgKi8KK3N0YXRpYyB2b2lkIGd2dF9pbml0X2V2ZW50cygK KwlzdHJ1Y3QgZ3Z0X2lycV9zdGF0ZSAqc3RhdGUpCit7CisJaW50IGk7CisKKyNkZWZpbmUgU0VU X1BPTElDWV9BTEwoaCwgZSkJXAorCSgoaCktPmV2ZW50c1tlXS5wb2xpY3kgPSBHVlRfRVZFTlRf RldfQUxMKQorI2RlZmluZSBTRVRfUE9MSUNZX05PTkUoaCwgZSkJXAorCSgoaCktPmV2ZW50c1tl XS5wb2xpY3kgPSBHVlRfRVZFTlRfRldfTk9ORSkKKyNkZWZpbmUgU0VUX1ZfSEFORExFUihzLCBl LCBoKQlcCisJKChzKS0+ZXZlbnRzW2VdLnZfaGFuZGxlciA9IGgpCisKKwlmb3IgKGkgPSAwOyBp IDwgR1ZUX0VWRU5UX01BWDsgaSsrKSB7CisJCXN0YXRlLT5ldmVudHNbaV0uaW5mbyA9IE5VTEw7 CisJCS8qIERlZmF1bHQgZm9yd2FyZGluZyB0byBhbGwgVk1zIChyZW5kZXIgYW5kIG1vc3QgZGlz cGxheSBldmVudHMpICovCisJCVNFVF9QT0xJQ1lfQUxMKHN0YXRlLCBpKTsKKwkJc3RhdGUtPmV2 ZW50c1tpXS52X2hhbmRsZXIgPSBoYW5kbGVfZGVmYXVsdF9ldmVudF92aXJ0OzsKKwl9Cit9CisK Ky8qCisgKiBEbyBpbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24gZm9yIHZHVCBkcml2ZXIKKyAqLwor Ym9vbCBndnRfaXJxX2luaXQoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGd2 dF9pcnFfc3RhdGUgKnN0YXRlID0gJnBkZXYtPmlycV9zdGF0ZTsKKworCWd2dF9kYmdfY29yZSgi aW5pdCBpcnEgZnJhbWV3b3JrIik7CisKKwlpZiAoSVNfQlJPQURXRUxMKHBkZXYtPmRldl9wcml2 KSkgeworCQlzdGF0ZS0+b3BzID0gJmdlbjhfaXJxX29wczsKKwkJc3RhdGUtPmlycV9tYXAgPSBn ZW44X2lycV9tYXA7CisJfSBlbHNlIHsKKwkJZ3Z0X2VycigiVW5zdXBwb3J0ZWQgZGV2aWNlIik7 CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBjb21tb24gZXZlbnQgaW5pdGlhbGl6YXRpb24g Ki8KKwlndnRfaW5pdF9ldmVudHMoc3RhdGUpOworCisJLyogZ2VuIHNwZWNpZmljIGluaXRpYWxp emF0aW9uICovCisJc3RhdGUtPm9wcy0+aW5pdF9pcnEoc3RhdGUpOworCisJZ3Z0X2lycV9tYXBf aW5pdChzdGF0ZSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBndnRfaXJxX2V4aXQoc3Ry dWN0IHBndF9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuOworfQorCit2b2lkIGd2dF9pbmplY3Rf ZmxpcF9kb25lKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIGludCBwaXBlKQoreworCWVudW0gZ3Z0 X2V2ZW50X3R5cGUgZXZlbnQgPSBHVlRfRVZFTlRfTUFYOworCisJaWYgKHBpcGUgPT0gUElQRV9B KSB7CisJCWV2ZW50ID0gUFJJTUFSWV9BX0ZMSVBfRE9ORTsKKwl9IGVsc2UgaWYgKHBpcGUgPT0g UElQRV9CKSB7CisJCWV2ZW50ID0gUFJJTUFSWV9CX0ZMSVBfRE9ORTsKKwl9IGVsc2UgaWYgKHBp cGUgPT0gUElQRV9DKSB7CisJCWV2ZW50ID0gUFJJTUFSWV9DX0ZMSVBfRE9ORTsKKwl9CisKKwlp ZiAoZXZlbnQgIT0gR1ZUX0VWRU5UX01BWCkKKwkJZ3Z0X3RyaWdnZXJfdmlydHVhbF9ldmVudCh2 Z3QsIGV2ZW50KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9pbnRl cnJ1cHQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9pbnRlcnJ1cHQuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWU4NWI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2ludGVycnVwdC5oCkBAIC0wLDAgKzEsMjMyIEBACisvKgor ICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hh bGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisg Ki8KKworI2lmbmRlZiBfR1ZUX0lOVEVSUlVQVF9IXworI2RlZmluZSBfR1ZUX0lOVEVSUlVQVF9I XworCitlbnVtIGd2dF9ldmVudF90eXBlIHsKKwkvLyBHVAorCVJDU19NSV9VU0VSX0lOVEVSUlVQ VCA9IDAsCisJUkNTX0RFQlVHLAorCVJDU19NTUlPX1NZTkNfRkxVU0gsCisJUkNTX0NNRF9TVFJF QU1FUl9FUlIsCisJUkNTX1BJUEVfQ09OVFJPTCwKKwlSQ1NfTDNfUEFSSVRZX0VSUiwJCS8qIElW QiAqLworCVJDU19XQVRDSERPR19FWENFRURFRCwKKwlSQ1NfUEFHRV9ESVJFQ1RPUllfRkFVTFQs CisJUkNTX0FTX0NPTlRFWFRfU1dJVENILAorCVJDU19NT05JVE9SX0JVRkZfSEFMRl9GVUxMLAkv KiBJVkIgKi8KKworCVZDU19NSV9VU0VSX0lOVEVSUlVQVCwKKwlWQ1NfTU1JT19TWU5DX0ZMVVNI LAorCVZDU19DTURfU1RSRUFNRVJfRVJSLAorCVZDU19NSV9GTFVTSF9EVywKKwlWQ1NfV0FUQ0hE T0dfRVhDRUVERUQsCisJVkNTX1BBR0VfRElSRUNUT1JZX0ZBVUxULAorCVZDU19BU19DT05URVhU X1NXSVRDSCwKKworCVZDUzJfTUlfVVNFUl9JTlRFUlJVUFQsCisJVkNTMl9NSV9GTFVTSF9EVywK KwlWQ1MyX0FTX0NPTlRFWFRfU1dJVENILAorCisJQkNTX01JX1VTRVJfSU5URVJSVVBULAorCUJD U19NTUlPX1NZTkNfRkxVU0gsCisJQkNTX0NNRF9TVFJFQU1FUl9FUlIsCisJQkNTX01JX0ZMVVNI X0RXLAorCUJDU19QQUdFX0RJUkVDVE9SWV9GQVVMVCwKKwlCQ1NfQVNfQ09OVEVYVF9TV0lUQ0gs CisKKwlWRUNTX01JX1VTRVJfSU5URVJSVVBULAorCVZFQ1NfTUlfRkxVU0hfRFcsCisJVkVDU19B U19DT05URVhUX1NXSVRDSCwKKworCS8vIERJU1BMQVkKKwlQSVBFX0FfRklGT19VTkRFUlJVTiwJ LyogVGhpcyBpcyBhbiBhY3RpdmUgaGlnaCBsZXZlbCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBQ aXBlIEEgRklGTyB1bmRlcnJ1biAqLworCVBJUEVfQl9GSUZPX1VOREVSUlVOLAkvKiBUaGlzIGlz IGFuIGFjdGl2ZSBoaWdoIGxldmVsIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIFBpcGUgQiBGSUZP IHVuZGVycnVuICovCisJUElQRV9BX0NSQ19FUlIsCS8qIFRoaXMgaXMgYW4gYWN0aXZlIGhpZ2gg cHVsc2Ugb24gdGhlIFBpcGUgQSBDUkMgZXJyb3IgKi8KKwlQSVBFX0JfQ1JDX0VSUiwJLyogVGhp cyBpcyBhbiBhY3RpdmUgaGlnaCBwdWxzZSBvbiB0aGUgUGlwZSBCIENSQyBlcnJvciAqLworCVBJ UEVfQV9DUkNfRE9ORSwJLyogVGhpcyBpcyBhbiBhY3RpdmUgaGlnaCBwdWxzZSBvbiB0aGUgUGlw ZSBBIENSQyBkb25lICovCisJUElQRV9CX0NSQ19ET05FLAkvKiBUaGlzIGlzIGFuIGFjdGl2ZSBo aWdoIHB1bHNlIG9uIHRoZSBQaXBlIEIgQ1JDIGRvbmUgKi8KKwlQSVBFX0FfT0REX0ZJRUxELAkv KiBUaGlzIGlzIGFuIGFjdGl2ZSBoaWdoIGxldmVsIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIFBp cGUgQSBpbnRlcmxhY2VkIG9kZCBmaWVsZCAqLworCVBJUEVfQl9PRERfRklFTEQsCS8qIFRoaXMg aXMgYW4gYWN0aXZlIGhpZ2ggbGV2ZWwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgUGlwZSBCIGlu dGVybGFjZWQgb2RkIGZpZWxkICovCisJUElQRV9BX0VWRU5fRklFTEQsCS8qIFRoaXMgaXMgYW4g YWN0aXZlIGhpZ2ggbGV2ZWwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgUGlwZSBBIGludGVybGFj ZWQgZXZlbiBmaWVsZCAqLworCVBJUEVfQl9FVkVOX0ZJRUxELAkvKiBUaGlzIGlzIGFuIGFjdGl2 ZSBoaWdoIGxldmVsIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIFBpcGUgQiBpbnRlcmxhY2VkIGV2 ZW4gZmllbGQgKi8KKwlQSVBFX0FfTElORV9DT01QQVJFLAkvKiBUaGlzIGlzIGFuIGFjdGl2ZSBo aWdoIGxldmVsIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHNlbGVjdGVkIFBpcGUgQSBzY2FuIGxp bmVzICovCisJUElQRV9CX0xJTkVfQ09NUEFSRSwJLyogVGhpcyBpcyBhbiBhY3RpdmUgaGlnaCBs ZXZlbCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBzZWxlY3RlZCBQaXBlIEIgc2NhbiBsaW5lcyAq LworCVBJUEVfQ19MSU5FX0NPTVBBUkUsCS8qIFRoaXMgaXMgYW4gYWN0aXZlIGhpZ2ggbGV2ZWwg Zm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgc2VsZWN0ZWQgUGlwZSBDIHNjYW4gbGluZXMgKi8KKwlQ SVBFX0FfVkJMQU5LLAkvKiBUaGlzIGlzIGFuIGFjdGl2ZSBoaWdoIGxldmVsIGZvciB0aGUgZHVy YXRpb24gb2YgdGhlIFBpcGUgQSB2ZXJ0aWNhbCBibGFuayAqLworCVBJUEVfQl9WQkxBTkssCS8q IFRoaXMgaXMgYW4gYWN0aXZlIGhpZ2ggbGV2ZWwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgUGlw ZSBCIHZlcnRpY2FsIGJsYW5rICovCisJUElQRV9DX1ZCTEFOSywJLyogVGhpcyBpcyBhbiBhY3Rp dmUgaGlnaCBsZXZlbCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBQaXBlIEMgdmVydGljYWwgYmxh bmsgKi8KKwlQSVBFX0FfVlNZTkMsCS8qIFRoaXMgaXMgYW4gYWN0aXZlIGhpZ2ggbGV2ZWwgZm9y IHRoZSBkdXJhdGlvbiBvZiB0aGUgUGlwZSBBIHZlcnRpY2FsIHN5bmMgKi8KKwlQSVBFX0JfVlNZ TkMsCS8qIFRoaXMgaXMgYW4gYWN0aXZlIGhpZ2ggbGV2ZWwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0 aGUgUGlwZSBCIHZlcnRpY2FsIHN5bmMgKi8KKwlQSVBFX0NfVlNZTkMsCS8qIFRoaXMgaXMgYW4g YWN0aXZlIGhpZ2ggbGV2ZWwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgUGlwZSBDIHZlcnRpY2Fs IHN5bmMgKi8KKwlQUklNQVJZX0FfRkxJUF9ET05FLAkvKiBUaGlzIGlzIGFuIGFjdGl2ZSBoaWdo IHB1bHNlIHdoZW4gYSBwcmltYXJ5IHBsYW5lIEEgZmxpcCBpcyBkb25lICovCisJUFJJTUFSWV9C X0ZMSVBfRE9ORSwJLyogVGhpcyBpcyBhbiBhY3RpdmUgaGlnaCBwdWxzZSB3aGVuIGEgcHJpbWFy eSBwbGFuZSBCIGZsaXAgaXMgZG9uZSAqLworCVBSSU1BUllfQ19GTElQX0RPTkUsCS8qIFRoaXMg aXMgYW4gYWN0aXZlIGhpZ2ggcHVsc2Ugd2hlbiBhIHByaW1hcnkgcGxhbmUgQyBmbGlwIGlzIGRv bmUgKi8KKwlTUFJJVEVfQV9GTElQX0RPTkUsCS8qIFRoaXMgaXMgYW4gYWN0aXZlIGhpZ2ggcHVs c2Ugd2hlbiBhIHNwcml0ZSBwbGFuZSBBIGZsaXAgaXMgZG9uZSAqLworCVNQUklURV9CX0ZMSVBf RE9ORSwJLyogVGhpcyBpcyBhbiBhY3RpdmUgaGlnaCBwdWxzZSB3aGVuIGEgc3ByaXRlIHBsYW5l IEIgZmxpcCBpcyBkb25lICovCisJU1BSSVRFX0NfRkxJUF9ET05FLAkvKiBUaGlzIGlzIGFuIGFj dGl2ZSBoaWdoIHB1bHNlIHdoZW4gYSBzcHJpdGUgcGxhbmUgQyBmbGlwIGlzIGRvbmUgKi8KKwor CVBDVV9USEVSTUFMLAorCVBDVV9QQ09ERTJEUklWRVJfTUFJTEJPWCwKKworCURQU1RfUEhBU0Vf SU4sCS8vIFRoaXMgaXMgYW4gYWN0aXZlIGhpZ2ggcHVsc2Ugb24gdGhlIERQU1QgcGhhc2UgaW4g ZXZlbnQKKwlEUFNUX0hJU1RPR1JBTSwJLy8gVGhpcyBpcyBhbiBhY3RpdmUgaGlnaCBwdWxzZSBv biB0aGUgQVVYIEEgZG9uZSBldmVudC4KKwlHU0UsCisJRFBfQV9IT1RQTFVHLAorCUFVWF9DSEFO TkVMX0EsCS8vIFRoaXMgaXMgYW4gYWN0aXZlIGhpZ2ggcHVsc2Ugb24gdGhlIEFVWCBBIGRvbmUg ZXZlbnQuCisJUEVSRl9DT1VOVEVSLAkvLyBUaGlzIGlzIGFuIGFjdGl2ZSBoaWdoIHB1bHNlIHdo ZW4gdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIgcmVhY2hlcyB0aGUgdGhyZXNob2xkIHZhbHVlIHBy b2dyYW1tZWQgaW4gdGhlIFBlcmZvcm1hbmNlIENvdW50ZXIgU291cmNlIHJlZ2lzdGVyCisJUE9J U09OLAkJLy8gVGhpcyBpcyBhbiBhY3RpdmUgaGlnaCBwdWxzZSBvbiByZWNlaXZpbmcgdGhlIHBv aXNvbiBtZXNzYWdlCisJR1RUX0ZBVUxULAkvLyBUaGlzIGlzIGFuIGFjdGl2ZSBoaWdoIGxldmVs IHdoaWxlIGVpdGhlciBvZiB0aGUgR1RUIEZhdWx0IFN0YXR1cyByZWdpc3RlciBiaXRzIGFyZSBz ZXQKKwlFUlJPUl9JTlRFUlJVUFRfQ09NQklORUQsCisKKwkvLyBQQ0gKKwlGRElfUlhfSU5URVJS VVBUU19UUkFOU0NPREVSX0EsCS8vIFRoaXMgaXMgYW4gYWN0aXZlIGhpZ2ggbGV2ZWwgd2hpbGUg YW55IG9mIHRoZSBGRElfUlhfSVNSIGJpdHMgYXJlIHNldCBmb3IgdHJhbnNjb2RlciBBCisJQVVE SU9fQ1BfQ0hBTkdFX1RSQU5TQ09ERVJfQSwJLy8gVGhpcyBpcyBhbiBhY3RpdmUgaGlnaCBsZXZl bCB3aGlsZSBhbnkgb2YgdGhlIEZESV9SWF9JU1IgYml0cyBhcmUgc2V0IGZvciB0cmFuc2NvZGVy IEEKKwlBVURJT19DUF9SRVFVRVNUX1RSQU5TQ09ERVJfQSwJLy8gVGhpcyBpcyBhbiBhY3RpdmUg aGlnaCBsZXZlbCBpbmRpY2F0aW5nIGNvbnRlbnQgcHJvdGVjdGlvbiBpcyByZXF1ZXN0ZWQgYnkg YXVkaW8gYXphbGlhIHZlcmIgcHJvZ3JhbW1pbmcgZm9yIHRyYW5zY29kZXIgQQorCUZESV9SWF9J TlRFUlJVUFRTX1RSQU5TQ09ERVJfQiwKKwlBVURJT19DUF9DSEFOR0VfVFJBTlNDT0RFUl9CLAor CUFVRElPX0NQX1JFUVVFU1RfVFJBTlNDT0RFUl9CLAorCUZESV9SWF9JTlRFUlJVUFRTX1RSQU5T Q09ERVJfQywKKwlBVURJT19DUF9DSEFOR0VfVFJBTlNDT0RFUl9DLAorCUFVRElPX0NQX1JFUVVF U1RfVFJBTlNDT0RFUl9DLAorCUVSUl9BTkRfREJHLAorCUdNQlVTLAorCVNEVk9fQl9IT1RQTFVH LAorCUNSVF9IT1RQTFVHLAorCURQX0JfSE9UUExVRywKKwlEUF9DX0hPVFBMVUcsCisJRFBfRF9I T1RQTFVHLAorCUFVWF9DSEVOTkVMX0IsCisJQVVYX0NIRU5ORUxfQywKKwlBVVhfQ0hFTk5FTF9E LAorCUFVRElPX1BPV0VSX1NUQVRFX0NIQU5HRV9CLAorCUFVRElPX1BPV0VSX1NUQVRFX0NIQU5H RV9DLAorCUFVRElPX1BPV0VSX1NUQVRFX0NIQU5HRV9ELAorCisJR1ZUX0VWRU5UX1JFU0VSVkVE LAorCUdWVF9FVkVOVF9NQVgsCit9OworCitzdHJ1Y3QgZ3Z0X2lycV9zdGF0ZTsKK3N0cnVjdCBw Z3RfZGV2aWNlOworCit0eXBlZGVmIHZvaWQgKCpndnRfZXZlbnRfcGh5c19oYW5kbGVyX3QpKHN0 cnVjdCBndnRfaXJxX3N0YXRlICpoc3RhdGUsCisJZW51bSBndnRfZXZlbnRfdHlwZSBldmVudCk7 Cit0eXBlZGVmIHZvaWQgKCpndnRfZXZlbnRfdmlydF9oYW5kbGVyX3QpKHN0cnVjdCBndnRfaXJx X3N0YXRlICpoc3RhdGUsCisJZW51bSBndnRfZXZlbnRfdHlwZSBldmVudCwgc3RydWN0IHZndF9k ZXZpY2UgKnZndCk7CisKK3N0cnVjdCBndnRfaXJxX29wcyB7CisJdm9pZCAoKmluaXRfaXJxKSAo c3RydWN0IGd2dF9pcnFfc3RhdGUgKmhzdGF0ZSk7CisJdm9pZCAoKmNoZWNrX3BlbmRpbmdfaXJx KSAoc3RydWN0IHZndF9kZXZpY2UgKnZndCk7Cit9OworCisvKiB0aGUgbGlzdCBvZiBwaHlzaWNh bCBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciBncm91cHMgKi8KK2VudW0gZ3Z0X2lycV90eXBl IHsKKwlHVlRfSVJRX0lORk9fR1QsCisJR1ZUX0lSUV9JTkZPX0RQWSwKKwlHVlRfSVJRX0lORk9f UENILAorCUdWVF9JUlFfSU5GT19QTSwKKworCUdWVF9JUlFfSU5GT19NQVNURVIsCisJR1ZUX0lS UV9JTkZPX0dUMCwKKwlHVlRfSVJRX0lORk9fR1QxLAorCUdWVF9JUlFfSU5GT19HVDIsCisJR1ZU X0lSUV9JTkZPX0dUMywKKwlHVlRfSVJRX0lORk9fREVfUElQRV9BLAorCUdWVF9JUlFfSU5GT19E RV9QSVBFX0IsCisJR1ZUX0lSUV9JTkZPX0RFX1BJUEVfQywKKwlHVlRfSVJRX0lORk9fREVfUE9S VCwKKwlHVlRfSVJRX0lORk9fREVfTUlTQywKKwlHVlRfSVJRX0lORk9fQVVELAorCUdWVF9JUlFf SU5GT19QQ1UsCisKKwlHVlRfSVJRX0lORk9fTUFYLAorfTsKKworI2RlZmluZSBHVlRfSVJRX0JJ VFdJRFRICTMyCisKKy8qIGRldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQgYml0IGRlZmluaXRpb25z ICovCitzdHJ1Y3QgZ3Z0X2lycV9pbmZvIHsKKwljaGFyICpuYW1lOworCWludCByZWdfYmFzZTsK KwllbnVtIGd2dF9ldmVudF90eXBlIGJpdF90b19ldmVudFtHVlRfSVJRX0JJVFdJRFRIXTsKKwl1 bnNpZ25lZCBsb25nIHdhcm5lZDsKKwlpbnQgZ3JvdXA7CisJREVDTEFSRV9CSVRNQVAoZG93bnN0 cmVhbV9pcnFfYml0bWFwLCBHVlRfSVJRX0JJVFdJRFRIKTsKKwlib29sIGhhc191cHN0cmVhbV9p cnE7Cit9OworCisjZGVmaW5lCUdWVF9FVkVOVF9GV19BTEwgMAkvKiBldmVudCBmb3J3YXJkZWQg dG8gYWxsIGluc3RhbmNlcyAqLworI2RlZmluZQlHVlRfRVZFTlRfRldfTk9ORSAxCS8qIG5vIGZv cndhcmQgKi8KKworLyogcGVyLWV2ZW50IGluZm9ybWF0aW9uICovCitzdHJ1Y3QgZ3Z0X2V2ZW50 X2luZm8geworCS8qIGRldmljZSBzcGVjaWZpYyBpbmZvICovCisJaW50CQkJYml0OwkvKiBtYXAg dG8gcmVnaXN0ZXIgYml0ICovCisJc3RydWN0IGd2dF9pcnFfaW5mbwkqaW5mbzsJLyogcmVnaXN0 ZXIgaW5mbyAqLworCisJLyogZGV2aWNlIG5ldXRyYWwgaW5mbyAqLworCWludAkJCXBvbGljeTsJ LyogZm9yd2FyZGluZyBwb2xpY3kgKi8KKwlndnRfZXZlbnRfcGh5c19oYW5kbGVyX3QJcF9oYW5k bGVyOwkvKiBmb3IgcF9ldmVudCAqLworCWd2dF9ldmVudF92aXJ0X2hhbmRsZXJfdAl2X2hhbmRs ZXI7CS8qIGZvciB2X2V2ZW50ICovCit9OworCitzdHJ1Y3QgZ3Z0X2lycV9tYXAgeworCWludCB1 cF9pcnFfZ3JvdXA7CisJaW50IHVwX2lycV9iaXQ7CisJaW50IGRvd25faXJxX2dyb3VwOworCXUz MiBkb3duX2lycV9iaXRtYXNrOworfTsKKworLyogc3RydWN0dXJlIGNvbnRhaW5pbmcgZGV2aWNl IHNwZWNpZmljIElSUSBzdGF0ZSAqLworc3RydWN0IGd2dF9pcnFfc3RhdGUgeworCXN0cnVjdCBn dnRfaXJxX29wcyAqb3BzOworCXN0cnVjdCBndnRfaXJxX2luZm8JKmluZm9bR1ZUX0lSUV9JTkZP X01BWF07CisJREVDTEFSRV9CSVRNQVAoaXJxX2luZm9fYml0bWFwLCBHVlRfSVJRX0lORk9fTUFY KTsKKwlzdHJ1Y3QgZ3Z0X2V2ZW50X2luZm8JZXZlbnRzW0dWVF9FVkVOVF9NQVhdOworCURFQ0xB UkVfQklUTUFQKHBlbmRpbmdfZXZlbnRzLCBHVlRfRVZFTlRfTUFYKTsKKwlzdHJ1Y3QgZ3Z0X2ly cV9tYXAgKmlycV9tYXA7Cit9OworCisjZGVmaW5lIGd2dF9nZXRfZXZlbnRfdmlydF9oYW5kbGVy KGgsIGUpCShoLT5ldmVudHNbZV0udl9oYW5kbGVyKQorI2RlZmluZSBndnRfZ2V0X2V2ZW50X3Bv bGljeShoLCBlKQkJKGgtPmV2ZW50c1tlXS5wb2xpY3kpCisjZGVmaW5lIGd2dF9nZXRfaXJxX2lu Zm8oaCwgZSkJCQkoaC0+ZXZlbnRzW2VdLmluZm8pCisjZGVmaW5lIGd2dF9nZXRfaXJxX29wcyhw KQkJCShwLT5pcnFfc3RhdGUub3BzKQorCisvKiBjb21tb24gb2Zmc2V0IGFtb25nIGludGVycnVw dCBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSByZWdiYXNlX3RvX2lzcihiYXNlKQkoYmFz ZSkKKyNkZWZpbmUgcmVnYmFzZV90b19pbXIoYmFzZSkJKGJhc2UgKyAweDQpCisjZGVmaW5lIHJl Z2Jhc2VfdG9faWlyKGJhc2UpCShiYXNlICsgMHg4KQorI2RlZmluZSByZWdiYXNlX3RvX2llcihi YXNlKQkoYmFzZSArIDB4QykKKworI2RlZmluZSBpaXJfdG9fcmVnYmFzZShpaXIpICAgIChpaXIg LSAweDgpCisjZGVmaW5lIGllcl90b19yZWdiYXNlKGllcikgICAgKGllciAtIDB4QykKKworI2Rl ZmluZSBndnRfaXJxX3N0YXRlX3RvX3BkZXYoc3RhdGUpIFwKKwljb250YWluZXJfb2Yoc3RhdGUs IHN0cnVjdCBwZ3RfZGV2aWNlLCBpcnFfc3RhdGUpCisKK2Jvb2wgZ3Z0X2lycV9pbml0KHN0cnVj dCBwZ3RfZGV2aWNlICpwZGV2KTsKK3ZvaWQgZ3Z0X2lycV9leGl0KHN0cnVjdCBwZ3RfZGV2aWNl ICpwZGV2KTsKKworI2VuZGlmIC8qIF9HVlRfSU5URVJSVVBUX0hfICovCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGVyZi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0 L3BlcmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjBjZDE1Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3BlcmYuaApAQCAtMCwwICsx LDM5IEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1Ig Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RI RVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICog U09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfR1ZUX1BFUkZfSF8KKyNkZWZpbmUgX0dWVF9QRVJG X0hfCisKK3N0cnVjdCBndnRfc3RhdGlzdGljcyB7CisJdTY0CWlycV9udW07CisJdTY0CWV2ZW50 c1tHVlRfRVZFTlRfTUFYXTsKKwl1NjQJbGFzdF9pbmplY3Rpb247Cit9OworCitzdHJ1Y3QgcGd0 X3N0YXRpc3RpY3MgeworCXU2NAlpcnFfbnVtOworCXU2NAlpcnFfZGVsYXlfY3ljbGVzOworCXU2 NAlldmVudHNbR1ZUX0VWRU5UX01BWF07Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d2dC9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9yZWcu aAppbmRleCAyZWRhZjdjLi4wZTI4YTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3JlZy5oCkBAIC01OCw0 ICs1OCwzNSBAQAogI2RlZmluZSBfR0VONl9HVF9USFJFQURfU1RBVFVTX1JFRwkweDEzODA1Ywog I2RlZmluZSBfR0VONl9HVF9DT1JFX1NUQVRVUwkJMHgxMzgwNjAKIAorI2RlZmluZSBfR0VOOF9E RV9QT1JUX0lNUiAoMHg0NDQ0NCkKKyNkZWZpbmUgX0dFTjhfREVfUE9SVF9JRVIgKDB4NDQ0NGMp CisjZGVmaW5lIF9HRU44X0RFX1BPUlRfSUlSICgweDQ0NDQ4KQorI2RlZmluZSBfR0VOOF9ERV9Q T1JUX0lTUiAoMHg0NDQ0MCkKKworI2RlZmluZSBfR0VOOF9ERV9NSVNDX0lNUiAoMHg0NDQ2NCkK KyNkZWZpbmUgX0dFTjhfREVfTUlTQ19JRVIgKDB4NDQ0NmMpCisjZGVmaW5lIF9HRU44X0RFX01J U0NfSUlSICgweDQ0NDY4KQorI2RlZmluZSBfR0VOOF9ERV9NSVNDX0lTUiAoMHg0NDQ2MCkKKwor I2RlZmluZSBfR0VOOF9QQ1VfSU1SICgweDQ0NGU0KQorI2RlZmluZSBfR0VOOF9QQ1VfSUVSICgw eDQ0NGVjKQorI2RlZmluZSBfR0VOOF9QQ1VfSUlSICgweDQ0NGU4KQorI2RlZmluZSBfR0VOOF9Q Q1VfSVNSICgweDQ0NGUwKQorI2RlZmluZSBfR0VOOF9NQVNURVJfSVJRCQkJKDB4NDQyMDApCisK KyNkZWZpbmUgX1NERUlNUiAgKDB4YzQwMDQpCisjZGVmaW5lIF9TREVJRVIgICgweGM0MDBjKQor I2RlZmluZSBfU0RFSUlSICAoMHhjNDAwOCkKKyNkZWZpbmUgX1NERUlTUiAgKDB4YzQwMDApCisK KyNkZWZpbmUgX0dFTjhfR1RfSVNSKHdoaWNoKSAoMHg0NDMwMCArICgweDEwICogKHdoaWNoKSkp CisjZGVmaW5lIF9HRU44X0dUX0lNUih3aGljaCkgKDB4NDQzMDQgKyAoMHgxMCAqICh3aGljaCkp KQorI2RlZmluZSBfR0VOOF9HVF9JSVIod2hpY2gpICgweDQ0MzA4ICsgKDB4MTAgKiAod2hpY2gp KSkKKyNkZWZpbmUgX0dFTjhfR1RfSUVSKHdoaWNoKSAoMHg0NDMwYyArICgweDEwICogKHdoaWNo KSkpCisKKyNkZWZpbmUgX0dFTjhfREVfUElQRV9JU1IocGlwZSkgKDB4NDQ0MDAgKyAoMHgxMCAq IChwaXBlKSkpCisjZGVmaW5lIF9HRU44X0RFX1BJUEVfSU1SKHBpcGUpICgweDQ0NDA0ICsgKDB4 MTAgKiAocGlwZSkpKQorI2RlZmluZSBfR0VOOF9ERV9QSVBFX0lJUihwaXBlKSAoMHg0NDQwOCAr ICgweDEwICogKHBpcGUpKSkKKyNkZWZpbmUgX0dFTjhfREVfUElQRV9JRVIocGlwZSkgKDB4NDQ0 MGMgKyAoMHgxMCAqIChwaXBlKSkpCisKICNlbmRpZgotLSAKMS45LjEKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==