Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Aug 2004 15:27:52 +0200
From:      Luigi Pizzirani <l.pizzira@virgilio.it>
To:        ports@FreeBSD.org
Subject:   proposal of ports
Message-ID:  <20040830152752.4c968e56@worklab>

next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.

--Multipart=_Mon__30_Aug_2004_15_27_52_+0200_/i=OrTZVK7=dz9s/
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

Hello, my name is Luigi and I am writing to you, because I would like
you to take a look at two codes of mine. The first is a portscan spoofed
that uses id bug discovered by Antirez to spoof our machine. This is an
example of its use: 
worklab# ./spoofscan -a www.kernel.org -s
62.211.32.82 -l 78 -h 82 -n 6 -t 300000 Stealth Scan by Luigi Pizzirani.
Warning!!! This is a stealth portscanner based on the requirements that
the host we are using for our spoof has no traffic, has not random IP id
and we have all firewalls down. Anyway, being this scanner stealth, it
is far from being 100% reliable. Enjoy it. DISCLAIMER!!! IP SPOOFING, AS
ANY KIND OF FORGEMENT IS AN ILLEGAL PRACTICE. USE THIS SCANNER ONLY FOR
TESTING PURPOSES AND ON YOUR LOCAL AREANETWORK. IN NO EVENT I CONSIDER
MYSELF LIABLE FOR ANY ABUSE OF THIS PROGRAM. Id sequence relative to
62.211.32.82: 564 565 566 567 568 569 It seems that host 62.211.32.82
has no traffic: excellent!!! Id sequence relative to port 78 of host
www.kernel.org via 62.211.32.82: 570 571 572 573 574 575 Hmmm...looks
like 78 is closed. Id sequence relative to port 79 of host
www.kernel.org via 62.211.32.82: 576 577 579 581 583 585 Hmmm...looks
like 79 is OPEN. Id sequence relative to port 80 of host www.kernel.org
via 62.211.32.82: 594 595 597 599 600 602 Hmmm...looks like 80 is OPEN.
Id sequence relative to port 81 of host www.kernel.org via 62.211.32.82:
612 613 614 615 616 617 Hmmm...looks like 81 is closed. Id sequence
relative to port 82 of host www.kernel.org via 62.211.32.82: 618 619 620
621 622 623 Hmmm...looks like 82 is closed. Ports of www.kernel.org that
look like open: 79(finger), 80(http). worklab#

You can find a paper of it at http://www.securitydate.it/SD2004/ (sorry
in Italian :-( , but if you are interested I will translate it)

The second code is a sort of sniffer that that catches incoming ARP
requests for a gateway and answers that the gateway is itself, so if for
example we have a lan with one machine having IP 10.0.0.2 and default
gateway 10.0.0.4, another with 1.2.3.4/1.2.3.6, and the real gw is
192.168.0.254 this tool(installed on the gateway 192.168.0.254) sniffs
for example the arp request: "ARP who-has 1.2.3.6 tell 1.2.3.4" and
replies to 1.2.3.4 with "ARP reply: 1.2.3.6 is-at my_mac_address" (a
sort of ARP poisoning), then it creates the alias 1.2.3.254(ARP is not
routable) and updates its own ARP cache with the couple
1.2.3.4/his_mac_address sending itself a ARP reply. This tool can be
useful for example if a hotel wants to offer connectivity to customers
coming with their laptop and not having DHCP configured, but their own
IP address instead and they don't know/want to change  their LAN
parameters. With it they simply plug and go. It could be misunderstood
with proxy ARP, but there are two fundamental differences: this one runs
in uspace and unlikely proxy ARP that works only with two subnets, this
one works with every one. 

I would be very happy if you take a look at these two codes and tell me
your opinion and what do you think about eventually making the ports of
them.

Looking forward to have a reply my best regards.

Luigi.


--Multipart=_Mon__30_Aug_2004_15_27_52_+0200_/i=OrTZVK7=dz9s/
Content-Type: application/octet-stream;
 name="spoofscan.c"
Content-Disposition: attachment;
 filename="spoofscan.c"
Content-Transfer-Encoding: base64

