From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: [PATCH v2] x86/hvm: separate ioreq server code from generic hvm code Date: Fri, 1 Apr 2016 08:54:33 +0100 Message-ID: <1459497273-3906-1-git-send-email-paul.durrant@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1alu5X-0004ez-Rq for xen-devel@lists.xenproject.org; Fri, 01 Apr 2016 08:05:52 +0000 List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Andrew Cooper , Paul Durrant , Keir Fraser , Jun Nakajima , Jan Beulich List-Id: xen-devel@lists.xenproject.org VGhlIGNvZGUgaW4gaHZtL2h2bS5jIHJlbGF0ZWQgdG8gaGFuZGxpbmcgSS9PIGVtdWxhdGlvbiB1 c2luZyB0aGUgaW9yZXEKc2VydmVyIGZyYW1ld29yayBpcyBsYXJnZSBhbmQgbW9zdGx5IHNlbGYt Y29udGFpbmVkLgoKVGhpcyBwYXRjaCBzZXBhcmF0ZXMgdGhlIGlvcmVxIHNlcnZlciBjb2RlIGlu dG8gYSBuZXcgaHZtL2lvcmVxLmMgc291cmNlCm1vZHVsZSBhbmQgYWNjb21wYW55aW5nIGFzbS14 ODYvaHZtL2lvcmVxLmggaGVhZGVyIGZpbGUuIFRoZXJlIGlzIG5vCmludGVuZGVkIGZ1bmN0aW9u YWwgY2hhbmdlLCBvbmx5IGNvZGUgbW92ZW1lbnQuCgpTaWduZWQtb2ZmLWJ5OiBQYXVsIER1cnJh bnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29tPgpDYzogS2VpciBGcmFzZXIgPGtlaXJAeGVuLm9y Zz4KQ2M6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KQ2M6IEFuZHJldyBDb29wZXIg PGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+CkNjOiBKdW4gTmFrYWppbWEgPGp1bi5uYWthamlt YUBpbnRlbC5jb20+CkFja2VkLWJ5OiBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4K LS0tCgp2MjoKIC0gRml4ZWQgY29weXJpZ2h0IGluIGlvcmVxLmggYm9pbGVycGxhdGUuCi0tLQog eGVuL2FyY2gveDg2L2h2bS9NYWtlZmlsZSAgICAgICB8ICAgIDEgKwogeGVuL2FyY2gveDg2L2h2 bS9lbXVsYXRlLmMgICAgICB8ICAgIDEgKwogeGVuL2FyY2gveDg2L2h2bS9odm0uYyAgICAgICAg ICB8IDE0NjEgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB4ZW4vYXJj aC94ODYvaHZtL2lvLmMgICAgICAgICAgIHwgICAgMSArCiB4ZW4vYXJjaC94ODYvaHZtL2lvcmVx LmMgICAgICAgIHwgMTM3NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHhl bi9hcmNoL3g4Ni9odm0vc3RkdmdhLmMgICAgICAgfCAgICAxICsKIHhlbi9hcmNoL3g4Ni9odm0v dm14L3Z2bXguYyAgICAgfCAgICAxICsKIHhlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2h2bS5oICAg fCAgICA3IC0KIHhlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2lvcmVxLmggfCAgIDY2ICsrCiA5IGZp bGVzIGNoYW5nZWQsIDE1MjEgaW5zZXJ0aW9ucygrKSwgMTM5MyBkZWxldGlvbnMoLSkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC94ODYvaHZtL2lvcmVxLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCB4ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9pb3JlcS5oCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gv eDg2L2h2bS9NYWtlZmlsZSBiL3hlbi9hcmNoL3g4Ni9odm0vTWFrZWZpbGUKaW5kZXggNzk0ZTc5 My4uOGJjNTVhOSAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2h2bS9NYWtlZmlsZQorKysgYi94 ZW4vYXJjaC94ODYvaHZtL01ha2VmaWxlCkBAIC05LDYgKzksNyBAQCBvYmoteSArPSBodm0ubwog b2JqLXkgKz0gaTgyNTQubwogb2JqLXkgKz0gaW50ZXJjZXB0Lm8KIG9iai15ICs9IGlvLm8KK29i ai15ICs9IGlvcmVxLm8KIG9iai15ICs9IGlycS5vCiBvYmoteSArPSBtdHJyLm8KIG9iai15ICs9 IG5lc3RlZGh2bS5vCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL2VtdWxhdGUuYyBiL3hl bi9hcmNoL3g4Ni9odm0vZW11bGF0ZS5jCmluZGV4IGRkYzgwMDcuLjQwNjNjNmEgMTAwNjQ0Ci0t LSBhL3hlbi9hcmNoL3g4Ni9odm0vZW11bGF0ZS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9odm0vZW11 bGF0ZS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8YXNtL3hzdGF0ZS5oPgogI2luY2x1 ZGUgPGFzbS9odm0vZW11bGF0ZS5oPgogI2luY2x1ZGUgPGFzbS9odm0vaHZtLmg+CisjaW5jbHVk ZSA8YXNtL2h2bS9pb3JlcS5oPgogI2luY2x1ZGUgPGFzbS9odm0vdHJhY2UuaD4KICNpbmNsdWRl IDxhc20vaHZtL3N1cHBvcnQuaD4KICNpbmNsdWRlIDxhc20vaHZtL3N2bS9zdm0uaD4KZGlmZiAt LWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMgYi94ZW4vYXJjaC94ODYvaHZtL2h2bS5jCmlu ZGV4IDI3ODQ2NDEuLjlkNGU1YjggMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMK KysrIGIveGVuL2FyY2gveDg2L2h2bS9odm0uYwpAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUg PGFzbS9odm0vdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vaHZtL25lc3RlZGh2bS5oPgogI2luY2x1 ZGUgPGFzbS9odm0vZXZlbnQuaD4KKyNpbmNsdWRlIDxhc20vaHZtL2lvcmVxLmg+CiAjaW5jbHVk ZSA8YXNtL2h2bS92bXgvdm14Lmg+CiAjaW5jbHVkZSA8YXNtL2FsdHAybS5oPgogI2luY2x1ZGUg PGFzbS9tdHJyLmg+CkBAIC00NTEsMTE1NCArNDUyLDEwNyBAQCB2b2lkIGh2bV9taWdyYXRlX3Bp cnFzKHN0cnVjdCB2Y3B1ICp2KQogICAgIHNwaW5fdW5sb2NrKCZkLT5ldmVudF9sb2NrKTsKIH0K IAotc3RhdGljIGlvcmVxX3QgKmdldF9pb3JlcShzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAqcywg c3RydWN0IHZjcHUgKnYpCi17Ci0gICAgc2hhcmVkX2lvcGFnZV90ICpwID0gcy0+aW9yZXEudmE7 Ci0KLSAgICBBU1NFUlQoKHYgPT0gY3VycmVudCkgfHwgIXZjcHVfcnVubmFibGUodikpOwotICAg IEFTU0VSVChwICE9IE5VTEwpOwotCi0gICAgcmV0dXJuICZwLT52Y3B1X2lvcmVxW3YtPnZjcHVf aWRdOwotfQotCi1ib29sX3QgaHZtX2lvX3BlbmRpbmcoc3RydWN0IHZjcHUgKnYpCi17Ci0gICAg c3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKLSAgICBzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZl ciAqczsKLQotICAgIGxpc3RfZm9yX2VhY2hfZW50cnkgKCBzLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZlci5saXN0LAotICAgICAgICAg ICAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICkKLSAgICB7Ci0gICAgICAgIHN0cnVjdCBodm1f aW9yZXFfdmNwdSAqc3Y7Ci0KLSAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSAoIHN2LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMtPmlvcmVxX3ZjcHVfbGlzdCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgKQotICAgICAgICB7Ci0gICAgICAgICAg ICBpZiAoIHN2LT52Y3B1ID09IHYgJiYgc3YtPnBlbmRpbmcgKQotICAgICAgICAgICAgICAgIHJl dHVybiAxOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2 b2lkIGh2bV9pb19hc3Npc3Qoc3RydWN0IGh2bV9pb3JlcV92Y3B1ICpzdiwgdWludDY0X3QgZGF0 YSkKLXsKLSAgICBzdHJ1Y3QgdmNwdSAqdiA9IHN2LT52Y3B1OwotICAgIHN0cnVjdCBodm1fdmNw dV9pbyAqdmlvID0gJnYtPmFyY2guaHZtX3ZjcHUuaHZtX2lvOwotCi0gICAgaWYgKCBodm1fdmNw dV9pb19uZWVkX2NvbXBsZXRpb24odmlvKSApCi0gICAgewotICAgICAgICB2aW8tPmlvX3JlcS5z dGF0ZSA9IFNUQVRFX0lPUkVTUF9SRUFEWTsKLSAgICAgICAgdmlvLT5pb19yZXEuZGF0YSA9IGRh dGE7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgdmlvLT5pb19yZXEuc3RhdGUgPSBTVEFURV9J T1JFUV9OT05FOwotCi0gICAgbXNpeF93cml0ZV9jb21wbGV0aW9uKHYpOwotICAgIHZjcHVfZW5k X3NodXRkb3duX2RlZmVycmFsKHYpOwotCi0gICAgc3YtPnBlbmRpbmcgPSAwOwotfQotCi1zdGF0 aWMgYm9vbF90IGh2bV93YWl0X2Zvcl9pbyhzdHJ1Y3QgaHZtX2lvcmVxX3ZjcHUgKnN2LCBpb3Jl cV90ICpwKQotewotICAgIHdoaWxlICggc3YtPnBlbmRpbmcgKQotICAgIHsKLSAgICAgICAgdW5z aWduZWQgaW50IHN0YXRlID0gcC0+c3RhdGU7Ci0KLSAgICAgICAgcm1iKCk7Ci0gICAgICAgIHN3 aXRjaCAoIHN0YXRlICkKLSAgICAgICAgewotICAgICAgICBjYXNlIFNUQVRFX0lPUkVRX05PTkU6 Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVGhlIG9ubHkgcmVhc29uIHdlIHNob3Vs ZCBzZWUgdGhpcyBjYXNlIGlzIHdoZW4gYW4KLSAgICAgICAgICAgICAqIGVtdWxhdG9yIGlzIGR5 aW5nIGFuZCBpdCByYWNlcyB3aXRoIGFuIEkvTyBiZWluZwotICAgICAgICAgICAgICogcmVxdWVz dGVkLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBodm1faW9fYXNzaXN0KHN2LCB+MHVs KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNUQVRFX0lPUkVTUF9SRUFEWTog LyogSU9SRVNQX1JFQURZIC0+IE5PTkUgKi8KLSAgICAgICAgICAgIHAtPnN0YXRlID0gU1RBVEVf SU9SRVFfTk9ORTsKLSAgICAgICAgICAgIGh2bV9pb19hc3Npc3Qoc3YsIHAtPmRhdGEpOwotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1RBVEVfSU9SRVFfUkVBRFk6ICAvKiBJT1JF UV97UkVBRFksSU5QUk9DRVNTfSAtPiBJT1JFU1BfUkVBRFkgKi8KLSAgICAgICAgY2FzZSBTVEFU RV9JT1JFUV9JTlBST0NFU1M6Ci0gICAgICAgICAgICB3YWl0X29uX3hlbl9ldmVudF9jaGFubmVs KHN2LT5pb3JlcV9ldnRjaG4sIHAtPnN0YXRlICE9IHN0YXRlKTsKLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX0VSUiwgIldl aXJkIEhWTSBpb3JlcXVlc3Qgc3RhdGUgJXVcbiIsIHN0YXRlKTsKLSAgICAgICAgICAgIHN2LT5w ZW5kaW5nID0gMDsKLSAgICAgICAgICAgIGRvbWFpbl9jcmFzaChzdi0+dmNwdS0+ZG9tYWluKTsK LSAgICAgICAgICAgIHJldHVybiAwOyAvKiBiYWlsICovCi0gICAgICAgIH0KLSAgICB9Ci0KLSAg ICByZXR1cm4gMTsKLX0KLQotdm9pZCBodm1fZG9fcmVzdW1lKHN0cnVjdCB2Y3B1ICp2KQotewot ICAgIHN0cnVjdCBodm1fdmNwdV9pbyAqdmlvID0gJnYtPmFyY2guaHZtX3ZjcHUuaHZtX2lvOwot ICAgIHN0cnVjdCBkb21haW4gKmQgPSB2LT5kb21haW47Ci0gICAgc3RydWN0IGh2bV9pb3JlcV9z ZXJ2ZXIgKnM7Ci0gICAgZW51bSBodm1faW9fY29tcGxldGlvbiBpb19jb21wbGV0aW9uOwotCi0g ICAgY2hlY2tfd2FrZXVwX2Zyb21fd2FpdCgpOwotCi0gICAgaWYgKCBpc19odm1fZG9tYWluKGQp ICkKLSAgICAgICAgcHRfcmVzdG9yZV90aW1lcih2KTsKLQotICAgIGxpc3RfZm9yX2VhY2hfZW50 cnkgKCBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmZC0+YXJjaC5odm1fZG9tYWluLmlv cmVxX3NlcnZlci5saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICkK LSAgICB7Ci0gICAgICAgIHN0cnVjdCBodm1faW9yZXFfdmNwdSAqc3Y7Ci0KLSAgICAgICAgbGlz dF9mb3JfZWFjaF9lbnRyeSAoIHN2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMt PmlvcmVxX3ZjcHVfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZW50 cnkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIHN2LT52Y3B1ID09IHYgJiYgc3YtPnBl bmRpbmcgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICggIWh2bV93YWl0X2Zv cl9pbyhzdiwgZ2V0X2lvcmVxKHMsIHYpKSApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK LQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg fQotCi0gICAgaW9fY29tcGxldGlvbiA9IHZpby0+aW9fY29tcGxldGlvbjsKLSAgICB2aW8tPmlv X2NvbXBsZXRpb24gPSBIVk1JT19ub19jb21wbGV0aW9uOwotCi0gICAgc3dpdGNoICggaW9fY29t cGxldGlvbiApCi0gICAgewotICAgIGNhc2UgSFZNSU9fbm9fY29tcGxldGlvbjoKLSAgICAgICAg YnJlYWs7Ci0gICAgY2FzZSBIVk1JT19tbWlvX2NvbXBsZXRpb246Ci0gICAgICAgIGhhbmRsZV9t bWlvKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSFZNSU9fcGlvX2NvbXBsZXRpb246Ci0g ICAgICAgICh2b2lkKWhhbmRsZV9waW8odmlvLT5pb19yZXEuYWRkciwgdmlvLT5pb19yZXEuc2l6 ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB2aW8tPmlvX3JlcS5kaXIpOwotICAgICAgICBi cmVhazsKLSAgICBjYXNlIEhWTUlPX3JlYWxtb2RlX2NvbXBsZXRpb246Ci0gICAgewotICAgICAg ICBzdHJ1Y3QgaHZtX2VtdWxhdGVfY3R4dCBjdHh0OwotCi0gICAgICAgIGh2bV9lbXVsYXRlX3By ZXBhcmUoJmN0eHQsIGd1ZXN0X2NwdV91c2VyX3JlZ3MoKSk7Ci0gICAgICAgIHZteF9yZWFsbW9k ZV9lbXVsYXRlX29uZSgmY3R4dCk7Ci0gICAgICAgIGh2bV9lbXVsYXRlX3dyaXRlYmFjaygmY3R4 dCk7Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VS VF9VTlJFQUNIQUJMRSgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIHVubGlr ZWx5KHYtPmFyY2gudm1fZXZlbnQpICkKLSAgICB7Ci0gICAgICAgIHN0cnVjdCBtb25pdG9yX3dy aXRlX2RhdGEgKncgPSAmdi0+YXJjaC52bV9ldmVudC0+d3JpdGVfZGF0YTsKLQotICAgICAgICBp ZiAoIHYtPmFyY2gudm1fZXZlbnQtPmVtdWxhdGVfZmxhZ3MgKQotICAgICAgICB7Ci0gICAgICAg ICAgICBlbnVtIGVtdWxfa2luZCBraW5kID0gRU1VTF9LSU5EX05PUk1BTDsKLQotICAgICAgICAg ICAgaWYgKCB2LT5hcmNoLnZtX2V2ZW50LT5lbXVsYXRlX2ZsYWdzICYKLSAgICAgICAgICAgICAg ICAgVk1fRVZFTlRfRkxBR19TRVRfRU1VTF9SRUFEX0RBVEEgKQotICAgICAgICAgICAgICAgIGtp bmQgPSBFTVVMX0tJTkRfU0VUX0NPTlRFWFQ7Ci0gICAgICAgICAgICBlbHNlIGlmICggdi0+YXJj aC52bV9ldmVudC0+ZW11bGF0ZV9mbGFncyAmCi0gICAgICAgICAgICAgICAgICAgICAgVk1fRVZF TlRfRkxBR19FTVVMQVRFX05PV1JJVEUgKQotICAgICAgICAgICAgICAgIGtpbmQgPSBFTVVMX0tJ TkRfTk9XUklURTsKLQotICAgICAgICAgICAgaHZtX21lbV9hY2Nlc3NfZW11bGF0ZV9vbmUoa2lu ZCwgVFJBUF9pbnZhbGlkX29wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSFZNX0RFTElWRVJfTk9fRVJST1JfQ09ERSk7Ci0KLSAgICAgICAgICAgIHYtPmFyY2gudm1f ZXZlbnQtPmVtdWxhdGVfZmxhZ3MgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCB3LT5k b193cml0ZS5tc3IgKQotICAgICAgICB7Ci0gICAgICAgICAgICBodm1fbXNyX3dyaXRlX2ludGVy Y2VwdCh3LT5tc3IsIHctPnZhbHVlLCAwKTsKLSAgICAgICAgICAgIHctPmRvX3dyaXRlLm1zciA9 IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIHctPmRvX3dyaXRlLmNyMCApCi0gICAgICAg IHsKLSAgICAgICAgICAgIGh2bV9zZXRfY3IwKHctPmNyMCwgMCk7Ci0gICAgICAgICAgICB3LT5k b193cml0ZS5jcjAgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCB3LT5kb193cml0ZS5j cjQgKQotICAgICAgICB7Ci0gICAgICAgICAgICBodm1fc2V0X2NyNCh3LT5jcjQsIDApOwotICAg ICAgICAgICAgdy0+ZG9fd3JpdGUuY3I0ID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgg dy0+ZG9fd3JpdGUuY3IzICkKLSAgICAgICAgewotICAgICAgICAgICAgaHZtX3NldF9jcjMody0+ Y3IzLCAwKTsKLSAgICAgICAgICAgIHctPmRvX3dyaXRlLmNyMyA9IDA7Ci0gICAgICAgIH0KLSAg ICB9Ci0KLSAgICAvKiBJbmplY3QgcGVuZGluZyBody9zdyB0cmFwICovCi0gICAgaWYgKCB2LT5h cmNoLmh2bV92Y3B1LmluamVjdF90cmFwLnZlY3RvciAhPSAtMSApIAotICAgIHsKLSAgICAgICAg aHZtX2luamVjdF90cmFwKCZ2LT5hcmNoLmh2bV92Y3B1LmluamVjdF90cmFwKTsKLSAgICAgICAg di0+YXJjaC5odm1fdmNwdS5pbmplY3RfdHJhcC52ZWN0b3IgPSAtMTsKLSAgICB9Ci19Ci0KLXN0 YXRpYyBpbnQgaHZtX2FsbG9jX2lvcmVxX2dtZm4oc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQg bG9uZyAqZ21mbikKLXsKLSAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICBpbnQgcmM7Ci0KLSAgICBy YyA9IC1FTk9NRU07Ci0gICAgZm9yICggaSA9IDA7IGkgPCBzaXplb2YoZC0+YXJjaC5odm1fZG9t YWluLmlvcmVxX2dtZm4ubWFzaykgKiA4OyBpKysgKQotICAgIHsKLSAgICAgICAgaWYgKCB0ZXN0 X2FuZF9jbGVhcl9iaXQoaSwgJmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9nbWZuLm1hc2spICkK LSAgICAgICAgewotICAgICAgICAgICAgKmdtZm4gPSBkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFf Z21mbi5iYXNlICsgaTsKLSAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBodm1f ZnJlZV9pb3JlcV9nbWZuKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgZ21mbikKLXsK LSAgICB1bnNpZ25lZCBpbnQgaSA9IGdtZm4gLSBkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfZ21m bi5iYXNlOwotCi0gICAgaWYgKCBnbWZuICE9IElOVkFMSURfR0ZOICkKLSAgICAgICAgc2V0X2Jp dChpLCAmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX2dtZm4ubWFzayk7Ci19Ci0KLXN0YXRpYyB2 b2lkIGh2bV91bm1hcF9pb3JlcV9wYWdlKHN0cnVjdCBodm1faW9yZXFfc2VydmVyICpzLCBib29s X3QgYnVmKQotewotICAgIHN0cnVjdCBodm1faW9yZXFfcGFnZSAqaW9ycCA9IGJ1ZiA/ICZzLT5i dWZpb3JlcSA6ICZzLT5pb3JlcTsKLQotICAgIGRlc3Ryb3lfcmluZ19mb3JfaGVscGVyKCZpb3Jw LT52YSwgaW9ycC0+cGFnZSk7Ci19Ci0KLXN0YXRpYyBpbnQgaHZtX21hcF9pb3JlcV9wYWdlKAot ICAgIHN0cnVjdCBodm1faW9yZXFfc2VydmVyICpzLCBib29sX3QgYnVmLCB1bnNpZ25lZCBsb25n IGdtZm4pCi17Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IHMtPmRvbWFpbjsKLSAgICBzdHJ1Y3Qg aHZtX2lvcmVxX3BhZ2UgKmlvcnAgPSBidWYgPyAmcy0+YnVmaW9yZXEgOiAmcy0+aW9yZXE7Ci0g ICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKLSAgICB2b2lkICp2YTsKLSAgICBpbnQgcmM7Ci0K LSAgICBpZiAoIChyYyA9IHByZXBhcmVfcmluZ19mb3JfaGVscGVyKGQsIGdtZm4sICZwYWdlLCAm dmEpKSApCi0gICAgICAgIHJldHVybiByYzsKLQotICAgIGlmICggKGlvcnAtPnZhICE9IE5VTEwp IHx8IGQtPmlzX2R5aW5nICkKLSAgICB7Ci0gICAgICAgIGRlc3Ryb3lfcmluZ19mb3JfaGVscGVy KCZ2YSwgcGFnZSk7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAgIGlvcnAt PnZhID0gdmE7Ci0gICAgaW9ycC0+cGFnZSA9IHBhZ2U7Ci0gICAgaW9ycC0+Z21mbiA9IGdtZm47 Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaHZtX3JlbW92ZV9pb3JlcV9nbWZu KAotICAgIHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBodm1faW9yZXFfcGFnZSAqaW9ycCkKLXsK LSAgICBndWVzdF9waHlzbWFwX3JlbW92ZV9wYWdlKGQsIGlvcnAtPmdtZm4sIAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGFnZV90b19tZm4oaW9ycC0+cGFnZSksIDApOwotICAgIGNs ZWFyX3BhZ2UoaW9ycC0+dmEpOwotfQotCi1zdGF0aWMgaW50IGh2bV9hZGRfaW9yZXFfZ21mbigK LSAgICBzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgaHZtX2lvcmVxX3BhZ2UgKmlvcnApCi17Ci0g ICAgaW50IHJjOwotCi0gICAgY2xlYXJfcGFnZShpb3JwLT52YSk7Ci0KLSAgICByYyA9IGd1ZXN0 X3BoeXNtYXBfYWRkX3BhZ2UoZCwgaW9ycC0+Z21mbiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGFnZV90b19tZm4oaW9ycC0+cGFnZSksIDApOwotICAgIGlmICggcmMgPT0gMCAp Ci0gICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KGQsIHBhZ2VfdG9fbWZuKGlvcnAtPnBhZ2UpKTsK LQotICAgIHJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBodm1fcHJpbnRfbGluZSgKLSAgICBp bnQgZGlyLCB1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IGJ5dGVzLCB1aW50MzJfdCAq dmFsKQotewotICAgIHN0cnVjdCBkb21haW4gKmNkID0gY3VycmVudC0+ZG9tYWluOwotICAgIGNo YXIgYyA9ICp2YWw7Ci0KLSAgICBCVUdfT04oYnl0ZXMgIT0gMSk7Ci0KLSAgICAvKiBBY2NlcHQg b25seSBwcmludGFibGUgY2hhcmFjdGVycywgbmV3bGluZSwgYW5kIGhvcml6b250YWwgdGFiLiAq LwotICAgIGlmICggIWlzcHJpbnQoYykgJiYgKGMgIT0gJ1xuJykgJiYgKGMgIT0gJ1x0JykgKQot ICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgc3Bpbl9sb2NrKCZjZC0+cGJ1Zl9s b2NrKTsKLSAgICBpZiAoIGMgIT0gJ1xuJyApCi0gICAgICAgIGNkLT5wYnVmW2NkLT5wYnVmX2lk eCsrXSA9IGM7Ci0gICAgaWYgKCAoY2QtPnBidWZfaWR4ID09IChET01BSU5fUEJVRl9TSVpFIC0g MSkpIHx8IChjID09ICdcbicpICkKLSAgICB7Ci0gICAgICAgIGNkLT5wYnVmW2NkLT5wYnVmX2lk eF0gPSAnXDAnOwotICAgICAgICBndWVzdF9wcmludGsoY2QsIFhFTkxPR19HX0RFQlVHICIlc1xu IiwgY2QtPnBidWYpOwotICAgICAgICBjZC0+cGJ1Zl9pZHggPSAwOwotICAgIH0KLSAgICBzcGlu X3VubG9jaygmY2QtPnBidWZfbG9jayk7Ci0KLSAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotfQot Ci1zdGF0aWMgaW50IGh2bV9hY2Nlc3NfY2Y4KAotICAgIGludCBkaXIsIHVuc2lnbmVkIGludCBw b3J0LCB1bnNpZ25lZCBpbnQgYnl0ZXMsIHVpbnQzMl90ICp2YWwpCi17Ci0gICAgc3RydWN0IGRv bWFpbiAqZCA9IGN1cnJlbnQtPmRvbWFpbjsKLQotICAgIGlmICggZGlyID09IElPUkVRX1dSSVRF ICYmIGJ5dGVzID09IDQgKQotICAgICAgICBkLT5hcmNoLmh2bV9kb21haW4ucGNpX2NmOCA9ICp2 YWw7Ci0KLSAgICAvKiBXZSBhbHdheXMgbmVlZCB0byBmYWxsIHRocm91Z2ggdG8gdGhlIGNhdGNo IGFsbCBlbXVsYXRvciAqLwotICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLX0KLQot c3RhdGljIGludCBoYW5kbGVfcHZoX2lvKAotICAgIGludCBkaXIsIHVuc2lnbmVkIGludCBwb3J0 LCB1bnNpZ25lZCBpbnQgYnl0ZXMsIHVpbnQzMl90ICp2YWwpCi17Ci0gICAgc3RydWN0IGRvbWFp biAqY3VycmQgPSBjdXJyZW50LT5kb21haW47Ci0KLSAgICBpZiAoIGRpciA9PSBJT1JFUV9XUklU RSApCi0gICAgICAgIGd1ZXN0X2lvX3dyaXRlKHBvcnQsIGJ5dGVzLCAqdmFsLCBjdXJyZCk7Ci0g ICAgZWxzZQotICAgICAgICAqdmFsID0gZ3Vlc3RfaW9fcmVhZChwb3J0LCBieXRlcywgY3VycmQp OwotCi0gICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLX0KLQotc3RhdGljIHZvaWQgaHZtX3VwZGF0 ZV9pb3JlcV9ldnRjaG4oc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnMsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaHZtX2lvcmVxX3ZjcHUgKnN2KQotewotICAg IEFTU0VSVChzcGluX2lzX2xvY2tlZCgmcy0+bG9jaykpOwotCi0gICAgaWYgKCBzLT5pb3JlcS52 YSAhPSBOVUxMICkKLSAgICB7Ci0gICAgICAgIGlvcmVxX3QgKnAgPSBnZXRfaW9yZXEocywgc3Yt PnZjcHUpOwotCi0gICAgICAgIHAtPnZwX2Vwb3J0ID0gc3YtPmlvcmVxX2V2dGNobjsKLSAgICB9 Ci19Ci0KLXN0YXRpYyBpbnQgaHZtX2lvcmVxX3NlcnZlcl9hZGRfdmNwdShzdHJ1Y3QgaHZtX2lv cmVxX3NlcnZlciAqcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s X3QgaXNfZGVmYXVsdCwgc3RydWN0IHZjcHUgKnYpCi17Ci0gICAgc3RydWN0IGh2bV9pb3JlcV92 Y3B1ICpzdjsKLSAgICBpbnQgcmM7Ci0KLSAgICBzdiA9IHh6YWxsb2Moc3RydWN0IGh2bV9pb3Jl cV92Y3B1KTsKLQotICAgIHJjID0gLUVOT01FTTsKLSAgICBpZiAoICFzdiApCi0gICAgICAgIGdv dG8gZmFpbDE7Ci0KLSAgICBzcGluX2xvY2soJnMtPmxvY2spOwotCi0gICAgcmMgPSBhbGxvY191 bmJvdW5kX3hlbl9ldmVudF9jaGFubmVsKHYtPmRvbWFpbiwgdi0+dmNwdV9pZCwgcy0+ZG9taWQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgIGlm ICggcmMgPCAwICkKLSAgICAgICAgZ290byBmYWlsMjsKLQotICAgIHN2LT5pb3JlcV9ldnRjaG4g PSByYzsKLQotICAgIGlmICggdi0+dmNwdV9pZCA9PSAwICYmIHMtPmJ1ZmlvcmVxLnZhICE9IE5V TEwgKQotICAgIHsKLSAgICAgICAgc3RydWN0IGRvbWFpbiAqZCA9IHMtPmRvbWFpbjsKLQotICAg ICAgICByYyA9IGFsbG9jX3VuYm91bmRfeGVuX2V2ZW50X2NoYW5uZWwodi0+ZG9tYWluLCAwLCBz LT5kb21pZCwgTlVMTCk7Ci0gICAgICAgIGlmICggcmMgPCAwICkKLSAgICAgICAgICAgIGdvdG8g ZmFpbDM7Ci0KLSAgICAgICAgcy0+YnVmaW9yZXFfZXZ0Y2huID0gcmM7Ci0gICAgICAgIGlmICgg aXNfZGVmYXVsdCApCi0gICAgICAgICAgICBkLT5hcmNoLmh2bV9kb21haW4ucGFyYW1zW0hWTV9Q QVJBTV9CVUZJT1JFUV9FVlRDSE5dID0KLSAgICAgICAgICAgICAgICBzLT5idWZpb3JlcV9ldnRj aG47Ci0gICAgfQotCi0gICAgc3YtPnZjcHUgPSB2OwotCi0gICAgbGlzdF9hZGQoJnN2LT5saXN0 X2VudHJ5LCAmcy0+aW9yZXFfdmNwdV9saXN0KTsKLQotICAgIGlmICggcy0+ZW5hYmxlZCApCi0g ICAgICAgIGh2bV91cGRhdGVfaW9yZXFfZXZ0Y2huKHMsIHN2KTsKLQotICAgIHNwaW5fdW5sb2Nr KCZzLT5sb2NrKTsKLSAgICByZXR1cm4gMDsKLQotIGZhaWwzOgotICAgIGZyZWVfeGVuX2V2ZW50 X2NoYW5uZWwodi0+ZG9tYWluLCBzdi0+aW9yZXFfZXZ0Y2huKTsKLSAgICAKLSBmYWlsMjoKLSAg ICBzcGluX3VubG9jaygmcy0+bG9jayk7Ci0gICAgeGZyZWUoc3YpOwotCi0gZmFpbDE6Ci0gICAg cmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBodm1faW9yZXFfc2VydmVyX3JlbW92ZV92Y3B1 KHN0cnVjdCBodm1faW9yZXFfc2VydmVyICpzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgdmNwdSAqdikKLXsKLSAgICBzdHJ1Y3QgaHZtX2lvcmVxX3Zj cHUgKnN2OwotCi0gICAgc3Bpbl9sb2NrKCZzLT5sb2NrKTsKLQotICAgIGxpc3RfZm9yX2VhY2hf ZW50cnkgKCBzdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnMtPmlvcmVxX3ZjcHVfbGlz dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9lbnRyeSApCi0gICAgewotICAgICAg ICBpZiAoIHN2LT52Y3B1ICE9IHYgKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg bGlzdF9kZWwoJnN2LT5saXN0X2VudHJ5KTsKLQotICAgICAgICBpZiAoIHYtPnZjcHVfaWQgPT0g MCAmJiBzLT5idWZpb3JlcS52YSAhPSBOVUxMICkKLSAgICAgICAgICAgIGZyZWVfeGVuX2V2ZW50 X2NoYW5uZWwodi0+ZG9tYWluLCBzLT5idWZpb3JlcV9ldnRjaG4pOwotCi0gICAgICAgIGZyZWVf eGVuX2V2ZW50X2NoYW5uZWwodi0+ZG9tYWluLCBzdi0+aW9yZXFfZXZ0Y2huKTsKLQotICAgICAg ICB4ZnJlZShzdik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHNwaW5fdW5sb2NrKCZz LT5sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgaHZtX2lvcmVxX3NlcnZlcl9yZW1vdmVfYWxsX3Zj cHVzKHN0cnVjdCBodm1faW9yZXFfc2VydmVyICpzKQotewotICAgIHN0cnVjdCBodm1faW9yZXFf dmNwdSAqc3YsICpuZXh0OwotCi0gICAgc3Bpbl9sb2NrKCZzLT5sb2NrKTsKLQotICAgIGxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZSAoIHN2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5leHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMtPmlvcmVxX3ZjcHVfbGlz dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICkKLSAgICB7Ci0g ICAgICAgIHN0cnVjdCB2Y3B1ICp2ID0gc3YtPnZjcHU7Ci0KLSAgICAgICAgbGlzdF9kZWwoJnN2 LT5saXN0X2VudHJ5KTsKLQotICAgICAgICBpZiAoIHYtPnZjcHVfaWQgPT0gMCAmJiBzLT5idWZp b3JlcS52YSAhPSBOVUxMICkKLSAgICAgICAgICAgIGZyZWVfeGVuX2V2ZW50X2NoYW5uZWwodi0+ ZG9tYWluLCBzLT5idWZpb3JlcV9ldnRjaG4pOwotCi0gICAgICAgIGZyZWVfeGVuX2V2ZW50X2No YW5uZWwodi0+ZG9tYWluLCBzdi0+aW9yZXFfZXZ0Y2huKTsKLQotICAgICAgICB4ZnJlZShzdik7 Ci0gICAgfQotCi0gICAgc3Bpbl91bmxvY2soJnMtPmxvY2spOwotfQotCi1zdGF0aWMgaW50IGh2 bV9pb3JlcV9zZXJ2ZXJfbWFwX3BhZ2VzKHN0cnVjdCBodm1faW9yZXFfc2VydmVyICpzLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGlvcmVxX3Bm biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBi dWZpb3JlcV9wZm4pCi17Ci0gICAgaW50IHJjOwotCi0gICAgcmMgPSBodm1fbWFwX2lvcmVxX3Bh Z2UocywgMCwgaW9yZXFfcGZuKTsKLSAgICBpZiAoIHJjICkKLSAgICAgICAgcmV0dXJuIHJjOwot Ci0gICAgaWYgKCBidWZpb3JlcV9wZm4gIT0gSU5WQUxJRF9HRk4gKQotICAgICAgICByYyA9IGh2 bV9tYXBfaW9yZXFfcGFnZShzLCAxLCBidWZpb3JlcV9wZm4pOwotCi0gICAgaWYgKCByYyApCi0g ICAgICAgIGh2bV91bm1hcF9pb3JlcV9wYWdlKHMsIDApOwotCi0gICAgcmV0dXJuIHJjOwotfQot Ci1zdGF0aWMgaW50IGh2bV9pb3JlcV9zZXJ2ZXJfc2V0dXBfcGFnZXMoc3RydWN0IGh2bV9pb3Jl cV9zZXJ2ZXIgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v bF90IGlzX2RlZmF1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbF90IGhhbmRsZV9idWZpb3JlcSkKLXsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gcy0+ZG9t YWluOwotICAgIHVuc2lnbmVkIGxvbmcgaW9yZXFfcGZuID0gSU5WQUxJRF9HRk47Ci0gICAgdW5z aWduZWQgbG9uZyBidWZpb3JlcV9wZm4gPSBJTlZBTElEX0dGTjsKLSAgICBpbnQgcmM7Ci0KLSAg ICBpZiAoIGlzX2RlZmF1bHQgKQotICAgIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogVGhlIGRl ZmF1bHQgaW9yZXEgc2VydmVyIG11c3QgaGFuZGxlIGJ1ZmZlcmVkIGlvcmVxcywgZm9yCi0gICAg ICAgICAqIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgotICAgICAgICAgKi8KLSAgICAgICAgQVNT RVJUKGhhbmRsZV9idWZpb3JlcSk7Ci0gICAgICAgIHJldHVybiBodm1faW9yZXFfc2VydmVyX21h cF9wYWdlcyhzLAotICAgICAgICAgICAgICAgICAgIGQtPmFyY2guaHZtX2RvbWFpbi5wYXJhbXNb SFZNX1BBUkFNX0lPUkVRX1BGTl0sCi0gICAgICAgICAgICAgICAgICAgZC0+YXJjaC5odm1fZG9t YWluLnBhcmFtc1tIVk1fUEFSQU1fQlVGSU9SRVFfUEZOXSk7Ci0gICAgfQotCi0gICAgcmMgPSBo dm1fYWxsb2NfaW9yZXFfZ21mbihkLCAmaW9yZXFfcGZuKTsKLQotICAgIGlmICggIXJjICYmIGhh bmRsZV9idWZpb3JlcSApCi0gICAgICAgIHJjID0gaHZtX2FsbG9jX2lvcmVxX2dtZm4oZCwgJmJ1 ZmlvcmVxX3Bmbik7Ci0KLSAgICBpZiAoICFyYyApCi0gICAgICAgIHJjID0gaHZtX2lvcmVxX3Nl cnZlcl9tYXBfcGFnZXMocywgaW9yZXFfcGZuLCBidWZpb3JlcV9wZm4pOwotCi0gICAgaWYgKCBy YyApCi0gICAgewotICAgICAgICBodm1fZnJlZV9pb3JlcV9nbWZuKGQsIGlvcmVxX3Bmbik7Ci0g ICAgICAgIGh2bV9mcmVlX2lvcmVxX2dtZm4oZCwgYnVmaW9yZXFfcGZuKTsKLSAgICB9Ci0KLSAg ICByZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGh2bV9pb3JlcV9zZXJ2ZXJfdW5tYXBfcGFn ZXMoc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnMsIAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBib29sX3QgaXNfZGVmYXVsdCkKLXsKLSAgICBzdHJ1Y3QgZG9tYWlu ICpkID0gcy0+ZG9tYWluOwotICAgIGJvb2xfdCBoYW5kbGVfYnVmaW9yZXEgPSAoIHMtPmJ1Zmlv cmVxLnZhICE9IE5VTEwgKTsKLQotICAgIGlmICggaGFuZGxlX2J1ZmlvcmVxICkKLSAgICAgICAg aHZtX3VubWFwX2lvcmVxX3BhZ2UocywgMSk7Ci0KLSAgICBodm1fdW5tYXBfaW9yZXFfcGFnZShz LCAwKTsKLQotICAgIGlmICggIWlzX2RlZmF1bHQgKQotICAgIHsKLSAgICAgICAgaWYgKCBoYW5k bGVfYnVmaW9yZXEgKQotICAgICAgICAgICAgaHZtX2ZyZWVfaW9yZXFfZ21mbihkLCBzLT5idWZp b3JlcS5nbWZuKTsKLQotICAgICAgICBodm1fZnJlZV9pb3JlcV9nbWZuKGQsIHMtPmlvcmVxLmdt Zm4pOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgaHZtX2lvcmVxX3NlcnZlcl9mcmVlX3Jhbmdl c2V0cyhzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAqcywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYm9vbF90IGlzX2RlZmF1bHQpCi17Ci0gICAgdW5zaWduZWQg aW50IGk7Ci0KLSAgICBpZiAoIGlzX2RlZmF1bHQgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBm b3IgKCBpID0gMDsgaSA8IE5SX0lPX1JBTkdFX1RZUEVTOyBpKysgKQotICAgICAgICByYW5nZXNl dF9kZXN0cm95KHMtPnJhbmdlW2ldKTsKLX0KLQotc3RhdGljIGludCBodm1faW9yZXFfc2VydmVy X2FsbG9jX3Jhbmdlc2V0cyhzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAqcywgCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xfdCBpc19kZWZhdWx0KQotewot ICAgIHVuc2lnbmVkIGludCBpOwotICAgIGludCByYzsKLQotICAgIGlmICggaXNfZGVmYXVsdCAp Ci0gICAgICAgIGdvdG8gZG9uZTsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgTlJfSU9fUkFOR0Vf VFlQRVM7IGkrKyApCi0gICAgewotICAgICAgICBjaGFyICpuYW1lOwotCi0gICAgICAgIHJjID0g YXNwcmludGYoJm5hbWUsICJpb3JlcV9zZXJ2ZXIgJWQgJXMiLCBzLT5pZCwKLSAgICAgICAgICAg ICAgICAgICAgICAoaSA9PSBIVk1PUF9JT19SQU5HRV9QT1JUKSA/ICJwb3J0IiA6Ci0gICAgICAg ICAgICAgICAgICAgICAgKGkgPT0gSFZNT1BfSU9fUkFOR0VfTUVNT1JZKSA/ICJtZW1vcnkiIDoK LSAgICAgICAgICAgICAgICAgICAgICAoaSA9PSBIVk1PUF9JT19SQU5HRV9QQ0kpID8gInBjaSIg OgotICAgICAgICAgICAgICAgICAgICAgICIiKTsKLSAgICAgICAgaWYgKCByYyApCi0gICAgICAg ICAgICBnb3RvIGZhaWw7Ci0KLSAgICAgICAgcy0+cmFuZ2VbaV0gPSByYW5nZXNldF9uZXcocy0+ ZG9tYWluLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRVNF VEZfcHJldHR5cHJpbnRfaGV4KTsKLQotICAgICAgICB4ZnJlZShuYW1lKTsKLQotICAgICAgICBy YyA9IC1FTk9NRU07Ci0gICAgICAgIGlmICggIXMtPnJhbmdlW2ldICkKLSAgICAgICAgICAgIGdv dG8gZmFpbDsKLQotICAgICAgICByYW5nZXNldF9saW1pdChzLT5yYW5nZVtpXSwgTUFYX05SX0lP X1JBTkdFUyk7Ci0gICAgfQotCi0gZG9uZToKLSAgICByZXR1cm4gMDsKLQotIGZhaWw6Ci0gICAg aHZtX2lvcmVxX3NlcnZlcl9mcmVlX3Jhbmdlc2V0cyhzLCAwKTsKLQotICAgIHJldHVybiByYzsK LX0KLQotc3RhdGljIHZvaWQgaHZtX2lvcmVxX3NlcnZlcl9lbmFibGUoc3RydWN0IGh2bV9pb3Jl cV9zZXJ2ZXIgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sX3Qg aXNfZGVmYXVsdCkKLXsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gcy0+ZG9tYWluOwotICAgIHN0 cnVjdCBodm1faW9yZXFfdmNwdSAqc3Y7Ci0gICAgYm9vbF90IGhhbmRsZV9idWZpb3JlcSA9ICgg cy0+YnVmaW9yZXEudmEgIT0gTlVMTCApOwotCi0gICAgc3Bpbl9sb2NrKCZzLT5sb2NrKTsKLQot ICAgIGlmICggcy0+ZW5hYmxlZCApCi0gICAgICAgIGdvdG8gZG9uZTsKLQotICAgIGlmICggIWlz X2RlZmF1bHQgKQotICAgIHsKLSAgICAgICAgaHZtX3JlbW92ZV9pb3JlcV9nbWZuKGQsICZzLT5p b3JlcSk7Ci0KLSAgICAgICAgaWYgKCBoYW5kbGVfYnVmaW9yZXEgKQotICAgICAgICAgICAgaHZt X3JlbW92ZV9pb3JlcV9nbWZuKGQsICZzLT5idWZpb3JlcSk7Ci0gICAgfQotCi0gICAgcy0+ZW5h YmxlZCA9IDE7Ci0KLSAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5ICggc3YsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICZzLT5pb3JlcV92Y3B1X2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIGxpc3RfZW50cnkgKQotICAgICAgICBodm1fdXBkYXRlX2lvcmVxX2V2dGNobihzLCBzdik7 Ci0KLSAgZG9uZToKLSAgICBzcGluX3VubG9jaygmcy0+bG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lk IGh2bV9pb3JlcV9zZXJ2ZXJfZGlzYWJsZShzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAqcywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xfdCBpc19kZWZhdWx0KQotewot ICAgIHN0cnVjdCBkb21haW4gKmQgPSBzLT5kb21haW47Ci0gICAgYm9vbF90IGhhbmRsZV9idWZp b3JlcSA9ICggcy0+YnVmaW9yZXEudmEgIT0gTlVMTCApOwotCi0gICAgc3Bpbl9sb2NrKCZzLT5s b2NrKTsKLQotICAgIGlmICggIXMtPmVuYWJsZWQgKQotICAgICAgICBnb3RvIGRvbmU7Ci0KLSAg ICBpZiAoICFpc19kZWZhdWx0ICkKLSAgICB7Ci0gICAgICAgIGlmICggaGFuZGxlX2J1ZmlvcmVx ICkKLSAgICAgICAgICAgIGh2bV9hZGRfaW9yZXFfZ21mbihkLCAmcy0+YnVmaW9yZXEpOwotCi0g ICAgICAgIGh2bV9hZGRfaW9yZXFfZ21mbihkLCAmcy0+aW9yZXEpOwotICAgIH0KLQotICAgIHMt PmVuYWJsZWQgPSAwOwotCi0gZG9uZToKLSAgICBzcGluX3VubG9jaygmcy0+bG9jayk7Ci19Ci0K LXN0YXRpYyBpbnQgaHZtX2lvcmVxX3NlcnZlcl9pbml0KHN0cnVjdCBodm1faW9yZXFfc2VydmVy ICpzLCBzdHJ1Y3QgZG9tYWluICpkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZG9taWRfdCBkb21pZCwgYm9vbF90IGlzX2RlZmF1bHQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgYnVmaW9yZXFfaGFuZGxpbmcsIGlvc2VydmlkX3QgaWQpCi17Ci0gICAg c3RydWN0IHZjcHUgKnY7Ci0gICAgaW50IHJjOwotCi0gICAgcy0+aWQgPSBpZDsKLSAgICBzLT5k b21haW4gPSBkOwotICAgIHMtPmRvbWlkID0gZG9taWQ7Ci0KLSAgICBzcGluX2xvY2tfaW5pdCgm cy0+bG9jayk7Ci0gICAgSU5JVF9MSVNUX0hFQUQoJnMtPmlvcmVxX3ZjcHVfbGlzdCk7Ci0gICAg c3Bpbl9sb2NrX2luaXQoJnMtPmJ1ZmlvcmVxX2xvY2spOwotCi0gICAgcmMgPSBodm1faW9yZXFf c2VydmVyX2FsbG9jX3Jhbmdlc2V0cyhzLCBpc19kZWZhdWx0KTsKLSAgICBpZiAoIHJjICkKLSAg ICAgICAgcmV0dXJuIHJjOwotCi0gICAgaWYgKCBidWZpb3JlcV9oYW5kbGluZyA9PSBIVk1fSU9S RVFTUlZfQlVGSU9SRVFfQVRPTUlDICkKLSAgICAgICAgcy0+YnVmaW9yZXFfYXRvbWljID0gMTsK LQotICAgIHJjID0gaHZtX2lvcmVxX3NlcnZlcl9zZXR1cF9wYWdlcygKLSAgICAgICAgICAgICBz LCBpc19kZWZhdWx0LCBidWZpb3JlcV9oYW5kbGluZyAhPSBIVk1fSU9SRVFTUlZfQlVGSU9SRVFf T0ZGKTsKLSAgICBpZiAoIHJjICkKLSAgICAgICAgZ290byBmYWlsX21hcDsKLQotICAgIGZvcl9l YWNoX3ZjcHUgKCBkLCB2ICkKLSAgICB7Ci0gICAgICAgIHJjID0gaHZtX2lvcmVxX3NlcnZlcl9h ZGRfdmNwdShzLCBpc19kZWZhdWx0LCB2KTsKLSAgICAgICAgaWYgKCByYyApCi0gICAgICAgICAg ICBnb3RvIGZhaWxfYWRkOwotICAgIH0KLQotICAgIHJldHVybiAwOwotCi0gZmFpbF9hZGQ6Ci0g ICAgaHZtX2lvcmVxX3NlcnZlcl9yZW1vdmVfYWxsX3ZjcHVzKHMpOwotICAgIGh2bV9pb3JlcV9z ZXJ2ZXJfdW5tYXBfcGFnZXMocywgaXNfZGVmYXVsdCk7Ci0KLSBmYWlsX21hcDoKLSAgICBodm1f aW9yZXFfc2VydmVyX2ZyZWVfcmFuZ2VzZXRzKHMsIGlzX2RlZmF1bHQpOwotCi0gICAgcmV0dXJu IHJjOwotfQotCi1zdGF0aWMgdm9pZCBodm1faW9yZXFfc2VydmVyX2RlaW5pdChzdHJ1Y3QgaHZt X2lvcmVxX3NlcnZlciAqcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv b2xfdCBpc19kZWZhdWx0KQotewotICAgIEFTU0VSVCghcy0+ZW5hYmxlZCk7Ci0gICAgaHZtX2lv cmVxX3NlcnZlcl9yZW1vdmVfYWxsX3ZjcHVzKHMpOwotICAgIGh2bV9pb3JlcV9zZXJ2ZXJfdW5t YXBfcGFnZXMocywgaXNfZGVmYXVsdCk7Ci0gICAgaHZtX2lvcmVxX3NlcnZlcl9mcmVlX3Jhbmdl c2V0cyhzLCBpc19kZWZhdWx0KTsKLX0KLQotc3RhdGljIGlvc2VydmlkX3QgbmV4dF9pb3NlcnZp ZChzdHJ1Y3QgZG9tYWluICpkKQotewotICAgIHN0cnVjdCBodm1faW9yZXFfc2VydmVyICpzOwot ICAgIGlvc2VydmlkX3QgaWQ7Ci0gICAgCi0gICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZkLT5h cmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxvY2spKTsKLQotICAgIGlkID0gZC0+YXJjaC5o dm1fZG9tYWluLmlvcmVxX3NlcnZlci5pZDsKLQotIGFnYWluOgotICAgIGlkKys7Ci0KLSAgICAv KiBDaGVjayBmb3IgdW5pcXVlbmVzcyAqLwotICAgIGxpc3RfZm9yX2VhY2hfZW50cnkgKCBzLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZl ci5saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICkKLSAgICB7Ci0g ICAgICAgIGlmICggaWQgPT0gcy0+aWQgKQotICAgICAgICAgICAgZ290byBhZ2FpbjsKLSAgICB9 Ci0KLSAgICBkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmlkID0gaWQ7Ci0KLSAgICBy ZXR1cm4gaWQ7Ci19Ci0KLXN0YXRpYyBpbnQgaHZtX2NyZWF0ZV9pb3JlcV9zZXJ2ZXIoc3RydWN0 IGRvbWFpbiAqZCwgZG9taWRfdCBkb21pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYm9vbF90IGlzX2RlZmF1bHQsIGludCBidWZpb3JlcV9oYW5kbGluZywKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zZXJ2aWRfdCAqaWQpCi17Ci0gICAgc3RydWN0 IGh2bV9pb3JlcV9zZXJ2ZXIgKnM7Ci0gICAgaW50IHJjOwotCi0gICAgaWYgKCBidWZpb3JlcV9o YW5kbGluZyA+IEhWTV9JT1JFUVNSVl9CVUZJT1JFUV9BVE9NSUMgKQotICAgICAgICByZXR1cm4g LUVJTlZBTDsKLQotICAgIHJjID0gLUVOT01FTTsKLSAgICBzID0geHphbGxvYyhzdHJ1Y3QgaHZt X2lvcmVxX3NlcnZlcik7Ci0gICAgaWYgKCAhcyApCi0gICAgICAgIGdvdG8gZmFpbDE7Ci0KLSAg ICBkb21haW5fcGF1c2UoZCk7Ci0gICAgc3Bpbl9sb2NrKCZkLT5hcmNoLmh2bV9kb21haW4uaW9y ZXFfc2VydmVyLmxvY2spOwotCi0gICAgcmMgPSAtRUVYSVNUOwotICAgIGlmICggaXNfZGVmYXVs dCAmJiBkLT5hcmNoLmh2bV9kb21haW4uZGVmYXVsdF9pb3JlcV9zZXJ2ZXIgIT0gTlVMTCApCi0g ICAgICAgIGdvdG8gZmFpbDI7Ci0KLSAgICByYyA9IGh2bV9pb3JlcV9zZXJ2ZXJfaW5pdChzLCBk LCBkb21pZCwgaXNfZGVmYXVsdCwgYnVmaW9yZXFfaGFuZGxpbmcsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbmV4dF9pb3NlcnZpZChkKSk7Ci0gICAgaWYgKCByYyApCi0gICAgICAg IGdvdG8gZmFpbDM7Ci0KLSAgICBsaXN0X2FkZCgmcy0+bGlzdF9lbnRyeSwKLSAgICAgICAgICAg ICAmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZlci5saXN0KTsKLQotICAgIGlmICggaXNf ZGVmYXVsdCApCi0gICAgewotICAgICAgICBkLT5hcmNoLmh2bV9kb21haW4uZGVmYXVsdF9pb3Jl cV9zZXJ2ZXIgPSBzOwotICAgICAgICBodm1faW9yZXFfc2VydmVyX2VuYWJsZShzLCAxKTsKLSAg ICB9Ci0KLSAgICBpZiAoIGlkICkKLSAgICAgICAgKmlkID0gcy0+aWQ7Ci0KLSAgICBzcGluX3Vu bG9jaygmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZlci5sb2NrKTsKLSAgICBkb21haW5f dW5wYXVzZShkKTsKLQotICAgIHJldHVybiAwOwotCi0gZmFpbDM6Ci0gZmFpbDI6Ci0gICAgc3Bp bl91bmxvY2soJmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubG9jayk7Ci0gICAgZG9t YWluX3VucGF1c2UoZCk7Ci0KLSAgICB4ZnJlZShzKTsKLSBmYWlsMToKLSAgICByZXR1cm4gcmM7 Ci19Ci0KLXN0YXRpYyBpbnQgaHZtX2Rlc3Ryb3lfaW9yZXFfc2VydmVyKHN0cnVjdCBkb21haW4g KmQsIGlvc2VydmlkX3QgaWQpCi17Ci0gICAgc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnM7Ci0g ICAgaW50IHJjOwotCi0gICAgc3Bpbl9sb2NrKCZkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2Vy dmVyLmxvY2spOwotCi0gICAgcmMgPSAtRU5PRU5UOwotICAgIGxpc3RfZm9yX2VhY2hfZW50cnkg KCBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVx X3NlcnZlci5saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICkKLSAg ICB7Ci0gICAgICAgIGlmICggcyA9PSBkLT5hcmNoLmh2bV9kb21haW4uZGVmYXVsdF9pb3JlcV9z ZXJ2ZXIgKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCBzLT5pZCAhPSBp ZCApCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBkb21haW5fcGF1c2UoZCk7Ci0K LSAgICAgICAgaHZtX2lvcmVxX3NlcnZlcl9kaXNhYmxlKHMsIDApOwotCi0gICAgICAgIGxpc3Rf ZGVsKCZzLT5saXN0X2VudHJ5KTsKLSAgICAgICAgCi0gICAgICAgIGh2bV9pb3JlcV9zZXJ2ZXJf ZGVpbml0KHMsIDApOwotCi0gICAgICAgIGRvbWFpbl91bnBhdXNlKGQpOwotCi0gICAgICAgIHhm cmVlKHMpOwotCi0gICAgICAgIHJjID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg c3Bpbl91bmxvY2soJmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubG9jayk7Ci0KLSAg ICByZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgaHZtX2dldF9pb3JlcV9zZXJ2ZXJfaW5mbyhz dHJ1Y3QgZG9tYWluICpkLCBpb3NlcnZpZF90IGlkLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKmlvcmVxX3BmbiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpidWZpb3JlcV9wZm4sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZ0Y2huX3BvcnRfdCAqYnVmaW9yZXFfcG9y dCkKLXsKLSAgICBzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAqczsKLSAgICBpbnQgcmM7Ci0KLSAg ICBzcGluX2xvY2soJmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubG9jayk7Ci0KLSAg ICByYyA9IC1FTk9FTlQ7Ci0gICAgbGlzdF9mb3JfZWFjaF9lbnRyeSAoIHMsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICZkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxpc3QsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgKQotICAgIHsKLSAgICAgICAgaWYg KCBzID09IGQtPmFyY2guaHZtX2RvbWFpbi5kZWZhdWx0X2lvcmVxX3NlcnZlciApCi0gICAgICAg ICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoIHMtPmlkICE9IGlkICkKLSAgICAgICAgICAg IGNvbnRpbnVlOwotCi0gICAgICAgICppb3JlcV9wZm4gPSBzLT5pb3JlcS5nbWZuOwotCi0gICAg ICAgIGlmICggcy0+YnVmaW9yZXEudmEgIT0gTlVMTCApCi0gICAgICAgIHsKLSAgICAgICAgICAg ICpidWZpb3JlcV9wZm4gPSBzLT5idWZpb3JlcS5nbWZuOwotICAgICAgICAgICAgKmJ1ZmlvcmVx X3BvcnQgPSBzLT5idWZpb3JlcV9ldnRjaG47Ci0gICAgICAgIH0KLQotICAgICAgICByYyA9IDA7 Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHNwaW5fdW5sb2NrKCZkLT5hcmNoLmh2bV9k b21haW4uaW9yZXFfc2VydmVyLmxvY2spOwotCi0gICAgcmV0dXJuIHJjOwotfQotCi1zdGF0aWMg aW50IGh2bV9tYXBfaW9fcmFuZ2VfdG9faW9yZXFfc2VydmVyKHN0cnVjdCBkb21haW4gKmQsIGlv c2VydmlkX3QgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQzMl90IHR5cGUsIHVpbnQ2NF90IHN0YXJ0LCB1aW50NjRfdCBlbmQpCi17Ci0gICAgc3Ry dWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnM7Ci0gICAgaW50IHJjOwotCi0gICAgc3Bpbl9sb2NrKCZk LT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxvY2spOwotCi0gICAgcmMgPSAtRU5PRU5U OwotICAgIGxpc3RfZm9yX2VhY2hfZW50cnkgKCBzLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZlci5saXN0LAotICAgICAgICAgICAgICAg ICAgICAgICAgICBsaXN0X2VudHJ5ICkKLSAgICB7Ci0gICAgICAgIGlmICggcyA9PSBkLT5hcmNo Lmh2bV9kb21haW4uZGVmYXVsdF9pb3JlcV9zZXJ2ZXIgKQotICAgICAgICAgICAgY29udGludWU7 Ci0KLSAgICAgICAgaWYgKCBzLT5pZCA9PSBpZCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0 cnVjdCByYW5nZXNldCAqcjsKLQotICAgICAgICAgICAgc3dpdGNoICggdHlwZSApCi0gICAgICAg ICAgICB7Ci0gICAgICAgICAgICBjYXNlIEhWTU9QX0lPX1JBTkdFX1BPUlQ6Ci0gICAgICAgICAg ICBjYXNlIEhWTU9QX0lPX1JBTkdFX01FTU9SWToKLSAgICAgICAgICAgIGNhc2UgSFZNT1BfSU9f UkFOR0VfUENJOgotICAgICAgICAgICAgICAgIHIgPSBzLT5yYW5nZVt0eXBlXTsKLSAgICAgICAg ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBy ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAg ICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICAgICAgaWYgKCAhciApCi0gICAgICAgICAgICAg ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHJjID0gLUVFWElTVDsKLSAgICAgICAgICAgIGlmICgg cmFuZ2VzZXRfb3ZlcmxhcHNfcmFuZ2Uociwgc3RhcnQsIGVuZCkgKQotICAgICAgICAgICAgICAg IGJyZWFrOwotCi0gICAgICAgICAgICByYyA9IHJhbmdlc2V0X2FkZF9yYW5nZShyLCBzdGFydCwg ZW5kKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3Bpbl91 bmxvY2soJmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubG9jayk7Ci0KLSAgICByZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgaHZtX3VubWFwX2lvX3JhbmdlX2Zyb21faW9yZXFfc2Vy dmVyKHN0cnVjdCBkb21haW4gKmQsIGlvc2VydmlkX3QgaWQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0eXBlLCB1aW50NjRfdCBzdGFy dCwgdWludDY0X3QgZW5kKQotewotICAgIHN0cnVjdCBodm1faW9yZXFfc2VydmVyICpzOwotICAg IGludCByYzsKLQotICAgIHNwaW5fbG9jaygmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZl ci5sb2NrKTsKLQotICAgIHJjID0gLUVOT0VOVDsKLSAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5ICgg cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9z ZXJ2ZXIubGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9lbnRyeSApCi0gICAg ewotICAgICAgICBpZiAoIHMgPT0gZC0+YXJjaC5odm1fZG9tYWluLmRlZmF1bHRfaW9yZXFfc2Vy dmVyICkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICggcy0+aWQgPT0gaWQg KQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJ1Y3QgcmFuZ2VzZXQgKnI7Ci0KLSAgICAgICAg ICAgIHN3aXRjaCAoIHR5cGUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBIVk1P UF9JT19SQU5HRV9QT1JUOgotICAgICAgICAgICAgY2FzZSBIVk1PUF9JT19SQU5HRV9NRU1PUlk6 Ci0gICAgICAgICAgICBjYXNlIEhWTU9QX0lPX1JBTkdFX1BDSToKLSAgICAgICAgICAgICAgICBy ID0gcy0+cmFuZ2VbdHlwZV07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgciA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKLSAgICAgICAg ICAgIGlmICggIXIgKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICByYyA9 IC1FTk9FTlQ7Ci0gICAgICAgICAgICBpZiAoICFyYW5nZXNldF9jb250YWluc19yYW5nZShyLCBz dGFydCwgZW5kKSApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHJjID0g cmFuZ2VzZXRfcmVtb3ZlX3JhbmdlKHIsIHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzcGluX3VubG9jaygmZC0+YXJjaC5odm1fZG9tYWlu LmlvcmVxX3NlcnZlci5sb2NrKTsKLQotICAgIHJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBo dm1fc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZShzdHJ1Y3QgZG9tYWluICpkLCBpb3NlcnZpZF90IGlk LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sX3QgZW5hYmxlZCkK K3ZvaWQgaHZtX2RvX3Jlc3VtZShzdHJ1Y3QgdmNwdSAqdikKIHsKLSAgICBzdHJ1Y3QgbGlzdF9o ZWFkICplbnRyeTsKLSAgICBpbnQgcmM7CisgICAgY2hlY2tfd2FrZXVwX2Zyb21fd2FpdCgpOwog Ci0gICAgc3Bpbl9sb2NrKCZkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxvY2spOwor ICAgIGlmICggaXNfaHZtX2RvbWFpbih2LT5kb21haW4pICkKKyAgICAgICAgcHRfcmVzdG9yZV90 aW1lcih2KTsKIAotICAgIHJjID0gLUVOT0VOVDsKLSAgICBsaXN0X2Zvcl9lYWNoICggZW50cnks Ci0gICAgICAgICAgICAgICAgICAgICZkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxp c3QgKQotICAgIHsKLSAgICAgICAgc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnMgPSBsaXN0X2Vu dHJ5KGVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaXN0X2VudHJ5KTsKKyAgICBpZiAoICFoYW5kbGVfaHZtX2lv X2NvbXBsZXRpb24odikgKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKCBzID09IGQt PmFyY2guaHZtX2RvbWFpbi5kZWZhdWx0X2lvcmVxX3NlcnZlciApCi0gICAgICAgICAgICBjb250 aW51ZTsKKyAgICBpZiAoIHVubGlrZWx5KHYtPmFyY2gudm1fZXZlbnQpICkKKyAgICB7CisgICAg ICAgIHN0cnVjdCBtb25pdG9yX3dyaXRlX2RhdGEgKncgPSAmdi0+YXJjaC52bV9ldmVudC0+d3Jp dGVfZGF0YTsKIAotICAgICAgICBpZiAoIHMtPmlkICE9IGlkICkKLSAgICAgICAgICAgIGNvbnRp bnVlOworICAgICAgICBpZiAoIHYtPmFyY2gudm1fZXZlbnQtPmVtdWxhdGVfZmxhZ3MgKQorICAg ICAgICB7CisgICAgICAgICAgICBlbnVtIGVtdWxfa2luZCBraW5kID0gRU1VTF9LSU5EX05PUk1B TDsKIAotICAgICAgICBkb21haW5fcGF1c2UoZCk7CisgICAgICAgICAgICBpZiAoIHYtPmFyY2gu dm1fZXZlbnQtPmVtdWxhdGVfZmxhZ3MgJgorICAgICAgICAgICAgICAgICBWTV9FVkVOVF9GTEFH X1NFVF9FTVVMX1JFQURfREFUQSApCisgICAgICAgICAgICAgICAga2luZCA9IEVNVUxfS0lORF9T RVRfQ09OVEVYVDsKKyAgICAgICAgICAgIGVsc2UgaWYgKCB2LT5hcmNoLnZtX2V2ZW50LT5lbXVs YXRlX2ZsYWdzICYKKyAgICAgICAgICAgICAgICAgICAgICBWTV9FVkVOVF9GTEFHX0VNVUxBVEVf Tk9XUklURSApCisgICAgICAgICAgICAgICAga2luZCA9IEVNVUxfS0lORF9OT1dSSVRFOwogCi0g ICAgICAgIGlmICggZW5hYmxlZCApCi0gICAgICAgICAgICBodm1faW9yZXFfc2VydmVyX2VuYWJs ZShzLCAwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaHZtX2lvcmVxX3NlcnZlcl9kaXNh YmxlKHMsIDApOworICAgICAgICAgICAgaHZtX21lbV9hY2Nlc3NfZW11bGF0ZV9vbmUoa2luZCwg VFJBUF9pbnZhbGlkX29wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SFZNX0RFTElWRVJfTk9fRVJST1JfQ09ERSk7CiAKLSAgICAgICAgZG9tYWluX3VucGF1c2UoZCk7 CisgICAgICAgICAgICB2LT5hcmNoLnZtX2V2ZW50LT5lbXVsYXRlX2ZsYWdzID0gMDsKKyAgICAg ICAgfQogCi0gICAgICAgIHJjID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBp ZiAoIHctPmRvX3dyaXRlLm1zciApCisgICAgICAgIHsKKyAgICAgICAgICAgIGh2bV9tc3Jfd3Jp dGVfaW50ZXJjZXB0KHctPm1zciwgdy0+dmFsdWUsIDApOworICAgICAgICAgICAgdy0+ZG9fd3Jp dGUubXNyID0gMDsKKyAgICAgICAgfQogCi0gICAgc3Bpbl91bmxvY2soJmQtPmFyY2guaHZtX2Rv bWFpbi5pb3JlcV9zZXJ2ZXIubG9jayk7Ci0gICAgcmV0dXJuIHJjOwotfQorICAgICAgICBpZiAo IHctPmRvX3dyaXRlLmNyMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGh2bV9zZXRfY3IwKHct PmNyMCwgMCk7CisgICAgICAgICAgICB3LT5kb193cml0ZS5jcjAgPSAwOworICAgICAgICB9CiAK LXN0YXRpYyBpbnQgaHZtX2FsbF9pb3JlcV9zZXJ2ZXJzX2FkZF92Y3B1KHN0cnVjdCBkb21haW4g KmQsIHN0cnVjdCB2Y3B1ICp2KQotewotICAgIHN0cnVjdCBodm1faW9yZXFfc2VydmVyICpzOwot ICAgIGludCByYzsKKyAgICAgICAgaWYgKCB3LT5kb193cml0ZS5jcjQgKQorICAgICAgICB7Cisg ICAgICAgICAgICBodm1fc2V0X2NyNCh3LT5jcjQsIDApOworICAgICAgICAgICAgdy0+ZG9fd3Jp dGUuY3I0ID0gMDsKKyAgICAgICAgfQogCi0gICAgc3Bpbl9sb2NrKCZkLT5hcmNoLmh2bV9kb21h aW4uaW9yZXFfc2VydmVyLmxvY2spOworICAgICAgICBpZiAoIHctPmRvX3dyaXRlLmNyMyApCisg ICAgICAgIHsKKyAgICAgICAgICAgIGh2bV9zZXRfY3IzKHctPmNyMywgMCk7CisgICAgICAgICAg ICB3LT5kb193cml0ZS5jcjMgPSAwOworICAgICAgICB9CisgICAgfQogCi0gICAgbGlzdF9mb3Jf ZWFjaF9lbnRyeSAoIHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZkLT5hcmNoLmh2bV9k b21haW4uaW9yZXFfc2VydmVyLmxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rf ZW50cnkgKQorICAgIC8qIEluamVjdCBwZW5kaW5nIGh3L3N3IHRyYXAgKi8KKyAgICBpZiAoIHYt PmFyY2guaHZtX3ZjcHUuaW5qZWN0X3RyYXAudmVjdG9yICE9IC0xICkKICAgICB7Ci0gICAgICAg IGJvb2xfdCBpc19kZWZhdWx0ID0gKHMgPT0gZC0+YXJjaC5odm1fZG9tYWluLmRlZmF1bHRfaW9y ZXFfc2VydmVyKTsKLQotICAgICAgICByYyA9IGh2bV9pb3JlcV9zZXJ2ZXJfYWRkX3ZjcHUocywg aXNfZGVmYXVsdCwgdik7Ci0gICAgICAgIGlmICggcmMgKQotICAgICAgICAgICAgZ290byBmYWls OworICAgICAgICBodm1faW5qZWN0X3RyYXAoJnYtPmFyY2guaHZtX3ZjcHUuaW5qZWN0X3RyYXAp OworICAgICAgICB2LT5hcmNoLmh2bV92Y3B1LmluamVjdF90cmFwLnZlY3RvciA9IC0xOwogICAg IH0KLQotICAgIHNwaW5fdW5sb2NrKCZkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxv Y2spOwotCi0gICAgcmV0dXJuIDA7Ci0KLSBmYWlsOgotICAgIGxpc3RfZm9yX2VhY2hfZW50cnkg KCBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVx X3NlcnZlci5saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICkKLSAg ICAgICAgaHZtX2lvcmVxX3NlcnZlcl9yZW1vdmVfdmNwdShzLCB2KTsKLQotICAgIHNwaW5fdW5s b2NrKCZkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxvY2spOwotCi0gICAgcmV0dXJu IHJjOwotfQotCi1zdGF0aWMgdm9pZCBodm1fYWxsX2lvcmVxX3NlcnZlcnNfcmVtb3ZlX3ZjcHUo c3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IHZjcHUgKnYpCi17Ci0gICAgc3RydWN0IGh2bV9pb3Jl cV9zZXJ2ZXIgKnM7Ci0KLSAgICBzcGluX2xvY2soJmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9z ZXJ2ZXIubG9jayk7Ci0KLSAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5ICggcywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgJmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubGlzdCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9lbnRyeSApCi0gICAgICAgIGh2bV9pb3JlcV9z ZXJ2ZXJfcmVtb3ZlX3ZjcHUocywgdik7Ci0KLSAgICBzcGluX3VubG9jaygmZC0+YXJjaC5odm1f ZG9tYWluLmlvcmVxX3NlcnZlci5sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgaHZtX2Rlc3Ryb3lf YWxsX2lvcmVxX3NlcnZlcnMoc3RydWN0IGRvbWFpbiAqZCkKK3N0YXRpYyBpbnQgaHZtX3ByaW50 X2xpbmUoCisgICAgaW50IGRpciwgdW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRl cywgdWludDMyX3QgKnZhbCkKIHsKLSAgICBzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAqcywgKm5l eHQ7CisgICAgc3RydWN0IGRvbWFpbiAqY2QgPSBjdXJyZW50LT5kb21haW47CisgICAgY2hhciBj ID0gKnZhbDsKIAotICAgIHNwaW5fbG9jaygmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZl ci5sb2NrKTsKKyAgICBCVUdfT04oYnl0ZXMgIT0gMSk7CiAKLSAgICAvKiBObyBuZWVkIHRvIGRv bWFpbl9wYXVzZSgpIGFzIHRoZSBkb21haW4gaXMgYmVpbmcgdG9ybiBkb3duICovCisgICAgLyog QWNjZXB0IG9ubHkgcHJpbnRhYmxlIGNoYXJhY3RlcnMsIG5ld2xpbmUsIGFuZCBob3Jpem9udGFs IHRhYi4gKi8KKyAgICBpZiAoICFpc3ByaW50KGMpICYmIChjICE9ICdcbicpICYmIChjICE9ICdc dCcpICkKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKIAotICAgIGxpc3RfZm9yX2VhY2hf ZW50cnlfc2FmZSAoIHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3Nl cnZlci5saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgKQor ICAgIHNwaW5fbG9jaygmY2QtPnBidWZfbG9jayk7CisgICAgaWYgKCBjICE9ICdcbicgKQorICAg ICAgICBjZC0+cGJ1ZltjZC0+cGJ1Zl9pZHgrK10gPSBjOworICAgIGlmICggKGNkLT5wYnVmX2lk eCA9PSAoRE9NQUlOX1BCVUZfU0laRSAtIDEpKSB8fCAoYyA9PSAnXG4nKSApCiAgICAgewotICAg ICAgICBib29sX3QgaXNfZGVmYXVsdCA9IChzID09IGQtPmFyY2guaHZtX2RvbWFpbi5kZWZhdWx0 X2lvcmVxX3NlcnZlcik7Ci0KLSAgICAgICAgaHZtX2lvcmVxX3NlcnZlcl9kaXNhYmxlKHMsIGlz X2RlZmF1bHQpOwotCi0gICAgICAgIGlmICggaXNfZGVmYXVsdCApCi0gICAgICAgICAgICBkLT5h cmNoLmh2bV9kb21haW4uZGVmYXVsdF9pb3JlcV9zZXJ2ZXIgPSBOVUxMOwotCi0gICAgICAgIGxp c3RfZGVsKCZzLT5saXN0X2VudHJ5KTsKLSAgICAgICAgCi0gICAgICAgIGh2bV9pb3JlcV9zZXJ2 ZXJfZGVpbml0KHMsIGlzX2RlZmF1bHQpOwotCi0gICAgICAgIHhmcmVlKHMpOworICAgICAgICBj ZC0+cGJ1ZltjZC0+cGJ1Zl9pZHhdID0gJ1wwJzsKKyAgICAgICAgZ3Vlc3RfcHJpbnRrKGNkLCBY RU5MT0dfR19ERUJVRyAiJXNcbiIsIGNkLT5wYnVmKTsKKyAgICAgICAgY2QtPnBidWZfaWR4ID0g MDsKICAgICB9CisgICAgc3Bpbl91bmxvY2soJmNkLT5wYnVmX2xvY2spOwogCi0gICAgc3Bpbl91 bmxvY2soJmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubG9jayk7Ci19Ci0KLXN0YXRp YyBpbnQgaHZtX3JlcGxhY2VfZXZlbnRfY2hhbm5lbChzdHJ1Y3QgdmNwdSAqdiwgZG9taWRfdCBy ZW1vdGVfZG9taWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZ0Y2hu X3BvcnRfdCAqcF9wb3J0KQotewotICAgIGludCBvbGRfcG9ydCwgbmV3X3BvcnQ7Ci0KLSAgICBu ZXdfcG9ydCA9IGFsbG9jX3VuYm91bmRfeGVuX2V2ZW50X2NoYW5uZWwodi0+ZG9tYWluLCB2LT52 Y3B1X2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZW1vdGVfZG9taWQsIE5VTEwpOwotICAgIGlmICggbmV3X3BvcnQgPCAwICkKLSAgICAgICAgcmV0 dXJuIG5ld19wb3J0OwotCi0gICAgLyogeGNoZygpIGVuc3VyZXMgdGhhdCBvbmx5IHdlIGNhbGwg ZnJlZV94ZW5fZXZlbnRfY2hhbm5lbCgpLiAqLwotICAgIG9sZF9wb3J0ID0geGNoZyhwX3BvcnQs IG5ld19wb3J0KTsKLSAgICBmcmVlX3hlbl9ldmVudF9jaGFubmVsKHYtPmRvbWFpbiwgb2xkX3Bv cnQpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBYODZFTVVMX09LQVk7CiB9CiAKLXN0YXRp YyBpbnQgaHZtX3NldF9kbV9kb21haW4oc3RydWN0IGRvbWFpbiAqZCwgZG9taWRfdCBkb21pZCkK K3N0YXRpYyBpbnQgaGFuZGxlX3B2aF9pbygKKyAgICBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgcG9y dCwgdW5zaWduZWQgaW50IGJ5dGVzLCB1aW50MzJfdCAqdmFsKQogewotICAgIHN0cnVjdCBodm1f aW9yZXFfc2VydmVyICpzOwotICAgIGludCByYyA9IDA7Ci0KLSAgICBzcGluX2xvY2soJmQtPmFy Y2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubG9jayk7Ci0KLSAgICAvKgotICAgICAqIExhY2sg b2YgaW9yZXEgc2VydmVyIGlzIG5vdCBhIGZhaWx1cmUuIEhWTV9QQVJBTV9ETV9ET01BSU4gd2ls bAotICAgICAqIHN0aWxsIGJlIHNldCBhbmQgdGh1cywgd2hlbiB0aGUgc2VydmVyIGlzIGNyZWF0 ZWQsIGl0IHdpbGwgaGF2ZQotICAgICAqIHRoZSBjb3JyZWN0IGRvbWlkLgotICAgICAqLwotICAg IHMgPSBkLT5hcmNoLmh2bV9kb21haW4uZGVmYXVsdF9pb3JlcV9zZXJ2ZXI7Ci0gICAgaWYgKCAh cyApCi0gICAgICAgIGdvdG8gZG9uZTsKLQotICAgIGRvbWFpbl9wYXVzZShkKTsKLSAgICBzcGlu X2xvY2soJnMtPmxvY2spOwotCi0gICAgaWYgKCBzLT5kb21pZCAhPSBkb21pZCApIAotICAgIHsK LSAgICAgICAgc3RydWN0IGh2bV9pb3JlcV92Y3B1ICpzdjsKLQotICAgICAgICBsaXN0X2Zvcl9l YWNoX2VudHJ5ICggc3YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcy0+aW9yZXFf dmNwdV9saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9lbnRyeSApCi0g ICAgICAgIHsKLSAgICAgICAgICAgIHN0cnVjdCB2Y3B1ICp2ID0gc3YtPnZjcHU7Ci0KLSAgICAg ICAgICAgIGlmICggdi0+dmNwdV9pZCA9PSAwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg ICAgICByYyA9IGh2bV9yZXBsYWNlX2V2ZW50X2NoYW5uZWwodiwgZG9taWQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzLT5idWZpb3JlcV9ldnRjaG4p OwotICAgICAgICAgICAgICAgIGlmICggcmMgKQotICAgICAgICAgICAgICAgICAgICBicmVhazsK LQotICAgICAgICAgICAgICAgIGQtPmFyY2guaHZtX2RvbWFpbi5wYXJhbXNbSFZNX1BBUkFNX0JV RklPUkVRX0VWVENITl0gPQotICAgICAgICAgICAgICAgICAgICBzLT5idWZpb3JlcV9ldnRjaG47 Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJjID0gaHZtX3JlcGxhY2VfZXZlbnRfY2hh bm5lbCh2LCBkb21pZCwgJnN2LT5pb3JlcV9ldnRjaG4pOwotICAgICAgICAgICAgaWYgKCByYyAp Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGh2bV91cGRhdGVfaW9yZXFf ZXZ0Y2huKHMsIHN2KTsKLSAgICAgICAgfQotCi0gICAgICAgIHMtPmRvbWlkID0gZG9taWQ7Ci0g ICAgfQorICAgIHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3VycmVudC0+ZG9tYWluOwogCi0gICAg c3Bpbl91bmxvY2soJnMtPmxvY2spOwotICAgIGRvbWFpbl91bnBhdXNlKGQpOworICAgIGlmICgg ZGlyID09IElPUkVRX1dSSVRFICkKKyAgICAgICAgZ3Vlc3RfaW9fd3JpdGUocG9ydCwgYnl0ZXMs ICp2YWwsIGN1cnJkKTsKKyAgICBlbHNlCisgICAgICAgICp2YWwgPSBndWVzdF9pb19yZWFkKHBv cnQsIGJ5dGVzLCBjdXJyZCk7CiAKLSBkb25lOgotICAgIHNwaW5fdW5sb2NrKCZkLT5hcmNoLmh2 bV9kb21haW4uaW9yZXFfc2VydmVyLmxvY2spOwotICAgIHJldHVybiByYzsKKyAgICByZXR1cm4g WDg2RU1VTF9PS0FZOwogfQogCiBpbnQgaHZtX2RvbWFpbl9pbml0aWFsaXNlKHN0cnVjdCBkb21h aW4gKmQpCkBAIC0xNjI4LDggKzU4Miw2IEBAIGludCBodm1fZG9tYWluX2luaXRpYWxpc2Uoc3Ry dWN0IGRvbWFpbiAqZCkKIAogICAgIH0KIAotICAgIHNwaW5fbG9ja19pbml0KCZkLT5hcmNoLmh2 bV9kb21haW4uaW9yZXFfc2VydmVyLmxvY2spOwotICAgIElOSVRfTElTVF9IRUFEKCZkLT5hcmNo Lmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxpc3QpOwogICAgIHNwaW5fbG9ja19pbml0KCZkLT5h cmNoLmh2bV9kb21haW4uaXJxX2xvY2spOwogICAgIHNwaW5fbG9ja19pbml0KCZkLT5hcmNoLmh2 bV9kb21haW4udWNfbG9jayk7CiAgICAgc3Bpbl9sb2NrX2luaXQoJmQtPmFyY2guaHZtX2RvbWFp bi53cml0ZV9tYXAubG9jayk7CkBAIC0xNjkyLDcgKzY0NCw4IEBAIGludCBodm1fZG9tYWluX2lu aXRpYWxpc2Uoc3RydWN0IGRvbWFpbiAqZCkKICAgICBtc2l4dGJsX2luaXQoZCk7CiAKICAgICBy ZWdpc3Rlcl9wb3J0aW9faGFuZGxlcihkLCAweGU5LCAxLCBodm1fcHJpbnRfbGluZSk7Ci0gICAg cmVnaXN0ZXJfcG9ydGlvX2hhbmRsZXIoZCwgMHhjZjgsIDQsIGh2bV9hY2Nlc3NfY2Y4KTsKKwor ICAgIGh2bV9pb3JlcV9pbml0KGQpOwogCiAgICAgaWYgKCBodm1fdHNjX3NjYWxpbmdfc3VwcG9y dGVkICkKICAgICAgICAgZC0+YXJjaC5odm1fZG9tYWluLnRzY19zY2FsaW5nX3JhdGlvID0gaHZt X2RlZmF1bHRfdHNjX3NjYWxpbmdfcmF0aW87CkBAIC0yNjUyLDI3MCArMTYwNSw2IEBAIHZvaWQg aHZtX3ZjcHVfZG93bihzdHJ1Y3QgdmNwdSAqdikKICAgICB9CiB9CiAKLXN0cnVjdCBodm1faW9y ZXFfc2VydmVyICpodm1fc2VsZWN0X2lvcmVxX3NlcnZlcihzdHJ1Y3QgZG9tYWluICpkLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvcmVxX3QgKnAp Ci17Ci0gICAgc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnM7Ci0gICAgdWludDMyX3QgY2Y4Owot ICAgIHVpbnQ4X3QgdHlwZTsKLSAgICB1aW50NjRfdCBhZGRyOwotCi0gICAgaWYgKCBsaXN0X2Vt cHR5KCZkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxpc3QpICkKLSAgICAgICAgcmV0 dXJuIE5VTEw7Ci0KLSAgICBpZiAoIHAtPnR5cGUgIT0gSU9SRVFfVFlQRV9DT1BZICYmIHAtPnR5 cGUgIT0gSU9SRVFfVFlQRV9QSU8gKQotICAgICAgICByZXR1cm4gZC0+YXJjaC5odm1fZG9tYWlu LmRlZmF1bHRfaW9yZXFfc2VydmVyOwotCi0gICAgY2Y4ID0gZC0+YXJjaC5odm1fZG9tYWluLnBj aV9jZjg7Ci0KLSAgICBpZiAoIHAtPnR5cGUgPT0gSU9SRVFfVFlQRV9QSU8gJiYKLSAgICAgICAg IChwLT5hZGRyICYgfjMpID09IDB4Y2ZjICYmCi0gICAgICAgICBDRjhfRU5BQkxFRChjZjgpICkK LSAgICB7Ci0gICAgICAgIHVpbnQzMl90IHNiZGY7Ci0KLSAgICAgICAgLyogUENJIGNvbmZpZyBk YXRhIGN5Y2xlICovCi0KLSAgICAgICAgc2JkZiA9IEhWTU9QX1BDSV9TQkRGKDAsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQQ0lfQlVTKENGOF9CREYoY2Y4KSksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQQ0lfU0xPVChDRjhfQkRGKGNmOCkpLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUENJX0ZVTkMoQ0Y4X0JERihjZjgpKSk7Ci0KLSAgICAgICAgdHlw ZSA9IEhWTU9QX0lPX1JBTkdFX1BDSTsKLSAgICAgICAgYWRkciA9ICgodWludDY0X3Qpc2JkZiA8 PCAzMikgfAotICAgICAgICAgICAgICAgQ0Y4X0FERFJfTE8oY2Y4KSB8Ci0gICAgICAgICAgICAg ICAocC0+YWRkciAmIDMpOwotICAgICAgICAvKiBBTUQgZXh0ZW5kZWQgY29uZmlndXJhdGlvbiBz cGFjZSBhY2Nlc3M/ICovCi0gICAgICAgIGlmICggQ0Y4X0FERFJfSEkoY2Y4KSAmJgotICAgICAg ICAgICAgIGQtPmFyY2gueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCAmJgotICAgICAgICAg ICAgIGQtPmFyY2gueDg2ID49IDB4MTAgJiYgZC0+YXJjaC54ODYgPD0gMHgxNyApCi0gICAgICAg IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IG1zcl92YWw7Ci0KLSAgICAgICAgICAgIGlmICggIXJk bXNyX3NhZmUoTVNSX0FNRDY0X05CX0NGRywgbXNyX3ZhbCkgJiYKLSAgICAgICAgICAgICAgICAg KG1zcl92YWwgJiAoMVVMTCA8PCBBTUQ2NF9OQl9DRkdfQ0Y4X0VYVF9FTkFCTEVfQklUKSkgKQot ICAgICAgICAgICAgICAgIGFkZHIgfD0gQ0Y4X0FERFJfSEkoY2Y4KTsKLSAgICAgICAgfQotICAg IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICB0eXBlID0gKHAtPnR5cGUgPT0gSU9SRVFfVFlQ RV9QSU8pID8KLSAgICAgICAgICAgICAgICBIVk1PUF9JT19SQU5HRV9QT1JUIDogSFZNT1BfSU9f UkFOR0VfTUVNT1JZOwotICAgICAgICBhZGRyID0gcC0+YWRkcjsKLSAgICB9Ci0KLSAgICBsaXN0 X2Zvcl9lYWNoX2VudHJ5ICggcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmQtPmFyY2gu aHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg bGlzdF9lbnRyeSApCi0gICAgewotICAgICAgICBzdHJ1Y3QgcmFuZ2VzZXQgKnI7Ci0KLSAgICAg ICAgaWYgKCBzID09IGQtPmFyY2guaHZtX2RvbWFpbi5kZWZhdWx0X2lvcmVxX3NlcnZlciApCi0g ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoICFzLT5lbmFibGVkICkKLSAgICAg ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHIgPSBzLT5yYW5nZVt0eXBlXTsKLQotICAgICAg ICBzd2l0Y2ggKCB0eXBlICkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBl bmQ7Ci0KLSAgICAgICAgY2FzZSBIVk1PUF9JT19SQU5HRV9QT1JUOgotICAgICAgICAgICAgZW5k ID0gYWRkciArIHAtPnNpemUgLSAxOwotICAgICAgICAgICAgaWYgKCByYW5nZXNldF9jb250YWlu c19yYW5nZShyLCBhZGRyLCBlbmQpICkKLSAgICAgICAgICAgICAgICByZXR1cm4gczsKLQotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSFZNT1BfSU9fUkFOR0VfTUVNT1JZOgotICAg ICAgICAgICAgZW5kID0gYWRkciArIChwLT5zaXplICogcC0+Y291bnQpIC0gMTsKLSAgICAgICAg ICAgIGlmICggcmFuZ2VzZXRfY29udGFpbnNfcmFuZ2UociwgYWRkciwgZW5kKSApCi0gICAgICAg ICAgICAgICAgcmV0dXJuIHM7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEhW TU9QX0lPX1JBTkdFX1BDSToKLSAgICAgICAgICAgIGlmICggcmFuZ2VzZXRfY29udGFpbnNfc2lu Z2xldG9uKHIsIGFkZHIgPj4gMzIpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBw LT50eXBlID0gSU9SRVFfVFlQRV9QQ0lfQ09ORklHOwotICAgICAgICAgICAgICAgIHAtPmFkZHIg PSBhZGRyOwotICAgICAgICAgICAgICAgIHJldHVybiBzOwotICAgICAgICAgICAgfQotCi0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBkLT5hcmNoLmh2 bV9kb21haW4uZGVmYXVsdF9pb3JlcV9zZXJ2ZXI7Ci19Ci0KLXN0YXRpYyBpbnQgaHZtX3NlbmRf YnVmZmVyZWRfaW9yZXEoc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnMsIGlvcmVxX3QgKnApCi17 Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IGN1cnJlbnQtPmRvbWFpbjsKLSAgICBzdHJ1Y3QgaHZt X2lvcmVxX3BhZ2UgKmlvcnA7Ci0gICAgYnVmZmVyZWRfaW9wYWdlX3QgKnBnOwotICAgIGJ1Zl9p b3JlcV90IGJwID0geyAuZGF0YSA9IHAtPmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgIC5h ZGRyID0gcC0+YWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgPSBwLT50eXBlLAot ICAgICAgICAgICAgICAgICAgICAgICAuZGlyID0gcC0+ZGlyIH07Ci0gICAgLyogVGltZW9mZnNl dCBzZW5kcyA2NGIgZGF0YSwgYnV0IG5vIGFkZHJlc3MuIFVzZSB0d28gY29uc2VjdXRpdmUgc2xv dHMuICovCi0gICAgaW50IHF3ID0gMDsKLQotICAgIC8qIEVuc3VyZSBidWZmZXJlZF9pb3BhZ2Ug Zml0cyBpbiBhIHBhZ2UgKi8KLSAgICBCVUlMRF9CVUdfT04oc2l6ZW9mKGJ1ZmZlcmVkX2lvcGFn ZV90KSA+IFBBR0VfU0laRSk7Ci0KLSAgICBpb3JwID0gJnMtPmJ1ZmlvcmVxOwotICAgIHBnID0g aW9ycC0+dmE7Ci0KLSAgICBpZiAoICFwZyApCi0gICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFO RExFQUJMRTsKLQotICAgIC8qCi0gICAgICogUmV0dXJuIDAgZm9yIHRoZSBjYXNlcyB3ZSBjYW4n dCBkZWFsIHdpdGg6Ci0gICAgICogIC0gJ2FkZHInIGlzIG9ubHkgYSAyMC1iaXQgZmllbGQsIHNv IHdlIGNhbm5vdCBhZGRyZXNzIGJleW9uZCAxTUIKLSAgICAgKiAgLSB3ZSBjYW5ub3QgYnVmZmVy IGFjY2Vzc2VzIHRvIGd1ZXN0IG1lbW9yeSBidWZmZXJzLCBhcyB0aGUgZ3Vlc3QKLSAgICAgKiAg ICBtYXkgZXhwZWN0IHRoZSBtZW1vcnkgYnVmZmVyIHRvIGJlIHN5bmNocm9ub3VzbHkgYWNjZXNz ZWQKLSAgICAgKiAgLSB0aGUgY291bnQgZmllbGQgaXMgdXN1YWxseSB1c2VkIHdpdGggZGF0YV9p c19wdHIgYW5kIHNpbmNlIHdlIGRvbid0Ci0gICAgICogICAgc3VwcG9ydCBkYXRhX2lzX3B0ciB3 ZSBkbyBub3Qgd2FzdGUgc3BhY2UgZm9yIHRoZSBjb3VudCBmaWVsZCBlaXRoZXIKLSAgICAgKi8K LSAgICBpZiAoIChwLT5hZGRyID4gMHhmZmZmZnVsKSB8fCBwLT5kYXRhX2lzX3B0ciB8fCAocC0+ Y291bnQgIT0gMSkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHN3aXRjaCAoIHAtPnNpemUg KQotICAgIHsKLSAgICBjYXNlIDE6Ci0gICAgICAgIGJwLnNpemUgPSAwOwotICAgICAgICBicmVh azsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGJwLnNpemUgPSAxOwotICAgICAgICBicmVhazsKLSAg ICBjYXNlIDQ6Ci0gICAgICAgIGJwLnNpemUgPSAyOwotICAgICAgICBicmVhazsKLSAgICBjYXNl IDg6Ci0gICAgICAgIGJwLnNpemUgPSAzOwotICAgICAgICBxdyA9IDE7Ci0gICAgICAgIGJyZWFr OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAidW5leHBl Y3RlZCBpb3JlcSBzaXplOiAldVxuIiwgcC0+c2l6ZSk7Ci0gICAgICAgIHJldHVybiBYODZFTVVM X1VOSEFORExFQUJMRTsKLSAgICB9Ci0KLSAgICBzcGluX2xvY2soJnMtPmJ1ZmlvcmVxX2xvY2sp OwotCi0gICAgaWYgKCAocGctPnB0cnMud3JpdGVfcG9pbnRlciAtIHBnLT5wdHJzLnJlYWRfcG9p bnRlcikgPj0KLSAgICAgICAgIChJT1JFUV9CVUZGRVJfU0xPVF9OVU0gLSBxdykgKQotICAgIHsK LSAgICAgICAgLyogVGhlIHF1ZXVlIGlzIGZ1bGw6IHNlbmQgdGhlIGlvcGFja2V0IHRocm91Z2gg dGhlIG5vcm1hbCBwYXRoLiAqLwotICAgICAgICBzcGluX3VubG9jaygmcy0+YnVmaW9yZXFfbG9j ayk7Ci0gICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLSAgICB9Ci0KLSAgICBw Zy0+YnVmX2lvcmVxW3BnLT5wdHJzLndyaXRlX3BvaW50ZXIgJSBJT1JFUV9CVUZGRVJfU0xPVF9O VU1dID0gYnA7Ci0KLSAgICBpZiAoIHF3ICkKLSAgICB7Ci0gICAgICAgIGJwLmRhdGEgPSBwLT5k YXRhID4+IDMyOwotICAgICAgICBwZy0+YnVmX2lvcmVxWyhwZy0+cHRycy53cml0ZV9wb2ludGVy KzEpICUgSU9SRVFfQlVGRkVSX1NMT1RfTlVNXSA9IGJwOwotICAgIH0KLQotICAgIC8qIE1ha2Ug dGhlIGlvcmVxX3QgdmlzaWJsZSAvYmVmb3JlLyB3cml0ZV9wb2ludGVyLiAqLwotICAgIHdtYigp OwotICAgIHBnLT5wdHJzLndyaXRlX3BvaW50ZXIgKz0gcXcgPyAyIDogMTsKLQotICAgIC8qIENh bm9uaWNhbGl6ZSByZWFkL3dyaXRlIHBvaW50ZXJzIHRvIHByZXZlbnQgdGhlaXIgb3ZlcmZsb3cu ICovCi0gICAgd2hpbGUgKCBzLT5idWZpb3JlcV9hdG9taWMgJiYgcXcrKyA8IElPUkVRX0JVRkZF Ul9TTE9UX05VTSAmJgotICAgICAgICAgICAgcGctPnB0cnMucmVhZF9wb2ludGVyID49IElPUkVR X0JVRkZFUl9TTE9UX05VTSApCi0gICAgewotICAgICAgICB1bmlvbiBidWZpb3JlcV9wb2ludGVy cyBvbGQgPSBwZy0+cHRycywgbmV3OwotICAgICAgICB1bnNpZ25lZCBpbnQgbiA9IG9sZC5yZWFk X3BvaW50ZXIgLyBJT1JFUV9CVUZGRVJfU0xPVF9OVU07Ci0KLSAgICAgICAgbmV3LnJlYWRfcG9p bnRlciA9IG9sZC5yZWFkX3BvaW50ZXIgLSBuICogSU9SRVFfQlVGRkVSX1NMT1RfTlVNOwotICAg ICAgICBuZXcud3JpdGVfcG9pbnRlciA9IG9sZC53cml0ZV9wb2ludGVyIC0gbiAqIElPUkVRX0JV RkZFUl9TTE9UX05VTTsKLSAgICAgICAgY21weGNoZygmcGctPnB0cnMuZnVsbCwgb2xkLmZ1bGws IG5ldy5mdWxsKTsKLSAgICB9Ci0KLSAgICBub3RpZnlfdmlhX3hlbl9ldmVudF9jaGFubmVsKGQs IHMtPmJ1ZmlvcmVxX2V2dGNobik7Ci0gICAgc3Bpbl91bmxvY2soJnMtPmJ1ZmlvcmVxX2xvY2sp OwotCi0gICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLX0KLQotaW50IGh2bV9zZW5kX2lvcmVxKHN0 cnVjdCBodm1faW9yZXFfc2VydmVyICpzLCBpb3JlcV90ICpwcm90b19wLAotICAgICAgICAgICAg ICAgICAgIGJvb2xfdCBidWZmZXJlZCkKLXsKLSAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJl bnQ7Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IGN1cnItPmRvbWFpbjsKLSAgICBzdHJ1Y3QgaHZt X2lvcmVxX3ZjcHUgKnN2OwotCi0gICAgQVNTRVJUKHMpOwotCi0gICAgaWYgKCBidWZmZXJlZCAp Ci0gICAgICAgIHJldHVybiBodm1fc2VuZF9idWZmZXJlZF9pb3JlcShzLCBwcm90b19wKTsKLQot ICAgIGlmICggdW5saWtlbHkoIXZjcHVfc3RhcnRfc2h1dGRvd25fZGVmZXJyYWwoY3VycikpICkK LSAgICAgICAgcmV0dXJuIFg4NkVNVUxfUkVUUlk7Ci0KLSAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5 ICggc3YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZzLT5pb3JlcV92Y3B1X2xpc3QsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgKQotICAgIHsKLSAgICAgICAgaWYg KCBzdi0+dmNwdSA9PSBjdXJyICkKLSAgICAgICAgewotICAgICAgICAgICAgZXZ0Y2huX3BvcnRf dCBwb3J0ID0gc3YtPmlvcmVxX2V2dGNobjsKLSAgICAgICAgICAgIGlvcmVxX3QgKnAgPSBnZXRf aW9yZXEocywgY3Vycik7Ci0KLSAgICAgICAgICAgIGlmICggdW5saWtlbHkocC0+c3RhdGUgIT0g U1RBVEVfSU9SRVFfTk9ORSkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdwcmlu dGsoWEVOTE9HX0VSUiwgImRldmljZSBtb2RlbCBzZXQgYmFkIElPIHN0YXRlICVkXG4iLAotICAg ICAgICAgICAgICAgICAgICAgICAgcC0+c3RhdGUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KHAtPnZwX2Vwb3J0ICE9 IHBvcnQpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBncHJpbnRrKFhFTkxPR19F UlIsICJkZXZpY2UgbW9kZWwgc2V0IGJhZCBldmVudCBjaGFubmVsICVkXG4iLAotICAgICAgICAg ICAgICAgICAgICAgICAgcC0+dnBfZXBvcnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgfQotCi0gICAgICAgICAgICBwcm90b19wLT5zdGF0ZSA9IFNUQVRFX0lPUkVRX05P TkU7Ci0gICAgICAgICAgICBwcm90b19wLT52cF9lcG9ydCA9IHBvcnQ7Ci0gICAgICAgICAgICAq cCA9ICpwcm90b19wOwotCi0gICAgICAgICAgICBwcmVwYXJlX3dhaXRfb25feGVuX2V2ZW50X2No YW5uZWwocG9ydCk7Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBGb2xsb3dpbmcg aGFwcGVucyAvYWZ0ZXIvIGJsb2NraW5nIGFuZCBzZXR0aW5nIHVwIGlvcmVxCi0gICAgICAgICAg ICAgKiBjb250ZW50cy4gcHJlcGFyZV93YWl0X29uX3hlbl9ldmVudF9jaGFubmVsKCkgaXMgYW4g aW1wbGljaXQKLSAgICAgICAgICAgICAqIGJhcnJpZXIuCi0gICAgICAgICAgICAgKi8KLSAgICAg ICAgICAgIHAtPnN0YXRlID0gU1RBVEVfSU9SRVFfUkVBRFk7Ci0gICAgICAgICAgICBub3RpZnlf dmlhX3hlbl9ldmVudF9jaGFubmVsKGQsIHBvcnQpOwotCi0gICAgICAgICAgICBzdi0+cGVuZGlu ZyA9IDE7Ci0gICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9SRVRSWTsKLSAgICAgICAgfQotICAg IH0KLQotICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLX0KLQotdW5zaWduZWQgaW50 IGh2bV9icm9hZGNhc3RfaW9yZXEoaW9yZXFfdCAqcCwgYm9vbF90IGJ1ZmZlcmVkKQotewotICAg IHN0cnVjdCBkb21haW4gKmQgPSBjdXJyZW50LT5kb21haW47Ci0gICAgc3RydWN0IGh2bV9pb3Jl cV9zZXJ2ZXIgKnM7Ci0gICAgdW5zaWduZWQgaW50IGZhaWxlZCA9IDA7Ci0KLSAgICBsaXN0X2Zv cl9lYWNoX2VudHJ5ICggcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmQtPmFyY2guaHZt X2RvbWFpbi5pb3JlcV9zZXJ2ZXIubGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbGlz dF9lbnRyeSApCi0gICAgICAgIGlmICggaHZtX3NlbmRfaW9yZXEocywgcCwgYnVmZmVyZWQpID09 IFg4NkVNVUxfVU5IQU5ETEVBQkxFICkKLSAgICAgICAgICAgIGZhaWxlZCsrOwotCi0gICAgcmV0 dXJuIGZhaWxlZDsKLX0KLQogdm9pZCBodm1faGx0KHVuc2lnbmVkIGxvbmcgcmZsYWdzKQogewog ICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4 Ni9odm0vaW8uYyBiL3hlbi9hcmNoL3g4Ni9odm0vaW8uYwppbmRleCBmZWU4MTJhLi5iMjdmZmEx IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvaHZtL2lvLmMKKysrIGIveGVuL2FyY2gveDg2L2h2 bS9pby5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8YXNtL3NoYWRvdy5oPgogI2luY2x1 ZGUgPGFzbS9wMm0uaD4KICNpbmNsdWRlIDxhc20vaHZtL2h2bS5oPgorI2luY2x1ZGUgPGFzbS9o dm0vaW9yZXEuaD4KICNpbmNsdWRlIDxhc20vaHZtL3N1cHBvcnQuaD4KICNpbmNsdWRlIDxhc20v aHZtL3ZwdC5oPgogI2luY2x1ZGUgPGFzbS9odm0vdnBpYy5oPgpkaWZmIC0tZ2l0IGEveGVuL2Fy Y2gveDg2L2h2bS9pb3JlcS5jIGIveGVuL2FyY2gveDg2L2h2bS9pb3JlcS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NDBlZmYKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4v YXJjaC94ODYvaHZtL2lvcmVxLmMKQEAgLTAsMCArMSwxMzc1IEBACisvKgorICogaHZtL2lvLmM6 IGhhcmR3YXJlIHZpcnR1YWwgbWFjaGluZSBJL08gZW11bGF0aW9uCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDE2IENpdHJpeCBTeXN0ZW1zIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICog dW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcg d2l0aAorICogdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPHhlbi9jb25maWcuaD4KKyNpbmNsdWRlIDx4ZW4v Y3R5cGUuaD4KKyNpbmNsdWRlIDx4ZW4vaW5pdC5oPgorI2luY2x1ZGUgPHhlbi9saWIuaD4KKyNp bmNsdWRlIDx4ZW4vdHJhY2UuaD4KKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KKyNpbmNsdWRlIDx4 ZW4vaXJxLmg+CisjaW5jbHVkZSA8eGVuL3NvZnRpcnEuaD4KKyNpbmNsdWRlIDx4ZW4vZG9tYWlu Lmg+CisjaW5jbHVkZSA8eGVuL2V2ZW50Lmg+CisjaW5jbHVkZSA8eGVuL3BhZ2luZy5oPgorCisj aW5jbHVkZSA8YXNtL2h2bS9odm0uaD4KKyNpbmNsdWRlIDxhc20vaHZtL2lvcmVxLmg+CisjaW5j bHVkZSA8YXNtL2h2bS92bXgvdm14Lmg+CisKKyNpbmNsdWRlIDxwdWJsaWMvaHZtL2lvcmVxLmg+ CisKK3N0YXRpYyBpb3JlcV90ICpnZXRfaW9yZXEoc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnMs IHN0cnVjdCB2Y3B1ICp2KQoreworICAgIHNoYXJlZF9pb3BhZ2VfdCAqcCA9IHMtPmlvcmVxLnZh OworCisgICAgQVNTRVJUKCh2ID09IGN1cnJlbnQpIHx8ICF2Y3B1X3J1bm5hYmxlKHYpKTsKKyAg ICBBU1NFUlQocCAhPSBOVUxMKTsKKworICAgIHJldHVybiAmcC0+dmNwdV9pb3JlcVt2LT52Y3B1 X2lkXTsKK30KKworYm9vbF90IGh2bV9pb19wZW5kaW5nKHN0cnVjdCB2Y3B1ICp2KQoreworICAg IHN0cnVjdCBkb21haW4gKmQgPSB2LT5kb21haW47CisgICAgc3RydWN0IGh2bV9pb3JlcV9zZXJ2 ZXIgKnM7CisKKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5ICggcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgJmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubGlzdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgbGlzdF9lbnRyeSApCisgICAgeworICAgICAgICBzdHJ1Y3QgaHZt X2lvcmVxX3ZjcHUgKnN2OworCisgICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkgKCBzdiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzLT5pb3JlcV92Y3B1X2xpc3QsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICkKKyAgICAgICAgeworICAgICAgICAg ICAgaWYgKCBzdi0+dmNwdSA9PSB2ICYmIHN2LT5wZW5kaW5nICkKKyAgICAgICAgICAgICAgICBy ZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMg dm9pZCBodm1faW9fYXNzaXN0KHN0cnVjdCBodm1faW9yZXFfdmNwdSAqc3YsIHVpbnQ2NF90IGRh dGEpCit7CisgICAgc3RydWN0IHZjcHUgKnYgPSBzdi0+dmNwdTsKKyAgICBzdHJ1Y3QgaHZtX3Zj cHVfaW8gKnZpbyA9ICZ2LT5hcmNoLmh2bV92Y3B1Lmh2bV9pbzsKKworICAgIGlmICggaHZtX3Zj cHVfaW9fbmVlZF9jb21wbGV0aW9uKHZpbykgKQorICAgIHsKKyAgICAgICAgdmlvLT5pb19yZXEu c3RhdGUgPSBTVEFURV9JT1JFU1BfUkVBRFk7CisgICAgICAgIHZpby0+aW9fcmVxLmRhdGEgPSBk YXRhOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHZpby0+aW9fcmVxLnN0YXRlID0gU1RBVEVf SU9SRVFfTk9ORTsKKworICAgIG1zaXhfd3JpdGVfY29tcGxldGlvbih2KTsKKyAgICB2Y3B1X2Vu ZF9zaHV0ZG93bl9kZWZlcnJhbCh2KTsKKworICAgIHN2LT5wZW5kaW5nID0gMDsKK30KKworc3Rh dGljIGJvb2xfdCBodm1fd2FpdF9mb3JfaW8oc3RydWN0IGh2bV9pb3JlcV92Y3B1ICpzdiwgaW9y ZXFfdCAqcCkKK3sKKyAgICB3aGlsZSAoIHN2LT5wZW5kaW5nICkKKyAgICB7CisgICAgICAgIHVu c2lnbmVkIGludCBzdGF0ZSA9IHAtPnN0YXRlOworCisgICAgICAgIHJtYigpOworICAgICAgICBz d2l0Y2ggKCBzdGF0ZSApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBTVEFURV9JT1JFUV9OT05F OgorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFRoZSBvbmx5IHJlYXNvbiB3ZSBzaG91 bGQgc2VlIHRoaXMgY2FzZSBpcyB3aGVuIGFuCisgICAgICAgICAgICAgKiBlbXVsYXRvciBpcyBk eWluZyBhbmQgaXQgcmFjZXMgd2l0aCBhbiBJL08gYmVpbmcKKyAgICAgICAgICAgICAqIHJlcXVl c3RlZC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaHZtX2lvX2Fzc2lzdChzdiwgfjB1 bCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9JT1JFU1BfUkVBRFk6 IC8qIElPUkVTUF9SRUFEWSAtPiBOT05FICovCisgICAgICAgICAgICBwLT5zdGF0ZSA9IFNUQVRF X0lPUkVRX05PTkU7CisgICAgICAgICAgICBodm1faW9fYXNzaXN0KHN2LCBwLT5kYXRhKTsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUQVRFX0lPUkVRX1JFQURZOiAgLyogSU9S RVFfe1JFQURZLElOUFJPQ0VTU30gLT4gSU9SRVNQX1JFQURZICovCisgICAgICAgIGNhc2UgU1RB VEVfSU9SRVFfSU5QUk9DRVNTOgorICAgICAgICAgICAgd2FpdF9vbl94ZW5fZXZlbnRfY2hhbm5l bChzdi0+aW9yZXFfZXZ0Y2huLCBwLT5zdGF0ZSAhPSBzdGF0ZSk7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsICJX ZWlyZCBIVk0gaW9yZXF1ZXN0IHN0YXRlICV1XG4iLCBzdGF0ZSk7CisgICAgICAgICAgICBzdi0+ cGVuZGluZyA9IDA7CisgICAgICAgICAgICBkb21haW5fY3Jhc2goc3YtPnZjcHUtPmRvbWFpbik7 CisgICAgICAgICAgICByZXR1cm4gMDsgLyogYmFpbCAqLworICAgICAgICB9CisgICAgfQorCisg ICAgcmV0dXJuIDE7Cit9CisKK2Jvb2xfdCBoYW5kbGVfaHZtX2lvX2NvbXBsZXRpb24oc3RydWN0 IHZjcHUgKnYpCit7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKKyAgICBzdHJ1 Y3QgaHZtX3ZjcHVfaW8gKnZpbyA9ICZ2LT5hcmNoLmh2bV92Y3B1Lmh2bV9pbzsKKyAgICBzdHJ1 Y3QgaHZtX2lvcmVxX3NlcnZlciAqczsKKyAgICBlbnVtIGh2bV9pb19jb21wbGV0aW9uIGlvX2Nv bXBsZXRpb247CisKKyAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkgKCBzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZlci5saXN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICkKKyAgICB7CisgICAgICAgIHN0cnVj dCBodm1faW9yZXFfdmNwdSAqc3Y7CisKKyAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSAoIHN2 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMtPmlvcmVxX3ZjcHVfbGlzdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgKQorICAgICAgICB7CisgICAg ICAgICAgICBpZiAoIHN2LT52Y3B1ID09IHYgJiYgc3YtPnBlbmRpbmcgKQorICAgICAgICAgICAg eworICAgICAgICAgICAgICAgIGlmICggIWh2bV93YWl0X2Zvcl9pbyhzdiwgZ2V0X2lvcmVxKHMs IHYpKSApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpb19jb21wbGV0 aW9uID0gdmlvLT5pb19jb21wbGV0aW9uOworICAgIHZpby0+aW9fY29tcGxldGlvbiA9IEhWTUlP X25vX2NvbXBsZXRpb247CisKKyAgICBzd2l0Y2ggKCBpb19jb21wbGV0aW9uICkKKyAgICB7Cisg ICAgY2FzZSBIVk1JT19ub19jb21wbGV0aW9uOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEhW TUlPX21taW9fY29tcGxldGlvbjoKKyAgICAgICAgaGFuZGxlX21taW8oKTsKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSBIVk1JT19waW9fY29tcGxldGlvbjoKKyAgICAgICAgKHZvaWQpaGFuZGxl X3Bpbyh2aW8tPmlvX3JlcS5hZGRyLCB2aW8tPmlvX3JlcS5zaXplLAorICAgICAgICAgICAgICAg ICAgICAgICAgIHZpby0+aW9fcmVxLmRpcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSFZN SU9fcmVhbG1vZGVfY29tcGxldGlvbjoKKyAgICB7CisgICAgICAgIHN0cnVjdCBodm1fZW11bGF0 ZV9jdHh0IGN0eHQ7CisKKyAgICAgICAgaHZtX2VtdWxhdGVfcHJlcGFyZSgmY3R4dCwgZ3Vlc3Rf Y3B1X3VzZXJfcmVncygpKTsKKyAgICAgICAgdm14X3JlYWxtb2RlX2VtdWxhdGVfb25lKCZjdHh0 KTsKKyAgICAgICAgaHZtX2VtdWxhdGVfd3JpdGViYWNrKCZjdHh0KTsKKworICAgICAgICBicmVh azsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX1VOUkVBQ0hBQkxFKCk7Cisg ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IGh2 bV9hbGxvY19pb3JlcV9nbWZuKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgKmdtZm4p Cit7CisgICAgdW5zaWduZWQgaW50IGk7CisgICAgaW50IHJjOworCisgICAgcmMgPSAtRU5PTUVN OworICAgIGZvciAoIGkgPSAwOyBpIDwgc2l6ZW9mKGQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9n bWZuLm1hc2spICogODsgaSsrICkKKyAgICB7CisgICAgICAgIGlmICggdGVzdF9hbmRfY2xlYXJf Yml0KGksICZkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfZ21mbi5tYXNrKSApCisgICAgICAgIHsK KyAgICAgICAgICAgICpnbWZuID0gZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX2dtZm4uYmFzZSAr IGk7CisgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor ICAgIH0KKworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgaHZtX2ZyZWVfaW9yZXFf Z21mbihzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIGdtZm4pCit7CisgICAgdW5zaWdu ZWQgaW50IGkgPSBnbWZuIC0gZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX2dtZm4uYmFzZTsKKwor ICAgIGlmICggZ21mbiAhPSBJTlZBTElEX0dGTiApCisgICAgICAgIHNldF9iaXQoaSwgJmQtPmFy Y2guaHZtX2RvbWFpbi5pb3JlcV9nbWZuLm1hc2spOworfQorCitzdGF0aWMgdm9pZCBodm1fdW5t YXBfaW9yZXFfcGFnZShzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAqcywgYm9vbF90IGJ1ZikKK3sK KyAgICBzdHJ1Y3QgaHZtX2lvcmVxX3BhZ2UgKmlvcnAgPSBidWYgPyAmcy0+YnVmaW9yZXEgOiAm cy0+aW9yZXE7CisKKyAgICBkZXN0cm95X3JpbmdfZm9yX2hlbHBlcigmaW9ycC0+dmEsIGlvcnAt PnBhZ2UpOworfQorCitzdGF0aWMgaW50IGh2bV9tYXBfaW9yZXFfcGFnZSgKKyAgICBzdHJ1Y3Qg aHZtX2lvcmVxX3NlcnZlciAqcywgYm9vbF90IGJ1ZiwgdW5zaWduZWQgbG9uZyBnbWZuKQorewor ICAgIHN0cnVjdCBkb21haW4gKmQgPSBzLT5kb21haW47CisgICAgc3RydWN0IGh2bV9pb3JlcV9w YWdlICppb3JwID0gYnVmID8gJnMtPmJ1ZmlvcmVxIDogJnMtPmlvcmVxOworICAgIHN0cnVjdCBw YWdlX2luZm8gKnBhZ2U7CisgICAgdm9pZCAqdmE7CisgICAgaW50IHJjOworCisgICAgaWYgKCAo cmMgPSBwcmVwYXJlX3JpbmdfZm9yX2hlbHBlcihkLCBnbWZuLCAmcGFnZSwgJnZhKSkgKQorICAg ICAgICByZXR1cm4gcmM7CisKKyAgICBpZiAoIChpb3JwLT52YSAhPSBOVUxMKSB8fCBkLT5pc19k eWluZyApCisgICAgeworICAgICAgICBkZXN0cm95X3JpbmdfZm9yX2hlbHBlcigmdmEsIHBhZ2Up OworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBpb3JwLT52YSA9IHZhOwor ICAgIGlvcnAtPnBhZ2UgPSBwYWdlOworICAgIGlvcnAtPmdtZm4gPSBnbWZuOworCisgICAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGh2bV9yZW1vdmVfaW9yZXFfZ21mbigKKyAgICBzdHJ1 Y3QgZG9tYWluICpkLCBzdHJ1Y3QgaHZtX2lvcmVxX3BhZ2UgKmlvcnApCit7CisgICAgZ3Vlc3Rf cGh5c21hcF9yZW1vdmVfcGFnZShkLCBpb3JwLT5nbWZuLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGFnZV90b19tZm4oaW9ycC0+cGFnZSksIDApOworICAgIGNsZWFyX3BhZ2UoaW9y cC0+dmEpOworfQorCitzdGF0aWMgaW50IGh2bV9hZGRfaW9yZXFfZ21mbigKKyAgICBzdHJ1Y3Qg ZG9tYWluICpkLCBzdHJ1Y3QgaHZtX2lvcmVxX3BhZ2UgKmlvcnApCit7CisgICAgaW50IHJjOwor CisgICAgY2xlYXJfcGFnZShpb3JwLT52YSk7CisKKyAgICByYyA9IGd1ZXN0X3BoeXNtYXBfYWRk X3BhZ2UoZCwgaW9ycC0+Z21mbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFn ZV90b19tZm4oaW9ycC0+cGFnZSksIDApOworICAgIGlmICggcmMgPT0gMCApCisgICAgICAgIHBh Z2luZ19tYXJrX2RpcnR5KGQsIHBhZ2VfdG9fbWZuKGlvcnAtPnBhZ2UpKTsKKworICAgIHJldHVy biByYzsKK30KKworc3RhdGljIHZvaWQgaHZtX3VwZGF0ZV9pb3JlcV9ldnRjaG4oc3RydWN0IGh2 bV9pb3JlcV9zZXJ2ZXIgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgaHZtX2lvcmVxX3ZjcHUgKnN2KQoreworICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZCgm cy0+bG9jaykpOworCisgICAgaWYgKCBzLT5pb3JlcS52YSAhPSBOVUxMICkKKyAgICB7CisgICAg ICAgIGlvcmVxX3QgKnAgPSBnZXRfaW9yZXEocywgc3YtPnZjcHUpOworCisgICAgICAgIHAtPnZw X2Vwb3J0ID0gc3YtPmlvcmVxX2V2dGNobjsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgaHZtX2lv cmVxX3NlcnZlcl9hZGRfdmNwdShzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAqcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sX3QgaXNfZGVmYXVsdCwgc3RydWN0IHZj cHUgKnYpCit7CisgICAgc3RydWN0IGh2bV9pb3JlcV92Y3B1ICpzdjsKKyAgICBpbnQgcmM7CisK KyAgICBzdiA9IHh6YWxsb2Moc3RydWN0IGh2bV9pb3JlcV92Y3B1KTsKKworICAgIHJjID0gLUVO T01FTTsKKyAgICBpZiAoICFzdiApCisgICAgICAgIGdvdG8gZmFpbDE7CisKKyAgICBzcGluX2xv Y2soJnMtPmxvY2spOworCisgICAgcmMgPSBhbGxvY191bmJvdW5kX3hlbl9ldmVudF9jaGFubmVs KHYtPmRvbWFpbiwgdi0+dmNwdV9pZCwgcy0+ZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIGlmICggcmMgPCAwICkKKyAgICAgICAgZ290 byBmYWlsMjsKKworICAgIHN2LT5pb3JlcV9ldnRjaG4gPSByYzsKKworICAgIGlmICggdi0+dmNw dV9pZCA9PSAwICYmIHMtPmJ1ZmlvcmVxLnZhICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgc3Ry dWN0IGRvbWFpbiAqZCA9IHMtPmRvbWFpbjsKKworICAgICAgICByYyA9IGFsbG9jX3VuYm91bmRf eGVuX2V2ZW50X2NoYW5uZWwodi0+ZG9tYWluLCAwLCBzLT5kb21pZCwgTlVMTCk7CisgICAgICAg IGlmICggcmMgPCAwICkKKyAgICAgICAgICAgIGdvdG8gZmFpbDM7CisKKyAgICAgICAgcy0+YnVm aW9yZXFfZXZ0Y2huID0gcmM7CisgICAgICAgIGlmICggaXNfZGVmYXVsdCApCisgICAgICAgICAg ICBkLT5hcmNoLmh2bV9kb21haW4ucGFyYW1zW0hWTV9QQVJBTV9CVUZJT1JFUV9FVlRDSE5dID0K KyAgICAgICAgICAgICAgICBzLT5idWZpb3JlcV9ldnRjaG47CisgICAgfQorCisgICAgc3YtPnZj cHUgPSB2OworCisgICAgbGlzdF9hZGQoJnN2LT5saXN0X2VudHJ5LCAmcy0+aW9yZXFfdmNwdV9s aXN0KTsKKworICAgIGlmICggcy0+ZW5hYmxlZCApCisgICAgICAgIGh2bV91cGRhdGVfaW9yZXFf ZXZ0Y2huKHMsIHN2KTsKKworICAgIHNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKKyAgICByZXR1cm4g MDsKKworIGZhaWwzOgorICAgIGZyZWVfeGVuX2V2ZW50X2NoYW5uZWwodi0+ZG9tYWluLCBzdi0+ aW9yZXFfZXZ0Y2huKTsKKworIGZhaWwyOgorICAgIHNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKKyAg ICB4ZnJlZShzdik7CisKKyBmYWlsMToKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lk IGh2bV9pb3JlcV9zZXJ2ZXJfcmVtb3ZlX3ZjcHUoc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnMs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2Y3B1ICp2 KQoreworICAgIHN0cnVjdCBodm1faW9yZXFfdmNwdSAqc3Y7CisKKyAgICBzcGluX2xvY2soJnMt PmxvY2spOworCisgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSAoIHN2LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAmcy0+aW9yZXFfdmNwdV9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICBsaXN0X2VudHJ5ICkKKyAgICB7CisgICAgICAgIGlmICggc3YtPnZjcHUgIT0gdiApCisgICAg ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBsaXN0X2RlbCgmc3YtPmxpc3RfZW50cnkpOwor CisgICAgICAgIGlmICggdi0+dmNwdV9pZCA9PSAwICYmIHMtPmJ1ZmlvcmVxLnZhICE9IE5VTEwg KQorICAgICAgICAgICAgZnJlZV94ZW5fZXZlbnRfY2hhbm5lbCh2LT5kb21haW4sIHMtPmJ1Zmlv cmVxX2V2dGNobik7CisKKyAgICAgICAgZnJlZV94ZW5fZXZlbnRfY2hhbm5lbCh2LT5kb21haW4s IHN2LT5pb3JlcV9ldnRjaG4pOworCisgICAgICAgIHhmcmVlKHN2KTsKKyAgICAgICAgYnJlYWs7 CisgICAgfQorCisgICAgc3Bpbl91bmxvY2soJnMtPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBo dm1faW9yZXFfc2VydmVyX3JlbW92ZV9hbGxfdmNwdXMoc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIg KnMpCit7CisgICAgc3RydWN0IGh2bV9pb3JlcV92Y3B1ICpzdiwgKm5leHQ7CisKKyAgICBzcGlu X2xvY2soJnMtPmxvY2spOworCisgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlICggc3YsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmcy0+aW9yZXFfdmNwdV9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpc3RfZW50cnkgKQorICAgIHsKKyAgICAgICAgc3RydWN0IHZjcHUgKnYgPSBzdi0+ dmNwdTsKKworICAgICAgICBsaXN0X2RlbCgmc3YtPmxpc3RfZW50cnkpOworCisgICAgICAgIGlm ICggdi0+dmNwdV9pZCA9PSAwICYmIHMtPmJ1ZmlvcmVxLnZhICE9IE5VTEwgKQorICAgICAgICAg ICAgZnJlZV94ZW5fZXZlbnRfY2hhbm5lbCh2LT5kb21haW4sIHMtPmJ1ZmlvcmVxX2V2dGNobik7 CisKKyAgICAgICAgZnJlZV94ZW5fZXZlbnRfY2hhbm5lbCh2LT5kb21haW4sIHN2LT5pb3JlcV9l dnRjaG4pOworCisgICAgICAgIHhmcmVlKHN2KTsKKyAgICB9CisKKyAgICBzcGluX3VubG9jaygm cy0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgaHZtX2lvcmVxX3NlcnZlcl9tYXBfcGFnZXMoc3Ry dWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGxvbmcgaW9yZXFfcGZuLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGJ1ZmlvcmVxX3BmbikKK3sKKyAgICBpbnQgcmM7 CisKKyAgICByYyA9IGh2bV9tYXBfaW9yZXFfcGFnZShzLCAwLCBpb3JlcV9wZm4pOworICAgIGlm ICggcmMgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICBpZiAoIGJ1ZmlvcmVxX3BmbiAhPSBJ TlZBTElEX0dGTiApCisgICAgICAgIHJjID0gaHZtX21hcF9pb3JlcV9wYWdlKHMsIDEsIGJ1Zmlv cmVxX3Bmbik7CisKKyAgICBpZiAoIHJjICkKKyAgICAgICAgaHZtX3VubWFwX2lvcmVxX3BhZ2Uo cywgMCk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgaHZtX2lvcmVxX3NlcnZl cl9zZXR1cF9wYWdlcyhzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAqcywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sX3QgaXNfZGVmYXVsdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sX3QgaGFuZGxlX2J1ZmlvcmVxKQorewor ICAgIHN0cnVjdCBkb21haW4gKmQgPSBzLT5kb21haW47CisgICAgdW5zaWduZWQgbG9uZyBpb3Jl cV9wZm4gPSBJTlZBTElEX0dGTjsKKyAgICB1bnNpZ25lZCBsb25nIGJ1ZmlvcmVxX3BmbiA9IElO VkFMSURfR0ZOOworICAgIGludCByYzsKKworICAgIGlmICggaXNfZGVmYXVsdCApCisgICAgewor ICAgICAgICAvKgorICAgICAgICAgKiBUaGUgZGVmYXVsdCBpb3JlcSBzZXJ2ZXIgbXVzdCBoYW5k bGUgYnVmZmVyZWQgaW9yZXFzLCBmb3IKKyAgICAgICAgICogYmFja3dhcmRzIGNvbXBhdGliaWxp dHkuCisgICAgICAgICAqLworICAgICAgICBBU1NFUlQoaGFuZGxlX2J1ZmlvcmVxKTsKKyAgICAg ICAgcmV0dXJuIGh2bV9pb3JlcV9zZXJ2ZXJfbWFwX3BhZ2VzKHMsCisgICAgICAgICAgICAgICAg ICAgZC0+YXJjaC5odm1fZG9tYWluLnBhcmFtc1tIVk1fUEFSQU1fSU9SRVFfUEZOXSwKKyAgICAg ICAgICAgICAgICAgICBkLT5hcmNoLmh2bV9kb21haW4ucGFyYW1zW0hWTV9QQVJBTV9CVUZJT1JF UV9QRk5dKTsKKyAgICB9CisKKyAgICByYyA9IGh2bV9hbGxvY19pb3JlcV9nbWZuKGQsICZpb3Jl cV9wZm4pOworCisgICAgaWYgKCAhcmMgJiYgaGFuZGxlX2J1ZmlvcmVxICkKKyAgICAgICAgcmMg PSBodm1fYWxsb2NfaW9yZXFfZ21mbihkLCAmYnVmaW9yZXFfcGZuKTsKKworICAgIGlmICggIXJj ICkKKyAgICAgICAgcmMgPSBodm1faW9yZXFfc2VydmVyX21hcF9wYWdlcyhzLCBpb3JlcV9wZm4s IGJ1ZmlvcmVxX3Bmbik7CisKKyAgICBpZiAoIHJjICkKKyAgICB7CisgICAgICAgIGh2bV9mcmVl X2lvcmVxX2dtZm4oZCwgaW9yZXFfcGZuKTsKKyAgICAgICAgaHZtX2ZyZWVfaW9yZXFfZ21mbihk LCBidWZpb3JlcV9wZm4pOworICAgIH0KKworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIHZv aWQgaHZtX2lvcmVxX3NlcnZlcl91bm1hcF9wYWdlcyhzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAq cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbF90IGlzX2Rl ZmF1bHQpCit7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHMtPmRvbWFpbjsKKyAgICBib29sX3Qg aGFuZGxlX2J1ZmlvcmVxID0gKCBzLT5idWZpb3JlcS52YSAhPSBOVUxMICk7CisKKyAgICBpZiAo IGhhbmRsZV9idWZpb3JlcSApCisgICAgICAgIGh2bV91bm1hcF9pb3JlcV9wYWdlKHMsIDEpOwor CisgICAgaHZtX3VubWFwX2lvcmVxX3BhZ2UocywgMCk7CisKKyAgICBpZiAoICFpc19kZWZhdWx0 ICkKKyAgICB7CisgICAgICAgIGlmICggaGFuZGxlX2J1ZmlvcmVxICkKKyAgICAgICAgICAgIGh2 bV9mcmVlX2lvcmVxX2dtZm4oZCwgcy0+YnVmaW9yZXEuZ21mbik7CisKKyAgICAgICAgaHZtX2Zy ZWVfaW9yZXFfZ21mbihkLCBzLT5pb3JlcS5nbWZuKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IGh2bV9pb3JlcV9zZXJ2ZXJfZnJlZV9yYW5nZXNldHMoc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIg KnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xfdCBp c19kZWZhdWx0KQoreworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgaWYgKCBpc19kZWZhdWx0 ICkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yICggaSA9IDA7IGkgPCBOUl9JT19SQU5HRV9U WVBFUzsgaSsrICkKKyAgICAgICAgcmFuZ2VzZXRfZGVzdHJveShzLT5yYW5nZVtpXSk7Cit9CisK K3N0YXRpYyBpbnQgaHZtX2lvcmVxX3NlcnZlcl9hbGxvY19yYW5nZXNldHMoc3RydWN0IGh2bV9p b3JlcV9zZXJ2ZXIgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJvb2xfdCBpc19kZWZhdWx0KQoreworICAgIHVuc2lnbmVkIGludCBpOworICAgIGludCBy YzsKKworICAgIGlmICggaXNfZGVmYXVsdCApCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIGZv ciAoIGkgPSAwOyBpIDwgTlJfSU9fUkFOR0VfVFlQRVM7IGkrKyApCisgICAgeworICAgICAgICBj aGFyICpuYW1lOworCisgICAgICAgIHJjID0gYXNwcmludGYoJm5hbWUsICJpb3JlcV9zZXJ2ZXIg JWQgJXMiLCBzLT5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAoaSA9PSBIVk1PUF9JT19SQU5H RV9QT1JUKSA/ICJwb3J0IiA6CisgICAgICAgICAgICAgICAgICAgICAgKGkgPT0gSFZNT1BfSU9f UkFOR0VfTUVNT1JZKSA/ICJtZW1vcnkiIDoKKyAgICAgICAgICAgICAgICAgICAgICAoaSA9PSBI Vk1PUF9JT19SQU5HRV9QQ0kpID8gInBjaSIgOgorICAgICAgICAgICAgICAgICAgICAgICIiKTsK KyAgICAgICAgaWYgKCByYyApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgcy0+ cmFuZ2VbaV0gPSByYW5nZXNldF9uZXcocy0+ZG9tYWluLCBuYW1lLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSQU5HRVNFVEZfcHJldHR5cHJpbnRfaGV4KTsKKworICAgICAg ICB4ZnJlZShuYW1lKTsKKworICAgICAgICByYyA9IC1FTk9NRU07CisgICAgICAgIGlmICggIXMt PnJhbmdlW2ldICkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICByYW5nZXNldF9s aW1pdChzLT5yYW5nZVtpXSwgTUFYX05SX0lPX1JBTkdFUyk7CisgICAgfQorCisgZG9uZToKKyAg ICByZXR1cm4gMDsKKworIGZhaWw6CisgICAgaHZtX2lvcmVxX3NlcnZlcl9mcmVlX3Jhbmdlc2V0 cyhzLCAwKTsKKworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgaHZtX2lvcmVxX3Nl cnZlcl9lbmFibGUoc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBib29sX3QgaXNfZGVmYXVsdCkKK3sKKyAgICBzdHJ1Y3QgZG9t YWluICpkID0gcy0+ZG9tYWluOworICAgIHN0cnVjdCBodm1faW9yZXFfdmNwdSAqc3Y7CisgICAg Ym9vbF90IGhhbmRsZV9idWZpb3JlcSA9ICggcy0+YnVmaW9yZXEudmEgIT0gTlVMTCApOworCisg ICAgc3Bpbl9sb2NrKCZzLT5sb2NrKTsKKworICAgIGlmICggcy0+ZW5hYmxlZCApCisgICAgICAg IGdvdG8gZG9uZTsKKworICAgIGlmICggIWlzX2RlZmF1bHQgKQorICAgIHsKKyAgICAgICAgaHZt X3JlbW92ZV9pb3JlcV9nbWZuKGQsICZzLT5pb3JlcSk7CisKKyAgICAgICAgaWYgKCBoYW5kbGVf YnVmaW9yZXEgKQorICAgICAgICAgICAgaHZtX3JlbW92ZV9pb3JlcV9nbWZuKGQsICZzLT5idWZp b3JlcSk7CisgICAgfQorCisgICAgcy0+ZW5hYmxlZCA9IDE7CisKKyAgICBsaXN0X2Zvcl9lYWNo X2VudHJ5ICggc3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZzLT5pb3JlcV92Y3B1X2xp c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgKQorICAgICAgICBodm1f dXBkYXRlX2lvcmVxX2V2dGNobihzLCBzdik7CisKKyAgZG9uZToKKyAgICBzcGluX3VubG9jaygm cy0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGh2bV9pb3JlcV9zZXJ2ZXJfZGlzYWJsZShzdHJ1 Y3QgaHZtX2lvcmVxX3NlcnZlciAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJvb2xfdCBpc19kZWZhdWx0KQoreworICAgIHN0cnVjdCBkb21haW4gKmQgPSBzLT5kb21h aW47CisgICAgYm9vbF90IGhhbmRsZV9idWZpb3JlcSA9ICggcy0+YnVmaW9yZXEudmEgIT0gTlVM TCApOworCisgICAgc3Bpbl9sb2NrKCZzLT5sb2NrKTsKKworICAgIGlmICggIXMtPmVuYWJsZWQg KQorICAgICAgICBnb3RvIGRvbmU7CisKKyAgICBpZiAoICFpc19kZWZhdWx0ICkKKyAgICB7Cisg ICAgICAgIGlmICggaGFuZGxlX2J1ZmlvcmVxICkKKyAgICAgICAgICAgIGh2bV9hZGRfaW9yZXFf Z21mbihkLCAmcy0+YnVmaW9yZXEpOworCisgICAgICAgIGh2bV9hZGRfaW9yZXFfZ21mbihkLCAm cy0+aW9yZXEpOworICAgIH0KKworICAgIHMtPmVuYWJsZWQgPSAwOworCisgZG9uZToKKyAgICBz cGluX3VubG9jaygmcy0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgaHZtX2lvcmVxX3NlcnZlcl9p bml0KHN0cnVjdCBodm1faW9yZXFfc2VydmVyICpzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGRvbWFpbiAqZCwgZG9taWRfdCBkb21pZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJvb2xfdCBpc19kZWZhdWx0LCBpbnQgYnVmaW9yZXFfaGFuZGxp bmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NlcnZpZF90IGlkKQorewor ICAgIHN0cnVjdCB2Y3B1ICp2OworICAgIGludCByYzsKKworICAgIHMtPmlkID0gaWQ7CisgICAg cy0+ZG9tYWluID0gZDsKKyAgICBzLT5kb21pZCA9IGRvbWlkOworCisgICAgc3Bpbl9sb2NrX2lu aXQoJnMtPmxvY2spOworICAgIElOSVRfTElTVF9IRUFEKCZzLT5pb3JlcV92Y3B1X2xpc3QpOwor ICAgIHNwaW5fbG9ja19pbml0KCZzLT5idWZpb3JlcV9sb2NrKTsKKworICAgIHJjID0gaHZtX2lv cmVxX3NlcnZlcl9hbGxvY19yYW5nZXNldHMocywgaXNfZGVmYXVsdCk7CisgICAgaWYgKCByYyAp CisgICAgICAgIHJldHVybiByYzsKKworICAgIGlmICggYnVmaW9yZXFfaGFuZGxpbmcgPT0gSFZN X0lPUkVRU1JWX0JVRklPUkVRX0FUT01JQyApCisgICAgICAgIHMtPmJ1ZmlvcmVxX2F0b21pYyA9 IDE7CisKKyAgICByYyA9IGh2bV9pb3JlcV9zZXJ2ZXJfc2V0dXBfcGFnZXMoCisgICAgICAgICAg ICAgcywgaXNfZGVmYXVsdCwgYnVmaW9yZXFfaGFuZGxpbmcgIT0gSFZNX0lPUkVRU1JWX0JVRklP UkVRX09GRik7CisgICAgaWYgKCByYyApCisgICAgICAgIGdvdG8gZmFpbF9tYXA7CisKKyAgICBm b3JfZWFjaF92Y3B1ICggZCwgdiApCisgICAgeworICAgICAgICByYyA9IGh2bV9pb3JlcV9zZXJ2 ZXJfYWRkX3ZjcHUocywgaXNfZGVmYXVsdCwgdik7CisgICAgICAgIGlmICggcmMgKQorICAgICAg ICAgICAgZ290byBmYWlsX2FkZDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKworIGZhaWxfYWRk OgorICAgIGh2bV9pb3JlcV9zZXJ2ZXJfcmVtb3ZlX2FsbF92Y3B1cyhzKTsKKyAgICBodm1faW9y ZXFfc2VydmVyX3VubWFwX3BhZ2VzKHMsIGlzX2RlZmF1bHQpOworCisgZmFpbF9tYXA6CisgICAg aHZtX2lvcmVxX3NlcnZlcl9mcmVlX3Jhbmdlc2V0cyhzLCBpc19kZWZhdWx0KTsKKworICAgIHJl dHVybiByYzsKK30KKworc3RhdGljIHZvaWQgaHZtX2lvcmVxX3NlcnZlcl9kZWluaXQoc3RydWN0 IGh2bV9pb3JlcV9zZXJ2ZXIgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBib29sX3QgaXNfZGVmYXVsdCkKK3sKKyAgICBBU1NFUlQoIXMtPmVuYWJsZWQpOworICAgIGh2 bV9pb3JlcV9zZXJ2ZXJfcmVtb3ZlX2FsbF92Y3B1cyhzKTsKKyAgICBodm1faW9yZXFfc2VydmVy X3VubWFwX3BhZ2VzKHMsIGlzX2RlZmF1bHQpOworICAgIGh2bV9pb3JlcV9zZXJ2ZXJfZnJlZV9y YW5nZXNldHMocywgaXNfZGVmYXVsdCk7Cit9CisKK3N0YXRpYyBpb3NlcnZpZF90IG5leHRfaW9z ZXJ2aWQoc3RydWN0IGRvbWFpbiAqZCkKK3sKKyAgICBzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAq czsKKyAgICBpb3NlcnZpZF90IGlkOworCisgICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZkLT5h cmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxvY2spKTsKKworICAgIGlkID0gZC0+YXJjaC5o dm1fZG9tYWluLmlvcmVxX3NlcnZlci5pZDsKKworIGFnYWluOgorICAgIGlkKys7CisKKyAgICAv KiBDaGVjayBmb3IgdW5pcXVlbmVzcyAqLworICAgIGxpc3RfZm9yX2VhY2hfZW50cnkgKCBzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZl ci5saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICkKKyAgICB7Cisg ICAgICAgIGlmICggaWQgPT0gcy0+aWQgKQorICAgICAgICAgICAgZ290byBhZ2FpbjsKKyAgICB9 CisKKyAgICBkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmlkID0gaWQ7CisKKyAgICBy ZXR1cm4gaWQ7Cit9CisKK2ludCBodm1fY3JlYXRlX2lvcmVxX3NlcnZlcihzdHJ1Y3QgZG9tYWlu ICpkLCBkb21pZF90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xfdCBp c19kZWZhdWx0LCBpbnQgYnVmaW9yZXFfaGFuZGxpbmcsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW9zZXJ2aWRfdCAqaWQpCit7CisgICAgc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnM7 CisgICAgaW50IHJjOworCisgICAgaWYgKCBidWZpb3JlcV9oYW5kbGluZyA+IEhWTV9JT1JFUVNS Vl9CVUZJT1JFUV9BVE9NSUMgKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIHJjID0g LUVOT01FTTsKKyAgICBzID0geHphbGxvYyhzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlcik7CisgICAg aWYgKCAhcyApCisgICAgICAgIGdvdG8gZmFpbDE7CisKKyAgICBkb21haW5fcGF1c2UoZCk7Cisg ICAgc3Bpbl9sb2NrKCZkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxvY2spOworCisg ICAgcmMgPSAtRUVYSVNUOworICAgIGlmICggaXNfZGVmYXVsdCAmJiBkLT5hcmNoLmh2bV9kb21h aW4uZGVmYXVsdF9pb3JlcV9zZXJ2ZXIgIT0gTlVMTCApCisgICAgICAgIGdvdG8gZmFpbDI7CisK KyAgICByYyA9IGh2bV9pb3JlcV9zZXJ2ZXJfaW5pdChzLCBkLCBkb21pZCwgaXNfZGVmYXVsdCwg YnVmaW9yZXFfaGFuZGxpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9p b3NlcnZpZChkKSk7CisgICAgaWYgKCByYyApCisgICAgICAgIGdvdG8gZmFpbDM7CisKKyAgICBs aXN0X2FkZCgmcy0+bGlzdF9lbnRyeSwKKyAgICAgICAgICAgICAmZC0+YXJjaC5odm1fZG9tYWlu LmlvcmVxX3NlcnZlci5saXN0KTsKKworICAgIGlmICggaXNfZGVmYXVsdCApCisgICAgeworICAg ICAgICBkLT5hcmNoLmh2bV9kb21haW4uZGVmYXVsdF9pb3JlcV9zZXJ2ZXIgPSBzOworICAgICAg ICBodm1faW9yZXFfc2VydmVyX2VuYWJsZShzLCAxKTsKKyAgICB9CisKKyAgICBpZiAoIGlkICkK KyAgICAgICAgKmlkID0gcy0+aWQ7CisKKyAgICBzcGluX3VubG9jaygmZC0+YXJjaC5odm1fZG9t YWluLmlvcmVxX3NlcnZlci5sb2NrKTsKKyAgICBkb21haW5fdW5wYXVzZShkKTsKKworICAgIHJl dHVybiAwOworCisgZmFpbDM6CisgZmFpbDI6CisgICAgc3Bpbl91bmxvY2soJmQtPmFyY2guaHZt X2RvbWFpbi5pb3JlcV9zZXJ2ZXIubG9jayk7CisgICAgZG9tYWluX3VucGF1c2UoZCk7CisKKyAg ICB4ZnJlZShzKTsKKyBmYWlsMToKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBodm1fZGVzdHJv eV9pb3JlcV9zZXJ2ZXIoc3RydWN0IGRvbWFpbiAqZCwgaW9zZXJ2aWRfdCBpZCkKK3sKKyAgICBz dHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAqczsKKyAgICBpbnQgcmM7CisKKyAgICBzcGluX2xvY2so JmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubG9jayk7CisKKyAgICByYyA9IC1FTk9F TlQ7CisgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSAoIHMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICZkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxpc3QsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpc3RfZW50cnkgKQorICAgIHsKKyAgICAgICAgaWYgKCBzID09IGQtPmFy Y2guaHZtX2RvbWFpbi5kZWZhdWx0X2lvcmVxX3NlcnZlciApCisgICAgICAgICAgICBjb250aW51 ZTsKKworICAgICAgICBpZiAoIHMtPmlkICE9IGlkICkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor CisgICAgICAgIGRvbWFpbl9wYXVzZShkKTsKKworICAgICAgICBodm1faW9yZXFfc2VydmVyX2Rp c2FibGUocywgMCk7CisKKyAgICAgICAgbGlzdF9kZWwoJnMtPmxpc3RfZW50cnkpOworCisgICAg ICAgIGh2bV9pb3JlcV9zZXJ2ZXJfZGVpbml0KHMsIDApOworCisgICAgICAgIGRvbWFpbl91bnBh dXNlKGQpOworCisgICAgICAgIHhmcmVlKHMpOworCisgICAgICAgIHJjID0gMDsKKyAgICAgICAg YnJlYWs7CisgICAgfQorCisgICAgc3Bpbl91bmxvY2soJmQtPmFyY2guaHZtX2RvbWFpbi5pb3Jl cV9zZXJ2ZXIubG9jayk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBodm1fZ2V0X2lvcmVx X3NlcnZlcl9pbmZvKHN0cnVjdCBkb21haW4gKmQsIGlvc2VydmlkX3QgaWQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICppb3JlcV9wZm4sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpidWZpb3JlcV9wZm4sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBldnRjaG5fcG9ydF90ICpidWZpb3JlcV9wb3J0KQorewor ICAgIHN0cnVjdCBodm1faW9yZXFfc2VydmVyICpzOworICAgIGludCByYzsKKworICAgIHNwaW5f bG9jaygmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZlci5sb2NrKTsKKworICAgIHJjID0g LUVOT0VOVDsKKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5ICggcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgJmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubGlzdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgbGlzdF9lbnRyeSApCisgICAgeworICAgICAgICBpZiAoIHMgPT0g ZC0+YXJjaC5odm1fZG9tYWluLmRlZmF1bHRfaW9yZXFfc2VydmVyICkKKyAgICAgICAgICAgIGNv bnRpbnVlOworCisgICAgICAgIGlmICggcy0+aWQgIT0gaWQgKQorICAgICAgICAgICAgY29udGlu dWU7CisKKyAgICAgICAgKmlvcmVxX3BmbiA9IHMtPmlvcmVxLmdtZm47CisKKyAgICAgICAgaWYg KCBzLT5idWZpb3JlcS52YSAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgKmJ1Zmlv cmVxX3BmbiA9IHMtPmJ1ZmlvcmVxLmdtZm47CisgICAgICAgICAgICAqYnVmaW9yZXFfcG9ydCA9 IHMtPmJ1ZmlvcmVxX2V2dGNobjsKKyAgICAgICAgfQorCisgICAgICAgIHJjID0gMDsKKyAgICAg ICAgYnJlYWs7CisgICAgfQorCisgICAgc3Bpbl91bmxvY2soJmQtPmFyY2guaHZtX2RvbWFpbi5p b3JlcV9zZXJ2ZXIubG9jayk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBodm1fbWFwX2lv X3JhbmdlX3RvX2lvcmVxX3NlcnZlcihzdHJ1Y3QgZG9tYWluICpkLCBpb3NlcnZpZF90IGlkLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHR5cGUsIHVpbnQ2 NF90IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90 IGVuZCkKK3sKKyAgICBzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAqczsKKyAgICBpbnQgcmM7CisK KyAgICBzcGluX2xvY2soJmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubG9jayk7CisK KyAgICByYyA9IC1FTk9FTlQ7CisgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSAoIHMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICZkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxpc3Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgKQorICAgIHsKKyAgICAgICAg aWYgKCBzID09IGQtPmFyY2guaHZtX2RvbWFpbi5kZWZhdWx0X2lvcmVxX3NlcnZlciApCisgICAg ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIHMtPmlkID09IGlkICkKKyAgICAgICAg eworICAgICAgICAgICAgc3RydWN0IHJhbmdlc2V0ICpyOworCisgICAgICAgICAgICBzd2l0Y2gg KCB0eXBlICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgSFZNT1BfSU9fUkFOR0Vf UE9SVDoKKyAgICAgICAgICAgIGNhc2UgSFZNT1BfSU9fUkFOR0VfTUVNT1JZOgorICAgICAgICAg ICAgY2FzZSBIVk1PUF9JT19SQU5HRV9QQ0k6CisgICAgICAgICAgICAgICAgciA9IHMtPnJhbmdl W3R5cGVdOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0Ogor ICAgICAgICAgICAgICAgIHIgPSBOVUxMOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgfQorCisgICAgICAgICAgICByYyA9IC1FSU5WQUw7CisgICAgICAgICAgICBpZiAoICFy ICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgcmMgPSAtRUVYSVNUOwor ICAgICAgICAgICAgaWYgKCByYW5nZXNldF9vdmVybGFwc19yYW5nZShyLCBzdGFydCwgZW5kKSAp CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHJjID0gcmFuZ2VzZXRfYWRk X3JhbmdlKHIsIHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg ICB9CisKKyAgICBzcGluX3VubG9jaygmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZlci5s b2NrKTsKKworICAgIHJldHVybiByYzsKK30KKworaW50IGh2bV91bm1hcF9pb19yYW5nZV9mcm9t X2lvcmVxX3NlcnZlcihzdHJ1Y3QgZG9tYWluICpkLCBpb3NlcnZpZF90IGlkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0eXBlLCB1aW50NjRfdCBz dGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg ZW5kKQoreworICAgIHN0cnVjdCBodm1faW9yZXFfc2VydmVyICpzOworICAgIGludCByYzsKKwor ICAgIHNwaW5fbG9jaygmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZlci5sb2NrKTsKKwor ICAgIHJjID0gLUVOT0VOVDsKKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5ICggcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgJmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubGlzdCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9lbnRyeSApCisgICAgeworICAgICAgICBp ZiAoIHMgPT0gZC0+YXJjaC5odm1fZG9tYWluLmRlZmF1bHRfaW9yZXFfc2VydmVyICkKKyAgICAg ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICggcy0+aWQgPT0gaWQgKQorICAgICAgICB7 CisgICAgICAgICAgICBzdHJ1Y3QgcmFuZ2VzZXQgKnI7CisKKyAgICAgICAgICAgIHN3aXRjaCAo IHR5cGUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBIVk1PUF9JT19SQU5HRV9Q T1JUOgorICAgICAgICAgICAgY2FzZSBIVk1PUF9JT19SQU5HRV9NRU1PUlk6CisgICAgICAgICAg ICBjYXNlIEhWTU9QX0lPX1JBTkdFX1BDSToKKyAgICAgICAgICAgICAgICByID0gcy0+cmFuZ2Vb dHlwZV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg ICAgICAgICAgICAgICAgciA9IE5VTEw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICB9CisKKyAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGlmICggIXIg KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICByYyA9IC1FTk9FTlQ7Cisg ICAgICAgICAgICBpZiAoICFyYW5nZXNldF9jb250YWluc19yYW5nZShyLCBzdGFydCwgZW5kKSAp CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHJjID0gcmFuZ2VzZXRfcmVt b3ZlX3JhbmdlKHIsIHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICB9CisKKyAgICBzcGluX3VubG9jaygmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZl ci5sb2NrKTsKKworICAgIHJldHVybiByYzsKK30KKworaW50IGh2bV9zZXRfaW9yZXFfc2VydmVy X3N0YXRlKHN0cnVjdCBkb21haW4gKmQsIGlvc2VydmlkX3QgaWQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYm9vbF90IGVuYWJsZWQpCit7CisgICAgc3RydWN0IGxpc3RfaGVhZCAq ZW50cnk7CisgICAgaW50IHJjOworCisgICAgc3Bpbl9sb2NrKCZkLT5hcmNoLmh2bV9kb21haW4u aW9yZXFfc2VydmVyLmxvY2spOworCisgICAgcmMgPSAtRU5PRU5UOworICAgIGxpc3RfZm9yX2Vh Y2ggKCBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgJmQtPmFyY2guaHZtX2RvbWFpbi5pb3Jl cV9zZXJ2ZXIubGlzdCApCisgICAgeworICAgICAgICBzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAq cyA9IGxpc3RfZW50cnkoZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZW50cnkpOworCisgICAgICAgIGlm ICggcyA9PSBkLT5hcmNoLmh2bV9kb21haW4uZGVmYXVsdF9pb3JlcV9zZXJ2ZXIgKQorICAgICAg ICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCBzLT5pZCAhPSBpZCApCisgICAgICAgICAg ICBjb250aW51ZTsKKworICAgICAgICBkb21haW5fcGF1c2UoZCk7CisKKyAgICAgICAgaWYgKCBl bmFibGVkICkKKyAgICAgICAgICAgIGh2bV9pb3JlcV9zZXJ2ZXJfZW5hYmxlKHMsIDApOworICAg ICAgICBlbHNlCisgICAgICAgICAgICBodm1faW9yZXFfc2VydmVyX2Rpc2FibGUocywgMCk7CisK KyAgICAgICAgZG9tYWluX3VucGF1c2UoZCk7CisKKyAgICAgICAgcmMgPSAwOworICAgICAgICBi cmVhazsKKyAgICB9CisKKyAgICBzcGluX3VubG9jaygmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVx X3NlcnZlci5sb2NrKTsKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBodm1fYWxsX2lvcmVxX3Nl cnZlcnNfYWRkX3ZjcHUoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IHZjcHUgKnYpCit7CisgICAg c3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnM7CisgICAgaW50IHJjOworCisgICAgc3Bpbl9sb2Nr KCZkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxvY2spOworCisgICAgbGlzdF9mb3Jf ZWFjaF9lbnRyeSAoIHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZkLT5hcmNoLmh2bV9k b21haW4uaW9yZXFfc2VydmVyLmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rf ZW50cnkgKQorICAgIHsKKyAgICAgICAgYm9vbF90IGlzX2RlZmF1bHQgPSAocyA9PSBkLT5hcmNo Lmh2bV9kb21haW4uZGVmYXVsdF9pb3JlcV9zZXJ2ZXIpOworCisgICAgICAgIHJjID0gaHZtX2lv cmVxX3NlcnZlcl9hZGRfdmNwdShzLCBpc19kZWZhdWx0LCB2KTsKKyAgICAgICAgaWYgKCByYyAp CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgc3Bpbl91bmxvY2soJmQtPmFy Y2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubG9jayk7CisKKyAgICByZXR1cm4gMDsKKworIGZh aWw6CisgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSAoIHMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICZkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxpc3QsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpc3RfZW50cnkgKQorICAgICAgICBodm1faW9yZXFfc2VydmVyX3JlbW92 ZV92Y3B1KHMsIHYpOworCisgICAgc3Bpbl91bmxvY2soJmQtPmFyY2guaHZtX2RvbWFpbi5pb3Jl cV9zZXJ2ZXIubG9jayk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3ZvaWQgaHZtX2FsbF9pb3Jl cV9zZXJ2ZXJzX3JlbW92ZV92Y3B1KHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCB2Y3B1ICp2KQor eworICAgIHN0cnVjdCBodm1faW9yZXFfc2VydmVyICpzOworCisgICAgc3Bpbl9sb2NrKCZkLT5h cmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxvY2spOworCisgICAgbGlzdF9mb3JfZWFjaF9l bnRyeSAoIHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZkLT5hcmNoLmh2bV9kb21haW4u aW9yZXFfc2VydmVyLmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZW50cnkg KQorICAgICAgICBodm1faW9yZXFfc2VydmVyX3JlbW92ZV92Y3B1KHMsIHYpOworCisgICAgc3Bp bl91bmxvY2soJmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubG9jayk7Cit9CisKK3Zv aWQgaHZtX2Rlc3Ryb3lfYWxsX2lvcmVxX3NlcnZlcnMoc3RydWN0IGRvbWFpbiAqZCkKK3sKKyAg ICBzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAqcywgKm5leHQ7CisKKyAgICBzcGluX2xvY2soJmQt PmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubG9jayk7CisKKyAgICAvKiBObyBuZWVkIHRv IGRvbWFpbl9wYXVzZSgpIGFzIHRoZSBkb21haW4gaXMgYmVpbmcgdG9ybiBkb3duICovCisKKyAg ICBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUgKCBzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5leHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmQtPmFyY2guaHZt X2RvbWFpbi5pb3JlcV9zZXJ2ZXIubGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaXN0X2VudHJ5ICkKKyAgICB7CisgICAgICAgIGJvb2xfdCBpc19kZWZhdWx0ID0gKHMgPT0g ZC0+YXJjaC5odm1fZG9tYWluLmRlZmF1bHRfaW9yZXFfc2VydmVyKTsKKworICAgICAgICBodm1f aW9yZXFfc2VydmVyX2Rpc2FibGUocywgaXNfZGVmYXVsdCk7CisKKyAgICAgICAgaWYgKCBpc19k ZWZhdWx0ICkKKyAgICAgICAgICAgIGQtPmFyY2guaHZtX2RvbWFpbi5kZWZhdWx0X2lvcmVxX3Nl cnZlciA9IE5VTEw7CisKKyAgICAgICAgbGlzdF9kZWwoJnMtPmxpc3RfZW50cnkpOworCisgICAg ICAgIGh2bV9pb3JlcV9zZXJ2ZXJfZGVpbml0KHMsIGlzX2RlZmF1bHQpOworCisgICAgICAgIHhm cmVlKHMpOworICAgIH0KKworICAgIHNwaW5fdW5sb2NrKCZkLT5hcmNoLmh2bV9kb21haW4uaW9y ZXFfc2VydmVyLmxvY2spOworfQorCitzdGF0aWMgaW50IGh2bV9yZXBsYWNlX2V2ZW50X2NoYW5u ZWwoc3RydWN0IHZjcHUgKnYsIGRvbWlkX3QgcmVtb3RlX2RvbWlkLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGV2dGNobl9wb3J0X3QgKnBfcG9ydCkKK3sKKyAgICBpbnQg b2xkX3BvcnQsIG5ld19wb3J0OworCisgICAgbmV3X3BvcnQgPSBhbGxvY191bmJvdW5kX3hlbl9l dmVudF9jaGFubmVsKHYtPmRvbWFpbiwgdi0+dmNwdV9pZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlX2RvbWlkLCBOVUxMKTsKKyAgICBpZiAo IG5ld19wb3J0IDwgMCApCisgICAgICAgIHJldHVybiBuZXdfcG9ydDsKKworICAgIC8qIHhjaGco KSBlbnN1cmVzIHRoYXQgb25seSB3ZSBjYWxsIGZyZWVfeGVuX2V2ZW50X2NoYW5uZWwoKS4gKi8K KyAgICBvbGRfcG9ydCA9IHhjaGcocF9wb3J0LCBuZXdfcG9ydCk7CisgICAgZnJlZV94ZW5fZXZl bnRfY2hhbm5lbCh2LT5kb21haW4sIG9sZF9wb3J0KTsKKyAgICByZXR1cm4gMDsKK30KKworaW50 IGh2bV9zZXRfZG1fZG9tYWluKHN0cnVjdCBkb21haW4gKmQsIGRvbWlkX3QgZG9taWQpCit7Cisg ICAgc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnM7CisgICAgaW50IHJjID0gMDsKKworICAgIHNw aW5fbG9jaygmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZlci5sb2NrKTsKKworICAgIC8q CisgICAgICogTGFjayBvZiBpb3JlcSBzZXJ2ZXIgaXMgbm90IGEgZmFpbHVyZS4gSFZNX1BBUkFN X0RNX0RPTUFJTiB3aWxsCisgICAgICogc3RpbGwgYmUgc2V0IGFuZCB0aHVzLCB3aGVuIHRoZSBz ZXJ2ZXIgaXMgY3JlYXRlZCwgaXQgd2lsbCBoYXZlCisgICAgICogdGhlIGNvcnJlY3QgZG9taWQu CisgICAgICovCisgICAgcyA9IGQtPmFyY2guaHZtX2RvbWFpbi5kZWZhdWx0X2lvcmVxX3NlcnZl cjsKKyAgICBpZiAoICFzICkKKyAgICAgICAgZ290byBkb25lOworCisgICAgZG9tYWluX3BhdXNl KGQpOworICAgIHNwaW5fbG9jaygmcy0+bG9jayk7CisKKyAgICBpZiAoIHMtPmRvbWlkICE9IGRv bWlkICkKKyAgICB7CisgICAgICAgIHN0cnVjdCBodm1faW9yZXFfdmNwdSAqc3Y7CisKKyAgICAg ICAgbGlzdF9mb3JfZWFjaF9lbnRyeSAoIHN2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnMtPmlvcmVxX3ZjcHVfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp c3RfZW50cnkgKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3QgdmNwdSAqdiA9IHN2LT52 Y3B1OworCisgICAgICAgICAgICBpZiAoIHYtPnZjcHVfaWQgPT0gMCApCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgcmMgPSBodm1fcmVwbGFjZV9ldmVudF9jaGFubmVsKHYsIGRvbWlk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcy0+YnVm aW9yZXFfZXZ0Y2huKTsKKyAgICAgICAgICAgICAgICBpZiAoIHJjICkKKyAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkLT5hcmNoLmh2bV9kb21haW4ucGFyYW1z W0hWTV9QQVJBTV9CVUZJT1JFUV9FVlRDSE5dID0KKyAgICAgICAgICAgICAgICAgICAgcy0+YnVm aW9yZXFfZXZ0Y2huOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByYyA9IGh2bV9yZXBs YWNlX2V2ZW50X2NoYW5uZWwodiwgZG9taWQsICZzdi0+aW9yZXFfZXZ0Y2huKTsKKyAgICAgICAg ICAgIGlmICggcmMgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBodm1f dXBkYXRlX2lvcmVxX2V2dGNobihzLCBzdik7CisgICAgICAgIH0KKworICAgICAgICBzLT5kb21p ZCA9IGRvbWlkOworICAgIH0KKworICAgIHNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKKyAgICBkb21h aW5fdW5wYXVzZShkKTsKKworIGRvbmU6CisgICAgc3Bpbl91bmxvY2soJmQtPmFyY2guaHZtX2Rv bWFpbi5pb3JlcV9zZXJ2ZXIubG9jayk7CisgICAgcmV0dXJuIHJjOworfQorCitzdHJ1Y3QgaHZt X2lvcmVxX3NlcnZlciAqaHZtX3NlbGVjdF9pb3JlcV9zZXJ2ZXIoc3RydWN0IGRvbWFpbiAqZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3JlcV90 ICpwKQoreworICAgIHN0cnVjdCBodm1faW9yZXFfc2VydmVyICpzOworICAgIHVpbnQzMl90IGNm ODsKKyAgICB1aW50OF90IHR5cGU7CisgICAgdWludDY0X3QgYWRkcjsKKworICAgIGlmICggbGlz dF9lbXB0eSgmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZlci5saXN0KSApCisgICAgICAg IHJldHVybiBOVUxMOworCisgICAgaWYgKCBwLT50eXBlICE9IElPUkVRX1RZUEVfQ09QWSAmJiBw LT50eXBlICE9IElPUkVRX1RZUEVfUElPICkKKyAgICAgICAgcmV0dXJuIGQtPmFyY2guaHZtX2Rv bWFpbi5kZWZhdWx0X2lvcmVxX3NlcnZlcjsKKworICAgIGNmOCA9IGQtPmFyY2guaHZtX2RvbWFp bi5wY2lfY2Y4OworCisgICAgaWYgKCBwLT50eXBlID09IElPUkVRX1RZUEVfUElPICYmCisgICAg ICAgICAocC0+YWRkciAmIH4zKSA9PSAweGNmYyAmJgorICAgICAgICAgQ0Y4X0VOQUJMRUQoY2Y4 KSApCisgICAgeworICAgICAgICB1aW50MzJfdCBzYmRmOworCisgICAgICAgIC8qIFBDSSBjb25m aWcgZGF0YSBjeWNsZSAqLworCisgICAgICAgIHNiZGYgPSBIVk1PUF9QQ0lfU0JERigwLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0JVUyhDRjhfQkRGKGNmOCkpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUENJX1NMT1QoQ0Y4X0JERihjZjgpKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBDSV9GVU5DKENGOF9CREYoY2Y4KSkpOworCisgICAgICAg IHR5cGUgPSBIVk1PUF9JT19SQU5HRV9QQ0k7CisgICAgICAgIGFkZHIgPSAoKHVpbnQ2NF90KXNi ZGYgPDwgMzIpIHwKKyAgICAgICAgICAgICAgIENGOF9BRERSX0xPKGNmOCkgfAorICAgICAgICAg ICAgICAgKHAtPmFkZHIgJiAzKTsKKyAgICAgICAgLyogQU1EIGV4dGVuZGVkIGNvbmZpZ3VyYXRp b24gc3BhY2UgYWNjZXNzPyAqLworICAgICAgICBpZiAoIENGOF9BRERSX0hJKGNmOCkgJiYKKyAg ICAgICAgICAgICBkLT5hcmNoLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgJiYKKyAgICAg ICAgICAgICBkLT5hcmNoLng4NiA+PSAweDEwICYmIGQtPmFyY2gueDg2IDw9IDB4MTcgKQorICAg ICAgICB7CisgICAgICAgICAgICB1aW50NjRfdCBtc3JfdmFsOworCisgICAgICAgICAgICBpZiAo ICFyZG1zcl9zYWZlKE1TUl9BTUQ2NF9OQl9DRkcsIG1zcl92YWwpICYmCisgICAgICAgICAgICAg ICAgIChtc3JfdmFsICYgKDFVTEwgPDwgQU1ENjRfTkJfQ0ZHX0NGOF9FWFRfRU5BQkxFX0JJVCkp ICkKKyAgICAgICAgICAgICAgICBhZGRyIHw9IENGOF9BRERSX0hJKGNmOCk7CisgICAgICAgIH0K KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdHlwZSA9IChwLT50eXBlID09IElPUkVR X1RZUEVfUElPKSA/CisgICAgICAgICAgICAgICAgSFZNT1BfSU9fUkFOR0VfUE9SVCA6IEhWTU9Q X0lPX1JBTkdFX01FTU9SWTsKKyAgICAgICAgYWRkciA9IHAtPmFkZHI7CisgICAgfQorCisgICAg bGlzdF9mb3JfZWFjaF9lbnRyeSAoIHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZkLT5h cmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpc3RfZW50cnkgKQorICAgIHsKKyAgICAgICAgc3RydWN0IHJhbmdlc2V0ICpyOworCisg ICAgICAgIGlmICggcyA9PSBkLT5hcmNoLmh2bV9kb21haW4uZGVmYXVsdF9pb3JlcV9zZXJ2ZXIg KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCAhcy0+ZW5hYmxlZCApCisg ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByID0gcy0+cmFuZ2VbdHlwZV07CisKKyAg ICAgICAgc3dpdGNoICggdHlwZSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxv bmcgZW5kOworCisgICAgICAgIGNhc2UgSFZNT1BfSU9fUkFOR0VfUE9SVDoKKyAgICAgICAgICAg IGVuZCA9IGFkZHIgKyBwLT5zaXplIC0gMTsKKyAgICAgICAgICAgIGlmICggcmFuZ2VzZXRfY29u dGFpbnNfcmFuZ2UociwgYWRkciwgZW5kKSApCisgICAgICAgICAgICAgICAgcmV0dXJuIHM7CisK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEhWTU9QX0lPX1JBTkdFX01FTU9SWToK KyAgICAgICAgICAgIGVuZCA9IGFkZHIgKyAocC0+c2l6ZSAqIHAtPmNvdW50KSAtIDE7CisgICAg ICAgICAgICBpZiAoIHJhbmdlc2V0X2NvbnRhaW5zX3JhbmdlKHIsIGFkZHIsIGVuZCkgKQorICAg ICAgICAgICAgICAgIHJldHVybiBzOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz ZSBIVk1PUF9JT19SQU5HRV9QQ0k6CisgICAgICAgICAgICBpZiAoIHJhbmdlc2V0X2NvbnRhaW5z X3NpbmdsZXRvbihyLCBhZGRyID4+IDMyKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgcC0+dHlwZSA9IElPUkVRX1RZUEVfUENJX0NPTkZJRzsKKyAgICAgICAgICAgICAgICBwLT5h ZGRyID0gYWRkcjsKKyAgICAgICAgICAgICAgICByZXR1cm4gczsKKyAgICAgICAgICAgIH0KKwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZC0+YXJj aC5odm1fZG9tYWluLmRlZmF1bHRfaW9yZXFfc2VydmVyOworfQorCitzdGF0aWMgaW50IGh2bV9z ZW5kX2J1ZmZlcmVkX2lvcmVxKHN0cnVjdCBodm1faW9yZXFfc2VydmVyICpzLCBpb3JlcV90ICpw KQoreworICAgIHN0cnVjdCBkb21haW4gKmQgPSBjdXJyZW50LT5kb21haW47CisgICAgc3RydWN0 IGh2bV9pb3JlcV9wYWdlICppb3JwOworICAgIGJ1ZmZlcmVkX2lvcGFnZV90ICpwZzsKKyAgICBi dWZfaW9yZXFfdCBicCA9IHsgLmRhdGEgPSBwLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAg ICAuYWRkciA9IHAtPmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgIC50eXBlID0gcC0+dHlw ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgLmRpciA9IHAtPmRpciB9OworICAgIC8qIFRpbWVv ZmZzZXQgc2VuZHMgNjRiIGRhdGEsIGJ1dCBubyBhZGRyZXNzLiBVc2UgdHdvIGNvbnNlY3V0aXZl IHNsb3RzLiAqLworICAgIGludCBxdyA9IDA7CisKKyAgICAvKiBFbnN1cmUgYnVmZmVyZWRfaW9w YWdlIGZpdHMgaW4gYSBwYWdlICovCisgICAgQlVJTERfQlVHX09OKHNpemVvZihidWZmZXJlZF9p b3BhZ2VfdCkgPiBQQUdFX1NJWkUpOworCisgICAgaW9ycCA9ICZzLT5idWZpb3JlcTsKKyAgICBw ZyA9IGlvcnAtPnZhOworCisgICAgaWYgKCAhcGcgKQorICAgICAgICByZXR1cm4gWDg2RU1VTF9V TkhBTkRMRUFCTEU7CisKKyAgICAvKgorICAgICAqIFJldHVybiAwIGZvciB0aGUgY2FzZXMgd2Ug Y2FuJ3QgZGVhbCB3aXRoOgorICAgICAqICAtICdhZGRyJyBpcyBvbmx5IGEgMjAtYml0IGZpZWxk LCBzbyB3ZSBjYW5ub3QgYWRkcmVzcyBiZXlvbmQgMU1CCisgICAgICogIC0gd2UgY2Fubm90IGJ1 ZmZlciBhY2Nlc3NlcyB0byBndWVzdCBtZW1vcnkgYnVmZmVycywgYXMgdGhlIGd1ZXN0CisgICAg ICogICAgbWF5IGV4cGVjdCB0aGUgbWVtb3J5IGJ1ZmZlciB0byBiZSBzeW5jaHJvbm91c2x5IGFj Y2Vzc2VkCisgICAgICogIC0gdGhlIGNvdW50IGZpZWxkIGlzIHVzdWFsbHkgdXNlZCB3aXRoIGRh dGFfaXNfcHRyIGFuZCBzaW5jZSB3ZSBkb24ndAorICAgICAqICAgIHN1cHBvcnQgZGF0YV9pc19w dHIgd2UgZG8gbm90IHdhc3RlIHNwYWNlIGZvciB0aGUgY291bnQgZmllbGQgZWl0aGVyCisgICAg ICovCisgICAgaWYgKCAocC0+YWRkciA+IDB4ZmZmZmZ1bCkgfHwgcC0+ZGF0YV9pc19wdHIgfHwg KHAtPmNvdW50ICE9IDEpICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzd2l0Y2ggKCBwLT5z aXplICkKKyAgICB7CisgICAgY2FzZSAxOgorICAgICAgICBicC5zaXplID0gMDsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICBicC5zaXplID0gMTsKKyAgICAgICAgYnJlYWs7 CisgICAgY2FzZSA0OgorICAgICAgICBicC5zaXplID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSA4OgorICAgICAgICBicC5zaXplID0gMzsKKyAgICAgICAgcXcgPSAxOworICAgICAgICBi cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgInVu ZXhwZWN0ZWQgaW9yZXEgc2l6ZTogJXVcbiIsIHAtPnNpemUpOworICAgICAgICByZXR1cm4gWDg2 RU1VTF9VTkhBTkRMRUFCTEU7CisgICAgfQorCisgICAgc3Bpbl9sb2NrKCZzLT5idWZpb3JlcV9s b2NrKTsKKworICAgIGlmICggKHBnLT5wdHJzLndyaXRlX3BvaW50ZXIgLSBwZy0+cHRycy5yZWFk X3BvaW50ZXIpID49CisgICAgICAgICAoSU9SRVFfQlVGRkVSX1NMT1RfTlVNIC0gcXcpICkKKyAg ICB7CisgICAgICAgIC8qIFRoZSBxdWV1ZSBpcyBmdWxsOiBzZW5kIHRoZSBpb3BhY2tldCB0aHJv dWdoIHRoZSBub3JtYWwgcGF0aC4gKi8KKyAgICAgICAgc3Bpbl91bmxvY2soJnMtPmJ1ZmlvcmVx X2xvY2spOworICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CisgICAgfQorCisg ICAgcGctPmJ1Zl9pb3JlcVtwZy0+cHRycy53cml0ZV9wb2ludGVyICUgSU9SRVFfQlVGRkVSX1NM T1RfTlVNXSA9IGJwOworCisgICAgaWYgKCBxdyApCisgICAgeworICAgICAgICBicC5kYXRhID0g cC0+ZGF0YSA+PiAzMjsKKyAgICAgICAgcGctPmJ1Zl9pb3JlcVsocGctPnB0cnMud3JpdGVfcG9p bnRlcisxKSAlIElPUkVRX0JVRkZFUl9TTE9UX05VTV0gPSBicDsKKyAgICB9CisKKyAgICAvKiBN YWtlIHRoZSBpb3JlcV90IHZpc2libGUgL2JlZm9yZS8gd3JpdGVfcG9pbnRlci4gKi8KKyAgICB3 bWIoKTsKKyAgICBwZy0+cHRycy53cml0ZV9wb2ludGVyICs9IHF3ID8gMiA6IDE7CisKKyAgICAv KiBDYW5vbmljYWxpemUgcmVhZC93cml0ZSBwb2ludGVycyB0byBwcmV2ZW50IHRoZWlyIG92ZXJm bG93LiAqLworICAgIHdoaWxlICggcy0+YnVmaW9yZXFfYXRvbWljICYmIHF3KysgPCBJT1JFUV9C VUZGRVJfU0xPVF9OVU0gJiYKKyAgICAgICAgICAgIHBnLT5wdHJzLnJlYWRfcG9pbnRlciA+PSBJ T1JFUV9CVUZGRVJfU0xPVF9OVU0gKQorICAgIHsKKyAgICAgICAgdW5pb24gYnVmaW9yZXFfcG9p bnRlcnMgb2xkID0gcGctPnB0cnMsIG5ldzsKKyAgICAgICAgdW5zaWduZWQgaW50IG4gPSBvbGQu cmVhZF9wb2ludGVyIC8gSU9SRVFfQlVGRkVSX1NMT1RfTlVNOworCisgICAgICAgIG5ldy5yZWFk X3BvaW50ZXIgPSBvbGQucmVhZF9wb2ludGVyIC0gbiAqIElPUkVRX0JVRkZFUl9TTE9UX05VTTsK KyAgICAgICAgbmV3LndyaXRlX3BvaW50ZXIgPSBvbGQud3JpdGVfcG9pbnRlciAtIG4gKiBJT1JF UV9CVUZGRVJfU0xPVF9OVU07CisgICAgICAgIGNtcHhjaGcoJnBnLT5wdHJzLmZ1bGwsIG9sZC5m dWxsLCBuZXcuZnVsbCk7CisgICAgfQorCisgICAgbm90aWZ5X3ZpYV94ZW5fZXZlbnRfY2hhbm5l bChkLCBzLT5idWZpb3JlcV9ldnRjaG4pOworICAgIHNwaW5fdW5sb2NrKCZzLT5idWZpb3JlcV9s b2NrKTsKKworICAgIHJldHVybiBYODZFTVVMX09LQVk7Cit9CisKK2ludCBodm1fc2VuZF9pb3Jl cShzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAqcywgaW9yZXFfdCAqcHJvdG9fcCwKKyAgICAgICAg ICAgICAgICAgICBib29sX3QgYnVmZmVyZWQpCit7CisgICAgc3RydWN0IHZjcHUgKmN1cnIgPSBj dXJyZW50OworICAgIHN0cnVjdCBkb21haW4gKmQgPSBjdXJyLT5kb21haW47CisgICAgc3RydWN0 IGh2bV9pb3JlcV92Y3B1ICpzdjsKKworICAgIEFTU0VSVChzKTsKKworICAgIGlmICggYnVmZmVy ZWQgKQorICAgICAgICByZXR1cm4gaHZtX3NlbmRfYnVmZmVyZWRfaW9yZXEocywgcHJvdG9fcCk7 CisKKyAgICBpZiAoIHVubGlrZWx5KCF2Y3B1X3N0YXJ0X3NodXRkb3duX2RlZmVycmFsKGN1cnIp KSApCisgICAgICAgIHJldHVybiBYODZFTVVMX1JFVFJZOworCisgICAgbGlzdF9mb3JfZWFjaF9l bnRyeSAoIHN2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmcy0+aW9yZXFfdmNwdV9saXN0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICkKKyAgICB7CisgICAgICAg IGlmICggc3YtPnZjcHUgPT0gY3VyciApCisgICAgICAgIHsKKyAgICAgICAgICAgIGV2dGNobl9w b3J0X3QgcG9ydCA9IHN2LT5pb3JlcV9ldnRjaG47CisgICAgICAgICAgICBpb3JlcV90ICpwID0g Z2V0X2lvcmVxKHMsIGN1cnIpOworCisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KHAtPnN0YXRl ICE9IFNUQVRFX0lPUkVRX05PTkUpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBn cHJpbnRrKFhFTkxPR19FUlIsICJkZXZpY2UgbW9kZWwgc2V0IGJhZCBJTyBzdGF0ZSAlZFxuIiwK KyAgICAgICAgICAgICAgICAgICAgICAgIHAtPnN0YXRlKTsKKyAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCB1bmxpa2VseShwLT52cF9lcG9y dCAhPSBwb3J0KSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ3ByaW50ayhYRU5M T0dfRVJSLCAiZGV2aWNlIG1vZGVsIHNldCBiYWQgZXZlbnQgY2hhbm5lbCAlZFxuIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgIHAtPnZwX2Vwb3J0KTsKKyAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvdG9fcC0+c3RhdGUgPSBTVEFURV9JT1JF UV9OT05FOworICAgICAgICAgICAgcHJvdG9fcC0+dnBfZXBvcnQgPSBwb3J0OworICAgICAgICAg ICAgKnAgPSAqcHJvdG9fcDsKKworICAgICAgICAgICAgcHJlcGFyZV93YWl0X29uX3hlbl9ldmVu dF9jaGFubmVsKHBvcnQpOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogRm9sbG93 aW5nIGhhcHBlbnMgL2FmdGVyLyBibG9ja2luZyBhbmQgc2V0dGluZyB1cCBpb3JlcQorICAgICAg ICAgICAgICogY29udGVudHMuIHByZXBhcmVfd2FpdF9vbl94ZW5fZXZlbnRfY2hhbm5lbCgpIGlz IGFuIGltcGxpY2l0CisgICAgICAgICAgICAgKiBiYXJyaWVyLgorICAgICAgICAgICAgICovCisg ICAgICAgICAgICBwLT5zdGF0ZSA9IFNUQVRFX0lPUkVRX1JFQURZOworICAgICAgICAgICAgbm90 aWZ5X3ZpYV94ZW5fZXZlbnRfY2hhbm5lbChkLCBwb3J0KTsKKworICAgICAgICAgICAgc3YtPnBl bmRpbmcgPSAxOworICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfUkVUUlk7CisgICAgICAgIH0K KyAgICB9CisKKyAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Cit9CisKK3Vuc2lnbmVk IGludCBodm1fYnJvYWRjYXN0X2lvcmVxKGlvcmVxX3QgKnAsIGJvb2xfdCBidWZmZXJlZCkKK3sK KyAgICBzdHJ1Y3QgZG9tYWluICpkID0gY3VycmVudC0+ZG9tYWluOworICAgIHN0cnVjdCBodm1f aW9yZXFfc2VydmVyICpzOworICAgIHVuc2lnbmVkIGludCBmYWlsZWQgPSAwOworCisgICAgbGlz dF9mb3JfZWFjaF9lbnRyeSAoIHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZkLT5hcmNo Lmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg IGxpc3RfZW50cnkgKQorICAgICAgICBpZiAoIGh2bV9zZW5kX2lvcmVxKHMsIHAsIGJ1ZmZlcmVk KSA9PSBYODZFTVVMX1VOSEFORExFQUJMRSApCisgICAgICAgICAgICBmYWlsZWQrKzsKKworICAg IHJldHVybiBmYWlsZWQ7Cit9CisKK3N0YXRpYyBpbnQgaHZtX2FjY2Vzc19jZjgoCisgICAgaW50 IGRpciwgdW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcywgdWludDMyX3QgKnZh bCkKK3sKKyAgICBzdHJ1Y3QgZG9tYWluICpkID0gY3VycmVudC0+ZG9tYWluOworCisgICAgaWYg KCBkaXIgPT0gSU9SRVFfV1JJVEUgJiYgYnl0ZXMgPT0gNCApCisgICAgICAgIGQtPmFyY2guaHZt X2RvbWFpbi5wY2lfY2Y4ID0gKnZhbDsKKworICAgIC8qIFdlIGFsd2F5cyBuZWVkIHRvIGZhbGwg dGhyb3VnaCB0byB0aGUgY2F0Y2ggYWxsIGVtdWxhdG9yICovCisgICAgcmV0dXJuIFg4NkVNVUxf VU5IQU5ETEVBQkxFOworfQorCit2b2lkIGh2bV9pb3JlcV9pbml0KHN0cnVjdCBkb21haW4gKmQp Cit7CisgICAgc3Bpbl9sb2NrX2luaXQoJmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIu bG9jayk7CisgICAgSU5JVF9MSVNUX0hFQUQoJmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2 ZXIubGlzdCk7CisKKyAgICByZWdpc3Rlcl9wb3J0aW9faGFuZGxlcihkLCAweGNmOCwgNCwgaHZt X2FjY2Vzc19jZjgpOworfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQwor ICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0 aDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBh L3hlbi9hcmNoL3g4Ni9odm0vc3RkdmdhLmMgYi94ZW4vYXJjaC94ODYvaHZtL3N0ZHZnYS5jCmlu ZGV4IGJkMjNiNTIuLjQ3YmI4ZmQgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vc3Rkdmdh LmMKKysrIGIveGVuL2FyY2gveDg2L2h2bS9zdGR2Z2EuYwpAQCAtMzEsNiArMzEsNyBAQAogI2lu Y2x1ZGUgPHhlbi90eXBlcy5oPgogI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgogI2luY2x1ZGUgPHhl bi9kb21haW5fcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9odm0vaW9yZXEuaD4KICNpbmNsdWRlIDxh c20vaHZtL3N1cHBvcnQuaD4KICNpbmNsdWRlIDx4ZW4vbnVtYS5oPgogI2luY2x1ZGUgPHhlbi9w YWdpbmcuaD4KZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vdm14L3Z2bXguYyBiL3hlbi9h cmNoL3g4Ni9odm0vdm14L3Z2bXguYwppbmRleCBkODhlMTcyLi4zNWYzNjg3IDEwMDY0NAotLS0g YS94ZW4vYXJjaC94ODYvaHZtL3ZteC92dm14LmMKKysrIGIveGVuL2FyY2gveDg2L2h2bS92bXgv dnZteC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVk ZSA8YXNtL210cnIuaD4KICNpbmNsdWRlIDxhc20vcDJtLmg+CisjaW5jbHVkZSA8YXNtL2h2bS9p b3JlcS5oPgogI2luY2x1ZGUgPGFzbS9odm0vdm14L3ZteC5oPgogI2luY2x1ZGUgPGFzbS9odm0v dm14L3Z2bXguaD4KICNpbmNsdWRlIDxhc20vaHZtL25lc3RlZGh2bS5oPgpkaWZmIC0tZ2l0IGEv eGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaHZtLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9o dm0uaAppbmRleCA3NTFhYjFjLi43YjdmZjNmIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20t eDg2L2h2bS9odm0uaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9odm0uaApAQCAtMjUs NyArMjUsNiBAQAogI2luY2x1ZGUgPGFzbS9odm0vYXNpZC5oPgogI2luY2x1ZGUgPHB1YmxpYy9k b21jdGwuaD4KICNpbmNsdWRlIDxwdWJsaWMvaHZtL3NhdmUuaD4KLSNpbmNsdWRlIDxwdWJsaWMv aHZtL2lvcmVxLmg+CiAjaW5jbHVkZSA8eGVuL21tLmg+CiAKICNpZm5kZWYgTkRFQlVHCkBAIC0y NTcsMTEgKzI1Niw2IEBAIGludCBodm1fdmNwdV9jYWNoZWF0dHJfaW5pdChzdHJ1Y3QgdmNwdSAq dik7CiB2b2lkIGh2bV92Y3B1X2NhY2hlYXR0cl9kZXN0cm95KHN0cnVjdCB2Y3B1ICp2KTsKIHZv aWQgaHZtX3ZjcHVfcmVzZXRfc3RhdGUoc3RydWN0IHZjcHUgKnYsIHVpbnQxNl90IGNzLCB1aW50 MTZfdCBpcCk7CiAKLXN0cnVjdCBodm1faW9yZXFfc2VydmVyICpodm1fc2VsZWN0X2lvcmVxX3Nl cnZlcihzdHJ1Y3QgZG9tYWluICpkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlvcmVxX3QgKnApOwotaW50IGh2bV9zZW5kX2lvcmVxKHN0cnVjdCBo dm1faW9yZXFfc2VydmVyICpzLCBpb3JlcV90ICpwLCBib29sX3QgYnVmZmVyZWQpOwotdW5zaWdu ZWQgaW50IGh2bV9icm9hZGNhc3RfaW9yZXEoaW9yZXFfdCAqcCwgYm9vbF90IGJ1ZmZlcmVkKTsK LQogdm9pZCBodm1fZ2V0X2d1ZXN0X3BhdChzdHJ1Y3QgdmNwdSAqdiwgdTY0ICpndWVzdF9wYXQp OwogaW50IGh2bV9zZXRfZ3Vlc3RfcGF0KHN0cnVjdCB2Y3B1ICp2LCB1NjQgZ3Vlc3RfcGF0KTsK IApAQCAtNDExLDcgKzQwNSw2IEBAIHZvaWQgaHZtX2h5cGVydmlzb3JfY3B1aWRfbGVhZih1aW50 MzJfdCBzdWJfaWR4LAogdm9pZCBodm1fY3B1aWQodW5zaWduZWQgaW50IGlucHV0LCB1bnNpZ25l ZCBpbnQgKmVheCwgdW5zaWduZWQgaW50ICplYngsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCAqZWN4LCB1bnNpZ25lZCBpbnQgKmVkeCk7CiB2b2lkIGh2 bV9taWdyYXRlX3RpbWVycyhzdHJ1Y3QgdmNwdSAqdik7Ci1ib29sX3QgaHZtX2lvX3BlbmRpbmco c3RydWN0IHZjcHUgKnYpOwogdm9pZCBodm1fZG9fcmVzdW1lKHN0cnVjdCB2Y3B1ICp2KTsKIHZv aWQgaHZtX21pZ3JhdGVfcGlycXMoc3RydWN0IHZjcHUgKnYpOwogCmRpZmYgLS1naXQgYS94ZW4v aW5jbHVkZS9hc20teDg2L2h2bS9pb3JlcS5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaW9y ZXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTc3OGVlCi0tLSAvZGV2 L251bGwKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaW9yZXEuaApAQCAtMCwwICsxLDY2 IEBACisvKgorICogaHZtLmg6IEhhcmR3YXJlIHZpcnR1YWwgbWFjaGluZSBhc3Npc3QgaW50ZXJm YWNlIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBDaXRyaXggU3lzdGVt cyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29u ZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIs IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwg YnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9y ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5k ZWYgX19BU01fWDg2X0hWTV9JT1JFUV9IX18KKyNkZWZpbmUgX19BU01fWDg2X0hWTV9JT1JFUV9I X18KKworYm9vbF90IGh2bV9pb19wZW5kaW5nKHN0cnVjdCB2Y3B1ICp2KTsKK2Jvb2xfdCBoYW5k bGVfaHZtX2lvX2NvbXBsZXRpb24oc3RydWN0IHZjcHUgKnYpOworCitpbnQgaHZtX2NyZWF0ZV9p b3JlcV9zZXJ2ZXIoc3RydWN0IGRvbWFpbiAqZCwgZG9taWRfdCBkb21pZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBib29sX3QgaXNfZGVmYXVsdCwgaW50IGJ1ZmlvcmVxX2hhbmRsaW5n LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc2VydmlkX3QgKmlkKTsKK2ludCBodm1f ZGVzdHJveV9pb3JlcV9zZXJ2ZXIoc3RydWN0IGRvbWFpbiAqZCwgaW9zZXJ2aWRfdCBpZCk7Citp bnQgaHZtX2dldF9pb3JlcV9zZXJ2ZXJfaW5mbyhzdHJ1Y3QgZG9tYWluICpkLCBpb3NlcnZpZF90 IGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqaW9yZXFf cGZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqYnVmaW9y ZXFfcGZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZ0Y2huX3BvcnRfdCAqYnVm aW9yZXFfcG9ydCk7CitpbnQgaHZtX21hcF9pb19yYW5nZV90b19pb3JlcV9zZXJ2ZXIoc3RydWN0 IGRvbWFpbiAqZCwgaW9zZXJ2aWRfdCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50MzJfdCB0eXBlLCB1aW50NjRfdCBzdGFydCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBlbmQpOworaW50IGh2bV91bm1hcF9pb19yYW5n ZV9mcm9tX2lvcmVxX3NlcnZlcihzdHJ1Y3QgZG9tYWluICpkLCBpb3NlcnZpZF90IGlkLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0eXBlLCB1aW50 NjRfdCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDY0X3QgZW5kKTsKK2ludCBodm1fc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZShzdHJ1Y3QgZG9tYWlu ICpkLCBpb3NlcnZpZF90IGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xf dCBlbmFibGVkKTsKKworaW50IGh2bV9hbGxfaW9yZXFfc2VydmVyc19hZGRfdmNwdShzdHJ1Y3Qg ZG9tYWluICpkLCBzdHJ1Y3QgdmNwdSAqdik7Cit2b2lkIGh2bV9hbGxfaW9yZXFfc2VydmVyc19y ZW1vdmVfdmNwdShzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgdmNwdSAqdik7Cit2b2lkIGh2bV9k ZXN0cm95X2FsbF9pb3JlcV9zZXJ2ZXJzKHN0cnVjdCBkb21haW4gKmQpOworCitpbnQgaHZtX3Nl dF9kbV9kb21haW4oc3RydWN0IGRvbWFpbiAqZCwgZG9taWRfdCBkb21pZCk7CisKK3N0cnVjdCBo dm1faW9yZXFfc2VydmVyICpodm1fc2VsZWN0X2lvcmVxX3NlcnZlcihzdHJ1Y3QgZG9tYWluICpk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvcmVx X3QgKnApOworaW50IGh2bV9zZW5kX2lvcmVxKHN0cnVjdCBodm1faW9yZXFfc2VydmVyICpzLCBp b3JlcV90ICpwcm90b19wLAorICAgICAgICAgICAgICAgICAgIGJvb2xfdCBidWZmZXJlZCk7Cit1 bnNpZ25lZCBpbnQgaHZtX2Jyb2FkY2FzdF9pb3JlcShpb3JlcV90ICpwLCBib29sX3QgYnVmZmVy ZWQpOworCit2b2lkIGh2bV9pb3JlcV9pbml0KHN0cnVjdCBkb21haW4gKmQpOworCisjZW5kaWYg LyogX19BU01fWDg2X0hWTV9JT1JFUV9IX18gKi8KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoK KyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0 CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICov Ci0tIAoyLjEuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDov L2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==