Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 6 Nov 2007 11:57:08 +0000
From:      Iain Hibbert <plunky@rya-online.net>
To:        <freebsd-bluetooth@freebsd.org>
Cc:        maxsim.yevmenkin@gmail.com
Subject:   Re: sdp - SearchService of UUID
Message-ID:  <E1IpN5T-0006Rs-Jv@localhost.localdomain>

next in thread | raw e-mail | index | archive | help
--_97F1B68C-D8E1-CBA5-AD68-6CEE9808DF07_
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="iso-8859-1"

Hi Max,

So, I think this is it..

Attached is a patch to convert sdpd to handle a uuid list. Its for the netb=
sd version and will require a bit of twiddling in ssar.c and ssr.c to make =
it apply because of NG_ and sockaddr_l2cap, and you don't have hf.c and hse=
t.c but thats easy enough to ignore.

This seems to be working with SSAR  and SSR from different devices, and a m=
ultiple UUID sdp_search query I cobbled together from the local socket. (at=
tached)

Any comments before I go with it?

iain=

--_97F1B68C-D8E1-CBA5-AD68-6CEE9808DF07_
Content-Type: application/octet-stream; name="sdp.diff"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="sdp.diff"

LS0tIC91c3Ivc3JjL3Vzci5zYmluL3NkcGQvYmdkLmMJMjAwNi0wNi0xOSAxNjo0NDo1Ni4wMDAw
MDAwMDAgKzAxMDAKKysrIGJnZC5jCTIwMDctMTEtMDYgMDk6MjY6NDMuMDAwMDAwMDAwICswMDAw
CkBAIC05OCw4ICs5OCwxMyBAQAogCXsgMCwgTlVMTCB9IC8qIGVuZCBlbnRyeSAqLwogfTsKIAot
cHJvZmlsZV90CWJnZF9wcm9maWxlX2Rlc2NyaXB0b3IgPSB7CitzdGF0aWMgdWludDE2X3QJYmdk
X3Byb2ZpbGVfdXVpZHNbXSA9IHsKIAlTRFBfU0VSVklDRV9DTEFTU19CUk9XU0VfR1JPVVBfREVT
Q1JJUFRPUiwKK307CisKK3Byb2ZpbGVfdAliZ2RfcHJvZmlsZV9kZXNjcmlwdG9yID0geworCWJn
ZF9wcm9maWxlX3V1aWRzLAorCXNpemVvZihiZ2RfcHJvZmlsZV91dWlkcyksCiAJMCwKIAkocHJv
ZmlsZV9kYXRhX3ZhbGlkX3ApIE5VTEwsCiAJKGF0dHJfdCBjb25zdCAqIGNvbnN0KSAmYmdkX3By
b2ZpbGVfYXR0cnMKLS0tIC91c3Ivc3JjL3Vzci5zYmluL3NkcGQvZHVuLmMJMjAwNi0wNi0xOSAx
Njo0NDo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrIGR1bi5jCTIwMDctMTEtMDYgMDk6Mjg6MTEuMDAw
MDAwMDAwICswMDAwCkBAIC0xMzIsOCArMTMyLDE2IEBACiAJeyAwLCBOVUxMIH0gLyogZW5kIGVu
dHJ5ICovCiB9OwogCi1wcm9maWxlX3QJZHVuX3Byb2ZpbGVfZGVzY3JpcHRvciA9IHsKK3N0YXRp
YyB1aW50MTZfdCBkdW5fcHJvZmlsZV91dWlkc1tdID0gewogCVNEUF9TRVJWSUNFX0NMQVNTX0RJ
QUxVUF9ORVRXT1JLSU5HLAorCVNEUF9TRVJWSUNFX0NMQVNTX0dFTkVSSUNfTkVUV09SS0lORywK
KwlTRFBfVVVJRF9QUk9UT0NPTF9MMkNBUCwKKwlTRFBfVVVJRF9QUk9UT0NPTF9SRkNPTU0sCit9
OworCitwcm9maWxlX3QJZHVuX3Byb2ZpbGVfZGVzY3JpcHRvciA9IHsKKwlkdW5fcHJvZmlsZV91
dWlkcywKKwlzaXplb2YoZHVuX3Byb2ZpbGVfdXVpZHMpLAogCXNpemVvZihzZHBfZHVuX3Byb2Zp
bGVfdCksCiAJY29tbW9uX3Byb2ZpbGVfc2VydmVyX2NoYW5uZWxfdmFsaWQsCiAJKGF0dHJfdCBj
b25zdCAqIGNvbnN0KSAmZHVuX3Byb2ZpbGVfYXR0cnMKLS0tIC91c3Ivc3JjL3Vzci5zYmluL3Nk
cGQvZnRybi5jCTIwMDYtMDYtMTkgMTY6NDQ6NTYuMDAwMDAwMDAwICswMTAwCisrKyBmdHJuLmMJ
MjAwNy0xMS0wNiAwOToyNzowMi4wMDAwMDAwMDAgKzAwMDAKQEAgLTExMyw4ICsxMTMsMTYgQEAK
IAl7IDAsIE5VTEwgfSAvKiBlbmQgZW50cnkgKi8KIH07CiAKLXByb2ZpbGVfdAlmdHJuX3Byb2Zp
bGVfZGVzY3JpcHRvciA9IHsKK3N0YXRpYyB1aW50MTZfdCBmdHJuX3Byb2ZpbGVfdXVpZHNbXSA9
IHsKIAlTRFBfU0VSVklDRV9DTEFTU19PQkVYX0ZJTEVfVFJBTlNGRVIsCisJU0RQX1VVSURfUFJP
VE9DT0xfTDJDQVAsCisJU0RQX1VVSURfUFJPVE9DT0xfUkZDT01NLAorCVNEUF9VVUlEX1BST1RP
Q09MX09CRVgsCit9OworCitwcm9maWxlX3QJZnRybl9wcm9maWxlX2Rlc2NyaXB0b3IgPSB7CisJ
ZnRybl9wcm9maWxlX3V1aWRzLAorCXNpemVvZihmdHJuX3Byb2ZpbGVfdXVpZHMpLAogCXNpemVv
ZihzZHBfZnRybl9wcm9maWxlX3QpLAogCWNvbW1vbl9wcm9maWxlX3NlcnZlcl9jaGFubmVsX3Zh
bGlkLAogCShhdHRyX3QgY29uc3QgKiBjb25zdCkgJmZ0cm5fcHJvZmlsZV9hdHRycwotLS0gL3Vz
ci9zcmMvdXNyLnNiaW4vc2RwZC9oZi5jCTIwMDYtMDgtMTcgMjE6MTM6MzEuMDAwMDAwMDAwICsw
MTAwCisrKyBoZi5jCTIwMDctMTEtMDYgMDk6Mjc6MTIuMDAwMDAwMDAwICswMDAwCkBAIC0xNDgs
OCArMTQ4LDE2IEBACiAJeyAwLCBOVUxMIH0gLyogZW5kIGVudHJ5ICovCiB9OwogCi1wcm9maWxl
X3QJaGZfcHJvZmlsZV9kZXNjcmlwdG9yID0geworc3RhdGljIHVpbnQxNl90CWhmX3Byb2ZpbGVf
dXVpZHNbXSA9IHsKIAlTRFBfU0VSVklDRV9DTEFTU19IQU5EU0ZSRUUsCisJU0RQX1NFUlZJQ0Vf
Q0xBU1NfR0VORVJJQ19BVURJTywKKwlTRFBfVVVJRF9QUk9UT0NPTF9MMkNBUCwKKwlTRFBfVVVJ
RF9QUk9UT0NPTF9SRkNPTU0sCit9OworCitwcm9maWxlX3QJaGZfcHJvZmlsZV9kZXNjcmlwdG9y
ID0geworCWhmX3Byb2ZpbGVfdXVpZHMsCisJc2l6ZW9mKGhmX3Byb2ZpbGVfdXVpZHMpLAogCXNp
emVvZihzZHBfaGZfcHJvZmlsZV90KSwKIAloZl9wcm9maWxlX2RhdGFfdmFsaWQsCiAJKGF0dHJf
dCBjb25zdCAqIGNvbnN0KSAmaGZfcHJvZmlsZV9hdHRycwotLS0gL3Vzci9zcmMvdXNyLnNiaW4v
c2RwZC9oc2V0LmMJMjAwNi0wNi0xOSAxNjo0NDo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrIGhzZXQu
YwkyMDA3LTExLTA2IDA5OjI3OjE2LjAwMDAwMDAwMCArMDAwMApAQCAtMTI4LDggKzEyOCwxNyBA
QAogCXsgMCwgTlVMTCB9IC8qIGVuZCBlbnRyeSAqLwogfTsKIAotcHJvZmlsZV90CWhzZXRfcHJv
ZmlsZV9kZXNjcmlwdG9yID0geworc3RhdGljIHVpbnQxNl90IGhzZXRfcHJvZmlsZV91dWlkc1td
ID0gewogCVNEUF9TRVJWSUNFX0NMQVNTX0hFQURTRVRfQVVESU9fR0FURVdBWSwKKwlTRFBfU0VS
VklDRV9DTEFTU19HRU5FUklDX0FVRElPLAorCVNEUF9VVUlEX1BST1RPQ09MX0wyQ0FQLAorCVNE
UF9VVUlEX1BST1RPQ09MX1JGQ09NTSwKKwlTRFBfU0VSVklDRV9DTEFTU19IRUFEU0VULAorfTsK
KworcHJvZmlsZV90CWhzZXRfcHJvZmlsZV9kZXNjcmlwdG9yID0geworCWhzZXRfcHJvZmlsZV91
dWlkcywKKwlzaXplb2YoaHNldF9wcm9maWxlX3V1aWRzKSwKIAlzaXplb2Yoc2RwX2hzZXRfcHJv
ZmlsZV90KSwKIAloc2V0X3Byb2ZpbGVfZGF0YV92YWxpZCwKIAkoYXR0cl90IGNvbnN0ICogY29u
c3QpICZoc2V0X3Byb2ZpbGVfYXR0cnMKLS0tIC91c3Ivc3JjL3Vzci5zYmluL3NkcGQvaXJtYy5j
CTIwMDYtMDYtMTkgMTY6NDQ6NTYuMDAwMDAwMDAwICswMTAwCisrKyBpcm1jLmMJMjAwNy0xMS0w
NiAwOToyNzoxOS4wMDAwMDAwMDAgKzAwMDAKQEAgLTEyOSw4ICsxMjksMTYgQEAKIAl7IDAsIE5V
TEwgfSAvKiBlbmQgZW50cnkgKi8KIH07CiAKLXByb2ZpbGVfdAlpcm1jX3Byb2ZpbGVfZGVzY3Jp
cHRvciA9IHsKK3N0YXRpYyB1aW50MTZfdCBpcm1jX3Byb2ZpbGVfdXVpZHNbXSA9IHsKIAlTRFBf
U0VSVklDRV9DTEFTU19JUl9NQ19TWU5DLAorCVNEUF9VVUlEX1BST1RPQ09MX0wyQ0FQLAorCVNE
UF9VVUlEX1BST1RPQ09MX1JGQ09NTSwKKwlTRFBfVVVJRF9QUk9UT0NPTF9PQkVYLAorfTsKKwor
cHJvZmlsZV90CWlybWNfcHJvZmlsZV9kZXNjcmlwdG9yID0geworCWlybWNfcHJvZmlsZV91dWlk
cywKKwlzaXplb2YoaXJtY19wcm9maWxlX3V1aWRzKSwKIAlzaXplb2Yoc2RwX2lybWNfcHJvZmls
ZV90KSwKIAlvYmV4X3Byb2ZpbGVfZGF0YV92YWxpZCwKIAkoYXR0cl90IGNvbnN0ICogY29uc3Qp
ICZpcm1jX3Byb2ZpbGVfYXR0cnMKLS0tIC91c3Ivc3JjL3Vzci5zYmluL3NkcGQvaXJtY19jb21t
YW5kLmMJMjAwNi0wNi0xOSAxNjo0NDo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrIGlybWNfY29tbWFu
ZC5jCTIwMDctMTEtMDYgMDk6Mjc6MjMuMDAwMDAwMDAwICswMDAwCkBAIC0xMTMsOCArMTEzLDE2
IEBACiAJeyAwLCBOVUxMIH0gLyogZW5kIGVudHJ5ICovCiB9OwogCi1wcm9maWxlX3QJaXJtY19j
b21tYW5kX3Byb2ZpbGVfZGVzY3JpcHRvciA9IHsKK3N0YXRpYyB1aW50MTZfdAlpcm1jX2NvbW1h
bmRfcHJvZmlsZV91dWlkc1tdID0gewogCVNEUF9TRVJWSUNFX0NMQVNTX0lSX01DX1NZTkNfQ09N
TUFORCwKKwlTRFBfVVVJRF9QUk9UT0NPTF9MMkNBUCwKKwlTRFBfVVVJRF9QUk9UT0NPTF9SRkNP
TU0sCisJU0RQX1VVSURfUFJPVE9DT0xfT0JFWCwKK307CisKK3Byb2ZpbGVfdAlpcm1jX2NvbW1h
bmRfcHJvZmlsZV9kZXNjcmlwdG9yID0geworCWlybWNfY29tbWFuZF9wcm9maWxlX3V1aWRzLAor
CXNpemVvZihpcm1jX2NvbW1hbmRfcHJvZmlsZV91dWlkcyksCiAJc2l6ZW9mKHNkcF9pcm1jX2Nv
bW1hbmRfcHJvZmlsZV90KSwKIAljb21tb25fcHJvZmlsZV9zZXJ2ZXJfY2hhbm5lbF92YWxpZCwK
IAkoYXR0cl90IGNvbnN0ICogY29uc3QpICZpcm1jX2NvbW1hbmRfcHJvZmlsZV9hdHRycwotLS0g
L3Vzci9zcmMvdXNyLnNiaW4vc2RwZC9sYW4uYwkyMDA2LTA2LTE5IDE2OjQ0OjU2LjAwMDAwMDAw
MCArMDEwMAorKysgbGFuLmMJMjAwNy0xMS0wNiAwOToyNzoyNy4wMDAwMDAwMDAgKzAwMDAKQEAg
LTE3Myw4ICsxNzMsMTUgQEAKIAl7IDAsIE5VTEwgfSAvKiBlbmQgZW50cnkgKi8KIH07CiAKLXBy
b2ZpbGVfdAlsYW5fcHJvZmlsZV9kZXNjcmlwdG9yID0geworc3RhdGljIHVpbnQxNl90IGxhbl9w
cm9maWxlX3V1aWRzW10gPSB7CiAJU0RQX1NFUlZJQ0VfQ0xBU1NfTEFOX0FDQ0VTU19VU0lOR19Q
UFAsCisJU0RQX1VVSURfUFJPVE9DT0xfTDJDQVAsCisJU0RQX1VVSURfUFJPVE9DT0xfUkZDT01N
LAorfTsKKworcHJvZmlsZV90CWxhbl9wcm9maWxlX2Rlc2NyaXB0b3IgPSB7CisJbGFuX3Byb2Zp
bGVfdXVpZHMsCisJc2l6ZW9mKGxhbl9wcm9maWxlX3V1aWRzKSwKIAlzaXplb2Yoc2RwX2xhbl9w
cm9maWxlX3QpLAogCWxhbl9wcm9maWxlX2RhdGFfdmFsaWQsCiAJKGF0dHJfdCBjb25zdCAqIGNv
bnN0KSAmbGFuX3Byb2ZpbGVfYXR0cnMKLS0tIC91c3Ivc3JjL3Vzci5zYmluL3NkcGQvb3B1c2gu
YwkyMDA2LTA2LTE5IDE2OjQ0OjU2LjAwMDAwMDAwMCArMDEwMAorKysgb3B1c2guYwkyMDA3LTEx
LTA2IDA5OjI3OjMyLjAwMDAwMDAwMCArMDAwMApAQCAtMTI5LDggKzEyOSwxNiBAQAogCXsgMCwg
TlVMTCB9IC8qIGVuZCBlbnRyeSAqLwogfTsKIAotcHJvZmlsZV90CW9wdXNoX3Byb2ZpbGVfZGVz
Y3JpcHRvciA9IHsKK3N0YXRpYyB1aW50MTZfdCBvcHVzaF9wcm9maWxlX3V1aWRzW10gPSB7CiAJ
U0RQX1NFUlZJQ0VfQ0xBU1NfT0JFWF9PQkpFQ1RfUFVTSCwKKwlTRFBfVVVJRF9QUk9UT0NPTF9M
MkNBUCwKKwlTRFBfVVVJRF9QUk9UT0NPTF9SRkNPTU0sCisJU0RQX1VVSURfUFJPVE9DT0xfT0JF
WCwKK307CisKK3Byb2ZpbGVfdAlvcHVzaF9wcm9maWxlX2Rlc2NyaXB0b3IgPSB7CisJb3B1c2hf
cHJvZmlsZV91dWlkcywKKwlzaXplb2Yob3B1c2hfcHJvZmlsZV91dWlkcyksCiAJc2l6ZW9mKHNk
cF9vcHVzaF9wcm9maWxlX3QpLAogCW9iZXhfcHJvZmlsZV9kYXRhX3ZhbGlkLAogCShhdHRyX3Qg
Y29uc3QgKiBjb25zdCkgJm9wdXNoX3Byb2ZpbGVfYXR0cnMKLS0tIC91c3Ivc3JjL3Vzci5zYmlu
L3NkcGQvcHJvZmlsZS5jCTIwMDYtMDgtMTkgMTg6MTE6MDQuMDAwMDAwMDAwICswMTAwCisrKyBw
cm9maWxlLmMJMjAwNy0xMS0wNiAwOTo1ODo1NC4wMDAwMDAwMDAgKzAwMDAKQEAgLTc0LDcgKzc0
LDcgQEAKIAlpbnQzMl90CQkJaTsKIAogCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocHJvZmlsZXMp
L3NpemVvZihwcm9maWxlc1swXSk7IGkrKykKLQkJaWYgKHByb2ZpbGVzW2ldLT51dWlkID09IHV1
aWQpCisJCWlmIChwcm9maWxlc1tpXS0+dXVpZFswXSA9PSB1dWlkKQogCQkJcmV0dXJuIChwcm9m
aWxlc1tpXSk7CiAKIAlyZXR1cm4gKE5VTEwpOwotLS0gL3Vzci9zcmMvdXNyLnNiaW4vc2RwZC9w
cm9maWxlLmgJMjAwNi0wNi0xOSAxNjo0NDo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrIHByb2ZpbGUu
aAkyMDA3LTExLTA2IDA5OjM5OjEzLjAwMDAwMDAwMCArMDAwMApAQCAtNjMsNyArNjMsOCBAQAog
CiBzdHJ1Y3QgcHJvZmlsZQogewotCXVpbnQxNl90CQl1dWlkOwkvKiBwcm9maWxlIHV1aWQgKi8K
Kwl1aW50MTZfdCAqCQl1dWlkOwkvKiBwcm9maWxlIHV1aWQgbGlzdCAqLworCXNzaXplX3QJCQl1
c2l6ZTsJLyogcHJvZmlsZSB1dWlkIGxpc3Qgc2l6ZSAqLwogCXVpbnQxNl90CQlkc2l6ZTsJLyog
cHJvZmlsZSBkYXRhIHNpemUgKi8KIAlwcm9maWxlX2RhdGFfdmFsaWRfcAl2YWxpZDsJLyogcHJv
ZmlsZSBkYXRhIHZhbGlkYXRvciAqLwogCWF0dHJfdCBjb25zdCAqIGNvbnN0CWF0dHJzOwkvKiBz
dXBwb3J0ZWQgYXR0cmlidXRlcyAqLwotLS0gL3Vzci9zcmMvdXNyLnNiaW4vc2RwZC9wcm92aWRl
ci5jCTIwMDYtMDYtMTkgMTY6NDQ6NTYuMDAwMDAwMDAwICswMTAwCisrKyBwcm92aWRlci5jCTIw
MDctMTEtMDYgMTA6MzE6NTIuMDAwMDAwMDAwICswMDAwCkBAIC0zNiwxMCArMzYsMTIgQEAKIAog
I2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgogI2luY2x1ZGUgPGJsdWV0b290aC5oPgorI2luY2x1ZGUg
PHNkcC5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1
ZGUgInByb2ZpbGUuaCIKICNpbmNsdWRlICJwcm92aWRlci5oIgorI2luY2x1ZGUgInV1aWQtcHJp
dmF0ZS5oIgogCiBzdGF0aWMgVEFJTFFfSEVBRCgsIHByb3ZpZGVyKQlwcm92aWRlcnMgPSBUQUlM
UV9IRUFEX0lOSVRJQUxJWkVSKHByb3ZpZGVycyk7CiBzdGF0aWMgdWludDMyX3QJCQljaGFuZ2Vf
c3RhdGUgPSAwOwpAQCAtMTk4LDMgKzIwMCwzOCBAQAogewogCXJldHVybiAoY2hhbmdlX3N0YXRl
KTsKIH0KKworLyoKKyAqIE1hdGNoIHByb3ZpZGVyIHRvIFVVSUQgbGlzdAorICoKKyAqCWFsbCBV
VUlEcyBpbiBsaXN0IG11c3QgbWF0Y2ggb25lIG9mIHRoZQorICoJcHJvdmlkZXIgVVVJRHMgb3Ig
dGhlIFB1YmxpY0Jyb3dzZUdyb3VwCisgKi8KKworaW50Citwcm92aWRlcl9tYXRjaF91dWlkKHBy
b3ZpZGVyX3AgcHJvdmlkZXIsIHVpbnQxMjhfdCAqdXVpZCwgaW50IHVjb3VudCkKK3sKKwl1aW50
MTI4X3QgcHV1aWQ7CisJaW50IG51bSwgbWF4OworCisJbWF4ID0gcHJvdmlkZXItPnByb2ZpbGUt
PnVzaXplIC8gc2l6ZW9mKHByb3ZpZGVyLT5wcm9maWxlLT51dWlkWzBdKTsKKworCWZvciAoOyB1
Y291bnQtLSA+IDAgOyB1dWlkKyspIHsKKwkJaWYgKG1lbWNtcCh1dWlkLCAmdXVpZF9wdWJsaWNf
YnJvd3NlX2dyb3VwLCBzaXplb2YoKnV1aWQpKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJZm9y
IChudW0gPSAwIDsgOyBudW0rKykgeworCQkJaWYgKG51bSA9PSBtYXgpCisJCQkJcmV0dXJuIDA7
CisKKwkJCW1lbWNweSgmcHV1aWQsICZ1dWlkX2Jhc2UsIHNpemVvZihwdXVpZCkpOworCQkJcHV1
aWQuYlsyXSA9IHByb3ZpZGVyLT5wcm9maWxlLT51dWlkW251bV0gPj4gODsKKwkJCXB1dWlkLmJb
M10gPSBwcm92aWRlci0+cHJvZmlsZS0+dXVpZFtudW1dOworCisJCQlpZiAobWVtY21wKHV1aWQs
ICZwdXVpZCwgc2l6ZW9mKCp1dWlkKSkgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCXJl
dHVybiAxOworfQotLS0gL3Vzci9zcmMvdXNyLnNiaW4vc2RwZC9wcm92aWRlci5oCTIwMDYtMDYt
MTkgMTY6NDQ6NTYuMDAwMDAwMDAwICswMTAwCisrKyBwcm92aWRlci5oCTIwMDctMTEtMDYgMDk6
NTE6NTkuMDAwMDAwMDAwICswMDAwCkBAIC0xMDEsNiArMTAxLDkgQEAKIHByb3ZpZGVyX3AJcHJv
dmlkZXJfZ2V0X25leHQJCShwcm92aWRlcl9wIHByb3ZpZGVyKTsKIHVpbnQzMl90CXByb3ZpZGVy
X2dldF9jaGFuZ2Vfc3RhdGUJKHZvaWQpOwogCitpbnQJCXByb3ZpZGVyX21hdGNoX3V1aWQJCShw
cm92aWRlcl9wIHByb3ZpZGVyLAorCQkJCQkJIHVpbnQxMjhfdCAqdWxpc3QsIGludCB1Y291bnQp
OworCiBpbnQzMl90IHNlcnZlcl9wcmVwYXJlX2F0dHJfbGlzdChwcm92aWRlcl9wIGNvbnN0LCB1
aW50OF90IGNvbnN0ICosIHVpbnQ4X3QgY29uc3QgKiwKIAkJdWludDhfdCAqLCB1aW50OF90IGNv
bnN0ICopOwogCi0tLSAvdXNyL3NyYy91c3Iuc2Jpbi9zZHBkL3NkLmMJMjAwNi0wNi0xOSAxNjo0
NDo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrIHNkLmMJMjAwNy0xMS0wNiAwOToyNzo0Ny4wMDAwMDAw
MDAgKzAwMDAKQEAgLTIwOCw4ICsyMDgsMTQgQEAKIAl7IDAsIE5VTEwgfSAvKiBlbmQgZW50cnkg
Ki8KIH07CiAKLXByb2ZpbGVfdAlzZF9wcm9maWxlX2Rlc2NyaXB0b3IgPSB7CitzdGF0aWMgdWlu
dDE2X3Qgc2RfcHJvZmlsZV91dWlkc1tdID0gewogCVNEUF9TRVJWSUNFX0NMQVNTX1NFUlZJQ0Vf
RElTQ09WRVJZX1NFUlZFUiwKKwlTRFBfVVVJRF9QUk9UT0NPTF9MMkNBUCwKK307CisKK3Byb2Zp
bGVfdAlzZF9wcm9maWxlX2Rlc2NyaXB0b3IgPSB7CisJc2RfcHJvZmlsZV91dWlkcywKKwlzaXpl
b2Yoc2RfcHJvZmlsZV91dWlkcyksCiAJMCwKIAkocHJvZmlsZV9kYXRhX3ZhbGlkX3ApIE5VTEws
CiAJKGF0dHJfdCBjb25zdCAqIGNvbnN0KSAmc2RfcHJvZmlsZV9hdHRycwotLS0gL3Vzci9zcmMv
dXNyLnNiaW4vc2RwZC9zZXJ2ZXIuaAkyMDA3LTAzLTE4IDEyOjExOjEzLjAwMDAwMDAwMCArMDAw
MAorKysgc2VydmVyLmgJMjAwNy0xMS0wNSAxMDo0MDo1My4wMDAwMDAwMDAgKzAwMDAKQEAgLTEw
OSw2ICsxMDksOCBAQAogdm9pZAlzZXJ2ZXJfc2h1dGRvd24oc2VydmVyX3Agc3J2KTsKIGludDMy
X3QJc2VydmVyX2RvKHNlcnZlcl9wIHNydik7CiAKK2ludAlzZXJ2ZXJfZ2V0X3NlcnZpY2Vfc2Vh
cmNoX3BhdHRlcm4odWludDhfdCBjb25zdCAqKmJ1ZiwgdWludDhfdCBjb25zdCAqZW5kLCB1aW50
MTI4X3QgKnV1aWQpOworCiBpbnQzMl90CXNlcnZlcl9wcmVwYXJlX3NlcnZpY2Vfc2VhcmNoX3Jl
c3BvbnNlKHNlcnZlcl9wIHNydiwgaW50MzJfdCBmZCk7CiBpbnQzMl90CXNlcnZlcl9zZW5kX3Nl
cnZpY2Vfc2VhcmNoX3Jlc3BvbnNlKHNlcnZlcl9wIHNydiwgaW50MzJfdCBmZCk7CiAKLS0tIC91
c3Ivc3JjL3Vzci5zYmluL3NkcGQvc3AuYwkyMDA2LTA2LTE5IDE2OjQ0OjU2LjAwMDAwMDAwMCAr
MDEwMAorKysgc3AuYwkyMDA3LTExLTA2IDA5OjI3OjUwLjAwMDAwMDAwMCArMDAwMApAQCAtMTEz
LDggKzExMywxNSBAQAogCXsgMCwgTlVMTCB9IC8qIGVuZCBlbnRyeSAqLwogfTsKIAotcHJvZmls
ZV90CXNwX3Byb2ZpbGVfZGVzY3JpcHRvciA9IHsKK3N0YXRpYyB1aW50MTZfdCBzcF9wcm9maWxl
X3V1aWRzW10gPSB7CiAJU0RQX1NFUlZJQ0VfQ0xBU1NfU0VSSUFMX1BPUlQsCisJU0RQX1VVSURf
UFJPVE9DT0xfTDJDQVAsCisJU0RQX1VVSURfUFJPVE9DT0xfUkZDT01NLAorfTsKKworcHJvZmls
ZV90CXNwX3Byb2ZpbGVfZGVzY3JpcHRvciA9IHsKKwlzcF9wcm9maWxlX3V1aWRzLAorCXNpemVv
ZihzcF9wcm9maWxlX3V1aWRzKSwKIAlzaXplb2Yoc2RwX3NwX3Byb2ZpbGVfdCksCiAJY29tbW9u
X3Byb2ZpbGVfc2VydmVyX2NoYW5uZWxfdmFsaWQsCiAJKGF0dHJfdCBjb25zdCAqIGNvbnN0KSAm
c3BfcHJvZmlsZV9hdHRycwotLS0gL3Vzci9zcmMvdXNyLnNiaW4vc2RwZC9zc2FyLmMJMjAwNi0w
Ni0xOSAxNjo0NDo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrIHNzYXIuYwkyMDA3LTExLTA2IDEwOjM5
OjM1LjAwMDAwMDAwMCArMDAwMApAQCAtNTUsMTIgKzU1LDExIEBACiAJdWludDhfdAkJKnJzcCA9
IHNydi0+ZmRpZHhbZmRdLnJzcDsKIAl1aW50OF90IGNvbnN0CSpyc3BfZW5kID0gcnNwICsgTDJD
QVBfTVRVX01BWElNVU07CiAKLQl1aW50OF90IGNvbnN0CSpzc3BwdHIgPSBOVUxMLCAqYWlkcHRy
ID0gTlVMTDsKLQl1aW50OF90CQkqcHRyID0gTlVMTDsKKwl1aW50OF90IGNvbnN0CSphaWRwdHIg
PSBOVUxMOwogCiAJcHJvdmlkZXJfdAkqcHJvdmlkZXIgPSBOVUxMOwotCWludDMyX3QJCSB0eXBl
LCByc3BfbGltaXQsIHNzcGxlbiwgYWlkbGVuLCBjc2xlbiwgY3M7Ci0JdWludDEyOF90CSB1dWlk
LCBwdXVpZDsKKwlpbnQzMl90CQkgdHlwZSwgcnNwX2xpbWl0LCB1Y291bnQsIGFpZGxlbiwgY3Ns
ZW4sIGNzOworCXVpbnQxMjhfdAkgdWxpc3RbMTJdOwogCiAJLyoKIAkgKiBNaW5pbWFsIFNlcnZp
Y2UgU2VhcmNoIEF0dHJpYnV0ZSBSZXF1ZXN0IHJlcXVlc3QKQEAgLTczLDMxICs3MiwxMSBAQAog
CSAqIHZhbHVlOAkJLSAxIGJ5dGUgIENvbnRpbnVhdGlvblN0YXRlCiAJICovCiAKLQlpZiAocmVx
X2VuZCAtIHJlcSA8IDEzKQotCQlyZXR1cm4gKFNEUF9FUlJPUl9DT0RFX0lOVkFMSURfUkVRVUVT
VF9TWU5UQVgpOwotCi0JLyogR2V0IHNpemUgb2YgU2VydmljZVNlYXJjaFBhdHRlcm4gKi8KLQlz
c3BsZW4gPSAwOwotCVNEUF9HRVQ4KHR5cGUsIHJlcSk7Ci0Jc3dpdGNoICh0eXBlKSB7Ci0JY2Fz
ZSBTRFBfREFUQV9TRVE4OgotCQlTRFBfR0VUOChzc3BsZW4sIHJlcSk7Ci0JCWJyZWFrOwotCi0J
Y2FzZSBTRFBfREFUQV9TRVExNjoKLQkJU0RQX0dFVDE2KHNzcGxlbiwgcmVxKTsKLQkJYnJlYWs7
Ci0KLQljYXNlIFNEUF9EQVRBX1NFUTMyOgotCQlTRFBfR0VUMzIoc3NwbGVuLCByZXEpOwotCQli
cmVhazsKLQl9Ci0JaWYgKHNzcGxlbiA8PSAwKQorCS8qIEdldCBTZXJ2aWNlU2VhcmNoUGF0dGVy
biAqLworCXVjb3VudCA9IHNlcnZlcl9nZXRfc2VydmljZV9zZWFyY2hfcGF0dGVybigmcmVxLCBy
ZXFfZW5kLCB1bGlzdCk7CisJaWYgKHVjb3VudCA8IDEgfHwgdWNvdW50ID4gMTIpCiAJCXJldHVy
biAoU0RQX0VSUk9SX0NPREVfSU5WQUxJRF9SRVFVRVNUX1NZTlRBWCk7CiAKLQlzc3BwdHIgPSBy
ZXE7Ci0JcmVxICs9IHNzcGxlbjsKLQogCS8qIEdldCBNYXhpbXVtQXR0cmlidXRlQnl0ZUNvdW50
ICovCiAJaWYgKHJlcSArIDIgPiByZXFfZW5kKQogCQlyZXR1cm4gKFNEUF9FUlJPUl9DT0RFX0lO
VkFMSURfUkVRVUVTVF9TWU5UQVgpOwpAQCAtMTQ1LDEzICsxMjQsMTIgQEAKIAkJcmV0dXJuIChT
RFBfRVJST1JfQ09ERV9JTlZBTElEX1JFUVVFU1RfU1lOVEFYKTsKIAogCVNEUF9HRVQ4KGNzbGVu
LCByZXEpOwotCWlmIChjc2xlbiAhPSAwKSB7Ci0JCWlmIChjc2xlbiAhPSAyIHx8IHJlcV9lbmQg
LSByZXEgIT0gMikKLQkJCXJldHVybiAoU0RQX0VSUk9SX0NPREVfSU5WQUxJRF9SRVFVRVNUX1NZ
TlRBWCk7Ci0KKwlpZiAoY3NsZW4gPT0gMiAmJiByZXEgKyAyID09IHJlcV9lbmQpCiAJCVNEUF9H
RVQxNihjcywgcmVxKTsKLQl9IGVsc2UKKwllbHNlIGlmIChjc2xlbiA9PSAwICYmIHJlcSA9PSBy
ZXFfZW5kKQogCQljcyA9IDA7CisJZWxzZQorCQlyZXR1cm4gKFNEUF9FUlJPUl9DT0RFX0lOVkFM
SURfUkVRVUVTVF9TWU5UQVgpOwogCiAJLyogUHJvY2VzcyB0aGUgcmVxdWVzdC4gRmlyc3QsIGNo
ZWNrIGNvbnRpbnVhdGlvbiBzdGF0ZSAqLwogCWlmIChzcnYtPmZkaWR4W2ZkXS5yc3BfY3MgIT0g
Y3MpCkBAIC0xNjgsNzAgKzE0NiwyMyBAQAogCSAqCVsgYXR0ciBsaXN0IF0KIAkgKi8KIAotCXB0
ciA9IHJzcCArIDM7Ci0KLQl3aGlsZSAoc3NwbGVuID4gMCkgewotCQlTRFBfR0VUOCh0eXBlLCBz
c3BwdHIpOwotCQlzc3BsZW4gLS07Ci0KLQkJc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2UgU0RQX0RB
VEFfVVVJRDE2OgotCQkJaWYgKHNzcGxlbiA8IDIpCi0JCQkJcmV0dXJuIChTRFBfRVJST1JfQ09E
RV9JTlZBTElEX1JFUVVFU1RfU1lOVEFYKTsKLQotCQkJbWVtY3B5KCZ1dWlkLCAmdXVpZF9iYXNl
LCBzaXplb2YodXVpZCkpOwotCQkJdXVpZC5iWzJdID0gKnNzcHB0ciArKzsKLQkJCXV1aWQuYlsz
XSA9ICpzc3BwdHIgKys7Ci0JCQlzc3BsZW4gLT0gMjsKLQkJCWJyZWFrOwotCi0JCWNhc2UgU0RQ
X0RBVEFfVVVJRDMyOgotCQkJaWYgKHNzcGxlbiA8IDQpCi0JCQkJcmV0dXJuIChTRFBfRVJST1Jf
Q09ERV9JTlZBTElEX1JFUVVFU1RfU1lOVEFYKTsKLQotCQkJbWVtY3B5KCZ1dWlkLCAmdXVpZF9i
YXNlLCBzaXplb2YodXVpZCkpOwotCQkJdXVpZC5iWzBdID0gKnNzcHB0ciArKzsKLQkJCXV1aWQu
YlsxXSA9ICpzc3BwdHIgKys7Ci0JCQl1dWlkLmJbMl0gPSAqc3NwcHRyICsrOwotCQkJdXVpZC5i
WzNdID0gKnNzcHB0ciArKzsKLQkJCXNzcGxlbiAtPSA0OwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBT
RFBfREFUQV9VVUlEMTI4OgotCQkJaWYgKHNzcGxlbiA8IDE2KQotCQkJCXJldHVybiAoU0RQX0VS
Uk9SX0NPREVfSU5WQUxJRF9SRVFVRVNUX1NZTlRBWCk7Ci0KLQkJCW1lbWNweSh1dWlkLmIsIHNz
cHB0ciwgMTYpOwotCQkJc3NwcHRyICs9IDE2OwotCQkJc3NwbGVuIC09IDE2OwotCQkJYnJlYWs7
Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAoU0RQX0VSUk9SX0NPREVfSU5WQUxJRF9SRVFVRVNU
X1NZTlRBWCk7Ci0JCQkvKiBOT1QgUkVBQ0hFRCAqLwotCQl9Ci0KLQkJZm9yIChwcm92aWRlciA9
IHByb3ZpZGVyX2dldF9maXJzdCgpOwotCQkgICAgIHByb3ZpZGVyICE9IE5VTEw7Ci0JCSAgICAg
cHJvdmlkZXIgPSBwcm92aWRlcl9nZXRfbmV4dChwcm92aWRlcikpIHsKLQkJCWlmICghcHJvdmlk
ZXJfbWF0Y2hfYmRhZGRyKHByb3ZpZGVyLCAmc3J2LT5yZXFfc2EuYnRfYmRhZGRyKSkKLQkJCQlj
b250aW51ZTsKKwlyc3AgKz0gMzsJLyogbGVhdmUgc3BhY2UgZm9yIHNlcXVlbmNlIGhlYWRlciAq
LwogCi0JCQltZW1jcHkoJnB1dWlkLCAmdXVpZF9iYXNlLCBzaXplb2YocHV1aWQpKTsKLQkJCXB1
dWlkLmJbMl0gPSBwcm92aWRlci0+cHJvZmlsZS0+dXVpZCA+PiA4OwotCQkJcHV1aWQuYlszXSA9
IHByb3ZpZGVyLT5wcm9maWxlLT51dWlkOworCWZvciAocHJvdmlkZXIgPSBwcm92aWRlcl9nZXRf
Zmlyc3QoKTsKKwkgICAgIHByb3ZpZGVyICE9IE5VTEw7CisJICAgICBwcm92aWRlciA9IHByb3Zp
ZGVyX2dldF9uZXh0KHByb3ZpZGVyKSkgeworCQlpZiAoIXByb3ZpZGVyX21hdGNoX2JkYWRkcihw
cm92aWRlciwgJnNydi0+cmVxX3NhLmJ0X2JkYWRkcikpCisJCQljb250aW51ZTsKIAotCQkJaWYg
KG1lbWNtcCgmdXVpZCwgJnB1dWlkLCBzaXplb2YodXVpZCkpICE9IDAgJiYKLQkJCSAgICBtZW1j
bXAoJnV1aWQsICZ1dWlkX3B1YmxpY19icm93c2VfZ3JvdXAsIHNpemVvZih1dWlkKSkgIT0gMCkK
LQkJCQljb250aW51ZTsKKwkJaWYgKCFwcm92aWRlcl9tYXRjaF91dWlkKHByb3ZpZGVyLCB1bGlz
dCwgdWNvdW50KSkKKwkJCWNvbnRpbnVlOwogCi0JCQljcyA9IHNlcnZlcl9wcmVwYXJlX2F0dHJf
bGlzdChwcm92aWRlciwKLQkJCQlhaWRwdHIsIGFpZHB0ciArIGFpZGxlbiwgcHRyLCByc3BfZW5k
KTsKLQkJCWlmIChjcyA8IDApCi0JCQkJcmV0dXJuIChTRFBfRVJST1JfQ09ERV9JTlNVRkZJQ0lF
TlRfUkVTT1VSQ0VTKTsKKwkJY3MgPSBzZXJ2ZXJfcHJlcGFyZV9hdHRyX2xpc3QocHJvdmlkZXIs
CisJCQlhaWRwdHIsIGFpZHB0ciArIGFpZGxlbiwgcnNwLCByc3BfZW5kKTsKKwkJaWYgKGNzIDwg
MCkKKwkJCXJldHVybiAoU0RQX0VSUk9SX0NPREVfSU5TVUZGSUNJRU5UX1JFU09VUkNFUyk7CiAK
LQkJCXB0ciArPSBjczsKLQkJfQorCQlyc3AgKz0gY3M7CiAJfQogCiAJLyogU2V0IHJlcGx5IHNp
emUgKG5vdCBjb3VudGluZyBQRFUgaGVhZGVyIGFuZCBjb250aW51YXRpb24gc3RhdGUpICovCkBA
IC0yMzksMTMgKzE3MCwxMyBAQAogCWlmIChzcnYtPmZkaWR4W2ZkXS5yc3BfbGltaXQgPiByc3Bf
bGltaXQpCiAJCXNydi0+ZmRpZHhbZmRdLnJzcF9saW1pdCA9IHJzcF9saW1pdDsKIAotCXNydi0+
ZmRpZHhbZmRdLnJzcF9zaXplID0gcHRyIC0gcnNwOworCXNydi0+ZmRpZHhbZmRdLnJzcF9zaXpl
ID0gcnNwIC0gc3J2LT5mZGlkeFtmZF0ucnNwOwogCXNydi0+ZmRpZHhbZmRdLnJzcF9jcyA9IDA7
CiAKIAkvKiBGaXggQXR0cmlidXRlTGlzdHMgc2VxdWVuY2UgaGVhZGVyICovCi0JcHRyID0gcnNw
OwotCVNEUF9QVVQ4KFNEUF9EQVRBX1NFUTE2LCBwdHIpOwotCVNEUF9QVVQxNihzcnYtPmZkaWR4
W2ZkXS5yc3Bfc2l6ZSAtIDMsIHB0cik7CisJcnNwID0gc3J2LT5mZGlkeFtmZF0ucnNwOworCVNE
UF9QVVQ4KFNEUF9EQVRBX1NFUTE2LCByc3ApOworCVNEUF9QVVQxNihzcnYtPmZkaWR4W2ZkXS5y
c3Bfc2l6ZSAtIDMsIHJzcCk7CiAKIAlyZXR1cm4gKDApOwogfQotLS0gL3Vzci9zcmMvdXNyLnNi
aW4vc2RwZC9zc3IuYwkyMDA2LTA2LTE5IDE2OjQ0OjU2LjAwMDAwMDAwMCArMDEwMAorKysgc3Ny
LmMJMjAwNy0xMS0wNiAxMDo0OTo0Ni4wMDAwMDAwMDAgKzAwMDAKQEAgLTQ5LDIxICs0OSwxMTgg
QEAKICNpbmNsdWRlICJ1dWlkLXByaXZhdGUuaCIKIAogLyoKKyAqIEV4dHJhY3QgU2VydmljZVNl
YXJjaFBhdHRlcm4gZnJvbSByZXF1ZXN0IHRvIHV1aWQgYXJyYXkKKyAqCXJldHVybiBjb3VudCBv
ciAwIGlmIGVycm9yCisgKi8KK2ludAorc2VydmVyX2dldF9zZXJ2aWNlX3NlYXJjaF9wYXR0ZXJu
KHVpbnQ4X3QgY29uc3QgKipidWYsIHVpbnQ4X3QgY29uc3QgKmVuZCwgdWludDEyOF90ICp1dWlk
KQoreworCXVpbnQ4X3QgY29uc3QgKnJlcSA9ICpidWY7CisJdWludDMyX3QgdHlwZSwgc3NwbGVu
OworCWludCBjb3VudDsKKworCWlmIChyZXEgKyAxID4gZW5kKQorCQlyZXR1cm4gMDsKKworCVNE
UF9HRVQ4KHR5cGUsIHJlcSk7CisKKwlzc3BsZW4gPSAwOworCXN3aXRjaCAodHlwZSkgeworCWNh
c2UgU0RQX0RBVEFfU0VRODoKKwkJaWYgKHJlcSArIDEgPiBlbmQpCisJCQlyZXR1cm4gMDsKKwor
CQlTRFBfR0VUOChzc3BsZW4sIHJlcSk7CisJCWJyZWFrOworCisJY2FzZSBTRFBfREFUQV9TRVEx
NjoKKwkJaWYgKHJlcSArIDIgPiBlbmQpCisJCQlyZXR1cm4gMDsKKworCQlTRFBfR0VUMTYoc3Nw
bGVuLCByZXEpOworCQlicmVhazsKKworCWNhc2UgU0RQX0RBVEFfU0VRMzI6CisJCWlmIChyZXEg
KyA0ID4gZW5kKQorCQkJcmV0dXJuIDA7CisKKwkJU0RQX0dFVDMyKHNzcGxlbiwgcmVxKTsKKwkJ
YnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocmVxICsgc3NwbGVu
ID4gZW5kKQorCQlyZXR1cm4gMDsKKworCWNvdW50ID0gMDsKKwl3aGlsZSAoc3NwbGVuID4gMCkg
eworCQlpZiAoY291bnQgPT0gMTIpCisJCQlyZXR1cm4gMDsKKworCQlTRFBfR0VUOCh0eXBlLCBy
ZXEpOworCQlzc3BsZW4tLTsKKworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBTRFBfREFUQV9V
VUlEMTY6CisJCQlpZiAoc3NwbGVuIDwgMikKKwkJCQlyZXR1cm4gMDsKKworCQkJbWVtY3B5KHV1
aWQsICZ1dWlkX2Jhc2UsIHNpemVvZigqdXVpZCkpOworCQkJdXVpZC0+YlsyXSA9ICpyZXErKzsK
KwkJCXV1aWQtPmJbM10gPSAqcmVxKys7CisJCQlzc3BsZW4gLT0gMjsKKwkJCWJyZWFrOworCisJ
CWNhc2UgU0RQX0RBVEFfVVVJRDMyOgorCQkJaWYgKHNzcGxlbiA8IDQpCisJCQkJcmV0dXJuIDA7
CisKKwkJCW1lbWNweSh1dWlkLCAmdXVpZF9iYXNlLCBzaXplb2YoKnV1aWQpKTsKKwkJCXV1aWQt
PmJbMF0gPSAqcmVxKys7CisJCQl1dWlkLT5iWzFdID0gKnJlcSsrOworCQkJdXVpZC0+YlsyXSA9
ICpyZXErKzsKKwkJCXV1aWQtPmJbM10gPSAqcmVxKys7CisJCQlzc3BsZW4gLT0gNDsKKwkJCWJy
ZWFrOworCisJCWNhc2UgU0RQX0RBVEFfVVVJRDEyODoKKwkJCWlmIChzc3BsZW4gPCAxNikKKwkJ
CQlyZXR1cm4gMDsKKworCQkJbWVtY3B5KHV1aWQsIHJlcSwgMTYpOworCQkJcmVxICs9IDE2Owor
CQkJc3NwbGVuIC09IDE2OworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOwor
CQl9CisKKwkJY291bnQrKzsKKwkJdXVpZCsrOworCX0KKworCSpidWYgPSByZXE7CisJcmV0dXJu
IGNvdW50OworfQorCisvKgogICogUHJlcGFyZSBTRFAgU2VydmljZSBTZWFyY2ggUmVzcG9uc2UK
ICAqLwogCiBpbnQzMl90CiBzZXJ2ZXJfcHJlcGFyZV9zZXJ2aWNlX3NlYXJjaF9yZXNwb25zZShz
ZXJ2ZXJfcCBzcnYsIGludDMyX3QgZmQpCiB7Ci0JdWludDhfdCAJKnJlcSA9IHNydi0+cmVxICsg
c2l6ZW9mKHNkcF9wZHVfdCk7CisJdWludDhfdCBjb25zdAkqcmVxID0gc3J2LT5yZXEgKyBzaXpl
b2Yoc2RwX3BkdV90KTsKIAl1aW50OF90IGNvbnN0CSpyZXFfZW5kID0gcmVxICsgKChzZHBfcGR1
X3ApKHNydi0+cmVxKSktPmxlbjsKIAl1aW50OF90CQkqcnNwID0gc3J2LT5mZGlkeFtmZF0ucnNw
OwogCXVpbnQ4X3QgY29uc3QJKnJzcF9lbmQgPSByc3AgKyBMMkNBUF9NVFVfTUFYSU1VTTsKIAot
CXVpbnQ4X3QJCSpwdHIgPSBOVUxMOwogCXByb3ZpZGVyX3QJKnByb3ZpZGVyID0gTlVMTDsKLQlp
bnQzMl90CQkgdHlwZSwgc3NwbGVuLCByc3BfbGltaXQsIHJjb3VudCwgY3NsZW4sIGNzOwotCXVp
bnQxMjhfdAkgdXVpZCwgcHV1aWQ7CisJaW50MzJfdAkJIHVjb3VudCwgcnNwX2xpbWl0LCBjc2xl
biwgY3M7CisJdWludDEyOF90CSB1bGlzdFsxMl07CiAKIAkvKgogCSAqIE1pbmltYWwgU0RQIFNl
cnZpY2UgU2VhcmNoIFJlcXVlc3QKQEAgLTc0LDUwICsxNzEsMzAgQEAKIAkgKiB2YWx1ZTgJCS0g
MSBieXRlICBDb250aW51YXRpb25TdGF0ZQogCSAqLwogCi0JaWYgKHJlcV9lbmQgLSByZXEgPCA4
KQotCQlyZXR1cm4gKFNEUF9FUlJPUl9DT0RFX0lOVkFMSURfUkVRVUVTVF9TWU5UQVgpOwotCi0J
LyogR2V0IHNpemUgb2YgU2VydmljZVNlYXJjaFBhdHRlcm4gKi8KLQlzc3BsZW4gPSAwOwotCVNE
UF9HRVQ4KHR5cGUsIHJlcSk7Ci0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBTRFBfREFUQV9TRVE4
OgotCQlTRFBfR0VUOChzc3BsZW4sIHJlcSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRFBfREFUQV9T
RVExNjoKLQkJU0RQX0dFVDE2KHNzcGxlbiwgcmVxKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNEUF9E
QVRBX1NFUTMyOgotCQlTRFBfR0VUMzIoc3NwbGVuLCByZXEpOwotCQlicmVhazsKLQl9Ci0JaWYg
KHNzcGxlbiA8PSAwKQorCS8qIEdldCBTZXJ2aWNlU2VhcmNoUGF0dGVybiBpbnRvIHV1aWQgYXJy
YXkgKi8KKwl1Y291bnQgPSBzZXJ2ZXJfZ2V0X3NlcnZpY2Vfc2VhcmNoX3BhdHRlcm4oJnJlcSwg
cmVxX2VuZCwgdWxpc3QpOworCWlmICh1Y291bnQgPCAxIHx8IHVjb3VudCA+IDEyKQogCQlyZXR1
cm4gKFNEUF9FUlJPUl9DT0RFX0lOVkFMSURfUkVRVUVTVF9TWU5UQVgpOwogCi0JcHRyID0gKHVp
bnQ4X3QgKikgcmVxICsgc3NwbGVuOwotCiAJLyogR2V0IE1heGltdW1TZXJ2aWNlUmVjb3JkQ291
bnQgKi8KLQlpZiAocHRyICsgMiA+IHJlcV9lbmQpCisJaWYgKHJlcSArIDIgPiByZXFfZW5kKQog
CQlyZXR1cm4gKFNEUF9FUlJPUl9DT0RFX0lOVkFMSURfUkVRVUVTVF9TWU5UQVgpOwogCi0JU0RQ
X0dFVDE2KHJzcF9saW1pdCwgcHRyKTsKKwlTRFBfR0VUMTYocnNwX2xpbWl0LCByZXEpOwogCWlm
IChyc3BfbGltaXQgPD0gMCkKIAkJcmV0dXJuIChTRFBfRVJST1JfQ09ERV9JTlZBTElEX1JFUVVF
U1RfU1lOVEFYKTsKIAogCS8qIEdldCBDb250aW51YXRpb25TdGF0ZSAqLwotCWlmIChwdHIgKyAx
ID4gcmVxX2VuZCkKKwlpZiAocmVxICsgMSA+IHJlcV9lbmQpCiAJCXJldHVybiAoU0RQX0VSUk9S
X0NPREVfSU5WQUxJRF9SRVFVRVNUX1NZTlRBWCk7CiAKLQlTRFBfR0VUOChjc2xlbiwgcHRyKTsK
LQlpZiAoY3NsZW4gIT0gMCkgewotCQlpZiAoY3NsZW4gIT0gMiB8fCByZXFfZW5kIC0gcHRyICE9
IDIpCi0JCQlyZXR1cm4gKFNEUF9FUlJPUl9DT0RFX0lOVkFMSURfUkVRVUVTVF9TWU5UQVgpOwot
Ci0JCVNEUF9HRVQxNihjcywgcHRyKTsKLQl9IGVsc2UKKwlTRFBfR0VUOChjc2xlbiwgcmVxKTsK
KwlpZiAoY3NsZW4gPT0gMiAmJiByZXEgKyAyID09IHJlcV9lbmQpCisJCVNEUF9HRVQxNihjcywg
cmVxKTsKKwllbHNlIGlmIChjc2xlbiA9PSAwICYmIHJlcSA9PSByZXFfZW5kKQogCQljcyA9IDA7
CisJZWxzZQorCQlyZXR1cm4gKFNEUF9FUlJPUl9DT0RFX0lOVkFMSURfQ09OVElOVUFUSU9OX1NU
QVRFKTsKIAogCS8qIFByb2Nlc3MgdGhlIHJlcXVlc3QuIEZpcnN0LCBjaGVjayBjb250aW51YXRp
b24gc3RhdGUgKi8KIAlpZiAoc3J2LT5mZGlkeFtmZF0ucnNwX2NzICE9IGNzKQpAQCAtMTMyLDc5
ICsyMDksMjcgQEAKIAkgKiB2YWx1ZTE2CS0gMiBieXRlcyBDdXJyZW50U2VydmljZVJlY29yZENv
dW50IChub3QgaW5jbC4pCiAJICogdmFsdWUzMgktIDQgYnl0ZXMgaGFuZGxlCiAJICogWyB2YWx1
ZTMyIF0KLQkgKgotCSAqIENhbGN1bGF0ZSBob3cgbWFueSByZWNvcmQgaGFuZGxlcyB3ZSBjYW4g
Zml0Ci0JICogaW4gb3VyIHJlcGx5IGJ1ZmZlciBhbmQgYWRqdXN0IHJsaW1pdC4KIAkgKi8KIAot
CXB0ciA9IHJzcDsKLQlyY291bnQgPSAocnNwX2VuZCAtIHB0cikgLyA0OwotCWlmIChyY291bnQg
PCByc3BfbGltaXQpCi0JCXJzcF9saW1pdCA9IHJjb3VudDsKLQotCS8qIExvb2sgZm9yIHRoZSBy
ZWNvcmQgaGFuZGxlcyAqLwotCWZvciAocmNvdW50ID0gMDsgc3NwbGVuID4gMCAmJiByY291bnQg
PCByc3BfbGltaXQ7ICkgewotCQlTRFBfR0VUOCh0eXBlLCByZXEpOwotCQlzc3BsZW4gLS07Ci0K
LQkJc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2UgU0RQX0RBVEFfVVVJRDE2OgotCQkJaWYgKHNzcGxl
biA8IDIpCi0JCQkJcmV0dXJuIChTRFBfRVJST1JfQ09ERV9JTlZBTElEX1JFUVVFU1RfU1lOVEFY
KTsKLQotCQkJbWVtY3B5KCZ1dWlkLCAmdXVpZF9iYXNlLCBzaXplb2YodXVpZCkpOwotCQkJdXVp
ZC5iWzJdID0gKnJlcSArKzsKLQkJCXV1aWQuYlszXSA9ICpyZXEgKys7Ci0JCQlzc3BsZW4gLT0g
MjsKLQkJCWJyZWFrOwotCi0JCWNhc2UgU0RQX0RBVEFfVVVJRDMyOgotCQkJaWYgKHNzcGxlbiA8
IDQpCi0JCQkJcmV0dXJuIChTRFBfRVJST1JfQ09ERV9JTlZBTElEX1JFUVVFU1RfU1lOVEFYKTsK
LQotCQkJbWVtY3B5KCZ1dWlkLCAmdXVpZF9iYXNlLCBzaXplb2YodXVpZCkpOwotCQkJdXVpZC5i
WzBdID0gKnJlcSArKzsKLQkJCXV1aWQuYlsxXSA9ICpyZXEgKys7Ci0JCQl1dWlkLmJbMl0gPSAq
cmVxICsrOwotCQkJdXVpZC5iWzNdID0gKnJlcSArKzsKLQkJCXNzcGxlbiAtPSA0OwotCQkJYnJl
YWs7CisJLyogTG9vayBmb3IgdGhlIHJlY29yZCBoYW5kbGVzIGFuZCBhZGQgdG8gdGhlIHJzcCBi
dWZmZXIgKi8KKwlmb3IgKHByb3ZpZGVyID0gcHJvdmlkZXJfZ2V0X2ZpcnN0KCk7CisJICAgICBw
cm92aWRlciAhPSBOVUxMOworCSAgICAgcHJvdmlkZXIgPSBwcm92aWRlcl9nZXRfbmV4dChwcm92
aWRlcikpIHsKKwkJaWYgKCFwcm92aWRlcl9tYXRjaF9iZGFkZHIocHJvdmlkZXIsICZzcnYtPnJl
cV9zYS5idF9iZGFkZHIpKQorCQkJY29udGludWU7CiAKLQkJY2FzZSBTRFBfREFUQV9VVUlEMTI4
OgotCQkJaWYgKHNzcGxlbiA8IDE2KQotCQkJCXJldHVybiAoU0RQX0VSUk9SX0NPREVfSU5WQUxJ
RF9SRVFVRVNUX1NZTlRBWCk7CisJCWlmICghcHJvdmlkZXJfbWF0Y2hfdXVpZChwcm92aWRlciwg
dWxpc3QsIHVjb3VudCkpCisJCQljb250aW51ZTsKIAotCQkJbWVtY3B5KHV1aWQuYiwgcmVxLCAx
Nik7Ci0JCQlyZXEgKz0gMTY7Ci0JCQlzc3BsZW4gLT0gMTY7CisJCWlmIChyc3AgKyA0ID4gcnNw
X2VuZCkKIAkJCWJyZWFrOwogCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gKFNEUF9FUlJPUl9DT0RF
X0lOVkFMSURfUkVRVUVTVF9TWU5UQVgpOwotCQkJLyogTk9UIFJFQUNIRUQgKi8KLQkJfQotCi0J
CWZvciAocHJvdmlkZXIgPSBwcm92aWRlcl9nZXRfZmlyc3QoKTsKLQkJICAgICBwcm92aWRlciAh
PSBOVUxMICYmIHJjb3VudCA8IHJzcF9saW1pdDsKLQkJICAgICBwcm92aWRlciA9IHByb3ZpZGVy
X2dldF9uZXh0KHByb3ZpZGVyKSkgewotCQkJaWYgKCFwcm92aWRlcl9tYXRjaF9iZGFkZHIocHJv
dmlkZXIsICZzcnYtPnJlcV9zYS5idF9iZGFkZHIpKQotCQkJCWNvbnRpbnVlOwotCi0JCQltZW1j
cHkoJnB1dWlkLCAmdXVpZF9iYXNlLCBzaXplb2YocHV1aWQpKTsKLQkJCXB1dWlkLmJbMl0gPSBw
cm92aWRlci0+cHJvZmlsZS0+dXVpZCA+PiA4OwotCQkJcHV1aWQuYlszXSA9IHByb3ZpZGVyLT5w
cm9maWxlLT51dWlkOwotCi0JCQlpZiAobWVtY21wKCZ1dWlkLCAmcHV1aWQsIHNpemVvZih1dWlk
KSkgPT0gMCB8fAotCQkJICAgIG1lbWNtcCgmdXVpZCwgJnV1aWRfcHVibGljX2Jyb3dzZV9ncm91
cCwgc2l6ZW9mKHV1aWQpKSA9PSAwKSB7Ci0JCQkJU0RQX1BVVDMyKHByb3ZpZGVyLT5oYW5kbGUs
IHB0cik7Ci0JCQkJcmNvdW50ICsrOwotCQkJfQotCQl9CisJCVNEUF9QVVQzMihwcm92aWRlci0+
aGFuZGxlLCByc3ApOwogCX0KIAogCS8qIFNldCByZXBseSBzaXplIChub3QgY291bnRpbmcgUERV
IGhlYWRlciBhbmQgY29udGludWF0aW9uIHN0YXRlKSAqLwogCXNydi0+ZmRpZHhbZmRdLnJzcF9s
aW1pdCA9IHNydi0+ZmRpZHhbZmRdLm9tdHUgLSBzaXplb2Yoc2RwX3BkdV90KSAtIDQ7Ci0Jc3J2
LT5mZGlkeFtmZF0ucnNwX3NpemUgPSBwdHIgLSByc3A7CisJc3J2LT5mZGlkeFtmZF0ucnNwX3Np
emUgPSByc3AgLSBzcnYtPmZkaWR4W2ZkXS5yc3A7CiAJc3J2LT5mZGlkeFtmZF0ucnNwX2NzID0g
MDsKIAogCXJldHVybiAoMCk7Cg==

