From owner-freebsd-bluetooth@FreeBSD.ORG Wed Nov 7 02:26:58 2007 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B541E16A41B for ; Wed, 7 Nov 2007 02:26:58 +0000 (UTC) (envelope-from plunky@rya-online.net) Received: from smtp02.one2one.net (smtp02.one2one.net [149.254.192.174]) by mx1.freebsd.org (Postfix) with ESMTP id F0B1E13C4B5 for ; Wed, 7 Nov 2007 02:26:54 +0000 (UTC) (envelope-from plunky@rya-online.net) Received: from [127.0.0.1] (helo=localhost) by localhost.localdomain with esmtp (Exim 4.50) id 1IpN5g-0006S1-5N; Tue, 06 Nov 2007 11:59:32 +0000 Received: from localhost.localdomain ([127.0.0.1]) by localhost (smtpbeckt01 [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 24674-07; Tue, 6 Nov 2007 11:59:31 +0000 (GMT) Received: from [10.32.13.214] (helo=Inbox) by localhost.localdomain with esmtp (Exim 4.50) id 1IpN5T-0006Rs-Jv; Tue, 06 Nov 2007 11:59:31 +0000 MIME-Version: 1.0 content-class: From: Iain Hibbert Date: Tue, 6 Nov 2007 11:57:08 +0000 Importance: normal X-Priority: 3 To: Content-Type: multipart/mixed; boundary="_97F1B68C-D8E1-CBA5-AD68-6CEE9808DF07_" Message-Id: X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at example.com X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: plunky@rya-online.net X-SA-Exim-Scanned: No (on localhost.localdomain); SAEximRunCond expanded to false Cc: maxsim.yevmenkin@gmail.com Subject: Re: sdp - SearchService of UUID X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Nov 2007 02:26:58 -0000 --_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_--