Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rAsHB-008Xse-Vk for pgsql-hackers@arkaria.postgresql.org; Wed, 06 Dec 2023 13:49:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rAsHA-009jUz-K7 for pgsql-hackers@arkaria.postgresql.org; Wed, 06 Dec 2023 13:49:20 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rAsH9-009jUr-L3 for pgsql-hackers@lists.postgresql.org; Wed, 06 Dec 2023 13:49:20 +0000 Received: from mail-yb1-xb35.google.com ([2607:f8b0:4864:20::b35]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rAsH5-0095Ro-SZ for pgsql-hackers@postgresql.org; Wed, 06 Dec 2023 13:49:18 +0000 Received: by mail-yb1-xb35.google.com with SMTP id 3f1490d57ef6-dae7cc31151so5225386276.3 for ; Wed, 06 Dec 2023 05:49:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joeconway.com; s=google; t=1701870555; x=1702475355; darn=postgresql.org; h=in-reply-to:autocrypt:from:references:to:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=48i7AcpZJb56Uj4YYKKaiIrZP19X+wDJwI+pV7f9NJ8=; b=frcjgoJkGwU/4ojJeFZyVkKzxhXvgAZBvYDOFfHoRUVDwDFjvPb2SJidx/4oEzCsM6 JmGFaULAMH30kYy5Jd0vE+ASpS0TRNfxRWsKbug0HkOVJYfqhcazEYqH5iNNbEHbzP5G uxbRPSIHCOgMWu8pw36wTBA/cNWWhFYxb8Q3VBnrOpsmyMuLdLXDs8rbijP4ZoWlrMk+ tLKr9pyPoaZTCqM061GMCK07h4s/Q0hasUB7rZU5QwXvDw8qYeElhUqNPN+SJam6V9+e 9nSojigkplEAjHj1beTiYq2kpFecnluLdK2PqYYn3x4h4SBeGKtxjCt9MR6l+fbZB2SJ xxeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701870555; x=1702475355; h=in-reply-to:autocrypt:from:references:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=48i7AcpZJb56Uj4YYKKaiIrZP19X+wDJwI+pV7f9NJ8=; b=ce7Nddd0cOktpGzeZS+w5pwXUfpKkK2TAEU5QQocVr33wm6VSgexJOqUczffuf57oD GHDNez9WGLPRfpPHfBnLLJUP9PB0lWXALQYPEobCdeRvtG1ZpZb8yTSkNxkl7skl5L/v 6whI87xTbsXOyQE4pPpnUrB3BAluOGz0P7+pgPOwCnwUYqvWWK972x0p0fZDLllvjUaa lnOxY8+9LGFt0nO0g78E0ILY3SdLWh73mbSjRbzw1W4UlxtM859qFLESXyGMg2v2mztC ssq0AfTM1xLeqFfoD+h+I1CRxlb15HGp1cXRzWMCgNBHJfkyiVB/OLUxdlw1u58fzqVT +9yw== X-Gm-Message-State: AOJu0YyVe+xOZWBiXVFahcSabEJH9oghiPflz4w0RCuXlI1Gr9LekCVu dzatEScltXc6NjSlldpMb0xG/A== X-Google-Smtp-Source: AGHT+IHOf0A/TOt3gL548ko6kCW0WkejG7NvRbyZrlqJUkBhA5pwpTkB+K7ZEE83ZSuksyA+Qr5P8Q== X-Received: by 2002:a81:ac26:0:b0:5d9:2b20:791d with SMTP id k38-20020a81ac26000000b005d92b20791dmr670914ywh.8.1701870554705; Wed, 06 Dec 2023 05:49:14 -0800 (PST) Received: from [192.168.4.41] (162-239-31-113.lightspeed.dybhfl.sbcglobal.net. [162.239.31.113]) by smtp.gmail.com with ESMTPSA id b63-20020a0dd942000000b005d3b4fce438sm4603436ywe.65.2023.12.06.05.49.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 06 Dec 2023 05:49:14 -0800 (PST) Content-Type: multipart/mixed; boundary="------------SGrNREuf3qBLjGTH9p7vRXQu" Message-ID: Date: Wed, 6 Dec 2023 08:49:13 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Emitting JSON to file using COPY TO Content-Language: en-US To: Andrew Dunstan , Davin Shearer , PostgreSQL-development References: <41dcba92-1075-e5e5-cb99-36711abf6cec@dunslane.net> <5c84b70b-ba18-c45d-dbbe-612fa229b2ce@dunslane.net> <398c22f6-4299-4b17-80bf-2f14f4afd592@joeconway.com> <46cc4507-a0d9-4044-b2ce-5a8bca8015c0@joeconway.com> <2554e520-e103-8978-dcb5-807dfeb77402@dunslane.net> <926ff917-8371-40ec-b5e6-ab7b0e09bdc5@joeconway.com> <315b81d4-4b67-7828-0355-3808cd14acd1@dunslane.net> <7a60faf6-e7f1-419d-aee6-10a78ea2fe81@joeconway.com> <2e7ff718-895d-83fc-46f7-be25e23b23b4@dunslane.net> From: Joe Conway Autocrypt: addr=mail@joeconway.com; keydata= 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 In-Reply-To: <2e7ff718-895d-83fc-46f7-be25e23b23b4@dunslane.net> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------SGrNREuf3qBLjGTH9p7vRXQu Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 12/6/23 07:36, Andrew Dunstan wrote: > > On 2023-12-05 Tu 16:46, Joe Conway wrote: >> On 12/5/23 16:20, Andrew Dunstan wrote: >>> On 2023-12-05 Tu 16:09, Joe Conway wrote: >>>> On 12/5/23 16:02, Joe Conway wrote: >>>>> On 12/5/23 15:55, Andrew Dunstan wrote: >>>>>> and in any other case (e.g. LINES) I can't see why you >>>>>> would have them. >>>> >>>> Oh I didn't address this -- I saw examples in the interwebs of MSSQL >>>> server I think [1] which had the non-array with commas import and >>>> export style. It was not that tough to support and the code as >>>> written already does it, so why not? >>> >>> That seems quite absurd, TBH. I know we've catered for some absurdity in >>> the CSV code (much of it down to me), so maybe we need to be liberal in >>> what we accept here too. IMNSHO, we should produce either a single JSON >>> document (the ARRAY case) or a series of JSON documents, one per row >>> (the LINES case). >> >> So your preference would be to not allow the non-array-with-commas >> case but if/when we implement COPY FROM we would accept that format? >> As in Postel'a law ("be conservative in what you do, be liberal in >> what you accept from others")? > > > Yes, I think so. Awesome. The attached does it that way. I also ran pgindent. I believe this is ready to commit unless there are further comments or objections. -- Joe Conway PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --------------SGrNREuf3qBLjGTH9p7vRXQu Content-Type: text/x-patch; charset=UTF-8; name="copyto_json.006.diff" Content-Disposition: attachment; filename="copyto_json.006.diff" Content-Transfer-Encoding: base64 QWRkIGpzb24gZm9ybWF0IG1vZGUgdG8gQ09QWSBUTwoKQWRkIGpzb24gZm9ybWF0IG1vZGUg c3VwcG9ydCB0byBDT1BZIFRPLCB3aGljaCBpbmNsdWRlcyB0d28gb3V0cHV0CnZhcmlhdGlv bnM6IDEpICJqc29uIGxpbmVzIiB3aGljaCBpcyBlYWNoIHJvdyBhcyBhIGpzb24gb2JqZWN0 IGRlbGltaXRlZApieSBuZXdsaW5lcyAodGhlIGRlZmF1bHQpOyBhbmQgMikgImpzb24gYXJy YXkiIHdoaWNoIGlzIHRoZSBzYW1lIGFzICMxLApidXQgd2l0aCB0aGUgYWRkaXRpb24gb2Yg YSBsZWFkaW5nICJbIiwgdHJhaWxpbmcgIl0iLCBhbmQgY29tbWEgcm93CmRlbGltaXRlcnMs IHRvIGZvcm0gYSB2YWxpZCBqc29uIGFycmF5LgoKRWFybHkgdmVyc2lvbnM6IGhlbHBmdWwg aGludHMvcmV2aWV3cyBwcm92aWRlZCBieSBOYXRoYW4gQm9zc2FydCwKVG9tIExhbmUsIGFu ZCBNYWNpZWsgU2FrcmVqZGEuIEZpbmFsIHZlcnNpb25zOiByZXZpZXdlZCBieSBBbmRyZXcg RHVuc3RhbgphbmQgRGF2aW4gU2hlYXJlci4KClJlcXVlc3RlZC1ieTogRGF2aW4gU2hlYXJl cgpBdXRob3I6IEpvZSBDb253YXkKUmV2aWV3ZWQtYnk6IEFuZHJldyBEdW5zdGFuLCBEYXZp biBTaGVhcmVyIApEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2ZsYXQvMjRlM2Vl ODgtZWMxZS00MjFiLTg5YWUtOGE0N2VlMGQyZGYxJTQwam9lY29ud2F5LmNvbSNhNWU2Yjg4 MjlmOWE3NGRmYzgzNWY2ZjI5ZjJlNDRjNQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9y ZWYvY29weS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKaW5kZXggMThlY2M2 OS4uODkxNWZiMyAxMDA2NDQKKioqIGEvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKLS0t IGIvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKKioqKioqKioqKioqKioqIENPUFkgeyA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGEKKioqIDQzLDQ4ICoqKioKLS0tIDQz LDQ5IC0tLS0KICAgICAgRk9SQ0VfUVVPVEUgeyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSB8ICogfQogICAg ICBGT1JDRV9OT1RfTlVMTCB7ICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNv bHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uXSApIHwgKiB9CiAgICAgIEZPUkNFX05V TEwgeyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVw bGFjZWFibGU+IFssIC4uLl0gKSB8ICogfQorICAgICBGT1JDRV9BUlJBWSBbIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ib29sZWFuPC9yZXBsYWNlYWJsZT4gXQogICAgICBF TkNPRElORyAnPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmVuY29kaW5nX25hbWU8 L3JlcGxhY2VhYmxlPicKICA8L3N5bm9wc2lzPgogICA8L3JlZnN5bm9wc2lzZGl2PgoqKioq KioqKioqKioqKiogQ09QWSB7IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YQoq KiogMjA2LDIxNCAqKioqCi0tLSAyMDcsMjIwIC0tLS0KICAgICAgICBTZWxlY3RzIHRoZSBk YXRhIGZvcm1hdCB0byBiZSByZWFkIG9yIHdyaXR0ZW46CiAgICAgICAgPGxpdGVyYWw+dGV4 dDwvbGl0ZXJhbD4sCiAgICAgICAgPGxpdGVyYWw+Y3N2PC9saXRlcmFsPiAoQ29tbWEgU2Vw YXJhdGVkIFZhbHVlcyksCisgICAgICAgPGxpdGVyYWw+anNvbjwvbGl0ZXJhbD4gKEphdmFT Y3JpcHQgT2JqZWN0IE5vdGF0aW9uKSwKICAgICAgICBvciA8bGl0ZXJhbD5iaW5hcnk8L2xp dGVyYWw+LgogICAgICAgIFRoZSBkZWZhdWx0IGlzIDxsaXRlcmFsPnRleHQ8L2xpdGVyYWw+ LgogICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVGhlIDxsaXRlcmFsPmpz b248L2xpdGVyYWw+IG9wdGlvbiBpcyBhbGxvd2VkIG9ubHkgaW4KKyAgICAgICA8Y29tbWFu ZD5DT1BZIFRPPC9jb21tYW5kPi4KKyAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4K ICAgICA8L3Zhcmxpc3RlbnRyeT4KICAKKioqKioqKioqKioqKioqIENPUFkgeyA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGEKKioqIDM3MiwzNzcgKioqKgotLS0gMzc4LDM5 NiAtLS0tCiAgICAgICA8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgPC92YXJsaXN0 ZW50cnk+CisgCisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgPHRlcm0+PGxpdGVyYWw+Rk9S Q0VfQVJSQVk8L2xpdGVyYWw+PC90ZXJtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFy YT4KKyAgICAgICBGb3JjZSBvdXRwdXQgb2Ygc3F1YXJlIGJyYWNrZXRzIGFzIGFycmF5IGRl Y29yYXRpb25zIGF0IHRoZSBiZWdpbm5pbmcKKyAgICAgICBhbmQgZW5kIG9mIG91dHB1dCwg YW5kIGNvbW1hcyBiZXR3ZWVuIHRoZSByb3dzLiBJdCBpcyBhbGxvd2VkIG9ubHkgaW4KKyAg ICAgICA8Y29tbWFuZD5DT1BZIFRPPC9jb21tYW5kPiwgYW5kIG9ubHkgd2hlbiB1c2luZwor ICAgICAgIDxsaXRlcmFsPkpTT048L2xpdGVyYWw+IGZvcm1hdC4gVGhlIGRlZmF1bHQgaXMK KyAgICAgICA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4uCisgICAgICA8L3BhcmE+CisgICAg IDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CiAgCiAgICAgPHZhcmxpc3RlbnRy eT4KICAgICAgPHRlcm0+PGxpdGVyYWw+RU5DT0RJTkc8L2xpdGVyYWw+PC90ZXJtPgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvY29weS5jCmluZGV4IGNmYWQ0N2IuLjIzYjU3MGYgMTAwNjQ0CioqKiBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2NvcHkuYwotLS0gYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5 LmMKKioqKioqKioqKioqKioqIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3Rh dGUsCioqKiA0MTksNDI0ICoqKioKLS0tIDQxOSw0MjUgLS0tLQogIAlib29sCQlmb3JtYXRf c3BlY2lmaWVkID0gZmFsc2U7CiAgCWJvb2wJCWZyZWV6ZV9zcGVjaWZpZWQgPSBmYWxzZTsK ICAJYm9vbAkJaGVhZGVyX3NwZWNpZmllZCA9IGZhbHNlOworIAlib29sCQlmb3JjZV9hcnJh eV9zcGVjaWZpZWQgPSBmYWxzZTsKICAJTGlzdENlbGwgICAqb3B0aW9uOwogIAogIAkvKiBT dXBwb3J0IGV4dGVybmFsIHVzZSBmb3Igb3B0aW9uIHNhbml0eSBjaGVja2luZyAqLwoqKioq KioqKioqKioqKiogUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKKioq IDQ0Myw0NDggKioqKgotLS0gNDQ0LDQ1MSAtLS0tCiAgCQkJCSAvKiBkZWZhdWx0IGZvcm1h dCAqLyA7CiAgCQkJZWxzZSBpZiAoc3RyY21wKGZtdCwgImNzdiIpID09IDApCiAgCQkJCW9w dHNfb3V0LT5jc3ZfbW9kZSA9IHRydWU7CisgCQkJZWxzZSBpZiAoc3RyY21wKGZtdCwgImpz b24iKSA9PSAwKQorIAkJCQlvcHRzX291dC0+anNvbl9tb2RlID0gdHJ1ZTsKICAJCQllbHNl IGlmIChzdHJjbXAoZm10LCAiYmluYXJ5IikgPT0gMCkKICAJCQkJb3B0c19vdXQtPmJpbmFy eSA9IHRydWU7CiAgCQkJZWxzZQoqKioqKioqKioqKioqKiogUHJvY2Vzc0NvcHlPcHRpb25z KFBhcnNlU3RhdGUgKnBzdGF0ZSwKKioqIDU0MCw1NDUgKioqKgotLS0gNTQzLDU1NSAtLS0t CiAgCQkJCQkJCQlkZWZlbC0+ZGVmbmFtZSksCiAgCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlv bihwc3RhdGUsIGRlZmVsLT5sb2NhdGlvbikpKTsKICAJCX0KKyAJCWVsc2UgaWYgKHN0cmNt cChkZWZlbC0+ZGVmbmFtZSwgImZvcmNlX2FycmF5IikgPT0gMCkKKyAJCXsKKyAJCQlpZiAo Zm9yY2VfYXJyYXlfc3BlY2lmaWVkKQorIAkJCQllcnJvckNvbmZsaWN0aW5nRGVmRWxlbShk ZWZlbCwgcHN0YXRlKTsKKyAJCQlmb3JjZV9hcnJheV9zcGVjaWZpZWQgPSB0cnVlOworIAkJ CW9wdHNfb3V0LT5mb3JjZV9hcnJheSA9IGRlZkdldEJvb2xlYW4oZGVmZWwpOworIAkJfQog IAkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiY29udmVydF9zZWxlY3RpdmVs eSIpID09IDApCiAgCQl7CiAgCQkJLyoKKioqKioqKioqKioqKioqIFByb2Nlc3NDb3B5T3B0 aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCioqKiA1OTgsNjAzICoqKioKLS0tIDYwOCw2MjUg LS0tLQogIAkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCiAgCQkJCSBlcnJt c2coImNhbm5vdCBzcGVjaWZ5IERFRkFVTFQgaW4gQklOQVJZIG1vZGUiKSkpOwogIAorIAlp ZiAob3B0c19vdXQtPmpzb25fbW9kZSkKKyAJeworIAkJaWYgKGlzX2Zyb20pCisgCQkJZXJl cG9ydChFUlJPUiwKKyAJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9S VEVEKSwKKyAJCQkJCSBlcnJtc2coImNhbm5vdCB1c2UgSlNPTiBtb2RlIGluIENPUFkgRlJP TSIpKSk7CisgCX0KKyAJZWxzZSBpZiAob3B0c19vdXQtPmZvcmNlX2FycmF5KQorIAkJZXJl cG9ydChFUlJPUiwKKyAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JU RUQpLAorIAkJCQkgZXJybXNnKCJDT1BZIEZPUkNFX0FSUkFZIHJlcXVpcmVzIEpTT04gbW9k ZSIpKSk7CisgCiAgCS8qIFNldCBkZWZhdWx0cyBmb3Igb21pdHRlZCBvcHRpb25zICovCiAg CWlmICghb3B0c19vdXQtPmRlbGltKQogIAkJb3B0c19vdXQtPmRlbGltID0gb3B0c19vdXQt PmNzdl9tb2RlID8gIiwiIDogIlx0IjsKKioqKioqKioqKioqKioqIFByb2Nlc3NDb3B5T3B0 aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCioqKiA2NjcsNjcyICoqKioKLS0tIDY4OSw2OTkg LS0tLQogIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAg CQkJCSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5IEhFQURFUiBpbiBCSU5BUlkgbW9kZSIpKSk7 CiAgCisgCWlmIChvcHRzX291dC0+anNvbl9tb2RlICYmIG9wdHNfb3V0LT5oZWFkZXJfbGlu ZSkKKyAJCWVyZXBvcnQoRVJST1IsCisgCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9O T1RfU1VQUE9SVEVEKSwKKyAJCQkJIGVycm1zZygiY2Fubm90IHNwZWNpZnkgSEVBREVSIGlu IEpTT04gbW9kZSIpKSk7CisgCiAgCS8qIENoZWNrIHF1b3RlICovCiAgCWlmICghb3B0c19v dXQtPmNzdl9tb2RlICYmIG9wdHNfb3V0LT5xdW90ZSAhPSBOVUxMKQogIAkJZXJlcG9ydChF UlJPUiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKaW5kZXggYzY2YTA0Ny4uNmUzNTFlYyAxMDA2 NDQKKioqIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKLS0tIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvY29weXRvLmMKKioqKioqKioqKioqKioqCioqKiAzNyw0MiAqKioqCi0t LSAzNyw0MyAtLS0tCiAgI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKICAj aW5jbHVkZSAic3RvcmFnZS9mZC5oIgogICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisg I2luY2x1ZGUgInV0aWxzL2pzb24uaCIKICAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgi CiAgI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAgI2luY2x1ZGUgInV0aWxzL3BhcnRj YWNoZS5oIgoqKioqKioqKioqKioqKiogdHlwZWRlZiBzdHJ1Y3QKKioqIDExMiwxMTcgKioq KgotLS0gMTEzLDEyMCAtLS0tCiAgLyogTk9URTogdGhlcmUncyBhIGNvcHkgb2YgdGhpcyBp biBjb3B5ZnJvbXBhcnNlLmMgKi8KICBzdGF0aWMgY29uc3QgY2hhciBCaW5hcnlTaWduYXR1 cmVbMTFdID0gIlBHQ09QWVxuXDM3N1xyXG5cMCI7CiAgCisgLyogbmVlZCBkZWxpbWl0ZXIg dG8gc3RhcnQgbmV4dCBqc29uIGFycmF5IGVsZW1lbnQgKi8KKyBzdGF0aWMgYm9vbCBqc29u X3Jvd19kZWxpbV9uZWVkZWQgPSBmYWxzZTsKICAKICAvKiBub24tZXhwb3J0IGZ1bmN0aW9u IHByb3RvdHlwZXMgKi8KICBzdGF0aWMgdm9pZCBFbmRDb3B5KENvcHlUb1N0YXRlIGNzdGF0 ZSk7CioqKioqKioqKioqKioqKiBEb0NvcHlUbyhDb3B5VG9TdGF0ZSBjc3RhdGUpCioqKiA4 NDUsODUwICoqKioKLS0tIDg0OCw4NjcgLS0tLQogIAogIAkJCUNvcHlTZW5kRW5kT2ZSb3co Y3N0YXRlKTsKICAJCX0KKyAKKyAJCS8qCisgCQkgKiBJZiBKU09OIGhhcyBiZWVuIHJlcXVl c3RlZCwgYW5kIEZPUkNFX0FSUkFZIGhhcyBiZWVuIHNwZWNpZmllZCBzZW5kCisgCQkgKiB0 aGUgb3BlbmluZyBicmFja2V0LgorIAkJICovCisgCQlpZiAoY3N0YXRlLT5vcHRzLmpzb25f bW9kZSkKKyAJCXsKKyAJCQlpZiAoY3N0YXRlLT5vcHRzLmZvcmNlX2FycmF5KQorIAkJCXsK KyAJCQkJQ29weVNlbmRDaGFyKGNzdGF0ZSwgJ1snKTsKKyAJCQkJQ29weVNlbmRFbmRPZlJv dyhjc3RhdGUpOworIAkJCX0KKyAJCQlqc29uX3Jvd19kZWxpbV9uZWVkZWQgPSBmYWxzZTsK KyAJCX0KICAJfQogIAogIAlpZiAoY3N0YXRlLT5yZWwpCioqKioqKioqKioqKioqKiBEb0Nv cHlUbyhDb3B5VG9TdGF0ZSBjc3RhdGUpCioqKiA4OTIsODk3ICoqKioKLS0tIDkwOSw5MjUg LS0tLQogIAkJQ29weVNlbmRFbmRPZlJvdyhjc3RhdGUpOwogIAl9CiAgCisgCS8qCisgCSAq IElmIEpTT04gaGFzIGJlZW4gcmVxdWVzdGVkLCBhbmQgRk9SQ0VfQVJSQVkgaGFzIGJlZW4g c3BlY2lmaWVkIHNlbmQgdGhlCisgCSAqIGNsb3NpbmcgYnJhY2tldC4KKyAJICovCisgCWlm IChjc3RhdGUtPm9wdHMuanNvbl9tb2RlICYmCisgCQljc3RhdGUtPm9wdHMuZm9yY2VfYXJy YXkpCisgCXsKKyAJCUNvcHlTZW5kQ2hhcihjc3RhdGUsICddJyk7CisgCQlDb3B5U2VuZEVu ZE9mUm93KGNzdGF0ZSk7CisgCX0KKyAKICAJTWVtb3J5Q29udGV4dERlbGV0ZShjc3RhdGUt PnJvd2NvbnRleHQpOwogIAogIAlpZiAoZmVfY29weSkKKioqKioqKioqKioqKioqIERvQ29w eVRvKENvcHlUb1N0YXRlIGNzdGF0ZSkKKioqIDkwNiw5MTYgKioqKgogIHN0YXRpYyB2b2lk CiAgQ29weU9uZVJvd1RvKENvcHlUb1N0YXRlIGNzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNs b3QpCiAgewotIAlib29sCQluZWVkX2RlbGltID0gZmFsc2U7Ci0gCUZtZ3JJbmZvICAgKm91 dF9mdW5jdGlvbnMgPSBjc3RhdGUtPm91dF9mdW5jdGlvbnM7CiAgCU1lbW9yeUNvbnRleHQg b2xkY29udGV4dDsKLSAJTGlzdENlbGwgICAqY3VyOwotIAljaGFyCSAgICpzdHJpbmc7CiAg CiAgCU1lbW9yeUNvbnRleHRSZXNldChjc3RhdGUtPnJvd2NvbnRleHQpOwogIAlvbGRjb250 ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGNzdGF0ZS0+cm93Y29udGV4dCk7Ci0tLSA5 MzQsOTQwIC0tLS0KKioqKioqKioqKioqKioqIENvcHlPbmVSb3dUbyhDb3B5VG9TdGF0ZSBj c3RhdGUsIFR1cGxlVGEKKioqIDkyMSw5NzQgKioqKgogIAkJQ29weVNlbmRJbnQxNihjc3Rh dGUsIGxpc3RfbGVuZ3RoKGNzdGF0ZS0+YXR0bnVtbGlzdCkpOwogIAl9CiAgCiEgCS8qIE1h a2Ugc3VyZSB0aGUgdHVwbGUgaXMgZnVsbHkgZGVjb25zdHJ1Y3RlZCAqLwohIAlzbG90X2dl dGFsbGF0dHJzKHNsb3QpOwohIAohIAlmb3JlYWNoKGN1ciwgY3N0YXRlLT5hdHRudW1saXN0 KQogIAl7CiEgCQlpbnQJCQlhdHRudW0gPSBsZmlyc3RfaW50KGN1cik7CiEgCQlEYXR1bQkJ dmFsdWUgPSBzbG90LT50dHNfdmFsdWVzW2F0dG51bSAtIDFdOwohIAkJYm9vbAkJaXNudWxs ID0gc2xvdC0+dHRzX2lzbnVsbFthdHRudW0gLSAxXTsKICAKISAJCWlmICghY3N0YXRlLT5v cHRzLmJpbmFyeSkKISAJCXsKISAJCQlpZiAobmVlZF9kZWxpbSkKISAJCQkJQ29weVNlbmRD aGFyKGNzdGF0ZSwgY3N0YXRlLT5vcHRzLmRlbGltWzBdKTsKISAJCQluZWVkX2RlbGltID0g dHJ1ZTsKISAJCX0KICAKISAJCWlmIChpc251bGwpCiEgCQl7CiEgCQkJaWYgKCFjc3RhdGUt Pm9wdHMuYmluYXJ5KQohIAkJCQlDb3B5U2VuZFN0cmluZyhjc3RhdGUsIGNzdGF0ZS0+b3B0 cy5udWxsX3ByaW50X2NsaWVudCk7CiEgCQkJZWxzZQohIAkJCQlDb3B5U2VuZEludDMyKGNz dGF0ZSwgLTEpOwohIAkJfQohIAkJZWxzZQogIAkJewogIAkJCWlmICghY3N0YXRlLT5vcHRz LmJpbmFyeSkKICAJCQl7CiEgCQkJCXN0cmluZyA9IE91dHB1dEZ1bmN0aW9uQ2FsbCgmb3V0 X2Z1bmN0aW9uc1thdHRudW0gLSAxXSwKISAJCQkJCQkJCQkJCXZhbHVlKTsKISAJCQkJaWYg KGNzdGF0ZS0+b3B0cy5jc3ZfbW9kZSkKISAJCQkJCUNvcHlBdHRyaWJ1dGVPdXRDU1YoY3N0 YXRlLCBzdHJpbmcsCiEgCQkJCQkJCQkJCWNzdGF0ZS0+b3B0cy5mb3JjZV9xdW90ZV9mbGFn c1thdHRudW0gLSAxXSwKISAJCQkJCQkJCQkJbGlzdF9sZW5ndGgoY3N0YXRlLT5hdHRudW1s aXN0KSA9PSAxKTsKICAJCQkJZWxzZQohIAkJCQkJQ29weUF0dHJpYnV0ZU91dFRleHQoY3N0 YXRlLCBzdHJpbmcpOwogIAkJCX0KICAJCQllbHNlCiAgCQkJewohIAkJCQlieXRlYQkgICAq b3V0cHV0Ynl0ZXM7CiAgCiEgCQkJCW91dHB1dGJ5dGVzID0gU2VuZEZ1bmN0aW9uQ2FsbCgm b3V0X2Z1bmN0aW9uc1thdHRudW0gLSAxXSwKISAJCQkJCQkJCQkJCSAgIHZhbHVlKTsKISAJ CQkJQ29weVNlbmRJbnQzMihjc3RhdGUsIFZBUlNJWkUob3V0cHV0Ynl0ZXMpIC0gVkFSSERS U1opOwohIAkJCQlDb3B5U2VuZERhdGEoY3N0YXRlLCBWQVJEQVRBKG91dHB1dGJ5dGVzKSwK ISAJCQkJCQkJIFZBUlNJWkUob3V0cHV0Ynl0ZXMpIC0gVkFSSERSU1opOwogIAkJCX0KICAJ CX0KICAJfQogIAogIAlDb3B5U2VuZEVuZE9mUm93KGNzdGF0ZSk7CiAgCi0tLSA5NDUsMTAy OCAtLS0tCiAgCQlDb3B5U2VuZEludDE2KGNzdGF0ZSwgbGlzdF9sZW5ndGgoY3N0YXRlLT5h dHRudW1saXN0KSk7CiAgCX0KICAKISAJaWYgKCFjc3RhdGUtPm9wdHMuanNvbl9tb2RlKQog IAl7CiEgCQlib29sCQluZWVkX2RlbGltID0gZmFsc2U7CiEgCQlGbWdySW5mbyAgICpvdXRf ZnVuY3Rpb25zID0gY3N0YXRlLT5vdXRfZnVuY3Rpb25zOwohIAkJTGlzdENlbGwgICAqY3Vy OwohIAkJY2hhcgkgICAqc3RyaW5nOwogIAohIAkJLyogTWFrZSBzdXJlIHRoZSB0dXBsZSBp cyBmdWxseSBkZWNvbnN0cnVjdGVkICovCiEgCQlzbG90X2dldGFsbGF0dHJzKHNsb3QpOwog IAohIAkJZm9yZWFjaChjdXIsIGNzdGF0ZS0+YXR0bnVtbGlzdCkKICAJCXsKKyAJCQlpbnQJ CQlhdHRudW0gPSBsZmlyc3RfaW50KGN1cik7CisgCQkJRGF0dW0JCXZhbHVlID0gc2xvdC0+ dHRzX3ZhbHVlc1thdHRudW0gLSAxXTsKKyAJCQlib29sCQlpc251bGwgPSBzbG90LT50dHNf aXNudWxsW2F0dG51bSAtIDFdOworIAogIAkJCWlmICghY3N0YXRlLT5vcHRzLmJpbmFyeSkK ICAJCQl7CiEgCQkJCWlmIChuZWVkX2RlbGltKQohIAkJCQkJQ29weVNlbmRDaGFyKGNzdGF0 ZSwgY3N0YXRlLT5vcHRzLmRlbGltWzBdKTsKISAJCQkJbmVlZF9kZWxpbSA9IHRydWU7CiEg CQkJfQohIAohIAkJCWlmIChpc251bGwpCiEgCQkJewohIAkJCQlpZiAoIWNzdGF0ZS0+b3B0 cy5iaW5hcnkpCiEgCQkJCQlDb3B5U2VuZFN0cmluZyhjc3RhdGUsIGNzdGF0ZS0+b3B0cy5u dWxsX3ByaW50X2NsaWVudCk7CiAgCQkJCWVsc2UKISAJCQkJCUNvcHlTZW5kSW50MzIoY3N0 YXRlLCAtMSk7CiAgCQkJfQogIAkJCWVsc2UKICAJCQl7CiEgCQkJCWlmICghY3N0YXRlLT5v cHRzLmJpbmFyeSkKISAJCQkJewohIAkJCQkJc3RyaW5nID0gT3V0cHV0RnVuY3Rpb25DYWxs KCZvdXRfZnVuY3Rpb25zW2F0dG51bSAtIDFdLAohIAkJCQkJCQkJCQkJCXZhbHVlKTsKISAJ CQkJCWlmIChjc3RhdGUtPm9wdHMuY3N2X21vZGUpCiEgCQkJCQkJQ29weUF0dHJpYnV0ZU91 dENTVihjc3RhdGUsIHN0cmluZywKISAJCQkJCQkJCQkJCWNzdGF0ZS0+b3B0cy5mb3JjZV9x dW90ZV9mbGFnc1thdHRudW0gLSAxXSwKISAJCQkJCQkJCQkJCWxpc3RfbGVuZ3RoKGNzdGF0 ZS0+YXR0bnVtbGlzdCkgPT0gMSk7CiEgCQkJCQllbHNlCiEgCQkJCQkJQ29weUF0dHJpYnV0 ZU91dFRleHQoY3N0YXRlLCBzdHJpbmcpOwohIAkJCQl9CiEgCQkJCWVsc2UKISAJCQkJewoh IAkJCQkJYnl0ZWEJICAgKm91dHB1dGJ5dGVzOwogIAohIAkJCQkJb3V0cHV0Ynl0ZXMgPSBT ZW5kRnVuY3Rpb25DYWxsKCZvdXRfZnVuY3Rpb25zW2F0dG51bSAtIDFdLAohIAkJCQkJCQkJ CQkJCSAgIHZhbHVlKTsKISAJCQkJCUNvcHlTZW5kSW50MzIoY3N0YXRlLCBWQVJTSVpFKG91 dHB1dGJ5dGVzKSAtIFZBUkhEUlNaKTsKISAJCQkJCUNvcHlTZW5kRGF0YShjc3RhdGUsIFZB UkRBVEEob3V0cHV0Ynl0ZXMpLAohIAkJCQkJCQkJIFZBUlNJWkUob3V0cHV0Ynl0ZXMpIC0g VkFSSERSU1opOwohIAkJCQl9CiAgCQkJfQogIAkJfQogIAl9CisgCWVsc2UKKyAJeworIAkJ RGF0dW0JCXJvd2RhdGEgPSBFeGVjRmV0Y2hTbG90SGVhcFR1cGxlRGF0dW0oc2xvdCk7Cisg CQlTdHJpbmdJbmZvCXJlc3VsdDsKKyAKKyAJCXJlc3VsdCA9IG1ha2VTdHJpbmdJbmZvKCk7 CisgCQljb21wb3NpdGVfdG9fanNvbihyb3dkYXRhLCByZXN1bHQsIGZhbHNlKTsKKyAKKyAJ CWlmIChqc29uX3Jvd19kZWxpbV9uZWVkZWQgJiYKKyAJCQljc3RhdGUtPm9wdHMuZm9yY2Vf YXJyYXkpCisgCQl7CisgCQkJQ29weVNlbmRDaGFyKGNzdGF0ZSwgJywnKTsKKyAJCX0KKyAJ CWVsc2UgaWYgKGNzdGF0ZS0+b3B0cy5mb3JjZV9hcnJheSkKKyAJCXsKKyAJCQkvKiBmaXJz dCByb3cgbmVlZHMgbm8gZGVsaW1pdGVyICovCisgCQkJQ29weVNlbmRDaGFyKGNzdGF0ZSwg JyAnKTsKKyAJCQlqc29uX3Jvd19kZWxpbV9uZWVkZWQgPSB0cnVlOworIAkJfQorIAorIAkJ Q29weVNlbmREYXRhKGNzdGF0ZSwgcmVzdWx0LT5kYXRhLCByZXN1bHQtPmxlbik7CisgCX0K ICAKICAJQ29weVNlbmRFbmRPZlJvdyhjc3RhdGUpOwogIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXgg ZDYzMWFjOC4uZTY3ODlkNyAxMDA2NDQKKioqIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0u eQotLS0gYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CioqKioqKioqKioqKioqKiBjb3B5 X29wdF9pdGVtOgoqKiogMzQwOCwzNDEzICoqKioKLS0tIDM0MDgsMzQxNyAtLS0tCiAgCQkJ CXsKICAJCQkJCSQkID0gbWFrZURlZkVsZW0oImZvcm1hdCIsIChOb2RlICopIG1ha2VTdHJp bmcoImNzdiIpLCBAMSk7CiAgCQkJCX0KKyAJCQl8IEpTT04KKyAJCQkJeworIAkJCQkJJCQg PSBtYWtlRGVmRWxlbSgiZm9ybWF0IiwgKE5vZGUgKikgbWFrZVN0cmluZygianNvbiIpLCBA MSk7CisgCQkJCX0KICAJCQl8IEhFQURFUl9QCiAgCQkJCXsKICAJCQkJCSQkID0gbWFrZURl ZkVsZW0oImhlYWRlciIsIChOb2RlICopIG1ha2VCb29sZWFuKHRydWUpLCBAMSk7CioqKioq KioqKioqKioqKiBjb3B5X29wdF9pdGVtOgoqKiogMzQ0OCwzNDUzICoqKioKLS0tIDM0NTIs MzQ2MSAtLS0tCiAgCQkJCXsKICAJCQkJCSQkID0gbWFrZURlZkVsZW0oImVuY29kaW5nIiwg KE5vZGUgKikgbWFrZVN0cmluZygkMiksIEAxKTsKICAJCQkJfQorIAkJCXwgRk9SQ0UgQVJS QVkKKyAJCQkJeworIAkJCQkJJCQgPSBtYWtlRGVmRWxlbSgiZm9yY2VfYXJyYXkiLCAoTm9k ZSAqKSBtYWtlQm9vbGVhbih0cnVlKSwgQDEpOworIAkJCQl9CiAgCQk7CiAgCiAgLyogVGhl IGZvbGxvd2luZyBleGlzdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnkg b2xkIHZlcnNpb25zICovCioqKioqKioqKioqKioqKiBjb3B5X2dlbmVyaWNfb3B0X2VsZW06 CioqKiAzNDkwLDM0OTUgKioqKgotLS0gMzQ5OCwzNTA3IC0tLS0KICAJCQkJewogIAkJCQkJ JCQgPSBtYWtlRGVmRWxlbSgkMSwgJDIsIEAxKTsKICAJCQkJfQorIAkJCXwgRk9STUFUX0xB IGNvcHlfZ2VuZXJpY19vcHRfYXJnCisgCQkJCXsKKyAJCQkJCSQkID0gbWFrZURlZkVsZW0o ImZvcm1hdCIsICQyLCBAMSk7CisgCQkJCX0KICAJCTsKICAKICBjb3B5X2dlbmVyaWNfb3B0 X2FyZzoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uLmMgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvanNvbi5jCmluZGV4IDcxYWU1M2YuLmNiNDMxMWUgMTAwNjQ0 CioqKiBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uLmMKLS0tIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2pzb24uYwoqKioqKioqKioqKioqKiogdHlwZWRlZiBzdHJ1Y3QgSnNvbkFn Z1N0YXRlCioqKiA4Myw5MCAqKioqCiAgCUpzb25VbmlxdWVCdWlsZGVyU3RhdGUgdW5pcXVl X2NoZWNrOwogIH0gSnNvbkFnZ1N0YXRlOwogIAotIHN0YXRpYyB2b2lkIGNvbXBvc2l0ZV90 b19qc29uKERhdHVtIGNvbXBvc2l0ZSwgU3RyaW5nSW5mbyByZXN1bHQsCi0gCQkJCQkJCSAg Ym9vbCB1c2VfbGluZV9mZWVkcyk7CiAgc3RhdGljIHZvaWQgYXJyYXlfZGltX3RvX2pzb24o U3RyaW5nSW5mbyByZXN1bHQsIGludCBkaW0sIGludCBuZGltcywgaW50ICpkaW1zLAogIAkJ CQkJCQkgIERhdHVtICp2YWxzLCBib29sICpudWxscywgaW50ICp2YWxjb3VudCwKICAJCQkJ CQkJICBKc29uVHlwZUNhdGVnb3J5IHRjYXRlZ29yeSwgT2lkIG91dGZ1bmNvaWQsCi0tLSA4 Myw4OCAtLS0tCioqKioqKioqKioqKioqKiBhcnJheV90b19qc29uX2ludGVybmFsKERhdHVt IGFycmF5LCBTdHJpCioqKiA0OTAsNDk3ICoqKioKICAKICAvKgogICAqIFR1cm4gYSBjb21w b3NpdGUgLyByZWNvcmQgaW50byBKU09OLgogICAqLwohIHN0YXRpYyB2b2lkCiAgY29tcG9z aXRlX3RvX2pzb24oRGF0dW0gY29tcG9zaXRlLCBTdHJpbmdJbmZvIHJlc3VsdCwgYm9vbCB1 c2VfbGluZV9mZWVkcykKICB7CiAgCUhlYXBUdXBsZUhlYWRlciB0ZDsKLS0tIDQ4OCw0OTYg LS0tLQogIAogIC8qCiAgICogVHVybiBhIGNvbXBvc2l0ZSAvIHJlY29yZCBpbnRvIEpTT04u CisgICogRXhwb3J0ZWQgc28gQ09QWSBUTyBjYW4gdXNlIGl0LgogICAqLwohIHZvaWQKICBj b21wb3NpdGVfdG9fanNvbihEYXR1bSBjb21wb3NpdGUsIFN0cmluZ0luZm8gcmVzdWx0LCBi b29sIHVzZV9saW5lX2ZlZWRzKQogIHsKICAJSGVhcFR1cGxlSGVhZGVyIHRkOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oIGIvc3JjL2luY2x1ZGUvY29tbWFu ZHMvY29weS5oCmluZGV4IGYyY2NhMGIuLjk3ODk5YjYgMTAwNjQ0CioqKiBhL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2NvcHkuaAotLS0gYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmgK KioqKioqKioqKioqKioqIHR5cGVkZWYgc3RydWN0IENvcHlGb3JtYXRPcHRpb25zCioqKiA0 Myw0OCAqKioqCi0tLSA0Myw0OSAtLS0tCiAgCWJvb2wJCWJpbmFyeTsJCQkvKiBiaW5hcnkg Zm9ybWF0PyAqLwogIAlib29sCQlmcmVlemU7CQkJLyogZnJlZXplIHJvd3Mgb24gbG9hZGlu Zz8gKi8KICAJYm9vbAkJY3N2X21vZGU7CQkvKiBDb21tYSBTZXBhcmF0ZWQgVmFsdWUgZm9y bWF0PyAqLworIAlib29sCQlqc29uX21vZGU7CQkvKiBKU09OIGZvcm1hdD8gKi8KICAJQ29w eUhlYWRlckNob2ljZSBoZWFkZXJfbGluZTsJLyogaGVhZGVyIGxpbmU/ICovCiAgCWNoYXIJ ICAgKm51bGxfcHJpbnQ7CQkvKiBOVUxMIG1hcmtlciBzdHJpbmcgKHNlcnZlciBlbmNvZGlu ZyEpICovCiAgCWludAkJCW51bGxfcHJpbnRfbGVuOyAvKiBsZW5ndGggb2Ygc2FtZSAqLwoq KioqKioqKioqKioqKiogdHlwZWRlZiBzdHJ1Y3QgQ29weUZvcm1hdE9wdGlvbnMKKioqIDYx LDY2ICoqKioKLS0tIDYyLDY4IC0tLS0KICAJTGlzdAkgICAqZm9yY2VfbnVsbDsJCS8qIGxp c3Qgb2YgY29sdW1uIG5hbWVzICovCiAgCWJvb2wJCWZvcmNlX251bGxfYWxsOyAvKiBGT1JD RV9OVUxMICo/ICovCiAgCWJvb2wJICAgKmZvcmNlX251bGxfZmxhZ3M7CS8qIHBlci1jb2x1 bW4gQ1NWIEZOIGZsYWdzICovCisgCWJvb2wJCWZvcmNlX2FycmF5OwkvKiBhZGQgSlNPTiBh cnJheSBkZWNvcmF0aW9ucyAqLwogIAlib29sCQljb252ZXJ0X3NlbGVjdGl2ZWx5OwkvKiBk byBzZWxlY3RpdmUgYmluYXJ5IGNvbnZlcnNpb24/ICovCiAgCUxpc3QJICAgKmNvbnZlcnRf c2VsZWN0OyAvKiBsaXN0IG9mIGNvbHVtbiBuYW1lcyAoY2FuIGJlIE5JTCkgKi8KICB9IENv cHlGb3JtYXRPcHRpb25zOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbi5o IGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbi5oCmluZGV4IGYwN2U4MmMuLmJhZGM1YTYgMTAw NjQ0CioqKiBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb24uaAotLS0gYi9zcmMvaW5jbHVkZS91 dGlscy9qc29uLmgKKioqKioqKioqKioqKioqCioqKiAxNywyMiAqKioqCi0tLSAxNywyNCAt LS0tCiAgI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCiAgCiAgLyogZnVuY3Rpb25zIGlu IGpzb24uYyAqLworIGV4dGVybiB2b2lkIGNvbXBvc2l0ZV90b19qc29uKERhdHVtIGNvbXBv c2l0ZSwgU3RyaW5nSW5mbyByZXN1bHQsCisgCQkJCQkJCSAgYm9vbCB1c2VfbGluZV9mZWVk cyk7CiAgZXh0ZXJuIHZvaWQgZXNjYXBlX2pzb24oU3RyaW5nSW5mbyBidWYsIGNvbnN0IGNo YXIgKnN0cik7CiAgZXh0ZXJuIGNoYXIgKkpzb25FbmNvZGVEYXRlVGltZShjaGFyICpidWYs IERhdHVtIHZhbHVlLCBPaWQgdHlwaWQsCiAgCQkJCQkJCQljb25zdCBpbnQgKnR6cCk7CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Lm91dAppbmRleCBiNDgzNjVlLi4zMTkxM2Y2IDEw MDY0NAoqKiogYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0Ci0tLSBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weS5vdXQKKioqKioqKioqKioqKioqIGNvcHkg Y29weXRlc3QzIHRvIHN0ZG91dCBjc3YgaGVhZGVyOwoqKiogNDIsNDcgKioqKgotLS0gNDIs MTE3IC0tLS0KICBjMSwiY29sIHdpdGggLCBjb21tYSIsImNvbCB3aXRoICIiIHF1b3RlIgog IDEsYSwxCiAgMixiLDIKKyAtLS0gdGVzdCBjb3B5aW5nIGluIEpTT04gbW9kZSB3aXRoIHZh cmlvdXMgc3R5bGVzCisgY29weSBjb3B5dGVzdCB0byBzdGRvdXQganNvbjsKKyB7InN0eWxl IjoiRE9TIiwidGVzdCI6ImFiY1xyXG5kZWYiLCJmaWxsZXIiOjF9CisgeyJzdHlsZSI6IlVu aXgiLCJ0ZXN0IjoiYWJjXG5kZWYiLCJmaWxsZXIiOjJ9CisgeyJzdHlsZSI6Ik1hYyIsInRl c3QiOiJhYmNccmRlZiIsImZpbGxlciI6M30KKyB7InN0eWxlIjoiZXNjXFxhcGUiLCJ0ZXN0 IjoiYVxcclxcXHJcXFxuXFxuYiIsImZpbGxlciI6NH0KKyBjb3B5IGNvcHl0ZXN0IHRvIHN0 ZG91dCAoZm9ybWF0IGpzb24pOworIHsic3R5bGUiOiJET1MiLCJ0ZXN0IjoiYWJjXHJcbmRl ZiIsImZpbGxlciI6MX0KKyB7InN0eWxlIjoiVW5peCIsInRlc3QiOiJhYmNcbmRlZiIsImZp bGxlciI6Mn0KKyB7InN0eWxlIjoiTWFjIiwidGVzdCI6ImFiY1xyZGVmIiwiZmlsbGVyIjoz fQorIHsic3R5bGUiOiJlc2NcXGFwZSIsInRlc3QiOiJhXFxyXFxcclxcXG5cXG5iIiwiZmls bGVyIjo0fQorIGNvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZm9yY2Vf YXJyYXkpOworIFsKKyAgeyJzdHlsZSI6IkRPUyIsInRlc3QiOiJhYmNcclxuZGVmIiwiZmls bGVyIjoxfQorICx7InN0eWxlIjoiVW5peCIsInRlc3QiOiJhYmNcbmRlZiIsImZpbGxlciI6 Mn0KKyAseyJzdHlsZSI6Ik1hYyIsInRlc3QiOiJhYmNccmRlZiIsImZpbGxlciI6M30KKyAs eyJzdHlsZSI6ImVzY1xcYXBlIiwidGVzdCI6ImFcXHJcXFxyXFxcblxcbmIiLCJmaWxsZXIi OjR9CisgXQorIGNvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZm9yY2Vf YXJyYXkgdHJ1ZSk7CisgWworICB7InN0eWxlIjoiRE9TIiwidGVzdCI6ImFiY1xyXG5kZWYi LCJmaWxsZXIiOjF9CisgLHsic3R5bGUiOiJVbml4IiwidGVzdCI6ImFiY1xuZGVmIiwiZmls bGVyIjoyfQorICx7InN0eWxlIjoiTWFjIiwidGVzdCI6ImFiY1xyZGVmIiwiZmlsbGVyIjoz fQorICx7InN0eWxlIjoiZXNjXFxhcGUiLCJ0ZXN0IjoiYVxcclxcXHJcXFxuXFxuYiIsImZp bGxlciI6NH0KKyBdCisgY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBm b3JjZV9hcnJheSBmYWxzZSk7CisgeyJzdHlsZSI6IkRPUyIsInRlc3QiOiJhYmNcclxuZGVm IiwiZmlsbGVyIjoxfQorIHsic3R5bGUiOiJVbml4IiwidGVzdCI6ImFiY1xuZGVmIiwiZmls bGVyIjoyfQorIHsic3R5bGUiOiJNYWMiLCJ0ZXN0IjoiYWJjXHJkZWYiLCJmaWxsZXIiOjN9 CisgeyJzdHlsZSI6ImVzY1xcYXBlIiwidGVzdCI6ImFcXHJcXFxyXFxcblxcbmIiLCJmaWxs ZXIiOjR9CisgLS0gRXJyb3IKKyBjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpz b24sIGhlYWRlcik7CisgRVJST1I6ICBjYW5ub3Qgc3BlY2lmeSBIRUFERVIgaW4gSlNPTiBt b2RlCisgLS0gZW1iZWRkZWQgZXNjYXBlZCBjaGFyYWN0ZXJzCisgY3JlYXRlIHRlbXAgdGFi bGUgY29weWpzb250ZXN0ICgKKyAgICAgaWQgYmlnc2VyaWFsLAorICAgICBmMSB0ZXh0LAor ICAgICBmMiB0aW1lc3RhbXB0eik7CisgaW5zZXJ0IGludG8gY29weWpzb250ZXN0CisgICBz ZWxlY3QgZy5pLAorICAgICAgICAgIENBU0UgV0hFTiBnLmkgJSAyID0gMCBUSEVOCisgICAg ICAgICAgICAnbGluZSB3aXRoICcnIGluIGl0OiAnIHx8IGcuaTo6dGV4dAorICAgICAgICAg IEVMU0UKKyAgICAgICAgICAgICdsaW5lIHdpdGggIiBpbiBpdDogJyB8fCBnLmk6OnRleHQK KyAgICAgICAgICBFTkQsCisgICAgICAgICAgJ01vbiBGZWIgMTAgMTc6MzI6MDEgMTk5NyBQ U1QnCisgICBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDUpIGFzIGcoaSk7CisgaW5zZXJ0IGlu dG8gY29weWpzb250ZXN0IChmMSkgdmFsdWVzCisgKEUnYWFhXCJiYmInOjp0ZXh0KSwKKyAo RSdhYWFcXGJiYic6OnRleHQpLAorIChFJ2FhYVwvYmJiJzo6dGV4dCksCisgKEUnYWFhXGJi YmInOjp0ZXh0KSwKKyAoRSdhYWFcZmJiYic6OnRleHQpLAorIChFJ2FhYVxuYmJiJzo6dGV4 dCksCisgKEUnYWFhXHJiYmInOjp0ZXh0KSwKKyAoRSdhYWFcdGJiYic6OnRleHQpOworIGNv cHkgY29weWpzb250ZXN0IHRvIHN0ZG91dCBqc29uOworIHsiaWQiOjEsImYxIjoibGluZSB3 aXRoIFwiIGluIGl0OiAxIiwiZjIiOiIxOTk3LTAyLTEwVDE3OjMyOjAxLTA4OjAwIn0KKyB7 ImlkIjoyLCJmMSI6ImxpbmUgd2l0aCAnIGluIGl0OiAyIiwiZjIiOiIxOTk3LTAyLTEwVDE3 OjMyOjAxLTA4OjAwIn0KKyB7ImlkIjozLCJmMSI6ImxpbmUgd2l0aCBcIiBpbiBpdDogMyIs ImYyIjoiMTk5Ny0wMi0xMFQxNzozMjowMS0wODowMCJ9CisgeyJpZCI6NCwiZjEiOiJsaW5l IHdpdGggJyBpbiBpdDogNCIsImYyIjoiMTk5Ny0wMi0xMFQxNzozMjowMS0wODowMCJ9Cisg eyJpZCI6NSwiZjEiOiJsaW5lIHdpdGggXCIgaW4gaXQ6IDUiLCJmMiI6IjE5OTctMDItMTBU MTc6MzI6MDEtMDg6MDAifQorIHsiaWQiOjEsImYxIjoiYWFhXCJiYmIiLCJmMiI6bnVsbH0K KyB7ImlkIjoyLCJmMSI6ImFhYVxcYmJiIiwiZjIiOm51bGx9CisgeyJpZCI6MywiZjEiOiJh YWEvYmJiIiwiZjIiOm51bGx9CisgeyJpZCI6NCwiZjEiOiJhYWFcYmJiYiIsImYyIjpudWxs fQorIHsiaWQiOjUsImYxIjoiYWFhXGZiYmIiLCJmMiI6bnVsbH0KKyB7ImlkIjo2LCJmMSI6 ImFhYVxuYmJiIiwiZjIiOm51bGx9CisgeyJpZCI6NywiZjEiOiJhYWFccmJiYiIsImYyIjpu dWxsfQorIHsiaWQiOjgsImYxIjoiYWFhXHRiYmIiLCJmMiI6bnVsbH0KICBjcmVhdGUgdGVt cCB0YWJsZSBjb3B5dGVzdDQgKAogIAljMSBpbnQsCiAgCSJjb2xuYW1lIHdpdGggdGFiOiAJ IiB0ZXh0KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkuc3FsIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwKaW5kZXggNDNkMmU5MC4uNGI3NjU0MSAx MDA2NDQKKioqIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwKLS0tIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvY29weS5zcWwKKioqKioqKioqKioqKioqIHRoaXMgaXMganVzdCBh IGxpbmUgZnVsbCBvZiBqdW5rIHRoYXQgd28KKioqIDU0LDU5ICoqKioKLS0tIDU0LDEwMSAt LS0tCiAgCiAgY29weSBjb3B5dGVzdDMgdG8gc3Rkb3V0IGNzdiBoZWFkZXI7CiAgCisgLS0t IHRlc3QgY29weWluZyBpbiBKU09OIG1vZGUgd2l0aCB2YXJpb3VzIHN0eWxlcworIGNvcHkg Y29weXRlc3QgdG8gc3Rkb3V0IGpzb247CisgCisgY29weSBjb3B5dGVzdCB0byBzdGRvdXQg KGZvcm1hdCBqc29uKTsKKyAKKyBjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpz b24sIGZvcmNlX2FycmF5KTsKKyAKKyBjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0 IGpzb24sIGZvcmNlX2FycmF5IHRydWUpOworIAorIGNvcHkgY29weXRlc3QgdG8gc3Rkb3V0 IChmb3JtYXQganNvbiwgZm9yY2VfYXJyYXkgZmFsc2UpOworIAorIC0tIEVycm9yCisgY29w eSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBoZWFkZXIpOworIAorIC0tIGVt YmVkZGVkIGVzY2FwZWQgY2hhcmFjdGVycworIGNyZWF0ZSB0ZW1wIHRhYmxlIGNvcHlqc29u dGVzdCAoCisgICAgIGlkIGJpZ3NlcmlhbCwKKyAgICAgZjEgdGV4dCwKKyAgICAgZjIgdGlt ZXN0YW1wdHopOworIAorIGluc2VydCBpbnRvIGNvcHlqc29udGVzdAorICAgc2VsZWN0IGcu aSwKKyAgICAgICAgICBDQVNFIFdIRU4gZy5pICUgMiA9IDAgVEhFTgorICAgICAgICAgICAg J2xpbmUgd2l0aCAnJyBpbiBpdDogJyB8fCBnLmk6OnRleHQKKyAgICAgICAgICBFTFNFCisg ICAgICAgICAgICAnbGluZSB3aXRoICIgaW4gaXQ6ICcgfHwgZy5pOjp0ZXh0CisgICAgICAg ICAgRU5ELAorICAgICAgICAgICdNb24gRmViIDEwIDE3OjMyOjAxIDE5OTcgUFNUJworICAg ZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSw1KSBhcyBnKGkpOworIAorIGluc2VydCBpbnRvIGNv cHlqc29udGVzdCAoZjEpIHZhbHVlcworIChFJ2FhYVwiYmJiJzo6dGV4dCksCisgKEUnYWFh XFxiYmInOjp0ZXh0KSwKKyAoRSdhYWFcL2JiYic6OnRleHQpLAorIChFJ2FhYVxiYmJiJzo6 dGV4dCksCisgKEUnYWFhXGZiYmInOjp0ZXh0KSwKKyAoRSdhYWFcbmJiYic6OnRleHQpLAor IChFJ2FhYVxyYmJiJzo6dGV4dCksCisgKEUnYWFhXHRiYmInOjp0ZXh0KTsKKyAKKyBjb3B5 IGNvcHlqc29udGVzdCB0byBzdGRvdXQganNvbjsKKyAKICBjcmVhdGUgdGVtcCB0YWJsZSBj b3B5dGVzdDQgKAogIAljMSBpbnQsCiAgCSJjb2xuYW1lIHdpdGggdGFiOiAJIiB0ZXh0KTsK --------------SGrNREuf3qBLjGTH9p7vRXQu--