From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Subject: [PATCH v2 1/3] drm/radeon: Cleanup display interrupt handling for evergreen, si Date: Fri, 19 May 2017 19:48:37 -0400 Message-ID: <20170519234840.5644-2-lyude@redhat.com> References: <20170516211202.20325-1-lyude@redhat.com> <20170519234840.5644-1-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170519234840.5644-1-lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Lyude , David Airlie , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= VGhlIGN1cnJlbnQgY29kZSBoZXJlIGlzIHJlYWxseSwgcmVhbGx5IGJhZC4gQSBodWdlIGFtb3Vu dCBvZiBpdCBsb29rcwp0byBiZSBjb3B5IHBhc3RlZCwgaXQgaGFzIHNvbWUgd2VpcmQgaGF0cmVk IG9mIGFycmF5cyBhbmQgY29kZSBzaGFyaW5nLApzd2l0Y2ggY2FzZXMgZXZlcnl3aGVyZSBmb3Ig dGhpbmdzIHRoYXQgcmVhbGx5IGRvbid0IG5lZWQgdGhlbSwgYW5kIGl0Cm1ha2VzIHRoZSBmaWxl IHNlZW0gaW1tZW5zZWx5IG1vcmUgY29tcGxleCB0aGVuIGl0IGFjdHVhbGx5IGlzLiBUaGlzIGlz CmEgcGFpbiBmb3IgbWFpbnRhbmVuY2UsIGFuZCBpcyB2dWxuZXJhYmxlIHRvIG1vcmUgd2VpcmQg aXJxIGhhbmRsaW5nCmJ1Z3MuCgpTbywgbGV0J3Mgc3RhcnQgY2xlYW5pbmcgdGhpcyB1cCBhIGJp dC4gTW9kaWZ5IGFsbCBvZiB0aGUgSVJRIGhhbmRsZXJzCmZvciBldmVyZ3JlZW4vc2kgc28gdGhh dCB0aGV5IGp1c3QgdXNlIGZvciBsb29wcy4gQXMgd2VsbCwgd2UgYWRkIGEKaGVscGVyIGZ1bmN0 aW9uIHJhZGVvbl9pcnFfa21zX3NldF9pcnFfbl9lbmFibGVkKCksIHdob3NlIHB1cnBvc2UgaXMK anVzdCB0byB1cGRhdGUgdGhlIHN0YXRlIG9mIHJlZ2lzdGVycyB0aGF0IGVuYWJsZS9kaXNhYmxl IGludGVycnVwdHMKd2hpbGUgcHJpbnRpbmcgYW55IGNoYW5nZXMgdG8gdGhlIHNldCBvZiBlbmFi bGVkIGludGVycnVwdHMgdG8gdGhlCmtlcm5lbCBsb2cuCgpOb3RlIGluIHRoaXMgY29tbWl0LCBz aW5jZSB2YmxhbmsvdmxpbmUgaXJxIGFja2luZyBpcyBpbnRlcnR3aW5lZCB3aXRoCnBhZ2UgZmxp cCBpcnEgYWNraW5nLCB3ZSBjYW4ndCBjdXQgb3V0IGFsbCBvZiB0aGUgY29weSBwYXN0ZSBpbgpl dmVyZ3JlZW4vc2lfaXJxX2FjaygpIGp1c3QgeWV0LgoKQ2hhbmdlcyBzaW5jZSB2MToKLSBQcmVz ZXJ2ZSBvcmRlciB3ZSB3cml0ZSBiYWNrIGFsbCByZWdpc3RlcnMKClNpZ25lZC1vZmYtYnk6IEx5 dWRlIDxseXVkZUByZWRoYXQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdy ZWVuLmMgICAgICB8IDcyOSArKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVy cy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCAgICAgICAgIHwgIDEzICstCiBkcml2ZXJzL2dwdS9k cm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMgfCAgMzUgKysKIGRyaXZlcnMvZ3B1L2RybS9yYWRl b24vc2kuYyAgICAgICAgICAgICB8IDU5NiArKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLQogNCBm aWxlcyBjaGFuZ2VkLCAzMTQgaW5zZXJ0aW9ucygrKSwgMTA1OSBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jIGIvZHJpdmVycy9ncHUv ZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYwppbmRleCAwYmYxMDM1Li40NGFjNmQzIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9yYWRlb24vZXZlcmdyZWVuLmMKQEAgLTM1LDYgKzM1LDEwIEBACiAjaW5jbHVkZSAiZXZlcmdy ZWVuX2JsaXRfc2hhZGVycy5oIgogI2luY2x1ZGUgInJhZGVvbl91Y29kZS5oIgogCisjZGVmaW5l IERDX0hQRHhfQ09OVFJPTCh4KSAgICAgICAgKERDX0hQRDFfQ09OVFJPTCAgICAgKyAoeCAqIDB4 YykpCisjZGVmaW5lIERDX0hQRHhfSU5UX0NPTlRST0woeCkgICAgKERDX0hQRDFfSU5UX0NPTlRS T0wgKyAoeCAqIDB4YykpCisjZGVmaW5lIERDX0hQRHhfSU5UX1NUQVRVU19SRUcoeCkgKERDX0hQ RDFfSU5UX1NUQVRVUyAgKyAoeCAqIDB4YykpCisKIC8qCiAgKiBJbmRpcmVjdCByZWdpc3RlcnMg YWNjZXNzb3IKICAqLwpAQCAtMTcxNCwzOCArMTcxOCwxMCBAQCB2b2lkIGV2ZXJncmVlbl9wbV9m aW5pc2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAgKi8KIGJvb2wgZXZlcmdyZWVuX2hw ZF9zZW5zZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgZW51bSByYWRlb25faHBkX2lkIGhw ZCkKIHsKLQlib29sIGNvbm5lY3RlZCA9IGZhbHNlOwotCi0Jc3dpdGNoIChocGQpIHsKLQljYXNl IFJBREVPTl9IUERfMToKLQkJaWYgKFJSRUczMihEQ19IUEQxX0lOVF9TVEFUVVMpICYgRENfSFBE eF9TRU5TRSkKLQkJCWNvbm5lY3RlZCA9IHRydWU7Ci0JCWJyZWFrOwotCWNhc2UgUkFERU9OX0hQ RF8yOgotCQlpZiAoUlJFRzMyKERDX0hQRDJfSU5UX1NUQVRVUykgJiBEQ19IUER4X1NFTlNFKQot CQkJY29ubmVjdGVkID0gdHJ1ZTsKLQkJYnJlYWs7Ci0JY2FzZSBSQURFT05fSFBEXzM6Ci0JCWlm IChSUkVHMzIoRENfSFBEM19JTlRfU1RBVFVTKSAmIERDX0hQRHhfU0VOU0UpCi0JCQljb25uZWN0 ZWQgPSB0cnVlOwotCQlicmVhazsKLQljYXNlIFJBREVPTl9IUERfNDoKLQkJaWYgKFJSRUczMihE Q19IUEQ0X0lOVF9TVEFUVVMpICYgRENfSFBEeF9TRU5TRSkKLQkJCWNvbm5lY3RlZCA9IHRydWU7 Ci0JCWJyZWFrOwotCWNhc2UgUkFERU9OX0hQRF81OgotCQlpZiAoUlJFRzMyKERDX0hQRDVfSU5U X1NUQVRVUykgJiBEQ19IUER4X1NFTlNFKQotCQkJY29ubmVjdGVkID0gdHJ1ZTsKLQkJYnJlYWs7 Ci0JY2FzZSBSQURFT05fSFBEXzY6Ci0JCWlmIChSUkVHMzIoRENfSFBENl9JTlRfU1RBVFVTKSAm IERDX0hQRHhfU0VOU0UpCi0JCQljb25uZWN0ZWQgPSB0cnVlOwotCQlicmVhazsKLQlkZWZhdWx0 OgotCQlicmVhazsKLQl9CisJaWYgKGhwZCA9PSBSQURFT05fSFBEX05PTkUpCisJCXJldHVybiBm YWxzZTsKIAotCXJldHVybiBjb25uZWN0ZWQ7CisJcmV0dXJuICEhKFJSRUczMihEQ19IUER4X0lO VF9TVEFUVVNfUkVHKGhwZCkpICYgRENfSFBEeF9TRU5TRSk7CiB9CiAKIC8qKgpAQCAtMTc1OSw2 MSArMTczNSwxNSBAQCBib29sIGV2ZXJncmVlbl9ocGRfc2Vuc2Uoc3RydWN0IHJhZGVvbl9kZXZp Y2UgKnJkZXYsIGVudW0gcmFkZW9uX2hwZF9pZCBocGQpCiB2b2lkIGV2ZXJncmVlbl9ocGRfc2V0 X3BvbGFyaXR5KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkJCWVudW0gcmFkZW9uX2hw ZF9pZCBocGQpCiB7Ci0JdTMyIHRtcDsKIAlib29sIGNvbm5lY3RlZCA9IGV2ZXJncmVlbl9ocGRf c2Vuc2UocmRldiwgaHBkKTsKIAotCXN3aXRjaCAoaHBkKSB7Ci0JY2FzZSBSQURFT05fSFBEXzE6 Ci0JCXRtcCA9IFJSRUczMihEQ19IUEQxX0lOVF9DT05UUk9MKTsKLQkJaWYgKGNvbm5lY3RlZCkK LQkJCXRtcCAmPSB+RENfSFBEeF9JTlRfUE9MQVJJVFk7Ci0JCWVsc2UKLQkJCXRtcCB8PSBEQ19I UER4X0lOVF9QT0xBUklUWTsKLQkJV1JFRzMyKERDX0hQRDFfSU5UX0NPTlRST0wsIHRtcCk7Ci0J CWJyZWFrOwotCWNhc2UgUkFERU9OX0hQRF8yOgotCQl0bXAgPSBSUkVHMzIoRENfSFBEMl9JTlRf Q09OVFJPTCk7Ci0JCWlmIChjb25uZWN0ZWQpCi0JCQl0bXAgJj0gfkRDX0hQRHhfSU5UX1BPTEFS SVRZOwotCQllbHNlCi0JCQl0bXAgfD0gRENfSFBEeF9JTlRfUE9MQVJJVFk7Ci0JCVdSRUczMihE Q19IUEQyX0lOVF9DT05UUk9MLCB0bXApOwotCQlicmVhazsKLQljYXNlIFJBREVPTl9IUERfMzoK LQkJdG1wID0gUlJFRzMyKERDX0hQRDNfSU5UX0NPTlRST0wpOwotCQlpZiAoY29ubmVjdGVkKQot CQkJdG1wICY9IH5EQ19IUER4X0lOVF9QT0xBUklUWTsKLQkJZWxzZQotCQkJdG1wIHw9IERDX0hQ RHhfSU5UX1BPTEFSSVRZOwotCQlXUkVHMzIoRENfSFBEM19JTlRfQ09OVFJPTCwgdG1wKTsKLQkJ YnJlYWs7Ci0JY2FzZSBSQURFT05fSFBEXzQ6Ci0JCXRtcCA9IFJSRUczMihEQ19IUEQ0X0lOVF9D T05UUk9MKTsKLQkJaWYgKGNvbm5lY3RlZCkKLQkJCXRtcCAmPSB+RENfSFBEeF9JTlRfUE9MQVJJ VFk7Ci0JCWVsc2UKLQkJCXRtcCB8PSBEQ19IUER4X0lOVF9QT0xBUklUWTsKLQkJV1JFRzMyKERD X0hQRDRfSU5UX0NPTlRST0wsIHRtcCk7Ci0JCWJyZWFrOwotCWNhc2UgUkFERU9OX0hQRF81Ogot CQl0bXAgPSBSUkVHMzIoRENfSFBENV9JTlRfQ09OVFJPTCk7Ci0JCWlmIChjb25uZWN0ZWQpCi0J CQl0bXAgJj0gfkRDX0hQRHhfSU5UX1BPTEFSSVRZOwotCQllbHNlCi0JCQl0bXAgfD0gRENfSFBE eF9JTlRfUE9MQVJJVFk7Ci0JCVdSRUczMihEQ19IUEQ1X0lOVF9DT05UUk9MLCB0bXApOwotCQkJ YnJlYWs7Ci0JY2FzZSBSQURFT05fSFBEXzY6Ci0JCXRtcCA9IFJSRUczMihEQ19IUEQ2X0lOVF9D T05UUk9MKTsKLQkJaWYgKGNvbm5lY3RlZCkKLQkJCXRtcCAmPSB+RENfSFBEeF9JTlRfUE9MQVJJ VFk7Ci0JCWVsc2UKLQkJCXRtcCB8PSBEQ19IUER4X0lOVF9QT0xBUklUWTsKLQkJV1JFRzMyKERD X0hQRDZfSU5UX0NPTlRST0wsIHRtcCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwot CX0KKwlpZiAoaHBkID09IFJBREVPTl9IUERfTk9ORSkKKwkJcmV0dXJuOworCisJaWYgKGNvbm5l Y3RlZCkKKwkJV1JFRzMyX0FORChEQ19IUER4X0lOVF9DT05UUk9MKGhwZCksIH5EQ19IUER4X0lO VF9QT0xBUklUWSk7CisJZWxzZQorCQlXUkVHMzJfT1IoRENfSFBEeF9JTlRfQ09OVFJPTChocGQp LCBEQ19IUER4X0lOVF9QT0xBUklUWSk7CiB9CiAKIC8qKgpAQCAtMTgzMyw3ICsxNzYzLDggQEAg dm9pZCBldmVyZ3JlZW5faHBkX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAJCURD X0hQRHhfUlhfSU5UX1RJTUVSKDB4ZmEpIHwgRENfSFBEeF9FTjsKIAogCWxpc3RfZm9yX2VhY2hf ZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkg ewotCQlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvciA9IHRvX3JhZGVv bl9jb25uZWN0b3IoY29ubmVjdG9yKTsKKwkJZW51bSByYWRlb25faHBkX2lkIGhwZCA9CisJCQl0 b19yYWRlb25fY29ubmVjdG9yKGNvbm5lY3RvciktPmhwZC5ocGQ7CiAKIAkJaWYgKGNvbm5lY3Rv ci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCB8fAogCQkgICAgY29u bmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUykgewpAQCAt MTg0NCwzMSArMTc3NSwxNCBAQCB2b2lkIGV2ZXJncmVlbl9ocGRfaW5pdChzdHJ1Y3QgcmFkZW9u X2RldmljZSAqcmRldikKIAkJCSAqLwogCQkJY29udGludWU7CiAJCX0KLQkJc3dpdGNoIChyYWRl b25fY29ubmVjdG9yLT5ocGQuaHBkKSB7Ci0JCWNhc2UgUkFERU9OX0hQRF8xOgotCQkJV1JFRzMy KERDX0hQRDFfQ09OVFJPTCwgdG1wKTsKLQkJCWJyZWFrOwotCQljYXNlIFJBREVPTl9IUERfMjoK LQkJCVdSRUczMihEQ19IUEQyX0NPTlRST0wsIHRtcCk7Ci0JCQlicmVhazsKLQkJY2FzZSBSQURF T05fSFBEXzM6Ci0JCQlXUkVHMzIoRENfSFBEM19DT05UUk9MLCB0bXApOwotCQkJYnJlYWs7Ci0J CWNhc2UgUkFERU9OX0hQRF80OgotCQkJV1JFRzMyKERDX0hQRDRfQ09OVFJPTCwgdG1wKTsKLQkJ CWJyZWFrOwotCQljYXNlIFJBREVPTl9IUERfNToKLQkJCVdSRUczMihEQ19IUEQ1X0NPTlRST0ws IHRtcCk7Ci0JCQlicmVhazsKLQkJY2FzZSBSQURFT05fSFBEXzY6Ci0JCQlXUkVHMzIoRENfSFBE Nl9DT05UUk9MLCB0bXApOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQot CQlyYWRlb25faHBkX3NldF9wb2xhcml0eShyZGV2LCByYWRlb25fY29ubmVjdG9yLT5ocGQuaHBk KTsKLQkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmhwZC5ocGQgIT0gUkFERU9OX0hQRF9OT05FKQot CQkJZW5hYmxlZCB8PSAxIDw8IHJhZGVvbl9jb25uZWN0b3ItPmhwZC5ocGQ7CisKKwkJaWYgKGhw ZCA9PSBSQURFT05fSFBEX05PTkUpCisJCQljb250aW51ZTsKKworCQlXUkVHMzIoRENfSFBEeF9D T05UUk9MKGhwZCksIHRtcCk7CisJCWVuYWJsZWQgfD0gMSA8PCBocGQ7CisKKwkJcmFkZW9uX2hw ZF9zZXRfcG9sYXJpdHkocmRldiwgaHBkKTsKIAl9CiAJcmFkZW9uX2lycV9rbXNfZW5hYmxlX2hw ZChyZGV2LCBlbmFibGVkKTsKIH0KQEAgLTE4ODgsMzEgKzE4MDIsMTQgQEAgdm9pZCBldmVyZ3Jl ZW5faHBkX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAJdW5zaWduZWQgZGlzYWJs ZWQgPSAwOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29u ZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7Ci0JCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpy YWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCQlzd2l0 Y2ggKHJhZGVvbl9jb25uZWN0b3ItPmhwZC5ocGQpIHsKLQkJY2FzZSBSQURFT05fSFBEXzE6Ci0J CQlXUkVHMzIoRENfSFBEMV9DT05UUk9MLCAwKTsKLQkJCWJyZWFrOwotCQljYXNlIFJBREVPTl9I UERfMjoKLQkJCVdSRUczMihEQ19IUEQyX0NPTlRST0wsIDApOwotCQkJYnJlYWs7Ci0JCWNhc2Ug UkFERU9OX0hQRF8zOgotCQkJV1JFRzMyKERDX0hQRDNfQ09OVFJPTCwgMCk7Ci0JCQlicmVhazsK LQkJY2FzZSBSQURFT05fSFBEXzQ6Ci0JCQlXUkVHMzIoRENfSFBENF9DT05UUk9MLCAwKTsKLQkJ CWJyZWFrOwotCQljYXNlIFJBREVPTl9IUERfNToKLQkJCVdSRUczMihEQ19IUEQ1X0NPTlRST0ws IDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkFERU9OX0hQRF82OgotCQkJV1JFRzMyKERDX0hQRDZf Q09OVFJPTCwgMCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JCWlm IChyYWRlb25fY29ubmVjdG9yLT5ocGQuaHBkICE9IFJBREVPTl9IUERfTk9ORSkKLQkJCWRpc2Fi bGVkIHw9IDEgPDwgcmFkZW9uX2Nvbm5lY3Rvci0+aHBkLmhwZDsKKwkJZW51bSByYWRlb25faHBk X2lkIGhwZCA9CisJCQl0b19yYWRlb25fY29ubmVjdG9yKGNvbm5lY3RvciktPmhwZC5ocGQ7CisK KwkJaWYgKGhwZCA9PSBSQURFT05fSFBEX05PTkUpCisJCQljb250aW51ZTsKKworCQlXUkVHMzIo RENfSFBEeF9DT05UUk9MKGhwZCksIDApOworCQlkaXNhYmxlZCB8PSAxIDw8IGhwZDsKIAl9CiAJ cmFkZW9uX2lycV9rbXNfZGlzYWJsZV9ocGQocmRldiwgZGlzYWJsZWQpOwogfQpAQCAtMjYzNyw2 ICsyNTM0LDE1IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBldmVyZ3JlZW5fZHBfb2Zmc2V0c1td ID0KIAlFVkVSR1JFRU5fRFA1X1JFR0lTVEVSX09GRlNFVAogfTsKIAorc3RhdGljIGNvbnN0IHVu c2lnbmVkIGV2ZXJncmVlbl9kaXNwX2ludF9zdGF0dXNbXSA9Cit7CisJRElTUF9JTlRFUlJVUFRf U1RBVFVTLAorCURJU1BfSU5URVJSVVBUX1NUQVRVU19DT05USU5VRSwKKwlESVNQX0lOVEVSUlVQ VF9TVEFUVVNfQ09OVElOVUUyLAorCURJU1BfSU5URVJSVVBUX1NUQVRVU19DT05USU5VRTMsCisJ RElTUF9JTlRFUlJVUFRfU1RBVFVTX0NPTlRJTlVFNCwKKwlESVNQX0lOVEVSUlVQVF9TVEFUVVNf Q09OVElOVUU1Cit9OwogCiAvKgogICogQXNzdW1wdGlvbiBpcyB0aGF0IEVWRVJHUkVFTl9DUlRD X01BU1RFUl9FTiBlbmFibGUgZm9yIHJlcXVlc3RlZCBjcnRjCkBAIC00NTQzLDYgKzQ0NDksNyBA QCB1MzIgZXZlcmdyZWVuX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgcmFkZW9uX2RldmljZSAq cmRldiwgaW50IGNydGMpCiAKIHZvaWQgZXZlcmdyZWVuX2Rpc2FibGVfaW50ZXJydXB0X3N0YXRl KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogeworCWludCBpOwogCXUzMiB0bXA7CiAKIAlp ZiAocmRldi0+ZmFtaWx5ID49IENISVBfQ0FZTUFOKSB7CkBAIC00NTU4LDE2ICs0NDY1LDggQEAg dm9pZCBldmVyZ3JlZW5fZGlzYWJsZV9pbnRlcnJ1cHRfc3RhdGUoc3RydWN0IHJhZGVvbl9kZXZp Y2UgKnJkZXYpCiAJV1JFRzMyKERNQV9DTlRMLCB0bXApOwogCVdSRUczMihHUkJNX0lOVF9DTlRM LCAwKTsKIAlXUkVHMzIoU1JCTV9JTlRfQ05UTCwgMCk7Ci0JV1JFRzMyKElOVF9NQVNLICsgRVZF UkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCwgMCk7Ci0JV1JFRzMyKElOVF9NQVNLICsgRVZF UkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCwgMCk7Ci0JaWYgKHJkZXYtPm51bV9jcnRjID49 IDQpIHsKLQkJV1JFRzMyKElOVF9NQVNLICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNF VCwgMCk7Ci0JCVdSRUczMihJTlRfTUFTSyArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZT RVQsIDApOwotCX0KLQlpZiAocmRldi0+bnVtX2NydGMgPj0gNikgewotCQlXUkVHMzIoSU5UX01B U0sgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULCAwKTsKLQkJV1JFRzMyKElOVF9N QVNLICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgMCk7Ci0JfQorCWZvciAoaSA9 IDA7IGkgPCByZGV2LT5udW1fY3J0YzsgaSsrKQorCQlXUkVHMzIoSU5UX01BU0sgKyBjcnRjX29m ZnNldHNbaV0sIDApOwogCiAJV1JFRzMyKEdSUEhfSU5UX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JU QzBfUkVHSVNURVJfT0ZGU0VULCAwKTsKIAlXUkVHMzIoR1JQSF9JTlRfQ09OVFJPTCArIEVWRVJH UkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQsIDApOwpAQCAtNDU4NSwyNyArNDQ4NCwxNiBAQCB2 b2lkIGV2ZXJncmVlbl9kaXNhYmxlX2ludGVycnVwdF9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2Rldmlj ZSAqcmRldikKIAkJV1JFRzMyKERBQ0FfQVVUT0RFVEVDVF9JTlRfQ09OVFJPTCwgMCk7CiAJV1JF RzMyKERBQ0JfQVVUT0RFVEVDVF9JTlRfQ09OVFJPTCwgMCk7CiAKLQl0bXAgPSBSUkVHMzIoRENf SFBEMV9JTlRfQ09OVFJPTCkgJiBEQ19IUER4X0lOVF9QT0xBUklUWTsKLQlXUkVHMzIoRENfSFBE MV9JTlRfQ09OVFJPTCwgdG1wKTsKLQl0bXAgPSBSUkVHMzIoRENfSFBEMl9JTlRfQ09OVFJPTCkg JiBEQ19IUER4X0lOVF9QT0xBUklUWTsKLQlXUkVHMzIoRENfSFBEMl9JTlRfQ09OVFJPTCwgdG1w KTsKLQl0bXAgPSBSUkVHMzIoRENfSFBEM19JTlRfQ09OVFJPTCkgJiBEQ19IUER4X0lOVF9QT0xB UklUWTsKLQlXUkVHMzIoRENfSFBEM19JTlRfQ09OVFJPTCwgdG1wKTsKLQl0bXAgPSBSUkVHMzIo RENfSFBENF9JTlRfQ09OVFJPTCkgJiBEQ19IUER4X0lOVF9QT0xBUklUWTsKLQlXUkVHMzIoRENf SFBENF9JTlRfQ09OVFJPTCwgdG1wKTsKLQl0bXAgPSBSUkVHMzIoRENfSFBENV9JTlRfQ09OVFJP TCkgJiBEQ19IUER4X0lOVF9QT0xBUklUWTsKLQlXUkVHMzIoRENfSFBENV9JTlRfQ09OVFJPTCwg dG1wKTsKLQl0bXAgPSBSUkVHMzIoRENfSFBENl9JTlRfQ09OVFJPTCkgJiBEQ19IUER4X0lOVF9Q T0xBUklUWTsKLQlXUkVHMzIoRENfSFBENl9JTlRfQ09OVFJPTCwgdG1wKTsKLQorCWZvciAoaSA9 IDA7IGkgPCA2OyBpKyspCisJCVdSRUczMl9BTkQoRENfSFBEeF9JTlRfQ09OVFJPTChpKSwgRENf SFBEeF9JTlRfUE9MQVJJVFkpOwogfQogCisvKiBOb3RlIHRoYXQgdGhlIG9yZGVyIHdlIHdyaXRl IGJhY2sgcmVncyBoZXJlIGlzIGltcG9ydGFudCAqLwogaW50IGV2ZXJncmVlbl9pcnFfc2V0KHN0 cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogeworCWludCBpOwogCXUzMiBjcF9pbnRfY250bCA9 IENOVFhfQlVTWV9JTlRfRU5BQkxFIHwgQ05UWF9FTVBUWV9JTlRfRU5BQkxFOwogCXUzMiBjcF9p bnRfY250bDEgPSAwLCBjcF9pbnRfY250bDIgPSAwOwotCXUzMiBjcnRjMSA9IDAsIGNydGMyID0g MCwgY3J0YzMgPSAwLCBjcnRjNCA9IDAsIGNydGM1ID0gMCwgY3J0YzYgPSAwOwotCXUzMiBocGQx LCBocGQyLCBocGQzLCBocGQ0LCBocGQ1LCBocGQ2OwogCXUzMiBncmJtX2ludF9jbnRsID0gMDsK IAl1MzIgYWZtdDEgPSAwLCBhZm10MiA9IDAsIGFmbXQzID0gMCwgYWZtdDQgPSAwLCBhZm10NSA9 IDAsIGFmbXQ2ID0gMDsKIAl1MzIgZG1hX2NudGwsIGRtYV9jbnRsMSA9IDA7CkBAIC00NjIzLDEy ICs0NTExLDYgQEAgaW50IGV2ZXJncmVlbl9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpy ZGV2KQogCQlyZXR1cm4gMDsKIAl9CiAKLQlocGQxID0gUlJFRzMyKERDX0hQRDFfSU5UX0NPTlRS T0wpICYgfihEQ19IUER4X0lOVF9FTiB8IERDX0hQRHhfUlhfSU5UX0VOKTsKLQlocGQyID0gUlJF RzMyKERDX0hQRDJfSU5UX0NPTlRST0wpICYgfihEQ19IUER4X0lOVF9FTiB8IERDX0hQRHhfUlhf SU5UX0VOKTsKLQlocGQzID0gUlJFRzMyKERDX0hQRDNfSU5UX0NPTlRST0wpICYgfihEQ19IUER4 X0lOVF9FTiB8IERDX0hQRHhfUlhfSU5UX0VOKTsKLQlocGQ0ID0gUlJFRzMyKERDX0hQRDRfSU5U X0NPTlRST0wpICYgfihEQ19IUER4X0lOVF9FTiB8IERDX0hQRHhfUlhfSU5UX0VOKTsKLQlocGQ1 ID0gUlJFRzMyKERDX0hQRDVfSU5UX0NPTlRST0wpICYgfihEQ19IUER4X0lOVF9FTiB8IERDX0hQ RHhfUlhfSU5UX0VOKTsKLQlocGQ2ID0gUlJFRzMyKERDX0hQRDZfSU5UX0NPTlRST0wpICYgfihE Q19IUER4X0lOVF9FTiB8IERDX0hQRHhfUlhfSU5UX0VOKTsKIAlpZiAocmRldi0+ZmFtaWx5ID09 IENISVBfQVJVQkEpCiAJCXRoZXJtYWxfaW50ID0gUlJFRzMyKFROX0NHX1RIRVJNQUxfSU5UX0NU UkwpICYKIAkJCX4oVEhFUk1fSU5UX01BU0tfSElHSCB8IFRIRVJNX0lOVF9NQVNLX0xPVyk7CkBA IC00Njg1LDYwICs0NTY3LDYgQEAgaW50IGV2ZXJncmVlbl9pcnFfc2V0KHN0cnVjdCByYWRlb25f ZGV2aWNlICpyZGV2KQogCQl0aGVybWFsX2ludCB8PSBUSEVSTV9JTlRfTUFTS19ISUdIIHwgVEhF Uk1fSU5UX01BU0tfTE9XOwogCX0KIAotCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzBd IHx8Ci0JICAgIGF0b21pY19yZWFkKCZyZGV2LT5pcnEucGZsaXBbMF0pKSB7Ci0JCURSTV9ERUJV RygiZXZlcmdyZWVuX2lycV9zZXQ6IHZibGFuayAwXG4iKTsKLQkJY3J0YzEgfD0gVkJMQU5LX0lO VF9NQVNLOwotCX0KLQlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFsxXSB8fAotCSAgICBh dG9taWNfcmVhZCgmcmRldi0+aXJxLnBmbGlwWzFdKSkgewotCQlEUk1fREVCVUcoImV2ZXJncmVl bl9pcnFfc2V0OiB2YmxhbmsgMVxuIik7Ci0JCWNydGMyIHw9IFZCTEFOS19JTlRfTUFTSzsKLQl9 Ci0JaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRbMl0gfHwKLQkgICAgYXRvbWljX3JlYWQo JnJkZXYtPmlycS5wZmxpcFsyXSkpIHsKLQkJRFJNX0RFQlVHKCJldmVyZ3JlZW5faXJxX3NldDog dmJsYW5rIDJcbiIpOwotCQljcnRjMyB8PSBWQkxBTktfSU5UX01BU0s7Ci0JfQotCWlmIChyZGV2 LT5pcnEuY3J0Y192YmxhbmtfaW50WzNdIHx8Ci0JICAgIGF0b21pY19yZWFkKCZyZGV2LT5pcnEu cGZsaXBbM10pKSB7Ci0JCURSTV9ERUJVRygiZXZlcmdyZWVuX2lycV9zZXQ6IHZibGFuayAzXG4i KTsKLQkJY3J0YzQgfD0gVkJMQU5LX0lOVF9NQVNLOwotCX0KLQlpZiAocmRldi0+aXJxLmNydGNf dmJsYW5rX2ludFs0XSB8fAotCSAgICBhdG9taWNfcmVhZCgmcmRldi0+aXJxLnBmbGlwWzRdKSkg ewotCQlEUk1fREVCVUcoImV2ZXJncmVlbl9pcnFfc2V0OiB2YmxhbmsgNFxuIik7Ci0JCWNydGM1 IHw9IFZCTEFOS19JTlRfTUFTSzsKLQl9Ci0JaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRb NV0gfHwKLQkgICAgYXRvbWljX3JlYWQoJnJkZXYtPmlycS5wZmxpcFs1XSkpIHsKLQkJRFJNX0RF QlVHKCJldmVyZ3JlZW5faXJxX3NldDogdmJsYW5rIDVcbiIpOwotCQljcnRjNiB8PSBWQkxBTktf SU5UX01BU0s7Ci0JfQotCWlmIChyZGV2LT5pcnEuaHBkWzBdKSB7Ci0JCURSTV9ERUJVRygiZXZl cmdyZWVuX2lycV9zZXQ6IGhwZCAxXG4iKTsKLQkJaHBkMSB8PSBEQ19IUER4X0lOVF9FTiB8IERD X0hQRHhfUlhfSU5UX0VOOwotCX0KLQlpZiAocmRldi0+aXJxLmhwZFsxXSkgewotCQlEUk1fREVC VUcoImV2ZXJncmVlbl9pcnFfc2V0OiBocGQgMlxuIik7Ci0JCWhwZDIgfD0gRENfSFBEeF9JTlRf RU4gfCBEQ19IUER4X1JYX0lOVF9FTjsKLQl9Ci0JaWYgKHJkZXYtPmlycS5ocGRbMl0pIHsKLQkJ RFJNX0RFQlVHKCJldmVyZ3JlZW5faXJxX3NldDogaHBkIDNcbiIpOwotCQlocGQzIHw9IERDX0hQ RHhfSU5UX0VOIHwgRENfSFBEeF9SWF9JTlRfRU47Ci0JfQotCWlmIChyZGV2LT5pcnEuaHBkWzNd KSB7Ci0JCURSTV9ERUJVRygiZXZlcmdyZWVuX2lycV9zZXQ6IGhwZCA0XG4iKTsKLQkJaHBkNCB8 PSBEQ19IUER4X0lOVF9FTiB8IERDX0hQRHhfUlhfSU5UX0VOOwotCX0KLQlpZiAocmRldi0+aXJx LmhwZFs0XSkgewotCQlEUk1fREVCVUcoImV2ZXJncmVlbl9pcnFfc2V0OiBocGQgNVxuIik7Ci0J CWhwZDUgfD0gRENfSFBEeF9JTlRfRU4gfCBEQ19IUER4X1JYX0lOVF9FTjsKLQl9Ci0JaWYgKHJk ZXYtPmlycS5ocGRbNV0pIHsKLQkJRFJNX0RFQlVHKCJldmVyZ3JlZW5faXJxX3NldDogaHBkIDZc biIpOwotCQlocGQ2IHw9IERDX0hQRHhfSU5UX0VOIHwgRENfSFBEeF9SWF9JTlRfRU47Ci0JfQog CWlmIChyZGV2LT5pcnEuYWZtdFswXSkgewogCQlEUk1fREVCVUcoImV2ZXJncmVlbl9pcnFfc2V0 OiBoZG1pIDBcbiIpOwogCQlhZm10MSB8PSBBRk1UX0FaX0ZPUk1BVF9XVFJJR19NQVNLOwpAQCAt NDc3OCwxNSArNDYwNiwxMiBAQCBpbnQgZXZlcmdyZWVuX2lycV9zZXQoc3RydWN0IHJhZGVvbl9k ZXZpY2UgKnJkZXYpCiAKIAlXUkVHMzIoR1JCTV9JTlRfQ05UTCwgZ3JibV9pbnRfY250bCk7CiAK LQlXUkVHMzIoSU5UX01BU0sgKyBFVkVSR1JFRU5fQ1JUQzBfUkVHSVNURVJfT0ZGU0VULCBjcnRj MSk7Ci0JV1JFRzMyKElOVF9NQVNLICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCwg Y3J0YzIpOwotCWlmIChyZGV2LT5udW1fY3J0YyA+PSA0KSB7Ci0JCVdSRUczMihJTlRfTUFTSyAr IEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsIGNydGMzKTsKLQkJV1JFRzMyKElOVF9N QVNLICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwgY3J0YzQpOwotCX0KLQlpZiAo cmRldi0+bnVtX2NydGMgPj0gNikgewotCQlXUkVHMzIoSU5UX01BU0sgKyBFVkVSR1JFRU5fQ1JU QzRfUkVHSVNURVJfT0ZGU0VULCBjcnRjNSk7Ci0JCVdSRUczMihJTlRfTUFTSyArIEVWRVJHUkVF Tl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsIGNydGM2KTsKKwlmb3IgKGkgPSAwOyBpIDwgcmRldi0+ bnVtX2NydGM7IGkrKykgeworCQlyYWRlb25faXJxX2ttc19zZXRfaXJxX25fZW5hYmxlZCgKKwkJ ICAgIHJkZXYsIElOVF9NQVNLICsgY3J0Y19vZmZzZXRzW2ldLAorCQkgICAgVkJMQU5LX0lOVF9N QVNLLAorCQkgICAgcmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFtpXSB8fAorCQkgICAgYXRvbWlj X3JlYWQoJnJkZXYtPmlycS5wZmxpcFtpXSksICJ2YmxhbmsiLCBpKTsKIAl9CiAKIAlXUkVHMzIo R1JQSF9JTlRfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQsCkBAIC00 ODA2LDEyICs0NjMxLDEzIEBAIGludCBldmVyZ3JlZW5faXJxX3NldChzdHJ1Y3QgcmFkZW9uX2Rl dmljZSAqcmRldikKIAkJICAgICAgIEdSUEhfUEZMSVBfSU5UX01BU0spOwogCX0KIAotCVdSRUcz MihEQ19IUEQxX0lOVF9DT05UUk9MLCBocGQxKTsKLQlXUkVHMzIoRENfSFBEMl9JTlRfQ09OVFJP TCwgaHBkMik7Ci0JV1JFRzMyKERDX0hQRDNfSU5UX0NPTlRST0wsIGhwZDMpOwotCVdSRUczMihE Q19IUEQ0X0lOVF9DT05UUk9MLCBocGQ0KTsKLQlXUkVHMzIoRENfSFBENV9JTlRfQ09OVFJPTCwg aHBkNSk7Ci0JV1JFRzMyKERDX0hQRDZfSU5UX0NPTlRST0wsIGhwZDYpOworCWZvciAoaSA9IDA7 IGkgPCA2OyBpKyspIHsKKwkJcmFkZW9uX2lycV9rbXNfc2V0X2lycV9uX2VuYWJsZWQoCisJCSAg ICByZGV2LCBEQ19IUER4X0lOVF9DT05UUk9MKGkpLAorCQkgICAgRENfSFBEeF9JTlRfRU4gfCBE Q19IUER4X1JYX0lOVF9FTiwKKwkJICAgIHJkZXYtPmlycS5ocGRbaV0sICJIUEQiLCBpKTsKKwl9 CisKIAlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfQVJVQkEpCiAJCVdSRUczMihUTl9DR19USEVS TUFMX0lOVF9DVFJMLCB0aGVybWFsX2ludCk7CiAJZWxzZQpAQCAtNDgzMCwxNiArNDY1NiwxNiBA QCBpbnQgZXZlcmdyZWVuX2lycV9zZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAJcmV0 dXJuIDA7CiB9CiAKKy8qIE5vdGUgdGhhdCB0aGUgb3JkZXIgd2Ugd3JpdGUgYmFjayByZWdzIGhl cmUgaXMgaW1wb3J0YW50ICovCiBzdGF0aWMgdm9pZCBldmVyZ3JlZW5faXJxX2FjayhzdHJ1Y3Qg cmFkZW9uX2RldmljZSAqcmRldikKIHsKKwlpbnQgaTsKKwl1MzIgKmRpc3BfaW50ID0gcmRldi0+ aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnQ7CiAJdTMyIHRtcDsKIAotCXJkZXYtPmly cS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50ID0gUlJFRzMyKERJU1BfSU5URVJSVVBUX1NU QVRVUyk7Ci0JcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udCA9IFJS RUczMihESVNQX0lOVEVSUlVQVF9TVEFUVVNfQ09OVElOVUUpOwotCXJkZXYtPmlycS5zdGF0X3Jl Z3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQyID0gUlJFRzMyKERJU1BfSU5URVJSVVBUX1NUQVRV U19DT05USU5VRTIpOwotCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2Nv bnQzID0gUlJFRzMyKERJU1BfSU5URVJSVVBUX1NUQVRVU19DT05USU5VRTMpOwotCXJkZXYtPmly cS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQ0ID0gUlJFRzMyKERJU1BfSU5URVJS VVBUX1NUQVRVU19DT05USU5VRTQpOwotCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRp c3BfaW50X2NvbnQ1ID0gUlJFRzMyKERJU1BfSU5URVJSVVBUX1NUQVRVU19DT05USU5VRTUpOwor CWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCWRpc3BfaW50W2ldID0gUlJFRzMyKGV2ZXJncmVl bl9kaXNwX2ludF9zdGF0dXNbaV0pOworCiAJcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4u ZDFncnBoX2ludCA9IFJSRUczMihHUlBIX0lOVF9TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzBfUkVH SVNURVJfT0ZGU0VUKTsKIAlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kMmdycGhfaW50 ID0gUlJFRzMyKEdSUEhfSU5UX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZT RVQpOwogCWlmIChyZGV2LT5udW1fY3J0YyA+PSA0KSB7CkBAIC00ODYyLDI4ICs0Njg4LDI4IEBA IHN0YXRpYyB2b2lkIGV2ZXJncmVlbl9pcnFfYWNrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2 KQogCQlXUkVHMzIoR1JQSF9JTlRfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09G RlNFVCwgR1JQSF9QRkxJUF9JTlRfQ0xFQVIpOwogCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2 ZXJncmVlbi5kMmdycGhfaW50ICYgR1JQSF9QRkxJUF9JTlRfT0NDVVJSRUQpCiAJCVdSRUczMihH UlBIX0lOVF9TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VULCBHUlBIX1BG TElQX0lOVF9DTEVBUik7Ci0JaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3Bf aW50ICYgTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCkKLQkJV1JFRzMyKFZCTEFOS19TVEFUVVMgKyBF VkVSR1JFRU5fQ1JUQzBfUkVHSVNURVJfT0ZGU0VULCBWQkxBTktfQUNLKTsKLQlpZiAocmRldi0+ aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnQgJiBMQl9EMV9WTElORV9JTlRFUlJVUFQp Ci0JCVdSRUczMihWTElORV9TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzBfUkVHSVNURVJfT0ZGU0VU LCBWTElORV9BQ0spOwotCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2lu dF9jb250ICYgTEJfRDJfVkJMQU5LX0lOVEVSUlVQVCkKLQkJV1JFRzMyKFZCTEFOS19TVEFUVVMg KyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VULCBWQkxBTktfQUNLKTsKLQlpZiAocmRl di0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udCAmIExCX0QyX1ZMSU5FX0lO VEVSUlVQVCkKLQkJV1JFRzMyKFZMSU5FX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RF Ul9PRkZTRVQsIFZMSU5FX0FDSyk7CisJaWYgKGRpc3BfaW50WzBdICYgTEJfRDFfVkJMQU5LX0lO VEVSUlVQVCkKKwkJV1JFRzMyKFZCTEFOS19TVEFUVVMgKyBjcnRjX29mZnNldHNbMF0sIFZCTEFO S19BQ0spOworCWlmIChkaXNwX2ludFswXSAmIExCX0QxX1ZMSU5FX0lOVEVSUlVQVCkKKwkJV1JF RzMyKFZMSU5FX1NUQVRVUyArIGNydGNfb2Zmc2V0c1swXSwgVkxJTkVfQUNLKTsKKwlpZiAoZGlz cF9pbnRbMV0gJiBMQl9EMV9WQkxBTktfSU5URVJSVVBUKQorCQlXUkVHMzIoVkJMQU5LX1NUQVRV UyArIGNydGNfb2Zmc2V0c1sxXSwgVkJMQU5LX0FDSyk7CisJaWYgKGRpc3BfaW50WzFdICYgTEJf RDFfVkxJTkVfSU5URVJSVVBUKQorCQlXUkVHMzIoVkxJTkVfU1RBVFVTICsgY3J0Y19vZmZzZXRz WzFdLCBWTElORV9BQ0spOwogCiAJaWYgKHJkZXYtPm51bV9jcnRjID49IDQpIHsKIAkJaWYgKHJk ZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmQzZ3JwaF9pbnQgJiBHUlBIX1BGTElQX0lOVF9P Q0NVUlJFRCkKIAkJCVdSRUczMihHUlBIX0lOVF9TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzJfUkVH SVNURVJfT0ZGU0VULCBHUlBIX1BGTElQX0lOVF9DTEVBUik7CiAJCWlmIChyZGV2LT5pcnEuc3Rh dF9yZWdzLmV2ZXJncmVlbi5kNGdycGhfaW50ICYgR1JQSF9QRkxJUF9JTlRfT0NDVVJSRUQpCiAJ CQlXUkVHMzIoR1JQSF9JTlRfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNF VCwgR1JQSF9QRkxJUF9JTlRfQ0xFQVIpOwotCQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVy Z3JlZW4uZGlzcF9pbnRfY29udDIgJiBMQl9EM19WQkxBTktfSU5URVJSVVBUKQotCQkJV1JFRzMy KFZCTEFOS19TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VULCBWQkxBTktf QUNLKTsKLQkJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQy ICYgTEJfRDNfVkxJTkVfSU5URVJSVVBUKQotCQkJV1JFRzMyKFZMSU5FX1NUQVRVUyArIEVWRVJH UkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsIFZMSU5FX0FDSyk7Ci0JCWlmIChyZGV2LT5pcnEu c3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250MyAmIExCX0Q0X1ZCTEFOS19JTlRFUlJV UFQpCi0JCQlXUkVHMzIoVkJMQU5LX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9P RkZTRVQsIFZCTEFOS19BQ0spOwotCQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4u ZGlzcF9pbnRfY29udDMgJiBMQl9ENF9WTElORV9JTlRFUlJVUFQpCi0JCQlXUkVHMzIoVkxJTkVf U1RBVFVTICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwgVkxJTkVfQUNLKTsKKwkJ aWYgKGRpc3BfaW50WzJdICYgTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCkKKwkJCVdSRUczMihWQkxB TktfU1RBVFVTICsgY3J0Y19vZmZzZXRzWzJdLCBWQkxBTktfQUNLKTsKKwkJaWYgKGRpc3BfaW50 WzJdICYgTEJfRDFfVkxJTkVfSU5URVJSVVBUKQorCQkJV1JFRzMyKFZMSU5FX1NUQVRVUyArIGNy dGNfb2Zmc2V0c1syXSwgVkxJTkVfQUNLKTsKKwkJaWYgKGRpc3BfaW50WzNdICYgTEJfRDFfVkJM QU5LX0lOVEVSUlVQVCkKKwkJCVdSRUczMihWQkxBTktfU1RBVFVTICsgY3J0Y19vZmZzZXRzWzNd LCBWQkxBTktfQUNLKTsKKwkJaWYgKGRpc3BfaW50WzNdICYgTEJfRDFfVkxJTkVfSU5URVJSVVBU KQorCQkJV1JFRzMyKFZMSU5FX1NUQVRVUyArIGNydGNfb2Zmc2V0c1szXSwgVkxJTkVfQUNLKTsK IAl9CiAKIAlpZiAocmRldi0+bnVtX2NydGMgPj0gNikgewpAQCAtNDg5MSw3NiArNDcxNywyNCBA QCBzdGF0aWMgdm9pZCBldmVyZ3JlZW5faXJxX2FjayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRl dikKIAkJCVdSRUczMihHUlBIX0lOVF9TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJf T0ZGU0VULCBHUlBIX1BGTElQX0lOVF9DTEVBUik7CiAJCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdz LmV2ZXJncmVlbi5kNmdycGhfaW50ICYgR1JQSF9QRkxJUF9JTlRfT0NDVVJSRUQpCiAJCQlXUkVH MzIoR1JQSF9JTlRfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgR1JQ SF9QRkxJUF9JTlRfQ0xFQVIpOwotCQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4u ZGlzcF9pbnRfY29udDQgJiBMQl9ENV9WQkxBTktfSU5URVJSVVBUKQotCQkJV1JFRzMyKFZCTEFO S19TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULCBWQkxBTktfQUNLKTsK LQkJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQ0ICYgTEJf RDVfVkxJTkVfSU5URVJSVVBUKQotCQkJV1JFRzMyKFZMSU5FX1NUQVRVUyArIEVWRVJHUkVFTl9D UlRDNF9SRUdJU1RFUl9PRkZTRVQsIFZMSU5FX0FDSyk7Ci0JCWlmIChyZGV2LT5pcnEuc3RhdF9y ZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250NSAmIExCX0Q2X1ZCTEFOS19JTlRFUlJVUFQpCi0J CQlXUkVHMzIoVkJMQU5LX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQs IFZCTEFOS19BQ0spOwotCQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9p bnRfY29udDUgJiBMQl9ENl9WTElORV9JTlRFUlJVUFQpCi0JCQlXUkVHMzIoVkxJTkVfU1RBVFVT ICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgVkxJTkVfQUNLKTsKLQl9Ci0KLQlp ZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnQgJiBEQ19IUEQxX0lOVEVS UlVQVCkgewotCQl0bXAgPSBSUkVHMzIoRENfSFBEMV9JTlRfQ09OVFJPTCk7Ci0JCXRtcCB8PSBE Q19IUER4X0lOVF9BQ0s7Ci0JCVdSRUczMihEQ19IUEQxX0lOVF9DT05UUk9MLCB0bXApOwotCX0K LQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udCAmIERDX0hQ RDJfSU5URVJSVVBUKSB7Ci0JCXRtcCA9IFJSRUczMihEQ19IUEQyX0lOVF9DT05UUk9MKTsKLQkJ dG1wIHw9IERDX0hQRHhfSU5UX0FDSzsKLQkJV1JFRzMyKERDX0hQRDJfSU5UX0NPTlRST0wsIHRt cCk7Ci0JfQotCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250 MiAmIERDX0hQRDNfSU5URVJSVVBUKSB7Ci0JCXRtcCA9IFJSRUczMihEQ19IUEQzX0lOVF9DT05U Uk9MKTsKLQkJdG1wIHw9IERDX0hQRHhfSU5UX0FDSzsKLQkJV1JFRzMyKERDX0hQRDNfSU5UX0NP TlRST0wsIHRtcCk7Ci0JfQotCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNw X2ludF9jb250MyAmIERDX0hQRDRfSU5URVJSVVBUKSB7Ci0JCXRtcCA9IFJSRUczMihEQ19IUEQ0 X0lOVF9DT05UUk9MKTsKLQkJdG1wIHw9IERDX0hQRHhfSU5UX0FDSzsKLQkJV1JFRzMyKERDX0hQ RDRfSU5UX0NPTlRST0wsIHRtcCk7Ci0JfQotCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJn cmVlbi5kaXNwX2ludF9jb250NCAmIERDX0hQRDVfSU5URVJSVVBUKSB7Ci0JCXRtcCA9IFJSRUcz MihEQ19IUEQ1X0lOVF9DT05UUk9MKTsKLQkJdG1wIHw9IERDX0hQRHhfSU5UX0FDSzsKLQkJV1JF RzMyKERDX0hQRDVfSU5UX0NPTlRST0wsIHRtcCk7Ci0JfQotCWlmIChyZGV2LT5pcnEuc3RhdF9y ZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250NSAmIERDX0hQRDZfSU5URVJSVVBUKSB7Ci0JCXRt cCA9IFJSRUczMihEQ19IUEQ2X0lOVF9DT05UUk9MKTsKLQkJdG1wIHw9IERDX0hQRHhfSU5UX0FD SzsKLQkJV1JFRzMyKERDX0hQRDZfSU5UX0NPTlRST0wsIHRtcCk7Ci0JfQotCi0JaWYgKHJkZXYt PmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50ICYgRENfSFBEMV9SWF9JTlRFUlJVUFQp IHsKLQkJdG1wID0gUlJFRzMyKERDX0hQRDFfSU5UX0NPTlRST0wpOwotCQl0bXAgfD0gRENfSFBE eF9SWF9JTlRfQUNLOwotCQlXUkVHMzIoRENfSFBEMV9JTlRfQ09OVFJPTCwgdG1wKTsKLQl9Ci0J aWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQgJiBEQ19IUEQy X1JYX0lOVEVSUlVQVCkgewotCQl0bXAgPSBSUkVHMzIoRENfSFBEMl9JTlRfQ09OVFJPTCk7Ci0J CXRtcCB8PSBEQ19IUER4X1JYX0lOVF9BQ0s7Ci0JCVdSRUczMihEQ19IUEQyX0lOVF9DT05UUk9M LCB0bXApOwotCX0KLQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRf Y29udDIgJiBEQ19IUEQzX1JYX0lOVEVSUlVQVCkgewotCQl0bXAgPSBSUkVHMzIoRENfSFBEM19J TlRfQ09OVFJPTCk7Ci0JCXRtcCB8PSBEQ19IUER4X1JYX0lOVF9BQ0s7Ci0JCVdSRUczMihEQ19I UEQzX0lOVF9DT05UUk9MLCB0bXApOwotCX0KLQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVy Z3JlZW4uZGlzcF9pbnRfY29udDMgJiBEQ19IUEQ0X1JYX0lOVEVSUlVQVCkgewotCQl0bXAgPSBS UkVHMzIoRENfSFBENF9JTlRfQ09OVFJPTCk7Ci0JCXRtcCB8PSBEQ19IUER4X1JYX0lOVF9BQ0s7 Ci0JCVdSRUczMihEQ19IUEQ0X0lOVF9DT05UUk9MLCB0bXApOwotCX0KLQlpZiAocmRldi0+aXJx LnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDQgJiBEQ19IUEQ1X1JYX0lOVEVSUlVQ VCkgewotCQl0bXAgPSBSUkVHMzIoRENfSFBENV9JTlRfQ09OVFJPTCk7Ci0JCXRtcCB8PSBEQ19I UER4X1JYX0lOVF9BQ0s7Ci0JCVdSRUczMihEQ19IUEQ1X0lOVF9DT05UUk9MLCB0bXApOwotCX0K LQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDUgJiBEQ19I UEQ2X1JYX0lOVEVSUlVQVCkgewotCQl0bXAgPSBSUkVHMzIoRENfSFBENl9JTlRfQ09OVFJPTCk7 Ci0JCXRtcCB8PSBEQ19IUER4X1JYX0lOVF9BQ0s7Ci0JCVdSRUczMihEQ19IUEQ2X0lOVF9DT05U Uk9MLCB0bXApOworCQlpZiAoZGlzcF9pbnRbNF0gJiBMQl9EMV9WQkxBTktfSU5URVJSVVBUKQor CQkJV1JFRzMyKFZCTEFOS19TVEFUVVMgKyBjcnRjX29mZnNldHNbNF0sIFZCTEFOS19BQ0spOwor CQlpZiAoZGlzcF9pbnRbNF0gJiBMQl9EMV9WTElORV9JTlRFUlJVUFQpCisJCQlXUkVHMzIoVkxJ TkVfU1RBVFVTICsgY3J0Y19vZmZzZXRzWzRdLCBWTElORV9BQ0spOworCQlpZiAoZGlzcF9pbnRb NV0gJiBMQl9EMV9WQkxBTktfSU5URVJSVVBUKQorCQkJV1JFRzMyKFZCTEFOS19TVEFUVVMgKyBj cnRjX29mZnNldHNbNV0sIFZCTEFOS19BQ0spOworCQlpZiAoZGlzcF9pbnRbNV0gJiBMQl9EMV9W TElORV9JTlRFUlJVUFQpCisJCQlXUkVHMzIoVkxJTkVfU1RBVFVTICsgY3J0Y19vZmZzZXRzWzVd LCBWTElORV9BQ0spOworCX0KKworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwkJaWYgKGRp c3BfaW50W2ldICYgRENfSFBEMV9JTlRFUlJVUFQpCisJCQlXUkVHMzJfT1IoRENfSFBEeF9JTlRf Q09OVFJPTChpKSwgRENfSFBEeF9JTlRfQUNLKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgNjsg aSsrKSB7CisJCWlmIChkaXNwX2ludFtpXSAmIERDX0hQRDFfUlhfSU5URVJSVVBUKQorCQkJV1JF RzMyX09SKERDX0hQRHhfSU5UX0NPTlRST0woaSksIERDX0hQRHhfUlhfSU5UX0FDSyk7CiAJfQog CiAJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmFmbXRfc3RhdHVzMSAmIEFGTVRf QVpfRk9STUFUX1dUUklHKSB7CkBAIC01MDM3LDYgKzQ4MTEsOSBAQCBzdGF0aWMgdTMyIGV2ZXJn cmVlbl9nZXRfaWhfd3B0cihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIAogaW50IGV2ZXJn cmVlbl9pcnFfcHJvY2VzcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKwl1MzIgKmRp c3BfaW50ID0gcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnQ7CisJdTMyIGNy dGNfaWR4LCBocGRfaWR4OworCXUzMiBtYXNrOwogCXUzMiB3cHRyOwogCXUzMiBycHRyOwogCXUz MiBzcmNfaWQsIHNyY19kYXRhOwpAQCAtNTA0Niw2ICs0ODIzLDcgQEAgaW50IGV2ZXJncmVlbl9p cnFfcHJvY2VzcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIAlib29sIHF1ZXVlX2RwID0g ZmFsc2U7CiAJYm9vbCBxdWV1ZV90aGVybWFsID0gZmFsc2U7CiAJdTMyIHN0YXR1cywgYWRkcjsK Kwljb25zdCBjaGFyICpldmVudF9uYW1lOwogCiAJaWYgKCFyZGV2LT5paC5lbmFibGVkIHx8IHJk ZXYtPnNodXRkb3duKQogCQlyZXR1cm4gSVJRX05PTkU7CkBAIC01MDc0LDE4NCArNDg1Miw0NCBA QCBpbnQgZXZlcmdyZWVuX2lycV9wcm9jZXNzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQog CiAJCXN3aXRjaCAoc3JjX2lkKSB7CiAJCWNhc2UgMTogLyogRDEgdmJsYW5rL3ZsaW5lICovCi0J CQlzd2l0Y2ggKHNyY19kYXRhKSB7Ci0JCQljYXNlIDA6IC8qIEQxIHZibGFuayAqLwotCQkJCWlm ICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50ICYgTEJfRDFfVkJMQU5L X0lOVEVSUlVQVCkpCi0JCQkJCURSTV9ERUJVRygiSUg6IEQxIHZibGFuayAtIElIIGV2ZW50IHcv byBhc3NlcnRlZCBpcnEgYml0P1xuIik7Ci0KLQkJCQlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5r X2ludFswXSkgewotCQkJCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCAwKTsKLQkJCQkJ cmRldi0+cG0udmJsYW5rX3N5bmMgPSB0cnVlOwotCQkJCQl3YWtlX3VwKCZyZGV2LT5pcnEudmJs YW5rX3F1ZXVlKTsKLQkJCQl9Ci0JCQkJaWYgKGF0b21pY19yZWFkKCZyZGV2LT5pcnEucGZsaXBb MF0pKQotCQkJCQlyYWRlb25fY3J0Y19oYW5kbGVfdmJsYW5rKHJkZXYsIDApOwotCQkJCXJkZXYt PmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50ICY9IH5MQl9EMV9WQkxBTktfSU5URVJS VVBUOwotCQkJCURSTV9ERUJVRygiSUg6IEQxIHZibGFua1xuIik7Ci0KLQkJCQlicmVhazsKLQkJ CWNhc2UgMTogLyogRDEgdmxpbmUgKi8KLQkJCQlpZiAoIShyZGV2LT5pcnEuc3RhdF9yZWdzLmV2 ZXJncmVlbi5kaXNwX2ludCAmIExCX0QxX1ZMSU5FX0lOVEVSUlVQVCkpCi0JCQkJCURSTV9ERUJV RygiSUg6IEQxIHZsaW5lIC0gSUggZXZlbnQgdy9vIGFzc2VydGVkIGlycSBiaXQ/XG4iKTsKLQot CQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50ICY9IH5MQl9EMV9WTElO RV9JTlRFUlJVUFQ7Ci0JCQkJRFJNX0RFQlVHKCJJSDogRDEgdmxpbmVcbiIpOwotCi0JCQkJYnJl YWs7Ci0JCQlkZWZhdWx0OgotCQkJCURSTV9ERUJVRygiVW5oYW5kbGVkIGludGVycnVwdDogJWQg JWRcbiIsIHNyY19pZCwgc3JjX2RhdGEpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7CiAJ CWNhc2UgMjogLyogRDIgdmJsYW5rL3ZsaW5lICovCi0JCQlzd2l0Y2ggKHNyY19kYXRhKSB7Ci0J CQljYXNlIDA6IC8qIEQyIHZibGFuayAqLwotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3Mu ZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQgJiBMQl9EMl9WQkxBTktfSU5URVJSVVBUKSkKLQkJCQkJ RFJNX0RFQlVHKCJJSDogRDIgdmJsYW5rIC0gSUggZXZlbnQgdy9vIGFzc2VydGVkIGlycSBiaXQ/ XG4iKTsKLQotCQkJCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzFdKSB7Ci0JCQkJCWRy bV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDEpOwotCQkJCQlyZGV2LT5wbS52Ymxhbmtfc3lu YyA9IHRydWU7Ci0JCQkJCXdha2VfdXAoJnJkZXYtPmlycS52YmxhbmtfcXVldWUpOwotCQkJCX0K LQkJCQlpZiAoYXRvbWljX3JlYWQoJnJkZXYtPmlycS5wZmxpcFsxXSkpCi0JCQkJCXJhZGVvbl9j cnRjX2hhbmRsZV92YmxhbmsocmRldiwgMSk7Ci0JCQkJcmRldi0+aXJxLnN0YXRfcmVncy5ldmVy Z3JlZW4uZGlzcF9pbnRfY29udCAmPSB+TEJfRDJfVkJMQU5LX0lOVEVSUlVQVDsKLQkJCQlEUk1f REVCVUcoIklIOiBEMiB2YmxhbmtcbiIpOwotCi0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6IC8qIEQy IHZsaW5lICovCi0JCQkJaWYgKCEocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9p bnRfY29udCAmIExCX0QyX1ZMSU5FX0lOVEVSUlVQVCkpCi0JCQkJCURSTV9ERUJVRygiSUg6IEQy IHZsaW5lIC0gSUggZXZlbnQgdy9vIGFzc2VydGVkIGlycSBiaXQ/XG4iKTsKLQotCQkJCXJkZXYt PmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQgJj0gfkxCX0QyX1ZMSU5FX0lO VEVSUlVQVDsKLQkJCQlEUk1fREVCVUcoIklIOiBEMiB2bGluZVxuIik7Ci0KLQkJCQlicmVhazsK LQkJCWRlZmF1bHQ6Ci0JCQkJRFJNX0RFQlVHKCJVbmhhbmRsZWQgaW50ZXJydXB0OiAlZCAlZFxu Iiwgc3JjX2lkLCBzcmNfZGF0YSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlicmVhazsKIAkJY2Fz ZSAzOiAvKiBEMyB2YmxhbmsvdmxpbmUgKi8KLQkJCXN3aXRjaCAoc3JjX2RhdGEpIHsKLQkJCWNh c2UgMDogLyogRDMgdmJsYW5rICovCi0JCQkJaWYgKCEocmRldi0+aXJxLnN0YXRfcmVncy5ldmVy Z3JlZW4uZGlzcF9pbnRfY29udDIgJiBMQl9EM19WQkxBTktfSU5URVJSVVBUKSkKLQkJCQkJRFJN X0RFQlVHKCJJSDogRDMgdmJsYW5rIC0gSUggZXZlbnQgdy9vIGFzc2VydGVkIGlycSBiaXQ/XG4i KTsKLQotCQkJCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzJdKSB7Ci0JCQkJCWRybV9o YW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDIpOwotCQkJCQlyZGV2LT5wbS52Ymxhbmtfc3luYyA9 IHRydWU7Ci0JCQkJCXdha2VfdXAoJnJkZXYtPmlycS52YmxhbmtfcXVldWUpOwotCQkJCX0KLQkJ CQlpZiAoYXRvbWljX3JlYWQoJnJkZXYtPmlycS5wZmxpcFsyXSkpCi0JCQkJCXJhZGVvbl9jcnRj X2hhbmRsZV92YmxhbmsocmRldiwgMik7Ci0JCQkJcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3Jl ZW4uZGlzcF9pbnRfY29udDIgJj0gfkxCX0QzX1ZCTEFOS19JTlRFUlJVUFQ7Ci0JCQkJRFJNX0RF QlVHKCJJSDogRDMgdmJsYW5rXG4iKTsKLQotCQkJCWJyZWFrOwotCQkJY2FzZSAxOiAvKiBEMyB2 bGluZSAqLwotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50 X2NvbnQyICYgTEJfRDNfVkxJTkVfSU5URVJSVVBUKSkKLQkJCQkJRFJNX0RFQlVHKCJJSDogRDMg dmxpbmUgLSBJSCBldmVudCB3L28gYXNzZXJ0ZWQgaXJxIGJpdD9cbiIpOwotCi0JCQkJcmRldi0+ aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDIgJj0gfkxCX0QzX1ZMSU5FX0lO VEVSUlVQVDsKLQkJCQlEUk1fREVCVUcoIklIOiBEMyB2bGluZVxuIik7Ci0KLQkJCQlicmVhazsK LQkJCWRlZmF1bHQ6Ci0JCQkJRFJNX0RFQlVHKCJVbmhhbmRsZWQgaW50ZXJydXB0OiAlZCAlZFxu Iiwgc3JjX2lkLCBzcmNfZGF0YSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlicmVhazsKIAkJY2Fz ZSA0OiAvKiBENCB2YmxhbmsvdmxpbmUgKi8KLQkJCXN3aXRjaCAoc3JjX2RhdGEpIHsKLQkJCWNh c2UgMDogLyogRDQgdmJsYW5rICovCi0JCQkJaWYgKCEocmRldi0+aXJxLnN0YXRfcmVncy5ldmVy Z3JlZW4uZGlzcF9pbnRfY29udDMgJiBMQl9ENF9WQkxBTktfSU5URVJSVVBUKSkKLQkJCQkJRFJN X0RFQlVHKCJJSDogRDQgdmJsYW5rIC0gSUggZXZlbnQgdy9vIGFzc2VydGVkIGlycSBiaXQ/XG4i KTsKLQotCQkJCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzNdKSB7Ci0JCQkJCWRybV9o YW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDMpOwotCQkJCQlyZGV2LT5wbS52Ymxhbmtfc3luYyA9 IHRydWU7Ci0JCQkJCXdha2VfdXAoJnJkZXYtPmlycS52YmxhbmtfcXVldWUpOwotCQkJCX0KLQkJ CQlpZiAoYXRvbWljX3JlYWQoJnJkZXYtPmlycS5wZmxpcFszXSkpCi0JCQkJCXJhZGVvbl9jcnRj X2hhbmRsZV92YmxhbmsocmRldiwgMyk7Ci0JCQkJcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3Jl ZW4uZGlzcF9pbnRfY29udDMgJj0gfkxCX0Q0X1ZCTEFOS19JTlRFUlJVUFQ7Ci0JCQkJRFJNX0RF QlVHKCJJSDogRDQgdmJsYW5rXG4iKTsKLQotCQkJCWJyZWFrOwotCQkJY2FzZSAxOiAvKiBENCB2 bGluZSAqLwotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50 X2NvbnQzICYgTEJfRDRfVkxJTkVfSU5URVJSVVBUKSkKLQkJCQkJRFJNX0RFQlVHKCJJSDogRDQg dmxpbmUgLSBJSCBldmVudCB3L28gYXNzZXJ0ZWQgaXJxIGJpdD9cbiIpOwotCi0JCQkJcmRldi0+ aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDMgJj0gfkxCX0Q0X1ZMSU5FX0lO VEVSUlVQVDsKLQkJCQlEUk1fREVCVUcoIklIOiBENCB2bGluZVxuIik7Ci0KLQkJCQlicmVhazsK LQkJCWRlZmF1bHQ6Ci0JCQkJRFJNX0RFQlVHKCJVbmhhbmRsZWQgaW50ZXJydXB0OiAlZCAlZFxu Iiwgc3JjX2lkLCBzcmNfZGF0YSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlicmVhazsKIAkJY2Fz ZSA1OiAvKiBENSB2YmxhbmsvdmxpbmUgKi8KLQkJCXN3aXRjaCAoc3JjX2RhdGEpIHsKLQkJCWNh c2UgMDogLyogRDUgdmJsYW5rICovCi0JCQkJaWYgKCEocmRldi0+aXJxLnN0YXRfcmVncy5ldmVy Z3JlZW4uZGlzcF9pbnRfY29udDQgJiBMQl9ENV9WQkxBTktfSU5URVJSVVBUKSkKLQkJCQkJRFJN X0RFQlVHKCJJSDogRDUgdmJsYW5rIC0gSUggZXZlbnQgdy9vIGFzc2VydGVkIGlycSBiaXQ/XG4i KTsKKwkJY2FzZSA2OiAvKiBENiB2YmxhbmsvdmxpbmUgKi8KKwkJCWNydGNfaWR4ID0gc3JjX2lk IC0gMTsKKworCQkJaWYgKHNyY19kYXRhID09IDApIHsgLyogdmJsYW5rICovCisJCQkJbWFzayA9 IExCX0QxX1ZCTEFOS19JTlRFUlJVUFQ7CisJCQkJZXZlbnRfbmFtZSA9ICJ2YmxhbmsiOwogCi0J CQkJaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRbNF0pIHsKLQkJCQkJZHJtX2hhbmRsZV92 YmxhbmsocmRldi0+ZGRldiwgNCk7CisJCQkJaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRb Y3J0Y19pZHhdKSB7CisJCQkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIGNydGNfaWR4 KTsKIAkJCQkJcmRldi0+cG0udmJsYW5rX3N5bmMgPSB0cnVlOwogCQkJCQl3YWtlX3VwKCZyZGV2 LT5pcnEudmJsYW5rX3F1ZXVlKTsKIAkJCQl9Ci0JCQkJaWYgKGF0b21pY19yZWFkKCZyZGV2LT5p cnEucGZsaXBbNF0pKQotCQkJCQlyYWRlb25fY3J0Y19oYW5kbGVfdmJsYW5rKHJkZXYsIDQpOwot CQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQ0ICY9IH5MQl9E NV9WQkxBTktfSU5URVJSVVBUOwotCQkJCURSTV9ERUJVRygiSUg6IEQ1IHZibGFua1xuIik7Ci0K LQkJCQlicmVhazsKLQkJCWNhc2UgMTogLyogRDUgdmxpbmUgKi8KLQkJCQlpZiAoIShyZGV2LT5p cnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250NCAmIExCX0Q1X1ZMSU5FX0lOVEVS UlVQVCkpCi0JCQkJCURSTV9ERUJVRygiSUg6IEQ1IHZsaW5lIC0gSUggZXZlbnQgdy9vIGFzc2Vy dGVkIGlycSBiaXQ/XG4iKTsKLQotCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRp c3BfaW50X2NvbnQ0ICY9IH5MQl9ENV9WTElORV9JTlRFUlJVUFQ7Ci0JCQkJRFJNX0RFQlVHKCJJ SDogRDUgdmxpbmVcbiIpOworCQkJCWlmIChhdG9taWNfcmVhZCgmcmRldi0+aXJxLnBmbGlwW2Ny dGNfaWR4XSkpIHsKKwkJCQkJcmFkZW9uX2NydGNfaGFuZGxlX3ZibGFuayhyZGV2LAorCQkJCQkJ CQkgIGNydGNfaWR4KTsKKwkJCQl9CiAKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJRFJN X0RFQlVHKCJVbmhhbmRsZWQgaW50ZXJydXB0OiAlZCAlZFxuIiwgc3JjX2lkLCBzcmNfZGF0YSk7 CisJCQl9IGVsc2UgaWYgKHNyY19kYXRhID09IDEpIHsgLyogdmxpbmUgKi8KKwkJCQltYXNrID0g TEJfRDFfVkxJTkVfSU5URVJSVVBUOworCQkJCWV2ZW50X25hbWUgPSAidmxpbmUiOworCQkJfSBl bHNlIHsKKwkJCQlEUk1fREVCVUcoIlVuaGFuZGxlZCBpbnRlcnJ1cHQ6ICVkICVkXG4iLAorCQkJ CQkgIHNyY19pZCwgc3JjX2RhdGEpOwogCQkJCWJyZWFrOwogCQkJfQotCQkJYnJlYWs7Ci0JCWNh c2UgNjogLyogRDYgdmJsYW5rL3ZsaW5lICovCi0JCQlzd2l0Y2ggKHNyY19kYXRhKSB7Ci0JCQlj YXNlIDA6IC8qIEQ2IHZibGFuayAqLwotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZl cmdyZWVuLmRpc3BfaW50X2NvbnQ1ICYgTEJfRDZfVkJMQU5LX0lOVEVSUlVQVCkpCi0JCQkJCURS TV9ERUJVRygiSUg6IEQ2IHZibGFuayAtIElIIGV2ZW50IHcvbyBhc3NlcnRlZCBpcnEgYml0P1xu Iik7CiAKLQkJCQlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFs1XSkgewotCQkJCQlkcm1f aGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCA1KTsKLQkJCQkJcmRldi0+cG0udmJsYW5rX3N5bmMg PSB0cnVlOwotCQkJCQl3YWtlX3VwKCZyZGV2LT5pcnEudmJsYW5rX3F1ZXVlKTsKLQkJCQl9Ci0J CQkJaWYgKGF0b21pY19yZWFkKCZyZGV2LT5pcnEucGZsaXBbNV0pKQotCQkJCQlyYWRlb25fY3J0 Y19oYW5kbGVfdmJsYW5rKHJkZXYsIDUpOwotCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdy ZWVuLmRpc3BfaW50X2NvbnQ1ICY9IH5MQl9ENl9WQkxBTktfSU5URVJSVVBUOwotCQkJCURSTV9E RUJVRygiSUg6IEQ2IHZibGFua1xuIik7Ci0KLQkJCQlicmVhazsKLQkJCWNhc2UgMTogLyogRDYg dmxpbmUgKi8KLQkJCQlpZiAoIShyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2lu dF9jb250NSAmIExCX0Q2X1ZMSU5FX0lOVEVSUlVQVCkpCi0JCQkJCURSTV9ERUJVRygiSUg6IEQ2 IHZsaW5lIC0gSUggZXZlbnQgdy9vIGFzc2VydGVkIGlycSBiaXQ/XG4iKTsKKwkJCWlmICghKGRp c3BfaW50W2NydGNfaWR4XSAmIG1hc2spKSB7CisJCQkJRFJNX0RFQlVHKCJJSDogRCVkICVzIC0g SUggZXZlbnQgdy9vIGFzc2VydGVkIGlycSBiaXQ/XG4iLAorCQkJCQkgIGNydGNfaWR4ICsgMSwg ZXZlbnRfbmFtZSk7CisJCQl9CiAKLQkJCQlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5k aXNwX2ludF9jb250NSAmPSB+TEJfRDZfVkxJTkVfSU5URVJSVVBUOwotCQkJCURSTV9ERUJVRygi SUg6IEQ2IHZsaW5lXG4iKTsKKwkJCWRpc3BfaW50W2NydGNfaWR4XSAmPSB+bWFzazsKKwkJCURS TV9ERUJVRygiSUg6IEQlZCAlc1xuIiwgY3J0Y19pZHggKyAxLCBldmVudF9uYW1lKTsKIAotCQkJ CWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlEUk1fREVCVUcoIlVuaGFuZGxlZCBpbnRlcnJ1cHQ6 ICVkICVkXG4iLCBzcmNfaWQsIHNyY19kYXRhKTsKLQkJCQlicmVhazsKLQkJCX0KIAkJCWJyZWFr OwogCQljYXNlIDg6IC8qIEQxIHBhZ2UgZmxpcCAqLwogCQljYXNlIDEwOiAvKiBEMiBwYWdlIGZs aXAgKi8KQEAgLTUyNjQsMTA3ICs0OTAyLDMwIEBAIGludCBldmVyZ3JlZW5faXJxX3Byb2Nlc3Mo c3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAJCQkJcmFkZW9uX2NydGNfaGFuZGxlX2ZsaXAo cmRldiwgKHNyY19pZCAtIDgpID4+IDEpOwogCQkJYnJlYWs7CiAJCWNhc2UgNDI6IC8qIEhQRCBo b3RwbHVnICovCi0JCQlzd2l0Y2ggKHNyY19kYXRhKSB7Ci0JCQljYXNlIDA6Ci0JCQkJaWYgKCEo cmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnQgJiBEQ19IUEQxX0lOVEVSUlVQ VCkpCi0JCQkJCURSTV9ERUJVRygiSUg6IElIIGV2ZW50IHcvbyBhc3NlcnRlZCBpcnEgYml0P1xu Iik7Ci0KLQkJCQlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludCAmPSB+RENf SFBEMV9JTlRFUlJVUFQ7Ci0JCQkJcXVldWVfaG90cGx1ZyA9IHRydWU7Ci0JCQkJRFJNX0RFQlVH KCJJSDogSFBEMVxuIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6Ci0JCQkJaWYgKCEocmRldi0+ aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udCAmIERDX0hQRDJfSU5URVJSVVBU KSkKLQkJCQkJRFJNX0RFQlVHKCJJSDogSUggZXZlbnQgdy9vIGFzc2VydGVkIGlycSBiaXQ/XG4i KTsKLQotCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQgJj0g fkRDX0hQRDJfSU5URVJSVVBUOwotCQkJCXF1ZXVlX2hvdHBsdWcgPSB0cnVlOwotCQkJCURSTV9E RUJVRygiSUg6IEhQRDJcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyOgotCQkJCWlmICghKHJk ZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQyICYgRENfSFBEM19JTlRF UlJVUFQpKQotCQkJCQlEUk1fREVCVUcoIklIOiBJSCBldmVudCB3L28gYXNzZXJ0ZWQgaXJxIGJp dD9cbiIpOwotCi0JCQkJcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29u dDIgJj0gfkRDX0hQRDNfSU5URVJSVVBUOwotCQkJCXF1ZXVlX2hvdHBsdWcgPSB0cnVlOwotCQkJ CURSTV9ERUJVRygiSUg6IEhQRDNcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAzOgotCQkJCWlm ICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQzICYgRENfSFBE NF9JTlRFUlJVUFQpKQotCQkJCQlEUk1fREVCVUcoIklIOiBJSCBldmVudCB3L28gYXNzZXJ0ZWQg aXJxIGJpdD9cbiIpOwotCi0JCQkJcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9p bnRfY29udDMgJj0gfkRDX0hQRDRfSU5URVJSVVBUOworCQkJaWYgKHNyY19kYXRhIDw9IDUpIHsK KwkJCQlocGRfaWR4ID0gc3JjX2RhdGE7CisJCQkJbWFzayA9IERDX0hQRDFfSU5URVJSVVBUOwog CQkJCXF1ZXVlX2hvdHBsdWcgPSB0cnVlOwotCQkJCURSTV9ERUJVRygiSUg6IEhQRDRcbiIpOwot CQkJCWJyZWFrOwotCQkJY2FzZSA0OgotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZl cmdyZWVuLmRpc3BfaW50X2NvbnQ0ICYgRENfSFBENV9JTlRFUlJVUFQpKQotCQkJCQlEUk1fREVC VUcoIklIOiBJSCBldmVudCB3L28gYXNzZXJ0ZWQgaXJxIGJpdD9cbiIpOworCQkJCWV2ZW50X25h bWUgPSAiSFBEIjsKIAotCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50 X2NvbnQ0ICY9IH5EQ19IUEQ1X0lOVEVSUlVQVDsKLQkJCQlxdWV1ZV9ob3RwbHVnID0gdHJ1ZTsK LQkJCQlEUk1fREVCVUcoIklIOiBIUEQ1XG4iKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgNToKLQkJ CQlpZiAoIShyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250NSAmIERD X0hQRDZfSU5URVJSVVBUKSkKLQkJCQkJRFJNX0RFQlVHKCJJSDogSUggZXZlbnQgdy9vIGFzc2Vy dGVkIGlycSBiaXQ/XG4iKTsKLQotCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRp c3BfaW50X2NvbnQ1ICY9IH5EQ19IUEQ2X0lOVEVSUlVQVDsKLQkJCQlxdWV1ZV9ob3RwbHVnID0g dHJ1ZTsKLQkJCQlEUk1fREVCVUcoIklIOiBIUEQ2XG4iKTsKLQkJCQlicmVhazsKLQkJCWNhc2Ug NjoKLQkJCQlpZiAoIShyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludCAmIERD X0hQRDFfUlhfSU5URVJSVVBUKSkKLQkJCQkJRFJNX0RFQlVHKCJJSDogSUggZXZlbnQgdy9vIGFz c2VydGVkIGlycSBiaXQ/XG4iKTsKLQotCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVu LmRpc3BfaW50ICY9IH5EQ19IUEQxX1JYX0lOVEVSUlVQVDsKLQkJCQlxdWV1ZV9kcCA9IHRydWU7 Ci0JCQkJRFJNX0RFQlVHKCJJSDogSFBEX1JYIDFcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSA3 OgotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQg JiBEQ19IUEQyX1JYX0lOVEVSUlVQVCkpCi0JCQkJCURSTV9ERUJVRygiSUg6IElIIGV2ZW50IHcv byBhc3NlcnRlZCBpcnEgYml0P1xuIik7Ci0KLQkJCQlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJn cmVlbi5kaXNwX2ludF9jb250ICY9IH5EQ19IUEQyX1JYX0lOVEVSUlVQVDsKKwkJCX0gZWxzZSBp ZiAoc3JjX2RhdGEgPD0gMTEpIHsKKwkJCQlocGRfaWR4ID0gc3JjX2RhdGEgLSA2OworCQkJCW1h c2sgPSBEQ19IUEQxX1JYX0lOVEVSUlVQVDsKIAkJCQlxdWV1ZV9kcCA9IHRydWU7Ci0JCQkJRFJN X0RFQlVHKCJJSDogSFBEX1JYIDJcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSA4OgotCQkJCWlm ICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQyICYgRENfSFBE M19SWF9JTlRFUlJVUFQpKQotCQkJCQlEUk1fREVCVUcoIklIOiBJSCBldmVudCB3L28gYXNzZXJ0 ZWQgaXJxIGJpdD9cbiIpOworCQkJCWV2ZW50X25hbWUgPSAiSFBEX1JYIjsKIAotCQkJCXJkZXYt PmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQyICY9IH5EQ19IUEQzX1JYX0lO VEVSUlVQVDsKLQkJCQlxdWV1ZV9kcCA9IHRydWU7Ci0JCQkJRFJNX0RFQlVHKCJJSDogSFBEX1JY IDNcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlEUk1fREVCVUcoIlVuaGFuZGxlZCBpbnRlcnJ1cHQ6 ICVkICVkXG4iLAorCQkJCQkgIHNyY19pZCwgc3JjX2RhdGEpOwogCQkJCWJyZWFrOwotCQkJY2Fz ZSA5OgotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2Nv bnQzICYgRENfSFBENF9SWF9JTlRFUlJVUFQpKQotCQkJCQlEUk1fREVCVUcoIklIOiBJSCBldmVu dCB3L28gYXNzZXJ0ZWQgaXJxIGJpdD9cbiIpOworCQkJfQogCi0JCQkJcmRldi0+aXJxLnN0YXRf cmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDMgJj0gfkRDX0hQRDRfUlhfSU5URVJSVVBUOwot CQkJCXF1ZXVlX2RwID0gdHJ1ZTsKLQkJCQlEUk1fREVCVUcoIklIOiBIUERfUlggNFxuIik7Ci0J CQkJYnJlYWs7Ci0JCQljYXNlIDEwOgotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZl cmdyZWVuLmRpc3BfaW50X2NvbnQ0ICYgRENfSFBENV9SWF9JTlRFUlJVUFQpKQotCQkJCQlEUk1f REVCVUcoIklIOiBJSCBldmVudCB3L28gYXNzZXJ0ZWQgaXJxIGJpdD9cbiIpOworCQkJaWYgKCEo ZGlzcF9pbnRbaHBkX2lkeF0gJiBtYXNrKSkKKwkJCQlEUk1fREVCVUcoIklIOiBJSCBldmVudCB3 L28gYXNzZXJ0ZWQgaXJxIGJpdD9cbiIpOwogCi0JCQkJcmRldi0+aXJxLnN0YXRfcmVncy5ldmVy Z3JlZW4uZGlzcF9pbnRfY29udDQgJj0gfkRDX0hQRDVfUlhfSU5URVJSVVBUOwotCQkJCXF1ZXVl X2RwID0gdHJ1ZTsKLQkJCQlEUk1fREVCVUcoIklIOiBIUERfUlggNVxuIik7Ci0JCQkJYnJlYWs7 Ci0JCQljYXNlIDExOgotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRp c3BfaW50X2NvbnQ1ICYgRENfSFBENl9SWF9JTlRFUlJVUFQpKQotCQkJCQlEUk1fREVCVUcoIklI OiBJSCBldmVudCB3L28gYXNzZXJ0ZWQgaXJxIGJpdD9cbiIpOworCQkJZGlzcF9pbnRbaHBkX2lk eF0gJj0gfm1hc2s7CisJCQlEUk1fREVCVUcoIklIOiAlcyVkXG4iLCBldmVudF9uYW1lLCBocGRf aWR4ICsgMSk7CiAKLQkJCQlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9j b250NSAmPSB+RENfSFBENl9SWF9JTlRFUlJVUFQ7Ci0JCQkJcXVldWVfZHAgPSB0cnVlOwotCQkJ CURSTV9ERUJVRygiSUg6IEhQRF9SWCA2XG4iKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0J CQkJRFJNX0RFQlVHKCJVbmhhbmRsZWQgaW50ZXJydXB0OiAlZCAlZFxuIiwgc3JjX2lkLCBzcmNf ZGF0YSk7Ci0JCQkJYnJlYWs7Ci0JCQl9CiAJCQlicmVhazsKIAkJY2FzZSA0NDogLyogaGRtaSAq LwogCQkJc3dpdGNoIChzcmNfZGF0YSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Jh ZGVvbi9yYWRlb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKaW5kZXggYzFj OGUyMi4uYjYwODZlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24u aAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCkBAIC03NjcsMTIgKzc2Nyw3 IEBAIHN0cnVjdCByNjAwX2lycV9zdGF0X3JlZ3MgewogfTsKIAogc3RydWN0IGV2ZXJncmVlbl9p cnFfc3RhdF9yZWdzIHsKLQl1MzIgZGlzcF9pbnQ7Ci0JdTMyIGRpc3BfaW50X2NvbnQ7Ci0JdTMy IGRpc3BfaW50X2NvbnQyOwotCXUzMiBkaXNwX2ludF9jb250MzsKLQl1MzIgZGlzcF9pbnRfY29u dDQ7Ci0JdTMyIGRpc3BfaW50X2NvbnQ1OworCXUzMiBkaXNwX2ludFs2XTsKIAl1MzIgZDFncnBo X2ludDsKIAl1MzIgZDJncnBoX2ludDsKIAl1MzIgZDNncnBoX2ludDsKQEAgLTI5NzYsNiArMjk3 MSwxMiBAQCBpbnQgcjYwMF9jc19jb21tb25fdmxpbmVfcGFyc2Uoc3RydWN0IHJhZGVvbl9jc19w YXJzZXIgKnAsCiAJCQkgICAgICAgdWludDMyX3QgKnZsaW5lX3N0YXJ0X2VuZCwKIAkJCSAgICAg ICB1aW50MzJfdCAqdmxpbmVfc3RhdHVzKTsKIAorLyogaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0 ZXIgaGVscGVycyAqLwordm9pZCByYWRlb25faXJxX2ttc19zZXRfaXJxX25fZW5hYmxlZChzdHJ1 Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJCQkgICAgICB1MzIgcmVnLCB1MzIgbWFzaywKKwkJ CQkgICAgICBib29sIGVuYWJsZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgICB1bnNpZ25l ZCBuKTsKKwogI2luY2x1ZGUgInJhZGVvbl9vYmplY3QuaCIKIAogI2VuZGlmCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMgYi9kcml2ZXJzL2dwdS9k cm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKaW5kZXggMWI3NTI4ZC4uN2FhY2I0NCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYwpAQCAtNTM4LDMgKzUzOCwzOCBAQCB2 b2lkIHJhZGVvbl9pcnFfa21zX2Rpc2FibGVfaHBkKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2 LCB1bnNpZ25lZCBocGRfbWFzaykKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZGV2LT5pcnEu bG9jaywgaXJxZmxhZ3MpOwogfQogCisvKioKKyAqIHJhZGVvbl9pcnFfa21zX3VwZGF0ZV9pbnRf biAtIGhlbHBlciBmb3IgdXBkYXRpbmcgaW50ZXJydXB0IGVuYWJsZSByZWdpc3RlcnMKKyAqCisg KiBAcmRldjogcmFkZW9uIGRldmljZSBwb2ludGVyCisgKiBAcmVnOiB0aGUgcmVnaXN0ZXIgdG8g d3JpdGUgdG8gZW5hYmxlL2Rpc2FibGUgaW50ZXJydXB0cworICogQG1hc2s6IHRoZSBtYXNrIHRo YXQgZW5hYmxlcyB0aGUgaW50ZXJydXB0cworICogQGVuYWJsZTogd2hldGhlciB0byBlbmFibGUg b3IgZGlzYWJsZSB0aGUgaW50ZXJydXB0IHJlZ2lzdGVyCisgKiBAbmFtZTogdGhlIG5hbWUgb2Yg dGhlIGludGVycnVwdCByZWdpc3RlciB0byBwcmludCB0byB0aGUga2VybmVsIGxvZworICogQG51 bTogdGhlIG51bWJlciBvZiB0aGUgaW50ZXJydXB0IHJlZ2lzdGVyIHRvIHByaW50IHRvIHRoZSBr ZXJuZWwgbG9nCisgKgorICogSGVscGVyIGZvciB1cGRhdGluZyB0aGUgZW5hYmxlIHN0YXRlIG9m IGludGVycnVwdCByZWdpc3RlcnMuIENoZWNrcyB3aGV0aGVyCisgKiBvciBub3QgdGhlIGludGVy cnVwdCBtYXRjaGVzIHRoZSBlbmFibGUgc3RhdGUgd2Ugd2FudC4gSWYgaXQgZG9lc24ndCwgdGhl bgorICogd2UgdXBkYXRlIGl0IGFuZCBwcmludCBhIGRlYnVnZ2luZyBtZXNzYWdlIHRvIHRoZSBr ZXJuZWwgbG9nIGluZGljYXRpbmcgdGhlCisgKiBuZXcgc3RhdGUgb2YgdGhlIGludGVycnVwdCBy ZWdpc3Rlci4KKyAqCisgKiBVc2VkIGZvciB1cGRhdGluZyBzZXF1ZW5jZXMgb2YgaW50ZXJydXB0 cyByZWdpc3RlcnMgbGlrZSBIUEQxLCBIUEQyLCBldGMuCisgKi8KK3ZvaWQgcmFkZW9uX2lycV9r bXNfc2V0X2lycV9uX2VuYWJsZWQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQkJICAg ICAgdTMyIHJlZywgdTMyIG1hc2ssCisJCQkJICAgICAgYm9vbCBlbmFibGUsIGNvbnN0IGNoYXIg Km5hbWUsIHVuc2lnbmVkIG4pCit7CisJdTMyIHRtcCA9IFJSRUczMihyZWcpOworCisJLyogSW50 ZXJydXB0IHN0YXRlIGRpZG4ndCBjaGFuZ2UgKi8KKwlpZiAoISEodG1wICYgbWFzaykgPT0gZW5h YmxlKQorCQlyZXR1cm47CisKKwlpZiAoZW5hYmxlKSB7CisJCURSTV9ERUJVRygiJXMlZCBpbnRl cnJ1cHRzIGVuYWJsZWRcbiIsIG5hbWUsIG4pOworCQlXUkVHMzIocmVnLCB0bXAgfD0gbWFzayk7 CisJfSBlbHNlIHsKKwkJRFJNX0RFQlVHKCIlcyVkIGludGVycnVwdHMgZGlzYWJsZWRcbiIsIG5h bWUsIG4pOworCQlXUkVHMzIocmVnLCB0bXAgJiB+bWFzayk7CisJfQorfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaS5j CmluZGV4IDc2ZDE4ODguLjgzNTFmMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRl b24vc2kuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3NpLmMKQEAgLTEzOSw2ICsxMzks MzAgQEAgc3RhdGljIHZvaWQgc2lfZmluaV9wZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7 CiBzdGF0aWMgdm9pZCBzaV9maW5pX2NnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHN0 YXRpYyB2b2lkIHNpX3JsY19zdG9wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAorc3Rh dGljIGNvbnN0IHUzMiBjcnRjX29mZnNldHNbXSA9Cit7CisJRVZFUkdSRUVOX0NSVEMwX1JFR0lT VEVSX09GRlNFVCwKKwlFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VULAorCUVWRVJHUkVF Tl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsCisJRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNF VCwKKwlFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULAorCUVWRVJHUkVFTl9DUlRDNV9S RUdJU1RFUl9PRkZTRVQKK307CisKK3N0YXRpYyBjb25zdCB1MzIgc2lfZGlzcF9pbnRfc3RhdHVz W10gPQoreworCURJU1BfSU5URVJSVVBUX1NUQVRVUywKKwlESVNQX0lOVEVSUlVQVF9TVEFUVVNf Q09OVElOVUUsCisJRElTUF9JTlRFUlJVUFRfU1RBVFVTX0NPTlRJTlVFMiwKKwlESVNQX0lOVEVS UlVQVF9TVEFUVVNfQ09OVElOVUUzLAorCURJU1BfSU5URVJSVVBUX1NUQVRVU19DT05USU5VRTQs CisJRElTUF9JTlRFUlJVUFRfU1RBVFVTX0NPTlRJTlVFNQorfTsKKworI2RlZmluZSBEQ19IUER4 X0NPTlRST0woeCkgICAgICAgIChEQ19IUEQxX0NPTlRST0wgICAgICsgKHggKiAweGMpKQorI2Rl ZmluZSBEQ19IUER4X0lOVF9DT05UUk9MKHgpICAgIChEQ19IUEQxX0lOVF9DT05UUk9MICsgKHgg KiAweGMpKQorI2RlZmluZSBEQ19IUER4X0lOVF9TVEFUVVNfUkVHKHgpIChEQ19IUEQxX0lOVF9T VEFUVVMgICsgKHggKiAweGMpKQorCiBzdGF0aWMgY29uc3QgdTMyIHZlcmRlX3JsY19zYXZlX3Jl c3RvcmVfcmVnaXN0ZXJfbGlzdFtdID0KIHsKIAkoMHg4MDAwIDw8IDE2KSB8ICgweDk4ZjQgPj4g MiksCkBAIC01OTE2LDYgKzU5NDAsNyBAQCBzdGF0aWMgdm9pZCBzaV9kaXNhYmxlX2ludGVycnVw dHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAKIHN0YXRpYyB2b2lkIHNpX2Rpc2FibGVf aW50ZXJydXB0X3N0YXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogeworCWludCBpOwog CXUzMiB0bXA7CiAKIAl0bXAgPSBSUkVHMzIoQ1BfSU5UX0NOVExfUklORzApICYKQEAgLTU5Mjks MTggKzU5NTQsOCBAQCBzdGF0aWMgdm9pZCBzaV9kaXNhYmxlX2ludGVycnVwdF9zdGF0ZShzdHJ1 Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIAlXUkVHMzIoRE1BX0NOVEwgKyBETUExX1JFR0lTVEVS X09GRlNFVCwgdG1wKTsKIAlXUkVHMzIoR1JCTV9JTlRfQ05UTCwgMCk7CiAJV1JFRzMyKFNSQk1f SU5UX0NOVEwsIDApOwotCWlmIChyZGV2LT5udW1fY3J0YyA+PSAyKSB7Ci0JCVdSRUczMihJTlRf TUFTSyArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQsIDApOwotCQlXUkVHMzIoSU5U X01BU0sgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VULCAwKTsKLQl9Ci0JaWYgKHJk ZXYtPm51bV9jcnRjID49IDQpIHsKLQkJV1JFRzMyKElOVF9NQVNLICsgRVZFUkdSRUVOX0NSVEMy X1JFR0lTVEVSX09GRlNFVCwgMCk7Ci0JCVdSRUczMihJTlRfTUFTSyArIEVWRVJHUkVFTl9DUlRD M19SRUdJU1RFUl9PRkZTRVQsIDApOwotCX0KLQlpZiAocmRldi0+bnVtX2NydGMgPj0gNikgewot CQlXUkVHMzIoSU5UX01BU0sgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULCAwKTsK LQkJV1JFRzMyKElOVF9NQVNLICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgMCk7 Ci0JfQorCWZvciAoaSA9IDA7IGkgPCByZGV2LT5udW1fY3J0YzsgaSsrKQorCQlXUkVHMzIoSU5U X01BU0sgKyBjcnRjX29mZnNldHNbaV0sIDApOwogCiAJaWYgKHJkZXYtPm51bV9jcnRjID49IDIp IHsKIAkJV1JFRzMyKEdSUEhfSU5UX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzBfUkVHSVNURVJf T0ZGU0VULCAwKTsKQEAgLTU5NTgsMTggKzU5NzMsOSBAQCBzdGF0aWMgdm9pZCBzaV9kaXNhYmxl X2ludGVycnVwdF9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIAlpZiAoIUFTSUNf SVNfTk9EQ0UocmRldikpIHsKIAkJV1JFRzMyKERBQ19BVVRPREVURUNUX0lOVF9DT05UUk9MLCAw KTsKIAotCQl0bXAgPSBSUkVHMzIoRENfSFBEMV9JTlRfQ09OVFJPTCkgJiBEQ19IUER4X0lOVF9Q T0xBUklUWTsKLQkJV1JFRzMyKERDX0hQRDFfSU5UX0NPTlRST0wsIHRtcCk7Ci0JCXRtcCA9IFJS RUczMihEQ19IUEQyX0lOVF9DT05UUk9MKSAmIERDX0hQRHhfSU5UX1BPTEFSSVRZOwotCQlXUkVH MzIoRENfSFBEMl9JTlRfQ09OVFJPTCwgdG1wKTsKLQkJdG1wID0gUlJFRzMyKERDX0hQRDNfSU5U X0NPTlRST0wpICYgRENfSFBEeF9JTlRfUE9MQVJJVFk7Ci0JCVdSRUczMihEQ19IUEQzX0lOVF9D T05UUk9MLCB0bXApOwotCQl0bXAgPSBSUkVHMzIoRENfSFBENF9JTlRfQ09OVFJPTCkgJiBEQ19I UER4X0lOVF9QT0xBUklUWTsKLQkJV1JFRzMyKERDX0hQRDRfSU5UX0NPTlRST0wsIHRtcCk7Ci0J CXRtcCA9IFJSRUczMihEQ19IUEQ1X0lOVF9DT05UUk9MKSAmIERDX0hQRHhfSU5UX1BPTEFSSVRZ OwotCQlXUkVHMzIoRENfSFBENV9JTlRfQ09OVFJPTCwgdG1wKTsKLQkJdG1wID0gUlJFRzMyKERD X0hQRDZfSU5UX0NPTlRST0wpICYgRENfSFBEeF9JTlRfUE9MQVJJVFk7Ci0JCVdSRUczMihEQ19I UEQ2X0lOVF9DT05UUk9MLCB0bXApOworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJV1JF RzMyX0FORChEQ19IUER4X0lOVF9DT05UUk9MKGkpLAorCQkJCSAgIERDX0hQRHhfSU5UX1BPTEFS SVRZKTsKIAl9CiB9CiAKQEAgLTYwNDQsMTIgKzYwNTAsMTIgQEAgc3RhdGljIGludCBzaV9pcnFf aW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIAlyZXR1cm4gcmV0OwogfQogCisvKiBU aGUgb3JkZXIgd2Ugd3JpdGUgYmFjayBlYWNoIHJlZ2lzdGVyIGhlcmUgaXMgaW1wb3J0YW50ICov CiBpbnQgc2lfaXJxX3NldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKwlpbnQgaTsK IAl1MzIgY3BfaW50X2NudGw7CiAJdTMyIGNwX2ludF9jbnRsMSA9IDAsIGNwX2ludF9jbnRsMiA9 IDA7Ci0JdTMyIGNydGMxID0gMCwgY3J0YzIgPSAwLCBjcnRjMyA9IDAsIGNydGM0ID0gMCwgY3J0 YzUgPSAwLCBjcnRjNiA9IDA7Ci0JdTMyIGhwZDEgPSAwLCBocGQyID0gMCwgaHBkMyA9IDAsIGhw ZDQgPSAwLCBocGQ1ID0gMCwgaHBkNiA9IDA7CiAJdTMyIGdyYm1faW50X2NudGwgPSAwOwogCXUz MiBkbWFfY250bCwgZG1hX2NudGwxOwogCXUzMiB0aGVybWFsX2ludCA9IDA7CkBAIC02MDY5LDE1 ICs2MDc1LDYgQEAgaW50IHNpX2lycV9zZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAJ Y3BfaW50X2NudGwgPSBSUkVHMzIoQ1BfSU5UX0NOVExfUklORzApICYKIAkJKENOVFhfQlVTWV9J TlRfRU5BQkxFIHwgQ05UWF9FTVBUWV9JTlRfRU5BQkxFKTsKIAotCWlmICghQVNJQ19JU19OT0RD RShyZGV2KSkgewotCQlocGQxID0gUlJFRzMyKERDX0hQRDFfSU5UX0NPTlRST0wpICYgfihEQ19I UER4X0lOVF9FTiB8IERDX0hQRHhfUlhfSU5UX0VOKTsKLQkJaHBkMiA9IFJSRUczMihEQ19IUEQy X0lOVF9DT05UUk9MKSAmIH4oRENfSFBEeF9JTlRfRU4gfCBEQ19IUER4X1JYX0lOVF9FTik7Ci0J CWhwZDMgPSBSUkVHMzIoRENfSFBEM19JTlRfQ09OVFJPTCkgJiB+KERDX0hQRHhfSU5UX0VOIHwg RENfSFBEeF9SWF9JTlRfRU4pOwotCQlocGQ0ID0gUlJFRzMyKERDX0hQRDRfSU5UX0NPTlRST0wp ICYgfihEQ19IUER4X0lOVF9FTiB8IERDX0hQRHhfUlhfSU5UX0VOKTsKLQkJaHBkNSA9IFJSRUcz MihEQ19IUEQ1X0lOVF9DT05UUk9MKSAmIH4oRENfSFBEeF9JTlRfRU4gfCBEQ19IUER4X1JYX0lO VF9FTik7Ci0JCWhwZDYgPSBSUkVHMzIoRENfSFBENl9JTlRfQ09OVFJPTCkgJiB+KERDX0hQRHhf SU5UX0VOIHwgRENfSFBEeF9SWF9JTlRfRU4pOwotCX0KLQogCWRtYV9jbnRsID0gUlJFRzMyKERN QV9DTlRMICsgRE1BMF9SRUdJU1RFUl9PRkZTRVQpICYgflRSQVBfRU5BQkxFOwogCWRtYV9jbnRs MSA9IFJSRUczMihETUFfQ05UTCArIERNQTFfUkVHSVNURVJfT0ZGU0VUKSAmIH5UUkFQX0VOQUJM RTsKIApAQCAtNjEwNiw2MCArNjEwMyw2IEBAIGludCBzaV9pcnFfc2V0KHN0cnVjdCByYWRlb25f ZGV2aWNlICpyZGV2KQogCQlEUk1fREVCVUcoInNpX2lycV9zZXQ6IHN3IGludCBkbWExXG4iKTsK IAkJZG1hX2NudGwxIHw9IFRSQVBfRU5BQkxFOwogCX0KLQlpZiAocmRldi0+aXJxLmNydGNfdmJs YW5rX2ludFswXSB8fAotCSAgICBhdG9taWNfcmVhZCgmcmRldi0+aXJxLnBmbGlwWzBdKSkgewot CQlEUk1fREVCVUcoInNpX2lycV9zZXQ6IHZibGFuayAwXG4iKTsKLQkJY3J0YzEgfD0gVkJMQU5L X0lOVF9NQVNLOwotCX0KLQlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFsxXSB8fAotCSAg ICBhdG9taWNfcmVhZCgmcmRldi0+aXJxLnBmbGlwWzFdKSkgewotCQlEUk1fREVCVUcoInNpX2ly cV9zZXQ6IHZibGFuayAxXG4iKTsKLQkJY3J0YzIgfD0gVkJMQU5LX0lOVF9NQVNLOwotCX0KLQlp ZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFsyXSB8fAotCSAgICBhdG9taWNfcmVhZCgmcmRl di0+aXJxLnBmbGlwWzJdKSkgewotCQlEUk1fREVCVUcoInNpX2lycV9zZXQ6IHZibGFuayAyXG4i KTsKLQkJY3J0YzMgfD0gVkJMQU5LX0lOVF9NQVNLOwotCX0KLQlpZiAocmRldi0+aXJxLmNydGNf dmJsYW5rX2ludFszXSB8fAotCSAgICBhdG9taWNfcmVhZCgmcmRldi0+aXJxLnBmbGlwWzNdKSkg ewotCQlEUk1fREVCVUcoInNpX2lycV9zZXQ6IHZibGFuayAzXG4iKTsKLQkJY3J0YzQgfD0gVkJM QU5LX0lOVF9NQVNLOwotCX0KLQlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFs0XSB8fAot CSAgICBhdG9taWNfcmVhZCgmcmRldi0+aXJxLnBmbGlwWzRdKSkgewotCQlEUk1fREVCVUcoInNp X2lycV9zZXQ6IHZibGFuayA0XG4iKTsKLQkJY3J0YzUgfD0gVkJMQU5LX0lOVF9NQVNLOwotCX0K LQlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFs1XSB8fAotCSAgICBhdG9taWNfcmVhZCgm cmRldi0+aXJxLnBmbGlwWzVdKSkgewotCQlEUk1fREVCVUcoInNpX2lycV9zZXQ6IHZibGFuayA1 XG4iKTsKLQkJY3J0YzYgfD0gVkJMQU5LX0lOVF9NQVNLOwotCX0KLQlpZiAocmRldi0+aXJxLmhw ZFswXSkgewotCQlEUk1fREVCVUcoInNpX2lycV9zZXQ6IGhwZCAxXG4iKTsKLQkJaHBkMSB8PSBE Q19IUER4X0lOVF9FTiB8IERDX0hQRHhfUlhfSU5UX0VOOwotCX0KLQlpZiAocmRldi0+aXJxLmhw ZFsxXSkgewotCQlEUk1fREVCVUcoInNpX2lycV9zZXQ6IGhwZCAyXG4iKTsKLQkJaHBkMiB8PSBE Q19IUER4X0lOVF9FTiB8IERDX0hQRHhfUlhfSU5UX0VOOwotCX0KLQlpZiAocmRldi0+aXJxLmhw ZFsyXSkgewotCQlEUk1fREVCVUcoInNpX2lycV9zZXQ6IGhwZCAzXG4iKTsKLQkJaHBkMyB8PSBE Q19IUER4X0lOVF9FTiB8IERDX0hQRHhfUlhfSU5UX0VOOwotCX0KLQlpZiAocmRldi0+aXJxLmhw ZFszXSkgewotCQlEUk1fREVCVUcoInNpX2lycV9zZXQ6IGhwZCA0XG4iKTsKLQkJaHBkNCB8PSBE Q19IUER4X0lOVF9FTiB8IERDX0hQRHhfUlhfSU5UX0VOOwotCX0KLQlpZiAocmRldi0+aXJxLmhw ZFs0XSkgewotCQlEUk1fREVCVUcoInNpX2lycV9zZXQ6IGhwZCA1XG4iKTsKLQkJaHBkNSB8PSBE Q19IUER4X0lOVF9FTiB8IERDX0hQRHhfUlhfSU5UX0VOOwotCX0KLQlpZiAocmRldi0+aXJxLmhw ZFs1XSkgewotCQlEUk1fREVCVUcoInNpX2lycV9zZXQ6IGhwZCA2XG4iKTsKLQkJaHBkNiB8PSBE Q19IUER4X0lOVF9FTiB8IERDX0hQRHhfUlhfSU5UX0VOOwotCX0KIAogCVdSRUczMihDUF9JTlRf Q05UTF9SSU5HMCwgY3BfaW50X2NudGwpOwogCVdSRUczMihDUF9JTlRfQ05UTF9SSU5HMSwgY3Bf aW50X2NudGwxKTsKQEAgLTYxNzUsMTcgKzYxMTgsMTEgQEAgaW50IHNpX2lycV9zZXQoc3RydWN0 IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAJCXRoZXJtYWxfaW50IHw9IFRIRVJNX0lOVF9NQVNLX0hJ R0ggfCBUSEVSTV9JTlRfTUFTS19MT1c7CiAJfQogCi0JaWYgKHJkZXYtPm51bV9jcnRjID49IDIp IHsKLQkJV1JFRzMyKElOVF9NQVNLICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCwg Y3J0YzEpOwotCQlXUkVHMzIoSU5UX01BU0sgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZG U0VULCBjcnRjMik7Ci0JfQotCWlmIChyZGV2LT5udW1fY3J0YyA+PSA0KSB7Ci0JCVdSRUczMihJ TlRfTUFTSyArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsIGNydGMzKTsKLQkJV1JF RzMyKElOVF9NQVNLICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwgY3J0YzQpOwot CX0KLQlpZiAocmRldi0+bnVtX2NydGMgPj0gNikgewotCQlXUkVHMzIoSU5UX01BU0sgKyBFVkVS R1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULCBjcnRjNSk7Ci0JCVdSRUczMihJTlRfTUFTSyAr IEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsIGNydGM2KTsKKwlmb3IgKGkgPSAwOyBp IDwgcmRldi0+bnVtX2NydGM7IGkrKykgeworCQlyYWRlb25faXJxX2ttc19zZXRfaXJxX25fZW5h YmxlZCgKKwkJICAgIHJkZXYsIElOVF9NQVNLICsgY3J0Y19vZmZzZXRzW2ldLCBWQkxBTktfSU5U X01BU0ssCisJCSAgICByZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50W2ldIHx8CisJCSAgICBhdG9t aWNfcmVhZCgmcmRldi0+aXJxLnBmbGlwW2ldKSwgInZibGFuayIsIGkpOwogCX0KIAogCWlmIChy ZGV2LT5udW1fY3J0YyA+PSAyKSB7CkBAIC02MjA4LDEyICs2MTQ1LDEyIEBAIGludCBzaV9pcnFf c2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogCX0KIAogCWlmICghQVNJQ19JU19OT0RD RShyZGV2KSkgewotCQlXUkVHMzIoRENfSFBEMV9JTlRfQ09OVFJPTCwgaHBkMSk7Ci0JCVdSRUcz MihEQ19IUEQyX0lOVF9DT05UUk9MLCBocGQyKTsKLQkJV1JFRzMyKERDX0hQRDNfSU5UX0NPTlRS T0wsIGhwZDMpOwotCQlXUkVHMzIoRENfSFBENF9JTlRfQ09OVFJPTCwgaHBkNCk7Ci0JCVdSRUcz MihEQ19IUEQ1X0lOVF9DT05UUk9MLCBocGQ1KTsKLQkJV1JFRzMyKERDX0hQRDZfSU5UX0NPTlRS T0wsIGhwZDYpOworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCQlyYWRlb25faXJxX2tt c19zZXRfaXJxX25fZW5hYmxlZCgKKwkJCSAgICByZGV2LCBEQ19IUER4X0lOVF9DT05UUk9MKGkp LAorCQkJICAgIERDX0hQRHhfSU5UX0VOIHwgRENfSFBEeF9SWF9JTlRfRU4sCisJCQkgICAgcmRl di0+aXJxLmhwZFtpXSwgIkhQRCIsIGkpOworCQl9CiAJfQogCiAJV1JFRzMyKENHX1RIRVJNQUxf SU5ULCB0aGVybWFsX2ludCk7CkBAIC02MjI0LDE5ICs2MTYxLDE4IEBAIGludCBzaV9pcnFfc2V0 KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogCXJldHVybiAwOwogfQogCisvKiBUaGUgb3Jk ZXIgd2Ugd3JpdGUgYmFjayBlYWNoIHJlZ2lzdGVyIGhlcmUgaXMgaW1wb3J0YW50ICovCiBzdGF0 aWMgaW5saW5lIHZvaWQgc2lfaXJxX2FjayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsK LQl1MzIgdG1wOworCWludCBpOworCXUzMiAqZGlzcF9pbnQgPSByZGV2LT5pcnEuc3RhdF9yZWdz LmV2ZXJncmVlbi5kaXNwX2ludDsKIAogCWlmIChBU0lDX0lTX05PRENFKHJkZXYpKQogCQlyZXR1 cm47CiAKLQlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludCA9IFJSRUczMihE SVNQX0lOVEVSUlVQVF9TVEFUVVMpOwotCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRp c3BfaW50X2NvbnQgPSBSUkVHMzIoRElTUF9JTlRFUlJVUFRfU1RBVFVTX0NPTlRJTlVFKTsKLQly ZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250MiA9IFJSRUczMihESVNQ X0lOVEVSUlVQVF9TVEFUVVNfQ09OVElOVUUyKTsKLQlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJn cmVlbi5kaXNwX2ludF9jb250MyA9IFJSRUczMihESVNQX0lOVEVSUlVQVF9TVEFUVVNfQ09OVElO VUUzKTsKLQlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250NCA9IFJS RUczMihESVNQX0lOVEVSUlVQVF9TVEFUVVNfQ09OVElOVUU0KTsKLQlyZGV2LT5pcnEuc3RhdF9y ZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250NSA9IFJSRUczMihESVNQX0lOVEVSUlVQVF9TVEFU VVNfQ09OVElOVUU1KTsKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQlkaXNwX2ludFtpXSA9 IFJSRUczMihzaV9kaXNwX2ludF9zdGF0dXNbaV0pOworCiAJcmRldi0+aXJxLnN0YXRfcmVncy5l dmVyZ3JlZW4uZDFncnBoX2ludCA9IFJSRUczMihHUlBIX0lOVF9TVEFUVVMgKyBFVkVSR1JFRU5f Q1JUQzBfUkVHSVNURVJfT0ZGU0VUKTsKIAlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5k MmdycGhfaW50ID0gUlJFRzMyKEdSUEhfSU5UX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRDMV9SRUdJ U1RFUl9PRkZTRVQpOwogCWlmIChyZGV2LT5udW1fY3J0YyA+PSA0KSB7CkBAIC02MjUyLDI4ICs2 MTg4LDI4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzaV9pcnFfYWNrKHN0cnVjdCByYWRlb25fZGV2 aWNlICpyZGV2KQogCQlXUkVHMzIoR1JQSF9JTlRfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEMwX1JF R0lTVEVSX09GRlNFVCwgR1JQSF9QRkxJUF9JTlRfQ0xFQVIpOwogCWlmIChyZGV2LT5pcnEuc3Rh dF9yZWdzLmV2ZXJncmVlbi5kMmdycGhfaW50ICYgR1JQSF9QRkxJUF9JTlRfT0NDVVJSRUQpCiAJ CVdSRUczMihHUlBIX0lOVF9TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VU LCBHUlBIX1BGTElQX0lOVF9DTEVBUik7Ci0JaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdy ZWVuLmRpc3BfaW50ICYgTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCkKLQkJV1JFRzMyKFZCTEFOS19T VEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzBfUkVHSVNURVJfT0ZGU0VULCBWQkxBTktfQUNLKTsKLQlp ZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnQgJiBMQl9EMV9WTElORV9J TlRFUlJVUFQpCi0JCVdSRUczMihWTElORV9TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzBfUkVHSVNU RVJfT0ZGU0VULCBWTElORV9BQ0spOwotCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVl bi5kaXNwX2ludF9jb250ICYgTEJfRDJfVkJMQU5LX0lOVEVSUlVQVCkKLQkJV1JFRzMyKFZCTEFO S19TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VULCBWQkxBTktfQUNLKTsK LQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udCAmIExCX0Qy X1ZMSU5FX0lOVEVSUlVQVCkKLQkJV1JFRzMyKFZMSU5FX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRD MV9SRUdJU1RFUl9PRkZTRVQsIFZMSU5FX0FDSyk7CisJaWYgKGRpc3BfaW50WzBdICYgTEJfRDFf VkJMQU5LX0lOVEVSUlVQVCkKKwkJV1JFRzMyKFZCTEFOS19TVEFUVVMgKyBjcnRjX29mZnNldHNb MF0sIFZCTEFOS19BQ0spOworCWlmIChkaXNwX2ludFswXSAmIExCX0QxX1ZMSU5FX0lOVEVSUlVQ VCkKKwkJV1JFRzMyKFZMSU5FX1NUQVRVUyArIGNydGNfb2Zmc2V0c1swXSwgVkxJTkVfQUNLKTsK KwlpZiAoZGlzcF9pbnRbMV0gJiBMQl9EMV9WQkxBTktfSU5URVJSVVBUKQorCQlXUkVHMzIoVkJM QU5LX1NUQVRVUyArIGNydGNfb2Zmc2V0c1sxXSwgVkJMQU5LX0FDSyk7CisJaWYgKGRpc3BfaW50 WzFdICYgTEJfRDFfVkxJTkVfSU5URVJSVVBUKQorCQlXUkVHMzIoVkxJTkVfU1RBVFVTICsgY3J0 Y19vZmZzZXRzWzFdLCBWTElORV9BQ0spOwogCiAJaWYgKHJkZXYtPm51bV9jcnRjID49IDQpIHsK IAkJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmQzZ3JwaF9pbnQgJiBHUlBIX1BG TElQX0lOVF9PQ0NVUlJFRCkKIAkJCVdSRUczMihHUlBIX0lOVF9TVEFUVVMgKyBFVkVSR1JFRU5f Q1JUQzJfUkVHSVNURVJfT0ZGU0VULCBHUlBIX1BGTElQX0lOVF9DTEVBUik7CiAJCWlmIChyZGV2 LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kNGdycGhfaW50ICYgR1JQSF9QRkxJUF9JTlRfT0ND VVJSRUQpCiAJCQlXUkVHMzIoR1JQSF9JTlRfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lT VEVSX09GRlNFVCwgR1JQSF9QRkxJUF9JTlRfQ0xFQVIpOwotCQlpZiAocmRldi0+aXJxLnN0YXRf cmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDIgJiBMQl9EM19WQkxBTktfSU5URVJSVVBUKQot CQkJV1JFRzMyKFZCTEFOS19TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VU LCBWQkxBTktfQUNLKTsKLQkJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3Bf aW50X2NvbnQyICYgTEJfRDNfVkxJTkVfSU5URVJSVVBUKQotCQkJV1JFRzMyKFZMSU5FX1NUQVRV UyArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsIFZMSU5FX0FDSyk7Ci0JCWlmIChy ZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250MyAmIExCX0Q0X1ZCTEFO S19JTlRFUlJVUFQpCi0JCQlXUkVHMzIoVkJMQU5LX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRDM19S RUdJU1RFUl9PRkZTRVQsIFZCTEFOS19BQ0spOwotCQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5l dmVyZ3JlZW4uZGlzcF9pbnRfY29udDMgJiBMQl9ENF9WTElORV9JTlRFUlJVUFQpCi0JCQlXUkVH MzIoVkxJTkVfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwgVkxJTkVf QUNLKTsKKwkJaWYgKGRpc3BfaW50WzJdICYgTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCkKKwkJCVdS RUczMihWQkxBTktfU1RBVFVTICsgY3J0Y19vZmZzZXRzWzJdLCBWQkxBTktfQUNLKTsKKwkJaWYg KGRpc3BfaW50WzJdICYgTEJfRDFfVkxJTkVfSU5URVJSVVBUKQorCQkJV1JFRzMyKFZMSU5FX1NU QVRVUyArIGNydGNfb2Zmc2V0c1syXSwgVkxJTkVfQUNLKTsKKwkJaWYgKGRpc3BfaW50WzNdICYg TEJfRDFfVkJMQU5LX0lOVEVSUlVQVCkKKwkJCVdSRUczMihWQkxBTktfU1RBVFVTICsgY3J0Y19v ZmZzZXRzWzNdLCBWQkxBTktfQUNLKTsKKwkJaWYgKGRpc3BfaW50WzNdICYgTEJfRDFfVkxJTkVf SU5URVJSVVBUKQorCQkJV1JFRzMyKFZMSU5FX1NUQVRVUyArIGNydGNfb2Zmc2V0c1szXSwgVkxJ TkVfQUNLKTsKIAl9CiAKIAlpZiAocmRldi0+bnVtX2NydGMgPj0gNikgewpAQCAtNjI4MSw3NiAr NjIxNywyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2lfaXJxX2FjayhzdHJ1Y3QgcmFkZW9uX2Rl dmljZSAqcmRldikKIAkJCVdSRUczMihHUlBIX0lOVF9TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzRf UkVHSVNURVJfT0ZGU0VULCBHUlBIX1BGTElQX0lOVF9DTEVBUik7CiAJCWlmIChyZGV2LT5pcnEu c3RhdF9yZWdzLmV2ZXJncmVlbi5kNmdycGhfaW50ICYgR1JQSF9QRkxJUF9JTlRfT0NDVVJSRUQp CiAJCQlXUkVHMzIoR1JQSF9JTlRfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09G RlNFVCwgR1JQSF9QRkxJUF9JTlRfQ0xFQVIpOwotCQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5l dmVyZ3JlZW4uZGlzcF9pbnRfY29udDQgJiBMQl9ENV9WQkxBTktfSU5URVJSVVBUKQotCQkJV1JF RzMyKFZCTEFOS19TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULCBWQkxB TktfQUNLKTsKLQkJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2Nv bnQ0ICYgTEJfRDVfVkxJTkVfSU5URVJSVVBUKQotCQkJV1JFRzMyKFZMSU5FX1NUQVRVUyArIEVW RVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQsIFZMSU5FX0FDSyk7Ci0JCWlmIChyZGV2LT5p cnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250NSAmIExCX0Q2X1ZCTEFOS19JTlRF UlJVUFQpCi0JCQlXUkVHMzIoVkJMQU5LX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RF Ul9PRkZTRVQsIFZCTEFOS19BQ0spOwotCQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3Jl ZW4uZGlzcF9pbnRfY29udDUgJiBMQl9ENl9WTElORV9JTlRFUlJVUFQpCi0JCQlXUkVHMzIoVkxJ TkVfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgVkxJTkVfQUNLKTsK LQl9Ci0KLQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnQgJiBEQ19I UEQxX0lOVEVSUlVQVCkgewotCQl0bXAgPSBSUkVHMzIoRENfSFBEMV9JTlRfQ09OVFJPTCk7Ci0J CXRtcCB8PSBEQ19IUER4X0lOVF9BQ0s7Ci0JCVdSRUczMihEQ19IUEQxX0lOVF9DT05UUk9MLCB0 bXApOwotCX0KLQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29u dCAmIERDX0hQRDJfSU5URVJSVVBUKSB7Ci0JCXRtcCA9IFJSRUczMihEQ19IUEQyX0lOVF9DT05U Uk9MKTsKLQkJdG1wIHw9IERDX0hQRHhfSU5UX0FDSzsKLQkJV1JFRzMyKERDX0hQRDJfSU5UX0NP TlRST0wsIHRtcCk7Ci0JfQotCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNw X2ludF9jb250MiAmIERDX0hQRDNfSU5URVJSVVBUKSB7Ci0JCXRtcCA9IFJSRUczMihEQ19IUEQz X0lOVF9DT05UUk9MKTsKLQkJdG1wIHw9IERDX0hQRHhfSU5UX0FDSzsKLQkJV1JFRzMyKERDX0hQ RDNfSU5UX0NPTlRST0wsIHRtcCk7Ci0JfQotCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJn cmVlbi5kaXNwX2ludF9jb250MyAmIERDX0hQRDRfSU5URVJSVVBUKSB7Ci0JCXRtcCA9IFJSRUcz MihEQ19IUEQ0X0lOVF9DT05UUk9MKTsKLQkJdG1wIHw9IERDX0hQRHhfSU5UX0FDSzsKLQkJV1JF RzMyKERDX0hQRDRfSU5UX0NPTlRST0wsIHRtcCk7Ci0JfQotCWlmIChyZGV2LT5pcnEuc3RhdF9y ZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250NCAmIERDX0hQRDVfSU5URVJSVVBUKSB7Ci0JCXRt cCA9IFJSRUczMihEQ19IUEQ1X0lOVF9DT05UUk9MKTsKLQkJdG1wIHw9IERDX0hQRHhfSU5UX0FD SzsKLQkJV1JFRzMyKERDX0hQRDVfSU5UX0NPTlRST0wsIHRtcCk7Ci0JfQotCWlmIChyZGV2LT5p cnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250NSAmIERDX0hQRDZfSU5URVJSVVBU KSB7Ci0JCXRtcCA9IFJSRUczMihEQ19IUEQ2X0lOVF9DT05UUk9MKTsKLQkJdG1wIHw9IERDX0hQ RHhfSU5UX0FDSzsKLQkJV1JFRzMyKERDX0hQRDZfSU5UX0NPTlRST0wsIHRtcCk7Ci0JfQotCi0J aWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50ICYgRENfSFBEMV9SWF9J TlRFUlJVUFQpIHsKLQkJdG1wID0gUlJFRzMyKERDX0hQRDFfSU5UX0NPTlRST0wpOwotCQl0bXAg fD0gRENfSFBEeF9SWF9JTlRfQUNLOwotCQlXUkVHMzIoRENfSFBEMV9JTlRfQ09OVFJPTCwgdG1w KTsKLQl9Ci0JaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQg JiBEQ19IUEQyX1JYX0lOVEVSUlVQVCkgewotCQl0bXAgPSBSUkVHMzIoRENfSFBEMl9JTlRfQ09O VFJPTCk7Ci0JCXRtcCB8PSBEQ19IUER4X1JYX0lOVF9BQ0s7Ci0JCVdSRUczMihEQ19IUEQyX0lO VF9DT05UUk9MLCB0bXApOwotCX0KLQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4u ZGlzcF9pbnRfY29udDIgJiBEQ19IUEQzX1JYX0lOVEVSUlVQVCkgewotCQl0bXAgPSBSUkVHMzIo RENfSFBEM19JTlRfQ09OVFJPTCk7Ci0JCXRtcCB8PSBEQ19IUER4X1JYX0lOVF9BQ0s7Ci0JCVdS RUczMihEQ19IUEQzX0lOVF9DT05UUk9MLCB0bXApOwotCX0KLQlpZiAocmRldi0+aXJxLnN0YXRf cmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDMgJiBEQ19IUEQ0X1JYX0lOVEVSUlVQVCkgewot CQl0bXAgPSBSUkVHMzIoRENfSFBENF9JTlRfQ09OVFJPTCk7Ci0JCXRtcCB8PSBEQ19IUER4X1JY X0lOVF9BQ0s7Ci0JCVdSRUczMihEQ19IUEQ0X0lOVF9DT05UUk9MLCB0bXApOwotCX0KLQlpZiAo cmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDQgJiBEQ19IUEQ1X1JY X0lOVEVSUlVQVCkgewotCQl0bXAgPSBSUkVHMzIoRENfSFBENV9JTlRfQ09OVFJPTCk7Ci0JCXRt cCB8PSBEQ19IUER4X1JYX0lOVF9BQ0s7Ci0JCVdSRUczMihEQ19IUEQ1X0lOVF9DT05UUk9MLCB0 bXApOwotCX0KLQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29u dDUgJiBEQ19IUEQ2X1JYX0lOVEVSUlVQVCkgewotCQl0bXAgPSBSUkVHMzIoRENfSFBENl9JTlRf Q09OVFJPTCk7Ci0JCXRtcCB8PSBEQ19IUER4X1JYX0lOVF9BQ0s7Ci0JCVdSRUczMihEQ19IUEQ2 X0lOVF9DT05UUk9MLCB0bXApOworCQlpZiAoZGlzcF9pbnRbNF0gJiBMQl9EMV9WQkxBTktfSU5U RVJSVVBUKQorCQkJV1JFRzMyKFZCTEFOS19TVEFUVVMgKyBjcnRjX29mZnNldHNbNF0sIFZCTEFO S19BQ0spOworCQlpZiAoZGlzcF9pbnRbNF0gJiBMQl9EMV9WTElORV9JTlRFUlJVUFQpCisJCQlX UkVHMzIoVkxJTkVfU1RBVFVTICsgY3J0Y19vZmZzZXRzWzRdLCBWTElORV9BQ0spOworCQlpZiAo ZGlzcF9pbnRbNV0gJiBMQl9EMV9WQkxBTktfSU5URVJSVVBUKQorCQkJV1JFRzMyKFZCTEFOS19T VEFUVVMgKyBjcnRjX29mZnNldHNbNV0sIFZCTEFOS19BQ0spOworCQlpZiAoZGlzcF9pbnRbNV0g JiBMQl9EMV9WTElORV9JTlRFUlJVUFQpCisJCQlXUkVHMzIoVkxJTkVfU1RBVFVTICsgY3J0Y19v ZmZzZXRzWzVdLCBWTElORV9BQ0spOworCX0KKworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsK KwkJaWYgKGRpc3BfaW50W2ldICYgRENfSFBEMV9JTlRFUlJVUFQpCisJCQlXUkVHMzJfT1IoRENf SFBEeF9JTlRfQ09OVFJPTChpKSwgRENfSFBEeF9JTlRfQUNLKTsKKwl9CisKKwlmb3IgKGkgPSAw OyBpIDwgNjsgaSsrKSB7CisJCWlmIChkaXNwX2ludFtpXSAmIERDX0hQRDFfUlhfSU5URVJSVVBU KQorCQkJV1JFRzMyX09SKERDX0hQRHhfSU5UX0NPTlRST0woaSksIERDX0hQRHhfUlhfSU5UX0FD Syk7CiAJfQogfQogCkBAIC02NDEyLDYgKzYyOTYsOSBAQCBzdGF0aWMgaW5saW5lIHUzMiBzaV9n ZXRfaWhfd3B0cihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKICAqLwogaW50IHNpX2lycV9w cm9jZXNzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogeworCXUzMiAqZGlzcF9pbnQgPSBy ZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludDsKKwl1MzIgY3J0Y19pZHgsIGhw ZF9pZHg7CisJdTMyIG1hc2s7CiAJdTMyIHdwdHI7CiAJdTMyIHJwdHI7CiAJdTMyIHNyY19pZCwg c3JjX2RhdGEsIHJpbmdfaWQ7CkBAIC02NDIwLDYgKzYzMDcsNyBAQCBpbnQgc2lfaXJxX3Byb2Nl c3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAJYm9vbCBxdWV1ZV9kcCA9IGZhbHNlOwog CWJvb2wgcXVldWVfdGhlcm1hbCA9IGZhbHNlOwogCXUzMiBzdGF0dXMsIGFkZHI7CisJY29uc3Qg Y2hhciAqZXZlbnRfbmFtZTsKIAogCWlmICghcmRldi0+aWguZW5hYmxlZCB8fCByZGV2LT5zaHV0 ZG93bikKIAkJcmV0dXJuIElSUV9OT05FOwpAQCAtNjQ0OSwxODQgKzYzMzcsNDQgQEAgaW50IHNp X2lycV9wcm9jZXNzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogCiAJCXN3aXRjaCAoc3Jj X2lkKSB7CiAJCWNhc2UgMTogLyogRDEgdmJsYW5rL3ZsaW5lICovCi0JCQlzd2l0Y2ggKHNyY19k YXRhKSB7Ci0JCQljYXNlIDA6IC8qIEQxIHZibGFuayAqLwotCQkJCWlmICghKHJkZXYtPmlycS5z dGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50ICYgTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCkpCi0J CQkJCURSTV9ERUJVRygiSUg6IElIIGV2ZW50IHcvbyBhc3NlcnRlZCBpcnEgYml0P1xuIik7Ci0K LQkJCQlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFswXSkgewotCQkJCQlkcm1faGFuZGxl X3ZibGFuayhyZGV2LT5kZGV2LCAwKTsKLQkJCQkJcmRldi0+cG0udmJsYW5rX3N5bmMgPSB0cnVl OwotCQkJCQl3YWtlX3VwKCZyZGV2LT5pcnEudmJsYW5rX3F1ZXVlKTsKLQkJCQl9Ci0JCQkJaWYg KGF0b21pY19yZWFkKCZyZGV2LT5pcnEucGZsaXBbMF0pKQotCQkJCQlyYWRlb25fY3J0Y19oYW5k bGVfdmJsYW5rKHJkZXYsIDApOwotCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRp c3BfaW50ICY9IH5MQl9EMV9WQkxBTktfSU5URVJSVVBUOwotCQkJCURSTV9ERUJVRygiSUg6IEQx IHZibGFua1xuIik7Ci0KLQkJCQlicmVhazsKLQkJCWNhc2UgMTogLyogRDEgdmxpbmUgKi8KLQkJ CQlpZiAoIShyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludCAmIExCX0QxX1ZM SU5FX0lOVEVSUlVQVCkpCi0JCQkJCURSTV9ERUJVRygiSUg6IElIIGV2ZW50IHcvbyBhc3NlcnRl ZCBpcnEgYml0P1xuIik7Ci0KLQkJCQlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNw X2ludCAmPSB+TEJfRDFfVkxJTkVfSU5URVJSVVBUOwotCQkJCURSTV9ERUJVRygiSUg6IEQxIHZs aW5lXG4iKTsKLQotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlEUk1fREVCVUcoIlVuaGFu ZGxlZCBpbnRlcnJ1cHQ6ICVkICVkXG4iLCBzcmNfaWQsIHNyY19kYXRhKTsKLQkJCQlicmVhazsK LQkJCX0KLQkJCWJyZWFrOwogCQljYXNlIDI6IC8qIEQyIHZibGFuay92bGluZSAqLwotCQkJc3dp dGNoIChzcmNfZGF0YSkgewotCQkJY2FzZSAwOiAvKiBEMiB2YmxhbmsgKi8KLQkJCQlpZiAoIShy ZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250ICYgTEJfRDJfVkJMQU5L X0lOVEVSUlVQVCkpCi0JCQkJCURSTV9ERUJVRygiSUg6IElIIGV2ZW50IHcvbyBhc3NlcnRlZCBp cnEgYml0P1xuIik7Ci0KLQkJCQlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFsxXSkgewot CQkJCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCAxKTsKLQkJCQkJcmRldi0+cG0udmJs YW5rX3N5bmMgPSB0cnVlOwotCQkJCQl3YWtlX3VwKCZyZGV2LT5pcnEudmJsYW5rX3F1ZXVlKTsK LQkJCQl9Ci0JCQkJaWYgKGF0b21pY19yZWFkKCZyZGV2LT5pcnEucGZsaXBbMV0pKQotCQkJCQly YWRlb25fY3J0Y19oYW5kbGVfdmJsYW5rKHJkZXYsIDEpOwotCQkJCXJkZXYtPmlycS5zdGF0X3Jl Z3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQgJj0gfkxCX0QyX1ZCTEFOS19JTlRFUlJVUFQ7Ci0J CQkJRFJNX0RFQlVHKCJJSDogRDIgdmJsYW5rXG4iKTsKLQotCQkJCWJyZWFrOwotCQkJY2FzZSAx OiAvKiBEMiB2bGluZSAqLwotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVu LmRpc3BfaW50X2NvbnQgJiBMQl9EMl9WTElORV9JTlRFUlJVUFQpKQotCQkJCQlEUk1fREVCVUco IklIOiBJSCBldmVudCB3L28gYXNzZXJ0ZWQgaXJxIGJpdD9cbiIpOwotCi0JCQkJcmRldi0+aXJx LnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udCAmPSB+TEJfRDJfVkxJTkVfSU5URVJS VVBUOwotCQkJCURSTV9ERUJVRygiSUg6IEQyIHZsaW5lXG4iKTsKLQotCQkJCWJyZWFrOwotCQkJ ZGVmYXVsdDoKLQkJCQlEUk1fREVCVUcoIlVuaGFuZGxlZCBpbnRlcnJ1cHQ6ICVkICVkXG4iLCBz cmNfaWQsIHNyY19kYXRhKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWJyZWFrOwogCQljYXNlIDM6 IC8qIEQzIHZibGFuay92bGluZSAqLwotCQkJc3dpdGNoIChzcmNfZGF0YSkgewotCQkJY2FzZSAw OiAvKiBEMyB2YmxhbmsgKi8KLQkJCQlpZiAoIShyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVl bi5kaXNwX2ludF9jb250MiAmIExCX0QzX1ZCTEFOS19JTlRFUlJVUFQpKQotCQkJCQlEUk1fREVC VUcoIklIOiBJSCBldmVudCB3L28gYXNzZXJ0ZWQgaXJxIGJpdD9cbiIpOwotCi0JCQkJaWYgKHJk ZXYtPmlycS5jcnRjX3ZibGFua19pbnRbMl0pIHsKLQkJCQkJZHJtX2hhbmRsZV92YmxhbmsocmRl di0+ZGRldiwgMik7Ci0JCQkJCXJkZXYtPnBtLnZibGFua19zeW5jID0gdHJ1ZTsKLQkJCQkJd2Fr ZV91cCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7Ci0JCQkJfQotCQkJCWlmIChhdG9taWNfcmVh ZCgmcmRldi0+aXJxLnBmbGlwWzJdKSkKLQkJCQkJcmFkZW9uX2NydGNfaGFuZGxlX3ZibGFuayhy ZGV2LCAyKTsKLQkJCQlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250 MiAmPSB+TEJfRDNfVkJMQU5LX0lOVEVSUlVQVDsKLQkJCQlEUk1fREVCVUcoIklIOiBEMyB2Ymxh bmtcbiIpOwotCi0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6IC8qIEQzIHZsaW5lICovCi0JCQkJaWYg KCEocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDIgJiBMQl9EM19W TElORV9JTlRFUlJVUFQpKQotCQkJCQlEUk1fREVCVUcoIklIOiBJSCBldmVudCB3L28gYXNzZXJ0 ZWQgaXJxIGJpdD9cbiIpOwotCi0JCQkJcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlz cF9pbnRfY29udDIgJj0gfkxCX0QzX1ZMSU5FX0lOVEVSUlVQVDsKLQkJCQlEUk1fREVCVUcoIklI OiBEMyB2bGluZVxuIik7Ci0KLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJRFJNX0RFQlVH KCJVbmhhbmRsZWQgaW50ZXJydXB0OiAlZCAlZFxuIiwgc3JjX2lkLCBzcmNfZGF0YSk7Ci0JCQkJ YnJlYWs7Ci0JCQl9Ci0JCQlicmVhazsKIAkJY2FzZSA0OiAvKiBENCB2YmxhbmsvdmxpbmUgKi8K LQkJCXN3aXRjaCAoc3JjX2RhdGEpIHsKLQkJCWNhc2UgMDogLyogRDQgdmJsYW5rICovCi0JCQkJ aWYgKCEocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDMgJiBMQl9E NF9WQkxBTktfSU5URVJSVVBUKSkKLQkJCQkJRFJNX0RFQlVHKCJJSDogSUggZXZlbnQgdy9vIGFz c2VydGVkIGlycSBiaXQ/XG4iKTsKLQotCQkJCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50 WzNdKSB7Ci0JCQkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDMpOwotCQkJCQlyZGV2 LT5wbS52Ymxhbmtfc3luYyA9IHRydWU7Ci0JCQkJCXdha2VfdXAoJnJkZXYtPmlycS52Ymxhbmtf cXVldWUpOwotCQkJCX0KLQkJCQlpZiAoYXRvbWljX3JlYWQoJnJkZXYtPmlycS5wZmxpcFszXSkp Ci0JCQkJCXJhZGVvbl9jcnRjX2hhbmRsZV92YmxhbmsocmRldiwgMyk7Ci0JCQkJcmRldi0+aXJx LnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDMgJj0gfkxCX0Q0X1ZCTEFOS19JTlRF UlJVUFQ7Ci0JCQkJRFJNX0RFQlVHKCJJSDogRDQgdmJsYW5rXG4iKTsKLQotCQkJCWJyZWFrOwot CQkJY2FzZSAxOiAvKiBENCB2bGluZSAqLwotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3Mu ZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQzICYgTEJfRDRfVkxJTkVfSU5URVJSVVBUKSkKLQkJCQkJ RFJNX0RFQlVHKCJJSDogSUggZXZlbnQgdy9vIGFzc2VydGVkIGlycSBiaXQ/XG4iKTsKLQotCQkJ CXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQzICY9IH5MQl9ENF9W TElORV9JTlRFUlJVUFQ7Ci0JCQkJRFJNX0RFQlVHKCJJSDogRDQgdmxpbmVcbiIpOwotCi0JCQkJ YnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCURSTV9ERUJVRygiVW5oYW5kbGVkIGludGVycnVwdDog JWQgJWRcbiIsIHNyY19pZCwgc3JjX2RhdGEpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7 CiAJCWNhc2UgNTogLyogRDUgdmJsYW5rL3ZsaW5lICovCi0JCQlzd2l0Y2ggKHNyY19kYXRhKSB7 Ci0JCQljYXNlIDA6IC8qIEQ1IHZibGFuayAqLwotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3Jl Z3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQ0ICYgTEJfRDVfVkJMQU5LX0lOVEVSUlVQVCkpCi0J CQkJCURSTV9ERUJVRygiSUg6IElIIGV2ZW50IHcvbyBhc3NlcnRlZCBpcnEgYml0P1xuIik7CisJ CWNhc2UgNjogLyogRDYgdmJsYW5rL3ZsaW5lICovCisJCQljcnRjX2lkeCA9IHNyY19pZCAtIDE7 CisKKwkJCWlmIChzcmNfZGF0YSA9PSAwKSB7IC8qIHZibGFuayAqLworCQkJCW1hc2sgPSBMQl9E MV9WQkxBTktfSU5URVJSVVBUOworCQkJCWV2ZW50X25hbWUgPSAidmJsYW5rIjsKIAotCQkJCWlm IChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzRdKSB7Ci0JCQkJCWRybV9oYW5kbGVfdmJsYW5r KHJkZXYtPmRkZXYsIDQpOworCQkJCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50W2NydGNf aWR4XSkgeworCQkJCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCBjcnRjX2lkeCk7CiAJ CQkJCXJkZXYtPnBtLnZibGFua19zeW5jID0gdHJ1ZTsKIAkJCQkJd2FrZV91cCgmcmRldi0+aXJx LnZibGFua19xdWV1ZSk7CiAJCQkJfQotCQkJCWlmIChhdG9taWNfcmVhZCgmcmRldi0+aXJxLnBm bGlwWzRdKSkKLQkJCQkJcmFkZW9uX2NydGNfaGFuZGxlX3ZibGFuayhyZGV2LCA0KTsKLQkJCQly ZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250NCAmPSB+TEJfRDVfVkJM QU5LX0lOVEVSUlVQVDsKLQkJCQlEUk1fREVCVUcoIklIOiBENSB2YmxhbmtcbiIpOwotCi0JCQkJ YnJlYWs7Ci0JCQljYXNlIDE6IC8qIEQ1IHZsaW5lICovCi0JCQkJaWYgKCEocmRldi0+aXJxLnN0 YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDQgJiBMQl9ENV9WTElORV9JTlRFUlJVUFQp KQotCQkJCQlEUk1fREVCVUcoIklIOiBJSCBldmVudCB3L28gYXNzZXJ0ZWQgaXJxIGJpdD9cbiIp OwotCi0JCQkJcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDQgJj0g fkxCX0Q1X1ZMSU5FX0lOVEVSUlVQVDsKLQkJCQlEUk1fREVCVUcoIklIOiBENSB2bGluZVxuIik7 CisJCQkJaWYgKGF0b21pY19yZWFkKCZyZGV2LT5pcnEucGZsaXBbY3J0Y19pZHhdKSkgeworCQkJ CQlyYWRlb25fY3J0Y19oYW5kbGVfdmJsYW5rKHJkZXYsCisJCQkJCQkJCSAgY3J0Y19pZHgpOwor CQkJCX0KIAotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlEUk1fREVCVUcoIlVuaGFuZGxl ZCBpbnRlcnJ1cHQ6ICVkICVkXG4iLCBzcmNfaWQsIHNyY19kYXRhKTsKKwkJCX0gZWxzZSBpZiAo c3JjX2RhdGEgPT0gMSkgeyAvKiB2bGluZSAqLworCQkJCW1hc2sgPSBMQl9EMV9WTElORV9JTlRF UlJVUFQ7CisJCQkJZXZlbnRfbmFtZSA9ICJ2bGluZSI7CisJCQl9IGVsc2UgeworCQkJCURSTV9E RUJVRygiVW5oYW5kbGVkIGludGVycnVwdDogJWQgJWRcbiIsCisJCQkJCSAgc3JjX2lkLCBzcmNf ZGF0YSk7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlicmVhazsKLQkJY2FzZSA2OiAvKiBENiB2Ymxh bmsvdmxpbmUgKi8KLQkJCXN3aXRjaCAoc3JjX2RhdGEpIHsKLQkJCWNhc2UgMDogLyogRDYgdmJs YW5rICovCi0JCQkJaWYgKCEocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRf Y29udDUgJiBMQl9ENl9WQkxBTktfSU5URVJSVVBUKSkKLQkJCQkJRFJNX0RFQlVHKCJJSDogSUgg ZXZlbnQgdy9vIGFzc2VydGVkIGlycSBiaXQ/XG4iKTsKLQotCQkJCWlmIChyZGV2LT5pcnEuY3J0 Y192YmxhbmtfaW50WzVdKSB7Ci0JCQkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDUp OwotCQkJCQlyZGV2LT5wbS52Ymxhbmtfc3luYyA9IHRydWU7Ci0JCQkJCXdha2VfdXAoJnJkZXYt PmlycS52YmxhbmtfcXVldWUpOwotCQkJCX0KLQkJCQlpZiAoYXRvbWljX3JlYWQoJnJkZXYtPmly cS5wZmxpcFs1XSkpCi0JCQkJCXJhZGVvbl9jcnRjX2hhbmRsZV92YmxhbmsocmRldiwgNSk7Ci0J CQkJcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDUgJj0gfkxCX0Q2 X1ZCTEFOS19JTlRFUlJVUFQ7Ci0JCQkJRFJNX0RFQlVHKCJJSDogRDYgdmJsYW5rXG4iKTsKIAot CQkJCWJyZWFrOwotCQkJY2FzZSAxOiAvKiBENiB2bGluZSAqLwotCQkJCWlmICghKHJkZXYtPmly cS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQ1ICYgTEJfRDZfVkxJTkVfSU5URVJS VVBUKSkKLQkJCQkJRFJNX0RFQlVHKCJJSDogSUggZXZlbnQgdy9vIGFzc2VydGVkIGlycSBiaXQ/ XG4iKTsKKwkJCWlmICghKGRpc3BfaW50W2NydGNfaWR4XSAmIG1hc2spKSB7CisJCQkJRFJNX0RF QlVHKCJJSDogRCVkICVzIC0gSUggZXZlbnQgdy9vIGFzc2VydGVkIGlycSBiaXQ/XG4iLAorCQkJ CQkgIGNydGNfaWR4ICsgMSwgZXZlbnRfbmFtZSk7CisJCQl9CiAKLQkJCQlyZGV2LT5pcnEuc3Rh dF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250NSAmPSB+TEJfRDZfVkxJTkVfSU5URVJSVVBU OwotCQkJCURSTV9ERUJVRygiSUg6IEQ2IHZsaW5lXG4iKTsKKwkJCWRpc3BfaW50W2NydGNfaWR4 XSAmPSB+bWFzazsKKwkJCURSTV9ERUJVRygiSUg6IEQlZCAlc1xuIiwgY3J0Y19pZHggKyAxLCBl dmVudF9uYW1lKTsKIAotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlEUk1fREVCVUcoIlVu aGFuZGxlZCBpbnRlcnJ1cHQ6ICVkICVkXG4iLCBzcmNfaWQsIHNyY19kYXRhKTsKLQkJCQlicmVh azsKLQkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDg6IC8qIEQxIHBhZ2UgZmxpcCAqLwogCQljYXNl IDEwOiAvKiBEMiBwYWdlIGZsaXAgKi8KQEAgLTY2MzksMTE5ICs2Mzg3LDI5IEBAIGludCBzaV9p cnFfcHJvY2VzcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIAkJCQlyYWRlb25fY3J0Y19o YW5kbGVfZmxpcChyZGV2LCAoc3JjX2lkIC0gOCkgPj4gMSk7CiAJCQlicmVhazsKIAkJY2FzZSA0 MjogLyogSFBEIGhvdHBsdWcgKi8KLQkJCXN3aXRjaCAoc3JjX2RhdGEpIHsKLQkJCWNhc2UgMDoK LQkJCQlpZiAoIShyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludCAmIERDX0hQ RDFfSU5URVJSVVBUKSkKLQkJCQkJRFJNX0RFQlVHKCJJSDogSUggZXZlbnQgdy9vIGFzc2VydGVk IGlycSBiaXQ/XG4iKTsKLQotCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3Bf aW50ICY9IH5EQ19IUEQxX0lOVEVSUlVQVDsKLQkJCQlxdWV1ZV9ob3RwbHVnID0gdHJ1ZTsKLQkJ CQlEUk1fREVCVUcoIklIOiBIUEQxXG4iKTsKLQotCQkJCWJyZWFrOwotCQkJY2FzZSAxOgotCQkJ CWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQgJiBEQ19I UEQyX0lOVEVSUlVQVCkpCi0JCQkJCURSTV9ERUJVRygiSUg6IElIIGV2ZW50IHcvbyBhc3NlcnRl ZCBpcnEgYml0P1xuIik7Ci0KLQkJCQlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNw X2ludF9jb250ICY9IH5EQ19IUEQyX0lOVEVSUlVQVDsKKwkJCWlmIChzcmNfZGF0YSA8PSA1KSB7 CisJCQkJaHBkX2lkeCA9IHNyY19kYXRhOworCQkJCW1hc2sgPSBEQ19IUEQxX0lOVEVSUlVQVDsK IAkJCQlxdWV1ZV9ob3RwbHVnID0gdHJ1ZTsKLQkJCQlEUk1fREVCVUcoIklIOiBIUEQyXG4iKTsK KwkJCQlldmVudF9uYW1lID0gIkhQRCI7CiAKLQkJCQlicmVhazsKLQkJCWNhc2UgMjoKLQkJCQlp ZiAoIShyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250MiAmIERDX0hQ RDNfSU5URVJSVVBUKSkKLQkJCQkJRFJNX0RFQlVHKCJJSDogSUggZXZlbnQgdy9vIGFzc2VydGVk IGlycSBiaXQ/XG4iKTsKLQotCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3Bf aW50X2NvbnQyICY9IH5EQ19IUEQzX0lOVEVSUlVQVDsKLQkJCQlxdWV1ZV9ob3RwbHVnID0gdHJ1 ZTsKLQkJCQlEUk1fREVCVUcoIklIOiBIUEQzXG4iKTsKLQotCQkJCWJyZWFrOwotCQkJY2FzZSAz OgotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQz ICYgRENfSFBENF9JTlRFUlJVUFQpKQotCQkJCQlEUk1fREVCVUcoIklIOiBJSCBldmVudCB3L28g YXNzZXJ0ZWQgaXJxIGJpdD9cbiIpOwotCi0JCQkJcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3Jl ZW4uZGlzcF9pbnRfY29udDMgJj0gfkRDX0hQRDRfSU5URVJSVVBUOwotCQkJCXF1ZXVlX2hvdHBs dWcgPSB0cnVlOwotCQkJCURSTV9ERUJVRygiSUg6IEhQRDRcbiIpOwotCi0JCQkJYnJlYWs7Ci0J CQljYXNlIDQ6Ci0JCQkJaWYgKCEocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9p bnRfY29udDQgJiBEQ19IUEQ1X0lOVEVSUlVQVCkpCi0JCQkJCURSTV9ERUJVRygiSUg6IElIIGV2 ZW50IHcvbyBhc3NlcnRlZCBpcnEgYml0P1xuIik7Ci0KLQkJCQlyZGV2LT5pcnEuc3RhdF9yZWdz LmV2ZXJncmVlbi5kaXNwX2ludF9jb250NCAmPSB+RENfSFBENV9JTlRFUlJVUFQ7Ci0JCQkJcXVl dWVfaG90cGx1ZyA9IHRydWU7Ci0JCQkJRFJNX0RFQlVHKCJJSDogSFBENVxuIik7Ci0KLQkJCQli cmVhazsKLQkJCWNhc2UgNToKLQkJCQlpZiAoIShyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVl bi5kaXNwX2ludF9jb250NSAmIERDX0hQRDZfSU5URVJSVVBUKSkKLQkJCQkJRFJNX0RFQlVHKCJJ SDogSUggZXZlbnQgdy9vIGFzc2VydGVkIGlycSBiaXQ/XG4iKTsKLQotCQkJCXJkZXYtPmlycS5z dGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQ1ICY9IH5EQ19IUEQ2X0lOVEVSUlVQVDsK LQkJCQlxdWV1ZV9ob3RwbHVnID0gdHJ1ZTsKLQkJCQlEUk1fREVCVUcoIklIOiBIUEQ2XG4iKTsK LQotCQkJCWJyZWFrOwotCQkJY2FzZSA2OgotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3Mu ZXZlcmdyZWVuLmRpc3BfaW50ICYgRENfSFBEMV9SWF9JTlRFUlJVUFQpKQotCQkJCQlEUk1fREVC VUcoIklIOiBJSCBldmVudCB3L28gYXNzZXJ0ZWQgaXJxIGJpdD9cbiIpOwotCi0JCQkJcmRldi0+ aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnQgJj0gfkRDX0hQRDFfUlhfSU5URVJSVVBU OworCQkJfSBlbHNlIGlmIChzcmNfZGF0YSA8PSAxMSkgeworCQkJCWhwZF9pZHggPSBzcmNfZGF0 YSAtIDY7CisJCQkJbWFzayA9IERDX0hQRDFfUlhfSU5URVJSVVBUOwogCQkJCXF1ZXVlX2RwID0g dHJ1ZTsKLQkJCQlEUk1fREVCVUcoIklIOiBIUERfUlggMVxuIik7Ci0KLQkJCQlicmVhazsKLQkJ CWNhc2UgNzoKLQkJCQlpZiAoIShyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2lu dF9jb250ICYgRENfSFBEMl9SWF9JTlRFUlJVUFQpKQotCQkJCQlEUk1fREVCVUcoIklIOiBJSCBl dmVudCB3L28gYXNzZXJ0ZWQgaXJxIGJpdD9cbiIpOwotCi0JCQkJcmRldi0+aXJxLnN0YXRfcmVn cy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udCAmPSB+RENfSFBEMl9SWF9JTlRFUlJVUFQ7Ci0JCQkJ cXVldWVfZHAgPSB0cnVlOwotCQkJCURSTV9ERUJVRygiSUg6IEhQRF9SWCAyXG4iKTsKLQotCQkJ CWJyZWFrOwotCQkJY2FzZSA4OgotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdy ZWVuLmRpc3BfaW50X2NvbnQyICYgRENfSFBEM19SWF9JTlRFUlJVUFQpKQotCQkJCQlEUk1fREVC VUcoIklIOiBJSCBldmVudCB3L28gYXNzZXJ0ZWQgaXJxIGJpdD9cbiIpOwotCi0JCQkJcmRldi0+ aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDIgJj0gfkRDX0hQRDNfUlhfSU5U RVJSVVBUOwotCQkJCXF1ZXVlX2RwID0gdHJ1ZTsKLQkJCQlEUk1fREVCVUcoIklIOiBIUERfUlgg M1xuIik7Ci0KLQkJCQlicmVhazsKLQkJCWNhc2UgOToKLQkJCQlpZiAoIShyZGV2LT5pcnEuc3Rh dF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250MyAmIERDX0hQRDRfUlhfSU5URVJSVVBUKSkK LQkJCQkJRFJNX0RFQlVHKCJJSDogSUggZXZlbnQgdy9vIGFzc2VydGVkIGlycSBiaXQ/XG4iKTsK LQotCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQzICY9IH5E Q19IUEQ0X1JYX0lOVEVSUlVQVDsKLQkJCQlxdWV1ZV9kcCA9IHRydWU7Ci0JCQkJRFJNX0RFQlVH KCJJSDogSFBEX1JYIDRcbiIpOwotCi0JCQkJYnJlYWs7Ci0JCQljYXNlIDEwOgotCQkJCWlmICgh KHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQ0ICYgRENfSFBENV9S WF9JTlRFUlJVUFQpKQotCQkJCQlEUk1fREVCVUcoIklIOiBJSCBldmVudCB3L28gYXNzZXJ0ZWQg aXJxIGJpdD9cbiIpOwotCi0JCQkJcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9p bnRfY29udDQgJj0gfkRDX0hQRDVfUlhfSU5URVJSVVBUOwotCQkJCXF1ZXVlX2RwID0gdHJ1ZTsK LQkJCQlEUk1fREVCVUcoIklIOiBIUERfUlggNVxuIik7CisJCQkJZXZlbnRfbmFtZSA9ICJIUERf UlgiOwogCisJCQl9IGVsc2UgeworCQkJCURSTV9ERUJVRygiVW5oYW5kbGVkIGludGVycnVwdDog JWQgJWRcbiIsCisJCQkJCSAgc3JjX2lkLCBzcmNfZGF0YSk7CiAJCQkJYnJlYWs7Ci0JCQljYXNl IDExOgotCQkJCWlmICghKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2Nv bnQ1ICYgRENfSFBENl9SWF9JTlRFUlJVUFQpKQotCQkJCQlEUk1fREVCVUcoIklIOiBJSCBldmVu dCB3L28gYXNzZXJ0ZWQgaXJxIGJpdD9cbiIpOworCQkJfQogCi0JCQkJcmRldi0+aXJxLnN0YXRf cmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDUgJj0gfkRDX0hQRDZfUlhfSU5URVJSVVBUOwot CQkJCXF1ZXVlX2RwID0gdHJ1ZTsKLQkJCQlEUk1fREVCVUcoIklIOiBIUERfUlggNlxuIik7CisJ CQlpZiAoIShkaXNwX2ludFtocGRfaWR4XSAmIG1hc2spKQorCQkJCURSTV9ERUJVRygiSUg6IElI IGV2ZW50IHcvbyBhc3NlcnRlZCBpcnEgYml0P1xuIik7CiAKLQkJCQlicmVhazsKLQkJCWRlZmF1 bHQ6Ci0JCQkJRFJNX0RFQlVHKCJVbmhhbmRsZWQgaW50ZXJydXB0OiAlZCAlZFxuIiwgc3JjX2lk LCBzcmNfZGF0YSk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlkaXNwX2ludFtocGRfaWR4XSAmPSB+ bWFzazsKKwkJCURSTV9ERUJVRygiSUg6ICVzJWRcbiIsIGV2ZW50X25hbWUsIGhwZF9pZHggKyAx KTsKIAkJCWJyZWFrOwogCQljYXNlIDk2OgogCQkJRFJNX0VSUk9SKCJTUkJNX1JFQURfRVJST1I6 IDB4JXhcbiIsIFJSRUczMihTUkJNX1JFQURfRVJST1IpKTsKLS0gCjIuOS40CgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlz dAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK