From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: [PATCH 2/2] drm/omap: displays: Remove unused panel drivers Date: Fri, 16 Aug 2019 15:22:28 +0300 Message-ID: <20190816122228.9475-3-laurent.pinchart@ideasonboard.com> References: <20190816122228.9475-1-laurent.pinchart@ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8836B6E338 for ; Fri, 16 Aug 2019 12:22:40 +0000 (UTC) In-Reply-To: <20190816122228.9475-1-laurent.pinchart@ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Stephen Rothwell , Tomi Valkeinen , Sam Ravnborg , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org ZHJtX3BhbmVsLWJhc2VkIGRyaXZlcnMgZm9yIHRoZSBBQ1g1NjVBS00sIExCMDM1UTAyLCBMUzAz N1Y3RFcwMSwKTkw4MDQ4SEwxMSwgVEQwMjhUVEVDMSBhbmQgVEQwNDNNVEVBMSBhcmUgYXZhaWxh YmxlLCByZW1vdmUgdGhlCm9tYXBkcm0tc3BlY2lmaWMgZHJpdmVycy4KClNpZ25lZC1vZmYtYnk6 IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbT4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kaXNwbGF5cy9LY29uZmlnICAgICAgfCAgMzggLQog ZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvTWFrZWZpbGUgICAgIHwgICA2IC0KIC4u Li9kaXNwbGF5cy9wYW5lbC1sZ3BoaWxpcHMtbGIwMzVxMDIuYyAgICAgICB8IDI1MSAtLS0tLS0K IC4uLi9vbWFwZHJtL2Rpc3BsYXlzL3BhbmVsLW5lYy1ubDgwNDhobDExLmMgICB8IDI3MSAtLS0t LS0tCiAuLi4vZGlzcGxheXMvcGFuZWwtc2hhcnAtbHMwMzd2N2R3MDEuYyAgICAgICAgfCAyNjIg LS0tLS0tCiAuLi4vb21hcGRybS9kaXNwbGF5cy9wYW5lbC1zb255LWFjeDU2NWFrbS5jICAgfCA3 NTUgLS0tLS0tLS0tLS0tLS0tLS0tCiAuLi4vb21hcGRybS9kaXNwbGF5cy9wYW5lbC10cG8tdGQw Mjh0dGVjMS5jICAgfCAzOTAgLS0tLS0tLS0tCiAuLi4vb21hcGRybS9kaXNwbGF5cy9wYW5lbC10 cG8tdGQwNDNtdGVhMS5jICAgfCA1MTMgLS0tLS0tLS0tLS0tCiAuLi4vZ3B1L2RybS9vbWFwZHJt L2Rzcy9vbWFwZHNzLWJvb3QtaW5pdC5jICAgfCAgIDcgLQogOSBmaWxlcyBjaGFuZ2VkLCAyNDkz IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJt L2Rpc3BsYXlzL3BhbmVsLWxncGhpbGlwcy1sYjAzNXEwMi5jCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvcGFuZWwtbmVjLW5sODA0OGhsMTEuYwog ZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rpc3BsYXlzL3BhbmVs LXNoYXJwLWxzMDM3djdkdzAxLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v b21hcGRybS9kaXNwbGF5cy9wYW5lbC1zb255LWFjeDU2NWFrbS5jCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvcGFuZWwtdHBvLXRkMDI4dHRlYzEu YwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rpc3BsYXlzL3Bh bmVsLXRwby10ZDA0M210ZWExLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRy bS9kaXNwbGF5cy9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvS2Nv bmZpZwppbmRleCBjMjU2NmRhMzJhYzQuLjI0MGRkYTEwMjg0NSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0v b21hcGRybS9kaXNwbGF5cy9LY29uZmlnCkBAIC0yOSw0MiArMjksNCBAQCBjb25maWcgRFJNX09N QVBfUEFORUxfRFNJX0NNCiAJaGVscAogCSAgRHJpdmVyIGZvciBnZW5lcmljIERTSSBjb21tYW5k IG1vZGUgcGFuZWxzLgogCi1jb25maWcgRFJNX09NQVBfUEFORUxfU09OWV9BQ1g1NjVBS00KLQl0 cmlzdGF0ZSAiQUNYNTY1QUtNIFBhbmVsIgotCWRlcGVuZHMgb24gU1BJICYmIEJBQ0tMSUdIVF9D TEFTU19ERVZJQ0UKLQloZWxwCi0JICBUaGlzIGlzIHRoZSBMQ0QgcGFuZWwgdXNlZCBvbiBOb2tp YSBOOTAwCi0KLWNvbmZpZyBEUk1fT01BUF9QQU5FTF9MR1BISUxJUFNfTEIwMzVRMDIKLQl0cmlz dGF0ZSAiTEcuUGhpbGlwcyBMQjAzNVEwMiBMQ0QgUGFuZWwiCi0JZGVwZW5kcyBvbiBTUEkKLQlo ZWxwCi0JICBMQ0QgUGFuZWwgdXNlZCBvbiB0aGUgR3Vtc3RpeCBPdmVybyBQYWxvMzUKLQotY29u ZmlnIERSTV9PTUFQX1BBTkVMX1NIQVJQX0xTMDM3VjdEVzAxCi0gICAgICAgIHRyaXN0YXRlICJT aGFycCBMUzAzN1Y3RFcwMSBMQ0QgUGFuZWwiCi0gICAgICAgIGRlcGVuZHMgb24gQkFDS0xJR0hU X0NMQVNTX0RFVklDRQotICAgICAgICBoZWxwCi0gICAgICAgICAgTENEIFBhbmVsIHVzZWQgaW4g VEkncyBTRFAzNDMwIGFuZCBFVk0gYm9hcmRzCi0KLWNvbmZpZyBEUk1fT01BUF9QQU5FTF9UUE9f VEQwMjhUVEVDMQotICAgICAgICB0cmlzdGF0ZSAiVFBPIFREMDI4VFRFQzEgTENEIFBhbmVsIgot ICAgICAgICBkZXBlbmRzIG9uIFNQSQotICAgICAgICBoZWxwCi0gICAgICAgICAgTENEIHBhbmVs IHVzZWQgaW4gT3Blbm1va28uCi0KLWNvbmZpZyBEUk1fT01BUF9QQU5FTF9UUE9fVEQwNDNNVEVB MQotICAgICAgICB0cmlzdGF0ZSAiVFBPIFREMDQzTVRFQTEgTENEIFBhbmVsIgotICAgICAgICBk ZXBlbmRzIG9uIFNQSQotICAgICAgICBoZWxwCi0gICAgICAgICAgTENEIFBhbmVsIHVzZWQgaW4g T01BUDMgUGFuZG9yYQotCi1jb25maWcgRFJNX09NQVBfUEFORUxfTkVDX05MODA0OEhMMTEKLQl0 cmlzdGF0ZSAiTkVDIE5MODA0OEhMMTEgUGFuZWwiCi0JZGVwZW5kcyBvbiBTUEkKLQlkZXBlbmRz IG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKLQloZWxwCi0JCVRoaXMgTkVDIE5MODA0OEhMMTEg cGFuZWwgaXMgVEZUIExDRCB1c2VkIGluIHRoZQotCQlab29tMi8zLzM2MzAgc2RwIGJvYXJkcy4K LQogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMv TWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kaXNwbGF5cy9NYWtlZmlsZQppbmRl eCAxZGIzNGQ0ZmVkNjQuLmNiNzY4NTlkYzU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L29tYXBkcm0vZGlzcGxheXMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0v ZGlzcGxheXMvTWFrZWZpbGUKQEAgLTQsOSArNCwzIEBAIG9iai0kKENPTkZJR19EUk1fT01BUF9F TkNPREVSX1RQRDEyUzAxNSkgKz0gZW5jb2Rlci10cGQxMnMwMTUubwogb2JqLSQoQ09ORklHX0RS TV9PTUFQX0NPTk5FQ1RPUl9IRE1JKSArPSBjb25uZWN0b3ItaGRtaS5vCiBvYmotJChDT05GSUdf RFJNX09NQVBfQ09OTkVDVE9SX0FOQUxPR19UVikgKz0gY29ubmVjdG9yLWFuYWxvZy10di5vCiBv YmotJChDT05GSUdfRFJNX09NQVBfUEFORUxfRFNJX0NNKSArPSBwYW5lbC1kc2ktY20ubwotb2Jq LSQoQ09ORklHX0RSTV9PTUFQX1BBTkVMX1NPTllfQUNYNTY1QUtNKSArPSBwYW5lbC1zb255LWFj eDU2NWFrbS5vCi1vYmotJChDT05GSUdfRFJNX09NQVBfUEFORUxfTEdQSElMSVBTX0xCMDM1UTAy KSArPSBwYW5lbC1sZ3BoaWxpcHMtbGIwMzVxMDIubwotb2JqLSQoQ09ORklHX0RSTV9PTUFQX1BB TkVMX1NIQVJQX0xTMDM3VjdEVzAxKSArPSBwYW5lbC1zaGFycC1sczAzN3Y3ZHcwMS5vCi1vYmot JChDT05GSUdfRFJNX09NQVBfUEFORUxfVFBPX1REMDI4VFRFQzEpICs9IHBhbmVsLXRwby10ZDAy OHR0ZWMxLm8KLW9iai0kKENPTkZJR19EUk1fT01BUF9QQU5FTF9UUE9fVEQwNDNNVEVBMSkgKz0g cGFuZWwtdHBvLXRkMDQzbXRlYTEubwotb2JqLSQoQ09ORklHX0RSTV9PTUFQX1BBTkVMX05FQ19O TDgwNDhITDExKSArPSBwYW5lbC1uZWMtbmw4MDQ4aGwxMS5vCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vb21hcGRybS9kaXNwbGF5cy9wYW5lbC1sZ3BoaWxpcHMtbGIwMzVxMDIuYyBiL2Ry aXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rpc3BsYXlzL3BhbmVsLWxncGhpbGlwcy1sYjAzNXEwMi5j CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmQwZDg0ZTZlMzguLjAwMDAwMDAwMDAw MAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kaXNwbGF5cy9wYW5lbC1sZ3BoaWxpcHMt bGIwMzVxMDIuYworKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi0vLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogTEcuUGhpbGlwcyBMQjAzNVEwMiBM Q0QgUGFuZWwgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRleGFzIEluc3RydW1l bnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLwotICogQXV0aG9yOiBUb21pIFZh bGtlaW5lbiA8dG9taS52YWxrZWluZW5AdGkuY29tPgotICogQmFzZWQgb24gYSBkcml2ZXIgYnk6 IFN0ZXZlIFNha29tYW4gPHN0ZXZlQHNha29tYW4uY29tPgotICovCi0KLSNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3Nw aS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8u aD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+Ci0KLSNpbmNsdWRlICIuLi9kc3Mv b21hcGRzcy5oIgotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvbW9kZSBsYjAzNXEwMl92bSA9 IHsKLQkuaGFjdGl2ZSA9IDMyMCwKLQkudmFjdGl2ZSA9IDI0MCwKLQotCS5waXhlbGNsb2NrCT0g NjUwMDAwMCwKLQotCS5oc3luY19sZW4JPSAyLAotCS5oZnJvbnRfcG9yY2gJPSAyMCwKLQkuaGJh Y2tfcG9yY2gJPSA2OCwKLQotCS52c3luY19sZW4JPSAyLAotCS52ZnJvbnRfcG9yY2gJPSA0LAot CS52YmFja19wb3JjaAk9IDE4LAotCi0JLmZsYWdzCQk9IERJU1BMQVlfRkxBR1NfSFNZTkNfTE9X IHwgRElTUExBWV9GTEFHU19WU1lOQ19MT1csCi19OwotCi1zdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEg ewotCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgZHNzZGV2OwotCi0Jc3RydWN0IHNwaV9kZXZpY2Ug KnNwaTsKLQotCXN0cnVjdCB2aWRlb21vZGUgdm07Ci0KLQlzdHJ1Y3QgZ3Bpb19kZXNjICplbmFi bGVfZ3BpbzsKLX07Ci0KLSNkZWZpbmUgdG9fcGFuZWxfZGF0YShwKSBjb250YWluZXJfb2YocCwg c3RydWN0IHBhbmVsX2Rydl9kYXRhLCBkc3NkZXYpCi0KLXN0YXRpYyBpbnQgbGIwMzVxMDJfd3Jp dGVfcmVnKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHU4IHJlZywgdTE2IHZhbCkKLXsKLQlzdHJ1 Y3Qgc3BpX21lc3NhZ2UgbXNnOwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgaW5kZXhfeGZlciA9IHsK LQkJLmxlbgkJPSAzLAotCQkuY3NfY2hhbmdlCT0gMSwKLQl9OwotCXN0cnVjdCBzcGlfdHJhbnNm ZXIgdmFsdWVfeGZlciA9IHsKLQkJLmxlbgkJPSAzLAotCX07Ci0JdTgJYnVmZmVyWzE2XTsKLQot CXNwaV9tZXNzYWdlX2luaXQoJm1zZyk7Ci0KLQkvKiByZWdpc3RlciBpbmRleCAqLwotCWJ1ZmZl clswXSA9IDB4NzA7Ci0JYnVmZmVyWzFdID0gMHgwMDsKLQlidWZmZXJbMl0gPSByZWcgJiAweDdm OwotCWluZGV4X3hmZXIudHhfYnVmID0gYnVmZmVyOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZp bmRleF94ZmVyLCAmbXNnKTsKLQotCS8qIHJlZ2lzdGVyIHZhbHVlICovCi0JYnVmZmVyWzRdID0g MHg3MjsKLQlidWZmZXJbNV0gPSB2YWwgPj4gODsKLQlidWZmZXJbNl0gPSB2YWw7Ci0JdmFsdWVf eGZlci50eF9idWYgPSBidWZmZXIgKyA0OwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ2YWx1ZV94 ZmVyLCAmbXNnKTsKLQotCXJldHVybiBzcGlfc3luYyhzcGksICZtc2cpOwotfQotCi1zdGF0aWMg dm9pZCBpbml0X2xiMDM1cTAyX3BhbmVsKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0JLyog SW5pdCBzZXF1ZW5jZSBmcm9tIHBhZ2UgMjggb2YgdGhlIGxiMDM1cTAyIHNwZWMgKi8KLQlsYjAz NXEwMl93cml0ZV9yZWcoc3BpLCAweDAxLCAweDYzMDApOwotCWxiMDM1cTAyX3dyaXRlX3JlZyhz cGksIDB4MDIsIDB4MDIwMCk7Ci0JbGIwMzVxMDJfd3JpdGVfcmVnKHNwaSwgMHgwMywgMHgwMTc3 KTsKLQlsYjAzNXEwMl93cml0ZV9yZWcoc3BpLCAweDA0LCAweDA0YzcpOwotCWxiMDM1cTAyX3dy aXRlX3JlZyhzcGksIDB4MDUsIDB4ZmZjMCk7Ci0JbGIwMzVxMDJfd3JpdGVfcmVnKHNwaSwgMHgw NiwgMHhlODA2KTsKLQlsYjAzNXEwMl93cml0ZV9yZWcoc3BpLCAweDBhLCAweDQwMDgpOwotCWxi MDM1cTAyX3dyaXRlX3JlZyhzcGksIDB4MGIsIDB4MDAwMCk7Ci0JbGIwMzVxMDJfd3JpdGVfcmVn KHNwaSwgMHgwZCwgMHgwMDMwKTsKLQlsYjAzNXEwMl93cml0ZV9yZWcoc3BpLCAweDBlLCAweDI4 MDApOwotCWxiMDM1cTAyX3dyaXRlX3JlZyhzcGksIDB4MGYsIDB4MDAwMCk7Ci0JbGIwMzVxMDJf d3JpdGVfcmVnKHNwaSwgMHgxNiwgMHg5ZjgwKTsKLQlsYjAzNXEwMl93cml0ZV9yZWcoc3BpLCAw eDE3LCAweDBhMGYpOwotCWxiMDM1cTAyX3dyaXRlX3JlZyhzcGksIDB4MWUsIDB4MDBjMSk7Ci0J bGIwMzVxMDJfd3JpdGVfcmVnKHNwaSwgMHgzMCwgMHgwMzAwKTsKLQlsYjAzNXEwMl93cml0ZV9y ZWcoc3BpLCAweDMxLCAweDAwMDcpOwotCWxiMDM1cTAyX3dyaXRlX3JlZyhzcGksIDB4MzIsIDB4 MDAwMCk7Ci0JbGIwMzVxMDJfd3JpdGVfcmVnKHNwaSwgMHgzMywgMHgwMDAwKTsKLQlsYjAzNXEw Ml93cml0ZV9yZWcoc3BpLCAweDM0LCAweDA3MDcpOwotCWxiMDM1cTAyX3dyaXRlX3JlZyhzcGks IDB4MzUsIDB4MDAwNCk7Ci0JbGIwMzVxMDJfd3JpdGVfcmVnKHNwaSwgMHgzNiwgMHgwMzAyKTsK LQlsYjAzNXEwMl93cml0ZV9yZWcoc3BpLCAweDM3LCAweDAyMDIpOwotCWxiMDM1cTAyX3dyaXRl X3JlZyhzcGksIDB4M2EsIDB4MGEwZCk7Ci0JbGIwMzVxMDJfd3JpdGVfcmVnKHNwaSwgMHgzYiwg MHgwODA2KTsKLX0KLQotc3RhdGljIGludCBsYjAzNXEwMl9jb25uZWN0KHN0cnVjdCBvbWFwX2Rz c19kZXZpY2UgKnNyYywKLQkJCSAgICBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3QpCi17Ci0J c3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IHRvX3BhbmVsX2RhdGEoZHN0KTsKLQotCWlu aXRfbGIwMzVxMDJfcGFuZWwoZGRhdGEtPnNwaSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGlj IHZvaWQgbGIwMzVxMDJfZGlzY29ubmVjdChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpzcmMsCi0J CQkJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHN0KQotewotfQotCi1zdGF0aWMgdm9pZCBsYjAz NXEwMl9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCXN0cnVjdCBw YW5lbF9kcnZfZGF0YSAqZGRhdGEgPSB0b19wYW5lbF9kYXRhKGRzc2Rldik7Ci0KLQlpZiAoZGRh dGEtPmVuYWJsZV9ncGlvKQotCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoZGRhdGEtPmVuYWJs ZV9ncGlvLCAxKTsKLX0KLQotc3RhdGljIHZvaWQgbGIwMzVxMDJfZGlzYWJsZShzdHJ1Y3Qgb21h cF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0Jc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9 IHRvX3BhbmVsX2RhdGEoZHNzZGV2KTsKLQotCWlmIChkZGF0YS0+ZW5hYmxlX2dwaW8pCi0JCWdw aW9kX3NldF92YWx1ZV9jYW5zbGVlcChkZGF0YS0+ZW5hYmxlX2dwaW8sIDApOwotfQotCi1zdGF0 aWMgaW50IGxiMDM1cTAyX2dldF9tb2RlcyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYs Ci0JCQkgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXN0cnVjdCBw YW5lbF9kcnZfZGF0YSAqZGRhdGEgPSB0b19wYW5lbF9kYXRhKGRzc2Rldik7Ci0KLQlyZXR1cm4g b21hcGRzc19kaXNwbGF5X2dldF9tb2Rlcyhjb25uZWN0b3IsICZkZGF0YS0+dm0pOwotfQotCi1z dGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfZHNzX2RldmljZV9vcHMgbGIwMzVxMDJfb3BzID0gewot CS5jb25uZWN0CT0gbGIwMzVxMDJfY29ubmVjdCwKLQkuZGlzY29ubmVjdAk9IGxiMDM1cTAyX2Rp c2Nvbm5lY3QsCi0KLQkuZW5hYmxlCQk9IGxiMDM1cTAyX2VuYWJsZSwKLQkuZGlzYWJsZQk9IGxi MDM1cTAyX2Rpc2FibGUsCi0KLQkuZ2V0X21vZGVzCT0gbGIwMzVxMDJfZ2V0X21vZGVzLAotfTsK LQotc3RhdGljIGludCBsYjAzNXEwMl9wcm9iZV9vZihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQot ewotCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ ZGV2KTsKLQlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvOwotCi0JZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0 KCZzcGktPmRldiwgImVuYWJsZSIsIEdQSU9EX09VVF9MT1cpOwotCWlmIChJU19FUlIoZ3Bpbykp IHsKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gcGFyc2UgZW5hYmxlIGdwaW9cbiIp OwotCQlyZXR1cm4gUFRSX0VSUihncGlvKTsKLQl9Ci0KLQlkZGF0YS0+ZW5hYmxlX2dwaW8gPSBn cGlvOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGIwMzVxMDJfcGFuZWxfc3BpX3By b2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0Jc3RydWN0IHBhbmVsX2Rydl9kYXRhICpk ZGF0YTsKLQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXY7Ci0JaW50IHI7Ci0KLQlkZGF0 YSA9IGRldm1fa3phbGxvYygmc3BpLT5kZXYsIHNpemVvZigqZGRhdGEpLCBHRlBfS0VSTkVMKTsK LQlpZiAoZGRhdGEgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkZXZfc2V0X2RydmRh dGEoJnNwaS0+ZGV2LCBkZGF0YSk7Ci0KLQlkZGF0YS0+c3BpID0gc3BpOwotCi0JciA9IGxiMDM1 cTAyX3Byb2JlX29mKHNwaSk7Ci0JaWYgKHIpCi0JCXJldHVybiByOwotCi0JZGRhdGEtPnZtID0g bGIwMzVxMDJfdm07Ci0KLQlkc3NkZXYgPSAmZGRhdGEtPmRzc2RldjsKLQlkc3NkZXYtPmRldiA9 ICZzcGktPmRldjsKLQlkc3NkZXYtPm9wcyA9ICZsYjAzNXEwMl9vcHM7Ci0JZHNzZGV2LT50eXBl ID0gT01BUF9ESVNQTEFZX1RZUEVfRFBJOwotCWRzc2Rldi0+ZGlzcGxheSA9IHRydWU7Ci0JZHNz ZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOwotCWRzc2Rldi0+b2ZfcG9ydHMgPSBCSVQoMCk7Ci0J ZHNzZGV2LT5vcHNfZmxhZ3MgPSBPTUFQX0RTU19ERVZJQ0VfT1BfTU9ERVM7Ci0KLQkvKgotCSAq IE5vdGU6IEFjY29yZGluZyB0byB0aGUgcGFuZWwgZG9jdW1lbnRhdGlvbjoKLQkgKiBERSBpcyBh Y3RpdmUgTE9XCi0JICogREFUQSBuZWVkcyB0byBiZSBkcml2ZW4gb24gdGhlIEZBTExJTkcgZWRn ZQotCSAqLwotCWRzc2Rldi0+YnVzX2ZsYWdzID0gRFJNX0JVU19GTEFHX0RFX0hJR0gKLQkJCSAg fCBEUk1fQlVTX0ZMQUdfU1lOQ19EUklWRV9ORUdFREdFCi0JCQkgIHwgRFJNX0JVU19GTEFHX1BJ WERBVEFfRFJJVkVfUE9TRURHRTsKLQotCW9tYXBkc3NfZGlzcGxheV9pbml0KGRzc2Rldik7Ci0J b21hcGRzc19kZXZpY2VfcmVnaXN0ZXIoZHNzZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0 aWMgaW50IGxiMDM1cTAyX3BhbmVsX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkK LXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gZGV2X2dldF9kcnZkYXRhKCZzcGkt PmRldik7Ci0Jc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2ID0gJmRkYXRhLT5kc3NkZXY7 Ci0KLQlvbWFwZHNzX2RldmljZV91bnJlZ2lzdGVyKGRzc2Rldik7Ci0KLQlsYjAzNXEwMl9kaXNh YmxlKGRzc2Rldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgbGIwMzVxMDJfb2ZfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gIm9tYXBk c3MsbGdwaGlsaXBzLGxiMDM1cTAyIiwgfSwKLQl7fSwKLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFC TEUob2YsIGxiMDM1cTAyX29mX21hdGNoKTsKLQotc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGxi MDM1cTAyX3NwaV9kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IGxiMDM1cTAyX3BhbmVsX3NwaV9wcm9i ZSwKLQkucmVtb3ZlCQk9IGxiMDM1cTAyX3BhbmVsX3NwaV9yZW1vdmUsCi0JLmRyaXZlcgkJPSB7 Ci0JCS5uYW1lCT0gInBhbmVsX2xncGhpbGlwc19sYjAzNXEwMiIsCi0JCS5vZl9tYXRjaF90YWJs ZSA9IGxiMDM1cTAyX29mX21hdGNoLAotCQkuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsCi0J fSwKLX07Ci0KLW1vZHVsZV9zcGlfZHJpdmVyKGxiMDM1cTAyX3NwaV9kcml2ZXIpOwotCi1NT0RV TEVfQUxJQVMoInNwaTpsZ3BoaWxpcHMsbGIwMzVxMDIiKTsKLU1PRFVMRV9BVVRIT1IoIlRvbWkg VmFsa2VpbmVuIDx0b21pLnZhbGtlaW5lbkB0aS5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04o IkxHLlBoaWxpcHMgTEIwMzVRMDIgTENEIFBhbmVsIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0Uo IkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvcGFu ZWwtbmVjLW5sODA0OGhsMTEuYyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rpc3BsYXlzL3Bh bmVsLW5lYy1ubDgwNDhobDExLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYTVi ZDFkNzAyZi4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rpc3Bs YXlzL3BhbmVsLW5lYy1ubDgwNDhobDExLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzEgKzAsMCBA QAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKLS8qCi0gKiBO RUMgTkw4MDQ4SEwxMSBQYW5lbCBkcml2ZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4 YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCi0gKiBBdXRo b3I6IEVyaWsgR2lsbGluZyA8a29ua2Vyc0BhbmRyb2lkLmNvbT4KLSAqIENvbnZlcnRlZCB0byBu ZXcgRFNTIGRldmljZSBtb2RlbDogVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQHRpLmNv bT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlv L2NvbnN1bWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgv c3BpL3NwaS5oPgotCi0jaW5jbHVkZSAiLi4vZHNzL29tYXBkc3MuaCIKLQotc3RydWN0IHBhbmVs X2Rydl9kYXRhIHsKLQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlCWRzc2RldjsKLQotCXN0cnVjdCB2 aWRlb21vZGUgdm07Ci0KLQlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNfZ3BpbzsKLQotCXN0cnVjdCBz cGlfZGV2aWNlICpzcGk7Ci19OwotCi0jZGVmaW5lIExDRF9YUkVTCQk4MDAKLSNkZWZpbmUgTENE X1lSRVMJCTQ4MAotLyoKLSAqIE5FQyBQSVggQ2xvY2sgUmF0aW5ncwotICogTUlOOjIxLjhNSHog VFlQOjIzLjhNSHogTUFYOjI1LjdNSHoKLSAqLwotI2RlZmluZSBMQ0RfUElYRUxfQ0xPQ0sJCTIz ODAwMDAwCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgYWRkcjsKLQl1 bnNpZ25lZCBjaGFyIGRhdDsKLX0gbmVjXzgwNDhfaW5pdF9zZXFbXSA9IHsKLQl7IDMsIDB4MDEg fSwgeyAwLCAweDAwIH0sIHsgMSwgMHgwMSB9LCB7IDQsIDB4MDAgfSwgeyA1LCAweDE0IH0sCi0J eyA2LCAweDI0IH0sIHsgMTYsIDB4RDcgfSwgeyAxNywgMHgwMCB9LCB7IDE4LCAweDAwIH0sIHsg MTksIDB4NTUgfSwKLQl7IDIwLCAweDAxIH0sIHsgMjEsIDB4NzAgfSwgeyAyMiwgMHgxRSB9LCB7 IDIzLCAweDI1IH0sCXsgMjQsIDB4MjUgfSwKLQl7IDI1LCAweDAyIH0sIHsgMjYsIDB4MDIgfSwg eyAyNywgMHhBMCB9LCB7IDMyLCAweDJGIH0sIHsgMzMsIDB4MEYgfSwKLQl7IDM0LCAweDBGIH0s IHsgMzUsIDB4MEYgfSwgeyAzNiwgMHgwRiB9LCB7IDM3LCAweDBGIH0sCXsgMzgsIDB4MEYgfSwK LQl7IDM5LCAweDAwIH0sIHsgNDAsIDB4MDIgfSwgeyA0MSwgMHgwMiB9LCB7IDQyLCAweDAyIH0s CXsgNDMsIDB4MEYgfSwKLQl7IDQ0LCAweDBGIH0sIHsgNDUsIDB4MEYgfSwgeyA0NiwgMHgwRiB9 LCB7IDQ3LCAweDBGIH0sCXsgNDgsIDB4MEYgfSwKLQl7IDQ5LCAweDBGIH0sIHsgNTAsIDB4MDAg fSwgeyA1MSwgMHgwMiB9LCB7IDUyLCAweDAyIH0sIHsgNTMsIDB4MDIgfSwKLQl7IDgwLCAweDBD IH0sIHsgODMsIDB4NDIgfSwgeyA4NCwgMHg0MiB9LCB7IDg1LCAweDQxIH0sCXsgODYsIDB4MTQg fSwKLQl7IDg5LCAweDg4IH0sIHsgOTAsIDB4MDEgfSwgeyA5MSwgMHgwMCB9LCB7IDkyLCAweDAy IH0sCXsgOTMsIDB4MEMgfSwKLQl7IDk0LCAweDFDIH0sIHsgOTUsIDB4MjcgfSwgeyA5OCwgMHg0 OSB9LCB7IDk5LCAweDI3IH0sIHsgMTAyLCAweDc2IH0sCi0JeyAxMDMsIDB4MjcgfSwgeyAxMTIs IDB4MDEgfSwgeyAxMTMsIDB4MEUgfSwgeyAxMTQsIDB4MDIgfSwKLQl7IDExNSwgMHgwQyB9LCB7 IDExOCwgMHgwQyB9LCB7IDEyMSwgMHgzMCB9LCB7IDEzMCwgMHgwMCB9LAotCXsgMTMxLCAweDAw IH0sIHsgMTMyLCAweEZDIH0sIHsgMTM0LCAweDAwIH0sIHsgMTM2LCAweDAwIH0sCi0JeyAxMzgs IDB4MDAgfSwgeyAxMzksIDB4MDAgfSwgeyAxNDAsIDB4MDAgfSwgeyAxNDEsIDB4RkMgfSwKLQl7 IDE0MywgMHgwMCB9LCB7IDE0NSwgMHgwMCB9LCB7IDE0NywgMHgwMCB9LCB7IDE0OCwgMHgwMCB9 LAotCXsgMTQ5LCAweDAwIH0sIHsgMTUwLCAweEZDIH0sIHsgMTUyLCAweDAwIH0sIHsgMTU0LCAw eDAwIH0sCi0JeyAxNTYsIDB4MDAgfSwgeyAxNTcsIDB4MDAgfSwgeyAyLCAweDAwIH0sCi19Owot Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvbW9kZSBuZWNfODA0OF9wYW5lbF92bSA9IHsKLQku aGFjdGl2ZQk9IExDRF9YUkVTLAotCS52YWN0aXZlCT0gTENEX1lSRVMsCi0JLnBpeGVsY2xvY2sJ PSBMQ0RfUElYRUxfQ0xPQ0ssCi0JLmhmcm9udF9wb3JjaAk9IDYsCi0JLmhzeW5jX2xlbgk9IDEs Ci0JLmhiYWNrX3BvcmNoCT0gNCwKLQkudmZyb250X3BvcmNoCT0gMywKLQkudnN5bmNfbGVuCT0g MSwKLQkudmJhY2tfcG9yY2gJPSA0LAotCi0JLmZsYWdzCQk9IERJU1BMQVlfRkxBR1NfSFNZTkNf TE9XIHwgRElTUExBWV9GTEFHU19WU1lOQ19MT1csCi19OwotCi0jZGVmaW5lIHRvX3BhbmVsX2Rh dGEocCkgY29udGFpbmVyX29mKHAsIHN0cnVjdCBwYW5lbF9kcnZfZGF0YSwgZHNzZGV2KQotCi1z dGF0aWMgaW50IG5lY184MDQ4X3NwaV9zZW5kKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHVuc2ln bmVkIGNoYXIgcmVnX2FkZHIsCi0JCQl1bnNpZ25lZCBjaGFyIHJlZ19kYXRhKQotewotCWludCBy ZXQgPSAwOwotCXVuc2lnbmVkIGludCBjbWQgPSAwLCBkYXRhID0gMDsKLQotCWNtZCA9IDB4MDAw MCB8IHJlZ19hZGRyOyAvKiByZWdpc3RlciBhZGRyZXNzIHdyaXRlICovCi0JZGF0YSA9IDB4MDEw MCB8IHJlZ19kYXRhOyAvKiByZWdpc3RlciBkYXRhIHdyaXRlICovCi0JZGF0YSA9IChjbWQgPDwg MTYpIHwgZGF0YTsKLQotCXJldCA9IHNwaV93cml0ZShzcGksICh1bnNpZ25lZCBjaGFyICopJmRh dGEsIDQpOwotCWlmIChyZXQpCi0JCXByX2VycigiZXJyb3IgaW4gc3BpX3dyaXRlICV4XG4iLCBk YXRhKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaW5pdF9uZWNfODA0OF93dmdh X2xjZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXVuc2lnbmVkIGludCBpOwotCS8qIElu aXRpYWxpemF0aW9uIFNlcXVlbmNlICovCi0JLyogbmVjXzgwNDhfc3BpX3NlbmQoc3BpLCBSRUcs IFZBTCkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgKEFSUkFZX1NJWkUobmVjXzgwNDhfaW5pdF9zZXEp IC0gMSk7IGkrKykKLQkJbmVjXzgwNDhfc3BpX3NlbmQoc3BpLCBuZWNfODA0OF9pbml0X3NlcVtp XS5hZGRyLAotCQkJCW5lY184MDQ4X2luaXRfc2VxW2ldLmRhdCk7Ci0JdWRlbGF5KDIwKTsKLQlu ZWNfODA0OF9zcGlfc2VuZChzcGksIG5lY184MDQ4X2luaXRfc2VxW2ldLmFkZHIsCi0JCQkJbmVj XzgwNDhfaW5pdF9zZXFbaV0uZGF0KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBuZWNf ODA0OF9jb25uZWN0KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKnNyYywKLQkJCSAgICBzdHJ1Y3Qg b21hcF9kc3NfZGV2aWNlICpkc3QpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG5l Y184MDQ4X2Rpc2Nvbm5lY3Qoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqc3JjLAotCQkJCXN0cnVj dCBvbWFwX2Rzc19kZXZpY2UgKmRzdCkKLXsKLX0KLQotc3RhdGljIHZvaWQgbmVjXzgwNDhfZW5h YmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2 X2RhdGEgKmRkYXRhID0gdG9fcGFuZWxfZGF0YShkc3NkZXYpOwotCi0JZ3Bpb2Rfc2V0X3ZhbHVl X2NhbnNsZWVwKGRkYXRhLT5yZXNfZ3BpbywgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG5lY184MDQ4 X2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCXN0cnVjdCBwYW5l bF9kcnZfZGF0YSAqZGRhdGEgPSB0b19wYW5lbF9kYXRhKGRzc2Rldik7Ci0KLQlncGlvZF9zZXRf dmFsdWVfY2Fuc2xlZXAoZGRhdGEtPnJlc19ncGlvLCAwKTsKLX0KLQotc3RhdGljIGludCBuZWNf ODA0OF9nZXRfbW9kZXMoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQkJICAgICAg c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2Rh dGEgKmRkYXRhID0gdG9fcGFuZWxfZGF0YShkc3NkZXYpOwotCi0JcmV0dXJuIG9tYXBkc3NfZGlz cGxheV9nZXRfbW9kZXMoY29ubmVjdG9yLCAmZGRhdGEtPnZtKTsKLX0KLQotc3RhdGljIGNvbnN0 IHN0cnVjdCBvbWFwX2Rzc19kZXZpY2Vfb3BzIG5lY184MDQ4X29wcyA9IHsKLQkuY29ubmVjdAk9 IG5lY184MDQ4X2Nvbm5lY3QsCi0JLmRpc2Nvbm5lY3QJPSBuZWNfODA0OF9kaXNjb25uZWN0LAot Ci0JLmVuYWJsZQkJPSBuZWNfODA0OF9lbmFibGUsCi0JLmRpc2FibGUJPSBuZWNfODA0OF9kaXNh YmxlLAotCi0JLmdldF9tb2Rlcwk9IG5lY184MDQ4X2dldF9tb2RlcywKLX07Ci0KLXN0YXRpYyBp bnQgbmVjXzgwNDhfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3QgcGFu ZWxfZHJ2X2RhdGEgKmRkYXRhOwotCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldjsKLQlz dHJ1Y3QgZ3Bpb19kZXNjICpncGlvOwotCWludCByOwotCi0JZGV2X2RiZygmc3BpLT5kZXYsICIl c1xuIiwgX19mdW5jX18pOwotCi0Jc3BpLT5tb2RlID0gU1BJX01PREVfMDsKLQlzcGktPmJpdHNf cGVyX3dvcmQgPSAzMjsKLQotCXIgPSBzcGlfc2V0dXAoc3BpKTsKLQlpZiAociA8IDApIHsKLQkJ ZGV2X2Vycigmc3BpLT5kZXYsICJzcGlfc2V0dXAgZmFpbGVkOiAlZFxuIiwgcik7Ci0JCXJldHVy biByOwotCX0KLQotCWluaXRfbmVjXzgwNDhfd3ZnYV9sY2Qoc3BpKTsKLQotCWRkYXRhID0gZGV2 bV9remFsbG9jKCZzcGktPmRldiwgc2l6ZW9mKCpkZGF0YSksIEdGUF9LRVJORUwpOwotCWlmIChk ZGF0YSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRldl9zZXRfZHJ2ZGF0YSgmc3Bp LT5kZXYsIGRkYXRhKTsKLQotCWRkYXRhLT5zcGkgPSBzcGk7Ci0KLQlncGlvID0gZGV2bV9ncGlv ZF9nZXQoJnNwaS0+ZGV2LCAicmVzZXQiLCBHUElPRF9PVVRfTE9XKTsKLQlpZiAoSVNfRVJSKGdw aW8pKSB7Ci0JCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIGdldCByZXNldCBncGlvXG4i KTsKLQkJcmV0dXJuIFBUUl9FUlIoZ3Bpbyk7Ci0JfQotCi0JZGRhdGEtPnJlc19ncGlvID0gZ3Bp bzsKLQotCWRkYXRhLT52bSA9IG5lY184MDQ4X3BhbmVsX3ZtOwotCi0JZHNzZGV2ID0gJmRkYXRh LT5kc3NkZXY7Ci0JZHNzZGV2LT5kZXYgPSAmc3BpLT5kZXY7Ci0JZHNzZGV2LT5vcHMgPSAmbmVj XzgwNDhfb3BzOwotCWRzc2Rldi0+dHlwZSA9IE9NQVBfRElTUExBWV9UWVBFX0RQSTsKLQlkc3Nk ZXYtPmRpc3BsYXkgPSB0cnVlOwotCWRzc2Rldi0+b3duZXIgPSBUSElTX01PRFVMRTsKLQlkc3Nk ZXYtPm9mX3BvcnRzID0gQklUKDApOwotCWRzc2Rldi0+b3BzX2ZsYWdzID0gT01BUF9EU1NfREVW SUNFX09QX01PREVTOwotCWRzc2Rldi0+YnVzX2ZsYWdzID0gRFJNX0JVU19GTEFHX0RFX0hJR0gK LQkJCSAgfCBEUk1fQlVTX0ZMQUdfU1lOQ19EUklWRV9QT1NFREdFCi0JCQkgIHwgRFJNX0JVU19G TEFHX1BJWERBVEFfRFJJVkVfUE9TRURHRTsKLQotCW9tYXBkc3NfZGlzcGxheV9pbml0KGRzc2Rl dik7Ci0Jb21hcGRzc19kZXZpY2VfcmVnaXN0ZXIoZHNzZGV2KTsKLQotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgaW50IG5lY184MDQ4X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewot CXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2 KTsKLQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYgPSAmZGRhdGEtPmRzc2RldjsKLQot CWRldl9kYmcoJmRkYXRhLT5zcGktPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlvbWFwZHNz X2RldmljZV91bnJlZ2lzdGVyKGRzc2Rldik7Ci0KLQluZWNfODA0OF9kaXNhYmxlKGRzc2Rldik7 Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmZGVmIENPTkZJR19QTV9TTEVFUAotc3RhdGljIGludCBu ZWNfODA0OF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgc3BpX2Rldmlj ZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOwotCi0JbmVjXzgwNDhfc3BpX3NlbmQoc3BpLCAy LCAweDAxKTsKLQltZGVsYXkoNDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbmVj XzgwNDhfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgc3BpX2RldmljZSAq c3BpID0gdG9fc3BpX2RldmljZShkZXYpOwotCi0JLyogcmVpbml0aWFsaXplIHRoZSBwYW5lbCAq LwotCXNwaV9zZXR1cChzcGkpOwotCW5lY184MDQ4X3NwaV9zZW5kKHNwaSwgMiwgMHgwMCk7Ci0J aW5pdF9uZWNfODA0OF93dmdhX2xjZChzcGkpOwotCi0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgU0lN UExFX0RFVl9QTV9PUFMobmVjXzgwNDhfcG1fb3BzLCBuZWNfODA0OF9zdXNwZW5kLAotCQluZWNf ODA0OF9yZXN1bWUpOwotI2RlZmluZSBORUNfODA0OF9QTV9PUFMgKCZuZWNfODA0OF9wbV9vcHMp Ci0jZWxzZQotI2RlZmluZSBORUNfODA0OF9QTV9PUFMgTlVMTAotI2VuZGlmCi0KLXN0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG5lY184MDQ4X29mX21hdGNoW10gPSB7Ci0JeyAuY29t cGF0aWJsZSA9ICJvbWFwZHNzLG5lYyxubDgwNDhobDExIiwgfSwKLQl7fSwKLX07Ci0KLU1PRFVM RV9ERVZJQ0VfVEFCTEUob2YsIG5lY184MDQ4X29mX21hdGNoKTsKLQotc3RhdGljIHN0cnVjdCBz cGlfZHJpdmVyIG5lY184MDQ4X2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZQk9ICJw YW5lbC1uZWMtbmw4MDQ4aGwxMSIsCi0JCS5wbQk9IE5FQ184MDQ4X1BNX09QUywKLQkJLm9mX21h dGNoX3RhYmxlID0gbmVjXzgwNDhfb2ZfbWF0Y2gsCi0JCS5zdXBwcmVzc19iaW5kX2F0dHJzID0g dHJ1ZSwKLQl9LAotCS5wcm9iZQk9IG5lY184MDQ4X3Byb2JlLAotCS5yZW1vdmUJPSBuZWNfODA0 OF9yZW1vdmUsCi19OwotCi1tb2R1bGVfc3BpX2RyaXZlcihuZWNfODA0OF9kcml2ZXIpOwotCi1N T0RVTEVfQUxJQVMoInNwaTpuZWMsbmw4MDQ4aGwxMSIpOwotTU9EVUxFX0FVVEhPUigiRXJpayBH aWxsaW5nIDxrb25rZXJzQGFuZHJvaWQuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJORUMt Tkw4MDQ4SEwxMSBEcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rpc3BsYXlzL3BhbmVsLXNoYXJwLWxzMDM3djdkdzAx LmMgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kaXNwbGF5cy9wYW5lbC1zaGFycC1sczAzN3Y3 ZHcwMS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWI1MGZkMWYzZjIuLjAwMDAw MDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kaXNwbGF5cy9wYW5lbC1zaGFy cC1sczAzN3Y3ZHcwMS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjYyICswLDAgQEAKLS8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBMQ0QgcGFuZWwgZHJpdmVy IGZvciBTaGFycCBMUzAzN1Y3RFcwMQotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUZXhhcyBJ bnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KLSAqIEF1dGhvcjog VG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+Ci0jaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8 bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Ci0KLSNpbmNsdWRlICIuLi9kc3Mvb21hcGRzcy5o IgotCi1zdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgewotCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgZHNz ZGV2OwotCXN0cnVjdCByZWd1bGF0b3IgKnZjYzsKLQotCXN0cnVjdCB2aWRlb21vZGUgdm07Ci0K LQlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNiX2dwaW87CS8qIGxvdyA9IHJlc2V0IGFjdGl2ZSBtaW4g MjAgdXMgKi8KLQlzdHJ1Y3QgZ3Bpb19kZXNjICppbmlfZ3BpbzsJLyogaGlnaCA9IHBvd2VyIG9u ICovCi0Jc3RydWN0IGdwaW9fZGVzYyAqbW9fZ3BpbzsJLyogbG93ID0gNDgweDY0MCwgaGlnaCA9 IDI0MHgzMjAgKi8KLQlzdHJ1Y3QgZ3Bpb19kZXNjICpscl9ncGlvOwkvKiBoaWdoID0gY29udmVu dGlvbmFsIGhvcml6b250YWwgc2Nhbm5pbmcgKi8KLQlzdHJ1Y3QgZ3Bpb19kZXNjICp1ZF9ncGlv OwkvKiBoaWdoID0gY29udmVudGlvbmFsIHZlcnRpY2FsIHNjYW5uaW5nICovCi19OwotCi1zdGF0 aWMgY29uc3Qgc3RydWN0IHZpZGVvbW9kZSBzaGFycF9sc192bSA9IHsKLQkuaGFjdGl2ZSA9IDQ4 MCwKLQkudmFjdGl2ZSA9IDY0MCwKLQotCS5waXhlbGNsb2NrCT0gMTkyMDAwMDAsCi0KLQkuaHN5 bmNfbGVuCT0gMiwKLQkuaGZyb250X3BvcmNoCT0gMSwKLQkuaGJhY2tfcG9yY2gJPSAyOCwKLQot CS52c3luY19sZW4JPSAxLAotCS52ZnJvbnRfcG9yY2gJPSAxLAotCS52YmFja19wb3JjaAk9IDEs Ci0KLQkuZmxhZ3MJCT0gRElTUExBWV9GTEFHU19IU1lOQ19MT1cgfCBESVNQTEFZX0ZMQUdTX1ZT WU5DX0xPVywKLX07Ci0KLSNkZWZpbmUgdG9fcGFuZWxfZGF0YShwKSBjb250YWluZXJfb2YocCwg c3RydWN0IHBhbmVsX2Rydl9kYXRhLCBkc3NkZXYpCi0KLXN0YXRpYyBpbnQgc2hhcnBfbHNfY29u bmVjdChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpzcmMsCi0JCQkgICAgc3RydWN0IG9tYXBfZHNz X2RldmljZSAqZHN0KQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzaGFycF9sc19k aXNjb25uZWN0KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKnNyYywKLQkJCQlzdHJ1Y3Qgb21hcF9k c3NfZGV2aWNlICpkc3QpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIHNoYXJwX2xzX3ByZV9lbmFibGUo c3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCXN0cnVjdCBwYW5lbF9kcnZfZGF0 YSAqZGRhdGEgPSB0b19wYW5lbF9kYXRhKGRzc2Rldik7Ci0JaW50IHI7Ci0KLQlpZiAoZGRhdGEt PnZjYykgewotCQlyID0gcmVndWxhdG9yX2VuYWJsZShkZGF0YS0+dmNjKTsKLQkJaWYgKHIpCi0J CQlkZXZfZXJyKGRzc2Rldi0+ZGV2LCAiJXM6IGZhaWxlZCB0byBlbmFibGUgcmVndWxhdG9yXG4i LAotCQkJCV9fZnVuY19fKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHNoYXJwX2xzX2VuYWJsZShz dHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0Jc3RydWN0IHBhbmVsX2Rydl9kYXRh ICpkZGF0YSA9IHRvX3BhbmVsX2RhdGEoZHNzZGV2KTsKLQotCS8qIHdhaXQgY291cGxlIG9mIHZz eW5jcyB1bnRpbCBlbmFibGluZyB0aGUgTENEICovCi0JbXNsZWVwKDUwKTsKLQotCWlmIChkZGF0 YS0+cmVzYl9ncGlvKQotCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoZGRhdGEtPnJlc2JfZ3Bp bywgMSk7Ci0KLQlpZiAoZGRhdGEtPmluaV9ncGlvKQotCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xl ZXAoZGRhdGEtPmluaV9ncGlvLCAxKTsKLX0KLQotc3RhdGljIHZvaWQgc2hhcnBfbHNfZGlzYWJs ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0Jc3RydWN0IHBhbmVsX2Rydl9k YXRhICpkZGF0YSA9IHRvX3BhbmVsX2RhdGEoZHNzZGV2KTsKLQotCWlmIChkZGF0YS0+aW5pX2dw aW8pCi0JCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChkZGF0YS0+aW5pX2dwaW8sIDApOwotCi0J aWYgKGRkYXRhLT5yZXNiX2dwaW8pCi0JCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChkZGF0YS0+ cmVzYl9ncGlvLCAwKTsKLQotCS8qIHdhaXQgYXQgbGVhc3QgNSB2c3luY3MgYWZ0ZXIgZGlzYWJs aW5nIHRoZSBMQ0QgKi8KLQltc2xlZXAoMTAwKTsKLX0KLQotc3RhdGljIHZvaWQgc2hhcnBfbHNf cG9zdF9kaXNhYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlzdHJ1Y3Qg cGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gdG9fcGFuZWxfZGF0YShkc3NkZXYpOwotCi0JaWYgKGRk YXRhLT52Y2MpCi0JCXJlZ3VsYXRvcl9kaXNhYmxlKGRkYXRhLT52Y2MpOwotfQotCi1zdGF0aWMg aW50IHNoYXJwX2xzX2dldF9tb2RlcyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0J CQkgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXN0cnVjdCBwYW5l bF9kcnZfZGF0YSAqZGRhdGEgPSB0b19wYW5lbF9kYXRhKGRzc2Rldik7Ci0KLQlyZXR1cm4gb21h cGRzc19kaXNwbGF5X2dldF9tb2Rlcyhjb25uZWN0b3IsICZkZGF0YS0+dm0pOwotfQotCi1zdGF0 aWMgY29uc3Qgc3RydWN0IG9tYXBfZHNzX2RldmljZV9vcHMgc2hhcnBfbHNfb3BzID0gewotCS5j b25uZWN0CT0gc2hhcnBfbHNfY29ubmVjdCwKLQkuZGlzY29ubmVjdAk9IHNoYXJwX2xzX2Rpc2Nv bm5lY3QsCi0KLQkucHJlX2VuYWJsZQk9IHNoYXJwX2xzX3ByZV9lbmFibGUsCi0JLmVuYWJsZQkJ PSBzaGFycF9sc19lbmFibGUsCi0JLmRpc2FibGUJPSBzaGFycF9sc19kaXNhYmxlLAotCS5wb3N0 X2Rpc2FibGUJPSBzaGFycF9sc19wb3N0X2Rpc2FibGUsCi0KLQkuZ2V0X21vZGVzCT0gc2hhcnBf bHNfZ2V0X21vZGVzLAotfTsKLQotc3RhdGljICBpbnQgc2hhcnBfbHNfZ2V0X2dwaW9fb2Yoc3Ry dWN0IGRldmljZSAqZGV2LCBpbnQgaW5kZXgsIGludCB2YWwsCi0JY29uc3QgY2hhciAqZGVzYywg c3RydWN0IGdwaW9fZGVzYyAqKmdwaW9kKQotewotCXN0cnVjdCBncGlvX2Rlc2MgKmdkOwotCi0J KmdwaW9kID0gTlVMTDsKLQotCWdkID0gZGV2bV9ncGlvZF9nZXRfaW5kZXgoZGV2LCBkZXNjLCBp bmRleCwgR1BJT0RfT1VUX0xPVyk7Ci0JaWYgKElTX0VSUihnZCkpCi0JCXJldHVybiBQVFJfRVJS KGdkKTsKLQotCSpncGlvZCA9IGdkOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNoYXJw X2xzX3Byb2JlX29mKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHBh bmVsX2Rydl9kYXRhICpkZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCWludCBy OwotCi0JZGRhdGEtPnZjYyA9IGRldm1fcmVndWxhdG9yX2dldCgmcGRldi0+ZGV2LCAiZW52ZGQi KTsKLQlpZiAoSVNfRVJSKGRkYXRhLT52Y2MpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZh aWxlZCB0byBnZXQgcmVndWxhdG9yXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIoZGRhdGEtPnZjYyk7 Ci0JfQotCi0JLyogbGNkIElOSSAqLwotCXIgPSBzaGFycF9sc19nZXRfZ3Bpb19vZigmcGRldi0+ ZGV2LCAwLCAwLCAiZW5hYmxlIiwgJmRkYXRhLT5pbmlfZ3Bpbyk7Ci0JaWYgKHIpCi0JCXJldHVy biByOwotCi0JLyogbGNkIFJFU0IgKi8KLQlyID0gc2hhcnBfbHNfZ2V0X2dwaW9fb2YoJnBkZXYt PmRldiwgMCwgMCwgInJlc2V0IiwgJmRkYXRhLT5yZXNiX2dwaW8pOwotCWlmIChyKQotCQlyZXR1 cm4gcjsKLQotCS8qIGxjZCBNTyAqLwotCXIgPSBzaGFycF9sc19nZXRfZ3Bpb19vZigmcGRldi0+ ZGV2LCAwLCAwLCAibW9kZSIsICZkZGF0YS0+bW9fZ3Bpbyk7Ci0JaWYgKHIpCi0JCXJldHVybiBy OwotCi0JLyogbGNkIExSICovCi0JciA9IHNoYXJwX2xzX2dldF9ncGlvX29mKCZwZGV2LT5kZXYs IDEsIDEsICJtb2RlIiwgJmRkYXRhLT5scl9ncGlvKTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0K LQkvKiBsY2QgVUQgKi8KLQlyID0gc2hhcnBfbHNfZ2V0X2dwaW9fb2YoJnBkZXYtPmRldiwgMiwg MSwgIm1vZGUiLCAmZGRhdGEtPnVkX2dwaW8pOwotCWlmIChyKQotCQlyZXR1cm4gcjsKLQotCXJl dHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNoYXJwX2xzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YTsKLQlzdHJ1Y3Qg b21hcF9kc3NfZGV2aWNlICpkc3NkZXY7Ci0JaW50IHI7Ci0KLQlkZGF0YSA9IGRldm1fa3phbGxv YygmcGRldi0+ZGV2LCBzaXplb2YoKmRkYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRkYXRhID09 IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwg ZGRhdGEpOwotCi0JciA9IHNoYXJwX2xzX3Byb2JlX29mKHBkZXYpOwotCWlmIChyKQotCQlyZXR1 cm4gcjsKLQotCWRkYXRhLT52bSA9IHNoYXJwX2xzX3ZtOwotCi0JZHNzZGV2ID0gJmRkYXRhLT5k c3NkZXY7Ci0JZHNzZGV2LT5kZXYgPSAmcGRldi0+ZGV2OwotCWRzc2Rldi0+b3BzID0gJnNoYXJw X2xzX29wczsKLQlkc3NkZXYtPnR5cGUgPSBPTUFQX0RJU1BMQVlfVFlQRV9EUEk7Ci0JZHNzZGV2 LT5kaXNwbGF5ID0gdHJ1ZTsKLQlkc3NkZXYtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JZHNzZGV2 LT5vZl9wb3J0cyA9IEJJVCgwKTsKLQlkc3NkZXYtPm9wc19mbGFncyA9IE9NQVBfRFNTX0RFVklD RV9PUF9NT0RFUzsKLQotCS8qCi0JICogTm90ZTogQWNjb3JkaW5nIHRvIHRoZSBwYW5lbCBkb2N1 bWVudGF0aW9uOgotCSAqIERBVEEgbmVlZHMgdG8gYmUgZHJpdmVuIG9uIHRoZSBGQUxMSU5HIGVk Z2UKLQkgKi8KLQlkc3NkZXYtPmJ1c19mbGFncyA9IERSTV9CVVNfRkxBR19ERV9ISUdICi0JCQkg IHwgRFJNX0JVU19GTEFHX1NZTkNfRFJJVkVfTkVHRURHRQotCQkJICB8IERSTV9CVVNfRkxBR19Q SVhEQVRBX0RSSVZFX1BPU0VER0U7Ci0KLQlvbWFwZHNzX2Rpc3BsYXlfaW5pdChkc3NkZXYpOwot CW9tYXBkc3NfZGV2aWNlX3JlZ2lzdGVyKGRzc2Rldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIGludCBfX2V4aXQgc2hhcnBfbHNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCi17Ci0Jc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZk YXRhKHBkZXYpOwotCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9ICZkZGF0YS0+ZHNz ZGV2OwotCi0Jb21hcGRzc19kZXZpY2VfdW5yZWdpc3Rlcihkc3NkZXYpOwotCi0JaWYgKG9tYXBk c3NfZGV2aWNlX2lzX2VuYWJsZWQoZHNzZGV2KSkgewotCQlzaGFycF9sc19kaXNhYmxlKGRzc2Rl dik7Ci0JCXNoYXJwX2xzX3Bvc3RfZGlzYWJsZShkc3NkZXYpOwotCX0KLQotCXJldHVybiAwOwot fQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzaGFycF9sc19vZl9tYXRjaFtd ID0gewotCXsgLmNvbXBhdGlibGUgPSAib21hcGRzcyxzaGFycCxsczAzN3Y3ZHcwMSIsIH0sCi0J e30sCi19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzaGFycF9sc19vZl9tYXRjaCk7Ci0K LXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNoYXJwX2xzX2RyaXZlciA9IHsKLQkucHJv YmUgPSBzaGFycF9sc19wcm9iZSwKLQkucmVtb3ZlID0gX19leGl0X3Aoc2hhcnBfbHNfcmVtb3Zl KSwKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJwYW5lbC1zaGFycC1sczAzN3Y3ZHcwMSIsCi0J CS5vZl9tYXRjaF90YWJsZSA9IHNoYXJwX2xzX29mX21hdGNoLAotCQkuc3VwcHJlc3NfYmluZF9h dHRycyA9IHRydWUsCi0JfSwKLX07Ci0KLW1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc2hhcnBfbHNf ZHJpdmVyKTsKLQotTU9EVUxFX0FVVEhPUigiVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVu QHRpLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiU2hhcnAgTFMwMzdWN0RXMDEgUGFuZWwg RHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vb21hcGRybS9kaXNwbGF5cy9wYW5lbC1zb255LWFjeDU2NWFrbS5jIGIvZHJpdmVycy9n cHUvZHJtL29tYXBkcm0vZGlzcGxheXMvcGFuZWwtc29ueS1hY3g1NjVha20uYwpkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggNTg4YTFhNmJiY2MzLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJp dmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvcGFuZWwtc29ueS1hY3g1NjVha20uYworKysg L2Rldi9udWxsCkBAIC0xLDc1NSArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMC1vbmx5Ci0vKgotICogU29ueSBBQ1g1NjVBS00gTENEIFBhbmVsIGRyaXZlcgotICoK LSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIE9yaWdpbmFs IERyaXZlciBBdXRob3I6IEltcmUgRGVhayA8aW1yZS5kZWFrQG5va2lhLmNvbT4KLSAqIEJhc2Vk IG9uIHBhbmVsLWdlbmVyaWMuYyBieSBUb21pIFZhbGtlaW5lbiA8dG9taS52YWxrZWluZW5AdGku Y29tPgotICogQWRhcHRlZCB0byBuZXcgRFNTMiBmcmFtZXdvcms6IFJvZ2VyIFF1YWRyb3MgPHJv Z2VyLnF1YWRyb3NAbm9raWEuY29tPgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQu aD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3Vt ZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVs Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkv c3BpLmg+Ci0KLSNpbmNsdWRlICIuLi9kc3Mvb21hcGRzcy5oIgotCi0jZGVmaW5lIE1JUElEX0NN RF9SRUFEX0RJU1BfSUQJCTB4MDQKLSNkZWZpbmUgTUlQSURfQ01EX1JFQURfUkVECQkweDA2Ci0j ZGVmaW5lIE1JUElEX0NNRF9SRUFEX0dSRUVOCQkweDA3Ci0jZGVmaW5lIE1JUElEX0NNRF9SRUFE X0JMVUUJCTB4MDgKLSNkZWZpbmUgTUlQSURfQ01EX1JFQURfRElTUF9TVEFUVVMJMHgwOQotI2Rl ZmluZSBNSVBJRF9DTURfUkREU0RSCQkweDBGCi0jZGVmaW5lIE1JUElEX0NNRF9TTEVFUF9JTgkJ MHgxMAotI2RlZmluZSBNSVBJRF9DTURfU0xFRVBfT1VUCQkweDExCi0jZGVmaW5lIE1JUElEX0NN RF9ESVNQX09GRgkJMHgyOAotI2RlZmluZSBNSVBJRF9DTURfRElTUF9PTgkJMHgyOQotI2RlZmlu ZSBNSVBJRF9DTURfV1JJVEVfRElTUF9CUklHSFRORVNTCTB4NTEKLSNkZWZpbmUgTUlQSURfQ01E X1JFQURfRElTUF9CUklHSFRORVNTCTB4NTIKLSNkZWZpbmUgTUlQSURfQ01EX1dSSVRFX0NUUkxf RElTUAkweDUzCi0KLSNkZWZpbmUgQ1RSTF9ESVNQX0JSSUdIVE5FU1NfQ1RSTF9PTgkoMSA8PCA1 KQotI2RlZmluZSBDVFJMX0RJU1BfQU1CSUVOVF9MSUdIVF9DVFJMX09OCSgxIDw8IDQpCi0jZGVm aW5lIENUUkxfRElTUF9CQUNLTElHSFRfT04JCSgxIDw8IDIpCi0jZGVmaW5lIENUUkxfRElTUF9B VVRPX0JSSUdIVE5FU1NfT04JKDEgPDwgMSkKLQotI2RlZmluZSBNSVBJRF9DTURfUkVBRF9DVFJM X0RJU1AJMHg1NAotI2RlZmluZSBNSVBJRF9DTURfV1JJVEVfQ0FCQwkJMHg1NQotI2RlZmluZSBN SVBJRF9DTURfUkVBRF9DQUJDCQkweDU2Ci0KLSNkZWZpbmUgTUlQSURfVkVSX0xQSDg5MjMJCTMK LSNkZWZpbmUgTUlQSURfVkVSX0xTMDQxWTMJCTQKLSNkZWZpbmUgTUlQSURfVkVSX0w0RjAwMzEx CQk4Ci0jZGVmaW5lIE1JUElEX1ZFUl9BQ1g1NjVBS00JCTkKLQotc3RydWN0IHBhbmVsX2Rydl9k YXRhIHsKLQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlCWRzc2RldjsKLQotCXN0cnVjdCBncGlvX2Rl c2MgKnJlc2V0X2dwaW87Ci0KLQlzdHJ1Y3QgdmlkZW9tb2RlIHZtOwotCi0JY2hhcgkJKm5hbWU7 Ci0JaW50CQllbmFibGVkOwotCWludAkJbW9kZWw7Ci0JaW50CQlyZXZpc2lvbjsKLQl1OAkJZGlz cGxheV9pZFszXTsKLQl1bnNpZ25lZAloYXNfYmM6MTsKLQl1bnNpZ25lZAloYXNfY2FiYzoxOwot CXVuc2lnbmVkCWNhYmNfbW9kZTsKLQl1bnNpZ25lZCBsb25nCWh3X2d1YXJkX2VuZDsJCS8qIG5l eHQgdmFsdWUgb2YgamlmZmllcwotCQkJCQkJICAgd2hlbiB3ZSBjYW4gaXNzdWUgdGhlCi0JCQkJ CQkgICBuZXh0IHNsZWVwIGluL291dCBjb21tYW5kICovCi0JdW5zaWduZWQgbG9uZwlod19ndWFy ZF93YWl0OwkJLyogbWF4IGd1YXJkIHRpbWUgaW4gamlmZmllcyAqLwotCi0Jc3RydWN0IHNwaV9k ZXZpY2UJKnNwaTsKLQlzdHJ1Y3QgbXV0ZXgJCW11dGV4OwotCi0Jc3RydWN0IGJhY2tsaWdodF9k ZXZpY2UgKmJsX2RldjsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9tb2RlIGFjeDU2 NWFrbV9wYW5lbF92bSA9IHsKLQkuaGFjdGl2ZQk9IDgwMCwKLQkudmFjdGl2ZQk9IDQ4MCwKLQku cGl4ZWxjbG9jawk9IDI0MDAwMDAwLAotCS5oZnJvbnRfcG9yY2gJPSAyOCwKLQkuaHN5bmNfbGVu CT0gNCwKLQkuaGJhY2tfcG9yY2gJPSAyNCwKLQkudmZyb250X3BvcmNoCT0gMywKLQkudnN5bmNf bGVuCT0gMywKLQkudmJhY2tfcG9yY2gJPSA0LAotCi0JLmZsYWdzCQk9IERJU1BMQVlfRkxBR1Nf SFNZTkNfTE9XIHwgRElTUExBWV9GTEFHU19WU1lOQ19MT1csCi19OwotCi0jZGVmaW5lIHRvX3Bh bmVsX2RhdGEocCkgY29udGFpbmVyX29mKHAsIHN0cnVjdCBwYW5lbF9kcnZfZGF0YSwgZHNzZGV2 KQotCi1zdGF0aWMgdm9pZCBhY3g1NjVha21fdHJhbnNmZXIoc3RydWN0IHBhbmVsX2Rydl9kYXRh ICpkZGF0YSwgaW50IGNtZCwKLQkJCSAgICAgIGNvbnN0IHU4ICp3YnVmLCBpbnQgd2xlbiwgdTgg KnJidWYsIGludCBybGVuKQotewotCXN0cnVjdCBzcGlfbWVzc2FnZQltOwotCXN0cnVjdCBzcGlf dHJhbnNmZXIJKngsIHhmZXJbNV07Ci0JaW50CQkJcjsKLQotCUJVR19PTihkZGF0YS0+c3BpID09 IE5VTEwpOwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0KLQltZW1zZXQoeGZlciwgMCwgc2l6 ZW9mKHhmZXIpKTsKLQl4ID0gJnhmZXJbMF07Ci0KLQljbWQgJj0gIDB4ZmY7Ci0JeC0+dHhfYnVm ID0gJmNtZDsKLQl4LT5iaXRzX3Blcl93b3JkID0gOTsKLQl4LT5sZW4gPSAyOwotCi0JaWYgKHJs ZW4gPiAxICYmIHdsZW4gPT0gMCkgewotCQkvKgotCQkgKiBCZXR3ZWVuIHRoZSBjb21tYW5kIGFu ZCB0aGUgcmVzcG9uc2UgZGF0YSB0aGVyZSBpcyBhCi0JCSAqIGR1bW15IGNsb2NrIGN5Y2xlLiBB ZGQgYW4gZXh0cmEgYml0IGFmdGVyIHRoZSBjb21tYW5kCi0JCSAqIHdvcmQgdG8gYWNjb3VudCBm b3IgdGhpcy4KLQkJICovCi0JCXgtPmJpdHNfcGVyX3dvcmQgPSAxMDsKLQkJY21kIDw8PSAxOwot CX0KLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCAmbSk7Ci0KLQlpZiAod2xlbikgewotCQl4Kys7 Ci0JCXgtPnR4X2J1ZiA9IHdidWY7Ci0JCXgtPmxlbiA9IHdsZW47Ci0JCXgtPmJpdHNfcGVyX3dv cmQgPSA5OwotCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCAmbSk7Ci0JfQotCi0JaWYgKHJsZW4p IHsKLQkJeCsrOwotCQl4LT5yeF9idWYJPSByYnVmOwotCQl4LT5sZW4JCT0gcmxlbjsKLQkJc3Bp X21lc3NhZ2VfYWRkX3RhaWwoeCwgJm0pOwotCX0KLQotCXIgPSBzcGlfc3luYyhkZGF0YS0+c3Bp LCAmbSk7Ci0JaWYgKHIgPCAwKQotCQlkZXZfZGJnKCZkZGF0YS0+c3BpLT5kZXYsICJzcGlfc3lu YyAlZFxuIiwgcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhY3g1NjVha21fY21kKHN0cnVj dCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEsIGludCBjbWQpCi17Ci0JYWN4NTY1YWttX3RyYW5zZmVy KGRkYXRhLCBjbWQsIE5VTEwsIDAsIE5VTEwsIDApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQg YWN4NTY1YWttX3dyaXRlKHN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEsCi0JCQkgICAgICAg aW50IHJlZywgY29uc3QgdTggKmJ1ZiwgaW50IGxlbikKLXsKLQlhY3g1NjVha21fdHJhbnNmZXIo ZGRhdGEsIHJlZywgYnVmLCBsZW4sIE5VTEwsIDApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQg YWN4NTY1YWttX3JlYWQoc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSwKLQkJCSAgICAgIGlu dCByZWcsIHU4ICpidWYsIGludCBsZW4pCi17Ci0JYWN4NTY1YWttX3RyYW5zZmVyKGRkYXRhLCBy ZWcsIE5VTEwsIDAsIGJ1ZiwgbGVuKTsKLX0KLQotc3RhdGljIHZvaWQgaHdfZ3VhcmRfc3RhcnQo c3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSwgaW50IGd1YXJkX21zZWMpCi17Ci0JZGRhdGEt Pmh3X2d1YXJkX3dhaXQgPSBtc2Vjc190b19qaWZmaWVzKGd1YXJkX21zZWMpOwotCWRkYXRhLT5o d19ndWFyZF9lbmQgPSBqaWZmaWVzICsgZGRhdGEtPmh3X2d1YXJkX3dhaXQ7Ci19Ci0KLXN0YXRp YyB2b2lkIGh3X2d1YXJkX3dhaXQoc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSkKLXsKLQl1 bnNpZ25lZCBsb25nIHdhaXQgPSBkZGF0YS0+aHdfZ3VhcmRfZW5kIC0gamlmZmllczsKLQotCWlm ICgobG9uZyl3YWl0ID4gMCAmJiB3YWl0IDw9IGRkYXRhLT5od19ndWFyZF93YWl0KSB7Ci0JCXNl dF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJc2NoZWR1bGVfdGltZW91 dCh3YWl0KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9zbGVlcF9tb2RlKHN0cnVjdCBwYW5l bF9kcnZfZGF0YSAqZGRhdGEsIGludCBvbikKLXsKLQlpbnQgY21kOwotCi0JaWYgKG9uKQotCQlj bWQgPSBNSVBJRF9DTURfU0xFRVBfSU47Ci0JZWxzZQotCQljbWQgPSBNSVBJRF9DTURfU0xFRVBf T1VUOwotCS8qCi0JICogV2UgaGF2ZSB0byBrZWVwIDEyMG1zZWMgYmV0d2VlbiBzbGVlcCBpbi9v dXQgY29tbWFuZHMuCi0JICogKDguMi4xNSwgOC4yLjE2KS4KLQkgKi8KLQlod19ndWFyZF93YWl0 KGRkYXRhKTsKLQlhY3g1NjVha21fY21kKGRkYXRhLCBjbWQpOwotCWh3X2d1YXJkX3N0YXJ0KGRk YXRhLCAxMjApOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfZGlzcGxheV9zdGF0ZShzdHJ1Y3QgcGFu ZWxfZHJ2X2RhdGEgKmRkYXRhLCBpbnQgZW5hYmxlZCkKLXsKLQlpbnQgY21kID0gZW5hYmxlZCA/ IE1JUElEX0NNRF9ESVNQX09OIDogTUlQSURfQ01EX0RJU1BfT0ZGOwotCi0JYWN4NTY1YWttX2Nt ZChkZGF0YSwgY21kKTsKLX0KLQotc3RhdGljIGludCBwYW5lbF9lbmFibGVkKHN0cnVjdCBwYW5l bF9kcnZfZGF0YSAqZGRhdGEpCi17Ci0JX19iZTMyIHY7Ci0JdTMyIGRpc3Bfc3RhdHVzOwotCWlu dCBlbmFibGVkOwotCi0JYWN4NTY1YWttX3JlYWQoZGRhdGEsIE1JUElEX0NNRF9SRUFEX0RJU1Bf U1RBVFVTLCAodTggKikmdiwgNCk7Ci0JZGlzcF9zdGF0dXMgPSBfX2JlMzJfdG9fY3B1KHYpOwot CWVuYWJsZWQgPSAoZGlzcF9zdGF0dXMgJiAoMSA8PCAxNykpICYmIChkaXNwX3N0YXR1cyAmICgx IDw8IDEwKSk7Ci0JZGV2X2RiZygmZGRhdGEtPnNwaS0+ZGV2LAotCQkiTENEIHBhbmVsICVzZW5h YmxlZCBieSBib290bG9hZGVyIChzdGF0dXMgMHglMDR4KVxuIiwKLQkJZW5hYmxlZCA/ICIiIDog Im5vdCAiLCBkaXNwX3N0YXR1cyk7Ci0JcmV0dXJuIGVuYWJsZWQ7Ci19Ci0KLXN0YXRpYyBpbnQg cGFuZWxfZGV0ZWN0KHN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEpCi17Ci0JYWN4NTY1YWtt X3JlYWQoZGRhdGEsIE1JUElEX0NNRF9SRUFEX0RJU1BfSUQsIGRkYXRhLT5kaXNwbGF5X2lkLCAz KTsKLQlkZXZfZGJnKCZkZGF0YS0+c3BpLT5kZXYsICJNSVBJIGRpc3BsYXkgSUQ6ICUwMnglMDJ4 JTAyeFxuIiwKLQkJZGRhdGEtPmRpc3BsYXlfaWRbMF0sCi0JCWRkYXRhLT5kaXNwbGF5X2lkWzFd LAotCQlkZGF0YS0+ZGlzcGxheV9pZFsyXSk7Ci0KLQlzd2l0Y2ggKGRkYXRhLT5kaXNwbGF5X2lk WzBdKSB7Ci0JY2FzZSAweDEwOgotCQlkZGF0YS0+bW9kZWwgPSBNSVBJRF9WRVJfQUNYNTY1QUtN OwotCQlkZGF0YS0+bmFtZSA9ICJhY3g1NjVha20iOwotCQlkZGF0YS0+aGFzX2JjID0gMTsKLQkJ ZGRhdGEtPmhhc19jYWJjID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSAweDI5OgotCQlkZGF0YS0+bW9k ZWwgPSBNSVBJRF9WRVJfTDRGMDAzMTE7Ci0JCWRkYXRhLT5uYW1lID0gImw0ZjAwMzExIjsKLQkJ YnJlYWs7Ci0JY2FzZSAweDQ1OgotCQlkZGF0YS0+bW9kZWwgPSBNSVBJRF9WRVJfTFBIODkyMzsK LQkJZGRhdGEtPm5hbWUgPSAibHBoODkyMyI7Ci0JCWJyZWFrOwotCWNhc2UgMHg4MzoKLQkJZGRh dGEtPm1vZGVsID0gTUlQSURfVkVSX0xTMDQxWTM7Ci0JCWRkYXRhLT5uYW1lID0gImxzMDQxeTMi OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkZGF0YS0+bmFtZSA9ICJ1bmtub3duIjsKLQkJZGV2 X2VycigmZGRhdGEtPnNwaS0+ZGV2LCAiaW52YWxpZCBkaXNwbGF5IElEXG4iKTsKLQkJcmV0dXJu IC1FTk9ERVY7Ci0JfQotCi0JZGRhdGEtPnJldmlzaW9uID0gZGRhdGEtPmRpc3BsYXlfaWRbMV07 Ci0KLQlkZXZfaW5mbygmZGRhdGEtPnNwaS0+ZGV2LCAib21hcGZiOiAlcyByZXYgJTAyeCBMQ0Qg ZGV0ZWN0ZWRcbiIsCi0JCQlkZGF0YS0+bmFtZSwgZGRhdGEtPnJldmlzaW9uKTsKLQotCXJldHVy biAwOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS1CYWNrbGlnaHQgQ29udHJvbC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgdm9pZCBlbmFibGVfYmFja2xpZ2h0X2N0 cmwoc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSwgaW50IGVuYWJsZSkKLXsKLQl1MTYgY3Ry bDsKLQotCWFjeDU2NWFrbV9yZWFkKGRkYXRhLCBNSVBJRF9DTURfUkVBRF9DVFJMX0RJU1AsICh1 OCAqKSZjdHJsLCAxKTsKLQlpZiAoZW5hYmxlKSB7Ci0JCWN0cmwgfD0gQ1RSTF9ESVNQX0JSSUdI VE5FU1NfQ1RSTF9PTiB8Ci0JCQlDVFJMX0RJU1BfQkFDS0xJR0hUX09OOwotCX0gZWxzZSB7Ci0J CWN0cmwgJj0gfihDVFJMX0RJU1BfQlJJR0hUTkVTU19DVFJMX09OIHwKLQkJCSAgQ1RSTF9ESVNQ X0JBQ0tMSUdIVF9PTik7Ci0JfQotCi0JY3RybCB8PSAxIDw8IDg7Ci0JYWN4NTY1YWttX3dyaXRl KGRkYXRhLCBNSVBJRF9DTURfV1JJVEVfQ1RSTF9ESVNQLCAodTggKikmY3RybCwgMik7Ci19Ci0K LXN0YXRpYyB2b2lkIHNldF9jYWJjX21vZGUoc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSwg dW5zaWduZWQgaW50IG1vZGUpCi17Ci0JdTE2IGNhYmNfY3RybDsKLQotCWRkYXRhLT5jYWJjX21v ZGUgPSBtb2RlOwotCWlmICghZGRhdGEtPmVuYWJsZWQpCi0JCXJldHVybjsKLQljYWJjX2N0cmwg PSAwOwotCWFjeDU2NWFrbV9yZWFkKGRkYXRhLCBNSVBJRF9DTURfUkVBRF9DQUJDLCAodTggKikm Y2FiY19jdHJsLCAxKTsKLQljYWJjX2N0cmwgJj0gfjM7Ci0JY2FiY19jdHJsIHw9ICgxIDw8IDgp IHwgKG1vZGUgJiAzKTsKLQlhY3g1NjVha21fd3JpdGUoZGRhdGEsIE1JUElEX0NNRF9XUklURV9D QUJDLCAodTggKikmY2FiY19jdHJsLCAyKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBnZXRf Y2FiY19tb2RlKHN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEpCi17Ci0JcmV0dXJuIGRkYXRh LT5jYWJjX21vZGU7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2h3X2NhYmNfbW9kZShz dHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhKQotewotCXU4IGNhYmNfY3RybDsKLQotCWFjeDU2 NWFrbV9yZWFkKGRkYXRhLCBNSVBJRF9DTURfUkVBRF9DQUJDLCAmY2FiY19jdHJsLCAxKTsKLQly ZXR1cm4gY2FiY19jdHJsICYgMzsKLX0KLQotc3RhdGljIHZvaWQgYWN4NTY1YWttX3NldF9icmln aHRuZXNzKHN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEsIGludCBsZXZlbCkKLXsKLQlpbnQg YnY7Ci0KLQlidiA9IGxldmVsIHwgKDEgPDwgOCk7Ci0JYWN4NTY1YWttX3dyaXRlKGRkYXRhLCBN SVBJRF9DTURfV1JJVEVfRElTUF9CUklHSFRORVNTLCAodTggKikmYnYsIDIpOwotCi0JaWYgKGxl dmVsKQotCQllbmFibGVfYmFja2xpZ2h0X2N0cmwoZGRhdGEsIDEpOwotCWVsc2UKLQkJZW5hYmxl X2JhY2tsaWdodF9jdHJsKGRkYXRhLCAwKTsKLX0KLQotc3RhdGljIGludCBhY3g1NjVha21fZ2V0 X2FjdHVhbF9icmlnaHRuZXNzKHN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEpCi17Ci0JdTgg YnY7Ci0KLQlhY3g1NjVha21fcmVhZChkZGF0YSwgTUlQSURfQ01EX1JFQURfRElTUF9CUklHSFRO RVNTLCAmYnYsIDEpOwotCi0JcmV0dXJuIGJ2OwotfQotCi0KLXN0YXRpYyBpbnQgYWN4NTY1YWtt X2JsX3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1 Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7Ci0J aW50IGxldmVsOwotCi0JZGV2X2RiZygmZGRhdGEtPnNwaS0+ZGV2LCAiJXNcbiIsIF9fZnVuY19f KTsKLQotCWlmIChkZXYtPnByb3BzLmZiX2JsYW5rID09IEZCX0JMQU5LX1VOQkxBTksgJiYKLQkJ CWRldi0+cHJvcHMucG93ZXIgPT0gRkJfQkxBTktfVU5CTEFOSykKLQkJbGV2ZWwgPSBkZXYtPnBy b3BzLmJyaWdodG5lc3M7Ci0JZWxzZQotCQlsZXZlbCA9IDA7Ci0KLQlpZiAoZGRhdGEtPmhhc19i YykKLQkJYWN4NTY1YWttX3NldF9icmlnaHRuZXNzKGRkYXRhLCBsZXZlbCk7Ci0JZWxzZQotCQly ZXR1cm4gLUVOT0RFVjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFjeDU2NWFrbV9i bF9nZXRfaW50ZW5zaXR5KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0 IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOwotCi0J ZGV2X2RiZygmZGV2LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwotCi0JaWYgKCFkZGF0YS0+aGFz X2JjKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChkZXYtPnByb3BzLmZiX2JsYW5rID09IEZC X0JMQU5LX1VOQkxBTksgJiYKLQkJCWRldi0+cHJvcHMucG93ZXIgPT0gRkJfQkxBTktfVU5CTEFO SykgewotCQlpZiAoZGRhdGEtPmhhc19iYykKLQkJCXJldHVybiBhY3g1NjVha21fZ2V0X2FjdHVh bF9icmlnaHRuZXNzKGRkYXRhKTsKLQkJZWxzZQotCQkJcmV0dXJuIGRldi0+cHJvcHMuYnJpZ2h0 bmVzczsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhY3g1NjVha21fYmxfdXBk YXRlX3N0YXR1c19sb2NrZWQoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1 Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7Ci0J aW50IHI7Ci0KLQltdXRleF9sb2NrKCZkZGF0YS0+bXV0ZXgpOwotCXIgPSBhY3g1NjVha21fYmxf dXBkYXRlX3N0YXR1cyhkZXYpOwotCW11dGV4X3VubG9jaygmZGRhdGEtPm11dGV4KTsKLQotCXJl dHVybiByOwotfQotCi1zdGF0aWMgaW50IGFjeDU2NWFrbV9ibF9nZXRfaW50ZW5zaXR5X2xvY2tl ZChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBwYW5lbF9kcnZfZGF0 YSAqZGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKLQlpbnQgcjsKLQotCW11dGV4 X2xvY2soJmRkYXRhLT5tdXRleCk7Ci0JciA9IGFjeDU2NWFrbV9ibF9nZXRfaW50ZW5zaXR5KGRl dik7Ci0JbXV0ZXhfdW5sb2NrKCZkZGF0YS0+bXV0ZXgpOwotCi0JcmV0dXJuIHI7Ci19Ci0KLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhY3g1NjVha21fYmxfb3BzID0gewotCS5n ZXRfYnJpZ2h0bmVzcyA9IGFjeDU2NWFrbV9ibF9nZXRfaW50ZW5zaXR5X2xvY2tlZCwKLQkudXBk YXRlX3N0YXR1cyAgPSBhY3g1NjVha21fYmxfdXBkYXRlX3N0YXR1c19sb2NrZWQsCi19OwotCi0v Ki0tLS0tLS0tLS0tLS0tLS0tLS0tQXV0byBCcmlnaHRuZXNzIGNvbnRyb2wgdmlhIFN5c2ZzLS0t LS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjYWJjX21v ZGVzW10gPSB7Ci0JIm9mZiIsCQkvKiBhbHdheXMgdXNlZCB3aGVuIENBQkMgaXMgbm90IHN1cHBv cnRlZCAqLwotCSJ1aSIsCi0JInN0aWxsLWltYWdlIiwKLQkibW92aW5nLWltYWdlIiwKLX07Ci0K LXN0YXRpYyBzc2l6ZV90IHNob3dfY2FiY19tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3Ry dWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcGFu ZWxfZHJ2X2RhdGEgKmRkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JY29uc3QgY2hhciAq bW9kZV9zdHI7Ci0JaW50IG1vZGU7Ci0JaW50IGxlbjsKLQotCWlmICghZGRhdGEtPmhhc19jYWJj KQotCQltb2RlID0gMDsKLQllbHNlCi0JCW1vZGUgPSBnZXRfY2FiY19tb2RlKGRkYXRhKTsKLQlt b2RlX3N0ciA9ICJ1bmtub3duIjsKLQlpZiAobW9kZSA+PSAwICYmIG1vZGUgPCBBUlJBWV9TSVpF KGNhYmNfbW9kZXMpKQotCQltb2RlX3N0ciA9IGNhYmNfbW9kZXNbbW9kZV07Ci0JbGVuID0gc25w cmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgbW9kZV9zdHIpOwotCi0JcmV0dXJuIGxlbiA8 IFBBR0VfU0laRSAtIDEgPyBsZW4gOiBQQUdFX1NJWkUgLSAxOwotfQotCi1zdGF0aWMgc3NpemVf dCBzdG9yZV9jYWJjX21vZGUoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0 dHJpYnV0ZSAqYXR0ciwKLQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3Ry dWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCBp OwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2FiY19tb2Rlcyk7IGkrKykgewotCQlj b25zdCBjaGFyICptb2RlX3N0ciA9IGNhYmNfbW9kZXNbaV07Ci0JCWludCBjbXBfbGVuID0gc3Ry bGVuKG1vZGVfc3RyKTsKLQotCQlpZiAoY291bnQgPiAwICYmIGJ1Zltjb3VudCAtIDFdID09ICdc bicpCi0JCQljb3VudC0tOwotCQlpZiAoY291bnQgIT0gY21wX2xlbikKLQkJCWNvbnRpbnVlOwot Ci0JCWlmIChzdHJuY21wKGJ1ZiwgbW9kZV9zdHIsIGNtcF9sZW4pID09IDApCi0JCQlicmVhazsK LQl9Ci0KLQlpZiAoaSA9PSBBUlJBWV9TSVpFKGNhYmNfbW9kZXMpKQotCQlyZXR1cm4gLUVJTlZB TDsKLQotCWlmICghZGRhdGEtPmhhc19jYWJjICYmIGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0KLQltdXRleF9sb2NrKCZkZGF0YS0+bXV0ZXgpOwotCXNldF9jYWJjX21vZGUoZGRhdGEsIGkp OwotCW11dGV4X3VubG9jaygmZGRhdGEtPm11dGV4KTsKLQotCXJldHVybiBjb3VudDsKLX0KLQot c3RhdGljIHNzaXplX3Qgc2hvd19jYWJjX2F2YWlsYWJsZV9tb2RlcyhzdHJ1Y3QgZGV2aWNlICpk ZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0J c3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlu dCBsZW47Ci0JaW50IGk7Ci0KLQlpZiAoIWRkYXRhLT5oYXNfY2FiYykKLQkJcmV0dXJuIHNucHJp bnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGNhYmNfbW9kZXNbMF0pOwotCi0JZm9yIChpID0g MCwgbGVuID0gMDsKLQkgICAgIGxlbiA8IFBBR0VfU0laRSAmJiBpIDwgQVJSQVlfU0laRShjYWJj X21vZGVzKTsgaSsrKQotCQlsZW4gKz0gc25wcmludGYoJmJ1ZltsZW5dLCBQQUdFX1NJWkUgLSBs ZW4sICIlcyVzJXMiLAotCQkJaSA/ICIgIiA6ICIiLCBjYWJjX21vZGVzW2ldLAotCQkJaSA9PSBB UlJBWV9TSVpFKGNhYmNfbW9kZXMpIC0gMSA/ICJcbiIgOiAiIik7Ci0KLQlyZXR1cm4gbGVuIDwg UEFHRV9TSVpFID8gbGVuIDogUEFHRV9TSVpFIC0gMTsKLX0KLQotc3RhdGljIERFVklDRV9BVFRS KGNhYmNfbW9kZSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCXNob3dfY2FiY19tb2RlLCBzdG9yZV9j YWJjX21vZGUpOwotc3RhdGljIERFVklDRV9BVFRSKGNhYmNfYXZhaWxhYmxlX21vZGVzLCBTX0lS VUdPLAotCQlzaG93X2NhYmNfYXZhaWxhYmxlX21vZGVzLCBOVUxMKTsKLQotc3RhdGljIHN0cnVj dCBhdHRyaWJ1dGUgKmJsZGV2X2F0dHJzW10gPSB7Ci0JJmRldl9hdHRyX2NhYmNfbW9kZS5hdHRy LAotCSZkZXZfYXR0cl9jYWJjX2F2YWlsYWJsZV9tb2Rlcy5hdHRyLAotCU5VTEwsCi19OwotCi1z dGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBibGRldl9hdHRyX2dyb3VwID0gewot CS5hdHRycyA9IGJsZGV2X2F0dHJzLAotfTsKLQotc3RhdGljIGludCBhY3g1NjVha21fY29ubmVj dChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpzcmMsCi0JCQkgICAgIHN0cnVjdCBvbWFwX2Rzc19k ZXZpY2UgKmRzdCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYWN4NTY1YWttX2Rp c2Nvbm5lY3Qoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqc3JjLAotCQkJCSBzdHJ1Y3Qgb21hcF9k c3NfZGV2aWNlICpkc3QpCi17Ci19Ci0KLXN0YXRpYyBpbnQgYWN4NTY1YWttX3BhbmVsX3Bvd2Vy X29uKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2 X2RhdGEgKmRkYXRhID0gdG9fcGFuZWxfZGF0YShkc3NkZXYpOwotCi0JZGV2X2RiZygmZGRhdGEt PnNwaS0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQotCS8qRklYTUUgdHdlYWsgbWUgKi8KLQlt c2xlZXAoNTApOwotCi0JaWYgKGRkYXRhLT5yZXNldF9ncGlvKQotCQlncGlvZF9zZXRfdmFsdWUo ZGRhdGEtPnJlc2V0X2dwaW8sIDEpOwotCi0JaWYgKGRkYXRhLT5lbmFibGVkKSB7Ci0JCWRldl9k YmcoJmRkYXRhLT5zcGktPmRldiwgInBhbmVsIGFscmVhZHkgZW5hYmxlZFxuIik7Ci0JCXJldHVy biAwOwotCX0KLQotCS8qCi0JICogV2UgaGF2ZSB0byBtZWV0IGFsbCB0aGUgZm9sbG93aW5nIGRl bGF5IHJlcXVpcmVtZW50czoKLQkgKiAxLiB0Ulc6IHJlc2V0IHB1bHNlIHdpZHRoIDEwdXNlYyAo Ny4xMi4xKQotCSAqIDIuIHRSVDogcmVzZXQgY2FuY2VsIHRpbWUgNW1zZWMgKDcuMTIuMSkKLQkg KiAzLiBQcm92aWRpbmcgUENMSyxIUyxWUyBzaWduYWxzIGZvciAyIGZyYW1lcyA9IH41MG1zZWMg d29yc3QKLQkgKiAgICBjYXNlICg3LjYuMikKLQkgKiA0LiAxMjBtc2VjIGJlZm9yZSB0aGUgc2xl ZXAgb3V0IGNvbW1hbmQgKDcuMTIuMSkKLQkgKi8KLQltc2xlZXAoMTIwKTsKLQotCXNldF9zbGVl cF9tb2RlKGRkYXRhLCAwKTsKLQlkZGF0YS0+ZW5hYmxlZCA9IDE7Ci0KLQkvKiA1bXNlYyBiZXR3 ZWVuIHNsZWVwIG91dCBhbmQgdGhlIG5leHQgY29tbWFuZC4gKDguMi4xNikgKi8KLQl1c2xlZXBf cmFuZ2UoNTAwMCwgMTAwMDApOwotCXNldF9kaXNwbGF5X3N0YXRlKGRkYXRhLCAxKTsKLQlzZXRf Y2FiY19tb2RlKGRkYXRhLCBkZGF0YS0+Y2FiY19tb2RlKTsKLQotCXJldHVybiBhY3g1NjVha21f YmxfdXBkYXRlX3N0YXR1cyhkZGF0YS0+YmxfZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgYWN4NTY1 YWttX3BhbmVsX3Bvd2VyX29mZihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0J c3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IHRvX3BhbmVsX2RhdGEoZHNzZGV2KTsKLQot CWRldl9kYmcoZHNzZGV2LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwotCi0JaWYgKCFkZGF0YS0+ ZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0Jc2V0X2Rpc3BsYXlfc3RhdGUoZGRhdGEsIDApOwotCXNl dF9zbGVlcF9tb2RlKGRkYXRhLCAxKTsKLQlkZGF0YS0+ZW5hYmxlZCA9IDA7Ci0JLyoKLQkgKiBX ZSBoYXZlIHRvIHByb3ZpZGUgUENMSyxIUyxWUyBzaWduYWxzIGZvciAyIGZyYW1lcyAod29yc3Qg Y2FzZQotCSAqIH41MG1zZWMpIGFmdGVyIHNlbmRpbmcgdGhlIHNsZWVwIGluIGNvbW1hbmQgYW5k IGFzc2VydGluZyB0aGUKLQkgKiByZXNldCBzaWduYWwuIFdlIHByb2JhYmx5IGNvdWxkIGFzc2Vy dCB0aGUgcmVzZXQgdy9vIHRoZSBkZWxheQotCSAqIGJ1dCB3ZSBzdGlsbCBkZWxheSB0byBhdm9p ZCBwb3NzaWJsZSBhcnRpZmFjdHMuICg3LjYuMSkKLQkgKi8KLQltc2xlZXAoNTApOwotCi0JaWYg KGRkYXRhLT5yZXNldF9ncGlvKQotCQlncGlvZF9zZXRfdmFsdWUoZGRhdGEtPnJlc2V0X2dwaW8s IDApOwotCi0JLyogRklYTUUgbmVlZCB0byB0d2VhayB0aGlzIGRlbGF5ICovCi0JbXNsZWVwKDEw MCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFjeDU2NWFrbV9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2Rl dmljZSAqZHNzZGV2KQotewotCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSB0b19wYW5l bF9kYXRhKGRzc2Rldik7Ci0KLQltdXRleF9sb2NrKCZkZGF0YS0+bXV0ZXgpOwotCWFjeDU2NWFr bV9wYW5lbF9wb3dlcl9vbihkc3NkZXYpOwotCW11dGV4X3VubG9jaygmZGRhdGEtPm11dGV4KTsK LX0KLQotc3RhdGljIHZvaWQgYWN4NTY1YWttX2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2Rldmlj ZSAqZHNzZGV2KQotewotCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSB0b19wYW5lbF9k YXRhKGRzc2Rldik7Ci0KLQltdXRleF9sb2NrKCZkZGF0YS0+bXV0ZXgpOwotCWFjeDU2NWFrbV9w YW5lbF9wb3dlcl9vZmYoZHNzZGV2KTsKLQltdXRleF91bmxvY2soJmRkYXRhLT5tdXRleCk7Ci19 Ci0KLXN0YXRpYyBpbnQgYWN4NTY1YWttX2dldF9tb2RlcyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNl ICpkc3NkZXYsCi0JCQkgICAgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsK LQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gdG9fcGFuZWxfZGF0YShkc3NkZXYpOwot Ci0JcmV0dXJuIG9tYXBkc3NfZGlzcGxheV9nZXRfbW9kZXMoY29ubmVjdG9yLCAmZGRhdGEtPnZt KTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvbWFwX2Rzc19kZXZpY2Vfb3BzIGFjeDU2NWFr bV9vcHMgPSB7Ci0JLmNvbm5lY3QJPSBhY3g1NjVha21fY29ubmVjdCwKLQkuZGlzY29ubmVjdAk9 IGFjeDU2NWFrbV9kaXNjb25uZWN0LAotCi0JLmVuYWJsZQkJPSBhY3g1NjVha21fZW5hYmxlLAot CS5kaXNhYmxlCT0gYWN4NTY1YWttX2Rpc2FibGUsCi0KLQkuZ2V0X21vZGVzCT0gYWN4NTY1YWtt X2dldF9tb2RlcywKLX07Ci0KLXN0YXRpYyBpbnQgYWN4NTY1YWttX3Byb2JlKHN0cnVjdCBzcGlf ZGV2aWNlICpzcGkpCi17Ci0Jc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YTsKLQlzdHJ1Y3Qg b21hcF9kc3NfZGV2aWNlICpkc3NkZXY7Ci0Jc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsZGV2 OwotCWludCBtYXhfYnJpZ2h0bmVzcywgYnJpZ2h0bmVzczsKLQlzdHJ1Y3QgYmFja2xpZ2h0X3By b3BlcnRpZXMgcHJvcHM7Ci0Jc3RydWN0IGdwaW9fZGVzYyAqZ3BpbzsKLQlpbnQgcjsKLQotCWRl dl9kYmcoJnNwaS0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQotCXNwaS0+bW9kZSA9IFNQSV9N T0RFXzM7Ci0KLQlkZGF0YSA9IGRldm1fa3phbGxvYygmc3BpLT5kZXYsIHNpemVvZigqZGRhdGEp LCBHRlBfS0VSTkVMKTsKLQlpZiAoZGRhdGEgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0K LQlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBkZGF0YSk7Ci0KLQlkZGF0YS0+c3BpID0gc3Bp OwotCi0JbXV0ZXhfaW5pdCgmZGRhdGEtPm11dGV4KTsKLQotCWdwaW8gPSBkZXZtX2dwaW9kX2dl dF9vcHRpb25hbCgmc3BpLT5kZXYsICJyZXNldCIsIEdQSU9EX09VVF9MT1cpOwotCWlmIChJU19F UlIoZ3BpbykpIHsKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gcGFyc2UgcmVzZXQg Z3Bpb1xuIik7Ci0JCXJldHVybiBQVFJfRVJSKGdwaW8pOwotCX0KLQotCWRkYXRhLT5yZXNldF9n cGlvID0gZ3BpbzsKLQotCWlmIChkZGF0YS0+cmVzZXRfZ3BpbykKLQkJZ3Bpb2Rfc2V0X3ZhbHVl KGRkYXRhLT5yZXNldF9ncGlvLCAxKTsKLQotCS8qCi0JICogQWZ0ZXIgcmVzZXQgd2UgaGF2ZSB0 byB3YWl0IDUgbXNlYyBiZWZvcmUgdGhlIGZpcnN0Ci0JICogY29tbWFuZCBjYW4gYmUgc2VudC4K LQkgKi8KLQl1c2xlZXBfcmFuZ2UoNTAwMCwgMTAwMDApOwotCi0JZGRhdGEtPmVuYWJsZWQgPSBw YW5lbF9lbmFibGVkKGRkYXRhKTsKLQotCXIgPSBwYW5lbF9kZXRlY3QoZGRhdGEpOwotCi0JaWYg KCFkZGF0YS0+ZW5hYmxlZCAmJiBkZGF0YS0+cmVzZXRfZ3BpbykKLQkJZ3Bpb2Rfc2V0X3ZhbHVl KGRkYXRhLT5yZXNldF9ncGlvLCAwKTsKLQotCWlmIChyKSB7Ci0JCWRldl9lcnIoJnNwaS0+ZGV2 LCAiJXMgcGFuZWwgZGV0ZWN0IGVycm9yXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiByOwotCX0K LQotCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihwcm9wcykpOwotCXByb3BzLmZiX2JsYW5rID0g RkJfQkxBTktfVU5CTEFOSzsKLQlwcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7Ci0JcHJv cHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7Ci0KLQlibGRldiA9IGJhY2tsaWdodF9kZXZpY2VfcmVn aXN0ZXIoImFjeDU2NWFrbSIsICZkZGF0YS0+c3BpLT5kZXYsCi0JCQlkZGF0YSwgJmFjeDU2NWFr bV9ibF9vcHMsICZwcm9wcyk7Ci0JaWYgKElTX0VSUihibGRldikpCi0JCXJldHVybiBQVFJfRVJS KGJsZGV2KTsKLQlkZGF0YS0+YmxfZGV2ID0gYmxkZXY7Ci0JaWYgKGRkYXRhLT5oYXNfY2FiYykg ewotCQlyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZibGRldi0+ZGV2LmtvYmosICZibGRldl9hdHRy X2dyb3VwKTsKLQkJaWYgKHIpIHsKLQkJCWRldl9lcnIoJmJsZGV2LT5kZXYsCi0JCQkJIiVzIGZh aWxlZCB0byBjcmVhdGUgc3lzZnMgZmlsZXNcbiIsIF9fZnVuY19fKTsKLQkJCWdvdG8gZXJyX2Jh Y2tsaWdodF91bnJlZ2lzdGVyOwotCQl9Ci0JCWRkYXRhLT5jYWJjX21vZGUgPSBnZXRfaHdfY2Fi Y19tb2RlKGRkYXRhKTsKLQl9Ci0KLQltYXhfYnJpZ2h0bmVzcyA9IDI1NTsKLQotCWlmIChkZGF0 YS0+aGFzX2JjKQotCQlicmlnaHRuZXNzID0gYWN4NTY1YWttX2dldF9hY3R1YWxfYnJpZ2h0bmVz cyhkZGF0YSk7Ci0JZWxzZQotCQlicmlnaHRuZXNzID0gMDsKLQotCWJsZGV2LT5wcm9wcy5tYXhf YnJpZ2h0bmVzcyA9IG1heF9icmlnaHRuZXNzOwotCWJsZGV2LT5wcm9wcy5icmlnaHRuZXNzID0g YnJpZ2h0bmVzczsKLQotCWFjeDU2NWFrbV9ibF91cGRhdGVfc3RhdHVzKGJsZGV2KTsKLQotCi0J ZGRhdGEtPnZtID0gYWN4NTY1YWttX3BhbmVsX3ZtOwotCi0JZHNzZGV2ID0gJmRkYXRhLT5kc3Nk ZXY7Ci0JZHNzZGV2LT5kZXYgPSAmc3BpLT5kZXY7Ci0JZHNzZGV2LT5vcHMgPSAmYWN4NTY1YWtt X29wczsKLQlkc3NkZXYtPnR5cGUgPSBPTUFQX0RJU1BMQVlfVFlQRV9TREk7Ci0JZHNzZGV2LT5k aXNwbGF5ID0gdHJ1ZTsKLQlkc3NkZXYtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JZHNzZGV2LT5v Zl9wb3J0cyA9IEJJVCgwKTsKLQlkc3NkZXYtPm9wc19mbGFncyA9IE9NQVBfRFNTX0RFVklDRV9P UF9NT0RFUzsKLQlkc3NkZXYtPmJ1c19mbGFncyA9IERSTV9CVVNfRkxBR19ERV9ISUdICi0JCQkg IHwgRFJNX0JVU19GTEFHX1NZTkNfRFJJVkVfTkVHRURHRQotCQkJICB8IERSTV9CVVNfRkxBR19Q SVhEQVRBX0RSSVZFX1BPU0VER0U7Ci0KLQlvbWFwZHNzX2Rpc3BsYXlfaW5pdChkc3NkZXYpOwot CW9tYXBkc3NfZGV2aWNlX3JlZ2lzdGVyKGRzc2Rldik7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2Jh Y2tsaWdodF91bnJlZ2lzdGVyOgotCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihibGRldik7 Ci0JcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyBpbnQgYWN4NTY1YWttX3JlbW92ZShzdHJ1Y3Qgc3Bp X2RldmljZSAqc3BpKQotewotCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSBkZXZfZ2V0 X2RydmRhdGEoJnNwaS0+ZGV2KTsKLQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYgPSAm ZGRhdGEtPmRzc2RldjsKLQotCWRldl9kYmcoJmRkYXRhLT5zcGktPmRldiwgIiVzXG4iLCBfX2Z1 bmNfXyk7Ci0KLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRkYXRhLT5ibF9kZXYtPmRldi5rb2JqLCAm YmxkZXZfYXR0cl9ncm91cCk7Ci0JYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGRkYXRhLT5i bF9kZXYpOwotCi0Jb21hcGRzc19kZXZpY2VfdW5yZWdpc3Rlcihkc3NkZXYpOwotCi0JaWYgKG9t YXBkc3NfZGV2aWNlX2lzX2VuYWJsZWQoZHNzZGV2KSkKLQkJYWN4NTY1YWttX2Rpc2FibGUoZHNz ZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCBhY3g1NjVha21fb2ZfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gIm9tYXBkc3Msc29u eSxhY3g1NjVha20iLCB9LAotCXt9LAotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFjeDU2 NWFrbV9vZl9tYXRjaCk7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBhY3g1NjVha21fZHJp dmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCT0gImFjeDU2NWFrbSIsCi0JCS5vZl9tYXRj aF90YWJsZSA9IGFjeDU2NWFrbV9vZl9tYXRjaCwKLQkJLnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0 cnVlLAotCX0sCi0JLnByb2JlCT0gYWN4NTY1YWttX3Byb2JlLAotCS5yZW1vdmUJPSBhY3g1NjVh a21fcmVtb3ZlLAotfTsKLQotbW9kdWxlX3NwaV9kcml2ZXIoYWN4NTY1YWttX2RyaXZlcik7Ci0K LU1PRFVMRV9BTElBUygic3BpOnNvbnksYWN4NTY1YWttIik7Ci1NT0RVTEVfQVVUSE9SKCJOb2tp YSBDb3Jwb3JhdGlvbiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJhY3g1NjVha20gTENEIERyaXZl ciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L29tYXBkcm0vZGlzcGxheXMvcGFuZWwtdHBvLXRkMDI4dHRlYzEuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9vbWFwZHJtL2Rpc3BsYXlzL3BhbmVsLXRwby10ZDAyOHR0ZWMxLmMKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGM4ODUwMThhYzZjZS4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMv Z3B1L2RybS9vbWFwZHJtL2Rpc3BsYXlzL3BhbmVsLXRwby10ZDAyOHR0ZWMxLmMKKysrIC9kZXYv bnVsbApAQCAtMSwzOTAgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAtb25seQotLyoKLSAqIFRvcHBvbHkgVEQwMjhUVEVDMSBwYW5lbCBzdXBwb3J0Ci0gKgotICog Q29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCi0gKiBBdXRob3I6IFRvbWkgVmFs a2VpbmVuIDx0b21pLnZhbGtlaW5lbkB0aS5jb20+Ci0gKgotICogTmVvIDE5NzMgY29kZSAoamJ0 Nms3NC5jKToKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IGJ5IE9wZW5Nb2tvLCBJbmMuCi0g KiBBdXRob3I6IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBvcGVubW9rby5vcmc+Ci0gKgotICogUG9y dGVkIGFuZCBhZGFwdGVkIGZyb20gTmVvIDE5NzMgVS1Cb290IGJ5OgotICogSC4gTmlrb2xhdXMg U2NoYWxsZXIgPGhuc0Bnb2xkZWxpY28uY29tPgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGku aD4KLQotI2luY2x1ZGUgIi4uL2Rzcy9vbWFwZHNzLmgiCi0KLXN0cnVjdCBwYW5lbF9kcnZfZGF0 YSB7Ci0Jc3RydWN0IG9tYXBfZHNzX2RldmljZSBkc3NkZXY7Ci0KLQlzdHJ1Y3QgdmlkZW9tb2Rl IHZtOwotCi0Jc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodDsKLQotCXN0cnVjdCBz cGlfZGV2aWNlICpzcGlfZGV2OwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb21vZGUg dGQwMjh0dGVjMV9wYW5lbF92bSA9IHsKLQkuaGFjdGl2ZQk9IDQ4MCwKLQkudmFjdGl2ZQk9IDY0 MCwKLQkucGl4ZWxjbG9jawk9IDIyMTUzMDAwLAotCS5oZnJvbnRfcG9yY2gJPSAyNCwKLQkuaHN5 bmNfbGVuCT0gOCwKLQkuaGJhY2tfcG9yY2gJPSA4LAotCS52ZnJvbnRfcG9yY2gJPSA0LAotCS52 c3luY19sZW4JPSAyLAotCS52YmFja19wb3JjaAk9IDIsCi0KLQkuZmxhZ3MJCT0gRElTUExBWV9G TEFHU19IU1lOQ19MT1cgfCBESVNQTEFZX0ZMQUdTX1ZTWU5DX0xPVywKLX07Ci0KLSNkZWZpbmUg SkJUX0NPTU1BTkQJMHgwMDAKLSNkZWZpbmUgSkJUX0RBVEEJMHgxMDAKLQotc3RhdGljIGludCBq YnRfcmV0X3dyaXRlXzAoc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSwgdTggcmVnKQotewot CWludCByYzsKLQl1MTYgdHhfYnVmID0gSkJUX0NPTU1BTkQgfCByZWc7Ci0KLQlyYyA9IHNwaV93 cml0ZShkZGF0YS0+c3BpX2RldiwgKHU4ICopJnR4X2J1ZiwKLQkJCTEqc2l6ZW9mKHUxNikpOwot CWlmIChyYyAhPSAwKQotCQlkZXZfZXJyKCZkZGF0YS0+c3BpX2Rldi0+ZGV2LAotCQkJImpidF9y ZXRfd3JpdGVfMCBzcGlfd3JpdGUgcmV0ICVkXG4iLCByYyk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0K LXN0YXRpYyBpbnQgamJ0X3JlZ193cml0ZV8xKHN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEs IHU4IHJlZywgdTggZGF0YSkKLXsKLQlpbnQgcmM7Ci0JdTE2IHR4X2J1ZlsyXTsKLQotCXR4X2J1 ZlswXSA9IEpCVF9DT01NQU5EIHwgcmVnOwotCXR4X2J1ZlsxXSA9IEpCVF9EQVRBIHwgZGF0YTsK LQlyYyA9IHNwaV93cml0ZShkZGF0YS0+c3BpX2RldiwgKHU4ICopdHhfYnVmLAotCQkJMipzaXpl b2YodTE2KSk7Ci0JaWYgKHJjICE9IDApCi0JCWRldl9lcnIoJmRkYXRhLT5zcGlfZGV2LT5kZXYs Ci0JCQkiamJ0X3JlZ193cml0ZV8xIHNwaV93cml0ZSByZXQgJWRcbiIsIHJjKTsKLQotCXJldHVy biByYzsKLX0KLQotc3RhdGljIGludCBqYnRfcmVnX3dyaXRlXzIoc3RydWN0IHBhbmVsX2Rydl9k YXRhICpkZGF0YSwgdTggcmVnLCB1MTYgZGF0YSkKLXsKLQlpbnQgcmM7Ci0JdTE2IHR4X2J1Zlsz XTsKLQotCXR4X2J1ZlswXSA9IEpCVF9DT01NQU5EIHwgcmVnOwotCXR4X2J1ZlsxXSA9IEpCVF9E QVRBIHwgKGRhdGEgPj4gOCk7Ci0JdHhfYnVmWzJdID0gSkJUX0RBVEEgfCAoZGF0YSAmIDB4ZmYp OwotCi0JcmMgPSBzcGlfd3JpdGUoZGRhdGEtPnNwaV9kZXYsICh1OCAqKXR4X2J1ZiwKLQkJCTMq c2l6ZW9mKHUxNikpOwotCi0JaWYgKHJjICE9IDApCi0JCWRldl9lcnIoJmRkYXRhLT5zcGlfZGV2 LT5kZXYsCi0JCQkiamJ0X3JlZ193cml0ZV8yIHNwaV93cml0ZSByZXQgJWRcbiIsIHJjKTsKLQot CXJldHVybiByYzsKLX0KLQotZW51bSBqYnRfcmVnaXN0ZXIgewotCUpCVF9SRUdfU0xFRVBfSU4J CT0gMHgxMCwKLQlKQlRfUkVHX1NMRUVQX09VVAkJPSAweDExLAotCi0JSkJUX1JFR19ESVNQTEFZ X09GRgkJPSAweDI4LAotCUpCVF9SRUdfRElTUExBWV9PTgkJPSAweDI5LAotCi0JSkJUX1JFR19S R0JfRk9STUFUCQk9IDB4M2EsCi0JSkJUX1JFR19RVUFEX1JBVEUJCT0gMHgzYiwKLQotCUpCVF9S RUdfUE9XRVJfT05fT0ZGCQk9IDB4YjAsCi0JSkJUX1JFR19CT09TVEVSX09QCQk9IDB4YjEsCi0J SkJUX1JFR19CT09TVEVSX01PREUJCT0gMHhiMiwKLQlKQlRfUkVHX0JPT1NURVJfRlJFUQkJPSAw eGIzLAotCUpCVF9SRUdfT1BBTVBfU1lTQ0xLCQk9IDB4YjQsCi0JSkJUX1JFR19WU0NfVk9MVEFH RQkJPSAweGI1LAotCUpCVF9SRUdfVkNPTV9WT0xUQUdFCQk9IDB4YjYsCi0JSkJUX1JFR19FWFRf RElTUEwJCT0gMHhiNywKLQlKQlRfUkVHX09VVFBVVF9DT05UUk9MCQk9IDB4YjgsCi0JSkJUX1JF R19EQ0NMS19EQ0VWCQk9IDB4YjksCi0JSkJUX1JFR19ESVNQTEFZX01PREUxCQk9IDB4YmEsCi0J SkJUX1JFR19ESVNQTEFZX01PREUyCQk9IDB4YmIsCi0JSkJUX1JFR19ESVNQTEFZX01PREUJCT0g MHhiYywKLQlKQlRfUkVHX0FTV19TTEVXCQk9IDB4YmQsCi0JSkJUX1JFR19EVU1NWV9ESVNQTEFZ CQk9IDB4YmUsCi0JSkJUX1JFR19EUklWRV9TWVNURU0JCT0gMHhiZiwKLQotCUpCVF9SRUdfU0xF RVBfT1VUX0ZSX0EJCT0gMHhjMCwKLQlKQlRfUkVHX1NMRUVQX09VVF9GUl9CCQk9IDB4YzEsCi0J SkJUX1JFR19TTEVFUF9PVVRfRlJfQwkJPSAweGMyLAotCUpCVF9SRUdfU0xFRVBfSU5fTENDTlRf RAk9IDB4YzMsCi0JSkJUX1JFR19TTEVFUF9JTl9MQ0NOVF9FCT0gMHhjNCwKLQlKQlRfUkVHX1NM RUVQX0lOX0xDQ05UX0YJPSAweGM1LAotCUpCVF9SRUdfU0xFRVBfSU5fTENDTlRfRwk9IDB4YzYs Ci0KLQlKQlRfUkVHX0dBTU1BMV9GSU5FXzEJCT0gMHhjNywKLQlKQlRfUkVHX0dBTU1BMV9GSU5F XzIJCT0gMHhjOCwKLQlKQlRfUkVHX0dBTU1BMV9JTkNMSU5BVElPTgk9IDB4YzksCi0JSkJUX1JF R19HQU1NQTFfQkxVRV9PRkZTRVQJPSAweGNhLAotCi0JSkJUX1JFR19CTEFOS19DT05UUk9MCQk9 IDB4Y2YsCi0JSkJUX1JFR19CTEFOS19USF9UVgkJPSAweGQwLAotCUpCVF9SRUdfQ0tWX09OX09G RgkJPSAweGQxLAotCUpCVF9SRUdfQ0tWXzFfMgkJCT0gMHhkMiwKLQlKQlRfUkVHX09FVl9USU1J TkcJCT0gMHhkMywKLQlKQlRfUkVHX0FTV19USU1JTkdfMQkJPSAweGQ0LAotCUpCVF9SRUdfQVNX X1RJTUlOR18yCQk9IDB4ZDUsCi0KLQlKQlRfUkVHX0hDTE9DS19WR0EJCT0gMHhlYywKLQlKQlRf UkVHX0hDTE9DS19RVkdBCQk9IDB4ZWQsCi19OwotCi0jZGVmaW5lIHRvX3BhbmVsX2RhdGEocCkg Y29udGFpbmVyX29mKHAsIHN0cnVjdCBwYW5lbF9kcnZfZGF0YSwgZHNzZGV2KQotCi1zdGF0aWMg aW50IHRkMDI4dHRlYzFfcGFuZWxfY29ubmVjdChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpzcmMs Ci0JCQkJICAgIHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzdCkKLXsKLQlyZXR1cm4gMDsKLX0K LQotc3RhdGljIHZvaWQgdGQwMjh0dGVjMV9wYW5lbF9kaXNjb25uZWN0KHN0cnVjdCBvbWFwX2Rz c19kZXZpY2UgKnNyYywKLQkJCQkJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHN0KQotewotfQot Ci1zdGF0aWMgdm9pZCB0ZDAyOHR0ZWMxX3BhbmVsX2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2 aWNlICpkc3NkZXYpCi17Ci0Jc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IHRvX3BhbmVs X2RhdGEoZHNzZGV2KTsKLQlpbnQgciA9IDA7Ci0KLQlkZXZfZGJnKGRzc2Rldi0+ZGV2LCAiJXM6 IHN0YXRlICVkXG4iLCBfX2Z1bmNfXywgZHNzZGV2LT5zdGF0ZSk7Ci0KLQkvKiB0aHJlZSB0aW1l cyBjb21tYW5kIHplcm8gKi8KLQlyIHw9IGpidF9yZXRfd3JpdGVfMChkZGF0YSwgMHgwMCk7Ci0J dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwotCXIgfD0gamJ0X3JldF93cml0ZV8wKGRkYXRhLCAw eDAwKTsKLQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7Ci0JciB8PSBqYnRfcmV0X3dyaXRlXzAo ZGRhdGEsIDB4MDApOwotCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKLQotCWlmIChyKSB7Ci0J CWRldl93YXJuKGRzc2Rldi0+ZGV2LCAiJXM6IHRyYW5zZmVyIGVycm9yXG4iLCBfX2Z1bmNfXyk7 Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBkZWVwIHN0YW5kYnkgb3V0ICovCi0JciB8PSBqYnRfcmVn X3dyaXRlXzEoZGRhdGEsIEpCVF9SRUdfUE9XRVJfT05fT0ZGLCAweDE3KTsKLQotCS8qIFJHQiBJ L0Ygb24sIFJBTSB3cml0ZSBvZmYsIFFWR0EgdGhyb3VnaCwgU0lHQ09OIGVuYWJsZSAqLwotCXIg fD0gamJ0X3JlZ193cml0ZV8xKGRkYXRhLCBKQlRfUkVHX0RJU1BMQVlfTU9ERSwgMHg4MCk7Ci0K LQkvKiBRdWFkIG1vZGUgb2ZmICovCi0JciB8PSBqYnRfcmVnX3dyaXRlXzEoZGRhdGEsIEpCVF9S RUdfUVVBRF9SQVRFLCAweDAwKTsKLQotCS8qIEFWREQgb24sIFhWREQgb24gKi8KLQlyIHw9IGpi dF9yZWdfd3JpdGVfMShkZGF0YSwgSkJUX1JFR19QT1dFUl9PTl9PRkYsIDB4MTYpOwotCi0JLyog T3V0cHV0IGNvbnRyb2wgKi8KLQlyIHw9IGpidF9yZWdfd3JpdGVfMihkZGF0YSwgSkJUX1JFR19P VVRQVVRfQ09OVFJPTCwgMHhmZmY5KTsKLQotCS8qIFNsZWVwIG1vZGUgb2ZmICovCi0JciB8PSBq YnRfcmV0X3dyaXRlXzAoZGRhdGEsIEpCVF9SRUdfU0xFRVBfT1VUKTsKLQotCS8qIGF0IHRoaXMg cG9pbnQgd2UgaGF2ZSBsaWtlIDUwJSBncmV5ICovCi0KLQkvKiBpbml0aWFsaXplIHJlZ2lzdGVy IHNldCAqLwotCXIgfD0gamJ0X3JlZ193cml0ZV8xKGRkYXRhLCBKQlRfUkVHX0RJU1BMQVlfTU9E RTEsIDB4MDEpOwotCXIgfD0gamJ0X3JlZ193cml0ZV8xKGRkYXRhLCBKQlRfUkVHX0RJU1BMQVlf TU9ERTIsIDB4MDApOwotCXIgfD0gamJ0X3JlZ193cml0ZV8xKGRkYXRhLCBKQlRfUkVHX1JHQl9G T1JNQVQsIDB4NjApOwotCXIgfD0gamJ0X3JlZ193cml0ZV8xKGRkYXRhLCBKQlRfUkVHX0RSSVZF X1NZU1RFTSwgMHgxMCk7Ci0JciB8PSBqYnRfcmVnX3dyaXRlXzEoZGRhdGEsIEpCVF9SRUdfQk9P U1RFUl9PUCwgMHg1Nik7Ci0JciB8PSBqYnRfcmVnX3dyaXRlXzEoZGRhdGEsIEpCVF9SRUdfQk9P U1RFUl9NT0RFLCAweDMzKTsKLQlyIHw9IGpidF9yZWdfd3JpdGVfMShkZGF0YSwgSkJUX1JFR19C T09TVEVSX0ZSRVEsIDB4MTEpOwotCXIgfD0gamJ0X3JlZ193cml0ZV8xKGRkYXRhLCBKQlRfUkVH X0JPT1NURVJfRlJFUSwgMHgxMSk7Ci0JciB8PSBqYnRfcmVnX3dyaXRlXzEoZGRhdGEsIEpCVF9S RUdfT1BBTVBfU1lTQ0xLLCAweDAyKTsKLQlyIHw9IGpidF9yZWdfd3JpdGVfMShkZGF0YSwgSkJU X1JFR19WU0NfVk9MVEFHRSwgMHgyYik7Ci0JciB8PSBqYnRfcmVnX3dyaXRlXzEoZGRhdGEsIEpC VF9SRUdfVkNPTV9WT0xUQUdFLCAweDQwKTsKLQlyIHw9IGpidF9yZWdfd3JpdGVfMShkZGF0YSwg SkJUX1JFR19FWFRfRElTUEwsIDB4MDMpOwotCXIgfD0gamJ0X3JlZ193cml0ZV8xKGRkYXRhLCBK QlRfUkVHX0RDQ0xLX0RDRVYsIDB4MDQpOwotCS8qCi0JICogZGVmYXVsdCBvZiAweDAyIGluIEpC VF9SRUdfQVNXX1NMRVcgcmVzcG9uc2libGUgZm9yIDcySHogcmVxdWlyZW1lbnQKLQkgKiB0byBh dm9pZCByZWQgLyBibHVlIGZsaWNrZXIKLQkgKi8KLQlyIHw9IGpidF9yZWdfd3JpdGVfMShkZGF0 YSwgSkJUX1JFR19BU1dfU0xFVywgMHgwNCk7Ci0JciB8PSBqYnRfcmVnX3dyaXRlXzEoZGRhdGEs IEpCVF9SRUdfRFVNTVlfRElTUExBWSwgMHgwMCk7Ci0KLQlyIHw9IGpidF9yZWdfd3JpdGVfMShk ZGF0YSwgSkJUX1JFR19TTEVFUF9PVVRfRlJfQSwgMHgxMSk7Ci0JciB8PSBqYnRfcmVnX3dyaXRl XzEoZGRhdGEsIEpCVF9SRUdfU0xFRVBfT1VUX0ZSX0IsIDB4MTEpOwotCXIgfD0gamJ0X3JlZ193 cml0ZV8xKGRkYXRhLCBKQlRfUkVHX1NMRUVQX09VVF9GUl9DLCAweDExKTsKLQlyIHw9IGpidF9y ZWdfd3JpdGVfMihkZGF0YSwgSkJUX1JFR19TTEVFUF9JTl9MQ0NOVF9ELCAweDIwNDApOwotCXIg fD0gamJ0X3JlZ193cml0ZV8yKGRkYXRhLCBKQlRfUkVHX1NMRUVQX0lOX0xDQ05UX0UsIDB4NjBj MCk7Ci0JciB8PSBqYnRfcmVnX3dyaXRlXzIoZGRhdGEsIEpCVF9SRUdfU0xFRVBfSU5fTENDTlRf RiwgMHgxMDIwKTsKLQlyIHw9IGpidF9yZWdfd3JpdGVfMihkZGF0YSwgSkJUX1JFR19TTEVFUF9J Tl9MQ0NOVF9HLCAweDYwYzApOwotCi0JciB8PSBqYnRfcmVnX3dyaXRlXzIoZGRhdGEsIEpCVF9S RUdfR0FNTUExX0ZJTkVfMSwgMHg1NTMzKTsKLQlyIHw9IGpidF9yZWdfd3JpdGVfMShkZGF0YSwg SkJUX1JFR19HQU1NQTFfRklORV8yLCAweDAwKTsKLQlyIHw9IGpidF9yZWdfd3JpdGVfMShkZGF0 YSwgSkJUX1JFR19HQU1NQTFfSU5DTElOQVRJT04sIDB4MDApOwotCXIgfD0gamJ0X3JlZ193cml0 ZV8xKGRkYXRhLCBKQlRfUkVHX0dBTU1BMV9CTFVFX09GRlNFVCwgMHgwMCk7Ci0KLQlyIHw9IGpi dF9yZWdfd3JpdGVfMihkZGF0YSwgSkJUX1JFR19IQ0xPQ0tfVkdBLCAweDFmMCk7Ci0JciB8PSBq YnRfcmVnX3dyaXRlXzEoZGRhdGEsIEpCVF9SRUdfQkxBTktfQ09OVFJPTCwgMHgwMik7Ci0JciB8 PSBqYnRfcmVnX3dyaXRlXzIoZGRhdGEsIEpCVF9SRUdfQkxBTktfVEhfVFYsIDB4MDgwNCk7Ci0K LQlyIHw9IGpidF9yZWdfd3JpdGVfMShkZGF0YSwgSkJUX1JFR19DS1ZfT05fT0ZGLCAweDAxKTsK LQlyIHw9IGpidF9yZWdfd3JpdGVfMihkZGF0YSwgSkJUX1JFR19DS1ZfMV8yLCAweDAwMDApOwot Ci0JciB8PSBqYnRfcmVnX3dyaXRlXzIoZGRhdGEsIEpCVF9SRUdfT0VWX1RJTUlORywgMHgwZDBl KTsKLQlyIHw9IGpidF9yZWdfd3JpdGVfMihkZGF0YSwgSkJUX1JFR19BU1dfVElNSU5HXzEsIDB4 MTFhNCk7Ci0JciB8PSBqYnRfcmVnX3dyaXRlXzEoZGRhdGEsIEpCVF9SRUdfQVNXX1RJTUlOR18y LCAweDBlKTsKLQotCXIgfD0gamJ0X3JldF93cml0ZV8wKGRkYXRhLCBKQlRfUkVHX0RJU1BMQVlf T04pOwotCi0JaWYgKHIpCi0JCWRldl9lcnIoZHNzZGV2LT5kZXYsICIlczogd3JpdGUgZXJyb3Jc biIsIF9fZnVuY19fKTsKLQotCWJhY2tsaWdodF9lbmFibGUoZGRhdGEtPmJhY2tsaWdodCk7Ci19 Ci0KLXN0YXRpYyB2b2lkIHRkMDI4dHRlYzFfcGFuZWxfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3Nf ZGV2aWNlICpkc3NkZXYpCi17Ci0Jc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IHRvX3Bh bmVsX2RhdGEoZHNzZGV2KTsKLQotCWJhY2tsaWdodF9kaXNhYmxlKGRkYXRhLT5iYWNrbGlnaHQp OwotCi0JZGV2X2RiZyhkc3NkZXYtPmRldiwgInRkMDI4dHRlYzFfcGFuZWxfZGlzYWJsZSgpXG4i KTsKLQotCWpidF9yZXRfd3JpdGVfMChkZGF0YSwgSkJUX1JFR19ESVNQTEFZX09GRik7Ci0JamJ0 X3JlZ193cml0ZV8yKGRkYXRhLCBKQlRfUkVHX09VVFBVVF9DT05UUk9MLCAweDgwMDIpOwotCWpi dF9yZXRfd3JpdGVfMChkZGF0YSwgSkJUX1JFR19TTEVFUF9JTik7Ci0JamJ0X3JlZ193cml0ZV8x KGRkYXRhLCBKQlRfUkVHX1BPV0VSX09OX09GRiwgMHgwMCk7Ci19Ci0KLXN0YXRpYyBpbnQgdGQw Mjh0dGVjMV9wYW5lbF9nZXRfbW9kZXMoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAot CQkJCSAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0Jc3RydWN0IHBh bmVsX2Rydl9kYXRhICpkZGF0YSA9IHRvX3BhbmVsX2RhdGEoZHNzZGV2KTsKLQotCXJldHVybiBv bWFwZHNzX2Rpc3BsYXlfZ2V0X21vZGVzKGNvbm5lY3RvciwgJmRkYXRhLT52bSk7Ci19Ci0KLXN0 YXRpYyBjb25zdCBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlX29wcyB0ZDAyOHR0ZWMxX29wcyA9IHsK LQkuY29ubmVjdAk9IHRkMDI4dHRlYzFfcGFuZWxfY29ubmVjdCwKLQkuZGlzY29ubmVjdAk9IHRk MDI4dHRlYzFfcGFuZWxfZGlzY29ubmVjdCwKLQotCS5lbmFibGUJCT0gdGQwMjh0dGVjMV9wYW5l bF9lbmFibGUsCi0JLmRpc2FibGUJPSB0ZDAyOHR0ZWMxX3BhbmVsX2Rpc2FibGUsCi0KLQkuZ2V0 X21vZGVzCT0gdGQwMjh0dGVjMV9wYW5lbF9nZXRfbW9kZXMsCi19OwotCi1zdGF0aWMgaW50IHRk MDI4dHRlYzFfcGFuZWxfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3Qg cGFuZWxfZHJ2X2RhdGEgKmRkYXRhOwotCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldjsK LQlpbnQgcjsKLQotCWRldl9kYmcoJnNwaS0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQotCXNw aS0+Yml0c19wZXJfd29yZCA9IDk7Ci0Jc3BpLT5tb2RlID0gU1BJX01PREVfMzsKLQotCXIgPSBz cGlfc2V0dXAoc3BpKTsKLQlpZiAociA8IDApIHsKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJzcGlf c2V0dXAgZmFpbGVkOiAlZFxuIiwgcik7Ci0JCXJldHVybiByOwotCX0KLQotCWRkYXRhID0gZGV2 bV9remFsbG9jKCZzcGktPmRldiwgc2l6ZW9mKCpkZGF0YSksIEdGUF9LRVJORUwpOwotCWlmIChk ZGF0YSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRkYXRhLT5iYWNrbGlnaHQgPSBk ZXZtX29mX2ZpbmRfYmFja2xpZ2h0KCZzcGktPmRldik7Ci0JaWYgKElTX0VSUihkZGF0YS0+YmFj a2xpZ2h0KSkKLQkJcmV0dXJuIFBUUl9FUlIoZGRhdGEtPmJhY2tsaWdodCk7Ci0KLQlkZXZfc2V0 X2RydmRhdGEoJnNwaS0+ZGV2LCBkZGF0YSk7Ci0KLQlkZGF0YS0+c3BpX2RldiA9IHNwaTsKLQot CWRkYXRhLT52bSA9IHRkMDI4dHRlYzFfcGFuZWxfdm07Ci0KLQlkc3NkZXYgPSAmZGRhdGEtPmRz c2RldjsKLQlkc3NkZXYtPmRldiA9ICZzcGktPmRldjsKLQlkc3NkZXYtPm9wcyA9ICZ0ZDAyOHR0 ZWMxX29wczsKLQlkc3NkZXYtPnR5cGUgPSBPTUFQX0RJU1BMQVlfVFlQRV9EUEk7Ci0JZHNzZGV2 LT5kaXNwbGF5ID0gdHJ1ZTsKLQlkc3NkZXYtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JZHNzZGV2 LT5vZl9wb3J0cyA9IEJJVCgwKTsKLQlkc3NkZXYtPm9wc19mbGFncyA9IE9NQVBfRFNTX0RFVklD RV9PUF9NT0RFUzsKLQotCS8qCi0JICogTm90ZTogQWNjb3JkaW5nIHRvIHRoZSBwYW5lbCBkb2N1 bWVudGF0aW9uOgotCSAqIFNZTkMgbmVlZHMgdG8gYmUgZHJpdmVuIG9uIHRoZSBGQUxMSU5HIGVk Z2UKLQkgKi8KLQlkc3NkZXYtPmJ1c19mbGFncyA9IERSTV9CVVNfRkxBR19ERV9ISUdICi0JCQkg IHwgRFJNX0JVU19GTEFHX1NZTkNfRFJJVkVfUE9TRURHRQotCQkJICB8IERSTV9CVVNfRkxBR19Q SVhEQVRBX0RSSVZFX05FR0VER0U7Ci0KLQlvbWFwZHNzX2Rpc3BsYXlfaW5pdChkc3NkZXYpOwot CW9tYXBkc3NfZGV2aWNlX3JlZ2lzdGVyKGRzc2Rldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIGludCB0ZDAyOHR0ZWMxX3BhbmVsX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQot ewotCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ ZGV2KTsKLQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYgPSAmZGRhdGEtPmRzc2RldjsK LQotCWRldl9kYmcoJmRkYXRhLT5zcGlfZGV2LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwotCi0J b21hcGRzc19kZXZpY2VfdW5yZWdpc3Rlcihkc3NkZXYpOwotCi0JdGQwMjh0dGVjMV9wYW5lbF9k aXNhYmxlKGRzc2Rldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgdGQwMjh0dGVjMV9vZl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAi b21hcGRzcyx0cG8sdGQwMjh0dGVjMSIsIH0sCi0JLyoga2VlcCB0byBub3QgYnJlYWsgb2xkZXIg RFRCICovCi0JeyAuY29tcGF0aWJsZSA9ICJvbWFwZHNzLHRvcHBvbHksdGQwMjh0dGVjMSIsIH0s Ci0Je30sCi19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0ZDAyOHR0ZWMxX29mX21hdGNo KTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkIHRkMDI4dHRlYzFfaWRzW10g PSB7Ci0JeyAidG9wcG9seSx0ZDAyOHR0ZWMxIiwgMCB9LAotCXsgInRwbyx0ZDAyOHR0ZWMxIiwg MH0sCi0JeyAvKiBzZW50aW5lbCAqLyB9Ci19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHNwaSwg dGQwMjh0dGVjMV9pZHMpOwotCi0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB0ZDAyOHR0ZWMx X3NwaV9kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IHRkMDI4dHRlYzFfcGFuZWxfcHJvYmUsCi0JLnJl bW92ZQkJPSB0ZDAyOHR0ZWMxX3BhbmVsX3JlbW92ZSwKLQkuaWRfdGFibGUJPSB0ZDAyOHR0ZWMx X2lkcywKLQotCS5kcml2ZXIgICAgICAgICA9IHsKLQkJLm5hbWUgICA9ICJwYW5lbC10cG8tdGQw Mjh0dGVjMSIsCi0JCS5vZl9tYXRjaF90YWJsZSA9IHRkMDI4dHRlYzFfb2ZfbWF0Y2gsCi0JCS5z dXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSwKLQl9LAotfTsKLQotbW9kdWxlX3NwaV9kcml2ZXIo dGQwMjh0dGVjMV9zcGlfZHJpdmVyKTsKLQotTU9EVUxFX0FVVEhPUigiSC4gTmlrb2xhdXMgU2No YWxsZXIgPGhuc0Bnb2xkZWxpY28uY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJUb3Bwb2x5 IFREMDI4VFRFQzEgcGFuZWwgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kaXNwbGF5cy9wYW5lbC10cG8tdGQwNDNt dGVhMS5jIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvcGFuZWwtdHBvLXRkMDQz bXRlYTEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UwOTIxN2RhNTk3Li4wMDAw MDAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvcGFuZWwtdHBv LXRkMDQzbXRlYTEuYworKysgL2Rldi9udWxsCkBAIC0xLDUxMyArMCwwIEBACi0vLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgotLyoKLSAqIFRQTyBURDA0M01URUEx IFBhbmVsIGRyaXZlcgotICoKLSAqIEF1dGhvcjogR3Jhxb52eWRhcyBJZ25vdGFzIDxub3Rhc2Fz QGdtYWlsLmNvbT4KLSAqIENvbnZlcnRlZCB0byBuZXcgRFNTIGRldmljZSBtb2RlbDogVG9taSBW YWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgv ZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvL2Nv bnN1bWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVn dWxhdG9yL2NvbnN1bWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxp bnV4L3NwaS9zcGkuaD4KLQotI2luY2x1ZGUgIi4uL2Rzcy9vbWFwZHNzLmgiCi0KLSNkZWZpbmUg VFBPX1IwMl9NT0RFKHgpCQkoKHgpICYgNykKLSNkZWZpbmUgVFBPX1IwMl9NT0RFXzgwMHg0ODAJ NwotI2RlZmluZSBUUE9fUjAyX05DTEtfUklTSU5HCUJJVCgzKQotI2RlZmluZSBUUE9fUjAyX0hT WU5DX0hJR0gJQklUKDQpCi0jZGVmaW5lIFRQT19SMDJfVlNZTkNfSElHSAlCSVQoNSkKLQotI2Rl ZmluZSBUUE9fUjAzX05TVEFOREJZCUJJVCgwKQotI2RlZmluZSBUUE9fUjAzX0VOX0NQX0NMSwlC SVQoMSkKLSNkZWZpbmUgVFBPX1IwM19FTl9WR0xfUFVNUAlCSVQoMikKLSNkZWZpbmUgVFBPX1Iw M19FTl9QV00JCUJJVCgzKQotI2RlZmluZSBUUE9fUjAzX0RSSVZJTkdfQ0FQXzEwMAlCSVQoNCkK LSNkZWZpbmUgVFBPX1IwM19FTl9QUkVfQ0hBUkdFCUJJVCg2KQotI2RlZmluZSBUUE9fUjAzX1NP RlRXQVJFX0NUTAlCSVQoNykKLQotI2RlZmluZSBUUE9fUjA0X05GTElQX0gJCUJJVCgwKQotI2Rl ZmluZSBUUE9fUjA0X05GTElQX1YJCUJJVCgxKQotI2RlZmluZSBUUE9fUjA0X0NQX0NMS19GUkVR XzFICUJJVCgyKQotI2RlZmluZSBUUE9fUjA0X1ZHTF9GUkVRXzFICUJJVCg0KQotCi0jZGVmaW5l IFRQT19SMDNfVkFMX05PUk1BTCAoVFBPX1IwM19OU1RBTkRCWSB8IFRQT19SMDNfRU5fQ1BfQ0xL IHwgXAotCQkJVFBPX1IwM19FTl9WR0xfUFVNUCB8ICBUUE9fUjAzX0VOX1BXTSB8IFwKLQkJCVRQ T19SMDNfRFJJVklOR19DQVBfMTAwIHwgVFBPX1IwM19FTl9QUkVfQ0hBUkdFIHwgXAotCQkJVFBP X1IwM19TT0ZUV0FSRV9DVEwpCi0KLSNkZWZpbmUgVFBPX1IwM19WQUxfU1RBTkRCWSAoVFBPX1Iw M19EUklWSU5HX0NBUF8xMDAgfCBcCi0JCQlUUE9fUjAzX0VOX1BSRV9DSEFSR0UgfCBUUE9fUjAz X1NPRlRXQVJFX0NUTCkKLQotc3RhdGljIGNvbnN0IHUxNiB0cG9fdGQwNDNfZGVmX2dhbW1hWzEy XSA9IHsKLQkxMDUsIDMxNSwgMzgxLCA0MzEsIDQ5MCwgNTM3LCA1NzksIDY4NiwgNzgwLCA4Mzcs IDg4MCwgMTAyMwotfTsKLQotc3RydWN0IHBhbmVsX2Rydl9kYXRhIHsKLQlzdHJ1Y3Qgb21hcF9k c3NfZGV2aWNlCWRzc2RldjsKLQotCXN0cnVjdCB2aWRlb21vZGUgdm07Ci0KLQlzdHJ1Y3Qgc3Bp X2RldmljZSAqc3BpOwotCXN0cnVjdCByZWd1bGF0b3IgKnZjY19yZWc7Ci0Jc3RydWN0IGdwaW9f ZGVzYyAqcmVzZXRfZ3BpbzsKLQl1MTYgZ2FtbWFbMTJdOwotCXUzMiBtb2RlOwotCXUzMiB2bWly cm9yOjE7Ci0JdTMyIHBvd2VyZWRfb246MTsKLQl1MzIgc3BpX3N1c3BlbmRlZDoxOwotCXUzMiBw b3dlcl9vbl9yZXN1bWU6MTsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9tb2RlIHRw b190ZDA0M192bSA9IHsKLQkuaGFjdGl2ZQk9IDgwMCwKLQkudmFjdGl2ZQk9IDQ4MCwKLQotCS5w aXhlbGNsb2NrCT0gMzYwMDAwMDAsCi0KLQkuaHN5bmNfbGVuCT0gMSwKLQkuaGZyb250X3BvcmNo CT0gNjgsCi0JLmhiYWNrX3BvcmNoCT0gMjE0LAotCi0JLnZzeW5jX2xlbgk9IDEsCi0JLnZmcm9u dF9wb3JjaAk9IDM5LAotCS52YmFja19wb3JjaAk9IDM0LAotCi0JLmZsYWdzCQk9IERJU1BMQVlf RkxBR1NfSFNZTkNfTE9XIHwgRElTUExBWV9GTEFHU19WU1lOQ19MT1csCi19OwotCi0jZGVmaW5l IHRvX3BhbmVsX2RhdGEocCkgY29udGFpbmVyX29mKHAsIHN0cnVjdCBwYW5lbF9kcnZfZGF0YSwg ZHNzZGV2KQotCi1zdGF0aWMgaW50IHRwb190ZDA0M193cml0ZShzdHJ1Y3Qgc3BpX2RldmljZSAq c3BpLCB1OCBhZGRyLCB1OCBkYXRhKQotewotCXN0cnVjdCBzcGlfbWVzc2FnZQltOwotCXN0cnVj dCBzcGlfdHJhbnNmZXIJeGZlcjsKLQl1MTYJCQl3OwotCWludAkJCXI7Ci0KLQlzcGlfbWVzc2Fn ZV9pbml0KCZtKTsKLQotCW1lbXNldCgmeGZlciwgMCwgc2l6ZW9mKHhmZXIpKTsKLQotCXcgPSAo KHUxNilhZGRyIDw8IDEwKSB8ICgxIDw8IDgpIHwgZGF0YTsKLQl4ZmVyLnR4X2J1ZiA9ICZ3Owot CXhmZXIuYml0c19wZXJfd29yZCA9IDE2OwotCXhmZXIubGVuID0gMjsKLQlzcGlfbWVzc2FnZV9h ZGRfdGFpbCgmeGZlciwgJm0pOwotCi0JciA9IHNwaV9zeW5jKHNwaSwgJm0pOwotCWlmIChyIDwg MCkKLQkJZGV2X3dhcm4oJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIHdyaXRlIHRvIExDRCByZWcgKCVk KVxuIiwgcik7Ci0JcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyB2b2lkIHRwb190ZDA0M193cml0ZV9n YW1tYShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCB1MTYgZ2FtbWFbMTJdKQotewotCXU4IGksIHZh bDsKLQotCS8qIGdhbW1hIGJpdHMgWzk6OF0gKi8KLQlmb3IgKHZhbCA9IGkgPSAwOyBpIDwgNDsg aSsrKQotCQl2YWwgfD0gKGdhbW1hW2ldICYgMHgzMDApID4+ICgoaSArIDEpICogMik7Ci0JdHBv X3RkMDQzX3dyaXRlKHNwaSwgMHgxMSwgdmFsKTsKLQotCWZvciAodmFsID0gaSA9IDA7IGkgPCA0 OyBpKyspCi0JCXZhbCB8PSAoZ2FtbWFbaSs0XSAmIDB4MzAwKSA+PiAoKGkgKyAxKSAqIDIpOwot CXRwb190ZDA0M193cml0ZShzcGksIDB4MTIsIHZhbCk7Ci0KLQlmb3IgKHZhbCA9IGkgPSAwOyBp IDwgNDsgaSsrKQotCQl2YWwgfD0gKGdhbW1hW2krOF0gJiAweDMwMCkgPj4gKChpICsgMSkgKiAy KTsKLQl0cG9fdGQwNDNfd3JpdGUoc3BpLCAweDEzLCB2YWwpOwotCi0JLyogZ2FtbWEgYml0cyBb NzowXSAqLwotCWZvciAodmFsID0gaSA9IDA7IGkgPCAxMjsgaSsrKQotCQl0cG9fdGQwNDNfd3Jp dGUoc3BpLCAweDE0ICsgaSwgZ2FtbWFbaV0gJiAweGZmKTsKLX0KLQotc3RhdGljIGludCB0cG9f dGQwNDNfd3JpdGVfbWlycm9yKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGJvb2wgaCwgYm9vbCB2 KQotewotCXU4IHJlZzQgPSBUUE9fUjA0X05GTElQX0ggfCBUUE9fUjA0X05GTElQX1YgfAotCQlU UE9fUjA0X0NQX0NMS19GUkVRXzFIIHwgVFBPX1IwNF9WR0xfRlJFUV8xSDsKLQlpZiAoaCkKLQkJ cmVnNCAmPSB+VFBPX1IwNF9ORkxJUF9IOwotCWlmICh2KQotCQlyZWc0ICY9IH5UUE9fUjA0X05G TElQX1Y7Ci0KLQlyZXR1cm4gdHBvX3RkMDQzX3dyaXRlKHNwaSwgNCwgcmVnNCk7Ci19Ci0KLXN0 YXRpYyBzc2l6ZV90IHRwb190ZDA0M192bWlycm9yX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAot CXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHBh bmVsX2Rydl9kYXRhICpkZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JcmV0dXJuIHNu cHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGRkYXRhLT52bWlycm9yKTsKLX0KLQotc3Rh dGljIHNzaXplX3QgdHBvX3RkMDQzX3ZtaXJyb3Jfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAot CXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBj b3VudCkKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gZGV2X2dldF9kcnZkYXRh KGRldik7Ci0JaW50IHZhbDsKLQlpbnQgcmV0OwotCi0JcmV0ID0ga3N0cnRvaW50KGJ1ZiwgMCwg JnZhbCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQl2YWwgPSAhIXZhbDsKLQot CXJldCA9IHRwb190ZDA0M193cml0ZV9taXJyb3IoZGRhdGEtPnNwaSwgZmFsc2UsIHZhbCk7Ci0J aWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlkZGF0YS0+dm1pcnJvciA9IHZhbDsKLQot CXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3QgdHBvX3RkMDQzX21vZGVfc2hvdyhz dHJ1Y3QgZGV2aWNlICpkZXYsCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIg KmJ1ZikKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gZGV2X2dldF9kcnZkYXRh KGRldik7Ci0KLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgZGRhdGEt Pm1vZGUpOwotfQotCi1zdGF0aWMgc3NpemVfdCB0cG9fdGQwNDNfbW9kZV9zdG9yZShzdHJ1Y3Qg ZGV2aWNlICpkZXYsCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIg KmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlsb25nIHZhbDsKLQlpbnQgcmV0OwotCi0JcmV0ID0ga3N0 cnRvbChidWYsIDAsICZ2YWwpOwotCWlmIChyZXQgIT0gMCB8fCB2YWwgJiB+NykKLQkJcmV0dXJu IC1FSU5WQUw7Ci0KLQlkZGF0YS0+bW9kZSA9IHZhbDsKLQotCXZhbCB8PSBUUE9fUjAyX05DTEtf UklTSU5HOwotCXRwb190ZDA0M193cml0ZShkZGF0YS0+c3BpLCAyLCB2YWwpOwotCi0JcmV0dXJu IGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCB0cG9fdGQwNDNfZ2FtbWFfc2hvdyhzdHJ1Y3Qg ZGV2aWNlICpkZXYsCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikK LXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7 Ci0Jc3NpemVfdCBsZW4gPSAwOwotCWludCByZXQ7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShkZGF0YS0+Z2FtbWEpOyBpKyspIHsKLQkJcmV0ID0gc25wcmludGYoYnVm ICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICIldSAiLAotCQkJCWRkYXRhLT5nYW1tYVtpXSk7Ci0J CWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQkJbGVuICs9IHJldDsKLQl9Ci0JYnVmW2xl biAtIDFdID0gJ1xuJzsKLQotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHRwb190 ZDA0M19nYW1tYV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0Jc3RydWN0IGRldmljZV9hdHRy aWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBw YW5lbF9kcnZfZGF0YSAqZGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQl1bnNpZ25lZCBp bnQgZ1sxMl07Ci0JaW50IHJldDsKLQlpbnQgaTsKLQotCXJldCA9IHNzY2FuZihidWYsICIldSAl dSAldSAldSAldSAldSAldSAldSAldSAldSAldSAldSIsCi0JCQkmZ1swXSwgJmdbMV0sICZnWzJd LCAmZ1szXSwgJmdbNF0sICZnWzVdLAotCQkJJmdbNl0sICZnWzddLCAmZ1s4XSwgJmdbOV0sICZn WzEwXSwgJmdbMTFdKTsKLQotCWlmIChyZXQgIT0gMTIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0J Zm9yIChpID0gMDsgaSA8IDEyOyBpKyspCi0JCWRkYXRhLT5nYW1tYVtpXSA9IGdbaV07Ci0KLQl0 cG9fdGQwNDNfd3JpdGVfZ2FtbWEoZGRhdGEtPnNwaSwgZGRhdGEtPmdhbW1hKTsKLQotCXJldHVy biBjb3VudDsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKHZtaXJyb3IsIFNfSVJVR08gfCBTX0lX VVNSLAotCQl0cG9fdGQwNDNfdm1pcnJvcl9zaG93LCB0cG9fdGQwNDNfdm1pcnJvcl9zdG9yZSk7 Ci1zdGF0aWMgREVWSUNFX0FUVFIobW9kZSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCXRwb190ZDA0 M19tb2RlX3Nob3csIHRwb190ZDA0M19tb2RlX3N0b3JlKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihn YW1tYSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCXRwb190ZDA0M19nYW1tYV9zaG93LCB0cG9fdGQw NDNfZ2FtbWFfc3RvcmUpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdHBvX3RkMDQzX2F0 dHJzW10gPSB7Ci0JJmRldl9hdHRyX3ZtaXJyb3IuYXR0ciwKLQkmZGV2X2F0dHJfbW9kZS5hdHRy LAotCSZkZXZfYXR0cl9nYW1tYS5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgY29uc3Qgc3Ry dWN0IGF0dHJpYnV0ZV9ncm91cCB0cG9fdGQwNDNfYXR0cl9ncm91cCA9IHsKLQkuYXR0cnMgPSB0 cG9fdGQwNDNfYXR0cnMsCi19OwotCi1zdGF0aWMgaW50IHRwb190ZDA0M19wb3dlcl9vbihzdHJ1 Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhKQotewotCWludCByOwotCi0JaWYgKGRkYXRhLT5wb3dl cmVkX29uKQotCQlyZXR1cm4gMDsKLQotCXIgPSByZWd1bGF0b3JfZW5hYmxlKGRkYXRhLT52Y2Nf cmVnKTsKLQlpZiAociAhPSAwKQotCQlyZXR1cm4gcjsKLQotCS8qIHdhaXQgZm9yIHBhbmVsIHRv IHN0YWJpbGl6ZSAqLwotCW1zbGVlcCgxNjApOwotCi0JZ3Bpb2Rfc2V0X3ZhbHVlKGRkYXRhLT5y ZXNldF9ncGlvLCAwKTsKLQotCXRwb190ZDA0M193cml0ZShkZGF0YS0+c3BpLCAyLAotCQkJVFBP X1IwMl9NT0RFKGRkYXRhLT5tb2RlKSB8IFRQT19SMDJfTkNMS19SSVNJTkcpOwotCXRwb190ZDA0 M193cml0ZShkZGF0YS0+c3BpLCAzLCBUUE9fUjAzX1ZBTF9OT1JNQUwpOwotCXRwb190ZDA0M193 cml0ZShkZGF0YS0+c3BpLCAweDIwLCAweGYwKTsKLQl0cG9fdGQwNDNfd3JpdGUoZGRhdGEtPnNw aSwgMHgyMSwgMHhmMCk7Ci0JdHBvX3RkMDQzX3dyaXRlX21pcnJvcihkZGF0YS0+c3BpLCBmYWxz ZSwgZGRhdGEtPnZtaXJyb3IpOwotCXRwb190ZDA0M193cml0ZV9nYW1tYShkZGF0YS0+c3BpLCBk ZGF0YS0+Z2FtbWEpOwotCi0JZGRhdGEtPnBvd2VyZWRfb24gPSAxOwotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgdm9pZCB0cG9fdGQwNDNfcG93ZXJfb2ZmKHN0cnVjdCBwYW5lbF9kcnZfZGF0YSAq ZGRhdGEpCi17Ci0JaWYgKCFkZGF0YS0+cG93ZXJlZF9vbikKLQkJcmV0dXJuOwotCi0JdHBvX3Rk MDQzX3dyaXRlKGRkYXRhLT5zcGksIDMsCi0JCQlUUE9fUjAzX1ZBTF9TVEFOREJZIHwgVFBPX1Iw M19FTl9QV00pOwotCi0JZ3Bpb2Rfc2V0X3ZhbHVlKGRkYXRhLT5yZXNldF9ncGlvLCAxKTsKLQot CS8qIHdhaXQgZm9yIGF0IGxlYXN0IDIgdnN5bmNzIGJlZm9yZSBjdXR0aW5nIG9mZiBwb3dlciAq LwotCW1zbGVlcCg1MCk7Ci0KLQl0cG9fdGQwNDNfd3JpdGUoZGRhdGEtPnNwaSwgMywgVFBPX1Iw M19WQUxfU1RBTkRCWSk7Ci0KLQlyZWd1bGF0b3JfZGlzYWJsZShkZGF0YS0+dmNjX3JlZyk7Ci0K LQlkZGF0YS0+cG93ZXJlZF9vbiA9IDA7Ci19Ci0KLXN0YXRpYyBpbnQgdHBvX3RkMDQzX2Nvbm5l Y3Qoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqc3JjLAotCQkJICAgICBzdHJ1Y3Qgb21hcF9kc3Nf ZGV2aWNlICpkc3QpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHRwb190ZDA0M19k aXNjb25uZWN0KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKnNyYywKLQkJCQkgc3RydWN0IG9tYXBf ZHNzX2RldmljZSAqZHN0KQotewotfQotCi1zdGF0aWMgdm9pZCB0cG9fdGQwNDNfZW5hYmxlKHN0 cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEg KmRkYXRhID0gdG9fcGFuZWxfZGF0YShkc3NkZXYpOwotCWludCByOwotCi0JLyoKLQkgKiBJZiB3 ZSBhcmUgcmVzdW1pbmcgZnJvbSBzeXN0ZW0gc3VzcGVuZCwgU1BJIGNsb2NrcyBtaWdodCBub3Qg YmUKLQkgKiBlbmFibGVkIHlldCwgc28gd2UnbGwgcHJvZ3JhbSB0aGUgTENEIGZyb20gU1BJIFBN IHJlc3VtZSBjYWxsYmFjay4KLQkgKi8KLQlpZiAoIWRkYXRhLT5zcGlfc3VzcGVuZGVkKSB7Ci0J CXIgPSB0cG9fdGQwNDNfcG93ZXJfb24oZGRhdGEpOwotCQlpZiAocikgewotCQkJZGV2X2Vycigm ZGRhdGEtPnNwaS0+ZGV2LCAiJXM6IHBvd2VyIG9uIGZhaWxlZCAoJWQpXG4iLAotCQkJCV9fZnVu Y19fLCByKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgdHBvX3RkMDQz X2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCXN0cnVjdCBwYW5l bF9kcnZfZGF0YSAqZGRhdGEgPSB0b19wYW5lbF9kYXRhKGRzc2Rldik7Ci0KLQlpZiAoIWRkYXRh LT5zcGlfc3VzcGVuZGVkKQotCQl0cG9fdGQwNDNfcG93ZXJfb2ZmKGRkYXRhKTsKLX0KLQotc3Rh dGljIGludCB0cG9fdGQwNDNfZ2V0X21vZGVzKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rl diwKLQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXN0cnVj dCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSB0b19wYW5lbF9kYXRhKGRzc2Rldik7Ci0KLQlyZXR1 cm4gb21hcGRzc19kaXNwbGF5X2dldF9tb2Rlcyhjb25uZWN0b3IsICZkZGF0YS0+dm0pOwotfQot Ci1zdGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfZHNzX2RldmljZV9vcHMgdHBvX3RkMDQzX29wcyA9 IHsKLQkuY29ubmVjdAk9IHRwb190ZDA0M19jb25uZWN0LAotCS5kaXNjb25uZWN0CT0gdHBvX3Rk MDQzX2Rpc2Nvbm5lY3QsCi0KLQkuZW5hYmxlCQk9IHRwb190ZDA0M19lbmFibGUsCi0JLmRpc2Fi bGUJPSB0cG9fdGQwNDNfZGlzYWJsZSwKLQotCS5nZXRfbW9kZXMJPSB0cG9fdGQwNDNfZ2V0X21v ZGVzLAotfTsKLQotc3RhdGljIGludCB0cG9fdGQwNDNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2Ug KnNwaSkKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhOwotCXN0cnVjdCBvbWFwX2Rz c19kZXZpY2UgKmRzc2RldjsKLQlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvOwotCWludCByOwotCi0J ZGV2X2RiZygmc3BpLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwotCi0Jc3BpLT5iaXRzX3Blcl93 b3JkID0gMTY7Ci0Jc3BpLT5tb2RlID0gU1BJX01PREVfMDsKLQotCXIgPSBzcGlfc2V0dXAoc3Bp KTsKLQlpZiAociA8IDApIHsKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJzcGlfc2V0dXAgZmFpbGVk OiAlZFxuIiwgcik7Ci0JCXJldHVybiByOwotCX0KLQotCWRkYXRhID0gZGV2bV9remFsbG9jKCZz cGktPmRldiwgc2l6ZW9mKCpkZGF0YSksIEdGUF9LRVJORUwpOwotCWlmIChkZGF0YSA9PSBOVUxM KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIGRkYXRh KTsKLQotCWRkYXRhLT5zcGkgPSBzcGk7Ci0KLQlkZGF0YS0+bW9kZSA9IFRQT19SMDJfTU9ERV84 MDB4NDgwOwotCW1lbWNweShkZGF0YS0+Z2FtbWEsIHRwb190ZDA0M19kZWZfZ2FtbWEsIHNpemVv ZihkZGF0YS0+Z2FtbWEpKTsKLQotCWRkYXRhLT52Y2NfcmVnID0gZGV2bV9yZWd1bGF0b3JfZ2V0 KCZzcGktPmRldiwgInZjYyIpOwotCWlmIChJU19FUlIoZGRhdGEtPnZjY19yZWcpKSB7Ci0JCWRl dl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIGdldCBMQ0QgVkNDIHJlZ3VsYXRvclxuIik7Ci0J CXJldHVybiBQVFJfRVJSKGRkYXRhLT52Y2NfcmVnKTsKLQl9Ci0KLQlncGlvID0gZGV2bV9ncGlv ZF9nZXQoJnNwaS0+ZGV2LCAicmVzZXQiLCBHUElPRF9PVVRfSElHSCk7Ci0JaWYgKElTX0VSUihn cGlvKSkgewotCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCB0byBnZXQgcmVzZXQgZ3Bpb1xu Iik7Ci0JCXJldHVybiBQVFJfRVJSKGdwaW8pOwotCX0KLQotCWRkYXRhLT5yZXNldF9ncGlvID0g Z3BpbzsKLQotCXIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnNwaS0+ZGV2LmtvYmosICZ0cG9fdGQw NDNfYXR0cl9ncm91cCk7Ci0JaWYgKHIpIHsKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQg dG8gY3JlYXRlIHN5c2ZzIGZpbGVzXG4iKTsKLQkJcmV0dXJuIHI7Ci0JfQotCi0JZGRhdGEtPnZt ID0gdHBvX3RkMDQzX3ZtOwotCi0JZHNzZGV2ID0gJmRkYXRhLT5kc3NkZXY7Ci0JZHNzZGV2LT5k ZXYgPSAmc3BpLT5kZXY7Ci0JZHNzZGV2LT5vcHMgPSAmdHBvX3RkMDQzX29wczsKLQlkc3NkZXYt PnR5cGUgPSBPTUFQX0RJU1BMQVlfVFlQRV9EUEk7Ci0JZHNzZGV2LT5kaXNwbGF5ID0gdHJ1ZTsK LQlkc3NkZXYtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JZHNzZGV2LT5vZl9wb3J0cyA9IEJJVCgw KTsKLQlkc3NkZXYtPm9wc19mbGFncyA9IE9NQVBfRFNTX0RFVklDRV9PUF9NT0RFUzsKLQotCS8q Ci0JICogTm90ZTogQWNjb3JkaW5nIHRvIHRoZSBwYW5lbCBkb2N1bWVudGF0aW9uOgotCSAqIFNZ TkMgbmVlZHMgdG8gYmUgZHJpdmVuIG9uIHRoZSBGQUxMSU5HIGVkZ2UKLQkgKi8KLQlkc3NkZXYt PmJ1c19mbGFncyA9IERSTV9CVVNfRkxBR19ERV9ISUdICi0JCQkgIHwgRFJNX0JVU19GTEFHX1NZ TkNfRFJJVkVfUE9TRURHRQotCQkJICB8IERSTV9CVVNfRkxBR19QSVhEQVRBX0RSSVZFX05FR0VE R0U7Ci0KLQlvbWFwZHNzX2Rpc3BsYXlfaW5pdChkc3NkZXYpOwotCW9tYXBkc3NfZGV2aWNlX3Jl Z2lzdGVyKGRzc2Rldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0cG9fdGQwNDNf cmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0Jc3RydWN0IHBhbmVsX2Rydl9kYXRh ICpkZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwotCXN0cnVjdCBvbWFwX2Rzc19k ZXZpY2UgKmRzc2RldiA9ICZkZGF0YS0+ZHNzZGV2OwotCi0JZGV2X2RiZygmZGRhdGEtPnNwaS0+ ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQotCW9tYXBkc3NfZGV2aWNlX3VucmVnaXN0ZXIoZHNz ZGV2KTsKLQotCWlmIChvbWFwZHNzX2RldmljZV9pc19lbmFibGVkKGRzc2RldikpCi0JCXRwb190 ZDA0M19kaXNhYmxlKGRzc2Rldik7Ci0KLQlzeXNmc19yZW1vdmVfZ3JvdXAoJnNwaS0+ZGV2Lmtv YmosICZ0cG9fdGQwNDNfYXR0cl9ncm91cCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmZGVmIENP TkZJR19QTV9TTEVFUAotc3RhdGljIGludCB0cG9fdGQwNDNfc3BpX3N1c3BlbmQoc3RydWN0IGRl dmljZSAqZGV2KQotewotCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsKLQotCWRldl9kYmcoZGV2LCAidHBvX3RkMDQzX3NwaV9zdXNwZW5kLCB0cG8g JXBcbiIsIGRkYXRhKTsKLQotCWRkYXRhLT5wb3dlcl9vbl9yZXN1bWUgPSBkZGF0YS0+cG93ZXJl ZF9vbjsKLQl0cG9fdGQwNDNfcG93ZXJfb2ZmKGRkYXRhKTsKLQlkZGF0YS0+c3BpX3N1c3BlbmRl ZCA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0cG9fdGQwNDNfc3BpX3Jlc3Vt ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCByZXQ7Ci0KLQlkZXZfZGJnKGRldiwgInRwb190 ZDA0M19zcGlfcmVzdW1lXG4iKTsKLQotCWlmIChkZGF0YS0+cG93ZXJfb25fcmVzdW1lKSB7Ci0J CXJldCA9IHRwb190ZDA0M19wb3dlcl9vbihkZGF0YSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4g cmV0OwotCX0KLQlkZGF0YS0+c3BpX3N1c3BlbmRlZCA9IDA7Ci0KLQlyZXR1cm4gMDsKLX0KLSNl bmRpZgotCi1zdGF0aWMgU0lNUExFX0RFVl9QTV9PUFModHBvX3RkMDQzX3NwaV9wbSwKLQl0cG9f dGQwNDNfc3BpX3N1c3BlbmQsIHRwb190ZDA0M19zcGlfcmVzdW1lKTsKLQotc3RhdGljIGNvbnN0 IHN0cnVjdCBvZl9kZXZpY2VfaWQgdHBvX3RkMDQzX29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0 aWJsZSA9ICJvbWFwZHNzLHRwbyx0ZDA0M210ZWExIiwgfSwKLQl7fSwKLX07Ci0KLU1PRFVMRV9E RVZJQ0VfVEFCTEUob2YsIHRwb190ZDA0M19vZl9tYXRjaCk7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3Bp X2RyaXZlciB0cG9fdGQwNDNfc3BpX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZQk9 ICJwYW5lbC10cG8tdGQwNDNtdGVhMSIsCi0JCS5wbQk9ICZ0cG9fdGQwNDNfc3BpX3BtLAotCQku b2ZfbWF0Y2hfdGFibGUgPSB0cG9fdGQwNDNfb2ZfbWF0Y2gsCi0JCS5zdXBwcmVzc19iaW5kX2F0 dHJzID0gdHJ1ZSwKLQl9LAotCS5wcm9iZQk9IHRwb190ZDA0M19wcm9iZSwKLQkucmVtb3ZlCT0g dHBvX3RkMDQzX3JlbW92ZSwKLX07Ci0KLW1vZHVsZV9zcGlfZHJpdmVyKHRwb190ZDA0M19zcGlf ZHJpdmVyKTsKLQotTU9EVUxFX0FMSUFTKCJzcGk6dHBvLHRkMDQzbXRlYTEiKTsKLU1PRFVMRV9B VVRIT1IoIkdyYcW+dnlkYXMgSWdub3RhcyA8bm90YXNhc0BnbWFpbC5jb20+Iik7Ci1NT0RVTEVf REVTQ1JJUFRJT04oIlRQTyBURDA0M01URUExIExDRCBEcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNF KCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9vbWFwZHNz LWJvb3QtaW5pdC5jIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZHNzL29tYXBkc3MtYm9vdC1p bml0LmMKaW5kZXggYTE0MGRlNzljNTBlLi4zMTUwMjg1N2YwMTMgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9vbWFwZHNzLWJvb3QtaW5pdC5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9vbWFwZHJtL2Rzcy9vbWFwZHNzLWJvb3QtaW5pdC5jCkBAIC0xNzYsMTcgKzE3Niwx MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvbWFwZHNzX29mX21hdGNoW10g X19pbml0Y29uc3QgPSB7CiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvbWFwZHNz X29mX2ZpeHVwc193aGl0ZWxpc3RbXSBfX2luaXRjb25zdCA9IHsKIAl7IC5jb21wYXRpYmxlID0g ImNvbXBvc2l0ZS12aWRlby1jb25uZWN0b3IiIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJoZG1pLWNv bm5lY3RvciIgfSwKLQl7IC5jb21wYXRpYmxlID0gImxncGhpbGlwcyxsYjAzNXEwMiIgfSwKLQl7 IC5jb21wYXRpYmxlID0gIm5lYyxubDgwNDhobDExIiB9LAogCXsgLmNvbXBhdGlibGUgPSAicGFu ZWwtZHNpLWNtIiB9LAotCXsgLmNvbXBhdGlibGUgPSAic2hhcnAsbHMwMzd2N2R3MDEiIH0sCi0J eyAuY29tcGF0aWJsZSA9ICJzb255LGFjeDU2NWFrbSIgfSwKIAl7IC5jb21wYXRpYmxlID0gInN2 aWRlby1jb25uZWN0b3IiIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJ0aSxvcGEzNjIiIH0sCiAJeyAu Y29tcGF0aWJsZSA9ICJ0aSx0cGQxMnMwMTUiIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJ0b3Bwb2x5 LHRkMDI4dHRlYzEiIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJ0cG8sdGQwMjh0dGVjMSIgfSwKLQl7 IC5jb21wYXRpYmxlID0gInRwbyx0ZDA0M210ZWExIiB9LAogCXt9LAogfTsKIAotLSAKUmVnYXJk cywKCkxhdXJlbnQgUGluY2hhcnQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2RyaS1kZXZlbA==