From mboxrd@z Thu Jan 1 00:00:00 1970 From: adam radford Subject: [PATCH 1/1] 3ware 9000 driver update for linux-2.6.12-rc1-mm4 Date: Mon, 28 Mar 2005 16:53:46 -0800 Message-ID: Reply-To: adam radford Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_1628_14564561.1112057626184" Return-path: Received: from wproxy.gmail.com ([64.233.184.207]:11099 "EHLO wproxy.gmail.com") by vger.kernel.org with ESMTP id S262115AbVC2Axq (ORCPT ); Mon, 28 Mar 2005 19:53:46 -0500 Received: by wproxy.gmail.com with SMTP id 68so421398wra for ; Mon, 28 Mar 2005 16:53:46 -0800 (PST) Sender: linux-scsi-owner@vger.kernel.org List-Id: linux-scsi@vger.kernel.org To: James Bottomley , SCSI Mailing List ------=_Part_1628_14564561.1112057626184 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline The attached patch updates the driver for the 3ware 9000 series to do the following: - Add support for PAE mode. - Add lun support. - Fix twa_remove() to free irq handler/unregister_chrdev() before shutting down the card. - Change to new 'change_queue_depth' api. (From James) - Fix 'handled=1' ISR usage, remove bogus IRQ check (from Jeff Garzik) - Remove un-needed eh_abort handler. - Add support for embedded firmware error strings. Signed-off-by: Adam Radford James, Please apply ------=_Part_1628_14564561.1112057626184 Content-Type: application/octet-stream; name="3ware_linux_2.6.12-rc1-mm4.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="3ware_linux_2.6.12-rc1-mm4.patch" ZGlmZiAtTmF1ciBsaW51eC0yLjYuMTItcmMxLW1tMy9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jIGxp bnV4LTIuNi4xMi1yYzEtbW00L2RyaXZlcnMvc2NzaS8zdy05eHh4LmMKLS0tIGxpbnV4LTIuNi4x Mi1yYzEtbW0zL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMJMjAwNS0wMy0yOCAxNDo0NjowOC4wMDAw MDAwMDAgLTA4MDAKKysrIGxpbnV4LTIuNi4xMi1yYzEtbW00L2RyaXZlcnMvc2NzaS8zdy05eHh4 LmMJMjAwNS0wMy0yOCAxNTowOTowNy4wMDAwMDAwMDAgLTA4MDAKQEAgLTMsNyArMyw3IEBACiAK ICAgIFdyaXR0ZW4gQnk6IEFkYW0gUmFkZm9yZCA8bGludXhyYWlkQGFtY2MuY29tPgogCi0gICBD b3B5cmlnaHQgKEMpIDIwMDQgQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbi4KKyAg IENvcHlyaWdodCAoQykgMjAwNC0yMDA1IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRp b24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNTEsNiArNTEsMTQgQEAK ICAgIC0tLS0tLS0KICAgIDIuMjYuMDIuMDAwIC0gRHJpdmVyIGNsZWFudXAgZm9yIGtlcm5lbCBz dWJtaXNzaW9uLgogICAgMi4yNi4wMi4wMDEgLSBSZXBsYWNlIHNjaGVkdWxlX3RpbWVvdXQoKSBj YWxscyB3aXRoIG1zbGVlcCgpLgorICAgMi4yNi4wMi4wMDIgLSBBZGQgc3VwcG9ydCBmb3IgUEFF IG1vZGUuCisgICAgICAgICAgICAgICAgIEFkZCBsdW4gc3VwcG9ydC4KKyAgICAgICAgICAgICAg ICAgRml4IHR3YV9yZW1vdmUoKSB0byBmcmVlIGlycSBoYW5kbGVyL3VucmVnaXN0ZXJfY2hyZGV2 KCkKKyAgICAgICAgICAgICAgICAgYmVmb3JlIHNodXR0aW5nIGRvd24gY2FyZC4KKyAgICAgICAg ICAgICAgICAgQ2hhbmdlIHRvIG5ldyAnY2hhbmdlX3F1ZXVlX2RlcHRoJyBhcGkuCisgICAgICAg ICAgICAgICAgIEZpeCAnaGFuZGxlZD0xJyBJU1IgdXNhZ2UsIHJlbW92ZSBib2d1cyBJUlEgY2hl Y2suCisgICAgICAgICAgICAgICAgIFJlbW92ZSB1bi1uZWVkZWQgZWhfYWJvcnQgaGFuZGxlci4K KyAgICAgICAgICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGVtYmVkZGVkIGZpcm13YXJlIGVycm9y IHN0cmluZ3MuCiAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC03Myw3ICs4MSw3 IEBACiAjaW5jbHVkZSAiM3ctOXh4eC5oIgogCiAvKiBHbG9iYWxzICovCi1zdGF0aWMgY29uc3Qg Y2hhciAqdHdhX2RyaXZlcl92ZXJzaW9uPSIyLjI2LjAyLjAwMSI7CisjZGVmaW5lIFRXX0RSSVZF Ul9WRVJTSU9OICIyLjI2LjAyLjAwMiIKIHN0YXRpYyBUV19EZXZpY2VfRXh0ZW5zaW9uICp0d2Ff ZGV2aWNlX2V4dGVuc2lvbl9saXN0W1RXX01BWF9TTE9UXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQg dHdhX2RldmljZV9leHRlbnNpb25fY291bnQ7CiBzdGF0aWMgaW50IHR3YV9tYWpvciA9IC0xOwpA QCAtODMsNiArOTEsNyBAQAogTU9EVUxFX0FVVEhPUiAoIkFNQ0MiKTsKIE1PRFVMRV9ERVNDUklQ VElPTiAoIjN3YXJlIDkwMDAgU3RvcmFnZSBDb250cm9sbGVyIExpbnV4IERyaXZlciIpOwogTU9E VUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oVFdfRFJJVkVSX1ZFUlNJT04pOwog CiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCiBzdGF0aWMgdm9pZCB0d2FfYWVuX3F1ZXVlX2V2 ZW50KFRXX0RldmljZV9FeHRlbnNpb24gKnR3X2RldiwgVFdfQ29tbWFuZF9BcGFjaGVfSGVhZGVy ICpoZWFkZXIpOwpAQCAtMTA4LDkgKzExNyw5IEBACiBzdGF0aWMgaW50IHR3YV9wb2xsX3Jlc3Bv bnNlKFRXX0RldmljZV9FeHRlbnNpb24gKnR3X2RldiwgaW50IHJlcXVlc3RfaWQsIGludCBzZWNv bmRzKTsKIHN0YXRpYyBpbnQgdHdhX3BvbGxfc3RhdHVzX2dvbmUoVFdfRGV2aWNlX0V4dGVuc2lv biAqdHdfZGV2LCB1MzIgZmxhZywgaW50IHNlY29uZHMpOwogc3RhdGljIGludCB0d2FfcG9zdF9j b21tYW5kX3BhY2tldChUV19EZXZpY2VfRXh0ZW5zaW9uICp0d19kZXYsIGludCByZXF1ZXN0X2lk LCBjaGFyIGludGVybmFsKTsKLXN0YXRpYyBpbnQgdHdhX3Jlc2V0X2RldmljZV9leHRlbnNpb24o VFdfRGV2aWNlX0V4dGVuc2lvbiAqdHdfZGV2KTsKK3N0YXRpYyBpbnQgdHdhX3Jlc2V0X2Rldmlj ZV9leHRlbnNpb24oVFdfRGV2aWNlX0V4dGVuc2lvbiAqdHdfZGV2LCBpbnQgaW9jdGxfcmVzZXQp Owogc3RhdGljIGludCB0d2FfcmVzZXRfc2VxdWVuY2UoVFdfRGV2aWNlX0V4dGVuc2lvbiAqdHdf ZGV2LCBpbnQgc29mdF9yZXNldCk7Ci1zdGF0aWMgaW50IHR3YV9zY3Npb3BfZXhlY3V0ZV9zY3Np KFRXX0RldmljZV9FeHRlbnNpb24gKnR3X2RldiwgaW50IHJlcXVlc3RfaWQsIGNoYXIgKmNkYiwg aW50IHVzZV9zZywgVFdfU0dfQXBhY2hlICpzZ2xpc3RhcmcpOworc3RhdGljIGludCB0d2Ffc2Nz aW9wX2V4ZWN1dGVfc2NzaShUV19EZXZpY2VfRXh0ZW5zaW9uICp0d19kZXYsIGludCByZXF1ZXN0 X2lkLCBjaGFyICpjZGIsIGludCB1c2Vfc2csIFRXX1NHX0VudHJ5ICpzZ2xpc3RhcmcpOwogc3Rh dGljIHZvaWQgdHdhX3Njc2lvcF9leGVjdXRlX3Njc2lfY29tcGxldGUoVFdfRGV2aWNlX0V4dGVu c2lvbiAqdHdfZGV2LCBpbnQgcmVxdWVzdF9pZCk7CiBzdGF0aWMgY2hhciAqdHdhX3N0cmluZ19s b29rdXAodHdhX21lc3NhZ2VfdHlwZSAqdGFibGUsIHVuc2lnbmVkIGludCBhZW5fY29kZSk7CiBz dGF0aWMgdm9pZCB0d2FfdW5tYXBfc2NzaV9kYXRhKFRXX0RldmljZV9FeHRlbnNpb24gKnR3X2Rl diwgaW50IHJlcXVlc3RfaWQpOwpAQCAtMTI2LDcgKzEzNSw3IEBACiAJc3NpemVfdCBsZW47CiAK IAlzcGluX2xvY2tfaXJxc2F2ZSh0d19kZXYtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCWxl biA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiRHJpdmVyIHZlcnNpb246ICVzXG4iCisJbGVu ID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIzdy05eHh4IERyaXZlciB2ZXJzaW9uOiAlc1xu IgogCQkgICAgICAgIkN1cnJlbnQgY29tbWFuZHMgcG9zdGVkOiAgICU0ZFxuIgogCQkgICAgICAg Ik1heCBjb21tYW5kcyBwb3N0ZWQ6ICAgICAgICU0ZFxuIgogCQkgICAgICAgIkN1cnJlbnQgcGVu ZGluZyBjb21tYW5kczogICU0ZFxuIgpAQCAtMTM2LDkgKzE0NSw4IEBACiAJCSAgICAgICAiTGFz dCBzZWN0b3IgY291bnQ6ICAgICAgICAgJTRkXG4iCiAJCSAgICAgICAiTWF4IHNlY3RvciBjb3Vu dDogICAgICAgICAgJTRkXG4iCiAJCSAgICAgICAiU0NTSSBIb3N0IFJlc2V0czogICAgICAgICAg JTRkXG4iCi0JCSAgICAgICAiU0NTSSBBYm9ydHMvVGltZW91dHM6ICAgICAgJTRkXG4iCiAJCSAg ICAgICAiQUVOJ3M6ICAgICAgICAgICAgICAgICAgICAgJTRkXG4iLCAKLQkJICAgICAgIHR3YV9k cml2ZXJfdmVyc2lvbiwKKwkJICAgICAgIFRXX0RSSVZFUl9WRVJTSU9OLAogCQkgICAgICAgdHdf ZGV2LT5wb3N0ZWRfcmVxdWVzdF9jb3VudCwKIAkJICAgICAgIHR3X2Rldi0+bWF4X3Bvc3RlZF9y ZXF1ZXN0X2NvdW50LAogCQkgICAgICAgdHdfZGV2LT5wZW5kaW5nX3JlcXVlc3RfY291bnQsCkBA IC0xNDgsNDAgKzE1NiwxOSBAQAogCQkgICAgICAgdHdfZGV2LT5zZWN0b3JfY291bnQsCiAJCSAg ICAgICB0d19kZXYtPm1heF9zZWN0b3JfY291bnQsCiAJCSAgICAgICB0d19kZXYtPm51bV9yZXNl dHMsCi0JCSAgICAgICB0d19kZXYtPm51bV9hYm9ydHMsCiAJCSAgICAgICB0d19kZXYtPmFlbl9j b3VudCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh0d19kZXYtPmhvc3QtPmhvc3RfbG9jaywg ZmxhZ3MpOwogCXJldHVybiBsZW47CiB9IC8qIEVuZCB0d2Ffc2hvd19zdGF0cygpICovCiAKIC8q IFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYSBkZXZpY2VzIHF1ZXVlIGRlcHRoICovCi1zdGF0aWMg c3NpemVfdCB0d2Ffc3RvcmVfcXVldWVfZGVwdGgoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBj aGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBpbnQgdHdhX2NoYW5nZV9xdWV1ZV9kZXB0 aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxdWV1ZV9kZXB0aCkKIHsKLQlpbnQgcXVl dWVfZGVwdGg7Ci0Jc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2 KTsKLQotCXF1ZXVlX2RlcHRoID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAlpZiAo cXVldWVfZGVwdGggPiBUV19RX0xFTkdUSC0yKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcXVldWVf ZGVwdGggPSBUV19RX0xFTkdUSC0yOwogCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1T R19PUkRFUkVEX1RBRywgcXVldWVfZGVwdGgpOwotCi0JcmV0dXJuIGNvdW50OwotfSAvKiBFbmQg dHdhX3N0b3JlX3F1ZXVlX2RlcHRoKCkgKi8KLQotLyogQ3JlYXRlIHN5c2ZzICdxdWV1ZV9kZXB0 aCcgZW50cnkgKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSB0d2FfcXVldWVfZGVw dGhfYXR0ciA9IHsKLQkuYXR0ciA9IHsKLQkJLm5hbWUgPQkJInF1ZXVlX2RlcHRoIiwKLQkJLm1v ZGUgPQkJU19JUlVTUiB8IFNfSVdVU1IsCi0JfSwKLQkuc3RvcmUgPSB0d2Ffc3RvcmVfcXVldWVf ZGVwdGgKLX07Ci0KLS8qIERldmljZSBhdHRyaWJ1dGVzIGluaXRpYWxpemVyICovCi1zdGF0aWMg c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKnR3YV9kZXZfYXR0cnNbXSA9IHsKLQkmdHdhX3F1ZXVl X2RlcHRoX2F0dHIsCi0JTlVMTCwKLX07CisJcmV0dXJuIHF1ZXVlX2RlcHRoOworfSAvKiBFbmQg dHdhX2NoYW5nZV9xdWV1ZV9kZXB0aCgpICovCiAKIC8qIENyZWF0ZSBzeXNmcyAnc3RhdHMnIGVu dHJ5ICovCiBzdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgdHdhX2hvc3Rfc3Rh dHNfYXR0ciA9IHsKQEAgLTI2NSw3ICsyNTIsNyBAQAogewogCWludCByZXF1ZXN0X2lkID0gMDsK IAljaGFyIGNkYltUV19NQVhfQ0RCX0xFTl07Ci0JVFdfU0dfQXBhY2hlIHNnbGlzdFsxXTsKKwlU V19TR19FbnRyeSBzZ2xpc3RbMV07CiAJaW50IGZpbmlzaGVkID0gMCwgY291bnQgPSAwOwogCVRX X0NvbW1hbmRfRnVsbCAqZnVsbF9jb21tYW5kX3BhY2tldDsKIAlUV19Db21tYW5kX0FwYWNoZV9I ZWFkZXIgKmhlYWRlcjsKQEAgLTI4Niw3ICsyNzMsNyBAQAogCWNkYls0XSA9IFRXX0FMTE9DQVRJ T05fTEVOR1RIOyAvKiBhbGxvY2F0aW9uIGxlbmd0aCAqLwogCiAJLyogSW5pdGlhbGl6ZSBzZ2xp c3QgKi8KLQltZW1zZXQoJnNnbGlzdCwgMCwgc2l6ZW9mKFRXX1NHX0FwYWNoZSkpOworCW1lbXNl dCgmc2dsaXN0LCAwLCBzaXplb2YoVFdfU0dfRW50cnkpKTsKIAlzZ2xpc3RbMF0ubGVuZ3RoID0g VFdfU0VDVE9SX1NJWkU7CiAJc2dsaXN0WzBdLmFkZHJlc3MgPSB0d19kZXYtPmdlbmVyaWNfYnVm ZmVyX3BoeXNbcmVxdWVzdF9pZF07CiAKQEAgLTM1OSw2ICszNDYsNyBAQAogCVRXX0V2ZW50ICpl dmVudDsKIAl1bnNpZ25lZCBzaG9ydCBhZW47CiAJY2hhciBob3N0WzE2XTsKKwljaGFyICplcnJv cl9zdHI7CiAKIAl0d19kZXYtPmFlbl9jb3VudCsrOwogCkBAIC0zODUsNiArMzczLDkgQEAKIAll dmVudC0+c2VxdWVuY2VfaWQgPSB0d19kZXYtPmVycm9yX3NlcXVlbmNlX2lkOwogCXR3X2Rldi0+ ZXJyb3Jfc2VxdWVuY2VfaWQrKzsKIAorCS8qIENoZWNrIGZvciBlbWJlZGRlZCBlcnJvciBzdHJp bmcgKi8KKwllcnJvcl9zdHIgPSAmKGhlYWRlci0+ZXJyX3NwZWNpZmljX2Rlc2Nbc3RybGVuKGhl YWRlci0+ZXJyX3NwZWNpZmljX2Rlc2MpKzFdKTsKKwogCWhlYWRlci0+ZXJyX3NwZWNpZmljX2Rl c2Nbc2l6ZW9mKGhlYWRlci0+ZXJyX3NwZWNpZmljX2Rlc2MpIC0gMV0gPSAnXDAnOwogCWV2ZW50 LT5wYXJhbWV0ZXJfbGVuID0gc3RybGVuKGhlYWRlci0+ZXJyX3NwZWNpZmljX2Rlc2MpOwogCW1l bWNweShldmVudC0+cGFyYW1ldGVyX2RhdGEsIGhlYWRlci0+ZXJyX3NwZWNpZmljX2Rlc2MsIGV2 ZW50LT5wYXJhbWV0ZXJfbGVuKTsKQEAgLTM5Myw3ICszODQsNyBAQAogCQkgICAgICAgaG9zdCwK IAkJICAgICAgIHR3YV9hZW5fc2V2ZXJpdHlfbG9va3VwKFRXX1NFVl9PVVQoaGVhZGVyLT5zdGF0 dXNfYmxvY2suc2V2ZXJpdHlfX3Jlc2VydmVkKSksCiAJCSAgICAgICBUV19NRVNTQUdFX1NPVVJD RV9DT05UUk9MTEVSX0VWRU5ULCBhZW4sCi0JCSAgICAgICB0d2Ffc3RyaW5nX2xvb2t1cCh0d2Ff YWVuX3RhYmxlLCBhZW4pLAorCQkgICAgICAgZXJyb3Jfc3RyWzBdID09ICdcMCcgPyB0d2Ffc3Ry aW5nX2xvb2t1cCh0d2FfYWVuX3RhYmxlLCBhZW4pIDogZXJyb3Jfc3RyLAogCQkgICAgICAgaGVh ZGVyLT5lcnJfc3BlY2lmaWNfZGVzYyk7CiAJZWxzZQogCQl0d19kZXYtPmFlbl9jb3VudC0tOwpA QCAtNDA3LDcgKzM5OCw3IEBACiBzdGF0aWMgaW50IHR3YV9hZW5fcmVhZF9xdWV1ZShUV19EZXZp Y2VfRXh0ZW5zaW9uICp0d19kZXYsIGludCByZXF1ZXN0X2lkKQogewogCWNoYXIgY2RiW1RXX01B WF9DREJfTEVOXTsKLQlUV19TR19BcGFjaGUgc2dsaXN0WzFdOworCVRXX1NHX0VudHJ5IHNnbGlz dFsxXTsKIAlUV19Db21tYW5kX0Z1bGwgKmZ1bGxfY29tbWFuZF9wYWNrZXQ7CiAJaW50IHJldHZh bCA9IDE7CiAKQEAgLTQyMCw3ICs0MTEsNyBAQAogCWNkYls0XSA9IFRXX0FMTE9DQVRJT05fTEVO R1RIOyAvKiBhbGxvY2F0aW9uIGxlbmd0aCAqLwogCiAJLyogSW5pdGlhbGl6ZSBzZ2xpc3QgKi8K LQltZW1zZXQoJnNnbGlzdCwgMCwgc2l6ZW9mKFRXX1NHX0FwYWNoZSkpOworCW1lbXNldCgmc2ds aXN0LCAwLCBzaXplb2YoVFdfU0dfRW50cnkpKTsKIAlzZ2xpc3RbMF0ubGVuZ3RoID0gVFdfU0VD VE9SX1NJWkU7CiAJc2dsaXN0WzBdLmFkZHJlc3MgPSB0d19kZXYtPmdlbmVyaWNfYnVmZmVyX3Bo eXNbcmVxdWVzdF9pZF07CiAKQEAgLTU1OCwxOCArNTQ5LDE4IEBACiAJdTMyIGluaXRfY29ubmVj dF9yZXN1bHQgPSAwOwogCiAJaWYgKHR3YV9pbml0Y29ubmVjdGlvbih0d19kZXYsIFRXX0lOSVRf TUVTU0FHRV9DUkVESVRTLAotCQkJICAgICAgIFRXX0VYVEVOREVEX0lOSVRfQ09OTkVDVCwgVFdf Q1VSUkVOVF9GV19TUkwsCi0JCQkgICAgICAgVFdfOTAwMF9BUkNIX0lELCBUV19DVVJSRU5UX0ZX X0JSQU5DSCwKLQkJCSAgICAgICBUV19DVVJSRU5UX0ZXX0JVSUxELCAmZndfb25fY3Rscl9zcmws CisJCQkgICAgICAgVFdfRVhURU5ERURfSU5JVF9DT05ORUNULCBUV19DVVJSRU5UX0RSSVZFUl9T UkwsCisJCQkgICAgICAgVFdfOTAwMF9BUkNIX0lELCBUV19DVVJSRU5UX0RSSVZFUl9CUkFOQ0gs CisJCQkgICAgICAgVFdfQ1VSUkVOVF9EUklWRVJfQlVJTEQsICZmd19vbl9jdGxyX3NybCwKIAkJ CSAgICAgICAmZndfb25fY3Rscl9hcmNoX2lkLCAmZndfb25fY3Rscl9icmFuY2gsCiAJCQkgICAg ICAgJmZ3X29uX2N0bHJfYnVpbGQsICZpbml0X2Nvbm5lY3RfcmVzdWx0KSkgewogCQlUV19QUklO VEsodHdfZGV2LT5ob3N0LCBUV19EUklWRVIsIDB4NywgIkluaXRjb25uZWN0aW9uIGZhaWxlZCB3 aGlsZSBjaGVja2luZyBTUkwiKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JdHdfZGV2LT53b3JraW5n X3NybCA9IFRXX0NVUlJFTlRfRldfU1JMOwotCXR3X2Rldi0+d29ya2luZ19icmFuY2ggPSBUV19D VVJSRU5UX0ZXX0JSQU5DSDsKLQl0d19kZXYtPndvcmtpbmdfYnVpbGQgPSBUV19DVVJSRU5UX0ZX X0JVSUxEOworCXR3X2Rldi0+d29ya2luZ19zcmwgPSBmd19vbl9jdGxyX3NybDsKKwl0d19kZXYt PndvcmtpbmdfYnJhbmNoID0gZndfb25fY3Rscl9icmFuY2g7CisJdHdfZGV2LT53b3JraW5nX2J1 aWxkID0gZndfb25fY3Rscl9idWlsZDsKIAogCS8qIFRyeSBiYXNlIG1vZGUgY29tcGF0aWJpbGl0 eSAqLwogCWlmICghKGluaXRfY29ubmVjdF9yZXN1bHQgJiBUV19DVExSX0ZXX0NPTVBBVElCTEUp KSB7CkBAIC01ODQsNyArNTc1LDcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJCWlmICghKGluaXRf Y29ubmVjdF9yZXN1bHQgJiBUV19DVExSX0ZXX0NPTVBBVElCTEUpKSB7Ci0JCQlpZiAoVFdfQ1VS UkVOVF9GV19TUkwgPiBmd19vbl9jdGxyX3NybCkgeworCQkJaWYgKFRXX0NVUlJFTlRfRFJJVkVS X1NSTCA+IGZ3X29uX2N0bHJfc3JsKSB7CiAJCQkJVFdfUFJJTlRLKHR3X2Rldi0+aG9zdCwgVFdf RFJJVkVSLCAweDMyLCAiRmlybXdhcmUgYW5kIGRyaXZlciBpbmNvbXBhdGliaWxpdHk6IHBsZWFz ZSB1cGdyYWRlIGZpcm13YXJlIik7CiAJCQl9IGVsc2UgewogCQkJCVRXX1BSSU5USyh0d19kZXYt Pmhvc3QsIFRXX0RSSVZFUiwgMHgzMywgIkZpcm13YXJlIGFuZCBkcml2ZXIgaW5jb21wYXRpYmls aXR5OiBwbGVhc2UgdXBncmFkZSBkcml2ZXIiKTsKQEAgLTY0MSw3ICs2MzIsNyBAQAogCWRhdGFf YnVmZmVyX2xlbmd0aF9hZGp1c3RlZCA9IChkcml2ZXJfY29tbWFuZC5idWZmZXJfbGVuZ3RoICsg NTExKSAmIH41MTE7CiAKIAkvKiBOb3cgYWxsb2NhdGUgaW9jdGwgYnVmIG1lbW9yeSAqLwotCWNw dV9hZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodHdfZGV2LT50d19wY2lfZGV2LCBkYXRhX2J1 ZmZlcl9sZW5ndGhfYWRqdXN0ZWQrc2l6ZW9mKFRXX0lvY3RsX0J1Zl9BcGFjaGUpIC0gMSwgJmRt YV9oYW5kbGUpOworCWNwdV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KCZ0d19kZXYtPnR3X3Bj aV9kZXYtPmRldiwgZGF0YV9idWZmZXJfbGVuZ3RoX2FkanVzdGVkK3NpemVvZihUV19Jb2N0bF9C dWZfQXBhY2hlKSAtIDEsICZkbWFfaGFuZGxlLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNwdV9hZGRy KSB7CiAJCXJldHZhbCA9IFRXX0lPQ1RMX0VSUk9SX09TX0VOT01FTTsKIAkJZ290byBvdXQyOwpA QCAtNjc5LDI2ICs2NzAsMjggQEAKIAkJdGltZW91dCA9IFRXX0lPQ1RMX0NIUkRFVl9USU1FT1VU KkhaOwogCiAJCS8qIE5vdyB3YWl0IGZvciBjb21tYW5kIHRvIGNvbXBsZXRlICovCi0JCXRpbWVv dXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh0d19kZXYtPmlvY3RsX3dxdWV1 ZSwgdHdfZGV2LT5jaHJkZXZfcmVxdWVzdF9pZCA9PSBUV19JT0NUTF9DSFJERVZfRlJFRSwgdGlt ZW91dCk7CisJCXRpbWVvdXQgPSB3YWl0X2V2ZW50X3RpbWVvdXQodHdfZGV2LT5pb2N0bF93cXVl dWUsIHR3X2Rldi0+Y2hyZGV2X3JlcXVlc3RfaWQgPT0gVFdfSU9DVExfQ0hSREVWX0ZSRUUsIHRp bWVvdXQpOworCisJCS8qIFNlZSBpZiB3ZSByZXNldCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgaW9j dGwgdG8gY29tcGxldGUgKi8KKwkJaWYgKHRlc3RfYml0KFRXX0lOX1JFU0VULCAmdHdfZGV2LT5m bGFncykpIHsKKwkJCWNsZWFyX2JpdChUV19JTl9SRVNFVCwgJnR3X2Rldi0+ZmxhZ3MpOworCQkJ cmV0dmFsID0gVFdfSU9DVExfRVJST1JfT1NfRVJFU1RBUlRTWVM7CisJCQlnb3RvIG91dDM7CisJ CX0KIAotCQkvKiBDaGVjayBpZiB3ZSB0aW1lZCBvdXQsIGdvdCBhIHNpZ25hbCwgb3IgZGlkbid0 IGdldAotICAgICAgICAgICAgICAgICAgIGFuIGludGVycnVwdCAqLwotCQlpZiAoKHRpbWVvdXQg PD0gMCkgJiYgKHR3X2Rldi0+Y2hyZGV2X3JlcXVlc3RfaWQgIT0gVFdfSU9DVExfQ0hSREVWX0ZS RUUpKSB7CisJCS8qIFdlIHRpbWVkIG91dCwgYW5kIGRpZG4ndCBnZXQgYW4gaW50ZXJydXB0ICov CisJCWlmICh0d19kZXYtPmNocmRldl9yZXF1ZXN0X2lkICE9IFRXX0lPQ1RMX0NIUkRFVl9GUkVF KSB7CiAJCQkvKiBOb3cgd2UgbmVlZCB0byByZXNldCB0aGUgYm9hcmQgKi8KLQkJCWlmICh0aW1l b3V0ID09IFRXX0lPQ1RMX0VSUk9SX09TX0VSRVNUQVJUU1lTKSB7Ci0JCQkJcmV0dmFsID0gdGlt ZW91dDsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiM3ctOXh4eDogc2Nz aSVkOiBXQVJOSU5HOiAoMHglMDJYOjB4JTA0WCk6IENoYXJhY3RlciBpb2N0bCAoMHgleCkgdGlt ZWQgb3V0LCByZXNldHRpbmcgY2FyZC5cbiIsCi0JCQkJICAgICAgIHR3X2Rldi0+aG9zdC0+aG9z dF9ubywgVFdfRFJJVkVSLCAweGMsCi0JCQkJICAgICAgIGNtZCk7Ci0JCQkJcmV0dmFsID0gVFdf SU9DVExfRVJST1JfT1NfRUlPOwotCQkJfQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiM3ctOXh4 eDogc2NzaSVkOiBXQVJOSU5HOiAoMHglMDJYOjB4JTA0WCk6IENoYXJhY3RlciBpb2N0bCAoMHgl eCkgdGltZWQgb3V0LCByZXNldHRpbmcgY2FyZC5cbiIsCisJCQkgICAgICAgdHdfZGV2LT5ob3N0 LT5ob3N0X25vLCBUV19EUklWRVIsIDB4YywKKwkJCSAgICAgICBjbWQpOworCQkJcmV0dmFsID0g VFdfSU9DVExfRVJST1JfT1NfRUlPOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUodHdfZGV2LT5ob3N0 LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJCXR3X2Rldi0+c3RhdGVbcmVxdWVzdF9pZF0gPSBUV19T X0NPTVBMRVRFRDsKIAkJCXR3YV9mcmVlX3JlcXVlc3RfaWQodHdfZGV2LCByZXF1ZXN0X2lkKTsK IAkJCXR3X2Rldi0+cG9zdGVkX3JlcXVlc3RfY291bnQtLTsKLQkJCXR3YV9yZXNldF9kZXZpY2Vf ZXh0ZW5zaW9uKHR3X2Rldik7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHR3X2Rldi0+aG9z dC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCQl0d2FfcmVzZXRfZGV2aWNlX2V4dGVuc2lvbih0d19k ZXYsIDEpOwogCQkJZ290byBvdXQzOwogCQl9CiAKQEAgLTcxNiwxMCArNzA5LDE2IEBACiAJCXR3 X2lvY3RsLT5kcml2ZXJfY29tbWFuZC5zdGF0dXMgPSAwOwogCQkvKiBDb3B5IGNvbXBhdGlibGl0 eSBzdHJ1Y3QgaW50byBpb2N0bCBkYXRhIGJ1ZmZlciAqLwogCQl0d19jb21wYXRfaW5mbyA9IChU V19Db21wYXRpYmlsaXR5X0luZm8gKil0d19pb2N0bC0+ZGF0YV9idWZmZXI7Ci0JCXN0cm5jcHko dHdfY29tcGF0X2luZm8tPmRyaXZlcl92ZXJzaW9uLCB0d2FfZHJpdmVyX3ZlcnNpb24sIHN0cmxl bih0d2FfZHJpdmVyX3ZlcnNpb24pKTsKKwkJc3RybmNweSh0d19jb21wYXRfaW5mby0+ZHJpdmVy X3ZlcnNpb24sIFRXX0RSSVZFUl9WRVJTSU9OLCBzdHJsZW4oVFdfRFJJVkVSX1ZFUlNJT04pKTsK IAkJdHdfY29tcGF0X2luZm8tPndvcmtpbmdfc3JsID0gdHdfZGV2LT53b3JraW5nX3NybDsKIAkJ dHdfY29tcGF0X2luZm8tPndvcmtpbmdfYnJhbmNoID0gdHdfZGV2LT53b3JraW5nX2JyYW5jaDsK IAkJdHdfY29tcGF0X2luZm8tPndvcmtpbmdfYnVpbGQgPSB0d19kZXYtPndvcmtpbmdfYnVpbGQ7 CisJCXR3X2NvbXBhdF9pbmZvLT5kcml2ZXJfc3JsX2hpZ2ggPSBUV19DVVJSRU5UX0RSSVZFUl9T Ukw7CisJCXR3X2NvbXBhdF9pbmZvLT5kcml2ZXJfYnJhbmNoX2hpZ2ggPSBUV19DVVJSRU5UX0RS SVZFUl9CUkFOQ0g7CisJCXR3X2NvbXBhdF9pbmZvLT5kcml2ZXJfYnVpbGRfaGlnaCA9IFRXX0NV UlJFTlRfRFJJVkVSX0JVSUxEOworCQl0d19jb21wYXRfaW5mby0+ZHJpdmVyX3NybF9sb3cgPSBU V19CQVNFX0ZXX1NSTDsKKwkJdHdfY29tcGF0X2luZm8tPmRyaXZlcl9icmFuY2hfbG93ID0gVFdf QkFTRV9GV19CUkFOQ0g7CisJCXR3X2NvbXBhdF9pbmZvLT5kcml2ZXJfYnVpbGRfbG93ID0gVFdf QkFTRV9GV19CVUlMRDsKIAkJYnJlYWs7CiAJY2FzZSBUV19JT0NUTF9HRVRfTEFTVF9FVkVOVDoK IAkJaWYgKHR3X2Rldi0+ZXZlbnRfcXVldWVfd3JhcHBlZCkgewpAQCAtODQ5LDcgKzg0OCw3IEBA CiAJCXJldHZhbCA9IDA7CiBvdXQzOgogCS8qIE5vdyBmcmVlIGlvY3RsIGJ1ZiBtZW1vcnkgKi8K LQlwY2lfZnJlZV9jb25zaXN0ZW50KHR3X2Rldi0+dHdfcGNpX2RldiwgZGF0YV9idWZmZXJfbGVu Z3RoX2FkanVzdGVkK3NpemVvZihUV19Jb2N0bF9CdWZfQXBhY2hlKSAtIDEsIGNwdV9hZGRyLCBk bWFfaGFuZGxlKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmdHdfZGV2LT50d19wY2lfZGV2LT5kZXYs IGRhdGFfYnVmZmVyX2xlbmd0aF9hZGp1c3RlZCtzaXplb2YoVFdfSW9jdGxfQnVmX0FwYWNoZSkg LSAxLCBjcHVfYWRkciwgZG1hX2hhbmRsZSk7CiBvdXQyOgogCXVwKCZ0d19kZXYtPmlvY3RsX3Nl bSk7CiBvdXQ6CkBAIC05MzYsOCArOTM1LDEzIEBACiAJVFdfQ29tbWFuZF9GdWxsICpmdWxsX2Nv bW1hbmRfcGFja2V0OwogCXVuc2lnbmVkIHNob3J0IGVycm9yOwogCWludCByZXR2YWwgPSAxOwor CWNoYXIgKmVycm9yX3N0cjsKIAogCWZ1bGxfY29tbWFuZF9wYWNrZXQgPSB0d19kZXYtPmNvbW1h bmRfcGFja2V0X3ZpcnRbcmVxdWVzdF9pZF07CisKKwkvKiBDaGVjayBmb3IgZW1iZWRkZWQgZXJy b3Igc3RyaW5nICovCisJZXJyb3Jfc3RyID0gJihmdWxsX2NvbW1hbmRfcGFja2V0LT5oZWFkZXIu ZXJyX3NwZWNpZmljX2Rlc2Nbc3RybGVuKGZ1bGxfY29tbWFuZF9wYWNrZXQtPmhlYWRlci5lcnJf c3BlY2lmaWNfZGVzYykgKyAxXSk7CisKIAkvKiBEb24ndCBwcmludCBlcnJvciBmb3IgTG9naWNh bCB1bml0IG5vdCBzdXBwb3J0ZWQgZHVyaW5nIHJvbGxjYWxsICovCiAJZXJyb3IgPSBmdWxsX2Nv bW1hbmRfcGFja2V0LT5oZWFkZXIuc3RhdHVzX2Jsb2NrLmVycm9yOwogCWlmICgoZXJyb3IgIT0g VFdfRVJST1JfTE9HSUNBTF9VTklUX05PVF9TVVBQT1JURUQpICYmIChlcnJvciAhPSBUV19FUlJP Ul9VTklUX09GRkxJTkUpKSB7CkBAIC05NDYsMTUgKzk1MCwxNyBAQAogCQkJICAgICAgIHR3X2Rl di0+aG9zdC0+aG9zdF9ubywKIAkJCSAgICAgICBUV19NRVNTQUdFX1NPVVJDRV9DT05UUk9MTEVS X0VSUk9SLAogCQkJICAgICAgIGZ1bGxfY29tbWFuZF9wYWNrZXQtPmhlYWRlci5zdGF0dXNfYmxv Y2suZXJyb3IsCisJCQkgICAgICAgZXJyb3Jfc3RyWzBdID09ICdcMCcgPwogCQkJICAgICAgIHR3 YV9zdHJpbmdfbG9va3VwKHR3YV9lcnJvcl90YWJsZSwKLQkJCQkJCSBmdWxsX2NvbW1hbmRfcGFj a2V0LT5oZWFkZXIuc3RhdHVzX2Jsb2NrLmVycm9yKSwKKwkJCQkJCSBmdWxsX2NvbW1hbmRfcGFj a2V0LT5oZWFkZXIuc3RhdHVzX2Jsb2NrLmVycm9yKSA6IGVycm9yX3N0ciwKIAkJCSAgICAgICBm dWxsX2NvbW1hbmRfcGFja2V0LT5oZWFkZXIuZXJyX3NwZWNpZmljX2Rlc2MpOwogCQllbHNlCiAJ CQlwcmludGsoS0VSTl9XQVJOSU5HICIzdy05eHh4OiBFUlJPUjogKDB4JTAyWDoweCUwNFgpOiAl czolcy5cbiIsCiAJCQkgICAgICAgVFdfTUVTU0FHRV9TT1VSQ0VfQ09OVFJPTExFUl9FUlJPUiwK IAkJCSAgICAgICBmdWxsX2NvbW1hbmRfcGFja2V0LT5oZWFkZXIuc3RhdHVzX2Jsb2NrLmVycm9y LAorCQkJICAgICAgIGVycm9yX3N0clswXSA9PSAnXDAnID8KIAkJCSAgICAgICB0d2Ffc3RyaW5n X2xvb2t1cCh0d2FfZXJyb3JfdGFibGUsCi0JCQkJCQkgZnVsbF9jb21tYW5kX3BhY2tldC0+aGVh ZGVyLnN0YXR1c19ibG9jay5lcnJvciksCisJCQkJCQkgZnVsbF9jb21tYW5kX3BhY2tldC0+aGVh ZGVyLnN0YXR1c19ibG9jay5lcnJvcikgOiBlcnJvcl9zdHIsCiAJCQkgICAgICAgZnVsbF9jb21t YW5kX3BhY2tldC0+aGVhZGVyLmVycl9zcGVjaWZpY19kZXNjKTsKIAl9CiAKQEAgLTEwNzUsMTAg KzEwODEsOSBAQAogCXR3X2luaXRjb25uZWN0LT5yZXF1ZXN0X2lkID0gcmVxdWVzdF9pZDsKIAl0 d19pbml0Y29ubmVjdC0+bWVzc2FnZV9jcmVkaXRzID0gbWVzc2FnZV9jcmVkaXRzOwogCXR3X2lu aXRjb25uZWN0LT5mZWF0dXJlcyA9IHNldF9mZWF0dXJlczsKLSNpZiBCSVRTX1BFUl9MT05HID4g MzIKLQkvKiBUdXJuIG9uIDY0LWJpdCBzZ2wgc3VwcG9ydCAqLwotCXR3X2luaXRjb25uZWN0LT5m ZWF0dXJlcyB8PSAxOwotI2VuZGlmCisKKwkvKiBUdXJuIG9uIDY0LWJpdCBzZ2wgc3VwcG9ydCBp ZiB3ZSBuZWVkIHRvICovCisJdHdfaW5pdGNvbm5lY3QtPmZlYXR1cmVzIHw9IHNpemVvZihkbWFf YWRkcl90KSA+IDQgPyAxIDogMDsKIAogCWlmIChzZXRfZmVhdHVyZXMgJiBUV19FWFRFTkRFRF9J TklUX0NPTk5FQ1QpIHsKIAkJdHdfaW5pdGNvbm5lY3QtPnNpemUgPSBUV19JTklUX0NPTU1BTkRf UEFDS0VUX1NJWkVfRVhURU5ERUQ7CkBAIC0xMTczLDEzOSArMTE3OCwxNDIgQEAKIAkvKiBHZXQg dGhlIHBlciBhZGFwdGVyIGxvY2sgKi8KIAlzcGluX2xvY2sodHdfZGV2LT5ob3N0LT5ob3N0X2xv Y2spOwogCi0JLyogU2VlIGlmIHRoZSBpbnRlcnJ1cHQgbWF0Y2hlcyB0aGlzIGluc3RhbmNlICov Ci0JaWYgKHR3X2Rldi0+dHdfcGNpX2Rldi0+aXJxID09ICh1bnNpZ25lZCBpbnQpaXJxKSB7Ci0K LQkJaGFuZGxlZCA9IDE7Ci0KLQkJLyogUmVhZCB0aGUgcmVnaXN0ZXJzICovCi0JCXN0YXR1c19y ZWdfdmFsdWUgPSByZWFkbChUV19TVEFUVVNfUkVHX0FERFIodHdfZGV2KSk7CisJLyogUmVhZCB0 aGUgcmVnaXN0ZXJzICovCisJc3RhdHVzX3JlZ192YWx1ZSA9IHJlYWRsKFRXX1NUQVRVU19SRUdf QUREUih0d19kZXYpKTsKIAotCQkvKiBDaGVjayBpZiB0aGlzIGlzIG91ciBpbnRlcnJ1cHQsIG90 aGVyd2lzZSBiYWlsICovCi0JCWlmICghKHN0YXR1c19yZWdfdmFsdWUgJiBUV19TVEFUVVNfVkFM SURfSU5URVJSVVBUKSkKKwkvKiBDaGVjayBpZiB0aGlzIGlzIG91ciBpbnRlcnJ1cHQsIG90aGVy d2lzZSBiYWlsICovCisJaWYgKCEoc3RhdHVzX3JlZ192YWx1ZSAmIFRXX1NUQVRVU19WQUxJRF9J TlRFUlJVUFQpKQorCQlnb3RvIHR3YV9pbnRlcnJ1cHRfYmFpbDsKKworCWhhbmRsZWQgPSAxOwor CisJLyogQ2hlY2sgY29udHJvbGxlciBmb3IgZXJyb3JzICovCisJaWYgKHR3YV9jaGVja19iaXRz KHN0YXR1c19yZWdfdmFsdWUpKSB7CisJCWlmICh0d2FfZGVjb2RlX2JpdHModHdfZGV2LCBzdGF0 dXNfcmVnX3ZhbHVlKSkgeworCQkJVFdfQ0xFQVJfQUxMX0lOVEVSUlVQVFModHdfZGV2KTsKIAkJ CWdvdG8gdHdhX2ludGVycnVwdF9iYWlsOworCQl9CisJfQorCisJLyogSGFuZGxlIGhvc3QgaW50 ZXJydXB0ICovCisJaWYgKHN0YXR1c19yZWdfdmFsdWUgJiBUV19TVEFUVVNfSE9TVF9JTlRFUlJV UFQpCisJCVRXX0NMRUFSX0hPU1RfSU5URVJSVVBUKHR3X2Rldik7CisKKwkvKiBIYW5kbGUgYXR0 ZW50aW9uIGludGVycnVwdCAqLworCWlmIChzdGF0dXNfcmVnX3ZhbHVlICYgVFdfU1RBVFVTX0FU VEVOVElPTl9JTlRFUlJVUFQpIHsKKwkJVFdfQ0xFQVJfQVRURU5USU9OX0lOVEVSUlVQVCh0d19k ZXYpOworCQlpZiAoISh0ZXN0X2FuZF9zZXRfYml0KFRXX0lOX0FUVEVOVElPTl9MT09QLCAmdHdf ZGV2LT5mbGFncykpKSB7CisJCQl0d2FfZ2V0X3JlcXVlc3RfaWQodHdfZGV2LCAmcmVxdWVzdF9p ZCk7CisKKwkJCWVycm9yID0gdHdhX2Flbl9yZWFkX3F1ZXVlKHR3X2RldiwgcmVxdWVzdF9pZCk7 CisJCQlpZiAoZXJyb3IpIHsKKwkJCQl0d19kZXYtPnN0YXRlW3JlcXVlc3RfaWRdID0gVFdfU19D T01QTEVURUQ7CisJCQkJdHdhX2ZyZWVfcmVxdWVzdF9pZCh0d19kZXYsIHJlcXVlc3RfaWQpOwor CQkJCWNsZWFyX2JpdChUV19JTl9BVFRFTlRJT05fTE9PUCwgJnR3X2Rldi0+ZmxhZ3MpOworCQkJ fQorCQl9CisJfQogCi0JCS8qIENoZWNrIGNvbnRyb2xsZXIgZm9yIGVycm9ycyAqLwotCQlpZiAo dHdhX2NoZWNrX2JpdHMoc3RhdHVzX3JlZ192YWx1ZSkpIHsKLQkJCWlmICh0d2FfZGVjb2RlX2Jp dHModHdfZGV2LCBzdGF0dXNfcmVnX3ZhbHVlKSkgeworCS8qIEhhbmRsZSBjb21tYW5kIGludGVy cnVwdCAqLworCWlmIChzdGF0dXNfcmVnX3ZhbHVlICYgVFdfU1RBVFVTX0NPTU1BTkRfSU5URVJS VVBUKSB7CisJCVRXX01BU0tfQ09NTUFORF9JTlRFUlJVUFQodHdfZGV2KTsKKwkJLyogRHJhaW4g YXMgbWFueSBwZW5kaW5nIGNvbW1hbmRzIGFzIHdlIGNhbiAqLworCQl3aGlsZSAodHdfZGV2LT5w ZW5kaW5nX3JlcXVlc3RfY291bnQgPiAwKSB7CisJCQlyZXF1ZXN0X2lkID0gdHdfZGV2LT5wZW5k aW5nX3F1ZXVlW3R3X2Rldi0+cGVuZGluZ19oZWFkXTsKKwkJCWlmICh0d19kZXYtPnN0YXRlW3Jl cXVlc3RfaWRdICE9IFRXX1NfUEVORElORykgeworCQkJCVRXX1BSSU5USyh0d19kZXYtPmhvc3Qs IFRXX0RSSVZFUiwgMHgxOSwgIkZvdW5kIHJlcXVlc3QgaWQgdGhhdCB3YXNuJ3QgcGVuZGluZyIp OwogCQkJCVRXX0NMRUFSX0FMTF9JTlRFUlJVUFRTKHR3X2Rldik7CiAJCQkJZ290byB0d2FfaW50 ZXJydXB0X2JhaWw7CiAJCQl9CisJCQlpZiAodHdhX3Bvc3RfY29tbWFuZF9wYWNrZXQodHdfZGV2 LCByZXF1ZXN0X2lkLCAxKT09MCkgeworCQkJCXR3X2Rldi0+cGVuZGluZ19oZWFkID0gKHR3X2Rl di0+cGVuZGluZ19oZWFkICsgMSkgJSBUV19RX0xFTkdUSDsKKwkJCQl0d19kZXYtPnBlbmRpbmdf cmVxdWVzdF9jb3VudC0tOworCQkJfSBlbHNlIHsKKwkJCQkvKiBJZiB3ZSBnZXQgaGVyZSwgd2Ug d2lsbCBjb250aW51ZSByZS1wb3N0aW5nIG9uIHRoZSBuZXh0IGNvbW1hbmQgaW50ZXJydXB0ICov CisJCQkJYnJlYWs7CisJCQl9CiAJCX0KKwl9CisKKwkvKiBIYW5kbGUgcmVzcG9uc2UgaW50ZXJy dXB0ICovCisJaWYgKHN0YXR1c19yZWdfdmFsdWUgJiBUV19TVEFUVVNfUkVTUE9OU0VfSU5URVJS VVBUKSB7CiAKLQkJLyogSGFuZGxlIGhvc3QgaW50ZXJydXB0ICovCi0JCWlmIChzdGF0dXNfcmVn X3ZhbHVlICYgVFdfU1RBVFVTX0hPU1RfSU5URVJSVVBUKQotCQkJVFdfQ0xFQVJfSE9TVF9JTlRF UlJVUFQodHdfZGV2KTsKLQotCQkvKiBIYW5kbGUgYXR0ZW50aW9uIGludGVycnVwdCAqLwotCQlp ZiAoc3RhdHVzX3JlZ192YWx1ZSAmIFRXX1NUQVRVU19BVFRFTlRJT05fSU5URVJSVVBUKSB7Ci0J CQlUV19DTEVBUl9BVFRFTlRJT05fSU5URVJSVVBUKHR3X2Rldik7Ci0JCQlpZiAoISh0ZXN0X2Fu ZF9zZXRfYml0KFRXX0lOX0FUVEVOVElPTl9MT09QLCAmdHdfZGV2LT5mbGFncykpKSB7Ci0JCQkJ dHdhX2dldF9yZXF1ZXN0X2lkKHR3X2RldiwgJnJlcXVlc3RfaWQpOwotCi0JCQkJZXJyb3IgPSB0 d2FfYWVuX3JlYWRfcXVldWUodHdfZGV2LCByZXF1ZXN0X2lkKTsKLQkJCQlpZiAoZXJyb3IpIHsK LQkJCQkJdHdfZGV2LT5zdGF0ZVtyZXF1ZXN0X2lkXSA9IFRXX1NfQ09NUExFVEVEOwotCQkJCQl0 d2FfZnJlZV9yZXF1ZXN0X2lkKHR3X2RldiwgcmVxdWVzdF9pZCk7Ci0JCQkJCWNsZWFyX2JpdChU V19JTl9BVFRFTlRJT05fTE9PUCwgJnR3X2Rldi0+ZmxhZ3MpOworCQkvKiBEcmFpbiB0aGUgcmVz cG9uc2UgcXVldWUgZnJvbSB0aGUgYm9hcmQgKi8KKwkJd2hpbGUgKChzdGF0dXNfcmVnX3ZhbHVl ICYgVFdfU1RBVFVTX1JFU1BPTlNFX1FVRVVFX0VNUFRZKSA9PSAwKSB7CisJCQkvKiBDb21wbGV0 ZSB0aGUgcmVzcG9uc2UgKi8KKwkJCXJlc3BvbnNlX3F1ZS52YWx1ZSA9IHJlYWRsKFRXX1JFU1BP TlNFX1FVRVVFX1JFR19BRERSKHR3X2RldikpOworCQkJcmVxdWVzdF9pZCA9IFRXX1JFU0lEX09V VChyZXNwb25zZV9xdWUucmVzcG9uc2VfaWQpOworCQkJZnVsbF9jb21tYW5kX3BhY2tldCA9IHR3 X2Rldi0+Y29tbWFuZF9wYWNrZXRfdmlydFtyZXF1ZXN0X2lkXTsKKwkJCWVycm9yID0gMDsKKwkJ CWNvbW1hbmRfcGFja2V0ID0gJmZ1bGxfY29tbWFuZF9wYWNrZXQtPmNvbW1hbmQub2xkY29tbWFu ZDsKKwkJCS8qIENoZWNrIGZvciBjb21tYW5kIHBhY2tldCBlcnJvcnMgKi8KKwkJCWlmIChmdWxs X2NvbW1hbmRfcGFja2V0LT5jb21tYW5kLm5ld2NvbW1hbmQuc3RhdHVzICE9IDApIHsKKwkJCQlp ZiAodHdfZGV2LT5zcmJbcmVxdWVzdF9pZF0gIT0gMCkgeworCQkJCQllcnJvciA9IHR3YV9maWxs X3NlbnNlKHR3X2RldiwgcmVxdWVzdF9pZCwgMSwgMSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyog U2tpcCBpb2N0bCBlcnJvciBwcmludHMgKi8KKwkJCQkJaWYgKHJlcXVlc3RfaWQgIT0gdHdfZGV2 LT5jaHJkZXZfcmVxdWVzdF9pZCkgeworCQkJCQkJZXJyb3IgPSB0d2FfZmlsbF9zZW5zZSh0d19k ZXYsIHJlcXVlc3RfaWQsIDAsIDEpOworCQkJCQl9CiAJCQkJfQogCQkJfQotCQl9CiAKLQkJLyog SGFuZGxlIGNvbW1hbmQgaW50ZXJydXB0ICovCi0JCWlmIChzdGF0dXNfcmVnX3ZhbHVlICYgVFdf U1RBVFVTX0NPTU1BTkRfSU5URVJSVVBUKSB7Ci0JCQlUV19NQVNLX0NPTU1BTkRfSU5URVJSVVBU KHR3X2Rldik7Ci0JCQkvKiBEcmFpbiBhcyBtYW55IHBlbmRpbmcgY29tbWFuZHMgYXMgd2UgY2Fu ICovCi0JCQl3aGlsZSAodHdfZGV2LT5wZW5kaW5nX3JlcXVlc3RfY291bnQgPiAwKSB7Ci0JCQkJ cmVxdWVzdF9pZCA9IHR3X2Rldi0+cGVuZGluZ19xdWV1ZVt0d19kZXYtPnBlbmRpbmdfaGVhZF07 Ci0JCQkJaWYgKHR3X2Rldi0+c3RhdGVbcmVxdWVzdF9pZF0gIT0gVFdfU19QRU5ESU5HKSB7Ci0J CQkJCVRXX1BSSU5USyh0d19kZXYtPmhvc3QsIFRXX0RSSVZFUiwgMHgxOSwgIkZvdW5kIHJlcXVl c3QgaWQgdGhhdCB3YXNuJ3QgcGVuZGluZyIpOworCQkJLyogQ2hlY2sgZm9yIGNvcnJlY3Qgc3Rh dGUgKi8KKwkJCWlmICh0d19kZXYtPnN0YXRlW3JlcXVlc3RfaWRdICE9IFRXX1NfUE9TVEVEKSB7 CisJCQkJaWYgKHR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdICE9IDApIHsKKwkJCQkJVFdfUFJJTlRL KHR3X2Rldi0+aG9zdCwgVFdfRFJJVkVSLCAweDFhLCAiUmVjZWl2ZWQgYSByZXF1ZXN0IGlkIHRo YXQgd2Fzbid0IHBvc3RlZCIpOwogCQkJCQlUV19DTEVBUl9BTExfSU5URVJSVVBUUyh0d19kZXYp OwogCQkJCQlnb3RvIHR3YV9pbnRlcnJ1cHRfYmFpbDsKIAkJCQl9Ci0JCQkJaWYgKHR3YV9wb3N0 X2NvbW1hbmRfcGFja2V0KHR3X2RldiwgcmVxdWVzdF9pZCwgMSk9PTApIHsKLQkJCQkJdHdfZGV2 LT5wZW5kaW5nX2hlYWQgPSAodHdfZGV2LT5wZW5kaW5nX2hlYWQgKyAxKSAlIFRXX1FfTEVOR1RI OwotCQkJCQl0d19kZXYtPnBlbmRpbmdfcmVxdWVzdF9jb3VudC0tOwotCQkJCX0gZWxzZSB7Ci0J CQkJCS8qIElmIHdlIGdldCBoZXJlLCB3ZSB3aWxsIGNvbnRpbnVlIHJlLXBvc3Rpbmcgb24gdGhl IG5leHQgY29tbWFuZCBpbnRlcnJ1cHQgKi8KLQkJCQkJYnJlYWs7Ci0JCQkJfQogCQkJfQotCQl9 CiAKLQkJLyogSGFuZGxlIHJlc3BvbnNlIGludGVycnVwdCAqLwotCQlpZiAoc3RhdHVzX3JlZ192 YWx1ZSAmIFRXX1NUQVRVU19SRVNQT05TRV9JTlRFUlJVUFQpIHsKLQotCQkJLyogRHJhaW4gdGhl IHJlc3BvbnNlIHF1ZXVlIGZyb20gdGhlIGJvYXJkICovCi0JCQl3aGlsZSAoKHN0YXR1c19yZWdf dmFsdWUgJiBUV19TVEFUVVNfUkVTUE9OU0VfUVVFVUVfRU1QVFkpID09IDApIHsKLQkJCQkvKiBD b21wbGV0ZSB0aGUgcmVzcG9uc2UgKi8KLQkJCQlyZXNwb25zZV9xdWUudmFsdWUgPSByZWFkbChU V19SRVNQT05TRV9RVUVVRV9SRUdfQUREUih0d19kZXYpKTsKLQkJCQlyZXF1ZXN0X2lkID0gVFdf UkVTSURfT1VUKHJlc3BvbnNlX3F1ZS5yZXNwb25zZV9pZCk7Ci0JCQkJZnVsbF9jb21tYW5kX3Bh Y2tldCA9IHR3X2Rldi0+Y29tbWFuZF9wYWNrZXRfdmlydFtyZXF1ZXN0X2lkXTsKLQkJCQllcnJv ciA9IDA7Ci0JCQkJY29tbWFuZF9wYWNrZXQgPSAmZnVsbF9jb21tYW5kX3BhY2tldC0+Y29tbWFu ZC5vbGRjb21tYW5kOwotCQkJCS8qIENoZWNrIGZvciBjb21tYW5kIHBhY2tldCBlcnJvcnMgKi8K LQkJCQlpZiAoZnVsbF9jb21tYW5kX3BhY2tldC0+Y29tbWFuZC5uZXdjb21tYW5kLnN0YXR1cyAh PSAwKSB7Ci0JCQkJCWlmICh0d19kZXYtPnNyYltyZXF1ZXN0X2lkXSAhPSAwKSB7Ci0JCQkJCQll cnJvciA9IHR3YV9maWxsX3NlbnNlKHR3X2RldiwgcmVxdWVzdF9pZCwgMSwgMSk7Ci0JCQkJCX0g ZWxzZSB7Ci0JCQkJCQkvKiBTa2lwIGlvY3RsIGVycm9yIHByaW50cyAqLwotCQkJCQkJaWYgKHJl cXVlc3RfaWQgIT0gdHdfZGV2LT5jaHJkZXZfcmVxdWVzdF9pZCkgewotCQkJCQkJCWVycm9yID0g dHdhX2ZpbGxfc2Vuc2UodHdfZGV2LCByZXF1ZXN0X2lkLCAwLCAxKTsKLQkJCQkJCX0KLQkJCQkJ fQorCQkJLyogQ2hlY2sgZm9yIGludGVybmFsIGNvbW1hbmQgY29tcGxldGlvbiAqLworCQkJaWYg KHR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdID09IDApIHsKKwkJCQlpZiAocmVxdWVzdF9pZCAhPSB0 d19kZXYtPmNocmRldl9yZXF1ZXN0X2lkKSB7CisJCQkJCWlmICh0d2FfYWVuX2NvbXBsZXRlKHR3 X2RldiwgcmVxdWVzdF9pZCkpCisJCQkJCQlUV19QUklOVEsodHdfZGV2LT5ob3N0LCBUV19EUklW RVIsIDB4MWIsICJFcnJvciBjb21wbGV0aW5nIEFFTiBkdXJpbmcgYXR0ZW50aW9uIGludGVycnVw dCIpOworCQkJCX0gZWxzZSB7CisJCQkJCXR3X2Rldi0+Y2hyZGV2X3JlcXVlc3RfaWQgPSBUV19J T0NUTF9DSFJERVZfRlJFRTsKKwkJCQkJd2FrZV91cCgmdHdfZGV2LT5pb2N0bF93cXVldWUpOwog CQkJCX0KLQotCQkJCS8qIENoZWNrIGZvciBjb3JyZWN0IHN0YXRlICovCi0JCQkJaWYgKHR3X2Rl di0+c3RhdGVbcmVxdWVzdF9pZF0gIT0gVFdfU19QT1NURUQpIHsKLQkJCQkJaWYgKHR3X2Rldi0+ c3JiW3JlcXVlc3RfaWRdICE9IDApIHsKLQkJCQkJCVRXX1BSSU5USyh0d19kZXYtPmhvc3QsIFRX X0RSSVZFUiwgMHgxYSwgIlJlY2VpdmVkIGEgcmVxdWVzdCBpZCB0aGF0IHdhc24ndCBwb3N0ZWQi KTsKLQkJCQkJICAgICAgICBUV19DTEVBUl9BTExfSU5URVJSVVBUUyh0d19kZXYpOwotCQkJCQkJ Z290byB0d2FfaW50ZXJydXB0X2JhaWw7Ci0JCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJdHdhX3Nj c2lvcF9leGVjdXRlX3Njc2lfY29tcGxldGUodHdfZGV2LCByZXF1ZXN0X2lkKTsKKwkJCQkvKiBJ ZiBubyBlcnJvciBjb21tYW5kIHdhcyBhIHN1Y2Nlc3MgKi8KKwkJCQlpZiAoZXJyb3IgPT0gMCkg eworCQkJCQl0d19kZXYtPnNyYltyZXF1ZXN0X2lkXS0+cmVzdWx0ID0gKERJRF9PSyA8PCAxNik7 CiAJCQkJfQogCi0JCQkJLyogQ2hlY2sgZm9yIGludGVybmFsIGNvbW1hbmQgY29tcGxldGlvbiAq LwotCQkJCWlmICh0d19kZXYtPnNyYltyZXF1ZXN0X2lkXSA9PSAwKSB7Ci0JCQkJCWlmIChyZXF1 ZXN0X2lkICE9IHR3X2Rldi0+Y2hyZGV2X3JlcXVlc3RfaWQpIHsKLQkJCQkJCWlmICh0d2FfYWVu X2NvbXBsZXRlKHR3X2RldiwgcmVxdWVzdF9pZCkpCi0JCQkJCQkJVFdfUFJJTlRLKHR3X2Rldi0+ aG9zdCwgVFdfRFJJVkVSLCAweDFiLCAiRXJyb3IgY29tcGxldGluZyBBRU4gZHVyaW5nIGF0dGVu dGlvbiBpbnRlcnJ1cHQiKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXR3X2Rldi0+Y2hyZGV2X3Jl cXVlc3RfaWQgPSBUV19JT0NUTF9DSFJERVZfRlJFRTsKLQkJCQkJCXdha2VfdXAoJnR3X2Rldi0+ aW9jdGxfd3F1ZXVlKTsKLQkJCQkJfQotCQkJCX0gZWxzZSB7Ci0JCQkJCXR3YV9zY3Npb3BfZXhl Y3V0ZV9zY3NpX2NvbXBsZXRlKHR3X2RldiwgcmVxdWVzdF9pZCk7Ci0JCQkJCS8qIElmIG5vIGVy cm9yIGNvbW1hbmQgd2FzIGEgc3VjY2VzcyAqLwotCQkJCQlpZiAoZXJyb3IgPT0gMCkgewotCQkJ CQkJdHdfZGV2LT5zcmJbcmVxdWVzdF9pZF0tPnJlc3VsdCA9IChESURfT0sgPDwgMTYpOwotCQkJ CQl9Ci0KLQkJCQkJLyogSWYgZXJyb3IsIGNvbW1hbmQgZmFpbGVkICovCi0JCQkJCWlmIChlcnJv ciA9PSAxKSB7Ci0JCQkJCQkvKiBBc2sgZm9yIGEgaG9zdCByZXNldCAqLwotCQkJCQkJdHdfZGV2 LT5zcmJbcmVxdWVzdF9pZF0tPnJlc3VsdCA9IChESURfT0sgPDwgMTYpIHwgKENIRUNLX0NPTkRJ VElPTiA8PCAxKTsKLQkJCQkJfQorCQkJCS8qIElmIGVycm9yLCBjb21tYW5kIGZhaWxlZCAqLwor CQkJCWlmIChlcnJvciA9PSAxKSB7CisJCQkJCS8qIEFzayBmb3IgYSBob3N0IHJlc2V0ICovCisJ CQkJCXR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdLT5yZXN1bHQgPSAoRElEX09LIDw8IDE2KSB8IChD SEVDS19DT05ESVRJT04gPDwgMSk7CisJCQkJfQogCi0JCQkJCS8qIE5vdyBjb21wbGV0ZSB0aGUg aW8gKi8KLQkJCQkJdHdfZGV2LT5zdGF0ZVtyZXF1ZXN0X2lkXSA9IFRXX1NfQ09NUExFVEVEOwot CQkJCQl0d2FfZnJlZV9yZXF1ZXN0X2lkKHR3X2RldiwgcmVxdWVzdF9pZCk7Ci0JCQkJCXR3X2Rl di0+cG9zdGVkX3JlcXVlc3RfY291bnQtLTsKLQkJCQkJdHdfZGV2LT5zcmJbcmVxdWVzdF9pZF0t PnNjc2lfZG9uZSh0d19kZXYtPnNyYltyZXF1ZXN0X2lkXSk7Ci0JCQkJCXR3YV91bm1hcF9zY3Np X2RhdGEodHdfZGV2LCByZXF1ZXN0X2lkKTsKKwkJCQkvKiBSZXBvcnQgcmVzaWR1YWwgYnl0ZXMg Zm9yIHNpbmdsZSBzZ2wgKi8KKwkJCQlpZiAoKHR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdLT51c2Vf c2cgPD0gMSkgJiYgKGZ1bGxfY29tbWFuZF9wYWNrZXQtPmNvbW1hbmQubmV3Y29tbWFuZC5zdGF0 dXMgPT0gMCkpIHsKKwkJCQkJaWYgKGZ1bGxfY29tbWFuZF9wYWNrZXQtPmNvbW1hbmQubmV3Y29t bWFuZC5zZ19saXN0WzBdLmxlbmd0aCA8IHR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdLT5yZXF1ZXN0 X2J1ZmZsZW4pCisJCQkJCQl0d19kZXYtPnNyYltyZXF1ZXN0X2lkXS0+cmVzaWQgPSB0d19kZXYt PnNyYltyZXF1ZXN0X2lkXS0+cmVxdWVzdF9idWZmbGVuIC0gZnVsbF9jb21tYW5kX3BhY2tldC0+ Y29tbWFuZC5uZXdjb21tYW5kLnNnX2xpc3RbMF0ubGVuZ3RoOwogCQkJCX0KIAotCQkJCS8qIENo ZWNrIGZvciB2YWxpZCBzdGF0dXMgYWZ0ZXIgZWFjaCBkcmFpbiAqLwotCQkJCXN0YXR1c19yZWdf dmFsdWUgPSByZWFkbChUV19TVEFUVVNfUkVHX0FERFIodHdfZGV2KSk7Ci0JCQkJaWYgKHR3YV9j aGVja19iaXRzKHN0YXR1c19yZWdfdmFsdWUpKSB7Ci0JCQkJCWlmICh0d2FfZGVjb2RlX2JpdHMo dHdfZGV2LCBzdGF0dXNfcmVnX3ZhbHVlKSkgewotCQkJCQkJVFdfQ0xFQVJfQUxMX0lOVEVSUlVQ VFModHdfZGV2KTsKLQkJCQkJCWdvdG8gdHdhX2ludGVycnVwdF9iYWlsOwotCQkJCQl9CisJCQkJ LyogTm93IGNvbXBsZXRlIHRoZSBpbyAqLworCQkJCXR3X2Rldi0+c3RhdGVbcmVxdWVzdF9pZF0g PSBUV19TX0NPTVBMRVRFRDsKKwkJCQl0d2FfZnJlZV9yZXF1ZXN0X2lkKHR3X2RldiwgcmVxdWVz dF9pZCk7CisJCQkJdHdfZGV2LT5wb3N0ZWRfcmVxdWVzdF9jb3VudC0tOworCQkJCXR3X2Rldi0+ c3JiW3JlcXVlc3RfaWRdLT5zY3NpX2RvbmUodHdfZGV2LT5zcmJbcmVxdWVzdF9pZF0pOworCQkJ CXR3YV91bm1hcF9zY3NpX2RhdGEodHdfZGV2LCByZXF1ZXN0X2lkKTsKKwkJCX0KKworCQkJLyog Q2hlY2sgZm9yIHZhbGlkIHN0YXR1cyBhZnRlciBlYWNoIGRyYWluICovCisJCQlzdGF0dXNfcmVn X3ZhbHVlID0gcmVhZGwoVFdfU1RBVFVTX1JFR19BRERSKHR3X2RldikpOworCQkJaWYgKHR3YV9j aGVja19iaXRzKHN0YXR1c19yZWdfdmFsdWUpKSB7CisJCQkJaWYgKHR3YV9kZWNvZGVfYml0cyh0 d19kZXYsIHN0YXR1c19yZWdfdmFsdWUpKSB7CisJCQkJCVRXX0NMRUFSX0FMTF9JTlRFUlJVUFRT KHR3X2Rldik7CisJCQkJCWdvdG8gdHdhX2ludGVycnVwdF9iYWlsOwogCQkJCX0KIAkJCX0KIAkJ fQogCX0KKwogdHdhX2ludGVycnVwdF9iYWlsOgogCXNwaW5fdW5sb2NrKHR3X2Rldi0+aG9zdC0+ aG9zdF9sb2NrKTsKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKQEAgLTEzMjAsOSArMTMy OCwxMiBAQAogCiAJaWYgKFRXX09QX09VVChmdWxsX2NvbW1hbmRfcGFja2V0LT5jb21tYW5kLm5l d2NvbW1hbmQub3Bjb2RlX19yZXNlcnZlZCkgPT0gVFdfT1BfRVhFQ1VURV9TQ1NJKSB7CiAJCW5l d2NvbW1hbmQgPSAmZnVsbF9jb21tYW5kX3BhY2tldC0+Y29tbWFuZC5uZXdjb21tYW5kOwotCQlu ZXdjb21tYW5kLT5yZXF1ZXN0X2lkID0gcmVxdWVzdF9pZDsKKwkJbmV3Y29tbWFuZC0+cmVxdWVz dF9pZF9fbHVubCA9IAorCQkJVFdfUkVRX0xVTl9JTihUV19MVU5fT1VUKG5ld2NvbW1hbmQtPnJl cXVlc3RfaWRfX2x1bmwpLCByZXF1ZXN0X2lkKTsKIAkJbmV3Y29tbWFuZC0+c2dfbGlzdFswXS5h ZGRyZXNzID0gZG1hX2hhbmRsZSArIHNpemVvZihUV19Jb2N0bF9CdWZfQXBhY2hlKSAtIDE7CiAJ CW5ld2NvbW1hbmQtPnNnX2xpc3RbMF0ubGVuZ3RoID0gbGVuZ3RoOworCQluZXdjb21tYW5kLT5z Z2xfZW50cmllc19fbHVuaCA9CisJCQlUV19SRVFfTFVOX0lOKFRXX0xVTl9PVVQobmV3Y29tbWFu ZC0+c2dsX2VudHJpZXNfX2x1bmgpLCAxKTsKIAl9IGVsc2UgewogCQlvbGRjb21tYW5kID0gJmZ1 bGxfY29tbWFuZF9wYWNrZXQtPmNvbW1hbmQub2xkY29tbWFuZDsKIAkJb2xkY29tbWFuZC0+cmVx dWVzdF9pZCA9IHJlcXVlc3RfaWQ7CkBAIC0xMzMyLDYgKzEzNDMsOSBAQAogCQkJc2dsID0gKFRX X1NHX0VudHJ5ICopKCh1MzIgKilvbGRjb21tYW5kK1RXX1NHTF9PVVQob2xkY29tbWFuZC0+b3Bj b2RlX19zZ2xvZmZzZXQpKTsKIAkJCXNnbC0+YWRkcmVzcyA9IGRtYV9oYW5kbGUgKyBzaXplb2Yo VFdfSW9jdGxfQnVmX0FwYWNoZSkgLSAxOwogCQkJc2dsLT5sZW5ndGggPSBsZW5ndGg7CisKKwkJ CWlmICgoc2l6ZW9mKGxvbmcpIDwgOCkgJiYgKHNpemVvZihkbWFfYWRkcl90KSA+IDQpKQorCQkJ CW9sZGNvbW1hbmQtPnNpemUgKz0gMTsKIAkJfQogCX0KIH0gLyogRW5kIHR3YV9sb2FkX3NnbCgp ICovCkBAIC0xNDg2LDcgKzE1MDAsNyBAQAogc3RhdGljIGludCB0d2FfcG9zdF9jb21tYW5kX3Bh Y2tldChUV19EZXZpY2VfRXh0ZW5zaW9uICp0d19kZXYsIGludCByZXF1ZXN0X2lkLCBjaGFyIGlu dGVybmFsKQogewogCXUzMiBzdGF0dXNfcmVnX3ZhbHVlOwotCXVuc2lnbmVkIGxvbmcgY29tbWFu ZF9xdWVfdmFsdWU7CisJZG1hX2FkZHJfdCBjb21tYW5kX3F1ZV92YWx1ZTsKIAlpbnQgcmV0dmFs ID0gMTsKIAogCWNvbW1hbmRfcXVlX3ZhbHVlID0gdHdfZGV2LT5jb21tYW5kX3BhY2tldF9waHlz W3JlcXVlc3RfaWRdOwpAQCAtMTUxNywxMSArMTUzMSwxMyBAQAogCQlnb3RvIG91dDsKIAl9IGVs c2UgewogCQkvKiBXZSBzdWNjZXNzZnVsbHkgcG9zdGVkIHRoZSBjb21tYW5kIHBhY2tldCAqLwot I2lmIEJJVFNfUEVSX0xPTkcgPiAzMgotCQl3cml0ZXEoVFdfQ09NTUFORF9PRkZTRVQgKyBjb21t YW5kX3F1ZV92YWx1ZSwgVFdfQ09NTUFORF9RVUVVRV9SRUdfQUREUih0d19kZXYpKTsKLSNlbHNl Ci0JCXdyaXRlbChUV19DT01NQU5EX09GRlNFVCArIGNvbW1hbmRfcXVlX3ZhbHVlLCBUV19DT01N QU5EX1FVRVVFX1JFR19BRERSKHR3X2RldikpOwotI2VuZGlmCisJCWlmIChzaXplb2YoZG1hX2Fk ZHJfdCkgPiA0KSB7CisJCQljb21tYW5kX3F1ZV92YWx1ZSArPSBUV19DT01NQU5EX09GRlNFVDsK KwkJCXdyaXRlbCgodTMyKWNvbW1hbmRfcXVlX3ZhbHVlLCBUV19DT01NQU5EX1FVRVVFX1JFR19B RERSKHR3X2RldikpOworCQkJd3JpdGVsKCh1MzIpKCh1NjQpY29tbWFuZF9xdWVfdmFsdWUgPj4g MzIpLCBUV19DT01NQU5EX1FVRVVFX1JFR19BRERSKHR3X2RldikgKyAweDQpOworCQl9IGVsc2Ug eworCQkJd3JpdGVsKFRXX0NPTU1BTkRfT0ZGU0VUICsgY29tbWFuZF9xdWVfdmFsdWUsIFRXX0NP TU1BTkRfUVVFVUVfUkVHX0FERFIodHdfZGV2KSk7CisJCX0KIAkJdHdfZGV2LT5zdGF0ZVtyZXF1 ZXN0X2lkXSA9IFRXX1NfUE9TVEVEOwogCQl0d19kZXYtPnBvc3RlZF9yZXF1ZXN0X2NvdW50Kys7 CiAJCWlmICh0d19kZXYtPnBvc3RlZF9yZXF1ZXN0X2NvdW50ID4gdHdfZGV2LT5tYXhfcG9zdGVk X3JlcXVlc3RfY291bnQpIHsKQEAgLTE1MzQsMTAgKzE1NTAsMTYgQEAKIH0gLyogRW5kIHR3YV9w b3N0X2NvbW1hbmRfcGFja2V0KCkgKi8KIAogLyogVGhpcyBmdW5jdGlvbiB3aWxsIHJlc2V0IGEg ZGV2aWNlIGV4dGVuc2lvbiAqLwotc3RhdGljIGludCB0d2FfcmVzZXRfZGV2aWNlX2V4dGVuc2lv bihUV19EZXZpY2VfRXh0ZW5zaW9uICp0d19kZXYpCitzdGF0aWMgaW50IHR3YV9yZXNldF9kZXZp Y2VfZXh0ZW5zaW9uKFRXX0RldmljZV9FeHRlbnNpb24gKnR3X2RldiwgaW50IGlvY3RsX3Jlc2V0 KQogewogCWludCBpID0gMDsKIAlpbnQgcmV0dmFsID0gMTsKKwl1bnNpZ25lZCBsb25nIGZsYWdz ID0gMDsKKworCXNldF9iaXQoVFdfSU5fUkVTRVQsICZ0d19kZXYtPmZsYWdzKTsKKwlUV19ESVNB QkxFX0lOVEVSUlVQVFModHdfZGV2KTsKKwlUV19NQVNLX0NPTU1BTkRfSU5URVJSVVBUKHR3X2Rl dik7CisJc3Bpbl9sb2NrX2lycXNhdmUodHdfZGV2LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsK IAogCS8qIEFib3J0IGFsbCByZXF1ZXN0cyB0aGF0IGFyZSBpbiBwcm9ncmVzcyAqLwogCWZvciAo aSA9IDA7IGkgPCBUV19RX0xFTkdUSDsgaSsrKSB7CkBAIC0xNTY0LDE2ICsxNTg2LDIxIEBACiAJ dHdfZGV2LT5wZW5kaW5nX2hlYWQgPSBUV19RX1NUQVJUOwogCXR3X2Rldi0+cGVuZGluZ190YWls ID0gVFdfUV9TVEFSVDsKIAl0d19kZXYtPnJlc2V0X3ByaW50ID0gMDsKLQl0d19kZXYtPmNocmRl dl9yZXF1ZXN0X2lkID0gVFdfSU9DVExfQ0hSREVWX0ZSRUU7Ci0JdHdfZGV2LT5mbGFncyA9IDA7 CiAKLQlUV19ESVNBQkxFX0lOVEVSUlVQVFModHdfZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0 b3JlKHR3X2Rldi0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKIAlpZiAodHdhX3Jlc2V0X3Nl cXVlbmNlKHR3X2RldiwgMSkpCiAJCWdvdG8gb3V0OwogCi0gICAgICAgIFRXX0VOQUJMRV9BTkRf Q0xFQVJfSU5URVJSVVBUUyh0d19kZXYpOworCVRXX0VOQUJMRV9BTkRfQ0xFQVJfSU5URVJSVVBU Uyh0d19kZXYpOwogCisJLyogV2FrZSB1cCBhbnkgaW9jdGwgdGhhdCB3YXMgcGVuZGluZyBiZWZv cmUgdGhlIHJlc2V0ICovCisJaWYgKCh0d19kZXYtPmNocmRldl9yZXF1ZXN0X2lkID09IFRXX0lP Q1RMX0NIUkRFVl9GUkVFKSB8fCAoaW9jdGxfcmVzZXQpKSB7CisJCWNsZWFyX2JpdChUV19JTl9S RVNFVCwgJnR3X2Rldi0+ZmxhZ3MpOworCX0gZWxzZSB7CisJCXR3X2Rldi0+Y2hyZGV2X3JlcXVl c3RfaWQgPSBUV19JT0NUTF9DSFJERVZfRlJFRTsKKwkJd2FrZV91cCgmdHdfZGV2LT5pb2N0bF93 cXVldWUpOworCX0KIAlyZXR2YWwgPSAwOwogb3V0OgogCXJldHVybiByZXR2YWw7CkBAIC0xNTg5 LDcgKzE2MTYsNyBAQAogCQkJVFdfU09GVF9SRVNFVCh0d19kZXYpOwogCiAJCS8qIE1ha2Ugc3Vy ZSBjb250cm9sbGVyIGlzIGluIGEgZ29vZCBzdGF0ZSAqLwotCQlpZiAodHdhX3BvbGxfc3RhdHVz KHR3X2RldiwgVFdfU1RBVFVTX01JQ1JPQ09OVFJPTExFUl9SRUFEWSB8IChkb19zb2Z0X3Jlc2V0 ID09IDEgPyBUV19TVEFUVVNfQVRURU5USU9OX0lOVEVSUlVQVCA6IDApLCAzMCkpIHsKKwkJaWYg KHR3YV9wb2xsX3N0YXR1cyh0d19kZXYsIFRXX1NUQVRVU19NSUNST0NPTlRST0xMRVJfUkVBRFkg fCAoZG9fc29mdF9yZXNldCA9PSAxID8gVFdfU1RBVFVTX0FUVEVOVElPTl9JTlRFUlJVUFQgOiAw KSwgNjApKSB7CiAJCQlUV19QUklOVEsodHdfZGV2LT5ob3N0LCBUV19EUklWRVIsIDB4MWYsICJN aWNyb2NvbnRyb2xsZXIgbm90IHJlYWR5IGR1cmluZyByZXNldCBzZXF1ZW5jZSIpOwogCQkJZG9f c29mdF9yZXNldCA9IDE7CiAJCQl0cmllcysrOwpAQCAtMTY2MCwzOCArMTY4Nyw2IEBACiAJcmV0 dXJuIDA7CiB9IC8qIEVuZCB0d2Ffc2NzaV9iaW9zcGFyYW0oKSAqLwogCi0vKiBUaGlzIGlzIHRo ZSBuZXcgc2NzaSBlaCBhYm9ydCBmdW5jdGlvbiAqLwotc3RhdGljIGludCB0d2Ffc2NzaV9laF9h Ym9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCkKLXsKLQlpbnQgaTsKLQlUV19EZXZpY2VfRXh0 ZW5zaW9uICp0d19kZXYgPSBOVUxMOwotCWludCByZXR2YWwgPSBGQUlMRUQ7Ci0KLQl0d19kZXYg PSAoVFdfRGV2aWNlX0V4dGVuc2lvbiAqKVNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwot Ci0Jc3Bpbl91bmxvY2tfaXJxKHR3X2Rldi0+aG9zdC0+aG9zdF9sb2NrKTsKLQotCXR3X2Rldi0+ bnVtX2Fib3J0cysrOwotCi0JLyogSWYgd2UgZmluZCBhbnkgSU8ncyBpbiBwcm9jZXNzLCB3ZSBo YXZlIHRvIHJlc2V0IHRoZSBjYXJkICovCi0JZm9yIChpID0gMDsgaSA8IFRXX1FfTEVOR1RIOyBp KyspIHsKLQkJaWYgKCh0d19kZXYtPnN0YXRlW2ldICE9IFRXX1NfRklOSVNIRUQpICYmICh0d19k ZXYtPnN0YXRlW2ldICE9IFRXX1NfSU5JVElBTCkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcg IjN3LTl4eHg6IHNjc2klZDogV0FSTklORzogKDB4JTAyWDoweCUwNFgpOiBVbml0ICMlZDogQ29t bWFuZCAoMHgleCkgdGltZWQgb3V0LCByZXNldHRpbmcgY2FyZC5cbiIsCi0JCQkgICAgICAgdHdf ZGV2LT5ob3N0LT5ob3N0X25vLCBUV19EUklWRVIsIDB4MmMsCi0JCQkgICAgICAgU0NwbnQtPmRl dmljZS0+aWQsIFNDcG50LT5jbW5kWzBdKTsKLQkJCWlmICh0d2FfcmVzZXRfZGV2aWNlX2V4dGVu c2lvbih0d19kZXYpKSB7Ci0JCQkJVFdfUFJJTlRLKHR3X2Rldi0+aG9zdCwgVFdfRFJJVkVSLCAw eDJhLCAiQ29udHJvbGxlciByZXNldCBmYWlsZWQgZHVyaW5nIHNjc2kgYWJvcnQiKTsKLQkJCQln b3RvIG91dDsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHZhbCA9IFNVQ0NFU1M7Ci1v dXQ6Ci0Jc3Bpbl9sb2NrX2lycSh0d19kZXYtPmhvc3QtPmhvc3RfbG9jayk7Ci0JcmV0dXJuIHJl dHZhbDsKLX0gLyogRW5kIHR3YV9zY3NpX2VoX2Fib3J0KCkgKi8KLQogLyogVGhpcyBpcyB0aGUg bmV3IHNjc2kgZWggcmVzZXQgZnVuY3Rpb24gKi8KIHN0YXRpYyBpbnQgdHdhX3Njc2lfZWhfcmVz ZXQoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpCiB7CkBAIC0xNzA0LDE0ICsxNjk5LDE0IEBACiAK IAl0d19kZXYtPm51bV9yZXNldHMrKzsKIAotCXByaW50ayhLRVJOX1dBUk5JTkcgIjN3LTl4eHg6 IHNjc2klZDogU0NTSSBob3N0IHJlc2V0IHN0YXJ0ZWQuXG4iLCB0d19kZXYtPmhvc3QtPmhvc3Rf bm8pOworCXByaW50ayhLRVJOX1dBUk5JTkcgIjN3LTl4eHg6IHNjc2klZDogV0FSTklORzogKDB4 JTAyWDoweCUwNFgpOiBVbml0ICMlZDogQ29tbWFuZCAoMHgleCkgdGltZWQgb3V0LCByZXNldHRp bmcgY2FyZC5cbiIsIHR3X2Rldi0+aG9zdC0+aG9zdF9ubywgVFdfRFJJVkVSLCAweDJjLCBTQ3Bu dC0+ZGV2aWNlLT5pZCwgU0NwbnQtPmNtbmRbMF0pOwogCiAJLyogTm93IHJlc2V0IHRoZSBjYXJk IGFuZCBzb21lIG9mIHRoZSBkZXZpY2UgZXh0ZW5zaW9uIGRhdGEgKi8KLQlpZiAodHdhX3Jlc2V0 X2RldmljZV9leHRlbnNpb24odHdfZGV2KSkgeworCWlmICh0d2FfcmVzZXRfZGV2aWNlX2V4dGVu c2lvbih0d19kZXYsIDApKSB7CiAJCVRXX1BSSU5USyh0d19kZXYtPmhvc3QsIFRXX0RSSVZFUiwg MHgyYiwgIkNvbnRyb2xsZXIgcmVzZXQgZmFpbGVkIGR1cmluZyBzY3NpIGhvc3QgcmVzZXQiKTsK IAkJZ290byBvdXQ7CiAJfQotCXByaW50ayhLRVJOX1dBUk5JTkcgIjN3LTl4eHg6IHNjc2klZDog U0NTSSBob3N0IHJlc2V0IHN1Y2NlZWRlZC5cbiIsIHR3X2Rldi0+aG9zdC0+aG9zdF9ubyk7CisK IAlyZXR2YWwgPSBTVUNDRVNTOwogb3V0OgogCXNwaW5fbG9ja19pcnEodHdfZGV2LT5ob3N0LT5o b3N0X2xvY2spOwpAQCAtMTcyNCw2ICsxNzE5LDE0IEBACiAJaW50IHJlcXVlc3RfaWQsIHJldHZh bDsKIAlUV19EZXZpY2VfRXh0ZW5zaW9uICp0d19kZXYgPSAoVFdfRGV2aWNlX0V4dGVuc2lvbiAq KVNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCisJLyogQ2hlY2sgaWYgdGhpcyBGVyBz dXBwb3J0cyBsdW5zICovCisJaWYgKChTQ3BudC0+ZGV2aWNlLT5sdW4gIT0gMCkgJiYgKHR3X2Rl di0+d29ya2luZ19zcmwgPCBUV19GV19TUkxfTFVOU19TVVBQT1JURUQpKSB7CisJCVNDcG50LT5y ZXN1bHQgPSAoRElEX0JBRF9UQVJHRVQgPDwgMTYpOworCQlkb25lKFNDcG50KTsKKwkJcmV0dmFs ID0gMDsKKwkJZ290byBvdXQ7CisJfQorCiAJLyogU2F2ZSBkb25lIGZ1bmN0aW9uIGludG8gc2Nz aV9jbW5kIHN0cnVjdCAqLwogCVNDcG50LT5zY3NpX2RvbmUgPSBkb25lOwogCQkKQEAgLTE3NDgs MTIgKzE3NTEsMTIgQEAKIAkJZG9uZShTQ3BudCk7CiAJCXJldHZhbCA9IDA7CiAJfQotCitvdXQ6 CiAJcmV0dXJuIHJldHZhbDsKIH0gLyogRW5kIHR3YV9zY3NpX3F1ZXVlKCkgKi8KIAogLyogVGhp cyBmdW5jdGlvbiBoYW5kcyBzY3NpIGNkYidzIHRvIHRoZSBmaXJtd2FyZSAqLwotc3RhdGljIGlu dCB0d2Ffc2NzaW9wX2V4ZWN1dGVfc2NzaShUV19EZXZpY2VfRXh0ZW5zaW9uICp0d19kZXYsIGlu dCByZXF1ZXN0X2lkLCBjaGFyICpjZGIsIGludCB1c2Vfc2csIFRXX1NHX0FwYWNoZSAqc2dsaXN0 YXJnKQorc3RhdGljIGludCB0d2Ffc2NzaW9wX2V4ZWN1dGVfc2NzaShUV19EZXZpY2VfRXh0ZW5z aW9uICp0d19kZXYsIGludCByZXF1ZXN0X2lkLCBjaGFyICpjZGIsIGludCB1c2Vfc2csIFRXX1NH X0VudHJ5ICpzZ2xpc3RhcmcpCiB7CiAJVFdfQ29tbWFuZF9GdWxsICpmdWxsX2NvbW1hbmRfcGFj a2V0OwogCVRXX0NvbW1hbmRfQXBhY2hlICpjb21tYW5kX3BhY2tldDsKQEAgLTE3ODcsMTIgKzE3 OTAsMTYgQEAKIAllbHNlCiAJCW1lbWNweShjb21tYW5kX3BhY2tldC0+Y2RiLCBjZGIsIFRXX01B WF9DREJfTEVOKTsKIAotCWlmIChzcmIpCisJaWYgKHNyYikgewogCQljb21tYW5kX3BhY2tldC0+ dW5pdCA9IHNyYi0+ZGV2aWNlLT5pZDsKLQllbHNlCisJCWNvbW1hbmRfcGFja2V0LT5yZXF1ZXN0 X2lkX19sdW5sID0KKwkJCVRXX1JFUV9MVU5fSU4oc3JiLT5kZXZpY2UtPmx1biwgcmVxdWVzdF9p ZCk7CisJfSBlbHNlIHsKKwkJY29tbWFuZF9wYWNrZXQtPnJlcXVlc3RfaWRfX2x1bmwgPQorCQkJ VFdfUkVRX0xVTl9JTigwLCByZXF1ZXN0X2lkKTsKIAkJY29tbWFuZF9wYWNrZXQtPnVuaXQgPSAw OworCX0KIAotCWNvbW1hbmRfcGFja2V0LT5yZXF1ZXN0X2lkID0gcmVxdWVzdF9pZDsKIAljb21t YW5kX3BhY2tldC0+c2dsX29mZnNldCA9IDE2OwogCiAJaWYgKCFzZ2xpc3RhcmcpIHsKQEAgLTE4 MDksNyArMTgxNiw3IEBACiAJCQkJY29tbWFuZF9wYWNrZXQtPnNnX2xpc3RbMF0uYWRkcmVzcyA9 IGJ1ZmZhZGRyOwogCQkJCWNvbW1hbmRfcGFja2V0LT5zZ19saXN0WzBdLmxlbmd0aCA9IHR3X2Rl di0+c3JiW3JlcXVlc3RfaWRdLT5yZXF1ZXN0X2J1ZmZsZW47CiAJCQl9Ci0JCQljb21tYW5kX3Bh Y2tldC0+c2dsX2VudHJpZXMgPSAxOworCQkJY29tbWFuZF9wYWNrZXQtPnNnbF9lbnRyaWVzX19s dW5oID0gVFdfUkVRX0xVTl9JTigoc3JiLT5kZXZpY2UtPmx1biA+PiA0KSwgMSk7CiAKIAkJCWlm IChjb21tYW5kX3BhY2tldC0+c2dfbGlzdFswXS5hZGRyZXNzICYgVFdfQUxJR05NRU5UXzkwMDBf U0dMKSB7CiAJCQkJVFdfUFJJTlRLKHR3X2Rldi0+aG9zdCwgVFdfRFJJVkVSLCAweDJkLCAiRm91 bmQgdW5hbGlnbmVkIGFkZHJlc3MgZHVyaW5nIGV4ZWN1dGUgc2NzaSIpOwpAQCAtMTgxOCwxOSAr MTgyNSwyNCBAQAogCQl9CiAKIAkJaWYgKHR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdLT51c2Vfc2cg PiAwKSB7Ci0JCQlzZ19jb3VudCA9IHR3YV9tYXBfc2NzaV9zZ19kYXRhKHR3X2RldiwgcmVxdWVz dF9pZCk7Ci0JCQlpZiAoc2dfY291bnQgPT0gMCkKLQkJCQlnb3RvIG91dDsKLQotCQkJZm9yIChp ID0gMDsgaSA8IHNnX2NvdW50OyBpKyspIHsKLQkJCQljb21tYW5kX3BhY2tldC0+c2dfbGlzdFtp XS5hZGRyZXNzID0gc2dfZG1hX2FkZHJlc3MoJnNnbGlzdFtpXSk7Ci0JCQkJY29tbWFuZF9wYWNr ZXQtPnNnX2xpc3RbaV0ubGVuZ3RoID0gc2dfZG1hX2xlbigmc2dsaXN0W2ldKTsKLQkJCQlpZiAo Y29tbWFuZF9wYWNrZXQtPnNnX2xpc3RbaV0uYWRkcmVzcyAmIFRXX0FMSUdOTUVOVF85MDAwX1NH TCkgewotCQkJCQlUV19QUklOVEsodHdfZGV2LT5ob3N0LCBUV19EUklWRVIsIDB4MmUsICJGb3Vu ZCB1bmFsaWduZWQgc2dsIGFkZHJlc3MgZHVyaW5nIGV4ZWN1dGUgc2NzaSIpOworCQkJaWYgKCh0 d19kZXYtPnNyYltyZXF1ZXN0X2lkXS0+dXNlX3NnID09IDEpICYmICh0d19kZXYtPnNyYltyZXF1 ZXN0X2lkXS0+cmVxdWVzdF9idWZmbGVuIDwgVFdfTUlOX1NHTF9MRU5HVEgpKSB7CisJCQkJY29t bWFuZF9wYWNrZXQtPnNnX2xpc3RbMF0uYWRkcmVzcyA9IHR3X2Rldi0+Z2VuZXJpY19idWZmZXJf cGh5c1tyZXF1ZXN0X2lkXTsKKwkJCQljb21tYW5kX3BhY2tldC0+c2dfbGlzdFswXS5sZW5ndGgg PSBUV19NSU5fU0dMX0xFTkdUSDsKKwkJCX0gZWxzZSB7CisJCQkJc2dfY291bnQgPSB0d2FfbWFw X3Njc2lfc2dfZGF0YSh0d19kZXYsIHJlcXVlc3RfaWQpOworCQkJCWlmIChzZ19jb3VudCA9PSAw KQogCQkJCQlnb3RvIG91dDsKKworCQkJCWZvciAoaSA9IDA7IGkgPCBzZ19jb3VudDsgaSsrKSB7 CisJCQkJCWNvbW1hbmRfcGFja2V0LT5zZ19saXN0W2ldLmFkZHJlc3MgPSBzZ19kbWFfYWRkcmVz cygmc2dsaXN0W2ldKTsKKwkJCQkJY29tbWFuZF9wYWNrZXQtPnNnX2xpc3RbaV0ubGVuZ3RoID0g c2dfZG1hX2xlbigmc2dsaXN0W2ldKTsKKwkJCQkJaWYgKGNvbW1hbmRfcGFja2V0LT5zZ19saXN0 W2ldLmFkZHJlc3MgJiBUV19BTElHTk1FTlRfOTAwMF9TR0wpIHsKKwkJCQkJCVRXX1BSSU5USyh0 d19kZXYtPmhvc3QsIFRXX0RSSVZFUiwgMHgyZSwgIkZvdW5kIHVuYWxpZ25lZCBzZ2wgYWRkcmVz cyBkdXJpbmcgZXhlY3V0ZSBzY3NpIik7CisJCQkJCQlnb3RvIG91dDsKKwkJCQkJfQogCQkJCX0K IAkJCX0KLQkJCWNvbW1hbmRfcGFja2V0LT5zZ2xfZW50cmllcyA9IHR3X2Rldi0+c3JiW3JlcXVl c3RfaWRdLT51c2Vfc2c7CisJCQljb21tYW5kX3BhY2tldC0+c2dsX2VudHJpZXNfX2x1bmggPSBU V19SRVFfTFVOX0lOKChzcmItPmRldmljZS0+bHVuID4+IDQpLCB0d19kZXYtPnNyYltyZXF1ZXN0 X2lkXS0+dXNlX3NnKTsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIEludGVybmFsIGNkYiBwb3N0ICov CkBAIC0xODQyLDcgKzE4NTQsNyBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9Ci0JCWNvbW1h bmRfcGFja2V0LT5zZ2xfZW50cmllcyA9IHVzZV9zZzsKKwkJY29tbWFuZF9wYWNrZXQtPnNnbF9l bnRyaWVzX19sdW5oID0gVFdfUkVRX0xVTl9JTigwLCB1c2Vfc2cpOwogCX0KIAogCWlmIChzcmIp IHsKQEAgLTE5MDMsNyArMTkxNSw3IEBACiAJfQogCiAJLyogQ2xlYXIgYWxsIGludGVycnVwdHMg anVzdCBiZWZvcmUgZXhpdCAqLwotCVRXX0VOQUJMRV9BTkRfQ0xFQVJfSU5URVJSVVBUUyh0d19k ZXYpOworCVRXX0NMRUFSX0FMTF9JTlRFUlJVUFRTKHR3X2Rldik7CiB9IC8qIEVuZCBfX3R3YV9z aHV0ZG93bigpICovCiAKIC8qIFdyYXBwZXIgZm9yIF9fdHdhX3NodXRkb3duICovCkBAIC0xOTQ2 LDkgKzE5NTgsOSBAQAogCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQkJPSAiM3dh cmUgOTAwMCBTdG9yYWdlIENvbnRyb2xsZXIiLAogCS5xdWV1ZWNvbW1hbmQJCT0gdHdhX3Njc2lf cXVldWUsCi0JLmVoX2Fib3J0X2hhbmRsZXIJPSB0d2Ffc2NzaV9laF9hYm9ydCwKIAkuZWhfaG9z dF9yZXNldF9oYW5kbGVyCT0gdHdhX3Njc2lfZWhfcmVzZXQsCiAJLmJpb3NfcGFyYW0JCT0gdHdh X3Njc2lfYmlvc3BhcmFtLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSB0d2FfY2hhbmdlX3F1ZXVl X2RlcHRoLAogCS5jYW5fcXVldWUJCT0gVFdfUV9MRU5HVEgtMiwKIAkudGhpc19pZAkJPSAtMSwK IAkuc2dfdGFibGVzaXplCQk9IFRXX0FQQUNIRV9NQVhfU0dMX0xFTkdUSCwKQEAgLTE5NTYsNyAr MTk2OCw2IEBACiAJLmNtZF9wZXJfbHVuCQk9IFRXX01BWF9DTURTX1BFUl9MVU4sCiAJLnVzZV9j bHVzdGVyaW5nCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5zaG9zdF9hdHRycwkJPSB0d2FfaG9z dF9hdHRycywKLQkuc2Rldl9hdHRycwkJPSB0d2FfZGV2X2F0dHJzLAogCS5lbXVsYXRlZAkJPSAx CiB9OwogCkBAIC0xOTc2LDcgKzE5ODcsNyBAQAogCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAK LQlyZXR2YWwgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIFRXX0RNQV9NQVNLKTsKKwlyZXR2YWwg PSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIHNpemVvZihkbWFfYWRkcl90KSA+IDQgPyBETUFfNjRC SVRfTUFTSyA6IERNQV8zMkJJVF9NQVNLKTsKIAlpZiAocmV0dmFsKSB7CiAJCVRXX1BSSU5USyho b3N0LCBUV19EUklWRVIsIDB4MjMsICJGYWlsZWQgdG8gc2V0IGRtYSBtYXNrIik7CiAJCWdvdG8g b3V0X2Rpc2FibGVfZGV2aWNlOwpAQCAtMjAyOCw4ICsyMDM5LDggQEAKIAlob3N0LT5tYXhfaWQg PSBUV19NQVhfVU5JVFM7CiAJaG9zdC0+bWF4X2NtZF9sZW4gPSBUV19NQVhfQ0RCX0xFTjsKIAot CS8qIEx1bnMgYW5kIGNoYW5uZWxzIGFyZW4ndCBzdXBwb3J0ZWQgYnkgYWRhcHRlciAqLwotCWhv c3QtPm1heF9sdW4gPSAwOworCS8qIENoYW5uZWxzIGFyZW4ndCBzdXBwb3J0ZWQgYnkgYWRhcHRl ciAqLworCWhvc3QtPm1heF9sdW4gPSBUV19NQVhfTFVOUyh0d19kZXYtPndvcmtpbmdfc3JsKTsK IAlob3N0LT5tYXhfY2hhbm5lbCA9IDA7CiAKIAkvKiBSZWdpc3RlciB0aGUgY2FyZCB3aXRoIHRo ZSBrZXJuZWwgU0NTSSBsYXllciAqLwpAQCAtMjA5NSwyMyArMjEwNiwyNCBAQAogCiAJc2NzaV9y ZW1vdmVfaG9zdCh0d19kZXYtPmhvc3QpOwogCi0JX190d2Ffc2h1dGRvd24odHdfZGV2KTsKKwkv KiBVbnJlZ2lzdGVyIGNoYXJhY3RlciBkZXZpY2UgKi8KKwlpZiAodHdhX21ham9yID49IDApIHsK KwkJdW5yZWdpc3Rlcl9jaHJkZXYodHdhX21ham9yLCAidHdhIik7CisJCXR3YV9tYWpvciA9IC0x OworCX0KIAogCS8qIEZyZWUgdXAgdGhlIElSUSAqLwogCWZyZWVfaXJxKHR3X2Rldi0+dHdfcGNp X2Rldi0+aXJxLCB0d19kZXYpOwogCisJLyogU2h1dGRvd24gdGhlIGNhcmQgKi8KKwlfX3R3YV9z aHV0ZG93bih0d19kZXYpOworCiAJLyogRnJlZSB1cCB0aGUgbWVtIHJlZ2lvbiAqLwogCXBjaV9y ZWxlYXNlX3JlZ2lvbnMocGRldik7CiAKIAkvKiBGcmVlIHVwIGRldmljZSBleHRlbnNpb24gcmVz b3VyY2VzICovCiAJdHdhX2ZyZWVfZGV2aWNlX2V4dGVuc2lvbih0d19kZXYpOwogCi0JLyogVW5y ZWdpc3RlciBjaGFyYWN0ZXIgZGV2aWNlICovCi0JaWYgKHR3YV9tYWpvciA+PSAwKSB7Ci0JCXVu cmVnaXN0ZXJfY2hyZGV2KHR3YV9tYWpvciwgInR3YSIpOwotCQl0d2FfbWFqb3IgPSAtMTsKLQl9 Ci0KIAlzY3NpX2hvc3RfcHV0KHR3X2Rldi0+aG9zdCk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBk ZXYpOwogCXR3YV9kZXZpY2VfZXh0ZW5zaW9uX2NvdW50LS07CkBAIC0yMTM5LDcgKzIxNTEsNyBA QAogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb24gZHJpdmVyIGluaXRpYWxpemF0aW9uICov CiBzdGF0aWMgaW50IF9faW5pdCB0d2FfaW5pdCh2b2lkKQogewotCXByaW50ayhLRVJOX1dBUk5J TkcgIjN3YXJlIDkwMDAgU3RvcmFnZSBDb250cm9sbGVyIGRldmljZSBkcml2ZXIgZm9yIExpbnV4 IHYlcy5cbiIsIHR3YV9kcml2ZXJfdmVyc2lvbik7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiM3dh cmUgOTAwMCBTdG9yYWdlIENvbnRyb2xsZXIgZGV2aWNlIGRyaXZlciBmb3IgTGludXggdiVzLlxu IiwgVFdfRFJJVkVSX1ZFUlNJT04pOwogCiAJcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmdHdhX2Ry aXZlcik7CiB9IC8qIEVuZCB0d2FfaW5pdCgpICovCmRpZmYgLU5hdXIgbGludXgtMi42LjEyLXJj MS1tbTMvZHJpdmVycy9zY3NpLzN3LTl4eHguaCBsaW51eC0yLjYuMTItcmMxLW1tNC9kcml2ZXJz L3Njc2kvM3ctOXh4eC5oCi0tLSBsaW51eC0yLjYuMTItcmMxLW1tMy9kcml2ZXJzL3Njc2kvM3ct OXh4eC5oCTIwMDUtMDMtMjggMTQ6NDY6MTIuMDAwMDAwMDAwIC0wODAwCisrKyBsaW51eC0yLjYu MTItcmMxLW1tNC9kcml2ZXJzL3Njc2kvM3ctOXh4eC5oCTIwMDUtMDMtMjggMTU6MDk6MDkuMDAw MDAwMDAwIC0wODAwCkBAIC0zLDcgKzMsNyBAQAogCiAgICBXcml0dGVuIEJ5OiBBZGFtIFJhZGZv cmQgPGxpbnV4cmFpZEBhbWNjLmNvbT4KIAotICAgQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxpZWQg TWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24uCisgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBB cHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKQEAgLTI5Myw3ICsyOTMsNiBAQAogI2RlZmluZSBUV19SRVNQT05TRV9JRF9N QVNLCQkgICAgICAgMHgwMDAwMEZGMAogCiAvKiBQQ0kgcmVsYXRlZCBkZWZpbmVzICovCi0jZGVm aW5lIFRXX0RFVklDRV9OQU1FCQkJICAgICAgICIzdy05eHh4IgogI2RlZmluZSBUV19OVU1ERVZJ Q0VTIDEKICNkZWZpbmUgVFdfUENJX0NMRUFSX1BBUklUWV9FUlJPUlMgMHhjMTAwCiAjZGVmaW5l IFRXX1BDSV9DTEVBUl9QQ0lfQUJPUlQgICAgIDB4MjAwMApAQCAtMzI1LDkgKzMyNCw5IEBACiAK IC8qIENvbXBhdGliaWxpdHkgZGVmaW5lcyAqLwogI2RlZmluZSBUV185MDAwX0FSQ0hfSUQgMHg1 Ci0jZGVmaW5lIFRXX0NVUlJFTlRfRldfU1JMIDI0Ci0jZGVmaW5lIFRXX0NVUlJFTlRfRldfQlVJ TEQgNQotI2RlZmluZSBUV19DVVJSRU5UX0ZXX0JSQU5DSCAxCisjZGVmaW5lIFRXX0NVUlJFTlRf RFJJVkVSX1NSTCAyOAorI2RlZmluZSBUV19DVVJSRU5UX0RSSVZFUl9CVUlMRCA5CisjZGVmaW5l IFRXX0NVUlJFTlRfRFJJVkVSX0JSQU5DSCA0CiAKIC8qIFBoYXNlIGRlZmluZXMgKi8KICNkZWZp bmUgVFdfUEhBU0VfSU5JVElBTCAwCkBAIC0zNDYsMTkgKzM0NSwxMCBAQAogI2RlZmluZSBUV19C VU5ETEVEX0ZXX1NBRkVfVE9fRkxBU0gJICAgICAgMHg0CiAjZGVmaW5lIFRXX0NUTFJfRldfUkVD T01NRU5EU19GTEFTSAkgICAgICAweDgKICNkZWZpbmUgVFdfQ1RMUl9GV19DT01QQVRJQkxFCQkg ICAgICAweDIKLSNkZWZpbmUgVFdfQkFTRV9GV19TUkwJCQkgICAgICAweDE3CisjZGVmaW5lIFRX X0JBU0VfRldfU1JMCQkJICAgICAgMjQKICNkZWZpbmUgVFdfQkFTRV9GV19CUkFOQ0gJCSAgICAg IDAKICNkZWZpbmUgVFdfQkFTRV9GV19CVUlMRAkJICAgICAgMQotI2lmIEJJVFNfUEVSX0xPTkcg PiAzMgotI2RlZmluZSBUV19BUEFDSEVfTUFYX1NHTF9MRU5HVEggNzIKLSNkZWZpbmUgVFdfRVND QUxBREVfTUFYX1NHTF9MRU5HVEggNDEKLSNkZWZpbmUgVFdfQVBBQ0hFX0NNRF9QS1RfU0laRSA1 Ci0jZWxzZQotI2RlZmluZSBUV19BUEFDSEVfTUFYX1NHTF9MRU5HVEggMTA5Ci0jZGVmaW5lIFRX X0VTQ0FMQURFX01BWF9TR0xfTEVOR1RIIDYyCi0jZGVmaW5lIFRXX0FQQUNIRV9DTURfUEtUX1NJ WkUgNAotI2VuZGlmCi0jZGVmaW5lIFRXX0FUQV9QQVNTX1NHTF9NQVggICAgICAgICAgICAgICAg ICAgNjAKKyNkZWZpbmUgVFdfRldfU1JMX0xVTlNfU1VQUE9SVEVEICAgICAgICAgICAgICAyOAog I2RlZmluZSBUV19RX0xFTkdUSAkJCSAgICAgIDI1NgogI2RlZmluZSBUV19RX1NUQVJUCQkJICAg ICAgMAogI2RlZmluZSBUV19NQVhfU0xPVAkJCSAgICAgIDMyCkBAIC0zNjYsNyArMzU2LDcgQEAK ICNkZWZpbmUgVFdfTUFYX0NNRFNfUEVSX0xVTgkJICAgICAgMjU0CiAjZGVmaW5lIFRXX01BWF9S RVNQT05TRV9EUkFJTgkJICAgICAgMjU2CiAjZGVmaW5lIFRXX01BWF9BRU5fRFJBSU4JCSAgICAg IDQwCi0jZGVmaW5lIFRXX0lOX0lPQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2Rl ZmluZSBUV19JTl9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKICNkZWZpbmUgVFdf SU5fQ0hSREVWX0lPQ1RMICAgICAgICAgICAgICAgICAgICAzCiAjZGVmaW5lIFRXX0lOX0FUVEVO VElPTl9MT09QCQkgICAgICA0CiAjZGVmaW5lIFRXX01BWF9TRUNUT1JTICAgICAgICAgICAgICAg ICAgICAgICAgMjU2CkBAIC00MjQsMTMgKzQxNCw2IEBACiAjZGVmaW5lIFRXX0RSSVZFUiBUV19N RVNTQUdFX1NPVVJDRV9MSU5VWF9EUklWRVIKICNkZWZpbmUgVFdfTUVTU0FHRV9TT1VSQ0VfTElO VVhfT1MgICAgICAgICAgICA5CiAjZGVmaW5lIFRXX09TIFRXX01FU1NBR0VfU09VUkNFX0xJTlVY X09TCi0jaWYgQklUU19QRVJfTE9ORyA+IDMyCi0jZGVmaW5lIFRXX0NPTU1BTkRfU0laRQkJCSAg ICAgIDUKLSNkZWZpbmUgVFdfRE1BX01BU0sJCQkgICAgICBETUFfNjRCSVRfTUFTSwotI2Vsc2UK LSNkZWZpbmUgVFdfQ09NTUFORF9TSVpFCQkJICAgICAgNAotI2RlZmluZSBUV19ETUFfTUFTSwkJ CSAgICAgIERNQV8zMkJJVF9NQVNLCi0jZW5kaWYKICNpZm5kZWYgUENJX0RFVklDRV9JRF8zV0FS RV85MDAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM1dBUkVfOTAwMCAweDEwMDIKICNlbmRpZgpA QCAtNDUxLDE0ICs0MzQsMTQgQEAKIC8qIHJlc2VydmVkXzE6IDQsIHJlc3BvbnNlX2lkOiA4LCBy ZXNlcnZlZF8yOiAyMCAqLwogI2RlZmluZSBUV19SRVNJRF9PVVQoeCkgKCh4ID4+IDQpICYgMHhm ZikKIAorLyogcmVxdWVzdF9pZDogMTIsIGx1bjogNCAqLworI2RlZmluZSBUV19SRVFfTFVOX0lO KGx1biwgcmVxdWVzdF9pZCkgKCgobHVuIDw8IDEyKSAmIDB4ZjAwMCkgfCAocmVxdWVzdF9pZCAm IDB4ZmZmKSkKKyNkZWZpbmUgVFdfTFVOX09VVChsdW4pICgobHVuID4+IDEyKSAmIDB4ZikKKwog LyogTWFjcm9zICovCiAjZGVmaW5lIFRXX0NPTlRST0xfUkVHX0FERFIoeCkgKHgtPmJhc2VfYWRk cikKICNkZWZpbmUgVFdfU1RBVFVTX1JFR19BRERSKHgpICgodW5zaWduZWQgY2hhciBfX2lvbWVt ICopeC0+YmFzZV9hZGRyICsgMHg0KQotI2lmIEJJVFNfUEVSX0xPTkcgPiAzMgotI2RlZmluZSBU V19DT01NQU5EX1FVRVVFX1JFR19BRERSKHgpICgodW5zaWduZWQgY2hhciBfX2lvbWVtICopeC0+ YmFzZV9hZGRyICsgMHgyMCkKLSNlbHNlCi0jZGVmaW5lIFRXX0NPTU1BTkRfUVVFVUVfUkVHX0FE RFIoeCkgKCh1bnNpZ25lZCBjaGFyIF9faW9tZW0gKil4LT5iYXNlX2FkZHIgKyAweDgpCi0jZW5k aWYKKyNkZWZpbmUgVFdfQ09NTUFORF9RVUVVRV9SRUdfQUREUih4KSAoc2l6ZW9mKGRtYV9hZGRy X3QpID4gNCA/ICgodW5zaWduZWQgY2hhciBfX2lvbWVtICopeC0+YmFzZV9hZGRyICsgMHgyMCkg OiAoKHVuc2lnbmVkIGNoYXIgX19pb21lbSAqKXgtPmJhc2VfYWRkciArIDB4OCkpCiAjZGVmaW5l IFRXX1JFU1BPTlNFX1FVRVVFX1JFR19BRERSKHgpICgodW5zaWduZWQgY2hhciBfX2lvbWVtICop eC0+YmFzZV9hZGRyICsgMHhDKQogI2RlZmluZSBUV19DTEVBUl9BTExfSU5URVJSVVBUUyh4KSAo d3JpdGVsKFRXX1NUQVRVU19WQUxJRF9JTlRFUlJVUFQsIFRXX0NPTlRST0xfUkVHX0FERFIoeCkp KQogI2RlZmluZSBUV19DTEVBUl9BVFRFTlRJT05fSU5URVJSVVBUKHgpICh3cml0ZWwoVFdfQ09O VFJPTF9DTEVBUl9BVFRFTlRJT05fSU5URVJSVVBULCBUV19DT05UUk9MX1JFR19BRERSKHgpKSkK QEAgLTQ4MCwxMiArNDYzLDE3IEBACiBlbHNlIFwKIHByaW50ayhLRVJOX1dBUk5JTkcgIjN3LTl4 eHg6IEVSUk9SOiAoMHglMDJYOjB4JTA0WCk6ICVzLlxuIixhLGIsYyk7IFwKIH0KKyNkZWZpbmUg VFdfTUFYX0xVTlMoc3JsKSAoc3JsIDwgVFdfRldfU1JMX0xVTlNfU1VQUE9SVEVEID8gMSA6IDE2 KQorI2RlZmluZSBUV19DT01NQU5EX1NJWkUgKHNpemVvZihkbWFfYWRkcl90KSA+IDQgPyA1IDog NCkKKyNkZWZpbmUgVFdfQVBBQ0hFX01BWF9TR0xfTEVOR1RIIChzaXplb2YoZG1hX2FkZHJfdCkg PiA0ID8gNzIgOiAxMDkpCisjZGVmaW5lIFRXX0VTQ0FMQURFX01BWF9TR0xfTEVOR1RIIChzaXpl b2YoZG1hX2FkZHJfdCkgPiA0ID8gNDEgOiA2MikKKyNkZWZpbmUgVFdfUEFERElOR19MRU5HVEgg KHNpemVvZihkbWFfYWRkcl90KSA+IDQgPyA4IDogMCkKIAogI3ByYWdtYSBwYWNrKDEpCiAKIC8q IFNjYXR0ZXIgR2F0aGVyIExpc3QgRW50cnkgKi8KIHR5cGVkZWYgc3RydWN0IFRBR19UV19TR19F bnRyeSB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCWRtYV9hZGRyX3QgYWRkcmVzczsKIAl1 MzIgbGVuZ3RoOwogfSBUV19TR19FbnRyeTsKIApAQCAtNTA2LDQyICs0OTQsMjcgQEAKIAkJc3Ry dWN0IHsKIAkJCXUzMiBsYmE7CiAJCQlUV19TR19FbnRyeSBzZ2xbVFdfRVNDQUxBREVfTUFYX1NH TF9MRU5HVEhdOwotI2lmIEJJVFNfUEVSX0xPTkcgPiAzMgotCQkJdTMyIHBhZGRpbmdbMl07CS8q IHBhZCB0byA1MTIgYnl0ZXMgKi8KLSNlbHNlCi0JCQl1MzIgcGFkZGluZzsKLSNlbmRpZgorCQkJ ZG1hX2FkZHJfdCBwYWRkaW5nOwogCQl9IGlvOwogCQlzdHJ1Y3QgewogCQkJVFdfU0dfRW50cnkg c2dsW1RXX0VTQ0FMQURFX01BWF9TR0xfTEVOR1RIXTsKLSNpZiBCSVRTX1BFUl9MT05HID4gMzIK LQkJCXUzMiBwYWRkaW5nWzNdOwotI2Vsc2UKLQkJCXUzMiBwYWRkaW5nWzJdOwotI2VuZGlmCisJ CQl1MzIgcGFkZGluZzsKKwkJCWRtYV9hZGRyX3QgcGFkZGluZzI7CiAJCX0gcGFyYW07CiAJfSBi eXRlOF9vZmZzZXQ7CiB9IFRXX0NvbW1hbmQ7CiAKLS8qIFNjYXR0ZXIgZ2F0aGVyIGVsZW1lbnQg Zm9yIDkwMDArIGNvbnRyb2xsZXJzICovCi10eXBlZGVmIHN0cnVjdCBUQUdfVFdfU0dfQXBhY2hl IHsKLQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7Ci0JdTMyIGxlbmd0aDsKLX0gVFdfU0dfQXBhY2hl OwotCiAvKiBDb21tYW5kIFBhY2tldCBmb3IgOTAwMCsgY29udHJvbGxlcnMgKi8KIHR5cGVkZWYg c3RydWN0IFRBR19UV19Db21tYW5kX0FwYWNoZSB7CiAJdW5zaWduZWQgY2hhciBvcGNvZGVfX3Jl c2VydmVkOwogCXVuc2lnbmVkIGNoYXIgdW5pdDsKLQl1bnNpZ25lZCBzaG9ydCByZXF1ZXN0X2lk OworCXVuc2lnbmVkIHNob3J0IHJlcXVlc3RfaWRfX2x1bmw7CiAJdW5zaWduZWQgY2hhciBzdGF0 dXM7CiAJdW5zaWduZWQgY2hhciBzZ2xfb2Zmc2V0OwotCXVuc2lnbmVkIHNob3J0IHNnbF9lbnRy aWVzOworCXVuc2lnbmVkIHNob3J0IHNnbF9lbnRyaWVzX19sdW5oOwogCXVuc2lnbmVkIGNoYXIg Y2RiWzE2XTsKLQlUV19TR19BcGFjaGUgc2dfbGlzdFtUV19BUEFDSEVfTUFYX1NHTF9MRU5HVEhd OwotI2lmIEJJVFNfUEVSX0xPTkcgPiAzMgotCXVuc2lnbmVkIGNoYXIgcGFkZGluZ1s4XTsKLSNl bmRpZgorCVRXX1NHX0VudHJ5IHNnX2xpc3RbVFdfQVBBQ0hFX01BWF9TR0xfTEVOR1RIXTsKKwl1 bnNpZ25lZCBjaGFyIHBhZGRpbmdbVFdfUEFERElOR19MRU5HVEhdOwogfSBUV19Db21tYW5kX0Fw YWNoZTsKIAogLyogTmV3IGNvbW1hbmQgcGFja2V0IGhlYWRlciAqLwpAQCAtNjUyLDE0ICs2MjUs MjAgQEAKIAl1bnNpZ25lZCBzaG9ydCB3b3JraW5nX3NybDsKIAl1bnNpZ25lZCBzaG9ydCB3b3Jr aW5nX2JyYW5jaDsKIAl1bnNpZ25lZCBzaG9ydCB3b3JraW5nX2J1aWxkOworCXVuc2lnbmVkIHNo b3J0IGRyaXZlcl9zcmxfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydCBkcml2ZXJfYnJhbmNoX2hpZ2g7 CisJdW5zaWduZWQgc2hvcnQgZHJpdmVyX2J1aWxkX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQgZHJp dmVyX3NybF9sb3c7CisJdW5zaWduZWQgc2hvcnQgZHJpdmVyX2JyYW5jaF9sb3c7CisJdW5zaWdu ZWQgc2hvcnQgZHJpdmVyX2J1aWxkX2xvdzsKIH0gVFdfQ29tcGF0aWJpbGl0eV9JbmZvOwogCiB0 eXBlZGVmIHN0cnVjdCBUQUdfVFdfRGV2aWNlX0V4dGVuc2lvbiB7CiAJdTMyICAgICAgICAgICAg ICAgICAgICAgX19pb21lbSAqYmFzZV9hZGRyOwogCXVuc2lnbmVkIGxvbmcJICAgICAgIAkqZ2Vu ZXJpY19idWZmZXJfdmlydFtUV19RX0xFTkdUSF07Ci0JdW5zaWduZWQgbG9uZwkgICAgICAgCWdl bmVyaWNfYnVmZmVyX3BoeXNbVFdfUV9MRU5HVEhdOworCWRtYV9hZGRyX3QJICAgICAgIAlnZW5l cmljX2J1ZmZlcl9waHlzW1RXX1FfTEVOR1RIXTsKIAlUV19Db21tYW5kX0Z1bGwJICAgICAgIAkq Y29tbWFuZF9wYWNrZXRfdmlydFtUV19RX0xFTkdUSF07Ci0JdW5zaWduZWQgbG9uZwkJY29tbWFu ZF9wYWNrZXRfcGh5c1tUV19RX0xFTkdUSF07CisJZG1hX2FkZHJfdAkJY29tbWFuZF9wYWNrZXRf cGh5c1tUV19RX0xFTkdUSF07CiAJc3RydWN0IHBjaV9kZXYJCSp0d19wY2lfZGV2OwogCXN0cnVj dCBzY3NpX2NtbmQJKnNyYltUV19RX0xFTkdUSF07CiAJdW5zaWduZWQgY2hhcgkJZnJlZV9xdWV1 ZVtUV19RX0xFTkdUSF07CkBAIC02NzUsNyArNjU0LDYgQEAKIAl1bnNpZ25lZCBpbnQJCW1heF9w ZW5kaW5nX3JlcXVlc3RfY291bnQ7CiAJdW5zaWduZWQgaW50CQltYXhfc2dsX2VudHJpZXM7CiAJ dW5zaWduZWQgaW50CQlzZ2xfZW50cmllczsKLQl1bnNpZ25lZCBpbnQJCW51bV9hYm9ydHM7CiAJ dW5zaWduZWQgaW50CQludW1fcmVzZXRzOwogCXVuc2lnbmVkIGludAkJc2VjdG9yX2NvdW50Owog CXVuc2lnbmVkIGludAkJbWF4X3NlY3Rvcl9jb3VudDsK ------=_Part_1628_14564561.1112057626184--