From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 04/12] drm/amd: add ACP driver support (v4) Date: Thu, 6 Aug 2015 10:25:04 -0400 Message-ID: <1438871112-25946-4-git-send-email-alexander.deucher@amd.com> References: <1438871112-25946-1-git-send-email-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-yk0-f177.google.com (mail-yk0-f177.google.com [209.85.160.177]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1BBF16EBCB for ; Thu, 6 Aug 2015 07:25:23 -0700 (PDT) Received: by ykcq64 with SMTP id q64so58592994ykc.2 for ; Thu, 06 Aug 2015 07:25:22 -0700 (PDT) In-Reply-To: <1438871112-25946-1-git-send-email-alexander.deucher@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: broonie@kernel.org, airlied@gmail.com, dri-devel@lists.freedesktop.org, alsa-devel@alsa-project.org Cc: maruthi.bayyavarapu@amd.com, lgirdwood@gmail.com, perex@perex.cz, Alex Deucher List-Id: dri-devel@lists.freedesktop.org RnJvbTogTWFydXRoaSBCYXl5YXZhcmFwdSA8bWFydXRoaS5iYXl5YXZhcmFwdUBhbWQuY29tPgoK VGhpcyBhZGRzIHRoZSBBQ1AgKEF1ZGlvIENvUHJvY2Vzc29yKSBJUCBkcml2ZXIgYW5kIHdpcmVz Cml0IHVwIHRvIHRoZSBhbWRncHUgZHJpdmVyLiAgVGhlIEFDUCBibG9jayBwcm92aWRlcyB0aGUg RE1BCmVuZ2luZSBhbmQgYnVzIGZvciB0aGUgaTJzIGNvZGVjIHdoaWNoIGlzIHN1cHBvcnRlZCBi eSBhbgphbHNhIGRyaXZlci4gIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGF1ZGlvIG9uIEFQVXMgdGhh dAp1dGlsaXplIGFuIGkycyBjb2RlYy4KCnYyOiBpbnRlZ3JhdGUgaTJzL2F6IGNoZWNrIHBhdGNo CnYzOiBzL2FtZF9hY3AvYW1kZ3B1X2FjcC8KdjQ6IHVwZGF0ZSBjb3B5cmlnaHQgbm90aWNlCgpS ZXZpZXdlZC1ieTogSmFtbXkgWmhvdSA8SmFtbXkuWmhvdUBhbWQuY29tPgpSZXZpZXdlZC1ieTog TWFydXRoaSBCYXl5YXZhcmFwdSA8bWFydXRoaS5iYXl5YXZhcmFwdUBhbWQuY29tPgpTaWduZWQt b2ZmLWJ5OiBNYXJ1dGhpIEJheXlhdmFyYXB1IDxtYXJ1dGhpLmJheXlhdmFyYXB1QGFtZC5jb20+ ClNpZ25lZC1vZmYtYnk6IENodW5taW5nIFpob3UgPGRhdmlkMS56aG91QGFtZC5jb20+ClNpZ25l ZC1vZmYtYnk6IEFsZXggRGV1Y2hlciA8YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KLS0tCiBk cml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBkcml2 ZXJzL2dwdS9kcm0vYW1kL2FjcC9LY29uZmlnICAgICAgICAgICAgICB8ICAgOSArCiBkcml2ZXJz L2dwdS9kcm0vYW1kL2FjcC9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgOSArCiBkcml2ZXJzL2dw dS9kcm0vYW1kL2FjcC9hY3BfaHcuYyAgICAgICAgICAgICB8IDk2NCArKysrKysrKysrKysrKysr KysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYWNwL2FjcF9ody5oICAgICAgICAgICAg IHwgIDk5ICsrKwogZHJpdmVycy9ncHUvZHJtL2FtZC9hY3AvaW5jbHVkZS9hY3BfZ2Z4X2lmLmgg fCAgNDkgKysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYWNwL2luY2x1ZGUvYW1kX2FjcC5oICAgIHwg MTk2ICsrKysrKwogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUgICAgICAgICAg fCAgMTQgKy0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oICAgICAgICAgIHwg IDExICsKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hY3AuYyAgICAgIHwgMjAx ICsrKysrKwogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FjcC5oICAgICAgfCAg NDAgKysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3ZpLmMgICAgICAgICAgICAgIHwgIDEy ICsKIGRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hbWRfc2hhcmVkLmggICAgIHwgICAxICsK IDEzIGZpbGVzIGNoYW5nZWQsIDE2MDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvYWNwL0tjb25maWcKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FjcC9NYWtlZmlsZQogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvYWNwL2FjcF9ody5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9hY3AvYWNwX2h3LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vYW1kL2FjcC9pbmNsdWRlL2FjcF9nZnhfaWYuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvYWNwL2luY2x1ZGUvYW1kX2FjcC5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FjcC5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FjcC5oCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2Nv bmZpZwppbmRleCA4YzNjYzllLi44OGRhZWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v S2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMTQ0LDYgKzE0NCw4IEBA IGNvbmZpZyBEUk1fQU1ER1BVCiAKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv S2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYW1kL2FjcC9LY29uZmlnIgorCiBz b3VyY2UgImRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWciCiAKIGNvbmZpZyBEUk1fSTgx MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hY3AvS2NvbmZpZyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYWNwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uMTFjNWZhZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYWNwL0tj b25maWcKQEAgLTAsMCArMSw5IEBACittZW51ICJBQ1AgQ29uZmlndXJhdGlvbiIKKworY29uZmln IERSTV9BTURfQUNQCisgICAgICAgYm9vbCAiRW5hYmxlIEFDUCBJUCBzdXBwb3J0IgorICAgICAg IGRlZmF1bHQgeQorICAgICAgIGhlbHAKKwlDaG9vc2UgdGhpcyBvcHRpb24gdG8gZW5hYmxlIEFD UCBJUCBzdXBwb3J0IGZvciBBTUQgU09Dcy4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9hY3AvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FjcC9NYWtl ZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGMzMzAzCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hY3AvTWFrZWZpbGUKQEAgLTAsMCArMSw5 IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgQUNQLCB3aGljaCBpcyBhIHN1Yi1jb21wb25lbnQK KyMgb2YgQU1EU09DL0FNREdQVSBkcm0gZHJpdmVyLgorIyBJdCBwcm92aWRlcyB0aGUgSFcgY29u dHJvbCBmb3IgQUNQIHJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzLgorCitjY2ZsYWdzLXkgKz0gLUlk cml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvYWNwCitzdWJkaXItY2NmbGFncy15 ICs9IC1JJChBTURBQ1BQQVRIKS8gLUkkKEFNREFDUFBBVEgpL2luY2x1ZGUKKworQU1EX0FDUF9G SUxFUyA6PSAkKEFNREFDUFBBVEgpL2FjcF9ody5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FjcC9hY3BfaHcuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYWNwL2FjcF9ody5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2OWZlYTcKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FjcC9hY3BfaHcuYwpAQCAtMCwwICsxLDk2NCBAQAor LyoKKyAqIENvcHlyaWdodCAyMDE1IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor ICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVS KFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICog T1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBT T0ZUV0FSRS4KKyAqCisgKiBOT1RFOgorICogQ2VydGFpbiBwaWVjZXMgd2VyZSByZXVzZWQgZnJv bSBTeW5vcHNpcyBJMlMgSVAgcmVsYXRlZCBjb2RlLAorICogd2hpY2ggb3RoZXJ3aXNlIGNhbiBh bHNvIGJlIGZvdW5kIGF0OgorICogc291bmQvc29jL2R3Yy9kZXNpZ253YXJlX2kycy5jCisgKgor ICogQ29weXJpZ2h0IG5vdGljZSBhcyBhcHBlYXJzIGluIHRoZSBhYm92ZSBmaWxlOgorICoKKyAq IENvcHlyaWdodCAoQykgMjAxMCBTVCBNaWNyb2VsZWN0cm9uaWNzCisgKiBSYWplZXYgS3VtYXIg PHJhamVldmt1bWFyLmxpbnV4QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5z ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug dmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQor ICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICov CisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNs dWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUg PGxpbnV4L2Vycm5vLmg+CisKKyNkZWZpbmUgVklTTEFORFMzMF9JVl9TUkNJRF9BQ1AgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYTIgIC8vIDE2MgorCisjaW5jbHVkZSAi YWNwX2dmeF9pZi5oIgorI2luY2x1ZGUgImFjcF9ody5oIgorCisjaW5jbHVkZSAiYWNwXzJfMl9k LmgiCisjaW5jbHVkZSAiYWNwXzJfMl9zaF9tYXNrLmgiCisKKy8qIENvbmZpZ3VyZSBhIGdpdmVu IGRtYSBjaGFubmVsIHBhcmFtZXRlcnMgLSBlbmFibGUvZGlzYmxlLAorICogbnVtYmVyIG9mIGRl c2NyaXB0b3JzLCBwcmlvcml0eSAqLworCitzdGF0aWMgdm9pZCBjb25maWdfYWNwX2RtYV9jaGFu bmVsKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwgdTggY2hfbnVtLAorCQkJCSAgIHUx NiBkc2NyX3N0cnRfaWR4LCB1MTYgbnVtX2RzY3JzLAorCQkJCSAgIGVudW0gYWNwX2RtYV9wcmlv cml0eV9sZXZlbCBwcmlvcml0eV9sZXZlbCkKK3sKKwl1MzIgZG1hX2N0cmw7CisJc3RydWN0IGFt ZF9hY3BfcHJpdmF0ZSAqYWNwX3BydiA9IChzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICopYWNwX2Rl djsKKworCS8qIHJlYWQgdGhlIGRtYSBjb250cm9sIHJlZ2lzdGVyIGFuZCBkaXNhYmxlIHRoZSBj aGFubmVsIHJ1biBmaWVsZCAqLworCWRtYV9jdHJsID0gY2dzX3JlYWRfcmVnaXN0ZXIoYWNwX3By di0+Y2dzX2RldmljZSwKKwkJCQkgICAgIG1tQUNQX0RNQV9DTlRMXzAgKyBjaF9udW0pOworCS8q IGNsZWFyIHRoZSBkbWEgY2hhbm5lbCBjb250cm9sIGJpdHMgKi8KKwlkbWFfY3RybCAmPSB+QUNQ X0RNQV9DTlRMXzBfX0RNQUNoUnVuX01BU0s7CisKKwljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3By di0+Y2dzX2RldmljZSwgKG1tQUNQX0RNQV9DTlRMXzAgKyBjaF9udW0pLAorCQkJICAgZG1hX2N0 cmwpOworCisJLyogdGhlcmUgaXMgbm8gdHJhbnNmZXIgaGFwcGVuaW5nIG9uIHRoaXMgY2hhbm5l bCBzbworCSAqIHByb2dyYW0gRE1BQ2hEc2NyU3RySWR4IHRvIHRoZSBpbmRleCBudW1iZXIgb2Yg dGhlIGZpcnN0IGRlc2NyaXB0b3IKKwkgKiB0byBiZSBwcm9jZXNzZWQuCisJICovCisJY2dzX3dy aXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkgICAobW1BQ1BfRE1BX0RTQ1Jf U1RSVF9JRFhfMCArIGNoX251bSksCisJCQkgICAoQUNQX0RNQV9EU0NSX1NUUlRfSURYXzBfX0RN QUNoRHNjclN0cnRJZHhfTUFTSyAmCisJCQkgICAgZHNjcl9zdHJ0X2lkeCkpOworCisJLyogcHJv Z3JhbSBETUFDaERzY3JEc2NyQ250IHRvIHRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgdG8gYmUK KwkgKiBwcm9jZXNzZWQgaW4gdGhlIHRyYW5zZmVyCisJICovCisJY2dzX3dyaXRlX3JlZ2lzdGVy KGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkgICAobW1BQ1BfRE1BX0RTQ1JfQ05UXzAgKyBjaF9u dW0pLAorCQkJICAgKEFDUF9ETUFfRFNDUl9DTlRfMF9fRE1BQ2hEc2NyQ250X01BU0sgJiBudW1f ZHNjcnMpKTsKKworCS8qIHNldCBETUFDaFByaW9MdmwgYWNjb3JkaW5nIHRvIHRoZSBwcmlvcml0 eSAqLworCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAkobW1BQ1BfRE1B X1BSSU9fMCArIGNoX251bSksCisJCQkgICBwcmlvcml0eV9sZXZlbCk7Cit9CisKKworCisvKiBJ bml0aWFsaXplIHRoZSBkbWEgZGVzY3JpcHRvcnMgbG9jYXRpb24gaW4gU1JBTSBhbmQgcGFnZSBz aXplICovCitzdGF0aWMgdm9pZCBhY3BfZG1hX2Rlc2NyX2luaXQoc3RydWN0IGFtZF9hY3BfZGV2 aWNlICphY3BfZGV2KQoreworCXUzMiBzcmFtX3B0ZV9vZmZzZXQgPSAwOworCXN0cnVjdCBhbWRf YWNwX3ByaXZhdGUgKmFjcF9wcnYgPSAoc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAqKWFjcF9kZXY7 CisKKwkvKiBTUkFNIHN0YXJ0cyBhdCAweDA0MDAwMDAwLiBGcm9tIHRoYXQgb2Zmc2V0IG9uZSBw YWdlICg0S0IpIGxlZnQgZm9yCisJICogZmlsbGluZyBETUEgZGVzY3JpcHRvcnMuc3JhbV9wdGVf b2Zmc2V0ID0gMHgwNDAwMTAwMCAsIHVzZWQgZm9yCisJICogZmlsbGluZyBzeXN0ZW0gUkFNJ3Mg cGh5c2ljYWwgcGFnZXMuCisJICogVGhpcyBiZWNvbWVzIHRoZSBBTFNBJ3MgUmluZyBidWZmZXIg c3RhcnQgYWRkcmVzcworCSAqLworCXNyYW1fcHRlX29mZnNldCA9IEFDUF9EQUdCX0dSUF9TUkFN X0JBU0VfQUREUkVTUzsKKworCS8qIHNub29wYWJsZSAqLworCXNyYW1fcHRlX29mZnNldCB8PSBB Q1BfREFHQl9CQVNFX0FERFJfR1JQXzFfX0FYSTJEQUdCU25vb3BTZWxfTUFTSzsKKwkvKiBNZW1t b3J5IGlzIHN5c3RlbSBtbWVtb3J5ICovCisJc3JhbV9wdGVfb2Zmc2V0IHw9IEFDUF9EQUdCX0JB U0VfQUREUl9HUlBfMV9fQVhJMkRBR0JUYXJnZXRNZW1TZWxfTUFTSzsKKwkvKiBQYWdlIEVuYWJs ZWQgKi8KKwlzcmFtX3B0ZV9vZmZzZXQgfD0gQUNQX0RBR0JfQkFTRV9BRERSX0dSUF8xX19BWEky REFHQkdycEVuYWJsZV9NQVNLOworCisJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19k ZXZpY2UsCW1tQUNQX0RBR0JfQkFTRV9BRERSX0dSUF8xLAorCQkJICAgc3JhbV9wdGVfb2Zmc2V0 KTsKKwljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwJbW1BQ1BfREFHQl9Q QUdFX1NJWkVfR1JQXzEsCisJCQkgICBQQUdFX1NJWkVfNEtfRU5BQkxFKTsKK30KKworLyogSW5p dGlhbGl6ZSBhIGRtYSBkZXNjcmlwdG9yIGluIFNSQU0gYmFzZWQgb24gZGVzY3JpdG9yIGluZm9y bWF0aW9uIHBhc3NlZCAqLworc3RhdGljIHZvaWQgY29uZmlnX2RtYV9kZXNjcmlwdG9yX2luX3Ny YW0oc3RydWN0IGFtZF9hY3BfZGV2aWNlICphY3BfZGV2LAorCQkJCQkgIHUxNiBkZXNjcl9pZHgs CisJCQkJCSAgYWNwX2RtYV9kc2NyX3RyYW5zZmVyX3QgKmRlc2NyX2luZm8pCit7CisJdTMyIHNy YW1fb2Zmc2V0OworCXN0cnVjdCBhbWRfYWNwX3ByaXZhdGUgKmFjcF9wcnYgPSAoc3RydWN0IGFt ZF9hY3BfcHJpdmF0ZSAqKWFjcF9kZXY7CisKKwlzcmFtX29mZnNldCA9IChkZXNjcl9pZHggKiBz aXplb2YoYWNwX2RtYV9kc2NyX3RyYW5zZmVyX3QpKTsKKworCS8qIHByb2dyYW0gdGhlIHNvdXJj ZSBiYXNlIGFkZHJlc3MuICovCisJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZp Y2UsCW1tQUNQX1NSQk1fVGFyZ19JZHhfQWRkciwKKwkJCSAgIHNyYW1fb2Zmc2V0KTsKKwljZ3Nf d3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwJbW1BQ1BfU1JCTV9UYXJnX0lkeF9E YXRhLAorCQkJICAgZGVzY3JfaW5mby0+c3JjKTsKKwkvKiBwcm9ncmFtIHRoZSBkZXN0aW5hdGlv biBiYXNlIGFkZHJlc3MuICovCisJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZp Y2UsCW1tQUNQX1NSQk1fVGFyZ19JZHhfQWRkciwKKwkJCSAgIChzcmFtX29mZnNldCArIDQpKTsK KwljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwJbW1BQ1BfU1JCTV9UYXJn X0lkeF9EYXRhLAorCQkJCQkJZGVzY3JfaW5mby0+ZGVzdCk7CisKKwkvKiBwcm9ncmFtIHRoZSBu dW1iZXIgb2YgYnl0ZXMgdG8gYmUgdHJhbnNmZXJyZWQgZm9yIHRoaXMgZGVzY3JpcHRvci4gKi8K KwljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwJbW1BQ1BfU1JCTV9UYXJn X0lkeF9BZGRyLAorCQkJICAgKHNyYW1fb2Zmc2V0ICsgOCkpOworCWNnc193cml0ZV9yZWdpc3Rl cihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAltbUFDUF9TUkJNX1RhcmdfSWR4X0RhdGEsCisJCQkgICBk ZXNjcl9pbmZvLT5zaXplX3hmZXJfZGlyLnZhbCk7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIERN QSBkZXNjcmlwdG9yIGluZm9ybWF0aW9uICovCitzdGF0aWMgdm9pZCBzZXRfYWNwX3N5c21lbV9k bWFfZGVzY3JpcHRvcnMoc3RydWN0IGFtZF9hY3BfZGV2aWNlICphY3BfZGV2LAorCQkJCQkgICB1 MzIgc2l6ZSwgaW50IGRpcmVjdGlvbiwgdTMyIHB0ZV9vZmZzZXQpCit7CisJdTE2IGRtYV9kc2Ny X2lkeCA9IFBMQVlCQUNLX1NUQVJUX0RNQV9ERVNDUl9DSDEyOworCXUxNiBudW1fZGVzY3I7CisJ YWNwX2RtYV9kc2NyX3RyYW5zZmVyX3QgZG1hZHNjclsyXTsKKworCW51bV9kZXNjciA9IDI7CisK KwlkbWFkc2NyWzBdLnNpemVfeGZlcl9kaXIudmFsID0gKHUzMikgMHgwOworCWlmIChkaXJlY3Rp b24gPT0gU1RSRUFNX1BMQVlCQUNLKSB7CisJCWRtYV9kc2NyX2lkeCA9IFBMQVlCQUNLX1NUQVJU X0RNQV9ERVNDUl9DSDEyOworCQlkbWFkc2NyWzBdLmRlc3QgPSBBQ1BfU0hBUkVEX1JBTV9CQU5L XzM4X0FERFJFU1M7CisJCWRtYWRzY3JbMF0uc3JjID0gQUNQX0lOVEVSTkFMX0FQRVJUVVJFX1dJ TkRPV18wX0FERFJFU1MgKworCQkJKHB0ZV9vZmZzZXQgKiBQQUdFX1NJWkVfNEspOworCQlkbWFk c2NyWzBdLnNpemVfeGZlcl9kaXIucy50cmFuc19kaXJlY3Rpb24gPQorCQkgICAgQUNQX0RNQV9B VFRSSUJVVEVTX0RBR0JfT05JT05fVE9fU0hBUkVETUVNOworCX0gZWxzZSBpZiAoZGlyZWN0aW9u ID09IFNUUkVBTV9DQVBUVVJFKSB7CisJCWRtYV9kc2NyX2lkeCA9IENBUFRVUkVfU1RBUlRfRE1B X0RFU0NSX0NIMTQ7CisJCWRtYWRzY3JbMF0uc3JjID0gQUNQX1NIQVJFRF9SQU1fQkFOS180N19B RERSRVNTOworCQlkbWFkc2NyWzBdLmRlc3QgPSBBQ1BfSU5URVJOQUxfQVBFUlRVUkVfV0lORE9X XzBfQUREUkVTUyArCisJCQkocHRlX29mZnNldCAqIFBBR0VfU0laRV80Syk7CisJCWRtYWRzY3Jb MF0uc2l6ZV94ZmVyX2Rpci5zLnRyYW5zX2RpcmVjdGlvbiA9CisJCSAgICBBQ1BfRE1BX0FUVFJJ QlVURVNfU0hBUkVETUVNX1RPX0RBR0JfT05JT047CisJfQorCisJLyogYWxsb3QgMSBwZXJpb2Qg c2l6ZSBwZXIgZGVzY3JpcHRvciA9IHRvdGFsIHNpemUgKHNpemUpIC8yCisJICogPT4gcGFyYW1z X2J1ZmZlcl9ieXRlcyhwYXJhbXMpL3BhcmFtc19wZXJpb2RzKHBhcmFtcyk7CisJICovCisJZG1h ZHNjclswXS5zaXplX3hmZXJfZGlyLnMuc2l6ZSA9IHNpemUgLyAyOworCisJZG1hZHNjclswXS5z aXplX3hmZXJfZGlyLnMuaW9jID0gKHUzMikgMHgwOworCisJY29uZmlnX2RtYV9kZXNjcmlwdG9y X2luX3NyYW0oYWNwX2RldiwgZG1hX2RzY3JfaWR4LCAmZG1hZHNjclswXSk7CisKKwlkbWFkc2Ny WzFdLnNpemVfeGZlcl9kaXIudmFsID0gKHUzMikgMHgwOworCWRtYWRzY3JbMV0uZGVzdCA9IGRt YWRzY3JbMF0uZGVzdCArIGRtYWRzY3JbMF0uc2l6ZV94ZmVyX2Rpci5zLnNpemU7CisJZG1hZHNj clsxXS5zcmMgPSBkbWFkc2NyWzBdLnNyYyArIGRtYWRzY3JbMF0uc2l6ZV94ZmVyX2Rpci5zLnNp emU7CisJZG1hZHNjclsxXS5zaXplX3hmZXJfZGlyLnMuc2l6ZSA9IGRtYWRzY3JbMF0uc2l6ZV94 ZmVyX2Rpci5zLnNpemU7CisJZG1hZHNjclsxXS5zaXplX3hmZXJfZGlyLnMuaW9jID0gKHUzMikg MHgwOworCisJaWYgKGRpcmVjdGlvbiA9PSBTVFJFQU1fUExBWUJBQ0spIHsKKwkJZG1hX2RzY3Jf aWR4ID0gUExBWUJBQ0tfRU5EX0RNQV9ERVNDUl9DSDEyOworCQlkbWFkc2NyWzFdLnNpemVfeGZl cl9kaXIucy50cmFuc19kaXJlY3Rpb24gPQorCQkgICAgQUNQX0RNQV9BVFRSSUJVVEVTX0RBR0Jf T05JT05fVE9fU0hBUkVETUVNOworCX0gZWxzZSBpZiAoZGlyZWN0aW9uID09IFNUUkVBTV9DQVBU VVJFKSB7CisJCWRtYV9kc2NyX2lkeCA9IENBUFRVUkVfRU5EX0RNQV9ERVNDUl9DSDE0OworCQlk bWFkc2NyWzFdLnNpemVfeGZlcl9kaXIucy50cmFuc19kaXJlY3Rpb24gPQorCQkgICAgQUNQX0RN QV9BVFRSSUJVVEVTX1NIQVJFRE1FTV9UT19EQUdCX09OSU9OOworCX0KKworCWNvbmZpZ19kbWFf ZGVzY3JpcHRvcl9pbl9zcmFtKGFjcF9kZXYsIGRtYV9kc2NyX2lkeCwgJmRtYWRzY3JbMV0pOwor CisJaWYgKGRpcmVjdGlvbiA9PSBTVFJFQU1fUExBWUJBQ0spIHsKKwkJLyogc3RhcnRpbmcgZGVz Y3JpcHRvciBmb3IgdGhpcyBjaGFubmVsICovCisJCWRtYV9kc2NyX2lkeCA9IFBMQVlCQUNLX1NU QVJUX0RNQV9ERVNDUl9DSDEyOworCQljb25maWdfYWNwX2RtYV9jaGFubmVsKGFjcF9kZXYsIFNZ U1JBTV9UT19BQ1BfQ0hfTlVNLAorCQkJCQlkbWFfZHNjcl9pZHgsIG51bV9kZXNjciwKKwkJCQkJ QUNQX0RNQV9QUklPUklUWV9MRVZFTF9OT1JNQUwpOworCX0gZWxzZSBpZiAoZGlyZWN0aW9uID09 IFNUUkVBTV9DQVBUVVJFKSB7CisJCS8qIHN0YXJ0aW5nIGRlc2NyaXB0b3IgZm9yIHRoaXMgY2hh bm5lbCAqLworCQlkbWFfZHNjcl9pZHggPSBDQVBUVVJFX1NUQVJUX0RNQV9ERVNDUl9DSDE0Owor CQljb25maWdfYWNwX2RtYV9jaGFubmVsKGFjcF9kZXYsIEFDUF9UT19TWVNSQU1fQ0hfTlVNLAor CQkJCQlkbWFfZHNjcl9pZHgsIG51bV9kZXNjciwKKwkJCQkJQUNQX0RNQV9QUklPUklUWV9MRVZF TF9OT1JNQUwpOworCX0KK30KKworLyogSW5pdGlhbGl6ZSB0aGUgaTJzIGRtYSBkZXNjcmlwdG9y cyBpbiBTUkFNICovCitzdGF0aWMgdm9pZCBzZXRfYWNwX3RvX2kyc19kbWFfZGVzY3JpcHRvcnMo c3RydWN0IGFtZF9hY3BfZGV2aWNlICphY3BfZGV2LAorCQkJCQkgICB1MzIgc2l6ZSwgaW50IGRp cmVjdGlvbikKK3sKKworCXUxNiBudW1fZGVzY3I7CisJdTE2IGRtYV9kc2NyX2lkeCA9IFBMQVlC QUNLX1NUQVJUX0RNQV9ERVNDUl9DSDEzOworCWFjcF9kbWFfZHNjcl90cmFuc2Zlcl90IGRtYWRz Y3JbMl07CisKKwludW1fZGVzY3IgPSAyOworCisJLyogTGV0IEkycyBLbm93IHRoZSBkaXJlY3Rp b24gb2YgdHJhbnNmZXIgYW5kIHNvdXJjZS9kZXN0aW5hdGlvbgorCSAqICBvZiBkYXRhCisJICov CisJZG1hZHNjclswXS5zaXplX3hmZXJfZGlyLnZhbCA9ICh1MzIpIDB4MDsKKwlkbWFkc2NyWzBd LnNpemVfeGZlcl9kaXIucy5zaXplID0gKHNpemUgLyAyKTsKKwlkbWFkc2NyWzBdLnNpemVfeGZl cl9kaXIucy5pb2MgPSAodTMyKSAweDE7CisJaWYgKGRpcmVjdGlvbiA9PSBTVFJFQU1fUExBWUJB Q0spIHsKKwkJZG1hX2RzY3JfaWR4ID0gUExBWUJBQ0tfU1RBUlRfRE1BX0RFU0NSX0NIMTM7CisJ CWRtYWRzY3JbMF0uc3JjID0gQUNQX1NIQVJFRF9SQU1fQkFOS18zOF9BRERSRVNTOworCQlkbWFk c2NyWzBdLnNpemVfeGZlcl9kaXIucy50cmFuc19kaXJlY3Rpb24gPSBUT19BQ1BfSTJTXzE7CisJ fSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gU1RSRUFNX0NBUFRVUkUpIHsKKwkJZG1hX2RzY3JfaWR4 ID0gQ0FQVFVSRV9TVEFSVF9ETUFfREVTQ1JfQ0gxNTsKKwkJZG1hZHNjclswXS5kZXN0ID0gQUNQ X1NIQVJFRF9SQU1fQkFOS180N19BRERSRVNTOworCQlkbWFkc2NyWzBdLnNpemVfeGZlcl9kaXIu cy50cmFuc19kaXJlY3Rpb24gPSAweGE7CisJfQorCWNvbmZpZ19kbWFfZGVzY3JpcHRvcl9pbl9z cmFtKGFjcF9kZXYsIGRtYV9kc2NyX2lkeCwgJmRtYWRzY3JbMF0pOworCisJZG1hZHNjclsxXS5z aXplX3hmZXJfZGlyLnZhbCA9ICh1MzIpIDB4MDsKKwlkbWFkc2NyWzFdLnNpemVfeGZlcl9kaXIu cy5zaXplID0gKHNpemUgLyAyKTsKKwlkbWFkc2NyWzFdLnNpemVfeGZlcl9kaXIucy5pb2MgPSAo dTMyKSAweDE7CisJaWYgKGRpcmVjdGlvbiA9PSBTVFJFQU1fUExBWUJBQ0spIHsKKwkJZG1hX2Rz Y3JfaWR4ID0gUExBWUJBQ0tfRU5EX0RNQV9ERVNDUl9DSDEzOworCQlkbWFkc2NyWzFdLnNyYyA9 IGRtYWRzY3JbMF0uc3JjICsKKwkJICAgIGRtYWRzY3JbMF0uc2l6ZV94ZmVyX2Rpci5zLnNpemU7 CisJCWRtYWRzY3JbMV0uc2l6ZV94ZmVyX2Rpci5zLnRyYW5zX2RpcmVjdGlvbiA9IFRPX0FDUF9J MlNfMTsKKworCX0gZWxzZSBpZiAoZGlyZWN0aW9uID09IFNUUkVBTV9DQVBUVVJFKSB7CisJCWRt YV9kc2NyX2lkeCA9IENBUFRVUkVfRU5EX0RNQV9ERVNDUl9DSDE1OworCQlkbWFkc2NyWzFdLmRl c3QgPSBkbWFkc2NyWzBdLmRlc3QgKworCQkgICAgZG1hZHNjclswXS5zaXplX3hmZXJfZGlyLnMu c2l6ZTsKKwkJZG1hZHNjclsxXS5zaXplX3hmZXJfZGlyLnMudHJhbnNfZGlyZWN0aW9uID0gMHhh OworCX0KKwljb25maWdfZG1hX2Rlc2NyaXB0b3JfaW5fc3JhbShhY3BfZGV2LCBkbWFfZHNjcl9p ZHgsICZkbWFkc2NyWzFdKTsKKworCS8qIENvbmZpZ3VyZSB0aGUgRE1BIGNoYW5uZWwgd2l0aCB0 aGUgYWJvdmUgZGVzY3JpcHRvcmUgKi8KKwlpZiAoZGlyZWN0aW9uID09IFNUUkVBTV9QTEFZQkFD SykgeworCQkvKiBzdGFydGluZyBkZXNjcmlwdG9yIGZvciB0aGlzIGNoYW5uZWwgKi8KKwkJZG1h X2RzY3JfaWR4ID0gUExBWUJBQ0tfU1RBUlRfRE1BX0RFU0NSX0NIMTM7CisJCWNvbmZpZ19hY3Bf ZG1hX2NoYW5uZWwoYWNwX2RldiwgQUNQX1RPX0kyU19ETUFfQ0hfTlVNLAorCQkJCQlkbWFfZHNj cl9pZHgsIG51bV9kZXNjciwKKwkJCQkJQUNQX0RNQV9QUklPUklUWV9MRVZFTF9OT1JNQUwpOwor CX0gZWxzZSBpZiAoZGlyZWN0aW9uID09IFNUUkVBTV9DQVBUVVJFKSB7CisJCS8qIHN0YXJ0aW5n IGRlc2NyaXB0b3IgZm9yIHRoaXMgY2hhbm5lbCAqLworCQlkbWFfZHNjcl9pZHggPSBDQVBUVVJF X1NUQVJUX0RNQV9ERVNDUl9DSDE1OworCQljb25maWdfYWNwX2RtYV9jaGFubmVsKGFjcF9kZXYs IEkyU19UT19BQ1BfRE1BX0NIX05VTSwKKwkJCQkJZG1hX2RzY3JfaWR4LCBudW1fZGVzY3IsCisJ CQkJCUFDUF9ETUFfUFJJT1JJVFlfTEVWRUxfTk9STUFMKTsKKwl9CisKK30KKworc3RhdGljIHUx NiBnZXRfZHNjcl9pZHgoc3RydWN0IGFtZF9hY3BfZGV2aWNlICphY3BfZGV2LCBpbnQgZGlyZWN0 aW9uKQoreworCXUxNiBkc2NyX2lkeDsKKwlzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJ2 ID0gKHN0cnVjdCBhbWRfYWNwX3ByaXZhdGUgKilhY3BfZGV2OworCisJaWYgKGRpcmVjdGlvbiA9 PSBTVFJFQU1fUExBWUJBQ0spIHsKKwkJZHNjcl9pZHggPSBjZ3NfcmVhZF9yZWdpc3RlcihhY3Bf cHJ2LT5jZ3NfZGV2aWNlLAorCQkJCQkJCW1tQUNQX0RNQV9DVVJfRFNDUl8xMyk7CisJCWRzY3Jf aWR4ID0gKGRzY3JfaWR4ID09IFBMQVlCQUNLX1NUQVJUX0RNQV9ERVNDUl9DSDEzKSA/CisJCQkJ UExBWUJBQ0tfRU5EX0RNQV9ERVNDUl9DSDEyIDoKKwkJCQlQTEFZQkFDS19TVEFSVF9ETUFfREVT Q1JfQ0gxMjsKKwl9IGVsc2UgeworCQlkc2NyX2lkeCA9IGNnc19yZWFkX3JlZ2lzdGVyKGFjcF9w cnYtPmNnc19kZXZpY2UsCisJCQkJCQkJbW1BQ1BfRE1BX0NVUl9EU0NSXzE1KTsKKwkJZHNjcl9p ZHggPSAoZHNjcl9pZHggPT0gQ0FQVFVSRV9TVEFSVF9ETUFfREVTQ1JfQ0gxNSkgPworCQkJCUNB UFRVUkVfRU5EX0RNQV9ERVNDUl9DSDE0IDoKKwkJCQlDQVBUVVJFX1NUQVJUX0RNQV9ERVNDUl9D SDE0OworCX0KKworCXJldHVybiBkc2NyX2lkeDsKKworfQorCisvKglDcmVhdGUgcGFnZSB0YWJs ZSBlbnRyaWVzIGluIEFDUCBTUkFNIGZvciB0aGUgYWxsb2NhdGVkIG1lbW9yeSAqLworc3RhdGlj IHZvaWQgYWNwX3B0ZV9jb25maWcoc3RydWN0IGFtZF9hY3BfZGV2aWNlICphY3BfZGV2LCBzdHJ1 Y3QgcGFnZSAqcGcsCisJCQkgICB1MTYgbnVtX29mX3BhZ2VzLCB1MzIgcHRlX29mZnNldCkKK3sK Kwl1MTYgcGFnZV9pZHg7CisJdTY0IGFkZHI7CisJdTMyIGxvdzsKKwl1MzIgaGlnaDsKKwl1MzIg b2Zmc2V0OworCXN0cnVjdCBhbWRfYWNwX3ByaXZhdGUgKmFjcF9wcnYgPSAoc3RydWN0IGFtZF9h Y3BfcHJpdmF0ZSAqKWFjcF9kZXY7CisKKwlvZmZzZXQJPSBBQ1BfREFHQl9HUlBfU1JCTV9TUkFN X0JBU0VfT0ZGU0VUICsgKHB0ZV9vZmZzZXQgKiA4KTsKKwlmb3IgKHBhZ2VfaWR4ID0gMDsgcGFn ZV9pZHggPCAobnVtX29mX3BhZ2VzKTsgcGFnZV9pZHgrKykgeworCQkvKiBMb2FkIHRoZSBsb3cg YWRkcmVzcyBvZiBwYWdlIGludCBBQ1AgU1JBTSB0aHJvdWdoIFNSQk0gKi8KKwkJY2dzX3dyaXRl X3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkJICAgbW1BQ1BfU1JCTV9UYXJnX0lk eF9BZGRyLAorCQkJCSAgIChvZmZzZXQgKyAocGFnZV9pZHggKiA4KSkpOworCQlhZGRyID0gcGFn ZV90b19waHlzKHBnKTsKKworCQlsb3cgPSBsb3dlcl8zMl9iaXRzKGFkZHIpOworCQloaWdoID0g dXBwZXJfMzJfYml0cyhhZGRyKTsKKworCQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dz X2RldmljZSwKKwkJCQkgICBtbUFDUF9TUkJNX1RhcmdfSWR4X0RhdGEsIGxvdyk7CisKKwkJLyog TG9hZCB0aGUgSGlnaCBhZGRyZXNzIG9mIHBhZ2UgaW50IEFDUCBTUkFNIHRocm91Z2ggU1JCTSAq LworCQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCQkgICBtbUFD UF9TUkJNX1RhcmdfSWR4X0FkZHIsCisJCQkJICAgKG9mZnNldCArIChwYWdlX2lkeCAqIDgpICsg NCkpOworCisJCS8qIHBhZ2UgZW5hYmxlIGluIEFDUCAqLworCQloaWdoIHw9IEJJVCgzMSk7CisJ CWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAorCQkJCSAgIG1tQUNQX1NS Qk1fVGFyZ19JZHhfRGF0YSwgaGlnaCk7CisKKwkJLyogTW92ZSB0byBuZXh0IHBoeXNpY2FsbHkg Y29udGlndW9zIHBhZ2UgKi8KKwkJcGcrKzsKKwl9Cit9CisKKworLyogZW5hYmxlcy9kaXNhYmxl cyBBQ1AncyBleHRlcm5hbCBpbnRlcnJ1cHQgKi8KK3N0YXRpYyB2b2lkIGFjcF9lbmFibGVfZXh0 ZXJuYWxfaW50ZXJydXB0cyhzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYsCisJCQkJCSAg IGludCBlbmFibGUpCit7CisJdTMyIGFjcF9leHRfaW50cl9lbmI7CisJc3RydWN0IGFtZF9hY3Bf cHJpdmF0ZSAqYWNwX3BydiA9IChzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICopYWNwX2RldjsKKwor CWFjcF9leHRfaW50cl9lbmIgPSBlbmFibGUgPworCQlBQ1BfRVhURVJOQUxfSU5UUl9FTkJfX0FD UEV4dEludHJFbmJfTUFTSyA6CisJCTA7CisKKwkvKiBXcml0ZSB0aGUgU29mdHdhcmUgRXh0ZXJu YWwgSW50ZXJydXB0IEVuYWJsZSByZWdpc3RlciAqLworCWNnc193cml0ZV9yZWdpc3RlcihhY3Bf cHJ2LT5jZ3NfZGV2aWNlLAorCQkJICAgbW1BQ1BfRVhURVJOQUxfSU5UUl9FTkIsIGFjcF9leHRf aW50cl9lbmIpOworfQorCisvKglDbGVhciAoYWNrbm93bGVkZ2UpIERNQSAnSW50ZXJydXB0IG9u IENvbXBsZXRlJyAoSU9DKSBpbiBBQ1AKKyAqCWV4dGVybmFsIGludGVycnVwdCBzdGF0dXMgcmVn aXN0ZXIKKyAqLworc3RhdGljIHZvaWQgYWNwX2V4dF9zdGF0X2NsZWFyX2RtYWlvYyhzdHJ1Y3Qg YW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYsIHU4IGNoX251bSkKK3sKKwl1MzIgZXh0X2ludHJfc3Rh dDsKKwl1MzIgY2htYXNrID0gQklUKGNoX251bSk7CisJc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAq YWNwX3BydiA9IChzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICopYWNwX2RldjsKKworCWV4dF9pbnRy X3N0YXQgPSBjZ3NfcmVhZF9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAorCQkJCQkgIG1t QUNQX0VYVEVSTkFMX0lOVFJfU1RBVCk7CisJaWYgKGV4dF9pbnRyX3N0YXQgJiAoY2htYXNrIDw8 CisJCQkgICAgIEFDUF9FWFRFUk5BTF9JTlRSX1NUQVRfX0RNQUlPQ1N0YXRfX1NISUZUKSkgewor CisJCWV4dF9pbnRyX3N0YXQgJj0gKGNobWFzayA8PAorCQkJCSAgQUNQX0VYVEVSTkFMX0lOVFJf U1RBVF9fRE1BSU9DQWNrX19TSElGVCk7CisJCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5j Z3NfZGV2aWNlLAorCQkJCSAgIG1tQUNQX0VYVEVSTkFMX0lOVFJfU1RBVCwgZXh0X2ludHJfc3Rh dCk7CisJfQorfQorCisvKglDaGVjayB3aGV0aGVyIGludGVycnVwdCAoSU9DKSBpcyBnZW5lcmF0 ZWQgb3Igbm90CSovCitzdGF0aWMgdTE2IGFjcF9nZXRfaW50cl9mbGFnKHN0cnVjdCBhbWRfYWNw X2RldmljZSAqYWNwX2RldikKK3sKKwl1MzIgZXh0X2ludHJfc3RhdHVzOworCXUzMiBpbnRyX2dl bjsKKwlzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJ2ID0gKHN0cnVjdCBhbWRfYWNwX3By aXZhdGUgKilhY3BfZGV2OworCisJZXh0X2ludHJfc3RhdHVzID0gY2dzX3JlYWRfcmVnaXN0ZXIo YWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCQkJICAgIG1tQUNQX0VYVEVSTkFMX0lOVFJfU1RBVCk7 CisJaW50cl9nZW4gPSAoKChleHRfaW50cl9zdGF0dXMgJgorCQkgICAgICBBQ1BfRVhURVJOQUxf SU5UUl9TVEFUX19ETUFJT0NTdGF0X01BU0spID4+CisJCSAgICAgQUNQX0VYVEVSTkFMX0lOVFJf U1RBVF9fRE1BSU9DU3RhdF9fU0hJRlQpKTsKKworCXJldHVybiBpbnRyX2dlbjsKK30KKworc3Rh dGljIGludCBpcnFfc2V0X3NvdXJjZSh2b2lkICpwcml2YXRlX2RhdGEsIHVuc2lnbmVkIHNyY19p ZCwgdW5zaWduZWQgdHlwZSwKKwkJCQkJCQkJaW50IGVuYWJsZWQpCit7CisJc3RydWN0IGFtZF9h Y3BfZGV2aWNlICphY3BfZGV2ID0KKwkJKChzdHJ1Y3QgYWNwX2lycV9wcnYgKilwcml2YXRlX2Rh dGEpLT5hY3BfZGV2OworCisJaWYgKHNyY19pZCA9PSBWSVNMQU5EUzMwX0lWX1NSQ0lEX0FDUCkg eworCQlhY3BfZW5hYmxlX2V4dGVybmFsX2ludGVycnVwdHMoYWNwX2RldiwgZW5hYmxlZCk7CisJ CXJldHVybiAwOworCX0gZWxzZSB7CisJCXJldHVybiAtMTsKKwl9Cit9CisKKworc3RhdGljIGlu bGluZSB2b2lkIGkyc19jbGVhcl9pcnFzKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwK KwkJCQkgIGludCBkaXJlY3Rpb24pCit7CisJdTMyIGkgPSAwOworCXN0cnVjdCBhbWRfYWNwX3By aXZhdGUgKmFjcF9wcnYgPSAoc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAqKWFjcF9kZXY7CisKKwlp ZiAoZGlyZWN0aW9uID09IFNUUkVBTV9QTEFZQkFDSykgeworCQlmb3IgKGkgPSAwOyBpIDwgNDsg aSsrKQorCQkJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkJCSht bUFDUF9JMlNTUF9UT1IwICsgKDB4MTAgKiBpKSksIDApOworCX0gZWxzZSB7CisJCWZvciAoaSA9 IDA7IGkgPCA0OyBpKyspCisJCQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2Rldmlj ZSwKKwkJCQkJKG1tQUNQX0kyU01JQ1NQX1JPUjAgKygweDEwICogaSkpLCAwKTsKKwl9Cit9CisK K3N0YXRpYyB2b2lkIGkyc19kaXNhYmxlX2NoYW5uZWxzKHN0cnVjdCBhbWRfYWNwX2RldmljZSAq YWNwX2RldiwKKwkJCQkJdTMyIHN0cmVhbSkKK3sKKwl1MzIgaSA9IDA7CisJc3RydWN0IGFtZF9h Y3BfcHJpdmF0ZSAqYWNwX3BydiA9IChzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICopYWNwX2RldjsK KworCWlmIChzdHJlYW0gPT0gU1RSRUFNX1BMQVlCQUNLKSB7CisJCWZvciAoaSA9IDA7IGkgPCA0 OyBpKyspCisJCQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCQkJ KG1tQUNQX0kyU1NQX1RFUjAgKyAoMHgxMCAqIGkpKSwgMCk7CisJfSBlbHNlIHsKKwkJZm9yIChp ID0gMDsgaSA8IDQ7IGkrKykKKwkJCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2 aWNlLAorCQkJCQkobW1BQ1BfSTJTTUlDU1BfUkVSMCArICgweDEwICogaSkpLCAwKTsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkIGNvbmZpZ3VyZV9pMnNfc3RyZWFtKHN0cnVjdCBhbWRfYWNwX2Rldmlj ZSAqYWNwX2RldiwKKwkJCQkJc3RydWN0IGFjcF9pMnNfY29uZmlnICppMnNfY29uZmlnKQorewor CXN0cnVjdCBhbWRfYWNwX3ByaXZhdGUgKmFjcF9wcnYgPSAoc3RydWN0IGFtZF9hY3BfcHJpdmF0 ZSAqKWFjcF9kZXY7CisKKwlpZiAoaTJzX2NvbmZpZy0+ZGlyZWN0aW9uID09IFNUUkVBTV9QTEFZ QkFDSykgeworCQkvKiBUcmFuc21pdCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGZvciBkYXRhIHdp ZHRoICovCisJCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAorCQkJCSAg IChtbUFDUF9JMlNTUF9UQ1IwICsgKDB4MTAgKgorCQkJCQkJCWkyc19jb25maWctPmNoX3JlZykp LAorCQkJCSAgIGkyc19jb25maWctPnhmZXJfcmVzb2x1dGlvbik7CisJCWNnc193cml0ZV9yZWdp c3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAorCQkJCSAgIChtbUFDUF9JMlNTUF9URkNSMCArICgw eDEwICoKKwkJCQkJCQkgaTJzX2NvbmZpZy0+Y2hfcmVnKSksCisJCQkJICAgMHgwMik7CisKKwkJ LyogUmVhZCBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciAqLworCQlpMnNfY29uZmlnLT5pcnEgPQor CQkJY2dzX3JlYWRfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCQkJICAobW1BQ1Bf STJTU1BfSU1SMCArCisJCQkJCSAgICgweDEwICogaTJzX2NvbmZpZy0+Y2hfcmVnKSkpOworCQkv KiBUWCBGSUZPIE92ZXJydW4sRW1wdHkgaW50ZXJydXB0cyAqLworCQljZ3Nfd3JpdGVfcmVnaXN0 ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCQkgICAobW1BQ1BfSTJTU1BfSU1SMCArICgweDEw ICoKKwkJCQkJCQlpMnNfY29uZmlnLT5jaF9yZWcpKSwKKwkJCQkgICAoaTJzX2NvbmZpZy0+aXJx ICYgfjB4MzApKTsKKwkJLypFbmFibGUgVHJhbnNtaXQgKi8KKwkJY2dzX3dyaXRlX3JlZ2lzdGVy KGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkJICAgKG1tQUNQX0kyU1NQX1RFUjAgKyAoMHgxMCAq CisJCQkJCQkJaTJzX2NvbmZpZy0+Y2hfcmVnKSksIDEpOworCX0gZWxzZSB7CisJCS8qIFJlY2Vp dmUgY29uZmlndXJhdGlvbiByZWdpc3RlciBmb3IgZGF0YSB3aWR0aCAqLworCQljZ3Nfd3JpdGVf cmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCQkgICAobW1BQ1BfSTJTTUlDU1BfUkNS MCArICgweDEwICoKKwkJCQkJCQkgICBpMnNfY29uZmlnLT5jaF9yZWcpKSwKKwkJCQkgICBpMnNf Y29uZmlnLT54ZmVyX3Jlc29sdXRpb24pOworCQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+ Y2dzX2RldmljZSwKKwkJCQkgICAobW1BQ1BfSTJTTUlDU1BfUkZDUjAgKyAoMHgxMCAqCisJCQkJ CQkJICAgIGkyc19jb25maWctPmNoX3JlZykpLCAweDA3KTsKKwkJLypSZWFkIGludGVycnVwdCBt YXNrIHJlZ2lzdGVyICovCisJCWkyc19jb25maWctPmlycSA9IGNnc19yZWFkX3JlZ2lzdGVyKGFj cF9wcnYtPmNnc19kZXZpY2UsCisJCQkJCQkgICAgKG1tQUNQX0kyU01JQ1NQX0lNUjAgKworCQkJ CQkJICAgICAoMHgxMCAqIGkyc19jb25maWctPmNoX3JlZykpKTsKKworCQkvKiBUWCBGSUZPIE92 ZXJydW4sRW1wdHkgaW50ZXJydXB0cyAqLworCQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+ Y2dzX2RldmljZSwKKwkJCQkgICAobW1BQ1BfSTJTTUlDU1BfSU1SMCArICgweDEwICoKKwkJCQkJ CQkgICBpMnNfY29uZmlnLT5jaF9yZWcpKSwKKwkJCQkgICBpMnNfY29uZmlnLT5pcnEgJiB+MHgw Myk7CisJCS8qRW5hYmxlIFJlY2VpdmUgKi8KKwkJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYt PmNnc19kZXZpY2UsCisJCQkJICAgKG1tQUNQX0kyU01JQ1NQX1JFUjAgKyAoMHgxMCAqCisJCQkJ CQkJICAgaTJzX2NvbmZpZy0+Y2hfcmVnKSksIDEpOworCisJfQorfQorCitzdGF0aWMgdm9pZCBj b25maWdfYWNwX2RtYShzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYsCisJCQkgICBzdHJ1 Y3QgYWNwX2RtYV9jb25maWcgKmRtYV9jb25maWcpCit7CisJdTMyIHB0ZV9vZmZzZXQ7CisKKwlp ZiAoZG1hX2NvbmZpZy0+ZGlyZWN0aW9uID09IFNUUkVBTV9QTEFZQkFDSykKKwkJcHRlX29mZnNl dCA9IFBMQVlCQUNLX1BURV9PRkZTRVQ7CisJZWxzZQorCQlwdGVfb2Zmc2V0ID0gQ0FQVFVSRV9Q VEVfT0ZGU0VUOworCisJYWNwX3B0ZV9jb25maWcoYWNwX2RldiwgZG1hX2NvbmZpZy0+cGcsCWRt YV9jb25maWctPm51bV9vZl9wYWdlcywKKwkJICAgICAgIHB0ZV9vZmZzZXQpOworCisJLyogQ29u ZmlndXJlIFN5c3RlbSBtZW1vcnkgdG8gYWNwIGRtYSBkZXNjcmlwdG9ycyAqLworCXNldF9hY3Bf c3lzbWVtX2RtYV9kZXNjcmlwdG9ycyhhY3BfZGV2LCBkbWFfY29uZmlnLT5zaXplLAorCQkJCSAg ICAgICBkbWFfY29uZmlnLT5kaXJlY3Rpb24sCisJCQkJICAgICAgIHB0ZV9vZmZzZXQpOworCisJ LyogQ29uZmlndXJlIGFjcCB0byBpMnMgZG1hIGRlc2NyaXB0b3JzICovCisJc2V0X2FjcF90b19p MnNfZG1hX2Rlc2NyaXB0b3JzKGFjcF9kZXYsIGRtYV9jb25maWctPnNpemUsCisJCQkJICAgICAg IGRtYV9jb25maWctPmRpcmVjdGlvbik7Cit9CisKKy8qIFN0YXJ0IGEgZ2l2ZW4gZG1hIGNoYW5u ZWwgKi8KK3N0YXRpYyBpbnQgYWNwX2RtYV9zdGFydChzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFj cF9kZXYsCisJCQkgdTE2IGNoX251bSwgYm9vbCBpc19jaXJjdWxhcikKK3sKKwlpbnQgc3RhdHVz OworCXUzMiBkbWFfY3RybDsKKwlzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJ2ID0gKHN0 cnVjdCBhbWRfYWNwX3ByaXZhdGUgKilhY3BfZGV2OworCisJc3RhdHVzID0gU1RBVFVTX1VOU1VD Q0VTU0ZVTDsKKworCS8qIHJlYWQgdGhlIGRtYSBjb250cm9sIHJlZ2lzdGVyIGFuZCBkaXNhYmxl IHRoZSBjaGFubmVsIHJ1biBmaWVsZCAqLworCWRtYV9jdHJsID0gY2dzX3JlYWRfcmVnaXN0ZXIo YWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCQkgICAgIG1tQUNQX0RNQV9DTlRMXzAgKyBjaF9udW0p OworCisJLypJbnZhbGlkYXRpbmcgdGhlIERBR0IgY2FjaGUgKi8KKwljZ3Nfd3JpdGVfcmVnaXN0 ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwJbW1BQ1BfREFHQl9BVFVfQ1RSTCwgRU5BQkxFKTsKKwor CS8qIGNvbmZpZ3VyZSB0aGUgRE1BIGNoYW5uZWwgYW5kIHN0YXJ0IHRoZSBETUEgdHJhbnNmZXIK KwkgKiBzZXQgZG1hY2hydW4gYml0IHRvIHN0YXJ0IHRoZSB0cmFuc2ZlciBhbmQgZW5hYmxlIHRo ZQorCSAqIGludGVycnVwdCBvbiBjb21wbGV0aW9uIG9mIHRoZSBkbWEgdHJhbnNmZXIKKwkgKi8K KwlkbWFfY3RybCB8PSBBQ1BfRE1BX0NOVExfMF9fRE1BQ2hSdW5fTUFTSzsKKworCWlmICgoY2hf bnVtID09IEFDUF9UT19JMlNfRE1BX0NIX05VTSkgfHwKKwkgICAgKGNoX251bSA9PSBJMlNfVE9f QUNQX0RNQV9DSF9OVU0pKSB7CisJCWRtYV9jdHJsIHw9IEFDUF9ETUFfQ05UTF8wX19ETUFDaElP Q0VuX01BU0s7CisJCWNnc19pcnFfZ2V0KGFjcF9wcnYtPmNnc19kZXZpY2UsIFZJU0xBTkRTMzBf SVZfU1JDSURfQUNQLCAwKTsKKwl9IGVsc2UgeworCQlkbWFfY3RybCAmPSB+QUNQX0RNQV9DTlRM XzBfX0RNQUNoSU9DRW5fTUFTSzsKKwl9CisKKwkvKiBlbmFibGUgIGZvciBBQ1AgU1JBTSB0by9m cm9tIEkyUyBETUEgY2hhbm5lbCAqLworCWlmIChpc19jaXJjdWxhciA9PSB0cnVlKQorCQlkbWFf Y3RybCB8PSBBQ1BfRE1BX0NOVExfMF9fQ2lyY3VsYXJfRE1BX0VuX01BU0s7CisJZWxzZQorCQlk bWFfY3RybCAmPSB+QUNQX0RNQV9DTlRMXzBfX0NpcmN1bGFyX0RNQV9Fbl9NQVNLOworCisJY2dz X3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCShtbUFDUF9ETUFfQ05UTF8wICsg Y2hfbnVtKSwKKwkJCSAgIGRtYV9jdHJsKTsKKworCXN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOwor CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogU3RvcCBhIGdpdmVuIGRtYSBjaGFubmVsIG51bWJl ciovCitzdGF0aWMgaW50IGFjcF9kbWFfc3RvcChzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9k ZXYsIHU4IGNoX251bSkKK3sKKwlpbnQgc3RhdHVzID0gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKKwl1 MzIgZG1hX2N0cmw7CisJdTMyIGRtYV9jaF9zdHM7CisJdTMyIGRlbGF5X3RpbWUgPSBBQ1BfRE1B X1JFU0VUX1RJTUU7CisJc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAqYWNwX3BydiA9IChzdHJ1Y3Qg YW1kX2FjcF9wcml2YXRlICopYWNwX2RldjsKKworCWlmIChhY3BfZGV2ID09IE5VTEwpCisJCXJl dHVybiBzdGF0dXM7CisKKwkvKiByZWdpc3RlciBtYXNrIHZhbHVlIHRvIGNoZWNrIHRoZSBjaGFu bmVsIHN0YXR1cyBiaXRzICovCisJZG1hX2N0cmwgPSBjZ3NfcmVhZF9yZWdpc3RlcihhY3BfcHJ2 LT5jZ3NfZGV2aWNlLAorCQkJCSAgICAgbW1BQ1BfRE1BX0NOVExfMCArIGNoX251bSk7CisKKwkv KiBjbGVhciB0aGUgZG1hIGNvbnRyb2wgcmVnaXN0ZXIgZmllbGRzIGJlZm9yZSB3cml0aW5nIHpl cm8KKwkgKiBpbiByZXNldCBiaXQKKwkgKi8KKwlkbWFfY3RybCAmPSB+QUNQX0RNQV9DTlRMXzBf X0RNQUNoUnVuX01BU0s7CisJZG1hX2N0cmwgJj0gfkFDUF9ETUFfQ05UTF8wX19ETUFDaElPQ0Vu X01BU0s7CisKKwljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCSAg IChtbUFDUF9ETUFfQ05UTF8wICsgY2hfbnVtKSwgZG1hX2N0cmwpOworCWRtYV9jaF9zdHMgPSBj Z3NfcmVhZF9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLCBtbUFDUF9ETUFfQ0hfU1RTKTsK KworCWlmIChkbWFfY2hfc3RzICYgQklUKGNoX251bSkpIHsKKwkJLyogc2V0IHRoZSByZXNldCBi aXQgZm9yIHRoaXMgY2hhbm5lbAorCQkgKiB0byBzdG9wIHRoZSBkbWEgdHJhbnNmZXIgKi8KKwkJ ZG1hX2N0cmwgfD0gQUNQX0RNQV9DTlRMXzBfX0RNQUNoUnN0X01BU0s7CisJCWNnc193cml0ZV9y ZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAorCQkJCSAgIChtbUFDUF9ETUFfQ05UTF8wICsg Y2hfbnVtKSwgZG1hX2N0cmwpOworCX0KKworCS8qIGlmIGNoYW5uZWwgdHJhbnNmZXIgaXMgbm90 IHN0b3BwZWQgd2l0aCBpbiB0aW1lIGRlbGF5CisJICogcmV0dXJuIHRoaXMgc3RhdHVzICovCisJ c3RhdHVzID0gLUVCVVNZOworCisJLyogY2hlY2sgdGhlIGNoYW5uZWwgc3RhdHVzIGJpdCBmb3Ig c29tZSB0aW1lIGFuZCByZXR1cm4gdGhlIHN0YXR1cyAqLworCXdoaWxlICgwIDwgZGVsYXlfdGlt ZSkgeworCQlkbWFfY2hfc3RzID0gY2dzX3JlYWRfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2Rldmlj ZSwKKwkJCQkJICAgICAgIG1tQUNQX0RNQV9DSF9TVFMpOworCQlpZiAoIShkbWFfY2hfc3RzICYg QklUKGNoX251bSkpKSB7CisJCQkvKiBjbGVhciB0aGUgcmVzZXQgZmxhZyBhZnRlciBzdWNjZXNz ZnVsbHkgc3RvcHBpbmcKKwkJCSAgIHRoZSBkbWEgdHJhbnNmZXIgYW5kIGJyZWFrIGZyb20gdGhl IGxvb3AgKi8KKwkJCWRtYV9jdHJsICY9IH5BQ1BfRE1BX0NOVExfMF9fRE1BQ2hSc3RfTUFTSzsK KworCQkJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkJCSAgICht bUFDUF9ETUFfQ05UTF8wICsgY2hfbnVtKSwgZG1hX2N0cmwpOworCQkJc3RhdHVzID0gU1RBVFVT X1NVQ0NFU1M7CisJCQlicmVhazsKKwkJfQorCQlkZWxheV90aW1lLS07CisJfQorCisJaWYgKChj aF9udW0gPT0gQUNQX1RPX0kyU19ETUFfQ0hfTlVNKSB8fAorCSAgICAoY2hfbnVtID09IEkyU19U T19BQ1BfRE1BX0NIX05VTSkpIHsKKwkJY2dzX2lycV9wdXQoYWNwX3Bydi0+Y2dzX2RldmljZSwg VklTTEFORFMzMF9JVl9TUkNJRF9BQ1AsIDApOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisK K3N0YXRpYyBpbnQgZG1hX2lycV9oYW5kbGVyKHZvaWQgKnBydl9kYXRhKQoreworCXUxNiBwbGF5 X2ludHIsIGNhcHR1cmVfaW50cjsKKwl1MTYgZHNjcl9pZHgsIGludHJfZmxhZzsKKwlpbnQgcHJp b3JpdHlfbGV2ZWwgPSAweDA7CisJaW50IGRtYV90cmFuc2Zlcl9zdGF0dXMgPSBTVEFUVVNfVU5T VUNDRVNTRlVMOworCXN0cnVjdCBhY3BfaXJxX3BydiAqaWRhdGEgPSBwcnZfZGF0YTsKKwlzdHJ1 Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYgPSBpZGF0YS0+YWNwX2RldjsKKworCWludHJfZmxh ZyA9IGFjcF9nZXRfaW50cl9mbGFnKGFjcF9kZXYpOworCXBsYXlfaW50ciA9IChpbnRyX2ZsYWcg JiBCSVQoQUNQX1RPX0kyU19ETUFfQ0hfTlVNKSk7CisJY2FwdHVyZV9pbnRyID0gKGludHJfZmxh ZyAmIEJJVChJMlNfVE9fQUNQX0RNQV9DSF9OVU0pKTsKKworCWlmICghcGxheV9pbnRyICYmICFj YXB0dXJlX2ludHIpIHsKKwkJLyogV2UgcmVnaXN0ZXJlZCBmb3IgRE1BIEludGVycnVwdC1Pbi1D b21wbGV0ZSBpbnRlcnJ1cHRzIG9ubHkuCisJCSAqIElmIHdlIGhpdCBoZXJlLCBqdXN0IHJldHVy bi4gKi8KKwkJcHJfaW5mbygiQUNQOmlycV9oYW5kbGVyOiBwbGF5X2ludHIgJiYgY2FwdHVyZV9p bnRyID0gZmFsc2VcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocGxheV9pbnRyKSB7CisJ CWRzY3JfaWR4ID0gZ2V0X2RzY3JfaWR4KGFjcF9kZXYsIFNUUkVBTV9QTEFZQkFDSyk7CisJCWNv bmZpZ19hY3BfZG1hX2NoYW5uZWwoYWNwX2RldiwgU1lTUkFNX1RPX0FDUF9DSF9OVU0sIGRzY3Jf aWR4LAorCQkJCSAgICAgICAxLCBwcmlvcml0eV9sZXZlbCk7CisJCWRtYV90cmFuc2Zlcl9zdGF0 dXMgPSBhY3BfZG1hX3N0YXJ0KGFjcF9kZXYsCisJCQkJCQkgICAgU1lTUkFNX1RPX0FDUF9DSF9O VU0sCisJCQkJCQkgICAgZmFsc2UpOworCQlpZGF0YS0+c2V0X2VsYXBzZWQoaWRhdGEtPmRldiwg cGxheV9pbnRyLCBjYXB0dXJlX2ludHIpOworCisJCWFjcF9leHRfc3RhdF9jbGVhcl9kbWFpb2Mo YWNwX2RldiwgQUNQX1RPX0kyU19ETUFfQ0hfTlVNKTsKKwl9CisKKwlpZiAoY2FwdHVyZV9pbnRy KSB7CisJCWRzY3JfaWR4ID0gZ2V0X2RzY3JfaWR4KGFjcF9kZXYsIFNUUkVBTV9DQVBUVVJFKTsK KwkJY29uZmlnX2FjcF9kbWFfY2hhbm5lbChhY3BfZGV2LCBBQ1BfVE9fU1lTUkFNX0NIX05VTSwg ZHNjcl9pZHgsCisJCQkJICAgICAgIDEsIHByaW9yaXR5X2xldmVsKTsKKwkJZG1hX3RyYW5zZmVy X3N0YXR1cyA9IGFjcF9kbWFfc3RhcnQoYWNwX2RldiwKKwkJCQkJCSAgICBBQ1BfVE9fU1lTUkFN X0NIX05VTSwKKwkJCQkJCSAgICBmYWxzZSk7CisJCWlkYXRhLT5zZXRfZWxhcHNlZChpZGF0YS0+ ZGV2LCBwbGF5X2ludHIsIGNhcHR1cmVfaW50cik7CisKKwkJYWNwX2V4dF9zdGF0X2NsZWFyX2Rt YWlvYyhhY3BfZGV2LCBJMlNfVE9fQUNQX0RNQV9DSF9OVU0pOworCX0KKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBpcnFfaGFuZGxlcih2b2lkICpwcml2YXRlX2RhdGEsIHVuc2lnbmVkIHNy Y19pZCwKKwkJICAgICAgIGNvbnN0IHVpbnQzMl90ICppdl9lbnRyeSkKK3sKKwlpZiAoc3JjX2lk ID09IFZJU0xBTkRTMzBfSVZfU1JDSURfQUNQKQorCQlyZXR1cm4gZG1hX2lycV9oYW5kbGVyKHBy aXZhdGVfZGF0YSk7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKKy8qIEluaXRpYWxpemUgYW5k IGJyaW5nIEFDUCBoYXJkd2FyZSB0byBkZWZhdWx0IHN0YXRlLiAqLworc3RhdGljIGludCBhY3Bf aHdfaW5pdChzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYsIHZvaWQgKmlwcnYpCit7CisJ dTMyIHZhbDsKKwl1MzIgdGltZW91dF92YWx1ZTsKKwlpbnQgYWNwX2h3X2luaXRfc3RhdHVzID0g U1RBVFVTX1VOU1VDQ0VTU0ZVTDsKKwlzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJ2ID0g KHN0cnVjdCBhbWRfYWNwX3ByaXZhdGUgKilhY3BfZGV2OworCisJaWYgKGFjcF9kZXYgPT0gTlVM TCkKKwkJcmV0dXJuIGFjcF9od19pbml0X3N0YXR1czsKKworCS8qIEFzc2VydCBTb2Z0IHJlc2V0 IG9mIEFDUCAqLworCXZhbCA9IGNnc19yZWFkX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2Us IG1tQUNQX1NPRlRfUkVTRVQpOworCisJdmFsIHw9IEFDUF9TT0ZUX1JFU0VUX19Tb2Z0UmVzZXRB dWRfTUFTSzsKKwljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCSAg IG1tQUNQX1NPRlRfUkVTRVQsIHZhbCk7CisKKwl0aW1lb3V0X3ZhbHVlID0gQUNQX1NPRlRfUkVT RVRfRE9ORV9USU1FX09VVF9WQUxVRTsKKwl3aGlsZSAodGltZW91dF92YWx1ZS0tKSB7CisJCXZh bCA9IGNnc19yZWFkX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsIG1tQUNQX1NPRlRfUkVT RVQpOworCQlpZiAoQUNQX1NPRlRfUkVTRVRfX1NvZnRSZXNldEF1ZERvbmVfTUFTSyA9PQorCQkg ICAgKHZhbCAmIEFDUF9TT0ZUX1JFU0VUX19Tb2Z0UmVzZXRBdWREb25lX01BU0spKQorCQkJYnJl YWs7CisJfQorCisJLyogRW5hYmxpbmcgY2xvY2sgdG8gQUNQIGFuZCB3YWl0cyB1bnRpbCB0aGUg Y2xvY2sgaXMgZW5hYmxlZCAqLworCXZhbCA9IGNnc19yZWFkX3JlZ2lzdGVyKGFjcF9wcnYtPmNn c19kZXZpY2UsIG1tQUNQX0NPTlRST0wpOworCXZhbCA9IHZhbCB8IEFDUF9DT05UUk9MX19DbGtF bl9NQVNLOworCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAltbUFDUF9D T05UUk9MLCB2YWwpOworCisJdGltZW91dF92YWx1ZSA9IEFDUF9DTE9DS19FTl9USU1FX09VVF9W QUxVRTsKKworCXdoaWxlICh0aW1lb3V0X3ZhbHVlLS0pIHsKKwkJdmFsID0gY2dzX3JlYWRfcmVn aXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwgbW1BQ1BfU1RBVFVTKTsKKwkJaWYgKHZhbCAmICh1 MzIpIDB4MSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTAwKTsKKwl9CisKKwkvKiBEZWFzc2VydCB0 aGUgU09GVCBSRVNFVCBmbGFncyAqLworCXZhbCA9IGNnc19yZWFkX3JlZ2lzdGVyKGFjcF9wcnYt PmNnc19kZXZpY2UsIG1tQUNQX1NPRlRfUkVTRVQpOworCXZhbCAmPSB+QUNQX1NPRlRfUkVTRVRf X1NvZnRSZXNldEF1ZF9NQVNLOworCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2 aWNlLAltbUFDUF9TT0ZUX1JFU0VULCB2YWwpOworCisJLyogaW5pdGlhaWxpemluZyBHYXJsaWMg Q29udHJvbCBEQUdCIHJlZ2lzdGVyICovCisJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNn c19kZXZpY2UsCW1tQUNQX0FYSTJEQUdCX09OSU9OX0NOVEwsCisJCQkgICBPTklPTl9DTlRMX0RF RkFVTFQpOworCisJLyogaW5pdGlhaWxpemluZyBPbmlvbiBDb250cm9sIERBR0IgcmVnaXN0ZXJz ICovCisJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCW1tQUNQX0FYSTJE QUdCX0dBUkxJQ19DTlRMLAorCQkJICAgR0FSTElDX0NOVExfREVGQVVMVCk7CisKKwlhY3BfZG1h X2Rlc2NyX2luaXQoYWNwX2Rldik7CisKKwkvKiBETUEgRFNDUiBCQVNFIEFERFJFU1MgSU4gU1JB TSAqLworCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAltbUFDUF9ETUFf REVTQ19CQVNFX0FERFIsCisJCQkgICBBQ1BfU1JBTV9CQVNFX0FERFJFU1MpOworCisJLyogTnVt IG9mIGRlc2NyaXB0aW9ycyBpbiBTUkFNIDB4NCwgbWVhbnMgMjU2IGRlc2NyaXB0b3JzOyg2NCAq IDQpICovCisJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsIG1tQUNQX0RN QV9ERVNDX01BWF9OVU1fRFNDUiwKKwkJCSAgIDB4NCk7CisKKwljZ3Nfd3JpdGVfcmVnaXN0ZXIo YWNwX3Bydi0+Y2dzX2RldmljZSwJbW1BQ1BfRVhURVJOQUxfSU5UUl9DTlRMLAorCQkJICAgQUNQ X0VYVEVSTkFMX0lOVFJfQ05UTF9fRE1BSU9DTWFza19NQVNLKTsKKworCWNnc19hZGRfaXJxX3Nv dXJjZShhY3BfcHJ2LT5jZ3NfZGV2aWNlLCBWSVNMQU5EUzMwX0lWX1NSQ0lEX0FDUCwgMSwKKwkJ CSAgIGlycV9zZXRfc291cmNlLAlpcnFfaGFuZGxlciwgaXBydik7CisKKwlwcl9pbmZvKCJBQ1A6 IEluaXRpYWxpemVkLlxuIik7CisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMg dm9pZCBhY3BfaHdfZGVpbml0KHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldikKK3sKKwl1 MzIgdmFsOworCXUzMiB0aW1lb3V0X3ZhbHVlOworCXN0cnVjdCBhbWRfYWNwX3ByaXZhdGUgKmFj cF9wcnYgPSAoc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAqKWFjcF9kZXY7CisKKwkgIC8qIEFzc2Vy dCBTb2Z0IHJlc2V0IG9mIEFDUCAqLworCXZhbCA9IGNnc19yZWFkX3JlZ2lzdGVyKGFjcF9wcnYt PmNnc19kZXZpY2UsIG1tQUNQX1NPRlRfUkVTRVQpOworCisJdmFsIHw9IEFDUF9TT0ZUX1JFU0VU X19Tb2Z0UmVzZXRBdWRfTUFTSzsKKwljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2Rl dmljZSwJbW1BQ1BfU09GVF9SRVNFVCwgdmFsKTsKKworCXRpbWVvdXRfdmFsdWUgPSBBQ1BfU09G VF9SRVNFVF9ET05FX1RJTUVfT1VUX1ZBTFVFOworCXdoaWxlICh0aW1lb3V0X3ZhbHVlLS0pIHsK KwkJdmFsID0gY2dzX3JlYWRfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwgbW1BQ1BfU09G VF9SRVNFVCk7CisJCWlmIChBQ1BfU09GVF9SRVNFVF9fU29mdFJlc2V0QXVkRG9uZV9NQVNLID09 CisJCSAgICAodmFsICYgQUNQX1NPRlRfUkVTRVRfX1NvZnRSZXNldEF1ZERvbmVfTUFTSykpIHsK KwkJCWJyZWFrOworCSAgICB9CisJfQorCSAvKiogRGlzYWJsZSBBQ1AgY2xvY2sgKi8KKwl2YWwg PSBjZ3NfcmVhZF9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLCBtbUFDUF9DT05UUk9MKTsK Kwl2YWwgJj0gfkFDUF9DT05UUk9MX19DbGtFbl9NQVNLOworCWNnc193cml0ZV9yZWdpc3Rlcihh Y3BfcHJ2LT5jZ3NfZGV2aWNlLCBtbUFDUF9DT05UUk9MLCB2YWwpOworCisJdGltZW91dF92YWx1 ZSA9IEFDUF9DTE9DS19FTl9USU1FX09VVF9WQUxVRTsKKworCXdoaWxlICh0aW1lb3V0X3ZhbHVl LS0pIHsKKwkJdmFsID0gY2dzX3JlYWRfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwgbW1B Q1BfU1RBVFVTKTsKKwkJaWYgKCEodmFsICYgKHUzMikgMHgxKSkKKwkJCWJyZWFrOworCQl1ZGVs YXkoMTAwKTsKKwl9CisKKwlwcl9pbmZvKCJBQ1A6IERlLUluaXRpYWxpemVkLlxuIik7Cit9CisK KworLyoJR2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgY29uc3VtZWQgZm9yIFNSQU1fVE9fSTJTIERN QQorICoJIGNoYW5uZWwgZHVyaW5nIHJlbmRlcmluZworICovCitzdGF0aWMgdTMyIGFjcF91cGRh dGVfZG1hX3BvaW50ZXIoc3RydWN0IGFtZF9hY3BfZGV2aWNlICphY3BfZGV2LCBpbnQgZGlyZWN0 aW9uLAorCQkJCSAgdTMyIHBlcmlvZF9zaXplKQoreworCXUzMiBwb3M7CisJdTE2IGRzY3I7CisJ dTMyIG11bDsKKwl1MzIgZG1hX2NvbmZpZzsKKwlzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICphY3Bf cHJ2ID0gKHN0cnVjdCBhbWRfYWNwX3ByaXZhdGUgKilhY3BfZGV2OworCXBvcyA9IDA7CisKKwlp ZiAoZGlyZWN0aW9uID09IFNUUkVBTV9QTEFZQkFDSykgeworCQlkc2NyID0gY2dzX3JlYWRfcmVn aXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCQkJIG1tQUNQX0RNQV9DVVJfRFNDUl8xMyk7 CisJCXBvcyA9IGNnc19yZWFkX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkJCW1t QUNQX0RNQV9DVVJfVFJBTlNfQ05UXzEzKTsKKwkJLyogZHNjciA9IGVpdGhlciAyIG9yIDMgb25s eSAqLworCQltdWwgPSAoZHNjciA9PSBQTEFZQkFDS19TVEFSVF9ETUFfREVTQ1JfQ0gxMykgPyAx IDogMDsKKwkJcG9zID0gIChtdWwgKiBwZXJpb2Rfc2l6ZSkgKyBwb3M7CisJfSBlbHNlIGlmIChk aXJlY3Rpb24gPT0gU1RSRUFNX0NBUFRVUkUpIHsKKwkJZHNjciA9IGNnc19yZWFkX3JlZ2lzdGVy KGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkJCSBtbUFDUF9ETUFfQ1VSX0RTQ1JfMTUpOworCQlw b3MgPSBjZ3NfcmVhZF9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAorCQkJCQltbUFDUF9E TUFfQ1VSX1RSQU5TX0NOVF8xNSk7CisJCWRtYV9jb25maWcgPSBjZ3NfcmVhZF9yZWdpc3Rlcihh Y3BfcHJ2LT5jZ3NfZGV2aWNlLAorCQkJCQkgICAgICAgbW1BQ1BfRE1BX0NOVExfMTQpOworCQlp ZiAoZG1hX2NvbmZpZyAhPSAwKSB7CisJCQltdWwgPSAoZHNjciA9PSBDQVBUVVJFX1NUQVJUX0RN QV9ERVNDUl9DSDE1KSA/IDEgOiAwOworCQkJcG9zID0gIChtdWwgKiBwZXJpb2Rfc2l6ZSkgKyBw b3M7CisJCX0KKwl9CisKKwlyZXR1cm4gcG9zOworfQorCisvKglXYWl0IGZvciBjb21wbGV0ZSBi dWZmZXJpbmcgdG8gY29tcGxldGUgaW4gSE9TVAorICoJIHRvIFNSQU0gRE1BIGNoYW5uZWwKKyAq Lworc3RhdGljIHZvaWQgd2FpdF9mb3JfcHJlYnVmZmVyX2ZpbmlzaChzdHJ1Y3QgYW1kX2FjcF9k ZXZpY2UgKmFjcF9kZXYpCit7CisJdTMyIGRtYV9jaF9zdHM7CisJdTMyIGNoYW5uZWxfbWFzayA9 IEJJVChTWVNSQU1fVE9fQUNQX0NIX05VTSk7CisJc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAqYWNw X3BydiA9IChzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICopYWNwX2RldjsKKworCWRvIHsKKwkJLyog UmVhZCB0aGUgY2hhbm5lbCBzdGF0dXMgdG8gcG9sbCBkbWEgdHJhbnNmZXIgY29tcGxldGlvbgor CQkgKiAoU3lzdGVtIFJBTSB0byBTUkFNKQorCQkgKiBJbiB0aGlzIGNhc2UsIGl0IHdpbGwgYmUg cnVudGltZS0+c3RhcnRfdGhyZXNob2xkCisJCSAqICgyIEFMU0EgcGVyaW9kcykgb2YgdHJhbnNm ZXIuIFJlbmRlcmluZyBzdGFydHMgYWZ0ZXIgdGhpcworCQkgKiB0aHJlc2hvbGQgaXMgbWV0Lgor CQkgKi8KKwkJZG1hX2NoX3N0cyA9IGNnc19yZWFkX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZp Y2UsCisJCQkJCSAgICAgICBtbUFDUF9ETUFfQ0hfU1RTKTsKKwkJdWRlbGF5KDIwKTsKKwl9IHdo aWxlIChkbWFfY2hfc3RzICYgY2hhbm5lbF9tYXNrKTsKK30KKworc3RhdGljIHZvaWQgaTJzX3Jl c2V0KHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwgaW50IGRpcmVjdGlvbikKK3sKKwlz dHJ1Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJ2ID0gKHN0cnVjdCBhbWRfYWNwX3ByaXZhdGUg KilhY3BfZGV2OworCisJaWYgKGRpcmVjdGlvbiA9PSBTVFJFQU1fUExBWUJBQ0spCisJCWNnc193 cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAltbUFDUF9JMlNTUF9UWEZGUiwgMSk7 CisJZWxzZQorCQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCQkg ICBtbUFDUF9JMlNNSUNTUF9SWEZGUiwgMSk7CisKK30KKworc3RhdGljIHZvaWQgaTJzX3N0YXJ0 KHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwgaW50IGRpcmVjdGlvbikKK3sKKwlzdHJ1 Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJ2ID0gKHN0cnVjdCBhbWRfYWNwX3ByaXZhdGUgKilh Y3BfZGV2OworCisJaWYgKGRpcmVjdGlvbiA9PSBTVFJFQU1fUExBWUJBQ0spIHsKKwkJY2dzX3dy aXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCW1tQUNQX0kyU1NQX0lFUiwgMSk7CisJ CWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAltbUFDUF9JMlNTUF9JVEVS LCAxKTsKKworCX0gZWxzZSB7CisJCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2 aWNlLCBtbUFDUF9JMlNNSUNTUF9JRVIsIDEpOworCQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3By di0+Y2dzX2RldmljZSwgbW1BQ1BfSTJTTUlDU1BfSVJFUiwgMSk7CisJfQorCisJY2dzX3dyaXRl X3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCW1tQUNQX0kyU1NQX0NFUiwgMSk7Cit9CisK K3N0YXRpYyB2b2lkIGkyc19zdG9wKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwgaW50 IGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJ2ID0gKHN0cnVj dCBhbWRfYWNwX3ByaXZhdGUgKilhY3BfZGV2OworCisJaTJzX2NsZWFyX2lycXMoYWNwX2Rldiwg ZGlyZWN0aW9uKTsKKworCWlmIChkaXJlY3Rpb24gPT0gU1RSRUFNX1BMQVlCQUNLKQorCQljZ3Nf d3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwgbW1BQ1BfSTJTU1BfSVRFUiwgMCk7 CisJZWxzZQorCQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwJbW1BQ1Bf STJTTUlDU1BfSVJFUiwgMCk7CisKKwlpZiAoZGlyZWN0aW9uID09IFNUUkVBTV9QTEFZQkFDSykg eworCQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwJbW1BQ1BfSTJTU1Bf Q0VSLCAwKTsKKwkJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCW1tQUNQ X0kyU1NQX0lFUiwgMCk7CisJfSBlbHNlIHsKKwkJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYt PmNnc19kZXZpY2UsCW1tQUNQX0kyU01JQ1NQX0NFUiwgMCk7CisJCWNnc193cml0ZV9yZWdpc3Rl cihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAltbUFDUF9JMlNNSUNTUF9JRVIsIDApOworCX0KK30KKwor c3RhdGljIHZvaWQgY29uZmlndXJlX2kycyhzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYs CisJCQkgIHN0cnVjdCBhY3BfaTJzX2NvbmZpZyAqaTJzX2NvbmZpZykKK3sKKwlpMnNfZGlzYWJs ZV9jaGFubmVscyhhY3BfZGV2LCBpMnNfY29uZmlnLT5kaXJlY3Rpb24pOworCWNvbmZpZ3VyZV9p MnNfc3RyZWFtKGFjcF9kZXYsIGkyc19jb25maWcpOworfQorCitpbnQgYW1kX2FjcF9od19pbml0 KHZvaWQgKmNnc19kZXZpY2UsCisJCSAgICB1bnNpZ25lZCBhY3BfdmVyc2lvbl9tYWpvciwgdW5z aWduZWQgYWNwX3ZlcnNpb25fbWlub3IsCisJCSAgICBzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICoq YWNwX3ByaXZhdGUpCit7CisJdW5zaWduZWQgaW50IGFjcF9tb2RlID0gQUNQX01PREVfSTJTOwor CisJaWYgKChhY3BfdmVyc2lvbl9tYWpvciA9PSAyKSAmJiAoYWNwX3ZlcnNpb25fbWlub3IgPT0g MikpCisJCWFjcF9tb2RlID0gY2dzX3JlYWRfcmVnaXN0ZXIoY2dzX2RldmljZSwKKwkJCQkJbW1B Q1BfQVpBTElBX0kyU19TRUxFQ1QpOworCisJaWYgKGFjcF9tb2RlICE9IEFDUF9NT0RFX0kyUykK KwkJcmV0dXJuIC1FTk9ERVY7CisKKwkqYWNwX3ByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1 Y3QgYW1kX2FjcF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCphY3BfcHJpdmF0ZSA9PSBO VUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCSgqYWNwX3ByaXZhdGUpLT5jZ3NfZGV2aWNlID0g Y2dzX2RldmljZTsKKwkoKmFjcF9wcml2YXRlKS0+YWNwX3ZlcnNpb25fbWFqb3IgPSBhY3BfdmVy c2lvbl9tYWpvcjsKKwkoKmFjcF9wcml2YXRlKS0+YWNwX3ZlcnNpb25fbWlub3IgPSBhY3BfdmVy c2lvbl9taW5vcjsKKworCSgqYWNwX3ByaXZhdGUpLT5wdWJsaWMuaW5pdCA9IGFjcF9od19pbml0 OworCSgqYWNwX3ByaXZhdGUpLT5wdWJsaWMuZmluaSA9IGFjcF9od19kZWluaXQ7CisJKCphY3Bf cHJpdmF0ZSktPnB1YmxpYy5jb25maWdfZG1hID0gY29uZmlnX2FjcF9kbWE7CisJKCphY3BfcHJp dmF0ZSktPnB1YmxpYy5jb25maWdfZG1hX2NoYW5uZWwgPSBjb25maWdfYWNwX2RtYV9jaGFubmVs OworCSgqYWNwX3ByaXZhdGUpLT5wdWJsaWMuZG1hX3N0YXJ0ID0gYWNwX2RtYV9zdGFydDsKKwko KmFjcF9wcml2YXRlKS0+cHVibGljLmRtYV9zdG9wID0gYWNwX2RtYV9zdG9wOworCSgqYWNwX3By aXZhdGUpLT5wdWJsaWMudXBkYXRlX2RtYV9wb2ludGVyID0gYWNwX3VwZGF0ZV9kbWFfcG9pbnRl cjsKKwkoKmFjcF9wcml2YXRlKS0+cHVibGljLnByZWJ1ZmZlcl9hdWRpbyA9IHdhaXRfZm9yX3By ZWJ1ZmZlcl9maW5pc2g7CisKKwkoKmFjcF9wcml2YXRlKS0+cHVibGljLmkyc19yZXNldCA9IGky c19yZXNldDsKKwkoKmFjcF9wcml2YXRlKS0+cHVibGljLmNvbmZpZ19pMnMgPSBjb25maWd1cmVf aTJzOworCSgqYWNwX3ByaXZhdGUpLT5wdWJsaWMuaTJzX3N0YXJ0ID0gaTJzX3N0YXJ0OworCSgq YWNwX3ByaXZhdGUpLT5wdWJsaWMuaTJzX3N0b3AgPSBpMnNfc3RvcDsKKworCXJldHVybiAwOwor fQorCitpbnQgYW1kX2FjcF9od19maW5pKHN0cnVjdCBhbWRfYWNwX3ByaXZhdGUgKmFjcF9wcml2 YXRlKQoreworCWtmcmVlKGFjcF9wcml2YXRlKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhbWRf YWNwX3N1c3BlbmQoc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAqYWNwX3ByaXZhdGUpCit7CisJLyog VE9ETyAqLworfQorCit2b2lkIGFtZF9hY3BfcmVzdW1lKHN0cnVjdCBhbWRfYWNwX3ByaXZhdGUg KmFjcF9wcml2YXRlKQoreworCS8qIFRPRE8gKi8KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYWNwL2FjcF9ody5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hY3AvYWNwX2h3LmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg0ZDk3ZAotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYWNwL2FjcF9ody5oCkBAIC0wLDAgKzEsOTkgQEAK KyNpZm5kZWYgX19BQ1BfSFdfSAorI2RlZmluZSBfX0FDUF9IV19ICisKKyNkZWZpbmUgQUNQX01P REVfSTJTCQkJCTAKKyNkZWZpbmUgQUNQX01PREVfQVoJCQkJMQorCisjZGVmaW5lIERJU0FCTEUJ CQkJCTAKKyNkZWZpbmUgRU5BQkxFCQkJCQkxCisKKyNkZWZpbmUgUEFHRV9TSVpFXzRLCQkJCTQw OTYKKyNkZWZpbmUgUEFHRV9TSVpFXzRLX0VOQUJMRQkJCTB4MDIKKworI2RlZmluZSBQTEFZQkFD S19QVEVfT0ZGU0VUCQkJMTAKKyNkZWZpbmUgQ0FQVFVSRV9QVEVfT0ZGU0VUCQkJMAorCisjZGVm aW5lIEdBUkxJQ19DTlRMX0RFRkFVTFQJCQkweDAwMDAwRkI0CisjZGVmaW5lIE9OSU9OX0NOVExf REVGQVVMVAkJCTB4MDAwMDBGQjQKKworI2RlZmluZSBBQ1BfUEhZU0lDQUxfQkFTRQkJCTB4MTQw MDAKKworLyogUGxheWJhY2sgU1JBTSBhZGRyZXNzIChhcyBhIGRlc3RpbmF0aW9uIGluIGRtYSBk ZXNjcmlwdG9yKSAqLworI2RlZmluZSBBQ1BfU0hBUkVEX1JBTV9CQU5LXzM4X0FERFJFU1MJCTB4 NDA0QTAwMAorCisvKiBDYXB0dXJlIFNSQU0gYWRkcmVzcyAoYXMgYSBzb3VyY2UgaW4gZG1hIGRl c2NyaXB0b3IpICovCisjZGVmaW5lIEFDUF9TSEFSRURfUkFNX0JBTktfNDdfQUREUkVTUwkJMHg0 MDVDMDAwCisKKyNkZWZpbmUgQUNQX0RNQV9SRVNFVF9USU1FCQkJMTAwMDAKKyNkZWZpbmUgQUNQ X0NMT0NLX0VOX1RJTUVfT1VUX1ZBTFVFCQkweDAwMDAwMEZGCisjZGVmaW5lIEFDUF9TT0ZUX1JF U0VUX0RPTkVfVElNRV9PVVRfVkFMVUUJMHgwMDAwMDBGRgorI2RlZmluZSBBQ1BfRE1BX0NPTVBM RVRFX1RJTUVfT1VUX1ZBTFVFCQkweDAwMDAwMEZGCisKKyNkZWZpbmUgQUNQX1NSQU1fQkFTRV9B RERSRVNTCQkJMHg0MDAwMDAwCisjZGVmaW5lIEFDUF9EQUdCX0dSUF9TUkFNX0JBU0VfQUREUkVT UwkJMHg0MDAxMDAwCisjZGVmaW5lIEFDUF9EQUdCX0dSUF9TUkJNX1NSQU1fQkFTRV9PRkZTRVQJ MHgxMDAwCisjZGVmaW5lIEFDUF9JTlRFUk5BTF9BUEVSVFVSRV9XSU5ET1dfMF9BRERSRVNTCTB4 MDAwMDAwMDAKKyNkZWZpbmUgQUNQX0lOVEVSTkFMX0FQRVJUVVJFX1dJTkRPV180X0FERFJFU1MJ MHgwMTgwMDAwMAorCitlbnVtIHsKKwlTVFJFQU1fUExBWUJBQ0sgPSAwLAorCVNUUkVBTV9DQVBU VVJFLAorCVNUUkVBTV9MQVNUID0gU1RSRUFNX0NBUFRVUkUsCit9OworCitlbnVtIHsKKwlUb19E QUdCX08gPSAweDAsCisJVG9fREFHQl9HLAorCVRPX0FDUF9JMlNfMSwKKwlUT19CTFVFVE9PVEgs CisJVE9fQUNQX0kyU18yLAorCUZST01fREFHQl9PLAorCUZST01fREFHQl9HLAorCUZST01fQUNQ X0kyU18xLAorCUZST01fQUNQX0kyU18yCit9OworCitlbnVtIHsKKwlBQ1BfRE1BX0FUVFJJQlVU RVNfU0hBUkVETUVNX1RPX0RBR0JfT05JT04gPSAweDAsCisJQUNQX0RNQV9BVFRSSUJVVEVTX1NI QVJFRF9NRU1fVE9fREFHQl9HQVJMSUMgPSAweDEsCisJQUNQX0RNQV9BVFRSSUJVVEVTX0RBR0Jf T05JT05fVE9fU0hBUkVETUVNID0gMHg4LAorCUFDUF9ETUFfQVRUUklCVVRFU19EQUdCX0dBUkxJ Q19UT19TSEFSRURNRU0gPSAweDksCisJQUNQX0RNQV9BVFRSSUJVVEVTX0ZPUkNFX1NJWkUgPSAw eEYKK307CisKK3R5cGVkZWYgc3RydWN0IGFjcF9kbWFfZHNjcl9zaXplX3RyYW5zZmVyX2RpcmVj dGlvbiB7CisJLyogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZCB0byBiZSB0cmFu c2ZlcnJlZAorCSAqICBmcm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbiBtZW1vcnkuICovCisJdTMy IHNpemU6MTY7CisJLyogU3BlY2lmaWVzIHRyYW5zZmVyIGRpcmVjdGlvbi4gKi8KKwl1MzIgdHJh bnNfZGlyZWN0aW9uOjQ7CisJLyogcmVzZXJ2ZWQuICovCisJdTMyIHJlc2VydmVkMToyOworCS8q IFNwZWNpZmllcyB0aGUgSU9DIGVuYWJsZSBvciBub3QgZm9yIGRlc2NyaXB0b3IuICovCisJLyog RGVmYXVsdGx5IHRoaXMgd2lsbCBiZSAwLCBmb3IgdGhlIGxhc3QgZGVzY3JpcHRvciwgbWFrZSBp dCBFbmFibGUgKi8KKwl1MzIgaW9jOjE7CisJLyogcmVzZXJ2ZWQuICovCisJdTMyIHJlc2VydmVk Mjo5OworfSBhY3BfZG1hX2RzY3Jfc2l6ZV90cmFuc2Zlcl9kaXJlY3Rpb25fdDsKKwordHlwZWRl ZiB1bmlvbiB7CisJdTMyIHZhbDozMjsKKwlhY3BfZG1hX2RzY3Jfc2l6ZV90cmFuc2Zlcl9kaXJl Y3Rpb25fdCBzOworfSBhY3BfZG1hX2RzY3Jfc2l6ZV90cmFuc2Zlcl9kaXJlY3Rpb25fdTsKKwor dHlwZWRlZiBzdHJ1Y3QgYWNwX2RtYV9kc2NyX3RyYW5zZmVyIHsKKwkvKiBTcGVjaWZpZXMgdGhl IHNvdXJjZSBtZW1vcnkgbG9jYXRpb24gZm9yIHRoZSBETUEgZGF0YSB0cmFuc2Zlci4gKi8KKwl1 MzIgc3JjOworCS8qIFNwZWNpZmllcyB0aGUgZGVzdGluYXRpb24gbWVtb3J5IGxvY2F0aW9uIHRv IHdoZXJlIHRoZSBkYXRhIHdpbGwKKwkgICBiZSB0cmFuc2ZlcnJlZC4KKwkgKi8KKwl1MzIgZGVz dDsKKwkvKiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBieXRlcyBuZWVkIHRvIGJlIHRyYW5zZmVy cmVkCisJICogZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24gbWVtb3J5LlRyYW5zZmVyIGRpcmVj dGlvbiAmIElPQyBlbmFibGUKKwkgKi8KKwlhY3BfZG1hX2RzY3Jfc2l6ZV90cmFuc2Zlcl9kaXJl Y3Rpb25fdSBzaXplX3hmZXJfZGlyOworCS8qKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLwor CXUzMiByZXNlcnZlZDsKK30gYWNwX2RtYV9kc2NyX3RyYW5zZmVyX3Q7CisKKyNlbmRpZiAvKl9f QUNQX0hXX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYWNwL2luY2x1ZGUv YWNwX2dmeF9pZi5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hY3AvaW5jbHVkZS9hY3BfZ2Z4X2lm LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM2NjJkNgotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYWNwL2luY2x1ZGUvYWNwX2dmeF9pZi5oCkBA IC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNSBBZHZhbmNlZCBNaWNybyBEZXZp Y2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUg Q09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBE RUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorKi8KKworI2lmbmRlZiBfQUNQX0dGWF9JRl9I CisjZGVmaW5lIF9BQ1BfR0ZYX0lGX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5j bHVkZSAiY2dzX2xpbnV4LmgiCisjaW5jbHVkZSAiY2dzX2NvbW1vbi5oIgorI2luY2x1ZGUgImFt ZF9hY3AuaCIKKworc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSB7CisJLyogVGhlIHB1YmxpYyBzdHJ1 dHVyZSBpcyBmaXJzdCwgc28gdGhhdCBwb2ludGVycyBjYW4gYmUgY2FzdAorCSAqIGJldHdlZW4g dGhlIHB1YmxpYyBhbmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgYW1kX2FjcF9kZXZp Y2UgcHVibGljOworCisJLyogcHJpdmF0ZSBlbGVtZW50cyBub3QgZXhwb3NlIHRocm91Z2ggdGhl IGJ1cyBpbnRlcmZhY2UgKi8KKwl2b2lkICpjZ3NfZGV2aWNlOworCXVuc2lnbmVkIGFjcF92ZXJz aW9uX21ham9yLCBhY3BfdmVyc2lvbl9taW5vcjsKK307CisKK2ludCBhbWRfYWNwX2h3X2luaXQo dm9pZCAqY2dzX2RldmljZSwKKwkJICAgIHVuc2lnbmVkIGFjcF92ZXJzaW9uX21ham9yLCB1bnNp Z25lZCBhY3BfdmVyc2lvbl9taW5vciwKKwkJICAgIHN0cnVjdCBhbWRfYWNwX3ByaXZhdGUgKiph cHJpdik7CitpbnQgYW1kX2FjcF9od19maW5pKHN0cnVjdCBhbWRfYWNwX3ByaXZhdGUgKmFwcml2 KTsKK3ZvaWQgYW1kX2FjcF9zdXNwZW5kKHN0cnVjdCBhbWRfYWNwX3ByaXZhdGUgKmFjcF9wcml2 YXRlKTsKK3ZvaWQgYW1kX2FjcF9yZXN1bWUoc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAqYWNwX3By aXZhdGUpOworCisjZW5kaWYgLyogX0FDUF9HRlhfSUZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9hY3AvaW5jbHVkZS9hbWRfYWNwLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2FjcC9pbmNsdWRlL2FtZF9hY3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li45ODhkNzJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hY3AvaW5j bHVkZS9hbWRfYWNwLmgKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNSBB ZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNv cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK KyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBp bgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUu CisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVW RU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lO RyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorKi8KKworI2lm bmRlZiBfQU1EX0FDUF9ICisjZGVmaW5lIF9BTURfQUNQX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+CisKKy8qIFBsYXliYWNrIERNQSBjaGFubmVscyAqLworI2RlZmluZSBTWVNSQU1fVE9f QUNQX0NIX05VTSAxMgorI2RlZmluZSBBQ1BfVE9fSTJTX0RNQV9DSF9OVU0gMTMKKworLyogQ2Fw dHVyZSBETUEgY2hhbm5lbHMgKi8KKyNkZWZpbmUgQUNQX1RPX1NZU1JBTV9DSF9OVU0gMTQKKyNk ZWZpbmUgSTJTX1RPX0FDUF9ETUFfQ0hfTlVNIDE1CisKKyNkZWZpbmUgUExBWUJBQ0tfU1RBUlRf RE1BX0RFU0NSX0NIMTIgMAorI2RlZmluZSBQTEFZQkFDS19FTkRfRE1BX0RFU0NSX0NIMTIgMQor CisjZGVmaW5lIFBMQVlCQUNLX1NUQVJUX0RNQV9ERVNDUl9DSDEzIDIKKyNkZWZpbmUgUExBWUJB Q0tfRU5EX0RNQV9ERVNDUl9DSDEzIDMKKworCisjZGVmaW5lIENBUFRVUkVfU1RBUlRfRE1BX0RF U0NSX0NIMTQgNAorI2RlZmluZSBDQVBUVVJFX0VORF9ETUFfREVTQ1JfQ0gxNCA1CisKKyNkZWZp bmUgQ0FQVFVSRV9TVEFSVF9ETUFfREVTQ1JfQ0gxNSA2CisjZGVmaW5lIENBUFRVUkVfRU5EX0RN QV9ERVNDUl9DSDE1IDcKKworI2RlZmluZSBTVEFUVVNfU1VDQ0VTUyAwCisjZGVmaW5lIFNUQVRV U19VTlNVQ0NFU1NGVUwgLTEKKworZW51bSBhY3BfZG1hX3ByaW9yaXR5X2xldmVsIHsKKwkvKiAw eDAgU3BlY2lmaWVzIHRoZSBETUEgY2hhbm5lbCBpcyBnaXZlbiBub3JtYWwgcHJpb3JpdHkgKi8K KwlBQ1BfRE1BX1BSSU9SSVRZX0xFVkVMX05PUk1BTCA9IDB4MCwKKwkvKiAweDEgU3BlY2lmaWVz IHRoZSBETUEgY2hhbm5lbCBpcyBnaXZlbiBoaWdoIHByaW9yaXR5ICovCisJQUNQX0RNQV9QUklP UklUWV9MRVZFTF9ISUdIID0gMHgxLAorCUFDUF9ETUFfUFJJT1JJVFlfTEVWRUxfRk9SQ0VTSVpF ID0gMHhGRgorfTsKKworc3RydWN0IGFjcF9kbWFfY29uZmlnIHsKKwlzdHJ1Y3QgcGFnZSAqcGc7 CisJdTE2IG51bV9vZl9wYWdlczsKKwl1MTYgZGlyZWN0aW9uOworCXVpbnQ2NF90IHNpemU7Cit9 OworCitzdHJ1Y3QgYWNwX2kyc19jb25maWcgeworCXUxNiBkaXJlY3Rpb247CisJdTMyIHhmZXJf cmVzb2x1dGlvbjsKKwl1MzIgaXJxOworCXUzMiBjaF9yZWc7Cit9OworCitzdHJ1Y3QgYWNwX2ly cV9wcnYgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFj cF9kZXY7CisJdm9pZCAoKnNldF9lbGFwc2VkKShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1MTYgcGxh eV9pbnRyLAorCQkJCQkJdTE2IGNhcHR1cmVfaW50cik7Cit9OworCisvKiBQdWJsaWMgaW50ZXJm YWNlIG9mIEFDUCBkZXZpY2UgZXhwb3NlZCBvbiBBTUQgR05CIGJ1cyAqLworc3RydWN0IGFtZF9h Y3BfZGV2aWNlIHsKKwkvKiBIYW5kc2hha2Ugd2hlbiBBTFNBIGRyaXZlciBjb25uZWN0cywgZGlz Y29ubmVjdHMKKwkgKiBUQkQ6IGlzIHRoaXMgcmVhbGx5IG5lZWRlZD8gKi8KKwlpbnQgKCppbml0 KShzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYsIHZvaWQgKmlwcnYpOworCXZvaWQgKCpm aW5pKShzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYpOworCisJLyoqCisJICogY29uZmln X2RtYSgpIC0gQ29uZmlndXJlIEFDUCBpbnRlcm5hbCBETUEgY29udHJvbGxlcgorCSAqIEBhY3Bf ZGV2OgkgICAgYWNwIGRldmljZQorCSAqIEBhY3BfZG1hX2NvbmZpZzogRE1BIGNvbmZpZ3VyYXRp b24gcGFyYW1ldGVycworCSAqCisJICogVGhpcyB3aWxsIGNvbmZpZ3VyZSB0aGUgRE1BIGNvbnRy b2xsZXIgd2l0aCB0aGUgZ2l2ZW4KKwkgKiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCisJICov CisJdm9pZCAoKmNvbmZpZ19kbWEpKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwKKwkJ CSAgIHN0cnVjdCBhY3BfZG1hX2NvbmZpZyAqZG1hX2NvbmZpZyk7CisKKwkvKioKKwkgKiBjb25m aWdfZG1hX2NoYW5uZWwoKSAtIENvbmZpZ3VyZSBBQ1AgRE1BIGNoYW5uZWwKKwkgKiBAYWNwX2Rl djoJICAgIGFjcCBkZXZpY2UKKwkgKiBAY2hfbnVtOgkgICAgY2hhbm5lbCBudW1iZXIgdG8gYmUg Y29uZmlndXJlZAorCSAqIEBkc2NyX3N0cnRfaWR4OiAgRE1BIGRlc2NyaXB0b3Igc3RhcnRpbmcg aW5kZXgKKwkgKiBAcHJpb3JpdHlfbGV2ZWw6IHByaW9yaXR5IGxldmVsIG9mIGNoYW5uZWwKKwkg KgorCSAqIFRoaXMgd2lsbCBjb25maWd1cmUgdGhlIERNQSBjaGFubmVsIHdpdGggdGhlIGdpdmVu CisJICogY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorCSAqLworCXZvaWQgKCpjb25maWdfZG1h X2NoYW5uZWwpKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwKKwkJCQkgICB1OCBjaF9u dW0sIHUxNiBkc2NyX3N0cnRfaWR4LCB1MTYgbnVtX2RzY3JzLAorCQkJCSAgIGVudW0gYWNwX2Rt YV9wcmlvcml0eV9sZXZlbCBwcmlvcml0eV9sZXZlbCk7CisKKwkvKioKKwkgKiBkbWFfc3RhcnQo KSAtIFN0YXJ0IEFDUCBETUEgZW5naW5lCisJICogQGFjcF9kZXY6CSBhY3AgZGV2aWNlCisJICog QGNoX251bToJIERNQSBjaGFubmVsIG51bWJlcgorCSAqIEBpc19jaXJjdWxhcjogY29uZmlndXJl IGNpcmN1bGFyIERNQQorCSAqCisJICogU3RhcnQgRE1BIGNoYW5uZWwgYXMgY29uZmlndXJlZC4K KwkgKi8KKwlpbnQgKCpkbWFfc3RhcnQpKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2Rldiwg dTE2IGNoX251bSwKKwkJCSAgYm9vbCBpc19jaXJjdWxhcik7CisKKwkvKioKKwkgKiBkbWFfc3Rv cCgpIC0gU3RvcCBBQ1AgRE1BIGVuZ2luZQorCSAqIEBhY3BfZGV2OglhY3AgZGV2aWNlCisJICog QGNoX251bToJRE1BIGNoYW5uZWwgbnVtYmVyCisJICoKKwkgKiBTdG9wIERNQSBjaGFubmVsIGFz IGNvbmZpZ3VyZWQuCisJICovCisJaW50ICgqZG1hX3N0b3ApKHN0cnVjdCBhbWRfYWNwX2Rldmlj ZSAqYWNwX2RldiwgdTggY2hfbnVtKTsKKworCS8qKgorCSAqIHVwZGF0ZV9kbWFfcG9pbnRlcigp IC0gUXVlcnkgdGhlIGJ1ZmZlciBwb3N0aW9uCisJICogQGFjcF9kZXY6CSBhY3AgZGV2aWNlCisJ ICogQGRpcmVjdGlvbjogICBEbWEgdHJhbnNmZXIgZGlyZWN0aW9uCisJICogQHBlcmlvZF9zaXpl OiBzaXplIG9mIGJ1ZmZlciBpbi10ZXJtcyBvZiBBTFNBIHRlcm1pbm9sb2d5CisJICoKKwkgKiBU aGlzIHdpbGwgcXVlcnkgdGhlIGJ1ZmZlciBwb3NpdGlvbiBmcm9tIEFDUCBJUCwgYmFzZWQgb24g ZGF0YQorCSAqIHByb2R1Y2VkL2NvbnN1bWVkCisJICovCisJdTMyICgqdXBkYXRlX2RtYV9wb2lu dGVyKShzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYsCisJCQkJICBpbnQgZGlyZWN0aW9u LCB1MzIgcGVyaW9kX3NpemUpOworCisJLyoqCisJICogcHJlYnVmZmVyX2F1ZGlvKCkgLSBXYWl0 IGZvciBidWZmZXJpbmcgdG8gY29tcGxldGUKKwkgKiBAYWNwX2RldjoJYWNwIGRldmljZQorCSAq CisJICogV2FpdCBmb3IgYnVmZmVyaW5nIHRvIGNvbXBsZXRlIGluIEhPU1QgdG8gU1JBTSBETUEg Y2hhbm5lbC4KKwkgKi8KKwl2b2lkICgqcHJlYnVmZmVyX2F1ZGlvKShzdHJ1Y3QgYW1kX2FjcF9k ZXZpY2UgKmFjcF9kZXYpOworCisJLyoqCisJICogaTJzX3Jlc2V0KCkgLSAgUmVzZXQgaTJzIEZJ Rk9zCisJICogQGFjcF9kZXY6CSAgYWNwIGRldmljZQorCSAqIEBkaXJlY3Rpb246ICAgIGRpcmVj dGlvbiBvZiBzdHJlYW0g4oCTIHBsYXliYWNrL3JlY29yZAorCSAqCisJICogUmVzZXRzIEkyUyBG SUZPcworCSAqLworCXZvaWQgKCppMnNfcmVzZXQpKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNw X2RldiwgaW50IGRpcmVjdGlvbik7CisKKwkvKioKKwkgKiBjb25maWdfaTJzKCkgLSBDb25maWd1 cmUgdGhlIGkycyBjb250cm9sbGVyCisJICogQGFjcF9kZXY6ICAgIGFjcCBkZXZpY2UKKwkgKiBA aTJzX2NvbmZpZzogY29uZmlndXJhdGlvbiBvZiBpMnMgY29udHJvbGxlcgorCSAqCisJICogVGhp cyB3aWxsIGNvbmZpZ3VyZSB0aGUgaTJzIGNvbnRyb2xsZXIgaW5zdGFuY2UgdXNlZCBvbiB0aGUK KwkgKiBib2FyZCwgd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorCSAq LworCXZvaWQgKCpjb25maWdfaTJzKShzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYsCisJ CQkgICBzdHJ1Y3QgYWNwX2kyc19jb25maWcgKmkyc19jb25maWcpOworCisJLyoqCisJICogaTJz X3N0YXJ0KCkgLSBTdGFydCBpMnMgY29udHJvbGxlcgorCSAqIEBhY3BfZGV2OgkgIGFjcCBkZXZp Y2UKKwkgKiBAZGlyZWN0aW9uOiAgICBkaXJlY3Rpb24gb2Ygc3RyZWFtIOKAkyBwbGF5YmFjay9y ZWNvcmQKKwkgKgorCSAqIFN0YXJ0cyBJMlMgZGF0YSB0cmFuc21pc3Npb24KKwkgKi8KKwl2b2lk ICgqaTJzX3N0YXJ0KShzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYsIGludCBkaXJlY3Rp b24pOworCisJLyoqCisJICogaTJzX3N0b3AoKSAtIFN0b3AgaTJzIGNvbnRyb2xsZXIKKwkgKiBA YWNwX2RldjoJYWNwIGRldmljZQorCSAqIEBzdHJlYW06CVR5cGUgb2Ygc3RyZWFtIOKAkyBwbGF5 YmFjay9yZWNvcmQKKwkgKgorCSAqIFN0b3BzIEkyUyBkYXRhIHRyYW5zbWlzc2lvbgorCSAqLwor CXZvaWQgKCppMnNfc3RvcCkoc3RydWN0IGFtZF9hY3BfZGV2aWNlICphY3BfZGV2LCBpbnQgZGly ZWN0aW9uKTsKKworCS8qIFRPRE86IE5lZWQgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGludGVyZmFj ZSBmb3IgYXN5bmNocm9ub3VzCisJICogbm90aWZpY2F0aW9ucyAqLworfTsKKworI2VuZGlmIC8q IF9BTURfQUNQX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUKaW5kZXggY2NkYmIz NS4uMDdiZmUyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZp bGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUKQEAgLTMsNyArMyw5 IEBACiAjIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgKERSSSkgaW4gWEZyZWU4NiA0 LjEuMCBhbmQgaGlnaGVyLgogCiBjY2ZsYWdzLXkgOj0gLUlpbmNsdWRlL2RybSAtSWRyaXZlcnMv Z3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZyBcCi0JLUlkcml2ZXJzL2dwdS9kcm0vYW1kL2lu Y2x1ZGUKKwkJLUlkcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUgXAorCQktSWRyaXZlcnMvZ3B1 L2RybS9hbWQvaW5jbHVkZS9idXMgXAorCQktSWRyaXZlcnMvZ3B1L2RybS9hbWQvYWNwL2luY2x1 ZGUKIAogYW1kZ3B1LXkgOj0gYW1kZ3B1X2Rydi5vCiAKQEAgLTgwLDYgKzgyLDE2IEBAIGFtZGdw dS15ICs9IFwKICMgYWRkIGNncwogYW1kZ3B1LXkgKz0gYW1kZ3B1X2Nncy5vCiAKKyMgQUNQIGNv bXBvbmV0CitpZm5lcSAoJChDT05GSUdfRFJNX0FNRF9BQ1ApLCkKK2FtZGdwdS15ICs9IGFtZGdw dV9hY3AubworCitBTURBQ1BQQVRIIDo9IC4uL2FjcAoraW5jbHVkZSBkcml2ZXJzL2dwdS9kcm0v YW1kL2FjcC9NYWtlZmlsZQorCithbWRncHUteSArPSAkKEFNRF9BQ1BfRklMRVMpCitlbmRpZgor CiBhbWRncHUtJChDT05GSUdfQ09NUEFUKSArPSBhbWRncHVfaW9jMzIubwogYW1kZ3B1LSQoQ09O RklHX1ZHQV9TV0lUQ0hFUk9PKSArPSBhbWRncHVfYXRweF9oYW5kbGVyLm8KIGFtZGdwdS0kKENP TkZJR19BQ1BJKSArPSBhbWRncHVfYWNwaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHUuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5o CmluZGV4IDY2ZmZkYzEuLjA4ZDI0MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5o CkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiYW1kZ3B1X2lycS5oIgogI2luY2x1ZGUgImFt ZGdwdV91Y29kZS5oIgogI2luY2x1ZGUgImFtZGdwdV9nZHMuaCIKKyNpbmNsdWRlICJhbWRncHVf YWNwLmgiCiAKIC8qCiAgKiBNb2R1bGVzIHBhcmFtZXRlcnMuCkBAIC0xODUzLDYgKzE4NTQsMTIg QEAgaW50IGFtZGdwdV9jdHhfcHV0KHN0cnVjdCBhbWRncHVfY3R4ICpjdHgpOwogCiBleHRlcm4g aW50IGFtZGdwdV9jdHhfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwK IAkJCQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHApOworLyoKKyAqIENHUworICovCit2b2lkICph bWRncHVfY2dzX2NyZWF0ZV9kZXZpY2Uoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwordm9p ZCBhbWRncHVfY2dzX2Rlc3Ryb3lfZGV2aWNlKHZvaWQgKmNnc19kZXZpY2UpOworCiAKIC8qCiAg KiBDb3JlIHN0cnVjdHVyZSwgZnVuY3Rpb25zIGFuZCBoZWxwZXJzLgpAQCAtMTg2OSw2ICsxODc2 LDEwIEBAIHN0cnVjdCBhbWRncHVfZGV2aWNlIHsKIAlzdHJ1Y3QgcGNpX2RldgkJCSpwZGV2Owog CXN0cnVjdCByd19zZW1hcGhvcmUJCWV4Y2x1c2l2ZV9sb2NrOwogCisjaWZkZWYgQ09ORklHX0RS TV9BTURfQUNQCisJc3RydWN0IGFtZGdwdV9hY3AJCWFjcDsKKyNlbmRpZgorCiAJLyogQVNJQyAq LwogCWVudW0gYW1kZ3B1X2FzaWNfdHlwZSAgICAgICAgICAgYXNpY190eXBlOwogCXVpbnQzMl90 CQkJZmFtaWx5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X2FjcC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FjcC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MTEyZWEKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYWNwLmMKQEAgLTAsMCArMSwyMDEgQEAK Ky8qCisgKiBDb3B5cmlnaHQgMjAxNSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgor ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK KyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5P TklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERF UihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAq IE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUg U09GVFdBUkUuCisgKgorICogQXV0aG9yczogQU1ECisgKgorICovCisKKyNpbmNsdWRlICJhbWRn cHUuaCIKKyNpbmNsdWRlICJhdG9tLmgiCisjaW5jbHVkZSAiYW1kZ3B1X2FjcC5oIgorI2luY2x1 ZGUgImFtZF9nbmJfYnVzLmgiCisjaW5jbHVkZSAiYWNwX2dmeF9pZi5oIgorCitzdGF0aWMgaW50 IGFjcF9lYXJseV9pbml0KHZvaWQgKmhhbmRsZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBhY3Bfc3dfaW5pdCh2b2lkICpoYW5kbGUpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CisKKwlhZGV2LT5hY3AucGFy ZW50ID0gYWRldi0+ZGV2OworCisJYWRldi0+YWNwLmNnc19kZXZpY2UgPQorCQlhbWRncHVfY2dz X2NyZWF0ZV9kZXZpY2UoYWRldik7CisJaWYgKCFhZGV2LT5hY3AuY2dzX2RldmljZSkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhY3Bfc3dfZmluaSh2 b2lkICpoYW5kbGUpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKiloYW5kbGU7CisKKwlpZiAoYWRldi0+YWNwLmNnc19kZXZpY2UpCisJCWFt ZGdwdV9jZ3NfZGVzdHJveV9kZXZpY2UoYWRldi0+YWNwLmNnc19kZXZpY2UpOworCisJcmV0dXJu IDA7Cit9CisKKy8qKgorICogYWNwX2h3X2luaXQgLSBzdGFydCBhbmQgdGVzdCBVVkQgYmxvY2sK KyAqCisgKiBAYWRldjogYW1kZ3B1X2RldmljZSBwb2ludGVyCisgKgorICovCitzdGF0aWMgaW50 IGFjcF9od19pbml0KHZvaWQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl diA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKKwlpbnQgcjsKKwljb25zdCBzdHJ1 Y3QgYW1kZ3B1X2lwX2Jsb2NrX3ZlcnNpb24gKmlwX3ZlcnNpb24gPQorCQlhbWRncHVfZ2V0X2lw X2Jsb2NrKGFkZXYsIEFNRF9JUF9CTE9DS19UWVBFX0FDUCk7CisKKwlpZiAoIWlwX3ZlcnNpb24p CisJCXJldHVybiAtRUlOVkFMOworCisJciA9IGFtZF9hY3BfaHdfaW5pdChhZGV2LT5hY3AuY2dz X2RldmljZSwKKwkJCSAgICBpcF92ZXJzaW9uLT5tYWpvciwgaXBfdmVyc2lvbi0+bWlub3IsCisJ CQkgICAgJmFkZXYtPmFjcC5wcml2YXRlKTsKKwkvKiAtRU5PREVWIG1lYW5zIGJvYXJkIHVzZXMg QVogcmF0aGVyIHRoYW4gQUNQICovCisJaWYgKHIgPT0gLUVOT0RFVikKKwkJcmV0dXJuIDA7CisJ ZWxzZSBpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IGFtZF9nbmJfYnVzX2RldmljZV9pbml0KCZh ZGV2LT5hY3AuYWNwX3BjbV9kZXYsCisJCQkJICAgIEFNRF9HTkJfSVBfQUNQX1BDTSwKKwkJCQkg ICAgImFjcF9wY21fZGV2IiwKKwkJCQkgICAgYWRldi0+YWNwLnByaXZhdGUsCisJCQkJICAgIGFk ZXYtPmFjcC5wYXJlbnQpOworCWlmIChyKSB7CisJCWFtZF9hY3BfaHdfZmluaShhZGV2LT5hY3Au cHJpdmF0ZSk7CisJCXJldHVybiByOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGFj cF9od19maW5pIC0gc3RvcCB0aGUgaGFyZHdhcmUgYmxvY2sKKyAqCisgKiBAYWRldjogYW1kZ3B1 X2RldmljZSBwb2ludGVyCisgKgorICovCitzdGF0aWMgaW50IGFjcF9od19maW5pKHZvaWQgKmhh bmRsZSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqKWhhbmRsZTsKKworCWlmIChhZGV2LT5hY3AucHJpdmF0ZSkgeworCQlhbWRfYWNwX2h3 X2ZpbmkoYWRldi0+YWNwLnByaXZhdGUpOworCQlhbWRfZ25iX2J1c191bnJlZ2lzdGVyX2Rldmlj ZSgmYWRldi0+YWNwLmFjcF9wY21fZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBhY3Bfc3VzcGVuZCh2b2lkICpoYW5kbGUpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CisKKwlpZiAoYWRldi0+YWNw LnByaXZhdGUpCisJCWFtZF9hY3Bfc3VzcGVuZChhZGV2LT5hY3AucHJpdmF0ZSk7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBhY3BfcmVzdW1lKHZvaWQgKmhhbmRsZSkKK3sKKwlzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsK KworCWlmIChhZGV2LT5hY3AucHJpdmF0ZSkKKwkJYW1kX2FjcF9yZXN1bWUoYWRldi0+YWNwLnBy aXZhdGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIGFjcF9pc19pZGxlKHZvaWQg KmhhbmRsZSkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBhY3Bfd2FpdF9mb3Jf aWRsZSh2b2lkICpoYW5kbGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNwX3Nv ZnRfcmVzZXQodm9pZCAqaGFuZGxlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBh Y3BfcHJpbnRfc3RhdHVzKHZvaWQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKKworCWRldl9pbmZvKGFkZXYt PmRldiwgIkFDUCBTVEFUVVNcbiIpOworfQorCitzdGF0aWMgaW50IGFjcF9zZXRfY2xvY2tnYXRp bmdfc3RhdGUodm9pZCAqaGFuZGxlLAorCQkJCSAgICAgZW51bSBhbWRfY2xvY2tnYXRpbmdfc3Rh dGUgc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNwX3NldF9wb3dlcmdh dGluZ19zdGF0ZSh2b2lkICpoYW5kbGUsCisJCQkJICAgICBlbnVtIGFtZF9wb3dlcmdhdGluZ19z dGF0ZSBzdGF0ZSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqKWhhbmRsZTsKKworCS8qIFRoaXMgZG9lc24ndCBhY3R1YWxseSBwb3dlcmdh dGUgdGhlIEFDUCBibG9jay4KKwkgKiBUaGF0J3MgZG9uZSBpbiB0aGUgZHBtIGNvZGUgdmlhIHRo ZSBTTUMuICBUaGlzCisJICoganVzdCByZS1pbml0cyB0aGUgYmxvY2sgYXMgbmVjZXNzYXJ5LiAg VGhlIGFjdHVhbAorCSAqIGdhdGluZyBzdGlsbCBoYXBwZW5zIGluIHRoZSBkcG0gY29kZS4gIFdl IHNob3VsZAorCSAqIHJldmlzaXQgdGhpcyB3aGVuIHRoZXJlIGlzIGEgY2xlYW5lciBsaW5lIGJl dHdlZW4KKwkgKiB0aGUgc21jIGFuZCB0aGUgaHcgYmxvY2tzCisJICovCisJaWYgKHN0YXRlID09 IEFNRF9QR19TVEFURV9HQVRFKSB7CisJCWlmIChhZGV2LT5hY3AucHJpdmF0ZSkKKwkJCWFtZF9h Y3Bfc3VzcGVuZChhZGV2LT5hY3AucHJpdmF0ZSk7CisJfSBlbHNlIHsKKwkJaWYgKGFkZXYtPmFj cC5wcml2YXRlKQorCQkJYW1kX2FjcF9yZXN1bWUoYWRldi0+YWNwLnByaXZhdGUpOworCX0KKwly ZXR1cm4gMDsKK30KKworY29uc3Qgc3RydWN0IGFtZF9pcF9mdW5jcyBhY3BfaXBfZnVuY3MgPSB7 CisJLmVhcmx5X2luaXQgPSBhY3BfZWFybHlfaW5pdCwKKwkubGF0ZV9pbml0ID0gTlVMTCwKKwku c3dfaW5pdCA9IGFjcF9zd19pbml0LAorCS5zd19maW5pID0gYWNwX3N3X2ZpbmksCisJLmh3X2lu aXQgPSBhY3BfaHdfaW5pdCwKKwkuaHdfZmluaSA9IGFjcF9od19maW5pLAorCS5zdXNwZW5kID0g YWNwX3N1c3BlbmQsCisJLnJlc3VtZSA9IGFjcF9yZXN1bWUsCisJLmlzX2lkbGUgPSBhY3BfaXNf aWRsZSwKKwkud2FpdF9mb3JfaWRsZSA9IGFjcF93YWl0X2Zvcl9pZGxlLAorCS5zb2Z0X3Jlc2V0 ID0gYWNwX3NvZnRfcmVzZXQsCisJLnByaW50X3N0YXR1cyA9IGFjcF9wcmludF9zdGF0dXMsCisJ LnNldF9jbG9ja2dhdGluZ19zdGF0ZSA9IGFjcF9zZXRfY2xvY2tnYXRpbmdfc3RhdGUsCisJLnNl dF9wb3dlcmdhdGluZ19zdGF0ZSA9IGFjcF9zZXRfcG93ZXJnYXRpbmdfc3RhdGUsCit9OwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FjcC5oIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FjcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjQyNGNkNTJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X2FjcC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmln aHQgMjAxNSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBp bmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUg U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1Io UykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAor ICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgor ICogQXV0aG9yczogQU1ECisgKgorICovCisKKyNpZm5kZWYgX19BTURHUFVfQUNQX0hfXworI2Rl ZmluZSBfX0FNREdQVV9BQ1BfSF9fCisKKyNpbmNsdWRlICJhbWRfZ25iX2J1cy5oIgorCitzdHJ1 Y3QgYW1kZ3B1X2FjcCB7CisJc3RydWN0IGRldmljZSAqcGFyZW50OworCXN0cnVjdCBhbWRfZ25i X2J1c19kZXYgYWNwX3BjbV9kZXY7CisJdm9pZCAqY2dzX2RldmljZTsKKwlzdHJ1Y3QgYW1kX2Fj cF9wcml2YXRlICpwcml2YXRlOworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhbWRfaXBfZnVu Y3MgYWNwX2lwX2Z1bmNzOworCisjZW5kaWYgLyogX19BTURHUFVfQUNQX0hfXyAqLwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvdmkuYyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L3ZpLmMKaW5kZXggNjg1NTJkYS4uYmU5OTY3MCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvdmkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS92aS5jCkBAIC03MSw2ICs3MSw5IEBACiAjaW5jbHVkZSAidXZkX3Y1XzAuaCIKICNpbmNsdWRl ICJ1dmRfdjZfMC5oIgogI2luY2x1ZGUgInZjZV92M18wLmgiCisjaWYgZGVmaW5lZChDT05GSUdf RFJNX0FNRF9BQ1ApCisjaW5jbHVkZSAiYW1kZ3B1X2FjcC5oIgorI2VuZGlmCiAKIC8qCiAgKiBJ bmRpcmVjdCByZWdpc3RlcnMgYWNjZXNzb3IKQEAgLTExOTMsNiArMTE5NiwxNSBAQCBzdGF0aWMg Y29uc3Qgc3RydWN0IGFtZGdwdV9pcF9ibG9ja192ZXJzaW9uIGN6X2lwX2Jsb2Nrc1tdID0KIAkJ LnJldiA9IDAsCiAJCS5mdW5jcyA9ICZ2Y2VfdjNfMF9pcF9mdW5jcywKIAl9LAorI2lmIGRlZmlu ZWQoQ09ORklHX0RSTV9BTURfQUNQKQorCXsKKwkJLnR5cGUgPSBBTURfSVBfQkxPQ0tfVFlQRV9B Q1AsCisJCS5tYWpvciA9IDIsCisJCS5taW5vciA9IDIsCisJCS5yZXYgPSAwLAorCQkuZnVuY3Mg PSAmYWNwX2lwX2Z1bmNzLAorCX0sCisjZW5kaWYKIH07CiAKIGludCB2aV9zZXRfaXBfYmxvY2tz KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2FtZC9pbmNsdWRlL2FtZF9zaGFyZWQuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9h bWRfc2hhcmVkLmgKaW5kZXggNWJkZjFiNC4uODMyNjAyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2FtZC9pbmNsdWRlL2FtZF9zaGFyZWQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2luY2x1ZGUvYW1kX3NoYXJlZC5oCkBAIC0zMyw2ICszMyw3IEBAIGVudW0gYW1kX2lwX2Jsb2Nr X3R5cGUgewogCUFNRF9JUF9CTE9DS19UWVBFX1NETUEsCiAJQU1EX0lQX0JMT0NLX1RZUEVfVVZE LAogCUFNRF9JUF9CTE9DS19UWVBFX1ZDRSwKKwlBTURfSVBfQkxPQ0tfVFlQRV9BQ1AsCiB9Owog CiBlbnVtIGFtZF9jbG9ja2dhdGluZ19zdGF0ZSB7Ci0tIAoxLjguMy4xCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0 CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=