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 1vy5Lt-00HPXr-14 for pgsql-hackers@arkaria.postgresql.org; Thu, 05 Mar 2026 09:50:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vy5Lq-00GqAM-24 for pgsql-hackers@arkaria.postgresql.org; Thu, 05 Mar 2026 09:50:39 +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 1vy5Lq-00GqAD-0n for pgsql-hackers@lists.postgresql.org; Thu, 05 Mar 2026 09:50:38 +0000 Received: from mail-ej1-x633.google.com ([2a00:1450:4864:20::633]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vy5Lo-00000000t5r-0mpz for pgsql-hackers@postgresql.org; Thu, 05 Mar 2026 09:50:38 +0000 Received: by mail-ej1-x633.google.com with SMTP id a640c23a62f3a-b8fd976e90cso987107366b.0 for ; Thu, 05 Mar 2026 01:50:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772704236; cv=none; d=google.com; s=arc-20240605; b=FyexfdwrPXq29HAQ7xbIOl96CGQmvAKf6m9qphBBkMvqSUa/1KOCw5ZQk4JVpmuGlB R/u1hWXv+xDkBmfUF+qNweMbFxsLh+H0md0vTijJA8ql1PzgatUasSWSUI2OdCRG+z+8 LMzjzeL8npRTOwC56qkLnMzcvOGSuSx/f9JVNY5Jrmmy4uF7ZdaRjgs+6TgXM/V/WTbK s5TR+QfBQun285XbZ2WAoru7nfFL74E1dng3WkxvPlySGUUbW1OjtsSPx64/jNQKcXMD KVzYW8JqKKV99c6uTJJ/PUgtdCZ7kS57SIjewHvsRu4kCkig38IQLHBpyRspGlAFOnmw IDdw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=Q4JWBnGw2ZEtuVoZIgPcwt5Q/MYGWktBhCRjT+2Zxio=; fh=VL04pn7ScK/1sTR6Ck3mJN0uyBjkEoUiw4iTBybhi3c=; b=JbxuN49B6+Oieb/Px3VpNlOhHMsv18bi0A/xYxQ6HmsXHTU7RUtLxzHIwQSlVeNLFJ gpcyZuMlMP5P4gPUMpfdcHnllrGFSDas/pXOXBz0s0OShLvb9FBB93fjUt1WfCpTpmgW OHRGJsXQea4HHBOMjY4688Klj6P3EBVkwImA/RPIUEr27jd7mFRpz8TxG/kEirc9WgPX Bcn46r25YJ4aHrORPP8IQ0ULftS/h0NFH2U+zVluQggD9frFXLeB9qQouge3acdXZ4++ /1Re3wClpz9csY3gRtVoiR+V6GcxajNpGUhtVdsovpRxfI3PZAbC2HqgBQaC04j5eBad 7WIA==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1772704236; x=1773309036; 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=Q4JWBnGw2ZEtuVoZIgPcwt5Q/MYGWktBhCRjT+2Zxio=; b=ZEBUXjCOeukzKed35ZO45o3HJ4pQaTSDFVdaDQzK3sSSlaNCJlE+0ICFusAzlXkDev M5xZeAI3IGTVHLNvxmPZQ94a64x4svBFkY9hMajQLIkV7zVmaMNhU9kbxZtamoLeMNb2 hdKMrCYaUWPaJj2OHCo6tFc7VzODLIRihorhjPGEdAo3VyId9V2IeSDbWtxi63yaojIj za5uWpFghc1qyOMG11oszW9rFEAIi8ljIDp56vL4EYeFLtuJRptH9sOHYO/q8axVXOfS 5vLosERvkjRzY+LGdf1uI3dG1y8QAFEus7aK9XNuRBLG4UP/7okuhCTzvRo00qYC1A7a Dhqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772704236; x=1773309036; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Q4JWBnGw2ZEtuVoZIgPcwt5Q/MYGWktBhCRjT+2Zxio=; b=J7IFrIoctWIBwVhGsKB8eRc6KwFLn8nC6NimAMJ8ClwxWCvdFZWYylSsBhpQf+Hw5k ohHxhFTmA15r5exkCKkDjPHT5y1Ay6lfWvFOWTEG/wEBvo1V+2BnELZcrmey6Rsy14/+ u6FKmd/1jpjPEJpIqtF7dkAjHugwNBEYBRANQ261URn/+65lZ2MR0/d0+CApLBEt6Jz0 loretQ4iAX6l8jG0xRoBA/8AfwSavY5/8jozCoOa85nRqck8GwBRFZAQ5OXbqzUOz6jU To1EjG/7L9DXKm9aLu09jEdIxlNM2sIWDBFt5OTq4IIqQCLD7J+lJ6M4+7MMI7qHbPzQ 4L9A== X-Forwarded-Encrypted: i=1; AJvYcCXh7IFO2ycP1xyTh5tzcggSsUpNrL6CTv5uH3wA3eAGzK4lIQJNdnkViBY7SMfd6EVa6wCExBZGB6CJd29h@postgresql.org X-Gm-Message-State: AOJu0YyTHIUPSghy6kBdcG8aqtSUFveFED+w/YqVcoRe71ljN2k+uRHA TcUpKOFxfKO88t2jMnjD36WhB7VSinMLQKoWMIXcvjVgBvMmBBkE4awIB0K3FVkbax0xgLcrbRL jgeEPOrfer6ptgPUejNDsnal4e8CV51SjSC9/4gT7 X-Gm-Gg: ATEYQzy0J/1rjyXg9z04pFZuz1coalZkyWPHcg2/Kh2HhjzVmhr4rzvXZFBKvG9J7C5 sbdT/ORVJP61DAdeFNRM22xCmRDy3yqlqatEPm5I/+ErsDaye/v8e7OWYF7fq8FtVNhgQYQ0AMB nzechavxrMxUVEEQ2yeIyegV1qClCJIFNH8Ij0CpO/KXe9W0ChKn5ZeA20i5S6XG6LNL20qXhgK KWaa0NFjM/0GRMcch56VV9MwzihMs+Frv0BXAgEpDR1eroa6Uy3zijeWiCcDGHaNLeNjPlpD3Y5 klacjGqd X-Received: by 2002:a17:907:6ea1:b0:b93:a3db:a68f with SMTP id a640c23a62f3a-b93f147a5c8mr310369866b.47.1772704235665; Thu, 05 Mar 2026 01:50:35 -0800 (PST) MIME-Version: 1.0 References: <202603040943.2jvgphmddgcs@alvherre.pgsql> In-Reply-To: From: Akshay Joshi Date: Thu, 5 Mar 2026 15:20:23 +0530 X-Gm-Features: AaiRm53ykXAQiUgFkAJ932Ztg8E4HWJy7uXS5MI-NM4CF5NhZkF7mfkrjewaiEE Message-ID: Subject: Re: [PATCH] Add pg_get_database_ddl() function to reconstruct CREATE DATABASE statement To: Japin Li Cc: =?UTF-8?Q?=C3=81lvaro_Herrera?= , Euler Taveira , Amul Sul , Andrew Dunstan , Chao Li , Quan Zongliang , pgsql-hackers Content-Type: multipart/mixed; boundary="00000000000042a18f064c43de46" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000042a18f064c43de46 Content-Type: multipart/alternative; boundary="00000000000042a18c064c43de44" --00000000000042a18c064c43de44 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable I=E2=80=99ve addressed all of your comments. Attached is the *v11 patch*, now ready for further review. On Wed, Mar 4, 2026 at 7:31=E2=80=AFPM Japin Li wrote= : > On Wed, 04 Mar 2026 at 18:29, Akshay Joshi > wrote: > > Thanks for the review, Japin. I=E2=80=99ve addressed all of your commen= ts. I > also added a check to throw an error if an option > > appears more than once. > > > > Attached is the v10 patch, now ready for further review. > > > > Thanks for updating the patch. Here are some comments on v10. > > 1. > + * db_oid - OID/Name of the database for which to generate the DDL. > > Should the comment be updated? The code only accepts an OID for `db_oid`, > database names are not supported. > > 2. > + /* Set the OWNER in the DDL if owner is not omitted */ > + if (OidIsValid(dbform->datdba) && !(ddl_flags & PG_DDL_NO_OWNER)) > + { > + get_formatted_string(&buf, pretty_flags, 8, "OWNER =3D %s= ", > + > quote_identifier(dbowner)); > + } > > `dbowner` is only needed inside this `if` =E2=80=94 how about declaring i= t there to > reduce its scope? > > 3. > + /* If is_with_defaults is true, then we skip default > encoding check */ > + if (is_with_defaults || > + > (pg_strcasecmp(pg_encoding_to_char(dbform->encoding), > + > DDL_DEFAULTS.DATABASE.ENCODING) !=3D 0)) > + { > + get_formatted_string(&buf, pretty_flags, 8, > "ENCODING =3D %s", > + > quote_literal_cstr( > + > pg_encoding_to_char(dbform->encoding))); > + } > > How about cache the result of `pg_encoding_to_char()` in a local variable > to > avoid calling it twice? > > -- > Regards, > Japin Li > ChengDu WenWu Information Technology Co., Ltd. > --00000000000042a18c064c43de44 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

I=E2=80=99ve addressed all of your comments.

Atta= ched is the=C2=A0v11 patch, now ready for further review.

<= br>
On Wed, Mar 4, 2026 at 7:31=E2=80=AFPM Japin Li <japinli@hotmail.com> wrote:
On Wed, 04 Mar 2026 at 1= 8:29, Akshay Joshi <akshay.joshi@enterprisedb.com> wrote:
> Thanks for the review, Japin. I=E2=80=99ve addressed all of your comme= nts. I also added a check to throw an error if an option
> appears more than once.
>
> Attached is the v10 patch, now ready for further review.
>

Thanks for updating the patch.=C2=A0 Here are some comments on v10.

1.
+ * db_oid - OID/Name of the database for which to generate the DDL.

Should the comment be updated? The code only accepts an OID for `db_oid`, database names are not supported.

2.
+=C2=A0 =C2=A0 =C2=A0 =C2=A0/* Set the OWNER in the DDL if owner is not omi= tted */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (OidIsValid(dbform->datdba) && !(= ddl_flags & PG_DDL_NO_OWNER))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0{
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0get_formatted_strin= g(&buf, pretty_flags, 8, "OWNER =3D %s",
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 quote_identifier(dbowner))= ;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0}

`dbowner` is only needed inside this `if` =E2=80=94 how about declaring it = there to
reduce its scope?

3.
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/* If is_with_defau= lts is true, then we skip default encoding check */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (is_with_default= s ||
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0(pg_strcasecmp(pg_encoding_to_char(dbform->encoding),
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 DDL_DEFAULTS.DATABASE.ENCODING) !=3D 0))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0{
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0get_formatted_string(&buf, pretty_flags, 8, "ENCODING = =3D %s",
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 quote_literal_cstr(
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0pg_enc= oding_to_char(dbform->encoding)));
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0}

How about cache the result of `pg_encoding_to_char()` in a local variable t= o
avoid calling it twice?

--
Regards,
Japin Li
ChengDu WenWu Information Technology Co., Ltd.
--00000000000042a18c064c43de44-- --00000000000042a18f064c43de46 Content-Type: application/octet-stream; name="v11-0001-Add-pg_get_database_ddl-function-to-reconstruct-ddl.patch" Content-Disposition: attachment; filename="v11-0001-Add-pg_get_database_ddl-function-to-reconstruct-ddl.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmdabhrw0 RnJvbSA5MGM1MjFkNzRjZmE1ZTQ1ZDUxNzRjNGVhNmYyZDE5MmYwNjFkMWMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBXZWQsIDI0IFNlcCAyMDI1IDE3OjQ3OjU5ICswNTMwClN1YmplY3Q6IFtQ QVRDSCB2MTFdIEFkZCBwZ19nZXRfZGF0YWJhc2VfZGRsKCkgZnVuY3Rpb24gdG8gcmVjb25zdHJ1 Y3QgQ1JFQVRFCiBEQVRBQkFTRSBzdGF0ZW1lbnRzLgpNSU1FLVZlcnNpb246IDEuMApDb250ZW50 LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGlu ZzogOGJpdAoKVGhpcyBhZGRzIGEgbmV3IHN5c3RlbSBmdW5jdGlvbiwgcGdfZ2V0X2RhdGFiYXNl X2RkbChkYXRhYmFzZV9uYW1lL2RhdGFiYXNlX29pZCwgZGRsX29wdGlvbnMpLAp3aGljaCByZWNv bnN0cnVjdHMgdGhlIENSRUFURSBEQVRBQkFTRSBzdGF0ZW1lbnQgZm9yIGEgZ2l2ZW4gZGF0YWJh c2UgbmFtZSBvciBPSUQuCgpTdXBwb3J0ZWQgZGRsX29wdGlvbnMgYXJlICdwcmV0dHknLCAnb3du ZXInLCAndGFibGVzcGFjZScgYW5kICdkZWZhdWx0cycgYW5kIHJlc3BlY3RpdmUKdmFsdWVzIGNv dWxkIGJlICd5ZXMnLydvbicvdHJ1ZS8nMScuCgpVc2FnZToKU0VMRUNUIHBnX2dldF9kYXRhYmFz ZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdvd25lcicsICdubycsICdkZWZhdWx0cycsICd5ZXMn KTsKU0VMRUNUIHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdvd25lcics ICcwJywgJ3RhYmxlc3BhY2UnLCAnMCcsICdkZWZhdWx0cycsICcxJyk7ClNFTEVDVCBwZ19nZXRf ZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnb3duZXInLCAnb2ZmJywgJ3ByZXR0eScs ICdvbicpOwpTRUxFQ1QgcGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ293 bmVyJywgZmFsc2UsICdkZWZhdWx0cycsICd0cnVlJywgJ3RhYmxlc3BhY2UnLCAnbm8nKTsKClJl ZmVyZW5jZTogUEctMTUwCkF1dGhvcjogQWtzaGF5IEpvc2hpIDxha3NoYXkuam9zaGlAZW50ZXJw cmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IMOBbHZhcm8gSGVycmVyYSA8YWx2aGVycmVAa3VyaWxl bXUuZGU+ClJldmlld2VkLWJ5OiBFdWxlciBUYXZlaXJhIDxldWxlckBldWxlcnRvLmNvbT4KUmV2 aWV3ZWQtYnk6IFF1YW4gWm9uZ2xpYW5nIDxxdWFuem9uZ2xpYW5nQHllYWgubmV0PgpSZXZpZXdl ZC1ieTogSmFwaW4gTGkgPGphcGlubGlAaG90bWFpbC5jb20+ClJldmlld2VkLWJ5OiBDaGFvIExp IDxsaS5ldmFuLmNoYW9AZ21haWwuY29tPgotLS0KIGRvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5m by5zZ21sICAgICAgICAgfCAgODYgKysrKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1 bmN0aW9ucy5zcWwgfCAgIDYgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAg ICAgICB8IDQwMyArKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdCAgICAgICAgICB8ICAgNyArCiBzcmMvaW5jbHVkZS91dGlscy9kZGxfZGVmYXVs dHMuaCAgICAgICAgIHwgIDM3ICsrKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9kYXRhYmFz ZS5vdXQgICB8IDE4MCArKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9kYXRhYmFzZS5z cWwgICAgICAgIHwgMTEyICsrKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgODMxIGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS91dGlscy9kZGxfZGVmYXVsdHMuaAoK ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sIGIvZG9jL3NyYy9z Z21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwKaW5kZXggMjk0ZjQ1ZTgyYTMuLmMzNDZiOGQxZmNmIDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbAorKysgYi9kb2Mvc3Jj L3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbApAQCAtMzg0NSw0ICszODQ1LDkwIEBAIGFjbCAgICAg IHwge3Bvc3RncmVzPWFyd2REeHRtL3Bvc3RncmVzLGZvbz1yL3Bvc3RncmVzfQogCiAgIDwvc2Vj dDI+CiAKKyAgPHNlY3QyIGlkPSJmdW5jdGlvbnMtZ2V0LW9iamVjdC1kZGwiPgorICAgPHRpdGxl PkdldCBPYmplY3QgRERMIEZ1bmN0aW9uczwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFRoZSBm dW5jdGlvbnMgZGVzY3JpYmVkIGluIDx4cmVmIGxpbmtlbmQ9ImZ1bmN0aW9ucy1nZXQtb2JqZWN0 LWRkbC10YWJsZSIvPgorICAgIHJldHVybiB0aGUgRGF0YSBEZWZpbml0aW9uIExhbmd1YWdlIChE REwpIHN0YXRlbWVudCBmb3IgYW55IGdpdmVuIGRhdGFiYXNlIG9iamVjdC4KKyAgICBUaGlzIGZl YXR1cmUgaXMgaW1wbGVtZW50ZWQgYXMgYSBzZXQgb2YgZGlzdGluY3QgZnVuY3Rpb25zIGZvciBl YWNoIG9iamVjdCB0eXBlLgorICAgPC9wYXJhPgorCisgICA8dGFibGUgaWQ9ImZ1bmN0aW9ucy1n ZXQtb2JqZWN0LWRkbC10YWJsZSI+CisgICAgPHRpdGxlPkdldCBPYmplY3QgRERMIEZ1bmN0aW9u czwvdGl0bGU+CisgICAgPHRncm91cCBjb2xzPSIxIj4KKyAgICAgPHRoZWFkPgorICAgICAgPHJv dz4KKyAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVu Y19zaWduYXR1cmUiPgorICAgICAgICBGdW5jdGlvbgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8 cGFyYT4KKyAgICAgICAgRGVzY3JpcHRpb24KKyAgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAg IDwvcm93PgorICAgICA8L3RoZWFkPgorCisgICAgIDx0Ym9keT4KKyAgICAgIDxyb3c+CisgICAg ICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0 dXJlIj4KKyAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PnBnX2dldF9kYXRh YmFzZV9kZGw8L3ByaW1hcnk+CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rp b24+cGdfZ2V0X2RhdGFiYXNlX2RkbDwvZnVuY3Rpb24+CisgICAgICAgICggPHBhcmFtZXRlcj5k YXRhYmFzZV9pZDwvcGFyYW1ldGVyPiA8dHlwZT5yZWdkYXRhYmFzZTwvdHlwZT4KKyAgICAgICAg PG9wdGlvbmFsPiwgPGxpdGVyYWw+VkFSSUFESUM8L2xpdGVyYWw+IDxwYXJhbWV0ZXI+b3B0aW9u czwvcGFyYW1ldGVyPgorICAgICAgICA8dHlwZT4iYW55IjwvdHlwZT4gPC9vcHRpb25hbD4gKQor ICAgICAgICA8cmV0dXJudmFsdWU+dGV4dDwvcmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgor ICAgICAgIDxwYXJhPgorICAgICAgICBSZWNvbnN0cnVjdHMgdGhlIDxjb21tYW5kPkNSRUFURSBE QVRBQkFTRTwvY29tbWFuZD4gc3RhdGVtZW50IGZyb20gdGhlCisgICAgICAgIHN5c3RlbSBjYXRh bG9ncyBmb3IgYSBzcGVjaWZpZWQgZGF0YWJhc2UgYnkgbmFtZSBvciBPSUQuIFRoZSBvcHRpb25h bAorICAgICAgICB2YXJpYWRpYyBhcmd1bWVudHMgYXJlIG5hbWUvdmFsdWUgcGFpcnMgdG8gY29u dHJvbCB0aGUgb3V0cHV0CisgICAgICAgIGZvcm1hdHRpbmcgYW5kIGNvbnRlbnQgKGUuZy4sIDxs aXRlcmFsPidwcmV0dHknLCB0cnVlLCAnb3duZXInLCBmYWxzZTwvbGl0ZXJhbD4pLgorICAgICAg ICBTdXBwb3J0ZWQgb3B0aW9ucyBhcmUgZXhwbGFpbmVkIGJlbG93LgorICAgICAgICA8L3BhcmE+ PC9lbnRyeT4KKyAgICAgIDwvcm93PgorICAgICA8L3Rib2R5PgorICAgIDwvdGdyb3VwPgorICAg PC90YWJsZT4KKworICA8cGFyYT4KKyAgICBUaGUgPHBhcmFtZXRlcj5vcHRpb25zPC9wYXJhbWV0 ZXI+IGZvciA8ZnVuY3Rpb24+cGdfZ2V0X2RhdGFiYXNlX2RkbDwvZnVuY3Rpb24+CisgICAgcHJv dmlkZSBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHRoZSBnZW5lcmF0ZWQgU1FMLiBPcHRpb25z IGFyZSBwYXNzZWQgYXMKKyAgICBhbHRlcm5hdGluZyBrZXkvdmFsdWUgcGFpcnMgd2hlcmUgdGhl IGtleSBpcyBhIHRleHQgc3RyaW5nIGFuZCB0aGUKKyAgICB2YWx1ZSBpcyBlaXRoZXIgYSBib29s ZWFuIG9yIGEgdGV4dCBzdHJpbmcgcmVwcmVzZW50aW5nIGEgYm9vbGVhbgorICAgICg8bGl0ZXJh bD50cnVlPC9saXRlcmFsPiwgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LCA8bGl0ZXJhbD55ZXM8 L2xpdGVyYWw+LAorICAgIDxsaXRlcmFsPm5vPC9saXRlcmFsPiwgPGxpdGVyYWw+MTwvbGl0ZXJh bD4sIDxsaXRlcmFsPjA8L2xpdGVyYWw+LAorICAgIDxsaXRlcmFsPm9uPC9saXRlcmFsPiwgPGxp dGVyYWw+b2ZmPC9saXRlcmFsPik6CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+ CisgICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPidwcmV0dHknLCB0cnVlPC9saXRlcmFsPiAo b3IgPGxpdGVyYWw+J3ByZXR0eScsICd5ZXMnPC9saXRlcmFsPik6CisgICAgICBBZGRzIG5ld2xp bmVzIGFuZCBpbmRlbnRhdGlvbiBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5LgorICAgICAgPC9wYXJh PgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICA8 bGl0ZXJhbD4nb3duZXInLCBmYWxzZTwvbGl0ZXJhbD4gKG9yIDxsaXRlcmFsPidvd25lcicsICdu byc8L2xpdGVyYWw+KToKKyAgICAgIE9taXRzIHRoZSA8bGl0ZXJhbD5PV05FUjwvbGl0ZXJhbD4g Y2xhdXNlIGZyb20gdGhlIHJlY29uc3RydWN0ZWQgc3RhdGVtZW50LgorICAgICAgPC9wYXJhPgor ICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICA8bGl0 ZXJhbD4ndGFibGVzcGFjZScsIGZhbHNlPC9saXRlcmFsPiAob3IgPGxpdGVyYWw+J3RhYmxlc3Bh Y2UnLCAnMCc8L2xpdGVyYWw+KToKKyAgICAgIE9taXRzIHRoZSA8bGl0ZXJhbD5UQUJMRVNQQUNF PC9saXRlcmFsPiBjbGF1c2UgZnJvbSB0aGUgcmVjb25zdHJ1Y3RlZCBzdGF0ZW1lbnQuCisgICAg ICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4K KyAgICAgIDxsaXRlcmFsPidkZWZhdWx0cycsIHRydWU8L2xpdGVyYWw+IChvciA8bGl0ZXJhbD4n ZGVmYXVsdHMnLCAnMSc8L2xpdGVyYWw+KToKKyAgICAgIEluY2x1ZGVzIGNsYXVzZXMgZm9yIHBh cmFtZXRlcnMgdGhhdCBhcmUgY3VycmVudGx5IGF0IHRoZWlyIGRlZmF1bHQgdmFsdWVzCisgICAg ICAoZS5nLiwgPGxpdGVyYWw+Q09OTkVDVElPTiBMSU1JVCAtMTwvbGl0ZXJhbD4pLCB3aGljaCBh cmUgbm9ybWFsbHkgb21pdHRlZCBmb3IgYnJldml0eS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L2xp c3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L3BhcmE+CisKKyAgPC9zZWN0Mj4KKwog ICA8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rp b25zLnNxbCBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKaW5kZXgg Njk2OTlmODgzMGEuLmFlNTczZTJmYjJjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9n L3N5c3RlbV9mdW5jdGlvbnMuc3FsCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1 bmN0aW9ucy5zcWwKQEAgLTM3OCw2ICszNzgsMTIgQEAgQkVHSU4gQVRPTUlDCiBFTkQ7CiAKIAor Q1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04KKyAgcGdfZ2V0X2RhdGFiYXNlX2RkbChkYXRhYmFz ZV9pZCByZWdkYXRhYmFzZSwgVkFSSUFESUMgb3B0aW9ucyAiYW55IiBERUZBVUxUIE5VTEwpCitS RVRVUk5TIHRleHQKK0xBTkdVQUdFIGludGVybmFsCitBUyAncGdfZ2V0X2RhdGFiYXNlX2RkbCc7 CisKIC0tCiAtLSBUaGUgZGVmYXVsdCBwZXJtaXNzaW9ucyBmb3IgZnVuY3Rpb25zIG1lYW4gdGhh dCBhbnlvbmUgY2FuIGV4ZWN1dGUgdGhlbS4KIC0tIEEgbnVtYmVyIG9mIGZ1bmN0aW9ucyBzaG91 bGRuJ3QgYmUgZXhlY3V0YWJsZSBieSBqdXN0IGFueW9uZSwgYnV0IHJhdGhlcgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3J1bGV1dGlscy5jCmluZGV4IGYxNmYxNTM1Nzg1Li5iYmY4MmMxZDZjMCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9ydWxldXRpbHMuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cv cGdfYXV0aGlkLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX2NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2RhdGFiYXNl LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kZXBlbmQuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X2xhbmd1YWdlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGNsYXNzLmgiCkBAIC01Nyw4ICs1 OCwxMCBAQAogI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKICNpbmNsdWRlICJy ZXdyaXRlL3Jld3JpdGVNYW5pcC5oIgogI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZVN1cHBvcnQu aCIKKyNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgogI2lu Y2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZGRsX2RlZmF1bHRzLmgi CiAjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKICNp bmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCkBAIC04OSwxMSArOTIsNDUgQEAKICNkZWZpbmUgUFJF VFRZRkxBR19JTkRFTlQJCTB4MDAwMgogI2RlZmluZSBQUkVUVFlGTEFHX1NDSEVNQQkJMHgwMDA0 CiAKKy8qIERETCBPcHRpb25zIGZsYWdzICovCisjZGVmaW5lIFBHX0RETF9QUkVUVFlfSU5ERU5U CTB4MDAwMDAwMDEKKyNkZWZpbmUgUEdfRERMX1dJVEhfREVGQVVMVFMJMHgwMDAwMDAwMgorI2Rl ZmluZSBQR19ERExfTk9fT1dORVIJCQkweDAwMDAwMDA0CisjZGVmaW5lIFBHX0RETF9OT19UQUJM RVNQQUNFCTB4MDAwMDAwMDgKKworLyoKKyAqIFN0cnVjdHVyZSB0byBkZWZpbmUgRERMIG9wdGlv bnMgZm9yIHBhcnNlX2RkbF9vcHRpb25zKCkuCisgKiBUaGlzIGFsbG93cyBlYXN5IGFkZGl0aW9u IG9mIG5ldyBvcHRpb25zIGluIHRoZSBmdXR1cmUuCisgKi8KK3R5cGVkZWYgc3RydWN0IERETE9w dGlvbkRlZgoreworCWNvbnN0IGNoYXIgKm5hbWU7CQkJLyogT3B0aW9uIG5hbWUgKGNhc2UtaW5z ZW5zaXRpdmUpICovCisJdWludDMyCQlmbGFnOwkJCS8qIEZsYWcgdG8gc2V0ICovCisJYm9vbAkJ c2V0X29uX3RydWU7CS8qIElmIHRydWUsIHNldCBmbGFnIHdoZW4gdmFsdWUgaXMgdHJ1ZTsgaWYK KwkJCQkJCQkJICogZmFsc2UsIHNldCBmbGFnIHdoZW4gdmFsdWUgaXMgZmFsc2UgKi8KK30JCQlE RExPcHRpb25EZWY7CisKKy8qCisgKiBBcnJheSBvZiBzdXBwb3J0ZWQgRERMIG9wdGlvbnMuCisg KiBUbyBhZGQgYSBuZXcgb3B0aW9uLCBzaW1wbHkgYWRkIGFuIGVudHJ5IHRvIHRoaXMgYXJyYXku CisgKi8KK3N0YXRpYyBjb25zdCBERExPcHRpb25EZWYgZGRsX29wdGlvbl9kZWZzW10gPSB7CisJ eyJwcmV0dHkiLCBQR19ERExfUFJFVFRZX0lOREVOVCwgdHJ1ZX0sCisJeyJkZWZhdWx0cyIsIFBH X0RETF9XSVRIX0RFRkFVTFRTLCB0cnVlfSwKKwl7Im93bmVyIiwgUEdfRERMX05PX09XTkVSLCBm YWxzZX0sCisJeyJ0YWJsZXNwYWNlIiwgUEdfRERMX05PX1RBQkxFU1BBQ0UsIGZhbHNlfSwKK307 CisKKwogLyogU3RhbmRhcmQgY29udmVyc2lvbiBvZiBhICJib29sIHByZXR0eSIgb3B0aW9uIHRv IGRldGFpbGVkIGZsYWdzICovCiAjZGVmaW5lIEdFVF9QUkVUVFlfRkxBR1MocHJldHR5KSBcCiAJ KChwcmV0dHkpID8gKFBSRVRUWUZMQUdfUEFSRU4gfCBQUkVUVFlGTEFHX0lOREVOVCB8IFBSRVRU WUZMQUdfU0NIRU1BKSBcCiAJIDogUFJFVFRZRkxBR19JTkRFTlQpCiAKKyNkZWZpbmUgR0VUX0RE TF9QUkVUVFlfRkxBR1MocHJldHR5KSBcCisJKChwcmV0dHkpID8gKFBSRVRUWUZMQUdfUEFSRU4g fCBQUkVUVFlGTEFHX0lOREVOVCB8IFBSRVRUWUZMQUdfU0NIRU1BKSBcCisJIDogMCkKKwogLyog RGVmYXVsdCBsaW5lIGxlbmd0aCBmb3IgcHJldHR5LXByaW50IHdyYXBwaW5nOiAwIG1lYW5zIHdy YXAgYWx3YXlzICovCiAjZGVmaW5lIFdSQVBfQ09MVU1OX0RFRkFVTFQJCTAKIApAQCAtNTQ3LDYg KzU4NCwxMSBAQCBzdGF0aWMgdm9pZCBnZXRfanNvbl90YWJsZV9uZXN0ZWRfY29sdW1ucyhUYWJs ZUZ1bmMgKnRmLCBKc29uVGFibGVQbGFuICpwbGFuLAogCQkJCQkJCQkJCSAgZGVwYXJzZV9jb250 ZXh0ICpjb250ZXh0LAogCQkJCQkJCQkJCSAgYm9vbCBzaG93aW1wbGljaXQsCiAJCQkJCQkJCQkJ ICBib29sIG5lZWRjb21tYSk7CitzdGF0aWMgdm9pZCBnZXRfZm9ybWF0dGVkX3N0cmluZyhTdHJp bmdJbmZvIGJ1ZiwKKwkJCQkJCQkJIGludCBwcmV0dHlGbGFncywKKwkJCQkJCQkJIGludCBuU3Bh Y2VzLAorCQkJCQkJCQkgY29uc3QgY2hhciAqZm10LC4uLikgcGdfYXR0cmlidXRlX3ByaW50Zig0 LCA1KTsKK3N0YXRpYyBjaGFyICpwZ19nZXRfZGF0YWJhc2VfZGRsX3dvcmtlcihPaWQgZGJfb2lk LCB1aW50MzIgZGRsX2ZsYWdzKTsKIAogI2RlZmluZSBvbmx5X21hcmtlcihydGUpICAoKHJ0ZSkt PmluaCA/ICIiIDogIk9OTFkgIikKIApAQCAtMTM3NjAsMyArMTM4MDIsMzY0IEBAIGdldF9yYW5n ZV9wYXJ0Ym91bmRfc3RyaW5nKExpc3QgKmJvdW5kX2RhdHVtcykKIAogCXJldHVybiBidWYuZGF0 YTsKIH0KKworLyoKKyAqIGdldF9mb3JtYXR0ZWRfc3RyaW5nCisgKgorICogUmV0dXJuIGEgZm9y bWF0dGVkIHZlcnNpb24gb2YgdGhlIHN0cmluZy4KKyAqCisgKiBwcmV0dHlGbGFncyAtIEJhc2Vk IG9uIHByZXR0eUZsYWdzIHRoZSBvdXRwdXQgaW5jbHVkZXMgc3BhY2VzIGFuZAorICogICAgICAg ICAgICAgICBuZXdsaW5lcyAoXG4pLgorICogblNwYWNlcyAtIGluZGVudCB3aXRoIHNwZWNpZmll ZCBudW1iZXIgb2Ygc3BhY2UgY2hhcmFjdGVycy4KKyAqIGZtdCAtIHByaW50Zi1zdHlsZSBmb3Jt YXQgc3RyaW5nIHVzZWQgYnkgYXBwZW5kU3RyaW5nSW5mb1ZBLgorICovCitzdGF0aWMgdm9pZAor Z2V0X2Zvcm1hdHRlZF9zdHJpbmcoU3RyaW5nSW5mbyBidWYsIGludCBwcmV0dHlGbGFncywgaW50 IG5TcGFjZXMsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCit7CisJdmFfbGlzdAkJYXJnczsKKworCWlm IChwcmV0dHlGbGFncyAmIFBSRVRUWUZMQUdfSU5ERU5UKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoYnVmLCAnXG4nKTsKKwkJLyogSW5kZW50IHdpdGggc3BhY2VzICovCisJCWFwcGVuZFN0 cmluZ0luZm9TcGFjZXMoYnVmLCBuU3BhY2VzKTsKKwl9CisJZWxzZQorCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcihidWYsICcgJyk7CisKKwlmb3IgKDs7KQorCXsKKwkJaW50CQkJbmVlZGVkOworCisJ CXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJCW5lZWRlZCA9IGFwcGVuZFN0cmluZ0luZm9WQShidWYs IGZtdCwgYXJncyk7CisJCXZhX2VuZChhcmdzKTsKKwkJaWYgKG5lZWRlZCA9PSAwKQorCQkJYnJl YWs7CisJCWVubGFyZ2VTdHJpbmdJbmZvKGJ1ZiwgbmVlZGVkKTsKKwl9Cit9CisKKy8qKgorICog cGFyc2VfZGRsX29wdGlvbnMgLSBHZW5lcmljIGhlbHBlciB0byBwYXJzZSB2YXJpYWRpYyBuYW1l L3ZhbHVlIG9wdGlvbnMKKyAqIGZjaW5mbzogVGhlIEZ1bmN0aW9uQ2FsbEluZm8gZnJvbSB0aGUg Y2FsbGluZyBmdW5jdGlvbgorICogdmFyaWFkaWNfc3RhcnQ6IFRoZSBhcmd1bWVudCBwb3NpdGlv biB3aGVyZSB2YXJpYWRpYyBhcmd1bWVudHMgc3RhcnQKKyAqCisgKiBSZXR1cm5zOiBCaXRtYXNr IG9mIGZsYWdzIGJhc2VkIG9uIHRoZSBwYXJzZWQgb3B0aW9ucy4KKyAqCisgKiBPcHRpb25zIGFy ZSBwYXNzZWQgYXMgbmFtZS92YWx1ZSBwYWlycy4KKyAqIEZvciBleGFtcGxlOiBwZ19nZXRfZGF0 YWJhc2VfZGRsKCdteWRiJywgJ293bmVyJywgZmFsc2UsICdwcmV0dHknLCB0cnVlKQorICovCitz dGF0aWMgdWludDMyCitwYXJzZV9kZGxfb3B0aW9ucyhGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywg aW50IHZhcmlhZGljX3N0YXJ0KQoreworCXVpbnQzMgkJZmxhZ3MgPSAwOworCXVpbnQzMgkJc2Vl bl9mbGFncyA9IDA7CisJRGF0dW0JICAgKmFyZ3M7CisJYm9vbAkgICAqbnVsbHM7CisJT2lkCQkg ICAqdHlwZXM7CisJaW50CQkJbmFyZ3M7CisJYm9vbAkJZm91bmQgPSBmYWxzZTsKKworCS8qIEV4 dHJhY3QgdmFyaWFkaWMgYXJndW1lbnRzICovCisJbmFyZ3MgPSBleHRyYWN0X3ZhcmlhZGljX2Fy Z3MoZmNpbmZvLCB2YXJpYWRpY19zdGFydCwgdHJ1ZSwKKwkJCQkJCQkJICAmYXJncywgJnR5cGVz LCAmbnVsbHMpOworCisJLyogSWYgbm8gb3B0aW9ucyBwcm92aWRlZCAoVkFSSUFESUMgTlVMTCks IHJldHVybiB0aGUgZW1wdHkgYml0bWFzayAqLworCWlmIChuYXJncyA8PSAwKQorCQlyZXR1cm4g ZmxhZ3M7CisKKwkvKgorCSAqIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBERUZBVUxUIE5VTEwgd2Fz IHVzZWQgYW5kIG5vIGV4cGxpY2l0IHZhcmlhZGljCisJICogYXJndW1lbnRzIHdlcmUgcHJvdmlk ZWQuIEluIHRoaXMgY2FzZSwgd2UgZ2V0IGEgc2luZ2xlIE5VTEwgYXJndW1lbnQuCisJICovCisJ aWYgKG5hcmdzID09IDEgJiYgbnVsbHNbMF0pCisJCXJldHVybiBmbGFnczsKKworCS8qIEFyZ3Vt ZW50cyBtdXN0IGNvbWUgaW4gbmFtZS92YWx1ZSBwYWlycyAqLworCWlmIChuYXJncyAlIDIgIT0g MCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJ2YXJpYWRpYyBhcmd1bWVudHMgbXVzdCBiZSBuYW1l L3ZhbHVlIHBhaXJzIiksCisJCQkJIGVycmhpbnQoIlByb3ZpZGUgYW4gZXZlbiBudW1iZXIgb2Yg dmFyaWFkaWMgYXJndW1lbnRzIHRoYXQgY2FuIGJlIGRpdmlkZWQgaW50byBwYWlycy4iKSkpOwor CisJZm9yIChpbnQgaSA9IDA7IGkgPCBuYXJnczsgaSArPSAyKQorCXsKKwkJY2hhcgkgICAqbmFt ZTsKKwkJYm9vbAkJYnZhbDsKKworCQlmb3VuZCA9IGZhbHNlOworCisJCS8qIEtleSBtdXN0IG5v dCBiZSBudWxsICovCisJCWlmIChudWxsc1tpXSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJu YW1lIGF0IHZhcmlhZGljIHBvc2l0aW9uICVkIGlzIG51bGwiLCBpICsgMSkpKTsKKworCQkvKiBL ZXkgbXVzdCBiZSB0ZXh0IHR5cGUgKi8KKwkJaWYgKHR5cGVzW2ldICE9IFRFWFRPSUQpCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJIGVycm1zZygibmFtZSBhdCB2YXJpYWRpYyBwb3NpdGlvbiAlZCBoYXMgdHlw ZSAlcywgZXhwZWN0ZWQgdHlwZSAlcyIsCisJCQkJCQkJaSArIDEsIGZvcm1hdF90eXBlX2JlKHR5 cGVzW2ldKSwKKwkJCQkJCQlmb3JtYXRfdHlwZV9iZShURVhUT0lEKSkpKTsKKworCQluYW1lID0g VGV4dERhdHVtR2V0Q1N0cmluZyhhcmdzW2ldKTsKKworCQkvKiBWYWx1ZSBtdXN0IG5vdCBiZSBu dWxsICovCisJCWlmIChudWxsc1tpICsgMV0pCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygidmFs dWUgZm9yIG9wdGlvbiBcIiVzXCIgbXVzdCBub3QgYmUgbnVsbCIsCisJCQkJCQkJbmFtZSkpKTsK KworCQkvKiBWYWx1ZSBtdXN0IGJlIGJvb2xlYW4gb3IgdGV4dCB0eXBlICovCisJCWlmICh0eXBl c1tpICsgMV0gPT0gQk9PTE9JRCkKKwkJeworCQkJYnZhbCA9IERhdHVtR2V0Qm9vbChhcmdzW2kg KyAxXSk7CisJCX0KKwkJZWxzZSBpZiAodHlwZXNbaSArIDFdID09IFRFWFRPSUQpCisJCXsKKwkJ CWNoYXIJICAgKnZhbHN0ciA9IFRleHREYXR1bUdldENTdHJpbmcoYXJnc1tpICsgMV0pOworCisJ CQlpZiAoIXBhcnNlX2Jvb2wodmFsc3RyLCAmYnZhbCkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVy cm1zZygiYXJndW1lbnQgJWQ6IGludmFsaWQgdmFsdWUgXCIlc1wiIGZvciBrZXkgXCIlc1wiIiwK KwkJCQkJCQkJaSArIDIsIHZhbHN0ciwgbmFtZSksCisJCQkJCQkgZXJyaGludCgiVmFsaWQgdmFs dWVzIGFyZTogdHJ1ZSwgZmFsc2UsIHllcywgbm8sIDEsIDAsIG9uLCBvZmYuIikpKTsKKwkJCXBm cmVlKHZhbHN0cik7CisJCX0KKwkJZWxzZQorCQl7CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygi YXJndW1lbnQgJWQ6IHZhbHVlIGZvciBrZXkgXCIlc1wiIG11c3QgYmUgYm9vbGVhbiBvciB0ZXh0 IHR5cGUiLAorCQkJCQkJCWkgKyAyLCBuYW1lKSkpOworCQl9CisKKwkJLyoKKwkJICogTG9vayB1 cCB0aGUgb3B0aW9uIGluIHRoZSBkZGxfb3B0aW9uX2RlZnMgYXJyYXkgYW5kIHNldCB0aGUKKwkJ ICogYXBwcm9wcmlhdGUgZmxhZyBiYXNlZCBvbiB0aGUgdmFsdWUuCisJCSAqLworCQlmb3IgKGlu dCBqID0gMDsgaiA8IGxlbmd0aG9mKGRkbF9vcHRpb25fZGVmcyk7IGorKykKKwkJeworCQkJY29u c3QJCURETE9wdGlvbkRlZiAqb3B0ID0gJmRkbF9vcHRpb25fZGVmc1tqXTsKKworCQkJaWYgKHBn X3N0cmNhc2VjbXAobmFtZSwgb3B0LT5uYW1lKSA9PSAwKQorCQkJeworCQkJCS8qIEVycm9yIGlm IHRoaXMgb3B0aW9uIHdhcyBhbHJlYWR5IHNwZWNpZmllZCAqLworCQkJCWlmIChzZWVuX2ZsYWdz ICYgb3B0LT5mbGFnKQorCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJCSBlcnJtc2coIm9wdGlvbiBcIiVz XCIgaXMgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlIiwgbmFtZSkpKTsKKworCQkJCXNlZW5fZmxh Z3MgfD0gb3B0LT5mbGFnOworCisJCQkJLyoKKwkJCQkgKiBTZXQgdGhlIGZsYWcgaWYgdGhlIHZh bHVlIG1hdGNoZXMgdGhlIHNldF9vbl90cnVlCisJCQkJICogY29uZGl0aW9uOiBpZiBzZXRfb25f dHJ1ZSBpcyB0cnVlLCBzZXQgZmxhZyB3aGVuIGJ2YWwgaXMKKwkJCQkgKiB0cnVlOyBpZiBzZXRf b25fdHJ1ZSBpcyBmYWxzZSwgc2V0IGZsYWcgd2hlbiBidmFsIGlzIGZhbHNlLgorCQkJCSAqLwor CQkJCWlmIChidmFsID09IG9wdC0+c2V0X29uX3RydWUpCisJCQkJCWZsYWdzIHw9IG9wdC0+Zmxh ZzsKKworCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICgh Zm91bmQpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygidW5yZWNvZ25pemVkIG9wdGlvbjogXCIl c1wiIiwgbmFtZSkpKTsKKworCQlwZnJlZShuYW1lKTsKKwl9CisKKwlyZXR1cm4gZmxhZ3M7Cit9 CisKKy8qCisgKiBwZ19nZXRfZGF0YWJhc2VfZGRsCisgKgorICogR2VuZXJhdGUgYSBDUkVBVEUg REFUQUJBU0Ugc3RhdGVtZW50IGZvciB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlIG5hbWUgb3Igb2lk LgorICoKKyAqIGRiX29pZCAtIE9JRCBvZiB0aGUgZGF0YWJhc2UgZm9yIHdoaWNoIHRvIGdlbmVy YXRlIHRoZSBEREwuCisgKiBvcHRpb25zIC0gVmFyaWFkaWMgbmFtZS92YWx1ZSBwYWlycyB0byBt b2RpZnkgdGhlIG91dHB1dC4KKyAqLworRGF0dW0KK3BnX2dldF9kYXRhYmFzZV9kZGwoUEdfRlVO Q1RJT05fQVJHUykKK3sKKwlPaWQJCQlkYl9vaWQ7CisJdWludDMyCQlkZGxfZmxhZ3M7CisJY2hh cgkgICAqcmVzOworCisJaWYgKFBHX0FSR0lTTlVMTCgwKSkKKwkJUEdfUkVUVVJOX05VTEwoKTsK KworCWRiX29pZCA9IFBHX0dFVEFSR19PSUQoMCk7CisKKwkvKiBQYXJzZSB2YXJpYWRpYyBvcHRp b25zIHN0YXJ0aW5nIGZyb20gYXJndW1lbnQgMSAqLworCWRkbF9mbGFncyA9IHBhcnNlX2RkbF9v cHRpb25zKGZjaW5mbywgMSk7CisKKwlyZXMgPSBwZ19nZXRfZGF0YWJhc2VfZGRsX3dvcmtlcihk Yl9vaWQsIGRkbF9mbGFncyk7CisKKwlQR19SRVRVUk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHJl cykpOworfQorCitzdGF0aWMgY2hhciAqCitwZ19nZXRfZGF0YWJhc2VfZGRsX3dvcmtlcihPaWQg ZGJfb2lkLCB1aW50MzIgZGRsX2ZsYWdzKQoreworCWNvbnN0IGNoYXIgKmVuY29kaW5nID0gTlVM TDsKKwlib29sCQlhdHRyX2lzbnVsbDsKKwlEYXR1bQkJZGJ2YWx1ZTsKKwlIZWFwVHVwbGUJdHVw bGVfZGF0YWJhc2U7CisJRm9ybV9wZ19kYXRhYmFzZSBkYmZvcm07CisJU3RyaW5nSW5mb0RhdGEg YnVmOworCUFjbFJlc3VsdAlhY2xyZXN1bHQ7CisKKwkvKiBWYXJpYWJsZXMgZm9yIGRkbF9vcHRp b25zIHBhcnNpbmcgKi8KKwlpbnQJCQlwcmV0dHlfZmxhZ3MgPSAwOworCWJvb2wJCWlzX3dpdGhf ZGVmYXVsdHMgPSBmYWxzZTsKKworCS8qIFNldCB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MgKi8KKwlp ZiAoZGRsX2ZsYWdzICYgUEdfRERMX1BSRVRUWV9JTkRFTlQpCisJCXByZXR0eV9mbGFncyA9IEdF VF9ERExfUFJFVFRZX0ZMQUdTKDEpOworCisJaXNfd2l0aF9kZWZhdWx0cyA9IChkZGxfZmxhZ3Mg JiBQR19ERExfV0lUSF9ERUZBVUxUUykgPyB0cnVlIDogZmFsc2U7CisKKwkvKgorCSAqIFVzZXIg bXVzdCBoYXZlIGNvbm5lY3QgcHJpdmlsZWdlIGZvciB0YXJnZXQgZGF0YWJhc2UuCisJICovCisJ YWNscmVzdWx0ID0gb2JqZWN0X2FjbGNoZWNrKERhdGFiYXNlUmVsYXRpb25JZCwgZGJfb2lkLCBH ZXRVc2VySWQoKSwKKwkJCQkJCQkJQUNMX0NPTk5FQ1QpOworCWlmIChhY2xyZXN1bHQgIT0gQUNM Q0hFQ0tfT0sgJiYKKwkJIWhhc19wcml2c19vZl9yb2xlKEdldFVzZXJJZCgpLCBST0xFX1BHX1JF QURfQUxMX1NUQVRTKSkKKwl7CisJCWFjbGNoZWNrX2Vycm9yKGFjbHJlc3VsdCwgT0JKRUNUX0RB VEFCQVNFLAorCQkJCQkgICBnZXRfZGF0YWJhc2VfbmFtZShkYl9vaWQpKTsKKwl9CisKKwkvKiBM b29rIHVwIHRoZSBkYXRhYmFzZSBpbiBwZ19kYXRhYmFzZSAqLworCXR1cGxlX2RhdGFiYXNlID0g U2VhcmNoU3lzQ2FjaGUxKERBVEFCQVNFT0lELCBPYmplY3RJZEdldERhdHVtKGRiX29pZCkpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZV9kYXRhYmFzZSkpCisJCWVyZXBvcnQoRVJST1Is CisJCQkJZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCWVycm1zZygiZGF0 YWJhc2Ugd2l0aCBvaWQgJXUgZG9lcyBub3QgZXhpc3QiLCBkYl9vaWQpKTsKKworCWRiZm9ybSA9 IChGb3JtX3BnX2RhdGFiYXNlKSBHRVRTVFJVQ1QodHVwbGVfZGF0YWJhc2UpOworCisJaW5pdFN0 cmluZ0luZm8oJmJ1Zik7CisKKwkvKiBCdWlsZCB0aGUgQ1JFQVRFIERBVEFCQVNFIHN0YXRlbWVu dCAqLworCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIkNSRUFURSBEQVRBQkFTRSAlcyIsCisJCQkJ CSBxdW90ZV9pZGVudGlmaWVyKGRiZm9ybS0+ZGF0bmFtZS5kYXRhKSk7CisJZ2V0X2Zvcm1hdHRl ZF9zdHJpbmcoJmJ1ZiwgcHJldHR5X2ZsYWdzLCA0LCAiV0lUSCIpOworCisJLyogU2V0IHRoZSBP V05FUiBpbiB0aGUgRERMIGlmIG93bmVyIGlzIG5vdCBvbWl0dGVkICovCisJaWYgKE9pZElzVmFs aWQoZGJmb3JtLT5kYXRkYmEpICYmICEoZGRsX2ZsYWdzICYgUEdfRERMX05PX09XTkVSKSkKKwl7 CisJCWNoYXIJICAgKmRib3duZXIgPSBHZXRVc2VyTmFtZUZyb21JZChkYmZvcm0tPmRhdGRiYSwg ZmFsc2UpOworCisJCWlmIChkYm93bmVyICE9IE5VTEwpCisJCXsKKwkJCWdldF9mb3JtYXR0ZWRf c3RyaW5nKCZidWYsIHByZXR0eV9mbGFncywgOCwgIk9XTkVSID0gJXMiLAorCQkJCQkJCQkgcXVv dGVfaWRlbnRpZmllcihkYm93bmVyKSk7CisJCX0KKwl9CisKKwkvKiBTZXQgdGhlIEVOQ09ESU5H IGluIHRoZSBEREwgKi8KKwllbmNvZGluZyA9IHBnX2VuY29kaW5nX3RvX2NoYXIoZGJmb3JtLT5l bmNvZGluZyk7CisKKwlpZiAoaXNfd2l0aF9kZWZhdWx0cyB8fAorCQlwZ19zdHJjYXNlY21wKGVu Y29kaW5nLCBERExfREVGQVVMVFMuREFUQUJBU0UuRU5DT0RJTkcpICE9IDApCisJeworCQlnZXRf Zm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJFTkNPRElORyA9ICVzIiwK KwkJCQkJCQkgcXVvdGVfbGl0ZXJhbF9jc3RyKGVuY29kaW5nKSk7CisJfQorCisJLyogRmV0Y2gg dGhlIHZhbHVlIG9mIExDX0NPTExBVEUgKi8KKwlkYnZhbHVlID0gU3lzQ2FjaGVHZXRBdHRyKERB VEFCQVNFT0lELCB0dXBsZV9kYXRhYmFzZSwKKwkJCQkJCQkgIEFudW1fcGdfZGF0YWJhc2VfZGF0 Y29sbGF0ZSwgJmF0dHJfaXNudWxsKTsKKwlpZiAoIWF0dHJfaXNudWxsKQorCQlnZXRfZm9ybWF0 dGVkX3N0cmluZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJMQ19DT0xMQVRFID0gJXMiLAorCQkJ CQkJCSBxdW90ZV9saXRlcmFsX2NzdHIoVGV4dERhdHVtR2V0Q1N0cmluZyhkYnZhbHVlKSkpOwor CS8qIEZldGNoIHRoZSB2YWx1ZSBvZiBMQ19DVFlQRSAqLworCWRidmFsdWUgPSBTeXNDYWNoZUdl dEF0dHIoREFUQUJBU0VPSUQsIHR1cGxlX2RhdGFiYXNlLAorCQkJCQkJCSAgQW51bV9wZ19kYXRh YmFzZV9kYXRjdHlwZSwgJmF0dHJfaXNudWxsKTsKKwlpZiAoIWF0dHJfaXNudWxsKQorCQlnZXRf Zm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJMQ19DVFlQRSA9ICVzIiwK KwkJCQkJCQkgcXVvdGVfbGl0ZXJhbF9jc3RyKFRleHREYXR1bUdldENTdHJpbmcoZGJ2YWx1ZSkp KTsKKwkvKiBGZXRjaCB0aGUgdmFsdWUgb2YgTE9DQUxFICovCisJZGJ2YWx1ZSA9IFN5c0NhY2hl R2V0QXR0cihEQVRBQkFTRU9JRCwgdHVwbGVfZGF0YWJhc2UsCisJCQkJCQkJICBBbnVtX3BnX2Rh dGFiYXNlX2RhdGxvY2FsZSwgJmF0dHJfaXNudWxsKTsKKwlpZiAoIWF0dHJfaXNudWxsICYmIGRi Zm9ybS0+ZGF0bG9jcHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0JVSUxUSU4pCisJCWdldF9mb3Jt YXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eV9mbGFncywgOCwgIkJVSUxUSU5fTE9DQUxFID0gJXMi LAorCQkJCQkJCSBxdW90ZV9saXRlcmFsX2NzdHIoVGV4dERhdHVtR2V0Q1N0cmluZyhkYnZhbHVl KSkpOworCWVsc2UgaWYgKCFhdHRyX2lzbnVsbCAmJiBkYmZvcm0tPmRhdGxvY3Byb3ZpZGVyID09 IENPTExQUk9WSURFUl9JQ1UpCisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eV9m bGFncywgOCwgIklDVV9MT0NBTEUgPSAlcyIsCisJCQkJCQkJIHF1b3RlX2xpdGVyYWxfY3N0cihU ZXh0RGF0dW1HZXRDU3RyaW5nKGRidmFsdWUpKSk7CisJZWxzZSBpZiAoIWF0dHJfaXNudWxsKQor CQlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJMT0NBTEUgPSAl cyIsCisJCQkJCQkJIHF1b3RlX2xpdGVyYWxfY3N0cihUZXh0RGF0dW1HZXRDU3RyaW5nKGRidmFs dWUpKSk7CisKKwkvKiBGZXRjaCB0aGUgdmFsdWUgb2YgSUNVX1JVTEVTICovCisJZGJ2YWx1ZSA9 IFN5c0NhY2hlR2V0QXR0cihEQVRBQkFTRU9JRCwgdHVwbGVfZGF0YWJhc2UsCisJCQkJCQkJICBB bnVtX3BnX2RhdGFiYXNlX2RhdGljdXJ1bGVzLCAmYXR0cl9pc251bGwpOworCWlmICghYXR0cl9p c251bGwgJiYgZGJmb3JtLT5kYXRsb2Nwcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQorCQln ZXRfZm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJJQ1VfUlVMRVMgPSAl cyIsCisJCQkJCQkJIHF1b3RlX2xpdGVyYWxfY3N0cihUZXh0RGF0dW1HZXRDU3RyaW5nKGRidmFs dWUpKSk7CisKKwkvKiBGZXRjaCB0aGUgdmFsdWUgb2YgQ09MTEFUSU9OX1ZFUlNJT04gKi8KKwlk YnZhbHVlID0gU3lzQ2FjaGVHZXRBdHRyKERBVEFCQVNFT0lELCB0dXBsZV9kYXRhYmFzZSwKKwkJ CQkJCQkgIEFudW1fcGdfZGF0YWJhc2VfZGF0Y29sbHZlcnNpb24sICZhdHRyX2lzbnVsbCk7CisJ aWYgKCFhdHRyX2lzbnVsbCkKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5X2Zs YWdzLCA4LCAiQ09MTEFUSU9OX1ZFUlNJT04gPSAlcyIsCisJCQkJCQkJIHF1b3RlX2xpdGVyYWxf Y3N0cihUZXh0RGF0dW1HZXRDU3RyaW5nKGRidmFsdWUpKSk7CisKKwkvKiBTZXQgdGhlIGFwcHJv cHJpYXRlIExPQ0FMRV9QUk9WSURFUiAqLworCWlmIChkYmZvcm0tPmRhdGxvY3Byb3ZpZGVyID09 IENPTExQUk9WSURFUl9CVUlMVElOKQorCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0 dHlfZmxhZ3MsIDgsICJMT0NBTEVfUFJPVklERVIgPSBidWlsdGluIik7CisJZWxzZSBpZiAoZGJm b3JtLT5kYXRsb2Nwcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQorCQlnZXRfZm9ybWF0dGVk X3N0cmluZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJMT0NBTEVfUFJPVklERVIgPSBpY3UiKTsK KwllbHNlIGlmIChpc193aXRoX2RlZmF1bHRzKQorCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVm LCBwcmV0dHlfZmxhZ3MsIDgsICJMT0NBTEVfUFJPVklERVIgPSBsaWJjIik7CisKKwkvKiBTZXQg dGhlIFRBQkxFU1BBQ0UgaW4gdGhlIERETCBpZiB0YWJsZXNwYWNlIGlzIG5vdCBvbWl0dGVkICov CisJaWYgKE9pZElzVmFsaWQoZGJmb3JtLT5kYXR0YWJsZXNwYWNlKSAmJiAhKGRkbF9mbGFncyAm IFBHX0RETF9OT19UQUJMRVNQQUNFKSkKKwl7CisJCS8qIEdldCB0aGUgdGFibGVzcGFjZSBuYW1l IHJlc3BlY3RpdmUgdG8gdGhlIGdpdmVuIHRhYmxlc3BhY2Ugb2lkICovCisJCWNoYXIJICAgKmRi VGFibGVzcGFjZSA9IGdldF90YWJsZXNwYWNlX25hbWUoZGJmb3JtLT5kYXR0YWJsZXNwYWNlKTsK KworCQkvKiBJZiBpdCdzIHdpdGggZGVmYXVsdHMsIHdlIHNraXAgZGVmYXVsdCB0YWJsZXNwYWNl IGNoZWNrICovCisJCWlmIChpc193aXRoX2RlZmF1bHRzIHx8CisJCQkocGdfc3RyY2FzZWNtcChk YlRhYmxlc3BhY2UsIERETF9ERUZBVUxUUy5EQVRBQkFTRS5UQUJMRVNQQUNFKSAhPSAwKSkKKwkJ CWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eV9mbGFncywgOCwgIlRBQkxFU1BBQ0Ug PSAlcyIsCisJCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKGRiVGFibGVzcGFjZSkpOworCX0KKwor CWlmIChpc193aXRoX2RlZmF1bHRzIHx8CisJCShkYmZvcm0tPmRhdGFsbG93Y29ubiAhPSBERExf REVGQVVMVFMuREFUQUJBU0UuQUxMT1dfQ09OTikpCisJeworCQlnZXRfZm9ybWF0dGVkX3N0cmlu ZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJBTExPV19DT05ORUNUSU9OUyA9ICVzIiwKKwkJCQkJ CQkgZGJmb3JtLT5kYXRhbGxvd2Nvbm4gPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKwl9CisKKwlpZiAo aXNfd2l0aF9kZWZhdWx0cyB8fAorCQkoZGJmb3JtLT5kYXRjb25ubGltaXQgIT0gRERMX0RFRkFV TFRTLkRBVEFCQVNFLkNPTk5fTElNSVQpKQorCXsKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1 ZiwgcHJldHR5X2ZsYWdzLCA4LCAiQ09OTkVDVElPTiBMSU1JVCA9ICVkIiwKKwkJCQkJCQkgZGJm b3JtLT5kYXRjb25ubGltaXQpOworCX0KKworCWlmIChpc193aXRoX2RlZmF1bHRzIHx8IGRiZm9y bS0+ZGF0aXN0ZW1wbGF0ZSkKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5X2Zs YWdzLCA4LCAiSVNfVEVNUExBVEUgPSAlcyIsCisJCQkJCQkJIGRiZm9ybS0+ZGF0aXN0ZW1wbGF0 ZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJzsn KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZV9kYXRhYmFzZSk7CisKKwlyZXR1cm4gYnVmLmRh dGE7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBkYWM0MDk5MmNiYy4uYzhmMzczNjM5 MmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtNDAzMSw2ICs0MDMxLDEzIEBACiAgIHBy b25hbWUgPT4gJ3BnX2dldF9mdW5jdGlvbl9zcWxib2R5JywgcHJvdm9sYXRpbGUgPT4gJ3MnLAog ICBwcm9yZXR0eXBlID0+ICd0ZXh0JywgcHJvYXJndHlwZXMgPT4gJ29pZCcsCiAgIHByb3NyYyA9 PiAncGdfZ2V0X2Z1bmN0aW9uX3NxbGJvZHknIH0sCit7IG9pZCA9PiAnOTQ5MicsIGRlc2NyID0+ ICdnZXQgQ1JFQVRFIHN0YXRlbWVudCBmb3IgZGF0YWJhc2UgbmFtZSBhbmQgb2lkJywKKyAgcHJv bmFtZSA9PiAncGdfZ2V0X2RhdGFiYXNlX2RkbCcsIHByb3ZhcmlhZGljID0+ICdhbnknLCBwcm9p c3N0cmljdCA9PiAnZicsCisgIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcmV0dHlwZSA9PiAndGV4 dCcsCisgIHByb2FyZ3R5cGVzID0+ICdyZWdkYXRhYmFzZSBhbnknLAorICBwcm9hcmdtb2RlcyA9 PiAne2ksdn0nLAorICBwcm9hbGxhcmd0eXBlcyA9PiAne3JlZ2RhdGFiYXNlLGFueX0nLAorICBw cm9zcmMgPT4gJ3BnX2dldF9kYXRhYmFzZV9kZGwnIH0sCiAKIHsgb2lkID0+ICcxNjg2JywgZGVz Y3IgPT4gJ2xpc3Qgb2YgU1FMIGtleXdvcmRzJywKICAgcHJvbmFtZSA9PiAncGdfZ2V0X2tleXdv cmRzJywgcHJvY29zdCA9PiAnMTAnLCBwcm9yb3dzID0+ICc1MDAnLApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvdXRpbHMvZGRsX2RlZmF1bHRzLmggYi9zcmMvaW5jbHVkZS91dGlscy9kZGxfZGVm YXVsdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWYyMWM0MmMw NWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9kZGxfZGVmYXVsdHMuaApA QCAtMCwwICsxLDM3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVmYXVsdHMu aAorICoJICBEZWNsYXJhdGlvbnMgZm9yIERETCBkZWZhdWx0cy4KKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvdXRpbHMvZGRsX2RlZmF1bHRz LmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBERExfREVGQVVMVFNfSAor I2RlZmluZSBERExfREVGQVVMVFNfSAorCitzdGF0aWMgY29uc3Qgc3RydWN0Cit7CisJc3RydWN0 CisJeworCQljb25zdCBjaGFyICpFTkNPRElORzsKKwkJY29uc3QgY2hhciAqVEFCTEVTUEFDRTsK KwkJaW50CQkJQ09OTl9MSU1JVDsKKwkJYm9vbAkJQUxMT1dfQ09OTjsKKwl9CQkJREFUQUJBU0U7 CisKKwkvKiBBZGQgbW9yZSBvYmplY3QgdHlwZXMgYXMgbmVlZGVkICovCit9CQkJRERMX0RFRkFV TFRTID0geworCisJLkRBVEFCQVNFID0geworCQkuRU5DT0RJTkcgPSAiVVRGOCIsCisJCS5UQUJM RVNQQUNFID0gInBnX2RlZmF1bHQiLAorCQkuQ09OTl9MSU1JVCA9IC0xLAorCQkuQUxMT1dfQ09O TiA9IHRydWUsCisJfQorfTsKKworI2VuZGlmCQkJCQkJCS8qIERETF9ERUZBVUxUU19IICovCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2RhdGFiYXNlLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZGF0YWJhc2Uub3V0CmluZGV4IDZiODc5YjBmNjJhLi41ZDI4 MzQ3NzFhYyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9kYXRhYmFzZS5v dXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9kYXRhYmFzZS5vdXQKQEAgLTEsMyAr MSw1NyBAQAorLS0KKy0tIFJlY29uc3RydWN0IERETAorLS0KKy0tIFRvIHByb2R1Y2Ugc3RhYmxl IHJlZ3Jlc3Npb24gdGVzdCBvdXRwdXQsIGl0J3MgdXN1YWxseSBuZWNlc3NhcnkgdG8KKy0tIGln bm9yZSBjb2xsYXRpb24gYW5kIGxvY2FsZSByZWxhdGVkIGRldGFpbHMuIFRoaXMgZmlsdGVyCist LSBmdW5jdGlvbnMgcmVtb3ZlcyBjb2xsYXRpb24gYW5kIGxvY2FsZSByZWxhdGVkIGRldGFpbHMu CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBkZGxfZmlsdGVyKGRkbF9pbnB1dCBURVhUKQor UkVUVVJOUyBURVhUIEFTICQkCitERUNMQVJFCisgICAgY2xlYW5lZF9kZGwgVEVYVDsKK0JFR0lO CisgICAgLS0gUmVtb3ZlICVMT0NBTEVfUFJPVklERVIlIHBsYWNlaG9sZGVycworICAgIGNsZWFu ZWRfZGRsIDo9IHJlZ2V4cF9yZXBsYWNlKAorICAgICAgICBkZGxfaW5wdXQsCisgICAgICAgICdc cypcbUxPQ0FMRV9QUk9WSURFUlxNXHMqPVxzKihbJyciXT9bXicnIlxzXStbJyciXT8pJywKKyAg ICAgICAgJycsCisgICAgICAgICdnaScKKyAgICApOworCisJLS0gUmVtb3ZlIExDX0NPTExBVEUg YXNzaWdubWVudHMKKyAgICBjbGVhbmVkX2RkbCA6PSByZWdleHBfcmVwbGFjZSgKKyAgICAgICAg Y2xlYW5lZF9kZGwsCisgICAgICAgICdccypMQ19DT0xMQVRFXHMqPVxzKihbJyciXSlbXicnIl0q XDEnLAorICAgICAgICAnJywKKyAgICAgICAgJ2dpJworICAgICk7CisKKyAgICAtLSBSZW1vdmUg TENfQ1RZUEUgYXNzaWdubWVudHMKKyAgICBjbGVhbmVkX2RkbCA6PSByZWdleHBfcmVwbGFjZSgK KyAgICAgICAgY2xlYW5lZF9kZGwsCisgICAgICAgICdccypMQ19DVFlQRVxzKj1ccyooWycnIl0p W14nJyJdKlwxJywKKyAgICAgICAgJycsCisgICAgICAgICdnaScKKyAgICApOworCisgICAgLS0g UmVtb3ZlICVMT0NBTEUlIHBsYWNlaG9sZGVycworICAgIGNsZWFuZWRfZGRsIDo9IHJlZ2V4cF9y ZXBsYWNlKAorICAgICAgICBjbGVhbmVkX2RkbCwKKyAgICAgICAgJ1xzKlxTKkxPQ0FMRVxTKlxz Kj0/XHMqKFsnJyJdKVteJyciXSpcMScsCisJCScnLAorCQknZ2knCisJKTsKKworICAgIC0tIFJl bW92ZSAlQ09MTEFUSU9OJSBwbGFjZWhvbGRlcnMKKyAgICBjbGVhbmVkX2RkbCA6PSByZWdleHBf cmVwbGFjZSgKKyAgICAgICAgY2xlYW5lZF9kZGwsCisgICAgICAgICdccypcUypDT0xMQVRJT05c Uypccyo9P1xzKihbJyciXSlbXicnIl0qXDEnLAorICAgICAgICAnJywKKyAgICAgICAgJ2dpJwor ICAgICk7CisKKyAgICBSRVRVUk4gY2xlYW5lZF9kZGw7CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBn c3FsOwogQ1JFQVRFIERBVEFCQVNFIHJlZ3Jlc3Npb25fdGJkCiAJRU5DT0RJTkcgdXRmOCBMQ19D T0xMQVRFICJDIiBMQ19DVFlQRSAiQyIgVEVNUExBVEUgdGVtcGxhdGUwOwogQUxURVIgREFUQUJB U0UgcmVncmVzc2lvbl90YmQgUkVOQU1FIFRPIHJlZ3Jlc3Npb25fdXRmODsKQEAgLTE2LDYgKzcw LDEzMiBAQCBDUkVBVEUgUk9MRSByZWdyZXNzX2RhdGRiYV9iZWZvcmU7CiBDUkVBVEUgUk9MRSBy ZWdyZXNzX2RhdGRiYV9hZnRlcjsKIEFMVEVSIERBVEFCQVNFIHJlZ3Jlc3Npb25fdXRmOCBPV05F UiBUTyByZWdyZXNzX2RhdGRiYV9iZWZvcmU7CiBSRUFTU0lHTiBPV05FRCBCWSByZWdyZXNzX2Rh dGRiYV9iZWZvcmUgVE8gcmVncmVzc19kYXRkYmFfYWZ0ZXI7CistLSBUZXN0IHBnX2dldF9kYXRh YmFzZV9kZGwKKy0tIERhdGFiYXNlIGRvZXNuJ3QgZXhpc3RzCitTRUxFQ1QgcGdfZ2V0X2RhdGFi YXNlX2RkbCgncmVncmVzc2lvbl9kYXRhYmFzZScpOworRVJST1I6ICBkYXRhYmFzZSAicmVncmVz c2lvbl9kYXRhYmFzZSIgZG9lcyBub3QgZXhpc3QKK0xJTkUgMTogU0VMRUNUIHBnX2dldF9kYXRh YmFzZV9kZGwoJ3JlZ3Jlc3Npb25fZGF0YWJhc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXgorLS0gVGVzdCBOVUxMIHZhbHVlCitTRUxFQ1QgcGdfZ2V0X2RhdGFiYXNl X2RkbChOVUxMKTsKKyBwZ19nZXRfZGF0YWJhc2VfZGRsIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgCisoMSByb3cpCisKKy0tIFdpdGhvdXQgb3B0aW9ucworU0VMRUNUIGRkbF9maWx0ZXIocGdf Z2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JykpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRkbF9maWx0ZXIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjggV0lUSCBPV05FUiA9IHJlZ3Jlc3NfZGF0ZGJh X2FmdGVyIENPTk5FQ1RJT04gTElNSVQgPSAxMjM7CisoMSByb3cpCisKKy0tIFdpdGggTm8gT3du ZXIKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRm OCcsICdvd25lcicsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGRkbF9maWx0 ZXIgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgREFUQUJBU0UgcmVn cmVzc2lvbl91dGY4IFdJVEggQ09OTkVDVElPTiBMSU1JVCA9IDEyMzsKKygxIHJvdykKKworLS0g V2l0aCBObyBUYWJsZXNwYWNlCitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRs KCdyZWdyZXNzaW9uX3V0ZjgnLCAnZGVmYXVsdHMnLCB0cnVlLCAndGFibGVzcGFjZScsIGZhbHNl KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZGxfZmlsdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERBVEFCQVNFIHJlZ3Jlc3Np b25fdXRmOCBXSVRIIE9XTkVSID0gcmVncmVzc19kYXRkYmFfYWZ0ZXIgRU5DT0RJTkcgPSAnVVRG OCcgQUxMT1dfQ09OTkVDVElPTlMgPSB0cnVlIENPTk5FQ1RJT04gTElNSVQgPSAxMjMgSVNfVEVN UExBVEUgPSBmYWxzZTsKKygxIHJvdykKKworLS0gV2l0aCBEZWZhdWx0cworU0VMRUNUIGRkbF9m aWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ2RlZmF1bHRzJywg dHJ1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRsX2ZpbHRlciAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0 ZjggV0lUSCBPV05FUiA9IHJlZ3Jlc3NfZGF0ZGJhX2FmdGVyIEVOQ09ESU5HID0gJ1VURjgnIFRB QkxFU1BBQ0UgPSBwZ19kZWZhdWx0IEFMTE9XX0NPTk5FQ1RJT05TID0gdHJ1ZSBDT05ORUNUSU9O IExJTUlUID0gMTIzIElTX1RFTVBMQVRFID0gZmFsc2U7CisoMSByb3cpCisKKy0tIFdpdGggTm8g T3duZXIsIE5vIFRhYmxlc3BhY2UgYW5kIFdpdGggRGVmYXVsdHMKK1NFTEVDVCBkZGxfZmlsdGVy KHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdvd25lcicsIGZhbHNlLCAn dGFibGVzcGFjZScsIGZhbHNlLCAnZGVmYXVsdHMnLCB0cnVlKSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZGxfZmlsdGVyICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgREFUQUJBU0UgcmVncmVzc2lvbl91dGY4IFdJVEggRU5DT0RJTkcg PSAnVVRGOCcgQUxMT1dfQ09OTkVDVElPTlMgPSB0cnVlIENPTk5FQ1RJT04gTElNSVQgPSAxMjMg SVNfVEVNUExBVEUgPSBmYWxzZTsKKygxIHJvdykKKworLS0gV2l0aCBQcmV0dHkgZm9ybWF0dGVk CitccHNldCBmb3JtYXQgdW5hbGlnbmVkCitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJh c2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAncHJldHR5JywgdHJ1ZSkpOworZGRsX2ZpbHRlcgor Q1JFQVRFIERBVEFCQVNFIHJlZ3Jlc3Npb25fdXRmOAorICAgIFdJVEgKKyAgICAgICAgT1dORVIg PSByZWdyZXNzX2RhdGRiYV9hZnRlcgorICAgICAgICBDT05ORUNUSU9OIExJTUlUID0gMTIzOwor KDEgcm93KQorLS0gV2l0aCBObyBPd25lciBhbmQgTm8gVGFibGVzcGFjZQorU0VMRUNUIGRkbF9m aWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ3ByZXR0eScsIHRy dWUsICdvd25lcicsIGZhbHNlLCAndGFibGVzcGFjZScsIGZhbHNlKSk7CitkZGxfZmlsdGVyCitD UkVBVEUgREFUQUJBU0UgcmVncmVzc2lvbl91dGY4CisgICAgV0lUSAorICAgICAgICBDT05ORUNU SU9OIExJTUlUID0gMTIzOworKDEgcm93KQorLS0gV2l0aCBEZWZhdWx0cworU0VMRUNUIGRkbF9m aWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ3ByZXR0eScsIHRy dWUsICdkZWZhdWx0cycsIHRydWUpKTsKK2RkbF9maWx0ZXIKK0NSRUFURSBEQVRBQkFTRSByZWdy ZXNzaW9uX3V0ZjgKKyAgICBXSVRICisgICAgICAgIE9XTkVSID0gcmVncmVzc19kYXRkYmFfYWZ0 ZXIKKyAgICAgICAgRU5DT0RJTkcgPSAnVVRGOCcKKyAgICAgICAgVEFCTEVTUEFDRSA9IHBnX2Rl ZmF1bHQKKyAgICAgICAgQUxMT1dfQ09OTkVDVElPTlMgPSB0cnVlCisgICAgICAgIENPTk5FQ1RJ T04gTElNSVQgPSAxMjMKKyAgICAgICAgSVNfVEVNUExBVEUgPSBmYWxzZTsKKygxIHJvdykKKy0t IFdpdGggTm8gT3duZXIsIE5vIFRhYmxlc3BhY2UgYW5kIFdpdGggRGVmYXVsdHMKK1NFTEVDVCBk ZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdwcmV0dHkn LCB0cnVlLCAnb3duZXInLCBmYWxzZSwgJ3RhYmxlc3BhY2UnLCBmYWxzZSwgJ2RlZmF1bHRzJywg dHJ1ZSkpOworZGRsX2ZpbHRlcgorQ1JFQVRFIERBVEFCQVNFIHJlZ3Jlc3Npb25fdXRmOAorICAg IFdJVEgKKyAgICAgICAgRU5DT0RJTkcgPSAnVVRGOCcKKyAgICAgICAgQUxMT1dfQ09OTkVDVElP TlMgPSB0cnVlCisgICAgICAgIENPTk5FQ1RJT04gTElNSVQgPSAxMjMKKyAgICAgICAgSVNfVEVN UExBVEUgPSBmYWxzZTsKKygxIHJvdykKKy0tIFRlc3Qgd2l0aCB0ZXh0IHZhbHVlczogJ3llcycs ICdubycsICcxJywgJzAnLCAnb24nLCAnb2ZmJworXHBzZXQgZm9ybWF0IGFsaWduZWQKKy0tIFVz aW5nICd5ZXMnIGFuZCAnbm8nCitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRs KCdyZWdyZXNzaW9uX3V0ZjgnLCAnb3duZXInLCAnbm8nLCAnZGVmYXVsdHMnLCAneWVzJykpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGRsX2ZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERBVEFCQVNFIHJlZ3Jlc3Npb25fdXRmOCBXSVRIIEVO Q09ESU5HID0gJ1VURjgnIFRBQkxFU1BBQ0UgPSBwZ19kZWZhdWx0IEFMTE9XX0NPTk5FQ1RJT05T ID0gdHJ1ZSBDT05ORUNUSU9OIExJTUlUID0gMTIzIElTX1RFTVBMQVRFID0gZmFsc2U7CisoMSBy b3cpCisKKy0tIFVzaW5nICcxJyBhbmQgJzAnCitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0 YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnb3duZXInLCAnMCcsICd0YWJsZXNwYWNlJywg JzAnLCAnZGVmYXVsdHMnLCAnMScpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRkbF9maWx0ZXIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjggV0lUSCBFTkNPRElORyA9ICdVVEY4JyBBTExPV19D T05ORUNUSU9OUyA9IHRydWUgQ09OTkVDVElPTiBMSU1JVCA9IDEyMyBJU19URU1QTEFURSA9IGZh bHNlOworKDEgcm93KQorCistLSBVc2luZyAnb24nIGFuZCAnb2ZmJworU0VMRUNUIGRkbF9maWx0 ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ293bmVyJywgJ29mZics ICdwcmV0dHknLCAnb24nKSk7CisgICAgICAgICAgIGRkbF9maWx0ZXIgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBEQVRBQkFTRSByZWdyZXNz aW9uX3V0ZjgrCisgICAgIFdJVEggICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgIENP Tk5FQ1RJT04gTElNSVQgPSAxMjM7CisoMSByb3cpCisKKy0tIE1peGVkIGJvb2xlYW4gYW5kIHRl eHQgdmFsdWVzCitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNz aW9uX3V0ZjgnLCAnb3duZXInLCBmYWxzZSwgJ2RlZmF1bHRzJywgJ3RydWUnLCAndGFibGVzcGFj ZScsICdubycpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRkbF9maWx0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBEQVRBQkFTRSBy ZWdyZXNzaW9uX3V0ZjggV0lUSCBFTkNPRElORyA9ICdVVEY4JyBBTExPV19DT05ORUNUSU9OUyA9 IHRydWUgQ09OTkVDVElPTiBMSU1JVCA9IDEyMyBJU19URU1QTEFURSA9IGZhbHNlOworKDEgcm93 KQorCistLSBUZXN0IGR1cGxpY2F0ZSBvcHRpb24gKHNob3VsZCBlcnJvcikKK1NFTEVDVCBwZ19n ZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnb3duZXInLCBmYWxzZSwgJ293bmVy JywgdHJ1ZSk7CitFUlJPUjogIG9wdGlvbiAib3duZXIiIGlzIHNwZWNpZmllZCBtb3JlIHRoYW4g b25jZQorLS0gVGVzdCBpbnZhbGlkIHRleHQgdmFsdWUgKHNob3VsZCBlcnJvcikKK1NFTEVDVCBw Z19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnb3duZXInLCAnaW52YWxpZCcp OworRVJST1I6ICBhcmd1bWVudCAyOiBpbnZhbGlkIHZhbHVlICJpbnZhbGlkIiBmb3Iga2V5ICJv d25lciIKK0hJTlQ6ICBWYWxpZCB2YWx1ZXMgYXJlOiB0cnVlLCBmYWxzZSwgeWVzLCBubywgMSwg MCwgb24sIG9mZi4KIERST1AgREFUQUJBU0UgcmVncmVzc2lvbl91dGY4OworRFJPUCBGVU5DVElP TiBkZGxfZmlsdGVyKHRleHQpOwogRFJPUCBST0xFIHJlZ3Jlc3NfZGF0ZGJhX2JlZm9yZTsKIERS T1AgUk9MRSByZWdyZXNzX2RhdGRiYV9hZnRlcjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2RhdGFiYXNlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2RhdGFiYXNlLnNxbApp bmRleCA0ZWYzNjEyNzI5MS4uYjY3YjU2MDA2ZDggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2RhdGFiYXNlLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9kYXRhYmFzZS5z cWwKQEAgLTEsMyArMSw1OSBAQAorLS0KKy0tIFJlY29uc3RydWN0IERETAorLS0KKy0tIFRvIHBy b2R1Y2Ugc3RhYmxlIHJlZ3Jlc3Npb24gdGVzdCBvdXRwdXQsIGl0J3MgdXN1YWxseSBuZWNlc3Nh cnkgdG8KKy0tIGlnbm9yZSBjb2xsYXRpb24gYW5kIGxvY2FsZSByZWxhdGVkIGRldGFpbHMuIFRo aXMgZmlsdGVyCistLSBmdW5jdGlvbnMgcmVtb3ZlcyBjb2xsYXRpb24gYW5kIGxvY2FsZSByZWxh dGVkIGRldGFpbHMuCisKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGRkbF9maWx0ZXIoZGRs X2lucHV0IFRFWFQpCitSRVRVUk5TIFRFWFQgQVMgJCQKK0RFQ0xBUkUKKyAgICBjbGVhbmVkX2Rk bCBURVhUOworQkVHSU4KKyAgICAtLSBSZW1vdmUgJUxPQ0FMRV9QUk9WSURFUiUgcGxhY2Vob2xk ZXJzCisgICAgY2xlYW5lZF9kZGwgOj0gcmVnZXhwX3JlcGxhY2UoCisgICAgICAgIGRkbF9pbnB1 dCwKKyAgICAgICAgJ1xzKlxtTE9DQUxFX1BST1ZJREVSXE1ccyo9XHMqKFsnJyJdP1teJyciXHNd K1snJyJdPyknLAorICAgICAgICAnJywKKyAgICAgICAgJ2dpJworICAgICk7CisKKwktLSBSZW1v dmUgTENfQ09MTEFURSBhc3NpZ25tZW50cworICAgIGNsZWFuZWRfZGRsIDo9IHJlZ2V4cF9yZXBs YWNlKAorICAgICAgICBjbGVhbmVkX2RkbCwKKyAgICAgICAgJ1xzKkxDX0NPTExBVEVccyo9XHMq KFsnJyJdKVteJyciXSpcMScsCisgICAgICAgICcnLAorICAgICAgICAnZ2knCisgICAgKTsKKwor ICAgIC0tIFJlbW92ZSBMQ19DVFlQRSBhc3NpZ25tZW50cworICAgIGNsZWFuZWRfZGRsIDo9IHJl Z2V4cF9yZXBsYWNlKAorICAgICAgICBjbGVhbmVkX2RkbCwKKyAgICAgICAgJ1xzKkxDX0NUWVBF XHMqPVxzKihbJyciXSlbXicnIl0qXDEnLAorICAgICAgICAnJywKKyAgICAgICAgJ2dpJworICAg ICk7CisKKyAgICAtLSBSZW1vdmUgJUxPQ0FMRSUgcGxhY2Vob2xkZXJzCisgICAgY2xlYW5lZF9k ZGwgOj0gcmVnZXhwX3JlcGxhY2UoCisgICAgICAgIGNsZWFuZWRfZGRsLAorICAgICAgICAnXHMq XFMqTE9DQUxFXFMqXHMqPT9ccyooWycnIl0pW14nJyJdKlwxJywKKwkJJycsCisJCSdnaScKKwkp OworCisgICAgLS0gUmVtb3ZlICVDT0xMQVRJT04lIHBsYWNlaG9sZGVycworICAgIGNsZWFuZWRf ZGRsIDo9IHJlZ2V4cF9yZXBsYWNlKAorICAgICAgICBjbGVhbmVkX2RkbCwKKyAgICAgICAgJ1xz KlxTKkNPTExBVElPTlxTKlxzKj0/XHMqKFsnJyJdKVteJyciXSpcMScsCisgICAgICAgICcnLAor ICAgICAgICAnZ2knCisgICAgKTsKKworICAgIFJFVFVSTiBjbGVhbmVkX2RkbDsKK0VORDsKKyQk IExBTkdVQUdFIHBscGdzcWw7CisKIENSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3RiZAogCUVO Q09ESU5HIHV0ZjggTENfQ09MTEFURSAiQyIgTENfQ1RZUEUgIkMiIFRFTVBMQVRFIHRlbXBsYXRl MDsKIEFMVEVSIERBVEFCQVNFIHJlZ3Jlc3Npb25fdGJkIFJFTkFNRSBUTyByZWdyZXNzaW9uX3V0 Zjg7CkBAIC0xOSw2ICs3NSw2MiBAQCBDUkVBVEUgUk9MRSByZWdyZXNzX2RhdGRiYV9hZnRlcjsK IEFMVEVSIERBVEFCQVNFIHJlZ3Jlc3Npb25fdXRmOCBPV05FUiBUTyByZWdyZXNzX2RhdGRiYV9i ZWZvcmU7CiBSRUFTU0lHTiBPV05FRCBCWSByZWdyZXNzX2RhdGRiYV9iZWZvcmUgVE8gcmVncmVz c19kYXRkYmFfYWZ0ZXI7CiAKKy0tIFRlc3QgcGdfZ2V0X2RhdGFiYXNlX2RkbAorLS0gRGF0YWJh c2UgZG9lc24ndCBleGlzdHMKK1NFTEVDVCBwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9u X2RhdGFiYXNlJyk7CisKKy0tIFRlc3QgTlVMTCB2YWx1ZQorU0VMRUNUIHBnX2dldF9kYXRhYmFz ZV9kZGwoTlVMTCk7CisKKy0tIFdpdGhvdXQgb3B0aW9ucworU0VMRUNUIGRkbF9maWx0ZXIocGdf Z2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JykpOworCistLSBXaXRoIE5vIE93bmVy CitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0Zjgn LCAnb3duZXInLCBmYWxzZSkpOworCistLSBXaXRoIE5vIFRhYmxlc3BhY2UKK1NFTEVDVCBkZGxf ZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdkZWZhdWx0cycs IHRydWUsICd0YWJsZXNwYWNlJywgZmFsc2UpKTsKKworLS0gV2l0aCBEZWZhdWx0cworU0VMRUNU IGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ2RlZmF1 bHRzJywgdHJ1ZSkpOworCistLSBXaXRoIE5vIE93bmVyLCBObyBUYWJsZXNwYWNlIGFuZCBXaXRo IERlZmF1bHRzCitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNz aW9uX3V0ZjgnLCAnb3duZXInLCBmYWxzZSwgJ3RhYmxlc3BhY2UnLCBmYWxzZSwgJ2RlZmF1bHRz JywgdHJ1ZSkpOworCistLSBXaXRoIFByZXR0eSBmb3JtYXR0ZWQKK1xwc2V0IGZvcm1hdCB1bmFs aWduZWQKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25f dXRmOCcsICdwcmV0dHknLCB0cnVlKSk7CisKKy0tIFdpdGggTm8gT3duZXIgYW5kIE5vIFRhYmxl c3BhY2UKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25f dXRmOCcsICdwcmV0dHknLCB0cnVlLCAnb3duZXInLCBmYWxzZSwgJ3RhYmxlc3BhY2UnLCBmYWxz ZSkpOworCistLSBXaXRoIERlZmF1bHRzCitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJh c2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAncHJldHR5JywgdHJ1ZSwgJ2RlZmF1bHRzJywgdHJ1 ZSkpOworCistLSBXaXRoIE5vIE93bmVyLCBObyBUYWJsZXNwYWNlIGFuZCBXaXRoIERlZmF1bHRz CitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0Zjgn LCAncHJldHR5JywgdHJ1ZSwgJ293bmVyJywgZmFsc2UsICd0YWJsZXNwYWNlJywgZmFsc2UsICdk ZWZhdWx0cycsIHRydWUpKTsKKworLS0gVGVzdCB3aXRoIHRleHQgdmFsdWVzOiAneWVzJywgJ25v JywgJzEnLCAnMCcsICdvbicsICdvZmYnCitccHNldCBmb3JtYXQgYWxpZ25lZAorLS0gVXNpbmcg J3llcycgYW5kICdubycKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3Jl Z3Jlc3Npb25fdXRmOCcsICdvd25lcicsICdubycsICdkZWZhdWx0cycsICd5ZXMnKSk7CisKKy0t IFVzaW5nICcxJyBhbmQgJzAnCitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRs KCdyZWdyZXNzaW9uX3V0ZjgnLCAnb3duZXInLCAnMCcsICd0YWJsZXNwYWNlJywgJzAnLCAnZGVm YXVsdHMnLCAnMScpKTsKKworLS0gVXNpbmcgJ29uJyBhbmQgJ29mZicKK1NFTEVDVCBkZGxfZmls dGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdvd25lcicsICdvZmYn LCAncHJldHR5JywgJ29uJykpOworCistLSBNaXhlZCBib29sZWFuIGFuZCB0ZXh0IHZhbHVlcwor U0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4Jywg J293bmVyJywgZmFsc2UsICdkZWZhdWx0cycsICd0cnVlJywgJ3RhYmxlc3BhY2UnLCAnbm8nKSk7 CisKKy0tIFRlc3QgZHVwbGljYXRlIG9wdGlvbiAoc2hvdWxkIGVycm9yKQorU0VMRUNUIHBnX2dl dF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdvd25lcicsIGZhbHNlLCAnb3duZXIn LCB0cnVlKTsKKworLS0gVGVzdCBpbnZhbGlkIHRleHQgdmFsdWUgKHNob3VsZCBlcnJvcikKK1NF TEVDVCBwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnb3duZXInLCAnaW52 YWxpZCcpOworCiBEUk9QIERBVEFCQVNFIHJlZ3Jlc3Npb25fdXRmODsKK0RST1AgRlVOQ1RJT04g ZGRsX2ZpbHRlcih0ZXh0KTsKIERST1AgUk9MRSByZWdyZXNzX2RhdGRiYV9iZWZvcmU7CiBEUk9Q IFJPTEUgcmVncmVzc19kYXRkYmFfYWZ0ZXI7Ci0tIAoyLjUxLjAKCg== --00000000000042a18f064c43de46--