From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED autolearn=ham autolearn_force=no version=3.4.2 Received: from inbox.vuxu.org (localhost [IPv6:::1]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id 4f387cb6 for ; Sun, 27 Oct 2019 09:04:17 +0000 (UTC) Content-Type: multipart/mixed; boundary="===============2087912845858697181==" MIME-Version: 1.0 Subject: Re: [PR PATCH] [Updated] par: added unicode support To: ml@inbox.vuxu.org From: voidlinux-github@inbox.vuxu.org Reply-to: ml@inbox.vuxu.org In-Reply-To: References: Date: Sun, 27 Oct 2019 10:04:17 +0100 Message-ID: <20191027090417.TPw38eyYYuOpT8Vf0Sh5BI7l8s4IlnRNDTY3vvkKtdI@z> GitHub notification mails are now in MIME to allow UTF8. --===============2087912845858697181== MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhlcmUgaXMgYW4gdXBkYXRlZCBwdWxsIHJlcXVlc3QgYnkgVmFsVGltY2hlbmtvIGFnYWluc3Qg bWFzdGVyIG9uIHRoZSB2b2lkLXBhY2thZ2VzIHJlcG9zaXRvcnkKCmh0dHBzOi8vZ2l0aHViLmNv bS9WYWxUaW1jaGVua28vdm9pZC1wYWNrYWdlcyBwYXItdW5pY29kZQpodHRwczovL2dpdGh1Yi5j b20vdm9pZC1saW51eC92b2lkLXBhY2thZ2VzL3B1bGwvMTU4MTIKCnBhcjogYWRkZWQgdW5pY29k ZSBzdXBwb3J0ClN1YmouIEp1c3QgYWRkZWQgdW5pY29kZSBwYXRjaCBtYWRlIGJ5IErDg8KpcsOD wrRtZSBQb3VpbGxlciBhcyBvZjogaHR0cDovL3N5c21pYy5vcmcvZG90Y2xlYXIvaW5kZXgucGhw P3Bvc3QvMjAwNi8wNi8yMi81NS1hZGQtbXVsdGlieXRlLWNoYXJhY3RlcnMtc3VwcG9ydC1pbi1w YXIKCkEgcGF0Y2ggZmlsZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxpbnV4L3ZvaWQt cGFja2FnZXMvcHVsbC8xNTgxMi5wYXRjaCBpcyBhdHRhY2hlZA== --===============2087912845858697181== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-par-unicode-15812.patch" RnJvbSA1YmFmMThhYWEzMjNlYTFhMWZiNmM3ZjhkM2Q0OGFkZjhiMzU4Y2MwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWYWxUaW1jaGVua28gPFZhbFRpbWNoZW5rb0BnbWFpbC5jb20+ CkRhdGU6IFNhdCwgMjYgT2N0IDIwMTkgMTc6MzU6MjkgKzAzMDAKU3ViamVjdDogW1BBVENIXSBB ZGRlZCB1bmljb2RlIHBhdGNoIGZvciBwYXItMS41MgoKLS0tCiBzcmNwa2dzL3Bhci9wYXRjaGVz L3Bhci1pMThuLnBhdGNoIHwgMjg1OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZp bGUgY2hhbmdlZCwgMjg1OCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjcGtn cy9wYXIvcGF0Y2hlcy9wYXItaTE4bi5wYXRjaAoKZGlmZiAtLWdpdCBhL3NyY3BrZ3MvcGFyL3Bh dGNoZXMvcGFyLWkxOG4ucGF0Y2ggYi9zcmNwa2dzL3Bhci9wYXRjaGVzL3Bhci1pMThuLnBhdGNo Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNzU1NDI1ZjcwMgotLS0g L2Rldi9udWxsCisrKyBiL3NyY3BrZ3MvcGFyL3BhdGNoZXMvcGFyLWkxOG4ucGF0Y2gKQEAgLTAs MCArMSwyODU4IEBACitkaWZmIC1jIC4vYnVmZmVyLmMgLi4vUGFyMTUyLXVuaWNvZGUvYnVmZmVy LmMKKyoqKiAuL2J1ZmZlci5jCTIwMDEtMDMtMDkgMDI6NTE6MTEuMDAwMDAwMDAwICswMzAwCist LS0gLi4vUGFyMTUyLXVuaWNvZGUvYnVmZmVyLmMJMjAxOS0xMC0yNiAxNzoyMTowOC41NDIwNTA4 NTMgKzAzMDAKKyoqKioqKioqKioqKioqKgorKioqIDEsOSAqKioqCishIC8qKioqKioqKioqKioq KioqKioqKiovCishIC8qIGJ1ZmZlci5jICAgICAgICAgICovCishIC8qIGZvciBQYXIgMS41MiAg ICAgICovCishIC8qIENvcHlyaWdodCAyMDAxIGJ5ICovCishIC8qIEFkYW0gTS4gQ29zdGVsbG8g ICovCishIC8qKioqKioqKioqKioqKioqKioqKiovCisgIAorICAvKiBUaGlzIGlzIEFOU0kgQyBj b2RlIChDODkpLiAqLworICAKKy0tLSAxLDExIC0tLS0KKyEgLyoqKioqKioqKioqKioqKioqKioq KioqLworISAvKiBidWZmZXIuYyAgICAgICAgICAgICovCishIC8qIGZvciBQYXIgMS41Mi1pMThu LjQgKi8KKyEgLyogQ29weXJpZ2h0IDIwMDEgYnkgICAqLworISAvKiBBZGFtIE0uIENvc3RlbGxv ICAgICovCishIC8qIE1vZGlmaWVkIGJ5ICAgICAgICAgKi8KKyEgLyogSsOpcsO0bWUgUG91aWxs ZXIgICAgICovCishIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKyAgCisgIC8qIFRoaXMgaXMg QU5TSSBDIGNvZGUgKEM4OSkuICovCisgIAorKioqKioqKioqKioqKioqCisqKiogMTgsMjMgKioq KgorLS0tIDIwLDI2IC0tLS0KKyAgCisgICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgI2luY2x1ZGUg PHN0cmluZy5oPgorKyAjaW5jbHVkZSA8d2NoYXIuaD4KKyAgCisgICN1bmRlZiBOVUxMCisgICNk ZWZpbmUgTlVMTCAoKHZvaWQgKikgMCkKKyoqKioqKioqKioqKioqKgorKioqIDYwLDY2ICoqKioK KyAgICBibGsgPSBtYWxsb2Moc2l6ZW9mIChibG9jaykpOworICAgIGl0ZW1zID0gbWFsbG9jKG1h eGhlcmUgKiBpdGVtc2l6ZSk7CisgICAgaWYgKCFidWYgfHwgIWJsayB8fCAhaXRlbXMpIHsKKyEg ICAgIHN0cmNweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgZ290byBuYmVycm9yOworICAgIH0K KyAgCistLS0gNjMsNjkgLS0tLQorICAgIGJsayA9IG1hbGxvYyhzaXplb2YgKGJsb2NrKSk7Cisg ICAgaXRlbXMgPSBtYWxsb2MobWF4aGVyZSAqIGl0ZW1zaXplKTsKKyAgICBpZiAoIWJ1ZiB8fCAh YmxrIHx8ICFpdGVtcykgeworISAgICAgd2NzY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICBn b3RvIG5iZXJyb3I7CisgICAgfQorICAKKyoqKioqKioqKioqKioqKgorKioqIDEyNywxMzMgKioq KgorICAgICAgICBuZXcgPSBtYWxsb2Moc2l6ZW9mIChibG9jaykpOworICAgICAgICBpdGVtcyA9 IG1hbGxvYyhtYXhoZXJlICogaXRlbXNpemUpOworICAgICAgICBpZiAoIW5ldyB8fCAhaXRlbXMp IHsKKyEgICAgICAgICBzdHJjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAgICAgICBnb3RvIGFp ZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgYmxrLT5uZXh0ID0gbmV3OworLS0tIDEzMCwxMzYg LS0tLQorICAgICAgICBuZXcgPSBtYWxsb2Moc2l6ZW9mIChibG9jaykpOworICAgICAgICBpdGVt cyA9IG1hbGxvYyhtYXhoZXJlICogaXRlbXNpemUpOworICAgICAgICBpZiAoIW5ldyB8fCAhaXRl bXMpIHsKKyEgICAgICAgICB3Y3NjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAgICAgICBnb3Rv IGFpZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgYmxrLT5uZXh0ID0gbmV3OworKioqKioqKioq KioqKioqCisqKiogMTc0LDE4MCAqKioqCisgIAorICAgIHIgPSBtYWxsb2MobiAqIGl0ZW1zaXpl KTsKKyAgICBpZiAoIXIpIHsKKyEgICAgIHN0cmNweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAg cmV0dXJuIE5VTEw7CisgICAgfQorICAKKy0tLSAxNzcsMTgzIC0tLS0KKyAgCisgICAgciA9IG1h bGxvYyhuICogaXRlbXNpemUpOworICAgIGlmICghcikgeworISAgICAgd2NzY3B5KGVycm1zZyxv dXRvZm1lbSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIAorZGlmZiAtYyAuL2J1ZmZl ci5oIC4uL1BhcjE1Mi11bmljb2RlL2J1ZmZlci5oCisqKiogLi9idWZmZXIuaAkyMDAxLTAzLTA5 IDAyOjUxOjI1LjAwMDAwMDAwMCArMDMwMAorLS0tIC4uL1BhcjE1Mi11bmljb2RlL2J1ZmZlci5o CTIwMTktMTAtMjYgMTc6MjE6MDguNTQzMDUwODUzICswMzAwCisqKioqKioqKioqKioqKioKKyoq KiAxLDkgKioqKgorISAvKioqKioqKioqKioqKioqKioqKioqLworISAvKiBidWZmZXIuaCAgICAg ICAgICAqLworISAvKiBmb3IgUGFyIDEuNTIgICAgICAqLworISAvKiBDb3B5cmlnaHQgMjAwMSBi eSAqLworISAvKiBBZGFtIE0uIENvc3RlbGxvICAqLworISAvKioqKioqKioqKioqKioqKioqKioq LworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAgCistLS0gMSwxMSAt LS0tCishIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKyEgLyogYnVmZmVyLmggICAgICAgICAg ICAqLworISAvKiBmb3IgUGFyIDEuNTItaTE4bi40ICovCishIC8qIENvcHlyaWdodCAyMDAxIGJ5 ICAgKi8KKyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgICAqLworISAvKiBNb2RpZmllZCBieSAgICAg ICAgICovCishIC8qIErDqXLDtG1lIFBvdWlsbGVyICAgICAqLworISAvKioqKioqKioqKioqKioq KioqKioqKiovCisgIAorICAvKiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAqLworICAKK2Rp ZmYgLWMgLi9jaGFyc2V0LmMgLi4vUGFyMTUyLXVuaWNvZGUvY2hhcnNldC5jCisqKiogLi9jaGFy c2V0LmMJMjAwMS0wNC0wMyAwMTo1MTo0OC4wMDAwMDAwMDAgKzA0MDAKKy0tLSAuLi9QYXIxNTIt dW5pY29kZS9jaGFyc2V0LmMJMjAxOS0xMC0yNiAxNzoyMTowOC41NDQwNTA4NTMgKzAzMDAKKyoq KioqKioqKioqKioqKgorKioqIDEsOSAqKioqCishIC8qKioqKioqKioqKioqKioqKioqKiovCish IC8qIGNoYXJzZXQuYyAgICAgICAgICovCishIC8qIGZvciBQYXIgMS41MiAgICAgICovCishIC8q IENvcHlyaWdodCAyMDAxIGJ5ICovCishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICovCishIC8qKioq KioqKioqKioqKioqKioqKiovCisgIAorICAvKiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAq LworICAKKy0tLSAxLDExIC0tLS0KKyEgLyoqKioqKioqKioqKioqKioqKioqKioqLworISAvKiBj aGFyc2V0LmMgICAgICAgICAgICovCishIC8qIGZvciBQYXIgMS41Mi1pMThuLjQgKi8KKyEgLyog Q29weXJpZ2h0IDIwMDEgYnkgICAqLworISAvKiBBZGFtIE0uIENvc3RlbGxvICAgICovCishIC8q IE1vZGlmaWVkIGJ5ICAgICAgICAgKi8KKyEgLyogSsOpcsO0bWUgUG91aWxsZXIgICAgICovCish IC8qKioqKioqKioqKioqKioqKioqKioqKi8KKyAgCisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUg KEM4OSkuICovCisgIAorKioqKioqKioqKioqKioqCisqKiogMTgsMjUgKioqKgorICAgICAgICAg ICAgICAgICAgICAgICAgLyogcHJvdG90eXBlcy4gIEFsc28gaW5jbHVkZXMgImVycm1zZy5oIi4g Ki8KKyAgI2luY2x1ZGUgImJ1ZmZlci5oIiAgIC8qIEFsc28gaW5jbHVkZXMgPHN0ZGRlZi5oPi4g ICAgICAgICAgICAgICovCisgIAorLSAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAgI2luY2x1ZGUgPHN0 ZGlvLmg+CisgICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgI2luY2x1ZGUgPHN0cmluZy5oPgorICAK Ky0tLSAyMCwyOCAtLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b3R5cGVzLiAg QWxzbyBpbmNsdWRlcyAiZXJybXNnLmgiLiAqLworICAjaW5jbHVkZSAiYnVmZmVyLmgiICAgLyog QWxzbyBpbmNsdWRlcyA8c3RkZGVmLmg+LiAgICAgICAgICAgICAgKi8KKyAgCisgICNpbmNsdWRl IDxzdGRpby5oPgorKyAjaW5jbHVkZSA8d2NoYXIuaD4KKysgI2luY2x1ZGUgPHdjdHlwZS5oPgor ICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgCisqKioqKioq KioqKioqKioKKyoqKiAzOSw0NiAqKioqCisgIHR5cGVkZWYgdW5zaWduZWQgY2hhciBjc2ZsYWdf dDsKKyAgCisgIHN0cnVjdCBjaGFyc2V0IHsKKyEgICBjaGFyICppbmxpc3Q7ICAgIC8qIENoYXJh Y3RlcnMgaW4gaW5saXN0IGFyZSBpbiB0aGUgc2V0LiAgICAgICAgICAgICAgICAqLworISAgIGNo YXIgKm91dGxpc3Q7ICAgLyogQ2hhcmFjdGVycyBpbiBvdXRsaXN0IGFyZSBub3QgaW4gdGhlIHNl dC4gICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAvKiBpbmxpc3QgYW5kIG91dGxp c3QgbXVzdCBoYXZlIG5vIGNvbW1vbiBjaGFyYWN0ZXJzLiAgKi8KKyAgICAgICAgICAgICAgICAg ICAgIC8qIGlubGlzdCBhbmQgb3V0bGlzdCBtYXkgYmUgTlVMTCwgd2hpY2ggYWN0cyBsaWtlICIi LiAqLworICAgIGNzZmxhZ190IGZsYWdzOyAgLyogQ2hhcmFjdGVycyBpbiBuZWl0aGVyIGxpc3Qg YXJlIGluIHRoZSBzZXQgaWYgdGhleSAgICovCistLS0gNDIsNDkgLS0tLQorICB0eXBlZGVmIHVu c2lnbmVkIGNoYXIgY3NmbGFnX3Q7CisgIAorICBzdHJ1Y3QgY2hhcnNldCB7CishICAgd2NoYXJf dCAqaW5saXN0OyAgICAvKiBDaGFyYWN0ZXJzIGluIGlubGlzdCBhcmUgaW4gdGhlIHNldC4gICAg ICAgICAgICAgICAgKi8KKyEgICB3Y2hhcl90ICpvdXRsaXN0OyAgIC8qIENoYXJhY3RlcnMgaW4g b3V0bGlzdCBhcmUgbm90IGluIHRoZSBzZXQuICAgICAgICAgICAqLworICAgICAgICAgICAgICAg ICAgICAgLyogaW5saXN0IGFuZCBvdXRsaXN0IG11c3QgaGF2ZSBubyBjb21tb24gY2hhcmFjdGVy cy4gICovCisgICAgICAgICAgICAgICAgICAgICAvKiBpbmxpc3QgYW5kIG91dGxpc3QgbWF5IGJl IE5VTEwsIHdoaWNoIGFjdHMgbGlrZSAiIi4gKi8KKyAgICBjc2ZsYWdfdCBmbGFnczsgIC8qIENo YXJhY3RlcnMgaW4gbmVpdGhlciBsaXN0IGFyZSBpbiB0aGUgc2V0IGlmIHRoZXkgICAqLworKioq KioqKioqKioqKioqCisqKiogNTYsODAgKioqKgorICAgICAgICAgICAgICAgICAgICAgICAgQ1Nf TlVMICAgPSA4OyAgLyogSW5jbHVkZXMgdGhlIE5VTCBjaGFyYWN0ZXIuICAgICAgKi8KKyAgCisg IAorISBzdGF0aWMgaW50IGFwcGVhcnNpbihjaGFyIGMsIGNvbnN0IGNoYXIgKnN0cikKKyAgCisg IC8qIFJldHVybnMgMCBpZiBjIGlzICdcMCcgb3Igc3RyIGlzIE5VTEwgb3IgYyAgICAgKi8KKyAg LyogZG9lcyBub3QgYXBwZWFyIGluICpzdHIuICBPdGhlcndpc2UgcmV0dXJucyAxLiAqLworICB7 CishICAgcmV0dXJuIGMgJiYgc3RyICYmIHN0cmNocihzdHIsYyk7CisgIH0KKyAgCisgIAorISBz dGF0aWMgaW50IGhleGRpZ3RvaW50KGNoYXIgYykKKyAgCisgIC8qIFJldHVybnMgdGhlIHZhbHVl IHJlcHJlc2VudGVkIGJ5IHRoZSBoZXhhZGVjaW1hbCAqLworICAvKiBkaWdpdCBjLCBvciAtMSBp ZiBjIGlzIG5vdCBhIGhleGFkZWNpbWFsIGRpZ2l0LiAgKi8KKyAgeworISAgIGNvbnN0IGNoYXIg KnAsICogY29uc3QgaGV4ZGlnaXRzID0gIjAxMjM0NTY3ODlBQkNERUZhYmNkZWYiOworICAgIGlu dCBuOworICAKKyAgICBpZiAoIWMpIHJldHVybiAtMTsKKyEgICBwID0gc3RyY2hyKGhleGRpZ2l0 cywgKih1bnNpZ25lZCBjaGFyICopJmMpOworICAgIGlmICghcCkgcmV0dXJuIC0xOworICAgIG4g PSBwIC0gaGV4ZGlnaXRzOworICAgIGlmIChuID49IDE2KSBuIC09IDY7CistLS0gNTksODMgLS0t LQorICAgICAgICAgICAgICAgICAgICAgICAgQ1NfTlVMICAgPSA4OyAgLyogSW5jbHVkZXMgdGhl IE5VTCBjaGFyYWN0ZXIuICAgICAgKi8KKyAgCisgIAorISBzdGF0aWMgaW50IGFwcGVhcnNpbih3 Y2hhcl90IGMsIGNvbnN0IHdjaGFyX3QgKnN0cikKKyAgCisgIC8qIFJldHVybnMgMCBpZiBjIGlz ICdcMCcgb3Igc3RyIGlzIE5VTEwgb3IgYyAgICAgKi8KKyAgLyogZG9lcyBub3QgYXBwZWFyIGlu ICpzdHIuICBPdGhlcndpc2UgcmV0dXJucyAxLiAqLworICB7CishICAgcmV0dXJuIGMgJiYgc3Ry ICYmIHdjc2NocihzdHIsYyk7CisgIH0KKyAgCisgIAorISBzdGF0aWMgaW50IGhleGRpZ3RvaW50 KHdjaGFyX3QgYykKKyAgCisgIC8qIFJldHVybnMgdGhlIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRo ZSBoZXhhZGVjaW1hbCAqLworICAvKiBkaWdpdCBjLCBvciAtMSBpZiBjIGlzIG5vdCBhIGhleGFk ZWNpbWFsIGRpZ2l0LiAgKi8KKyAgeworISAgIGNvbnN0IHdjaGFyX3QgKnAsICogY29uc3QgaGV4 ZGlnaXRzID0gTCIwMTIzNDU2Nzg5QUJDREVGYWJjZGVmIjsKKyAgICBpbnQgbjsKKyAgCisgICAg aWYgKCFjKSByZXR1cm4gLTE7CishICAgcCA9IHdjc2NocihoZXhkaWdpdHMsIGMpOworICAgIGlm ICghcCkgcmV0dXJuIC0xOworICAgIG4gPSBwIC0gaGV4ZGlnaXRzOworICAgIGlmIChuID49IDE2 KSBuIC09IDY7CisqKioqKioqKioqKioqKioKKyoqKiA4NywxMjUgKioqKgorICB9CisgIAorICAK KyEgY2hhcnNldCAqcGFyc2VjaGFyc2V0KGNvbnN0IGNoYXIgKnN0ciwgZXJybXNnX3QgZXJybXNn KQorICB7CisgICAgY2hhcnNldCAqY3NldCA9IE5VTEw7CisgICAgYnVmZmVyICpjYnVmID0gTlVM TDsKKyEgICBjb25zdCBjaGFyICpwLCAqIGNvbnN0IHNpbmdsZWVzY2FwZXMgPSAiX3NicVF4IjsK KyAgICBpbnQgaGV4MSwgaGV4MjsKKyEgICBjaGFyIGNoOworISAKKyAgICBjc2V0ID0gbWFsbG9j KHNpemVvZiAoY2hhcnNldCkpOworICAgIGlmICghY3NldCkgeworISAgICAgc3RyY3B5KGVycm1z ZyxvdXRvZm1lbSk7CisgICAgICBnb3RvIHBjc2Vycm9yOworICAgIH0KKyAgICBjc2V0LT5pbmxp c3QgPSBjc2V0LT5vdXRsaXN0ID0gTlVMTDsKKyAgICBjc2V0LT5mbGFncyA9IDA7CisgIAorISAg IGNidWYgPSBuZXdidWZmZXIoc2l6ZW9mIChjaGFyKSwgZXJybXNnKTsKKyAgICBpZiAoKmVycm1z ZykgZ290byBwY3NlcnJvcjsKKyAgCisgICAgZm9yIChwID0gc3RyOyAgKnA7ICArK3ApCishICAg ICBpZiAoKnAgPT0gJ18nKSB7CisgICAgICAgICsrcDsKKyAgICAgICAgaWYgKGFwcGVhcnNpbigq cCwgc2luZ2xlZXNjYXBlcykpIHsKKyEgICAgICAgICBpZiAgICAgICgqcCA9PSAnXycpIGNoID0g J18nIDsKKyEgICAgICAgICBlbHNlIGlmICgqcCA9PSAncycpIGNoID0gJyAnIDsKKyEgICAgICAg ICBlbHNlIGlmICgqcCA9PSAnYicpIGNoID0gJ1xcJzsKKyEgICAgICAgICBlbHNlIGlmICgqcCA9 PSAncScpIGNoID0gJ1wnJzsKKyEgICAgICAgICBlbHNlIGlmICgqcCA9PSAnUScpIGNoID0gJ1wi JzsKKyAgICAgICAgICBlbHNlIC8qICAqcCA9PSAneCcgICovIHsKKyAgICAgICAgICAgIGhleDEg PSBoZXhkaWd0b2ludChwWzFdKTsKKyAgICAgICAgICAgIGhleDIgPSBoZXhkaWd0b2ludChwWzJd KTsKKyAgICAgICAgICAgIGlmIChoZXgxIDwgMCAgfHwgIGhleDIgPCAwKSBnb3RvIHBjc2JhZHN0 cjsKKyEgICAgICAgICAgICoodW5zaWduZWQgY2hhciAqKSZjaCA9IDE2ICogaGV4MSArIGhleDI7 CisgICAgICAgICAgICBwICs9IDI7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICghY2gpCist LS0gOTAsMTI5IC0tLS0KKyAgfQorICAKKyAgCishIGNoYXJzZXQgKnBhcnNlY2hhcnNldChjb25z dCB3Y2hhcl90ICpzdHIsIGVycm1zZ190IGVycm1zZykKKyAgeworICAgIGNoYXJzZXQgKmNzZXQg PSBOVUxMOworICAgIGJ1ZmZlciAqY2J1ZiA9IE5VTEw7CishICAgY29uc3Qgd2NoYXJfdCAqcCwg KiBjb25zdCBzaW5nbGVlc2NhcGVzID0gTCJfc2JxUXgiOworICAgIGludCBoZXgxLCBoZXgyOwor ISAgIHdjaGFyX3QgY2g7CishICAgICAgIAorICAgIGNzZXQgPSBtYWxsb2Moc2l6ZW9mIChjaGFy c2V0KSk7CisgICAgaWYgKCFjc2V0KSB7CishICAgICB3Y3NjcHkoZXJybXNnLG91dG9mbWVtKTsK KyAgICAgIGdvdG8gcGNzZXJyb3I7CisgICAgfQorICAgIGNzZXQtPmlubGlzdCA9IGNzZXQtPm91 dGxpc3QgPSBOVUxMOworICAgIGNzZXQtPmZsYWdzID0gMDsKKyAgCishICAgY2J1ZiA9IG5ld2J1 ZmZlcihzaXplb2YgKHdjaGFyX3QpLCBlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSBnb3RvIHBj c2Vycm9yOworICAKKyAgICBmb3IgKHAgPSBzdHI7ICAqcDsgICsrcCkKKyEgICAgIGlmICgqcCA9 PSBMJ18nKSB7CisgICAgICAgICsrcDsKKyAgICAgICAgaWYgKGFwcGVhcnNpbigqcCwgc2luZ2xl ZXNjYXBlcykpIHsKKyEgICAgICAgICBpZiAgICAgICgqcCA9PSBMJ18nKSBjaCA9IEwnXycgOwor ISAgICAgICAgIGVsc2UgaWYgKCpwID09IEwncycpIGNoID0gTCcgJyA7CishICAgICAgICAgZWxz ZSBpZiAoKnAgPT0gTCdiJykgY2ggPSBMJ1xcJzsKKyEgICAgICAgICBlbHNlIGlmICgqcCA9PSBM J3EnKSBjaCA9IEwnXCcnOworISAgICAgICAgIGVsc2UgaWYgKCpwID09IEwnUScpIGNoID0gTCdc Iic7CisgICAgICAgICAgZWxzZSAvKiAgKnAgPT0gJ3gnICAqLyB7CisrICAgICAgICAgICAvKiBG SVhNRSBfeCBtZXRhY2hhcmFjdGVyIHNob3VsZCBhbGxvdyB3aWRlIGNoYXJhY3RlcnMgaW5wdXQu Ki8KKyAgICAgICAgICAgIGhleDEgPSBoZXhkaWd0b2ludChwWzFdKTsKKyAgICAgICAgICAgIGhl eDIgPSBoZXhkaWd0b2ludChwWzJdKTsKKyAgICAgICAgICAgIGlmIChoZXgxIDwgMCAgfHwgIGhl eDIgPCAwKSBnb3RvIHBjc2JhZHN0cjsKKyEgICAgICAgICAgIGNoID0gMTYgKiBoZXgxICsgaGV4 MjsKKyAgICAgICAgICAgIHAgKz0gMjsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKCFjaCkK KyoqKioqKioqKioqKioqKgorKioqIDEzMCwxNDMgKioqKgorICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICBlbHNlIHsKKyEgICAgICAgICBpZiAgICAgICgqcCA9PSAnQScpIGNzZXQtPmZs YWdzIHw9IENTX1VDQVNFOworISAgICAgICAgIGVsc2UgaWYgKCpwID09ICdhJykgY3NldC0+Zmxh Z3MgfD0gQ1NfTENBU0U7CishICAgICAgICAgZWxzZSBpZiAoKnAgPT0gJzAnKSBjc2V0LT5mbGFn cyB8PSBDU19ESUdJVDsKKyAgICAgICAgICBlbHNlIGdvdG8gcGNzYmFkc3RyOworICAgICAgICB9 CisgICAgICB9CisgICAgICBlbHNlIHsKKyEgICAgICAgYWRkaXRlbShjYnVmLHAsZXJybXNnKTsK KyAgICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcGNzZXJyb3I7CisgICAgICB9CisgICAgY2ggPSAn XDAnOworLS0tIDEzNCwxNDcgLS0tLQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBl bHNlIHsKKyEgICAgICAgICBpZiAgICAgICgqcCA9PSBMJ0EnKSBjc2V0LT5mbGFncyB8PSBDU19V Q0FTRTsKKyEgICAgICAgICBlbHNlIGlmICgqcCA9PSBMJ2EnKSBjc2V0LT5mbGFncyB8PSBDU19M Q0FTRTsKKyEgICAgICAgICBlbHNlIGlmICgqcCA9PSBMJzAnKSBjc2V0LT5mbGFncyB8PSBDU19E SUdJVDsKKyAgICAgICAgICBlbHNlIGdvdG8gcGNzYmFkc3RyOworICAgICAgICB9CisgICAgICB9 CisgICAgICBlbHNlIHsKKyEgICAgICAgYWRkaXRlbShjYnVmLCBwLGVycm1zZyk7CisgICAgICAg IGlmICgqZXJybXNnKSBnb3RvIHBjc2Vycm9yOworICAgICAgfQorICAgIGNoID0gJ1wwJzsKKyoq KioqKioqKioqKioqKgorKioqIDE0OSwxNTkgKioqKgorICBwY3NjbGVhbnVwOgorICAKKyAgICBp ZiAoY2J1ZikgZnJlZWJ1ZmZlcihjYnVmKTsKKyAgICByZXR1cm4gY3NldDsKKyAgCisgIHBjc2Jh ZHN0cjoKKyAgCishICAgc3ByaW50ZihlcnJtc2csICJCYWQgY2hhcnNldCBzeW50YXg6ICUuKnNc biIsIGVycm1zZ19zaXplIC0gMjIsIHN0cik7CisgIAorICBwY3NlcnJvcjoKKyAgCistLS0gMTUz LDE2NCAtLS0tCisgIHBjc2NsZWFudXA6CisgIAorICAgIGlmIChjYnVmKSBmcmVlYnVmZmVyKGNi dWYpOworKyAgIC8vaWYgKHdzdHIpIGZyZWUod3N0cik7CisgICAgcmV0dXJuIGNzZXQ7CisgIAor ICBwY3NiYWRzdHI6CisgIAorISAgIHN3cHJpbnRmKGVycm1zZywgZXJybXNnX3NpemUsIEwiQmFk IGNoYXJzZXQgc3ludGF4OiAlLipzXG4iLCBlcnJtc2dfc2l6ZSAtIDIyLCBzdHIpOworICAKKyAg cGNzZXJyb3I6CisgIAorKioqKioqKioqKioqKioqCisqKiogMTcxLDE4NCAqKioqCisgIH0KKyAg CisgIAorISBpbnQgY3NtZW1iZXIoY2hhciBjLCBjb25zdCBjaGFyc2V0ICpjc2V0KQorICB7Cisg ICAgcmV0dXJuCisgICAgICBhcHBlYXJzaW4oYywgY3NldC0+aW5saXN0KSB8fAorICAgICAgKCAh YXBwZWFyc2luKGMsIGNzZXQtPm91dGxpc3QpICYmCishICAgICAgICggKGNzZXQtPmZsYWdzICYg Q1NfTENBU0UgJiYgaXNsb3dlcigqKHVuc2lnbmVkIGNoYXIgKikmYykpIHx8CishICAgICAgICAg KGNzZXQtPmZsYWdzICYgQ1NfVUNBU0UgJiYgaXN1cHBlcigqKHVuc2lnbmVkIGNoYXIgKikmYykp IHx8CishICAgICAgICAgKGNzZXQtPmZsYWdzICYgQ1NfRElHSVQgJiYgaXNkaWdpdCgqKHVuc2ln bmVkIGNoYXIgKikmYykpIHx8CisgICAgICAgICAgKGNzZXQtPmZsYWdzICYgQ1NfTlVMICAgJiYg IWMgICAgICAgICAgICAgICAgICAgICAgICAgICApICAgKSApOworICB9CisgIAorLS0tIDE3Niwx ODkgLS0tLQorICB9CisgIAorICAKKyEgaW50IGNzbWVtYmVyKHdjaGFyX3QgYywgY29uc3QgY2hh cnNldCAqY3NldCkKKyAgeworICAgIHJldHVybgorICAgICAgYXBwZWFyc2luKGMsIGNzZXQtPmlu bGlzdCkgfHwKKyAgICAgICggIWFwcGVhcnNpbihjLCBjc2V0LT5vdXRsaXN0KSAmJgorISAgICAg ICAgICggKGNzZXQtPmZsYWdzICYgQ1NfTENBU0UgJiYgaXN3bG93ZXIoKih3aW50X3QgKikmYykp IHx8CishICAgICAgICAgICAoY3NldC0+ZmxhZ3MgJiBDU19VQ0FTRSAmJiBpc3d1cHBlcigqKHdp bnRfdCAqKSZjKSkgfHwKKyEgICAgICAgICAgIChjc2V0LT5mbGFncyAmIENTX0RJR0lUICYmIGlz d2RpZ2l0KCood2ludF90ICopJmMpKSB8fAorICAgICAgICAgIChjc2V0LT5mbGFncyAmIENTX05V TCAgICYmICFjICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgICkgKTsKKyAgfQorICAKKyoq KioqKioqKioqKioqKgorKioqIDE5MSwyMDYgKioqKgorICB7CisgICAgY2hhcnNldCAqY3N1Owor ICAgIGJ1ZmZlciAqaW5idWYgPSBOVUxMLCAqb3V0YnVmID0gTlVMTDsKKyEgICBjaGFyICpsaXN0 c1s0XSwgKipsaXN0LCAqcCwgbnVsbGNoYXIgPSAnXDAnOworICAKKyAgICBjc3UgPSBtYWxsb2Mo c2l6ZW9mIChjaGFyc2V0KSk7CisgICAgaWYgKCFjc3UpIHsKKyEgICAgIHN0cmNweShlcnJtc2cs b3V0b2ZtZW0pOworICAgICAgZ290byBjc3VkZXJyb3I7CisgICAgfQorISAgIGluYnVmID0gbmV3 YnVmZmVyKHNpemVvZiAoY2hhciksIGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIGdvdG8gY3N1 ZGVycm9yOworISAgIG91dGJ1ZiA9IG5ld2J1ZmZlcihzaXplb2YgKGNoYXIpLCBlcnJtc2cpOwor ICAgIGlmICgqZXJybXNnKSBnb3RvIGNzdWRlcnJvcjsKKyAgICBjc3UtPmlubGlzdCA9IGNzdS0+ b3V0bGlzdCA9IE5VTEw7CisgICAgY3N1LT5mbGFncyA9ICB1ICA/ICBjc2V0MS0+ZmxhZ3MgfCAg Y3NldDItPmZsYWdzCistLS0gMTk2LDIxMSAtLS0tCisgIHsKKyAgICBjaGFyc2V0ICpjc3U7Cisg ICAgYnVmZmVyICppbmJ1ZiA9IE5VTEwsICpvdXRidWYgPSBOVUxMOworISAgIHdjaGFyX3QgKmxp c3RzWzRdLCAqKmxpc3QsICpwLCBudWxsY2hhciA9IEwnXDAnOworICAKKyAgICBjc3UgPSBtYWxs b2Moc2l6ZW9mIChjaGFyc2V0KSk7CisgICAgaWYgKCFjc3UpIHsKKyEgICAgIHdjc2NweShlcnJt c2csb3V0b2ZtZW0pOworICAgICAgZ290byBjc3VkZXJyb3I7CisgICAgfQorISAgIGluYnVmID0g bmV3YnVmZmVyKHNpemVvZiAod2NoYXJfdCksIGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIGdv dG8gY3N1ZGVycm9yOworISAgIG91dGJ1ZiA9IG5ld2J1ZmZlcihzaXplb2YgKHdjaGFyX3QpLCBl cnJtc2cpOworICAgIGlmICgqZXJybXNnKSBnb3RvIGNzdWRlcnJvcjsKKyAgICBjc3UtPmlubGlz dCA9IGNzdS0+b3V0bGlzdCA9IE5VTEw7CisgICAgY3N1LT5mbGFncyA9ICB1ICA/ICBjc2V0MS0+ ZmxhZ3MgfCAgY3NldDItPmZsYWdzCitkaWZmIC1jIC4vY2hhcnNldC5oIC4uL1BhcjE1Mi11bmlj b2RlL2NoYXJzZXQuaAorKioqIC4vY2hhcnNldC5oCTIwMDEtMDMtMDkgMDM6NTA6MzUuMDAwMDAw MDAwICswMzAwCistLS0gLi4vUGFyMTUyLXVuaWNvZGUvY2hhcnNldC5oCTIwMTktMTAtMjYgMTc6 MjE6MDguNTQ0MDUwODUzICswMzAwCisqKioqKioqKioqKioqKioKKyoqKiAxLDkgKioqKgorISAv KioqKioqKioqKioqKioqKioqKioqLworISAvKiBjaGFyc2V0LmggICAgICAgICAqLworISAvKiBm b3IgUGFyIDEuNTIgICAgICAqLworISAvKiBDb3B5cmlnaHQgMjAwMSBieSAqLworISAvKiBBZGFt IE0uIENvc3RlbGxvICAqLworISAvKioqKioqKioqKioqKioqKioqKioqLworICAKKyAgLyogVGhp cyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAgCistLS0gMSwxMSAtLS0tCishIC8qKioqKioq KioqKioqKioqKioqKioqKi8KKyEgLyogY2hhcnNldC5oICAgICAgICAgICAqLworISAvKiBmb3Ig UGFyIDEuNTItaTE4bi40ICovCishIC8qIENvcHlyaWdodCAyMDAxIGJ5ICAgKi8KKyEgLyogQWRh bSBNLiBDb3N0ZWxsbyAgICAqLworISAvKiBNb2RpZmllZCBieSAgICAgICAgICovCishIC8qIErD qXLDtG1lIFBvdWlsbGVyICAgICAqLworISAvKioqKioqKioqKioqKioqKioqKioqKiovCisgIAor ICAvKiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAqLworICAKKyoqKioqKioqKioqKioqKgor KioqIDExLDI0ICoqKioKKyAgLyogTm90ZTogVGhvc2UgZnVuY3Rpb25zIGRlY2xhcmVkIGhlcmUg d2hpY2ggZG8gbm90IHVzZSBlcnJtc2cgICAgKi8KKyAgLyogYWx3YXlzIHN1Y2NlZWQsIHByb3Zp ZGVkIHRoYXQgdGhleSBhcmUgcGFzc2VkIHZhbGlkIGFyZ3VtZW50cy4gKi8KKyAgCishIAorICAj aW5jbHVkZSAiZXJybXNnLmgiCisgIAorICAKKyAgdHlwZWRlZiBzdHJ1Y3QgY2hhcnNldCBjaGFy c2V0OworICAKKyAgCishIGNoYXJzZXQgKnBhcnNlY2hhcnNldChjb25zdCBjaGFyICpzdHIsIGVy cm1zZ190IGVycm1zZyk7CisgIAorICAgIC8qIHBhcnNlY2hhcnNldChzdHIsZXJybXNnKSByZXR1 cm5zIHRoZSBzZXQgb2YgY2hhcmFjdGVycyBkZWZpbmVkIGJ5ICovCisgICAgLyogc3RyIHVzaW5n IGNoYXJzZXQgc3ludGF4IChzZWUgcGFyLmRvYykuICBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZS4g Ki8KKy0tLSAxMywyNiAtLS0tCisgIC8qIE5vdGU6IFRob3NlIGZ1bmN0aW9ucyBkZWNsYXJlZCBo ZXJlIHdoaWNoIGRvIG5vdCB1c2UgZXJybXNnICAgICovCisgIC8qIGFsd2F5cyBzdWNjZWVkLCBw cm92aWRlZCB0aGF0IHRoZXkgYXJlIHBhc3NlZCB2YWxpZCBhcmd1bWVudHMuICovCisgIAorISAj aW5jbHVkZSA8d2NoYXIuaD4KKyAgI2luY2x1ZGUgImVycm1zZy5oIgorICAKKyAgCisgIHR5cGVk ZWYgc3RydWN0IGNoYXJzZXQgY2hhcnNldDsKKyAgCisgIAorISBjaGFyc2V0ICpwYXJzZWNoYXJz ZXQoY29uc3Qgd2NoYXJfdCAqc3RyLCBlcnJtc2dfdCBlcnJtc2cpOworICAKKyAgICAvKiBwYXJz ZWNoYXJzZXQoc3RyLGVycm1zZykgcmV0dXJucyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgZGVmaW5l ZCBieSAqLworICAgIC8qIHN0ciB1c2luZyBjaGFyc2V0IHN5bnRheCAoc2VlIHBhci5kb2MpLiAg UmV0dXJucyBOVUxMIG9uIGZhaWx1cmUuICovCisqKioqKioqKioqKioqKioKKyoqKiAzMCwzNiAq KioqCisgICAgLyogKmNzZXQuICBjc2V0IG1heSBub3QgYmUgdXNlZCBhZnRlciB0aGlzIGNhbGwu ICAgICAgKi8KKyAgCisgIAorISBpbnQgY3NtZW1iZXIoY2hhciBjLCBjb25zdCBjaGFyc2V0ICpj c2V0KTsKKyAgCisgICAgLyogY3NtZW1iZXIoYyxjc2V0KSByZXR1cm5zIDEgaWYgYyBpcyBhIG1l bWJlciBvZiAqY3NldCwgMCBvdGhlcndpc2UuICovCisgIAorLS0tIDMyLDM4IC0tLS0KKyAgICAv KiAqY3NldC4gIGNzZXQgbWF5IG5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgY2FsbC4gICAgICAqLwor ICAKKyAgCishIGludCBjc21lbWJlcih3Y2hhcl90IGMsIGNvbnN0IGNoYXJzZXQgKmNzZXQpOwor ICAKKyAgICAvKiBjc21lbWJlcihjLGNzZXQpIHJldHVybnMgMSBpZiBjIGlzIGEgbWVtYmVyIG9m ICpjc2V0LCAwIG90aGVyd2lzZS4gKi8KKyAgCitkaWZmIC1jIC4vZXJybXNnLmMgLi4vUGFyMTUy LXVuaWNvZGUvZXJybXNnLmMKKyoqKiAuL2Vycm1zZy5jCTIwMDEtMDMtMDkgMDM6NTA6NDYuMDAw MDAwMDAwICswMzAwCistLS0gLi4vUGFyMTUyLXVuaWNvZGUvZXJybXNnLmMJMjAxOS0xMC0yNiAx NzoyMTowOC41NDUwNTA4NTMgKzAzMDAKKyoqKioqKioqKioqKioqKgorKioqIDEsOSAqKioqCish IC8qKioqKioqKioqKioqKioqKioqKiovCishIC8qIGVycm1zZy5jICAgICAgICAgICovCishIC8q IGZvciBQYXIgMS41MiAgICAgICovCishIC8qIENvcHlyaWdodCAyMDAxIGJ5ICovCishIC8qIEFk YW0gTS4gQ29zdGVsbG8gICovCishIC8qKioqKioqKioqKioqKioqKioqKiovCisgIAorICAvKiBU aGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAqLworICAKKy0tLSAxLDExIC0tLS0KKyEgLyoqKioq KioqKioqKioqKioqKioqKioqLworISAvKiBlcnJtc2cuYyAgICAgICAgICAgICovCishIC8qIGZv ciBQYXIgMS41Mi1pMThuLjQgKi8KKyEgLyogQ29weXJpZ2h0IDIwMDEgYnkgICAqLworISAvKiBB ZGFtIE0uIENvc3RlbGxvICAgICovCishIC8qIE1vZGlmaWVkIGJ5ICAgICAgICAgKi8KKyEgLyog SsOpcsO0bWUgUG91aWxsZXIgICAgICovCishIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKyAg CisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisgIAorKioqKioqKioqKioqKioq CisqKiogMTEsMTggKioqKgorICAjaW5jbHVkZSAiZXJybXNnLmgiICAvKiBNYWtlcyBzdXJlIHdl J3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgZGVjbGFyYXRpb25zLiAqLworICAKKyAgCishIGNvbnN0 IGNoYXIgKiBjb25zdCBvdXRvZm1lbSA9CishICAgIk91dCBvZiBtZW1vcnkuXG4iOworICAKKyEg Y29uc3QgY2hhciAqIGNvbnN0IGltcG9zc2liaWxpdHkgPQorISAgICJJbXBvc3NpYmlsaXR5ICMl ZCBoYXMgb2NjdXJyZWQuICBQbGVhc2UgcmVwb3J0IGl0LlxuIjsKKy0tLSAxMywyMyAtLS0tCisg ICNpbmNsdWRlICJlcnJtc2cuaCIgIC8qIE1ha2VzIHN1cmUgd2UncmUgY29uc2lzdGVudCB3aXRo IHRoZSBkZWNsYXJhdGlvbnMuICovCisgIAorICAKKyEgY29uc3Qgd2NoYXJfdCAqIGNvbnN0IG91 dG9mbWVtID0KKyEgICBMIk91dCBvZiBtZW1vcnkuXG4iOworICAKKyEgY29uc3Qgd2NoYXJfdCAq IGNvbnN0IG1ic2Vycm9yID0KKyEgICBMIkVycm9yIGluIGlucHV0IG11bHRpYnl0ZSBzdHJpbmcu XG4iOworISAKKyEgY29uc3Qgd2NoYXJfdCAqIGNvbnN0IGltcG9zc2liaWxpdHkgPQorISAgIEwi SW1wb3NzaWJpbGl0eSAjJWQgaGFzIG9jY3VycmVkLiAgUGxlYXNlIHJlcG9ydCBpdC5cbiI7Citk aWZmIC1jIC4vZXJybXNnLmggLi4vUGFyMTUyLXVuaWNvZGUvZXJybXNnLmgKKyoqKiAuL2Vycm1z Zy5oCTIwMDEtMDMtMDkgMDM6NTA6NTYuMDAwMDAwMDAwICswMzAwCistLS0gLi4vUGFyMTUyLXVu aWNvZGUvZXJybXNnLmgJMjAxOS0xMC0yNiAxNzoyMTowOC41NDUwNTA4NTMgKzAzMDAKKyoqKioq KioqKioqKioqKgorKioqIDEsOSAqKioqCishIC8qKioqKioqKioqKioqKioqKioqKiovCishIC8q IGVycm1zZy5oICAgICAgICAgICovCishIC8qIGZvciBQYXIgMS41MiAgICAgICovCishIC8qIENv cHlyaWdodCAyMDAxIGJ5ICovCishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICovCishIC8qKioqKioq KioqKioqKioqKioqKiovCisgIAorICAvKiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAqLwor ICAKKy0tLSAxLDExIC0tLS0KKyEgLyoqKioqKioqKioqKioqKioqKioqKioqLworISAvKiBlcnJt c2cuaCAgICAgICAgICAgICovCishIC8qIGZvciBQYXIgMS41Mi1pMThuLjQgKi8KKyEgLyogQ29w eXJpZ2h0IDIwMDEgYnkgICAqLworISAvKiBBZGFtIE0uIENvc3RlbGxvICAgICovCishIC8qIE1v ZGlmaWVkIGJ5ICAgICAgICAgKi8KKyEgLyogSsOpcsO0bWUgUG91aWxsZXIgICAgICovCishIC8q KioqKioqKioqKioqKioqKioqKioqKi8KKyAgCisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4 OSkuICovCisgIAorKioqKioqKioqKioqKioqCisqKiogMTEsMTcgKioqKgorICAjaWZuZGVmIEVS Uk1TR19ICisgICNkZWZpbmUgRVJSTVNHX0gKKyAgCishIAorICAjZGVmaW5lIGVycm1zZ19zaXpl IDE2MworICAKKyAgLyogVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0 aGF0IHdpbGwgICovCistLS0gMTMsMTkgLS0tLQorICAjaWZuZGVmIEVSUk1TR19ICisgICNkZWZp bmUgRVJSTVNHX0gKKyAgCishICNpbmNsdWRlIDx3Y2hhci5oPgorICAjZGVmaW5lIGVycm1zZ19z aXplIDE2MworICAKKyAgLyogVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVy cyB0aGF0IHdpbGwgICovCisqKioqKioqKioqKioqKioKKyoqKiAyMCwyNiAqKioqCisgIC8qIHZl cnNpb25zIG9mIHRoaXMgaGVhZGVyIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAqLworICAK KyAgCishIHR5cGVkZWYgY2hhciBlcnJtc2dfdFtlcnJtc2dfc2l6ZV07CisgIAorICAvKiBBbnkg ZnVuY3Rpb24gd2hpY2ggdGFrZXMgdGhlIGFyZ3VtZW50IGVycm1zZ190IGVycm1zZyBtdXN0LCBi ZWZvcmUgKi8KKyAgLyogcmV0dXJuaW5nLCBlaXRoZXIgc2V0IGVycm1zZ1swXSB0byAnXDAnIChp bmRpY2F0aW5nIHN1Y2Nlc3MpLCBvciAgICovCistLS0gMjIsMjggLS0tLQorICAvKiB2ZXJzaW9u cyBvZiB0aGlzIGhlYWRlciBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgCisgIAor ISB0eXBlZGVmIHdjaGFyX3QgZXJybXNnX3RbZXJybXNnX3NpemVdOworICAKKyAgLyogQW55IGZ1 bmN0aW9uIHdoaWNoIHRha2VzIHRoZSBhcmd1bWVudCBlcnJtc2dfdCBlcnJtc2cgbXVzdCwgYmVm b3JlICovCisgIC8qIHJldHVybmluZywgZWl0aGVyIHNldCBlcnJtc2dbMF0gdG8gJ1wwJyAoaW5k aWNhdGluZyBzdWNjZXNzKSwgb3IgICAqLworKioqKioqKioqKioqKioqCisqKiogMjgsMzcgKioq KgorICAvKiBiZWluZyBjYXJlZnVsIG5vdCB0byBvdmVycnVuIHRoZSBzcGFjZS4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgKi8KKyAgCisgIAorISBleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0 IG91dG9mbWVtOworICAgIC8qICJPdXQgb2YgbWVtb3J5LlxuIiAqLworICAKKyEgZXh0ZXJuIGNv bnN0IGNoYXIgKiBjb25zdCBpbXBvc3NpYmlsaXR5OworICAgIC8qICJJbXBvc3NpYmlsaXR5ICMl ZCBoYXMgb2NjdXJyZWQuICBQbGVhc2UgcmVwb3J0IGl0LlxuIiAqLworICAKKyAgCistLS0gMzAs NDIgLS0tLQorICAvKiBiZWluZyBjYXJlZnVsIG5vdCB0byBvdmVycnVuIHRoZSBzcGFjZS4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgCisgIAorISBleHRlcm4gY29uc3Qgd2NoYXJf dCAqIGNvbnN0IG91dG9mbWVtOworICAgIC8qICJPdXQgb2YgbWVtb3J5LlxuIiAqLworICAKKyEg ZXh0ZXJuIGNvbnN0IHdjaGFyX3QgKiBjb25zdCBtYnNlcnJvcjsKKyEgICAvKiAiRXJyb3IgaW4g aW5wdXQgbXVsdGlieXRlIHN0cmluZy5cbiIgKi8KKyEgICAKKyEgZXh0ZXJuIGNvbnN0IHdjaGFy X3QgKiBjb25zdCBpbXBvc3NpYmlsaXR5OworICAgIC8qICJJbXBvc3NpYmlsaXR5ICMlZCBoYXMg b2NjdXJyZWQuICBQbGVhc2UgcmVwb3J0IGl0LlxuIiAqLworICAKKyAgCitkaWZmIC1jIC4vcGFy LjEgLi4vUGFyMTUyLXVuaWNvZGUvcGFyLjEKKyoqKiAuL3Bhci4xCTIwMDEtMDQtMzAgMDE6MTY6 MjIuMDAwMDAwMDAwICswNDAwCistLS0gLi4vUGFyMTUyLXVuaWNvZGUvcGFyLjEJMjAxOS0xMC0y NiAxNzoyMTowOC41NDYwNTA4NTMgKzAzMDAKKyoqKioqKioqKioqKioqKgorKioqIDEsNiAqKioq CisgIC5cIioqKioqKioqKioqKioqKioqKioqKgorICAuXCIqIHBhci4xICAgICAgICAgICAgICoK KyEgLlwiKiBmb3IgUGFyIDEuNTIgICAgICAqCisgIC5cIiogQ29weXJpZ2h0IDIwMDEgYnkgKgor ICAuXCIqIEFkYW0gTS4gQ29zdGVsbG8gICoKKyAgLlwiKioqKioqKioqKioqKioqKioqKioqCist LS0gMSw2IC0tLS0KKyAgLlwiKioqKioqKioqKioqKioqKioqKioqCisgIC5cIiogcGFyLjEgICAg ICAgICAgICAgKgorISAuXCIqIGZvciBQYXIgMS41MiBpMThuICoKKyAgLlwiKiBDb3B5cmlnaHQg MjAwMSBieSAqCisgIC5cIiogQWRhbSBNLiBDb3N0ZWxsbyAgKgorICAuXCIqKioqKioqKioqKioq KioqKioqKioKK2RpZmYgLWMgLi9wYXIuYyAuLi9QYXIxNTItdW5pY29kZS9wYXIuYworKioqIC4v cGFyLmMJMjAwMS0wNC0wMiAwODoyNTo1Ny4wMDAwMDAwMDAgKzA0MDAKKy0tLSAuLi9QYXIxNTIt dW5pY29kZS9wYXIuYwkyMDE5LTEwLTI2IDE3OjIxOjA4LjU0NzA1MDg1MyArMDMwMAorKioqKioq KioqKioqKioqCisqKiogMSw5ICoqKioKKyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyEgLyog cGFyLmMgICAgICAgICAgICAgKi8KKyEgLyogZm9yIFBhciAxLjUyICAgICAgKi8KKyEgLyogQ29w eXJpZ2h0IDIwMDEgYnkgKi8KKyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgKi8KKyEgLyoqKioqKioq KioqKioqKioqKioqKi8KKyAgCisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisg IAorLS0tIDEsMTEgLS0tLQorISAvKioqKioqKioqKioqKioqKioqKioqKiovCishIC8qIHBhci5j ICAgICAgICAgICAgICAgKi8KKyEgLyogZm9yIFBhciAxLjUyLWkxOG4uNCAqLworISAvKiBDb3B5 cmlnaHQgMjAwMSBieSAgICovCishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICAgKi8KKyEgLyogTW9k aWZpZWQgYnkgICAgICAgICAqLworISAvKiBKw6lyw7RtZSBQb3VpbGxlciAgICAgKi8KKyEgLyoq KioqKioqKioqKioqKioqKioqKioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5 KS4gKi8KKyAgCisqKioqKioqKioqKioqKioKKyoqKiAxMiwyMiAqKioqCisgICNpbmNsdWRlICJi dWZmZXIuaCIgICAgLyogQWxzbyBpbmNsdWRlcyA8c3RkZGVmLmg+LiAqLworICAjaW5jbHVkZSAi cmVmb3JtYXQuaCIKKyAgCishICNpbmNsdWRlIDxjdHlwZS5oPgorICAjaW5jbHVkZSA8bG9jYWxl Lmg+CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICNpbmNs dWRlIDxzdHJpbmcuaD4KKyAgCisgICN1bmRlZiBOVUxMCisgICNkZWZpbmUgTlVMTCAoKHZvaWQg KikgMCkKKy0tLSAxNCwyNyAtLS0tCisgICNpbmNsdWRlICJidWZmZXIuaCIgICAgLyogQWxzbyBp bmNsdWRlcyA8c3RkZGVmLmg+LiAqLworICAjaW5jbHVkZSAicmVmb3JtYXQuaCIKKyAgCishICNp bmNsdWRlIDxsYW5naW5mby5oPgorISAjaW5jbHVkZSA8d2NoYXIuaD4KKyEgI2luY2x1ZGUgPHdj dHlwZS5oPgorICAjaW5jbHVkZSA8bG9jYWxlLmg+CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAj aW5jbHVkZSA8c3RkbGliLmg+CisgICNpbmNsdWRlIDxzdHJpbmcuaD4KKysgI2luY2x1ZGUgPGVy cm5vLmg+CisgIAorICAjdW5kZWYgTlVMTAorICAjZGVmaW5lIE5VTEwgKCh2b2lkICopIDApCisq KioqKioqKioqKioqKioKKyoqKiAyNSw4MCAqKioqCisgICNkZWZpbmUgZnJlZShwdHIpCisgICNl bmRpZgorICAKKy0gCistIC8qPT09CistIAorLSBSZWdhcmRpbmcgY2hhciBhbmQgdW5zaWduZWQg Y2hhcjogIEFOU0kgQyBpcyBhIG5pZ2h0bWFyZSBpbiB0aGlzCistIHJlc3BlY3QuICBTb21lIGZ1 bmN0aW9ucywgbGlrZSBwdXRzKCksIHN0cmNocigpLCBhbmQgZ2V0ZW52KCksIHVzZSBjaGFyCist IG9yIGNoYXIqLCBzbyB0aGV5IHdvcmsgd2VsbCB3aXRoIGNoYXJhY3RlciBjb25zdGFudHMgbGlr ZSAnYScsIHdoaWNoCistIGFyZSBjaGFyLCBhbmQgd2l0aCBhcmd2LCB3aGljaCBpcyBjaGFyKiou ICBCdXQgc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMsCistIGxpa2UgZ2V0Y2hhcigpLCBwdXRjaGFy KCksIGFuZCBpc2RpZ2l0KCksIHVzZSB1bnNpZ25lZCBjaGFyIChjb252ZXJ0ZWQKKy0gdG8vZnJv bSBpbnQpLiAgVGhlcmVmb3JlIGlubm9jZW50LWxvb2tpbmcgY29kZSBjYW4gYmUgd3JvbmcsIGZv cgorLSBleGFtcGxlOgorLSAKKy0gICAgIGludCBjID0gZ2V0Y2hhcigpOworLSAgICAgaWYgKGMg PT0gJ2EnKSAuLi4KKy0gCistIFRoaXMgaXMgd3JvbmcgYmVjYXVzZSAnYScgaXMgY2hhciAoY29u dmVydGVkIHRvIGludCkgYW5kIGNvdWxkIGJlCistIG5lZ2F0aXZlLCBidXQgZ2V0Y2hhcigpIHJl dHVybnMgdW5zaWduZWQgY2hhciAoY29udmVydGVkIHRvIGludCksIHNvIGMKKy0gaXMgYWx3YXlz IG5vbm5lZ2F0aXZlIG9yIEVPRi4gIEZvciBzaW1pbGFyIHJlYXNvbnMsIGl0IGlzIHdyb25nIHRv IHBhc3MKKy0gYSBjaGFyIHRvIGEgZnVuY3Rpb24gdGhhdCBleHBlY3RzIGFuIHVuc2lnbmVkIGNo YXI6CistIAorLSAgICAgcHV0Y2hhcignXG4nKTsKKy0gICAgIGlmIChpc2RpZ2l0KGFyZ3ZbMV1b MF0pKSAuLi4KKy0gCistIEluZXZpdGFibHksIHdlIG5lZWQgdG8gY29udmVydCBiZXR3ZWVuIGNo YXIgYW5kIHVuc2lnbmVkIGNoYXIuICBUaGlzIGNhbgorLSBiZSBkb25lIGJ5IGludGVncmFsIGNv bnZlcnNpb24gKGNhc3Rpbmcgb3IgYXNzaWduaW5nIGEgY2hhciB0byB1bnNpZ25lZAorLSBjaGFy IG9yIHZpY2UgdmVyc2EpLCBvciBieSBhbGlhc2luZyAoY29udmVydGluZyBhIHBvaW50ZXIgdG8g Y2hhciB0bworLSBhIHBvaW50ZXIgdG8gdW5zaWduZWQgY2hhciAob3IgdmljZSB2ZXJzYSkgYW5k IHRoZW4gZGVyZWZlcmVuY2luZworLSBpdCkuICBBTlNJIEMgcmVxdWlyZXMgdGhhdCBpbnRlZ3Jh bCBjb252ZXJzaW9uIGFsdGVycyB0aGUgYml0cyB3aGVuIHRoZQorLSB1bnNpZ25lZCB2YWx1ZSBp cyBub3QgcmVwcmVzZW50YWJsZSBpbiB0aGUgc2lnbmVkIHR5cGUgYW5kIHRoZSBzaWduZWQKKy0g dHlwZSBkb2VzIG5vdCB1c2UgdHdvJ3MgY29tcGxlbWVudCByZXByZXNlbnRhdGlvbi4gIEFsaWFz aW5nLCBvbiB0aGUKKy0gb3RoZXIgaGFuZCwgcHJlc2VydmVzIHRoZSBiaXRzLiAgQWx0aG91Z2gg dGhlIEMgc3RhbmRhcmQgaXMgbm90IGF0IGFsbAorLSBjbGVhciBhYm91dCB3aGljaCBzb3J0IG9m IGNvbnZlcnNpb24gaXMgYXBwcm9wcmlhdGUgZm9yIG1ha2luZyB0aGUKKy0gc3RhbmRhcmQgbGli cmFyeSBmdW5jdGlvbnMgaW50ZXJvcGVyYXRlLCBJIHRoaW5rIHByZXNlcnZpbmcgdGhlIGJpdHMK Ky0gaXMgd2hhdCBpcyBuZWVkZWQuICBVbmRlciB0aGF0IGFzc3VtcHRpb24sIGhlcmUgYXJlIHNv bWUgZXhhbXBsZXMgb2YKKy0gY29ycmVjdCBjb2RlOgorLSAKKy0gICAgIGludCBjID0gZ2V0Y2hh cigpOworLSAgICAgY2hhciBjaDsKKy0gCistICAgICBpZiAoYyAhPSBFT0YpIHsKKy0gICAgICAg Kih1bnNpZ25lZCBjaGFyICopJmNoID0gYzsKKy0gICAgICAgaWYgKGNoID09ICdhJykgLi4uCist ICAgICAgIGlmIChpc2RpZ2l0KGMpKSAuLi4KKy0gICAgIH0KKy0gCistICAgICBjaGFyICpzID0g Li4uCistICAgICBpZiAoaXNkaWdpdCgqKHVuc2lnbmVkIGNoYXIgKilzKSkgLi4uCistIAorLSA9 PT0qLworLSAKKy0gCisgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdXNhZ2Vtc2cgPQorICAi XG4iCisgICJPcHRpb25zIGZvciBwYXI6XG4iCistLS0gMzAsMzUgLS0tLQorKioqKioqKioqKioq KioqCisqKiogMTI2LDEzMiAqKioqCisgICAgICAgICAgICAgICAgICAgIC8qIGxpbmUsIG9yIHRo ZSBmYWxsYmFjayBwcmVsZW4gYW5kIHN1ZmxlbiAgICAgICAqLworICAgICAgICAgICAgICAgICAg ICAvKiBvZiB0aGUgSVAgY29udGFpbmluZyBhIG5vbi1ib2RpbGVzcyBsaW5lLiAgICAgKi8KKyAg ICBsZmxhZ190IGZsYWdzOyAgLyogQm9vbGVhbiBwcm9wZXJ0aWVzIChzZWUgYmVsb3cpLiAgICAg ICAgICAgICAgICovCishICAgY2hhciByYzsgICAgICAgIC8qIFRoZSByZXBlYXRlZCBjaGFyYWN0 ZXIgb2YgYSBib2RpbGVzcyBsaW5lLiAgICAqLworICB9IGxpbmVwcm9wOworICAKKyAgLyogRmxh Z3MgZm9yIG1hcmtpbmcgYm9vbGVhbiBwcm9wZXJ0aWVzOiAqLworLS0tIDgxLDg3IC0tLS0KKyAg ICAgICAgICAgICAgICAgICAgLyogbGluZSwgb3IgdGhlIGZhbGxiYWNrIHByZWxlbiBhbmQgc3Vm bGVuICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIC8qIG9mIHRoZSBJUCBjb250YWluaW5n IGEgbm9uLWJvZGlsZXNzIGxpbmUuICAgICAqLworICAgIGxmbGFnX3QgZmxhZ3M7ICAvKiBCb29s ZWFuIHByb3BlcnRpZXMgKHNlZSBiZWxvdykuICAgICAgICAgICAgICAgKi8KKyEgICB3Y2hhcl90 IHJjOyAgICAgLyogVGhlIHJlcGVhdGVkIGNoYXJhY3RlciBvZiBhIGJvZGlsZXNzIGxpbmUuICAg ICovCisgIH0gbGluZXByb3A7CisgIAorICAvKiBGbGFncyBmb3IgbWFya2luZyBib29sZWFuIHBy b3BlcnRpZXM6ICovCisqKioqKioqKioqKioqKioKKyoqKiAxNDMsMTU2ICoqKioKKyAgI2RlZmlu ZSAgIGlzdmFjYW50KHByb3ApIChpc2JvZGlsZXNzKHByb3ApICYmIChwcm9wKS0+cmMgPT0gJyAn KQorICAKKyAgCishIHN0YXRpYyBpbnQgZGlndG9pbnQoY2hhciBjKQorICAKKyAgLyogUmV0dXJu cyB0aGUgdmFsdWUgcmVwcmVzZW50ZWQgYnkgdGhlIGRpZ2l0IGMsIG9yIC0xIGlmIGMgaXMgbm90 IGEgZGlnaXQuICovCisgIHsKKyEgICBjb25zdCBjaGFyICpwLCAqIGNvbnN0IGRpZ2l0cyA9ICIw MTIzNDU2Nzg5IjsKKyAgCisgICAgaWYgKCFjKSByZXR1cm4gLTE7CishICAgcCA9IHN0cmNocihk aWdpdHMsYyk7CisgICAgcmV0dXJuICBwICA/ICBwIC0gZGlnaXRzICA6ICAtMTsKKyAgCisgICAg LyogV2UgY2FuJ3Qgc2ltcGx5IHJldHVybiBjIC0gJzAnIGJlY2F1c2UgdGhpcyBpcyBBTlNJIEMg Y29kZSwgICovCistLS0gOTgsMTExIC0tLS0KKyAgI2RlZmluZSAgIGlzdmFjYW50KHByb3ApIChp c2JvZGlsZXNzKHByb3ApICYmIChwcm9wKS0+cmMgPT0gJyAnKQorICAKKyAgCishIHN0YXRpYyBp bnQgZGlndG9pbnQod2NoYXJfdCBjKQorICAKKyAgLyogUmV0dXJucyB0aGUgdmFsdWUgcmVwcmVz ZW50ZWQgYnkgdGhlIGRpZ2l0IGMsIG9yIC0xIGlmIGMgaXMgbm90IGEgZGlnaXQuICovCisgIHsK KyEgICBjb25zdCB3Y2hhcl90ICpwLCAqIGNvbnN0IGRpZ2l0cyA9IEwiMDEyMzQ1Njc4OSI7Cisg IAorICAgIGlmICghYykgcmV0dXJuIC0xOworISAgIHAgPSB3Y3NjaHIoZGlnaXRzLGMpOworICAg IHJldHVybiAgcCAgPyAgcCAtIGRpZ2l0cyAgOiAgLTE7CisgIAorICAgIC8qIFdlIGNhbid0IHNp bXBseSByZXR1cm4gYyAtICcwJyBiZWNhdXNlIHRoaXMgaXMgQU5TSSBDIGNvZGUsICAqLworKioq KioqKioqKioqKioqCisqKiogMTYxLDE2NyAqKioqCisgIH0KKyAgCisgIAorISBzdGF0aWMgaW50 IHN0cnRvdWRlYyhjb25zdCBjaGFyICpzLCBpbnQgKnBuKQorICAKKyAgLyogQ29udmVydHMgdGhl IGxvbmdlc3QgcHJlZml4IG9mIHN0cmluZyBzIGNvbnNpc3Rpbmcgb2YgZGVjaW1hbCAgICovCisg IC8qIGRpZ2l0cyB0byBhbiBpbnRlZ2VyLCB3aGljaCBpcyBzdG9yZWQgaW4gKnBuLiAgTm9ybWFs bHkgcmV0dXJucyAqLworLS0tIDExNiwxMjIgLS0tLQorICB9CisgIAorICAKKyEgc3RhdGljIGlu dCBzdHJ0b3VkZWMoY29uc3Qgd2NoYXJfdCAqcywgaW50ICpwbikKKyAgCisgIC8qIENvbnZlcnRz IHRoZSBsb25nZXN0IHByZWZpeCBvZiBzdHJpbmcgcyBjb25zaXN0aW5nIG9mIGRlY2ltYWwgICAq LworICAvKiBkaWdpdHMgdG8gYW4gaW50ZWdlciwgd2hpY2ggaXMgc3RvcmVkIGluICpwbi4gIE5v cm1hbGx5IHJldHVybnMgKi8KKyoqKioqKioqKioqKioqKgorKioqIDE4NywxOTMgKioqKgorICAK KyAgCisgIHN0YXRpYyB2b2lkIHBhcnNlYXJnKAorISAgIGNvbnN0IGNoYXIgKmFyZywgaW50ICpw aGVscCwgaW50ICpwdmVyc2lvbiwgY2hhcnNldCAqYm9keWNoYXJzLCBjaGFyc2V0CisgICAgKnBy b3RlY3RjaGFycywgY2hhcnNldCAqcXVvdGVjaGFycywgaW50ICpwaGFuZywgaW50ICpwcHJlZml4 LCBpbnQgKnByZXBlYXQsCisgICAgaW50ICpwc3VmZml4LCBpbnQgKnBUYWIsIGludCAqcHdpZHRo LCBpbnQgKnBib2R5LCBpbnQgKnBjYXAsIGludCAqcGRpdiwgaW50CisgICAgKnBFcnIsIGludCAq cGV4cGVsLCBpbnQgKnBmaXQsIGludCAqcGd1ZXNzLCBpbnQgKnBpbnZpcywgaW50ICpwanVzdCwg aW50CistLS0gMTQyLDE0OCAtLS0tCisgIAorICAKKyAgc3RhdGljIHZvaWQgcGFyc2VhcmcoCish ICAgY29uc3Qgd2NoYXJfdCAqYXJnLCBpbnQgKnBoZWxwLCBpbnQgKnB2ZXJzaW9uLCBjaGFyc2V0 ICpib2R5Y2hhcnMsIGNoYXJzZXQKKyAgICAqcHJvdGVjdGNoYXJzLCBjaGFyc2V0ICpxdW90ZWNo YXJzLCBpbnQgKnBoYW5nLCBpbnQgKnBwcmVmaXgsIGludCAqcHJlcGVhdCwKKyAgICBpbnQgKnBz dWZmaXgsIGludCAqcFRhYiwgaW50ICpwd2lkdGgsIGludCAqcGJvZHksIGludCAqcGNhcCwgaW50 ICpwZGl2LCBpbnQKKyAgICAqcEVyciwgaW50ICpwZXhwZWwsIGludCAqcGZpdCwgaW50ICpwZ3Vl c3MsIGludCAqcGludmlzLCBpbnQgKnBqdXN0LCBpbnQKKyoqKioqKioqKioqKioqKgorKioqIDE5 NywyNzQgKioqKgorICAvKiBieSB0aGUgb3RoZXIgcG9pbnRlcnMgYXMgYXBwcm9wcmlhdGUuICAq cGhlbHAgYW5kICpwdmVyc2lvbiBhcmUgYm9vbGVhbiAgKi8KKyAgLyogZmxhZ3MgaW5kaWNhdGlu ZyB3aGV0aGVyIHRoZSBoZWxwIGFuZCB2ZXJzaW9uIG9wdGlvbnMgd2VyZSBzdXBwbGllZC4gICAg ICovCisgIHsKKyEgICBjb25zdCBjaGFyICpzYXZlYXJnID0gYXJnOworICAgIGNoYXJzZXQgKmNo YXJzLCAqY2hhbmdlOworISAgIGNoYXIgb2M7CisgICAgaW50IG47CisgIAorICAgICplcnJtc2cg PSAnXDAnOworICAKKyEgICBpZiAoKmFyZyA9PSAnLScpICsrYXJnOworISAKKyEgICBpZiAoIXN0 cmNtcChhcmcsICJoZWxwIikpIHsKKyAgICAgICpwaGVscCA9IDE7CisgICAgICByZXR1cm47Cisg ICAgfQorICAKKyEgICBpZiAoIXN0cmNtcChhcmcsICJ2ZXJzaW9uIikpIHsKKyAgICAgICpwdmVy c2lvbiA9IDE7CisgICAgICByZXR1cm47CisgICAgfQorICAKKyEgICBpZiAoKmFyZyA9PSAnQicg fHwgKmFyZyA9PSAnUCcgfHwgKmFyZyA9PSAnUScgKSB7CishICAgICBjaGFycyA9ICAqYXJnID09 ICdCJyAgPyAgYm9keWNoYXJzICAgIDoKKyEgICAgICAgICAgICAgICphcmcgPT0gJ1AnICA/ICBw cm90ZWN0Y2hhcnMgOgorISAgICAgICAgICAgLyogKmFyZyA9PSAnUScgKi8gIHF1b3RlY2hhcnMg ICA7CisgICAgICArK2FyZzsKKyEgICAgIGlmICgqYXJnICE9ICc9JyAgJiYgICphcmcgIT0gJysn ICAmJiAgKmFyZyAhPSAnLScpIGdvdG8gYmFkYXJnOworICAgICAgY2hhbmdlID0gcGFyc2VjaGFy c2V0KGFyZyArIDEsIGVycm1zZyk7CisgICAgICBpZiAoY2hhbmdlKSB7CishICAgICAgIGlmICAg ICAgKCphcmcgPT0gJz0nKSAgIGNzc3dhcChjaGFycyxjaGFuZ2UpOworISAgICAgICBlbHNlIGlm ICgqYXJnID09ICcrJykgICBjc2FkZChjaGFycyxjaGFuZ2UsZXJybXNnKTsKKyEgICAgICAgZWxz ZSAgLyogKmFyZyA9PSAnLScgKi8gY3NyZW1vdmUoY2hhcnMsY2hhbmdlLGVycm1zZyk7CisgICAg ICAgIGZyZWVjaGFyc2V0KGNoYW5nZSk7CisgICAgICB9CisgICAgICByZXR1cm47CisgICAgfQor ICAKKyEgICBpZiAoaXNkaWdpdCgqKHVuc2lnbmVkIGNoYXIgKilhcmcpKSB7CisgICAgICBpZiAo IXN0cnRvdWRlYyhhcmcsICZuKSkgZ290byBiYWRhcmc7CisgICAgICBpZiAobiA8PSA4KSAqcHBy ZWZpeCA9IG47CisgICAgICBlbHNlICpwd2lkdGggPSBuOworICAgIH0KKyAgCisgICAgZm9yICg7 OykgeworISAgICAgd2hpbGUgKGlzZGlnaXQoKih1bnNpZ25lZCBjaGFyICopYXJnKSkgKythcmc7 CisgICAgICBvYyA9ICphcmc7CisgICAgICBpZiAoIW9jKSBicmVhazsKKyAgICAgIG4gPSAtMTsK KyAgICAgIGlmICghc3RydG91ZGVjKCsrYXJnLCAmbikpIGdvdG8gYmFkYXJnOworISAgICAgaWYg KCAgIG9jID09ICdoJyB8fCBvYyA9PSAncCcgfHwgb2MgPT0gJ3InCishICAgICAgICAgfHwgb2Mg PT0gJ3MnIHx8IG9jID09ICdUJyB8fCBvYyA9PSAndycpIHsKKyEgICAgICAgaWYgICAgICAob2Mg PT0gJ2gnKSAgICpwaGFuZyAgID0gIG4gPj0gMCA/IG4gOiAgMTsKKyEgICAgICAgZWxzZSBpZiAo b2MgPT0gJ3AnKSAgICpwcHJlZml4ID0gIG47CishICAgICAgIGVsc2UgaWYgKG9jID09ICdyJykg ICAqcHJlcGVhdCA9ICBuID49IDAgPyBuIDogIDM7CishICAgICAgIGVsc2UgaWYgKG9jID09ICdz JykgICAqcHN1ZmZpeCA9ICBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSAnVCcpICAgKnBUYWIg ICAgPSAgbiA+PSAwID8gbiA6ICA4OworISAgICAgICBlbHNlICAvKiBvYyA9PSAndycgKi8gKnB3 aWR0aCAgPSAgbiA+PSAwID8gbiA6IDc5OworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAg IGlmIChuIDwgMCkgbiA9IDE7CisgICAgICAgIGlmIChuID4gMSkgZ290byBiYWRhcmc7CishICAg ICAgIGlmICAgICAgKG9jID09ICdiJykgKnBib2R5ICAgPSBuOworISAgICAgICBlbHNlIGlmIChv YyA9PSAnYycpICpwY2FwICAgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gJ2QnKSAqcGRp diAgICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09ICdFJykgKnBFcnIgICAgPSBuOworISAg ICAgICBlbHNlIGlmIChvYyA9PSAnZScpICpwZXhwZWwgID0gbjsKKyEgICAgICAgZWxzZSBpZiAo b2MgPT0gJ2YnKSAqcGZpdCAgICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09ICdnJykgKnBn dWVzcyAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSAnaScpICpwaW52aXMgID0gbjsKKyEg ICAgICAgZWxzZSBpZiAob2MgPT0gJ2onKSAqcGp1c3QgICA9IG47CishICAgICAgIGVsc2UgaWYg KG9jID09ICdsJykgKnBsYXN0ICAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSAncScpICpw cXVvdGUgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gJ1InKSAqcFJlcG9ydCA9IG47Cish ICAgICAgIGVsc2UgaWYgKG9jID09ICd0JykgKnB0b3VjaCAgPSBuOworICAgICAgICBlbHNlIGdv dG8gYmFkYXJnOworICAgICAgfQorICAgIH0KKy0tLSAxNTIsMjI5IC0tLS0KKyAgLyogYnkgdGhl IG90aGVyIHBvaW50ZXJzIGFzIGFwcHJvcHJpYXRlLiAgKnBoZWxwIGFuZCAqcHZlcnNpb24gYXJl IGJvb2xlYW4gICovCisgIC8qIGZsYWdzIGluZGljYXRpbmcgd2hldGhlciB0aGUgaGVscCBhbmQg dmVyc2lvbiBvcHRpb25zIHdlcmUgc3VwcGxpZWQuICAgICAqLworICB7CishICAgY29uc3Qgd2No YXJfdCAqc2F2ZWFyZyA9IGFyZzsKKyAgICBjaGFyc2V0ICpjaGFycywgKmNoYW5nZTsKKyEgICB3 Y2hhcl90IG9jOworICAgIGludCBuOworICAKKyAgICAqZXJybXNnID0gJ1wwJzsKKysgICAKKysg ICBpZiAoKmFyZyA9PSBMJy0nKSArK2FyZzsKKyAgCishICAgaWYgKCF3Y3NjbXAoYXJnLCBMImhl bHAiKSkgeworICAgICAgKnBoZWxwID0gMTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIAorISAg IGlmICghd2NzY21wKGFyZywgTCJ2ZXJzaW9uIikpIHsKKyAgICAgICpwdmVyc2lvbiA9IDE7Cisg ICAgICByZXR1cm47CisgICAgfQorICAKKyEgICBpZiAoKmFyZyA9PSBMJ0InIHx8ICphcmcgPT0g TCdQJyB8fCAqYXJnID09IEwnUScgKSB7CishICAgICBjaGFycyA9ICAqYXJnID09IEwnQicgID8g IGJvZHljaGFycyAgICA6CishICAgICAgICAgICAgICAqYXJnID09IEwnUCcgID8gIHByb3RlY3Rj aGFycyA6CishICAgICAgICAgICAvKiAqYXJnID09IEwnUScgKi8gIHF1b3RlY2hhcnMgICA7Cisg ICAgICArK2FyZzsKKyEgICAgIGlmICgqYXJnICE9IEwnPScgICYmICAqYXJnICE9IEwnKycgICYm ICAqYXJnICE9IEwnLScpIGdvdG8gYmFkYXJnOworICAgICAgY2hhbmdlID0gcGFyc2VjaGFyc2V0 KGFyZyArIDEsIGVycm1zZyk7CisgICAgICBpZiAoY2hhbmdlKSB7CishICAgICAgIGlmICAgICAg KCphcmcgPT0gTCc9JykgICBjc3N3YXAoY2hhcnMsY2hhbmdlKTsKKyEgICAgICAgZWxzZSBpZiAo KmFyZyA9PSBMJysnKSAgIGNzYWRkKGNoYXJzLGNoYW5nZSxlcnJtc2cpOworISAgICAgICBlbHNl ICAvKiAqYXJnID09IEwnLScgKi8gY3NyZW1vdmUoY2hhcnMsY2hhbmdlLGVycm1zZyk7CisgICAg ICAgIGZyZWVjaGFyc2V0KGNoYW5nZSk7CisgICAgICB9CisgICAgICByZXR1cm47CisgICAgfQor ICAKKyEgICBpZiAoaXN3ZGlnaXQoKmFyZykpIHsKKyAgICAgIGlmICghc3RydG91ZGVjKGFyZywg Jm4pKSBnb3RvIGJhZGFyZzsKKyAgICAgIGlmIChuIDw9IDgpICpwcHJlZml4ID0gbjsKKyAgICAg IGVsc2UgKnB3aWR0aCA9IG47CisgICAgfQorICAKKyAgICBmb3IgKDs7KSB7CishICAgICB3aGls ZSAoaXN3ZGlnaXQoKmFyZykpICsrYXJnOworICAgICAgb2MgPSAqYXJnOworICAgICAgaWYgKCFv YykgYnJlYWs7CisgICAgICBuID0gLTE7CisgICAgICBpZiAoIXN0cnRvdWRlYygrK2FyZywgJm4p KSBnb3RvIGJhZGFyZzsKKyEgICAgIGlmICggICBvYyA9PSBMJ2gnIHx8IG9jID09IEwncCcgfHwg b2MgPT0gTCdyJworISAgICAgICAgIHx8IG9jID09IEwncycgfHwgb2MgPT0gTCdUJyB8fCBvYyA9 PSBMJ3cnKSB7CishICAgICAgIGlmICAgICAgKG9jID09IEwnaCcpICAgKnBoYW5nICAgPSAgbiA+ PSAwID8gbiA6ICAxOworISAgICAgICBlbHNlIGlmIChvYyA9PSBMJ3AnKSAgICpwcHJlZml4ID0g IG47CishICAgICAgIGVsc2UgaWYgKG9jID09IEwncicpICAgKnByZXBlYXQgPSAgbiA+PSAwID8g biA6ICAzOworISAgICAgICBlbHNlIGlmIChvYyA9PSBMJ3MnKSAgICpwc3VmZml4ID0gIG47Cish ICAgICAgIGVsc2UgaWYgKG9jID09IEwnVCcpICAgKnBUYWIgICAgPSAgbiA+PSAwID8gbiA6ICA4 OworISAgICAgICBlbHNlICAvKiBvYyA9PSBMJ3cnICovICpwd2lkdGggID0gIG4gPj0gMCA/IG4g OiA3OTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBpZiAobiA8IDApIG4gPSAxOwor ICAgICAgICBpZiAobiA+IDEpIGdvdG8gYmFkYXJnOworISAgICAgICBpZiAgICAgIChvYyA9PSBM J2InKSAqcGJvZHkgICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09IEwnYycpICpwY2FwICAg ID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gTCdkJykgKnBkaXYgICAgPSBuOworISAgICAg ICBlbHNlIGlmIChvYyA9PSBMJ0UnKSAqcEVyciAgICA9IG47CishICAgICAgIGVsc2UgaWYgKG9j ID09IEwnZScpICpwZXhwZWwgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gTCdmJykgKnBm aXQgICAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSBMJ2cnKSAqcGd1ZXNzICA9IG47Cish ICAgICAgIGVsc2UgaWYgKG9jID09IEwnaScpICpwaW52aXMgID0gbjsKKyEgICAgICAgZWxzZSBp ZiAob2MgPT0gTCdqJykgKnBqdXN0ICAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSBMJ2wn KSAqcGxhc3QgICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09IEwncScpICpwcXVvdGUgID0g bjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gTCdSJykgKnBSZXBvcnQgPSBuOworISAgICAgICBl bHNlIGlmIChvYyA9PSBMJ3QnKSAqcHRvdWNoICA9IG47CisgICAgICAgIGVsc2UgZ290byBiYWRh cmc7CisgICAgICB9CisgICAgfQorKioqKioqKioqKioqKioqCisqKiogMjc3LDI4OCAqKioqCisg IAorICBiYWRhcmc6CisgIAorISAgIHNwcmludGYoZXJybXNnLCAiQmFkIGFyZ3VtZW50OiAlLipz XG4iLCBlcnJtc2dfc2l6ZSAtIDE2LCBzYXZlYXJnKTsKKyAgICAqcGhlbHAgPSAxOworICB9Cisg IAorICAKKyEgc3RhdGljIGNoYXIgKipyZWFkbGluZXMoCisgICAgbGluZXByb3AgKipwcHJvcHMs IGNvbnN0IGNoYXJzZXQgKnByb3RlY3RjaGFycywKKyAgICBjb25zdCBjaGFyc2V0ICpxdW90ZWNo YXJzLCBpbnQgVGFiLCBpbnQgaW52aXMsIGludCBxdW90ZSwgZXJybXNnX3QgZXJybXNnCisgICkK Ky0tLSAyMzIsMjQzIC0tLS0KKyAgCisgIGJhZGFyZzoKKyAgCishICAgc3dwcmludGYoZXJybXNn LCBlcnJtc2dfc2l6ZSwgTCJCYWQgYXJndW1lbnQ6ICUuKnNcbiIsIGVycm1zZ19zaXplIC0gMTYs IHNhdmVhcmcpOworICAgICpwaGVscCA9IDE7CisgIH0KKyAgCisgIAorISBzdGF0aWMgd2NoYXJf dCAqKnJlYWRsaW5lcygKKyAgICBsaW5lcHJvcCAqKnBwcm9wcywgY29uc3QgY2hhcnNldCAqcHJv dGVjdGNoYXJzLAorICAgIGNvbnN0IGNoYXJzZXQgKnF1b3RlY2hhcnMsIGludCBUYWIsIGludCBp bnZpcywgaW50IHF1b3RlLCBlcnJtc2dfdCBlcnJtc2cKKyAgKQorKioqKioqKioqKioqKioqCisq KiogMzAyLDMxMCAqKioqCisgIC8qIGl0J3Mgbm90IE5VTEwuICBPbiBmYWlsdXJlLCByZXR1cm5z IE5VTEwgYW5kIHNldHMgKnBwcm9wcyB0byBOVUxMLiAgICovCisgIHsKKyAgICBidWZmZXIgKmNi dWYgPSBOVUxMLCAqbGJ1ZiA9IE5VTEwsICpscGJ1ZiA9IE5VTEw7CishICAgaW50IGMsIGVtcHR5 LCBibGFuaywgZmlyc3RsaW5lLCBxc29ubHksIG9sZHFzb25seSA9IDAsIHZsbmxlbiwgaTsKKyEg ICBjaGFyIGNoLCAqbG4gPSBOVUxMLCBudWxsY2hhciA9ICdcMCcsICpudWxsbGluZSA9IE5VTEws ICpxcGVuZCwKKyEgICAgICAgICpvbGRsbiA9IE5VTEwsICpvbGRxcGVuZCA9IE5VTEwsICpwLCAq b3AsICp2bG4gPSBOVUxMLCAqKmxpbmVzID0gTlVMTDsKKyAgICBsaW5lcHJvcCB2cHJvcCA9IHsg MCwgMCwgMCwgJ1wwJyB9LCBpcHJvcCA9IHsgMCwgMCwgMCwgJ1wwJyB9OworICAKKyAgICAvKiBv bGRxc29ubHksIG9sZGxuLCBhbmQgb2xkcXVlbmQgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gYmUgaW5p dGlhbGl6ZWQuICAgKi8KKy0tLSAyNTcsMjY2IC0tLS0KKyAgLyogaXQncyBub3QgTlVMTC4gIE9u IGZhaWx1cmUsIHJldHVybnMgTlVMTCBhbmQgc2V0cyAqcHByb3BzIHRvIE5VTEwuICAgKi8KKyAg eworICAgIGJ1ZmZlciAqY2J1ZiA9IE5VTEwsICpsYnVmID0gTlVMTCwgKmxwYnVmID0gTlVMTDsK KyEgICB3aW50X3QgYzsKKyEgICBpbnQgZW1wdHksIGJsYW5rLCBmaXJzdGxpbmUsIHFzb25seSwg b2xkcXNvbmx5ID0gMCwgdmxubGVuLCBpOworISAgIHdjaGFyX3QgKmxuID0gTlVMTCwgbnVsbGNo YXIgPSBMJ1wwJywgKm51bGxsaW5lID0gTlVMTCwgKnFwZW5kLCAKKyEgICAgICpvbGRsbiA9IE5V TEwsICpvbGRxcGVuZCA9IE5VTEwsICpwLCAqb3AsICp2bG4gPSBOVUxMLCAqKmxpbmVzID0gTlVM TDsKKyAgICBsaW5lcHJvcCB2cHJvcCA9IHsgMCwgMCwgMCwgJ1wwJyB9LCBpcHJvcCA9IHsgMCwg MCwgMCwgJ1wwJyB9OworICAKKyAgICAvKiBvbGRxc29ubHksIG9sZGxuLCBhbmQgb2xkcXVlbmQg ZG9uJ3QgcmVhbGx5IG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQuICAgKi8KKyoqKioqKioqKioqKioq KgorKioqIDMxNiwzMzUgKioqKgorICAKKyAgICAqcHByb3BzID0gTlVMTDsKKyAgCishICAgY2J1 ZiA9IG5ld2J1ZmZlcihzaXplb2YgKGNoYXIpLCBlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSBn b3RvIHJsY2xlYW51cDsKKyEgICBsYnVmID0gbmV3YnVmZmVyKHNpemVvZiAoY2hhciAqKSwgZXJy bXNnKTsKKyAgICBpZiAoKmVycm1zZykgZ290byBybGNsZWFudXA7CisgICAgbHBidWYgPSBuZXdi dWZmZXIoc2l6ZW9mIChsaW5lcHJvcCksIGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIGdvdG8g cmxjbGVhbnVwOworICAKKyAgICBmb3IgKGVtcHR5ID0gYmxhbmsgPSBmaXJzdGxpbmUgPSAxOyAg OyAgKSB7CishICAgICBjID0gZ2V0Y2hhcigpOworISAgICAgaWYgKGMgPT0gRU9GKSBicmVhazsK KyEgICAgICoodW5zaWduZWQgY2hhciAqKSZjaCA9IGM7CishICAgICBpZiAoY2ggPT0gJ1xuJykg eworICAgICAgICBpZiAoYmxhbmspIHsKKyEgICAgICAgICB1bmdldGMoYyxzdGRpbik7CisgICAg ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYWRkaXRlbShjYnVmLCAmbnVsbGNoYXIs IGVycm1zZyk7CistLS0gMjcyLDI5NiAtLS0tCisgIAorICAgICpwcHJvcHMgPSBOVUxMOworICAK KyEgICBjYnVmID0gbmV3YnVmZmVyKHNpemVvZiAod2NoYXJfdCksIGVycm1zZyk7CisgICAgaWYg KCplcnJtc2cpIGdvdG8gcmxjbGVhbnVwOworISAgIGxidWYgPSBuZXdidWZmZXIoc2l6ZW9mICh3 Y2hhcl90ICopLCBlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSBnb3RvIHJsY2xlYW51cDsKKyAg ICBscGJ1ZiA9IG5ld2J1ZmZlcihzaXplb2YgKGxpbmVwcm9wKSwgZXJybXNnKTsKKyAgICBpZiAo KmVycm1zZykgZ290byBybGNsZWFudXA7CisgIAorICAgIGZvciAoZW1wdHkgPSBibGFuayA9IGZp cnN0bGluZSA9IDE7ICA7ICApIHsKKyEgICAgIGMgPSBnZXR3Y2hhcigpOworISAgICAgaWYgKGMg PT0gV0VPRikgeworISAgICAgICBpZiAoZXJybm8gPT0gRUlMU0VRKSB7CishICAgICAgIAl3Y3Nj cHkoZXJybXNnLCBMIkludmFsaWQgbXVsdGlieXRlIHNlcXVlbmNlIGluIGlucHV0XG4iKTsKKyEg CWdvdG8gcmxjbGVhbnVwOworISAgICAgICB9CishICAgICAgIGJyZWFrOworISAgICAgfQorISAg ICAgaWYgKGMgPT0gTCdcbicpIHsKKyAgICAgICAgaWYgKGJsYW5rKSB7CishICAgICAgICAgdW5n ZXR3YyhjLHN0ZGluKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBhZGRp dGVtKGNidWYsICZudWxsY2hhciwgZXJybXNnKTsKKyoqKioqKioqKioqKioqKgorKioqIDMzOCwz NDYgKioqKgorICAgICAgICBpZiAoKmVycm1zZykgZ290byBybGNsZWFudXA7CisgICAgICAgIGlm IChxdW90ZSkgeworICAgICAgICAgIGZvciAocXBlbmQgPSBsbjsgICpxcGVuZCAmJiBjc21lbWJl cigqcXBlbmQsIHF1b3RlY2hhcnMpOyAgKytxcGVuZCk7CishICAgICAgICAgZm9yIChwID0gcXBl bmQ7ICAqcCA9PSAnICcgfHwgY3NtZW1iZXIoKnAsIHF1b3RlY2hhcnMpOyAgKytwKTsKKyEgICAg ICAgICBxc29ubHkgPSAgKnAgPT0gJ1wwJzsKKyEgICAgICAgICB3aGlsZSAocXBlbmQgPiBsbiAm JiBxcGVuZFstMV0gPT0gJyAnKSAtLXFwZW5kOworICAgICAgICAgIGlmICghZmlyc3RsaW5lKSB7 CisgICAgICAgICAgICBmb3IgKHAgPSBsbiwgb3AgPSBvbGRsbjsKKyAgICAgICAgICAgICAgICAg cCA8IHFwZW5kICYmIG9wIDwgb2xkcXBlbmQgJiYgKnAgPT0gKm9wOworLS0tIDI5OSwzMDcgLS0t LQorICAgICAgICBpZiAoKmVycm1zZykgZ290byBybGNsZWFudXA7CisgICAgICAgIGlmIChxdW90 ZSkgeworICAgICAgICAgIGZvciAocXBlbmQgPSBsbjsgICpxcGVuZCAmJiBjc21lbWJlcigqcXBl bmQsIHF1b3RlY2hhcnMpOyAgKytxcGVuZCk7CishICAgICAgICAgZm9yIChwID0gcXBlbmQ7ICAq cCA9PSBMJyAnIHx8IGNzbWVtYmVyKCpwLCBxdW90ZWNoYXJzKTsgICsrcCk7CishICAgICAgICAg cXNvbmx5ID0gICgqcCA9PSBMJ1wwJyk7CishICAgICAgICAgd2hpbGUgKHFwZW5kID4gbG4gJiYg cXBlbmRbLTFdID09IEwnICcpIC0tcXBlbmQ7CisgICAgICAgICAgaWYgKCFmaXJzdGxpbmUpIHsK KyAgICAgICAgICAgIGZvciAocCA9IGxuLCBvcCA9IG9sZGxuOworICAgICAgICAgICAgICAgICBw IDwgcXBlbmQgJiYgb3AgPCBvbGRxcGVuZCAmJiAqcCA9PSAqb3A7CisqKioqKioqKioqKioqKioK KyoqKiAzNDgsMzcwICoqKioKKyAgICAgICAgICAgIGlmICghKHAgPT0gcXBlbmQgJiYgb3AgPT0g b2xkcXBlbmQpKSB7CisgICAgICAgICAgICAgIGlmICghaW52aXMgJiYgKG9sZHFzb25seSB8fCBx c29ubHkpKSB7CisgICAgICAgICAgICAgICAgaWYgKG9sZHFzb25seSkgeworISAgICAgICAgICAg ICAgICAgKm9wID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgIG9sZHFwZW5kID0gb3A7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChxc29ubHkpIHsKKyEgICAgICAgICAg ICAgICAgICpwID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgIHFwZW5kID0gcDsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg ICAgICAgICAgdmxubGVuID0gcCAtIGxuOworISAgICAgICAgICAgICAgIHZsbiA9IG1hbGxvYygo dmxubGVuICsgMSkgKiBzaXplb2YgKGNoYXIpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZsbikg eworISAgICAgICAgICAgICAgICAgc3RyY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICAgICAg ICAgICAgICBnb3RvIHJsY2xlYW51cDsKKyAgICAgICAgICAgICAgICB9CishICAgICAgICAgICAg ICAgc3RybmNweSh2bG4sbG4sdmxubGVuKTsKKyEgICAgICAgICAgICAgICB2bG5bdmxubGVuXSA9 ICdcMCc7CisgICAgICAgICAgICAgICAgYWRkaXRlbShsYnVmLCAmdmxuLCBlcnJtc2cpOworICAg ICAgICAgICAgICAgIGlmICgqZXJybXNnKSBnb3RvIHJsY2xlYW51cDsKKyAgICAgICAgICAgICAg ICBhZGRpdGVtKGxwYnVmLCAgaW52aXMgPyAmaXByb3AgOiAmdnByb3AsICBlcnJtc2cpOworLS0t IDMwOSwzMzEgLS0tLQorICAgICAgICAgICAgaWYgKCEocCA9PSBxcGVuZCAmJiBvcCA9PSBvbGRx cGVuZCkpIHsKKyAgICAgICAgICAgICAgaWYgKCFpbnZpcyAmJiAob2xkcXNvbmx5IHx8IHFzb25s eSkpIHsKKyAgICAgICAgICAgICAgICBpZiAob2xkcXNvbmx5KSB7CishICAgICAgICAgICAgICAg ICAqb3AgPSBMJ1wwJzsKKyAgICAgICAgICAgICAgICAgIG9sZHFwZW5kID0gb3A7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChxc29ubHkpIHsKKyEgICAgICAgICAgICAg ICAgICpwID0gTCdcMCc7CisgICAgICAgICAgICAgICAgICBxcGVuZCA9IHA7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg ICAgICAgIHZsbmxlbiA9IHAgLSBsbjsKKyEgICAgICAgICAgICAgICB2bG4gPSBtYWxsb2MoKHZs bmxlbiArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CisgICAgICAgICAgICAgICAgaWYgKCF2bG4p IHsKKyEgICAgICAgICAgICAgICAgIHdjc2NweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgICAg ICAgICAgICAgZ290byBybGNsZWFudXA7CisgICAgICAgICAgICAgICAgfQorISAgICAgICAgICAg ICAgIHdjc25jcHkodmxuLCBsbiwgdmxubGVuKTsKKyEgICAgICAgICAgICAgICB2bG5bdmxubGVu XSA9IEwnXDAnOworICAgICAgICAgICAgICAgIGFkZGl0ZW0obGJ1ZiwgJnZsbiwgZXJybXNnKTsK KyAgICAgICAgICAgICAgICBpZiAoKmVycm1zZykgZ290byBybGNsZWFudXA7CisgICAgICAgICAg ICAgICAgYWRkaXRlbShscGJ1ZiwgIGludmlzID8gJmlwcm9wIDogJnZwcm9wLCAgZXJybXNnKTsK KyoqKioqKioqKioqKioqKgorKioqIDM4OCw0MTUgKioqKgorICAgICAgfQorICAgICAgZWxzZSB7 CisgICAgICAgIGlmIChlbXB0eSkgeworISAgICAgICAgIGlmIChjc21lbWJlcihjaCwgcHJvdGVj dGNoYXJzKSkgeworISAgICAgICAgICAgdW5nZXRjKGMsc3RkaW4pOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgfQorICAgICAgICAgIGVtcHR5ID0gMDsKKyAgICAgICAgfQorISAgICAg ICBpZiAoIWNoKSBjb250aW51ZTsKKyEgICAgICAgaWYgKGNoID09ICdcdCcpIHsKKyEgICAgICAg ICBjaCA9ICcgJzsKKyAgICAgICAgICBmb3IgKGkgPSBUYWIgLSBudW1pdGVtcyhjYnVmKSAlIFRh YjsgIGkgPiAwOyAgLS1pKSB7CishICAgICAgICAgICBhZGRpdGVtKGNidWYsICZjaCwgZXJybXNn KTsKKyAgICAgICAgICAgIGlmICgqZXJybXNnKSBnb3RvIHJsY2xlYW51cDsKKyAgICAgICAgICB9 CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyEgICAgICAgaWYgKGlzc3BhY2UoYykp IGNoID0gJyAnOworISAgICAgICBlbHNlIGJsYW5rID0gMDsKKyEgICAgICAgYWRkaXRlbShjYnVm LCAmY2gsIGVycm1zZyk7CishICAgICAgIGlmICgqZXJybXNnKSBnb3RvIHJsY2xlYW51cDsKKyAg ICAgIH0KKyAgICB9CishIAorICAgIGlmICghYmxhbmspIHsKKyAgICAgIGFkZGl0ZW0oY2J1Ziwg Jm51bGxjaGFyLCBlcnJtc2cpOworICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVwOwor LS0tIDM0OSwzNzkgLS0tLQorICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGlmIChlbXB0 eSkgeworISAgICAgICAgIGlmIChjc21lbWJlcihjLCBwcm90ZWN0Y2hhcnMpKSB7CishICAgICAg ICAgICB1bmdldHdjKGMsc3RkaW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQor ICAgICAgICAgIGVtcHR5ID0gMDsKKyAgICAgICAgfQorISAgICAgICBpZiAoIWMpIGNvbnRpbnVl OworISAgICAgICBpZiAoYyA9PSBMJ1x0JykgeworISAgICAgICAgIGMgPSBMJyAnOworICAgICAg ICAgIGZvciAoaSA9IFRhYiAtIG51bWl0ZW1zKGNidWYpICUgVGFiOyAgaSA+IDA7ICAtLWkpIHsK KyEgICAgICAgICAgIGFkZGl0ZW0oY2J1ZiwgJmMsIGVycm1zZyk7CisgICAgICAgICAgICBpZiAo KmVycm1zZykgZ290byBybGNsZWFudXA7CisgICAgICAgICAgfQorICAgICAgICAgIGNvbnRpbnVl OworICAgICAgICB9CishICAgICAgIGlmIChpc3dzcGFjZShjKSkgCishICAgICAgICAgYyA9IEwn ICc7CishICAgICAgIGVsc2UgCishICAgICAgICAgYmxhbmsgPSAwOworISAgICAgICBhZGRpdGVt KGNidWYsICZjLCBlcnJtc2cpOworISAgICAgICBpZiAoKmVycm1zZykgCishICAgICAgICAgZ290 byBybGNsZWFudXA7CisgICAgICB9CisgICAgfQorISAgIAorICAgIGlmICghYmxhbmspIHsKKyAg ICAgIGFkZGl0ZW0oY2J1ZiwgJm51bGxjaGFyLCBlcnJtc2cpOworICAgICAgaWYgKCplcnJtc2cp IGdvdG8gcmxjbGVhbnVwOworKioqKioqKioqKioqKioqCisqKiogNDQ5LDQ1NSAqKioqCisgIAor ICAKKyAgc3RhdGljIHZvaWQgY29tcHJlc3VmbGVuKAorISAgIGNvbnN0IGNoYXIgKiBjb25zdCAq bGluZXMsIGNvbnN0IGNoYXIgKiBjb25zdCAqZW5kbGluZSwKKyAgICBjb25zdCBjaGFyc2V0ICpi b2R5Y2hhcnMsIGludCBib2R5LCBpbnQgcHJlLCBpbnQgc3VmLCBpbnQgKnBwcmUsIGludCAqcHN1 ZgorICApCisgIC8qIGxpbmVzIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MsIHVwIHRvIGJ1dCBub3Qg aW5jbHVkaW5nIGVuZGxpbmUuICAqLworLS0tIDQxMyw0MTkgLS0tLQorICAKKyAgCisgIHN0YXRp YyB2b2lkIGNvbXByZXN1ZmxlbigKKyEgICBjb25zdCB3Y2hhcl90ICogY29uc3QgKmxpbmVzLCBj b25zdCB3Y2hhcl90ICogY29uc3QgKmVuZGxpbmUsCisgICAgY29uc3QgY2hhcnNldCAqYm9keWNo YXJzLCBpbnQgYm9keSwgaW50IHByZSwgaW50IHN1ZiwgaW50ICpwcHJlLCBpbnQgKnBzdWYKKyAg KQorICAvKiBsaW5lcyBpcyBhbiBhcnJheSBvZiBzdHJpbmdzLCB1cCB0byBidXQgbm90IGluY2x1 ZGluZyBlbmRsaW5lLiAgKi8KKyoqKioqKioqKioqKioqKgorKioqIDQ1Nyw0NjUgKioqKgorICAv KiBsaW5lcyBpbiBsaW5lcy4gIEFzc3VtZXMgdGhhdCB0aGV5IGhhdmUgYWxyZWFkeSBiZWVuIGRl dGVybWluZWQgKi8KKyAgLyogdG8gYmUgYXQgbGVhc3QgcHJlIGFuZCBzdWYuICBlbmRsaW5lIG11 c3Qgbm90IGVxdWFsIGxpbmVzLiAgICAgICovCisgIHsKKyEgICBjb25zdCBjaGFyICpzdGFydCwg KmVuZCwgKmtub3duc3RhcnQsICogY29uc3QgKmxpbmUsICpwMSwgKnAyLCAqa25vd25lbmQsCisg ICAgICAgICAgICAgICAqa25vd25zdGFydDI7CishIAorICAgIHN0YXJ0ID0gKmxpbmVzOworICAg IGVuZCA9IGtub3duc3RhcnQgPSBzdGFydCArIHByZTsKKyAgICBpZiAoYm9keSkKKy0tLSA0MjEs NDI5IC0tLS0KKyAgLyogbGluZXMgaW4gbGluZXMuICBBc3N1bWVzIHRoYXQgdGhleSBoYXZlIGFs cmVhZHkgYmVlbiBkZXRlcm1pbmVkICovCisgIC8qIHRvIGJlIGF0IGxlYXN0IHByZSBhbmQgc3Vm LiAgZW5kbGluZSBtdXN0IG5vdCBlcXVhbCBsaW5lcy4gICAgICAqLworICB7CishICAgY29uc3Qg d2NoYXJfdCAqc3RhcnQsICplbmQsICprbm93bnN0YXJ0LCAqIGNvbnN0ICpsaW5lLCAqcDEsICpw MiwgKmtub3duZW5kLAorICAgICAgICAgICAgICAgKmtub3duc3RhcnQyOworISAgICAgICAgICAg IAorICAgIHN0YXJ0ID0gKmxpbmVzOworICAgIGVuZCA9IGtub3duc3RhcnQgPSBzdGFydCArIHBy ZTsKKyAgICBpZiAoYm9keSkKKyoqKioqKioqKioqKioqKgorKioqIDQ3NCw0ODAgKioqKgorICAg IH0KKyAgICBpZiAoYm9keSkKKyAgICAgIGZvciAocDEgPSBlbmQ7ICBwMSA+IGtub3duc3RhcnQ7 ICApCishICAgICAgIGlmICgqLS1wMSAhPSAnICcpIHsKKyAgICAgICAgICBpZiAoY3NtZW1iZXIo KnAxLCBib2R5Y2hhcnMpKQorICAgICAgICAgICAgZW5kID0gcDE7CisgICAgICAgICAgZWxzZQor LS0tIDQzOCw0NDQgLS0tLQorICAgIH0KKyAgICBpZiAoYm9keSkKKyAgICAgIGZvciAocDEgPSBl bmQ7ICBwMSA+IGtub3duc3RhcnQ7ICApCishICAgICAgIGlmICgqLS1wMSAhPSBMJyAnKSB7Cisg ICAgICAgICAgaWYgKGNzbWVtYmVyKCpwMSwgYm9keWNoYXJzKSkKKyAgICAgICAgICAgIGVuZCA9 IHAxOworICAgICAgICAgIGVsc2UKKyoqKioqKioqKioqKioqKgorKioqIDUwMSw1MTggKioqKgor ICAgIH0KKyAgICBpZiAoYm9keSkgeworICAgICAgZm9yIChwMSA9IHN0YXJ0OworISAgICAgICAg ICBzdGFydCA8IGtub3duZW5kICYmICgqc3RhcnQgPT0gJyAnIHx8IGNzbWVtYmVyKCpzdGFydCwg Ym9keWNoYXJzKSk7CisgICAgICAgICAgICsrc3RhcnQpOworISAgICAgaWYgKHN0YXJ0ID4gcDEg JiYgc3RhcnRbLTFdID09ICcgJykgLS1zdGFydDsKKyAgICB9CisgICAgZWxzZQorISAgICAgd2hp bGUgKGVuZCAtIHN0YXJ0ID49IDIgJiYgKnN0YXJ0ID09ICcgJyAmJiBzdGFydFsxXSA9PSAnICcp ICsrc3RhcnQ7CisgICAgKnBzdWYgPSBlbmQgLSBzdGFydDsKKyAgfQorICAKKyAgCisgIHN0YXRp YyB2b2lkIGRlbGltaXQoCishICAgY29uc3QgY2hhciAqIGNvbnN0ICpsaW5lcywgY29uc3QgY2hh ciAqIGNvbnN0ICplbmRsaW5lLAorICAgIGNvbnN0IGNoYXJzZXQgKmJvZHljaGFycywgaW50IHJl cGVhdCwgaW50IGJvZHksIGludCBkaXYsCisgICAgaW50IHByZSwgaW50IHN1ZiwgbGluZXByb3Ag KnByb3BzCisgICkKKy0tLSA0NjUsNDgyIC0tLS0KKyAgICB9CisgICAgaWYgKGJvZHkpIHsKKyAg ICAgIGZvciAocDEgPSBzdGFydDsKKyEgICAgICAgICAgc3RhcnQgPCBrbm93bmVuZCAmJiAoKnN0 YXJ0ID09IEwnICcgfHwgY3NtZW1iZXIoKnN0YXJ0LCBib2R5Y2hhcnMpKTsKKyAgICAgICAgICAg KytzdGFydCk7CishICAgICBpZiAoc3RhcnQgPiBwMSAmJiBzdGFydFstMV0gPT0gTCcgJykgLS1z dGFydDsKKyAgICB9CisgICAgZWxzZQorISAgICAgd2hpbGUgKGVuZCAtIHN0YXJ0ID49IDIgJiYg KnN0YXJ0ID09IEwnICcgJiYgc3RhcnRbMV0gPT0gTCcgJykgKytzdGFydDsKKyAgICAqcHN1ZiA9 IGVuZCAtIHN0YXJ0OworICB9CisgIAorICAKKyAgc3RhdGljIHZvaWQgZGVsaW1pdCgKKyEgICBj b25zdCB3Y2hhcl90ICogY29uc3QgKmxpbmVzLCBjb25zdCB3Y2hhcl90ICogY29uc3QgKmVuZGxp bmUsCisgICAgY29uc3QgY2hhcnNldCAqYm9keWNoYXJzLCBpbnQgcmVwZWF0LCBpbnQgYm9keSwg aW50IGRpdiwKKyAgICBpbnQgcHJlLCBpbnQgc3VmLCBsaW5lcHJvcCAqcHJvcHMKKyAgKQorKioq KioqKioqKioqKioqCisqKiogNTIzLDUzMCAqKioqCisgIC8qIGFuZCBjb21zdWZsZW4gb2YgdGhl IGxpbmVzIGluIGxpbmVzIGhhdmUgYWxyZWFkeSBiZWVuICAgICAqLworICAvKiBkZXRlcm1pbmVk IHRvIGJlIGF0IGxlYXN0IHByZSBhbmQgc3VmLCByZXNwZWN0aXZlbHkuICAgICAgKi8KKyAgewor ISAgIGNvbnN0IGNoYXIgKiBjb25zdCAqbGluZSwgKmVuZCwgKnAsICogY29uc3QgKm5leHRsaW5l OworISAgIGNoYXIgcmM7CisgICAgbGluZXByb3AgKnByb3AsICpuZXh0cHJvcDsKKyAgICBpbnQg YW55Ym9kaWxlc3MgPSAwLCBzdGF0dXM7CisgIAorLS0tIDQ4Nyw0OTQgLS0tLQorICAvKiBhbmQg Y29tc3VmbGVuIG9mIHRoZSBsaW5lcyBpbiBsaW5lcyBoYXZlIGFscmVhZHkgYmVlbiAgICAgKi8K KyAgLyogZGV0ZXJtaW5lZCB0byBiZSBhdCBsZWFzdCBwcmUgYW5kIHN1ZiwgcmVzcGVjdGl2ZWx5 LiAgICAgICovCisgIHsKKyEgICBjb25zdCB3Y2hhcl90ICogY29uc3QgKmxpbmUsICplbmQsICpw LCAqIGNvbnN0ICpuZXh0bGluZTsKKyEgICB3Y2hhcl90IHJjOworICAgIGxpbmVwcm9wICpwcm9w LCAqbmV4dHByb3A7CisgICAgaW50IGFueWJvZGlsZXNzID0gMCwgc3RhdHVzOworICAKKyoqKioq KioqKioqKioqKgorKioqIDU0NSw1NTIgKioqKgorICAgICAgZm9yIChlbmQgPSAqbGluZTsgICpl bmQ7ICArK2VuZCk7CisgICAgICBlbmQgLT0gc3VmOworICAgICAgcCA9ICpsaW5lICsgcHJlOwor ISAgICAgcmMgPSAgcCA8IGVuZCAgPyAgKnAgIDogICcgJzsKKyEgICAgIGlmIChyYyAhPSAnICcg JiYgKCFyZXBlYXQgfHwgZW5kIC0gcCA8IHJlcGVhdCkpCisgICAgICAgIHByb3AtPmZsYWdzICY9 IH5MX0JPRElMRVNTOworICAgICAgZWxzZQorICAgICAgICB3aGlsZSAocCA8IGVuZCkgeworLS0t IDUwOSw1MTYgLS0tLQorICAgICAgZm9yIChlbmQgPSAqbGluZTsgICplbmQ7ICArK2VuZCk7Cisg ICAgICBlbmQgLT0gc3VmOworICAgICAgcCA9ICpsaW5lICsgcHJlOworISAgICAgcmMgPSAgcCA8 IGVuZCAgPyAgKnAgIDogIEwnICc7CishICAgICBpZiAocmMgIT0gTCcgJyAmJiAoIXJlcGVhdCB8 fCBlbmQgLSBwIDwgcmVwZWF0KSkKKyAgICAgICAgcHJvcC0+ZmxhZ3MgJj0gfkxfQk9ESUxFU1M7 CisgICAgICBlbHNlCisgICAgICAgIHdoaWxlIChwIDwgZW5kKSB7CisqKioqKioqKioqKioqKioK KyoqKiA1ODksNTk3ICoqKioKKyAgICB9CisgIAorICAgIGxpbmUgPSBsaW5lcywgcHJvcCA9IHBy b3BzOworISAgIHN0YXR1cyA9ICgoKmxpbmVzKVtwcmVdID09ICcgJyk7CisgICAgZG8geworISAg ICAgaWYgKCgoKmxpbmUpW3ByZV0gPT0gJyAnKSA9PSBzdGF0dXMpCisgICAgICAgIHByb3AtPmZs YWdzIHw9IExfRklSU1Q7CisgICAgICArK2xpbmUsICsrcHJvcDsKKyAgICB9IHdoaWxlIChsaW5l IDwgZW5kbGluZSk7CistLS0gNTUzLDU2MSAtLS0tCisgICAgfQorICAKKyAgICBsaW5lID0gbGlu ZXMsIHByb3AgPSBwcm9wczsKKyEgICBzdGF0dXMgPSAoKCpsaW5lcylbcHJlXSA9PSBMJyAnKTsK KyAgICBkbyB7CishICAgICBpZiAoKCgqbGluZSlbcHJlXSA9PSBMJyAnKSA9PSBzdGF0dXMpCisg ICAgICAgIHByb3AtPmZsYWdzIHw9IExfRklSU1Q7CisgICAgICArK2xpbmUsICsrcHJvcDsKKyAg ICB9IHdoaWxlIChsaW5lIDwgZW5kbGluZSk7CisqKioqKioqKioqKioqKioKKyoqKiA1OTksNjEy ICoqKioKKyAgCisgIAorICBzdGF0aWMgdm9pZCBtYXJrc3VwZXJmKAorISAgIGNvbnN0IGNoYXIg KiBjb25zdCAqIGxpbmVzLCBjb25zdCBjaGFyICogY29uc3QgKiBlbmRsaW5lLCBsaW5lcHJvcCAq cHJvcHMKKyAgKQorICAvKiBsaW5lcyBwb2ludHMgdG8gdGhlIGZpcnN0IGxpbmUgb2YgYSBzZWdt ZW50LCBhbmQgZW5kbGluZSB0byBvbmUgICovCisgIC8qIGxpbmUgYmV5b25kIHRoZSBsYXN0IGxp bmUgaW4gdGhlIHNlZ21lbnQuICBTZXRzIExfU1VQRVJGIGJpdHMgaW4gKi8KKyAgLyogdGhlIGZs YWdzIGZpZWxkcyBvZiB0aGUgcHJvcHMgYXJyYXkgd2hlbmV2ZXIgdGhlIGNvcnJlc3BvbmRpbmcg ICAqLworICAvKiBsaW5lIGlzIHN1cGVyZmx1b3VzLiAgTF9CT0RJTEVTUyBiaXRzIG11c3QgYWxy ZWFkeSBiZSBzZXQuICAgICAgICovCisgIHsKKyEgICBjb25zdCBjaGFyICogY29uc3QgKmxpbmUs ICpwOworICAgIGxpbmVwcm9wICpwcm9wLCAqbXByb3AsIGR1bW15OworICAgIGludCBpbmJvZHks IG51bSwgbW51bTsKKyAgCistLS0gNTYzLDU3NiAtLS0tCisgIAorICAKKyAgc3RhdGljIHZvaWQg bWFya3N1cGVyZigKKyEgICBjb25zdCB3Y2hhcl90ICogY29uc3QgKiBsaW5lcywgY29uc3Qgd2No YXJfdCAqIGNvbnN0ICogZW5kbGluZSwgbGluZXByb3AgKnByb3BzCisgICkKKyAgLyogbGluZXMg cG9pbnRzIHRvIHRoZSBmaXJzdCBsaW5lIG9mIGEgc2VnbWVudCwgYW5kIGVuZGxpbmUgdG8gb25l ICAqLworICAvKiBsaW5lIGJleW9uZCB0aGUgbGFzdCBsaW5lIGluIHRoZSBzZWdtZW50LiAgU2V0 cyBMX1NVUEVSRiBiaXRzIGluICovCisgIC8qIHRoZSBmbGFncyBmaWVsZHMgb2YgdGhlIHByb3Bz IGFycmF5IHdoZW5ldmVyIHRoZSBjb3JyZXNwb25kaW5nICAgKi8KKyAgLyogbGluZSBpcyBzdXBl cmZsdW91cy4gIExfQk9ESUxFU1MgYml0cyBtdXN0IGFscmVhZHkgYmUgc2V0LiAgICAgICAqLwor ICB7CishICAgY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICpsaW5lLCAqcDsKKyAgICBsaW5lcHJvcCAq cHJvcCwgKm1wcm9wLCBkdW1teTsKKyAgICBpbnQgaW5ib2R5LCBudW0sIG1udW07CisgIAorKioq KioqKioqKioqKioqCisqKiogNjE5LDYyNSAqKioqCisgICAgZm9yIChsaW5lID0gbGluZXMsIHBy b3AgPSBwcm9wczsgIGxpbmUgPCBlbmRsaW5lOyAgKytsaW5lLCArK3Byb3ApCisgICAgICBpZiAo aXN2YWNhbnQocHJvcCkpIHsKKyAgICAgICAgZm9yIChudW0gPSAwLCBwID0gKmxpbmU7ICAqcDsg ICsrcCkKKyEgICAgICAgICBpZiAoKnAgIT0gJyAnKSArK251bTsKKyAgICAgICAgaWYgKGluYm9k eSB8fCBudW0gPCBtbnVtKQorICAgICAgICAgIG1udW0gPSBudW0sIG1wcm9wID0gcHJvcDsKKyAg ICAgICAgaW5ib2R5ID0gMDsKKy0tLSA1ODMsNTg5IC0tLS0KKyAgICBmb3IgKGxpbmUgPSBsaW5l cywgcHJvcCA9IHByb3BzOyAgbGluZSA8IGVuZGxpbmU7ICArK2xpbmUsICsrcHJvcCkKKyAgICAg IGlmIChpc3ZhY2FudChwcm9wKSkgeworICAgICAgICBmb3IgKG51bSA9IDAsIHAgPSAqbGluZTsg ICpwOyAgKytwKQorISAgICAgICAgIGlmICgqcCAhPSBMJyAnKSArK251bTsKKyAgICAgICAgaWYg KGluYm9keSB8fCBudW0gPCBtbnVtKQorICAgICAgICAgIG1udW0gPSBudW0sIG1wcm9wID0gcHJv cDsKKyAgICAgICAgaW5ib2R5ID0gMDsKKyoqKioqKioqKioqKioqKgorKioqIDYzMSw2MzcgKioq KgorICAKKyAgCisgIHN0YXRpYyB2b2lkIHNldGFmZml4ZXMoCishICAgY29uc3QgY2hhciAqIGNv bnN0ICppbmxpbmVzLCBjb25zdCBjaGFyICogY29uc3QgKmVuZGxpbmUsCisgICAgY29uc3QgbGlu ZXByb3AgKnByb3BzLCBjb25zdCBjaGFyc2V0ICpib2R5Y2hhcnMsCisgICAgY29uc3QgY2hhcnNl dCAqcXVvdGVjaGFycywgaW50IGhhbmcsIGludCBib2R5LCBpbnQgcXVvdGUsCisgICAgaW50ICpw YWZwLCBpbnQgKnBmcywgaW50ICpwcHJlZml4LCBpbnQgKnBzdWZmaXgKKy0tLSA1OTUsNjAxIC0t LS0KKyAgCisgIAorICBzdGF0aWMgdm9pZCBzZXRhZmZpeGVzKAorISAgIGNvbnN0IHdjaGFyX3Qg KiBjb25zdCAqaW5saW5lcywgY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICplbmRsaW5lLAorICAgIGNv bnN0IGxpbmVwcm9wICpwcm9wcywgY29uc3QgY2hhcnNldCAqYm9keWNoYXJzLAorICAgIGNvbnN0 IGNoYXJzZXQgKnF1b3RlY2hhcnMsIGludCBoYW5nLCBpbnQgYm9keSwgaW50IHF1b3RlLAorICAg IGludCAqcGFmcCwgaW50ICpwZnMsIGludCAqcHByZWZpeCwgaW50ICpwc3VmZml4CisqKioqKioq KioqKioqKioKKyoqKiA2NDQsNjUwICoqKioKKyAgLyogZGVmYXVsdCB2YWx1ZSBhcyBzcGVjaWZp ZWQgaW4gInBhci5kb2MiLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB7CisgICAg aW50IG51bWluLCBwcmUsIHN1ZjsKKyEgICBjb25zdCBjaGFyICpwOworICAKKyAgICBudW1pbiA9 IGVuZGxpbmUgLSBpbmxpbmVzOworICAKKy0tLSA2MDgsNjE0IC0tLS0KKyAgLyogZGVmYXVsdCB2 YWx1ZSBhcyBzcGVjaWZpZWQgaW4gInBhci5kb2MiLiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqLworICB7CisgICAgaW50IG51bWluLCBwcmUsIHN1ZjsKKyEgICBjb25zdCB3Y2hhcl90ICpw OworICAKKyAgICBudW1pbiA9IGVuZGxpbmUgLSBpbmxpbmVzOworICAKKyoqKioqKioqKioqKioq KgorKioqIDY2Niw2NzYgKioqKgorICB9CisgIAorICAKKyEgc3RhdGljIHZvaWQgZnJlZWxpbmVz KGNoYXIgKipsaW5lcykKKyAgLyogRnJlZXMgdGhlIGVsZW1lbnRzIG9mIGxpbmVzLCBhbmQgbGlu ZXMgaXRzZWxmLiAqLworICAvKiBsaW5lcyBpcyBhIE5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBz dHJpbmdzLiAgICovCisgIHsKKyEgICBjaGFyICoqbGluZTsKKyAgCisgICAgZm9yIChsaW5lID0g bGluZXM7ICAqbGluZTsgICsrbGluZSkKKyAgICAgIGZyZWUoKmxpbmUpOworLS0tIDYzMCw2NDAg LS0tLQorICB9CisgIAorICAKKyEgc3RhdGljIHZvaWQgZnJlZWxpbmVzKHdjaGFyX3QgKipsaW5l cykKKyAgLyogRnJlZXMgdGhlIGVsZW1lbnRzIG9mIGxpbmVzLCBhbmQgbGluZXMgaXRzZWxmLiAq LworICAvKiBsaW5lcyBpcyBhIE5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzLiAgICov CisgIHsKKyEgICB3Y2hhcl90ICoqbGluZTsKKyAgCisgICAgZm9yIChsaW5lID0gbGluZXM7ICAq bGluZTsgICsrbGluZSkKKyAgICAgIGZyZWUoKmxpbmUpOworKioqKioqKioqKioqKioqCisqKiog Njc4LDc0NSAqKioqCisgICAgZnJlZShsaW5lcyk7CisgIH0KKyAgCistIAorICBpbnQgbWFpbihp bnQgYXJnYywgY29uc3QgY2hhciAqIGNvbnN0ICphcmd2KQorICB7CisgICAgaW50IGhlbHAgPSAw LCB2ZXJzaW9uID0gMCwgaGFuZyA9IDAsIHByZWZpeCA9IC0xLCByZXBlYXQgPSAwLCBzdWZmaXgg PSAtMSwKKyAgICAgICAgVGFiID0gMSwgd2lkdGggPSA3MiwgYm9keSA9IDAsIGNhcCA9IDAsIGRp diA9IDAsIEVyciA9IDAsIGV4cGVsID0gMCwKKyAgICAgICAgZml0ID0gMCwgZ3Vlc3MgPSAwLCBp bnZpcyA9IDAsIGp1c3QgPSAwLCBsYXN0ID0gMCwgcXVvdGUgPSAwLCBSZXBvcnQgPSAwLAorICAg ICAgICB0b3VjaCA9IC0xOworISAgIGludCBwcmVmaXhiYWssIHN1ZmZpeGJhaywgYywgc2F3bm9u YmxhbmssIG93ZWJsYW5rLCBuLCBpLCBhZnAsIGZzOworICAgIGNoYXJzZXQgKmJvZHljaGFycyA9 IE5VTEwsICpwcm90ZWN0Y2hhcnMgPSBOVUxMLCAqcXVvdGVjaGFycyA9IE5VTEw7CishICAgY2hh ciAqcGFyaW5pdCA9IE5VTEwsICphcmcsICoqaW5saW5lcyA9IE5VTEwsICoqZW5kbGluZSwgKipm aXJzdGxpbmUsICplbmQsCishICAgICAgICAqKm5leHRsaW5lLCAqKm91dGxpbmVzID0gTlVMTCwg KipsaW5lLCBjaDsKKyEgICBjb25zdCBjaGFyICplbnYsICogY29uc3Qgd2hpdGVjaGFycyA9ICIg XGZcblxyXHRcdiI7CisgICAgZXJybXNnX3QgZXJybXNnID0geyAnXDAnIH07CisgICAgbGluZXBy b3AgKnByb3BzID0gTlVMTCwgKmZpcnN0cHJvcCwgKm5leHRwcm9wOworICAgIEZJTEUgKmVycm91 dDsKKyAgCisgIC8qIFNldCB0aGUgY3VycmVudCBsb2NhbGUgZnJvbSB0aGUgZW52aXJvbm1lbnQ6 ICovCisgIAorICAgIHNldGxvY2FsZShMQ19BTEwsIiIpOworICAKKyAgLyogUHJvY2VzcyBlbnZp cm9ubWVudCB2YXJpYWJsZXM6ICovCisgIAorICAgIGVudiA9IGdldGVudigiUEFSQk9EWSIpOwor ICAgIGlmICghZW52KSBlbnYgPSAiIjsKKyEgICBib2R5Y2hhcnMgPSBwYXJzZWNoYXJzZXQoZW52 LGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIHsKKyAgICAgIGhlbHAgPSAxOworICAgICAgZ290 byBwYXJjbGVhbnVwOworICAgIH0KKyAgCisgICAgZW52ID0gZ2V0ZW52KCJQQVJQUk9URUNUIik7 CisgICAgaWYgKCFlbnYpIGVudiA9ICIiOworISAgIHByb3RlY3RjaGFycyA9IHBhcnNlY2hhcnNl dChlbnYsZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykgeworICAgICAgaGVscCA9IDE7CisgICAg ICBnb3RvIHBhcmNsZWFudXA7CisgICAgfQorICAKKyAgICBlbnYgPSBnZXRlbnYoIlBBUlFVT1RF Iik7CisgICAgaWYgKCFlbnYpIGVudiA9ICI+ICI7CishICAgcXVvdGVjaGFycyA9IHBhcnNlY2hh cnNldChlbnYsZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykgeworICAgICAgaGVscCA9IDE7Cisg ICAgICBnb3RvIHBhcmNsZWFudXA7CisgICAgfQorICAKKyAgICBlbnYgPSBnZXRlbnYoIlBBUklO SVQiKTsKKyAgICBpZiAoZW52KSB7CishICAgICBwYXJpbml0ID0gbWFsbG9jKChzdHJsZW4oZW52 KSArIDEpICogc2l6ZW9mIChjaGFyKSk7CisgICAgICBpZiAoIXBhcmluaXQpIHsKKyEgICAgICAg c3RyY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICAgIGdvdG8gcGFyY2xlYW51cDsKKyAgICAg IH0KKyEgICAgIHN0cmNweShwYXJpbml0LGVudik7CishICAgICBhcmcgPSBzdHJ0b2socGFyaW5p dCx3aGl0ZWNoYXJzKTsKKyAgICAgIHdoaWxlIChhcmcpIHsKKyAgICAgICAgcGFyc2VhcmcoYXJn LCAmaGVscCwgJnZlcnNpb24sIGJvZHljaGFycywgcHJvdGVjdGNoYXJzLAorICAgICAgICAgICAg ICAgICBxdW90ZWNoYXJzLCAmaGFuZywgJnByZWZpeCwgJnJlcGVhdCwgJnN1ZmZpeCwgJlRhYiwK KyAgICAgICAgICAgICAgICAgJndpZHRoLCAmYm9keSwgJmNhcCwgJmRpdiwgJkVyciwgJmV4cGVs LCAmZml0LCAmZ3Vlc3MsCisgICAgICAgICAgICAgICAgICZpbnZpcywgJmp1c3QsICZsYXN0LCAm cXVvdGUsICZSZXBvcnQsICZ0b3VjaCwgZXJybXNnICk7CisgICAgICAgIGlmICgqZXJybXNnIHx8 IGhlbHAgfHwgdmVyc2lvbikgZ290byBwYXJjbGVhbnVwOworISAgICAgICBhcmcgPSBzdHJ0b2so TlVMTCx3aGl0ZWNoYXJzKTsKKyAgICAgIH0KKyAgICAgIGZyZWUocGFyaW5pdCk7CisgICAgICBw YXJpbml0ID0gTlVMTDsKKy0tLSA2NDIsNzU3IC0tLS0KKyAgICBmcmVlKGxpbmVzKTsKKyAgfQor ICAKKyAgaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBjb25zdCAqYXJndikKKyAgewor ICAgIGludCBoZWxwID0gMCwgdmVyc2lvbiA9IDAsIGhhbmcgPSAwLCBwcmVmaXggPSAtMSwgcmVw ZWF0ID0gMCwgc3VmZml4ID0gLTEsCisgICAgICAgIFRhYiA9IDEsIHdpZHRoID0gNzIsIGJvZHkg PSAwLCBjYXAgPSAwLCBkaXYgPSAwLCBFcnIgPSAwLCBleHBlbCA9IDAsCisgICAgICAgIGZpdCA9 IDAsIGd1ZXNzID0gMCwgaW52aXMgPSAwLCBqdXN0ID0gMCwgbGFzdCA9IDAsIHF1b3RlID0gMCwg UmVwb3J0ID0gMCwKKyAgICAgICAgdG91Y2ggPSAtMTsKKyEgICBpbnQgcHJlZml4YmFrLCBzdWZm aXhiYWssIHNhd25vbmJsYW5rLCBvd2VibGFuaywgbiwgaSwgYWZwLCBmczsKKyAgICBjaGFyc2V0 ICpib2R5Y2hhcnMgPSBOVUxMLCAqcHJvdGVjdGNoYXJzID0gTlVMTCwgKnF1b3RlY2hhcnMgPSBO VUxMOworISAgIHdpbnRfdCBjOworISAgIHdjaGFyX3QgKnN0YXRlOworISAgIHdjaGFyX3QgKnBh cmluaXQgPSBOVUxMLCAqYXJnLCAqKmlubGluZXMgPSBOVUxMLCAqKmVuZGxpbmUsICoqZmlyc3Rs aW5lLCAqZW5kLAorISAgICAgKipuZXh0bGluZSwgKipvdXRsaW5lcyA9IE5VTEwsICoqbGluZTsK KyEgICBjb25zdCBjaGFyICplbnY7CishICAgd2NoYXJfdCAqd2VudiA9IE5VTEw7CishICAgY29u c3Qgd2NoYXJfdCAqIGNvbnN0IHdoaXRlY2hhcnMgPSBMIiBcZlxuXHJcdFx2IjsKKyAgICBlcnJt c2dfdCBlcnJtc2cgPSB7ICdcMCcgfTsKKyAgICBsaW5lcHJvcCAqcHJvcHMgPSBOVUxMLCAqZmly c3Rwcm9wLCAqbmV4dHByb3A7CisgICAgRklMRSAqZXJyb3V0OworKyAgIGNoYXIgKmxhbmdpbmZv OworICAKKyAgLyogU2V0IHRoZSBjdXJyZW50IGxvY2FsZSBmcm9tIHRoZSBlbnZpcm9ubWVudDog Ki8KKyAgCisgICAgc2V0bG9jYWxlKExDX0FMTCwiIik7CisrICAgbGFuZ2luZm8gPSBubF9sYW5n aW5mbyhDT0RFU0VUKTsKKysgICBpZiAoIXN0cmNtcChsYW5naW5mbywgIkFOU0lfWDMuNC0xOTY4 IikpIHsKKysgICAgIC8vIFdlIHdvdWxkIGxpa2UgdG8gZmFsbGJhY2sgaW4gYW4gOCBiaXRzIGVu Y29kaW5nLCBidXQgaXQgaXMgbm90IGVhc2lseSBwb3NzaWJsZS4KKysgICAgIC8vc2V0bG9jYWxl KExDX0NUWVBFLCAiQyIpOworKyAgICAgLy9sYW5naW5mbyA9IG5sX2xhbmdpbmZvKENPREVTRVQp OworKyAgICAgZndwcmludGYoIEVyciA/IHN0ZGVyciA6IHN0ZG91dCwgCisrICAgICAgICAgTCJX YXJuaW5nOiBMb2NhbGUgc2VlbXMgbm90IGNvbmZpZ3VyZWRcbiIpOworKyAgIH0KKyAgCisgIC8q IFByb2Nlc3MgZW52aXJvbm1lbnQgdmFyaWFibGVzOiAqLworICAKKyAgICBlbnYgPSBnZXRlbnYo IlBBUkJPRFkiKTsKKyAgICBpZiAoIWVudikgZW52ID0gIiI7CishICAgd2VudiA9IG1hbGxvYygo c3RybGVuKGVudikgKyAxKSAqIHNpemVvZiAod2NoYXJfdCkpOworISAgIGlmICghd2Vudikgewor ISAgICAgd2NzY3B5KGVycm1zZyxvdXRvZm1lbSk7CishICAgICBnb3RvIHBhcmNsZWFudXA7Cish ICAgfQorISAgIGlmICgwID4gbWJzdG93Y3Mod2VudixlbnYsIHN0cmxlbihlbnYpICsgMSkpIHsK KyEgICAgIHdjc2NweShlcnJtc2csIEwiSW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2UgaW4gUEFS Qk9EWVxuIik7CishICAgICBnb3RvIHBhcmNsZWFudXA7CishICAgfQorISAgIGJvZHljaGFycyA9 IHBhcnNlY2hhcnNldCh3ZW52LGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIHsKKyAgICAgIGhl bHAgPSAxOworICAgICAgZ290byBwYXJjbGVhbnVwOworICAgIH0KKysgICBmcmVlKHdlbnYpOwor KyAgIHdlbnYgPSBOVUxMOworICAKKyAgICBlbnYgPSBnZXRlbnYoIlBBUlBST1RFQ1QiKTsKKyAg ICBpZiAoIWVudikgZW52ID0gIiI7CishICAgd2VudiA9IG1hbGxvYygoc3RybGVuKGVudikgKyAx KSAqIHNpemVvZiAod2NoYXJfdCkpOworISAgIGlmICghd2VudikgeworISAgICAgd2NzY3B5KGVy cm1zZyxvdXRvZm1lbSk7CishICAgICBnb3RvIHBhcmNsZWFudXA7CishICAgfQorISAgIGlmICgw ID4gbWJzdG93Y3Mod2VudixlbnYsIHN0cmxlbihlbnYpICsgMSkpIHsKKyEgICAgIHdjc2NweShl cnJtc2csIEwiSW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2UgaW4gUEFSUFJPVEVDVFxuIik7Cish ICAgICBnb3RvIHBhcmNsZWFudXA7CishICAgfQorISAgIHByb3RlY3RjaGFycyA9IHBhcnNlY2hh cnNldCh3ZW52LGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIHsKKyAgICAgIGhlbHAgPSAxOwor ICAgICAgZ290byBwYXJjbGVhbnVwOworICAgIH0KKysgICBmcmVlKHdlbnYpOworKyAgIHdlbnYg PSBOVUxMOworICAKKyAgICBlbnYgPSBnZXRlbnYoIlBBUlFVT1RFIik7CisgICAgaWYgKCFlbnYp IGVudiA9ICI+ICI7CishICAgd2VudiA9IG1hbGxvYygoc3RybGVuKGVudikgKyAxKSAqIHNpemVv ZiAod2NoYXJfdCkpOworISAgIGlmICghd2VudikgeworISAgICAgd2NzY3B5KGVycm1zZyxvdXRv Zm1lbSk7CishICAgICBnb3RvIHBhcmNsZWFudXA7CishICAgfQorISAgIGlmICgwID4gbWJzdG93 Y3Mod2VudixlbnYsIHN0cmxlbihlbnYpICsgMSkpIHsKKyEgICAgIHdjc2NweShlcnJtc2csIEwi SW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2UgaW4gUEFSUVVPVEVcbiIpOworISAgICAgZ290byBw YXJjbGVhbnVwOworISAgIH0KKyEgICBxdW90ZWNoYXJzID0gcGFyc2VjaGFyc2V0KHdlbnYsZXJy bXNnKTsKKyAgICBpZiAoKmVycm1zZykgeworICAgICAgaGVscCA9IDE7CisgICAgICBnb3RvIHBh cmNsZWFudXA7CisgICAgfQorKyAgIGZyZWUod2Vudik7CisrICAgd2VudiA9IE5VTEw7CisgIAor ICAgIGVudiA9IGdldGVudigiUEFSSU5JVCIpOworICAgIGlmIChlbnYpIHsKKyEgICAgIHBhcmlu aXQgPSBtYWxsb2MoKHN0cmxlbihlbnYpICsgMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKyAgICAg IGlmICghcGFyaW5pdCkgeworISAgICAgICB3Y3NjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAg ICAgZ290byBwYXJjbGVhbnVwOworICAgICAgfQorISAgICAgaWYgKDAgPiBtYnN0b3djcyhwYXJp bml0LGVudiwgc3RybGVuKGVudikgKyAxKSkgeworISAgICAgICB3Y3NjcHkoZXJybXNnLCBMIklu dmFsaWQgbXVsdGlieXRlIHNlcXVlbmNlIGluIFBBUklOSVRcbiIpOworISAgICAgICBnb3RvIHBh cmNsZWFudXA7CishICAgICB9ICAgIAorISAgICAgYXJnID0gd2NzdG9rKHBhcmluaXQsIHdoaXRl Y2hhcnMsICZzdGF0ZSk7CisgICAgICB3aGlsZSAoYXJnKSB7CisgICAgICAgIHBhcnNlYXJnKGFy ZywgJmhlbHAsICZ2ZXJzaW9uLCBib2R5Y2hhcnMsIHByb3RlY3RjaGFycywKKyAgICAgICAgICAg ICAgICAgcXVvdGVjaGFycywgJmhhbmcsICZwcmVmaXgsICZyZXBlYXQsICZzdWZmaXgsICZUYWIs CisgICAgICAgICAgICAgICAgICZ3aWR0aCwgJmJvZHksICZjYXAsICZkaXYsICZFcnIsICZleHBl bCwgJmZpdCwgJmd1ZXNzLAorICAgICAgICAgICAgICAgICAmaW52aXMsICZqdXN0LCAmbGFzdCwg JnF1b3RlLCAmUmVwb3J0LCAmdG91Y2gsIGVycm1zZyApOworICAgICAgICBpZiAoKmVycm1zZyB8 fCBoZWxwIHx8IHZlcnNpb24pIGdvdG8gcGFyY2xlYW51cDsKKyEgICAgICAgYXJnID0gd2NzdG9r KE5VTEwsIHdoaXRlY2hhcnMsICZzdGF0ZSk7CisgICAgICB9CisgICAgICBmcmVlKHBhcmluaXQp OworICAgICAgcGFyaW5pdCA9IE5VTEw7CisqKioqKioqKioqKioqKioKKyoqKiA3NDgsODA0ICoq KioKKyAgLyogUHJvY2VzcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzOiAqLworICAKKyAgICB3aGls ZSAoKisrYXJndikgeworISAgICAgcGFyc2VhcmcoKmFyZ3YsICZoZWxwLCAmdmVyc2lvbiwgYm9k eWNoYXJzLCBwcm90ZWN0Y2hhcnMsCisgICAgICAgICAgICAgICBxdW90ZWNoYXJzLCAmaGFuZywg JnByZWZpeCwgJnJlcGVhdCwgJnN1ZmZpeCwgJlRhYiwKKyAgICAgICAgICAgICAgICZ3aWR0aCwg JmJvZHksICZjYXAsICZkaXYsICZFcnIsICZleHBlbCwgJmZpdCwgJmd1ZXNzLAorICAgICAgICAg ICAgICAgJmludmlzLCAmanVzdCwgJmxhc3QsICZxdW90ZSwgJlJlcG9ydCwgJnRvdWNoLCBlcnJt c2cgKTsKKyAgICAgIGlmICgqZXJybXNnIHx8IGhlbHAgfHwgdmVyc2lvbikgZ290byBwYXJjbGVh bnVwOworICAgIH0KKyAgCisgICAgaWYgKFRhYiA9PSAwKSB7CishICAgICBzdHJjcHkoZXJybXNn LCAiPFRhYj4gbXVzdCBub3QgYmUgMC5cbiIpOworICAgICAgZ290byBwYXJjbGVhbnVwOworICAg IH0KKyAgCisgICAgaWYgKHRvdWNoIDwgMCkgdG91Y2ggPSBmaXQgfHwgbGFzdDsKKyAgICBwcmVm aXhiYWsgPSBwcmVmaXg7CisgICAgc3VmZml4YmFrID0gc3VmZml4OworISAKKyEgLyogTWFpbiBs b29wOiAqLworISAKKyAgICBmb3IgKHNhd25vbmJsYW5rID0gb3dlYmxhbmsgPSAwOyAgOyAgKSB7 CisgICAgICBmb3IgKDs7KSB7CishICAgICAgIGMgPSBnZXRjaGFyKCk7CishICAgICAgIGlmIChj ID09IEVPRikgYnJlYWs7CishICAgICAgICoodW5zaWduZWQgY2hhciAqKSZjaCA9IGM7CishICAg ICAgIGlmIChleHBlbCAmJiBjaCA9PSAnXG4nKSB7CisgICAgICAgICAgb3dlYmxhbmsgPSBzYXdu b25ibGFuazsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorISAgICAgICBpZiAoY3Nt ZW1iZXIoY2gsIHByb3RlY3RjaGFycykpIHsKKyAgICAgICAgICBzYXdub25ibGFuayA9IDE7Cisg ICAgICAgICAgaWYgKG93ZWJsYW5rKSB7CishICAgICAgICAgICBwdXRzKCIiKTsKKyAgICAgICAg ICAgIG93ZWJsYW5rID0gMDsKKyAgICAgICAgICB9CishICAgICAgICAgd2hpbGUgKGNoICE9ICdc bicpIHsKKyEgICAgICAgICAgIHB1dGNoYXIoYyk7CishICAgICAgICAgICBjID0gZ2V0Y2hhcigp OworISAgICAgICAgICAgaWYgKGMgPT0gRU9GKSBicmVhazsKKyEgICAgICAgICAgICoodW5zaWdu ZWQgY2hhciAqKSZjaCA9IGM7CisgICAgICAgICAgfQorICAgICAgICB9CishICAgICAgIGlmIChj aCAhPSAnXG4nKSBicmVhazsgIC8qIHN1YnN1bWVzIHRoZSBjYXNlIHRoYXQgYyA9PSBFT0YgKi8K KyEgICAgICAgcHV0Y2hhcihjKTsKKyAgICAgIH0KKyEgICAgIGlmIChjID09IEVPRikgYnJlYWs7 CishICAgICB1bmdldGMoYyxzdGRpbik7CisgIAorICAgICAgaW5saW5lcyA9CisgICAgICAgIHJl YWRsaW5lcygmcHJvcHMsIHByb3RlY3RjaGFycywgcXVvdGVjaGFycywgVGFiLCBpbnZpcywgcXVv dGUsIGVycm1zZyk7CisgICAgICBpZiAoKmVycm1zZykgZ290byBwYXJjbGVhbnVwOworISAKKyEg ICAgIGZvciAoZW5kbGluZSA9IGlubGluZXM7ICAqZW5kbGluZTsgICsrZW5kbGluZSk7CisgICAg ICBpZiAoZW5kbGluZSA9PSBpbmxpbmVzKSB7CisgICAgICAgIGZyZWUoaW5saW5lcyk7CisgICAg ICAgIGlubGluZXMgPSBOVUxMOworLS0tIDc2MCw4MzAgLS0tLQorICAvKiBQcm9jZXNzIGNvbW1h bmQgbGluZSBhcmd1bWVudHM6ICovCisgIAorICAgIHdoaWxlICgqKythcmd2KSB7CishICAgICBh cmcgPSBtYWxsb2MoKHN0cmxlbigqYXJndikgKyAxKSAqIHNpemVvZiAod2NoYXJfdCkpOworISAg ICAgaWYgKDAgPiBtYnN0b3djcyhhcmcsICphcmd2LCBzdHJsZW4oKmFyZ3YpICsgMSkpIHsKKyEg ICAgICAgd2NzY3B5KGVycm1zZywgTCJJbnZhbGlkIG11bHRpYnl0ZSBzZXF1ZW5jZSBpbiBhcmd1 bWVudFxuIik7CishICAgICAgIGdvdG8gcGFyY2xlYW51cDsKKyEgICAgIH0KKyEgICAgIHBhcnNl YXJnKGFyZywgJmhlbHAsICZ2ZXJzaW9uLCBib2R5Y2hhcnMsIHByb3RlY3RjaGFycywKKyAgICAg ICAgICAgICAgIHF1b3RlY2hhcnMsICZoYW5nLCAmcHJlZml4LCAmcmVwZWF0LCAmc3VmZml4LCAm VGFiLAorICAgICAgICAgICAgICAgJndpZHRoLCAmYm9keSwgJmNhcCwgJmRpdiwgJkVyciwgJmV4 cGVsLCAmZml0LCAmZ3Vlc3MsCisgICAgICAgICAgICAgICAmaW52aXMsICZqdXN0LCAmbGFzdCwg JnF1b3RlLCAmUmVwb3J0LCAmdG91Y2gsIGVycm1zZyApOworKyAgICAgZnJlZShhcmcpOworICAg ICAgaWYgKCplcnJtc2cgfHwgaGVscCB8fCB2ZXJzaW9uKSBnb3RvIHBhcmNsZWFudXA7CisgICAg fQorICAKKyAgICBpZiAoVGFiID09IDApIHsKKyEgICAgIHdjc2NweShlcnJtc2csIEwiPFRhYj4g bXVzdCBub3QgYmUgMC5cbiIpOworICAgICAgZ290byBwYXJjbGVhbnVwOworICAgIH0KKyAgCisg ICAgaWYgKHRvdWNoIDwgMCkgdG91Y2ggPSBmaXQgfHwgbGFzdDsKKyAgICBwcmVmaXhiYWsgPSBw cmVmaXg7CisgICAgc3VmZml4YmFrID0gc3VmZml4OworISAgIAorISAgIC8qIE1haW4gbG9vcDog Ki8KKyAgICBmb3IgKHNhd25vbmJsYW5rID0gb3dlYmxhbmsgPSAwOyAgOyAgKSB7CisgICAgICBm b3IgKDs7KSB7CishICAgICAgIGMgPSBnZXR3Y2hhcigpOworISAgICAgICBpZiAoYyA9PSBXRU9G KSB7CishICAgICAgICAgaWYgKGVycm5vID09IEVJTFNFUSkgeworISAgICAgICAgICAgd2NzY3B5 KGVycm1zZywgTCJJbnZhbGlkIG11bHRpYnl0ZSBzZXF1ZW5jZSBpbiBpbnB1dFxuIik7CishICAg ICAgICAgICBnb3RvIHBhcmNsZWFudXA7CishICAgICAgICAgfQorISAgICAgICAgIGJyZWFrOwor ISAgICAgICB9CishICAgICAgIGlmIChleHBlbCAmJiBjID09IEwnXG4nKSB7CisgICAgICAgICAg b3dlYmxhbmsgPSBzYXdub25ibGFuazsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor ISAgICAgICBpZiAoY3NtZW1iZXIoYywgcHJvdGVjdGNoYXJzKSkgeworICAgICAgICAgIHNhd25v bmJsYW5rID0gMTsKKyAgICAgICAgICBpZiAob3dlYmxhbmspIHsKKyEgICAgICAgICAgIGZwdXR3 YyhMJ1xuJywgc3Rkb3V0KTsKKyAgICAgICAgICAgIG93ZWJsYW5rID0gMDsKKyAgICAgICAgICB9 CishICAgICAgICAgd2hpbGUgKGMgIT0gTCdcbicpIHsKKyEgICAgICAgICAgIHB1dHdjaGFyKGMp OworISAgICAgICAgICAgYyA9IGdldHdjaGFyKCk7CishICAgICAgICAgICBpZiAoYyA9PSBXRU9G KSB7CishICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFSUxTRVEpIHsKKyEgICAgICAgICAgICAg ICB3Y3NjcHkoZXJybXNnLCBMIkludmFsaWQgbXVsdGlieXRlIHNlcXVlbmNlIGluIGlucHV0XG4i KTsKKyEgICAgICAgICAgICAgICBnb3RvIHBhcmNsZWFudXA7CishICAgICAgICAgICAgIH0KKyEg ICAgICAgICAgICAgYnJlYWs7CishICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9 CishICAgICAgIGlmIChjICE9IEwnXG4nKSBicmVhazsgIC8qIHN1YnN1bWVzIHRoZSBjYXNlIHRo YXQgYyA9PSBFT0YgKi8KKyEgICAgICAgcHV0d2NoYXIoYyk7CisgICAgICB9CishICAgICBpZiAo YyA9PSBXRU9GKSBicmVhazsKKyEgICAgIHVuZ2V0d2MoYyxzdGRpbik7CisgIAorICAgICAgaW5s aW5lcyA9CisgICAgICAgIHJlYWRsaW5lcygmcHJvcHMsIHByb3RlY3RjaGFycywgcXVvdGVjaGFy cywgVGFiLCBpbnZpcywgcXVvdGUsIGVycm1zZyk7CisgICAgICBpZiAoKmVycm1zZykgZ290byBw YXJjbGVhbnVwOworISAgICAgZm9yIChlbmRsaW5lID0gaW5saW5lczsgICplbmRsaW5lOyAgKytl bmRsaW5lKSA7CisgICAgICBpZiAoZW5kbGluZSA9PSBpbmxpbmVzKSB7CisgICAgICAgIGZyZWUo aW5saW5lcyk7CisgICAgICAgIGlubGluZXMgPSBOVUxMOworKioqKioqKioqKioqKioqCisqKiog ODA3LDg0NCAqKioqCisgIAorICAgICAgc2F3bm9uYmxhbmsgPSAxOworICAgICAgaWYgKG93ZWJs YW5rKSB7CishICAgICAgIHB1dHMoIiIpOworICAgICAgICBvd2VibGFuayA9IDA7CisgICAgICB9 CisgIAorISAgICAgZGVsaW1pdCgoY29uc3QgY2hhciAqIGNvbnN0ICopIGlubGluZXMsCishICAg ICAgICAgICAgIChjb25zdCBjaGFyICogY29uc3QgKikgZW5kbGluZSwKKyAgICAgICAgICAgICAg Ym9keWNoYXJzLCByZXBlYXQsIGJvZHksIGRpdiwgMCwgMCwgcHJvcHMpOworICAKKyAgICAgIGlm IChleHBlbCkKKyEgICAgICAgbWFya3N1cGVyZigoY29uc3QgY2hhciAqIGNvbnN0ICopIGlubGlu ZXMsCishICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKiBjb25zdCAqKSBlbmRsaW5lLCBw cm9wcyk7CisgIAorICAgICAgZmlyc3RsaW5lID0gaW5saW5lcywgZmlyc3Rwcm9wID0gcHJvcHM7 CisgICAgICBkbyB7CisgICAgICAgIGlmIChpc2JvZGlsZXNzKGZpcnN0cHJvcCkpIHsKKyAgICAg ICAgICBpZiAoIWlzaW52aXMoZmlyc3Rwcm9wKSAmJiAhKGV4cGVsICYmIGlzc3VwZXJmKGZpcnN0 cHJvcCkpKSB7CisgICAgICAgICAgICBmb3IgKGVuZCA9ICpmaXJzdGxpbmU7ICAqZW5kOyAgKytl bmQpOworISAgICAgICAgICAgaWYgKCFyZXBlYXQgfHwgKGZpcnN0cHJvcC0+cmMgPT0gJyAnICYm ICFmaXJzdHByb3AtPnMpKSB7CishICAgICAgICAgICAgIHdoaWxlIChlbmQgPiAqZmlyc3RsaW5l ICYmIGVuZFstMV0gPT0gJyAnKSAtLWVuZDsKKyEgICAgICAgICAgICAgKmVuZCA9ICdcMCc7Cish ICAgICAgICAgICAgIHB1dHMoKmZpcnN0bGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBlbHNlIHsKKyAgICAgICAgICAgICAgbiA9IHdpZHRoIC0gZmlyc3Rwcm9wLT5wIC0gZmlyc3Rw cm9wLT5zOworICAgICAgICAgICAgICBpZiAobiA8IDApIHsKKyEgICAgICAgICAgICAgICBzcHJp bnRmKGVycm1zZyxpbXBvc3NpYmlsaXR5LDUpOworICAgICAgICAgICAgICAgIGdvdG8gcGFyY2xl YW51cDsKKyAgICAgICAgICAgICAgfQorISAgICAgICAgICAgICBwcmludGYoIiUuKnMiLCBmaXJz dHByb3AtPnAsICpmaXJzdGxpbmUpOworICAgICAgICAgICAgICBmb3IgKGkgPSBuOyAgaTsgIC0t aSkKKyEgICAgICAgICAgICAgICBwdXRjaGFyKCoodW5zaWduZWQgY2hhciAqKSZmaXJzdHByb3At PnJjKTsKKyEgICAgICAgICAgICAgcHV0cyhlbmQgLSBmaXJzdHByb3AtPnMpOworICAgICAgICAg ICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICArK2ZpcnN0bGluZSwgKytmaXJzdHByb3A7Cist LS0gODMzLDg3MSAtLS0tCisgIAorICAgICAgc2F3bm9uYmxhbmsgPSAxOworICAgICAgaWYgKG93 ZWJsYW5rKSB7CishICAgICAgIGZwdXR3YyhMJ1xuJywgc3Rkb3V0KTsKKyAgICAgICAgb3dlYmxh bmsgPSAwOworICAgICAgfQorICAKKyEgICAgIGRlbGltaXQoKGNvbnN0IHdjaGFyX3QgKiBjb25z dCAqKSBpbmxpbmVzLAorISAgICAgICAgICAgICAoY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICopIGVu ZGxpbmUsCisgICAgICAgICAgICAgIGJvZHljaGFycywgcmVwZWF0LCBib2R5LCBkaXYsIDAsIDAs IHByb3BzKTsKKyAgCisgICAgICBpZiAoZXhwZWwpCishICAgICAgIG1hcmtzdXBlcmYoKGNvbnN0 IHdjaGFyX3QgKiBjb25zdCAqKSBpbmxpbmVzLAorISAgICAgICAgICAgICAgICAgIChjb25zdCB3 Y2hhcl90ICogY29uc3QgKikgZW5kbGluZSwgcHJvcHMpOworICAKKyAgICAgIGZpcnN0bGluZSA9 IGlubGluZXMsIGZpcnN0cHJvcCA9IHByb3BzOworKyAKKyAgICAgIGRvIHsKKyAgICAgICAgaWYg KGlzYm9kaWxlc3MoZmlyc3Rwcm9wKSkgeworICAgICAgICAgIGlmICghaXNpbnZpcyhmaXJzdHBy b3ApICYmICEoZXhwZWwgJiYgaXNzdXBlcmYoZmlyc3Rwcm9wKSkpIHsKKyAgICAgICAgICAgIGZv ciAoZW5kID0gKmZpcnN0bGluZTsgICplbmQ7ICArK2VuZCk7CishICAgICAgICAgICBpZiAoIXJl cGVhdCB8fCAoZmlyc3Rwcm9wLT5yYyA9PSBMJyAnICYmICFmaXJzdHByb3AtPnMpKSB7CishICAg ICAgICAgICAgIHdoaWxlIChlbmQgPiAqZmlyc3RsaW5lICYmIGVuZFstMV0gPT0gTCcgJykgLS1l bmQ7CishICAgICAgICAgICAgICplbmQgPSBMJ1wwJzsKKyEgICAgICAgICAgICAgZndwcmludGYo c3Rkb3V0LCBMIiVsc1xuIiwgKmZpcnN0bGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBlbHNlIHsKKyAgICAgICAgICAgICAgbiA9IHdpZHRoIC0gZmlyc3Rwcm9wLT5wIC0gZmlyc3Rw cm9wLT5zOworICAgICAgICAgICAgICBpZiAobiA8IDApIHsKKyEgICAgICAgICAgICAgICBzd3By aW50ZihlcnJtc2csZXJybXNnX3NpemUsaW1wb3NzaWJpbGl0eSw1KTsKKyAgICAgICAgICAgICAg ICBnb3RvIHBhcmNsZWFudXA7CisgICAgICAgICAgICAgIH0KKyEgICAgICAgICAgICAgZndwcmlu dGYoc3Rkb3V0LCBMIiUuKmxzIiwgZmlyc3Rwcm9wLT5wLCAqZmlyc3RsaW5lKTsKKyAgICAgICAg ICAgICAgZm9yIChpID0gbjsgIGk7ICAtLWkpCishICAgICAgICAgICAgICAgZnB1dHdjKGZpcnN0 cHJvcC0+cmMsIHN0ZG91dCk7CishICAgICAgICAgICAgIGZ3cHJpbnRmKHN0ZG91dCwgTCIlbHNc biIsIGVuZCAtIGZpcnN0cHJvcC0+cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAg ICAgICAgICsrZmlyc3RsaW5lLCArK2ZpcnN0cHJvcDsKKyoqKioqKioqKioqKioqKgorKioqIDg0 OCw4NzUgKioqKgorICAgICAgICBmb3IgKG5leHRsaW5lID0gZmlyc3RsaW5lICsgMSwgbmV4dHBy b3AgPSBmaXJzdHByb3AgKyAxOworICAgICAgICAgICAgIG5leHRsaW5lIDwgZW5kbGluZSAmJiAh aXNib2RpbGVzcyhuZXh0cHJvcCkgJiYgIWlzZmlyc3QobmV4dHByb3ApOworICAgICAgICAgICAg ICsrbmV4dGxpbmUsICsrbmV4dHByb3ApOworISAKKyAgICAgICAgcHJlZml4ID0gcHJlZml4YmFr LCBzdWZmaXggPSBzdWZmaXhiYWs7CishICAgICAgIHNldGFmZml4ZXMoKGNvbnN0IGNoYXIgKiBj b25zdCAqKSBmaXJzdGxpbmUsCishICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKiBjb25z dCAqKSBuZXh0bGluZSwgZmlyc3Rwcm9wLCBib2R5Y2hhcnMsCisgICAgICAgICAgICAgICAgICAg cXVvdGVjaGFycywgaGFuZywgYm9keSwgcXVvdGUsICZhZnAsICZmcywgJnByZWZpeCwgJnN1ZmZp eCk7CisgICAgICAgIGlmICh3aWR0aCA8PSBwcmVmaXggKyBzdWZmaXgpIHsKKyEgICAgICAgICBz cHJpbnRmKGVycm1zZywKKyEgICAgICAgICAgICAgICAgICI8d2lkdGg+ICglZCkgPD0gPHByZWZp eD4gKCVkKSArIDxzdWZmaXg+ICglZClcbiIsCisgICAgICAgICAgICAgICAgICB3aWR0aCwgcHJl Zml4LCBzdWZmaXgpOworICAgICAgICAgIGdvdG8gcGFyY2xlYW51cDsKKyAgICAgICAgfQorICAK KyAgICAgICAgb3V0bGluZXMgPQorISAgICAgICAgIHJlZm9ybWF0KChjb25zdCBjaGFyICogY29u c3QgKikgZmlyc3RsaW5lLAorISAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICogY29uc3Qg KikgbmV4dGxpbmUsCisgICAgICAgICAgICAgICAgICAgYWZwLCBmcywgaGFuZywgcHJlZml4LCBz dWZmaXgsIHdpZHRoLCBjYXAsCisgICAgICAgICAgICAgICAgICAgZml0LCBndWVzcywganVzdCwg bGFzdCwgUmVwb3J0LCB0b3VjaCwgZXJybXNnKTsKKyAgICAgICAgaWYgKCplcnJtc2cpIGdvdG8g cGFyY2xlYW51cDsKKy0gCisgICAgICAgIGZvciAobGluZSA9IG91dGxpbmVzOyAgKmxpbmU7ICAr K2xpbmUpCishICAgICAgICAgcHV0cygqbGluZSk7CishIAorICAgICAgICBmcmVlbGluZXMob3V0 bGluZXMpOworICAgICAgICBvdXRsaW5lcyA9IE5VTEw7CisgIAorLS0tIDg3NSw5MDAgLS0tLQor ICAgICAgICBmb3IgKG5leHRsaW5lID0gZmlyc3RsaW5lICsgMSwgbmV4dHByb3AgPSBmaXJzdHBy b3AgKyAxOworICAgICAgICAgICAgIG5leHRsaW5lIDwgZW5kbGluZSAmJiAhaXNib2RpbGVzcyhu ZXh0cHJvcCkgJiYgIWlzZmlyc3QobmV4dHByb3ApOworICAgICAgICAgICAgICsrbmV4dGxpbmUs ICsrbmV4dHByb3ApOworISAgICAgICAKKyAgICAgICAgcHJlZml4ID0gcHJlZml4YmFrLCBzdWZm aXggPSBzdWZmaXhiYWs7CishICAgICAgIHNldGFmZml4ZXMoKGNvbnN0IHdjaGFyX3QgKiBjb25z dCAqKSBmaXJzdGxpbmUsCishICAgICAgICAgICAgICAgICAgKGNvbnN0IHdjaGFyX3QgKiBjb25z dCAqKSBuZXh0bGluZSwgZmlyc3Rwcm9wLCBib2R5Y2hhcnMsCisgICAgICAgICAgICAgICAgICAg cXVvdGVjaGFycywgaGFuZywgYm9keSwgcXVvdGUsICZhZnAsICZmcywgJnByZWZpeCwgJnN1ZmZp eCk7CisgICAgICAgIGlmICh3aWR0aCA8PSBwcmVmaXggKyBzdWZmaXgpIHsKKyEgICAgICAgICBz d3ByaW50ZihlcnJtc2csZXJybXNnX3NpemUsCishICAgICAgICAgICAgICAgICBMIjx3aWR0aD4g KCVkKSA8PSA8cHJlZml4PiAoJWQpICsgPHN1ZmZpeD4gKCVkKVxuIiwKKyAgICAgICAgICAgICAg ICAgIHdpZHRoLCBwcmVmaXgsIHN1ZmZpeCk7CisgICAgICAgICAgZ290byBwYXJjbGVhbnVwOwor ICAgICAgICB9CisgIAorICAgICAgICBvdXRsaW5lcyA9CishICAgICAgICAgcmVmb3JtYXQoKGNv bnN0IHdjaGFyX3QgKiBjb25zdCAqKSBmaXJzdGxpbmUsCishICAgICAgICAgICAgICAgICAgKGNv bnN0IHdjaGFyX3QgKiBjb25zdCAqKSBuZXh0bGluZSwKKyAgICAgICAgICAgICAgICAgICBhZnAs IGZzLCBoYW5nLCBwcmVmaXgsIHN1ZmZpeCwgd2lkdGgsIGNhcCwKKyAgICAgICAgICAgICAgICAg ICBmaXQsIGd1ZXNzLCBqdXN0LCBsYXN0LCBSZXBvcnQsIHRvdWNoLCBlcnJtc2cpOworICAgICAg ICBpZiAoKmVycm1zZykgZ290byBwYXJjbGVhbnVwOworICAgICAgICBmb3IgKGxpbmUgPSBvdXRs aW5lczsgICpsaW5lOyAgKytsaW5lKQorISAgICAgICAgIGZ3cHJpbnRmKHN0ZG91dCwgTCIlbHNc biIsICpsaW5lKTsKKyAgICAgICAgZnJlZWxpbmVzKG91dGxpbmVzKTsKKyAgICAgICAgb3V0bGlu ZXMgPSBOVUxMOworICAKKyoqKioqKioqKioqKioqKgorKioqIDg4NCw4OTAgKioqKgorICAgIH0K KyAgCisgIHBhcmNsZWFudXA6CishIAorICAgIGlmIChib2R5Y2hhcnMpIGZyZWVjaGFyc2V0KGJv ZHljaGFycyk7CisgICAgaWYgKHByb3RlY3RjaGFycykgZnJlZWNoYXJzZXQocHJvdGVjdGNoYXJz KTsKKyAgICBpZiAocXVvdGVjaGFycykgZnJlZWNoYXJzZXQocXVvdGVjaGFycyk7CistLS0gOTA5 LDkxNSAtLS0tCisgICAgfQorICAKKyAgcGFyY2xlYW51cDoKKyEgICBpZiAod2VudikgZnJlZSh3 ZW52KTsKKyAgICBpZiAoYm9keWNoYXJzKSBmcmVlY2hhcnNldChib2R5Y2hhcnMpOworICAgIGlm IChwcm90ZWN0Y2hhcnMpIGZyZWVjaGFyc2V0KHByb3RlY3RjaGFycyk7CisgICAgaWYgKHF1b3Rl Y2hhcnMpIGZyZWVjaGFyc2V0KHF1b3RlY2hhcnMpOworKioqKioqKioqKioqKioqCisqKiogODk0 LDkwMSAqKioqCisgICAgaWYgKG91dGxpbmVzKSBmcmVlbGluZXMob3V0bGluZXMpOworICAKKyAg ICBlcnJvdXQgPSBFcnIgPyBzdGRlcnIgOiBzdGRvdXQ7CishICAgaWYgKCplcnJtc2cpIGZwcmlu dGYoZXJyb3V0LCAicGFyIGVycm9yOlxuJS4qcyIsIGVycm1zZ19zaXplLCBlcnJtc2cpOworISAg IGlmICh2ZXJzaW9uKSBmcHV0cygicGFyIDEuNTJcbiIsZXJyb3V0KTsKKyAgICBpZiAoaGVscCkg ICAgZnB1dHModXNhZ2Vtc2csZXJyb3V0KTsKKyAgCisgICAgcmV0dXJuICplcnJtc2cgPyBFWElU X0ZBSUxVUkUgOiBFWElUX1NVQ0NFU1M7CistLS0gOTE5LDkzMCAtLS0tCisgICAgaWYgKG91dGxp bmVzKSBmcmVlbGluZXMob3V0bGluZXMpOworICAKKyAgICBlcnJvdXQgPSBFcnIgPyBzdGRlcnIg OiBzdGRvdXQ7CishICAgaWYgKCplcnJtc2cpIGZ3cHJpbnRmKGVycm91dCwgTCJwYXIgZXJyb3I6 XG4lLipscyIsIGVycm1zZ19zaXplLCBlcnJtc2cpOworISAjaWZkZWYgTk9XSURUSAorISAgIGlm ICh2ZXJzaW9uKSBmcHV0d3MoTCJwYXIgMS41Mi1pMThuLjQgKHdpdGhvdXQgd2N3aWR0aCgpIHN1 cHBvcnQpXG4iLGVycm91dCk7CishICNlbHNlCishICAgaWYgKHZlcnNpb24pIGZwdXR3cyhMInBh ciAxLjUyLWkxOG4uNFxuIixlcnJvdXQpOworISAjZW5kaWYKKyAgICBpZiAoaGVscCkgICAgZnB1 dHModXNhZ2Vtc2csZXJyb3V0KTsKKyAgCisgICAgcmV0dXJuICplcnJtc2cgPyBFWElUX0ZBSUxV UkUgOiBFWElUX1NVQ0NFU1M7CivQotC+0LvRjNC60L4g0LIgLi4vUGFyMTUyLXVuaWNvZGUvOiBw YXIuYy5vcmlnCitkaWZmIC1jIC4vcGFyLmRvYyAuLi9QYXIxNTItdW5pY29kZS9wYXIuZG9jCisq KiogLi9wYXIuZG9jCTIwMDEtMDQtMzAgMDE6MTc6MjguMDAwMDAwMDAwICswNDAwCistLS0gLi4v UGFyMTUyLXVuaWNvZGUvcGFyLmRvYwkyMDE5LTEwLTI2IDE3OjIxOjA4LjU0ODA1MDg1MyArMDMw MAorKioqKioqKioqKioqKioqCisqKiogMSw2ICoqKioKKyAgICAqKioqKioqKioqKioqKioqKioq KioKKyAgICAqIHBhci5kb2MgICAgICAgICAgICoKKyEgICAqIGZvciBQYXIgMS41MiAgICAgICoK KyAgICAqIENvcHlyaWdodCAyMDAxIGJ5ICoKKyAgICAqIEFkYW0gTS4gQ29zdGVsbG8gICoKKyAg ICAqKioqKioqKioqKioqKioqKioqKioKKy0tLSAxLDYgLS0tLQorICAgICoqKioqKioqKioqKioq KioqKioqKgorICAgICogcGFyLmRvYyAgICAgICAgICAgKgorISAgICogZm9yIFBhciAxLjUyIGkx OG4gKgorICAgICogQ29weXJpZ2h0IDIwMDEgYnkgKgorICAgICogQWRhbSBNLiBDb3N0ZWxsbyAg KgorICAgICoqKioqKioqKioqKioqKioqKioqKgorZGlmZiAtYyAuL3Byb3RvTWFrZWZpbGUgLi4v UGFyMTUyLXVuaWNvZGUvcHJvdG9NYWtlZmlsZQorKioqIC4vcHJvdG9NYWtlZmlsZQkyMDAxLTAz LTA5IDAzOjUzOjI1LjAwMDAwMDAwMCArMDMwMAorLS0tIC4uL1BhcjE1Mi11bmljb2RlL3Byb3Rv TWFrZWZpbGUJMjAxOS0xMC0yNiAxNzoyMTowOC41NDgwNTA4NTMgKzAzMDAKKyoqKioqKioqKioq KioqKgorKioqIDQ3LDUzICoqKioKKyAgIyBFeGFtcGxlIChmb3IgU29sYXJpcyAyLnggd2l0aCBT UEFSQ29tcGlsZXIgQyk6CisgICMgQ0MgPSBjYyAtYyAtTyAtcyAtWGMgLURET05URlJFRQorICAK KyEgQ0MgPSBjYyAtYworICAKKyAgIyBEZWZpbmUgTElOSzEgYW5kIExJTksyIHNvIHRoYXQgdGhl IGNvbW1hbmQKKyAgIworLS0tIDQ3LDUzIC0tLS0KKyAgIyBFeGFtcGxlIChmb3IgU29sYXJpcyAy Lnggd2l0aCBTUEFSQ29tcGlsZXIgQyk6CisgICMgQ0MgPSBjYyAtYyAtTyAtcyAtWGMgLURET05U RlJFRQorICAKKyEgQ0MgPSBjYyAtc3RkPWM5OSAtYworICAKKyAgIyBEZWZpbmUgTElOSzEgYW5k IExJTksyIHNvIHRoYXQgdGhlIGNvbW1hbmQKKyAgIworZGlmZiAtYyAuL3JlZm9ybWF0LmMgLi4v UGFyMTUyLXVuaWNvZGUvcmVmb3JtYXQuYworKioqIC4vcmVmb3JtYXQuYwkyMDAxLTAzLTIyIDA3 OjE3OjE1LjAwMDAwMDAwMCArMDMwMAorLS0tIC4uL1BhcjE1Mi11bmljb2RlL3JlZm9ybWF0LmMJ MjAxOS0xMC0yNiAxNzoyMTowOC41NDgwNTA4NTMgKzAzMDAKKyoqKioqKioqKioqKioqKgorKioq IDEsOSAqKioqCishIC8qKioqKioqKioqKioqKioqKioqKiovCishIC8qIHJlZm9ybWF0LmMgICAg ICAgICovCishIC8qIGZvciBQYXIgMS41MiAgICAgICovCishIC8qIENvcHlyaWdodCAyMDAxIGJ5 ICovCishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICovCishIC8qKioqKioqKioqKioqKioqKioqKiov CisgIAorICAvKiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAqLworICAKKy0tLSAxLDExIC0t LS0KKyEgLyoqKioqKioqKioqKioqKioqKioqKioqLworISAvKiByZWZvcm1hdC5jICAgICAgICAg ICovCishIC8qIGZvciBQYXIgMS41Mi1pMThuLjQgKi8KKyEgLyogQ29weXJpZ2h0IDIwMDEgYnkg ICAqLworISAvKiBBZGFtIE0uIENvc3RlbGxvICAgICovCishIC8qIE1vZGlmaWVkIGJ5ICAgICAg ICAgKi8KKyEgLyogSsOpcsO0bWUgUG91aWxsZXIgICAgICovCishIC8qKioqKioqKioqKioqKioq KioqKioqKi8KKyAgCisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisgIAorKioq KioqKioqKioqKioqCisqKiogMTYsMjEgKioqKgorLS0tIDE4LDI0IC0tLS0KKyAgI2luY2x1ZGUg PHN0ZGlvLmg+CisgICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgI2luY2x1ZGUgPHN0cmluZy5oPgor KyAjaW5jbHVkZSA8d2N0eXBlLmg+CisgIAorICAjdW5kZWYgTlVMTAorICAjZGVmaW5lIE5VTEwg KCh2b2lkICopIDApCisqKioqKioqKioqKioqKioKKyoqKiAzMyw0NiAqKioqCisgIHR5cGVkZWYg dW5zaWduZWQgY2hhciB3ZmxhZ190OworICAKKyAgdHlwZWRlZiBzdHJ1Y3Qgd29yZCB7CishICAg Y29uc3QgY2hhciAqY2hyczsgICAgICAgLyogUG9pbnRlciB0byB0aGUgY2hhcmFjdGVycyBpbiB0 aGUgd29yZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChOT1QgdGVybWluYXRl ZCBieSAnXDAnKS4gICAgICAgICAgICAgKi8KKyAgICBzdHJ1Y3Qgd29yZCAqcHJldiwgICAgICAv KiBQb2ludGVyIHRvIHByZXZpb3VzIHdvcmQuICAgICAgICAgICAgICovCisgICAgICAgICAgICAg ICAgKm5leHQsICAgICAgLyogUG9pbnRlciB0byBuZXh0IHdvcmQuICAgICAgICAgICAgICAgICAq LworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN1cHBvc2luZyB0aGlzIHdvcmQgd2Vy ZSB0aGUgZmlyc3QuLi4gKi8KKyAgICAgICAgICAgICAgICAqbmV4dGxpbmU7ICAvKiAgIFBvaW50 ZXIgdG8gZmlyc3Qgd29yZCBpbiBuZXh0IGxpbmUuICovCisgICAgaW50IHNjb3JlLCAgICAgICAg ICAgICAgLyogICBWYWx1ZSBvZiB0aGUgb2JqZWN0aXZlIGZ1bmN0aW9uLiAgICAqLworISAgICAg ICBsZW5ndGg7ICAgICAgICAgICAgIC8qIExlbmd0aCBvZiB0aGlzIHdvcmQuICAgICAgICAgICAg ICAgICAgKi8KKyAgICB3ZmxhZ190IGZsYWdzOyAgICAgICAgICAvKiBOb3RhYmxlIHByb3BlcnRp ZXMgb2YgdGhpcyB3b3JkLiAgICAgICovCisgIH0gd29yZDsKKyAgCistLS0gMzYsNTAgLS0tLQor ICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgd2ZsYWdfdDsKKyAgCisgIHR5cGVkZWYgc3RydWN0IHdv cmQgeworISAgIGNvbnN0IHdjaGFyX3QgKmNocnM7ICAgIC8qIFBvaW50ZXIgdG8gdGhlIGNoYXJh Y3RlcnMgaW4gdGhlIHdvcmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoTk9U IHRlcm1pbmF0ZWQgYnkgJ1wwJykuICAgICAgICAgICAgICovCisgICAgc3RydWN0IHdvcmQgKnBy ZXYsICAgICAgLyogUG9pbnRlciB0byBwcmV2aW91cyB3b3JkLiAgICAgICAgICAgICAqLworICAg ICAgICAgICAgICAgICpuZXh0LCAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCB3b3JkLiAgICAgICAg ICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdXBwb3NpbmcgdGhp cyB3b3JkIHdlcmUgdGhlIGZpcnN0Li4uICovCisgICAgICAgICAgICAgICAgKm5leHRsaW5lOyAg LyogICBQb2ludGVyIHRvIGZpcnN0IHdvcmQgaW4gbmV4dCBsaW5lLiAqLworICAgIGludCBzY29y ZSwgICAgICAgICAgICAgIC8qICAgVmFsdWUgb2YgdGhlIG9iamVjdGl2ZSBmdW5jdGlvbi4gICAg Ki8KKyEgICAgICAgbGVuZ3RoLCAgICAgICAgICAgICAvKiBMZW5ndGggKGluIHdpZGVjaGFyKSBv ZiB0aGlzIHdvcmQuICAgICovCishICAgICAgIHdpZHRoOyAgICAgICAgICAgICAgLyogVmlzdWFs IHdpZHRoIG9mIHRoaXMgd29yZC4gICAgICAgICAgICAqLworICAgIHdmbGFnX3QgZmxhZ3M7ICAg ICAgICAgIC8qIE5vdGFibGUgcHJvcGVydGllcyBvZiB0aGlzIHdvcmQuICAgICAgKi8KKyAgfSB3 b3JkOworICAKKyoqKioqKioqKioqKioqKgorKioqIDU3LDczICoqKioKKyAgI2RlZmluZSBpc2N1 cmlvdXModykgKCgodyktPmZsYWdzICYgMikgIT0gMCkKKyAgI2RlZmluZSBpc2NhcGl0YWwodykg KCgodyktPmZsYWdzICYgNCkgIT0gMCkKKyAgCisgIAorICBzdGF0aWMgaW50IGNoZWNrY2FwaXRh bCh3b3JkICp3KQorICAvKiBSZXR1cm5zIDEgaWYgKncgaXMgY2FwaXRhbGl6ZWQgYWNjb3JkaW5n IHRvIHRoZSBkZWZpbml0aW9uICovCisgIC8qIGluIHBhci5kb2MgKGFzc3VtaW5nIDxjYXA+IGlz IDApLCBvciAwIGlmIG5vdC4gICAgICAgICAgICAgKi8KKyAgeworISAgIGNvbnN0IGNoYXIgKnAs ICplbmQ7CisgIAorICAgIGZvciAocCA9IHctPmNocnMsIGVuZCA9IHAgKyB3LT5sZW5ndGg7Cish ICAgICAgICBwIDwgZW5kICYmICFpc2FsbnVtKCoodW5zaWduZWQgY2hhciAqKXApOworICAgICAg ICAgKytwKTsKKyEgICByZXR1cm4gcCA8IGVuZCAmJiAhaXNsb3dlcigqKHVuc2lnbmVkIGNoYXIg KilwKTsKKyAgfQorICAKKyAgCistLS0gNjEsOTkgLS0tLQorICAjZGVmaW5lIGlzY3VyaW91cyh3 KSAoKCh3KS0+ZmxhZ3MgJiAyKSAhPSAwKQorICAjZGVmaW5lIGlzY2FwaXRhbCh3KSAoKCh3KS0+ ZmxhZ3MgJiA0KSAhPSAwKQorICAKKysgc3RhdGljIGludCBnZXRXaWR0aChjb25zdCB3Y2hhcl90 ICpiZWcsIGNvbnN0IHdjaGFyX3QgKmVuZCkKKysgLyogQ29tcHV0ZSAodmlzdWFsKSB3aWR0aCBv ZiBhICB3b3JkLiBUaGlzIGZ1bmN0aW9uIGlzIGF3YXJlICovCisrIC8qIGFib3V0IGRvdWJsZS13 aWR0aCBjaGFyYWN0ZXJzIHVzZWQgaW4gb3JpZW50YWwgbGFuZ2FnZXMuICAqLworKyB7CisrICAg aW50IHJldCwgdG1wOworKyAgIAorKyAgIGZvciAocmV0ID0gMDsgYmVnICE9IGVuZDsgYmVnKysp IHsKKysgI2lmZGVmIE5PV0lEVEgKKysgICAgIHRtcCA9IDE7CisrICNlbHNlCisrICAgICB0bXAg PSB3Y3dpZHRoKCpiZWcpOworKyAjZW5kaWYKKysgICAgIC8vIEJVRzogSXQgaXMgbm90IHJlYWxs eSBlYXN5IHRvIGhhbmRsZSBjYXNlIG9mIHplcm8gd2lkdGggY2hhcmFjdGVycy4KKysgICAgIC8v IElmIHdlIGRvbid0IGRvIHRoaXMsIHNpemUgbWFsbGxvYyBmb3IgcTEgd2lsbCBiZSBsZXNzIHRo YW4gcmVhbCAKKysgICAgIC8vIHNpemUgYW5kIHByb2dyYW0gd2lsbCBzZWdmYXVsdC4gU28gSSBw cmVmZXIgdG8gaGF2ZSBhIGJ1ZyB0aGFuIGEgc2VnZmF1bHQuCisrICAgICBpZiAodG1wIDw9IDAp CisrICAgICAgIHRtcCA9IDE7CisrICAgICByZXQgKz0gdG1wOworKyAgIH0KKysgICAKKysgICBy ZXR1cm4gcmV0OworKyB9CisgIAorICBzdGF0aWMgaW50IGNoZWNrY2FwaXRhbCh3b3JkICp3KQor ICAvKiBSZXR1cm5zIDEgaWYgKncgaXMgY2FwaXRhbGl6ZWQgYWNjb3JkaW5nIHRvIHRoZSBkZWZp bml0aW9uICovCisgIC8qIGluIHBhci5kb2MgKGFzc3VtaW5nIDxjYXA+IGlzIDApLCBvciAwIGlm IG5vdC4gICAgICAgICAgICAgKi8KKyAgeworISAgIGNvbnN0IHdjaGFyX3QgKnAsICplbmQ7Cisg IAorICAgIGZvciAocCA9IHctPmNocnMsIGVuZCA9IHAgKyB3LT5sZW5ndGg7CishICAgICAgICBw IDwgZW5kICYmICFpc3dhbG51bSgqcCk7CisgICAgICAgICArK3ApOworISAgIHJldHVybiBwIDwg ZW5kICYmICFpc3dsb3dlcigqcCk7CisgIH0KKyAgCisgIAorKioqKioqKioqKioqKioqCisqKiog NzUsOTMgKioqKgorICAvKiBSZXR1cm5zIDEgaWYgKncgaXMgY3VyaW91cyBhY2NvcmRpbmcgdG8g Ki8KKyAgLyogdGhlIGRlZmluaXRpb24gaW4gcGFyLmRvYywgb3IgMCBpZiBub3QuICovCisgIHsK KyEgICBjb25zdCBjaGFyICpzdGFydCwgKnA7CishICAgY2hhciBjaDsKKyAgCisgICAgZm9yIChz dGFydCA9IHctPmNocnMsIHAgPSBzdGFydCArIHctPmxlbmd0aDsgIHAgPiBzdGFydDsgIC0tcCkg eworICAgICAgY2ggPSBwWy0xXTsKKyEgICAgIGlmIChpc2FsbnVtKCoodW5zaWduZWQgY2hhciAq KSZjaCkpIHJldHVybiAwOworISAgICAgaWYgKGNoID09ICcuJyB8fCBjaCA9PSAnPycgfHwgY2gg PT0gJyEnIHx8IGNoID09ICc6JykgYnJlYWs7CisgICAgfQorICAKKyAgICBpZiAocCA8PSBzdGFy dCArIDEpIHJldHVybiAwOworICAKKyAgICAtLXA7CishICAgZG8gaWYgKGlzYWxudW0oKih1bnNp Z25lZCBjaGFyICopLS1wKSkgcmV0dXJuIDE7CisgICAgd2hpbGUgKHAgPiBzdGFydCk7CisgIAor ICAgIHJldHVybiAwOworLS0tIDEwMSwxMTkgLS0tLQorICAvKiBSZXR1cm5zIDEgaWYgKncgaXMg Y3VyaW91cyBhY2NvcmRpbmcgdG8gKi8KKyAgLyogdGhlIGRlZmluaXRpb24gaW4gcGFyLmRvYywg b3IgMCBpZiBub3QuICovCisgIHsKKyEgICBjb25zdCB3Y2hhcl90ICpzdGFydCwgKnA7CishICAg d2NoYXJfdCBjaDsKKyAgCisgICAgZm9yIChzdGFydCA9IHctPmNocnMsIHAgPSBzdGFydCArIHct Pmxlbmd0aDsgIHAgPiBzdGFydDsgIC0tcCkgeworICAgICAgY2ggPSBwWy0xXTsKKyEgICAgIGlm IChpc3dhbG51bSgqKHdjaGFyX3QgKikmY2gpKSByZXR1cm4gMDsKKyEgICAgIGlmIChjaCA9PSBM Jy4nIHx8IGNoID09IEwnPycgfHwgY2ggPT0gTCchJyB8fCBjaCA9PSBMJzonKSBicmVhazsKKyAg ICB9CisgIAorICAgIGlmIChwIDw9IHN0YXJ0ICsgMSkgcmV0dXJuIDA7CisgIAorICAgIC0tcDsK KyEgICBkbyBpZiAoaXN3YWxudW0oKih3Y2hhcl90ICopLS1wKSkgcmV0dXJuIDE7CisgICAgd2hp bGUgKHAgPiBzdGFydCk7CisgIAorICAgIHJldHVybiAwOworKioqKioqKioqKioqKioqCisqKiog OTUsMTI1ICoqKioKKyAgCisgIAorICBzdGF0aWMgaW50IHNpbXBsZWJyZWFrcyh3b3JkICpoZWFk LCB3b3JkICp0YWlsLCBpbnQgTCwgaW50IGxhc3QpCishIAorISAvKiBDaG9vc2VzIGxpbmUgYnJl YWtzIGluIGEgbGlzdCBvZiB3b3JkcyB3aGljaCBtYXhpbWl6ZSB0aGUgbGVuZ3RoIG9mIHRoZSAg ICovCishIC8qIHNob3J0ZXN0IGxpbmUuICBMIGlzIHRoZSBtYXhpbXVtIGxpbmUgbGVuZ3RoLiAg VGhlIGxhc3QgbGluZSBjb3VudHMgYXMgYSAgKi8KKyEgLyogbGluZSBvbmx5IGlmIGxhc3QgaXMg bm9uLXplcm8uIF9oZWFkIG11c3QgcG9pbnQgdG8gYSBkdW1teSB3b3JkLCBhbmQgdGFpbCAqLwor ISAvKiBtdXN0IHBvaW50IHRvIHRoZSBsYXN0IHdvcmQsIHdob3NlIG5leHQgZmllbGQgbXVzdCBi ZSBOVUxMLiAgUmV0dXJucyB0aGUgICovCishIC8qIGxlbmd0aCBvZiB0aGUgc2hvcnRlc3QgbGlu ZSBvbiBzdWNjZXNzLCAtMSBpZiB0aGVyZSBpcyBhIHdvcmQgb2YgbGVuZ3RoICAgKi8KKyEgLyog Z3JlYXRlciB0aGFuIEwsIG9yIEwgaWYgdGhlcmUgYXJlIG5vIGxpbmVzLiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLworICB7CisgICAgd29yZCAqdzEsICp3MjsKKyAgICBpbnQgbGlu ZWxlbiwgc2NvcmU7CisgIAorICAgIGlmICghaGVhZC0+bmV4dCkgcmV0dXJuIEw7CisgIAorISAg IGZvciAodzEgPSB0YWlsLCBsaW5lbGVuID0gdzEtPmxlbmd0aDsKKyAgICAgICAgIHcxICE9IGhl YWQgJiYgbGluZWxlbiA8PSBMOworISAgICAgICAgbGluZWxlbiArPSBpc3NoaWZ0ZWQodzEpLCB3 MSA9IHcxLT5wcmV2LCBsaW5lbGVuICs9IDEgKyB3MS0+bGVuZ3RoKSB7CisgICAgICB3MS0+c2Nv cmUgPSBsYXN0ID8gbGluZWxlbiA6IEw7CisgICAgICB3MS0+bmV4dGxpbmUgPSBOVUxMOworICAg IH0KKyAgCisgICAgZm9yICggOyAgdzEgIT0gaGVhZDsgIHcxID0gdzEtPnByZXYpIHsKKyAgICAg IHcxLT5zY29yZSA9IC0xOworISAgICAgZm9yIChsaW5lbGVuID0gdzEtPmxlbmd0aCwgIHcyID0g dzEtPm5leHQ7CisgICAgICAgICAgIGxpbmVsZW4gPD0gTDsKKyEgICAgICAgICAgbGluZWxlbiAr PSAxICsgaXNzaGlmdGVkKHcyKSArIHcyLT5sZW5ndGgsICB3MiA9IHcyLT5uZXh0KSB7CisgICAg ICAgIHNjb3JlID0gdzItPnNjb3JlOworICAgICAgICBpZiAobGluZWxlbiA8IHNjb3JlKSBzY29y ZSA9IGxpbmVsZW47CisgICAgICAgIGlmIChzY29yZSA+PSB3MS0+c2NvcmUpIHsKKy0tLSAxMjEs MTUyIC0tLS0KKyAgCisgIAorICBzdGF0aWMgaW50IHNpbXBsZWJyZWFrcyh3b3JkICpoZWFkLCB3 b3JkICp0YWlsLCBpbnQgTCwgaW50IGxhc3QpCishIC8qIENob29zZXMgbGluZSAgYnJlYWtzIGlu IGEgIGxpc3Qgb2Ygd29yZHMgIHdoaWNoIG1heGltaXplICovCishIC8qIHRoZSBsZW5ndGggb2Yg IHRoZSBzaG9ydGVzdCBsaW5lLiBMIGlzICB0aGUgbWF4aW11bSBsaW5lICovCishIC8qIGxlbmd0 aC4gVGhlIGxhc3QgIGxpbmUgY291bnRzIGFzIGEgbGluZSBvbmx5ICBpZiBsYXN0IGlzICovCish IC8qIG5vbi16ZXJvLiBfaGVhZCAgbXVzdCBwb2ludCAgdG8gYSAgZHVtbXkgd29yZCwgIGFuZCB0 YWlsICovCishIC8qIG11c3QgcG9pbnQgIHRvIHRoZSBsYXN0ICB3b3JkLCB3aG9zZSBuZXh0IGZp ZWxkICBtdXN0IGJlICovCishIC8qIE5VTEwuICBSZXR1cm5zICB0aGUgIGxlbmd0aCAgb2YgIHRo ZSAgc2hvcnRlc3QgIGxpbmUgIG9uICovCishIC8qIHN1Y2Nlc3MsIC0xIGlmIHRoZXJlIGlzIGEg d29yZCBvZiBsZW5ndGggZ3JlYXRlciB0aGFuIEwsICovCishIC8qIG9yIEwgaWYgdGhlcmUgYXJl IG5vIGxpbmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHsKKyAgICB3b3Jk ICp3MSwgKncyOworICAgIGludCBsaW5lbGVuLCBzY29yZTsKKyAgCisgICAgaWYgKCFoZWFkLT5u ZXh0KSByZXR1cm4gTDsKKyAgCishICAgZm9yICh3MSA9IHRhaWwsIGxpbmVsZW4gPSB3MS0+d2lk dGg7CisgICAgICAgICB3MSAhPSBoZWFkICYmIGxpbmVsZW4gPD0gTDsKKyEgICAgICAgIGxpbmVs ZW4gKz0gaXNzaGlmdGVkKHcxKSwgdzEgPSB3MS0+cHJldiwgbGluZWxlbiArPSAxICsgdzEtPndp ZHRoKSB7CisgICAgICB3MS0+c2NvcmUgPSBsYXN0ID8gbGluZWxlbiA6IEw7CisgICAgICB3MS0+ bmV4dGxpbmUgPSBOVUxMOworICAgIH0KKyAgCisgICAgZm9yICggOyAgdzEgIT0gaGVhZDsgIHcx ID0gdzEtPnByZXYpIHsKKyAgICAgIHcxLT5zY29yZSA9IC0xOworISAgICAgZm9yIChsaW5lbGVu ID0gdzEtPndpZHRoLCAgdzIgPSB3MS0+bmV4dDsKKyAgICAgICAgICAgbGluZWxlbiA8PSBMOwor ISAgICAgICAgICBsaW5lbGVuICs9IDEgKyBpc3NoaWZ0ZWQodzIpICsgdzItPndpZHRoLCAgdzIg PSB3Mi0+bmV4dCkgeworICAgICAgICBzY29yZSA9IHcyLT5zY29yZTsKKyAgICAgICAgaWYgKGxp bmVsZW4gPCBzY29yZSkgc2NvcmUgPSBsaW5lbGVuOworICAgICAgICBpZiAoc2NvcmUgPj0gdzEt PnNjb3JlKSB7CisqKioqKioqKioqKioqKioKKyoqKiAxNjgsMTc0ICoqKioKKyAgCisgICAgc2hv cnRlc3QgPSBzaW1wbGVicmVha3MoaGVhZCx0YWlsLHRhcmdldCxsYXN0KTsKKyAgICBpZiAoc2hv cnRlc3QgPCAwKSB7CishICAgICBzcHJpbnRmKGVycm1zZyxpbXBvc3NpYmlsaXR5LDEpOworICAg ICAgcmV0dXJuOworICAgIH0KKyAgCistLS0gMTk1LDIwMSAtLS0tCisgIAorICAgIHNob3J0ZXN0 ID0gc2ltcGxlYnJlYWtzKGhlYWQsdGFpbCx0YXJnZXQsbGFzdCk7CisgICAgaWYgKHNob3J0ZXN0 IDwgMCkgeworISAgICAgc3dwcmludGYoZXJybXNnLGVycm1zZ19zaXplLGltcG9zc2liaWxpdHks MSk7CisgICAgICByZXR1cm47CisgICAgfQorICAKKyoqKioqKioqKioqKioqKgorKioqIDE3OCwx ODYgKioqKgorICAgIHcxID0gdGFpbDsKKyAgICBkbyB7CisgICAgICB3MS0+c2NvcmUgPSAtMTsK KyEgICAgIGZvciAobGluZWxlbiA9IHcxLT5sZW5ndGgsICB3MiA9IHcxLT5uZXh0OworICAgICAg ICAgICBsaW5lbGVuIDw9IHRhcmdldDsKKyEgICAgICAgICAgbGluZWxlbiArPSAxICsgaXNzaGlm dGVkKHcyKSArIHcyLT5sZW5ndGgsICB3MiA9IHcyLT5uZXh0KSB7CisgICAgICAgIGV4dHJhID0g dGFyZ2V0IC0gbGluZWxlbjsKKyAgICAgICAgbWlubGVuID0gc2hvcnRlc3Q7CisgICAgICAgIGlm ICh3MikKKy0tLSAyMDUsMjEzIC0tLS0KKyAgICB3MSA9IHRhaWw7CisgICAgZG8geworICAgICAg dzEtPnNjb3JlID0gLTE7CishICAgICBmb3IgKGxpbmVsZW4gPSB3MS0+d2lkdGgsICB3MiA9IHcx LT5uZXh0OworICAgICAgICAgICBsaW5lbGVuIDw9IHRhcmdldDsKKyEgICAgICAgICAgbGluZWxl biArPSAxICsgaXNzaGlmdGVkKHcyKSArIHcyLT53aWR0aCwgIHcyID0gdzItPm5leHQpIHsKKyAg ICAgICAgZXh0cmEgPSB0YXJnZXQgLSBsaW5lbGVuOworICAgICAgICBtaW5sZW4gPSBzaG9ydGVz dDsKKyAgICAgICAgaWYgKHcyKQorKioqKioqKioqKioqKioqCisqKiogMjAyLDIwOCAqKioqCisg ICAgfSB3aGlsZSAodzEgIT0gaGVhZCk7CisgIAorICAgIGlmIChoZWFkLT5uZXh0LT5zY29yZSA8 IDApCishICAgICBzcHJpbnRmKGVycm1zZyxpbXBvc3NpYmlsaXR5LDIpOworICB9CisgIAorICAK Ky0tLSAyMjksMjM1IC0tLS0KKyAgICB9IHdoaWxlICh3MSAhPSBoZWFkKTsKKyAgCisgICAgaWYg KGhlYWQtPm5leHQtPnNjb3JlIDwgMCkKKyEgICAgIHN3cHJpbnRmKGVycm1zZyxlcnJtc2dfc2l6 ZSxpbXBvc3NpYmlsaXR5LDIpOworICB9CisgIAorICAKKyoqKioqKioqKioqKioqKgorKioqIDIy NSwyMzMgKioqKgorICAgIHcxID0gdGFpbDsKKyAgICBkbyB7CisgICAgICB3MS0+c2NvcmUgPSBM OworISAgICAgZm9yIChudW1nYXBzID0gMCwgZXh0cmEgPSBMIC0gdzEtPmxlbmd0aCwgdzIgPSB3 MS0+bmV4dDsKKyAgICAgICAgICAgZXh0cmEgPj0gMDsKKyEgICAgICAgICAgKytudW1nYXBzLCBl eHRyYSAtPSAxICsgaXNzaGlmdGVkKHcyKSArIHcyLT5sZW5ndGgsIHcyID0gdzItPm5leHQpIHsK KyAgICAgICAgZ2FwID0gbnVtZ2FwcyA/IChleHRyYSArIG51bWdhcHMgLSAxKSAvIG51bWdhcHMg OiBMOworICAgICAgICBpZiAodzIpCisgICAgICAgICAgc2NvcmUgPSB3Mi0+c2NvcmU7CistLS0g MjUyLDI2MCAtLS0tCisgICAgdzEgPSB0YWlsOworICAgIGRvIHsKKyAgICAgIHcxLT5zY29yZSA9 IEw7CishICAgICBmb3IgKG51bWdhcHMgPSAwLCBleHRyYSA9IEwgLSB3MS0+d2lkdGgsIHcyID0g dzEtPm5leHQ7CisgICAgICAgICAgIGV4dHJhID49IDA7CishICAgICAgICAgICsrbnVtZ2Fwcywg ZXh0cmEgLT0gMSArIGlzc2hpZnRlZCh3MikgKyB3Mi0+d2lkdGgsIHcyID0gdzItPm5leHQpIHsK KyAgICAgICAgZ2FwID0gbnVtZ2FwcyA/IChleHRyYSArIG51bWdhcHMgLSAxKSAvIG51bWdhcHMg OiBMOworICAgICAgICBpZiAodzIpCisgICAgICAgICAgc2NvcmUgPSB3Mi0+c2NvcmU7CisqKioq KioqKioqKioqKioKKyoqKiAyNDcsMjUzICoqKioKKyAgCisgICAgbWF4Z2FwID0gaGVhZC0+bmV4 dC0+c2NvcmU7CisgICAgaWYgKG1heGdhcCA+PSBMKSB7CishICAgICBzdHJjcHkoZXJybXNnLCAi Q2Fubm90IGp1c3RpZnkuXG4iKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIAorLS0tIDI3NCwy ODAgLS0tLQorICAKKyAgICBtYXhnYXAgPSBoZWFkLT5uZXh0LT5zY29yZTsKKyAgICBpZiAobWF4 Z2FwID49IEwpIHsKKyEgICAgIHdjc2NweShlcnJtc2csIEwiQ2Fubm90IGp1c3RpZnkuXG4iKTsK KyAgICAgIHJldHVybjsKKyAgICB9CisgIAorKioqKioqKioqKioqKioqCisqKiogMjU3LDI2NSAq KioqCisgICAgdzEgPSB0YWlsOworICAgIGRvIHsKKyAgICAgIHcxLT5zY29yZSA9IC0xOworISAg ICAgZm9yIChudW1nYXBzID0gMCwgZXh0cmEgPSBMIC0gdzEtPmxlbmd0aCwgdzIgPSB3MS0+bmV4 dDsKKyAgICAgICAgICAgZXh0cmEgPj0gMDsKKyEgICAgICAgICAgKytudW1nYXBzLCBleHRyYSAt PSAxICsgaXNzaGlmdGVkKHcyKSArIHcyLT5sZW5ndGgsIHcyID0gdzItPm5leHQpIHsKKyAgICAg ICAgZ2FwID0gbnVtZ2FwcyA/IChleHRyYSArIG51bWdhcHMgLSAxKSAvIG51bWdhcHMgOiBMOwor ICAgICAgICBpZiAodzIpCisgICAgICAgICAgc2NvcmUgPSB3Mi0+c2NvcmU7CistLS0gMjg0LDI5 MiAtLS0tCisgICAgdzEgPSB0YWlsOworICAgIGRvIHsKKyAgICAgIHcxLT5zY29yZSA9IC0xOwor ISAgICAgZm9yIChudW1nYXBzID0gMCwgZXh0cmEgPSBMIC0gdzEtPndpZHRoLCB3MiA9IHcxLT5u ZXh0OworICAgICAgICAgICBleHRyYSA+PSAwOworISAgICAgICAgICArK251bWdhcHMsIGV4dHJh IC09IDEgKyBpc3NoaWZ0ZWQodzIpICsgdzItPndpZHRoLCB3MiA9IHcyLT5uZXh0KSB7CisgICAg ICAgIGdhcCA9IG51bWdhcHMgPyAoZXh0cmEgKyBudW1nYXBzIC0gMSkgLyBudW1nYXBzIDogTDsK KyAgICAgICAgaWYgKHcyKQorICAgICAgICAgIHNjb3JlID0gdzItPnNjb3JlOworKioqKioqKioq KioqKioqCisqKiogMjg4LDMyNyAqKioqCisgICAgfSB3aGlsZSAodzEgIT0gaGVhZCk7CisgIAor ICAgIGlmIChoZWFkLT5uZXh0LT5zY29yZSA8IDApCishICAgICBzcHJpbnRmKGVycm1zZyxpbXBv c3NpYmlsaXR5LDMpOworICB9CisgIAorICAKKyEgY2hhciAqKnJlZm9ybWF0KAorISAgIGNvbnN0 IGNoYXIgKiBjb25zdCAqaW5saW5lcywgY29uc3QgY2hhciAqIGNvbnN0ICplbmRsaW5lLCBpbnQg YWZwLCBpbnQgZnMsCisgICAgaW50IGhhbmcsIGludCBwcmVmaXgsIGludCBzdWZmaXgsIGludCB3 aWR0aCwgaW50IGNhcCwgaW50IGZpdCwgaW50IGd1ZXNzLAorICAgIGludCBqdXN0LCBpbnQgbGFz dCwgaW50IFJlcG9ydCwgaW50IHRvdWNoLCBlcnJtc2dfdCBlcnJtc2cKKyAgKQorICB7CisgICAg aW50IG51bWluLCBhZmZpeCwgTCwgb25maXJzdHdvcmQgPSAxLCBsaW5lbGVuLCBudW1vdXQsIG51 bWdhcHMsIGV4dHJhLCBwaGFzZTsKKyEgICBjb25zdCBjaGFyICogY29uc3QgKmxpbmUsICoqc3Vm Zml4ZXMgPSBOVUxMLCAqKnN1ZiwgKmVuZCwgKnAxLCAqcDI7CishICAgY2hhciAqcTEsICpxMiwg KipvdXRsaW5lcyA9IE5VTEw7CisgICAgd29yZCBkdW1teSwgKmhlYWQsICp0YWlsLCAqdzEsICp3 MjsKKyAgICBidWZmZXIgKnBidWYgPSBOVUxMOworICAKKyAgLyogSW5pdGlhbGl6YXRpb246ICov CistIAorICAgICplcnJtc2cgPSAnXDAnOworICAgIGR1bW15Lm5leHQgPSBkdW1teS5wcmV2ID0g TlVMTDsKKyAgICBkdW1teS5mbGFncyA9IDA7CisgICAgaGVhZCA9IHRhaWwgPSAmZHVtbXk7Cisg ICAgbnVtaW4gPSBlbmRsaW5lIC0gaW5saW5lczsKKyAgICBpZiAobnVtaW4gPD0gMCkgeworISAg ICAgc3ByaW50ZihlcnJtc2csaW1wb3NzaWJpbGl0eSw0KTsKKyAgICAgIGdvdG8gcmZjbGVhbnVw OworICAgIH0KKyAgICBudW1nYXBzID0gZXh0cmEgPSAwOyAgLyogdW5uZWNlc3NhcnksIGJ1dCBx dWlldHMgY29tcGlsZXIgd2FybmluZ3MgKi8KKyAgCisgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBw b2ludGVycyB0byB0aGUgc3VmZml4ZXM6ICovCisgIAorISAgIHN1ZmZpeGVzID0gbWFsbG9jKG51 bWluICogc2l6ZW9mIChjb25zdCBjaGFyICopKTsKKyAgICBpZiAoIXN1ZmZpeGVzKSB7CishICAg ICBzdHJjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAgIGdvdG8gcmZjbGVhbnVwOworICAgIH0K KyAgCistLS0gMzE1LDM1MyAtLS0tCisgICAgfSB3aGlsZSAodzEgIT0gaGVhZCk7CisgIAorICAg IGlmIChoZWFkLT5uZXh0LT5zY29yZSA8IDApCishICAgICBzd3ByaW50ZihlcnJtc2csZXJybXNn X3NpemUsaW1wb3NzaWJpbGl0eSwzKTsKKyAgfQorICAKKyAgCishIHdjaGFyX3QgKipyZWZvcm1h dCgKKyEgICBjb25zdCB3Y2hhcl90ICogY29uc3QgKmlubGluZXMsIGNvbnN0IHdjaGFyX3QgKiBj b25zdCAqZW5kbGluZSwgaW50IGFmcCwgaW50IGZzLAorICAgIGludCBoYW5nLCBpbnQgcHJlZml4 LCBpbnQgc3VmZml4LCBpbnQgd2lkdGgsIGludCBjYXAsIGludCBmaXQsIGludCBndWVzcywKKyAg ICBpbnQganVzdCwgaW50IGxhc3QsIGludCBSZXBvcnQsIGludCB0b3VjaCwgZXJybXNnX3QgZXJy bXNnCisgICkKKyAgeworICAgIGludCBudW1pbiwgYWZmaXgsIEwsIG9uZmlyc3R3b3JkID0gMSwg bGluZWxlbiwgbnVtb3V0LCBudW1nYXBzLCBleHRyYSwgcGhhc2U7CishICAgY29uc3Qgd2NoYXJf dCAqIGNvbnN0ICpsaW5lLCAqKnN1ZmZpeGVzID0gTlVMTCwgKipzdWYsICplbmQsICpwMSwgKnAy OworISAgIHdjaGFyX3QgKnExLCAqcTIsICoqb3V0bGluZXMgPSBOVUxMOworICAgIHdvcmQgZHVt bXksICpoZWFkLCAqdGFpbCwgKncxLCAqdzI7CisgICAgYnVmZmVyICpwYnVmID0gTlVMTDsKKyAg CisgIC8qIEluaXRpYWxpemF0aW9uOiAqLworICAgICplcnJtc2cgPSAnXDAnOworICAgIGR1bW15 Lm5leHQgPSBkdW1teS5wcmV2ID0gTlVMTDsKKyAgICBkdW1teS5mbGFncyA9IDA7CisgICAgaGVh ZCA9IHRhaWwgPSAmZHVtbXk7CisgICAgbnVtaW4gPSBlbmRsaW5lIC0gaW5saW5lczsKKyAgICBp ZiAobnVtaW4gPD0gMCkgeworISAgICAgc3dwcmludGYoZXJybXNnLGVycm1zZ19zaXplLGltcG9z c2liaWxpdHksNCk7CisgICAgICBnb3RvIHJmY2xlYW51cDsKKyAgICB9CisgICAgbnVtZ2FwcyA9 IGV4dHJhID0gMDsgIC8qIHVubmVjZXNzYXJ5LCBidXQgcXVpZXRzIGNvbXBpbGVyIHdhcm5pbmdz ICovCisgIAorICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcG9pbnRlcnMgdG8gdGhlIHN1ZmZpeGVz OiAqLworICAKKyEgICBzdWZmaXhlcyA9IG1hbGxvYyhudW1pbiAqIHNpemVvZiAoY29uc3Qgd2No YXJfdCAqKSk7CisgICAgaWYgKCFzdWZmaXhlcykgeworISAgICAgd2NzY3B5KGVycm1zZyxvdXRv Zm1lbSk7CisgICAgICBnb3RvIHJmY2xlYW51cDsKKyAgICB9CisgIAorKioqKioqKioqKioqKioq CisqKiogMzM0LDM0MSAqKioqCisgICAgZG8geworICAgICAgZm9yIChlbmQgPSAqbGluZTsgICpl bmQ7ICArK2VuZCk7CisgICAgICBpZiAoZW5kIC0gKmxpbmUgPCBhZmZpeCkgeworISAgICAgICBz cHJpbnRmKGVycm1zZywKKyEgICAgICAgICAgICAgICAiTGluZSAlZCBzaG9ydGVyIHRoYW4gPHBy ZWZpeD4gKyA8c3VmZml4PiA9ICVkICsgJWQgPSAlZFxuIiwKKyAgICAgICAgICAgICAgICBsaW5l IC0gaW5saW5lcyArIDEsIHByZWZpeCwgc3VmZml4LCBhZmZpeCk7CisgICAgICAgIGdvdG8gcmZj bGVhbnVwOworICAgICAgfQorLS0tIDM2MCwzNjcgLS0tLQorICAgIGRvIHsKKyAgICAgIGZvciAo ZW5kID0gKmxpbmU7ICAqZW5kOyAgKytlbmQpOworICAgICAgaWYgKGVuZCAtICpsaW5lIDwgYWZm aXgpIHsKKyEgICAgICAgc3dwcmludGYoZXJybXNnLGVycm1zZ19zaXplLAorISAgICAgICAgICAg ICAgIEwiTGluZSAlZCBzaG9ydGVyIHRoYW4gPHByZWZpeD4gKyA8c3VmZml4PiA9ICVkICsgJWQg PSAlZFxuIiwKKyAgICAgICAgICAgICAgICBsaW5lIC0gaW5saW5lcyArIDEsIHByZWZpeCwgc3Vm Zml4LCBhZmZpeCk7CisgICAgICAgIGdvdG8gcmZjbGVhbnVwOworICAgICAgfQorKioqKioqKioq KioqKioqCisqKiogMzQzLDM1OSAqKioqCisgICAgICAqc3VmID0gZW5kOworICAgICAgcDEgPSAq bGluZSArIHByZWZpeDsKKyAgICAgIGZvciAoOzspIHsKKyEgICAgICAgd2hpbGUgKHAxIDwgZW5k ICYmICpwMSA9PSAnICcpICsrcDE7CisgICAgICAgIGlmIChwMSA9PSBlbmQpIGJyZWFrOworICAg ICAgICBwMiA9IHAxOworICAgICAgICBpZiAob25maXJzdHdvcmQpIHsKKyAgICAgICAgICBwMSA9 ICpsaW5lICsgcHJlZml4OworICAgICAgICAgIG9uZmlyc3R3b3JkID0gMDsKKyAgICAgICAgfQor ISAgICAgICB3aGlsZSAocDIgPCBlbmQgJiYgKnAyICE9ICcgJykgKytwMjsKKyAgICAgICAgdzEg PSBtYWxsb2Moc2l6ZW9mICh3b3JkKSk7CisgICAgICAgIGlmICghdzEpIHsKKyEgICAgICAgICBz dHJjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAgICAgICBnb3RvIHJmY2xlYW51cDsKKyAgICAg ICAgfQorICAgICAgICB3MS0+bmV4dCA9IE5VTEw7CistLS0gMzY5LDM4NSAtLS0tCisgICAgICAq c3VmID0gZW5kOworICAgICAgcDEgPSAqbGluZSArIHByZWZpeDsKKyAgICAgIGZvciAoOzspIHsK KyEgICAgICAgd2hpbGUgKHAxIDwgZW5kICYmICpwMSA9PSBMJyAnKSArK3AxOworICAgICAgICBp ZiAocDEgPT0gZW5kKSBicmVhazsKKyAgICAgICAgcDIgPSBwMTsKKyAgICAgICAgaWYgKG9uZmly c3R3b3JkKSB7CisgICAgICAgICAgcDEgPSAqbGluZSArIHByZWZpeDsKKyAgICAgICAgICBvbmZp cnN0d29yZCA9IDA7CisgICAgICAgIH0KKyEgICAgICAgd2hpbGUgKHAyIDwgZW5kICYmICpwMiAh PSBMJyAnKSArK3AyOworICAgICAgICB3MSA9IG1hbGxvYyhzaXplb2YgKHdvcmQpKTsKKyAgICAg ICAgaWYgKCF3MSkgeworISAgICAgICAgIHdjc2NweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAg ICAgIGdvdG8gcmZjbGVhbnVwOworICAgICAgICB9CisgICAgICAgIHcxLT5uZXh0ID0gTlVMTDsK KyoqKioqKioqKioqKioqKgorKioqIDM2MSwzNjYgKioqKgorLS0tIDM4NywzOTMgLS0tLQorICAg ICAgICB0YWlsID0gdGFpbC0+bmV4dCA9IHcxOworICAgICAgICB3MS0+Y2hycyA9IHAxOworICAg ICAgICB3MS0+bGVuZ3RoID0gcDIgLSBwMTsKKysgICAgICAgdzEtPndpZHRoID0gZ2V0V2lkdGgo cDEsIHAyKTsKKyAgICAgICAgdzEtPmZsYWdzID0gMDsKKyAgICAgICAgcDEgPSBwMjsKKyAgICAg IH0KKyoqKioqKioqKioqKioqKgorKioqIDM3NywzODIgKioqKgorLS0tIDQwNCw0MTAgLS0tLQor ICAgICAgICAgIGlmIChpc2N1cmlvdXModzEpKSB7CisgICAgICAgICAgICBpZiAodzEtPmNocnNb dzEtPmxlbmd0aF0gJiYgdzEtPmNocnMgKyB3MS0+bGVuZ3RoICsgMSA9PSB3Mi0+Y2hycykgewor ICAgICAgICAgICAgICB3Mi0+bGVuZ3RoICs9IHcxLT5sZW5ndGggKyAxOworKyAgICAgICAgICAg ICB3Mi0+d2lkdGggKz0gdzEtPndpZHRoICsgMTsKKyAgICAgICAgICAgICAgdzItPmNocnMgPSB3 MS0+Y2hyczsKKyAgICAgICAgICAgICAgdzItPnByZXYgPSB3MS0+cHJldjsKKyAgICAgICAgICAg ICAgdzItPnByZXYtPm5leHQgPSB3MjsKKyoqKioqKioqKioqKioqKgorKioqIDM5Nyw0MTYgKioq KgorICAKKyAgICBpZiAoUmVwb3J0KQorICAgICAgZm9yICh3MiA9IGhlYWQtPm5leHQ7ICB3Mjsg IHcyID0gdzItPm5leHQpIHsKKyEgICAgICAgaWYgKHcyLT5sZW5ndGggPiBMKSB7CishICAgICAg ICAgbGluZWxlbiA9IHcyLT5sZW5ndGg7CisgICAgICAgICAgaWYgKGxpbmVsZW4gPiBlcnJtc2df c2l6ZSAtIDE3KQorICAgICAgICAgICAgbGluZWxlbiA9IGVycm1zZ19zaXplIC0gMTc7CishICAg ICAgICAgc3ByaW50ZihlcnJtc2csICJXb3JkIHRvbyBsb25nOiAlLipzXG4iLCBsaW5lbGVuLCB3 Mi0+Y2hycyk7CisgICAgICAgICAgZ290byByZmNsZWFudXA7CisgICAgICAgIH0KKyAgICAgIH0K KyAgICBlbHNlCisgICAgICBmb3IgKHcyID0gaGVhZC0+bmV4dDsgIHcyOyAgdzIgPSB3Mi0+bmV4 dCkKKyEgICAgICAgd2hpbGUgKHcyLT5sZW5ndGggPiBMKSB7CisgICAgICAgICAgdzEgPSBtYWxs b2Moc2l6ZW9mICh3b3JkKSk7CisgICAgICAgICAgaWYgKCF3MSkgeworISAgICAgICAgICAgc3Ry Y3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICAgICAgICBnb3RvIHJmY2xlYW51cDsKKyAgICAg ICAgICB9CisgICAgICAgICAgdzEtPm5leHQgPSB3MjsKKy0tLSA0MjUsNDQ0IC0tLS0KKyAgCisg ICAgaWYgKFJlcG9ydCkKKyAgICAgIGZvciAodzIgPSBoZWFkLT5uZXh0OyAgdzI7ICB3MiA9IHcy LT5uZXh0KSB7CishICAgICAgIGlmICh3Mi0+d2lkdGggPiBMKSB7CishICAgICAgICAgbGluZWxl biA9IHcyLT53aWR0aDsKKyAgICAgICAgICBpZiAobGluZWxlbiA+IGVycm1zZ19zaXplIC0gMTcp CisgICAgICAgICAgICBsaW5lbGVuID0gZXJybXNnX3NpemUgLSAxNzsKKyEgICAgICAgICBzd3By aW50ZihlcnJtc2csZXJybXNnX3NpemUsIEwiV29yZCB0b28gbG9uZzogJS4qbHNcbiIsIGxpbmVs ZW4sIHcyLT5jaHJzKTsKKyAgICAgICAgICBnb3RvIHJmY2xlYW51cDsKKyAgICAgICAgfQorICAg ICAgfQorICAgIGVsc2UKKyAgICAgIGZvciAodzIgPSBoZWFkLT5uZXh0OyAgdzI7ICB3MiA9IHcy LT5uZXh0KQorISAgICAgICB3aGlsZSAodzItPndpZHRoID4gTCkgeworICAgICAgICAgIHcxID0g bWFsbG9jKHNpemVvZiAod29yZCkpOworICAgICAgICAgIGlmICghdzEpIHsKKyEgICAgICAgICAg IHdjc2NweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgICAgICAgZ290byByZmNsZWFudXA7Cisg ICAgICAgICAgfQorICAgICAgICAgIHcxLT5uZXh0ID0gdzI7CisqKioqKioqKioqKioqKioKKyoq KiA0MjAsNDI2ICoqKioKKy0tLSA0NDgsNDU2IC0tLS0KKyAgICAgICAgICB3MS0+Y2hycyA9IHcy LT5jaHJzOworICAgICAgICAgIHcyLT5jaHJzICs9IEw7CisgICAgICAgICAgdzEtPmxlbmd0aCA9 IEw7CisrICAgICAgICAgdzEtPndpZHRoID0gZ2V0V2lkdGgodzEtPmNocnMsIHcxLT5jaHJzICsg TCk7CisgICAgICAgICAgdzItPmxlbmd0aCAtPSBMOworKyAgICAgICAgIHcyLT53aWR0aCAtPSB3 MS0+d2lkdGg7CisgICAgICAgICAgdzEtPmZsYWdzID0gMDsKKyAgICAgICAgICBpZiAoaXNjYXBp dGFsKHcyKSkgeworICAgICAgICAgICAgdzEtPmZsYWdzIHw9IFdfQ0FQSVRBTDsKKyoqKioqKioq KioqKioqKgorKioqIDQ0NCw0NTIgKioqKgorICAgICAgTCA9IDA7CisgICAgICB3MSA9IGhlYWQt Pm5leHQ7CisgICAgICB3aGlsZSAodzEpIHsKKyEgICAgICAgZm9yIChsaW5lbGVuID0gdzEtPmxl bmd0aCwgdzIgPSB3MS0+bmV4dDsKKyAgICAgICAgICAgICB3MiAhPSB3MS0+bmV4dGxpbmU7Cish ICAgICAgICAgICAgbGluZWxlbiArPSAxICsgaXNzaGlmdGVkKHcyKSArIHcyLT5sZW5ndGgsIHcy ID0gdzItPm5leHQpOworICAgICAgICBpZiAobGluZWxlbiA+IEwpIEwgPSBsaW5lbGVuOworICAg ICAgICB3MSA9IHcyOworICAgICAgfQorLS0tIDQ3NCw0ODIgLS0tLQorICAgICAgTCA9IDA7Cisg ICAgICB3MSA9IGhlYWQtPm5leHQ7CisgICAgICB3aGlsZSAodzEpIHsKKyEgICAgICAgZm9yIChs aW5lbGVuID0gdzEtPndpZHRoLCB3MiA9IHcxLT5uZXh0OworICAgICAgICAgICAgIHcyICE9IHcx LT5uZXh0bGluZTsKKyEgICAgICAgICAgICBsaW5lbGVuICs9IDEgKyBpc3NoaWZ0ZWQodzIpICsg dzItPndpZHRoLCB3MiA9IHcyLT5uZXh0KTsKKyAgICAgICAgaWYgKGxpbmVsZW4gPiBMKSBMID0g bGluZWxlbjsKKyAgICAgICAgdzEgPSB3MjsKKyAgICAgIH0KKyoqKioqKioqKioqKioqKgorKioq IDQ1NCw1MjAgKioqKgorICAKKyAgLyogQ29uc3RydWN0IHRoZSBsaW5lczogKi8KKyAgCishICAg cGJ1ZiA9IG5ld2J1ZmZlcihzaXplb2YgKGNoYXIgKiksIGVycm1zZyk7CisgICAgaWYgKCplcnJt c2cpIGdvdG8gcmZjbGVhbnVwOworICAKKyAgICBudW1vdXQgPSAwOworICAgIHcxID0gaGVhZC0+ bmV4dDsKKyAgICB3aGlsZSAobnVtb3V0IDwgaGFuZyB8fCB3MSkgeworICAgICAgaWYgKHcxKQor ISAgICAgICBmb3IgKHcyID0gdzEtPm5leHQsIG51bWdhcHMgPSAwLCBleHRyYSA9IEwgLSB3MS0+ bGVuZ3RoOworICAgICAgICAgICAgIHcyICE9IHcxLT5uZXh0bGluZTsKKyEgICAgICAgICAgICAr K251bWdhcHMsIGV4dHJhIC09IDEgKyBpc3NoaWZ0ZWQodzIpICsgdzItPmxlbmd0aCwgdzIgPSB3 Mi0+bmV4dCk7CisgICAgICBsaW5lbGVuID0gc3VmZml4IHx8IChqdXN0ICYmICh3MiB8fCBsYXN0 KSkgPworICAgICAgICAgICAgICAgICAgTCArIGFmZml4IDoKKyAgICAgICAgICAgICAgICAgIHcx ID8gcHJlZml4ICsgTCAtIGV4dHJhIDogcHJlZml4OworISAgICAgcTEgPSBtYWxsb2MoKGxpbmVs ZW4gKyAxKSAqIHNpemVvZiAoY2hhcikpOworICAgICAgaWYgKCFxMSkgeworISAgICAgICBzdHJj cHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAgICAgZ290byByZmNsZWFudXA7CisgICAgICB9Cisg ICAgICBhZGRpdGVtKHBidWYsICZxMSwgZXJybXNnKTsKKyAgICAgIGlmICgqZXJybXNnKSBnb3Rv IHJmY2xlYW51cDsKKyAgICAgICsrbnVtb3V0OworICAgICAgcTIgPSBxMSArIHByZWZpeDsKKyEg ICAgIGlmICAgICAgKG51bW91dCA8PSBudW1pbikgbWVtY3B5KHExLCBpbmxpbmVzW251bW91dCAt IDFdLCBwcmVmaXgpOworISAgICAgZWxzZSBpZiAobnVtaW4gID4gIGhhbmcgKSBtZW1jcHkocTEs IGVuZGxpbmVbLTFdLCAgICAgICAgIHByZWZpeCk7CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYg KGFmcCA+IHByZWZpeCkgYWZwID0gcHJlZml4OworISAgICAgICBtZW1jcHkocTEsIGVuZGxpbmVb LTFdLCBhZnApOworICAgICAgICBxMSArPSBhZnA7CishICAgICAgIHdoaWxlIChxMSA8IHEyKSAq cTErKyA9ICcgJzsKKyAgICAgIH0KKyAgICAgIHExID0gcTI7CisgICAgICBpZiAodzEpIHsKKyAg ICAgICAgcGhhc2UgPSBudW1nYXBzIC8gMjsKKyAgICAgICAgZm9yICh3MiA9IHcxOyAgOyAgKSB7 CishICAgICAgICAgbWVtY3B5KHExLCB3Mi0+Y2hycywgdzItPmxlbmd0aCk7CisgICAgICAgICAg cTEgKz0gdzItPmxlbmd0aDsKKyAgICAgICAgICB3MiA9IHcyLT5uZXh0OworICAgICAgICAgIGlm ICh3MiA9PSB3MS0+bmV4dGxpbmUpIGJyZWFrOworISAgICAgICAgICpxMSsrID0gJyAnOworICAg ICAgICAgIGlmIChqdXN0ICYmICh3MS0+bmV4dGxpbmUgfHwgbGFzdCkpIHsKKyAgICAgICAgICAg IHBoYXNlICs9IGV4dHJhOworICAgICAgICAgICAgd2hpbGUgKHBoYXNlID49IG51bWdhcHMpIHsK KyEgICAgICAgICAgICAgKnExKysgPSAnICc7CisgICAgICAgICAgICAgIHBoYXNlIC09IG51bWdh cHM7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorISAgICAgICAgIGlmIChpc3NoaWZ0ZWQo dzIpKSAqcTErKyA9ICcgJzsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcTIgKz0gbGluZWxl biAtIGFmZml4OworISAgICAgd2hpbGUgKHExIDwgcTIpICpxMSsrID0gJyAnOworICAgICAgcTIg PSBxMSArIHN1ZmZpeDsKKyEgICAgIGlmICAgICAgKG51bW91dCA8PSBudW1pbikgbWVtY3B5KHEx LCBzdWZmaXhlc1tudW1vdXQgLSAxXSwgc3VmZml4KTsKKyEgICAgIGVsc2UgaWYgKG51bWluICA+ ICBoYW5nICkgbWVtY3B5KHExLCBzdWZmaXhlc1tudW1pbiAgLSAxXSwgc3VmZml4KTsKKyAgICAg IGVsc2UgeworICAgICAgICBpZiAoZnMgPiBzdWZmaXgpIGZzID0gc3VmZml4OworISAgICAgICBt ZW1jcHkocTEsIHN1ZmZpeGVzW251bWluIC0gMV0sIGZzKTsKKyAgICAgICAgcTEgKz0gZnM7Cish ICAgICAgIHdoaWxlKHExIDwgcTIpICpxMSsrID0gJyAnOworICAgICAgfQorISAgICAgKnEyID0g J1wwJzsKKyAgICAgIGlmICh3MSkgdzEgPSB3MS0+bmV4dGxpbmU7CisgICAgfQorICAKKy0tLSA0 ODQsNTUwIC0tLS0KKyAgCisgIC8qIENvbnN0cnVjdCB0aGUgbGluZXM6ICovCisgIAorISAgIHBi dWYgPSBuZXdidWZmZXIoc2l6ZW9mICh3Y2hhcl90ICopLCBlcnJtc2cpOworICAgIGlmICgqZXJy bXNnKSBnb3RvIHJmY2xlYW51cDsKKyAgCisgICAgbnVtb3V0ID0gMDsKKyAgICB3MSA9IGhlYWQt Pm5leHQ7CisgICAgd2hpbGUgKG51bW91dCA8IGhhbmcgfHwgdzEpIHsKKyAgICAgIGlmICh3MSkK KyEgICAgICAgZm9yICh3MiA9IHcxLT5uZXh0LCBudW1nYXBzID0gMCwgZXh0cmEgPSBMIC0gdzEt PndpZHRoOworICAgICAgICAgICAgIHcyICE9IHcxLT5uZXh0bGluZTsKKyEgICAgICAgICAgICAr K251bWdhcHMsIGV4dHJhIC09IDEgKyBpc3NoaWZ0ZWQodzIpICsgdzItPndpZHRoLCB3MiA9IHcy LT5uZXh0KTsKKyAgICAgIGxpbmVsZW4gPSBzdWZmaXggfHwgKGp1c3QgJiYgKHcyIHx8IGxhc3Qp KSA/CisgICAgICAgICAgICAgICAgICBMICsgYWZmaXggOgorICAgICAgICAgICAgICAgICAgdzEg PyBwcmVmaXggKyBMIC0gZXh0cmEgOiBwcmVmaXg7CishICAgICBxMSA9IG1hbGxvYygobGluZWxl biArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CisgICAgICBpZiAoIXExKSB7CishICAgICAgIHdj c2NweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgICBnb3RvIHJmY2xlYW51cDsKKyAgICAgIH0K KyAgICAgIGFkZGl0ZW0ocGJ1ZiwgJnExLCBlcnJtc2cpOworICAgICAgaWYgKCplcnJtc2cpIGdv dG8gcmZjbGVhbnVwOworICAgICAgKytudW1vdXQ7CisgICAgICBxMiA9IHExICsgcHJlZml4Owor ISAgICAgaWYgICAgICAobnVtb3V0IDw9IG51bWluKSBtZW1jcHkocTEsIGlubGluZXNbbnVtb3V0 IC0gMV0sIHByZWZpeCAqIHNpemVvZih3Y2hhcl90KSk7CishICAgICBlbHNlIGlmIChudW1pbiAg PiAgaGFuZyApIG1lbWNweShxMSwgZW5kbGluZVstMV0sICAgICAgICAgcHJlZml4ICogc2l6ZW9m KHdjaGFyX3QpKTsKKyAgICAgIGVsc2UgeworICAgICAgICBpZiAoYWZwID4gcHJlZml4KSBhZnAg PSBwcmVmaXg7CishICAgICAgIG1lbWNweShxMSwgZW5kbGluZVstMV0sIGFmcCAqIHNpemVvZih3 Y2hhcl90KSk7CisgICAgICAgIHExICs9IGFmcDsKKyEgICAgICAgd2hpbGUgKHExIDwgcTIpICpx MSsrID0gTCcgJzsKKyAgICAgIH0KKyAgICAgIHExID0gcTI7CisgICAgICBpZiAodzEpIHsKKyAg ICAgICAgcGhhc2UgPSBudW1nYXBzIC8gMjsKKyAgICAgICAgZm9yICh3MiA9IHcxOyAgOyAgKSB7 CishICAgICAgICAgbWVtY3B5KHExLCB3Mi0+Y2hycywgdzItPmxlbmd0aCAqIHNpemVvZih3Y2hh cl90KSk7CisgICAgICAgICAgcTEgKz0gdzItPmxlbmd0aDsKKyAgICAgICAgICB3MiA9IHcyLT5u ZXh0OworICAgICAgICAgIGlmICh3MiA9PSB3MS0+bmV4dGxpbmUpIGJyZWFrOworISAgICAgICAg ICpxMSsrID0gTCcgJzsKKyAgICAgICAgICBpZiAoanVzdCAmJiAodzEtPm5leHRsaW5lIHx8IGxh c3QpKSB7CisgICAgICAgICAgICBwaGFzZSArPSBleHRyYTsKKyAgICAgICAgICAgIHdoaWxlIChw aGFzZSA+PSBudW1nYXBzKSB7CishICAgICAgICAgICAgICpxMSsrID0gTCcgJzsKKyAgICAgICAg ICAgICAgcGhhc2UgLT0gbnVtZ2FwczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CishICAg ICAgICAgaWYgKGlzc2hpZnRlZCh3MikpICpxMSsrID0gTCcgJzsKKyAgICAgICAgfQorICAgICAg fQorICAgICAgcTIgKz0gbGluZWxlbiAtIGFmZml4OworISAgICAgd2hpbGUgKHExIDwgcTIpICpx MSsrID0gTCcgJzsKKyAgICAgIHEyID0gcTEgKyBzdWZmaXg7CishICAgICBpZiAgICAgIChudW1v dXQgPD0gbnVtaW4pIG1lbWNweShxMSwgc3VmZml4ZXNbbnVtb3V0IC0gMV0sIHN1ZmZpeCAqIHNp emVvZih3Y2hhcl90KSk7CishICAgICBlbHNlIGlmIChudW1pbiAgPiAgaGFuZyApIG1lbWNweShx MSwgc3VmZml4ZXNbbnVtaW4gIC0gMV0sIHN1ZmZpeCAqIHNpemVvZih3Y2hhcl90KSk7CisgICAg ICBlbHNlIHsKKyAgICAgICAgaWYgKGZzID4gc3VmZml4KSBmcyA9IHN1ZmZpeDsKKyEgICAgICAg bWVtY3B5KHExLCBzdWZmaXhlc1tudW1pbiAtIDFdLCBmcyAqIHNpemVvZih3Y2hhcl90KSk7Cisg ICAgICAgIHExICs9IGZzOworISAgICAgICB3aGlsZShxMSA8IHEyKSAqcTErKyA9IEwnICc7Cisg ICAgICB9CishICAgICAqcTIgPSBMJ1wwJzsKKyAgICAgIGlmICh3MSkgdzEgPSB3MS0+bmV4dGxp bmU7CisgICAgfQorICAKKyoqKioqKioqKioqKioqKgorKioqIDU0Myw1NDcgKioqKgorLS0tIDU3 Myw1NzggLS0tLQorICAgICAgZnJlZWJ1ZmZlcihwYnVmKTsKKyAgICB9CisgIAorKyAgIAorICAg IHJldHVybiBvdXRsaW5lczsKKyAgfQorZGlmZiAtYyAuL3JlZm9ybWF0LmggLi4vUGFyMTUyLXVu aWNvZGUvcmVmb3JtYXQuaAorKioqIC4vcmVmb3JtYXQuaAkyMDAxLTAzLTA5IDAzOjUzOjQzLjAw MDAwMDAwMCArMDMwMAorLS0tIC4uL1BhcjE1Mi11bmljb2RlL3JlZm9ybWF0LmgJMjAxOS0xMC0y NiAxNzoyMTowOC41NDkwNTA4NTMgKzAzMDAKKyoqKioqKioqKioqKioqKgorKioqIDEsMTggKioq KgorISAvKioqKioqKioqKioqKioqKioqKioqLworISAvKiByZWZvcm1hdC5oICAgICAgICAqLwor ISAvKiBmb3IgUGFyIDEuNTIgICAgICAqLworISAvKiBDb3B5cmlnaHQgMjAwMSBieSAqLworISAv KiBBZGFtIE0uIENvc3RlbGxvICAqLworISAvKioqKioqKioqKioqKioqKioqKioqLworICAKKyAg LyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAgCisgIAorICAjaW5jbHVkZSAiZXJy bXNnLmgiCisgIAorISAKKyEgY2hhciAqKnJlZm9ybWF0KAorISAgIGNvbnN0IGNoYXIgKiBjb25z dCAqaW5saW5lcywgY29uc3QgY2hhciAqIGNvbnN0ICplbmRsaW5lLCBpbnQgYWZwLCBpbnQgZnMs CisgICAgaW50IGhhbmcsIGludCBwcmVmaXgsIGludCBzdWZmaXgsIGludCB3aWR0aCwgaW50IGNh cCwgaW50IGZpdCwgaW50IGd1ZXNzLAorICAgIGludCBqdXN0LCBpbnQgbGFzdCwgaW50IFJlcG9y dCwgaW50IHRvdWNoLCBlcnJtc2dfdCBlcnJtc2cKKyAgKTsKKy0tLSAxLDIwIC0tLS0KKyEgLyoq KioqKioqKioqKioqKioqKioqKioqLworISAvKiByZWZvcm1hdC5oICAgICAgICAgICovCishIC8q IGZvciBQYXIgMS41Mi1pMThuLjQgKi8KKyEgLyogQ29weXJpZ2h0IDIwMDEgYnkgICAqLworISAv KiBBZGFtIE0uIENvc3RlbGxvICAgICovCishIC8qIE1vZGlmaWVkIGJ5ICAgICAgICAgKi8KKyEg LyogSsOpcsO0bWUgUG91aWxsZXIgICAgICovCishIC8qKioqKioqKioqKioqKioqKioqKioqKi8K KyAgCisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisgIAorICAKKyAgI2luY2x1 ZGUgImVycm1zZy5oIgorKyAjaW5jbHVkZSA8d2NoYXIuaD4KKyAgCishIHdjaGFyX3QgKipyZWZv cm1hdCgKKyEgICBjb25zdCB3Y2hhcl90ICogY29uc3QgKmlubGluZXMsIGNvbnN0IHdjaGFyX3Qg KiBjb25zdCAqZW5kbGluZSwgaW50IGFmcCwgaW50IGZzLAorICAgIGludCBoYW5nLCBpbnQgcHJl Zml4LCBpbnQgc3VmZml4LCBpbnQgd2lkdGgsIGludCBjYXAsIGludCBmaXQsIGludCBndWVzcywK KyAgICBpbnQganVzdCwgaW50IGxhc3QsIGludCBSZXBvcnQsIGludCB0b3VjaCwgZXJybXNnX3Qg ZXJybXNnCisgICk7CitkaWZmIC1jIC4vcmVsZWFzZW5vdGVzIC4uL1BhcjE1Mi11bmljb2RlL3Jl bGVhc2Vub3RlcworKioqIC4vcmVsZWFzZW5vdGVzCTIwMDEtMDQtMzAgMDE6MTI6MDUuMDAwMDAw MDAwICswNDAwCistLS0gLi4vUGFyMTUyLXVuaWNvZGUvcmVsZWFzZW5vdGVzCTIwMTktMTAtMjYg MTc6MjE6MDguNTQ5MDUwODUzICswMzAwCisqKioqKioqKioqKioqKioKKyoqKiAxLDEyICoqKioK KyEgICAqKioqKioqKioqKioqKioqKioqKioKKyEgICAqIHJlbGVhc2Vub3RlcyAgICAgICoKKyEg ICAqIGZvciBQYXIgMS41MiAgICAgICoKKyEgICAqIENvcHlyaWdodCAyMDAxIGJ5ICoKKyEgICAq IEFkYW0gTS4gQ29zdGVsbG8gICoKKyEgICAqKioqKioqKioqKioqKioqKioqKioKKyAgCisgIAor ICBFYWNoIGVudHJ5IGJlbG93IGRlc2NyaWJlcyBjaGFuZ2VzIHNpbmNlIHRoZSBwcmV2aW91cyB2 ZXJzaW9uLgorICAKKyAgUGFyIDEuNTIgcmVsZWFzZWQgMjAwMS1BcHItMjkKKyAgICAgIEZpeGVk IGEgcG9ydGFiaWxpdHkgcHJvYmxlbSByZWdhcmRpbmcgdW5zaWduZWQgY2hhciB2ZXJzdXMgY2hh ci4KKy0tLSAxLDI4IC0tLS0KKyEgICAqKioqKioqKioqKioqKioqKioqKioqKgorISAgICogcmVs ZWFzZW5vdGVzICAgICAgICAqCishICAgKiBmb3IgUGFyIDEuNTItaTE4bi40ICoKKyEgICAqIENv cHlyaWdodCAyMDAxIGJ5ICAgKgorISAgICogQWRhbSBNLiBDb3N0ZWxsbyAgICAqCishICAgKiBN b2RpZmllZCBieSAgICAgICAgICoKKyEgICAqIErDqXLDtG1lIFBvdWlsbGVyICAgICAqCishICAg KioqKioqKioqKioqKioqKioqKioqKioKKyAgCisgIAorICBFYWNoIGVudHJ5IGJlbG93IGRlc2Ny aWJlcyBjaGFuZ2VzIHNpbmNlIHRoZSBwcmV2aW91cyB2ZXJzaW9uLgorKyBQYXIgMS41Mi1pMThu LjQgcmVsZWFzZWQgMjAwOS1NYXktMDUKKysgICAgIENoYW5nZSBuZWFybHkgYWxsIGNoYXIgaW4g d2NoYXJfdCByZW1vdmUgbmlnaHRtYXJlIG9mIHVuc2lnbmVkIGNoYXIgdnMgc2lnbmVkIGNoYXIK KysgICAgIEZpeCBidWdzIHdpdGggb3B0aW9uICdxJworKyAgICAgRml4IGJ1Z3Mgd2l0aCAnXG4n CisrIAorKyBQYXIgMS41Mi1pMThuLjMgcmVsZWFzZWQgMjAwNi1PY3QtMDMKKysgICAgIEZpeCBi dWcgd2l0aCBvcHRpb24gJ2cnCisrIAorKyBQYXIgMS41Mi1pMThuLjIgcmVsZWFzZWQgMjAwNi1B dWctMDMKKysgICAgIEZpeCBidWcgZGViaWFuICMzMTA0OTUuCisrIAorKyBQYXIgMS41Mi1pMThu LjEgcmVsZWFzZWQgMjAwNi1KdW4tMjIKKysgICAgIENoYW5nZWQgY2hhciBpbiB3Y2hhcl90LiBB bGxvdyBzdXBwb3J0IG9mIG11bHRpYnl0ZXMgY2hhcmFjdGVycy4KKysgICAgIEFkZGVkIHN1cHBv cnQgZm9yIGRvdWJsZS13aWR0aCBjaGFyYWN0ZXJzLgorICAKKyAgUGFyIDEuNTIgcmVsZWFzZWQg MjAwMS1BcHItMjkKKyAgICAgIEZpeGVkIGEgcG9ydGFiaWxpdHkgcHJvYmxlbSByZWdhcmRpbmcg dW5zaWduZWQgY2hhciB2ZXJzdXMgY2hhci4KK9Ce0LHRidC40LUg0L/QvtC00LrQsNGC0LDQu9C+ 0LPQuDogLi90ZXN0INC4IC4uL1BhcjE1Mi11bmljb2RlL3Rlc3QK --===============2087912845858697181==--