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 1rbuZa-00HXuv-5V for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Feb 2024 03:44:06 +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 1rbuZY-00CJuW-Cn for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Feb 2024 03:44:04 +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 1rbuZX-00CJuM-Qp for pgsql-hackers@lists.postgresql.org; Mon, 19 Feb 2024 03:44:04 +0000 Received: from mail-ua1-x936.google.com ([2607:f8b0:4864:20::936]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rbuZR-007STw-Sx for pgsql-hackers@postgresql.org; Mon, 19 Feb 2024 03:44:02 +0000 Received: by mail-ua1-x936.google.com with SMTP id a1e0cc1a2514c-7d6024b181bso1710118241.2 for ; Sun, 18 Feb 2024 19:43:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1708314237; x=1708919037; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=k80s2UMEbYSgjV2lKEdrUcbn7RBVc7hJaXWmQ2fy03Q=; b=aU/JOjC6xyALmwDNTM+1sS3zovqjY3RqM+rX4LPZucDL2kNIq9T0pME34yiPNCqkwb uo+w6GLekgX/bDAyqOhXXU5eEK8O6KrUEBGDcAes1movtTVvD0qno5tJyVwxUDojuPQL 3s6XJJBgapD4mLQ8EA7vENAsae2ofXot5oPQuQz+EP/LE8gGdOGGY+vzxeKqOS0pI7Fv GzWwTYAbBog+rBEglk1WEvIfaD/HGHc4VJlgBxuz4t6iZ0uZss+UcPtCffmUhFr8LvJF mPxxt/hybXrX2LryXhWpuQe+KtO3kXF9KlLNPLZSBsCuBSyCP4cscZ8R8lG9x0xNTMBt /ZDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708314237; x=1708919037; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=k80s2UMEbYSgjV2lKEdrUcbn7RBVc7hJaXWmQ2fy03Q=; b=iI24gt0mVRMr0zufhSracj2r2dheqO4DWkUuFmp+rzgj36TsAF/WXbaGAUoAxNKBZu k9e6plV9AGj+6Z79i5LOe96gHrPvx40VXEJT2/ID4BdXb5u2EcPXD067oVAjk+c4w6D8 dwr6JvAXOU4dQ/9Fo8uGppAN6EhdAOmm43Sc27KAJctYUZolCMe4W1v9XwlQCV18RPWi LY0c44V5t3Xm0+8rbTEaWb6FIkMK++wap3l6XCq4p3Sbp5sipTBB4mO4Z86nsI71deWZ 7cFq6bJCmgYwbFXVUKVDmVYQ5yHAV/c9I13EBXq42WaAF2B0c6EHtyjs3FughFR13Cum Cxqw== X-Forwarded-Encrypted: i=1; AJvYcCVtn51JPaGYpEwjkG/EA/wRlQBb76ESqwTKwQNCUdxvhLirgFpWrEy6gTn8veXxAlAkVA3vg7UcBh4jLitkPh4MHCo12DBOvHqqw9Qe X-Gm-Message-State: AOJu0YwFz1n2RhoPzTmoW0tOPtQQWzqIRZEp9Txvu2RhnbpuGcdjBa0Q QrwWjL7o9IlyynWSS9kDtGdtPVNjyJmvLdlCVEcew4cymln+m7kQ0BsO/KryRNeNZcKLIjhsJOF E6zoaxTwl16fHzB0/rtAak09oXi0= X-Google-Smtp-Source: AGHT+IG05iJQU+iJ2g7A3h+UaxBeL+7vR9XMR9W4LKw5+MMQD1xDI1YH+wy2FCSIp59T2GXpsz6GkWITJLTP6NHihOw= X-Received: by 2002:a67:f799:0:b0:470:5d0a:14f3 with SMTP id j25-20020a67f799000000b004705d0a14f3mr1315248vso.15.1708314236709; Sun, 18 Feb 2024 19:43:56 -0800 (PST) MIME-Version: 1.0 References: <202401311326.zvfydnpkqnnd@alvherre.pgsql> In-Reply-To: <202401311326.zvfydnpkqnnd@alvherre.pgsql> From: jian he Date: Mon, 19 Feb 2024 11:43:39 +0800 Message-ID: Subject: Re: Emitting JSON to file using COPY TO To: Alvaro Herrera Cc: Masahiko Sawada , Joe Conway , Daniel Verite , Andrew Dunstan , Davin Shearer , PostgreSQL-development , Junwang Zhao , Dean Rasheed Content-Type: multipart/mixed; boundary="0000000000003ec5120611b3e73e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003ec5120611b3e73e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Jan 19, 2024 at 4:10=E2=80=AFPM Masahiko Sawada wrote: > > if (opts_out->json_mode && is_from) > ereport(ERROR, ...); > > if (!opts_out->json_mode && opts_out->force_array) > ereport(ERROR, ...); > > Also these checks can be moved close to other checks at the end of > ProcessCopyOptions(). > > --- > @@ -3395,6 +3395,10 @@ copy_opt_item: > { > $$ =3D makeDefElem("format", (Node *) makeString("csv= "), @1); > } > + | JSON > + { > + $$ =3D makeDefElem("format", (Node *) makeString("jso= n"), @1); > + } > | HEADER_P > { > $$ =3D makeDefElem("header", (Node *) makeBoolean(tru= e), @1); > @@ -3427,6 +3431,10 @@ copy_opt_item: > { > $$ =3D makeDefElem("encoding", (Node *) makeString($2= ), @1); > } > + | FORCE ARRAY > + { > + $$ =3D makeDefElem("force_array", (Node *) > makeBoolean(true), @1); > + } > ; > > I believe we don't need to support new options in old-style syntax. > you are right about the force_array case. we don't need to add force_array related changes in gram.y. On Wed, Jan 31, 2024 at 9:26=E2=80=AFPM Alvaro Herrera wrote: > > On 2024-Jan-23, jian he wrote: > > > > + | FORMAT_LA copy_generic_opt_arg > > > + { > > > + $$ =3D makeDefElem("format", $2, @1); > > > + } > > > ; > > > > > > I think it's not necessary. "format" option is already handled in > > > copy_generic_opt_elem. > > > > test it, I found out this part is necessary. > > because a query with WITH like `copy (select 1) to stdout with > > (format json, force_array false); ` will fail. > > Right, because "FORMAT JSON" is turned into FORMAT_LA JSON by parser.c > (see base_yylex there). I'm not really sure but I think it might be > better to make it "| FORMAT_LA JSON" instead of invoking the whole > copy_generic_opt_arg syntax. Not because of performance, but just > because it's much clearer what's going on. > I am not sure what alternative you are referring to. I've rebased the patch, made some cosmetic changes. Now I think it's pretty neat. you can, based on it, make your change, then I may understand the alternative you are referring to. --0000000000003ec5120611b3e73e Content-Type: application/x-patch; name="v9-0001-Add-another-COPY-fomrat-json.patch" Content-Disposition: attachment; filename="v9-0001-Add-another-COPY-fomrat-json.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lssdyxqm0 RnJvbSBiM2QzZDYwMjNmOTZhYTc5NzFhMDY2M2Q4YzBiZDZkZTUwZTg3N2E1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMTkgRmViIDIwMjQgMTA6Mzc6MTggKzA4MDAKU3ViamVjdDogW1BBVENIIHY5 IDEvMl0gQWRkIGFub3RoZXIgQ09QWSBmb21yYXQ6IGpzb24KCnRoaXMgZm9ybWF0IGlzIG9ubHkg YWxsb3dlZCBpbiBDT1BZIFRPIG9wZXJhdGlvbi4KZGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3Iu ZXMvbS9DQUx2ZlVrQnhUWXk1dVdQRlZ3cGtfN2lpMnpnVDA3dDNkLXlSX2N5NHNmcnJMVSUzRGtj ZyU0MG1haWwuZ21haWwuY29tCmRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vNmEwNDYy OGQtMGQ1My00MWQ5LTllMzUtNWE4ZGMzMDJjMzRjQGpvZWNvbndheS5jb20KLS0tCiBkb2Mvc3Jj L3NnbWwvcmVmL2NvcHkuc2dtbCAgICAgICAgIHwgICA1ICsrCiBzcmMvYmFja2VuZC9jb21tYW5k cy9jb3B5LmMgICAgICAgIHwgIDEzICsrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMg ICAgICB8IDEyNSArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQogc3JjL2JhY2tlbmQvcGFy c2VyL2dyYW0ueSAgICAgICAgICB8ICAgOCArKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb24u YyAgICAgICB8ICAgNSArLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oICAgICAgICB8ICAg MSArCiBzcmMvaW5jbHVkZS91dGlscy9qc29uLmggICAgICAgICAgIHwgICAyICsKIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weS5vdXQgfCAgNTQgKysrKysrKysrKysrKwogc3JjL3Rlc3Qv cmVncmVzcy9zcWwvY29weS5zcWwgICAgICB8ICAzOCArKysrKysrKysKIDkgZmlsZXMgY2hhbmdl ZCwgMjA4IGluc2VydGlvbnMoKyksIDQzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9yZWYvY29weS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKaW5kZXgg NTU3NjRmYzEuLmVmOWU0NzI5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbApAQCAtMjE0LDkgKzIxNCwxNCBAQCBD T1BZIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2Vh YmxlPiBbICggPHJlcGxhY2VhYmxlCiAgICAgICBTZWxlY3RzIHRoZSBkYXRhIGZvcm1hdCB0byBi ZSByZWFkIG9yIHdyaXR0ZW46CiAgICAgICA8bGl0ZXJhbD50ZXh0PC9saXRlcmFsPiwKICAgICAg IDxsaXRlcmFsPmNzdjwvbGl0ZXJhbD4gKENvbW1hIFNlcGFyYXRlZCBWYWx1ZXMpLAorICAgICAg PGxpdGVyYWw+anNvbjwvbGl0ZXJhbD4gKEphdmFTY3JpcHQgT2JqZWN0IE5vdGF0aW9uKSwKICAg ICAgIG9yIDxsaXRlcmFsPmJpbmFyeTwvbGl0ZXJhbD4uCiAgICAgICBUaGUgZGVmYXVsdCBpcyA8 bGl0ZXJhbD50ZXh0PC9saXRlcmFsPi4KICAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAg IFRoZSA8bGl0ZXJhbD5qc29uPC9saXRlcmFsPiBvcHRpb24gaXMgYWxsb3dlZCBvbmx5IGluCisg ICAgICA8Y29tbWFuZD5DT1BZIFRPPC9jb21tYW5kPi4KKyAgICAgPC9wYXJhPgogICAgIDwvbGlz dGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvY29weS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jCmluZGV4IGNjMDc4NmM2 Li41ZDViNzMzZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwpAQCAtNDgwLDYgKzQ4MCw4IEBAIFByb2Nlc3ND b3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJIC8qIGRlZmF1bHQgZm9ybWF0ICov IDsKIAkJCWVsc2UgaWYgKHN0cmNtcChmbXQsICJjc3YiKSA9PSAwKQogCQkJCW9wdHNfb3V0LT5j c3ZfbW9kZSA9IHRydWU7CisJCQllbHNlIGlmIChzdHJjbXAoZm10LCAianNvbiIpID09IDApCisJ CQkJb3B0c19vdXQtPmpzb25fbW9kZSA9IHRydWU7CiAJCQllbHNlIGlmIChzdHJjbXAoZm10LCAi YmluYXJ5IikgPT0gMCkKIAkJCQlvcHRzX291dC0+YmluYXJ5ID0gdHJ1ZTsKIAkJCWVsc2UKQEAg LTcxNiw2ICs3MTgsMTEgQEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwK IAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1z ZygiY2Fubm90IHNwZWNpZnkgSEVBREVSIGluIEJJTkFSWSBtb2RlIikpKTsKIAorCWlmIChvcHRz X291dC0+anNvbl9tb2RlICYmIG9wdHNfb3V0LT5oZWFkZXJfbGluZSkKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVy cm1zZygiY2Fubm90IHNwZWNpZnkgSEVBREVSIGluIEpTT04gbW9kZSIpKSk7CisKIAkvKiBDaGVj ayBxdW90ZSAqLwogCWlmICghb3B0c19vdXQtPmNzdl9tb2RlICYmIG9wdHNfb3V0LT5xdW90ZSAh PSBOVUxMKQogCQllcmVwb3J0KEVSUk9SLApAQCAtNzkzLDYgKzgwMCwxMiBAQCBQcm9jZXNzQ29w eU9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAogCQkJCSBlcnJtc2coIkNPUFkgRlJFRVpFIGNhbm5vdCBiZSB1 c2VkIHdpdGggQ09QWSBUTyIpKSk7CiAKKwkvKiBDaGVjayBqc29uIGZvcm1hdCAgKi8KKwlpZiAo b3B0c19vdXQtPmpzb25fbW9kZSAmJiBpc19mcm9tKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJjYW5u b3QgdXNlIEpTT04gbW9kZSBpbiBDT1BZIEZST00iKSkpOworCiAJaWYgKG9wdHNfb3V0LT5kZWZh dWx0X3ByaW50KQogCXsKIAkJaWYgKCFpc19mcm9tKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29weXRvLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYwppbmRleCAy MGZmYzkwMy4uYzk0OGE0MzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0 by5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCkBAIC0yOCw2ICsyOCw3IEBA CiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY2Rlc2MuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVj dXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL3R1cHRhYmxlLmgiCisjaW5jbHVkZSAiZnVuY2Fw aS5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQu aCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgpAQCAtMzcsNiArMzgsNyBAQAogI2luY2x1ZGUg InJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5j bHVkZSAidGNvcC90Y29wcHJvdC5oIgorI2luY2x1ZGUgInV0aWxzL2pzb24uaCIKICNpbmNsdWRl ICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1 ZGUgInV0aWxzL3BhcnRjYWNoZS5oIgpAQCAtODYsNiArODgsNyBAQCB0eXBlZGVmIHN0cnVjdCBD b3B5VG9TdGF0ZURhdGEKIAlMaXN0CSAgICphdHRudW1saXN0OwkJLyogaW50ZWdlciBsaXN0IG9m IGF0dG51bXMgdG8gY29weSAqLwogCWNoYXIJICAgKmZpbGVuYW1lOwkJLyogZmlsZW5hbWUsIG9y IE5VTEwgZm9yIFNURE9VVCAqLwogCWJvb2wJCWlzX3Byb2dyYW07CQkvKiBpcyAnZmlsZW5hbWUn IGEgcHJvZ3JhbSB0byBwb3Blbj8gKi8KKwlib29sCQlqc29uX3Jvd19kZWxpbV9uZWVkZWQ7CS8q IG5lZWQgZGVsaW1pdGVyIHRvIHN0YXJ0IG5leHQganNvbiBhcnJheSBlbGVtZW50ICovCiAJY29w eV9kYXRhX2Rlc3RfY2IgZGF0YV9kZXN0X2NiOyAvKiBmdW5jdGlvbiBmb3Igd3JpdGluZyBkYXRh ICovCiAKIAlDb3B5Rm9ybWF0T3B0aW9ucyBvcHRzOwpAQCAtMTQ2LDkgKzE0OSwyMCBAQCBTZW5k Q29weUJlZ2luKENvcHlUb1N0YXRlIGNzdGF0ZSkKIAogCXBxX2JlZ2lubWVzc2FnZSgmYnVmLCBQ cU1zZ19Db3B5T3V0UmVzcG9uc2UpOwogCXBxX3NlbmRieXRlKCZidWYsIGZvcm1hdCk7CS8qIG92 ZXJhbGwgZm9ybWF0ICovCi0JcHFfc2VuZGludDE2KCZidWYsIG5hdHRzKTsKLQlmb3IgKGkgPSAw OyBpIDwgbmF0dHM7IGkrKykKLQkJcHFfc2VuZGludDE2KCZidWYsIGZvcm1hdCk7IC8qIHBlci1j b2x1bW4gZm9ybWF0cyAqLworCWlmICghY3N0YXRlLT5vcHRzLmpzb25fbW9kZSkKKwl7CisJCXBx X3NlbmRpbnQxNigmYnVmLCBuYXR0cyk7CisJCWZvciAoaSA9IDA7IGkgPCBuYXR0czsgaSsrKQor CQkJcHFfc2VuZGludDE2KCZidWYsIGZvcm1hdCk7IC8qIHBlci1jb2x1bW4gZm9ybWF0cyAqLwor CX0KKwllbHNlCisJeworCQkvKgorCQkgKiBKU09OIG1vZGUgaXMgYWx3YXlzIG9uZSBub24tYmlu YXJ5IGNvbHVtbgorCQkgKi8KKwkJcHFfc2VuZGludDE2KCZidWYsIDEpOworCQlwcV9zZW5kaW50 MTYoJmJ1ZiwgMCk7CisJfQogCXBxX2VuZG1lc3NhZ2UoJmJ1Zik7CiAJY3N0YXRlLT5jb3B5X2Rl c3QgPSBDT1BZX0ZST05URU5EOwogfQpAQCAtOTA3LDExICs5MjEsNyBAQCBEb0NvcHlUbyhDb3B5 VG9TdGF0ZSBjc3RhdGUpCiBzdGF0aWMgdm9pZAogQ29weU9uZVJvd1RvKENvcHlUb1N0YXRlIGNz dGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiB7Ci0JYm9vbAkJbmVlZF9kZWxpbSA9IGZhbHNl OwotCUZtZ3JJbmZvICAgKm91dF9mdW5jdGlvbnMgPSBjc3RhdGUtPm91dF9mdW5jdGlvbnM7CiAJ TWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwotCUxpc3RDZWxsICAgKmN1cjsKLQljaGFyCSAgICpz dHJpbmc7CiAKIAlNZW1vcnlDb250ZXh0UmVzZXQoY3N0YXRlLT5yb3djb250ZXh0KTsKIAlvbGRj b250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGNzdGF0ZS0+cm93Y29udGV4dCk7CkBAIC05 MjIsNTMgKzkzMiw4OCBAQCBDb3B5T25lUm93VG8oQ29weVRvU3RhdGUgY3N0YXRlLCBUdXBsZVRh YmxlU2xvdCAqc2xvdCkKIAkJQ29weVNlbmRJbnQxNihjc3RhdGUsIGxpc3RfbGVuZ3RoKGNzdGF0 ZS0+YXR0bnVtbGlzdCkpOwogCX0KIAotCS8qIE1ha2Ugc3VyZSB0aGUgdHVwbGUgaXMgZnVsbHkg ZGVjb25zdHJ1Y3RlZCAqLwotCXNsb3RfZ2V0YWxsYXR0cnMoc2xvdCk7Ci0KLQlmb3JlYWNoKGN1 ciwgY3N0YXRlLT5hdHRudW1saXN0KQorCWlmICghY3N0YXRlLT5vcHRzLmpzb25fbW9kZSkKIAl7 Ci0JCWludAkJCWF0dG51bSA9IGxmaXJzdF9pbnQoY3VyKTsKLQkJRGF0dW0JCXZhbHVlID0gc2xv dC0+dHRzX3ZhbHVlc1thdHRudW0gLSAxXTsKLQkJYm9vbAkJaXNudWxsID0gc2xvdC0+dHRzX2lz bnVsbFthdHRudW0gLSAxXTsKKwkJYm9vbAkJbmVlZF9kZWxpbSA9IGZhbHNlOworCQlGbWdySW5m byAgICpvdXRfZnVuY3Rpb25zID0gY3N0YXRlLT5vdXRfZnVuY3Rpb25zOworCQlMaXN0Q2VsbCAg ICpjdXI7CisJCWNoYXIJICAgKnN0cmluZzsKIAotCQlpZiAoIWNzdGF0ZS0+b3B0cy5iaW5hcnkp Ci0JCXsKLQkJCWlmIChuZWVkX2RlbGltKQotCQkJCUNvcHlTZW5kQ2hhcihjc3RhdGUsIGNzdGF0 ZS0+b3B0cy5kZWxpbVswXSk7Ci0JCQluZWVkX2RlbGltID0gdHJ1ZTsKLQkJfQorCQkvKiBNYWtl IHN1cmUgdGhlIHR1cGxlIGlzIGZ1bGx5IGRlY29uc3RydWN0ZWQgKi8KKwkJc2xvdF9nZXRhbGxh dHRycyhzbG90KTsKIAotCQlpZiAoaXNudWxsKQotCQl7Ci0JCQlpZiAoIWNzdGF0ZS0+b3B0cy5i aW5hcnkpCi0JCQkJQ29weVNlbmRTdHJpbmcoY3N0YXRlLCBjc3RhdGUtPm9wdHMubnVsbF9wcmlu dF9jbGllbnQpOwotCQkJZWxzZQotCQkJCUNvcHlTZW5kSW50MzIoY3N0YXRlLCAtMSk7Ci0JCX0K LQkJZWxzZQorCQlmb3JlYWNoKGN1ciwgY3N0YXRlLT5hdHRudW1saXN0KQogCQl7CisJCQlpbnQJ CQlhdHRudW0gPSBsZmlyc3RfaW50KGN1cik7CisJCQlEYXR1bQkJdmFsdWUgPSBzbG90LT50dHNf dmFsdWVzW2F0dG51bSAtIDFdOworCQkJYm9vbAkJaXNudWxsID0gc2xvdC0+dHRzX2lzbnVsbFth dHRudW0gLSAxXTsKKwogCQkJaWYgKCFjc3RhdGUtPm9wdHMuYmluYXJ5KQogCQkJewotCQkJCXN0 cmluZyA9IE91dHB1dEZ1bmN0aW9uQ2FsbCgmb3V0X2Z1bmN0aW9uc1thdHRudW0gLSAxXSwKLQkJ CQkJCQkJCQkJdmFsdWUpOwotCQkJCWlmIChjc3RhdGUtPm9wdHMuY3N2X21vZGUpCi0JCQkJCUNv cHlBdHRyaWJ1dGVPdXRDU1YoY3N0YXRlLCBzdHJpbmcsCi0JCQkJCQkJCQkJY3N0YXRlLT5vcHRz LmZvcmNlX3F1b3RlX2ZsYWdzW2F0dG51bSAtIDFdKTsKKwkJCQlpZiAobmVlZF9kZWxpbSkKKwkJ CQkJQ29weVNlbmRDaGFyKGNzdGF0ZSwgY3N0YXRlLT5vcHRzLmRlbGltWzBdKTsKKwkJCQluZWVk X2RlbGltID0gdHJ1ZTsKKwkJCX0KKworCQkJaWYgKGlzbnVsbCkKKwkJCXsKKwkJCQlpZiAoIWNz dGF0ZS0+b3B0cy5iaW5hcnkpCisJCQkJCUNvcHlTZW5kU3RyaW5nKGNzdGF0ZSwgY3N0YXRlLT5v cHRzLm51bGxfcHJpbnRfY2xpZW50KTsKIAkJCQllbHNlCi0JCQkJCUNvcHlBdHRyaWJ1dGVPdXRU ZXh0KGNzdGF0ZSwgc3RyaW5nKTsKKwkJCQkJQ29weVNlbmRJbnQzMihjc3RhdGUsIC0xKTsKIAkJ CX0KIAkJCWVsc2UKIAkJCXsKLQkJCQlieXRlYQkgICAqb3V0cHV0Ynl0ZXM7CisJCQkJaWYgKCFj c3RhdGUtPm9wdHMuYmluYXJ5KQorCQkJCXsKKwkJCQkJc3RyaW5nID0gT3V0cHV0RnVuY3Rpb25D YWxsKCZvdXRfZnVuY3Rpb25zW2F0dG51bSAtIDFdLAorCQkJCQkJCQkJCQkJdmFsdWUpOworCQkJ CQlpZiAoY3N0YXRlLT5vcHRzLmNzdl9tb2RlKQorCQkJCQkJQ29weUF0dHJpYnV0ZU91dENTVihj c3RhdGUsIHN0cmluZywKKwkJCQkJCQkJCQkJY3N0YXRlLT5vcHRzLmZvcmNlX3F1b3RlX2ZsYWdz W2F0dG51bSAtIDFdKTsKKwkJCQkJZWxzZQorCQkJCQkJQ29weUF0dHJpYnV0ZU91dFRleHQoY3N0 YXRlLCBzdHJpbmcpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlieXRlYQkgICAqb3V0 cHV0Ynl0ZXM7CiAKLQkJCQlvdXRwdXRieXRlcyA9IFNlbmRGdW5jdGlvbkNhbGwoJm91dF9mdW5j dGlvbnNbYXR0bnVtIC0gMV0sCi0JCQkJCQkJCQkJCSAgIHZhbHVlKTsKLQkJCQlDb3B5U2VuZElu dDMyKGNzdGF0ZSwgVkFSU0laRShvdXRwdXRieXRlcykgLSBWQVJIRFJTWik7Ci0JCQkJQ29weVNl bmREYXRhKGNzdGF0ZSwgVkFSREFUQShvdXRwdXRieXRlcyksCi0JCQkJCQkJIFZBUlNJWkUob3V0 cHV0Ynl0ZXMpIC0gVkFSSERSU1opOworCQkJCQlvdXRwdXRieXRlcyA9IFNlbmRGdW5jdGlvbkNh bGwoJm91dF9mdW5jdGlvbnNbYXR0bnVtIC0gMV0sCisJCQkJCQkJCQkJCQkgICB2YWx1ZSk7CisJ CQkJCUNvcHlTZW5kSW50MzIoY3N0YXRlLCBWQVJTSVpFKG91dHB1dGJ5dGVzKSAtIFZBUkhEUlNa KTsKKwkJCQkJQ29weVNlbmREYXRhKGNzdGF0ZSwgVkFSREFUQShvdXRwdXRieXRlcyksCisJCQkJ CQkJCSBWQVJTSVpFKG91dHB1dGJ5dGVzKSAtIFZBUkhEUlNaKTsKKwkJCQl9CiAJCQl9CiAJCX0K IAl9CisJZWxzZQorCXsKKwkJRGF0dW0JCXJvd2RhdGE7CisJCVN0cmluZ0luZm8JcmVzdWx0Owor CisJCS8qCisJCSAqIGlmZiBDT1BZIFRPIGNvbW1hbmQncyBzb3VyY2UgZGF0YSBpcyBmcm9tIGEg cXVlcnksIG5vdCBhIHJlbGF0aW9uLAorCQkgKiB0aGVuIHdlIG5lZWQgdG8gY29weSB0aGUgVHVw bGVEZXNjIGZyb20gdGhlIGNzdGF0ZS0+cXVlcnlEZXNjLgorCQkgKiBiZWNhdXNlIHF1ZXJ5IGV4 ZWN1dGlvbiByZXR1cm5pbmcgc2xvdCdzIFR1cGxlRGVzYyBtYXkgY2hhbmdlLAorCQkgKiBjb21w b3NpdGVfdG9fanNvbiByZXF1aXJlcyBjb3JyZWN0IFR1cGxlRGVzYy4KKwkJKi8KKwkJaWYoIWNz dGF0ZS0+cmVsKQorCQl7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IHNsb3QtPnR0c190dXBsZURl c2NyaXB0b3ItPm5hdHRzOyBpKyspCisJCQl7CisJCQkJbWVtY3B5KFR1cGxlRGVzY0F0dHIoc2xv dC0+dHRzX3R1cGxlRGVzY3JpcHRvciwgaSksCisJCQkJVHVwbGVEZXNjQXR0cihjc3RhdGUtPnF1 ZXJ5RGVzYy0+dHVwRGVzYywgaSksCisJCQkJCQkJCTEgKiBzaXplb2YoRm9ybURhdGFfcGdfYXR0 cmlidXRlKSk7CisJCQl9CisJCQlCbGVzc1R1cGxlRGVzYyhzbG90LT50dHNfdHVwbGVEZXNjcmlw dG9yKTsKKwkJfQorCQlyb3dkYXRhID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZURhdHVtKHNsb3Qp OworCQlyZXN1bHQgPSBtYWtlU3RyaW5nSW5mbygpOworCQljb21wb3NpdGVfdG9fanNvbihyb3dk YXRhLCByZXN1bHQsIGZhbHNlKTsKKworCQlDb3B5U2VuZERhdGEoY3N0YXRlLCByZXN1bHQtPmRh dGEsIHJlc3VsdC0+bGVuKTsKKwl9CiAKIAlDb3B5U2VuZEVuZE9mUm93KGNzdGF0ZSk7CiAKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgYi9zcmMvYmFja2VuZC9wYXJzZXIv Z3JhbS55CmluZGV4IDYwYjMxZDlmLi5hZGE0OWU0YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cGFyc2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC0zNDI0LDYg KzM0MjQsMTAgQEAgY29weV9vcHRfaXRlbToKIAkJCQl7CiAJCQkJCSQkID0gbWFrZURlZkVsZW0o ImZvcm1hdCIsIChOb2RlICopIG1ha2VTdHJpbmcoImNzdiIpLCBAMSk7CiAJCQkJfQorCQkJfCBK U09OCisJCQkJeworCQkJCQkkJCA9IG1ha2VEZWZFbGVtKCJmb3JtYXQiLCAoTm9kZSAqKSBtYWtl U3RyaW5nKCJqc29uIiksIEAxKTsKKwkJCQl9CiAJCQl8IEhFQURFUl9QCiAJCQkJewogCQkJCQkk JCA9IG1ha2VEZWZFbGVtKCJoZWFkZXIiLCAoTm9kZSAqKSBtYWtlQm9vbGVhbih0cnVlKSwgQDEp OwpAQCAtMzUwNiw2ICszNTEwLDEwIEBAIGNvcHlfZ2VuZXJpY19vcHRfZWxlbToKIAkJCQl7CiAJ CQkJCSQkID0gbWFrZURlZkVsZW0oJDEsICQyLCBAMSk7CiAJCQkJfQorCQkJfCBGT1JNQVRfTEEg Y29weV9nZW5lcmljX29wdF9hcmcKKwkJCXsKKwkJCQkkJCA9IG1ha2VEZWZFbGVtKCJmb3JtYXQi LCAkMiwgQDEpOworCQkJfQogCQk7CiAKIGNvcHlfZ2VuZXJpY19vcHRfYXJnOgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb24uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9q c29uLmMKaW5kZXggZDcxOWE2MWYuLmZhYmQ0ZTYxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvanNvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uLmMKQEAgLTgz LDggKzgzLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbkFnZ1N0YXRlCiAJSnNvblVuaXF1ZUJ1aWxk ZXJTdGF0ZSB1bmlxdWVfY2hlY2s7CiB9IEpzb25BZ2dTdGF0ZTsKIAotc3RhdGljIHZvaWQgY29t cG9zaXRlX3RvX2pzb24oRGF0dW0gY29tcG9zaXRlLCBTdHJpbmdJbmZvIHJlc3VsdCwKLQkJCQkJ CQkgIGJvb2wgdXNlX2xpbmVfZmVlZHMpOwogc3RhdGljIHZvaWQgYXJyYXlfZGltX3RvX2pzb24o U3RyaW5nSW5mbyByZXN1bHQsIGludCBkaW0sIGludCBuZGltcywgaW50ICpkaW1zLAogCQkJCQkJ CSAgRGF0dW0gKnZhbHMsIGJvb2wgKm51bGxzLCBpbnQgKnZhbGNvdW50LAogCQkJCQkJCSAgSnNv blR5cGVDYXRlZ29yeSB0Y2F0ZWdvcnksIE9pZCBvdXRmdW5jb2lkLApAQCAtNTA3LDggKzUwNSw5 IEBAIGFycmF5X3RvX2pzb25faW50ZXJuYWwoRGF0dW0gYXJyYXksIFN0cmluZ0luZm8gcmVzdWx0 LCBib29sIHVzZV9saW5lX2ZlZWRzKQogCiAvKgogICogVHVybiBhIGNvbXBvc2l0ZSAvIHJlY29y ZCBpbnRvIEpTT04uCisgKiBFeHBvcnRlZCBzbyBDT1BZIFRPIGNhbiB1c2UgaXQuCiAgKi8KLXN0 YXRpYyB2b2lkCit2b2lkCiBjb21wb3NpdGVfdG9fanNvbihEYXR1bSBjb21wb3NpdGUsIFN0cmlu Z0luZm8gcmVzdWx0LCBib29sIHVzZV9saW5lX2ZlZWRzKQogewogCUhlYXBUdXBsZUhlYWRlciB0 ZDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaCBiL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2NvcHkuaAppbmRleCBiM2RhM2NiMC4uZjU5MWI2MTMgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5 LmgKQEAgLTUzLDYgKzUzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29weUZvcm1hdE9wdGlvbnMKIAli b29sCQliaW5hcnk7CQkJLyogYmluYXJ5IGZvcm1hdD8gKi8KIAlib29sCQlmcmVlemU7CQkJLyog ZnJlZXplIHJvd3Mgb24gbG9hZGluZz8gKi8KIAlib29sCQljc3ZfbW9kZTsJCS8qIENvbW1hIFNl cGFyYXRlZCBWYWx1ZSBmb3JtYXQ/ICovCisJYm9vbAkJanNvbl9tb2RlOwkJLyogSlNPTiBmb3Jt YXQ/ICovCiAJQ29weUhlYWRlckNob2ljZSBoZWFkZXJfbGluZTsJLyogaGVhZGVyIGxpbmU/ICov CiAJY2hhcgkgICAqbnVsbF9wcmludDsJCS8qIE5VTEwgbWFya2VyIHN0cmluZyAoc2VydmVyIGVu Y29kaW5nISkgKi8KIAlpbnQJCQludWxsX3ByaW50X2xlbjsgLyogbGVuZ3RoIG9mIHNhbWUgKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb24uaCBiL3NyYy9pbmNsdWRlL3V0aWxz L2pzb24uaAppbmRleCA2ZDdmMWIzOC4uZDU2MzExNzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3V0aWxzL2pzb24uaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9qc29uLmgKQEAgLTE3LDYgKzE3 LDggQEAKICNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgogCiAvKiBmdW5jdGlvbnMgaW4ganNv bi5jICovCitleHRlcm4gdm9pZCBjb21wb3NpdGVfdG9fanNvbihEYXR1bSBjb21wb3NpdGUsIFN0 cmluZ0luZm8gcmVzdWx0LAorCQkJCQkJCSAgYm9vbCB1c2VfbGluZV9mZWVkcyk7CiBleHRlcm4g dm9pZCBlc2NhcGVfanNvbihTdHJpbmdJbmZvIGJ1ZiwgY29uc3QgY2hhciAqc3RyKTsKIGV4dGVy biBjaGFyICpKc29uRW5jb2RlRGF0ZVRpbWUoY2hhciAqYnVmLCBEYXR1bSB2YWx1ZSwgT2lkIHR5 cGlkLAogCQkJCQkJCQljb25zdCBpbnQgKnR6cCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2NvcHkub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Lm91 dAppbmRleCBiNDgzNjVlYy4uMGM1YWRlNDcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvY29weS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Lm91 dApAQCAtNDIsNiArNDIsNjAgQEAgY29weSBjb3B5dGVzdDMgdG8gc3Rkb3V0IGNzdiBoZWFkZXI7 CiBjMSwiY29sIHdpdGggLCBjb21tYSIsImNvbCB3aXRoICIiIHF1b3RlIgogMSxhLDEKIDIsYiwy CistLS0gdGVzdCBjb3B5aW5nIGluIEpTT04gbW9kZSB3aXRoIHZhcmlvdXMgc3R5bGVzCitjb3B5 IGNvcHl0ZXN0IHRvIHN0ZG91dCBqc29uOworeyJzdHlsZSI6IkRPUyIsInRlc3QiOiJhYmNcclxu ZGVmIiwiZmlsbGVyIjoxfQoreyJzdHlsZSI6IlVuaXgiLCJ0ZXN0IjoiYWJjXG5kZWYiLCJmaWxs ZXIiOjJ9Cit7InN0eWxlIjoiTWFjIiwidGVzdCI6ImFiY1xyZGVmIiwiZmlsbGVyIjozfQoreyJz dHlsZSI6ImVzY1xcYXBlIiwidGVzdCI6ImFcXHJcXFxyXFxcblxcbmIiLCJmaWxsZXIiOjR9Citj b3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24pOworeyJzdHlsZSI6IkRPUyIsInRl c3QiOiJhYmNcclxuZGVmIiwiZmlsbGVyIjoxfQoreyJzdHlsZSI6IlVuaXgiLCJ0ZXN0IjoiYWJj XG5kZWYiLCJmaWxsZXIiOjJ9Cit7InN0eWxlIjoiTWFjIiwidGVzdCI6ImFiY1xyZGVmIiwiZmls bGVyIjozfQoreyJzdHlsZSI6ImVzY1xcYXBlIiwidGVzdCI6ImFcXHJcXFxyXFxcblxcbmIiLCJm aWxsZXIiOjR9CistLSBFcnJvcgorY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29u LCBoZWFkZXIpOworRVJST1I6ICBjYW5ub3Qgc3BlY2lmeSBIRUFERVIgaW4gSlNPTiBtb2RlCist LSBFcnJvcgorY29weSBjb3B5dGVzdCBmcm9tIHN0ZG91dCAoZm9ybWF0IGpzb24pOworRVJST1I6 ICBjYW5ub3QgdXNlIEpTT04gbW9kZSBpbiBDT1BZIEZST00KKy0tIGVtYmVkZGVkIGVzY2FwZWQg Y2hhcmFjdGVycworY3JlYXRlIHRlbXAgdGFibGUgY29weWpzb250ZXN0ICgKKyAgICBpZCBiaWdz ZXJpYWwsCisgICAgZjEgdGV4dCwKKyAgICBmMiB0aW1lc3RhbXB0eik7CitpbnNlcnQgaW50byBj b3B5anNvbnRlc3QKKyAgc2VsZWN0IGcuaSwKKyAgICAgICAgIENBU0UgV0hFTiBnLmkgJSAyID0g MCBUSEVOCisgICAgICAgICAgICdsaW5lIHdpdGggJycgaW4gaXQ6ICcgfHwgZy5pOjp0ZXh0Cisg ICAgICAgICBFTFNFCisgICAgICAgICAgICdsaW5lIHdpdGggIiBpbiBpdDogJyB8fCBnLmk6OnRl eHQKKyAgICAgICAgIEVORCwKKyAgICAgICAgICdNb24gRmViIDEwIDE3OjMyOjAxIDE5OTcgUFNU JworICBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDUpIGFzIGcoaSk7CitpbnNlcnQgaW50byBjb3B5 anNvbnRlc3QgKGYxKSB2YWx1ZXMKKyhFJ2FhYVwiYmJiJzo6dGV4dCksCisoRSdhYWFcXGJiYic6 OnRleHQpLAorKEUnYWFhXC9iYmInOjp0ZXh0KSwKKyhFJ2FhYVxiYmJiJzo6dGV4dCksCisoRSdh YWFcZmJiYic6OnRleHQpLAorKEUnYWFhXG5iYmInOjp0ZXh0KSwKKyhFJ2FhYVxyYmJiJzo6dGV4 dCksCisoRSdhYWFcdGJiYic6OnRleHQpOworY29weSBjb3B5anNvbnRlc3QgdG8gc3Rkb3V0IGpz b247Cit7ImlkIjoxLCJmMSI6ImxpbmUgd2l0aCBcIiBpbiBpdDogMSIsImYyIjoiMTk5Ny0wMi0x MFQxNzozMjowMS0wODowMCJ9Cit7ImlkIjoyLCJmMSI6ImxpbmUgd2l0aCAnIGluIGl0OiAyIiwi ZjIiOiIxOTk3LTAyLTEwVDE3OjMyOjAxLTA4OjAwIn0KK3siaWQiOjMsImYxIjoibGluZSB3aXRo IFwiIGluIGl0OiAzIiwiZjIiOiIxOTk3LTAyLTEwVDE3OjMyOjAxLTA4OjAwIn0KK3siaWQiOjQs ImYxIjoibGluZSB3aXRoICcgaW4gaXQ6IDQiLCJmMiI6IjE5OTctMDItMTBUMTc6MzI6MDEtMDg6 MDAifQoreyJpZCI6NSwiZjEiOiJsaW5lIHdpdGggXCIgaW4gaXQ6IDUiLCJmMiI6IjE5OTctMDIt MTBUMTc6MzI6MDEtMDg6MDAifQoreyJpZCI6MSwiZjEiOiJhYWFcImJiYiIsImYyIjpudWxsfQor eyJpZCI6MiwiZjEiOiJhYWFcXGJiYiIsImYyIjpudWxsfQoreyJpZCI6MywiZjEiOiJhYWEvYmJi IiwiZjIiOm51bGx9Cit7ImlkIjo0LCJmMSI6ImFhYVxiYmJiIiwiZjIiOm51bGx9Cit7ImlkIjo1 LCJmMSI6ImFhYVxmYmJiIiwiZjIiOm51bGx9Cit7ImlkIjo2LCJmMSI6ImFhYVxuYmJiIiwiZjIi Om51bGx9Cit7ImlkIjo3LCJmMSI6ImFhYVxyYmJiIiwiZjIiOm51bGx9Cit7ImlkIjo4LCJmMSI6 ImFhYVx0YmJiIiwiZjIiOm51bGx9CiBjcmVhdGUgdGVtcCB0YWJsZSBjb3B5dGVzdDQgKAogCWMx IGludCwKIAkiY29sbmFtZSB3aXRoIHRhYjogCSIgdGV4dCk7CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9jb3B5LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkuc3FsCmlu ZGV4IDQzZDJlOTA2Li5kYTZiMGIwYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv Y29weS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwKQEAgLTU0LDYgKzU0 LDQ0IEBAIHRoaXMgaXMganVzdCBhIGxpbmUgZnVsbCBvZiBqdW5rIHRoYXQgd291bGQgZXJyb3Ig b3V0IGlmIHBhcnNlZAogCiBjb3B5IGNvcHl0ZXN0MyB0byBzdGRvdXQgY3N2IGhlYWRlcjsKIAor LS0tIHRlc3QgY29weWluZyBpbiBKU09OIG1vZGUgd2l0aCB2YXJpb3VzIHN0eWxlcworY29weSBj b3B5dGVzdCB0byBzdGRvdXQganNvbjsKKworY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1h dCBqc29uKTsKKworLS0gRXJyb3IKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNv biwgaGVhZGVyKTsKKy0tIEVycm9yCitjb3B5IGNvcHl0ZXN0IGZyb20gc3Rkb3V0IChmb3JtYXQg anNvbik7CisKKy0tIGVtYmVkZGVkIGVzY2FwZWQgY2hhcmFjdGVycworY3JlYXRlIHRlbXAgdGFi bGUgY29weWpzb250ZXN0ICgKKyAgICBpZCBiaWdzZXJpYWwsCisgICAgZjEgdGV4dCwKKyAgICBm MiB0aW1lc3RhbXB0eik7CisKK2luc2VydCBpbnRvIGNvcHlqc29udGVzdAorICBzZWxlY3QgZy5p LAorICAgICAgICAgQ0FTRSBXSEVOIGcuaSAlIDIgPSAwIFRIRU4KKyAgICAgICAgICAgJ2xpbmUg d2l0aCAnJyBpbiBpdDogJyB8fCBnLmk6OnRleHQKKyAgICAgICAgIEVMU0UKKyAgICAgICAgICAg J2xpbmUgd2l0aCAiIGluIGl0OiAnIHx8IGcuaTo6dGV4dAorICAgICAgICAgRU5ELAorICAgICAg ICAgJ01vbiBGZWIgMTAgMTc6MzI6MDEgMTk5NyBQU1QnCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDEsNSkgYXMgZyhpKTsKKworaW5zZXJ0IGludG8gY29weWpzb250ZXN0IChmMSkgdmFsdWVzCiso RSdhYWFcImJiYic6OnRleHQpLAorKEUnYWFhXFxiYmInOjp0ZXh0KSwKKyhFJ2FhYVwvYmJiJzo6 dGV4dCksCisoRSdhYWFcYmJiYic6OnRleHQpLAorKEUnYWFhXGZiYmInOjp0ZXh0KSwKKyhFJ2Fh YVxuYmJiJzo6dGV4dCksCisoRSdhYWFccmJiYic6OnRleHQpLAorKEUnYWFhXHRiYmInOjp0ZXh0 KTsKKworY29weSBjb3B5anNvbnRlc3QgdG8gc3Rkb3V0IGpzb247CisKIGNyZWF0ZSB0ZW1wIHRh YmxlIGNvcHl0ZXN0NCAoCiAJYzEgaW50LAogCSJjb2xuYW1lIHdpdGggdGFiOiAJIiB0ZXh0KTsK LS0gCjIuMzQuMQoK --0000000000003ec5120611b3e73e Content-Type: application/x-patch; name="v9-0002-Add-option-force_array-for-COPY-TO-JSON-fomrat.patch" Content-Disposition: attachment; filename="v9-0002-Add-option-force_array-for-COPY-TO-JSON-fomrat.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lssdyxqt1 RnJvbSAxMDMzOGYxMDIyMWUwOTUxMjdlNzY3MTc3NmE0Nzg1NjVhZGQ0ZGY0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMTkgRmViIDIwMjQgMTA6NDA6NTMgKzA4MDAKU3ViamVjdDogW1BBVENIIHY5 IDIvMl0gQWRkIG9wdGlvbiBmb3JjZV9hcnJheSBmb3IgQ09QWSBUTyBKU09OIGZvbXJhdC4KCm1h a2UgYWRkIG9wZW5pbmcgYnJhY2tldHMgYW5kIGNsb3NlIGJyYWNrZXRzIGZvciB0aGUgd2hvbGUg anNvbiBvdXRwdXQuCmFsc28sIHNlcGFyYXRlIGVhY2gganNvbiByZWNvcmQgd2l0aCBjb21tYS4K ZGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUx2ZlVrQnhUWXk1dVdQRlZ3cGtfN2lp MnpnVDA3dDNkLXlSX2N5NHNmcnJMVSUzRGtjZyU0MG1haWwuZ21haWwuY29tCmRpc2N1c3Npb246 IGh0dHBzOi8vcG9zdGdyLmVzL20vNmEwNDYyOGQtMGQ1My00MWQ5LTllMzUtNWE4ZGMzMDJjMzRj QGpvZWNvbndheS5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbCAgICAgICAgIHwg MTQgKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYyAgICAgICAgfCAx NyArKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMgICAgICB8 IDI4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2Nv cHkuaCAgICAgICAgfCAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0IHwg MjQgKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5LnNx bCAgICAgIHwgIDkgKysrKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDkzIGluc2VydGlvbnMoKykK CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbCBiL2RvYy9zcmMvc2dtbC9y ZWYvY29weS5zZ21sCmluZGV4IGVmOWU0NzI5Li44M2Y0YTQzZiAxMDA2NDQKLS0tIGEvZG9jL3Ny Yy9zZ21sL3JlZi9jb3B5LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKQEAg LTQzLDYgKzQzLDcgQEAgQ09QWSB7IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJs ZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAoIDxyZXBsYWNlYWJsZQogICAgIEZPUkNFX1FVT1RFIHsg KCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxl PiBbLCAuLi5dICkgfCAqIH0KICAgICBGT1JDRV9OT1RfTlVMTCB7ICggPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uXSApIHwgKiB9 CiAgICAgRk9SQ0VfTlVMTCB7ICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbHVt bl9uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uXSApIHwgKiB9CisgICAgRk9SQ0VfQVJSQVkgWyA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Ym9vbGVhbjwvcmVwbGFjZWFibGU+IF0KICAg ICBPTl9FUlJPUiAnPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmVycm9yX2FjdGlvbjwv cmVwbGFjZWFibGU+JwogICAgIEVOQ09ESU5HICc8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+ZW5jb2RpbmdfbmFtZTwvcmVwbGFjZWFibGU+JwogPC9zeW5vcHNpcz4KQEAgLTM4Niw2ICsz ODcsMTkgQEAgQ09QWSB7IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1l PC9yZXBsYWNlYWJsZT4gWyAoIDxyZXBsYWNlYWJsZQogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zh cmxpc3RlbnRyeT4KIAorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT48bGl0ZXJhbD5GT1JD RV9BUlJBWTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAg ICAgIEZvcmNlIG91dHB1dCBvZiBzcXVhcmUgYnJhY2tldHMgYXMgYXJyYXkgZGVjb3JhdGlvbnMg YXQgdGhlIGJlZ2lubmluZworICAgICAgYW5kIGVuZCBvZiBvdXRwdXQsIGFuZCBjb21tYXMgYmV0 d2VlbiB0aGUgcm93cy4gSXQgaXMgYWxsb3dlZCBvbmx5IGluCisgICAgICA8Y29tbWFuZD5DT1BZ IFRPPC9jb21tYW5kPiwgYW5kIG9ubHkgd2hlbiB1c2luZworICAgICAgPGxpdGVyYWw+SlNPTjwv bGl0ZXJhbD4gZm9ybWF0LiBUaGUgZGVmYXVsdCBpcworICAgICAgPGxpdGVyYWw+ZmFsc2U8L2xp dGVyYWw+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5 PgorCiAgICA8dmFybGlzdGVudHJ5PgogICAgIDx0ZXJtPjxsaXRlcmFsPk9OX0VSUk9SPC9saXRl cmFsPjwvdGVybT4KICAgICA8bGlzdGl0ZW0+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKaW5kZXggNWQ1YjczM2Qu Ljg5MzczMTE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jCkBAIC00NTYsNiArNDU2LDcgQEAgUHJvY2Vzc0Nv cHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAlib29sCQlmcmVlemVfc3BlY2lmaWVkID0g ZmFsc2U7CiAJYm9vbAkJaGVhZGVyX3NwZWNpZmllZCA9IGZhbHNlOwogCWJvb2wJCW9uX2Vycm9y X3NwZWNpZmllZCA9IGZhbHNlOworCWJvb2wJCWZvcmNlX2FycmF5X3NwZWNpZmllZCA9IGZhbHNl OwogCUxpc3RDZWxsICAgKm9wdGlvbjsKIAogCS8qIFN1cHBvcnQgZXh0ZXJuYWwgdXNlIGZvciBv cHRpb24gc2FuaXR5IGNoZWNraW5nICovCkBAIC02MTAsNiArNjExLDEzIEBAIFByb2Nlc3NDb3B5 T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJCWRlZmVsLT5kZWZuYW1lKSwKIAkJ CQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBkZWZlbC0+bG9jYXRpb24pKSk7CiAJCX0K KwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiZm9yY2VfYXJyYXkiKSA9PSAwKQor CQl7CisJCQlpZiAoZm9yY2VfYXJyYXlfc3BlY2lmaWVkKQorCQkJCWVycm9yQ29uZmxpY3RpbmdE ZWZFbGVtKGRlZmVsLCBwc3RhdGUpOworCQkJZm9yY2VfYXJyYXlfc3BlY2lmaWVkID0gdHJ1ZTsK KwkJCW9wdHNfb3V0LT5mb3JjZV9hcnJheSA9IGRlZkdldEJvb2xlYW4oZGVmZWwpOworCQl9CiAJ CWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgIm9uX2Vycm9yIikgPT0gMCkKIAkJewog CQkJaWYgKG9uX2Vycm9yX3NwZWNpZmllZCkKQEAgLTgwNiw2ICs4MTQsMTUgQEAgUHJvY2Vzc0Nv cHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRV UkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygiY2Fubm90IHVzZSBKU09OIG1vZGUgaW4g Q09QWSBGUk9NIikpKTsKIAorCWlmICghb3B0c19vdXQtPmpzb25fbW9kZSAmJiBvcHRzX291dC0+ Zm9yY2VfYXJyYXkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coIkNPUFkgRk9SQ0VfQVJSQVkgcmVxdWly ZXMgSlNPTiBtb2RlIikpKTsKKwlpZiAoIW9wdHNfb3V0LT5qc29uX21vZGUgJiYgZm9yY2VfYXJy YXlfc3BlY2lmaWVkKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJDT1BZIEZPUkNFX0FSUkFZIG9ubHkg YXZhaWxhYmxlIGluIEpTT04gbW9kZSIpKSk7CisKIAlpZiAob3B0c19vdXQtPmRlZmF1bHRfcHJp bnQpCiAJewogCQlpZiAoIWlzX2Zyb20pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9jb3B5dG8uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCmluZGV4IGM5NDhhNDMx Li40MTllN2U2MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKQEAgLTg2MCw2ICs4NjAsMTYgQEAgRG9D b3B5VG8oQ29weVRvU3RhdGUgY3N0YXRlKQogCiAJCQlDb3B5U2VuZEVuZE9mUm93KGNzdGF0ZSk7 CiAJCX0KKwkJLyoKKwkJICogSWYgSlNPTiBoYXMgYmVlbiByZXF1ZXN0ZWQsIGFuZCBGT1JDRV9B UlJBWSBoYXMgYmVlbiBzcGVjaWZpZWQgc2VuZAorCQkgKiB0aGUgb3BlbmluZyBicmFja2V0Lgor CQkqLworCQlpZiAoY3N0YXRlLT5vcHRzLmpzb25fbW9kZSAmJiBjc3RhdGUtPm9wdHMuZm9yY2Vf YXJyYXkpCisJCXsKKwkJCUNvcHlTZW5kQ2hhcihjc3RhdGUsICdbJyk7CisJCQlDb3B5U2VuZEVu ZE9mUm93KGNzdGF0ZSk7CisJCX0KKwogCX0KIAogCWlmIChjc3RhdGUtPnJlbCkKQEAgLTkwNyw2 ICs5MTcsMTUgQEAgRG9Db3B5VG8oQ29weVRvU3RhdGUgY3N0YXRlKQogCQlDb3B5U2VuZEVuZE9m Um93KGNzdGF0ZSk7CiAJfQogCisJLyoKKwkgKiBJZiBKU09OIGhhcyBiZWVuIHJlcXVlc3RlZCwg YW5kIEZPUkNFX0FSUkFZIGhhcyBiZWVuIHNwZWNpZmllZCBzZW5kIHRoZQorCSAqIGNsb3Npbmcg YnJhY2tldC4KKwkqLworCWlmIChjc3RhdGUtPm9wdHMuanNvbl9tb2RlICYmIGNzdGF0ZS0+b3B0 cy5mb3JjZV9hcnJheSkKKwl7CisJCUNvcHlTZW5kQ2hhcihjc3RhdGUsICddJyk7CisJCUNvcHlT ZW5kRW5kT2ZSb3coY3N0YXRlKTsKKwl9CiAJTWVtb3J5Q29udGV4dERlbGV0ZShjc3RhdGUtPnJv d2NvbnRleHQpOwogCiAJaWYgKGZlX2NvcHkpCkBAIC0xMDEyLDYgKzEwMzEsMTUgQEAgQ29weU9u ZVJvd1RvKENvcHlUb1N0YXRlIGNzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiAJCXJlc3Vs dCA9IG1ha2VTdHJpbmdJbmZvKCk7CiAJCWNvbXBvc2l0ZV90b19qc29uKHJvd2RhdGEsIHJlc3Vs dCwgZmFsc2UpOwogCisJCWlmIChjc3RhdGUtPmpzb25fcm93X2RlbGltX25lZWRlZCAmJiBjc3Rh dGUtPm9wdHMuZm9yY2VfYXJyYXkpCisJCQlDb3B5U2VuZENoYXIoY3N0YXRlLCAnLCcpOworCQll bHNlIGlmIChjc3RhdGUtPm9wdHMuZm9yY2VfYXJyYXkpCisJCXsKKwkJCS8qIGZpcnN0IHJvdyBu ZWVkcyBubyBkZWxpbWl0ZXIgKi8KKwkJCUNvcHlTZW5kQ2hhcihjc3RhdGUsICcgJyk7CisJCQlj c3RhdGUtPmpzb25fcm93X2RlbGltX25lZWRlZCA9IHRydWU7CisJCX0KKwogCQlDb3B5U2VuZERh dGEoY3N0YXRlLCByZXN1bHQtPmRhdGEsIHJlc3VsdC0+bGVuKTsKIAl9CiAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHku aAppbmRleCBmNTkxYjYxMy4uNTE2NTZlZWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1h bmRzL2NvcHkuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmgKQEAgLTcyLDYgKzcy LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29weUZvcm1hdE9wdGlvbnMKIAlMaXN0CSAgICpmb3JjZV9u dWxsOwkJLyogbGlzdCBvZiBjb2x1bW4gbmFtZXMgKi8KIAlib29sCQlmb3JjZV9udWxsX2FsbDsg LyogRk9SQ0VfTlVMTCAqPyAqLwogCWJvb2wJICAgKmZvcmNlX251bGxfZmxhZ3M7CS8qIHBlci1j b2x1bW4gQ1NWIEZOIGZsYWdzICovCisJYm9vbAkJZm9yY2VfYXJyYXk7CS8qIGFkZCBKU09OIGFy cmF5IGRlY29yYXRpb25zICovCiAJYm9vbAkJY29udmVydF9zZWxlY3RpdmVseTsJLyogZG8gc2Vs ZWN0aXZlIGJpbmFyeSBjb252ZXJzaW9uPyAqLwogCUNvcHlPbkVycm9yQ2hvaWNlIG9uX2Vycm9y OyAvKiB3aGF0IHRvIGRvIHdoZW4gZXJyb3IgaGFwcGVuZWQgKi8KIAlMaXN0CSAgICpjb252ZXJ0 X3NlbGVjdDsgLyogbGlzdCBvZiBjb2x1bW4gbmFtZXMgKGNhbiBiZSBOSUwpICovCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9jb3B5Lm91dAppbmRleCAwYzVhZGU0Ny4uNzgxMjc2OGMgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9jb3B5Lm91dApAQCAtNTksNiArNTksMzAgQEAgRVJST1I6ICBjYW5ub3Qgc3Bl Y2lmeSBIRUFERVIgaW4gSlNPTiBtb2RlCiAtLSBFcnJvcgogY29weSBjb3B5dGVzdCBmcm9tIHN0 ZG91dCAoZm9ybWF0IGpzb24pOwogRVJST1I6ICBjYW5ub3QgdXNlIEpTT04gbW9kZSBpbiBDT1BZ IEZST00KKy0tRXJyb3IKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQgY3N2LCBmb3Jj ZV9hcnJheSBmYWxzZSk7CitFUlJPUjogIENPUFkgRk9SQ0VfQVJSQVkgb25seSBhdmFpbGFibGUg aW4gSlNPTiBtb2RlCitjb3B5IGNvcHl0ZXN0IGZyb20gc3RkaW4gKGZvcm1hdCBqc29uLCBmb3Jj ZV9hcnJheSB0cnVlKTsKK0VSUk9SOiAgY2Fubm90IHVzZSBKU09OIG1vZGUgaW4gQ09QWSBGUk9N Citjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIGZvcmNlX2FycmF5KTsKK1sK KyB7InN0eWxlIjoiRE9TIiwidGVzdCI6ImFiY1xyXG5kZWYiLCJmaWxsZXIiOjF9CisseyJzdHls ZSI6IlVuaXgiLCJ0ZXN0IjoiYWJjXG5kZWYiLCJmaWxsZXIiOjJ9CisseyJzdHlsZSI6Ik1hYyIs InRlc3QiOiJhYmNccmRlZiIsImZpbGxlciI6M30KKyx7InN0eWxlIjoiZXNjXFxhcGUiLCJ0ZXN0 IjoiYVxcclxcXHJcXFxuXFxuYiIsImZpbGxlciI6NH0KK10KK2NvcHkgY29weXRlc3QgdG8gc3Rk b3V0IChmb3JtYXQganNvbiwgZm9yY2VfYXJyYXkgdHJ1ZSk7CitbCisgeyJzdHlsZSI6IkRPUyIs InRlc3QiOiJhYmNcclxuZGVmIiwiZmlsbGVyIjoxfQorLHsic3R5bGUiOiJVbml4IiwidGVzdCI6 ImFiY1xuZGVmIiwiZmlsbGVyIjoyfQorLHsic3R5bGUiOiJNYWMiLCJ0ZXN0IjoiYWJjXHJkZWYi LCJmaWxsZXIiOjN9CisseyJzdHlsZSI6ImVzY1xcYXBlIiwidGVzdCI6ImFcXHJcXFxyXFxcblxc bmIiLCJmaWxsZXIiOjR9CitdCitjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24s IGZvcmNlX2FycmF5IGZhbHNlKTsKK3sic3R5bGUiOiJET1MiLCJ0ZXN0IjoiYWJjXHJcbmRlZiIs ImZpbGxlciI6MX0KK3sic3R5bGUiOiJVbml4IiwidGVzdCI6ImFiY1xuZGVmIiwiZmlsbGVyIjoy fQoreyJzdHlsZSI6Ik1hYyIsInRlc3QiOiJhYmNccmRlZiIsImZpbGxlciI6M30KK3sic3R5bGUi OiJlc2NcXGFwZSIsInRlc3QiOiJhXFxyXFxcclxcXG5cXG5iIiwiZmlsbGVyIjo0fQogLS0gZW1i ZWRkZWQgZXNjYXBlZCBjaGFyYWN0ZXJzCiBjcmVhdGUgdGVtcCB0YWJsZSBjb3B5anNvbnRlc3Qg KAogICAgIGlkIGJpZ3NlcmlhbCwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Nv cHkuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwKaW5kZXggZGE2YjBiMGEuLmY2 ODUxOTNiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5LnNxbAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5LnNxbApAQCAtNjQsNiArNjQsMTUgQEAgY29weSBjb3B5 dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBoZWFkZXIpOwogLS0gRXJyb3IKIGNvcHkgY29w eXRlc3QgZnJvbSBzdGRvdXQgKGZvcm1hdCBqc29uKTsKIAorLS1FcnJvcgorY29weSBjb3B5dGVz dCB0byBzdGRvdXQgKGZvcm1hdCBjc3YsIGZvcmNlX2FycmF5IGZhbHNlKTsKK2NvcHkgY29weXRl c3QgZnJvbSBzdGRpbiAoZm9ybWF0IGpzb24sIGZvcmNlX2FycmF5IHRydWUpOworCitjb3B5IGNv cHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIGZvcmNlX2FycmF5KTsKKworY29weSBjb3B5 dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBmb3JjZV9hcnJheSB0cnVlKTsKKworY29weSBj b3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBmb3JjZV9hcnJheSBmYWxzZSk7CiAtLSBl bWJlZGRlZCBlc2NhcGVkIGNoYXJhY3RlcnMKIGNyZWF0ZSB0ZW1wIHRhYmxlIGNvcHlqc29udGVz dCAoCiAgICAgaWQgYmlnc2VyaWFsLAotLSAKMi4zNC4xCgo= --0000000000003ec5120611b3e73e--