From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jun Kamada Subject: [PATCH 2/6] pvSCSI (SCSI pass through) driver Date: Tue, 30 Oct 2007 19:39:16 +0900 Message-ID: <20071030193915.441C.KAMA@jp.fujitsu.com> References: <20071025105803.5A32.KAMA@jp.fujitsu.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------_47270739000000004436_MULTIPART_MIXED_" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20071025105803.5A32.KAMA@jp.fujitsu.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com Cc: kama@jp.fujitsu.com, xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org --------_47270739000000004436_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit This patch is for backend driver. Signed-off-by: Tomonari Horikoshi Signed-off-by: Tsunehisa Doi Signed-off-by: Jun Kamada Signed-off-by: Akira Hayakawa ----- Jun Kamada --------_47270739000000004436_MULTIPART_MIXED_ Content-Type: application/octet-stream; name="linux_scsiback.patch" Content-Disposition: attachment; filename="linux_scsiback.patch" Content-Transfer-Encoding: base64 IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIHQuaG9yaWtvc2hpQGpwLmZ1aml0c3UuY29tCiMg RGF0ZSAxMTkzNzMwMTkwIC0zMjQwMAojIE5vZGUgSUQgMzc0YWE1YjczMTA1NmIyMTgyZmY2MGQy ZWZhOWYzNTI0MjMyZDhkOAojIFBhcmVudCAgMjRlMGNiOWZlOWRmNmY0YTZkZjIyNjgyMzU2MmJl YzMwODkwNzJlNgpbTElOVVhdW3Njc2liYWNrXSBhZGQgc2NzaSBiYWNrZW5kIGRyaXZlcgoKU2ln bmVkLW9mZi1ieTogVG9tb25hcmkgSG9yaWtvc2hpIDx0Lmhvcmlrb3NoaUBqcC5mdWppdHN1LmNv bT4KU2lnbmVkLW9mZi1ieTogVHN1bmVoaXNhIERvaSA8RG9pLlRzdW5laGlzYUBqcC5mdWppdHN1 LmNvbT4KU2lnbmVkLW9mZi1ieTogSnVuIEthbWFkYSA8a2FtYUBqcC5mdWppdHN1LmNvbT4KU2ln bmVkLW9mZi1ieTogQWtpcmEgSGF5YWthd2EgPGhheWFrYXdhLmFraXJhQGpwLmZ1aml0c3UuY29t PgoKZGlmZiAtciAyNGUwY2I5ZmU5ZGYgLXIgMzc0YWE1YjczMTA1IGRyaXZlcnMveGVuL3Njc2li YWNrL01ha2VmaWxlCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAw CisrKyBiL2RyaXZlcnMveGVuL3Njc2liYWNrL01ha2VmaWxlCVR1ZSBPY3QgMzAgMTY6NDM6MTAg MjAwNyArMDkwMApAQCAtMCwwICsxLDggQEAKK2lmZXEgKCQoQ09ORklHX1hFTl9GQykseSkKKyAg RVhUUkFfQ0ZMQUdTICs9IC1EQ09ORklHX1hFTl9GQworICBvYmotJChDT05GSUdfWEVOX1NDU0lf QkFDS0VORCkJKz0geGVuLWZjc2NzaWJrLm8KKyAgeGVuLWZjc2NzaWJrLXkJCQkrPSBpbnRlcmZh Y2UubyBzY3NpYmFjay5vIHhlbmJ1cy5vIGZjYmFjay5vIGNvbWJhY2subyB0cmFjZWJhY2subwor ZWxzZQorICBvYmotJChDT05GSUdfWEVOX1NDU0lfQkFDS0VORCkJKz0geGVuLXNjc2liay5vCisg IHhlbi1zY3NpYmsteQkJCQkrPSBpbnRlcmZhY2UubyBzY3NpYmFjay5vIHhlbmJ1cy5vIGNvbWJh Y2subyB0cmFjZWJhY2subworZW5kaWYKZGlmZiAtciAyNGUwY2I5ZmU5ZGYgLXIgMzc0YWE1Yjcz MTA1IGRyaXZlcnMveGVuL3Njc2liYWNrL2NvbWJhY2suYwotLS0gL2Rldi9udWxsCVRodSBKYW4g MDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysgYi9kcml2ZXJzL3hlbi9zY3NpYmFjay9jb21iYWNr LmMJVHVlIE9jdCAzMCAxNjo0MzoxMCAyMDA3ICswOTAwCkBAIC0wLDAgKzEsMjcyIEBACisvKgor ICogWGVuIFNDU0kgYmFja2VuZCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIEZV SklUU1UgTGltaXRlZAorICoKKyAqIEJhc2VkIG9uIHRoZSBibGtiYWNrIGRyaXZlciBjb2RlLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IG9yLCB3aGVuIGRpc3RyaWJ1dGVkCisgKiBzZXBhcmF0ZWx5 IGZyb20gdGhlIExpbnV4IGtlcm5lbCBvciBpbmNvcnBvcmF0ZWQgaW50byBvdGhlcgorICogc29m dHdhcmUgcGFja2FnZXMsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBsaWNlbnNlOgorICogCisg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvdXJjZSBmaWxlICh0aGUgIlNvZnR3 YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqIHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksCisgKiBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKKyAqIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFM TCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS IERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHNjc2kvc2Nz aS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2Rl dmljZS5oPgorI2lmZGVmIENPTkZJR19YRU5fRkMKKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNw b3J0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oPgorI2VuZGlmCisKKyNp bmNsdWRlICJjb21iYWNrLmgiCisKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHBlbmRpbmdfZnJl ZTsKK2V4dGVybiBpbnQgdnNjc2lpZl9yZXFzOworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBl bmRpbmdfZnJlZV9sb2NrKTsKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChwZW5kaW5n X2ZyZWVfd3EpOworCitleHRlcm4gdm9pZCBzY3NpYmFja19jbWRfZXhlYyhwZW5kaW5nX3JlcV90 ICopOworZXh0ZXJuIGludCBjb3B5X3JlcXVlc3RfcmluZ19pbmZvKHN0cnVjdCBjb21iYWNrX2lu Zm8gKiwKKwkJc3RydWN0IHZzY3NpaWZfZnRiX3JlcXVlc3QgKiwgcGVuZGluZ19yZXFfdCAqKTsK K2V4dGVybiB2b2lkIHNjc2liYWNrX3Jlc2V0X2V4ZWMocGVuZGluZ19yZXFfdCAqKTsKK2V4dGVy biB2b2lkIHNjc2lfdHJhY2UodW5zaWduZWQgbG9uZywgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25l ZCBpbnQpOworCisjaWZkZWYgQ09ORklHX1hFTl9GQworZXh0ZXJuIHZvaWQgZmNiYWNrX2NtZF9l eGVjKHBlbmRpbmdfcmVxX3QgKik7CisjZW5kaWYKKworc3RhdGljIHZvaWQgcmVhZF9idGZfcmlu Z19yZXNwX2NvbnMoc3RydWN0IGNvbWJhY2tfaW5mbyAqaW5mbyk7CisKKy8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyog CWZvciBmcm9udGVuZCB0byBiYWNrZW5kIGNvbW11bmljYXRpb24JCQkqLworLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisK K3N0YXRpYyBwZW5kaW5nX3JlcV90ICogYWxsb2NfcmVxKHZvaWQpCit7CisJcGVuZGluZ19yZXFf dCAqcmVxID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNh dmUoJnBlbmRpbmdfZnJlZV9sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZwZW5kaW5n X2ZyZWUpKSB7CisJCXJlcSA9IGxpc3RfZW50cnkocGVuZGluZ19mcmVlLm5leHQsIHBlbmRpbmdf cmVxX3QsIHUuc2NzaS5mcmVlX2xpc3QpOworCQlsaXN0X2RlbCgmcmVxLT51LnNjc2kuZnJlZV9s aXN0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGVuZGluZ19mcmVlX2xvY2ssIGZs YWdzKTsKKwlyZXR1cm4gcmVxOworfQorCit2b2lkIGZyZWVfcmVxKHBlbmRpbmdfcmVxX3QgKnJl cSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB3YXNfZW1wdHk7CisKKwlzcGluX2xv Y2tfaXJxc2F2ZSgmcGVuZGluZ19mcmVlX2xvY2ssIGZsYWdzKTsKKwl3YXNfZW1wdHkgPSBsaXN0 X2VtcHR5KCZwZW5kaW5nX2ZyZWUpOworCWxpc3RfYWRkKCZyZXEtPnUuc2NzaS5mcmVlX2xpc3Qs ICZwZW5kaW5nX2ZyZWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBlbmRpbmdfZnJlZV9s b2NrLCBmbGFncyk7CisJaWYgKHdhc19lbXB0eSkKKwkJd2FrZV91cCgmcGVuZGluZ19mcmVlX3dx KTsKK30KKworc3RhdGljIHZvaWQgY29tYmFja19ub3RpZnlfd29yayhzdHJ1Y3QgY29tYmFja19p bmZvICppbmZvKQoreworCWluZm8tPndhaXRpbmdfcmVxcyA9IDE7CisJd2FrZV91cCgmaW5mby0+ d3EpOworfQorCitpcnFyZXR1cm5fdCBjb21iYWNrX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lk LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwljb21iYWNrX25vdGlmeV93b3JrKChzdHJ1Y3Qg Y29tYmFja19pbmZvICopZGV2X2lkKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRp YyBpbnQgX19jb3B5X3JlcXVlc3RfcmluZ19pbmZvKHN0cnVjdCBjb21iYWNrX2luZm8gKmluZm8s CisJc3RydWN0IHZzY3NpaWZfZnRiX3JlcXVlc3QgKmZ0Yl9yZXEsIHBlbmRpbmdfcmVxX3QgKnBl bmRpbmdfcmVxKQoreworCXBlbmRpbmdfcmVxLT5jbW5kID0gZnRiX3JlcS0+Y21uZDsKKwlwZW5k aW5nX3JlcS0+aW5mbyA9IGluZm87CisKKwlpZiAoZnRiX3JlcS0+Y21uZCA9PSBDTU5EX1NDU0kg fHwgZnRiX3JlcS0+Y21uZCA9PSBDTU5EX1NDU0lfUkVTRVQpIHsKKwkJcmV0dXJuIGNvcHlfcmVx dWVzdF9yaW5nX2luZm8oaW5mbywgZnRiX3JlcSwgcGVuZGluZ19yZXEpOworCX0gZWxzZSB7Cisj aWZkZWYgQ09ORklHX1hFTl9GQworCQlwZW5kaW5nX3JlcS0+dS5mYy5mdGJfcmVxID0gKmZ0Yl9y ZXE7CisjZWxzZQorCQlCVUcoKTsKKyNlbmRpZgkKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgZG9fY29tYmFja19jbWRfZm4oc3RydWN0IGNvbWJhY2tfaW5mbyAqaW5mbykKK3sKKwlz dHJ1Y3QgdnNjc2lpZl9mdGJfYmFja19yaW5nICpmdGJfcmluZyA9ICZpbmZvLT5mdGJfcmluZzsK KwlzdHJ1Y3QgdnNjc2lpZl9mdGJfcmVxdWVzdCAgKmZ0Yl9yZXE7CisJc3RydWN0IHZzY3NpaWZf ZnRiX3Jlc3BvbnNlICpmdGJfcmVzcDsKKworCXBlbmRpbmdfcmVxX3QgKnBlbmRpbmdfcmVxW3Zz Y3NpaWZfcmVxc107CisJUklOR19JRFggcmMsIHJwOworCWludCBpLCBlcnIsIG1vcmVfdG9fZG8g PSAwOworCWludCBxdWV1ZWQgPSAwOworCWludCBub3RpZnk7CisKKwlEUFJJTlRLKCIlc1xuIixf X0ZVTkNUSU9OX18pOworCisJcmMgPSBmdGJfcmluZy0+cmVxX2NvbnM7CisJcnAgPSBmdGJfcmlu Zy0+c3JpbmctPnJlcV9wcm9kOworCXJtYigpOworCisJd2hpbGUgKChyYyAhPSBycCkgJiYgIVJJ TkdfUkVRVUVTVF9DT05TX09WRVJGTE9XKGZ0Yl9yaW5nLCByYykpIHsKKwkJcGVuZGluZ19yZXFb cXVldWVkXSA9IGFsbG9jX3JlcSgpOworCQlpZiAoTlVMTCA9PSBwZW5kaW5nX3JlcVtxdWV1ZWRd KSB7CisJCQltb3JlX3RvX2RvID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoqKioqIEZyb250 IHRvIEJhY2sgcmVxdWVzdCBjb25zdW1lICoqKioqLworCisJCWZ0Yl9yZXEgPSBSSU5HX0dFVF9S RVFVRVNUKGZ0Yl9yaW5nLCByYyk7CisJCWZ0Yl9yaW5nLT5yZXFfY29ucyA9ICsrcmM7CisKKwkJ ZXJyID0gX19jb3B5X3JlcXVlc3RfcmluZ19pbmZvKGluZm8sIGZ0Yl9yZXEsIHBlbmRpbmdfcmVx W3F1ZXVlZF0pOworCisJCXNjc2lfdHJhY2UoMCwgKHVuc2lnbmVkIGNoYXIgKikocGVuZGluZ19y ZXFbcXVldWVkXSksCisJCQkgICBzaXplb2YocGVuZGluZ19yZXFfdCkpOworCisJCS8qIEl0IHJl c3BvbmRzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb21tYW5kIGlzIGlzc3VlZC4gKi8KKwkJZnRi X3Jlc3AgPSBSSU5HX0dFVF9SRVNQT05TRShmdGJfcmluZywKKwkJCQkJZnRiX3JpbmctPnJzcF9w cm9kX3B2dCk7CisKKwkJaWYgKCFSSU5HX0ZVTEwoJmluZm8tPmJ0Zl9yaW5nKSkgeworCQkJZnRi X3Jlc3AtPnN0YXR1cyA9IFNDU0lJRl9SRVFfT0tBWTsKKwkJfSBlbHNlIHsKKwkJCWZ0Yl9yZXNw LT5zdGF0dXMgPSBTQ1NJSUZfQlRGUklOR19CVVNZOworCQkJUklOR19QVVNIX1JFUVVFU1RTX0FO RF9DSEVDS19OT1RJRlkoJmluZm8tPmJ0Zl9yaW5nLCBub3RpZnkpOworCQkJaWYgKG5vdGlmeSkK KwkJCQlub3RpZnlfcmVtb3RlX3ZpYV9pcnEoaW5mby0+aXJxKTsKKwkJfQorCisJCWZ0Yl9yaW5n LT5yc3BfcHJvZF9wdnQrKzsKKwkJUklOR19QVVNIX1JFU1BPTlNFUyhmdGJfcmluZyk7CisKKwkJ cXVldWVkKys7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHF1ZXVlZDsgaSsrKSB7CisJCWlmIChw ZW5kaW5nX3JlcVtpXS0+Y21uZCA9PSBDTU5EX1NDU0kpIHsKKwkJCXNjc2liYWNrX2NtZF9leGVj KHBlbmRpbmdfcmVxW2ldKTsKKwkJfSBlbHNlIGlmIChwZW5kaW5nX3JlcVtpXS0+Y21uZCA9PSBD TU5EX1NDU0lfUkVTRVQpIHsKKwkJCXNjc2liYWNrX3Jlc2V0X2V4ZWMocGVuZGluZ19yZXFbaV0p OworI2lmbmRlZiBDT05GSUdfWEVOX0ZDCisJCX0KKyNlbHNlCisJCX0gZWxzZSB7CisJCQlmY2Jh Y2tfY21kX2V4ZWMocGVuZGluZ19yZXFbaV0pOworCQl9CisjZW5kaWYKKwl9CisKKwlpZiAoZnRi X3JpbmctPnJzcF9wcm9kX3B2dCA9PSByYykgeworCQlSSU5HX0ZJTkFMX0NIRUNLX0ZPUl9SRVFV RVNUUyhmdGJfcmluZywgbW9yZV90b19kbyk7CisJCQorCX0gZWxzZSBpZiAoUklOR19IQVNfVU5D T05TVU1FRF9SRVFVRVNUUyhmdGJfcmluZykpIHsKKwkJbW9yZV90b19kbyA9IDE7CisJfQorCisJ cmV0dXJuIG1vcmVfdG9fZG87Cit9CisKK2ludCBjb21iYWNrX3NjaGVkdWxlKHZvaWQgKmRhdGEp Cit7CisJc3RydWN0IGNvbWJhY2tfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgY29tYmFja19pbmZvICop ZGF0YTsKKworCURQUklOVEsoIiVzXG4iLF9fRlVOQ1RJT05fXyk7CisKKwlzY3NpYmFja19nZXQo aW5mbyk7CisKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQl3YWl0X2V2ZW50 X2ludGVycnVwdGlibGUoCisJCQlpbmZvLT53cSwKKwkJCWluZm8tPndhaXRpbmdfcmVxcyB8fCBr dGhyZWFkX3Nob3VsZF9zdG9wKCkpOworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoCisJCQlw ZW5kaW5nX2ZyZWVfd3EsCisJCQkhbGlzdF9lbXB0eSgmcGVuZGluZ19mcmVlKSB8fCBrdGhyZWFk X3Nob3VsZF9zdG9wKCkpOworCisJCWluZm8tPndhaXRpbmdfcmVxcyA9IDA7CisJCXNtcF9tYigp OworCisJCWlmIChkb19jb21iYWNrX2NtZF9mbihpbmZvKSkKKwkJCWluZm8tPndhaXRpbmdfcmVx cyA9IDE7CisKKwkJLyoqKioqIEJhY2sgdG8gRnJvbnQgcmVzcG9uc2UgY29uc3VtZSAqKioqKi8K KwkJcmVhZF9idGZfcmluZ19yZXNwX2NvbnMoaW5mbyk7CisJfQorCisJaW5mby0+a3RocmVhZCA9 IE5VTEw7CisJc2NzaWJhY2tfcHV0KGluZm8pOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq LworLyogCWZvciBiYWNrZW5kIHRvIGZyb250ZW5kIGNvbW11bmljYXRpb24JCQkqLworLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t ICovCisKK3N0cnVjdCB2c2NzaWlmX2J0Zl9yZXF1ZXN0ICpjb21iYWNrX3ByZV9yZXBseShzdHJ1 Y3QgY29tYmFja19pbmZvICppbmZvKQoreworCXN0cnVjdCB2c2NzaWlmX2J0Zl9yZXF1ZXN0ICpi dGZfcmVxOworCisJcm1iKCk7CisJYnRmX3JlcSA9IFJJTkdfR0VUX1JFUVVFU1QoJmluZm8tPmJ0 Zl9yaW5nLCBpbmZvLT5idGZfcmluZy5yZXFfcHJvZF9wdnQpOworCWluZm8tPmJ0Zl9yaW5nLnJl cV9wcm9kX3B2dCsrOworCisJcmV0dXJuIGJ0Zl9yZXE7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRf YnRmX3JpbmdfcmVzcF9jb25zKHN0cnVjdCBjb21iYWNrX2luZm8gKmluZm8pCit7CisJUklOR19J RFggcnA7CisKKwlycCA9IGluZm8tPmJ0Zl9yaW5nLnNyaW5nLT5yc3BfcHJvZDsKKwlybWIoKTsK KworCWlmIChpbmZvLT5idGZfcmluZy5yc3BfY29ucyAhPSBycCkKKwkJaW5mby0+YnRmX3Jpbmcu cnNwX2NvbnMgPSBycDsKK30KKwordm9pZCBjb21iYWNrX2RvX3JlcGx5KHN0cnVjdCBjb21iYWNr X2luZm8gKmluZm8pCit7CisJaW50IG5vdGlmeTsKKworCVJJTkdfUFVTSF9SRVFVRVNUU19BTkRf Q0hFQ0tfTk9USUZZKCZpbmZvLT5idGZfcmluZywgbm90aWZ5KTsKKwlpZiAobm90aWZ5KQorCQlu b3RpZnlfcmVtb3RlX3ZpYV9pcnEoaW5mby0+aXJxKTsKKworCS8qKioqKiBCYWNrIHRvIEZyb250 IHJlc3BvbnNlIGNvbnN1bWUgKioqKiovCisJcmVhZF9idGZfcmluZ19yZXNwX2NvbnMoaW5mbyk7 CisKKwlpZiAoUklOR19IQVNfVU5DT05TVU1FRF9SRVFVRVNUUygmaW5mby0+ZnRiX3JpbmcpKSB7 CisJCWNvbWJhY2tfbm90aWZ5X3dvcmsoaW5mbyk7CisJfQorfQpkaWZmIC1yIDI0ZTBjYjlmZTlk ZiAtciAzNzRhYTViNzMxMDUgZHJpdmVycy94ZW4vc2NzaWJhY2svY29tYmFjay5oCi0tLSAvZGV2 L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL2RyaXZlcnMveGVuL3Nj c2liYWNrL2NvbWJhY2suaAlUdWUgT2N0IDMwIDE2OjQzOjEwIDIwMDcgKzA5MDAKQEAgLTAsMCAr MSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIEZVSklUU1UgTGltaXRlZAorICoK KyAqIEJhc2VkIG9uIHRoZSBibGtiYWNrIGRyaXZlciBjb2RlLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IG9yLCB3aGVuIGRpc3RyaWJ1dGVkCisgKiBzZXBhcmF0ZWx5IGZyb20gdGhlIExpbnV4IGtl cm5lbCBvciBpbmNvcnBvcmF0ZWQgaW50byBvdGhlcgorICogc29mdHdhcmUgcGFja2FnZXMsIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBsaWNlbnNlOgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBj b3B5CisgKiBvZiB0aGlzIHNvdXJjZSBmaWxlICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksCisgKiBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwKKyAqIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3Rh bnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP UgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMg T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig T1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBU SEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfX1NDU0lJRl9fQkFDS0VORF9fQ09NTU9OX0hf XworI2RlZmluZSBfX1NDU0lJRl9fQkFDS0VORF9fQ09NTU9OX0hfXworCisjaW5jbHVkZSA8bGlu dXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4 L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92 bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVk Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2lu Y2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8 YXNtL2RlbGF5Lmg+CisjaW5jbHVkZSA8eGVuL2V2dGNobi5oPgorI2luY2x1ZGUgPGFzbS9oeXBl cnZpc29yLmg+CisjaW5jbHVkZSA8eGVuL2dudHRhYi5oPgorI2luY2x1ZGUgPHhlbi9kcml2ZXJf dXRpbC5oPgorI2luY2x1ZGUgPHhlbi94ZW5idXMuaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNl L2lvL3JpbmcuaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL2dyYW50X3RhYmxlLmg+CisjaW5j bHVkZSA8eGVuL2ludGVyZmFjZS9pby92c2NzaWlmLmg+CisKKworI2RlZmluZSBEUFJJTlRLKF9m LCBfYS4uLikJCQlcCisJcHJfZGVidWcoIihmaWxlPSVzLCBsaW5lPSVkKSAiIF9mLAlcCisJCSBf X0ZJTEVfXyAsIF9fTElORV9fICwgIyMgX2EgKQorCitzdHJ1Y3QgY29tYmFja19pbmZvIHsKKwlz dHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2OworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CisKKwlk b21pZF90IGRvbWlkOworCXVuc2lnbmVkIGludCBldnRjaG47CisJdW5zaWduZWQgaW50IGlycTsK KworCXVuc2lnbmVkIHNob3J0IGhvc3Rfbm87CisKKwlzdHJ1Y3QgdnNjc2lpZl9mdGJfYmFja19y aW5nICBmdGJfcmluZzsKKwlzdHJ1Y3QgdnNjc2lpZl9idGZfZnJvbnRfcmluZyBidGZfcmluZzsK KwlzdHJ1Y3Qgdm1fc3RydWN0ICpmdGJfcmluZ19hcmVhOworCXN0cnVjdCB2bV9zdHJ1Y3QgKmJ0 Zl9yaW5nX2FyZWE7CisKKwlncmFudF9oYW5kbGVfdCBmdGJfc2htZW1faGFuZGxlOworCWdyYW50 X3JlZl90IGZ0Yl9zaG1lbV9yZWY7CisJZ3JhbnRfaGFuZGxlX3QgYnRmX3NobWVtX2hhbmRsZTsK KwlncmFudF9yZWZfdCBidGZfc2htZW1fcmVmOworCisJc3RydWN0IHdvcmtfc3RydWN0IHNjc2li YWNrX3dvcms7CisKKwlzcGlubG9ja190IHJpbmdfbG9ja19mdGI7CisJc3BpbmxvY2tfdCByaW5n X2xvY2tfYnRmOworCWF0b21pY190IHJlZmNudDsKKworCXN0cnVjdCB0YXNrX3N0cnVjdCAqa3Ro cmVhZDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0aW5nX3RvX2ZyZWU7CisJd2FpdF9xdWV1ZV9o ZWFkX3Qgd3E7CisJdW5zaWduZWQgaW50IHdhaXRpbmdfcmVxczsKKyNpZmRlZiBDT05GSUdfWEVO X0ZDCisJdm9pZAkqZmNpbmZvOworI2VuZGlmCisJc3RydWN0IHBhZ2UgKiptbWFwX3BhZ2VzOwor Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IGNtbmQ7CisJc3RydWN0IGNv bWJhY2tfaW5mbyAqaW5mbzsKKwl1bmlvbiB7CisJCXN0cnVjdCBzY3NpX3BlbmRpbmdfcmVxIHsK KwkJCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKKwkJCXVuc2lnbmVkIHNob3J0IGRhdGFfZGly OworCQkJdWludDMyX3QgcnFpZDsKKwkJCWludCB1c2Vfc2c7CisJCQlpbnQgcmVxdWVzdF9idWZm bGVuOworCQkJYXRvbWljX3QgcGVuZGNudDsKKwkJCXN0cnVjdCByZXF1ZXN0ICpycTsKKwkJCXN0 cnVjdCBzY3NpYmFja19yZXF1ZXN0X3NlZ21lbnR7CisJCQkJZ3JhbnRfcmVmX3QgZ3JlZjsKKwkJ CQl1aW50MzJfdCBvZmZzZXQ7CisJCQkJdWludDMyX3QgbGVuZ3RoOworCQkJfSBwZW5kX3NlZ1tT R19UQUJMRVNJWkVdOworCQkJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CisJCX0gc2NzaTsK KyNpZmRlZiBDT05GSUdfWEVOX0ZDCisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgdnNjc2lpZl9mdGJf cmVxdWVzdCBmdGJfcmVxOworCQl9IGZjOworI2VuZGlmCisJfSB1OworfSBwZW5kaW5nX3JlcV90 OworCit0eXBlZGVmIHN0cnVjdCBzY3NpX3BlbmRpbmdfcmVxCQlzY3NpX3BlbmRpbmdfcmVxX3Q7 CisKK2lycXJldHVybl90IHNjc2liYWNrX2ludHIoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdz ICopOworaW50IHNjc2liYWNrX2luaXRfc3Jpbmcoc3RydWN0IGNvbWJhY2tfaW5mbyAqLAorCQl1 bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQpOworaW50IHNjc2liYWNr X3NjaGVkdWxlKHZvaWQgKmRhdGEpOworCisKKyNkZWZpbmUgc2NzaWJhY2tfZ2V0KF9iKSAoYXRv bWljX2luYygmKF9iKS0+cmVmY250KSkKKyNkZWZpbmUgc2NzaWJhY2tfcHV0KF9iKQkJCQlcCisJ ZG8gewkJCQkJCVwKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJihfYiktPnJlZmNudCkpCVwK KwkJCXdha2VfdXAoJihfYiktPndhaXRpbmdfdG9fZnJlZSk7XAorCX0gd2hpbGUgKDApCisKK3N0 cnVjdCBjb21iYWNrX2luZm8gKnNjc2lpbmZvX2FsbG9jKGRvbWlkX3QgZG9taWQpOwordm9pZCBz Y3NpYmFja19mcmVlKHN0cnVjdCBjb21iYWNrX2luZm8gKmluZm8pOwordm9pZCBzY3NpYmFja19k aXNjb25uZWN0KHN0cnVjdCBjb21iYWNrX2luZm8gKmluZm8pOwordm9pZCBfX2luaXQgc2NzaWJh Y2tfaW50ZXJmYWNlX2luaXQodm9pZCk7Cit2b2lkIF9fZXhpdCBzY3NpYmFja19pbnRlcmZhY2Vf ZXhpdCh2b2lkKTsKK2ludCBzY3NpaWZfeGVuYnVzX2luaXQodm9pZCk7Cit2b2lkIHNjc2lpZl94 ZW5idXNfdW5yZWdpc3Rlcih2b2lkKTsKKworCisjZW5kaWYgLyogX19TQ1NJSUZfX0JBQ0tFTkRf X0NPTU1PTl9IX18gKi8KZGlmZiAtciAyNGUwY2I5ZmU5ZGYgLXIgMzc0YWE1YjczMTA1IGRyaXZl cnMveGVuL3Njc2liYWNrL2ZjYmFjay5jCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDow MCAxOTcwICswMDAwCisrKyBiL2RyaXZlcnMveGVuL3Njc2liYWNrL2ZjYmFjay5jCVR1ZSBPY3Qg MzAgMTY6NDM6MTAgMjAwNyArMDkwMApAQCAtMCwwICsxLDYxMCBAQAorLyoKKyAqIFhlbiBTQ1NJ IEZDIGJhY2tlbmQgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBGVUpJVFNVIExp bWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBvciwgd2hlbiBkaXN0cmlidXRlZAorICogc2Vw YXJhdGVseSBmcm9tIHRoZSBMaW51eCBrZXJuZWwgb3IgaW5jb3Jwb3JhdGVkIGludG8gb3RoZXIK KyAqIHNvZnR3YXJlIHBhY2thZ2VzLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgbGljZW5zZToK KyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb3VyY2UgZmlsZSAodGhl ICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LAorICogbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCisgKiBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv CisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGlu CisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4K KyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZF TlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBG T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51 eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8eGVuL3hl bmJ1cy5oPgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvZ3JhbnRfdGFibGUuaD4KKyNpbmNsdWRl IDx4ZW4vaW50ZXJmYWNlL2lvL3JpbmcuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+ CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNw b3J0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oPgorI2luY2x1ZGUgPGFz bS9kZWxheS5oPgorCisjaW5jbHVkZSAiY29tYmFjay5oIgorI2luY2x1ZGUgImZjYmFjay5oIgor CisjZGVmaW5lIFNFVF9GVCh4LCB6LCB5KQkJCVwKKwlpZiAoKHgpLT56ID09IDApIHsJCVwKKwkJ KHkpLT56ID0gMDsJCVwKKwl9IGVsc2UgewkJCVwKKwkJKHkpLT56ID0gMTsJCVwKKwl9CisKKwor ZXh0ZXJuIHZvaWQgdW5iaW5kX2Zyb21faXJxaGFuZGxlcih1bnNpZ25lZCBpbnQsIHZvaWQgKik7 CitleHRlcm4gc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlICpmY19zaG9zdDJmdChzdHJ1Y3Qg U2NzaV9Ib3N0ICopOworZXh0ZXJuIHN0cnVjdCB2c2NzaWlmX2J0Zl9yZXF1ZXN0ICpjb21iYWNr X3ByZV9yZXBseShzdHJ1Y3QgY29tYmFja19pbmZvICopOworZXh0ZXJuIHZvaWQgY29tYmFja19k b19yZXBseShzdHJ1Y3QgY29tYmFja19pbmZvICopOworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K Kworc3RhdGljIHN0cnVjdCBzY3NpX3RhcmdldCAqc2hvc3RfdG9fc3RhcmdldChzdHJ1Y3QgU2Nz aV9Ib3N0ICpzaG9zdCwKKwkJCQkJICAgIHVuc2lnbmVkIGludCBjaGFubmVsLAorCQkJCQkgICAg dW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCwgKmZvdW5k X3N0YXJnZXQgPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGFyZ2V0LCAmKHNob3N0 LT5fX3RhcmdldHMpLCBzaWJsaW5ncykgeworCQlpZiAoKHN0YXJnZXQtPmNoYW5uZWwgPT0gY2hh bm5lbCkgJiYgKHN0YXJnZXQtPmlkID09IGlkKSkgeworCQkJZm91bmRfc3RhcmdldCA9IHN0YXJn ZXQ7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBmb3VuZF9zdGFyZ2V0OworfQorCitz dGF0aWMgc3RydWN0IGZjX3Jwb3J0ICpzaG9zdF90b19ycG9ydChzdHJ1Y3QgU2NzaV9Ib3N0ICpz aG9zdCwgdTY0IG5vZGVfbmFtZSwKKwkJCQkgICAgICAgdTY0IHBvcnRfbmFtZSwgdTMyIHBvcnRf aWQsIHUzMiByb2xlcykKK3sKKwlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LCAqZm91bmRfcnBvcnQg PSBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShycG9ydCwgJmZjX2hvc3RfcnBvcnRzKHNo b3N0KSwgcGVlcnMpIHsKKwkJaWYgKChycG9ydC0+bm9kZV9uYW1lID09IG5vZGVfbmFtZSkgJiYK KwkJCShycG9ydC0+cG9ydF9uYW1lID09IHBvcnRfbmFtZSkgJiYKKwkJCShycG9ydC0+cG9ydF9p ZCAgID09IHBvcnRfaWQpICAgJiYKKwkJCShycG9ydC0+cm9sZXMgICAgID09IHJvbGVzKSkgewor CQkJZm91bmRfcnBvcnQgPSBycG9ydDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGZv dW5kX3Jwb3J0OworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBmY2Jh Y2tfbWFpbihzdHJ1Y3QgZmNiYWNrX2luZm8gKmluZm8sCisJCSAgICAgICBzdHJ1Y3QgdnNjc2lp Zl9mdGJfcmVxdWVzdCAqcmluZ19yZXFfdG1wKQoreworCXN0cnVjdCBjb21iYWNrX2luZm8gKmNv bWluZm8gPSBpbmZvLT5jb21pbmZvOworCXN0cnVjdCB2c2NzaWlmX2Z0Yl9yZXF1ZXN0ICpyaW5n X3JlcSA9ICYoaW5mby0+ZnRiX3JlcSk7CisJc3RydWN0IHZzY3NpaWZfYnRmX3JlcXVlc3QgKnJp bmdfcmVzOworCXN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSAqZnQgPSBmY19zaG9zdDJmdChj b21pbmZvLT5ob3N0KTsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQ7CisJc3RydWN0IGZj X3Jwb3J0CSpycG9ydDsKKworCS8qIE11c3QgY2hlY2sgYnkgY2xhc3Mgb3Igc29tZXRoaW5nIC4u LiAqLworCWlmICgoc3RyY21wKGNvbWluZm8tPmhvc3QtPmhvc3R0LT5uYW1lLCAicWxhMnh4eCIp ICE9IDApICYmCisJICAgIChzdHJjbXAoY29taW5mby0+aG9zdC0+aG9zdHQtPm5hbWUsICJscGZj IikgIT0gMCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiZmNiYWNrOiAlczogbm90 IGEgc3VwcG9ydGVkIGZpYnJlIGNoYW5uZWwgY2FyZD4+PlxuIiwKKwkJICAgICAgIF9fRlVOQ1RJ T05fXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwltZW1jcHkocmluZ19yZXEsIHJpbmdfcmVxX3Rt cCwgc2l6ZW9mKHN0cnVjdCB2c2NzaWlmX2Z0Yl9yZXF1ZXN0KSk7CisJCisJLyoKKwkgIFBlcmZv cm0gc3BlY2lmaWVkIGZ1bmN0aW9uIGFuZCBzZW5kIHJlc3BvbnNlIHRvIERvbVUKKwkqLworCisJ cmluZ19yZXMgPSBjb21iYWNrX3ByZV9yZXBseShjb21pbmZvKTsKKworCXJpbmdfcmVzLT5yc2x0 ID0gLTE7CisKKwlzd2l0Y2ggKHJpbmdfcmVxLT5jbW5kKSB7CisJY2FzZSBDTU5EX0dFVF9IT1NU X1BPUlRfSUQ6CisJCWlmICgoZnQtPnNob3dfaG9zdF9wb3J0X2lkICE9IDApICYmCisJCSAgICAo ZnQtPmdldF9ob3N0X3BvcnRfaWQgIT0gTlVMTCkpIHsKKwkJCWZ0LT5nZXRfaG9zdF9wb3J0X2lk KGNvbWluZm8tPmhvc3QpOworCQkJcmluZ19yZXMtPnUuZ2hwaS5wb3J0X2lkID0gKChzdHJ1Y3Qg ZmNfaG9zdF9hdHRycyAqKQorCQkJCShjb21pbmZvLT5ob3N0LT5zaG9zdF9kYXRhKSktPnBvcnRf aWQ7CisJCQlyaW5nX3Jlcy0+cnFpZCA9IHJpbmdfcmVxLT5ycWlkOworCQkJcmluZ19yZXMtPnJz bHQgPSAwOworCQl9CisJCWJyZWFrOworCQkJCisJY2FzZSBDTU5EX0dFVF9IT1NUX1BPUlRfVFlQ RToKKwkJaWYgKChmdC0+c2hvd19ob3N0X3BvcnRfdHlwZSAhPSAwKSAmJgorCQkgICAgKGZ0LT5n ZXRfaG9zdF9wb3J0X3R5cGUgIT0gTlVMTCkpIHsKKwkJCWZ0LT5nZXRfaG9zdF9wb3J0X3R5cGUo Y29taW5mby0+aG9zdCk7CisJCQlyaW5nX3Jlcy0+dS5naHB0LnBvcnRfdHlwZSA9ICgoc3RydWN0 IGZjX2hvc3RfYXR0cnMgKikKKwkJCQkoY29taW5mby0+aG9zdC0+c2hvc3RfZGF0YSkpLT5wb3J0 X3R5cGU7CisJCQlyaW5nX3Jlcy0+cnFpZCA9IHJpbmdfcmVxLT5ycWlkOworCQkJcmluZ19yZXMt PnJzbHQgPSAwOworCQl9CisJCWJyZWFrOworCQkJCisJY2FzZSBDTU5EX0dFVF9IT1NUX1BPUlRf U1RBVEU6CisJCWlmICgoZnQtPnNob3dfaG9zdF9wb3J0X3N0YXRlICE9IDApICYmCisJCSAgICAo ZnQtPmdldF9ob3N0X3BvcnRfc3RhdGUgIT0gTlVMTCkpIHsKKwkJCWZ0LT5nZXRfaG9zdF9wb3J0 X3N0YXRlKGNvbWluZm8tPmhvc3QpOworCQkJcmluZ19yZXMtPnUuZ2hwcy5wb3J0X3N0YXRlID0g KChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKQorCQkJCShjb21pbmZvLT5ob3N0LT5zaG9zdF9kYXRh KSktPnBvcnRfc3RhdGU7CisJCQlyaW5nX3Jlcy0+cnFpZCA9IHJpbmdfcmVxLT5ycWlkOworCQkJ cmluZ19yZXMtPnJzbHQgPSAwOworCQl9CisJCWJyZWFrOworCQkJCisJY2FzZSBDTU5EX0dFVF9I T1NUX0FDVElWRV9GQzRTOgorCQlpZiAoKGZ0LT5zaG93X2hvc3RfYWN0aXZlX2ZjNHMgIT0gMCkg JiYKKwkJICAgIChmdC0+Z2V0X2hvc3RfYWN0aXZlX2ZjNHMgIT0gTlVMTCkpIHsKKwkJCWZ0LT5n ZXRfaG9zdF9hY3RpdmVfZmM0cyhjb21pbmZvLT5ob3N0KTsKKwkJCW1lbWNweShyaW5nX3Jlcy0+ dS5naGFmLmFjdGl2ZV9mYzRzLAorCQkJICAgICAgICgoc3RydWN0IGZjX2hvc3RfYXR0cnMgKikK KwkJCQkoY29taW5mby0+aG9zdC0+c2hvc3RfZGF0YSkpLT5hY3RpdmVfZmM0cywKKwkJCSAgICAg ICBzaXplb2YocmluZ19yZXMtPnUuZ2hhZi5hY3RpdmVfZmM0cykpOworCQkJcmluZ19yZXMtPnJx aWQgPSByaW5nX3JlcS0+cnFpZDsKKwkJCXJpbmdfcmVzLT5yc2x0ID0gMDsKKwkJfQorCQlicmVh azsKKwkJCQorCWNhc2UgQ01ORF9HRVRfSE9TVF9TUEVFRDoKKwkJaWYgKChmdC0+c2hvd19ob3N0 X3NwZWVkICE9IDApICYmCisJCSAgICAoZnQtPmdldF9ob3N0X3NwZWVkICE9IE5VTEwpKSB7CisJ CQlmdC0+Z2V0X2hvc3Rfc3BlZWQoY29taW5mby0+aG9zdCk7CisJCQlyaW5nX3Jlcy0+dS5naHNw LnNwZWVkID0gKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKQorCQkJCShjb21pbmZvLT5ob3N0LT5z aG9zdF9kYXRhKSktPnNwZWVkOworCQkJcmluZ19yZXMtPnJxaWQgPSByaW5nX3JlcS0+cnFpZDsK KwkJCXJpbmdfcmVzLT5yc2x0ID0gMDsKKwkJfQorCQlicmVhazsKKwkJCQorCWNhc2UgQ01ORF9H RVRfSE9TVF9GQUJSSUNfTkFNRToKKwkJaWYgKChmdC0+c2hvd19ob3N0X2ZhYnJpY19uYW1lICE9 IDApICYmCisJCSAgICAoZnQtPmdldF9ob3N0X2ZhYnJpY19uYW1lICE9IE5VTEwpKSB7CisJCQlm dC0+Z2V0X2hvc3RfZmFicmljX25hbWUoY29taW5mby0+aG9zdCk7CisJCQlyaW5nX3Jlcy0+dS5n aGZuLmZhYnJpY19uYW1lID0KKwkJCQkoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopCisJCQkJIChj b21pbmZvLT5ob3N0LT5zaG9zdF9kYXRhKSktPmZhYnJpY19uYW1lOworCQkJcmluZ19yZXMtPnJx aWQgPSByaW5nX3JlcS0+cnFpZDsKKwkJCXJpbmdfcmVzLT5yc2x0ID0gMDsKKwkJfQorCQlicmVh azsKKwkJCQorCWNhc2UgQ01ORF9HRVRfSE9TVF9TVEFUUzogeworCQlzdHJ1Y3QgZmNfaG9zdF9z dGF0aXN0aWNzICpoczsKKworCQlpZiAoZnQtPmdldF9mY19ob3N0X3N0YXRzICE9IE5VTEwpIHsK KwkJCWlmICgoaHMgPSBmdC0+Z2V0X2ZjX2hvc3Rfc3RhdHMoCisJCQkJCQljb21pbmZvLT5ob3N0 KSkgPT0gTlVMTCkgeworCQkJCWJyZWFrOworCQkJfQorCQkJcmluZ19yZXMtPnUuZ2hzdC5zdGF0 cyA9ICpoczsKKwkJCXJpbmdfcmVzLT5ycWlkICAgICAgICAgPSByaW5nX3JlcS0+cnFpZDsKKwkJ CXJpbmdfcmVzLT5yc2x0ICAgICAgICAgPSAwOworCQl9CisJCWJyZWFrOyB9CisKKwljYXNlIENN TkRfUkVTRVRfSE9TVF9TVEFUUzoKKwkJaWYgKGZ0LT5yZXNldF9mY19ob3N0X3N0YXRzICE9IE5V TEwpIHsKKwkJCWZ0LT5yZXNldF9mY19ob3N0X3N0YXRzKGNvbWluZm8tPmhvc3QpOworCQkJcmlu Z19yZXMtPnJxaWQgPSByaW5nX3JlcS0+cnFpZDsKKwkJCXJpbmdfcmVzLT5yc2x0ID0gMDsKKwkJ fQorCQlicmVhazsKKwkJCQorCWNhc2UgQ01ORF9JU1NVRV9IT1NUX0xJUDoKKwkJaWYgKGZ0LT5p c3N1ZV9mY19ob3N0X2xpcCAhPSBOVUxMKSB7CisJCQlyaW5nX3Jlcy0+cnNsdCA9IGZ0LT5pc3N1 ZV9mY19ob3N0X2xpcChjb21pbmZvLT5ob3N0KTsKKwkJCXJpbmdfcmVzLT5ycWlkID0gcmluZ19y ZXEtPnJxaWQ7CisJCX0KKwkJYnJlYWs7CisJCQkKKwljYXNlIENNTkRfR0VUX1NUQVJHRVRfUE9S VF9JRDoKKwkJaWYgKChmdC0+c2hvd19zdGFyZ2V0X3BvcnRfaWQgIT0gMCkgJiYKKwkJICAgIChm dC0+Z2V0X3N0YXJnZXRfcG9ydF9pZCAhPSBOVUxMKSkgeworCQkJaWYgKChzdGFyZ2V0ID0gc2hv c3RfdG9fc3RhcmdldChjb21pbmZvLT5ob3N0LAorCQkJCQlyaW5nX3JlcS0+dS5ndHBpLmNoYW5u ZWwsCisJCQkJCXJpbmdfcmVxLT51Lmd0cGkuaWQpKSA9PSBOVUxMKSB7CisJCQkJYnJlYWs7CisJ CQl9CisJCQlmdC0+Z2V0X3N0YXJnZXRfcG9ydF9pZChzdGFyZ2V0KTsKKwkJCXJpbmdfcmVzLT51 Lmd0cGkucG9ydF9pZCA9ICgoc3RydWN0IGZjX3N0YXJnZXRfYXR0cnMgKikKKwkJCQkJKCYoc3Rh cmdldC0+c3RhcmdldF9kYXRhKSkpLT5wb3J0X2lkOworCQkJcmluZ19yZXMtPnJxaWQgPSByaW5n X3JlcS0+cnFpZDsKKwkJCXJpbmdfcmVzLT5yc2x0ID0gMDsKKwkJfQorCQlicmVhazsKKwkJCQor CWNhc2UgQ01ORF9HRVRfU1RBUkdFVF9OT0RFX05BTUU6CisJCWlmICgoZnQtPnNob3dfc3Rhcmdl dF9ub2RlX25hbWUgIT0gMCkgJiYKKwkJICAgIChmdC0+Z2V0X3N0YXJnZXRfbm9kZV9uYW1lICE9 IE5VTEwpKSB7CisJCQlpZiAoKHN0YXJnZXQgPSBzaG9zdF90b19zdGFyZ2V0KGNvbWluZm8tPmhv c3QsCisJCQkJCXJpbmdfcmVxLT51Lmd0bm4uY2hhbm5lbCwKKwkJCQkJcmluZ19yZXEtPnUuZ3Ru bi5pZCkpID09IE5VTEwpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWZ0LT5nZXRfc3RhcmdldF9u b2RlX25hbWUoc3RhcmdldCk7CisJCQlyaW5nX3Jlcy0+dS5ndG5uLm5vZGVfbmFtZSA9CisJCQkJ CSgoc3RydWN0IGZjX3N0YXJnZXRfYXR0cnMgKikKKwkJCQkJKCYoc3RhcmdldC0+c3RhcmdldF9k YXRhKSkpLT5ub2RlX25hbWU7CisJCQlyaW5nX3Jlcy0+cnFpZCA9IHJpbmdfcmVxLT5ycWlkOwor CQkJcmluZ19yZXMtPnJzbHQgPSAwOworCQl9CisJCWJyZWFrOworCQkJCisJY2FzZSBDTU5EX0dF VF9TVEFSR0VUX1BPUlRfTkFNRToKKwkJaWYgKChmdC0+c2hvd19zdGFyZ2V0X3BvcnRfbmFtZSAh PSAwKSAmJgorCQkgICAgKGZ0LT5nZXRfc3RhcmdldF9wb3J0X25hbWUgIT0gTlVMTCkpIHsKKwkJ CWlmICgoc3RhcmdldCA9IHNob3N0X3RvX3N0YXJnZXQoY29taW5mby0+aG9zdCwKKwkJCQkJcmlu Z19yZXEtPnUuZ3Rwbi5jaGFubmVsLAorCQkJCQlyaW5nX3JlcS0+dS5ndHBuLmlkKSkgPT0gTlVM TCkgeworCQkJCWJyZWFrOworCQkJfQorCQkJZnQtPmdldF9zdGFyZ2V0X3BvcnRfbmFtZShzdGFy Z2V0KTsKKwkJCXJpbmdfcmVzLT51Lmd0cG4ucG9ydF9uYW1lID0KKwkJCQkoKHN0cnVjdCBmY19z dGFyZ2V0X2F0dHJzICopCisJCQkJKCYoc3RhcmdldC0+c3RhcmdldF9kYXRhKSkpLT5wb3J0X25h bWU7CisJCQlyaW5nX3Jlcy0+cnFpZCA9IHJpbmdfcmVxLT5ycWlkOworCQkJcmluZ19yZXMtPnJz bHQgPSAwOworCQl9CisJCWJyZWFrOworCQkJCisJY2FzZSBDTU5EX0dFVF9SUE9SVF9MT1NTX1RN TzoKKwkJaWYgKChmdC0+c2hvd19ycG9ydF9kZXZfbG9zc190bW8gIT0gMCkgJiYKKwkJICAgIChm dC0+Z2V0X3Jwb3J0X2Rldl9sb3NzX3RtbyAhPSBOVUxMKSkgeworCQkJaWYgKChycG9ydCA9IHNo b3N0X3RvX3Jwb3J0KGNvbWluZm8tPmhvc3QsCisJCQkJCXJpbmdfcmVxLT51LmdwbHQubm9kZV9u YW1lLAorCQkJCQlyaW5nX3JlcS0+dS5ncGx0LnBvcnRfbmFtZSwKKwkJCQkJcmluZ19yZXEtPnUu Z3BsdC5wb3J0X2lkLAorCQkJCQlyaW5nX3JlcS0+dS5ncGx0LnJvbGVzKSkgPT0gTlVMTCkgewor CQkJCWJyZWFrOworCQkJfQorCQkJZnQtPmdldF9ycG9ydF9kZXZfbG9zc190bW8ocnBvcnQpOwor CQkJcmluZ19yZXMtPnUuZ3BsdC50aW1lb3V0ID0gcnBvcnQtPmRldl9sb3NzX3RtbzsKKwkJCXJp bmdfcmVzLT5ycWlkICAgICAgICAgICA9IHJpbmdfcmVxLT5ycWlkOworCQkJcmluZ19yZXMtPnJz bHQgICAgICAgICAgID0gMDsKKwkJfQorCQlicmVhazsKKwkJCQorCWNhc2UgQ01ORF9TRVRfUlBP UlRfTE9TU19UTU86CisJCWlmIChmdC0+c2V0X3Jwb3J0X2Rldl9sb3NzX3RtbyAhPSBOVUxMKSB7 CisJCQlpZiAoKHJwb3J0ID0gc2hvc3RfdG9fcnBvcnQoY29taW5mby0+aG9zdCwKKwkJCQkJcmlu Z19yZXEtPnUuc3BsdC5ub2RlX25hbWUsCisJCQkJCXJpbmdfcmVxLT51LnNwbHQucG9ydF9uYW1l LAorCQkJCQlyaW5nX3JlcS0+dS5zcGx0LnBvcnRfaWQsCisJCQkJCXJpbmdfcmVxLT51LnNwbHQu cm9sZXMpKSA9PSBOVUxMKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQlmdC0+c2V0X3Jwb3J0X2Rl dl9sb3NzX3RtbyhycG9ydCwKKwkJCQkJCSAgIHJpbmdfcmVxLT51LnNwbHQudGltZW91dCk7CisJ CQlyaW5nX3Jlcy0+dS5zcGx0LnRpbWVvdXQgPSBycG9ydC0+ZGV2X2xvc3NfdG1vOworCQkJcmlu Z19yZXMtPnJxaWQgICAgICAgICAgID0gcmluZ19yZXEtPnJxaWQ7CisJCQlyaW5nX3Jlcy0+cnNs dCAgICAgICAgICAgPSAwOworCQl9CisJCWJyZWFrOworCQkJCisJY2FzZSBDTU5EX0dFVF9JTklU SUFMX1NIT1NUX0FUVFJJQjogeworCQlzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqaG9zdF9hdHRycyA9 IChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKQorCQkJCQkJKGNvbWluZm8tPmhvc3QtPnNob3N0X2Rh dGEpOworCQlzdHJ1Y3QgZ2loYSAqZ2loYSA9IChzdHJ1Y3QgZ2loYSAqKShpbmZvLT5nbnRfYXJl YS0+YWRkcik7CisKKwkJbWVtY3B5KGdpaGEtPmFjdGl2ZV9mYzRzLCBob3N0X2F0dHJzLT5hY3Rp dmVfZmM0cywKKwkJICAgICAgIHNpemVvZihnaWhhLT5hY3RpdmVfZmM0cykpOworCQlnaWhhLT5m YWJyaWNfbmFtZSAgICAgICA9IGhvc3RfYXR0cnMtPmZhYnJpY19uYW1lOworCQlnaWhhLT5tYXhm cmFtZV9zaXplICAgICA9IGhvc3RfYXR0cnMtPm1heGZyYW1lX3NpemU7CisJCWdpaGEtPm5vZGVf bmFtZSAgICAgICAgID0gaG9zdF9hdHRycy0+bm9kZV9uYW1lOworCQlnaWhhLT5wZXJtYW5lbnRf cG9ydF9uYW1lCisJCQkJCT0gaG9zdF9hdHRycy0+cGVybWFuZW50X3BvcnRfbmFtZTsKKwkJZ2lo YS0+cG9ydF9pZCAgICAgICAgICAgPSBob3N0X2F0dHJzLT5wb3J0X2lkOworCQlnaWhhLT5wb3J0 X25hbWUgICAgICAgICA9IGhvc3RfYXR0cnMtPnBvcnRfbmFtZTsKKwkJZ2loYS0+cG9ydF9zdGF0 ZSAgICAgICAgPSBob3N0X2F0dHJzLT5wb3J0X3N0YXRlOworCQlnaWhhLT5wb3J0X3R5cGUgICAg ICAgICA9IGhvc3RfYXR0cnMtPnBvcnRfdHlwZTsKKwkJbWVtY3B5KGdpaGEtPnNlcmlhbF9udW1i ZXIsIGhvc3RfYXR0cnMtPnNlcmlhbF9udW1iZXIsCisJCSAgICAgICBzaXplb2YoZ2loYS0+c2Vy aWFsX251bWJlcikpOworCQlnaWhhLT5zcGVlZCAgICAgICAgICAgICA9IGhvc3RfYXR0cnMtPnNw ZWVkOworCQl7CisJCQlzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0aWNzICpoczsKKworCQkJaWYgKGZ0 LT5nZXRfZmNfaG9zdF9zdGF0cyAhPSBOVUxMKSB7CisJCQkJaWYgKChocyA9IGZ0LT5nZXRfZmNf aG9zdF9zdGF0cygKKwkJCQkJCWNvbWluZm8tPmhvc3QpKSAhPSBOVUxMKSB7CisJCQkJCWdpaGEt PnN0YXRzID0gKmhzOworCQkJCX0gZWxzZSB7CisJCQkJCW1lbXNldCgmKGdpaGEtPnN0YXRzKSwg MCwKKwkJCQkJICAgICAgIHNpemVvZihnaWhhLT5zdGF0cykpOworCQkJCX0KKwkJCX0KKwkJfQor CQlnaWhhLT5zdXBwb3J0ZWRfY2xhc3NlcyA9IGhvc3RfYXR0cnMtPnN1cHBvcnRlZF9jbGFzc2Vz OworCQltZW1jcHkoZ2loYS0+c3VwcG9ydGVkX2ZjNHMsIGhvc3RfYXR0cnMtPnN1cHBvcnRlZF9m YzRzLAorCQkgICAgICAgc2l6ZW9mKGdpaGEtPnN1cHBvcnRlZF9mYzRzKSk7CisJCWdpaGEtPnN1 cHBvcnRlZF9zcGVlZHMgID0gaG9zdF9hdHRycy0+c3VwcG9ydGVkX3NwZWVkczsKKwkJbWVtY3B5 KGdpaGEtPnN5bWJvbGljX25hbWUsIGhvc3RfYXR0cnMtPnN5bWJvbGljX25hbWUsCisJCSAgICAg ICBzaXplb2YoZ2loYS0+c3ltYm9saWNfbmFtZSkpOworCQlnaWhhLT50Z3RpZF9iaW5kX3R5cGUg ICA9IGhvc3RfYXR0cnMtPnRndGlkX2JpbmRfdHlwZTsKKwkJCQorCQlyaW5nX3Jlcy0+cnFpZCAg ICAgICAgICA9IHJpbmdfcmVxLT5ycWlkOworCQlyaW5nX3Jlcy0+cnNsdCAgICAgICAgICA9IDA7 CisJCQkKKwkJYnJlYWs7IH0KKwkJICAKKwljYXNlIENNTkRfR0VUX0lOSVRJQUxfU1RBUkdFVF9B VFRSSUI6IHsKKwkJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0OworCQlzdHJ1Y3QgZmNfc3Rh cmdldF9hdHRycwkqc3RhcmdldF9hdHRyczsKKwkJdW5zaWduZWQgaW50IGkgPSAwOworCQlzdHJ1 Y3QgZ2l0YSAqZ2l0YSA9IChzdHJ1Y3QgZ2l0YSAqKShpbmZvLT5nbnRfYXJlYS0+YWRkcik7CisK KwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGFyZ2V0LAorCQkJCSAgICAmKGNvbWluZm8tPmhvc3Qt Pl9fdGFyZ2V0cyksIHNpYmxpbmdzKSB7CisJCQlzdGFyZ2V0X2F0dHJzID0gKHN0cnVjdCBmY19z dGFyZ2V0X2F0dHJzICopCisJCQkJCQkoJihzdGFyZ2V0LT5zdGFyZ2V0X2RhdGEpKTsKKwkJCWdp dGEtPmVbaV0uY2hhbm5lbCAgID0gc3RhcmdldC0+Y2hhbm5lbDsKKwkJCWdpdGEtPmVbaV0uaWQg ICAgICAgID0gc3RhcmdldC0+aWQ7CisJCQlnaXRhLT5lW2ldLm5vZGVfbmFtZSA9IHN0YXJnZXRf YXR0cnMtPm5vZGVfbmFtZTsKKwkJCWdpdGEtPmVbaV0ucG9ydF9pZCAgID0gc3RhcmdldF9hdHRy cy0+cG9ydF9pZDsKKwkJCWdpdGEtPmVbaV0ucG9ydF9uYW1lID0gc3RhcmdldF9hdHRycy0+cG9y dF9uYW1lOworCQkJaSsrOworCQkJaWYgKGkgPiBTQ1NJX0ZDX01BWF9TVEFSR0VUKSB7CisJCQkJ cmluZ19yZXMtPnJzbHQgPSAtMTsKKwkJCQlnb3RvIG91dF9naXRhOworCQkJfQorCQl9CisJCWdp dGEtPm51bSA9IGk7CisKKwkJcmluZ19yZXMtPnJxaWQgPSByaW5nX3JlcS0+cnFpZDsKKwkJcmlu Z19yZXMtPnJzbHQgPSAwOworCitvdXRfZ2l0YToKKwkJYnJlYWs7IH0KKwkJICAKKwljYXNlIENN TkRfR0VUX0lOSVRJQUxfUlBPUlRfQVRUUklCOiB7CisJCXN0cnVjdCBmY19ycG9ydCAqZm91bmRf cnBvcnQ7CisJCXVuc2lnbmVkIGludCBpID0gMDsKKwkJc3RydWN0IGdpcGEgKmdpcGEgPSAoc3Ry dWN0IGdpcGEgKikoaW5mby0+Z250X2FyZWEtPmFkZHIpOworCisJCWxpc3RfZm9yX2VhY2hfZW50 cnkoZm91bmRfcnBvcnQsCisJCQkJICAgICZmY19ob3N0X3Jwb3J0cyhjb21pbmZvLT5ob3N0KSwg cGVlcnMpIHsKKwkJCWdpcGEtPmVbaV0uZGV2X2xvc3NfdG1vICA9IGZvdW5kX3Jwb3J0LT5kZXZf bG9zc190bW87CisJCQlnaXBhLT5lW2ldLm1heGZyYW1lX3NpemUgPSBmb3VuZF9ycG9ydC0+bWF4 ZnJhbWVfc2l6ZTsKKwkJCWdpcGEtPmVbaV0ubm9kZV9uYW1lICAgICA9IGZvdW5kX3Jwb3J0LT5u b2RlX25hbWU7CisJCQlnaXBhLT5lW2ldLnBvcnRfaWQgICAgICAgPSBmb3VuZF9ycG9ydC0+cG9y dF9pZDsKKwkJCWdpcGEtPmVbaV0ucG9ydF9uYW1lICAgICA9IGZvdW5kX3Jwb3J0LT5wb3J0X25h bWU7CisJCQlnaXBhLT5lW2ldLnBvcnRfc3RhdGUgICAgPSBmb3VuZF9ycG9ydC0+cG9ydF9zdGF0 ZTsKKwkJCWdpcGEtPmVbaV0ucm9sZXMgICAgICAgICA9IGZvdW5kX3Jwb3J0LT5yb2xlczsKKwkJ CWdpcGEtPmVbaV0uc2NzaV90YXJnZXRfaWQKKwkJCQkJCSA9IGZvdW5kX3Jwb3J0LT5zY3NpX3Rh cmdldF9pZDsKKwkJCWdpcGEtPmVbaV0uc3VwcG9ydGVkX2NsYXNzZXMKKwkJCQkJPSBmb3VuZF9y cG9ydC0+c3VwcG9ydGVkX2NsYXNzZXM7CisJCQlnaXBhLT5lW2ldLmNoYW5uZWwgICAgICAgPSBm b3VuZF9ycG9ydC0+Y2hhbm5lbDsKKwkJCWkrKzsKKwkJCWlmIChpID4gU0NTSV9GQ19NQVhfUlBP UlQpIHsKKwkJCQlyaW5nX3Jlcy0+cnNsdCA9IC0xOworCQkJCWdvdG8gb3V0X2dpcGE7CisJCQl9 CisJCX0KKwkJZ2lwYS0+bnVtID0gaTsKKworCQlyaW5nX3Jlcy0+cnFpZCA9IHJpbmdfcmVxLT5y cWlkOworCQlyaW5nX3Jlcy0+cnNsdCA9IDA7CisKK291dF9naXBhOgorCQlicmVhazsgfQorCQkg IAorCWNhc2UgQ01ORF9HRVRfRlVOQ1RJT05fVEVNUExBVEU6IHsKKwkJc3RydWN0IGZjX2Z1bmN0 aW9uX3RlbXBsYXRlICpmdDsKKwkJc3RydWN0IGdmdHAgKmdmdHAgPSAoc3RydWN0IGdmdHAgKiko aW5mby0+Z250X2FyZWEtPmFkZHIpOworCQlzdHJ1Y3QgZmNfZnVuY3Rpb25fdGVtcGxhdGVfc2hh cmVkICpmdHMgPSAmKGdmdHAtPmZ0KTsKKworCQlmdCA9IGZjX3Nob3N0MmZ0KGNvbWluZm8tPmhv c3QpOworCisJCVNFVF9GVChmdCwgZ2V0X3Jwb3J0X2Rldl9sb3NzX3RtbywgZnRzKTsKKwkJU0VU X0ZUKGZ0LCBzZXRfcnBvcnRfZGV2X2xvc3NfdG1vLCBmdHMpOworCQlTRVRfRlQoZnQsIGdldF9z dGFyZ2V0X25vZGVfbmFtZSwgZnRzKTsKKwkJU0VUX0ZUKGZ0LCBnZXRfc3RhcmdldF9wb3J0X25h bWUsIGZ0cyk7CisJCVNFVF9GVChmdCwgZ2V0X3N0YXJnZXRfcG9ydF9pZCwgZnRzKTsKKwkJU0VU X0ZUKGZ0LCBnZXRfaG9zdF9wb3J0X2lkLCBmdHMpOworCQlTRVRfRlQoZnQsIGdldF9ob3N0X3Bv cnRfdHlwZSwgZnRzKTsKKwkJU0VUX0ZUKGZ0LCBnZXRfaG9zdF9wb3J0X3N0YXRlLCBmdHMpOwor CQlTRVRfRlQoZnQsIGdldF9ob3N0X2FjdGl2ZV9mYzRzLCBmdHMpOworCQlTRVRfRlQoZnQsIGdl dF9ob3N0X3NwZWVkLCBmdHMpOworCQlTRVRfRlQoZnQsIGdldF9ob3N0X2ZhYnJpY19uYW1lLCBm dHMpOworCQlTRVRfRlQoZnQsIGdldF9mY19ob3N0X3N0YXRzLCBmdHMpOworCQlTRVRfRlQoZnQs IHJlc2V0X2ZjX2hvc3Rfc3RhdHMsIGZ0cyk7CisJCVNFVF9GVChmdCwgaXNzdWVfZmNfaG9zdF9s aXAsIGZ0cyk7CisKKwkJZnRzLT5kZF9mY3Jwb3J0X3NpemUgPSBmdC0+ZGRfZmNycG9ydF9zaXpl OworCisJCVNFVF9GVChmdCwgc2hvd19ycG9ydF9tYXhmcmFtZV9zaXplLCBmdHMpOworCQlTRVRf RlQoZnQsIHNob3dfcnBvcnRfc3VwcG9ydGVkX2NsYXNzZXMsIGZ0cyk7CisJCVNFVF9GVChmdCwg c2hvd19ycG9ydF9kZXZfbG9zc190bW8sIGZ0cyk7CisJCVNFVF9GVChmdCwgc2hvd19zdGFyZ2V0 X25vZGVfbmFtZSwgZnRzKTsKKwkJU0VUX0ZUKGZ0LCBzaG93X3N0YXJnZXRfcG9ydF9uYW1lLCBm dHMpOworCQlTRVRfRlQoZnQsIHNob3dfc3RhcmdldF9wb3J0X2lkLCBmdHMpOworCQlTRVRfRlQo ZnQsIHNob3dfaG9zdF9ub2RlX25hbWUsIGZ0cyk7CisJCVNFVF9GVChmdCwgc2hvd19ob3N0X3Bv cnRfbmFtZSwgZnRzKTsKKwkJU0VUX0ZUKGZ0LCBzaG93X2hvc3RfcGVybWFuZW50X3BvcnRfbmFt ZSwgZnRzKTsKKwkJU0VUX0ZUKGZ0LCBzaG93X2hvc3Rfc3VwcG9ydGVkX2NsYXNzZXMsIGZ0cyk7 CisJCVNFVF9GVChmdCwgc2hvd19ob3N0X3N1cHBvcnRlZF9mYzRzLCBmdHMpOworCQlTRVRfRlQo ZnQsIHNob3dfaG9zdF9zeW1ib2xpY19uYW1lLCBmdHMpOworCQlTRVRfRlQoZnQsIHNob3dfaG9z dF9zdXBwb3J0ZWRfc3BlZWRzLCBmdHMpOworCQlTRVRfRlQoZnQsIHNob3dfaG9zdF9tYXhmcmFt ZV9zaXplLCBmdHMpOworCQlTRVRfRlQoZnQsIHNob3dfaG9zdF9zZXJpYWxfbnVtYmVyLCBmdHMp OworCQlTRVRfRlQoZnQsIHNob3dfaG9zdF9wb3J0X2lkLCBmdHMpOworCQlTRVRfRlQoZnQsIHNo b3dfaG9zdF9wb3J0X3R5cGUsIGZ0cyk7CisJCVNFVF9GVChmdCwgc2hvd19ob3N0X3BvcnRfc3Rh dGUsIGZ0cyk7CisJCVNFVF9GVChmdCwgc2hvd19ob3N0X2FjdGl2ZV9mYzRzLCBmdHMpOworCQlT RVRfRlQoZnQsIHNob3dfaG9zdF9zcGVlZCwgZnRzKTsKKwkJU0VUX0ZUKGZ0LCBzaG93X2hvc3Rf ZmFicmljX25hbWUsIGZ0cyk7CisKKwkJcmluZ19yZXMtPnJxaWQgPSByaW5nX3JlcS0+cnFpZDsK KwkJcmluZ19yZXMtPnJzbHQgPSAwOworCQkJCisJCWJyZWFrOyB9CisKKwlkZWZhdWx0OgorCQlw cmludGsoS0VSTl9FUlIgImZjYmFjazogJXM6IHVua25vd24gY29tbWFuZD4+PlxuIiwKKwkJICAg ICAgIF9fRlVOQ1RJT05fXyk7CisJCXJpbmdfcmVzLT5yc2x0ID0gLTE7CisJCWJyZWFrOworCX0K KworCWNvbWJhY2tfZG9fcmVwbHkoY29taW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBm Y2JhY2tfY21kX2V4ZWMocGVuZGluZ19yZXFfdCAqcGVuZGluZ19yZXEpCit7CisJKHZvaWQpZmNi YWNrX21haW4oKHN0cnVjdCBmY2JhY2tfaW5mbyAqKShwZW5kaW5nX3JlcS0+aW5mby0+ZmNpbmZv KSwKKwkJCSAgJihwZW5kaW5nX3JlcS0+dS5mYy5mdGJfcmVxKSk7Cit9CisKKworLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAqLworc3RhdGljIGludCBfX3NldHVwX3hlbnN0b3JlKHN0cnVjdCBmY2JhY2tfaW5m byAqaW5mbykKK3sKKwlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2ID0gaW5mby0+Y29taW5mby0+ ZGV2OworCWludCBnbnRyZWY7CisJaW50IHJldCA9IDA7CisKKwlpZiAoKHJldCA9IHhlbmJ1c19n YXRoZXIoWEJUX05JTCwgZGV2LT5vdGhlcmVuZCwKKwkJCQkgImZjX2dudHJlZiIsICIlZCIsICAm Z250cmVmLCBOVUxMKSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImZjYmFjazogJXM6IHhl bmJ1c19nYXRoZXIoKSBlcnJvcj4+PlxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCXJl dHVybiByZXQ7CisJfQorCisJaW5mby0+Z250cmVmID0gZ250cmVmOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIF9fdW5zZXR1cF94ZW5zdG9yZShzdHJ1Y3QgZmNiYWNrX2luZm8gKmlu Zm8pCit7CisJLyogY3VycmVudGx5LCBub3RoaW5nIHRvIGRvICovCit9CisKK3N0YXRpYyBpbnQg X19zZXR1cF9ncmFudF90YWJsZShzdHJ1Y3QgZmNiYWNrX2luZm8gKmluZm8pCit7CisJc3RydWN0 IGdudHRhYl9tYXBfZ3JhbnRfcmVmIG9wOworCXN0cnVjdCB2bV9zdHJ1Y3QgKmdudF9hcmVhOwor CWludCBlcnI7CisKKwlpZiAoKGdudF9hcmVhID0gYWxsb2Nfdm1fYXJlYShQQUdFX1NJWkUpKSA9 PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmNiYWNrOiAlczogYWxsb2Nfdm1fYXJlYSgp IGVycm9yPj4+XG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07 CisJfQorCisJZ250dGFiX3NldF9tYXBfb3AoJm9wLCAodW5zaWduZWQgbG9uZykoZ250X2FyZWEt PmFkZHIpLAorCQkJICBHTlRNQVBfaG9zdF9tYXAsCisJCQkgIGluZm8tPmdudHJlZiwgaW5mby0+ Y29taW5mby0+ZGV2LT5vdGhlcmVuZF9pZCk7CisKKwllcnIgPSBIWVBFUlZJU09SX2dyYW50X3Rh YmxlX29wKEdOVFRBQk9QX21hcF9ncmFudF9yZWYsICZvcCwgMSk7CisJaWYgKG9wLnN0YXR1cykg eworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJmY2JhY2s6ICVzOiBIWVBFUlZJU09SX2dy YW50X3RhYmxlX29wKCkgZXJyb3I+Pj5cbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQly ZXR1cm4gb3Auc3RhdHVzOworCX0KKworCWluZm8tPmdudF9hcmVhID0gZ250X2FyZWE7CisJCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fdW5zZXR1cF9ncmFudF90YWJsZShzdHJ1Y3Qg ZmNiYWNrX2luZm8gKmluZm8pCit7CisJLyogY3VycmVudGx5LCBub3RoaW5nIHRvIGRvICovCit9 CisKK2ludCBmY2JhY2tfY29ubmVjdGlvbl9zZXR1cChzdHJ1Y3QgY29tYmFja19pbmZvICpjb21p bmZvKQoreworCXN0cnVjdCBmY2JhY2tfaW5mbyAqaW5mbzsKKwlpbnQgcmV0ID0gMDsKKworI2lm IDAJLyogZm9yIERFQlVHICovCisJcHJpbnRrKEtFUk5fRVJSICIlczogZ2loYT0lbGRcbiIsIHNp emVvZihzdHJ1Y3QgZ2loYSksIF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fRVJSICIlczog Z2l0YT0lbGRcbiIsIHNpemVvZihzdHJ1Y3QgZ2l0YSksIF9fRlVOQ1RJT05fXyk7CisJcHJpbnRr KEtFUk5fRVJSICIlczogZ2lwYT0lbGRcbiIsIHNpemVvZihzdHJ1Y3QgZ2lwYSksIF9fRlVOQ1RJ T05fXyk7CisJcHJpbnRrKEtFUk5fRVJSICIlczogZ2Z0cD0lbGRcbiIsIHNpemVvZihzdHJ1Y3Qg Z2Z0cCksIF9fRlVOQ1RJT05fXyk7CisjZW5kaWYKKworCXsKKwkJY29taW5mby0+ZmNpbmZvID0g a21hbGxvYyhzaXplb2Yoc3RydWN0IGZjYmFja19pbmZvKSwKKwkJCQkJICBHRlBfS0VSTkVMKTsK KwkJaWYgKGNvbWluZm8tPmZjaW5mbyA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJ Z290byBvdXQwOworCQl9CisJCW1lbXNldChjb21pbmZvLT5mY2luZm8sIDAsIHNpemVvZihzdHJ1 Y3QgZmNiYWNrX2luZm8pKTsKKwkJaW5mbyA9IChzdHJ1Y3QgZmNiYWNrX2luZm8gKikoY29taW5m by0+ZmNpbmZvKTsKKwkJaW5mby0+Y29taW5mbyA9IGNvbWluZm87CisJfQorCQorCS8qIGV4Y2hh bmdlIHZhcmlvdXMgcGFyYW1ldGVycyB0aHJvdWdoIHhlbnN0b3JlICovCisJaWYgKChyZXQgPSBf X3NldHVwX3hlbnN0b3JlKGluZm8pKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmNiYWNr OiAlczogX19zZXR1cF94ZW5zdG9yZSgpIGVycm9yPj4+XG4iLAorCQkgICAgICAgX19GVU5DVElP Tl9fKTsKKwkJZ290byBvdXQxOworCX0KKworCS8qIHByZXBhcmUgZm9yIGdyYW50IHRhYmxlICov CisJaWYgKChyZXQgPSBfX3NldHVwX2dyYW50X3RhYmxlKGluZm8pKSAhPSAwKSB7CisJCXByaW50 ayhLRVJOX0VSUiAiZmNiYWNrOiAlczogX19zZXR1cF9ncmFudF90YWJsZSgpIGVycm9yPj4+XG4i LAorCQkJICAgX19GVU5DVElPTl9fKTsKKwkJZ290byBvdXQyOworCX0KKworCXJldHVybiAwOwor CitvdXQyOgorCV9fdW5zZXR1cF94ZW5zdG9yZShpbmZvKTsKKworb3V0MToKKwlrZnJlZShjb21p bmZvLT5mY2luZm8pOworCitvdXQwOgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQKK2ZjYmFja19j b25uZWN0aW9uX3Vuc2V0dXAoc3RydWN0IGNvbWJhY2tfaW5mbyAqY29taW5mbykKK3sKKwlzdHJ1 Y3QgZmNiYWNrX2luZm8gKmluZm8gPSAoc3RydWN0IGZjYmFja19pbmZvICopKGNvbWluZm8tPmZj aW5mbyk7CisKKwlfX3Vuc2V0dXBfZ3JhbnRfdGFibGUoaW5mbyk7CisJX191bnNldHVwX3hlbnN0 b3JlKGluZm8pOworCisJa2ZyZWUoY29taW5mby0+ZmNpbmZvKTsKK30KKworCitNT0RVTEVfREVT Q1JJUFRJT04oIlhlbiBQYXJhLVZpcnR1YWwgU0NTSSBGaWJyZSBDaGFubmVsIEJhY2tlbmQgRHJp dmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLXIgMjRlMGNiOWZlOWRmIC1yIDM3 NGFhNWI3MzEwNSBkcml2ZXJzL3hlbi9zY3NpYmFjay9mY2JhY2suaAotLS0gL2Rldi9udWxsCVRo dSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysgYi9kcml2ZXJzL3hlbi9zY3NpYmFjay9m Y2JhY2suaAlUdWUgT2N0IDMwIDE2OjQzOjEwIDIwMDcgKzA5MDAKQEAgLTAsMCArMSwxOTEgQEAK Ky8qCisgKiBYZW4gU0NTSSBmcm9udGVuZCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw MDcsIEZVSklUU1UgTGltaXRlZAorICoKKyAqIEJhc2VkIG9uIHRoZSBzY3NpZnJvbnQgZHJpdmVy IGNvZGUgYnkgRlVKSVRBIFRvbW9ub3JpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisg KiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgb3IsIHdoZW4g ZGlzdHJpYnV0ZWQKKyAqIHNlcGFyYXRlbHkgZnJvbSB0aGUgTGludXgga2VybmVsIG9yIGluY29y cG9yYXRlZCBpbnRvIG90aGVyCisgKiBzb2Z0d2FyZSBwYWNrYWdlcywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGxpY2Vuc2U6CisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRo aXMgc291cmNlIGZpbGUgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dAorICogcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwKKyAqIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLAorICog YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBz aGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQg SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4K KyAqLworCisKKyNpZm5kZWYgX19YRU5fRFJJVkVSU19GQ0ZST05UX0hfXworI2RlZmluZSBfX1hF Tl9EUklWRVJTX0ZDRlJPTlRfSF9fCisKKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0Lmg+ CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oPgorCisvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisJRGVmaW5pdGlvbiBvZiBHcmFudCBUYWJsZSBTdHJ1Y3R1cmVzCisgICAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t ICovCisKKyNkZWZpbmUgU0NTSV9GQ19NQVhfU1RBUkdFVAkzMgkvKiBsaW1pdGVkIGJ5IFBBR0Vf U0laRSAqLworI2RlZmluZSBTQ1NJX0ZDX01BWF9SUE9SVAkzMgkvKiBsaW1pdGVkIGJ5IFBBR0Vf U0laRSAqLworCitzdHJ1Y3QgZ2loYSB7CisJdTgJYWN0aXZlX2ZjNHNbRkNfRkM0X0xJU1RfU0la RV07CisJdTY0CWZhYnJpY19uYW1lOworCXU2NAlub2RlX25hbWU7CisJdTY0CXBlcm1hbmVudF9w b3J0X25hbWU7CisJdTMyICAgICBtYXhmcmFtZV9zaXplOworCXUzMglwb3J0X2lkOworCXU2NAlw b3J0X25hbWU7CisJZW51bSBmY19wb3J0X3N0YXRlCXBvcnRfc3RhdGU7CisJZW51bSBmY19wb3J0 X3R5cGUJcG9ydF90eXBlOworCWNoYXIJc2VyaWFsX251bWJlcltGQ19TRVJJQUxfTlVNQkVSX1NJ WkVdOworCXN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MJc3RhdHM7CisJdTMyICAgICBzcGVlZDsK Kwl1MzIJc3VwcG9ydGVkX2NsYXNzZXM7CisJdTgJc3VwcG9ydGVkX2ZjNHNbRkNfRkM0X0xJU1Rf U0laRV07CisJY2hhcglzeW1ib2xpY19uYW1lW0ZDX1NZTUJPTElDX05BTUVfU0laRV07CisJdTMy ICAgICBzdXBwb3J0ZWRfc3BlZWRzOworCWVudW0gZmNfdGd0aWRfYmluZGluZ190eXBlCXRndGlk X2JpbmRfdHlwZTsKK307CisKK3N0cnVjdCBnaXRhIHsKKwl1MzIJbnVtOworCXUzMglwYWRkaW5n MTsKKwlzdHJ1Y3QgeworCQl1NjQJbm9kZV9uYW1lOworCQl1NjQgICAgIHBvcnRfbmFtZTsKKwkJ dTMyCXBvcnRfaWQ7CisJCXUzMgljaGFubmVsOworCQl1MzIJaWQ7CisJCXUzMglwYWRkaW5nMjsK Kwl9IGVbU0NTSV9GQ19NQVhfU1RBUkdFVF07Cit9OworCitzdHJ1Y3QgZ2lwYSB7CisJdTMyCW51 bTsKKwl1MzIJcGFkZGluZzE7CisJc3RydWN0IHsKKwkJdTMyCWRldl9sb3NzX3RtbzsKKwkJdTMy CW1heGZyYW1lX3NpemU7CisJCXU2NAlub2RlX25hbWU7CisJCXU2NAlwb3J0X25hbWU7CisJCXUz MiAgICAgcG9ydF9pZDsKKwkJZW51bSBmY19wb3J0X3N0YXRlCXBvcnRfc3RhdGU7CisJCXUzMgly b2xlczsKKwkJdTMyCXNjc2lfdGFyZ2V0X2lkOworCQl1MzIJc3VwcG9ydGVkX2NsYXNzZXM7CisJ CXUzMgljaGFubmVsOworCX0gZVtTQ1NJX0ZDX01BWF9SUE9SVF07Cit9OworCitzdHJ1Y3QgZmNf ZnVuY3Rpb25fdGVtcGxhdGVfc2hhcmVkIHsKKwl1NjQJZ2V0X3Jwb3J0X2Rldl9sb3NzX3Rtbzox OworCXU2NAlzZXRfcnBvcnRfZGV2X2xvc3NfdG1vOjE7CisJdTY0CWdldF9zdGFyZ2V0X25vZGVf bmFtZToxOworCXU2NAlnZXRfc3RhcmdldF9wb3J0X25hbWU6MTsKKwl1NjQgCWdldF9zdGFyZ2V0 X3BvcnRfaWQ6MTsKKwl1NjQgCWdldF9ob3N0X3BvcnRfaWQ6MTsKKwl1NjQJZ2V0X2hvc3RfcG9y dF90eXBlOjE7CisJdTY0CWdldF9ob3N0X3BvcnRfc3RhdGU6MTsKKwl1NjQJZ2V0X2hvc3RfYWN0 aXZlX2ZjNHM6MTsKKwl1NjQJZ2V0X2hvc3Rfc3BlZWQ6MTsKKwl1NjQJZ2V0X2hvc3RfZmFicmlj X25hbWU6MTsKKwl1NjQJZ2V0X2ZjX2hvc3Rfc3RhdHM6MTsKKwl1NjQJcmVzZXRfZmNfaG9zdF9z dGF0czoxOworCXU2NAlpc3N1ZV9mY19ob3N0X2xpcDoxOworCXU2NAlwYWRkaW5nMTo1MDsKKwor CXU2NAlzaG93X3Jwb3J0X21heGZyYW1lX3NpemU6MTsKKwl1NjQJc2hvd19ycG9ydF9zdXBwb3J0 ZWRfY2xhc3NlczoxOworCXU2NAlzaG93X3Jwb3J0X2Rldl9sb3NzX3RtbzoxOworCXU2NAlzaG93 X3N0YXJnZXRfbm9kZV9uYW1lOjE7CisJdTY0CXNob3dfc3RhcmdldF9wb3J0X25hbWU6MTsKKwl1 NjQJc2hvd19zdGFyZ2V0X3BvcnRfaWQ6MTsKKwl1NjQJc2hvd19ob3N0X25vZGVfbmFtZToxOwor CXU2NAlzaG93X2hvc3RfcG9ydF9uYW1lOjE7CisJdTY0CXNob3dfaG9zdF9wZXJtYW5lbnRfcG9y dF9uYW1lOjE7CisJdTY0CXNob3dfaG9zdF9zdXBwb3J0ZWRfY2xhc3NlczoxOworCXU2NAlzaG93 X2hvc3Rfc3VwcG9ydGVkX2ZjNHM6MTsKKwl1NjQJc2hvd19ob3N0X3N5bWJvbGljX25hbWU6MTsK Kwl1NjQJc2hvd19ob3N0X3N1cHBvcnRlZF9zcGVlZHM6MTsKKwl1NjQJc2hvd19ob3N0X21heGZy YW1lX3NpemU6MTsKKwl1NjQJc2hvd19ob3N0X3NlcmlhbF9udW1iZXI6MTsKKwl1NjQJc2hvd19o b3N0X3BvcnRfaWQ6MTsKKwl1NjQJc2hvd19ob3N0X3BvcnRfdHlwZToxOworCXU2NAlzaG93X2hv c3RfcG9ydF9zdGF0ZToxOworCXU2NAlzaG93X2hvc3RfYWN0aXZlX2ZjNHM6MTsKKwl1NjQJc2hv d19ob3N0X3NwZWVkOjE7CisJdTY0CXNob3dfaG9zdF9mYWJyaWNfbmFtZToxOworCXU2NAlwYWRk aW5nMjo0MzsKKworCXUzMglkZF9mY3Jwb3J0X3NpemU7CisJdTMyCXBhZGRpbmczOworfTsKKwor c3RydWN0IGdmdHAgeworCisJc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlX3NoYXJlZAlmdDsK KworfTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJRGVmaW5pdGlvbiBvZiBJbnRlcm5hbCBJbmZv cm1hdGlvbiBTdHJ1Y3R1cmVzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0cnVjdCBmY2Zyb250 X2luZm8geworCXN0cnVjdCBjb21mcm9udF9pbmZvCSpjb21pbmZvOworCisJaW50CWdudHJlZjsK Kwl2b2lkCSphZGRyOworCisJCQkJLyogT24gYmFja2VuZCwgImhzIiBpcyBzdG9yZWQgaW4gKioq X2hiYSAqLworCXN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MJaHM7Cit9OworCitzdHJ1Y3QgZmNi YWNrX2luZm8geworCXN0cnVjdCBjb21iYWNrX2luZm8JKmNvbWluZm87CisKKwlpbnQJZ250cmVm OworCXN0cnVjdCB2bV9zdHJ1Y3QJKmdudF9hcmVhOworCisJc3RydWN0IHZzY3NpaWZfZnRiX3Jl cXVlc3QJZnRiX3JlcTsKK307CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCURlZmluaXRpb24gb2Yg RnJvbnQvQmFjayBjb21tb24gZnVuY3Rpb25zCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0cnVj dCBmY19pbnRlcm5hbF9oZWFkIHsKKwlzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgdDsK KwlzdHJ1Y3QgZmNfZnVuY3Rpb25fdGVtcGxhdGUgKmY7Cit9OworICAKKworc3RhdGljIHN0cnVj dCBmY19mdW5jdGlvbl90ZW1wbGF0ZSAqCitmY19zaG9zdDJmdChzdHJ1Y3QgU2NzaV9Ib3N0ICpz aG9zdCkKK3sKKwlzdHJ1Y3QgZmNfaW50ZXJuYWxfaGVhZCAqaTsKKworCWkgPSBjb250YWluZXJf b2Yoc2hvc3QtPnRyYW5zcG9ydHQsIHN0cnVjdCBmY19pbnRlcm5hbF9oZWFkLCB0KTsKKwlyZXR1 cm4gaS0+ZjsKK30KKworI2VuZGlmIC8qX19YRU5fRFJJVkVSU19GQ0ZST05UX0hfXyovCmRpZmYg LXIgMjRlMGNiOWZlOWRmIC1yIDM3NGFhNWI3MzEwNSBkcml2ZXJzL3hlbi9zY3NpYmFjay9pbnRl cmZhY2UuYwotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysg Yi9kcml2ZXJzL3hlbi9zY3NpYmFjay9pbnRlcmZhY2UuYwlUdWUgT2N0IDMwIDE2OjQzOjEwIDIw MDcgKzA5MDAKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBpbnRlcmZhY2UgbWFuYWdlbWVudC4K KyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIEZVSklUU1UgTGltaXRlZAorICoKKyAqIEJhc2Vk IG9uIHRoZSBibGtiYWNrIGRyaXZlciBjb2RlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IG9yLCB3 aGVuIGRpc3RyaWJ1dGVkCisgKiBzZXBhcmF0ZWx5IGZyb20gdGhlIExpbnV4IGtlcm5lbCBvciBp bmNvcnBvcmF0ZWQgaW50byBvdGhlcgorICogc29mdHdhcmUgcGFja2FnZXMsIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBsaWNlbnNlOgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBv ZiB0aGlzIHNvdXJjZSBmaWxlICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQKKyAqIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksCisgKiBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwK KyAqIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAq IAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdB UkUuCisgKi8KKworI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9o b3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorI2lmZGVmIENPTkZJR19YRU5f RkMKKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3Np X3RyYW5zcG9ydF9mYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJjb21iYWNrLmgiCisKKyNpbmNs dWRlIDx4ZW4vZXZ0Y2huLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorCitleHRlcm4g aXJxcmV0dXJuX3QgY29tYmFja19pbnRyKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsK KworCitzdGF0aWMga21lbV9jYWNoZV90ICpzY3NpYmFja19jYWNoZXA7CisKK3N0cnVjdCBjb21i YWNrX2luZm8gKnNjc2lpbmZvX2FsbG9jKGRvbWlkX3QgZG9taWQpCit7CisJc3RydWN0IGNvbWJh Y2tfaW5mbyAqaW5mbzsKKworCWluZm8gPSBrbWVtX2NhY2hlX2FsbG9jKHNjc2liYWNrX2NhY2hl cCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK KworCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKKwlpbmZvLT5kb21pZCA9IGRvbWlk OworLyoJc3Bpbl9sb2NrX2luaXQoJmluZm8tPnJpbmdfbG9ja19mdGIpOyovCisJc3Bpbl9sb2Nr X2luaXQoJmluZm8tPnJpbmdfbG9ja19idGYpOworCWF0b21pY19zZXQoJmluZm8tPnJlZmNudCwg MSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+d3EpOworCWluaXRfd2FpdHF1ZXVlX2hl YWQoJmluZm8tPndhaXRpbmdfdG9fZnJlZSk7CisKKwlyZXR1cm4gaW5mbzsKK30KKworc3RhdGlj IGludCBtYXBfZnJvbnRlbmRfcGFnZSggc3RydWN0IGNvbWJhY2tfaW5mbyAqaW5mbywKKwl1bnNp Z25lZCBsb25nIGZ0Yl9yaW5nX3JlZiwgdW5zaWduZWQgbG9uZyBidGZfcmluZ19yZWYpCit7CisJ c3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmIG9wOworCWludCBlcnI7CisKKwlnbnR0YWJfc2V0 X21hcF9vcCgmb3AsICh1bnNpZ25lZCBsb25nKWluZm8tPmZ0Yl9yaW5nX2FyZWEtPmFkZHIsCisJ CQkJR05UTUFQX2hvc3RfbWFwLCBmdGJfcmluZ19yZWYsCisJCQkJaW5mby0+ZG9taWQpOworCisJ ZXJyID0gSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcChHTlRUQUJPUF9tYXBfZ3JhbnRfcmVmLCAm b3AsIDEpOworCUJVR19PTihlcnIpOworCisJaWYgKG9wLnN0YXR1cykgeworCQlwcmludGsoS0VS Tl9FUlIgInNjc2liYWNrOiBHcmFudCB0YWJsZSBvcGVyYXRpb24gZmFpbHVyZSAhXG4iKTsKKwkJ cmV0dXJuIG9wLnN0YXR1czsKKwl9CisKKwlpbmZvLT5mdGJfc2htZW1fcmVmICAgID0gZnRiX3Jp bmdfcmVmOworCWluZm8tPmZ0Yl9zaG1lbV9oYW5kbGUgPSBvcC5oYW5kbGU7CisKKwlnbnR0YWJf c2V0X21hcF9vcCgmb3AsICh1bnNpZ25lZCBsb25nKWluZm8tPmJ0Zl9yaW5nX2FyZWEtPmFkZHIs CisJCQkJR05UTUFQX2hvc3RfbWFwLCBidGZfcmluZ19yZWYsIGluZm8tPmRvbWlkKTsKKworCWVy ciA9IEhZUEVSVklTT1JfZ3JhbnRfdGFibGVfb3AoR05UVEFCT1BfbWFwX2dyYW50X3JlZiwgJm9w LCAxKTsKKwlCVUdfT04oZXJyKTsKKworCWlmIChvcC5zdGF0dXMpIHsKKwkJcHJpbnRrKEtFUk5f RVJSICJzY3NpYmFjazogR3JhbnQgdGFibGUgb3BlcmF0aW9uIGZhaWx1cmUgIVxuIik7CisJCXJl dHVybiBvcC5zdGF0dXM7CisJfQorCisJaW5mby0+YnRmX3NobWVtX3JlZiAgICA9IGJ0Zl9yaW5n X3JlZjsKKwlpbmZvLT5idGZfc2htZW1faGFuZGxlID0gb3AuaGFuZGxlOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyB2b2lkIHVubWFwX2Zyb250ZW5kX3BhZ2Uoc3RydWN0IGNvbWJhY2tfaW5m byAqaW5mbykKK3sKKwlzdHJ1Y3QgZ250dGFiX3VubWFwX2dyYW50X3JlZiBvcDsKKwlpbnQgZXJy OworCisJZ250dGFiX3NldF91bm1hcF9vcCgmb3AsICh1bnNpZ25lZCBsb25nKWluZm8tPmZ0Yl9y aW5nX2FyZWEtPmFkZHIsCisJCQkJR05UTUFQX2hvc3RfbWFwLCBpbmZvLT5mdGJfc2htZW1faGFu ZGxlKTsKKworCWVyciA9IEhZUEVSVklTT1JfZ3JhbnRfdGFibGVfb3AoR05UVEFCT1BfdW5tYXBf Z3JhbnRfcmVmLCAmb3AsIDEpOworCUJVR19PTihlcnIpOworCisJZ250dGFiX3NldF91bm1hcF9v cCgmb3AsICh1bnNpZ25lZCBsb25nKWluZm8tPmJ0Zl9yaW5nX2FyZWEtPmFkZHIsCisJCQkJR05U TUFQX2hvc3RfbWFwLCBpbmZvLT5idGZfc2htZW1faGFuZGxlKTsKKworCWVyciA9IEhZUEVSVklT T1JfZ3JhbnRfdGFibGVfb3AoR05UVEFCT1BfdW5tYXBfZ3JhbnRfcmVmLCAmb3AsIDEpOworCUJV R19PTihlcnIpOworfQorCitpbnQgc2NzaWJhY2tfaW5pdF9zcmluZyhzdHJ1Y3QgY29tYmFja19p bmZvICppbmZvLAorCXVuc2lnbmVkIGxvbmcgZnRiX3JpbmdfcmVmLCB1bnNpZ25lZCBsb25nIGJ0 Zl9yaW5nX3JlZiwgdW5zaWduZWQgaW50IGV2dGNobikKK3sKKwlzdHJ1Y3QgdnNjc2lpZl9mdGJf c3JpbmcgKmZ0Yl9zcmluZzsKKwlzdHJ1Y3QgdnNjc2lpZl9idGZfc3JpbmcgKmJ0Zl9zcmluZzsK KwlpbnQgZXJyOworCisJaWYgKGluZm8tPmlycSkgeworCQlwcmludGsoS0VSTl9FUlIgInNjc2li YWNrOiBBbHJlYWR5IGNvbm5lY3RlZCB0aHJvdWdoP1xuIik7CisJCXJldHVybiAwOworCX0KKwor CWluZm8tPmZ0Yl9yaW5nX2FyZWEgPSBhbGxvY192bV9hcmVhKFBBR0VfU0laRSk7CisJaWYgKCFp bmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpbmZvLT5idGZfcmluZ19hcmVhID0gYWxsb2Nfdm1f YXJlYShQQUdFX1NJWkUpOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIg PSBtYXBfZnJvbnRlbmRfcGFnZShpbmZvLCBmdGJfcmluZ19yZWYsIGJ0Zl9yaW5nX3JlZik7CisJ aWYgKGVycikKKwkJZ290byBmcmVlX3ZtOworCisJZnRiX3NyaW5nID0gKHN0cnVjdCB2c2NzaWlm X2Z0Yl9zcmluZyAqKSBpbmZvLT5mdGJfcmluZ19hcmVhLT5hZGRyOworCUJBQ0tfUklOR19JTklU KCZpbmZvLT5mdGJfcmluZywgZnRiX3NyaW5nLCBQQUdFX1NJWkUpOworCisJYnRmX3NyaW5nID0g KHN0cnVjdCB2c2NzaWlmX2J0Zl9zcmluZyAqKSBpbmZvLT5idGZfcmluZ19hcmVhLT5hZGRyOwor CUZST05UX1JJTkdfSU5JVCgmaW5mby0+YnRmX3JpbmcsIGJ0Zl9zcmluZywgUEFHRV9TSVpFKTsK KworCWVyciA9IGJpbmRfaW50ZXJkb21haW5fZXZ0Y2huX3RvX2lycWhhbmRsZXIoCisJCQlpbmZv LT5kb21pZCwgZXZ0Y2huLAorCQkJY29tYmFja19pbnRyLCAwLCAic2NzaWlmLWJhY2tlbmQiLCBp bmZvKTsKKworCWlmIChlcnIgPCAwKQorCQlnb3RvIHVubWFwX3BhZ2U7CisJCQorCWluZm8tPmly cSA9IGVycjsKKworCXJldHVybiAwOworCit1bm1hcF9wYWdlOgorCXVubWFwX2Zyb250ZW5kX3Bh Z2UoaW5mbyk7CitmcmVlX3ZtOgorCWZyZWVfdm1fYXJlYShpbmZvLT5mdGJfcmluZ19hcmVhKTsK KwlmcmVlX3ZtX2FyZWEoaW5mby0+YnRmX3JpbmdfYXJlYSk7CisJcmV0dXJuIGVycjsKK30KKwor dm9pZCBzY3NpYmFja19kaXNjb25uZWN0KHN0cnVjdCBjb21iYWNrX2luZm8gKmluZm8pCit7CisJ aWYgKGluZm8tPmt0aHJlYWQpIHsKKwkJa3RocmVhZF9zdG9wKGluZm8tPmt0aHJlYWQpOworCQlp bmZvLT5rdGhyZWFkID0gTlVMTDsKKwl9CisKKwlhdG9taWNfZGVjKCZpbmZvLT5yZWZjbnQpOwor CXdhaXRfZXZlbnQoaW5mby0+d2FpdGluZ190b19mcmVlLCBhdG9taWNfcmVhZCgmaW5mby0+cmVm Y250KSA9PSAwKTsKKwlhdG9taWNfaW5jKCZpbmZvLT5yZWZjbnQpOworCisJaWYgKGluZm8tPmly cSkgeworCQl1bmJpbmRfZnJvbV9pcnFoYW5kbGVyKGluZm8tPmlycSwgaW5mbyk7CisJCWluZm8t PmlycSA9IDA7CisJfQorCisJaWYgKGluZm8tPmZ0Yl9yaW5nLnNyaW5nIHx8IGluZm8tPmJ0Zl9y aW5nLnNyaW5nKSB7CisJCXVubWFwX2Zyb250ZW5kX3BhZ2UoaW5mbyk7CisJCWZyZWVfdm1fYXJl YShpbmZvLT5mdGJfcmluZ19hcmVhKTsKKwkJZnJlZV92bV9hcmVhKGluZm8tPmJ0Zl9yaW5nX2Fy ZWEpOworCQlpbmZvLT5mdGJfcmluZy5zcmluZyA9IE5VTEw7CisJCWluZm8tPmJ0Zl9yaW5nLnNy aW5nID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgc2NzaWJhY2tfZnJlZShzdHJ1Y3QgY29tYmFja19p bmZvICppbmZvKQoreworCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmaW5mby0+cmVmY250KSkK KwkJQlVHKCk7CisJa21lbV9jYWNoZV9mcmVlKHNjc2liYWNrX2NhY2hlcCwgaW5mbyk7Cit9CisK K3ZvaWQgX19pbml0IHNjc2liYWNrX2ludGVyZmFjZV9pbml0KHZvaWQpCit7CisJc2NzaWJhY2tf Y2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoInNjc2lpZl9jYWNoZSIsCisJCXNpemVvZihzdHJ1 Y3QgY29tYmFja19pbmZvKSwgMCwgMCwgTlVMTCwgTlVMTCk7Cit9CisKK3ZvaWQgX19leGl0IHNj c2liYWNrX2ludGVyZmFjZV9leGl0KHZvaWQpCit7CisJa21lbV9jYWNoZV9kZXN0cm95KHNjc2li YWNrX2NhY2hlcCk7Cit9CmRpZmYgLXIgMjRlMGNiOWZlOWRmIC1yIDM3NGFhNWI3MzEwNSBkcml2 ZXJzL3hlbi9zY3NpYmFjay9zY3NpYmFjay5jCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDow MDowMCAxOTcwICswMDAwCisrKyBiL2RyaXZlcnMveGVuL3Njc2liYWNrL3Njc2liYWNrLmMJVHVl IE9jdCAzMCAxNjo0MzoxMCAyMDA3ICswOTAwCkBAIC0wLDAgKzEsNTU2IEBACisvKgorICogWGVu IFNDU0kgYmFja2VuZCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIEZVSklUU1Ug TGltaXRlZAorICoKKyAqIEJhc2VkIG9uIHRoZSBibGtiYWNrIGRyaXZlciBjb2RlLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IG9yLCB3aGVuIGRpc3RyaWJ1dGVkCisgKiBzZXBhcmF0ZWx5IGZyb20g dGhlIExpbnV4IGtlcm5lbCBvciBpbmNvcnBvcmF0ZWQgaW50byBvdGhlcgorICogc29mdHdhcmUg cGFja2FnZXMsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBsaWNlbnNlOgorICogCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvdXJjZSBmaWxlICh0aGUgIlNvZnR3YXJlIiks IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqIHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksCisg KiBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwKKyAqIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUK KyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4K KyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Cisj aW5jbHVkZSA8eGVuL2JhbGxvb24uaD4KKyNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgorI2lu Y2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVk ZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5j bHVkZSA8c2NzaS9zY3NpX2RiZy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgorCisjaWZk ZWYgQ09ORklHX1hFTl9GQworI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnQuaD4KKyNpbmNs dWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImNvbWJh Y2suaCIKKworZXh0ZXJuIHN0cnVjdCB2c2NzaWlmX2J0Zl9yZXF1ZXN0ICogY29tYmFja19wcmVf cmVwbHkoc3RydWN0IGNvbWJhY2tfaW5mbyAqKTsKK2V4dGVybiB2b2lkIGNvbWJhY2tfZG9fcmVw bHkoc3RydWN0IGNvbWJhY2tfaW5mbyAqKTsKK2V4dGVybiB2b2lkIGZyZWVfcmVxKHBlbmRpbmdf cmVxX3QgKnJlcSk7CitleHRlcm4gaW50IF9faW5pdCBzY3NpX3RyYWNlX2luaXQodm9pZCk7Citl eHRlcm4gdm9pZCBfX2V4aXQgc2NzaV90cmFjZV9leGl0KHZvaWQpOworCitpbnQgdnNjc2lpZl9y ZXFzID0gREVGQVVMVF9DQU5fUVVFVUU7Cittb2R1bGVfcGFyYW1fbmFtZWQocmVxcywgdnNjc2lp Zl9yZXFzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhyZXFzLCAiTnVtYmVyIG9mIHNjc2li YWNrIHJlcXVlc3RzIHRvIGFsbG9jYXRlIik7CisKKworI2RlZmluZSBJTlZBTElEX0dSQU5UX0hB TkRMRQkweEZGRkYKKyNkZWZpbmUgU0NTSUJBQ0tfSU5WQUxJRF9IQU5ETEUgKH4wKQorCitzdGF0 aWMgcGVuZGluZ19yZXFfdCAqcGVuZGluZ19yZXFzOworc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5n X2ZyZWU7CitzdGF0aWMgc3RydWN0IHBhZ2UgKipwZW5kaW5nX3BhZ2VzOworc3RhdGljIGdyYW50 X2hhbmRsZV90ICpwZW5kaW5nX2dyYW50X2hhbmRsZXM7CisKK3N0YXRpYyBpbmxpbmUgaW50IHZh ZGRyX3BhZ2VucihwZW5kaW5nX3JlcV90ICpyZXEsIGludCBzZWcpCit7CisJcmV0dXJuIChyZXEg LSBwZW5kaW5nX3JlcXMpICogU0dfVEFCTEVTSVpFICsgc2VnOworfQorCitzdGF0aWMgaW5saW5l IHVuc2lnbmVkIGxvbmcgdmFkZHIocGVuZGluZ19yZXFfdCAqcmVxLCBpbnQgc2VnKQoreworCXVu c2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGVuZGluZ19wYWdlc1t2YWRkcl9wYWdlbnIo cmVxLCBzZWcpXSk7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKXBmbl90b19rYWRkcihwZm4pOwor fQorCisjZGVmaW5lIHBlbmRpbmdfaGFuZGxlKF9yZXEsIF9zZWcpIFwKKwkocGVuZGluZ19ncmFu dF9oYW5kbGVzW3ZhZGRyX3BhZ2VucihfcmVxLCBfc2VnKV0pCisKKworc3RhdGljIHZvaWQgZmFz dF9mbHVzaF9hcmVhKHBlbmRpbmdfcmVxX3QgKnJlcSkKK3sKKwlzdHJ1Y3QgZ250dGFiX3VubWFw X2dyYW50X3JlZiB1bm1hcFtTR19UQUJMRVNJWkVdOworCXVuc2lnbmVkIGludCBpLCBpbnZjb3Vu dCA9IDA7CisJZ3JhbnRfaGFuZGxlX3QgaGFuZGxlOworCWludCBlcnI7CisKKwlpZiAocmVxLT51 LnNjc2kudXNlX3NnKSB7CisJCWZvciAoaSA9IDA7IGkgPCByZXEtPnUuc2NzaS51c2Vfc2c7IGkr KykgeworCQkJaGFuZGxlID0gcGVuZGluZ19oYW5kbGUocmVxLCBpKTsKKwkJCWlmIChoYW5kbGUg PT0gU0NTSUJBQ0tfSU5WQUxJRF9IQU5ETEUpCisJCQkJY29udGludWU7CisJCQlnbnR0YWJfc2V0 X3VubWFwX29wKCZ1bm1hcFtpXSwgdmFkZHIocmVxLCBpKSwKKwkJCQkJCUdOVE1BUF9ob3N0X21h cCwgaGFuZGxlKTsKKwkJCXBlbmRpbmdfaGFuZGxlKHJlcSwgaSkgPSBTQ1NJQkFDS19JTlZBTElE X0hBTkRMRTsKKwkJCWludmNvdW50Kys7CisJCX0KKworCQllcnIgPSBIWVBFUlZJU09SX2dyYW50 X3RhYmxlX29wKAorCQkJR05UVEFCT1BfdW5tYXBfZ3JhbnRfcmVmLCB1bm1hcCwgaW52Y291bnQp OworCQlCVUdfT04oZXJyKTsKKwl9IGVsc2UgaWYgKHJlcS0+dS5zY3NpLnJlcXVlc3RfYnVmZmxl bikgeworCQloYW5kbGUgPSBwZW5kaW5nX2hhbmRsZShyZXEsIDApOworCQlpZiAoaGFuZGxlID09 IFNDU0lCQUNLX0lOVkFMSURfSEFORExFKQorCQkJcmV0dXJuOworCQlnbnR0YWJfc2V0X3VubWFw X29wKCZ1bm1hcFswXSwgdmFkZHIocmVxLCAwKSwKKwkJCQkJR05UTUFQX2hvc3RfbWFwLCBoYW5k bGUpOworCQlwZW5kaW5nX2hhbmRsZShyZXEsIDApID0gU0NTSUJBQ0tfSU5WQUxJRF9IQU5ETEU7 CisKKwkJZXJyID0gSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcCgKKwkJCUdOVFRBQk9QX3VubWFw X2dyYW50X3JlZiwgdW5tYXAsIDEpOworCQlCVUdfT04oZXJyKTsKKwl9CisJCisJcmV0dXJuOwor fQorCisKK3N0YXRpYyB2b2lkIG1ha2Vfc2Vuc2Uoc3RydWN0IGNvbWJhY2tfaW5mbyAqaW5mbywg c3RydWN0IHJlcXVlc3QgKnJlcSwKKwkJCQkJaW50MzJfdCByZXN1bHQsIHVpbnQ2NF90IHJxaWQp Cit7CisJc3RydWN0IHZzY3NpaWZfYnRmX3JlcXVlc3QgKmJ0Zl9yZXE7CisKKwlEUFJJTlRLKCIl c1xuIixfX0ZVTkNUSU9OX18pOworCQorCWJ0Zl9yZXEgPSBjb21iYWNrX3ByZV9yZXBseShpbmZv KTsKKworCW1lbXNldChidGZfcmVxLT51LnNjc2kuc2Vuc2VfYnVmZmVyLCAwLCBTQ1NJX1NFTlNF X0JVRkZFUlNJWkUpOworCisJYnRmX3JlcS0+cnNsdCAgID0gcmVzdWx0OworCWJ0Zl9yZXEtPnJx aWQgICA9IHJxaWQ7CisKKwlpZiAocmVzdWx0ICE9IDAgJiYgcmVxICE9IE5VTEwgKSB7CisJCW1l bWNweShidGZfcmVxLT51LnNjc2kuc2Vuc2VfYnVmZmVyLCByZXEtPnNlbnNlLCByZXEtPnNlbnNl X2xlbik7CisJCWJ0Zl9yZXEtPnUuc2NzaS5zZW5zZV9sZW4gPSByZXEtPnNlbnNlX2xlbjsKKwl9 IGVsc2UKKwkJYnRmX3JlcS0+dS5zY3NpLnNlbnNlX2xlbiA9IDA7CisKKwljb21iYWNrX2RvX3Jl cGx5KGluZm8pOworCit9CisKKworc3RhdGljIHZvaWQgc2NzaWJhY2tfZW5kX2NtZF9mbihzdHJ1 Y3QgcmVxdWVzdCAqcmVxLCBpbnQgZXJyb3IpCit7CisJdW5zaWduZWQgY2hhciBzZW5zZV9idWZm ZXJbU0NTSV9TRU5TRV9CVUZGRVJTSVpFXTsKKwlwZW5kaW5nX3JlcV90ICpwZW5kaW5nX3JlcSA9 IHJlcS0+ZW5kX2lvX2RhdGE7CisJcGVuZGluZ19yZXEtPnUuc2NzaS5ycSA9IHJlcTsKKworCURQ UklOVEsoIiVzXG4iLF9fRlVOQ1RJT05fXyk7CisKKwlpZiAocmVxLT5lcnJvcnMgIT0gMCkgewor CisJCXByaW50aygic2NzaWJhY2s6IFNDU0kgQ01EIHJldHVybi4gcmVxLT5lcnJvcnMgPSAweCUw OHhcbiIsCisJCQkJCQkJCXJlcS0+ZXJyb3JzKTsKKwkJcHJpbnRrKCJzY3NpYmFjazogc3RhdHVz ID0gMHglMDJ4LCBtZXNzYWdlID0gMHglMDJ4LCBob3N0ID0gMHglMDJ4LCBkcml2ZXIgPSAweCUw MnhcbiIsCisJCQkJc3RhdHVzX2J5dGUocmVxLT5lcnJvcnMpLCBtc2dfYnl0ZShyZXEtPmVycm9y cyksCisJCQkJaG9zdF9ieXRlKHJlcS0+ZXJyb3JzKSwgZHJpdmVyX2J5dGUocmVxLT5lcnJvcnMp KTsKKwkJbWVtY3B5KHNlbnNlX2J1ZmZlciwgcmVxLT5zZW5zZSwgcmVxLT5zZW5zZV9sZW4pOwor CQlfX3Njc2lfcHJpbnRfc2Vuc2UoInNjc2liYWNrIiwgc2Vuc2VfYnVmZmVyLCByZXEtPnNlbnNl X2xlbik7CisJCQorCX0KKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwZW5kaW5nX3JlcS0+ dS5zY3NpLnBlbmRjbnQpKSB7CisJCWZhc3RfZmx1c2hfYXJlYShwZW5kaW5nX3JlcSk7CisJCW1h a2Vfc2Vuc2UocGVuZGluZ19yZXEtPmluZm8sIHBlbmRpbmdfcmVxLT51LnNjc2kucnEsIAorCQkJ CXJlcS0+ZXJyb3JzLCBwZW5kaW5nX3JlcS0+dS5zY3NpLnJxaWQpOworCQlzY3NpYmFja19wdXQo cGVuZGluZ19yZXEtPmluZm8pOworCQlmcmVlX3JlcShwZW5kaW5nX3JlcSk7CisJfQorCisJX19i bGtfcHV0X3JlcXVlc3QocmVxLT5xLCByZXEpOworCit9CisKKworLyogcXVvdGVkIHNjc2lfbGli LmMvc2NzaV9tZXJnZV9iaW8gKi8KK3N0YXRpYyBpbnQgc2NzaWJhY2tfbWVyZ2VfYmlvKHN0cnVj dCByZXF1ZXN0ICpycSwgc3RydWN0IGJpbyAqYmlvKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVl ICpxID0gcnEtPnE7CisKKwliaW8tPmJpX2ZsYWdzICY9IH4oMSA8PCBCSU9fU0VHX1ZBTElEKTsK KwlpZiAocnFfZGF0YV9kaXIocnEpID09IFdSSVRFKQorCQliaW8tPmJpX3J3IHw9ICgxIDw8IEJJ T19SVyk7CisKKwlibGtfcXVldWVfYm91bmNlKHEsICZiaW8pOworCisJaWYgKCFycS0+YmlvKQor CQlibGtfcnFfYmlvX3ByZXAocSwgcnEsIGJpbyk7CisJZWxzZSBpZiAoIXEtPmJhY2tfbWVyZ2Vf Zm4ocSwgcnEsIGJpbykpCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UgeworCQlycS0+YmlvdGFp bC0+YmlfbmV4dCA9IGJpbzsKKwkJcnEtPmJpb3RhaWwgICAgICAgICAgPSBiaW87CisJCXJxLT5o YXJkX25yX3NlY3RvcnMgKz0gYmlvX3NlY3RvcnMoYmlvKTsKKwkJcnEtPm5yX3NlY3RvcnMgICAg ICAgPSBycS0+aGFyZF9ucl9zZWN0b3JzOworCX0KKworCXJldHVybiAwOworfQorCisKKy8qIHF1 b3RlZCBzY3NpX2xpYi5jL3Njc2lfYmlfZW5kaW8gKi8KK3N0YXRpYyBpbnQgc2NzaWJhY2tfYmlf ZW5kaW8oc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwgaW50IGVycm9y KQoreworCWlmIChiaW8tPmJpX3NpemUpCisJCXJldHVybiAxOworCisJYmlvX3B1dChiaW8pOwor CXJldHVybiAwOworfQorCisKKy8qIHF1b3RlZCBzY3NpX2xpYi5jL3Njc2lfcmVxX21hcF9zZyAu ICovCitzdGF0aWMgaW50IHJlcXVzZXRfbWFwX3NnKHBlbmRpbmdfcmVxX3QgKnBlbmRpbmdfcmVx LCBpbnQgY291bnQpCit7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gcGVuZGluZ19yZXEtPnUuc2Nz aS5ycTsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHBlbmRpbmdfcmVxLT51LnNjc2kucnEt PnE7CisJaW50IG5yX3BhZ2VzOworCWludCBuc2VncyA9IGNvdW50OworCisJdW5zaWduZWQgaW50 IGRhdGFfbGVuID0gMCwgbGVuLCBieXRlcywgb2ZmOworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0 cnVjdCBiaW8gKmJpbyA9IE5VTEw7CisJaW50IGksIGVyciwgbnJfdmVjcyA9IDA7CisKKwlmb3Ig KGkgPSAwOyBpIDwgbnNlZ3M7IGkrKykgeworCQlwYWdlID0gdmlydF90b19wYWdlKHZhZGRyKHBl bmRpbmdfcmVxLCBpKSk7CisKKwkJb2ZmID0gcGVuZGluZ19yZXEtPnUuc2NzaS5wZW5kX3NlZ1tp XS5vZmZzZXQ7CisJCWxlbiA9IHBlbmRpbmdfcmVxLT51LnNjc2kucGVuZF9zZWdbaV0ubGVuZ3Ro OworCQlkYXRhX2xlbiArPSBsZW47CisKKwkJbnJfcGFnZXMgPSAobGVuICsgb2ZmICsgUEFHRV9T SVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKKworCQl3aGlsZSAobGVuID4gMCkgeworCQkJYnl0ZXMg PSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2ZmKTsKKworCQkJaWYgKCFi aW8pIHsKKwkJCQlucl92ZWNzID0gbWluX3QoaW50LCBCSU9fTUFYX1BBR0VTLCBucl9wYWdlcyk7 CisJCQkJbnJfcGFnZXMgLT0gbnJfdmVjczsKKwkJCQliaW8gPSBiaW9fYWxsb2MoR0ZQX0tFUk5F TCwgbnJfdmVjcyk7CisJCQkJaWYgKCFiaW8pIHsKKwkJCQkJZXJyID0gLUVOT01FTTsKKwkJCQkJ Z290byBmcmVlX2Jpb3M7CisJCQkJfQorCQkJCWJpby0+YmlfZW5kX2lvID0gc2NzaWJhY2tfYmlf ZW5kaW87CisJCQl9CisKKwkJCWlmIChiaW9fYWRkX3BjX3BhZ2UocSwgYmlvLCBwYWdlLCBieXRl cywgb2ZmKSAhPQorCQkJCQkJYnl0ZXMpIHsKKwkJCQliaW9fcHV0KGJpbyk7CisJCQkJZXJyID0g LUVJTlZBTDsKKwkJCQlnb3RvIGZyZWVfYmlvczsKKwkJCX0KKworCQkJaWYgKGJpby0+YmlfdmNu dCA+PSBucl92ZWNzKSB7CisJCQkJZXJyID0gc2NzaWJhY2tfbWVyZ2VfYmlvKHJxLCBiaW8pOwor CQkJCWlmIChlcnIpIHsKKwkJCQkJYmlvX2VuZGlvKGJpbywgYmlvLT5iaV9zaXplLCAwKTsKKwkJ CQkJZ290byBmcmVlX2Jpb3M7CisJCQkJfQorCQkJCWJpbyA9IE5VTEw7CisJCQl9CisKKwkJCXBh Z2UrKzsKKwkJCWxlbiAtPSBieXRlczsKKwkJCW9mZiA9IDA7CisJCX0KKwl9CisKKwlycS0+YnVm ZmVyICAgPSBycS0+ZGF0YSA9IE5VTEw7CisJcnEtPmRhdGFfbGVuID0gZGF0YV9sZW47CisJcmV0 dXJuIDA7CisKK2ZyZWVfYmlvczoKKwl3aGlsZSAoKGJpbyA9IHJxLT5iaW8pICE9IE5VTEwpIHsK KwkJcnEtPmJpbyA9IGJpby0+YmlfbmV4dDsKKwkJLyoKKwkJICogY2FsbCBlbmRpbyBpbnN0ZWFk IG9mIGJpb19wdXQgaW5jYXNlIGl0IHdhcyBib3VuY2VkCisJCSAqLworCQliaW9fZW5kaW8oYmlv LCBiaW8tPmJpX3NpemUsIDApOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK2ludCBjb3B5X3Jl cXVlc3RfcmluZ19pbmZvKHN0cnVjdCBjb21iYWNrX2luZm8gKmluZm8sCisJCXN0cnVjdCB2c2Nz aWlmX2Z0Yl9yZXF1ZXN0ICpmdGJfcmVxLCBwZW5kaW5nX3JlcV90ICpwZW5kaW5nX3JlcSkKK3sK KwlpbnQgd3JpdGU7CisJY2hhciBzZW5zZVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOworCWludCBp OworCisJRFBSSU5USygiJXNcbiIsX19GVU5DVElPTl9fKTsKKworCXBlbmRpbmdfcmVxLT51LnNj c2kucnFpZCAgID0gZnRiX3JlcS0+cnFpZDsKKwlwZW5kaW5nX3JlcS0+dS5zY3NpLnNkZXYgICA9 IHNjc2lfZGV2aWNlX2xvb2t1cChpbmZvLT5ob3N0LAorCQkJIGZ0Yl9yZXEtPnUuc2NzaS5jaGFu bmVsLCBmdGJfcmVxLT51LnNjc2kuaWQsIGZ0Yl9yZXEtPnUuc2NzaS5sdW4pOworCWlmICghcGVu ZGluZ19yZXEtPnUuc2NzaS5zZGV2KSB7CisJCWdvdG8gZmFpbF9yZXNwb25zZTsKKwl9CisKKwl3 cml0ZSA9IChmdGJfcmVxLT51LnNjc2kuc2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklD RSk7CisJcGVuZGluZ19yZXEtPnUuc2NzaS5kYXRhX2RpciA9IGZ0Yl9yZXEtPnUuc2NzaS5zY19k YXRhX2RpcmVjdGlvbjsKKwlwZW5kaW5nX3JlcS0+dS5zY3NpLnJxICAgICAgID0KKwkJCWJsa19n ZXRfcmVxdWVzdChwZW5kaW5nX3JlcS0+dS5zY3NpLnNkZXYtPnJlcXVlc3RfcXVldWUsCisJCQkJ CQkJd3JpdGUsIEdGUF9LRVJORUwpOworCXBlbmRpbmdfcmVxLT5pbmZvICAgPSBpbmZvOworCXBl bmRpbmdfcmVxLT51LnNjc2kudXNlX3NnID0gZnRiX3JlcS0+dS5zY3NpLnVzZV9zZzsKKwlwZW5k aW5nX3JlcS0+dS5zY3NpLnJlcXVlc3RfYnVmZmxlbiA9IGZ0Yl9yZXEtPnUuc2NzaS5yZXF1ZXN0 X2J1ZmZsZW47CisKKworCXBlbmRpbmdfcmVxLT51LnNjc2kucnEtPmZsYWdzICB8PSBSRVFfQkxP Q0tfUEM7CisJcGVuZGluZ19yZXEtPnUuc2NzaS5ycS0+Y21kX2xlbiA9IGZ0Yl9yZXEtPnUuc2Nz aS5jbWRfbGVuOworCW1lbWNweShwZW5kaW5nX3JlcS0+dS5zY3NpLnJxLT5jbWQsIGZ0Yl9yZXEt PnUuc2NzaS5jbW5kLAorCQkgICBmdGJfcmVxLT51LnNjc2kuY21kX2xlbik7CisKKwltZW1zZXQo c2Vuc2UsIDAsIHNpemVvZihzZW5zZSkpOyAvKkZJWE1FKi8KKwlwZW5kaW5nX3JlcS0+dS5zY3Np LnJxLT5zZW5zZSAgICAgPSBzZW5zZTsKKwlwZW5kaW5nX3JlcS0+dS5zY3NpLnJxLT5zZW5zZV9s ZW4gPSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkU7CisKKy8qCXBlbmRpbmdfcmVxLT51LnNjc2kucnEt PnJldHJpZXMgICA9IGZ0Yl9yZXEtPnUuc2NzaS5yZXRyaWVzOyovCisJcGVuZGluZ19yZXEtPnUu c2NzaS5ycS0+cmV0cmllcyAgID0gMDsKKwlwZW5kaW5nX3JlcS0+dS5zY3NpLnJxLT50aW1lb3V0 ICAgPSBmdGJfcmVxLT51LnNjc2kudGltZW91dF9wZXJfY29tbWFuZDsKKworCXBlbmRpbmdfcmVx LT51LnNjc2kucnEtPmVuZF9pb19kYXRhID0gcGVuZGluZ19yZXE7CisKKwlpZiAoZnRiX3JlcS0+ dS5zY3NpLnVzZV9zZykgeworCQlmb3IgKGkgPSAwOyBpIDwgZnRiX3JlcS0+dS5zY3NpLnVzZV9z ZzsgaSsrKSB7CisJCQlwZW5kaW5nX3JlcS0+dS5zY3NpLnBlbmRfc2VnW2ldLmdyZWYgICA9IGZ0 Yl9yZXEtPnUuc2NzaS5zZWdbaV0uZ3JlZjsKKwkJCXBlbmRpbmdfcmVxLT51LnNjc2kucGVuZF9z ZWdbaV0ub2Zmc2V0ID0gZnRiX3JlcS0+dS5zY3NpLnNlZ1tpXS5vZmZzZXQ7CisJCQlwZW5kaW5n X3JlcS0+dS5zY3NpLnBlbmRfc2VnW2ldLmxlbmd0aCA9IGZ0Yl9yZXEtPnUuc2NzaS5zZWdbaV0u bGVuZ3RoOworCQl9CisJfSBlbHNlIGlmIChmdGJfcmVxLT51LnNjc2kucmVxdWVzdF9idWZmbGVu KSB7CisJCXBlbmRpbmdfcmVxLT51LnNjc2kucGVuZF9zZWdbMF0uZ3JlZiAgID0gZnRiX3JlcS0+ dS5zY3NpLnNlZ1swXS5ncmVmOworCQlwZW5kaW5nX3JlcS0+dS5zY3NpLnBlbmRfc2VnWzBdLm9m ZnNldCA9IGZ0Yl9yZXEtPnUuc2NzaS5zZWdbMF0ub2Zmc2V0OworCQlwZW5kaW5nX3JlcS0+dS5z Y3NpLnBlbmRfc2VnWzBdLmxlbmd0aCA9IGZ0Yl9yZXEtPnUuc2NzaS5zZWdbMF0ubGVuZ3RoOwor CX0KKwkKKwlyZXR1cm4gMDsKKworZmFpbF9yZXNwb25zZToKKwlyZXR1cm4gMTsKK30KKworCit2 b2lkIHNjc2liYWNrX2NtZF9leGVjKHBlbmRpbmdfcmVxX3QgKnBlbmRpbmdfcmVxKQoreworCisJ c3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmIG1hcFtTR19UQUJMRVNJWkVdOworCXN0cnVjdCBj b21iYWNrX2luZm8gKmluZm8gPSBwZW5kaW5nX3JlcS0+aW5mbzsKKwkKKwlpbnQgd3JpdGUgPSAo cGVuZGluZ19yZXEtPnUuc2NzaS5kYXRhX2RpciA9PSBETUFfVE9fREVWSUNFKTsKKwl1MzIgZmxh Z3M7CisJaW50IGksIGVyciA9IDA7CisKKwlEUFJJTlRLKCIlc1xuIixfX0ZVTkNUSU9OX18pOwor CisJaWYgKCFwZW5kaW5nX3JlcS0+dS5zY3NpLnNkZXYpIHsKKwkJZ290byBmYWlsX3Jlc3BvbnNl OworCX0KKworCWlmIChwZW5kaW5nX3JlcS0+dS5zY3NpLnVzZV9zZykgeworCisJCWZvciAoaSA9 IDA7IGkgPCBwZW5kaW5nX3JlcS0+dS5zY3NpLnVzZV9zZzsgaSsrKSB7CisJCQlmbGFncyA9IEdO VE1BUF9ob3N0X21hcDsKKwkJCWlmICh3cml0ZSkKKwkJCQlmbGFncyB8PSBHTlRNQVBfcmVhZG9u bHk7CisJCQlnbnR0YWJfc2V0X21hcF9vcCgmbWFwW2ldLCB2YWRkcihwZW5kaW5nX3JlcSwgaSks IGZsYWdzLAorCQkJCQkJcGVuZGluZ19yZXEtPnUuc2NzaS5wZW5kX3NlZ1tpXS5ncmVmLAorCQkJ CQkJaW5mby0+ZG9taWQpOworCQl9CisKKwkJZXJyID0gSFlQRVJWSVNPUl9ncmFudF90YWJsZV9v cChHTlRUQUJPUF9tYXBfZ3JhbnRfcmVmLAorCQkJCQkJbWFwLCBwZW5kaW5nX3JlcS0+dS5zY3Np LnVzZV9zZyk7CisJCUJVR19PTihlcnIpOworCisJCWZvciAoaSA9IDA7IGkgPCBwZW5kaW5nX3Jl cS0+dS5zY3NpLnVzZV9zZzsgaSsrKSB7CisJCQlpZiAodW5saWtlbHkobWFwW2ldLnN0YXR1cyAh PSAwKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAic2NzaWJhY2s6IGludmFsaWQgYnVmZmVyIC0t IGNvdWxkIG5vdCByZW1hcCBpdFxuIik7CisJCQkJbWFwW2ldLmhhbmRsZSA9IFNDU0lCQUNLX0lO VkFMSURfSEFORExFOworCQkJCWVyciB8PSAxOworCQkJfQorCisJCQlwZW5kaW5nX2hhbmRsZShw ZW5kaW5nX3JlcSwgaSkgPSBtYXBbaV0uaGFuZGxlOworCisJCQlpZiAoZXJyKQorCQkJCWNvbnRp bnVlOworCisJCQlzZXRfcGh5c190b19tYWNoaW5lKF9fcGEodmFkZHIoCisJCQkJcGVuZGluZ19y ZXEsIGkpKSA+PiBQQUdFX1NISUZULAorCQkJCUZPUkVJR05fRlJBTUUobWFwW2ldLmRldl9idXNf YWRkciA+PiBQQUdFX1NISUZUKSk7CisJCX0KKworCQlpZiAoZXJyKQorCQkJZ290byBmYWlsX2Zs dXNoOworCisJCWlmIChyZXF1c2V0X21hcF9zZyhwZW5kaW5nX3JlcSwgcGVuZGluZ19yZXEtPnUu c2NzaS51c2Vfc2cpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInNjc2liYWNrOiBTRyBSZXF1ZXN0 IE1hcCBFcnJvclxuIik7CisJCQlnb3RvIGZhaWxfbWFwOworCQl9CisKKwl9IGVsc2UgaWYgKHBl bmRpbmdfcmVxLT51LnNjc2kucmVxdWVzdF9idWZmbGVuKSB7CisKKwkJZmxhZ3MgPSBHTlRNQVBf aG9zdF9tYXA7CisJCWlmICh3cml0ZSkKKwkJCWZsYWdzIHw9IEdOVE1BUF9yZWFkb25seTsKKwkJ Z250dGFiX3NldF9tYXBfb3AoJm1hcFswXSwgdmFkZHIocGVuZGluZ19yZXEsIDApLCBmbGFncywK KwkJCQkJcGVuZGluZ19yZXEtPnUuc2NzaS5wZW5kX3NlZ1swXS5ncmVmLAorCQkJCQlpbmZvLT5k b21pZCk7CisKKwkJZXJyID0gSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcChHTlRUQUJPUF9tYXBf Z3JhbnRfcmVmLCBtYXAsIDEpOworCQlCVUdfT04oZXJyKTsKKworCQlpZiAodW5saWtlbHkobWFw WzBdLnN0YXR1cyAhPSAwKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJzY3NpYmFjazogaW52YWxp ZCBidWZmZXIgc2luZ2xlIC0tIGNvdWxkIG5vdCByZW1hcCBpdFxuIik7CisJCQltYXBbMF0uaGFu ZGxlID0gU0NTSUJBQ0tfSU5WQUxJRF9IQU5ETEU7CisJCQllcnIgfD0gMTsKKwkJfQorCisJCXBl bmRpbmdfaGFuZGxlKHBlbmRpbmdfcmVxLCAwKSA9IG1hcFswXS5oYW5kbGU7CisKKwkJc2V0X3Bo eXNfdG9fbWFjaGluZShfX3BhKHZhZGRyKAorCQkJcGVuZGluZ19yZXEsIDApKSA+PiBQQUdFX1NI SUZULAorCQkJRk9SRUlHTl9GUkFNRShtYXBbMF0uZGV2X2J1c19hZGRyID4+IFBBR0VfU0hJRlQp KTsKKworCQlpZiAoZXJyKQorCQkJZ290byBmYWlsX2ZsdXNoOworCisJCWlmIChyZXF1c2V0X21h cF9zZyhwZW5kaW5nX3JlcSwgMSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAic2NzaWJhY2s6IFNH IFJlcXVlc3QgTWFwIEVycm9yXG4iKTsKKwkJCWdvdG8gZmFpbF9tYXA7CisJCX0KKwl9CisKKwlh dG9taWNfc2V0KCZwZW5kaW5nX3JlcS0+dS5zY3NpLnBlbmRjbnQsIDEpOworCXNjc2liYWNrX2dl dChpbmZvKTsKKworCWJsa19leGVjdXRlX3JxX25vd2FpdChwZW5kaW5nX3JlcS0+dS5zY3NpLnJx LT5xLCBOVUxMLAorCQkJCQkJICBwZW5kaW5nX3JlcS0+dS5zY3NpLnJxLCAxLCBzY3NpYmFja19l bmRfY21kX2ZuKTsKKworCXJldHVybiA7CisKK2ZhaWxfbWFwOgorZmFpbF9mbHVzaDoKKwlmYXN0 X2ZsdXNoX2FyZWEocGVuZGluZ19yZXEpOworZmFpbF9yZXNwb25zZToKKwltYWtlX3NlbnNlKGlu Zm8sIE5VTEwsIChESURfTk9fQ09OTkVDVCA8PCAxNiksIHBlbmRpbmdfcmVxLT51LnNjc2kucnFp ZCk7CisJZnJlZV9yZXEocGVuZGluZ19yZXEpOworCit9CisKKwordm9pZCBzY3NpYmFja19yZXNl dF9leGVjKHBlbmRpbmdfcmVxX3QgKnBlbmRpbmdfcmVxKQoreworCXN0cnVjdCBzY3NpX2Rldmlj ZSAqc2RldiA9IHBlbmRpbmdfcmVxLT51LnNjc2kuc2RldjsKKwlzdHJ1Y3QgY29tYmFja19pbmZv ICppbmZvID0gcGVuZGluZ19yZXEtPmluZm87CisJc3RydWN0IHZzY3NpaWZfYnRmX3JlcXVlc3Qg KnJpbmdfcmVzOworCWludCBlcnI7CisKKwllcnIgPSBzY3NpX3Jlc2V0X3Byb3ZpZGVyKHNkZXYs IFNDU0lfVFJZX1JFU0VUX0hPU1QpOworCWlmIChlcnIgIT0gU1VDQ0VTUykKKwkJZXJyID0gc2Nz aV9yZXNldF9wcm92aWRlcihzZGV2LCBTQ1NJX1RSWV9SRVNFVF9CVVMpOworCisJcmluZ19yZXMg PSBjb21iYWNrX3ByZV9yZXBseShpbmZvKTsKKworCXJpbmdfcmVzLT5ycWlkID0gcGVuZGluZ19y ZXEtPnUuc2NzaS5ycWlkOworCXJpbmdfcmVzLT5yc2x0ID0gZXJyOworCQorCWNvbWJhY2tfZG9f cmVwbHkoaW5mbyk7CisKK30KKworCitzdGF0aWMgaW50IF9faW5pdCBzY3NpYmFja19pbml0KHZv aWQpCit7CisJaW50IGksIG1tYXBfcGFnZXM7CisKKwlpZiAoIWlzX3J1bm5pbmdfb25feGVuKCkp CisJCXJldHVybiAtRU5PREVWOworCisJbW1hcF9wYWdlcyA9IHZzY3NpaWZfcmVxcyAqIFNHX1RB QkxFU0laRTsKKworCXBlbmRpbmdfcmVxcyAgICAgICAgICA9IGttYWxsb2Moc2l6ZW9mKHBlbmRp bmdfcmVxc1swXSkgKgorCQkJCQl2c2NzaWlmX3JlcXMsIEdGUF9LRVJORUwpOworCXBlbmRpbmdf Z3JhbnRfaGFuZGxlcyA9IGttYWxsb2Moc2l6ZW9mKHBlbmRpbmdfZ3JhbnRfaGFuZGxlc1swXSkg KgorCQkJCQltbWFwX3BhZ2VzLCBHRlBfS0VSTkVMKTsKKwlwZW5kaW5nX3BhZ2VzICAgICAgICAg PSBhbGxvY19lbXB0eV9wYWdlc19hbmRfcGFnZXZlYyhtbWFwX3BhZ2VzKTsKKworCWlmICghcGVu ZGluZ19yZXFzIHx8ICFwZW5kaW5nX2dyYW50X2hhbmRsZXMgfHwgIXBlbmRpbmdfcGFnZXMpCisJ CWdvdG8gb3V0X29mX21lbW9yeTsKKworCWZvciAoaSA9IDA7IGkgPCBtbWFwX3BhZ2VzOyBpKysp CisJCXBlbmRpbmdfZ3JhbnRfaGFuZGxlc1tpXSA9IFNDU0lCQUNLX0lOVkFMSURfSEFORExFOwor CisJc2NzaWJhY2tfaW50ZXJmYWNlX2luaXQoKTsKKworCW1lbXNldChwZW5kaW5nX3JlcXMsIDAs IHNpemVvZihwZW5kaW5nX3JlcXMpKTsKKwlJTklUX0xJU1RfSEVBRCgmcGVuZGluZ19mcmVlKTsK KworCWZvciAoaSA9IDA7IGkgPCB2c2NzaWlmX3JlcXM7IGkrKykKKwkJbGlzdF9hZGRfdGFpbCgm cGVuZGluZ19yZXFzW2ldLnUuc2NzaS5mcmVlX2xpc3QsICZwZW5kaW5nX2ZyZWUpOworCisJaWYg KHNjc2lpZl94ZW5idXNfaW5pdCgpKQorCQlnb3RvIG91dF9vZl9tZW1vcnk7CisKKwkodm9pZClz Y3NpX3RyYWNlX2luaXQoKTsKKworI2lmIDAgLypERUJVRyovCisJcHJpbnRrKEtFUk5fRVJSICIl czogZnRiX3JlcT0lbGRcbiIsIF9fRlVOQ1RJT05fXywKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCB2 c2NzaWlmX2Z0Yl9yZXF1ZXN0KSk7CisJcHJpbnRrKEtFUk5fRVJSICIlczogZnRiX3Jlcz0lbGRc biIsIF9fRlVOQ1RJT05fXywKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCB2c2NzaWlmX2Z0Yl9yZXNw b25zZSkpOworCXByaW50ayhLRVJOX0VSUiAiJXM6IGJ0Zl9yZXE9JWxkXG4iLCBfX0ZVTkNUSU9O X18sCisJICAgICAgIHNpemVvZihzdHJ1Y3QgdnNjc2lpZl9idGZfcmVxdWVzdCkpOworCXByaW50 ayhLRVJOX0VSUiAiJXM6IGJ0Zl9yZXM9JWxkXG4iLCBfX0ZVTkNUSU9OX18sCisJICAgICAgIHNp emVvZihzdHJ1Y3QgdnNjc2lpZl9idGZfcmVzcG9uc2UpKTsKKwlwcmludGsoIiVzIFNDU0lfUklO R19TSVpFX2Z0Yj0lbGRcbiIsIF9fRlVOQ1RJT05fXywKKwkJX19SSU5HX1NJWkUoKHN0cnVjdCB2 c2NzaWlmX2Z0Yl9zcmluZyAqKTAsIFBBR0VfU0laRSkpOworCXByaW50aygiJXMgU0NTSV9SSU5H X1NJWkVfYnRmPSVsZFxuIiwgX19GVU5DVElPTl9fLAorCQlfX1JJTkdfU0laRSgoc3RydWN0IHZz Y3NpaWZfYnRmX3NyaW5nICopMCwgUEFHRV9TSVpFKSk7CisKKyNlbmRpZiAvKkRFQlVHKi8KKwor CisJcmV0dXJuIDA7CisKKyBvdXRfb2ZfbWVtb3J5OgorCWtmcmVlKHBlbmRpbmdfcmVxcyk7CisJ a2ZyZWUocGVuZGluZ19ncmFudF9oYW5kbGVzKTsKKwlmcmVlX2VtcHR5X3BhZ2VzX2FuZF9wYWdl dmVjKHBlbmRpbmdfcGFnZXMsIG1tYXBfcGFnZXMpOworCXByaW50ayhLRVJOX0VSUiAic2NzaWJh Y2s6ICVzOiBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiAtRU5PTUVN OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2NzaWJhY2tfZXhpdCh2b2lkKQoreworCXNjc2lp Zl94ZW5idXNfdW5yZWdpc3RlcigpOworCXNjc2liYWNrX2ludGVyZmFjZV9leGl0KCk7CisJc2Nz aV90cmFjZV9leGl0KCk7CisJa2ZyZWUocGVuZGluZ19yZXFzKTsKKwlrZnJlZShwZW5kaW5nX2dy YW50X2hhbmRsZXMpOworCWZyZWVfZW1wdHlfcGFnZXNfYW5kX3BhZ2V2ZWMocGVuZGluZ19wYWdl cywgKHZzY3NpaWZfcmVxcyAqIFNHX1RBQkxFU0laRSkpOworfQorCittb2R1bGVfaW5pdChzY3Np YmFja19pbml0KTsKK21vZHVsZV9leGl0KHNjc2liYWNrX2V4aXQpOworCitNT0RVTEVfREVTQ1JJ UFRJT04oIlhlbiBTQ1NJIGJhY2tlbmQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBC U0QvR1BMIik7CmRpZmYgLXIgMjRlMGNiOWZlOWRmIC1yIDM3NGFhNWI3MzEwNSBkcml2ZXJzL3hl bi9zY3NpYmFjay90cmFjZWJhY2suYwotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAg MTk3MCArMDAwMAorKysgYi9kcml2ZXJzL3hlbi9zY3NpYmFjay90cmFjZWJhY2suYwlUdWUgT2N0 IDMwIDE2OjQzOjEwIDIwMDcgKzA5MDAKQEAgLTAsMCArMSwxMDkgQEAKKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgv dm1hbGxvYy5oPgorCisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorCisKKyNkZWZpbmUgTUFYX0RB VEFfU0laRQkJNDcyCQkvKiBzaG91bGQgYmUgbW9kaWZpZWQJKi8KKwkJCQkJCS8qICAgYWNjb3Jk aW5nIHRvIGRhdGEJKi8KKwkJCQkJCS8qICAgdG8gYmUgcmVjb3JkZWQJKi8KKyNkZWZpbmUgRU5U UllfTlVNCQkoMTYgKiAxMDI0KQorCitzdHJ1Y3Qgc2NzaV90cmFjZV9lbnRyeSB7CisJdW5zaWdu ZWQgbG9uZwlkaXI7CQkJLyogZGlyZWN0aW9uCQkqLworCQkJCQkJLyogMDogcGVuZGluZyhCRSkJ Ki8KKwkJCQkJCS8qIDE6IHJlcXVlc3QoRkUpCSovCisJCQkJCQkvKiAyOiByZXNwb25zZShGRSkJ Ki8KKwl1bnNpZ25lZCBsb25nCXNlcmlhbDsJCQkvKiBpbmNyZW1lbnRhbCBjb3VudGVyICAqLwor CQkJCQkJLyogICBzdGFydHMgYXQgMCAJKi8KKwlzdHJ1Y3QgdGltZXZhbAl0djsJCQkvKiB0aW1l b2ZkYXkJCSovCisJdW5zaWduZWQgaW50CXNpemU7CQkJLyogZGF0YSBzaXplCQkqLworCXVuc2ln bmVkIGNoYXIJZGF0YVtNQVhfREFUQV9TSVpFXTsJLyogZGF0YSBib2R5CQkqLworfTsKKworc3Rh dGljIHN0cnVjdCBzY3NpX3RyYWNlX2VudHJ5CSpzY3NpX3RyYWNlX2J1ZjsKK0VYUE9SVF9TWU1C T0woc2NzaV90cmFjZV9idWYpOwkJCS8qIGZvciBEVU1QCQkqLworCitzdGF0aWMgREVGSU5FX1NQ SU5MT0NLKHNjc2lfdHJhY2VfbG9jayk7CisKK3ZvaWQKK3Njc2lfdHJhY2UodW5zaWduZWQgbG9u ZyBkaXIsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQoreworCXN0YXRp YyB1bnNpZ25lZCBsb25nCWluZGV4ICA9IDA7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcJc2VyaWFs ID0gMDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCWlmIChzaXplID4gTUFYX0RBVEFfU0la RSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkYXRhIGdpdmVuIGlzIHRvbyBiaWcuXG4iCisJ CSAgICAgICAibXVzdCBiZSBzbWFsbGVyIHRoYW4gJWQgYnl0ZXMuXG4iLAorCQkgICAgICAgX19G VU5DVElPTl9fLCBNQVhfREFUQV9TSVpFKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19p cnFzYXZlKCZzY3NpX3RyYWNlX2xvY2ssIGZsYWdzKTsKKworCXNjc2lfdHJhY2VfYnVmW2luZGV4 XS5kaXIgICAgPSBkaXI7CisJZG9fZ2V0dGltZW9mZGF5KCYoc2NzaV90cmFjZV9idWZbaW5kZXhd LnR2KSk7CisJc2NzaV90cmFjZV9idWZbaW5kZXhdLnNpemUgICA9IHNpemU7CisJbWVtY3B5KHNj c2lfdHJhY2VfYnVmW2luZGV4XS5kYXRhLCBkYXRhLCBzaXplKTsKKworCS8qIFRoaXMgaW5kaWNh dGVzIHRoYXQgdGhlIHJlY29yZCBpcyBzdWNjZXNzZnVsbHkgcmVjb3JkZWQgKi8KKwlzY3NpX3Ry YWNlX2J1ZltpbmRleF0uc2VyaWFsID0gc2VyaWFsKys7CisKKwlpbmRleCA9IChpbmRleCArIDEp ICUgRU5UUllfTlVNOworCQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjc2lfdHJhY2VfbG9j aywgZmxhZ3MpOworCit9CisKK3N0YXRpYyBpbnQKK3Njc2lfdHJhY2VfcmVhZF9wcm9jKGNoYXIg KnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAorCQkgICAgIGludCBjb3VudCwgaW50ICpl b2YsIHZvaWQgKmRhdGEpCit7CisJaW50CQlsZW4gPSBzaXplb2Yoc3RydWN0IHNjc2lfdHJhY2Vf ZW50cnkpICogRU5UUllfTlVNOworICAgICAgICB1bnNpZ25lZCBsb25nCWZsYWdzOworCisgICAg ICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzY3NpX3RyYWNlX2xvY2ssIGZsYWdzKTsKKworICAgICAg ICBpZiAobGVuIDw9IG9mZiArIGNvdW50KSB7CisJCSplb2YgPSAxOworCX0KKyAgICAgICAgKnN0 YXJ0ID0gcGFnZTsKKyAgICAgICAgbGVuIC09IG9mZjsKKyAgICAgICAgaWYgKGxlbiA+IGNvdW50 KSB7CisJCWxlbiA9IGNvdW50OworCX0KKyAgICAgICAgaWYgKGxlbiA8IDApIHsKKyAgICAgICAg ICAgICAgICBsZW4gPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1lbWNw eShwYWdlLCAoKHVuc2lnbmVkIGNoYXIgKilzY3NpX3RyYWNlX2J1ZikgKyBvZmYsIGxlbik7CisJ fQorCisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjc2lfdHJhY2VfbG9jaywgZmxh Z3MpOworCisgICAgICAgIHJldHVybiBsZW47Cit9CisKK2ludCBfX2luaXQgc2NzaV90cmFjZV9p bml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50CXNjc2lfdHJhY2VfYnVmX3NpemU7CisKKwlzY3Np X3RyYWNlX2J1Zl9zaXplID0gc2l6ZW9mKHN0cnVjdCBzY3NpX3RyYWNlX2VudHJ5KSAqIEVOVFJZ X05VTTsKKwlpZiAoKHNjc2lfdHJhY2VfYnVmID0gdm1hbGxvYyhzY3NpX3RyYWNlX2J1Zl9zaXpl KSkgPT0gTlVMTCkgeworCQlyZXR1cm4gLTE7CisJfQorCW1lbXNldChzY3NpX3RyYWNlX2J1Ziwg MCwgc2NzaV90cmFjZV9idWZfc2l6ZSk7CisKKwljcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJzY3Np X3RyYWNlIiwgMCwgTlVMTCwKKwkJCSAgICAgICBzY3NpX3RyYWNlX3JlYWRfcHJvYywgTlVMTCk7 CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2V4aXQgc2NzaV90cmFjZV9leGl0KHZvaWQpCit7 CisJdmZyZWUoc2NzaV90cmFjZV9idWYpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RyYWNl IiwgTlVMTCk7Cit9CisKZGlmZiAtciAyNGUwY2I5ZmU5ZGYgLXIgMzc0YWE1YjczMTA1IGRyaXZl cnMveGVuL3Njc2liYWNrL3hlbmJ1cy5jCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDow MCAxOTcwICswMDAwCisrKyBiL2RyaXZlcnMveGVuL3Njc2liYWNrL3hlbmJ1cy5jCVR1ZSBPY3Qg MzAgMTY6NDM6MTAgMjAwNyArMDkwMApAQCAtMCwwICsxLDMwMCBAQAorLyoKKyAqIFhlbiBTQ1NJ IGJhY2tlbmQgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBGVUpJVFNVIExpbWl0 ZWQKKyAqCisgKiBCYXNlZCBvbiB0aGUgYmxrYmFjayBkcml2ZXIgY29kZS4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBvciwgd2hlbiBkaXN0cmlidXRlZAorICogc2VwYXJhdGVseSBmcm9tIHRoZSBM aW51eCBrZXJuZWwgb3IgaW5jb3Jwb3JhdGVkIGludG8gb3RoZXIKKyAqIHNvZnR3YXJlIHBhY2th Z2VzLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKKyAqIAorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEgY29weQorICogb2YgdGhpcyBzb3VyY2UgZmlsZSAodGhlICJTb2Z0d2FyZSIpLCB0byBk ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LAorICogbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBv ZiB0aGUgU29mdHdhcmUsCisgKiBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29m dHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBB VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwor ICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8 c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3Np L3Njc2lfZGV2aWNlLmg+CisKKyNpZmRlZiBDT05GSUdfWEVOX0ZDCisjaW5jbHVkZSA8c2NzaS9z Y3NpX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfZmMuaD4KKyNl bmRpZgorCisjaW5jbHVkZSAiY29tYmFjay5oIgorCitleHRlcm4gaW50IGNvbWJhY2tfc2NoZWR1 bGUodm9pZCAqKTsKKyNpZmRlZiBDT05GSUdfWEVOX0ZDCitleHRlcm4gaW50IGZjYmFja19jb25u ZWN0aW9uX3NldHVwKHN0cnVjdCBjb21iYWNrX2luZm8gKmNvbWluZm8pOworI2VuZGlmCisKK3N0 cnVjdCBiYWNrZW5kX2luZm8KK3sKKwlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2OworCXN0cnVj dCBjb21iYWNrX2luZm8gKmluZm87CisJc3RydWN0IHhlbmJ1c193YXRjaCBiYWNrZW5kX3dhdGNo OworfTsKKworCitzdGF0aWMgaW50IHNjc2liYWNrX3JlbW92ZShzdHJ1Y3QgeGVuYnVzX2Rldmlj ZSAqZGV2KQoreworCXN0cnVjdCBiYWNrZW5kX2luZm8gKmJlID0gZGV2LT5kZXYuZHJpdmVyX2Rh dGE7CisKKwlpZiAoYmUtPmJhY2tlbmRfd2F0Y2gubm9kZSkgeworCQl1bnJlZ2lzdGVyX3hlbmJ1 c193YXRjaCgmYmUtPmJhY2tlbmRfd2F0Y2gpOworCQlrZnJlZShiZS0+YmFja2VuZF93YXRjaC5u b2RlKTsKKwkJYmUtPmJhY2tlbmRfd2F0Y2gubm9kZSA9IE5VTEw7CisJfQorCisJaWYgKGJlLT5p bmZvKSB7CisJCXNjc2liYWNrX2Rpc2Nvbm5lY3QoYmUtPmluZm8pOworCQlzY3NpYmFja19mcmVl KGJlLT5pbmZvKTsKKwkJYmUtPmluZm8gPSBOVUxMOworCX0KKworCWtmcmVlKGJlKTsKKwlkZXYt PmRldi5kcml2ZXJfZGF0YSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBz Y3NpaWZfbmFtZShzdHJ1Y3QgYmFja2VuZF9pbmZvICpiZSwgY2hhciAqYnVmKQoreworCWNoYXIg KmRldnBhdGg7CisJc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldiA9IGJlLT5kZXY7CisKKwlkZXZw YXRoID0geGVuYnVzX3JlYWQoWEJUX05JTCwgZGV2LT5ub2RlbmFtZSwgImhvc3RubyIsIE5VTEwp OworCWlmIChJU19FUlIoZGV2cGF0aCkpIAorCQlyZXR1cm4gUFRSX0VSUihkZXZwYXRoKTsKKwkK KwlzbnByaW50ZihidWYsIFRBU0tfQ09NTV9MRU4sICJzY3NpaWYuJWQuJXMiLCBiZS0+aW5mby0+ ZG9taWQsIGRldnBhdGgpOworCWtmcmVlKGRldnBhdGgpOworCQorCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IHNjc2liYWNrX2Nvbm5lY3Qoc3RydWN0IGJhY2tlbmRfaW5mbyAqYmUpCit7CisJ c3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldiA9IGJlLT5kZXY7CisJdW5zaWduZWQgbG9uZyBmdGJf cmluZ19yZWYsIGJ0Zl9yaW5nX3JlZjsKKwl1bnNpZ25lZCBpbnQgZXZ0Y2huOworCWludCBlcnI7 CisJY2hhciBuYW1lW1RBU0tfQ09NTV9MRU5dOworCisJZXJyID0geGVuYnVzX2dhdGhlcihYQlRf TklMLCBkZXYtPm90aGVyZW5kLAorCQkJImZ0Yi1yaW5nLXJlZiIsICIlbHUiLCAmZnRiX3Jpbmdf cmVmLAorCQkJImJ0Zi1yaW5nLXJlZiIsICIlbHUiLCAmYnRmX3JpbmdfcmVmLAorCQkJImV2ZW50 LWNoYW5uZWwiLCAiJXUiLCAmZXZ0Y2huLCBOVUxMKTsKKwlpZiAoZXJyKSB7CisJCXhlbmJ1c19k ZXZfZmF0YWwoZGV2LCBlcnIsICJyZWFkaW5nICVzIHJpbmciLCBkZXYtPm90aGVyZW5kKTsKKwkJ cmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBzY3NpYmFja19pbml0X3NyaW5nKGJlLT5pbmZvLAor CQkJCWZ0Yl9yaW5nX3JlZiwgYnRmX3JpbmdfcmVmLCBldnRjaG4pOworCWlmIChlcnIpCisJCXJl dHVybiBlcnI7CisKKwllcnIgPSBzY3NpaWZfbmFtZShiZSwgbmFtZSk7CisJaWYgKGVycikgewor CQl4ZW5idXNfZGV2X2Vycm9yKGRldiwgZXJyLCAiZ2V0IHNjc2liYWNrIGRldiBuYW1lIik7CisJ CXJldHVybiBlcnI7CisJfQorCisJYmUtPmluZm8tPmt0aHJlYWQgPSBrdGhyZWFkX3J1bihjb21i YWNrX3NjaGVkdWxlLCBiZS0+aW5mbywgbmFtZSk7CisJaWYgKElTX0VSUihiZS0+aW5mby0+a3Ro cmVhZCkpIHsKKwkJZXJyID0gUFRSX0VSUihiZS0+aW5mby0+a3RocmVhZCk7CisJCWJlLT5pbmZv LT5rdGhyZWFkID0gTlVMTDsKKwkJeGVuYnVzX2Rldl9lcnJvcihiZS0+ZGV2LCBlcnIsICJzdGFy dCBzY3NpaWYiKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKyNpZmRlZiBDT05GSUdfWEVOX0ZDCisJ eworCQlpbnQJCXJldDsKKworCQlpZiAoKHJldCA9IGZjYmFja19jb25uZWN0aW9uX3NldHVwKGJl LT5pbmZvKSkgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJzY3NpYmFjazogJXM6IGZjYmFj a19zZXR1cCgpIGVycm9yPj4+XG4iLAorCQkJCSAgIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4g cmV0OworCQl9CisJfQorI2VuZGlmCisJCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNj c2liYWNrX2Zyb250ZW5kX2NoYW5nZWQoc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldiwKKwkJCQkJ ZW51bSB4ZW5idXNfc3RhdGUgZnJvbnRlbmRfc3RhdGUpCit7CisJc3RydWN0IGJhY2tlbmRfaW5m byAqYmUgPSBkZXYtPmRldi5kcml2ZXJfZGF0YTsKKwlpbnQgZXJyOworCisJc3dpdGNoIChmcm9u dGVuZF9zdGF0ZSkgeworCWNhc2UgWGVuYnVzU3RhdGVJbml0aWFsaXNpbmc6CisJCWJyZWFrOwor CisJY2FzZSBYZW5idXNTdGF0ZUluaXRpYWxpc2VkOgorCWNhc2UgWGVuYnVzU3RhdGVDb25uZWN0 ZWQ6CisJCWlmIChkZXYtPnN0YXRlID09IFhlbmJ1c1N0YXRlQ29ubmVjdGVkKQorCQkJYnJlYWs7 CisKKwkJZXJyID0gc2NzaWJhY2tfY29ubmVjdChiZSk7CisJCWlmIChlcnIpCisJCQlicmVhazsK KworCQllcnIgPSB4ZW5idXNfc3dpdGNoX3N0YXRlKGRldiwgWGVuYnVzU3RhdGVDb25uZWN0ZWQp OworCQlpZiAoZXJyKQorCQkJeGVuYnVzX2Rldl9mYXRhbChkZXYsIGVyciwgInN3aXRjaGluZyB0 byBDb25uZWN0ZWQgc3RhdGUiLAorCQkJCQlkZXYtPm5vZGVuYW1lKTsKKwkJYnJlYWs7CisKKwlj YXNlIFhlbmJ1c1N0YXRlQ2xvc2luZzoKKwkJc2NzaWJhY2tfZGlzY29ubmVjdChiZS0+aW5mbyk7 CisJCXhlbmJ1c19zd2l0Y2hfc3RhdGUoZGV2LCBYZW5idXNTdGF0ZUNsb3NpbmcpOworCQlicmVh azsKKworCWNhc2UgWGVuYnVzU3RhdGVDbG9zZWQ6CisJCXhlbmJ1c19zd2l0Y2hfc3RhdGUoZGV2 LCBYZW5idXNTdGF0ZUNsb3NlZCk7CisJCWlmICh4ZW5idXNfZGV2X2lzX29ubGluZShkZXYpKQor CQkJYnJlYWs7CisKKwljYXNlIFhlbmJ1c1N0YXRlVW5rbm93bjoKKwkJZGV2aWNlX3VucmVnaXN0 ZXIoJmRldi0+ZGV2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJeGVuYnVzX2Rldl9mYXRhbChk ZXYsIC1FSU5WQUwsICJzYXcgc3RhdGUgJWQgYXQgZnJvbnRlbmQiLAorCQkJCQlmcm9udGVuZF9z dGF0ZSk7CisJCWJyZWFrOworCX0KK30KKworCitzdGF0aWMgdm9pZCBzY3NpYmFja19iYWNrZW5k X2NoYW5nZWQoc3RydWN0IHhlbmJ1c193YXRjaCAqd2F0Y2gsCisJCQkJCWNvbnN0IGNoYXIgKip2 ZWMsIHVuc2lnbmVkIGludCBsZW4pCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgYmFja2VuZF9pbmZv ICpiZSA9CisJCWNvbnRhaW5lcl9vZih3YXRjaCwgc3RydWN0IGJhY2tlbmRfaW5mbywgYmFja2Vu ZF93YXRjaCk7CisJc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldiA9IGJlLT5kZXY7CisKKwlwcmlu dGsoIiVzIFNDU0lfUklOR19TSVpFX2Z0Yj0lbGRcbiIsIF9fRlVOQ1RJT05fXywKKwkJX19SSU5H X1NJWkUoKHN0cnVjdCB2c2NzaWlmX2Z0Yl9zcmluZyAqKTAsIFBBR0VfU0laRSkpOworCXByaW50 aygiJXMgU0NTSV9SSU5HX1NJWkVfYnRmPSVsZFxuIiwgX19GVU5DVElPTl9fLAorCQlfX1JJTkdf U0laRSgoc3RydWN0IHZzY3NpaWZfYnRmX3NyaW5nICopMCwgUEFHRV9TSVpFKSk7CisKKwliZS0+ aW5mby0+aG9zdCA9IHNjc2lfaG9zdF9sb29rdXAoYmUtPmluZm8tPmhvc3Rfbm8pOworCWlmIChJ U19FUlIoYmUtPmluZm8tPmhvc3QpKSB7CisJCWVyciA9IFBUUl9FUlIoYmUtPmluZm8tPmhvc3Qp OworCQl4ZW5idXNfZGV2X2ZhdGFsKGRldiwgZXJyLCAibm8gbG9va3VwIHNjc2kgaG9zdCIpOwor CQlnb3RvIGZhaWw7CisJfQorCQorCXJldHVybjsKK2ZhaWw6CisJc2NzaWJhY2tfcmVtb3ZlKGRl dik7Cit9CisKKworc3RhdGljIGludCBzY3NpYmFja19wcm9iZShzdHJ1Y3QgeGVuYnVzX2Rldmlj ZSAqZGV2LAorCQkJICAgY29uc3Qgc3RydWN0IHhlbmJ1c19kZXZpY2VfaWQgKmlkKQoreworCWlu dCBlcnI7CisJaW50IGhvc3RubzsKKwlzdHJ1Y3QgYmFja2VuZF9pbmZvICpiZSA9IGt6YWxsb2Mo c2l6ZW9mKHN0cnVjdCBiYWNrZW5kX2luZm8pLAorCQkJCQkgIEdGUF9LRVJORUwpOworCisJRFBS SU5USygiJXAgJWRcbiIsIGRldiwgZGV2LT5vdGhlcmVuZF9pZCk7CisKKwlpZiAoIWJlKSB7CisJ CXhlbmJ1c19kZXZfZmF0YWwoZGV2LCAtRU5PTUVNLAorCQkJCSAiYWxsb2NhdGluZyBiYWNrZW5k IHN0cnVjdHVyZSIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJYmUtPmRldiA9IGRldjsKKwlk ZXYtPmRldi5kcml2ZXJfZGF0YSA9IGJlOworCisJYmUtPmluZm8gPSBzY3NpaW5mb19hbGxvYyhk ZXYtPm90aGVyZW5kX2lkKTsKKwlpZiAoSVNfRVJSKGJlLT5pbmZvKSkgeworCQllcnIgPSBQVFJf RVJSKGJlLT5pbmZvKTsKKwkJYmUtPmluZm8gPSBOVUxMOworCQl4ZW5idXNfZGV2X2ZhdGFsKGRl diwgZXJyLCAiY3JlYXRpbmcgc2NzaWhvc3QgaW50ZXJmYWNlIik7CisJCWdvdG8gZmFpbDsKKwl9 CisKKwliZS0+aW5mby0+ZGV2ID0gZGV2OworCWJlLT5pbmZvLT5pcnEgPSAwOworCisJZXJyID0g eGVuYnVzX3NjYW5mKFhCVF9OSUwsIGRldi0+bm9kZW5hbWUsICJob3N0bm8iLCAiJWQiLCAmaG9z dG5vKTsKKwlpZiAoZXJyID09IC1FTk9FTlQgKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNj c2liYWNrOiBlcnJvciB4ZW5idXNfc2NhbmYgaG9zdG5vPSVkXG4iLGhvc3Rubyk7CisJCWdvdG8g ZmFpbDsKKwl9CisKKwliZS0+aW5mby0+aG9zdF9ubyA9ICh1bnNpZ25lZCBzaG9ydClob3N0bm87 CisJCisJZXJyID0geGVuYnVzX3dhdGNoX3BhdGgyKGRldiwgZGV2LT5ub2RlbmFtZSwKKwkJCQki c2NzaS1ob3N0IiwKKwkJCQkmYmUtPmJhY2tlbmRfd2F0Y2gsCisJCQkJc2NzaWJhY2tfYmFja2Vu ZF9jaGFuZ2VkKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWw7CisKKwllcnIgPSB4ZW5idXNfc3dp dGNoX3N0YXRlKGRldiwgWGVuYnVzU3RhdGVJbml0V2FpdCk7CisJaWYgKGVycikKKwkJZ290byBm YWlsOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaWJh Y2s6ICVzIGZhaWxlZFxuIixfX0ZVTkNUSU9OX18pOworCXNjc2liYWNrX3JlbW92ZShkZXYpOwor CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgc3RydWN0IHhlbmJ1c19kZXZpY2VfaWQgc2Nz aWJhY2tfaWRzW10gPSB7CisJeyAic2NzaWhvc3QiIH0sCisJeyAiIiB9Cit9OworCitzdGF0aWMg c3RydWN0IHhlbmJ1c19kcml2ZXIgc2NzaWJhY2sgPSB7CisJLm5hbWUJCQk9ICJzY3NpaG9zdCIs CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkuaWRzCQkJPSBzY3NpYmFja19pZHMsCisJLnBy b2JlCQkJPSBzY3NpYmFja19wcm9iZSwKKwkucmVtb3ZlCQkJPSBzY3NpYmFja19yZW1vdmUsCisJ Lm90aGVyZW5kX2NoYW5nZWQJPSBzY3NpYmFja19mcm9udGVuZF9jaGFuZ2VkCit9OworCitpbnQg c2NzaWlmX3hlbmJ1c19pbml0KHZvaWQpCit7CisJcmV0dXJuIHhlbmJ1c19yZWdpc3Rlcl9iYWNr ZW5kKCZzY3NpYmFjayk7Cit9CisKK3ZvaWQgc2NzaWlmX3hlbmJ1c191bnJlZ2lzdGVyKHZvaWQp Cit7CisJeGVuYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZzY3NpYmFjayk7Cit9Cg== --------_47270739000000004436_MULTIPART_MIXED_ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------_47270739000000004436_MULTIPART_MIXED_--