From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [RFC 04/11] drm/i915/pmu: Expose a PMU interface for perf queries Date: Mon, 11 Sep 2017 16:25:52 +0100 Message-ID: <20170911152559.7077-5-tvrtko.ursulin@linux.intel.com> References: <20170911152559.7077-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x230.google.com (mail-wm0-x230.google.com [IPv6:2a00:1450:400c:c09::230]) by gabe.freedesktop.org (Postfix) with ESMTPS id 26D2D6E420 for ; Mon, 11 Sep 2017 15:26:11 +0000 (UTC) Received: by mail-wm0-x230.google.com with SMTP id f199so42596598wme.0 for ; Mon, 11 Sep 2017 08:26:11 -0700 (PDT) In-Reply-To: <20170911152559.7077-1-tvrtko.ursulin@linux.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 Cc: Peter Zijlstra List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkZyb206IENo cmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpGcm9tOiBUdnJ0a28gVXJzdWxp biA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpGcm9tOiBEbWl0cnkgUm9nb3poa2luIDxkbWl0 cnkudi5yb2dvemhraW5AaW50ZWwuY29tPgoKVGhlIGZpcnN0IGdvYWwgaXMgdG8gYmUgYWJsZSB0 byBtZWFzdXJlIEdQVSAoYW5kIGludmlkdWFsIHJpbmcpIGJ1c3luZXNzCndpdGhvdXQgaGF2aW5n IHRvIHBvbGwgcmVnaXN0ZXJzIGZyb20gdXNlcnNwYWNlLiAoV2hpY2ggbm90IG9ubHkgaW5jdXJz CmhvbGRpbmcgdGhlIGZvcmNld2FrZSBsb2NrIGluZGVmaW5pdGVseSwgcGVydHVyYmluZyB0aGUg c3lzdGVtLCBidXQgYWxzbwpydW5zIHRoZSByaXNrIG9mIGhhbmdpbmcgdGhlIG1hY2hpbmUuKSBB cyBhbiBhbHRlcm5hdGl2ZSB3ZSBjYW4gdXNlIHRoZQpwZXJmIGV2ZW50IGNvdW50ZXIgaW50ZXJm YWNlIHRvIHNhbXBsZSB0aGUgcmluZyByZWdpc3RlcnMgcGVyaW9kaWNhbGx5CmFuZCBzZW5kIHRo b3NlIHJlc3VsdHMgdG8gdXNlcnNwYWNlLgoKVG8gYmUgYWJsZSB0byBkbyBzbywgd2UgbmVlZCB0 byBleHBvcnQgdGhlIHR3byBzeW1ib2xzIGZyb20Ka2VybmVsL2V2ZW50cy9jb3JlLmMgdG8gcmVn aXN0ZXIgYW5kIHVucmVnaXN0ZXIgYSBQTVUgZGV2aWNlLgoKdjEtdjIgKENocmlzIFdpbHNvbik6 Cgp2MjogVXNlIGEgY29tbW9uIHRpbWVyIGZvciB0aGUgcmluZyBzYW1wbGluZy4KCnYzOiAoVHZy dGtvIFVyc3VsaW4pCiAqIERlY291cGxlIHVBUEkgZnJvbSBpOTE1IGVuZ2luZSBpZHMuCiAqIENv bXBsZXRlIHVBUEkgZGVmaW5lcy4KICogUmVmYWN0b3Igc29tZSBjb2RlIHRvIGhlbHBlcnMgZm9y IGNsYXJpdHkuCiAqIFNraXAgc2FtcGxpbmcgZGlzYWJsZWQgZW5naW5lcy4KICogRXhwb3NlIGNv dW50ZXJzIGluIHN5c2ZzLgogKiBQYXNzIGluIGZha2UgcmVncyB0byBhdm9pZCBudWxsIHB0ciBk ZXJlZiBpbiBwZXJmIGNvcmUuCiAqIENvbnZlcnQgdG8gY2xhc3MvaW5zdGFuY2UgdUFQSS4KICog VXNlIHNoYXJlZCBkcml2ZXIgY29kZSBmb3IgcmM2IHJlc2lkZW5jeSwgcG93ZXIgYW5kIGZyZXF1 ZW5jeS4KCnY0OiAoRG1pdHJ5IFJvZ296aGtpbikKICogUmVnaXN0ZXIgUE1VIHdpdGggLnRhc2tf Y3R4X25yPXBlcmZfaW52YWxpZF9jb250ZXh0CiAqIEV4cG9zZSBjcHVtYXNrIGZvciB0aGUgUE1V IHdpdGggdGhlIHNpbmdsZSBDUFUgaW4gdGhlIG1hc2sKICogUHJvcGVybHkgc3VwcG9ydCBwbXUt PnN0b3AoKTogaXQgc2hvdWxkIGNhbGwgcG11LT5yZWFkKCkKICogUHJvcGVybHkgc3VwcG9ydCBw bXUtPmRlbCgpOiBpdCBzaG91bGQgY2FsbCBzdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSkKICog TWFrZSBwbXUuYnVzeV9zdGF0cyBhIHJlZmNvdW50ZXIgdG8gYXZvaWQgYnVzeSBzdGF0cyBnb2lu ZyBhd2F5CiAgIHdpdGggc29tZSBkZWxldGVkIGV2ZW50LgogKiBFeHBvc2UgY3B1bWFzayBmb3Ig aTkxNSBQTVUgdG8gYXZvaWQgbXVsdGlwbGUgZXZlbnRzIGNyZWF0aW9uIG9mCiAgIHRoZSBzYW1l IHR5cGUgZm9sbG93ZWQgYnkgY291bnRlciBhZ2dyZWdhdGlvbiBieSBwZXJmLXN0YXQuCiAqIFRy YWNrIENQVXMgZ2V0dGluZyBvbmxpbmUvb2ZmbGluZSB0byBtaWdyYXRlIHBlcmYgY29udGV4dC4g SWYgKGxpa2VseSkKICAgY3B1bWFzayB3aWxsIGluaXRpYWxseSBzZXQgQ1BVMCwgQ09ORklHX0JP T1RQQVJBTV9IT1RQTFVHX0NQVTAgd2lsbCBiZQogICBuZWVkZWQgdG8gc2VlIGVmZmVjdCBvZiBD UFUgc3RhdHVzIHRyYWNraW5nLgogKiBFbmQgcmVzdWx0IGlzIHRoYXQgb25seSBnbG9iYWwgZXZl bnRzIGFyZSBzdXBwb3J0ZWQgYW5kIHBlcmYgc3RhdAogICB3b3JrcyBjb3JyZWN0bHkuCiAqIERl bnkgcGVyZiBkcml2ZXIgbGV2ZWwgc2FtcGxpbmcgLSBpdCBpcyBwcm9oaWJpdGVkIGZvciB1bmNv cmUgUE1VLgoKdjU6IChUdnJ0a28gVXJzdWxpbikKCiAqIERvbid0IGhhcmRjb2RlIG51bWJlciBv ZiBlbmdpbmUgc2FtcGxlcnMuCiAqIFJld3JpdGUgZXZlbnQgcmVmLWNvdW50aW5nIGZvciBjb3Jy ZWN0bmVzcyBhbmQgc2ltcGxpY2l0eS4KICogU3RvcmUgaW5pdGlhbCBjb3VudGVyIHZhbHVlIHdo ZW4gc3RhcnRpbmcgYWxyZWFkeSBlbmFibGVkIGV2ZW50cwogICB0byBjb3JyZWN0bHkgcmVwb3J0 IHZhbHVlcyB0byBhbGwgbGlzdGVuZXJzLgogKiBGaXggUkM2IHJlc2lkZW5jeSByZWFkb3V0Lgog KiBDb21tZW50cywgR1BMIGhlYWRlci4KClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hy aXNAY2hyaXMtd2lsc29uLmNvLnVrPgpTaWduZWQtb2ZmLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZy dGtvLnVyc3VsaW5AaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBEbWl0cnkgUm9nb3poa2luIDxk bWl0cnkudi5yb2dvemhraW5AaW50ZWwuY29tPgpDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51 cnN1bGluQGludGVsLmNvbT4KQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNv LnVrPgpDYzogRG1pdHJ5IFJvZ296aGtpbiA8ZG1pdHJ5LnYucm9nb3poa2luQGludGVsLmNvbT4K Q2M6IFBldGVyIFppamxzdHJhIDxwZXRlcnpAaW5mcmFkZWFkLm9yZz4KLS0tCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuYyAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmggICAgICAgICB8ICA3NiArKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5j ICAgICAgICAgfCA2ODYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICAgICAgICB8ICAgMyArCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9lbmdpbmVfY3MuYyAgfCAgMTAgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcmluZ2J1ZmZlci5jIHwgIDI1ICsrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5n YnVmZmVyLmggfCAgMjUgKysKIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgICAgICAg ICB8ICA1OCArKysKIDkgZmlsZXMgY2hhbmdlZCwgODg2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtl ZmlsZQppbmRleCAxY2I4MDU5YTNhMTYuLjdiM2EwZWNhNjJiNiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZp bGUKQEAgLTI2LDYgKzI2LDcgQEAgaTkxNS15IDo9IGk5MTVfZHJ2Lm8gXAogCiBpOTE1LSQoQ09O RklHX0NPTVBBVCkgICArPSBpOTE1X2lvYzMyLm8KIGk5MTUtJChDT05GSUdfREVCVUdfRlMpICs9 IGk5MTVfZGVidWdmcy5vIGludGVsX3BpcGVfY3JjLm8KK2k5MTUtJChDT05GSUdfUEVSRl9FVkVO VFMpICs9IGk5MTVfcG11Lm8KIAogIyBHRU0gY29kZQogaTkxNS15ICs9IGk5MTVfY21kX3BhcnNl ci5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IDVjMTExZWE5NmU4MC4uYjFmOTZlYjFi ZTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTExOTYsNiArMTE5Niw3IEBAIHN0YXRp YyB2b2lkIGk5MTVfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmRldl9wcml2LT5kcm07CiAKIAlpOTE1 X2dlbV9zaHJpbmtlcl9pbml0KGRldl9wcml2KTsKKwlpOTE1X3BtdV9yZWdpc3RlcihkZXZfcHJp dik7CiAKIAkvKgogCSAqIE5vdGlmeSBhIHZhbGlkIHN1cmZhY2UgYWZ0ZXIgbW9kZXNldHRpbmcs CkBAIC0xMjUwLDYgKzEyNTEsNyBAQCBzdGF0aWMgdm9pZCBpOTE1X2RyaXZlcl91bnJlZ2lzdGVy KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlpbnRlbF9vcHJlZ2lvbl91bnJl Z2lzdGVyKGRldl9wcml2KTsKIAogCWk5MTVfcGVyZl91bnJlZ2lzdGVyKGRldl9wcml2KTsKKwlp OTE1X3BtdV91bnJlZ2lzdGVyKGRldl9wcml2KTsKIAogCWk5MTVfdGVhcmRvd25fc3lzZnMoZGV2 X3ByaXYpOwogCWk5MTVfZ3VjX2xvZ191bnJlZ2lzdGVyKGRldl9wcml2KTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oCmluZGV4IDQ4ZGFmOTU1MjE2My4uNjI2NDZiOGRmYjdhIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAj aW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+Cisj aW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3Fvcy5oPgog I2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvc2htZW1fZnMu aD4KQEAgLTIxOTAsNiArMjE5MSw2OSBAQCBzdHJ1Y3QgaW50ZWxfY2RjbGtfc3RhdGUgewogCXVu c2lnbmVkIGludCBjZGNsaywgdmNvLCByZWY7CiB9OwogCitlbnVtIHsKKwlfX0k5MTVfU0FNUExF X0ZSRVFfQUNUID0gMCwKKwlfX0k5MTVfU0FNUExFX0ZSRVFfUkVRLAorCV9fSTkxNV9OVU1fUE1V X1NBTVBMRVJTCit9OworCisvKioKKyAqIEhvdyBtYW55IGRpZmZlcmVudCBldmVudHMgd2UgdHJh Y2sgaW4gdGhlIGdsb2JhbCBQTVUgbWFzay4KKyAqCisgKiBJdCBpcyBhbHNvIHVzZWQgdG8ga25v dyB0byBuZWVkZWQgbnVtYmVyIG9mIGV2ZW50IHJlZmVyZW5jZSBjb3VudGVycy4KKyAqLworI2Rl ZmluZSBJOTE1X1BNVV9NQVNLX0JJVFMgXAorCSgxIDw8IEk5MTVfUE1VX1NBTVBMRV9CSVRTKSAr IChJOTE1X1BNVV9MQVNUICsgMSAtIF9fSTkxNV9QTVVfT1RIRVIoMCkpCisKK3N0cnVjdCBpOTE1 X3BtdSB7CisJLyoqCisJICogQG5vZGU6IExpc3Qgbm9kZSBmb3IgQ1BVIGhvdHBsdWcgaGFuZGxp bmcuCisJICovCisJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKKwkvKioKKwkgKiBAYmFzZTogUE1V IGJhc2UuCisJICovCisJc3RydWN0IHBtdSBiYXNlOworCS8qKgorCSAqIEBsb2NrOiBMb2NrIHBy b3RlY3RpbmcgZW5hYmxlIG1hc2sgYW5kIHJlZiBjb3VudCBoYW5kbGluZy4KKwkgKi8KKwlzcGlu bG9ja190IGxvY2s7CisJLyoqCisJICogQHRpbWVyOiBUaW1lciBmb3IgaW50ZXJuYWwgaTkxNSBQ TVUgc2FtcGxpbmcuCisJICovCisJc3RydWN0IGhydGltZXIgdGltZXI7CisJLyoqCisJICogQGVu YWJsZTogQml0bWFzayBvZiBhbGwgY3VycmVudGx5IGVuYWJsZWQgZXZlbnRzLgorCSAqCisJICog Qml0cyBhcmUgZGVyaXZlZCBmcm9tIHVBUEkgZXZlbnQgbnVtYmVycyBpbiBhIHdheSB0aGF0IGxv dyAxNiBiaXRzCisJICogY29ycmVzcG9uZCB0byBlbmdpbmUgZXZlbnQgX3NhbXBsZV8gX3R5cGVf IChJOTE1X1NBTVBMRV9RVUVVRUQgaXMKKwkgKiBiaXQgMCksIGFuZCBoaWdoZXIgYml0cyBjb3Jy ZXNwb25kIHRvIG90aGVyIGV2ZW50cyAoZm9yIGluc3RhbmNlCisJICogSTkxNV9QTVVfQUNUVUFM X0ZSRVFVRU5DWSBpcyBiaXQgMTYgZXRjKS4KKwkgKgorCSAqIEluIG90aGVyIHdvcmRzLCBsb3cg MTYgYml0cyBhcmUgbm90IHBlciBlbmdpbmUgYnV0IHBlciBlbmdpbmUKKwkgKiBzYW1wbGVyIHR5 cGUsIHdoaWxlIHRoZSB1cHBlciBiaXRzIGFyZSBkaXJlY3RseSBtYXBwZWQgdG8gb3RoZXIKKwkg KiBldmVudCB0eXBlcy4KKwkgKi8KKwl1NjQgZW5hYmxlOworCS8qKgorCSAqIEBlbmFibGVfY291 bnQ6IFJlZmVyZW5jZSBjb3VudHMgZm9yIHRoZSBlbmFibGVkIGV2ZW50cy4KKwkgKgorCSAqIEFy cmF5IGluZGljZXMgYXJlIG1hcHBlZCBpbiB0aGUgc2FtZSB3YXkgYXMgYml0cyBpbiB0aGUgQGVu YWJsZSBmaWVsZAorCSAqIGFuZCB0aGV5IGFyZSB1c2VkIHRvIGNvbnRyb2wgc2FtcGxpbmcgb24v b2ZmIHdoZW4gbXVsdGlwbGUgY2xpZW50cworCSAqIGFyZSB1c2luZyB0aGUgUE1VIEFQSS4KKwkg Ki8KKwl1bnNpZ25lZCBpbnQgZW5hYmxlX2NvdW50W0k5MTVfUE1VX01BU0tfQklUU107CisJLyoq CisJICogQHNhbXBsZTogQ3VycmVudCBjb3VudGVyIHZhbHVlIGZvciBpOTE1IGV2ZW50cyB3aGlj aCBuZWVkIHNhbXBsaW5nLgorCSAqCisJICogVGhlc2UgY291bnRlcnMgYXJlIHVwZGF0ZWQgZnJv bSB0aGUgaTkxNSBQTVUgc2FtcGxpbmcgdGltZXIuCisJICoKKwkgKiBPbmx5IGdsb2JhbCBjb3Vu dGVycyBhcmUgaGVsZCBoZXJlLCB3aGlsZSB0aGUgcGVyLWVuZ2luZSBvbmVzIGFyZSBpbgorCSAq IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MuCisJICovCisJdTY0IHNhbXBsZVtfX0k5MTVfTlVNX1BN VV9TQU1QTEVSU107Cit9OworCiBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJc3RydWN0IGRy bV9kZXZpY2UgZHJtOwogCkBAIC0yMjM4LDYgKzIzMDIsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSB7CiAJc3RydWN0IHBjaV9kZXYgKmJyaWRnZV9kZXY7CiAJc3RydWN0IGk5MTVfZ2VtX2Nv bnRleHQgKmtlcm5lbF9jb250ZXh0OwogCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZVtJ OTE1X05VTV9FTkdJTkVTXTsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmVfY2xhc3Nb TUFYX0VOR0lORV9DTEFTUyArIDFdW01BWF9FTkdJTkVfSU5TVEFOQ0UgKyAxXTsKIAlzdHJ1Y3Qg aTkxNV92bWEgKnNlbWFwaG9yZTsKIAogCXN0cnVjdCBkcm1fZG1hX2hhbmRsZSAqc3RhdHVzX3Bh Z2VfZG1haDsKQEAgLTI2OTgsNiArMjc2Myw4IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsK IAkJaW50CWlycTsKIAl9IGxwZV9hdWRpbzsKIAorCXN0cnVjdCBpOTE1X3BtdSBwbXU7CisKIAkv KgogCSAqIE5PVEU6IFRoaXMgaXMgdGhlIGRyaTEvdW1zIGR1bmdlb24sIGRvbid0IGFkZCBzdHVm ZiBoZXJlLiBZb3VyIHBhdGNoCiAJICogd2lsbCBiZSByZWplY3RlZC4gSW5zdGVhZCBsb29rIGZv ciBhIGJldHRlciBwbGFjZS4KQEAgLTM5MTgsNiArMzk4NSwxNSBAQCBleHRlcm4gdm9pZCBpOTE1 X3BlcmZfZmluaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogZXh0ZXJuIHZv aWQgaTkxNV9wZXJmX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7 CiBleHRlcm4gdm9pZCBpOTE1X3BlcmZfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpOwogCisvKiBpOTE1X3BtdS5jICovCisjaWZkZWYgQ09ORklHX1BFUkZfRVZF TlRTCitleHRlcm4gdm9pZCBpOTE1X3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSk7CitleHRlcm4gdm9pZCBpOTE1X3BtdV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9wbXVfcmVn aXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpIHt9CitzdGF0aWMgaW5saW5lIHZv aWQgaTkxNV9wbXVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkge30K KyNlbmRpZgorCiAvKiBpOTE1X3N1c3BlbmQuYyAqLwogZXh0ZXJuIGludCBpOTE1X3NhdmVfc3Rh dGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIGV4dGVybiBpbnQgaTkxNV9y ZXN0b3JlX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9wbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjJl Yzg5MmU1NzE0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cG11LmMKQEAgLTAsMCArMSw2ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBD b3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAor ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUK KyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBz aGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQg SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4K KyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKyNpbmNsdWRlIDxsaW51 eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImludGVs X3JpbmdidWZmZXIuaCIKKworLyogRnJlcXVlbmN5IGZvciB0aGUgc2FtcGxpbmcgdGltZXIgZm9y IGV2ZW50cyB3aGljaCBuZWVkIGl0LiAqLworI2RlZmluZSBGUkVRVUVOQ1kgMjAwCisjZGVmaW5l IFBFUklPRCBtYXhfdCh1NjQsIDEwMDAwLCBOU0VDX1BFUl9TRUMgLyBGUkVRVUVOQ1kpCisKKyNk ZWZpbmUgRU5HSU5FX1NBTVBMRV9NQVNLIFwKKwkoQklUKEk5MTVfU0FNUExFX1FVRVVFRCkgfCBc CisJIEJJVChJOTE1X1NBTVBMRV9CVVNZKSB8IFwKKwkgQklUKEk5MTVfU0FNUExFX1dBSVQpIHwg XAorCSBCSVQoSTkxNV9TQU1QTEVfU0VNQSkpCisKKyNkZWZpbmUgRU5HSU5FX1NBTVBMRV9CSVRT ICgxIDw8IEk5MTVfUE1VX1NBTVBMRV9CSVRTKQorCitzdGF0aWMgY3B1bWFza190IGk5MTVfcG11 X2NwdW1hc2sgPSBDUFVfTUFTS19OT05FOworCitzdGF0aWMgdTggZW5naW5lX2NvbmZpZ19zYW1w bGUodTY0IGNvbmZpZykKK3sKKwlyZXR1cm4gY29uZmlnICYgSTkxNV9QTVVfU0FNUExFX01BU0s7 Cit9CisKK3N0YXRpYyB1OCBlbmdpbmVfZXZlbnRfc2FtcGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpl dmVudCkKK3sKKwlyZXR1cm4gZW5naW5lX2NvbmZpZ19zYW1wbGUoZXZlbnQtPmF0dHIuY29uZmln KTsKK30KKworc3RhdGljIHU4IGVuZ2luZV9ldmVudF9jbGFzcyhzdHJ1Y3QgcGVyZl9ldmVudCAq ZXZlbnQpCit7CisJcmV0dXJuIChldmVudC0+YXR0ci5jb25maWcgPj4gSTkxNV9QTVVfQ0xBU1Nf U0hJRlQpICYgMHhmZjsKK30KKworc3RhdGljIHU4IGVuZ2luZV9ldmVudF9pbnN0YW5jZShzdHJ1 Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIChldmVudC0+YXR0ci5jb25maWcgPj4g STkxNV9QTVVfU0FNUExFX0JJVFMpICYgMHhmZjsKK30KKworc3RhdGljIGJvb2wgaXNfZW5naW5l X2NvbmZpZyh1NjQgY29uZmlnKQoreworCXJldHVybiBjb25maWcgPCBfX0k5MTVfUE1VX09USEVS KDApOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNvbmZpZ19lbmFibGVkX2JpdCh1NjQgY29u ZmlnKQoreworCWlmIChpc19lbmdpbmVfY29uZmlnKGNvbmZpZykpCisJCXJldHVybiBlbmdpbmVf Y29uZmlnX3NhbXBsZShjb25maWcpOworCWVsc2UKKwkJcmV0dXJuIEVOR0lORV9TQU1QTEVfQklU UyArIChjb25maWcgLSBfX0k5MTVfUE1VX09USEVSKDApKTsKK30KKworc3RhdGljIHU2NCBjb25m aWdfZW5hYmxlZF9tYXNrKHU2NCBjb25maWcpCit7CisJcmV0dXJuIEJJVF9VTEwoY29uZmlnX2Vu YWJsZWRfYml0KGNvbmZpZykpOworfQorCitzdGF0aWMgYm9vbCBpc19lbmdpbmVfZXZlbnQoc3Ry dWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBpc19lbmdpbmVfY29uZmlnKGV2ZW50 LT5hdHRyLmNvbmZpZyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZXZlbnRfZW5hYmxlZF9i aXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBjb25maWdfZW5hYmxlZF9i aXQoZXZlbnQtPmF0dHIuY29uZmlnKTsKK30KKworc3RhdGljIGJvb2wgZ3JhYl9mb3JjZXdha2Uo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIGJvb2wgZncpCit7CisJaWYgKCFmdykKKwkJ aW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoaTkxNSwgRk9SQ0VXQUtFX0FMTCk7CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZW5naW5lc19zYW1wbGUoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsK KwllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKKwlib29sIGZ3ID0gZmFsc2U7CisKKwlpZiAoKGRl dl9wcml2LT5wbXUuZW5hYmxlICYgRU5HSU5FX1NBTVBMRV9NQVNLKSA9PSAwKQorCQlyZXR1cm47 CisKKwlpZiAoIWRldl9wcml2LT5ndC5hd2FrZSkKKwkJcmV0dXJuOworCisJaWYgKCFpbnRlbF9y dW50aW1lX3BtX2dldF9pZl9pbl91c2UoZGV2X3ByaXYpKQorCQlyZXR1cm47CisKKwlmb3JfZWFj aF9lbmdpbmUoZW5naW5lLCBkZXZfcHJpdiwgaWQpIHsKKwkJdTMyIGVuYWJsZSA9IGVuZ2luZS0+ cG11LmVuYWJsZTsKKworCQlpZiAoaTkxNV9zZXFub19wYXNzZWQoaW50ZWxfZW5naW5lX2dldF9z ZXFubyhlbmdpbmUpLAorCQkJCSAgICAgIGludGVsX2VuZ2luZV9sYXN0X3N1Ym1pdChlbmdpbmUp KSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChlbmFibGUgJiBCSVQoSTkxNV9TQU1QTEVfUVVFVUVE KSkKKwkJCWVuZ2luZS0+cG11LnNhbXBsZVtJOTE1X1NBTVBMRV9RVUVVRURdICs9IFBFUklPRDsK KworCQlpZiAoZW5hYmxlICYgQklUKEk5MTVfU0FNUExFX0JVU1kpKSB7CisJCQl1MzIgdmFsOwor CisJCQlmdyA9IGdyYWJfZm9yY2V3YWtlKGRldl9wcml2LCBmdyk7CisJCQl2YWwgPSBJOTE1X1JF QURfRlcoUklOR19NSV9NT0RFKGVuZ2luZS0+bW1pb19iYXNlKSk7CisJCQlpZiAoISh2YWwgJiBN T0RFX0lETEUpKQorCQkJCWVuZ2luZS0+cG11LnNhbXBsZVtJOTE1X1NBTVBMRV9CVVNZXSArPSBQ RVJJT0Q7CisJCX0KKworCQlpZiAoZW5hYmxlICYgKEJJVChJOTE1X1NBTVBMRV9XQUlUKSB8IEJJ VChJOTE1X1NBTVBMRV9TRU1BKSkpIHsKKwkJCXUzMiB2YWw7CisKKwkJCWZ3ID0gZ3JhYl9mb3Jj ZXdha2UoZGV2X3ByaXYsIGZ3KTsKKwkJCXZhbCA9IEk5MTVfUkVBRF9GVyhSSU5HX0NUTChlbmdp bmUtPm1taW9fYmFzZSkpOworCQkJaWYgKChlbmFibGUgJiBCSVQoSTkxNV9TQU1QTEVfV0FJVCkp ICYmCisJCQkgICAgKHZhbCAmIFJJTkdfV0FJVCkpCisJCQkJZW5naW5lLT5wbXUuc2FtcGxlW0k5 MTVfU0FNUExFX1dBSVRdICs9IFBFUklPRDsKKwkJCWlmICgoZW5hYmxlICYgQklUKEk5MTVfU0FN UExFX1NFTUEpKSAmJgorCQkJICAgICh2YWwgJiBSSU5HX1dBSVRfU0VNQVBIT1JFKSkKKwkJCQll bmdpbmUtPnBtdS5zYW1wbGVbSTkxNV9TQU1QTEVfU0VNQV0gKz0gUEVSSU9EOworCQl9CisJfQor CisJaWYgKGZ3KQorCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgRk9SQ0VX QUtFX0FMTCk7CisJaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOworfQorCitzdGF0aWMg dm9pZCBmcmVxdWVuY3lfc2FtcGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK K3sKKwlpZiAoZGV2X3ByaXYtPnBtdS5lbmFibGUgJgorCSAgICBjb25maWdfZW5hYmxlZF9tYXNr KEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1kpKSB7CisJCXU2NCB2YWw7CisKKwkJdmFsID0gZGV2 X3ByaXYtPnJwcy5jdXJfZnJlcTsKKwkJaWYgKGRldl9wcml2LT5ndC5hd2FrZSAmJgorCQkgICAg aW50ZWxfcnVudGltZV9wbV9nZXRfaWZfaW5fdXNlKGRldl9wcml2KSkgeworCQkJdmFsID0gaW50 ZWxfZ2V0X2NhZ2YoZGV2X3ByaXYsCisJCQkJCSAgICAgSTkxNV9SRUFEX05PVFJBQ0UoR0VONl9S UFNUQVQxKSk7CisJCQlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7CisJCX0KKwkJdmFs ID0gaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHZhbCk7CisJCWRldl9wcml2LT5wbXUuc2FtcGxl W19fSTkxNV9TQU1QTEVfRlJFUV9BQ1RdICs9IHZhbCAqIFBFUklPRDsKKwl9CisKKwlpZiAoZGV2 X3ByaXYtPnBtdS5lbmFibGUgJgorCSAgICBjb25maWdfZW5hYmxlZF9tYXNrKEk5MTVfUE1VX1JF UVVFU1RFRF9GUkVRVUVOQ1kpKSB7CisJCXU2NCB2YWwgPSBpbnRlbF9ncHVfZnJlcShkZXZfcHJp diwgZGV2X3ByaXYtPnJwcy5jdXJfZnJlcSk7CisJCWRldl9wcml2LT5wbXUuc2FtcGxlW19fSTkx NV9TQU1QTEVfRlJFUV9SRVFdICs9IHZhbCAqIFBFUklPRDsKKwl9Cit9CisKK3N0YXRpYyBlbnVt IGhydGltZXJfcmVzdGFydCBpOTE1X3NhbXBsZShzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihocnRpbWVy LCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgcG11LnRpbWVyKTsKKworCWlmIChpOTE1LT5wbXUu ZW5hYmxlID09IDApCisJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKKworCWVuZ2luZXNfc2Ft cGxlKGk5MTUpOworCWZyZXF1ZW5jeV9zYW1wbGUoaTkxNSk7CisKKwlocnRpbWVyX2ZvcndhcmRf bm93KGhydGltZXIsIG5zX3RvX2t0aW1lKFBFUklPRCkpOworCXJldHVybiBIUlRJTUVSX1JFU1RB UlQ7Cit9CisKK3N0YXRpYyB1NjQgY291bnRfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSkKK3sKKwkvKiBvcGVuLWNvZGVkIGtzdGF0X2lycXMoKSAqLworCXN0cnVjdCBp cnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGk5MTUtPmRybS5wZGV2LT5pcnEpOworCXU2NCBz dW0gPSAwOworCWludCBjcHU7CisKKwlpZiAoIWRlc2MgfHwgIWRlc2MtPmtzdGF0X2lycXMpCisJ CXJldHVybiAwOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJc3VtICs9ICpwZXJf Y3B1X3B0cihkZXNjLT5rc3RhdF9pcnFzLCBjcHUpOworCisJcmV0dXJuIHN1bTsKK30KKworc3Rh dGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfZGVzdHJveShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQp Cit7CisJV0FSTl9PTihldmVudC0+cGFyZW50KTsKK30KKworc3RhdGljIGludCBlbmdpbmVfZXZl bnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUgPQorCQljb250YWluZXJfb2YoZXZlbnQtPnBtdSwgdHlwZW9mKCppOTE1KSwg cG11LmJhc2UpOworCisJaWYgKCFpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoaTkxNSwgZW5naW5l X2V2ZW50X2NsYXNzKGV2ZW50KSwKKwkJCQkgICAgICBlbmdpbmVfZXZlbnRfaW5zdGFuY2UoZXZl bnQpKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzd2l0Y2ggKGVuZ2luZV9ldmVudF9zYW1wbGUo ZXZlbnQpKSB7CisJY2FzZSBJOTE1X1NBTVBMRV9RVUVVRUQ6CisJY2FzZSBJOTE1X1NBTVBMRV9C VVNZOgorCWNhc2UgSTkxNV9TQU1QTEVfV0FJVDoKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1NBTVBM RV9TRU1BOgorCQlpZiAoSU5URUxfR0VOKGk5MTUpIDwgNikKKwkJCXJldHVybiAtRU5PREVWOwor CQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBpOTE1X3BtdV9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpl dmVudCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9v ZihldmVudC0+cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7CisJaW50IGNwdSwgcmV0Owor CisJaWYgKGV2ZW50LT5hdHRyLnR5cGUgIT0gZXZlbnQtPnBtdS0+dHlwZSkKKwkJcmV0dXJuIC1F Tk9FTlQ7CisKKwkvKiB1bnN1cHBvcnRlZCBtb2RlcyBhbmQgZmlsdGVycyAqLworCWlmIChldmVu dC0+YXR0ci5zYW1wbGVfcGVyaW9kKSAvKiBubyBzYW1wbGluZyAqLworCQlyZXR1cm4gLUVJTlZB TDsKKworCWlmIChoYXNfYnJhbmNoX3N0YWNrKGV2ZW50KSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQ OworCisJaWYgKGV2ZW50LT5jcHUgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNwdSA9IGNw dW1hc2tfYW55X2FuZCgmaTkxNV9wbXVfY3B1bWFzaywKKwkJCSAgICAgIHRvcG9sb2d5X3NpYmxp bmdfY3B1bWFzayhldmVudC0+Y3B1KSk7CisJaWYgKGNwdSA+PSBucl9jcHVfaWRzKQorCQlyZXR1 cm4gLUVOT0RFVjsKKworCXJldCA9IDA7CisJaWYgKGlzX2VuZ2luZV9ldmVudChldmVudCkpIHsK KwkJcmV0ID0gZW5naW5lX2V2ZW50X2luaXQoZXZlbnQpOworCX0gZWxzZSBzd2l0Y2ggKGV2ZW50 LT5hdHRyLmNvbmZpZykgeworCWNhc2UgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWToKKwkJaWYg KElTX1ZBTExFWVZJRVcoaTkxNSkgfHwgSVNfQ0hFUlJZVklFVyhpOTE1KSkKKwkJCXJldCA9IC1F Tk9ERVY7IC8qIHJlcXVpcmVzIGEgbXV0ZXggZm9yIHNhbXBsaW5nISAqLworCWNhc2UgSTkxNV9Q TVVfUkVRVUVTVEVEX0ZSRVFVRU5DWToKKwljYXNlIEk5MTVfUE1VX0VORVJHWToKKwljYXNlIEk5 MTVfUE1VX1JDNl9SRVNJREVOQ1k6CisJY2FzZSBJOTE1X1BNVV9SQzZwX1JFU0lERU5DWToKKwlj YXNlIEk5MTVfUE1VX1JDNnBwX1JFU0lERU5DWToKKwkJaWYgKElOVEVMX0dFTihpOTE1KSA8IDYp CisJCQlyZXQgPSAtRU5PREVWOworCQlicmVhazsKKwl9CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCWV2ZW50LT5jcHUgPSBjcHU7CisJaWYgKCFldmVudC0+cGFyZW50KQorCQlldmVudC0+ ZGVzdHJveSA9IGk5MTVfcG11X2V2ZW50X2Rlc3Ryb3k7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHU2NCBfX2k5MTVfcG11X2V2ZW50X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQor eworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29mKGV2ZW50 LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKKwl1NjQgdmFsID0gMDsKKworCWlmIChp c19lbmdpbmVfZXZlbnQoZXZlbnQpKSB7CisJCXU4IHNhbXBsZSA9IGVuZ2luZV9ldmVudF9zYW1w bGUoZXZlbnQpOworCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisKKwkJZW5naW5l ID0gaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKGk5MTUsCisJCQkJCQkgIGVuZ2luZV9ldmVudF9j bGFzcyhldmVudCksCisJCQkJCQkgIGVuZ2luZV9ldmVudF9pbnN0YW5jZShldmVudCkpOworCisJ CWlmIChXQVJOX09OX09OQ0UoIWVuZ2luZSkpIHsKKwkJCS8qIERvIG5vdGhpbmcgKi8KKwkJfSBl bHNlIHsKKwkJCXZhbCA9IGVuZ2luZS0+cG11LnNhbXBsZVtzYW1wbGVdOworCQl9CisJfSBlbHNl IHN3aXRjaCAoZXZlbnQtPmF0dHIuY29uZmlnKSB7CisJY2FzZSBJOTE1X1BNVV9BQ1RVQUxfRlJF UVVFTkNZOgorCQl2YWwgPSBpOTE1LT5wbXUuc2FtcGxlW19fSTkxNV9TQU1QTEVfRlJFUV9BQ1Rd OworCQlicmVhazsKKwljYXNlIEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1k6CisJCXZhbCA9 IGk5MTUtPnBtdS5zYW1wbGVbX19JOTE1X1NBTVBMRV9GUkVRX1JFUV07CisJCWJyZWFrOworCWNh c2UgSTkxNV9QTVVfRU5FUkdZOgorCQl2YWwgPSBpbnRlbF9lbmVyZ3lfdUooaTkxNSk7CisJCWJy ZWFrOworCWNhc2UgSTkxNV9QTVVfSU5URVJSVVBUUzoKKwkJdmFsID0gY291bnRfaW50ZXJydXB0 cyhpOTE1KTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1BNVV9SQzZfUkVTSURFTkNZOgorCQl2YWwg PSBpbnRlbF9yYzZfcmVzaWRlbmN5X25zKGk5MTUsCisJCQkJCSAgICAgSVNfVkFMTEVZVklFVyhp OTE1KSA/CisJCQkJCSAgICAgVkxWX0dUX1JFTkRFUl9SQzYgOgorCQkJCQkgICAgIEdFTjZfR1Rf R0ZYX1JDNik7CisJCWJyZWFrOworCWNhc2UgSTkxNV9QTVVfUkM2cF9SRVNJREVOQ1k6CisJCWlm ICghSVNfVkFMTEVZVklFVyhpOTE1KSkKKwkJCXZhbCA9IGludGVsX3JjNl9yZXNpZGVuY3lfbnMo aTkxNSwgR0VONl9HVF9HRlhfUkM2cCk7CisJCWJyZWFrOworCWNhc2UgSTkxNV9QTVVfUkM2cHBf UkVTSURFTkNZOgorCQlpZiAoIUlTX1ZBTExFWVZJRVcoaTkxNSkpCisJCQl2YWwgPSBpbnRlbF9y YzZfcmVzaWRlbmN5X25zKGk5MTUsIEdFTjZfR1RfR0ZYX1JDNnBwKTsKKwkJYnJlYWs7CisJfQor CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfcmVhZChzdHJ1 Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisKKwlsb2NhbDY0X3NldCgmZXZlbnQtPmNvdW50LAor CQkgICAgX19pOTE1X3BtdV9ldmVudF9yZWFkKGV2ZW50KSAtCisJCSAgICBsb2NhbDY0X3JlYWQo JmV2ZW50LT5ody5wcmV2X2NvdW50KSk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2VuYWJs ZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUgPQorCQljb250YWluZXJfb2YoZXZlbnQtPnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJh c2UpOworCXVuc2lnbmVkIGludCBiaXQgPSBldmVudF9lbmFibGVkX2JpdChldmVudCk7CisJdW5z aWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpOTE1LT5wbXUubG9jaywg ZmxhZ3MpOworCisJLyoKKwkgKiBTdGFydCB0aGUgc2FtcGxpbmcgdGltZXIgd2hlbiBlbmFibGlu ZyB0aGUgZmlyc3QgZXZlbnQuCisJICovCisJaWYgKGk5MTUtPnBtdS5lbmFibGUgPT0gMCkKKwkJ aHJ0aW1lcl9zdGFydF9yYW5nZV9ucygmaTkxNS0+cG11LnRpbWVyLAorCQkJCSAgICAgICBuc190 b19rdGltZShQRVJJT0QpLCAwLAorCQkJCSAgICAgICBIUlRJTUVSX01PREVfUkVMX1BJTk5FRCk7 CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgYml0bWFzayBvZiBlbmFibGVkIGV2ZW50cyBhbmQgaW5j cmVtZW50CisJICogdGhlIGV2ZW50IHJlZmVyZW5jZSBjb3VudGVyLgorCSAqLworCUdFTV9CVUdf T04oYml0ID49IEk5MTVfUE1VX01BU0tfQklUUyk7CisJR0VNX0JVR19PTihpOTE1LT5wbXUuZW5h YmxlX2NvdW50W2JpdF0gPT0gfjApOworCWk5MTUtPnBtdS5lbmFibGUgfD0gQklUX1VMTChiaXQp OworCWk5MTUtPnBtdS5lbmFibGVfY291bnRbYml0XSsrOworCisJLyoKKwkgKiBGb3IgcGVyLWVu Z2luZSBldmVudHMgdGhlIGJpdG1hc2sgYW5kIHJlZmVyZW5jZSBjb3VudGluZworCSAqIGlzIHN0 b3JlZCBwZXIgZW5naW5lLgorCSAqLworCWlmIChpc19lbmdpbmVfZXZlbnQoZXZlbnQpKSB7CisJ CXU4IHNhbXBsZSA9IGVuZ2luZV9ldmVudF9zYW1wbGUoZXZlbnQpOworCQlzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmU7CisKKwkJZW5naW5lID0gaW50ZWxfZW5naW5lX2xvb2t1cF91c2Vy KGk5MTUsCisJCQkJCQkgIGVuZ2luZV9ldmVudF9jbGFzcyhldmVudCksCisJCQkJCQkgIGVuZ2lu ZV9ldmVudF9pbnN0YW5jZShldmVudCkpOworCQlHRU1fQlVHX09OKCFlbmdpbmUpOworCQllbmdp bmUtPnBtdS5lbmFibGUgfD0gQklUKHNhbXBsZSk7CisKKwkJR0VNX0JVR19PTihzYW1wbGUgPj0g STkxNV9QTVVfU0FNUExFX0JJVFMpOworCQlHRU1fQlVHX09OKGVuZ2luZS0+cG11LmVuYWJsZV9j b3VudFtzYW1wbGVdID09IH4wKTsKKwkJZW5naW5lLT5wbXUuZW5hYmxlX2NvdW50W3NhbXBsZV0r KzsKKwl9CisKKwkvKgorCSAqIFN0b3JlIHRoZSBjdXJyZW50IGNvdW50ZXIgdmFsdWUgc28gd2Ug Y2FuIHJlcG9ydCB0aGUgY29ycmVjdCBkZWx0YQorCSAqIGZvciBhbGwgbGlzdGVuZXJzLiBFdmVu IHdoZW4gdGhlIGV2ZW50IHdhcyBhbHJlYWR5IGVuYWJsZWQgYW5kIGhhcworCSAqIGFuIGV4aXN0 aW5nIG5vbi16ZXJvIHZhbHVlLgorCSAqLworCWxvY2FsNjRfc2V0KCZldmVudC0+aHcucHJldl9j b3VudCwgX19pOTE1X3BtdV9ldmVudF9yZWFkKGV2ZW50KSk7CisKKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZpOTE1LT5wbXUubG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3Bt dV9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0eXBlb2YoKmk5MTUp LCBwbXUuYmFzZSk7CisJdW5zaWduZWQgaW50IGJpdCA9IGV2ZW50X2VuYWJsZWRfYml0KGV2ZW50 KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmk5MTUtPnBt dS5sb2NrLCBmbGFncyk7CisKKwlpZiAoaXNfZW5naW5lX2V2ZW50KGV2ZW50KSkgeworCQl1OCBz YW1wbGUgPSBlbmdpbmVfZXZlbnRfc2FtcGxlKGV2ZW50KTsKKwkJc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lOworCisJCWVuZ2luZSA9IGludGVsX2VuZ2luZV9sb29rdXBfdXNlcihpOTE1 LAorCQkJCQkJICBlbmdpbmVfZXZlbnRfY2xhc3MoZXZlbnQpLAorCQkJCQkJICBlbmdpbmVfZXZl bnRfaW5zdGFuY2UoZXZlbnQpKTsKKwkJR0VNX0JVR19PTighZW5naW5lKTsKKwkJR0VNX0JVR19P TihzYW1wbGUgPj0gSTkxNV9QTVVfU0FNUExFX0JJVFMpOworCQlHRU1fQlVHX09OKGVuZ2luZS0+ cG11LmVuYWJsZV9jb3VudFtzYW1wbGVdID09IDApOworCQkvKgorCQkgKiBEZWNyZW1lbnQgdGhl IHJlZmVyZW5jZSBjb3VudCBhbmQgY2xlYXIgdGhlIGVuYWJsZWQKKwkJICogYml0bWFzayB3aGVu IHRoZSBsYXN0IGxpc3RlbmVyIG9uIGFuIGV2ZW50IGdvZXMgYXdheS4KKwkJICovCisJCWlmICgt LWVuZ2luZS0+cG11LmVuYWJsZV9jb3VudFtzYW1wbGVdID09IDApCisJCQllbmdpbmUtPnBtdS5l bmFibGUgJj0gfkJJVChzYW1wbGUpOworCX0KKworCUdFTV9CVUdfT04oYml0ID49IEk5MTVfUE1V X01BU0tfQklUUyk7CisJR0VNX0JVR19PTihpOTE1LT5wbXUuZW5hYmxlX2NvdW50W2JpdF0gPT0g MCk7CisJLyoKKwkgKiBEZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBhbmQgY2xlYXIgdGhl IGVuYWJsZWQKKwkgKiBiaXRtYXNrIHdoZW4gdGhlIGxhc3QgbGlzdGVuZXIgb24gYW4gZXZlbnQg Z29lcyBhd2F5LgorCSAqLworCWlmICgtLWk5MTUtPnBtdS5lbmFibGVfY291bnRbYml0XSA9PSAw KQorCQlpOTE1LT5wbXUuZW5hYmxlICY9IH5CSVRfVUxMKGJpdCk7CisKKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZpOTE1LT5wbXUubG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBpOTE1 X3BtdV9ldmVudF9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKK3sK KwlpOTE1X3BtdV9lbmFibGUoZXZlbnQpOworCWV2ZW50LT5ody5zdGF0ZSA9IDA7Cit9CisKK3N0 YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBp bnQgZmxhZ3MpCit7CisJaWYgKGZsYWdzICYgUEVSRl9FRl9VUERBVEUpCisJCWk5MTVfcG11X2V2 ZW50X3JlYWQoZXZlbnQpOworCWk5MTVfcG11X2Rpc2FibGUoZXZlbnQpOworCWV2ZW50LT5ody5z dGF0ZSA9IFBFUkZfSEVTX1NUT1BQRUQ7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9wbXVfZXZlbnRf YWRkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQoreworCWlmIChmbGFncyAm IFBFUkZfRUZfU1RBUlQpCisJCWk5MTVfcG11X2V2ZW50X3N0YXJ0KGV2ZW50LCBmbGFncyk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfZGVsKHN0cnVjdCBw ZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQoreworCWk5MTVfcG11X2V2ZW50X3N0b3AoZXZl bnQsIFBFUkZfRUZfVVBEQVRFKTsKK30KKworc3RhdGljIGludCBpOTE1X3BtdV9ldmVudF9ldmVu dF9pZHgoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiAwOworfQorCitzdGF0 aWMgc3NpemVfdCBpOTE1X3BtdV9mb3JtYXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJ ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisgICAgICAg IHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSAqZWF0dHI7CisKKyAgICAgICAgZWF0dHIgPSBjb250 YWluZXJfb2YoYXR0ciwgc3RydWN0IGRldl9leHRfYXR0cmlidXRlLCBhdHRyKTsKKyAgICAgICAg cmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIChjaGFyICopIGVhdHRyLT52YXIpOworfQorCisj ZGVmaW5lIEk5MTVfUE1VX0ZPUk1BVF9BVFRSKF9uYW1lLCBfY29uZmlnKSAgICAgICAgICAgXAor ICAgICAgICAoJigoc3RydWN0IGRldl9leHRfYXR0cmlidXRlW10pIHsgICAgICAgICAgICAgICBc CisgICAgICAgICAgICAgICAgeyAuYXR0ciA9IF9fQVRUUihfbmFtZSwgU19JUlVHTywgaTkxNV9w bXVfZm9ybWF0X3Nob3csIE5VTEwpLCBcCisgICAgICAgICAgICAgICAgICAudmFyID0gKHZvaWQg KikgX2NvbmZpZywgfSAgICAgICAgICAgIFwKKyAgICAgICAgfSlbMF0uYXR0ci5hdHRyKQorCitz dGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaTkxNV9wbXVfZm9ybWF0X2F0dHJzW10gPSB7CisgICAg ICAgIEk5MTVfUE1VX0ZPUk1BVF9BVFRSKGk5MTVfZXZlbnRpZCwgImNvbmZpZzowLTQyIiksCisg ICAgICAgIE5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBp OTE1X3BtdV9mb3JtYXRfYXR0cl9ncm91cCA9IHsKKyAgICAgICAgLm5hbWUgPSAiZm9ybWF0IiwK KyAgICAgICAgLmF0dHJzID0gaTkxNV9wbXVfZm9ybWF0X2F0dHJzLAorfTsKKworc3RhdGljIHNz aXplX3QgaTkxNV9wbXVfZXZlbnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3Ry dWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKyAgICAgICAgc3RydWN0 IGRldl9leHRfYXR0cmlidXRlICplYXR0cjsKKworICAgICAgICBlYXR0ciA9IGNvbnRhaW5lcl9v ZihhdHRyLCBzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1dGUsIGF0dHIpOworICAgICAgICByZXR1cm4g c3ByaW50ZihidWYsICJjb25maWc9MHglbHhcbiIsICh1bnNpZ25lZCBsb25nKSBlYXR0ci0+dmFy KTsKK30KKworI2RlZmluZSBJOTE1X1BNVV9FVkVOVF9BVFRSKF9uYW1lLCBfY29uZmlnKSAgICAg ICAgICAgIFwKKyAgICAgICAgKCYoKHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZVtdKSB7ICAgICAg ICAgICAgICAgXAorICAgICAgICAgICAgICAgIHsgLmF0dHIgPSBfX0FUVFIoX25hbWUsIFNfSVJV R08sIGk5MTVfcG11X2V2ZW50X3Nob3csIE5VTEwpLCBcCisgICAgICAgICAgICAgICAgICAudmFy ID0gKHZvaWQgKikgX2NvbmZpZywgfSAgICAgICAgICAgIFwKKyAgICAgICAgIH0pWzBdLmF0dHIu YXR0cikKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmk5MTVfcG11X2V2ZW50c19hdHRyc1td ID0geworCUk5MTVfUE1VX0VWRU5UX0FUVFIocmNzMC1xdWV1ZWQsCisJCQkgICAgSTkxNV9QTVVf RU5HSU5FX1FVRVVFRChJOTE1X0VOR0lORV9DTEFTU19SRU5ERVIsIDApKSwKKwlJOTE1X1BNVV9F VkVOVF9BVFRSKHJjczAtYnVzeSwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfQlVTWShJOTE1X0VO R0lORV9DTEFTU19SRU5ERVIsIDApKSwKKwlJOTE1X1BNVV9FVkVOVF9BVFRSKHJjczAtd2FpdCwK KwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfV0FJVChJOTE1X0VOR0lORV9DTEFTU19SRU5ERVIsIDAp KSwKKwlJOTE1X1BNVV9FVkVOVF9BVFRSKHJjczAtc2VtYSwKKwkJCSAgICBJOTE1X1BNVV9FTkdJ TkVfU0VNQShJOTE1X0VOR0lORV9DTEFTU19SRU5ERVIsIDApKSwKKworCUk5MTVfUE1VX0VWRU5U X0FUVFIoYmNzMC1xdWV1ZWQsCisJCQkgICAgSTkxNV9QTVVfRU5HSU5FX1FVRVVFRChJOTE1X0VO R0lORV9DTEFTU19DT1BZLCAwKSksCisJSTkxNV9QTVVfRVZFTlRfQVRUUihiY3MwLWJ1c3ksCisJ CQkgICAgSTkxNV9QTVVfRU5HSU5FX0JVU1koSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWSwgMCkpLAor CUk5MTVfUE1VX0VWRU5UX0FUVFIoYmNzMC13YWl0LAorCQkJICAgIEk5MTVfUE1VX0VOR0lORV9X QUlUKEk5MTVfRU5HSU5FX0NMQVNTX0NPUFksIDApKSwKKwlJOTE1X1BNVV9FVkVOVF9BVFRSKGJj czAtc2VtYSwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfU0VNQShJOTE1X0VOR0lORV9DTEFTU19D T1BZLCAwKSksCisKKwlJOTE1X1BNVV9FVkVOVF9BVFRSKHZjczAtcXVldWVkLAorCQkJICAgIEk5 MTVfUE1VX0VOR0lORV9RVUVVRUQoSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDApKSwKKwlJOTE1 X1BNVV9FVkVOVF9BVFRSKHZjczAtYnVzeSwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfQlVTWShJ OTE1X0VOR0lORV9DTEFTU19WSURFTywgMCkpLAorCUk5MTVfUE1VX0VWRU5UX0FUVFIodmNzMC13 YWl0LAorCQkJICAgIEk5MTVfUE1VX0VOR0lORV9XQUlUKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVP LCAwKSksCisJSTkxNV9QTVVfRVZFTlRfQVRUUih2Y3MwLXNlbWEsCisJCQkgICAgSTkxNV9QTVVf RU5HSU5FX1NFTUEoSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDApKSwKKworCUk5MTVfUE1VX0VW RU5UX0FUVFIodmNzMS1xdWV1ZWQsCisJCQkgICAgSTkxNV9QTVVfRU5HSU5FX1FVRVVFRChJOTE1 X0VOR0lORV9DTEFTU19WSURFTywgMSkpLAorCUk5MTVfUE1VX0VWRU5UX0FUVFIodmNzMS1idXN5 LAorCQkJICAgIEk5MTVfUE1VX0VOR0lORV9CVVNZKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPLCAx KSksCisJSTkxNV9QTVVfRVZFTlRfQVRUUih2Y3MxLXdhaXQsCisJCQkgICAgSTkxNV9QTVVfRU5H SU5FX1dBSVQoSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDEpKSwKKwlJOTE1X1BNVV9FVkVOVF9B VFRSKHZjczEtc2VtYSwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfU0VNQShJOTE1X0VOR0lORV9D TEFTU19WSURFTywgMSkpLAorCisJSTkxNV9QTVVfRVZFTlRfQVRUUih2ZWNzMC1xdWV1ZWQsCisJ CQkgICAgSTkxNV9QTVVfRU5HSU5FX1FVRVVFRChJOTE1X0VOR0lORV9DTEFTU19WSURFT19FTkhB TkNFLCAwKSksCisJSTkxNV9QTVVfRVZFTlRfQVRUUih2ZWNzMC1idXN5LAorCQkJICAgIEk5MTVf UE1VX0VOR0lORV9CVVNZKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UsIDApKSwKKwlJ OTE1X1BNVV9FVkVOVF9BVFRSKHZlY3MwLXdhaXQsCisJCQkgICAgSTkxNV9QTVVfRU5HSU5FX1dB SVQoSTkxNV9FTkdJTkVfQ0xBU1NfVklERU9fRU5IQU5DRSwgMCkpLAorCUk5MTVfUE1VX0VWRU5U X0FUVFIodmVjczAtc2VtYSwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfU0VNQShJOTE1X0VOR0lO RV9DTEFTU19WSURFT19FTkhBTkNFLCAwKSksCisKKyAgICAgICAgSTkxNV9QTVVfRVZFTlRfQVRU UihhY3R1YWwtZnJlcXVlbmN5LAkgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWSksCisgICAgICAg IEk5MTVfUE1VX0VWRU5UX0FUVFIocmVxdWVzdGVkLWZyZXF1ZW5jeSwgSTkxNV9QTVVfUkVRVUVT VEVEX0ZSRVFVRU5DWSksCisgICAgICAgIEk5MTVfUE1VX0VWRU5UX0FUVFIoZW5lcmd5LAkJIEk5 MTVfUE1VX0VORVJHWSksCisgICAgICAgIEk5MTVfUE1VX0VWRU5UX0FUVFIoaW50ZXJydXB0cywJ CSBJOTE1X1BNVV9JTlRFUlJVUFRTKSwKKyAgICAgICAgSTkxNV9QTVVfRVZFTlRfQVRUUihyYzYt cmVzaWRlbmN5LAkgSTkxNV9QTVVfUkM2X1JFU0lERU5DWSksCisgICAgICAgIEk5MTVfUE1VX0VW RU5UX0FUVFIocmM2cC1yZXNpZGVuY3ksCSBJOTE1X1BNVV9SQzZwX1JFU0lERU5DWSksCisgICAg ICAgIEk5MTVfUE1VX0VWRU5UX0FUVFIocmM2cHAtcmVzaWRlbmN5LAkgSTkxNV9QTVVfUkM2cHBf UkVTSURFTkNZKSwKKworICAgICAgICBOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBh dHRyaWJ1dGVfZ3JvdXAgaTkxNV9wbXVfZXZlbnRzX2F0dHJfZ3JvdXAgPSB7CisgICAgICAgIC5u YW1lID0gImV2ZW50cyIsCisgICAgICAgIC5hdHRycyA9IGk5MTVfcG11X2V2ZW50c19hdHRycywK K307CisKK3N0YXRpYyBzc2l6ZV90CitpOTE1X3BtdV9nZXRfYXR0cl9jcHVtYXNrKHN0cnVjdCBk ZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNo YXIgKmJ1ZikKK3sKKwlyZXR1cm4gY3B1bWFwX3ByaW50X3RvX3BhZ2VidWYodHJ1ZSwgYnVmLCAm aTkxNV9wbXVfY3B1bWFzayk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihjcHVtYXNrLCBTX0lS VUdPLCBpOTE1X3BtdV9nZXRfYXR0cl9jcHVtYXNrLCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBh dHRyaWJ1dGUgKmk5MTVfY3B1bWFza19hdHRyc1tdID0geworCSZkZXZfYXR0cl9jcHVtYXNrLmF0 dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGk5MTVfcG11 X2NwdW1hc2tfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBpOTE1X2NwdW1hc2tfYXR0cnMsCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqaTkxNV9wbXVfYXR0cl9n cm91cHNbXSA9IHsKKyAgICAgICAgJmk5MTVfcG11X2Zvcm1hdF9hdHRyX2dyb3VwLAorICAgICAg ICAmaTkxNV9wbXVfZXZlbnRzX2F0dHJfZ3JvdXAsCisJJmk5MTVfcG11X2NwdW1hc2tfYXR0cl9n cm91cCwKKyAgICAgICAgTlVMTAorfTsKKworc3RhdGljIGludCBpOTE1X3BtdV9jcHVfb25saW5l KHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKQoreworCXVuc2lnbmVk IGludCB0YXJnZXQ7CisKKwl0YXJnZXQgPSBjcHVtYXNrX2FueV9hbmQoJmk5MTVfcG11X2NwdW1h c2ssICZpOTE1X3BtdV9jcHVtYXNrKTsKKwkvKiBTZWxlY3QgdGhlIGZpcnN0IG9ubGluZSBDUFUg YXMgYSBkZXNpZ25hdGVkIHJlYWRlci4gKi8KKwlpZiAodGFyZ2V0ID49IG5yX2NwdV9pZHMpCisJ CWNwdW1hc2tfc2V0X2NwdShjcHUsICZpOTE1X3BtdV9jcHVtYXNrKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGk5MTVfcG11X2NwdV9vZmZsaW5lKHVuc2lnbmVkIGludCBjcHUsIHN0 cnVjdCBobGlzdF9ub2RlICpub2RlKQoreworCXN0cnVjdCBpOTE1X3BtdSAqcG11ID0gaGxpc3Rf ZW50cnlfc2FmZShub2RlLCB0eXBlb2YoKnBtdSksIG5vZGUpOworCXVuc2lnbmVkIGludCB0YXJn ZXQ7CisKKwlpZiAoY3B1bWFza190ZXN0X2FuZF9jbGVhcl9jcHUoY3B1LCAmaTkxNV9wbXVfY3B1 bWFzaykpIHsKKwkJdGFyZ2V0ID0gY3B1bWFza19hbnlfYnV0KHRvcG9sb2d5X3NpYmxpbmdfY3B1 bWFzayhjcHUpLCBjcHUpOworCQkvKiBNaWdyYXRlIGV2ZW50cyBpZiB0aGVyZSBpcyBhIHZhbGlk IHRhcmdldCAqLworCQlpZiAodGFyZ2V0IDwgbnJfY3B1X2lkcykgeworCQkJY3B1bWFza19zZXRf Y3B1KHRhcmdldCwgJmk5MTVfcG11X2NwdW1hc2spOworCQkJcGVyZl9wbXVfbWlncmF0ZV9jb250 ZXh0KCZwbXUtPmJhc2UsIGNwdSwgdGFyZ2V0KTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQor Cit2b2lkIGk5MTVfcG11X3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQor eworCWludCByZXQgPSBFTk9UU1VQUDsKKworCWlmIChJTlRFTF9HRU4oaTkxNSkgPD0gMikKKwkJ Z290byBlcnI7CisKKwlyZXQgPSBjcHVocF9zZXR1cF9zdGF0ZV9tdWx0aShDUFVIUF9BUF9QRVJG X1g4Nl9VTkNPUkVfT05MSU5FLAorCQkJCSAgICAgICJwZXJmL3g4Ni9pbnRlbC9pOTE1Om9ubGlu ZSIsCisJCQkJICAgICAgaTkxNV9wbXVfY3B1X29ubGluZSwKKwkJCSAgICAgICAgICAgICAgaTkx NV9wbXVfY3B1X29mZmxpbmUpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gY3B1 aHBfc3RhdGVfYWRkX2luc3RhbmNlKENQVUhQX0FQX1BFUkZfWDg2X1VOQ09SRV9PTkxJTkUsCisJ CQkJICAgICAgICZpOTE1LT5wbXUubm9kZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlp OTE1LT5wbXUuYmFzZS5hdHRyX2dyb3Vwcwk9IGk5MTVfcG11X2F0dHJfZ3JvdXBzOworCWk5MTUt PnBtdS5iYXNlLnRhc2tfY3R4X25yCT0gcGVyZl9pbnZhbGlkX2NvbnRleHQ7CisJaTkxNS0+cG11 LmJhc2UuZXZlbnRfaW5pdAk9IGk5MTVfcG11X2V2ZW50X2luaXQ7CisJaTkxNS0+cG11LmJhc2Uu YWRkCQk9IGk5MTVfcG11X2V2ZW50X2FkZDsKKwlpOTE1LT5wbXUuYmFzZS5kZWwJCT0gaTkxNV9w bXVfZXZlbnRfZGVsOworCWk5MTUtPnBtdS5iYXNlLnN0YXJ0CQk9IGk5MTVfcG11X2V2ZW50X3N0 YXJ0OworCWk5MTUtPnBtdS5iYXNlLnN0b3AJCT0gaTkxNV9wbXVfZXZlbnRfc3RvcDsKKwlpOTE1 LT5wbXUuYmFzZS5yZWFkCQk9IGk5MTVfcG11X2V2ZW50X3JlYWQ7CisJaTkxNS0+cG11LmJhc2Uu ZXZlbnRfaWR4CT0gaTkxNV9wbXVfZXZlbnRfZXZlbnRfaWR4OworCisJc3Bpbl9sb2NrX2luaXQo Jmk5MTUtPnBtdS5sb2NrKTsKKwlocnRpbWVyX2luaXQoJmk5MTUtPnBtdS50aW1lciwgQ0xPQ0tf TU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwlpOTE1LT5wbXUudGltZXIuZnVuY3Rpb24g PSBpOTE1X3NhbXBsZTsKKwlpOTE1LT5wbXUuZW5hYmxlID0gMDsKKworCWlmIChwZXJmX3BtdV9y ZWdpc3RlcigmaTkxNS0+cG11LmJhc2UsICJpOTE1IiwgLTEpKQorCQlpOTE1LT5wbXUuYmFzZS5l dmVudF9pbml0ID0gTlVMTDsKKworZXJyOgorCURSTV9JTkZPKCJGYWlsZWQgdG8gcmVnaXN0ZXIg UE1VIChlcnI9JWQpXG4iLCByZXQpOworfQorCit2b2lkIGk5MTVfcG11X3VucmVnaXN0ZXIoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7CisJaWYgKCFpOTE1LT5wbXUuYmFzZS5ldmVu dF9pbml0KQorCQlyZXR1cm47CisKKwlpOTE1LT5wbXUuZW5hYmxlID0gMDsKKworCXBlcmZfcG11 X3VucmVnaXN0ZXIoJmk5MTUtPnBtdS5iYXNlKTsKKwlpOTE1LT5wbXUuYmFzZS5ldmVudF9pbml0 ID0gTlVMTDsKKworCWhydGltZXJfY2FuY2VsKCZpOTE1LT5wbXUudGltZXIpOworCisJY3B1aHBf c3RhdGVfcmVtb3ZlX2luc3RhbmNlKENQVUhQX0FQX1BFUkZfWDg2X1VOQ09SRV9PTkxJTkUsCisJ CQkJICAgICZpOTE1LT5wbXUubm9kZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCAw YjAzMjYwYTM5NjcuLjhjMzYyZTA0NTFjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC0x ODYsNiArMTg2LDkgQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfbW1pb19yZWdfdmFsaWQoaTkx NV9yZWdfdCByZWcpCiAjZGVmaW5lIFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTCTIKICNkZWZpbmUg Q09QWV9FTkdJTkVfQ0xBU1MJMwogI2RlZmluZSBPVEhFUl9DTEFTUwkJNAorI2RlZmluZSBNQVhf RU5HSU5FX0NMQVNTCTQKKworI2RlZmluZSBNQVhfRU5HSU5FX0lOU1RBTkNFICAgIDEKIAogLyog UENJIGNvbmZpZyBzcGFjZSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9lbmdpbmVfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5j CmluZGV4IDNhZTg5YTlkNjI0MS4uZGJjN2FiZDY1ZjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9lbmdpbmVfY3MuYwpAQCAtMTk4LDYgKzE5OCwxNSBAQCBpbnRlbF9lbmdpbmVfc2V0dXAo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCUdFTV9CVUdfT04oaW5mby0+Y2xh c3MgPj0gQVJSQVlfU0laRShpbnRlbF9lbmdpbmVfY2xhc3NlcykpOwogCWNsYXNzX2luZm8gPSAm aW50ZWxfZW5naW5lX2NsYXNzZXNbaW5mby0+Y2xhc3NdOwogCisJaWYgKEdFTV9XQVJOX09OKGlu Zm8tPmNsYXNzID4gTUFYX0VOR0lORV9DTEFTUykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYg KEdFTV9XQVJOX09OKGluZm8tPmluc3RhbmNlID4gTUFYX0VOR0lORV9JTlNUQU5DRSkpCisJCXJl dHVybiAtRUlOVkFMOworCisJaWYgKEdFTV9XQVJOX09OKGRldl9wcml2LT5lbmdpbmVfY2xhc3Nb aW5mby0+Y2xhc3NdW2luZm8tPmluc3RhbmNlXSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJR0VN X0JVR19PTihkZXZfcHJpdi0+ZW5naW5lW2lkXSk7CiAJZW5naW5lID0ga3phbGxvYyhzaXplb2Yo KmVuZ2luZSksIEdGUF9LRVJORUwpOwogCWlmICghZW5naW5lKQpAQCAtMjI1LDYgKzIzNCw3IEBA IGludGVsX2VuZ2luZV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAK IAlBVE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKCZlbmdpbmUtPmNvbnRleHRfc3RhdHVzX25vdGlm aWVyKTsKIAorCWRldl9wcml2LT5lbmdpbmVfY2xhc3NbaW5mby0+Y2xhc3NdW2luZm8tPmluc3Rh bmNlXSA9IGVuZ2luZTsKIAlkZXZfcHJpdi0+ZW5naW5lW2lkXSA9IGVuZ2luZTsKIAlyZXR1cm4g MDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwppbmRleCAyNjgzNDI0 MzNhOGUuLjdkYjRjNTcyZWY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZm ZXIuYwpAQCAtMjI4MywzICsyMjgzLDI4IEBAIGludCBpbnRlbF9pbml0X3ZlYm94X3JpbmdfYnVm ZmVyKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAogCXJldHVybiBpbnRlbF9pbml0 X3JpbmdfYnVmZmVyKGVuZ2luZSk7CiB9CisKK3N0YXRpYyB1OCB1c2VyX2NsYXNzX21hcFtJOTE1 X0VOR0lORV9DTEFTU19NQVhdID0geworCVtJOTE1X0VOR0lORV9DTEFTU19PVEhFUl0gPSBPVEhF Ul9DTEFTUywKKwlbSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSXSA9IFJFTkRFUl9DTEFTUywKKwlb STkxNV9FTkdJTkVfQ0xBU1NfQ09QWV0gPSBDT1BZX0VOR0lORV9DTEFTUywKKwlbSTkxNV9FTkdJ TkVfQ0xBU1NfVklERU9dID0gVklERU9fREVDT0RFX0NMQVNTLAorCVtJOTE1X0VOR0lORV9DTEFT U19WSURFT19FTkhBTkNFXSA9IFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTLAorfTsKKworc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqCitpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUsIHU4IGNsYXNzLCB1OCBpbnN0YW5jZSkKK3sKKwlpZiAoY2xhc3Mg Pj0gQVJSQVlfU0laRSh1c2VyX2NsYXNzX21hcCkpCisJCXJldHVybiBOVUxMOworCisJY2xhc3Mg PSB1c2VyX2NsYXNzX21hcFtjbGFzc107CisKKwlpZiAoV0FSTl9PTl9PTkNFKGNsYXNzID4gTUFY X0VOR0lORV9DTEFTUykpCisJCXJldHVybiBOVUxMOworCisJaWYgKGluc3RhbmNlID4gTUFYX0VO R0lORV9JTlNUQU5DRSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gaTkxNS0+ZW5naW5lX2Ns YXNzW2NsYXNzXVtpbnN0YW5jZV07Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9yaW5nYnVmZmVyLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVm ZmVyLmgKaW5kZXggNzljMDAyMWYzNzAwLi5jZjA5NWI5Mzg2ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKQEAgLTI0NSw2ICsyNDUsMjggQEAgc3RydWN0IGludGVs X2VuZ2luZV9jcyB7CiAJCUk5MTVfU0VMRlRFU1RfREVDTEFSRShib29sIG1vY2sgOiAxKTsKIAl9 IGJyZWFkY3J1bWJzOwogCisJc3RydWN0IHsKKwkJLyoqCisJCSAqIEBlbmFibGU6IEJpdG1hc2sg b2YgZW5hYmxlIHNhbXBsZSBldmVudHMgb24gdGhpcyBlbmdpbmUuCisJCSAqCisJCSAqIEJpdHMg Y29ycmVzcG9uZCB0byBzYW1wbGUgZXZlbnQgdHlwZXMsIGZvciBpbnN0YW5jZQorCQkgKiBJOTE1 X1NBTVBMRV9RVUVVRUQgaXMgYml0IDAgZXRjLgorCQkgKi8KKwkJdTMyIGVuYWJsZTsKKwkJLyoq CisJCSAqIEBlbmFibGVfY291bnQ6IFJlZmVyZW5jZSBjb3VudCBmb3IgdGhlIGVuYWJsZWQgc2Ft cGxlcnMuCisJCSAqCisJCSAqIEluZGV4IG51bWJlciBjb3JyZXNwb25kcyB0byB0aGUgYml0IG51 bWJlciBmcm9tIEBlbmFibGUuCisJCSAqLworCQl1bnNpZ25lZCBpbnQgZW5hYmxlX2NvdW50W0k5 MTVfUE1VX1NBTVBMRV9CSVRTXTsKKwkJLyoqCisJCSAqIEBzYW1wbGU6IENvdW50ZXIgdmFsdWUg Zm9yIHNhbXBsaW5nIGV2ZW50cy4KKwkJICoKKwkJICogT3VyIGludGVybmFsIHRpbWVyIHN0b3Jl cyB0aGUgY3VycmVudCBjb3VudGVyIGluIHRoaXMgZmllbGQuCisJCSAqLworCQl1NjQgc2FtcGxl W0k5MTVfRU5HSU5FX1NBTVBMRV9NQVhdOworCX0gcG11OworCiAJLyoKIAkgKiBBIHBvb2wgb2Yg b2JqZWN0cyB0byB1c2UgYXMgc2hhZG93IGNvcGllcyBvZiBjbGllbnQgYmF0Y2ggYnVmZmVycwog CSAqIHdoZW4gdGhlIGNvbW1hbmQgcGFyc2VyIGlzIGVuYWJsZWQuIFByZXZlbnRzIHRoZSBjbGll bnQgZnJvbQpAQCAtNzM3LDQgKzc1OSw3IEBAIHZvaWQgaW50ZWxfZW5naW5lc19yZXNldF9kZWZh dWx0X3N1Ym1pc3Npb24oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwogCiBib29sIGlu dGVsX2VuZ2luZV9jYW5fc3RvcmVfZHdvcmQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KTsKIAorc3RydWN0IGludGVsX2VuZ2luZV9jcyAqCitpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHU4IGNsYXNzLCB1OCBpbnN0YW5jZSk7CisK ICNlbmRpZiAvKiBfSU5URUxfUklOR0JVRkZFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91 YXBpL2RybS9pOTE1X2RybS5oIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCmluZGV4IGQ4 ZDEwZDkzMjc1OS4uNmRjMGQ2ZmQ0ZTRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2k5 MTVfZHJtLmgKKysrIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCkBAIC04Niw2ICs4Niw2 NCBAQCBlbnVtIGk5MTVfbW9jc190YWJsZV9pbmRleCB7CiAJSTkxNV9NT0NTX0NBQ0hFRCwKIH07 CiAKK2VudW0gZHJtX2k5MTVfZ2VtX2VuZ2luZV9jbGFzcyB7CisJSTkxNV9FTkdJTkVfQ0xBU1Nf T1RIRVIgPSAwLAorCUk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiA9IDEsCisJSTkxNV9FTkdJTkVf Q0xBU1NfQ09QWSA9IDIsCisJSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8gPSAzLAorCUk5MTVfRU5H SU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UgPSA0LAorCUk5MTVfRU5HSU5FX0NMQVNTX01BWCAvKiBu b24tQUJJICovCit9OworCisvKioKKyAqIERPQzogcGVyZl9ldmVudHMgZXhwb3NlZCBieSBpOTE1 IHRocm91Z2ggL3N5cy9idXMvZXZlbnRfc291cmNlcy9kcml2ZXJzL2k5MTUKKyAqCisgKi8KKwor ZW51bSBkcm1faTkxNV9wbXVfZW5naW5lX3NhbXBsZSB7CisJSTkxNV9TQU1QTEVfUVVFVUVEID0g MCwKKwlJOTE1X1NBTVBMRV9CVVNZID0gMSwKKwlJOTE1X1NBTVBMRV9XQUlUID0gMiwKKwlJOTE1 X1NBTVBMRV9TRU1BID0gMywKKwlJOTE1X0VOR0lORV9TQU1QTEVfTUFYIC8qIG5vbi1BQkkgKi8K K307CisKKyNkZWZpbmUgSTkxNV9QTVVfU0FNUExFX0JJVFMgKDQpCisjZGVmaW5lIEk5MTVfUE1V X1NBTVBMRV9NQVNLICgweGYpCisjZGVmaW5lIEk5MTVfUE1VX1NBTVBMRV9JTlNUQU5DRV9CSVRT ICg4KQorI2RlZmluZSBJOTE1X1BNVV9DTEFTU19TSElGVCBcCisJKEk5MTVfUE1VX1NBTVBMRV9C SVRTICsgSTkxNV9QTVVfU0FNUExFX0lOU1RBTkNFX0JJVFMpCisKKyNkZWZpbmUgX19JOTE1X1BN VV9FTkdJTkUoY2xhc3MsIGluc3RhbmNlLCBzYW1wbGUpIFwKKwkoKGNsYXNzKSA8PCBJOTE1X1BN VV9DTEFTU19TSElGVCB8IFwKKwkoaW5zdGFuY2UpIDw8IEk5MTVfUE1VX1NBTVBMRV9CSVRTIHwg XAorCShzYW1wbGUpKQorCisjZGVmaW5lIEk5MTVfUE1VX0VOR0lORV9RVUVVRUQoY2xhc3MsIGlu c3RhbmNlKSBcCisJX19JOTE1X1BNVV9FTkdJTkUoY2xhc3MsIGluc3RhbmNlLCBJOTE1X1NBTVBM RV9RVUVVRUQpCisKKyNkZWZpbmUgSTkxNV9QTVVfRU5HSU5FX0JVU1koY2xhc3MsIGluc3RhbmNl KSBcCisJX19JOTE1X1BNVV9FTkdJTkUoY2xhc3MsIGluc3RhbmNlLCBJOTE1X1NBTVBMRV9CVVNZ KQorCisjZGVmaW5lIEk5MTVfUE1VX0VOR0lORV9XQUlUKGNsYXNzLCBpbnN0YW5jZSkgXAorCV9f STkxNV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0YW5jZSwgSTkxNV9TQU1QTEVfV0FJVCkKKworI2Rl ZmluZSBJOTE1X1BNVV9FTkdJTkVfU0VNQShjbGFzcywgaW5zdGFuY2UpIFwKKwlfX0k5MTVfUE1V X0VOR0lORShjbGFzcywgaW5zdGFuY2UsIEk5MTVfU0FNUExFX1NFTUEpCisKKyNkZWZpbmUgX19J OTE1X1BNVV9PVEhFUih4KSAoX19JOTE1X1BNVV9FTkdJTkUoMHhmZiwgMHhmZiwgMHhmKSArIDEg KyAoeCkpCisKKyNkZWZpbmUgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWSAJX19JOTE1X1BNVV9P VEhFUigwKQorI2RlZmluZSBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZCV9fSTkxNV9QTVVf T1RIRVIoMSkKKyNkZWZpbmUgSTkxNV9QTVVfRU5FUkdZCQkJX19JOTE1X1BNVV9PVEhFUigyKQor I2RlZmluZSBJOTE1X1BNVV9JTlRFUlJVUFRTCQlfX0k5MTVfUE1VX09USEVSKDMpCisKKyNkZWZp bmUgSTkxNV9QTVVfUkM2X1JFU0lERU5DWQkJX19JOTE1X1BNVV9PVEhFUig0KQorI2RlZmluZSBJ OTE1X1BNVV9SQzZwX1JFU0lERU5DWQkJX19JOTE1X1BNVV9PVEhFUig1KQorI2RlZmluZSBJOTE1 X1BNVV9SQzZwcF9SRVNJREVOQ1kJX19JOTE1X1BNVV9PVEhFUig2KQorCisjZGVmaW5lIEk5MTVf UE1VX0xBU1QgSTkxNV9QTVVfUkM2cHBfUkVTSURFTkNZCisKIC8qIEVhY2ggcmVnaW9uIGlzIGEg bWluaW11bSBvZiAxNmssIGFuZCB0aGVyZSBhcmUgYXQgbW9zdCAyNTUgb2YgdGhlbS4KICAqLwog I2RlZmluZSBJOTE1X05SX1RFWF9SRUdJT05TIDI1NQkvKiB0YWJsZSBzaXplIDJrIC0gbWF4aW11 bSBkdWUgdG8gdXNlCi0tIAoyLjkuNQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4Cg==