LyoKICogJElkOiBzcG9vZnNjYW4uYyx2IDAuOSAyMDA0LzAzLzA2IDE3OjI5OjE3IHN2aWF0IEV4
cCAkCiAqIDxzcG9vZmVkIHN0ZWFsdGggcG9ydHNjYW5uZXI+CiAqCiAqIENvcHlyaWdodCAoYykg
MjAwMiBMdWlnaSBQaXp6aXJhbmkgPGwucGl6emlyYUB2aXJnaWxpby5pdD4KICoKICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICogbWV0OiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAogKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIDIuCiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKICogdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlv
bgogKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAogKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCiAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCiAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCiAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgogKiBTVUNIIERBTUFHRS4KICoKICoKICovCgojaW5jbHVkZQk8
c3lzL3R5cGVzLmg+CiNpbmNsdWRlIAk8c3lzL3NvY2tldC5oPgojaW5jbHVkZSAJPG5ldGluZXQv
aW4uaD4KI2luY2x1ZGUgCTxuZXRpbmV0L2luX3N5c3RtLmg+CgojaWZuZGVmIAlfX1VTRV9CU0QK
I2RlZmluZSAJX19VU0VfQlNECiNlbmRpZgoKI2luY2x1ZGUJIDxuZXRpbmV0L2lwLmg+CgojaWZu
ZGVmIAlfX0ZBVk9SX0JTRAojZGVmaW5lIAlfX0ZBVk9SX0JTRAojZW5kaWYKCiNpbmNsdWRlCTxu
ZXRpbmV0L3RjcC5oPgojaW5jbHVkZQk8bmV0aW5ldC9pcF9pY21wLmg+CiNpbmNsdWRlCTxhcnBh
L2luZXQuaD4KI2luY2x1ZGUJPG5ldGRiLmg+CiNpbmNsdWRlCTxzdGRpby5oPgojaW5jbHVkZQk8
c3RkbGliLmg+CiNpbmNsdWRlCTxzdHJpbmcuaD4KI2luY2x1ZGUJPHVuaXN0ZC5oPgoKI2RlZmlu
ZSAJTUFYTlVNUE9SVFMgCTY1NTM1CgovKiBwc2V1ZG90Y3Agc3RydWN0dXJlIHRvIGNhbGN1bGF0
ZSB0Y3AgY2hlY2tzdW0gYXMgc3BlY2lmaWVkIGluIFJGQyA3OTMgKi8Kc3RydWN0IHBzZXVkbyB7
Cgl1aW50MzJfdCBzYWRkcjsKCXVpbnQzMl90IGRhZGRyOwoJY2hhciB1bnVzZWQ7CgljaGFyIHBy
b3RvOwoJdWludDE2X3QgbGVuZ3RoOwp9OwoKY2hhciBwYWNrZXRbMjU2XSwgcGFja2V0MlsyNTZd
LCBwYWNrZXQzWzI1Nl0sIGJ1ZlsyNTZdOwpzdHJ1Y3QgaXAgKmlwID0gKHN0cnVjdCBpcCAqKSBw
YWNrZXQ7IApzdHJ1Y3QgdGNwaGRyICp0Y3AgPSAoc3RydWN0IHRjcGhkciAqKSAocGFja2V0ICsg
c2l6ZW9mKHN0cnVjdCBpcCkpOwpzdHJ1Y3QgcHNldWRvICpwc2V1ZG8gPSAoc3RydWN0IHBzZXVk
byAqKSBwYWNrZXQzOwpzdHJ1Y3QgaXAgKmlwMiA9IChzdHJ1Y3QgaXAgKikgcGFja2V0MjsKc3Ry
dWN0IGljbXAgKmljbXAgPSAoc3RydWN0IGljbXAgKikgKHBhY2tldDIgKyBzaXplb2Yoc3RydWN0
IGlwKSk7CmNoYXIgKmRhdGEgPSBwYWNrZXQgKyBzaXplb2Yoc3RydWN0IGlwKSArIHNpemVvZihz
dHJ1Y3QgdGNwaGRyKTsKY2hhciAqZGF0YTIgPSBwYWNrZXQyICsgc2l6ZW9mKHN0cnVjdCBpcCkg
KyBzaXplb2Yoc3RydWN0IGljbXApOwpzdHJ1Y3QgaXAgKmlwcmVjdiA9IChzdHJ1Y3QgaXAgKikg
YnVmOwoKdm9pZAkJdXNhZ2UoY2hhciAqKTsKdm9pZAkJcHJpbnRfc2VydmljZSh1aW50MTZfdCk7
CnVpbnQxNl90CWNoZWNrc3VtKHVpbnQxNl90KiwgaW50KTsKdWludDE2X3QJc2VuZF9pY21wKGlu
dCwgaW50LCBzdHJ1Y3QgaXAqLCBzdHJ1Y3Qgc29ja2FkZHJfaW4sIHN0cnVjdCBzb2NrYWRkcl9p
bik7CnZvaWQgCQlzZW5kX3RjcChpbnQsIHN0cnVjdCBpcCosIHN0cnVjdCBzb2NrYWRkcl9pbiwg
c3RydWN0IHNvY2thZGRyX2luLCBpbnQpOwppbnQgCQljaGVja190cmFmZmljKGludCwgaW50LCBz
dHJ1Y3Qgc29ja2FkZHJfaW4sIHN0cnVjdCBzb2NrYWRkcl9pbiwgaW50LCBjaGFyKik7CgppbnQK
bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKCWludCBzLCBzMiwgczMsIGNoLCBvcGVuX3Bv
cnRzW01BWE5VTVBPUlRTXTsKCXJlZ2lzdGVyIGludCBpLCBqLCBoLCBrOwoJdWludDE2X3QgaWRb
MTAwXSwgYVsxMDBdLCBiWzEwMF07CglpbnQgb24gPSAxOwoJaW50ICpwID0gb3Blbl9wb3J0czsK
CXJlZ2lzdGVyIGludCB0ID0gMDsJCgljb25zdCBpbnQgKm9wdHZhbCA9ICZvbjsKCWNoYXIgKnRh
cmdldF9ob3N0LCAqc2lsZW50X2hvc3QsICpsb3dfcG9ydCwgKmhpZ2hfcG9ydCwgKm51bV9wYWNr
ZXRzLCAqdGltZW91dDsKCXN0cnVjdCBob3N0ZW50ICpob3N0ZW50LCAqaG9zdGVudDI7CglzdHJ1
Y3Qgc29ja2FkZHJfaW4gc2luLCBzaW4yLCBzaW4zOwoKCSAvKiBTZWN1cml0eSAqLwoKICAgICAg
ICBpZiAoZ2V0dWlkKCkgIT0gZ2V0ZXVpZCgpKSB7CiAgICAgICAgICAgICAgICBwdXRzKCJTdGVh
bHRoIFNjYW4gZG9lc24ndCBydW4gd2l0aCArcyBiaXQgc2V0LiIpOwoJCWV4aXQoMSk7Cgl9CgoJ
aWYgKGdldHVpZCgpICE9IDApIHsgCiAgICAgICAgICAgICAgICBwdXRzKCJTdGVhbHRoIFNjYW4g
bXVzdCBydW4gYXMgcm9vdC4iKTsKCQlleGl0KDEpOwoJfQkKCQoJcHV0cygiXG5TdGVhbHRoIFNj
YW4gYnkgTHVpZ2kgUGl6emlyYW5pLlxuIik7CglwdXRzKCJXYXJuaW5nISEhIFRoaXMgaXMgYSBz
dGVhbHRoIHBvcnRzY2FubmVyIGJhc2VkIG9uIHRoZSByZXF1aXJlbWVudHMgdGhhdCB0aGUgaG9z
dCB3ZSBhcmUgdXNpbmcgZm9yIG91ciBzcG9vZiIpOwoJcHV0cygiaGFzIG5vIHRyYWZmaWMsIGhh
cyBub3QgcmFuZG9tIElQIGlkIGFuZCB3ZSBoYXZlIGFsbCBmaXJld2FsbHMgZG93bi4gQW55d2F5
LCBiZWluZyB0aGlzIHNjYW5uZXIgc3RlYWx0aCwgaXQiKTsKIAlwdXRzKCJpcyBmYXIgZnJvbSBi
ZWluZyAxMDAlIHJlbGlhYmxlLiBFbmpveSBpdC5cbiIpOwoJcHV0cygiRElTQ0xBSU1FUiEhISBJ
UCBTUE9PRklORywgQVMgQU5ZIEtJTkQgT0YgRk9SR0VNRU5UIElTIEFOIElMTEVHQUwgUFJBQ1RJ
Q0UuIFVTRSIpOwoJcHV0cygiVEhJUyBTQ0FOTkVSIE9OTFkgRk9SIFRFU1RJTkcgUFVSUE9TRVMg
QU5EIE9OIFlPVVIgTE9DQUwgQVJFQSBORVRXT1JLLiBJTiBOTyBFVkVOVCIpOwoJcHV0cygiSSBD
T05TSURFUiBNWVNFTEYgTElBQkxFIEZPUiBBTlkgQUJVU0UgT0YgVEhJUyBQUk9HUkFNLlxuIik7
CgoJaWYgKGFyZ2MgIT0gMTMpCgkJdXNhZ2UoYXJndlswXSk7CgoJd2hpbGUgKCAoY2ggPSBnZXRv
cHQoYXJnYywgYXJndiwgImE6czpsOmg6bjp0OiIpKSAhPSAtMSkgCiAgICAgICAgICAgICAgICBz
d2l0Y2goY2gpIHsKICAgICAgICAgICAgICAgIGNhc2UgJ2EnOgogICAgICAgICAgICAgICAgICAg
ICAgICB0YXJnZXRfaG9zdCA9IGFyZ3Zbb3B0aW5kIC0gMV07CiAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOyAgCgogICAgICAgICAgICAgICAgY2FzZSAncyc6CiAgICAgICAgICAgICAgICAg
ICAgICAgIHNpbGVudF9ob3N0ID0gYXJndltvcHRpbmQgLSAxXTsKCQkJYnJlYWs7CiAgICAgICAg
ICAgICAgICBjYXNlICdsJzoKICAgICAgICAgICAgICAgICAgICAgICAgbG93X3BvcnQgPSBhcmd2
W29wdGluZCAtIDFdOwoJCQlicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgogICAgICAg
ICAgICAgICAgICAgICAgICBoaWdoX3BvcnQgPSBhcmd2W29wdGluZCAtIDFdOwoJCQlicmVhazsK
CQljYXNlICduJzogCgkJCW51bV9wYWNrZXRzID0gYXJndltvcHRpbmQgLSAxXTsKCQkJaWYgKGF0
b2kobnVtX3BhY2tldHMpID4gMTAwKSB7CgkJCQlwdXRzKCJZb3UgY2Fubm90IHNlbmQgbW9yZSB0
aGFuIDEwMCBwYWNrZXRzLlxuIik7CgkJCQlleGl0KDEpOwoJCQl9IAoJCQlicmVhazsKICAgICAg
ICAgICAgICAgIGNhc2UgJ3QnOgogICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gYXJn
dltvcHRpbmQgLSAxXTsKCQkJYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICc/JzoKICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UoYXJndlswXSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
IH0KCgkqcCA9IDA7CgoJaWYgKCAocyA9IHNvY2tldChQRl9JTkVULCBTT0NLX1JBVywgSVBQUk9U
T19SQVcpKSA8IDApIHsKICAgICAgICAgICAgICAgIHBlcnJvcigic29ja2V0Iik7CiAgICAgICAg
ICAgICAgICBleGl0KDEpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAoczIgPSBzb2NrZXQoUEZf
SU5FVCwgU09DS19SQVcsIElQUFJPVE9fUkFXKSkgPCAwKSB7CiAgICAgICAgICAgICAgICBwZXJy
b3IoInNvY2tldCIpOwogICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICB9CgoJIGlmICgg
KHMzID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfUkFXLCBJUFBST1RPX0lDTVApKSA8IDApIHsKICAg
ICAgICAgICAgICAgIHBlcnJvcigic29ja2V0Iik7CiAgICAgICAgICAgICAgICBleGl0KDEpOwog
ICAgICAgIH0KCglzZXRzb2Nrb3B0KHMsIElQUFJPVE9fSVAsIElQX0hEUklOQ0wsIG9wdHZhbCwg
c2l6ZW9mKG9uKSk7CglzZXRzb2Nrb3B0KHMyLCBJUFBST1RPX0lQLCBJUF9IRFJJTkNMLCBvcHR2
YWwsIHNpemVvZihvbikpOwoKCW1lbXNldCgmc2luLCAwLCBzaXplb2Yoc2luKSk7CgltZW1zZXQo
JnNpbjIsIDAsIHNpemVvZihzaW4pKTsKCW1lbXNldCgmc2luMywgMCwgc2l6ZW9mKHNpbikpOwoK
CW1lbXNldChpcCwgMCwgc2l6ZW9mKHN0cnVjdCBpcCkpOwoJbWVtc2V0KGlwMiwgMCwgc2l6ZW9m
KHN0cnVjdCBpcCkpOwoKCW1lbXNldChpY21wLCAwLCBzaXplb2Yoc3RydWN0IGljbXApKTsKCglt
ZW1zZXQoaXByZWN2LCAwLCBzaXplb2Yoc3RydWN0IGlwKSk7CgoJc2luLnNpbl9mYW1pbHkgPSBz
aW4yLnNpbl9mYW1pbHkgPSBzaW4zLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwoKCSAvKiB0YXJnZXQg
aG9zdCdzIGlwIGFkZHJlc3MgKi8KICAgICAgICBpZiAoIChob3N0ZW50ID0gZ2V0aG9zdGJ5bmFt
ZSh0YXJnZXRfaG9zdCkpKSAKICAgICAgICAgICAgICAgIG1lbWNweSAoJnNpbi5zaW5fYWRkciwg
aG9zdGVudC0+aF9hZGRyLCBob3N0ZW50LT5oX2xlbmd0aCk7CiAgICAgICAgZWxzZSBpZiAoIChp
bmV0X3B0b24oQUZfSU5FVCwgdGFyZ2V0X2hvc3QsICZzaW4uc2luX2FkZHIpKSAhPSBJTkFERFJf
Tk9ORSkgewogICAgICAgICAgICAgICAgaGVycm9yKCJnZXRob3N0YnluYW1lIik7ICAKICAgICAg
ICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgfQoKICAgICAgICAvKiBzaWxlbnQgaG9zdCdzIGlw
IGFkZHJlc3MgKi8KICAgICAgICBpZiAoIChob3N0ZW50MiA9IGdldGhvc3RieW5hbWUoc2lsZW50
X2hvc3QpKSkgCiAgICAgICAgICAgICAgICBtZW1jcHkgKCZzaW4yLnNpbl9hZGRyLCBob3N0ZW50
Mi0+aF9hZGRyLCBob3N0ZW50Mi0+aF9sZW5ndGgpOwogICAgICAgIGVsc2UgaWYgKCAoaW5ldF9w
dG9uKEFGX0lORVQsIHNpbGVudF9ob3N0LCAmc2luMi5zaW5fYWRkcikpICE9IElOQUREUl9OT05F
KSB7CiAgICAgICAgICAgICAgICBoZXJyb3IoImdldGhvc3RieW5hbWUiKTsKICAgICAgICAgICAg
ICAgIGV4aXQoMSk7Cgl9CgoJc2luMy5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5Z
KTsgIC8qbXkgb3duIGlwIGFkZHJlc3MgKi8KCglpZiAoY2hlY2tfdHJhZmZpYyhzMiwgczMsIHNp
bjMsIHNpbjIsIGF0b2kobnVtX3BhY2tldHMpLCBzaWxlbnRfaG9zdCkpCgkJZXhpdCgxKTsgCgoJ
Lyogc2VuZHMgaWNtcCBwYWNrZXRzIHRvIHRoZSBkdW1iIGhvc3QgYW5kIHRjcCBwYWNrZXRzIHdp
dGggU1lOIGZsYWcgc2V0IHRvIHRoZSB0YXJnZXQgaG9zdCAqLwogCWZvciAoaSA9IGF0b2kobG93
X3BvcnQpOyBpIDw9IGF0b2koaGlnaF9wb3J0KTsgaSsrKSB7CgkJdXNsZWVwKGF0b2kodGltZW91
dCkpOwoKCQlwcmludGYoIklkIHNlcXVlbmNlIHJlbGF0aXZlIHRvIHBvcnQgJWQgb2YgaG9zdCAl
cyB2aWEgJXM6XHRcdCIsIGksIHRhcmdldF9ob3N0LCBzaWxlbnRfaG9zdCk7CgoJCXRjcC0+dGhf
ZHBvcnQgPSBzaW4uc2luX3BvcnQgPSBzaW4yLnNpbl9wb3J0ID0gKHVpbnQxNl90KSBpOwoKCQlm
b3IgKGogPSAwOyBqIDwgYXRvaShudW1fcGFja2V0cyk7IGorKykgewoJCQlpY21wLT5pY21wX3Nl
cSA9IGh0b25zKCh1aW50MTZfdCkgaik7CgkJCWlkW2pdID0gc2VuZF9pY21wKHMyLCBzMyAsIGlw
Miwgc2luMywgc2luMik7CgkJCXNlbmRfdGNwKHMsIGlwLCAgc2luMiwgc2luLCBpKTsKCQkJcHJp
bnRmKCIlZFx0IiwgaWRbal0pOwoJCX0KCQkKCQlrID0gMTsKCQkKCQlmb3IgKGogPSAwOyBqIDwg
YXRvaShudW1fcGFja2V0cykgLSAxOyBqKyspIAogICAgICAgIAkgICAgICAgIGFbal0gPSBpZFtq
ICsgMV0gLSBpZFtqXTsKCgkJZm9yIChqID0gMDsgaiA8IGF0b2kobnVtX3BhY2tldHMpIC0gMjsg
aisrKSB7CgkJCWJbal0gPSAoYVtqICsgMV0gPT0gYVtqXSk7CgkJCWsgPSAoayAmJiBiW2pdKTsK
CQl9CgkKCS8qIGlmIGlkIGZpZWxkIGluY3JlYXNlcyBjb25zdGFudGx5IGFuZCB0aGUgc2lsZW50
IGhvc3QgaGFzIHN0aWxsIG5vIHRyYWZmaWMgdGhlIHBvcnQgbXVzdCBiZSBjbG9zZWQsIG90aGVy
d2lzZSBpdCBtdXN0IGJlIG9wZW4gKi8KCgkJZm9yIChqID0gMDsgaiA8IGF0b2kobnVtX3BhY2tl
dHMpIC0gMTsgaisrICkgCiAgICAgICAgICAgICAgIAkJaWYgKCFpZFtqXSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAJcHV0cygiXG5JZCBmaWVsZCBtdXN0IG5vdCBiZSAwLiBQbGVhc2UgdHJ5
IGFub3RoZXIgaG9zdC5cbiIpOwoJCQkJcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAJfQoKICAg
ICAgICAgICAgICAgaWYgKCFrKSB7IAoJCQl1c2xlZXAoYXRvaSh0aW1lb3V0KSk7CgoJCQlmb3Ig
KGggPSAwOyBoIDwgYXRvaShudW1fcGFja2V0cyk7IGgrKykgCiAgICAgICAgICAgICAgICAgICAg
ICAgCQlpZFtoXSA9IHNlbmRfaWNtcChzMiwgczMsIGlwMiwgc2luMywgc2luMik7CgoJCQlrID0g
MTsKCQkJCQoJCQlmb3IgKGogPSAwOyBqIDwgYXRvaShudW1fcGFja2V0cykgLSAxOyBqKyspIAog
CSAgICAgICAgICAgICAgICAgICAgICAgYVtqXSA9IGlkW2ogKyAxXSAtIGlkW2pdOwoKCQkJZm9y
IChqID0gMDsgaiA8IGF0b2kobnVtX3BhY2tldHMpIC0gMjsgaisrKSB7CiAgICAgICAgICAgICAg
IAkJICAgICAgIGJbal0gPSAoYVtqICsgMV0gPT0gYVtqXSk7CiAgICAgICAgICAgICAgICAJICAg
ICAgIGsgPSAoayAmJiBiW2pdKTsKCQkJfQoKCQkJaWYgKGspIHsKCQkJCXByaW50ZigiXGFIbW1t
Li4ubG9va3MgbGlrZSAlZCBpcyBPUEVOLlxuIiwgaSk7CgkJCQlvcGVuX3BvcnRzW3QrK10gPSBp
OwoJCQl9CgkJCWVsc2UgewoJCQkJcHJpbnRmKCJcbkhvc3QgJXMgbm93IGhhcyB0b28gbXVjaCB0
cmFmZmljLiBQbGVhc2UgY2hhbmdlIGl0IG9yIHJldHJ5IGxhdGVyLlN0b3AgYXQgcG9ydCAlZC5c
biIsIHNpbGVudF9ob3N0LCBpKTsKCQkJCXByaW50ZigiXG5Qb3J0cyBvZiAlcyB0aGF0IGxvb2sg
bGlrZSBvcGVuOlx0IiwgdGFyZ2V0X2hvc3QpOwoJCQkJd2hpbGUgKCpwKQogICAgICAgICAgICAg
ICAgCQkJcHJpbnRfc2VydmljZSgodWludDE2X3QpICpwKyspOwoJCQkJcHV0cygiXGJcYi4iKTsK
ICAgICAgCQkgICAgICAgICAJZXhpdCgxKTsKCQkJfQoJCX0gCgkJZWxzZSAKCQkJcHJpbnRmKCJI
bW1tLi4ubG9va3MgbGlrZSAlZCBpcyBjbG9zZWQuXG4iLCBpKTsKCX0KCQoJcHJpbnRmKCJcblBv
cnRzIG9mICVzIHRoYXQgbG9vayBsaWtlIG9wZW46XHQiLCB0YXJnZXRfaG9zdCk7CgoJd2hpbGUg
KCpwKSAKCQlwcmludF9zZXJ2aWNlKCh1aW50MTZfdCkgKnArKyk7CgkKCXB1dHMoIlxiXGIuIik7
CgoJY2xvc2Uocyk7CgljbG9zZShzMik7CgljbG9zZShzMyk7CgoJZXhpdCgwKTsKfQkKCnZvaWQK
dXNhZ2UoY2hhciAqaG93KQp7CiAgICAgICAgcHJpbnRmKCJVc2FnZTogJXMgLWEgdGFyZ2V0X2hv
c3QgLXMgc2lsZW50X2hvc3QgLWwgbG93X3BvcnQgLWggaGlnaF9wb3J0IC1uIG51bV9wYWNrZXRz
IC10IHRpbWVvdXQoaW4gbWljcm9zZWNvbmRzKS5cbiIsIGhvdyk7CiAgICAgICAgZXhpdCgxKTsK
fQoKdm9pZApwcmludF9zZXJ2aWNlKHVpbnQxNl90IHBvcnQpCnsKICAgICAgICBzdHJ1Y3Qgc2Vy
dmVudCAqc2VydmVudDsKCiAgICAgICAgaWYgKCAoc2VydmVudCA9IGdldHNlcnZieXBvcnQoaHRv
bnMocG9ydCksICJ0Y3AiKSkpCiAgICAgICAgICAgICAgICBwcmludGYoIiVkKCVzKSwgIiwgcG9y
dCwgc2VydmVudC0+c19uYW1lKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBwcmludGYo
IiVkLCAiLCBwb3J0KTsKfQoKICAgICAgICAvKiB1c3VhbCBjaGVja3N1bSAqLwp1aW50MTZfdApj
aGVja3N1bSh1aW50MTZfdCAqYWRkciwgaW50IGxlbikKewogICAgICAgIHJlZ2lzdGVyIGludCBz
dW0gPSAwOwogICAgICAgIHVpbnQxNl90IGFuc3dlciA9IDA7CiAgICAgICAgcmVnaXN0ZXIgdWlu
dDE2X3QgKncgPSBhZGRyOwogICAgICAgIHJlZ2lzdGVyIGludCBubGVmdCA9IGxlbjsKICAgICAg
ICB3aGlsZSAobmxlZnQgPiAxKSB7CiAgICAgICAgICAgICAgICBzdW0gKz0gKncrKzsKICAgICAg
ICAgICAgICAgIG5sZWZ0IC09IDI7CiAgICAgICAgfQoKICAgICAgICBpZiAobmxlZnQgPT0gMSkg
ewogICAgICAgICAgICAgICAgKih1aW50MTZfdCAqKSAoJmFuc3dlcikgPSAqKHVpbnQxNl90ICop
IHc7CiAgICAgICAgICAgICAgICBzdW0gKz0gYW5zd2VyOwogICAgICAgIH0KCiAgICAgICAgLyog
YWRkIGJhY2sgY2Fycnkgb3V0cyBmcm9tIHRvcCAxNiBiaXRzIHRvIGxvdyAxNiBiaXRzICovCiAg
ICAgICAgc3VtID0gKHN1bSA+PiAxNikgKyAoc3VtICYgMHhmZmZmKTsgLyogYWRkIGhpIDE2IHRv
IGxvdyAxNiAqLwogICAgICAgIHN1bSArPSAoc3VtID4+IDE2KTsgLyogYWRkIGNhcnJ5ICovCiAg
ICAgICAgYW5zd2VyID0gfnN1bTsgLyogdHJ1bmNhdGUgdG8gMTYgYml0cyAqLwogICAgICAgIHJl
dHVybiAoYW5zd2VyKTsKfQoKLyogc2VuZHMgaWNtcCBwYWNrZXRzIHRvIHNpbGVudCBob3N0ICov
CnVpbnQxNl90CnNlbmRfaWNtcChpbnQgc2VuZHNvY2ssIGludCByZWN2c29jaywgc3RydWN0IGlw
ICppcCwgc3RydWN0IHNvY2thZGRyX2luIG15c2luLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gZHVtYnNp
bikKewogICAgICAgIGludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CiAgICAg
ICAgcmVnaXN0ZXIgaW50IGk7CiAgICAgICAgdWludDE2X3QgaWQ7CgogICAgICAgIGlwLT5pcF9o
bCA9IDU7CiAgICAgICAgaXAtPmlwX3YgPSA0OwogICAgICAgIGlwLT5pcF90b3MgPSAwOwogICAg
ICAgIGlwLT5pcF9sZW4gPSBzaXplb2Yoc3RydWN0IGlwKSArIHNpemVvZihzdHJ1Y3QgaWNtcCkg
KyA0ODsKICAgICAgICBpcC0+aXBfaWQgPSBodG9ucygodWludDE2X3QpIHJhbmRvbSgpKTsKICAg
ICAgICBpcC0+aXBfb2ZmID0gIDA7CiAgICAgICAgaXAtPmlwX3R0bCA9IDI1NTsKICAgICAgICBp
cC0+aXBfcCA9IElQUFJPVE9fSUNNUDsKICAgICAgICBpcC0+aXBfc3VtID0gMDsKICAgICAgICBp
cC0+aXBfc3JjID0gbXlzaW4uc2luX2FkZHI7CiAgICAgICAgaXAtPmlwX2RzdCA9IGR1bWJzaW4u
c2luX2FkZHI7CiAKICAgICAgICBpY21wLT5pY21wX3R5cGUgPSA4OyAvKiBlY2hvIHJlcXVlc3Qg
Ki8KICAgICAgICBpY21wLT5pY21wX2NvZGUgPSAwOwogICAgICAgIGljbXAtPmljbXBfY2tzdW0g
PSAwOwogICAgICAgIGljbXAtPmljbXBfaWQgPSBodG9ucygodWludDE2X3QpIHJhbmRvbSgpKTsg
LyogdGh4IGF3Z24gZm9yIGhhdmluZyB0b2xkIG1lIGhvdyB0byBmaWxsIHRoaXMgZmllbGQgKi8K
IAogICAgICAgIC8qIHRoeCBhZ2FpbiwgbWFuIGZvciB0aGlzIHRvbyAqLwogICAgICAgIGZvciAo
aSA9IDA7IGkgPCA0ODsgaSsrKQogICAgICAgICAgICAgICAgZGF0YTJbaV0gPSBpICsgODsKICAg
ICAgICAKICAgICAgICBpY21wLT5pY21wX2Nrc3VtID0gY2hlY2tzdW0oKHVpbnQxNl90ICopIGlj
bXAsIChzaXplb2Yoc3RydWN0IGljbXApICsgNDgpICYgfjEpOwogICAgICAgICAgICAgICAgCiAg
ICAgICAgc2VuZHRvKHNlbmRzb2NrLCBwYWNrZXQyLCBpcC0+aXBfbGVuLCAwLCAoc3RydWN0IHNv
Y2thZGRyICopICZkdW1ic2luLCBzaXplKTsKICAgICAgICByZWN2ZnJvbShyZWN2c29jaywgYnVm
LCBzaXplb2Yoc3RydWN0IGlwKSArIHNpemVvZihzdHJ1Y3QgaWNtcCkgKyBzaXplb2YoZGF0YSks
IDAsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmR1bWJzaW4sICZzaXplKTsKICAgICAgICBpZCA9IG50
b2hzKGlwcmVjdi0+aXBfaWQpOwogIAogICAgICAgIHJldHVybiAoaWQpOwp9CgovKiBzZW5kcyB0
Y3Agc3Bvb2ZlZCBwYWNrZXRzIHRvIHRhcmdldCBob3N0IHdpdGggc2lsZW50J3MgaG9zdCBzb3Vy
Y2UgaXAgKi8Kdm9pZApzZW5kX3RjcChpbnQgc29jaywgc3RydWN0IGlwICppcCwgc3RydWN0IHNv
Y2thZGRyX2luIGR1bWJzaW4sIHN0cnVjdCBzb2NrYWRkcl9pbiB0YXJnZXRzaW4sIGludCBpKQp7
CiAgICAgICAgbWVtc2V0KHBzZXVkbywgMCwgc2l6ZW9mKHN0cnVjdCBwc2V1ZG8pKTsKCiAgICAg
ICAgaXAtPmlwX2hsID0gNTsKICAgICAgICBpcC0+aXBfdiA9IDQ7CiAgICAgICAgaXAtPmlwX3Rv
cyA9IDA7CiAgICAgICAgaXAtPmlwX2xlbiA9IHNpemVvZihzdHJ1Y3QgaXApICsgc2l6ZW9mKHN0
cnVjdCB0Y3BoZHIpOwogICAgICAgIGlwLT5pcF9pZCA9IGh0b25zKCh1aW50MTZfdCkgcmFuZG9t
KCkpOwogICAgICAgIGlwLT5pcF9vZmYgPSAgMDsKICAgICAgICBpcC0+aXBfdHRsID0gMjU1Owog
ICAgICAgIGlwLT5pcF9wID0gSVBQUk9UT19UQ1A7CiAgICAgICAgaXAtPmlwX3N1bSA9IDA7CiAg
ICAgICAgaXAtPmlwX3NyYyA9IGR1bWJzaW4uc2luX2FkZHI7CiAgICAgICAgaXAtPmlwX2RzdCA9
IHRhcmdldHNpbi5zaW5fYWRkcjsKCiAgICAgICAgcHNldWRvLT5zYWRkciA9IGlwLT5pcF9zcmMu
c19hZGRyOwogICAgICAgIHBzZXVkby0+ZGFkZHIgPSBpcC0+aXBfZHN0LnNfYWRkcjsKICAgICAg
ICBwc2V1ZG8tPnVudXNlZCA9IDA7CiAgICAgICAgcHNldWRvLT5wcm90byA9IElQUFJPVE9fVENQ
OwogICAgICAgIHBzZXVkby0+bGVuZ3RoID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKTsK
CiAgICAgICAgdGNwLT50aF9zcG9ydCA9IGh0b25zKHJhbmQoKSk7CiAgICAgICAgdGNwLT50aF9k
cG9ydCA9IGh0b25zKCh1aW50MTZfdClpKTsKICAgICAgICB0Y3AtPnRoX3NlcSA9IGh0b25sKHJh
bmRvbSgpKTsKICAgICAgICB0Y3AtPnRoX2FjayA9IDA7CiAgICAgICAgdGNwLT50aF9vZmYgPSA1
OwogICAgICAgIHRjcC0+dGhfZmxhZ3MgPSBUSF9TWU47CiAgICAgICAgdGNwLT50aF93aW4gPSBo
dG9ucyg2NTUzNSk7CiAgICAgICAgdGNwLT50aF9zdW0gPSAwOwogICAgICAgIHRjcC0+dGhfdXJw
ID0wOwoKICAgICAgICBtZW1jcHkocGFja2V0MywgcHNldWRvLCBzaXplb2Yoc3RydWN0IHBzZXVk
bykpOwogICAgICAgIG1lbWNweShwYWNrZXQzICsgc2l6ZW9mKHN0cnVjdCBwc2V1ZG8pLCB0Y3As
IHNpemVvZihzdHJ1Y3QgdGNwaGRyKSk7CiAgICAgICAgbWVtc2V0KHBhY2tldDMgKyBzaXplb2Yo
c3RydWN0IHBzZXVkbykgKyBzaXplb2Yoc3RydWN0IHRjcGhkciksIDAsIDEyKTsKCiAgICAgICAg
dGNwLT50aF9zdW0gPSBjaGVja3N1bSgodWludDE2X3QgKikgcGFja2V0MywgKHNpemVvZihzdHJ1
Y3QgcHNldWRvKSArIHNpemVvZihzdHJ1Y3QgdGNwaGRyKSArIDEyKSAmIH4xKTsKCiAgICAgICAg
c2VuZHRvKHNvY2ssIHBhY2tldCwgaXAtPmlwX2xlbiwgMCwgKHN0cnVjdCBzb2NrYWRkciAqKSAm
dGFyZ2V0c2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Cn0KCi8qIHZlcmlmaWVzIGlm
IHRoZSBzaWxlbnQgaG9zdCBpcyByZWFsbHkgc2lsZW50OikgKi8KaW50CmNoZWNrX3RyYWZmaWMo
aW50IHNlbmRzb2NrLCBpbnQgcmVjdnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9pbiBteXNpbiwgc3Ry
dWN0IHNvY2thZGRyX2luIGR1bWJzaW4sIGludCBucGFjaywgY2hhciogaG9zdCkKeyAgIAogICAg
ICAgIGludCBrOwogICAgICAgIHJlZ2lzdGVyIGludCBpOwogICAgICAgIHVpbnQxNl90IGlkWzEw
MF0sIGFbMTAwXSwgYlsxMDBdOwogICAgICAgIAogICAgICAgIHByaW50ZigiSWQgc2VxdWVuY2Ug
cmVsYXRpdmUgdG8gJXM6XHRcdCIsIGhvc3QpOwoKICAgICAgICBrID0gMTsKICAgICAgICAKICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgbnBhY2s7IGkrKykgewogICAgICAgICAgICAgICAgaWNtcC0+
aWNtcF9zZXEgPSBodG9ucygodWludDE2X3QpaSk7CiAgICAgICAgICAgICAgICBpZFtpXSA9IHNl
bmRfaWNtcChzZW5kc29jaywgcmVjdnNvY2ssIGlwMiwgbXlzaW4sIGR1bWJzaW4pOwogICAgICAg
ICAgICAgICAgcHJpbnRmKCIlZFx0IiwgaWRbaV0pOwogICAgICAgIH0KICAgICAgICAKICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgbnBhY2sgLSAxOyBpKyspIAogICAgICAgICAgICAgICAgYVtpXSA9
IGlkW2kgKyAxXSAtIGlkW2ldOwoKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnBhY2sgLSAyOyBp
KyspIHsgCiAgICAgICAgICAgICAgICBiW2ldID0gKGFbaSArIDFdID09IGFbaV0pOwogICAgICAg
ICAgICAgICAgayA9ICAoayAmJiBiW2ldKTsKICAgICAgICB9CgogICAgICAgIGlmICghaWRbaV0p
IHsKICAgICAgICAgICAgICAgIHB1dHMoIlxuSWQgZmllbGQgbXVzdCBub3QgYmUgMC4gUGxlYXNl
IHRyeSBhbm90aGVyIGhvc3QuXG4iKTsKICAgICAgICAgICAgICAgIHJldHVybiAoMSk7CiAgICAg
ICAgfQoKICAgICAgICBpZiAoaykgewogICAgICAgICAgICAgICAgcHJpbnRmKCJcbkl0IHNlZW1z
IHRoYXQgaG9zdCAlcyBoYXMgbm8gdHJhZmZpYzogZXhjZWxsZW50ISEhXG5cbiIsIGhvc3QpOwog
ICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICBwcmludGYoIlxuSG9zdCAlcyBoYXMgdG9vIG11Y2ggdHJhZmZpYzogcGxlYXNl
IHRyeSBhbm90aGVyIG9uZS5cblxuIiwgaG9zdCk7CiAgICAgICAgICAgICAgICByZXR1cm4gKDEp
OwogICAgICAgIH0KfQoJCg==

