From: Nirbhay Choubey Date: July 29 2011 10:09am Subject: bzr push into mysql-trunk branch (nirbhay.choubey:3240 to 3241) WL#5945 List-Archive: http://lists.mysql.com/commits/140513 Message-Id: <201107291012.p6TACvBw010598@acsmt356.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 IDMyNDEgTmlyYmhheSBDaG91YmV5CTIwMTEtMDctMjkKICAgICAgV0wjNTk0NSA6IEltcHJvdmUg bGliZWRpdCBsaWJyYXJ5CiAgICAgIAogICAgICBTeW5jIHdpdGggTmV0QlNEIENWUyBoZWFkLgoK ICAgIG1vZGlmaWVkOgogICAgICBjbWQtbGluZS11dGlscy9saWJlZGl0L2NoYXJlZC5jCiAgICAg IGNtZC1saW5lLXV0aWxzL2xpYmVkaXQvY2hhcnR5cGUuYwogICAgICBjbWQtbGluZS11dGlscy9s aWJlZGl0L2VsLmMKICAgICAgY21kLWxpbmUtdXRpbHMvbGliZWRpdC9lbG4uYwogICAgICBjbWQt bGluZS11dGlscy9saWJlZGl0L2ZpbGVjb21wbGV0ZS5jCiAgICAgIGNtZC1saW5lLXV0aWxzL2xp YmVkaXQvaGlzdC5jCiAgICAgIGNtZC1saW5lLXV0aWxzL2xpYmVkaXQvaGlzdC5oCiAgICAgIGNt ZC1saW5lLXV0aWxzL2xpYmVkaXQvaGlzdGVkaXQuaAogICAgICBjbWQtbGluZS11dGlscy9saWJl ZGl0L2hpc3RvcnkuYwogICAgICBjbWQtbGluZS11dGlscy9saWJlZGl0L2tleW1hY3JvLmMKICAg ICAgY21kLWxpbmUtdXRpbHMvbGliZWRpdC9tYXAuYwogICAgICBjbWQtbGluZS11dGlscy9saWJl ZGl0L3JlYWQuYwogICAgICBjbWQtbGluZS11dGlscy9saWJlZGl0L3JlYWRsaW5lLmMKICAgICAg Y21kLWxpbmUtdXRpbHMvbGliZWRpdC9zZWFyY2guYwogICAgICBjbWQtbGluZS11dGlscy9saWJl ZGl0L3NpZy5jCiAgICAgIGNtZC1saW5lLXV0aWxzL2xpYmVkaXQvc3lzLmgKICAgICAgY21kLWxp bmUtdXRpbHMvbGliZWRpdC90ZXJtaW5hbC5jCiAgICAgIGNtZC1saW5lLXV0aWxzL2xpYmVkaXQv dG9rZW5pemVyLmMKICAgICAgY21kLWxpbmUtdXRpbHMvbGliZWRpdC92aS5jCiAzMjQwIE5pcmJo YXkgQ2hvdWJleQkyMDExLTA3LTI4CiAgICAgIFdMIzU5NDUgOiBJbXByb3ZlIGxpYmVkaXQgbGli cmFyeQogICAgICAKICAgICAgU3luYyB3aXRoIE5ldEJTRCBDVlMgaGVhZC4KCiAgICByZW5hbWVk OgogICAgICBjbWQtbGluZS11dGlscy9saWJlZGl0L2VsX3Rlcm0uaCA9PiBjbWQtbGluZS11dGls cy9saWJlZGl0L2VsX3Rlcm1pbmFsLmgKICAgICAgY21kLWxpbmUtdXRpbHMvbGliZWRpdC9rZXku YyA9PiBjbWQtbGluZS11dGlscy9saWJlZGl0L2tleW1hY3JvLmMKICAgICAgY21kLWxpbmUtdXRp bHMvbGliZWRpdC9rZXkuaCA9PiBjbWQtbGluZS11dGlscy9saWJlZGl0L2tleW1hY3JvLmgKICAg ICAgY21kLWxpbmUtdXRpbHMvbGliZWRpdC90ZXJtLmMgPT4gY21kLWxpbmUtdXRpbHMvbGliZWRp dC90ZXJtaW5hbC5jCiAgICBtb2RpZmllZDoKICAgICAgY21kLWxpbmUtdXRpbHMvbGliZWRpdC9D TWFrZUxpc3RzLnR4dAogICAgICBjbWQtbGluZS11dGlscy9saWJlZGl0L1JFQURNRQogICAgICBj bWQtbGluZS11dGlscy9saWJlZGl0L2NoYXJlZC5jCiAgICAgIGNtZC1saW5lLXV0aWxzL2xpYmVk aXQvY2hhcnR5cGUuYwogICAgICBjbWQtbGluZS11dGlscy9saWJlZGl0L2NvbW1vbi5jCiAgICAg IGNtZC1saW5lLXV0aWxzL2xpYmVkaXQvZWwuYwogICAgICBjbWQtbGluZS11dGlscy9saWJlZGl0 L2VsLmgKICAgICAgY21kLWxpbmUtdXRpbHMvbGliZWRpdC9lbG4uYwogICAgICBjbWQtbGluZS11 dGlscy9saWJlZGl0L2VtYWNzLmMKICAgICAgY21kLWxpbmUtdXRpbHMvbGliZWRpdC9maWxlY29t cGxldGUuYwogICAgICBjbWQtbGluZS11dGlscy9saWJlZGl0L21hcC5jCiAgICAgIGNtZC1saW5l LXV0aWxzL2xpYmVkaXQvcGFyc2UuYwogICAgICBjbWQtbGluZS11dGlscy9saWJlZGl0L3Byb21w dC5jCiAgICAgIGNtZC1saW5lLXV0aWxzL2xpYmVkaXQvcmVhZC5jCiAgICAgIGNtZC1saW5lLXV0 aWxzL2xpYmVkaXQvcmVhZGxpbmUuYwogICAgICBjbWQtbGluZS11dGlscy9saWJlZGl0L3JlZnJl c2guYwogICAgICBjbWQtbGluZS11dGlscy9saWJlZGl0L3NlYXJjaC5jCiAgICAgIGNtZC1saW5l LXV0aWxzL2xpYmVkaXQvc2lnLmMKICAgICAgY21kLWxpbmUtdXRpbHMvbGliZWRpdC9zeXMuaAog ICAgICBjbWQtbGluZS11dGlscy9saWJlZGl0L3R0eS5jCiAgICAgIGNtZC1saW5lLXV0aWxzL2xp YmVkaXQvdmkuYwogICAgICBjbWQtbGluZS11dGlscy9saWJlZGl0L2VsX3Rlcm1pbmFsLmgKICAg ICAgY21kLWxpbmUtdXRpbHMvbGliZWRpdC9rZXltYWNyby5jCiAgICAgIGNtZC1saW5lLXV0aWxz L2xpYmVkaXQva2V5bWFjcm8uaAogICAgICBjbWQtbGluZS11dGlscy9saWJlZGl0L3Rlcm1pbmFs LmMKPT09IG1vZGlmaWVkIGZpbGUgJ2NtZC1saW5lLXV0aWxzL2xpYmVkaXQvY2hhcmVkLmMnCi0t LSBhL2NtZC1saW5lLXV0aWxzL2xpYmVkaXQvY2hhcmVkLmMJMjAxMS0wNy0yOCAwODowNjo0NSAr MDAwMAorKysgYi9jbWQtbGluZS11dGlscy9saWJlZGl0L2NoYXJlZC5jCTIwMTEtMDctMjkgMTA6 MDI6MDcgKzAwMDAKQEAgLTEsNCArMSw0IEBACi0vKgkkTmV0QlNEOiBjaGFyZWQuYyx2IDEuMzAg MjAxMS8wNy8yOCAwMTowNToyMCBjaHJpc3RvcyBFeHAgJAkqLworLyoJJE5ldEJTRDogY2hhcmVk LmMsdiAxLjMxIDIwMTEvMDcvMjggMjA6NTA6NTUgY2hyaXN0b3MgRXhwICQJKi8KIAogLyotCiAg KiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKQEAgLTU0Myw3ICs1NDMsNyBAQCBjaF9fY2xlYXJt YWNybyhFZGl0TGluZSAqZWwpCiB7CiAJY19tYWNyb190ICptYSA9ICZlbC0+ZWxfY2hhcmVkLmNf bWFjcm87CiAJd2hpbGUgKG1hLT5sZXZlbCA+PSAwKQotCQllbF9mcmVlKChwdHJfdCltYS0+bWFj cm9bbWEtPmxldmVsLS1dKTsKKwkJZWxfZnJlZShtYS0+bWFjcm9bbWEtPmxldmVsLS1dKTsKIH0K IAogLyogY2hfZW5sYXJnZWJ1ZnMoKToKQEAgLTU4OCw3ICs1ODgsOCBAQCBjaF9lbmxhcmdlYnVm cyhFZGl0TGluZSAqZWwsIHNpemVfdCBhZGRsCiAJLyoKIAkgKiBSZWFsbG9jYXRlIGtpbGwgYnVm ZmVyLgogCSAqLwotCW5ld2J1ZmZlciA9IGVsX3JlYWxsb2MoZWwtPmVsX2NoYXJlZC5jX2tpbGwu YnVmLCBuZXdzeiAqIHNpemVvZigqbmV3YnVmZmVyKSk7CisJbmV3YnVmZmVyID0gZWxfcmVhbGxv YyhlbC0+ZWxfY2hhcmVkLmNfa2lsbC5idWYsIG5ld3N6ICoKKwkgICAgc2l6ZW9mKCpuZXdidWZm ZXIpKTsKIAlpZiAoIW5ld2J1ZmZlcikKIAkJcmV0dXJuIDA7CiAKQEAgLTY0MSwyMCArNjQyLDIw IEBAIGNoX2VubGFyZ2VidWZzKEVkaXRMaW5lICplbCwgc2l6ZV90IGFkZGwKIHByb3RlY3RlZCB2 b2lkCiBjaF9lbmQoRWRpdExpbmUgKmVsKQogewotCWVsX2ZyZWUoKHB0cl90KSBlbC0+ZWxfbGlu ZS5idWZmZXIpOworCWVsX2ZyZWUoZWwtPmVsX2xpbmUuYnVmZmVyKTsKIAllbC0+ZWxfbGluZS5i dWZmZXIgPSBOVUxMOwogCWVsLT5lbF9saW5lLmxpbWl0ID0gTlVMTDsKLQllbF9mcmVlKChwdHJf dCkgZWwtPmVsX2NoYXJlZC5jX3VuZG8uYnVmKTsKKwllbF9mcmVlKGVsLT5lbF9jaGFyZWQuY191 bmRvLmJ1Zik7CiAJZWwtPmVsX2NoYXJlZC5jX3VuZG8uYnVmID0gTlVMTDsKLQllbF9mcmVlKChw dHJfdCkgZWwtPmVsX2NoYXJlZC5jX3JlZG8uYnVmKTsKKwllbF9mcmVlKGVsLT5lbF9jaGFyZWQu Y19yZWRvLmJ1Zik7CiAJZWwtPmVsX2NoYXJlZC5jX3JlZG8uYnVmID0gTlVMTDsKIAllbC0+ZWxf Y2hhcmVkLmNfcmVkby5wb3MgPSBOVUxMOwogCWVsLT5lbF9jaGFyZWQuY19yZWRvLmxpbSA9IE5V TEw7CiAJZWwtPmVsX2NoYXJlZC5jX3JlZG8uY21kID0gRURfVU5BU1NJR05FRDsKLQllbF9mcmVl KChwdHJfdCkgZWwtPmVsX2NoYXJlZC5jX2tpbGwuYnVmKTsKKwllbF9mcmVlKGVsLT5lbF9jaGFy ZWQuY19raWxsLmJ1Zik7CiAJZWwtPmVsX2NoYXJlZC5jX2tpbGwuYnVmID0gTlVMTDsKIAljaF9y ZXNldChlbCwgMSk7Ci0JZWxfZnJlZSgocHRyX3QpIGVsLT5lbF9jaGFyZWQuY19tYWNyby5tYWNy byk7CisJZWxfZnJlZShlbC0+ZWxfY2hhcmVkLmNfbWFjcm8ubWFjcm8pOwogCWVsLT5lbF9jaGFy ZWQuY19tYWNyby5tYWNybyA9IE5VTEw7CiB9CiAKCj09PSBtb2RpZmllZCBmaWxlICdjbWQtbGlu ZS11dGlscy9saWJlZGl0L2NoYXJ0eXBlLmMnCi0tLSBhL2NtZC1saW5lLXV0aWxzL2xpYmVkaXQv Y2hhcnR5cGUuYwkyMDExLTA3LTI4IDA4OjA2OjQ1ICswMDAwCisrKyBiL2NtZC1saW5lLXV0aWxz L2xpYmVkaXQvY2hhcnR5cGUuYwkyMDExLTA3LTI5IDEwOjAyOjA3ICswMDAwCkBAIC0xLDQgKzEs NCBAQAotLyoJJE5ldEJTRDogY2hhcnR5cGUuYyx2IDEuNiAyMDExLzA3LzI4IDAwOjQ4OjIxIGNo cmlzdG9zIEV4cCAkCSovCisvKgkkTmV0QlNEOiBjaGFydHlwZS5jLHYgMS43IDIwMTEvMDcvMjgg MjA6NTA6NTUgY2hyaXN0b3MgRXhwICQJKi8KIAogLyotCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDkg VGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCkBAIC01MSw3ICs1MSw3IEBAIGN0X2NvbnZfYnVm Zl9yZXNpemUoY3RfYnVmZmVyX3QgKmNvbnYsIHMKIAl2b2lkICpwOwogCWlmIChtaW5jc2l6ZSA+ IGNvbnYtPmNzaXplKSB7CiAJCWNvbnYtPmNzaXplID0gbWluY3NpemU7Ci0JCXAgPSBlbF9yZWFs bG9jKGNvbnYtPmNidWZmLCBjb252LT5jc2l6ZSAqIHNpemVvZihjaGFyKSk7CisJCXAgPSBlbF9y ZWFsbG9jKGNvbnYtPmNidWZmLCBjb252LT5jc2l6ZSAqIHNpemVvZigqY29udi0+Y2J1ZmYpKTsK IAkJaWYgKHAgPT0gTlVMTCkgewogCQkJY29udi0+Y3NpemUgPSAwOwogCQkJZWxfZnJlZShjb252 LT5jYnVmZik7CkBAIC02Miw3ICs2Miw3IEBAIGN0X2NvbnZfYnVmZl9yZXNpemUoY3RfYnVmZmVy X3QgKmNvbnYsIHMKIAogCWlmIChtaW53c2l6ZSA+IGNvbnYtPndzaXplKSB7CiAJCWNvbnYtPndz aXplID0gbWlud3NpemU7Ci0JCXAgPSBlbF9yZWFsbG9jKGNvbnYtPndidWZmLCBjb252LT53c2l6 ZSAqIHNpemVvZihDaGFyKSk7CisJCXAgPSBlbF9yZWFsbG9jKGNvbnYtPndidWZmLCBjb252LT53 c2l6ZSAqIHNpemVvZigqY29udi0+d2J1ZmYpKTsKIAkJaWYgKHAgPT0gTlVMTCkgewogCQkJY29u di0+d3NpemUgPSAwOwogCQkJZWxfZnJlZShjb252LT53YnVmZik7Cgo9PT0gbW9kaWZpZWQgZmls ZSAnY21kLWxpbmUtdXRpbHMvbGliZWRpdC9lbC5jJwotLS0gYS9jbWQtbGluZS11dGlscy9saWJl ZGl0L2VsLmMJMjAxMS0wNy0yOCAwODowNjo0NSArMDAwMAorKysgYi9jbWQtbGluZS11dGlscy9s aWJlZGl0L2VsLmMJMjAxMS0wNy0yOSAxMDowMjowNyArMDAwMApAQCAtMSw0ICsxLDQgQEAKLS8q CSROZXRCU0Q6IGVsLmMsdiAxLjY2IDIwMTEvMDcvMjggMDE6NTY6MjcgY2hyaXN0b3MgRXhwICQJ Ki8KKy8qCSROZXRCU0Q6IGVsLmMsdiAxLjY3IDIwMTEvMDcvMjggMjA6NTA6NTUgY2hyaXN0b3Mg RXhwICQJKi8KIAogLyotCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKQEAgLTU5LDcgKzU5 LDcgQEAgc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWVsLmMJOC4yIChCZQogcHVibGljIEVk aXRMaW5lICoKIGVsX2luaXQoY29uc3QgY2hhciAqcHJvZywgRklMRSAqZmluLCBGSUxFICpmb3V0 LCBGSUxFICpmZXJyKQogewotCUVkaXRMaW5lICplbCA9IChFZGl0TGluZSAqKSBlbF9tYWxsb2Mo c2l6ZW9mKEVkaXRMaW5lKSk7CisJRWRpdExpbmUgKmVsID0gZWxfbWFsbG9jKHNpemVvZigqZWwp KTsKIAogCWlmIChlbCA9PSBOVUxMKQogCQlyZXR1cm4gKE5VTEwpOwpAQCAtMTMzLDE0ICsxMzMs MTQgQEAgZWxfZW5kKEVkaXRMaW5lICplbCkKIAlwcm9tcHRfZW5kKGVsKTsKIAlzaWdfZW5kKGVs KTsKIAotCWVsX2ZyZWUoKHB0cl90KSBlbC0+ZWxfcHJvZyk7CisJZWxfZnJlZShlbC0+ZWxfcHJv Zyk7CiAjaWZkZWYgV0lERUNIQVIKLQllbF9mcmVlKChwdHJfdCkgZWwtPmVsX3NjcmF0Y2guY2J1 ZmYpOwotCWVsX2ZyZWUoKHB0cl90KSBlbC0+ZWxfc2NyYXRjaC53YnVmZik7Ci0JZWxfZnJlZSgo cHRyX3QpIGVsLT5lbF9sZ2N5Y29udi5jYnVmZik7Ci0JZWxfZnJlZSgocHRyX3QpIGVsLT5lbF9s Z2N5Y29udi53YnVmZik7CisJZWxfZnJlZShlbC0+ZWxfc2NyYXRjaC5jYnVmZik7CisJZWxfZnJl ZShlbC0+ZWxfc2NyYXRjaC53YnVmZik7CisJZWxfZnJlZShlbC0+ZWxfbGdjeWNvbnYuY2J1ZmYp OworCWVsX2ZyZWUoZWwtPmVsX2xnY3ljb252LndidWZmKTsKICNlbmRpZgotCWVsX2ZyZWUoKHB0 cl90KSBlbCk7CisJZWxfZnJlZShlbCk7CiB9CiAKIApAQCAtMjY5LDcgKzI2OSw3IEBAIEZVTihl bCxzZXQpKEVkaXRMaW5lICplbCwgaW50IG9wLCAuLi4pCiAJY2FzZSBFTF9ISVNUOgogCXsKIAkJ aGlzdF9mdW5fdCBmdW5jID0gdmFfYXJnKGFwLCBoaXN0X2Z1bl90KTsKLQkJcHRyX3QgcHRyID0g dmFfYXJnKGFwLCBwdHJfdCk7CisJCXZvaWQgKnB0ciA9IHZhX2FyZyhhcCwgdm9pZCAqKTsKIAog CQlydiA9IGhpc3Rfc2V0KGVsLCBmdW5jLCBwdHIpOwogCQlpZiAoIShlbC0+ZWxfZmxhZ3MgJiBD SEFSU0VUX0lTX1VURjgpKQpAQCAtNTMxLDcgKzUzMSw3IEBAIGVsX3NvdXJjZShFZGl0TGluZSAq ZWwsIGNvbnN0IGNoYXIgKmZuYW0KIAkJaWYgKChwdHIgPSBnZXRlbnYoIkhPTUUiKSkgPT0gTlVM TCkKIAkJCXJldHVybiAoLTEpOwogCQlwbGVuICs9IHN0cmxlbihwdHIpOwotCQlpZiAoKHBhdGgg PSBtYWxsb2MocGxlbikpID09IE5VTEwpCisJCWlmICgocGF0aCA9IGVsX21hbGxvYyhwbGVuICog c2l6ZW9mKCpwYXRoKSkpID09IE5VTEwpCiAJCQlyZXR1cm4gKC0xKTsKIAkJKHZvaWQpc25wcmlu dGYocGF0aCwgcGxlbiwgIiVzJXMiLCBwdHIsIGVscGF0aCk7CiAJCWZuYW1lID0gcGF0aDsKCj09 PSBtb2RpZmllZCBmaWxlICdjbWQtbGluZS11dGlscy9saWJlZGl0L2Vsbi5jJwotLS0gYS9jbWQt bGluZS11dGlscy9saWJlZGl0L2Vsbi5jCTIwMTEtMDctMjggMDg6MDY6NDUgKzAwMDAKKysrIGIv Y21kLWxpbmUtdXRpbHMvbGliZWRpdC9lbG4uYwkyMDExLTA3LTI5IDEwOjAyOjA3ICswMDAwCkBA IC0xLDQgKzEsNCBAQAotLyoJJE5ldEJTRDogZWxuLmMsdiAxLjExIDIwMTEvMDcvMjggMDE6MDU6 MjAgY2hyaXN0b3MgRXhwICQJKi8KKy8qCSROZXRCU0Q6IGVsbi5jLHYgMS4xMiAyMDExLzA3LzI4 IDIwOjUwOjU1IGNocmlzdG9zIEV4cCAkCSovCiAKIC8qLQogICogQ29weXJpZ2h0IChjKSAyMDA5 IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgpAQCAtMjE0LDcgKzIxNCw3IEBAIGVsX3NldChF ZGl0TGluZSAqZWwsIGludCBvcCwgLi4uKQogCX0KIAljYXNlIEVMX0hJU1Q6IHsgICAgICAgICAg IC8qIGhpc3RfZnVuX3QsIGNvbnN0IGNoYXIgKiAqLwogCQloaXN0X2Z1bl90IGZ1biA9IHZhX2Fy ZyhhcCwgaGlzdF9mdW5fdCk7Ci0JCXB0cl90IHB0ciA9IHZhX2FyZyhhcCwgcHRyX3QpOworCQl2 b2lkICpwdHIgPSB2YV9hcmcoYXAsIHZvaWQgKik7CiAJCXJldCA9IGhpc3Rfc2V0KGVsLCBmdW4s IHB0cik7CiAJCWVsLT5lbF9mbGFncyB8PSBOQVJST1dfSElTVE9SWTsKIAkJYnJlYWs7Cgo9PT0g bW9kaWZpZWQgZmlsZSAnY21kLWxpbmUtdXRpbHMvbGliZWRpdC9maWxlY29tcGxldGUuYycKLS0t IGEvY21kLWxpbmUtdXRpbHMvbGliZWRpdC9maWxlY29tcGxldGUuYwkyMDExLTA3LTI4IDA4OjA2 OjQ1ICswMDAwCisrKyBiL2NtZC1saW5lLXV0aWxzL2xpYmVkaXQvZmlsZWNvbXBsZXRlLmMJMjAx MS0wNy0yOSAxMDowMjowNyArMDAwMApAQCAtMSw0ICsxLDQgQEAKLS8qCSROZXRCU0Q6IGZpbGVj b21wbGV0ZS5jLHYgMS4yNCAyMDExLzA3LzI4IDAwOjUwOjIzIGNocmlzdG9zIEV4cCAkCSovCisv KgkkTmV0QlNEOiBmaWxlY29tcGxldGUuYyx2IDEuMjYgMjAxMS8wNy8yOCAyMDo1MDo1NSBjaHJp c3RvcyBFeHAgJAkqLwogCiAvKi0KICAqIENvcHlyaWdodCAoYykgMTk5NyBUaGUgTmV0QlNEIEZv dW5kYXRpb24sIEluYy4KQEAgLTk1LDE0ICs5NSwxMyBAQCBzdGF0aWMgY29uc3QgQ2hhciBicmVh a19jaGFyc1tdID0geyAnICcsCiBjaGFyICoKIGZuX3RpbGRlX2V4cGFuZChjb25zdCBjaGFyICp0 eHQpCiB7Ci0Jc3RydWN0IHBhc3N3ZCAqcGFzczsKLQljaGFyICp0ZW1wOwotCXNpemVfdCBsZW4g PSAwOwotCiAjaWYgZGVmaW5lZChIQVZFX0dFVFBXX1JfUE9TSVgpIHx8IGRlZmluZWQoSEFWRV9H RVRQV19SX0RSQUZUKQogCXN0cnVjdCBwYXNzd2QgcHdyZXM7CiAJY2hhciBwd2J1ZlsxMDI0XTsK ICNlbmRpZgorCXN0cnVjdCBwYXNzd2QgKnBhc3M7CisJY2hhciAqdGVtcDsKKwlzaXplX3QgbGVu ID0gMDsKIAogCWlmICh0eHRbMF0gIT0gJ34nKQogCQlyZXR1cm4gKHN0cmR1cCh0eHQpKTsKQEAg LTExNCw3ICsxMTMsNyBAQCBmbl90aWxkZV9leHBhbmQoY29uc3QgY2hhciAqdHh0KQogCQkJcmV0 dXJuIE5VTEw7CiAJfSBlbHNlIHsKIAkJbGVuID0gdGVtcCAtIHR4dCArIDE7CS8qIHRleHQgdW50 aWwgc3RyaW5nIGFmdGVyIHNsYXNoICovCi0JCXRlbXAgPSBtYWxsb2MobGVuKTsKKwkJdGVtcCA9 IGVsX21hbGxvYyhsZW4gKiBzaXplb2YoKnRlbXApKTsKIAkJaWYgKHRlbXAgPT0gTlVMTCkKIAkJ CXJldHVybiBOVUxMOwogCQkodm9pZClzdHJuY3B5KHRlbXAsIHR4dCArIDEsIGxlbiAtIDIpOwpA QCAtMTQwLDcgKzEzOSw3IEBAIGZuX3RpbGRlX2V4cGFuZChjb25zdCBjaGFyICp0eHQpCiAJCXBh c3MgPSBnZXRwd25hbSh0ZW1wKTsKICNlbmRpZgogCX0KLQlmcmVlKHRlbXApOwkJLyogdmFsdWUg bm8gbW9yZSBuZWVkZWQgKi8KKwllbF9mcmVlKHRlbXApOwkJLyogdmFsdWUgbm8gbW9yZSBuZWVk ZWQgKi8KIAlpZiAocGFzcyA9PSBOVUxMKQogCQlyZXR1cm4gKHN0cmR1cCh0eHQpKTsKIApAQCAt MTQ4LDEwICsxNDcsMTEgQEAgZm5fdGlsZGVfZXhwYW5kKGNvbnN0IGNoYXIgKnR4dCkKIAkvKiBm aXJzdCBzbGFzaCAqLwogCXR4dCArPSBsZW47CiAKLQl0ZW1wID0gbWFsbG9jKHN0cmxlbihwYXNz LT5wd19kaXIpICsgMSArIHN0cmxlbih0eHQpICsgMSk7CisJbGVuID0gc3RybGVuKHBhc3MtPnB3 X2RpcikgKyAxICsgc3RybGVuKHR4dCkgKyAxOworCXRlbXAgPSBlbF9tYWxsb2MobGVuICogc2l6 ZW9mKCp0ZW1wKSk7CiAJaWYgKHRlbXAgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7Ci0JKHZvaWQp c3ByaW50Zih0ZW1wLCAiJXMvJXMiLCBwYXNzLT5wd19kaXIsIHR4dCk7CisJKHZvaWQpc25wcmlu dGYodGVtcCwgbGVuLCAiJXMvJXMiLCBwYXNzLT5wd19kaXIsIHR4dCk7CiAKIAlyZXR1cm4gKHRl bXApOwogfQpAQCAtMTc5LDkgKzE3OSwxMCBAQCBmbl9maWxlbmFtZV9jb21wbGV0aW9uX2Z1bmN0 aW9uKGNvbnN0IGNoCiAJCWlmICh0ZW1wKSB7CiAJCQljaGFyICpucHRyOwogCQkJdGVtcCsrOwot CQkJbnB0ciA9IHJlYWxsb2MoZmlsZW5hbWUsIHN0cmxlbih0ZW1wKSArIDEpOworCQkJbnB0ciA9 IGVsX3JlYWxsb2MoZmlsZW5hbWUsIChzdHJsZW4odGVtcCkgKyAxKSAqCisJCQkgICAgc2l6ZW9m KCpucHRyKSk7CiAJCQlpZiAobnB0ciA9PSBOVUxMKSB7Ci0JCQkJZnJlZShmaWxlbmFtZSk7CisJ CQkJZWxfZnJlZShmaWxlbmFtZSk7CiAJCQkJZmlsZW5hbWUgPSBOVUxMOwogCQkJCXJldHVybiBO VUxMOwogCQkJfQpAQCAtMTg5LDkgKzE5MCwxMCBAQCBmbl9maWxlbmFtZV9jb21wbGV0aW9uX2Z1 bmN0aW9uKGNvbnN0IGNoCiAJCQkodm9pZClzdHJjcHkoZmlsZW5hbWUsIHRlbXApOwogCQkJbGVu ID0gdGVtcCAtIHRleHQ7CS8qIGluY2x1ZGluZyBsYXN0IHNsYXNoICovCiAKLQkJCW5wdHIgPSBy ZWFsbG9jKGRpcm5hbWUsIGxlbiArIDEpOworCQkJbnB0ciA9IGVsX3JlYWxsb2MoZGlybmFtZSwg KGxlbiArIDEpICoKKwkJCSAgICBzaXplb2YoKm5wdHIpKTsKIAkJCWlmIChucHRyID09IE5VTEwp IHsKLQkJCQlmcmVlKGRpcm5hbWUpOworCQkJCWVsX2ZyZWUoZGlybmFtZSk7CiAJCQkJZGlybmFt ZSA9IE5VTEw7CiAJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CkBAIC0xOTksNyArMjAxLDcgQEAgZm5f ZmlsZW5hbWVfY29tcGxldGlvbl9mdW5jdGlvbihjb25zdCBjaAogCQkJKHZvaWQpc3RybmNweShk aXJuYW1lLCB0ZXh0LCBsZW4pOwogCQkJZGlybmFtZVtsZW5dID0gJ1wwJzsKIAkJfSBlbHNlIHsK LQkJCWZyZWUoZmlsZW5hbWUpOworCQkJZWxfZnJlZShmaWxlbmFtZSk7CiAJCQlpZiAoKnRleHQg PT0gMCkKIAkJCQlmaWxlbmFtZSA9IE5VTEw7CiAJCQllbHNlIHsKQEAgLTIwNyw3ICsyMDksNyBA QCBmbl9maWxlbmFtZV9jb21wbGV0aW9uX2Z1bmN0aW9uKGNvbnN0IGNoCiAJCQkJaWYgKGZpbGVu YW1lID09IE5VTEwpCiAJCQkJCXJldHVybiBOVUxMOwogCQkJfQotCQkJZnJlZShkaXJuYW1lKTsK KwkJCWVsX2ZyZWUoZGlybmFtZSk7CiAJCQlkaXJuYW1lID0gTlVMTDsKIAkJfQogCkBAIC0yMTgs NyArMjIwLDcgQEAgZm5fZmlsZW5hbWVfY29tcGxldGlvbl9mdW5jdGlvbihjb25zdCBjaAogCiAJ CS8qIHN1cHBvcnQgZm9yIGBgfnVzZXInJyBzeW50YXggKi8KIAotCQlmcmVlKGRpcnBhdGgpOwor CQllbF9mcmVlKGRpcnBhdGgpOwogCQlkaXJwYXRoID0gTlVMTDsKIAkJaWYgKGRpcm5hbWUgPT0g TlVMTCkgewogCQkJaWYgKChkaXJuYW1lID0gc3RyZHVwKCIiKSkgPT0gTlVMTCkKQEAgLTI2OSwx MCArMjcxLDExIEBAIGZuX2ZpbGVuYW1lX2NvbXBsZXRpb25fZnVuY3Rpb24oY29uc3QgY2gKIAkJ bGVuID0gc3RybGVuKGVudHJ5LT5kX25hbWUpOwogI2VuZGlmCiAKLQkJdGVtcCA9IG1hbGxvYyhz dHJsZW4oZGlybmFtZSkgKyBsZW4gKyAxKTsKKwkJbGVuID0gc3RybGVuKGRpcm5hbWUpICsgbGVu ICsgMTsKKwkJdGVtcCA9IGVsX21hbGxvYyhsZW4gKiBzaXplb2YoKnRlbXApKTsKIAkJaWYgKHRl bXAgPT0gTlVMTCkKIAkJCXJldHVybiBOVUxMOwotCQkodm9pZClzcHJpbnRmKHRlbXAsICIlcyVz IiwgZGlybmFtZSwgZW50cnktPmRfbmFtZSk7CisJCSh2b2lkKXNucHJpbnRmKHRlbXAsIGxlbiwg IiVzJXMiLCBkaXJuYW1lLCBlbnRyeS0+ZF9uYW1lKTsKIAl9IGVsc2UgewogCQkodm9pZCljbG9z ZWRpcihkaXIpOwogCQlkaXIgPSBOVUxMOwpAQCAtMjk2LDcgKzI5OSw3IEBAIGFwcGVuZF9jaGFy X2Z1bmN0aW9uKGNvbnN0IGNoYXIgKm5hbWUpCiAJCXJzID0gIi8iOwogb3V0OgogCWlmIChleHBu YW1lKQotCQlmcmVlKGV4cG5hbWUpOworCQllbF9mcmVlKGV4cG5hbWUpOwogCXJldHVybiByczsK IH0KIC8qCkBAIC0zMTksMTAgKzMyMiwxMCBAQCBjb21wbGV0aW9uX21hdGNoZXMoY29uc3QgY2hh ciAqdGV4dCwgY2hhCiAJCQljaGFyICoqbm1hdGNoX2xpc3Q7CiAJCQl3aGlsZSAobWF0Y2hlcyAr IDMgPj0gbWF0Y2hfbGlzdF9sZW4pCiAJCQkJbWF0Y2hfbGlzdF9sZW4gPDw9IDE7Ci0JCQlubWF0 Y2hfbGlzdCA9IHJlYWxsb2MobWF0Y2hfbGlzdCwKLQkJCSAgICBtYXRjaF9saXN0X2xlbiAqIHNp emVvZihjaGFyICopKTsKKwkJCW5tYXRjaF9saXN0ID0gZWxfcmVhbGxvYyhtYXRjaF9saXN0LAor CQkJICAgIG1hdGNoX2xpc3RfbGVuICogc2l6ZW9mKCpubWF0Y2hfbGlzdCkpOwogCQkJaWYgKG5t YXRjaF9saXN0ID09IE5VTEwpIHsKLQkJCQlmcmVlKG1hdGNoX2xpc3QpOworCQkJCWVsX2ZyZWUo bWF0Y2hfbGlzdCk7CiAJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAJCQltYXRjaF9saXN0ID0gbm1h dGNoX2xpc3Q7CkBAIC0zNDUsOSArMzQ4LDkgQEAgY29tcGxldGlvbl9tYXRjaGVzKGNvbnN0IGNo YXIgKnRleHQsIGNoYQogCQltYXhfZXF1YWwgPSBpOwogCX0KIAotCXJldHN0ciA9IG1hbGxvYyht YXhfZXF1YWwgKyAxKTsKKwlyZXRzdHIgPSBlbF9tYWxsb2MoKG1heF9lcXVhbCArIDEpICogc2l6 ZW9mKCpyZXRzdHIpKTsKIAlpZiAocmV0c3RyID09IE5VTEwpIHsKLQkJZnJlZShtYXRjaF9saXN0 KTsKKwkJZWxfZnJlZShtYXRjaF9saXN0KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCSh2b2lkKXN0 cm5jcHkocmV0c3RyLCBtYXRjaF9saXN0WzFdLCBtYXhfZXF1YWwpOwpAQCAtNDY5LDkgKzQ3Miw5 IEBAIGZuX2NvbXBsZXRlKEVkaXRMaW5lICplbCwKIAogCWxlbiA9IGxpLT5jdXJzb3IgLSBjdGVt cDsKICNpZiBkZWZpbmVkKF9fU1NQX18pIHx8IGRlZmluZWQoX19TU1BfQUxMX18pCi0JdGVtcCA9 IG1hbGxvYyhzaXplb2YoKnRlbXApICogKGxlbiArIDEpKTsKKwl0ZW1wID0gZWxfbWFsbG9jKChs ZW4gKyAxKSAqIHNpemVvZigqdGVtcCkpOwogI2Vsc2UKLQl0ZW1wID0gYWxsb2NhKHNpemVvZigq dGVtcCkgKiAobGVuICsgMSkpOworCXRlbXAgPSBhbGxvY2EoKGxlbiArIDEpICogc2l6ZW9mKCp0 ZW1wKSk7CiAjZW5kaWYKIAkodm9pZClTdHJuY3B5KHRlbXAsIGN0ZW1wLCBsZW4pOwogCXRlbXBb bGVuXSA9ICdcMCc7CkBAIC01ODMsMTIgKzU4NiwxMiBAQCBmbl9jb21wbGV0ZShFZGl0TGluZSAq ZWwsCiAKIAkJLyogZnJlZSBlbGVtZW50cyBvZiBhcnJheSBhbmQgdGhlIGFycmF5IGl0c2VsZiAq LwogCQlmb3IgKGkgPSAwOyBtYXRjaGVzW2ldOyBpKyspCi0JCQlmcmVlKG1hdGNoZXNbaV0pOwot CQlmcmVlKG1hdGNoZXMpOworCQkJZWxfZnJlZShtYXRjaGVzW2ldKTsKKwkJZWxfZnJlZShtYXRj aGVzKTsKIAkJbWF0Y2hlcyA9IE5VTEw7CiAJfQogI2lmIGRlZmluZWQoX19TU1BfXykgfHwgZGVm aW5lZChfX1NTUF9BTExfXykKLQlmcmVlKHRlbXApOworCWVsX2ZyZWUodGVtcCk7CiAjZW5kaWYK IAlyZXR1cm4gcmV0dmFsOwogfQoKPT09IG1vZGlmaWVkIGZpbGUgJ2NtZC1saW5lLXV0aWxzL2xp YmVkaXQvaGlzdC5jJwotLS0gYS9jbWQtbGluZS11dGlscy9saWJlZGl0L2hpc3QuYwkyMDExLTA1 LTEzIDA4OjMyOjQ3ICswMDAwCisrKyBiL2NtZC1saW5lLXV0aWxzL2xpYmVkaXQvaGlzdC5jCTIw MTEtMDctMjkgMTA6MDI6MDcgKzAwMDAKQEAgLTEsNCArMSw0IEBACi0vKgkkTmV0QlNEOiBoaXN0 LmMsdiAxLjE3IDIwMDkvMTIvMzAgMjM6NTQ6NTIgY2hyaXN0b3MgRXhwICQJKi8KKy8qCSROZXRC U0Q6IGhpc3QuYyx2IDEuMTkgMjAxMS8wNy8yOCAyMDo1MDo1NSBjaHJpc3RvcyBFeHAgJAkqLwog CiAvKi0KICAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MwpAQCAtNzEsNyArNzEsNyBAQCBwcm90 ZWN0ZWQgdm9pZAogaGlzdF9lbmQoRWRpdExpbmUgKmVsKQogewogCi0JZWxfZnJlZSgocHRyX3Qp IGVsLT5lbF9oaXN0b3J5LmJ1Zik7CisJZWxfZnJlZShlbC0+ZWxfaGlzdG9yeS5idWYpOwogCWVs LT5lbF9oaXN0b3J5LmJ1ZiA9IE5VTEw7CiB9CiAKQEAgLTgwLDcgKzgwLDcgQEAgaGlzdF9lbmQo RWRpdExpbmUgKmVsKQogICoJU2V0IG5ldyBoaXN0b3J5IGludGVyZmFjZQogICovCiBwcm90ZWN0 ZWQgaW50Ci1oaXN0X3NldChFZGl0TGluZSAqZWwsIGhpc3RfZnVuX3QgZnVuLCBwdHJfdCBwdHIp CitoaXN0X3NldChFZGl0TGluZSAqZWwsIGhpc3RfZnVuX3QgZnVuLCB2b2lkICpwdHIpCiB7CiAK IAllbC0+ZWxfaGlzdG9yeS5yZWYgPSBwdHI7CkBAIC0xNTcsNyArMTU3LDcgQEAgaGlzdF9jb21t YW5kKEVkaXRMaW5lICplbCwgaW50IGFyZ2MsIGNvbgogewogCWNvbnN0IENoYXIgKnN0cjsKIAlp bnQgbnVtOwotCUhpc3RFdmVudCBldjsKKwlUWVBFKEhpc3RFdmVudCkgZXY7CiAKIAlpZiAoZWwt PmVsX2hpc3RvcnkucmVmID09IE5VTEwpCiAJCXJldHVybiAoLTEpOwpAQCAtMTc3LDEwICsxNzcs MTAgQEAgaGlzdF9jb21tYW5kKEVkaXRMaW5lICplbCwgaW50IGFyZ2MsIGNvbgogCW51bSA9IChp bnQpU3RydG9sKGFyZ3ZbMl0sIE5VTEwsIDApOwogCiAJaWYgKFN0cmNtcChhcmd2WzFdLCBTVFIo InNpemUiKSkgPT0gMCkKLQkJcmV0dXJuIGhpc3RvcnkoZWwtPmVsX2hpc3RvcnkucmVmLCAmZXYs IEhfU0VUU0laRSwgbnVtKTsKKwkJcmV0dXJuIEZVTlcoaGlzdG9yeSkoZWwtPmVsX2hpc3Rvcnku cmVmLCAmZXYsIEhfU0VUU0laRSwgbnVtKTsKIAogCWlmIChTdHJjbXAoYXJndlsxXSwgU1RSKCJ1 bmlxdWUiKSkgPT0gMCkKLQkJcmV0dXJuIGhpc3RvcnkoZWwtPmVsX2hpc3RvcnkucmVmLCAmZXYs IEhfU0VUVU5JUVVFLCBudW0pOworCQlyZXR1cm4gRlVOVyhoaXN0b3J5KShlbC0+ZWxfaGlzdG9y eS5yZWYsICZldiwgSF9TRVRVTklRVUUsIG51bSk7CiAKIAlyZXR1cm4gLTE7CiB9CkBAIC0yMTEs NyArMjExLDcgQEAgaGlzdF9lbmxhcmdlYnVmKEVkaXRMaW5lICplbCwgc2l6ZV90IG9sZAogCiAj aWZkZWYgV0lERUNIQVIKIHByb3RlY3RlZCB3Y2hhcl90ICoKLWhpc3RfY29udmVydChFZGl0TGlu ZSAqZWwsIGludCBmbiwgcHRyX3QgYXJnKQoraGlzdF9jb252ZXJ0KEVkaXRMaW5lICplbCwgaW50 IGZuLCB2b2lkICphcmcpCiB7CiAJSGlzdEV2ZW50VyBldjsKIAlpZiAoKCooZWwpLT5lbF9oaXN0 b3J5LmZ1bikoKGVsKS0+ZWxfaGlzdG9yeS5yZWYsICZldiwgZm4sIGFyZykgPT0gLTEpCgo9PT0g bW9kaWZpZWQgZmlsZSAnY21kLWxpbmUtdXRpbHMvbGliZWRpdC9oaXN0LmgnCi0tLSBhL2NtZC1s aW5lLXV0aWxzL2xpYmVkaXQvaGlzdC5oCTIwMTEtMDUtMTMgMDg6MzI6NDcgKzAwMDAKKysrIGIv Y21kLWxpbmUtdXRpbHMvbGliZWRpdC9oaXN0LmgJMjAxMS0wNy0yOSAxMDowMjowNyArMDAwMApA QCAtMSw0ICsxLDQgQEAKLS8qCSROZXRCU0Q6IGhpc3QuaCx2IDEuMTIgMjAwOS8xMi8zMCAyMzo1 NDo1MiBjaHJpc3RvcyBFeHAgJAkqLworLyoJJE5ldEJTRDogaGlzdC5oLHYgMS4xMyAyMDExLzA3 LzI4IDIwOjUwOjU1IGNocmlzdG9zIEV4cCAkCSovCiAKIC8qLQogICogQ29weXJpZ2h0IChjKSAx OTkyLCAxOTkzCkBAIC00MiwxNCArNDIsMTQgQEAKIAogI2luY2x1ZGUgImhpc3RlZGl0LmgiCiAK LXR5cGVkZWYgaW50ICgqaGlzdF9mdW5fdCkocHRyX3QsIFRZUEUoSGlzdEV2ZW50KSAqLCBpbnQs IC4uLik7Cit0eXBlZGVmIGludCAoKmhpc3RfZnVuX3QpKHZvaWQgKiwgVFlQRShIaXN0RXZlbnQp ICosIGludCwgLi4uKTsKIAogdHlwZWRlZiBzdHJ1Y3QgZWxfaGlzdG9yeV90IHsKIAlDaGFyCQkq YnVmOwkJLyogVGhlIGhpc3RvcnkgYnVmZmVyCQkqLwogCXNpemVfdAkJc3o7CQkvKiBTaXplIG9m IGhpc3RvcnkgYnVmZmVyCSovCiAJQ2hhcgkJKmxhc3Q7CQkvKiBUaGUgbGFzdCBjaGFyYWN0ZXIJ CSovCiAJaW50CQkgZXZlbnRubzsJLyogRXZlbnQgd2UgYXJlIGxvb2tpbmcgZm9yCSovCi0JcHRy X3QJCSByZWY7CQkvKiBBcmd1bWVudCBmb3IgaGlzdG9yeSBmY25zCSovCisJdm9pZCAqCQkgcmVm OwkJLyogQXJndW1lbnQgZm9yIGhpc3RvcnkgZmNucwkqLwogCWhpc3RfZnVuX3QJIGZ1bjsJCS8q IEV2ZW50IGFjY2VzcwkJCSovCiAJVFlQRShIaXN0RXZlbnQpCSBldjsJCS8qIEV2ZW50IGNvb2tp ZQkJCSovCiB9IGVsX2hpc3RvcnlfdDsKQEAgLTc3LDExICs3NywxMSBAQCB0eXBlZGVmIHN0cnVj dCBlbF9oaXN0b3J5X3QgewogcHJvdGVjdGVkIGludAkJaGlzdF9pbml0KEVkaXRMaW5lICopOwog cHJvdGVjdGVkIHZvaWQJCWhpc3RfZW5kKEVkaXRMaW5lICopOwogcHJvdGVjdGVkIGVsX2FjdGlv bl90CWhpc3RfZ2V0KEVkaXRMaW5lICopOwotcHJvdGVjdGVkIGludAkJaGlzdF9zZXQoRWRpdExp bmUgKiwgaGlzdF9mdW5fdCwgcHRyX3QpOworcHJvdGVjdGVkIGludAkJaGlzdF9zZXQoRWRpdExp bmUgKiwgaGlzdF9mdW5fdCwgdm9pZCAqKTsKIHByb3RlY3RlZCBpbnQJCWhpc3RfY29tbWFuZChF ZGl0TGluZSAqLCBpbnQsIGNvbnN0IENoYXIgKiopOwogcHJvdGVjdGVkIGludAkJaGlzdF9lbmxh cmdlYnVmKEVkaXRMaW5lICosIHNpemVfdCwgc2l6ZV90KTsKICNpZmRlZiBXSURFQ0hBUgotcHJv dGVjdGVkIHdjaGFyX3QgCSpoaXN0X2NvbnZlcnQoRWRpdExpbmUgKiwgaW50LCBwdHJfdCk7Citw cm90ZWN0ZWQgd2NoYXJfdCAJKmhpc3RfY29udmVydChFZGl0TGluZSAqLCBpbnQsIHZvaWQgKik7 CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9oX2VsX2hpc3QgKi8KCj09PSBtb2RpZmllZCBmaWxlICdj bWQtbGluZS11dGlscy9saWJlZGl0L2hpc3RlZGl0LmgnCi0tLSBhL2NtZC1saW5lLXV0aWxzL2xp YmVkaXQvaGlzdGVkaXQuaAkyMDExLTA1LTEzIDA4OjMyOjQ3ICswMDAwCisrKyBiL2NtZC1saW5l LXV0aWxzL2xpYmVkaXQvaGlzdGVkaXQuaAkyMDExLTA3LTI5IDEwOjAyOjA3ICswMDAwCkBAIC0x LDQgKzEsNCBAQAotLyoJJE5ldEJTRDogaGlzdGVkaXQuaCx2IDEuNDcgMjAxMC8wOC8yOCAxNTo0 NDo1OSBjaHJpc3RvcyBFeHAgJAkqLworLyoJJE5ldEJTRDogaGlzdGVkaXQuaCx2IDEuNDggMjAx MS8wNy8yOCAyMDo1MDo1NSBjaHJpc3RvcyBFeHAgJAkqLwogCiAvKi0KICAqIENvcHlyaWdodCAo YykgMTk5MiwgMTk5MwpAQCAtMTQyLDcgKzE0Miw3IEBAIHVuc2lnbmVkIGNoYXIJX2VsX2ZuX2Nv bXBsZXRlKEVkaXRMaW5lICoKICNkZWZpbmUJRUxfU0VUVFkJOAkvKiAsIGNvbnN0IENoYXIgKiwg Li4uLCBOVUxMKTsgICAgICAgIHNldCAgICAgKi8KICNkZWZpbmUJRUxfQURERk4JOQkvKiAsIGNv bnN0IENoYXIgKiwgY29uc3QgQ2hhciwgICAgICAgIHNldCAgICAgKi8KIAkJCQkvKiAgIGVsX2Z1 bmNfdCk7CQkgCSAgICAgICovCi0jZGVmaW5lCUVMX0hJU1QJCTEwCS8qICwgaGlzdF9mdW5fdCwg Y29uc3QgcHRyX3QpOwkgICAgICBzZXQgICAgICovCisjZGVmaW5lCUVMX0hJU1QJCTEwCS8qICwg aGlzdF9mdW5fdCwgY29uc3Qgdm9pZCAqKTsJICAgICAgc2V0ICAgICAqLwogI2RlZmluZQlFTF9F RElUTU9ERQkxMQkvKiAsIGludCk7CQkJICAgICAgc2V0L2dldCAqLwogI2RlZmluZQlFTF9SUFJP TVBUCTEyCS8qICwgcHJvbXB0X2Z1bmMpOwkJICAgICAgc2V0L2dldCAqLwogI2RlZmluZQlFTF9H RVRDRk4JMTMJLyogLCBlbF9yZnVuY190KTsJCSAgICAgIHNldC9nZXQgKi8KCj09PSBtb2RpZmll ZCBmaWxlICdjbWQtbGluZS11dGlscy9saWJlZGl0L2hpc3RvcnkuYycKLS0tIGEvY21kLWxpbmUt dXRpbHMvbGliZWRpdC9oaXN0b3J5LmMJMjAxMS0wNy0yNyAwNzo1NTowOSArMDAwMAorKysgYi9j bWQtbGluZS11dGlscy9saWJlZGl0L2hpc3RvcnkuYwkyMDExLTA3LTI5IDEwOjAyOjA3ICswMDAw CkBAIC0xLDQgKzEsNCBAQAotLyoJJE5ldEJTRDogaGlzdG9yeS5jLHYgMS4zOSAyMDExLzA3LzI3 IDAyOjIzOjI5IGNocmlzdG9zIEV4cCAkCSovCisvKgkkTmV0QlNEOiBoaXN0b3J5LmMsdiAxLjQy IDIwMTEvMDcvMjggMjA6NTA6NTUgY2hyaXN0b3MgRXhwICQJKi8KIAogLyotCiAgKiBDb3B5cmln aHQgKGMpIDE5OTIsIDE5OTMKQEAgLTU4LDEzICs1OCwxMyBAQCBzdGF0aWMgY29uc3QgY2hhciBo aXN0X2Nvb2tpZVtdID0gIl9IaVN0CiAjaW5jbHVkZSAiaGlzdGVkaXQuaCIKICNpbmNsdWRlICJj aGFydHlwZS5oIgogCi10eXBlZGVmIGludCAoKmhpc3RvcnlfZ2Z1bl90KShwdHJfdCwgVFlQRShI aXN0RXZlbnQpICopOwotdHlwZWRlZiBpbnQgKCpoaXN0b3J5X2VmdW5fdCkocHRyX3QsIFRZUEUo SGlzdEV2ZW50KSAqLCBjb25zdCBDaGFyICopOwotdHlwZWRlZiB2b2lkICgqaGlzdG9yeV92ZnVu X3QpKHB0cl90LCBUWVBFKEhpc3RFdmVudCkgKik7Ci10eXBlZGVmIGludCAoKmhpc3Rvcnlfc2Z1 bl90KShwdHJfdCwgVFlQRShIaXN0RXZlbnQpICosIGNvbnN0IGludCk7Cit0eXBlZGVmIGludCAo Kmhpc3RvcnlfZ2Z1bl90KSh2b2lkICosIFRZUEUoSGlzdEV2ZW50KSAqKTsKK3R5cGVkZWYgaW50 ICgqaGlzdG9yeV9lZnVuX3QpKHZvaWQgKiwgVFlQRShIaXN0RXZlbnQpICosIGNvbnN0IENoYXIg Kik7Cit0eXBlZGVmIHZvaWQgKCpoaXN0b3J5X3ZmdW5fdCkodm9pZCAqLCBUWVBFKEhpc3RFdmVu dCkgKik7Cit0eXBlZGVmIGludCAoKmhpc3Rvcnlfc2Z1bl90KSh2b2lkICosIFRZUEUoSGlzdEV2 ZW50KSAqLCBjb25zdCBpbnQpOwogCiBzdHJ1Y3QgVFlQRShoaXN0b3J5KSB7Ci0JcHRyX3QgaF9y ZWY7CQkvKiBBcmd1bWVudCBmb3IgaGlzdG9yeSBmY25zCSAqLworCXZvaWQgKmhfcmVmOwkJLyog QXJndW1lbnQgZm9yIGhpc3RvcnkgZmNucwkgKi8KIAlpbnQgaF9lbnQ7CQkvKiBMYXN0IGVudHJ5 IHBvaW50IGZvciBoaXN0b3J5CSAqLwogCWhpc3RvcnlfZ2Z1bl90IGhfZmlyc3Q7CS8qIEdldCB0 aGUgZmlyc3QgZWxlbWVudAkgKi8KIAloaXN0b3J5X2dmdW5fdCBoX25leHQ7CS8qIEdldCB0aGUg bmV4dCBlbGVtZW50CQkgKi8KQEAgLTEzNiwyMyArMTM2LDIzIEBAIHR5cGVkZWYgc3RydWN0IGhp c3RvcnlfdCB7CiAjZGVmaW5lIEhfVU5JUVVFCTEJLyogU3RvcmUgb25seSB1bmlxdWUgZWxlbWVu dHMJKi8KIH0gaGlzdG9yeV90OwogCi1wcml2YXRlIGludCBoaXN0b3J5X2RlZl9uZXh0KHB0cl90 LCBUWVBFKEhpc3RFdmVudCkgKik7Ci1wcml2YXRlIGludCBoaXN0b3J5X2RlZl9maXJzdChwdHJf dCwgVFlQRShIaXN0RXZlbnQpICopOwotcHJpdmF0ZSBpbnQgaGlzdG9yeV9kZWZfcHJldihwdHJf dCwgVFlQRShIaXN0RXZlbnQpICopOwotcHJpdmF0ZSBpbnQgaGlzdG9yeV9kZWZfbGFzdChwdHJf dCwgVFlQRShIaXN0RXZlbnQpICopOwotcHJpdmF0ZSBpbnQgaGlzdG9yeV9kZWZfY3VycihwdHJf dCwgVFlQRShIaXN0RXZlbnQpICopOwotcHJpdmF0ZSBpbnQgaGlzdG9yeV9kZWZfc2V0KHB0cl90 LCBUWVBFKEhpc3RFdmVudCkgKiwgY29uc3QgaW50KTsKLXByaXZhdGUgdm9pZCBoaXN0b3J5X2Rl Zl9jbGVhcihwdHJfdCwgVFlQRShIaXN0RXZlbnQpICopOwotcHJpdmF0ZSBpbnQgaGlzdG9yeV9k ZWZfZW50ZXIocHRyX3QsIFRZUEUoSGlzdEV2ZW50KSAqLCBjb25zdCBDaGFyICopOwotcHJpdmF0 ZSBpbnQgaGlzdG9yeV9kZWZfYWRkKHB0cl90LCBUWVBFKEhpc3RFdmVudCkgKiwgY29uc3QgQ2hh ciAqKTsKLXByaXZhdGUgaW50IGhpc3RvcnlfZGVmX2RlbChwdHJfdCwgVFlQRShIaXN0RXZlbnQp ICosIGNvbnN0IGludCk7Citwcml2YXRlIGludCBoaXN0b3J5X2RlZl9uZXh0KHZvaWQgKiwgVFlQ RShIaXN0RXZlbnQpICopOworcHJpdmF0ZSBpbnQgaGlzdG9yeV9kZWZfZmlyc3Qodm9pZCAqLCBU WVBFKEhpc3RFdmVudCkgKik7Citwcml2YXRlIGludCBoaXN0b3J5X2RlZl9wcmV2KHZvaWQgKiwg VFlQRShIaXN0RXZlbnQpICopOworcHJpdmF0ZSBpbnQgaGlzdG9yeV9kZWZfbGFzdCh2b2lkICos IFRZUEUoSGlzdEV2ZW50KSAqKTsKK3ByaXZhdGUgaW50IGhpc3RvcnlfZGVmX2N1cnIodm9pZCAq LCBUWVBFKEhpc3RFdmVudCkgKik7Citwcml2YXRlIGludCBoaXN0b3J5X2RlZl9zZXQodm9pZCAq LCBUWVBFKEhpc3RFdmVudCkgKiwgY29uc3QgaW50KTsKK3ByaXZhdGUgdm9pZCBoaXN0b3J5X2Rl Zl9jbGVhcih2b2lkICosIFRZUEUoSGlzdEV2ZW50KSAqKTsKK3ByaXZhdGUgaW50IGhpc3Rvcnlf ZGVmX2VudGVyKHZvaWQgKiwgVFlQRShIaXN0RXZlbnQpICosIGNvbnN0IENoYXIgKik7Citwcml2 YXRlIGludCBoaXN0b3J5X2RlZl9hZGQodm9pZCAqLCBUWVBFKEhpc3RFdmVudCkgKiwgY29uc3Qg Q2hhciAqKTsKK3ByaXZhdGUgaW50IGhpc3RvcnlfZGVmX2RlbCh2b2lkICosIFRZUEUoSGlzdEV2 ZW50KSAqLCBjb25zdCBpbnQpOwogCi1wcml2YXRlIGludCBoaXN0b3J5X2RlZl9pbml0KHB0cl90 ICosIFRZUEUoSGlzdEV2ZW50KSAqLCBpbnQpOworcHJpdmF0ZSBpbnQgaGlzdG9yeV9kZWZfaW5p dCh2b2lkICoqLCBUWVBFKEhpc3RFdmVudCkgKiwgaW50KTsKIHByaXZhdGUgaW50IGhpc3Rvcnlf ZGVmX2luc2VydChoaXN0b3J5X3QgKiwgVFlQRShIaXN0RXZlbnQpICosIGNvbnN0IENoYXIgKik7 CiBwcml2YXRlIHZvaWQgaGlzdG9yeV9kZWZfZGVsZXRlKGhpc3RvcnlfdCAqLCBUWVBFKEhpc3RF dmVudCkgKiwgaGVudHJ5X3QgKik7CiAKIHByaXZhdGUgaW50IGhpc3RvcnlfZGVsZGF0YV9udGgo aGlzdG9yeV90ICosIFRZUEUoSGlzdEV2ZW50KSAqLCBpbnQsIHZvaWQgKiopOwotcHJpdmF0ZSBp bnQgaGlzdG9yeV9zZXRfbnRoKHB0cl90LCBUWVBFKEhpc3RFdmVudCkgKiwgaW50KTsKK3ByaXZh dGUgaW50IGhpc3Rvcnlfc2V0X250aCh2b2lkICosIFRZUEUoSGlzdEV2ZW50KSAqLCBpbnQpOwog CiAjZGVmaW5lCWhpc3RvcnlfZGVmX3NldHNpemUocCwgbnVtKSh2b2lkKSAoKChoaXN0b3J5X3Qg KilwKS0+bWF4ID0gKG51bSkpCiAjZGVmaW5lCWhpc3RvcnlfZGVmX2dldHNpemUocCkgICgoKGhp c3RvcnlfdCAqKXApLT5jdXIpCkBAIC0yMTAsNyArMjEwLDcgQEAgc3RhdGljIGNvbnN0IENoYXIg KmNvbnN0IGhlX2Vycmxpc3RbXSA9IAogICoJRGVmYXVsdCBmdW5jdGlvbiB0byByZXR1cm4gdGhl IGZpcnN0IGV2ZW50IGluIHRoZSBoaXN0b3J5LgogICovCiBwcml2YXRlIGludAotaGlzdG9yeV9k ZWZfZmlyc3QocHRyX3QgcCwgVFlQRShIaXN0RXZlbnQpICpldikKK2hpc3RvcnlfZGVmX2ZpcnN0 KHZvaWQgKnAsIFRZUEUoSGlzdEV2ZW50KSAqZXYpCiB7CiAJaGlzdG9yeV90ICpoID0gKGhpc3Rv cnlfdCAqKSBwOwogCkBAIC0yMzAsNyArMjMwLDcgQEAgaGlzdG9yeV9kZWZfZmlyc3QocHRyX3Qg cCwgVFlQRShIaXN0RXZlbgogICoJRGVmYXVsdCBmdW5jdGlvbiB0byByZXR1cm4gdGhlIGxhc3Qg ZXZlbnQgaW4gdGhlIGhpc3RvcnkuCiAgKi8KIHByaXZhdGUgaW50Ci1oaXN0b3J5X2RlZl9sYXN0 KHB0cl90IHAsIFRZUEUoSGlzdEV2ZW50KSAqZXYpCitoaXN0b3J5X2RlZl9sYXN0KHZvaWQgKnAs IFRZUEUoSGlzdEV2ZW50KSAqZXYpCiB7CiAJaGlzdG9yeV90ICpoID0gKGhpc3RvcnlfdCAqKSBw OwogCkBAIC0yNTAsNyArMjUwLDcgQEAgaGlzdG9yeV9kZWZfbGFzdChwdHJfdCBwLCBUWVBFKEhp c3RFdmVudAogICoJRGVmYXVsdCBmdW5jdGlvbiB0byByZXR1cm4gdGhlIG5leHQgZXZlbnQgaW4g dGhlIGhpc3RvcnkuCiAgKi8KIHByaXZhdGUgaW50Ci1oaXN0b3J5X2RlZl9uZXh0KHB0cl90IHAs IFRZUEUoSGlzdEV2ZW50KSAqZXYpCitoaXN0b3J5X2RlZl9uZXh0KHZvaWQgKnAsIFRZUEUoSGlz dEV2ZW50KSAqZXYpCiB7CiAJaGlzdG9yeV90ICpoID0gKGhpc3RvcnlfdCAqKSBwOwogCkBAIC0y NzUsNyArMjc1LDcgQEAgaGlzdG9yeV9kZWZfbmV4dChwdHJfdCBwLCBUWVBFKEhpc3RFdmVudAog ICoJRGVmYXVsdCBmdW5jdGlvbiB0byByZXR1cm4gdGhlIHByZXZpb3VzIGV2ZW50IGluIHRoZSBo aXN0b3J5LgogICovCiBwcml2YXRlIGludAotaGlzdG9yeV9kZWZfcHJldihwdHJfdCBwLCBUWVBF KEhpc3RFdmVudCkgKmV2KQoraGlzdG9yeV9kZWZfcHJldih2b2lkICpwLCBUWVBFKEhpc3RFdmVu dCkgKmV2KQogewogCWhpc3RvcnlfdCAqaCA9IChoaXN0b3J5X3QgKikgcDsKIApAQCAtMzAxLDcg KzMwMSw3IEBAIGhpc3RvcnlfZGVmX3ByZXYocHRyX3QgcCwgVFlQRShIaXN0RXZlbnQKICAqCURl ZmF1bHQgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBjdXJyZW50IGV2ZW50IGluIHRoZSBoaXN0b3J5 LgogICovCiBwcml2YXRlIGludAotaGlzdG9yeV9kZWZfY3VycihwdHJfdCBwLCBUWVBFKEhpc3RF dmVudCkgKmV2KQoraGlzdG9yeV9kZWZfY3Vycih2b2lkICpwLCBUWVBFKEhpc3RFdmVudCkgKmV2 KQogewogCWhpc3RvcnlfdCAqaCA9IChoaXN0b3J5X3QgKikgcDsKIApAQCAtMzIyLDcgKzMyMiw3 IEBAIGhpc3RvcnlfZGVmX2N1cnIocHRyX3QgcCwgVFlQRShIaXN0RXZlbnQKICAqCWdpdmVuIG9u ZS4KICAqLwogcHJpdmF0ZSBpbnQKLWhpc3RvcnlfZGVmX3NldChwdHJfdCBwLCBUWVBFKEhpc3RF dmVudCkgKmV2LCBjb25zdCBpbnQgbikKK2hpc3RvcnlfZGVmX3NldCh2b2lkICpwLCBUWVBFKEhp c3RFdmVudCkgKmV2LCBjb25zdCBpbnQgbikKIHsKIAloaXN0b3J5X3QgKmggPSAoaGlzdG9yeV90 ICopIHA7CiAKQEAgLTM0OSw3ICszNDksNyBAQCBoaXN0b3J5X2RlZl9zZXQocHRyX3QgcCwgVFlQ RShIaXN0RXZlbnQpCiAgKgluLXRoIG9uZS4KICAqLwogcHJpdmF0ZSBpbnQKLWhpc3Rvcnlfc2V0 X250aChwdHJfdCBwLCBUWVBFKEhpc3RFdmVudCkgKmV2LCBpbnQgbikKK2hpc3Rvcnlfc2V0X250 aCh2b2lkICpwLCBUWVBFKEhpc3RFdmVudCkgKmV2LCBpbnQgbikKIHsKIAloaXN0b3J5X3QgKmgg PSAoaGlzdG9yeV90ICopIHA7CiAKQEAgLTM3Myw3ICszNzMsNyBAQCBoaXN0b3J5X3NldF9udGgo cHRyX3QgcCwgVFlQRShIaXN0RXZlbnQpCiAgKglBcHBlbmQgc3RyaW5nIHRvIGVsZW1lbnQKICAq LwogcHJpdmF0ZSBpbnQKLWhpc3RvcnlfZGVmX2FkZChwdHJfdCBwLCBUWVBFKEhpc3RFdmVudCkg KmV2LCBjb25zdCBDaGFyICpzdHIpCitoaXN0b3J5X2RlZl9hZGQodm9pZCAqcCwgVFlQRShIaXN0 RXZlbnQpICpldiwgY29uc3QgQ2hhciAqc3RyKQogewogCWhpc3RvcnlfdCAqaCA9IChoaXN0b3J5 X3QgKikgcDsKIAlzaXplX3QgbGVuOwpAQCAtMzkxLDcgKzM5MSw3IEBAIGhpc3RvcnlfZGVmX2Fk ZChwdHJfdCBwLCBUWVBFKEhpc3RFdmVudCkKIAkodm9pZCkgU3RybmNweShzLCBoLT5jdXJzb3It PmV2LnN0ciwgbGVuKTsKICAgICAgICAgc1tsZW4gLSAxXSA9ICdcMCc7CiAJKHZvaWQpIFN0cm5j YXQocywgc3RyLCBsZW4gLSBTdHJsZW4ocykgLSAxKTsKLQloX2ZyZWUoKHB0cl90KWV2cC0+c3Ry KTsKKwloX2ZyZWUoZXZwLT5zdHIpOwogCWV2cC0+c3RyID0gczsKIAkqZXYgPSBoLT5jdXJzb3It PmV2OwogCXJldHVybiAoMCk7CkBAIC00MjEsNyArNDIxLDcgQEAgaGlzdG9yeV9kZWxkYXRhX250 aChoaXN0b3J5X3QgKmgsIFRZUEUoSAogICovCiAvKiBBUkdTVVNFRCAqLwogcHJpdmF0ZSBpbnQK LWhpc3RvcnlfZGVmX2RlbChwdHJfdCBwLCBUWVBFKEhpc3RFdmVudCkgKmV2IF9fYXR0cmlidXRl X18oKF9fdW51c2VkX18pKSwKK2hpc3RvcnlfZGVmX2RlbCh2b2lkICpwLCBUWVBFKEhpc3RFdmVu dCkgKmV2IF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKSwKICAgICBjb25zdCBpbnQgbnVtKQog ewogCWhpc3RvcnlfdCAqaCA9IChoaXN0b3J5X3QgKikgcDsKQEAgLTQ1Miw3ICs0NTIsNyBAQCBo aXN0b3J5X2RlZl9kZWxldGUoaGlzdG9yeV90ICpoLCAKIAl9CiAJaHAtPnByZXYtPm5leHQgPSBo cC0+bmV4dDsKIAlocC0+bmV4dC0+cHJldiA9IGhwLT5wcmV2OwotCWhfZnJlZSgocHRyX3QpIGV2 cC0+c3RyKTsKKwloX2ZyZWUoZXZwLT5zdHIpOwogCWhfZnJlZShocCk7CiAJaC0+Y3VyLS07CiB9 CkBAIC00NzAsNyArNDcwLDcgQEAgaGlzdG9yeV9kZWZfaW5zZXJ0KGhpc3RvcnlfdCAqaCwgVFlQ RShIaQogCWlmIChjID09IE5VTEwpCiAJCWdvdG8gb29tZW07CiAJaWYgKChjLT5ldi5zdHIgPSBo X3N0cmR1cChzdHIpKSA9PSBOVUxMKSB7Ci0JCWhfZnJlZSgocHRyX3QpYyk7CisJCWhfZnJlZShj KTsKIAkJZ290byBvb21lbTsKIAl9CiAJYy0+ZGF0YSA9IE5VTEw7CkBAIC00OTQsNyArNDk0LDcg QEAgb29tZW06CiAgKglEZWZhdWx0IGZ1bmN0aW9uIHRvIGVudGVyIGFuIGl0ZW0gaW4gdGhlIGhp c3RvcnkKICAqLwogcHJpdmF0ZSBpbnQKLWhpc3RvcnlfZGVmX2VudGVyKHB0cl90IHAsIFRZUEUo SGlzdEV2ZW50KSAqZXYsIGNvbnN0IENoYXIgKnN0cikKK2hpc3RvcnlfZGVmX2VudGVyKHZvaWQg KnAsIFRZUEUoSGlzdEV2ZW50KSAqZXYsIGNvbnN0IENoYXIgKnN0cikKIHsKIAloaXN0b3J5X3Qg KmggPSAoaGlzdG9yeV90ICopIHA7CiAKQEAgLTUyMSw5ICs1MjEsOSBAQCBoaXN0b3J5X2RlZl9l bnRlcihwdHJfdCBwLCBUWVBFKEhpc3RFdmVuCiAgKi8KIC8qIEFSR1NVU0VEICovCiBwcml2YXRl IGludAotaGlzdG9yeV9kZWZfaW5pdChwdHJfdCAqcCwgVFlQRShIaXN0RXZlbnQpICpldiBfX2F0 dHJpYnV0ZV9fKChfX3VudXNlZF9fKSksIGludCBuKQoraGlzdG9yeV9kZWZfaW5pdCh2b2lkICoq cCwgVFlQRShIaXN0RXZlbnQpICpldiBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSksIGludCBu KQogewotCWhpc3RvcnlfdCAqaCA9IChoaXN0b3J5X3QgKikgaF9tYWxsb2Moc2l6ZW9mKGhpc3Rv cnlfdCkpOworCWhpc3RvcnlfdCAqaCA9IChoaXN0b3J5X3QgKikgaF9tYWxsb2Moc2l6ZW9mKCpo KSk7CiAJaWYgKGggPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCkBAIC01MzcsNyArNTM3LDcgQEAg aGlzdG9yeV9kZWZfaW5pdChwdHJfdCAqcCwgVFlQRShIaXN0RXZlbgogCWgtPmxpc3QuZXYubnVt ID0gMDsKIAloLT5jdXJzb3IgPSAmaC0+bGlzdDsKIAloLT5mbGFncyA9IDA7Ci0JKnAgPSAocHRy X3QpIGg7CisJKnAgPSBoOwogCXJldHVybiAwOwogfQogCkBAIC01NDYsNyArNTQ2LDcgQEAgaGlz dG9yeV9kZWZfaW5pdChwdHJfdCAqcCwgVFlQRShIaXN0RXZlbgogICoJRGVmYXVsdCBoaXN0b3J5 IGNsZWFudXAgZnVuY3Rpb24KICAqLwogcHJpdmF0ZSB2b2lkCi1oaXN0b3J5X2RlZl9jbGVhcihw dHJfdCBwLCBUWVBFKEhpc3RFdmVudCkgKmV2KQoraGlzdG9yeV9kZWZfY2xlYXIodm9pZCAqcCwg VFlQRShIaXN0RXZlbnQpICpldikKIHsKIAloaXN0b3J5X3QgKmggPSAoaGlzdG9yeV90ICopIHA7 CiAKQEAgLTU2OSwxMiArNTY5LDEyIEBAIHB1YmxpYyBUWVBFKEhpc3RvcnkpICoKIEZVTihoaXN0 b3J5LGluaXQpKHZvaWQpCiB7CiAJVFlQRShIaXN0RXZlbnQpIGV2OwotCVRZUEUoSGlzdG9yeSkg KmggPSAoVFlQRShIaXN0b3J5KSAqKSBoX21hbGxvYyhzaXplb2YoVFlQRShIaXN0b3J5KSkpOwor CVRZUEUoSGlzdG9yeSkgKmggPSAoVFlQRShIaXN0b3J5KSAqKSBoX21hbGxvYyhzaXplb2YoKmgp KTsKIAlpZiAoaCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAogCWlmIChoaXN0b3J5X2RlZl9p bml0KCZoLT5oX3JlZiwgJmV2LCAwKSA9PSAtMSkgewotCQloX2ZyZWUoKHB0cl90KWgpOworCQlo X2ZyZWUoaCk7CiAJCXJldHVybiBOVUxMOwogCX0KIAloLT5oX2VudCA9IC0xOwpAQCAtNzUwLDcg Kzc1MCw3IEBAIGhpc3RvcnlfbG9hZChUWVBFKEhpc3RvcnkpICpoLCBjb25zdCBjaGEKIAlpZiAo c3RybmNtcChsaW5lLCBoaXN0X2Nvb2tpZSwgc3opICE9IDApCiAJCWdvdG8gZG9uZTsKIAotCXB0 ciA9IGhfbWFsbG9jKG1heF9zaXplID0gMTAyNCk7CisJcHRyID0gaF9tYWxsb2MoKG1heF9zaXpl ID0gMTAyNCkgKiBzaXplb2YoKnB0cikpOwogCWlmIChwdHIgPT0gTlVMTCkKIAkJZ290byBkb25l OwogCWZvciAoaSA9IDA7IChsaW5lID0gZmdldGxuKGZwLCAmc3opKSAhPSBOVUxMOyBpKyspIHsK QEAgLTc2NCw3ICs3NjQsNyBAQCBoaXN0b3J5X2xvYWQoVFlQRShIaXN0b3J5KSAqaCwgY29uc3Qg Y2hhCiAJCWlmIChtYXhfc2l6ZSA8IHN6KSB7CiAJCQljaGFyICpucHRyOwogCQkJbWF4X3NpemUg PSAoc3ogKyAxMDI0KSAmIH4xMDIzOwotCQkJbnB0ciA9IGhfcmVhbGxvYyhwdHIsIG1heF9zaXpl KTsKKwkJCW5wdHIgPSBoX3JlYWxsb2MocHRyLCBtYXhfc2l6ZSAqIHNpemVvZigqcHRyKSk7CiAJ CQlpZiAobnB0ciA9PSBOVUxMKSB7CiAJCQkJaSA9IC0xOwogCQkJCWdvdG8gb29tZW07CkBAIC03 NzksNyArNzc5LDcgQEAgaGlzdG9yeV9sb2FkKFRZUEUoSGlzdG9yeSkgKmgsIGNvbnN0IGNoYQog CQl9CiAJfQogb29tZW06Ci0JaF9mcmVlKChwdHJfdClwdHIpOworCWhfZnJlZShwdHIpOwogZG9u ZToKIAkodm9pZCkgZmNsb3NlKGZwKTsKIAlyZXR1cm4gKGkpOwpAQCAtNzk2LDcgKzc5Niw4IEBA IGhpc3Rvcnlfc2F2ZShUWVBFKEhpc3RvcnkpICpoLCBjb25zdCBjaGEKIAlUWVBFKEhpc3RFdmVu dCkgZXY7CiAJaW50IGkgPSAtMSwgcmV0dmFsOwogCXNpemVfdCBsZW4sIG1heF9zaXplOwotCWNo YXIgKnB0ciwgKnN0cjsKKwljaGFyICpwdHI7CisJY29uc3QgY2hhciAqc3RyOwogI2lmZGVmIFdJ REVDSEFSCiAJc3RhdGljIGN0X2J1ZmZlcl90IGNvbnY7CiAjZW5kaWYKQEAgLTgwOCw3ICs4MDks NyBAQCBoaXN0b3J5X3NhdmUoVFlQRShIaXN0b3J5KSAqaCwgY29uc3QgY2hhCiAJCWdvdG8gZG9u ZTsKIAlpZiAoZnB1dHMoaGlzdF9jb29raWUsIGZwKSA9PSBFT0YpCiAJCWdvdG8gZG9uZTsKLQlw dHIgPSBoX21hbGxvYyhtYXhfc2l6ZSA9IDEwMjQpOworCXB0ciA9IGhfbWFsbG9jKChtYXhfc2l6 ZSA9IDEwMjQpICogc2l6ZW9mKCpwdHIpKTsKIAlpZiAocHRyID09IE5VTEwpCiAJCWdvdG8gZG9u ZTsKIAlmb3IgKGkgPSAwLCByZXR2YWwgPSBITEFTVChoLCAmZXYpOwpAQCAtODE5LDcgKzgyMCw3 IEBAIGhpc3Rvcnlfc2F2ZShUWVBFKEhpc3RvcnkpICpoLCBjb25zdCBjaGEKIAkJaWYgKGxlbiA+ PSBtYXhfc2l6ZSkgewogCQkJY2hhciAqbnB0cjsKIAkJCW1heF9zaXplID0gKGxlbiArIDEwMjQp ICYgfjEwMjM7Ci0JCQlucHRyID0gaF9yZWFsbG9jKHB0ciwgbWF4X3NpemUpOworCQkJbnB0ciA9 IGhfcmVhbGxvYyhwdHIsIG1heF9zaXplICogc2l6ZW9mKCpwdHIpKTsKIAkJCWlmIChucHRyID09 IE5VTEwpIHsKIAkJCQlpID0gLTE7CiAJCQkJZ290byBvb21lbTsKQEAgLTgzMCw3ICs4MzEsNyBA QCBoaXN0b3J5X3NhdmUoVFlQRShIaXN0b3J5KSAqaCwgY29uc3QgY2hhCiAJCSh2b2lkKSBmcHJp bnRmKGZwLCAiJXNcbiIsIHB0cik7CiAJfQogb29tZW06Ci0JaF9mcmVlKChwdHJfdClwdHIpOwor CWhfZnJlZShwdHIpOwogZG9uZToKIAkodm9pZCkgZmNsb3NlKGZwKTsKIAlyZXR1cm4gKGkpOwpA QCAtMTAzNyw3ICsxMDM4LDcgQEAgRlVOVyhoaXN0b3J5KShUWVBFKEhpc3RvcnkpICpoLCBUWVBF KEhpcwogCXsKIAkJVFlQRShIaXN0b3J5KSBoZjsKIAotCQloZi5oX3JlZiA9IHZhX2FyZyh2YSwg cHRyX3QpOworCQloZi5oX3JlZiA9IHZhX2FyZyh2YSwgdm9pZCAqKTsKIAkJaC0+aF9lbnQgPSAt MTsKIAkJaGYuaF9maXJzdCA9IHZhX2FyZyh2YSwgaGlzdG9yeV9nZnVuX3QpOwogCQloZi5oX25l eHQgPSB2YV9hcmcodmEsIGhpc3RvcnlfZ2Z1bl90KTsKCj09PSBtb2RpZmllZCBmaWxlICdjbWQt bGluZS11dGlscy9saWJlZGl0L2tleW1hY3JvLmMnCi0tLSBhL2NtZC1saW5lLXV0aWxzL2xpYmVk aXQva2V5bWFjcm8uYwkyMDExLTA3LTI4IDA4OjA2OjQ1ICswMDAwCisrKyBiL2NtZC1saW5lLXV0 aWxzL2xpYmVkaXQva2V5bWFjcm8uYwkyMDExLTA3LTI5IDEwOjAyOjA3ICswMDAwCkBAIC0xLDQg KzEsNCBAQAotLyoJJE5ldEJTRDoga2V5bWFjcm8uYyx2IDEuMyAyMDExLzA3LzI4IDAzOjUyOjE5 IGNocmlzdG9zIEV4cCAkCSovCisvKgkkTmV0QlNEOiBrZXltYWNyby5jLHYgMS40IDIwMTEvMDcv MjggMjA6NTA6NTUgY2hyaXN0b3MgRXhwICQJKi8KIAogLyotCiAgKiBDb3B5cmlnaHQgKGMpIDE5 OTIsIDE5OTMKQEAgLTExOSw3ICsxMTksNyBAQCBwcm90ZWN0ZWQgdm9pZAoga2V5bWFjcm9fZW5k KEVkaXRMaW5lICplbCkKIHsKIAotCWVsX2ZyZWUoKHB0cl90KSBlbC0+ZWxfa2V5bWFjcm8uYnVm KTsKKwllbF9mcmVlKGVsLT5lbF9rZXltYWNyby5idWYpOwogCWVsLT5lbF9rZXltYWNyby5idWYg PSBOVUxMOwogCW5vZGVfX2ZyZWUoZWwtPmVsX2tleW1hY3JvLm1hcCk7CiB9CkBAIC0zNDIsNyAr MzQyLDcgQEAgbm9kZV9fdHJ5KEVkaXRMaW5lICplbCwga2V5bWFjcm9fbm9kZV90IAogCQljYXNl IFhLX1NUUjoKIAkJY2FzZSBYS19FWEU6CiAJCQlpZiAocHRyLT52YWwuc3RyKQotCQkJCWVsX2Zy ZWUoKHB0cl90KSBwdHItPnZhbC5zdHIpOworCQkJCWVsX2ZyZWUocHRyLT52YWwuc3RyKTsKIAkJ CWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRUxfQUJPUlQoKGVsLT5lbF9lcnJmaWxlLCAiQmFkIFhL XyB0eXBlICVkXG4iLApAQCAtNDQzLDEzICs0NDMsMTMgQEAgbm9kZV9fcHV0KEVkaXRMaW5lICpl bCwga2V5bWFjcm9fbm9kZV90IAogCWNhc2UgWEtfRVhFOgogCWNhc2UgWEtfU1RSOgogCQlpZiAo cHRyLT52YWwuc3RyICE9IE5VTEwpCi0JCQllbF9mcmVlKChwdHJfdCkgcHRyLT52YWwuc3RyKTsK KwkJCWVsX2ZyZWUocHRyLT52YWwuc3RyKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRUxfQUJP UlQoKGVsLT5lbF9lcnJmaWxlLCAiQmFkIFhLXyB0eXBlICVkXG4iLCBwdHItPnR5cGUpKTsKIAkJ YnJlYWs7CiAJfQotCWVsX2ZyZWUoKHB0cl90KSBwdHIpOworCWVsX2ZyZWUocHRyKTsKIH0KIAog CkBAIC00NjEsNyArNDYxLDcgQEAgbm9kZV9fZ2V0KEludCBjaCkKIHsKIAlrZXltYWNyb19ub2Rl X3QgKnB0cjsKIAotCXB0ciA9IChrZXltYWNyb19ub2RlX3QgKikgZWxfbWFsbG9jKChzaXplX3Qp IHNpemVvZihrZXltYWNyb19ub2RlX3QpKTsKKwlwdHIgPSBlbF9tYWxsb2Moc2l6ZW9mKCpwdHIp KTsKIAlpZiAocHRyID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCXB0ci0+Y2ggPSBjaDsKQEAg LTQ3OSw3ICs0NzksNyBAQCBub2RlX19mcmVlKGtleW1hY3JvX25vZGVfdCAqaykKIAkJcmV0dXJu OwogCW5vZGVfX2ZyZWUoay0+c2libGluZyk7CiAJbm9kZV9fZnJlZShrLT5uZXh0KTsKLQllbF9m cmVlKChwdHJfdCkgayk7CisJZWxfZnJlZShrKTsKIH0KIAogLyogbm9kZV9sb29rdXAoKToKCj09 PSBtb2RpZmllZCBmaWxlICdjbWQtbGluZS11dGlscy9saWJlZGl0L21hcC5jJwotLS0gYS9jbWQt bGluZS11dGlscy9saWJlZGl0L21hcC5jCTIwMTEtMDctMjggMDg6MDY6NDUgKzAwMDAKKysrIGIv Y21kLWxpbmUtdXRpbHMvbGliZWRpdC9tYXAuYwkyMDExLTA3LTI5IDEwOjAyOjA3ICswMDAwCkBA IC0xLDQgKzEsNCBAQAotLyoJJE5ldEJTRDogbWFwLmMsdiAxLjI3IDIwMTEvMDcvMjggMDE6NTY6 MjcgY2hyaXN0b3MgRXhwICQJKi8KKy8qCSROZXRCU0Q6IG1hcC5jLHYgMS4yOCAyMDExLzA3LzI4 IDIwOjUwOjU1IGNocmlzdG9zIEV4cCAkCSovCiAKIC8qLQogICogQ29weXJpZ2h0IChjKSAxOTky LCAxOTkzCkBAIC05MDIsMjYgKzkwMiwyNSBAQCBtYXBfaW5pdChFZGl0TGluZSAqZWwpCiAJCUVM X0FCT1JUKChlbC0+ZXJyZmlsZSwgIlZpIGluc2VydCBtYXAgaW5jb3JyZWN0XG4iKSk7CiAjZW5k aWYKIAotCWVsLT5lbF9tYXAuYWx0ID0gKGVsX2FjdGlvbl90ICopZWxfbWFsbG9jKHNpemVvZihl bF9hY3Rpb25fdCkgKiBOX0tFWVMpOworCWVsLT5lbF9tYXAuYWx0ID0gZWxfbWFsbG9jKHNpemVv ZigqZWwtPmVsX21hcC5hbHQpICogTl9LRVlTKTsKIAlpZiAoZWwtPmVsX21hcC5hbHQgPT0gTlVM TCkKIAkJcmV0dXJuICgtMSk7Ci0JZWwtPmVsX21hcC5rZXkgPSAoZWxfYWN0aW9uX3QgKillbF9t YWxsb2Moc2l6ZW9mKGVsX2FjdGlvbl90KSAqIE5fS0VZUyk7CisJZWwtPmVsX21hcC5rZXkgPSBl bF9tYWxsb2Moc2l6ZW9mKCplbC0+ZWxfbWFwLmtleSkgKiBOX0tFWVMpOwogCWlmIChlbC0+ZWxf bWFwLmtleSA9PSBOVUxMKQogCQlyZXR1cm4gKC0xKTsKIAllbC0+ZWxfbWFwLmVtYWNzID0gZWxf bWFwX2VtYWNzOwogCWVsLT5lbF9tYXAudmljID0gZWxfbWFwX3ZpX2NvbW1hbmQ7CiAJZWwtPmVs X21hcC52aWkgPSBlbF9tYXBfdmlfaW5zZXJ0OwotCWVsLT5lbF9tYXAuaGVscCA9IChlbF9iaW5k aW5nc190ICopIGVsX21hbGxvYyhzaXplb2YoZWxfYmluZGluZ3NfdCkgKgotCSAgICBFTF9OVU1f RkNOUyk7CisJZWwtPmVsX21hcC5oZWxwID0gZWxfbWFsbG9jKHNpemVvZigqZWwtPmVsX21hcC5o ZWxwKSAqIEVMX05VTV9GQ05TKTsKIAlpZiAoZWwtPmVsX21hcC5oZWxwID09IE5VTEwpCiAJCXJl dHVybiAoLTEpOwogCSh2b2lkKSBtZW1jcHkoZWwtPmVsX21hcC5oZWxwLCBoZWxwX19nZXQoKSwK LQkgICAgc2l6ZW9mKGVsX2JpbmRpbmdzX3QpICogRUxfTlVNX0ZDTlMpOwotCWVsLT5lbF9tYXAu ZnVuYyA9IChlbF9mdW5jX3QgKillbF9tYWxsb2Moc2l6ZW9mKGVsX2Z1bmNfdCkgKgotCSAgICBF TF9OVU1fRkNOUyk7CisJICAgIHNpemVvZigqZWwtPmVsX21hcC5oZWxwKSAqIEVMX05VTV9GQ05T KTsKKwllbC0+ZWxfbWFwLmZ1bmMgPSBlbF9tYWxsb2Moc2l6ZW9mKCplbC0+ZWxfbWFwLmZ1bmMp ICogRUxfTlVNX0ZDTlMpOwogCWlmIChlbC0+ZWxfbWFwLmZ1bmMgPT0gTlVMTCkKIAkJcmV0dXJu ICgtMSk7Ci0JbWVtY3B5KGVsLT5lbF9tYXAuZnVuYywgZnVuY19fZ2V0KCksIHNpemVvZihlbF9m dW5jX3QpICogRUxfTlVNX0ZDTlMpOworCW1lbWNweShlbC0+ZWxfbWFwLmZ1bmMsIGZ1bmNfX2dl dCgpLCBzaXplb2YoKmVsLT5lbF9tYXAuZnVuYykKKwkgICAgKiBFTF9OVU1fRkNOUyk7CiAJZWwt PmVsX21hcC5uZnVuYyA9IEVMX05VTV9GQ05TOwogCiAjaWZkZWYgVklERUZBVUxUCkBAIC05NDAs MTYgKzkzOSwxNiBAQCBwcm90ZWN0ZWQgdm9pZAogbWFwX2VuZChFZGl0TGluZSAqZWwpCiB7CiAK LQllbF9mcmVlKChwdHJfdCkgZWwtPmVsX21hcC5hbHQpOworCWVsX2ZyZWUoZWwtPmVsX21hcC5h bHQpOwogCWVsLT5lbF9tYXAuYWx0ID0gTlVMTDsKLQllbF9mcmVlKChwdHJfdCkgZWwtPmVsX21h cC5rZXkpOworCWVsX2ZyZWUoZWwtPmVsX21hcC5rZXkpOwogCWVsLT5lbF9tYXAua2V5ID0gTlVM TDsKIAllbC0+ZWxfbWFwLmVtYWNzID0gTlVMTDsKIAllbC0+ZWxfbWFwLnZpYyA9IE5VTEw7CiAJ ZWwtPmVsX21hcC52aWkgPSBOVUxMOwotCWVsX2ZyZWUoKHB0cl90KSBlbC0+ZWxfbWFwLmhlbHAp OworCWVsX2ZyZWUoZWwtPmVsX21hcC5oZWxwKTsKIAllbC0+ZWxfbWFwLmhlbHAgPSBOVUxMOwot CWVsX2ZyZWUoKHB0cl90KSBlbC0+ZWxfbWFwLmZ1bmMpOworCWVsX2ZyZWUoZWwtPmVsX21hcC5m dW5jKTsKIAllbC0+ZWxfbWFwLmZ1bmMgPSBOVUxMOwogfQogCkBAIC0xNDAwLDEzICsxMzk5LDE0 IEBAIG1hcF9hZGRmdW5jKEVkaXRMaW5lICplbCwgY29uc3QgQ2hhciAqbmEKIAlpZiAobmFtZSA9 PSBOVUxMIHx8IGhlbHAgPT0gTlVMTCB8fCBmdW5jID09IE5VTEwpCiAJCXJldHVybiAoLTEpOwog Ci0JaWYgKChwID0gZWxfcmVhbGxvYyhlbC0+ZWxfbWFwLmZ1bmMsIG5mICogc2l6ZW9mKGVsX2Z1 bmNfdCkpKSA9PSBOVUxMKQorCWlmICgocCA9IGVsX3JlYWxsb2MoZWwtPmVsX21hcC5mdW5jLCBu ZiAqCisJICAgIHNpemVvZigqZWwtPmVsX21hcC5mdW5jKSkpID09IE5VTEwpCiAJCXJldHVybiAo LTEpOwotCWVsLT5lbF9tYXAuZnVuYyA9IChlbF9mdW5jX3QgKikgcDsKLQlpZiAoKHAgPSBlbF9y ZWFsbG9jKGVsLT5lbF9tYXAuaGVscCwgbmYgKiBzaXplb2YoZWxfYmluZGluZ3NfdCkpKQorCWVs LT5lbF9tYXAuZnVuYyA9IHA7CisJaWYgKChwID0gZWxfcmVhbGxvYyhlbC0+ZWxfbWFwLmhlbHAs IG5mICogc2l6ZW9mKCplbC0+ZWxfbWFwLmhlbHApKSkKIAkgICAgPT0gTlVMTCkKIAkJcmV0dXJu ICgtMSk7Ci0JZWwtPmVsX21hcC5oZWxwID0gKGVsX2JpbmRpbmdzX3QgKikgcDsKKwllbC0+ZWxf bWFwLmhlbHAgPSBwOwogCiAJbmYgPSBlbC0+ZWxfbWFwLm5mdW5jOwogCWVsLT5lbF9tYXAuZnVu Y1tuZl0gPSBmdW5jOwoKPT09IG1vZGlmaWVkIGZpbGUgJ2NtZC1saW5lLXV0aWxzL2xpYmVkaXQv cmVhZC5jJwotLS0gYS9jbWQtbGluZS11dGlscy9saWJlZGl0L3JlYWQuYwkyMDExLTA3LTI4IDA4 OjA2OjQ1ICswMDAwCisrKyBiL2NtZC1saW5lLXV0aWxzL2xpYmVkaXQvcmVhZC5jCTIwMTEtMDct MjkgMTA6MDI6MDcgKzAwMDAKQEAgLTEsNCArMSw0IEBACi0vKgkkTmV0QlNEOiByZWFkLmMsdiAx LjYzIDIwMTEvMDcvMjggMDE6NTY6MjcgY2hyaXN0b3MgRXhwICQJKi8KKy8qCSROZXRCU0Q6IHJl YWQuYyx2IDEuNjQgMjAxMS8wNy8yOCAyMDo1MDo1NSBjaHJpc3RvcyBFeHAgJAkqLwogCiAvKi0K ICAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MwpAQCAtMTYxLDcgKzE2MSw3IEBAIHJlYWRfX2Zp eGlvKGludCBmZCBfX2F0dHJpYnV0ZV9fKChfX3VudXMKIAkJewogCQkJaW50IHplcm8gPSAwOwog Ci0JCQlpZiAoaW9jdGwoZmQsIEZJT05CSU8sIChpb2N0bF90KSAmIHplcm8pID09IC0xKQorCQkJ aWYgKGlvY3RsKGZkLCBGSU9OQklPLCAmemVybykgPT0gLTEpCiAJCQkJcmV0dXJuICgtMSk7CiAJ CQllbHNlCiAJCQkJZSA9IDE7CkBAIC0xOTUsNyArMTk1LDcgQEAgcmVhZF9wcmVyZWFkKEVkaXRM aW5lICplbCkKIC8qIEZJT05SRUFEIGF0dGVtcHRzIHRvIGJ1ZmZlciB1cCBtdWx0aXBsZSBieXRl cywgYW5kIHRvIG1ha2UgdGhhdCB3b3JrCiAgKiBwcm9wZXJseSB3aXRoIHBhcnRpYWwgd2lkZS9V VEYtOCBjaGFyYWN0ZXJzIHdvdWxkIG5lZWQgc29tZSBjYXJlZnVsIHdvcmsuICovCiAjaWZkZWYg RklPTlJFQUQKLQkodm9pZCkgaW9jdGwoZWwtPmVsX2luZmQsIEZJT05SRUFELCAoaW9jdGxfdCkg JiBjaHJzKTsKKwkodm9pZCkgaW9jdGwoZWwtPmVsX2luZmQsIEZJT05SRUFELCAmY2hycyk7CiAJ aWYgKGNocnMgPiAwKSB7CiAJCWNoYXIgYnVmW0VMX0JVRlNJWl07CiAKQEAgLTUxNSw3ICs1MTUs NyBAQCBGVU4oZWwsZ2V0cykoRWRpdExpbmUgKmVsLCBpbnQgKm5yZWFkKQogCWlmIChlbC0+ZWxf dHR5LnRfbW9kZSA9PSBFWF9JTyAmJiBtYS0+bGV2ZWwgPCAwKSB7CiAJCWxvbmcgY2hycyA9IDA7 CiAKLQkJKHZvaWQpIGlvY3RsKGVsLT5lbF9pbmZkLCBGSU9OUkVBRCwgKGlvY3RsX3QpICYgY2hy cyk7CisJCSh2b2lkKSBpb2N0bChlbC0+ZWxfaW5mZCwgRklPTlJFQUQsICZjaHJzKTsKIAkJaWYg KGNocnMgPT0gMCkgewogCQkJaWYgKHR0eV9yYXdtb2RlKGVsKSA8IDApIHsKIAkJCQllcnJubyA9 IDA7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnY21kLWxpbmUtdXRpbHMvbGliZWRpdC9yZWFkbGluZS5j JwotLS0gYS9jbWQtbGluZS11dGlscy9saWJlZGl0L3JlYWRsaW5lLmMJMjAxMS0wNy0yOCAwODow Njo0NSArMDAwMAorKysgYi9jbWQtbGluZS11dGlscy9saWJlZGl0L3JlYWRsaW5lLmMJMjAxMS0w Ny0yOSAxMDowMjowNyArMDAwMApAQCAtMSw0ICsxLDQgQEAKLS8qCSROZXRCU0Q6IHJlYWRsaW5l LmMsdiAxLjkzIDIwMTEvMDcvMjggMDA6NTQ6MjYgY2hyaXN0b3MgRXhwICQJKi8KKy8qCSROZXRC U0Q6IHJlYWRsaW5lLmMsdiAxLjk1IDIwMTEvMDcvMjggMjA6NTA6NTUgY2hyaXN0b3MgRXhwICQJ Ki8KIAogLyotCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTcgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJ bmMuCkBAIC0yNjAsNyArMjYwLDcgQEAgcmxfc2V0X3Byb21wdChjb25zdCBjaGFyICpwcm9tcHQp CiAJaWYgKHJsX3Byb21wdCAhPSBOVUxMICYmIHN0cmNtcChybF9wcm9tcHQsIHByb21wdCkgPT0g MCkgCiAJCXJldHVybiAwOwogCWlmIChybF9wcm9tcHQpCi0JCWZyZWUocmxfcHJvbXB0KTsKKwkJ ZWxfZnJlZShybF9wcm9tcHQpOwogCXJsX3Byb21wdCA9IHN0cmR1cChwcm9tcHQpOwogCWlmIChy bF9wcm9tcHQgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwpAQCAtNDc0LDcgKzQ3NCw3IEBAIF9ybF9j b21wYXRfc3ViKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2gKIAkJfSBlbHNlCiAJCQlzKys7CiAJ fQotCXIgPSByZXN1bHQgPSBtYWxsb2MobGVuICsgMSk7CisJciA9IHJlc3VsdCA9IGVsX21hbGxv YygobGVuICsgMSkgKiBzaXplb2YoKnIpKTsKIAlpZiAocmVzdWx0ID09IE5VTEwpCiAJCXJldHVy biBOVUxMOwogCXMgPSBzdHI7CkBAIC01NjQsNyArNTY0LDcgQEAgZ2V0X2hpc3RvcnlfZXZlbnQo Y29uc3QgY2hhciAqY21kLCBpbnQgKgogCWVsc2UgaWYgKGxlbiA9PSAwKQogCQlyZXR1cm4oTlVM TCk7CiAJZWxzZSB7Ci0JCWlmICgocGF0ID0gbWFsbG9jKGxlbiArIDEpKSA9PSBOVUxMKQorCQlp ZiAoKHBhdCA9IGVsX21hbGxvYygobGVuICsgMSkgKiBzaXplb2YoKnBhdCkpKSA9PSBOVUxMKQog CQkJcmV0dXJuIE5VTEw7CiAJCSh2b2lkKXN0cm5jcHkocGF0LCBjbWQgKyBiZWdpbiwgbGVuKTsK IAkJcGF0W2xlbl0gPSAnXDAnOwpAQCAtNTcyLDcgKzU3Miw3IEBAIGdldF9oaXN0b3J5X2V2ZW50 KGNvbnN0IGNoYXIgKmNtZCwgaW50ICoKIAogCWlmIChoaXN0b3J5KGgsICZldiwgSF9DVVJSKSAh PSAwKSB7CiAJCWlmIChwYXQgIT0gbGFzdF9zZWFyY2hfcGF0KQotCQkJZnJlZShwYXQpOworCQkJ ZWxfZnJlZShwYXQpOwogCQlyZXR1cm4gKE5VTEwpOwogCX0KIAludW0gPSBldi5udW07CkBAIC01 ODAsNyArNTgwLDcgQEAgZ2V0X2hpc3RvcnlfZXZlbnQoY29uc3QgY2hhciAqY21kLCBpbnQgKgog CWlmIChzdWIpIHsKIAkJaWYgKHBhdCAhPSBsYXN0X3NlYXJjaF9wYXQpIHsKIAkJCWlmIChsYXN0 X3NlYXJjaF9wYXQpCi0JCQkJZnJlZShsYXN0X3NlYXJjaF9wYXQpOworCQkJCWVsX2ZyZWUobGFz dF9zZWFyY2hfcGF0KTsKIAkJCWxhc3Rfc2VhcmNoX3BhdCA9IHBhdDsKIAkJfQogCQlyZXQgPSBo aXN0b3J5X3NlYXJjaChwYXQsIC0xKTsKQEAgLTU5MiwxOCArNTkyLDE4IEBAIGdldF9oaXN0b3J5 X2V2ZW50KGNvbnN0IGNoYXIgKmNtZCwgaW50ICoKIAkJaGlzdG9yeShoLCAmZXYsIEhfRklSU1Qp OwogCQkodm9pZClmcHJpbnRmKHJsX291dHN0cmVhbSwgIiVzOiBFdmVudCBub3QgZm91bmRcbiIs IHBhdCk7CiAJCWlmIChwYXQgIT0gbGFzdF9zZWFyY2hfcGF0KQotCQkJZnJlZShwYXQpOworCQkJ ZWxfZnJlZShwYXQpOwogCQlyZXR1cm4oTlVMTCk7CiAJfQogCiAJaWYgKHN1YiAmJiBsZW4pIHsK IAkJaWYgKGxhc3Rfc2VhcmNoX21hdGNoICYmIGxhc3Rfc2VhcmNoX21hdGNoICE9IHBhdCkKLQkJ CWZyZWUobGFzdF9zZWFyY2hfbWF0Y2gpOworCQkJZWxfZnJlZShsYXN0X3NlYXJjaF9tYXRjaCk7 CiAJCWxhc3Rfc2VhcmNoX21hdGNoID0gcGF0OwogCX0KIAogCWlmIChwYXQgIT0gbGFzdF9zZWFy Y2hfcGF0KQotCQlmcmVlKHBhdCk7CisJCWVsX2ZyZWUocGF0KTsKIAogCWlmIChoaXN0b3J5KGgs ICZldiwgSF9DVVJSKSAhPSAwKQogCQlyZXR1cm4oTlVMTCk7CkBAIC02NTgsNyArNjU4LDggQEAg X2hpc3RvcnlfZXhwYW5kX2NvbW1hbmQoY29uc3QgY2hhciAqY29tbQogCX0gZWxzZSB7CiAJCWlm IChjb21tYW5kW29mZnMgKyAxXSA9PSAnIycpIHsKIAkJCS8qIHVzZSBjb21tYW5kIHNvIGZhciAq LwotCQkJaWYgKChhcHRyID0gbWFsbG9jKG9mZnMgKyAxKSkgPT0gTlVMTCkKKwkJCWlmICgoYXB0 ciA9IGVsX21hbGxvYygob2ZmcyArIDEpICogc2l6ZW9mKCphcHRyKSkpCisJCQkgICAgPT0gTlVM TCkKIAkJCQlyZXR1cm4gLTE7CiAJCQkodm9pZClzdHJuY3B5KGFwdHIsIGNvbW1hbmQsIG9mZnMp OwogCQkJYXB0cltvZmZzXSA9ICdcMCc7CkBAIC02NzgsNyArNjc5LDcgQEAgX2hpc3RvcnlfZXhw YW5kX2NvbW1hbmQoY29uc3QgY2hhciAqY29tbQogCWlmICghaGFzX21vZHMpIHsKIAkJKnJlc3Vs dCA9IHN0cmR1cChhcHRyID8gYXB0ciA6IHB0cik7CiAJCWlmIChhcHRyKQotCQkJZnJlZShhcHRy KTsKKwkJCWVsX2ZyZWUoYXB0cik7CiAJCWlmICgqcmVzdWx0ID09IE5VTEwpCiAJCQlyZXR1cm4g LTE7CiAJCXJldHVybigxKTsKQEAgLTcyNiwxNCArNzI3LDE0IEBAIF9oaXN0b3J5X2V4cGFuZF9j b21tYW5kKGNvbnN0IGNoYXIgKmNvbW0KIAkJCSh2b2lkKWZwcmludGYocmxfb3V0c3RyZWFtLCAi JXM6IEJhZCB3b3JkIHNwZWNpZmllciIsCiAJCQkgICAgY29tbWFuZCArIG9mZnMgKyBpZHgpOwog CQkJaWYgKGFwdHIpCi0JCQkJZnJlZShhcHRyKTsKKwkJCQllbF9mcmVlKGFwdHIpOwogCQkJcmV0 dXJuKC0xKTsKIAkJfQogCX0gZWxzZQogCQl0bXAgPSBzdHJkdXAoYXB0cj8gYXB0cjpwdHIpOwog CiAJaWYgKGFwdHIpCi0JCWZyZWUoYXB0cik7CisJCWVsX2ZyZWUoYXB0cik7CiAKIAlpZiAoKmNt ZCA9PSAnXDAnIHx8ICgoc2l6ZV90KShjbWQgLSAoY29tbWFuZCArIG9mZnMpKSA+PSBjbWRsZW4p KSB7CiAJCSpyZXN1bHQgPSB0bXA7CkBAIC03NDksNyArNzUwLDcgQEAgX2hpc3RvcnlfZXhwYW5k X2NvbW1hbmQoY29uc3QgY2hhciAqY29tbQogCQl9IGVsc2UgaWYgKCpjbWQgPT0gJ3QnKSB7CS8q IHJlbW92ZSBsZWFkaW5nIHBhdGggKi8KIAkJCWlmICgoYXB0ciA9IHN0cnJjaHIodG1wLCAnLycp KSAhPSBOVUxMKSB7CiAJCQkJYXB0ciA9IHN0cmR1cChhcHRyICsgMSk7Ci0JCQkJZnJlZSh0bXAp OworCQkJCWVsX2ZyZWUodG1wKTsKIAkJCQl0bXAgPSBhcHRyOwogCQkJfQogCQl9IGVsc2UgaWYg KCpjbWQgPT0gJ3InKSB7CS8qIHJlbW92ZSB0cmFpbGluZyBzdWZmaXggKi8KQEAgLTc1OCw3ICs3 NTksNyBAQCBfaGlzdG9yeV9leHBhbmRfY29tbWFuZChjb25zdCBjaGFyICpjb21tCiAJCX0gZWxz ZSBpZiAoKmNtZCA9PSAnZScpIHsJLyogcmVtb3ZlIGFsbCBidXQgc3VmZml4ICovCiAJCQlpZiAo KGFwdHIgPSBzdHJyY2hyKHRtcCwgJy4nKSkgIT0gTlVMTCkgewogCQkJCWFwdHIgPSBzdHJkdXAo YXB0cik7Ci0JCQkJZnJlZSh0bXApOworCQkJCWVsX2ZyZWUodG1wKTsKIAkJCQl0bXAgPSBhcHRy OwogCQkJfQogCQl9IGVsc2UgaWYgKCpjbWQgPT0gJ3AnKQkJLyogcHJpbnQgb25seSAqLwpAQCAt Nzc1LDEwICs3NzYsMTAgQEAgX2hpc3RvcnlfZXhwYW5kX2NvbW1hbmQoY29uc3QgY2hhciAqY29t bQogCQkJZWxzZSBpZiAoKmNtZCA9PSAncycpIHsKIAkJCQlkZWxpbSA9ICooKytjbWQpLCBjbWQr KzsKIAkJCQlzaXplID0gMTY7Ci0JCQkJd2hhdCA9IHJlYWxsb2MoZnJvbSwgc2l6ZSk7CisJCQkJ d2hhdCA9IGVsX3JlYWxsb2MoZnJvbSwgc2l6ZSAqIHNpemVvZigqd2hhdCkpOwogCQkJCWlmICh3 aGF0ID09IE5VTEwpIHsKLQkJCQkJZnJlZShmcm9tKTsKLQkJCQkJZnJlZSh0bXApOworCQkJCQll bF9mcmVlKGZyb20pOworCQkJCQllbF9mcmVlKHRtcCk7CiAJCQkJCXJldHVybiAwOwogCQkJCX0K IAkJCQlsZW4gPSAwOwpAQCAtNzg3LDExICs3ODgsMTIgQEAgX2hpc3RvcnlfZXhwYW5kX2NvbW1h bmQoY29uc3QgY2hhciAqY29tbQogCQkJCQkJY21kKys7CiAJCQkJCWlmIChsZW4gPj0gc2l6ZSkg ewogCQkJCQkJY2hhciAqbndoYXQ7Ci0JCQkJCQlud2hhdCA9IHJlYWxsb2Mod2hhdCwKLQkJCQkJ CQkJKHNpemUgPDw9IDEpKTsKKwkJCQkJCW53aGF0ID0gZWxfcmVhbGxvYyh3aGF0LAorCQkJCQkJ ICAgIChzaXplIDw8PSAxKSAqCisJCQkJCQkgICAgc2l6ZW9mKCpud2hhdCkpOwogCQkJCQkJaWYg KG53aGF0ID09IE5VTEwpIHsKLQkJCQkJCQlmcmVlKHdoYXQpOwotCQkJCQkJCWZyZWUodG1wKTsK KwkJCQkJCQllbF9mcmVlKHdoYXQpOworCQkJCQkJCWVsX2ZyZWUodG1wKTsKIAkJCQkJCQlyZXR1 cm4gMDsKIAkJCQkJCX0KIAkJCQkJCXdoYXQgPSBud2hhdDsKQEAgLTgwMSwxNiArODAzLDE2IEBA IF9oaXN0b3J5X2V4cGFuZF9jb21tYW5kKGNvbnN0IGNoYXIgKmNvbW0KIAkJCQl3aGF0W2xlbl0g PSAnXDAnOwogCQkJCWZyb20gPSB3aGF0OwogCQkJCWlmICgqd2hhdCA9PSAnXDAnKSB7Ci0JCQkJ CWZyZWUod2hhdCk7CisJCQkJCWVsX2ZyZWUod2hhdCk7CiAJCQkJCWlmIChzZWFyY2gpIHsKIAkJ CQkJCWZyb20gPSBzdHJkdXAoc2VhcmNoKTsKIAkJCQkJCWlmIChmcm9tID09IE5VTEwpIHsKLQkJ CQkJCQlmcmVlKHRtcCk7CisJCQkJCQkJZWxfZnJlZSh0bXApOwogCQkJCQkJCXJldHVybiAwOwog CQkJCQkJfQogCQkJCQl9IGVsc2UgewogCQkJCQkJZnJvbSA9IE5VTEw7Ci0JCQkJCQlmcmVlKHRt cCk7CisJCQkJCQllbF9mcmVlKHRtcCk7CiAJCQkJCQlyZXR1cm4gKC0xKTsKIAkJCQkJfQogCQkJ CX0KQEAgLTgxOSwxMCArODIxLDEwIEBAIF9oaXN0b3J5X2V4cGFuZF9jb21tYW5kKGNvbnN0IGNo YXIgKmNvbW0KIAkJCQkJY29udGludWU7CiAKIAkJCQlzaXplID0gMTY7Ci0JCQkJd2l0aCA9IHJl YWxsb2ModG8sIHNpemUpOworCQkJCXdpdGggPSBlbF9yZWFsbG9jKHRvLCBzaXplICogc2l6ZW9m KCp3aXRoKSk7CiAJCQkJaWYgKHdpdGggPT0gTlVMTCkgewotCQkJCQlmcmVlKHRvKTsKLQkJCQkJ ZnJlZSh0bXApOworCQkJCQllbF9mcmVlKHRvKTsKKwkJCQkJZWxfZnJlZSh0bXApOwogCQkJCQly ZXR1cm4gLTE7CiAJCQkJfQogCQkJCWxlbiA9IDA7CkBAIC04MzEsMTAgKzgzMywxMSBAQCBfaGlz dG9yeV9leHBhbmRfY29tbWFuZChjb25zdCBjaGFyICpjb21tCiAJCQkJCWlmIChsZW4gKyBmcm9t X2xlbiArIDEgPj0gc2l6ZSkgewogCQkJCQkJY2hhciAqbndpdGg7CiAJCQkJCQlzaXplICs9IGZy b21fbGVuICsgMTsKLQkJCQkJCW53aXRoID0gcmVhbGxvYyh3aXRoLCBzaXplKTsKKwkJCQkJCW53 aXRoID0gZWxfcmVhbGxvYyh3aXRoLAorCQkJCQkJICAgIHNpemUgKiBzaXplb2YoKm53aXRoKSk7 CiAJCQkJCQlpZiAobndpdGggPT0gTlVMTCkgewotCQkJCQkJCWZyZWUod2l0aCk7Ci0JCQkJCQkJ ZnJlZSh0bXApOworCQkJCQkJCWVsX2ZyZWUod2l0aCk7CisJCQkJCQkJZWxfZnJlZSh0bXApOwog CQkJCQkJCXJldHVybiAtMTsKIAkJCQkJCX0KIAkJCQkJCXdpdGggPSBud2l0aDsKQEAgLTg1Nyw3 ICs4NjAsNyBAQCBfaGlzdG9yeV9leHBhbmRfY29tbWFuZChjb25zdCBjaGFyICpjb21tCiAKIAkJ CWFwdHIgPSBfcmxfY29tcGF0X3N1Yih0bXAsIGZyb20sIHRvLCBnX29uKTsKIAkJCWlmIChhcHRy KSB7Ci0JCQkJZnJlZSh0bXApOworCQkJCWVsX2ZyZWUodG1wKTsKIAkJCQl0bXAgPSBhcHRyOwog CQkJfQogCQkJZ19vbiA9IDA7CkBAIC04ODksNyArODkyLDcgQEAgaGlzdG9yeV9leHBhbmQoY2hh ciAqc3RyLCBjaGFyICoqb3V0cHV0KQogCSpvdXRwdXQgPSBOVUxMOwogCWlmIChzdHJbMF0gPT0g aGlzdG9yeV9zdWJzdF9jaGFyKSB7CiAJCS8qIF5mb29eZm9vMl4gaXMgZXF1aXZhbGVudCB0byAh ITpzXmZvb15mb28yXiAqLwotCQkqb3V0cHV0ID0gbWFsbG9jKHN0cmxlbihzdHIpICsgNCArIDEp OworCQkqb3V0cHV0ID0gZWxfbWFsbG9jKChzdHJsZW4oc3RyKSArIDQgKyAxKSAqIHNpemVvZigq b3V0cHV0KSk7CiAJCWlmICgqb3V0cHV0ID09IE5VTEwpCiAJCQlyZXR1cm4gMDsKIAkJKCpvdXRw dXQpWzBdID0gKCpvdXRwdXQpWzFdID0gaGlzdG9yeV9leHBhbnNpb25fY2hhcjsKQEAgLTkwNiwx MSArOTA5LDEyIEBAIGhpc3RvcnlfZXhwYW5kKGNoYXIgKnN0ciwgY2hhciAqKm91dHB1dCkKICNk ZWZpbmUgQUREX1NUUklORyh3aGF0LCBsZW4sIGZyKQkJCQkJXAogCXsJCQkJCQkJCVwKIAkJaWYg KGlkeCArIGxlbiArIDEgPiBzaXplKSB7CQkJCVwKLQkJCWNoYXIgKm5yZXN1bHQgPSByZWFsbG9j KHJlc3VsdCwgKHNpemUgKz0gbGVuICsgMSkpO1wKKwkJCWNoYXIgKm5yZXN1bHQgPSBlbF9yZWFs bG9jKHJlc3VsdCwJCVwKKwkJCSAgICAoc2l6ZSArPSBsZW4gKyAxKSAqIHNpemVvZigqbnJlc3Vs dCkpOwlcCiAJCQlpZiAobnJlc3VsdCA9PSBOVUxMKSB7CQkJCVwKLQkJCQlmcmVlKCpvdXRwdXQp OwkJCQlcCisJCQkJZWxfZnJlZSgqb3V0cHV0KTsJCQlcCiAJCQkJaWYgKC8qQ09OU1RDT05EKi9m cikJCQlcCi0JCQkJCWZyZWUodG1wKTsJCQlcCisJCQkJCWVsX2ZyZWUodG1wKTsJCQlcCiAJCQkJ cmV0dXJuIDA7CQkJCVwKIAkJCX0JCQkJCQlcCiAJCQlyZXN1bHQgPSBucmVzdWx0OwkJCQlcCkBA IC05NzcsNyArOTgxLDcgQEAgbG9vcDoKIAkJCUFERF9TVFJJTkcodG1wLCBsZW4sIDEpOwogCQl9 CiAJCWlmICh0bXApIHsKLQkJCWZyZWUodG1wKTsKKwkJCWVsX2ZyZWUodG1wKTsKIAkJCXRtcCA9 IE5VTEw7CiAJCX0KIAkJaSA9IGo7CkBAIC05OTQsNyArOTk4LDcgQEAgbG9vcDoKIAkJcmV0ID0g LTE7CiAjZW5kaWYKIAl9Ci0JZnJlZSgqb3V0cHV0KTsKKwllbF9mcmVlKCpvdXRwdXQpOwogCSpv dXRwdXQgPSByZXN1bHQ7CiAKIAlyZXR1cm4gKHJldCk7CkBAIC0xMDM1LDcgKzEwMzksNyBAQCBo aXN0b3J5X2FyZ19leHRyYWN0KGludCBzdGFydCwgaW50IGVuZCwgCiAJZm9yIChpID0gc3RhcnQs IGxlbiA9IDA7IGkgPD0gKHNpemVfdCllbmQ7IGkrKykKIAkJbGVuICs9IHN0cmxlbihhcnJbaV0p ICsgMTsKIAlsZW4rKzsKLQlyZXN1bHQgPSBtYWxsb2MobGVuKTsKKwlyZXN1bHQgPSBlbF9tYWxs b2MobGVuICogc2l6ZW9mKCpyZXN1bHQpKTsKIAlpZiAocmVzdWx0ID09IE5VTEwpCiAJCWdvdG8g b3V0OwogCkBAIC0xMDQ5LDggKzEwNTMsOCBAQCBoaXN0b3J5X2FyZ19leHRyYWN0KGludCBzdGFy dCwgaW50IGVuZCwgCiAKIG91dDoKIAlmb3IgKGkgPSAwOyBhcnJbaV07IGkrKykKLQkJZnJlZShh cnJbaV0pOwotCWZyZWUoYXJyKTsKKwkJZWxfZnJlZShhcnJbaV0pOworCWVsX2ZyZWUoYXJyKTsK IAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0xMDg5LDE5ICsxMDkzLDE5IEBAIGhpc3RvcnlfdG9r ZW5pemUoY29uc3QgY2hhciAqc3RyKQogCQlpZiAoaWR4ICsgMiA+PSBzaXplKSB7CiAJCQljaGFy ICoqbnJlc3VsdDsKIAkJCXNpemUgPDw9IDE7Ci0JCQlucmVzdWx0ID0gcmVhbGxvYyhyZXN1bHQs IHNpemUgKiBzaXplb2YoY2hhciAqKSk7CisJCQlucmVzdWx0ID0gZWxfcmVhbGxvYyhyZXN1bHQs IHNpemUgKiBzaXplb2YoKm5yZXN1bHQpKTsKIAkJCWlmIChucmVzdWx0ID09IE5VTEwpIHsKLQkJ CQlmcmVlKHJlc3VsdCk7CisJCQkJZWxfZnJlZShyZXN1bHQpOwogCQkJCXJldHVybiBOVUxMOwog CQkJfQogCQkJcmVzdWx0ID0gbnJlc3VsdDsKIAkJfQogCQlsZW4gPSBpIC0gc3RhcnQ7Ci0JCXRl bXAgPSBtYWxsb2MobGVuICsgMSk7CisJCXRlbXAgPSBlbF9tYWxsb2MoKGxlbiArIDEpICogc2l6 ZW9mKCp0ZW1wKSk7CiAJCWlmICh0ZW1wID09IE5VTEwpIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBp ZHg7IGkrKykKLQkJCQlmcmVlKHJlc3VsdFtpXSk7Ci0JCQlmcmVlKHJlc3VsdCk7CisJCQkJZWxf ZnJlZShyZXN1bHRbaV0pOworCQkJZWxfZnJlZShyZXN1bHQpOwogCQkJcmV0dXJuIE5VTEw7CiAJ CX0KIAkJKHZvaWQpc3RybmNweSh0ZW1wLCAmc3RyW3N0YXJ0XSwgbGVuKTsKQEAgLTEzOTQsMTEg KzEzOTgsMTEgQEAgcmVtb3ZlX2hpc3RvcnkoaW50IG51bSkKIAlpZiAoaCA9PSBOVUxMIHx8IGUg PT0gTlVMTCkKIAkJcmxfaW5pdGlhbGl6ZSgpOwogCi0JaWYgKChoZSA9IG1hbGxvYyhzaXplb2Yo KmhlKSkpID09IE5VTEwpCisJaWYgKChoZSA9IGVsX21hbGxvYyhzaXplb2YoKmhlKSkpID09IE5V TEwpCiAJCXJldHVybiBOVUxMOwogCiAJaWYgKGhpc3RvcnkoaCwgJmV2LCBIX0RFTERBVEEsIG51 bSwgJmhlLT5kYXRhKSAhPSAwKSB7Ci0JCWZyZWUoaGUpOworCQllbF9mcmVlKGhlKTsKIAkJcmV0 dXJuIE5VTEw7CiAJfQogCkBAIC0xNDMyLDcgKzE0MzYsNyBAQCByZXBsYWNlX2hpc3RvcnlfZW50 cnkoaW50IG51bSwgY29uc3QgY2hhCiAJaWYgKGhpc3RvcnkoaCwgJmV2LCBIX0xBU1QpICE9IDAp CiAJCXJldHVybiBOVUxMOwkvKiBlcnJvciAqLwogCi0JaWYgKChoZSA9IG1hbGxvYyhzaXplb2Yo KmhlKSkpID09IE5VTEwpCisJaWYgKChoZSA9IGVsX21hbGxvYyhzaXplb2YoKmhlKSkpID09IE5V TEwpCiAJCXJldHVybiBOVUxMOwogCiAJLyogbG9vayBmb3J3YXJkcyBmb3IgZXZlbnQgbWF0Y2hp bmcgc3BlY2lmaWVkIG9mZnNldCAqLwpAQCAtMTQ1Miw3ICsxNDU2LDcgQEAgcmVwbGFjZV9oaXN0 b3J5X2VudHJ5KGludCBudW0sIGNvbnN0IGNoYQogCiAJcmV0dXJuIGhlOwogb3V0OgotCWZyZWUo aGUpOworCWVsX2ZyZWUoaGUpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0xNjcyLDE2ICsxNjc2 LDE3IEBAIGZpbGVuYW1lX2NvbXBsZXRpb25fZnVuY3Rpb24oY29uc3QgY2hhciAKICAqIGEgY29t cGxldGlvbiBnZW5lcmF0b3IgZm9yIHVzZXJuYW1lczsgcmV0dXJucyBfZmlyc3RfIHVzZXJuYW1l CiAgKiB3aGljaCBzdGFydHMgd2l0aCBzdXBwbGllZCB0ZXh0CiAgKiB0ZXh0IGNvbnRhaW5zIGEg cGFydGlhbCB1c2VybmFtZSBwcmVjZWRlZCBieSByYW5kb20gY2hhcmFjdGVyCi0gKiAodXN1YWxs eSAnficpOyBzdGF0ZSBpcyBpZ25vcmVkCisgKiAodXN1YWxseSAnficpOyBzdGF0ZSByZXNldHMg c2VhcmNoIGZyb20gc3RhcnQgKD8/PyBzaG91bGQgd2UgZG8gdGhhdCBhbnl3YXkpCiAgKiBpdCdz IGNhbGxlcnMgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSByZXR1cm5lZCB2YWx1ZQogICovCiBjaGFy ICoKIHVzZXJuYW1lX2NvbXBsZXRpb25fZnVuY3Rpb24oY29uc3QgY2hhciAqdGV4dCwgaW50IHN0 YXRlKQogewotCi0gICAgICAgIC8qIFhYWE1ZU1FMIDogd2FybmluZzogdW51c2VkIHZhcmlhYmxl IOKAmHB3YnVm4oCZICYgJ3B3cmVzJy4gKi8KLQlzdHJ1Y3QgcGFzc3dkICpwd2Q7Ci0JLy9jaGFy IHB3YnVmWzEwMjRdOworI2lmIGRlZmluZWQoSEFWRV9HRVRQV19SX1BPU0lYKSB8fCBkZWZpbmVk KEhBVkVfR0VUUFdfUl9EUkFGVCkKKwlzdHJ1Y3QgcGFzc3dkIHB3cmVzOworCWNoYXIgcHdidWZb MTAyNF07CisjZW5kaWYKKwlzdHJ1Y3QgcGFzc3dkICpwYXNzID0gTlVMTDsKIAogCWlmICh0ZXh0 WzBdID09ICdcMCcpCiAJCXJldHVybiAoTlVMTCk7CkBAIC0xNjkyLDE1ICsxNjk3LDIxIEBAIHVz ZXJuYW1lX2NvbXBsZXRpb25fZnVuY3Rpb24oY29uc3QgY2hhciAKIAlpZiAoc3RhdGUgPT0gMCkK IAkJc2V0cHdlbnQoKTsKIAotCS8qIFhYWE1ZU1FMOiBqdXN0IHVzZSBub24tX3IgZnVuY3Rpb25z IGZvciBub3cgKi8KLQl3aGlsZSAoKHB3ZCA9IGdldHB3ZW50KCkpICYmIHRleHRbMF0gPT0gcHdk LT5wd19uYW1lWzBdCi0JICAgICYmIHN0cmNtcCh0ZXh0LCBwd2QtPnB3X25hbWUpID09IDApOwor CXdoaWxlICgKKyNpZiBkZWZpbmVkKEhBVkVfR0VUUFdfUl9QT1NJWCkgfHwgZGVmaW5lZChIQVZF X0dFVFBXX1JfRFJBRlQpCisJICAgIGdldHB3ZW50X3IoJnB3cmVzLCBwd2J1Ziwgc2l6ZW9mKHB3 YnVmKSwgJnBhc3MpID09IDAgJiYgcGFzcyAhPSBOVUxMCisjZWxzZQorCSAgICAocGFzcyA9IGdl dHB3ZW50KCkpICE9IE5VTEwKKyNlbmRpZgorCSAgICAmJiB0ZXh0WzBdID09IHBhc3MtPnB3X25h bWVbMF0KKwkgICAgJiYgc3RyY21wKHRleHQsIHBhc3MtPnB3X25hbWUpID09IDApCisJCWNvbnRp bnVlOwogCi0JaWYgKHB3ZCA9PSBOVUxMKSB7CisJaWYgKHBhc3MgPT0gTlVMTCkgewogCQllbmRw d2VudCgpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JcmV0dXJuIHN0cmR1cChwd2QtPnB3X25hbWUp OworCXJldHVybiBzdHJkdXAocGFzcy0+cHdfbmFtZSk7CiB9CiAKIApAQCAtMjExMCw3ICsyMTIx LDcgQEAgcmxfY29tcGxldGlvbl9tYXRjaGVzKGNvbnN0IGNoYXIgKnN0ciwgcgogCiAJbGVuID0g MTsKIAltYXggPSAxMDsKLQlpZiAoKGxpc3QgPSBtYWxsb2MobWF4ICogc2l6ZW9mKCpsaXN0KSkp ID09IE5VTEwpCisJaWYgKChsaXN0ID0gZWxfbWFsbG9jKG1heCAqIHNpemVvZigqbGlzdCkpKSA9 PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAogCXdoaWxlICgobWF0Y2ggPSAoKmZ1bikoc3RyLCAo aW50KShsZW4gLSAxKSkpICE9IE5VTEwpIHsKQEAgLTIxMTgsNyArMjEyOSw3IEBAIHJsX2NvbXBs ZXRpb25fbWF0Y2hlcyhjb25zdCBjaGFyICpzdHIsIHIKIAkJaWYgKGxlbiA9PSBtYXgpIHsKIAkJ CWNoYXIgKipubDsKIAkJCW1heCArPSAxMDsKLQkJCWlmICgobmwgPSByZWFsbG9jKGxpc3QsIG1h eCAqIHNpemVvZigqbmwpKSkgPT0gTlVMTCkKKwkJCWlmICgobmwgPSBlbF9yZWFsbG9jKGxpc3Qs IG1heCAqIHNpemVvZigqbmwpKSkgPT0gTlVMTCkKIAkJCQlnb3RvIG91dDsKIAkJCWxpc3QgPSBu bDsKIAkJfQpAQCAtMjE0NSw3ICsyMTU2LDcgQEAgcmxfY29tcGxldGlvbl9tYXRjaGVzKGNvbnN0 IGNoYXIgKnN0ciwgcgogCQlpZiAoKGxpc3RbMF0gPSBzdHJkdXAoc3RyKSkgPT0gTlVMTCkKIAkJ CWdvdG8gb3V0OwogCX0gZWxzZSB7Ci0JCWlmICgobGlzdFswXSA9IG1hbGxvYyhtaW4gKyAxKSkg PT0gTlVMTCkKKwkJaWYgKChsaXN0WzBdID0gZWxfbWFsbG9jKChtaW4gKyAxKSAqIHNpemVvZigq bGlzdFswXSkpKSA9PSBOVUxMKQogCQkJZ290byBvdXQ7CiAJCSh2b2lkKW1lbWNweShsaXN0WzBd LCBsaXN0WzFdLCBtaW4pOwogCQlsaXN0WzBdW21pbl0gPSAnXDAnOwpAQCAtMjE1Myw3ICsyMTY0 LDcgQEAgcmxfY29tcGxldGlvbl9tYXRjaGVzKGNvbnN0IGNoYXIgKnN0ciwgcgogCXJldHVybiBs aXN0OwogCQkKIG91dDoKLQlmcmVlKGxpc3QpOworCWVsX2ZyZWUobGlzdCk7CiAJcmV0dXJuIE5V TEw7CiB9CiAKQEAgLTIxODgsNyArMjE5OSw3IEBAIGhpc3RvcnlfZ2V0X2hpc3Rvcnlfc3RhdGUo dm9pZCkKIHsKIAlISVNUT1JZX1NUQVRFICpoczsKIAotCWlmICgoaHMgPSBtYWxsb2Moc2l6ZW9m KEhJU1RPUllfU1RBVEUpKSkgPT0gTlVMTCkKKwlpZiAoKGhzID0gZWxfbWFsbG9jKHNpemVvZigq aHMpKSkgPT0gTlVMTCkKIAkJcmV0dXJuIChOVUxMKTsKIAlocy0+bGVuZ3RoID0gaGlzdG9yeV9s ZW5ndGg7CiAJcmV0dXJuIChocyk7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnY21kLWxpbmUtdXRpbHMv bGliZWRpdC9zZWFyY2guYycKLS0tIGEvY21kLWxpbmUtdXRpbHMvbGliZWRpdC9zZWFyY2guYwky MDExLTA3LTI4IDA4OjA2OjQ1ICswMDAwCisrKyBiL2NtZC1saW5lLXV0aWxzL2xpYmVkaXQvc2Vh cmNoLmMJMjAxMS0wNy0yOSAxMDowMjowNyArMDAwMApAQCAtMSw0ICsxLDQgQEAKLS8qCSROZXRC U0Q6IHNlYXJjaC5jLHYgMS4yNSAyMDExLzA3LzI4IDAwOjQ2OjI2IGNocmlzdG9zIEV4cCAkCSov CisvKgkkTmV0QlNEOiBzZWFyY2guYyx2IDEuMjYgMjAxMS8wNy8yOCAyMDo1MDo1NSBjaHJpc3Rv cyBFeHAgJAkqLwogCiAvKi0KICAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MwpAQCAtODUsNyAr ODUsNyBAQCBwcm90ZWN0ZWQgdm9pZAogc2VhcmNoX2VuZChFZGl0TGluZSAqZWwpCiB7CiAKLQll bF9mcmVlKChwdHJfdCkgZWwtPmVsX3NlYXJjaC5wYXRidWYpOworCWVsX2ZyZWUoZWwtPmVsX3Nl YXJjaC5wYXRidWYpOwogCWVsLT5lbF9zZWFyY2gucGF0YnVmID0gTlVMTDsKIH0KIApAQCAtMTM2 LDcgKzEzNiw3IEBAIGVsX21hdGNoKGNvbnN0IENoYXIgKnN0ciwgY29uc3QgQ2hhciAqcGEKICNl bGlmIGRlZmluZWQoUkVHRVhQKQogCWlmICgocmUgPSByZWdjb21wKGN0X2VuY29kZV9zdHJpbmco cGF0LCAmY29udikpKSAhPSBOVUxMKSB7CiAJCXJ2ID0gcmVnZXhlYyhyZSwgY3RfZW5jb2RlX3N0 cmluZyhzdHIsICZjb252KSk7Ci0JCWZyZWUoKHB0cl90KSByZSk7CisJCWVsX2ZyZWUocmUpOwog CX0gZWxzZSB7CiAJCXJ2ID0gMDsKIAl9Cgo9PT0gbW9kaWZpZWQgZmlsZSAnY21kLWxpbmUtdXRp bHMvbGliZWRpdC9zaWcuYycKLS0tIGEvY21kLWxpbmUtdXRpbHMvbGliZWRpdC9zaWcuYwkyMDEx LTA3LTI4IDA4OjA2OjQ1ICswMDAwCisrKyBiL2NtZC1saW5lLXV0aWxzL2xpYmVkaXQvc2lnLmMJ MjAxMS0wNy0yOSAxMDowMjowNyArMDAwMApAQCAtMSw0ICsxLDQgQEAKLS8qCSROZXRCU0Q6IHNp Zy5jLHYgMS4xNiAyMDExLzA3LzI4IDAwOjQ2OjA2IGNocmlzdG9zIEV4cCAkCSovCisvKgkkTmV0 QlNEOiBzaWcuYyx2IDEuMTcgMjAxMS8wNy8yOCAyMDo1MDo1NSBjaHJpc3RvcyBFeHAgJAkqLwog CiAvKi0KICAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MwpAQCAtNTcsMTUgKzU3LDE1IEBAIHBy aXZhdGUgY29uc3QgaW50IHNpZ2hkbFtdID0gewogCS0gMQogfTsKIAotcHJpdmF0ZSB2b2lkIGVs X3NpZ19oYW5kbGVyKGludCk7Citwcml2YXRlIHZvaWQgc2lnX2hhbmRsZXIoaW50KTsKIAotLyog ZWxfc2lnX2hhbmRsZXIoKToKKy8qIHNpZ19oYW5kbGVyKCk6CiAgKglUaGlzIGlzIHRoZSBoYW5k bGVyIGNhbGxlZCBmb3IgYWxsIHNpZ25hbHMKICAqCVhYWDogd2UgY2Fubm90IHBhc3MgYW55IGRh dGEgc28gd2UganVzdCBzdG9yZSB0aGUgb2xkIGVkaXRsaW5lCiAgKglzdGF0ZSBpbiBhIHByaXZh dGUgdmFyaWFibGUKICAqLwogcHJpdmF0ZSB2b2lkCi1lbF9zaWdfaGFuZGxlcihpbnQgc2lnbm8p CitzaWdfaGFuZGxlcihpbnQgc2lnbm8pCiB7CiAJaW50IGk7CiAJc2lnc2V0X3QgbnNldCwgb3Nl dDsKQEAgLTE0NSw3ICsxNDUsNyBAQCBwcm90ZWN0ZWQgdm9pZAogc2lnX2VuZChFZGl0TGluZSAq ZWwpCiB7CiAKLQllbF9mcmVlKChwdHJfdCkgZWwtPmVsX3NpZ25hbCk7CisJZWxfZnJlZShlbC0+ ZWxfc2lnbmFsKTsKIAllbC0+ZWxfc2lnbmFsID0gTlVMTDsKIH0KIApAQCAtMTYwLDcgKzE2MCw3 IEBAIHNpZ19zZXQoRWRpdExpbmUgKmVsKQogCXNpZ3NldF90IG9zZXQ7CiAJc3RydWN0IHNpZ2Fj dGlvbiBvc2EsIG5zYTsKIAotCW5zYS5zYV9oYW5kbGVyID0gZWxfc2lnX2hhbmRsZXI7CisJbnNh LnNhX2hhbmRsZXIgPSBzaWdfaGFuZGxlcjsKIAluc2Euc2FfZmxhZ3MgPSAwOwogCXNpZ2VtcHR5 c2V0KCZuc2Euc2FfbWFzayk7CiAKQEAgLTE2OSw3ICsxNjksNyBAQCBzaWdfc2V0KEVkaXRMaW5l ICplbCkKIAlmb3IgKGkgPSAwOyBzaWdoZGxbaV0gIT0gLTE7IGkrKykgewogCQkvKiBUaGlzIGNv dWxkIGhhcHBlbiBpZiB3ZSBnZXQgaW50ZXJydXB0ZWQgKi8KIAkJaWYgKHNpZ2FjdGlvbihzaWdo ZGxbaV0sICZuc2EsICZvc2EpICE9IC0xICYmCi0JCSAgICBvc2Euc2FfaGFuZGxlciAhPSBlbF9z aWdfaGFuZGxlcikKKwkJICAgIG9zYS5zYV9oYW5kbGVyICE9IHNpZ19oYW5kbGVyKQogCQkJZWwt PmVsX3NpZ25hbC0+c2lnX2FjdGlvbltpXSA9IG9zYTsKIAl9CiAJc2VsID0gZWw7Cgo9PT0gbW9k aWZpZWQgZmlsZSAnY21kLWxpbmUtdXRpbHMvbGliZWRpdC9zeXMuaCcKLS0tIGEvY21kLWxpbmUt dXRpbHMvbGliZWRpdC9zeXMuaAkyMDExLTA3LTI4IDA4OjA2OjQ1ICswMDAwCisrKyBiL2NtZC1s aW5lLXV0aWxzL2xpYmVkaXQvc3lzLmgJMjAxMS0wNy0yOSAxMDowMjowNyArMDAwMApAQCAtMSw0 ICsxLDQgQEAKLS8qCSROZXRCU0Q6IHN5cy5oLHYgMS4xNCAyMDExLzA3LzI4IDAwOjQ1OjMwIGNo cmlzdG9zIEV4cCAkCSovCisvKgkkTmV0QlNEOiBzeXMuaCx2IDEuMTUgMjAxMS8wNy8yOCAyMDo1 MDo1NSBjaHJpc3RvcyBFeHAgJAkqLwogCiAvKi0KICAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5 MwpAQCAtNzUsMTYgKzc1LDYgQEAKICMgZGVmaW5lIF9fYXJyYXljb3VudChhKSAoc2l6ZW9mKGEp IC8gc2l6ZW9mKCooYSkpKQogI2VuZGlmCiAKLSNpZm5kZWYgX1BUUl9UCi0jIGRlZmluZSBfUFRS X1QKLXR5cGVkZWYgdm9pZAkqcHRyX3Q7Ci0jZW5kaWYKLQotI2lmbmRlZiBfSU9DVExfVAotIyBk ZWZpbmUgX0lPQ1RMX1QKLXR5cGVkZWYgdm9pZAkqaW9jdGxfdDsKLSNlbmRpZgotCiAjaW5jbHVk ZSA8c3RkaW8uaD4KIAogI2lmbmRlZiBIQVZFX1NUUkxDQVQKQEAgLTE3NCw4ICsxNjQsOCBAQCBl eHRlcm4gdm9pZAlwZXJyb3IoY29uc3QgY2hhciAqKTsKICMgIGRlZmluZSBzdHJlcnJvcihlKQlz eXNfZXJybGlzdFtlXQogIyBlbmRpZgogIyBpZmRlZiBTQUJFUgotZXh0ZXJuIHB0cl90ICAgIG1l bWNweShwdHJfdCwgY29uc3QgcHRyX3QsIHNpemVfdCk7Ci1leHRlcm4gcHRyX3QgICAgbWVtc2V0 KHB0cl90LCBpbnQsIHNpemVfdCk7CitleHRlcm4gdm9pZCAqICAgbWVtY3B5KHZvaWQgKiwgY29u c3Qgdm9pZCAqLCBzaXplX3QpOworZXh0ZXJuIHZvaWQgKiAgIG1lbXNldCh2b2lkICosIGludCwg c2l6ZV90KTsKICMgZW5kaWYKIGV4dGVybiBjaGFyICAgICpmZ2V0bGluZShGSUxFICosIGludCAq KTsKICNlbmRpZgoKPT09IG1vZGlmaWVkIGZpbGUgJ2NtZC1saW5lLXV0aWxzL2xpYmVkaXQvdGVy bWluYWwuYycKLS0tIGEvY21kLWxpbmUtdXRpbHMvbGliZWRpdC90ZXJtaW5hbC5jCTIwMTEtMDct MjggMDg6MDY6NDUgKzAwMDAKKysrIGIvY21kLWxpbmUtdXRpbHMvbGliZWRpdC90ZXJtaW5hbC5j CTIwMTEtMDctMjkgMTA6MDI6MDcgKzAwMDAKQEAgLTEsNCArMSw0IEBACi0vKgkkTmV0QlNEOiB0 ZXJtaW5hbC5jLHYgMS4zIDIwMTEvMDcvMjggMDM6NTI6MTkgY2hyaXN0b3MgRXhwICQJKi8KKy8q CSROZXRCU0Q6IHRlcm1pbmFsLmMsdiAxLjQgMjAxMS8wNy8yOCAyMDo1MDo1NSBjaHJpc3RvcyBF eHAgJAkqLwogCiAvKi0KICAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MwpAQCAtMzQwLDI1ICsz NDAsMzEgQEAgcHJvdGVjdGVkIGludAogdGVybWluYWxfaW5pdChFZGl0TGluZSAqZWwpCiB7CiAK LQllbC0+ZWxfdGVybWluYWwudF9idWYgPSAoY2hhciAqKSBlbF9tYWxsb2MoVENfQlVGU0laRSk7 CisJZWwtPmVsX3Rlcm1pbmFsLnRfYnVmID0gZWxfbWFsbG9jKFRDX0JVRlNJWkUgKgorCSAgICBz aXplb2YoKmVsLT5lbF90ZXJtaW5hbC50X2J1ZikpOwogCWlmIChlbC0+ZWxfdGVybWluYWwudF9i dWYgPT0gTlVMTCkKIAkJcmV0dXJuICgtMSk7Ci0JZWwtPmVsX3Rlcm1pbmFsLnRfY2FwID0gKGNo YXIgKikgZWxfbWFsbG9jKFRDX0JVRlNJWkUpOworCWVsLT5lbF90ZXJtaW5hbC50X2NhcCA9IGVs X21hbGxvYyhUQ19CVUZTSVpFICoKKwkgICAgc2l6ZW9mKCplbC0+ZWxfdGVybWluYWwudF9jYXAp KTsKIAlpZiAoZWwtPmVsX3Rlcm1pbmFsLnRfY2FwID09IE5VTEwpCiAJCXJldHVybiAoLTEpOwot CWVsLT5lbF90ZXJtaW5hbC50X2ZrZXkgPSAoZnVuY2tleV90ICopIGVsX21hbGxvYyhBX0tfTktF WVMgKgotCSAgICBzaXplb2YoZnVuY2tleV90KSk7CisJZWwtPmVsX3Rlcm1pbmFsLnRfZmtleSA9 IGVsX21hbGxvYyhBX0tfTktFWVMgKgorCSAgICBzaXplb2YoKmVsLT5lbF90ZXJtaW5hbC50X2Zr ZXkpKTsKIAlpZiAoZWwtPmVsX3Rlcm1pbmFsLnRfZmtleSA9PSBOVUxMKQogCQlyZXR1cm4gKC0x KTsKIAllbC0+ZWxfdGVybWluYWwudF9sb2MgPSAwOwotCWVsLT5lbF90ZXJtaW5hbC50X3N0ciA9 IChjaGFyICoqKSBlbF9tYWxsb2MoVF9zdHIgKiBzaXplb2YoY2hhciAqKSk7CisJZWwtPmVsX3Rl cm1pbmFsLnRfc3RyID0gZWxfbWFsbG9jKFRfc3RyICoKKwkgICAgc2l6ZW9mKCplbC0+ZWxfdGVy bWluYWwudF9zdHIpKTsKIAlpZiAoZWwtPmVsX3Rlcm1pbmFsLnRfc3RyID09IE5VTEwpCiAJCXJl dHVybiAoLTEpOwotCSh2b2lkKSBtZW1zZXQoZWwtPmVsX3Rlcm1pbmFsLnRfc3RyLCAwLCBUX3N0 ciAqIHNpemVvZihjaGFyICopKTsKLQllbC0+ZWxfdGVybWluYWwudF92YWwgPSAoaW50ICopIGVs X21hbGxvYyhUX3ZhbCAqIHNpemVvZihpbnQpKTsKKwkodm9pZCkgbWVtc2V0KGVsLT5lbF90ZXJt aW5hbC50X3N0ciwgMCwgVF9zdHIgKgorCSAgICBzaXplb2YoKmVsLT5lbF90ZXJtaW5hbC50X3N0 cikpOworCWVsLT5lbF90ZXJtaW5hbC50X3ZhbCA9IGVsX21hbGxvYyhUX3ZhbCAqCisJICAgIHNp emVvZigqZWwtPmVsX3Rlcm1pbmFsLnRfdmFsKSk7CiAJaWYgKGVsLT5lbF90ZXJtaW5hbC50X3Zh bCA9PSBOVUxMKQogCQlyZXR1cm4gKC0xKTsKLQkodm9pZCkgbWVtc2V0KGVsLT5lbF90ZXJtaW5h bC50X3ZhbCwgMCwgVF92YWwgKiBzaXplb2YoaW50KSk7CisJKHZvaWQpIG1lbXNldChlbC0+ZWxf dGVybWluYWwudF92YWwsIDAsIFRfdmFsICoKKwkgICAgc2l6ZW9mKCplbC0+ZWxfdGVybWluYWwu dF92YWwpKTsKIAkodm9pZCkgdGVybWluYWxfc2V0KGVsLCBOVUxMKTsKIAl0ZXJtaW5hbF9pbml0 X2Fycm93KGVsKTsKIAlyZXR1cm4gKDApOwpAQCAtMzcxLDE2ICszNzcsMTYgQEAgcHJvdGVjdGVk IHZvaWQKIHRlcm1pbmFsX2VuZChFZGl0TGluZSAqZWwpCiB7CiAKLQllbF9mcmVlKChwdHJfdCkg ZWwtPmVsX3Rlcm1pbmFsLnRfYnVmKTsKKwllbF9mcmVlKGVsLT5lbF90ZXJtaW5hbC50X2J1Zik7 CiAJZWwtPmVsX3Rlcm1pbmFsLnRfYnVmID0gTlVMTDsKLQllbF9mcmVlKChwdHJfdCkgZWwtPmVs X3Rlcm1pbmFsLnRfY2FwKTsKKwllbF9mcmVlKGVsLT5lbF90ZXJtaW5hbC50X2NhcCk7CiAJZWwt PmVsX3Rlcm1pbmFsLnRfY2FwID0gTlVMTDsKIAllbC0+ZWxfdGVybWluYWwudF9sb2MgPSAwOwot CWVsX2ZyZWUoKHB0cl90KSBlbC0+ZWxfdGVybWluYWwudF9zdHIpOworCWVsX2ZyZWUoZWwtPmVs X3Rlcm1pbmFsLnRfc3RyKTsKIAllbC0+ZWxfdGVybWluYWwudF9zdHIgPSBOVUxMOwotCWVsX2Zy ZWUoKHB0cl90KSBlbC0+ZWxfdGVybWluYWwudF92YWwpOworCWVsX2ZyZWUoZWwtPmVsX3Rlcm1p bmFsLnRfdmFsKTsKIAllbC0+ZWxfdGVybWluYWwudF92YWwgPSBOVUxMOwotCWVsX2ZyZWUoKHB0 cl90KSBlbC0+ZWxfdGVybWluYWwudF9ma2V5KTsKKwllbF9mcmVlKGVsLT5lbF90ZXJtaW5hbC50 X2ZrZXkpOwogCWVsLT5lbF90ZXJtaW5hbC50X2ZrZXkgPSBOVUxMOwogCXRlcm1pbmFsX2ZyZWVf ZGlzcGxheShlbCk7CiB9CkBAIC00ODcsOCArNDkzLDggQEAgdGVybWluYWxfYWxsb2NfZGlzcGxh eShFZGl0TGluZSAqZWwpCiAJCWJbaV0gPSBlbF9tYWxsb2Moc2l6ZW9mKCoqYikgKiAoYy0+aCAr IDEpKTsKIAkJaWYgKGJbaV0gPT0gTlVMTCkgewogCQkJd2hpbGUgKC0taSA+PSAwKQotCQkJCWVs X2ZyZWUoKHB0cl90KSBiW2ldKTsKLQkJCWVsX2ZyZWUoKHB0cl90KSBiKTsKKwkJCQllbF9mcmVl KGJbaV0pOworCQkJZWxfZnJlZShiKTsKIAkJCXJldHVybiAoLTEpOwogCQl9CiAJfQpAQCAtNTAy LDggKzUwOCw4IEBAIHRlcm1pbmFsX2FsbG9jX2Rpc3BsYXkoRWRpdExpbmUgKmVsKQogCQliW2ld ID0gZWxfbWFsbG9jKHNpemVvZigqKmIpICogKGMtPmggKyAxKSk7CiAJCWlmIChiW2ldID09IE5V TEwpIHsKIAkJCXdoaWxlICgtLWkgPj0gMCkKLQkJCQllbF9mcmVlKChwdHJfdCkgYltpXSk7Ci0J CQllbF9mcmVlKChwdHJfdCkgYik7CisJCQkJZWxfZnJlZShiW2ldKTsKKwkJCWVsX2ZyZWUoYik7 CiAJCQlyZXR1cm4gKC0xKTsKIAkJfQogCX0KQEAgLTUyNiwxNSArNTMyLDE1IEBAIHRlcm1pbmFs X2ZyZWVfZGlzcGxheShFZGl0TGluZSAqZWwpCiAJZWwtPmVsX2Rpc3BsYXkgPSBOVUxMOwogCWlm IChiICE9IE5VTEwpIHsKIAkJZm9yIChidWZwID0gYjsgKmJ1ZnAgIT0gTlVMTDsgYnVmcCsrKQot CQkJZWxfZnJlZSgocHRyX3QpICpidWZwKTsKLQkJZWxfZnJlZSgocHRyX3QpIGIpOworCQkJZWxf ZnJlZSgqYnVmcCk7CisJCWVsX2ZyZWUoYik7CiAJfQogCWIgPSBlbC0+ZWxfdmRpc3BsYXk7CiAJ ZWwtPmVsX3ZkaXNwbGF5ID0gTlVMTDsKIAlpZiAoYiAhPSBOVUxMKSB7CiAJCWZvciAoYnVmcCA9 IGI7ICpidWZwICE9IE5VTEw7IGJ1ZnArKykKLQkJCWVsX2ZyZWUoKHB0cl90KSAqYnVmcCk7Ci0J CWVsX2ZyZWUoKHB0cl90KSBiKTsKKwkJCWVsX2ZyZWUoKmJ1ZnApOworCQllbF9mcmVlKGIpOwog CX0KIH0KIApAQCAtMTAzMCw3ICsxMDM2LDcgQEAgdGVybWluYWxfZ2V0X3NpemUoRWRpdExpbmUg KmVsLCBpbnQgKmxpbgogI2lmZGVmIFRJT0NHV0lOU1oKIAl7CiAJCXN0cnVjdCB3aW5zaXplIHdz OwotCQlpZiAoaW9jdGwoZWwtPmVsX2luZmQsIFRJT0NHV0lOU1osIChpb2N0bF90KSAmIHdzKSAh PSAtMSkgeworCQlpZiAoaW9jdGwoZWwtPmVsX2luZmQsIFRJT0NHV0lOU1osICZ3cykgIT0gLTEp IHsKIAkJCWlmICh3cy53c19jb2wpCiAJCQkJKmNvbHMgPSB3cy53c19jb2w7CiAJCQlpZiAod3Mu d3Nfcm93KQpAQCAtMTA0MSw3ICsxMDQ3LDcgQEAgdGVybWluYWxfZ2V0X3NpemUoRWRpdExpbmUg KmVsLCBpbnQgKmxpbgogI2lmZGVmIFRJT0NHU0laRQogCXsKIAkJc3RydWN0IHR0eXNpemUgdHM7 Ci0JCWlmIChpb2N0bChlbC0+ZWxfaW5mZCwgVElPQ0dTSVpFLCAoaW9jdGxfdCkgJiB0cykgIT0g LTEpIHsKKwkJaWYgKGlvY3RsKGVsLT5lbF9pbmZkLCBUSU9DR1NJWkUsICZ0cykgIT0gLTEpIHsK IAkJCWlmICh0cy50c19jb2xzKQogCQkJCSpjb2xzID0gdHMudHNfY29sczsKIAkJCWlmICh0cy50 c19saW5lcykKCj09PSBtb2RpZmllZCBmaWxlICdjbWQtbGluZS11dGlscy9saWJlZGl0L3Rva2Vu aXplci5jJwotLS0gYS9jbWQtbGluZS11dGlscy9saWJlZGl0L3Rva2VuaXplci5jCTIwMTEtMDUt MTMgMDg6MzI6NDcgKzAwMDAKKysrIGIvY21kLWxpbmUtdXRpbHMvbGliZWRpdC90b2tlbml6ZXIu YwkyMDExLTA3LTI5IDEwOjAyOjA3ICswMDAwCkBAIC0xLDQgKzEsNCBAQAotLyoJJE5ldEJTRDog dG9rZW5pemVyLmMsdiAxLjE4IDIwMTAvMDEvMDMgMTg6Mjc6MTAgY2hyaXN0b3MgRXhwICQJKi8K Ky8qCSROZXRCU0Q6IHRva2VuaXplci5jLHYgMS4xOSAyMDExLzA3LzI4IDIwOjUwOjU1IGNocmlz dG9zIEV4cCAkCSovCiAKIC8qLQogICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCkBAIC0xMDUs MjkgKzEwNSwyOSBAQCBGVU4odG9rLGZpbmlzaCkoVFlQRShUb2tlbml6ZXIpICp0b2spCiBwdWJs aWMgVFlQRShUb2tlbml6ZXIpICoKIEZVTih0b2ssaW5pdCkoY29uc3QgQ2hhciAqaWZzKQogewot CVRZUEUoVG9rZW5pemVyKSAqdG9rID0gdG9rX21hbGxvYyhzaXplb2YoVFlQRShUb2tlbml6ZXIp KSk7CisJVFlQRShUb2tlbml6ZXIpICp0b2sgPSB0b2tfbWFsbG9jKHNpemVvZigqdG9rKSk7CiAK IAlpZiAodG9rID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCXRvay0+aWZzID0gdG9rX3N0cmR1 cChpZnMgPyBpZnMgOiBJRlMpOwogCWlmICh0b2stPmlmcyA9PSBOVUxMKSB7Ci0JCXRva19mcmVl KChwdHJfdCl0b2spOworCQl0b2tfZnJlZSh0b2spOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJdG9r LT5hcmdjID0gMDsKIAl0b2stPmFtYXggPSBBSU5DUjsKIAl0b2stPmFyZ3YgPSB0b2tfbWFsbG9j KHNpemVvZigqdG9rLT5hcmd2KSAqIHRvay0+YW1heCk7CiAJaWYgKHRvay0+YXJndiA9PSBOVUxM KSB7Ci0JCXRva19mcmVlKChwdHJfdCl0b2stPmlmcyk7Ci0JCXRva19mcmVlKChwdHJfdCl0b2sp OworCQl0b2tfZnJlZSh0b2stPmlmcyk7CisJCXRva19mcmVlKHRvayk7CiAJCXJldHVybiBOVUxM OwogCX0KIAl0b2stPmFyZ3ZbMF0gPSBOVUxMOwogCXRvay0+d3NwYWNlID0gdG9rX21hbGxvYyhX SU5DUiAqIHNpemVvZigqdG9rLT53c3BhY2UpKTsKIAlpZiAodG9rLT53c3BhY2UgPT0gTlVMTCkg ewotCQl0b2tfZnJlZSgocHRyX3QpdG9rLT5hcmd2KTsKLQkJdG9rX2ZyZWUoKHB0cl90KXRvay0+ aWZzKTsKLQkJdG9rX2ZyZWUoKHB0cl90KXRvayk7CisJCXRva19mcmVlKHRvay0+YXJndik7CisJ CXRva19mcmVlKHRvay0+aWZzKTsKKwkJdG9rX2ZyZWUodG9rKTsKIAkJcmV0dXJuIE5VTEw7CiAJ fQogCXRvay0+d21heCA9IHRvay0+d3NwYWNlICsgV0lOQ1I7CkBAIC0xNjIsMTAgKzE2MiwxMCBA QCBwdWJsaWMgdm9pZAogRlVOKHRvayxlbmQpKFRZUEUoVG9rZW5pemVyKSAqdG9rKQogewogCi0J dG9rX2ZyZWUoKHB0cl90KSB0b2stPmlmcyk7Ci0JdG9rX2ZyZWUoKHB0cl90KSB0b2stPndzcGFj ZSk7Ci0JdG9rX2ZyZWUoKHB0cl90KSB0b2stPmFyZ3YpOwotCXRva19mcmVlKChwdHJfdCkgdG9r KTsKKwl0b2tfZnJlZSh0b2stPmlmcyk7CisJdG9rX2ZyZWUodG9rLT53c3BhY2UpOworCXRva19m cmVlKHRvay0+YXJndik7CisJdG9rX2ZyZWUodG9rKTsKIH0KIAogCgo9PT0gbW9kaWZpZWQgZmls ZSAnY21kLWxpbmUtdXRpbHMvbGliZWRpdC92aS5jJwotLS0gYS9jbWQtbGluZS11dGlscy9saWJl ZGl0L3ZpLmMJMjAxMS0wNy0yOCAwODowNjo0NSArMDAwMAorKysgYi9jbWQtbGluZS11dGlscy9s aWJlZGl0L3ZpLmMJMjAxMS0wNy0yOSAxMDowMjowNyArMDAwMApAQCAtMSw0ICsxLDQgQEAKLS8q CSROZXRCU0Q6IHZpLmMsdiAxLjM1IDIwMTEvMDcvMjggMDA6NDU6MTQgY2hyaXN0b3MgRXhwICQJ Ki8KKy8qCSROZXRCU0Q6IHZpLmMsdiAxLjM2IDIwMTEvMDcvMjggMjA6NTA6NTUgY2hyaXN0b3Mg RXhwICQJKi8KIAogLyotCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKQEAgLTEwMjAsNyAr MTAyMCw3IEBAIHZpX2hpc3RlZGl0KEVkaXRMaW5lICplbCwgSW50IGMgX19hdHRyaWIKIAkJcmV0 dXJuIENDX0VSUk9SOwogCWxlbiA9IChzaXplX3QpKGVsLT5lbF9saW5lLmxhc3RjaGFyIC0gZWwt PmVsX2xpbmUuYnVmZmVyKTsKICNkZWZpbmUgVE1QX0JVRlNJWiAoRUxfQlVGU0laICogTUJfTEVO X01BWCkKLQljcCA9IGVsX21hbGxvYyhUTVBfQlVGU0laKTsKKwljcCA9IGVsX21hbGxvYyhUTVBf QlVGU0laICogc2l6ZW9mKCpjcCkpOwogCWlmIChjcCA9PSBOVUxMKSB7CiAJCXVubGluayh0ZW1w ZmlsZSk7CiAJCWNsb3NlKGZkKTsKQEAgLTEwMjgsNyArMTAyOCw3IEBAIHZpX2hpc3RlZGl0KEVk aXRMaW5lICplbCwgSW50IGMgX19hdHRyaWIKIAl9CiAJbGluZSA9IGVsX21hbGxvYyhsZW4gKiBz aXplb2YoKmxpbmUpKTsKIAlpZiAobGluZSA9PSBOVUxMKSB7Ci0JCWVsX2ZyZWUoKHB0cl90KWNw KTsKKwkJZWxfZnJlZShjcCk7CiAJCXJldHVybiBDQ19FUlJPUjsKIAl9CiAJU3RybmNweShsaW5l LCBlbC0+ZWxfbGluZS5idWZmZXIsIGxlbik7CgpObyBidW5kbGUgKHJlYXNvbjogdXNlbGVzcyBm b3IgcHVzaCBlbWFpbHMpLg==