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 1whmS9-000Pmy-28 for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Jul 2026 10:58:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1whmS8-00CbyU-0p for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Jul 2026 10:58:00 +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 1whmS7-00CbyL-2h for pgsql-hackers@lists.postgresql.org; Thu, 09 Jul 2026 10:58:00 +0000 Received: from mail-ej1-x62f.google.com ([2a00:1450:4864:20::62f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1whmS4-00000000SQK-2veT for pgsql-hackers@lists.postgresql.org; Thu, 09 Jul 2026 10:57:59 +0000 Received: by mail-ej1-x62f.google.com with SMTP id a640c23a62f3a-c15c7d22070so94938766b.2 for ; Thu, 09 Jul 2026 03:57:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783594674; cv=none; d=google.com; s=arc-20260327; b=Iue70MDdTUd3/x8d/yf07Av/67JfhoDGpQ6EOyVx8pCudJq8dvphvCxPBY7lWg6JUC C4H6ygJNR5/F7IbzzOfl2Fa8c5g41MLquttjrEPnL5KI8CnQ6wGzem5QFV+nL/AO1qVr VS+cphsdLx43sJSSH5nnXAu/U+OE8o+HPMgTFQOAuEYcdHC1D2aKNvkA/TCcvjRyOZZT YAJstsTeFhfi6mBBXfXXDFYp671JdwP4N7vh8dtzaP7ia5FyH+A+VYQGc/2C/KeSGSH1 6RCoauIGwlOdF5jH5SKTTr86wxIzrdJ2+dopYrLLLgX7oxmx71R2DlunftxpA+UV7wQ0 9QUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=WyclScdNn41kBdbnFleAX+GYmpb7vpG0oufCW/a76ug=; fh=3BZcJMwtgjr9VEmKQdcv/2xc+8jnxhH7nHPFQKRu6c8=; b=Xpo6WD4UFtAx57/f2UsqdpxGXAJ/2oX3WYaUmh8xs6YdwvQNYUV63LArm9l/nn1E1C Cw/3T73yS/IPvGKpWD4pRrDVaM6BKCPZ4qq8Ziif2q/Mtiu2JTE8UPhbBSGyVFXhV9A9 CgLqh+dG94gctk1o0kRqdaQhswAy9cluilbAsOaaKmj9VpjWvuODmjIEXy5X6zmcFWtU iAciduJtlsksUQ+P6j2j/zJUbWHhgaHCjABNTQMNue6s9xpDtNZtDokaLIMFzry7VVMk sKdjuAbbsvqPOvNowj4U9xR/GC4m9Mf0am91aOz9LiikfAOoh6SPAk3tZyVAXCFVCOUT Clzg==; 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=enterprisedb.com; s=google; t=1783594674; x=1784199474; darn=lists.postgresql.org; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:from:to:cc:subject:date:message-id:reply-to :content-type; bh=WyclScdNn41kBdbnFleAX+GYmpb7vpG0oufCW/a76ug=; b=JeJuZf1XJksdEP+6JWUsZMVhGazgpE6qobqRCSbzbb8hsIyJkDwUjOqfX7SJclk7zv RsTIMoX0T15Mgsyyt/HqaCzyPMinU7DvYV3bGHl5+Aj2Q86TvSN9KDS5m1VklPSP1pPq 9wVhL+AEd0I+p8+O8ieO1GptsHB7pggmLl+H9475gKS1HCKzX9cAbsqt5Vt0wGSJRn+B 73dZO/Xpe6sGy9/d0ACbeFzz5Mm50RPK7uhzcIlSLRbpmAa04aNFXJoHRT8UmsNXjA+t kPdD1Te1te6TIMglSfxXNddGFy9gWr/pcDernkuXRzQbYMhlRDhaDpTjQlDINKNQo6+d iAMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783594674; x=1784199474; h=content-type: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:content-type; bh=WyclScdNn41kBdbnFleAX+GYmpb7vpG0oufCW/a76ug=; b=cWurm8+1PukEafZt509mG77XP6mNKaRrlJgjKCD+m/FqhaW3J4ayPsDoonZFvfR7eo eznuX/wvaSVCuhQNKbk/uZIMJTR9fFC9Y8X7CcssnMPjBWsMINSidtRsIJw0LUd15/MA +jeAdzVhxHVx8fl6hOfNc9kfp4YweQmsmnUNomV1OQ3zfMq+H0tC4QQrid6P4ySu5VWi euOcy6QGlVsv37MJQjHZI6YGGGzIPnfqnyCmI2vMl/g5QGa9x3e3y0xMwEGM4CxQV0Iw 318dCdESGYHXTvLKr6v3zT9iEokHGNLtgEZqbua35B2fRjUnLTE8grsO6jKXYy+/ZhTq Ekkg== X-Forwarded-Encrypted: i=1; AHgh+RrlTpWYovIWO/kFpjK10rs+D33HryaqWGXGyJKT4lib2n4PLHuN73mzD+10xiKGDNFyYpGKgntkNQ95S8dp@lists.postgresql.org X-Gm-Message-State: AOJu0YxRt693emuZOIzGhwTg9ki0keps7LXRtvW7t1eU98803IfoX7n/ ociJlaAz5p9/dgTNUSCa+5Sh/ggf+wMeldsLCmuYedDMFHBeXDjKTApGsbP9gt7YUO6sxd1ab5r BKZC/kFXIEtfuK2vo+RJAYKCwvDF4hVMcKk4sL4YQ X-Gm-Gg: AfdE7ck3ztmDcvGx/5Zsl0WTYEnLoRcG+/p7hW+1Vkl/qme8oiC4WwmOT4qbuY5DaXt IDVTABaA8ZAe/5ivXXRnvGsjAyKtOOpqrEAPWXGlLcEKsV+GrNAA+Lbm/OW0QnwgeWvDVOd1Pxy w6gbYXrUk5uzVa3UU0yn6u7ulI71UaaJ9Adsgb/wt1eaLoa85EbsjsWr5m8VzJWQIpNOkmgjTfp 78O04d4hFbbS6JbM6/518lyCJTuTNdP5XO/2MaYusk8k8ZqOv+zTkRxe02gRo3/0u7zI6iA3w== X-Received: by 2002:a17:907:72c4:b0:c15:f476:9685 with SMTP id a640c23a62f3a-c15f4769720mr9523066b.30.1783594673796; Thu, 09 Jul 2026 03:57:53 -0700 (PDT) MIME-Version: 1.0 References: <177997571870.313758.10720313850275742354.pgcf@coridan.postgresql.org> In-Reply-To: From: Akshay Joshi Date: Thu, 9 Jul 2026 16:27:41 +0530 X-Gm-Features: AUfX_mxeq8S2AT0RCLFzi_lGJcvWnfBNrysiaz7Iq_mdvhtwi_owJaEHjuSTg6c Message-ID: Subject: Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement To: Rui Zhao Cc: solai v , Ilmar Y , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000f687a806562b7ed5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f687a806562b7ed5 Content-Type: multipart/alternative; boundary="000000000000f687a606562b7ed3" --000000000000f687a606562b7ed3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks Rui for the review. I have tried to fix the issues you raised. The v16 patch is ready for review/commit. On Wed, Jul 8, 2026 at 10:28=E2=80=AFPM Rui Zhao wro= te: > Hi Akshay, > > I tested v15 on current master (57f93af36f): builds, make check passes, a= nd > basic reconstruction, pretty mode, NULL handling, and default-clause > omission > all look good. Two things. > > 1) Back in the v3/v4 discussion you decided the ON name should > always > be schema-qualified for safety (the pg_get_triggerdef_worker thread with > jian he), and that pretty here only controls formatting, not schema (Phil= 's > point). That reasoning didn't reach the USING / WITH CHECK expressions, > though: object references inside them are still qualified only by the > caller's > search_path, so they can lose their schema and rebind to a different obje= ct > when the DDL is replayed elsewhere: > > CREATE FUNCTION s1.f(int) RETURNS bool LANGUAGE sql AS 'SELECT $1 > 0= '; > CREATE FUNCTION s2.f(int) RETURNS bool LANGUAGE sql AS 'SELECT $1 < 0= '; > CREATE POLICY pf ON t2 USING (s1.f(a)); > > SET search_path =3D public, s1; > SELECT ddl FROM pg_get_policy_ddl('t2', 'pf') AS ddl; > -- CREATE POLICY pf ON public.t2 USING (f(a)); -- s1. dropped > > SET search_path =3D public, s2; > CREATE POLICY pf ON t2 USING (f(a)); -- now s2.f, > opposite meaning > > So within one statement the ON clause is always qualified but the > expression > body isn't -- and as Phil noted, the pretty flag can't fix this, since > pg_get_expr qualifies by search_path visibility regardless of pretty. > > Worth settling the contract, given where this function sits. The old > pg_get_viewdef / ruledef / indexdef functions are search_path-aware and > leave > qualification to the caller (pg_dump sets search_path empty around them s= o > the > output is portable). The new pg_get_*_ddl functions committed so far (rol= e, > database, tablespace) are on global, schemaless objects, so the question > never > came up -- pg_get_policy_ddl is the first of the family whose output embe= ds > schema-qualifiable references. Your own pg_get_table_ddl patch already hi= t > this and deparses under a controlled search_path (narrowed to pg_catalog)= , > so > the most consistent fix is to do the same here (NewGUCNestLevel + > set_config); > an empty search_path already yields the fully-qualified s1.f(a). If inste= ad > the intent is to follow the caller's search_path, that's fine too, but it > should be documented (and SET search_path =3D '' noted as the way to get > portable DDL). > > 2) The doc calls the second parameter policy_name, but the actual argumen= t > is > policyname, so the documented named-argument call fails: > > SELECT * FROM pg_get_policy_ddl("table" =3D> 't'::regclass, > policy_name =3D> 'p_all'); > ERROR: function pg_get_policy_ddl(table =3D> regclass, policy_name > =3D> unknown) does not exist > > Regards, > Rui > --000000000000f687a606562b7ed3 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Thanks=C2=A0Rui for the review. I have tried to fix the is= sues you raised.
The v16 patch is ready for review/commit.

On Wed, Jul 8, 2026 at 10:28=E2=80=AFPM Rui Zhao <zhaorui126@gmail.com> wrote:
Hi Akshay,

I tested v15 on current master (57f93af36f): builds, make check passes, and=
basic reconstruction, pretty mode, NULL handling, and default-clause omissi= on
all look good. Two things.

1) Back in the v3/v4 discussion you decided the ON <table> name shoul= d always
be schema-qualified for safety (the pg_get_triggerdef_worker thread with jian he), and that pretty here only controls formatting, not schema (Phil&#= 39;s
point). That reasoning didn't reach the USING / WITH CHECK expressions,=
though: object references inside them are still qualified only by the calle= r's
search_path, so they can lose their schema and rebind to a different object=
when the DDL is replayed elsewhere:

=C2=A0 =C2=A0 CREATE FUNCTION s1.f(int) RETURNS bool LANGUAGE sql AS 'S= ELECT $1 > 0';
=C2=A0 =C2=A0 CREATE FUNCTION s2.f(int) RETURNS bool LANGUAGE sql AS 'S= ELECT $1 < 0';
=C2=A0 =C2=A0 CREATE POLICY pf ON t2 USING (s1.f(a));

=C2=A0 =C2=A0 SET search_path =3D public, s1;
=C2=A0 =C2=A0 SELECT ddl FROM pg_get_policy_ddl('t2', 'pf')= AS ddl;
=C2=A0 =C2=A0 --=C2=A0 CREATE POLICY pf ON public.t2 USING (f(a));=C2=A0 = =C2=A0 =C2=A0 -- s1. dropped

=C2=A0 =C2=A0 SET search_path =3D public, s2;
=C2=A0 =C2=A0 CREATE POLICY pf ON t2 USING (f(a));=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-- now s2.f,
opposite meaning

So within one statement the ON clause is always qualified but the expressio= n
body isn't -- and as Phil noted, the pretty flag can't fix this, si= nce
pg_get_expr qualifies by search_path visibility regardless of pretty.

Worth settling the contract, given where this function sits. The old
pg_get_viewdef / ruledef / indexdef functions are search_path-aware and lea= ve
qualification to the caller (pg_dump sets search_path empty around them so = the
output is portable). The new pg_get_*_ddl functions committed so far (role,=
database, tablespace) are on global, schemaless objects, so the question ne= ver
came up -- pg_get_policy_ddl is the first of the family whose output embeds=
schema-qualifiable references. Your own pg_get_table_ddl patch already hit<= br> this and deparses under a controlled search_path (narrowed to pg_catalog), = so
the most consistent fix is to do the same here (NewGUCNestLevel + set_confi= g);
an empty search_path already yields the fully-qualified s1.f(a). If instead=
the intent is to follow the caller's search_path, that's fine too, = but it
should be documented (and SET search_path =3D '' noted as the way t= o get
portable DDL).

2) The doc calls the second parameter policy_name, but the actual argument = is
policyname, so the documented named-argument call fails:

