Received: from localhost (unknown [200.46.204.183]) by postgresql.org (Postfix) with ESMTP id 307E165022B for ; Wed, 3 Sep 2008 13:25:22 -0300 (ADT) Received: from postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 58175-03-2 for ; Wed, 3 Sep 2008 13:25:04 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mail.esilo.com (web-qwest-sterling2.esilo.com [63.150.152.211]) by postgresql.org (Postfix) with ESMTP id C6F99650184 for ; Wed, 3 Sep 2008 13:24:45 -0300 (ADT) Received: from [10.0.0.2] (fwext-esilo-jupiter.esilo.com [64.135.45.146]) (authenticated bits=0) by mail.esilo.com (8.13.1/8.13.1) with ESMTP id m83GOhrD008228 for ; Wed, 3 Sep 2008 12:24:44 -0400 Message-ID: <48BEBAC3.7060701@esilo.com> Date: Wed, 03 Sep 2008 12:26:43 -0400 From: Andrew Chernow User-Agent: Thunderbird 2.0.0.16 (Windows/20080708) MIME-Version: 1.0 To: "Patches (PostgreSQL)" Subject: libpq events patch References: <19342.1210776271@sss.pgh.pa.us> <482B1480.1070705@esilo.com> <482B2AC5.7000503@esilo.com> <482ECF62.7010901@esilo.com> <12200.1211242959@sss.pgh.pa.us> <48323593.4060302@esilo.com> <13642.1211251078@sss.pgh.pa.us> <48323F94.6010201@esilo.com> <48325386.2010506@esilo.com> <20080903001920.GT12610@alvh.no-ip.org> <48BE9AA0.1070606@esilo.com> In-Reply-To: <48BE9AA0.1070606@esilo.com> Content-Type: multipart/mixed; boundary="------------080002020002080405020500" X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests=none X-Spam-Level: X-Archive-Number: 200809/31 X-Sequence-Number: 7046 This is a multi-part message in MIME format. --------------080002020002080405020500 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit This is an updated version pf the libpqevents patch. See http://archives.postgresql.org/pgsql-hackers/2008-09/msg00153.php for details. The only change I didn't make yet is the event 'name'. I have put it in and taken it out twice now, so a firm 'put it in there' would be appreciated. Go here for libpqtypes using events. pgfoundry is still using the older object hooks version. http://libpqtypes.esilo.com/libpqtypes-events.tar.gz -- Andrew Chernow eSilo, LLC every bit counts http://www.esilo.com/ --------------080002020002080405020500 Content-Type: text/plain; name="libpq-events.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="libpq-events.patch" SW5kZXg6IHNyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IC9wcm9qZWN0cy9jdnNyb290L3Bnc3FsL3NyYy9pbnRlcmZhY2VzL2xpYnBxL01h a2VmaWxlLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2NgpkaWZmIC1DNiAtcjEuMTY2IE1h a2VmaWxlCioqKiBzcmMvaW50ZXJmYWNlcy9saWJwcS9NYWtlZmlsZQkxNiBBcHIgMjAwOCAx NDoxOTo1NiAtMDAwMAkxLjE2NgotLS0gc3JjL2ludGVyZmFjZXMvbGlicHEvTWFrZWZpbGUJ MyBTZXAgMjAwOCAxNjowNjo0OSAtMDAwMAoqKioqKioqKioqKioqKioKKioqIDI5LDQxICoq KioKICAjIHRoZSBvYmplY3QgZmlsZXMgZnJvbSBsaWJwZ3BvcnQsIHRoaXMgd291bGQgbm90 IGJlIHRydWUgb24gYWxsCiAgIyBwbGF0Zm9ybXMuCiAgTElCUyA6PSAkKExJQlM6LWxwZ3Bv cnQ9KQogIAogIE9CSlM9CWZlLWF1dGgubyBmZS1jb25uZWN0Lm8gZmUtZXhlYy5vIGZlLW1p c2MubyBmZS1wcmludC5vIGZlLWxvYmoubyBcCiAgCWZlLXByb3RvY29sMi5vIGZlLXByb3Rv Y29sMy5vIHBxZXhwYnVmZmVyLm8gcHFzaWduYWwubyBmZS1zZWN1cmUubyBcCiEgCW1kNS5v IGlwLm8gd2NoYXIubyBlbmNuYW1lcy5vIG5vYmxvY2subyBwZ3N0cmNhc2VjbXAubyB0aHJl YWQubyBcCiAgCSQoZmlsdGVyIGNyeXB0Lm8gZ2V0YWRkcmluZm8ubyBpbmV0X2F0b24ubyBv cGVuLm8gc25wcmludGYubyBzdHJlcnJvci5vIHN0cmxjcHkubyB3aW4zMmVycm9yLm8sICQo TElCT0JKUykpCiAgCiAgaWZlcSAoJChQT1JUTkFNRSksIGN5Z3dpbikKICBvdmVycmlkZSBz aGxpYiA9IGN5ZyQoTkFNRSkkKERMU1VGRklYKQogIGVuZGlmCiAgCi0tLSAyOSw0MSAtLS0t CiAgIyB0aGUgb2JqZWN0IGZpbGVzIGZyb20gbGlicGdwb3J0LCB0aGlzIHdvdWxkIG5vdCBi ZSB0cnVlIG9uIGFsbAogICMgcGxhdGZvcm1zLgogIExJQlMgOj0gJChMSUJTOi1scGdwb3J0 PSkKICAKICBPQkpTPQlmZS1hdXRoLm8gZmUtY29ubmVjdC5vIGZlLWV4ZWMubyBmZS1taXNj Lm8gZmUtcHJpbnQubyBmZS1sb2JqLm8gXAogIAlmZS1wcm90b2NvbDIubyBmZS1wcm90b2Nv bDMubyBwcWV4cGJ1ZmZlci5vIHBxc2lnbmFsLm8gZmUtc2VjdXJlLm8gXAohIAltZDUubyBp cC5vIHdjaGFyLm8gZW5jbmFtZXMubyBub2Jsb2NrLm8gcGdzdHJjYXNlY21wLm8gdGhyZWFk Lm8gbGlicHEtZXZlbnRzLm8gXAogIAkkKGZpbHRlciBjcnlwdC5vIGdldGFkZHJpbmZvLm8g aW5ldF9hdG9uLm8gb3Blbi5vIHNucHJpbnRmLm8gc3RyZXJyb3IubyBzdHJsY3B5Lm8gd2lu MzJlcnJvci5vLCAkKExJQk9CSlMpKQogIAogIGlmZXEgKCQoUE9SVE5BTUUpLCBjeWd3aW4p CiAgb3ZlcnJpZGUgc2hsaWIgPSBjeWckKE5BTUUpJChETFNVRkZJWCkKICBlbmRpZgogIAoq KioqKioqKioqKioqKioKKioqIDEwMywxMTQgKioqKgotLS0gMTAzLDExNSAtLS0tCiAgCiAg JCh0b3BfYnVpbGRkaXIpL3NyYy9wb3J0L3BnX2NvbmZpZ19wYXRocy5oOgogIAkkKE1BS0Up IC1DICQodG9wX2J1aWxkZGlyKS9zcmMvcG9ydCBwZ19jb25maWdfcGF0aHMuaAogIAogIGlu c3RhbGw6IGFsbCBpbnN0YWxsZGlycyBpbnN0YWxsLWxpYgogIAkkKElOU1RBTExfREFUQSkg JChzcmNkaXIpL2xpYnBxLWZlLmggJyQoREVTVERJUikkKGluY2x1ZGVkaXIpJworIAkkKElO U1RBTExfREFUQSkgJChzcmNkaXIpL2xpYnBxLWV2ZW50cy5oICckKERFU1RESVIpJChpbmNs dWRlZGlyKScKICAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9saWJwcS1pbnQuaCAnJChE RVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5hbCknCiAgCSQoSU5TVEFMTF9EQVRBKSAkKHNy Y2RpcikvcHFleHBidWZmZXIuaCAnJChERVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5hbCkn CiAgCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvcGdfc2VydmljZS5jb25mLnNhbXBsZSAn JChERVNURElSKSQoZGF0YWRpcikvcGdfc2VydmljZS5jb25mLnNhbXBsZScKICAKICBpbnN0 YWxsZGlyczogaW5zdGFsbGRpcnMtbGliCiAgCSQobWtpbnN0YWxsZGlycykgJyQoREVTVERJ UikkKGluY2x1ZGVkaXIpJyAnJChERVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5hbCknCklu ZGV4OiBzcmMvaW50ZXJmYWNlcy9saWJwcS9leHBvcnRzLnR4dAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvcHJvamVjdHMvY3Zzcm9vdC9wZ3NxbC9zcmMvaW50ZXJmYWNlcy9saWJwcS9l eHBvcnRzLnR4dCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOQpkaWZmIC1DNiAtcjEuMTkg ZXhwb3J0cy50eHQKKioqIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9ydHMudHh0CTE5IE1h ciAyMDA4IDAwOjM5OjMzIC0wMDAwCTEuMTkKLS0tIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2V4 cG9ydHMudHh0CTMgU2VwIDIwMDggMTY6MDY6NDkgLTAwMDAKKioqKioqKioqKioqKioqCioq KiAxMzgsMTQzICoqKioKLS0tIDEzOCwxNTQgLS0tLQogIFBRc2VuZERlc2NyaWJlUG9ydGFs ICAgICAgMTM2CiAgbG9fdHJ1bmNhdGUgICAgICAgICAgICAgICAxMzcKICBQUWNvbm5lY3Rp b25Vc2VkUGFzc3dvcmQgIDEzOAogIHBnX3ZhbGlkX3NlcnZlcl9lbmNvZGluZ19pZCAxMzkK ICBQUWNvbm5lY3Rpb25OZWVkc1Bhc3N3b3JkIDE0MAogIGxvX2ltcG9ydF93aXRoX29pZAkJ ICAxNDEKKyBQUWNvcHlSZXN1bHQgICAgICAgICAgICAgIDE0MgorIFBRc2V0UmVzdWx0QXR0 cnMgICAgICAgICAgMTQzCisgUFFzZXR2YWx1ZSAgICAgICAgICAgICAgICAxNDQKKyBQUXJl c3VsdEFsbG9jICAgICAgICAgICAgIDE0NQorIFBRcmVnaXN0ZXJFdmVudFByb2MgICAgICAg MTQ2CisgUFFpbnN0YW5jZURhdGEgICAgICAgICAgICAxNDcKKyBQUXNldEluc3RhbmNlRGF0 YSAgICAgICAgIDE0OAorIFBRcmVzdWx0SW5zdGFuY2VEYXRhICAgICAgMTQ5CisgUFFyZXN1 bHRTZXRJbnN0YW5jZURhdGEgICAxNTAKKyBQUXBhc3NUaHJvdWdoRGF0YSAgICAgICAgIDE1 MQorIFBRcmVzdWx0UGFzc1Rocm91Z2hEYXRhICAgMTUyCkluZGV4OiBzcmMvaW50ZXJmYWNl cy9saWJwcS9mZS1jb25uZWN0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3Byb2plY3Rz L2N2c3Jvb3QvcGdzcWwvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjM1OQpkaWZmIC1DNiAtcjEuMzU5IGZlLWNvbm5lY3QuYwoq Kiogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCTI5IE1heSAyMDA4IDIyOjAy OjQ0IC0wMDAwCTEuMzU5Ci0tLSBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMJ MyBTZXAgMjAwOCAxNjowNjo0OSAtMDAwMAoqKioqKioqKioqKioqKioKKioqIDE5NzEsMTk4 MiAqKioqCi0tLSAxOTcxLDIwMDAgLS0tLQogICAqIHJlbGVhc2UgZGF0YSB0aGF0IGlzIHRv IGJlIGhlbGQgZm9yIHRoZSBsaWZlIG9mIHRoZSBQR2Nvbm4gc3RydWN0dXJlLgogICAqIElm IGEgdmFsdWUgb3VnaHQgdG8gYmUgY2xlYXJlZC9mcmVlZCBkdXJpbmcgUFFyZXNldCgpLCBk byBpdCB0aGVyZSBub3QgaGVyZS4KICAgKi8KICBzdGF0aWMgdm9pZAogIGZyZWVQR2Nvbm4o UEdjb25uICpjb25uKQogIHsKKyAJaW50IGk7CisgCVBHRXZlbnRDb25uRGVzdHJveSBldnQ7 CisgCisgCS8qIExldCB0aGUgZXZlbnQgcHJvY3MgY2xlYW51cCB0aGVpciBzdGF0ZSBkYXRh ICovCisgCWZvcihpPTA7IGkgPCBjb25uLT5uRXZlbnRzOyBpKyspCisgCXsKKyAJCWV2dC5j b25uID0gY29ubjsKKyAJCSh2b2lkKWNvbm4tPmV2ZW50c1tpXS5wcm9jKFBHRVZUX0NPTk5E RVNUUk9ZLCAmZXZ0KTsKKyAJfQorIAorIAkvKiBmcmVlIHRoZSBQR0V2ZW50IGFycmF5ICov CisgCWlmKGNvbm4tPmV2ZW50cykKKyAJeworIAkJZnJlZShjb25uLT5ldmVudHMpOworIAkJ Y29ubi0+ZXZlbnRzID0gTlVMTDsKKyAJCWNvbm4tPm5FdmVudHMgPSBjb25uLT5ldmVudEFy clNpemUgPSAwOworIAl9CisgCiAgCWlmIChjb25uLT5wZ2hvc3QpCiAgCQlmcmVlKGNvbm4t PnBnaG9zdCk7CiAgCWlmIChjb25uLT5wZ2hvc3RhZGRyKQogIAkJZnJlZShjb25uLT5wZ2hv c3RhZGRyKTsKICAJaWYgKGNvbm4tPnBncG9ydCkKICAJCWZyZWUoY29ubi0+cGdwb3J0KTsK KioqKioqKioqKioqKioqCioqKiAyMTUyLDIxNjUgKioqKgogIFBRcmVzZXQoUEdjb25uICpj b25uKQogIHsKICAJaWYgKGNvbm4pCiAgCXsKICAJCWNsb3NlUEdjb25uKGNvbm4pOwogIAoh IAkJaWYgKGNvbm5lY3REQlN0YXJ0KGNvbm4pKQohIAkJCSh2b2lkKSBjb25uZWN0REJDb21w bGV0ZShjb25uKTsKICAJfQogIH0KICAKICAKICAvKgogICAqIFBRcmVzZXRTdGFydDoKLS0t IDIxNzAsMjIwMCAtLS0tCiAgUFFyZXNldChQR2Nvbm4gKmNvbm4pCiAgewogIAlpZiAoY29u bikKICAJewogIAkJY2xvc2VQR2Nvbm4oY29ubik7CiAgCiEgCQlpZiAoY29ubmVjdERCU3Rh cnQoY29ubikgJiYgY29ubmVjdERCQ29tcGxldGUoY29ubikpCiEgCQl7CiEgCQkJaW50IGk7 CiEgCQkJUEdFdmVudENvbm5SZXNldCBldnQ7CiEgCiEgCQkJZm9yKGk9MDsgaSA8IGNvbm4t Pm5FdmVudHM7IGkrKykKISAJCQl7CiEgCQkJCWV2dC5jb25uID0gY29ubjsKISAKISAJCQkJ aWYoIWNvbm4tPmV2ZW50c1tpXS5wcm9jKFBHRVZUX0NPTk5SRVNFVCwgJmV2dCkpCiEgCQkJ CXsKISAJCQkJCWNvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fQkFEOwohIAkJCQkJcHJpbnRm UFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKISAJCQkJCQlsaWJwcV9nZXR0ZXh0 KCJQR0V2ZW50UHJvYyAlcCBmYWlsZWQgZHVyaW5nIFBHRVZUX0NPTk5SRVNFVCBldmVudFxu IiksCiEgCQkJCQkJY29ubi0+ZXZlbnRzW2ldLnByb2MpOwohIAkJCQkJYnJlYWs7CiEgCQkJ CX0KISAJCQl9CiEgCQl9CiAgCX0KICB9CiAgCiAgCiAgLyoKICAgKiBQUXJlc2V0U3RhcnQ6 CioqKioqKioqKioqKioqKgoqKiogMjE4NywyMTk5ICoqKioKICAgKiBjbG9zZXMgdGhlIGV4 aXN0aW5nIGNvbm5lY3Rpb24gYW5kIG1ha2VzIGEgbmV3IG9uZQogICAqLwogIFBvc3RncmVz UG9sbGluZ1N0YXR1c1R5cGUKICBQUXJlc2V0UG9sbChQR2Nvbm4gKmNvbm4pCiAgewogIAlp ZiAoY29ubikKISAJCXJldHVybiBQUWNvbm5lY3RQb2xsKGNvbm4pOwogIAogIAlyZXR1cm4g UEdSRVNfUE9MTElOR19GQUlMRUQ7CiAgfQogIAogIC8qCiAgICogUFFjYW5jZWxHZXQ6IGdl dCBhIFBHY2FuY2VsIHN0cnVjdHVyZSBjb3JyZXNwb25kaW5nIHRvIGEgY29ubmVjdGlvbi4K LS0tIDIyMjIsMjI1OCAtLS0tCiAgICogY2xvc2VzIHRoZSBleGlzdGluZyBjb25uZWN0aW9u IGFuZCBtYWtlcyBhIG5ldyBvbmUKICAgKi8KICBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBl CiAgUFFyZXNldFBvbGwoUEdjb25uICpjb25uKQogIHsKICAJaWYgKGNvbm4pCiEgCXsKISAJ CVBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgc3RhdHVzID0gUFFjb25uZWN0UG9sbChjb25u KTsKISAKISAJCWlmKHN0YXR1cyA9PSBQR1JFU19QT0xMSU5HX09LKQohIAkJewohIAkJCWlu dCBpOwohIAkJCVBHRXZlbnRDb25uUmVzZXQgZXZ0OwohIAohIAkJCWZvcihpPTA7IGkgPCBj b25uLT5uRXZlbnRzOyBpKyspCiEgCQkJewohIAkJCQlldnQuY29ubiA9IGNvbm47CiEgCiEg CQkJCWlmKCFjb25uLT5ldmVudHNbaV0ucHJvYyhQR0VWVF9DT05OUkVTRVQsICZldnQpKQoh IAkJCQl7CiEgCQkJCQljb25uLT5zdGF0dXMgPSBDT05ORUNUSU9OX0JBRDsKISAJCQkJCXBy aW50ZlBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCiEgCQkJCQkJbGlicHFfZ2V0 dGV4dCgiUEdFdmVudFByb2MgJXAgZmFpbGVkIGR1cmluZyBQR0VWVF9DT05OUkVTRVQgZXZl bnRcbiIpLAohIAkJCQkJCWNvbm4tPmV2ZW50c1tpXS5wcm9jKTsKISAJCQkJCXJldHVybiBQ R1JFU19QT0xMSU5HX0ZBSUxFRDsKISAJCQkJfQohIAkJCX0KISAJCX0KISAKISAJCXJldHVy biBzdGF0dXM7CiEgCX0KICAKICAJcmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOwogIH0K ICAKICAvKgogICAqIFBRY2FuY2VsR2V0OiBnZXQgYSBQR2NhbmNlbCBzdHJ1Y3R1cmUgY29y cmVzcG9uZGluZyB0byBhIGNvbm5lY3Rpb24uCkluZGV4OiBzcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1leGVjLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3Byb2plY3RzL2N2c3Jvb3Qv cGdzcWwvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtZXhlYy5jLHYKcmV0cmlldmluZyByZXZp c2lvbiAxLjE5NgpkaWZmIC1DNiAtcjEuMTk2IGZlLWV4ZWMuYwoqKiogc3JjL2ludGVyZmFj ZXMvbGlicHEvZmUtZXhlYy5jCTIzIEp1biAyMDA4IDIxOjEwOjQ5IC0wMDAwCTEuMTk2Ci0t LSBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1leGVjLmMJMyBTZXAgMjAwOCAxNjowNjo1MCAt MDAwMAoqKioqKioqKioqKioqKioKKioqIDYwLDcyICoqKioKICAJCQkJaW50IHJlc3VsdEZv cm1hdCk7CiAgc3RhdGljIHZvaWQgcGFyc2VJbnB1dChQR2Nvbm4gKmNvbm4pOwogIHN0YXRp YyBib29sIFBRZXhlY1N0YXJ0KFBHY29ubiAqY29ubik7CiAgc3RhdGljIFBHcmVzdWx0ICpQ UWV4ZWNGaW5pc2goUEdjb25uICpjb25uKTsKICBzdGF0aWMgaW50IFBRc2VuZERlc2NyaWJl KFBHY29ubiAqY29ubiwgY2hhciBkZXNjX3R5cGUsCiAgCQkJICAgY29uc3QgY2hhciAqZGVz Y190YXJnZXQpOwohIAogIAogIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAgKiBTcGFjZSBtYW5h Z2VtZW50IGZvciBQR3Jlc3VsdC4KICAgKgogICAqIEZvcm1lcmx5LCBsaWJwcSBkaWQgYSBz ZXBhcmF0ZSBtYWxsb2MoKSBmb3IgZWFjaCBmaWVsZCBvZiBlYWNoIHR1cGxlCiAgICogcmV0 dXJuZWQgYnkgYSBxdWVyeS4gIFRoaXMgd2FzIHJlbWFya2FibHkgZXhwZW5zaXZlIC0tLSBt YWxsb2MvZnJlZQotLS0gNjAsNzIgLS0tLQogIAkJCQlpbnQgcmVzdWx0Rm9ybWF0KTsKICBz dGF0aWMgdm9pZCBwYXJzZUlucHV0KFBHY29ubiAqY29ubik7CiAgc3RhdGljIGJvb2wgUFFl eGVjU3RhcnQoUEdjb25uICpjb25uKTsKICBzdGF0aWMgUEdyZXN1bHQgKlBRZXhlY0Zpbmlz aChQR2Nvbm4gKmNvbm4pOwogIHN0YXRpYyBpbnQgUFFzZW5kRGVzY3JpYmUoUEdjb25uICpj b25uLCBjaGFyIGRlc2NfdHlwZSwKICAJCQkgICBjb25zdCBjaGFyICpkZXNjX3RhcmdldCk7 CiEgc3RhdGljIGludCBjaGVja19maWVsZF9udW1iZXIoY29uc3QgUEdyZXN1bHQgKnJlcywg aW50IGZpZWxkX251bSk7CiAgCiAgLyogLS0tLS0tLS0tLS0tLS0tLQogICAqIFNwYWNlIG1h bmFnZW1lbnQgZm9yIFBHcmVzdWx0LgogICAqCiAgICogRm9ybWVybHksIGxpYnBxIGRpZCBh IHNlcGFyYXRlIG1hbGxvYygpIGZvciBlYWNoIGZpZWxkIG9mIGVhY2ggdHVwbGUKICAgKiBy ZXR1cm5lZCBieSBhIHF1ZXJ5LiAgVGhpcyB3YXMgcmVtYXJrYWJseSBleHBlbnNpdmUgLS0t IG1hbGxvYy9mcmVlCioqKioqKioqKioqKioqKgoqKiogMTIxLDE0MSAqKioqCi0tLSAxMjEs MTY3IC0tLS0KICAjZGVmaW5lIFBHUkVTVUxUX0RBVEFfQkxPQ0tTSVpFCQkyMDQ4CiAgI2Rl ZmluZSBQR1JFU1VMVF9BTElHTl9CT1VOREFSWQkJTUFYSU1VTV9BTElHTk9GCQkvKiBmcm9t IGNvbmZpZ3VyZSAqLwogICNkZWZpbmUgUEdSRVNVTFRfQkxPQ0tfT1ZFUkhFQUQJCU1heChz aXplb2YoUEdyZXN1bHRfZGF0YSksIFBHUkVTVUxUX0FMSUdOX0JPVU5EQVJZKQogICNkZWZp bmUgUEdSRVNVTFRfU0VQX0FMTE9DX1RIUkVTSE9MRAkoUEdSRVNVTFRfREFUQV9CTE9DS1NJ WkUgLyAyKQogIAogIAorIC8qIERvZXMgbm90IGR1cGxpY2F0ZSB0aGUgZXZlbnQgaW5zdGFu Y2UgZGF0YSwgc2V0cyB0aGlzIHRvIE5VTEwgKi8KKyBzdGF0aWMgUEdFdmVudCAqCisgZHVw RXZlbnRzKFBHRXZlbnQgKmV2ZW50cywgaW50IGNvdW50KQorIHsKKyAJaW50IGk7CisgCVBH RXZlbnQgKm5ld0V2ZW50czsKKyAKKyAJaWYoIWV2ZW50cyB8fCBjb3VudCA8PSAwKQorIAkJ cmV0dXJuIE5VTEw7CisgCisgCW5ld0V2ZW50cyA9IChQR0V2ZW50ICopbWFsbG9jKGNvdW50 ICogc2l6ZW9mKFBHRXZlbnQpKTsKKyAJaWYoIW5ld0V2ZW50cykKKyAJCXJldHVybiBOVUxM OworIAorIAltZW1jcHkobmV3RXZlbnRzLCBldmVudHMsIGNvdW50ICogc2l6ZW9mKFBHRXZl bnQpKTsKKyAKKyAJLyogTlVMTCBvdXQgdGhlIGRhdGEgcG9pbnRlciAqLworIAlmb3IoaT0w OyBpIDwgY291bnQ7IGkrKykKKyAJCW5ld0V2ZW50c1tpXS5kYXRhID0gTlVMTDsKKyAKKyAJ cmV0dXJuIG5ld0V2ZW50czsKKyB9CisgCiAgLyoKICAgKiBQUW1ha2VFbXB0eVBHcmVzdWx0 CiAgICoJIHJldHVybnMgYSBuZXdseSBhbGxvY2F0ZWQsIGluaXRpYWxpemVkIFBHcmVzdWx0 IHdpdGggZ2l2ZW4gc3RhdHVzLgogICAqCSBJZiBjb25uIGlzIG5vdCBOVUxMIGFuZCBzdGF0 dXMgaW5kaWNhdGVzIGFuIGVycm9yLCB0aGUgY29ubidzCiAgICoJIGVycm9yTWVzc2FnZSBp cyBjb3BpZWQuCiAgICoKICAgKiBOb3RlIHRoaXMgaXMgZXhwb3J0ZWQgLS0tIHlvdSB3b3Vs ZG4ndCB0aGluayBhbiBhcHBsaWNhdGlvbiB3b3VsZCBuZWVkCiAgICogdG8gYnVpbGQgaXRz IG93biBQR3Jlc3VsdHMsIGJ1dCB0aGlzIGhhcyBwcm92ZW4gdXNlZnVsIGluIGJvdGggbGli cGd0Y2wKICAgKiBhbmQgdGhlIFBlcmw1IGludGVyZmFjZSwgc28gbWF5YmUgaXQncyBub3Qg c28gdW5yZWFzb25hYmxlLgorICAqCisgICogVXBkYXRlZCBBcHJpbCAyMDA4IC0gSWYgY29u biBpcyBub3QgTlVMTCwgZXZlbnQgc3RhdGVzIHdpbGwgYmUgY29waWVkCisgICogZnJvbSB0 aGUgUEdjb25uIHRvIHRoZSBjcmVhdGVkIFBHcmVzdWx0LgogICAqLwogIAogIFBHcmVzdWx0 ICoKICBQUW1ha2VFbXB0eVBHcmVzdWx0KFBHY29ubiAqY29ubiwgRXhlY1N0YXR1c1R5cGUg c3RhdHVzKQogIHsKICAJUEdyZXN1bHQgICAqcmVzdWx0OwoqKioqKioqKioqKioqKioKKioq IDE1NywxNzUgKioqKgotLS0gMTgzLDIxNiAtLS0tCiAgCXJlc3VsdC0+ZXJyTXNnID0gTlVM TDsKICAJcmVzdWx0LT5lcnJGaWVsZHMgPSBOVUxMOwogIAlyZXN1bHQtPm51bGxfZmllbGRb MF0gPSAnXDAnOwogIAlyZXN1bHQtPmN1ckJsb2NrID0gTlVMTDsKICAJcmVzdWx0LT5jdXJP ZmZzZXQgPSAwOwogIAlyZXN1bHQtPnNwYWNlTGVmdCA9IDA7CisgCXJlc3VsdC0+bkV2ZW50 cyA9IDA7CisgCXJlc3VsdC0+ZXZlbnRzID0gTlVMTDsKICAKICAJaWYgKGNvbm4pCiAgCXsK ICAJCS8qIGNvcHkgY29ubmVjdGlvbiBkYXRhIHdlIG1pZ2h0IG5lZWQgZm9yIG9wZXJhdGlv bnMgb24gUEdyZXN1bHQgKi8KICAJCXJlc3VsdC0+bm90aWNlSG9va3MgPSBjb25uLT5ub3Rp Y2VIb29rczsKICAJCXJlc3VsdC0+Y2xpZW50X2VuY29kaW5nID0gY29ubi0+Y2xpZW50X2Vu Y29kaW5nOwogIAorIAkJLyogY29weSBldmVudHMgZnJvbSBjb25uZWN0aW9uICovCisgCQlp Zihjb25uLT5uRXZlbnRzID4gMCkKKyAJCXsKKyAJCQlyZXN1bHQtPmV2ZW50cyA9IGR1cEV2 ZW50cyhjb25uLT5ldmVudHMsIGNvbm4tPm5FdmVudHMpOworIAkJCWlmKCFyZXN1bHQtPmV2 ZW50cykKKyAJCQl7CisgCQkJCVBRY2xlYXIocmVzdWx0KTsKKyAJCQkJcmV0dXJuIE5VTEw7 CisgCQkJfQorIAorIAkJCXJlc3VsdC0+bkV2ZW50cyA9IGNvbm4tPm5FdmVudHM7CisgCQl9 CisgCiAgCQkvKiBjb25zaWRlciBjb3B5aW5nIGNvbm4ncyBlcnJvck1lc3NhZ2UgKi8KICAJ CXN3aXRjaCAoc3RhdHVzKQogIAkJewogIAkJCWNhc2UgUEdSRVNfRU1QVFlfUVVFUlk6CiAg CQkJY2FzZSBQR1JFU19DT01NQU5EX09LOgogIAkJCWNhc2UgUEdSRVNfVFVQTEVTX09LOgoq KioqKioqKioqKioqKioKKioqIDE5MiwyMDMgKioqKgotLS0gMjMzLDQ4NyAtLS0tCiAgCQly ZXN1bHQtPmNsaWVudF9lbmNvZGluZyA9IFBHX1NRTF9BU0NJSTsKICAJfQogIAogIAlyZXR1 cm4gcmVzdWx0OwogIH0KICAKKyAvKiBQUXNldFJlc3VsdEF0dHJzCisgICogU2V0IHRoZSBh dHRyaWJ1dGVzIGZvciBhIGdpdmVuIHJlc3VsdC4gIFRoaXMgZnVuY3Rpb24gZmFpbHMgaWYg dGhlcmUgYXJlCisgICogYWxyZWFkeSBhdHRyaWJ1dGVzIGNvbnRhaW5lZCBpbiB0aGUgcHJv dmlkZWQgcmVzdWx0LiAgVGhlIGNhbGwgaXMKKyAgKiBpZ25vcmVkIGlmIG51bUF0dHJpYnV0 ZXMgaXMgaXMgemVybyBvciBhdHREZXNjcyBpcyBOVUxMLiAgSWYgdGhlCisgICogZnVuY3Rp b24gZmFpbHMsIGl0IHJldHVybnMgemVyby4gIElmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcywg aXQKKyAgKiByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUuCisgICovCisgaW50CisgUFFzZXRS ZXN1bHRBdHRycyhQR3Jlc3VsdCAqcmVzLCBpbnQgbnVtQXR0cmlidXRlcywgUEdyZXNBdHRE ZXNjICphdHREZXNjcykKKyB7CisgCWludCBpOworIAorIAkvKiBJZiBhdHRycyBhbHJlYWR5 IGV4aXN0LCB0aGV5IGNhbm5vdCBiZSBvdmVyd3JpdHRlbi4gKi8KKyAJaWYoIXJlcyB8fCBy ZXMtPm51bUF0dHJpYnV0ZXMgPiAwKQorIAkJcmV0dXJuIEZBTFNFOworIAorIAkvKiBpZ25v cmUgcmVxdWVzdCAqLworIAlpZihudW1BdHRyaWJ1dGVzIDw9IDAgfHwgIWF0dERlc2NzKQor IAkJcmV0dXJuIFRSVUU7CisgCisgCXJlcy0+YXR0RGVzY3MgPSAoUEdyZXNBdHREZXNjICop UFFyZXN1bHRBbGxvYyhyZXMsCisgCQludW1BdHRyaWJ1dGVzICogc2l6ZW9mKFBHcmVzQXR0 RGVzYykpOworIAorIAlpZighcmVzLT5hdHREZXNjcykKKyAJCXJldHVybiBGQUxTRTsKKyAK KyAJcmVzLT5udW1BdHRyaWJ1dGVzID0gbnVtQXR0cmlidXRlczsKKyAJbWVtY3B5KHJlcy0+ YXR0RGVzY3MsIGF0dERlc2NzLAorIAkJbnVtQXR0cmlidXRlcyAqIHNpemVvZihQR3Jlc0F0 dERlc2MpKTsKKyAKKyAJLyogcmVzdWx0YWxsb2MgdGhlIGF0dHJpYnV0ZSBuYW1lcy4gIFRo ZSBhYm92ZSBtZW1jcHkgaGFzIHRoZSBhdHRyCisgCSAqIG5hbWVzIHBvaW50aW5nIGF0IHRo ZSBzb3VyY2UgcmVzdWx0J3MgcHJpdmF0ZSBtZW1vcnkgKG9yIGF0IHRoZQorIAkgKiBjYWxs ZXJzIHByb3ZpZGVkIGF0dERlc2NzIG1lbW9yeSkuCisgCSAqLworIAlyZXMtPmJpbmFyeSA9 IDE7CisgCWZvcihpPTA7IGkgPCByZXMtPm51bUF0dHJpYnV0ZXM7IGkrKykKKyAJeworIAkJ aWYocmVzLT5hdHREZXNjc1tpXS5uYW1lKQorIAkJCXJlcy0+YXR0RGVzY3NbaV0ubmFtZSA9 IHBxUmVzdWx0U3RyZHVwKHJlcywgcmVzLT5hdHREZXNjc1tpXS5uYW1lKTsKKyAJCWVsc2UK KyAJCQlyZXMtPmF0dERlc2NzW2ldLm5hbWUgPSByZXMtPm51bGxfZmllbGQ7CisgCisgCQlp ZighcmVzLT5hdHREZXNjc1tpXS5uYW1lKQorIAkJCXJldHVybiBGQUxTRTsKKyAKKyAJCS8q IEFsdGhvdWdoIGRlcHJlY2F0ZWQsIGJlY2F1c2UgcmVzdWx0cyBjYW4gaGF2ZSB0ZXh0K2Jp bmFyeSBjb2x1bW5zLAorIAkJICogaXRzIGVhc3kgZW5vdWdoIHRvIGRlZHVjZSBzbyBzZXQg aXQgZm9yIGNvbXBsZXRlbmVzcy4KKyAJCSAqLworIAkJaWYocmVzLT5hdHREZXNjc1tpXS5m b3JtYXQgPT0gMCkKKyAJCQlyZXMtPmJpbmFyeSA9IDA7CisgCX0KKyAKKyAJcmV0dXJuIFRS VUU7CisgfQorIAorIC8qCisgICogUFFjb3B5UmVzdWx0CisgICogUmV0dXJucyBhIGRlZXAg Y29weSBvZiB0aGUgcHJvdmlkZWQgJ3NyYycgUEdyZXN1bHQsIHdoaWNoIGNhbm5vdCBiZSBO VUxMLgorICAqIFRoZSAnb3B0aW9ucycgYXJndW1lbnQgY29udHJvbHMgd2hpY2ggcG9ydGlv bnMgb2YgdGhlIHJlc3VsdCB3aWxsIG9yIHdpbGwKKyAgKiBOT1QgYmUgY29waWVkLiAgVGhl IGNyZWF0ZWQgcmVzdWx0IGlzIGFsd2F5cyBwdXQgaW50byB0aGUKKyAgKiBQR1JFU19UVVBM RVNfT0sgc3RhdHVzLiAgVGhlIHNvdXJjZSByZXN1bHQgZXJyb3IgbWVzc2FnZSBpcyBub3Qg Y29waWVkLAorICAqIGFsdGhvdWdoIGNtZFN0YXR1cyBpcy4KKyAgKgorICAqIFRvIHNldCBj dXN0b20gYXR0cmlidXRlcywgc2VlIFBRc2V0UmVzdWx0QXR0cnMuICBUaGF0IGZ1bmN0aW9u IHJlcXVpcmVzCisgICogdGhhdCB0aGVyZSBhcmUgbm8gYXR0cnMgY29udGFpbmVkIGluIHRo ZSByZXN1bHQsIHNvIHRvIHVzZSB0aGF0CisgICogZnVuY3Rpb24geW91IGNhbm5vdCB1c2Ug dGhlIFBHX0NPUFlSRVNfQVRUUlMgb3IgUEdfQ09QWVJFU19UVVBMRVMKKyAgKiBvcHRpb25z IHdpdGggdGhpcyBmdW5jdGlvbi4KKyAgKgorICAqIE9wdGlvbnM6CisgICogICBQR19DT1BZ UkVTX0FUVFJTIC0gQ29weSB0aGUgc291cmNlIHJlc3VsdCdzIGF0dHJpYnV0ZXMKKyAgKgor ICAqICAgUEdfQ09QWVJFU19UVVBMRVMgLSBDb3B5IHRoZSBzb3VyY2UgcmVzdWx0J3MgdHVw bGVzLiAgVGhpcyBpbXBsaWVzCisgICogICBjb3B5aW5nIHRoZSBhdHRycywgYmVpbmcgaG93 IHRoZSBhdHRycyBhcmUgbmVlZGVkIGJ5IHRoZSB0dXBsZXMuCisgICoKKyAgKiAgIFBHX0NP UFlSRVNfRVZFTlRTIC0gQ29weSB0aGUgc291cmNlIHJlc3VsdCdzIGV2ZW50cy4KKyAgKgor ICAqICAgUEdfQ09QWVJFU19OT1RJQ0VIT09LUyAtIENvcHkgdGhlIHNvdXJjZSByZXN1bHQn cyBub3RpY2UgaG9va3MuCisgICovCisgCisgUEdyZXN1bHQgKgorIFBRY29weVJlc3VsdChj b25zdCBQR3Jlc3VsdCAqc3JjLCBpbnQgb3B0aW9ucykKKyB7CisgCWludCBpOworIAlQR3Jl c3VsdCAqZGVzdDsKKyAJUEdFdmVudFJlc3VsdENvcHkgZXZ0OworIAorIAlpZighc3JjKQor IAkJcmV0dXJuIE5VTEw7CisgCisgCS8qIEF1dG9tYXRpY2FsbHkgdHVybiBvbiBhdHRycyBv cHRpb25zIGJlY2F1c2UgeW91IGNhbid0IGNvcHkgdHVwbGVzCisgCSAqIHdpdGhvdXQgY29w eWluZyB0aGUgYXR0cnMuICBfVFVQTEVTIGltcGxpZXMgX0FUVFJTLgorIAkgKi8KKyAJaWYo b3B0aW9ucyAmIFBHX0NPUFlSRVNfVFVQTEVTKQorIAkJb3B0aW9ucyB8PSBQR19DT1BZUkVT X0FUVFJTOworIAorIAlkZXN0ID0gUFFtYWtlRW1wdHlQR3Jlc3VsdCgoUEdjb25uICopTlVM TCwgUEdSRVNfVFVQTEVTX09LKTsKKyAJaWYoIWRlc3QpCisgCQlyZXR1cm4gTlVMTDsKKyAK KyAJLyogYWx3YXlzIGNvcHkgdGhlc2Ugb3Zlci4gIElzIGNtZFN0YXR1cyB1c2VmdWwgaGVy ZT8gKi8KKyAJZGVzdC0+Y2xpZW50X2VuY29kaW5nID0gc3JjLT5jbGllbnRfZW5jb2Rpbmc7 CisgCXN0cmNweShkZXN0LT5jbWRTdGF0dXMsIHNyYy0+Y21kU3RhdHVzKTsKKyAKKyAJLyog V2FudHMgdG8gY29weSBub3RpY2UgaG9va3MgKi8KKyAJaWYob3B0aW9ucyAmIFBHX0NPUFlS RVNfTk9USUNFSE9PS1MpCisgCQlkZXN0LT5ub3RpY2VIb29rcyA9IHNyYy0+bm90aWNlSG9v a3M7CisgCisgCS8qIFdhbnRzIGF0dHJzICovCisgCWlmKChvcHRpb25zICYgUEdfQ09QWVJF U19BVFRSUykgJiYKKyAJCSAhUFFzZXRSZXN1bHRBdHRycyhkZXN0LCBzcmMtPm51bUF0dHJp YnV0ZXMsIHNyYy0+YXR0RGVzY3MpKQorIAl7CisgCQlQUWNsZWFyKGRlc3QpOworIAkJcmV0 dXJuIE5VTEw7CisgCX0KKyAKKyAJLyogV2FudHMgdG8gY29weSByZXN1bHQgdHVwbGVzOiB1 c2UgUFFzZXR2YWx1ZSgpLiAqLworIAlpZigob3B0aW9ucyAmIFBHX0NPUFlSRVNfVFVQTEVT KSAmJiBzcmMtPm50dXBzID4gMCkKKyAJeworIAkJaW50IHR1cCwgZmllbGQ7CisgCQlmb3Io dHVwPTA7IHR1cCA8IHNyYy0+bnR1cHM7IHR1cCsrKQorIAkJCWZvcihmaWVsZD0wOyBmaWVs ZCA8IHNyYy0+bnVtQXR0cmlidXRlczsgZmllbGQrKykKKyAJCQkJUFFzZXR2YWx1ZShkZXN0 LCB0dXAsIGZpZWxkLCBzcmMtPnR1cGxlc1t0dXBdW2ZpZWxkXS52YWx1ZSwKKyAJCQkJCXNy Yy0+dHVwbGVzW3R1cF1bZmllbGRdLmxlbik7CisgCX0KKyAKKyAJLyogV2FudHMgdG8gY29w eSBQR0V2ZW50cy4gKi8KKyAJaWYoKG9wdGlvbnMgJiBQR19DT1BZUkVTX0VWRU5UUykgJiYg c3JjLT5uRXZlbnRzID4gMCkKKyAJeworIAkJZGVzdC0+ZXZlbnRzID0gZHVwRXZlbnRzKHNy Yy0+ZXZlbnRzLCBzcmMtPm5FdmVudHMpOworIAkJaWYoIWRlc3QtPmV2ZW50cykKKyAJCXsK KyAJCQlQUWNsZWFyKGRlc3QpOworIAkJCXJldHVybiBOVUxMOworIAkJfQorIAorIAkJZGVz dC0+bkV2ZW50cyA9IHNyYy0+bkV2ZW50czsKKyAJfQorIAorIAkvKiBUcmlnZ2VyIFBHRVZU X1JFU1VMVENPUFkgZXZlbnQgKi8KKyAJZm9yKGk9MDsgaSA8IGRlc3QtPm5FdmVudHM7IGkr KykKKyAJeworIAkJZXZ0LnNyYyA9IHNyYzsKKyAJCWV2dC5kZXN0ID0gZGVzdDsKKyAJCWlm KCFkZXN0LT5ldmVudHNbaV0ucHJvYyhQR0VWVF9SRVNVTFRDT1BZLCAmZXZ0KSkKKyAJCXsK KyAJCQlQUWNsZWFyKGRlc3QpOworIAkJCXJldHVybiBOVUxMOworIAkJfQorIAl9CisgCisg CXJldHVybiBkZXN0OworIH0KKyAKKyBpbnQKKyBQUXNldHZhbHVlKFBHcmVzdWx0ICpyZXMs IGludCB0dXBfbnVtLCBpbnQgZmllbGRfbnVtLAorIAljaGFyICp2YWx1ZSwgaW50IGxlbikK KyB7CisgCVBHcmVzQXR0VmFsdWUgKmF0dHZhbDsKKyAKKyAJaWYoIWNoZWNrX2ZpZWxkX251 bWJlcihyZXMsIGZpZWxkX251bSkpCisgCQlyZXR1cm4gRkFMU0U7CisgCisgCS8qIEludmFs aWQgdHVwX251bSwgbXVzdCBiZSA8PSBudHVwcyAqLworIAlpZih0dXBfbnVtID4gcmVzLT5u dHVwcykKKyAJCXJldHVybiBGQUxTRTsKKyAKKyAJLyogbmVlZCB0byBncm93IHRoZSB0dXBs ZSB0YWJsZSAqLworIAlpZihyZXMtPm50dXBzID49IHJlcy0+dHVwQXJyU2l6ZSkKKyAJewor IAkJaW50IG4gPSByZXMtPnR1cEFyclNpemUgPyAocmVzLT50dXBBcnJTaXplKjMpLzIgOiA2 NDsKKyAJCVBHcmVzQXR0VmFsdWUgKip0dXBzID0gKFBHcmVzQXR0VmFsdWUgKiopCisgCQkJ KHJlcy0+dHVwbGVzID8gcmVhbGxvYyhyZXMtPnR1cGxlcywgbipzaXplb2YoUEdyZXNBdHRW YWx1ZSAqKSkgOgorIAkJCSBtYWxsb2MobipzaXplb2YoUEdyZXNBdHRWYWx1ZSAqKSkpOwor IAorIAkJaWYoIXR1cHMpCisgCQkJcmV0dXJuIEZBTFNFOworIAorIAkJbWVtc2V0KHR1cHMg KyByZXMtPnR1cEFyclNpemUsIDAsCisgCQkJKG4gLSByZXMtPnR1cEFyclNpemUpICogc2l6 ZW9mKFBHcmVzQXR0VmFsdWUgKikpOworIAkJcmVzLT50dXBsZXMgPSB0dXBzOworIAkJcmVz LT50dXBBcnJTaXplID0gbjsKKyAJfQorIAorIAkvKiBuZWVkIHRvIGFsbG9jYXRlIGEgbmV3 IHR1cGxlICovCisgCWlmKHR1cF9udW0gPT0gcmVzLT5udHVwcyAmJiAhcmVzLT50dXBsZXNb dHVwX251bV0pCisgCXsKKyAJCWludCBpOworIAkJUEdyZXNBdHRWYWx1ZSAqdHVwID0gKFBH cmVzQXR0VmFsdWUgKilQUXJlc3VsdEFsbG9jKAorIAkJCXJlcywgcmVzLT5udW1BdHRyaWJ1 dGVzICogc2l6ZW9mKFBHcmVzQXR0VmFsdWUpKTsKKyAKKyAJCWlmKCF0dXApCisgCQkJcmV0 dXJuIEZBTFNFOworIAorIAkJLyogaW5pdGlhbGl6ZSBlYWNoIGNvbHVtbiB0byBOVUxMICov CisgCQlmb3IoaT0wOyBpIDwgcmVzLT5udW1BdHRyaWJ1dGVzOyBpKyspCisgCQl7CisgCQkJ dHVwW2ldLmxlbiA9IE5VTExfTEVOOworIAkJCXR1cFtpXS52YWx1ZSA9IHJlcy0+bnVsbF9m aWVsZDsKKyAJCX0KKyAKKyAJCXJlcy0+dHVwbGVzW3R1cF9udW1dID0gdHVwOworIAkJcmVz LT5udHVwcysrOworIAl9CisgCisgCWF0dHZhbCA9ICZyZXMtPnR1cGxlc1t0dXBfbnVtXVtm aWVsZF9udW1dOworIAorIAkvKiBPbiB0b3Agb2YgTlVMTF9MRU4sIHRyZWF0IGEgTlVMTCB2 YWx1ZSBhcyBhIE5VTEwgZmllbGQgKi8KKyAJaWYobGVuID09IE5VTExfTEVOIHx8IHZhbHVl ID09IE5VTEwpCisgCXsKKyAJCWF0dHZhbC0+bGVuID0gTlVMTF9MRU47CisgCQlhdHR2YWwt PnZhbHVlID0gcmVzLT5udWxsX2ZpZWxkOworIAl9CisgCWVsc2UKKyAJeworIAkJaWYobGVu IDwgMCkKKyAJCQlsZW4gPSAwOworIAorIAkJaWYobGVuID09IDApCisgCQl7CisgCQkJYXR0 dmFsLT5sZW4gPSAwOworIAkJCWF0dHZhbC0+dmFsdWUgPSByZXMtPm51bGxfZmllbGQ7Cisg CQl9CisgCQllbHNlCisgCQl7CisgCQkJYXR0dmFsLT52YWx1ZSA9IChjaGFyICopUFFyZXN1 bHRBbGxvYyhyZXMsIGxlbiArIDEpOworIAkJCWlmKCFhdHR2YWwtPnZhbHVlKQorIAkJCQly ZXR1cm4gRkFMU0U7CisgCisgCQkJYXR0dmFsLT5sZW4gPSBsZW47CisgCQkJbWVtY3B5KGF0 dHZhbC0+dmFsdWUsIHZhbHVlLCBsZW4pOworIAkJCWF0dHZhbC0+dmFsdWVbbGVuXSA9ICdc MCc7CisgCQl9CisgCX0KKyAKKyAJcmV0dXJuIFRSVUU7CisgfQorIAorIHZvaWQgKgorIFBR cmVzdWx0QWxsb2MoUEdyZXN1bHQgKnJlcywgc2l6ZV90IG5CeXRlcykKKyB7CisgCXJldHVy biBwcVJlc3VsdEFsbG9jKHJlcywgbkJ5dGVzLCBUUlVFKTsKKyB9CisgCiAgLyoKICAgKiBw cVJlc3VsdEFsbG9jIC0KICAgKgkJQWxsb2NhdGUgc3Vic2lkaWFyeSBzdG9yYWdlIGZvciBh IFBHcmVzdWx0LgogICAqCiAgICogbkJ5dGVzIGlzIHRoZSBhbW91bnQgb2Ygc3BhY2UgbmVl ZGVkIGZvciB0aGUgb2JqZWN0LgogICAqIElmIGlzQmluYXJ5IGlzIHRydWUsIHdlIGFzc3Vt ZSB0aGF0IHdlIG5lZWQgdG8gYWxpZ24gdGhlIG9iamVjdCBvbgoqKioqKioqKioqKioqKioK KioqIDM0OSwzNjUgKioqKgotLS0gNjMzLDY2NCAtLS0tCiAgICogUFFjbGVhciAtCiAgICoJ ICBmcmVlJ3MgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYSBQR3Jlc3VsdAogICAqLwog IHZvaWQKICBQUWNsZWFyKFBHcmVzdWx0ICpyZXMpCiAgeworIAlpbnQgaTsKICAJUEdyZXN1 bHRfZGF0YSAqYmxvY2s7CisgCVBHRXZlbnRSZXN1bHREZXN0cm95IGV2dDsKICAKICAJaWYg KCFyZXMpCiAgCQlyZXR1cm47CiAgCisgCWZvcihpPTA7IGkgPCByZXMtPm5FdmVudHM7IGkr KykKKyAJeworIAkJZXZ0LnJlc3VsdCA9IHJlczsKKyAJCSh2b2lkKXJlcy0+ZXZlbnRzW2ld LnByb2MoUEdFVlRfUkVTVUxUREVTVFJPWSwgJmV2dCk7CisgCX0KKyAKKyAJaWYocmVzLT5l dmVudHMpCisgCXsKKyAJCWZyZWUocmVzLT5ldmVudHMpOworIAkJcmVzLT5ldmVudHMgPSBO VUxMOworIAkJcmVzLT5uRXZlbnRzID0gMDsKKyAJfQorIAogIAkvKiBGcmVlIGFsbCB0aGUg c3Vic2lkaWFyeSBibG9ja3MgKi8KICAJd2hpbGUgKChibG9jayA9IHJlcy0+Y3VyQmxvY2sp ICE9IE5VTEwpCiAgCXsKICAJCXJlcy0+Y3VyQmxvY2sgPSBibG9jay0+bmV4dDsKICAJCWZy ZWUoYmxvY2spOwogIAl9CioqKioqKioqKioqKioqKgoqKiogMTE5MiwxMjA0ICoqKioKICAg KgkgIG1lbW9yeSkuCiAgICovCiAgCiAgUEdyZXN1bHQgKgogIFBRZ2V0UmVzdWx0KFBHY29u biAqY29ubikKICB7CiEgCVBHcmVzdWx0ICAgKnJlczsKICAKICAJaWYgKCFjb25uKQogIAkJ cmV0dXJuIE5VTEw7CiAgCiAgCS8qIFBhcnNlIGFueSBhdmFpbGFibGUgZGF0YSwgaWYgb3Vy IHN0YXRlIHBlcm1pdHMuICovCiAgCXBhcnNlSW5wdXQoY29ubik7Ci0tLSAxNDkxLDE1MDMg LS0tLQogICAqCSAgbWVtb3J5KS4KICAgKi8KICAKICBQR3Jlc3VsdCAqCiAgUFFnZXRSZXN1 bHQoUEdjb25uICpjb25uKQogIHsKISAJUEdyZXN1bHQgICAqcmVzPU5VTEw7CiAgCiAgCWlm ICghY29ubikKICAJCXJldHVybiBOVUxMOwogIAogIAkvKiBQYXJzZSBhbnkgYXZhaWxhYmxl IGRhdGEsIGlmIG91ciBzdGF0ZSBwZXJtaXRzLiAqLwogIAlwYXJzZUlucHV0KGNvbm4pOwoq KioqKioqKioqKioqKioKKioqIDEyNjcsMTI3OCAqKioqCi0tLSAxNTY2LDE2MDIgLS0tLQog IAkJCQkJCQkgIGxpYnBxX2dldHRleHQoInVuZXhwZWN0ZWQgYXN5bmNTdGF0dXM6ICVkXG4i KSwKICAJCQkJCQkJICAoaW50KSBjb25uLT5hc3luY1N0YXR1cyk7CiAgCQkJcmVzID0gUFFt YWtlRW1wdHlQR3Jlc3VsdChjb25uLCBQR1JFU19GQVRBTF9FUlJPUik7CiAgCQkJYnJlYWs7 CiAgCX0KICAKKyAJaWYocmVzICYmIChyZXMtPnJlc3VsdFN0YXR1cyA9PSBQR1JFU19DT01N QU5EX09LIHx8CisgCQkgcmVzLT5yZXN1bHRTdGF0dXMgPT0gUEdSRVNfVFVQTEVTX09LIHx8 CisgCQkgcmVzLT5yZXN1bHRTdGF0dXMgPT0gUEdSRVNfRU1QVFlfUVVFUlkpKQorIAl7Cisg CQlpbnQgaTsKKyAJCVBHRXZlbnRSZXN1bHRDcmVhdGUgZXZ0OworIAorIAkJZm9yKGk9MDsg aSA8IHJlcy0+bkV2ZW50czsgaSsrKQorIAkJeworIAkJCWV2dC5jb25uID0gY29ubjsKKyAJ CQlldnQucmVzdWx0ID0gcmVzOworIAorIAkJCWlmKCFyZXMtPmV2ZW50c1tpXS5wcm9jKFBH RVZUX1JFU1VMVENSRUFURSwgJmV2dCkpCisgCQkJeworIAkJCQljaGFyIG1zZ1syNTZdOwor IAkJCQlzcHJpbnRmKG1zZywKKyAJCQkJCSJQR0V2ZW50UHJvYyAlcCBmYWlsZWQgZHVyaW5n IFBHRVZUX1JFU1VMVENSRUFURSBldmVudCIsCisgCQkJCQlyZXMtPmV2ZW50c1tpXS5wcm9j KTsKKyAJCQkJcHFTZXRSZXN1bHRFcnJvcihyZXMsIG1zZyk7CisgCQkJCXJlcy0+cmVzdWx0 U3RhdHVzID0gUEdSRVNfRkFUQUxfRVJST1I7CisgCQkJCWJyZWFrOworIAkJCX0KKyAJCX0K KyAJfQorIAogIAlyZXR1cm4gcmVzOwogIH0KICAKICAKICAvKgogICAqIFBRZXhlYwpJbmRl eDogc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaAo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvcHJvamVjdHMvY3Zzcm9vdC9wZ3NxbC9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJw cS1mZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE0MgpkaWZmIC1DNiAtcjEuMTQyIGxp YnBxLWZlLmgKKioqIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgJMTkgTWFyIDIw MDggMDA6Mzk6MzMgLTAwMDAJMS4xNDIKLS0tIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBx LWZlLmgJMyBTZXAgMjAwOCAxNjowNjo1MCAtMDAwMAoqKioqKioqKioqKioqKioKKioqIDI1 LDM2ICoqKioKLS0tIDI1LDQ1IC0tLS0KICAvKgogICAqIHBvc3RncmVzX2V4dC5oIGRlZmlu ZXMgdGhlIGJhY2tlbmQncyBleHRlcm5hbGx5IHZpc2libGUgdHlwZXMsCiAgICogc3VjaCBh cyBPaWQuCiAgICovCiAgI2luY2x1ZGUgInBvc3RncmVzX2V4dC5oIgogIAorIC8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgICogT3B0aW9ucyBmb3IgUFFjb3B5UmVzdWx0CisgICov CisgCisgI2RlZmluZSBQR19DT1BZUkVTX0FUVFJTICAgICAgICAgIDB4MDEKKyAjZGVmaW5l IFBHX0NPUFlSRVNfVFVQTEVTICAgICAgICAgMHgwMiAvKiBJbXBsaWVzIFBHX0NPUFlSRVNf QVRUUlMgKi8KKyAjZGVmaW5lIFBHX0NPUFlSRVNfRVZFTlRTICAgICAgICAgMHgwNAorICNk ZWZpbmUgUEdfQ09QWVJFU19OT1RJQ0VIT09LUyAgICAweDA4CisgCiAgLyogQXBwbGljYXRp b24tdmlzaWJsZSBlbnVtIHR5cGVzICovCiAgCiAgdHlwZWRlZiBlbnVtCiAgewogIAkvKgog IAkgKiBBbHRob3VnaCBpdCBpcyBva2F5IHRvIGFkZCB0byB0aGlzIGxpc3QsIHZhbHVlcyB3 aGljaCBiZWNvbWUgdW51c2VkCioqKioqKioqKioqKioqKgoqKiogMTkwLDIwMSAqKioqCi0t LSAxOTksMjI1IC0tLS0KICAJCWludAkJICAgKnB0cjsJCS8qIGNhbid0IHVzZSB2b2lkIChk ZWMgY29tcGlsZXIgYmFyZnMpCSAqLwogIAkJaW50CQkJaW50ZWdlcjsKICAJfQkJCXU7CiAg fSBQUUFyZ0Jsb2NrOwogIAogIC8qIC0tLS0tLS0tLS0tLS0tLS0KKyAgKiBQR3Jlc0F0dERl c2MgLS0gRGF0YSBhYm91dCBhIHNpbmdsZSBhdHRyaWJ1dGUgKGNvbHVtbikgb2YgYSBxdWVy eSByZXN1bHQKKyAgKiAtLS0tLS0tLS0tLS0tLS0tCisgICovCisgdHlwZWRlZiBzdHJ1Y3Qg cGdyZXNBdHREZXNjCisgeworIAljaGFyCSAgICpuYW1lOwkJCS8qIGNvbHVtbiBuYW1lICov CisgCU9pZAkJCXRhYmxlaWQ7CQkvKiBzb3VyY2UgdGFibGUsIGlmIGtub3duICovCisgCWlu dAkJCWNvbHVtbmlkOwkJLyogc291cmNlIGNvbHVtbiwgaWYga25vd24gKi8KKyAJaW50CQkJ Zm9ybWF0OwkJCS8qIGZvcm1hdCBjb2RlIGZvciB2YWx1ZSAodGV4dC9iaW5hcnkpICovCisg CU9pZAkJCXR5cGlkOwkJCS8qIHR5cGUgaWQgKi8KKyAJaW50CQkJdHlwbGVuOwkJCS8qIHR5 cGUgc2l6ZSAqLworIAlpbnQJCQlhdHR0eXBtb2Q7ICAvKiB0eXBlLXNwZWNpZmljIG1vZGlm aWVyIGluZm8gKi8KKyB9IFBHcmVzQXR0RGVzYzsKKyAKKyAvKiAtLS0tLS0tLS0tLS0tLS0t CiAgICogRXhwb3J0ZWQgZnVuY3Rpb25zIG9mIGxpYnBxCiAgICogLS0tLS0tLS0tLS0tLS0t LQogICAqLwogIAogIC8qID09PQlpbiBmZS1jb25uZWN0LmMgPT09ICovCiAgCioqKioqKioq KioqKioqKgoqKiogNDM0LDQ0NSAqKioqCi0tLSA0NTgsNDkwIC0tLS0KICAgKiBNYWtlIGFu IGVtcHR5IFBHcmVzdWx0IHdpdGggZ2l2ZW4gc3RhdHVzIChzb21lIGFwcHMgZmluZCB0aGlz CiAgICogdXNlZnVsKS4gSWYgY29ubiBpcyBub3QgTlVMTCBhbmQgc3RhdHVzIGluZGljYXRl cyBhbiBlcnJvciwgdGhlCiAgICogY29ubidzIGVycm9yTWVzc2FnZSBpcyBjb3BpZWQuCiAg ICovCiAgZXh0ZXJuIFBHcmVzdWx0ICpQUW1ha2VFbXB0eVBHcmVzdWx0KFBHY29ubiAqY29u biwgRXhlY1N0YXR1c1R5cGUgc3RhdHVzKTsKICAKKyBleHRlcm4gUEdyZXN1bHQgKgorIFBR Y29weVJlc3VsdChjb25zdCBQR3Jlc3VsdCAqc3JjLCBpbnQgb3B0aW9ucyk7CisgCisgZXh0 ZXJuIGludAorIFBRc2V0UmVzdWx0QXR0cnMoUEdyZXN1bHQgKnJlcywgaW50IG51bUF0dHJp YnV0ZXMsIFBHcmVzQXR0RGVzYyAqYXR0RGVzY3MpOworIAorIGV4dGVybiB2b2lkICoKKyBQ UXJlc3VsdEFsbG9jKFBHcmVzdWx0ICpyZXMsIHNpemVfdCBuQnl0ZXMpOworIAorIC8qCisg ICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgdHVwbGUgZmllbGQuICBUaGUgdHVwX251bSBtdXN0 IGJlIGxlc3MgdGhhbiBvcgorICAqIGVxdWFsIHRvIFBRbnR1cGxlcyhyZXMpLiAgVGhpcyBm dW5jdGlvbiB3aWxsIGdlbmVyYXRlIHR1cGxlcyBhcyBuZWVkZWQuCisgICogQSBuZXcgdHVw bGUgaXMgZ2VuZXJhdGVkIHdoZW4gdHVwX251bSBlcXVhbHMgUFFudHVwbGVzKHJlcykgYW5k IHRoZXJlCisgICogYXJlIG5vIGZpZWxkcyBkZWZpbmVkIGZvciB0aGF0IHR1cGxlLgorICAq CisgICogUmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlIGZvciBzdWNjZXNzIGFuZCB6ZXJvIGZv ciBmYWlsdXJlLgorICAqLworIGV4dGVybiBpbnQKKyBQUXNldHZhbHVlKFBHcmVzdWx0ICpy ZXMsIGludCB0dXBfbnVtLCBpbnQgZmllbGRfbnVtLAorIAljaGFyICp2YWx1ZSwgaW50IGxl bik7CisgCiAgCiAgLyogUXVvdGluZyBzdHJpbmdzIGJlZm9yZSBpbmNsdXNpb24gaW4gcXVl cmllcy4gKi8KICBleHRlcm4gc2l6ZV90IFBRZXNjYXBlU3RyaW5nQ29ubihQR2Nvbm4gKmNv bm4sCiAgCQkJCSAgIGNoYXIgKnRvLCBjb25zdCBjaGFyICpmcm9tLCBzaXplX3QgbGVuZ3Ro LAogIAkJCQkgICBpbnQgKmVycm9yKTsKICBleHRlcm4gdW5zaWduZWQgY2hhciAqUFFlc2Nh cGVCeXRlYUNvbm4oUEdjb25uICpjb25uLApJbmRleDogc3JjL2ludGVyZmFjZXMvbGlicHEv bGlicHEtaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3Byb2plY3RzL2N2c3Jvb3Qv cGdzcWwvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmgsdgpyZXRyaWV2aW5nIHJl dmlzaW9uIDEuMTMxCmRpZmYgLUM2IC1yMS4xMzEgbGlicHEtaW50LmgKKioqIHNyYy9pbnRl cmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCTI5IE1heSAyMDA4IDIyOjAyOjQ0IC0wMDAwCTEu MTMxCi0tLSBzcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaAkzIFNlcCAyMDA4IDE2 OjA2OjUwIC0wMDAwCioqKioqKioqKioqKioqKgoqKiogMTksMzAgKioqKgotLS0gMTksMzEg LS0tLQogIAogICNpZm5kZWYgTElCUFFfSU5UX0gKICAjZGVmaW5lIExJQlBRX0lOVF9ICiAg CiAgLyogV2UgYXNzdW1lIGxpYnBxLWZlLmggaGFzIGFscmVhZHkgYmVlbiBpbmNsdWRlZC4g Ki8KICAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKyAjaW5jbHVkZSAibGlicHEtZXZlbnRz LmgiCiAgCiAgI2luY2x1ZGUgPHRpbWUuaD4KICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAg I2lmbmRlZiBXSU4zMgogICNpbmNsdWRlIDxzeXMvdGltZS5oPgogICNlbmRpZgoqKioqKioq KioqKioqKioKKioqIDk3LDEyMSAqKioqCiAgdW5pb24gcGdyZXN1bHRfZGF0YQogIHsKICAJ UEdyZXN1bHRfZGF0YSAqbmV4dDsJCS8qIGxpbmsgdG8gbmV4dCBibG9jaywgb3IgTlVMTCAq LwogIAljaGFyCQlzcGFjZVsxXTsJCS8qIGR1bW15IGZvciBhY2Nlc3NpbmcgYmxvY2sgYXMg Ynl0ZXMgKi8KICB9OwogIAotIC8qIERhdGEgYWJvdXQgYSBzaW5nbGUgYXR0cmlidXRlIChj b2x1bW4pIG9mIGEgcXVlcnkgcmVzdWx0ICovCi0gCi0gdHlwZWRlZiBzdHJ1Y3QgcGdyZXNB dHREZXNjCi0gewotIAljaGFyCSAgICpuYW1lOwkJCS8qIGNvbHVtbiBuYW1lICovCi0gCU9p ZAkJCXRhYmxlaWQ7CQkvKiBzb3VyY2UgdGFibGUsIGlmIGtub3duICovCi0gCWludAkJCWNv bHVtbmlkOwkJLyogc291cmNlIGNvbHVtbiwgaWYga25vd24gKi8KLSAJaW50CQkJZm9ybWF0 OwkJCS8qIGZvcm1hdCBjb2RlIGZvciB2YWx1ZSAodGV4dC9iaW5hcnkpICovCi0gCU9pZAkJ CXR5cGlkOwkJCS8qIHR5cGUgaWQgKi8KLSAJaW50CQkJdHlwbGVuOwkJCS8qIHR5cGUgc2l6 ZSAqLwotIAlpbnQJCQlhdHR0eXBtb2Q7CQkvKiB0eXBlLXNwZWNpZmljIG1vZGlmaWVyIGlu Zm8gKi8KLSB9IFBHcmVzQXR0RGVzYzsKLSAKICAvKiBEYXRhIGFib3V0IGEgc2luZ2xlIHBh cmFtZXRlciBvZiBhIHByZXBhcmVkIHN0YXRlbWVudCAqLwogIHR5cGVkZWYgc3RydWN0IHBn cmVzUGFyYW1EZXNjCiAgewogIAlPaWQJCQl0eXBpZDsJCQkvKiB0eXBlIGlkICovCiAgfSBQ R3Jlc1BhcmFtRGVzYzsKICAKLS0tIDk4LDEwOSAtLS0tCioqKioqKioqKioqKioqKgoqKiog MTU5LDE3MCAqKioqCi0tLSAxNDcsMTY3IC0tLS0KICAJUFFub3RpY2VSZWNlaXZlciBub3Rp Y2VSZWM7IC8qIG5vdGljZSBtZXNzYWdlIHJlY2VpdmVyICovCiAgCXZvaWQJICAgKm5vdGlj ZVJlY0FyZzsKICAJUFFub3RpY2VQcm9jZXNzb3Igbm90aWNlUHJvYzsJCS8qIG5vdGljZSBt ZXNzYWdlIHByb2Nlc3NvciAqLwogIAl2b2lkCSAgICpub3RpY2VQcm9jQXJnOwogIH0gUEdO b3RpY2VIb29rczsKICAKKyB0eXBlZGVmIHN0cnVjdAorIHsKKyAJLyogcG9pbnRlciBzdXBw bGllZCBieSB1c2VyICovCisgCXZvaWQgKnBhc3NUaHJvdWdoOworIAkvKiBzdGF0ZSAoaW5z dGFuY2UpIGRhdGEsIG9wdGlvbmFsbHkgZ2VuZXJhdGVkIGJ5IGV2ZW50IHByb2MgKi8KKyAJ dm9pZCAqZGF0YTsKKyAJUEdFdmVudFByb2MgcHJvYzsKKyB9IFBHRXZlbnQ7CisgCiAgc3Ry dWN0IHBnX3Jlc3VsdAogIHsKICAJaW50CQkJbnR1cHM7CiAgCWludAkJCW51bUF0dHJpYnV0 ZXM7CiAgCVBHcmVzQXR0RGVzYyAqYXR0RGVzY3M7CiAgCVBHcmVzQXR0VmFsdWUgKip0dXBs ZXM7CQkvKiBlYWNoIFBHcmVzVHVwbGUgaXMgYW4gYXJyYXkgb2YKKioqKioqKioqKioqKioq CioqKiAxODEsMTkyICoqKioKLS0tIDE3OCwxOTMgLS0tLQogIAkgKiBUaGVzZSBmaWVsZHMg YXJlIGNvcGllZCBmcm9tIHRoZSBvcmlnaW5hdGluZyBQR2Nvbm4sIHNvIHRoYXQgb3BlcmF0 aW9ucwogIAkgKiBvbiB0aGUgUEdyZXN1bHQgZG9uJ3QgaGF2ZSB0byByZWZlcmVuY2UgdGhl IFBHY29ubi4KICAJICovCiAgCVBHTm90aWNlSG9va3Mgbm90aWNlSG9va3M7CiAgCWludAkJ CWNsaWVudF9lbmNvZGluZzsJLyogZW5jb2RpbmcgaWQgKi8KICAKKyAJLyogcmVnaXN0ZXJl ZCBldmVudHMsIGNvcGllZCBmcm9tIGNvbm4gKi8KKyAJaW50IG5FdmVudHM7CisgCVBHRXZl bnQgKmV2ZW50czsKKyAKICAJLyoKICAJICogRXJyb3IgaW5mb3JtYXRpb24gKGFsbCBOVUxM IGlmIG5vdCBhbiBlcnJvciByZXN1bHQpLiAgZXJyTXNnIGlzIHRoZQogIAkgKiAib3ZlcmFs bCIgZXJyb3IgbWVzc2FnZSByZXR1cm5lZCBieSBQUXJlc3VsdEVycm9yTWVzc2FnZS4gIElm IHdlIGhhdmUKICAJICogcGVyLWZpZWxkIGluZm8gdGhlbiBpdCBpcyBzdG9yZWQgaW4gYSBs aW5rZWQgbGlzdC4KICAJICovCiAgCWNoYXIJICAgKmVyck1zZzsJCQkvKiBlcnJvciBtZXNz YWdlLCBvciBOVUxMIGlmIG5vIGVycm9yICovCioqKioqKioqKioqKioqKgoqKiogMzAwLDMx MSAqKioqCi0tLSAzMDEsMzE3IC0tLS0KICAJLyogT3B0aW9uYWwgZmlsZSB0byB3cml0ZSB0 cmFjZSBpbmZvIHRvICovCiAgCUZJTEUJICAgKlBmZGVidWc7CiAgCiAgCS8qIENhbGxiYWNr IHByb2NlZHVyZXMgZm9yIG5vdGljZSBtZXNzYWdlIHByb2Nlc3NpbmcgKi8KICAJUEdOb3Rp Y2VIb29rcyBub3RpY2VIb29rczsKICAKKyAJLyogcmVnaXN0ZXJlZCBldmVudHMgdmlhIFBR cmVnaXN0ZXJFdmVudFByb2MgKi8KKyAJaW50IG5FdmVudHM7CisgCWludCBldmVudEFyclNp emU7CisgCVBHRXZlbnQgKmV2ZW50czsKKyAKICAJLyogU3RhdHVzIGluZGljYXRvcnMgKi8K ICAJQ29ublN0YXR1c1R5cGUgc3RhdHVzOwogIAlQR0FzeW5jU3RhdHVzVHlwZSBhc3luY1N0 YXR1czsKICAJUEdUcmFuc2FjdGlvblN0YXR1c1R5cGUgeGFjdFN0YXR1czsgLyogbmV2ZXIg Y2hhbmdlcyB0byBBQ1RJVkUgKi8KICAJUEdRdWVyeUNsYXNzIHF1ZXJ5Y2xhc3M7CiAgCWNo YXIJICAgKmxhc3RfcXVlcnk7CQkvKiBsYXN0IFNRTCBjb21tYW5kLCBvciBOVUxMIGlmIHVu a25vd24gKi8KSW5kZXg6IHNyYy9pbnRlcmZhY2VzL2xpYnBxL3B0aHJlYWQtd2luMzIuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClJDUyBmaWxlOiAvcHJvamVjdHMvY3Zzcm9vdC9wZ3NxbC9zcmMvaW50 ZXJmYWNlcy9saWJwcS9wdGhyZWFkLXdpbjMyLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu MTcKZGlmZiAtQzYgLXIxLjE3IHB0aHJlYWQtd2luMzIuYwoqKiogc3JjL2ludGVyZmFjZXMv bGlicHEvcHRocmVhZC13aW4zMi5jCTIxIE1heSAyMDA4IDE0OjIwOjQ4IC0wMDAwCTEuMTcK LS0tIHNyYy9pbnRlcmZhY2VzL2xpYnBxL3B0aHJlYWQtd2luMzIuYwkzIFNlcCAyMDA4IDE2 OjA2OjUwIC0wMDAwCioqKioqKioqKioqKioqKgoqKiogMiwxNCAqKioqCiAgKgogICogcHRo cmVhZC13aW4zMi5jCiAgKgkgcGFydGlhbCBwdGhyZWFkIGltcGxlbWVudGF0aW9uIGZvciB3 aW4zMgogICoKICAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA4LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAogICogSURFTlRJRklDQVRJT04KISAqCSRQb3N0Z3JlU1FM OiBwZ3NxbC9zcmMvaW50ZXJmYWNlcy9saWJwcS9wdGhyZWFkLXdpbjMyLmMsdiAxLjE3IDIw MDgvMDUvMjEgMTQ6MjA6NDggbWhhIEV4cCAkCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKi8KICAKICAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKICAKLS0tIDIsMTQgLS0tLQog ICoKICAqIHB0aHJlYWQtd2luMzIuYwogICoJIHBhcnRpYWwgcHRocmVhZCBpbXBsZW1lbnRh dGlvbiBmb3Igd2luMzIKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqIElERU5USUZJQ0FUSU9OCiEgKgkk UG9zdGdyZVNRTDogcGdzcWwvc3JjL2ludGVyZmFjZXMvbGlicHEvcHRocmVhZC13aW4zMi5j LHYgMS4xNiAyMDA4LzA1LzE2IDE4OjMwOjUzIG1oYSBFeHAgJAogICoKICAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogICovCiAgCiAgI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAgCg== --------------080002020002080405020500 Content-Type: application/x-compressed; name="libpq-events.tgz" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="libpq-events.tgz" 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 --------------080002020002080405020500--