--_97F1B68C-D8E1-CBA5-AD68-6CEE9808DF07_
Content-Type: application/octet-stream; name="check.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="check.c"

I2luY2x1ZGUgPGJsdWV0b290aC5oPgojaW5jbHVkZSA8ZXJyLmg+CiNpbmNsdWRlIDxlcnJuby5o
PgojaW5jbHVkZSA8c2RwLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnVpbnQxNl90IHNlcnZpY2Vz
W10gPSB7CglTRFBfVVVJRF9QUk9UT0NPTF9PQkVYLAoJLy9TRFBfU0VSVklDRV9DTEFTU19PQkVY
X09CSkVDVF9QVVNILAp9OwoKdWludDMyX3QgYXR0cnNbXSA9IHsKCVNEUF9BVFRSX1JBTkdFKAlT
RFBfQVRUUl9QUk9UT0NPTF9ERVNDUklQVE9SX0xJU1QsCgkJCVNEUF9BVFRSX1BST1RPQ09MX0RF
U0NSSVBUT1JfTElTVCksCglTRFBfQVRUUl9SQU5HRSggU0RQX0FUVFJfQURESVRJT05BTF9QUk9U
T0NPTF9ERVNDUklQVE9SX0xJU1RTLAoJCQlTRFBfQVRUUl9BRERJVElPTkFMX1BST1RPQ09MX0RF
U0NSSVBUT1JfTElTVFMpLAoJU0RQX0FUVFJfUkFOR0UoIFNEUF9BVFRSX1NFUlZJQ0VfQ0xBU1Nf
SURfTElTVCwKCQkJU0RQX0FUVFJfU0VSVklDRV9DTEFTU19JRF9MSVNUKSwKfTsKCiNkZWZpbmUg
TlVNKHYpCShzaXplb2YodikgLyBzaXplb2YodlswXSkpCgpzZHBfYXR0cl90IHZhbHVlc1s4XTsK
dWludDhfdCBidWZmZXJbTlVNKHZhbHVlcyldWzUxMl07CgppbnQKbWFpbihpbnQgYWMsIGNoYXIg
KmF2W10pCnsKCXZvaWQgKnNzOwoJaW50IGksIGosIHJ2OwoKCWZvciAoaSA9IDAgOyBpIDwgTlVN
KHZhbHVlcykgOyBpKyspIHsKCQl2YWx1ZXNbaV0uZmxhZ3MgPSBTRFBfQVRUUl9JTlZBTElEOwoJ
CXZhbHVlc1tpXS5hdHRyID0gMDsKCQl2YWx1ZXNbaV0udmxlbiA9IHNpemVvZihidWZmZXJbaV0p
OwoJCXZhbHVlc1tpXS52YWx1ZSA9IGJ1ZmZlcltpXTsKCX0KCglzcyA9IHNkcF9vcGVuX2xvY2Fs
KE5VTEwpOwoJaWYgKHNzID09IE5VTEwgfHwgKGVycm5vID0gc2RwX2Vycm9yKHNzKSkgIT0gMCkK
CQllcnIoRVhJVF9GQUlMVVJFLCAic2RwX29wZW5fbG9jYWwiKTsKCglydiA9IHNkcF9zZWFyY2go
c3MsIE5VTShzZXJ2aWNlcyksIHNlcnZpY2VzLAoJCQkgICAgTlVNKGF0dHJzKSwgYXR0cnMsCgkJ
CSAgICBOVU0odmFsdWVzKSwgdmFsdWVzKTsKCQkJCglpZiAocnYgIT0gMCkKCQllcnJ4KEVYSVRf
RkFJTFVSRSwgInNkcF9zZWFyY2g6ICVzIiwgc3RyZXJyb3IocnYpKTsKCglzZHBfY2xvc2Uoc3Mp
OwoKCWZvciAoaSA9IDAgOyBpIDwgTlVNKHZhbHVlcykgOyBpKyspIHsKCQlwcmludGYoInZhbHVl
ICVkOlxuIiwgaSk7CgkJaWYgKHZhbHVlc1tpXS5mbGFncyAhPSBTRFBfQVRUUl9PSykKCQkJY29u
dGludWU7CgoJCXByaW50ZigiXHRhdHRyICAlMDR4XG4iLCB2YWx1ZXNbaV0uYXR0cik7CgkJcHJp
bnRmKCJcdHZhbHVlIik7CgkJZm9yIChqID0gMCA7IGogPCB2YWx1ZXNbaV0udmxlbiA7IGorKykK
CQkJcHJpbnRmKCIgJTAyeCIsIHZhbHVlc1tpXS52YWx1ZVtqXSk7CgoJCXByaW50ZigiXG4iKTsK
CX0KCglyZXR1cm4gRVhJVF9TVUNDRVNTOwp9Cg==

--_97F1B68C-D8E1-CBA5-AD68-6CEE9808DF07_--




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E1IpN5T-0006Rs-Jv>