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.96) (envelope-from ) id 1wA5f7-0023OU-1I for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Apr 2026 12:36:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wA5f5-00HDI1-2n for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Apr 2026 12:36:08 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wA5f5-00HDHt-1L for pgsql-hackers@lists.postgresql.org; Tue, 07 Apr 2026 12:36:07 +0000 Received: from mail-ej1-x62c.google.com ([2a00:1450:4864:20::62c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wA5f3-0000000160T-0sG8 for pgsql-hackers@lists.postgresql.org; Tue, 07 Apr 2026 12:36:07 +0000 Received: by mail-ej1-x62c.google.com with SMTP id a640c23a62f3a-b93698bb57aso58948366b.0 for ; Tue, 07 Apr 2026 05:36:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jeltef.nl; s=google; t=1775565364; x=1776170164; darn=lists.postgresql.org; h=in-reply-to:references:mime-version:from:to:subject:cc:message-id :date:from:to:cc:subject:date:message-id:reply-to; bh=naCn24dKAZ41Irzxoi6xXHYdtu5U5FNXCbL+w3KIp7s=; b=E3C5wmQAERBnhkv0m3nkRX+NjtERnYK3LvhcbYp4ZkVNrTuHitP5dAuOSIHd2h0Pa0 CX8oaJOlwcaurFWU5XNdjizXRUGzhy8SHMco1iBULmJ4tz4fUAXZUnZzVv2JS5/T3oBc N6uk9rfscYjdL9XfaD92S8t+kT24H8j+sSjo1XFH46eV4c81lUvKnrje5DiJk7Q6XbFh 0bCEiYwa4iBZb0LeV/nTgrXPaGC68dsnpZBfUeSq48reDrqLbi9MtdETPKJ8WLgnDqlR pAIcDTqTa26bm8yptPVK73iE4yk9YdR+446UicfPf3JzPN4vGIW64vg4SaGeJBRhTjV3 osYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775565364; x=1776170164; h=in-reply-to:references:mime-version:from:to:subject:cc:message-id :date:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=naCn24dKAZ41Irzxoi6xXHYdtu5U5FNXCbL+w3KIp7s=; b=KqFHauGQBA6YXq2M8wO2D7JGrVYjmdf8S1YYp0L4Zd9Azv28wXFOoA5ATEiOtojW6x 1IqqehlSlzXBpH5aObbrvoOYWHOMUCunIQtNUFyoe53+XQqa27e9RFuA5k5+ui8PO9+p hfYThj9SuP/VgA9jDpPi5YX25LQ+XTE3VBGBd84z3lNedk6mo9b6JfULvY8K7S1J3fP5 3O2tgC3Y/mk3q0wN0cUXvyNpKjG0UqKqjqGT13DyDAi6kR7MIB1CWvBr9TZOJFt6xBNb r3FZwsR2w9H9356OZ6mWfDCW8OQRn/4Nrytmpv8//MFSzfsVhAKgi17DA9fGrivlz1hl 6mkg== X-Forwarded-Encrypted: i=1; AJvYcCVXcACxa0uXWeSla0HsHS1tMCxfXPjvAvJu4ARWIcUJmJGjubA5eXuA8okSF5MAamKIBZkqssiAThmEwahy@lists.postgresql.org X-Gm-Message-State: AOJu0YxmMSHLjCEGdfPG+bgd8vwPeVj+xeEP1Xhw1hhywDw/VrvlKDId 7bbyWFMO1AWTRkRwUeJCSp+rmc1Xvou6muRCyeXB+JXRmZJV+lsI4W0LPAFamFZlM0s= X-Gm-Gg: AeBDiesy68baICvIIZp087Ip446qpA/KAOj6EYiKIdbX6TpFk66sAyO70xrTBmUhZP+ 9PdPfuKiiABuavgmLgZFVPzkRxNIYU2Jt+XiGMzJSv2vtgpI7IsWScXvAd66zf2CkuBXRpamoE7 X8KCZsq8lRsTLvPhYmURCP9e+XU2X4neOt2MwOgiGwhxu/s0MAFeyDAGTZ2v5Ci5gI890siGAar 27vJfKCN31JL8voGStV65nrw6D7HjQH4cORGF1zkJzOsFBTdf9DgdkRXe5CM71uT6ehnx7KF5V1 PW+rMC9lgkLm01E5P9aDbtK9x8676Xq2AVWk42c0KNd5J7kj7P/rcB+yK39xKd2pPrehGpxtJ9g QMnl5Ft3Zm1ZnOrNCZq63pgQ1Oti/NdihpoIfQLBqExm2dWEfuvJE1rCCCUDO9/u0aP4caoRxFD 9H8KXoJ8mF/d7ANnUDq7XbX8Khph+IBJ4XfeaSXct8rRJV2/aGbPOJtZ4gn2uu/A== X-Received: by 2002:a17:907:971a:b0:b97:fec5:eced with SMTP id a640c23a62f3a-b9c46a55746mr967090766b.0.1775565364175; Tue, 07 Apr 2026 05:36:04 -0700 (PDT) Received: from localhost (037153217001.static.ipv4.heldenvannu.net. [37.153.217.1]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b9c3ca9a145sm549839466b.25.2026.04.07.05.36.03 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 07 Apr 2026 05:36:03 -0700 (PDT) Content-Type: multipart/mixed; boundary=c3363d9b88134dc684ccad4569ddaca45dec3f3b09ce9950d86f4fc670cb Date: Tue, 07 Apr 2026 14:36:02 +0200 Message-Id: Cc: "Andrew Dunstan" , "David G. Johnston" , "japin" , "Zsolt Parragi" , =?utf-8?q?=C3=81lvaro_Herrera?= , "PostgreSQL Hackers" Subject: Re: pg_get__*_ddl consolidation To: "Euler Taveira" From: "Jelte Fennema-Nio" MIME-Version: 1.0 References: <202603201311.yhtqmvektawm@alvherre.pgsql> <8ec9b67d-939e-4b22-8d56-a5129f92d32d@app.fastmail.com> <555cdee4-c024-4872-9d96-82ef4216239c@dunslane.net> <34dc4d59-fec8-43c2-aa7b-38917b3ce0aa@dunslane.net> <6ecd7573-850d-424a-9794-3ee1f73851c0@app.fastmail.com> <97c1633b-b534-4b7e-bd89-6a8fc7bbf4fc@app.fastmail.com> In-Reply-To: <97c1633b-b534-4b7e-bd89-6a8fc7bbf4fc@app.fastmail.com> X-TUID: Pv0ILmkAGhTF List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --c3363d9b88134dc684ccad4569ddaca45dec3f3b09ce9950d86f4fc670cb Content-Type: multipart/alternative; boundary=8e775ac568ccbdd29a0b37ed72b79934d04a9215264ce90c2673c86c07a7 --8e775ac568ccbdd29a0b37ed72b79934d04a9215264ce90c2673c86c07a7 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8; format=Flowed On Tue, 7 Apr 2026 at 05:44, Euler Taveira wrote: > There are other functions. See pg_restore_extended_stats() [1] and relate= d > functions. If you are looking for flexibility, this key-value pair argume= nts is > one of the ways to achieve it. Ah, I missed that one indeed my search didn't find it because it used type "any" for the variadic. That makes the usage nicer imo than the one used here, because you can actually give booleans to it (not only 'true' & 'false' as strings). Looking at those examples I foresee another big downside to the VARIADIC approach. It's impossible for an SQL autoformatter to make the function call look nice, because it does not know the two arguments are supposed to be together. They will all be put on a single line. The only way to get a nicely looking function call is hand-formatting the code. > postgres=3D# create function foo(arg1 int default 0, arg2 int) returns in= t as $$ begin return arg1 + arg2; end; $$ language plpgsql; > ERROR: input parameters after one with a default value must also have de= faults > LINE 1: create function foo(arg1 int default 0, arg2 int) returns in... You don't give an example how VARIADIC gives you the ability to make that behave differently. But I guess you mean that: SELECT foo(); would start erroring "with 'arg2' is required" and users would have to do SELECT foo('arg2', 123); There's a pretty simple way to get that same behaviour for the named arguments approach though. Simply use DEFAULT NULL as the default for arg2, and make it nonstrict. Then you can check for NULL in the implementation and throw an error, just like you would do for the VARIADIC version. With that SELECT foo(); --errors SELECT foo(arg2 =3D> 123) -- works So I don't see how this VARIADIC differs in this case. In any case it seems unlikely to me that we want to ever add new required arguments to these functions. Simply for backwards compatibility reasons that sounds like a huge hassle that we'll probably want to avoid by giving any new arguments a default. So even if there was a difference, I don't really consider that a useful benefit of the VARIADIC approach. > The VARIADIC argument forces you to always specify the argument name; tha= t's a > good thing. The regular argument list requires you to remember the order = of the > arguments (unless you are using named arguments). I definitely agree with this. But I think that's solvable in practice by having examples in the docs showing how to use named arguments for these functions (see attached v6). That way most users will use that named argument syntax as opposed to the positional one. > It is just a few arguments for the current functions but I predict that > pg_get_table_dll may have a dozen of arguments. IMO the VARIADIC approach= is > superior when you want several options. The function call is smaller in > comparison to your proposal. (Let's say you want to specify the last argu= ment > value. Inform all the other default arguments plus the argument you want = to > change. For VARIADIC, specify only the argument you want to change.) If you use named arguments to call the function, then all of this doesn't matter. And actually the VARIADIC can be more confusing. Especially with many arguments because it can be unclear which of the arguments is a key and which one is a value. And even for few arguments a reader can be confused, if the reader doesn't realize that the arguments are interpreted as key value pairs. For instance, I'd say that for a call like below, it's not obvious that 'foreign_keys' and 'all' are a pair. I'd have to look at the function docs to realize that these are not two separate arguments (one set to 'foreign_keys', and the other to 'all'): select pg_get_table_ddl('mytable', 'foreign_keys', 'all'); while with the named argument syntax makes that's immediately clearer: select pg_get_table_ddl('mytable', foreign_keys =3D> 'all'); > I meant modifying the pg_proc.dat every time a new argument is added. Sure, but I don't understand why that would be problem. We do that all the time in major releases. Even with the VARIADIC approach, I don't think we should be adding optional arguments in minor releases. So to summarize (from my biased viewpoint) I think the downsides are: 1. Uncommon calling convention: only pg_restore_*_stats and pg_logical_slot_*_changes use it, while all other functions support named parameters. 2. Needs custom option parsing logic 3. More characters to type because you have to quote booleans, integers and argument names. 4. Requires functions to be marked as NOSTRICT, which then needs additional NULL handling 5. It can be unclear to a reader of a query that the function arguments should be interpreted as key-value pair 6. Breaks auto formatting And the benefit: 1. Forces people to specify the argument name I don't think those benefits outweigh the downsides. --8e775ac568ccbdd29a0b37ed72b79934d04a9215264ce90c2673c86c07a7-- --c3363d9b88134dc684ccad4569ddaca45dec3f3b09ce9950d86f4fc670cb Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v6-0001-Use-named-arguments-for-pg_get_-_ddl-functions.patch Content-Type: text/x-patch; charset=utf-8; name=v6-0001-Use-named-arguments-for-pg_get_-_ddl-functions.patch RnJvbSBhZWQwZjY0YjIxNTljOWY4M2FlMTMyMTQ0MmM0ZThjODYxYWZkZTdhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBNb24sIDYgQXByIDIwMjYgMTc6MDU6MjcgKzAyMDAKU3ViamVjdDogW1BBVENIIHY2 XSBVc2UgbmFtZWQgYXJndW1lbnRzIGZvciBwZ19nZXRfKl9kZGwoKSBmdW5jdGlvbnMKCkluIDQ4 ODE5ODFmOTIwMjQgc29tZSBpbmZyYXN0cnVjdHVyZSB3YXMgaW50cm9kdWNlZCB0byBhbGxvdyBv cHRpb25hbAprZXktdmFsdWUgcGFpcnMgYXMgYXJndW1lbnRzLiBUaGlzIHJlbW92ZXMgdGhhdCBp bmZyYXN0cnVjdHVyZSBpbiBmYXZvcgpvZiBuYW1lZCBhcmd1bWVudHMuIE5vIGN1c3RvbSBwYXJz aW5nIGFuZCB0eXBlY2hlY2tpbmcgbG9naWMgaXMgbmVlZGVkCnRoaXMgd2F5LgotLS0KIGRvYy9z cmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sICAgICAgICAgICAgIHwgIDY1ICsrKy0tCiBzcmMv YmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYyAgICAgICAgICAgICB8IDI1NiArKy0tLS0tLS0t LS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICB8 ICAzNiArKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZGF0YWJhc2VfZGRsLm91dCAgIHwg IDEwICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3JvbGVfZGRsLm91dCAgICAgICB8ICAg NCArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC90YWJsZXNwYWNlX2RkbC5vdXQgfCAgIDQg Ky0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2RhdGFiYXNlX2RkbC5zcWwgICAgICAgIHwgICA5ICst CiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9yb2xlX2RkbC5zcWwgICAgICAgICAgICB8ICAgNCArLQog c3JjL3Rlc3QvcmVncmVzcy9zcWwvdGFibGVzcGFjZV9kZGwuc3FsICAgICAgfCAgIDQgKy0KIHNy Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgIHwgICAyIC0KIDEwIGZp bGVzIGNoYW5nZWQsIDg4IGluc2VydGlvbnMoKyksIDMwNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5j L2Z1bmMtaW5mby5zZ21sCmluZGV4IDgwY2YxMTA4M2Q2Li4xNzlmMjQ5Mjg0NSAxMDA2NDQKLS0t IGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1 bmMvZnVuYy1pbmZvLnNnbWwKQEAgLTM4OTUsOCArMzg5NSwxMCBAQCBhY2wgICAgICB8IHtwb3N0 Z3Jlcz1hcndkRHh0bS9wb3N0Z3Jlcyxmb289ci9wb3N0Z3Jlc30KICAgICAgICAgPC9pbmRleHRl cm0+CiAgICAgICAgIDxmdW5jdGlvbj5wZ19nZXRfcm9sZV9kZGw8L2Z1bmN0aW9uPgogICAgICAg ICAoIDxwYXJhbWV0ZXI+cm9sZTwvcGFyYW1ldGVyPiA8dHlwZT5yZWdyb2xlPC90eXBlPgotICAg ICAgICA8b3B0aW9uYWw+LCA8bGl0ZXJhbD5WQVJJQURJQzwvbGl0ZXJhbD4gPHBhcmFtZXRlcj5v cHRpb25zPC9wYXJhbWV0ZXI+Ci0gICAgICAgIDx0eXBlPnRleHQ8L3R5cGU+IDwvb3B0aW9uYWw+ ICkKKyAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRlcj5wcmV0dHk8L3BhcmFtZXRlcj4gPHR5 cGU+Ym9vbGVhbjwvdHlwZT4KKyAgICAgICAgPGxpdGVyYWw+REVGQVVMVCBmYWxzZTwvbGl0ZXJh bD4gPC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRlcj5tZW1iZXJzaGlw czwvcGFyYW1ldGVyPiA8dHlwZT5ib29sZWFuPC90eXBlPgorICAgICAgICA8bGl0ZXJhbD5ERUZB VUxUIHRydWU8L2xpdGVyYWw+IDwvb3B0aW9uYWw+ICkKICAgICAgICAgPHJldHVybnZhbHVlPnNl dG9mIHRleHQ8L3JldHVybnZhbHVlPgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KQEAg LTM5MDQsMTAgKzM5MDYsMTUgQEAgYWNsICAgICAgfCB7cG9zdGdyZXM9YXJ3ZER4dG0vcG9zdGdy ZXMsZm9vPXIvcG9zdGdyZXN9CiAgICAgICAgIDxjb21tYW5kPkFMVEVSIFJPTEUgLi4uIFNFVDwv Y29tbWFuZD4gc3RhdGVtZW50cyBmb3IgdGhlIGdpdmVuIHJvbGUuCiAgICAgICAgIEVhY2ggc3Rh dGVtZW50IGlzIHJldHVybmVkIGFzIGEgc2VwYXJhdGUgcm93LgogICAgICAgICBQYXNzd29yZCBp bmZvcm1hdGlvbiBpcyBuZXZlciBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0LgotICAgICAgICBUaGUg Zm9sbG93aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZDogPGxpdGVyYWw+cHJldHR5PC9saXRlcmFs PiAoYm9vbGVhbikKLSAgICAgICAgZm9yIHByZXR0eS1wcmludGVkIG91dHB1dCBhbmQgPGxpdGVy YWw+bWVtYmVyc2hpcHM8L2xpdGVyYWw+IChib29sZWFuLAotICAgICAgICBkZWZhdWx0IHRydWUp IHRvIGluY2x1ZGUgPGNvbW1hbmQ+R1JBTlQ8L2NvbW1hbmQ+IHN0YXRlbWVudHMgZm9yCi0gICAg ICAgIHJvbGUgbWVtYmVyc2hpcHMgYW5kIHRoZWlyIG9wdGlvbnMuCisgICAgICAgIElmIDxwYXJh bWV0ZXI+cHJldHR5PC9wYXJhbWV0ZXI+IGlzIHRydWUsIHRoZSBvdXRwdXQgaXMgZm9ybWF0dGVk IHdpdGgKKyAgICAgICAgbmV3bGluZXMgYW5kIGluZGVudGF0aW9uLgorICAgICAgICBJZiA8cGFy YW1ldGVyPm1lbWJlcnNoaXBzPC9wYXJhbWV0ZXI+IGlzIHRydWUgKHRoZSBkZWZhdWx0KSwKKyAg ICAgICAgPGNvbW1hbmQ+R1JBTlQ8L2NvbW1hbmQ+IHN0YXRlbWVudHMgZm9yIHJvbGUgbWVtYmVy c2hpcHMgYW5kIHRoZWlyCisgICAgICAgIG9wdGlvbnMgYXJlIGluY2x1ZGVkLgorICAgICAgICBG b3IgZXhhbXBsZToKKzxwcm9ncmFtbGlzdGluZz4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3JvbGVf ZGRsKCdteXJvbGUnLCBtZW1iZXJzaGlwcyA9Jmd0OyBmYWxzZSwgcHJldHR5ID0mZ3Q7IHRydWUp OworPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgIDwvcm93 PgogICAgICAgPHJvdz4KQEAgLTM5MTcsMTUgKzM5MjQsMTkgQEAgYWNsICAgICAgfCB7cG9zdGdy ZXM9YXJ3ZER4dG0vcG9zdGdyZXMsZm9vPXIvcG9zdGdyZXN9CiAgICAgICAgIDwvaW5kZXh0ZXJt PgogICAgICAgICA8ZnVuY3Rpb24+cGdfZ2V0X3RhYmxlc3BhY2VfZGRsPC9mdW5jdGlvbj4KICAg ICAgICAgKCA8cGFyYW1ldGVyPnRhYmxlc3BhY2U8L3BhcmFtZXRlcj4gPHR5cGU+b2lkPC90eXBl PgotICAgICAgICA8b3B0aW9uYWw+LCA8bGl0ZXJhbD5WQVJJQURJQzwvbGl0ZXJhbD4gPHBhcmFt ZXRlcj5vcHRpb25zPC9wYXJhbWV0ZXI+Ci0gICAgICAgIDx0eXBlPnRleHQ8L3R5cGU+IDwvb3B0 aW9uYWw+ICkKKyAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRlcj5wcmV0dHk8L3BhcmFtZXRl cj4gPHR5cGU+Ym9vbGVhbjwvdHlwZT4KKyAgICAgICAgPGxpdGVyYWw+REVGQVVMVCBmYWxzZTwv bGl0ZXJhbD4gPC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRlcj5vd25l cjwvcGFyYW1ldGVyPiA8dHlwZT5ib29sZWFuPC90eXBlPgorICAgICAgICA8bGl0ZXJhbD5ERUZB VUxUIHRydWU8L2xpdGVyYWw+IDwvb3B0aW9uYWw+ICkKICAgICAgICAgPHJldHVybnZhbHVlPnNl dG9mIHRleHQ8L3JldHVybnZhbHVlPgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAg ICAgICAgPGZ1bmN0aW9uPnBnX2dldF90YWJsZXNwYWNlX2RkbDwvZnVuY3Rpb24+CiAgICAgICAg ICggPHBhcmFtZXRlcj50YWJsZXNwYWNlPC9wYXJhbWV0ZXI+IDx0eXBlPm5hbWU8L3R5cGU+Ci0g ICAgICAgIDxvcHRpb25hbD4sIDxsaXRlcmFsPlZBUklBRElDPC9saXRlcmFsPiA8cGFyYW1ldGVy Pm9wdGlvbnM8L3BhcmFtZXRlcj4KLSAgICAgICAgPHR5cGU+dGV4dDwvdHlwZT4gPC9vcHRpb25h bD4gKQorICAgICAgICA8b3B0aW9uYWw+LCA8cGFyYW1ldGVyPnByZXR0eTwvcGFyYW1ldGVyPiA8 dHlwZT5ib29sZWFuPC90eXBlPgorICAgICAgICA8bGl0ZXJhbD5ERUZBVUxUIGZhbHNlPC9saXRl cmFsPiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+LCA8cGFyYW1ldGVyPm93bmVyPC9w YXJhbWV0ZXI+IDx0eXBlPmJvb2xlYW48L3R5cGU+CisgICAgICAgIDxsaXRlcmFsPkRFRkFVTFQg dHJ1ZTwvbGl0ZXJhbD4gPC9vcHRpb25hbD4gKQogICAgICAgICA8cmV0dXJudmFsdWU+c2V0b2Yg dGV4dDwvcmV0dXJudmFsdWU+CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgpAQCAtMzkz Myw5ICszOTQ0LDE0IEBAIGFjbCAgICAgIHwge3Bvc3RncmVzPWFyd2REeHRtL3Bvc3RncmVzLGZv bz1yL3Bvc3RncmVzfQogICAgICAgICB0aGUgc3BlY2lmaWVkIHRhYmxlc3BhY2UgKGJ5IE9JRCBv ciBuYW1lKS4gIElmIHRoZSB0YWJsZXNwYWNlIGhhcwogICAgICAgICBvcHRpb25zIHNldCwgYW4g PGNvbW1hbmQ+QUxURVIgVEFCTEVTUEFDRSAuLi4gU0VUPC9jb21tYW5kPiBzdGF0ZW1lbnQKICAg ICAgICAgaXMgYWxzbyByZXR1cm5lZC4gIEVhY2ggc3RhdGVtZW50IGlzIHJldHVybmVkIGFzIGEg c2VwYXJhdGUgcm93LgotICAgICAgICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRl ZDogPGxpdGVyYWw+cHJldHR5PC9saXRlcmFsPiAoYm9vbGVhbikKLSAgICAgICAgZm9yIGZvcm1h dHRlZCBvdXRwdXQgYW5kIDxsaXRlcmFsPm93bmVyPC9saXRlcmFsPiAoYm9vbGVhbikgdG8gaW5j bHVkZQotICAgICAgICA8bGl0ZXJhbD5PV05FUjwvbGl0ZXJhbD4uCisgICAgICAgIElmIDxwYXJh bWV0ZXI+cHJldHR5PC9wYXJhbWV0ZXI+IGlzIHRydWUsIHRoZSBvdXRwdXQgaXMgZm9ybWF0dGVk IHdpdGgKKyAgICAgICAgbmV3bGluZXMgYW5kIGluZGVudGF0aW9uLgorICAgICAgICBJZiA8cGFy YW1ldGVyPm93bmVyPC9wYXJhbWV0ZXI+IGlzIHRydWUgKHRoZSBkZWZhdWx0KSwgYW4KKyAgICAg ICAgPGxpdGVyYWw+T1dORVI8L2xpdGVyYWw+IGNsYXVzZSBpcyBpbmNsdWRlZC4KKyAgICAgICAg Rm9yIGV4YW1wbGU6Cis8cHJvZ3JhbWxpc3Rpbmc+CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZXNwYWNlX2RkbCgncGdfZGVmYXVsdCcsIHByZXR0eSA9Jmd0OyB0cnVlKTsKKzwvcHJvZ3JhbWxp c3Rpbmc+CiAgICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgICA8L3Jvdz4KICAgICAgIDxyb3c+ CkBAIC0zOTQ1LDggKzM5NjEsMTIgQEAgYWNsICAgICAgfCB7cG9zdGdyZXM9YXJ3ZER4dG0vcG9z dGdyZXMsZm9vPXIvcG9zdGdyZXN9CiAgICAgICAgIDwvaW5kZXh0ZXJtPgogICAgICAgICA8ZnVu Y3Rpb24+cGdfZ2V0X2RhdGFiYXNlX2RkbDwvZnVuY3Rpb24+CiAgICAgICAgICggPHBhcmFtZXRl cj5kYXRhYmFzZTwvcGFyYW1ldGVyPiA8dHlwZT5yZWdkYXRhYmFzZTwvdHlwZT4KLSAgICAgICAg PG9wdGlvbmFsPiwgPGxpdGVyYWw+VkFSSUFESUM8L2xpdGVyYWw+IDxwYXJhbWV0ZXI+b3B0aW9u czwvcGFyYW1ldGVyPgotICAgICAgICA8dHlwZT50ZXh0PC90eXBlPiA8L29wdGlvbmFsPiApCisg ICAgICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+cHJldHR5PC9wYXJhbWV0ZXI+IDx0eXBlPmJv b2xlYW48L3R5cGU+CisgICAgICAgIDxsaXRlcmFsPkRFRkFVTFQgZmFsc2U8L2xpdGVyYWw+IDwv b3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+b3duZXI8L3BhcmFtZXRl cj4gPHR5cGU+Ym9vbGVhbjwvdHlwZT4KKyAgICAgICAgPGxpdGVyYWw+REVGQVVMVCB0cnVlPC9s aXRlcmFsPiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+LCA8cGFyYW1ldGVyPnRhYmxl c3BhY2U8L3BhcmFtZXRlcj4gPHR5cGU+Ym9vbGVhbjwvdHlwZT4KKyAgICAgICAgPGxpdGVyYWw+ REVGQVVMVCB0cnVlPC9saXRlcmFsPiA8L29wdGlvbmFsPiApCiAgICAgICAgIDxyZXR1cm52YWx1 ZT5zZXRvZiB0ZXh0PC9yZXR1cm52YWx1ZT4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+ CkBAIC0zOTU0LDExICszOTc0LDE2IEBAIGFjbCAgICAgIHwge3Bvc3RncmVzPWFyd2REeHRtL3Bv c3RncmVzLGZvbz1yL3Bvc3RncmVzfQogICAgICAgICBzcGVjaWZpZWQgZGF0YWJhc2UsIGZvbGxv d2VkIGJ5IDxjb21tYW5kPkFMVEVSIERBVEFCQVNFPC9jb21tYW5kPgogICAgICAgICBzdGF0ZW1l bnRzIGZvciBjb25uZWN0aW9uIGxpbWl0LCB0ZW1wbGF0ZSBzdGF0dXMsIGFuZCBjb25maWd1cmF0 aW9uCiAgICAgICAgIHNldHRpbmdzLiAgRWFjaCBzdGF0ZW1lbnQgaXMgcmV0dXJuZWQgYXMgYSBz ZXBhcmF0ZSByb3cuCi0gICAgICAgIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgc3VwcG9ydGVk OgotICAgICAgICA8bGl0ZXJhbD5wcmV0dHk8L2xpdGVyYWw+IChib29sZWFuKSBmb3IgZm9ybWF0 dGVkIG91dHB1dCwKLSAgICAgICAgPGxpdGVyYWw+b3duZXI8L2xpdGVyYWw+IChib29sZWFuKSB0 byBpbmNsdWRlIDxsaXRlcmFsPk9XTkVSPC9saXRlcmFsPiwKLSAgICAgICAgYW5kIDxsaXRlcmFs PnRhYmxlc3BhY2U8L2xpdGVyYWw+IChib29sZWFuKSB0byBpbmNsdWRlCi0gICAgICAgIDxsaXRl cmFsPlRBQkxFU1BBQ0U8L2xpdGVyYWw+LgorICAgICAgICBJZiA8cGFyYW1ldGVyPnByZXR0eTwv cGFyYW1ldGVyPiBpcyB0cnVlLCB0aGUgb3V0cHV0IGlzIGZvcm1hdHRlZCB3aXRoCisgICAgICAg IG5ld2xpbmVzIGFuZCBpbmRlbnRhdGlvbi4KKyAgICAgICAgSWYgPHBhcmFtZXRlcj5vd25lcjwv cGFyYW1ldGVyPiBpcyB0cnVlICh0aGUgZGVmYXVsdCksIGFuCisgICAgICAgIDxsaXRlcmFsPk9X TkVSPC9saXRlcmFsPiBjbGF1c2UgaXMgaW5jbHVkZWQuCisgICAgICAgIElmIDxwYXJhbWV0ZXI+ dGFibGVzcGFjZTwvcGFyYW1ldGVyPiBpcyB0cnVlICh0aGUgZGVmYXVsdCksIGEKKyAgICAgICAg PGxpdGVyYWw+VEFCTEVTUEFDRTwvbGl0ZXJhbD4gY2xhdXNlIGlzIGluY2x1ZGVkLgorICAgICAg ICBGb3IgZXhhbXBsZToKKzxwcm9ncmFtbGlzdGluZz4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X2Rh dGFiYXNlX2RkbCgnbXlkYicsIHByZXR0eSA9Jmd0OyB0cnVlLCB0YWJsZXNwYWNlID0mZ3Q7IGZh bHNlKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgICA8 L3Jvdz4KICAgICAgPC90Ym9keT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9k ZGx1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMKaW5kZXggYjE2YzI3 N2QwMDAuLmYxOTkwMWQ3NTIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRs dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYwpAQCAtMzksNDIg KzM5LDEyIEBACiAjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKICNpbmNsdWRlICJ1dGlscy9n dWMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKLSNpbmNsdWRlICJ1dGlscy9wZ19s b2NhbGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy9ydWxldXRp bHMuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVz dGFtcC5oIgogI2luY2x1ZGUgInV0aWxzL3ZhcmxlbmEuaCIKIAotLyogT3B0aW9uIHZhbHVlIHR5 cGVzIGZvciBEREwgb3B0aW9uIHBhcnNpbmcgKi8KLXR5cGVkZWYgZW51bQotewotCURETF9PUFRf Qk9PTCwKLQlERExfT1BUX1RFWFQsCi0JRERMX09QVF9JTlQsCi19IERkbE9wdFR5cGU7Ci0KLS8q Ci0gKiBBIHNpbmdsZSBEREwgb3B0aW9uIGRlc2NyaXB0b3I6IGNhbGxlciBmaWxscyBpbiBuYW1l IGFuZCB0eXBlLAotICogcGFyc2VfZGRsX29wdGlvbnMgZmlsbHMgaW4gaXNzZXQgKyB0aGUgYXBw cm9wcmlhdGUgdmFsdWUgZmllbGQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IERkbE9wdGlvbgotewot CWNvbnN0IGNoYXIgKm5hbWU7CQkJLyogb3B0aW9uIG5hbWUgKGNhc2UtaW5zZW5zaXRpdmUgbWF0 Y2gpICovCi0JRGRsT3B0VHlwZQl0eXBlOwkJCS8qIGV4cGVjdGVkIHZhbHVlIHR5cGUgKi8KLQli b29sCQlpc3NldDsJCQkvKiB0cnVlIGlmIGNhbGxlciBzdXBwbGllZCB0aGlzIG9wdGlvbiAqLwot CS8qIGZpZWxkcyBmb3Igc3BlY2lmaWMgb3B0aW9uIHR5cGVzICovCi0JdW5pb24KLQl7Ci0JCWJv b2wJCWJvb2x2YWw7CS8qIGZpbGxlZCBpbiBmb3IgRERMX09QVF9CT09MICovCi0JCWNoYXIJICAg KnRleHR2YWw7CS8qIGZpbGxlZCBpbiBmb3IgRERMX09QVF9URVhUIChwYWxsb2MnZCkgKi8KLQkJ aW50CQkJaW50dmFsOwkJLyogZmlsbGVkIGluIGZvciBERExfT1BUX0lOVCAqLwotCX07Ci19IERk bE9wdGlvbjsKLQotCi1zdGF0aWMgdm9pZCBwYXJzZV9kZGxfb3B0aW9ucyhGdW5jdGlvbkNhbGxJ bmZvIGZjaW5mbywgaW50IHZhcmlhZGljX3N0YXJ0LAotCQkJCQkJCSAgRGRsT3B0aW9uICpvcHRz LCBpbnQgbm9wdHMpOwogc3RhdGljIHZvaWQgYXBwZW5kX2RkbF9vcHRpb24oU3RyaW5nSW5mbyBi dWYsIGJvb2wgcHJldHR5LCBpbnQgaW5kZW50LAogCQkJCQkJCSAgY29uc3QgY2hhciAqZm10LC4u LikKIAkJCXBnX2F0dHJpYnV0ZV9wcmludGYoNCwgNSk7CkBAIC04MywxNTAgKzUzLDExIEBAIHN0 YXRpYyB2b2lkIGFwcGVuZF9ndWNfdmFsdWUoU3RyaW5nSW5mbyBidWYsIGNvbnN0IGNoYXIgKm5h bWUsCiBzdGF0aWMgTGlzdCAqcGdfZ2V0X3JvbGVfZGRsX2ludGVybmFsKE9pZCByb2xlaWQsIGJv b2wgcHJldHR5LAogCQkJCQkJCQkJICBib29sIG1lbWJlcnNoaXBzKTsKIHN0YXRpYyBMaXN0ICpw Z19nZXRfdGFibGVzcGFjZV9kZGxfaW50ZXJuYWwoT2lkIHRzaWQsIGJvb2wgcHJldHR5LCBib29s IG5vX293bmVyKTsKLXN0YXRpYyBEYXR1bSBwZ19nZXRfdGFibGVzcGFjZV9kZGxfc3JmKEZ1bmN0 aW9uQ2FsbEluZm8gZmNpbmZvLCBPaWQgdHNpZCwgYm9vbCBpc251bGwpOworc3RhdGljIERhdHVt IHBnX2dldF90YWJsZXNwYWNlX2RkbF9zcmYoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIE9pZCB0 c2lkKTsKIHN0YXRpYyBMaXN0ICpwZ19nZXRfZGF0YWJhc2VfZGRsX2ludGVybmFsKE9pZCBkYmlk LCBib29sIHByZXR0eSwKIAkJCQkJCQkJCQkgIGJvb2wgbm9fb3duZXIsIGJvb2wgbm9fdGFibGVz cGFjZSk7CiAKIAotLyoKLSAqIHBhcnNlX2RkbF9vcHRpb25zCi0gKiAJCVBhcnNlIHZhcmlhZGlj IG5hbWUvdmFsdWUgb3B0aW9uIHBhaXJzCi0gKgotICogT3B0aW9ucyBhcmUgcGFzc2VkIGFzIGFs dGVybmF0aW5nIGtleS92YWx1ZSB0ZXh0IHBhaXJzLiAgVGhlIGNhbGxlcgotICogcHJvdmlkZXMg YW4gYXJyYXkgb2YgRGRsT3B0aW9uIGRlc2NyaXB0b3JzIHNwZWNpZnlpbmcgdGhlIGFjY2VwdGVk Ci0gKiBvcHRpb24gbmFtZXMgYW5kIHRoZWlyIHR5cGVzOyB0aGlzIGZ1bmN0aW9uIG1hdGNoZXMg ZWFjaCBzdXBwbGllZAotICogcGFpciBhZ2FpbnN0IHRoZSBhcnJheSwgdmFsaWRhdGVzIHRoZSB2 YWx1ZSwgYW5kIGZpbGxzIGluIHRoZQotICogcmVzdWx0IGZpZWxkcy4KLSAqLwotc3RhdGljIHZv aWQKLXBhcnNlX2RkbF9vcHRpb25zKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBpbnQgdmFyaWFk aWNfc3RhcnQsCi0JCQkJICBEZGxPcHRpb24gKm9wdHMsIGludCBub3B0cykKLXsKLQlEYXR1bQkg ICAqYXJnczsKLQlib29sCSAgICpudWxsczsKLQlPaWQJCSAgICp0eXBlczsKLQlpbnQJCQluYXJn czsKLQotCS8qIENsZWFyIGFsbCBvdXRwdXQgZmllbGRzICovCi0JZm9yIChpbnQgaSA9IDA7IGkg PCBub3B0czsgaSsrKQotCXsKLQkJb3B0c1tpXS5pc3NldCA9IGZhbHNlOwotCQlzd2l0Y2ggKG9w dHNbaV0udHlwZSkKLQkJewotCQkJY2FzZSBERExfT1BUX0JPT0w6Ci0JCQkJb3B0c1tpXS5ib29s dmFsID0gZmFsc2U7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERETF9PUFRfVEVYVDoKLQkJCQlvcHRz W2ldLnRleHR2YWwgPSBOVUxMOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERExfT1BUX0lOVDoKLQkJ CQlvcHRzW2ldLmludHZhbCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQluYXJncyA9IGV4 dHJhY3RfdmFyaWFkaWNfYXJncyhmY2luZm8sIHZhcmlhZGljX3N0YXJ0LCB0cnVlLAotCQkJCQkJ CQkgICZhcmdzLCAmdHlwZXMsICZudWxscyk7Ci0KLQlpZiAobmFyZ3MgPD0gMCkKLQkJcmV0dXJu OwotCi0JLyogSGFuZGxlIERFRkFVTFQgTlVMTCBjYXNlICovCi0JaWYgKG5hcmdzID09IDEgJiYg bnVsbHNbMF0pCi0JCXJldHVybjsKLQotCWlmIChuYXJncyAlIDIgIT0gMCkKLQkJZXJlcG9ydChF UlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKLQkJ CQkgZXJybXNnKCJ2YXJpYWRpYyBhcmd1bWVudHMgbXVzdCBiZSBuYW1lL3ZhbHVlIHBhaXJzIiks Ci0JCQkJIGVycmhpbnQoIlByb3ZpZGUgYW4gZXZlbiBudW1iZXIgb2YgdmFyaWFkaWMgYXJndW1l bnRzIHRoYXQgY2FuIGJlIGRpdmlkZWQgaW50byBwYWlycy4iKSkpOwotCi0JLyoKLQkgKiBGb3Ig ZWFjaCBvcHRpb24gbmFtZS92YWx1ZSBwYWlyLCBmaW5kIGNvcnJlc3BvbmRpbmcgcG9zaXRpb25h bCBvcHRpb24KLQkgKiBmb3IgdGhlIG9wdGlvbiBuYW1lLCBhbmQgYXNzaWduIHRoZSBvcHRpb24g dmFsdWUuCi0JICovCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBuYXJnczsgaSArPSAyKQotCXsKLQkJ Y2hhcgkgICAqbmFtZTsKLQkJY2hhcgkgICAqdmFsc3RyOwotCQlEZGxPcHRpb24gICpvcHQgPSBO VUxMOwotCi0JCWlmIChudWxsc1tpXSkKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAotCQkJCQkgZXJybXNnKCJvcHRpb24g bmFtZSBhdCB2YXJpYWRpYyBwb3NpdGlvbiAlZCBpcyBudWxsIiwgaSArIDEpKSk7Ci0KLQkJbmFt ZSA9IFRleHREYXR1bUdldENTdHJpbmcoYXJnc1tpXSk7Ci0KLQkJaWYgKG51bGxzW2kgKyAxXSkK LQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAotCQkJCQkgZXJybXNnKCJ2YWx1ZSBmb3Igb3B0aW9uIFwiJXNcIiBtdXN0IG5v dCBiZSBudWxsIiwgbmFtZSkpKTsKLQotCQkvKiBGaW5kIG1hdGNoaW5nIG9wdGlvbiBkZXNjcmlw dG9yICovCi0JCWZvciAoaW50IGogPSAwOyBqIDwgbm9wdHM7IGorKykKLQkJewotCQkJaWYgKHBn X3N0cmNhc2VjbXAobmFtZSwgb3B0c1tqXS5uYW1lKSA9PSAwKQotCQkJewotCQkJCW9wdCA9ICZv cHRzW2pdOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJaWYgKG9wdCA9PSBOVUxMKQotCQkJ ZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCi0JCQkJCSBlcnJtc2coInVucmVjb2duaXplZCBvcHRpb246IFwiJXNcIiIsIG5hbWUp KSk7Ci0KLQkJaWYgKG9wdC0+aXNzZXQpCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKLQkJCQkJIGVycm1zZygib3B0aW9u IFwiJXNcIiBpcyBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UiLAotCQkJCQkJCW5hbWUpKSk7Ci0K LQkJdmFsc3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhhcmdzW2kgKyAxXSk7Ci0KLQkJc3dpdGNo IChvcHQtPnR5cGUpCi0JCXsKLQkJCWNhc2UgRERMX09QVF9CT09MOgotCQkJCWlmICghcGFyc2Vf Ym9vbCh2YWxzdHIsICZvcHQtPmJvb2x2YWwpKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAotCQkJCQkJCSBlcnJt c2coImludmFsaWQgdmFsdWUgZm9yIGJvb2xlYW4gb3B0aW9uIFwiJXNcIjogJXMiLAotCQkJCQkJ CQkJbmFtZSwgdmFsc3RyKSkpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIERETF9PUFRfVEVYVDoK LQkJCQlvcHQtPnRleHR2YWwgPSB2YWxzdHI7Ci0JCQkJdmFsc3RyID0gTlVMTDsJLyogZG9uJ3Qg cGZyZWUgYmVsb3cgKi8KLQkJCQlicmVhazsKLQotCQkJY2FzZSBERExfT1BUX0lOVDoKLQkJCQl7 Ci0JCQkJCWNoYXIJICAgKmVuZHA7Ci0JCQkJCWxvbmcJCXZhbDsKLQotCQkJCQllcnJubyA9IDA7 Ci0JCQkJCXZhbCA9IHN0cnRvbCh2YWxzdHIsICZlbmRwLCAxMCk7Ci0JCQkJCWlmICgqZW5kcCAh PSAnXDAnIHx8IGVycm5vID09IEVSQU5HRSB8fAotCQkJCQkJdmFsIDwgUEdfSU5UMzJfTUlOIHx8 IHZhbCA+IFBHX0lOVDMyX01BWCkKLQkJCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAotCQkJCQkJCQkgZXJybXNnKCJp bnZhbGlkIHZhbHVlIGZvciBpbnRlZ2VyIG9wdGlvbiBcIiVzXCI6ICVzIiwKLQkJCQkJCQkJCQlu YW1lLCB2YWxzdHIpKSk7Ci0JCQkJCW9wdC0+aW50dmFsID0gKGludCkgdmFsOwotCQkJCX0KLQkJ CQlicmVhazsKLQkJfQotCi0JCW9wdC0+aXNzZXQgPSB0cnVlOwotCi0JCWlmICh2YWxzdHIpCi0J CQlwZnJlZSh2YWxzdHIpOwotCQlwZnJlZShuYW1lKTsKLQl9Ci19Ci0KIC8qCiAgKiBIZWxwZXIg dG8gYXBwZW5kIGEgZm9ybWF0dGVkIHN0cmluZyB3aXRoIG9wdGlvbmFsIHByZXR0eS1wcmludGlu Zy4KICAqLwpAQCAtNjAxLDI3ICs0MzIsMTMgQEAgcGdfZ2V0X3JvbGVfZGRsKFBHX0ZVTkNUSU9O X0FSR1MpCiAJaWYgKFNSRl9JU19GSVJTVENBTEwoKSkKIAl7CiAJCU1lbW9yeUNvbnRleHQgb2xk Y29udGV4dDsKLQkJT2lkCQkJcm9sZWlkOwotCQlEZGxPcHRpb24Jb3B0c1tdID0gewotCQkJeyJw cmV0dHkiLCBERExfT1BUX0JPT0x9LAotCQkJeyJtZW1iZXJzaGlwcyIsIERETF9PUFRfQk9PTH0s Ci0JCX07CiAKIAkJZnVuY2N0eCA9IFNSRl9GSVJTVENBTExfSU5JVCgpOwogCQlvbGRjb250ZXh0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGZ1bmNjdHgtPm11bHRpX2NhbGxfbWVtb3J5X2N0eCk7 CiAKLQkJaWYgKFBHX0FSR0lTTlVMTCgwKSkKLQkJewotCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGNvbnRleHQpOwotCQkJU1JGX1JFVFVSTl9ET05FKGZ1bmNjdHgpOwotCQl9Ci0KLQkJcm9s ZWlkID0gUEdfR0VUQVJHX09JRCgwKTsKLQkJcGFyc2VfZGRsX29wdGlvbnMoZmNpbmZvLCAxLCBv cHRzLCBsZW5ndGhvZihvcHRzKSk7Ci0KLQkJc3RhdGVtZW50cyA9IHBnX2dldF9yb2xlX2RkbF9p bnRlcm5hbChyb2xlaWQsCi0JCQkJCQkJCQkJCSAgb3B0c1swXS5pc3NldCAmJiBvcHRzWzBdLmJv b2x2YWwsCi0JCQkJCQkJCQkJCSAgIW9wdHNbMV0uaXNzZXQgfHwgb3B0c1sxXS5ib29sdmFsKTsK KwkJc3RhdGVtZW50cyA9IHBnX2dldF9yb2xlX2RkbF9pbnRlcm5hbChQR19HRVRBUkdfT0lEKDAp LAorCQkJCQkJCQkJCQkgIFBHX0dFVEFSR19CT09MKDEpLAorCQkJCQkJCQkJCQkgIFBHX0dFVEFS R19CT09MKDIpKTsKIAkJZnVuY2N0eC0+dXNlcl9mY3R4ID0gc3RhdGVtZW50czsKIAkJZnVuY2N0 eC0+bWF4X2NhbGxzID0gbGlzdF9sZW5ndGgoc3RhdGVtZW50cyk7CiAKQEAgLTc1NSw3ICs1NzIs NyBAQCBwZ19nZXRfdGFibGVzcGFjZV9kZGxfaW50ZXJuYWwoT2lkIHRzaWQsIGJvb2wgcHJldHR5 LCBib29sIG5vX293bmVyKQogICogcGdfZ2V0X3RhYmxlc3BhY2VfZGRsX3NyZiAtIGNvbW1vbiBT UkYgbG9naWMgZm9yIHRhYmxlc3BhY2UgRERMCiAgKi8KIHN0YXRpYyBEYXR1bQotcGdfZ2V0X3Rh Ymxlc3BhY2VfZGRsX3NyZihGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgT2lkIHRzaWQsIGJvb2wg aXNudWxsKQorcGdfZ2V0X3RhYmxlc3BhY2VfZGRsX3NyZihGdW5jdGlvbkNhbGxJbmZvIGZjaW5m bywgT2lkIHRzaWQpCiB7CiAJRnVuY0NhbGxDb250ZXh0ICpmdW5jY3R4OwogCUxpc3QJICAgKnN0 YXRlbWVudHM7CkBAIC03NjMsMjUgKzU4MCwxMyBAQCBwZ19nZXRfdGFibGVzcGFjZV9kZGxfc3Jm KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBPaWQgdHNpZCwgYm9vbCBpc251bGwpCiAJaWYgKFNS Rl9JU19GSVJTVENBTEwoKSkKIAl7CiAJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKLQkJRGRs T3B0aW9uCW9wdHNbXSA9IHsKLQkJCXsicHJldHR5IiwgRERMX09QVF9CT09MfSwKLQkJCXsib3du ZXIiLCBERExfT1BUX0JPT0x9LAotCQl9OwogCiAJCWZ1bmNjdHggPSBTUkZfRklSU1RDQUxMX0lO SVQoKTsKIAkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0 aV9jYWxsX21lbW9yeV9jdHgpOwogCi0JCWlmIChpc251bGwpCi0JCXsKLQkJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKLQkJCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKLQkJ fQotCi0JCXBhcnNlX2RkbF9vcHRpb25zKGZjaW5mbywgMSwgb3B0cywgbGVuZ3Rob2Yob3B0cykp OwotCiAJCXN0YXRlbWVudHMgPSBwZ19nZXRfdGFibGVzcGFjZV9kZGxfaW50ZXJuYWwodHNpZCwK LQkJCQkJCQkJCQkJCQlvcHRzWzBdLmlzc2V0ICYmIG9wdHNbMF0uYm9vbHZhbCwKLQkJCQkJCQkJ CQkJCQlvcHRzWzFdLmlzc2V0ICYmICFvcHRzWzFdLmJvb2x2YWwpOworCQkJCQkJCQkJCQkJCVBH X0dFVEFSR19CT09MKDEpLAorCQkJCQkJCQkJCQkJCSFQR19HRVRBUkdfQk9PTCgyKSk7CiAJCWZ1 bmNjdHgtPnVzZXJfZmN0eCA9IHN0YXRlbWVudHM7CiAJCWZ1bmNjdHgtPm1heF9jYWxscyA9IGxp c3RfbGVuZ3RoKHN0YXRlbWVudHMpOwogCkBAIC04MTMsMTQgKzYxOCw3IEBAIHBnX2dldF90YWJs ZXNwYWNlX2RkbF9zcmYoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIE9pZCB0c2lkLCBib29sIGlz bnVsbCkKIERhdHVtCiBwZ19nZXRfdGFibGVzcGFjZV9kZGxfb2lkKFBHX0ZVTkNUSU9OX0FSR1Mp CiB7Ci0JT2lkCQkJdHNpZCA9IEludmFsaWRPaWQ7Ci0JYm9vbAkJaXNudWxsOwotCi0JaXNudWxs ID0gUEdfQVJHSVNOVUxMKDApOwotCWlmICghaXNudWxsKQotCQl0c2lkID0gUEdfR0VUQVJHX09J RCgwKTsKLQotCXJldHVybiBwZ19nZXRfdGFibGVzcGFjZV9kZGxfc3JmKGZjaW5mbywgdHNpZCwg aXNudWxsKTsKKwlyZXR1cm4gcGdfZ2V0X3RhYmxlc3BhY2VfZGRsX3NyZihmY2luZm8sIFBHX0dF VEFSR19PSUQoMCkpOwogfQogCiAvKgpAQCAtODMwLDE5ICs2MjgsMTAgQEAgcGdfZ2V0X3RhYmxl c3BhY2VfZGRsX29pZChQR19GVU5DVElPTl9BUkdTKQogRGF0dW0KIHBnX2dldF90YWJsZXNwYWNl X2RkbF9uYW1lKFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JT2lkCQkJdHNpZCA9IEludmFsaWRPaWQ7 Ci0JTmFtZQkJdHNwbmFtZTsKLQlib29sCQlpc251bGw7CisJTmFtZQkJdHNwbmFtZSA9IFBHX0dF VEFSR19OQU1FKDApOwogCi0JaXNudWxsID0gUEdfQVJHSVNOVUxMKDApOwotCi0JaWYgKCFpc251 bGwpCi0JewotCQl0c3BuYW1lID0gUEdfR0VUQVJHX05BTUUoMCk7Ci0JCXRzaWQgPSBnZXRfdGFi bGVzcGFjZV9vaWQoTmFtZVN0cigqdHNwbmFtZSksIGZhbHNlKTsKLQl9Ci0KLQlyZXR1cm4gcGdf Z2V0X3RhYmxlc3BhY2VfZGRsX3NyZihmY2luZm8sIHRzaWQsIGlzbnVsbCk7CisJcmV0dXJuIHBn X2dldF90YWJsZXNwYWNlX2RkbF9zcmYoZmNpbmZvLAorCQkJCQkJCQkJIGdldF90YWJsZXNwYWNl X29pZChOYW1lU3RyKCp0c3BuYW1lKSwgZmFsc2UpKTsKIH0KIAogLyoKQEAgLTExMjIsMjkgKzkx MSwxNCBAQCBwZ19nZXRfZGF0YWJhc2VfZGRsKFBHX0ZVTkNUSU9OX0FSR1MpCiAJaWYgKFNSRl9J U19GSVJTVENBTEwoKSkKIAl7CiAJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKLQkJT2lkCQkJ ZGJpZDsKLQkJRGRsT3B0aW9uCW9wdHNbXSA9IHsKLQkJCXsicHJldHR5IiwgRERMX09QVF9CT09M fSwKLQkJCXsib3duZXIiLCBERExfT1BUX0JPT0x9LAotCQkJeyJ0YWJsZXNwYWNlIiwgRERMX09Q VF9CT09MfSwKLQkJfTsKIAogCQlmdW5jY3R4ID0gU1JGX0ZJUlNUQ0FMTF9JTklUKCk7CiAJCW9s ZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0eC0+bXVsdGlfY2FsbF9tZW1v cnlfY3R4KTsKIAotCQlpZiAoUEdfQVJHSVNOVUxMKDApKQotCQl7Ci0JCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY29udGV4dCk7Ci0JCQlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7Ci0JCX0K LQotCQlkYmlkID0gUEdfR0VUQVJHX09JRCgwKTsKLQkJcGFyc2VfZGRsX29wdGlvbnMoZmNpbmZv LCAxLCBvcHRzLCBsZW5ndGhvZihvcHRzKSk7Ci0KLQkJc3RhdGVtZW50cyA9IHBnX2dldF9kYXRh YmFzZV9kZGxfaW50ZXJuYWwoZGJpZCwKLQkJCQkJCQkJCQkJCSAgb3B0c1swXS5pc3NldCAmJiBv cHRzWzBdLmJvb2x2YWwsCi0JCQkJCQkJCQkJCQkgIG9wdHNbMV0uaXNzZXQgJiYgIW9wdHNbMV0u Ym9vbHZhbCwKLQkJCQkJCQkJCQkJCSAgb3B0c1syXS5pc3NldCAmJiAhb3B0c1syXS5ib29sdmFs KTsKKwkJc3RhdGVtZW50cyA9IHBnX2dldF9kYXRhYmFzZV9kZGxfaW50ZXJuYWwoUEdfR0VUQVJH X09JRCgwKSwKKwkJCQkJCQkJCQkJCSAgUEdfR0VUQVJHX0JPT0woMSksCisJCQkJCQkJCQkJCQkg ICFQR19HRVRBUkdfQk9PTCgyKSwKKwkJCQkJCQkJCQkJCSAgIVBHX0dFVEFSR19CT09MKDMpKTsK IAkJZnVuY2N0eC0+dXNlcl9mY3R4ID0gc3RhdGVtZW50czsKIAkJZnVuY2N0eC0+bWF4X2NhbGxz ID0gbGlzdF9sZW5ndGgoc3RhdGVtZW50cyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4 IDNlYTE3ZmM1NjI5Li4xYjViNmE2ODNkMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC04 NjEwLDM2ICs4NjEwLDMyIEBACiAgIHByb25hbWUgPT4gJ3BnX2dldF9jb25zdHJhaW50ZGVmJywg cHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKICAgcHJvYXJndHlwZXMg PT4gJ29pZCBib29sJywgcHJvc3JjID0+ICdwZ19nZXRfY29uc3RyYWludGRlZl9leHQnIH0sCiB7 IG9pZCA9PiAnODc2MCcsIGRlc2NyID0+ICdnZXQgRERMIHRvIHJlY3JlYXRlIGEgcm9sZScsCi0g IHByb25hbWUgPT4gJ3BnX2dldF9yb2xlX2RkbCcsIHByb3ZhcmlhZGljID0+ICd0ZXh0JywgcHJv aXNzdHJpY3QgPT4gJ2YnLAorICBwcm9uYW1lID0+ICdwZ19nZXRfcm9sZV9kZGwnLAogICBwcm92 b2xhdGlsZSA9PiAncycsIHByb3JldHNldCA9PiAndCcsIHByb3Jvd3MgPT4gJzEwJywgcHJvcmV0 dHlwZSA9PiAndGV4dCcsCi0gIHByb2FyZ3R5cGVzID0+ICdyZWdyb2xlIHRleHQnLAotICBwcm9h cmdtb2RlcyA9PiAne2ksdn0nLAotICBwcm9hbGxhcmd0eXBlcyA9PiAne3JlZ3JvbGUsdGV4dH0n LAotICBwcm9uYXJnZGVmYXVsdHMgPT4gJzEnLCBwcm9hcmdkZWZhdWx0cyA9PiAne05VTEx9JywK KyAgcHJvYXJndHlwZXMgPT4gJ3JlZ3JvbGUgYm9vbCBib29sJywKKyAgcHJvYXJnbmFtZXMgPT4g J3tyb2xlaWQscHJldHR5LG1lbWJlcnNoaXBzfScsCisgIHByb25hcmdkZWZhdWx0cyA9PiAnMics IHByb2FyZ2RlZmF1bHRzID0+ICd7ZmFsc2UsdHJ1ZX0nLAogICBwcm9zcmMgPT4gJ3BnX2dldF9y b2xlX2RkbCcgfSwKIHsgb2lkID0+ICc4NzU4JywgZGVzY3IgPT4gJ2dldCBEREwgdG8gcmVjcmVh dGUgYSB0YWJsZXNwYWNlJywKLSAgcHJvbmFtZSA9PiAncGdfZ2V0X3RhYmxlc3BhY2VfZGRsJywg cHJvdmFyaWFkaWMgPT4gJ3RleHQnLCBwcm9pc3N0cmljdCA9PiAnZicsCisgIHByb25hbWUgPT4g J3BnX2dldF90YWJsZXNwYWNlX2RkbCcsCiAgIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcmV0c2V0 ID0+ICd0JywgcHJvcm93cyA9PiAnMTAnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKLSAgcHJvYXJn dHlwZXMgPT4gJ29pZCB0ZXh0JywKLSAgcHJvYXJnbW9kZXMgPT4gJ3tpLHZ9JywKLSAgcHJvYWxs YXJndHlwZXMgPT4gJ3tvaWQsdGV4dH0nLAotICBwcm9uYXJnZGVmYXVsdHMgPT4gJzEnLCBwcm9h cmdkZWZhdWx0cyA9PiAne05VTEx9JywKKyAgcHJvYXJndHlwZXMgPT4gJ29pZCBib29sIGJvb2wn LAorICBwcm9hcmduYW1lcyA9PiAne3RhYmxlc3BhY2Vfb2lkLHByZXR0eSxvd25lcn0nLAorICBw cm9uYXJnZGVmYXVsdHMgPT4gJzInLCBwcm9hcmdkZWZhdWx0cyA9PiAne2ZhbHNlLHRydWV9JywK ICAgcHJvc3JjID0+ICdwZ19nZXRfdGFibGVzcGFjZV9kZGxfb2lkJyB9LAogeyBvaWQgPT4gJzg3 NTknLCBkZXNjciA9PiAnZ2V0IERETCB0byByZWNyZWF0ZSBhIHRhYmxlc3BhY2UnLAotICBwcm9u YW1lID0+ICdwZ19nZXRfdGFibGVzcGFjZV9kZGwnLCBwcm92YXJpYWRpYyA9PiAndGV4dCcsIHBy b2lzc3RyaWN0ID0+ICdmJywKKyAgcHJvbmFtZSA9PiAncGdfZ2V0X3RhYmxlc3BhY2VfZGRsJywK ICAgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9yZXRzZXQgPT4gJ3QnLCBwcm9yb3dzID0+ICcxMCcs IHByb3JldHR5cGUgPT4gJ3RleHQnLAotICBwcm9hcmd0eXBlcyA9PiAnbmFtZSB0ZXh0JywKLSAg cHJvYXJnbW9kZXMgPT4gJ3tpLHZ9JywKLSAgcHJvYWxsYXJndHlwZXMgPT4gJ3tuYW1lLHRleHR9 JywKLSAgcHJvbmFyZ2RlZmF1bHRzID0+ICcxJywgcHJvYXJnZGVmYXVsdHMgPT4gJ3tOVUxMfScs CisgIHByb2FyZ3R5cGVzID0+ICduYW1lIGJvb2wgYm9vbCcsCisgIHByb2FyZ25hbWVzID0+ICd7 dGFibGVzcGFjZV9uYW1lLHByZXR0eSxvd25lcn0nLAorICBwcm9uYXJnZGVmYXVsdHMgPT4gJzIn LCBwcm9hcmdkZWZhdWx0cyA9PiAne2ZhbHNlLHRydWV9JywKICAgcHJvc3JjID0+ICdwZ19nZXRf dGFibGVzcGFjZV9kZGxfbmFtZScgfSwKIHsgb2lkID0+ICc4NzYyJywgZGVzY3IgPT4gJ2dldCBE REwgdG8gcmVjcmVhdGUgYSBkYXRhYmFzZScsCi0gIHByb25hbWUgPT4gJ3BnX2dldF9kYXRhYmFz ZV9kZGwnLCBwcm92YXJpYWRpYyA9PiAndGV4dCcsIHByb2lzc3RyaWN0ID0+ICdmJywKKyAgcHJv bmFtZSA9PiAncGdfZ2V0X2RhdGFiYXNlX2RkbCcsCiAgIHByb3ZvbGF0aWxlID0+ICdzJywgcHJv cmV0c2V0ID0+ICd0JywgcHJvcm93cyA9PiAnMTAnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKLSAg cHJvYXJndHlwZXMgPT4gJ3JlZ2RhdGFiYXNlIHRleHQnLAotICBwcm9hcmdtb2RlcyA9PiAne2ks dn0nLAotICBwcm9hbGxhcmd0eXBlcyA9PiAne3JlZ2RhdGFiYXNlLHRleHR9JywKLSAgcHJvbmFy Z2RlZmF1bHRzID0+ICcxJywgcHJvYXJnZGVmYXVsdHMgPT4gJ3tOVUxMfScsCisgIHByb2FyZ3R5 cGVzID0+ICdyZWdkYXRhYmFzZSBib29sIGJvb2wgYm9vbCcsCisgIHByb2FyZ25hbWVzID0+ICd7 ZGF0YWJhc2UscHJldHR5LG93bmVyLHRhYmxlc3BhY2V9JywKKyAgcHJvbmFyZ2RlZmF1bHRzID0+ ICczJywgcHJvYXJnZGVmYXVsdHMgPT4gJ3tmYWxzZSx0cnVlLHRydWV9JywKICAgcHJvc3JjID0+ ICdwZ19nZXRfZGF0YWJhc2VfZGRsJyB9LAogeyBvaWQgPT4gJzI1MDknLAogICBkZXNjciA9PiAn ZGVwYXJzZSBhbiBlbmNvZGVkIGV4cHJlc3Npb24gd2l0aCBwcmV0dHktcHJpbnQgb3B0aW9uJywK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZGF0YWJhc2VfZGRsLm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZGF0YWJhc2VfZGRsLm91dAppbmRleCA5NzY1N2U1 MmNmYS4uNjczMzIyMTJmNTYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv ZGF0YWJhc2VfZGRsLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2RhdGFiYXNl X2RkbC5vdXQKQEAgLTM2LDEyICszNiw2IEBAIFNFTEVDVCAqIEZST00gcGdfZ2V0X2RhdGFiYXNl X2RkbChOVUxMKTsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKDAgcm93cykKIAotLS0gSW52YWxp ZCBvcHRpb24gdmFsdWUgKHNob3VsZCBlcnJvcikKLVNFTEVDVCAqIEZST00gcGdfZ2V0X2RhdGFi YXNlX2RkbCgncmVncmVzc2lvbl9kYXRhYmFzZV9kZGwnLCAnb3duZXInLCAnaW52YWxpZCcpOwot RVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBib29sZWFuIG9wdGlvbiAib3duZXIiOiBpbnZhbGlk Ci0tLSBEdXBsaWNhdGUgb3B0aW9uIChzaG91bGQgZXJyb3IpCi1TRUxFQ1QgKiBGUk9NIHBnX2dl dF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fZGF0YWJhc2VfZGRsJywgJ293bmVyJywgJ2ZhbHNl JywgJ293bmVyJywgJ3RydWUnKTsKLUVSUk9SOiAgb3B0aW9uICJvd25lciIgaXMgc3BlY2lmaWVk IG1vcmUgdGhhbiBvbmNlCiAtLSBXaXRob3V0IG9wdGlvbnMKIFNFTEVDVCBkZGxfZmlsdGVyKHBn X2dldF9kYXRhYmFzZV9kZGwpIEZST00gcGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl9k YXRhYmFzZV9kZGwnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRs X2ZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC01Myw3ICs0 Nyw3IEBAIFNFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwpIEZST00gcGdfZ2V0 X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl9kYXRhCiAoNCByb3dzKQogCiAtLSBXaXRoIG93bmVy Ci1TRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKSBGUk9NIHBnX2dldF9kYXRh YmFzZV9kZGwoJ3JlZ3Jlc3Npb25fZGF0YWJhc2VfZGRsJywgJ293bmVyJywgJ3RydWUnKTsKK1NF TEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwpIEZST00gcGdfZ2V0X2RhdGFiYXNl X2RkbCgncmVncmVzc2lvbl9kYXRhYmFzZV9kZGwnLCBvd25lciA9PiB0cnVlKTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRsX2ZpbHRlciAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIENS RUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX2RhdGFiYXNlX2RkbCBXSVRIIFRFTVBMQVRFID0gdGVt cGxhdGUwIEVOQ09ESU5HID0gJ1VURjgnOwpAQCAtNjQsNyArNTgsNyBAQCBTRUxFQ1QgZGRsX2Zp bHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKSBGUk9NIHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jl c3Npb25fZGF0YQogCiAtLSBQcmV0dHktcHJpbnRlZCBvdXRwdXQKIFxwc2V0IGZvcm1hdCB1bmFs aWduZWQKLVNFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwpIEZST00gcGdfZ2V0 X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl9kYXRhYmFzZV9kZGwnLCAncHJldHR5JywgJ3RydWUn LCAndGFibGVzcGFjZScsICdmYWxzZScpOworU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFi YXNlX2RkbCkgRlJPTSBwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX2RhdGFiYXNlX2Rk bCcsIHByZXR0eSA9PiB0cnVlLCB0YWJsZXNwYWNlID0+IGZhbHNlKTsKIGRkbF9maWx0ZXIKIENS RUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX2RhdGFiYXNlX2RkbAogICAgIFdJVEggVEVNUExBVEUg PSB0ZW1wbGF0ZTAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcm9sZV9k ZGwub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9yb2xlX2RkbC5vdXQKaW5kZXggNTc1 MTExZGE1NWMuLmU4N2UxNjhlMWY1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3JvbGVfZGRsLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3JvbGVfZGRs Lm91dApAQCAtNjUsNyArNjUsNyBAQCBTRUxFQ1QgKiBGUk9NIHBnX2dldF9yb2xlX2RkbCgncmVn cmVzc19yb2xlLXdpdGgtZGFzaCcpOwogCiAtLSBQcmV0dHktcHJpbnRlZCBvdXRwdXQKIFxwc2V0 IGZvcm1hdCB1bmFsaWduZWQKLVNFTEVDVCAqIEZST00gcGdfZ2V0X3JvbGVfZGRsKCdyZWdyZXNz X3JvbGVfZGRsX3Rlc3QzJywgJ3ByZXR0eScsICd0cnVlJyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF9yb2xlX2RkbCgncmVncmVzc19yb2xlX2RkbF90ZXN0MycsIHByZXR0eSA9PiB0cnVlKTsKIHBn X2dldF9yb2xlX2RkbAogQ1JFQVRFIFJPTEUgcmVncmVzc19yb2xlX2RkbF90ZXN0MwogICAgIFNV UEVSVVNFUgpAQCAtOTksNyArOTksNyBAQCBTRUxFQ1QgKiBGUk9NIHBnX2dldF9yb2xlX2RkbCgn cmVncmVzc19yb2xlX2RkbF9tZW1iZXInKTsKICgzIHJvd3MpCiAKIC0tIFJvbGUgd2l0aCBtZW1i ZXJzaGlwcyBzdXBwcmVzc2VkCi1TRUxFQ1QgKiBGUk9NIHBnX2dldF9yb2xlX2RkbCgncmVncmVz c19yb2xlX2RkbF9tZW1iZXInLCAnbWVtYmVyc2hpcHMnLCAnZmFsc2UnKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3JvbGVfZGRsKCdyZWdyZXNzX3JvbGVfZGRsX21lbWJlcicsIG1lbWJlcnNoaXBz ID0+IGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3JvbGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogIENSRUFURSBST0xFIHJlZ3Jlc3Nfcm9sZV9kZGxfbWVtYmVy IE5PU1VQRVJVU0VSIElOSEVSSVQgTk9DUkVBVEVST0xFIE5PQ1JFQVRFREIgTk9MT0dJTiBOT1JF UExJQ0FUSU9OIE5PQllQQVNTUkxTOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC90YWJsZXNwYWNlX2RkbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RhYmxl c3BhY2VfZGRsLm91dAppbmRleCBlNTIwNDMyNzNhOS4uNGYwZjQ0MDFkMmYgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdGFibGVzcGFjZV9kZGwub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdGFibGVzcGFjZV9kZGwub3V0CkBAIC00Myw3ICs0Myw3IEBA IFNFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlc3BhY2VfZGRsKCdyZWdyZXNzX2FsbG9wdF90Ymxz cCcpOwogCiAtLSBwcmV0dHktcHJpbnRlZCBvdXRwdXQKIFxwc2V0IGZvcm1hdCB1bmFsaWduZWQK LVNFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlc3BhY2VfZGRsKCdyZWdyZXNzX2FsbG9wdF90Ymxz cCcsICdwcmV0dHknLCAndHJ1ZScpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVzcGFjZV9k ZGwoJ3JlZ3Jlc3NfYWxsb3B0X3RibHNwJywgcHJldHR5ID0+IHRydWUpOwogcGdfZ2V0X3RhYmxl c3BhY2VfZGRsCiBDUkVBVEUgVEFCTEVTUEFDRSByZWdyZXNzX2FsbG9wdF90YmxzcAogICAgIE9X TkVSIHJlZ3Jlc3NfdGJsc3BjX2RkbF91c2VyCkBAIC01Miw3ICs1Miw3IEBAIEFMVEVSIFRBQkxF U1BBQ0UgcmVncmVzc19hbGxvcHRfdGJsc3AgU0VUIChzZXFfcGFnZV9jb3N0PScxLjUnLCByYW5k b21fcGFnZV9jb3N0CiAoMiByb3dzKQogXHBzZXQgZm9ybWF0IGFsaWduZWQKIC0tIHRhYmxlc3Bh Y2Ugd2l0aCBvd25lciBzdXBwcmVzc2VkCi1TRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZXNwYWNl X2RkbCgncmVncmVzc19hbGxvcHRfdGJsc3AnLCAnb3duZXInLCAnZmFsc2UnKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlc3BhY2VfZGRsKCdyZWdyZXNzX2FsbG9wdF90YmxzcCcsIG93bmVy ID0+IGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlc3BhY2VfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ICBDUkVBVEUgVEFCTEVTUEFDRSByZWdyZXNzX2FsbG9wdF90YmxzcCBMT0NBVElPTiAnJzsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2RhdGFiYXNlX2RkbC5zcWwgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9kYXRhYmFzZV9kZGwuc3FsCmluZGV4IDg5NzUzYWM2NDExLi41NDdlNGQw ZjgwMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZGF0YWJhc2VfZGRsLnNxbAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9kYXRhYmFzZV9kZGwuc3FsCkBAIC0zNSwyMSArMzUs MTYgQEAgU0VMRUNUICogRlJPTSBwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX2RhdGFi YXNlJyk7CiAtLSBOVUxMIHZhbHVlCiBTRUxFQ1QgKiBGUk9NIHBnX2dldF9kYXRhYmFzZV9kZGwo TlVMTCk7CiAKLS0tIEludmFsaWQgb3B0aW9uIHZhbHVlIChzaG91bGQgZXJyb3IpCi1TRUxFQ1Qg KiBGUk9NIHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fZGF0YWJhc2VfZGRsJywgJ293 bmVyJywgJ2ludmFsaWQnKTsKLQotLS0gRHVwbGljYXRlIG9wdGlvbiAoc2hvdWxkIGVycm9yKQot U0VMRUNUICogRlJPTSBwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX2RhdGFiYXNlX2Rk bCcsICdvd25lcicsICdmYWxzZScsICdvd25lcicsICd0cnVlJyk7CiAKIC0tIFdpdGhvdXQgb3B0 aW9ucwogU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCkgRlJPTSBwZ19nZXRf ZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX2RhdGFiYXNlX2RkbCcpOwogCiAtLSBXaXRoIG93bmVy Ci1TRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKSBGUk9NIHBnX2dldF9kYXRh YmFzZV9kZGwoJ3JlZ3Jlc3Npb25fZGF0YWJhc2VfZGRsJywgJ293bmVyJywgJ3RydWUnKTsKK1NF TEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwpIEZST00gcGdfZ2V0X2RhdGFiYXNl X2RkbCgncmVncmVzc2lvbl9kYXRhYmFzZV9kZGwnLCBvd25lciA9PiB0cnVlKTsKIAogLS0gUHJl dHR5LXByaW50ZWQgb3V0cHV0CiBccHNldCBmb3JtYXQgdW5hbGlnbmVkCi1TRUxFQ1QgZGRsX2Zp bHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKSBGUk9NIHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jl c3Npb25fZGF0YWJhc2VfZGRsJywgJ3ByZXR0eScsICd0cnVlJywgJ3RhYmxlc3BhY2UnLCAnZmFs c2UnKTsKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwpIEZST00gcGdfZ2V0 X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl9kYXRhYmFzZV9kZGwnLCBwcmV0dHkgPT4gdHJ1ZSwg dGFibGVzcGFjZSA9PiBmYWxzZSk7CiBccHNldCBmb3JtYXQgYWxpZ25lZAogCiAtLSBQZXJtaXNz aW9uIGNoZWNrOiByZXZva2UgQ09OTkVDVCBvbiBkYXRhYmFzZQpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvcm9sZV9kZGwuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcm9sZV9k ZGwuc3FsCmluZGV4IDNkMDE0MjI0MmVjLi4xNjY3YTFmNmUxMCAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvcm9sZV9kZGwuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jv bGVfZGRsLnNxbApAQCAtNDAsNyArNDAsNyBAQCBTRUxFQ1QgKiBGUk9NIHBnX2dldF9yb2xlX2Rk bCgncmVncmVzc19yb2xlLXdpdGgtZGFzaCcpOwogCiAtLSBQcmV0dHktcHJpbnRlZCBvdXRwdXQK IFxwc2V0IGZvcm1hdCB1bmFsaWduZWQKLVNFTEVDVCAqIEZST00gcGdfZ2V0X3JvbGVfZGRsKCdy ZWdyZXNzX3JvbGVfZGRsX3Rlc3QzJywgJ3ByZXR0eScsICd0cnVlJyk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF9yb2xlX2RkbCgncmVncmVzc19yb2xlX2RkbF90ZXN0MycsIHByZXR0eSA9PiB0cnVl KTsKIFxwc2V0IGZvcm1hdCBhbGlnbmVkCiAKIC0tIFJvbGUgd2l0aCBtZW1iZXJzaGlwcwpAQCAt NTcsNyArNTcsNyBAQCBSRVNFVCBST0xFOwogU0VMRUNUICogRlJPTSBwZ19nZXRfcm9sZV9kZGwo J3JlZ3Jlc3Nfcm9sZV9kZGxfbWVtYmVyJyk7CiAKIC0tIFJvbGUgd2l0aCBtZW1iZXJzaGlwcyBz dXBwcmVzc2VkCi1TRUxFQ1QgKiBGUk9NIHBnX2dldF9yb2xlX2RkbCgncmVncmVzc19yb2xlX2Rk bF9tZW1iZXInLCAnbWVtYmVyc2hpcHMnLCAnZmFsc2UnKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3JvbGVfZGRsKCdyZWdyZXNzX3JvbGVfZGRsX21lbWJlcicsIG1lbWJlcnNoaXBzID0+IGZhbHNl KTsKIAogLS0gTm9uLWV4aXN0ZW50IHJvbGUgKHNob3VsZCBlcnJvcikKIFNFTEVDVCAqIEZST00g cGdfZ2V0X3JvbGVfZGRsKDk5OTk5OTk6Om9pZCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC90YWJsZXNwYWNlX2RkbC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC90YWJsZXNw YWNlX2RkbC5zcWwKaW5kZXggZWUzY2M2ZTJlMWUuLmZlY2U5M2RmMjUxIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC90YWJsZXNwYWNlX2RkbC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvdGFibGVzcGFjZV9kZGwuc3FsCkBAIC0zMCwxMSArMzAsMTEgQEAgU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVzcGFjZV9kZGwoJ3JlZ3Jlc3NfYWxsb3B0X3RibHNwJyk7CiAKIC0t IHByZXR0eS1wcmludGVkIG91dHB1dAogXHBzZXQgZm9ybWF0IHVuYWxpZ25lZAotU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVzcGFjZV9kZGwoJ3JlZ3Jlc3NfYWxsb3B0X3RibHNwJywgJ3ByZXR0 eScsICd0cnVlJyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZXNwYWNlX2RkbCgncmVncmVz c19hbGxvcHRfdGJsc3AnLCBwcmV0dHkgPT4gdHJ1ZSk7CiBccHNldCBmb3JtYXQgYWxpZ25lZAog CiAtLSB0YWJsZXNwYWNlIHdpdGggb3duZXIgc3VwcHJlc3NlZAotU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVzcGFjZV9kZGwoJ3JlZ3Jlc3NfYWxsb3B0X3RibHNwJywgJ293bmVyJywgJ2ZhbHNl Jyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZXNwYWNlX2RkbCgncmVncmVzc19hbGxvcHRf dGJsc3AnLCBvd25lciA9PiBmYWxzZSk7CiAKIERST1AgVEFCTEVTUEFDRSByZWdyZXNzX2FsbG9w dF90YmxzcDsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBlOTQzMGUwN2IzNi4uZmJk MWY0OTlhZWMgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0Cisr KyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC02MzcsOCArNjM3LDYgQEAg RGF0YUNoZWNrc3Vtc1dvcmtlclJlc3VsdAogRGF0YURpclN5bmNNZXRob2QKIERhdGFEdW1wZXJQ dHIKIERhdGFQYWdlRGVsZXRlU3RhY2sKLURkbE9wdFR5cGUKLURkbE9wdGlvbgogRGF0YVR5cGVz VXNhZ2VDaGVja3MKIERhdGFUeXBlc1VzYWdlVmVyc2lvbkNoZWNrCiBEYXRhYmFzZUluZm8KCmJh c2UtY29tbWl0OiA5M2RjMWFjZTIwMDdmZTdjMTEwM2NjZGEzZDdiYzEzYjRlYjQzNTJmCi0tIAoy LjUzLjAKCg== --c3363d9b88134dc684ccad4569ddaca45dec3f3b09ce9950d86f4fc670cb--