=C2=A0 =C2=A0 SELECT * FROM pg_get_policy_ddl("table" =3D> = 9;t'::regclass,
policy_name =3D> 'p_all');
=C2=A0 =C2=A0 ERROR:=C2=A0 function pg_get_policy_ddl(table =3D> regclas= s, policy_name
=3D> unknown) does not exist

Regards,
Rui
--000000000000f687a606562b7ed3-- --000000000000f687a806562b7ed5 Content-Type: application/octet-stream; name="v16-0001-Add-pg_get_policy_ddl-to-reconstruct-CREATE.patch" Content-Disposition: attachment; filename="v16-0001-Add-pg_get_policy_ddl-to-reconstruct-CREATE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mrde7bzf0 RnJvbSA0ZDgyZmNmOWIwNDYwNzgwNGVjZGNjNGIzZDkwZDU3YWMxMmNhNjcxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBGcmksIDIyIE1heSAyMDI2IDE4OjE4OjA3ICswNTMwClN1YmplY3Q6IFtQ QVRDSCB2MTZdIEFkZCBwZ19nZXRfcG9saWN5X2RkbCgpIHRvIHJlY29uc3RydWN0IENSRUFURSBQ T0xJQ1kKIHN0YXRlbWVudHMKCiAgcGdfZ2V0X3BvbGljeV9kZGwodGFibGUgcmVnY2xhc3MsCiAg ICAgICAgICAgICAgICAgICAgcG9saWN5bmFtZSBuYW1lLAogICAgICAgICAgICAgICAgICAgIHBy ZXR0eSBib29sIERFRkFVTFQgZmFsc2UpCiAgUkVUVVJOUyBTRVRPRiB0ZXh0CgpyZWNvbnN0cnVj dHMgdGhlIENSRUFURSBQT0xJQ1kgc3RhdGVtZW50IGZvciB0aGUgbmFtZWQgcm93LWxldmVsCnNl Y3VyaXR5IHBvbGljeSBvbiB0aGUgc3BlY2lmaWVkIHRhYmxlLiAgQWx0aG91Z2ggYSBzaW5nbGUg c3RhdGVtZW50IGlzCnByb2R1Y2VkLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIFNFVE9GIHRleHQg cmVzdWx0IHNvIGl0cyBjYWxsaW5nCmNvbnZlbnRpb24gbWF0Y2hlcyB0aGUgcmVzdCBvZiB0aGUg cGdfZ2V0XypfZGRsIGZhbWlseS4KClRoZSByZWNvbnN0cnVjdGVkIERETCBpbmNsdWRlcyBhbGwg Y2xhdXNlcyBvZiB0aGUgQ1JFQVRFIFBPTElDWSBzeW50YXg6CnRoZSBwb2xpY3kncyBwZXJtaXNz aXZlbmVzcyAoQVMgUkVTVFJJQ1RJVkUpLCBjb21tYW5kIHR5cGUgKEZPUgpTRUxFQ1QvSU5TRVJU L1VQREFURS9ERUxFVEUpLCByb2xlIGxpc3QgKFRPIDxyb2xlcz4pLCBVU0lORwpxdWFsaWZpY2F0 aW9uLCBhbmQgV0lUSCBDSEVDSyBleHByZXNzaW9uLiAgQ2xhdXNlcyB3aG9zZSB2YWx1ZSBlcXVh bHMKdGhlIHBhcnNlcidzIGRlZmF1bHQgLS0gUEVSTUlTU0lWRSwgRk9SIEFMTCwgYW5kIFRPIFBV QkxJQyAtLSBhcmUKb21pdHRlZCBmcm9tIHRoZSBvdXRwdXQsIG1hdGNoaW5nIHRoZSBjb252ZW50 aW9uIHVzZWQgYnkgcGdfZ2V0X2luZGV4ZGVmLApwZ19nZXRfY29uc3RyYWludGRlZiwgcGdfZ2V0 X3ZpZXdkZWYsIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucy4gIFRoZSByZXN1bHQKaXMgdGhlcmVmb3Jl IHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvIHRoZSBvcmlnaW5hbCBEREwsIG5vdCBsZXhpY2Fs bHkKaWRlbnRpY2FsLgoKVGhlIHByZXR0eSBwYXJhbWV0ZXIgY29udHJvbHMgb3V0cHV0IGZvcm1h dHRpbmcgYW5kIGRlZmF1bHRzIHRvIGZhbHNlLApmb2xsb3dpbmcgdGhlIHNhbWUgY29udmVudGlv biBhcyBwZ19nZXRfcm9sZV9kZGwsIHBnX2dldF90YWJsZXNwYWNlX2RkbCwKYW5kIHBnX2dldF9k YXRhYmFzZV9kZGwuICBOVUxMIHBhc3NlZCBleHBsaWNpdGx5IGZvciBwcmV0dHkgaXMgdHJlYXRl ZAphcyBmYWxzZS4KCk5VTEwgaW5wdXRzIGZvciB0aGUgdGFibGUgb3IgcG9saWN5IG5hbWUgeWll bGQgbm8gcm93cy4gIEFuIGludmFsaWQKcmVsYXRpb24gbmFtZSBzdXJmYWNlcyB0aGUgcmVnY2xh c3MgcmVzb2x1dGlvbiBlcnJvcjsgYSBub24tZXhpc3RlbnQKcG9saWN5IHJhaXNlcyBhbiBleHBs aWNpdCAicG9saWN5IC4uLiBkb2VzIG5vdCBleGlzdCIgZXJyb3IuCgpVc2FnZSBleGFtcGxlczoK CiAgLS0gY29tcGFjdCBmb3JtIChkZWZhdWx0KQogIFNFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGlj eV9kZGwoJ3Jsc190YWJsZScsICdwb2wxJyk7CiAgU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5 X2RkbCgxNjU2NCwgJ3BvbDEnKTsKCiAgLS0gcHJldHR5LXByaW50ZWQgZm9ybQogIFNFTEVDVCAq IEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YWJsZScsICdwb2wxJywgdHJ1ZSk7CgpSZWdy ZXNzaW9uIGNvdmVyYWdlIGlzIGFkZGVkIHRvIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jvd3NlY3Vy aXR5LnNxbAphbmQgZXhlcmNpc2VzIGFsbCB2YWxpZCBjb21iaW5hdGlvbnMgb2YgdGhlIENSRUFU RSBQT0xJQ1kgc3ludGF4OgpQRVJNSVNTSVZFL1JFU1RSSUNUSVZFLCBhbGwgRk9SIGNvbW1hbmQg dmFyaWFudHMgKEFMTC9TRUxFQ1QvSU5TRVJULwpVUERBVEUvREVMRVRFKSwgbXVsdGktcm9sZSBU TyBsaXN0cywgVVNJTkctb25seSwgV0lUSCBDSEVDSy1vbmx5LCBhbmQKVVNJTkcrV0lUSCBDSEVD SyBwb2xpY2llcyBmb3IgYm90aCBBTEwgYW5kIFVQREFURSBjb21tYW5kcyAodGhlIG9ubHkKdHdv IHRoYXQgYWNjZXB0IGJvdGgpLCBSRVNUUklDVElWRSBvbiBhIHNwZWNpZmljIGNvbW1hbmQgdHlw ZSwKc3VicXVlcnkgZXhwcmVzc2lvbnMsIHByZXR0eSBhbmQgbm9uLXByZXR0eSBvdXRwdXQsIGFs bCBib29sZWFuCnJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIHByZXR0eSBhcmd1bWVudCAodHJ1ZS9m YWxzZSwgb24vb2ZmLCAxLzApLApOVUxMIGFuZCBlcnJvciBwYXRocywgYW5kIGEgcm91bmQtdHJp cCB0ZXN0IHRoYXQgZHJvcHMgYW5kIHJlLWV4ZWN1dGVzCnRoZSBnZW5lcmF0ZWQgRERMLgoKQXV0 aG9yOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdl ZC1ieTogUnVpIFpoYW8gPHpoYW9ydWkxMjZAZ21haWwuY29tPgotLS0KIGRvYy9zcmMvc2dtbC9m dW5jL2Z1bmMtaW5mby5zZ21sICAgICAgICAgIHwgIDE5ICsrCiBzcmMvYmFja2VuZC91dGlscy9h ZHQvZGRsdXRpbHMuYyAgICAgICAgICB8IDI3NCArKysrKysrKysrKysrKysrKysrCiBzcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICB8ICAgNiArCiBzcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3Jvd3NlY3VyaXR5Lm91dCB8IDMxNSArKysrKysrKysrKysrKysrKysrKysr CiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9yb3dzZWN1cml0eS5zcWwgICAgICB8IDE1MCArKysrKysr KysrKwogNSBmaWxlcyBjaGFuZ2VkLCA3NjQgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2Rv Yy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1p bmZvLnNnbWwKaW5kZXggNjllZjM4NTdjZmEuLmNmZGVmMjJhZDVhIDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5j LWluZm8uc2dtbApAQCAtMzk2MCw2ICszOTYwLDI1IEBAIGFjbCAgICAgIHwge3Bvc3RncmVzPWFy d2REeHRtL3Bvc3RncmVzLGZvbz1yL3Bvc3RncmVzfQogICAgICAgICBpcyBmYWxzZSwgdGhlIDxs aXRlcmFsPk9XTkVSPC9saXRlcmFsPiBjbGF1c2UgaXMgb21pdHRlZC4KICAgICAgICA8L3BhcmE+ PC9lbnRyeT4KICAgICAgIDwvcm93PgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkgcm9sZT0i ZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICA8 aW5kZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+cGdfZ2V0X3BvbGljeV9kZGw8L3ByaW1hcnk+ CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+cGdfZ2V0X3BvbGljeV9k ZGw8L2Z1bmN0aW9uPgorICAgICAgICAoIDxwYXJhbWV0ZXI+dGFibGU8L3BhcmFtZXRlcj4gPHR5 cGU+cmVnY2xhc3M8L3R5cGU+LAorICAgICAgICA8cGFyYW1ldGVyPnBvbGljeW5hbWU8L3BhcmFt ZXRlcj4gPHR5cGU+bmFtZTwvdHlwZT4KKyAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRlcj5w cmV0dHk8L3BhcmFtZXRlcj4gPHR5cGU+Ym9vbGVhbjwvdHlwZT4KKyAgICAgICAgPC9vcHRpb25h bD4gKQorICAgICAgICA8cmV0dXJudmFsdWU+c2V0b2YgdGV4dDwvcmV0dXJudmFsdWU+CisgICAg ICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZWNvbnN0cnVjdHMgdGhlIDxjb21t YW5kPkNSRUFURSBQT0xJQ1k8L2NvbW1hbmQ+IHN0YXRlbWVudCBmb3IgdGhlCisgICAgICAgIG5h bWVkIHJvdy1sZXZlbCBzZWN1cml0eSBwb2xpY3kgb24gdGhlIHNwZWNpZmllZCB0YWJsZS4gIFRo ZSByZXN1bHQKKyAgICAgICAgaXMgcmV0dXJuZWQgYXMgYSBzaW5nbGUgcm93LiAgSWYgPHBhcmFt ZXRlcj5wcmV0dHk8L3BhcmFtZXRlcj4gaXMKKyAgICAgICAgdHJ1ZSwgdGhlIG91dHB1dCBpcyBm b3JtYXR0ZWQgZm9yIHJlYWRhYmlsaXR5OyB0aGUgZGVmYXVsdCBpcyBmYWxzZS4KKyAgICAgICA8 L3BhcmE+PC9lbnRyeT4KKyAgICAgIDwvcm93PgogICAgICA8L3Rib2R5PgogICAgIDwvdGdyb3Vw PgogICAgPC90YWJsZT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGls cy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMKaW5kZXggYTcwZjFjMjg2NTUu LjJhZGEwZTI1ZmRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMu YworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYwpAQCAtMjYsNiArMjYsNyBA QAogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19kYXRhYmFzZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGJfcm9sZV9zZXR0aW5nLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19wb2xpY3kuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3RhYmxl c3BhY2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCiAjaW5jbHVkZSAiY29t bW9uL3JlbHBhdGguaCIKQEAgLTU2LDYgKzU3LDkgQEAgc3RhdGljIExpc3QgKnBnX2dldF90YWJs ZXNwYWNlX2RkbF9pbnRlcm5hbChPaWQgdHNpZCwgYm9vbCBwcmV0dHksIGJvb2wgbm9fb3duZXIK IHN0YXRpYyBEYXR1bSBwZ19nZXRfdGFibGVzcGFjZV9kZGxfc3JmKEZ1bmN0aW9uQ2FsbEluZm8g ZmNpbmZvLCBPaWQgdHNpZCk7CiBzdGF0aWMgTGlzdCAqcGdfZ2V0X2RhdGFiYXNlX2RkbF9pbnRl cm5hbChPaWQgZGJpZCwgYm9vbCBwcmV0dHksCiAJCQkJCQkJCQkJICBib29sIG5vX293bmVyLCBi b29sIG5vX3RhYmxlc3BhY2UpOworc3RhdGljIExpc3QgKnBnX2dldF9wb2xpY3lfZGRsX2ludGVy bmFsKE9pZCB0YWJsZUlELCBjb25zdCBjaGFyICpwb2xpY3lOYW1lLAorCQkJCQkJCQkJCWJvb2wg cHJldHR5KTsKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfcG9saWN5X2NtZF9uYW1lKGNoYXIgY21k KTsKIAogCiAvKgpAQCAtOTc1LDMgKzk3OSwyNzMgQEAgcGdfZ2V0X2RhdGFiYXNlX2RkbChQR19G VU5DVElPTl9BUkdTKQogCQlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CiAJfQogfQorCisvKgor ICogZ2V0X3BvbGljeV9jbWRfbmFtZQorICoJCU1hcCBhIG5vbi1BTEwgcGdfcG9saWN5LnBvbGNt ZCBjaGFyIHRvIGl0cyBTUUwga2V5d29yZC4KKyAqCisgKiBDYWxsZXJzIG11c3QgZ3VhcmQgYWdh aW5zdCAnKicgKEFMTCkgdGhlbXNlbHZlczsgaXQgaXMgbm90IHBhc3NlZCBoZXJlLgorICovCitz dGF0aWMgY29uc3QgY2hhciAqCitnZXRfcG9saWN5X2NtZF9uYW1lKGNoYXIgY21kKQoreworCXN3 aXRjaCAoY21kKQorCXsKKwkJY2FzZSBBQ0xfU0VMRUNUX0NIUjoKKwkJCXJldHVybiAiU0VMRUNU IjsKKwkJY2FzZSBBQ0xfSU5TRVJUX0NIUjoKKwkJCXJldHVybiAiSU5TRVJUIjsKKwkJY2FzZSBB Q0xfVVBEQVRFX0NIUjoKKwkJCXJldHVybiAiVVBEQVRFIjsKKwkJY2FzZSBBQ0xfREVMRVRFX0NI UjoKKwkJCXJldHVybiAiREVMRVRFIjsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnJl Y29nbml6ZWQgcG9saWN5IGNvbW1hbmQ6ICVkIiwgKGludCkgY21kKTsKKwkJCXJldHVybiBOVUxM OwkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworCX0KK30KKworLyoKKyAqIHBnX2dldF9wb2xp Y3lfZGRsX2ludGVybmFsCisgKgkJR2VuZXJhdGUgdGhlIERETCBzdGF0ZW1lbnQgdG8gcmVjcmVh dGUgYSByb3ctbGV2ZWwgc2VjdXJpdHkgcG9saWN5LgorICoKKyAqIFJldHVybnMgYSBMaXN0IGNv bnRhaW5pbmcgYSBzaW5nbGUgcGFsbG9jJ2Qgc3RyaW5nIHdpdGggdGhlIENSRUFURSBQT0xJQ1kK KyAqIHN0YXRlbWVudC4gIFJldHVybmluZyBhIExpc3Qga2VlcHMgdGhlIGNhbGxpbmcgY29udmVu dGlvbiBjb25zaXN0ZW50IHdpdGgKKyAqIHRoZSByZXN0IG9mIHRoZSBwZ19nZXRfKl9kZGwgZmFt aWx5IGV2ZW4gdGhvdWdoIG9ubHkgb25lIHJvdyBpcyBwcm9kdWNlZC4KKyAqLworc3RhdGljIExp c3QgKgorcGdfZ2V0X3BvbGljeV9kZGxfaW50ZXJuYWwoT2lkIHRhYmxlSUQsIGNvbnN0IGNoYXIg KnBvbGljeU5hbWUsIGJvb2wgcHJldHR5KQoreworCVJlbGF0aW9uCXBnUG9saWN5UmVsOworCUhl YXBUdXBsZQl0dXBsZVBvbGljeTsKKwlGb3JtX3BnX3BvbGljeSBwb2xpY3lGb3JtOworCVNjYW5L ZXlEYXRhIHNrZXlbMl07CisJU3lzU2NhbkRlc2Mgc3NjYW47CisJU3RyaW5nSW5mb0RhdGEgYnVm OworCURhdHVtCQl2YWx1ZURhdHVtOworCWJvb2wJCWF0dHJJc051bGw7CisJY2hhcgkgICAqcmVs bmFtZTsKKwljaGFyCSAgICpuc3BuYW1lOworCWNoYXIJICAgKnRhcmdldFRhYmxlOworCWludAkJ CXNhdmVfbmVzdGxldmVsOworCUxpc3QJICAgKnN0YXRlbWVudHMgPSBOSUw7CisKKwkvKiBWYWxp ZGF0ZSB0aGF0IHRoZSByZWxhdGlvbiBleGlzdHMgYW5kIGJ1aWxkIGl0cyBxdWFsaWZpZWQgbmFt ZS4gKi8KKwlyZWxuYW1lID0gZ2V0X3JlbF9uYW1lKHRhYmxlSUQpOworCWlmIChyZWxuYW1lID09 IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURf VEFCTEUpLAorCQkJCSBlcnJtc2coInJlbGF0aW9uIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0 IiwgdGFibGVJRCkpKTsKKworCW5zcG5hbWUgPSBnZXRfbmFtZXNwYWNlX25hbWUoZ2V0X3JlbF9u YW1lc3BhY2UodGFibGVJRCkpOworCWlmIChuc3BuYW1lID09IE5VTEwpCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfU0NIRU1BKSwKKwkJCQkgZXJybXNn KCJzY2hlbWEgZm9yIHJlbGF0aW9uIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJ CXRhYmxlSUQpKSk7CisKKwl0YXJnZXRUYWJsZSA9IHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVy KG5zcG5hbWUsIHJlbG5hbWUpOworCXBmcmVlKHJlbG5hbWUpOworCXBmcmVlKG5zcG5hbWUpOwor CisJcGdQb2xpY3lSZWwgPSB0YWJsZV9vcGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJl TG9jayk7CisKKwkvKiBTZXQga2V5IC0gcG9saWN5J3MgcmVsYXRpb24gaWQuICovCisJU2Nhbktl eUluaXQoJnNrZXlbMF0sCisJCQkJQW51bV9wZ19wb2xpY3lfcG9scmVsaWQsCisJCQkJQlRFcXVh bFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0odGFibGVJRCkp OworCisJLyogU2V0IGtleSAtIHBvbGljeSdzIG5hbWUuICovCisJU2NhbktleUluaXQoJnNrZXlb MV0sCisJCQkJQW51bV9wZ19wb2xpY3lfcG9sbmFtZSwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1i ZXIsIEZfTkFNRUVRLAorCQkJCUNTdHJpbmdHZXREYXR1bShwb2xpY3lOYW1lKSk7CisKKwlzc2Nh biA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ1BvbGljeVJlbCwKKwkJCQkJCQkgICBQb2xpY3lQb2xy ZWxpZFBvbG5hbWVJbmRleElkLCB0cnVlLCBOVUxMLCAyLAorCQkJCQkJCSAgIHNrZXkpOworCisJ dHVwbGVQb2xpY3kgPSBzeXN0YWJsZV9nZXRuZXh0KHNzY2FuKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQodHVwbGVQb2xpY3kpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNP REVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJIGVycm1zZygicG9saWN5IFwiJXNcIiBmb3IgdGFi bGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJCXBvbGljeU5hbWUsIHRhcmdldFRhYmxl KSkpOworCisJcG9saWN5Rm9ybSA9IChGb3JtX3BnX3BvbGljeSkgR0VUU1RSVUNUKHR1cGxlUG9s aWN5KTsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCisJLyogQnVpbGQgdGhlIENSRUFURSBQ T0xJQ1kgc3RhdGVtZW50ICovCisJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiQ1JFQVRFIFBPTElD WSAlcyBPTiAlcyIsCisJCQkJCSBxdW90ZV9pZGVudGlmaWVyKHBvbGljeU5hbWUpLAorCQkJCQkg dGFyZ2V0VGFibGUpOworCXBmcmVlKHRhcmdldFRhYmxlKTsKKworCS8qCisJICogRW1pdCBBUyBS RVNUUklDVElWRSBvbmx5IHdoZW4gaXQgZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0IChQRVJNSVNT SVZFKS4KKwkgKi8KKwlpZiAoIXBvbGljeUZvcm0tPnBvbHBlcm1pc3NpdmUpCisJCWFwcGVuZF9k ZGxfb3B0aW9uKCZidWYsIHByZXR0eSwgNCwgIkFTIFJFU1RSSUNUSVZFIik7CisKKwkvKgorCSAq IEVtaXQgRk9SIDxjbWQ+IG9ubHkgd2hlbiBpdCBkaWZmZXJzIGZyb20gdGhlIGRlZmF1bHQgKEFM TCwgZW5jb2RlZCBhcworCSAqICcqJykuCisJICovCisJaWYgKHBvbGljeUZvcm0tPnBvbGNtZCAh PSAnKicpCisJCWFwcGVuZF9kZGxfb3B0aW9uKCZidWYsIHByZXR0eSwgNCwgIkZPUiAlcyIsCisJ CQkJCQkgIGdldF9wb2xpY3lfY21kX25hbWUocG9saWN5Rm9ybS0+cG9sY21kKSk7CisKKwkvKgor CSAqIEVtaXQgVE8gPHJvbGVzPiBvbmx5IHdoZW4gaXQgZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0 IChQVUJMSUMpLiAgUFVCTElDCisJICogaXMgZW5jb2RlZCBpbiBwb2xyb2xlcyBhcyBhIHNpbmds ZSBJbnZhbGlkT2lkIGVsZW1lbnQsIHNvIHdlIG9taXQgdGhlCisJICogY2xhdXNlIHdoZW5ldmVy IGV2ZXJ5IGVudHJ5IGlzIEludmFsaWRPaWQuICBwb2xyb2xlcyBpcyBhbHdheXMgbm9uLU5VTEwu CisJICovCisJdmFsdWVEYXR1bSA9IGhlYXBfZ2V0YXR0cih0dXBsZVBvbGljeSwKKwkJCQkJCQkg IEFudW1fcGdfcG9saWN5X3BvbHJvbGVzLAorCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwZ1Bv bGljeVJlbCksCisJCQkJCQkJICAmYXR0cklzTnVsbCk7CisJQXNzZXJ0KCFhdHRySXNOdWxsKTsK Kwl7CisJCUFycmF5VHlwZSAgKnBvbGljeV9yb2xlcyA9IERhdHVtR2V0QXJyYXlUeXBlUCh2YWx1 ZURhdHVtKTsKKwkJaW50CQkJbml0ZW1zID0gQVJSX0RJTVMocG9saWN5X3JvbGVzKVswXTsKKwkJ T2lkCQkgICAqcm9sZXMgPSAoT2lkICopIEFSUl9EQVRBX1BUUihwb2xpY3lfcm9sZXMpOworCQlT dHJpbmdJbmZvRGF0YSByb2xlX25hbWVzOworCisJCWluaXRTdHJpbmdJbmZvKCZyb2xlX25hbWVz KTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IG5pdGVtczsgaSsrKQorCQl7CisJCQlpZiAoT2lk SXNWYWxpZChyb2xlc1tpXSkpCisJCQl7CisJCQkJY2hhcgkgICAqcm9sZW5hbWUgPSBHZXRVc2Vy TmFtZUZyb21JZChyb2xlc1tpXSwgZmFsc2UpOworCisJCQkJaWYgKHJvbGVfbmFtZXMubGVuID4g MCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcm9sZV9uYW1lcywgIiwgIik7CisJCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcm9sZV9uYW1lcywgcXVvdGVfaWRlbnRpZmllcihyb2xl bmFtZSkpOworCQkJCXBmcmVlKHJvbGVuYW1lKTsKKwkJCX0KKwkJfQorCisJCWlmIChyb2xlX25h bWVzLmxlbiA+IDApCisJCQlhcHBlbmRfZGRsX29wdGlvbigmYnVmLCBwcmV0dHksIDQsICJUTyAl cyIsIHJvbGVfbmFtZXMuZGF0YSk7CisKKwkJcGZyZWUocm9sZV9uYW1lcy5kYXRhKTsKKwl9CisK KwkvKgorCSAqIERlcGFyc2UgVVNJTkcgYW5kIFdJVEggQ0hFQ0sgZXhwcmVzc2lvbnMgdW5kZXIg YW4gZW1wdHkgc2VhcmNoX3BhdGggc28KKwkgKiB0aGF0IGFsbCBvYmplY3QgcmVmZXJlbmNlcyBh cmUgZnVsbHkgc2NoZW1hLXF1YWxpZmllZC4gIFRoaXMgbWFrZXMgdGhlCisJICogcmVjb25zdHJ1 Y3RlZCBEREwgcG9ydGFibGUgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGVyJ3Mgc2VhcmNoX3BhdGgK KwkgKiBzZXR0aW5nLCBjb25zaXN0ZW50IHdpdGggaG93IHBnX2R1bXAgaGFuZGxlcyBwZ19nZXRf dmlld2RlZiBhbmQgc2ltaWxhcgorCSAqIGZ1bmN0aW9ucy4KKwkgKi8KKwlzYXZlX25lc3RsZXZl bCA9IE5ld0dVQ05lc3RMZXZlbCgpOworCSh2b2lkKSBzZXRfY29uZmlnX29wdGlvbigic2VhcmNo X3BhdGgiLCAiIiwKKwkJCQkJCQkgUEdDX1VTRVJTRVQsIFBHQ19TX1NFU1NJT04sCisJCQkJCQkJ IEdVQ19BQ1RJT05fU0FWRSwgdHJ1ZSwgMCwgZmFsc2UpOworCisJLyogVVNJTkcgZXhwcmVzc2lv biAqLworCXZhbHVlRGF0dW0gPSBoZWFwX2dldGF0dHIodHVwbGVQb2xpY3ksCisJCQkJCQkJICBB bnVtX3BnX3BvbGljeV9wb2xxdWFsLAorCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwZ1BvbGlj eVJlbCksCisJCQkJCQkJICAmYXR0cklzTnVsbCk7CisJaWYgKCFhdHRySXNOdWxsKQorCXsKKwkJ RGF0dW0JCWV4cHI7CisKKwkJZXhwciA9IERpcmVjdEZ1bmN0aW9uQ2FsbDMocGdfZ2V0X2V4cHJf ZXh0LAorCQkJCQkJCQkgICB2YWx1ZURhdHVtLAorCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVt KHBvbGljeUZvcm0tPnBvbHJlbGlkKSwKKwkJCQkJCQkJICAgQm9vbEdldERhdHVtKHByZXR0eSkp OworCQlhcHBlbmRfZGRsX29wdGlvbigmYnVmLCBwcmV0dHksIDQsICJVU0lORyAoJXMpIiwKKwkJ CQkJCSAgVGV4dERhdHVtR2V0Q1N0cmluZyhleHByKSk7CisJfQorCisJLyogV0lUSCBDSEVDSyBl eHByZXNzaW9uICovCisJdmFsdWVEYXR1bSA9IGhlYXBfZ2V0YXR0cih0dXBsZVBvbGljeSwKKwkJ CQkJCQkgIEFudW1fcGdfcG9saWN5X3BvbHdpdGhjaGVjaywKKwkJCQkJCQkgIFJlbGF0aW9uR2V0 RGVzY3IocGdQb2xpY3lSZWwpLAorCQkJCQkJCSAgJmF0dHJJc051bGwpOworCWlmICghYXR0cklz TnVsbCkKKwl7CisJCURhdHVtCQlleHByOworCisJCWV4cHIgPSBEaXJlY3RGdW5jdGlvbkNhbGwz KHBnX2dldF9leHByX2V4dCwKKwkJCQkJCQkJICAgdmFsdWVEYXR1bSwKKwkJCQkJCQkJICAgT2Jq ZWN0SWRHZXREYXR1bShwb2xpY3lGb3JtLT5wb2xyZWxpZCksCisJCQkJCQkJCSAgIEJvb2xHZXRE YXR1bShwcmV0dHkpKTsKKwkJYXBwZW5kX2RkbF9vcHRpb24oJmJ1ZiwgcHJldHR5LCA0LCAiV0lU SCBDSEVDSyAoJXMpIiwKKwkJCQkJCSAgVGV4dERhdHVtR2V0Q1N0cmluZyhleHByKSk7CisJfQor CisJQXRFT1hhY3RfR1VDKGZhbHNlLCBzYXZlX25lc3RsZXZlbCk7CisKKwlhcHBlbmRTdHJpbmdJ bmZvQ2hhcigmYnVmLCAnOycpOworCisJc3RhdGVtZW50cyA9IGxhcHBlbmQoc3RhdGVtZW50cywg cHN0cmR1cChidWYuZGF0YSkpOworCisJc3lzdGFibGVfZW5kc2Nhbihzc2Nhbik7CisJdGFibGVf Y2xvc2UocGdQb2xpY3lSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJcGZyZWUoYnVmLmRhdGEpOwor CisJcmV0dXJuIHN0YXRlbWVudHM7Cit9CisKKy8qCisgKiBwZ19nZXRfcG9saWN5X2RkbAorICoJ CVJldHVybiBEREwgdG8gcmVjcmVhdGUgYSByb3ctbGV2ZWwgc2VjdXJpdHkgcG9saWN5IGFzIGEg c2luZ2xlIHRleHQgcm93LgorICovCitEYXR1bQorcGdfZ2V0X3BvbGljeV9kZGwoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlGdW5jQ2FsbENvbnRleHQgKmZ1bmNjdHg7CisJTGlzdAkgICAqc3RhdGVt ZW50czsKKworCWlmIChTUkZfSVNfRklSU1RDQUxMKCkpCisJeworCQlNZW1vcnlDb250ZXh0IG9s ZGNvbnRleHQ7CisJCU9pZAkJCXRhYmxlSUQ7CisJCU5hbWUJCXBvbGljeU5hbWU7CisJCWJvb2wJ CXByZXR0eTsKKworCQlmdW5jY3R4ID0gU1JGX0ZJUlNUQ0FMTF9JTklUKCk7CisJCW9sZGNvbnRl eHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0eC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4 KTsKKworCQlpZiAoUEdfQVJHSVNOVUxMKDApIHx8IFBHX0FSR0lTTlVMTCgxKSkKKwkJeworCQkJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCQkJU1JGX1JFVFVSTl9ET05FKGZ1 bmNjdHgpOworCQl9CisKKwkJdGFibGVJRCA9IFBHX0dFVEFSR19PSUQoMCk7CisJCXBvbGljeU5h bWUgPSBQR19HRVRBUkdfTkFNRSgxKTsKKwkJcHJldHR5ID0gIVBHX0FSR0lTTlVMTCgyKSAmJiBQ R19HRVRBUkdfQk9PTCgyKTsKKworCQlzdGF0ZW1lbnRzID0gcGdfZ2V0X3BvbGljeV9kZGxfaW50 ZXJuYWwodGFibGVJRCwKKwkJCQkJCQkJCQkJCU5hbWVTdHIoKnBvbGljeU5hbWUpLAorCQkJCQkJ CQkJCQkJcHJldHR5KTsKKwkJZnVuY2N0eC0+dXNlcl9mY3R4ID0gc3RhdGVtZW50czsKKwkJZnVu Y2N0eC0+bWF4X2NhbGxzID0gbGlzdF9sZW5ndGgoc3RhdGVtZW50cyk7CisKKwkJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKworCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9T RVRVUCgpOworCXN0YXRlbWVudHMgPSAoTGlzdCAqKSBmdW5jY3R4LT51c2VyX2ZjdHg7CisKKwlp ZiAoZnVuY2N0eC0+Y2FsbF9jbnRyIDwgZnVuY2N0eC0+bWF4X2NhbGxzKQorCXsKKwkJY2hhcgkg ICAqc3RtdDsKKworCQlzdG10ID0gbGlzdF9udGgoc3RhdGVtZW50cywgZnVuY2N0eC0+Y2FsbF9j bnRyKTsKKworCQlTUkZfUkVUVVJOX05FWFQoZnVuY2N0eCwgQ1N0cmluZ0dldFRleHREYXR1bShz dG10KSk7CisJfQorCWVsc2UKKwl7CisJCWxpc3RfZnJlZV9kZWVwKHN0YXRlbWVudHMpOworCQlT UkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5k ZXggM2NiODQzNTlhZGYuLmNkMDI5YjQ4M2YxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAg LTg2MzQsNiArODYzNCwxMiBAQAogICBwcm9hcmd0eXBlcyA9PiAncmVnZGF0YWJhc2UgYm9vbCBi b29sIGJvb2wnLAogICBwcm9hcmduYW1lcyA9PiAne2RhdGFiYXNlLHByZXR0eSxvd25lcix0YWJs ZXNwYWNlfScsCiAgIHByb2FyZ2RlZmF1bHRzID0+ICd7ZmFsc2UsdHJ1ZSx0cnVlfScsIHByb3Ny YyA9PiAncGdfZ2V0X2RhdGFiYXNlX2RkbCcgfSwKK3sgb2lkID0+ICc5NjgzJywgZGVzY3IgPT4g J2dldCBEREwgdG8gcmVjcmVhdGUgYSByb3ctbGV2ZWwgc2VjdXJpdHkgcG9saWN5JywKKyAgcHJv bmFtZSA9PiAncGdfZ2V0X3BvbGljeV9kZGwnLCBwcm9yb3dzID0+ICcxJywgcHJvaXNzdHJpY3Qg PT4gJ2YnLAorICBwcm9yZXRzZXQgPT4gJ3QnLCBwcm92b2xhdGlsZSA9PiAncycsIHByb25hcmdk ZWZhdWx0cyA9PiAnMScsCisgIHByb3JldHR5cGUgPT4gJ3RleHQnLCBwcm9hcmd0eXBlcyA9PiAn cmVnY2xhc3MgbmFtZSBib29sJywKKyAgcHJvYXJnbmFtZXMgPT4gJ3t0YWJsZSxwb2xpY3luYW1l LHByZXR0eX0nLCBwcm9hcmdkZWZhdWx0cyA9PiAne2ZhbHNlfScsCisgIHByb3NyYyA9PiAncGdf Z2V0X3BvbGljeV9kZGwnIH0sCiB7IG9pZCA9PiAnMjUwOScsCiAgIGRlc2NyID0+ICdkZXBhcnNl IGFuIGVuY29kZWQgZXhwcmVzc2lvbiB3aXRoIHByZXR0eS1wcmludCBvcHRpb24nLAogICBwcm9u YW1lID0+ICdwZ19nZXRfZXhwcicsIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcmV0dHlwZSA9PiAn dGV4dCcsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jvd3NlY3VyaXR5 Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcm93c2VjdXJpdHkub3V0CmluZGV4IDNh NWU4MmMzNWJkLi5kYTE3NGVlYWRiZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9yb3dzZWN1cml0eS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9yb3dz ZWN1cml0eS5vdXQKQEAgLTUxOTUsNiArNTE5NSwzMjEgQEAgcmVzZXQgcmxzX3Rlc3QuYmxhaDsK IGRyb3AgZnVuY3Rpb24gcmxzX2YodGV4dCk7CiBkcm9wIHRhYmxlIHJsc190LCB0ZXN0X3Q7CiAt LQorLS0gVGVzdCBmb3IgcGdfZ2V0X3BvbGljeV9kZGwodGFibGUsIHBvbGljeV9uYW1lWywgcHJl dHR5XSkgZnVuY3Rpb24uCistLQorQ1JFQVRFIFRBQkxFIHJsc190YmxfMSAoCisgICAgZGlkICAg ICAgICAgaW50IHByaW1hcnkga2V5LAorICAgIGNpZCAgICAgICAgIGludCwKKyAgICBkbGV2ZWwg ICAgICBpbnQgbm90IG51bGwsCisgICAgZGF1dGhvciAgICAgbmFtZSwKKyAgICBkdGl0bGUgICAg ICB0ZXh0CispOworR1JBTlQgQUxMIE9OIHJsc190YmxfMSBUTyBwdWJsaWM7CitDUkVBVEUgVEFC TEUgcmxzX3RibF8yICgKKyAgICBwZ3VzZXIgICAgICBuYW1lIHByaW1hcnkga2V5LAorICAgIHNl Y2x2ICAgICAgIGludAorKTsKK0dSQU5UIFNFTEVDVCBPTiBybHNfdGJsXzIgVE8gcHVibGljOwor LS0gVGVzdCBQRVJNSVNTSVZFIGFuZCBSRVNUUklDVElWRQorQ1JFQVRFIFBPTElDWSBybHNfcDEg T04gcmxzX3RibF8xIEFTIFBFUk1JU1NJVkUKKyAgICBVU0lORyAoZGxldmVsIDw9IChTRUxFQ1Qg c2VjbHYgRlJPTSBybHNfdGJsXzIgV0hFUkUgcGd1c2VyID0gY3VycmVudF91c2VyKSk7CitDUkVB VEUgUE9MSUNZIHJsc19wMiBPTiBybHNfdGJsXzEgQVMgUkVTVFJJQ1RJVkUgVVNJTkcgKGNpZCA8 PiA0NCBBTkQgY2lkIDwgNTApOworLS0gVGVzdCBGT1IgQUxMIHwgU0VMRUNUIHwgSU5TRVJUIHwg VVBEQVRFIHwgREVMRVRFCitDUkVBVEUgUE9MSUNZIHJsc19wMyBPTiBybHNfdGJsXzEgRk9SIEFM TCBVU0lORyAoZGF1dGhvciA9IGN1cnJlbnRfdXNlcik7CitDUkVBVEUgUE9MSUNZIHJsc19wNCBP TiBybHNfdGJsXzEgRk9SIFNFTEVDVCBVU0lORyAoY2lkICUgMiA9IDApOworQ1JFQVRFIFBPTElD WSBybHNfcDUgT04gcmxzX3RibF8xIEZPUiBJTlNFUlQgV0lUSCBDSEVDSyAoY2lkICUgMiA9IDEp OworQ1JFQVRFIFBPTElDWSBybHNfcDYgT04gcmxzX3RibF8xIEZPUiBVUERBVEUgVVNJTkcgKGNp ZCAlIDIgPSAwKTsKK0NSRUFURSBQT0xJQ1kgcmxzX3A3IE9OIHJsc190YmxfMSBGT1IgREVMRVRF IFVTSU5HIChjaWQgPCA4KTsKKy0tIFRlc3QgVE8geyByb2xlX25hbWUgLi4uIH0KK0NSRUFURSBQ T0xJQ1kgcmxzX3A4IE9OIHJsc190YmxfMSBUTyByZWdyZXNzX3Jsc19kYXZlLCByZWdyZXNzX3Js c19hbGljZSBVU0lORyAodHJ1ZSk7CitDUkVBVEUgUE9MSUNZIHJsc19wOSBPTiBybHNfdGJsXzEg VE8gcmVncmVzc19ybHNfZXhlbXB0X3VzZXIgV0lUSCBDSEVDSyAoY2lkID0gKFNFTEVDVCBzZWNs diBGUk9NIHJsc190YmxfMikpOworLS0gVGVzdCBVUERBVEUgcG9saWN5IHdpdGggYm90aCBVU0lO RyBhbmQgV0lUSCBDSEVDSworQ1JFQVRFIFBPTElDWSBybHNfcDEwIE9OIHJsc190YmxfMSBGT1Ig VVBEQVRFCisgICAgVVNJTkcgKGRsZXZlbCA+IDApIFdJVEggQ0hFQ0sgKGRsZXZlbCA8IDEwMCk7 CistLSBUZXN0IEFMTCBwb2xpY3kgd2l0aCBib3RoIFVTSU5HIGFuZCBXSVRIIENIRUNLIChBUyBQ RVJNSVNTSVZFIGFuZCBGT1IgQUxMIGFyZSBkZWZhdWx0cywgb21pdHRlZCkKK0NSRUFURSBQT0xJ Q1kgcmxzX3AxMSBPTiBybHNfdGJsXzEKKyAgICBVU0lORyAoZGxldmVsID49IDEpIFdJVEggQ0hF Q0sgKGRsZXZlbCA8PSA5OSk7CistLSBUZXN0IFJFU1RSSUNUSVZFIG9uIGEgc3BlY2lmaWMgY29t bWFuZAorQ1JFQVRFIFBPTElDWSBybHNfcDEyIE9OIHJsc190YmxfMSBBUyBSRVNUUklDVElWRSBG T1IgU0VMRUNUCisgICAgVVNJTkcgKGNpZCA+IDApOworLS0gTlVMTCBpbnB1dHMgc2hvdWxkIHJl dHVybiBubyByb3dzCitTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19nZXRfcG9saWN5X2RkbChOVUxM LCAncmxzX3AxJyk7CisgY291bnQgCistLS0tLS0tCisgICAgIDAKKygxIHJvdykKKworU0VMRUNU IGNvdW50KCopIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsIE5VTEwpOworIGNv dW50IAorLS0tLS0tLQorICAgICAwCisoMSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHBn X2dldF9wb2xpY3lfZGRsKE5VTEwsIE5VTEwpOworIGNvdW50IAorLS0tLS0tLQorICAgICAwCiso MSByb3cpCisKKy0tIFRhYmxlIGRvZXMgbm90IGV4aXN0CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9w b2xpY3lfZGRsKCdub25leGlzdGVudF90YmwnLCAncmxzX3AxJyk7CitFUlJPUjogIHJlbGF0aW9u ICJub25leGlzdGVudF90YmwiIGRvZXMgbm90IGV4aXN0CitMSU5FIDE6IFNFTEVDVCAqIEZST00g cGdfZ2V0X3BvbGljeV9kZGwoJ25vbmV4aXN0ZW50X3RibCcsICdybHNfcDEnKS4uLgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy0tIFBvbGljeSBkb2VzIG5vdCBl eGlzdAorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ25vbmV4 aXN0ZW50X3BvbCcpOworRVJST1I6ICBwb2xpY3kgIm5vbmV4aXN0ZW50X3BvbCIgZm9yIHRhYmxl ICJyZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIiBkb2VzIG5vdCBleGlzdAorLS0gV2l0aG91 dCBwcmV0dHkgZm9ybWF0dGluZyAoZGVmYXVsdCk7IGFsc28gdmVyaWZ5IGV4cGxpY2l0IGZhbHNl IGVxdWFscyBkZWZhdWx0CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJs XzEnLCAncmxzX3AxJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGdfZ2V0X3BvbGljeV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFBPTElD WSBybHNfcDEgT04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMSBVU0lORyAoKGRsZXZlbCA8 PSAoIFNFTEVDVCBybHNfdGJsXzIuc2VjbHYrCisgICAgRlJPTSByZWdyZXNzX3Jsc19zY2hlbWEu cmxzX3RibF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICArCisgICBXSEVSRSAocmxzX3RibF8yLnBndXNlciA9IENVUlJFTlRfVVNFUikp KSk7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190Ymxf MScsICdybHNfcDInKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBnX2dldF9wb2xpY3lfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIENSRUFURSBQT0xJQ1kgcmxzX3AyIE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJs XzEgQVMgUkVTVFJJQ1RJVkUgVVNJTkcgKCgoY2lkIDw+IDQ0KSBBTkQgKGNpZCA8IDUwKSkpOwor KDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAn cmxzX3AzJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9wb2xp Y3lfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFBPTElDWSBybHNfcDMgT04gcmVncmVzc19ybHNf c2NoZW1hLnJsc190YmxfMSBVU0lORyAoKGRhdXRob3IgPSBDVVJSRU5UX1VTRVIpKTsKKygxIHJv dykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19w NCcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3BvbGljeV9k ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgUE9MSUNZIHJsc19wNCBPTiByZWdyZXNzX3Jsc19z Y2hlbWEucmxzX3RibF8xIEZPUiBTRUxFQ1QgVVNJTkcgKCgoY2lkICUgMikgPSAwKSk7CisoMSBy b3cpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNf cDUnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9wb2xp Y3lfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBQT0xJQ1kgcmxzX3A1IE9OIHJl Z3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEgRk9SIElOU0VSVCBXSVRIIENIRUNLICgoKGNpZCAl IDIpID0gMSkpOworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdy bHNfdGJsXzEnLCAncmxzX3A2Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwZ19nZXRfcG9saWN5X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBQT0xJQ1kgcmxzX3A2 IE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEgRk9SIFVQREFURSBVU0lORyAoKChjaWQg JSAyKSA9IDApKTsKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgn cmxzX3RibF8xJywgJ3Jsc19wNycpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGdfZ2V0X3BvbGljeV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgUE9MSUNZIHJsc19wNyBPTiByZWdyZXNz X3Jsc19zY2hlbWEucmxzX3RibF8xIEZPUiBERUxFVEUgVVNJTkcgKChjaWQgPCA4KSk7CisoMSBy b3cpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNf cDgnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF9wb2xpY3lfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBQT0xJQ1kgcmxzX3A4IE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEgVE8gcmVn cmVzc19ybHNfZGF2ZSwgcmVncmVzc19ybHNfYWxpY2UgVVNJTkcgKHRydWUpOworKDEgcm93KQor CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A5Jyk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw Z19nZXRfcG9saWN5X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgUE9MSUNZIHJsc19wOSBPTiByZWdy ZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIFRPIHJlZ3Jlc3NfcmxzX2V4ZW1wdF91c2VyIFdJVEgg Q0hFQ0sgKChjaWQgPSAoIFNFTEVDVCBybHNfdGJsXzIuc2VjbHYrCisgICAgRlJPTSByZWdyZXNz X3Jsc19zY2hlbWEucmxzX3RibF8yKSkpOworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxMCcpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9wb2xpY3lfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFBP TElDWSBybHNfcDEwIE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEgRk9SIFVQREFURSBV U0lORyAoKGRsZXZlbCA+IDApKSBXSVRIIENIRUNLICgoZGxldmVsIDwgMTAwKSk7CisoMSByb3cp CisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDEx Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9w b2xpY3lfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRF IFBPTElDWSBybHNfcDExIE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEgVVNJTkcgKChk bGV2ZWwgPj0gMSkpIFdJVEggQ0hFQ0sgKChkbGV2ZWwgPD0gOTkpKTsKKygxIHJvdykKKworU0VM RUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMTInKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3BvbGljeV9kZGwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgUE9MSUNZIHJsc19wMTIgT04g cmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMSBBUyBSRVNUUklDVElWRSBGT1IgU0VMRUNUIFVT SU5HICgoY2lkID4gMCkpOworKDEgcm93KQorCistLSBFeHBsaWNpdCBmYWxzZSBtdXN0IG1hdGNo IG9taXR0aW5nIHRoZSBhcmd1bWVudAorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgn cmxzX3RibF8xJywgJ3Jsc19wMTAnLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3BvbGljeV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgUE9MSUNZIHJs c19wMTAgT04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMSBGT1IgVVBEQVRFIFVTSU5HICgo ZGxldmVsID4gMCkpIFdJVEggQ0hFQ0sgKChkbGV2ZWwgPCAxMDApKTsKKygxIHJvdykKKworLS0g TlVMTCBwcmV0dHkgbXVzdCBhbHNvIGRlZmF1bHQgdG8gbm9uLXByZXR0eQorU0VMRUNUICogRlJP TSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMTAnLCBOVUxMKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfcG9saWN5 X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBQT0xJQ1kgcmxzX3AxMCBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8x IEZPUiBVUERBVEUgVVNJTkcgKChkbGV2ZWwgPiAwKSkgV0lUSCBDSEVDSyAoKGRsZXZlbCA8IDEw MCkpOworKDEgcm93KQorCistLSBwcmV0dHkgYWNjZXB0cyBhbGwgc3RhbmRhcmQgYm9vbGVhbiBy ZXByZXNlbnRhdGlvbnM6IHRydWUvZmFsc2UsIG9uL29mZiwgMS8wCitccHNldCBmb3JtYXQgdW5h bGlnbmVkCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxz X3AzJywgJ29uJzo6Ym9vbCk7CitwZ19nZXRfcG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNf cDMgT04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMQorICAgIFVTSU5HIChkYXV0aG9yID0g Q1VSUkVOVF9VU0VSKTsKKygxIHJvdykKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwo J3Jsc190YmxfMScsICdybHNfcDMnLCAnMSc6OmJvb2wpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NS RUFURSBQT0xJQ1kgcmxzX3AzIE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEKKyAgICBV U0lORyAoZGF1dGhvciA9IENVUlJFTlRfVVNFUik7CisoMSByb3cpCitTRUxFQ1QgKiBGUk9NIHBn X2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AzJywgJ29mZic6OmJvb2wpOworcGdf Z2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3AzIE9OIHJlZ3Jlc3NfcmxzX3NjaGVt YS5ybHNfdGJsXzEgVVNJTkcgKChkYXV0aG9yID0gQ1VSUkVOVF9VU0VSKSk7CisoMSByb3cpCitT RUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AzJywgJzAn Ojpib29sKTsKK3BnX2dldF9wb2xpY3lfZGRsCitDUkVBVEUgUE9MSUNZIHJsc19wMyBPTiByZWdy ZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIFVTSU5HICgoZGF1dGhvciA9IENVUlJFTlRfVVNFUikp OworKDEgcm93KQorXHBzZXQgZm9ybWF0IGFsaWduZWQKKy0tIFdpdGggcHJldHR5IGZvcm1hdHRp bmcKK1xwc2V0IGZvcm1hdCB1bmFsaWduZWQKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9k ZGwoJ3Jsc190YmxfMScsICdybHNfcDEnLCB0cnVlKTsKK3BnX2dldF9wb2xpY3lfZGRsCitDUkVB VEUgUE9MSUNZIHJsc19wMSBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xCisgICAgVVNJ TkcgKGRsZXZlbCA8PSAoKCBTRUxFQ1QgcmxzX3RibF8yLnNlY2x2CisgICBGUk9NIHJlZ3Jlc3Nf cmxzX3NjaGVtYS5ybHNfdGJsXzIKKyAgV0hFUkUgcmxzX3RibF8yLnBndXNlciA9IENVUlJFTlRf VVNFUikpKTsKKygxIHJvdykKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190 YmxfMScsICdybHNfcDInLCB0cnVlKTsKK3BnX2dldF9wb2xpY3lfZGRsCitDUkVBVEUgUE9MSUNZ IHJsc19wMiBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xCisgICAgQVMgUkVTVFJJQ1RJ VkUKKyAgICBVU0lORyAoY2lkIDw+IDQ0IEFORCBjaWQgPCA1MCk7CisoMSByb3cpCitTRUxFQ1Qg KiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AzJywgdHJ1ZSk7Citw Z19nZXRfcG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNfcDMgT04gcmVncmVzc19ybHNfc2No ZW1hLnJsc190YmxfMQorICAgIFVTSU5HIChkYXV0aG9yID0gQ1VSUkVOVF9VU0VSKTsKKygxIHJv dykKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDQn LCB0cnVlKTsKK3BnX2dldF9wb2xpY3lfZGRsCitDUkVBVEUgUE9MSUNZIHJsc19wNCBPTiByZWdy ZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xCisgICAgRk9SIFNFTEVDVAorICAgIFVTSU5HICgoY2lk ICUgMikgPSAwKTsKKygxIHJvdykKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Js c190YmxfMScsICdybHNfcDUnLCB0cnVlKTsKK3BnX2dldF9wb2xpY3lfZGRsCitDUkVBVEUgUE9M SUNZIHJsc19wNSBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xCisgICAgRk9SIElOU0VS VAorICAgIFdJVEggQ0hFQ0sgKChjaWQgJSAyKSA9IDEpOworKDEgcm93KQorU0VMRUNUICogRlJP TSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNicsIHRydWUpOworcGdfZ2V0 X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3A2IE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5y bHNfdGJsXzEKKyAgICBGT1IgVVBEQVRFCisgICAgVVNJTkcgKChjaWQgJSAyKSA9IDApOworKDEg cm93KQorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19w NycsIHRydWUpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3A3IE9OIHJl Z3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEKKyAgICBGT1IgREVMRVRFCisgICAgVVNJTkcgKGNp ZCA8IDgpOworKDEgcm93KQorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3Ri bF8xJywgJ3Jsc19wOCcsIHRydWUpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kg cmxzX3A4IE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEKKyAgICBUTyByZWdyZXNzX3Js c19kYXZlLCByZWdyZXNzX3Jsc19hbGljZQorICAgIFVTSU5HICh0cnVlKTsKKygxIHJvdykKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDknLCB0cnVl KTsKK3BnX2dldF9wb2xpY3lfZGRsCitDUkVBVEUgUE9MSUNZIHJsc19wOSBPTiByZWdyZXNzX3Js c19zY2hlbWEucmxzX3RibF8xCisgICAgVE8gcmVncmVzc19ybHNfZXhlbXB0X3VzZXIKKyAgICBX SVRIIENIRUNLIChjaWQgPSAoKCBTRUxFQ1QgcmxzX3RibF8yLnNlY2x2CisgICBGUk9NIHJlZ3Jl c3NfcmxzX3NjaGVtYS5ybHNfdGJsXzIpKSk7CisoMSByb3cpCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxMCcsIHRydWUpOworcGdfZ2V0X3BvbGlj eV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3AxMCBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3Ri bF8xCisgICAgRk9SIFVQREFURQorICAgIFVTSU5HIChkbGV2ZWwgPiAwKQorICAgIFdJVEggQ0hF Q0sgKGRsZXZlbCA8IDEwMCk7CisoMSByb3cpCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lf ZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxMScsIHRydWUpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NS RUFURSBQT0xJQ1kgcmxzX3AxMSBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xCisgICAg VVNJTkcgKGRsZXZlbCA+PSAxKQorICAgIFdJVEggQ0hFQ0sgKGRsZXZlbCA8PSA5OSk7CisoMSBy b3cpCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3Ax MicsIHRydWUpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3AxMiBPTiBy ZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xCisgICAgQVMgUkVTVFJJQ1RJVkUKKyAgICBGT1Ig U0VMRUNUCisgICAgVVNJTkcgKGNpZCA+IDApOworKDEgcm93KQorXHBzZXQgZm9ybWF0IGFsaWdu ZWQKKy0tIFJvdW5kLXRyaXA6IHRoZSBnZW5lcmF0ZWQgRERMIG11c3QgYmUgcmUtZXhlY3V0YWJs ZSwgaW5jbHVkaW5nIGZvciBhdG9taWMKKy0tIGJvb2xlYW4gZXhwcmVzc2lvbnMgdGhhdCBwZ19n ZXRfZXhwcigpIGRvZXMgbm90IHBhcmVudGhlc2l6ZS4KK0NSRUFURSBUQUJMRSBybHNfcnQgKGEg aW50KTsKK0NSRUFURSBQT0xJQ1kgcnRfdHJ1ZSBPTiBybHNfcnQgVVNJTkcgKHRydWUpOworQ1JF QVRFIFBPTElDWSBydF9mYWxzZSBPTiBybHNfcnQgRk9SIElOU0VSVCBXSVRIIENIRUNLIChmYWxz ZSk7CitDUkVBVEUgVEVNUCBUQUJMRSBydF9kZGwgQVMKKyAgICBTRUxFQ1QgcGdfZ2V0X3BvbGlj eV9kZGwoJ3Jsc19ydCcsICdydF90cnVlJykgQVMgZGRsCisgICAgVU5JT04gQUxMCisgICAgU0VM RUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfcnQnLCAncnRfZmFsc2UnKTsKK0RST1AgUE9MSUNZ IHJ0X3RydWUgT04gcmxzX3J0OworRFJPUCBQT0xJQ1kgcnRfZmFsc2UgT04gcmxzX3J0OworU0VM RUNUIGRkbCBGUk9NIHJ0X2RkbCBPUkRFUiBCWSBkZGwgXGdleGVjCitDUkVBVEUgUE9MSUNZIHJ0 X2ZhbHNlIE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfcnQgRk9SIElOU0VSVCBXSVRIIENIRUNL IChmYWxzZSk7CitDUkVBVEUgUE9MSUNZIHJ0X3RydWUgT04gcmVncmVzc19ybHNfc2NoZW1hLnJs c19ydCBVU0lORyAodHJ1ZSk7CitTRUxFQ1QgcG9sbmFtZSBGUk9NIHBnX3BvbGljeSBXSEVSRSBw b2xyZWxpZCA9ICdybHNfcnQnOjpyZWdjbGFzcyBPUkRFUiBCWSBwb2xuYW1lOworIHBvbG5hbWUg IAorLS0tLS0tLS0tLQorIHJ0X2ZhbHNlCisgcnRfdHJ1ZQorKDIgcm93cykKKworRFJPUCBUQUJM RSBybHNfcnQ7CistLSBTY2hlbWEtcXVhbGlmaWNhdGlvbjogZnVuY3Rpb24gcmVmZXJlbmNlcyBp biBleHByZXNzaW9ucyBtdXN0IGJlCistLSBmdWxseSBxdWFsaWZpZWQgcmVnYXJkbGVzcyBvZiB0 aGUgY2FsbGVyJ3Mgc2VhcmNoX3BhdGguCitDUkVBVEUgU0NIRU1BIHJsc19zMTsKK0NSRUFURSBT Q0hFTUEgcmxzX3MyOworQ1JFQVRFIEZVTkNUSU9OIHJsc19zMS5ybHNfZihpbnQpIFJFVFVSTlMg Ym9vbCBMQU5HVUFHRSBzcWwgQVMgJ1NFTEVDVCAkMSA+IDAnOworQ1JFQVRFIEZVTkNUSU9OIHJs c19zMi5ybHNfZihpbnQpIFJFVFVSTlMgYm9vbCBMQU5HVUFHRSBzcWwgQVMgJ1NFTEVDVCAkMSA8 IDAnOworQ1JFQVRFIFRBQkxFIHJsc190YmxfMyAoYSBpbnQpOworQ1JFQVRFIFBPTElDWSBybHNf cGYgT04gcmxzX3RibF8zIFVTSU5HIChybHNfczEucmxzX2YoYSkpOworLS0gV2l0aCBybHNfczEg aW4gcGF0aCwgcmxzX2Ygc2hvdWxkIHN0aWxsIGFwcGVhciBzY2hlbWEtcXVhbGlmaWVkIGluIERE TC4KK1NFVCBzZWFyY2hfcGF0aCA9IHJlZ3Jlc3NfcmxzX3NjaGVtYSwgcmxzX3MxOworXHBzZXQg Zm9ybWF0IHVuYWxpZ25lZAorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3Ri bF8zJywgJ3Jsc19wZicpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3Bm IE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzMgVVNJTkcgKHJsc19zMS5ybHNfZihhKSk7 CisoMSByb3cpCitccHNldCBmb3JtYXQgYWxpZ25lZAorLS0gUmVzdG9yZSB0aGUgdGVzdCdzIHNl YXJjaF9wYXRoIGJlZm9yZSBjbGVhbnVwLgorU0VUIHNlYXJjaF9wYXRoID0gcmVncmVzc19ybHNf c2NoZW1hOworRFJPUCBQT0xJQ1kgcmxzX3BmIE9OIHJsc190YmxfMzsKK0RST1AgVEFCTEUgcmxz X3RibF8zOworRFJPUCBGVU5DVElPTiBybHNfczEucmxzX2YoaW50KTsKK0RST1AgRlVOQ1RJT04g cmxzX3MyLnJsc19mKGludCk7CitEUk9QIFNDSEVNQSBybHNfczE7CitEUk9QIFNDSEVNQSBybHNf czI7CistLSBDbGVhbiB1cCBvYmplY3RzIGNyZWF0ZWQgZm9yIHRlc3RpbmcgcGdfZ2V0X3BvbGlj eV9kZGwgZnVuY3Rpb24uCitEUk9QIFBPTElDWSBybHNfcDEgT04gcmxzX3RibF8xOworRFJPUCBQ T0xJQ1kgcmxzX3AyIE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wMyBPTiBybHNfdGJs XzE7CitEUk9QIFBPTElDWSBybHNfcDQgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3A1 IE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wNiBPTiBybHNfdGJsXzE7CitEUk9QIFBP TElDWSBybHNfcDcgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3A4IE9OIHJsc190Ymxf MTsKK0RST1AgUE9MSUNZIHJsc19wOSBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDEw IE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wMTEgT04gcmxzX3RibF8xOworRFJPUCBQ T0xJQ1kgcmxzX3AxMiBPTiBybHNfdGJsXzE7CitEUk9QIFRBQkxFIHJsc190YmxfMTsKK0RST1Ag VEFCTEUgcmxzX3RibF8yOworLS0KIC0tIENsZWFuIHVwIG9iamVjdHMKIC0tCiBSRVNFVCBTRVNT SU9OIEFVVEhPUklaQVRJT047CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9yb3dz ZWN1cml0eS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9yb3dzZWN1cml0eS5zcWwKaW5kZXgg NmIzNTY2MjcxZGYuLmNkYzUwZDc0Y2RlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9yb3dzZWN1cml0eS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcm93c2VjdXJpdHku c3FsCkBAIC0yNTk4LDYgKzI1OTgsMTU2IEBAIHJlc2V0IHJsc190ZXN0LmJsYWg7CiBkcm9wIGZ1 bmN0aW9uIHJsc19mKHRleHQpOwogZHJvcCB0YWJsZSBybHNfdCwgdGVzdF90OwogCistLQorLS0g VGVzdCBmb3IgcGdfZ2V0X3BvbGljeV9kZGwodGFibGUsIHBvbGljeV9uYW1lWywgcHJldHR5XSkg ZnVuY3Rpb24uCistLQorQ1JFQVRFIFRBQkxFIHJsc190YmxfMSAoCisgICAgZGlkICAgICAgICAg aW50IHByaW1hcnkga2V5LAorICAgIGNpZCAgICAgICAgIGludCwKKyAgICBkbGV2ZWwgICAgICBp bnQgbm90IG51bGwsCisgICAgZGF1dGhvciAgICAgbmFtZSwKKyAgICBkdGl0bGUgICAgICB0ZXh0 CispOworR1JBTlQgQUxMIE9OIHJsc190YmxfMSBUTyBwdWJsaWM7CitDUkVBVEUgVEFCTEUgcmxz X3RibF8yICgKKyAgICBwZ3VzZXIgICAgICBuYW1lIHByaW1hcnkga2V5LAorICAgIHNlY2x2ICAg ICAgIGludAorKTsKK0dSQU5UIFNFTEVDVCBPTiBybHNfdGJsXzIgVE8gcHVibGljOworCistLSBU ZXN0IFBFUk1JU1NJVkUgYW5kIFJFU1RSSUNUSVZFCitDUkVBVEUgUE9MSUNZIHJsc19wMSBPTiBy bHNfdGJsXzEgQVMgUEVSTUlTU0lWRQorICAgIFVTSU5HIChkbGV2ZWwgPD0gKFNFTEVDVCBzZWNs diBGUk9NIHJsc190YmxfMiBXSEVSRSBwZ3VzZXIgPSBjdXJyZW50X3VzZXIpKTsKK0NSRUFURSBQ T0xJQ1kgcmxzX3AyIE9OIHJsc190YmxfMSBBUyBSRVNUUklDVElWRSBVU0lORyAoY2lkIDw+IDQ0 IEFORCBjaWQgPCA1MCk7CisKKy0tIFRlc3QgRk9SIEFMTCB8IFNFTEVDVCB8IElOU0VSVCB8IFVQ REFURSB8IERFTEVURQorQ1JFQVRFIFBPTElDWSBybHNfcDMgT04gcmxzX3RibF8xIEZPUiBBTEwg VVNJTkcgKGRhdXRob3IgPSBjdXJyZW50X3VzZXIpOworQ1JFQVRFIFBPTElDWSBybHNfcDQgT04g cmxzX3RibF8xIEZPUiBTRUxFQ1QgVVNJTkcgKGNpZCAlIDIgPSAwKTsKK0NSRUFURSBQT0xJQ1kg cmxzX3A1IE9OIHJsc190YmxfMSBGT1IgSU5TRVJUIFdJVEggQ0hFQ0sgKGNpZCAlIDIgPSAxKTsK K0NSRUFURSBQT0xJQ1kgcmxzX3A2IE9OIHJsc190YmxfMSBGT1IgVVBEQVRFIFVTSU5HIChjaWQg JSAyID0gMCk7CitDUkVBVEUgUE9MSUNZIHJsc19wNyBPTiBybHNfdGJsXzEgRk9SIERFTEVURSBV U0lORyAoY2lkIDwgOCk7CisKKy0tIFRlc3QgVE8geyByb2xlX25hbWUgLi4uIH0KK0NSRUFURSBQ T0xJQ1kgcmxzX3A4IE9OIHJsc190YmxfMSBUTyByZWdyZXNzX3Jsc19kYXZlLCByZWdyZXNzX3Js c19hbGljZSBVU0lORyAodHJ1ZSk7CitDUkVBVEUgUE9MSUNZIHJsc19wOSBPTiBybHNfdGJsXzEg VE8gcmVncmVzc19ybHNfZXhlbXB0X3VzZXIgV0lUSCBDSEVDSyAoY2lkID0gKFNFTEVDVCBzZWNs diBGUk9NIHJsc190YmxfMikpOworCistLSBUZXN0IFVQREFURSBwb2xpY3kgd2l0aCBib3RoIFVT SU5HIGFuZCBXSVRIIENIRUNLCitDUkVBVEUgUE9MSUNZIHJsc19wMTAgT04gcmxzX3RibF8xIEZP UiBVUERBVEUKKyAgICBVU0lORyAoZGxldmVsID4gMCkgV0lUSCBDSEVDSyAoZGxldmVsIDwgMTAw KTsKKworLS0gVGVzdCBBTEwgcG9saWN5IHdpdGggYm90aCBVU0lORyBhbmQgV0lUSCBDSEVDSyAo QVMgUEVSTUlTU0lWRSBhbmQgRk9SIEFMTCBhcmUgZGVmYXVsdHMsIG9taXR0ZWQpCitDUkVBVEUg UE9MSUNZIHJsc19wMTEgT04gcmxzX3RibF8xCisgICAgVVNJTkcgKGRsZXZlbCA+PSAxKSBXSVRI IENIRUNLIChkbGV2ZWwgPD0gOTkpOworCistLSBUZXN0IFJFU1RSSUNUSVZFIG9uIGEgc3BlY2lm aWMgY29tbWFuZAorQ1JFQVRFIFBPTElDWSBybHNfcDEyIE9OIHJsc190YmxfMSBBUyBSRVNUUklD VElWRSBGT1IgU0VMRUNUCisgICAgVVNJTkcgKGNpZCA+IDApOworCistLSBOVUxMIGlucHV0cyBz aG91bGQgcmV0dXJuIG5vIHJvd3MKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHBnX2dldF9wb2xpY3lf ZGRsKE5VTEwsICdybHNfcDEnKTsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHBnX2dldF9wb2xpY3lf ZGRsKCdybHNfdGJsXzEnLCBOVUxMKTsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHBnX2dldF9wb2xp Y3lfZGRsKE5VTEwsIE5VTEwpOworCistLSBUYWJsZSBkb2VzIG5vdCBleGlzdAorU0VMRUNUICog RlJPTSBwZ19nZXRfcG9saWN5X2RkbCgnbm9uZXhpc3RlbnRfdGJsJywgJ3Jsc19wMScpOworLS0g UG9saWN5IGRvZXMgbm90IGV4aXN0CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdy bHNfdGJsXzEnLCAnbm9uZXhpc3RlbnRfcG9sJyk7CisKKy0tIFdpdGhvdXQgcHJldHR5IGZvcm1h dHRpbmcgKGRlZmF1bHQpOyBhbHNvIHZlcmlmeSBleHBsaWNpdCBmYWxzZSBlcXVhbHMgZGVmYXVs dAorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMScp OworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMicp OworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMycp OworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNCcp OworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNScp OworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNicp OworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNycp OworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wOCcp OworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wOScp OworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMTAn KTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDEx Jyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3Ax MicpOworLS0gRXhwbGljaXQgZmFsc2UgbXVzdCBtYXRjaCBvbWl0dGluZyB0aGUgYXJndW1lbnQK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDEwJywg ZmFsc2UpOworLS0gTlVMTCBwcmV0dHkgbXVzdCBhbHNvIGRlZmF1bHQgdG8gbm9uLXByZXR0eQor U0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMTAnLCBO VUxMKTsKKworLS0gcHJldHR5IGFjY2VwdHMgYWxsIHN0YW5kYXJkIGJvb2xlYW4gcmVwcmVzZW50 YXRpb25zOiB0cnVlL2ZhbHNlLCBvbi9vZmYsIDEvMAorXHBzZXQgZm9ybWF0IHVuYWxpZ25lZAor U0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMycsICdv bic6OmJvb2wpOworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywg J3Jsc19wMycsICcxJzo6Ym9vbCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdy bHNfdGJsXzEnLCAncmxzX3AzJywgJ29mZic6OmJvb2wpOworU0VMRUNUICogRlJPTSBwZ19nZXRf cG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMycsICcwJzo6Ym9vbCk7CitccHNldCBmb3Jt YXQgYWxpZ25lZAorCistLSBXaXRoIHByZXR0eSBmb3JtYXR0aW5nCitccHNldCBmb3JtYXQgdW5h bGlnbmVkCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxz X3AxJywgdHJ1ZSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEn LCAncmxzX3AyJywgdHJ1ZSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNf dGJsXzEnLCAncmxzX3AzJywgdHJ1ZSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRs KCdybHNfdGJsXzEnLCAncmxzX3A0JywgdHJ1ZSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xp Y3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A1JywgdHJ1ZSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A2JywgdHJ1ZSk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A3JywgdHJ1ZSk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A4JywgdHJ1ZSk7CitT RUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A5JywgdHJ1 ZSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3Ax MCcsIHRydWUpOworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywg J3Jsc19wMTEnLCB0cnVlKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190 YmxfMScsICdybHNfcDEyJywgdHJ1ZSk7CitccHNldCBmb3JtYXQgYWxpZ25lZAorCistLSBSb3Vu ZC10cmlwOiB0aGUgZ2VuZXJhdGVkIERETCBtdXN0IGJlIHJlLWV4ZWN1dGFibGUsIGluY2x1ZGlu ZyBmb3IgYXRvbWljCistLSBib29sZWFuIGV4cHJlc3Npb25zIHRoYXQgcGdfZ2V0X2V4cHIoKSBk b2VzIG5vdCBwYXJlbnRoZXNpemUuCitDUkVBVEUgVEFCTEUgcmxzX3J0IChhIGludCk7CitDUkVB VEUgUE9MSUNZIHJ0X3RydWUgT04gcmxzX3J0IFVTSU5HICh0cnVlKTsKK0NSRUFURSBQT0xJQ1kg cnRfZmFsc2UgT04gcmxzX3J0IEZPUiBJTlNFUlQgV0lUSCBDSEVDSyAoZmFsc2UpOworQ1JFQVRF IFRFTVAgVEFCTEUgcnRfZGRsIEFTCisgICAgU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNf cnQnLCAncnRfdHJ1ZScpIEFTIGRkbAorICAgIFVOSU9OIEFMTAorICAgIFNFTEVDVCBwZ19nZXRf cG9saWN5X2RkbCgncmxzX3J0JywgJ3J0X2ZhbHNlJyk7CitEUk9QIFBPTElDWSBydF90cnVlIE9O IHJsc19ydDsKK0RST1AgUE9MSUNZIHJ0X2ZhbHNlIE9OIHJsc19ydDsKK1NFTEVDVCBkZGwgRlJP TSBydF9kZGwgT1JERVIgQlkgZGRsIFxnZXhlYworU0VMRUNUIHBvbG5hbWUgRlJPTSBwZ19wb2xp Y3kgV0hFUkUgcG9scmVsaWQgPSAncmxzX3J0Jzo6cmVnY2xhc3MgT1JERVIgQlkgcG9sbmFtZTsK K0RST1AgVEFCTEUgcmxzX3J0OworCistLSBTY2hlbWEtcXVhbGlmaWNhdGlvbjogZnVuY3Rpb24g cmVmZXJlbmNlcyBpbiBleHByZXNzaW9ucyBtdXN0IGJlCistLSBmdWxseSBxdWFsaWZpZWQgcmVn YXJkbGVzcyBvZiB0aGUgY2FsbGVyJ3Mgc2VhcmNoX3BhdGguCitDUkVBVEUgU0NIRU1BIHJsc19z MTsKK0NSRUFURSBTQ0hFTUEgcmxzX3MyOworQ1JFQVRFIEZVTkNUSU9OIHJsc19zMS5ybHNfZihp bnQpIFJFVFVSTlMgYm9vbCBMQU5HVUFHRSBzcWwgQVMgJ1NFTEVDVCAkMSA+IDAnOworQ1JFQVRF IEZVTkNUSU9OIHJsc19zMi5ybHNfZihpbnQpIFJFVFVSTlMgYm9vbCBMQU5HVUFHRSBzcWwgQVMg J1NFTEVDVCAkMSA8IDAnOworQ1JFQVRFIFRBQkxFIHJsc190YmxfMyAoYSBpbnQpOworQ1JFQVRF IFBPTElDWSBybHNfcGYgT04gcmxzX3RibF8zIFVTSU5HIChybHNfczEucmxzX2YoYSkpOworLS0g V2l0aCBybHNfczEgaW4gcGF0aCwgcmxzX2Ygc2hvdWxkIHN0aWxsIGFwcGVhciBzY2hlbWEtcXVh bGlmaWVkIGluIERETC4KK1NFVCBzZWFyY2hfcGF0aCA9IHJlZ3Jlc3NfcmxzX3NjaGVtYSwgcmxz X3MxOworXHBzZXQgZm9ybWF0IHVuYWxpZ25lZAorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5 X2RkbCgncmxzX3RibF8zJywgJ3Jsc19wZicpOworXHBzZXQgZm9ybWF0IGFsaWduZWQKKy0tIFJl c3RvcmUgdGhlIHRlc3QncyBzZWFyY2hfcGF0aCBiZWZvcmUgY2xlYW51cC4KK1NFVCBzZWFyY2hf cGF0aCA9IHJlZ3Jlc3NfcmxzX3NjaGVtYTsKK0RST1AgUE9MSUNZIHJsc19wZiBPTiBybHNfdGJs XzM7CitEUk9QIFRBQkxFIHJsc190YmxfMzsKK0RST1AgRlVOQ1RJT04gcmxzX3MxLnJsc19mKGlu dCk7CitEUk9QIEZVTkNUSU9OIHJsc19zMi5ybHNfZihpbnQpOworRFJPUCBTQ0hFTUEgcmxzX3Mx OworRFJPUCBTQ0hFTUEgcmxzX3MyOworCistLSBDbGVhbiB1cCBvYmplY3RzIGNyZWF0ZWQgZm9y IHRlc3RpbmcgcGdfZ2V0X3BvbGljeV9kZGwgZnVuY3Rpb24uCitEUk9QIFBPTElDWSBybHNfcDEg T04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3AyIE9OIHJsc190YmxfMTsKK0RST1AgUE9M SUNZIHJsc19wMyBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDQgT04gcmxzX3RibF8x OworRFJPUCBQT0xJQ1kgcmxzX3A1IE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wNiBP TiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDcgT04gcmxzX3RibF8xOworRFJPUCBQT0xJ Q1kgcmxzX3A4IE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wOSBPTiBybHNfdGJsXzE7 CitEUk9QIFBPTElDWSBybHNfcDEwIE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wMTEg T04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3AxMiBPTiBybHNfdGJsXzE7CitEUk9QIFRB QkxFIHJsc190YmxfMTsKK0RST1AgVEFCTEUgcmxzX3RibF8yOworCiAtLQogLS0gQ2xlYW4gdXAg b2JqZWN0cwogLS0KLS0gCjIuNTEuMAoK --000000000000f687a806562b7ed5--