From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bartlomiej Zolnierkiewicz Subject: [PATCH] video: fbdev: omap2: remove rfbi Date: Fri, 27 Apr 2018 17:09:14 +0200 Message-ID: <2238944.jilJcacc6d@amdc3058> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Tomi Valkeinen Cc: linux-fbdev@vger.kernel.org, linux-omap@vger.kernel.org, Laurent Pinchart , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org List-Id: linux-omap@vger.kernel.org b21hcGZiIGVxdWl2YWxlbnQgb2YgZHJtJ3MgY29tbWl0IGFhNjEzMjFkNGMwOCAoImRybS9vbWFw OiByZW1vdmUgcmZiaSIpOgoKVGhlIFJGQkkgZHJpdmVyIGhhcyBub3Qgd29ya2VkIG5vciBjb21w aWxlZCBmb3IgbWFueSB5ZWFycy4gVGhlcmUgYXJlCnZlcnkgZmV3IGJvYXJkcyBvdXQgdGhlcmUg dGhhdCB1c2UgUkZCSSwgYW5kIG5vIG9uZSBoYXMgc3RlcHBlZCB1cCB0bwpmaXggaXQuCgpTbyBs ZXQncyByZW1vdmUgdGhlIFJGQkkgY29kZSB0aGF0IGRvZXNuJ3QgZXZlbiBjb21waWxlLgoKQ2M6 IFRvbWkgVmFsa2VpbmVuIDx0b21pLnZhbGtlaW5lbkB0aS5jb20+CkNjOiBMYXVyZW50IFBpbmNo YXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+ClNpZ25lZC1vZmYtYnk6IEJh cnRsb21pZWogWm9sbmllcmtpZXdpY3ogPGIuem9sbmllcmtpZUBzYW1zdW5nLmNvbT4KLS0tCiBk cml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL29tYXBmYi9kc3MvS2NvbmZpZyAgfCAgIDEzIAogZHJp dmVycy92aWRlby9mYmRldi9vbWFwMi9vbWFwZmIvZHNzL01ha2VmaWxlIHwgICAgMSAKIGRyaXZl cnMvdmlkZW8vZmJkZXYvb21hcDIvb21hcGZiL2Rzcy9jb3JlLmMgICB8ICAgIDYgCiBkcml2ZXJz L3ZpZGVvL2ZiZGV2L29tYXAyL29tYXBmYi9kc3MvZHNzLmggICAgfCAgICA0IAogZHJpdmVycy92 aWRlby9mYmRldi9vbWFwMi9vbWFwZmIvZHNzL3JmYmkuYyAgIHwgMTA3OCAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogaW5jbHVkZS92aWRlby9vbWFwZmJfZHNzLmggICAgICAgICAgICAgICAg ICAgIHwgICAzMiAKIDYgZmlsZXMgY2hhbmdlZCwgMTEzNCBkZWxldGlvbnMoLSkKIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL29tYXBmYi9kc3MvcmZiaS5jCgpJ bmRleDogYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL29tYXBmYi9kc3MvS2NvbmZpZwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvb21hcGZiL2Rzcy9LY29uZmln CTIwMTgtMDQtMjcgMTY6MjQ6NDguMTcxNjMyMDA3ICswMjAwCisrKyBiL2RyaXZlcnMvdmlkZW8v ZmJkZXYvb21hcDIvb21hcGZiL2Rzcy9LY29uZmlnCTIwMTgtMDQtMjcgMTY6MjU6MzEuMDY3NjMz MDg4ICswMjAwCkBAIC00MiwxOSArNDIsNiBAQCBjb25maWcgRkJfT01BUDJfRFNTX0RQSQogCWhl bHAKIAkgIERQSSBJbnRlcmZhY2UuIFRoaXMgaXMgdGhlIFBhcmFsbGVsIERpc3BsYXkgSW50ZXJm YWNlLgogCi1jb25maWcgRkJfT01BUDJfRFNTX1JGQkkKLQlib29sICJSRkJJIHN1cHBvcnQiCi0J ZGVwZW5kcyBvbiBCUk9LRU4KLSAgICAgICAgZGVmYXVsdCBuCi0JaGVscAotCSAgTUlQSSBEQkkg c3VwcG9ydCAoUkZCSSwgUmVtb3RlIEZyYW1lYnVmZmVyIEludGVyZmFjZSwgaW4gVGV4YXMKLQkg IEluc3RydW1lbnQncyB0ZXJtaW5vbG9neSkuCi0KLQkgIERCSSBpcyBhIGJ1cyBiZXR3ZWVuIHRo ZSBob3N0IHByb2Nlc3NvciBhbmQgYSBwZXJpcGhlcmFsLAotCSAgc3VjaCBhcyBhIGRpc3BsYXkg b3IgYSBmcmFtZWJ1ZmZlciBjaGlwLgotCi0JICBTZWUgaHR0cDovL3d3dy5taXBpLm9yZy8gZm9y IERCSSBzcGVjaWZpY2F0aW9ucy4KLQogY29uZmlnIEZCX09NQVAyX0RTU19WRU5DCiAJYm9vbCAi VkVOQyBzdXBwb3J0IgogICAgICAgICBkZWZhdWx0IHkKSW5kZXg6IGIvZHJpdmVycy92aWRlby9m YmRldi9vbWFwMi9vbWFwZmIvZHNzL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGEvZHJpdmVycy92 aWRlby9mYmRldi9vbWFwMi9vbWFwZmIvZHNzL01ha2VmaWxlCTIwMTgtMDQtMjcgMTY6MjQ6NDgu MTcxNjMyMDA3ICswMjAwCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvb21hcGZiL2Rz cy9NYWtlZmlsZQkyMDE4LTA0LTI3IDE2OjI2OjIwLjUxMTYzNDMzMyArMDIwMApAQCAtOCw3ICs4 LDYgQEAgb21hcGRzcy15IDo9IGNvcmUubyBkc3MubyBkc3NfZmVhdHVyZXMubwogb21hcGRzcy15 ICs9IG1hbmFnZXIubyBtYW5hZ2VyLXN5c2ZzLm8gb3ZlcmxheS5vIG92ZXJsYXktc3lzZnMubyBh cHBseS5vIFwKIAlkaXNwYy1jb21wYXQubyBkaXNwbGF5LXN5c2ZzLm8KIG9tYXBkc3MtJChDT05G SUdfRkJfT01BUDJfRFNTX0RQSSkgKz0gZHBpLm8KLW9tYXBkc3MtJChDT05GSUdfRkJfT01BUDJf RFNTX1JGQkkpICs9IHJmYmkubwogb21hcGRzcy0kKENPTkZJR19GQl9PTUFQMl9EU1NfVkVOQykg Kz0gdmVuYy5vCiBvbWFwZHNzLSQoQ09ORklHX0ZCX09NQVAyX0RTU19TREkpICs9IHNkaS5vCiBv bWFwZHNzLSQoQ09ORklHX0ZCX09NQVAyX0RTU19EU0kpICs9IGRzaS5vCkluZGV4OiBiL2RyaXZl cnMvdmlkZW8vZmJkZXYvb21hcDIvb21hcGZiL2Rzcy9jb3JlLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYS9k cml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL29tYXBmYi9kc3MvY29yZS5jCTIwMTgtMDQtMjcgMTY6 MjQ6NDguMTcxNjMyMDA3ICswMjAwCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvb21h cGZiL2Rzcy9jb3JlLmMJMjAxOC0wNC0yNyAxNjoyNjowMC42NzU2MzM4MzMgKzAyMDAKQEAgLTI1 MSw5ICsyNTEsNiBAQCBzdGF0aWMgaW50ICgqZHNzX291dHB1dF9kcnZfcmVnX2Z1bmNzW10pCiAj aWZkZWYgQ09ORklHX0ZCX09NQVAyX0RTU19TREkKIAlzZGlfaW5pdF9wbGF0Zm9ybV9kcml2ZXIs CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfRkJfT01BUDJfRFNTX1JGQkkKLQlyZmJpX2luaXRfcGxh dGZvcm1fZHJpdmVyLAotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZCX09NQVAyX0RTU19WRU5DCiAJ dmVuY19pbml0X3BsYXRmb3JtX2RyaXZlciwKICNlbmRpZgpAQCAtMjc1LDkgKzI3Miw2IEBAIHN0 YXRpYyB2b2lkICgqZHNzX291dHB1dF9kcnZfdW5yZWdfZnVuY3MKICNpZmRlZiBDT05GSUdfRkJf T01BUDJfRFNTX1ZFTkMKIAl2ZW5jX3VuaW5pdF9wbGF0Zm9ybV9kcml2ZXIsCiAjZW5kaWYKLSNp ZmRlZiBDT05GSUdfRkJfT01BUDJfRFNTX1JGQkkKLQlyZmJpX3VuaW5pdF9wbGF0Zm9ybV9kcml2 ZXIsCi0jZW5kaWYKICNpZmRlZiBDT05GSUdfRkJfT01BUDJfRFNTX1NESQogCXNkaV91bmluaXRf cGxhdGZvcm1fZHJpdmVyLAogI2VuZGlmCkluZGV4OiBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21h cDIvb21hcGZiL2Rzcy9kc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYv b21hcDIvb21hcGZiL2Rzcy9kc3MuaAkyMDE4LTA0LTI3IDE2OjI0OjQ4LjE3MTYzMjAwNyArMDIw MAorKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL29tYXBmYi9kc3MvZHNzLmgJMjAxOC0w NC0yNyAxNjoyNDo0OC4xNzE2MzIwMDcgKzAyMDAKQEAgLTQ3MiwxMCArNDcyLDYgQEAgdm9pZCBo ZG1pNF91bmluaXRfcGxhdGZvcm1fZHJpdmVyKHZvaWQpOwogaW50IGhkbWk1X2luaXRfcGxhdGZv cm1fZHJpdmVyKHZvaWQpIF9faW5pdDsKIHZvaWQgaGRtaTVfdW5pbml0X3BsYXRmb3JtX2RyaXZl cih2b2lkKTsKIAotLyogUkZCSSAqLwotaW50IHJmYmlfaW5pdF9wbGF0Zm9ybV9kcml2ZXIodm9p ZCkgX19pbml0Owotdm9pZCByZmJpX3VuaW5pdF9wbGF0Zm9ybV9kcml2ZXIodm9pZCk7Ci0KIAog I2lmZGVmIENPTkZJR19GQl9PTUFQMl9EU1NfQ09MTEVDVF9JUlFfU1RBVFMKIHN0YXRpYyBpbmxp bmUgdm9pZCBkc3NfY29sbGVjdF9pcnFfc3RhdHModTMyIGlycXN0YXR1cywgdW5zaWduZWQgKmly cV9hcnIpCkluZGV4OiBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvb21hcGZiL2Rzcy9yZmJp LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL29tYXBmYi9kc3Mv cmZiaS5jCTIwMTgtMDQtMjcgMTY6MjQ6NDIuMjIzNjMxODU3ICswMjAwCisrKyAvZGV2L251bGwJ MTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKQEAgLTEsMTA3OCArMCwwIEBACi0v KgotICogbGludXgvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvcmZiaS5jCi0gKgotICogQ29weXJp Z2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCi0gKiBBdXRob3I6IFRvbWkgVmFsa2VpbmVu IDx0b21pLnZhbGtlaW5lbkBub2tpYS5jb20+Ci0gKgotICogU29tZSBjb2RlIGFuZCBpZGVhcyB0 YWtlbiBmcm9tIGRyaXZlcnMvdmlkZW8vb21hcC8gZHJpdmVyCi0gKiBieSBJbXJlIERlYWsuCi0g KgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJ TElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqLwotCi0jZGVmaW5lIERTU19TVUJTWVNfTkFNRSAi UkZCSSIKLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1t YXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdm1h bGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0j aW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgotI2luY2x1 ZGUgPGxpbnV4L2t0aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgotI2luY2x1ZGUg PGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+Ci0jaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5o PgotI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgotCi0jaW5jbHVkZSA8dmlkZW8vb21hcGZi X2Rzcy5oPgotI2luY2x1ZGUgImRzcy5oIgotCi1zdHJ1Y3QgcmZiaV9yZWcgeyB1MTYgaWR4OyB9 OwotCi0jZGVmaW5lIFJGQklfUkVHKGlkeCkJCSgoY29uc3Qgc3RydWN0IHJmYmlfcmVnKSB7IGlk eCB9KQotCi0jZGVmaW5lIFJGQklfUkVWSVNJT04JCVJGQklfUkVHKDB4MDAwMCkKLSNkZWZpbmUg UkZCSV9TWVNDT05GSUcJCVJGQklfUkVHKDB4MDAxMCkKLSNkZWZpbmUgUkZCSV9TWVNTVEFUVVMJ CVJGQklfUkVHKDB4MDAxNCkKLSNkZWZpbmUgUkZCSV9DT05UUk9MCQlSRkJJX1JFRygweDAwNDAp Ci0jZGVmaW5lIFJGQklfUElYRUxfQ05UCQlSRkJJX1JFRygweDAwNDQpCi0jZGVmaW5lIFJGQklf TElORV9OVU1CRVIJUkZCSV9SRUcoMHgwMDQ4KQotI2RlZmluZSBSRkJJX0NNRAkJUkZCSV9SRUco MHgwMDRjKQotI2RlZmluZSBSRkJJX1BBUkFNCQlSRkJJX1JFRygweDAwNTApCi0jZGVmaW5lIFJG QklfREFUQQkJUkZCSV9SRUcoMHgwMDU0KQotI2RlZmluZSBSRkJJX1JFQUQJCVJGQklfUkVHKDB4 MDA1OCkKLSNkZWZpbmUgUkZCSV9TVEFUVVMJCVJGQklfUkVHKDB4MDA1YykKLQotI2RlZmluZSBS RkJJX0NPTkZJRyhuKQkJUkZCSV9SRUcoMHgwMDYwICsgKG4pKjB4MTgpCi0jZGVmaW5lIFJGQklf T05PRkZfVElNRShuKQlSRkJJX1JFRygweDAwNjQgKyAobikqMHgxOCkKLSNkZWZpbmUgUkZCSV9D WUNMRV9USU1FKG4pCVJGQklfUkVHKDB4MDA2OCArIChuKSoweDE4KQotI2RlZmluZSBSRkJJX0RB VEFfQ1lDTEUxKG4pCVJGQklfUkVHKDB4MDA2YyArIChuKSoweDE4KQotI2RlZmluZSBSRkJJX0RB VEFfQ1lDTEUyKG4pCVJGQklfUkVHKDB4MDA3MCArIChuKSoweDE4KQotI2RlZmluZSBSRkJJX0RB VEFfQ1lDTEUzKG4pCVJGQklfUkVHKDB4MDA3NCArIChuKSoweDE4KQotCi0jZGVmaW5lIFJGQklf VlNZTkNfV0lEVEgJUkZCSV9SRUcoMHgwMDkwKQotI2RlZmluZSBSRkJJX0hTWU5DX1dJRFRICVJG QklfUkVHKDB4MDA5NCkKLQotI2RlZmluZSBSRUdfRkxEX01PRChpZHgsIHZhbCwgc3RhcnQsIGVu ZCkgXAotCXJmYmlfd3JpdGVfcmVnKGlkeCwgRkxEX01PRChyZmJpX3JlYWRfcmVnKGlkeCksIHZh bCwgc3RhcnQsIGVuZCkpCi0KLWVudW0gb21hcF9yZmJpX2N5Y2xlZm9ybWF0IHsKLQlPTUFQX0RT U19SRkJJX0NZQ0xFRk9STUFUXzFfMSA9IDAsCi0JT01BUF9EU1NfUkZCSV9DWUNMRUZPUk1BVF8y XzEgPSAxLAotCU9NQVBfRFNTX1JGQklfQ1lDTEVGT1JNQVRfM18xID0gMiwKLQlPTUFQX0RTU19S RkJJX0NZQ0xFRk9STUFUXzNfMiA9IDMsCi19OwotCi1lbnVtIG9tYXBfcmZiaV9kYXRhdHlwZSB7 Ci0JT01BUF9EU1NfUkZCSV9EQVRBVFlQRV8xMiA9IDAsCi0JT01BUF9EU1NfUkZCSV9EQVRBVFlQ RV8xNiA9IDEsCi0JT01BUF9EU1NfUkZCSV9EQVRBVFlQRV8xOCA9IDIsCi0JT01BUF9EU1NfUkZC SV9EQVRBVFlQRV8yNCA9IDMsCi19OwotCi1lbnVtIG9tYXBfcmZiaV9wYXJhbGxlbG1vZGUgewot CU9NQVBfRFNTX1JGQklfUEFSQUxMRUxNT0RFXzggPSAwLAotCU9NQVBfRFNTX1JGQklfUEFSQUxM RUxNT0RFXzkgPSAxLAotCU9NQVBfRFNTX1JGQklfUEFSQUxMRUxNT0RFXzEyID0gMiwKLQlPTUFQ X0RTU19SRkJJX1BBUkFMTEVMTU9ERV8xNiA9IDMsCi19OwotCi1zdGF0aWMgaW50IHJmYmlfY29u dmVydF90aW1pbmdzKHN0cnVjdCByZmJpX3RpbWluZ3MgKnQpOwotc3RhdGljIHZvaWQgcmZiaV9n ZXRfY2xrX2luZm8odTMyICpjbGtfcGVyaW9kLCB1MzIgKm1heF9jbGtfZGl2KTsKLQotc3RhdGlj IHN0cnVjdCB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQl2b2lkIF9faW9tZW0J KmJhc2U7Ci0KLQl1bnNpZ25lZCBsb25nCWw0X2toejsKLQotCWVudW0gb21hcF9yZmJpX2RhdGF0 eXBlIGRhdGF0eXBlOwotCWVudW0gb21hcF9yZmJpX3BhcmFsbGVsbW9kZSBwYXJhbGxlbG1vZGU7 Ci0KLQllbnVtIG9tYXBfcmZiaV90ZV9tb2RlIHRlX21vZGU7Ci0JaW50IHRlX2VuYWJsZWQ7Ci0K LQl2b2lkICgqZnJhbWVkb25lX2NhbGxiYWNrKSh2b2lkICpkYXRhKTsKLQl2b2lkICpmcmFtZWRv bmVfY2FsbGJhY2tfZGF0YTsKLQotCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldlsyXTsK LQotCXN0cnVjdCBzZW1hcGhvcmUgYnVzX2xvY2s7Ci0KLQlzdHJ1Y3Qgb21hcF92aWRlb190aW1p bmdzIHRpbWluZ3M7Ci0JaW50IHBpeGVsX3NpemU7Ci0JaW50IGRhdGFfbGluZXM7Ci0Jc3RydWN0 IHJmYmlfdGltaW5ncyBpbnRmX3RpbWluZ3M7Ci0KLQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlIG91 dHB1dDsKLX0gcmZiaTsKLQotc3RhdGljIGlubGluZSB2b2lkIHJmYmlfd3JpdGVfcmVnKGNvbnN0 IHN0cnVjdCByZmJpX3JlZyBpZHgsIHUzMiB2YWwpCi17Ci0JX19yYXdfd3JpdGVsKHZhbCwgcmZi aS5iYXNlICsgaWR4LmlkeCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHJmYmlfcmVhZF9yZWco Y29uc3Qgc3RydWN0IHJmYmlfcmVnIGlkeCkKLXsKLQlyZXR1cm4gX19yYXdfcmVhZGwocmZiaS5i YXNlICsgaWR4LmlkeCk7Ci19Ci0KLXN0YXRpYyBpbnQgcmZiaV9ydW50aW1lX2dldCh2b2lkKQot ewotCWludCByOwotCi0JRFNTREJHKCJyZmJpX3J1bnRpbWVfZ2V0XG4iKTsKLQotCXIgPSBwbV9y dW50aW1lX2dldF9zeW5jKCZyZmJpLnBkZXYtPmRldik7Ci0JV0FSTl9PTihyIDwgMCk7Ci0JcmV0 dXJuIHIgPCAwID8gciA6IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJmYmlfcnVudGltZV9wdXQodm9p ZCkKLXsKLQlpbnQgcjsKLQotCURTU0RCRygicmZiaV9ydW50aW1lX3B1dFxuIik7Ci0KLQlyID0g cG1fcnVudGltZV9wdXRfc3luYygmcmZiaS5wZGV2LT5kZXYpOwotCVdBUk5fT04ociA8IDAgJiYg ciAhPSAtRU5PU1lTKTsKLX0KLQotc3RhdGljIHZvaWQgcmZiaV9idXNfbG9jayh2b2lkKQotewot CWRvd24oJnJmYmkuYnVzX2xvY2spOwotfQotCi1zdGF0aWMgdm9pZCByZmJpX2J1c191bmxvY2so dm9pZCkKLXsKLQl1cCgmcmZiaS5idXNfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJmYmlfd3Jp dGVfY29tbWFuZChjb25zdCB2b2lkICpidWYsIHUzMiBsZW4pCi17Ci0Jc3dpdGNoIChyZmJpLnBh cmFsbGVsbW9kZSkgewotCWNhc2UgT01BUF9EU1NfUkZCSV9QQVJBTExFTE1PREVfODoKLQl7Ci0J CWNvbnN0IHU4ICpiID0gYnVmOwotCQlmb3IgKDsgbGVuOyBsZW4tLSkKLQkJCXJmYmlfd3JpdGVf cmVnKFJGQklfQ01ELCAqYisrKTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBPTUFQX0RTU19SRkJJ X1BBUkFMTEVMTU9ERV8xNjoKLQl7Ci0JCWNvbnN0IHUxNiAqdyA9IGJ1ZjsKLQkJQlVHX09OKGxl biAmIDEpOwotCQlmb3IgKDsgbGVuOyBsZW4gLT0gMikKLQkJCXJmYmlfd3JpdGVfcmVnKFJGQklf Q01ELCAqdysrKTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBPTUFQX0RTU19SRkJJX1BBUkFMTEVM TU9ERV85OgotCWNhc2UgT01BUF9EU1NfUkZCSV9QQVJBTExFTE1PREVfMTI6Ci0JZGVmYXVsdDoK LQkJQlVHKCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCByZmJpX3JlYWRfZGF0YSh2b2lkICpidWYs IHUzMiBsZW4pCi17Ci0Jc3dpdGNoIChyZmJpLnBhcmFsbGVsbW9kZSkgewotCWNhc2UgT01BUF9E U1NfUkZCSV9QQVJBTExFTE1PREVfODoKLQl7Ci0JCXU4ICpiID0gYnVmOwotCQlmb3IgKDsgbGVu OyBsZW4tLSkgewotCQkJcmZiaV93cml0ZV9yZWcoUkZCSV9SRUFELCAwKTsKLQkJCSpiKysgPSBy ZmJpX3JlYWRfcmVnKFJGQklfUkVBRCk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBPTUFQ X0RTU19SRkJJX1BBUkFMTEVMTU9ERV8xNjoKLQl7Ci0JCXUxNiAqdyA9IGJ1ZjsKLQkJQlVHX09O KGxlbiAmIH4xKTsKLQkJZm9yICg7IGxlbjsgbGVuIC09IDIpIHsKLQkJCXJmYmlfd3JpdGVfcmVn KFJGQklfUkVBRCwgMCk7Ci0JCQkqdysrID0gcmZiaV9yZWFkX3JlZyhSRkJJX1JFQUQpOwotCQl9 Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgT01BUF9EU1NfUkZCSV9QQVJBTExFTE1PREVfOToKLQlj YXNlIE9NQVBfRFNTX1JGQklfUEFSQUxMRUxNT0RFXzEyOgotCWRlZmF1bHQ6Ci0JCUJVRygpOwot CX0KLX0KLQotc3RhdGljIHZvaWQgcmZiaV93cml0ZV9kYXRhKGNvbnN0IHZvaWQgKmJ1ZiwgdTMy IGxlbikKLXsKLQlzd2l0Y2ggKHJmYmkucGFyYWxsZWxtb2RlKSB7Ci0JY2FzZSBPTUFQX0RTU19S RkJJX1BBUkFMTEVMTU9ERV84OgotCXsKLQkJY29uc3QgdTggKmIgPSBidWY7Ci0JCWZvciAoOyBs ZW47IGxlbi0tKQotCQkJcmZiaV93cml0ZV9yZWcoUkZCSV9QQVJBTSwgKmIrKyk7Ci0JCWJyZWFr OwotCX0KLQotCWNhc2UgT01BUF9EU1NfUkZCSV9QQVJBTExFTE1PREVfMTY6Ci0JewotCQljb25z dCB1MTYgKncgPSBidWY7Ci0JCUJVR19PTihsZW4gJiAxKTsKLQkJZm9yICg7IGxlbjsgbGVuIC09 IDIpCi0JCQlyZmJpX3dyaXRlX3JlZyhSRkJJX1BBUkFNLCAqdysrKTsKLQkJYnJlYWs7Ci0JfQot Ci0JY2FzZSBPTUFQX0RTU19SRkJJX1BBUkFMTEVMTU9ERV85OgotCWNhc2UgT01BUF9EU1NfUkZC SV9QQVJBTExFTE1PREVfMTI6Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0KLQl9Ci19Ci0KLXN0YXRp YyB2b2lkIHJmYmlfd3JpdGVfcGl4ZWxzKGNvbnN0IHZvaWQgX19pb21lbSAqYnVmLCBpbnQgc2Ny X3dpZHRoLAotCQl1MTYgeCwgdTE2IHksCi0JCXUxNiB3LCB1MTYgaCkKLXsKLQlpbnQgc3RhcnRf b2Zmc2V0ID0gc2NyX3dpZHRoICogeSArIHg7Ci0JaW50IGhvcml6X29mZnNldCA9IHNjcl93aWR0 aCAtIHc7Ci0JaW50IGk7Ci0KLQlpZiAocmZiaS5kYXRhdHlwZSA9PSBPTUFQX0RTU19SRkJJX0RB VEFUWVBFXzE2ICYmCi0JICAgcmZiaS5wYXJhbGxlbG1vZGUgPT0gT01BUF9EU1NfUkZCSV9QQVJB TExFTE1PREVfOCkgewotCQljb25zdCB1MTYgX19pb21lbSAqcGQgPSBidWY7Ci0JCXBkICs9IHN0 YXJ0X29mZnNldDsKLQotCQlmb3IgKDsgaDsgLS1oKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgdzsg KytpKSB7Ci0JCQkJY29uc3QgdTggX19pb21lbSAqYiA9IChjb25zdCB1OCBfX2lvbWVtICopcGQ7 Ci0JCQkJcmZiaV93cml0ZV9yZWcoUkZCSV9QQVJBTSwgX19yYXdfcmVhZGIoYisxKSk7Ci0JCQkJ cmZiaV93cml0ZV9yZWcoUkZCSV9QQVJBTSwgX19yYXdfcmVhZGIoYiswKSk7Ci0JCQkJKytwZDsK LQkJCX0KLQkJCXBkICs9IGhvcml6X29mZnNldDsKLQkJfQotCX0gZWxzZSBpZiAocmZiaS5kYXRh dHlwZSA9PSBPTUFQX0RTU19SRkJJX0RBVEFUWVBFXzI0ICYmCi0JICAgcmZiaS5wYXJhbGxlbG1v ZGUgPT0gT01BUF9EU1NfUkZCSV9QQVJBTExFTE1PREVfOCkgewotCQljb25zdCB1MzIgX19pb21l bSAqcGQgPSBidWY7Ci0JCXBkICs9IHN0YXJ0X29mZnNldDsKLQotCQlmb3IgKDsgaDsgLS1oKSB7 Ci0JCQlmb3IgKGkgPSAwOyBpIDwgdzsgKytpKSB7Ci0JCQkJY29uc3QgdTggX19pb21lbSAqYiA9 IChjb25zdCB1OCBfX2lvbWVtICopcGQ7Ci0JCQkJcmZiaV93cml0ZV9yZWcoUkZCSV9QQVJBTSwg X19yYXdfcmVhZGIoYisyKSk7Ci0JCQkJcmZiaV93cml0ZV9yZWcoUkZCSV9QQVJBTSwgX19yYXdf cmVhZGIoYisxKSk7Ci0JCQkJcmZiaV93cml0ZV9yZWcoUkZCSV9QQVJBTSwgX19yYXdfcmVhZGIo YiswKSk7Ci0JCQkJKytwZDsKLQkJCX0KLQkJCXBkICs9IGhvcml6X29mZnNldDsKLQkJfQotCX0g ZWxzZSBpZiAocmZiaS5kYXRhdHlwZSA9PSBPTUFQX0RTU19SRkJJX0RBVEFUWVBFXzE2ICYmCi0J ICAgcmZiaS5wYXJhbGxlbG1vZGUgPT0gT01BUF9EU1NfUkZCSV9QQVJBTExFTE1PREVfMTYpIHsK LQkJY29uc3QgdTE2IF9faW9tZW0gKnBkID0gYnVmOwotCQlwZCArPSBzdGFydF9vZmZzZXQ7Ci0K LQkJZm9yICg7IGg7IC0taCkgewotCQkJZm9yIChpID0gMDsgaSA8IHc7ICsraSkgewotCQkJCXJm Ymlfd3JpdGVfcmVnKFJGQklfUEFSQU0sIF9fcmF3X3JlYWR3KHBkKSk7Ci0JCQkJKytwZDsKLQkJ CX0KLQkJCXBkICs9IGhvcml6X29mZnNldDsKLQkJfQotCX0gZWxzZSB7Ci0JCUJVRygpOwotCX0K LX0KLQotc3RhdGljIGludCByZmJpX3RyYW5zZmVyX2FyZWEoc3RydWN0IG9tYXBfZHNzX2Rldmlj ZSAqZHNzZGV2LAotCQl2b2lkICgqY2FsbGJhY2spKHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKQot ewotCXUzMiBsOwotCWludCByOwotCXN0cnVjdCBvbWFwX292ZXJsYXlfbWFuYWdlciAqbWdyID0g cmZiaS5vdXRwdXQubWFuYWdlcjsKLQl1MTYgd2lkdGggPSByZmJpLnRpbWluZ3MueF9yZXM7Ci0J dTE2IGhlaWdodCA9IHJmYmkudGltaW5ncy55X3JlczsKLQotCS8qQlVHX09OKGNhbGxiYWNrID09 IDApOyovCi0JQlVHX09OKHJmYmkuZnJhbWVkb25lX2NhbGxiYWNrICE9IE5VTEwpOwotCi0JRFNT REJHKCJyZmJpX3RyYW5zZmVyX2FyZWEgJWR4JWRcbiIsIHdpZHRoLCBoZWlnaHQpOwotCi0JZHNz X21ncl9zZXRfdGltaW5ncyhtZ3IsICZyZmJpLnRpbWluZ3MpOwotCi0JciA9IGRzc19tZ3JfZW5h YmxlKG1ncik7Ci0JaWYgKHIpCi0JCXJldHVybiByOwotCi0JcmZiaS5mcmFtZWRvbmVfY2FsbGJh Y2sgPSBjYWxsYmFjazsKLQlyZmJpLmZyYW1lZG9uZV9jYWxsYmFja19kYXRhID0gZGF0YTsKLQot CXJmYmlfd3JpdGVfcmVnKFJGQklfUElYRUxfQ05ULCB3aWR0aCAqIGhlaWdodCk7Ci0KLQlsID0g cmZiaV9yZWFkX3JlZyhSRkJJX0NPTlRST0wpOwotCWwgPSBGTERfTU9EKGwsIDEsIDAsIDApOyAv KiBlbmFibGUgKi8KLQlpZiAoIXJmYmkudGVfZW5hYmxlZCkKLQkJbCA9IEZMRF9NT0QobCwgMSwg NCwgNCk7IC8qIElURSAqLwotCi0JcmZiaV93cml0ZV9yZWcoUkZCSV9DT05UUk9MLCBsKTsKLQot CXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBmcmFtZWRvbmVfY2FsbGJhY2sodm9pZCAqZGF0 YSkKLXsKLQl2b2lkICgqY2FsbGJhY2spKHZvaWQgKmRhdGEpOwotCi0JRFNTREJHKCJGUkFNRURP TkVcbiIpOwotCi0JUkVHX0ZMRF9NT0QoUkZCSV9DT05UUk9MLCAwLCAwLCAwKTsKLQotCWNhbGxi YWNrID0gcmZiaS5mcmFtZWRvbmVfY2FsbGJhY2s7Ci0JcmZiaS5mcmFtZWRvbmVfY2FsbGJhY2sg PSBOVUxMOwotCi0JaWYgKGNhbGxiYWNrICE9IE5VTEwpCi0JCWNhbGxiYWNrKHJmYmkuZnJhbWVk b25lX2NhbGxiYWNrX2RhdGEpOwotfQotCi0jaWYgMSAvKiBWRVJCT1NFICovCi1zdGF0aWMgdm9p ZCByZmJpX3ByaW50X3RpbWluZ3Modm9pZCkKLXsKLQl1MzIgbDsKLQl1MzIgdGltZTsKLQotCWwg PSByZmJpX3JlYWRfcmVnKFJGQklfQ09ORklHKDApKTsKLQl0aW1lID0gMTAwMDAwMDAwMCAvIHJm YmkubDRfa2h6OwotCWlmIChsICYgKDEgPDwgNCkpCi0JCXRpbWUgKj0gMjsKLQotCURTU0RCRygi VGljayB0aW1lICV1IHBzXG4iLCB0aW1lKTsKLQlsID0gcmZiaV9yZWFkX3JlZyhSRkJJX09OT0ZG X1RJTUUoMCkpOwotCURTU0RCRygiQ1NPTlRJTUUgJWQsIENTT0ZGVElNRSAlZCwgV0VPTlRJTUUg JWQsIFdFT0ZGVElNRSAlZCwgIgotCQkiUkVPTlRJTUUgJWQsIFJFT0ZGVElNRSAlZFxuIiwKLQkJ bCAmIDB4MGYsIChsID4+IDQpICYgMHgzZiwgKGwgPj4gMTApICYgMHgwZiwgKGwgPj4gMTQpICYg MHgzZiwKLQkJKGwgPj4gMjApICYgMHgwZiwgKGwgPj4gMjQpICYgMHgzZik7Ci0KLQlsID0gcmZi aV9yZWFkX3JlZyhSRkJJX0NZQ0xFX1RJTUUoMCkpOwotCURTU0RCRygiV0VDWUNMRVRJTUUgJWQs IFJFQ1lDTEVUSU1FICVkLCBDU1BVTFNFV0lEVEggJWQsICIKLQkJIkFDQ0VTU1RJTUUgJWRcbiIs Ci0JCShsICYgMHgzZiksIChsID4+IDYpICYgMHgzZiwgKGwgPj4gMTIpICYgMHgzZiwKLQkJKGwg Pj4gMjIpICYgMHgzZik7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgcmZiaV9wcmludF90aW1pbmdz KHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0KLQotc3RhdGljIHUzMiBleHRpZl9jbGtfcGVyaW9kOwot Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcm91bmRfdG9fZXh0aWZfdGlja3ModW5zaWdu ZWQgbG9uZyBwcywgaW50IGRpdikKLXsKLQlpbnQgYnVzX3RpY2sgPSBleHRpZl9jbGtfcGVyaW9k ICogZGl2OwotCXJldHVybiAocHMgKyBidXNfdGljayAtIDEpIC8gYnVzX3RpY2sgKiBidXNfdGlj azsKLX0KLQotc3RhdGljIGludCBjYWxjX3JlZ190aW1pbmcoc3RydWN0IHJmYmlfdGltaW5ncyAq dCwgaW50IGRpdikKLXsKLQl0LT5jbGtfZGl2ID0gZGl2OwotCi0JdC0+Y3Nfb25fdGltZSA9IHJv dW5kX3RvX2V4dGlmX3RpY2tzKHQtPmNzX29uX3RpbWUsIGRpdik7Ci0KLQl0LT53ZV9vbl90aW1l ID0gcm91bmRfdG9fZXh0aWZfdGlja3ModC0+d2Vfb25fdGltZSwgZGl2KTsKLQl0LT53ZV9vZmZf dGltZSA9IHJvdW5kX3RvX2V4dGlmX3RpY2tzKHQtPndlX29mZl90aW1lLCBkaXYpOwotCXQtPndl X2N5Y2xlX3RpbWUgPSByb3VuZF90b19leHRpZl90aWNrcyh0LT53ZV9jeWNsZV90aW1lLCBkaXYp OwotCi0JdC0+cmVfb25fdGltZSA9IHJvdW5kX3RvX2V4dGlmX3RpY2tzKHQtPnJlX29uX3RpbWUs IGRpdik7Ci0JdC0+cmVfb2ZmX3RpbWUgPSByb3VuZF90b19leHRpZl90aWNrcyh0LT5yZV9vZmZf dGltZSwgZGl2KTsKLQl0LT5yZV9jeWNsZV90aW1lID0gcm91bmRfdG9fZXh0aWZfdGlja3ModC0+ cmVfY3ljbGVfdGltZSwgZGl2KTsKLQotCXQtPmFjY2Vzc190aW1lID0gcm91bmRfdG9fZXh0aWZf dGlja3ModC0+YWNjZXNzX3RpbWUsIGRpdik7Ci0JdC0+Y3Nfb2ZmX3RpbWUgPSByb3VuZF90b19l eHRpZl90aWNrcyh0LT5jc19vZmZfdGltZSwgZGl2KTsKLQl0LT5jc19wdWxzZV93aWR0aCA9IHJv dW5kX3RvX2V4dGlmX3RpY2tzKHQtPmNzX3B1bHNlX3dpZHRoLCBkaXYpOwotCi0JRFNTREJHKCJb cmVnXWNzb24gJWQgY3NvZmYgJWQgcmVvbiAlZCByZW9mZiAlZFxuIiwKLQkgICAgICAgdC0+Y3Nf b25fdGltZSwgdC0+Y3Nfb2ZmX3RpbWUsIHQtPnJlX29uX3RpbWUsIHQtPnJlX29mZl90aW1lKTsK LQlEU1NEQkcoIltyZWddd2VvbiAlZCB3ZW9mZiAlZCByZWN5YyAlZCB3ZWN5YyAlZFxuIiwKLQkg ICAgICAgdC0+d2Vfb25fdGltZSwgdC0+d2Vfb2ZmX3RpbWUsIHQtPnJlX2N5Y2xlX3RpbWUsCi0J ICAgICAgIHQtPndlX2N5Y2xlX3RpbWUpOwotCURTU0RCRygiW3JlZ11yZGFjY2VzcyAlZCBjc3B1 bHNlICVkXG4iLAotCSAgICAgICB0LT5hY2Nlc3NfdGltZSwgdC0+Y3NfcHVsc2Vfd2lkdGgpOwot Ci0JcmV0dXJuIHJmYmlfY29udmVydF90aW1pbmdzKHQpOwotfQotCi1zdGF0aWMgaW50IGNhbGNf ZXh0aWZfdGltaW5ncyhzdHJ1Y3QgcmZiaV90aW1pbmdzICp0KQotewotCXUzMiBtYXhfY2xrX2Rp djsKLQlpbnQgZGl2OwotCi0JcmZiaV9nZXRfY2xrX2luZm8oJmV4dGlmX2Nsa19wZXJpb2QsICZt YXhfY2xrX2Rpdik7Ci0JZm9yIChkaXYgPSAxOyBkaXYgPD0gbWF4X2Nsa19kaXY7IGRpdisrKSB7 Ci0JCWlmIChjYWxjX3JlZ190aW1pbmcodCwgZGl2KSA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCi0J aWYgKGRpdiA8PSBtYXhfY2xrX2RpdikKLQkJcmV0dXJuIDA7Ci0KLQlEU1NFUlIoImNhbid0IHNl dHVwIHRpbWluZ3NcbiIpOwotCXJldHVybiAtMTsKLX0KLQotCi1zdGF0aWMgdm9pZCByZmJpX3Nl dF90aW1pbmdzKGludCByZmJpX21vZHVsZSwgc3RydWN0IHJmYmlfdGltaW5ncyAqdCkKLXsKLQlp bnQgcjsKLQotCWlmICghdC0+Y29udmVydGVkKSB7Ci0JCXIgPSBjYWxjX2V4dGlmX3RpbWluZ3Mo dCk7Ci0JCWlmIChyIDwgMCkKLQkJCURTU0VSUigiRmFpbGVkIHRvIGNhbGMgdGltaW5nc1xuIik7 Ci0JfQotCi0JQlVHX09OKCF0LT5jb252ZXJ0ZWQpOwotCi0JcmZiaV93cml0ZV9yZWcoUkZCSV9P Tk9GRl9USU1FKHJmYmlfbW9kdWxlKSwgdC0+dGltWzBdKTsKLQlyZmJpX3dyaXRlX3JlZyhSRkJJ X0NZQ0xFX1RJTUUocmZiaV9tb2R1bGUpLCB0LT50aW1bMV0pOwotCi0JLyogVElNRUdSQU5VTEFS SVRZICovCi0JUkVHX0ZMRF9NT0QoUkZCSV9DT05GSUcocmZiaV9tb2R1bGUpLAotCQkgICAgKHQt PnRpbVsyXSA/IDEgOiAwKSwgNCwgNCk7Ci0KLQlyZmJpX3ByaW50X3RpbWluZ3MoKTsKLX0KLQot c3RhdGljIGludCBwc190b19yZmJpX3RpY2tzKGludCB0aW1lLCBpbnQgZGl2KQotewotCXVuc2ln bmVkIGxvbmcgdGlja19wczsKLQlpbnQgcmV0OwotCi0JLyogQ2FsY3VsYXRlIGluIHBpY29zZWNz IHRvIHlpZWxkIG1vcmUgZXhhY3QgcmVzdWx0cyAqLwotCXRpY2tfcHMgPSAxMDAwMDAwMDAwIC8g KHJmYmkubDRfa2h6KSAqIGRpdjsKLQotCXJldCA9ICh0aW1lICsgdGlja19wcyAtIDEpIC8gdGlj a19wczsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHJmYmlfZ2V0X2Nsa19pbmZv KHUzMiAqY2xrX3BlcmlvZCwgdTMyICptYXhfY2xrX2RpdikKLXsKLQkqY2xrX3BlcmlvZCA9IDEw MDAwMDAwMDAgLyByZmJpLmw0X2toejsKLQkqbWF4X2Nsa19kaXYgPSAyOwotfQotCi1zdGF0aWMg aW50IHJmYmlfY29udmVydF90aW1pbmdzKHN0cnVjdCByZmJpX3RpbWluZ3MgKnQpCi17Ci0JdTMy IGw7Ci0JaW50IHJlb24sIHJlb2ZmLCB3ZW9uLCB3ZW9mZiwgY3NvbiwgY3NvZmYsIGNzX3B1bHNl OwotCWludCBhY3RpbSwgcmVjeWMsIHdlY3ljOwotCWludCBkaXYgPSB0LT5jbGtfZGl2OwotCi0J aWYgKGRpdiA8PSAwIHx8IGRpdiA+IDIpCi0JCXJldHVybiAtMTsKLQotCS8qIE1ha2Ugc3VyZSB0 aGF0IGFmdGVyIGNvbnZlcnNpb24gaXQgc3RpbGwgaG9sZHMgdGhhdDoKLQkgKiB3ZW9mZiA+IHdl b24sIHJlb2ZmID4gcmVvbiwgcmVjeWMgPj0gcmVvZmYsIHdlY3ljID49IHdlb2ZmLAotCSAqIGNz b2ZmID4gY3NvbiwgY3NvZmYgPj0gbWF4KHdlb2ZmLCByZW9mZiksIGFjdGltID4gcmVvbgotCSAq LwotCXdlb24gPSBwc190b19yZmJpX3RpY2tzKHQtPndlX29uX3RpbWUsIGRpdik7Ci0Jd2VvZmYg PSBwc190b19yZmJpX3RpY2tzKHQtPndlX29mZl90aW1lLCBkaXYpOwotCWlmICh3ZW9mZiA8PSB3 ZW9uKQotCQl3ZW9mZiA9IHdlb24gKyAxOwotCWlmICh3ZW9uID4gMHgwZikKLQkJcmV0dXJuIC0x OwotCWlmICh3ZW9mZiA+IDB4M2YpCi0JCXJldHVybiAtMTsKLQotCXJlb24gPSBwc190b19yZmJp X3RpY2tzKHQtPnJlX29uX3RpbWUsIGRpdik7Ci0JcmVvZmYgPSBwc190b19yZmJpX3RpY2tzKHQt PnJlX29mZl90aW1lLCBkaXYpOwotCWlmIChyZW9mZiA8PSByZW9uKQotCQlyZW9mZiA9IHJlb24g KyAxOwotCWlmIChyZW9uID4gMHgwZikKLQkJcmV0dXJuIC0xOwotCWlmIChyZW9mZiA+IDB4M2Yp Ci0JCXJldHVybiAtMTsKLQotCWNzb24gPSBwc190b19yZmJpX3RpY2tzKHQtPmNzX29uX3RpbWUs IGRpdik7Ci0JY3NvZmYgPSBwc190b19yZmJpX3RpY2tzKHQtPmNzX29mZl90aW1lLCBkaXYpOwot CWlmIChjc29mZiA8PSBjc29uKQotCQljc29mZiA9IGNzb24gKyAxOwotCWlmIChjc29mZiA8IG1h eCh3ZW9mZiwgcmVvZmYpKQotCQljc29mZiA9IG1heCh3ZW9mZiwgcmVvZmYpOwotCWlmIChjc29u ID4gMHgwZikKLQkJcmV0dXJuIC0xOwotCWlmIChjc29mZiA+IDB4M2YpCi0JCXJldHVybiAtMTsK LQotCWwgPSAgY3NvbjsKLQlsIHw9IGNzb2ZmIDw8IDQ7Ci0JbCB8PSB3ZW9uICA8PCAxMDsKLQls IHw9IHdlb2ZmIDw8IDE0OwotCWwgfD0gcmVvbiAgPDwgMjA7Ci0JbCB8PSByZW9mZiA8PCAyNDsK LQotCXQtPnRpbVswXSA9IGw7Ci0KLQlhY3RpbSA9IHBzX3RvX3JmYmlfdGlja3ModC0+YWNjZXNz X3RpbWUsIGRpdik7Ci0JaWYgKGFjdGltIDw9IHJlb24pCi0JCWFjdGltID0gcmVvbiArIDE7Ci0J aWYgKGFjdGltID4gMHgzZikKLQkJcmV0dXJuIC0xOwotCi0Jd2VjeWMgPSBwc190b19yZmJpX3Rp Y2tzKHQtPndlX2N5Y2xlX3RpbWUsIGRpdik7Ci0JaWYgKHdlY3ljIDwgd2VvZmYpCi0JCXdlY3lj ID0gd2VvZmY7Ci0JaWYgKHdlY3ljID4gMHgzZikKLQkJcmV0dXJuIC0xOwotCi0JcmVjeWMgPSBw c190b19yZmJpX3RpY2tzKHQtPnJlX2N5Y2xlX3RpbWUsIGRpdik7Ci0JaWYgKHJlY3ljIDwgcmVv ZmYpCi0JCXJlY3ljID0gcmVvZmY7Ci0JaWYgKHJlY3ljID4gMHgzZikKLQkJcmV0dXJuIC0xOwot Ci0JY3NfcHVsc2UgPSBwc190b19yZmJpX3RpY2tzKHQtPmNzX3B1bHNlX3dpZHRoLCBkaXYpOwot CWlmIChjc19wdWxzZSA+IDB4M2YpCi0JCXJldHVybiAtMTsKLQotCWwgPSAgd2VjeWM7Ci0JbCB8 PSByZWN5YyAgICA8PCA2OwotCWwgfD0gY3NfcHVsc2UgPDwgMTI7Ci0JbCB8PSBhY3RpbSAgICA8 PCAyMjsKLQotCXQtPnRpbVsxXSA9IGw7Ci0KLQl0LT50aW1bMl0gPSBkaXYgLSAxOwotCi0JdC0+ Y29udmVydGVkID0gMTsKLQotCXJldHVybiAwOwotfQotCi0vKiB4eHggRklYIG1vZHVsZSBzZWxl Y3Rpb24gbWlzc2luZyAqLwotc3RhdGljIGludCByZmJpX3NldHVwX3RlKGVudW0gb21hcF9yZmJp X3RlX21vZGUgbW9kZSwKLQkJCSAgICAgdW5zaWduZWQgaHNfcHVsc2VfdGltZSwgdW5zaWduZWQg dnNfcHVsc2VfdGltZSwKLQkJCSAgICAgaW50IGhzX3BvbF9pbnYsIGludCB2c19wb2xfaW52LCBp bnQgZXh0aWZfZGl2KQotewotCWludCBocywgdnM7Ci0JaW50IG1pbjsKLQl1MzIgbDsKLQotCWhz ID0gcHNfdG9fcmZiaV90aWNrcyhoc19wdWxzZV90aW1lLCAxKTsKLQl2cyA9IHBzX3RvX3JmYmlf dGlja3ModnNfcHVsc2VfdGltZSwgMSk7Ci0JaWYgKGhzIDwgMikKLQkJcmV0dXJuIC1FRE9NOwot CWlmIChtb2RlID09IE9NQVBfRFNTX1JGQklfVEVfTU9ERV8yKQotCQltaW4gPSAyOwotCWVsc2Ug LyogT01BUF9EU1NfUkZCSV9URV9NT0RFXzEgKi8KLQkJbWluID0gNDsKLQlpZiAodnMgPCBtaW4p Ci0JCXJldHVybiAtRURPTTsKLQlpZiAodnMgPT0gaHMpCi0JCXJldHVybiAtRUlOVkFMOwotCXJm YmkudGVfbW9kZSA9IG1vZGU7Ci0JRFNTREJHKCJzZXR1cF90ZTogbW9kZSAlZCBocyAlZCB2cyAl ZCBoc19pbnYgJWQgdnNfaW52ICVkXG4iLAotCQltb2RlLCBocywgdnMsIGhzX3BvbF9pbnYsIHZz X3BvbF9pbnYpOwotCi0JcmZiaV93cml0ZV9yZWcoUkZCSV9IU1lOQ19XSURUSCwgaHMpOwotCXJm Ymlfd3JpdGVfcmVnKFJGQklfVlNZTkNfV0lEVEgsIHZzKTsKLQotCWwgPSByZmJpX3JlYWRfcmVn KFJGQklfQ09ORklHKDApKTsKLQlpZiAoaHNfcG9sX2ludikKLQkJbCAmPSB+KDEgPDwgMjEpOwot CWVsc2UKLQkJbCB8PSAxIDw8IDIxOwotCWlmICh2c19wb2xfaW52KQotCQlsICY9IH4oMSA8PCAy MCk7Ci0JZWxzZQotCQlsIHw9IDEgPDwgMjA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogeHh4IEZJ WCBtb2R1bGUgc2VsZWN0aW9uIG1pc3NpbmcgKi8KLXN0YXRpYyBpbnQgcmZiaV9lbmFibGVfdGUo Ym9vbCBlbmFibGUsIHVuc2lnbmVkIGxpbmUpCi17Ci0JdTMyIGw7Ci0KLQlEU1NEQkcoInRlICVk IGxpbmUgJWQgbW9kZSAlZFxuIiwgZW5hYmxlLCBsaW5lLCByZmJpLnRlX21vZGUpOwotCWlmIChs aW5lID4gKDEgPDwgMTEpIC0gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlsID0gcmZiaV9yZWFk X3JlZyhSRkJJX0NPTkZJRygwKSk7Ci0JbCAmPSB+KDB4MyA8PCAyKTsKLQlpZiAoZW5hYmxlKSB7 Ci0JCXJmYmkudGVfZW5hYmxlZCA9IDE7Ci0JCWwgfD0gcmZiaS50ZV9tb2RlIDw8IDI7Ci0JfSBl bHNlCi0JCXJmYmkudGVfZW5hYmxlZCA9IDA7Ci0JcmZiaV93cml0ZV9yZWcoUkZCSV9DT05GSUco MCksIGwpOwotCXJmYmlfd3JpdGVfcmVnKFJGQklfTElORV9OVU1CRVIsIGxpbmUpOwotCi0JcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcmZiaV9jb25maWd1cmVfYnVzKGludCByZmJpX21vZHVs ZSwgaW50IGJwcCwgaW50IGxpbmVzKQotewotCXUzMiBsOwotCWludCBjeWNsZTEgPSAwLCBjeWNs ZTIgPSAwLCBjeWNsZTMgPSAwOwotCWVudW0gb21hcF9yZmJpX2N5Y2xlZm9ybWF0IGN5Y2xlZm9y bWF0OwotCWVudW0gb21hcF9yZmJpX2RhdGF0eXBlIGRhdGF0eXBlOwotCWVudW0gb21hcF9yZmJp X3BhcmFsbGVsbW9kZSBwYXJhbGxlbG1vZGU7Ci0KLQlzd2l0Y2ggKGJwcCkgewotCWNhc2UgMTI6 Ci0JCWRhdGF0eXBlID0gT01BUF9EU1NfUkZCSV9EQVRBVFlQRV8xMjsKLQkJYnJlYWs7Ci0JY2Fz ZSAxNjoKLQkJZGF0YXR5cGUgPSBPTUFQX0RTU19SRkJJX0RBVEFUWVBFXzE2OwotCQlicmVhazsK LQljYXNlIDE4OgotCQlkYXRhdHlwZSA9IE9NQVBfRFNTX1JGQklfREFUQVRZUEVfMTg7Ci0JCWJy ZWFrOwotCWNhc2UgMjQ6Ci0JCWRhdGF0eXBlID0gT01BUF9EU1NfUkZCSV9EQVRBVFlQRV8yNDsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCXJldHVybiAxOwotCX0KLQlyZmJpLmRh dGF0eXBlID0gZGF0YXR5cGU7Ci0KLQlzd2l0Y2ggKGxpbmVzKSB7Ci0JY2FzZSA4OgotCQlwYXJh bGxlbG1vZGUgPSBPTUFQX0RTU19SRkJJX1BBUkFMTEVMTU9ERV84OwotCQlicmVhazsKLQljYXNl IDk6Ci0JCXBhcmFsbGVsbW9kZSA9IE9NQVBfRFNTX1JGQklfUEFSQUxMRUxNT0RFXzk7Ci0JCWJy ZWFrOwotCWNhc2UgMTI6Ci0JCXBhcmFsbGVsbW9kZSA9IE9NQVBfRFNTX1JGQklfUEFSQUxMRUxN T0RFXzEyOwotCQlicmVhazsKLQljYXNlIDE2OgotCQlwYXJhbGxlbG1vZGUgPSBPTUFQX0RTU19S RkJJX1BBUkFMTEVMTU9ERV8xNjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCXJl dHVybiAxOwotCX0KLQlyZmJpLnBhcmFsbGVsbW9kZSA9IHBhcmFsbGVsbW9kZTsKLQotCWlmICgo YnBwICUgbGluZXMpID09IDApIHsKLQkJc3dpdGNoIChicHAgLyBsaW5lcykgewotCQljYXNlIDE6 Ci0JCQljeWNsZWZvcm1hdCA9IE9NQVBfRFNTX1JGQklfQ1lDTEVGT1JNQVRfMV8xOwotCQkJYnJl YWs7Ci0JCWNhc2UgMjoKLQkJCWN5Y2xlZm9ybWF0ID0gT01BUF9EU1NfUkZCSV9DWUNMRUZPUk1B VF8yXzE7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJY3ljbGVmb3JtYXQgPSBPTUFQX0RTU19S RkJJX0NZQ0xFRk9STUFUXzNfMTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQlVHKCk7Ci0J CQlyZXR1cm4gMTsKLQkJfQotCX0gZWxzZSBpZiAoKDIgKiBicHAgJSBsaW5lcykgPT0gMCkgewot CQlpZiAoKDIgKiBicHAgLyBsaW5lcykgPT0gMykKLQkJCWN5Y2xlZm9ybWF0ID0gT01BUF9EU1Nf UkZCSV9DWUNMRUZPUk1BVF8zXzI7Ci0JCWVsc2UgewotCQkJQlVHKCk7Ci0JCQlyZXR1cm4gMTsK LQkJfQotCX0gZWxzZSB7Ci0JCUJVRygpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlzd2l0Y2ggKGN5 Y2xlZm9ybWF0KSB7Ci0JY2FzZSBPTUFQX0RTU19SRkJJX0NZQ0xFRk9STUFUXzFfMToKLQkJY3lj bGUxID0gbGluZXM7Ci0JCWJyZWFrOwotCi0JY2FzZSBPTUFQX0RTU19SRkJJX0NZQ0xFRk9STUFU XzJfMToKLQkJY3ljbGUxID0gbGluZXM7Ci0JCWN5Y2xlMiA9IGxpbmVzOwotCQlicmVhazsKLQot CWNhc2UgT01BUF9EU1NfUkZCSV9DWUNMRUZPUk1BVF8zXzE6Ci0JCWN5Y2xlMSA9IGxpbmVzOwot CQljeWNsZTIgPSBsaW5lczsKLQkJY3ljbGUzID0gbGluZXM7Ci0JCWJyZWFrOwotCi0JY2FzZSBP TUFQX0RTU19SRkJJX0NZQ0xFRk9STUFUXzNfMjoKLQkJY3ljbGUxID0gbGluZXM7Ci0JCWN5Y2xl MiA9IChsaW5lcyAvIDIpIHwgKChsaW5lcyAvIDIpIDw8IDE2KTsKLQkJY3ljbGUzID0gKGxpbmVz IDw8IDE2KTsKLQkJYnJlYWs7Ci0JfQotCi0JUkVHX0ZMRF9NT0QoUkZCSV9DT05UUk9MLCAwLCAz LCAyKTsgLyogY2xlYXIgQ1MgKi8KLQotCWwgPSAwOwotCWwgfD0gRkxEX1ZBTChwYXJhbGxlbG1v ZGUsIDEsIDApOwotCWwgfD0gRkxEX1ZBTCgwLCAzLCAyKTsJCS8qIFRSSUdHRVJNT0RFOiBJVEUg Ki8KLQlsIHw9IEZMRF9WQUwoMCwgNCwgNCk7CQkvKiBUSU1FR1JBTlVMQVJJVFkgKi8KLQlsIHw9 IEZMRF9WQUwoZGF0YXR5cGUsIDYsIDUpOwotCS8qIGwgfD0gRkxEX1ZBTCgyLCA4LCA3KTsgKi8J LyogTDRGT1JNQVQsIDJwaXgvTDQgKi8KLQlsIHw9IEZMRF9WQUwoMCwgOCwgNyk7CS8qIEw0Rk9S TUFULCAxcGl4L0w0ICovCi0JbCB8PSBGTERfVkFMKGN5Y2xlZm9ybWF0LCAxMCwgOSk7Ci0JbCB8 PSBGTERfVkFMKDAsIDEyLCAxMSk7CS8qIFVOVVNFREJJVFMgKi8KLQlsIHw9IEZMRF9WQUwoMCwg MTYsIDE2KTsJLyogQTBQT0xBUklUWSAqLwotCWwgfD0gRkxEX1ZBTCgwLCAxNywgMTcpOwkvKiBS RVBPTEFSSVRZICovCi0JbCB8PSBGTERfVkFMKDAsIDE4LCAxOCk7CS8qIFdFUE9MQVJJVFkgKi8K LQlsIHw9IEZMRF9WQUwoMCwgMTksIDE5KTsJLyogQ1NQT0xBUklUWSAqLwotCWwgfD0gRkxEX1ZB TCgxLCAyMCwgMjApOwkvKiBURV9WU1lOQ19QT0xBUklUWSAqLwotCWwgfD0gRkxEX1ZBTCgxLCAy MSwgMjEpOwkvKiBIU1lOQ1BPTEFSSVRZICovCi0JcmZiaV93cml0ZV9yZWcoUkZCSV9DT05GSUco cmZiaV9tb2R1bGUpLCBsKTsKLQotCXJmYmlfd3JpdGVfcmVnKFJGQklfREFUQV9DWUNMRTEocmZi aV9tb2R1bGUpLCBjeWNsZTEpOwotCXJmYmlfd3JpdGVfcmVnKFJGQklfREFUQV9DWUNMRTIocmZi aV9tb2R1bGUpLCBjeWNsZTIpOwotCXJmYmlfd3JpdGVfcmVnKFJGQklfREFUQV9DWUNMRTMocmZi aV9tb2R1bGUpLCBjeWNsZTMpOwotCi0KLQlsID0gcmZiaV9yZWFkX3JlZyhSRkJJX0NPTlRST0wp OwotCWwgPSBGTERfTU9EKGwsIHJmYmlfbW9kdWxlKzEsIDMsIDIpOyAvKiBTZWxlY3QgQ1N4ICov Ci0JbCA9IEZMRF9NT0QobCwgMCwgMSwgMSk7IC8qIGNsZWFyIGJ5cGFzcyAqLwotCXJmYmlfd3Jp dGVfcmVnKFJGQklfQ09OVFJPTCwgbCk7Ci0KLQotCURTU0RCRygiUkZCSSBjb25maWc6IGJwcCAl ZCwgbGluZXMgJWQsIGN5Y2xlczogMHgleCAweCV4IDB4JXhcbiIsCi0JICAgICAgIGJwcCwgbGlu ZXMsIGN5Y2xlMSwgY3ljbGUyLCBjeWNsZTMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgcmZiaV9jb25maWd1cmUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCXJl dHVybiByZmJpX2NvbmZpZ3VyZV9idXMoZHNzZGV2LT5waHkucmZiaS5jaGFubmVsLCByZmJpLnBp eGVsX3NpemUsCi0JCQlyZmJpLmRhdGFfbGluZXMpOwotfQotCi1zdGF0aWMgaW50IHJmYmlfdXBk YXRlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldiwgdm9pZCAoKmNhbGxiYWNrKSh2b2lk ICopLAotCQl2b2lkICpkYXRhKQotewotCXJldHVybiByZmJpX3RyYW5zZmVyX2FyZWEoZHNzZGV2 LCBjYWxsYmFjaywgZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJmYmlfc2V0X3NpemUoc3RydWN0 IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCB1MTYgdywgdTE2IGgpCi17Ci0JcmZiaS50aW1pbmdz LnhfcmVzID0gdzsKLQlyZmJpLnRpbWluZ3MueV9yZXMgPSBoOwotfQotCi1zdGF0aWMgdm9pZCBy ZmJpX3NldF9waXhlbF9zaXplKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgaW50IHBp eGVsX3NpemUpCi17Ci0JcmZiaS5waXhlbF9zaXplID0gcGl4ZWxfc2l6ZTsKLX0KLQotc3RhdGlj IHZvaWQgcmZiaV9zZXRfZGF0YV9saW5lcyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYs IGludCBkYXRhX2xpbmVzKQotewotCXJmYmkuZGF0YV9saW5lcyA9IGRhdGFfbGluZXM7Ci19Ci0K LXN0YXRpYyB2b2lkIHJmYmlfc2V0X2ludGVyZmFjZV90aW1pbmdzKHN0cnVjdCBvbWFwX2Rzc19k ZXZpY2UgKmRzc2RldiwKLQkJc3RydWN0IHJmYmlfdGltaW5ncyAqdGltaW5ncykKLXsKLQlyZmJp LmludGZfdGltaW5ncyA9ICp0aW1pbmdzOwotfQotCi1zdGF0aWMgdm9pZCByZmJpX2R1bXBfcmVn cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCi17Ci0jZGVmaW5lIERVTVBSRUcocikgc2VxX3ByaW50Zihz LCAiJS0zNXMgJTA4eFxuIiwgI3IsIHJmYmlfcmVhZF9yZWcocikpCi0KLQlpZiAocmZiaV9ydW50 aW1lX2dldCgpKQotCQlyZXR1cm47Ci0KLQlEVU1QUkVHKFJGQklfUkVWSVNJT04pOwotCURVTVBS RUcoUkZCSV9TWVNDT05GSUcpOwotCURVTVBSRUcoUkZCSV9TWVNTVEFUVVMpOwotCURVTVBSRUco UkZCSV9DT05UUk9MKTsKLQlEVU1QUkVHKFJGQklfUElYRUxfQ05UKTsKLQlEVU1QUkVHKFJGQklf TElORV9OVU1CRVIpOwotCURVTVBSRUcoUkZCSV9DTUQpOwotCURVTVBSRUcoUkZCSV9QQVJBTSk7 Ci0JRFVNUFJFRyhSRkJJX0RBVEEpOwotCURVTVBSRUcoUkZCSV9SRUFEKTsKLQlEVU1QUkVHKFJG QklfU1RBVFVTKTsKLQotCURVTVBSRUcoUkZCSV9DT05GSUcoMCkpOwotCURVTVBSRUcoUkZCSV9P Tk9GRl9USU1FKDApKTsKLQlEVU1QUkVHKFJGQklfQ1lDTEVfVElNRSgwKSk7Ci0JRFVNUFJFRyhS RkJJX0RBVEFfQ1lDTEUxKDApKTsKLQlEVU1QUkVHKFJGQklfREFUQV9DWUNMRTIoMCkpOwotCURV TVBSRUcoUkZCSV9EQVRBX0NZQ0xFMygwKSk7Ci0KLQlEVU1QUkVHKFJGQklfQ09ORklHKDEpKTsK LQlEVU1QUkVHKFJGQklfT05PRkZfVElNRSgxKSk7Ci0JRFVNUFJFRyhSRkJJX0NZQ0xFX1RJTUUo MSkpOwotCURVTVBSRUcoUkZCSV9EQVRBX0NZQ0xFMSgxKSk7Ci0JRFVNUFJFRyhSRkJJX0RBVEFf Q1lDTEUyKDEpKTsKLQlEVU1QUkVHKFJGQklfREFUQV9DWUNMRTMoMSkpOwotCi0JRFVNUFJFRyhS RkJJX1ZTWU5DX1dJRFRIKTsKLQlEVU1QUkVHKFJGQklfSFNZTkNfV0lEVEgpOwotCi0JcmZiaV9y dW50aW1lX3B1dCgpOwotI3VuZGVmIERVTVBSRUcKLX0KLQotc3RhdGljIHZvaWQgcmZiaV9jb25m aWdfbGNkX21hbmFnZXIoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCXN0cnVj dCBvbWFwX292ZXJsYXlfbWFuYWdlciAqbWdyID0gcmZiaS5vdXRwdXQubWFuYWdlcjsKLQlzdHJ1 Y3QgZHNzX2xjZF9tZ3JfY29uZmlnIG1ncl9jb25maWc7Ci0KLQltZ3JfY29uZmlnLmlvX3BhZF9t b2RlID0gRFNTX0lPX1BBRF9NT0RFX1JGQkk7Ci0KLQltZ3JfY29uZmlnLnN0YWxsbW9kZSA9IHRy dWU7Ci0JLyogRG8gd2UgbmVlZCBmaWZvaGFuZGNoZWNrIGZvciBSRkJJPyAqLwotCW1ncl9jb25m aWcuZmlmb2hhbmRjaGVjayA9IGZhbHNlOwotCi0JbWdyX2NvbmZpZy52aWRlb19wb3J0X3dpZHRo ID0gcmZiaS5waXhlbF9zaXplOwotCW1ncl9jb25maWcubGNkZW5fc2lnX3BvbGFyaXR5ID0gMDsK LQotCWRzc19tZ3Jfc2V0X2xjZF9jb25maWcobWdyLCAmbWdyX2NvbmZpZyk7Ci0KLQkvKgotCSAq IFNldCByZmJpLnRpbWluZ3Mgd2l0aCBkZWZhdWx0IHZhbHVlcywgdGhlIHhfcmVzIGFuZCB5X3Jl cyBmaWVsZHMKLQkgKiBhcmUgZXhwZWN0ZWQgdG8gYmUgYWxyZWFkeSBjb25maWd1cmVkIGJ5IHRo ZSBwYW5lbCBkcml2ZXIgdmlhCi0JICogb21hcGRzc19yZmJpX3NldF9zaXplKCkKLQkgKi8KLQly ZmJpLnRpbWluZ3MuaHN3ID0gMTsKLQlyZmJpLnRpbWluZ3MuaGZwID0gMTsKLQlyZmJpLnRpbWlu Z3MuaGJwID0gMTsKLQlyZmJpLnRpbWluZ3MudnN3ID0gMTsKLQlyZmJpLnRpbWluZ3MudmZwID0g MDsKLQlyZmJpLnRpbWluZ3MudmJwID0gMDsKLQotCXJmYmkudGltaW5ncy5pbnRlcmxhY2UgPSBm YWxzZTsKLQlyZmJpLnRpbWluZ3MuaHN5bmNfbGV2ZWwgPSBPTUFQRFNTX1NJR19BQ1RJVkVfSElH SDsKLQlyZmJpLnRpbWluZ3MudnN5bmNfbGV2ZWwgPSBPTUFQRFNTX1NJR19BQ1RJVkVfSElHSDsK LQlyZmJpLnRpbWluZ3MuZGF0YV9wY2xrX2VkZ2UgPSBPTUFQRFNTX0RSSVZFX1NJR19SSVNJTkdf RURHRTsKLQlyZmJpLnRpbWluZ3MuZGVfbGV2ZWwgPSBPTUFQRFNTX1NJR19BQ1RJVkVfSElHSDsK LQlyZmJpLnRpbWluZ3Muc3luY19wY2xrX2VkZ2UgPSBPTUFQRFNTX0RSSVZFX1NJR19GQUxMSU5H X0VER0U7Ci0KLQlkc3NfbWdyX3NldF90aW1pbmdzKG1nciwgJnJmYmkudGltaW5ncyk7Ci19Ci0K LXN0YXRpYyBpbnQgcmZiaV9kaXNwbGF5X2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpk c3NkZXYpCi17Ci0Jc3RydWN0IG9tYXBfZHNzX2RldmljZSAqb3V0ID0gJnJmYmkub3V0cHV0Owot CWludCByOwotCi0JaWYgKG91dC0+bWFuYWdlciA9PSBOVUxMKSB7Ci0JCURTU0VSUigiZmFpbGVk IHRvIGVuYWJsZSBkaXNwbGF5OiBubyBvdXRwdXQvbWFuYWdlclxuIik7Ci0JCXJldHVybiAtRU5P REVWOwotCX0KLQotCXIgPSByZmJpX3J1bnRpbWVfZ2V0KCk7Ci0JaWYgKHIpCi0JCXJldHVybiBy OwotCi0JciA9IGRzc19tZ3JfcmVnaXN0ZXJfZnJhbWVkb25lX2hhbmRsZXIob3V0LT5tYW5hZ2Vy LAotCQkJZnJhbWVkb25lX2NhbGxiYWNrLCBOVUxMKTsKLQlpZiAocikgewotCQlEU1NFUlIoImNh bid0IGdldCBGUkFNRURPTkUgaXJxXG4iKTsKLQkJZ290byBlcnIxOwotCX0KLQotCXJmYmlfY29u ZmlnX2xjZF9tYW5hZ2VyKGRzc2Rldik7Ci0KLQlyZmJpX2NvbmZpZ3VyZV9idXMoZHNzZGV2LT5w aHkucmZiaS5jaGFubmVsLCByZmJpLnBpeGVsX3NpemUsCi0JCQlyZmJpLmRhdGFfbGluZXMpOwot Ci0JcmZiaV9zZXRfdGltaW5ncyhkc3NkZXYtPnBoeS5yZmJpLmNoYW5uZWwsICZyZmJpLmludGZf dGltaW5ncyk7Ci0KLQlyZXR1cm4gMDsKLWVycjE6Ci0JcmZiaV9ydW50aW1lX3B1dCgpOwotCXJl dHVybiByOwotfQotCi1zdGF0aWMgdm9pZCByZmJpX2Rpc3BsYXlfZGlzYWJsZShzdHJ1Y3Qgb21h cF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0Jc3RydWN0IG9tYXBfZHNzX2RldmljZSAqb3V0ID0g JnJmYmkub3V0cHV0OwotCi0JZHNzX21ncl91bnJlZ2lzdGVyX2ZyYW1lZG9uZV9oYW5kbGVyKG91 dC0+bWFuYWdlciwKLQkJCWZyYW1lZG9uZV9jYWxsYmFjaywgTlVMTCk7Ci0KLQlyZmJpX3J1bnRp bWVfcHV0KCk7Ci19Ci0KLXN0YXRpYyBpbnQgcmZiaV9pbml0X2Rpc3BsYXkoc3RydWN0IG9tYXBf ZHNzX2RldmljZSAqZHNzZGV2KQotewotCXJmYmkuZHNzZGV2W2Rzc2Rldi0+cGh5LnJmYmkuY2hh bm5lbF0gPSBkc3NkZXY7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJmYmlfaW5pdF9v dXRwdXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3Qgb21hcF9kc3Nf ZGV2aWNlICpvdXQgPSAmcmZiaS5vdXRwdXQ7Ci0KLQlvdXQtPmRldiA9ICZwZGV2LT5kZXY7Ci0J b3V0LT5pZCA9IE9NQVBfRFNTX09VVFBVVF9EQkk7Ci0Jb3V0LT5vdXRwdXRfdHlwZSA9IE9NQVBf RElTUExBWV9UWVBFX0RCSTsKLQlvdXQtPm5hbWUgPSAicmZiaS4wIjsKLQlvdXQtPmRpc3BjX2No YW5uZWwgPSBPTUFQX0RTU19DSEFOTkVMX0xDRDsKLQlvdXQtPm93bmVyID0gVEhJU19NT0RVTEU7 Ci0KLQlvbWFwZHNzX3JlZ2lzdGVyX291dHB1dChvdXQpOwotfQotCi1zdGF0aWMgdm9pZCByZmJp X3VuaW5pdF9vdXRwdXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3Qg b21hcF9kc3NfZGV2aWNlICpvdXQgPSAmcmZiaS5vdXRwdXQ7Ci0KLQlvbWFwZHNzX3VucmVnaXN0 ZXJfb3V0cHV0KG91dCk7Ci19Ci0KLS8qIFJGQkkgSFcgSVAgaW5pdGlhbGlzYXRpb24gKi8KLXN0 YXRpYyBpbnQgcmZiaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFz dGVyLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19w bGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQl1MzIgcmV2OwotCXN0cnVjdCByZXNvdXJjZSAqcmZiaV9t ZW07Ci0Jc3RydWN0IGNsayAqY2xrOwotCWludCByOwotCi0JcmZiaS5wZGV2ID0gcGRldjsKLQot CXNlbWFfaW5pdCgmcmZiaS5idXNfbG9jaywgMSk7Ci0KLQlyZmJpX21lbSA9IHBsYXRmb3JtX2dl dF9yZXNvdXJjZShyZmJpLnBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAoIXJmYmlfbWVt KSB7Ci0JCURTU0VSUigiY2FuJ3QgZ2V0IElPUkVTT1VSQ0VfTUVNIFJGQklcbiIpOwotCQlyZXR1 cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZmJpLmJhc2UgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwg cmZiaV9tZW0tPnN0YXJ0LAotCQkJCSByZXNvdXJjZV9zaXplKHJmYmlfbWVtKSk7Ci0JaWYgKCFy ZmJpLmJhc2UpIHsKLQkJRFNTRVJSKCJjYW4ndCBpb3JlbWFwIFJGQklcbiIpOwotCQlyZXR1cm4g LUVOT01FTTsKLQl9Ci0KLQljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpY2siKTsKLQlpZiAo SVNfRVJSKGNsaykpIHsKLQkJRFNTRVJSKCJjYW4ndCBnZXQgaWNrXG4iKTsKLQkJcmV0dXJuIFBU Ul9FUlIoY2xrKTsKLQl9Ci0KLQlyZmJpLmw0X2toeiA9IGNsa19nZXRfcmF0ZShjbGspIC8gMTAw MDsKLQotCWNsa19wdXQoY2xrKTsKLQotCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwot Ci0JciA9IHJmYmlfcnVudGltZV9nZXQoKTsKLQlpZiAocikKLQkJZ290byBlcnJfcnVudGltZV9n ZXQ7Ci0KLQltc2xlZXAoMTApOwotCi0JcmV2ID0gcmZiaV9yZWFkX3JlZyhSRkJJX1JFVklTSU9O KTsKLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJPTUFQIFJGQkkgcmV2ICVkLiVkXG4iLAotCSAgICAg ICBGTERfR0VUKHJldiwgNywgNCksIEZMRF9HRVQocmV2LCAzLCAwKSk7Ci0KLQlyZmJpX3J1bnRp bWVfcHV0KCk7Ci0KLQlkc3NfZGVidWdmc19jcmVhdGVfZmlsZSgicmZiaSIsIHJmYmlfZHVtcF9y ZWdzKTsKLQotCXJmYmlfaW5pdF9vdXRwdXQocGRldik7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX3J1 bnRpbWVfZ2V0OgotCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKLQlyZXR1cm4gcjsK LX0KLQotc3RhdGljIHZvaWQgcmZiaV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qg ZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCi0JcmZiaV91bmluaXRfb3V0cHV0KHBk ZXYpOwotCi0JcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwotCi0JcmV0dXJuIDA7Ci19 Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyByZmJpX2NvbXBvbmVudF9vcHMg PSB7Ci0JLmJpbmQJPSByZmJpX2JpbmQsCi0JLnVuYmluZAk9IHJmYmlfdW5iaW5kLAotfTsKLQot c3RhdGljIGludCByZmJpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0J cmV0dXJuIGNvbXBvbmVudF9hZGQoJnBkZXYtPmRldiwgJnJmYmlfY29tcG9uZW50X29wcyk7Ci19 Ci0KLXN0YXRpYyBpbnQgcmZiaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK LXsKLQljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZyZmJpX2NvbXBvbmVudF9vcHMpOwotCXJl dHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJmYmlfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZp Y2UgKmRldikKLXsKLQlkaXNwY19ydW50aW1lX3B1dCgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBpbnQgcmZiaV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50 IHI7Ci0KLQlyID0gZGlzcGNfcnVudGltZV9nZXQoKTsKLQlpZiAociA8IDApCi0JCXJldHVybiBy OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyByZmJp X3BtX29wcyA9IHsKLQkucnVudGltZV9zdXNwZW5kID0gcmZiaV9ydW50aW1lX3N1c3BlbmQsCi0J LnJ1bnRpbWVfcmVzdW1lID0gcmZiaV9ydW50aW1lX3Jlc3VtZSwKLX07Ci0KLXN0YXRpYyBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBfcmZiaWh3X2RyaXZlciA9IHsKLQkucHJvYmUJCT0gcmZi aV9wcm9iZSwKLQkucmVtb3ZlICAgICAgICAgPSByZmJpX3JlbW92ZSwKLQkuZHJpdmVyICAgICAg ICAgPSB7Ci0JCS5uYW1lICAgPSAib21hcGRzc19yZmJpIiwKLQkJLnBtCT0gJnJmYmlfcG1fb3Bz LAotCQkuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsCi0JfSwKLX07Ci0KLWludCBfX2luaXQg cmZiaV9pbml0X3BsYXRmb3JtX2RyaXZlcih2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9kcml2 ZXJfcmVnaXN0ZXIoJm9tYXBfcmZiaWh3X2RyaXZlcik7Ci19Ci0KLXZvaWQgcmZiaV91bmluaXRf cGxhdGZvcm1fZHJpdmVyKHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9t YXBfcmZiaWh3X2RyaXZlcik7Ci19CkluZGV4OiBiL2luY2x1ZGUvdmlkZW8vb21hcGZiX2Rzcy5o Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIGEvaW5jbHVkZS92aWRlby9vbWFwZmJfZHNzLmgJMjAxOC0wNC0yNyAx NjoyNDo0OC4xNzE2MzIwMDcgKzAyMDAKKysrIGIvaW5jbHVkZS92aWRlby9vbWFwZmJfZHNzLmgJ MjAxOC0wNC0yNyAxNjoyNjo1OC41NjM2MzUyOTEgKzAyMDAKQEAgLTExOCwxMSArMTE4LDYgQEAg ZW51bSBvbWFwX2Rzc190cmFuc19rZXlfdHlwZSB7CiAJT01BUF9EU1NfQ09MT1JfS0VZX1ZJRF9T UkMgPSAxLAogfTsKIAotZW51bSBvbWFwX3JmYmlfdGVfbW9kZSB7Ci0JT01BUF9EU1NfUkZCSV9U RV9NT0RFXzEgPSAxLAotCU9NQVBfRFNTX1JGQklfVEVfTU9ERV8yID0gMiwKLX07Ci0KIGVudW0g b21hcF9kc3Nfc2lnbmFsX2xldmVsIHsKIAlPTUFQRFNTX1NJR19BQ1RJVkVfTE9XLAogCU9NQVBE U1NfU0lHX0FDVElWRV9ISUdILApAQCAtMTkzLDI3ICsxODgsNiBAQCBlbnVtIG9tYXBfZHNzX291 dHB1dF9pZCB7CiAJT01BUF9EU1NfT1VUUFVUX0hETUkJPSAxIDw8IDYsCiB9OwogCi0vKiBSRkJJ ICovCi0KLXN0cnVjdCByZmJpX3RpbWluZ3MgewotCWludCBjc19vbl90aW1lOwotCWludCBjc19v ZmZfdGltZTsKLQlpbnQgd2Vfb25fdGltZTsKLQlpbnQgd2Vfb2ZmX3RpbWU7Ci0JaW50IHJlX29u X3RpbWU7Ci0JaW50IHJlX29mZl90aW1lOwotCWludCB3ZV9jeWNsZV90aW1lOwotCWludCByZV9j eWNsZV90aW1lOwotCWludCBjc19wdWxzZV93aWR0aDsKLQlpbnQgYWNjZXNzX3RpbWU7Ci0KLQlp bnQgY2xrX2RpdjsKLQotCXUzMiB0aW1bNV07ICAgICAgICAgICAgIC8qIHNldCBieSByZmJpX2Nv bnZlcnRfdGltaW5ncygpICovCi0KLQlpbnQgY29udmVydGVkOwotfTsKLQogLyogRFNJICovCiAK IGVudW0gb21hcF9kc3NfZHNpX3RyYW5zX21vZGUgewpAQCAtNjQ1LDExICs2MTksNiBAQCBzdHJ1 Y3Qgb21hcF9kc3NfZGV2aWNlIHsKIAkJfSBkcGk7CiAKIAkJc3RydWN0IHsKLQkJCXU4IGNoYW5u ZWw7Ci0JCQl1OCBkYXRhX2xpbmVzOwotCQl9IHJmYmk7Ci0KLQkJc3RydWN0IHsKIAkJCXU4IGRh dGFwYWlyczsKIAkJfSBzZGk7CiAKQEAgLTY3Miw3ICs2NDEsNiBAQCBzdHJ1Y3Qgb21hcF9kc3Nf ZGV2aWNlIHsKIAogCXN0cnVjdCB7CiAJCXU4IHBpeGVsX3NpemU7Ci0JCXN0cnVjdCByZmJpX3Rp bWluZ3MgcmZiaV90aW1pbmdzOwogCX0gY3RybDsKIAogCWNvbnN0IGNoYXIgKm5hbWU7CgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFp bGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK