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 1wbWPo-002dIz-1n for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Jun 2026 04:37:44 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wbWPn-004Lr9-1U for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Jun 2026 04:37:43 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wbWPm-004Lqy-2p for pgsql-hackers@lists.postgresql.org; Mon, 22 Jun 2026 04:37:43 +0000 Received: from mail-oa1-x36.google.com ([2001:4860:4864:20::36]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wbWPl-00000001XDu-05jk for pgsql-hackers@lists.postgresql.org; Mon, 22 Jun 2026 04:37:41 +0000 Received: by mail-oa1-x36.google.com with SMTP id 586e51a60fabf-43cce34c881so2834051fac.2 for ; Sun, 21 Jun 2026 21:37:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782103060; cv=none; d=google.com; s=arc-20240605; b=Mdb9BebBqfMlDvSI5qE3HFmKbDAjCOJErHgrS1p4EVAjUJ//Azmjeja2SC1wzMW6m1 1r79rGjX+EG3xFhdvfhOps3glpSGUUs6fSZIQl0u5h1489LQllb2GaHfiWQIJSIzcD3p O2haowLfeqRW/n3mBfD9mSGouider2fwfWlCrLqgHRf0CmK2Z2cQjeFVY1ywiqkZdhwu P3CiZ1/qbKWF7mZikzozsuQBjmHBuSilaCKR7DhVZt1ceCMyAZvY/M0ApMshbEM5d647 TeyV8pE3/YJWWEJnlwFtnG8oW186+rCOohZBCvczZHL89deMZxz1axDZa07wnRELlXaL 9N9A== 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=DzaZprCSfvmA4HDGTwAlgpochgXpQGwwm6ZnkhAVgjc=; fh=zq9Xc78vzEfQihEzgrpX9/+kUsuq5JvIBu/SinvujhU=; b=L5J34BOFr8RoWjgjhjz5CuP70VUn+OTQwiN7EPnSnRSkct30UXnjiIIn1IMEhtXNIC zHmjaJLsb05N7rVuRydlIOsoAI5xi3eez0fsl4jEh617qvKHpnh98bmQDnW/YaQeW1mn +PHXxo1XVLp/9IXuMwBkAgti48RNoAfgKyS6Mo9/3vnuhZFkUinVaYZ3m3UshgOXTom+ X3BYAEQjyH9Ha6bNjVamkQcWLIvsqIlW1J1MmND8sa6d4MU80nRqYwaaUXHe55+VvDxt ztmE7lCToucKKhIgR9O65jzEafPTnxJN+xe5y5adiMyV77COW8qUrjJXjp96gixchLZM hHkg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782103060; x=1782707860; darn=lists.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=DzaZprCSfvmA4HDGTwAlgpochgXpQGwwm6ZnkhAVgjc=; b=es7uFxbo2KmgEXOSTqv6q3CpsRhHTp4dfiBFF1uaxsnG5WExXYux+NniFpPLHPzi59 XF+wpwqzJtLaTEBa525sYGCCFg+Pk3bvQpZcjVmBd3GtZ7SYSl6qpUL/YXFzGxhd5n1W RvVg2e7/MT9wc3D+G6baePJmBi+6BZ/KLbyAyM3O7G8S+VR7kAzrLoAwxOIRJb7KTyDO XcH8l1KpkHFghoggq+EmdYsgQycYlVgQMrWJkbMw+ewp13d+qFf+XCvc4O86Le34eO1V 43xyUQG2lyINbVuCSZJ2PfhinhSqVtpMVXxd/Gp08N0Ez7Rjeb8NDZ7i/WjVo4v9ETYH TcmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782103060; x=1782707860; 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=DzaZprCSfvmA4HDGTwAlgpochgXpQGwwm6ZnkhAVgjc=; b=PgiCuWOxewxaBbN8IdsG1IPJ2I//8+sj3WqAkoW664GTSylSUGn4hnQEa0ty4JV9bI f4NfpKkPiJ3i8JmkIVJAE6r5nmeYzt+aJhirfqZN5tgqb2GjxsDr02w9p/Q4s+MupFBJ s56i+0gDAPKNMCSZSDGRc859YEEHx+k6tqyUO02Uy0fl8w+zs7dMruvvGh5vWDhhsp71 2ccSu2IgLThQvJC2692xp/1yTDv8mqYpNaZi7zc7AZxcmkk8K84lq7Vaks1k6Jnkd7Rg NQgLNhpy/mkkSBf8TGoFhgqGiVfEr2RncV7M1lqdf+KUnOVg/t5kDoPFD9yskx+X717U zVew== X-Forwarded-Encrypted: i=1; AFNElJ/MlSiS69EPOGrNAcQNocm25HrGUhN3tkDbC5+aU0svr/cwzSqEC6n6lvlDpz2BvIUeswtdjNjT1os29EYf@lists.postgresql.org X-Gm-Message-State: AOJu0Yzr2zZjRBIYV1QHe/OJOqg5TQMuLm/C3pPmVj1OiJ4nYmPgAHsd Cwc+4fDKJSeGvnawabVedAPnZDhcjl5yEe8VwH4Z24bmMSjdmVNkV3nniDCR38qwUEIiHr/Z/4j 2zPZYFKpTQLIxc0qK+/7fx7kjYgTqt24= X-Gm-Gg: AfdE7clBCTqtuiJ/9ToNVSQhw9bCxVQ7TJuC83/Ac2aHtC8KvG0yym4KtE268EkWRn1 dCm6YboMl7pnyEW5lqezb6mVqLCHYP7vcEL8VNStrSAjuzYoFo9jpFx6xrZ4JnKkWSv/mLYBwsT V/fD1Iw15z3eHVap+xyr4ASvbVk6x1HRGH85UMfM0gl3OutZ4yMQbUUqjeFbXlY2VPdh+/ZiXYp IsMVvc+VcwiiVqBSOjCyH+nVZZUGD/9KrbSIIuU9dcl5TKFD6aBojnG3jB5cSQq/XoR4vQtYSZ3 5DAMv74tjSamk8AvFDQ0lCw8cDJn X-Received: by 2002:a05:6808:5184:b0:485:3a3f:c2d6 with SMTP id 5614622812f47-4896ac49370mr13577122b6e.31.1782103059665; Sun, 21 Jun 2026 21:37:39 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: JoongHyuk Shin Date: Mon, 22 Jun 2026 13:37:27 +0900 X-Gm-Features: AVVi8CcGOMZ8ZAZ85_s2lATkn4jhFzALRk094ZKap-qETF54u6DmYX3-yE0Cg30 Message-ID: Subject: Re: [PATCH] Don't call ereport(ERROR) from recovery target GUC assign hooks To: =?UTF-8?Q?=C3=81lvaro_Herrera?= Cc: Scott Ray , Fujii Masao , Michael Paquier , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000d32e990654d033cd" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d32e990654d033cd Content-Type: multipart/alternative; boundary="000000000000d32e970654d033cb" --000000000000d32e970654d033cb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks for the review. v6 attached. The set-parameter list in the errdetail now wraps the separator and quotes in _() so the punctuation is translatable, following 3692a622d3fd. The five GetConfigOption() checks are now a local macro, as suggested. --=20 JH Shin On Sun, Jun 21, 2026 at 9:32=E2=80=AFPM =C3=81lvaro Herrera wrote: > Hello, > > On 2026-Jun-21, JoongHyuk Shin wrote: > > > The errdetail now lists which recovery_target_* parameters are actually > set, > > instead of the full candidate list. > > This follows Scott's idea to surface the set targets; > > following =C3=81lvaro, the values are dropped > > and a new errhint points to pg_settings for them and their sources. > > > > I kept the "which ones are set" list in errdetail rather than errhint, > > it states the current configuration, which reads as detail, > > while the errhint carries the actionable pg_settings pointer. > > Please see https://postgr.es/c/3692a622d3fd for more on translatable > message construction. You should end up with a translatable string in > a _() call like > _(", \"%s\"") > and the GUC names in a separate string in each case. > > Maybe you can make this a local macro to avoid repetitive coding, > > #define considerAndComplainAboutGUC(gucname, buf) \ > do { \ > val =3D GetConfigOption(gucname, false, false); \ > if (val[0] !=3D '\0') \ > { \ > ntargets++; \ > if (buf.len =3D=3D 0) \ > appendStringInfoString(&buf, _("\"%s\""), gucname); \ > else \ > appendStringInfoString(&buf, _(", \"%s\""), gucname); \ > } \ > } while (0) > > considerAndComplainAboutGUC("recovery_target", buf); > considerAndComplainAboutGUC("recovery_target_lsn", buf); > and so on. (Of course, you should choose a less stupid macro name, but > you get my meaning.) > > -- > =C3=81lvaro Herrera PostgreSQL Developer =E2=80=94 > https://www.EnterpriseDB.com/ > "... In accounting terms this makes perfect sense. To rational humans, = it > is insane. Welcome to IBM." (Robert X. Cringel= y) > > https://www.cringely.com/2015/06/03/autodesks-john-walker-explained-hp-an= d-ibm-in-1991/ > --000000000000d32e970654d033cb Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Thanks for the review.

v6 attached.

The set-= parameter list in the errdetail now wraps the separator and quotes in _() <= br>so the punctuation is translatable, following 3692a622d3fd.
The five = GetConfigOption() checks are now a local macro, as suggested.

-- JH Shin

On Sun, Jun 21, 2026 at 9:32=E2=80=AFPM =C3= =81lvaro Herrera <alvherre@kuril= emu.de> wrote:
Hello,

On 2026-Jun-21, JoongHyuk Shin wrote:

> The errdetail now lists which recovery_target_* parameters are actuall= y set,
> instead of the full candidate list.
> This follows Scott's idea to surface the set targets;
> following =C3=81lvaro, the values are dropped
> and a new errhint points to pg_settings for them and their sources. >
> I kept the "which ones are set" list in errdetail rather tha= n errhint,
> it states the current configuration, which reads as detail,
> while the errhint carries the actionable pg_settings pointer.

Please see https://postgr.es/c/3692a622d3fd for more on translat= able
message construction.=C2=A0 You should end up with a translatable string in=
a _() call like
=C2=A0 _(", \"%s\"")
and the GUC names in a separate string in each case.

Maybe you can make this a local macro to avoid repetitive coding,

#define considerAndComplainAboutGUC(gucname, buf) \
=C2=A0 =C2=A0do { \
=C2=A0 =C2=A0 =C2=A0 =C2=A0val =3D GetConfigOption(gucname, false, false); = \
=C2=A0 =C2=A0 =C2=A0 =C2=A0if (val[0] !=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=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ntargets++;=C2=A0 =C2=A0 =C2=A0 = =C2=A0 \
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (buf.len =3D=3D 0)=C2=A0 \
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 appendStringInfoStr= ing(&buf, _("\"%s\""), gucname); \
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 else=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 appendStringInfoStr= ing(&buf, _(", \"%s\""), gucname); \
=C2=A0 =C2=A0 =C2=A0 =C2=A0} \
=C2=A0 =C2=A0} while (0)

considerAndComplainAboutGUC("recovery_target", buf);
considerAndComplainAboutGUC("recovery_target_lsn", buf);
and so on.=C2=A0 (Of course, you should choose a less stupid macro name, bu= t
you get my meaning.)

--
=C3=81lvaro Herrera=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0PostgreSQL Developer= =C2=A0 =E2=80=94=C2=A0 https://www.EnterpriseDB.com/
"...=C2=A0 In accounting terms this makes perfect sense.=C2=A0 To rati= onal humans, it
is insane.=C2=A0 Welcome to IBM."=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(Robert X. Cr= ingely)
https://www.c= ringely.com/2015/06/03/autodesks-john-walker-explained-hp-and-ibm-in-1991/<= /a>
--000000000000d32e970654d033cb-- --000000000000d32e990654d033cd Content-Type: application/octet-stream; name="v6-0001-Don-t-call-ereport-ERROR-from-recovery-target-GUC.patch" Content-Disposition: attachment; filename="v6-0001-Don-t-call-ereport-ERROR-from-recovery-target-GUC.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqoq4hkj0 RnJvbSA3ZjA1NjAwZmI3NjY5OWEwOWRhYTY3MWRkZjRkNWM4NWQxYzk0NGQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKb29uZ0h5dWsgU2hpbiA8c2poOTEwODA1QGdtYWlsLmNvbT4K RGF0ZTogU3VuLCAyMSBKdW4gMjAyNiAxNzo0NToyNSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjZd IERvbid0IGNhbGwgZXJlcG9ydChFUlJPUikgZnJvbSByZWNvdmVyeSB0YXJnZXQgR1VDIGFzc2ln bgogaG9va3MKClRoZSBmaXZlIHJlY292ZXJ5IHRhcmdldCBHVUMgYXNzaWduIGhvb2tzIChhc3Np Z25fcmVjb3ZlcnlfdGFyZ2V0LAphc3NpZ25fcmVjb3ZlcnlfdGFyZ2V0X2xzbiwgYXNzaWduX3Jl Y292ZXJ5X3RhcmdldF9uYW1lLAphc3NpZ25fcmVjb3ZlcnlfdGFyZ2V0X3RpbWUsIGFzc2lnbl9y ZWNvdmVyeV90YXJnZXRfeGlkKSBhbGwgY2FsbGVkCmVycm9yX211bHRpcGxlX3JlY292ZXJ5X3Rh cmdldHMoKSwgd2hpY2ggaW52b2tlZCBlcmVwb3J0KEVSUk9SKS4gIFRoZQpHVUMgUkVBRE1FIGV4 cGxpY2l0bHkgc3RhdGVzIHRoYXQgYXNzaWduIGhvb2tzIG11c3QgbmV2ZXIgZmFpbDsgcmFpc2lu ZwphbiBlcnJvciBmcm9tIGFuIGFzc2lnbiBob29rIGxlYXZlcyBndWMuYydzIGludGVybmFsIHN0 YXRlIGluY29uc2lzdGVudApiZWZvcmUgdGhlIGFib3J0LiAgQSBjb21tZW50IGluIHRoZSBjb2Rl IGl0c2VsZiBhY2tub3dsZWRnZWQgdGhpcyBhcwoiYnJva2VuIGJ5IGRlc2lnbi4iCgpGaXggdGhp cyBieSByZW1vdmluZyB0aGUgY29uZmxpY3QgY2hlY2sgZnJvbSBhbGwgZml2ZSBhc3NpZ24gaG9v a3MgYW5kCmRldGVjdGluZyBtdWx0aXBsZSByZWNvdmVyeSB0YXJnZXRzIGluIGEgbmV3IENoZWNr UmVjb3ZlcnlUYXJnZXRDb25mbGljdHMoKQpmdW5jdGlvbiwgY2FsbGVkIGZyb20gdmFsaWRhdGVS ZWNvdmVyeVBhcmFtZXRlcnMoKSBiZWZvcmUgaXRzIGVhcmx5CnJldHVybiBmb3IgIUFyY2hpdmVS ZWNvdmVyeVJlcXVlc3RlZC4gIFRoZSBjaGVjayB0aGVyZWZvcmUgcnVucyBhdApldmVyeSBzdGFy dHVwIHJlZ2FyZGxlc3Mgb2YgcmVjb3ZlcnkgbW9kZSwgcHJlc2VydmluZyB0aGUgZXhpc3RpbmcK YmVoYXZpb3Igb2YgZGV0ZWN0aW5nIG1pc2NvbmZpZ3VyYXRpb24gYXQgc2VydmVyIHN0YXJ0IHRp bWUgcmF0aGVyCnRoYW4gb25seSB3aGVuIHJlY292ZXJ5LnNpZ25hbCBpcyBhZGRlZC4KCkluIGVh Y2ggYXNzaWduIGhvb2sncyBlbXB0eS1zdHJpbmcgYnJhbmNoLCByZXBsYWNlIHRoZSB1bmNvbmRp dGlvbmFsCiJyZWNvdmVyeVRhcmdldCA9IFJFQ09WRVJZX1RBUkdFVF9VTlNFVCIgYXNzaWdubWVu dCB3aXRoIGEgbmFycm93ZXIKImlmIChyZWNvdmVyeVRhcmdldCA9PSBNWV9UWVBFKSIgZm9ybS4g IEVtcHR5IHN0cmluZ3MgZm9yIGFuIHVucmVsYXRlZApyZWNvdmVyeV90YXJnZXRfKiBHVUMgdGhl biBsZWF2ZSBhbm90aGVyIEdVQydzIGFscmVhZHktc2V0IHRhcmdldAppbnRhY3QsIHdoaWxlIHN0 aWxsIHByZXNlcnZpbmcgdGhlIGRvY3VtZW50ZWQgImxhc3QgdmFsdWUgd2lucyIKcmVhc3NpZ25t ZW50IHNlbWFudGljcyBmb3IgdGhlIHNhbWUgR1VDLgoKV2hlbiBhIGNvbmZsaWN0IGlzIGRldGVj dGVkLCB0aGUgZXJyZGV0YWlsIG5vdyBsaXN0cyB3aGljaApyZWNvdmVyeV90YXJnZXRfKiBwYXJh bWV0ZXJzIGFyZSBhY3R1YWxseSBzZXQsIHJhdGhlciB0aGFuIHRoZSBmdWxsCmxpc3Qgb2YgY2Fu ZGlkYXRlIG5hbWVzLCBhbmQgYW4gZXJyaGludCBwb2ludHMgdG8gcGdfc2V0dGluZ3MgZm9yIHRo ZWlyCnZhbHVlcyBhbmQgd2hlcmUgZWFjaCBpcyBjb25maWd1cmVkLgotLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jICAgfCAxNDAgKysrKysrKy0tLS0KIHNyYy90 ZXN0L3JlY292ZXJ5L3QvMDAzX3JlY292ZXJ5X3RhcmdldHMucGwgfCAyNTEgKysrKysrKysrKysr KysrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgMzQyIGluc2VydGlvbnMoKyksIDQ5IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVy eS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKaW5kZXggNGQ2 MTc5NWI0ODMuLjMyZDIwOWIzOTU3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9ncmVjb3ZlcnkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n cmVjb3ZlcnkuYwpAQCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVt cy5oIgogI2luY2x1ZGUgInV0aWxzL2RhdGV0aW1lLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncnBy b3Rvcy5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgogI2luY2x1ZGUgInV0aWxzL2d1Y19ob29r cy5oIgogI2luY2x1ZGUgInV0aWxzL3Bnc3RhdF9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInV0aWxz L3BnX2xzbi5oIgpAQCAtMzQxLDYgKzM0Miw3IEBAIHN0YXRpYyB2b2lkIEFwcGx5V2FsUmVjb3Jk KFhMb2dSZWFkZXJTdGF0ZSAqeGxvZ3JlYWRlciwgWExvZ1JlY29yZCAqcmVjb3JkLCBUaW1lCiBz dGF0aWMgdm9pZCBFbmFibGVTdGFuZGJ5TW9kZSh2b2lkKTsKIHN0YXRpYyB2b2lkIHJlYWRSZWNv dmVyeVNpZ25hbEZpbGUodm9pZCk7CiBzdGF0aWMgdm9pZCB2YWxpZGF0ZVJlY292ZXJ5UGFyYW1l dGVycyh2b2lkKTsKK3N0YXRpYyB2b2lkIENoZWNrUmVjb3ZlcnlUYXJnZXRDb25mbGljdHModm9p ZCk7CiBzdGF0aWMgYm9vbCByZWFkX2JhY2t1cF9sYWJlbChYTG9nUmVjUHRyICpjaGVja1BvaW50 TG9jLAogCQkJCQkJCSAgVGltZUxpbmVJRCAqYmFja3VwTGFiZWxUTEksCiAJCQkJCQkJICBib29s ICpiYWNrdXBFbmRSZXF1aXJlZCwgYm9vbCAqYmFja3VwRnJvbVN0YW5kYnkpOwpAQCAtMTA2Nyw2 ICsxMDY5LDggQEAgcmVhZFJlY292ZXJ5U2lnbmFsRmlsZSh2b2lkKQogc3RhdGljIHZvaWQKIHZh bGlkYXRlUmVjb3ZlcnlQYXJhbWV0ZXJzKHZvaWQpCiB7CisJQ2hlY2tSZWNvdmVyeVRhcmdldENv bmZsaWN0cygpOworCiAJaWYgKCFBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQpCiAJCXJldHVybjsK IApAQCAtMTE0NCw2ICsxMTQ4LDc1IEBAIHZhbGlkYXRlUmVjb3ZlcnlQYXJhbWV0ZXJzKHZvaWQp CiAJfQogfQogCisvKgorICogQ2hlY2tSZWNvdmVyeVRhcmdldENvbmZsaWN0cworICoKKyAqIFZh bGlkYXRlIHRoYXQgYXQgbW9zdCBvbmUgb2YgdGhlIHJlY292ZXJ5X3RhcmdldF8qIEdVQ3MgaXMg c2V0IHRvIGEKKyAqIG5vbi1lbXB0eSB2YWx1ZS4gIFRoaXMgaXMgY2FsbGVkIGZyb20gdmFsaWRh dGVSZWNvdmVyeVBhcmFtZXRlcnMoKSBhdCBldmVyeQorICogc2VydmVyIHN0YXJ0dXAsIHJlZ2Fy ZGxlc3Mgb2Ygd2hldGhlciBhcmNoaXZlIHJlY292ZXJ5IGlzIHJlcXVlc3RlZCwgc28KKyAqIG1p c2NvbmZpZ3VyYXRpb24gaXMgZGV0ZWN0ZWQgYXQgc2VydmVyIHN0YXJ0IHRpbWUgcmF0aGVyIHRo YW4gbGF0ZXIgd2hlbgorICogcmVjb3Zlcnkuc2lnbmFsIGlzIGFkZGVkLgorICoKKyAqIFRoZSBj aGVjayBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGlubGluZWQgaW50bworICog dmFsaWRhdGVSZWNvdmVyeVBhcmFtZXRlcnMoKSBiZWNhdXNlIGl0IGludGVudGlvbmFsbHkgcnVu cyBldmVuIHdoZW4gbm8KKyAqIHJlY292ZXJ5IGlzIHJlcXVlc3RlZCwgd2hpbGUgdGhlIHJlc3Qg b2YgdmFsaWRhdGVSZWNvdmVyeVBhcmFtZXRlcnMoKSBpcworICogcmVjb3ZlcnktbW9kZS1vbmx5 LiAgS2VlcGluZyBpdCBhcyBhIG5hbWVkIGZ1bmN0aW9uIG1ha2VzIHRoYXQgc2VwYXJhdGlvbgor ICogZXhwbGljaXQuCisgKgorICogVGhlIGNoZWNrIHVzZWQgdG8gbGl2ZSBpbiB0aGUgYXNzaWdu IGhvb2tzIG9mIHRoZSByZWNvdmVyeV90YXJnZXRfKiBHVUNzCisgKiAoY2FsbGluZyBlcmVwb3J0 KEVSUk9SKSBvbiBjb25mbGljdCksIHdoaWNoIHZpb2xhdGVkIGd1Yy5jJ3MgY29udHJhY3QgdGhh dAorICogYXNzaWduIGhvb2tzIG11c3QgbmV2ZXIgZmFpbC4gIE1vdmluZyB0aGUgY2hlY2sgaGVy ZSBrZWVwcyB0aGUgYXNzaWduIGhvb2tzCisgKiBjb250cmFjdC1jb21wbGlhbnQuCisgKgorICog SWYgYSBmdXR1cmUgcGF0Y2ggYWRkcyBhIHNpeHRoIHJlY292ZXJ5X3RhcmdldF8qIEdVQywgaXQg bXVzdCBiZSBhZGRlZCB0byB0aGUKKyAqIGxpc3Qgb2YgQUREX1RBUkdFVF9JRl9TRVQoKSBjYWxs cyBiZWxvdzsgdGhlIGVycmRldGFpbCBidWlsZHMgaXRzIGxpc3Qgb2Ygc2V0CisgKiBwYXJhbWV0 ZXJzIGR5bmFtaWNhbGx5LCBzbyBpdCBuZWVkcyBubyBjaGFuZ2UuCisgKi8KK3N0YXRpYyB2b2lk CitDaGVja1JlY292ZXJ5VGFyZ2V0Q29uZmxpY3RzKHZvaWQpCit7CisJaW50CQkJbnRhcmdldHMg PSAwOworCWNvbnN0IGNoYXIgKnZhbDsKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3Ry aW5nSW5mbygmYnVmKTsKKworCS8qCisJICogVGhlc2UgR1VDcyBhcmUgYWxsIFBHQ19TVFJJTkcs IHNvIEdldENvbmZpZ09wdGlvbigpIHJldHVybnMgIiIgKG5vdAorCSAqIE5VTEwpIHdoZW4gYSBw YXJhbWV0ZXIgaXMgdW5zZXQuICBDb2xsZWN0IHRoZSBuYW1lIG9mIGVhY2ggb25lIHRoYXQgaXMK KwkgKiBzZXQgaW50byBidWYgZm9yIHVzZSBpbiB0aGUgZXJyZGV0YWlsIGJlbG93LiAgVGhlIHNl cGFyYXRvciBhbmQgdGhlCisJICogcXVvdGVzIGFyZSB3cmFwcGVkIGluIF8oKSBzbyB0cmFuc2xh dG9ycyBjYW4gYWRhcHQgdGhlIGxpc3QgcHVuY3R1YXRpb24KKwkgKiB0byB0aGVpciBsb2NhbGUu CisJICovCisjZGVmaW5lIEFERF9UQVJHRVRfSUZfU0VUKGd1Y25hbWUpIFwKKwlkbyB7IFwKKwkJ dmFsID0gR2V0Q29uZmlnT3B0aW9uKGd1Y25hbWUsIGZhbHNlLCBmYWxzZSk7IFwKKwkJaWYgKHZh bFswXSAhPSAnXDAnKSBcCisJCXsgXAorCQkJbnRhcmdldHMrKzsgXAorCQkJaWYgKGJ1Zi5sZW4g PT0gMCkgXAorCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgXygiXCIlc1wiIiksIGd1Y25hbWUp OyBcCisJCQllbHNlIFwKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsIF8oIiwgXCIlc1wiIiks IGd1Y25hbWUpOyBcCisJCX0gXAorCX0gd2hpbGUgKDApCisKKwlBRERfVEFSR0VUX0lGX1NFVCgi cmVjb3ZlcnlfdGFyZ2V0Iik7CisJQUREX1RBUkdFVF9JRl9TRVQoInJlY292ZXJ5X3RhcmdldF9s c24iKTsKKwlBRERfVEFSR0VUX0lGX1NFVCgicmVjb3ZlcnlfdGFyZ2V0X25hbWUiKTsKKwlBRERf VEFSR0VUX0lGX1NFVCgicmVjb3ZlcnlfdGFyZ2V0X3RpbWUiKTsKKwlBRERfVEFSR0VUX0lGX1NF VCgicmVjb3ZlcnlfdGFyZ2V0X3hpZCIpOworI3VuZGVmIEFERF9UQVJHRVRfSUZfU0VUCisKKwlp ZiAobnRhcmdldHMgPiAxKQorCQllcmVwb3J0KEZBVEFMLAorCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIm11bHRpcGxlIHJlY292ZXJ5 IHRhcmdldHMgc3BlY2lmaWVkIiksCisJCQkJIGVycmRldGFpbCgiUmVjb3ZlcnkgdGFyZ2V0cyAl cyBhcmUgc2V0LCBidXQgb25seSBvbmUgY2FuIGJlIHNldC4iLAorCQkJCQkJICAgYnVmLmRhdGEp LAorCQkJCSBlcnJoaW50KCJTZWUgcGdfc2V0dGluZ3MgZm9yIHRoZSBwYXJhbWV0ZXIgdmFsdWVz IGFuZCB3aGVyZSBlYWNoIGlzIHNldC4iKSkpOworfQorCiAvKgogICogcmVhZF9iYWNrdXBfbGFi ZWw6IGNoZWNrIHRvIHNlZSBpZiBhIGJhY2t1cF9sYWJlbCBmaWxlIGlzIHByZXNlbnQKICAqCkBA IC00NzY5LDMyICs0ODQyLDI3IEBAIGNoZWNrX3ByaW1hcnlfc2xvdF9uYW1lKGNoYXIgKipuZXd2 YWwsIHZvaWQgKipleHRyYSwgR3VjU291cmNlIHNvdXJjZSkKIH0KIAogLyoKLSAqIFJlY292ZXJ5 IHRhcmdldCBzZXR0aW5nczogT25seSBvbmUgb2YgdGhlIHNldmVyYWwgcmVjb3ZlcnlfdGFyZ2V0 KiBzZXR0aW5ncwotICogbWF5IGJlIHNldC4gIFNldHRpbmcgYSBzZWNvbmQgb25lIHJlc3VsdHMg aW4gYW4gZXJyb3IuICBUaGUgZ2xvYmFsIHZhcmlhYmxlCisgKiBSZWNvdmVyeSB0YXJnZXQgc2V0 dGluZ3M6IEF0IG1vc3Qgb25lIG9mIHRoZSBzZXZlcmFsIHJlY292ZXJ5X3RhcmdldCoKKyAqIHNl dHRpbmdzIG1heSBiZSBzZXQgdG8gYSBub24tZW1wdHkgdmFsdWUuICBUaGUgZ2xvYmFsIHZhcmlh YmxlCiAgKiByZWNvdmVyeVRhcmdldCB0cmFja3Mgd2hpY2gga2luZCBvZiByZWNvdmVyeSB0YXJn ZXQgd2FzIGNob3Nlbi4gIE90aGVyCiAgKiB2YXJpYWJsZXMgc3RvcmUgdGhlIGFjdHVhbCB0YXJn ZXQgdmFsdWUgKGZvciBleGFtcGxlIGEgc3RyaW5nIG9yIGEgeGlkKS4KLSAqIFRoZSBhc3NpZ24g ZnVuY3Rpb25zIG9mIHRoZSBwYXJhbWV0ZXJzIGNoZWNrIHdoZXRoZXIgYSBjb21wZXRpbmcgcGFy YW1ldGVyCi0gKiB3YXMgYWxyZWFkeSBzZXQuICBCdXQgd2Ugd2FudCB0byBhbGxvdyBzZXR0aW5n IHRoZSBzYW1lIHBhcmFtZXRlciBtdWx0aXBsZQotICogdGltZXMuICBXZSBhbHNvIHdhbnQgdG8g YWxsb3cgdW5zZXR0aW5nIGEgcGFyYW1ldGVyIGFuZCBzZXR0aW5nIGEgZGlmZmVyZW50Ci0gKiBv bmUsIHNvIHdlIHVuc2V0IHJlY292ZXJ5VGFyZ2V0IHdoZW4gdGhlIHBhcmFtZXRlciBpcyBzZXQg dG8gYW4gZW1wdHkKLSAqIHN0cmluZy4KKyAqIEFuIGVtcHR5IHN0cmluZyBmb3IgYW55IG9mIHRo ZXNlIEdVQ3MgaXMgdHJlYXRlZCBhcyAibm90IHNldCIsIGVxdWl2YWxlbnQKKyAqIHRvIHRoZSBH VUMncyBkZWZhdWx0OyBhbiBlbXB0eSB2YWx1ZSBjYW5ub3QgY2xvYmJlciBhbm90aGVyIEdVQydz CisgKiBhbHJlYWR5LXNldCB0YXJnZXQuICBDb25mbGljdHMgYmV0d2VlbiBtdWx0aXBsZSBub24t ZW1wdHkgc2V0dGluZ3MgYXJlCisgKiBkZXRlY3RlZCBpbiBDaGVja1JlY292ZXJ5VGFyZ2V0Q29u ZmxpY3RzKCksIGNhbGxlZCBmcm9tCisgKiB2YWxpZGF0ZVJlY292ZXJ5UGFyYW1ldGVycygpIGF0 IGV2ZXJ5IHN0YXJ0dXAuCiAgKgotICogWFhYIHRoaXMgY29kZSBpcyBicm9rZW4gYnkgZGVzaWdu LiAgVGhyb3dpbmcgYW4gZXJyb3IgZnJvbSBhIEdVQyBhc3NpZ24KLSAqIGhvb2sgYnJlYWtzIGZ1 bmRhbWVudGFsIGFzc3VtcHRpb25zIG9mIGd1Yy5jLiAgU28gbG9uZyBhcyBhbGwgdGhlIHZhcmlh YmxlcwotICogZm9yIHdoaWNoIHRoaXMgY2FuIGhhcHBlbiBhcmUgUEdDX1BPU1RNQVNURVIsIHRo ZSBjb25zZXF1ZW5jZXMgYXJlIGxpbWl0ZWQsCi0gKiBzaW5jZSB3ZSdkIGp1c3QgYWJvcnQgcG9z dG1hc3RlciBzdGFydHVwIGFueXdheS4gIE5vbmV0aGVsZXNzIGl0J3MgbGlrZWx5Ci0gKiB0aGF0 IHdlIGhhdmUgb2RkIGJlaGF2aW9ycyBzdWNoIGFzIHVuZXhwZWN0ZWQgR1VDIG9yZGVyaW5nIGRl cGVuZGVuY2llcy4KKyAqIEVhY2ggYXNzaWduIGhvb2sgY2xlYXJzIHJlY292ZXJ5VGFyZ2V0IG9u bHkgd2hlbiBpdHMgb3duIEdVQyBpcyByZWFzc2lnbmVkCisgKiB0byBhbiBlbXB0eSBzdHJpbmcg YWZ0ZXIgdGhlIHNhbWUgR1VDIHdhcyBwcmV2aW91c2x5IGFzc2lnbmVkIGEgbm9uLWVtcHR5Cisg KiB2YWx1ZSwgZS5nLgorICogICAgIHBvc3RncmVzIC1jIHJlY292ZXJ5X3RhcmdldF94aWQ9NzAw IC1jIHJlY292ZXJ5X3RhcmdldF94aWQ9CisgKiAocG9zdGdyZXNxbC5jb25mIGNvbGxhcHNlcyBk dXBsaWNhdGUga2V5cyBzbyBvbmx5IHRoZSBsYXN0IHZhbHVlIHJlYWNoZXMKKyAqIHRoZSBhc3Np Z24gaG9vazsgdGhpcyBzYW1lLXBhcmFtZXRlciBzZXQtdGhlbi1jbGVhciBjYXNlIG9ubHkgYXJp c2VzIGZyb20KKyAqIC1jKS4gIFRoZSBjbGVhciBpcyByZXN0cmljdGVkIHRvIHRoZSBob29rJ3Mg b3duIHRhcmdldCB0eXBlIHNvIHRoYXQgYW4KKyAqIGVtcHR5IHZhbHVlIGZvciBvbmUgcmVjb3Zl cnlfdGFyZ2V0XyogR1VDIGNhbm5vdCBjbG9iYmVyIGFub3RoZXIgR1VDJ3MKKyAqIGFscmVhZHkt c2V0IHRhcmdldC4KICAqLwogCi1wZ19ub3JldHVybiBzdGF0aWMgdm9pZAotZXJyb3JfbXVsdGlw bGVfcmVjb3ZlcnlfdGFyZ2V0cyh2b2lkKQotewotCWVyZXBvcnQoRVJST1IsCi0JCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKLQkJCSBlcnJtc2coIm11bHRpcGxl IHJlY292ZXJ5IHRhcmdldHMgc3BlY2lmaWVkIiksCi0JCQkgZXJyZGV0YWlsKCJBdCBtb3N0IG9u ZSBvZiBcInJlY292ZXJ5X3RhcmdldFwiLCBcInJlY292ZXJ5X3RhcmdldF9sc25cIiwgXCJyZWNv dmVyeV90YXJnZXRfbmFtZVwiLCBcInJlY292ZXJ5X3RhcmdldF90aW1lXCIsIFwicmVjb3Zlcnlf dGFyZ2V0X3hpZFwiIG1heSBiZSBzZXQuIikpKTsKLX0KLQogLyoKICAqIEdVQyBjaGVja19ob29r IGZvciByZWNvdmVyeV90YXJnZXQKICAqLwpAQCAtNDgxNSwxMyArNDg4Myw5IEBAIGNoZWNrX3Jl Y292ZXJ5X3RhcmdldChjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3Vy Y2UpCiB2b2lkCiBhc3NpZ25fcmVjb3ZlcnlfdGFyZ2V0KGNvbnN0IGNoYXIgKm5ld3ZhbCwgdm9p ZCAqZXh0cmEpCiB7Ci0JaWYgKHJlY292ZXJ5VGFyZ2V0ICE9IFJFQ09WRVJZX1RBUkdFVF9VTlNF VCAmJgotCQlyZWNvdmVyeVRhcmdldCAhPSBSRUNPVkVSWV9UQVJHRVRfSU1NRURJQVRFKQotCQll cnJvcl9tdWx0aXBsZV9yZWNvdmVyeV90YXJnZXRzKCk7Ci0KIAlpZiAobmV3dmFsICYmIHN0cmNt cChuZXd2YWwsICIiKSAhPSAwKQogCQlyZWNvdmVyeVRhcmdldCA9IFJFQ09WRVJZX1RBUkdFVF9J TU1FRElBVEU7Ci0JZWxzZQorCWVsc2UgaWYgKHJlY292ZXJ5VGFyZ2V0ID09IFJFQ09WRVJZX1RB UkdFVF9JTU1FRElBVEUpCiAJCXJlY292ZXJ5VGFyZ2V0ID0gUkVDT1ZFUllfVEFSR0VUX1VOU0VU OwogfQogCkBAIC00ODU2LDE2ICs0OTIwLDEyIEBAIGNoZWNrX3JlY292ZXJ5X3RhcmdldF9sc24o Y2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQogdm9pZAogYXNz aWduX3JlY292ZXJ5X3RhcmdldF9sc24oY29uc3QgY2hhciAqbmV3dmFsLCB2b2lkICpleHRyYSkK IHsKLQlpZiAocmVjb3ZlcnlUYXJnZXQgIT0gUkVDT1ZFUllfVEFSR0VUX1VOU0VUICYmCi0JCXJl Y292ZXJ5VGFyZ2V0ICE9IFJFQ09WRVJZX1RBUkdFVF9MU04pCi0JCWVycm9yX211bHRpcGxlX3Jl Y292ZXJ5X3RhcmdldHMoKTsKLQogCWlmIChuZXd2YWwgJiYgc3RyY21wKG5ld3ZhbCwgIiIpICE9 IDApCiAJewogCQlyZWNvdmVyeVRhcmdldCA9IFJFQ09WRVJZX1RBUkdFVF9MU047CiAJCXJlY292 ZXJ5VGFyZ2V0TFNOID0gKigoWExvZ1JlY1B0ciAqKSBleHRyYSk7CiAJfQotCWVsc2UKKwllbHNl IGlmIChyZWNvdmVyeVRhcmdldCA9PSBSRUNPVkVSWV9UQVJHRVRfTFNOKQogCQlyZWNvdmVyeVRh cmdldCA9IFJFQ09WRVJZX1RBUkdFVF9VTlNFVDsKIH0KIApAQCAtNDg5MSwxNiArNDk1MSwxMiBA QCBjaGVja19yZWNvdmVyeV90YXJnZXRfbmFtZShjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEs IEd1Y1NvdXJjZSBzb3VyY2UpCiB2b2lkCiBhc3NpZ25fcmVjb3ZlcnlfdGFyZ2V0X25hbWUoY29u c3QgY2hhciAqbmV3dmFsLCB2b2lkICpleHRyYSkKIHsKLQlpZiAocmVjb3ZlcnlUYXJnZXQgIT0g UkVDT1ZFUllfVEFSR0VUX1VOU0VUICYmCi0JCXJlY292ZXJ5VGFyZ2V0ICE9IFJFQ09WRVJZX1RB UkdFVF9OQU1FKQotCQllcnJvcl9tdWx0aXBsZV9yZWNvdmVyeV90YXJnZXRzKCk7Ci0KIAlpZiAo bmV3dmFsICYmIHN0cmNtcChuZXd2YWwsICIiKSAhPSAwKQogCXsKIAkJcmVjb3ZlcnlUYXJnZXQg PSBSRUNPVkVSWV9UQVJHRVRfTkFNRTsKIAkJcmVjb3ZlcnlUYXJnZXROYW1lID0gbmV3dmFsOwog CX0KLQllbHNlCisJZWxzZSBpZiAocmVjb3ZlcnlUYXJnZXQgPT0gUkVDT1ZFUllfVEFSR0VUX05B TUUpCiAJCXJlY292ZXJ5VGFyZ2V0ID0gUkVDT1ZFUllfVEFSR0VUX1VOU0VUOwogfQogCkBAIC00 OTcxLDEzICs1MDI3LDkgQEAgY2hlY2tfcmVjb3ZlcnlfdGFyZ2V0X3RpbWUoY2hhciAqKm5ld3Zh bCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQogdm9pZAogYXNzaWduX3JlY292ZXJ5 X3RhcmdldF90aW1lKGNvbnN0IGNoYXIgKm5ld3ZhbCwgdm9pZCAqZXh0cmEpCiB7Ci0JaWYgKHJl Y292ZXJ5VGFyZ2V0ICE9IFJFQ09WRVJZX1RBUkdFVF9VTlNFVCAmJgotCQlyZWNvdmVyeVRhcmdl dCAhPSBSRUNPVkVSWV9UQVJHRVRfVElNRSkKLQkJZXJyb3JfbXVsdGlwbGVfcmVjb3ZlcnlfdGFy Z2V0cygpOwotCiAJaWYgKG5ld3ZhbCAmJiBzdHJjbXAobmV3dmFsLCAiIikgIT0gMCkKIAkJcmVj b3ZlcnlUYXJnZXQgPSBSRUNPVkVSWV9UQVJHRVRfVElNRTsKLQllbHNlCisJZWxzZSBpZiAocmVj b3ZlcnlUYXJnZXQgPT0gUkVDT1ZFUllfVEFSR0VUX1RJTUUpCiAJCXJlY292ZXJ5VGFyZ2V0ID0g UkVDT1ZFUllfVEFSR0VUX1VOU0VUOwogfQogCkBAIC01MDk5LDE1ICs1MTUxLDExIEBAIGNoZWNr X3JlY292ZXJ5X3RhcmdldF94aWQoY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3Vy Y2Ugc291cmNlKQogdm9pZAogYXNzaWduX3JlY292ZXJ5X3RhcmdldF94aWQoY29uc3QgY2hhciAq bmV3dmFsLCB2b2lkICpleHRyYSkKIHsKLQlpZiAocmVjb3ZlcnlUYXJnZXQgIT0gUkVDT1ZFUllf VEFSR0VUX1VOU0VUICYmCi0JCXJlY292ZXJ5VGFyZ2V0ICE9IFJFQ09WRVJZX1RBUkdFVF9YSUQp Ci0JCWVycm9yX211bHRpcGxlX3JlY292ZXJ5X3RhcmdldHMoKTsKLQogCWlmIChuZXd2YWwgJiYg c3RyY21wKG5ld3ZhbCwgIiIpICE9IDApCiAJewogCQlyZWNvdmVyeVRhcmdldCA9IFJFQ09WRVJZ X1RBUkdFVF9YSUQ7CiAJCXJlY292ZXJ5VGFyZ2V0WGlkID0gKigoVHJhbnNhY3Rpb25JZCAqKSBl eHRyYSk7CiAJfQotCWVsc2UKKwllbHNlIGlmIChyZWNvdmVyeVRhcmdldCA9PSBSRUNPVkVSWV9U QVJHRVRfWElEKQogCQlyZWNvdmVyeVRhcmdldCA9IFJFQ09WRVJZX1RBUkdFVF9VTlNFVDsKIH0K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDAzX3JlY292ZXJ5X3RhcmdldHMucGwg Yi9zcmMvdGVzdC9yZWNvdmVyeS90LzAwM19yZWNvdmVyeV90YXJnZXRzLnBsCmluZGV4IDA0N2Vi MTMyOTNhLi42ZThhMmM1NTdjOSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMDNf cmVjb3ZlcnlfdGFyZ2V0cy5wbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAwM19yZWNvdmVy eV90YXJnZXRzLnBsCkBAIC01MSw2ICs1MSw0OSBAQCBzdWIgdGVzdF9yZWNvdmVyeV9zdGFuZGJ5 CiAJcmV0dXJuOwogfQogCisjIFN0YXJ0IGEgc3RhbmRieSB3aXRoIHRoZSBnaXZlbiBwZ19jdGwg LS1vcHRpb25zIHN0cmluZyBhbmQgdmVyaWZ5IHRoYXQKKyMgdGhlIHN0YW5kYnkgcmVhY2hlcyB0 aGUgZ2l2ZW4gTFNOIGFuZCByb3cgY291bnQuICBVc2VkIHRvIGV4ZXJjaXNlCisjIHNjZW5hcmlv cyB0aGF0IHJlcXVpcmUgdGhlIHBvc3RtYXN0ZXIgY29tbWFuZCBsaW5lIHRvIHJlY2VpdmUgbXVs dGlwbGUKKyMgIi1jIG5hbWU9dmFsdWUiIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBHVUMsIHdoaWNo IHBvc3RncmVzcWwuY29uZiBjYW5ub3QKKyMgZXhwcmVzcyBiZWNhdXNlIFByb2Nlc3NDb25maWdG aWxlIGNvbGxhcHNlcyBkdXBsaWNhdGUga2V5cy4KK3N1YiB0ZXN0X3JlY292ZXJ5X3N0YW5kYnlf d2l0aF9vcHRpb25zCit7CisJbG9jYWwgJFRlc3Q6OkJ1aWxkZXI6OkxldmVsID0gJFRlc3Q6OkJ1 aWxkZXI6OkxldmVsICsgMTsKKworCW15ICR0ZXN0X25hbWUgPSBzaGlmdDsKKwlteSAkbm9kZV9u YW1lID0gc2hpZnQ7CisJbXkgJG5vZGVfcHJpbWFyeSA9IHNoaWZ0OworCW15ICRvcHRpb25zID0g c2hpZnQ7CisJbXkgJG51bV9yb3dzID0gc2hpZnQ7CisJbXkgJHVudGlsX2xzbiA9IHNoaWZ0Owor CisJbXkgJG5vZGVfc3RhbmRieSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygkbm9k ZV9uYW1lKTsKKwkkbm9kZV9zdGFuZGJ5LT5pbml0X2Zyb21fYmFja3VwKCRub2RlX3ByaW1hcnks ICdteV9iYWNrdXAnLAorCQloYXNfcmVzdG9yaW5nID0+IDEpOworCisJbXkgJHJlcyA9IHJ1bl9s b2coCisJCVsKKwkJCSdwZ19jdGwnLAorCQkJJy0tcGdkYXRhJyA9PiAkbm9kZV9zdGFuZGJ5LT5k YXRhX2RpciwKKwkJCSctLWxvZycgPT4gJG5vZGVfc3RhbmRieS0+bG9nZmlsZSwKKwkJCSctLW9w dGlvbnMnID0+ICRvcHRpb25zLAorCQkJJ3N0YXJ0JywKKwkJXSk7CisJb2soJHJlcywgInNlcnZl ciBzdGFydHMgZm9yICR0ZXN0X25hbWUiKTsKKworCSRub2RlX3N0YW5kYnktPnBvbGxfcXVlcnlf dW50aWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCAnJHVudGlsX2xzbic6OnBnX2xzbiA8PSBwZ19s YXN0X3dhbF9yZXBsYXlfbHNuKCkiKQorCSAgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGlu ZyBmb3Igc3RhbmRieSB0byBjYXRjaCB1cCI7CisKKwlteSAkY291bnQgPSAkbm9kZV9zdGFuZGJ5 LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRhYl9pbnQi KTsKKwlpcygkY291bnQsIHFxKCRudW1fcm93cyksICJjaGVjayBzdGFuZGJ5IGNvbnRlbnQgZm9y ICR0ZXN0X25hbWUiKTsKKworCSRub2RlX3N0YW5kYnktPnRlYXJkb3duX25vZGU7CisKKwlyZXR1 cm47Cit9CisKICMgSW5pdGlhbGl6ZSBwcmltYXJ5IG5vZGUKIG15ICRub2RlX3ByaW1hcnkgPSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3ByaW1hcnknKTsKICRub2RlX3ByaW1hcnkt PmluaXQoaGFzX2FyY2hpdmluZyA9PiAxLCBhbGxvd3Nfc3RyZWFtaW5nID0+IDEpOwpAQCAtMTA4 LDYgKzE1MSwxMyBAQCAkbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKICMgRm9y Y2UgYXJjaGl2aW5nIG9mIFdBTCBmaWxlCiAkbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBwZ19zd2l0Y2hfd2FsKCkiKTsKIAorIyBMU04gYWZ0ZXIgdGhlIGZpbmFs IDYwMDAtcm93IGluc2VydCBhbmQgV0FMIHN3aXRjaC4gIFVzZWQgYnkgdGhlCisjIHNldC10aGVu LWNsZWFyZWQgc2NlbmFyaW9zIGJlbG93IHdoZXJlIHJlY292ZXJ5IGhhcyBubyB0YXJnZXQgYW5k IG11c3QKKyMgcmVwbGF5IGFsbCBhcmNoaXZlZCBXQUw7IHBvbGxpbmcgb24gJGxzbjUgd291bGQg cmFjZSBhZ2FpbnN0IHRoZSA1MDAxLTYwMDAKKyMgcm93cy4KK215ICRsc242ID0KKyAgJG5vZGVf cHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3VycmVudF93YWxfbHNu KCkiKTsKKwogIyBUZXN0IHJlY292ZXJ5IHRhcmdldHMKIG15IEByZWNvdmVyeV9wYXJhbXMgPSAo InJlY292ZXJ5X3RhcmdldCA9ICdpbW1lZGlhdGUnIik7CiB0ZXN0X3JlY292ZXJ5X3N0YW5kYnko J2ltbWVkaWF0ZSB0YXJnZXQnLApAQCAtMTI1LDExICsxNzUsMjQgQEAgdGVzdF9yZWNvdmVyeV9z dGFuZGJ5KCduYW1lJywgJ3N0YW5kYnlfNCcsICRub2RlX3ByaW1hcnksIFxAcmVjb3ZlcnlfcGFy YW1zLAogdGVzdF9yZWNvdmVyeV9zdGFuZGJ5KCdMU04nLCAnc3RhbmRieV81JywgJG5vZGVfcHJp bWFyeSwgXEByZWNvdmVyeV9wYXJhbXMsCiAJIjUwMDAiLCAkbHNuNSk7CiAKKyMgUmVncmVzc2lv bjogZW1wdHktc3RyaW5nIGZvciBvbmUgcmVjb3ZlcnlfdGFyZ2V0XyogR1VDIG11c3Qgbm90IGNs b2JiZXIKKyMgYW5vdGhlciBub24tZW1wdHkgdGFyZ2V0LiAgU2V0dGluZyByZWNvdmVyeV90YXJn ZXRfeGlkICsgcmVjb3ZlcnlfdGFyZ2V0X3RpbWUKKyMgPSAnJyBtdXN0IHJlY292ZXIgdG8gdGhl IHhpZCwgbm90IHJ1biBhcyBuby10YXJnZXQgcmVjb3ZlcnkuCitAcmVjb3ZlcnlfcGFyYW1zID0g KAorCSJyZWNvdmVyeV90YXJnZXRfeGlkID0gJyRyZWNvdmVyeV90eGlkJyIsCisJInJlY292ZXJ5 X3RhcmdldF90aW1lID0gJyciKTsKK3Rlc3RfcmVjb3Zlcnlfc3RhbmRieSgneGlkIHdpdGggZW1w dHkgdGltZSBHVUMnLAorCSdzdGFuZGJ5X3hpZF9lbXB0eV90aW1lJywgJG5vZGVfcHJpbWFyeSwg XEByZWNvdmVyeV9wYXJhbXMsCisJIjIwMDAiLCAkbHNuMik7CisKICMgTXVsdGlwbGUgdGFyZ2V0 cwogIwotIyBNdWx0aXBsZSBjb25mbGljdGluZyBzZXR0aW5ncyBhcmUgbm90IGFsbG93ZWQsIGJ1 dCBzZXR0aW5nIHRoZSBzYW1lCi0jIHBhcmFtZXRlciBtdWx0aXBsZSB0aW1lcyBvciB1bnNldHRp bmcgYSBwYXJhbWV0ZXIgYW5kIHNldHRpbmcgYQotIyBkaWZmZXJlbnQgb25lIGlzIGFsbG93ZWQu CisjIE11bHRpcGxlIGNvbmZsaWN0aW5nIG5vbi1lbXB0eSBzZXR0aW5ncyBhcmUgbm90IGFsbG93 ZWQuICBTZXR0aW5nIHRoZSBzYW1lCisjIHBhcmFtZXRlciBtdWx0aXBsZSB0aW1lcyBpcyBhbGxv d2VkICh0aGUgbGFzdCB2YWx1ZSB3aW5zLCBwZXIgUHJvY2Vzc0NvbmZpZ0ZpbGUKKyMgZHVwbGlj YXRlIGhhbmRsaW5nKS4gIEFuIGVtcHR5IHN0cmluZyBmb3IgYSByZWNvdmVyeV90YXJnZXRfKiBH VUMgaXMgdHJlYXRlZAorIyBhcyB0aGUgR1VDJ3MgZGVmYXVsdCBhbmQgaXMgYSBuby1vcDsgaXQg ZG9lcyBub3QgY2xlYXIgYW55IG90aGVyIGFscmVhZHktc2V0CisjIHRhcmdldC4gIENvbmZsaWN0 IGRldGVjdGlvbiBydW5zIGluIENoZWNrUmVjb3ZlcnlUYXJnZXRDb25mbGljdHMoKSBhdCBldmVy eQorIyBzZXJ2ZXIgc3RhcnQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciByZWNvdmVyeSBpcyByZXF1 ZXN0ZWQuCiAKIEByZWNvdmVyeV9wYXJhbXMgPSAoCiAJInJlY292ZXJ5X3RhcmdldF9uYW1lID0g JyRyZWNvdmVyeV9uYW1lJyIsCkBAIC0xNTksNiArMjIyLDIxIEBAIGxpa2UoCiAJJGxvZ2ZpbGUs CiAJcXIvbXVsdGlwbGUgcmVjb3ZlcnkgdGFyZ2V0cyBzcGVjaWZpZWQvLAogCSdtdWx0aXBsZSBj b25mbGljdGluZyBzZXR0aW5ncycpOworIyBlcnJkZXRhaWwgbGlzdHMgZXhhY3RseSB0aGUgcGFy YW1ldGVycyB0aGF0IGFyZSBzZXQsIGluIEdVQy1jaGVjayBvcmRlcgorIyAocmVjb3ZlcnlfdGFy Z2V0X25hbWUgaXMgY2hlY2tlZCBiZWZvcmUgcmVjb3ZlcnlfdGFyZ2V0X3RpbWUpLgorbGlrZSgK KwkkbG9nZmlsZSwKKwlxci9SZWNvdmVyeSB0YXJnZXRzICJyZWNvdmVyeV90YXJnZXRfbmFtZSIs ICJyZWNvdmVyeV90YXJnZXRfdGltZSIgYXJlIHNldC8sCisJJ2VycmRldGFpbCBsaXN0cyB0aGUg c2V0IHBhcmFtZXRlcnMgaW4gb3JkZXInKTsKKyMgVGhlIHBhcmFtZXRlciB2YWx1ZXMgbXVzdCBu b3QgYmUgZWNob2VkIChvbmx5IHRoZSBuYW1lcyBhcmUgbGlzdGVkKS4KK3VubGlrZSgKKwkkbG9n ZmlsZSwKKwlxci9hcmUgc2V0W15cbl0qPS8sCisJJ2VycmRldGFpbCBkb2VzIG5vdCBlY2hvIHBh cmFtZXRlciB2YWx1ZXMnKTsKK2xpa2UoCisJJGxvZ2ZpbGUsCisJcXIvSElOVDouKnBnX3NldHRp bmdzLywKKwknZXJyaGludCBwb2ludHMgdG8gcGdfc2V0dGluZ3MnKTsKIAogIyBDaGVjayBiZWhh dmlvciB3aGVuIHJlY292ZXJ5IGVuZHMgYmVmb3JlIHRhcmdldCBpcyByZWFjaGVkCiAKQEAgLTE5 MCw2ICsyNjgsMTczIEBAIGxpa2UoCiAJcXIvRkFUQUw6IC4qIHJlY292ZXJ5IGVuZGVkIGJlZm9y ZSBjb25maWd1cmVkIHJlY292ZXJ5IHRhcmdldCB3YXMgcmVhY2hlZC8sCiAJJ3JlY292ZXJ5IGVu ZCBiZWZvcmUgdGFyZ2V0IHJlYWNoZWQgaXMgYSBmYXRhbCBlcnJvcicpOwogCisjIENvbmZsaWN0 aW5nIHJlY292ZXJ5IHRhcmdldHMgYXJlIHJlamVjdGVkIGF0IGV2ZXJ5IHN0YXJ0dXAsIHJlZ2Fy ZGxlc3Mgb2YKKyMgd2hldGhlciByZWNvdmVyeS5zaWduYWwgaXMgcHJlc2VudC4gIFVzZSBhIHRo cm93YXdheSBjbHVzdGVyIGluaXRpYWxpemVkCisjIGZyb20gdGhlIGV4aXN0aW5nIGJhY2t1cCBz byB3ZSBjYW4gbGVhdmUgY29uZmxpY3RpbmcgR1VDcyBpbiBpdHMKKyMgcG9zdGdyZXNxbC5jb25m IHdpdGhvdXQgcG9sbHV0aW5nIHRoZSBwcmltYXJ5IHVzZWQgYnkgbGF0ZXIgdGVzdHMuCisjIGlu aXRfZnJvbV9iYWNrdXAgaXMgY2FsbGVkIHdpdGhvdXQgaGFzX3Jlc3RvcmluZywgc28gbm8gcmVj b3Zlcnkuc2lnbmFsCisjIGlzIGNyZWF0ZWQgYW5kIHRoZSBjbHVzdGVyIHdvdWxkIG5vcm1hbGx5 IHN0YXJ0IGFzIGEgcGxhaW4gcHJpbWFyeTsgdGhlCisjIGNvbmZsaWN0aW5nIHJlY292ZXJ5X3Rh cmdldF8qIEdVQ3MgbXVzdCBiZSByZWplY3RlZCBhbnl3YXkuCitteSAkbm9kZV9ub19zaWduYWwg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ211bHRpX3RhcmdldF9ub19zaWduYWwn KTsKKyRub2RlX25vX3NpZ25hbC0+aW5pdF9mcm9tX2JhY2t1cCgkbm9kZV9wcmltYXJ5LCAnbXlf YmFja3VwJyk7Ciskbm9kZV9ub19zaWduYWwtPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNv bmYnLCAicmVjb3ZlcnlfdGFyZ2V0X25hbWUgPSAnJHJlY292ZXJ5X25hbWUnCityZWNvdmVyeV90 YXJnZXRfdGltZSA9ICckcmVjb3ZlcnlfdGltZSciKTsKKworbXkgJHJlc19ub19zaWduYWwgPSBy dW5fbG9nKAorCVsKKwkJJ3BnX2N0bCcsCisJCSctLXBnZGF0YScgPT4gJG5vZGVfbm9fc2lnbmFs LT5kYXRhX2RpciwKKwkJJy0tbG9nJyA9PiAkbm9kZV9ub19zaWduYWwtPmxvZ2ZpbGUsCisJCSdz dGFydCcsCisJXSk7CitvayghJHJlc19ub19zaWduYWwsCisJJ3NlcnZlciBmYWlscyB0byBzdGFy dCB3aXRoIGNvbmZsaWN0aW5nIHJlY292ZXJ5IHRhcmdldHMgYW5kIG5vIHJlY292ZXJ5LnNpZ25h bCcpOworCitteSAkbG9nZmlsZV9ub19zaWduYWwgPSBzbHVycF9maWxlKCRub2RlX25vX3NpZ25h bC0+bG9nZmlsZSgpKTsKK2xpa2UoCisJJGxvZ2ZpbGVfbm9fc2lnbmFsLAorCXFyL211bHRpcGxl IHJlY292ZXJ5IHRhcmdldHMgc3BlY2lmaWVkLywKKwknZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZSBs b2dnZWQgd2l0aG91dCByZWNvdmVyeS5zaWduYWwnKTsKK2xpa2UoCisJJGxvZ2ZpbGVfbm9fc2ln bmFsLAorCXFyL1JlY292ZXJ5IHRhcmdldHMgInJlY292ZXJ5X3RhcmdldF9uYW1lIiwgInJlY292 ZXJ5X3RhcmdldF90aW1lIiBhcmUgc2V0LywKKwknZXJyZGV0YWlsIGxpc3RzIHRoZSBzZXQgcGFy YW1ldGVycyBpbiBvcmRlciB3aXRob3V0IHJlY292ZXJ5LnNpZ25hbCcpOwordW5saWtlKAorCSRs b2dmaWxlX25vX3NpZ25hbCwKKwlxci9hcmUgc2V0W15cbl0qPS8sCisJJ2VycmRldGFpbCBkb2Vz IG5vdCBlY2hvIHBhcmFtZXRlciB2YWx1ZXMgd2l0aG91dCByZWNvdmVyeS5zaWduYWwnKTsKK2xp a2UoCisJJGxvZ2ZpbGVfbm9fc2lnbmFsLAorCXFyL0hJTlQ6LipwZ19zZXR0aW5ncy8sCisJJ2Vy cmhpbnQgcG9pbnRzIHRvIHBnX3NldHRpbmdzIHdpdGhvdXQgcmVjb3Zlcnkuc2lnbmFsJyk7CisK KyMgQ29uZmxpY3QgaW52b2x2aW5nIHRoZSBiYXJlIHJlY292ZXJ5X3RhcmdldCAobm8gc3VmZml4 KTogaXQgaXMgY2hlY2tlZCBmaXJzdCwKKyMgc28gaXRzIG5hbWUgYXBwZWFycyBhdCB0aGUgaGVh ZCBvZiB0aGUgbGlzdC4gIFRoZSBsaXN0IGVudHJpZXMgYXJlIHF1b3RlZCwgc28KKyMgdGhlIHJl Z2V4IGFuY2hvcnMgb24gdGhlIGNsb3NpbmcgcXVvdGUgdG8gZW5zdXJlICJyZWNvdmVyeV90YXJn ZXQiIGRvZXMgbm90CisjIG1hdGNoIGEgcHJlZml4IG9mICJyZWNvdmVyeV90YXJnZXRfeGlkIi4K K215ICRub2RlX2JhcmUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ211bHRpX3Rh cmdldF9iYXJlJyk7Ciskbm9kZV9iYXJlLT5pbml0X2Zyb21fYmFja3VwKCRub2RlX3ByaW1hcnks ICdteV9iYWNrdXAnKTsKKyRub2RlX2JhcmUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYn LAorCSJyZWNvdmVyeV90YXJnZXQgPSAnaW1tZWRpYXRlJ1xucmVjb3ZlcnlfdGFyZ2V0X3hpZCA9 ICckcmVjb3ZlcnlfdHhpZCciKTsKKworbXkgJHJlc19iYXJlID0gcnVuX2xvZygKKwlbCisJCSdw Z19jdGwnLAorCQknLS1wZ2RhdGEnID0+ICRub2RlX2JhcmUtPmRhdGFfZGlyLAorCQknLS1sb2cn ID0+ICRub2RlX2JhcmUtPmxvZ2ZpbGUsCisJCSdzdGFydCcsCisJXSk7CitvayghJHJlc19iYXJl LAorCSdzZXJ2ZXIgZmFpbHMgdG8gc3RhcnQgd2l0aCBiYXJlIHJlY292ZXJ5X3RhcmdldCBjb25m bGljdCcpOworCitteSAkbG9nZmlsZV9iYXJlID0gc2x1cnBfZmlsZSgkbm9kZV9iYXJlLT5sb2dm aWxlKCkpOworbGlrZSgKKwkkbG9nZmlsZV9iYXJlLAorCXFyL1JlY292ZXJ5IHRhcmdldHMgInJl Y292ZXJ5X3RhcmdldCIsICJyZWNvdmVyeV90YXJnZXRfeGlkIiBhcmUgc2V0LywKKwknZXJyZGV0 YWlsIGxpc3RzIHRoZSBiYXJlIHJlY292ZXJ5X3RhcmdldCBmaXJzdCwgd2l0aG91dCBwcmVmaXgg bWlzbWF0Y2gnKTsKKworIyBUaHJlZSBjb25mbGljdGluZyB0YXJnZXRzOiBleGVyY2lzZXMgdGhl ICIsICIgc2VwYXJhdG9yIGJldHdlZW4gbW9yZSB0aGFuIHR3bworIyBlbnRyaWVzIChubyB0cmFp bGluZyBzZXBhcmF0b3IgYWZ0ZXIgdGhlIGxhc3QgZW50cnkpLgorbXkgJG5vZGVfdGhyZWUgPSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ211bHRpX3RhcmdldF90aHJlZScpOworJG5v ZGVfdGhyZWUtPmluaXRfZnJvbV9iYWNrdXAoJG5vZGVfcHJpbWFyeSwgJ215X2JhY2t1cCcpOwor JG5vZGVfdGhyZWUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCSJyZWNvdmVyeV90 YXJnZXRfbmFtZSA9ICckcmVjb3ZlcnlfbmFtZSdcbiIKKwkgIC4gInJlY292ZXJ5X3RhcmdldF90 aW1lID0gJyRyZWNvdmVyeV90aW1lJ1xuIgorCSAgLiAicmVjb3ZlcnlfdGFyZ2V0X3hpZCA9ICck cmVjb3ZlcnlfdHhpZCciKTsKKworbXkgJHJlc190aHJlZSA9IHJ1bl9sb2coCisJWworCQkncGdf Y3RsJywKKwkJJy0tcGdkYXRhJyA9PiAkbm9kZV90aHJlZS0+ZGF0YV9kaXIsCisJCSctLWxvZycg PT4gJG5vZGVfdGhyZWUtPmxvZ2ZpbGUsCisJCSdzdGFydCcsCisJXSk7CitvayghJHJlc190aHJl ZSwKKwknc2VydmVyIGZhaWxzIHRvIHN0YXJ0IHdpdGggdGhyZWUgY29uZmxpY3RpbmcgcmVjb3Zl cnkgdGFyZ2V0cycpOworCitteSAkbG9nZmlsZV90aHJlZSA9IHNsdXJwX2ZpbGUoJG5vZGVfdGhy ZWUtPmxvZ2ZpbGUoKSk7CitsaWtlKAorCSRsb2dmaWxlX3RocmVlLAorCXFyL1JlY292ZXJ5IHRh cmdldHMgInJlY292ZXJ5X3RhcmdldF9uYW1lIiwgInJlY292ZXJ5X3RhcmdldF90aW1lIiwgInJl Y292ZXJ5X3RhcmdldF94aWQiIGFyZSBzZXQvLAorCSdlcnJkZXRhaWwgbGlzdHMgdGhyZWUgc2V0 IHBhcmFtZXRlcnMgd2l0aCBjb3JyZWN0IHNlcGFyYXRvcnMnKTsKKworIyBTYW1lLUdVQyBsYXN0 LXdpbnMgKG9uZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBHVUMncyB2YWx1ZSk6IGFzc2lnbmlu ZyBhCisjIHJlY292ZXJ5X3RhcmdldF8qIEdVQyBhbmQgdGhlbiBhc3NpZ25pbmcgdGhlIHNhbWUg R1VDIHRvIGFuIGVtcHR5IHN0cmluZworIyBsZWF2ZXMgbm8gdGFyZ2V0IHNldCBhbmQgcmVjb3Zl cnkgcHJvY2VlZHMgdG8gdGhlIGVuZCBvZiBXQUwuICBUaGlzIGlzIHRoZQorIyAic2V0IHRoZW4g dW5zZXQiIGZvcm0gb2YgR1VDIHJlYXNzaWdubWVudDsgdGhlIGFzc2lnbiBob29rIGNsZWFycyBp dHMgb3duCisjIHR5cGUgd2hlbiB0aGUgbmV3IHZhbHVlIGlzIGVtcHR5LiAgcG9zdGdyZXNxbC5j b25mIGNhbm5vdCBleHByZXNzIGR1cGxpY2F0ZQorIyBrZXlzIChQcm9jZXNzQ29uZmlnRmlsZSBj b2xsYXBzZXMgdGhlbSksIHNvIHRoZSBwb3N0bWFzdGVyIGNvbW1hbmQgbGluZSBpcworIyB1c2Vk IHZpYSAicGdfY3RsIC0tb3B0aW9ucyIuICBFYWNoIG9mIHRoZSBmaXZlIHJlY292ZXJ5X3Rhcmdl dF8qIGFzc2lnbgorIyBob29rcyBpcyBleGVyY2lzZWQgb25jZS4KKyMKKyMgTm90ZTogR1VDIHZh bHVlcyBiZWxvdyBhcmUgcGFzc2VkIHVucXVvdGVkIG9uIHRoZSBjb21tYW5kIGxpbmUuICBXaW5k b3dzCisjIGNtZC5leGUgZG9lcyBub3Qgc3RyaXAgc2luZ2xlIHF1b3RlcyB0aGUgd2F5IFBPU0lY IHNoZWxscyBkbywgc28gcXVvdGVkCisjIHZhbHVlcyB3b3VsZCByZWFjaCB0aGUgcG9zdG1hc3Rl ciB2ZXJiYXRpbSBhbmQgYmUgcmVqZWN0ZWQuICByZWNvdmVyeV90aW1lCisjIGZyb20gbm93KCkg Y29udGFpbnMgYSBzcGFjZTsgd2UgcmVwbGFjZSBpdCB3aXRoIHRoZSBJU08gODYwMSBUIHNlcGFy YXRvcgorIyBzbyB0aGUgdmFsdWUgaXMgYSBzaW5nbGUgc2hlbGwgdG9rZW4gd2l0aG91dCBxdW90 aW5nLgorbXkgJHJlY292ZXJ5X3RpbWVfdCA9ICRyZWNvdmVyeV90aW1lOworJHJlY292ZXJ5X3Rp bWVfdCA9fiBzLyAvVC87CisKK3Rlc3RfcmVjb3Zlcnlfc3RhbmRieV93aXRoX29wdGlvbnMoCisJ J3JlY292ZXJ5X3RhcmdldF94aWQgc2V0IHRoZW4gY2xlYXJlZCcsCisJJ3N0YW5kYnlfeGlkX3Nl dF9jbGVhcicsICRub2RlX3ByaW1hcnksCisJIi1jIHJlY292ZXJ5X3RhcmdldF94aWQ9JHJlY292 ZXJ5X3R4aWQgLWMgcmVjb3ZlcnlfdGFyZ2V0X3hpZD0iLAorCSI2MDAwIiwgJGxzbjYpOworCit0 ZXN0X3JlY292ZXJ5X3N0YW5kYnlfd2l0aF9vcHRpb25zKAorCSdyZWNvdmVyeV90YXJnZXRfdGlt ZSBzZXQgdGhlbiBjbGVhcmVkJywKKwknc3RhbmRieV90aW1lX3NldF9jbGVhcicsICRub2RlX3By aW1hcnksCisJIi1jIHJlY292ZXJ5X3RhcmdldF90aW1lPSRyZWNvdmVyeV90aW1lX3QgLWMgcmVj b3ZlcnlfdGFyZ2V0X3RpbWU9IiwKKwkiNjAwMCIsICRsc242KTsKKwordGVzdF9yZWNvdmVyeV9z dGFuZGJ5X3dpdGhfb3B0aW9ucygKKwkncmVjb3ZlcnlfdGFyZ2V0X25hbWUgc2V0IHRoZW4gY2xl YXJlZCcsCisJJ3N0YW5kYnlfbmFtZV9zZXRfY2xlYXInLCAkbm9kZV9wcmltYXJ5LAorCSItYyBy ZWNvdmVyeV90YXJnZXRfbmFtZT0kcmVjb3ZlcnlfbmFtZSAtYyByZWNvdmVyeV90YXJnZXRfbmFt ZT0iLAorCSI2MDAwIiwgJGxzbjYpOworCit0ZXN0X3JlY292ZXJ5X3N0YW5kYnlfd2l0aF9vcHRp b25zKAorCSdyZWNvdmVyeV90YXJnZXRfbHNuIHNldCB0aGVuIGNsZWFyZWQnLAorCSdzdGFuZGJ5 X2xzbl9zZXRfY2xlYXInLCAkbm9kZV9wcmltYXJ5LAorCSItYyByZWNvdmVyeV90YXJnZXRfbHNu PSRyZWNvdmVyeV9sc24gLWMgcmVjb3ZlcnlfdGFyZ2V0X2xzbj0iLAorCSI2MDAwIiwgJGxzbjYp OworCit0ZXN0X3JlY292ZXJ5X3N0YW5kYnlfd2l0aF9vcHRpb25zKAorCSdyZWNvdmVyeV90YXJn ZXQgc2V0IHRoZW4gY2xlYXJlZCcsCisJJ3N0YW5kYnlfaW1tZWRpYXRlX3NldF9jbGVhcicsICRu b2RlX3ByaW1hcnksCisJIi1jIHJlY292ZXJ5X3RhcmdldD1pbW1lZGlhdGUgLWMgcmVjb3Zlcnlf dGFyZ2V0PSIsCisJIjYwMDAiLCAkbHNuNik7CisKKyMgU2FtZS1HVUMgZW1wdHktdGhlbi1zZXQg c2FuaXR5OiBhc3NpZ25pbmcgYW4gZW1wdHkgc3RyaW5nIGFuZCB0aGVuIGEKKyMgbm9uLWVtcHR5 IHZhbHVlIHRvIHRoZSBzYW1lIEdVQyBtdXN0IGVuZCB3aXRoIHRoZSB0YXJnZXQgc2V0LiAgVGhl IGVtcHR5CisjIHZhbHVlIHNlZW4gZmlyc3QgbXVzdCBub3QgcG9pc29uIGEgbGF0ZXIgbm9uLWVt cHR5IGFzc2lnbm1lbnQuCitteSAkbm9kZV94aWRfY2xlYXJfc2V0ID0KKyAgUG9zdGdyZVNRTDo6 VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdGFuZGJ5X3hpZF9jbGVhcl9zZXQnKTsKKyRub2RlX3hpZF9j bGVhcl9zZXQtPmluaXRfZnJvbV9iYWNrdXAoJG5vZGVfcHJpbWFyeSwgJ215X2JhY2t1cCcsCisJ aGFzX3Jlc3RvcmluZyA9PiAxKTsKKworbXkgJHJlc194aWRfY2xlYXJfc2V0ID0gcnVuX2xvZygK KwlbCisJCSdwZ19jdGwnLAorCQknLS1wZ2RhdGEnID0+ICRub2RlX3hpZF9jbGVhcl9zZXQtPmRh dGFfZGlyLAorCQknLS1sb2cnID0+ICRub2RlX3hpZF9jbGVhcl9zZXQtPmxvZ2ZpbGUsCisJCSct LW9wdGlvbnMnID0+CisJCSAgIi1jIHJlY292ZXJ5X3RhcmdldF94aWQ9IC1jIHJlY292ZXJ5X3Rh cmdldF94aWQ9JHJlY292ZXJ5X3R4aWQiLAorCQknc3RhcnQnLAorCV0pOworb2soJHJlc194aWRf Y2xlYXJfc2V0LAorCSdzZXJ2ZXIgc3RhcnRzIHdpdGggcmVjb3ZlcnlfdGFyZ2V0X3hpZCBjbGVh cmVkIHRoZW4gc2V0Jyk7CisKKyRub2RlX3hpZF9jbGVhcl9zZXQtPnBvbGxfcXVlcnlfdW50aWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUICckbHNuMic6OnBnX2xzbiA8PSBwZ19sYXN0X3dhbF9yZXBs YXlfbHNuKCkiKQorICBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBzdGFuZGJ5 IHRvIGNhdGNoIHVwIjsKK215ICRjb3VudF94aWRfY2xlYXJfc2V0ID0gJG5vZGVfeGlkX2NsZWFy X3NldC0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRhYl9p bnQiKTsKK2lzKCRjb3VudF94aWRfY2xlYXJfc2V0LCAiMjAwMCIsCisJJ3JlY292ZXJ5X3Rhcmdl dF94aWQgaG9ub3JlZCB3aGVuIGNsZWFyZWQgdGhlbiBzZXQnKTsKKyRub2RlX3hpZF9jbGVhcl9z ZXQtPnRlYXJkb3duX25vZGU7CisKICMgSW52YWxpZCByZWNvdmVyeV90YXJnZXRfdGltZWxpbmUg dGVzdHMKIG15ICgkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlX3ByaW1hcnktPnBz cWwoJ3Bvc3RncmVzJywKIAkiQUxURVIgU1lTVEVNIFNFVCByZWNvdmVyeV90YXJnZXRfdGltZWxp bmUgVE8gJ2JvZ3VzJyIpOwotLSAKMi41Mi4wCgo= --000000000000d32e990654d033cd--