From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11856 invoked by alias); 25 Jun 2007 05:42:56 -0000 Received: (qmail 11848 invoked by uid 22791); 25 Jun 2007 05:42:56 -0000 X-Spam-Check-By: sourceware.org Received: from an-out-0708.google.com (HELO an-out-0708.google.com) (209.85.132.240) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 25 Jun 2007 05:42:53 +0000 Received: by an-out-0708.google.com with SMTP id c25so297193ana for ; Sun, 24 Jun 2007 22:42:51 -0700 (PDT) Received: by 10.100.10.20 with SMTP id 20mr2924892anj.1182750170988; Sun, 24 Jun 2007 22:42:50 -0700 (PDT) Received: by 10.100.194.13 with HTTP; Sun, 24 Jun 2007 22:42:50 -0700 (PDT) Message-ID: Date: Mon, 25 Jun 2007 13:49:00 -0000 From: "srinivas naga vutukuri" To: ecos-discuss@ecos.sourceware.org MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_241851_8876589.1182750170913" X-IsSubscribed: yes Mailing-List: contact ecos-discuss-help@ecos.sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: ecos-discuss-owner@ecos.sourceware.org Subject: [ECOS] FIN is not sending on socket close() X-SW-Source: 2007-06/txt/msg00236.txt.bz2 ------=_Part_241851_8876589.1182750170913 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 641 Dear All, Am just taken an example from http://libcli.sourceforge.net and integrated into my eCos application. Am creating a thread, under that am calling TELNET_start() (can see in clitest.c). which is accepting the telnet sessions. and after that its calling the cli_loop(). But when i issue quit, which exits the while loop in the cli_loop() function and tries to close the sockfd. But this is not sending the FIN my embedded system to my PC telnet client. I also set the SO_LINGER socket option. Could you please help me out. My source code is attached here with the libcli.c for your reference. best regards, srinivas. ------=_Part_241851_8876589.1182750170913 Content-Type: application/octet-stream; name="clitest.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="clitest.c" X-Attachment-Id: f_f3civxd3 Content-length: 5324 DQoNCg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3R5cGVz Lmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPGFycGEv aW5ldC5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KI2luY2x1ZGUgPHVuaXN0 ZC5oPg0KI2luY2x1ZGUgImxpYmNsaS5oIg0KDQojaW5jbHVkZSA8bmV0aW5l dC9pbi5oPg0KDQojZGVmaW5lIENMSVRFU1RfUE9SVAkJMjMNCiNkZWZpbmUg TU9ERV9DT05GSUdfSU5UCQkxMA0KDQojaWZkZWYgX19HTlVDX18NCiMgZGVm aW5lIFVOVVNFRChkKSBkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKQ0KI2Vs c2UNCiMgZGVmaW5lIFVOVVNFRChkKSBkDQojZW5kaWYNCg0KaW50IGNtZF90 ZXN0KHN0cnVjdCBjbGlfZGVmICpjbGksIGNoYXIgKmNvbW1hbmQsIGNoYXIg KmFyZ3ZbXSwgaW50IGFyZ2MpDQp7DQogICAgaW50IGk7DQogICAgY2xpX3By aW50KGNsaSwgImNhbGxlZCAlcyB3aXRoIFwiJXNcIiIsIF9fRlVOQ1RJT05f XywgY29tbWFuZCk7DQogICAgY2xpX3ByaW50KGNsaSwgIiVkIGFyZ3VtZW50 czoiLCBhcmdjKTsNCiAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQ0K CWNsaV9wcmludChjbGksICIJJXMiLCBhcmd2W2ldKTsNCg0KICAgIHJldHVy biBDTElfT0s7DQp9DQoNCmludCBjbWRfc2V0KHN0cnVjdCBjbGlfZGVmICpj bGksIFVOVVNFRChjaGFyICpjb21tYW5kKSwgY2hhciAqYXJndltdLA0KICAg IGludCBhcmdjKQ0Kew0KICAgIGlmIChhcmdjIDwgMikNCiAgICB7DQoJY2xp X3ByaW50KGNsaSwgIlNwZWNpZnkgYSB2YXJpYWJsZSB0byBzZXQiKTsNCgly ZXR1cm4gQ0xJX09LOw0KICAgIH0NCg0KICAgIGNsaV9wcmludChjbGksICJT ZXR0aW5nIFwiJXNcIiB0byBcIiVzXCIiLCBhcmd2WzBdLCBhcmd2WzFdKTsN CiAgICByZXR1cm4gQ0xJX09LOw0KfQ0KDQppbnQgY21kX2NvbmZpZ19pbnQo c3RydWN0IGNsaV9kZWYgKmNsaSwgVU5VU0VEKGNoYXIgKmNvbW1hbmQpLCBj aGFyICphcmd2W10sDQogICAgaW50IGFyZ2MpDQp7DQogICAgaWYgKGFyZ2Mg PCAxKQ0KICAgIHsNCgljbGlfcHJpbnQoY2xpLCAiU3BlY2lmeSBhbiBpbnRl cmZhY2UgdG8gY29uZmlndXJlIik7DQoJcmV0dXJuIENMSV9PSzsNCiAgICB9 DQoNCiAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sICI/IikgPT0gMCkNCgljbGlf cHJpbnQoY2xpLCAiICB0ZXN0MC8wIik7DQoNCiAgICBlbHNlIGlmIChzdHJj YXNlY21wKGFyZ3ZbMF0sICJ0ZXN0MC8wIikgPT0gMCkNCgljbGlfc2V0X2Nv bmZpZ21vZGUoY2xpLCBNT0RFX0NPTkZJR19JTlQsICJ0ZXN0Iik7DQogICAg ZWxzZQ0KCWNsaV9wcmludChjbGksICJVbmtub3duIGludGVyZmFjZSAlcyIs IGFyZ3ZbMF0pOw0KDQogICAgcmV0dXJuIENMSV9PSzsNCn0NCg0KaW50IGNt ZF9jb25maWdfaW50X2V4aXQoc3RydWN0IGNsaV9kZWYgKmNsaSwgVU5VU0VE KGNoYXIgKmNvbW1hbmQpLA0KICAgIFVOVVNFRChjaGFyICphcmd2W10pLCBV TlVTRUQoaW50IGFyZ2MpKQ0Kew0KICAgIGNsaV9zZXRfY29uZmlnbW9kZShj bGksIE1PREVfQ09ORklHLCBOVUxMKTsNCiAgICByZXR1cm4gQ0xJX09LOw0K fQ0KDQppbnQgY2hlY2tfYXV0aChjaGFyICp1c2VybmFtZSwgY2hhciAqcGFz c3dvcmQpDQp7DQogICAgaWYgKHN0cmNhc2VjbXAodXNlcm5hbWUsICJhZG1p biIpICE9IDApDQoJcmV0dXJuIENMSV9FUlJPUjsNCiAgICBpZiAoc3RyY2Fz ZWNtcChwYXNzd29yZCwgImFkbWluIikgIT0gMCkNCglyZXR1cm4gQ0xJX0VS Uk9SOw0KICAgIHJldHVybiBDTElfT0s7DQp9DQoNCmludCBjaGVja19lbmFi bGUoY2hhciAqcGFzc3dvcmQpDQp7DQogICAgcmV0dXJuICFzdHJjYXNlY21w KHBhc3N3b3JkLCAidG9wc2VjcmV0Iik7DQp9DQoNCnZvaWQgcGMoVU5VU0VE KHN0cnVjdCBjbGlfZGVmICpjbGkpLCBjaGFyICpzdHJpbmcpDQp7DQogICAg cHJpbnRmKCIlc1xuIiwgc3RyaW5nKTsNCn0NCg0KDQoNCnN0cnVjdCBjbGlf ZGVmKiAgQ0xJX0luaXQodm9pZCkNCnsNCiAgICBzdHJ1Y3QgY2xpX2NvbW1h bmQgKnNob3c9TlVMTCwgKnNldD1OVUxMLCAqY2xlYXIgPSBOVUxMOw0KICAg IHN0cnVjdCBjbGlfZGVmICpjbGk7DQoNCiAgICBjbGkgPSBjbGlfaW5pdCgp Ow0KICAgIGNsaV9zZXRfYmFubmVyKGNsaSwgUkVMRUFTRSk7DQogICAgY2xp X3NldF9ob3N0bmFtZShjbGksICJUZWxzaW5leCIpOw0KDQoJDQogICBzaG93 ID0gY2xpX3JlZ2lzdGVyX2NvbW1hbmQoY2xpLCBOVUxMLCAic2hvdyIsIE5V TEwsIFBSSVZJTEVHRV9VTlBSSVZJTEVHRUQsDQoJTU9ERV9FWEVDLCBOVUxM KTsNCg0KICAgc2V0ID0gY2xpX3JlZ2lzdGVyX2NvbW1hbmQoY2xpLCBOVUxM LCAic2V0IiwgTlVMTCwgUFJJVklMRUdFX1VOUFJJVklMRUdFRCwNCglNT0RF X0VYRUMsIE5VTEwpOw0KICAgDQogICBjbGVhciA9IGNsaV9yZWdpc3Rlcl9j b21tYW5kKGNsaSwgTlVMTCwgImNsZWFyIiwgTlVMTCwgUFJJVklMRUdFX1VO UFJJVklMRUdFRCwNCglNT0RFX0VYRUMsIE5VTEwpOw0KDQoNCiAgICBjbGlf cmVnaXN0ZXJfY29tbWFuZChjbGksIE5VTEwsICJleGl0IiwgY21kX2NvbmZp Z19pbnRfZXhpdCwNCglQUklWSUxFR0VfUFJJVklMRUdFRCwgTU9ERV9DT05G SUdfSU5ULA0KCSJFeGl0IGZyb20gaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24i KTsNCg0KDQogICAgY2xpX3NldF9hdXRoX2NhbGxiYWNrKGNsaSwgY2hlY2tf YXV0aCk7DQogICAgY2xpX3NldF9lbmFibGVfY2FsbGJhY2soY2xpLCBjaGVj a19lbmFibGUpOw0KDQoNCiAgICBkaWFnX3ByaW50ZigiXG4gXG4iKTsNCg0K ICAgIHJldHVybiAoY2xpKTsNCg0KfQ0KDQoNCg0KDQp2b2lkIFRFTE5FVF9z dGFydCh2b2lkKQ0Kew0KICAgaW50IHMsIHg7DQogICBzdHJ1Y3Qgc29ja2Fk ZHJfaW4gc2VydmFkZHI7DQoNCiAgICBzdHJ1Y3QgY2xpX2RlZiAqY2xpOw0K ICAgIHN0cnVjdCBsaW5nZXIgbGluZ2VyID0gezEsMH07CQ0KDQogICAgLy9s aW5nZXIubF9vbm9mZiAgPSAxOw0KICAgIC8vbGluZ2VyLmxfbGluZ2VyICAg PSAwOwkNCg0KICAgIGludCBvbiA9IDE7DQoNCiAgICBjbGkgPSBDTElfSW5p dCgpOwkNCg0KDQoNCiAgICBpZiAoKHMgPSBzb2NrZXQoQUZfSU5FVCwgU09D S19TVFJFQU0sIDApKSA8IDApDQogICAgew0KCXBlcnJvcigic29ja2V0Iik7 DQoJcmV0dXJuIDE7DQogICAgfQ0KICAgIHNldHNvY2tvcHQocywgU09MX1NP Q0tFVCwgU09fUkVVU0VBRERSLCAmb24sIHNpemVvZihvbikpOw0KDQogICAg aWYgKHNldHNvY2tvcHQocywgU09MX1NPQ0tFVCwgU09fTElOR0VSLCAmbGlu Z2VyLHNpemVvZihsaW5nZXIpKSA8IDApDQogICAgCXsNCgkJcGVycm9yKCJs aW5nZXIgZmFpbCIpOw0KCQlyZXR1cm4gMTsNCiAgICAJfQ0KDQoNCiAgICBt ZW1zZXQoJnNlcnZhZGRyLCAwLCBzaXplb2Yoc2VydmFkZHIpKTsNCiAgICBz ZXJ2YWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCiAgICBzZXJ2YWRkci5z aW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsNCiAgICBzZXJ2 YWRkci5zaW5fcG9ydCA9IGh0b25zKENMSVRFU1RfUE9SVCk7DQogICAgaWYg KGJpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSZzZXJ2YWRkciwgc2l6ZW9m KHNlcnZhZGRyKSkgPCAwKQ0KICAgIHsNCglwZXJyb3IoImJpbmQiKTsNCgly ZXR1cm4gMTsNCiAgICB9DQoNCiAgICBpZiAobGlzdGVuKHMsIDUwKSA8IDAp DQogICAgew0KCXBlcnJvcigibGlzdGVuIik7DQoJcmV0dXJuIDE7DQogICAg fQ0KDQoNCgkNCiAgICBwcmludGYoIkxpc3RlbmluZyBvbiBwb3J0ICVkXG4i LCBDTElURVNUX1BPUlQpOw0KICAgIHdoaWxlICgoeCA9IGFjY2VwdChzLCBO VUxMLCAwKSkpDQogICAgew0KCWNsaV9sb29wKGNsaSwgeCk7DQoJY2xvc2Uo eCk7DQogICAgfQ0KCQ0KICAgIGNsaV9kb25lKGNsaSk7DQogICAgcmV0dXJu IDA7DQoNCn0NCg== ------=_Part_241851_8876589.1182750170913 Content-Type: application/octet-stream; name="libcli.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="libcli.c" X-Attachment-Id: f_f3ciwouo Content-length: 56507 DQojZGVmaW5lIF9HTlVfU09VUkNFDQojaW5jbHVkZSA8c3RkaW8uaD4NCiNp bmNsdWRlIDxlcnJuby5oPg0KI2luY2x1ZGUgPHN0ZGFyZy5oPg0KI2luY2x1 ZGUgPHN0ZGxpYi5oPg0KLy8jaW5jbHVkZSA8bWVtb3J5Lmg+DQovLyNpbmNs dWRlIDxtYWxsb2MuaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCiNpbmNsdWRl IDxjdHlwZS5oPg0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0KDQojaWZkZWYgUkVH RVhfSA0KI2luY2x1ZGUgPHJlZ2V4Lmg+DQojZW5kaWYgLy9SRUdFWF9IDQoN CiNpbmNsdWRlICJsaWJjbGkuaCINCg0KI2luY2x1ZGUgPHN5cy90aW1lLmg+ DQojaW5jbHVkZSA8cGtnY29uZi9tZW1hbGxvYy5oPg0KI2luY2x1ZGUgPHN5 cy9zZWxlY3QuaD4NCiNpbmNsdWRlIDxjeWcvaW8vaW8uaD4NCiNpbmNsdWRl IDxlbmNyeXB0Lmg+DQoNCi8qIHZpbTpzdz00IHRzPTggKi8NCg0KI2lmZGVm IF9fR05VQ19fDQojIGRlZmluZSBVTlVTRUQoZCkgZCBfX2F0dHJpYnV0ZV9f ICgodW51c2VkKSkNCiNlbHNlDQojIGRlZmluZSBVTlVTRUQoZCkgZA0KI2Vu ZGlmDQpleHRlcm4gY2hhciAqDQpjcnlwdCAoY29uc3QgY2hhciAqd29ydCwg Y29uc3QgY2hhciAqc2FsdCk7DQoNCmVudW0gY2xpX3N0YXRlcyB7DQogICAg U1RBVEVfTE9HSU4sDQogICAgU1RBVEVfUEFTU1dPUkQsDQogICAgU1RBVEVf Tk9STUFMLA0KICAgIFNUQVRFX0VOQUJMRV9QQVNTV09SRCwNCiAgICBTVEFU RV9FTkFCTEUNCn07DQoNCnN0cnVjdCB1bnAgew0KICAgIGNoYXIgKnVzZXJu YW1lOw0KICAgIGNoYXIgKnBhc3N3b3JkOw0KICAgIHN0cnVjdCB1bnAgKm5l eHQ7DQp9Ow0KDQovKiBmcmVlIGFuZCB6ZXJvICh0byBhdm9pZCBkb3VibGUt ZnJlZSkgKi8NCiNkZWZpbmUgZnJlZV96KHApIGZyZWUocCksIChwKSA9IDAN Cg0Kdm9pZCBjbGlfc2V0X2F1dGhfY2FsbGJhY2soc3RydWN0IGNsaV9kZWYg KmNsaSwNCiAgICBpbnQgKCphdXRoX2NhbGxiYWNrKShjaGFyICosIGNoYXIg KikpDQp7DQogICAgY2xpLT5hdXRoX2NhbGxiYWNrID0gYXV0aF9jYWxsYmFj azsNCn0NCg0Kdm9pZCBjbGlfc2V0X2VuYWJsZV9jYWxsYmFjayhzdHJ1Y3Qg Y2xpX2RlZiAqY2xpLA0KICAgIGludCAoKmVuYWJsZV9jYWxsYmFjaykoY2hh ciAqKSkNCnsNCiAgICBjbGktPmVuYWJsZV9jYWxsYmFjayA9IGVuYWJsZV9j YWxsYmFjazsNCn0NCg0Kdm9pZCBjbGlfYWxsb3dfdXNlcihzdHJ1Y3QgY2xp X2RlZiAqY2xpLCBjaGFyICp1c2VybmFtZSwgY2hhciAqcGFzc3dvcmQpDQp7 DQogICAgc3RydWN0IHVucCAqbiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHVu cCkpOw0KICAgIG4tPnVzZXJuYW1lID0gc3RyZHVwKHVzZXJuYW1lKTsNCiAg ICBuLT5wYXNzd29yZCA9IHN0cmR1cChwYXNzd29yZCk7DQogICAgbi0+bmV4 dCA9IDA7DQoNCiAgICBpZiAoY2xpLT51c2VycykNCiAgICB7DQoJc3RydWN0 IHVucCAqdSA9IGNsaS0+dXNlcnM7DQoJd2hpbGUgKHUtPm5leHQpDQoJICAg IHUgPSB1LT5uZXh0Ow0KDQoJdS0+bmV4dCA9IG47DQogICAgfQ0KICAgIGVs c2UNCgljbGktPnVzZXJzID0gbjsNCn0NCg0Kdm9pZCBjbGlfYWxsb3dfZW5h YmxlKHN0cnVjdCBjbGlfZGVmICpjbGksIGNoYXIgKnBhc3N3b3JkKQ0Kew0K ICAgIGZyZWUoY2xpLT5lbmFibGVfcGFzc3dvcmQpOw0KICAgIGNsaS0+ZW5h YmxlX3Bhc3N3b3JkID0gc3RyZHVwKHBhc3N3b3JkKTsNCn0NCg0Kdm9pZCBj bGlfZGVueV91c2VyKHN0cnVjdCBjbGlfZGVmICpjbGksIGNoYXIgKnVzZXJu YW1lKQ0Kew0KICAgIHN0cnVjdCB1bnAgKnU7DQogICAgc3RydWN0IHVucCAq cDsNCg0KICAgIGZvciAocCA9IDAsIHUgPSBjbGktPnVzZXJzOyB1OyBwID0g dSwgdSA9IHUtPm5leHQpDQogICAgew0KCWlmIChzdHJjbXAodXNlcm5hbWUs IHUtPnVzZXJuYW1lKSkNCgkgICAgY29udGludWU7DQoNCglpZiAocCkNCgkg ICAgcC0+bmV4dCA9IHUtPm5leHQ7DQoJZWxzZQ0KCSAgICBjbGktPnVzZXJz ID0gdS0+bmV4dDsNCg0KCWZyZWUodS0+dXNlcm5hbWUpOw0KCWZyZWUodS0+ cGFzc3dvcmQpOw0KCWZyZWUodSk7DQoJYnJlYWs7DQogICAgfQ0KfQ0KDQp2 b2lkIGNsaV9zZXRfYmFubmVyKHN0cnVjdCBjbGlfZGVmICpjbGksIGNoYXIg KmJhbm5lcikNCnsNCiAgICBmcmVlX3ooY2xpLT5iYW5uZXIpOw0KICAgIGlm IChiYW5uZXIgJiYgKmJhbm5lcikNCgljbGktPmJhbm5lciA9IHN0cmR1cChi YW5uZXIpOw0KfQ0KDQp2b2lkIGNsaV9zZXRfaG9zdG5hbWUoc3RydWN0IGNs aV9kZWYgKmNsaSwgY2hhciAqaG9zdG5hbWUpDQp7DQogICAgZnJlZV96KGNs aS0+aG9zdG5hbWUpOw0KICAgIGlmIChob3N0bmFtZSAmJiAqaG9zdG5hbWUp DQoJY2xpLT5ob3N0bmFtZSA9IHN0cmR1cChob3N0bmFtZSk7DQp9DQoNCnZv aWQgY2xpX3NldF9wcm9tcHRjaGFyKHN0cnVjdCBjbGlfZGVmICpjbGksIGNo YXIgKnByb21wdGNoYXIpDQp7DQogICAgZnJlZShjbGktPnByb21wdGNoYXIp Ow0KICAgIGNsaS0+cHJvbXB0Y2hhciA9IHN0cmR1cChwcm9tcHRjaGFyKTsN Cn0NCg0KaW50IGNsaV9zZXRfcHJpdmlsZWdlKHN0cnVjdCBjbGlfZGVmICpj bGksIGludCBwcml2KQ0Kew0KICAgIGludCBvbGQgPSBjbGktPnByaXZpbGVn ZTsNCiAgICBjbGktPnByaXZpbGVnZSA9IHByaXY7DQoNCiAgICBpZiAocHJp diAhPSBvbGQpDQoJY2xpX3NldF9wcm9tcHRjaGFyKGNsaSwgcHJpdiA9PSBQ UklWSUxFR0VfUFJJVklMRUdFRCA/ICIjICIgOiAiPiAiKTsNCg0KICAgIHJl dHVybiBvbGQ7DQp9DQoNCnN0YXRpYyB2b2lkIHNldF9tb2Rlc3RyaW5nKHN0 cnVjdCBjbGlfZGVmICpjbGksIGNoYXIgKm1vZGVzdHJpbmcpDQp7DQogICAg ZnJlZV96KGNsaS0+bW9kZXN0cmluZyk7DQogICAgaWYgKG1vZGVzdHJpbmcp DQoJY2xpLT5tb2Rlc3RyaW5nID0gc3RyZHVwKG1vZGVzdHJpbmcpOw0KfQ0K DQppbnQgY2xpX3NldF9jb25maWdtb2RlKHN0cnVjdCBjbGlfZGVmICpjbGks IGludCBtb2RlLCBjaGFyICpjb25maWdfZGVzYykNCnsNCiAgICBpbnQgb2xk ID0gY2xpLT5tb2RlOw0KICAgIGNsaS0+bW9kZSA9IG1vZGU7DQoNCiAgICBp ZiAobW9kZSAhPSBvbGQpDQogICAgew0KCWlmICghY2xpLT5tb2RlKQ0KCXsN CgkgICAgLyogbm90IGNvbmZpZyBtb2RlICovDQoJICAgIHNldF9tb2Rlc3Ry aW5nKGNsaSwgMCk7DQoJfQ0KCWVsc2UgaWYgKGNvbmZpZ19kZXNjICYmICpj b25maWdfZGVzYykNCgl7DQoJICAgIGNoYXIgc3RyaW5nWzY0XTsNCgkgICAg c25wcmludGYoc3RyaW5nLCBzaXplb2Yoc3RyaW5nKSwgIihjb25maWctJXMp IiwgY29uZmlnX2Rlc2MpOw0KCSAgICBzZXRfbW9kZXN0cmluZyhjbGksIHN0 cmluZyk7DQoJfQ0KCWVsc2UNCgl7DQoJICAgIHNldF9tb2Rlc3RyaW5nKGNs aSwgIihjb25maWcpIik7DQoJfQ0KICAgIH0NCg0KICAgIHJldHVybiBvbGQ7 DQp9DQoNCnN0YXRpYyBpbnQgYnVpbGRfc2hvcnRlc3Qoc3RydWN0IGNsaV9k ZWYgKmNsaSwgc3RydWN0IGNsaV9jb21tYW5kICpjb21tYW5kcykNCnsNCiAg ICBzdHJ1Y3QgY2xpX2NvbW1hbmQgKmM7DQoNCiAgICBmb3IgKGMgPSBjb21t YW5kczsgYzsgYyA9IGMtPm5leHQpDQogICAgew0KCWludCBsZW4gPSBzdHJs ZW4oYy0+Y29tbWFuZCk7DQoJZm9yIChjLT51bmlxdWVfbGVuID0gMTsgYy0+ dW5pcXVlX2xlbiA8PSBsZW47IGMtPnVuaXF1ZV9sZW4rKykNCgl7DQoJICAg IGludCBmb3VuZG1hdGNoID0gMDsNCgkgICAgc3RydWN0IGNsaV9jb21tYW5k ICpwOw0KDQoJICAgIGZvciAocCA9IGNvbW1hbmRzOyBwOyBwID0gcC0+bmV4 dCkNCgkgICAgew0KCQlpZiAoYyA9PSBwKQ0KCQkgICAgY29udGludWU7DQoN CgkJaWYgKCFzdHJuY21wKHAtPmNvbW1hbmQsIGMtPmNvbW1hbmQsIGMtPnVu aXF1ZV9sZW4pKQ0KCQkgICAgZm91bmRtYXRjaCsrOw0KCSAgICB9DQoNCgkg ICAgaWYgKCFmb3VuZG1hdGNoKQ0KCQlicmVhazsNCgl9DQoNCglpZiAoYy0+ Y2hpbGRyZW4pDQoJICAgIGJ1aWxkX3Nob3J0ZXN0KGNsaSwgYy0+Y2hpbGRy ZW4pOw0KICAgIH0NCg0KICAgIHJldHVybiBDTElfT0s7DQp9DQoNCnN0cnVj dCBjbGlfY29tbWFuZCAqY2xpX3JlZ2lzdGVyX2NvbW1hbmQoc3RydWN0IGNs aV9kZWYgKmNsaSwNCiAgICBzdHJ1Y3QgY2xpX2NvbW1hbmQgKnBhcmVudCwg Y2hhciAqY29tbWFuZCwNCiAgICBpbnQgKCpjYWxsYmFjaykoc3RydWN0IGNs aV9kZWYgKmNsaSwgY2hhciAqLCBjaGFyICoqLCBpbnQpLA0KICAgIGludCBw cml2aWxlZ2UsIGludCBtb2RlLCBjaGFyICpoZWxwKQ0Kew0KICAgIHN0cnVj dCBjbGlfY29tbWFuZCAqYzsNCiAgICBzdHJ1Y3QgY2xpX2NvbW1hbmQgKnA7 DQoNCiAgICBpZiAoIWNvbW1hbmQpDQoJcmV0dXJuIDA7DQoNCiAgICBpZiAo IShjID0gY2FsbG9jKHNpemVvZihzdHJ1Y3QgY2xpX2NvbW1hbmQpLCAxKSkp DQoJcmV0dXJuIDA7DQoNCiAgICBjLT5jYWxsYmFjayA9IGNhbGxiYWNrOw0K ICAgIGMtPm5leHQgPSAwOw0KICAgIGMtPmNvbW1hbmQgPSBzdHJkdXAoY29t bWFuZCk7DQogICAgYy0+cGFyZW50ID0gcGFyZW50Ow0KICAgIGMtPnByaXZp bGVnZSA9IHByaXZpbGVnZTsNCiAgICBjLT5tb2RlID0gbW9kZTsNCg0KICAg IGlmIChoZWxwKQ0KCWMtPmhlbHAgPSBzdHJkdXAoaGVscCk7DQoNCiAgICBp ZiAocGFyZW50KQ0KICAgIHsNCglpZiAoIXBhcmVudC0+Y2hpbGRyZW4pDQoJ ew0KCSAgICBwYXJlbnQtPmNoaWxkcmVuID0gYzsNCgl9DQoJZWxzZQ0KCXsN CgkgICAgZm9yIChwID0gcGFyZW50LT5jaGlsZHJlbjsgcCAmJiBwLT5uZXh0 OyBwID0gcC0+bmV4dCkNCgkJOw0KDQoJICAgIGlmIChwKQ0KCQlwLT5uZXh0 ID0gYzsNCgl9DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQoJaWYgKCFjbGkt PmNvbW1hbmRzKQ0KCXsNCgkgICAgY2xpLT5jb21tYW5kcyA9IGM7DQoJfQ0K CWVsc2UNCgl7DQoJICAgIGZvciAocCA9IGNsaS0+Y29tbWFuZHM7IHAgJiYg cC0+bmV4dDsgcCA9IHAtPm5leHQpDQoJCTsNCg0KCSAgICBpZiAocCkNCgkJ cC0+bmV4dCA9IGM7DQoJfQ0KICAgIH0NCg0KICAgIGJ1aWxkX3Nob3J0ZXN0 KGNsaSwgcGFyZW50ID8gcGFyZW50IDogY2xpLT5jb21tYW5kcyk7DQogICAg cmV0dXJuIGM7DQp9DQoNCmludCBjbGlfdW5yZWdpc3Rlcl9jb21tYW5kKHN0 cnVjdCBjbGlfZGVmICpjbGksIGNoYXIgKmNvbW1hbmQpDQp7DQogICAgc3Ry dWN0IGNsaV9jb21tYW5kICpjOw0KICAgIHN0cnVjdCBjbGlfY29tbWFuZCAq cCA9IDA7DQoNCiAgICBpZiAoIShjb21tYW5kICYmIGNsaS0+Y29tbWFuZHMp KQ0KCXJldHVybiBDTElfRVJST1I7DQoNCiAgICBmb3IgKGMgPSBjbGktPmNv bW1hbmRzOyBjOyBwID0gYywgYyA9IGMtPm5leHQpDQogICAgew0KCWlmIChz dHJjbXAoYy0+Y29tbWFuZCwgY29tbWFuZCkpDQoJICAgIGNvbnRpbnVlOw0K DQoJaWYgKHApDQoJICAgIHAtPm5leHQgPSBjLT5uZXh0Ow0KCWVsc2UNCgkg ICAgY2xpLT5jb21tYW5kcyA9IGMtPm5leHQ7DQoNCglmcmVlKGMtPmNvbW1h bmQpOw0KCWZyZWUoYy0+aGVscCk7DQoJZnJlZShjKTsNCglyZXR1cm4gQ0xJ X09LOw0KICAgIH0NCg0KICAgIHJldHVybiBDTElfRVJST1I7DQp9DQoNCnN0 YXRpYyBjaGFyICpjb21tYW5kX25hbWUoc3RydWN0IGNsaV9kZWYgKmNsaSwg c3RydWN0IGNsaV9jb21tYW5kICpjb21tYW5kKQ0Kew0KICAgIGZyZWVfeihj bGktPl9uYW1lX2J1Zik7DQoNCiAgICB3aGlsZSAoY29tbWFuZCkNCiAgICB7 DQoJY2hhciAqbyA9IGNsaS0+X25hbWVfYnVmOw0KCWludCBzeiA9IHN0cmxl bihjb21tYW5kLT5jb21tYW5kKSArIDE7DQoJaWYgKG8pDQoJICAgIHN6ICs9 IHN0cmxlbihvKSArIDE7DQoNCgljbGktPl9uYW1lX2J1ZiA9IG1hbGxvYyhz eik7DQoJaWYgKG8pDQoJICAgIHNwcmludGYoY2xpLT5fbmFtZV9idWYsICIl cyAlcyIsIGNvbW1hbmQtPmNvbW1hbmQsIG8pOw0KCWVsc2UNCgkgICAgc3Ry Y3B5KGNsaS0+X25hbWVfYnVmLCBjb21tYW5kLT5jb21tYW5kKTsNCg0KCWNv bW1hbmQgPSBjb21tYW5kLT5wYXJlbnQ7DQoJZnJlZShvKTsNCiAgICB9DQoN CiAgICByZXR1cm4gY2xpLT5fbmFtZV9idWY7DQp9DQoNCnN0YXRpYyBpbnQg c2hvd19oZWxwKHN0cnVjdCBjbGlfZGVmICpjbGksIHN0cnVjdCBjbGlfY29t bWFuZCAqYykNCnsNCiAgICBzdHJ1Y3QgY2xpX2NvbW1hbmQgKnA7DQoNCiAg ICBmb3IgKHAgPSBjOyBwOyBwID0gcC0+bmV4dCkNCiAgICB7DQoJaWYgKHAt PmNvbW1hbmQgJiYgcC0+Y2FsbGJhY2sgJiYgY2xpLT5wcml2aWxlZ2UgPj0g cC0+cHJpdmlsZWdlICYmDQoJICAgIChwLT5tb2RlID09IGNsaS0+bW9kZSB8 fCBwLT5tb2RlID09IE1PREVfQU5ZKSkNCgl7DQoJICAgIGNsaV9lcnJvcihj bGksICIgICUtMjBzICVzIiwgY29tbWFuZF9uYW1lKGNsaSwgcCksIHAtPmhl bHAgPyA6ICIiKTsNCgl9DQoNCglpZiAocC0+Y2hpbGRyZW4pDQoJICAgIHNo b3dfaGVscChjbGksIHAtPmNoaWxkcmVuKTsNCiAgICB9DQoNCiAgICByZXR1 cm4gQ0xJX09LOw0KfQ0KDQpzdGF0aWMgaW50IGNtZF9lbmFibGUoc3RydWN0 IGNsaV9kZWYgKmNsaSwgVU5VU0VEKGNoYXIgKmNvbW1hbmQpLA0KICAgIFVO VVNFRChjaGFyICphcmd2W10pLCBVTlVTRUQoaW50IGFyZ2MpKQ0Kew0KICAg IGlmIChjbGktPnByaXZpbGVnZSA9PSBQUklWSUxFR0VfUFJJVklMRUdFRCkN CglyZXR1cm4gQ0xJX09LOw0KDQogICAgaWYgKCFjbGktPmVuYWJsZV9wYXNz d29yZCAmJiAhY2xpLT5lbmFibGVfY2FsbGJhY2spDQogICAgew0KCS8qIG5v IHBhc3N3b3JkIHJlcXVpcmVkLCBzZXQgcHJpdmlsZWdlIGltbWVkaWF0ZWx5 ICovDQoJY2xpX3NldF9wcml2aWxlZ2UoY2xpLCBQUklWSUxFR0VfUFJJVklM RUdFRCk7DQoJY2xpX3NldF9jb25maWdtb2RlKGNsaSwgTU9ERV9FWEVDLCAw KTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCgkvKiByZXF1aXJlIHBhc3N3 b3JkIGVudHJ5ICovDQoJY2xpLT5zdGF0ZSA9IFNUQVRFX0VOQUJMRV9QQVNT V09SRDsNCiAgICB9DQoNCiAgICByZXR1cm4gQ0xJX09LOw0KfQ0KDQpzdGF0 aWMgaW50IGNtZF9kaXNhYmxlKHN0cnVjdCBjbGlfZGVmICpjbGksIFVOVVNF RChjaGFyICpjb21tYW5kKSwNCiAgICBVTlVTRUQoY2hhciAqYXJndltdKSwg VU5VU0VEKGludCBhcmdjKSkNCnsNCiAgICBjbGlfc2V0X3ByaXZpbGVnZShj bGksIFBSSVZJTEVHRV9VTlBSSVZJTEVHRUQpOw0KICAgIGNsaV9zZXRfY29u ZmlnbW9kZShjbGksIE1PREVfRVhFQywgMCk7DQogICAgcmV0dXJuIENMSV9P SzsNCn0NCg0Kc3RhdGljIGludCBjbWRfaGVscChzdHJ1Y3QgY2xpX2RlZiAq Y2xpLCBVTlVTRUQoY2hhciAqY29tbWFuZCksDQogICAgVU5VU0VEKGNoYXIg KmFyZ3ZbXSksIFVOVVNFRChpbnQgYXJnYykpDQp7DQogICAgY2xpX2Vycm9y KGNsaSwgIlxuQ29tbWFuZHMgYXZhaWxhYmxlOiIpOw0KICAgIHNob3dfaGVs cChjbGksIGNsaS0+Y29tbWFuZHMpOw0KICAgIHJldHVybiBDTElfT0s7DQp9 DQoNCnN0YXRpYyBpbnQgY21kX2hpc3Rvcnkoc3RydWN0IGNsaV9kZWYgKmNs aSwgVU5VU0VEKGNoYXIgKmNvbW1hbmQpLA0KICAgIFVOVVNFRChjaGFyICph cmd2W10pLCBVTlVTRUQoaW50IGFyZ2MpKQ0Kew0KICAgIGludCBpOw0KDQog ICAgY2xpX2Vycm9yKGNsaSwgIlxuQ29tbWFuZCBoaXN0b3J5OiIpOw0KICAg IGZvciAoaSA9IDA7IGkgPCBNQVhfSElTVE9SWTsgaSsrKQ0KCWlmIChjbGkt Pmhpc3RvcnlbaV0pDQoJICAgIGNsaV9lcnJvcihjbGksICIlM2QuICVzIiwg aSwgY2xpLT5oaXN0b3J5W2ldKTsNCg0KICAgIHJldHVybiBDTElfT0s7DQp9 DQoNCnN0YXRpYyBpbnQgY21kX3F1aXQoc3RydWN0IGNsaV9kZWYgKmNsaSwg VU5VU0VEKGNoYXIgKmNvbW1hbmQpLA0KICAgIFVOVVNFRChjaGFyICphcmd2 W10pLCBVTlVTRUQoaW50IGFyZ2MpKQ0Kew0KICAgIGNsaV9zZXRfcHJpdmls ZWdlKGNsaSwgUFJJVklMRUdFX1VOUFJJVklMRUdFRCk7DQogICAgY2xpX3Nl dF9jb25maWdtb2RlKGNsaSwgTU9ERV9FWEVDLCAwKTsNCiAgICByZXR1cm4g Q0xJX1FVSVQ7DQp9DQoNCnN0YXRpYyBpbnQgY21kX2V4aXQoc3RydWN0IGNs aV9kZWYgKmNsaSwgY2hhciAqY29tbWFuZCwgY2hhciAqYXJndltdLCBpbnQg YXJnYykNCnsNCiAgICBpZiAoY2xpLT5tb2RlID09IE1PREVfRVhFQykNCgly ZXR1cm4gY21kX3F1aXQoY2xpLCBjb21tYW5kLCBhcmd2LCBhcmdjKTsNCg0K ICAgIGlmIChjbGktPm1vZGUgPiBNT0RFX0NPTkZJRykNCgljbGlfc2V0X2Nv bmZpZ21vZGUoY2xpLCBNT0RFX0NPTkZJRywgMCk7DQogICAgZWxzZQ0KCWNs aV9zZXRfY29uZmlnbW9kZShjbGksIE1PREVfRVhFQywgMCk7DQoNCiAgICBy ZXR1cm4gQ0xJX09LOw0KfQ0KDQpzdGF0aWMgaW50IGNtZF9jb25maWd1cmVf dGVybWluYWwoc3RydWN0IGNsaV9kZWYgKmNsaSwgVU5VU0VEKGNoYXIgKmNv bW1hbmQpLA0KICAgIFVOVVNFRChjaGFyICphcmd2W10pLCBVTlVTRUQoaW50 IGFyZ2MpKQ0Kew0KICAgIGNsaV9zZXRfY29uZmlnbW9kZShjbGksIE1PREVf Q09ORklHLCAwKTsNCiAgICByZXR1cm4gQ0xJX09LOw0KfQ0KDQpzdHJ1Y3Qg Y2xpX2RlZiAqY2xpX2luaXQoKQ0Kew0KICAgIHN0cnVjdCBjbGlfZGVmICpj bGk7DQogICAgc3RydWN0IGNsaV9jb21tYW5kICpjOw0KDQogICAgaWYgKCEo Y2xpID0gY2FsbG9jKHNpemVvZihzdHJ1Y3QgY2xpX2RlZiksIDEpKSkNCgly ZXR1cm4gMDsNCg0KICAgIGNsaV9yZWdpc3Rlcl9jb21tYW5kKGNsaSwgMCwg ImhlbHAiLCBjbWRfaGVscCwgUFJJVklMRUdFX1VOUFJJVklMRUdFRCwNCiAg ICAJCQkgTU9ERV9BTlksICJTaG93IGF2YWlsYWJsZSBjb21tYW5kcyIpOw0K DQogICAgY2xpX3JlZ2lzdGVyX2NvbW1hbmQoY2xpLCAwLCAicXVpdCIsIGNt ZF9xdWl0LCBQUklWSUxFR0VfVU5QUklWSUxFR0VELA0KICAgIAkJCSBNT0RF X0FOWSwgIkRpc2Nvbm5lY3QiKTsNCg0KIC8vICAgY2xpX3JlZ2lzdGVyX2Nv bW1hbmQoY2xpLCAwLCAibG9nb3V0IiwgY21kX3F1aXQsIFBSSVZJTEVHRV9V TlBSSVZJTEVHRUQsDQogLy8gICAJCQkgTU9ERV9BTlksICJEaXNjb25uZWN0 Iik7DQoNCiAgICBjbGlfcmVnaXN0ZXJfY29tbWFuZChjbGksIDAsICJleGl0 IiwgY21kX2V4aXQsIFBSSVZJTEVHRV9VTlBSSVZJTEVHRUQsDQogICAgCQkJ IE1PREVfQU5ZLCAiRXhpdCBmcm9tIGN1cnJlbnQgbW9kZSIpOw0KDQogICAg Y2xpX3JlZ2lzdGVyX2NvbW1hbmQoY2xpLCAwLCAiaGlzdG9yeSIsIGNtZF9o aXN0b3J5LCBQUklWSUxFR0VfVU5QUklWSUxFR0VELA0KICAgIAkJCSBNT0RF X0FOWSwgIlNob3cgYSBsaXN0IG9mIHByZXZpb3VzbHkgcnVuIGNvbW1hbmRz Iik7DQoNCiAgICBjbGlfcmVnaXN0ZXJfY29tbWFuZChjbGksIDAsICJlbmFi bGUiLCBjbWRfZW5hYmxlLCBQUklWSUxFR0VfVU5QUklWSUxFR0VELA0KICAg IAkJCSBNT0RFX0VYRUMsICJUdXJuIG9uIHByaXZpbGVnZWQgY29tbWFuZHMi KTsNCg0KICAgIGNsaV9yZWdpc3Rlcl9jb21tYW5kKGNsaSwgMCwgImRpc2Fi bGUiLCBjbWRfZGlzYWJsZSwgUFJJVklMRUdFX1BSSVZJTEVHRUQsDQogICAg CQkJIE1PREVfRVhFQywgIlR1cm4gb2ZmIHByaXZpbGVnZWQgY29tbWFuZHMi KTsNCg0KICAgIGMgPSBjbGlfcmVnaXN0ZXJfY29tbWFuZChjbGksIDAsICJj b25maWd1cmUiLCAwLCBQUklWSUxFR0VfUFJJVklMRUdFRCwNCgkJCSAgICAg TU9ERV9FWEVDLCAiRW50ZXIgY29uZmlndXJhdGlvbiBtb2RlIik7DQoNCiAg ICBjbGlfcmVnaXN0ZXJfY29tbWFuZChjbGksIGMsICJ0ZXJtaW5hbCIsIGNt ZF9jb25maWd1cmVfdGVybWluYWwsDQoJCQkgUFJJVklMRUdFX1BSSVZJTEVH RUQsIE1PREVfRVhFQywNCgkJCSAiQ29uZmlndXJlIGZyb20gdGhlIHRlcm1p bmFsIik7DQoNCiAgICBjbGktPnByaXZpbGVnZSA9IGNsaS0+bW9kZSA9IC0x Ow0KICAgIGNsaV9zZXRfcHJpdmlsZWdlKGNsaSwgUFJJVklMRUdFX1VOUFJJ VklMRUdFRCk7DQogICAgY2xpX3NldF9jb25maWdtb2RlKGNsaSwgTU9ERV9F WEVDLCAwKTsNCiAgICByZXR1cm4gY2xpOw0KfQ0KDQpzdGF0aWMgdm9pZCB1 bnJlZ2lzdGVyX2FsbChzdHJ1Y3QgY2xpX2RlZiAqY2xpLCBzdHJ1Y3QgY2xp X2NvbW1hbmQgKmNvbW1hbmQpDQp7DQogICAgc3RydWN0IGNsaV9jb21tYW5k ICpjOw0KDQogICAgaWYgKCFjb21tYW5kKQ0KCWNvbW1hbmQgPSBjbGktPmNv bW1hbmRzOw0KDQogICAgaWYgKCFjb21tYW5kKQ0KCXJldHVybjsNCg0KICAg IGZvciAoYyA9IGNvbW1hbmQ7IGM7ICkNCiAgICB7DQoJc3RydWN0IGNsaV9j b21tYW5kICpwID0gYy0+bmV4dDsNCg0KCS8qIHVucmVnaXN0ZXIgYWxsIGNo aWxkIGNvbW1hbmRzICovDQoJaWYgKGMtPmNoaWxkcmVuKQ0KCSAgICB1bnJl Z2lzdGVyX2FsbChjbGksIGMtPmNoaWxkcmVuKTsNCg0KCWZyZWUoYy0+Y29t bWFuZCk7DQoJZnJlZShjLT5oZWxwKTsNCglmcmVlKGMpOw0KCWMgPSBwOw0K ICAgIH0NCn0NCg0KaW50IGNsaV9kb25lKHN0cnVjdCBjbGlfZGVmICpjbGkp DQp7DQogICAgc3RydWN0IHVucCAqdSA9IGNsaS0+dXNlcnM7DQoNCiAgICAv KiBmcmVlIGFsbCB1c2VycyAqLw0KICAgIHdoaWxlICh1KQ0KICAgIHsNCglz dHJ1Y3QgdW5wICpuID0gdS0+bmV4dDsNCglmcmVlKHUtPnVzZXJuYW1lKTsN CglmcmVlKHUtPnBhc3N3b3JkKTsNCglmcmVlKHUpOw0KCXUgPSBuOw0KICAg IH0NCg0KICAgIC8qIGZyZWUgYWxsIGNvbW1hbmRzICovDQogICAgdW5yZWdp c3Rlcl9hbGwoY2xpLCAwKTsNCg0KICAgIGZyZWUoY2xpLT5iYW5uZXIpOw0K ICAgIGZyZWUoY2xpLT5wcm9tcHRjaGFyKTsNCiAgICBmcmVlKGNsaS0+aG9z dG5hbWUpOw0KICAgIGZyZWVfeihjbGkpOw0KDQogICAgcmV0dXJuIENMSV9P SzsNCn0NCg0Kc3RhdGljIGludCBhZGRfaGlzdG9yeShzdHJ1Y3QgY2xpX2Rl ZiAqY2xpLCBjaGFyICpjbWQpDQp7DQogICAgaW50IGkgPSAwOw0KDQogICAg LyogdGFibGUgZnVsbCAqLw0KICAgIGlmIChjbGktPmhpc3RvcnlbTUFYX0hJ U1RPUlktMV0pDQogICAgew0KCWZyZWUoY2xpLT5oaXN0b3J5WzBdKTsNCglm b3IgKDsgaSA8IE1BWF9ISVNUT1JZLTE7IGkrKykNCgkgICAgY2xpLT5oaXN0 b3J5W2ldID0gY2xpLT5oaXN0b3J5W2krMV07DQoNCgljbGktPmhpc3Rvcnlb aV0gPSAwOw0KICAgIH0NCg0KICAgIHdoaWxlIChjbGktPmhpc3RvcnlbaV0p DQoJaSsrOw0KDQogICAgY2xpLT5oaXN0b3J5W2ldID0gc3RyZHVwKGNtZCk7 DQogICAgcmV0dXJuIGkgKyAxOw0KfQ0KDQpzdGF0aWMgaW50IHBhcnNlX2xp bmUoY2hhciAqbGluZSwgY2hhciAqd29yZHNbXSwgaW50IG1heF93b3JkcykN CnsNCiAgICBpbnQgbndvcmRzID0gMDsNCiAgICBjaGFyICpwID0gbGluZTsN CiAgICBjaGFyICp3b3JkX3N0YXJ0ID0gbGluZTsNCiAgICBpbnQgaW5xdW90 ZSA9IDA7DQoNCiAgICB3aGlsZSAobndvcmRzIDwgbWF4X3dvcmRzIC0gMSkN CiAgICB7DQoJaWYgKCEqcCB8fCAqcCA9PSBpbnF1b3RlIHx8DQoJICAgICh3 b3JkX3N0YXJ0ICYmICFpbnF1b3RlICYmIChpc3NwYWNlKCpwKSB8fCAqcCA9 PSAnfCcpKSkNCgl7DQoJICAgIGlmICh3b3JkX3N0YXJ0KQ0KCSAgICB7DQoJ CWludCBsZW4gPSBwIC0gd29yZF9zdGFydDsNCg0KCQltZW1jcHkod29yZHNb bndvcmRzXSA9IG1hbGxvYyhsZW4gKyAxKSwgd29yZF9zdGFydCwgbGVuKTsN CgkJd29yZHNbbndvcmRzKytdW2xlbl0gPSAwOw0KCSAgICB9DQoNCgkgICAg aWYgKCEqcCkNCgkJYnJlYWs7DQoNCgkgICAgaWYgKGlucXVvdGUpDQoJCXAr KzsgLyogc2tpcCBvdmVyIHRyYWlsaW5nIHF1b3RlICovDQoNCgkgICAgaW5x dW90ZSA9IDA7DQoJICAgIHdvcmRfc3RhcnQgPSAwOw0KCX0NCgllbHNlIGlm ICgqcCA9PSAnIicgfHwgKnAgPT0gJ1wnJykNCgl7DQoJICAgIGlucXVvdGUg PSAqcCsrOw0KCSAgICB3b3JkX3N0YXJ0ID0gcDsNCgl9DQoJZWxzZQ0KCXsN CgkgICAgaWYgKCF3b3JkX3N0YXJ0KQ0KCSAgICB7DQoJCWlmICgqcCA9PSAn fCcpDQoJCSAgICB3b3Jkc1tud29yZHMrK10gPSBzdHJkdXAoInwiKTsNCgkJ ZWxzZSBpZiAoIWlzc3BhY2UoKnApKQ0KCQkgICAgd29yZF9zdGFydCA9IHA7 DQoJICAgIH0NCg0KCSAgICBwKys7DQoJfQ0KICAgIH0NCg0KICAgIHJldHVy biBud29yZHM7DQp9DQoNCnN0YXRpYyBjaGFyICpqb2luX3dvcmRzKGludCBh cmdjLCBjaGFyICoqYXJndikNCnsNCiAgICBjaGFyICpwOw0KICAgIGludCBs ZW4gPSAwOw0KICAgIGludCBpOw0KDQogICAgZm9yIChpID0gMDsgaSA8IGFy Z2M7IGkrKykNCiAgICB7DQoJaWYgKGkpDQoJICAgIGxlbiArPSAxOw0KDQoJ bGVuICs9IHN0cmxlbihhcmd2W2ldKTsNCiAgICB9DQoNCiAgICBwID0gbWFs bG9jKGxlbiArIDEpOw0KICAgIHBbMF0gPSAwOw0KDQogICAgZm9yIChpID0g MDsgaSA8IGFyZ2M7IGkrKykNCiAgICB7DQoJaWYgKGkpDQoJICAgIHN0cmNh dChwLCAiICIpOw0KDQoJc3RyY2F0KHAsIGFyZ3ZbaV0pOw0KICAgIH0NCg0K ICAgIHJldHVybiBwOw0KfQ0KI2lmZGVmIFJFR0VYX0gNCnN0cnVjdCBtYXRj aF9maWx0ZXJfc3RhdGUgew0KICAgIGludCBmbGFnczsNCiNkZWZpbmUgTUFU Q0hfUkVHRVgJCTENCiNkZWZpbmUgTUFUQ0hfSU5WRVJUCQkyDQogICAgdW5p b24gew0KCWNoYXIgKnN0cmluZzsNCglyZWdleF90IHJlOw0KICAgIH0gbWF0 Y2g7DQp9Ow0KDQpzdGF0aWMgaW50IG1hdGNoX2ZpbHRlcihVTlVTRUQoc3Ry dWN0IGNsaV9kZWYgKmNsaSksIGNoYXIgKnN0cmluZywgdm9pZCAqZGF0YSkN CnsNCiAgICBzdHJ1Y3QgbWF0Y2hfZmlsdGVyX3N0YXRlICpzdGF0ZSA9IGRh dGE7DQogICAgaW50IHIgPSBDTElfRVJST1I7DQoNCiAgICBpZiAoIXN0cmlu ZykgLyogY2xlYW4gdXAgKi8NCiAgICB7DQoJaWYgKHN0YXRlLT5mbGFncyAm IE1BVENIX1JFR0VYKQ0KCSAgICByZWdmcmVlKCZzdGF0ZS0+bWF0Y2gucmUp Ow0KCWVsc2UNCgkgICAgZnJlZShzdGF0ZS0+bWF0Y2guc3RyaW5nKTsNCg0K CWZyZWUoc3RhdGUpOw0KCXJldHVybiBDTElfT0s7DQogICAgfQ0KDQogICAg aWYgKHN0YXRlLT5mbGFncyAmIE1BVENIX1JFR0VYKQ0KICAgIHsNCglpZiAo IXJlZ2V4ZWMoJnN0YXRlLT5tYXRjaC5yZSwgc3RyaW5nLCAwLCAwLCAwKSkN CgkgICAgciA9IENMSV9PSzsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCglp ZiAoc3Ryc3RyKHN0cmluZywgc3RhdGUtPm1hdGNoLnN0cmluZykpDQoJICAg IHIgPSBDTElfT0s7DQogICAgfQ0KDQogICAgaWYgKHN0YXRlLT5mbGFncyAm IE1BVENIX0lOVkVSVCkNCiAgICB7DQoJaWYgKHIgPT0gQ0xJX09LKQ0KCSAg ICByID0gQ0xJX0VSUk9SOw0KCWVsc2UNCgkgICAgciA9IENMSV9PSzsNCiAg ICB9DQoNCiAgICByZXR1cm4gcjsNCn0NCg0Kc3RhdGljIGludCBtYXRjaF9m aWx0ZXJfaW5pdChzdHJ1Y3QgY2xpX2RlZiAqY2xpLCBpbnQgYXJnYywgY2hh ciAqKmFyZ3YsDQogICAgc3RydWN0IGNsaV9maWx0ZXIgKmZpbHQpDQp7DQog ICAgc3RydWN0IG1hdGNoX2ZpbHRlcl9zdGF0ZSAqc3RhdGU7DQogICAgaW50 IHJmbGFnczsNCiAgICBpbnQgaTsNCiAgICBjaGFyICpwOw0KDQogICAgaWYg KGFyZ2MgPCAyKQ0KICAgIHsNCglpZiAoY2xpLT5jbGllbnQpDQoJICAgIGZw cmludGYoY2xpLT5jbGllbnQsICJNYXRjaCBmaWx0ZXIgcmVxdWlyZXMgYW4g YXJndW1lbnRcclxuIik7DQoNCglyZXR1cm4gQ0xJX0VSUk9SOw0KICAgIH0N Cg0KICAgIGZpbHQtPmZpbHRlciA9IG1hdGNoX2ZpbHRlcjsNCiAgICBmaWx0 LT5kYXRhID0gc3RhdGUgPSBjYWxsb2Moc2l6ZW9mKHN0cnVjdCBtYXRjaF9m aWx0ZXJfc3RhdGUpLCAxKTsNCg0KICAgIGlmIChhcmd2WzBdWzBdID09ICdp JyB8fCAvKiBpbmNsdWRlL2V4Y2x1ZGUgKi8NCgkoYXJndlswXVswXSA9PSAn ZScgJiYgYXJndlswXVsxXSA9PSAneCcpKQ0KICAgIHsNCglpZiAoYXJndlsw XVswXSA9PSAnZScpDQoJICAgIHN0YXRlLT5mbGFncyA9IE1BVENIX0lOVkVS VDsNCg0KCXN0YXRlLT5tYXRjaC5zdHJpbmcgPSBqb2luX3dvcmRzKGFyZ2Mt MSwgYXJndisxKTsNCglyZXR1cm4gQ0xJX09LOw0KICAgIH0NCg0KICAgIHN0 YXRlLT5mbGFncyA9IE1BVENIX1JFR0VYOw0KDQogICAgLyogZ3JlcC9lZ3Jl cCAqLw0KICAgIHJmbGFncyA9IFJFR19OT1NVQjsNCiAgICBpZiAoYXJndlsw XVswXSA9PSAnZScpIC8qIGVncmVwICovDQoJcmZsYWdzIHw9IFJFR19FWFRF TkRFRDsNCg0KICAgIGkgPSAxOw0KICAgIHdoaWxlIChpIDwgYXJnYyAtIDEg JiYgYXJndltpXVswXSA9PSAnLScgJiYgYXJndltpXVsxXSkNCiAgICB7DQoJ aW50IGxhc3QgPSAwOw0KCXAgPSAmYXJndltpXVsxXTsNCg0KCWlmIChzdHJz cG4ocCwgInZpZSIpICE9IHN0cmxlbihwKSkNCgkgICAgYnJlYWs7DQoNCgl3 aGlsZSAoKnApDQoJew0KCSAgICBzd2l0Y2ggKCpwKyspDQoJICAgIHsNCgkg ICAgY2FzZSAndic6DQoJCXN0YXRlLT5mbGFncyB8PSBNQVRDSF9JTlZFUlQ7 DQoJCWJyZWFrOw0KDQoJICAgIGNhc2UgJ2knOg0KCQlyZmxhZ3MgfD0gUkVH X0lDQVNFOw0KCQlicmVhazsNCg0KCSAgICBjYXNlICdlJzoNCgkJbGFzdCsr Ow0KCQlicmVhazsNCgkgICAgfQ0KCX0NCg0KCWkrKzsNCglpZiAobGFzdCkN CgkgICAgYnJlYWs7DQogICAgfQ0KDQogICAgcCA9IGpvaW5fd29yZHMoYXJn Yy1pLCBhcmd2K2kpOw0KICAgIGlmICgoaSA9IHJlZ2NvbXAoJnN0YXRlLT5t YXRjaC5yZSwgcCwgcmZsYWdzKSkpDQogICAgew0KCWlmIChjbGktPmNsaWVu dCkNCgkgICAgZnByaW50ZihjbGktPmNsaWVudCwgIkludmFsaWQgcGF0dGVy biBcIiVzXCJcclxuIiwgcCk7DQoNCglmcmVlKHApOw0KCXJldHVybiBDTElf RVJST1I7DQogICAgfQ0KDQogICAgZnJlZShwKTsNCiAgICByZXR1cm4gQ0xJ X09LOw0KfQ0KI2VuZGlmIC8vUkVHRVhfSA0Kc3RydWN0IHJhbmdlX2ZpbHRl cl9zdGF0ZSB7DQogICAgaW50IG1hdGNoZWQ7DQogICAgY2hhciAqZnJvbTsN CiAgICBjaGFyICp0bzsNCn07DQoNCnN0YXRpYyBpbnQgcmFuZ2VfZmlsdGVy KFVOVVNFRChzdHJ1Y3QgY2xpX2RlZiAqY2xpKSwgY2hhciAqc3RyaW5nLCB2 b2lkICpkYXRhKQ0Kew0KICAgIHN0cnVjdCByYW5nZV9maWx0ZXJfc3RhdGUg KnN0YXRlID0gZGF0YTsNCiAgICBpbnQgciA9IENMSV9FUlJPUjsNCg0KICAg IGlmICghc3RyaW5nKSAvKiBjbGVhbiB1cCAqLw0KICAgIHsNCglmcmVlKHN0 YXRlLT5mcm9tKTsNCglmcmVlKHN0YXRlLT50byk7DQoJZnJlZShzdGF0ZSk7 DQoJcmV0dXJuIENMSV9PSzsNCiAgICB9DQoNCiAgICBpZiAoIXN0YXRlLT5t YXRjaGVkKQ0KCXN0YXRlLT5tYXRjaGVkID0gISFzdHJzdHIoc3RyaW5nLCBz dGF0ZS0+ZnJvbSk7DQoNCiAgICBpZiAoc3RhdGUtPm1hdGNoZWQpDQogICAg ew0KCXIgPSBDTElfT0s7DQoJaWYgKHN0YXRlLT50byAmJiBzdHJzdHIoc3Ry aW5nLCBzdGF0ZS0+dG8pKQ0KCSAgICBzdGF0ZS0+bWF0Y2hlZCA9IDA7DQog ICAgfQ0KDQogICAgcmV0dXJuIHI7DQp9DQoNCnN0YXRpYyBpbnQgcmFuZ2Vf ZmlsdGVyX2luaXQoc3RydWN0IGNsaV9kZWYgKmNsaSwgaW50IGFyZ2MsIGNo YXIgKiphcmd2LA0KICAgIHN0cnVjdCBjbGlfZmlsdGVyICpmaWx0KQ0Kew0K ICAgIHN0cnVjdCByYW5nZV9maWx0ZXJfc3RhdGUgKnN0YXRlOw0KICAgIGNo YXIgKmZyb20gPSAwOw0KICAgIGNoYXIgKnRvID0gMDsNCg0KICAgIGlmICgh c3RybmNtcChhcmd2WzBdLCAiYmV0IiwgMykpIC8qIGJldHdlZW4gKi8NCiAg ICB7DQoJaWYgKGFyZ2MgPCAzKQ0KCXsNCgkgICAgaWYgKGNsaS0+Y2xpZW50 KQ0KCQlmcHJpbnRmKGNsaS0+Y2xpZW50LCAiQmV0d2VlbiBmaWx0ZXIgcmVx dWlyZXMgMiBhcmd1bWVudHNcclxuIik7DQoNCgkgICAgcmV0dXJuIENMSV9F UlJPUjsNCgl9DQoNCglmcm9tID0gc3RyZHVwKGFyZ3ZbMV0pOw0KCXRvID0g am9pbl93b3JkcyhhcmdjLTIsIGFyZ3YrMik7DQogICAgfQ0KICAgIGVsc2Ug LyogYmVnaW4gKi8NCiAgICB7DQoJaWYgKGFyZ2MgPCAyKQ0KCXsNCgkgICAg aWYgKGNsaS0+Y2xpZW50KQ0KCQlmcHJpbnRmKGNsaS0+Y2xpZW50LCAiQmVn aW4gZmlsdGVyIHJlcXVpcmVzIGFuIGFyZ3VtZW50XHJcbiIpOw0KDQoJICAg IHJldHVybiBDTElfRVJST1I7DQoJfQ0KDQoJZnJvbSA9IGpvaW5fd29yZHMo YXJnYy0xLCBhcmd2KzEpOw0KICAgIH0NCg0KICAgIGZpbHQtPmZpbHRlciA9 IHJhbmdlX2ZpbHRlcjsNCiAgICBmaWx0LT5kYXRhID0gc3RhdGUgPSBjYWxs b2Moc2l6ZW9mKHN0cnVjdCByYW5nZV9maWx0ZXJfc3RhdGUpLCAxKTsNCg0K ICAgIHN0YXRlLT5mcm9tID0gZnJvbTsNCiAgICBzdGF0ZS0+dG8gPSB0bzsN Cg0KICAgIHJldHVybiBDTElfT0s7DQp9DQoNCnN0YXRpYyBpbnQgY291bnRf ZmlsdGVyKHN0cnVjdCBjbGlfZGVmICpjbGksIGNoYXIgKnN0cmluZywgdm9p ZCAqZGF0YSkNCnsNCiAgICBpbnQgKmNvdW50ID0gZGF0YTsNCg0KICAgIGlm ICghc3RyaW5nKSAvKiBjbGVhbiB1cCAqLw0KICAgIHsNCgkvKiBwcmludCBj b3VudCAqLw0KCWlmIChjbGktPmNsaWVudCkNCgkgICAgZnByaW50ZihjbGkt PmNsaWVudCwgIiVkXHJcbiIsICpjb3VudCk7DQoNCglmcmVlKGNvdW50KTsN CglyZXR1cm4gQ0xJX09LOw0KICAgIH0NCg0KICAgIHdoaWxlIChpc3NwYWNl KCpzdHJpbmcpKQ0KCXN0cmluZysrOw0KDQogICAgaWYgKCpzdHJpbmcpDQoJ KCpjb3VudCkrKzsgIC8qIG9ubHkgY291bnQgbm9uLWJsYW5rIGxpbmVzICov DQoNCiAgICByZXR1cm4gQ0xJX0VSUk9SOyAvKiBubyBvdXRwdXQgKi8NCn0N Cg0Kc3RhdGljIGludCBjb3VudF9maWx0ZXJfaW5pdChzdHJ1Y3QgY2xpX2Rl ZiAqY2xpLCBpbnQgYXJnYywNCiAgICBVTlVTRUQoY2hhciAqKmFyZ3YpLCBz dHJ1Y3QgY2xpX2ZpbHRlciAqZmlsdCkNCnsNCiAgICBpZiAoYXJnYyA+IDEp DQogICAgew0KCWlmIChjbGktPmNsaWVudCkNCgkgICAgZnByaW50ZihjbGkt PmNsaWVudCwgIkNvdW50IGZpbHRlciBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50 c1xyXG4iKTsNCg0KCXJldHVybiBDTElfRVJST1I7DQogICAgfQ0KDQogICAg ZmlsdC0+ZmlsdGVyID0gY291bnRfZmlsdGVyOw0KICAgIGZpbHQtPmRhdGEg PSBjYWxsb2Moc2l6ZW9mKGludCksIDEpOw0KDQogICAgcmV0dXJuIENMSV9P SzsNCn0NCg0Kc3RhdGljIGludCBmaW5kX2NvbW1hbmQoc3RydWN0IGNsaV9k ZWYgKmNsaSwgc3RydWN0IGNsaV9jb21tYW5kICpjb21tYW5kcywNCiAgICBp bnQgbnVtX3dvcmRzLCBjaGFyICp3b3Jkc1tdLCBpbnQgc3RhcnRfd29yZCwg aW50IGZpbHRlcnNbXSkNCnsNCiAgICBzdHJ1Y3QgY2xpX2NvbW1hbmQgKmM7 DQogICAgaW50IGNfd29yZHMgPSBudW1fd29yZHM7DQoNCiAgICBpZiAoZmls dGVyc1swXSkNCgljX3dvcmRzID0gZmlsdGVyc1swXTsNCg0KICAgIC8qIGRl YWwgd2l0aCA/IGZvciBoZWxwICovDQogICAgaWYgKCF3b3Jkc1tzdGFydF93 b3JkXSkNCglyZXR1cm4gQ0xJX0VSUk9SOw0KDQogICAgaWYgKHdvcmRzW3N0 YXJ0X3dvcmRdW3N0cmxlbih3b3Jkc1tzdGFydF93b3JkXSktMV0gPT0gJz8n KQ0KICAgIHsNCglpbnQgbCA9IHN0cmxlbih3b3Jkc1tzdGFydF93b3JkXSkt MTsNCg0KCWZvciAoYyA9IGNvbW1hbmRzOyBjOyBjID0gYy0+bmV4dCkNCgl7 DQoJICAgIGlmICghc3RybmNhc2VjbXAoYy0+Y29tbWFuZCwgd29yZHNbc3Rh cnRfd29yZF0sIGwpICYmDQoJCShjLT5jYWxsYmFjayB8fCBjLT5jaGlsZHJl bikgJiYNCgkJY2xpLT5wcml2aWxlZ2UgPj0gYy0+cHJpdmlsZWdlICYmDQoJ CShjLT5tb2RlID09IGNsaS0+bW9kZSB8fCBjLT5tb2RlID09IE1PREVfQU5Z KSkNCgkgICAgew0KCQljbGlfZXJyb3IoY2xpLCAiICAlLTIwcyAlcyIsIGMt PmNvbW1hbmQsIGMtPmhlbHAgPyA6ICIiKTsNCgkgICAgfQ0KCX0NCg0KCXJl dHVybiBDTElfT0s7DQogICAgfQ0KDQogICAgZm9yIChjID0gY29tbWFuZHM7 IGM7IGMgPSBjLT5uZXh0KQ0KICAgIHsNCglpZiAoY2xpLT5wcml2aWxlZ2Ug PCBjLT5wcml2aWxlZ2UpDQoJICAgIGNvbnRpbnVlOw0KDQoJaWYgKHN0cm5j YXNlY21wKGMtPmNvbW1hbmQsIHdvcmRzW3N0YXJ0X3dvcmRdLCBjLT51bmlx dWVfbGVuKSkNCgkgICAgY29udGludWU7DQoJICAgIA0KCWlmIChzdHJuY2Fz ZWNtcChjLT5jb21tYW5kLCB3b3Jkc1tzdGFydF93b3JkXSwNCgkJCXN0cmxl bih3b3Jkc1tzdGFydF93b3JkXSkpKQ0KCSAgICBjb250aW51ZTsNCg0KCS8q IGRyb3Agb3V0IG9mIGNvbmZpZyBzdWJtb2RlICovDQoJaWYgKGNsaS0+bW9k ZSA+IE1PREVfQ09ORklHICYmIGMtPm1vZGUgPT0gTU9ERV9DT05GSUcpDQoJ ICAgIGNsaV9zZXRfY29uZmlnbW9kZShjbGksIE1PREVfQ09ORklHLCAwKTsN Cg0KCWlmIChjLT5tb2RlID09IGNsaS0+bW9kZSB8fCBjLT5tb2RlID09IE1P REVfQU5ZKQ0KCXsNCgkgICAgaW50IHJjID0gQ0xJX09LOw0KCSAgICBpbnQg ZjsNCgkgICAgc3RydWN0IGNsaV9maWx0ZXIgKipmaWx0ID0gJmNsaS0+Zmls dGVyczsNCg0KCSAgICAvKiBmb3VuZCBhIHdvcmQhICovDQoJICAgIGlmICgh Yy0+Y2hpbGRyZW4pDQoJICAgIHsNCgkJLyogbGFzdCB3b3JkICovDQoJCWlm ICghYy0+Y2FsbGJhY2spDQoJCXsNCgkJICAgIGNsaV9lcnJvcihjbGksICJO byBjYWxsYmFjayBmb3IgXCIlc1wiIiwNCgkJCSAgICAgIGNvbW1hbmRfbmFt ZShjbGksIGMpKTsNCg0KCQkgICAgcmV0dXJuIENMSV9FUlJPUjsNCgkJfQ0K CSAgICB9DQoJICAgIGVsc2UNCgkgICAgew0KCQlpZiAoc3RhcnRfd29yZCA9 PSBjX3dvcmRzIC0gMSkNCgkJew0KCQkgICAgY2xpX2Vycm9yKGNsaSwgIklu Y29tcGxldGUgY29tbWFuZCIpOw0KCQkgICAgcmV0dXJuIENMSV9FUlJPUjsN CgkJfQ0KDQoJCXJldHVybiBmaW5kX2NvbW1hbmQoY2xpLCBjLT5jaGlsZHJl biwgbnVtX3dvcmRzLCB3b3JkcywNCgkJCQkgICAgc3RhcnRfd29yZCArIDEs IGZpbHRlcnMpOw0KCSAgICB9DQoNCgkgICAgaWYgKCFjLT5jYWxsYmFjaykN CgkgICAgew0KCQljbGlfZXJyb3IoY2xpLCAiSW50ZXJuYWwgc2VydmVyIGVy cm9yIHByb2Nlc3NpbmcgXCIlc1wiIiwNCgkJCSAgY29tbWFuZF9uYW1lKGNs aSwgYykpOw0KDQoJCXJldHVybiBDTElfRVJST1I7DQoJICAgIH0NCg0KCSAg ICBmb3IgKGYgPSAwOyByYyA9PSBDTElfT0sgJiYgZmlsdGVyc1tmXTsgZisr KQ0KCSAgICB7DQoJCWludCBuID0gbnVtX3dvcmRzOw0KCQljaGFyICoqYXJn djsNCgkJaW50IGFyZ2M7DQoJCWludCBsZW47DQoNCgkJaWYgKGZpbHRlcnNb ZisxXSkNCgkJICAgIG4gPSBmaWx0ZXJzW2YrMV07DQoNCgkJaWYgKGZpbHRl cnNbZl0gPT0gbiAtIDEpDQoJCXsNCgkJICAgIGNsaV9lcnJvcihjbGksICJN aXNzaW5nIGZpbHRlciIpOw0KCQkgICAgcmV0dXJuIENMSV9FUlJPUjsNCgkJ fQ0KDQoJCWFyZ3YgPSB3b3JkcyArIGZpbHRlcnNbZl0gKyAxOw0KCQlhcmdj ID0gbiAtIChmaWx0ZXJzW2ZdICsgMSk7DQoJCWxlbiA9IHN0cmxlbihhcmd2 WzBdKTsNCgkJaWYgKGFyZ3ZbYXJnYy0xXVtzdHJsZW4oYXJndlthcmdjLTFd KS0xXSA9PSAnPycpDQoJCXsNCgkJICAgIGlmIChhcmdjID09IDEpDQoJCSAg ICB7DQoJCQljbGlfZXJyb3IoY2xpLCAiICAlLTIwcyAlcyIsICJiZWdpbiIs DQoJCQkJICAiQmVnaW4gd2l0aCBsaW5lcyB0aGF0IG1hdGNoIik7DQoNCgkJ CWNsaV9lcnJvcihjbGksICIgICUtMjBzICVzIiwgImJldHdlZW4iLA0KCQkJ CSAgIkJldHdlZW4gbGluZXMgdGhhdCBtYXRjaCIpOw0KDQoJCQljbGlfZXJy b3IoY2xpLCAiICAlLTIwcyAlcyIsICJjb3VudCIsDQoJCQkgICAgICAgICAg IkNvdW50IG9mIGxpbmVzIik7DQoNCgkJCWNsaV9lcnJvcihjbGksICIgICUt MjBzICVzIiwgImV4Y2x1ZGUiLA0KCQkJICAgICAgICAgICJFeGNsdWRlIGxp bmVzIHRoYXQgbWF0Y2giKTsNCg0KCQkJY2xpX2Vycm9yKGNsaSwgIiAgJS0y MHMgJXMiLCAiaW5jbHVkZSIsDQoJCQkgICAgICAgICAgIkluY2x1ZGUgbGlu ZXMgdGhhdCBtYXRjaCIpOw0KDQoJCQljbGlfZXJyb3IoY2xpLCAiICAlLTIw cyAlcyIsICJncmVwIiwNCgkJCSAgICAgICAgICAiSW5jbHVkZSBsaW5lcyB0 aGF0IG1hdGNoIHJlZ2V4ICINCgkJCQkgICIob3B0aW9uczogLXYsIC1pLCAt ZSkiKTsNCg0KCQkJY2xpX2Vycm9yKGNsaSwgIiAgJS0yMHMgJXMiLCAiZWdy ZXAiLA0KCQkJCSAgIkluY2x1ZGUgbGluZXMgdGhhdCBtYXRjaCBleHRlbmRl ZCByZWdleCIpOw0KCQkgICAgfQ0KCQkgICAgZWxzZQ0KCQkgICAgew0KCQkJ aWYgKGFyZ3ZbMF1bMF0gIT0gJ2MnKSAvKiBjb3VudCAqLw0KCQkJICAgIGNs aV9lcnJvcihjbGksICIgIFdPUkQiKTsNCg0KCQkJaWYgKGFyZ2MgPiAyIHx8 IGFyZ3ZbMF1bMF0gPT0gJ2MnKSAvKiBjb3VudCAqLw0KCQkJICAgIGNsaV9l cnJvcihjbGksICIgIDxjcj4iKTsNCgkJICAgIH0NCg0KCQkgICAgcmV0dXJu IENMSV9PSzsNCgkJfQ0KDQoJCWlmIChhcmd2WzBdWzBdID09ICdiJyAmJiBs ZW4gPCAzKSAvKiBbYmVnXWluLCBbYmV0XXdlZW4gKi8NCgkJew0KCQkgICAg Y2xpX2Vycm9yKGNsaSwgIkFtYmlndW91cyBmaWx0ZXIgXCIlc1wiIChiZWdp biwgYmV0d2VlbikiLA0KCQkJICAgICAgYXJndlswXSk7DQoNCgkJICAgIHJl dHVybiBDTElfRVJST1I7DQoJCX0NCg0KCQlpZiAoYXJndlswXVswXSA9PSAn ZScgJiYgbGVuIDwgMikgLyogW2VnXXJlcCwgW2V4XWNsdWRlICovDQoJCXsN CgkJICAgIGNsaV9lcnJvcihjbGksICJBbWJpZ3VvdXMgZmlsdGVyIFwiJXNc IiAoZWdyZXAsIGV4Y2x1ZGUpIiwNCgkJCSAgICAgIGFyZ3ZbMF0pOw0KDQoJ CSAgICByZXR1cm4gQ0xJX0VSUk9SOw0KCQl9DQoNCgkJKmZpbHQgPSBjYWxs b2Moc2l6ZW9mKHN0cnVjdCBjbGlfZmlsdGVyKSwgMSk7DQoNCgkJaWYgKCFz dHJuY21wKCJpbmNsdWRlIiwgYXJndlswXSwgbGVuKSB8fA0KCQkgICAgIXN0 cm5jbXAoImV4Y2x1ZGUiLCBhcmd2WzBdLCBsZW4pIHx8DQoJCSAgICAhc3Ry bmNtcCgiZ3JlcCIsIGFyZ3ZbMF0sIGxlbikgfHwNCgkJICAgICFzdHJuY21w KCJlZ3JlcCIsIGFyZ3ZbMF0sIGxlbikpDQoJCSNpZmRlZiBSRUdFWF9ICQ0K CQkgICAgcmMgPSBtYXRjaF9maWx0ZXJfaW5pdChjbGksIGFyZ2MsIGFyZ3Ys ICpmaWx0KTsNCgkJI2VuZGlmDQoJCSAJOw0KCQllbHNlIGlmICghc3RybmNt cCgiYmVnaW4iLCBhcmd2WzBdLCBsZW4pIHx8DQoJCSAgICAhc3RybmNtcCgi YmV0d2VlbiIsIGFyZ3ZbMF0sIGxlbikpDQoJCSAgICByYyA9IHJhbmdlX2Zp bHRlcl9pbml0KGNsaSwgYXJnYywgYXJndiwgKmZpbHQpOw0KCQllbHNlIGlm ICghc3RybmNtcCgiY291bnQiLCBhcmd2WzBdLCBsZW4pKQ0KCQkgICAgcmMg PSBjb3VudF9maWx0ZXJfaW5pdChjbGksIGFyZ2MsIGFyZ3YsICpmaWx0KTsN CgkJZWxzZQ0KCQl7DQoJCSAgICBjbGlfZXJyb3IoY2xpLCAiSW52YWxpZCBm aWx0ZXIgXCIlc1wiIiwgYXJndlswXSk7DQoJCSAgICByYyA9IENMSV9FUlJP UjsNCgkJfQ0KDQoJCWlmIChyYyA9PSBDTElfT0spDQoJCSAgICBmaWx0ID0g JigqZmlsdCktPm5leHQ7DQoJCWVsc2UNCgkJICAgIGZyZWVfeigqZmlsdCk7 DQoJICAgIH0NCg0KCSAgICBpZiAocmMgPT0gQ0xJX09LKQ0KCSAgICB7DQoJ CXJjID0gYy0+Y2FsbGJhY2soY2xpLCBjb21tYW5kX25hbWUoY2xpLCBjKSwN CgkJCQkgd29yZHMgKyBzdGFydF93b3JkICsgMSwNCgkJCQkgY193b3JkcyAt IHN0YXJ0X3dvcmQgLSAxKTsNCgkgICAgfQ0KDQoJICAgIHdoaWxlIChjbGkt PmZpbHRlcnMpDQoJICAgIHsNCgkJc3RydWN0IGNsaV9maWx0ZXIgKmZpbHQg PSBjbGktPmZpbHRlcnM7DQoNCgkJLyogY2FsbCBvbmUgbGFzdCB0aW1lIHRv IGNsZWFuIHVwICovDQoJCWZpbHQtPmZpbHRlcihjbGksIDAsIGZpbHQtPmRh dGEpOw0KCQljbGktPmZpbHRlcnMgPSBmaWx0LT5uZXh0Ow0KCQlmcmVlKGZp bHQpOw0KCSAgICB9DQoNCgkgICAgcmV0dXJuIHJjOw0KCX0NCiAgICB9DQoN CiAgICBjbGlfZXJyb3IoY2xpLCAiSW52YWxpZCAlcyBcIiVzXCIiLA0KCSAg ICAgIGNvbW1hbmRzLT5wYXJlbnQgPyAiYXJndW1lbnQiIDogImNvbW1hbmQi LCB3b3Jkc1tzdGFydF93b3JkXSk7DQoNCiAgICByZXR1cm4gQ0xJX0VSUk9S Ow0KfQ0KDQpzdGF0aWMgaW50IHJ1bl9jb21tYW5kKHN0cnVjdCBjbGlfZGVm ICpjbGksIGNoYXIgKmNvbW1hbmQpDQp7DQojZGVmaW5lIE1BWF9XT1JEIDEy OA0KI2RlZmluZSBNQVhfRklMVCAxMjgNCiAgICBjaGFyICp3b3Jkc1tNQVhf V09SRF0gPSB7IDAgfTsNCiAgICBpbnQgZmlsdGVyc1tNQVhfRklMVF0gPSB7 IDAgfTsNCiAgICBpbnQgbnVtX3dvcmRzOw0KICAgIGludCByOw0KICAgIGlu dCBpOw0KICAgIGludCBmOw0KDQogICAgaWYgKCFjb21tYW5kKQ0KCXJldHVy biBDTElfRVJST1I7DQoNCiAgICB3aGlsZSAoaXNzcGFjZSgqY29tbWFuZCkp DQoJY29tbWFuZCsrOw0KDQogICAgaWYgKCEqY29tbWFuZCkNCglyZXR1cm4g Q0xJX09LOw0KDQogICAgbnVtX3dvcmRzID0gcGFyc2VfbGluZShjb21tYW5k LCB3b3JkcywgTUFYX1dPUkQpOw0KICAgIGZvciAoaSA9IGYgPSAwOyBpIDwg bnVtX3dvcmRzICYmIGYgPCBNQVhfRklMVC0xOyBpKyspDQogICAgew0KCWlm ICh3b3Jkc1tpXVswXSA9PSAnfCcpDQoJICAgIGZpbHRlcnNbZisrXSA9IGk7 DQogICAgfQ0KDQogICAgZmlsdGVyc1tmXSA9IDA7DQoNCiAgICBpZiAobnVt X3dvcmRzKQ0KCXIgPSBmaW5kX2NvbW1hbmQoY2xpLCBjbGktPmNvbW1hbmRz LCBudW1fd29yZHMsIHdvcmRzLCAwLCBmaWx0ZXJzKTsNCiAgICBlbHNlDQoJ ciA9IENMSV9FUlJPUjsNCg0KICAgIGZvciAoaSA9IDA7IGkgPCBudW1fd29y ZHM7IGkrKykNCglmcmVlKHdvcmRzW2ldKTsNCg0KICAgIGlmIChyID09IENM SV9RVUlUKQ0KCXJldHVybiByOw0KDQogICAgcmV0dXJuIENMSV9PSzsNCn0N Cg0Kc3RhdGljIGludCBnZXRfY29tcGxldGlvbnMoc3RydWN0IGNsaV9kZWYg KiBjbGksY2hhciAqY29tbWFuZCwgY2hhciAqKmNvbXBsZXRpb25zLA0KICAg aW50IG1heF9jb21wbGV0aW9ucykNCnsNCiNkZWZpbmUgTUFYX1dPUkQgMTI4 DQojZGVmaW5lIE1BWF9GSUxUIDEyOA0KICAgIGNoYXIgKndvcmRzW01BWF9X T1JEXSA9IHsgMCB9Ow0KICAgIGNoYXIgKnR3b3Jkc1tNQVhfV09SRF0gPSB7 IDAgfTsNCiNpZiAwCQ0KICAgIGludCBmaWx0ZXJzW01BWF9GSUxUXSA9IHsg MCB9Ow0KICAgIGludCBmOw0KI2VuZGlmCQ0KICAgIGludCBudW1fd29yZHM7 DQogICAgaW50IGksazsNCg0KDQogICAgaW50IG51bV9jb21wbGV0aW9ucyA9 IDA7CQ0KICAgIHN0cnVjdCBjbGlfY29tbWFuZCAqYzsNCiAgICBzdHJ1Y3Qg Y2xpX2NvbW1hbmQgKmNoOw0KDQogICAgaWYgKCFjb21tYW5kKQ0KCXJldHVy biBDTElfRVJST1I7DQoNCiAgICB3aGlsZSAoaXNzcGFjZSgqY29tbWFuZCkp DQoJY29tbWFuZCsrOw0KDQogICAgaWYgKCEqY29tbWFuZCkNCglyZXR1cm4g Q0xJX09LOw0KDQogICAgbnVtX3dvcmRzID0gcGFyc2VfbGluZShjb21tYW5k LCB3b3JkcywgTUFYX1dPUkQpOw0KI2lmIDAJDQogICAgZm9yIChpID0gZiA9 IDA7IGkgPCBudW1fd29yZHMgJiYgZiA8IE1BWF9GSUxULTE7IGkrKykNCiAg ICB7DQoJaWYgKHdvcmRzW2ldWzBdID09ICd8JykNCgkgICAgZmlsdGVyc1tm KytdID0gaTsNCiAgICB9DQoNCiAgICBmaWx0ZXJzW2ZdID0gMDsNCiNlbmRp Zg0KDQogICAgaWYgKG51bV93b3JkcyA+PSAxKQ0KICAgIHsNCgkJYyA9IGNs aS0+Y29tbWFuZHM7DQoNCgkJZm9yIChpPTA7IGkgPCBudW1fd29yZHM7IGkr KykNCgkJew0KCQkJd2hpbGUgKGMpDQoJCQl7DQoJCQkJaWYgKHN0cm5jYXNl Y21wKGMtPmNvbW1hbmQsIHdvcmRzW2ldLHN0cmxlbih3b3Jkc1tpXSkpID09 IDApDQoJCQkJew0KCQkJCQlpZiAoIChpKzEpID09IG51bV93b3JkcykNCgkJ CQkJewkJCQkJCQkNCgkJCQkJCW51bV9jb21wbGV0aW9ucysrOw0KDQoJCQkJ CQlmb3IgKGsgPSAwOyBrIDwgaTsgaysrKQ0KCQkJCQkJew0KCQkJCQkJCXR3 b3Jkc1trXSA9IHdvcmRzW2tdOw0KCQkJCQkJfQ0KDQoJCQkJCQl0d29yZHNb aV0gPSBjLT5jb21tYW5kOyAgLy93aGljaCBpcyAnaScgdGggd29yZCAoaysx KQ0KCQkJCQkJCQkJDQoJCQkJCQljb21wbGV0aW9uc1tudW1fY29tcGxldGlv bnMtMV0gPSBqb2luX3dvcmRzKG51bV93b3JkcywgdHdvcmRzKTsNCg0KCQkJ CQkJY2ggPSBjLT5jaGlsZHJlbjsNCgkJCQkJCQ0KCQkJCQkJbmV4dDoNCgkJ CQkJCWlmIChjaCkNCgkJCQkJCXsNCgkJCQkJCQlpZiAoY2gtPmNvbW1hbmQp DQoJCQkJCQkJew0KCQkJCQkJCQludW1fY29tcGxldGlvbnMrKzsNCgkJCQkJ CQkJdHdvcmRzW2krMV0gPSBjaC0+Y29tbWFuZDsgIC8vd2hpY2ggaXMgJ2kr MScgdGggd29yZCAoaysyKQ0KCQkJCQkJCQljb21wbGV0aW9uc1tudW1fY29t cGxldGlvbnMtMV0gPSBqb2luX3dvcmRzKG51bV93b3JkcysxLCB0d29yZHMp Ow0KCQkJCQkJCQljaCA9IGNoLT5uZXh0Ow0KCQkJCQkJCQlnb3RvIG5leHQ7 DQoJCQkJCQkJfQ0KDQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJ CQl7DQoJCQkJCQljID0gYy0+Y2hpbGRyZW47DQoJCQkJCQlicmVhazsgLy9i cmVhayBmcm9tIHdoaWxlIGxvb3ANCgkJCQkJfQ0KCQkJCX0NCgkJCQljID0g Yy0+bmV4dDsJCQkJDQoJCQl9DQoJCX0NCiAgICB9DQoNCiAgICByZXR1cm4g bnVtX2NvbXBsZXRpb25zOw0KfQ0KI2lmIDANCnN0YXRpYyBpbnQgZ2V0X2Nv bXBsZXRpb25zKFVOVVNFRChjaGFyICpjb21tYW5kKSwgVU5VU0VEKGNoYXIg Kipjb21wbGV0aW9ucyksDQogICAgVU5VU0VEKGludCBtYXhfY29tcGxldGlv bnMpKQ0Kew0KICAgIHJldHVybiAwOw0KfQ0KI2VuZGlmDQpzdGF0aWMgdm9p ZCBjbGVhcl9saW5lKGludCBzb2NrZmQsIGNoYXIgKmNtZCwgaW50IGwsIGlu dCBjdXJzb3IpDQp7DQogICAgaW50IGk7DQogICAgaWYgKGN1cnNvciA8IGwp DQoJZm9yIChpID0gMDsgaSA8IChsIC0gY3Vyc29yKTsgaSsrKQ0KCSAgICB3 cml0ZShzb2NrZmQsICIgIiwgMSk7DQoNCiAgICBmb3IgKGkgPSAwOyBpIDwg bDsgaSsrKQ0KCWNtZFtpXSA9ICdcYic7DQoNCiAgICBmb3IgKDsgaSA8IGwg KiAyOyBpKyspDQoJY21kW2ldID0gJyAnOw0KDQogICAgZm9yICg7IGkgPCBs ICogMzsgaSsrKQ0KCWNtZFtpXSA9ICdcYic7DQoNCiAgICB3cml0ZShzb2Nr ZmQsIGNtZCwgaSk7DQogICAgbWVtc2V0KGNtZCwgMCwgaSk7DQogICAgbCA9 IGN1cnNvciA9IDA7DQp9DQoNCnZvaWQgY2xpX3JlcHJvbXB0KHN0cnVjdCBj bGlfZGVmICpjbGkpDQp7DQogICAgY2xpLT5zaG93cHJvbXB0ID0gMTsNCn0N Cg0Kdm9pZCBjbGlfcmVndWxhcihzdHJ1Y3QgY2xpX2RlZiAqY2xpLCBpbnQg KCpjYWxsYmFjaykoc3RydWN0IGNsaV9kZWYgKmNsaSkpDQp7DQogICAgY2xp LT5yZWd1bGFyX2NhbGxiYWNrID0gY2FsbGJhY2s7DQp9DQoNCiNkZWZpbmUg REVTX1BSRUZJWCAie2NyeXB0fSIJLyogdG8gZGlzdGluZ3Vpc2ggY2xlYXIg dGV4dCBmcm9tIERFUyBjcnlwdGVkICovDQojZGVmaW5lIE1ENV9QUkVGSVgg IiQxJCINCg0Kc3RhdGljIGludCBwYXNzX21hdGNoZXMoY2hhciAqcGFzcywg Y2hhciAqdHJ5KQ0Kew0KICAgIGludCBkZXM7DQogICAgaWYgKChkZXMgPSAh c3RybmNhc2VjbXAocGFzcywgREVTX1BSRUZJWCwgc2l6ZW9mKERFU19QUkVG SVgpLTEpKSkNCglwYXNzICs9IHNpemVvZihERVNfUFJFRklYKS0xOw0KDQog ICAgaWYgKGRlcyB8fCAhc3RybmNtcChwYXNzLCBNRDVfUFJFRklYLCBzaXpl b2YoTUQ1X1BSRUZJWCktMSkpDQovLwl0cnkgPSBjcnlwdCh0cnksIHBhc3Mp Ow0KIAkJOw0KDQogICAgcmV0dXJuICFzdHJjbXAocGFzcywgdHJ5KTsNCn0N Cg0KI2RlZmluZSBDVFJMKGMpIChjIC0gJ0AnKQ0KDQpzdGF0aWMgaW50IHNo b3dfcHJvbXB0KHN0cnVjdCBjbGlfZGVmICpjbGksIGludCBzb2NrZmQpDQp7 DQogICAgaW50IGxlbiA9IDA7DQoNCiAgICBpZiAoY2xpLT5ob3N0bmFtZSkN CglsZW4gKz0gd3JpdGUoc29ja2ZkLCBjbGktPmhvc3RuYW1lLCBzdHJsZW4o Y2xpLT5ob3N0bmFtZSkpOw0KDQogICAgaWYgKGNsaS0+bW9kZXN0cmluZykN CglsZW4gKz0gd3JpdGUoc29ja2ZkLCBjbGktPm1vZGVzdHJpbmcsIHN0cmxl bihjbGktPm1vZGVzdHJpbmcpKTsNCg0KICAgIHJldHVybiBsZW4gKyB3cml0 ZShzb2NrZmQsIGNsaS0+cHJvbXB0Y2hhciwgc3RybGVuKGNsaS0+cHJvbXB0 Y2hhcikpOw0KfQ0KDQpleHRlcm4gaW50IF9mZF9maWxldHlwZSAoaW50IGZk KTsNCg0KaW50IGNsaV9sb29wKHN0cnVjdCBjbGlfZGVmICpjbGksIGludCBz b2NrZmQpDQp7DQogICAgaW50IG47DQogICAgdW5zaWduZWQgY2hhciBjOw0K ICAgIGNoYXIgKmNtZCA9IDA7DQogICAgY2hhciAqb2xkY21kID0gMDsNCiAg ICBpbnQgbDsNCiAgICBpbnQgb2xkbCA9IDA7DQogICAgaW50IGlzX3RlbG5l dF9vcHRpb24gPSAwOw0KICAgIGludCBza2lwID0gMDsNCiAgICBpbnQgZXNj ID0gMDsNCiAgICBpbnQgY3Vyc29yID0gMDsNCiAgICBpbnQgaGlzdF9zeiA9 IDA7DQogICAgY2hhciAqdXNlcm5hbWUgPSAwOw0KICAgIGNoYXIgKnBhc3N3 b3JkID0gMDsNCg0KICAgIGNoYXIgKm5lZ290aWF0ZSA9DQoJIlx4RkZceEZC XHgwMyINCgkiXHhGRlx4RkJceDAxIg0KCSJceEZGXHhGRFx4MDMiDQoJIlx4 RkZceEZEXHgwMSI7DQoNCiAgICBjbGktPnN0YXRlID0gU1RBVEVfTE9HSU47 DQoNCiAgICBtZW1zZXQoY2xpLT5oaXN0b3J5LCAwLCBNQVhfSElTVE9SWSk7 DQogICAgaWYgKF9mZF9maWxldHlwZSAoc29ja2ZkKT09IDIpICAvKkNZR19G SUxFX1RZUEVfU09DS0VUCSAgMiwgIGNvbW11bmljYXRpb25zIGVuZHBvaW50 ICovDQogICAgew0KCXdyaXRlKHNvY2tmZCwgbmVnb3RpYXRlLCBzdHJsZW4o bmVnb3RpYXRlKSk7DQogICAgfQ0KICAgIGlmICgoY21kID0gbWFsbG9jKDQw OTYpKSA9PSAwKQ0KCXJldHVybiBDTElfRVJST1I7DQoNCiAgICBpZiAoIShj bGktPmNsaWVudCA9IGZkb3Blbihzb2NrZmQsICJ3KyIpKSkNCglyZXR1cm4g Q0xJX0VSUk9SOw0KDQoNCiAgICBzZXRidWYoY2xpLT5jbGllbnQsIDApOw0K CQ0KICAgIGlmIChjbGktPmJhbm5lcikNCgljbGlfZXJyb3IoY2xpLCAiJXMi LCBjbGktPmJhbm5lcik7DQoNCiAgICAvKiBzdGFydCBvZmYgaW4gdW5wcml2 aWxlZ2VkIG1vZGUgKi8NCiAgICBjbGlfc2V0X3ByaXZpbGVnZShjbGksIFBS SVZJTEVHRV9VTlBSSVZJTEVHRUQpOw0KICAgIGNsaV9zZXRfY29uZmlnbW9k ZShjbGksIE1PREVfRVhFQywgMCk7DQoNCiAgICAvKiBubyBhdXRoIHJlcXVp cmVkPyAqLw0KICAgIGlmICghY2xpLT51c2VycyAmJiAhY2xpLT5hdXRoX2Nh bGxiYWNrKQ0KCWNsaS0+c3RhdGUgPSBTVEFURV9OT1JNQUw7DQoNCiAgICB3 aGlsZSAoMSkNCiAgICB7DQoJaW50IGhpc3QgPSAtMTsNCglpbnQgbGFzdGNo YXIgPSAwOw0KCXN0cnVjdCB0aW1ldmFsIHRtOw0KDQoJY2xpLT5zaG93cHJv bXB0ID0gMTsNCg0KCWlmIChvbGRjbWQpDQoJew0KCSAgICBsID0gY3Vyc29y ID0gb2xkbDsNCgkgICAgb2xkY21kW2xdID0gMDsNCgkgICAgY2xpLT5zaG93 cHJvbXB0ID0gMTsNCgkgICAgb2xkY21kID0gMDsNCgkgICAgb2xkbCA9IDA7 DQoJfQ0KCWVsc2UNCgl7DQoJICAgIG1lbXNldChjbWQsIDAsIDQwOTYpOw0K CSAgICBsID0gMDsNCgkgICAgY3Vyc29yID0gMDsNCgl9DQoNCgl0bS50dl9z ZWMgPSAxOw0KCXRtLnR2X3VzZWMgPSAwOw0KDQoJd2hpbGUgKDEpDQoJew0K CSAgICBpbnQgc3I7DQoJICAgIGZkX3NldCByOw0KCSAgICBpZiAoY2xpLT5z aG93cHJvbXB0KQ0KCSAgICB7DQoJCWlmIChjbGktPnN0YXRlICE9IFNUQVRF X1BBU1NXT1JEICYmDQoJCSAgICBjbGktPnN0YXRlICE9IFNUQVRFX0VOQUJM RV9QQVNTV09SRCkNCgkJICAgIHdyaXRlKHNvY2tmZCwgIlxyXG4iLCAyKTsN Cg0KCQlzd2l0Y2ggKGNsaS0+c3RhdGUpDQoJCXsNCgkJICAgIGNhc2UgU1RB VEVfTE9HSU46DQoJCQl3cml0ZShzb2NrZmQsICJVc2VybmFtZTogIiwgc3Ry bGVuKCJVc2VybmFtZTogIikpOw0KCQkJYnJlYWs7DQoNCgkJICAgIGNhc2Ug U1RBVEVfUEFTU1dPUkQ6DQoJCQl3cml0ZShzb2NrZmQsICJQYXNzd29yZDog Iiwgc3RybGVuKCJQYXNzd29yZDogIikpOw0KCQkJYnJlYWs7DQoNCgkJICAg IGNhc2UgU1RBVEVfTk9STUFMOg0KCQkgICAgY2FzZSBTVEFURV9FTkFCTEU6 DQoJCQlzaG93X3Byb21wdChjbGksIHNvY2tmZCk7DQoJCQl3cml0ZShzb2Nr ZmQsIGNtZCwgbCk7DQoJCQlpZiAoY3Vyc29yIDwgbCkNCgkJCXsNCgkJCSAg ICBpbnQgbiA9IGwgLSBjdXJzb3I7DQoJCQkgICAgd2hpbGUgKG4tLSkNCgkJ CQl3cml0ZShzb2NrZmQsICJcYiIsIDEpOw0KCQkJfQ0KDQoJCQlicmVhazsN Cg0KCQkgICAgY2FzZSBTVEFURV9FTkFCTEVfUEFTU1dPUkQ6DQoJCQl3cml0 ZShzb2NrZmQsICJQYXNzd29yZDogIiwgc3RybGVuKCJQYXNzd29yZDogIikp Ow0KCQkJYnJlYWs7DQoNCgkJfQ0KDQoJCWNsaS0+c2hvd3Byb21wdCA9IDA7 DQoJICAgIH0NCg0KCSAgICBpZiAoX2ZkX2ZpbGV0eXBlIChzb2NrZmQpPT0g MikgIC8qQ1lHX0ZJTEVfVFlQRV9TT0NLRVQJICAyLCAgY29tbXVuaWNhdGlv bnMgZW5kcG9pbnQgKi8NCgkgICAgew0KCQkgICAgRkRfWkVSTygmcik7DQoJ CSAgICBGRF9TRVQoc29ja2ZkLCAmcik7DQoNCgkJICAgIGlmICgoc3IgPSBz ZWxlY3Qoc29ja2ZkICsgMSwgJnIsIDAsIDAsICZ0bSkpIDwgMCkNCgkJICAg IHsNCgkJCS8qIHNlbGVjdCBlcnJvciAqLw0KCQkJaWYgKGVycm5vID09IEVJ TlRSKQ0KCQkJICAgIGNvbnRpbnVlOw0KDQoJCQlwZXJyb3IoInJlYWQiKTsN CgkJCWwgPSAtMTsNCgkJCWJyZWFrOw0KCQkgICAgfQ0KDQoJCSAgICBpZiAo c3IgPT0gMCkNCgkJICAgIHsNCgkJCS8qIHRpbWVvdXQgZXZlcnkgc2Vjb25k ICovDQoJCQlpZiAoY2xpLT5yZWd1bGFyX2NhbGxiYWNrICYmDQoJCQkgICAg Y2xpLT5yZWd1bGFyX2NhbGxiYWNrKGNsaSkgIT0gQ0xJX09LKQ0KCQkJICAg IGJyZWFrOw0KDQoJCQl0bS50dl9zZWMgPSAxOw0KCQkJdG0udHZfdXNlYyA9 IDA7DQoJCQljb250aW51ZTsNCgkJICAgIH0NCgkgICAgfQ0KCSAgICBpZiAo KG4gPSByZWFkKHNvY2tmZCwgJmMsIDEpKSA8IDApDQoJICAgIHsNCgkJaWYg KGVycm5vID09IEVJTlRSKQ0KCQkgICAgY29udGludWU7DQoNCgkJcGVycm9y KCJyZWFkIik7DQoJCWwgPSAtMTsNCgkJYnJlYWs7DQoJICAgIH0NCg0KCSAg ICBpZiAobiA9PSAwKQ0KCSAgICB7DQoJCWwgPSAtMTsNCgkJYnJlYWs7DQoJ ICAgIH0NCg0KCSAgICBpZiAoc2tpcCkNCgkgICAgew0KCQlza2lwLS07DQoJ CWNvbnRpbnVlOw0KCSAgICB9DQoNCgkgICAgaWYgKGMgPT0gMjU1ICYmICFp c190ZWxuZXRfb3B0aW9uKQ0KCSAgICB7DQoJCWlzX3RlbG5ldF9vcHRpb24r KzsNCgkJY29udGludWU7DQoJICAgIH0NCg0KCSAgICBpZiAoaXNfdGVsbmV0 X29wdGlvbikNCgkgICAgew0KCQlpZiAoYyA+PSAyNTEgJiYgYyA8PSAyNTQp DQoJCXsNCgkJICAgIGlzX3RlbG5ldF9vcHRpb24gPSBjOw0KCQkgICAgY29u dGludWU7DQoJCX0NCg0KCQlpZiAoYyAhPSAyNTUpDQoJCXsNCgkJICAgIGlz X3RlbG5ldF9vcHRpb24gPSAwOw0KCQkgICAgY29udGludWU7DQoJCX0NCg0K CQlpc190ZWxuZXRfb3B0aW9uID0gMDsNCgkgICAgfQ0KDQoJICAgIC8qIGhh bmRsZSBBTlNJIGFycm93cyAqLw0KCSAgICBpZiAoZXNjKQ0KCSAgICB7DQoJ CWlmIChlc2MgPT0gJ1snKQ0KCQl7DQoJCSAgICAvKiByZW1hcCB0byByZWFk bGluZSBjb250cm9sIGNvZGVzICovDQoJCSAgICBzd2l0Y2ggKGMpDQoJCSAg ICB7DQoJCQljYXNlICdBJzogLyogVXAgKi8NCgkJCSAgICBjID0gQ1RSTCgn UCcpOw0KCQkJICAgIGJyZWFrOw0KDQoJCQljYXNlICdCJzogLyogRG93biAq Lw0KCQkJICAgIGMgPSBDVFJMKCdOJyk7DQoJCQkgICAgYnJlYWs7DQoNCgkJ CWNhc2UgJ0MnOiAvKiBSaWdodCAqLw0KCQkJICAgIGMgPSBDVFJMKCdGJyk7 DQoJCQkgICAgYnJlYWs7DQoNCgkJCWNhc2UgJ0QnOiAvKiBMZWZ0ICovDQoJ CQkgICAgYyA9IENUUkwoJ0InKTsNCgkJCSAgICBicmVhazsNCg0KCQkJZGVm YXVsdDoNCgkJCSAgICBjID0gMDsNCgkJICAgIH0NCg0KCQkgICAgZXNjID0g MDsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJICAgIGVzYyA9IChjID09ICdbJykg PyBjIDogMDsNCgkJICAgIGNvbnRpbnVlOw0KCQl9DQoJICAgIH0NCg0KCSAg ICBpZiAoYyA9PSAwKQ0KCQljb250aW51ZTsNCg0KCSAgICBpZiAoYyA9PSAn XG4nKQ0KCQljb250aW51ZTsNCg0KCSAgICBpZiAoYyA9PSAnXHInKQ0KCSAg ICB7DQoJCWlmIChjbGktPnN0YXRlICE9IFNUQVRFX1BBU1NXT1JEICYmDQoJ CSAgICBjbGktPnN0YXRlICE9IFNUQVRFX0VOQUJMRV9QQVNTV09SRCkNCgkJ ICAgIHdyaXRlKHNvY2tmZCwgIlxyXG4iLCAyKTsNCg0KCQlicmVhazsNCgkg ICAgfQ0KDQoJICAgIGlmIChjID09IDI3KQ0KCSAgICB7DQoJCWVzYyA9IDE7 DQoJCWNvbnRpbnVlOw0KCSAgICB9DQoNCgkgICAgaWYgKGMgPT0gQ1RSTCgn QycpKQ0KCSAgICB7DQoJCXdyaXRlKHNvY2tmZCwgIlxhIiwgMSk7DQoJCWNv bnRpbnVlOw0KCSAgICB9DQoNCgkgICAgLyogYmFjayB3b3JkLCBiYWNrc3Bh Y2UvZGVsZXRlICovDQoJICAgIGlmIChjID09IENUUkwoJ1cnKSB8fCBjID09 IENUUkwoJ0gnKSB8fCBjID09IDB4N2YpDQoJICAgIHsNCgkJaW50IGJhY2sg PSAwOw0KDQoJCWlmIChjID09IENUUkwoJ1cnKSkgLyogd29yZCAqLw0KCQl7 DQoJCSAgICBpbnQgbmMgPSBjdXJzb3I7DQoNCgkJICAgIGlmIChsID09IDAg fHwgY3Vyc29yID09IDApDQoJCQljb250aW51ZTsNCg0KCQkgICAgd2hpbGUg KG5jICYmIGNtZFtuYyAtIDFdID09ICcgJykNCgkJICAgIHsNCgkJCW5jLS07 DQoJCQliYWNrKys7DQoJCSAgICB9DQoNCgkJICAgIHdoaWxlIChuYyAmJiBj bWRbbmMgLSAxXSAhPSAnICcpDQoJCSAgICB7DQoJCQluYy0tOw0KCQkJYmFj aysrOw0KCQkgICAgfQ0KCQl9DQoJCWVsc2UgLyogY2hhciAqLw0KCQl7DQoJ CSAgICBpZiAobCA9PSAwIHx8IGN1cnNvciA9PSAwKQ0KCQkgICAgew0KCQkJ d3JpdGUoc29ja2ZkLCAiXGEiLCAxKTsNCgkJCWNvbnRpbnVlOw0KCQkgICAg fQ0KDQoJCSAgICBiYWNrID0gMTsNCgkJfQ0KDQoJCWlmIChiYWNrKQ0KCQl7 DQoJCSAgICB3aGlsZSAoYmFjay0tKQ0KCQkgICAgew0KCQkJaWYgKGwgPT0g Y3Vyc29yKQ0KCQkJew0KCQkJICAgIGNtZFstLWN1cnNvcl0gPSAwOw0KCQkJ ICAgIGlmIChjbGktPnN0YXRlICE9IFNUQVRFX1BBU1NXT1JEICYmDQoJCQkJ Y2xpLT5zdGF0ZSAhPSBTVEFURV9FTkFCTEVfUEFTU1dPUkQpDQoJCQkJd3Jp dGUoc29ja2ZkLCAiXGIgXGIiLCAzKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsN CgkJCSAgICBpbnQgaTsNCgkJCSAgICBjdXJzb3ItLTsNCgkJCSAgICBpZiAo Y2xpLT5zdGF0ZSAhPSBTVEFURV9QQVNTV09SRCAmJg0KCQkJCWNsaS0+c3Rh dGUgIT0gU1RBVEVfRU5BQkxFX1BBU1NXT1JEKQ0KCQkJICAgIHsNCgkJCQlp bnQgbGVuOw0KCQkJCWZvciAoaSA9IGN1cnNvcjsgaSA8PSBsOyBpKyspDQoJ CQkJICAgIGNtZFtpXSA9IGNtZFtpKzFdOw0KDQoJCQkJbGVuID0gc3RybGVu KGNtZCArIGN1cnNvcik7DQoJCQkJd3JpdGUoc29ja2ZkLCAiXGIiLCAxKTsN CgkJCQl3cml0ZShzb2NrZmQsIGNtZCArIGN1cnNvciwgbGVuKTsNCgkJCQl3 cml0ZShzb2NrZmQsICIgIiwgMSk7DQoJCQkJZm9yIChpID0gMDsgaSA8PSBs ZW47IGkrKykNCgkJCQkgICAgd3JpdGUoc29ja2ZkLCAiXGIiLCAxKTsNCgkJ CSAgICB9DQoJCQl9DQoNCgkJCWwtLTsNCgkJICAgIH0NCg0KCQkgICAgY29u dGludWU7DQoJCX0NCgkgICAgfQ0KDQoJICAgIC8qIHJlZHJhdyAqLw0KCSAg ICBpZiAoYyA9PSBDVFJMKCdMJykpDQoJICAgIHsNCgkJaW50IGk7DQoJCWlu dCBjdXJzb3JiYWNrID0gbCAtIGN1cnNvcjsNCg0KCQlpZiAoY2xpLT5zdGF0 ZSA9PSBTVEFURV9QQVNTV09SRCB8fA0KCQkgICAgY2xpLT5zdGF0ZSA9PSBT VEFURV9FTkFCTEVfUEFTU1dPUkQpDQoJCSAgICBjb250aW51ZTsNCg0KCQl3 cml0ZShzb2NrZmQsICJcclxuIiwgMik7DQoJCXNob3dfcHJvbXB0KGNsaSwg c29ja2ZkKTsNCgkJd3JpdGUoc29ja2ZkLCBjbWQsIGwpOw0KDQoJCWZvciAo aSA9IDA7IGkgPCBjdXJzb3JiYWNrOyBpKyspDQoJCSAgICB3cml0ZShzb2Nr ZmQsICJcYiIsIDEpOw0KDQoJCWNvbnRpbnVlOw0KCSAgICB9DQoNCgkgICAg LyogY2xlYXIgbGluZSAqLw0KCSAgICBpZiAoYyA9PSBDVFJMKCdVJykpDQoJ ICAgIHsNCgkJaWYgKGNsaS0+c3RhdGUgPT0gU1RBVEVfUEFTU1dPUkQgfHwN CgkJICAgIGNsaS0+c3RhdGUgPT0gU1RBVEVfRU5BQkxFX1BBU1NXT1JEKQ0K CQkgICAgbWVtc2V0KGNtZCwgMCwgbCk7DQoJCWVsc2UNCgkJICAgIGNsZWFy X2xpbmUoc29ja2ZkLCBjbWQsIGwsIGN1cnNvcik7DQoNCgkJbCA9IGN1cnNv ciA9IDA7DQoJCWNvbnRpbnVlOw0KCSAgICB9DQoNCgkgICAgLyoga2lsbCB0 byBFT0wgKi8NCgkgICAgaWYgKGMgPT0gQ1RSTCgnSycpKQ0KCSAgICB7DQoJ CWlmIChjdXJzb3IgPT0gbCkNCgkJICAgIGNvbnRpbnVlOw0KDQoJCWlmIChj bGktPnN0YXRlICE9IFNUQVRFX1BBU1NXT1JEICYmDQoJCSAgICBjbGktPnN0 YXRlICE9IFNUQVRFX0VOQUJMRV9QQVNTV09SRCkNCgkJew0KCQkgICAgaW50 IGM7DQoJCSAgICBmb3IgKGMgPSBjdXJzb3I7IGMgPCBsOyBjKyspDQoJCQl3 cml0ZShzb2NrZmQsICIgIiwgMSk7DQoNCgkJICAgIGZvciAoYyA9IGN1cnNv cjsgYyA8IGw7IGMrKykNCgkJCXdyaXRlKHNvY2tmZCwgIlxiIiwgMSk7DQoJ CX0NCg0KCQltZW1zZXQoY21kICsgY3Vyc29yLCAwLCBsIC0gY3Vyc29yKTsN CgkJbCA9IGN1cnNvcjsNCgkJY29udGludWU7DQoJICAgIH0NCg0KCSAgICAv KiBFT1QgKi8NCgkgICAgaWYgKGMgPT0gQ1RSTCgnRCcpKQ0KCSAgICB7DQoJ CWlmIChjbGktPnN0YXRlID09IFNUQVRFX1BBU1NXT1JEIHx8DQoJCSAgICBj bGktPnN0YXRlID09IFNUQVRFX0VOQUJMRV9QQVNTV09SRCkNCgkJICAgIGJy ZWFrOw0KDQoJCWlmIChsKQ0KCQkgICAgY29udGludWU7DQoNCgkJc3RyY3B5 KGNtZCwgInF1aXQiKTsNCgkJbCA9IGN1cnNvciA9IHN0cmxlbihjbWQpOw0K CQl3cml0ZShzb2NrZmQsICJxdWl0XHJcbiIsIGwgKyAyKTsNCgkJYnJlYWs7 DQoJICAgIH0NCg0KCSAgICAvKiBkaXNhYmxlICovDQoJICAgIGlmIChjID09 IENUUkwoJ1onKSkNCgkgICAgew0KCQlpZiAoY2xpLT5tb2RlICE9IE1PREVf RVhFQykNCgkJew0KCQkgICAgY2xlYXJfbGluZShzb2NrZmQsIGNtZCwgbCwg Y3Vyc29yKTsNCgkJICAgIGNsaV9zZXRfY29uZmlnbW9kZShjbGksIE1PREVf RVhFQywgMCk7DQoJCSAgICBjbGktPnNob3dwcm9tcHQgPSAxOw0KCQl9DQoN CgkJY29udGludWU7DQoJICAgIH0NCg0KCSAgICAvKiBUQUIgY29tcGxldGlv biAqLw0KCSAgICBpZiAoYyA9PSBDVFJMKCdJJykpDQoJICAgIHsNCgkJY2hh ciAqY29tcGxldGlvbnNbMTI4XTsNCgkJaW50IG51bV9jb21wbGV0aW9ucyA9 IDA7DQoNCgkJaWYgKGNsaS0+c3RhdGUgPT0gU1RBVEVfUEFTU1dPUkQgfHwN CgkJICAgIGNsaS0+c3RhdGUgPT0gU1RBVEVfRU5BQkxFX1BBU1NXT1JEKQ0K CQkgICAgY29udGludWU7DQoNCgkJaWYgKGN1cnNvciAhPSBsKQ0KCQkgICAg Y29udGludWU7DQoNCgkJaWYgKGwgPiAwKQ0KCQkgICAgbnVtX2NvbXBsZXRp b25zID0gZ2V0X2NvbXBsZXRpb25zKGNsaSwgY21kLCBjb21wbGV0aW9ucywg MTI4KTsNCg0KCQlpZiAobnVtX2NvbXBsZXRpb25zID09IDApDQoJCXsNCgkJ ICAgIHdyaXRlKHNvY2tmZCwgIlxhIiwgMSk7DQoJCX0NCgkJZWxzZSBpZiAo bnVtX2NvbXBsZXRpb25zID09IDEpDQoJCXsNCgkJCWlmIChsYXN0Y2hhciAh PSBDVFJMKCdJJykpDQoJCQkJew0KCQkJCSAgICAvKiBzaW5nbGUgY29tcGxl dGlvbiAqLw0KCQkJCSAgICBpbnQgaTsNCgkJCQkgICAgZm9yIChpID0gbDsg aSA+IDA7IGktLSwgY3Vyc29yLS0pDQoJCQkJICAgIHsNCgkJCQkJd3JpdGUo c29ja2ZkLCAiXGIiLCAxKTsNCgkJCQkJaWYgKGkgPT0gJyAnKSBicmVhazsN CgkJCQkgICAgfQ0KDQoJCQkJICAgIHN0cmNweSgoY21kICsgaSksIGNvbXBs ZXRpb25zWzBdKTsNCgkJCQkgICAgbCArPSBzdHJsZW4oY29tcGxldGlvbnNb MF0pOw0KCQkJCSAgICBjdXJzb3IgPSBsOw0KCQkJCSAgICB3cml0ZShzb2Nr ZmQsIGNvbXBsZXRpb25zWzBdLCBzdHJsZW4oY29tcGxldGlvbnNbMF0pKTsN Cg0KCQkJCSAgIGxhc3RjaGFyID0gYzsJDQoJCQkJfQkJCQ0KCQl9DQoJCWVs c2UgaWYgKGxhc3RjaGFyID09IENUUkwoJ0knKSkNCgkJew0KCQkgICAgLyog ZG91YmxlIHRhYiAqLw0KCQkgICAgaW50IGk7DQoJCSAgICB3cml0ZShzb2Nr ZmQsICJcclxuIiwgMik7DQoJCSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2Nv bXBsZXRpb25zOyBpKyspDQoJCSAgICB7DQoJCQl3cml0ZShzb2NrZmQsIGNv bXBsZXRpb25zW2ldLCBzdHJsZW4oY29tcGxldGlvbnNbaV0pKTsNCgkJCWlm IChpICUgNCA9PSAzKQ0KCQkJICAgIHdyaXRlKHNvY2tmZCwgIlxyXG4iLCAy KTsNCgkJCWVsc2UNCgkJCSAgICB3cml0ZShzb2NrZmQsICIJCSIsIDEpOw0K CQkgICAgfQ0KDQoJCSAgICBpZiAoaSAlIDQgIT0gMykNCgkJCXdyaXRlKHNv Y2tmZCwgIlxyXG4iLCAyKTsNCg0KCQkgICAgY2xpLT5zaG93cHJvbXB0ID0g MTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJICAgIC8qIG1vcmUgdGhhbiBvbmUg Y29tcGxldGlvbiAqLw0KCQkgICAgbGFzdGNoYXIgPSBjOw0KCQkgICAgd3Jp dGUoc29ja2ZkLCAiXGEiLCAxKTsNCgkJfQ0KCQljb250aW51ZTsNCgkgICAg fQ0KDQoJICAgIC8qIGhpc3RvcnkgKi8NCgkgICAgaWYgKGMgPT0gQ1RSTCgn UCcpIHx8IGMgPT0gQ1RSTCgnTicpKQ0KCSAgICB7DQoJCWlmIChjbGktPnN0 YXRlID09IFNUQVRFX1BBU1NXT1JEIHx8DQoJCSAgICBjbGktPnN0YXRlID09 IFNUQVRFX0VOQUJMRV9QQVNTV09SRCkNCgkJICAgIGNvbnRpbnVlOw0KDQoJ CWlmICghaGlzdF9zeikgLyogZW1wdHkgKi8NCgkJICAgIGNvbnRpbnVlOw0K DQoJCWlmIChjID09IENUUkwoJ1AnKSkgLyogVXAgKi8NCgkJew0KCQkgICAg aWYgKGhpc3QgPT0gLTEgLyogaW5pdGFsICovIHx8IC0taGlzdCA8IDAgLyog d3JhcCAqLykgDQoJCSAgICAJaGlzdCA9IGhpc3Rfc3ogLSAxOw0KCQl9DQoJ CWVsc2UgLyogRG93biAqLw0KCQl7DQoJCSAgICBpZiAoaGlzdCA9PSAtMSB8 fCArK2hpc3QgPiBoaXN0X3N6IC0gMSkNCgkJICAgIAloaXN0ID0gMDsNCgkJ fQ0KDQoJCS8qIHNob3cgaGlzdG9yeSBpdGVtICovDQoJCWNsZWFyX2xpbmUo c29ja2ZkLCBjbWQsIGwsIGN1cnNvcik7DQoJCW1lbXNldChjbWQsIDAsIDQw OTYpOw0KCQlzdHJuY3B5KGNtZCwgY2xpLT5oaXN0b3J5W2hpc3RdLCA0MDk1 KTsNCgkJbCA9IGN1cnNvciA9IHN0cmxlbihjbWQpOw0KCQl3cml0ZShzb2Nr ZmQsIGNtZCwgbCk7DQoJCWNvbnRpbnVlOw0KCSAgICB9DQoNCgkgICAgLyog bGVmdC9yaWdodCBjdXJzb3IgbW90aW9uICovDQoJICAgIGlmIChjID09IENU UkwoJ0InKSB8fCBjID09IENUUkwoJ0YnKSkNCgkgICAgew0KCQlpZiAoYyA9 PSBDVFJMKCdCJykpIC8qIExlZnQgKi8NCgkJew0KCQkgICAgaWYgKGN1cnNv cikNCgkJICAgIHsNCgkJCWlmIChjbGktPnN0YXRlICE9IFNUQVRFX1BBU1NX T1JEICYmDQoJCQkgICAgY2xpLT5zdGF0ZSAhPSBTVEFURV9FTkFCTEVfUEFT U1dPUkQpDQoJCQkgICAgd3JpdGUoc29ja2ZkLCAiXGIiLCAxKTsNCg0KCQkJ Y3Vyc29yLS07DQoJCSAgICB9DQoJCX0NCgkJZWxzZSAvKiBSaWdodCAqLw0K CQl7DQoJCSAgICBpZiAoY3Vyc29yIDwgbCkNCgkJICAgIHsNCgkJCWlmIChj bGktPnN0YXRlICE9IFNUQVRFX1BBU1NXT1JEICYmDQoJCQkgICAgY2xpLT5z dGF0ZSAhPSBTVEFURV9FTkFCTEVfUEFTU1dPUkQpDQoJCQkgICAgd3JpdGUo c29ja2ZkLCAmY21kW2N1cnNvcl0sIDEpOw0KDQoJCQljdXJzb3IrKzsNCgkJ ICAgIH0NCgkJfQ0KDQoJCWNvbnRpbnVlOw0KCSAgICB9DQoNCgkgICAgLyog c3RhcnQgb2YgbGluZSAqLw0KCSAgICBpZiAoYyA9PSBDVFJMKCdBJykpDQoJ ICAgIHsNCgkJaWYgKGN1cnNvcikNCgkJew0KCQkgICAgaWYgKGNsaS0+c3Rh dGUgIT0gU1RBVEVfUEFTU1dPUkQgJiYNCgkJCWNsaS0+c3RhdGUgIT0gU1RB VEVfRU5BQkxFX1BBU1NXT1JEKQ0KCQkgICAgew0KCQkJd3JpdGUoc29ja2Zk LCAiXHIiLCAxKTsNCgkJCXNob3dfcHJvbXB0KGNsaSwgc29ja2ZkKTsNCgkJ ICAgIH0NCg0KCQkgICAgY3Vyc29yID0gMDsNCgkJfQ0KDQoJCWNvbnRpbnVl Ow0KCSAgICB9DQoNCgkgICAgLyogZW5kIG9mIGxpbmUgKi8NCgkgICAgaWYg KGMgPT0gQ1RSTCgnRScpKQ0KCSAgICB7DQoJCWlmIChjdXJzb3IgPCBsKQ0K CQl7DQoJCSAgICBpZiAoY2xpLT5zdGF0ZSAhPSBTVEFURV9QQVNTV09SRCAm Jg0KCQkJY2xpLT5zdGF0ZSAhPSBTVEFURV9FTkFCTEVfUEFTU1dPUkQpDQoJ CQl3cml0ZShzb2NrZmQsICZjbWRbY3Vyc29yXSwgbCAtIGN1cnNvcik7DQoN CgkJICAgIGN1cnNvciA9IGw7DQoJCX0NCg0KCQljb250aW51ZTsNCgkgICAg fQ0KDQoJICAgIC8qIG5vcm1hbCBjaGFyYWN0ZXIgdHlwZWQgKi8NCgkgICAg aWYgKGN1cnNvciA9PSBsKSAvKiBhcHBlbmQgdG8gZW5kIG9mIGxpbmUgKi8N CgkgICAgew0KCQljbWRbY3Vyc29yXSA9IGM7DQoJCWlmIChsIDwgNDA5NSkN CgkJew0KCQkgICAgbCsrOw0KCQkgICAgY3Vyc29yKys7DQoJCX0NCgkJZWxz ZQ0KCQl7DQoJCSAgICB3cml0ZShzb2NrZmQsICJcYSIsIDEpOw0KCQkgICAg Y29udGludWU7DQoJCX0NCgkgICAgfQ0KCSAgICBlbHNlIC8qIGluc2VydCAq Lw0KCSAgICB7DQoJCWludCBpOw0KCQkvKiBtb3ZlIGV2ZXJ5dGhpbmcgb25l IGNoYXJhY3RlciB0byB0aGUgcmlnaHQgKi8NCgkJaWYgKGwgPj0gNDA5NCkg bC0tOw0KCQlmb3IgKGkgPSBsOyBpID49IGN1cnNvcjsgaS0tKQ0KCQkgICAg Y21kW2kgKyAxXSA9IGNtZFtpXTsNCg0KCQkvKiB3cml0ZSB3aGF0IHdlJ3Zl IGp1c3QgYWRkZWQgKi8NCgkJY21kW2N1cnNvcl0gPSBjOw0KDQoJCXdyaXRl KHNvY2tmZCwgJmNtZFtjdXJzb3JdLCBsIC0gY3Vyc29yICsgMSk7DQoJCWZv ciAoaSA9IDA7IGkgPCAobCAtIGN1cnNvciArIDEpOyBpKyspDQoJCSAgICB3 cml0ZShzb2NrZmQsICJcYiIsIDEpOw0KDQoJCWwrKzsNCgkJY3Vyc29yKys7 DQoJICAgIH0NCg0KCSAgICBpZiAoY2xpLT5zdGF0ZSAhPSBTVEFURV9QQVNT V09SRCAmJg0KCSAgICAJY2xpLT5zdGF0ZSAhPSBTVEFURV9FTkFCTEVfUEFT U1dPUkQpDQoJICAgIHsNCgkJaWYgKGMgPT0gJz8nICYmIGN1cnNvciA9PSBs KQ0KCQl7DQoJCSAgICB3cml0ZShzb2NrZmQsICJcclxuIiwgMik7DQoJCSAg ICBvbGRjbWQgPSBjbWQ7DQoJCSAgICBvbGRsID0gY3Vyc29yID0gbCAtIDE7 DQoJCSAgICBicmVhazsNCgkJfQ0KCQl3cml0ZShzb2NrZmQsICZjLCAxKTsN CgkgICAgfQ0KDQoJICAgIG9sZGNtZCA9IDA7DQoJICAgIG9sZGwgPSAwOw0K CSAgICBsYXN0Y2hhciA9IGM7DQoJfQ0KDQoJaWYgKGwgPCAwKQ0KCSAgICBi cmVhazsNCg0KCWlmICghc3RyY2FzZWNtcChjbWQsICJxdWl0IikpDQoJICAg IGJyZWFrOw0KDQoJaWYgKGNsaS0+c3RhdGUgPT0gU1RBVEVfTE9HSU4pDQoJ ew0KCSAgICBpZiAobCA9PSAwKQ0KCQljb250aW51ZTsNCg0KCSAgICAvKiBy ZXF1aXJlIGxvZ2luICovDQoJICAgIGZyZWUodXNlcm5hbWUpOw0KCSAgICB1 c2VybmFtZSA9IHN0cmR1cChjbWQpOw0KCSAgICBjbGktPnN0YXRlID0gU1RB VEVfUEFTU1dPUkQ7DQoJICAgIGNsaS0+c2hvd3Byb21wdCA9IDE7DQoJfQ0K CWVsc2UgaWYgKGNsaS0+c3RhdGUgPT0gU1RBVEVfUEFTU1dPUkQpDQoJew0K CSAgICAvKiByZXF1aXJlIHBhc3N3b3JkICovDQoJICAgIGludCBhbGxvd2Vk ID0gMDsNCg0KCSAgICBmcmVlKHBhc3N3b3JkKTsNCgkgICAgcGFzc3dvcmQg PSBzdHJkdXAoY21kKTsNCgkgICAgaWYgKGNsaS0+YXV0aF9jYWxsYmFjayAm JiBjbGktPmF1dGhfY2FsbGJhY2sodXNlcm5hbWUsIHBhc3N3b3JkKSA9PSBD TElfT0spDQoJCWFsbG93ZWQrKzsNCg0KCSAgICBpZiAoIWFsbG93ZWQpDQoJ ICAgIHsNCgkJc3RydWN0IHVucCAqdTsNCgkJZm9yICh1ID0gY2xpLT51c2Vy czsgdTsgdSA9IHUtPm5leHQpDQoJCXsNCgkJICAgIGlmICghc3RyY21wKHUt PnVzZXJuYW1lLCB1c2VybmFtZSkgJiYNCgkJCXBhc3NfbWF0Y2hlcyh1LT5w YXNzd29yZCwgcGFzc3dvcmQpKQ0KCQkgICAgew0KCQkJYWxsb3dlZCsrOw0K CQkJYnJlYWs7DQoJCSAgICB9DQoJCX0NCgkgICAgfQ0KDQoJICAgIGlmIChh bGxvd2VkKQ0KCSAgICB7DQoJCWNsaV9lcnJvcihjbGksICIiKTsNCgkJY2xp LT5zdGF0ZSA9IFNUQVRFX05PUk1BTDsNCgkgICAgfQ0KCSAgICBlbHNlDQoJ ICAgIHsNCgkJY2xpX2Vycm9yKGNsaSwgIlxuXG5BY2Nlc3MgZGVuaWVkIik7 DQoJCWZyZWVfeih1c2VybmFtZSk7DQoJCWZyZWVfeihwYXNzd29yZCk7DQoJ CWNsaS0+c3RhdGUgPSBTVEFURV9MT0dJTjsNCgkgICAgfQ0KDQoJICAgIGNs aS0+c2hvd3Byb21wdCA9IDE7DQoJfQ0KCWVsc2UgaWYgKGNsaS0+c3RhdGUg PT0gU1RBVEVfRU5BQkxFX1BBU1NXT1JEKQ0KCXsNCgkgICAgaW50IGFsbG93 ZWQgPSAwOw0KCSAgICBpZiAoY2xpLT5lbmFibGVfcGFzc3dvcmQpDQoJICAg IHsNCgkJLyogY2hlY2sgc3RvcmVkIHN0YXRpYyBlbmFibGUgcGFzc3dvcmQg Ki8NCgkJaWYgKHBhc3NfbWF0Y2hlcyhjbGktPmVuYWJsZV9wYXNzd29yZCwg Y21kKSkNCgkJICAgIGFsbG93ZWQrKzsNCgkgICAgfQ0KDQoJICAgIGlmICgh YWxsb3dlZCAmJiBjbGktPmVuYWJsZV9jYWxsYmFjaykNCgkgICAgew0KCQkv KiBjaGVjayBjYWxsYmFjayAqLw0KCQlpZiAoY2xpLT5lbmFibGVfY2FsbGJh Y2soY21kKSkNCgkJICAgIGFsbG93ZWQrKzsNCgkgICAgfQ0KDQoJICAgIGlm IChhbGxvd2VkKQ0KCSAgICB7DQoJCWNsaS0+c3RhdGUgPSBTVEFURV9FTkFC TEU7DQoJCWNsaV9zZXRfcHJpdmlsZWdlKGNsaSwgUFJJVklMRUdFX1BSSVZJ TEVHRUQpOw0KCSAgICB9DQoJICAgIGVsc2UNCgkgICAgew0KCQljbGlfZXJy b3IoY2xpLCAiXG5cbkFjY2VzcyBkZW5pZWQiKTsNCgkJY2xpLT5zdGF0ZSA9 IFNUQVRFX05PUk1BTDsNCgkgICAgfQ0KCX0NCgllbHNlDQoJew0KCSAgICBp ZiAoIWwpDQoJICAgIAljb250aW51ZTsNCg0KCSAgICBpZiAoY21kW2wgLSAx XSAhPSAnPycpDQoJICAgIAloaXN0X3N6ID0gYWRkX2hpc3RvcnkoY2xpLCBj bWQpOw0KDQoJICAgIGlmIChydW5fY29tbWFuZChjbGksIGNtZCkgPT0gQ0xJ X1FVSVQpDQoJCWJyZWFrOw0KCX0NCiAgICB9DQoNCiAgICB7DQoJLyogY2xl YW51cCAqLw0KCWludCBpOw0KCWZvciAoaSA9IDA7IGkgPCBNQVhfSElTVE9S WTsgaSsrKQ0KCSAgICBmcmVlX3ooY2xpLT5oaXN0b3J5W2ldKTsNCg0KCWZy ZWUodXNlcm5hbWUpOw0KCWZyZWUocGFzc3dvcmQpOw0KCWZyZWUoY21kKTsN CiAgICB9DQoNCiAgICBmY2xvc2UoY2xpLT5jbGllbnQpOw0KICAgIGNsaS0+ Y2xpZW50ID0gMDsNCiAgICByZXR1cm4gQ0xJX09LOw0KfQ0KDQppbnQgY2xp X2ZpbGUoc3RydWN0IGNsaV9kZWYgKmNsaSwgRklMRSAqZmgsIGludCBwcml2 aWxlZ2UsIGludCBtb2RlKQ0Kew0KICAgIGludCBvbGRwcml2ID0gY2xpX3Nl dF9wcml2aWxlZ2UoY2xpLCBwcml2aWxlZ2UpOw0KICAgIGludCBvbGRtb2Rl ID0gY2xpX3NldF9jb25maWdtb2RlKGNsaSwgbW9kZSwgMCk7DQogICAgY2hh ciBidWZbNDA5Nl07DQoNCiAgICB3aGlsZSAoMSkNCiAgICB7DQoJY2hhciAq cDsNCgljaGFyICpjbWQ7DQoJY2hhciAqZW5kOw0KDQoJaWYgKCFmZ2V0cyhi dWYsIHNpemVvZihidWYpLCBmaCkpDQoJICAgIGJyZWFrOyAvKiBlbmQgb2Yg ZmlsZSAqLw0KDQoJaWYgKChwID0gc3RycGJyayhidWYsICIjIVxyXG4iKSkp DQoJICAgICpwID0gMDsNCg0KCWNtZCA9IGJ1ZjsNCgl3aGlsZSAoaXNzcGFj ZSgqY21kKSkNCgkgICAgY21kKys7DQoNCglpZiAoISpjbWQpDQoJICAgIGNv bnRpbnVlOw0KDQoJZm9yIChwID0gZW5kID0gY21kOyAqcDsgcCsrKQ0KCSAg ICBpZiAoIWlzc3BhY2UoKnApKQ0KCQllbmQgPSBwOw0KDQoJKisrZW5kID0g MDsNCglpZiAoIXN0cmNhc2VjbXAoY21kLCAicXVpdCIpKQ0KCSAgICBicmVh azsNCg0KCWlmIChydW5fY29tbWFuZChjbGksIGNtZCkgPT0gQ0xJX1FVSVQp DQoJICAgIGJyZWFrOw0KICAgIH0NCg0KICAgIGNsaV9zZXRfcHJpdmlsZWdl KGNsaSwgb2xkcHJpdik7DQogICAgY2xpX3NldF9jb25maWdtb2RlKGNsaSwg b2xkbW9kZSwgMCAvKiBkaWRuJ3Qgc2F2ZSBkZXNjICovKTsNCg0KICAgIHJl dHVybiBDTElfT0s7DQp9DQoNCnN0YXRpYyB2b2lkIGRvX3ByaW50KHN0cnVj dCBjbGlfZGVmICpjbGksIGludCBmaWx0ZXIsIGNoYXIgKmZvcm1hdCwgdmFf bGlzdCBhcCkNCnsNCiAgICBjaGFyICoqYnVmID0gJmNsaS0+X3ByaW50X2J1 ZjsNCiAgICBpbnQgKnN6ID0gJmNsaS0+X3ByaW50X2J1ZnN6Ow0KICAgIGNo YXIgKnA7DQogICAgaW50IG47DQoNCiAgICB3aGlsZSAoISpidWYgfHwgKG4g PSB2c25wcmludGYoKmJ1ZiwgKnN6LCBmb3JtYXQsIGFwKSkgPj0gKnN6KQ0K ICAgIHsNCglpZiAoIShwID0gcmVhbGxvYygqYnVmLCAqc3ogKz0gNDA5Nikp KQ0KCXsNCgkgICAgZnJlZV96KCpidWYpOw0KCSAgICAqc3ogPSAwOw0KCSAg ICByZXR1cm47DQoJfQ0KDQoJKmJ1ZiA9IHA7DQogICAgfQ0KDQogICAgaWYg KG4gPCAwKSAvKiB2c25wcmludGYgZmFpbGVkICovDQoJcmV0dXJuOw0KDQog ICAgcCA9ICpidWY7DQogICAgZG8gew0KCWNoYXIgKm5leHQgPSBzdHJjaHIo cCwgJ1xuJyk7DQoJc3RydWN0IGNsaV9maWx0ZXIgKmYgPSBmaWx0ZXIgPyBj bGktPmZpbHRlcnMgOiAwOw0KCWludCBwcmludCA9IDE7DQoNCglpZiAobmV4 dCkNCgkgICAgKm5leHQrKyA9IDA7DQoNCgl3aGlsZSAocHJpbnQgJiYgZikN Cgl7DQoJICAgIHByaW50ID0gKGYtPmZpbHRlcihjbGksIHAsIGYtPmRhdGEp ID09IENMSV9PSyk7DQoJICAgIGYgPSBmLT5uZXh0Ow0KCX0NCg0KCWlmIChw cmludCkNCgl7DQoJICAgIGlmIChjbGktPnByaW50X2NhbGxiYWNrKQ0KCQlj bGktPnByaW50X2NhbGxiYWNrKGNsaSwgcCk7DQoJICAgIGVsc2UgaWYgKGNs aS0+Y2xpZW50KQ0KCQlmcHJpbnRmKGNsaS0+Y2xpZW50LCAiJXNcclxuIiwg cCk7DQoJfQ0KDQoJcCA9IG5leHQ7DQogICAgfSB3aGlsZSAocCk7DQp9DQoN CnZvaWQgY2xpX3ByaW50KHN0cnVjdCBjbGlfZGVmICpjbGksIGNoYXIgKmZv cm1hdCwgLi4uKQ0Kew0KICAgIHZhX2xpc3QgYXA7DQoNCiAgICB2YV9zdGFy dChhcCwgZm9ybWF0KTsNCiAgICBkb19wcmludChjbGksIDEsIGZvcm1hdCwg YXApOw0KICAgIHZhX2VuZChhcCk7DQp9DQoNCnZvaWQgY2xpX2Vycm9yKHN0 cnVjdCBjbGlfZGVmICpjbGksIGNoYXIgKmZvcm1hdCwgLi4uKQ0Kew0KICAg IHZhX2xpc3QgYXA7DQoNCiAgICB2YV9zdGFydChhcCwgZm9ybWF0KTsNCiAg ICBkb19wcmludChjbGksIDAsIGZvcm1hdCwgYXApOw0KICAgIHZhX2VuZChh cCk7DQp9DQoNCnZvaWQgY2xpX3ByaW50X2NhbGxiYWNrKHN0cnVjdCBjbGlf ZGVmICpjbGksDQogICAgdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgY2xpX2Rl ZiAqLCBjaGFyICopKQ0Kew0KICAgIGNsaS0+cHJpbnRfY2FsbGJhY2sgPSBj YWxsYmFjazsNCn0NCg== ------=_Part_241851_8876589.1182750170913 Content-Type: text/plain; charset=us-ascii Content-length: 148 -- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss ------=_Part_241851_8876589.1182750170913--