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 1vhpS7-006xSM-0Y for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Jan 2026 13:37:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vhpS6-00DPRw-0U for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Jan 2026 13:37:54 +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 1vhpS5-00DPRm-1A for pgsql-hackers@lists.postgresql.org; Mon, 19 Jan 2026 13:37:54 +0000 Received: from fhigh-b4-smtp.messagingengine.com ([202.12.124.155]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vhpS2-001LNd-2I for pgsql-hackers@lists.postgresql.org; Mon, 19 Jan 2026 13:37:53 +0000 Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfhigh.stl.internal (Postfix) with ESMTP id 8510C7A00AE; Mon, 19 Jan 2026 08:37:47 -0500 (EST) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-05.internal (MEProxy); Mon, 19 Jan 2026 08:37:47 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eisentraut.org; h=cc:cc:content-type:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1768829867; x= 1768916267; bh=g7XDCnYiPJE79UouwHlu4Ux3+yY0Hmi0cEiW3kQGTkk=; b=h VhkEk5ZjljbW4JP42oreD0nrXEvG6iXr0/Cj3w9/Tk1uFkHtDFfDlWl4Iyigi04i SbqQNjnGMxH2doZxwCx3AYVqwDY0PFzl74M1xF1FIbj64zyWiDgr2b1NVFfQm1zI exehT27vkM0xku+5rz5nXuAo8BQR4o1pdQQRHFBdlB7qjig5EOlSFtp68DIIsFxG EXMxWzEf4VZ7SyyST+nQuKGpiBd/FmBc2PgyJQ/y/atRN+NQwUEd+424/O6aj7JA MQCp18zfIkBQWCPjjObwnZHlTxxAoK2wMHqaLdrGr0NAHqr4xAAQv05EpbP9T7Xv LAHwDeajYE5iUVL2bZOBA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t= 1768829867; x=1768916267; bh=g7XDCnYiPJE79UouwHlu4Ux3+yY0Hmi0cEi W3kQGTkk=; b=Y+5EhfBFRh6SHZAF66HL53YNSxQQI36KrnZL74mXMeaF5rnALEi kwdQEhMDGe7IDGaRvWOtWXmqzBdJ0wtBdGrWl9VpX30MHbycN8i4EyydaUWON/mY k7Yz/C8DW+kJFNBdT0YCMqC7pow9f1Abv4BPr1VjxRNhhOx2Dj+X3GafjgfJ/jEg GZpVPZ+8h6EJFVnyb5DV+kyiszITjoDRrhad/Blh+uIwZzXdZfUvaSss4vDZvO6v 82bA8gIyGSAIsqMWzBorerCD9L9TZm9uo4Il63KTW5OSAecSNBSxDPZ5QgI69zTl lWmh+t6gIpFMQFHUT8hwVFD31avKcg/Zf2Q== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefgedrtddtgddufeejjedtucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujf gurheptgfkffggfgfuvfevfhfhjgesmhdtreertddvjeenucfhrhhomheprfgvthgvrhcu gfhishgvnhhtrhgruhhtuceophgvthgvrhesvghishgvnhhtrhgruhhtrdhorhhgqeenuc ggtffrrghtthgvrhhnpeektdeutdfhvdfhveeigfffteegvdejvdfhhfevfeevgfdtgfel geehieevhffgieenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfh hrohhmpehpvghtvghrsegvihhsvghnthhrrghuthdrohhrghdpnhgspghrtghpthhtohep fedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepphhjsehilhhluhhmihhnrghtvg gutghomhhpuhhtihhnghdrtghomhdprhgtphhtthhopehlihdrvghvrghnrdgthhgrohes ghhmrghilhdrtghomhdprhgtphhtthhopehpghhsqhhlqdhhrggtkhgvrhhssehlihhsth hsrdhpohhsthhgrhgvshhqlhdrohhrgh X-ME-Proxy: Feedback-ID: ie0a040ee:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 19 Jan 2026 08:37:46 -0500 (EST) Content-Type: multipart/mixed; boundary="------------gfhPQx04K4rBXzVVjzSrXmBh" Message-ID: Date: Mon, 19 Jan 2026 14:37:43 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: SQL:2011 Application Time Update & Delete To: Paul A Jungwirth Cc: Chao Li , PostgreSQL Hackers References: <2f5364f3-a1d3-4410-98f3-d788b11e6525@eisentraut.org> <1ace7bc1-9dd4-42c9-a473-517cef37cce9@eisentraut.org> <6F8D7105-BD1C-432D-84F3-BC688C0C8EDC@gmail.com> <9B820A52-D2F6-465D-B258-6FE8EBA59FAE@gmail.com> <53a13f97-340f-4d04-9dcc-77ca3ffb6a6a@eisentraut.org> <85ac7f0e-d95f-4377-ade0-8941fd328012@eisentraut.org> <7d63ddfa-c735-4dfe-8c7a-4f1e2a621058@eisentraut.org> Content-Language: en-US From: Peter Eisentraut In-Reply-To: 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. --------------gfhPQx04K4rBXzVVjzSrXmBh Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 10.01.26 07:16, Paul A Jungwirth wrote: > We would need to document these columns. Done that. > The C code uses `mltrng` a lot. Do we want to use that here? I don't > see it in the catalog yet, but it seems clearer than `rngm`. I guess > we have to start with `rng` though. We have `rngmultitypid`, so maybe > `rngmulticonstr0`? Okay I understand why you went with `rngm`. I tuned the naming again in the new patch. I changed "constr" to "construct" because "constr" read too much like "constraint" to me. I also did a bit of "mtlrng". I think it's a bit more consistent and less ambiguous now. > It's tempting to use two oidvectors, one for range constructors and > another for multirange, with the 0-arg constructor in position 0, > 1-arg in position 1, etc. We could use InvalidOid to say there is no > such constructor. So we would have rngconstr of `{0,0,123,456}` and > mltrngconstr of `{123,456,789}`. But is it better to avoid varlena > columns if we can? I don't think oidvectors would be appropriate here. These are for when you have a group of values that you need together, like for function arguments. But here we want to access them separately. And it would create a lot of notational and a bit of storage overhead. I had in the previous patch used some arrays as arguments in the internal functions, but in the second patch I'm also getting rid of that because it's uselessly inconsistent. > ``` > diff --git a/src/include/catalog/pg_range.h b/src/include/catalog/pg_range.h > index 5b4f4615905..ad4d1e9187f 100644 > --- a/src/include/catalog/pg_range.h > +++ b/src/include/catalog/pg_range.h > @@ -43,6 +43,15 @@ CATALOG(pg_range,3541,RangeRelationId) > /* subtype's btree opclass */ > Oid rngsubopc BKI_LOOKUP(pg_opclass); > > + /* range constructor functions */ > + regproc rngconstr2 BKI_LOOKUP(pg_proc); > + regproc rngconstr3 BKI_LOOKUP(pg_proc); > + > + /* multirange constructor functions */ > + regproc rngmconstr0 BKI_LOOKUP(pg_proc); > + regproc rngmconstr1 BKI_LOOKUP(pg_proc); > + regproc rngmconstr2 BKI_LOOKUP(pg_proc); > + > /* canonicalize range, or 0 */ > regproc rngcanonical BKI_LOOKUP_OPT(pg_proc); > ``` > > Is there a reason you're adding them in the middle of the struct? It > doesn't help with packing. Well, initially I had done that so that the edits to pg_range.dat are easier. But I think this order makes some sense, because it has the mandatory data first and then the optional data later. But it doesn't matter much either way. > This needs some kind of pg_upgrade support I assume? It will have to > work for user-defined rangetypes too. No, I don't think there needs to be pg_upgrade support. Existing range types are dumped as CREATE TYPE ... RANGE commands, and when those get restored it will create the new catalog entries. --------------gfhPQx04K4rBXzVVjzSrXmBh Content-Type: text/plain; charset=UTF-8; name="v2-0001-Record-range-constructor-functions-in-pg_range.patch" Content-Disposition: attachment; filename*0="v2-0001-Record-range-constructor-functions-in-pg_range.patch" Content-Transfer-Encoding: base64 RnJvbSA4MmEwODc1NzNkZDYwNzY1MzIxYWJiNzkwNGRlMjcxNDA0ZTU5ZTZmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogTW9uLCAxOSBKYW4gMjAyNiAxMzo1NDo0MSArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjJdIFJlY29yZCByYW5nZSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgaW4gcGdf cmFuZ2UKCldoZW4gYSByYW5nZSB0eXBlIGlzIGNyZWF0ZWQsIHNldmVyYWwgY29uc3RydWN0 aW9uIGZ1bmN0aW9ucyBhcmUgYWxzbwpjcmVhdGVkLCB0d28gZm9yIHRoZSByYW5nZSB0eXBl IGFuZCB0aHJlZSBmb3IgdGhlIG11bHRpcmFuZ2UgdHlwZS4KVGhlc2UgaGF2ZSBhbiBpbnRl cm5hbCBkZXBlbmRlbmN5LCBzbyB0aGV5ICJiZWxvbmciIHRvIHRoZSByYW5nZSB0eXBlLgpC dXQgdGhlcmUgd2FzIG5vIHdheSB0byBpZGVudGlmeSB0aG9zZSBmdW5jdGlvbnMgd2hlbiBn aXZlbiBhIHJhbmdlCnR5cGUuICBBbiB1cGNvbWluZyBwYXRjaCBuZWVkcyBhY2Nlc3MgdG8g dGhlIHR3by0gb3IgcG9zc2libHkgdGhlCnRocmVlLWFyZ3VtZW50IHJhbmdlIGNvbnN0cnVj dG9yIGZ1bmN0aW9uIGZvciBhIGdpdmVuIHJhbmdlIHR5cGUuICBUaGUKb25seSB3YXkgdG8g ZG8gdGhhdCB3b3VsZCBiZSB3aXRoIGZyYWdpbGUgd29ya2Fyb3VuZHMgbGlrZSBtYXRjaGlu ZwpuYW1lcyBhbmQgYXJndW1lbnQgdHlwZXMuICBUaGUgY29ycmVjdCB3YXkgdG8gZG8gdGhh dCBraW5kIG9mIHRoaW5nIGlzCnRvIHJlY29yZCB0byB0aGUgbGlua3MgaW4gdGhlIHN5c3Rl bSBjYXRhbG9ncy4gIFRoaXMgaXMgd2hhdCB0aGlzCnBhdGNoIGRvZXMsIGl0IHJlY29yZHMg dGhlIE9JRHMgb2YgdGhlc2UgZml2ZSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgaW4KdGhlIHBn X3JhbmdlIGNhdGFsb2cuICAoQ3VycmVudGx5LCB0aGVyZSBpcyBubyBjb2RlIHRoYXQgbWFr ZXMgdXNlIG9mCnRoaXMuKQoKUmV2aWV3ZWQtYnk6IFBhdWwgQSBKdW5nd2lydGggPHBqQGls bHVtaW5hdGVkY29tcHV0aW5nLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdy ZXNxbC5vcmcvbWVzc2FnZS1pZC83ZDYzZGRmYS1jNzM1LTRkZmUtOGM3YS00ZjFlMmE2MjEw NTglNDBlaXNlbnRyYXV0Lm9yZwoKVE9ETzogY2F0dmVyc2lvbgotLS0KIGRvYy9zcmMvc2dt bC9jYXRhbG9ncy5zZ21sICAgICAgICAgICAgICAgIHwgNTQgKysrKysrKysrKysrKysrKysr KysrCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3JhbmdlLmMgICAgICAgICAgICB8ICA5ICsr Ky0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3R5cGVjbWRzLmMgICAgICAgICAgIHwgNDggKysr KysrKysrKysrKy0tLS0tCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3JhbmdlLmRhdCAgICAg ICAgICB8IDEyICsrKysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3JhbmdlLmggICAgICAg ICAgICB8IDEzICsrKystCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29pZGpvaW5zLm91 dCAgICB8ICA1ICsrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3R5cGVfc2FuaXR5Lm91 dCB8IDU5ICsrKysrKysrKysrKysrKysrKysrKystCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC90 eXBlX3Nhbml0eS5zcWwgICAgICB8IDQ3ICsrKysrKysrKysrKysrKysrLQogOCBmaWxlcyBj aGFuZ2VkLCAyMzAgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Mu c2dtbAppbmRleCAyZmM2MzQ0Mjk4MC4uMzMyMTkzNTY1ZTIgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21s CkBAIC02Njc2LDYgKzY2NzYsNjAgQEAgPHRpdGxlPjxzdHJ1Y3RuYW1lPnBnX3JhbmdlPC9z dHJ1Y3RuYW1lPiBDb2x1bW5zPC90aXRsZT4KICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAg ICA8L3Jvdz4KIAorICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFi bGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3Ry dWN0ZmllbGQ+cm5nY29uc3RydWN0Mjwvc3RydWN0ZmllbGQ+IDx0eXBlPnJlZ3Byb2M8L3R5 cGU+CisgICAgICAgKHJlZmVyZW5jZXMgPGxpbmsgbGlua2VuZD0iY2F0YWxvZy1wZy1wcm9j Ij48c3RydWN0bmFtZT5wZ19wcm9jPC9zdHJ1Y3RuYW1lPjwvbGluaz4uPHN0cnVjdGZpZWxk Pm9pZDwvc3RydWN0ZmllbGQ+KQorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAg ICAgT0lEIG9mIHRoZSAyLWFyZ3VtZW50IHJhbmdlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIChs b3dlciBhbmQgdXBwZXIpCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisK KyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48 cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVjdGZpZWxkPnJu Z2NvbnN0cnVjdDM8L3N0cnVjdGZpZWxkPiA8dHlwZT5yZWdwcm9jPC90eXBlPgorICAgICAg IChyZWZlcmVuY2VzIDxsaW5rIGxpbmtlbmQ9ImNhdGFsb2ctcGctcHJvYyI+PHN0cnVjdG5h bWU+cGdfcHJvYzwvc3RydWN0bmFtZT48L2xpbms+LjxzdHJ1Y3RmaWVsZD5vaWQ8L3N0cnVj dGZpZWxkPikKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIE9JRCBvZiB0 aGUgMy1hcmd1bWVudCByYW5nZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiAobG93ZXIsIHVwcGVy LCBhbmQKKyAgICAgICBmbGFncykKKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jv dz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50 cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0Zmll bGQ+cm5nbWx0Y29uc3RydWN0MDwvc3RydWN0ZmllbGQ+IDx0eXBlPnJlZ3Byb2M8L3R5cGU+ CisgICAgICAgKHJlZmVyZW5jZXMgPGxpbmsgbGlua2VuZD0iY2F0YWxvZy1wZy1wcm9jIj48 c3RydWN0bmFtZT5wZ19wcm9jPC9zdHJ1Y3RuYW1lPjwvbGluaz4uPHN0cnVjdGZpZWxkPm9p ZDwvc3RydWN0ZmllbGQ+KQorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAg T0lEIG9mIHRoZSAwLWFyZ3VtZW50IG11bHRpcmFuZ2UgY29uc3RydWN0b3IgZnVuY3Rpb24g KGNvbnN0cnVjdHMgZW1wdHkKKyAgICAgICByYW5nZSkKKyAgICAgIDwvcGFyYT48L2VudHJ5 PgorICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFs b2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAg ICA8c3RydWN0ZmllbGQ+cm5nbWx0Y29uc3RydWN0MTwvc3RydWN0ZmllbGQ+IDx0eXBlPnJl Z3Byb2M8L3R5cGU+CisgICAgICAgKHJlZmVyZW5jZXMgPGxpbmsgbGlua2VuZD0iY2F0YWxv Zy1wZy1wcm9jIj48c3RydWN0bmFtZT5wZ19wcm9jPC9zdHJ1Y3RuYW1lPjwvbGluaz4uPHN0 cnVjdGZpZWxkPm9pZDwvc3RydWN0ZmllbGQ+KQorICAgICAgPC9wYXJhPgorICAgICAgPHBh cmE+CisgICAgICAgT0lEIG9mIHRoZSAxLWFyZ3VtZW50IG11bHRpcmFuZ2UgY29uc3RydWN0 b3IgZnVuY3Rpb24gKGNvbnN0cnVjdHMKKyAgICAgICBtdWx0aXJhbmdlIGZyb20gc2luZ2xl IHJhbmdlLCBhbHNvIHVzZWQgYXMgY2FzdCBmdW5jdGlvbikKKyAgICAgIDwvcGFyYT48L2Vu dHJ5PgorICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNh dGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAg ICAgICA8c3RydWN0ZmllbGQ+cm5nbWx0Y29uc3RydWN0Mjwvc3RydWN0ZmllbGQ+IDx0eXBl PnJlZ3Byb2M8L3R5cGU+CisgICAgICAgKHJlZmVyZW5jZXMgPGxpbmsgbGlua2VuZD0iY2F0 YWxvZy1wZy1wcm9jIj48c3RydWN0bmFtZT5wZ19wcm9jPC9zdHJ1Y3RuYW1lPjwvbGluaz4u PHN0cnVjdGZpZWxkPm9pZDwvc3RydWN0ZmllbGQ+KQorICAgICAgPC9wYXJhPgorICAgICAg PHBhcmE+CisgICAgICAgT0lEIG9mIHRoZSAyLWFyZ3VtZW50IG11bHRpcmFuZ2UgY29uc3Ry dWN0b3IgZnVuY3Rpb24gKGNvbnN0cnVjdHMKKyAgICAgICBtdWx0aXJhbmdlIGZyb20gYXJy YXkgb2YgcmFuZ2VzKQorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCiAg ICAgIDxyb3c+CiAgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBh cmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgogICAgICAgIDxzdHJ1Y3RmaWVsZD5ybmdj YW5vbmljYWw8L3N0cnVjdGZpZWxkPiA8dHlwZT5yZWdwcm9jPC90eXBlPgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19yYW5nZS5jIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9wZ19yYW5nZS5jCmluZGV4IGNkMjFjODRjOGZkLi5jYjhjNzlkMGU4MyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19yYW5nZS5jCisrKyBiL3NyYy9iYWNrZW5kL2Nh dGFsb2cvcGdfcmFuZ2UuYwpAQCAtMzUsNyArMzUsOSBAQAogdm9pZAogUmFuZ2VDcmVhdGUo T2lkIHJhbmdlVHlwZU9pZCwgT2lkIHJhbmdlU3ViVHlwZSwgT2lkIHJhbmdlQ29sbGF0aW9u LAogCQkJT2lkIHJhbmdlU3ViT3BjbGFzcywgUmVnUHJvY2VkdXJlIHJhbmdlQ2Fub25pY2Fs LAotCQkJUmVnUHJvY2VkdXJlIHJhbmdlU3ViRGlmZiwgT2lkIG11bHRpcmFuZ2VUeXBlT2lk KQorCQkJUmVnUHJvY2VkdXJlIHJhbmdlU3ViRGlmZiwgT2lkIG11bHRpcmFuZ2VUeXBlT2lk LAorCQkJUmVnUHJvY2VkdXJlIHJhbmdlQ29uc3RydWN0MiwgUmVnUHJvY2VkdXJlIHJhbmdl Q29uc3RydWN0MywKKwkJCVJlZ1Byb2NlZHVyZSBtbHRybmdDb25zdHJ1Y3QwLCBSZWdQcm9j ZWR1cmUgbWx0cm5nQ29uc3RydWN0MSwgUmVnUHJvY2VkdXJlIG1sdHJuZ0NvbnN0cnVjdDIp CiB7CiAJUmVsYXRpb24JcGdfcmFuZ2U7CiAJRGF0dW0JCXZhbHVlc1tOYXR0c19wZ19yYW5n ZV07CkBAIC01Nyw2ICs1OSwxMSBAQCBSYW5nZUNyZWF0ZShPaWQgcmFuZ2VUeXBlT2lkLCBP aWQgcmFuZ2VTdWJUeXBlLCBPaWQgcmFuZ2VDb2xsYXRpb24sCiAJdmFsdWVzW0FudW1fcGdf cmFuZ2Vfcm5nY2Fub25pY2FsIC0gMV0gPSBPYmplY3RJZEdldERhdHVtKHJhbmdlQ2Fub25p Y2FsKTsKIAl2YWx1ZXNbQW51bV9wZ19yYW5nZV9ybmdzdWJkaWZmIC0gMV0gPSBPYmplY3RJ ZEdldERhdHVtKHJhbmdlU3ViRGlmZik7CiAJdmFsdWVzW0FudW1fcGdfcmFuZ2Vfcm5nbXVs dGl0eXBpZCAtIDFdID0gT2JqZWN0SWRHZXREYXR1bShtdWx0aXJhbmdlVHlwZU9pZCk7CisJ dmFsdWVzW0FudW1fcGdfcmFuZ2Vfcm5nY29uc3RydWN0MiAtIDFdID0gT2JqZWN0SWRHZXRE YXR1bShyYW5nZUNvbnN0cnVjdDIpOworCXZhbHVlc1tBbnVtX3BnX3JhbmdlX3JuZ2NvbnN0 cnVjdDMgLSAxXSA9IE9iamVjdElkR2V0RGF0dW0ocmFuZ2VDb25zdHJ1Y3QzKTsKKwl2YWx1 ZXNbQW51bV9wZ19yYW5nZV9ybmdtbHRjb25zdHJ1Y3QwIC0gMV0gPSBPYmplY3RJZEdldERh dHVtKG1sdHJuZ0NvbnN0cnVjdDApOworCXZhbHVlc1tBbnVtX3BnX3JhbmdlX3JuZ21sdGNv bnN0cnVjdDEgLSAxXSA9IE9iamVjdElkR2V0RGF0dW0obWx0cm5nQ29uc3RydWN0MSk7CisJ dmFsdWVzW0FudW1fcGdfcmFuZ2Vfcm5nbWx0Y29uc3RydWN0MiAtIDFdID0gT2JqZWN0SWRH ZXREYXR1bShtbHRybmdDb25zdHJ1Y3QyKTsKIAogCXR1cCA9IGhlYXBfZm9ybV90dXBsZShS ZWxhdGlvbkdldERlc2NyKHBnX3JhbmdlKSwgdmFsdWVzLCBudWxscyk7CiAKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3R5cGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy90eXBlY21kcy5jCmluZGV4IGU1ZmEwNTc4ODg5Li4yODhlZGIyNWYyZiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHlwZWNtZHMuYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy90eXBlY21kcy5jCkBAIC0xMTEsMTAgKzExMSwxMiBAQCBPaWQJCQliaW5h cnlfdXBncmFkZV9uZXh0X21ybmdfcGdfdHlwZV9vaWQgPSBJbnZhbGlkT2lkOwogT2lkCQkJ YmluYXJ5X3VwZ3JhZGVfbmV4dF9tcm5nX2FycmF5X3BnX3R5cGVfb2lkID0gSW52YWxpZE9p ZDsKIAogc3RhdGljIHZvaWQgbWFrZVJhbmdlQ29uc3RydWN0b3JzKGNvbnN0IGNoYXIgKm5h bWUsIE9pZCBuYW1lc3BhY2UsCi0JCQkJCQkJCSAgT2lkIHJhbmdlT2lkLCBPaWQgc3VidHlw ZSk7CisJCQkJCQkJCSAgT2lkIHJhbmdlT2lkLCBPaWQgc3VidHlwZSwKKwkJCQkJCQkJICBP aWQgKnJhbmdlQ29uc3RydWN0Ml9wLCBPaWQgKnJhbmdlQ29uc3RydWN0M19wKTsKIHN0YXRp YyB2b2lkIG1ha2VNdWx0aXJhbmdlQ29uc3RydWN0b3JzKGNvbnN0IGNoYXIgKm5hbWUsIE9p ZCBuYW1lc3BhY2UsCiAJCQkJCQkJCQkgICBPaWQgbXVsdGlyYW5nZU9pZCwgT2lkIHJhbmdl T2lkLAotCQkJCQkJCQkJICAgT2lkIHJhbmdlQXJyYXlPaWQsIE9pZCAqY2FzdEZ1bmNPaWQp OworCQkJCQkJCQkJICAgT2lkIHJhbmdlQXJyYXlPaWQsCisJCQkJCQkJCQkgICBPaWQgKm1s dHJuZ0NvbnN0cnVjdDBfcCwgT2lkICptbHRybmdDb25zdHJ1Y3QxX3AsIE9pZCAqbWx0cm5n Q29uc3RydWN0Ml9wKTsKIHN0YXRpYyBPaWQJZmluZFR5cGVJbnB1dEZ1bmN0aW9uKExpc3Qg KnByb2NuYW1lLCBPaWQgdHlwZU9pZCk7CiBzdGF0aWMgT2lkCWZpbmRUeXBlT3V0cHV0RnVu Y3Rpb24oTGlzdCAqcHJvY25hbWUsIE9pZCB0eXBlT2lkKTsKIHN0YXRpYyBPaWQJZmluZFR5 cGVSZWNlaXZlRnVuY3Rpb24oTGlzdCAqcHJvY25hbWUsIE9pZCB0eXBlT2lkKTsKQEAgLTE0 MDYsNiArMTQwOCwxMSBAQCBEZWZpbmVSYW5nZShQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0 ZVJhbmdlU3RtdCAqc3RtdCkKIAlMaXN0Q2VsbCAgICpsYzsKIAlPYmplY3RBZGRyZXNzIGFk ZHJlc3M7CiAJT2JqZWN0QWRkcmVzcyBtbHRybmdhZGRyZXNzIFBHX1VTRURfRk9SX0FTU0VS VFNfT05MWTsKKwlPaWQJCQlyYW5nZUNvbnN0cnVjdDJPaWQgPSBJbnZhbGlkT2lkOworCU9p ZAkJCXJhbmdlQ29uc3RydWN0M09pZCA9IEludmFsaWRPaWQ7CisJT2lkCQkJbWx0cm5nQ29u c3RydWN0ME9pZCA9IEludmFsaWRPaWQ7CisJT2lkCQkJbWx0cm5nQ29uc3RydWN0MU9pZCA9 IEludmFsaWRPaWQ7CisJT2lkCQkJbWx0cm5nQ29uc3RydWN0Mk9pZCA9IEludmFsaWRPaWQ7 CiAJT2lkCQkJY2FzdEZ1bmNPaWQ7CiAKIAkvKiBDb252ZXJ0IGxpc3Qgb2YgbmFtZXMgdG8g YSBuYW1lIGFuZCBuYW1lc3BhY2UgKi8KQEAgLTE2NjEsMTAgKzE2NjgsNiBAQCBEZWZpbmVS YW5nZShQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVJhbmdlU3RtdCAqc3RtdCkKIAkJCQkg ICBJbnZhbGlkT2lkKTsgLyogdHlwZSdzIGNvbGxhdGlvbiAocmFuZ2VzIG5ldmVyIGhhdmUg b25lKSAqLwogCUFzc2VydChtdWx0aXJhbmdlT2lkID09IG1sdHJuZ2FkZHJlc3Mub2JqZWN0 SWQpOwogCi0JLyogQ3JlYXRlIHRoZSBlbnRyeSBpbiBwZ19yYW5nZSAqLwotCVJhbmdlQ3Jl YXRlKHR5cG9pZCwgcmFuZ2VTdWJ0eXBlLCByYW5nZUNvbGxhdGlvbiwgcmFuZ2VTdWJPcGNs YXNzLAotCQkJCXJhbmdlQ2Fub25pY2FsLCByYW5nZVN1YnR5cGVEaWZmLCBtdWx0aXJhbmdl T2lkKTsKLQogCS8qCiAJICogQ3JlYXRlIHRoZSBhcnJheSB0eXBlIHRoYXQgZ29lcyB3aXRo IGl0LgogCSAqLwpAQCAtMTc0NiwxMCArMTc0OSwxOCBAQCBEZWZpbmVSYW5nZShQYXJzZVN0 YXRlICpwc3RhdGUsIENyZWF0ZVJhbmdlU3RtdCAqc3RtdCkKIAlDb21tYW5kQ291bnRlcklu Y3JlbWVudCgpOwogCiAJLyogQW5kIGNyZWF0ZSB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb25z IGZvciB0aGlzIHJhbmdlIHR5cGUgKi8KLQltYWtlUmFuZ2VDb25zdHJ1Y3RvcnModHlwZU5h bWUsIHR5cGVOYW1lc3BhY2UsIHR5cG9pZCwgcmFuZ2VTdWJ0eXBlKTsKKwltYWtlUmFuZ2VD b25zdHJ1Y3RvcnModHlwZU5hbWUsIHR5cGVOYW1lc3BhY2UsIHR5cG9pZCwgcmFuZ2VTdWJ0 eXBlLAorCQkJCQkJICAmcmFuZ2VDb25zdHJ1Y3QyT2lkLCAmcmFuZ2VDb25zdHJ1Y3QzT2lk KTsKIAltYWtlTXVsdGlyYW5nZUNvbnN0cnVjdG9ycyhtdWx0aXJhbmdlVHlwZU5hbWUsIHR5 cGVOYW1lc3BhY2UsCiAJCQkJCQkJICAgbXVsdGlyYW5nZU9pZCwgdHlwb2lkLCByYW5nZUFy cmF5T2lkLAotCQkJCQkJCSAgICZjYXN0RnVuY09pZCk7CisJCQkJCQkJICAgJm1sdHJuZ0Nv bnN0cnVjdDBPaWQsICZtbHRybmdDb25zdHJ1Y3QxT2lkLCAmbWx0cm5nQ29uc3RydWN0Mk9p ZCk7CisJY2FzdEZ1bmNPaWQgPSBtbHRybmdDb25zdHJ1Y3QxT2lkOworCisJLyogQ3JlYXRl IHRoZSBlbnRyeSBpbiBwZ19yYW5nZSAqLworCVJhbmdlQ3JlYXRlKHR5cG9pZCwgcmFuZ2VT dWJ0eXBlLCByYW5nZUNvbGxhdGlvbiwgcmFuZ2VTdWJPcGNsYXNzLAorCQkJCXJhbmdlQ2Fu b25pY2FsLCByYW5nZVN1YnR5cGVEaWZmLCBtdWx0aXJhbmdlT2lkLAorCQkJCXJhbmdlQ29u c3RydWN0Mk9pZCwgcmFuZ2VDb25zdHJ1Y3QzT2lkLAorCQkJCW1sdHJuZ0NvbnN0cnVjdDBP aWQsIG1sdHJuZ0NvbnN0cnVjdDFPaWQsIG1sdHJuZ0NvbnN0cnVjdDJPaWQpOwogCiAJLyog Q3JlYXRlIGNhc3QgZnJvbSB0aGUgcmFuZ2UgdHlwZSB0byBpdHMgbXVsdGlyYW5nZSB0eXBl ICovCiAJQ2FzdENyZWF0ZSh0eXBvaWQsIG11bHRpcmFuZ2VPaWQsIGNhc3RGdW5jT2lkLCBJ bnZhbGlkT2lkLCBJbnZhbGlkT2lkLApAQCAtMTc2OSwxMCArMTc4MCwxNCBAQCBEZWZpbmVS YW5nZShQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVJhbmdlU3RtdCAqc3RtdCkKICAqCiAg KiBXZSBhY3R1YWxseSBkZWZpbmUgMiBmdW5jdGlvbnMsIHdpdGggMiB0aHJvdWdoIDMgYXJn dW1lbnRzLiAgVGhpcyBpcyBqdXN0CiAgKiB0byBvZmZlciBtb3JlIGNvbnZlbmllbmNlIGZv ciB0aGUgdXNlci4KKyAqCisgKiBUaGUgT0lEcyBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbnMg YXJlIHJldHVybmVkIHRocm91Z2ggdGhlIHBvaW50ZXIKKyAqIGFyZ3VtZW50cy4KICAqLwog c3RhdGljIHZvaWQKIG1ha2VSYW5nZUNvbnN0cnVjdG9ycyhjb25zdCBjaGFyICpuYW1lLCBP aWQgbmFtZXNwYWNlLAotCQkJCQkgIE9pZCByYW5nZU9pZCwgT2lkIHN1YnR5cGUpCisJCQkJ CSAgT2lkIHJhbmdlT2lkLCBPaWQgc3VidHlwZSwKKwkJCQkJICBPaWQgKnJhbmdlQ29uc3Ry dWN0Ml9wLCBPaWQgKnJhbmdlQ29uc3RydWN0M19wKQogewogCXN0YXRpYyBjb25zdCBjaGFy ICpjb25zdCBwcm9zcmNbMl0gPSB7InJhbmdlX2NvbnN0cnVjdG9yMiIsCiAJInJhbmdlX2Nv bnN0cnVjdG9yMyJ9OwpAQCAtMTgzMyw2ICsxODQ4LDExIEBAIG1ha2VSYW5nZUNvbnN0cnVj dG9ycyhjb25zdCBjaGFyICpuYW1lLCBPaWQgbmFtZXNwYWNlLAogCQkgKiBwZ19kdW1wIGRl cGVuZHMgb24gdGhpcyBjaG9pY2UgdG8gYXZvaWQgZHVtcGluZyB0aGUgY29uc3RydWN0b3Jz LgogCQkgKi8KIAkJcmVjb3JkRGVwZW5kZW5jeU9uKCZteXNlbGYsICZyZWZlcmVuY2VkLCBE RVBFTkRFTkNZX0lOVEVSTkFMKTsKKworCQlpZiAocHJvbmFyZ3NbaV0gPT0gMikKKwkJCSpy YW5nZUNvbnN0cnVjdDJfcCA9IG15c2VsZi5vYmplY3RJZDsKKwkJZWxzZSBpZiAocHJvbmFy Z3NbaV0gPT0gMykKKwkJCSpyYW5nZUNvbnN0cnVjdDNfcCA9IG15c2VsZi5vYmplY3RJZDsK IAl9CiB9CiAKQEAgLTE4NDIsMTMgKzE4NjIsMTMgQEAgbWFrZVJhbmdlQ29uc3RydWN0b3Jz KGNvbnN0IGNoYXIgKm5hbWUsIE9pZCBuYW1lc3BhY2UsCiAgKiBJZiB3ZSBoYWQgYW4gYW55 cmFuZ2VhcnJheSBwb2x5bW9ycGhpYyB0eXBlIHdlIGNvdWxkIHVzZSBpdCBoZXJlLAogICog YnV0IHNpbmNlIGVhY2ggdHlwZSBoYXMgaXRzIG93biBjb25zdHJ1Y3RvciBuYW1lIHRoZXJl J3Mgbm8gbmVlZC4KICAqCi0gKiBTZXRzIGNhc3RGdW5jT2lkIHRvIHRoZSBvaWQgb2YgdGhl IG5ldyBjb25zdHJ1Y3RvciB0aGF0IGNhbiBiZSB1c2VkCi0gKiB0byBjYXN0IGZyb20gYSBy YW5nZSB0byBhIG11bHRpcmFuZ2UuCisgKiBUaGUgT0lEcyBvZiB0aGUgY3JlYXRlZCBmdW5j dGlvbnMgYXJlIHJldHVybmVkIHRocm91Z2ggdGhlIHBvaW50ZXIKKyAqIGFyZ3VtZW50cy4K ICAqLwogc3RhdGljIHZvaWQKIG1ha2VNdWx0aXJhbmdlQ29uc3RydWN0b3JzKGNvbnN0IGNo YXIgKm5hbWUsIE9pZCBuYW1lc3BhY2UsCiAJCQkJCQkgICBPaWQgbXVsdGlyYW5nZU9pZCwg T2lkIHJhbmdlT2lkLCBPaWQgcmFuZ2VBcnJheU9pZCwKLQkJCQkJCSAgIE9pZCAqY2FzdEZ1 bmNPaWQpCisJCQkJCQkgICBPaWQgKm1sdHJuZ0NvbnN0cnVjdDBfcCwgT2lkICptbHRybmdD b25zdHJ1Y3QxX3AsIE9pZCAqbWx0cm5nQ29uc3RydWN0Ml9wKQogewogCU9iamVjdEFkZHJl c3MgbXlzZWxmLAogCQkJCXJlZmVyZW5jZWQ7CkBAIC0xODk5LDYgKzE5MTksNyBAQCBtYWtl TXVsdGlyYW5nZUNvbnN0cnVjdG9ycyhjb25zdCBjaGFyICpuYW1lLCBPaWQgbmFtZXNwYWNl LAogCSAqIGRlcGVuZHMgb24gdGhpcyBjaG9pY2UgdG8gYXZvaWQgZHVtcGluZyB0aGUgY29u c3RydWN0b3JzLgogCSAqLwogCXJlY29yZERlcGVuZGVuY3lPbigmbXlzZWxmLCAmcmVmZXJl bmNlZCwgREVQRU5ERU5DWV9JTlRFUk5BTCk7CisJKm1sdHJuZ0NvbnN0cnVjdDBfcCA9IG15 c2VsZi5vYmplY3RJZDsKIAlwZnJlZShhcmd0eXBlcyk7CiAKIAkvKgpAQCAtMTkzOSw4ICsx OTYwLDggQEAgbWFrZU11bHRpcmFuZ2VDb25zdHJ1Y3RvcnMoY29uc3QgY2hhciAqbmFtZSwg T2lkIG5hbWVzcGFjZSwKIAkJCQkJCQkgMC4wKTsJLyogcHJvcm93cyAqLwogCS8qIGRpdHRv ICovCiAJcmVjb3JkRGVwZW5kZW5jeU9uKCZteXNlbGYsICZyZWZlcmVuY2VkLCBERVBFTkRF TkNZX0lOVEVSTkFMKTsKKwkqbWx0cm5nQ29uc3RydWN0MV9wID0gbXlzZWxmLm9iamVjdElk OwogCXBmcmVlKGFyZ3R5cGVzKTsKLQkqY2FzdEZ1bmNPaWQgPSBteXNlbGYub2JqZWN0SWQ7 CiAKIAkvKiBuLWFyZyBjb25zdHJ1Y3RvciAtIHZhcmFyZyAqLwogCWFyZ3R5cGVzID0gYnVp bGRvaWR2ZWN0b3IoJnJhbmdlQXJyYXlPaWQsIDEpOwpAQCAtMTk3OCw2ICsxOTk5LDcgQEAg bWFrZU11bHRpcmFuZ2VDb25zdHJ1Y3RvcnMoY29uc3QgY2hhciAqbmFtZSwgT2lkIG5hbWVz cGFjZSwKIAkJCQkJCQkgMC4wKTsJLyogcHJvcm93cyAqLwogCS8qIGRpdHRvICovCiAJcmVj b3JkRGVwZW5kZW5jeU9uKCZteXNlbGYsICZyZWZlcmVuY2VkLCBERVBFTkRFTkNZX0lOVEVS TkFMKTsKKwkqbWx0cm5nQ29uc3RydWN0Ml9wID0gbXlzZWxmLm9iamVjdElkOwogCXBmcmVl KGFyZ3R5cGVzKTsKIAlwZnJlZShhbGxQYXJhbWV0ZXJUeXBlcyk7CiAJcGZyZWUocGFyYW1l dGVyTW9kZXMpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19yYW5nZS5k YXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3JhbmdlLmRhdAppbmRleCA4MzA5NzFjNDk0 NC4uZmE1ZTZmZjBjM2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcmFu Z2UuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcmFuZ2UuZGF0CkBAIC0xNCwy MSArMTQsMzMgQEAKIAogeyBybmd0eXBpZCA9PiAnaW50NHJhbmdlJywgcm5nc3VidHlwZSA9 PiAnaW50NCcsCiAgIHJuZ211bHRpdHlwaWQgPT4gJ2ludDRtdWx0aXJhbmdlJywgcm5nc3Vi b3BjID0+ICdidHJlZS9pbnQ0X29wcycsCisgIHJuZ2NvbnN0cnVjdDIgPT4gJ2ludDRyYW5n ZShpbnQ0LGludDQpJywgcm5nY29uc3RydWN0MyA9PiAnaW50NHJhbmdlKGludDQsaW50NCx0 ZXh0KScsCisgIHJuZ21sdGNvbnN0cnVjdDAgPT4gJ2ludDRtdWx0aXJhbmdlKCknLCBybmdt bHRjb25zdHJ1Y3QxID0+ICdpbnQ0bXVsdGlyYW5nZShpbnQ0cmFuZ2UpJywgcm5nbWx0Y29u c3RydWN0MiA9PiAnaW50NG11bHRpcmFuZ2UoX2ludDRyYW5nZSknLAogICBybmdjYW5vbmlj YWwgPT4gJ2ludDRyYW5nZV9jYW5vbmljYWwnLCBybmdzdWJkaWZmID0+ICdpbnQ0cmFuZ2Vf c3ViZGlmZicgfSwKIHsgcm5ndHlwaWQgPT4gJ251bXJhbmdlJywgcm5nc3VidHlwZSA9PiAn bnVtZXJpYycsCiAgIHJuZ211bHRpdHlwaWQgPT4gJ251bW11bHRpcmFuZ2UnLCBybmdzdWJv cGMgPT4gJ2J0cmVlL251bWVyaWNfb3BzJywKKyAgcm5nY29uc3RydWN0MiA9PiAnbnVtcmFu Z2UobnVtZXJpYyxudW1lcmljKScsIHJuZ2NvbnN0cnVjdDMgPT4gJ251bXJhbmdlKG51bWVy aWMsbnVtZXJpYyx0ZXh0KScsCisgIHJuZ21sdGNvbnN0cnVjdDAgPT4gJ251bW11bHRpcmFu Z2UoKScsIHJuZ21sdGNvbnN0cnVjdDEgPT4gJ251bW11bHRpcmFuZ2UobnVtcmFuZ2UpJywg cm5nbWx0Y29uc3RydWN0MiA9PiAnbnVtbXVsdGlyYW5nZShfbnVtcmFuZ2UpJywKICAgcm5n Y2Fub25pY2FsID0+ICctJywgcm5nc3ViZGlmZiA9PiAnbnVtcmFuZ2Vfc3ViZGlmZicgfSwK IHsgcm5ndHlwaWQgPT4gJ3RzcmFuZ2UnLCBybmdzdWJ0eXBlID0+ICd0aW1lc3RhbXAnLAog ICBybmdtdWx0aXR5cGlkID0+ICd0c211bHRpcmFuZ2UnLCBybmdzdWJvcGMgPT4gJ2J0cmVl L3RpbWVzdGFtcF9vcHMnLAorICBybmdjb25zdHJ1Y3QyID0+ICd0c3JhbmdlKHRpbWVzdGFt cCx0aW1lc3RhbXApJywgcm5nY29uc3RydWN0MyA9PiAndHNyYW5nZSh0aW1lc3RhbXAsdGlt ZXN0YW1wLHRleHQpJywKKyAgcm5nbWx0Y29uc3RydWN0MCA9PiAndHNtdWx0aXJhbmdlKCkn LCBybmdtbHRjb25zdHJ1Y3QxID0+ICd0c211bHRpcmFuZ2UodHNyYW5nZSknLCBybmdtbHRj b25zdHJ1Y3QyID0+ICd0c211bHRpcmFuZ2UoX3RzcmFuZ2UpJywKICAgcm5nY2Fub25pY2Fs ID0+ICctJywgcm5nc3ViZGlmZiA9PiAndHNyYW5nZV9zdWJkaWZmJyB9LAogeyBybmd0eXBp ZCA9PiAndHN0enJhbmdlJywgcm5nc3VidHlwZSA9PiAndGltZXN0YW1wdHonLAogICBybmdt dWx0aXR5cGlkID0+ICd0c3R6bXVsdGlyYW5nZScsIHJuZ3N1Ym9wYyA9PiAnYnRyZWUvdGlt ZXN0YW1wdHpfb3BzJywKKyAgcm5nY29uc3RydWN0MiA9PiAndHN0enJhbmdlKHRpbWVzdGFt cHR6LHRpbWVzdGFtcHR6KScsIHJuZ2NvbnN0cnVjdDMgPT4gJ3RzdHpyYW5nZSh0aW1lc3Rh bXB0eix0aW1lc3RhbXB0eix0ZXh0KScsCisgIHJuZ21sdGNvbnN0cnVjdDAgPT4gJ3RzdHpt dWx0aXJhbmdlKCknLCBybmdtbHRjb25zdHJ1Y3QxID0+ICd0c3R6bXVsdGlyYW5nZSh0c3R6 cmFuZ2UpJywgcm5nbWx0Y29uc3RydWN0MiA9PiAndHN0em11bHRpcmFuZ2UoX3RzdHpyYW5n ZSknLAogICBybmdjYW5vbmljYWwgPT4gJy0nLCBybmdzdWJkaWZmID0+ICd0c3R6cmFuZ2Vf c3ViZGlmZicgfSwKIHsgcm5ndHlwaWQgPT4gJ2RhdGVyYW5nZScsIHJuZ3N1YnR5cGUgPT4g J2RhdGUnLAogICBybmdtdWx0aXR5cGlkID0+ICdkYXRlbXVsdGlyYW5nZScsIHJuZ3N1Ym9w YyA9PiAnYnRyZWUvZGF0ZV9vcHMnLAorICBybmdjb25zdHJ1Y3QyID0+ICdkYXRlcmFuZ2Uo ZGF0ZSxkYXRlKScsIHJuZ2NvbnN0cnVjdDMgPT4gJ2RhdGVyYW5nZShkYXRlLGRhdGUsdGV4 dCknLAorICBybmdtbHRjb25zdHJ1Y3QwID0+ICdkYXRlbXVsdGlyYW5nZSgpJywgcm5nbWx0 Y29uc3RydWN0MSA9PiAnZGF0ZW11bHRpcmFuZ2UoZGF0ZXJhbmdlKScsIHJuZ21sdGNvbnN0 cnVjdDIgPT4gJ2RhdGVtdWx0aXJhbmdlKF9kYXRlcmFuZ2UpJywKICAgcm5nY2Fub25pY2Fs ID0+ICdkYXRlcmFuZ2VfY2Fub25pY2FsJywgcm5nc3ViZGlmZiA9PiAnZGF0ZXJhbmdlX3N1 YmRpZmYnIH0sCiB7IHJuZ3R5cGlkID0+ICdpbnQ4cmFuZ2UnLCBybmdzdWJ0eXBlID0+ICdp bnQ4JywKICAgcm5nbXVsdGl0eXBpZCA9PiAnaW50OG11bHRpcmFuZ2UnLCBybmdzdWJvcGMg PT4gJ2J0cmVlL2ludDhfb3BzJywKKyAgcm5nY29uc3RydWN0MiA9PiAnaW50OHJhbmdlKGlu dDgsaW50OCknLCBybmdjb25zdHJ1Y3QzID0+ICdpbnQ4cmFuZ2UoaW50OCxpbnQ4LHRleHQp JywKKyAgcm5nbWx0Y29uc3RydWN0MCA9PiAnaW50OG11bHRpcmFuZ2UoKScsIHJuZ21sdGNv bnN0cnVjdDEgPT4gJ2ludDhtdWx0aXJhbmdlKGludDhyYW5nZSknLCBybmdtbHRjb25zdHJ1 Y3QyID0+ICdpbnQ4bXVsdGlyYW5nZShfaW50OHJhbmdlKScsCiAgIHJuZ2Nhbm9uaWNhbCA9 PiAnaW50OHJhbmdlX2Nhbm9uaWNhbCcsIHJuZ3N1YmRpZmYgPT4gJ2ludDhyYW5nZV9zdWJk aWZmJyB9LAogCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Jhbmdl LmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3JhbmdlLmgKaW5kZXggNWI0ZjQ2MTU5MDUu LjMyZWU4Y2Y0M2EwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Jhbmdl LmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19yYW5nZS5oCkBAIC00Myw2ICs0Mywx NSBAQCBDQVRBTE9HKHBnX3JhbmdlLDM1NDEsUmFuZ2VSZWxhdGlvbklkKQogCS8qIHN1YnR5 cGUncyBidHJlZSBvcGNsYXNzICovCiAJT2lkCQkJcm5nc3Vib3BjIEJLSV9MT09LVVAocGdf b3BjbGFzcyk7CiAKKwkvKiByYW5nZSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgKi8KKwlyZWdw cm9jCQlybmdjb25zdHJ1Y3QyIEJLSV9MT09LVVAocGdfcHJvYyk7CisJcmVncHJvYwkJcm5n Y29uc3RydWN0MyBCS0lfTE9PS1VQKHBnX3Byb2MpOworCisJLyogbXVsdGlyYW5nZSBjb25z dHJ1Y3RvciBmdW5jdGlvbnMgKi8KKwlyZWdwcm9jCQlybmdtbHRjb25zdHJ1Y3QwIEJLSV9M T09LVVAocGdfcHJvYyk7CisJcmVncHJvYwkJcm5nbWx0Y29uc3RydWN0MSBCS0lfTE9PS1VQ KHBnX3Byb2MpOworCXJlZ3Byb2MJCXJuZ21sdGNvbnN0cnVjdDIgQktJX0xPT0tVUChwZ19w cm9jKTsKKwogCS8qIGNhbm9uaWNhbGl6ZSByYW5nZSwgb3IgMCAqLwogCXJlZ3Byb2MJCXJu Z2Nhbm9uaWNhbCBCS0lfTE9PS1VQX09QVChwZ19wcm9jKTsKIApAQCAtNjksNyArNzgsOSBA QCBNQUtFX1NZU0NBQ0hFKFJBTkdFTVVMVElSQU5HRSwgcGdfcmFuZ2Vfcm5nbXVsdGl0eXBp ZF9pbmRleCwgNCk7CiAKIGV4dGVybiB2b2lkIFJhbmdlQ3JlYXRlKE9pZCByYW5nZVR5cGVP aWQsIE9pZCByYW5nZVN1YlR5cGUsIE9pZCByYW5nZUNvbGxhdGlvbiwKIAkJCQkJCU9pZCBy YW5nZVN1Yk9wY2xhc3MsIFJlZ1Byb2NlZHVyZSByYW5nZUNhbm9uaWNhbCwKLQkJCQkJCVJl Z1Byb2NlZHVyZSByYW5nZVN1YkRpZmYsIE9pZCBtdWx0aXJhbmdlVHlwZU9pZCk7CisJCQkJ CQlSZWdQcm9jZWR1cmUgcmFuZ2VTdWJEaWZmLCBPaWQgbXVsdGlyYW5nZVR5cGVPaWQsCisJ CQkJCQlSZWdQcm9jZWR1cmUgcmFuZ2VDb25zdHJ1Y3QyLCBSZWdQcm9jZWR1cmUgcmFuZ2VD b25zdHJ1Y3QzLAorCQkJCQkJUmVnUHJvY2VkdXJlIG1sdHJuZ0NvbnN0cnVjdDAsIFJlZ1By b2NlZHVyZSBtbHRybmdDb25zdHJ1Y3QxLCBSZWdQcm9jZWR1cmUgbWx0cm5nQ29uc3RydWN0 Mik7CiBleHRlcm4gdm9pZCBSYW5nZURlbGV0ZShPaWQgcmFuZ2VUeXBlT2lkKTsKIAogI2Vu ZGlmCQkJCQkJCS8qIFBHX1JBTkdFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvb2lkam9pbnMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9v aWRqb2lucy5vdXQKaW5kZXggMjE1ZWI4OTliZTMuLjI1YWFhZThkMDVhIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29pZGpvaW5zLm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL29pZGpvaW5zLm91dApAQCAtMjQ5LDYgKzI0OSwxMSBAQCBO T1RJQ0U6ICBjaGVja2luZyBwZ19yYW5nZSB7cm5nc3VidHlwZX0gPT4gcGdfdHlwZSB7b2lk fQogTk9USUNFOiAgY2hlY2tpbmcgcGdfcmFuZ2Uge3JuZ211bHRpdHlwaWR9ID0+IHBnX3R5 cGUge29pZH0KIE5PVElDRTogIGNoZWNraW5nIHBnX3JhbmdlIHtybmdjb2xsYXRpb259ID0+ IHBnX2NvbGxhdGlvbiB7b2lkfQogTk9USUNFOiAgY2hlY2tpbmcgcGdfcmFuZ2Uge3JuZ3N1 Ym9wY30gPT4gcGdfb3BjbGFzcyB7b2lkfQorTk9USUNFOiAgY2hlY2tpbmcgcGdfcmFuZ2Ug e3JuZ2NvbnN0cnVjdDJ9ID0+IHBnX3Byb2Mge29pZH0KK05PVElDRTogIGNoZWNraW5nIHBn X3JhbmdlIHtybmdjb25zdHJ1Y3QzfSA9PiBwZ19wcm9jIHtvaWR9CitOT1RJQ0U6ICBjaGVj a2luZyBwZ19yYW5nZSB7cm5nbWx0Y29uc3RydWN0MH0gPT4gcGdfcHJvYyB7b2lkfQorTk9U SUNFOiAgY2hlY2tpbmcgcGdfcmFuZ2Uge3JuZ21sdGNvbnN0cnVjdDF9ID0+IHBnX3Byb2Mg e29pZH0KK05PVElDRTogIGNoZWNraW5nIHBnX3JhbmdlIHtybmdtbHRjb25zdHJ1Y3QyfSA9 PiBwZ19wcm9jIHtvaWR9CiBOT1RJQ0U6ICBjaGVja2luZyBwZ19yYW5nZSB7cm5nY2Fub25p Y2FsfSA9PiBwZ19wcm9jIHtvaWR9CiBOT1RJQ0U6ICBjaGVja2luZyBwZ19yYW5nZSB7cm5n c3ViZGlmZn0gPT4gcGdfcHJvYyB7b2lkfQogTk9USUNFOiAgY2hlY2tpbmcgcGdfdHJhbnNm b3JtIHt0cmZ0eXBlfSA9PiBwZ190eXBlIHtvaWR9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3R5cGVfc2FuaXR5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvdHlwZV9zYW5pdHkub3V0CmluZGV4IDlkZGNhY2VjNmJmLi4xZDIxZDNlYjQ0NiAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC90eXBlX3Nhbml0eS5vdXQK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC90eXBlX3Nhbml0eS5vdXQKQEAgLTYx MCw3ICs2MTAsOSBAQCBXSEVSRSAoaXNfY2F0YWxvZ190ZXh0X3VuaXF1ZV9pbmRleF9vaWQo aW5kZXhyZWxpZCkgPD4KIC0tIExvb2sgZm9yIGlsbGVnYWwgdmFsdWVzIGluIHBnX3Jhbmdl IGZpZWxkcy4KIFNFTEVDVCByLnJuZ3R5cGlkLCByLnJuZ3N1YnR5cGUKIEZST00gcGdfcmFu Z2UgYXMgcgotV0hFUkUgci5ybmd0eXBpZCA9IDAgT1Igci5ybmdzdWJ0eXBlID0gMCBPUiBy LnJuZ3N1Ym9wYyA9IDA7CitXSEVSRSByLnJuZ3R5cGlkID0gMCBPUiByLnJuZ3N1YnR5cGUg PSAwIE9SIHIucm5nc3Vib3BjID0gMAorICAgIE9SIHIucm5nY29uc3RydWN0MiA9IDAgT1Ig ci5ybmdjb25zdHJ1Y3QzID0gMAorICAgIE9SIHIucm5nbWx0Y29uc3RydWN0MCA9IDAgT1Ig ci5ybmdtbHRjb25zdHJ1Y3QxID0gMCBPUiByLnJuZ21sdGNvbnN0cnVjdDIgPSAwOwogIHJu Z3R5cGlkIHwgcm5nc3VidHlwZSAKIC0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCiAoMCByb3dz KQpAQCAtNjYzLDYgKzY2NSw2MSBAQCBXSEVSRSByLnJuZ211bHRpdHlwaWQgSVMgTlVMTCBP UiByLnJuZ211bHRpdHlwaWQgPSAwOwogLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tCiAoMCByb3dzKQogCistLSBjaGVjayBjb25zdHJ1Y3RvciBmdW5jdGlvbiBh cmd1bWVudHMgYW5kIHJldHVybiB0eXBlcworLS0KKy0tIHByb25hbWUgYW5kIHByb3NyYyBh cmUgbm90IHJlcXVpcmVkIHRvIGhhdmUgdGhlc2UgcGFydGljdWxhcgorLS0gdmFsdWVzLCBi dXQgdGhpcyBtYXRjaGVzIHdoYXQgRGVmaW5lUmFuZ2UoKSBwcm9kdWNlcyBhbmQgc2VydmVz IHRvCistLSBzYW5pdHktY2hlY2sgdGhlIGNhdGFsb2cgZW50cmllcyBmb3IgYnVpbHQtaW4g dHlwZXMuCitTRUxFQ1Qgci5ybmd0eXBpZCwgci5ybmdzdWJ0eXBlLCBwLnByb25hbWUKK0ZS T00gcGdfcmFuZ2UgciBKT0lOIHBnX3Byb2MgcCBPTiBwLm9pZCA9IHIucm5nY29uc3RydWN0 MiBKT0lOIHBnX3R5cGUgdCBPTiByLnJuZ3R5cGlkID0gdC5vaWQKK1dIRVJFIHAucHJvbmFy Z3MgIT0gMgorICAgIE9SIHAucHJvYXJndHlwZXNbMF0gIT0gci5ybmdzdWJ0eXBlIE9SIHAu cHJvYXJndHlwZXNbMV0gIT0gci5ybmdzdWJ0eXBlCisgICAgT1IgcC5wcm9yZXR0eXBlICE9 IHIucm5ndHlwaWQKKyAgICBPUiBwLnByb25hbWUgIT0gdC50eXBuYW1lIE9SIHAucHJvc3Jj ICE9ICdyYW5nZV9jb25zdHJ1Y3RvcjInOworIHJuZ3R5cGlkIHwgcm5nc3VidHlwZSB8IHBy b25hbWUgCistLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0KKygwIHJvd3MpCisK K1NFTEVDVCByLnJuZ3R5cGlkLCByLnJuZ3N1YnR5cGUsIHAucHJvbmFtZQorRlJPTSBwZ19y YW5nZSByIEpPSU4gcGdfcHJvYyBwIE9OIHAub2lkID0gci5ybmdjb25zdHJ1Y3QzIEpPSU4g cGdfdHlwZSB0IE9OIHIucm5ndHlwaWQgPSB0Lm9pZAorV0hFUkUgcC5wcm9uYXJncyAhPSAz CisgICAgT1IgcC5wcm9hcmd0eXBlc1swXSAhPSByLnJuZ3N1YnR5cGUgT1IgcC5wcm9hcmd0 eXBlc1sxXSAhPSByLnJuZ3N1YnR5cGUgT1IgcC5wcm9hcmd0eXBlc1syXSAhPSAncGdfY2F0 YWxvZy50ZXh0Jzo6cmVndHlwZQorICAgIE9SIHAucHJvcmV0dHlwZSAhPSByLnJuZ3R5cGlk CisgICAgT1IgcC5wcm9uYW1lICE9IHQudHlwbmFtZSBPUiBwLnByb3NyYyAhPSAncmFuZ2Vf Y29uc3RydWN0b3IzJzsKKyBybmd0eXBpZCB8IHJuZ3N1YnR5cGUgfCBwcm9uYW1lIAorLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tCisoMCByb3dzKQorCitTRUxFQ1Qgci5y bmd0eXBpZCwgci5ybmdzdWJ0eXBlLCBwLnByb25hbWUKK0ZST00gcGdfcmFuZ2UgciBKT0lO IHBnX3Byb2MgcCBPTiBwLm9pZCA9IHIucm5nbWx0Y29uc3RydWN0MCBKT0lOIHBnX3R5cGUg dCBPTiByLnJuZ211bHRpdHlwaWQgPSB0Lm9pZAorV0hFUkUgcC5wcm9uYXJncyAhPSAwCisg ICAgT1IgcC5wcm9yZXR0eXBlICE9IHIucm5nbXVsdGl0eXBpZAorICAgIE9SIHAucHJvbmFt ZSAhPSB0LnR5cG5hbWUgT1IgcC5wcm9zcmMgIT0gJ211bHRpcmFuZ2VfY29uc3RydWN0b3Iw JzsKKyBybmd0eXBpZCB8IHJuZ3N1YnR5cGUgfCBwcm9uYW1lIAorLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tCisoMCByb3dzKQorCitTRUxFQ1Qgci5ybmd0eXBpZCwgci5y bmdzdWJ0eXBlLCBwLnByb25hbWUKK0ZST00gcGdfcmFuZ2UgciBKT0lOIHBnX3Byb2MgcCBP TiBwLm9pZCA9IHIucm5nbWx0Y29uc3RydWN0MSBKT0lOIHBnX3R5cGUgdCBPTiByLnJuZ211 bHRpdHlwaWQgPSB0Lm9pZAorV0hFUkUgcC5wcm9uYXJncyAhPSAxCisgICAgT1IgcC5wcm9h cmd0eXBlc1swXSAhPSByLnJuZ3R5cGlkCisgICAgT1IgcC5wcm9yZXR0eXBlICE9IHIucm5n bXVsdGl0eXBpZAorICAgIE9SIHAucHJvbmFtZSAhPSB0LnR5cG5hbWUgT1IgcC5wcm9zcmMg IT0gJ211bHRpcmFuZ2VfY29uc3RydWN0b3IxJzsKKyBybmd0eXBpZCB8IHJuZ3N1YnR5cGUg fCBwcm9uYW1lIAorLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tCisoMCByb3dz KQorCitTRUxFQ1Qgci5ybmd0eXBpZCwgci5ybmdzdWJ0eXBlLCBwLnByb25hbWUKK0ZST00g cGdfcmFuZ2UgciBKT0lOIHBnX3Byb2MgcCBPTiBwLm9pZCA9IHIucm5nbWx0Y29uc3RydWN0 MiBKT0lOIHBnX3R5cGUgdCBPTiByLnJuZ211bHRpdHlwaWQgPSB0Lm9pZCBKT0lOIHBnX3R5 cGUgdDIgT04gci5ybmd0eXBpZCA9IHQyLm9pZAorV0hFUkUgcC5wcm9uYXJncyAhPSAxCisg ICAgT1IgcC5wcm9hcmd0eXBlc1swXSAhPSB0Mi50eXBhcnJheQorICAgIE9SIHAucHJvcmV0 dHlwZSAhPSByLnJuZ211bHRpdHlwaWQKKyAgICBPUiBwLnByb25hbWUgIT0gdC50eXBuYW1l IE9SIHAucHJvc3JjICE9ICdtdWx0aXJhbmdlX2NvbnN0cnVjdG9yMic7Cisgcm5ndHlwaWQg fCBybmdzdWJ0eXBlIHwgcHJvbmFtZSAKKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLQorKDAgcm93cykKKworLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCiAtLSBDcmVhdGUgYSB0YWJsZSB0aGF0IGhvbGRzIGFsbCB0aGUga25vd24g aW4tY29yZSBkYXRhIHR5cGVzIGFuZCBsZWF2ZSBpdAogLS0gYXJvdW5kIHNvIGFzIHBnX3Vw Z3JhZGUgaXMgYWJsZSB0byB0ZXN0IHRoZWlyIGJpbmFyeSBjb21wYXRpYmlsaXR5LgogQ1JF QVRFIFRBQkxFIHRhYl9jb3JlX3R5cGVzIEFTIFNFTEVDVApkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvdHlwZV9zYW5pdHkuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv dHlwZV9zYW5pdHkuc3FsCmluZGV4IGMyNDk2ODIzZDkwLi45NWQ1YjZlMDkxNSAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdHlwZV9zYW5pdHkuc3FsCisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3R5cGVfc2FuaXR5LnNxbApAQCAtNDUxLDcgKzQ1MSw5IEBAIENS RUFURSBGVU5DVElPTiBpc19jYXRhbG9nX3RleHRfdW5pcXVlX2luZGV4X29pZChvaWQpIFJF VFVSTlMgYm9vbAogCiBTRUxFQ1Qgci5ybmd0eXBpZCwgci5ybmdzdWJ0eXBlCiBGUk9NIHBn X3JhbmdlIGFzIHIKLVdIRVJFIHIucm5ndHlwaWQgPSAwIE9SIHIucm5nc3VidHlwZSA9IDAg T1Igci5ybmdzdWJvcGMgPSAwOworV0hFUkUgci5ybmd0eXBpZCA9IDAgT1Igci5ybmdzdWJ0 eXBlID0gMCBPUiByLnJuZ3N1Ym9wYyA9IDAKKyAgICBPUiByLnJuZ2NvbnN0cnVjdDIgPSAw IE9SIHIucm5nY29uc3RydWN0MyA9IDAKKyAgICBPUiByLnJuZ21sdGNvbnN0cnVjdDAgPSAw IE9SIHIucm5nbWx0Y29uc3RydWN0MSA9IDAgT1Igci5ybmdtbHRjb25zdHJ1Y3QyID0gMDsK IAogLS0gcm5nY29sbGF0aW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgaWZmIHN1YnR5cGUgaXMg Y29sbGF0YWJsZQogCkBAIC00OTEsNiArNDkzLDQ5IEBAIENSRUFURSBGVU5DVElPTiBpc19j YXRhbG9nX3RleHRfdW5pcXVlX2luZGV4X29pZChvaWQpIFJFVFVSTlMgYm9vbAogRlJPTSBw Z19yYW5nZSByCiBXSEVSRSByLnJuZ211bHRpdHlwaWQgSVMgTlVMTCBPUiByLnJuZ211bHRp dHlwaWQgPSAwOwogCistLSBjaGVjayBjb25zdHJ1Y3RvciBmdW5jdGlvbiBhcmd1bWVudHMg YW5kIHJldHVybiB0eXBlcworLS0KKy0tIHByb25hbWUgYW5kIHByb3NyYyBhcmUgbm90IHJl cXVpcmVkIHRvIGhhdmUgdGhlc2UgcGFydGljdWxhcgorLS0gdmFsdWVzLCBidXQgdGhpcyBt YXRjaGVzIHdoYXQgRGVmaW5lUmFuZ2UoKSBwcm9kdWNlcyBhbmQgc2VydmVzIHRvCistLSBz YW5pdHktY2hlY2sgdGhlIGNhdGFsb2cgZW50cmllcyBmb3IgYnVpbHQtaW4gdHlwZXMuCisK K1NFTEVDVCByLnJuZ3R5cGlkLCByLnJuZ3N1YnR5cGUsIHAucHJvbmFtZQorRlJPTSBwZ19y YW5nZSByIEpPSU4gcGdfcHJvYyBwIE9OIHAub2lkID0gci5ybmdjb25zdHJ1Y3QyIEpPSU4g cGdfdHlwZSB0IE9OIHIucm5ndHlwaWQgPSB0Lm9pZAorV0hFUkUgcC5wcm9uYXJncyAhPSAy CisgICAgT1IgcC5wcm9hcmd0eXBlc1swXSAhPSByLnJuZ3N1YnR5cGUgT1IgcC5wcm9hcmd0 eXBlc1sxXSAhPSByLnJuZ3N1YnR5cGUKKyAgICBPUiBwLnByb3JldHR5cGUgIT0gci5ybmd0 eXBpZAorICAgIE9SIHAucHJvbmFtZSAhPSB0LnR5cG5hbWUgT1IgcC5wcm9zcmMgIT0gJ3Jh bmdlX2NvbnN0cnVjdG9yMic7CisKK1NFTEVDVCByLnJuZ3R5cGlkLCByLnJuZ3N1YnR5cGUs IHAucHJvbmFtZQorRlJPTSBwZ19yYW5nZSByIEpPSU4gcGdfcHJvYyBwIE9OIHAub2lkID0g ci5ybmdjb25zdHJ1Y3QzIEpPSU4gcGdfdHlwZSB0IE9OIHIucm5ndHlwaWQgPSB0Lm9pZAor V0hFUkUgcC5wcm9uYXJncyAhPSAzCisgICAgT1IgcC5wcm9hcmd0eXBlc1swXSAhPSByLnJu Z3N1YnR5cGUgT1IgcC5wcm9hcmd0eXBlc1sxXSAhPSByLnJuZ3N1YnR5cGUgT1IgcC5wcm9h cmd0eXBlc1syXSAhPSAncGdfY2F0YWxvZy50ZXh0Jzo6cmVndHlwZQorICAgIE9SIHAucHJv cmV0dHlwZSAhPSByLnJuZ3R5cGlkCisgICAgT1IgcC5wcm9uYW1lICE9IHQudHlwbmFtZSBP UiBwLnByb3NyYyAhPSAncmFuZ2VfY29uc3RydWN0b3IzJzsKKworU0VMRUNUIHIucm5ndHlw aWQsIHIucm5nc3VidHlwZSwgcC5wcm9uYW1lCitGUk9NIHBnX3JhbmdlIHIgSk9JTiBwZ19w cm9jIHAgT04gcC5vaWQgPSByLnJuZ21sdGNvbnN0cnVjdDAgSk9JTiBwZ190eXBlIHQgT04g ci5ybmdtdWx0aXR5cGlkID0gdC5vaWQKK1dIRVJFIHAucHJvbmFyZ3MgIT0gMAorICAgIE9S IHAucHJvcmV0dHlwZSAhPSByLnJuZ211bHRpdHlwaWQKKyAgICBPUiBwLnByb25hbWUgIT0g dC50eXBuYW1lIE9SIHAucHJvc3JjICE9ICdtdWx0aXJhbmdlX2NvbnN0cnVjdG9yMCc7CisK K1NFTEVDVCByLnJuZ3R5cGlkLCByLnJuZ3N1YnR5cGUsIHAucHJvbmFtZQorRlJPTSBwZ19y YW5nZSByIEpPSU4gcGdfcHJvYyBwIE9OIHAub2lkID0gci5ybmdtbHRjb25zdHJ1Y3QxIEpP SU4gcGdfdHlwZSB0IE9OIHIucm5nbXVsdGl0eXBpZCA9IHQub2lkCitXSEVSRSBwLnByb25h cmdzICE9IDEKKyAgICBPUiBwLnByb2FyZ3R5cGVzWzBdICE9IHIucm5ndHlwaWQKKyAgICBP UiBwLnByb3JldHR5cGUgIT0gci5ybmdtdWx0aXR5cGlkCisgICAgT1IgcC5wcm9uYW1lICE9 IHQudHlwbmFtZSBPUiBwLnByb3NyYyAhPSAnbXVsdGlyYW5nZV9jb25zdHJ1Y3RvcjEnOwor CitTRUxFQ1Qgci5ybmd0eXBpZCwgci5ybmdzdWJ0eXBlLCBwLnByb25hbWUKK0ZST00gcGdf cmFuZ2UgciBKT0lOIHBnX3Byb2MgcCBPTiBwLm9pZCA9IHIucm5nbWx0Y29uc3RydWN0MiBK T0lOIHBnX3R5cGUgdCBPTiByLnJuZ211bHRpdHlwaWQgPSB0Lm9pZCBKT0lOIHBnX3R5cGUg dDIgT04gci5ybmd0eXBpZCA9IHQyLm9pZAorV0hFUkUgcC5wcm9uYXJncyAhPSAxCisgICAg T1IgcC5wcm9hcmd0eXBlc1swXSAhPSB0Mi50eXBhcnJheQorICAgIE9SIHAucHJvcmV0dHlw ZSAhPSByLnJuZ211bHRpdHlwaWQKKyAgICBPUiBwLnByb25hbWUgIT0gdC50eXBuYW1lIE9S IHAucHJvc3JjICE9ICdtdWx0aXJhbmdlX2NvbnN0cnVjdG9yMic7CisKKworLS0gKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKIC0tIENyZWF0ZSBhIHRh YmxlIHRoYXQgaG9sZHMgYWxsIHRoZSBrbm93biBpbi1jb3JlIGRhdGEgdHlwZXMgYW5kIGxl YXZlIGl0CiAtLSBhcm91bmQgc28gYXMgcGdfdXBncmFkZSBpcyBhYmxlIHRvIHRlc3QgdGhl aXIgYmluYXJ5IGNvbXBhdGliaWxpdHkuCiBDUkVBVEUgVEFCTEUgdGFiX2NvcmVfdHlwZXMg QVMgU0VMRUNUCgpiYXNlLWNvbW1pdDogMzQ3NDBiOTBiYzEyM2Q2NDVhM2E3MTIzMWI3NjVi Nzc4YmRjZjA0OQotLSAKMi41Mi4wCgo= --------------gfhPQx04K4rBXzVVjzSrXmBh--