From mboxrd@z Thu Jan 1 00:00:00 1970 From: Cathryn Mataga Subject: [PATCH] call.c Date: Fri, 25 Dec 2009 03:35:40 -0800 Message-ID: <4B34A38C.3020200@junglevision.com> References: <4B142D5A.7010803@junglevision.com> <4B143564.2060206@junglevision.com> <4B143DC9.9060601@junglevision.com> <4B14B22E.6010901@junglevision.com> <4B1CD943.6030808@junglevision.com> <20091207162523.GC6537@x-berg.in-berlin.de> <4B1D5F4A.7050002@junglevision.com> <20091207202650.GM19524@x-berg.in-berlin.de> <4B1D84C4.8000206@exemail.com.au> <20091207235111.GS19524@x-berg.in-berlin.de> <4B1ED008.4090302@junglevision.com> <4B281839.8040509@junglevision.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------050603040601000801020200" Return-path: In-Reply-To: <4B281839.8040509@junglevision.com> Sender: linux-hams-owner@vger.kernel.org List-ID: To: Thomas Osterried Cc: linux-hams@vger.kernel.org This is a multi-part message in MIME format. --------------050603040601000801020200 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit This is a patch to call.c. This is against ax25-apps-0.0.8-rc2. Only one file is changed, call.c 1. Now supports UTF8 or IBM850 as the encoding style over AX25. 1a. Attention was paid to make sure that wide characters worked with East Asian fonts. 2. Now the screen can be resized. correctly. The program no longer crashes when it is resized. 3. Added a scrollback buffer. Use the up and down arrow keys or the page up/page down keys to scroll through history. After the screen begins scrolling, press 'up arrow' to view history. 4. Many visual quirks have been fixed. I tested with East-Asian fonts myself, and I tested with international latin characters by dragging from charmap. My US keyboard has no Alt-GR key, so I'm not sure how to type them directly here. I've been using this myself for the last week or so, and I can't find anything wrong, but, you know how that goes. I did check on gnome-terminal, and xterm, and also konsole. It seems to behave about the same on all of these, though, the keyboard is mapped slightly different with the number pad with some terminal emulators. This was compiled on a Fedora 12 system everything updated by me. This version is now dependent on iconv and wide character versions of ncurses, which I think should be everywhere these days. --------------050603040601000801020200 Content-Type: application/x-itunes-itlp; name="callintl.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="callintl.patch" LS0tIGNhbGwvY2FsbC5jCTIwMDktMDYtMjEgMDc6MDk6NDkuMDAwMDAwMDAwIC0wNzAwCisr KyBjYWxsaW50bC9jYWxsLmMJMjAwOS0xMi0yNSAwMzoxMjoyMy4zMjg2MDUxOTkgLTA4MDAK QEAgLTM1LDcgKzM1LDE0IEBACiAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KICNpbmNsdWRlIDx0 ZXJtaW9zLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8Y3Vyc2VzLmg+Cisj ZGVmaW5lIF9fVVNFX1hPUEVOCisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDx3Y3R5 cGUuaD4KKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCAxCisjaW5jbHVkZSA8bmN1 cnNlcy5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPGljb252Lmg+CisjaW5j bHVkZSA8c3lzL2lvY3RsLmg+CiAKICNpbmNsdWRlIDxuZXRheDI1L2F4MjUuaD4KICNpbmNs dWRlIDxuZXRyb20vbmV0cm9tLmg+CkBAIC03OCwxMCArODUsMTMgQEAKIHN0YXRpYyBjaGFy ICpteWNhbGwgPSBOVUxMOwogCiBzdGF0aWMgaW50IHN0ZGluX2lzX3R0eSA9IDE7CitzdGF0 aWMgaWNvbnZfdCBpYm04NTB0b3V0ZjggPSAwLHdjaGFydHRvaWJtODUwID0gMCwgd2NoYXJ0 dG91dGY4ID0gMCwgdXRmOHRvd2NoYXJ0ID0gMDsKIAogaW50IGludGVycnVwdGVkID0gRkFM U0U7CitzdGF0aWMgaW50IHNpZ3dpbmNoc2lnbmFsID0gRkFMU0U7CiBpbnQgcGFjbGVuID0g MDsKIGludCBmZDsKK2ludCBjdXJzb24gPSAxOwogCiAjZGVmaW5lIEdQX0ZJTEVOQU1FX1NJ WkUJMjU1CiB0eXBlZGVmIHN0cnVjdCB7CkBAIC05OCw3ICsxMDgsNyBAQAogCVdJTkRPVyAq cHRyOwogCWludCBtYXhfeTsKIAlpbnQgbWF4X3g7Ci0JY2hhciBzdHJpbmdbTUFYX0JVRkxF Tl07CisJd2NoYXJfdCBzdHJpbmdbTUFYX0JVRkxFTl07CiAJdW5zaWduZWQgbG9uZyBieXRl czsKIAlpbnQgY3Vyc19wb3M7CiB9IHRfd2luOwpAQCAtMTA3LDYgKzExNywyMjkgQEAKICNk ZWZpbmUgU0xBVkVNT0RFCTAwMgkvKiBNZW51IG1vZGUgKi8KICNkZWZpbmUgUkFXTU9ERSAg ICAgICAgIDAwNAkvKiBtb2RlIHVzZWQgYnkgZWFybGllciB2ZXJzaW9ucyAqLwogCisjZGVm aW5lIE9SSUdJTkFMRU5DT0RJTkcJMAorI2RlZmluZSBVVEY4RU5DT0RJTkcJCTEKKworI2Rl ZmluZSBTQ1JPTExCQUNLU0laRSA1MDAwCisKK3R5cGVkZWYgc3RydWN0IHsKKwljaGFyICpz dHI7aW50IGxlbjsKK31zY3JvbGxiYWNrc3RydWN0OwkKKworCitzdGF0aWMgc2Nyb2xsYmFj a3N0cnVjdCBzY3JvbGxiYWNrW1NDUk9MTEJBQ0tTSVpFXTsKK3N0YXRpYyBpbnQgdG9wc2Ny b2xsPTAsIGxhc3RzY3JvbGwgPSAwLCBzY3JvbGxlZHVwPTAsIGVhdGNoYXIgPSAwOworc3Rh dGljIGNoYXIgaW5idWZbTUFYX0JVRkxFTl07c3RhdGljIGludCBpbmJ1ZmxlbiA9IDAsIGlu YnVmd2lkID0gMDsKK3N0YXRpYyBjaGFyIGluY2hhcmJ1Zls2XTtzdGF0aWMgaW50IGluY2hh cmJ1ZmxlbiA9IDA7Cit2b2lkIHN0YXRsaW5lKGludCBtb2RlLCBjaGFyICpzKTsKKwordm9p ZCBhZGRzY3JvbGxsaW5lKGNoYXIgKnMsIGludCBsZW4pCit7CisJc2Nyb2xsYmFja1tsYXN0 c2Nyb2xsXS5zdHIgPSBtYWxsb2MobGVuKTsKKwltZW1jcHkoc2Nyb2xsYmFja1tsYXN0c2Ny b2xsXS5zdHIsIHMsIGxlbik7CisJc2Nyb2xsYmFja1tsYXN0c2Nyb2xsXS5sZW4gPSBsZW47 CisJaWYgKCsrbGFzdHNjcm9sbCA+PSBTQ1JPTExCQUNLU0laRSlsYXN0c2Nyb2xsID0gMDsK KwlpZiAobGFzdHNjcm9sbCA9PSB0b3BzY3JvbGwpeworCQlmcmVlKHNjcm9sbGJhY2tbdG9w c2Nyb2xsXS5zdHIpOwkJCisJCWlmICgrK3RvcHNjcm9sbCA+PSBTQ1JPTExCQUNLU0laRSl0 b3BzY3JvbGwgPSAwOworCX0KK30KKworLy8gTm90ZXM6IEphcGFuZXNlLCBDaGluZXNlIGFu ZCBLb3JlYW4gY2hhcmFjdGVycyBtb3N0bHkgdGFrZSB1cCB0d28KKy8vIGNoYXJhY3RlcnMg aW4gd2lkdGguICBUaGVzZSBjaGFyYWN0ZXJzIHJldHVybiAyIHZpYSAKKy8vIHdjd2lkdGgg dG8gbGV0IHRoZSBjb2RlIGtub3cgdGhhdCB0aGV5IHJlcXVpcmUgdHdvCisvLyBzcGFjZXMu ICBNb25vLXNwYWNlIGZvbnRzL25jdXJzZXMgc2VlbXMgdG8gd29yayBjb3JyZWN0bHkgd2l0 aCAKKy8vIEVhc3QgQXNpYW4gY2hhcmFjdGVycy4gIAorLy8KKy8vIFRoZXJlIGFyZSBhbHNv IHNvbWUgY2hhcmFjdGVycyB0aGF0IHJldHVybiBhIHdjd2lkdGggb2YgMC4gSSdtCisvLyBu b3Qgc3VyZSBhYm91dCBhbGwgb2YgdGhlbSwgYnV0IHNvbWUgb2YgdGhlIDAgd2lkdGggY2hh cmFjdGVycworLy8gYWRkIGEgbWFyayBhYm92ZSBvciBiZWxvdyBhIGNoYXJhY3Rlci4gIElu IG9yZGVyIGZvciB0aGVzZSBtYXJrcworLy8gdG8gYXBwZWFyIGNvcnJlY3RseSwgdGhlIHBy ZXZpb3VzIGNoYXJhY3RlciBhbmQgdGhlIG92ZXJzdHJpa2UKKy8vIG11c3QgYmUgZHJhd24g dG9nZXRoZXIuICB1c2luZyB3bW92ZSBhbmQgZHJhd2luZyB0aGUgYWNjZW50IGRvZXNuJ3QK Ky8vIHdvcmsuCisvLworLy8gVGhlcmUgYXJlIHNvbWUgb3RoZXIgY2hhcmFjdGVycyB0aGF0 IGhhdmUgZnVuY3Rpb25zLCBhbmQgdGhlc2UgCisvLyBhcmUgbm90IHN1cHBvcnRlZCB1c2lu ZyBhIHByaW50IHRvIHRoZSBzY3JlZW4uIFNvdXRoIEFzaWFuCisvLyBmb250cyBhcmUgY29t cGxpY2F0ZWQuICBJIGRvbid0IGJlbGlldmUgc291dGggYXNpYW4gZm9udHMgd29yaworLy8g Y29ycmVjdGx5IGZyb20gdGhlIExpbnV4IGNvbW1hbmQgbGluZSAoYXMgb2YgbGF0ZSAyMDA5 KS4gVGhleQorLy8gcHJpbnQgYnV0IGRvbid0IGNvbWJpbmUuICBUaGUgcmVzdWx0IGlzIGRp c3RvcnRlZC4KKy8vCisvLyBNYW55IGNoYXJhY3RlcnMsIGFzIG9mIDEyLzA5LCBhcmUgdG9v IHdpZGUgZm9yIGEgc2luZ2xlIHNwYWNlCisvLyBpbiB0aGUgZm9udCwgYWx0aG91Z2ggdGhl eSByZXR1cm4gYSB3Y3dpZHRoIG9mIDEuICBJIHN1c3BlY3QKKy8vIHRoaXMgaXMgZHVlIHRv IHRoZXNlIGNoYXJhY3RlcnMgbm90IGJlaW5nIHBhcnQgb2YgdGhlIG1vbm8tc3BhY2VkCisv LyBmb250IGFuZCBhcmUgaW5zdGVhZCBwdWxsZWQgZnJvbSBhbiBhbHRlcm5hdGUgZm9udC4g IFRoZXNlCisvLyBjaGFyYWN0ZXJzIGFsc28gZ2xpdGNoIGluIHh0ZXJtLCB2aW0gYW5kIG90 aGVyIG5jdXJzZXMKKy8vIHNvZnR3YXJlLiBJIHN1c3BlY3QgdGhpcyBpcyBhY3R1YWxseSBh IGZvbnQgYnVnLCBhbmQgYW55IGNoYXJhY3RlcgorLy8gdGhhdCByZXR1cm5zIHdjd2lkdGg9 MSBpbiBhIG1vbm9zcGFjZWQgZm9udCBzaG91bGQgYmUKKy8vIG1vbm9zcGFjZWQuICAKKy8v CisKKworaW50IHdpZHRoY2hhcihjaGFyICpzLCBzaXplX3QgYnl0ZXMsIGludCB4cG9zKQor eworCXdjaGFyX3QgYztpbnQgd2lkdGg7CisJY2hhciAqb3V0YnVmPShjaGFyICopICZjOwor CXNpemVfdCBvdXRzaXplID0gc2l6ZW9mKHdjaGFyX3QpOyAKKwkvLyBOb3RlOiAgQWN0dWFs bHkgbmVlZCB0byBjaGVjayBpZiBiYWQgVVRGOCBjaGFyYWN0ZXJzIHNob3cgYXMgPyAKKwlp ZiAoaWNvbnYodXRmOHRvd2NoYXJ0LCAmcywgJmJ5dGVzLCAmb3V0YnVmLCAmb3V0c2l6ZSk8 IDApcmV0dXJuIDA7IAorCWlmIChjID09IDkpeworCQlyZXR1cm4gOCAtICh4cG9zICYgNyk7 CisJfQorCXdpZHRoID0gd2N3aWR0aChjKTsKKwlpZiAod2lkdGggPCAwKXJldHVybiAwOwor CXJldHVybiB3aWR0aDsKK30KKworCitpbnQgY29tcGxldGVjaGFybGVuKGNoYXIgKnMpCit7 CisJdW5zaWduZWQgdXQgPSAodW5zaWduZWQgY2hhcilzWzBdO2ludCBjbGVuOworCWlmICh1 dCA8PSAweDgwKWNsZW4gPSAxOworCWVsc2UgaWYgKCh1dCA+PSAxOTIpICYmICh1dCA8IDE5 MiszMikpY2xlbiA9IDI7CisJZWxzZSBpZiAoKHV0ID49IDIyNCkgJiYgKHV0IDwgMjI0KzE2 KSljbGVuID0gMzsKKwllbHNlIGlmICgodXQgPj0gMjQwKSAmJiAodXQgPCAyNDArOCkpY2xl biA9IDQ7CisJZWxzZSBpZiAoKHV0ID49IDI0OCkgJiYgKHV0IDwgMjQ4KzQpKWNsZW4gPSA1 OworCWVsc2UgaWYgKCh1dCA+PSAyNTIpICYmICh1dCA8IDI1MisyKSljbGVuID0gNjsKKwll bHNlIGNsZW4gPSAxOyAvLyBiYWQgCisJcmV0dXJuIGNsZW47Cit9CisKKwkJCisvLyBNdXN0 IGNoZWNrIGZvciBDT0xTIHdoaWxlIHJlZHJhd2luZyBmcm9tIGhpc3RvcnkuICBPciBvdGhl cndpc2UgdGhlIHRleHQKKy8vIHdyYXBzIGFyb3VuZCBhbmQgZG9lcyBzdHJhbmdlIHRoaW5n cy4KK2ludCB3YWRkbnN0cmNvbGNoZWNrKFdJTkRPVyAqd2luLCBjaGFyICpzLCBpbnQgbGVu LCBpbnQgdHdpZHRoKQoreworCWludCBuOworCWZvciAodHdpZHRoID0gMCxuPTA7bjxsZW47 KXsKKwkJaW50IGN3aWR0aCA9IGNvbXBsZXRlY2hhcmxlbigmc1tuXSksIHdpZHRoOworCQlp ZiAobiArIGN3aWR0aCA+IGxlbilyZXR1cm4gdHdpZHRoOyAvLyBFcnJvciBjb25kaXRpb24K KwkJd2lkdGggPSB3aWR0aGNoYXIoJnNbbl0sIGN3aWR0aCwgdHdpZHRoKTsKKwkJaWYgKHR3 aWR0aCt3aWR0aCA+IENPTFMpcmV0dXJuIHR3aWR0aDsgLy8gCisJCXdhZGRuc3RyKHdpbiwg JnNbbl0sIGN3aWR0aCk7CisJCW4gKz0gY3dpZHRoOworCQl0d2lkdGggKz0gd2lkdGg7CisJ fQorCXJldHVybiB0d2lkdGg7Cit9CisKKy8vIFVwZGF0ZSBhIGxpbmUgb24gdGhlIHNjcmVl biBmcm9tIHRoZSBiYWNrc2Nyb2xsIGJ1ZmZlci4KK3ZvaWQgdXBkYXRlbGluZShpbnQgc2Ny ZWVueSwgaW50IHlmcm9tLCB0X3dpbiAqd2luX2luLCBpbnQgbW9kZSwgdF93aW4gKndpbl9v dXQpCit7CisJd21vdmUod2luX2luLT5wdHIsIHNjcmVlbnksIDApOworCWlmICh5ZnJvbSA9 PSBsYXN0c2Nyb2xsKXsKKwkJaW50IHR3aWR0aCA9IDA7CisJCWlmIChpbmJ1ZmxlbiA+IDAp CisJCQl0d2lkdGggPSB3YWRkbnN0cmNvbGNoZWNrKHdpbl9pbi0+cHRyLCBpbmJ1ZiwgaW5i dWZsZW4sIDApOworCQlpZiAobW9kZSA9PSBTTEFWRU1PREUpeworCQkJY2hhciBvYnVmW01B WF9CVUZMRU5dOworCQkJY2hhciAqaW5idWYgPSAoY2hhciAqKXdpbl9vdXQtPnN0cmluZywg Km91dGJ1ZiA9IG9idWY7CisJCQlzaXplX3QgaW5zaXplID0gd2luX291dC0+Ynl0ZXMgKiBz aXplb2Yod2NoYXJfdCksIG91dHNpemUgPSBNQVhfQlVGTEVOOyAKKwkJCWljb252KHdjaGFy dHRvdXRmOCwgJmluYnVmLCAmaW5zaXplLCAmb3V0YnVmLCAmb3V0c2l6ZSk7CisJCQl3YWRk bnN0cmNvbGNoZWNrKHdpbl9pbi0+cHRyLCBvYnVmLCBNQVhfQlVGTEVOIC0gb3V0c2l6ZSwg dHdpZHRoKTsKKwkJCXdpbl9vdXQtPmN1cnNfcG9zID0gd2luX291dC0+Ynl0ZXM7CisJCX0K Kwl9CisJZWxzZSB7CisJCXdhZGRuc3RyY29sY2hlY2sod2luX2luLT5wdHIsIHNjcm9sbGJh Y2tbeWZyb21dLnN0ciwgc2Nyb2xsYmFja1t5ZnJvbV0ubGVuLCAwKTsKKwl9Cit9CisKKy8v IEN1cnNvciBpbiBTTEFWRSBtb2RlIHdoaWxlIHNjcm9sbGluZyBsb29rcyBicm9rZW4uCisv LyBDdXJzb3IgaW4gVEFMSyBtb2RlIGlzIGFsd2F5cyBnb29kLCBiZWNhdXNlIGl0J3Mgb24g dGhlIGJvdHRvbSB3aW5kb3cKK3ZvaWQgY2hlY2tjdXJzb3IoaW50IG1vZGUpCit7CisJaW50 IG5ld2N1cnNvcjsKKwlpZiAoKG1vZGUgPT0gU0xBVkVNT0RFKSAmJiBzY3JvbGxlZHVwKW5l d2N1cnNvciA9IDA7CisJZWxzZSBuZXdjdXJzb3IgPSAxOworCWlmIChjdXJzb24gIT0gbmV3 Y3Vyc29yKXsKKwkJY3Vyc19zZXQobmV3Y3Vyc29yKTsKKwkJY3Vyc29uID0gbmV3Y3Vyc29y OworCX0KK30KKworLyogRm9yIENKSywgaXQncyBpbXBvcnRhbnQgdG8ga2VlcCB0aGUgY3Vy c29yIGFsd2F5cyBvbiB0aGUgaW5wdXQKKyAqIHdpbmRvdy4gIE90aGVyd2lzZSB0aGUgZGlz cGxheSBpcyBjb25mdXNlZCAqLworc3RhdGljIHZvaWQgcmVzdG9yZWN1cnNvcihpbnQgbW9k ZSwgdF93aW4gKndpbl9vdXQpCit7CisJY2hlY2tjdXJzb3IobW9kZSk7CQorCWlmIChtb2Rl ICE9IFJBV01PREUpeworCQlpbnQgeCx5OworCQlnZXR5eCh3aW5fb3V0LT5wdHIsIHksIHgp Oy8vIE11c3QgcmVzdG9yZSBpbnB1dCBjdXJzb3IgbG9jYXRpb24uCisJCXdtb3ZlKHdpbl9v dXQtPnB0cix5LCB4KTsKKwkJd3JlZnJlc2god2luX291dC0+cHRyKTsKKwl9CQkJCQkJCit9 CisKK3ZvaWQgcmVkcmF3c2NyZWVuKHRfd2luICp3aW5faW4sIGludCBtb2RlLCB0X3dpbiAq d2luX291dCkKK3sKKwlpbnQgeSwgc3RvcmVkbGluZXM7CQorCWlmIChsYXN0c2Nyb2xsID49 IHRvcHNjcm9sbCkgc3RvcmVkbGluZXMgPSBsYXN0c2Nyb2xsIC0gdG9wc2Nyb2xsOworCWVs c2Ugc3RvcmVkbGluZXMgPSBsYXN0c2Nyb2xsICsgU0NST0xMQkFDS1NJWkUgLSB0b3BzY3Jv bGw7CisJLy8gTm90ZSBpdCdzIHN0b3JlZCBsaW5lcyArIDEgZXh0cmEgbGluZSBmb3IgdGV4 dCBpbnB1dC4KKwlmb3IgKHk9MDsoeTw9d2luX2luLT5tYXhfeSkgJiYgKHkgPD0gc3RvcmVk bGluZXMpO3krKyl7CisJCWludCBsaW5lZnJvbTsKKwkJaWYgKHN0b3JlZGxpbmVzIDw9IHdp bl9pbi0+bWF4X3kpey8vIFRoaXMgaXMgYSBsaXR0bGUgY29uZnVzaW5nLgorCQkJbGluZWZy b20gPSB0b3BzY3JvbGwgKyB5Oy8vIFRoZSBzY3JlZW4gc2Nyb2xscyB0b3AgZG93biBhdCBz dGFydAorCQl9CisJCWVsc2UgbGluZWZyb20gPSBsYXN0c2Nyb2xsIC1zY3JvbGxlZHVwIC0g KHdpbl9pbi0+bWF4X3kpICsgeTsKKwkJd2hpbGUgKGxpbmVmcm9tIDwgMClsaW5lZnJvbSAr PSBTQ1JPTExCQUNLU0laRTsKKwkJd2hpbGUgKGxpbmVmcm9tID49IFNDUk9MTEJBQ0tTSVpF KWxpbmVmcm9tIC09IFNDUk9MTEJBQ0tTSVpFOworCQl1cGRhdGVsaW5lKHksbGluZWZyb20g LCB3aW5faW4sIG1vZGUsIHdpbl9vdXQpOworCX0KKwljaGVja2N1cnNvcihtb2RlKTsKK30K Kwordm9pZCBzY3JvbGx0ZXh0KHRfd2luICp3aW5faW4sIGludCBsaW5lcywgaW50IG1vZGUs IHRfd2luICp3aW5fb3V0KQoreworCWludCB0b3BsaW5lLCBzdG9yZWRsaW5lczsKKwlpbnQg eSwgZXJyOworCWludCB3YXNzY3JvbGxlZHVwOworCWlmIChzY3JvbGxlZHVwICsgbGluZXMg PCAwKXsKKwkJbGluZXMgPSAtc2Nyb2xsZWR1cDsKKwl9CisJLy8gc3RvcmVkbGluZXMgPSBM aW5lcyBzdG9yZWQgaW4gYnVmZmVyLgorCWlmIChsYXN0c2Nyb2xsID49IHRvcHNjcm9sbCkg c3RvcmVkbGluZXMgPSBsYXN0c2Nyb2xsIC0gdG9wc2Nyb2xsOworCWVsc2Ugc3RvcmVkbGlu ZXMgPSBsYXN0c2Nyb2xsICsgU0NST0xMQkFDS1NJWkUgLSB0b3BzY3JvbGw7CisJLy8gVGhl IG1heCBzY3JvbGxpbmcgIHdlIGNhbiBkbyBpcyB0aGUgIyBvZiBsaW5lcyBzdG9yZWQgLSB0 aGUgCisJLy8gc2NyZWVuIHNpemUuCisJdG9wbGluZSA9IHN0b3JlZGxpbmVzIC0gd2luX2lu LT5tYXhfeTsKKwlpZiAodG9wbGluZSA8IDApdG9wbGluZSA9IDA7CisJaWYgKHNjcm9sbGVk dXAgKyBsaW5lcyA+IHRvcGxpbmUpeworCQlsaW5lcyA9IHRvcGxpbmUgLSBzY3JvbGxlZHVw OworCX0KKwlpZiAoIWxpbmVzKXJldHVybjsKKwl3YXNzY3JvbGxlZHVwID0gc2Nyb2xsZWR1 cDsKKwlzY3JvbGxlZHVwICs9IGxpbmVzOworCWVycj0gd3Njcmwod2luX2luLT5wdHIsIC1s aW5lcyk7CisJc2Nyb2xsb2sod2luX2luLT5wdHIsIEZBTFNFKTsKKwlpZiAobGluZXMgPiAw KXsKKwkJZm9yICh5PTA7eTxsaW5lczt5KyspeworCQkJaW50IGxpbmVmcm9tID0gbGFzdHNj cm9sbCAtc2Nyb2xsZWR1cCAtICh3aW5faW4tPm1heF95KSArIHk7CisJCQl3aGlsZSAobGlu ZWZyb20gPCAwKWxpbmVmcm9tICs9IFNDUk9MTEJBQ0tTSVpFOworCQkJd2hpbGUgKGxpbmVm cm9tID49IFNDUk9MTEJBQ0tTSVpFKWxpbmVmcm9tIC09IFNDUk9MTEJBQ0tTSVpFOworCQkJ dXBkYXRlbGluZSh5LGxpbmVmcm9tICwgd2luX2luLCBtb2RlLCB3aW5fb3V0KTsKKwkJfQor CX0KKwllbHNlICB7CisJCWZvciAoeT0tbGluZXMtMTt5Pj0wO3ktLSl7CisJCQlpbnQgbGlu ZWZyb20gPSBsYXN0c2Nyb2xsIC1zY3JvbGxlZHVwIC0gIHk7CisJCQl3aGlsZSAobGluZWZy b20gPCAwKWxpbmVmcm9tICs9IFNDUk9MTEJBQ0tTSVpFOworCQkJd2hpbGUgKGxpbmVmcm9t ID49IFNDUk9MTEJBQ0tTSVpFKWxpbmVmcm9tIC09IFNDUk9MTEJBQ0tTSVpFOworCQkJdXBk YXRlbGluZSh3aW5faW4tPm1heF95ICAtIHksbGluZWZyb20gLCB3aW5faW4sIG1vZGUsIHdp bl9vdXQpOworCQl9CisJCQorCX0KKwlzY3JvbGxvayh3aW5faW4tPnB0ciwgVFJVRSk7CisJ Y2hlY2tjdXJzb3IobW9kZSk7CisJd3JlZnJlc2god2luX2luLT5wdHIpOworCWlmICh3YXNz Y3JvbGxlZHVwICYmICFzY3JvbGxlZHVwKXsKKwkJc3RhdGxpbmUobW9kZSwgIiIpOworCX0K KwllbHNlIGlmICghd2Fzc2Nyb2xsZWR1cCAmJiBzY3JvbGxlZHVwKXsKKwkJc3RhdGxpbmUo bW9kZSwgIlZpZXdpbmcgU2Nyb2xsYmFjayIpOworCX0KK30KKwkKIHZvaWQgdXNhZ2Uodm9p ZCkKIHsKIAlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiBjYWxsIFstYiBsfGVdIFstZF0gWy1o XSBbLW0gc3xlXSBbLXAgcGFjbGVuXSBbLXJdIFstcyBteWNhbGxdIFstdF0gWy12XSBbLXcg d2luZG93XSBwb3J0IGNhbGxzaWduIFtbdmlhXSBkaWdpcGVhdGVycy4uLl1cbiIpOwpAQCAt MTQ5LDYgKzM4Miw3MyBAQAogfQogCiAKKworLyogUmV0dXJuIHRoZSB3aXRoIG9mIHRoaXMg Y2hhcmFjdGVyIGluIGNoYXJhY3RlciBibG9ja3MuICAoTm9ybWFsID0gMSwgQ0pLPTIpIAor ICogQWxzbyBmb3IgY29udHJvbCBjaHJhY3RlcnMsIHJldHVybiB0aGUgd2lkdGggb2YgdGhl IHJlcGxhY2VtZW50IHN0cmluZy4KKyAqICovCitzdGF0aWMgaW50IHdjd2lkdGhjb250cm9s KHdjaGFyX3QgYykKK3sKKwlpbnQgd2lkdGg7CisJY2NoYXJfdCBjYyA9IHswfTsKKwl3Y2hh cl90ICpzdHI7CisJY2MuY2hhcnNbMF0gPSBjOworCXN0ciA9IHd1bmN0cmwoJmNjKTsKKwlp ZiAoIXN0cilyZXR1cm4gMDsKKwl3aWR0aCA9IHdjc3dpZHRoKHN0ciwgd2NzbGVuKHN0cikp OworCXJldHVybiB3aWR0aDsKK30KKworLyogUmV0dXJuIGEgc3RyaW5nIHRvIHByaW50IGZv ciBhIHdjaGFyX3QuICBFeHBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLgorICogU3RyaW5ncyBy ZXR1cm5lZCBieSB3dW5jdHJsIGRvbid0IGxpa2UgdG8gYmUgZnJlZWQuICBJdCBzZWVtcy4g Ki8KK3N0YXRpYyB3Y2hhcl90ICp3dW5jdHJsd2NoYXIod2NoYXJfdCBjKQoreworCWNjaGFy X3QgY2MgPSB7MH07CisJd2NoYXJfdCAqc3RyOworCWNjLmNoYXJzWzBdID0gYzsKKwlzdHIg PSB3dW5jdHJsKCZjYyk7CisJcmV0dXJuIHN0cjsKK30JCQorCisvLyBGb3Igc29tZSByZWFz b24gd2luc19ud3N0ciBmYWlscyBvbiBmZWRvcmEgMTIgb24gc29tZSBjaGFyYWN0ZXJzCisv LyBidXQgd2FkZG5zdHIgd29ya3MuICAKKy8vIERyYXcgdGhlIGVudGlyZSBpbnB1dCBidWZm ZXIgd2hlbiBhZGRpbmcgdGV4dC4gIAorLy8gVGhlIGZvbnRzIHRoYXQgZG8gb3ZlcnN0cmlr ZSBmYWlsIHdoZW4gd3JpdHRlbiBvbmUgY2hhciBhdCBhIHRpbWUuCit2b2lkIGRyYXdpbmJ1 ZihXSU5ET1cgKncsIHdjaGFyX3QgKnN0cmluZywgaW50IGJ5dGVzLCBpbnQgY3VyX3BvcykK K3sKKwlpbnQgbiwgeCwgY3Vyc29yeCwgeHBvcywgeXBvcywgd2lkdGg7CisJZ2V0eXgodywg eXBvcywgeHBvcyk7Ly8gQXNzdW1lIGN1cnNvciB0byBiZSBhdCBwb3NpdGlvbiBvZiBjdXJy ZW50IGNoYXIgdG8gZHJhdy4KKwl4ID0geHBvcztjdXJzb3J4ID0geHBvczsKKwkvLyBjdXJf cG9zLTEgPSB0aGUgY2hyYWN0ZXIgdGhhdCB3YXMganVzdCBhZGRlZC4KKwlmb3IgKG49Y3Vy X3Bvcy0yO24+PTA7bi0tKXsvLyBNb3ZlIHggcG9zaXRpb24gdG8gc3RhcnQgb2Ygc3RyaW5n IG9yIDAKKwkJd2lkdGggPSB3Y3dpZHRoY29udHJvbChzdHJpbmdbbl0pOworCQlpZiAoeCA+ PSB3aWR0aCl4IC09IHdpZHRoOworCQllbHNlIHggPSAwOworCX0KKwl3bW92ZSh3LCB5cG9z LCB4KTsKKwlmb3IgKG49MDtuPGJ5dGVzO24rKyl7CisJCWNoYXIgb2J1ZltNQVhfQlVGTEVO XTsKKwkJY2hhciAqaW5idWYsICpvdXRidWYgPSBvYnVmOworCQlzaXplX3QgaW5zaXplLCBv dXRzaXplID0gTUFYX0JVRkxFTjsgCisJCXdjaGFyX3QgKnN0cjtpbnQgbGVuLCB3aWR0aDsK KwkJaWYgKG4gPT0gY3VyX3Bvcyl7CisJCQljdXJzb3J4ID0geDsKKwkJfQorCQlzdHIgPSB3 dW5jdHJsd2NoYXIoc3RyaW5nW25dKTsKKwkJaWYgKCFzdHIpY29udGludWU7CisJCWluYnVm ID0gKGNoYXIgKikgc3RyOworCQlsZW4gPSB3Y3NsZW4oc3RyKTsKKwkgICAgICAgIGluc2l6 ZSA9IGxlbiAqIHNpemVvZih3Y2hhcl90KTsKKwkJd2lkdGggPSB3Y3N3aWR0aChzdHIsIGxl bik7CisJCWljb252KHdjaGFydHRvdXRmOCwgJmluYnVmLCAmaW5zaXplLCAmb3V0YnVmLCAm b3V0c2l6ZSk7CisJCXdhZGRuc3RyKHcsIG9idWYsIE1BWF9CVUZMRU4tb3V0c2l6ZSk7CQor CQl4ICs9IHdpZHRoOworCX0KKwlpZiAoY3VyX3BvcyA8IGJ5dGVzKXsKKwkJd21vdmUodyx5 cG9zLCBjdXJzb3J4KTsgCisJfQorfQorCisKIC8qIENvbnZlcnQgbGluZWFyIFVOSVggZGF0 ZSB0byBhIE1TLURPUyB0aW1lL2RhdGUgcGFpci4gKi8KIAogc3RhdGljIGNoYXIgKiB1bml4 X3RvX3NmYmluX2RhdGVfc3RyaW5nKHRpbWVfdCBnbXQpCkBAIC0zODcsNiArNjg3LDEzIEBA CiAJcmV0dXJuIChmZCk7CiB9CiAKKworc3RhdGljIHZvaWQgY21kX3NpZ3dpbmNoKGludCBz aWcpCit7CisJc2lnbmFsKFNJR1dJTkNILCBjbWRfc2lnd2luY2gpOworCXNpZ3dpbmNoc2ln bmFsID0gVFJVRTsKK30KKwogdm9pZCBjbWRfaW50cihpbnQgc2lnKQogewogCXNpZ25hbChT SUdRVUlULCBjbWRfaW50cik7CkBAIC00MDQsNyArNzExLDcgQEAKIAkJaWYgKG9sZGxlbiA+ IDApIHsKIAkJCW1vdmUoMCwgU1RBVFdfU1RBVCk7CiAJCQlhdHRyb24oQV9SRVZFUlNFKTsK LQkJCWZvciAoY250ID0gMDsgY250IDwgb2xkbGVuOyBjbnQrKykKKwkJCWZvciAoY250ID0g U1RBVFdfU1RBVDsgY250IDwgQ09MUzsgY250KyspCiAJCQkJYWRkY2goJyAnKTsKIAkJCW9s ZGxlbiA9IDA7CiAJCQlhdHRyb2ZmKEFfUkVWRVJTRSk7CkBAIC00MTcsMjEgKzcyNCwxOCBA QAogCQlmZmx1c2goc3Rkb3V0KTsKIAkJcmV0dXJuOwogCX0KLQlpZiAoc3RybGVuKHMpID4g ODAgLSBTVEFUV19TVEFUKQotCQlzWzgwIC0gU1RBVFdfU1RBVF0gPSAnXDAnOworCWlmIChD T0xTIDw9IFNUQVRXX1NUQVQpcmV0dXJuOyAKKwlsID0gc3RybGVuKHMpOworCWlmIChsID4g Q09MUyAtIFNUQVRXX1NUQVQpCisJCWwgPSBDT0xTLVNUQVRXX1NUQVQ7CiAKIAltb3ZlKDAs IFNUQVRXX1NUQVQpOwogCiAJYXR0cm9uKEFfUkVWRVJTRSk7Ci0JYWRkc3RyKHMpOwotCi0J aWYgKG9sZGxlbiA+IHN0cmxlbihzKSkgewotCQlsID0gb2xkbGVuIC0gc3RybGVuKHMpOwot CQlmb3IgKGNudCA9IDA7IGNudCA8IGw7IGNudCsrKQotCQkJYWRkY2goJyAnKTsKLQl9CisJ YWRkbnN0cihzLCBsKTsKKwlmb3IgKGNudCA9IFNUQVRXX1NUQVQrbDtjbnQgPCBDT0xTO2Nu dCsrKWFkZGNoKCcgJyk7CiAJYXR0cm9mZihBX1JFVkVSU0UpOwotCW9sZGxlbiA9IHN0cmxl bihzKTsKKwlvbGRsZW4gPSBsOwogCXJlZnJlc2goKTsKIH0KIApAQCAtNzUyLDggKzEwNTYs MTEgQEAKIHsKIAlpbnQgY250OwogCWNoYXIgaWRTdHJpbmdbMTFdOwotCXNwcmludGYoaWRT dHJpbmcsICIgJThzICIsIGNhbGxbMF0pOworCXN0cnVjdCB3aW5zaXplIHdpbnN6ID0gezB9 OwogCisJaWYgKChpb2N0bCgwLCBUSU9DR1dJTlNaLCAmd2luc3opID49IDApICYmIHdpbnN6 LndzX3JvdyAmJiB3aW5zei53c19jb2wpCisJCXJlc2l6ZXRlcm0od2luc3oud3Nfcm93LCB3 aW5zei53c19jb2wpOworCXNwcmludGYoaWRTdHJpbmcsICIgJThzICIsIGNhbGxbMF0pOwog CWlmICgod2luID0gaW5pdHNjcigpKSA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAKQEAgLTc2 Myw3ICsxMDcwLDggQEAKIAlhZGRjaChBQ1NfVkxJTkUpOwogCWFkZHN0cigiLS0tLS0tLS0i KTsKIAlhZGRjaChBQ1NfVkxJTkUpOwotCWZvciAoY250ID0gU1RBVFdfU1RBVDsgY250IDw9 IDgwOyBjbnQrKykKKwltb3ZlKDAsIFNUQVRXX1NUQVQpOworCWZvciAoY250ID0gU1RBVFdf U1RBVDsgY250IDwgQ09MUzsgY250KyspCiAJCWFkZGNoKCcgJyk7CiAJYXR0cm9mZihBX1JF VkVSU0UpOwogCkBAIC03NzEsOCArMTA3OSw4IEBACiAJcmF3KCk7CiAJbm9kZWxheSh3aW4s IFRSVUUpOwogCWtleXBhZCh3aW4sIFRSVUUpOworCWN1cnNvbiA9IDE7CiAJcmVmcmVzaCgp OwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc5Myw3ICsxMTAxLDggQEAKIAl3aW5fb3V0LT5j dXJzX3BvcyA9IDA7CiAJd2luX2luLT5ieXRlcyA9IDA7CiAJd2luX2luLT5jdXJzX3BvcyA9 IDA7Ci0KKyAgICAgICAgcmVkcmF3c2NyZWVuKHdpbl9pbiwgU0xBVkVNT0RFLCB3aW5fb3V0 KTsKKwl3cmVmcmVzaCh3aW5faW4tPnB0cik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgyNCwx NSArMTEzMywxNiBAQAogCXNjcm9sbG9rKHdpbl9vdXQtPnB0ciwgVFJVRSk7CiAKIAl3Y2xl YXIod2luX291dC0+cHRyKTsKLQl3cmVmcmVzaCh3aW5fb3V0LT5wdHIpOwogCXdjbGVhcih3 aW5faW4tPnB0cik7Ci0Jd3JlZnJlc2god2luX2luLT5wdHIpOwogCiAJd2luX291dC0+Ynl0 ZXMgPSAwOwogCXdpbl9vdXQtPmN1cnNfcG9zID0gMDsKIAl3aW5faW4tPmJ5dGVzID0gMDsK IAl3aW5fb3V0LT5jdXJzX3BvcyA9IDA7Ci0KKyAgICAgICAgcmVkcmF3c2NyZWVuKHdpbl9p biwgVEFMS01PREUsIHdpbl9vdXQpOworCXJlc3RvcmVjdXJzb3IoVEFMS01PREUsIHdpbl9v dXQpOworCXdyZWZyZXNoKHdpbl9pbi0+cHRyKTsKKwl3cmVmcmVzaCh3aW5fb3V0LT5wdHIp OwogCXJldHVybiAwOwogfQogCkBAIC04ODIsMTY1ICsxMTkyLDIwMSBAQAogCQl9CiAJCWJy ZWFrOwogCX0KLQorCXNjcm9sbGVkdXAgPSAwOyAKIAlyZXR1cm4gbmV3bW9kZTsKIH0KIAot dm9pZCB3cml0ZWluY29tKGludCBtb2RlLCB0X3dpbiAqIHdpbl9pbiwgdW5zaWduZWQgY2hh ciBidWZbXSwgaW50IGJ5dGVzKQorc3RhdGljIHZvaWQgcmVpbml0X21vZGUoaW50IG1vZGUs IHdpbnQgKiB3aW50YWIsIHRfd2luICogd2luX2luLAorCQl0X3dpbiAqIHdpbl9vdXQsIGNo YXIgKmNhbGxbXSkKIHsKLQlpbnQgY250OworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgUkFX TU9ERToKKwkJYnJlYWs7CiAKLQlpZiAobW9kZSAmIFJBV01PREUpIHsKLQkJd3JpdGUoU1RE T1VUX0ZJTEVOTywgYnVmLCBieXRlcyk7Ci0JCXJldHVybjsKLQl9Ci0JZm9yIChjbnQgPSAw OyBjbnQgPCBieXRlczsgY250KyspIHsKLQkJc3dpdGNoIChidWZbY250XSkgewotCQljYXNl IDIwMToKLQkJY2FzZSAyMTg6Ci0JCQl3YWRkY2god2luX2luLT5wdHIsIEFDU19VTENPUk5F Uik7Ci0JCQlicmVhazsKLQkJY2FzZSAxODc6Ci0JCWNhc2UgMTkxOgotCQkJd2FkZGNoKHdp bl9pbi0+cHRyLCBBQ1NfVVJDT1JORVIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjAwOgotCQlj YXNlIDE5MjoKLQkJCXdhZGRjaCh3aW5faW4tPnB0ciwgQUNTX0xMQ09STkVSKTsKLQkJCWJy ZWFrOwotCQljYXNlIDE4ODoKLQkJY2FzZSAyMTc6Ci0JCQl3YWRkY2god2luX2luLT5wdHIs IEFDU19MUkNPUk5FUik7Ci0JCQlicmVhazsKLQkJY2FzZSAyMDQ6Ci0JCWNhc2UgMTk1Ogot CQkJd2FkZGNoKHdpbl9pbi0+cHRyLCBBQ1NfTFRFRSk7Ci0JCQlicmVhazsKLQkJY2FzZSAx ODU6Ci0JCWNhc2UgMTgwOgotCQkJd2FkZGNoKHdpbl9pbi0+cHRyLCBBQ1NfUlRFRSk7Ci0J CQlicmVhazsKLQkJY2FzZSAyMDM6Ci0JCWNhc2UgMTk0OgotCQkJd2FkZGNoKHdpbl9pbi0+ cHRyLCBBQ1NfVFRFRSk7Ci0JCQlicmVhazsKLQkJY2FzZSAyMDI6Ci0JCWNhc2UgMTkzOgot CQkJd2FkZGNoKHdpbl9pbi0+cHRyLCBBQ1NfQlRFRSk7Ci0JCQlicmVhazsKLQkJY2FzZSAy MDU6Ci0JCWNhc2UgMTk2OgotCQkJd2FkZGNoKHdpbl9pbi0+cHRyLCBBQ1NfSExJTkUpOwot CQkJYnJlYWs7Ci0JCWNhc2UgMTg2OgotCQljYXNlIDE3OToKLQkJCXdhZGRjaCh3aW5faW4t PnB0ciwgQUNTX1ZMSU5FKTsKLQkJCWJyZWFrOwotCQljYXNlIDEyOToKLQkJCXdhZGRjaCh3 aW5faW4tPnB0ciwgMjUyKTsJLyp1IHVtbGF1dCAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgMTMy OgotCQkJd2FkZGNoKHdpbl9pbi0+cHRyLCAyMjgpOwkvKmEgdW1sYXV0ICovCi0JCQlicmVh azsKLQkJY2FzZSAxNDI6Ci0JCQl3YWRkY2god2luX2luLT5wdHIsIDE5Nik7CS8qQSB1bWxh dXQgKi8KLQkJCWJyZWFrOwotCQljYXNlIDE0ODoKLQkJCXdhZGRjaCh3aW5faW4tPnB0ciwg MjQ2KTsJLypvIHVtbGF1dCAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgMTUzOgotCQkJd2FkZGNo KHdpbl9pbi0+cHRyLCAyMTQpOwkvKk8gdW1sYXV0ICovCi0JCQlicmVhazsKLQkJY2FzZSAx NTQ6Ci0JCQl3YWRkY2god2luX2luLT5wdHIsIDIyMCk7CS8qVSB1bWxhdXQgKi8KKwljYXNl IFRBTEtNT0RFOi8vIENsZWFyIHRoZSBzY3JlZW4gYW5kIHJlLWluaXQuIFdoaWNoIGxvb2tz IGF3ZnVsLiAgCisJCQl3Y2xlYXIod2luX291dC0+cHRyKTsKKwkJCXdyZWZyZXNoKHdpbl9v dXQtPnB0cik7CisJCQl3Y2xlYXIod2luX2luLT5wdHIpOworCQkvLwl3cmVmcmVzaCh3aW5f aW4tPnB0cik7CisJCQl3aW50YWItPm5leHQgPSAwOworCQkJZW5kd2luKCk7CisJCQlzdGFy dF9zY3JlZW4oY2FsbCk7CisJCQlzdGFydF90YWxrX21vZGUod2ludGFiLCB3aW5faW4sIHdp bl9vdXQpOworCQkJcmVzdG9yZWN1cnNvcihtb2RlLCB3aW5fb3V0KTsKIAkJCWJyZWFrOwot CQljYXNlIDIyNToKLQkJCXdhZGRjaCh3aW5faW4tPnB0ciwgMjIzKTsJLypzeiAqLworCisJ Y2FzZSBTTEFWRU1PREU6Ly8gQWxzbyBmaXggbWUuICAKKwkJCXdjbGVhcih3aW5fb3V0LT5w dHIpOworCQkJLy93cmVmcmVzaCh3aW5fb3V0LT5wdHIpOworCQkJd2ludGFiLT5uZXh0ID0g MDsKKwkJCWVuZHdpbigpOworCQkJc3RhcnRfc2NyZWVuKGNhbGwpOworCQkJc3RhcnRfc2xh dmVfbW9kZSh3aW50YWIsIHdpbl9pbiwgd2luX291dCk7CisJCQlyZXN0b3JlY3Vyc29yKG1v ZGUsIHdpbl9vdXQpOwogCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQl7Ci0JCQkJaWYgKGJ1 ZltjbnRdID4gMTI3KQotCQkJCQl3YWRkY2god2luX2luLT5wdHIsICcuJyk7Ci0JCQkJZWxz ZQotCQkJCQl3YWRkY2god2luX2luLT5wdHIsIGJ1ZltjbnRdKTsKKwl9Cit9CisKKwordm9p ZCB3YWRkbnN0cmNyY2hlY2sodF93aW4gKndpbl9pbiwgY2hhciAqYnVmLCBpbnQgYnl0ZXMs IGludCBkcmF3LCBpbnQgbW9kZSwgdF93aW4gKndpbl9vdXQpCit7CisJaW50IG47CisJZm9y IChuPTA7bjxieXRlcztuKyspeworCQlpbnQgd2lkdGg7CisJCWluY2hhcmJ1ZltpbmNoYXJi dWZsZW4rK10gPSBidWZbbl07CisJCWlmIChjb21wbGV0ZWNoYXJsZW4oaW5jaGFyYnVmKSA+ IGluY2hhcmJ1Zmxlbiljb250aW51ZTsKKwkJaWYgKGVhdGNoYXIgJiYgKGluY2hhcmJ1Zlsw XSA9PSAnXG4nKSl7CisJCQllYXRjaGFyID0gMDsKKwkJCWluY2hhcmJ1ZmxlbiA9IDA7CisJ CQljb250aW51ZTsKKwkJCX0KKwkJd2lkdGggPSB3aWR0aGNoYXIoaW5jaGFyYnVmLCBpbmNo YXJidWZsZW4sIGluYnVmd2lkKTsKKwkJZWF0Y2hhciA9IDA7CisJCWlmIChkcmF3KSB7CisJ CQlpZiAod2luX2luKSB3YWRkbnN0cih3aW5faW4tPnB0ciwgaW5jaGFyYnVmLCBpbmNoYXJi dWZsZW4pOworCQkJZWxzZSB3cml0ZShTVERPVVRfRklMRU5PLCBpbmNoYXJidWYsIGluY2hh cmJ1Zmxlbik7CisJCX0KKwkJaWYgKGluY2hhcmJ1ZlswXSA9PSAnXG4nKWluY2hhcmJ1Zmxl biA9IDA7CisJCWVsc2UgaWYgKHdpZHRoICsgaW5idWZ3aWQgPD0gQ09MUyl7CisJCQlpZiAo aW5idWZsZW4gKyBpbmNoYXJidWZsZW4gPD0gTUFYX0JVRkxFTil7CisJCQkJbWVtY3B5KCZp bmJ1ZltpbmJ1Zmxlbl0sIGluY2hhcmJ1ZiwgaW5jaGFyYnVmbGVuKTsKKwkJCQlpbmJ1Zmxl biArPSBpbmNoYXJidWZsZW47CiAJCQl9CisJCQlpbmNoYXJidWZsZW4gPSAwOworCQkJaW5i dWZ3aWQgKz0gd2lkdGg7CisJCQlpZiAoaW5idWZ3aWQgPj0gQ09MUyllYXRjaGFyID0gMTsK KwkJCWNvbnRpbnVlOy8vIFNraXAgdG8gbmV4dCBsaW5lIHdoZW4gd2lkdGggZ29lcyBvdmVy LgorCQl9CisJCWFkZHNjcm9sbGxpbmUoaW5idWYsIGluYnVmbGVuKTsKKwkJaWYgKGluY2hh cmJ1Zmxlbil7CisJCQltZW1jcHkoJmluYnVmWzBdLCBpbmNoYXJidWYsIGluY2hhcmJ1Zmxl bik7CisJCQlpbmJ1ZmxlbiA9IGluY2hhcmJ1ZmxlbjsKKwkJCWluY2hhcmJ1ZmxlbiA9IDA7 CisJCQlpbmJ1ZndpZCA9IHdpZHRoOworCQl9CisJCWVsc2UgeworCQkJaW5idWZsZW4gPSAw OworCQkJaW5idWZ3aWQgPSAwOworCQl9CisJCWlmIChzY3JvbGxlZHVwICYmIHdpbl9pbiAm JiB3aW5fb3V0KXsKKwkJCXNjcm9sbGVkdXArKzsgLy8gc2Nyb2xsZWR1cCBpcyByZWxhdGl2 ZSB0byBib3R0b20gbGluZSAJCisJCQlzY3JvbGx0ZXh0KHdpbl9pbiwgMCwgbW9kZSwgd2lu X291dCk7CiAJCX0KIAl9CisJaWYgKGRyYXcgJiYgd2luX2luKSB3cmVmcmVzaCh3aW5faW4t PnB0cik7CisJCit9CiAKLS8qICAgICAgd2FkZG5zdHIod2luX2luLT5wdHIsIGJ1ZiwgYnl0 ZXMpOyAqLwotCXdyZWZyZXNoKHdpbl9pbi0+cHRyKTsKIAordm9pZCB3cml0ZWluY29tKGlu dCBtb2RlLCBpbnQgZW5jb2RpbmcsIHRfd2luICogd2luX2luLCB1bnNpZ25lZCBjaGFyIGJ1 ZltdLCBpbnQgYnl0ZXMsIHRfd2luICp3aW5fb3V0KQoreworCWlmIChtb2RlICYgUkFXTU9E RSkgd2FkZG5zdHJjcmNoZWNrKDAsIChjaGFyICopYnVmLCBieXRlcywxLCBtb2RlLCAwKTsK KwllbHNlIGlmIChlbmNvZGluZyA9PSBVVEY4RU5DT0RJTkcpCisgICAgICAgICAgICAgICAg d2FkZG5zdHJjcmNoZWNrKHdpbl9pbiwgKGNoYXIgKilidWYsIGJ5dGVzLHNjcm9sbGVkdXAg PT0gMCwgbW9kZSwgd2luX291dCk7CisJZWxzZSB7CisJCWNoYXIgKmluYnVmID0gKGNoYXIg KikgYnVmLCBvdXRbTUFYX0JVRkxFTl0sICpvdXRidWY9b3V0OworCQlzaXplX3QgaW5zaXpl ID0gYnl0ZXMsIG91dHNpemUgPSBNQVhfQlVGTEVOOyAKKwkJaWNvbnYoaWJtODUwdG91dGY4 LCAmaW5idWYsICZpbnNpemUsICZvdXRidWYsICZvdXRzaXplKTsKKyAgICAgICAgICAgICAg ICB3YWRkbnN0cmNyY2hlY2sod2luX2luLCBvdXQsIE1BWF9CVUZMRU4tb3V0c2l6ZSxzY3Jv bGxlZHVwID09IDAsIG1vZGUsIHdpbl9vdXQpOworCX0KIAlyZXR1cm47CiB9Ci0KK3N0YXRp YyB2b2lkIHdyaXRlaW5jb21zdHIoaW50IG1vZGUsIGludCBlbmNvZGluZywgdF93aW4gKiB3 aW5faW4sIGNoYXIgYnVmW10sIHRfd2luICp3aW5fb3V0KQoreworCWludCBsZW47CisJbGVu ID0gc3RybGVuKGJ1Zik7CisJd3JpdGVpbmNvbShtb2RlLCBlbmNvZGluZywgd2luX2luLCAo dW5zaWduZWQgY2hhciAqKWJ1ZiwgbGVuLCB3aW5fb3V0KTsKK30KKworaW50ICBvdXRzdHJp bmcoY2hhciAqYnVmLCB3Y2hhcl90ICpzdHJpbmcsIGludCBieXRlcywgaW50IGVuY29kaW5n KQoreworCWNoYXIgKmluYnVmID0gKGNoYXIgKikgc3RyaW5nLCAqb3V0YnVmID0gYnVmOwor CXNpemVfdCBpbnNpemUgPSBieXRlcyAqIHNpemVvZih3Y2hhcl90KSwgb3V0c2l6ZSA9IE1B WF9CVUZMRU4tMTsgCisJaWYgKGVuY29kaW5nID09IFVURjhFTkNPRElORyl7CisJCWljb252 KHdjaGFydHRvdXRmOCwgJmluYnVmLCAmaW5zaXplLCAmb3V0YnVmLCAmb3V0c2l6ZSk7CisJ fQorCWVsc2UgeworCQlpY29udih3Y2hhcnR0b2libTg1MCwgJmluYnVmLCAmaW5zaXplLCAm b3V0YnVmLCAmb3V0c2l6ZSk7CisJCQkKKwl9CQkJCisJYnVmWyhNQVhfQlVGTEVOLTEpLW91 dHNpemVdID0gJ1wwJzsgCisJcmV0dXJuIChNQVhfQlVGTEVOLTEpLW91dHNpemU7Cit9CisJ CiBpbnQgZ2V0c3RyaW5nKHdpbnQgKiB3aW50YWIsIGNoYXIgdGV4dFtdLCBjaGFyIGJ1Zltd KQogewotCWludCBjOworCXdjaGFyX3QgYzsKIAlpbnQgeXBvcyA9IDAsIHhwb3MgPSAwOwog CWludCBieXRlcyA9IDA7Ci0KKwl3Y2hhcl90IHdidWZbTUFYX0JVRkxFTl07CiAJV0lORE9X ICp3aW4gPSB3aW5vcGVuKHdpbnRhYiwgMywgQ09MUywgMTAsIDAsIFRSVUUpOworCWludCBk b25lID0gMDsKIAogCXdtb3ZlKHdpbiwgMSwgMik7CiAJd2FkZHN0cih3aW4sIHRleHQpOwog CXdyZWZyZXNoKHdpbik7CiAKIAlkbyB7Ci0JCWMgPSBnZXRjaCgpOwotCQlpZiAoYyAhPSBF UlIpIHsKLQkJCXN3aXRjaCAoYykgewotCQkJY2FzZSBLRVlfQkFDS1NQQUNFOgotCQkJY2Fz ZSAxMjc6Ci0JCQkJewotCQkJCQlnZXR5eCh3aW4sIHlwb3MsIHhwb3MpOwotCQkJCQlpZiAo eHBvcyA+IDAgJiYgYnl0ZXMgPiAwKSB7Ci0JCQkJCQl3bW92ZSh3aW4sIHlwb3MsIC0teHBv cyk7Ci0JCQkJCQl3YWRkY2god2luLCAnICcpOwotCQkJCQkJd21vdmUod2luLCB5cG9zLCB4 cG9zKTsKLQkJCQkJCWJ5dGVzLS07Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQlj YXNlIChpbnQpICdcbic6Ci0JCQljYXNlIChpbnQpICdccic6Ci0JCQljYXNlIEtFWV9FTlRF UjoKLQkJCQl7Ci0JCQkJCXdhZGRjaCh3aW4sICdcbicpOwotCQkJCQlidWZbYnl0ZXMrK10g PSAoY2hhcikgJ1xuJzsKLQkJCQkJd3JlZnJlc2god2luKTsKLQkJCQkJYnVmW2J5dGVzXSA9 IDA7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQl7Ci0JCQkJCXdhZGRj aCh3aW4sIChjaGFyKSBjKTsKLQkJCQkJYnVmW2J5dGVzKytdID0gKGNoYXIpIGM7CisJCWlu dCByOworCQl3aW50X3QgY2k7CisJCXIgPSBnZXRfd2NoKCZjaSk7CisJCWlmIChyICE9IEVS UikgeworCQkJYyA9ICh3Y2hhcl90KSBjaTsKKwkJCWlmICAoKChyID09IEtFWV9DT0RFX1lF UykgJiYgKGMgPT0gS0VZX0JBQ0tTUEFDRSkpfHwKKwkJCQkgICAgKChyID09IE9LKSAmJiAo KGM9PTEyNyl8fCAoYz09OCkpKSl7CisJCQkJZ2V0eXgod2luLCB5cG9zLCB4cG9zKTsKKwkJ CQlpZiAoYnl0ZXMgPiAwKSB7CisJCQkJCWludCB3aWR0aCwgajsKKwkJCQkJd2lkdGggPSB3 Y3dpZHRoY29udHJvbCh3YnVmW2J5dGVzLTFdKTsKKwkJCQkJZm9yIChqPTA7ajx3aWR0aDtq KyspIG12d2RlbGNoKHdpbiwgeXBvcywgeHBvcy13aWR0aCk7CisJCQkJCXhwb3MgLT0gd2lk dGg7CisJCQkJCXdtb3ZlKHdpbiwgeXBvcywgeHBvcyk7CisJCQkJCWJ5dGVzLS07CiAJCQkJ fQogCQkJfQorCQkJZWxzZSBpZiAoKCAocj09S0VZX0NPREVfWUVTKSAmJiAoYyA9PSBLRVlf RU5URVIpKXx8CisJCQkJICAgKCAociA9PSBPSykgJiYgKChjPT0nXG4nKSB8fCAoYz09J1xy JykpKSl7CisJCQkJaW50IG91dF9jbnQ7CisJCQkJd2J1ZltieXRlcysrXSA9ICh3Y2hhcl90 KSAnXG4nOworCQkgCQlvdXRfY250ID0gb3V0c3RyaW5nKGJ1Ziwgd2J1ZiwgYnl0ZXMsIFVU RjhFTkNPRElORyk7CisJCQkJZG9uZSA9IDE7CisJCQl9CisJCQllbHNlIGlmIChyID09IEtF WV9DT0RFX1lFUyk7IC8vIFB1dCBpbiBjb2RlIGZvciBvdGhlciBLRVlDT0RFUyBoZXJlCisJ CQllbHNlIGlmIChieXRlcysyIDwgTUFYX0JVRkxFTil7CisJCQkJLy9pbnQgd2lkdGg7CisJ CQkJLy93aWR0aCA9IHdpbnNfbndjaHJteSh3aW4sIGMpOworCQkJCS8vZ2V0eXgod2luLCB5 cG9zLCB4cG9zKTsKKwkJCQkvL3dtb3ZlKHdpbiwgeXBvcywgeHBvcyt3aWR0aCk7CisJCQkJ d2J1ZltieXRlcysrXSA9IGM7CisJCQkJZHJhd2luYnVmKHdpbiwgd2J1ZiwgYnl0ZXMsIGJ5 dGVzKTsKKwkJCX0KIAkJCXdyZWZyZXNoKHdpbik7CiAJCX0KIAl9Ci0Jd2hpbGUgKGMgIT0g J1xuJyAmJiBjICE9ICdccicgJiYgYyAhPSBLRVlfRU5URVIpOworCXdoaWxlICghZG9uZSk7 CiAJZGVsd2luKHdpbik7CiAJd2luY2xvc2Uod2ludGFiKTsKIAlyZXR1cm4gMDsKIH0KIAog aW50IHJlYWRvdXRnKHRfd2luICogd2luX291dCwgd2ludCAqIHdpbnRhYiwgbWVudWl0ZW0g KiB0b3AsIGNoYXIgYnVmW10sCi0JICAgICBpbnQga2V5ZXNjKQorCSAgICAgaW50IGtleWVz YywgaW50IG1vZGUsIGludCBlbmNvZGluZywgdF93aW4gKndpbl9pbikKIHsKLQlpbnQgb3V0 X2NudDsKLQlpbnQgYzsKKwlpbnQgb3V0X2NudCwgcjsKKwl3aW50X3QgY2k7d2NoYXJfdCBj OwogCWludCB5cG9zID0gMCwgeHBvcyA9IDA7CiAJaW50IHZhbHVlOwogCi0JYyA9IGdldGNo KCk7Ci0JaWYgKGMgPT0gRVJSKQorCXIgPSBnZXRfd2NoKCZjaSk7CisJaWYgKHIgPT0gRVJS KQogCQlyZXR1cm4gMDsKLQorCWMgPSAod2NoYXJfdCkgY2k7CiAJaWYgKGMgPT0ga2V5ZXNj KSB7Ci0JCWlmICgodmFsdWUgPSB0b3BfbWVudSh3aW50YWIsIHRvcCwgMSkpID09IDApCisJ CWlmICgodmFsdWUgPSB0b3BfbWVudSh3aW50YWIsIHRvcCwgMSkpID09IDApeworCQkJcmVz dG9yZWN1cnNvcihtb2RlLCB3aW5fb3V0KTsKIAkJCXJldHVybiAwOworCQl9CisJCXJlc3Rv cmVjdXJzb3IobW9kZSwgd2luX291dCk7CiAJCWJ1ZlswXSA9ICd+JzsKIAkJc3dpdGNoICh2 YWx1ZSkgewogCQljYXNlIDB4MDE6CkBAIC0xMDU5LDYgKzE0MDUsNyBAQAogCQkJCWdldHN0 cmluZyh3aW50YWIsCiAJCQkJCSAgIlBsZWFzZSBlbnRlciBmaWxlbmFtZTogIiwKIAkJCQkJ ICAmYnVmWzJdKTsKKwkJCQlyZXN0b3JlY3Vyc29yKG1vZGUsIHdpbl9vdXQpOwogCQkJCXJl dHVybiBzdHJsZW4oYnVmKTsKIAkJCX0KIAkJY2FzZSAweDEyOgpAQCAtMTA4Myw2ICsxNDMw LDcgQEAKIAkJCQlnZXRzdHJpbmcod2ludGFiLAogCQkJCQkgICJQbGVhc2UgZW50ZXIgZmls ZW5hbWU6ICIsCiAJCQkJCSAgYnVmICsgMik7CisJCQkJcmVzdG9yZWN1cnNvcihtb2RlLCB3 aW5fb3V0KTsKIAkJCQlyZXR1cm4gc3RybGVuKGJ1Zik7CiAJCQl9CiAJCWNhc2UgMHgyMToK QEAgLTExMDYsOTcgKzE0NTQsMTY0IEBACiAJCXdyZWZyZXNoKHdpbl9vdXQtPnB0cik7CiAJ CXJldHVybiAyOwogCX0KLQlzd2l0Y2ggKGMpIHsKLQljYXNlIEtFWV9CQUNLU1BBQ0U6Ci0J Y2FzZSAxMjc6Ci0JCXsKKwlpZiAgKCgociA9PSBLRVlfQ09ERV9ZRVMpICYmIChjID09IEtF WV9CQUNLU1BBQ0UpKXx8CisJCQkoKHIgPT0gT0spICYmICgoYz09MTI3KXx8IChjPT04KSkp KXsKKwkJaWYgKChtb2RlID09IFNMQVZFTU9ERSkgJiYgc2Nyb2xsZWR1cCkgcmV0dXJuIDA7 ICAKKwkJd2hpbGUod2luX291dC0+Y3Vyc19wb3MgPiAwKXsKKwkJCWludCB3aWR0aDtpbnQg ajsKIAkJCWdldHl4KHdpbl9vdXQtPnB0ciwgeXBvcywgeHBvcyk7Ci0JCQlpZiAod2luX291 dC0+Ynl0ZXMgPiAwKSB7Ci0JCQkJaWYgKHdpbl9vdXQtPmN1cnNfcG9zIDwgd2luX291dC0+ Ynl0ZXMpIHsKLQkJCQkJbXZ3YWRkbnN0cih3aW5fb3V0LT5wdHIsIHlwb3MsCi0JCQkJCQkg ICAtLXhwb3MsCi0JCQkJCQkgICAmd2luX291dC0+Ci0JCQkJCQkgICBzdHJpbmdbd2luX291 dC0+Ci0JCQkJCQkJICBjdXJzX3Bvc10sCi0JCQkJCQkgICB3aW5fb3V0LT5ieXRlcyAtCi0J CQkJCQkgICB3aW5fb3V0LT5jdXJzX3Bvcyk7Ci0JCQkJCXdhZGRjaCh3aW5fb3V0LT5wdHIs ICcgJyk7Ci0JCQkJCW1lbW1vdmUoJndpbl9vdXQtPgotCQkJCQkJc3RyaW5nW3dpbl9vdXQt PmN1cnNfcG9zIC0KLQkJCQkJCSAgICAgICAxXSwKLQkJCQkJCSZ3aW5fb3V0LT5zdHJpbmdb d2luX291dC0+Ci0JCQkJCQkJCSBjdXJzX3Bvc10sCi0JCQkJCQl3aW5fb3V0LT5ieXRlcyAt Ci0JCQkJCQl3aW5fb3V0LT5jdXJzX3Bvcyk7Ci0JCQkJfSBlbHNlCi0JCQkJCW12d2FkZGNo KHdpbl9vdXQtPnB0ciwgeXBvcywKLQkJCQkJCSAtLXhwb3MsICcgJyk7Ci0KLQkJCQl3bW92 ZSh3aW5fb3V0LT5wdHIsIHlwb3MsIHhwb3MpOwotCQkJCXdpbl9vdXQtPmJ5dGVzLS07Ci0J CQkJd2luX291dC0+Y3Vyc19wb3MtLTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQljYXNlIEtF WV9MRUZUOgotCQlpZiAod2luX291dC0+Y3Vyc19wb3MgPiAwKSB7CisJCQl3aWR0aCA9IHdj d2lkdGhjb250cm9sKHdpbl9vdXQtPnN0cmluZ1t3aW5fb3V0LT5jdXJzX3Bvcy0xXSk7CisJ CQlmb3IgKGo9MDtqPHdpZHRoO2orKykgbXZ3ZGVsY2god2luX291dC0+cHRyLCB5cG9zLCB4 cG9zLXdpZHRoKTsKKwkJCXhwb3MgLT0gd2lkdGg7CisJCQl3bW92ZSh3aW5fb3V0LT5wdHIs IHlwb3MsIHhwb3MpOworCQkJaWYgKHdpbl9vdXQtPmN1cnNfcG9zIDwgd2luX291dC0+Ynl0 ZXMpIHsKKwkJCQltZW1tb3ZlKCZ3aW5fb3V0LT4KKwkJCQkJc3RyaW5nW3dpbl9vdXQtPmN1 cnNfcG9zIC0gMV0sCisJCQkJCSZ3aW5fb3V0LT5zdHJpbmdbd2luX291dC0+IGN1cnNfcG9z XSwKKwkJCQkJKHdpbl9vdXQtPmJ5dGVzIC0KKwkJCQkJd2luX291dC0+Y3Vyc19wb3MpICog c2l6ZW9mKHdjaGFyX3QpKTsKKwkJCQl9IAorCQkJd2luX291dC0+Ynl0ZXMtLTsKIAkJCXdp bl9vdXQtPmN1cnNfcG9zLS07Ci0JCQlnZXR5eCh3aW5fb3V0LT5wdHIsIHlwb3MsIHhwb3Mp OwotCQkJd21vdmUod2luX291dC0+cHRyLCB5cG9zLCB4cG9zIC0gMSk7CisJCQlpZiAod2lk dGgpYnJlYWs7CiAJCX0KLQkJYnJlYWs7Ci0JY2FzZSBLRVlfUklHSFQ6Ci0JCWlmICh3aW5f b3V0LT5jdXJzX3BvcyA8IHdpbl9vdXQtPmJ5dGVzKSB7CisJfQorCWVsc2UgaWYgKCggKHI9 PUtFWV9DT0RFX1lFUykgJiYgKGMgPT0gS0VZX0VOVEVSKSl8fAorCQkgICAoIChyID09IE9L KSAmJiAoKGM9PSdcbicpIHx8IChjPT0nXHInKSkpKXsKKwkJaWYgKChtb2RlID09IFNMQVZF TU9ERSkgJiYgc2Nyb2xsZWR1cCkgcmV0dXJuIDA7ICAKKwkJd2hpbGUgKHdpbl9vdXQtPmN1 cnNfcG9zIDwgd2luX291dC0+Ynl0ZXMpIHsgLy8gTW92ZSB0byBlbmQgb2YgdGhlIGxpbmUK KwkJCWludCB3aWR0aDsKKwkJCXdpZHRoID0gd2N3aWR0aGNvbnRyb2wod2luX291dC0+c3Ry aW5nW3dpbl9vdXQtPmN1cnNfcG9zXSk7CiAJCQl3aW5fb3V0LT5jdXJzX3BvcysrOwogCQkJ Z2V0eXgod2luX291dC0+cHRyLCB5cG9zLCB4cG9zKTsKLQkJCXdtb3ZlKHdpbl9vdXQtPnB0 ciwgeXBvcywgeHBvcyArIDEpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgS0VZX0VOVEVSOgot CWNhc2UgKGludCkgJ1xuJzoKLQljYXNlIChpbnQpICdccic6Ci0JCXsKLQkJCWlmICh3aW5f b3V0LT5jdXJzX3BvcyA8IHdpbl9vdXQtPmJ5dGVzKSB7Ci0JCQkJZ2V0eXgod2luX291dC0+ cHRyLCB5cG9zLCB4cG9zKTsKLQkJCQl3bW92ZSh3aW5fb3V0LT5wdHIsIHlwb3MsCi0JCQkJ ICAgICAgeHBvcyArIHdpbl9vdXQtPmJ5dGVzIC0KLQkJCQkgICAgICB3aW5fb3V0LT5jdXJz X3Bvcyk7CisJCQl3bW92ZSh3aW5fb3V0LT5wdHIsIHlwb3MsIHhwb3MgKyB3aWR0aCk7CiAJ CQl9Ci0JCQl3YWRkY2god2luX291dC0+cHRyLCAnXG4nKTsKLQkJCXdpbl9vdXQtPnN0cmlu Z1t3aW5fb3V0LT5ieXRlcysrXSA9IChjaGFyKSAnXG4nOwotCQkJd3JlZnJlc2god2luX291 dC0+cHRyKTsKLQkJCXN0cm5jcHkoYnVmLCB3aW5fb3V0LT5zdHJpbmcsIHdpbl9vdXQtPmJ5 dGVzKTsKLQkJCXdyZWZyZXNoKHdpbl9vdXQtPnB0cik7Ci0JCQlvdXRfY250ID0gd2luX291 dC0+Ynl0ZXM7Ci0JCQl3aW5fb3V0LT5ieXRlcyA9IDA7Ci0JCQl3aW5fb3V0LT5jdXJzX3Bv cyA9IDA7Ci0JCQlyZXR1cm4gb3V0X2NudDsKKwkJd2FkZGNoKHdpbl9vdXQtPnB0ciwgJ1xu Jyk7CisJCXdpbl9vdXQtPnN0cmluZ1t3aW5fb3V0LT5ieXRlcysrXSA9ICh3Y2hhcl90KSAn XG4nOworCQl3cmVmcmVzaCh3aW5fb3V0LT5wdHIpOworCQlvdXRfY250ID0gb3V0c3RyaW5n KGJ1Ziwgd2luX291dC0+c3RyaW5nLCB3aW5fb3V0LT5ieXRlcywgZW5jb2RpbmcpOworCQlp ZiAobW9kZSA9PSBTTEFWRU1PREUpeworCQkJY2hhciBvYnVmW01BWF9CVUZMRU5dOworCQkJ Y2hhciAqaW5idWYgPSAoY2hhciAqKXdpbl9vdXQtPnN0cmluZywgKm91dGJ1ZiA9IG9idWY7 CisJCQlzaXplX3QgaW5zaXplID0gd2luX291dC0+Ynl0ZXMgKiBzaXplb2Yod2NoYXJfdCks IG91dHNpemUgPSBNQVhfQlVGTEVOOyAKKwkJCWljb252KHdjaGFydHRvdXRmOCwgJmluYnVm LCAmaW5zaXplLCAmb3V0YnVmLCAmb3V0c2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAg ICB3YWRkbnN0cmNyY2hlY2sod2luX2luLCBvYnVmLCBNQVhfQlVGTEVOLW91dHNpemUsIDAs IG1vZGUsIHdpbl9vdXQpOworCQl9CisJCXdpbl9vdXQtPmJ5dGVzID0gMDsKKwkJd2luX291 dC0+Y3Vyc19wb3MgPSAwOworCQlyZXR1cm4gb3V0X2NudDsKKwl9CisJZWxzZSBpZiAociA9 PSBLRVlfQ09ERV9ZRVMpeworCQlzd2l0Y2goYyl7CisJCQljYXNlIEtFWV9MRUZUOi8vIENo YXJhY3RlciBvZiAwIHdpZHRoIAorCQkJCXdoaWxlICh3aW5fb3V0LT5jdXJzX3BvcyA+IDAp IHsKKwkJCQkJaW50IHdpZHRoOworCQkJCQl3aW5fb3V0LT5jdXJzX3Bvcy0tOworCQkJCQl3 aWR0aCA9IHdjd2lkdGhjb250cm9sKHdpbl9vdXQtPnN0cmluZ1t3aW5fb3V0LT5jdXJzX3Bv c10pOworCQkJCQlnZXR5eCh3aW5fb3V0LT5wdHIsIHlwb3MsIHhwb3MpOworCQkJCQl3bW92 ZSh3aW5fb3V0LT5wdHIsIHlwb3MsIHhwb3MgLSB3aWR0aCk7CisJCQkJCWlmICh3aWR0aCli cmVhazsgLy8gU2tpcCB0byBub24td2lkdGgKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNl IEtFWV9SSUdIVDoKKwkJCQl7CisJCQkJaW50IHNraXBwZWQgPSAwOy8vIFNraXAgb3ZlciAw IGxlbmd0aCBjaGFyYWN0ZXJzCisJCQkJd2hpbGUgKHdpbl9vdXQtPmN1cnNfcG9zIDwgd2lu X291dC0+Ynl0ZXMpIHsKKwkJCQkJaW50IHdpZHRoOworCQkJCQl3aWR0aCA9IHdjd2lkdGhj b250cm9sKHdpbl9vdXQtPnN0cmluZ1t3aW5fb3V0LT5jdXJzX3Bvc10pOworCQkJCQlpZiAo d2lkdGgpeworCQkJCQkJaWYgKHNraXBwZWQpYnJlYWs7CisJCQkJCQlza2lwcGVkID0gMTsK KwkJCQkJfQorCQkJCQl3aW5fb3V0LT5jdXJzX3BvcysrOworCQkJCQlnZXR5eCh3aW5fb3V0 LT5wdHIsIHlwb3MsIHhwb3MpOworCQkJCQl3bW92ZSh3aW5fb3V0LT5wdHIsIHlwb3MsIHhw b3MgKyB3aWR0aCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBLRVlfVVA6 CisJCQkJc2Nyb2xsdGV4dCh3aW5faW4sIDEsIG1vZGUsIHdpbl9vdXQpOworCQkJCWJyZWFr OworCQkJY2FzZSBLRVlfRE9XTjoKKwkJCQlzY3JvbGx0ZXh0KHdpbl9pbiwgLTEsIG1vZGUs IHdpbl9vdXQpOworCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfTlBBR0U6CisJCQkJc2Nyb2xs dGV4dCh3aW5faW4sIC13aW5faW4tPm1heF95LCBtb2RlLCB3aW5fb3V0KTsKKwkJCQlicmVh azsKKwkJCWNhc2UgS0VZX1BQQUdFOgorCQkJCXNjcm9sbHRleHQod2luX2luLCB3aW5faW4t Pm1heF95LCBtb2RlLCB3aW5fb3V0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgS0VZX0hPTUU6 CisJCQkJd2hpbGUgKHdpbl9vdXQtPmN1cnNfcG9zID4gMCkgeworCQkJCQlpbnQgd2lkdGg7 CisJCQkJCXdpbl9vdXQtPmN1cnNfcG9zLS07CisJCQkJCXdpZHRoID0gd2N3aWR0aGNvbnRy b2wod2luX291dC0+c3RyaW5nW3dpbl9vdXQtPmN1cnNfcG9zXSk7CisJCQkJCWdldHl4KHdp bl9vdXQtPnB0ciwgeXBvcywgeHBvcyk7CisJCQkJCXdtb3ZlKHdpbl9vdXQtPnB0ciwgeXBv cywgeHBvcyAtIHdpZHRoKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIEtFWV9FTkQ6 CisJCQkJd2hpbGUgKHdpbl9vdXQtPmN1cnNfcG9zIDwgd2luX291dC0+Ynl0ZXMpIHsgLy8g TW92ZSB0byBlbmQgb2YgdGhlIGxpbmUKKwkJCQkJaW50IHdpZHRoOworCQkJCQl3aWR0aCA9 IHdjd2lkdGhjb250cm9sKHdpbl9vdXQtPnN0cmluZ1t3aW5fb3V0LT5jdXJzX3Bvc10pOwor CQkJCQl3aW5fb3V0LT5jdXJzX3BvcysrOworCQkJCQlnZXR5eCh3aW5fb3V0LT5wdHIsIHlw b3MsIHhwb3MpOworCQkJCQl3bW92ZSh3aW5fb3V0LT5wdHIsIHlwb3MsIHhwb3MgKyB3aWR0 aCk7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgS0VZX0RDOnsKKwkJCQlpbnQgc2tp cHBlZCA9IDA7CisJCQkJaWYgKChtb2RlID09IFNMQVZFTU9ERSkgJiYgc2Nyb2xsZWR1cCkg cmV0dXJuIDA7ICAKKwkJCQl3aGlsZSAod2luX291dC0+Y3Vyc19wb3MgPCB3aW5fb3V0LT5i eXRlcyl7CisJCQkJCWludCB3aWR0aDtpbnQgajsKKwkJCQkJZ2V0eXgod2luX291dC0+cHRy LCB5cG9zLCB4cG9zKTsKKwkJCQkJd2lkdGggPSB3Y3dpZHRoY29udHJvbCh3aW5fb3V0LT5z dHJpbmdbd2luX291dC0+Y3Vyc19wb3NdKTsKKwkJCQkJaWYgKHdpZHRoKXsKKwkJCQkJCWlm IChza2lwcGVkKWJyZWFrOworCQkJCQkJc2tpcHBlZCA9IDE7CisJCQkJCX0KKwkJCQkJZm9y IChqPTA7ajx3aWR0aDtqKyspIG12d2RlbGNoKHdpbl9vdXQtPnB0ciwgeXBvcywgeHBvcyk7 CisJCQkJCWlmICh3aW5fb3V0LT5jdXJzX3BvcyArIDEgPCB3aW5fb3V0LT5ieXRlcykgewor CQkJCQkJbWVtbW92ZSgmd2luX291dC0+IHN0cmluZ1t3aW5fb3V0LT5jdXJzX3Bvc10sCisJ CQkJCQkJJndpbl9vdXQtPnN0cmluZ1t3aW5fb3V0LT4gY3Vyc19wb3MrMV0sCisJCQkJCQkJ KHdpbl9vdXQtPmJ5dGVzIC0gKHdpbl9vdXQtPmN1cnNfcG9zKzEpKSAqIHNpemVvZih3Y2hh cl90KSk7CisJCQkJCX0gCisJCQkJCXdpbl9vdXQtPmJ5dGVzLS07CisJCQkJfQorCQkJCWJy ZWFrOworCQkJfQorCQkJY2FzZSBLRVlfUkVTSVpFOgorCQkJCWJyZWFrOworCQkJY2FzZSBL RVlfQkFDS1NQQUNFOgorCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfRU5URVI6CisJCQkJYnJl YWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOwogCQl9CisJfQorCWVsc2Ugc3dpdGNoIChj KSB7CisJY2FzZSA4OgorCWNhc2UgMTI3OgorCWNhc2UgJ1xyJzoKKwljYXNlICdcbic6CiAJ CWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXsKLQkJCXdhZGRjaCh3aW5fb3V0LT5wdHIsIChjaGFy KSBjKTsKKwkJaWYgKChtb2RlID09IFNMQVZFTU9ERSkgJiYgc2Nyb2xsZWR1cCkgcmV0dXJu IDA7IC8vIERvbid0IHRyeSB0byBlZGl0IHdoaWxlIHNjcm9sbGVkIHVwIGluIFNMQVZFbW9k ZS4KKwkJCQkJCS8vIEl0J3MganVzdCBub3QgcG9zc2libGUgYmVjYXVzZSB0aGUgY3Vyc29y IGlzIG9mZiBzY3JlZW4gCisJCWlmICh3aW5fb3V0LT5ieXRlcyA8IE1BWF9CVUZMRU4gKQl7 CiAJCQlpZiAod2luX291dC0+Y3Vyc19wb3MgPCB3aW5fb3V0LT5ieXRlcykgewotCQkJCWdl dHl4KHdpbl9vdXQtPnB0ciwgeXBvcywgeHBvcyk7Ci0JCQkJd2FkZG5zdHIod2luX291dC0+ cHRyLAotCQkJCQkgJndpbl9vdXQtPnN0cmluZ1t3aW5fb3V0LT4KLQkJCQkJCQkgIGN1cnNf cG9zXSwKLQkJCQkJIHdpbl9vdXQtPmJ5dGVzIC0KLQkJCQkJIHdpbl9vdXQtPmN1cnNfcG9z KTsKIAkJCQltZW1tb3ZlKCZ3aW5fb3V0LT4KIAkJCQkJc3RyaW5nW3dpbl9vdXQtPmN1cnNf cG9zICsgMV0sCi0JCQkJCSZ3aW5fb3V0LT5zdHJpbmdbd2luX291dC0+Ci0JCQkJCQkJIGN1 cnNfcG9zXSwKLQkJCQkJd2luX291dC0+Ynl0ZXMgLQotCQkJCQl3aW5fb3V0LT5jdXJzX3Bv cyk7Ci0JCQkJd2luX291dC0+c3RyaW5nW3dpbl9vdXQtPmN1cnNfcG9zXSA9Ci0JCQkJICAg IChjaGFyKSBjOwotCQkJCXdtb3ZlKHdpbl9vdXQtPnB0ciwgeXBvcywgeHBvcyk7Ci0JCQl9 IGVsc2UKLQkJCQl3aW5fb3V0LT5zdHJpbmdbd2luX291dC0+Ynl0ZXNdID0gKGNoYXIpIGM7 Ci0KKwkJCQkJJndpbl9vdXQtPnN0cmluZ1t3aW5fb3V0LT4gY3Vyc19wb3NdLAorCQkJCQko d2luX291dC0+Ynl0ZXMgLQorCQkJCQl3aW5fb3V0LT5jdXJzX3BvcykgKiBzaXplb2Yod2No YXJfdCkpOyAKKwkJCX0KKwkJCXdpbl9vdXQtPnN0cmluZ1t3aW5fb3V0LT5jdXJzX3Bvc10g PSAgYzsKIAkJCXdpbl9vdXQtPmJ5dGVzKys7CiAJCQl3aW5fb3V0LT5jdXJzX3BvcysrOwor CQkJZHJhd2luYnVmKHdpbl9vdXQtPnB0ciwgd2luX291dC0+c3RyaW5nLCB3aW5fb3V0LT5i eXRlcywgd2luX291dC0+Y3Vyc19wb3MpOworCQkJYnJlYWs7CiAJCX0KIAl9CiAJd3JlZnJl c2god2luX291dC0+cHRyKTsKQEAgLTE0NjUsOCArMTg4MCw4IEBACiAJcmV0dXJuOwogfQog Ci0KLWludCBjbWRfY2FsbChjaGFyICpjYWxsW10sIGludCBtb2RlKQorCQoraW50IGNtZF9j YWxsKGNoYXIgKmNhbGxbXSwgaW50IG1vZGUsIGludCBlbmNvZGluZykKIHsKIAltZW51aXRl bSBjb25bXSA9IHsKIAkJeyJ+UmVjb25uZWN0IiwgJ1InLCBNX0lURU0sICh2b2lkICopIDB4 MDF9LApAQCAtMTUzMCw4ICsxOTQ1LDggQEAKIAljaGFyICpjLCAqdDsKIAlpbnQgZXh0cmFj aCA9IDA7CiAJdF9ncCBncDsKLQl0X3dpbiB3aW5faW47Ci0JdF93aW4gd2luX291dDsKKwl0 X3dpbiB3aW5faW4gPSB7MH07CisJdF93aW4gd2luX291dCA9IHswfTsKIAlXSU5ET1cgKnN3 aW4gPSAwOwogCWludCBjbnQ7CiAJaW50IGNyYyA9IDA7CkBAIC0xNTQ4LDEyICsxOTYzLDE0 IEBACiAKIAlpZiAoKGZkID0gY29ubmVjdF90byhjYWxsKSkgPT0gLTEpCiAJCXJldHVybiBG QUxTRTsKLQorCQogCWludGVycnVwdGVkID0gRkFMU0U7CisJc2lnd2luY2hzaWduYWwgPSBG QUxTRTsKIAlzaWduYWwoU0lHUVVJVCwgY21kX2ludHIpOwogCXNpZ25hbChTSUdJTlQsIFNJ R19JR04pOwogCXNpZ25hbChTSUdUU1RQLCBTSUdfSUdOKTsKLQorCXNpZ25hbChTSUdXSU5D SCwgY21kX3NpZ3dpbmNoKTsKKwkKIAlmY250bChmZCwgRl9TRVRGTCwgT19OT05CTE9DSyk7 CiAJZmNudGwoU1RESU5fRklMRU5PLCBGX1NFVEZMLCBPX05PTkJMT0NLKTsKIApAQCAtMTU3 MiwyNiArMTk4OSwzNyBAQAogCQkJZmZsdXNoKHN0ZG91dCk7CiAJCX0KIAl9Ci0KKwkKIAl3 aGlsZSAoVFJVRSkgewotCQlzdHJ1Y3QgdGltZXZhbCB0djsKKwkJc3RydWN0IHRpbWVzcGVj IHR2OworCQlzaWdzZXRfdCBzaWdtYXNrOwogCQl0di50dl9zZWMgPSAwOwotCQl0di50dl91 c2VjID0gMTA7CisJCXR2LnR2X25zZWMgPSAxMDAwMDsgCiAKIAkJRkRfWkVSTygmc29ja19y ZWFkKTsKIAkJRkRfU0VUKFNURElOX0ZJTEVOTywgJnNvY2tfcmVhZCk7CiAJCUZEX1NFVChm ZCwgJnNvY2tfcmVhZCk7CiAJCUZEX1pFUk8oJnNvY2tfd3JpdGUpOwotCisJCXNpZ2VtcHR5 c2V0KCZzaWdtYXNrKTsKIAkJaWYgKHVwbG9hZGZpbGUgIT0gLTEpCiAJCQlGRF9TRVQoZmQs ICZzb2NrX3dyaXRlKTsKIAotCQlpZiAoc2VsZWN0KGZkICsgMSwgJnNvY2tfcmVhZCwgJnNv Y2tfd3JpdGUsIE5VTEwsICh1cGxvYWRmaWxlID09IC0xICYmIGRvd25sb2FkZmlsZSA9PSAt MSkgPyBOVUxMIDogJnR2KSA9PSAtMSkgeworCQlpZiAocHNlbGVjdChmZCArIDEsICZzb2Nr X3JlYWQsICZzb2NrX3dyaXRlLCBOVUxMLCAodXBsb2FkZmlsZSA9PSAtMSAmJiBkb3dubG9h ZGZpbGUgPT0gLTEpID8gTlVMTCA6ICZ0diwgJnNpZ21hc2spID09IC0xKSB7CiAJCQlpZiAo IWludGVycnVwdGVkICYmIGVycm5vID09IEVBR0FJTikKIAkJCQljb250aW51ZTsKLQkJCWlm ICghaW50ZXJydXB0ZWQpCi0JCQkJcGVycm9yKCJzZWxlY3QiKTsKLQkJCWJyZWFrOworCQkJ aWYgKChlcnJubyA9PSBFSU5UUikgJiYgc2lnd2luY2hzaWduYWwpeworCQkJCS8vIEp1c3Qg cHJvY2VzcyBzY3JlZW4gcmVzaXplIGhlcmUuCisJCQkJcmVpbml0X21vZGUobW9kZSwgJndp bnRhYiwgJndpbl9pbiwKKwkJCQkJJndpbl9vdXQsIGNhbGwpOworCQkJCXNpZ3dpbmNoc2ln bmFsID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCWlmICghaW50 ZXJydXB0ZWQpeworIAkJCQkJcGVycm9yKCJzZWxlY3QiKTsKKwkJCQl9CisJCQkJYnJlYWs7 CisJCQl9CQogCQl9CiAJCWlmIChGRF9JU1NFVChmZCwgJnNvY2tfcmVhZCkpIHsKIAkJCS8q IGJ5dGVzID0gcmVhZChmZCwgYnVmLCA1MTEpOyAqLwpAQCAtMTYyOSw4ICsyMDU3LDkgQEAK IAkJCQkJY29udmVydF9jcl9sZihidWYsIGJ5dGVzKTsKIAkJCQkJaWYgKCFzZXZlbnBsdXMp IHsKIAotCQkJCQkJd3JpdGVpbmNvbShtb2RlLCAmd2luX2luLAotCQkJCQkJCSAgICh1bnNp Z25lZCBjaGFyICogKSBidWYsIGJ5dGVzKTsKKwkJCQkJCXdyaXRlaW5jb20obW9kZSwgZW5j b2RpbmcsICZ3aW5faW4sCisJCQkJCQkJICAgKHVuc2lnbmVkIGNoYXIgKiApIGJ1ZiwgYnl0 ZXMsICZ3aW5fb3V0KTsKKwkJCQkJCXJlc3RvcmVjdXJzb3IobW9kZSwgJndpbl9vdXQpOwog CQkJCQl9IGVsc2UgewogCQkJCQkJZm9yIChjbnQgPSAwOyBjbnQgPCBieXRlczsKIAkJCQkJ CSAgICAgY250KyspCkBAIC0xNzQ0LDcgKzIxNzMsNyBAQAogCQkJfSBlbHNlIHsKIAkJCQli eXRlcyA9CiAJCQkJICAgIHJlYWRvdXRnKCZ3aW5fb3V0LCAmd2ludGFiLCB0b3AsIGJ1ZiwK LQkJCQkJICAgICAweDFkKTsKKwkJCQkJICAgICAweDFkLCBtb2RlLCBlbmNvZGluZywgJndp bl9pbik7CiAJCQkJaWYgKGJ5dGVzID09IC0xKSB7CiAJCQkJCXdjbGVhcih3aW5faW4ucHRy KTsKIAkJCQkJd3JlZnJlc2god2luX2luLnB0cik7CkBAIC0xODA5LDI0ICsyMjM4LDI2IEBA CiAJCQkJY2FzZSAnPyc6CiAJCQkJY2FzZSAnaCc6CiAJCQkJY2FzZSAnSCc6Ci0JCQkJCXBy aW50ZigiXG5UaWxkZSBlc2NhcGVzOlxuIik7Ci0JCQkJCXByaW50ZigiLiAgIGNsb3NlXG4i KTsKLQkJCQkJcHJpbnRmKCJ+ICAgc2VuZCB+XG4iKTsKLQkJCQkJcHJpbnRmKCJyICAgcmVj b25uZWN0XG4iKTsKLQkJCQkJcHJpbnRmKCIhICAgc2hlbGxcbiIpOwotCQkJCQlwcmludGYo IlogICBzdXNwZW5kIHByb2dyYW0uIFJlc3VtZSB3aXRoIFwiZmdcIlxuIik7Ci0JCQkJCXBy aW50ZigicyAgIFN0b3AgdXBsb2FkXG4iKTsKLQkJCQkJcHJpbnRmKCJvICAgT3BlbiBsb2dc biIpOwotCQkJCQlwcmludGYoImMgICBDbG9zZSBsb2dcbiIpOwotCQkJCQlwcmludGYoIjAg ICBTd2l0Y2ggR1VJIHRvIFwiUkFXXCIgKGxpbmUpIG1vZGUgLSBhbHJlYWR5IGhlcmUgOylc biIpOwotCQkJCQlwcmludGYoIjEgICBTd2l0Y2ggR1VJIHRvIFwiU2xhdmVcIiBtb2RlXG4i KTsKLQkJCQkJcHJpbnRmKCIyICAgU3dpdGNoIEdVSSB0byBcIlRhbGtcIiAoc3BsaXQpIG1v ZGVcbiIpOwotCQkJCQlwcmludGYoInUgICBVcGxvYWRcbiIpOwotCQkJCQlwcmludGYoImEg ICBVcGxvYWQgKGF1dG9iaW4gcHJvdG9jb2wpXG4iKTsKLQkJCQkJcHJpbnRmKCJiICAgVXBs b2FkIGJpbmFyeSBkYXRhIChjcmxmIGNvbnZlcnNpb24pXG4iKTsKLQkJCQkJcHJpbnRmKCJ5 ZCAgWUFQUCBEb3dubG9hZFxuIik7Ci0JCQkJCXByaW50ZigieXUgIFlBUFAgVXBsb2FkXG4i KTsKLQkJCQkJZmZsdXNoKHN0ZG91dCk7CisJCQkJCXdyaXRlaW5jb21zdHIobW9kZSwgZW5j b2RpbmcsICZ3aW5faW4sIlxuVGlsZGUgZXNjYXBlczpcbiIsICZ3aW5fb3V0KTsKKwkJCQkJ d3JpdGVpbmNvbXN0cihtb2RlLCBlbmNvZGluZywgJndpbl9pbiwiLiAgIGNsb3NlXG4iLCAm d2luX291dCk7CisJCQkJCXdyaXRlaW5jb21zdHIobW9kZSwgZW5jb2RpbmcsICZ3aW5faW4s In4gICBzZW5kIH5cbiIsICZ3aW5fb3V0KTsKKwkJCQkJd3JpdGVpbmNvbXN0cihtb2RlLCBl bmNvZGluZywgJndpbl9pbiwiciAgIHJlY29ubmVjdFxuIiwgJndpbl9vdXQpOworCQkJCQl3 cml0ZWluY29tc3RyKG1vZGUsIGVuY29kaW5nLCAmd2luX2luLCIhICAgc2hlbGxcbiIsICZ3 aW5fb3V0KTsKKwkJCQkJd3JpdGVpbmNvbXN0cihtb2RlLCBlbmNvZGluZywgJndpbl9pbiwi WiAgIHN1c3BlbmQgcHJvZ3JhbS4gUmVzdW1lIHdpdGggXCJmZ1wiXG4iLCAmd2luX291dCk7 CisJCQkJCXdyaXRlaW5jb21zdHIobW9kZSwgZW5jb2RpbmcsICZ3aW5faW4sInMgICBTdG9w IHVwbG9hZFxuIiwgJndpbl9vdXQpOworCQkJCQl3cml0ZWluY29tc3RyKG1vZGUsIGVuY29k aW5nLCAmd2luX2luLCJvICAgT3BlbiBsb2dcbiIsICZ3aW5fb3V0KTsKKwkJCQkJd3JpdGVp bmNvbXN0cihtb2RlLCBlbmNvZGluZywgJndpbl9pbiwiYyAgIENsb3NlIGxvZ1xuIiwgJndp bl9vdXQpOworCQkJCQl3cml0ZWluY29tc3RyKG1vZGUsIGVuY29kaW5nLCAmd2luX2luLCIw ICAgU3dpdGNoIEdVSSB0byBcIlJBV1wiIChsaW5lKSBtb2RlIC0gYWxyZWFkeSBoZXJlIDsp XG4iLCAmd2luX291dCk7CisJCQkJCXdyaXRlaW5jb21zdHIobW9kZSwgZW5jb2RpbmcsICZ3 aW5faW4sIjEgICBTd2l0Y2ggR1VJIHRvIFwiU2xhdmVcIiBtb2RlXG4iLCAmd2luX291dCk7 CisJCQkJCXdyaXRlaW5jb21zdHIobW9kZSwgZW5jb2RpbmcsICZ3aW5faW4sIjIgICBTd2l0 Y2ggR1VJIHRvIFwiVGFsa1wiIChzcGxpdCkgbW9kZVxuIiwgJndpbl9vdXQpOworCQkJCQl3 cml0ZWluY29tc3RyKG1vZGUsIGVuY29kaW5nLCAmd2luX2luLCJ1ICAgVXBsb2FkXG4iLCAm d2luX291dCk7CisJCQkJCXdyaXRlaW5jb21zdHIobW9kZSwgZW5jb2RpbmcsICZ3aW5faW4s ImEgICBVcGxvYWQgKGF1dG9iaW4gcHJvdG9jb2wpXG4iLCAmd2luX291dCk7CisJCQkJCXdy aXRlaW5jb21zdHIobW9kZSwgZW5jb2RpbmcsICZ3aW5faW4sImIgICBVcGxvYWQgYmluYXJ5 IGRhdGEgKGNybGYgY29udmVyc2lvbilcbiIsICZ3aW5fb3V0KTsKKwkJCQkJd3JpdGVpbmNv bXN0cihtb2RlLCBlbmNvZGluZywgJndpbl9pbiwieWQgIFlBUFAgRG93bmxvYWRcbiIsICZ3 aW5fb3V0KTsKKwkJCQkJd3JpdGVpbmNvbXN0cihtb2RlLCBlbmNvZGluZywgJndpbl9pbiwi eXUgIFlBUFAgVXBsb2FkXG4iLCAmd2luX291dCk7CisJCQkJCXdyaXRlaW5jb21zdHIobW9k ZSwgZW5jb2RpbmcsICZ3aW5faW4sImkgICBJQk04NTAgZW5jb2RpbmdcbiIsICZ3aW5fb3V0 KTsKKwkJCQkJd3JpdGVpbmNvbXN0cihtb2RlLCBlbmNvZGluZywgJndpbl9pbiwiOCAgIFVU Ri04IGVuY29kaW5nXG4iLCAmd2luX291dCk7CisJCQkJCXJlc3RvcmVjdXJzb3IobW9kZSwg Jndpbl9vdXQpOwogCQkJCQljb250aW51ZTsKIAkJCQljYXNlICdTJzoKIAkJCQljYXNlICdz JzoKQEAgLTE4MzksNiArMjI3MCw3IEBACiAJCQkJCQlzdGF0bGluZShtb2RlLAogCQkJCQkJ CSAiTm8gdXBsb2FkIGluIHByb2dyZXNzIik7CiAJCQkJCX0KKwkJCQkJcmVzdG9yZWN1cnNv cihtb2RlLCAmd2luX291dCk7CiAJCQkJCWNvbnRpbnVlOwogCQkJCWNhc2UgJ0EnOgogCQkJ CWNhc2UgJ2EnOgpAQCAtMTg0OSw2ICsyMjgxLDcgQEAKIAkJCQkJaWYgKHVwbG9hZGZpbGUg IT0gLTEpIHsKIAkJCQkJCXN0YXRsaW5lKG1vZGUsCiAJCQkJCQkJICJBbHJlYWR5IHVwbG9h ZGluZyIpOworCQkJCQkJcmVzdG9yZWN1cnNvcihtb2RlLCAmd2luX291dCk7CiAJCQkJCQlj b250aW51ZTsKIAkJCQkJfQogCQkJCQlpZiAoKHQgPQpAQCAtMTg2MCwxMiArMjI5MywxNCBA QAogCQkJCQlpZiAoKnQgPT0gJ1wwJykgewogCQkJCQkJc3RhdGxpbmUobW9kZSwKIAkJCQkJ CQkgIlVwbG9hZCByZXF1aXJlcyBhIGZpbGVuYW1lIik7CisJCQkJCQlyZXN0b3JlY3Vyc29y KG1vZGUsICZ3aW5fb3V0KTsKIAkJCQkJCWNvbnRpbnVlOwogCQkJCQl9CiAJCQkJCXVwbG9h ZGZpbGUgPSBvcGVuKHQsIE9fUkRPTkxZKTsKIAkJCQkJaWYgKHVwbG9hZGZpbGUgPT0gLTEp IHsKIAkJCQkJCXN0YXRsaW5lKG1vZGUsCiAJCQkJCQkJICJVbmFibGUgdG8gb3BlbiB1cGxv YWQgZmlsZSIpOworCQkJCQkJcmVzdG9yZWN1cnNvcihtb2RlLCAmd2luX291dCk7CiAJCQkJ CQljb250aW51ZTsKIAkJCQkJfQogCQkJCQlpZiAobHNlZWsodXBsb2FkZmlsZSwgMEwsIFNF RUtfRU5EKQpAQCAtMTk2Myw2ICsyMzk4LDcgQEAKIAkJCQkJCQl1cGxkcCA9IC0xOwogCQkJ CQkJCXVwbGxlbiA9IDA7CiAJCQkJCQl9CisJCQkJCQlyZXN0b3JlY3Vyc29yKG1vZGUsICZ3 aW5fb3V0KTsKIAkJCQkJCWJyZWFrOwogCQkJCQljYXNlICdiJzoKIAkJCQkJY2FzZSAnQic6 CkBAIC0yMDAxLDYgKzI0MzcsNyBAQAogCQkJCQkJc3RhdGxpbmUobW9kZSwgcyk7CiAJCQkJ CX0gZWxzZQogCQkJCQkJc3RhdGJpdHMobW9kZSwgJ0wnLCAxKTsKKwkJCQkJcmVzdG9yZWN1 cnNvcihtb2RlLCAmd2luX291dCk7CiAJCQkJCWNvbnRpbnVlOwogCQkJCWNhc2UgJ0MnOgog CQkJCWNhc2UgJ2MnOgpAQCAtMjAxMiwxMCArMjQ0OSwxMiBAQAogCQkJCQkJc3RhdGxpbmUo bW9kZSwKIAkJCQkJCQkgIkxvZyBmaWxlIG5vdCBvcGVuIik7CiAJCQkJCX0KKwkJCQkJcmVz dG9yZWN1cnNvcihtb2RlLCAmd2luX291dCk7CiAJCQkJCWNvbnRpbnVlOwogCQkJCWNhc2Ug J1knOgogCQkJCWNhc2UgJ3knOgogCQkJCQljbWRfeWFwcChidWYgKyAyLCBieXRlcyAtIDIp OworCQkJCQlyZXN0b3JlY3Vyc29yKG1vZGUsICZ3aW5fb3V0KTsKIAkJCQkJY29udGludWU7 CiAJCQkJY2FzZSAnfic6CiAJCQkJCWJ5dGVzLS07CkBAIC0yMDQ1LDkgKzI0ODQsMjEgQEAK IAkJCQkJCQkmd2ludGFiLCAmd2luX2luLAogCQkJCQkJCSZ3aW5fb3V0LCBjYWxsKTsKIAkJ CQkJY29udGludWU7CisJCQkJY2FzZSAnOCc6CisJCQkJCWVuY29kaW5nID0gVVRGOEVOQ09E SU5HOworCQkJCQlzdGF0bGluZShtb2RlLCAiVVRGLTggZW5jb2RpbmciKTsKKwkJCQkJcmVz dG9yZWN1cnNvcihtb2RlLCAmd2luX291dCk7CisJCQkJCWNvbnRpbnVlOworCQkJCWNhc2Ug J2knOgorCQkJCWNhc2UgJ0knOgorCQkJCQllbmNvZGluZyA9IE9SSUdJTkFMRU5DT0RJTkc7 CisJCQkJCXN0YXRsaW5lKG1vZGUsICJJQk04NTAgZW5jb2RpbmciKTsKKwkJCQkJcmVzdG9y ZWN1cnNvcihtb2RlLCAmd2luX291dCk7CisJCQkJCWNvbnRpbnVlOwogCQkJCWRlZmF1bHQ6 CiAJCQkJCXN0YXRsaW5lKG1vZGUsCiAJCQkJCQkgIlVua25vd24gJ34nIGVzY2FwZS4gVHlw ZSB+aCBmb3IgYSBsaXN0Iik7CisJCQkJCXJlc3RvcmVjdXJzb3IobW9kZSwgJndpbl9vdXQp OwogCQkJCQljb250aW51ZTsKIAkJCQl9CiAJCQl9CkBAIC0yMDY4LDggKzI1MTksMTAgQEAK IAkJCQlpZiAodXBsb2FkZmlsZSAhPSAtMSkgewogCQkJCQlzdGF0bGluZShtb2RlLAogCQkJ CQkJICJJZ25vcmVkLiBUeXBlIH5zIHRvIHN0b3AgdXBsb2FkIik7CisJCQkJCXJlc3RvcmVj dXJzb3IobW9kZSwgJndpbl9vdXQpOwogCQkJCQljb250aW51ZTsKIAkJCQl9CisKIAkJCQlj b252ZXJ0X2xmX2NyKGJ1ZiwgYnl0ZXMpOwogCiAJCQkJd2hpbGUgKG9mZnNldCAhPSBieXRl cykgewpAQCAtMjA5OCw2ICsyNTUxLDcgQEAKIAkJCQl3aW5jbG9zZSgmd2ludGFiKTsKIAkJ CQlzdGF0bGluZShtb2RlLAogCQkJCQkgIlVwbG9hZCBjb21wbGV0ZTogMCBieXRlcyIpOwor CQkJCXJlc3RvcmVjdXJzb3IobW9kZSwgJndpbl9vdXQpOwogCQkJCWNvbnRpbnVlOwogCQkJ fQogCQkJaWYgKHVwbGRwID09IC0xKSB7CkBAIC0yMTEyLDYgKzI1NjYsNyBAQAogCQkJCQlz cHJpbnRmKHMsCiAJCQkJCQkiVXBsb2FkIGNvbXBsZXRlOiAlbGQgYnl0ZXMiLAogCQkJCQkJ dXBscG9zKTsKKwkJCQkJcmVzdG9yZWN1cnNvcihtb2RlLCAmd2luX291dCk7CiAJCQkJCXN0 YXRsaW5lKG1vZGUsIHMpOwogCQkJCQljb250aW51ZTsKIAkJCQl9CkBAIC0yMTI0LDYgKzI1 NzksNyBAQAogCQkJCQkJIkVycm9yIHJlYWRpbmcgdXBsb2FkIGZpbGU6IHVwbG9hZCBhYm9y dGVkIGF0ICVsZCBieXRlcyIsCiAJCQkJCQl1cGxwb3MpOwogCQkJCQlzdGF0bGluZShtb2Rl LCBzKTsKKwkJCQkJcmVzdG9yZWN1cnNvcihtb2RlLCAmd2luX291dCk7CiAJCQkJCWNvbnRp bnVlOwogCQkJCX0KIAkJCQlpZiAoIWJpbnVwKQpAQCAtMjE0Miw2ICsyNTk4LDcgQEAKIAkJ CQlpZiAoZXJybm8gIT0gRVdPVUxEQkxPQ0sgJiYgZXJybm8gIT0gRUFHQUlOKSB7CiAJCQkJ CXNwcmludGYocywgIldyaXRlIGVycm9yIGR1cmluZyB1cGxvYWQuIENvbm5lY3Rpb24gbG9z dCIpOwogCQkJCQlzdGF0bGluZShtb2RlLCBzKTsKKwkJCQkJcmVzdG9yZWN1cnNvcihtb2Rl LCAmd2luX291dCk7CiAJCQkJCXBlcnJvcigid3JpdGUiKTsKIAkJCQkJYnJlYWs7CiAJCQkg IAl9CkBAIC0yMTkyLDE4ICsyNjQ5LDI3IEBACiAJfQogfQogCit2b2lkIGljb252Y2xvc2Uo dm9pZCkKK3sKKwlpY29udl9jbG9zZShpYm04NTB0b3V0ZjgpOworCWljb252X2Nsb3NlKHdj aGFydHRvaWJtODUwKTsKKwlpY29udl9jbG9zZSh3Y2hhcnR0b3V0ZjgpOworCWljb252X2Ns b3NlKHV0Zjh0b3djaGFydCk7Cit9CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIHsKIAlpbnQgcDsKIAlpbnQgbW9kZSA9IFRBTEtNT0RFOworCWludCBlbmNvZGluZyA9 IFVURjhFTkNPRElORzsvLyBNYXliZSBjb250cm92ZXJzaWFsPyAgCiAKKwlzZXRsb2NhbGUo TENfQUxMLCAiIik7CiAJaWYgKCFpc2F0dHkoU1RESU5fRklMRU5PKSkKIAkJc3RkaW5faXNf dHR5ID0gMDsKIAogIAlzZXRsaW5lYnVmKHN0ZGluKTsKIAotCXdoaWxlICgocCA9IGdldG9w dChhcmdjLCBhcmd2LCAiYjpkaG06cDpyczpTdHZ3OiIpKSAhPSAtMSkgeworCXdoaWxlICgo cCA9IGdldG9wdChhcmdjLCBhcmd2LCAiYjpkaG06cDpyczpTdHZ3Omk4IikpICE9IC0xKSB7 CiAJCXN3aXRjaCAocCkgewogCQljYXNlICdiJzoKIAkJCWlmICgqb3B0YXJnICE9ICdlJyAm JiAqb3B0YXJnICE9ICdsJykgewpAQCAtMjI0MCw2ICsyNzA2LDcgQEAKIAkJCX0KIAkJCWJy ZWFrOwogCQljYXNlICdyJzoKKwkJCUNPTFMgPSA4MDsgLy8gVGhpcyBpcyB1c2VkIHRvIGZv cm1hdCB0aGUgc2Nyb2xsYmFjayBidWZmZXIsIHdoaWNoIGlzIHN0b3JlZCBpbiByYXcKIAkJ CW1vZGUgPSBSQVdNT0RFOwogCQkJYnJlYWs7CiAJCWNhc2UgJ3MnOgpAQCAtMjI3NCw2ICsy NzQxLDEyIEBACiAJCQkJfQogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJZW5j b2RpbmcgPSBPUklHSU5BTEVOQ09ESU5HOworCQkJYnJlYWs7CisJCWNhc2UgJzgnOgorCQkJ ZW5jb2RpbmcgPSBVVEY4RU5DT0RJTkc7CisJCQlicmVhazsKIAkJY2FzZSAnPyc6CiAJCWNh c2UgJzonOgogCQkJdXNhZ2UoKTsKQEAgLTIyODMsNiArMjc1NiwxMyBAQAogCWlmIChvcHRp bmQgPT0gYXJnYyB8fCBvcHRpbmQgPT0gYXJnYyAtIDEpIHsKIAkJdXNhZ2UoKTsKIAl9CisK KwlpYm04NTB0b3V0ZjggPSBpY29udl9vcGVuKCJVVEY4IiwgIklCTTg1MCIpOworCXdjaGFy dHRvaWJtODUwID0gaWNvbnZfb3BlbigiSUJNODUwIiwgIldDSEFSX1QiKTsKKwl3Y2hhcnR0 b3V0ZjggPSBpY29udl9vcGVuKCJVVEY4IiwgIldDSEFSX1QiKTsKKwl1dGY4dG93Y2hhcnQg PSBpY29udl9vcGVuKCJXQ0hBUl9UIiwgIlVURjgiKTsKKwlhdGV4aXQoaWNvbnZjbG9zZSk7 CisKIAlwb3J0ID0gYXJndltvcHRpbmRdOwogCiAJaWYgKGF4MjVfY29uZmlnX2xvYWRfcG9y dHMoKSA9PSAwKSB7CkBAIC0yMzMxLDcgKzI4MTEsNyBAQAogCQlwcmludGYoIkdXNFBUUyBB WC4yNSBDb25uZWN0IHYxLjExXG4iKTsKIAkJZmZsdXNoKHN0ZG91dCk7CiAJfQotCXdoaWxl IChjbWRfY2FsbChhcmd2ICsgb3B0aW5kICsgMSwgbW9kZSkpIHsKKwl3aGlsZSAoY21kX2Nh bGwoYXJndiArIG9wdGluZCArIDEsIG1vZGUsIGVuY29kaW5nKSkgewogCQlpZiAoIWJlX3Np bGVudCkgewogCQkJcHJpbnRmKCJXYWl0IDYwIHNlYyBiZWZvcmUgcmVjb25uZWN0XG4iKTsK IAkJCWZmbHVzaChzdGRvdXQpOwo= --------------050603040601000801020200--