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 1rAB9E-005CVq-VQ for pgsql-hackers@arkaria.postgresql.org; Mon, 04 Dec 2023 15:46:17 +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 1rAB9D-0002JT-G3 for pgsql-hackers@arkaria.postgresql.org; Mon, 04 Dec 2023 15:46:15 +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 1rAB9C-0002JK-KC for pgsql-hackers@lists.postgresql.org; Mon, 04 Dec 2023 15:46:15 +0000 Received: from mail-yw1-x1130.google.com ([2607:f8b0:4864:20::1130]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rAB8y-008luH-Jx for pgsql-hackers@postgresql.org; Mon, 04 Dec 2023 15:46:13 +0000 Received: by mail-yw1-x1130.google.com with SMTP id 00721157ae682-5cfc3a48ab2so47992557b3.0 for ; Mon, 04 Dec 2023 07:46:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joeconway.com; s=google; t=1701704759; x=1702309559; 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=c+NMMrnzYPhKV5PdW7HNYw3JXsDXxdiX0xE5LMflt+s=; b=AcQ533mePX1JyAT8ZOourRTwoHcbOxTZlmttaDKKaC7MAI3eK3T2ykd7LBOKhtZaaX F9K7G+oq2izdGevrdCyNwc5dLVSIHPtHlEJX2LJHm8N9vMygG7+hlUNwaZtFm2PKK3Fc 6cVKsbYxE71lQ3EjVzt1kQXChO/+9U4uDVER2UoZBSKsl6GB/8PkWTsxlICPvUPeo2aP FHskohSLUNX7oaI7Llb/+haHwvwn5abs6liCpF1HBQkB5eZnkK9XxaxB8QgvkfXimhnH t5uqYgr1PsRjdPhwBVxfCYhAFNIzZriWy4IakSzsYbMJBrIYpRxeRP4Q1Tcd+8jJqYFP 9WrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701704759; x=1702309559; 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=c+NMMrnzYPhKV5PdW7HNYw3JXsDXxdiX0xE5LMflt+s=; b=qr4JgxuF7z+5h4GiuOM6jb/EgnZSCgS/SbgzZ0Bjl39BgIIAYmQuRpnM8Cos2bkF+d 0KRAdij036FBrI/zyxZkUILCO53X1CW8u8jaiLfuezgYis6iIbPDFgwUPfyG1cqOhJpg lwuGZGkUkpEqWINF49Am6sKkEGPrIbK+mT9vzThGn5VMyo+Sk5UQp1oFrOYtFqQYhxNV thoccigXL16j3ZVN8i9dHF30HtfkA7XbgrrUOh2Gbk53RxUAU2XXTqB18djuEnIVKWO4 p16WV9LMNzeh7xIMOaz9h36oSltWZLNQipYXYFdD3agDkBo9ah47zwnrGvu5sC77saZy 2qoQ== X-Gm-Message-State: AOJu0YxtFNd9cUq25zbJv8u4kaLZSE5yKyd9MJlVNibFYOiTp/OnsN5y dt1dfnqm1sQR9JFxxMkmGb4fLA== X-Google-Smtp-Source: AGHT+IE0kOPQEZX0uEVWtDYNdaVKMGz/jICiS0pcc7wT1LugopFvsv+bS0pMxt7TMTApuMVKmJ5yEw== X-Received: by 2002:a81:f00a:0:b0:5d8:1ab2:a9be with SMTP id p10-20020a81f00a000000b005d81ab2a9bemr1620375ywm.6.1701704759374; Mon, 04 Dec 2023 07:45:59 -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 l6-20020a0dc906000000b005add997ae53sm2439511ywd.81.2023.12.04.07.45.58 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 04 Dec 2023 07:45:58 -0800 (PST) Content-Type: multipart/mixed; boundary="------------wz0cnWv0MX4VjSp70LjZlFwR" Message-ID: Date: Mon, 4 Dec 2023 10:45:58 -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: <3853387.1701096982@sss.pgh.pa.us> <3a98decf-3fe3-4b49-9b68-fda01338872c@sedlakovi.org> <24e3ee88-ec1e-421b-89ae-8a47ee0d2df1@joeconway.com> <7117a356-916c-4cf3-bad8-861490e65dcf@joeconway.com> <9c77b6fa-ee88-b2e6-0fa7-4fc81721da35@dunslane.net> <41dcba92-1075-e5e5-cb99-36711abf6cec@dunslane.net> From: Joe Conway Autocrypt: addr=mail@joeconway.com; keydata= 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 In-Reply-To: <41dcba92-1075-e5e5-cb99-36711abf6cec@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. --------------wz0cnWv0MX4VjSp70LjZlFwR Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 12/4/23 09:25, Andrew Dunstan wrote: > > On 2023-12-04 Mo 08:37, Joe Conway wrote: >> On 12/4/23 07:41, Andrew Dunstan wrote: >>> >>> On 2023-12-03 Su 20:14, Joe Conway wrote: >>>> (please don't top quote on the Postgres lists) >>>> >>>> On 12/3/23 17:38, Davin Shearer wrote: >>>>> " being quoted as \\" breaks the JSON. It needs to be \".  This has >>>>> been my whole problem with COPY TO for JSON. >>>>> >>>>> Please validate that the output is in proper format with correct >>>>> quoting for special characters. I use `jq` on the command line to >>>>> validate and format the output. >>>> >>>> I just hooked existing "row-to-json machinery" up to the "COPY TO" >>>> statement. If the output is wrong (just for for this use case?), >>>> that would be a missing feature (or possibly a bug?). >>>> >>>> Davin -- how did you work around the issue with the way the built in >>>> functions output JSON? >>>> >>>> Andrew -- comments/thoughts? >>> >>> I meant to mention this when I was making comments yesterday. >>> >>> The patch should not be using CopyAttributeOutText - it will try to >>> escape characters such as \, which produces the effect complained of >>> here, or else we need to change its setup so we have a way to inhibit >>> that escaping. >> >> >> Interesting. >> >> I am surprised this has never been raised as a problem with COPY TO >> before. >> >> Should the JSON output, as produced by composite_to_json(), be sent >> as-is with no escaping at all? If yes, is JSON somehow unique in this >> regard? > > > Text mode output is in such a form that it can be read back in using > text mode input. There's nothing special about JSON in this respect - > any text field will be escaped too. But output suitable for text mode > input is not what you're trying to produce here; you're trying to > produce valid JSON. > > So, yes, the result of composite_to_json, which is already suitably > escaped, should not be further escaped in this case. Gotcha. This patch version uses CopySendData() instead and includes documentation changes. Still lacks regression tests. Hopefully this looks better. Any other particular strings I ought to test with? 8<------------------ test=# copy (select * from foo limit 4) to stdout (format json, force_array true); [ {"id":1,"f1":"line with \" in it: 1","f2":"2023-12-03T12:26:41.596053-05:00"} ,{"id":2,"f1":"line with ' in it: 2","f2":"2023-12-03T12:26:41.596173-05:00"} ,{"id":3,"f1":"line with \" in it: 3","f2":"2023-12-03T12:26:41.596179-05:00"} ,{"id":4,"f1":"line with ' in it: 4","f2":"2023-12-03T12:26:41.596182-05:00"} ] 8<------------------ -- Joe Conway PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --------------wz0cnWv0MX4VjSp70LjZlFwR Content-Type: text/x-patch; charset=UTF-8; name="copyto_json.003.diff" Content-Disposition: attachment; filename="copyto_json.003.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY29weS5zZ21sIGIvZG9jL3NyYy9zZ21s L3JlZi9jb3B5LnNnbWwKaW5kZXggMThlY2M2OS4uYWY4Nzc3YiAxMDA2NDQKKioqIGEvZG9j L3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKLS0tIGIvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNn bWwKKioqKioqKioqKioqKioqIENPUFkgeyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+dGEKKioqIDQzLDQ4ICoqKioKLS0tIDQzLDUwIC0tLS0KICAgICAgRk9SQ0VfUVVPVEUg eyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVwbGFj ZWFibGU+IFssIC4uLl0gKSB8ICogfQogICAgICBGT1JDRV9OT1RfTlVMTCB7ICggPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gWywg Li4uXSApIHwgKiB9CiAgICAgIEZPUkNFX05VTEwgeyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSB8ICogfQor ICAgICBGT1JDRV9BUlJBWSBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ib29s ZWFuPC9yZXBsYWNlYWJsZT4gXQorICAgICBGT1JDRV9ST1dfREVMSU1JVEVSIFsgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmJvb2xlYW48L3JlcGxhY2VhYmxlPiBdCiAgICAg IEVOQ09ESU5HICc8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZW5jb2RpbmdfbmFt ZTwvcmVwbGFjZWFibGU+JwogIDwvc3lub3BzaXM+CiAgIDwvcmVmc3lub3BzaXNkaXY+Cioq KioqKioqKioqKioqKiBDT1BZIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRh CioqKiAyMDYsMjE0ICoqKioKLS0tIDIwOCwyMjEgLS0tLQogICAgICAgIFNlbGVjdHMgdGhl IGRhdGEgZm9ybWF0IHRvIGJlIHJlYWQgb3Igd3JpdHRlbjoKICAgICAgICA8bGl0ZXJhbD50 ZXh0PC9saXRlcmFsPiwKICAgICAgICA8bGl0ZXJhbD5jc3Y8L2xpdGVyYWw+IChDb21tYSBT ZXBhcmF0ZWQgVmFsdWVzKSwKKyAgICAgICA8bGl0ZXJhbD5qc29uPC9saXRlcmFsPiAoSmF2 YVNjcmlwdCBPYmplY3QgTm90YXRpb24pLAogICAgICAgIG9yIDxsaXRlcmFsPmJpbmFyeTwv bGl0ZXJhbD4uCiAgICAgICAgVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+dGV4dDwvbGl0ZXJh bD4uCiAgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGUgPGxpdGVyYWw+ anNvbjwvbGl0ZXJhbD4gb3B0aW9uIGlzIGFsbG93ZWQgb25seSBpbgorICAgICAgIDxjb21t YW5kPkNPUFkgVE88L2NvbW1hbmQ+LgorICAgICAgPC9wYXJhPgogICAgICA8L2xpc3RpdGVt PgogICAgIDwvdmFybGlzdGVudHJ5PgogIAoqKioqKioqKioqKioqKiogQ09QWSB7IDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YQoqKiogMzcyLDM3NyAqKioqCi0tLSAzNzks NDEwIC0tLS0KICAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgICA8L3Zhcmxp c3RlbnRyeT4KKyAKKyAgICA8dmFybGlzdGVudHJ5PgorICAgICA8dGVybT48bGl0ZXJhbD5G T1JDRV9ST1dfREVMSU1JVEVSPC9saXRlcmFsPjwvdGVybT4KKyAgICAgPGxpc3RpdGVtPgor ICAgICAgPHBhcmE+CisgICAgICAgRm9yY2Ugb3V0cHV0IG9mIGNvbW1hcyBhcyByb3cgZGVs aW1pdGVycywgaW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsCisgICAgICAgZW5kIG9mIGxpbmUg Y2hhcmFjdGVycy4gVGhpcyBvcHRpb24gaXMgYWxsb3dlZCBvbmx5IGluCisgICAgICAgPGNv bW1hbmQ+Q09QWSBUTzwvY29tbWFuZD4sIGFuZCBvbmx5IHdoZW4gdXNpbmcKKyAgICAgICA8 bGl0ZXJhbD5KU09OPC9saXRlcmFsPiBmb3JtYXQuCisgICAgICAgVGhlIGRlZmF1bHQgaXMg PGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3Rp dGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAgIDx2YXJsaXN0ZW50cnk+CisgICAg IDx0ZXJtPjxsaXRlcmFsPkZPUkNFX0FSUkFZPC9saXRlcmFsPjwvdGVybT4KKyAgICAgPGxp c3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgRm9yY2Ugb3V0cHV0IG9mIGFycmF5IGRl Y29yYXRpb25zIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBvdXRwdXQuCisgICAgICAg VGhpcyBvcHRpb24gaW1wbGllcyB0aGUgPGxpdGVyYWw+Rk9SQ0VfUk9XX0RFTElNSVRFUjwv bGl0ZXJhbD4KKyAgICAgICBvcHRpb24uIEl0IGlzIGFsbG93ZWQgb25seSBpbiA8Y29tbWFu ZD5DT1BZIFRPPC9jb21tYW5kPiwgYW5kIG9ubHkKKyAgICAgICB3aGVuIHVzaW5nIDxsaXRl cmFsPkpTT048L2xpdGVyYWw+IGZvcm1hdC4KKyAgICAgICBUaGUgZGVmYXVsdCBpcyA8bGl0 ZXJhbD5mYWxzZTwvbGl0ZXJhbD4uCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+ CisgICAgPC92YXJsaXN0ZW50cnk+CiAgCiAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRl cm0+PGxpdGVyYWw+RU5DT0RJTkc8L2xpdGVyYWw+PC90ZXJtPgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29weS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5j CmluZGV4IGNmYWQ0N2IuLjQ2ZWMzNGYgMTAwNjQ0CioqKiBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2NvcHkuYwotLS0gYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKKioqKioqKioq KioqKioqIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCioqKiA0NDMs NDQ4ICoqKioKLS0tIDQ0Myw0NTAgLS0tLQogIAkJCQkgLyogZGVmYXVsdCBmb3JtYXQgKi8g OwogIAkJCWVsc2UgaWYgKHN0cmNtcChmbXQsICJjc3YiKSA9PSAwKQogIAkJCQlvcHRzX291 dC0+Y3N2X21vZGUgPSB0cnVlOworIAkJCWVsc2UgaWYgKHN0cmNtcChmbXQsICJqc29uIikg PT0gMCkKKyAJCQkJb3B0c19vdXQtPmpzb25fbW9kZSA9IHRydWU7CiAgCQkJZWxzZSBpZiAo c3RyY21wKGZtdCwgImJpbmFyeSIpID09IDApCiAgCQkJCW9wdHNfb3V0LT5iaW5hcnkgPSB0 cnVlOwogIAkJCWVsc2UKKioqKioqKioqKioqKioqIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJz ZVN0YXRlICpwc3RhdGUsCioqKiA1NDAsNTQ1ICoqKioKLS0tIDU0Miw1NTkgLS0tLQogIAkJ CQkJCQkJZGVmZWwtPmRlZm5hbWUpLAogIAkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0 YXRlLCBkZWZlbC0+bG9jYXRpb24pKSk7CiAgCQl9CisgCQllbHNlIGlmIChzdHJjbXAoZGVm ZWwtPmRlZm5hbWUsICJmb3JjZV9yb3dfZGVsaW1pdGVyIikgPT0gMCkKKyAJCXsKKyAJCQlp ZiAob3B0c19vdXQtPmZvcmNlX3Jvd19kZWxpbWl0ZXIpCisgCQkJCWVycm9yQ29uZmxpY3Rp bmdEZWZFbGVtKGRlZmVsLCBwc3RhdGUpOworIAkJCW9wdHNfb3V0LT5mb3JjZV9yb3dfZGVs aW1pdGVyID0gdHJ1ZTsKKyAJCX0KKyAJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFt ZSwgImZvcmNlX2FycmF5IikgPT0gMCkKKyAJCXsKKyAJCQlpZiAob3B0c19vdXQtPmZvcmNl X2FycmF5KQorIAkJCQllcnJvckNvbmZsaWN0aW5nRGVmRWxlbShkZWZlbCwgcHN0YXRlKTsK KyAJCQlvcHRzX291dC0+Zm9yY2VfYXJyYXkgPSB0cnVlOworIAkJfQogIAkJZWxzZSBpZiAo c3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiY29udmVydF9zZWxlY3RpdmVseSIpID09IDApCiAg CQl7CiAgCQkJLyoKKioqKioqKioqKioqKioqIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0 YXRlICpwc3RhdGUsCioqKiA1OTgsNjAzICoqKioKLS0tIDYxMiw2MzYgLS0tLQogIAkJCQko ZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCiAgCQkJCSBlcnJtc2coImNhbm5vdCBz cGVjaWZ5IERFRkFVTFQgaW4gQklOQVJZIG1vZGUiKSkpOwogIAorIAlpZiAob3B0c19vdXQt Pmpzb25fbW9kZSkKKyAJeworIAkJaWYgKGlzX2Zyb20pCisgCQkJZXJlcG9ydChFUlJPUiwK KyAJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKyAJCQkJ CSBlcnJtc2coImNhbm5vdCB1c2UgSlNPTiBtb2RlIGluIENPUFkgRlJPTSIpKSk7CisgCisg CQlpZiAob3B0c19vdXQtPmZvcmNlX2FycmF5KQorIAkJCW9wdHNfb3V0LT5mb3JjZV9yb3df ZGVsaW1pdGVyID0gdHJ1ZTsKKyAJfQorIAllbHNlIGlmIChvcHRzX291dC0+Zm9yY2VfYXJy YXkpCisgCQllcmVwb3J0KEVSUk9SLAorIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVf Tk9UX1NVUFBPUlRFRCksCisgCQkJCSBlcnJtc2coIkNPUFkgRk9SQ0VfQVJSQVkgcmVxdWly ZXMgSlNPTiBtb2RlIikpKTsKKyAJZWxzZSBpZiAob3B0c19vdXQtPmZvcmNlX3Jvd19kZWxp bWl0ZXIpCisgCQllcmVwb3J0KEVSUk9SLAorIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRV UkVfTk9UX1NVUFBPUlRFRCksCisgCQkJCSBlcnJtc2coIkNPUFkgRk9SQ0VfUk9XX0RFTElN SVRFUiByZXF1aXJlcyBKU09OIG1vZGUiKSkpOworIAogIAkvKiBTZXQgZGVmYXVsdHMgZm9y IG9taXR0ZWQgb3B0aW9ucyAqLwogIAlpZiAoIW9wdHNfb3V0LT5kZWxpbSkKICAJCW9wdHNf b3V0LT5kZWxpbSA9IG9wdHNfb3V0LT5jc3ZfbW9kZSA/ICIsIiA6ICJcdCI7CioqKioqKioq KioqKioqKiBQcm9jZXNzQ29weU9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAoqKiogNjY3 LDY3MiAqKioqCi0tLSA3MDAsNzEwIC0tLS0KICAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAogIAkJCQkgZXJybXNnKCJjYW5ub3Qgc3BlY2lmeSBIRUFE RVIgaW4gQklOQVJZIG1vZGUiKSkpOwogIAorIAlpZiAob3B0c19vdXQtPmpzb25fbW9kZSAm JiBvcHRzX291dC0+aGVhZGVyX2xpbmUpCisgCQllcmVwb3J0KEVSUk9SLAorIAkJCQkoZXJy Y29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisgCQkJCSBlcnJtc2coImNh bm5vdCBzcGVjaWZ5IEhFQURFUiBpbiBKU09OIG1vZGUiKSkpOworIAogIAkvKiBDaGVjayBx dW90ZSAqLwogIAlpZiAoIW9wdHNfb3V0LT5jc3ZfbW9kZSAmJiBvcHRzX291dC0+cXVvdGUg IT0gTlVMTCkKICAJCWVyZXBvcnQoRVJST1IsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9jb3B5dG8uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCmluZGV4 IGM2NmEwNDcuLmZiYTMwNzAgMTAwNjQ0CioqKiBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Nv cHl0by5jCi0tLSBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCioqKioqKioqKioq KioqKgoqKiogMzcsNDIgKioqKgotLS0gMzcsNDMgLS0tLQogICNpbmNsdWRlICJyZXdyaXRl L3Jld3JpdGVIYW5kbGVyLmgiCiAgI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICAjaW5jbHVk ZSAidGNvcC90Y29wcHJvdC5oIgorICNpbmNsdWRlICJ1dGlscy9qc29uLmgiCiAgI2luY2x1 ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgog ICNpbmNsdWRlICJ1dGlscy9wYXJ0Y2FjaGUuaCIKKioqKioqKioqKioqKioqIHR5cGVkZWYg c3RydWN0CioqKiAxMTIsMTE3ICoqKioKLS0tIDExMywxMjAgLS0tLQogIC8qIE5PVEU6IHRo ZXJlJ3MgYSBjb3B5IG9mIHRoaXMgaW4gY29weWZyb21wYXJzZS5jICovCiAgc3RhdGljIGNv bnN0IGNoYXIgQmluYXJ5U2lnbmF0dXJlWzExXSA9ICJQR0NPUFlcblwzNzdcclxuXDAiOwog IAorIC8qIG5lZWQgZGVsaW1pdGVyIHRvIHN0YXJ0IG5leHQganNvbiBhcnJheSBlbGVtZW50 ICovCisgc3RhdGljIGJvb2wganNvbl9yb3dfZGVsaW1fbmVlZGVkID0gZmFsc2U7CiAgCiAg Lyogbm9uLWV4cG9ydCBmdW5jdGlvbiBwcm90b3R5cGVzICovCiAgc3RhdGljIHZvaWQgRW5k Q29weShDb3B5VG9TdGF0ZSBjc3RhdGUpOwoqKioqKioqKioqKioqKiogRG9Db3B5VG8oQ29w eVRvU3RhdGUgY3N0YXRlKQoqKiogODQ1LDg1MCAqKioqCi0tLSA4NDgsODY3IC0tLS0KICAK ICAJCQlDb3B5U2VuZEVuZE9mUm93KGNzdGF0ZSk7CiAgCQl9CisgCisgCQkvKgorIAkJICog SWYgSlNPTiBoYXMgYmVlbiByZXF1ZXN0ZWQsIGFuZCBGT1JDRV9BUlJBWSBoYXMgYmVlbiBz cGVjaWZpZWQKKyAJCSAqIHNlbmQgdGhlIG9wZW5pbmcgYnJhY2tldC4KKyAJCSAqLworIAkJ aWYgKGNzdGF0ZS0+b3B0cy5qc29uX21vZGUpCisgCQl7CisgCQkJaWYgKGNzdGF0ZS0+b3B0 cy5mb3JjZV9hcnJheSkKKyAJCQl7CisgCQkJCUNvcHlTZW5kQ2hhcihjc3RhdGUsICdbJyk7 CisgCQkJCUNvcHlTZW5kRW5kT2ZSb3coY3N0YXRlKTsKKyAJCQl9CisgCQkJanNvbl9yb3df ZGVsaW1fbmVlZGVkID0gZmFsc2U7CisgCQl9CiAgCX0KICAKICAJaWYgKGNzdGF0ZS0+cmVs KQoqKioqKioqKioqKioqKiogRG9Db3B5VG8oQ29weVRvU3RhdGUgY3N0YXRlKQoqKiogODky LDg5NyAqKioqCi0tLSA5MDksOTI1IC0tLS0KICAJCUNvcHlTZW5kRW5kT2ZSb3coY3N0YXRl KTsKICAJfQogIAorIAkvKgorIAkgKiBJZiBKU09OIGhhcyBiZWVuIHJlcXVlc3RlZCwgYW5k IEZPUkNFX0FSUkFZIGhhcyBiZWVuIHNwZWNpZmllZAorIAkgKiBzZW5kIHRoZSBjbG9zaW5n IGJyYWNrZXQuCisgCSAqLworIAlpZiAoY3N0YXRlLT5vcHRzLmpzb25fbW9kZSAmJgorIAkJ Y3N0YXRlLT5vcHRzLmZvcmNlX2FycmF5KQorIAl7CisgCQlDb3B5U2VuZENoYXIoY3N0YXRl LCAnXScpOworIAkJQ29weVNlbmRFbmRPZlJvdyhjc3RhdGUpOworIAl9CisgCiAgCU1lbW9y eUNvbnRleHREZWxldGUoY3N0YXRlLT5yb3djb250ZXh0KTsKICAKICAJaWYgKGZlX2NvcHkp CioqKioqKioqKioqKioqKiBEb0NvcHlUbyhDb3B5VG9TdGF0ZSBjc3RhdGUpCioqKiA5MDYs OTE2ICoqKioKICBzdGF0aWMgdm9pZAogIENvcHlPbmVSb3dUbyhDb3B5VG9TdGF0ZSBjc3Rh dGUsIFR1cGxlVGFibGVTbG90ICpzbG90KQogIHsKLSAJYm9vbAkJbmVlZF9kZWxpbSA9IGZh bHNlOwotIAlGbWdySW5mbyAgICpvdXRfZnVuY3Rpb25zID0gY3N0YXRlLT5vdXRfZnVuY3Rp b25zOwogIAlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7Ci0gCUxpc3RDZWxsICAgKmN1cjsK LSAJY2hhcgkgICAqc3RyaW5nOwogIAogIAlNZW1vcnlDb250ZXh0UmVzZXQoY3N0YXRlLT5y b3djb250ZXh0KTsKICAJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjc3Rh dGUtPnJvd2NvbnRleHQpOwotLS0gOTM0LDk0MCAtLS0tCioqKioqKioqKioqKioqKiBDb3B5 T25lUm93VG8oQ29weVRvU3RhdGUgY3N0YXRlLCBUdXBsZVRhCioqKiA5MjEsOTc0ICoqKioK ICAJCUNvcHlTZW5kSW50MTYoY3N0YXRlLCBsaXN0X2xlbmd0aChjc3RhdGUtPmF0dG51bWxp c3QpKTsKICAJfQogIAohIAkvKiBNYWtlIHN1cmUgdGhlIHR1cGxlIGlzIGZ1bGx5IGRlY29u c3RydWN0ZWQgKi8KISAJc2xvdF9nZXRhbGxhdHRycyhzbG90KTsKISAKISAJZm9yZWFjaChj dXIsIGNzdGF0ZS0+YXR0bnVtbGlzdCkKICAJewohIAkJaW50CQkJYXR0bnVtID0gbGZpcnN0 X2ludChjdXIpOwohIAkJRGF0dW0JCXZhbHVlID0gc2xvdC0+dHRzX3ZhbHVlc1thdHRudW0g LSAxXTsKISAJCWJvb2wJCWlzbnVsbCA9IHNsb3QtPnR0c19pc251bGxbYXR0bnVtIC0gMV07 CiAgCiEgCQlpZiAoIWNzdGF0ZS0+b3B0cy5iaW5hcnkpCiEgCQl7CiEgCQkJaWYgKG5lZWRf ZGVsaW0pCiEgCQkJCUNvcHlTZW5kQ2hhcihjc3RhdGUsIGNzdGF0ZS0+b3B0cy5kZWxpbVsw XSk7CiEgCQkJbmVlZF9kZWxpbSA9IHRydWU7CiEgCQl9CiAgCiEgCQlpZiAoaXNudWxsKQoh IAkJewohIAkJCWlmICghY3N0YXRlLT5vcHRzLmJpbmFyeSkKISAJCQkJQ29weVNlbmRTdHJp bmcoY3N0YXRlLCBjc3RhdGUtPm9wdHMubnVsbF9wcmludF9jbGllbnQpOwohIAkJCWVsc2UK ISAJCQkJQ29weVNlbmRJbnQzMihjc3RhdGUsIC0xKTsKISAJCX0KISAJCWVsc2UKICAJCXsK ICAJCQlpZiAoIWNzdGF0ZS0+b3B0cy5iaW5hcnkpCiAgCQkJewohIAkJCQlzdHJpbmcgPSBP dXRwdXRGdW5jdGlvbkNhbGwoJm91dF9mdW5jdGlvbnNbYXR0bnVtIC0gMV0sCiEgCQkJCQkJ CQkJCQl2YWx1ZSk7CiEgCQkJCWlmIChjc3RhdGUtPm9wdHMuY3N2X21vZGUpCiEgCQkJCQlD b3B5QXR0cmlidXRlT3V0Q1NWKGNzdGF0ZSwgc3RyaW5nLAohIAkJCQkJCQkJCQljc3RhdGUt Pm9wdHMuZm9yY2VfcXVvdGVfZmxhZ3NbYXR0bnVtIC0gMV0sCiEgCQkJCQkJCQkJCWxpc3Rf bGVuZ3RoKGNzdGF0ZS0+YXR0bnVtbGlzdCkgPT0gMSk7CiAgCQkJCWVsc2UKISAJCQkJCUNv cHlBdHRyaWJ1dGVPdXRUZXh0KGNzdGF0ZSwgc3RyaW5nKTsKICAJCQl9CiAgCQkJZWxzZQog IAkJCXsKISAJCQkJYnl0ZWEJICAgKm91dHB1dGJ5dGVzOwogIAohIAkJCQlvdXRwdXRieXRl cyA9IFNlbmRGdW5jdGlvbkNhbGwoJm91dF9mdW5jdGlvbnNbYXR0bnVtIC0gMV0sCiEgCQkJ CQkJCQkJCQkgICB2YWx1ZSk7CiEgCQkJCUNvcHlTZW5kSW50MzIoY3N0YXRlLCBWQVJTSVpF KG91dHB1dGJ5dGVzKSAtIFZBUkhEUlNaKTsKISAJCQkJQ29weVNlbmREYXRhKGNzdGF0ZSwg VkFSREFUQShvdXRwdXRieXRlcyksCiEgCQkJCQkJCSBWQVJTSVpFKG91dHB1dGJ5dGVzKSAt IFZBUkhEUlNaKTsKICAJCQl9CiAgCQl9CiAgCX0KICAKICAJQ29weVNlbmRFbmRPZlJvdyhj c3RhdGUpOwogIAotLS0gOTQ1LDEwMjggLS0tLQogIAkJQ29weVNlbmRJbnQxNihjc3RhdGUs IGxpc3RfbGVuZ3RoKGNzdGF0ZS0+YXR0bnVtbGlzdCkpOwogIAl9CiAgCiEgCWlmICghY3N0 YXRlLT5vcHRzLmpzb25fbW9kZSkKICAJewohIAkJYm9vbAkJbmVlZF9kZWxpbSA9IGZhbHNl OwohIAkJRm1nckluZm8gICAqb3V0X2Z1bmN0aW9ucyA9IGNzdGF0ZS0+b3V0X2Z1bmN0aW9u czsKISAJCUxpc3RDZWxsICAgKmN1cjsKISAJCWNoYXIJICAgKnN0cmluZzsKICAKISAJCS8q IE1ha2Ugc3VyZSB0aGUgdHVwbGUgaXMgZnVsbHkgZGVjb25zdHJ1Y3RlZCAqLwohIAkJc2xv dF9nZXRhbGxhdHRycyhzbG90KTsKICAKISAJCWZvcmVhY2goY3VyLCBjc3RhdGUtPmF0dG51 bWxpc3QpCiAgCQl7CisgCQkJaW50CQkJYXR0bnVtID0gbGZpcnN0X2ludChjdXIpOworIAkJ CURhdHVtCQl2YWx1ZSA9IHNsb3QtPnR0c192YWx1ZXNbYXR0bnVtIC0gMV07CisgCQkJYm9v bAkJaXNudWxsID0gc2xvdC0+dHRzX2lzbnVsbFthdHRudW0gLSAxXTsKKyAKICAJCQlpZiAo IWNzdGF0ZS0+b3B0cy5iaW5hcnkpCiAgCQkJewohIAkJCQlpZiAobmVlZF9kZWxpbSkKISAJ CQkJCUNvcHlTZW5kQ2hhcihjc3RhdGUsIGNzdGF0ZS0+b3B0cy5kZWxpbVswXSk7CiEgCQkJ CW5lZWRfZGVsaW0gPSB0cnVlOwohIAkJCX0KISAKISAJCQlpZiAoaXNudWxsKQohIAkJCXsK ISAJCQkJaWYgKCFjc3RhdGUtPm9wdHMuYmluYXJ5KQohIAkJCQkJQ29weVNlbmRTdHJpbmco Y3N0YXRlLCBjc3RhdGUtPm9wdHMubnVsbF9wcmludF9jbGllbnQpOwogIAkJCQllbHNlCiEg CQkJCQlDb3B5U2VuZEludDMyKGNzdGF0ZSwgLTEpOwogIAkJCX0KICAJCQllbHNlCiAgCQkJ ewohIAkJCQlpZiAoIWNzdGF0ZS0+b3B0cy5iaW5hcnkpCiEgCQkJCXsKISAJCQkJCXN0cmlu ZyA9IE91dHB1dEZ1bmN0aW9uQ2FsbCgmb3V0X2Z1bmN0aW9uc1thdHRudW0gLSAxXSwKISAJ CQkJCQkJCQkJCQl2YWx1ZSk7CiEgCQkJCQlpZiAoY3N0YXRlLT5vcHRzLmNzdl9tb2RlKQoh IAkJCQkJCUNvcHlBdHRyaWJ1dGVPdXRDU1YoY3N0YXRlLCBzdHJpbmcsCiEgCQkJCQkJCQkJ CQljc3RhdGUtPm9wdHMuZm9yY2VfcXVvdGVfZmxhZ3NbYXR0bnVtIC0gMV0sCiEgCQkJCQkJ CQkJCQlsaXN0X2xlbmd0aChjc3RhdGUtPmF0dG51bWxpc3QpID09IDEpOwohIAkJCQkJZWxz ZQohIAkJCQkJCUNvcHlBdHRyaWJ1dGVPdXRUZXh0KGNzdGF0ZSwgc3RyaW5nKTsKISAJCQkJ fQohIAkJCQllbHNlCiEgCQkJCXsKISAJCQkJCWJ5dGVhCSAgICpvdXRwdXRieXRlczsKICAK ISAJCQkJCW91dHB1dGJ5dGVzID0gU2VuZEZ1bmN0aW9uQ2FsbCgmb3V0X2Z1bmN0aW9uc1th dHRudW0gLSAxXSwKISAJCQkJCQkJCQkJCQkgICB2YWx1ZSk7CiEgCQkJCQlDb3B5U2VuZElu dDMyKGNzdGF0ZSwgVkFSU0laRShvdXRwdXRieXRlcykgLSBWQVJIRFJTWik7CiEgCQkJCQlD b3B5U2VuZERhdGEoY3N0YXRlLCBWQVJEQVRBKG91dHB1dGJ5dGVzKSwKISAJCQkJCQkJCSBW QVJTSVpFKG91dHB1dGJ5dGVzKSAtIFZBUkhEUlNaKTsKISAJCQkJfQogIAkJCX0KICAJCX0K ICAJfQorIAllbHNlCisgCXsKKyAJCURhdHVtCXJvd2RhdGEgPSBFeGVjRmV0Y2hTbG90SGVh cFR1cGxlRGF0dW0oc2xvdCk7CisgCQlTdHJpbmdJbmZvCXJlc3VsdDsKKyAKKyAJCXJlc3Vs dCA9IG1ha2VTdHJpbmdJbmZvKCk7CisgCQljb21wb3NpdGVfdG9fanNvbihyb3dkYXRhLCBy ZXN1bHQsIGZhbHNlKTsKKyAKKyAJCWlmIChqc29uX3Jvd19kZWxpbV9uZWVkZWQgJiYKKyAJ CQljc3RhdGUtPm9wdHMuZm9yY2Vfcm93X2RlbGltaXRlcikKKyAJCXsKKyAJCQlDb3B5U2Vu ZENoYXIoY3N0YXRlLCAnLCcpOworIAkJfQorIAkJZWxzZSBpZiAoY3N0YXRlLT5vcHRzLmZv cmNlX3Jvd19kZWxpbWl0ZXIpCisgCQl7CisgCQkJLyogZmlyc3Qgcm93IG5lZWRzIG5vIGRl bGltaXRlciAqLworIAkJCUNvcHlTZW5kQ2hhcihjc3RhdGUsICcgJyk7CisgCQkJanNvbl9y b3dfZGVsaW1fbmVlZGVkID0gdHJ1ZTsKKyAJCX0KKyAKKyAJCUNvcHlTZW5kRGF0YShjc3Rh dGUsIHJlc3VsdC0+ZGF0YSwgcmVzdWx0LT5sZW4pOworIAl9CiAgCiAgCUNvcHlTZW5kRW5k T2ZSb3coY3N0YXRlKTsKICAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFt LnkgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CmluZGV4IGQ2MzFhYzguLjE2YWExMzEg MTAwNjQ0CioqKiBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKLS0tIGIvc3JjL2JhY2tl bmQvcGFyc2VyL2dyYW0ueQoqKioqKioqKioqKioqKiogY29weV9vcHRfaXRlbToKKioqIDM0 MDgsMzQxMyAqKioqCi0tLSAzNDA4LDM0MTcgLS0tLQogIAkJCQl7CiAgCQkJCQkkJCA9IG1h a2VEZWZFbGVtKCJmb3JtYXQiLCAoTm9kZSAqKSBtYWtlU3RyaW5nKCJjc3YiKSwgQDEpOwog IAkJCQl9CisgCQkJfCBKU09OCisgCQkJCXsKKyAJCQkJCSQkID0gbWFrZURlZkVsZW0oImZv cm1hdCIsIChOb2RlICopIG1ha2VTdHJpbmcoImpzb24iKSwgQDEpOworIAkJCQl9CiAgCQkJ fCBIRUFERVJfUAogIAkJCQl7CiAgCQkJCQkkJCA9IG1ha2VEZWZFbGVtKCJoZWFkZXIiLCAo Tm9kZSAqKSBtYWtlQm9vbGVhbih0cnVlKSwgQDEpOwoqKioqKioqKioqKioqKiogY29weV9v cHRfaXRlbToKKioqIDM0NDgsMzQ1MyAqKioqCi0tLSAzNDUyLDM0NjUgLS0tLQogIAkJCQl7 CiAgCQkJCQkkJCA9IG1ha2VEZWZFbGVtKCJlbmNvZGluZyIsIChOb2RlICopIG1ha2VTdHJp bmcoJDIpLCBAMSk7CiAgCQkJCX0KKyAJCQl8IEZPUkNFIFJPVyBERUxJTUlURVIKKyAJCQkJ eworIAkJCQkJJCQgPSBtYWtlRGVmRWxlbSgiZm9yY2Vfcm93X2RlbGltaXRlciIsIChOb2Rl ICopIG1ha2VCb29sZWFuKHRydWUpLCBAMSk7CisgCQkJCX0KKyAJCQl8IEZPUkNFIEFSUkFZ CisgCQkJCXsKKyAJCQkJCSQkID0gbWFrZURlZkVsZW0oImZvcmNlX2FycmF5IiwgKE5vZGUg KikgbWFrZUJvb2xlYW4odHJ1ZSksIEAxKTsKKyAJCQkJfQogIAkJOwogIAogIC8qIFRoZSBm b2xsb3dpbmcgZXhpc3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJ5IG9s ZCB2ZXJzaW9ucyAqLwoqKioqKioqKioqKioqKiogY29weV9nZW5lcmljX29wdF9lbGVtOgoq KiogMzQ5MCwzNDk1ICoqKioKLS0tIDM1MDIsMzUxMSAtLS0tCiAgCQkJCXsKICAJCQkJCSQk ID0gbWFrZURlZkVsZW0oJDEsICQyLCBAMSk7CiAgCQkJCX0KKyAJCQl8IEZPUk1BVF9MQSBj b3B5X2dlbmVyaWNfb3B0X2FyZworIAkJCQl7CisgCQkJCQkkJCA9IG1ha2VEZWZFbGVtKCJm b3JtYXQiLCAkMiwgQDEpOworIAkJCQl9CiAgCQk7CiAgCiAgY29weV9nZW5lcmljX29wdF9h cmc6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbi5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2pzb24uYwppbmRleCA3MWFlNTNmLi5jYjQzMTFlIDEwMDY0NAoq KiogYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbi5jCi0tLSBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9qc29uLmMKKioqKioqKioqKioqKioqIHR5cGVkZWYgc3RydWN0IEpzb25BZ2dT dGF0ZQoqKiogODMsOTAgKioqKgogIAlKc29uVW5pcXVlQnVpbGRlclN0YXRlIHVuaXF1ZV9j aGVjazsKICB9IEpzb25BZ2dTdGF0ZTsKICAKLSBzdGF0aWMgdm9pZCBjb21wb3NpdGVfdG9f anNvbihEYXR1bSBjb21wb3NpdGUsIFN0cmluZ0luZm8gcmVzdWx0LAotIAkJCQkJCQkgIGJv b2wgdXNlX2xpbmVfZmVlZHMpOwogIHN0YXRpYyB2b2lkIGFycmF5X2RpbV90b19qc29uKFN0 cmluZ0luZm8gcmVzdWx0LCBpbnQgZGltLCBpbnQgbmRpbXMsIGludCAqZGltcywKICAJCQkJ CQkJICBEYXR1bSAqdmFscywgYm9vbCAqbnVsbHMsIGludCAqdmFsY291bnQsCiAgCQkJCQkJ CSAgSnNvblR5cGVDYXRlZ29yeSB0Y2F0ZWdvcnksIE9pZCBvdXRmdW5jb2lkLAotLS0gODMs ODggLS0tLQoqKioqKioqKioqKioqKiogYXJyYXlfdG9fanNvbl9pbnRlcm5hbChEYXR1bSBh cnJheSwgU3RyaQoqKiogNDkwLDQ5NyAqKioqCiAgCiAgLyoKICAgKiBUdXJuIGEgY29tcG9z aXRlIC8gcmVjb3JkIGludG8gSlNPTi4KICAgKi8KISBzdGF0aWMgdm9pZAogIGNvbXBvc2l0 ZV90b19qc29uKERhdHVtIGNvbXBvc2l0ZSwgU3RyaW5nSW5mbyByZXN1bHQsIGJvb2wgdXNl X2xpbmVfZmVlZHMpCiAgewogIAlIZWFwVHVwbGVIZWFkZXIgdGQ7Ci0tLSA0ODgsNDk2IC0t LS0KICAKICAvKgogICAqIFR1cm4gYSBjb21wb3NpdGUgLyByZWNvcmQgaW50byBKU09OLgor ICAqIEV4cG9ydGVkIHNvIENPUFkgVE8gY2FuIHVzZSBpdC4KICAgKi8KISB2b2lkCiAgY29t cG9zaXRlX3RvX2pzb24oRGF0dW0gY29tcG9zaXRlLCBTdHJpbmdJbmZvIHJlc3VsdCwgYm9v bCB1c2VfbGluZV9mZWVkcykKICB7CiAgCUhlYXBUdXBsZUhlYWRlciB0ZDsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRz L2NvcHkuaAppbmRleCBmMmNjYTBiLi4yNjY5MTBkIDEwMDY0NAoqKiogYS9zcmMvaW5jbHVk ZS9jb21tYW5kcy9jb3B5LmgKLS0tIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oCioq KioqKioqKioqKioqKiB0eXBlZGVmIHN0cnVjdCBDb3B5Rm9ybWF0T3B0aW9ucwoqKiogNDMs NDggKioqKgotLS0gNDMsNDkgLS0tLQogIAlib29sCQliaW5hcnk7CQkJLyogYmluYXJ5IGZv cm1hdD8gKi8KICAJYm9vbAkJZnJlZXplOwkJCS8qIGZyZWV6ZSByb3dzIG9uIGxvYWRpbmc/ ICovCiAgCWJvb2wJCWNzdl9tb2RlOwkJLyogQ29tbWEgU2VwYXJhdGVkIFZhbHVlIGZvcm1h dD8gKi8KKyAJYm9vbAkJanNvbl9tb2RlOwkJLyogSlNPTiBmb3JtYXQ/ICovCiAgCUNvcHlI ZWFkZXJDaG9pY2UgaGVhZGVyX2xpbmU7CS8qIGhlYWRlciBsaW5lPyAqLwogIAljaGFyCSAg ICpudWxsX3ByaW50OwkJLyogTlVMTCBtYXJrZXIgc3RyaW5nIChzZXJ2ZXIgZW5jb2Rpbmch KSAqLwogIAlpbnQJCQludWxsX3ByaW50X2xlbjsgLyogbGVuZ3RoIG9mIHNhbWUgKi8KKioq KioqKioqKioqKioqIHR5cGVkZWYgc3RydWN0IENvcHlGb3JtYXRPcHRpb25zCioqKiA2MSw2 NiAqKioqCi0tLSA2Miw2OSAtLS0tCiAgCUxpc3QJICAgKmZvcmNlX251bGw7CQkvKiBsaXN0 IG9mIGNvbHVtbiBuYW1lcyAqLwogIAlib29sCQlmb3JjZV9udWxsX2FsbDsgLyogRk9SQ0Vf TlVMTCAqPyAqLwogIAlib29sCSAgICpmb3JjZV9udWxsX2ZsYWdzOwkvKiBwZXItY29sdW1u IENTViBGTiBmbGFncyAqLworIAlib29sCQlmb3JjZV9yb3dfZGVsaW1pdGVyOwkvKiB1c2Ug Y29tbWEgYXMgcGVyLXJvdyBKU09OIGRlbGltaXRlciAqLworIAlib29sCQlmb3JjZV9hcnJh eTsJLyogSlNPTiBhcnJheTsgaW1wbGllcyBmb3JjZV9yb3dfZGVsaW1pdGVyICovCiAgCWJv b2wJCWNvbnZlcnRfc2VsZWN0aXZlbHk7CS8qIGRvIHNlbGVjdGl2ZSBiaW5hcnkgY29udmVy c2lvbj8gKi8KICAJTGlzdAkgICAqY29udmVydF9zZWxlY3Q7IC8qIGxpc3Qgb2YgY29sdW1u IG5hbWVzIChjYW4gYmUgTklMKSAqLwogIH0gQ29weUZvcm1hdE9wdGlvbnM7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS91dGlscy9qc29uLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29u LmgKaW5kZXggZjA3ZTgyYy4uYmFkYzVhNiAxMDA2NDQKKioqIGEvc3JjL2luY2x1ZGUvdXRp bHMvanNvbi5oCi0tLSBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb24uaAoqKioqKioqKioqKioq KioKKioqIDE3LDIyICoqKioKLS0tIDE3LDI0IC0tLS0KICAjaW5jbHVkZSAibGliL3N0cmlu Z2luZm8uaCIKICAKICAvKiBmdW5jdGlvbnMgaW4ganNvbi5jICovCisgZXh0ZXJuIHZvaWQg Y29tcG9zaXRlX3RvX2pzb24oRGF0dW0gY29tcG9zaXRlLCBTdHJpbmdJbmZvIHJlc3VsdCwK KyAJCQkJCQkJICBib29sIHVzZV9saW5lX2ZlZWRzKTsKICBleHRlcm4gdm9pZCBlc2NhcGVf anNvbihTdHJpbmdJbmZvIGJ1ZiwgY29uc3QgY2hhciAqc3RyKTsKICBleHRlcm4gY2hhciAq SnNvbkVuY29kZURhdGVUaW1lKGNoYXIgKmJ1ZiwgRGF0dW0gdmFsdWUsIE9pZCB0eXBpZCwK ICAJCQkJCQkJCWNvbnN0IGludCAqdHpwKTsK --------------wz0cnWv0MX4VjSp70LjZlFwR--