--Multipart=_Mon__30_Aug_2004_15_27_52_+0200_/i=OrTZVK7=dz9s/
Content-Type: application/octet-stream;
 name="sasp.c"
Content-Disposition: attachment;
 filename="sasp.c"
Content-Transfer-Encoding: base64

LyoKKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQKKiAgICAgICAgTHVpZ2kgUGl6emlyYW5pIFZp
YSBNYXNzYXJlbnRpLCAzOTAvYyA0MDEzOCBCb2xvZ25hIChJdGFseSkgPGwucGl6emlyYUB2aXJn
aWxpby5pdD4gCiogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKgoqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAoqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwoqIGFyZSBtZXQ6CiogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgYXMKKiAgICB0aGUgZmlyc3QgbGlu
ZXMgb2YgdGhpcyBmaWxlIHVubW9kaWZpZWQuCiogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CiogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKgoqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgJSV5b3Vy
X25hbWVfaGVyZSUlIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTCiogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4KKiBJTiBOTyBFVkVOVCBTSEFMTCAlJXlvdXJfbmFtZV9oZXJl
JSUgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKiBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK
KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCiogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCiogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAoqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgoqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAoqCiogICAgICAgICRpZCBzYXNwLmMsdiAwLjEgMjAwNC8wOC8z
MCAxNDoxNToxNyBzdmlhdCBFeHAgJCAKKi8KCiNkZWZpbmUgICAgICAgICBfQlNEX1NPVVJDRSAg
ICAgMQoKI2luY2x1ZGUgICAgICAgIDxwY2FwLmg+CiNpbmNsdWRlICAgICAgICA8bGlibmV0Lmg+
CiNpbmNsdWRlCTxuZXRpbmV0L2lmX2V0aGVyLmg+CiNpbmNsdWRlCTxzdGRsaWIuaD4KI2luY2x1
ZGUJPHN0cmluZy5oPgoKI2RlZmluZQkJSEFTSFNJWkUJNjU1MzUKI2RlZmluZSAJRk5WX3ByaW1l
IAkxNjc3NzYxOQoKc3RydWN0IGlmcmVxbGlzdCB7CglzdHJ1Y3QgaWZhbGlhc3JlcSByZXE7Cglz
dHJ1Y3QgaWZyZXFsaXN0ICppZmxfbmV4dDsKfSAqaGFzaHRhYmxlW0hBU0hTSVpFXTsKCnVuc2ln
bmVkIGxvbmcgcG9zLCBwb3NfdGFibGVbSEFTSFNJWkVdOwppbnQgaywgZW50cmllczsJCgpzdHJ1
Y3QgaWZyZXFsaXN0ICoJYWxpYXMoY2hhciosIHN0cnVjdCBzb2NrYWRkcl9pbiwgc3RydWN0IHNv
Y2thZGRyX2luLCBzdHJ1Y3Qgc29ja2FkZHJfaW4pOwp2b2lkICAgICAgICAgICAJCWluamVjdF9w
YWNrZXQobGlibmV0X3QgKiwgdV9jaGFyICosIHVfY2hhciAqLCB1X2NoYXIgKiwgdV9jaGFyICop
Owp1bnNpZ25lZCBsb25nIAkJaGFzaChjb25zdCBjaGFyICosIGludCk7CnZvaWQJCQlpbml0aWFs
aXNlX2hhc2hfdGFibGUodm9pZCk7CnZvaWQJCQlpbml0aWFsaXNlX3Bvc190YWJsZSh2b2lkKTsK
dm9pZAkJCWNyZWF0ZV9oYXNoX3RhYmxlKGNoYXIgKiwgc3RydWN0IGlmcmVxbGlzdCAqKTsKc3Ry
dWN0IGlmcmVxbGlzdCAqCWlmYWRkcnMoc3RydWN0IGlmcmVxbGlzdCAqKTsKdm9pZAkJCXJlbW92
ZV9hbGlhcyh2b2lkKTsKCmludAptYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKewogICAgICAg
IGJwZl91X2ludDMyIG5ldCwgdGhlaXJfbmV0LCBhbGlhc19uZXQsIGFsaWFzX2Jyb2FkbmV0LCBt
YXNrLCBhbGlhc19tYXNrLCBhbGlhc19icm9hZG1hc2ssIGlwLCBteWlwLCB0aGVpcl9pcDsKICAg
ICAgICBwY2FwX3QgKmhhbmRsZTsKICAgICAgICBjaGFyIGRldmljZVtJRk5BTVNJWl0sIGVycmJ1
ZltQQ0FQX0VSUkJVRl9TSVpFXSwgZXJyX2J1ZltMSUJORVRfRVJSQlVGX1NJWkVdLCBidWZbMTZd
OwoJY29uc3QgdV9jaGFyICpwYWNrZXQ7CiAgICAgICAgc3RydWN0IGJwZl9wcm9ncmFtIGZpbHRl
cjsKICAgICAgICBzdHJ1Y3QgcGNhcF9wa3RoZHIgcGt0aGRyOwogICAgICAgIGNvbnN0IHN0cnVj
dCAgbGlibmV0X2V0aGVybmV0X2hkciAqZXRoZXJfaGVhZGVyOwogICAgICAgIHN0cnVjdCBldGhl
cl9hcnAgKmFycGhkcjsKICAgICAgICBzdHJ1Y3QgbGlibmV0X2V0aGVybmV0X2hkciAqZXRoZXJf
aGVhZGVyMjsKICAgICAgICBsaWJuZXRfdCAqbHQ7CiAgICAgICAgc3RydWN0IGxpYm5ldF9ldGhl
cl9hZGRyICpldGhlcl9hZGRyOwogICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW4sIHNpbjIs
IHNpbjM7CglzdHJ1Y3QgaWZyZXFsaXN0ICpyZXF1ZXN0LCBpZnJlcXVlc3Q7Cgl1bnNpZ25lZCBs
b25nICpwdHI7CiAgICAgICAgY2hhciBhbGlhc21hc2tbXSA9IjAuMC4wLjI1NCI7CgljaGFyIGFs
aWFzYnJvYWRtYXNrW10gPSAiMC4wLjAuMjU1IjsKICAgICAgICBjaGFyIGZpbFtdID0gImFycCI7
CglpbnQgb24gPSAxOwoKICAgICAgICBpZiAoYXJnYyAhPSAyKSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICBwcmludGYoIlVzYWdlOiAlcyBpbnRlcmZhY2UuXG4iLCBh
cmd2WzBdKTsKICAgICAgICAgICAgICAgIGV4aXQoMSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICB9CgoKICAgICAgICBzdHJsY3B5KGRldmljZSwgYXJndlsxXSwgSUZOQU1TSVop
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
IAlpZiAocGNhcF9sb29rdXBuZXQoZGV2aWNlLCAmbmV0LCAmbWFzaywgZXJyYnVmKSA9PSAtMSkg
ewogICAgICAgICAgICAgICAJcHJpbnRmKCJwY2FwX2xvb2t1cG5ldCgpOiAlc1xuIiwgZXJyYnVm
KTsKICAgICAgICAgICAgICAgCWV4aXQoMSk7ICAKICAgICAgIAl9CgoJaW5pdGlhbGlzZV9oYXNo
X3RhYmxlKCk7Cglpbml0aWFsaXNlX3Bvc190YWJsZSgpOwoJCglyZXF1ZXN0ID0gTlVMTDsKCglm
b3IoIDsgOyApIHsKCQlpZiAoZW50cmllcyA+IEhBU0hTSVpFKQoJCQlyZW1vdmVfYWxpYXMoKTsK
CgkJaWYgKCAoaGFuZGxlID0gcGNhcF9vcGVuX2xpdmUoZGV2aWNlLCAyMDAsIDAsIDEwMCwgZXJy
YnVmKSkgPT0gTlVMTCkgewogICAgICAgIAkgICAgICAJIHByaW50ZigicGNhcF9vcGVuX2xpdmUo
KTogJXNcbiIsIGVycmJ1Zik7CiAgICAgICAgICAgICAgICAJZXhpdCgxKTsKCQl9CgoJCWlmIChp
b2N0bChwY2FwX2ZpbGVubyhoYW5kbGUpLCBCSU9DSU1NRURJQVRFLCAmb24pID09IC0xKSB7CgkJ
CXBlcnJvcigiaW9jdGwiKTsKCQkJZXhpdCgxKTsKCQl9CgoJCWlmIChwY2FwX2NvbXBpbGUoaGFu
ZGxlLCAmZmlsdGVyLCBmaWwsIDAsIG5ldCkgPT0gLTEpIHsKICAgICAgICAJICAgICAgICBwcmlu
dGYoInBjYXBfY29tcGlsZSgpOiAlc1xuIiwgcGNhcF9nZXRlcnIoaGFuZGxlKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGV4aXQoMSk7CgkJfQoKCQlpZiAocGNhcF9zZXRmaWx0ZXIoaGFuZGxl
LCAmZmlsdGVyKSA9PSAtMSkgewogICAgICAgIAkgICAgICAgIHByaW50ZigicGNhcF9zZXRmaWx0
ZXIoKTogJXNcbiIsIHBjYXBfZ2V0ZXJyKGhhbmRsZSkpOwogICAgICAgIAkgICAgICAgIGV4aXQo
MSk7CgkJfSAKCiAgICAgICAgICAgICAgICBtZW1zZXQoJnNpbi5zaW5fYWRkciwgMCwgc2l6ZW9m
KHNpbi5zaW5fYWRkcikpOwoJCW1lbXNldCgmc2luMi5zaW5fYWRkciwgMCwgc2l6ZW9mKHNpbjIu
c2luX2FkZHIpKTsKCQltZW1zZXQoJnNpbjMuc2luX2FkZHIsIDAsIHNpemVvZihzaW4zLnNpbl9h
ZGRyKSk7IAoKCQlzaW4uc2luX2xlbiA9IHNpbjIuc2luX2xlbiA9IHNpbjMuc2luX2xlbiA9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHIpOwoJCXNpbi5zaW5fZmFtaWx5ID0gc2luMi5zaW5fZmFtaWx5
ID0gc2luMy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKCgkJd2hpbGUgKCAocGFja2V0ID0gcGNhcF9u
ZXh0KGhhbmRsZSwgJnBrdGhkcikpID09IE5VTEwpIDsKCgkJbHQgPSBsaWJuZXRfaW5pdChMSUJO
RVRfTElOSywgZGV2aWNlLCBlcnJfYnVmKTsKCgkJZXRoZXJfYWRkciA9IGxpYm5ldF9nZXRfaHdh
ZGRyKGx0KTsKICAgICAgICAJbXlpcCAgPSBsaWJuZXRfZ2V0X2lwYWRkcjQobHQpOwogICAgICAg
IAlpcCA9IG50b2hsKG15aXApOwogICAgICAgICAgICAgICAgZXRoZXJfaGVhZGVyID0gKHN0cnVj
dCBsaWJuZXRfZXRoZXJuZXRfaGRyICopIHBhY2tldDsKICAgICAgICAgICAgICAgIGFycGhkciA9
IChzdHJ1Y3QgZXRoZXJfYXJwICopIChwYWNrZXQgKyBzaXplb2Yoc3RydWN0IGxpYm5ldF9ldGhl
cm5ldF9oZHIpKTsKCiAgICAgICAgICAgICAgICBpZiAoYXJwaGRyLT5hcnBfdHBhWzNdICE9IGFy
cGhkci0+YXJwX3NwYVszXSkgewogICAgICAgICAgICAgICAgICAgICAgICBzbnByaW50ZihidWYs
IHNpemVvZihidWYpLCAiJWQuJWQuJWQuJWQiLCBhcnBoZHItPmFycF9zcGFbMF0sICBhcnBoZHIt
PmFycF9zcGFbMV0sICBhcnBoZHItPmFycF9zcGFbMl0sICBhcnBoZHItPmFycF9zcGFbM10pOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9wdG9uKEFGX0lORVQsIGJ1ZiwgJnNpbi5zaW5f
YWRkcik7CgogICAgICAgICAgICAgICAgICAgICAgICB0aGVpcl9pcCA9IHNpbi5zaW5fYWRkci5z
X2FkZHI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoZWlyX25ldCA9IHRoZWlyX2lwICYgbWFz
azsKCgkJCWluZXRfcHRvbihBRl9JTkVULCBhbGlhc21hc2ssICZzaW4uc2luX2FkZHIpOwoJCQlp
bmV0X3B0b24oQUZfSU5FVCwgYWxpYXNicm9hZG1hc2ssICZzaW4yLnNpbl9hZGRyKTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIGFsaWFzX21hc2sgPSBzaW4uc2luX2FkZHIuc19hZGRyOwoJCQlh
bGlhc19icm9hZG1hc2sgPSBzaW4yLnNpbl9hZGRyLnNfYWRkcjsKICAgICAgICAgICAgICAgICAg
ICAgICAgYWxpYXNfbmV0ID0gYWxpYXNfbWFzayB8IHRoZWlyX25ldDsKCQkJYWxpYXNfYnJvYWRu
ZXQgPSBhbGlhc19icm9hZG1hc2sgfCB0aGVpcl9uZXQ7CgogICAgICAgICAgICAgICAgICAgICAg
ICBzaW4uc2luX2FkZHIuc19hZGRyID0gYWxpYXNfbmV0OwoJCQlzaW4yLnNpbl9hZGRyLnNfYWRk
ciA9IGFsaWFzX2Jyb2FkbmV0OwoJCQlzaW4zLnNpbl9hZGRyLnNfYWRkciA9IG1hc2s7CgoJCQlp
ZiAodGhlaXJfbmV0ID09IG5ldCkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5q
ZWN0X3BhY2tldChsdCwgZXRoZXJfYWRkci0+ZXRoZXJfYWRkcl9vY3RldCxhcnBoZHItPmFycF90
cGEsIGFycGhkci0+YXJwX3NoYSwgYXJwaGRyLT5hcnBfc3BhKTsKCQkJZWxzZSB7CgkJCQlyZXF1
ZXN0ID0gYWxpYXMoZGV2aWNlLCBzaW4sIHNpbjIsIHNpbjMpOyAKCQkJCWNyZWF0ZV9oYXNoX3Rh
YmxlKHJlcXVlc3QtPnJlcS5pZnJhX2FkZHIuc2FfZGF0YSwgcmVxdWVzdCk7CgkJCQlpbmplY3Rf
cGFja2V0KGx0LCBldGhlcl9hZGRyLT5ldGhlcl9hZGRyX29jdGV0LCBhcnBoZHItPmFycF90cGEs
IGFycGhkci0+YXJwX3NoYSwgYXJwaGRyLT5hcnBfc3BhKTsKCQkJCWluamVjdF9wYWNrZXQobHQs
IGFycGhkci0+YXJwX3NoYSwgYXJwaGRyLT5hcnBfc3BhLCBldGhlcl9hZGRyLT5ldGhlcl9hZGRy
X29jdGV0LCAodV9jaGFyICopICZteWlwKTsKCQkJfQoJCX0KCQkJcGNhcF9jbG9zZShoYW5kbGUp
OwoJCQlsaWJuZXRfZGVzdHJveShsdCk7Cgl9Cn0JCgpzdHJ1Y3QgaWZyZXFsaXN0ICoKYWxpYXMo
Y2hhciAqaWZkZXZpY2UsIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW4sIHN0cnVjdCBzb2NrYWRkcl9p
biBzaW4yLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luMykKewoJaW50IHNvY2tmZDsKCXN0cnVjdCBp
ZmFsaWFzcmVxIGFsaWFzcmVxOwoJc3RydWN0IGlmcmVxbGlzdCAqcmVxbGlzdDsKCQoJaWYgKCAo
cmVxbGlzdCA9IChzdHJ1Y3QgaWZyZXFsaXN0ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IGlmcmVx
bGlzdCkpKSA9PSBOVUxMKSB7CgkJcGVycm9yKCJtYWxsb2MiKTsKCQlleGl0KDEpOwoJfSAKCiAg
ICAgICAgbWVtc2V0KCZhbGlhc3JlcSwgMCwgc2l6ZW9mKGFsaWFzcmVxKSk7CgogICAgICAgIHN0
cmxjcHkoYWxpYXNyZXEuaWZyYV9uYW1lLCBpZmRldmljZSwgSUZOQU1TSVopOwoJbWVtY3B5KCZh
bGlhc3JlcS5pZnJhX2FkZHIsICZzaW4sIHNpemVvZihzaW4pKTsKCW1lbWNweSgmYWxpYXNyZXEu
aWZyYV9icm9hZGFkZHIsICZzaW4yLCBzaXplb2Yoc2luMikpOwoJbWVtY3B5KCZhbGlhc3JlcS5p
ZnJhX21hc2ssICZzaW4zLCBzaXplb2Yoc2luMykpOwoKCW1lbXNldCgmcmVxbGlzdC0+cmVxLCAw
LCBzaXplb2YocmVxbGlzdC0+cmVxKSk7CgoJbWVtY3B5KCZyZXFsaXN0LT5yZXEsICZhbGlhc3Jl
cSwgc2l6ZW9mKGFsaWFzcmVxKSk7IAoKICAgICAgICBpZiAoIChzb2NrZmQgPSBzb2NrZXQoUEZf
SU5FVCwgU09DS19ER1JBTSwgMCkpID09IC0xKSB7CiAgICAgICAgICAgICAgICBwZXJyb3IoInNv
Y2tldCIpOwogICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICB9CgogICAgICAgIGlmIChp
b2N0bChzb2NrZmQsIFNJT0NBSUZBRERSLCAmYWxpYXNyZXEpID09IC0xKSB7CiAgICAgICAgICAg
ICAgICBwZXJyb3IoImlvY3RsIik7CiAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgIH0K
CgljbG9zZShzb2NrZmQpOwoJcmV0dXJuIHJlcWxpc3Q7Cn0KCnZvaWQKaW5qZWN0X3BhY2tldChs
aWJuZXRfdCAqbHQsIHVfY2hhciAqaHdzcmMsIHVfY2hhciAqcHNyYywgdV9jaGFyICpod2RzdCwg
dV9jaGFyICpwZHN0KQp7CglpbnQgdzsKCiAgICAgICAgbGlibmV0X2J1aWxkX2FycChBUlBIUkRf
RVRIRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICBFVEhFUlRZUEVfSVAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICA2LAogICAgICAgICAgICAgICAgICAgICAgICAgNCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIEFSUE9QX1JFUExZLAogICAgICAgICAgICAgICAgICAgICAgICAgaHdzcmMs
CiAgICAgICAgICAgICAgICAgICAgICAgICBwc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAg
aHdkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBwZHN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgTlVMTCwKCQkJIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICBsdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIDApOwoKCWxpYm5ldF9idWlsZF9ldGhlcm5ldChod2RzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaHdzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEVUSEVSVFlQRV9BUlAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCgkJ
CSAgICAgIDAsCQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCk7CgoKCXcgPSBsaWJuZXRfd3JpdGUobHQpOwoKCWlmICh3ID09
IC0xKSB7CgkJcHJpbnRmKCJsaWJuZXRfd3JpdGUoKTogJXNcbiIsIGxpYm5ldF9nZXRlcnJvcihs
dCkpOwoJCWV4aXQoMSk7Cgl9Cn0KCnZvaWQKY3JlYXRlX2hhc2hfdGFibGUoY2hhciAqa2V5LCBz
dHJ1Y3QgaWZyZXFsaXN0ICpzdHJ1Y3R1cmUpCnsKCWlmIChpZmFkZHJzKHN0cnVjdHVyZSkgPT0g
TlVMTCkgewoJCXN0cnVjdCBpZnJlcWxpc3QgKnByZXZpb3VzX3B0ciwgKmN1cnJlbnRfcHRyLCAq
bmV4dF9wdHI7IAoKCQluZXh0X3B0ciA9IHN0cnVjdHVyZTsKICAgICAgICAJcG9zID0gaGFzaChr
ZXksIHN0cmxlbihrZXkpKTsKCiAgICAgICAgCWlmIChoYXNodGFibGVbcG9zXSA9PSBOVUxMKSB7
IAoJCQloYXNodGFibGVbcG9zXSA9IG5leHRfcHRyOwoJCQlwb3NfdGFibGVbaysrXSA9IHBvczsK
CQl9CiAgICAgICAgCWVsc2UgewogICAgICAgICAgICAgICAgCWN1cnJlbnRfcHRyID0gaGFzaHRh
YmxlW3Bvc107CiAgICAgICAgICAgICAgICAJd2hpbGUgKGN1cnJlbnRfcHRyICE9IE5VTEwpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgCXByZXZpb3VzX3B0ciA9IGN1cnJlbnRfcHRyOwogICAg
ICAgICAgICAgICAgICAgICAgICAJY3VycmVudF9wdHIgPSBjdXJyZW50X3B0ci0+aWZsX25leHQ7
CiAgICAgICAgICAgICAgICAJfQoJCQlwcmV2aW91c19wdHItPmlmbF9uZXh0ID0gbmV4dF9wdHI7
CiAgICAgICAgCX0KCQluZXh0X3B0ci0+aWZsX25leHQgPSBOVUxMOwoJCSsrZW50cmllczsKCX0K
fQoKc3RydWN0IGlmcmVxbGlzdCAqCmlmYWRkcnMoc3RydWN0IGlmcmVxbGlzdCAqc3RydWN0dXJl
KQp7CglpbnQgc29ja2ZkOwogICAgICAgIHJlZ2lzdGVyIGludCBpID0gMDsKICAgICAgICBzdHJ1
Y3QgaWZyZXFsaXN0ICpsaXN0OwoJc3RydWN0IGlmcmVxIGRlbHJlcTsKCgogICAgICAgICAgICAg
ICAgZm9yIChsaXN0ID0gaGFzaHRhYmxlW2hhc2goc3RydWN0dXJlLT5yZXEuaWZyYV9hZGRyLnNh
X2RhdGEsIHN0cmxlbihzdHJ1Y3R1cmUtPnJlcS5pZnJhX2FkZHIuc2FfZGF0YSkpXTsgbGlzdCAh
PSBOVUxMOyBsaXN0ID0gbGlzdC0+aWZsX25leHQpIHsKCQkJbWVtc2V0KCZkZWxyZXEsIDAsIHNp
emVvZihkZWxyZXEpKTsKCQkJbWVtY3B5KGRlbHJlcS5pZnJfbmFtZSwgbGlzdC0+cmVxLmlmcmFf
bmFtZSwgSUZOQU1TSVopOwoJCQltZW1jcHkoJmRlbHJlcS5pZnJfYWRkciwgJmxpc3QtPnJlcS5p
ZnJhX2FkZHIsIHNpemVvZihsaXN0LT5yZXEuaWZyYV9hZGRyKSk7CiAKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAoc29ja2ZkID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfREdSQU0sIDApKSA9
PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJvcigic29ja2V0Iik7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChpb2N0bChzb2NrZmQsIFNJ
T0NHSUZBRERSLCAmZGVscmVxKSkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwZXJyb3IoImlvY3RsIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhp
dCgxKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoJCQljbG9zZShzb2NrZmQpOwoJCQlpZiAo
IXN0cm5jbXAoc3RydWN0dXJlLT5yZXEuaWZyYV9hZGRyLnNhX2RhdGEsIGRlbHJlcS5pZnJfYWRk
ci5zYV9kYXRhLCBzaXplb2YoZGVscmVxLmlmcl9hZGRyLnNhX2RhdGEpKSkgCgkJCQlyZXR1cm4g
c3RydWN0dXJlOwoJCX0KCXJldHVybiBOVUxMOwp9Cgp2b2lkCnJlbW92ZV9hbGlhcyh2b2lkKQp7
CglpbnQgc29ja2ZkOwoJcmVnaXN0ZXIgaW50IGkgPSAwOwoJc3RydWN0IGlmcmVxbGlzdCAqbGlz
dCwgKnB0cjsgCgoJd2hpbGUoaSA8IEhBU0hTSVpFKSB7IAoJCWZvciAobGlzdCA9IGhhc2h0YWJs
ZVtwb3NfdGFibGVbaV1dOyBsaXN0ICE9IE5VTEw7IGxpc3QgPSBwdHIpIHsKICAgICAgICAJICAg
ICAgICBpZiAoIChzb2NrZmQgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19ER1JBTSwgMCkpID09IC0x
KSB7CiAgICAgICAgICAgICAgICAJICAgICAgICBwZXJyb3IoInNvY2tldCIpOwogICAgICAgICAg
ICAgICAgICAgICAgICAJZXhpdCgxKTsKICAgICAgICAgICAgICAgIAl9CgoJCQlpZiAoIChpb2N0
bChzb2NrZmQsIFNJT0NESUZBRERSLCAmbGlzdC0+cmVxKSkgPT0gLTEpIHsKCQkJCXBlcnJvcigi
aW9jdGwiKTsKCQkJCWV4aXQoMSk7CgkJCX0KCgkgICAgICAgICAgICAgICAgY2xvc2Uoc29ja2Zk
KTsKCQkJcHRyID0gbGlzdC0+aWZsX25leHQ7CgkJCWZyZWUobGlzdCk7CgkJfQoJCSsraTsKCX0K
Cglpbml0aWFsaXNlX2hhc2hfdGFibGUoKTsKCWluaXRpYWxpc2VfcG9zX3RhYmxlKCk7CgllbnRy
aWVzID0gMDsKCWsgPSAwOwp9CgovKiBGb3dsZXIgLyBOb2xsIC8gVm8gKEZOVikgSGFzaCBhbGdv
cnl0aG0gKi8KCnVuc2lnbmVkIGxvbmcKaGFzaChjb25zdCBjaGFyICpwLCBpbnQgcykKewoJdW5z
aWduZWQgbG9uZyBoID0gMjE2NjEzNjI2MVVMOy8qIEZOVi0xYSBoYXNoICovCglpbnQgaSA9IDA7
CgoJZm9yICg7IGkgPCBzOyBpKyspCgloID0gKChoIF4gcFtpXSkgKiBGTlZfcHJpbWUpOwoKCXJl
dHVybiAoaCAlIEhBU0hTSVpFKTsKfQoKdm9pZAppbml0aWFsaXNlX2hhc2hfdGFibGUodm9pZCkK
ewoJcmVnaXN0ZXIgaW50IGNvdW50OwoJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgSEFTSFNJWkU7
IGNvdW50KyspIAoJCWhhc2h0YWJsZVtjb3VudF0gPSBOVUxMOwp9CiAKdm9pZAppbml0aWFsaXNl
X3Bvc190YWJsZSh2b2lkKQp7CglyZWdpc3RlciBpbnQgY291bnQ7Cglmb3IgKGNvdW50ID0gMDsg
Y291bnQgPCBIQVNIU0laRTsgY291bnQrKykKCQlwb3NfdGFibGVbY291bnRdID0gLTE7Cn0gCgo=

--Multipart=_Mon__30_Aug_2004_15_27_52_+0200_/i=OrTZVK7=dz9s/--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040830152752.4c968e56>