From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jun Kamada Subject: [PATCH 1/6] pvSCSI (SCSI pass through) driver Date: Tue, 30 Oct 2007 19:39:14 +0900 Message-ID: <20071030193911.4419.KAMA@jp.fujitsu.com> References: <20071025105803.5A32.KAMA@jp.fujitsu.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------_47270665000000004427_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 --------_47270665000000004427_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit This patch is for frontend driver. Signed-off-by: Tomonari Horikoshi Signed-off-by: Tsunehisa Doi Signed-off-by: Jun Kamada Signed-off-by: Akira Hayakawa ----- Jun Kamada --------_47270665000000004427_MULTIPART_MIXED_ Content-Type: application/octet-stream; name="linux_scsifront.patch" Content-Disposition: attachment; filename="linux_scsifront.patch" Content-Transfer-Encoding: base64 IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIHQuaG9yaWtvc2hpQGpwLmZ1aml0c3UuY29tCiMg RGF0ZSAxMTkzNzMwMDk2IC0zMjQwMAojIE5vZGUgSUQgMjRlMGNiOWZlOWRmNmY0YTZkZjIyNjgy MzU2MmJlYzMwODkwNzJlNgojIFBhcmVudCAgNzA5ZGI4MGMwM2MzZDc2MDY3NDRhNzFmNDhmNTE4 NjM1OGE1ZTY1OQpbTElOVVhdW3Njc2lmcm9udF0gYWRkIHNjc2kgZnJvbnRlbmQgZHJpdmVyCgpT aWduZWQtb2ZmLWJ5OiBUb21vbmFyaSBIb3Jpa29zaGkgPHQuaG9yaWtvc2hpQGpwLmZ1aml0c3Uu Y29tPgpTaWduZWQtb2ZmLWJ5OiBUc3VuZWhpc2EgRG9pIDxEb2kuVHN1bmVoaXNhQGpwLmZ1aml0 c3UuY29tPgpTaWduZWQtb2ZmLWJ5OiBKdW4gS2FtYWRhIDxrYW1hQGpwLmZ1aml0c3UuY29tPgpT aWduZWQtb2ZmLWJ5OiBBa2lyYSBIYXlha2F3YSA8aGF5YWthd2EuYWtpcmFAanAuZnVqaXRzdS5j b20+CgpkaWZmIC1yIDcwOWRiODBjMDNjMyAtciAyNGUwY2I5ZmU5ZGYgZHJpdmVycy94ZW4vc2Nz aWZyb250L01ha2VmaWxlCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICsw MDAwCisrKyBiL2RyaXZlcnMveGVuL3Njc2lmcm9udC9NYWtlZmlsZQlUdWUgT2N0IDMwIDE2OjQx OjM2IDIwMDcgKzA5MDAKQEAgLTAsMCArMSw4IEBACitpZmVxICgkKENPTkZJR19YRU5fRkMpLHkp CisgIEVYVFJBX0NGTEFHUyArPSAtRENPTkZJR19YRU5fRkMKKyAgb2JqLSQoQ09ORklHX1hFTl9T Q1NJX0ZST05URU5EKQk6PSB4ZW5mY3Njc2kubworICB4ZW5mY3Njc2ktb2JqcyA6PSBzY3NpZnJv bnQubyBmY2Zyb250Lm8gY29tZnJvbnQubyB0cmFjZWZyb250Lm8KK2Vsc2UKKyAgb2JqLSQoQ09O RklHX1hFTl9TQ1NJX0ZST05URU5EKQk6PSB4ZW5zY3NpLm8KKyAgeGVuc2NzaS1vYmpzIDo9IHNj c2lmcm9udC5vIGNvbWZyb250Lm8gdHJhY2Vmcm9udC5vCitlbmRpZgpkaWZmIC1yIDcwOWRiODBj MDNjMyAtciAyNGUwY2I5ZmU5ZGYgZHJpdmVycy94ZW4vc2NzaWZyb250L2NvbWZyb250LmMKLS0t IC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvZHJpdmVycy94 ZW4vc2NzaWZyb250L2NvbWZyb250LmMJVHVlIE9jdCAzMCAxNjo0MTozNiAyMDA3ICswOTAwCkBA IC0wLDAgKzEsMjY1IEBACisvKgorICogWGVuIFNDU0kgZnJvbnRlbmQgZHJpdmVyCisgKgorICog Q29weXJpZ2h0IChjKSAyMDA3LCBGVUpJVFNVIExpbWl0ZWQKKyAqCisgKiBCYXNlZCBvbiB0aGUg c2NzaWZyb250IGRyaXZlciBjb2RlIGJ5IEZVSklUQSBUb21vbm9yaQorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IG9yLCB3aGVuIGRpc3RyaWJ1dGVkCisgKiBzZXBhcmF0ZWx5IGZyb20gdGhlIExpbnV4 IGtlcm5lbCBvciBpbmNvcnBvcmF0ZWQgaW50byBvdGhlcgorICogc29mdHdhcmUgcGFja2FnZXMs IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBsaWNlbnNlOgorICogCisgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YSBjb3B5CisgKiBvZiB0aGlzIHNvdXJjZSBmaWxlICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91 dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksCisgKiBtZXJnZSwg cHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwKKyAqIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUg SVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVT UyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJ TiBUSEUgU09GVFdBUkUuCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2lu Y2x1ZGUgImNvbWZyb250LmgiCisKK2V4dGVybiBpbnQgc2NzaWZyb250X2NtZF9kb25lKHN0cnVj dCBjb21mcm9udF9pbmZvICosIHN0cnVjdCB2c2NzaWlmX2J0Zl9yZXF1ZXN0ICopOworc3RhdGlj IHZvaWQgY29tZnJvbnRfbm90aWZ5X3dvcmsoc3RydWN0IGNvbWZyb250X2luZm8gKmluZm8pOwor I2lmZGVmIENPTkZJR19YRU5fRkMKK2V4dGVybiB2b2lkIGZjZnJvbnRfY21kX2RvbmUoc3RydWN0 IGNvbWZyb250X2luZm8gKiwgc3RydWN0IHZzY3NpaWZfYnRmX3JlcXVlc3QgKik7CisjZW5kaWYK KworZXh0ZXJuIHZvaWQgc2NzaV90cmFjZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBjaGFyICos IHVuc2lnbmVkIGludCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IEdFVF9JRF9GUk9NX0ZSRUVMSVNU KHN0cnVjdCBjb21mcm9udF9pbmZvICppbmZvKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJ dWludDMyX3QgZnJlZTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5zaGFkb3dfbG9jaywg ZmxhZ3MpOworCisJZnJlZSA9IGluZm8tPnNoYWRvd19mcmVlOworCUJVR19PTihmcmVlID4gREVG QVVMVF9DQU5fUVVFVUUpOworCWluZm8tPnNoYWRvd19mcmVlID0gaW5mby0+c2hhZG93W2ZyZWVd LnJxaWQ7CisJaW5mby0+c2hhZG93W2ZyZWVdLnJxaWQgPSAweDBmZmZmZmVlOyAvKiBkZWJ1ZyAq LworCisJaW5mby0+c2hhZG93W2ZyZWVdLmNvbmQgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmaW5mby0+c2hhZG93X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBmcmVlOworfQorCit2 b2lkIEFERF9JRF9UT19GUkVFTElTVChzdHJ1Y3QgY29tZnJvbnRfaW5mbyAqaW5mbywgdWludDMy X3QgaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZp bmZvLT5zaGFkb3dfbG9jaywgZmxhZ3MpOworCisJaW5mby0+c2hhZG93W2lkXS5ycWlkICA9IGlu Zm8tPnNoYWRvd19mcmVlOworCWluZm8tPnNoYWRvd1tpZF0udS5zY3NpLnJlcV9zY3NpX2NtbmQg PSAwOworCWluZm8tPnNoYWRvd19mcmVlID0gaWQ7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZpbmZvLT5zaGFkb3dfbG9jaywgZmxhZ3MpOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogCWZvciBm cm9udGVuZCB0byBiYWNrZW5kIGNvbW11bmljYXRpb24gICAgICAgICAgICAgICAgICAgKi8KKy8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSAqLworCitpbnQgcmVhZF9mdGJfcmluZ19yZXNwX2NvbnMoc3RydWN0IGNvbWZyb250X2lu Zm8gKmluZm8pCit7CisJUklOR19JRFggaSwgZnRiX3JwOworCXN0cnVjdCB2c2NzaWlmX2Z0Yl9y ZXNwb25zZSAqcmluZ19yZXM7CisJaW50IGVycjsKKworCWZ0Yl9ycCA9IGluZm8tPmZ0Yl9yaW5n LnNyaW5nLT5yc3BfcHJvZDsKKwllcnIgPSBTQ1NJSUZfUkVRX09LQVk7CisJcm1iKCk7CisKKwlm b3IgKGkgPSBpbmZvLT5mdGJfcmluZy5yc3BfY29uczsgaSAhPSBmdGJfcnA7IGkrKykgeworCQly aW5nX3JlcyA9IFJJTkdfR0VUX1JFU1BPTlNFKCZpbmZvLT5mdGJfcmluZywgaSk7CisJCQorCQlp ZiAocmluZ19yZXMtPnN0YXR1cyA9PSBTQ1NJSUZfQlRGUklOR19CVVNZKSB7CisJCQllcnIgPSBT Q1NJSUZfQlRGUklOR19CVVNZOworCQkJY29tZnJvbnRfbm90aWZ5X3dvcmsoaW5mbyk7CisJCX0K Kwl9CisJCisJaW5mby0+ZnRiX3JpbmcucnNwX2NvbnMgPSBpOworCQorCXJldHVybiBlcnI7Cit9 CisKK3N0cnVjdCB2c2NzaWlmX2Z0Yl9yZXF1ZXN0ICogY29tZnJvbnRfcHJlX3JlcXVlc3Qoc3Ry dWN0IGNvbWZyb250X2luZm8gKmluZm8pCit7CisJc3RydWN0IHZzY3NpaWZfZnRiX2Zyb250X3Jp bmcgKnJpbmcgPSAmKGluZm8tPmZ0Yl9yaW5nKTsKKwlzdHJ1Y3QgdnNjc2lpZl9mdGJfcmVxdWVz dCAqcmluZ19yZXE7CisJdWludDMyX3QgaWQ7CisKKwlyaW5nX3JlcSA9IFJJTkdfR0VUX1JFUVVF U1QoJihpbmZvLT5mdGJfcmluZyksIHJpbmctPnJlcV9wcm9kX3B2dCk7CisKKwlpZCA9IEdFVF9J RF9GUk9NX0ZSRUVMSVNUKGluZm8pOwkvKiB1c2UgaWQgYnkgcmVzcG9uc2UgKi8KKwlyaW5nX3Jl cS0+cnFpZCA9IGlkOworCisJcmV0dXJuIHJpbmdfcmVxOworfQorCit2b2lkIGNvbWZyb250X2Rv X3JlcXVlc3Qoc3RydWN0IGNvbWZyb250X2luZm8gKmluZm8pCit7CisJc3RydWN0IHZzY3NpaWZf ZnRiX2Zyb250X3JpbmcJKnJpbmcgPSAmKGluZm8tPmZ0Yl9yaW5nKTsKKwl1bnNpZ25lZCBpbnQg aXJxID0gaW5mby0+aXJxOworCWludCBub3RpZnk7CisKKwlyaW5nLT5yZXFfcHJvZF9wdnQrKzsK KwkKKwlSSU5HX1BVU0hfUkVRVUVTVFNfQU5EX0NIRUNLX05PVElGWShyaW5nLCBub3RpZnkpOwor CisJaWYgKG5vdGlmeSkKKwkJbm90aWZ5X3JlbW90ZV92aWFfaXJxKGlycSk7CisKKwkvKioqKiog RnJvbnQgdG8gQmFjayByZXNwb25zZSBjb25zdW1lICoqKioqLworCXJlYWRfZnRiX3JpbmdfcmVz cF9jb25zKGluZm8pOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogCWZvciBiYWNrZW5kIHRvIGZyb250 ZW5kIGNvbW11bmljYXRpb24JCQkqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkIGNvbWZyb250 X25vdGlmeV93b3JrKHN0cnVjdCBjb21mcm9udF9pbmZvICppbmZvKQoreworCisJaW5mby0+d2Fp dGluZ19yZXNwID0gMTsKKwl3YWtlX3VwKCZpbmZvLT53cSk7Cit9CisKK2lycXJldHVybl90IGNv bWZyb250X2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcHRyZWdz KQoreworCWNvbWZyb250X25vdGlmeV93b3JrKChzdHJ1Y3QgY29tZnJvbnRfaW5mbyAqKWRldl9p ZCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBfX3N5bmNfY21kX2Rv bmUoc3RydWN0IGNvbWZyb250X2luZm8gKmluZm8sCisJCSAgICAgIHN0cnVjdCB2c2NzaWlmX2J0 Zl9yZXF1ZXN0ICpidGZfcmVxKQoreworCXVpbnQzMl90IGlkID0gYnRmX3JlcS0+cnFpZDsKKwkK KwlpbmZvLT5idGZfcmVxID0gKmJ0Zl9yZXE7CisKKwlpbmZvLT5zaGFkb3dbaWRdLmNvbmQrKzsK Kwl3YWtlX3VwKCYoaW5mby0+c2hhZG93W2lkXS53cSkpOworfQorCitpbnQgZG9fY29tZnJvbnRf Y21kX2RvbmUoc3RydWN0IGNvbWZyb250X2luZm8gKmluZm8pCit7CisJc3RydWN0IHZzY3NpaWZf YnRmX2JhY2tfcmluZyAqYnRmX3JpbmcgPSAmaW5mby0+YnRmX3Jpbmc7CisJc3RydWN0IHZzY3Np aWZfYnRmX3JlcXVlc3QgICAqYnRmX3JlcTsKKworCWludCBidGZfcmMsIGJ0Zl9ycDsKKwlpbnQg bW9yZV90b19kbyA9IDA7CisKKwlpZiAoaW5mby0+ZGV2LT5zdGF0ZSAhPSBYZW5idXNTdGF0ZUNv bm5lY3RlZCkKKwkJcmV0dXJuIDA7CisKKwkvKioqKiogQmFjayB0byBGcm9udCByZXF1ZXN0IGNv bnN1bWUgKioqKiovCisJRFBSSU5USygiJXNcbiIsX19GVU5DVElPTl9fKTsKKworCWJ0Zl9yYyA9 IGJ0Zl9yaW5nLT5yZXFfY29uczsKKwlidGZfcnAgPSBidGZfcmluZy0+c3JpbmctPnJlcV9wcm9k OworCisJd2hpbGUgKChidGZfcmMgIT0gYnRmX3JwKSAmJgorCQkJIVJJTkdfUkVRVUVTVF9DT05T X09WRVJGTE9XKGJ0Zl9yaW5nLCBidGZfcmMpKSB7CisKKwkJcm1iKCk7CisJCWJ0Zl9yZXEgPSBS SU5HX0dFVF9SRVFVRVNUKGJ0Zl9yaW5nLCBidGZfcmMpOworCQlidGZfcmluZy0+cmVxX2NvbnMg PSArK2J0Zl9yYzsKKworCQlpZiAoaW5mby0+c2hhZG93W2J0Zl9yZXEtPnJxaWRdLmNtbmQgPT0g Q01ORF9TQ1NJKSB7CisJCQlzY3NpX3RyYWNlKDIsICh1bnNpZ25lZCBjaGFyICopYnRmX3JlcSwK KwkJCQkgICBzaXplb2Yoc3RydWN0IHZzY3NpaWZfYnRmX3JlcXVlc3QpKTsKKwkJCSAgICAgCisJ CQlpZiAoc2NzaWZyb250X2NtZF9kb25lKGluZm8sIGJ0Zl9yZXEpKSB7CisJCQkJQlVHKCk7CisJ CQl9CisKKwkJfSBlbHNlIHsKKwkJCV9fc3luY19jbWRfZG9uZShpbmZvLCBidGZfcmVxKTsKKwkJ fQorCisJCWJ0Zl9yaW5nLT5yc3BfcHJvZF9wdnQrKzsKKwkJUklOR19QVVNIX1JFU1BPTlNFUyhi dGZfcmluZyk7CisJfQorCisJaWYgKGJ0Zl9yaW5nLT5yc3BfcHJvZF9wdnQgPT0gYnRmX3JjKSB7 CisJCVJJTkdfRklOQUxfQ0hFQ0tfRk9SX1JFUVVFU1RTKGJ0Zl9yaW5nLCBtb3JlX3RvX2RvKTsK KwkJCisJfSBlbHNlIGlmIChSSU5HX0hBU19VTkNPTlNVTUVEX1JFUVVFU1RTKGJ0Zl9yaW5nKSkg eworCQltb3JlX3RvX2RvID0gMTsKKwl9CisKKwlyZXR1cm4gbW9yZV90b19kbzsKK30KKworaW50 IGNvbWZyb250X3NjaGVkdWxlKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNvbWZyb250X2luZm8g KmluZm8gPSAoc3RydWN0IGNvbWZyb250X2luZm8gKilkYXRhOworCisJd2hpbGUgKCFrdGhyZWFk X3Nob3VsZF9zdG9wKCkpIHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKAorCQkJaW5mby0+ d3EsCisJCQlpbmZvLT53YWl0aW5nX3Jlc3AgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpKTsKKwor CQlpbmZvLT53YWl0aW5nX3Jlc3AgPSAwOworCQlzbXBfbWIoKTsKKworCQlpZiAoZG9fY29tZnJv bnRfY21kX2RvbmUoaW5mbykpCisJCQlpbmZvLT53YWl0aW5nX3Jlc3AgPSAxOworCisJCXJlYWRf ZnRiX3JpbmdfcmVzcF9jb25zKGluZm8pOworCisJfQorCisJaW5mby0+a3RocmVhZCA9IE5VTEw7 CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHZzY3NpaWZfYnRmX3JlcXVlc3QgKmNvbWZyb250 X2RvX3JlcXVlc3RfYW5kX3dhaXRfcmVzcG9uc2UoCisJCQkJCXN0cnVjdCBjb21mcm9udF9pbmZv ICppbmZvLAorCQkJCQlzdHJ1Y3QgdnNjc2lpZl9mdGJfcmVxdWVzdCAqcmluZ19yZXEpCit7CisJ c3RydWN0IHZzY3NpaWZfYnRmX3JlcXVlc3QgKnJpbmdfcmVzOworCXVpbnQzMl90IHJxaWQgPSBy aW5nX3JlcS0+cnFpZDsKKworCWluZm8tPnNoYWRvd1tycWlkXS5jbW5kID0gcmluZ19yZXEtPmNt bmQ7CisKKwlzY3NpX3RyYWNlKDEsICh1bnNpZ25lZCBjaGFyICopcmluZ19yZXEsCisJCSAgIHNp emVvZihzdHJ1Y3QgdnNjc2lpZl9mdGJfcmVxdWVzdCkpOworCisJY29tZnJvbnRfZG9fcmVxdWVz dChpbmZvKTsKKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoaW5mby0+c2hhZG93W3JxaWRdLndx LAorCQkJCSBpbmZvLT5zaGFkb3dbcnFpZF0uY29uZCk7CisJaW5mby0+c2hhZG93W3JxaWRdLmNv bmQtLTsKKworCUFERF9JRF9UT19GUkVFTElTVChpbmZvLCBycWlkKTsKKworCXJpbmdfcmVzID0g JihpbmZvLT5idGZfcmVxKTsKKworCXNjc2lfdHJhY2UoMiwgKHVuc2lnbmVkIGNoYXIgKilyaW5n X3JlcywKKwkJICAgc2l6ZW9mKHN0cnVjdCB2c2NzaWlmX2J0Zl9yZXF1ZXN0KSk7CisKKwlyZXR1 cm4gcmluZ19yZXM7Cit9CmRpZmYgLXIgNzA5ZGI4MGMwM2MzIC1yIDI0ZTBjYjlmZTlkZiBkcml2 ZXJzL3hlbi9zY3NpZnJvbnQvY29tZnJvbnQuaAotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6 MDA6MDAgMTk3MCArMDAwMAorKysgYi9kcml2ZXJzL3hlbi9zY3NpZnJvbnQvY29tZnJvbnQuaAlU dWUgT2N0IDMwIDE2OjQxOjM2IDIwMDcgKzA5MDAKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBY ZW4gU0NTSSBmcm9udGVuZCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIEZVSklU U1UgTGltaXRlZAorICoKKyAqIEJhc2VkIG9uIHRoZSBzY3NpZnJvbnQgZHJpdmVyIGNvZGUgYnkg RlVKSVRBIFRvbW9ub3JpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgb3IsIHdoZW4gZGlzdHJpYnV0 ZWQKKyAqIHNlcGFyYXRlbHkgZnJvbSB0aGUgTGludXgga2VybmVsIG9yIGluY29ycG9yYXRlZCBp bnRvIG90aGVyCisgKiBzb2Z0d2FyZSBwYWNrYWdlcywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGxpY2Vuc2U6CisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc291cmNl IGZpbGUgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAor ICogcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwKKyAqIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLAorICogYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBp bmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUg U29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu IElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisj aWZuZGVmIF9fWEVOX0RSSVZFUlNfU0NTSUZST05UX0hfXworI2RlZmluZSBfX1hFTl9EUklWRVJT X1NDU0lGUk9OVF9IX18KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51 eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgv d2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Nw aW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtk ZXYuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9k ZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9z dC5oPgorI2lmZGVmIENPTkZJR19YRU5fRkMKKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0 Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oPgorI2VuZGlmCisjaW5jbHVk ZSA8eGVuL3hlbmJ1cy5oPgorI2luY2x1ZGUgPHhlbi9nbnR0YWIuaD4KKyNpbmNsdWRlIDx4ZW4v ZXZ0Y2huLmg+CisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS94ZW4uaD4KKyNpbmNsdWRlIDx4ZW4v aW50ZXJmYWNlL2lvL3JpbmcuaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL2lvL3ZzY3NpaWYu aD4KKyNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKworCisjZGVmaW5lIEdSQU5UX0lOVkFMSURfUkVG IDAKKworc3RydWN0IGNvbWZyb250X3NoYWRvdyB7CisJdWludDMyX3QgcnFpZDsKKwl1bnNpZ25l ZCBpbnQgY21uZDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKKwlpbnQgY29uZDsKKwl1bmlvbiB7 CisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBpbnQgc2NfZGF0YV9kaXJlY3Rpb247CisJCQl1bnNp Z25lZCBpbnQgdXNlX3NnOworCQkJdW5zaWduZWQgaW50IHJlcXVlc3RfYnVmZmxlbjsKKwkJCXVu c2lnbmVkIGxvbmcgcmVxX3Njc2lfY21uZDsKKwkJCWludCBncmVmW1NHX1RBQkxFU0laRV07CisJ CX0gc2NzaTsKKyNpZmRlZiBDT05GSUdfWEVOX0ZDCisJCXN0cnVjdCB7CisJCX0gZmM7CisjZW5k aWYKKwl9IHU7Cit9OworCitzdHJ1Y3QgY29tZnJvbnRfaW5mbyB7CisJc3RydWN0IHhlbmJ1c19k ZXZpY2UgKmRldjsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OworCXNwaW5sb2NrX3QgaW9fbG9j azsKKwlzcGlubG9ja190IHNoYWRvd19sb2NrOworCXVuc2lnbmVkIGludCBldnRjaG47CisJdW5z aWduZWQgaW50IGlycTsKKwlpbnQgZnRiX3JpbmdfcmVmOworCWludCBidGZfcmluZ19yZWY7CisJ c3RydWN0IHZzY3NpaWZfZnRiX2Zyb250X3JpbmcgZnRiX3Jpbmc7CisJc3RydWN0IHZzY3NpaWZf YnRmX2JhY2tfcmluZyBidGZfcmluZzsKKwlzdHJ1Y3QgY29tZnJvbnRfc2hhZG93IHNoYWRvd1tE RUZBVUxUX0NBTl9RVUVVRV07CisJdWludDMyX3Qgc2hhZG93X2ZyZWU7CisJc3RydWN0IHZzY3Np aWZfYnRmX3JlcXVlc3QJYnRmX3JlcTsKKworCXN0cnVjdCB0YXNrX3N0cnVjdCAqa3RocmVhZDsK Kwl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKKwl1bnNpZ25lZCBpbnQgd2FpdGluZ19yZXNwOworCisJ dm9pZCAqZmNpbmZvOworfTsKKworI2RlZmluZSBEUFJJTlRLKF9mLCBfYS4uLikJCQkJXAorCXBy X2RlYnVnKCIoZmlsZT0lcywgbGluZT0lZCkgIiBfZiwJXAorCQkgX19GSUxFX18gLCBfX0xJTkVf XyAsICMjIF9hICkKKworCit2b2lkIEFERF9JRF9UT19GUkVFTElTVChzdHJ1Y3QgY29tZnJvbnRf aW5mbyAqaW5mbywgdWludDMyX3QgaWQpOworCisjaWZkZWYgQ09ORklHX1hFTl9GQworZXh0ZXJu IGludCBmY2Zyb250X2dldF9pbml0aWFsX2F0dHJpYnV0ZShzdHJ1Y3QgY29tZnJvbnRfaW5mbyAq Y29taW5mbyk7CitleHRlcm4gaW50IGZjZnJvbnRfZ2V0X2Z1bmN0aW9uX3RlbXBsYXRlKHN0cnVj dCBjb21mcm9udF9pbmZvICpjb21pbmZvKTsKK2V4dGVybiBpbnQgZmNmcm9udF9jb25uZWN0aW9u X3NldHVwKHN0cnVjdCBjb21mcm9udF9pbmZvICpjb21pbmZvKTsKK2V4dGVybiB2b2lkIGZjZnJv bnRfY29ubmVjdGlvbl91bnNldHVwKHN0cnVjdCBjb21mcm9udF9pbmZvICpjb21pbmZvKTsKKyNl bmRpZgorCisKK3N0cnVjdCB2c2NzaWlmX2Z0Yl9yZXF1ZXN0ICogY29tZnJvbnRfcHJlX3JlcXVl c3Qoc3RydWN0IGNvbWZyb250X2luZm8gKik7CitzdHJ1Y3QgdnNjc2lpZl9idGZfcmVxdWVzdCAq Y29tZnJvbnRfZG9fcmVxdWVzdF9hbmRfd2FpdF9yZXNwb25zZSgKKwkJCQkJc3RydWN0IGNvbWZy b250X2luZm8gKmluZm8sCisJCQkJCXN0cnVjdCB2c2NzaWlmX2Z0Yl9yZXF1ZXN0ICpyaW5nX3Jl cSk7Cit2b2lkIGNvbWZyb250X2RvX3JlcXVlc3Qoc3RydWN0IGNvbWZyb250X2luZm8gKik7Citp cnFyZXR1cm5fdCBjb21mcm9udF9pbnRyKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsK K2ludCBjb21mcm9udF9zY2hlZHVsZSh2b2lkICopOworCisjZW5kaWYgLyogX19YRU5fRFJJVkVS U19TQ1NJRlJPTlRfSF9fICAqLwpkaWZmIC1yIDcwOWRiODBjMDNjMyAtciAyNGUwY2I5ZmU5ZGYg ZHJpdmVycy94ZW4vc2NzaWZyb250L2ZjZnJvbnQuYwotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEg MDA6MDA6MDAgMTk3MCArMDAwMAorKysgYi9kcml2ZXJzL3hlbi9zY3NpZnJvbnQvZmNmcm9udC5j CVR1ZSBPY3QgMzAgMTY6NDE6MzYgMjAwNyArMDkwMApAQCAtMCwwICsxLDc3NyBAQAorLyoKKyAq IFhlbiBTQ1NJIEZDIGZyb250ZW5kIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNywg RlVKSVRTVSBMaW1pdGVkCisgKgorICogQmFzZWQgb24gdGhlIHNjc2lmcm9udCBkcml2ZXIgY29k ZSBieSBGVUpJVEEgVG9tb25vcmkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBvciwgd2hlbiBkaXN0 cmlidXRlZAorICogc2VwYXJhdGVseSBmcm9tIHRoZSBMaW51eCBrZXJuZWwgb3IgaW5jb3Jwb3Jh dGVkIGludG8gb3RoZXIKKyAqIHNvZnR3YXJlIHBhY2thZ2VzLCBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgbGljZW5zZToKKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBz b3VyY2UgZmlsZSAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0CisgKiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LAorICogbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCisgKiBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxs IGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICov CisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSAiY29tZnJvbnQuaCIKKyNp bmNsdWRlICJmY2Zyb250LmgiCisKKworZXh0ZXJuIHZvaWQgbm90aWZ5X3JlbW90ZV92aWFfaXJx KGludCk7CitleHRlcm4gaW50IGlycV90b19ldnRjaG5fcG9ydChpbnQpOworZXh0ZXJuIGludCBi aW5kX2xpc3RlbmluZ19wb3J0X3RvX2lycWhhbmRsZXIodW5zaWduZWQgaW50LAorCQlpcnFyZXR1 cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJdW5zaWdu ZWQgbG9uZywgY29uc3QgY2hhciAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgdW5iaW5kX2Zyb21f aXJxaGFuZGxlcih1bnNpZ25lZCBpbnQsIHZvaWQgKik7CitleHRlcm4gaW50IGdudHRhYl9ncmFu dF9mb3JlaWduX2FjY2Vzcyhkb21pZF90LCB1bnNpZ25lZCBsb25nLCBpbnQpOworZXh0ZXJuIGlu dCBnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3JlZihncmFudF9yZWZfdCwgaW50KTsKK2V4dGVy biB2b2lkIGdudHRhYl9lbmRfZm9yZWlnbl9hY2Nlc3MoZ3JhbnRfcmVmX3QsIGludCwgdW5zaWdu ZWQgbG9uZyk7CisKK2V4dGVybiBzdHJ1Y3QgdnNjc2lpZl9mdGJfcmVxdWVzdCAqY29tZnJvbnRf cHJlX3JlcXVlc3Qoc3RydWN0IGNvbWZyb250X2luZm8gKik7CitleHRlcm4gdm9pZCBjb21mcm9u dF9kb19yZXF1ZXN0KHN0cnVjdCBjb21mcm9udF9pbmZvICopOworCitleHRlcm4gc3RydWN0IHZz Y3NpaWZfYnRmX3JlcXVlc3QgKmNvbWZyb250X2RvX3JlcXVlc3RfYW5kX3dhaXRfcmVzcG9uc2Uo CisJCQkJCXN0cnVjdCBjb21mcm9udF9pbmZvICosCisJCQkJCXN0cnVjdCB2c2NzaWlmX2Z0Yl9y ZXF1ZXN0ICopOworCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCBmY19n ZXRfaG9zdF9wb3J0X2lkKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0cnVjdCBjb21m cm9udF9pbmZvICpjb21pbmZvID0gKHN0cnVjdCBjb21mcm9udF9pbmZvICopCisJCQkJCQkoc2hv c3QtPmhvc3RkYXRhKTsKKyAJc3RydWN0IHZzY3NpaWZfZnRiX3JlcXVlc3QgKnJpbmdfcmVxOwor CXN0cnVjdCB2c2NzaWlmX2J0Zl9yZXF1ZXN0ICpyaW5nX3JlczsKKworCXJpbmdfcmVxID0gY29t ZnJvbnRfcHJlX3JlcXVlc3QoY29taW5mbyk7CisJCisJcmluZ19yZXEtPmNtbmQgPSBDTU5EX0dF VF9IT1NUX1BPUlRfSUQ7CisKKwlyaW5nX3JlcyA9IGNvbWZyb250X2RvX3JlcXVlc3RfYW5kX3dh aXRfcmVzcG9uc2UoY29taW5mbywgcmluZ19yZXEpOworCisJaWYgKHJpbmdfcmVzLT5yc2x0ID09 IDApIHsKKwkJZmNfaG9zdF9wb3J0X2lkKHNob3N0KSA9IHJpbmdfcmVzLT51LmdocGkucG9ydF9p ZDsKKwl9IGVsc2UgeworCQlmY19ob3N0X3BvcnRfaWQoc2hvc3QpID0gKHUzMikweGZmZmZmZmZm OworCX0KKworfQorCitzdGF0aWMgdm9pZCBmY19nZXRfaG9zdF9wb3J0X3R5cGUoc3RydWN0IFNj c2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGNvbWZyb250X2luZm8gKmNvbWluZm8gPSAoc3Ry dWN0IGNvbWZyb250X2luZm8gKikKKwkJCQkJCShzaG9zdC0+aG9zdGRhdGEpOworCXN0cnVjdCB2 c2NzaWlmX2Z0Yl9yZXF1ZXN0ICpyaW5nX3JlcTsKKwlzdHJ1Y3QgdnNjc2lpZl9idGZfcmVxdWVz dCAqcmluZ19yZXM7CisKKwlyaW5nX3JlcSA9IGNvbWZyb250X3ByZV9yZXF1ZXN0KGNvbWluZm8p OworCisJcmluZ19yZXEtPmNtbmQgPSBDTU5EX0dFVF9IT1NUX1BPUlRfVFlQRTsKKworCXJpbmdf cmVzID0gY29tZnJvbnRfZG9fcmVxdWVzdF9hbmRfd2FpdF9yZXNwb25zZShjb21pbmZvLCByaW5n X3JlcSk7CisKKwlpZiAocmluZ19yZXMtPnJzbHQgPT0gMCkgeworCQlmY19ob3N0X3BvcnRfdHlw ZShzaG9zdCkgPSByaW5nX3Jlcy0+dS5naHB0LnBvcnRfdHlwZTsKKwl9IGVsc2UgeworCQlmY19o b3N0X3BvcnRfdHlwZShzaG9zdCkgPSAodTMyKTB4ZmZmZmZmZmY7CisJfQorCit9CisKK3N0YXRp YyB2b2lkIGZjX2dldF9ob3N0X3BvcnRfc3RhdGUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7 CisJc3RydWN0IGNvbWZyb250X2luZm8gKmNvbWluZm8gPSAoc3RydWN0IGNvbWZyb250X2luZm8g KikKKwkJCQkJCShzaG9zdC0+aG9zdGRhdGEpOworCXN0cnVjdCB2c2NzaWlmX2Z0Yl9yZXF1ZXN0 ICpyaW5nX3JlcTsKKwlzdHJ1Y3QgdnNjc2lpZl9idGZfcmVxdWVzdCAqcmluZ19yZXM7CisKKwly aW5nX3JlcSA9IGNvbWZyb250X3ByZV9yZXF1ZXN0KGNvbWluZm8pOworCisJcmluZ19yZXEtPmNt bmQgPSBDTU5EX0dFVF9IT1NUX1BPUlRfU1RBVEU7CisKKwlyaW5nX3JlcyA9IGNvbWZyb250X2Rv X3JlcXVlc3RfYW5kX3dhaXRfcmVzcG9uc2UoY29taW5mbywgcmluZ19yZXEpOworCisJaWYgKHJp bmdfcmVzLT5yc2x0ID09IDApIHsKKwkJZmNfaG9zdF9wb3J0X3N0YXRlKHNob3N0KSA9IHJpbmdf cmVzLT51LmdocHMucG9ydF9zdGF0ZTsKKwl9IGVsc2UgeworCQlmY19ob3N0X3BvcnRfc3RhdGUo c2hvc3QpID0gKHUzMikweGZmZmZmZmZmOworCX0KKworfQorCitzdGF0aWMgdm9pZCBmY19nZXRf aG9zdF9hY3RpdmVfZmM0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgY29t ZnJvbnRfaW5mbyAqY29taW5mbyA9IChzdHJ1Y3QgY29tZnJvbnRfaW5mbyAqKQorCQkJCQkJKHNo b3N0LT5ob3N0ZGF0YSk7CisJc3RydWN0IHZzY3NpaWZfZnRiX3JlcXVlc3QgKnJpbmdfcmVxOwor CXN0cnVjdCB2c2NzaWlmX2J0Zl9yZXF1ZXN0ICpyaW5nX3JlczsKKworCXJpbmdfcmVxID0gY29t ZnJvbnRfcHJlX3JlcXVlc3QoY29taW5mbyk7CisKKwlyaW5nX3JlcS0+Y21uZCA9IENNTkRfR0VU X0hPU1RfQUNUSVZFX0ZDNFM7CisKKwlyaW5nX3JlcyA9IGNvbWZyb250X2RvX3JlcXVlc3RfYW5k X3dhaXRfcmVzcG9uc2UoY29taW5mbywgcmluZ19yZXEpOworCisJaWYgKHJpbmdfcmVzLT5yc2x0 ID09IDApIHsKKwkJbWVtY3B5KGZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpLAorCQkgICAgICAg cmluZ19yZXMtPnUuZ2hhZi5hY3RpdmVfZmM0cywKKwkJICAgICAgIHNpemVvZihmY19ob3N0X2Fj dGl2ZV9mYzRzKHNob3N0KSkpOworCX0gZWxzZSB7CisJCW1lbXNldChmY19ob3N0X2FjdGl2ZV9m YzRzKHNob3N0KSwgMCwKKwkJICAgICAgIHNpemVvZihmY19ob3N0X2FjdGl2ZV9mYzRzKHNob3N0 KSkpOworCX0KKworfQorCitzdGF0aWMgdm9pZCBmY19nZXRfaG9zdF9zcGVlZChzdHJ1Y3QgU2Nz aV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgY29tZnJvbnRfaW5mbyAqY29taW5mbyA9IChzdHJ1 Y3QgY29tZnJvbnRfaW5mbyAqKQorCQkJCQkJKHNob3N0LT5ob3N0ZGF0YSk7CisJc3RydWN0IHZz Y3NpaWZfZnRiX3JlcXVlc3QgKnJpbmdfcmVxOworCXN0cnVjdCB2c2NzaWlmX2J0Zl9yZXF1ZXN0 ICpyaW5nX3JlczsKKworCXJpbmdfcmVxID0gY29tZnJvbnRfcHJlX3JlcXVlc3QoY29taW5mbyk7 CisKKwlyaW5nX3JlcS0+Y21uZCA9IENNTkRfR0VUX0hPU1RfU1BFRUQ7CisKKwlyaW5nX3JlcyA9 IGNvbWZyb250X2RvX3JlcXVlc3RfYW5kX3dhaXRfcmVzcG9uc2UoY29taW5mbywgcmluZ19yZXEp OworCisJaWYgKHJpbmdfcmVzLT5yc2x0ID09IDApIHsKKwkJZmNfaG9zdF9zcGVlZChzaG9zdCkg PSByaW5nX3Jlcy0+dS5naHNwLnNwZWVkOworCX0gZWxzZSB7CisJCWZjX2hvc3Rfc3BlZWQoc2hv c3QpID0gKHUzMikweGZmZmZmZmZmOworCX0KKworfQorCitzdGF0aWMgdm9pZCBmY19nZXRfaG9z dF9mYWJyaWNfbmFtZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgY29tZnJv bnRfaW5mbyAqY29taW5mbyA9IChzdHJ1Y3QgY29tZnJvbnRfaW5mbyAqKQorCQkJCQkJKHNob3N0 LT5ob3N0ZGF0YSk7CisJc3RydWN0IHZzY3NpaWZfZnRiX3JlcXVlc3QgKnJpbmdfcmVxOworCXN0 cnVjdCB2c2NzaWlmX2J0Zl9yZXF1ZXN0ICpyaW5nX3JlczsKKworCXJpbmdfcmVxID0gY29tZnJv bnRfcHJlX3JlcXVlc3QoY29taW5mbyk7CisKKwlyaW5nX3JlcS0+Y21uZCA9IENNTkRfR0VUX0hP U1RfRkFCUklDX05BTUU7CisKKwlyaW5nX3JlcyA9IGNvbWZyb250X2RvX3JlcXVlc3RfYW5kX3dh aXRfcmVzcG9uc2UoY29taW5mbywgcmluZ19yZXEpOworCisJaWYgKHJpbmdfcmVzLT5yc2x0ID09 IDApIHsKKwkJZmNfaG9zdF9mYWJyaWNfbmFtZShzaG9zdCkgPSByaW5nX3Jlcy0+dS5naGZuLmZh YnJpY19uYW1lOworCX0gZWxzZSB7CisJCWZjX2hvc3RfZmFicmljX25hbWUoc2hvc3QpID0gKHUz MikweGZmZmZmZmZmOworCX0KKworfQorCitzdGF0aWMgc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGlj cyAqIGZjX2dldF9zdGF0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgY29t ZnJvbnRfaW5mbyAqY29taW5mbyA9IChzdHJ1Y3QgY29tZnJvbnRfaW5mbyAqKQorCQkJCQkJKHNo b3N0LT5ob3N0ZGF0YSk7CisJc3RydWN0IGZjZnJvbnRfaW5mbyAqZmNpbmZvID0gKHN0cnVjdCBm Y2Zyb250X2luZm8gKikKKwkJCQkJCShjb21pbmZvLT5mY2luZm8pOworCXN0cnVjdCB2c2NzaWlm X2Z0Yl9yZXF1ZXN0ICpyaW5nX3JlcTsKKwlzdHJ1Y3QgdnNjc2lpZl9idGZfcmVxdWVzdCAqcmlu Z19yZXM7CisJc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcyAqcmV0OworCisJcmluZ19yZXEgPSBj b21mcm9udF9wcmVfcmVxdWVzdChjb21pbmZvKTsKKworCXJpbmdfcmVxLT5jbW5kID0gQ01ORF9H RVRfSE9TVF9TVEFUUzsKKworCXJpbmdfcmVzID0gY29tZnJvbnRfZG9fcmVxdWVzdF9hbmRfd2Fp dF9yZXNwb25zZShjb21pbmZvLCByaW5nX3JlcSk7CisKKwlpZiAocmluZ19yZXMtPnJzbHQgPT0g MCkgeworCQkvKiAiaW5mby0+aHMiIGlzIGFwcHJvcHJpYXRlIHBvc2l0aW9uID8gKi8KKwkJbWVt Y3B5KCYoZmNpbmZvLT5ocyksICYocmluZ19yZXMtPnUuZ2hzdC5zdGF0cyksCisJCSAgICAgICBz aXplb2YoZmNpbmZvLT5ocykpOworCQlyZXQgPSAmKHJpbmdfcmVzLT51Lmdoc3Quc3RhdHMpOwor CX0gZWxzZSB7CisJCXJldCA9IE5VTEw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IHZvaWQgZmNfcmVzZXRfc3RhdHMoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0 IGNvbWZyb250X2luZm8gKmNvbWluZm8gPSAoc3RydWN0IGNvbWZyb250X2luZm8gKikKKwkJCQkJ CShzaG9zdC0+aG9zdGRhdGEpOworCXN0cnVjdCB2c2NzaWlmX2Z0Yl9yZXF1ZXN0ICpyaW5nX3Jl cTsKKwlzdHJ1Y3QgdnNjc2lpZl9idGZfcmVxdWVzdCAqcmluZ19yZXM7CisKKwlyaW5nX3JlcSA9 IGNvbWZyb250X3ByZV9yZXF1ZXN0KGNvbWluZm8pOworCisJcmluZ19yZXEtPmNtbmQgPSBDTU5E X1JFU0VUX0hPU1RfU1RBVFM7CisKKwlyaW5nX3JlcyA9IGNvbWZyb250X2RvX3JlcXVlc3RfYW5k X3dhaXRfcmVzcG9uc2UoY29taW5mbywgcmluZ19yZXEpOworCit9CisKK3N0YXRpYyBpbnQgZmNf aXNzdWVfbGlwKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0cnVjdCBjb21mcm9udF9p bmZvICpjb21pbmZvID0gKHN0cnVjdCBjb21mcm9udF9pbmZvICopCisJCQkJCQkoc2hvc3QtPmhv c3RkYXRhKTsKKwlzdHJ1Y3QgdnNjc2lpZl9mdGJfcmVxdWVzdCAqcmluZ19yZXE7CisJc3RydWN0 IHZzY3NpaWZfYnRmX3JlcXVlc3QgKnJpbmdfcmVzOworCisJcmluZ19yZXEgPSBjb21mcm9udF9w cmVfcmVxdWVzdChjb21pbmZvKTsKKworCXJpbmdfcmVxLT5jbW5kID0gQ01ORF9JU1NVRV9IT1NU X0xJUDsKKworCXJpbmdfcmVzID0gY29tZnJvbnRfZG9fcmVxdWVzdF9hbmRfd2FpdF9yZXNwb25z ZShjb21pbmZvLCByaW5nX3JlcSk7CisJCisJcmV0dXJuIHJpbmdfcmVzLT5yc2x0OworfQorCitz dGF0aWMgdm9pZCBmY19nZXRfc3RhcmdldF9wb3J0X2lkKHN0cnVjdCBzY3NpX3RhcmdldCAqc3Rh cmdldCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChzdGFyZ2V0 LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgY29tZnJvbnRfaW5mbyAqY29taW5mbyAgPSAoc3RydWN0 IGNvbWZyb250X2luZm8gKikKKwkJCQkJCShzaG9zdC0+aG9zdGRhdGEpOworCXN0cnVjdCB2c2Nz aWlmX2Z0Yl9yZXF1ZXN0ICpyaW5nX3JlcTsKKwlzdHJ1Y3QgdnNjc2lpZl9idGZfcmVxdWVzdCAq cmluZ19yZXM7CisKKwlyaW5nX3JlcSA9IGNvbWZyb250X3ByZV9yZXF1ZXN0KGNvbWluZm8pOwor CisJcmluZ19yZXEtPmNtbmQgICAgICAgICAgID0gQ01ORF9HRVRfU1RBUkdFVF9QT1JUX0lEOwor CXJpbmdfcmVxLT51Lmd0cGkuY2hhbm5lbCA9IHN0YXJnZXQtPmNoYW5uZWw7CisJcmluZ19yZXEt PnUuZ3RwaS5pZCAgICAgID0gc3RhcmdldC0+aWQ7CisKKwlyaW5nX3JlcyA9IGNvbWZyb250X2Rv X3JlcXVlc3RfYW5kX3dhaXRfcmVzcG9uc2UoY29taW5mbywgcmluZ19yZXEpOworCisJaWYgKHJp bmdfcmVzLT5yc2x0ID09IDApIHsKKwkJZmNfc3RhcmdldF9wb3J0X2lkKHN0YXJnZXQpID0gcmlu Z19yZXMtPnUuZ3RwaS5wb3J0X2lkOworCX0gZWxzZSB7CisJCWZjX3N0YXJnZXRfcG9ydF9pZChz dGFyZ2V0KSA9ICh1MzIpMHhmZmZmZmZmZjsKKwl9CisKK30KKworc3RhdGljIHZvaWQgZmNfZ2V0 X3N0YXJnZXRfbm9kZV9uYW1lKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlzdHJ1 Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChzdGFyZ2V0LT5kZXYucGFyZW50KTsK KwlzdHJ1Y3QgY29tZnJvbnRfaW5mbyAqY29taW5mbyAgPSAoc3RydWN0IGNvbWZyb250X2luZm8g KikKKwkJCQkJCShzaG9zdC0+aG9zdGRhdGEpOworCXN0cnVjdCB2c2NzaWlmX2Z0Yl9yZXF1ZXN0 ICpyaW5nX3JlcTsKKwlzdHJ1Y3QgdnNjc2lpZl9idGZfcmVxdWVzdCAqcmluZ19yZXM7CisKKwly aW5nX3JlcSA9IGNvbWZyb250X3ByZV9yZXF1ZXN0KGNvbWluZm8pOworCisJcmluZ19yZXEtPmNt bmQgICAgICAgICAgID0gQ01ORF9HRVRfU1RBUkdFVF9OT0RFX05BTUU7CisJcmluZ19yZXEtPnUu Z3Rubi5jaGFubmVsID0gc3RhcmdldC0+Y2hhbm5lbDsKKwlyaW5nX3JlcS0+dS5ndG5uLmlkICAg ICAgPSBzdGFyZ2V0LT5pZDsKKworCXJpbmdfcmVzID0gY29tZnJvbnRfZG9fcmVxdWVzdF9hbmRf d2FpdF9yZXNwb25zZShjb21pbmZvLCByaW5nX3JlcSk7CisKKwlpZiAocmluZ19yZXMtPnJzbHQg PT0gMCkgeworCQlmY19zdGFyZ2V0X25vZGVfbmFtZShzdGFyZ2V0KSA9IHJpbmdfcmVzLT51Lmd0 bm4ubm9kZV9uYW1lOworCX0gZWxzZSB7CisJCWZjX3N0YXJnZXRfbm9kZV9uYW1lKHN0YXJnZXQp ID0gKHUzMikweGZmZmZmZmZmOworCX0KKworfQorCitzdGF0aWMgdm9pZCBmY19nZXRfc3Rhcmdl dF9wb3J0X25hbWUoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQoreworCXN0cnVjdCBTY3Np X0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHN0YXJnZXQtPmRldi5wYXJlbnQpOworCXN0cnVj dCBjb21mcm9udF9pbmZvICpjb21pbmZvICA9IChzdHJ1Y3QgY29tZnJvbnRfaW5mbyAqKQorCQkJ CQkJKHNob3N0LT5ob3N0ZGF0YSk7CisJc3RydWN0IHZzY3NpaWZfZnRiX3JlcXVlc3QgKnJpbmdf cmVxOworCXN0cnVjdCB2c2NzaWlmX2J0Zl9yZXF1ZXN0ICpyaW5nX3JlczsKKworCXJpbmdfcmVx ID0gY29tZnJvbnRfcHJlX3JlcXVlc3QoY29taW5mbyk7CisKKwlyaW5nX3JlcS0+Y21uZCAgICAg ICAgICAgPSBDTU5EX0dFVF9TVEFSR0VUX1BPUlRfTkFNRTsKKwlyaW5nX3JlcS0+dS5ndHBuLmNo YW5uZWwgPSBzdGFyZ2V0LT5jaGFubmVsOworCXJpbmdfcmVxLT51Lmd0cG4uaWQgICAgICA9IHN0 YXJnZXQtPmlkOworCisJcmluZ19yZXMgPSBjb21mcm9udF9kb19yZXF1ZXN0X2FuZF93YWl0X3Jl c3BvbnNlKGNvbWluZm8sIHJpbmdfcmVxKTsKKworCWlmIChyaW5nX3Jlcy0+cnNsdCA9PSAwKSB7 CisJCWZjX3N0YXJnZXRfcG9ydF9uYW1lKHN0YXJnZXQpID0gcmluZ19yZXMtPnUuZ3Rwbi5wb3J0 X25hbWU7CisJfSBlbHNlIHsKKwkJZmNfc3RhcmdldF9wb3J0X25hbWUoc3RhcmdldCkgPSAodTMy KTB4ZmZmZmZmZmY7CisJfQorCit9CisKK3N0YXRpYyB2b2lkIGZjX2dldF9ycG9ydF9sb3NzX3Rt byhzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0g cnBvcnRfdG9fc2hvc3QocnBvcnQpOworCXN0cnVjdCBjb21mcm9udF9pbmZvICpjb21pbmZvICA9 IChzdHJ1Y3QgY29tZnJvbnRfaW5mbyAqKQorCQkJCQkJKHNob3N0LT5ob3N0ZGF0YSk7CisJc3Ry dWN0IHZzY3NpaWZfZnRiX3JlcXVlc3QgKnJpbmdfcmVxOworCXN0cnVjdCB2c2NzaWlmX2J0Zl9y ZXF1ZXN0ICpyaW5nX3JlczsKKworCXJpbmdfcmVxID0gY29tZnJvbnRfcHJlX3JlcXVlc3QoY29t aW5mbyk7CisKKwlyaW5nX3JlcS0+Y21uZCAgICAgICAgICAgICA9IENNTkRfR0VUX1JQT1JUX0xP U1NfVE1POworCXJpbmdfcmVxLT51LmdwbHQubm9kZV9uYW1lID0gcnBvcnQtPm5vZGVfbmFtZTsK KwlyaW5nX3JlcS0+dS5ncGx0LnBvcnRfbmFtZSA9IHJwb3J0LT5wb3J0X25hbWU7CisJcmluZ19y ZXEtPnUuZ3BsdC5wb3J0X2lkICAgPSBycG9ydC0+cG9ydF9pZDsKKwlyaW5nX3JlcS0+dS5ncGx0 LnJvbGVzICAgICA9IHJwb3J0LT5yb2xlczsKKworCXJpbmdfcmVzID0gY29tZnJvbnRfZG9fcmVx dWVzdF9hbmRfd2FpdF9yZXNwb25zZShjb21pbmZvLCByaW5nX3JlcSk7CisKKwlpZiAocmluZ19y ZXMtPnJzbHQgPT0gMCkgeworCQlycG9ydC0+ZGV2X2xvc3NfdG1vID0gcmluZ19yZXMtPnUuZ3Bs dC50aW1lb3V0OworCX0gZWxzZSB7CisJCXJwb3J0LT5kZXZfbG9zc190bW8gPSAodTMyKTB4ZmZm ZmZmZmY7CisJfQorCit9CisKK3N0YXRpYyB2b2lkIGZjX3NldF9ycG9ydF9sb3NzX3RtbyhzdHJ1 Y3QgZmNfcnBvcnQgKnJwb3J0LCB1aW50MzJfdCB0aW1lb3V0KQoreworCXN0cnVjdCBTY3NpX0hv c3QgKnNob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOworCXN0cnVjdCBjb21mcm9udF9pbmZv ICpjb21pbmZvICA9IChzdHJ1Y3QgY29tZnJvbnRfaW5mbyAqKQorCQkJCQkJKHNob3N0LT5ob3N0 ZGF0YSk7CisJc3RydWN0IHZzY3NpaWZfZnRiX3JlcXVlc3QgKnJpbmdfcmVxOworCXN0cnVjdCB2 c2NzaWlmX2J0Zl9yZXF1ZXN0ICpyaW5nX3JlczsKKworCXJpbmdfcmVxID0gY29tZnJvbnRfcHJl X3JlcXVlc3QoY29taW5mbyk7CisKKwlyaW5nX3JlcS0+Y21uZCAgICAgICAgICAgICA9IENNTkRf U0VUX1JQT1JUX0xPU1NfVE1POworCXJpbmdfcmVxLT51LnNwbHQubm9kZV9uYW1lID0gcnBvcnQt Pm5vZGVfbmFtZTsKKwlyaW5nX3JlcS0+dS5zcGx0LnBvcnRfbmFtZSA9IHJwb3J0LT5wb3J0X25h bWU7CisJcmluZ19yZXEtPnUuc3BsdC5wb3J0X2lkICAgPSBycG9ydC0+cG9ydF9pZDsKKwlyaW5n X3JlcS0+dS5zcGx0LnJvbGVzICAgICA9IHJwb3J0LT5yb2xlczsKKwlyaW5nX3JlcS0+dS5zcGx0 LnRpbWVvdXQgICA9IHRpbWVvdXQ7CisKKwlyaW5nX3JlcyA9IGNvbWZyb250X2RvX3JlcXVlc3Rf YW5kX3dhaXRfcmVzcG9uc2UoY29taW5mbywgcmluZ19yZXEpOworCisJaWYgKHJpbmdfcmVzLT5y c2x0ID09IDApIHsKKwkJcnBvcnQtPmRldl9sb3NzX3RtbyA9IHJpbmdfcmVzLT51LnNwbHQudGlt ZW91dDsKKwl9IGVsc2UgeworCQlycG9ydC0+ZGV2X2xvc3NfdG1vID0gKHUzMikweGZmZmZmZmZm OworCX0KKworfQorCitzdHJ1Y3QgZmNfZnVuY3Rpb25fdGVtcGxhdGUgZmNfdHJhbnNwb3J0X2Z1 bmN0aW9ucyA9IHsKKwkuZ2V0X3Jwb3J0X2Rldl9sb3NzX3RtbyA9IGZjX2dldF9ycG9ydF9sb3Nz X3RtbywKKwkuc2V0X3Jwb3J0X2Rldl9sb3NzX3RtbyA9IGZjX3NldF9ycG9ydF9sb3NzX3RtbywK KwkuZ2V0X3N0YXJnZXRfbm9kZV9uYW1lICA9IGZjX2dldF9zdGFyZ2V0X25vZGVfbmFtZSwKKwku Z2V0X3N0YXJnZXRfcG9ydF9uYW1lICA9IGZjX2dldF9zdGFyZ2V0X3BvcnRfbmFtZSwKKwkuZ2V0 X3N0YXJnZXRfcG9ydF9pZCAgICA9IGZjX2dldF9zdGFyZ2V0X3BvcnRfaWQsCisJLmdldF9ob3N0 X3BvcnRfaWQgICAgICAgPSBmY19nZXRfaG9zdF9wb3J0X2lkLAorCS5nZXRfaG9zdF9wb3J0X3R5 cGUgICAgID0gZmNfZ2V0X2hvc3RfcG9ydF90eXBlLAorCS5nZXRfaG9zdF9wb3J0X3N0YXRlICAg ID0gZmNfZ2V0X2hvc3RfcG9ydF9zdGF0ZSwKKwkuZ2V0X2hvc3RfYWN0aXZlX2ZjNHMgICA9IGZj X2dldF9ob3N0X2FjdGl2ZV9mYzRzLAorCQkJCQkJLyogbHBmYyBkb2VzIG5vdCBzdXBwb3J0ICov CisJLmdldF9ob3N0X3NwZWVkICAgICAgICAgPSBmY19nZXRfaG9zdF9zcGVlZCwKKwkuZ2V0X2hv c3RfZmFicmljX25hbWUgICA9IGZjX2dldF9ob3N0X2ZhYnJpY19uYW1lLAorCS5nZXRfZmNfaG9z dF9zdGF0cyAgICAgID0gZmNfZ2V0X3N0YXRzLAorCS5yZXNldF9mY19ob3N0X3N0YXRzICAgID0g ZmNfcmVzZXRfc3RhdHMsCisJLmlzc3VlX2ZjX2hvc3RfbGlwICAgICAgPSBmY19pc3N1ZV9saXAs CisKKwkvKiByZW1vdGUgcG9ydCBmaXhlZCBhdHRyaWJ1dGVzICovCisJLnNob3dfcnBvcnRfbWF4 ZnJhbWVfc2l6ZSAgICAgPSAxLAorCS5zaG93X3Jwb3J0X3N1cHBvcnRlZF9jbGFzc2VzID0gMSwK Kwkuc2hvd19ycG9ydF9kZXZfbG9zc190bW8gICAgICA9IDEsCisKKwkvKiB0YXJnZXQgZHluYW1p YyBhdHRyaWJ1dGVzICovCisJLnNob3dfc3RhcmdldF9ub2RlX25hbWUgPSAxLAorCS5zaG93X3N0 YXJnZXRfcG9ydF9uYW1lID0gMSwKKwkuc2hvd19zdGFyZ2V0X3BvcnRfaWQgICA9IDEsCisKKwkv KiBob3N0IGZpeGVkIGF0dHJpYnV0ZXMgKi8KKwkuc2hvd19ob3N0X25vZGVfbmFtZSAgICAgICAg ICAgPSAxLAorCS5zaG93X2hvc3RfcG9ydF9uYW1lICAgICAgICAgICA9IDEsCisJLnNob3dfaG9z dF9wZXJtYW5lbnRfcG9ydF9uYW1lID0gMSwJLyogbHBmYyBkb2VzIG5vdCBzdXBwb3J0ICovCisJ LnNob3dfaG9zdF9zdXBwb3J0ZWRfY2xhc3NlcyAgID0gMSwKKwkuc2hvd19ob3N0X3N1cHBvcnRl ZF9mYzRzICAgICAgPSAxLAorCS5zaG93X2hvc3Rfc3ltYm9saWNfbmFtZSAgICAgICA9IDEsCisJ LnNob3dfaG9zdF9zdXBwb3J0ZWRfc3BlZWRzICAgID0gMSwKKwkuc2hvd19ob3N0X21heGZyYW1l X3NpemUgICAgICAgPSAxLAorCS5zaG93X2hvc3Rfc2VyaWFsX251bWJlciAgICAgICA9IDEsCS8q IGxwZmMgZG9lcyBub3Qgc3VwcG9ydCAqLworCisJLyogaG9zdCBkeW5hbWljIGF0dHJpYnV0ZSAq LworCS5zaG93X2hvc3RfcG9ydF9pZCAgICAgPSAxLAorCS5zaG93X2hvc3RfcG9ydF90eXBlICAg PSAxLAorCS5zaG93X2hvc3RfcG9ydF9zdGF0ZSAgPSAxLAorCS5zaG93X2hvc3RfYWN0aXZlX2Zj NHMgPSAxLAorCS5zaG93X2hvc3Rfc3BlZWQgICAgICAgPSAxLAorCS5zaG93X2hvc3RfZmFicmlj X25hbWUgPSAxLAorfTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgX19z ZXR1cF9ncmFudF90YWJsZShzdHJ1Y3QgZmNmcm9udF9pbmZvICppbmZvKQoreworCXZvaWQgKmFk ZHI7CisJaW50IGdudHJlZjsKKworCWlmICgoYWRkciA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBf S0VSTkVMKSkgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJICAKKwlnbnRyZWYg PSBnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3MoaW5mby0+Y29taW5mby0+ZGV2LT5vdGhlcmVu ZF9pZCwKKwkJCQkJICAgICB2aXJ0X3RvX21mbihhZGRyKSwgMCk7CisJaWYgKGdudHJlZiA8IDAp IHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiZmNmcm9udDogJXM6IGdudHRhYl9ncmFu dF9mb3JlaWduX2FjY2VzcygpIGVycm9yXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJ cmV0dXJuIGdudHJlZjsKKwl9CisKKwlpbmZvLT5hZGRyICAgPSBhZGRyOworCWluZm8tPmdudHJl ZiA9IGdudHJlZjsKKwkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX191bnNldHVwX2dy YW50X3RhYmxlKHN0cnVjdCBmY2Zyb250X2luZm8gKmluZm8pCit7CisJLyogY3VycmVudGx5LCBu b3RoaW5nIHRvIGRvICovCit9CisKK3N0YXRpYyBpbnQgX19zZXR1cF94ZW5zdG9yZShzdHJ1Y3Qg ZmNmcm9udF9pbmZvICppbmZvKQoreworCXN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYgPSBpbmZv LT5jb21pbmZvLT5kZXY7CisJc3RydWN0IHhlbmJ1c190cmFuc2FjdGlvbiB4YnQ7CisJaW50IHJl dCA9IDA7CisKK2FnYWluOgorCWlmICgocmV0ID0geGVuYnVzX3RyYW5zYWN0aW9uX3N0YXJ0KCZ4 YnQpKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgImZjZnJvbnQ6ICVzOiB4 ZW5idXNfdHJhbnNhY3Rpb25fc3RhcnQoKSBlcnJvclxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05f Xyk7CisJCWdvdG8gb3V0MDsKKwl9CisKKwlpZiAoKHJldCA9IHhlbmJ1c19wcmludGYoeGJ0LCBk ZXYtPm5vZGVuYW1lLAorCQkJImZjX2dudHJlZiIsICIlZCIsIGluZm8tPmdudHJlZikpICE9IDAp IHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmY2Zyb250OiAlczogeGVuYnVzX3ByaW50ZigpIGVycm9y XG4iLAorCQkJICAgX19GVU5DVElPTl9fKTsKKwkJZ290byBvdXQxOworCX0KKwkKKwlpZiAoKHJl dCA9IHhlbmJ1c190cmFuc2FjdGlvbl9lbmQoeGJ0LCAwKSkgIT0gMCkgeworCQlpZiAocmV0ID09 IC1FQUdBSU4pIHsKKwkJCWdvdG8gYWdhaW47CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9F UlIKKwkJCSAgICAgICAiZmNmcm9udDogJXM6IHhlbmJ1c190cmFuc2FjdGlvbl9lbmQoKSBlcnJv clxuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkJZ290byBvdXQwOworCQl9CisJfQor CisJcmV0dXJuIDA7CisKK291dDE6CisJKHZvaWQpeGVuYnVzX3RyYW5zYWN0aW9uX2VuZCh4YnQs IDApOworCQorb3V0MDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX3Vuc2V0dXBf eGVuc3RvcmUoc3RydWN0IGZjZnJvbnRfaW5mbyAqaW5mbykKK3sKKwkvKiBjdXJyZW50bHksIG5v dGhpbmcgdG8gZG8gKi8KK30KKworaW50IGZjZnJvbnRfY29ubmVjdGlvbl9zZXR1cChzdHJ1Y3Qg Y29tZnJvbnRfaW5mbyAqY29taW5mbykKK3sKKwlzdHJ1Y3QgZmNmcm9udF9pbmZvICppbmZvOwor CWludCByZXQ7CisJCisjaWYgMAkvKiBmb3IgREVCVUcgKi8KKwlwcmludGsoS0VSTl9FUlIgIiVz OiBnaWhhPSVsZFxuIiwgc2l6ZW9mKHN0cnVjdCBnaWhhKSwgX19GVU5DVElPTl9fKTsKKwlwcmlu dGsoS0VSTl9FUlIgIiVzOiBnaXRhPSVsZFxuIiwgc2l6ZW9mKHN0cnVjdCBnaXRhKSwgX19GVU5D VElPTl9fKTsKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBnaXBhPSVsZFxuIiwgc2l6ZW9mKHN0cnVj dCBnaXBhKSwgX19GVU5DVElPTl9fKTsKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBnZnRwPSVsZFxu Iiwgc2l6ZW9mKHN0cnVjdCBnZnRwKSwgX19GVU5DVElPTl9fKTsKKyNlbmRpZgorCisJeworCQlj b21pbmZvLT5mY2luZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZmNmcm9udF9pbmZvKSwKKwkJ CQkJICBHRlBfS0VSTkVMKTsKKwkJaWYgKGNvbWluZm8tPmZjaW5mbyA9PSBOVUxMKSB7CisJCQly ZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQwOworCQl9CisJCW1lbXNldChjb21pbmZvLT5mY2lu Zm8sIDAsIHNpemVvZihzdHJ1Y3QgZmNmcm9udF9pbmZvKSk7CisJCWluZm8gPSAoc3RydWN0IGZj ZnJvbnRfaW5mbyAqKShjb21pbmZvLT5mY2luZm8pOworCQlpbmZvLT5jb21pbmZvID0gY29taW5m bzsKKwl9CisKKwkvKiBwcmVwYXJlIGZvciBncmFudCB0YWJsZSAqLworCWlmICgocmV0ID0gX19z ZXR1cF9ncmFudF90YWJsZShpbmZvKSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImZjZnJv bnQ6ICVzOiBfX3NldHVwX2dyYW50X3RhYmxlKCkgZXJyb3JcbiIsCisJCSAgICAgICBfX0ZVTkNU SU9OX18pOworCQlnb3RvIG91dDE7CisJfQorCisJLyogZXhjaGFuZ2UgdmFyaW91cyBwYXJhbWV0 ZXJzIHRocm91Z2ggeGVuc3RvcmUgKi8KKwlpZiAoKHJldCA9IF9fc2V0dXBfeGVuc3RvcmUoaW5m bykpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmY2Zyb250OiAlczogIgorCQkgICAgICAg Il9fc2V0dXBfeGVuc3RvcmUoKSBlcnJvclxuIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBvdXQy OworCX0KKworCXJldHVybiAwOworCitvdXQyOgorCV9fdW5zZXR1cF9ncmFudF90YWJsZShpbmZv KTsKKworb3V0MToKKwlrZnJlZShjb21pbmZvLT5mY2luZm8pOworCQorb3V0MDoKKwlyZXR1cm4g cmV0OworfQorCit2b2lkIGZjZnJvbnRfY29ubmVjdGlvbl91bnNldHVwKHN0cnVjdCBjb21mcm9u dF9pbmZvICpjb21pbmZvKQoreworCXN0cnVjdCBmY2Zyb250X2luZm8gKmluZm8gPSAoc3RydWN0 IGZjZnJvbnRfaW5mbyAqKShjb21pbmZvLT5mY2luZm8pOworCisJX191bnNldHVwX3hlbnN0b3Jl KGluZm8pOworCV9fdW5zZXR1cF9ncmFudF90YWJsZShpbmZvKTsKKworCWtmcmVlKGNvbWluZm8t PmZjaW5mbyk7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IF9fZ2V0 X2hvc3RfYXR0cmliKHN0cnVjdCBjb21mcm9udF9pbmZvICpjb21pbmZvKQoreworCXN0cnVjdCBm Y2Zyb250X2luZm8gKmZjaW5mbyA9IChzdHJ1Y3QgZmNmcm9udF9pbmZvICopKGNvbWluZm8tPmZj aW5mbyk7CisJc3RydWN0IHZzY3NpaWZfZnRiX3JlcXVlc3QgKnJpbmdfcmVxOworCXN0cnVjdCB2 c2NzaWlmX2J0Zl9yZXF1ZXN0ICpyaW5nX3JlczsKKwlzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqaG9z dF9hdHRycyA9CisJCQkoc3RydWN0IGZjX2hvc3RfYXR0cnMgKikoY29taW5mby0+aG9zdC0+c2hv c3RfZGF0YSk7CisJc3RydWN0IGdpaGEgKmdpaGEgPSAoc3RydWN0IGdpaGEgKikoZmNpbmZvLT5h ZGRyKTsKKworCXJpbmdfcmVxID0gY29tZnJvbnRfcHJlX3JlcXVlc3QoY29taW5mbyk7CisKKwly aW5nX3JlcS0+Y21uZCA9IENNTkRfR0VUX0lOSVRJQUxfU0hPU1RfQVRUUklCOworCisJcmluZ19y ZXMgPSBjb21mcm9udF9kb19yZXF1ZXN0X2FuZF93YWl0X3Jlc3BvbnNlKGNvbWluZm8sIHJpbmdf cmVxKTsKKworCWlmIChyaW5nX3Jlcy0+cnNsdCAhPSAwKSB7CisJCXJldHVybiAwOworCX0KKwkK KwltZW1jcHkoaG9zdF9hdHRycy0+YWN0aXZlX2ZjNHMsIGdpaGEtPmFjdGl2ZV9mYzRzLAorCSAg ICAgICBzaXplb2YoaG9zdF9hdHRycy0+YWN0aXZlX2ZjNHMpKTsKKwlob3N0X2F0dHJzLT5mYWJy aWNfbmFtZSAgICAgICAgID0gZ2loYS0+ZmFicmljX25hbWU7CisJaG9zdF9hdHRycy0+bWF4ZnJh bWVfc2l6ZSAgICAgICA9IGdpaGEtPm1heGZyYW1lX3NpemU7CisJaG9zdF9hdHRycy0+bm9kZV9u YW1lICAgICAgICAgICA9IGdpaGEtPm5vZGVfbmFtZTsKKwlob3N0X2F0dHJzLT5wZXJtYW5lbnRf cG9ydF9uYW1lID0gZ2loYS0+cGVybWFuZW50X3BvcnRfbmFtZTsKKwlob3N0X2F0dHJzLT5wb3J0 X2lkICAgICAgICAgICAgID0gZ2loYS0+cG9ydF9pZDsKKwlob3N0X2F0dHJzLT5wb3J0X25hbWUg ICAgICAgICAgID0gZ2loYS0+cG9ydF9uYW1lOworCWhvc3RfYXR0cnMtPnBvcnRfc3RhdGUgICAg ICAgICAgPSBnaWhhLT5wb3J0X3N0YXRlOworCWhvc3RfYXR0cnMtPnBvcnRfdHlwZSAgICAgICAg ICAgPSBnaWhhLT5wb3J0X3R5cGU7CisJbWVtY3B5KGhvc3RfYXR0cnMtPnNlcmlhbF9udW1iZXIs IGdpaGEtPnNlcmlhbF9udW1iZXIsCisJICAgICAgIHNpemVvZihob3N0X2F0dHJzLT5zZXJpYWxf bnVtYmVyKSk7CisJaG9zdF9hdHRycy0+c3BlZWQgICAgICAgICAgICAgICA9IGdpaGEtPnNwZWVk OworCS8qICJmY2luZm8tPmhzIiBpcyBhcHByb3ByaWF0ZSBwb3NpdGlvbiA/ICovCisJbWVtY3B5 KCYoZmNpbmZvLT5ocyksICYoZ2loYS0+c3RhdHMpLCBzaXplb2YoZmNpbmZvLT5ocykpOworCWhv c3RfYXR0cnMtPnN1cHBvcnRlZF9jbGFzc2VzICAgPSBnaWhhLT5zdXBwb3J0ZWRfY2xhc3NlczsK KwltZW1jcHkoaG9zdF9hdHRycy0+c3VwcG9ydGVkX2ZjNHMsIGdpaGEtPnN1cHBvcnRlZF9mYzRz LAorCSAgICAgICBzaXplb2YoaG9zdF9hdHRycy0+c3VwcG9ydGVkX2ZjNHMpKTsKKwlob3N0X2F0 dHJzLT5zdXBwb3J0ZWRfc3BlZWRzICAgID0gZ2loYS0+c3VwcG9ydGVkX3NwZWVkczsKKwltZW1j cHkoaG9zdF9hdHRycy0+c3ltYm9saWNfbmFtZSwgZ2loYS0+c3ltYm9saWNfbmFtZSwKKwkgICAg ICAgc2l6ZW9mKGhvc3RfYXR0cnMtPnN5bWJvbGljX25hbWUpKTsKKwlob3N0X2F0dHJzLT50Z3Rp ZF9iaW5kX3R5cGUgICAgID0gZ2loYS0+dGd0aWRfYmluZF90eXBlOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgX19nZXRfdGFyZ2V0X2F0dHJpYihzdHJ1Y3QgY29tZnJvbnRfaW5mbyAq Y29taW5mbykKK3sKKwlzdHJ1Y3QgZmNmcm9udF9pbmZvICpmY2luZm8gPSAoc3RydWN0IGZjZnJv bnRfaW5mbyAqKShjb21pbmZvLT5mY2luZm8pOworCXN0cnVjdCB2c2NzaWlmX2Z0Yl9yZXF1ZXN0 ICpyaW5nX3JlcTsKKwlzdHJ1Y3QgdnNjc2lpZl9idGZfcmVxdWVzdCAqcmluZ19yZXM7CisJc3Ry dWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0OworCXN0cnVjdCBmY19zdGFyZ2V0X2F0dHJzICpzdGFy Z2V0X2F0dHJzOworCXN0cnVjdCBnaXRhICpnaXRhID0gKHN0cnVjdCBnaXRhICopKGZjaW5mby0+ YWRkcik7CisJdW5zaWduZWQgaW50IGk7CisKKwlyaW5nX3JlcSA9IGNvbWZyb250X3ByZV9yZXF1 ZXN0KGNvbWluZm8pOworCisJcmluZ19yZXEtPmNtbmQgPSBDTU5EX0dFVF9JTklUSUFMX1NUQVJH RVRfQVRUUklCOworCisJcmluZ19yZXMgPSBjb21mcm9udF9kb19yZXF1ZXN0X2FuZF93YWl0X3Jl c3BvbnNlKGNvbWluZm8sIHJpbmdfcmVxKTsKKworCWlmIChyaW5nX3Jlcy0+cnNsdCAhPSAwKSB7 CisJCXJldHVybiAwOworCX0KKwkKKwlmb3IgKGkgPSAwOyBpIDwgZ2l0YS0+bnVtOyBpKyspIHsK KwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGFyZ2V0LCAmKGNvbWluZm8tPmhvc3QtPl9fdGFyZ2V0 cyksCisJCQkJICAgIHNpYmxpbmdzKSB7CisJCQlzdGFyZ2V0X2F0dHJzID0gKHN0cnVjdCBmY19z dGFyZ2V0X2F0dHJzICopCisJCQkJCSgmKHN0YXJnZXQtPnN0YXJnZXRfZGF0YSkpOworCQkJaWYg KChzdGFyZ2V0LT5jaGFubmVsID09IGdpdGEtPmVbaV0uY2hhbm5lbCkgJiYKKwkJCSAgICAoc3Rh cmdldC0+aWQgICAgICA9PSBnaXRhLT5lW2ldLmlkKSkgeworCQkJCXN0YXJnZXRfYXR0cnMtPm5v ZGVfbmFtZSA9CisJCQkJCWdpdGEtPmVbaV0ubm9kZV9uYW1lOworCQkJCXN0YXJnZXRfYXR0cnMt PnBvcnRfaWQgICA9CisJCQkJCWdpdGEtPmVbaV0ucG9ydF9pZDsKKwkJCQlzdGFyZ2V0X2F0dHJz LT5wb3J0X25hbWUgPQorCQkJCQlnaXRhLT5lW2ldLnBvcnRfbmFtZTsKKwkJCQlicmVhazsKKwkJ CX0gZWxzZSB7CisJCQkvKglwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgImZjZnJvbnQ6ICVz OiBTQ1NJIHRhcmdldCBub3QgYWRkZWRcbiIsCisJCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7Ki8K KwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZ2V0X3BvcnRf YXR0cmliKHN0cnVjdCBjb21mcm9udF9pbmZvICpjb21pbmZvKQoreworCXN0cnVjdCBmY2Zyb250 X2luZm8gKmZjaW5mbyA9IChzdHJ1Y3QgZmNmcm9udF9pbmZvICopKGNvbWluZm8tPmZjaW5mbyk7 CisJc3RydWN0IHZzY3NpaWZfZnRiX3JlcXVlc3QgKnJpbmdfcmVxOworCXN0cnVjdCB2c2NzaWlm X2J0Zl9yZXF1ZXN0ICpyaW5nX3JlczsKKwlpbnQgY2hhbm5lbDsKKwlzdHJ1Y3QgZmNfcnBvcnRf aWRlbnRpZmllcnMgaWRzOworCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7CisJc3RydWN0IGdpcGEg KmdpcGEgPSAoc3RydWN0IGdpcGEgKikoZmNpbmZvLT5hZGRyKTsKKwl1bnNpZ25lZCBpbnQgaTsK KwlpbnQgcmV0ID0gMDsKKworCXJpbmdfcmVxID0gY29tZnJvbnRfcHJlX3JlcXVlc3QoY29taW5m byk7CisKKwlyaW5nX3JlcS0+Y21uZCA9IENNTkRfR0VUX0lOSVRJQUxfUlBPUlRfQVRUUklCOwor CisJcmluZ19yZXMgPSBjb21mcm9udF9kb19yZXF1ZXN0X2FuZF93YWl0X3Jlc3BvbnNlKGNvbWlu Zm8sIHJpbmdfcmVxKTsKKworCWlmIChyaW5nX3Jlcy0+cnNsdCAhPSAwKSB7CisJCXJldHVybiBy ZXQ7CisJfQorCQorCWZvciAoaSA9IDA7IGkgPCBnaXBhLT5udW07IGkrKykgeworCQljaGFubmVs ICAgICAgID0gZ2lwYS0+ZVtpXS5jaGFubmVsOworCQlpZHMubm9kZV9uYW1lID0gZ2lwYS0+ZVtp XS5ub2RlX25hbWU7CisJCWlkcy5wb3J0X2lkICAgPSBnaXBhLT5lW2ldLnBvcnRfaWQ7CisJCWlk cy5wb3J0X25hbWUgPSBnaXBhLT5lW2ldLnBvcnRfbmFtZTsKKwkJaWRzLnJvbGVzICAgICA9IGdp cGEtPmVbaV0ucm9sZXM7CisKKwkJcnBvcnQgPSBmY19yZW1vdGVfcG9ydF9hZGQoY29taW5mby0+ aG9zdCwgY2hhbm5lbCwgJmlkcyk7CisJCWlmIChycG9ydCA9PSBOVUxMKSB7CisJCQlyZXQgPSAt RU5PTUVNOworCQkJYnJlYWs7CisJCX0KKworCQlycG9ydC0+ZGV2X2xvc3NfdG1vICAgICAgPSBn aXBhLT5lW2ldLmRldl9sb3NzX3RtbzsKKwkJcnBvcnQtPm1heGZyYW1lX3NpemUgICAgID0gZ2lw YS0+ZVtpXS5tYXhmcmFtZV9zaXplOworCQlycG9ydC0+cG9ydF9zdGF0ZSAgICAgICAgPSBnaXBh LT5lW2ldLnBvcnRfc3RhdGU7CisJCXJwb3J0LT5zY3NpX3RhcmdldF9pZCAgICA9IGdpcGEtPmVb aV0uc2NzaV90YXJnZXRfaWQ7CisJCXJwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlcyA9IGdpcGEtPmVb aV0uc3VwcG9ydGVkX2NsYXNzZXM7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IGZjZnJv bnRfZ2V0X2luaXRpYWxfYXR0cmlidXRlKHN0cnVjdCBjb21mcm9udF9pbmZvICpjb21pbmZvKQor eworCWludCByZXQgPSAwOworCisJLyogZ2V0IFNDU0kgaG9zdCBhdHRyaWJ1dGVzICovCisJKHZv aWQpX19nZXRfaG9zdF9hdHRyaWIoY29taW5mbyk7CisJCisJLyogZ2V0IFNDU0kgdGFyZ2V0IGF0 dHJpYnV0ZXMgKi8KKwkodm9pZClfX2dldF90YXJnZXRfYXR0cmliKGNvbWluZm8pOworCisJLyog Z2V0IHJlbW90ZSBwb3J0IGF0dGlidXRlcyAqLworCXJldCA9IF9fZ2V0X3BvcnRfYXR0cmliKGNv bWluZm8pOworCisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBDT1JSRUNUX0ZUKHMsIGYsIHYs IGQpCQlcCisJCWlmICgoKHMpLT5mKSA9PSAodikpIHsJXAorCQkJKGQpLT5mID0gKHYpOwlcCisJ CX0KKworaW50IGZjZnJvbnRfZ2V0X2Z1bmN0aW9uX3RlbXBsYXRlKHN0cnVjdCBjb21mcm9udF9p bmZvICpjb21pbmZvKQoreworCXN0cnVjdCBmY2Zyb250X2luZm8gKmZjaW5mbyA9IChzdHJ1Y3Qg ZmNmcm9udF9pbmZvICopKGNvbWluZm8tPmZjaW5mbyk7CisJc3RydWN0IHZzY3NpaWZfZnRiX3Jl cXVlc3QgKnJpbmdfcmVxOworCXN0cnVjdCB2c2NzaWlmX2J0Zl9yZXF1ZXN0ICpyaW5nX3JlczsK KwlzdHJ1Y3QgZ2Z0cCAqZ2Z0cCA9IChzdHJ1Y3QgZ2Z0cCAqKShmY2luZm8tPmFkZHIpOworCXN0 cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZV9zaGFyZWQgKmZ0ID0gJihnZnRwLT5mdCk7CisJc3Ry dWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlICpwdmZjZnQgPSAmZmNfdHJhbnNwb3J0X2Z1bmN0aW9u czsKKworCXJpbmdfcmVxID0gY29tZnJvbnRfcHJlX3JlcXVlc3QoY29taW5mbyk7CisKKwlyaW5n X3JlcS0+Y21uZCA9IENNTkRfR0VUX0ZVTkNUSU9OX1RFTVBMQVRFOworCisJcmluZ19yZXMgPSBj b21mcm9udF9kb19yZXF1ZXN0X2FuZF93YWl0X3Jlc3BvbnNlKGNvbWluZm8sIHJpbmdfcmVxKTsK KworCWlmIChyaW5nX3Jlcy0+cnNsdCA9PSAwKSB7CisKKwkJQ09SUkVDVF9GVChmdCwgZ2V0X3Jw b3J0X2Rldl9sb3NzX3RtbywgICAgICAgIDAsIHB2ZmNmdCk7CisJCUNPUlJFQ1RfRlQoZnQsIHNl dF9ycG9ydF9kZXZfbG9zc190bW8sICAgICAgICAwLCBwdmZjZnQpOworCQlDT1JSRUNUX0ZUKGZ0 LCBnZXRfc3RhcmdldF9ub2RlX25hbWUsICAgICAgICAgMCwgcHZmY2Z0KTsKKwkJQ09SUkVDVF9G VChmdCwgZ2V0X3N0YXJnZXRfcG9ydF9uYW1lLCAgICAgICAgIDAsIHB2ZmNmdCk7CisJCUNPUlJF Q1RfRlQoZnQsIGdldF9zdGFyZ2V0X3BvcnRfaWQsICAgICAgICAgICAwLCBwdmZjZnQpOworCQlD T1JSRUNUX0ZUKGZ0LCBnZXRfaG9zdF9wb3J0X2lkLCAgICAgICAgICAgICAgMCwgcHZmY2Z0KTsK KwkJQ09SUkVDVF9GVChmdCwgZ2V0X2hvc3RfcG9ydF90eXBlLCAgICAgICAgICAgIDAsIHB2ZmNm dCk7CisJCUNPUlJFQ1RfRlQoZnQsIGdldF9ob3N0X3BvcnRfc3RhdGUsICAgICAgICAgICAwLCBw dmZjZnQpOworCQlDT1JSRUNUX0ZUKGZ0LCBnZXRfaG9zdF9hY3RpdmVfZmM0cywgICAgICAgICAg MCwgcHZmY2Z0KTsKKwkJQ09SUkVDVF9GVChmdCwgZ2V0X2hvc3Rfc3BlZWQsICAgICAgICAgICAg ICAgIDAsIHB2ZmNmdCk7CisJCUNPUlJFQ1RfRlQoZnQsIGdldF9ob3N0X2ZhYnJpY19uYW1lLCAg ICAgICAgICAwLCBwdmZjZnQpOworCQlDT1JSRUNUX0ZUKGZ0LCBnZXRfZmNfaG9zdF9zdGF0cywg ICAgICAgICAgICAgMCwgcHZmY2Z0KTsKKwkJQ09SUkVDVF9GVChmdCwgcmVzZXRfZmNfaG9zdF9z dGF0cywgICAgICAgICAgIDAsIHB2ZmNmdCk7CisJCUNPUlJFQ1RfRlQoZnQsIGlzc3VlX2ZjX2hv c3RfbGlwLCAgICAgICAgICAgICAwLCBwdmZjZnQpOworCisJCXB2ZmNmdC0+ZGRfZmNycG9ydF9z aXplID0gZnQtPmRkX2ZjcnBvcnRfc2l6ZTsKKworCQlDT1JSRUNUX0ZUKGZ0LCBzaG93X3Jwb3J0 X21heGZyYW1lX3NpemUsICAgICAgMCwgICAgcHZmY2Z0KTsKKwkJQ09SUkVDVF9GVChmdCwgc2hv d19ycG9ydF9zdXBwb3J0ZWRfY2xhc3NlcywgIDAsICAgIHB2ZmNmdCk7CisJCUNPUlJFQ1RfRlQo ZnQsIHNob3dfcnBvcnRfZGV2X2xvc3NfdG1vLCAgICAgICAwLCAgICBwdmZjZnQpOworCQlDT1JS RUNUX0ZUKGZ0LCBzaG93X3N0YXJnZXRfbm9kZV9uYW1lLCAgICAgICAgMCwgICAgcHZmY2Z0KTsK KwkJQ09SUkVDVF9GVChmdCwgc2hvd19zdGFyZ2V0X3BvcnRfbmFtZSwgICAgICAgIDAsICAgIHB2 ZmNmdCk7CisJCUNPUlJFQ1RfRlQoZnQsIHNob3dfc3RhcmdldF9wb3J0X2lkLCAgICAgICAgICAw LCAgICBwdmZjZnQpOworCQlDT1JSRUNUX0ZUKGZ0LCBzaG93X2hvc3Rfbm9kZV9uYW1lLCAgICAg ICAgICAgMCwgICAgcHZmY2Z0KTsKKwkJQ09SUkVDVF9GVChmdCwgc2hvd19ob3N0X3BvcnRfbmFt ZSwgICAgICAgICAgIDAsICAgIHB2ZmNmdCk7CisJCUNPUlJFQ1RfRlQoZnQsIHNob3dfaG9zdF9w ZXJtYW5lbnRfcG9ydF9uYW1lLCAwLCAgICBwdmZjZnQpOworCQlDT1JSRUNUX0ZUKGZ0LCBzaG93 X2hvc3Rfc3VwcG9ydGVkX2NsYXNzZXMsICAgMCwgICAgcHZmY2Z0KTsKKwkJQ09SUkVDVF9GVChm dCwgc2hvd19ob3N0X3N1cHBvcnRlZF9mYzRzLCAgICAgIDAsICAgIHB2ZmNmdCk7CisJCUNPUlJF Q1RfRlQoZnQsIHNob3dfaG9zdF9zeW1ib2xpY19uYW1lLCAgICAgICAwLCAgICBwdmZjZnQpOwor CQlDT1JSRUNUX0ZUKGZ0LCBzaG93X2hvc3Rfc3VwcG9ydGVkX3NwZWVkcywgICAgMCwgICAgcHZm Y2Z0KTsKKwkJQ09SUkVDVF9GVChmdCwgc2hvd19ob3N0X21heGZyYW1lX3NpemUsICAgICAgIDAs ICAgIHB2ZmNmdCk7CisJCUNPUlJFQ1RfRlQoZnQsIHNob3dfaG9zdF9zZXJpYWxfbnVtYmVyLCAg ICAgICAwLCAgICBwdmZjZnQpOworCQlDT1JSRUNUX0ZUKGZ0LCBzaG93X2hvc3RfcG9ydF9pZCwg ICAgICAgICAgICAgMCwgICAgcHZmY2Z0KTsKKwkJQ09SUkVDVF9GVChmdCwgc2hvd19ob3N0X3Bv cnRfdHlwZSwgICAgICAgICAgIDAsICAgIHB2ZmNmdCk7CisJCUNPUlJFQ1RfRlQoZnQsIHNob3df aG9zdF9wb3J0X3N0YXRlLCAgICAgICAgICAwLCAgICBwdmZjZnQpOworCQlDT1JSRUNUX0ZUKGZ0 LCBzaG93X2hvc3RfYWN0aXZlX2ZjNHMsICAgICAgICAgMCwgICAgcHZmY2Z0KTsKKwkJQ09SUkVD VF9GVChmdCwgc2hvd19ob3N0X3NwZWVkLCAgICAgICAgICAgICAgIDAsICAgIHB2ZmNmdCk7CisJ CUNPUlJFQ1RfRlQoZnQsIHNob3dfaG9zdF9mYWJyaWNfbmFtZSwgICAgICAgICAwLCAgICBwdmZj ZnQpOworCX0KKworCXJldHVybiAwOworfQorCitNT0RVTEVfREVTQ1JJUFRJT04oIlhlbiBQYXJh LVZpcnR1YWwgU0NTSSBGaWJyZSBDaGFubmVsIEZyb250ZW5kIERyaXZlciIpOworTU9EVUxFX0xJ Q0VOU0UoIkdQTCIpOwpkaWZmIC1yIDcwOWRiODBjMDNjMyAtciAyNGUwY2I5ZmU5ZGYgZHJpdmVy cy94ZW4vc2NzaWZyb250L2ZjZnJvbnQuaAotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6 MDAgMTk3MCArMDAwMAorKysgYi9kcml2ZXJzL3hlbi9zY3NpZnJvbnQvZmNmcm9udC5oCVR1ZSBP Y3QgMzAgMTY6NDE6MzYgMjAwNyArMDkwMApAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIFhlbiBT Q1NJIGZyb250ZW5kIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNywgRlVKSVRTVSBM aW1pdGVkCisgKgorICogQmFzZWQgb24gdGhlIHNjc2lmcm9udCBkcml2ZXIgY29kZSBieSBGVUpJ VEEgVG9tb25vcmkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBvciwgd2hlbiBkaXN0cmlidXRlZAor ICogc2VwYXJhdGVseSBmcm9tIHRoZSBMaW51eCBrZXJuZWwgb3IgaW5jb3Jwb3JhdGVkIGludG8g b3RoZXIKKyAqIHNvZnR3YXJlIHBhY2thZ2VzLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgbGlj ZW5zZToKKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb3VyY2UgZmls ZSAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LAorICogbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCisgKiBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1 ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0 d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4g Tk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJ QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwor ICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKworI2lm bmRlZiBfX1hFTl9EUklWRVJTX0ZDRlJPTlRfSF9fCisjZGVmaW5lIF9fWEVOX0RSSVZFUlNfRkNG Uk9OVF9IX18KKworI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDxz Y3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmg+CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlEZWZpbml0aW9u IG9mIEdyYW50IFRhYmxlIFN0cnVjdHVyZXMKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmlu ZSBTQ1NJX0ZDX01BWF9TVEFSR0VUCTMyCS8qIGxpbWl0ZWQgYnkgUEFHRV9TSVpFICovCisjZGVm aW5lIFNDU0lfRkNfTUFYX1JQT1JUCTMyCS8qIGxpbWl0ZWQgYnkgUEFHRV9TSVpFICovCisKK3N0 cnVjdCBnaWhhIHsKKwl1OAlhY3RpdmVfZmM0c1tGQ19GQzRfTElTVF9TSVpFXTsKKwl1NjQJZmFi cmljX25hbWU7CisJdTY0CW5vZGVfbmFtZTsKKwl1NjQJcGVybWFuZW50X3BvcnRfbmFtZTsKKwl1 MzIgICAgIG1heGZyYW1lX3NpemU7CisJdTMyCXBvcnRfaWQ7CisJdTY0CXBvcnRfbmFtZTsKKwll bnVtIGZjX3BvcnRfc3RhdGUJcG9ydF9zdGF0ZTsKKwllbnVtIGZjX3BvcnRfdHlwZQlwb3J0X3R5 cGU7CisJY2hhcglzZXJpYWxfbnVtYmVyW0ZDX1NFUklBTF9OVU1CRVJfU0laRV07CisJc3RydWN0 IGZjX2hvc3Rfc3RhdGlzdGljcwlzdGF0czsKKwl1MzIgICAgIHNwZWVkOworCXUzMglzdXBwb3J0 ZWRfY2xhc3NlczsKKwl1OAlzdXBwb3J0ZWRfZmM0c1tGQ19GQzRfTElTVF9TSVpFXTsKKwljaGFy CXN5bWJvbGljX25hbWVbRkNfU1lNQk9MSUNfTkFNRV9TSVpFXTsKKwl1MzIgICAgIHN1cHBvcnRl ZF9zcGVlZHM7CisJZW51bSBmY190Z3RpZF9iaW5kaW5nX3R5cGUJdGd0aWRfYmluZF90eXBlOwor fTsKKworc3RydWN0IGdpdGEgeworCXUzMgludW07CisJdTMyCXBhZGRpbmcxOworCXN0cnVjdCB7 CisJCXU2NAlub2RlX25hbWU7CisJCXU2NCAgICAgcG9ydF9uYW1lOworCQl1MzIJcG9ydF9pZDsK KwkJdTMyCWNoYW5uZWw7CisJCXUzMglpZDsKKwkJdTMyCXBhZGRpbmcyOworCX0gZVtTQ1NJX0ZD X01BWF9TVEFSR0VUXTsKK307CisKK3N0cnVjdCBnaXBhIHsKKwl1MzIJbnVtOworCXUzMglwYWRk aW5nMTsKKwlzdHJ1Y3QgeworCQl1MzIJZGV2X2xvc3NfdG1vOworCQl1MzIJbWF4ZnJhbWVfc2l6 ZTsKKwkJdTY0CW5vZGVfbmFtZTsKKwkJdTY0CXBvcnRfbmFtZTsKKwkJdTMyICAgICBwb3J0X2lk OworCQllbnVtIGZjX3BvcnRfc3RhdGUJcG9ydF9zdGF0ZTsKKwkJdTMyCXJvbGVzOworCQl1MzIJ c2NzaV90YXJnZXRfaWQ7CisJCXUzMglzdXBwb3J0ZWRfY2xhc3NlczsKKwkJdTMyCWNoYW5uZWw7 CisJfSBlW1NDU0lfRkNfTUFYX1JQT1JUXTsKK307CisKK3N0cnVjdCBmY19mdW5jdGlvbl90ZW1w bGF0ZV9zaGFyZWQgeworCXU2NAlnZXRfcnBvcnRfZGV2X2xvc3NfdG1vOjE7CisJdTY0CXNldF9y cG9ydF9kZXZfbG9zc190bW86MTsKKwl1NjQJZ2V0X3N0YXJnZXRfbm9kZV9uYW1lOjE7CisJdTY0 CWdldF9zdGFyZ2V0X3BvcnRfbmFtZToxOworCXU2NCAJZ2V0X3N0YXJnZXRfcG9ydF9pZDoxOwor CXU2NCAJZ2V0X2hvc3RfcG9ydF9pZDoxOworCXU2NAlnZXRfaG9zdF9wb3J0X3R5cGU6MTsKKwl1 NjQJZ2V0X2hvc3RfcG9ydF9zdGF0ZToxOworCXU2NAlnZXRfaG9zdF9hY3RpdmVfZmM0czoxOwor CXU2NAlnZXRfaG9zdF9zcGVlZDoxOworCXU2NAlnZXRfaG9zdF9mYWJyaWNfbmFtZToxOworCXU2 NAlnZXRfZmNfaG9zdF9zdGF0czoxOworCXU2NAlyZXNldF9mY19ob3N0X3N0YXRzOjE7CisJdTY0 CWlzc3VlX2ZjX2hvc3RfbGlwOjE7CisJdTY0CXBhZGRpbmcxOjUwOworCisJdTY0CXNob3dfcnBv cnRfbWF4ZnJhbWVfc2l6ZToxOworCXU2NAlzaG93X3Jwb3J0X3N1cHBvcnRlZF9jbGFzc2VzOjE7 CisJdTY0CXNob3dfcnBvcnRfZGV2X2xvc3NfdG1vOjE7CisJdTY0CXNob3dfc3RhcmdldF9ub2Rl X25hbWU6MTsKKwl1NjQJc2hvd19zdGFyZ2V0X3BvcnRfbmFtZToxOworCXU2NAlzaG93X3N0YXJn ZXRfcG9ydF9pZDoxOworCXU2NAlzaG93X2hvc3Rfbm9kZV9uYW1lOjE7CisJdTY0CXNob3dfaG9z dF9wb3J0X25hbWU6MTsKKwl1NjQJc2hvd19ob3N0X3Blcm1hbmVudF9wb3J0X25hbWU6MTsKKwl1 NjQJc2hvd19ob3N0X3N1cHBvcnRlZF9jbGFzc2VzOjE7CisJdTY0CXNob3dfaG9zdF9zdXBwb3J0 ZWRfZmM0czoxOworCXU2NAlzaG93X2hvc3Rfc3ltYm9saWNfbmFtZToxOworCXU2NAlzaG93X2hv c3Rfc3VwcG9ydGVkX3NwZWVkczoxOworCXU2NAlzaG93X2hvc3RfbWF4ZnJhbWVfc2l6ZToxOwor CXU2NAlzaG93X2hvc3Rfc2VyaWFsX251bWJlcjoxOworCXU2NAlzaG93X2hvc3RfcG9ydF9pZDox OworCXU2NAlzaG93X2hvc3RfcG9ydF90eXBlOjE7CisJdTY0CXNob3dfaG9zdF9wb3J0X3N0YXRl OjE7CisJdTY0CXNob3dfaG9zdF9hY3RpdmVfZmM0czoxOworCXU2NAlzaG93X2hvc3Rfc3BlZWQ6 MTsKKwl1NjQJc2hvd19ob3N0X2ZhYnJpY19uYW1lOjE7CisJdTY0CXBhZGRpbmcyOjQzOworCisJ dTMyCWRkX2ZjcnBvcnRfc2l6ZTsKKwl1MzIJcGFkZGluZzM7Cit9OworCitzdHJ1Y3QgZ2Z0cCB7 CisJc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlX3NoYXJlZAlmdDsKK307CisKKworLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorCURlZmluaXRpb24gb2YgSW50ZXJuYWwgSW5mb3JtYXRpb24gU3RydWN0dXJl cworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdHJ1Y3QgZmNmcm9udF9pbmZvIHsKKwlzdHJ1Y3Qg Y29tZnJvbnRfaW5mbwkqY29taW5mbzsKKworCWludAlnbnRyZWY7CisJdm9pZAkqYWRkcjsKKwor CQkJCS8qIE9uIGJhY2tlbmQsICJocyIgaXMgc3RvcmVkIGluICoqKl9oYmEgKi8KKwlzdHJ1Y3Qg ZmNfaG9zdF9zdGF0aXN0aWNzCWhzOworfTsKKworc3RydWN0IGZjYmFja19pbmZvIHsKKwlzdHJ1 Y3QgY29tYmFja19pbmZvCSpjb21pbmZvOworCisJaW50CWdudHJlZjsKKwlzdHJ1Y3Qgdm1fc3Ry dWN0CSpnbnRfYXJlYTsKKworCXN0cnVjdCB2c2NzaWlmX2Z0Yl9yZXF1ZXN0CWZ0Yl9yZXE7Cit9 OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlEZWZpbml0aW9uIG9mIEZyb250L0JhY2sgY29tbW9u IGZ1bmN0aW9ucworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdHJ1Y3QgZmNfaW50ZXJuYWxfaGVh ZCB7CisJc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlIHQ7CisJc3RydWN0IGZjX2Z1bmN0 aW9uX3RlbXBsYXRlICpmOworfTsKKyAgCisjZW5kaWYgLypfX1hFTl9EUklWRVJTX0ZDRlJPTlRf SF9fKi8KZGlmZiAtciA3MDlkYjgwYzAzYzMgLXIgMjRlMGNiOWZlOWRmIGRyaXZlcnMveGVuL3Nj c2lmcm9udC9zY3NpZnJvbnQuYwotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3 MCArMDAwMAorKysgYi9kcml2ZXJzL3hlbi9zY3NpZnJvbnQvc2NzaWZyb250LmMJVHVlIE9jdCAz MCAxNjo0MTozNiAyMDA3ICswOTAwCkBAIC0wLDAgKzEsNzM5IEBACisvKgorICogWGVuIFNDU0kg ZnJvbnRlbmQgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBGVUpJVFNVIExpbWl0 ZWQKKyAqCisgKiBCYXNlZCBvbiB0aGUgc2NzaWZyb250IGRyaXZlciBjb2RlIGJ5IEZVSklUQSBU b21vbm9yaQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IG9yLCB3aGVuIGRpc3RyaWJ1dGVkCisgKiBz ZXBhcmF0ZWx5IGZyb20gdGhlIExpbnV4IGtlcm5lbCBvciBpbmNvcnBvcmF0ZWQgaW50byBvdGhl cgorICogc29mdHdhcmUgcGFja2FnZXMsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBsaWNlbnNl OgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvdXJjZSBmaWxlICh0 aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqIHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksCisgKiBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwg YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKKyAqIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQg aW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJl LgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBF VkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyAKKworI2luY2x1 ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlICJjb21mcm9udC5oIgorCisKKyNkZWZpbmUg REVGQVVMVF9DTURfUEVSX0xVTgkxMAorI2RlZmluZSBERUZBVUxUX1RBU0tfQ09NTV9MRU4JMTYK KworZXh0ZXJuIGludCBzY3NpX3RyYWNlX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBzY3NpX3Ry YWNlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgaW50KTsKKworc3Rh dGljIGludCByZXFfcGVyX2x1biA9IERFRkFVTFRfQ01EX1BFUl9MVU47Cittb2R1bGVfcGFyYW1f bmFtZWQoY21kc19sdW4sIHJlcV9wZXJfbHVuLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhy ZXFzLCAiTnVtYmVyIG9mIGx1biByZXF1ZXN0cyB0byBhbGxvY2F0ZSIpOworCisjaWZkZWYgQ09O RklHX1hFTl9GQworZXh0ZXJuIHN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSBmY190cmFuc3Bv cnRfZnVuY3Rpb25zOworc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqIGZj X3RyYW5zcG9ydF90ZW1wbGF0ZSA9IE5VTEw7CisjZW5kaWYKK2V4dGVybiBpbnQgcmVhZF9mdGJf cmluZ19yZXNwX2NvbnMoc3RydWN0IGNvbWZyb250X2luZm8gKmluZm8pOworCitzdGF0aWMgdm9p ZCBzY3NpZnJvbnRfZnJlZShzdHJ1Y3QgY29tZnJvbnRfaW5mbyAqaW5mbykKK3sKKworI2lmIExJ TlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMTQpCisJaWYgKGluZm8tPmhv c3QtPnNob3N0X3N0YXRlICE9IFNIT1NUX0RFTCkgeworI2Vsc2UKKwlpZiAoIXRlc3RfYml0KFNI T1NUX0RFTCwgJmluZm8tPmhvc3QtPnNob3N0X3N0YXRlKSkgeworI2VuZGlmCisKKyNpZmRlZiBD T05GSUdfWEVOX0ZDCisJCWZjX3JlbW92ZV9ob3N0KGluZm8tPmhvc3QpOworI2VuZGlmCisJCXNj c2lfcmVtb3ZlX2hvc3QoaW5mby0+aG9zdCk7CisJCXNjc2lfaG9zdF9wdXQoaW5mby0+aG9zdCk7 CisJfQorCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCWlmIChpbmZvLT5mdGJfcmluZ19y ZWYgIT0gR1JBTlRfSU5WQUxJRF9SRUYpIHsKKwkJZ250dGFiX2VuZF9mb3JlaWduX2FjY2Vzcyhp bmZvLT5mdGJfcmluZ19yZWYsIDAsCisJCQkJCSh1bnNpZ25lZCBsb25nKWluZm8tPmZ0Yl9yaW5n LnNyaW5nKTsKKwkJaW5mby0+ZnRiX3JpbmdfcmVmID0gR1JBTlRfSU5WQUxJRF9SRUY7CisJCWlu Zm8tPmZ0Yl9yaW5nLnNyaW5nID0gTlVMTDsKKwl9CisKKwlpZiAoaW5mby0+YnRmX3JpbmdfcmVm ICE9IEdSQU5UX0lOVkFMSURfUkVGKSB7CisJCWdudHRhYl9lbmRfZm9yZWlnbl9hY2Nlc3MoaW5m by0+YnRmX3JpbmdfcmVmLCAwLAorCQkJCQkodW5zaWduZWQgbG9uZylpbmZvLT5idGZfcmluZy5z cmluZyk7CisJCWluZm8tPmJ0Zl9yaW5nX3JlZiA9IEdSQU5UX0lOVkFMSURfUkVGOworCQlpbmZv LT5idGZfcmluZy5zcmluZyA9IE5VTEw7CisJfQorCisJaWYgKGluZm8tPmlycSkKKwkJdW5iaW5k X2Zyb21faXJxaGFuZGxlcihpbmZvLT5pcnEsIGluZm8pOworCWluZm8tPmlycSA9IDA7Cit9CisK Kworc3RhdGljIGludCBtYXBfZGF0YV9mb3JfcmVxdWVzdChzdHJ1Y3QgY29tZnJvbnRfaW5mbyAq aW5mbywKKwkJc3RydWN0IHNjc2lfY21uZCAqc2MsIHN0cnVjdCB2c2NzaWlmX2Z0Yl9yZXF1ZXN0 ICpmdGJfcmVxLCB1aW50MzJfdCBpZCkKK3sKKwlncmFudF9yZWZfdCBncmVmX2hlYWQ7CisJc3Ry dWN0IHBhZ2UgKnBhZ2U7CisJaW50IGVyciwgaSwgcmVmLCByZWZfY250ID0gMDsKKwlpbnQgd3Jp dGUgPSAoc2MtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpOworCWludCBucl9w YWdlcywgb2ZmLCBsZW4sIGJ5dGVzOworCXVuc2lnbmVkIGxvbmcgYnVmZmVyX3BmbjsKKworCWlm IChzYy0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX05PTkUpCisJCXJldHVybiAwOworCisJZXJy ID0gZ250dGFiX2FsbG9jX2dyYW50X3JlZmVyZW5jZXMoU0dfVEFCTEVTSVpFLCAmZ3JlZl9oZWFk KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAic2NzaWZyb250OiBnbnR0YWJfYWxs b2NfZ3JhbnRfcmVmZXJlbmNlcygpIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQor CisJaWYgKHNjLT51c2Vfc2cpIHsKKwkJLyogcXVvdGVkIHNjc2lfbGliLmMvc2NzaV9yZXFfbWFw X3NnIC4gKi8KKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3Qg KilzYy0+cmVxdWVzdF9idWZmZXI7CisJCXVuc2lnbmVkIGludCBkYXRhX2xlbiA9IDA7CisJCW5y X3BhZ2VzID0gKHNjLT5yZXF1ZXN0X2J1ZmZsZW4gKyBzZ1swXS5vZmZzZXQgKyBQQUdFX1NJWkUg LSAxKSA+PiBQQUdFX1NISUZUOworCisJCWlmIChucl9wYWdlcyA+IFNHX1RBQkxFU0laRSkgewor CQkJcmVmX2NudCA9ICgtRU5PTUVNKTsKKwkJCWdvdG8gYmlnX3RvX3NnOworCQl9CisKKwkJZm9y IChpID0gMDsgaSA8IHNjLT51c2Vfc2c7IGkrKykgeworCQkJcGFnZSA9IHNnW2ldLnBhZ2U7CisJ CQlvZmYgPSBzZ1tpXS5vZmZzZXQ7CisJCQlsZW4gPSBzZ1tpXS5sZW5ndGg7CisJCQlkYXRhX2xl biArPSBsZW47CisKKwkJCWJ1ZmZlcl9wZm4gPSBwYWdlX3RvX3BoeXMocGFnZSkgPj4gUEFHRV9T SElGVDsKKworCQkJd2hpbGUgKGxlbiA+IDApIHsKKwkJCQlieXRlcyA9IG1pbl90KHVuc2lnbmVk IGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmYpOworCQkJCQorCQkJCXJlZiA9IGdudHRhYl9jbGFp bV9ncmFudF9yZWZlcmVuY2UoJmdyZWZfaGVhZCk7CisJCQkJQlVHX09OKHJlZiA9PSAtRU5PU1BD KTsgIC8qRklYTUUqLworCisJCQkJZ250dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNzX3JlZihyZWYs IGluZm8tPmRldi0+b3RoZXJlbmRfaWQsCisJCQkJCWJ1ZmZlcl9wZm4sIHdyaXRlKTsKKworCQkJ CWluZm8tPnNoYWRvd1tpZF0udS5zY3NpLmdyZWZbcmVmX2NudF0gPSByZWY7CisJCQkJZnRiX3Jl cS0+dS5zY3NpLnNlZ1tyZWZfY250XS5ncmVmICAgICA9IHJlZjsKKwkJCQlmdGJfcmVxLT51LnNj c2kuc2VnW3JlZl9jbnRdLm9mZnNldCAgID0gb2ZmOworCQkJCWZ0Yl9yZXEtPnUuc2NzaS5zZWdb cmVmX2NudF0ubGVuZ3RoICAgPSBieXRlczsKKworCQkJCWJ1ZmZlcl9wZm4rKzsKKwkJCQlsZW4g LT0gYnl0ZXM7CisJCQkJb2ZmID0gMDsKKwkJCQlyZWZfY250Kys7CisJCQl9CisJCX0KKwl9IGVs c2UgaWYgKHNjLT5yZXF1ZXN0X2J1ZmZsZW4pIHsKKwkJdW5zaWduZWQgbG9uZyBlbmQgICA9ICgo dW5zaWduZWQgbG9uZylzYy0+cmVxdWVzdF9idWZmZXIKKwkJCQkJKyBzYy0+cmVxdWVzdF9idWZm bGVuICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKKwkJdW5zaWduZWQgbG9uZyBzdGFy dCA9ICh1bnNpZ25lZCBsb25nKXNjLT5yZXF1ZXN0X2J1ZmZlciA+PiBQQUdFX1NISUZUOworCisJ CXBhZ2UgPSB2aXJ0X3RvX3BhZ2Uoc2MtPnJlcXVlc3RfYnVmZmVyKTsKKwkJbnJfcGFnZXMgPSBl bmQgLSBzdGFydDsKKwkJbGVuID0gc2MtPnJlcXVlc3RfYnVmZmxlbjsKKworCQlpZiAobnJfcGFn ZXMgPiBTR19UQUJMRVNJWkUpIHsKKwkJCXJlZl9jbnQgPSAoLUVOT01FTSk7CisJCQlnb3RvIGJp Z190b19zZzsKKwkJfQorCisJCWJ1ZmZlcl9wZm4gPSBwYWdlX3RvX3BoeXMocGFnZSkgPj4gUEFH RV9TSElGVDsKKworCQlvZmYgPSBvZmZzZXRfaW5fcGFnZSgodW5zaWduZWQgbG9uZylzYy0+cmVx dWVzdF9idWZmZXIpOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgeworCQkJYnl0 ZXMgPSBQQUdFX1NJWkUgLSBvZmY7CisKKwkJCWlmIChieXRlcyA+IGxlbikKKwkJCQlieXRlcyA9 IGxlbjsKKworCQkJcmVmID0gZ250dGFiX2NsYWltX2dyYW50X3JlZmVyZW5jZSgmZ3JlZl9oZWFk KTsKKwkJCUJVR19PTihyZWYgPT0gLUVOT1NQQyk7ICAvKkZJWE1FKi8KKworCQkJZ250dGFiX2dy YW50X2ZvcmVpZ25fYWNjZXNzX3JlZihyZWYsIGluZm8tPmRldi0+b3RoZXJlbmRfaWQsCisJCQkJ YnVmZmVyX3Bmbiwgd3JpdGUpOworCisJCQlpbmZvLT5zaGFkb3dbaWRdLnUuc2NzaS5ncmVmW2ld ID0gcmVmOworCQkJZnRiX3JlcS0+dS5zY3NpLnNlZ1tpXS5ncmVmICAgICA9IHJlZjsKKwkJCWZ0 Yl9yZXEtPnUuc2NzaS5zZWdbaV0ub2Zmc2V0ICAgPSBvZmY7CisJCQlmdGJfcmVxLT51LnNjc2ku c2VnW2ldLmxlbmd0aCAgID0gYnl0ZXM7CisJCQkKKy8qCQkJcGFnZSA9IHBmbl90b19wYWdlKCsr YnVmZmVyX21mbik7Ki8KKwkJCWJ1ZmZlcl9wZm4rKzsKKwkJCWxlbiAtPSBieXRlczsKKwkJCW9m ZiA9IDA7CisJCQlyZWZfY250Kys7CisJCX0KKwl9CisKK2JpZ190b19zZzoKKworCWdudHRhYl9m cmVlX2dyYW50X3JlZmVyZW5jZXMoZ3JlZl9oZWFkKTsKKworCXJldHVybiByZWZfY250OworfQor CitzdGF0aWMgaW50IHNjc2lmcm9udF9xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc2Ms CisJCQkJCXZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQoreworCXN0cnVjdCBTY3Np X0hvc3QgKmhvc3QgPSBzYy0+ZGV2aWNlLT5ob3N0OworCXN0cnVjdCBjb21mcm9udF9pbmZvICpp bmZvID0gKHN0cnVjdCBjb21mcm9udF9pbmZvICopIGhvc3QtPmhvc3RkYXRhOworCXN0cnVjdCB2 c2NzaWlmX2Z0Yl9yZXF1ZXN0ICpmdGJfcmVxOworCWludCByZWZfY250OworCisJaWYgKGluZm8t PmRldi0+c3RhdGUgIT0gWGVuYnVzU3RhdGVDb25uZWN0ZWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJS ICJzY3NpZnJvbnQ6IFhlbmJ1c1N0YXRlIG5vdCBjb25uZWN0ZWQgJXUhXG4iLAorCQkJCWluZm8t PmRldi0+c3RhdGUpOworCQlzYy0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CisJCWRv bmUoc2MpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoUklOR19GVUxMKCZpbmZvLT5mdGJfcmlu ZykpIHsKKwkJLypwcmludGsoS0VSTl9JTkZPICJzY3NpZnJvbnQ6IEZUQiBSaW5nIEZ1bGwgYnVz eVxuIik7Ki8KKwkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisJfQorCisJaWYgKHJl YWRfZnRiX3JpbmdfcmVzcF9jb25zKGluZm8pKSB7CisJCS8qcHJpbnRrKCJzY3NpZnJvbnQ6IEJU RiBSaW5nIEZ1bGwgYnVzeVxuIik7Ki8KKwkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7 CisJfQorCQorCXNjLT5zY3NpX2RvbmUgPSBkb25lOworCXNjLT5yZXN1bHQgICAgPSAwOworCisJ ZnRiX3JlcSAgICAgICAgICAgICAgICAgPSBjb21mcm9udF9wcmVfcmVxdWVzdChpbmZvKTsKKwlm dGJfcmVxLT5jbW5kICAgICAgICAgICA9IENNTkRfU0NTSTsKKworCWZ0Yl9yZXEtPnUuc2NzaS5p ZCAgICAgID0gc2MtPmRldmljZS0+aWQ7CisJZnRiX3JlcS0+dS5zY3NpLmx1biAgICAgPSBzYy0+ ZGV2aWNlLT5sdW47CisJZnRiX3JlcS0+dS5zY3NpLmNoYW5uZWwgPSBzYy0+ZGV2aWNlLT5jaGFu bmVsOworCWZ0Yl9yZXEtPnUuc2NzaS5jbWRfbGVuID0gc2MtPmNtZF9sZW47CisKKwlCVUdfT04o c2MtPmNtZF9sZW4gPiBWU0NTSV9NQVhfQ09NTUFORF9TSVpFKTsKKwlCVUdfT04oc2MgPT0gTlVM TCk7CisKKwlpZiAoIHNjLT5jbWRfbGVuICkKKwkJbWVtY3B5KGZ0Yl9yZXEtPnUuc2NzaS5jbW5k LCBzYy0+Y21uZCwgc2MtPmNtZF9sZW4pOworCWVsc2UKKwkJbWVtc2V0KGZ0Yl9yZXEtPnUuc2Nz aS5jbW5kLCAwLCBWU0NTSV9NQVhfQ09NTUFORF9TSVpFKTsKKworCWZ0Yl9yZXEtPnUuc2NzaS5z Y19kYXRhX2RpcmVjdGlvbiAgID0gc2MtPnNjX2RhdGFfZGlyZWN0aW9uOworCWZ0Yl9yZXEtPnUu c2NzaS5yZXF1ZXN0X2J1ZmZsZW4gICAgID0gc2MtPnJlcXVlc3RfYnVmZmxlbjsKKwlmdGJfcmVx LT51LnNjc2kudGltZW91dF9wZXJfY29tbWFuZCA9IHNjLT50aW1lb3V0X3Blcl9jb21tYW5kOwor CisJaW5mby0+c2hhZG93W2Z0Yl9yZXEtPnJxaWRdLnUuc2NzaS5yZXFfc2NzaV9jbW5kID0gKHVu c2lnbmVkIGxvbmcpc2M7CisJaW5mby0+c2hhZG93W2Z0Yl9yZXEtPnJxaWRdLnUuc2NzaS5zY19k YXRhX2RpcmVjdGlvbgorCQkJCQkJCSA9IHNjLT5zY19kYXRhX2RpcmVjdGlvbjsKKwlpbmZvLT5z aGFkb3dbZnRiX3JlcS0+cnFpZF0udS5zY3NpLnJlcXVlc3RfYnVmZmxlbgorCQkJCQkgPSBzYy0+ cmVxdWVzdF9idWZmbGVuOworCWluZm8tPnNoYWRvd1tmdGJfcmVxLT5ycWlkXS5jbW5kID0gZnRi X3JlcS0+Y21uZDsKKworCXJlZl9jbnQgPSBtYXBfZGF0YV9mb3JfcmVxdWVzdChpbmZvLCBzYywg ZnRiX3JlcSwgZnRiX3JlcS0+cnFpZCk7CisJaWYgKHVubGlrZWx5KHJlZl9jbnQgPCAwKSkgewor CQlBRERfSURfVE9fRlJFRUxJU1QoaW5mbywgZnRiX3JlcS0+cnFpZCk7CisJCW5vdGlmeV9yZW1v dGVfdmlhX2lycShpbmZvLT5pcnEpOworCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsK Kwl9CisKKwlmdGJfcmVxLT51LnNjc2kudXNlX3NnICAgICAgICAgICAgICAgICAgICA9IHJlZl9j bnQ7CisJaW5mby0+c2hhZG93W2Z0Yl9yZXEtPnJxaWRdLnUuc2NzaS51c2Vfc2cgPSByZWZfY250 OworCisJc2NzaV90cmFjZSgxLCAodW5zaWduZWQgY2hhciAqKWZ0Yl9yZXEsCisJCSAgIHNpemVv ZihzdHJ1Y3QgdnNjc2lpZl9mdGJfcmVxdWVzdCkpOworCisJY29tZnJvbnRfZG9fcmVxdWVzdChp bmZvKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc2NzaWZyb250X2VoX2Fib3J0 X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2MpCit7CisJLyogbm90IGltcGxlbWVudGVkICov CisJcHJpbnRrKEtFUk5fRVJSICJzY3NpZnJvbnQ6IGFib3J0ISAwIHJldHVybi5cbiIpOworCXJl dHVybiAoRkFJTEVEKTsKK30KKworCitzdGF0aWMgaW50IHNjc2lmcm9udF9laF9ob3N0X3Jlc2V0 X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2MpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9z dCA9IHNjLT5kZXZpY2UtPmhvc3Q7CisJc3RydWN0IGNvbWZyb250X2luZm8gKmluZm8gPSAoc3Ry dWN0IGNvbWZyb250X2luZm8gKikgaG9zdC0+aG9zdGRhdGE7CisgCXN0cnVjdCB2c2NzaWlmX2Z0 Yl9yZXF1ZXN0ICpyaW5nX3JlcTsKKwlzdHJ1Y3QgdnNjc2lpZl9idGZfcmVxdWVzdCAqcmluZ19y ZXM7CisJaW50IGVyciA9IEZBSUxFRDsKKwkKKwlwcmludGsoS0VSTl9JTkZPICJzY3NpZnJvbnQ6 IHJlc2V0LlxuIik7CisKKwlzY3NpX2Jsb2NrX3JlcXVlc3RzKGhvc3QpOworCisJcmluZ19yZXEg PSBjb21mcm9udF9wcmVfcmVxdWVzdChpbmZvKTsKKworCXJpbmdfcmVxLT5jbW5kICAgICAgICAg ID0gQ01ORF9TQ1NJX1JFU0VUOworCXJpbmdfcmVxLT51LnNjc2kuaWQgICAgICA9IHNjLT5kZXZp Y2UtPmlkOworCXJpbmdfcmVxLT51LnNjc2kubHVuICAgICA9IHNjLT5kZXZpY2UtPmx1bjsKKwly aW5nX3JlcS0+dS5zY3NpLmNoYW5uZWwgPSBzYy0+ZGV2aWNlLT5jaGFubmVsOworCisJc3Bpbl91 bmxvY2tfaXJxKGluZm8tPmhvc3QtPmhvc3RfbG9jayk7CisKKwlyaW5nX3JlcyA9IGNvbWZyb250 X2RvX3JlcXVlc3RfYW5kX3dhaXRfcmVzcG9uc2UoaW5mbywgcmluZ19yZXEpOworCisJZXJyID0g KHJpbmdfcmVzLT5yc2x0ID8gU1VDQ0VTUyA6IEZBSUxFRCk7CisKKwlzY3NpX3VuYmxvY2tfcmVx dWVzdHMoaG9zdCk7CisKKwlyZXR1cm4gKGVycik7Cit9CisKKworc3RhdGljIHZvaWQgc2NzaWZy b250X2dudHRhYl9kb25lKHN0cnVjdCBjb21mcm9udF9zaGFkb3cgKnMsIHVpbnQzMl90IGlkKQor eworCWludCBpOworCisJaWYgKHMtPnUuc2NzaS5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfTk9O RSkKKwkJcmV0dXJuOworCisJaWYgKHMtPnUuc2NzaS51c2Vfc2cpIHsKKwkJZm9yIChpID0gMDsg aSA8IHMtPnUuc2NzaS51c2Vfc2c7IGkrKykgeworCQkJaWYgKHVubGlrZWx5KGdudHRhYl9xdWVy eV9mb3JlaWduX2FjY2VzcygKKwkJCQlzLT51LnNjc2kuZ3JlZltpXSkgIT0gMCkpIHsKKwkJCQlw cmludGsoS0VSTl9BTEVSVCAic2NzaWZyb250OiAiCisJCQkJCSJncmFudCBzdGlsbCBpbiB1c2Ug YnkgYmFja2VuZC5cbiIpOworCQkJCUJVRygpOworCQkJfQorCQkJZ250dGFiX2VuZF9mb3JlaWdu X2FjY2VzcyhzLT51LnNjc2kuZ3JlZltpXSwgMCwgMFVMKTsKKwkJfQorCX0gZWxzZSBpZiAocy0+ dS5zY3NpLnJlcXVlc3RfYnVmZmxlbikgeworCQlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzKHMt PnUuc2NzaS5ncmVmWzBdLCAwLCAwVUwpOworCX0gZWxzZSB7CisJCXJldHVybjsKKwl9Cit9CisK KworaW50IHNjc2lmcm9udF9jbWRfZG9uZShzdHJ1Y3QgY29tZnJvbnRfaW5mbyAqaW5mbywKKwkJ CQkgICBzdHJ1Y3QgdnNjc2lpZl9idGZfcmVxdWVzdCAqYnRmX3JlcSkKK3sKKwlzdHJ1Y3Qgc2Nz aV9jbW5kCSpzYzsKKwl1aW50MzJfdCBpZDsKKworCWlkID0gYnRmX3JlcS0+cnFpZDsKKwlzYyA9 IChzdHJ1Y3Qgc2NzaV9jbW5kICopaW5mby0+c2hhZG93W2lkXS51LnNjc2kucmVxX3Njc2lfY21u ZDsKKworCWlmIChzYyA9PSBOVUxMKQorCQlyZXR1cm4gMTsKKworCXNjc2lmcm9udF9nbnR0YWJf ZG9uZSgmaW5mby0+c2hhZG93W2lkXSwgaWQpOworCUFERF9JRF9UT19GUkVFTElTVChpbmZvLCBp ZCk7CisKKwlzYy0+cmVzdWx0ID0gYnRmX3JlcS0+cnNsdDsKKwlzYy0+cmVzaWQgID0gMDsKKwor CUJVR19PTihidGZfcmVxLT51LnNjc2kuc2Vuc2VfbGVuID4gU0NTSV9TRU5TRV9CVUZGRVJTSVpF KTsKKwkKKwlpZiggYnRmX3JlcS0+cnNsdCAhPSAwICkgeworCQlpZiAoYnRmX3JlcS0+dS5zY3Np LnNlbnNlX2xlbikKKwkJCW1lbWNweShzYy0+c2Vuc2VfYnVmZmVyLCBidGZfcmVxLT51LnNjc2ku c2Vuc2VfYnVmZmVyLAorCQkJCWJ0Zl9yZXEtPnUuc2NzaS5zZW5zZV9sZW4pOworCX0KKworCXNj LT5zY3NpX2RvbmUoc2MpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBzY3NpZnJv bnRfYWxsb2NfcmluZyhzdHJ1Y3QgY29tZnJvbnRfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgeGVu YnVzX2RldmljZSAqZGV2ID0gaW5mby0+ZGV2OworCXN0cnVjdCB2c2NzaWlmX2Z0Yl9zcmluZyAq ZnRiOworCXN0cnVjdCB2c2NzaWlmX2J0Zl9zcmluZyAqYnRmOworCWludCBlcnIgPSAtRU5PTUVN OworCisJaW5mby0+ZnRiX3JpbmdfcmVmID0gR1JBTlRfSU5WQUxJRF9SRUY7CisJaW5mby0+YnRm X3JpbmdfcmVmID0gR1JBTlRfSU5WQUxJRF9SRUY7CisKKwkvKioqKiogRnJvbnRlbmQgdG8gQmFj a2VuZCByaW5nIHN0YXJ0ICoqKioqLworCWZ0YiA9IChzdHJ1Y3QgdnNjc2lpZl9mdGJfc3Jpbmcg KikgX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCWlmICghZnRiKSB7CisJCXhlbmJ1c19k ZXZfZmF0YWwoZGV2LCBlcnIsICJmYWlsIHRvIGFsbG9jYXRlIHNoYXJlZCByaW5nIChGcm9udCB0 byBCYWNrKSIpOworCQlyZXR1cm4gZXJyOworCX0KKwlTSEFSRURfUklOR19JTklUKGZ0Yik7CisJ RlJPTlRfUklOR19JTklUKCZpbmZvLT5mdGJfcmluZywgZnRiLCBQQUdFX1NJWkUpOworCisJZXJy ID0geGVuYnVzX2dyYW50X3JpbmcoZGV2LCB2aXJ0X3RvX21mbihmdGIpKTsKKwlpZiAoZXJyIDwg MCkgeworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGZ0Yik7CisJCWluZm8tPmZ0Yl9yaW5n LnNyaW5nID0gTlVMTDsKKwkJeGVuYnVzX2Rldl9mYXRhbChkZXYsIGVyciwgImZhaWwgdG8gZ3Jh bnQgc2hhcmVkIHJpbmcgKEZyb250IHRvIEJhY2spIik7CisJCWdvdG8gZnJlZV9zcmluZzsKKwl9 CisJaW5mby0+ZnRiX3JpbmdfcmVmID0gZXJyOworCisJLyoqKioqIEJhY2tlbmQgdG8gRnJvbnRl bmQgcmluZyBzdGFydCAqKioqKi8KKwlidGYgPSAoc3RydWN0IHZzY3NpaWZfYnRmX3NyaW5nICop IF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWJ0ZikgeworCQl4ZW5idXNfZGV2 X2ZhdGFsKGRldiwgZXJyLCAiZmFpbCB0byBhbGxvY2F0ZSBzaGFyZWQgcmluZyAoQmFjayB0byBG cm9udCkiKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJU0hBUkVEX1JJTkdfSU5JVChidGYpOworCUJB Q0tfUklOR19JTklUKCZpbmZvLT5idGZfcmluZywgYnRmLCBQQUdFX1NJWkUpOworCisJZXJyID0g eGVuYnVzX2dyYW50X3JpbmcoZGV2LCB2aXJ0X3RvX21mbihidGYpKTsKKwlpZiAoZXJyIDwgMCkg eworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ0Zik7CisJCWluZm8tPmJ0Zl9yaW5nLnNy aW5nID0gTlVMTDsKKwkJeGVuYnVzX2Rldl9mYXRhbChkZXYsIGVyciwgImZhaWwgdG8gZ3JhbnQg c2hhcmVkIHJpbmcgKEJhY2sgdG8gRnJvbnQpIik7CisJCWdvdG8gZnJlZV9zcmluZzsKKwl9CisJ aW5mby0+YnRmX3JpbmdfcmVmID0gZXJyOworCQorCWVyciA9IGJpbmRfbGlzdGVuaW5nX3BvcnRf dG9faXJxaGFuZGxlcigKKwkJCWRldi0+b3RoZXJlbmRfaWQsIGNvbWZyb250X2ludHIsCisJCQlT QV9TQU1QTEVfUkFORE9NLCAic2NzaWZyb250IiwgaW5mbyk7CisKKwlpZiAoZXJyIDw9IDApIHsK KwkJeGVuYnVzX2Rldl9mYXRhbChkZXYsIGVyciwgImJpbmRfbGlzdGVuaW5nX3BvcnRfdG9faXJx aGFuZGxlciIpOworCQlnb3RvIGZhaWw7CisJfQorCWluZm8tPmlycSA9IGVycjsKKworCXJldHVy biAwOworZmFpbDoKKwkvKiBmcmVlIHJlc291cmNlICovCitmcmVlX3NyaW5nOgorCXNjc2lmcm9u dF9mcmVlKGluZm8pOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzY3NpZnJvbnRf aW5pdF9yaW5nKHN0cnVjdCBjb21mcm9udF9pbmZvICppbmZvKQoreworCXN0cnVjdCB4ZW5idXNf ZGV2aWNlICpkZXYgPSBpbmZvLT5kZXY7CisJc3RydWN0IHhlbmJ1c190cmFuc2FjdGlvbiB4YnQ7 CisJaW50IGVycjsKKworCURQUklOVEsoIiVzXG4iLF9fRlVOQ1RJT05fXyk7CisKKwllcnIgPSBz Y3NpZnJvbnRfYWxsb2NfcmluZyhpbmZvKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCURQ UklOVEsoIiV1ICV1ICV1XG4iLCBpbmZvLT5mdGJfcmluZ19yZWYsIGluZm8tPmZ0Yl9yaW5nX3Jl ZiwgaW5mby0+ZXZ0Y2huKTsKKworYWdhaW46CisJZXJyID0geGVuYnVzX3RyYW5zYWN0aW9uX3N0 YXJ0KCZ4YnQpOworCWlmIChlcnIpIHsKKwkJeGVuYnVzX2Rldl9mYXRhbChkZXYsIGVyciwgInN0 YXJ0aW5nIHRyYW5zYWN0aW9uIik7CisJfQorCisJZXJyID0geGVuYnVzX3ByaW50Zih4YnQsIGRl di0+bm9kZW5hbWUsICJmdGItcmluZy1yZWYiLCAiJXUiLAorCQkJCWluZm8tPmZ0Yl9yaW5nX3Jl Zik7CisJaWYgKGVycikgeworCQl4ZW5idXNfZGV2X2ZhdGFsKGRldiwgZXJyLCAiJXMiLCAid3Jp dGluZyBmdGItcmluZy1yZWYiKTsKKwkJZ290byBmYWlsOworCX0KKwllcnIgPSB4ZW5idXNfcHJp bnRmKHhidCwgZGV2LT5ub2RlbmFtZSwgImJ0Zi1yaW5nLXJlZiIsICIldSIsCisJCQkJaW5mby0+ YnRmX3JpbmdfcmVmKTsKKwlpZiAoZXJyKSB7CisJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCBlcnIs ICIlcyIsICJ3cml0aW5nIGJ0Zi1yaW5nLXJlZiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJZXJy ID0geGVuYnVzX3ByaW50Zih4YnQsIGRldi0+bm9kZW5hbWUsICJldmVudC1jaGFubmVsIiwgIiV1 IiwKKwkJCQlpcnFfdG9fZXZ0Y2huX3BvcnQoaW5mby0+aXJxKSk7CisKKwlpZiAoZXJyKSB7CisJ CXhlbmJ1c19kZXZfZmF0YWwoZGV2LCBlcnIsICIlcyIsICJ3cml0aW5nIGV2ZW50LWNoYW5uZWwi KTsKKwkJZ290byBmYWlsOworCX0KKworCWVyciA9IHhlbmJ1c19wcmludGYoeGJ0LCBkZXYtPm5v ZGVuYW1lLCAidmhvc3RubyIsICIlZCIsCisJCQkJaW5mby0+aG9zdC0+aG9zdF9ubyk7CisKKwlp ZiAoZXJyKSB7CisJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCBlcnIsICIlcyIsICJ3cml0aW5nIGV2 ZW50LWNoYW5uZWwiKTsKKwkJZ290byBmYWlsOworCX0KKworCWVyciA9IHhlbmJ1c190cmFuc2Fj dGlvbl9lbmQoeGJ0LCAwKTsKKwlpZiAoZXJyKSB7CisJCWlmIChlcnIgPT0gLUVBR0FJTikKKwkJ CWdvdG8gYWdhaW47CisJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCBlcnIsICJjb21wbGV0aW5nIHRy YW5zYWN0aW9uIik7CisJfSBlbHNlCisJCXhlbmJ1c19zd2l0Y2hfc3RhdGUoZGV2LCBYZW5idXNT dGF0ZUluaXRpYWxpc2VkKTsKKworCXJldHVybiAwOworZmFpbDoKKwl4ZW5idXNfdHJhbnNhY3Rp b25fZW5kKHhidCwgMSk7CisJLyogZnJlZSByZXNvdXJjZSAqLworCXNjc2lmcm9udF9mcmVlKGlu Zm8pOworCQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBs YXRlIHNjc2lmcm9udF9zaHQgPSB7CisJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJ CQk9ICJYZW4gU0NTSSBmcm9udGVuZCBkcml2ZXIiLAorCS5xdWV1ZWNvbW1hbmQJCT0gc2NzaWZy b250X3F1ZXVlY29tbWFuZCwKKwkuZWhfYWJvcnRfaGFuZGxlcgk9IHNjc2lmcm9udF9laF9hYm9y dF9oYW5kbGVyLAorCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJPSBzY3NpZnJvbnRfZWhfaG9zdF9y ZXNldF9oYW5kbGVyLAorCS5jbWRfcGVyX2x1bgkJPSBERUZBVUxUX0NNRF9QRVJfTFVOLAorCS5j YW5fcXVldWUJCT0gMTYsCisJLnRoaXNfaWQgCQk9IC0xLAorCS5zZ190YWJsZXNpemUJCT0gU0df VEFCTEVTSVpFLAorCS51c2VfY2x1c3RlcmluZwkJPSBESVNBQkxFX0NMVVNURVJJTkcsCisJLnBy b2NfbmFtZQkJPSAic2NzaWZyb250IiwKK307CisKK3N0YXRpYyBpbnQgc2NzaWZyb250X2Nvbm5l Y3Qoc3RydWN0IGNvbWZyb250X2luZm8gKmluZm8pCit7CisJc3RydWN0IHhlbmJ1c19kZXZpY2Ug KmRldiA9IGluZm8tPmRldjsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gaW5mby0+aG9zdDsK KworCWludCBlcnIgPSAtRU5PTUVNOworCisJRFBSSU5USygiJXVcbiIsIGRldi0+c3RhdGUpOwor CWlmIChkZXYtPnN0YXRlID09IFhlbmJ1c1N0YXRlQ29ubmVjdGVkKQorCQlyZXR1cm4gMDsKKwor CXhlbmJ1c19zd2l0Y2hfc3RhdGUoZGV2LCBYZW5idXNTdGF0ZUNvbm5lY3RlZCk7CisKKyNpZmRl ZiBDT05GSUdfWEVOX0ZDCisJKHZvaWQpZmNmcm9udF9nZXRfZnVuY3Rpb25fdGVtcGxhdGUoaW5m byk7CisKKwlmY190cmFuc3BvcnRfdGVtcGxhdGUgPSBmY19hdHRhY2hfdHJhbnNwb3J0KCZmY190 cmFuc3BvcnRfZnVuY3Rpb25zKTsKKwlob3N0LT50cmFuc3BvcnR0ID0gZmNfdHJhbnNwb3J0X3Rl bXBsYXRlOworI2VuZGlmCisJLyogRklYTUUgKi8KKwlob3N0LT5tYXhfaWQgICAgICA9IDY0Owor CWhvc3QtPm1heF9jaGFubmVsID0gMDsKKwlob3N0LT5tYXhfbHVuICAgICA9IDEyODsKKwlob3N0 LT5tYXhfc2VjdG9ycyA9IChTR19UQUJMRVNJWkUgKiBQQUdFX1NJWkUgLyA1MTIpOworCWhvc3Qt PmNtZF9wZXJfbHVuID0gcmVxX3Blcl9sdW47CisKKwllcnIgPSBzY3NpX2FkZF9ob3N0KGhvc3Qs ICZkZXYtPmRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgInNjc2lmcm9udDog ZmFpbCB0byBhZGQgc2NzaSBob3N0ICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwor CXNjc2lfc2Nhbl9ob3N0KGhvc3QpOworCisjaWZkZWYgQ09ORklHX1hFTl9GQworCSh2b2lkKWZj ZnJvbnRfZ2V0X2luaXRpYWxfYXR0cmlidXRlKGluZm8pOworI2VuZGlmCisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBzY3NpZnJvbnRfZGlzY29ubmVjdChzdHJ1Y3QgY29tZnJvbnRfaW5m byAqaW5mbykKK3sKKwlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2ID0gaW5mby0+ZGV2OworCisJ RFBSSU5USygiJXM6ICVzIHJlbW92ZVxuIixfX0ZVTkNUSU9OX18gLGRldi0+bm9kZW5hbWUpOwor CisjaWZkZWYgQ09ORklHX1hFTl9GQworCWZjX3JlbW92ZV9ob3N0KGluZm8tPmhvc3QpOworI2Vu ZGlmCisJc2NzaV9yZW1vdmVfaG9zdChpbmZvLT5ob3N0KTsKKwlzY3NpX2hvc3RfcHV0KGluZm8t Pmhvc3QpOworCisJeGVuYnVzX2Zyb250ZW5kX2Nsb3NlZChkZXYpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgc2NzaWZyb250X3Byb2JlKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYs CisJCQkJY29uc3Qgc3RydWN0IHhlbmJ1c19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBTY3Np X0hvc3QgKmhvc3Q7CisJc3RydWN0IGNvbWZyb250X2luZm8gKmluZm87CisJaW50IGksIGVyciA9 IC1FTk9NRU07CisJY2hhciBuYW1lW0RFRkFVTFRfVEFTS19DT01NX0xFTl07CisKKwlob3N0ID0g c2NzaV9ob3N0X2FsbG9jKCZzY3NpZnJvbnRfc2h0LCBzaXplb2YoKmluZm8pKTsKKwlpZiAoIWhv c3QpIHsKKwkJeGVuYnVzX2Rldl9mYXRhbChkZXYsIGVyciwgImZhaWwgdG8gYWxsb2NhdGUgc2Nz aSBob3N0Iik7CisJCXJldHVybiBlcnI7CisJfQorCWluZm8gPSAoc3RydWN0IGNvbWZyb250X2lu Zm8gKikgaG9zdC0+aG9zdGRhdGE7CisJZGV2LT5kZXYuZHJpdmVyX2RhdGEgPSBpbmZvOworCWlu Zm8tPmRldiAgPSBkZXY7CisJaW5mby0+aG9zdCA9IGhvc3Q7CisKKwlmb3IgKGkgPSAwOyBpIDwg REVGQVVMVF9DQU5fUVVFVUU7IGkrKykgeworCQlpbmZvLT5zaGFkb3dbaV0ucnFpZCA9IGkgKyAx OworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCYoaW5mby0+c2hhZG93W2ldLndxKSk7CisJCWluZm8t PnNoYWRvd1tpXS5jb25kID0gMDsKKwl9CisJaW5mby0+c2hhZG93W0RFRkFVTFRfQ0FOX1FVRVVF IC0gMV0ucnFpZCA9IDB4MGZmZmZmZmY7CisKKyNpZmRlZiBDT05GSUdfWEVOX0ZDCisJaWYgKChl cnIgPSBmY2Zyb250X2Nvbm5lY3Rpb25fc2V0dXAoaW5mbykpICE9IDApIHsKKwkJcHJpbnRrKEtF Uk5fRVJSCisJCSAgICAgICAic2NzaWZyb250OiAlczogZmNmcm9udF9jb25uZWN0aW9uX3NldHVw KCkgZXJyb3JcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gZXJyOworCX0K KyNlbmRpZgorCQorCWVyciA9IHNjc2lmcm9udF9pbml0X3JpbmcoaW5mbyk7CisJaWYgKGVycikg eworCQlzY3NpX2hvc3RfcHV0KGhvc3QpOworCQlyZXR1cm4gZXJyOworCX0KKworCWluaXRfd2Fp dHF1ZXVlX2hlYWQoJmluZm8tPndxKTsKKwlzcGluX2xvY2tfaW5pdCgmaW5mby0+aW9fbG9jayk7 CisJc3Bpbl9sb2NrX2luaXQoJmluZm8tPnNoYWRvd19sb2NrKTsKKworCXNucHJpbnRmKG5hbWUs IERFRkFVTFRfVEFTS19DT01NX0xFTiwgInNjc2lpZi4lZCIsIGluZm8tPmhvc3QtPmhvc3Rfbm8p OworCisJaW5mby0+a3RocmVhZCA9IGt0aHJlYWRfcnVuKGNvbWZyb250X3NjaGVkdWxlLCBpbmZv LCBuYW1lKTsKKwlpZiAoSVNfRVJSKGluZm8tPmt0aHJlYWQpKSB7CisJCWVyciA9IFBUUl9FUlIo aW5mby0+a3RocmVhZCk7CisJCWluZm8tPmt0aHJlYWQgPSBOVUxMOworCX0KKworCXJldHVybiAw OworfQorCisKK3N0YXRpYyBpbnQgc2NzaWZyb250X3JlbW92ZShzdHJ1Y3QgeGVuYnVzX2Rldmlj ZSAqZGV2KQoreworCXN0cnVjdCBjb21mcm9udF9pbmZvICppbmZvID0gZGV2LT5kZXYuZHJpdmVy X2RhdGE7CisKKwlEUFJJTlRLKCIlczogJXMgcmVtb3ZlZFxuIixfX0ZVTkNUSU9OX18gLGRldi0+ bm9kZW5hbWUpOworCisJaWYgKGluZm8tPmt0aHJlYWQpIHsKKwkJa3RocmVhZF9zdG9wKGluZm8t Pmt0aHJlYWQpOworCQlpbmZvLT5rdGhyZWFkID0gTlVMTDsKKwl9CisKKyNpZmRlZiBDT05GSUdf WEVOX0ZDCisJZmNmcm9udF9jb25uZWN0aW9uX3Vuc2V0dXAoaW5mbyk7CisjZW5kaWYKKwlzY3Np ZnJvbnRfZnJlZShpbmZvKTsKKwkKKwkvKmtmcmVlKGluZm8pOyovCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIHNjc2lmcm9udF9iYWNrZW5kX2NoYW5nZWQoc3RydWN0IHhlbmJ1c19kZXZp Y2UgKmRldiwKKwkJCQkJWGVuYnVzU3RhdGUgYmFja2VuZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgY29t ZnJvbnRfaW5mbyAqaW5mbyA9IGRldi0+ZGV2LmRyaXZlcl9kYXRhOworCisJRFBSSU5USygiJXAg JXUgJXVcbiIsIGRldiwgZGV2LT5zdGF0ZSwgYmFja2VuZF9zdGF0ZSk7CisKKwlzd2l0Y2ggKGJh Y2tlbmRfc3RhdGUpIHsKKwljYXNlIFhlbmJ1c1N0YXRlVW5rbm93bjoKKwljYXNlIFhlbmJ1c1N0 YXRlSW5pdGlhbGlzaW5nOgorCWNhc2UgWGVuYnVzU3RhdGVJbml0V2FpdDoKKwljYXNlIFhlbmJ1 c1N0YXRlSW5pdGlhbGlzZWQ6CisJY2FzZSBYZW5idXNTdGF0ZUNsb3NlZDoKKwkJYnJlYWs7CisK KwljYXNlIFhlbmJ1c1N0YXRlQ29ubmVjdGVkOgorCQlzY3NpZnJvbnRfY29ubmVjdChpbmZvKTsK KwkJYnJlYWs7CisKKwljYXNlIFhlbmJ1c1N0YXRlQ2xvc2luZzoKKwkJc2NzaWZyb250X2Rpc2Nv bm5lY3QoaW5mbyk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCB4ZW5idXNfZGV2 aWNlX2lkIHNjc2lmcm9udF9pZHNbXSA9IHsKKwl7ICJzY3NpaG9zdCIgfSwKKwl7ICIiIH0KK307 CisKKworc3RhdGljIHN0cnVjdCB4ZW5idXNfZHJpdmVyIHNjc2lmcm9udF9kcml2ZXIgPSB7CisJ Lm5hbWUJCQk9ICJzY3NpaG9zdCIsCisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkuaWRzCQkJ PSBzY3NpZnJvbnRfaWRzLAorCS5wcm9iZQkJCT0gc2NzaWZyb250X3Byb2JlLAorCS5yZW1vdmUJ CQk9IHNjc2lmcm9udF9yZW1vdmUsCisvKiAJLnJlc3VtZQkJCT0gc2NzaWZyb250X3Jlc3VtZSwg Ki8KKwkub3RoZXJlbmRfY2hhbmdlZAk9IHNjc2lmcm9udF9iYWNrZW5kX2NoYW5nZWQsCit9Owor CitzdGF0aWMgaW50IF9faW5pdCBzY3NpZnJvbnRfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisK KyNpZiAwIC8qIGZvciBERUJVRyAqLworCXByaW50ayhLRVJOX0VSUiAiJXM6IGZ0Yl9yZXE9JWRc biIsIF9fRlVOQ1RJT05fXywKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCB2c2NzaWlmX2Z0Yl9yZXF1 ZXN0KSk7CisJcHJpbnRrKEtFUk5fRVJSICIlczogZnRiX3Jlcz0lZFxuIiwgX19GVU5DVElPTl9f LAorCSAgICAgICBzaXplb2Yoc3RydWN0IHZzY3NpaWZfZnRiX3Jlc3BvbnNlKSk7CisJcHJpbnRr KEtFUk5fRVJSICIlczogYnRmX3JlcT0lZFxuIiwgX19GVU5DVElPTl9fLAorCSAgICAgICBzaXpl b2Yoc3RydWN0IHZzY3NpaWZfYnRmX3JlcXVlc3QpKTsKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBi dGZfcmVzPSVkXG4iLCBfX0ZVTkNUSU9OX18sCisJICAgICAgIHNpemVvZihzdHJ1Y3QgdnNjc2lp Zl9idGZfcmVzcG9uc2UpKTsKKworCXByaW50aygiJXMgU0NTSV9SSU5HX1NJWkVfZnRiPSVsZFxu IiwgX19GVU5DVElPTl9fLAorCQlfX1JJTkdfU0laRSgoc3RydWN0IHZzY3NpaWZfZnRiX3NyaW5n ICopMCwgUEFHRV9TSVpFKSk7CisJcHJpbnRrKCIlcyBTQ1NJX1JJTkdfU0laRV9idGY9JWxkXG4i LCBfX0ZVTkNUSU9OX18sCisJCV9fUklOR19TSVpFKChzdHJ1Y3QgdnNjc2lpZl9idGZfc3Jpbmcg KikwLCBQQUdFX1NJWkUpKTsKKworI2VuZGlmICAvKiBmb3IgREVCVUcgKi8KKworCWlmICghaXNf cnVubmluZ19vbl94ZW4oKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKyNpZmRlZiBDT05GSUdfWEVO X0ZDCisJaWYgKGlzX2luaXRpYWxfeGVuZG9tYWluKCkpIHsKKwkJcmV0dXJuIDA7CisJfQorI2Vu ZGlmCisKKwllcnIgPSB4ZW5idXNfcmVnaXN0ZXJfZnJvbnRlbmQoJnNjc2lmcm9udF9kcml2ZXIp OworCisJKHZvaWQpc2NzaV90cmFjZV9pbml0KCk7CisJCisJcmV0dXJuIGVycjsKK30KKworc3Rh dGljIHZvaWQgc2NzaWZyb250X2V4aXQodm9pZCkKK3sKKwl4ZW5idXNfdW5yZWdpc3Rlcl9kcml2 ZXIoJnNjc2lmcm9udF9kcml2ZXIpOworCisjaWZkZWYgQ09ORklHX1hFTl9GQworCWZjX3JlbGVh c2VfdHJhbnNwb3J0KGZjX3RyYW5zcG9ydF90ZW1wbGF0ZSk7CisjZW5kaWYKK30KKworbW9kdWxl X2luaXQoc2NzaWZyb250X2luaXQpOworbW9kdWxlX2V4aXQoc2NzaWZyb250X2V4aXQpOworCitN T0RVTEVfREVTQ1JJUFRJT04oIlhlbiBTQ1NJIGZyb250ZW5kIGRyaXZlciIpOworTU9EVUxFX0xJ Q0VOU0UoIkdQTCIpOwpkaWZmIC1yIDcwOWRiODBjMDNjMyAtciAyNGUwY2I5ZmU5ZGYgZHJpdmVy cy94ZW4vc2NzaWZyb250L3RyYWNlZnJvbnQuYwotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6 MDA6MDAgMTk3MCArMDAwMAorKysgYi9kcml2ZXJzL3hlbi9zY3NpZnJvbnQvdHJhY2Vmcm9udC5j CVR1ZSBPY3QgMzAgMTY6NDE6MzYgMjAwNyArMDkwMApAQCAtMCwwICsxLDEwNyBAQAorI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRl IDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisvLyNpbmNsdWRl IDxhc20vZGVsYXkuaD4KKworCisjZGVmaW5lIE1BWF9EQVRBX1NJWkUJCTQ3MgkJLyogc2hvdWxk IGJlIG1vZGlmaWVkCSovCisJCQkJCQkvKiAgIGFjY29yZGluZyB0byBkYXRhCSovCisJCQkJCQkv KiAgIHRvIGJlIHJlY29yZGVkCSovCisjZGVmaW5lIEVOVFJZX05VTQkJKDE2ICogMTAyNCkKKwor c3RydWN0IHNjc2lfdHJhY2VfZW50cnkgeworCXVuc2lnbmVkIGxvbmcJZGlyOwkJCS8qIGRpcmVj dGlvbgkJKi8KKwkJCQkJCS8qIDA6IHBlbmRpbmcoQkUpCSovCisJCQkJCQkvKiAxOiByZXF1ZXN0 KEZFKQkqLworCQkJCQkJLyogMjogcmVzcG9uc2UoRkUpCSovCisJdW5zaWduZWQgbG9uZwlzZXJp YWw7CQkJLyogaW5jcmVtZW50YWwgY291bnRlcgkqLworCQkJCQkJLyogICBzdGFydHMgYXQgMCAJ Ki8KKwlzdHJ1Y3QgdGltZXZhbAl0djsJCQkvKiB0aW1lb2ZkYXkJCSovCisvLwl1bnNpZ25lZCBs b25nCWl0YzsJCQkvKiBpdGMJCQkqLworCXVuc2lnbmVkIGludAlzaXplOwkJCS8qIGRhdGEgc2l6 ZQkJKi8KKwl1bnNpZ25lZCBjaGFyCWRhdGFbTUFYX0RBVEFfU0laRV07CS8qIGRhdGEgYm9keQkJ Ki8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV90cmFjZV9lbnRyeQkqc2NzaV90cmFjZV9idWY7 CitFWFBPUlRfU1lNQk9MKHNjc2lfdHJhY2VfYnVmKTsJCQkvKiBmb3IgRFVNUAkJKi8KKworc3Rh dGljIERFRklORV9TUElOTE9DSyhzY3NpX3RyYWNlX2xvY2spOworCit2b2lkCitzY3NpX3RyYWNl KHVuc2lnbmVkIGxvbmcgZGlyLCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6 ZSkKK3sKKwlzdGF0aWMgdW5zaWduZWQgbG9uZwlpbmRleCAgPSAwOworCXN0YXRpYyB1bnNpZ25l ZCBsb25nCXNlcmlhbCA9IDA7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlpZiAoc2l6ZSA+ IE1BWF9EQVRBX1NJWkUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZGF0YSBnaXZlbiBpcyB0 b28gYmlnLlxuIgorCQkgICAgICAgIm11c3QgYmUgc21hbGxlciB0aGFuICVkIGJ5dGVzLlxuIiwK KwkJICAgICAgIF9fRlVOQ1RJT05fXywgTUFYX0RBVEFfU0laRSk7CisJCXJldHVybjsKKwl9CisK KwlzcGluX2xvY2tfaXJxc2F2ZSgmc2NzaV90cmFjZV9sb2NrLCBmbGFncyk7CisKKwlzY3NpX3Ry YWNlX2J1ZltpbmRleF0uZGlyICAgID0gZGlyOworCWRvX2dldHRpbWVvZmRheSgmKHNjc2lfdHJh Y2VfYnVmW2luZGV4XS50dikpOworLy8Jc2NzaV90cmFjZV9idWZbaW5kZXhdLml0YyAgICA9IGlh NjRfZ2V0X2l0YygpOworCXNjc2lfdHJhY2VfYnVmW2luZGV4XS5zaXplICAgPSBzaXplOworLy8J bWVtc2V0KHNjc2lfdHJhY2VfYnVmW2luZGV4XS5kYXRhLCAwLCBNQVhfREFUQV9TSVpFKTsKKwlt ZW1jcHkoc2NzaV90cmFjZV9idWZbaW5kZXhdLmRhdGEsIGRhdGEsIHNpemUpOworCisJLyogVGhp cyBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVjb3JkIGlzIHN1Y2Nlc3NmdWxseSByZWNvcmRlZCAqLwor CXNjc2lfdHJhY2VfYnVmW2luZGV4XS5zZXJpYWwgPSBzZXJpYWwrKzsKKworCWluZGV4ID0gKGlu ZGV4ICsgMSkgJSBFTlRSWV9OVU07CisJCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NzaV90 cmFjZV9sb2NrLCBmbGFncyk7CisKK30KKworc3RhdGljIGludAorc2NzaV90cmFjZV9yZWFkX3By b2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCisJCSAgICAgaW50IGNvdW50 LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQJCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2Nz aV90cmFjZV9lbnRyeSkgKiBFTlRSWV9OVU07CisgICAgICAgIHVuc2lnbmVkIGxvbmcJZmxhZ3M7 CisKKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnNjc2lfdHJhY2VfbG9jaywgZmxhZ3MpOwor CisgICAgICAgIGlmIChsZW4gPD0gb2ZmICsgY291bnQpIHsKKwkJKmVvZiA9IDE7CisJfQorICAg ICAgICAqc3RhcnQgPSBwYWdlOworICAgICAgICBsZW4gLT0gb2ZmOworICAgICAgICBpZiAobGVu ID4gY291bnQpIHsKKwkJbGVuID0gY291bnQ7CisJfQorICAgICAgICBpZiAobGVuIDwgMCkgewor ICAgICAgICAgICAgICAgIGxlbiA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgbWVtY3B5KHBhZ2UsICgodW5zaWduZWQgY2hhciAqKXNjc2lfdHJhY2VfYnVmKSArIG9mZiwg bGVuKTsKKwl9CisKKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NzaV90cmFjZV9s b2NrLCBmbGFncyk7CisKKyAgICAgICAgcmV0dXJuIGxlbjsKK30KKworaW50CitzY3NpX3RyYWNl X2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQJc2NzaV90cmFjZV9idWZfc2l6ZTsKKworCXNj c2lfdHJhY2VfYnVmX3NpemUgPSBzaXplb2Yoc3RydWN0IHNjc2lfdHJhY2VfZW50cnkpICogRU5U UllfTlVNOworCWlmICgoc2NzaV90cmFjZV9idWYgPSB2bWFsbG9jKHNjc2lfdHJhY2VfYnVmX3Np emUpKSA9PSBOVUxMKSB7CisJCXJldHVybiAtMTsKKwl9CisJbWVtc2V0KHNjc2lfdHJhY2VfYnVm LCAwLCBzY3NpX3RyYWNlX2J1Zl9zaXplKTsKKworCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoInNj c2lfdHJhY2UiLCAwLCBOVUxMLAorCQkJICAgICAgIHNjc2lfdHJhY2VfcmVhZF9wcm9jLCBOVUxM KTsKKworCXJldHVybiAwOworfQo= --------_47270665000000004427_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 --------_47270665000000004427_MULTIPART_MIXED_--