Subject: Re: bin/34630: GNU sdiff(1) replacement
To: None <gnats-admin@netbsd.org, netbsd-bugs@netbsd.org, unex@linija.org>
From: Mindaugas <unex@linija.org>
List: netbsd-bugs
Date: 09/26/2006 19:35:04
The following reply was made to PR bin/34630; it has been noted by GNATS.
From: Mindaugas <unex@linija.org>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: bin/34630: GNU sdiff(1) replacement
Date: Tue, 26 Sep 2006 22:32:49 +0300
This is a multi-part message in MIME format.
--Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
strtonum.c is added separate.
It is not in our libc.
--
Best regards,
Mindaugas
--Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g
Content-Type: application/octet-stream;
name="common.c"
Content-Disposition: attachment;
filename="common.c"
Content-Transfer-Encoding: base64
LyoJJE5ldEJTRCQJKi8KLyoJJE9wZW5CU0Q6IGNvbW1vbi5jLHYgMS40IDIwMDYvMDUvMjUgMDM6
MjA6MzIgcmF5IEV4cCAkCSovCgovKgogKiBXcml0dGVuIGJ5IFJheW1vbmQgTGFpIDxyYXlAY3l0
aC5uZXQ+LgogKiBQdWJsaWMgZG9tYWluLgogKi8KCiNpbmNsdWRlIDxlcnIuaD4KI2luY2x1ZGUg
PHN0ZGxpYi5oPgojaW5jbHVkZSA8dW5pc3RkLmg+CgojaW5jbHVkZSAiY29tbW9uLmgiCgp2b2lk
CmNsZWFudXAoY29uc3QgY2hhciAqZmlsZW5hbWUpCnsKCWlmICh1bmxpbmsoZmlsZW5hbWUpKQoJ
CWVycigyLCAiY291bGQgbm90IGRlbGV0ZTogJXMiLCBmaWxlbmFtZSk7CglleGl0KDIpOwp9Cg==
--Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g
Content-Type: application/octet-stream;
name="common.h"
Content-Disposition: attachment;
filename="common.h"
Content-Transfer-Encoding: base64
LyoJJE5ldEJTRCQJKi8KLyoJJE9wZW5CU0Q6IGNvbW1vbi5oLHYgMS4yIDIwMDYvMDUvMjUgMDM6
MjA6MzIgcmF5IEV4cCAkCSovCgovKgogKiBXcml0dGVuIGJ5IFJheW1vbmQgTGFpIDxyYXlAY3l0
aC5uZXQ+LgogKiBQdWJsaWMgZG9tYWluLgogKi8KCl9fZGVhZCB2b2lkIGNsZWFudXAoY29uc3Qg
Y2hhciAqKTsKCmxvbmcgbG9uZwpzdHJ0b251bShjb25zdCBjaGFyICpudW1zdHIsIGxvbmcgbG9u
ZyBtaW52YWwsIGxvbmcgbG9uZyBtYXh2YWwsCgljb25zdCBjaGFyICoqZXJyc3RycCk7Cg==
--Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g
Content-Type: application/octet-stream;
name="edit.c"
Content-Disposition: attachment;
filename="edit.c"
Content-Transfer-Encoding: base64
LyoJJE5ldEJTRCQJKi8KLyoJJE9wZW5CU0Q6IGVkaXQuYyx2IDEuMTQgMjAwNi8wNS8yNSAwMzoy
MDozMiByYXkgRXhwICQgKi8KCi8qCiAqIFdyaXR0ZW4gYnkgUmF5bW9uZCBMYWkgPHJheUBjeXRo
Lm5ldD4uCiAqIFB1YmxpYyBkb21haW4uCiAqLwoKI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5j
bHVkZSA8c3lzL3dhaXQuaD4KCiNpbmNsdWRlIDxjdHlwZS5oPgojaW5jbHVkZSA8ZXJyLmg+CiNp
bmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4K
I2luY2x1ZGUgPHVuaXN0ZC5oPgoKI2luY2x1ZGUgImNvbW1vbi5oIgojaW5jbHVkZSAiZXh0ZXJu
LmgiCgpzdGF0aWMgdm9pZCBlZGl0KGNvbnN0IGNoYXIgKik7CgovKgogKiBUYWtlcyB0aGUgbmFt
ZSBvZiBhIGZpbGUgYW5kIG9wZW5zIGl0IHdpdGggYW4gZWRpdG9yLgogKi8Kc3RhdGljIHZvaWQK
ZWRpdChjb25zdCBjaGFyICpmaWxlbmFtZSkKewoJaW50IHN0YXR1czsKCXBpZF90IHBpZDsKCWNv
bnN0IGNoYXIgKmVkaXRvcjsKCgllZGl0b3IgPSBnZXRlbnYoIlZJU1VBTCIpOwoJaWYgKGVkaXRv
ciA9PSBOVUxMKQoJCWVkaXRvciA9IGdldGVudigiRURJVE9SIik7CglpZiAoZWRpdG9yID09IE5V
TEwpCgkJZWRpdG9yID0gInZpIjsKCgkvKiBTdGFydCBlZGl0b3Igb24gdGVtcG9yYXJ5IGZpbGUu
ICovCglzd2l0Y2ggKHBpZCA9IGZvcmsoKSkgewoJY2FzZSAwOgoJCS8qIGNoaWxkICovCgkJZXhl
Y2xwKGVkaXRvciwgZWRpdG9yLCBmaWxlbmFtZSwgKHZvaWQgKilOVUxMKTsKCQl3YXJuKCJjb3Vs
ZCBub3QgZXhlY3V0ZSBlZGl0b3I6ICVzIiwgZWRpdG9yKTsKCQljbGVhbnVwKGZpbGVuYW1lKTsK
CWNhc2UgLTE6CgkJd2FybigiY291bGQgbm90IGZvcmsiKTsKCQljbGVhbnVwKGZpbGVuYW1lKTsK
CX0KCgkvKiBwYXJlbnQgKi8KCS8qIFdhaXQgZm9yIGVkaXRvciB0byBleGl0LiAqLwoJaWYgKHdh
aXRwaWQocGlkLCAmc3RhdHVzLCAwKSA9PSAtMSkgewoJCXdhcm4oIndhaXRwaWQiKTsKCQljbGVh
bnVwKGZpbGVuYW1lKTsKCX0KCgkvKiBDaGVjayB0aGF0IGVkaXRvciB0ZXJtaW5hdGVkIG5vcm1h
bGx5LiAqLwoJaWYgKCFXSUZFWElURUQoc3RhdHVzKSkgewoJCXdhcm4oIiVzIHRlcm1pbmF0ZWQg
YWJub3JtYWxseSIsIGVkaXRvcik7CgkJY2xlYW51cChmaWxlbmFtZSk7Cgl9Cn0KCi8qCiAqIFBh
cnNlIGVkaXQgY29tbWFuZC4gIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KICov
CmludAplcGFyc2UoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICpsZWZ0LCBjb25zdCBjaGFy
ICpyaWdodCkKewoJRklMRSAqZmlsZTsKCXNpemVfdCBucmVhZCwgbndyaXR0ZW47CglpbnQgZmQ7
CgljaGFyICpmaWxlbmFtZTsKCWNoYXIgYnVmW0JVRlNJWl0sICp0ZXh0OwoKCS8qIFNraXAgd2hp
dGVzcGFjZS4gKi8KCXdoaWxlIChpc3NwYWNlKChpbnQpKCpjbWQpKSkKCQkrK2NtZDsKCgl0ZXh0
ID0gTlVMTDsKCXN3aXRjaCAoKmNtZCkgewoJY2FzZSAnXDAnOgoJCS8qIEVkaXQgZW1wdHkgZmls
ZS4gKi8KCQlicmVhazsKCgljYXNlICdiJzoKCQkvKiBCb3RoIHN0cmluZ3MuICovCgkJaWYgKGxl
ZnQgPT0gTlVMTCkKCQkJZ290byBSSUdIVDsKCQlpZiAocmlnaHQgPT0gTlVMTCkKCQkJZ290byBM
RUZUOwoKCQkvKiBOZWl0aGVyIGNvbHVtbiBpcyBibGFuaywgc28gcHJpbnQgYm90aC4gKi8KCQlp
ZiAoYXNwcmludGYoJnRleHQsICIlc1xuJXNcbiIsIGxlZnQsIHJpZ2h0KSA9PSAtMSkKCQkJZXJy
KDIsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5Iik7CgkJYnJlYWs7CgoJY2FzZSAnbCc6CkxF
RlQ6CgkJLyogU2tpcCBpZiB0aGVyZSBpcyBubyBsZWZ0IGNvbHVtbi4gKi8KCQlpZiAobGVmdCA9
PSBOVUxMKQoJCQlicmVhazsKCgkJaWYgKGFzcHJpbnRmKCZ0ZXh0LCAiJXNcbiIsIGxlZnQpID09
IC0xKQoJCQllcnIoMiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkiKTsKCgkJYnJlYWs7CgoJ
Y2FzZSAncic6ClJJR0hUOgoJCS8qIFNraXAgaWYgdGhlcmUgaXMgbm8gcmlnaHQgY29sdW1uLiAq
LwoJCWlmIChyaWdodCA9PSBOVUxMKQoJCQlicmVhazsKCgkJaWYgKGFzcHJpbnRmKCZ0ZXh0LCAi
JXNcbiIsIHJpZ2h0KSA9PSAtMSkKCQkJZXJyKDIsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5
Iik7CgoJCWJyZWFrOwoKCWRlZmF1bHQ6CgkJcmV0dXJuICgtMSk7Cgl9CgoJLyogQ3JlYXRlIHRl
bXAgZmlsZS4gKi8KCWlmIChhc3ByaW50ZigmZmlsZW5hbWUsICIlcy9zZGlmZi5YWFhYWFhYWFhY
IiwgdG1wZGlyKSA9PSAtMSkKCQllcnIoMiwgImFzcHJpbnRmIik7CglpZiAoKGZkID0gbWtzdGVt
cChmaWxlbmFtZSkpID09IC0xKQoJCWVycigyLCAibWtzdGVtcCIpOwoJaWYgKHRleHQgIT0gTlVM
TCkgewoJCXNpemVfdCBsZW47CgoJCWxlbiA9IHN0cmxlbih0ZXh0KTsKCQlpZiAoKG53cml0dGVu
ID0gd3JpdGUoZmQsIHRleHQsIGxlbikpID09IC0xIHx8CgkJICAgIG53cml0dGVuICE9IGxlbikg
ewoJCQl3YXJuKCJlcnJvciB3cml0aW5nIHRvIHRlbXAgZmlsZSIpOwoJCQljbGVhbnVwKGZpbGVu
YW1lKTsKCQl9Cgl9CgljbG9zZShmZCk7CgoJLyogdGV4dCBpcyBubyBsb25nZXIgdXNlZC4gKi8K
CWZyZWUodGV4dCk7CgoJLyogRWRpdCB0ZW1wIGZpbGUuICovCgllZGl0KGZpbGVuYW1lKTsKCgkv
KiBPcGVuIHRlbXBvcmFyeSBmaWxlLiAqLwoJaWYgKCEoZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAi
ciIpKSkgewoJCXdhcm4oImNvdWxkIG5vdCBvcGVuIGVkaXRlZCBmaWxlOiAlcyIsIGZpbGVuYW1l
KTsKCQljbGVhbnVwKGZpbGVuYW1lKTsKCX0KCgkvKiBDb3B5IHRlbXBvcmFyeSBmaWxlIGNvbnRl
bnRzIHRvIG91dHB1dCBmaWxlLiAqLwoJZm9yIChucmVhZCA9IHNpemVvZihidWYpOyBucmVhZCA9
PSBzaXplb2YoYnVmKTspIHsKCQlucmVhZCA9IGZyZWFkKGJ1Ziwgc2l6ZW9mKCpidWYpLCBzaXpl
b2YoYnVmKSwgZmlsZSk7CgkJLyogVGVzdCBmb3IgZXJyb3Igb3IgZW5kIG9mIGZpbGUuICovCgkJ
aWYgKG5yZWFkICE9IHNpemVvZihidWYpICYmCgkJICAgIChmZXJyb3IoZmlsZSkgfHwgIWZlb2Yo
ZmlsZSkpKSB7CgkJCXdhcm54KCJlcnJvciByZWFkaW5nIGVkaXRlZCBmaWxlOiAlcyIsIGZpbGVu
YW1lKTsKCQkJY2xlYW51cChmaWxlbmFtZSk7CgkJfQoKCQkvKgoJCSAqIElmIHdlIGhhdmUgbm90
aGluZyB0byByZWFkLCBicmVhayBvdXQgb2YgbG9vcAoJCSAqIGluc3RlYWQgb2Ygd3JpdGluZyBu
b3RoaW5nLgoJCSAqLwoJCWlmICghbnJlYWQpCgkJCWJyZWFrOwoKCQkvKiBXcml0ZSBkYXRhIHdl
IGp1c3QgcmVhZC4gKi8KCQlud3JpdHRlbiA9IGZ3cml0ZShidWYsIHNpemVvZigqYnVmKSwgbnJl
YWQsIG91dGZpbGUpOwoJCWlmIChud3JpdHRlbiAhPSBucmVhZCkgewoJCQl3YXJueCgiZXJyb3Ig
d3JpdGluZyB0byBvdXRwdXQgZmlsZSIpOwoJCQljbGVhbnVwKGZpbGVuYW1lKTsKCQl9Cgl9CgoJ
LyogV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZSwgc28gcmVtb3Zl
IGl0LiAqLwoJaWYgKHVubGluayhmaWxlbmFtZSkpCgkJd2FybigiY291bGQgbm90IGRlbGV0ZTog
JXMiLCBmaWxlbmFtZSk7CglmY2xvc2UoZmlsZSk7CgoJZnJlZShmaWxlbmFtZSk7CgoJcmV0dXJu
ICgwKTsKfQo=
--Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g
Content-Type: application/octet-stream;
name="extern.h"
Content-Disposition: attachment;
filename="extern.h"
Content-Transfer-Encoding: base64
LyoJJE5ldEJTRCQJKi8KLyoJJE9wZW5CU0Q6IGV4dGVybi5oLHYgMS40IDIwMDYvMDUvMjUgMDM6
MjA6MzIgcmF5IEV4cCAkICovCgovKgogKiBXcml0dGVuIGJ5IFJheW1vbmQgTGFpIDxyYXlAY3l0
aC5uZXQ+LgogKiBQdWJsaWMgZG9tYWluLgogKi8KCmV4dGVybiBGSUxFCQkqb3V0ZmlsZTsJLyog
ZmlsZSB0byBzYXZlIGNoYW5nZXMgdG8gKi8KZXh0ZXJuIGNvbnN0IGNoYXIJKnRtcGRpcjsKCmlu
dCBlcGFyc2UoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Cg==
--Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g
Content-Type: application/octet-stream;
name="Makefile"
Content-Disposition: attachment;
filename="Makefile"
Content-Transfer-Encoding: base64
IwkkTmV0QlNEJAoKUFJPRz0Jc2RpZmYKU1JDUz0JY29tbW9uLmMgZWRpdC5jIHNkaWZmLmMgc3Ry
dG9udW0uYwoKTERBREQrPQktbHV0aWwKRFBBREQrPQkke0xJQlVUSUx9CgpXQVJOUz0JMQoKLmlu
Y2x1ZGUgPGJzZC5wcm9nLm1rPgo=
--Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g
Content-Type: application/octet-stream;
name="sdiff.1"
Content-Disposition: attachment;
filename="sdiff.1"
Content-Transfer-Encoding: base64
LlwiICROZXRCU0QkCi5cIgouXCIgV3JpdHRlbiBieSBSYXltb25kIExhaSA8cmF5QGN5dGgubmV0
Pi4KLlwiIFB1YmxpYyBkb21haW4uCi5cIgouRGQgT2N0b2JlciAyOSwgMjAwNQouRHQgU0RJRkYg
MQouT3MKLlNoIE5BTUUKLk5tIHNkaWZmCi5OZCBzaWRlLWJ5LXNpZGUgZGlmZgouU2ggU1lOT1BT
SVMKLk5tCi5PcCBGbCBhYmRpbHN0VwouT3AgRmwgSSBBciByZWdleHAKLk9wIEZsIG8gQXIgb3V0
ZmlsZQouT3AgRmwgdyBBciB3aWR0aAouQXIgZmlsZTEKLkFyIGZpbGUyCi5TaCBERVNDUklQVElP
TgpTaG93cyBhIHNpZGUtYnktc2lkZSBjb21wYXJpc29uIG9mIHR3byBmaWxlcy4KLlBwClRoZSBv
cHRpb25zIGFyZToKLkJsIC10YWcgLXdpZHRoIERzCi5JdCBGbCBsCk9ubHkgcHJpbnQgdGhlIGxl
ZnQgY29sdW1uIGZvciBpZGVudGljYWwgbGluZXMuCi5JdCBGbCBvIEFyIG91dGZpbGUKSW50ZXJh
Y3RpdmVseSBtZXJnZQouQXIgZmlsZTEKYW5kCi5BciBmaWxlMgppbnRvCi5BciBvdXRmaWxlIC4K
SW4gdGhpcyBtb2RlLCB0aGUgdXNlciBpcyBwcm9tcHRlZCBmb3IgZWFjaCBzZXQgb2YgZGlmZmVy
ZW5jZXMuClNlZQouRXYgRURJVE9SCmFuZAouRXYgVklTVUFMICwKYmVsb3csCmZvciBkZXRhaWxz
IG9mIHdoaWNoIGVkaXRvciwgaWYgYW55LCBpcyBpbnZva2VkLgouUHAKVGhlIGNvbW1hbmRzIGFy
ZSBhcyBmb2xsb3dzOgouQmwgLXRhZyAtd2lkdGggRHMKLkl0IENtIGwKQ2hvb3NlIGxlZnQgc2V0
IG9mIGRpZmZzLgouSXQgQ20gcgpDaG9vc2UgcmlnaHQgc2V0IG9mIGRpZmZzLgouSXQgQ20gcwpT
aWxlbnQgbW9kZSBcKGVuIGlkZW50aWNhbCBsaW5lcyBhcmUgbm90IHByaW50ZWQuCi5JdCBDbSB2
ClZlcmJvc2UgbW9kZSBcKGVuIGlkZW50aWNhbCBsaW5lcyBhcmUgcHJpbnRlZC4KLkl0IENtIGUK
U3RhcnQgZWRpdGluZyBhbiBlbXB0eSBmaWxlLCB3aGljaCB3aWxsIGJlIG1lcmdlZCBpbnRvCi5B
ciBvdXRmaWxlCnVwb24gZXhpdGluZyB0aGUgZWRpdG9yLgouSXQgQ20gZSBDbSBsClN0YXJ0IGVk
aXRpbmcgZmlsZSB3aXRoIGxlZnQgc2V0IG9mIGRpZmZzLgouSXQgQ20gZSBDbSByClN0YXJ0IGVk
aXRpbmcgZmlsZSB3aXRoIHJpZ2h0IHNldCBvZiBkaWZmcy4KLkl0IENtIGUgQ20gYgpTdGFydCBl
ZGl0aW5nIGZpbGUgd2l0aCBib3RoIHNldHMgb2YgZGlmZnMuCi5JdCBDbSBxClF1aXQKLk5tIC4K
LkVsCi5JdCBGbCBzClNraXAgaWRlbnRpY2FsIGxpbmVzLgouSXQgRmwgdyBBciB3aWR0aApQcmlu
dCBhIG1heGltdW0gb2YKLkFyIHdpZHRoCmNoYXJhY3RlcnMgb24gZWFjaCBsaW5lLgpUaGUgZGVm
YXVsdCBpcyAxMzAgY2hhcmFjdGVycy4KLkVsCi5QcApPcHRpb25zIHBhc3NlZCB0bwouWHIgZGlm
ZiAxCmFyZToKLkJsIC10YWcgLXdpZHRoIERzCi5JdCBGbCBhClRyZWF0Ci5BciBmaWxlMQphbmQK
LkFyIGZpbGUyCmFzIHRleHQgZmlsZXMuCi5JdCBGbCBiCklnbm9yZSB0cmFpbGluZyBibGFuayBz
cGFjZXMuCi5JdCBGbCBkCk1pbmltaXplIGRpZmYgc2l6ZS4KLkl0IEZsIEkgQXIgcmVnZXhwCkln
bm9yZSBsaW5lIGNoYW5nZXMgbWF0Y2hpbmcKLkFyIHJlZ2V4cCAuCkFsbCBsaW5lcyBpbiB0aGUg
Y2hhbmdlIG11c3QgbWF0Y2gKLkFyIHJlZ2V4cApmb3IgdGhlIGNoYW5nZSB0byBiZSBpZ25vcmVk
LgouSXQgRmwgaQpEbyBhIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbi4KLkl0IEZsIHQKRXhw
YW5kIHRhYnMgdG8gc3BhY2VzLgouSXQgRmwgVwpJZ25vcmUgYWxsIHNwYWNlcwoodGhlCi5GbCB3
CmZsYWcgaXMgcGFzc2VkIHRvCi5YciBkaWZmIDEgKSAuCi5FbAouU2ggRU5WSVJPTk1FTlQKLkJs
IC10YWcgLXdpZHRoIERzCi5JdCBFdiBFRElUT1IgLCBWSVNVQUwKU3BlY2lmaWVzIGFuIGVkaXRv
ciB0byB1c2Ugd2l0aCB0aGUKLkZsIG8Kb3B0aW9uLgpJZiBib3RoCi5FdiBFRElUT1IKYW5kCi5F
diBWSVNVQUwKYXJlIHNldCwKLkV2IFZJU1VBTAp0YWtlcyBwcmVjZWRlbmNlLgpJZiBuZWl0aGVy
Ci5FdiBFRElUT1IKbm9yCi5FdiBWSVNVQUwKYXJlIHNldCwKdGhlIGRlZmF1bHQgaXMKLlhyIHZp
IDEgLgouSXQgRXYgVE1QRElSClNwZWNpZmllcyBhIGRpcmVjdG9yeSBmb3IgdGVtcG9yYXJ5IGZp
bGVzIHRvIGJlIGNyZWF0ZWQuClRoZSBkZWZhdWx0IGlzCi5QYSAvdG1wIC4KLkVsCi5TaCBTRUUg
QUxTTwouWHIgZGlmZiAxICwKLlhyIGRpZmYzIDEgLAouWHIgdmkgMSAsCi5YciByZV9mb3JtYXQg
NwouU2ggQVVUSE9SUwouTm0Kd2FzIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIGZvciB0aGUgcHVibGlj
IGRvbWFpbiBieQouQW4gUmF5IExhaSBBcSByYXlAY3l0aC5uZXQgLgouU2ggQ0FWRUFUUwpBbHRo
b3VnaCB1bmRvY3VtZW50ZWQsCi5ObQpzdXBwb3J0cyBhbGwgb3B0aW9ucyBzdXBwb3J0ZWQgYnkg
R05VIHNkaWZmLgpTb21lIG9wdGlvbnMgcmVxdWlyZSBHTlUgZGlmZi4KLlBwClRhYnMgYXJlIHRy
ZWF0ZWQgYXMgYW55d2hlcmUgZnJvbSBvbmUgdG8gZWlnaHQgY2hhcmFjdGVycyB3aWRlLApkZXBl
bmRpbmcgb24gdGhlIGN1cnJlbnQgY29sdW1uLgpUZXJtaW5hbHMgdGhhdCB0cmVhdCB0YWJzIGFz
IGVpZ2h0IGNoYXJhY3RlcnMgd2lkZSB3aWxsIGxvb2sgYmVzdC4KLlNoIEJVR1MKLk5tCm1heSBu
b3Qgd29yayB3aXRoIGJpbmFyeSBkYXRhLgo=
--Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g
Content-Type: application/octet-stream;
name="sdiff.c"
Content-Disposition: attachment;
filename="sdiff.c"
Content-Transfer-Encoding: base64
LyoJJE5ldEJTRCQJKi8KLyoJJE9wZW5CU0Q6IHNkaWZmLmMsdiAxLjIwIDIwMDYvMDkvMTkgMDU6
NTI6MjMgb3R0byBFeHAgJCAqLwoKLyoKICogV3JpdHRlbiBieSBSYXltb25kIExhaSA8cmF5QGN5
dGgubmV0Pi4KICogUHVibGljIGRvbWFpbi4KICovCgojaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiNp
bmNsdWRlIDxzeXMvcXVldWUuaD4KI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiNpbmNsdWRlIDxzeXMv
dHlwZXMuaD4KI2luY2x1ZGUgPHN5cy93YWl0Lmg+CgojaW5jbHVkZSA8Y3R5cGUuaD4KI2luY2x1
ZGUgPGVyci5oPgojaW5jbHVkZSA8ZXJybm8uaD4KI2luY2x1ZGUgPGZjbnRsLmg+CiNpbmNsdWRl
IDxnZXRvcHQuaD4KI2luY2x1ZGUgPGxpbWl0cy5oPgojaW5jbHVkZSA8cGF0aHMuaD4KI2luY2x1
ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5j
bHVkZSA8dW5pc3RkLmg+CiNpbmNsdWRlIDx1dGlsLmg+CgojaW5jbHVkZSAiY29tbW9uLmgiCiNp
bmNsdWRlICJleHRlcm4uaCIKCiNkZWZpbmUgV0lEVEggMTMwCi8qCiAqIEVhY2ggY29sdW1uIG11
c3QgYmUgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciB3aWRlLCBwbHVzIHRocmVlCiAqIGNoYXJhY3Rl
cnMgYmV0d2VlbiB0aGUgY29sdW1ucyAoc3BhY2UsIFs8fD5dLCBzcGFjZSkuCiAqLwojZGVmaW5l
IFdJRFRIX01JTiA1CgovKiBBIHNpbmdsZSBkaWZmIGxpbmUuICovCnN0cnVjdCBkaWZmbGluZSB7
CglTSU1QTEVRX0VOVFJZKGRpZmZsaW5lKSBkaWZmZW50cmllczsKCWNoYXIJKmxlZnQ7CgljaGFy
CSBkaXY7CgljaGFyCSpyaWdodDsKfTsKCnN0YXRpYyB2b2lkIGFzdHJjYXQoY2hhciAqKiwgY29u
c3QgY2hhciAqKTsKc3RhdGljIHZvaWQgZW5xdWV1ZShjaGFyICosIGNoYXIsIGNoYXIgKik7CnN0
YXRpYyBjaGFyICpta3RtcGNweShjb25zdCBjaGFyICopOwpzdGF0aWMgdm9pZCBmcmVlZGlmZihz
dHJ1Y3QgZGlmZmxpbmUgKik7CnN0YXRpYyB2b2lkIGludF91c2FnZSh2b2lkKTsKc3RhdGljIGlu
dCBwYXJzZWNtZChGSUxFICosIEZJTEUgKiwgRklMRSAqKTsKc3RhdGljIHZvaWQgcHJpbnRhKEZJ
TEUgKiwgc2l6ZV90KTsKc3RhdGljIHZvaWQgcHJpbnRjKEZJTEUgKiwgc2l6ZV90LCBGSUxFICos
IHNpemVfdCk7CnN0YXRpYyB2b2lkIHByaW50Y29sKGNvbnN0IGNoYXIgKiwgc2l6ZV90ICosIGNv
bnN0IHNpemVfdCk7CnN0YXRpYyB2b2lkIHByaW50ZChGSUxFICosIHNpemVfdCk7CnN0YXRpYyB2
b2lkIHByaW50bG4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyLCBjb25zdCBjaGFyICopOwpzdGF0
aWMgdm9pZCBwcm9jZXNzcSh2b2lkKTsKc3RhdGljIHZvaWQgcHJvbXB0KGNvbnN0IGNoYXIgKiwg
Y29uc3QgY2hhciAqKTsKX19kZWFkIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpOwpzdGF0aWMgY2hh
ciAqeGZnZXRzKEZJTEUgKik7CgpTSU1QTEVRX0hFQUQoLCBkaWZmbGluZSkgZGlmZmhlYWQgPSBT
SU1QTEVRX0hFQURfSU5JVElBTElaRVIoZGlmZmhlYWQpOwpzaXplX3QJIGxpbmVfd2lkdGg7CS8q
IHdpZHRoIG9mIGEgbGluZSAodHdvIGNvbHVtbnMgYW5kIGRpdmlkZXIpICovCnNpemVfdAkgd2lk
dGg7CQkvKiB3aWR0aCBvZiBlYWNoIGNvbHVtbiAqLwpzaXplX3QJIGZpbGUxbG4sIGZpbGUybG47
CS8qIGxpbmUgbnVtYmVyIG9mIGZpbGUxIGFuZCBmaWxlMiAqLwppbnQJIElmbGFnID0gMDsJLyog
aWdub3JlIHNldHMgbWF0Y2hpbmcgcmVnZXhwICovCmludAkgbGZsYWc7CQkvKiBwcmludCBvbmx5
IGxlZnQgY29sdW1uIGZvciBpZGVudGljYWwgbGluZXMgKi8KaW50CSBzZmxhZzsJCS8qIHNraXAg
aWRlbnRpY2FsIGxpbmVzICovCkZJTEUJKm91dGZpbGU7CS8qIGZpbGUgdG8gc2F2ZSBjaGFuZ2Vz
IHRvICovCmNvbnN0IGNoYXIgKnRtcGRpcjsJLyogVE1QRElSIG9yIC90bXAgKi8KCnN0YXRpYyBz
dHJ1Y3Qgb3B0aW9uIGxvbmdvcHRzW10gPSB7Cgl7ICJ0ZXh0IiwJCQlub19hcmd1bWVudCwJCU5V
TEwsCSdhJyB9LAoJeyAiaWdub3JlLWJsYW5rLWxpbmVzIiwJCW5vX2FyZ3VtZW50LAkJTlVMTCwJ
J0InIH0sCgl7ICJpZ25vcmUtc3BhY2UtY2hhbmdlIiwJbm9fYXJndW1lbnQsCQlOVUxMLAknYicg
fSwKCXsgIm1pbmltYWwiLAkJCW5vX2FyZ3VtZW50LAkJTlVMTCwJJ2QnIH0sCgl7ICJpZ25vcmUt
dGFiLWV4cGFuc2lvbiIsCW5vX2FyZ3VtZW50LAkJTlVMTCwJJ0UnIH0sCgl7ICJkaWZmLXByb2dy
YW0iLAkJcmVxdWlyZWRfYXJndW1lbnQsCU5VTEwsCSdGJyB9LAoJeyAic3BlZWQtbGFyZ2UtZmls
ZXMiLAkJbm9fYXJndW1lbnQsCQlOVUxMLAknSCcgfSwKCXsgImlnbm9yZS1tYXRjaGluZy1saW5l
cyIsCXJlcXVpcmVkX2FyZ3VtZW50LAlOVUxMLAknSScgfSwKCXsgImxlZnQtY29sdW1uIiwJCW5v
X2FyZ3VtZW50LAkJTlVMTCwJJ2wnIH0sCgl7ICJvdXRwdXQiLAkJCXJlcXVpcmVkX2FyZ3VtZW50
LAlOVUxMLAknbycgfSwKCXsgInN0cmlwLXRyYWlsaW5nLWNyIiwJCW5vX2FyZ3VtZW50LAkJTlVM
TCwJJ1MnIH0sCgl7ICJzdXBwcmVzcy1jb21tb24tbGluZXMiLAlub19hcmd1bWVudCwJCU5VTEws
CSdzJyB9LAoJeyAiZXhwYW5kLXRhYnMiLAkJbm9fYXJndW1lbnQsCQlOVUxMLAkndCcgfSwKCXsg
Imlnbm9yZS1hbGwtc3BhY2UiLAkJbm9fYXJndW1lbnQsCQlOVUxMLAknVycgfSwKCXsgIndpZHRo
IiwJCQlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwJJ3cnIH0sCgl7IE5VTEwsCQkJCTAsCQkJTlVM
TCwJIDAgIH0KfTsKCi8qCiAqIENyZWF0ZSB0ZW1wb3JhcnkgZmlsZSBpZiBzb3VyY2VfZmlsZSBp
cyBub3QgYSByZWd1bGFyIGZpbGUuCiAqIFJldHVybnMgdGVtcG9yYXJ5IGZpbGUgbmFtZSBpZiBv
bmUgd2FzIG1hbGxvY2VkLCBOVUxMIGlmIHVubmVjZXNzYXJ5LgogKi8Kc3RhdGljIGNoYXIgKgpt
a3RtcGNweShjb25zdCBjaGFyICpzb3VyY2VfZmlsZSkKewoJc3RydWN0IHN0YXQgc2I7Cglzc2l6
ZV90IHJjb3VudDsKCWludCBpZmQsIG9mZDsKCXVfY2hhciBidWZbQlVGU0laXTsKCWNoYXIgKnRh
cmdldF9maWxlOwoKCS8qIE9wZW4gaW5wdXQgYW5kIG91dHB1dC4gKi8KCWlmZCA9IG9wZW4oc291
cmNlX2ZpbGUsIE9fUkRPTkxZLCAwKTsKCS8qIEZpbGUgd2FzIG9wZW5lZCBzdWNjZXNzZnVsbHku
ICovCglpZiAoaWZkICE9IC0xKSB7CgkJaWYgKGZzdGF0KGlmZCwgJnNiKSA9PSAtMSkKCQkJZXJy
KDIsICJlcnJvciBnZXR0aW5nIGZpbGUgc3RhdHVzIGZyb20gJXMiLCBzb3VyY2VfZmlsZSk7CgoJ
CS8qIFJlZ3VsYXIgZmlsZS4gKi8KCQlpZiAoU19JU1JFRyhzYi5zdF9tb2RlKSkKCQkJcmV0dXJu
IChOVUxMKTsKCX0gZWxzZSB7CgkJLyogSWYgYGAtJycgZG9lcyBub3QgZXhpc3QgdGhlIHVzZXIg
bWVhbnQgc3RkaW4uICovCgkJaWYgKGVycm5vID09IEVOT0VOVCAmJiBzdHJjbXAoc291cmNlX2Zp
bGUsICItIikgPT0gMCkKCQkJaWZkID0gU1RESU5fRklMRU5POwoJCWVsc2UKCQkJZXJyKDIsICJl
cnJvciBvcGVuaW5nICVzIiwgc291cmNlX2ZpbGUpOwoJfQoKCS8qIE5vdCBhIHJlZ3VsYXIgZmls
ZSwgc28gY29weSBpbnB1dCBpbnRvIHRlbXBvcmFyeSBmaWxlLiAqLwoJaWYgKGFzcHJpbnRmKCZ0
YXJnZXRfZmlsZSwgIiVzL3NkaWZmLlhYWFhYWFhYWFgiLCB0bXBkaXIpID09IC0xKQoJCWVycigy
LCAiYXNwcmludGYiKTsKCWlmICgob2ZkID0gbWtzdGVtcCh0YXJnZXRfZmlsZSkpID09IC0xKSB7
CgkJd2FybigiZXJyb3Igb3BlbmluZyAlcyIsIHRhcmdldF9maWxlKTsKCQlnb3RvIEZBSUw7Cgl9
Cgl3aGlsZSAoKHJjb3VudCA9IHJlYWQoaWZkLCBidWYsIHNpemVvZihidWYpKSkgIT0gLTEgJiYK
CSAgICByY291bnQgIT0gMCkgewoJCXNzaXplX3Qgd2NvdW50OwoKCQl3Y291bnQgPSB3cml0ZShv
ZmQsIGJ1ZiwgKHNpemVfdClyY291bnQpOwoJCWlmICgtMSA9PSB3Y291bnQgfHwgcmNvdW50ICE9
IHdjb3VudCkgewoJCQl3YXJuKCJlcnJvciB3cml0aW5nIHRvICVzIiwgdGFyZ2V0X2ZpbGUpOwoJ
CQlnb3RvIEZBSUw7CgkJfQoJfQoJaWYgKHJjb3VudCA9PSAtMSkgewoJCXdhcm4oImVycm9yIHJl
YWRpbmcgZnJvbSAlcyIsIHNvdXJjZV9maWxlKTsKCQlnb3RvIEZBSUw7Cgl9CgoJY2xvc2UoaWZk
KTsKCWNsb3NlKG9mZCk7CgoJcmV0dXJuICh0YXJnZXRfZmlsZSk7CgpGQUlMOgoJdW5saW5rKHRh
cmdldF9maWxlKTsKCWV4aXQoMik7Cn0KCmludAptYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK
ewoJRklMRSAqZGlmZnBpcGUsICpmaWxlMSwgKmZpbGUyOwoJc2l6ZV90IGRpZmZhcmdjID0gMCwg
d2ZsYWcgPSBXSURUSDsKCWludCBjaCwgZmRbMl0sIHN0YXR1czsKCXBpZF90IHBpZDsKCWNoYXIg
KipkaWZmYXJndiwgKmRpZmZwcm9nID0gImRpZmYiLCAqZmlsZW5hbWUxLCAqZmlsZW5hbWUyLAoJ
ICAgICp0bXAxLCAqdG1wMiwgKnMxLCAqczI7CgoJLyoKCSAqIFByb2Nlc3MgZGlmZiBmbGFncy4K
CSAqLwoJLyoKCSAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgZGlmZiBhcmd1bWVudHMgYW5kIE5VTEwu
CgkgKiBFYWNoIGZsYWcgaGFzIGF0IG1vc3Qgb25lIGFyZ3VtZW50LCBzbyBkb3VibGluZyBhcmdj
IGdpdmVzIGFuCgkgKiB1cHBlciBsaW1pdCBvZiBob3cgbWFueSBkaWZmIGFyZ3MgY2FuIGJlIHBh
c3NlZC4gIGFyZ3ZbMF0sCgkgKiBmaWxlMSwgYW5kIGZpbGUyIHdvbid0IGhhdmUgYXJndW1lbnRz
IHNvIGRvdWJsaW5nIHRoZW0gd2lsbAoJICogd2FzdGUgc29tZSBtZW1vcnk7IGhvd2V2ZXIgd2Ug
bmVlZCBhbiBleHRyYSBzcGFjZSBmb3IgdGhlCgkgKiBOVUxMIGF0IHRoZSBlbmQsIHNvIGl0IHNv
cnQgb2Ygd29ya3Mgb3V0LgoJICovCglpZiAoIShkaWZmYXJndiA9IG1hbGxvYyhzaXplb2YoY2hh
ciAqKikgKiBhcmdjICogMikpKQoJCWVycigyLCAibWFpbiIpOwoKCS8qIEFkZCBmaXJzdCBhcmd1
bWVudCwgdGhlIHByb2dyYW0gbmFtZS4gKi8KCWRpZmZhcmd2W2RpZmZhcmdjKytdID0gZGlmZnBy
b2c7CgoJd2hpbGUgKChjaCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhQmJkRUhJOmlsbzpz
dFd3OiIsCgkgICAgbG9uZ29wdHMsIE5VTEwpKSAhPSAtMSkgewoJCWNvbnN0IGNoYXIgKmVycnN0
cjsKCgkJc3dpdGNoIChjaCkgewoJCWNhc2UgJ2EnOgoJCQlkaWZmYXJndltkaWZmYXJnYysrXSA9
ICItYSI7CgkJCWJyZWFrOwoJCWNhc2UgJ0InOgoJCQlkaWZmYXJndltkaWZmYXJnYysrXSA9ICIt
QiI7CgkJCWJyZWFrOwoJCWNhc2UgJ2InOgoJCQlkaWZmYXJndltkaWZmYXJnYysrXSA9ICItYiI7
CgkJCWJyZWFrOwoJCWNhc2UgJ2QnOgoJCQlkaWZmYXJndltkaWZmYXJnYysrXSA9ICItZCI7CgkJ
CWJyZWFrOwoJCWNhc2UgJ0UnOgoJCQlkaWZmYXJndltkaWZmYXJnYysrXSA9ICItRSI7CgkJCWJy
ZWFrOwoJCWNhc2UgJ0YnOgoJCQlkaWZmYXJndlswXSA9IGRpZmZwcm9nID0gb3B0YXJnOwoJCQli
cmVhazsKCQljYXNlICdIJzoKCQkJZGlmZmFyZ3ZbZGlmZmFyZ2MrK10gPSAiLUgiOwoJCQlicmVh
azsKCQljYXNlICdJJzoKCQkJSWZsYWcgPSAxOwoJCQlkaWZmYXJndltkaWZmYXJnYysrXSA9ICIt
SSI7CgkJCWRpZmZhcmd2W2RpZmZhcmdjKytdID0gb3B0YXJnOwoJCQlicmVhazsKCQljYXNlICdp
JzoKCQkJZGlmZmFyZ3ZbZGlmZmFyZ2MrK10gPSAiLWkiOwoJCQlicmVhazsKCQljYXNlICdsJzoK
CQkJbGZsYWcgPSAxOwoJCQlicmVhazsKCQljYXNlICdvJzoKCQkJaWYgKChvdXRmaWxlID0gZm9w
ZW4ob3B0YXJnLCAidyIpKSA9PSBOVUxMKQoJCQkJZXJyKDIsICJjb3VsZCBub3Qgb3BlbjogJXMi
LCBvcHRhcmcpOwoJCQlicmVhazsKCQljYXNlICdTJzoKCQkJZGlmZmFyZ3ZbZGlmZmFyZ2MrK10g
PSAiLS1zdHJpcC10cmFpbGluZy1jciI7CgkJCWJyZWFrOwoJCWNhc2UgJ3MnOgoJCQlzZmxhZyA9
IDE7CgkJCWJyZWFrOwoJCWNhc2UgJ3QnOgoJCQlkaWZmYXJndltkaWZmYXJnYysrXSA9ICItdCI7
CgkJCWJyZWFrOwoJCWNhc2UgJ1cnOgoJCQlkaWZmYXJndltkaWZmYXJnYysrXSA9ICItdyI7CgkJ
CWJyZWFrOwoJCWNhc2UgJ3cnOgoJCQl3ZmxhZyA9IHN0cnRvbnVtKG9wdGFyZywgV0lEVEhfTUlO
LAoJCQkgICAgSU5UX01BWCwgJmVycnN0cik7CgkJCWlmIChlcnJzdHIpCgkJCQllcnJ4KDIsICJ3
aWR0aCBpcyAlczogJXMiLCBlcnJzdHIsIG9wdGFyZyk7CgkJCWJyZWFrOwoJCWRlZmF1bHQ6CgkJ
CXVzYWdlKCk7CgkJfQoKCX0KCWFyZ2MgLT0gb3B0aW5kOwoJYXJndiArPSBvcHRpbmQ7CgoJaWYg
KGFyZ2MgIT0gMikKCQl1c2FnZSgpOwoKCWlmICgodG1wZGlyID0gZ2V0ZW52KCJUTVBESVIiKSkg
PT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgIAoJCXRtcGRpciA9IF9QQVRIX1RNUDsKCglm
aWxlbmFtZTEgPSBhcmd2WzBdOwoJZmlsZW5hbWUyID0gYXJndlsxXTsKCgkvKgoJICogQ3JlYXRl
IHRlbXBvcmFyeSBmaWxlcyBmb3IgZGlmZiBhbmQgc2RpZmYgdG8gc2hhcmUgaWYgZmlsZTEKCSAq
IG9yIGZpbGUyIGFyZSBub3QgcmVndWxhciBmaWxlcy4gIFRoaXMgYWxsb3dzIHNkaWZmIGFuZCBk
aWZmCgkgKiB0byByZWFkIHRoZSBzYW1lIGlucHV0cyBpZiBvbmUgb3IgYm90aCBpbnB1dHMgYXJl
IHN0ZGluLgoJICoKCSAqIElmIGFueSB0ZW1wb3JhcnkgZmlsZXMgd2VyZSBjcmVhdGVkLCB0aGVp
ciBuYW1lcyB3b3VsZCBiZQoJICogc2F2ZWQgaW4gdG1wMSBvciB0bXAyLiAgdG1wMSBzaG91bGQg
bmV2ZXIgZXF1YWwgdG1wMi4KCSAqLwoJdG1wMSA9IHRtcDIgPSBOVUxMOwoJLyogZmlsZTEgYW5k
IGZpbGUyIGFyZSB0aGUgc2FtZSwgc28gY29weSB0byBzYW1lIHRlbXAgZmlsZS4gKi8KCWlmIChz
dHJjbXAoZmlsZW5hbWUxLCBmaWxlbmFtZTIpID09IDApIHsKCQlpZiAoKHRtcDEgPSBta3RtcGNw
eShmaWxlbmFtZTEpKSkKCQkJZmlsZW5hbWUxID0gZmlsZW5hbWUyID0gdG1wMTsKCS8qIENvcHkg
ZmlsZTEgYW5kIGZpbGUyIGludG8gc2VwYXJhdGUgdGVtcCBmaWxlcy4gKi8KCX0gZWxzZSB7CgkJ
aWYgKCh0bXAxID0gbWt0bXBjcHkoZmlsZW5hbWUxKSkpCgkJCWZpbGVuYW1lMSA9IHRtcDE7CgkJ
aWYgKCh0bXAyID0gbWt0bXBjcHkoZmlsZW5hbWUyKSkpCgkJCWZpbGVuYW1lMiA9IHRtcDI7Cgl9
CgoJZGlmZmFyZ3ZbZGlmZmFyZ2MrK10gPSBmaWxlbmFtZTE7CglkaWZmYXJndltkaWZmYXJnYysr
XSA9IGZpbGVuYW1lMjsKCS8qIEFkZCBOVUxMIHRvIGVuZCBvZiBhcnJheSB0byBpbmRpY2F0ZSBl
bmQgb2YgYXJyYXkuICovCglkaWZmYXJndltkaWZmYXJnYysrXSA9IE5VTEw7CgoJLyogU3VidHJh
Y3QgY29sdW1uIGRpdmlkZXIgYW5kIGRpdmlkZSBieSB0d28uICovCgl3aWR0aCA9ICh3ZmxhZyAt
IDMpIC8gMjsKCS8qIE1ha2Ugc3VyZSBsaW5lX3dpZHRoIGNhbiBmaXQgaW4gc2l6ZV90LiAqLwoJ
aWYgKHdpZHRoID4gKFNJWkVfVF9NQVggLSAzKSAvIDIpCgkJZXJyeCgyLCAid2lkdGggaXMgdG9v
IGxhcmdlOiAlenUiLCB3aWR0aCk7CglsaW5lX3dpZHRoID0gd2lkdGggKiAyICsgMzsKCglpZiAo
cGlwZShmZCkpCgkJZXJyKDIsICJwaXBlIik7CgoJc3dpdGNoKHBpZCA9IGZvcmsoKSkgewoJY2Fz
ZSAwOgoJCS8qIGNoaWxkICovCgkJLyogV2UgZG9uJ3QgcmVhZCBmcm9tIHRoZSBwaXBlLiAqLwoJ
CWNsb3NlKGZkWzBdKTsKCQlpZiAoZHVwMihmZFsxXSwgU1RET1VUX0ZJTEVOTykgPT0gLTEpCgkJ
CWVycigyLCAiY2hpbGQgY291bGQgbm90IGR1cGxpY2F0ZSBkZXNjcmlwdG9yIik7CgkJLyogRnJl
ZSB1bnVzZWQgZGVzY3JpcHRvci4gKi8KCQljbG9zZShmZFsxXSk7CgoJCWV4ZWN2cChkaWZmcHJv
ZywgZGlmZmFyZ3YpOwoJCWVycigyLCAiY291bGQgbm90IGV4ZWN1dGUgZGlmZjogJXMiLCBkaWZm
cHJvZyk7CgljYXNlIC0xOgoJCWVycigyLCAiY291bGQgbm90IGZvcmsiKTsKCX0KCgkvKiBwYXJl
bnQgKi8KCS8qIFdlIGRvbid0IHdyaXRlIHRvIHRoZSBwaXBlLiAqLwoJY2xvc2UoZmRbMV0pOwoK
CS8qIE9wZW4gcGlwZSB0byBkaWZmIGNvbW1hbmQuICovCglpZiAoKGRpZmZwaXBlID0gZmRvcGVu
KGZkWzBdLCAiciIpKSA9PSBOVUxMKQoJCWVycigyLCAiY291bGQgbm90IG9wZW4gZGlmZiBwaXBl
Iik7CglpZiAoKGZpbGUxID0gZm9wZW4oZmlsZW5hbWUxLCAiciIpKSA9PSBOVUxMKQoJCWVycigy
LCAiY291bGQgbm90IG9wZW4gJXMiLCBmaWxlbmFtZTEpOwoJaWYgKChmaWxlMiA9IGZvcGVuKGZp
bGVuYW1lMiwgInIiKSkgPT0gTlVMTCkKCQllcnIoMiwgImNvdWxkIG5vdCBvcGVuICVzIiwgZmls
ZW5hbWUyKTsKCgkvKiBMaW5lIG51bWJlcnMgc3RhcnQgYXQgb25lLiAqLwoJZmlsZTFsbiA9IGZp
bGUybG4gPSAxOwoKCS8qIFJlYWQgYW5kIHBhcnNlIGRpZmYgb3V0cHV0LiAqLwoJd2hpbGUgKHBh
cnNlY21kKGRpZmZwaXBlLCBmaWxlMSwgZmlsZTIpICE9IEVPRikKCQk7CglmY2xvc2UoZGlmZnBp
cGUpOwoKCS8qIFdhaXQgZm9yIGRpZmYgdG8gZXhpdC4gKi8KCWlmICh3YWl0cGlkKHBpZCwgJnN0
YXR1cywgMCkgPT0gLTEgfHwgIVdJRkVYSVRFRChzdGF0dXMpIHx8CgkgICAgV0VYSVRTVEFUVVMo
c3RhdHVzKSA+PSAyKQoJCWVycigyLCAiZGlmZiBleGl0ZWQgYWJub3JtYWxseSIpOwoKCS8qIERl
bGV0ZSBhbmQgZnJlZSB1bm5lZWRlZCB0ZW1wb3JhcnkgZmlsZXMuICovCglpZiAodG1wMSkKCQlp
ZiAodW5saW5rKHRtcDEpKQoJCQl3YXJuKCJlcnJvciBkZWxldGluZyAlcyIsIHRtcDEpOwoJaWYg
KHRtcDIpCgkJaWYgKHVubGluayh0bXAyKSkKCQkJd2FybigiZXJyb3IgZGVsZXRpbmcgJXMiLCB0
bXAyKTsKCWZyZWUodG1wMSk7CglmcmVlKHRtcDIpOwoJZmlsZW5hbWUxID0gZmlsZW5hbWUyID0g
dG1wMSA9IHRtcDIgPSBOVUxMOwoKCS8qIE5vIG1vcmUgZGlmZnMsIHNvIHByaW50IGNvbW1vbiBs
aW5lcy4gKi8KCWlmIChsZmxhZykKCQl3aGlsZSAoKHMxID0geGZnZXRzKGZpbGUxKSkpCgkJCWVu
cXVldWUoczEsICcgJywgTlVMTCk7CgllbHNlCgkJZm9yICg7OykgewoJCQlzMSA9IHhmZ2V0cyhm
aWxlMSk7CgkJCXMyID0geGZnZXRzKGZpbGUyKTsKCQkJaWYgKHMxIHx8IHMyKQoJCQkJZW5xdWV1
ZShzMSwgJyAnLCBzMik7CgkJCWVsc2UKCQkJCWJyZWFrOwoJCX0KCWZjbG9zZShmaWxlMSk7Cglm
Y2xvc2UoZmlsZTIpOwoJLyogUHJvY2VzcyB1bm1vZGlmaWVkIGxpbmVzLiAqLwoJcHJvY2Vzc3Eo
KTsKCgkvKiBSZXR1cm4gZGlmZiBleGl0IHN0YXR1cy4gKi8KCXJldHVybiAoV0VYSVRTVEFUVVMo
c3RhdHVzKSk7Cn0KCi8qCiAqIFByaW50cyBhbiBpbmRpdmlkdWFsIGNvbHVtbiAobGVmdCBvciBy
aWdodCksIHRha2luZyBpbnRvIGFjY291bnQKICogdGhhdCB0YWJzIGFyZSB2YXJpYWJsZS13aWR0
aC4gIFRha2VzIGEgc3RyaW5nLCB0aGUgY3VycmVudCBjb2x1bW4KICogdGhlIGN1cnNvciBpcyBv
biB0aGUgc2NyZWVuLCBhbmQgdGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbHVtbi4KICogVGhl
IGNvbHVtbiB2YWx1ZSBpcyB1cGRhdGVkIGFzIHdlIGdvIGFsb25nLgogKi8Kc3RhdGljIHZvaWQK
cHJpbnRjb2woY29uc3QgY2hhciAqcywgc2l6ZV90ICpjb2wsIGNvbnN0IHNpemVfdCBjb2xfbWF4
KQp7CgoJZm9yICg7ICpzICYmICpjb2wgPCBjb2xfbWF4OyArK3MpIHsKCQlzaXplX3QgbmV3X2Nv
bDsKCgkJc3dpdGNoICgqcykgewoJCWNhc2UgJ1x0JzoKCQkJLyoKCQkJICogSWYgcm91bmRpbmcg
dG8gbmV4dCBtdWx0aXBsZSBvZiBlaWdodCBjYXVzZXMKCQkJICogYW4gaW50ZWdlciBvdmVyZmxv
dywganVzdCByZXR1cm4uCgkJCSAqLwoJCQlpZiAoKmNvbCA+IFNJWkVfVF9NQVggLSA4KQoJCQkJ
cmV0dXJuOwoKCQkJLyogUm91bmQgdG8gbmV4dCBtdWx0aXBsZSBvZiBlaWdodC4gKi8KCQkJbmV3
X2NvbCA9ICgqY29sIC8gOCArIDEpICogODsKCgkJCS8qCgkJCSAqIElmIHByaW50aW5nIHRoZSB0
YWIgZ29lcyBwYXN0IHRoZSBjb2x1bW4KCQkJICogd2lkdGgsIGRvbid0IHByaW50IGl0IGFuZCBq
dXN0IHF1aXQuCgkJCSAqLwoJCQlpZiAobmV3X2NvbCA+IGNvbF9tYXgpCgkJCQlyZXR1cm47CgkJ
CSpjb2wgPSBuZXdfY29sOwoJCQlicmVhazsKCgkJZGVmYXVsdDoKCQkJKysoKmNvbCk7CgkJfQoK
CQlwdXRjaGFyKCpzKTsKCX0KfQoKLyoKICogUHJvbXB0cyB1c2VyIHRvIGVpdGhlciBjaG9vc2Ug
YmV0d2VlbiB0d28gc3RyaW5ncyBvciBlZGl0IG9uZSwgYm90aCwKICogb3IgbmVpdGhlci4KICov
CnN0YXRpYyB2b2lkCnByb21wdChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCnsKCWNo
YXIgKmNtZDsKCgkvKiBQcmludCBjb21tYW5kIHByb21wdC4gKi8KCXB1dGNoYXIoJyUnKTsKCgkv
KiBHZXQgdXNlciBpbnB1dC4gKi8KCWZvciAoOyAoY21kID0geGZnZXRzKHN0ZGluKSk7IGZyZWUo
Y21kKSkgewoJCWNvbnN0IGNoYXIgKnA7CgoJCS8qIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlLiAq
LwoJCWZvciAocCA9IGNtZDsgaXNzcGFjZSgoaW50KSgqcCkpOyArK3ApCgkJCTsKCgkJc3dpdGNo
ICgqcCkgewoJCWNhc2UgJ2UnOgoJCQkvKiBTa2lwIGBlJy4gKi8KCQkJKytwOwoKCQkJaWYgKGVw
YXJzZShwLCBzMSwgczIpID09IC0xKQoJCQkJZ290byBVU0FHRTsKCQkJYnJlYWs7CgoJCWNhc2Ug
J2wnOgoJCQkvKiBDaG9vc2UgbGVmdCBjb2x1bW4gYXMtaXMuICovCgkJCWlmIChzMSAhPSBOVUxM
KQoJCQkJZnByaW50ZihvdXRmaWxlLCAiJXNcbiIsIHMxKTsKCgkJCS8qIEVuZCBvZiBjb21tYW5k
IHBhcnNpbmcuICovCgkJCWJyZWFrOwoKCQljYXNlICdxJzoKCQkJZ290byBRVUlUOwoKCQljYXNl
ICdyJzoKCQkJLyogQ2hvb3NlIHJpZ2h0IGNvbHVtbiBhcy1pcy4gKi8KCQkJaWYgKHMyICE9IE5V
TEwpCgkJCQlmcHJpbnRmKG91dGZpbGUsICIlc1xuIiwgczIpOwoKCQkJLyogRW5kIG9mIGNvbW1h
bmQgcGFyc2luZy4gKi8KCQkJYnJlYWs7CgoJCWNhc2UgJ3MnOgoJCQlzZmxhZyA9IDE7CgkJCWdv
dG8gUFJPTVBUOwoKCQljYXNlICd2JzoKCQkJc2ZsYWcgPSAwOwoJCQkvKiBGQUxMVEhST1VHSCAq
LwoKCQlkZWZhdWx0OgoJCQkvKiBJbnRlcmFjdGl2ZSB1c2FnZSBoZWxwLiAqLwpVU0FHRToKCQkJ
aW50X3VzYWdlKCk7ClBST01QVDoKCQkJcHV0Y2hhcignJScpOwoKCQkJLyogUHJvbXB0IHVzZXIg
YWdhaW4uICovCgkJCWNvbnRpbnVlOwoJCX0KCgkJZnJlZShjbWQpOwoJCXJldHVybjsKCX0KCgkv
KgoJICogSWYgdGhlcmUgd2FzIG5vIGVycm9yLCB3ZSByZWNlaXZlZCBhbiBFT0YgZnJvbSBzdGRp
biwgc28gd2UKCSAqIHNob3VsZCBxdWl0LgoJICovClFVSVQ6CglmY2xvc2Uob3V0ZmlsZSk7Cgll
eGl0KDApOwp9CgovKgogKiBUYWtlcyB0d28gc3RyaW5ncywgc2VwYXJhdGVkIGJ5IGEgY29sdW1u
IGRpdmlkZXIuICBOVUxMIHN0cmluZ3MgYXJlCiAqIHRyZWF0ZWQgYXMgZW1wdHkgY29sdW1ucy4g
IElmIHRoZSBkaXZpZGVyIGlzIHRoZSBgICcgY2hhcmFjdGVyLCB0aGUKICogc2Vjb25kIGNvbHVt
biBpcyBub3QgcHJpbnRlZCAoLWwgZmxhZykuICBJbiB0aGlzIGNhc2UsIHRoZSBzZWNvbmQKICog
c3RyaW5nIG11c3QgYmUgTlVMTC4gIFdoZW4gdGhlIHNlY29uZCBjb2x1bW4gaXMgTlVMTCwgdGhl
IGRpdmlkZXIKICogZG9lcyBub3QgcHJpbnQgdGhlIHRyYWlsaW5nIHNwYWNlIGZvbGxvd2luZyB0
aGUgZGl2aWRlciBjaGFyYWN0ZXIuCiAqCiAqIFRha2VzIGludG8gYWNjb3VudCB0aGF0IHRhYnMg
Y2FuIHRha2UgbXVsdGlwbGUgY29sdW1ucy4KICovCnN0YXRpYyB2b2lkCnByaW50bG4oY29uc3Qg
Y2hhciAqczEsIGNvbnN0IGNoYXIgZGl2LCBjb25zdCBjaGFyICpzMikKewoJc2l6ZV90IGNvbDsK
CgkvKiBQcmludCBmaXJzdCBjb2x1bW4uICBTa2lwcyBpZiBzMSA9PSBOVUxMLiAqLwoJY29sID0g
MDsKCWlmIChzMSkgewoJCS8qIFNraXAgYW5nbGUgYnJhY2tldCBhbmQgc3BhY2UuICovCgkJcHJp
bnRjb2woczEsICZjb2wsIHdpZHRoKTsKCgl9CgoJLyogT25seSBwcmludCBsZWZ0IGNvbHVtbi4g
Ki8KCWlmIChkaXYgPT0gJyAnICYmICFzMikgewoJCXB1dGNoYXIoJ1xuJyk7CgkJcmV0dXJuOwoJ
fQoKCS8qIE90aGVyd2lzZSwgd2UgcGFkIHRoaXMgY29sdW1uIHVwIHRvIHdpZHRoLiAqLwoJZm9y
ICg7IGNvbCA8IHdpZHRoOyArK2NvbCkKCQlwdXRjaGFyKCcgJyk7CgoJLyoKCSAqIFByaW50IGNv
bHVtbiBkaXZpZGVyLiAgSWYgdGhlcmUgaXMgbm8gc2Vjb25kIGNvbHVtbiwgd2UgZG9uJ3QKCSAq
IG5lZWQgdG8gYWRkIHRoZSBzcGFjZSBmb3IgcGFkZGluZy4KCSAqLwoJaWYgKCFzMikgewoJCXBy
aW50ZigiICVjXG4iLCBkaXYpOwoJCXJldHVybjsKCX0KCXByaW50ZigiICVjICIsIGRpdik7Cglj
b2wgKz0gMzsKCgkvKiBTa2lwIGFuZ2xlIGJyYWNrZXQgYW5kIHNwYWNlLiAqLwoJcHJpbnRjb2wo
czIsICZjb2wsIGxpbmVfd2lkdGgpOwoKCXB1dGNoYXIoJ1xuJyk7Cn0KCi8qCiAqIFJlYWRzIGEg
bGluZSBmcm9tIGZpbGUgYW5kIHJldHVybnMgYXMgYSBzdHJpbmcuICBJZiBFT0YgaXMgcmVhY2hl
ZCwKICogTlVMTCBpcyByZXR1cm5lZC4gIFRoZSByZXR1cm5lZCBzdHJpbmcgbXVzdCBiZSBmcmVl
ZCBhZnRlcndhcmRzLgogKi8Kc3RhdGljIGNoYXIgKgp4ZmdldHMoRklMRSAqZmlsZSkKewoJY29u
c3QgY2hhciBkZWxpbVszXSA9IHsnXDAnLCAnXDAnLCAnXDAnfTsKCWNoYXIgKnM7CgoJLyogWFhY
IC0gSXMgdGhpcyBuZWNlc3Nhcnk/ICovCgljbGVhcmVycihmaWxlKTsKCglpZiAoIShzID0gZnBh
cnNlbG4oZmlsZSwgTlVMTCwgTlVMTCwgZGVsaW0sIDApKSAmJgoJICAgIGZlcnJvcihmaWxlKSkK
CQllcnIoMiwgImVycm9yIHJlYWRpbmcgZmlsZSIpOwoKCWlmICghcykgewoJCXJldHVybiAoTlVM
TCk7Cgl9CgoJcmV0dXJuIChzKTsKfQoKLyoKICogUGFyc2UgZWQgY29tbWFuZHMgZnJvbSBkaWZm
cGlwZSBhbmQgcHJpbnQgbGluZXMgZnJvbSBmaWxlMSAobGluZXMKICogdG8gY2hhbmdlIG9yIGRl
bGV0ZSkgb3IgZmlsZTIgKGxpbmVzIHRvIGFkZCBvciBjaGFuZ2UpLgogKiBSZXR1cm5zIEVPRiBv
ciAwLgogKi8Kc3RhdGljIGludApwYXJzZWNtZChGSUxFICpkaWZmcGlwZSwgRklMRSAqZmlsZTEs
IEZJTEUgKmZpbGUyKQp7CglzaXplX3QgZmlsZTFzdGFydCwgZmlsZTFlbmQsIGZpbGUyc3RhcnQs
IGZpbGUyZW5kLCBuOwoJLyogZWQgY29tbWFuZCBsaW5lIGFuZCBwb2ludGVyIHRvIGNoYXJhY3Rl
cnMgaW4gbGluZSAqLwoJY2hhciAqbGluZSwgKnAsICpxOwoJY29uc3QgY2hhciAqZXJyc3RyOwoJ
Y2hhciBjLCBjbWQ7CgoJLyogUmVhZCBlZCBjb21tYW5kLiAqLwoJaWYgKCEobGluZSA9IHhmZ2V0
cyhkaWZmcGlwZSkpKQoJCXJldHVybiAoRU9GKTsKCglwID0gbGluZTsKCS8qIEdvIHRvIGNoYXJh
Y3RlciBhZnRlciBsaW5lIG51bWJlci4gKi8KCXdoaWxlIChpc2RpZ2l0KChpbnQpKCpwKSkpCgkJ
KytwOwoJYyA9ICpwOwoJKnArKyA9IDA7CglmaWxlMXN0YXJ0ID0gc3RydG9udW0obGluZSwgMCwg
SU5UX01BWCwgJmVycnN0cik7CglpZiAoZXJyc3RyKQoJCWVycngoMiwgImZpbGUxIHN0YXJ0IGlz
ICVzOiAlcyIsIGVycnN0ciwgbGluZSk7CgoJLyogQSByYW5nZSBpcyBzcGVjaWZpZWQgZm9yIGZp
bGUxLiAqLwoJaWYgKGMgPT0gJywnKSB7CgoJCXEgPSBwOwoJCS8qIEdvIHRvIGNoYXJhY3RlciBh
ZnRlciBmaWxlMmVuZC4gKi8KCQl3aGlsZSAoaXNkaWdpdCgoaW50KSgqcCkpKQoJCQkrK3A7CgkJ
YyA9ICpwOwoJCSpwKysgPSAwOwoJCWZpbGUxZW5kID0gc3RydG9udW0ocSwgMCwgSU5UX01BWCwg
JmVycnN0cik7CgkJaWYgKGVycnN0cikKCQkJZXJyeCgyLCAiZmlsZTEgZW5kIGlzICVzOiAlcyIs
IGVycnN0ciwgbGluZSk7CgkJaWYgKGZpbGUxc3RhcnQgPiBmaWxlMWVuZCkKCQkJZXJyeCgyLCAi
aW52YWxpZCBsaW5lIHJhbmdlIGluIGZpbGUxOiAlcyIsIGxpbmUpOwoKCX0gZWxzZQoJCWZpbGUx
ZW5kID0gZmlsZTFzdGFydDsKCgljbWQgPSBjOwoJLyogQ2hlY2sgdGhhdCBjbWQgaXMgdmFsaWQu
ICovCglpZiAoIShjbWQgPT0gJ2EnIHx8IGNtZCA9PSAnYycgfHwgY21kID09ICdkJykpCgkJZXJy
eCgyLCAiZWQgY29tbWFuZCBub3QgcmVjb2duaXplZDogJWM6ICVzIiwgY21kLCBsaW5lKTsKCglx
ID0gcDsKCS8qIEdvIHRvIGNoYXJhY3RlciBhZnRlciBsaW5lIG51bWJlci4gKi8KCXdoaWxlIChp
c2RpZ2l0KChpbnQpKCpwKSkpCgkJKytwOwoJYyA9ICpwOwoJKnArKyA9IDA7CglmaWxlMnN0YXJ0
ID0gc3RydG9udW0ocSwgMCwgSU5UX01BWCwgJmVycnN0cik7CglpZiAoZXJyc3RyKQoJCWVycngo
MiwgImZpbGUyIHN0YXJ0IGlzICVzOiAlcyIsIGVycnN0ciwgbGluZSk7CgoJLyoKCSAqIFRoZXJl
IHNob3VsZCBlaXRoZXIgYmUgYSBjb21tYSBzaWduaWZ5aW5nIGEgc2Vjb25kIGxpbmUKCSAqIG51
bWJlciBvciB0aGUgbGluZSBzaG91bGQganVzdCBlbmQgaGVyZS4KCSAqLwoJaWYgKGMgIT0gJywn
ICYmIGMgIT0gJ1wwJykKCQllcnJ4KDIsICJpbnZhbGlkIGxpbmUgcmFuZ2UgaW4gZmlsZTI6ICVj
OiAlcyIsIGMsIGxpbmUpOwoKCWlmIChjID09ICcsJykgewoKCQlmaWxlMmVuZCA9IHN0cnRvbnVt
KHAsIDAsIElOVF9NQVgsICZlcnJzdHIpOwoJCWlmIChlcnJzdHIpCgkJCWVycngoMiwgImZpbGUy
IGVuZCBpcyAlczogJXMiLCBlcnJzdHIsIGxpbmUpOwoJCWlmIChmaWxlMnN0YXJ0ID49IGZpbGUy
ZW5kKQoJCQllcnJ4KDIsICJpbnZhbGlkIGxpbmUgcmFuZ2UgaW4gZmlsZTI6ICVzIiwgbGluZSk7
Cgl9IGVsc2UKCQlmaWxlMmVuZCA9IGZpbGUyc3RhcnQ7CgoJLyogQXBwZW5kcyBoYXBwZW4gX2Fm
dGVyXyBzdGF0ZWQgbGluZS4gKi8KCWlmIChjbWQgPT0gJ2EnKSB7CgkJaWYgKGZpbGUxc3RhcnQg
IT0gZmlsZTFlbmQpCgkJCWVycngoMiwgImFwcGVuZCBjYW5ub3QgaGF2ZSBhIGZpbGUxIHJhbmdl
OiAlcyIsCgkJCSAgICBsaW5lKTsKCQlpZiAoZmlsZTFzdGFydCA9PSBTSVpFX1RfTUFYKQoJCQll
cnJ4KDIsICJmaWxlMSBsaW5lIHJhbmdlIHRvbyBoaWdoOiAlcyIsIGxpbmUpOwoJCWZpbGUxc3Rh
cnQgPSArK2ZpbGUxZW5kOwoJfQoJLyoKCSAqIEknbSBub3Qgc3VyZSB3aGF0IHRoZSBkZWFsIGlz
IHdpdGggdGhlIGxpbmUgbnVtYmVycyBmb3IKCSAqIGRlbGV0ZXMsIHRob3VnaC4KCSAqLwoJZWxz
ZSBpZiAoY21kID09ICdkJykgewoJCWlmIChmaWxlMnN0YXJ0ICE9IGZpbGUyZW5kKQoJCQllcnJ4
KDIsICJkZWxldGUgY2Fubm90IGhhdmUgYSBmaWxlMiByYW5nZTogJXMiLAoJCQkgICAgbGluZSk7
CgkJaWYgKGZpbGUyc3RhcnQgPT0gU0laRV9UX01BWCkKCQkJZXJyeCgyLCAiZmlsZTIgbGluZSBy
YW5nZSB0b28gaGlnaDogJXMiLCBsaW5lKTsKCQlmaWxlMnN0YXJ0ID0gKytmaWxlMmVuZDsKCX0K
CgkvKgoJICogQ29udGludWUgcmVhZGluZyBmaWxlMSBhbmQgZmlsZTIgdW50aWwgd2UgcmVhY2gg
bGluZSBudW1iZXJzCgkgKiBzcGVjaWZpZWQgYnkgZGlmZi4gIFNob3VsZCBvbmx5IGhhcHBlbiB3
aXRoIC1JIGZsYWcuCgkgKi8KCWZvciAoOyBmaWxlMWxuIDwgZmlsZTFzdGFydCAmJiBmaWxlMmxu
IDwgZmlsZTJzdGFydDsKCSAgICArK2ZpbGUxbG4sICsrZmlsZTJsbikgewoJCWNoYXIgKnMxLCAq
czI7CgoJCWlmICghKHMxID0geGZnZXRzKGZpbGUxKSkpCgkJCWVycngoMiwgImZpbGUxIHNob3J0
ZXIgdGhhbiBleHBlY3RlZCIpOwoJCWlmICghKHMyID0geGZnZXRzKGZpbGUyKSkpCgkJCWVycngo
MiwgImZpbGUyIHNob3J0ZXIgdGhhbiBleHBlY3RlZCIpOwoKCQkvKiBJZiB0aGUgLWwgZmxhZyB3
YXMgc3BlY2lmaWVkLCBwcmludCBvbmx5IGxlZnQgY29sdW1uLiAqLwoJCWlmIChsZmxhZykgewoJ
CQlmcmVlKHMyKTsKCQkJLyoKCQkJICogWFhYIC0gSWYgLWwgYW5kIC1JIGFyZSBib3RoIHNwZWNp
ZmllZCwgYWxsCgkJCSAqIHVuY2hhbmdlZCBvciBpZ25vcmVkIGxpbmVzIGFyZSBzaG93biB3aXRo
IGEKCQkJICogYCgnIGRpdmlkZXIuICBUaGlzIG1hdGNoZXMgR05VIHNkaWZmLCBidXQgSQoJCQkg
KiBiZWxpZXZlIGl0IGlzIGEgYnVnLiAgSnVzdCBjaGVjayBvdXQ6CgkJCSAqIGdzZGlmZiAtbCAt
SSAnXiQnIHNhbWVmaWxlIHNhbWVmaWxlLgoJCQkgKi8KCQkJaWYgKElmbGFnKQoJCQkJZW5xdWV1
ZShzMSwgJygnLCBOVUxMKTsKCQkJZWxzZQoJCQkJZW5xdWV1ZShzMSwgJyAnLCBOVUxMKTsKCQl9
IGVsc2UKCQkJZW5xdWV1ZShzMSwgJyAnLCBzMik7Cgl9CgkvKiBJZ25vcmUgZGVsZXRlZCBsaW5l
cy4gKi8KCWZvciAoOyBmaWxlMWxuIDwgZmlsZTFzdGFydDsgKytmaWxlMWxuKSB7CgkJY2hhciAq
czsKCgkJaWYgKCEocyA9IHhmZ2V0cyhmaWxlMSkpKQoJCQllcnJ4KDIsICJmaWxlMSBzaG9ydGVy
IHRoYW4gZXhwZWN0ZWQiKTsKCgkJZW5xdWV1ZShzLCAnKCcsIE5VTEwpOwoJfQoJLyogSWdub3Jl
IGFkZGVkIGxpbmVzLiAqLwoJZm9yICg7IGZpbGUybG4gPCBmaWxlMnN0YXJ0OyArK2ZpbGUybG4p
IHsKCQljaGFyICpzOwoKCQlpZiAoIShzID0geGZnZXRzKGZpbGUyKSkpCgkJCWVycngoMiwgImZp
bGUyIHNob3J0ZXIgdGhhbiBleHBlY3RlZCIpOwoKCQkvKiBJZiAtbCBmbGFnIHdhcyBnaXZlbiwg
ZG9uJ3QgcHJpbnQgcmlnaHQgY29sdW1uLiAqLwoJCWlmIChsZmxhZykKCQkJZnJlZShzKTsKCQll
bHNlCgkJCWVucXVldWUoTlVMTCwgJyknLCBzKTsKCX0KCgkvKiBQcm9jZXNzIHVubW9kaWZpZWQg
b3Igc2tpcHBlZCBsaW5lcy4gKi8KCXByb2Nlc3NxKCk7CgoJc3dpdGNoIChjbWQpIHsKCWNhc2Ug
J2EnOgoJCXByaW50YShmaWxlMiwgZmlsZTJlbmQpOwoJCW4gPSBmaWxlMmVuZCAtIGZpbGUyc3Rh
cnQgKyAxOwoJCWJyZWFrOwoKCWNhc2UgJ2MnOgoJCXByaW50YyhmaWxlMSwgZmlsZTFlbmQsIGZp
bGUyLCBmaWxlMmVuZCk7CgkJbiA9IGZpbGUxZW5kIC0gZmlsZTFzdGFydCArIDEgKyAxICsgZmls
ZTJlbmQgLSBmaWxlMnN0YXJ0ICsgMTsKCQlicmVhazsKCgljYXNlICdkJzoKCQlwcmludGQoZmls
ZTEsIGZpbGUxZW5kKTsKCQluID0gZmlsZTFlbmQgLSBmaWxlMXN0YXJ0ICsgMTsKCQlicmVhazsK
CglkZWZhdWx0OgoJCWVycngoMiwgImludmFsaWQgZGlmZiBjb21tYW5kOiAlYzogJXMiLCBjbWQs
IGxpbmUpOwoJfQoKCS8qIFNraXAgdG8gbmV4dCBlZCBsaW5lLiAqLwoJd2hpbGUgKG4tLSkKCQlp
ZiAoIXhmZ2V0cyhkaWZmcGlwZSkpCgkJCWVycngoMiwgImRpZmYgZW5kZWQgZWFybHkiKTsKCgly
ZXR1cm4gKDApOwp9CgovKgogKiBRdWV1ZXMgdXAgYSBkaWZmIGxpbmUuCiAqLwpzdGF0aWMgdm9p
ZAplbnF1ZXVlKGNoYXIgKmxlZnQsIGNoYXIgZGl2LCBjaGFyICpyaWdodCkKewoJc3RydWN0IGRp
ZmZsaW5lICpkaWZmcDsKCglpZiAoIShkaWZmcCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGRpZmZs
aW5lKSkpKQoJCWVycigyLCAiZW5xdWV1ZSIpOwoJZGlmZnAtPmxlZnQgPSBsZWZ0OwoJZGlmZnAt
PmRpdiA9IGRpdjsKCWRpZmZwLT5yaWdodCA9IHJpZ2h0OwoJU0lNUExFUV9JTlNFUlRfVEFJTCgm
ZGlmZmhlYWQsIGRpZmZwLCBkaWZmZW50cmllcyk7Cn0KCi8qCiAqIEZyZWUgYSBkaWZmbGluZSBz
dHJ1Y3R1cmUgYW5kIGl0cyBlbGVtZW50cy4KICovCnN0YXRpYyB2b2lkCmZyZWVkaWZmKHN0cnVj
dCBkaWZmbGluZSAqZGlmZnApCnsKCWZyZWUoZGlmZnAtPmxlZnQpOwoJZnJlZShkaWZmcC0+cmln
aHQpOwoJZnJlZShkaWZmcCk7Cn0KCi8qCiAqIEFwcGVuZCBzZWNvbmQgc3RyaW5nIGludG8gZmly
c3QuICBSZXBlYXRlZCBhcHBlbmRzIHRvIHRoZSBzYW1lIHN0cmluZwogKiBhcmUgY2FjaGVkLCBt
YWtpbmcgdGhpcyBhbiBPKG4pIGZ1bmN0aW9uLCB3aGVyZSBuID0gc3RybGVuKGFwcGVuZCkuCiAq
LwpzdGF0aWMgdm9pZAphc3RyY2F0KGNoYXIgKipzLCBjb25zdCBjaGFyICphcHBlbmQpCnsKCS8q
IExlbmd0aCBvZiBzdHJpbmcgaW4gcHJldmlvdXMgcnVuLiAqLwoJc3RhdGljIHNpemVfdCBvZmZz
ZXQgPSAwOwoJc2l6ZV90IG5ld3NpejsKCS8qCgkgKiBTdHJpbmcgZnJvbSBwcmV2aW91cyBydW4u
ICBDb21wYXJlZCB0byAqcyB0byBzZWUgaWYgd2UgYXJlCgkgKiBkZWFsaW5nIHdpdGggdGhlIHNh
bWUgc3RyaW5nLiAgSWYgc28sIHdlIGNhbiB1c2Ugb2Zmc2V0LgoJICovCglzdGF0aWMgY29uc3Qg
Y2hhciAqb2xkc3RyID0gTlVMTDsKCWNoYXIgKm5ld3N0cjsKCgoJLyoKCSAqIEZpcnN0IHN0cmlu
ZyBpcyBOVUxMLCBzbyBqdXN0IGNvcHkgYXBwZW5kLgoJICovCglpZiAoISpzKSB7CgkJaWYgKCEo
KnMgPSBzdHJkdXAoYXBwZW5kKSkpCgkJCWVycigyLCAiYXN0cmNhdCIpOwoKCQkvKiBLZWVwIHRy
YWNrIG9mIHN0cmluZy4gKi8KCQlvZmZzZXQgPSBzdHJsZW4oKnMpOwoJCW9sZHN0ciA9ICpzOwoK
CQlyZXR1cm47Cgl9CgoJLyoKCSAqICpzIGlzIGEgc3RyaW5nIHNvIGNvbmNhdGVuYXRlLgoJICov
CgoJLyogRGlkIHdlIHByb2Nlc3MgdGhlIHNhbWUgc3RyaW5nIGluIHRoZSBsYXN0IHJ1bj8gKi8K
CS8qCgkgKiBJZiB0aGlzIGlzIGEgZGlmZmVyZW50IHN0cmluZyBmcm9tIHRoZSBvbmUgd2UganVz
dCBwcm9jZXNzZWQKCSAqIGNhY2hlIG5ldyBzdHJpbmcuCgkgKi8KCWlmIChvbGRzdHIgIT0gKnMp
IHsKCQlvZmZzZXQgPSBzdHJsZW4oKnMpOwoJCW9sZHN0ciA9ICpzOwoJfQoKCS8qIFNpemUgPSBz
dHJsZW4oKnMpICsgXG4gKyBzdHJsZW4oYXBwZW5kKSArICdcMCcuICovCgluZXdzaXogPSBvZmZz
ZXQgKyAxICsgc3RybGVuKGFwcGVuZCkgKyAxOwoKCS8qIFJlc2l6ZSAqcyB0byBmaXQgbmV3IHN0
cmluZy4gKi8KCW5ld3N0ciA9IHJlYWxsb2MoKnMsIG5ld3Npeik7CglpZiAobmV3c3RyID09IE5V
TEwpCgkJZXJyKDIsICJhc3RyY2F0Iik7CgkqcyA9IG5ld3N0cjsKCgkvKiAqcyArIG9mZnNldCBz
aG91bGQgYmUgZW5kIG9mIHN0cmluZy4gKi8KCS8qIENvbmNhdGVuYXRlLiAqLwoJc3RybGNweSgq
cyArIG9mZnNldCwgIlxuIiwgbmV3c2l6IC0gb2Zmc2V0KTsKCXN0cmxjYXQoKnMgKyBvZmZzZXQs
IGFwcGVuZCwgbmV3c2l6IC0gb2Zmc2V0KTsKCgkvKiBOZXcgc3RyaW5nIGxlbmd0aCBzaG91bGQg
YmUgZXhhY3RseSBuZXdzaXogLSAxIGNoYXJhY3RlcnMuICovCgkvKiBTdG9yZSBnZW5lcmF0ZWQg
c3RyaW5nJ3MgdmFsdWVzLiAqLwoJb2Zmc2V0ID0gbmV3c2l6IC0gMTsKCW9sZHN0ciA9ICpzOwp9
CgovKgogKiBQcm9jZXNzIGRpZmYgc2V0IHF1ZXVlLCBwcmludGluZywgcHJvbXB0aW5nLCBhbmQg
c2F2aW5nIGVhY2ggZGlmZgogKiBsaW5lIHN0b3JlZCBpbiBxdWV1ZS4KICovCnN0YXRpYyB2b2lk
CnByb2Nlc3NxKHZvaWQpCnsKCXN0cnVjdCBkaWZmbGluZSAqZGlmZnA7CgljaGFyIGRpdmMsICps
ZWZ0LCAqcmlnaHQ7CgoJLyogRG9uJ3QgcHJvY2VzcyBlbXB0eSBxdWV1ZS4gKi8KCWlmIChTSU1Q
TEVRX0VNUFRZKCZkaWZmaGVhZCkpCgkJcmV0dXJuOwoKCS8qIFJlbWVtYmVyIHRoZSBkaXZpZGVy
LiAqLwoJZGl2YyA9IFNJTVBMRVFfRklSU1QoJmRpZmZoZWFkKS0+ZGl2OwoKCWxlZnQgPSBOVUxM
OwoJcmlnaHQgPSBOVUxMOwoJLyoKCSAqIEdvIHRocm91Z2ggc2V0IG9mIGRpZmZzLCBjb25jYXRl
bmF0aW5nIGVhY2ggbGluZSBpbiBsZWZ0IG9yCgkgKiByaWdodCBjb2x1bW4gaW50byB0d28gbG9u
ZyBzdHJpbmdzLCBgbGVmdCcgYW5kIGByaWdodCcuCgkgKi8KCVNJTVBMRVFfRk9SRUFDSChkaWZm
cCwgJmRpZmZoZWFkLCBkaWZmZW50cmllcykgewoJCS8qCgkJICogUHJpbnQgY2hhbmdlZCBsaW5l
cyBpZiAtcyB3YXMgZ2l2ZW4sCgkJICogcHJpbnQgYWxsIGxpbmVzIGlmIC1zIHdhcyBub3QgZ2l2
ZW4uCgkJICovCgkJaWYgKCFzZmxhZyB8fCBkaWZmcC0+ZGl2ID09ICd8JyB8fCBkaWZmcC0+ZGl2
ID09ICc8JyB8fAoJCSAgICBkaWZmcC0+ZGl2ID09ICc+JykKCQkJcHJpbnRsbihkaWZmcC0+bGVm
dCwgZGlmZnAtPmRpdiwgZGlmZnAtPnJpZ2h0KTsKCgkJLyogQXBwZW5kIG5ldyBsaW5lcyB0byBk
aWZmIHNldC4gKi8KCQlpZiAoZGlmZnAtPmxlZnQpCgkJCWFzdHJjYXQoJmxlZnQsIGRpZmZwLT5s
ZWZ0KTsKCQlpZiAoZGlmZnAtPnJpZ2h0KQoJCQlhc3RyY2F0KCZyaWdodCwgZGlmZnAtPnJpZ2h0
KTsKCX0KCgkvKiBFbXB0eSBxdWV1ZSBhbmQgZnJlZSBlYWNoIGRpZmYgbGluZSBhbmQgaXRzIGVs
ZW1lbnRzLiAqLwoJd2hpbGUgKCFTSU1QTEVRX0VNUFRZKCZkaWZmaGVhZCkpIHsKCQlkaWZmcCA9
IFNJTVBMRVFfRklSU1QoJmRpZmZoZWFkKTsKCQlTSU1QTEVRX1JFTU9WRV9IRUFEKCZkaWZmaGVh
ZCwgZGlmZmVudHJpZXMpOwoJCWZyZWVkaWZmKGRpZmZwKTsKCX0KCgkvKiBXcml0ZSB0byBvdXRm
aWxlLCBwcm9tcHRpbmcgdXNlciBpZiBsaW5lcyBhcmUgZGlmZmVyZW50LiAqLwoJaWYgKG91dGZp
bGUpCgkJc3dpdGNoIChkaXZjKSB7CgkJY2FzZSAnICc6IGNhc2UgJygnOiBjYXNlICcpJzoKCQkJ
ZnByaW50ZihvdXRmaWxlLCAiJXNcbiIsIGxlZnQpOwoJCQlicmVhazsKCQljYXNlICd8JzogY2Fz
ZSAnPCc6IGNhc2UgJz4nOgoJCQlwcm9tcHQobGVmdCwgcmlnaHQpOwoJCQlicmVhazsKCQlkZWZh
dWx0OgoJCQllcnJ4KDIsICJpbnZhbGlkIGRpdmlkZXI6ICVjIiwgZGl2Yyk7CgkJfQoKCS8qIEZy
ZWUgbGVmdCBhbmQgcmlnaHQuICovCglmcmVlKGxlZnQpOwoJZnJlZShyaWdodCk7Cn0KCi8qCiAq
IFByaW50IGxpbmVzIGZvbGxvd2luZyBhbiAoYSlwcGVuZCBjb21tYW5kLgogKi8Kc3RhdGljIHZv
aWQKcHJpbnRhKEZJTEUgKmZpbGUsIHNpemVfdCBsaW5lMikKewoJY2hhciAqbGluZTsKCglmb3Ig
KDsgZmlsZTJsbiA8PSBsaW5lMjsgKytmaWxlMmxuKSB7CgkJaWYgKCEobGluZSA9IHhmZ2V0cyhm
aWxlKSkpCgkJCWVycngoMiwgImFwcGVuZCBlbmRlZCBlYXJseSIpOwoJCWVucXVldWUoTlVMTCwg
Jz4nLCBsaW5lKTsKCX0KCglwcm9jZXNzcSgpOwp9CgovKgogKiBQcmludCBsaW5lcyBmb2xsb3dp
bmcgYSAoYyloYW5nZSBjb21tYW5kLCBmcm9tIGZpbGUxbG4gdG8gZmlsZTFlbmQKICogYW5kIGZy
b20gZmlsZTJsbiB0byBmaWxlMmVuZC4KICovCnN0YXRpYyB2b2lkCnByaW50YyhGSUxFICpmaWxl
MSwgc2l6ZV90IGZpbGUxZW5kLCBGSUxFICpmaWxlMiwgc2l6ZV90IGZpbGUyZW5kKQp7CglzdHJ1
Y3QgZmlsZWxpbmUgewoJCVNJTVBMRVFfRU5UUlkoZmlsZWxpbmUpCSBmaWxlZW50cmllczsKCQlj
aGFyCQkJKmxpbmU7Cgl9OwoJU0lNUExFUV9IRUFEKCwgZmlsZWxpbmUpIGRlbHFoZWFkID0gU0lN
UExFUV9IRUFEX0lOSVRJQUxJWkVSKGRlbHFoZWFkKTsKCgkvKiBSZWFkIGxpbmVzIHRvIGJlIGRl
bGV0ZWQuICovCglmb3IgKDsgZmlsZTFsbiA8PSBmaWxlMWVuZDsgKytmaWxlMWxuKSB7CgkJc3Ry
dWN0IGZpbGVsaW5lICpsaW5lcDsKCQljaGFyICpsaW5lMTsKCgkJLyogUmVhZCBsaW5lcyBmcm9t
IGJvdGguICovCgkJaWYgKCEobGluZTEgPSB4ZmdldHMoZmlsZTEpKSkKCQkJZXJyeCgyLCAiZXJy
b3IgcmVhZGluZyBmaWxlMSBpbiBkZWxldGUgaW4gY2hhbmdlIik7CgoJCS8qIEFkZCB0byBkZWxl
dGUgcXVldWUuICovCgkJaWYgKCEobGluZXAgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBmaWxlbGlu
ZSkpKSkKCQkJZXJyKDIsICJwcmludGMiKTsKCQlsaW5lcC0+bGluZSA9IGxpbmUxOwoJCVNJTVBM
RVFfSU5TRVJUX1RBSUwoJmRlbHFoZWFkLCBsaW5lcCwgZmlsZWVudHJpZXMpOwoJfQoKCS8qIFBy
b2Nlc3MgY2hhbmdlZCBsaW5lcy4uICovCglmb3IgKDsgIVNJTVBMRVFfRU1QVFkoJmRlbHFoZWFk
KSAmJiBmaWxlMmxuIDw9IGZpbGUyZW5kOwoJICAgICsrZmlsZTJsbikgewoJCXN0cnVjdCBmaWxl
bGluZSAqZGVsOwoJCWNoYXIgKmFkZDsKCgkJLyogR2V0IGFkZCBsaW5lLiAqLwoJCWlmICghKGFk
ZCA9IHhmZ2V0cyhmaWxlMikpKQoJCQllcnJ4KDIsICJlcnJvciByZWFkaW5nIGFkZCBpbiBjaGFu
Z2UiKTsKCgkJZGVsID0gU0lNUExFUV9GSVJTVCgmZGVscWhlYWQpOwoJCWVucXVldWUoZGVsLT5s
aW5lLCAnfCcsIGFkZCk7CgkJU0lNUExFUV9SRU1PVkVfSEVBRCgmZGVscWhlYWQsIGZpbGVlbnRy
aWVzKTsKCQkvKgoJCSAqIEZyZWUgZmlsZWxpbmUgc3RydWN0dXJlIGJ1dCBub3QgaXRzIGVsZW1l
bnRzIHNpbmNlCgkJICogdGhleSBhcmUgcXVldWVkIHVwLgoJCSAqLwoJCWZyZWUoZGVsKTsKCX0K
CXByb2Nlc3NxKCk7CgoJLyogUHJvY2VzcyByZW1haW5pbmcgbGluZXMgdG8gYWRkLiAqLwoJZm9y
ICg7IGZpbGUybG4gPD0gZmlsZTJlbmQ7ICsrZmlsZTJsbikgewoJCWNoYXIgKmFkZDsKCgkJLyog
R2V0IGFkZCBsaW5lLiAqLwoJCWlmICghKGFkZCA9IHhmZ2V0cyhmaWxlMikpKQoJCQllcnJ4KDIs
ICJlcnJvciByZWFkaW5nIGFkZCBpbiBjaGFuZ2UiKTsKCgkJZW5xdWV1ZShOVUxMLCAnPicsIGFk
ZCk7Cgl9Cglwcm9jZXNzcSgpOwoKCS8qIFByb2Nlc3MgcmVtYWluaW5nIGxpbmVzIHRvIGRlbGV0
ZS4gKi8KCXdoaWxlICghU0lNUExFUV9FTVBUWSgmZGVscWhlYWQpKSB7CgkJc3RydWN0IGZpbGVs
aW5lICpmaWxlcDsKCgkJZmlsZXAgPSBTSU1QTEVRX0ZJUlNUKCZkZWxxaGVhZCk7CgkJZW5xdWV1
ZShmaWxlcC0+bGluZSwgJzwnLCBOVUxMKTsKCQlTSU1QTEVRX1JFTU9WRV9IRUFEKCZkZWxxaGVh
ZCwgZmlsZWVudHJpZXMpOwoJCWZyZWUoZmlsZXApOwoJfQoJcHJvY2Vzc3EoKTsKfQoKLyoKICog
UHJpbnQgZGVsZXRlZCBsaW5lcyBmcm9tIGZpbGUsIGZyb20gZmlsZTFsbiB0byBmaWxlMWVuZC4K
ICovCnN0YXRpYyB2b2lkCnByaW50ZChGSUxFICpmaWxlMSwgc2l6ZV90IGZpbGUxZW5kKQp7Cglj
aGFyICpsaW5lMTsKCgkvKiBQcmludCBvdXQgbGluZXMgZmlsZTFsbiB0byBsaW5lMi4gKi8KCWZv
ciAoOyBmaWxlMWxuIDw9IGZpbGUxZW5kOyArK2ZpbGUxbG4pIHsKCQkvKiBYWFggLSBXaHkgY2Fu
J3QgdGhpcyBoYW5kbGUgc3RkaW4/ICovCgkJaWYgKCEobGluZTEgPSB4ZmdldHMoZmlsZTEpKSkK
CQkJZXJyeCgyLCAiZmlsZTEgZW5kZWQgZWFybHkgaW4gZGVsZXRlIik7CgkJZW5xdWV1ZShsaW5l
MSwgJzwnLCBOVUxMKTsKCX0KCXByb2Nlc3NxKCk7Cn0KCi8qCiAqIEludGVyYWN0aXZlIG1vZGUg
dXNhZ2UuCiAqLwpzdGF0aWMgdm9pZAppbnRfdXNhZ2Uodm9pZCkKewoJcHV0cygiZTpcdGVkaXQg
YmxhbmsgZGlmZlxuIgoJICAgICJlYjpcdGVkaXQgYm90aCBkaWZmcyBjb25jYXRlbmF0ZWRcbiIK
CSAgICAiZWw6XHRlZGl0IGxlZnQgZGlmZlxuIgoJICAgICJlcjpcdGVkaXQgcmlnaHQgZGlmZlxu
IgoJICAgICJsOlx0Y2hvb3NlIGxlZnQgZGlmZlxuIgoJICAgICJyOlx0Y2hvb3NlIHJpZ2h0IGRp
ZmZcbiIKCSAgICAiczpcdHNpbGVudCBtb2RlLS1kb24ndCBwcmludCBpZGVudGljYWwgbGluZXNc
biIKCSAgICAidjpcdHZlcmJvc2UgbW9kZS0tcHJpbnQgaWRlbnRpY2FsIGxpbmVzXG4iCgkgICAg
InE6XHRxdWl0Iik7Cn0KCnN0YXRpYyB2b2lkCnVzYWdlKHZvaWQpCnsKCWV4dGVybiBjaGFyICpf
X3Byb2duYW1lOwoKCWZwcmludGYoc3RkZXJyLAoJICAgICJ1c2FnZTogJXMgWy1hYmRpbHN0V10g
Wy1JIHJlZ2V4cF0gWy1vIG91dGZpbGVdIFstdyB3aWR0aF0gZmlsZTEgZmlsZTJcbiIsCgkgICAg
X19wcm9nbmFtZSk7CglleGl0KDIpOwp9Cg==
--Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g
Content-Type: application/octet-stream;
name="strtonum.c"
Content-Disposition: attachment;
filename="strtonum.c"
Content-Transfer-Encoding: base64
LyoJJE5ldEJTRCQJKi8KLyoJJE9wZW5CU0Q6IHN0cnRvbnVtLmMsdiAxLjYgMjAwNC8wOC8wMyAx
OTozODowMSBtaWxsZXJ0IEV4cCAkCSovCgovKgogKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGVkIFVu
YW5nc3QgYW5kIFRvZGQgTWlsbGVyCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFBlcm1p
c3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUg
Zm9yIGFueQogKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQs
IHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCiAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy
bWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCiAqCiAqIFRIRSBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElF
UwogKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBX
QVJSQU5USUVTIE9GCiAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCiAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElO
RElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKICogV0hBVFNP
RVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVS
IElOIEFOCiAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9V
UyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCiAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNF
IE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAqLwoKI2luY2x1ZGUgPGVycm5vLmg+
CiNpbmNsdWRlIDxsaW1pdHMuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKI2luY2x1ZGUgImNvbW1v
bi5oIgoKI2RlZmluZSBJTlZBTElEICAgICAgICAgMQojZGVmaW5lIFRPT1NNQUxMICAgICAgICAy
CiNkZWZpbmUgVE9PTEFSR0UgICAgICAgIDMKCmxvbmcgbG9uZwpzdHJ0b251bShjb25zdCBjaGFy
ICpudW1zdHIsIGxvbmcgbG9uZyBtaW52YWwsIGxvbmcgbG9uZyBtYXh2YWwsCiAgICBjb25zdCBj
aGFyICoqZXJyc3RycCkKewoJbG9uZyBsb25nIGxsID0gMDsKCWNoYXIgKmVwOwoJaW50IGVycm9y
ID0gMDsKCXN0cnVjdCBlcnJ2YWwgewoJCWNvbnN0IGNoYXIgKmVycnN0cjsKCQlpbnQgZXJyOwoJ
fSBldls0XSA9IHsKCQl7IE5VTEwsCQkwIH0sCgkJeyAiaW52YWxpZCIsCUVJTlZBTCB9LAoJCXsg
InRvbyBzbWFsbCIsCUVSQU5HRSB9LAoJCXsgInRvbyBsYXJnZSIsCUVSQU5HRSB9LAoJfTsKCgll
dlswXS5lcnIgPSBlcnJubzsKCWVycm5vID0gMDsKCWlmIChtaW52YWwgPiBtYXh2YWwpCgkJZXJy
b3IgPSBJTlZBTElEOwoJZWxzZSB7CgkJbGwgPSBzdHJ0b2xsKG51bXN0ciwgJmVwLCAxMCk7CgkJ
aWYgKG51bXN0ciA9PSBlcCB8fCAqZXAgIT0gJ1wwJykKCQkJZXJyb3IgPSBJTlZBTElEOwoJCWVs
c2UgaWYgKChsbCA9PSBMTE9OR19NSU4gJiYgZXJybm8gPT0gRVJBTkdFKSB8fCBsbCA8IG1pbnZh
bCkKCQkJZXJyb3IgPSBUT09TTUFMTDsKCQllbHNlIGlmICgobGwgPT0gTExPTkdfTUFYICYmIGVy
cm5vID09IEVSQU5HRSkgfHwgbGwgPiBtYXh2YWwpCgkJCWVycm9yID0gVE9PTEFSR0U7Cgl9Cglp
ZiAoZXJyc3RycCAhPSBOVUxMKQoJCSplcnJzdHJwID0gZXZbZXJyb3JdLmVycnN0cjsKCWVycm5v
ID0gZXZbZXJyb3JdLmVycjsKCWlmIChlcnJvcikKCQlsbCA9IDA7CgoJcmV0dXJuIChsbCk7Cn0K
--Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g--